cdk-amazon-chime-resources
Version:

203 lines • 31.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DeleteMediaInsightsPipelineConfiguration = exports.UpdateMediaInsightsPipelineConfiguration = exports.CreateMediaInsightsPipelineConfiguration = void 0;
const client_chime_sdk_media_pipelines_1 = require("@aws-sdk/client-chime-sdk-media-pipelines");
const client_ssm_1 = require("@aws-sdk/client-ssm");
const ssmClient = new client_ssm_1.SSMClient({ region: process.env.AWS_REGION });
const chimeSDKMediaPipelineClient = new client_chime_sdk_media_pipelines_1.ChimeSDKMediaPipelinesClient({
region: process.env.AWS_REGION,
});
function capitalizeKeys(obj) {
if (Array.isArray(obj)) {
return obj.map((item) => capitalizeKeys(item));
}
if (typeof obj === 'object') {
const capitalizedObj = {};
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
const capitalizedKey = key.charAt(0).toUpperCase() + key.slice(1);
const value = obj[key];
capitalizedObj[capitalizedKey] =
typeof value === 'string' && !isNaN(parseFloat(value))
? parseFloat(value)
: capitalizeKeys(value);
}
}
return capitalizedObj;
}
return obj;
}
function capitalizeElementsKeys(elements) {
return capitalizeKeys(elements);
}
let createMediaInsightsPipelineConfigurationResponse;
let createMediaInsightsPipelineConfigurationParams;
const formatProps = (props) => {
let formattedElements = [];
let formattedTags = [];
let formattedRealTimeAlertConfiguration = {};
let formattedRealTimeAlertRules = [];
console.info(`Formatting Props: ${JSON.stringify(props)}`);
if (props.elements) {
console.info(`Formatting Elements: ${JSON.stringify(props.elements)}`);
console.log(`Current formattedElements: ${formattedElements}`);
props.elements.forEach((element) => {
formattedElements.push(capitalizeElementsKeys(element));
});
console.info(`Formatted Elements: ${JSON.stringify(formattedElements)}`);
}
console.log(`New formattedElements: ${formattedElements}`);
console.log(`Current formattedTags: ${formattedTags}`);
if (props.tags) {
console.info(`Formatting Tags: ${JSON.stringify(props.tags)}`);
props.tags.forEach((tag) => {
formattedTags.push(capitalizeKeys(tag));
});
console.info(`Formatted Tags: ${JSON.stringify(formattedTags)}`);
}
console.log(`New formattedTags: ${formattedTags}`);
if (props.realTimeAlertConfiguration) {
console.info(`Formatting Real Time Alert Configuration: ${JSON.stringify(props.realTimeAlertConfiguration)}`);
props.realTimeAlertConfiguration.rules.forEach((rule) => {
formattedRealTimeAlertRules.push(capitalizeKeys(rule));
});
formattedRealTimeAlertConfiguration = {
Disabled: props.realTimeAlertConfiguration.disabled,
Rules: formattedRealTimeAlertRules,
};
console.info(`Formatted Real Time Alert Configuration: ${JSON.stringify(formattedRealTimeAlertConfiguration)}`);
}
const mediaInsightsPipelineConfigurationParams = {
ResourceAccessRoleArn: props.resourceAccessRoleArn,
MediaInsightsPipelineConfigurationName: props.mediaInsightsPipelineConfigurationName,
...(props.tags && { Tags: formattedTags }),
...(props.clientRequestToken && {
ClientRequestToken: props.clientRequestToken,
}),
...(props.elements && {
Elements: formattedElements,
}),
...(props.realTimeAlertConfiguration && {
RealTimeAlertConfiguration: formattedRealTimeAlertConfiguration,
}),
};
console.info(`mediaInsightsPipelineConfigurationParams: ${JSON.stringify(mediaInsightsPipelineConfigurationParams)}`);
return mediaInsightsPipelineConfigurationParams;
};
const CreateMediaInsightsPipelineConfiguration = async (uid, props) => {
console.log(`Creating Media Insights Pipeline Configuration: ${uid}`);
console.log(`Create Media Insights Pipeline Configuration props: ${JSON.stringify(props)}`);
createMediaInsightsPipelineConfigurationParams = formatProps(props);
console.log(`Create Media Insights Pipeline Configuration params: ${JSON.stringify(createMediaInsightsPipelineConfigurationParams)}`);
try {
createMediaInsightsPipelineConfigurationResponse =
await chimeSDKMediaPipelineClient.send(new client_chime_sdk_media_pipelines_1.CreateMediaInsightsPipelineConfigurationCommand(createMediaInsightsPipelineConfigurationParams));
console.log(`createMediaInsightsPipelineConfigurationResponse: ${JSON.stringify(createMediaInsightsPipelineConfigurationResponse)}`);
}
catch (error) {
if (error instanceof Error) {
console.error(error);
throw error;
}
}
try {
await ssmClient.send(new client_ssm_1.PutParameterCommand({
Name: '/chime/MediaInsightsPipelineConfigurationArn' + uid,
Value: createMediaInsightsPipelineConfigurationResponse.MediaInsightsPipelineConfiguration
.MediaInsightsPipelineConfigurationArn,
Description: 'Media Insight Pipeline Configuration ARN' + uid,
Overwrite: true,
Type: 'String',
}));
}
catch (error) {
if (error instanceof Error) {
console.error(error);
throw error;
}
}
return createMediaInsightsPipelineConfigurationResponse.MediaInsightsPipelineConfiguration;
};
exports.CreateMediaInsightsPipelineConfiguration = CreateMediaInsightsPipelineConfiguration;
let updateMediaInsightsPipelineConfigurationParams;
let updateMediaInsightsPipelineConfigurationResponse;
let updateMediaInsightsPipelineIdentifier;
let getParameterCommandOutput;
const UpdateMediaInsightsPipelineConfiguration = async (uid, props) => {
console.log(`Updating Media Insights Pipeline Configuration: ${uid}`);
console.log(`Updating Media Insights Pipeline Configuration props: ${JSON.stringify(props)}`);
try {
getParameterCommandOutput = await ssmClient.send(new client_ssm_1.GetParameterCommand({
Name: '/chime/MediaInsightsPipelineConfigurationArn' + uid,
}));
}
catch (error) {
if (error instanceof Error) {
console.error(error);
throw error;
}
}
updateMediaInsightsPipelineIdentifier =
getParameterCommandOutput.Parameter.Value;
updateMediaInsightsPipelineConfigurationParams = {
...formatProps(props),
Identifier: updateMediaInsightsPipelineIdentifier,
};
console.log(`Update Media Insights Pipeline Configuration params: ${JSON.stringify(updateMediaInsightsPipelineConfigurationParams)}`);
try {
updateMediaInsightsPipelineConfigurationResponse =
await chimeSDKMediaPipelineClient.send(new client_chime_sdk_media_pipelines_1.UpdateMediaInsightsPipelineConfigurationCommand(updateMediaInsightsPipelineConfigurationParams));
console.log(`createMediaInsightsPipelineConfigurationResponse: ${JSON.stringify(createMediaInsightsPipelineConfigurationResponse)}`);
}
catch (error) {
if (error instanceof Error) {
console.error(error);
throw error;
}
}
return updateMediaInsightsPipelineConfigurationResponse.MediaInsightsPipelineConfiguration;
};
exports.UpdateMediaInsightsPipelineConfiguration = UpdateMediaInsightsPipelineConfiguration;
let deleteMediaInsightsPipelineIdentifier;
const DeleteMediaInsightsPipelineConfiguration = async (uid) => {
console.log(`Deleting Media Insights Pipeline Configuration: ${uid}`);
try {
getParameterCommandOutput = await ssmClient.send(new client_ssm_1.GetParameterCommand({
Name: '/chime/MediaInsightsPipelineConfigurationArn' + uid,
}));
}
catch (error) {
if (error instanceof Error) {
console.error(error);
throw error;
}
}
try {
await ssmClient.send(new client_ssm_1.DeleteParameterCommand({
Name: '/chime/MediaInsightsPipelineConfigurationArn' + uid,
}));
}
catch (error) {
if (error instanceof Error) {
console.error(error);
throw error;
}
}
deleteMediaInsightsPipelineIdentifier =
getParameterCommandOutput.Parameter.Value;
console.info(`deleteMediaInsightsPipelineIdentifier: ${deleteMediaInsightsPipelineIdentifier}`);
try {
await chimeSDKMediaPipelineClient.send(new client_chime_sdk_media_pipelines_1.DeleteMediaInsightsPipelineConfigurationCommand({
Identifier: deleteMediaInsightsPipelineIdentifier,
}));
}
catch (error) {
if (error instanceof Error) {
console.error(error);
throw error;
}
}
return;
};
exports.DeleteMediaInsightsPipelineConfiguration = DeleteMediaInsightsPipelineConfiguration;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWFJbnNpZ2h0c1BpcGVsaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Jlc291cmNlcy9tZWRpYS1waXBlbGluZXMvbWVkaWFJbnNpZ2h0c1BpcGVsaW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGdHQWFtRDtBQUVuRCxvREFNNkI7QUFPN0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxzQkFBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUVwRSxNQUFNLDJCQUEyQixHQUFHLElBQUksK0RBQTRCLENBQUM7SUFDbkUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVTtDQUMvQixDQUFDLENBQUM7QUFFSCxTQUFTLGNBQWMsQ0FBQyxHQUFRO0lBQzlCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUIsTUFBTSxjQUFjLEdBQTJCLEVBQUUsQ0FBQztRQUNsRCxLQUFLLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM1QixNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xFLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkIsY0FBYyxDQUFDLGNBQWMsQ0FBQztvQkFDNUIsT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDcEQsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7d0JBQ25CLENBQUMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsU0FBUyxzQkFBc0IsQ0FDN0IsUUFBa0I7SUFFbEIsT0FBTyxjQUFjLENBQUMsUUFBUSxDQUE4QyxDQUFDO0FBQy9FLENBQUM7QUFFRCxJQUFJLGdEQUF1RyxDQUFDO0FBQzVHLElBQUksOENBQW9HLENBQUM7QUFFekcsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFpQyxFQUFFLEVBQUU7SUFDeEQsSUFBSSxpQkFBaUIsR0FBZ0QsRUFBRSxDQUFDO0lBQ3hFLElBQUksYUFBYSxHQUFVLEVBQUUsQ0FBQztJQUM5QixJQUFJLG1DQUFtQyxHQUErQixFQUFFLENBQUM7SUFDekUsSUFBSSwyQkFBMkIsR0FBd0IsRUFBRSxDQUFDO0lBRTFELE9BQU8sQ0FBQyxJQUFJLENBQUMscUJBQXFCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNELElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ25CLE9BQU8sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2RSxPQUFPLENBQUMsR0FBRyxDQUFDLDhCQUE4QixpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDL0QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNqQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMxRCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLGlCQUFpQixFQUFFLENBQUMsQ0FBQztJQUMzRCxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBRXZELElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDekIsYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELElBQUksS0FBSyxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDckMsT0FBTyxDQUFDLElBQUksQ0FDViw2Q0FBNkMsSUFBSSxDQUFDLFNBQVMsQ0FDekQsS0FBSyxDQUFDLDBCQUEwQixDQUNqQyxFQUFFLENBQ0osQ0FBQztRQUVGLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdEQsMkJBQTJCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3pELENBQUMsQ0FBQyxDQUFDO1FBRUgsbUNBQW1DLEdBQUc7WUFDcEMsUUFBUSxFQUFFLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxRQUFRO1lBQ25ELEtBQUssRUFBRSwyQkFBMkI7U0FDbkMsQ0FBQztRQUVGLE9BQU8sQ0FBQyxJQUFJLENBQ1YsNENBQTRDLElBQUksQ0FBQyxTQUFTLENBQ3hELG1DQUFtQyxDQUNwQyxFQUFFLENBQ0osQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLHdDQUF3QyxHQUFHO1FBQy9DLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxxQkFBcUI7UUFDbEQsc0NBQXNDLEVBQ3BDLEtBQUssQ0FBQyxzQ0FBc0M7UUFDOUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLENBQUM7UUFDMUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsSUFBSTtZQUM5QixrQkFBa0IsRUFBRSxLQUFLLENBQUMsa0JBQWtCO1NBQzdDLENBQUM7UUFDRixHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSTtZQUNwQixRQUFRLEVBQUUsaUJBQWlCO1NBQzVCLENBQUM7UUFDRixHQUFHLENBQUMsS0FBSyxDQUFDLDBCQUEwQixJQUFJO1lBQ3RDLDBCQUEwQixFQUFFLG1DQUFtQztTQUNoRSxDQUFDO0tBQ0gsQ0FBQztJQUVGLE9BQU8sQ0FBQyxJQUFJLENBQ1YsNkNBQTZDLElBQUksQ0FBQyxTQUFTLENBQ3pELHdDQUF3QyxDQUN6QyxFQUFFLENBQ0osQ0FBQztJQUVGLE9BQU8sd0NBQXdDLENBQUM7QUFDbEQsQ0FBQyxDQUFDO0FBR0ssTUFBTSx3Q0FBd0MsR0FBRyxLQUFLLEVBQzNELEdBQVcsRUFDWCxLQUFpQyxFQUNqQyxFQUFFO0lBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtREFBbUQsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN0RSxPQUFPLENBQUMsR0FBRyxDQUNULHVEQUF1RCxJQUFJLENBQUMsU0FBUyxDQUNuRSxLQUFLLENBQ04sRUFBRSxDQUNKLENBQUM7SUFDRiw4Q0FBOEMsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEUsT0FBTyxDQUFDLEdBQUcsQ0FDVCx3REFBd0QsSUFBSSxDQUFDLFNBQVMsQ0FDcEUsOENBQThDLENBQy9DLEVBQUUsQ0FDSixDQUFDO0lBRUYsSUFBSSxDQUFDO1FBQ0gsZ0RBQWdEO1lBQzlDLE1BQU0sMkJBQTJCLENBQUMsSUFBSSxDQUNwQyxJQUFJLGtGQUErQyxDQUNqRCw4Q0FBOEMsQ0FDL0MsQ0FDRixDQUFDO1FBQ0osT0FBTyxDQUFDLEdBQUcsQ0FDVCxxREFBcUQsSUFBSSxDQUFDLFNBQVMsQ0FDakUsZ0RBQWdELENBQ2pELEVBQUUsQ0FDSixDQUFDO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFJLEtBQUssWUFBWSxLQUFLLEVBQUUsQ0FBQztZQUMzQixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JCLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQ2xCLElBQUksZ0NBQW1CLENBQUM7WUFDdEIsSUFBSSxFQUFFLDhDQUE4QyxHQUFHLEdBQUc7WUFDMUQsS0FBSyxFQUNILGdEQUFnRCxDQUFDLGtDQUFtQztpQkFDakYscUNBQXFDO1lBQzFDLFdBQVcsRUFBRSwwQ0FBMEMsR0FBRyxHQUFHO1lBQzdELFNBQVMsRUFBRSxJQUFJO1lBQ2YsSUFBSSxFQUFFLFFBQVE7U0FDZixDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFLENBQUM7WUFDM0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQixNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxnREFBZ0QsQ0FBQyxrQ0FBa0MsQ0FBQztBQUM3RixDQUFDLENBQUM7QUF2RFcsUUFBQSx3Q0FBd0MsNENBdURuRDtBQUVGLElBQUksOENBQW9HLENBQUM7QUFDekcsSUFBSSxnREFBdUcsQ0FBQztBQUM1RyxJQUFJLHFDQUE2QyxDQUFDO0FBQ2xELElBQUkseUJBQW9ELENBQUM7QUFFbEQsTUFBTSx3Q0FBd0MsR0FBRyxLQUFLLEVBQzNELEdBQVcsRUFDWCxLQUFpQyxFQUNqQyxFQUFFO0lBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtREFBbUQsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN0RSxPQUFPLENBQUMsR0FBRyxDQUNULHlEQUF5RCxJQUFJLENBQUMsU0FBUyxDQUNyRSxLQUFLLENBQ04sRUFBRSxDQUNKLENBQUM7SUFFRixJQUFJLENBQUM7UUFDSCx5QkFBeUIsR0FBRyxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQzlDLElBQUksZ0NBQW1CLENBQUM7WUFDdEIsSUFBSSxFQUFFLDhDQUE4QyxHQUFHLEdBQUc7U0FDM0QsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLElBQUksS0FBSyxZQUFZLEtBQUssRUFBRSxDQUFDO1lBQzNCLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUNELHFDQUFxQztRQUNuQyx5QkFBeUIsQ0FBQyxTQUFVLENBQUMsS0FBTSxDQUFDO0lBRTlDLDhDQUE4QyxHQUFHO1FBQy9DLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztRQUNyQixVQUFVLEVBQUUscUNBQXFDO0tBQ2xELENBQUM7SUFFRixPQUFPLENBQUMsR0FBRyxDQUNULHdEQUF3RCxJQUFJLENBQUMsU0FBUyxDQUNwRSw4Q0FBOEMsQ0FDL0MsRUFBRSxDQUNKLENBQUM7SUFDRixJQUFJLENBQUM7UUFDSCxnREFBZ0Q7WUFDOUMsTUFBTSwyQkFBMkIsQ0FBQyxJQUFJLENBQ3BDLElBQUksa0ZBQStDLENBQ2pELDhDQUE4QyxDQUMvQyxDQUNGLENBQUM7UUFDSixPQUFPLENBQUMsR0FBRyxDQUNULHFEQUFxRCxJQUFJLENBQUMsU0FBUyxDQUNqRSxnREFBZ0QsQ0FDakQsRUFBRSxDQUNKLENBQUM7SUFDSixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLElBQUksS0FBSyxZQUFZLEtBQUssRUFBRSxDQUFDO1lBQzNCLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sZ0RBQWdELENBQUMsa0NBQWtDLENBQUM7QUFDN0YsQ0FBQyxDQUFDO0FBdkRXLFFBQUEsd0NBQXdDLDRDQXVEbkQ7QUFFRixJQUFJLHFDQUE2QyxDQUFDO0FBRTNDLE1BQU0sd0NBQXdDLEdBQUcsS0FBSyxFQUFFLEdBQVcsRUFBRSxFQUFFO0lBQzVFLE9BQU8sQ0FBQyxHQUFHLENBQUMsbURBQW1ELEdBQUcsRUFBRSxDQUFDLENBQUM7SUFFdEUsSUFBSSxDQUFDO1FBQ0gseUJBQXlCLEdBQUcsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUM5QyxJQUFJLGdDQUFtQixDQUFDO1lBQ3RCLElBQUksRUFBRSw4Q0FBOEMsR0FBRyxHQUFHO1NBQzNELENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFJLEtBQUssWUFBWSxLQUFLLEVBQUUsQ0FBQztZQUMzQixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JCLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQ2xCLElBQUksbUNBQXNCLENBQUM7WUFDekIsSUFBSSxFQUFFLDhDQUE4QyxHQUFHLEdBQUc7U0FDM0QsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLElBQUksS0FBSyxZQUFZLEtBQUssRUFBRSxDQUFDO1lBQzNCLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVELHFDQUFxQztRQUNuQyx5QkFBeUIsQ0FBQyxTQUFVLENBQUMsS0FBTSxDQUFDO0lBRTlDLE9BQU8sQ0FBQyxJQUFJLENBQ1YsMENBQTBDLHFDQUFxQyxFQUFFLENBQ2xGLENBQUM7SUFDRixJQUFJLENBQUM7UUFDSCxNQUFNLDJCQUEyQixDQUFDLElBQUksQ0FDcEMsSUFBSSxrRkFBK0MsQ0FBQztZQUNsRCxVQUFVLEVBQUUscUNBQXFDO1NBQ2xELENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFJLEtBQUssWUFBWSxLQUFLLEVBQUUsQ0FBQztZQUMzQixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JCLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPO0FBQ1QsQ0FBQyxDQUFDO0FBaERXLFFBQUEsd0NBQXdDLDRDQWdEbkQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDcmVhdGVNZWRpYUluc2lnaHRzUGlwZWxpbmVDb25maWd1cmF0aW9uQ29tbWFuZCxcbiAgQ3JlYXRlTWVkaWFJbnNpZ2h0c1BpcGVsaW5lQ29uZmlndXJhdGlvbkNvbW1hbmRJbnB1dCxcbiAgQ3JlYXRlTWVkaWFJbnNpZ2h0c1BpcGVsaW5lQ29uZmlndXJhdGlvbkNvbW1hbmRPdXRwdXQsXG4gIFVwZGF0ZU1lZGlhSW5zaWdodHNQaXBlbGluZUNvbmZpZ3VyYXRpb25Db21tYW5kLFxuICBVcGRhdGVNZWRpYUluc2lnaHRzUGlwZWxpbmVDb25maWd1cmF0aW9uQ29tbWFuZElucHV0LFxuICBVcGRhdGVNZWRpYUluc2lnaHRzUGlwZWxpbmVDb25maWd1cmF0aW9uQ29tbWFuZE91dHB1dCxcbiAgRGVsZXRlTWVkaWFJbnNpZ2h0c1BpcGVsaW5lQ29uZmlndXJhdGlvbkNvbW1hbmQsXG4gIENoaW1lU0RLTWVkaWFQaXBlbGluZXNDbGllbnQsXG4gIE1lZGlhSW5zaWdodHNQaXBlbGluZUNvbmZpZ3VyYXRpb25FbGVtZW50LFxuICBUYWcsXG4gIFJlYWxUaW1lQWxlcnRDb25maWd1cmF0aW9uLFxuICBSZWFsVGltZUFsZXJ0UnVsZSxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNoaW1lLXNkay1tZWRpYS1waXBlbGluZXMnO1xuXG5pbXBvcnQge1xuICBTU01DbGllbnQsXG4gIERlbGV0ZVBhcmFtZXRlckNvbW1hbmQsXG4gIEdldFBhcmFtZXRlckNvbW1hbmQsXG4gIEdldFBhcmFtZXRlckNvbW1hbmRPdXRwdXQsXG4gIFB1dFBhcmFtZXRlckNvbW1hbmQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zc20nO1xuXG5pbXBvcnQge1xuICBNZWRpYUluc2lnaHRzUGlwZWxpbmVQcm9wcyxcbiAgRWxlbWVudHMsXG59IGZyb20gJy4uLy4uL21lZGlhLXBpcGVsaW5lcy9tZWRpYUluc2lnaHRzUGlwZWxpbmUnO1xuXG5jb25zdCBzc21DbGllbnQgPSBuZXcgU1NNQ2xpZW50KHsgcmVnaW9uOiBwcm9jZXNzLmVudi5BV1NfUkVHSU9OIH0pO1xuXG5jb25zdCBjaGltZVNES01lZGlhUGlwZWxpbmVDbGllbnQgPSBuZXcgQ2hpbWVTREtNZWRpYVBpcGVsaW5lc0NsaWVudCh7XG4gIHJlZ2lvbjogcHJvY2Vzcy5lbnYuQVdTX1JFR0lPTixcbn0pO1xuXG5mdW5jdGlvbiBjYXBpdGFsaXplS2V5cyhvYmo6IGFueSk6IGFueSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICByZXR1cm4gb2JqLm1hcCgoaXRlbSkgPT4gY2FwaXRhbGl6ZUtleXMoaXRlbSkpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgY2FwaXRhbGl6ZWRPYmo6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBjb25zdCBjYXBpdGFsaXplZEtleSA9IGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBvYmpba2V5XTtcbiAgICAgICAgY2FwaXRhbGl6ZWRPYmpbY2FwaXRhbGl6ZWRLZXldID1cbiAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICFpc05hTihwYXJzZUZsb2F0KHZhbHVlKSlcbiAgICAgICAgICAgID8gcGFyc2VGbG9hdCh2YWx1ZSlcbiAgICAgICAgICAgIDogY2FwaXRhbGl6ZUtleXModmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2FwaXRhbGl6ZWRPYmo7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBjYXBpdGFsaXplRWxlbWVudHNLZXlzKFxuICBlbGVtZW50czogRWxlbWVudHMsXG4pOiBNZWRpYUluc2lnaHRzUGlwZWxpbmVDb25maWd1cmF0aW9uRWxlbWVudCB7XG4gIHJldHVybiBjYXBpdGFsaXplS2V5cyhlbGVtZW50cykgYXMgTWVkaWFJbnNpZ2h0c1BpcGVsaW5lQ29uZmlndXJhdGlvbkVsZW1lbnQ7XG59XG5cbmxldCBjcmVhdGVNZWRpYUluc2lnaHRzUGlwZWxpbmVDb25maWd1cmF0aW9uUmVzcG9uc2U6IENyZWF0ZU1lZGlhSW5zaWdodHNQaXBlbGluZUNvbmZpZ3VyYXRpb25Db21tYW5kT3V0cHV0O1xubGV0IGNyZWF0ZU1lZGlhSW5zaWdodHNQaXBlbGluZUNvbmZpZ3VyYXRpb25QYXJhbXM6IENyZWF0ZU1lZGlhSW5zaWdodHNQaXBlbGluZUNvbmZpZ3VyYXRpb25Db21tYW5kSW5wdXQ7XG5cbmNvbnN0IGZvcm1hdFByb3BzID0gKHByb3BzOiBNZWRpYUluc2lnaHRzUGlwZWxpbmVQcm9wcykgPT4ge1xuICBsZXQgZm9ybWF0dGVkRWxlbWVudHM6IE1lZGlhSW5zaWdodHNQaXBlbGluZUNvbmZpZ3VyYXRpb25FbGVtZW50W10gPSBbXTtcbiAgbGV0IGZvcm1hdHRlZFRhZ3M6IFRhZ1tdID0gW107XG4gIGxldCBmb3JtYXR0ZWRSZWFsVGltZUFsZXJ0Q29uZmlndXJhdGlvbjogUmVhbFRpbWVBbGVydENvbmZpZ3VyYXRpb24gPSB7fTtcbiAgbGV0IGZvcm1hdHRlZFJlYWxUaW1lQWxlcnRSdWxlczogUmVhbFRpbWVBbGVydFJ1bGVbXSA9IFtdO1xuXG4gIGNvbnNvbGUuaW5mbyhgRm9ybWF0dGluZyBQcm9wczogJHtKU09OLnN0cmluZ2lmeShwcm9wcyl9YCk7XG4gIGlmIChwcm9wcy5lbGVtZW50cykge1xuICAgIGNvbnNvbGUuaW5mbyhgRm9ybWF0dGluZyBFbGVtZW50czogJHtKU09OLnN0cmluZ2lmeShwcm9wcy5lbGVtZW50cyl9YCk7XG4gICAgY29uc29sZS5sb2coYEN1cnJlbnQgZm9ybWF0dGVkRWxlbWVudHM6ICR7Zm9ybWF0dGVkRWxlbWVudHN9YCk7XG4gICAgcHJvcHMuZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgZm9ybWF0dGVkRWxlbWVudHMucHVzaChjYXBpdGFsaXplRWxlbWVudHNLZXlzKGVsZW1lbnQpKTtcbiAgICB9KTtcbiAgICBjb25zb2xlLmluZm8oYEZvcm1hdHRlZCBFbGVtZW50czogJHtKU09OLnN0cmluZ2lmeShmb3JtYXR0ZWRFbGVtZW50cyl9YCk7XG4gIH1cbiAgY29uc29sZS5sb2coYE5ldyBmb3JtYXR0ZWRFbGVtZW50czogJHtmb3JtYXR0ZWRFbGVtZW50c31gKTtcbiAgY29uc29sZS5sb2coYEN1cnJlbnQgZm9ybWF0dGVkVGFnczogJHtmb3JtYXR0ZWRUYWdzfWApO1xuXG4gIGlmIChwcm9wcy50YWdzKSB7XG4gICAgY29uc29sZS5pbmZvKGBGb3JtYXR0aW5nIFRhZ3M6ICR7SlNPTi5zdHJpbmdpZnkocHJvcHMudGFncyl9YCk7XG4gICAgcHJvcHMudGFncy5mb3JFYWNoKCh0YWcpID0+IHtcbiAgICAgIGZvcm1hdHRlZFRhZ3MucHVzaChjYXBpdGFsaXplS2V5cyh0YWcpKTtcbiAgICB9KTtcbiAgICBjb25zb2xlLmluZm8oYEZvcm1hdHRlZCBUYWdzOiAke0pTT04uc3RyaW5naWZ5KGZvcm1hdHRlZFRhZ3MpfWApO1xuICB9XG4gIGNvbnNvbGUubG9nKGBOZXcgZm9ybWF0dGVkVGFnczogJHtmb3JtYXR0ZWRUYWdzfWApO1xuICBpZiAocHJvcHMucmVhbFRpbWVBbGVydENvbmZpZ3VyYXRpb24pIHtcbiAgICBjb25zb2xlLmluZm8oXG4gICAgICBgRm9ybWF0dGluZyBSZWFsIFRpbWUgQWxlcnQgQ29uZmlndXJhdGlvbjogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgcHJvcHMucmVhbFRpbWVBbGVydENvbmZpZ3VyYXRpb24sXG4gICAgICApfWAsXG4gICAgKTtcblxuICAgIHByb3BzLnJlYWxUaW1lQWxlcnRDb25maWd1cmF0aW9uLnJ1bGVzLmZvckVhY2goKHJ1bGUpID0+IHtcbiAgICAgIGZvcm1hdHRlZFJlYWxUaW1lQWxlcnRSdWxlcy5wdXNoKGNhcGl0YWxpemVLZXlzKHJ1bGUpKTtcbiAgICB9KTtcblxuICAgIGZvcm1hdHRlZFJlYWxUaW1lQWxlcnRDb25maWd1cmF0aW9uID0ge1xuICAgICAgRGlzYWJsZWQ6IHByb3BzLnJlYWxUaW1lQWxlcnRDb25maWd1cmF0aW9uLmRpc2FibGVkLFxuICAgICAgUnVsZXM6IGZvcm1hdHRlZFJlYWxUaW1lQWxlcnRSdWxlcyxcbiAgICB9O1xuXG4gICAgY29uc29sZS5pbmZvKFxuICAgICAgYEZvcm1hdHRlZCBSZWFsIFRpbWUgQWxlcnQgQ29uZmlndXJhdGlvbjogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgZm9ybWF0dGVkUmVhbFRpbWVBbGVydENvbmZpZ3VyYXRpb24sXG4gICAgICApfWAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IG1lZGlhSW5zaWdodHNQaXBlbGluZUNvbmZpZ3VyYXRpb25QYXJhbXMgPSB7XG4gICAgUmVzb3VyY2VBY2Nlc3NSb2xlQXJuOiBwcm9wcy5yZXNvdXJjZUFjY2Vzc1JvbGVBcm4sXG4gICAgTWVkaWFJbnNpZ2h0c1BpcGVsaW5lQ29uZmlndXJhdGlvbk5hbWU6XG4gICAgICBwcm9wcy5tZWRpYUluc2lnaHRzUGlwZWxpbmVDb25maWd1cmF0aW9uTmFtZSxcbiAgICAuLi4ocHJvcHMudGFncyAmJiB7IFRhZ3M6IGZvcm1hdHRlZFRhZ3MgfSksXG4gICAgLi4uKHByb3BzLmNsaWVudFJlcXVlc3RUb2tlbiAmJiB7XG4gICAgICBDbGllbnRSZXF1ZXN0VG9rZW46IHByb3BzLmNsaWVudFJlcXVlc3RUb2tlbixcbiAgICB9KSxcbiAgICAuLi4ocHJvcHMuZWxlbWVudHMgJiYge1xuICAgICAgRWxlbWVudHM6IGZvcm1hdHRlZEVsZW1lbnRzLFxuICAgIH0pLFxuICAgIC4uLihwcm9wcy5yZWFsVGltZUFsZXJ0Q29uZmlndXJhdGlvbiAmJiB7XG4gICAgICBSZWFsVGltZUFsZXJ0Q29uZmlndXJhdGlvbjogZm9ybWF0dGVkUmVhbFRpbWVBbGVydENvbmZpZ3VyYXRpb24sXG4gICAgfSksXG4gIH07XG5cbiAgY29uc29sZS5pbmZvKFxuICAgIGBtZWRpYUluc2lnaHRzUGlwZWxpbmVDb25maWd1cmF0aW9uUGFyYW1zOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgbWVkaWFJbnNpZ2h0c1BpcGVsaW5lQ29uZmlndXJhdGlvblBhcmFtcyxcbiAgICApfWAsXG4gICk7XG5cbiAgcmV0dXJuIG1lZGlhSW5zaWdodHNQaXBlbGluZUNvbmZpZ3VyYXRpb25QYXJhbXM7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZU1lZGlhSW5zaWdodHNQaXBlbGluZUNvbmZpZ3VyYXRpb25Qcm9wcyB7fVxuZXhwb3J0IGNvbnN0IENyZWF0ZU1lZGlhSW5zaWdodHNQaXBlbGluZUNvbmZpZ3VyYXRpb24gPSBhc3luYyAoXG4gIHVpZDogc3RyaW5nLFxuICBwcm9wczogTWVkaWFJbnNpZ2h0c1BpcGVsaW5lUHJvcHMsXG4pID0+IHtcbiAgY29uc29sZS5sb2coYENyZWF0aW5nIE1lZGlhIEluc2lnaHRzIFBpcGVsaW5lIENvbmZpZ3VyYXRpb246ICR7dWlkfWApO1xuICBjb25zb2xlLmxvZyhcbiAgICBgQ3JlYXRlIE1lZGlhIEluc2lnaHRzIFBpcGVsaW5lIENvbmZpZ3VyYXRpb24gcHJvcHM6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICBwcm9wcyxcbiAgICApfWAsXG4gICk7XG4gIGNyZWF0ZU1lZGlhSW5zaWdodHNQaXBlbGluZUNvbmZpZ3VyYXRpb25QYXJhbXMgPSBmb3JtYXRQcm9wcyhwcm9wcyk7XG4gIGNvbnNvbGUubG9nKFxuICAgIGBDcmVhdGUgTWVkaWEgSW5zaWdodHMgUGlwZWxpbmUgQ29uZmlndXJhdGlvbiBwYXJhbXM6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICBjcmVhdGVNZWRpYUluc2lnaHRzUGlwZWxpbmVDb25maWd1cmF0aW9uUGFyYW1zLFxuICAgICl9YCxcbiAgKTtcblxuICB0cnkge1xuICAgIGNyZWF0ZU1lZGlhSW5zaWdodHNQaXBlbGluZUNvbmZpZ3VyYXRpb25SZXNwb25zZSA9XG4gICAgICBhd2FpdCBjaGltZVNES01lZGlhUGlwZWxpbmVDbGllbnQuc2VuZChcbiAgICAgICAgbmV3IENyZWF0ZU1lZGlhSW5zaWdodHNQaXBlbGluZUNvbmZpZ3VyYXRpb25Db21tYW5kKFxuICAgICAgICAgIGNyZWF0ZU1lZGlhSW5zaWdodHNQaXBlbGluZUNvbmZpZ3VyYXRpb25QYXJhbXMsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYGNyZWF0ZU1lZGlhSW5zaWdodHNQaXBlbGluZUNvbmZpZ3VyYXRpb25SZXNwb25zZTogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgY3JlYXRlTWVkaWFJbnNpZ2h0c1BpcGVsaW5lQ29uZmlndXJhdGlvblJlc3BvbnNlLFxuICAgICAgKX1gLFxuICAgICk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBzc21DbGllbnQuc2VuZChcbiAgICAgIG5ldyBQdXRQYXJhbWV0ZXJDb21tYW5kKHtcbiAgICAgICAgTmFtZTogJy9jaGltZS9NZWRpYUluc2lnaHRzUGlwZWxpbmVDb25maWd1cmF0aW9uQXJuJyArIHVpZCxcbiAgICAgICAgVmFsdWU6XG4gICAgICAgICAgY3JlYXRlTWVkaWFJbnNpZ2h0c1BpcGVsaW5lQ29uZmlndXJhdGlvblJlc3BvbnNlLk1lZGlhSW5zaWdodHNQaXBlbGluZUNvbmZpZ3VyYXRpb24hXG4gICAgICAgICAgICAuTWVkaWFJbnNpZ2h0c1BpcGVsaW5lQ29uZmlndXJhdGlvbkFybixcbiAgICAgICAgRGVzY3JpcHRpb246ICdNZWRpYSBJbnNpZ2h0IFBpcGVsaW5lIENvbmZpZ3VyYXRpb24gQVJOJyArIHVpZCxcbiAgICAgICAgT3ZlcndyaXRlOiB0cnVlLFxuICAgICAgICBUeXBlOiAnU3RyaW5nJyxcbiAgICAgIH0pLFxuICAgICk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBjcmVhdGVNZWRpYUluc2lnaHRzUGlwZWxpbmVDb25maWd1cmF0aW9uUmVzcG9uc2UuTWVkaWFJbnNpZ2h0c1BpcGVsaW5lQ29uZmlndXJhdGlvbjtcbn07XG5cbmxldCB1cGRhdGVNZWRpYUluc2lnaHRzUGlwZWxpbmVDb25maWd1cmF0aW9uUGFyYW1zOiBVcGRhdGVNZWRpYUluc2lnaHRzUGlwZWxpbmVDb25maWd1cmF0aW9uQ29tbWFuZElucHV0O1xubGV0IHVwZGF0ZU1lZGlhSW5zaWdodHNQaXBlbGluZUNvbmZpZ3VyYXRpb25SZXNwb25zZTogVXBkYXRlTWVkaWFJbnNpZ2h0c1BpcGVsaW5lQ29uZmlndXJhdGlvbkNvbW1hbmRPdXRwdXQ7XG5sZXQgdXBkYXRlTWVkaWFJbnNpZ2h0c1BpcGVsaW5lSWRlbnRpZmllcjogc3RyaW5nO1xubGV0IGdldFBhcmFtZXRlckNvbW1hbmRPdXRwdXQ6IEdldFBhcmFtZXRlckNvbW1hbmRPdXRwdXQ7XG5cbmV4cG9ydCBjb25zdCBVcGRhdGVNZWRpYUluc2lnaHRzUGlwZWxpbmVDb25maWd1cmF0aW9uID0gYXN5bmMgKFxuICB1aWQ6IHN0cmluZyxcbiAgcHJvcHM6IE1lZGlhSW5zaWdodHNQaXBlbGluZVByb3BzLFxuKSA9PiB7XG4gIGNvbnNvbGUubG9nKGBVcGRhdGluZyBNZWRpYSBJbnNpZ2h0cyBQaXBlbGluZSBDb25maWd1cmF0aW9uOiAke3VpZH1gKTtcbiAgY29uc29sZS5sb2coXG4gICAgYFVwZGF0aW5nIE1lZGlhIEluc2lnaHRzIFBpcGVsaW5lIENvbmZpZ3VyYXRpb24gcHJvcHM6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICBwcm9wcyxcbiAgICApfWAsXG4gICk7XG5cbiAgdHJ5IHtcbiAgICBnZXRQYXJhbWV0ZXJDb21tYW5kT3V0cHV0ID0gYXdhaXQgc3NtQ2xpZW50LnNlbmQoXG4gICAgICBuZXcgR2V0UGFyYW1ldGVyQ29tbWFuZCh7XG4gICAgICAgIE5hbWU6ICcvY2hpbWUvTWVkaWFJbnNpZ2h0c1BpcGVsaW5lQ29uZmlndXJhdGlvbkFybicgKyB1aWQsXG4gICAgICB9KSxcbiAgICApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuICB1cGRhdGVNZWRpYUluc2lnaHRzUGlwZWxpbmVJZGVudGlmaWVyID1cbiAgICBnZXRQYXJhbWV0ZXJDb21tYW5kT3V0cHV0LlBhcmFtZXRlciEuVmFsdWUhO1xuXG4gIHVwZGF0ZU1lZGlhSW5zaWdodHNQaXBlbGluZUNvbmZpZ3VyYXRpb25QYXJhbXMgPSB7XG4gICAgLi4uZm9ybWF0UHJvcHMocHJvcHMpLFxuICAgIElkZW50aWZpZXI6IHVwZGF0ZU1lZGlhSW5zaWdodHNQaXBlbGluZUlkZW50aWZpZXIsXG4gIH07XG5cbiAgY29uc29sZS5sb2coXG4gICAgYFVwZGF0ZSBNZWRpYSBJbnNpZ2h0cyBQaXBlbGluZSBDb25maWd1cmF0aW9uIHBhcmFtczogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgIHVwZGF0ZU1lZGlhSW5zaWdodHNQaXBlbGluZUNvbmZpZ3VyYXRpb25QYXJhbXMsXG4gICAgKX1gLFxuICApO1xuICB0cnkge1xuICAgIHVwZGF0ZU1lZGlhSW5zaWdodHNQaXBlbGluZUNvbmZpZ3VyYXRpb25SZXNwb25zZSA9XG4gICAgICBhd2FpdCBjaGltZVNES01lZGlhUGlwZWxpbmVDbGllbnQuc2VuZChcbiAgICAgICAgbmV3IFVwZGF0ZU1lZGlhSW5zaWdodHNQaXBlbGluZUNvbmZpZ3VyYXRpb25Db21tYW5kKFxuICAgICAgICAgIHVwZGF0ZU1lZGlhSW5zaWdodHNQaXBlbGluZUNvbmZpZ3VyYXRpb25QYXJhbXMsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYGNyZWF0ZU1lZGlhSW5zaWdodHNQaXBlbGluZUNvbmZpZ3VyYXRpb25SZXNwb25zZTogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgY3JlYXRlTWVkaWFJbnNpZ2h0c1BpcGVsaW5lQ29uZmlndXJhdGlvblJlc3BvbnNlLFxuICAgICAgKX1gLFxuICAgICk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiB1cGRhdGVNZWRpYUluc2lnaHRzUGlwZWxpbmVDb25maWd1cmF0aW9uUmVzcG9uc2UuTWVkaWFJbnNpZ2h0c1BpcGVsaW5lQ29uZmlndXJhdGlvbjtcbn07XG5cbmxldCBkZWxldGVNZWRpYUluc2lnaHRzUGlwZWxpbmVJZGVudGlmaWVyOiBzdHJpbmc7XG5cbmV4cG9ydCBjb25zdCBEZWxldGVNZWRpYUluc2lnaHRzUGlwZWxpbmVDb25maWd1cmF0aW9uID0gYXN5bmMgKHVpZDogc3RyaW5nKSA9PiB7XG4gIGNvbnNvbGUubG9nKGBEZWxldGluZyBNZWRpYSBJbnNpZ2h0cyBQaXBlbGluZSBDb25maWd1cmF0aW9uOiAke3VpZH1gKTtcblxuICB0cnkge1xuICAgIGdldFBhcmFtZXRlckNvbW1hbmRPdXRwdXQgPSBhd2FpdCBzc21DbGllbnQuc2VuZChcbiAgICAgIG5ldyBHZXRQYXJhbWV0ZXJDb21tYW5kKHtcbiAgICAgICAgTmFtZTogJy9jaGltZS9NZWRpYUluc2lnaHRzUGlwZWxpbmVDb25maWd1cmF0aW9uQXJuJyArIHVpZCxcbiAgICAgIH0pLFxuICAgICk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBzc21DbGllbnQuc2VuZChcbiAgICAgIG5ldyBEZWxldGVQYXJhbWV0ZXJDb21tYW5kKHtcbiAgICAgICAgTmFtZTogJy9jaGltZS9NZWRpYUluc2lnaHRzUGlwZWxpbmVDb25maWd1cmF0aW9uQXJuJyArIHVpZCxcbiAgICAgIH0pLFxuICAgICk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgZGVsZXRlTWVkaWFJbnNpZ2h0c1BpcGVsaW5lSWRlbnRpZmllciA9XG4gICAgZ2V0UGFyYW1ldGVyQ29tbWFuZE91dHB1dC5QYXJhbWV0ZXIhLlZhbHVlITtcblxuICBjb25zb2xlLmluZm8oXG4gICAgYGRlbGV0ZU1lZGlhSW5zaWdodHNQaXBlbGluZUlkZW50aWZpZXI6ICR7ZGVsZXRlTWVkaWFJbnNpZ2h0c1BpcGVsaW5lSWRlbnRpZmllcn1gLFxuICApO1xuICB0cnkge1xuICAgIGF3YWl0IGNoaW1lU0RLTWVkaWFQaXBlbGluZUNsaWVudC5zZW5kKFxuICAgICAgbmV3IERlbGV0ZU1lZGlhSW5zaWdodHNQaXBlbGluZUNvbmZpZ3VyYXRpb25Db21tYW5kKHtcbiAgICAgICAgSWRlbnRpZmllcjogZGVsZXRlTWVkaWFJbnNpZ2h0c1BpcGVsaW5lSWRlbnRpZmllcixcbiAgICAgIH0pLFxuICAgICk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybjtcbn07XG4iXX0=