@smartbit4all/ng-client 4.2.116 → 4.2.118
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/smart-client/smart-component-api-client.mjs +12 -10
- package/esm2022/lib/smart-client/smart-file-uploader/smart-file-uploader.component.mjs +1 -1
- package/esm2022/lib/smart-form/api/model/fileUploaderProperties.mjs +1 -1
- package/esm2022/lib/smart-form/projects.mjs +2 -1
- package/esm2022/lib/smart-form/services/smartform.service.mjs +1 -4
- package/esm2022/lib/smart-form/smartfileuploader/smartfileuploader.component.mjs +8 -2
- package/esm2022/lib/smart-form/smartform.form-model.mjs +1 -1
- package/esm2022/lib/smart-form/widgets/components/smart-file-editor/smart-file-editor.component.mjs +145 -0
- package/esm2022/lib/smart-form/widgets/smartformwidget/smartformwidget.component.mjs +7 -7
- package/esm2022/lib/view-context/smart-ui-action/components/upload-widget/upload-widget.component.mjs +6 -3
- package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.mjs +1 -1
- package/esm2022/lib/view-context/smart-view-context.module.mjs +7 -2
- package/fesm2022/smartbit4all-ng-client.mjs +170 -23
- package/fesm2022/smartbit4all-ng-client.mjs.map +1 -1
- package/lib/smart-client/smart-component-api-client.d.ts +1 -1
- package/lib/smart-form/api/model/fileUploaderProperties.d.ts +4 -1
- package/lib/smart-form/projects.d.ts +1 -0
- package/lib/smart-form/smartfileuploader/smartfileuploader.component.d.ts +2 -1
- package/lib/smart-form/smartform.form-model.d.ts +3 -0
- package/lib/smart-form/widgets/components/smart-file-editor/smart-file-editor.component.d.ts +41 -0
- package/lib/smart-form/widgets/smartformwidget/smartformwidget.component.d.ts +3 -3
- package/lib/view-context/smart-ui-action/components/upload-widget/upload-widget.component.d.ts +2 -1
- package/lib/view-context/smart-view-context.module.d.ts +52 -51
- package/package.json +1 -1
- package/smartbit4all-ng-client-4.2.118.tgz +0 -0
- package/smartbit4all-ng-client-4.2.116.tgz +0 -0
|
@@ -159,7 +159,6 @@ export class SmartFormService {
|
|
|
159
159
|
if (widget.type !== SmartFormWidgetType.INDICATOR &&
|
|
160
160
|
widget.type !== SmartFormWidgetType.LABEL &&
|
|
161
161
|
widget.type !== SmartFormWidgetType.CONTAINER &&
|
|
162
|
-
widget.type !== SmartFormWidgetType.FILE_UPLOADER &&
|
|
163
162
|
widget.type !== SmartFormWidgetType.DIVIDER &&
|
|
164
163
|
widget.type !== SmartFormWidgetType.BUTTON &&
|
|
165
164
|
widget.type !== SmartFormWidgetType.COMPONENT &&
|
|
@@ -284,7 +283,6 @@ export class SmartFormService {
|
|
|
284
283
|
if (widget.type !== SmartFormWidgetType.INDICATOR &&
|
|
285
284
|
widget.type !== SmartFormWidgetType.LABEL &&
|
|
286
285
|
widget.type !== SmartFormWidgetType.CONTAINER &&
|
|
287
|
-
widget.type !== SmartFormWidgetType.FILE_UPLOADER &&
|
|
288
286
|
widget.type !== SmartFormWidgetType.IMAGE &&
|
|
289
287
|
widget.type !== SmartFormWidgetType.SVG &&
|
|
290
288
|
widget.type !== SmartFormWidgetType.DIVIDER &&
|
|
@@ -397,7 +395,6 @@ export class SmartFormService {
|
|
|
397
395
|
widget.type !== SmartFormWidgetType.CONTAINER &&
|
|
398
396
|
widget.type !== SmartFormWidgetType.IMAGE &&
|
|
399
397
|
widget.type !== SmartFormWidgetType.SVG &&
|
|
400
|
-
widget.type !== SmartFormWidgetType.FILE_UPLOADER &&
|
|
401
398
|
widget.type !== SmartFormWidgetType.BUTTON &&
|
|
402
399
|
widget.type !== SmartFormWidgetType.DIVIDER &&
|
|
403
400
|
widget.type !== SmartFormWidgetType.CHECK_BOX_2 &&
|
|
@@ -663,4 +660,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
|
|
|
663
660
|
}], ctorParameters: () => [{ type: i1.NamedValidatorService, decorators: [{
|
|
664
661
|
type: Optional
|
|
665
662
|
}] }] });
|
|
666
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRmb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1mb3JtL3NlcnZpY2VzL3NtYXJ0Zm9ybS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFHMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7OztBQU8vRSxNQUFNLE9BQU8sZ0JBQWdCO0lBUzNCLFlBQWdDLGlCQUF5QztRQUF6QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQXdCO1FBUnhELGFBQVEsR0FBVyxXQUFXLENBQUM7UUFDaEQscUJBQWdCLEdBQUcsZ0JBQWdCLENBQUM7UUFDcEMsVUFBSyxHQUFRLEVBQUUsQ0FBQztRQTZsQkMsb0JBQWUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1FBQ2hFLDZCQUF3QixHQUFHLElBQUksTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDM0QsMEJBQXFCLEdBQUcsSUFBSSxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbEQsZ0NBQTJCLEdBQUcsSUFBSSxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDeEQsc0JBQWlCLEdBQUcsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEMsK0JBQTBCLEdBQUcsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDckQsd0JBQW1CLEdBQUcsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENB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ICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1Db250cm9sLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTZWxlY3Rpb25EZWZpbml0aW9uVHlwZUVudW0sIFNtYXJ0Rm9ybVdpZGdldFR5cGUgfSBmcm9tICcuLi9hcGknO1xyXG5pbXBvcnQgeyBTbWFydEZvcm1XaWRnZXQsIFNtYXJ0SXRlbSwgU21hcnRJdGVtcywgU21hcnRTZWxlY3QgfSBmcm9tICcuLi9zbWFydGZvcm0uZm9ybS1tb2RlbCc7XHJcbmltcG9ydCB7IFNtYXJ0Rm9ybSwgU21hcnRGb3JtQ29tcG9uZW50Q29uc3RyYWludCwgU21hcnRWYWxpZGF0b3IsIFZhbHVlIH0gZnJvbSAnLi4vc21hcnRmb3JtLm1vZGVsJztcclxuaW1wb3J0IHsgQ29tcG9uZW50TGlicmFyeSB9IGZyb20gJy4uLy4uL3ZpZXctY29udGV4dC91dGlsaXR5L2NvbXBvbmVudExpYnJhcnknO1xyXG5pbXBvcnQge1xyXG4gIE5hbWVkVmFsaWRhdG9yU2VydmljZSxcclxuICBWYWxpZGF0ZWRXaWRnZXQsXHJcbn0gZnJvbSAnLi4vLi4vc21hcnQtdmFsaWRhdGlvbi9uYW1lZC12YWxpZGF0b3Iuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBTbWFydEZvcm1TZXJ2aWNlIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGVtcHR5S2V5OiBzdHJpbmcgPSAnZSNtJXBAdCp5JztcclxuICBjb21wb25lbnRMaWJyYXJ5ID0gQ29tcG9uZW50TGlicmFyeTtcclxuICBncm91cDogYW55ID0ge307XHJcblxyXG4gIGZvcm1Hcm91cD86IFVudHlwZWRGb3JtR3JvdXA7XHJcblxyXG4gIHNtYXJ0Rm9ybT86IFNtYXJ0Rm9ybTtcclxuXHJcbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHJpdmF0ZSB2YWxpZGF0b3JQcm92aWRlcj86IE5hbWVkVmFsaWRhdG9yU2VydmljZSkge31cclxuXHJcbiAgZ2V0U21hcnRGb3JtV2lkZ2V0QnlLZXkoa2V5OiBzdHJpbmcpOiBTbWFydEZvcm1XaWRnZXQ8YW55PiB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5maW5kU21hcnRGb3JtV2lkZ2V0QnlLZXkodGhpcy5zbWFydEZvcm0/LndpZGdldHMhLCBrZXkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb2xsZWN0S2V5c0Zyb21TbWFydEZvcm0oXHJcbiAgICB3aWRnZXRzOiBTbWFydEZvcm1XaWRnZXQ8YW55PltdIHwgU21hcnRJdGVtczxhbnk+W10sXHJcbiAgICBrZXlzOiBzdHJpbmdbXVxyXG4gICk6IHN0cmluZ1tdIHtcclxuICAgIHdpZGdldHMuZm9yRWFjaCgodykgPT4ge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdy50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTlRBSU5FUiAmJlxyXG4gICAgICAgIHcudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5MQUJFTCAmJlxyXG4gICAgICAgIHcudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DSEVDS19CT1hfMiAmJlxyXG4gICAgICAgIHcudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ZT1VUVUJFX1BMQVlFUlxyXG4gICAgICApIHtcclxuICAgICAgICBrZXlzLnB1c2gody5rZXkpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICB3LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRF9DSElQUyB8fFxyXG4gICAgICAgIHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TRUxFQ1QgfHxcclxuICAgICAgICB3LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuU0VMRUNUX01VTFRJUExFIHx8XHJcbiAgICAgICAgdy50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNIRUNLX0JPWCB8fFxyXG4gICAgICAgIHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5SQURJT19CVVRUT04gfHxcclxuICAgICAgICB3LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSXHJcbiAgICAgICkge1xyXG4gICAgICAgIGlmICh3LnZhbHVlTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBrZXlzID0gdGhpcy5jb2xsZWN0S2V5c0Zyb21TbWFydEZvcm0ody52YWx1ZUxpc3QsIGtleXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh3LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YXzIpIHtcclxuICAgICAgICBpZiAody52YWx1ZUxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgbGV0IGNoaWxkcmVuS2V5cyA9IHRoaXMuY29sbGVjdEtleXNGcm9tU21hcnRGb3JtKHcudmFsdWVMaXN0LCBbXSk7XHJcbiAgICAgICAgICBjaGlsZHJlbktleXMgPSBjaGlsZHJlbktleXNcclxuICAgICAgICAgICAgLmZpbHRlcigoa2V5OiBzdHJpbmcpID0+IGtleSAhPT0gdy5rZXkpXHJcbiAgICAgICAgICAgIC5mbGF0TWFwKChrZXk6IHN0cmluZykgPT4gYCR7dy5rZXl9LiR7a2V5fWApO1xyXG5cclxuICAgICAgICAgIGtleXMucHVzaCguLi5jaGlsZHJlbktleXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGtleXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRTbWFydEZvcm1XaWRnZXRCeUtleShcclxuICAgIHdpZGdldHM6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+W10sXHJcbiAgICBrZXk6IHN0cmluZ1xyXG4gICk6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+IHwgdW5kZWZpbmVkIHtcclxuICAgIGxldCB3aWRnZXRGb3VuZEJ5S2V5OiBTbWFydEZvcm1XaWRnZXQ8YW55PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBmb3IgKGxldCB3IG9mIHdpZGdldHMpIHtcclxuICAgICAgaWYgKHcua2V5ID09PSBrZXkpIHtcclxuICAgICAgICByZXR1cm4gdztcclxuICAgICAgfSBlbHNlIGlmICh3LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmIHcudmFsdWVMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICB3aWRnZXRGb3VuZEJ5S2V5ID0gdGhpcy5maW5kU21hcnRGb3JtV2lkZ2V0QnlLZXkody52YWx1ZUxpc3QsIGtleSk7XHJcbiAgICAgICAgaWYgKHdpZGdldEZvdW5kQnlLZXkpIHtcclxuICAgICAgICAgIHJldHVybiB3aWRnZXRGb3VuZEJ5S2V5O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHdpZGdldEZvdW5kQnlLZXk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFZhbHVlRGVlcGx5KG1vZGVsOiBhbnksIGtleTogc3RyaW5nKTogYW55IHtcclxuICAgIGxldCBzcGxpdHRlZEtleSA9IGtleS5zcGxpdCgnLicpO1xyXG4gICAgbGV0IHZhbHVlOiBhbnk7XHJcblxyXG4gICAgc3BsaXR0ZWRLZXkuZm9yRWFjaCgoazogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgICB2YWx1ZSA9IG1vZGVsW2tdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHZhbHVlW2tdID09PSB1bmRlZmluZWQgfHxcclxuICAgICAgICAgIHZhbHVlW2tdID09PSBudWxsIHx8XHJcbiAgICAgICAgICAoIXZhbHVlICYmIHR5cGVvZiB2YWx1ZVtrXSAhPT0gJ2Jvb2xlYW4nKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdmFsdWUgPSAnJztcclxuICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZVtrXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgc2V0VmFsdWVEZWVwbHkobW9kZWw6IGFueSwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIGxldCBzcGxpdHRlZEtleXMgPSBrZXkuc3BsaXQoJy4nKTtcclxuXHJcbiAgICBsZXQgZGVlcE1vZGVsOiBhbnlbXSA9IFttb2RlbF07XHJcbiAgICBsZXQgdGVtcE1vZGVsOiBhbnk7XHJcblxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHNwbGl0dGVkS2V5cy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgdGVtcE1vZGVsID0gZGVlcE1vZGVsW2luZGV4XTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0eXBlb2YgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dICE9PSAnc3RyaW5nJyAmJlxyXG4gICAgICAgIHR5cGVvZiB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09ICdib29sZWFuJyAmJlxyXG4gICAgICAgIHR5cGVvZiB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09ICdudW1iZXInICYmXHJcbiAgICAgICAgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dICE9PSB1bmRlZmluZWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgZGVlcE1vZGVsLnB1c2godGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGluZGV4ID09PSBzcGxpdHRlZEtleXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgIGxldCBvbGRWYWx1ZSA9IHRlbXBNb2RlbFtzcGxpdHRlZEtleXNbaW5kZXhdXTtcclxuICAgICAgICAvLyBpZiAodmFsdWUgPT09ICcnICYmIChvbGRWYWx1ZSA9PT0gbnVsbCB8fCBvbGRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB0aGVuIGRvbid0IGNoYW5nZSB2YWx1ZS5cclxuICAgICAgICBpZiAodmFsdWUgIT09ICcnIHx8IChvbGRWYWx1ZSAhPT0gbnVsbCAmJiBvbGRWYWx1ZSAhPT0gdW5kZWZpbmVkKSkge1xyXG4gICAgICAgICAgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRQcm9wZXJ0eU5hbWVzRGVlcGx5KGVsZW1lbnQ6IGFueSk6IHN0cmluZ1tdIHtcclxuICAgIGxldCBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoZWxlbWVudCk7XHJcbiAgICBwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0eXBlb2YgZWxlbWVudFtwcm9wZXJ0eV0gPT09ICdzdHJpbmcnIHx8XHJcbiAgICAgICAgdHlwZW9mIGVsZW1lbnRbcHJvcGVydHldID09PSAnYm9vbGVhbicgfHxcclxuICAgICAgICB0eXBlb2YgZWxlbWVudFtwcm9wZXJ0eV0gPT09ICdudW1iZXInIHx8XHJcbiAgICAgICAgZWxlbWVudFtwcm9wZXJ0eV0gPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgIGVsZW1lbnRbcHJvcGVydHldID09PSBudWxsIHx8XHJcbiAgICAgICAgIWVsZW1lbnRbcHJvcGVydHldIHx8XHJcbiAgICAgICAgIWVsZW1lbnRcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBpbm5lclByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnR5TmFtZXNEZWVwbHkoZWxlbWVudFtwcm9wZXJ0eV0pO1xyXG4gICAgICBpbm5lclByb3BlcnRpZXMgPSBpbm5lclByb3BlcnRpZXMubWFwKFxyXG4gICAgICAgIChpbm5lclByb3BlcnR5OiBzdHJpbmcpID0+IGAke3Byb3BlcnR5fS4ke2lubmVyUHJvcGVydHl9YFxyXG4gICAgICApO1xyXG5cclxuICAgICAgcHJvcGVydGllcy5wdXNoKC4uLmlubmVyUHJvcGVydGllcyk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xyXG4gIH1cclxuXHJcbiAgc2V0VmFsdWVzRnJvbU1vZGVsKHdpZGdldHM/OiBTbWFydEZvcm1XaWRnZXQ8YW55PltdLCBjb21wTGliPzogQ29tcG9uZW50TGlicmFyeSk6IHZvaWQge1xyXG4gICAgY29uc3Qgc21hcnRGb3JtID0gdGhpcy5zbWFydEZvcm0hO1xyXG4gICAgY29uc3QgZGF0YSA9IHNtYXJ0Rm9ybS5jb21wb25lbnRNb2RlbD8uZGF0YTtcclxuICAgIGlmICghZGF0YSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF3aWRnZXRzKSB7XHJcbiAgICAgIHdpZGdldHMgPSBzbWFydEZvcm0ud2lkZ2V0cztcclxuICAgIH1cclxuICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gdGhpcy5jb2xsZWN0S2V5c0Zyb21TbWFydEZvcm0od2lkZ2V0cywgW10pO1xyXG5cclxuICAgIGxldCB3aWRnZXQ6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+IHwgdW5kZWZpbmVkO1xyXG4gICAgZm9yIChjb25zdCBrZXkgb2YgdGhpcy5nZXRQcm9wZXJ0eU5hbWVzRGVlcGx5KGRhdGEpKSB7XHJcbiAgICAgIGlmIChrZXlzLmluY2x1ZGVzKGtleSkpIHtcclxuICAgICAgICB3aWRnZXQgPSB0aGlzLmZpbmRTbWFydEZvcm1XaWRnZXRCeUtleSh3aWRnZXRzLCBrZXkpO1xyXG4gICAgICAgIGlmICh3aWRnZXQpIHtcclxuICAgICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVEZWVwbHkoZGF0YSwga2V5KTtcclxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyAmJiB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5UT0dHTEUpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBgJHt2YWx1ZX1gO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvbXBMaWIgPT09IHRoaXMuY29tcG9uZW50TGlicmFyeS5QUklNRU5HKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5EQVRFX1BJQ0tFUiB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRBVEVfVElNRV9QSUNLRVJcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB3aWRnZXQudmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTkRJQ0FUT1IgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTEFCRUwgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkZJTEVfVVBMT0FERVIgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuRElWSURFUiAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5CVVRUT04gJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09NUE9ORU5UICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLllPVVRVQkVfUExBWUVSXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgd2lkZ2V0LnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh3aWRnZXQuc2hvd0xhYmVsID09PSB1bmRlZmluZWQgJiYgc21hcnRGb3JtLnNob3dMYWJlbCkge1xyXG4gICAgICAgICAgICAgIHdpZGdldC5zaG93TGFiZWwgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5jb3B5RnJvbVZhbHVlU2V0VG9WYWx1ZXNMaXN0KHdpZGdldCwgc21hcnRGb3JtLmNvbXBvbmVudE1vZGVsLnZhbHVlU2V0cyk7XHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB3aWRnZXQgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YICYmXHJcbiAgICAgICAgICAgIHdpZGdldC52YWx1ZUxpc3QubGVuZ3RoID09PSAxXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgd2lkZ2V0LnZhbHVlTGlzdCA9IHdpZGdldC52YWx1ZUxpc3QubWFwKChpdGVtOiBTbWFydEl0ZW08YW55PikgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVEZWVwbHkoZGF0YSwga2V5KTtcclxuICAgICAgICAgICAgICBpdGVtLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBJbiBjYXNlIG9mIENoZWNrQm94MlxyXG4gICAgICAgICAgbGV0IHNwbGl0dGVkS2V5cyA9IGtleS5zcGxpdCgnLicpO1xyXG4gICAgICAgICAgc3BsaXR0ZWRLZXlzLnNwbGljZShzcGxpdHRlZEtleXMubGVuZ3RoIC0gMSwgMSk7XHJcbiAgICAgICAgICB3aWRnZXQgPSB0aGlzLmZpbmRTbWFydEZvcm1XaWRnZXRCeUtleSh3aWRnZXRzLCBzcGxpdHRlZEtleXMuam9pbignLicpKTtcclxuICAgICAgICAgIGlmICh3aWRnZXQgJiYgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YXzIpIHtcclxuICAgICAgICAgICAgdGhpcy5jb3B5RnJvbVZhbHVlU2V0VG9WYWx1ZXNMaXN0KHdpZGdldCwgc21hcnRGb3JtLmNvbXBvbmVudE1vZGVsLnZhbHVlU2V0cyk7XHJcbiAgICAgICAgICAgIGlmICh3aWRnZXQudmFsdWVMaXN0KSB7XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnZhbHVlTGlzdCA9IHdpZGdldC52YWx1ZUxpc3QubWFwKChpdGVtOiBTbWFydEl0ZW08YW55PikgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZURlZXBseShkYXRhLCBgJHt3aWRnZXQ/LmtleX0uJHtpdGVtLmtleX1gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0udmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvcHlGcm9tVmFsdWVTZXRUb1ZhbHVlc0xpc3Qod2lkZ2V0OiBTbWFydEZvcm1XaWRnZXQ8YW55PiwgdmFsdWVTZXRzOiBhbnkpIHtcclxuICAgIGlmIChcclxuICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuU0VMRUNUIHx8XHJcbiAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlNFTEVDVF9NVUxUSVBMRSB8fFxyXG4gICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5SQURJT19CVVRUT04gfHxcclxuICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YIHx8XHJcbiAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNIRUNLX0JPWF8yIHx8XHJcbiAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfRklFTERcclxuICAgICkge1xyXG4gICAgICBpZiAod2lkZ2V0LnNlbGVjdGlvbiAmJiB2YWx1ZVNldHMpIHtcclxuICAgICAgICBsZXQgdmFsdWVTZXQgPSB2YWx1ZVNldHNbd2lkZ2V0LnNlbGVjdGlvbi52YWx1ZVNldE5hbWVdO1xyXG4gICAgICAgIGlmICghdmFsdWVTZXQpIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybigndmFsdWVTZXQgbm90IGZvdW5kJywgd2lkZ2V0LnNlbGVjdGlvbi52YWx1ZVNldE5hbWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgdmFsdWVTZXREYXRhID0gdmFsdWVTZXQudmFsdWVTZXREYXRhO1xyXG4gICAgICAgICAgbGV0IHZhbHVlcyA9IHZhbHVlU2V0RGF0YS52YWx1ZXM7XHJcbiAgICAgICAgICBsZXQgZGlzcGxheVByb3BlcnR5ID1cclxuICAgICAgICAgICAgKHdpZGdldCBhcyBTbWFydFNlbGVjdDxhbnk+KS5zZWxlY3Rpb24/LmRpc3BsYXlQcm9wZXJ0eSA/PyAnZGlzcGxheVZhbHVlJztcclxuICAgICAgICAgIC8vIGNoZWNrIGlzIGRpc3BsYXlQcm9wZXJ0eSBleGlzdHMsIGZhbGxiYWNrIGZvciBjb21tb24gZGlzcGxheSBwcm9wZXJ0aWVzXHJcbiAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tQcm9wZXJ0eSh2YWx1ZXMsIGRpc3BsYXlQcm9wZXJ0eSkpIHtcclxuICAgICAgICAgICAgZGlzcGxheVByb3BlcnR5ID0gJ25hbWUnOyAvLyBHZW5lcmljVmFsdWUubmFtZVxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tQcm9wZXJ0eSh2YWx1ZXMsIGRpc3BsYXlQcm9wZXJ0eSkpIHtcclxuICAgICAgICAgICAgICBkaXNwbGF5UHJvcGVydHkgPSAnZGlzcGxheVZhbHVlJzsgLy8gVmFsdWUuZGlzcGxheVZhbHVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgd2lkZ2V0LnNlbGVjdGlvbi50eXBlID09PSBTZWxlY3Rpb25EZWZpbml0aW9uVHlwZUVudW0uUFJPUEVSVFkgJiZcclxuICAgICAgICAgICAgIXdpZGdldC5zZWxlY3Rpb24ubWFwcGluZy5sZW5ndGhcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBsZXQga2V5UHJvcGVydHkgPSB2YWx1ZVNldERhdGEua2V5UHJvcGVydHkgPz8gJ29iamVjdFVyaSc7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGVja1Byb3BlcnR5KHZhbHVlcywga2V5UHJvcGVydHkpKSB7XHJcbiAgICAgICAgICAgICAga2V5UHJvcGVydHkgPSAndXJpJzsgLy8gR2VuZXJpY1ZhbHVlLnVyaVxyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja1Byb3BlcnR5KHZhbHVlcywga2V5UHJvcGVydHkpKSB7XHJcbiAgICAgICAgICAgICAgICBrZXlQcm9wZXJ0eSA9ICdvYmplY3RVcmknOyAvLyBWYWx1ZS5vYmplY3RVcmlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd2lkZ2V0LnZhbHVlTGlzdCA9IHZhbHVlcy5tYXAoKHZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAga2V5OiB2YWx1ZVtrZXlQcm9wZXJ0eV0sXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogdmFsdWVbZGlzcGxheVByb3BlcnR5XSxcclxuICAgICAgICAgICAgICAgIHR5cGU6IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSVRFTSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVtrZXlQcm9wZXJ0eV0sXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkRW1wdHlJdGVtVG9WYWx1ZUxpc3Qod2lkZ2V0LCB3aWRnZXQuc2VsZWN0aW9uLmVtcHR5TGFiZWwpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgd2lkZ2V0LnNlbGVjdGlvbi50eXBlID09PSBTZWxlY3Rpb25EZWZpbml0aW9uVHlwZUVudW0uT0JKRUNUICYmXHJcbiAgICAgICAgICAgICF3aWRnZXQuc2VsZWN0aW9uLm1hcHBpbmcubGVuZ3RoXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgd2lkZ2V0LnZhbHVlTGlzdCA9IHZhbHVlcy5tYXAoKHZhbHVlOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAga2V5OiBgJHtpbmRleH1gLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IHZhbHVlW2Rpc3BsYXlQcm9wZXJ0eV0sXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBTbWFydEZvcm1XaWRnZXRUeXBlLklURU0sXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkRW1wdHlJdGVtVG9WYWx1ZUxpc3Qod2lkZ2V0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tQcm9wZXJ0eSh2YWx1ZXM6IG9iamVjdFtdLCBwcm9wZXJ0eTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXZhbHVlcz8ubGVuZ3RoKSB7XHJcbiAgICAgIC8vIG5vIHNhbXBsZSBkYXRhLCBhc3N1bWUgZXhpc3RhbmNlXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHByb3BlcnR5IGluIHZhbHVlc1swXTtcclxuICB9XHJcblxyXG4gIHRvRm9ybUdyb3VwKGNvbXBMaWI/OiBDb21wb25lbnRMaWJyYXJ5KTogVW50eXBlZEZvcm1Hcm91cCB7XHJcbiAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9scyh0aGlzLnNtYXJ0Rm9ybSEud2lkZ2V0cywgY29tcExpYiEpO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcm1Hcm91cCkge1xyXG4gICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scyA9IHRoaXMuZ3JvdXA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm1Hcm91cCA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNtYXJ0Rm9ybSEudmFsaWRhdG9ycyAmJiB0aGlzLnNtYXJ0Rm9ybSEudmFsaWRhdG9ycy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0VmFsaWRhdG9ycyhcclxuICAgICAgICB0aGlzLnNtYXJ0Rm9ybSEudmFsaWRhdG9ycy5tYXAoKHZhbGlkYXRvcjogU21hcnRWYWxpZGF0b3IpID0+IHtcclxuICAgICAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdG9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlRm9ybUNvbnRyb2xzKFxyXG4gICAgd2lkZ2V0czogU21hcnRGb3JtV2lkZ2V0PGFueT5bXSB8IFNtYXJ0SXRlbTxhbnk+W10sXHJcbiAgICBjb21wTGliOiBDb21wb25lbnRMaWJyYXJ5LFxyXG4gICAgcGFyZW50S2V5Pzogc3RyaW5nXHJcbiAgKTogdm9pZCB7XHJcbiAgICB3aWRnZXRzLm1hcCgod2lkZ2V0KSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTkRJQ0FUT1IgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5MQUJFTCAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTlRBSU5FUiAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkZJTEVfVVBMT0FERVIgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTUFHRSAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLlNWRyAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRJVklERVIgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5CVVRUT04gJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DSEVDS19CT1hfMiAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklURU0gJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT01QT05FTlQgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5NQVRSSVggJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ZT1VUVUJFX1BMQVlFUlxyXG4gICAgICApIHtcclxuICAgICAgICBpZiAoY29tcExpYiEgPT09IHRoaXMuY29tcG9uZW50TGlicmFyeS5QUklNRU5HKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRBVEVfUElDS0VSIHx8XHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRBVEVfVElNRV9QSUNLRVJcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBpZiAod2lkZ2V0LnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnZhbHVlID0gbmV3IERhdGUod2lkZ2V0LnZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKGAke3dpZGdldC5rZXl9YCwgd2lkZ2V0LnZhbHVlLCB3aWRnZXQuaXNEaXNhYmxlZCwgd2lkZ2V0LnZhbGlkYXRvcnMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTUFUUklYKSB7XHJcbiAgICAgICAgaWYgKHdpZGdldC5pc011bHRpcGxlKSB7XHJcbiAgICAgICAgICBsZXQgZGF0YUtleXMgPSBPYmplY3Qua2V5cyh3aWRnZXQudmFsdWUuZGF0YSk7XHJcbiAgICAgICAgICBsZXQgaXRlbUtleXMgPSB3aWRnZXQudmFsdWUuY29sdW1ucy5tYXAoKHZhbHVlOiBWYWx1ZSkgPT4gdmFsdWUuY29kZSk7XHJcbiAgICAgICAgICBkYXRhS2V5cy5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBpdGVtS2V5cy5mb3JFYWNoKChpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAgICAgYCR7d2lkZ2V0LmtleX0uZGF0YS4ke2tleX0uJHtpdGVtfWAsXHJcbiAgICAgICAgICAgICAgICB3aWRnZXQudmFsdWUuZGF0YVtrZXldW2l0ZW1dLFxyXG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkLCAvLyBUT0RPIHJlYWxseSB3ZSBkb24ndCBwYXNzIHdpZGdldC5pc0Rpc2FibGVkP1xyXG4gICAgICAgICAgICAgICAgd2lkZ2V0LnZhbGlkYXRvcnNcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyh3aWRnZXQudmFsdWUuZGF0YSkubWFwKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAgIGAke3dpZGdldC5rZXl9LiR7a2V5fWAsXHJcbiAgICAgICAgICAgICAgd2lkZ2V0LmlzTXVsdGlwbGUgPyB3aWRnZXQudmFsdWUuZGF0YVtrZXldIDogd2lkZ2V0LnZhbHVlLmRhdGFba2V5XVswXSxcclxuICAgICAgICAgICAgICB3aWRnZXQuaXNEaXNhYmxlZCxcclxuICAgICAgICAgICAgICB3aWRnZXQudmFsaWRhdG9yc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JVEVNICYmIHBhcmVudEtleSkge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICBgJHtwYXJlbnRLZXl9LiR7d2lkZ2V0LmtleX1gLFxyXG4gICAgICAgICAgd2lkZ2V0LnZhbHVlLFxyXG4gICAgICAgICAgd2lkZ2V0LmlzRGlzYWJsZWQsXHJcbiAgICAgICAgICB1bmRlZmluZWRcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmIHdpZGdldC52YWx1ZUxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2xzKHdpZGdldC52YWx1ZUxpc3QsIGNvbXBMaWIpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DSEVDS19CT1hfMiAmJiB3aWRnZXQudmFsdWVMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9scyh3aWRnZXQudmFsdWVMaXN0LCBjb21wTGliLCB3aWRnZXQua2V5KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpc1ZhbGlkYXRvckluTGlzdCh2YWxpZGF0b3I6IFNtYXJ0VmFsaWRhdG9yLCBsaXN0PzogU21hcnRWYWxpZGF0b3JbXSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGxpc3QgIT09IHVuZGVmaW5lZCAmJiBsaXN0Lmxlbmd0aCA+IDAgJiYgbGlzdC5zb21lKCh2KSA9PiB2ID09PSB2YWxpZGF0b3IpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVGb3JtQ29udHJvbChcclxuICAgIGtleTogc3RyaW5nLFxyXG4gICAgdmFsdWU/OiBzdHJpbmcsXHJcbiAgICBpc0Rpc2FibGVkPzogYm9vbGVhbixcclxuICAgIHZhbGlkYXRvcnM/OiBTbWFydFZhbGlkYXRvcltdXHJcbiAgKTogVW50eXBlZEZvcm1Db250cm9sIHtcclxuICAgIGxldCBmb3JtQ29udHJvbDogVW50eXBlZEZvcm1Db250cm9sID0gdGhpcy5ncm91cFtrZXldO1xyXG4gICAgaWYgKCFmb3JtQ29udHJvbCkge1xyXG4gICAgICBmb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcclxuICAgICAgdGhpcy5ncm91cFtrZXldID0gZm9ybUNvbnRyb2w7XHJcbiAgICB9XHJcbiAgICBmb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSB8fCAnJywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgZm9ybUNvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICB2YWxpZGF0b3JzPy5tYXAoKHZhbGlkYXRvcjogU21hcnRWYWxpZGF0b3IpID0+IHtcclxuICAgICAgZm9ybUNvbnRyb2wuYWRkVmFsaWRhdG9ycyh2YWxpZGF0b3IudmFsaWRhdG9yKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChpc0Rpc2FibGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICBmb3JtQ29udHJvbC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmb3JtQ29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ybUNvbnRyb2w7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvcHlWYWx1ZUZyb21Gb3JtVG9XaWRnZXRCZWFucyhcclxuICAgIHdpZGdldHM6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+W10sXHJcbiAgICBncm91cDogVW50eXBlZEZvcm1Hcm91cFxyXG4gICk6IHZvaWQge1xyXG4gICAgd2lkZ2V0cy5mb3JFYWNoKCh3aWRnZXQpID0+IHtcclxuICAgICAgaWYgKHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTlRBSU5FUiAmJiB3aWRnZXQudmFsdWVMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmNvcHlWYWx1ZUZyb21Gb3JtVG9XaWRnZXRCZWFucyh3aWRnZXQudmFsdWVMaXN0LCBncm91cCk7XHJcbiAgICAgIH0gZWxzZSBpZiAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTUFUUklYKSB7XHJcbiAgICAgICAgaWYgKHdpZGdldC5pc011bHRpcGxlKSB7XHJcbiAgICAgICAgICBsZXQgZGF0YUtleXMgPSBPYmplY3Qua2V5cyh3aWRnZXQudmFsdWUuZGF0YSk7XHJcbiAgICAgICAgICBsZXQgaXRlbUtleXMgPSB3aWRnZXQudmFsdWUuY29sdW1ucy5tYXAoKHZhbHVlOiBWYWx1ZSkgPT4gdmFsdWUuY29kZSk7XHJcbiAgICAgICAgICBkYXRhS2V5cy5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBpdGVtS2V5cy5mb3JFYWNoKChpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICB3aWRnZXQudmFsdWUuZGF0YVtrZXldW2l0ZW1dID0gW1xyXG4gICAgICAgICAgICAgICAgZ3JvdXAuY29udHJvbHNbYCR7d2lkZ2V0LmtleX0uZGF0YS4ke2tleX0uJHtpdGVtfWBdLnZhbHVlLFxyXG4gICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgbGV0IGRhdGFrZXlzID0gT2JqZWN0LmtleXMod2lkZ2V0LnZhbHVlLmRhdGEpO1xyXG4gICAgICAgICAgLy9NYXAgY2hlY2tib3gga2V5IC0gYm9vbGVhbiB2YWx1ZSB0byBzdHJpbmcga2V5IGFycmF5XHJcbiAgICAgICAgICBsZXQgdmFsdWVLZXlzID0gd2lkZ2V0LnZhbHVlLmNvbHVtbnMubWFwKCh2YWx1ZTogVmFsdWUpID0+IHZhbHVlLmNvZGUpO1xyXG4gICAgICAgICAgZGF0YWtleXMuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgbGV0IG5ld0RhdGE6IGFueVtdID0gW107XHJcbiAgICAgICAgICAgIHZhbHVlS2V5cy5mb3JFYWNoKCh2YWx1ZUtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gd2lkZ2V0LnZhbHVlLmRhdGFba2V5XVt2YWx1ZUtleV07XHJcbiAgICAgICAgICAgICAgaWYgKHZhbHVlWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdEYXRhLnB1c2godmFsdWVLZXkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHdpZGdldC52YWx1ZS5kYXRhW2tleV0gPSBuZXdEYXRhO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIE9iamVjdC5rZXlzKHdpZGdldC52YWx1ZS5kYXRhKS5tYXAoKGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIHdpZGdldC52YWx1ZS5kYXRhW2tleV0gPSBbZ3JvdXAuY29udHJvbHNbYCR7d2lkZ2V0LmtleX0uJHtrZXl9YF0udmFsdWVdO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklORElDQVRPUiAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkxBQkVMICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU1BR0UgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TVkcgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5GSUxFX1VQTE9BREVSICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQlVUVE9OICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuRElWSURFUiAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNIRUNLX0JPWF8yICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09NUE9ORU5UICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuWU9VVFVCRV9QTEFZRVJcclxuICAgICAgKSB7XHJcbiAgICAgICAgd2lkZ2V0LnZhbHVlID0gZ3JvdXAuY29udHJvbHNbd2lkZ2V0LmtleV0udmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdG9TbWFydEZvcm0oZ3JvdXA6IFVudHlwZWRGb3JtR3JvdXApOiBTbWFydEZvcm0ge1xyXG4gICAgaWYgKHRoaXMuc21hcnRGb3JtKSB7XHJcbiAgICAgIHRoaXMuY29weVZhbHVlRnJvbUZvcm1Ub1dpZGdldEJlYW5zKHRoaXMuc21hcnRGb3JtLndpZGdldHMsIGdyb3VwKTtcclxuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuc21hcnRGb3JtLmNvbXBvbmVudE1vZGVsPy5kYXRhO1xyXG4gICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHRoaXMuZ2V0UHJvcGVydHlOYW1lc0RlZXBseShkYXRhKSkge1xyXG4gICAgICAgICAgaWYgKGdyb3VwLmNvbnRyb2xzW2tleV0pIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZURlZXBseShkYXRhLCBrZXksIGdyb3VwLmNvbnRyb2xzW2tleV0udmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuc21hcnRGb3JtITtcclxuICB9XHJcblxyXG4gIGdldE1vZGVsKGdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKTogYW55IHtcclxuICAgIGlmICghdGhpcy5zbWFydEZvcm0/LmNvbXBvbmVudE1vZGVsKSB7XHJcbiAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuICAgIGxldCBvcmlnaW5hbE1vZGVsID0gdGhpcy5zbWFydEZvcm0uY29tcG9uZW50TW9kZWwuZGF0YTtcclxuICAgIGxldCBjb3B5T2ZNb2RlbCA9IHsgLi4ub3JpZ2luYWxNb2RlbCB9O1xyXG5cclxuICAgIC8vIGNvcHlPZk1vZGVsIHNob3VsZCBiZSB0aGUgY3VycmVudCBtb2RlbFxyXG4gICAgdGhpcy5zbWFydEZvcm0uY29tcG9uZW50TW9kZWwuZGF0YSA9IGNvcHlPZk1vZGVsO1xyXG4gICAgLy8gY29weSB2YWx1ZSBmcm9tIEZvcm1Hcm91cCBpbnRvIG1vZGVsXHJcbiAgICB0aGlzLnRvU21hcnRGb3JtKGdyb3VwKTtcclxuXHJcbiAgICBsZXQgbmV3TW9kZWwgPSB0aGlzLnNtYXJ0Rm9ybS5jb21wb25lbnRNb2RlbC5kYXRhO1xyXG4gICAgdGhpcy5zbWFydEZvcm0uY29tcG9uZW50TW9kZWwuZGF0YSA9IG9yaWdpbmFsTW9kZWw7XHJcblxyXG4gICAgcmV0dXJuIG5ld01vZGVsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUNvbXBvbmVudENvbnN0cmFpbnRzKFxyXG4gICAgd2lkZ2V0czogU21hcnRGb3JtV2lkZ2V0PGFueT5bXSxcclxuICAgIGNvbnN0cmFpbnRzOiBTbWFydEZvcm1Db21wb25lbnRDb25zdHJhaW50W11cclxuICApIHtcclxuICAgIHdpZGdldHMuZm9yRWFjaCgod2lkZ2V0OiBTbWFydEZvcm1XaWRnZXQ8YW55PikgPT4ge1xyXG4gICAgICBsZXQgd2lkZ2V0Q29uc3RyYWludHMgPSBjb25zdHJhaW50cz8uZmlsdGVyKFxyXG4gICAgICAgIC8vKGNvbnN0cmFpbnQ6IFNtYXJ0Rm9ybUNvbXBvbmVudENvbnN0cmFpbnQpID0+IGNvbnN0cmFpbnQuZGF0YU5hbWUgPT09IHdpZGdldC5rZXlcclxuICAgICAgICAoY29uc3RyYWludCkgPT4gdGhpcy5hbnRQYXRoTWF0Y2hlcihjb25zdHJhaW50LmRhdGFOYW1lLCB3aWRnZXQua2V5KVxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHdpZGdldENvbnN0cmFpbnRzICYmIHdpZGdldENvbnN0cmFpbnRzLmxlbmd0aCkge1xyXG4gICAgICAgIHdpZGdldENvbnN0cmFpbnRzLmZvckVhY2goKGNvbnN0cmFpbnQpID0+IHtcclxuICAgICAgICAgIGlmIChjb25zdHJhaW50LnZpc2libGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpZiAod2lkZ2V0LmlzVmlzaWJsZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LmlzVmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHdpZGdldC5pc1Zpc2libGUgPSBjb25zdHJhaW50LnZpc2libGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklORElDQVRPUiAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5MQUJFTCAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVIgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU1BR0UgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuU1ZHICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkZJTEVfVVBMT0FERVIgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuRElWSURFUiAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5CVVRUT04gJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09NUE9ORU5UICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLllPVVRVQkVfUExBWUVSXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgbGV0IHZhbGlkYXRvcnMgPSB3aWRnZXQudmFsaWRhdG9ycyA/PyBbXTtcclxuICAgICAgICAgICAgbGV0IHJlcXVpcmVkSW5kZXggPSB2YWxpZGF0b3JzLmZpbmRJbmRleCgodikgPT4gdi52YWxpZGF0b3IgPT09IFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICBsZXQgd2FzTWFuZGF0b3J5ID0gcmVxdWlyZWRJbmRleCA+PSAwO1xyXG4gICAgICAgICAgICBsZXQgdG9iZU1hbmRhdG9yeSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoY29uc3RyYWludC5tYW5kYXRvcnkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgIC8vIG5vdCBzcGVjaWZpZWQgb24gc2VydmVyLCB1c2UgY2xpZW50IHN0YXRlXHJcbiAgICAgICAgICAgICAgLy8gaWYgd2lkZ2V0IGlzIG5vdCB2aXNpYmxlLCBjbGllbnQgc2hvdWxkIGRlZmF1bHQgdG8gbm90IG1hbmRhdG9yeVxyXG4gICAgICAgICAgICAgIHRvYmVNYW5kYXRvcnkgPSB3aWRnZXQuaXNWaXNpYmxlICYmIHdhc01hbmRhdG9yeTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0b2JlTWFuZGF0b3J5ID0gY29uc3RyYWludC5tYW5kYXRvcnk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCF3YXNNYW5kYXRvcnkgJiYgdG9iZU1hbmRhdG9yeSkge1xyXG4gICAgICAgICAgICAgIC8vIGFkZCByZXF1aXJlZCB2YWxpZGF0b3JcclxuICAgICAgICAgICAgICB3aWRnZXQudmFsaWRhdG9ycyA9IFtcclxuICAgICAgICAgICAgICAgIC4uLnZhbGlkYXRvcnMsXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcjogVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICAgICAgaXNDdXN0b206IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2U6ICcnLFxyXG4gICAgICAgICAgICAgICAgICBuYW1lOiAncmVxdWlyZWQnLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgIC8vIHJlbW92ZSBlbXB0eSBpdGVtXHJcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVFbXB0eUl0ZW1Gcm9tVmFsdWVMaXN0KHdpZGdldCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHdhc01hbmRhdG9yeSAmJiAhdG9iZU1hbmRhdG9yeSkge1xyXG4gICAgICAgICAgICAgIC8vIHJlbW92ZSByZXF1aXJlZCB2YWxpZGF0b3JcclxuICAgICAgICAgICAgICB3aWRnZXQudmFsaWRhdG9ycz8uc3BsaWNlKHJlcXVpcmVkSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgIC8vIGFkZCBlbXB0eSBpdGVtXHJcbiAgICAgICAgICAgICAgbGV0IGVtcHR5TGFiZWwgPSAnJztcclxuICAgICAgICAgICAgICBpZiAoJ3NlbGVjdGlvbicgaW4gd2lkZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICBlbXB0eUxhYmVsID0gd2lkZ2V0LnNlbGVjdGlvbj8uZW1wdHlMYWJlbCA/PyAnJztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5hZGRFbXB0eUl0ZW1Ub1ZhbHVlTGlzdCh3aWRnZXQsIGVtcHR5TGFiZWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjb25zdHJhaW50LmVuYWJsZWQgPT09IHVuZGVmaW5lZCB8fCBjb25zdHJhaW50LmVuYWJsZWQgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICBpZiAod2lkZ2V0LmlzRGlzYWJsZWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgd2lkZ2V0LmlzRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LmlzRGlzYWJsZWQgPSAhY29uc3RyYWludC5lbmFibGVkO1xyXG4gICAgICAgICAgICAgIGlmICh3aWRnZXQudHlwZSA9PSBTbWFydEZvcm1XaWRnZXRUeXBlLlJJQ0hfVEVYVCkge1xyXG4gICAgICAgICAgICAgICAgd2lkZ2V0LmlzUmVhZG9ubHkgPSAhY29uc3RyYWludC5lbmFibGVkO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRvclByb3ZpZGVyPy5hcHBseUNvbnN0cmFpbnQod2lkZ2V0IGFzIFZhbGlkYXRlZFdpZGdldDxhbnk+LCBjb25zdHJhaW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmXHJcbiAgICAgICAgd2lkZ2V0LnZhbHVlTGlzdCAmJlxyXG4gICAgICAgIHdpZGdldC52YWx1ZUxpc3QubGVuZ3RoXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuYXBwbHlDb21wb25lbnRDb25zdHJhaW50cyh3aWRnZXQudmFsdWVMaXN0LCBjb25zdHJhaW50cyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSByZWdleFJlZ2V4Q2hhcnMgPSBuZXcgUmVnRXhwKC9bXFwuXFwtXFxbXFxdXFwvXFx7XFx9XFwoXFwpXFwrXFxeXFwkXFxcXFxcfF0vZyk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSByZWdleEFzdGVyaXNrSW5UaGVNaWRkbGUgPSBuZXcgUmVnRXhwKC8oW15cXCpdKVxcKihbXlxcKl0pL2cpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnZXhBc3Rlcmlza0luVGhlRW5kID0gbmV3IFJlZ0V4cCgvKFteXFwqXSlcXCokL2cpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnZXhBc3Rlcmlza0luVGhlQmVnaW5uaW5nID0gbmV3IFJlZ0V4cCgvXlxcKihbXlxcKl0pL2cpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnZXhBc3Rlcmlza09ubHkgPSBuZXcgUmVnRXhwKC9eXFwqJC9nKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2V4RG91YmxlQXN0ZXJpc2tXaXRoRG90ID0gbmV3IFJlZ0V4cCgvXFwqXFwqXFxcXFxcLi9nKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2V4RG91YmxlQXN0ZXJpc2sgPSBuZXcgUmVnRXhwKC9cXCpcXCovZyk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSByZWdleFF1ZXN0aW9uTWFyayA9IG5ldyBSZWdFeHAoL1xcPy9nKTtcclxuICBwcml2YXRlIHJlZ2V4QnlQYXR0ZXJuOiBNYXA8c3RyaW5nLCBSZWdFeHA+ID0gbmV3IE1hcCgpO1xyXG5cclxuICBhbnRQYXRoTWF0Y2hlcihwYXR0ZXJuPzogc3RyaW5nLCBwYXRoPzogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXBhdHRlcm4gfHwgIXBhdGgpIHtcclxuICAgICAgLy8gZW1wdHkgcGF0dGVybiBvciBwYXRoIC0+IG5vdCBldmFsdWF0ZWQsIHRydWUgb3IgZmFsc2U/XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGxldCByZWdleCA9IHRoaXMucmVnZXhCeVBhdHRlcm4uZ2V0KHBhdHRlcm4pO1xyXG4gICAgaWYgKHJlZ2V4ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgLy8gZXNjYXBlIHJlZ2V4IGNoYXJhY3RlcnMgZXhjZXB0IGZvciA/LCAqLCAqKlxyXG4gICAgICBsZXQgcmVnZXhQYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKHRoaXMucmVnZXhSZWdleENoYXJzLCAnXFxcXCQmJyk7XHJcblxyXG4gICAgICAvLyByZXBsYWNlIGFudC1zdHlsZSB3aWxkY2FyZHMgd2l0aCByZWdleCBlcXVpdmFsZW50c1xyXG5cclxuICAgICAgLy8gcmVwbGFjZSAqIHdpdGggYSBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyBhbnkgY2hhcmFjdGVyIGV4Y2VwdCBmb3IgJy4nXHJcbiAgICAgIHJlZ2V4UGF0dGVybiA9IHJlZ2V4UGF0dGVybi5yZXBsYWNlKHRoaXMucmVnZXhBc3Rlcmlza0luVGhlTWlkZGxlLCAnJDFbXi5dKiQyJyk7IC8vIG5vdCogKiBub3QqXHJcbiAgICAgIHJlZ2V4UGF0dGVybiA9IHJlZ2V4UGF0dGVybi5yZXBsYWNlKHRoaXMucmVnZXhBc3Rlcmlza0luVGhlRW5kLCAnJDFbXi5dKicpOyAvLyBub3QqICogRU9MXHJcbiAgICAgIHJlZ2V4UGF0dGVybiA9IHJlZ2V4UGF0dGVybi5yZXBsYWNlKHRoaXMucmVnZXhBc3Rlcmlza0luVGhlQmVnaW5uaW5nLCAnW14uXSokMScpOyAvLyBCT0wgKiBub3QqXHJcbiAgICAgIHJlZ2V4UGF0dGVybiA9IHJlZ2V4UGF0dGVybi5yZXBsYWNlKHRoaXMucmVnZXhBc3Rlcmlza09ubHksICdbXi5dKicpOyAvLyBCT0wgKiBFT0xcclxuXHJcbiAgICAgIC8vIHJlcGxhY2UgKiogd2l0aCBhIHBhdHRlcm4gdGhhdCBtYXRjaGVzIGFueSBjaGFyYWN0ZXIgaW5jbHVkaW5nICcuJ1xyXG4gICAgICByZWdleFBhdHRlcm4gPSByZWdleFBhdHRlcm4ucmVwbGFjZSh0aGlzLnJlZ2V4RG91YmxlQXN0ZXJpc2tXaXRoRG90LCAnLionKTsgLy8gKiouXHJcbiAgICAgIHJlZ2V4UGF0dGVybiA9IHJlZ2V4UGF0dGVybi5yZXBsYWNlKHRoaXMucmVnZXhEb3VibGVBc3RlcmlzaywgJy4qJyk7IC8vICoqXHJcblxyXG4gICAgICAvLyByZXBsYWNlID8gd2l0aCBhIHNpbmdsZSBjaGFyYWN0ZXIgbWF0Y2hlclxyXG4gICAgICByZWdleFBhdHRlcm4gPSByZWdleFBhdHRlcm4ucmVwbGFjZSh0aGlzLnJlZ2V4UXVlc3Rpb25NYXJrLCAnLicpO1xyXG5cclxuICAgICAgLy8gY3JlYXRlIGEgUmVnRXhwIG9iamVjdFxyXG4gICAgICByZWdleCA9IG5ldyBSZWdFeHAoJ14nICsgcmVnZXhQYXR0ZXJuICsgJyQnKTtcclxuICAgICAgdGhpcy5yZWdleEJ5UGF0dGVybi5zZXQocGF0dGVybiwgcmVnZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHRlc3QgdGhlIHBhdGggYWdhaW5zdCB0aGUgZ2VuZXJhdGVkIHJlZ2V4XHJcbiAgICByZXR1cm4gcmVnZXgudGVzdChwYXRoKTtcclxuICB9XHJcblxyXG4gIGFwcGx5Q29uc3RyYWludHMod2lkZ2V0cz86IFNtYXJ0Rm9ybVdpZGdldDxhbnk+W10pOiB2b2lkIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zbWFydEZvcm0hLmNvbXBvbmVudE1vZGVsPy5jb25zdHJhaW50cyAmJlxyXG4gICAgICB0aGlzLnNtYXJ0Rm9ybSEuY29tcG9uZW50TW9kZWw/LmNvbnN0cmFpbnRzLmxlbmd0aFxyXG4gICAgKSB7XHJcbiAgICAgIGlmICghd2lkZ2V0cykge1xyXG4gICAgICAgIHdpZGdldHMgPSB0aGlzLnNtYXJ0Rm9ybSEud2lkZ2V0cztcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFwcGx5Q29tcG9uZW50Q29uc3RyYWludHMod2lkZ2V0cywgdGhpcy5zbWFydEZvcm0hLmNvbXBvbmVudE1vZGVsPy5jb25zdHJhaW50cyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRFbXB0eUl0ZW1Ub1ZhbHVlTGlzdCh3aWRnZXQ6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+LCBlbXB0eUxhYmVsPzogc3RyaW5nKSB7XHJcbiAgICBpZiAod2lkZ2V0LnR5cGUgPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TRUxFQ1QpIHtcclxuICAgICAgY29uc3QgY29udGFpbnNFbXB0eUtleSA9IHdpZGdldC52YWx1ZUxpc3Quc29tZSgodikgPT4gdi5rZXkgPT09IHRoaXMuZW1wdHlLZXkpO1xyXG4gICAgICBpZiAoIWNvbnRhaW5zRW1wdHlLZXkpIHtcclxuICAgICAgICB3aWRnZXQudmFsdWVMaXN0Py51bnNoaWZ0KHtcclxuICAgICAgICAgIGtleTogdGhpcy5lbXB0eUtleSxcclxuICAgICAgICAgIGxhYmVsOiBlbXB0eUxhYmVsID8/ICcnLFxyXG4gICAgICAgICAgdHlwZTogU21hcnRGb3JtV2lkZ2V0VHlwZS5JVEVNLFxyXG4gICAgICAgICAgdmFsdWU6ICcnLCAvLyB0aGlzIHNob3VsZCBiZSB1bmRlZmluZWQsIGJ1dCBGb3JtQ29udHJvbCBjYW5ub3QgYmUgbnVsbCwgZnJvbSB2MTQgaXQgd2lsbFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVFbXB0eUl0ZW1Gcm9tVmFsdWVMaXN0KHdpZGdldDogU21hcnRGb3JtV2lkZ2V0PGFueT4pIHtcclxuICAgIGlmICgndmFsdWVMaXN0JyBpbiB3aWRnZXQpIHtcclxuICAgICAgaWYgKHdpZGdldC52YWx1ZUxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgIGxldCBmaXJzdEl0ZW0gPSB3aWRnZXQudmFsdWVMaXN0WzBdO1xyXG4gICAgICAgIGlmIChmaXJzdEl0ZW0/LmtleSA9PT0gdGhpcy5lbXB0eUtleSkge1xyXG4gICAgICAgICAgd2lkZ2V0LnZhbHVlTGlzdC5zaGlmdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZmlsdGVyV2lkZ2V0c0J5VmlzaWJpbGl0eSh3aWRnZXRzOiBTbWFydEZvcm1XaWRnZXQ8YW55PltdKTogU21hcnRGb3JtV2lkZ2V0PGFueT5bXSB7XHJcbiAgICByZXR1cm4gd2lkZ2V0cy5maWx0ZXIoKHdpZGdldDogU21hcnRGb3JtV2lkZ2V0PGFueT4pID0+XHJcbiAgICAgIHdpZGdldC5pc1Zpc2libGUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiB3aWRnZXQuaXNWaXNpYmxlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRUcmFuc2xhdGlvbk9mS2V5KGtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLnNtYXJ0Rm9ybSEudHJhbnNsYXRlU2VydmljZSEuZ2V0KGtleSkudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyB0cmFuc2xhdGVXaWRnZXRzKHdpZGdldHM6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+W10pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIFByb21pc2UuYWxsKFxyXG4gICAgICB3aWRnZXRzLm1hcChhc3luYyAod2lkZ2V0OiBTbWFydEZvcm1XaWRnZXQ8YW55PikgPT4ge1xyXG4gICAgICAgIGlmICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ZT1VUVUJFX1BMQVlFUikgcmV0dXJuO1xyXG4gICAgICAgIGlmICh3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVIpIHtcclxuICAgICAgICAgIGlmICghd2lkZ2V0Lm9yaWdpbmFsTGFiZWwpIHtcclxuICAgICAgICAgICAgd2lkZ2V0Lm9yaWdpbmFsTGFiZWwgPSBgJHt3aWRnZXQubGFiZWx9YDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vICBMYWJlbFxyXG4gICAgICAgICAgd2lkZ2V0LmxhYmVsID0gYXdhaXQgdGhpcy5nZXRUcmFuc2xhdGlvbk9mS2V5KHdpZGdldC5vcmlnaW5hbExhYmVsKTtcclxuXHJcbiAgICAgICAgICAvLyBQbGFjZWhvbGRlclxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRCB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfRklFTERfTlVNQkVSIHx8XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRF9DSElQUyB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlJJQ0hfVEVYVCB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfQk9YKSAmJlxyXG4gICAgICAgICAgICB3aWRnZXQucGxhY2Vob2xkZXJcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBpZiAoIXdpZGdldC5vcmlnaW5hbFBsYWNlaG9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgd2lkZ2V0Lm9yaWdpbmFsUGxhY2Vob2xkZXIgPSBgJHt3aWRnZXQucGxhY2Vob2xkZXJ9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB3aWRnZXQucGxhY2Vob2xkZXIgPSBhd2FpdCB0aGlzLmdldFRyYW5zbGF0aW9uT2ZLZXkod2lkZ2V0Lm9yaWdpbmFsUGxhY2Vob2xkZXIpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFZhbGlkYXRvcnNcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU5ESUNBVE9SICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkxBQkVMICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklNQUdFICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLlNWRyAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5GSUxFX1VQTE9BREVSICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRJVklERVIgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQlVUVE9OICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTVBPTkVOVCAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudmFsaWRhdG9yc1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHdpZGdldC52YWxpZGF0b3JzID0gYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnZhbGlkYXRvcnMubWFwKGFzeW5jICh2YWxpZGF0b3I6IFNtYXJ0VmFsaWRhdG9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRvci5vcmlnaW5hbEVycm9yTWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgICB2YWxpZGF0b3Iub3JpZ2luYWxFcnJvck1lc3NhZ2UgPSBgJHt2YWxpZGF0b3IuZXJyb3JNZXNzYWdlfWA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3IuZXJyb3JNZXNzYWdlID0gYXdhaXQgdGhpcy5nZXRUcmFuc2xhdGlvbk9mS2V5KFxyXG4gICAgICAgICAgICAgICAgICB2YWxpZGF0b3Iub3JpZ2luYWxFcnJvck1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdG9yO1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBJbmRpY2F0b3JcclxuICAgICAgICAgIGlmICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTkRJQ0FUT1IgJiYgd2lkZ2V0LmluZGljYXRvcikge1xyXG4gICAgICAgICAgICBpZiAoIXdpZGdldC5pbmRpY2F0b3Iub3JpZ2luYWxJbmRpY2F0b3JTdGF0dXNMYWJlbHMpIHtcclxuICAgICAgICAgICAgICB3aWRnZXQuaW5kaWNhdG9yLm9yaWdpbmFsSW5kaWNhdG9yU3RhdHVzTGFiZWxzID1cclxuICAgICAgICAgICAgICAgIHdpZGdldC5pbmRpY2F0b3IuaW5kaWNhdG9yU3RhdHVzTGFiZWxzLm1hcCgobGFiZWw6IHN0cmluZykgPT4gbGFiZWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdpZGdldC5pbmRpY2F0b3IuaW5kaWNhdG9yU3RhdHVzTGFiZWxzID0gYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgICAgd2lkZ2V0LmluZGljYXRvci5pbmRpY2F0b3JTdGF0dXNMYWJlbHMubWFwKFxyXG4gICAgICAgICAgICAgICAgYXN5bmMgKGxhYmVsOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+XHJcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0VHJhbnNsYXRpb25PZktleShcclxuICAgICAgICAgICAgICAgICAgICB3aWRnZXQuaW5kaWNhdG9yIS5vcmlnaW5hbEluZGljYXRvclN0YXR1c0xhYmVscyFbaW5kZXhdXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRF9DSElQUyB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlNFTEVDVCB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlNFTEVDVF9NVUxUSVBMRSB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNIRUNLX0JPWCB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNIRUNLX0JPWF8yIHx8XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuUkFESU9fQlVUVE9OKSAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudmFsdWVMaXN0XHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVXaWRnZXRJdGVtcyh3aWRnZXQudmFsdWVMaXN0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVXaWRnZXRzKHdpZGdldC52YWx1ZUxpc3QhKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdHJhbnNsYXRlV2lkZ2V0SXRlbXMod2lkZ2V0czogU21hcnRJdGVtczxhbnk+W10pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIFByb21pc2UuYWxsKFxyXG4gICAgICB3aWRnZXRzLm1hcChhc3luYyAod2lkZ2V0OiBTbWFydEl0ZW1zPGFueT4pID0+IHtcclxuICAgICAgICBpZiAoIXdpZGdldC5vcmlnaW5hbExhYmVsKSB7XHJcbiAgICAgICAgICB3aWRnZXQub3JpZ2luYWxMYWJlbCA9IGAke3dpZGdldC5sYWJlbH1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyAgTGFiZWxcclxuICAgICAgICB3aWRnZXQubGFiZWwgPSBhd2FpdCB0aGlzLmdldFRyYW5zbGF0aW9uT2ZLZXkod2lkZ2V0Lm9yaWdpbmFsTGFiZWwpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl19
|
|
663
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRmb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1mb3JtL3NlcnZpY2VzL3NtYXJ0Zm9ybS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFHMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7OztBQU8vRSxNQUFNLE9BQU8sZ0JBQWdCO0lBUzNCLFlBQWdDLGlCQUF5QztRQUF6QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQXdCO1FBUnhELGFBQVEsR0FBVyxXQUFXLENBQUM7UUFDaEQscUJBQWdCLEdBQUcsZ0JBQWdCLENBQUM7UUFDcEMsVUFBSyxHQUFRLEVBQUUsQ0FBQztRQTBsQkMsb0JBQWUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1FBQ2hFLDZCQUF3QixHQUFHLElBQUksTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDM0QsMEJBQXFCLEdBQUcsSUFBSSxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbEQsZ0NBQTJCLEdBQUcsSUFBSSxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDeEQsc0JBQWlCLEdBQUcsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEMsK0JBQTBCLEdBQUcsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDckQsd0JBQW1CLEdBQUcsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENB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N0MsTUFBTSxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxXQUFXO29CQUMvQyxNQUFNLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLFlBQVksQ0FBQztvQkFDbkQsTUFBTSxDQUFDLFNBQVMsRUFDaEIsQ0FBQztvQkFDRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUM5QyxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsU0FBVSxDQUFDLENBQUM7WUFDM0MsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLG9CQUFvQixDQUFDLE9BQTBCO1FBQ25ELE9BQU8sQ0FBQyxHQUFHLENBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBdUIsRUFBRSxFQUFFO1lBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sQ0FBQyxhQUFhLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDM0MsQ0FBQztZQUNELFNBQVM7WUFDVCxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN0RSxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzsrR0F0eEJVLGdCQUFnQjttSEFBaEIsZ0JBQWdCOzs0RkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVOzswQkFVSSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1Db250cm9sLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTZWxlY3Rpb25EZWZpbml0aW9uVHlwZUVudW0sIFNtYXJ0Rm9ybVdpZGdldFR5cGUgfSBmcm9tICcuLi9hcGknO1xyXG5pbXBvcnQgeyBTbWFydEZvcm1XaWRnZXQsIFNtYXJ0SXRlbSwgU21hcnRJdGVtcywgU21hcnRTZWxlY3QgfSBmcm9tICcuLi9zbWFydGZvcm0uZm9ybS1tb2RlbCc7XHJcbmltcG9ydCB7IFNtYXJ0Rm9ybSwgU21hcnRGb3JtQ29tcG9uZW50Q29uc3RyYWludCwgU21hcnRWYWxpZGF0b3IsIFZhbHVlIH0gZnJvbSAnLi4vc21hcnRmb3JtLm1vZGVsJztcclxuaW1wb3J0IHsgQ29tcG9uZW50TGlicmFyeSB9IGZyb20gJy4uLy4uL3ZpZXctY29udGV4dC91dGlsaXR5L2NvbXBvbmVudExpYnJhcnknO1xyXG5pbXBvcnQge1xyXG4gIE5hbWVkVmFsaWRhdG9yU2VydmljZSxcclxuICBWYWxpZGF0ZWRXaWRnZXQsXHJcbn0gZnJvbSAnLi4vLi4vc21hcnQtdmFsaWRhdGlvbi9uYW1lZC12YWxpZGF0b3Iuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBTbWFydEZvcm1TZXJ2aWNlIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGVtcHR5S2V5OiBzdHJpbmcgPSAnZSNtJXBAdCp5JztcclxuICBjb21wb25lbnRMaWJyYXJ5ID0gQ29tcG9uZW50TGlicmFyeTtcclxuICBncm91cDogYW55ID0ge307XHJcblxyXG4gIGZvcm1Hcm91cD86IFVudHlwZWRGb3JtR3JvdXA7XHJcblxyXG4gIHNtYXJ0Rm9ybT86IFNtYXJ0Rm9ybTtcclxuXHJcbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHJpdmF0ZSB2YWxpZGF0b3JQcm92aWRlcj86IE5hbWVkVmFsaWRhdG9yU2VydmljZSkge31cclxuXHJcbiAgZ2V0U21hcnRGb3JtV2lkZ2V0QnlLZXkoa2V5OiBzdHJpbmcpOiBTbWFydEZvcm1XaWRnZXQ8YW55PiB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5maW5kU21hcnRGb3JtV2lkZ2V0QnlLZXkodGhpcy5zbWFydEZvcm0/LndpZGdldHMhLCBrZXkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb2xsZWN0S2V5c0Zyb21TbWFydEZvcm0oXHJcbiAgICB3aWRnZXRzOiBTbWFydEZvcm1XaWRnZXQ8YW55PltdIHwgU21hcnRJdGVtczxhbnk+W10sXHJcbiAgICBrZXlzOiBzdHJpbmdbXVxyXG4gICk6IHN0cmluZ1tdIHtcclxuICAgIHdpZGdldHMuZm9yRWFjaCgodykgPT4ge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdy50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTlRBSU5FUiAmJlxyXG4gICAgICAgIHcudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5MQUJFTCAmJlxyXG4gICAgICAgIHcudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DSEVDS19CT1hfMiAmJlxyXG4gICAgICAgIHcudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ZT1VUVUJFX1BMQVlFUlxyXG4gICAgICApIHtcclxuICAgICAgICBrZXlzLnB1c2gody5rZXkpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICB3LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRF9DSElQUyB8fFxyXG4gICAgICAgIHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TRUxFQ1QgfHxcclxuICAgICAgICB3LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuU0VMRUNUX01VTFRJUExFIHx8XHJcbiAgICAgICAgdy50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNIRUNLX0JPWCB8fFxyXG4gICAgICAgIHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5SQURJT19CVVRUT04gfHxcclxuICAgICAgICB3LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSXHJcbiAgICAgICkge1xyXG4gICAgICAgIGlmICh3LnZhbHVlTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBrZXlzID0gdGhpcy5jb2xsZWN0S2V5c0Zyb21TbWFydEZvcm0ody52YWx1ZUxpc3QsIGtleXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh3LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YXzIpIHtcclxuICAgICAgICBpZiAody52YWx1ZUxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgbGV0IGNoaWxkcmVuS2V5cyA9IHRoaXMuY29sbGVjdEtleXNGcm9tU21hcnRGb3JtKHcudmFsdWVMaXN0LCBbXSk7XHJcbiAgICAgICAgICBjaGlsZHJlbktleXMgPSBjaGlsZHJlbktleXNcclxuICAgICAgICAgICAgLmZpbHRlcigoa2V5OiBzdHJpbmcpID0+IGtleSAhPT0gdy5rZXkpXHJcbiAgICAgICAgICAgIC5mbGF0TWFwKChrZXk6IHN0cmluZykgPT4gYCR7dy5rZXl9LiR7a2V5fWApO1xyXG5cclxuICAgICAgICAgIGtleXMucHVzaCguLi5jaGlsZHJlbktleXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGtleXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRTbWFydEZvcm1XaWRnZXRCeUtleShcclxuICAgIHdpZGdldHM6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+W10sXHJcbiAgICBrZXk6IHN0cmluZ1xyXG4gICk6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+IHwgdW5kZWZpbmVkIHtcclxuICAgIGxldCB3aWRnZXRGb3VuZEJ5S2V5OiBTbWFydEZvcm1XaWRnZXQ8YW55PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBmb3IgKGxldCB3IG9mIHdpZGdldHMpIHtcclxuICAgICAgaWYgKHcua2V5ID09PSBrZXkpIHtcclxuICAgICAgICByZXR1cm4gdztcclxuICAgICAgfSBlbHNlIGlmICh3LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmIHcudmFsdWVMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICB3aWRnZXRGb3VuZEJ5S2V5ID0gdGhpcy5maW5kU21hcnRGb3JtV2lkZ2V0QnlLZXkody52YWx1ZUxpc3QsIGtleSk7XHJcbiAgICAgICAgaWYgKHdpZGdldEZvdW5kQnlLZXkpIHtcclxuICAgICAgICAgIHJldHVybiB3aWRnZXRGb3VuZEJ5S2V5O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHdpZGdldEZvdW5kQnlLZXk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFZhbHVlRGVlcGx5KG1vZGVsOiBhbnksIGtleTogc3RyaW5nKTogYW55IHtcclxuICAgIGxldCBzcGxpdHRlZEtleSA9IGtleS5zcGxpdCgnLicpO1xyXG4gICAgbGV0IHZhbHVlOiBhbnk7XHJcblxyXG4gICAgc3BsaXR0ZWRLZXkuZm9yRWFjaCgoazogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgICB2YWx1ZSA9IG1vZGVsW2tdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHZhbHVlW2tdID09PSB1bmRlZmluZWQgfHxcclxuICAgICAgICAgIHZhbHVlW2tdID09PSBudWxsIHx8XHJcbiAgICAgICAgICAoIXZhbHVlICYmIHR5cGVvZiB2YWx1ZVtrXSAhPT0gJ2Jvb2xlYW4nKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdmFsdWUgPSAnJztcclxuICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZVtrXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgc2V0VmFsdWVEZWVwbHkobW9kZWw6IGFueSwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIGxldCBzcGxpdHRlZEtleXMgPSBrZXkuc3BsaXQoJy4nKTtcclxuXHJcbiAgICBsZXQgZGVlcE1vZGVsOiBhbnlbXSA9IFttb2RlbF07XHJcbiAgICBsZXQgdGVtcE1vZGVsOiBhbnk7XHJcblxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHNwbGl0dGVkS2V5cy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgdGVtcE1vZGVsID0gZGVlcE1vZGVsW2luZGV4XTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0eXBlb2YgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dICE9PSAnc3RyaW5nJyAmJlxyXG4gICAgICAgIHR5cGVvZiB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09ICdib29sZWFuJyAmJlxyXG4gICAgICAgIHR5cGVvZiB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09ICdudW1iZXInICYmXHJcbiAgICAgICAgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dICE9PSB1bmRlZmluZWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgZGVlcE1vZGVsLnB1c2godGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGluZGV4ID09PSBzcGxpdHRlZEtleXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgIGxldCBvbGRWYWx1ZSA9IHRlbXBNb2RlbFtzcGxpdHRlZEtleXNbaW5kZXhdXTtcclxuICAgICAgICAvLyBpZiAodmFsdWUgPT09ICcnICYmIChvbGRWYWx1ZSA9PT0gbnVsbCB8fCBvbGRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB0aGVuIGRvbid0IGNoYW5nZSB2YWx1ZS5cclxuICAgICAgICBpZiAodmFsdWUgIT09ICcnIHx8IChvbGRWYWx1ZSAhPT0gbnVsbCAmJiBvbGRWYWx1ZSAhPT0gdW5kZWZpbmVkKSkge1xyXG4gICAgICAgICAgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRQcm9wZXJ0eU5hbWVzRGVlcGx5KGVsZW1lbnQ6IGFueSk6IHN0cmluZ1tdIHtcclxuICAgIGxldCBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoZWxlbWVudCk7XHJcbiAgICBwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0eXBlb2YgZWxlbWVudFtwcm9wZXJ0eV0gPT09ICdzdHJpbmcnIHx8XHJcbiAgICAgICAgdHlwZW9mIGVsZW1lbnRbcHJvcGVydHldID09PSAnYm9vbGVhbicgfHxcclxuICAgICAgICB0eXBlb2YgZWxlbWVudFtwcm9wZXJ0eV0gPT09ICdudW1iZXInIHx8XHJcbiAgICAgICAgZWxlbWVudFtwcm9wZXJ0eV0gPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgIGVsZW1lbnRbcHJvcGVydHldID09PSBudWxsIHx8XHJcbiAgICAgICAgIWVsZW1lbnRbcHJvcGVydHldIHx8XHJcbiAgICAgICAgIWVsZW1lbnRcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBpbm5lclByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnR5TmFtZXNEZWVwbHkoZWxlbWVudFtwcm9wZXJ0eV0pO1xyXG4gICAgICBpbm5lclByb3BlcnRpZXMgPSBpbm5lclByb3BlcnRpZXMubWFwKFxyXG4gICAgICAgIChpbm5lclByb3BlcnR5OiBzdHJpbmcpID0+IGAke3Byb3BlcnR5fS4ke2lubmVyUHJvcGVydHl9YFxyXG4gICAgICApO1xyXG5cclxuICAgICAgcHJvcGVydGllcy5wdXNoKC4uLmlubmVyUHJvcGVydGllcyk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xyXG4gIH1cclxuXHJcbiAgc2V0VmFsdWVzRnJvbU1vZGVsKHdpZGdldHM/OiBTbWFydEZvcm1XaWRnZXQ8YW55PltdLCBjb21wTGliPzogQ29tcG9uZW50TGlicmFyeSk6IHZvaWQge1xyXG4gICAgY29uc3Qgc21hcnRGb3JtID0gdGhpcy5zbWFydEZvcm0hO1xyXG4gICAgY29uc3QgZGF0YSA9IHNtYXJ0Rm9ybS5jb21wb25lbnRNb2RlbD8uZGF0YTtcclxuICAgIGlmICghZGF0YSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF3aWRnZXRzKSB7XHJcbiAgICAgIHdpZGdldHMgPSBzbWFydEZvcm0ud2lkZ2V0cztcclxuICAgIH1cclxuICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gdGhpcy5jb2xsZWN0S2V5c0Zyb21TbWFydEZvcm0od2lkZ2V0cywgW10pO1xyXG5cclxuICAgIGxldCB3aWRnZXQ6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+IHwgdW5kZWZpbmVkO1xyXG4gICAgZm9yIChjb25zdCBrZXkgb2YgdGhpcy5nZXRQcm9wZXJ0eU5hbWVzRGVlcGx5KGRhdGEpKSB7XHJcbiAgICAgIGlmIChrZXlzLmluY2x1ZGVzKGtleSkpIHtcclxuICAgICAgICB3aWRnZXQgPSB0aGlzLmZpbmRTbWFydEZvcm1XaWRnZXRCeUtleSh3aWRnZXRzLCBrZXkpO1xyXG4gICAgICAgIGlmICh3aWRnZXQpIHtcclxuICAgICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVEZWVwbHkoZGF0YSwga2V5KTtcclxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyAmJiB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5UT0dHTEUpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBgJHt2YWx1ZX1gO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvbXBMaWIgPT09IHRoaXMuY29tcG9uZW50TGlicmFyeS5QUklNRU5HKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5EQVRFX1BJQ0tFUiB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRBVEVfVElNRV9QSUNLRVJcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB3aWRnZXQudmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTkRJQ0FUT1IgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTEFCRUwgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRJVklERVIgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQlVUVE9OICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTVBPTkVOVCAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ZT1VUVUJFX1BMQVlFUlxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHdpZGdldC52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAod2lkZ2V0LnNob3dMYWJlbCA9PT0gdW5kZWZpbmVkICYmIHNtYXJ0Rm9ybS5zaG93TGFiZWwpIHtcclxuICAgICAgICAgICAgICB3aWRnZXQuc2hvd0xhYmVsID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuY29weUZyb21WYWx1ZVNldFRvVmFsdWVzTGlzdCh3aWRnZXQsIHNtYXJ0Rm9ybS5jb21wb25lbnRNb2RlbC52YWx1ZVNldHMpO1xyXG5cclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgd2lkZ2V0ICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNIRUNLX0JPWCAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudmFsdWVMaXN0Lmxlbmd0aCA9PT0gMVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHdpZGdldC52YWx1ZUxpc3QgPSB3aWRnZXQudmFsdWVMaXN0Lm1hcCgoaXRlbTogU21hcnRJdGVtPGFueT4pID0+IHtcclxuICAgICAgICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLmdldFZhbHVlRGVlcGx5KGRhdGEsIGtleSk7XHJcbiAgICAgICAgICAgICAgaXRlbS52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gSW4gY2FzZSBvZiBDaGVja0JveDJcclxuICAgICAgICAgIGxldCBzcGxpdHRlZEtleXMgPSBrZXkuc3BsaXQoJy4nKTtcclxuICAgICAgICAgIHNwbGl0dGVkS2V5cy5zcGxpY2Uoc3BsaXR0ZWRLZXlzLmxlbmd0aCAtIDEsIDEpO1xyXG4gICAgICAgICAgd2lkZ2V0ID0gdGhpcy5maW5kU21hcnRGb3JtV2lkZ2V0QnlLZXkod2lkZ2V0cywgc3BsaXR0ZWRLZXlzLmpvaW4oJy4nKSk7XHJcbiAgICAgICAgICBpZiAod2lkZ2V0ICYmIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNIRUNLX0JPWF8yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29weUZyb21WYWx1ZVNldFRvVmFsdWVzTGlzdCh3aWRnZXQsIHNtYXJ0Rm9ybS5jb21wb25lbnRNb2RlbC52YWx1ZVNldHMpO1xyXG4gICAgICAgICAgICBpZiAod2lkZ2V0LnZhbHVlTGlzdCkge1xyXG4gICAgICAgICAgICAgIHdpZGdldC52YWx1ZUxpc3QgPSB3aWRnZXQudmFsdWVMaXN0Lm1hcCgoaXRlbTogU21hcnRJdGVtPGFueT4pID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVEZWVwbHkoZGF0YSwgYCR7d2lkZ2V0Py5rZXl9LiR7aXRlbS5rZXl9YCk7XHJcbiAgICAgICAgICAgICAgICBpdGVtLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb3B5RnJvbVZhbHVlU2V0VG9WYWx1ZXNMaXN0KHdpZGdldDogU21hcnRGb3JtV2lkZ2V0PGFueT4sIHZhbHVlU2V0czogYW55KSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlNFTEVDVCB8fFxyXG4gICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TRUxFQ1RfTVVMVElQTEUgfHxcclxuICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuUkFESU9fQlVUVE9OIHx8XHJcbiAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNIRUNLX0JPWCB8fFxyXG4gICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DSEVDS19CT1hfMiB8fFxyXG4gICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5URVhUX0ZJRUxEXHJcbiAgICApIHtcclxuICAgICAgaWYgKHdpZGdldC5zZWxlY3Rpb24gJiYgdmFsdWVTZXRzKSB7XHJcbiAgICAgICAgbGV0IHZhbHVlU2V0ID0gdmFsdWVTZXRzW3dpZGdldC5zZWxlY3Rpb24udmFsdWVTZXROYW1lXTtcclxuICAgICAgICBpZiAoIXZhbHVlU2V0KSB7XHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ3ZhbHVlU2V0IG5vdCBmb3VuZCcsIHdpZGdldC5zZWxlY3Rpb24udmFsdWVTZXROYW1lKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IHZhbHVlU2V0RGF0YSA9IHZhbHVlU2V0LnZhbHVlU2V0RGF0YTtcclxuICAgICAgICAgIGxldCB2YWx1ZXMgPSB2YWx1ZVNldERhdGEudmFsdWVzO1xyXG4gICAgICAgICAgbGV0IGRpc3BsYXlQcm9wZXJ0eSA9XHJcbiAgICAgICAgICAgICh3aWRnZXQgYXMgU21hcnRTZWxlY3Q8YW55Pikuc2VsZWN0aW9uPy5kaXNwbGF5UHJvcGVydHkgPz8gJ2Rpc3BsYXlWYWx1ZSc7XHJcbiAgICAgICAgICAvLyBjaGVjayBpcyBkaXNwbGF5UHJvcGVydHkgZXhpc3RzLCBmYWxsYmFjayBmb3IgY29tbW9uIGRpc3BsYXkgcHJvcGVydGllc1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmNoZWNrUHJvcGVydHkodmFsdWVzLCBkaXNwbGF5UHJvcGVydHkpKSB7XHJcbiAgICAgICAgICAgIGRpc3BsYXlQcm9wZXJ0eSA9ICduYW1lJzsgLy8gR2VuZXJpY1ZhbHVlLm5hbWVcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrUHJvcGVydHkodmFsdWVzLCBkaXNwbGF5UHJvcGVydHkpKSB7XHJcbiAgICAgICAgICAgICAgZGlzcGxheVByb3BlcnR5ID0gJ2Rpc3BsYXlWYWx1ZSc7IC8vIFZhbHVlLmRpc3BsYXlWYWx1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHdpZGdldC5zZWxlY3Rpb24udHlwZSA9PT0gU2VsZWN0aW9uRGVmaW5pdGlvblR5cGVFbnVtLlBST1BFUlRZICYmXHJcbiAgICAgICAgICAgICF3aWRnZXQuc2VsZWN0aW9uLm1hcHBpbmcubGVuZ3RoXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgbGV0IGtleVByb3BlcnR5ID0gdmFsdWVTZXREYXRhLmtleVByb3BlcnR5ID8/ICdvYmplY3RVcmknO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tQcm9wZXJ0eSh2YWx1ZXMsIGtleVByb3BlcnR5KSkge1xyXG4gICAgICAgICAgICAgIGtleVByb3BlcnR5ID0gJ3VyaSc7IC8vIEdlbmVyaWNWYWx1ZS51cmlcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tQcm9wZXJ0eSh2YWx1ZXMsIGtleVByb3BlcnR5KSkge1xyXG4gICAgICAgICAgICAgICAga2V5UHJvcGVydHkgPSAnb2JqZWN0VXJpJzsgLy8gVmFsdWUub2JqZWN0VXJpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdpZGdldC52YWx1ZUxpc3QgPSB2YWx1ZXMubWFwKCh2YWx1ZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGtleTogdmFsdWVba2V5UHJvcGVydHldLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IHZhbHVlW2Rpc3BsYXlQcm9wZXJ0eV0sXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBTbWFydEZvcm1XaWRnZXRUeXBlLklURU0sXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVba2V5UHJvcGVydHldLFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmFkZEVtcHR5SXRlbVRvVmFsdWVMaXN0KHdpZGdldCwgd2lkZ2V0LnNlbGVjdGlvbi5lbXB0eUxhYmVsKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIHdpZGdldC5zZWxlY3Rpb24udHlwZSA9PT0gU2VsZWN0aW9uRGVmaW5pdGlvblR5cGVFbnVtLk9CSkVDVCAmJlxyXG4gICAgICAgICAgICAhd2lkZ2V0LnNlbGVjdGlvbi5tYXBwaW5nLmxlbmd0aFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHdpZGdldC52YWx1ZUxpc3QgPSB2YWx1ZXMubWFwKCh2YWx1ZTogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGtleTogYCR7aW5kZXh9YCxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiB2YWx1ZVtkaXNwbGF5UHJvcGVydHldLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogU21hcnRGb3JtV2lkZ2V0VHlwZS5JVEVNLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmFkZEVtcHR5SXRlbVRvVmFsdWVMaXN0KHdpZGdldCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrUHJvcGVydHkodmFsdWVzOiBvYmplY3RbXSwgcHJvcGVydHk6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF2YWx1ZXM/Lmxlbmd0aCkge1xyXG4gICAgICAvLyBubyBzYW1wbGUgZGF0YSwgYXNzdW1lIGV4aXN0YW5jZVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBwcm9wZXJ0eSBpbiB2YWx1ZXNbMF07XHJcbiAgfVxyXG5cclxuICB0b0Zvcm1Hcm91cChjb21wTGliPzogQ29tcG9uZW50TGlicmFyeSk6IFVudHlwZWRGb3JtR3JvdXAge1xyXG4gICAgdGhpcy5jcmVhdGVGb3JtQ29udHJvbHModGhpcy5zbWFydEZvcm0hLndpZGdldHMsIGNvbXBMaWIhKTtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JtR3JvdXApIHtcclxuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMgPSB0aGlzLmdyb3VwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtR3JvdXAgPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh0aGlzLmdyb3VwKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zbWFydEZvcm0hLnZhbGlkYXRvcnMgJiYgdGhpcy5zbWFydEZvcm0hLnZhbGlkYXRvcnMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnNldFZhbGlkYXRvcnMoXHJcbiAgICAgICAgdGhpcy5zbWFydEZvcm0hLnZhbGlkYXRvcnMubWFwKCh2YWxpZGF0b3I6IFNtYXJ0VmFsaWRhdG9yKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cDtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUZvcm1Db250cm9scyhcclxuICAgIHdpZGdldHM6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+W10gfCBTbWFydEl0ZW08YW55PltdLFxyXG4gICAgY29tcExpYjogQ29tcG9uZW50TGlicmFyeSxcclxuICAgIHBhcmVudEtleT86IHN0cmluZ1xyXG4gICk6IHZvaWQge1xyXG4gICAgd2lkZ2V0cy5tYXAoKHdpZGdldCkgPT4ge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU5ESUNBVE9SICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTEFCRUwgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVIgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTUFHRSAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLlNWRyAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRJVklERVIgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5CVVRUT04gJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DSEVDS19CT1hfMiAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklURU0gJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT01QT05FTlQgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5NQVRSSVggJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ZT1VUVUJFX1BMQVlFUlxyXG4gICAgICApIHtcclxuICAgICAgICBpZiAoY29tcExpYiEgPT09IHRoaXMuY29tcG9uZW50TGlicmFyeS5QUklNRU5HKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRBVEVfUElDS0VSIHx8XHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRBVEVfVElNRV9QSUNLRVJcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBpZiAod2lkZ2V0LnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnZhbHVlID0gbmV3IERhdGUod2lkZ2V0LnZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKGAke3dpZGdldC5rZXl9YCwgd2lkZ2V0LnZhbHVlLCB3aWRnZXQuaXNEaXNhYmxlZCwgd2lkZ2V0LnZhbGlkYXRvcnMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTUFUUklYKSB7XHJcbiAgICAgICAgaWYgKHdpZGdldC5pc011bHRpcGxlKSB7XHJcbiAgICAgICAgICBsZXQgZGF0YUtleXMgPSBPYmplY3Qua2V5cyh3aWRnZXQudmFsdWUuZGF0YSk7XHJcbiAgICAgICAgICBsZXQgaXRlbUtleXMgPSB3aWRnZXQudmFsdWUuY29sdW1ucy5tYXAoKHZhbHVlOiBWYWx1ZSkgPT4gdmFsdWUuY29kZSk7XHJcbiAgICAgICAgICBkYXRhS2V5cy5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBpdGVtS2V5cy5mb3JFYWNoKChpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAgICAgYCR7d2lkZ2V0LmtleX0uZGF0YS4ke2tleX0uJHtpdGVtfWAsXHJcbiAgICAgICAgICAgICAgICB3aWRnZXQudmFsdWUuZGF0YVtrZXldW2l0ZW1dLFxyXG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkLCAvLyBUT0RPIHJlYWxseSB3ZSBkb24ndCBwYXNzIHdpZGdldC5pc0Rpc2FibGVkP1xyXG4gICAgICAgICAgICAgICAgd2lkZ2V0LnZhbGlkYXRvcnNcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyh3aWRnZXQudmFsdWUuZGF0YSkubWFwKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAgIGAke3dpZGdldC5rZXl9LiR7a2V5fWAsXHJcbiAgICAgICAgICAgICAgd2lkZ2V0LmlzTXVsdGlwbGUgPyB3aWRnZXQudmFsdWUuZGF0YVtrZXldIDogd2lkZ2V0LnZhbHVlLmRhdGFba2V5XVswXSxcclxuICAgICAgICAgICAgICB3aWRnZXQuaXNEaXNhYmxlZCxcclxuICAgICAgICAgICAgICB3aWRnZXQudmFsaWRhdG9yc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JVEVNICYmIHBhcmVudEtleSkge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICBgJHtwYXJlbnRLZXl9LiR7d2lkZ2V0LmtleX1gLFxyXG4gICAgICAgICAgd2lkZ2V0LnZhbHVlLFxyXG4gICAgICAgICAgd2lkZ2V0LmlzRGlzYWJsZWQsXHJcbiAgICAgICAgICB1bmRlZmluZWRcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmIHdpZGdldC52YWx1ZUxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2xzKHdpZGdldC52YWx1ZUxpc3QsIGNvbXBMaWIpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DSEVDS19CT1hfMiAmJiB3aWRnZXQudmFsdWVMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9scyh3aWRnZXQudmFsdWVMaXN0LCBjb21wTGliLCB3aWRnZXQua2V5KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpc1ZhbGlkYXRvckluTGlzdCh2YWxpZGF0b3I6IFNtYXJ0VmFsaWRhdG9yLCBsaXN0PzogU21hcnRWYWxpZGF0b3JbXSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGxpc3QgIT09IHVuZGVmaW5lZCAmJiBsaXN0Lmxlbmd0aCA+IDAgJiYgbGlzdC5zb21lKCh2KSA9PiB2ID09PSB2YWxpZGF0b3IpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVGb3JtQ29udHJvbChcclxuICAgIGtleTogc3RyaW5nLFxyXG4gICAgdmFsdWU/OiBzdHJpbmcsXHJcbiAgICBpc0Rpc2FibGVkPzogYm9vbGVhbixcclxuICAgIHZhbGlkYXRvcnM/OiBTbWFydFZhbGlkYXRvcltdXHJcbiAgKTogVW50eXBlZEZvcm1Db250cm9sIHtcclxuICAgIGxldCBmb3JtQ29udHJvbDogVW50eXBlZEZvcm1Db250cm9sID0gdGhpcy5ncm91cFtrZXldO1xyXG4gICAgaWYgKCFmb3JtQ29udHJvbCkge1xyXG4gICAgICBmb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcclxuICAgICAgdGhpcy5ncm91cFtrZXldID0gZm9ybUNvbnRyb2w7XHJcbiAgICB9XHJcbiAgICBmb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSB8fCAnJywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgZm9ybUNvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICB2YWxpZGF0b3JzPy5tYXAoKHZhbGlkYXRvcjogU21hcnRWYWxpZGF0b3IpID0+IHtcclxuICAgICAgZm9ybUNvbnRyb2wuYWRkVmFsaWRhdG9ycyh2YWxpZGF0b3IudmFsaWRhdG9yKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChpc0Rpc2FibGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICBmb3JtQ29udHJvbC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmb3JtQ29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ybUNvbnRyb2w7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvcHlWYWx1ZUZyb21Gb3JtVG9XaWRnZXRCZWFucyhcclxuICAgIHdpZGdldHM6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+W10sXHJcbiAgICBncm91cDogVW50eXBlZEZvcm1Hcm91cFxyXG4gICk6IHZvaWQge1xyXG4gICAgd2lkZ2V0cy5mb3JFYWNoKCh3aWRnZXQpID0+IHtcclxuICAgICAgaWYgKHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTlRBSU5FUiAmJiB3aWRnZXQudmFsdWVMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmNvcHlWYWx1ZUZyb21Gb3JtVG9XaWRnZXRCZWFucyh3aWRnZXQudmFsdWVMaXN0LCBncm91cCk7XHJcbiAgICAgIH0gZWxzZSBpZiAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTUFUUklYKSB7XHJcbiAgICAgICAgaWYgKHdpZGdldC5pc011bHRpcGxlKSB7XHJcbiAgICAgICAgICBsZXQgZGF0YUtleXMgPSBPYmplY3Qua2V5cyh3aWRnZXQudmFsdWUuZGF0YSk7XHJcbiAgICAgICAgICBsZXQgaXRlbUtleXMgPSB3aWRnZXQudmFsdWUuY29sdW1ucy5tYXAoKHZhbHVlOiBWYWx1ZSkgPT4gdmFsdWUuY29kZSk7XHJcbiAgICAgICAgICBkYXRhS2V5cy5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBpdGVtS2V5cy5mb3JFYWNoKChpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICB3aWRnZXQudmFsdWUuZGF0YVtrZXldW2l0ZW1dID0gW1xyXG4gICAgICAgICAgICAgICAgZ3JvdXAuY29udHJvbHNbYCR7d2lkZ2V0LmtleX0uZGF0YS4ke2tleX0uJHtpdGVtfWBdLnZhbHVlLFxyXG4gICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgbGV0IGRhdGFrZXlzID0gT2JqZWN0LmtleXMod2lkZ2V0LnZhbHVlLmRhdGEpO1xyXG4gICAgICAgICAgLy9NYXAgY2hlY2tib3gga2V5IC0gYm9vbGVhbiB2YWx1ZSB0byBzdHJpbmcga2V5IGFycmF5XHJcbiAgICAgICAgICBsZXQgdmFsdWVLZXlzID0gd2lkZ2V0LnZhbHVlLmNvbHVtbnMubWFwKCh2YWx1ZTogVmFsdWUpID0+IHZhbHVlLmNvZGUpO1xyXG4gICAgICAgICAgZGF0YWtleXMuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgbGV0IG5ld0RhdGE6IGFueVtdID0gW107XHJcbiAgICAgICAgICAgIHZhbHVlS2V5cy5mb3JFYWNoKCh2YWx1ZUtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gd2lkZ2V0LnZhbHVlLmRhdGFba2V5XVt2YWx1ZUtleV07XHJcbiAgICAgICAgICAgICAgaWYgKHZhbHVlWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdEYXRhLnB1c2godmFsdWVLZXkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHdpZGdldC52YWx1ZS5kYXRhW2tleV0gPSBuZXdEYXRhO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIE9iamVjdC5rZXlzKHdpZGdldC52YWx1ZS5kYXRhKS5tYXAoKGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIHdpZGdldC52YWx1ZS5kYXRhW2tleV0gPSBbZ3JvdXAuY29udHJvbHNbYCR7d2lkZ2V0LmtleX0uJHtrZXl9YF0udmFsdWVdO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklORElDQVRPUiAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkxBQkVMICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU1BR0UgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TVkcgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5CVVRUT04gJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ESVZJREVSICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YXzIgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT01QT05FTlQgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ZT1VUVUJFX1BMQVlFUlxyXG4gICAgICApIHtcclxuICAgICAgICB3aWRnZXQudmFsdWUgPSBncm91cC5jb250cm9sc1t3aWRnZXQua2V5XS52YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0b1NtYXJ0Rm9ybShncm91cDogVW50eXBlZEZvcm1Hcm91cCk6IFNtYXJ0Rm9ybSB7XHJcbiAgICBpZiAodGhpcy5zbWFydEZvcm0pIHtcclxuICAgICAgdGhpcy5jb3B5VmFsdWVGcm9tRm9ybVRvV2lkZ2V0QmVhbnModGhpcy5zbWFydEZvcm0ud2lkZ2V0cywgZ3JvdXApO1xyXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5zbWFydEZvcm0uY29tcG9uZW50TW9kZWw/LmRhdGE7XHJcbiAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgdGhpcy5nZXRQcm9wZXJ0eU5hbWVzRGVlcGx5KGRhdGEpKSB7XHJcbiAgICAgICAgICBpZiAoZ3JvdXAuY29udHJvbHNba2V5XSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlRGVlcGx5KGRhdGEsIGtleSwgZ3JvdXAuY29udHJvbHNba2V5XS52YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5zbWFydEZvcm0hO1xyXG4gIH1cclxuXHJcbiAgZ2V0TW9kZWwoZ3JvdXA6IFVudHlwZWRGb3JtR3JvdXApOiBhbnkge1xyXG4gICAgaWYgKCF0aGlzLnNtYXJ0Rm9ybT8uY29tcG9uZW50TW9kZWwpIHtcclxuICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG4gICAgbGV0IG9yaWdpbmFsTW9kZWwgPSB0aGlzLnNtYXJ0Rm9ybS5jb21wb25lbnRNb2RlbC5kYXRhO1xyXG4gICAgbGV0IGNvcHlPZk1vZGVsID0geyAuLi5vcmlnaW5hbE1vZGVsIH07XHJcblxyXG4gICAgLy8gY29weU9mTW9kZWwgc2hvdWxkIGJlIHRoZSBjdXJyZW50IG1vZGVsXHJcbiAgICB0aGlzLnNtYXJ0Rm9ybS5jb21wb25lbnRNb2RlbC5kYXRhID0gY29weU9mTW9kZWw7XHJcbiAgICAvLyBjb3B5IHZhbHVlIGZyb20gRm9ybUdyb3VwIGludG8gbW9kZWxcclxuICAgIHRoaXMudG9TbWFydEZvcm0oZ3JvdXApO1xyXG5cclxuICAgIGxldCBuZXdNb2RlbCA9IHRoaXMuc21hcnRGb3JtLmNvbXBvbmVudE1vZGVsLmRhdGE7XHJcbiAgICB0aGlzLnNtYXJ0Rm9ybS5jb21wb25lbnRNb2RlbC5kYXRhID0gb3JpZ2luYWxNb2RlbDtcclxuXHJcbiAgICByZXR1cm4gbmV3TW9kZWw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5Q29tcG9uZW50Q29uc3RyYWludHMoXHJcbiAgICB3aWRnZXRzOiBTbWFydEZvcm1XaWRnZXQ8YW55PltdLFxyXG4gICAgY29uc3RyYWludHM6IFNtYXJ0Rm9ybUNvbXBvbmVudENvbnN0cmFpbnRbXVxyXG4gICkge1xyXG4gICAgd2lkZ2V0cy5mb3JFYWNoKCh3aWRnZXQ6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+KSA9PiB7XHJcbiAgICAgIGxldCB3aWRnZXRDb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzPy5maWx0ZXIoXHJcbiAgICAgICAgLy8oY29uc3RyYWludDogU21hcnRGb3JtQ29tcG9uZW50Q29uc3RyYWludCkgPT4gY29uc3RyYWludC5kYXRhTmFtZSA9PT0gd2lkZ2V0LmtleVxyXG4gICAgICAgIChjb25zdHJhaW50KSA9PiB0aGlzLmFudFBhdGhNYXRjaGVyKGNvbnN0cmFpbnQuZGF0YU5hbWUsIHdpZGdldC5rZXkpXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAod2lkZ2V0Q29uc3RyYWludHMgJiYgd2lkZ2V0Q29uc3RyYWludHMubGVuZ3RoKSB7XHJcbiAgICAgICAgd2lkZ2V0Q29uc3RyYWludHMuZm9yRWFjaCgoY29uc3RyYWludCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNvbnN0cmFpbnQudmlzaWJsZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmICh3aWRnZXQuaXNWaXNpYmxlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICB3aWRnZXQuaXNWaXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgd2lkZ2V0LmlzVmlzaWJsZSA9IGNvbnN0cmFpbnQudmlzaWJsZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU5ESUNBVE9SICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkxBQkVMICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTlRBSU5FUiAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTUFHRSAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TVkcgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuRklMRV9VUExPQURFUiAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ESVZJREVSICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkJVVFRPTiAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT01QT05FTlQgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuWU9VVFVCRV9QTEFZRVJcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBsZXQgdmFsaWRhdG9ycyA9IHdpZGdldC52YWxpZGF0b3JzID8/IFtdO1xyXG4gICAgICAgICAgICBsZXQgcmVxdWlyZWRJbmRleCA9IHZhbGlkYXRvcnMuZmluZEluZGV4KCh2KSA9PiB2LnZhbGlkYXRvciA9PT0gVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIGxldCB3YXNNYW5kYXRvcnkgPSByZXF1aXJlZEluZGV4ID49IDA7XHJcbiAgICAgICAgICAgIGxldCB0b2JlTWFuZGF0b3J5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmIChjb25zdHJhaW50Lm1hbmRhdG9yeSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgLy8gbm90IHNwZWNpZmllZCBvbiBzZXJ2ZXIsIHVzZSBjbGllbnQgc3RhdGVcclxuICAgICAgICAgICAgICAvLyBpZiB3aWRnZXQgaXMgbm90IHZpc2libGUsIGNsaWVudCBzaG91bGQgZGVmYXVsdCB0byBub3QgbWFuZGF0b3J5XHJcbiAgICAgICAgICAgICAgdG9iZU1hbmRhdG9yeSA9IHdpZGdldC5pc1Zpc2libGUgJiYgd2FzTWFuZGF0b3J5O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRvYmVNYW5kYXRvcnkgPSBjb25zdHJhaW50Lm1hbmRhdG9yeTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXdhc01hbmRhdG9yeSAmJiB0b2JlTWFuZGF0b3J5KSB7XHJcbiAgICAgICAgICAgICAgLy8gYWRkIHJlcXVpcmVkIHZhbGlkYXRvclxyXG4gICAgICAgICAgICAgIHdpZGdldC52YWxpZGF0b3JzID0gW1xyXG4gICAgICAgICAgICAgICAgLi4udmFsaWRhdG9ycyxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yOiBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgICAgICAgICAgICBpc0N1c3RvbTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZTogJycsXHJcbiAgICAgICAgICAgICAgICAgIG5hbWU6ICdyZXF1aXJlZCcsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgLy8gcmVtb3ZlIGVtcHR5IGl0ZW1cclxuICAgICAgICAgICAgICB0aGlzLnJlbW92ZUVtcHR5SXRlbUZyb21WYWx1ZUxpc3Qod2lkZ2V0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAod2FzTWFuZGF0b3J5ICYmICF0b2JlTWFuZGF0b3J5KSB7XHJcbiAgICAgICAgICAgICAgLy8gcmVtb3ZlIHJlcXVpcmVkIHZhbGlkYXRvclxyXG4gICAgICAgICAgICAgIHdpZGdldC52YWxpZGF0b3JzPy5zcGxpY2UocmVxdWlyZWRJbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgLy8gYWRkIGVtcHR5IGl0ZW1cclxuICAgICAgICAgICAgICBsZXQgZW1wdHlMYWJlbCA9ICcnO1xyXG4gICAgICAgICAgICAgIGlmICgnc2VsZWN0aW9uJyBpbiB3aWRnZXQpIHtcclxuICAgICAgICAgICAgICAgIGVtcHR5TGFiZWwgPSB3aWRnZXQuc2VsZWN0aW9uPy5lbXB0eUxhYmVsID8/ICcnO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLmFkZEVtcHR5SXRlbVRvVmFsdWVMaXN0KHdpZGdldCwgZW1wdHlMYWJlbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNvbnN0cmFpbnQuZW5hYmxlZCA9PT0gdW5kZWZpbmVkIHx8IGNvbnN0cmFpbnQuZW5hYmxlZCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIGlmICh3aWRnZXQuaXNEaXNhYmxlZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICB3aWRnZXQuaXNEaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB3aWRnZXQuaXNEaXNhYmxlZCA9ICFjb25zdHJhaW50LmVuYWJsZWQ7XHJcbiAgICAgICAgICAgICAgaWYgKHdpZGdldC50eXBlID09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuUklDSF9URVhUKSB7XHJcbiAgICAgICAgICAgICAgICB3aWRnZXQuaXNSZWFkb25seSA9ICFjb25zdHJhaW50LmVuYWJsZWQ7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yUHJvdmlkZXI/LmFwcGx5Q29uc3RyYWludCh3aWRnZXQgYXMgVmFsaWRhdGVkV2lkZ2V0PGFueT4sIGNvbnN0cmFpbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVIgJiZcclxuICAgICAgICB3aWRnZXQudmFsdWVMaXN0ICYmXHJcbiAgICAgICAgd2lkZ2V0LnZhbHVlTGlzdC5sZW5ndGhcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5hcHBseUNvbXBvbmVudENvbnN0cmFpbnRzKHdpZGdldC52YWx1ZUxpc3QsIGNvbnN0cmFpbnRzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2V4UmVnZXhDaGFycyA9IG5ldyBSZWdFeHAoL1tcXC5cXC1cXFtcXF1cXC9cXHtcXH1cXChcXClcXCtcXF5cXCRcXFxcXFx8XS9nKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2V4QXN0ZXJpc2tJblRoZU1pZGRsZSA9IG5ldyBSZWdFeHAoLyhbXlxcKl0pXFwqKFteXFwqXSkvZyk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSByZWdleEFzdGVyaXNrSW5UaGVFbmQgPSBuZXcgUmVnRXhwKC8oW15cXCpdKVxcKiQvZyk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSByZWdleEFzdGVyaXNrSW5UaGVCZWdpbm5pbmcgPSBuZXcgUmVnRXhwKC9eXFwqKFteXFwqXSkvZyk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSByZWdleEFzdGVyaXNrT25seSA9IG5ldyBSZWdFeHAoL15cXCokL2cpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnZXhEb3VibGVBc3Rlcmlza1dpdGhEb3QgPSBuZXcgUmVnRXhwKC9cXCpcXCpcXFxcXFwuL2cpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnZXhEb3VibGVBc3RlcmlzayA9IG5ldyBSZWdFeHAoL1xcKlxcKi9nKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2V4UXVlc3Rpb25NYXJrID0gbmV3IFJlZ0V4cCgvXFw/L2cpO1xyXG4gIHByaXZhdGUgcmVnZXhCeVBhdHRlcm46IE1hcDxzdHJpbmcsIFJlZ0V4cD4gPSBuZXcgTWFwKCk7XHJcblxyXG4gIGFudFBhdGhNYXRjaGVyKHBhdHRlcm4/OiBzdHJpbmcsIHBhdGg/OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghcGF0dGVybiB8fCAhcGF0aCkge1xyXG4gICAgICAvLyBlbXB0eSBwYXR0ZXJuIG9yIHBhdGggLT4gbm90IGV2YWx1YXRlZCwgdHJ1ZSBvciBmYWxzZT9cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgbGV0IHJlZ2V4ID0gdGhpcy5yZWdleEJ5UGF0dGVybi5nZXQocGF0dGVybik7XHJcbiAgICBpZiAocmVnZXggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAvLyBlc2NhcGUgcmVnZXggY2hhcmFjdGVycyBleGNlcHQgZm9yID8sICosICoqXHJcbiAgICAgIGxldCByZWdleFBhdHRlcm4gPSBwYXR0ZXJuLnJlcGxhY2UodGhpcy5yZWdleFJlZ2V4Q2hhcnMsICdcXFxcJCYnKTtcclxuXHJcbiAgICAgIC8vIHJlcGxhY2UgYW50LXN0eWxlIHdpbGRjYXJkcyB3aXRoIHJlZ2V4IGVxdWl2YWxlbnRzXHJcblxyXG4gICAgICAvLyByZXBsYWNlICogd2l0aCBhIHBhdHRlcm4gdGhhdCBtYXRjaGVzIGFueSBjaGFyYWN0ZXIgZXhjZXB0IGZvciAnLidcclxuICAgICAgcmVnZXhQYXR0ZXJuID0gcmVnZXhQYXR0ZXJuLnJlcGxhY2UodGhpcy5yZWdleEFzdGVyaXNrSW5UaGVNaWRkbGUsICckMVteLl0qJDInKTsgLy8gbm90KiAqIG5vdCpcclxuICAgICAgcmVnZXhQYXR0ZXJuID0gcmVnZXhQYXR0ZXJuLnJlcGxhY2UodGhpcy5yZWdleEFzdGVyaXNrSW5UaGVFbmQsICckMVteLl0qJyk7IC8vIG5vdCogKiBFT0xcclxuICAgICAgcmVnZXhQYXR0ZXJuID0gcmVnZXhQYXR0ZXJuLnJlcGxhY2UodGhpcy5yZWdleEFzdGVyaXNrSW5UaGVCZWdpbm5pbmcsICdbXi5dKiQxJyk7IC8vIEJPTCAqIG5vdCpcclxuICAgICAgcmVnZXhQYXR0ZXJuID0gcmVnZXhQYXR0ZXJuLnJlcGxhY2UodGhpcy5yZWdleEFzdGVyaXNrT25seSwgJ1teLl0qJyk7IC8vIEJPTCAqIEVPTFxyXG5cclxuICAgICAgLy8gcmVwbGFjZSAqKiB3aXRoIGEgcGF0dGVybiB0aGF0IG1hdGNoZXMgYW55IGNoYXJhY3RlciBpbmNsdWRpbmcgJy4nXHJcbiAgICAgIHJlZ2V4UGF0dGVybiA9IHJlZ2V4UGF0dGVybi5yZXBsYWNlKHRoaXMucmVnZXhEb3VibGVBc3Rlcmlza1dpdGhEb3QsICcuKicpOyAvLyAqKi5cclxuICAgICAgcmVnZXhQYXR0ZXJuID0gcmVnZXhQYXR0ZXJuLnJlcGxhY2UodGhpcy5yZWdleERvdWJsZUFzdGVyaXNrLCAnLionKTsgLy8gKipcclxuXHJcbiAgICAgIC8vIHJlcGxhY2UgPyB3aXRoIGEgc2luZ2xlIGNoYXJhY3RlciBtYXRjaGVyXHJcbiAgICAgIHJlZ2V4UGF0dGVybiA9IHJlZ2V4UGF0dGVybi5yZXBsYWNlKHRoaXMucmVnZXhRdWVzdGlvbk1hcmssICcuJyk7XHJcblxyXG4gICAgICAvLyBjcmVhdGUgYSBSZWdFeHAgb2JqZWN0XHJcbiAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cCgnXicgKyByZWdleFBhdHRlcm4gKyAnJCcpO1xyXG4gICAgICB0aGlzLnJlZ2V4QnlQYXR0ZXJuLnNldChwYXR0ZXJuLCByZWdleCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGVzdCB0aGUgcGF0aCBhZ2FpbnN0IHRoZSBnZW5lcmF0ZWQgcmVnZXhcclxuICAgIHJldHVybiByZWdleC50ZXN0KHBhdGgpO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlDb25zdHJhaW50cyh3aWRnZXRzPzogU21hcnRGb3JtV2lkZ2V0PGFueT5bXSk6IHZvaWQge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNtYXJ0Rm9ybSEuY29tcG9uZW50TW9kZWw/LmNvbnN0cmFpbnRzICYmXHJcbiAgICAgIHRoaXMuc21hcnRGb3JtIS5jb21wb25lbnRNb2RlbD8uY29uc3RyYWludHMubGVuZ3RoXHJcbiAgICApIHtcclxuICAgICAgaWYgKCF3aWRnZXRzKSB7XHJcbiAgICAgICAgd2lkZ2V0cyA9IHRoaXMuc21hcnRGb3JtIS53aWRnZXRzO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYXBwbHlDb21wb25lbnRDb25zdHJhaW50cyh3aWRnZXRzLCB0aGlzLnNtYXJ0Rm9ybSEuY29tcG9uZW50TW9kZWw/LmNvbnN0cmFpbnRzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZEVtcHR5SXRlbVRvVmFsdWVMaXN0KHdpZGdldDogU21hcnRGb3JtV2lkZ2V0PGFueT4sIGVtcHR5TGFiZWw/OiBzdHJpbmcpIHtcclxuICAgIGlmICh3aWRnZXQudHlwZSA9PSBTbWFydEZvcm1XaWRnZXRUeXBlLlNFTEVDVCkge1xyXG4gICAgICBjb25zdCBjb250YWluc0VtcHR5S2V5ID0gd2lkZ2V0LnZhbHVlTGlzdC5zb21lKCh2KSA9PiB2LmtleSA9PT0gdGhpcy5lbXB0eUtleSk7XHJcbiAgICAgIGlmICghY29udGFpbnNFbXB0eUtleSkge1xyXG4gICAgICAgIHdpZGdldC52YWx1ZUxpc3Q/LnVuc2hpZnQoe1xyXG4gICAgICAgICAga2V5OiB0aGlzLmVtcHR5S2V5LFxyXG4gICAgICAgICAgbGFiZWw6IGVtcHR5TGFiZWwgPz8gJycsXHJcbiAgICAgICAgICB0eXBlOiBTbWFydEZvcm1XaWRnZXRUeXBlLklURU0sXHJcbiAgICAgICAgICB2YWx1ZTogJycsIC8vIHRoaXMgc2hvdWxkIGJlIHVuZGVmaW5lZCwgYnV0IEZvcm1Db250cm9sIGNhbm5vdCBiZSBudWxsLCBmcm9tIHYxNCBpdCB3aWxsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZUVtcHR5SXRlbUZyb21WYWx1ZUxpc3Qod2lkZ2V0OiBTbWFydEZvcm1XaWRnZXQ8YW55Pikge1xyXG4gICAgaWYgKCd2YWx1ZUxpc3QnIGluIHdpZGdldCkge1xyXG4gICAgICBpZiAod2lkZ2V0LnZhbHVlTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgbGV0IGZpcnN0SXRlbSA9IHdpZGdldC52YWx1ZUxpc3RbMF07XHJcbiAgICAgICAgaWYgKGZpcnN0SXRlbT8ua2V5ID09PSB0aGlzLmVtcHR5S2V5KSB7XHJcbiAgICAgICAgICB3aWRnZXQudmFsdWVMaXN0LnNoaWZ0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJXaWRnZXRzQnlWaXNpYmlsaXR5KHdpZGdldHM6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+W10pOiBTbWFydEZvcm1XaWRnZXQ8YW55PltdIHtcclxuICAgIHJldHVybiB3aWRnZXRzLmZpbHRlcigod2lkZ2V0OiBTbWFydEZvcm1XaWRnZXQ8YW55PikgPT5cclxuICAgICAgd2lkZ2V0LmlzVmlzaWJsZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHdpZGdldC5pc1Zpc2libGVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGdldFRyYW5zbGF0aW9uT2ZLZXkoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuc21hcnRGb3JtIS50cmFuc2xhdGVTZXJ2aWNlIS5nZXQoa2V5KS50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHRyYW5zbGF0ZVdpZGdldHMod2lkZ2V0czogU21hcnRGb3JtV2lkZ2V0PGFueT5bXSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgUHJvbWlzZS5hbGwoXHJcbiAgICAgIHdpZGdldHMubWFwKGFzeW5jICh3aWRnZXQ6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+KSA9PiB7XHJcbiAgICAgICAgaWYgKHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLllPVVRVQkVfUExBWUVSKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTlRBSU5FUikge1xyXG4gICAgICAgICAgaWYgKCF3aWRnZXQub3JpZ2luYWxMYWJlbCkge1xyXG4gICAgICAgICAgICB3aWRnZXQub3JpZ2luYWxMYWJlbCA9IGAke3dpZGdldC5sYWJlbH1gO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gIExhYmVsXHJcbiAgICAgICAgICB3aWRnZXQubGFiZWwgPSBhd2FpdCB0aGlzLmdldFRyYW5zbGF0aW9uT2ZLZXkod2lkZ2V0Lm9yaWdpbmFsTGFiZWwpO1xyXG5cclxuICAgICAgICAgIC8vIFBsYWNlaG9sZGVyXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5URVhUX0ZJRUxEIHx8XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRF9OVU1CRVIgfHxcclxuICAgICAgICAgICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5URVhUX0ZJRUxEX0NISVBTIHx8XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuUklDSF9URVhUIHx8XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9CT1gpICYmXHJcbiAgICAgICAgICAgIHdpZGdldC5wbGFjZWhvbGRlclxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmICghd2lkZ2V0Lm9yaWdpbmFsUGxhY2Vob2xkZXIpIHtcclxuICAgICAgICAgICAgICB3aWRnZXQub3JpZ2luYWxQbGFjZWhvbGRlciA9IGAke3dpZGdldC5wbGFjZWhvbGRlcn1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdpZGdldC5wbGFjZWhvbGRlciA9IGF3YWl0IHRoaXMuZ2V0VHJhbnNsYXRpb25PZktleSh3aWRnZXQub3JpZ2luYWxQbGFjZWhvbGRlcik7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gVmFsaWRhdG9yc1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTkRJQ0FUT1IgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTEFCRUwgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU1BR0UgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuU1ZHICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkZJTEVfVVBMT0FERVIgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuRElWSURFUiAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5CVVRUT04gJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09NUE9ORU5UICYmXHJcbiAgICAgICAgICAgIHdpZGdldC52YWxpZGF0b3JzXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgd2lkZ2V0LnZhbGlkYXRvcnMgPSBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgICB3aWRnZXQudmFsaWRhdG9ycy5tYXAoYXN5bmMgKHZhbGlkYXRvcjogU21hcnRWYWxpZGF0b3IpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghdmFsaWRhdG9yLm9yaWdpbmFsRXJyb3JNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHZhbGlkYXRvci5vcmlnaW5hbEVycm9yTWVzc2FnZSA9IGAke3ZhbGlkYXRvci5lcnJvck1lc3NhZ2V9YDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhbGlkYXRvci5lcnJvck1lc3NhZ2UgPSBhd2FpdCB0aGlzLmdldFRyYW5zbGF0aW9uT2ZLZXkoXHJcbiAgICAgICAgICAgICAgICAgIHZhbGlkYXRvci5vcmlnaW5hbEVycm9yTWVzc2FnZVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0b3I7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIEluZGljYXRvclxyXG4gICAgICAgICAgaWYgKHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLklORElDQVRPUiAmJiB3aWRnZXQuaW5kaWNhdG9yKSB7XHJcbiAgICAgICAgICAgIGlmICghd2lkZ2V0LmluZGljYXRvci5vcmlnaW5hbEluZGljYXRvclN0YXR1c0xhYmVscykge1xyXG4gICAgICAgICAgICAgIHdpZGdldC5pbmRpY2F0b3Iub3JpZ2luYWxJbmRpY2F0b3JTdGF0dXNMYWJlbHMgPVxyXG4gICAgICAgICAgICAgICAgd2lkZ2V0LmluZGljYXRvci5pbmRpY2F0b3JTdGF0dXNMYWJlbHMubWFwKChsYWJlbDogc3RyaW5nKSA9PiBsYWJlbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd2lkZ2V0LmluZGljYXRvci5pbmRpY2F0b3JTdGF0dXNMYWJlbHMgPSBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgICB3aWRnZXQuaW5kaWNhdG9yLmluZGljYXRvclN0YXR1c0xhYmVscy5tYXAoXHJcbiAgICAgICAgICAgICAgICBhc3luYyAobGFiZWw6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT5cclxuICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRUcmFuc2xhdGlvbk9mS2V5KFxyXG4gICAgICAgICAgICAgICAgICAgIHdpZGdldC5pbmRpY2F0b3IhLm9yaWdpbmFsSW5kaWNhdG9yU3RhdHVzTGFiZWxzIVtpbmRleF1cclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5URVhUX0ZJRUxEX0NISVBTIHx8XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuU0VMRUNUIHx8XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuU0VMRUNUX01VTFRJUExFIHx8XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YIHx8XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YXzIgfHxcclxuICAgICAgICAgICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5SQURJT19CVVRUT04pICYmXHJcbiAgICAgICAgICAgIHdpZGdldC52YWx1ZUxpc3RcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVdpZGdldEl0ZW1zKHdpZGdldC52YWx1ZUxpc3QpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVdpZGdldHMod2lkZ2V0LnZhbHVlTGlzdCEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhc3luYyB0cmFuc2xhdGVXaWRnZXRJdGVtcyh3aWRnZXRzOiBTbWFydEl0ZW1zPGFueT5bXSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgUHJvbWlzZS5hbGwoXHJcbiAgICAgIHdpZGdldHMubWFwKGFzeW5jICh3aWRnZXQ6IFNtYXJ0SXRlbXM8YW55PikgPT4ge1xyXG4gICAgICAgIGlmICghd2lkZ2V0Lm9yaWdpbmFsTGFiZWwpIHtcclxuICAgICAgICAgIHdpZGdldC5vcmlnaW5hbExhYmVsID0gYCR7d2lkZ2V0LmxhYmVsfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vICBMYWJlbFxyXG4gICAgICAgIHdpZGdldC5sYWJlbCA9IGF3YWl0IHRoaXMuZ2V0VHJhbnNsYXRpb25PZktleSh3aWRnZXQub3JpZ2luYWxMYWJlbCk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -16,6 +16,7 @@ export class SmartfileuploaderComponent {
|
|
|
16
16
|
this.maxSizeMb = 25;
|
|
17
17
|
this.useIconButton = true;
|
|
18
18
|
this.isMultiple = true;
|
|
19
|
+
this.autoUpload = false;
|
|
19
20
|
this.isDragOver = false;
|
|
20
21
|
this.errors = [];
|
|
21
22
|
}
|
|
@@ -58,6 +59,9 @@ export class SmartfileuploaderComponent {
|
|
|
58
59
|
}
|
|
59
60
|
else if (validFiles.length) {
|
|
60
61
|
this.files = [validFiles[0]];
|
|
62
|
+
if (this.autoUpload) {
|
|
63
|
+
this.uploadFile();
|
|
64
|
+
}
|
|
61
65
|
}
|
|
62
66
|
}
|
|
63
67
|
getFile(event) {
|
|
@@ -154,7 +158,7 @@ export class SmartfileuploaderComponent {
|
|
|
154
158
|
};
|
|
155
159
|
}
|
|
156
160
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartfileuploaderComponent, deps: [{ token: i1.MatSnackBar }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
157
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SmartfileuploaderComponent, selector: "smartfileuploader", inputs: { uploadCallback: "uploadCallback", fileFormats: "fileFormats", maxSizeMb: "maxSizeMb", i18n: "i18n", useIconButton: "useIconButton", isMultiple: "isMultiple" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "<div\r\n class=\"container\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (drop)=\"onDrop($event)\"\r\n [class.dragover]=\"isDragOver\"\r\n>\r\n <div class=\"fileContainer\" (click)=\"fileInput.click()\">\r\n <input\r\n #fileInput\r\n id=\"addFile\"\r\n placeholder=\"fileInput\"\r\n type=\"file\"\r\n (change)=\"getFile($event)\"\r\n class=\"file\"\r\n accept=\"{{ fileFormats?.join(', ') }}\"\r\n [size]=\"maxSizeMb\"\r\n [multiple]=\"isMultiple\"\r\n style=\"display: none\"\r\n />\r\n <div class=\"fileUploadContentContainer\">\r\n <div class=\"icon\">\r\n <mat-label *ngIf=\"useIconButton\" class=\"addFileButton\">\r\n <mat-icon color=\"primary\" class=\"addCircle\">add_circle</mat-icon>\r\n </mat-label>\r\n <button *ngIf=\"!useIconButton\" mat-raised-button color=\"primary\" class=\"addFileButton\">\r\n {{ i18n!.addFile }}\r\n </button>\r\n </div>\r\n <div class=\"labels\">\r\n <mat-label *ngIf=\"useIconButton\" class=\"label primary title\">\r\n {{ i18n!.addFile }}\r\n </mat-label>\r\n <mat-label class=\"label secondary\"> {{ i18n!.browseOrDrag }} </mat-label>\r\n <mat-label class=\"subLabel primary\"> {{ i18n!.maxSize }} </mat-label>\r\n <mat-label class=\"subLabel primary\"> {{ i18n!.formats }} </mat-label>\r\n </div>\r\n <div class=\"uploadButton\" *ngIf=\"files.length\">\r\n <ui-action-button (actionClick)=\"uploadFile()\" [descriptor]=\"uploadButton\">\r\n </ui-action-button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"errors.length\" class=\"errorMessage\">\r\n <smart-icon [icon]=\"'error'\" [color]=\"'warn'\"></smart-icon>\r\n <div class=\"errors\">\r\n <span *ngFor=\"let error of errors\">{{ error }}</span>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"files.length\" class=\"uploadedFilesContainer\">\r\n <div *ngFor=\"let file of files; let i = index\" class=\"uploadedFile\">\r\n <ng-container *ngIf=\"filePreviewUrl(file); else fileIcon\">\r\n <img [src]=\"filePreviewUrl(file)\" [alt]=\"file.name\" width=\"50\" height=\"50\" />\r\n </ng-container>\r\n <ng-template #fileIcon>\r\n <smart-icon [icon]=\"'insert_drive_file'\"></smart-icon>\r\n </ng-template>\r\n\r\n <div class=\"fileData\">\r\n <div class=\"fileDataContainer\">\r\n <span class=\"fileName\">{{ file.name }}</span>\r\n <span class=\"fileSize\">{{ formatSize(file.size) }}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"fileActions\">\r\n <ui-action-button (actionClick)=\"downloadFile(file)\" [descriptor]=\"downloadButton\">\r\n </ui-action-button>\r\n\r\n <ui-action-button class=\"removeIcon\" (actionClick)=\"remove(i)\" [descriptor]=\"removeButton\">\r\n </ui-action-button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{--border-color: #a6aabd60;--warninig-color: #be2d2e;--def-border-radius: .5rem}.container{display:flex;flex-direction:column;border:2px dashed var(--border-color);border-radius:var(--def-border-radius)}.fileContainer{cursor:pointer;padding:1rem;display:flex;flex-direction:column}.fileContainer:hover,.dragover{background-color:rgb(from var(--border-color) r g b / .1)}.fileUploadContentContainer{display:flex;flex-direction:row;gap:1rem}.icon mat-icon{font-size:3rem;width:unset;height:unset}.icon{align-content:center}.labels{flex:1;display:flex;flex-direction:column;justify-content:center;width:fit-content}.uploadButton{align-content:center}.primary{color:var(--primary-color)}.secondary{color:var(--gray)}.label{margin:unset}.subLabel{font-size:smaller}.title{padding-bottom:.3rem}.errorMessage,.uploadedFilesContainer{border-top:2px solid var(--border-color)}.errorMessage{display:flex;flex-direction:row;align-items:center;color:var(--warninig-color);padding:.5rem 1rem;gap:1rem}.errorMessage ::ng-deep mat-icon{color:var(--warninig-color)}.errors{display:flex;flex-direction:column}.uploadedFile{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;padding:1rem;border-bottom:1px solid #e0e0e0;gap:1rem}.uploadedFile:last-child{border-bottom:none}.fileSize{display:flex;flex-direction:row;font-size:smaller}.fileData{flex:1;display:flex;flex-direction:column}.fileDataContainer{display:flex;flex-direction:column;justify-content:flex-end;width:fit-content}.fileActions{display:flex;flex-direction:row;justify-content:flex-end}.fileActions ::ng-deep button{border:unset}.fileActions ::ng-deep button:hover{border:unset}.removeIcon ::ng-deep mat-icon{color:var(--warninig-color)}smart-icon ::ng-deep mat-icon{font-size:3rem;width:unset;height:unset}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "component", type: i7.UiActionButtonComponent, selector: "ui-action-button", inputs: ["disabled", "descriptor", "code", "addedCssClass"], outputs: ["actionClick", "actionDoubleClick"] }] }); }
|
|
161
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SmartfileuploaderComponent, selector: "smartfileuploader", inputs: { uploadCallback: "uploadCallback", fileFormats: "fileFormats", maxSizeMb: "maxSizeMb", i18n: "i18n", useIconButton: "useIconButton", isMultiple: "isMultiple", autoUpload: "autoUpload" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "<div\r\n class=\"container\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (drop)=\"onDrop($event)\"\r\n [class.dragover]=\"isDragOver\"\r\n>\r\n <div class=\"fileContainer\" (click)=\"fileInput.click()\">\r\n <input\r\n #fileInput\r\n id=\"addFile\"\r\n placeholder=\"fileInput\"\r\n type=\"file\"\r\n (change)=\"getFile($event)\"\r\n class=\"file\"\r\n accept=\"{{ fileFormats?.join(', ') }}\"\r\n [size]=\"maxSizeMb\"\r\n [multiple]=\"isMultiple\"\r\n style=\"display: none\"\r\n />\r\n <div class=\"fileUploadContentContainer\">\r\n <div class=\"icon\">\r\n <mat-label *ngIf=\"useIconButton\" class=\"addFileButton\">\r\n <mat-icon color=\"primary\" class=\"addCircle\">add_circle</mat-icon>\r\n </mat-label>\r\n <button *ngIf=\"!useIconButton\" mat-raised-button color=\"primary\" class=\"addFileButton\">\r\n {{ i18n!.addFile }}\r\n </button>\r\n </div>\r\n <div class=\"labels\">\r\n <mat-label *ngIf=\"useIconButton\" class=\"label primary title\">\r\n {{ i18n!.addFile }}\r\n </mat-label>\r\n <mat-label class=\"label secondary\"> {{ i18n!.browseOrDrag }} </mat-label>\r\n <mat-label class=\"subLabel primary\"> {{ i18n!.maxSize }} </mat-label>\r\n <mat-label class=\"subLabel primary\"> {{ i18n!.formats }} </mat-label>\r\n </div>\r\n <div class=\"uploadButton\" *ngIf=\"files.length\">\r\n <ui-action-button (actionClick)=\"uploadFile()\" [descriptor]=\"uploadButton\">\r\n </ui-action-button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"errors.length\" class=\"errorMessage\">\r\n <smart-icon [icon]=\"'error'\" [color]=\"'warn'\"></smart-icon>\r\n <div class=\"errors\">\r\n <span *ngFor=\"let error of errors\">{{ error }}</span>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"files.length\" class=\"uploadedFilesContainer\">\r\n <div *ngFor=\"let file of files; let i = index\" class=\"uploadedFile\">\r\n <ng-container *ngIf=\"filePreviewUrl(file); else fileIcon\">\r\n <img [src]=\"filePreviewUrl(file)\" [alt]=\"file.name\" width=\"50\" height=\"50\" />\r\n </ng-container>\r\n <ng-template #fileIcon>\r\n <smart-icon [icon]=\"'insert_drive_file'\"></smart-icon>\r\n </ng-template>\r\n\r\n <div class=\"fileData\">\r\n <div class=\"fileDataContainer\">\r\n <span class=\"fileName\">{{ file.name }}</span>\r\n <span class=\"fileSize\">{{ formatSize(file.size) }}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"fileActions\">\r\n <ui-action-button (actionClick)=\"downloadFile(file)\" [descriptor]=\"downloadButton\">\r\n </ui-action-button>\r\n\r\n <ui-action-button class=\"removeIcon\" (actionClick)=\"remove(i)\" [descriptor]=\"removeButton\">\r\n </ui-action-button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{--border-color: #a6aabd60;--warninig-color: #be2d2e;--def-border-radius: .5rem}.container{display:flex;flex-direction:column;border:2px dashed var(--border-color);border-radius:var(--def-border-radius)}.fileContainer{cursor:pointer;padding:1rem;display:flex;flex-direction:column}.fileContainer:hover,.dragover{background-color:rgb(from var(--border-color) r g b / .1)}.fileUploadContentContainer{display:flex;flex-direction:row;gap:1rem}.icon mat-icon{font-size:3rem;width:unset;height:unset}.icon{align-content:center}.labels{flex:1;display:flex;flex-direction:column;justify-content:center;width:fit-content}.uploadButton{align-content:center}.primary{color:var(--primary-color)}.secondary{color:var(--gray)}.label{margin:unset}.subLabel{font-size:smaller}.title{padding-bottom:.3rem}.errorMessage,.uploadedFilesContainer{border-top:2px solid var(--border-color)}.errorMessage{display:flex;flex-direction:row;align-items:center;color:var(--warninig-color);padding:.5rem 1rem;gap:1rem}.errorMessage ::ng-deep mat-icon{color:var(--warninig-color)}.errors{display:flex;flex-direction:column}.uploadedFile{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;padding:1rem;border-bottom:1px solid #e0e0e0;gap:1rem}.uploadedFile:last-child{border-bottom:none}.fileSize{display:flex;flex-direction:row;font-size:smaller}.fileData{flex:1;display:flex;flex-direction:column}.fileDataContainer{display:flex;flex-direction:column;justify-content:flex-end;width:fit-content}.fileActions{display:flex;flex-direction:row;justify-content:flex-end}.fileActions ::ng-deep button{border:unset}.fileActions ::ng-deep button:hover{border:unset}.removeIcon ::ng-deep mat-icon{color:var(--warninig-color)}smart-icon ::ng-deep mat-icon{font-size:3rem;width:unset;height:unset}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "component", type: i7.UiActionButtonComponent, selector: "ui-action-button", inputs: ["disabled", "descriptor", "code", "addedCssClass"], outputs: ["actionClick", "actionDoubleClick"] }] }); }
|
|
158
162
|
}
|
|
159
163
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartfileuploaderComponent, decorators: [{
|
|
160
164
|
type: Component,
|
|
@@ -174,5 +178,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
|
|
|
174
178
|
type: Input
|
|
175
179
|
}], isMultiple: [{
|
|
176
180
|
type: Input
|
|
181
|
+
}], autoUpload: [{
|
|
182
|
+
type: Input
|
|
177
183
|
}] } });
|
|
178
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRmaWxldXBsb2FkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtZm9ybS9zbWFydGZpbGV1cGxvYWRlci9zbWFydGZpbGV1cGxvYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1mb3JtL3NtYXJ0ZmlsZXVwbG9hZGVyL3NtYXJ0ZmlsZXVwbG9hZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdoRixPQUFPLEVBQ0wsWUFBWSxFQUNaLGtCQUFrQixHQUVuQixNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7Ozs7QUFPN0MsTUFBTSxPQUFPLDBCQUEwQjtJQWNyQyxZQUFvQixTQUFzQjtRQUF0QixjQUFTLEdBQVQsU0FBUyxDQUFhO1FBWDFDLFVBQUssR0FBVyxFQUFFLENBQUM7UUFFVixnQkFBVyxHQUFjLEVBQUUsQ0FBQztRQUM1QixjQUFTLEdBQVksRUFBRSxDQUFDO1FBRXhCLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBQzlCLGVBQVUsR0FBYSxJQUFJLENBQUM7UUFFckMsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixXQUFNLEdBQWEsRUFBRSxDQUFDO0lBRXVCLENBQUM7SUFFOUMsUUFBUTtRQUNOLE1BQU0sV0FBVyxHQUFHO1lBQ2xCLE9BQU8sRUFBRSx1QkFBdUI7WUFDaEMsWUFBWSxFQUFFLHVCQUF1QjtZQUNyQyxPQUFPLEVBQUUsUUFBUSxJQUFJLENBQUMsU0FBUyxLQUFLO1lBQ3BDLE9BQU8sRUFBRSx5QkFBeUI7WUFDbEMsTUFBTSxFQUFFLFdBQVc7U0FDcEIsQ0FBQztRQUVGLElBQUks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aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xyXG5pbXBvcnQgeyBTbWFydEZpbGVVcGxvYWRlckkxOG4gfSBmcm9tICcuL3NtYXJ0ZmlsZXVwbG9hZGVyLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBJY29uUG9zaXRpb24sXHJcbiAgVWlBY3Rpb25CdXR0b25UeXBlLFxyXG4gIFVpQWN0aW9uRGVzY3JpcHRvcixcclxufSBmcm9tICcuLi8uLi92aWV3LWNvbnRleHQvYXBpL21vZGVsL21vZGVscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NtYXJ0ZmlsZXVwbG9hZGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc21hcnRmaWxldXBsb2FkZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NtYXJ0ZmlsZXVwbG9hZGVyLmNvbXBvbmVudC5jc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0ZmlsZXVwbG9hZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKCdmaWxlSW5wdXQnKSBmaWxlSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xyXG5cclxuICBmaWxlczogRmlsZVtdID0gW107XHJcbiAgQElucHV0KCkgdXBsb2FkQ2FsbGJhY2shOiAoZmlsZXM6IEZpbGVbXSkgPT4gdm9pZDtcclxuICBASW5wdXQoKSBmaWxlRm9ybWF0cz86IHN0cmluZ1tdID0gW107XHJcbiAgQElucHV0KCkgbWF4U2l6ZU1iPzogbnVtYmVyID0gMjU7XHJcbiAgQElucHV0KCkgaTE4bj86IFNtYXJ0RmlsZVVwbG9hZGVySTE4bjtcclxuICBASW5wdXQoKSB1c2VJY29uQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBpc011bHRpcGxlPzogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIGlzRHJhZ092ZXIgPSBmYWxzZTtcclxuICBlcnJvcnM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3NuYWNrQmFyOiBNYXRTbmFja0Jhcikge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBkZWZhdWx0STE4biA9IHtcclxuICAgICAgYWRkRmlsZTogJ2Rva3VtZW50dW0gaG96esOhYWTDoXNhJyxcclxuICAgICAgYnJvd3NlT3JEcmFnOiAndGFsbMOzesOhcyB2YWd5IGJlaMO6esOhcycsXHJcbiAgICAgIG1heFNpemU6IGBtYXguICR7dGhpcy5tYXhTaXplTWJ9IE1CYCxcclxuICAgICAgZm9ybWF0czogJ1BERiwgZG9jeCwgeGxzIGZvcm3DoXR1bScsXHJcbiAgICAgIHVwbG9hZDogJ0ZlbHTDtmx0w6lzJyxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5pMThuID0geyAuLi5kZWZhdWx0STE4biwgLi4udGhpcy5pMThuIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByb2Nlc3NGaWxlcyhmaWxlTGlzdDogRmlsZVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLmVycm9ycyA9IFtdO1xyXG4gICAgdmFyIHZhbGlkRmlsZXM6IEZpbGVbXSA9IFtdO1xyXG5cclxuICAgIGZpbGVMaXN0LmZvckVhY2goKGZpbGU6IEZpbGUpID0+IHtcclxuICAgICAgbGV0IGhhc0Vycm9yID0gZmFsc2U7XHJcblxyXG4gICAgICBpZiAodGhpcy5maWxlRm9ybWF0cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgdmFyIGV4dCA9IGZpbGUubmFtZS5zcGxpdCgnLicpLnBvcCgpPy50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgICAgICB2YXIgdHJpbW1lZEZvcm1hdHMgPSAodGhpcy5maWxlRm9ybWF0cyB8fCBbXSlcclxuICAgICAgICAgIC5mbGF0TWFwKChmKSA9PiBmLnNwbGl0KCcsJykpXHJcbiAgICAgICAgICAubWFwKChmKSA9PiBmLnJlcGxhY2UoJy4nLCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgIHZhciBpc0FsbG93ZWQgPSB0cmltbWVkRm9ybWF0cy5pbmNsdWRlcyhleHQhKTtcclxuXHJcbiAgICAgICAgaWYgKCFpc0FsbG93ZWQpIHtcclxuICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2goYFwiJHtmaWxlLm5hbWV9XCIgLSBuZW0gdMOhbW9nYXRvdHQgZm9ybcOhdHVtYCk7XHJcbiAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZmlsZS5zaXplID4gdGhpcy5tYXhTaXplTWIhICogMV8wMDBfMDAwKSB7XHJcbiAgICAgICAgdGhpcy5lcnJvcnMucHVzaChgXCIke2ZpbGUubmFtZX1cIiAtIHTDumwgbmFneSBmw6FqbCAobWF4ICR7dGhpcy5tYXhTaXplTWJ9IE1CKWApO1xyXG4gICAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFoYXNFcnJvcikge1xyXG4gICAgICAgIHZhbGlkRmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNNdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLmZpbGVzID0gWy4uLnRoaXMuZmlsZXMsIC4uLnZhbGlkRmlsZXNdO1xyXG4gICAgfSBlbHNlIGlmICh2YWxpZEZpbGVzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmZpbGVzID0gW3ZhbGlkRmlsZXNbMF1dO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0RmlsZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoZXZlbnQudGFyZ2V0LmZpbGVzICYmIGV2ZW50LnRhcmdldC5maWxlcy5sZW5ndGgpIHtcclxuICAgICAgdmFyIGZpbGVMaXN0ID0gQXJyYXkuZnJvbShldmVudC50YXJnZXQuZmlsZXMpIGFzIEZpbGVbXTtcclxuICAgICAgdGhpcy5wcm9jZXNzRmlsZXMoZmlsZUxpc3QpO1xyXG4gICAgICB0aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIHRoaXMuaXNEcmFnT3ZlciA9IGZhbHNlO1xyXG5cclxuICAgIGlmICghZXZlbnQuZGF0YVRyYW5zZmVyPy5maWxlcykgcmV0dXJuO1xyXG4gICAgY29uc3QgZmlsZUxpc3QgPSBBcnJheS5mcm9tKGV2ZW50LmRhdGFUcmFuc2Zlci5maWxlcyk7XHJcbiAgICB0aGlzLnByb2Nlc3NGaWxlcyhmaWxlTGlzdCk7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB0aGlzLmlzRHJhZ092ZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgb25EcmFnTGVhdmUoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICBjb25zdCByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XHJcbiAgICBsZXQgc3RvcERyYWcgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoIXJlbGF0ZWQpIHtcclxuICAgICAgc3RvcERyYWcgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgcGFyZW50RHJvcCA9IHJlbGF0ZWQuY2xvc2VzdCgnLmNvbnRhaW5lcicpO1xyXG4gICAgICBpZiAocmVsYXRlZCAhPT0gZXZlbnQuY3VycmVudFRhcmdldCAmJiAhcGFyZW50RHJvcCkge1xyXG4gICAgICAgIHN0b3BEcmFnID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChzdG9wRHJhZykge1xyXG4gICAgICB0aGlzLmlzRHJhZ092ZXIgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZShpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbGVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgfVxyXG5cclxuICB1cGxvYWRGaWxlKCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGxvYWRDYWxsYmFjayh0aGlzLmZpbGVzKTtcclxuICB9XHJcblxyXG4gIGZvcm1hdFNpemUoYnl0ZXM6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBpZiAoYnl0ZXMgPT09IDApIHJldHVybiAnMCBCJztcclxuICAgIGNvbnN0IGsgPSAxMDI0O1xyXG4gICAgY29uc3Qgc2l6ZXMgPSBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInXTtcclxuICAgIGNvbnN0IGkgPSBNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKGspKTtcclxuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VGbG9hdCgoYnl0ZXMgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZCgxKSk7XHJcbiAgICByZXR1cm4gYCR7dmFsdWV9ICR7c2l6ZXNbaV19YDtcclxuICB9XHJcblxyXG4gIGZpbGVQcmV2aWV3VXJsKGZpbGU6IEZpbGUpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmIChmaWxlLnR5cGUuc3RhcnRzV2l0aCgnaW1hZ2UvJykpIHtcclxuICAgICAgcmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkRmlsZShmaWxlOiBGaWxlKTogdm9pZCB7XHJcbiAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpO1xyXG4gICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgIGEuaHJlZiA9IHVybDtcclxuICAgIGEuZG93bmxvYWQgPSBmaWxlLm5hbWU7XHJcbiAgICBhLmNsaWNrKCk7XHJcbiAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdXBsb2FkQnV0dG9uKCk6IFVpQWN0aW9uRGVzY3JpcHRvciB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0aXRsZTogdGhpcy5pMThuIS51cGxvYWQgPz8gJycsXHJcbiAgICAgIGNvbG9yOiAncHJpbWFyeScsXHJcbiAgICAgIHR5cGU6IFVpQWN0aW9uQnV0dG9uVHlwZS5SQUlTRUQsXHJcbiAgICAgIGljb246ICd1cGxvYWQnLFxyXG4gICAgICBpY29uUG9zaXRpb246IEljb25Qb3NpdGlvbi5QUkUsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRvd25sb2FkQnV0dG9uKCk6IFVpQWN0aW9uRGVzY3JpcHRvciB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0aXRsZTogJycsXHJcbiAgICAgIGNvbG9yOiAncHJpbWFyeScsXHJcbiAgICAgIHR5cGU6IFVpQWN0aW9uQnV0dG9uVHlwZS5JQ09OLFxyXG4gICAgICBpY29uOiAnZG93bmxvYWQnLFxyXG4gICAgICBpY29uUG9zaXRpb246IEljb25Qb3NpdGlvbi5QUkUsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJlbW92ZUJ1dHRvbigpOiBVaUFjdGlvbkRlc2NyaXB0b3Ige1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdGl0bGU6ICcnLFxyXG4gICAgICBjb2xvcjogJ3ByaW1hcnknLFxyXG4gICAgICB0eXBlOiBVaUFjdGlvbkJ1dHRvblR5cGUuSUNPTixcclxuICAgICAgaWNvbjogJ2Nsb3NlJyxcclxuICAgICAgaWNvbkNvbG9yOiAncmVkJyxcclxuICAgICAgaWNvblBvc2l0aW9uOiBJY29uUG9zaXRpb24uUFJFLFxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gIGNsYXNzPVwiY29udGFpbmVyXCJcclxuICAoZHJhZ292ZXIpPVwib25EcmFnT3ZlcigkZXZlbnQpXCJcclxuICAoZHJhZ2xlYXZlKT1cIm9uRHJhZ0xlYXZlKCRldmVudClcIlxyXG4gIChkcm9wKT1cIm9uRHJvcCgkZXZlbnQpXCJcclxuICBbY2xhc3MuZHJhZ292ZXJdPVwiaXNEcmFnT3ZlclwiXHJcbj5cclxuICA8ZGl2IGNsYXNzPVwiZmlsZUNvbnRhaW5lclwiIChjbGljayk9XCJmaWxlSW5wdXQuY2xpY2soKVwiPlxyXG4gICAgPGlucHV0XHJcbiAgICAgICNmaWxlSW5wdXRcclxuICAgICAgaWQ9XCJhZGRGaWxlXCJcclxuICAgICAgcGxhY2Vob2xkZXI9XCJmaWxlSW5wdXRcIlxyXG4gICAgICB0eXBlPVwiZmlsZVwiXHJcbiAgICAgIChjaGFuZ2UpPVwiZ2V0RmlsZSgkZXZlbnQpXCJcclxuICAgICAgY2xhc3M9XCJmaWxlXCJcclxuICAgICAgYWNjZXB0PVwie3sgZmlsZUZvcm1hdHM/LmpvaW4oJywgJykgfX1cIlxyXG4gICAgICBbc2l6ZV09XCJtYXhTaXplTWJcIlxyXG4gICAgICBbbXVsdGlwbGVdPVwiaXNNdWx0aXBsZVwiXHJcbiAgICAgIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiXHJcbiAgICAvPlxyXG4gICAgPGRpdiBjbGFzcz1cImZpbGVVcGxvYWRDb250ZW50Q29udGFpbmVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpY29uXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbCAqbmdJZj1cInVzZUljb25CdXR0b25cIiBjbGFzcz1cImFkZEZpbGVCdXR0b25cIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cImFkZENpcmNsZVwiPmFkZF9jaXJjbGU8L21hdC1pY29uPlxyXG4gICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCIhdXNlSWNvbkJ1dHRvblwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwiYWRkRmlsZUJ1dHRvblwiPlxyXG4gICAgICAgICAge3sgaTE4biEuYWRkRmlsZSB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxhYmVsc1wiPlxyXG4gICAgICAgIDxtYXQtbGFiZWwgKm5nSWY9XCJ1c2VJY29uQnV0dG9uXCIgY2xhc3M9XCJsYWJlbCBwcmltYXJ5IHRpdGxlXCI+XHJcbiAgICAgICAgICB7eyBpMThuIS5hZGRGaWxlIH19XHJcbiAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cImxhYmVsIHNlY29uZGFyeVwiPiB7eyBpMThuIS5icm93c2VPckRyYWcgfX0gPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cInN1YkxhYmVsIHByaW1hcnlcIj4ge3sgaTE4biEubWF4U2l6ZSB9fSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwic3ViTGFiZWwgcHJpbWFyeVwiPiB7eyBpMThuIS5mb3JtYXRzIH19IDwvbWF0LWxhYmVsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZEJ1dHRvblwiICpuZ0lmPVwiZmlsZXMubGVuZ3RoXCI+XHJcbiAgICAgICAgPHVpLWFjdGlvbi1idXR0b24gKGFjdGlvbkNsaWNrKT1cInVwbG9hZEZpbGUoKVwiIFtkZXNjcmlwdG9yXT1cInVwbG9hZEJ1dHRvblwiPlxyXG4gICAgICAgIDwvdWktYWN0aW9uLWJ1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiAqbmdJZj1cImVycm9ycy5sZW5ndGhcIiBjbGFzcz1cImVycm9yTWVzc2FnZVwiPlxyXG4gICAgPHNtYXJ0LWljb24gW2ljb25dPVwiJ2Vycm9yJ1wiIFtjb2xvcl09XCInd2FybidcIj48L3NtYXJ0LWljb24+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZXJyb3JzXCI+XHJcbiAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBlcnJvciBvZiBlcnJvcnNcIj57eyBlcnJvciB9fTwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwiZmlsZXMubGVuZ3RoXCIgY2xhc3M9XCJ1cGxvYWRlZEZpbGVzQ29udGFpbmVyXCI+XHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWxlIG9mIGZpbGVzOyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJ1cGxvYWRlZEZpbGVcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbGVQcmV2aWV3VXJsKGZpbGUpOyBlbHNlIGZpbGVJY29uXCI+XHJcbiAgICAgICAgPGltZyBbc3JjXT1cImZpbGVQcmV2aWV3VXJsKGZpbGUpXCIgW2FsdF09XCJmaWxlLm5hbWVcIiB3aWR0aD1cIjUwXCIgaGVpZ2h0PVwiNTBcIiAvPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLXRlbXBsYXRlICNmaWxlSWNvbj5cclxuICAgICAgICA8c21hcnQtaWNvbiBbaWNvbl09XCInaW5zZXJ0X2RyaXZlX2ZpbGUnXCI+PC9zbWFydC1pY29uPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImZpbGVEYXRhXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpbGVEYXRhQ29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpbGVOYW1lXCI+e3sgZmlsZS5uYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWxlU2l6ZVwiPnt7IGZvcm1hdFNpemUoZmlsZS5zaXplKSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmlsZUFjdGlvbnNcIj5cclxuICAgICAgICA8dWktYWN0aW9uLWJ1dHRvbiAoYWN0aW9uQ2xpY2spPVwiZG93bmxvYWRGaWxlKGZpbGUpXCIgW2Rlc2NyaXB0b3JdPVwiZG93bmxvYWRCdXR0b25cIj5cclxuICAgICAgICA8L3VpLWFjdGlvbi1idXR0b24+XHJcblxyXG4gICAgICAgIDx1aS1hY3Rpb24tYnV0dG9uIGNsYXNzPVwicmVtb3ZlSWNvblwiIChhY3Rpb25DbGljayk9XCJyZW1vdmUoaSlcIiBbZGVzY3JpcHRvcl09XCJyZW1vdmVCdXR0b25cIj5cclxuICAgICAgICA8L3VpLWFjdGlvbi1idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
184
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRmaWxldXBsb2FkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtZm9ybS9zbWFydGZpbGV1cGxvYWRlci9zbWFydGZpbGV1cGxvYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1mb3JtL3NtYXJ0ZmlsZXVwbG9hZGVyL3NtYXJ0ZmlsZXVwbG9hZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdoRixPQUFPLEVBQ0wsWUFBWSxFQUNaLGtCQUFrQixHQUVuQixNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7Ozs7QUFPN0MsTUFBTSxPQUFPLDBCQUEwQjtJQWVyQyxZQUFvQixTQUFzQjtRQUF0QixjQUFTLEdBQVQsU0FBUyxDQUFhO1FBWjFDLFVBQUssR0FBVyxFQUFFLENBQUM7UUFFVixnQkFBVyxHQUFjLEVBQUUsQ0FBQztRQUM1QixjQUFTLEdBQVksRUFBRSxDQUFDO1FBRXhCLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBQzlCLGVBQVUsR0FBYSxJQUFJLENBQUM7UUFDNUIsZUFBVSxHQUFhLEtBQUssQ0FBQztRQUV0QyxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLFdBQU0sR0FBYSxFQUFFLENBQUM7SUFFdUIsQ0FBQztJQUU5QyxRQUFRO1FBQ04sTUFBTSxXQUFXLEdBQUc7WUFDbEIsT0FBTyxFQUFFLHVCQUF1QjtZQUNoQyxZQUFZLEVBQUUsdUJBQXVCO1lBQ3JDLE9BQU8sRUFBRSxRQUFRLElBQUksQ0FBQyxTQUFTLEtBQUs7WUFDcEMsT0FBTyxFQUFFLHlCQUF5QjtZQUNsQyxNQUFNLEVBQUUs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O3NCQUFyQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcclxuaW1wb3J0IHsgU21hcnRGaWxlVXBsb2FkZXJJMThuIH0gZnJvbSAnLi9zbWFydGZpbGV1cGxvYWRlci5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgSWNvblBvc2l0aW9uLFxyXG4gIFVpQWN0aW9uQnV0dG9uVHlwZSxcclxuICBVaUFjdGlvbkRlc2NyaXB0b3IsXHJcbn0gZnJvbSAnLi4vLi4vdmlldy1jb250ZXh0L2FwaS9tb2RlbC9tb2RlbHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzbWFydGZpbGV1cGxvYWRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NtYXJ0ZmlsZXVwbG9hZGVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zbWFydGZpbGV1cGxvYWRlci5jb21wb25lbnQuY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydGZpbGV1cGxvYWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgnZmlsZUlucHV0JykgZmlsZUlucHV0ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcclxuXHJcbiAgZmlsZXM6IEZpbGVbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHVwbG9hZENhbGxiYWNrITogKGZpbGVzOiBGaWxlW10pID0+IHZvaWQ7XHJcbiAgQElucHV0KCkgZmlsZUZvcm1hdHM/OiBzdHJpbmdbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIG1heFNpemVNYj86IG51bWJlciA9IDI1O1xyXG4gIEBJbnB1dCgpIGkxOG4/OiBTbWFydEZpbGVVcGxvYWRlckkxOG47XHJcbiAgQElucHV0KCkgdXNlSWNvbkJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgaXNNdWx0aXBsZT86IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGF1dG9VcGxvYWQ/OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGlzRHJhZ092ZXIgPSBmYWxzZTtcclxuICBlcnJvcnM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3NuYWNrQmFyOiBNYXRTbmFja0Jhcikge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBkZWZhdWx0STE4biA9IHtcclxuICAgICAgYWRkRmlsZTogJ2Rva3VtZW50dW0gaG96esOhYWTDoXNhJyxcclxuICAgICAgYnJvd3NlT3JEcmFnOiAndGFsbMOzesOhcyB2YWd5IGJlaMO6esOhcycsXHJcbiAgICAgIG1heFNpemU6IGBtYXguICR7dGhpcy5tYXhTaXplTWJ9IE1CYCxcclxuICAgICAgZm9ybWF0czogJ1BERiwgZG9jeCwgeGxzIGZvcm3DoXR1bScsXHJcbiAgICAgIHVwbG9hZDogJ0ZlbHTDtmx0w6lzJyxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5pMThuID0geyAuLi5kZWZhdWx0STE4biwgLi4udGhpcy5pMThuIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByb2Nlc3NGaWxlcyhmaWxlTGlzdDogRmlsZVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLmVycm9ycyA9IFtdO1xyXG4gICAgdmFyIHZhbGlkRmlsZXM6IEZpbGVbXSA9IFtdO1xyXG5cclxuICAgIGZpbGVMaXN0LmZvckVhY2goKGZpbGU6IEZpbGUpID0+IHtcclxuICAgICAgbGV0IGhhc0Vycm9yID0gZmFsc2U7XHJcblxyXG4gICAgICBpZiAodGhpcy5maWxlRm9ybWF0cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgdmFyIGV4dCA9IGZpbGUubmFtZS5zcGxpdCgnLicpLnBvcCgpPy50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgICAgICB2YXIgdHJpbW1lZEZvcm1hdHMgPSAodGhpcy5maWxlRm9ybWF0cyB8fCBbXSlcclxuICAgICAgICAgIC5mbGF0TWFwKChmKSA9PiBmLnNwbGl0KCcsJykpXHJcbiAgICAgICAgICAubWFwKChmKSA9PiBmLnJlcGxhY2UoJy4nLCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgIHZhciBpc0FsbG93ZWQgPSB0cmltbWVkRm9ybWF0cy5pbmNsdWRlcyhleHQhKTtcclxuXHJcbiAgICAgICAgaWYgKCFpc0FsbG93ZWQpIHtcclxuICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2goYFwiJHtmaWxlLm5hbWV9XCIgLSBuZW0gdMOhbW9nYXRvdHQgZm9ybcOhdHVtYCk7XHJcbiAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZmlsZS5zaXplID4gdGhpcy5tYXhTaXplTWIhICogMV8wMDBfMDAwKSB7XHJcbiAgICAgICAgdGhpcy5lcnJvcnMucHVzaChgXCIke2ZpbGUubmFtZX1cIiAtIHTDumwgbmFneSBmw6FqbCAobWF4ICR7dGhpcy5tYXhTaXplTWJ9IE1CKWApO1xyXG4gICAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFoYXNFcnJvcikge1xyXG4gICAgICAgIHZhbGlkRmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNNdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLmZpbGVzID0gWy4uLnRoaXMuZmlsZXMsIC4uLnZhbGlkRmlsZXNdO1xyXG4gICAgfSBlbHNlIGlmICh2YWxpZEZpbGVzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmZpbGVzID0gW3ZhbGlkRmlsZXNbMF1dO1xyXG5cclxuICAgICAgaWYgKHRoaXMuYXV0b1VwbG9hZCkge1xyXG4gICAgICAgIHRoaXMudXBsb2FkRmlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRGaWxlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChldmVudC50YXJnZXQuZmlsZXMgJiYgZXZlbnQudGFyZ2V0LmZpbGVzLmxlbmd0aCkge1xyXG4gICAgICB2YXIgZmlsZUxpc3QgPSBBcnJheS5mcm9tKGV2ZW50LnRhcmdldC5maWxlcykgYXMgRmlsZVtdO1xyXG4gICAgICB0aGlzLnByb2Nlc3NGaWxlcyhmaWxlTGlzdCk7XHJcbiAgICAgIHRoaXMuZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRHJvcChldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy5pc0RyYWdPdmVyID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKCFldmVudC5kYXRhVHJhbnNmZXI/LmZpbGVzKSByZXR1cm47XHJcbiAgICBjb25zdCBmaWxlTGlzdCA9IEFycmF5LmZyb20oZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzKTtcclxuICAgIHRoaXMucHJvY2Vzc0ZpbGVzKGZpbGVMaXN0KTtcclxuICB9XHJcblxyXG4gIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIHRoaXMuaXNEcmFnT3ZlciA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdMZWF2ZShldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGNvbnN0IHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0IGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcclxuICAgIGxldCBzdG9wRHJhZyA9IGZhbHNlO1xyXG5cclxuICAgIGlmICghcmVsYXRlZCkge1xyXG4gICAgICBzdG9wRHJhZyA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBwYXJlbnREcm9wID0gcmVsYXRlZC5jbG9zZXN0KCcuY29udGFpbmVyJyk7XHJcbiAgICAgIGlmIChyZWxhdGVkICE9PSBldmVudC5jdXJyZW50VGFyZ2V0ICYmICFwYXJlbnREcm9wKSB7XHJcbiAgICAgICAgc3RvcERyYWcgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHN0b3BEcmFnKSB7XHJcbiAgICAgIHRoaXMuaXNEcmFnT3ZlciA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuZmlsZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICB9XHJcblxyXG4gIHVwbG9hZEZpbGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwbG9hZENhbGxiYWNrKHRoaXMuZmlsZXMpO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0U2l6ZShieXRlczogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmIChieXRlcyA9PT0gMCkgcmV0dXJuICcwIEInO1xyXG4gICAgY29uc3QgayA9IDEwMjQ7XHJcbiAgICBjb25zdCBzaXplcyA9IFsnQicsICdLQicsICdNQicsICdHQicsICdUQiddO1xyXG4gICAgY29uc3QgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coYnl0ZXMpIC8gTWF0aC5sb2coaykpO1xyXG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUZsb2F0KChieXRlcyAvIE1hdGgucG93KGssIGkpKS50b0ZpeGVkKDEpKTtcclxuICAgIHJldHVybiBgJHt2YWx1ZX0gJHtzaXplc1tpXX1gO1xyXG4gIH1cclxuXHJcbiAgZmlsZVByZXZpZXdVcmwoZmlsZTogRmlsZSk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgaWYgKGZpbGUudHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkge1xyXG4gICAgICByZXR1cm4gVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZG93bmxvYWRGaWxlKGZpbGU6IEZpbGUpOiB2b2lkIHtcclxuICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7XHJcbiAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgYS5ocmVmID0gdXJsO1xyXG4gICAgYS5kb3dubG9hZCA9IGZpbGUubmFtZTtcclxuICAgIGEuY2xpY2soKTtcclxuICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcclxuICB9XHJcblxyXG4gIGdldCB1cGxvYWRCdXR0b24oKTogVWlBY3Rpb25EZXNjcmlwdG9yIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHRpdGxlOiB0aGlzLmkxOG4hLnVwbG9hZCA/PyAnJyxcclxuICAgICAgY29sb3I6ICdwcmltYXJ5JyxcclxuICAgICAgdHlwZTogVWlBY3Rpb25CdXR0b25UeXBlLlJBSVNFRCxcclxuICAgICAgaWNvbjogJ3VwbG9hZCcsXHJcbiAgICAgIGljb25Qb3NpdGlvbjogSWNvblBvc2l0aW9uLlBSRSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXQgZG93bmxvYWRCdXR0b24oKTogVWlBY3Rpb25EZXNjcmlwdG9yIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHRpdGxlOiAnJyxcclxuICAgICAgY29sb3I6ICdwcmltYXJ5JyxcclxuICAgICAgdHlwZTogVWlBY3Rpb25CdXR0b25UeXBlLklDT04sXHJcbiAgICAgIGljb246ICdkb3dubG9hZCcsXHJcbiAgICAgIGljb25Qb3NpdGlvbjogSWNvblBvc2l0aW9uLlBSRSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXQgcmVtb3ZlQnV0dG9uKCk6IFVpQWN0aW9uRGVzY3JpcHRvciB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0aXRsZTogJycsXHJcbiAgICAgIGNvbG9yOiAncHJpbWFyeScsXHJcbiAgICAgIHR5cGU6IFVpQWN0aW9uQnV0dG9uVHlwZS5JQ09OLFxyXG4gICAgICBpY29uOiAnY2xvc2UnLFxyXG4gICAgICBpY29uQ29sb3I6ICdyZWQnLFxyXG4gICAgICBpY29uUG9zaXRpb246IEljb25Qb3NpdGlvbi5QUkUsXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2XHJcbiAgY2xhc3M9XCJjb250YWluZXJcIlxyXG4gIChkcmFnb3Zlcik9XCJvbkRyYWdPdmVyKCRldmVudClcIlxyXG4gIChkcmFnbGVhdmUpPVwib25EcmFnTGVhdmUoJGV2ZW50KVwiXHJcbiAgKGRyb3ApPVwib25Ecm9wKCRldmVudClcIlxyXG4gIFtjbGFzcy5kcmFnb3Zlcl09XCJpc0RyYWdPdmVyXCJcclxuPlxyXG4gIDxkaXYgY2xhc3M9XCJmaWxlQ29udGFpbmVyXCIgKGNsaWNrKT1cImZpbGVJbnB1dC5jbGljaygpXCI+XHJcbiAgICA8aW5wdXRcclxuICAgICAgI2ZpbGVJbnB1dFxyXG4gICAgICBpZD1cImFkZEZpbGVcIlxyXG4gICAgICBwbGFjZWhvbGRlcj1cImZpbGVJbnB1dFwiXHJcbiAgICAgIHR5cGU9XCJmaWxlXCJcclxuICAgICAgKGNoYW5nZSk9XCJnZXRGaWxlKCRldmVudClcIlxyXG4gICAgICBjbGFzcz1cImZpbGVcIlxyXG4gICAgICBhY2NlcHQ9XCJ7eyBmaWxlRm9ybWF0cz8uam9pbignLCAnKSB9fVwiXHJcbiAgICAgIFtzaXplXT1cIm1heFNpemVNYlwiXHJcbiAgICAgIFttdWx0aXBsZV09XCJpc011bHRpcGxlXCJcclxuICAgICAgc3R5bGU9XCJkaXNwbGF5OiBub25lXCJcclxuICAgIC8+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsZVVwbG9hZENvbnRlbnRDb250YWluZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImljb25cIj5cclxuICAgICAgICA8bWF0LWxhYmVsICpuZ0lmPVwidXNlSWNvbkJ1dHRvblwiIGNsYXNzPVwiYWRkRmlsZUJ1dHRvblwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwiYWRkQ2lyY2xlXCI+YWRkX2NpcmNsZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiF1c2VJY29uQnV0dG9uXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgY2xhc3M9XCJhZGRGaWxlQnV0dG9uXCI+XHJcbiAgICAgICAgICB7eyBpMThuIS5hZGRGaWxlIH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGFiZWxzXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbCAqbmdJZj1cInVzZUljb25CdXR0b25cIiBjbGFzcz1cImxhYmVsIHByaW1hcnkgdGl0bGVcIj5cclxuICAgICAgICAgIHt7IGkxOG4hLmFkZEZpbGUgfX1cclxuICAgICAgICA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwibGFiZWwgc2Vjb25kYXJ5XCI+IHt7IGkxOG4hLmJyb3dzZU9yRHJhZyB9fSA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwic3ViTGFiZWwgcHJpbWFyeVwiPiB7eyBpMThuIS5tYXhTaXplIH19IDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJzdWJMYWJlbCBwcmltYXJ5XCI+IHt7IGkxOG4hLmZvcm1hdHMgfX0gPC9tYXQtbGFiZWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkQnV0dG9uXCIgKm5nSWY9XCJmaWxlcy5sZW5ndGhcIj5cclxuICAgICAgICA8dWktYWN0aW9uLWJ1dHRvbiAoYWN0aW9uQ2xpY2spPVwidXBsb2FkRmlsZSgpXCIgW2Rlc2NyaXB0b3JdPVwidXBsb2FkQnV0dG9uXCI+XHJcbiAgICAgICAgPC91aS1hY3Rpb24tYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwiZXJyb3JzLmxlbmd0aFwiIGNsYXNzPVwiZXJyb3JNZXNzYWdlXCI+XHJcbiAgICA8c21hcnQtaWNvbiBbaWNvbl09XCInZXJyb3InXCIgW2NvbG9yXT1cIid3YXJuJ1wiPjwvc21hcnQtaWNvbj5cclxuICAgIDxkaXYgY2xhc3M9XCJlcnJvcnNcIj5cclxuICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IGVycm9yIG9mIGVycm9yc1wiPnt7IGVycm9yIH19PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCJmaWxlcy5sZW5ndGhcIiBjbGFzcz1cInVwbG9hZGVkRmlsZXNDb250YWluZXJcIj5cclxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpbGUgb2YgZmlsZXM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cInVwbG9hZGVkRmlsZVwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsZVByZXZpZXdVcmwoZmlsZSk7IGVsc2UgZmlsZUljb25cIj5cclxuICAgICAgICA8aW1nIFtzcmNdPVwiZmlsZVByZXZpZXdVcmwoZmlsZSlcIiBbYWx0XT1cImZpbGUubmFtZVwiIHdpZHRoPVwiNTBcIiBoZWlnaHQ9XCI1MFwiIC8+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI2ZpbGVJY29uPlxyXG4gICAgICAgIDxzbWFydC1pY29uIFtpY29uXT1cIidpbnNlcnRfZHJpdmVfZmlsZSdcIj48L3NtYXJ0LWljb24+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmlsZURhdGFcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZURhdGFDb250YWluZXJcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsZU5hbWVcIj57eyBmaWxlLm5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpbGVTaXplXCI+e3sgZm9ybWF0U2l6ZShmaWxlLnNpemUpIH19PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWxlQWN0aW9uc1wiPlxyXG4gICAgICAgIDx1aS1hY3Rpb24tYnV0dG9uIChhY3Rpb25DbGljayk9XCJkb3dubG9hZEZpbGUoZmlsZSlcIiBbZGVzY3JpcHRvcl09XCJkb3dubG9hZEJ1dHRvblwiPlxyXG4gICAgICAgIDwvdWktYWN0aW9uLWJ1dHRvbj5cclxuXHJcbiAgICAgICAgPHVpLWFjdGlvbi1idXR0b24gY2xhc3M9XCJyZW1vdmVJY29uXCIgKGFjdGlvbkNsaWNrKT1cInJlbW92ZShpKVwiIFtkZXNjcmlwdG9yXT1cInJlbW92ZUJ1dHRvblwiPlxyXG4gICAgICAgIDwvdWktYWN0aW9uLWJ1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|