@eqproject/eqp-dynamic-module 2.9.12 → 2.9.14
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/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +2 -2
- package/esm2020/lib/components/private/action-button-creator/action-button-creator.component.mjs +36 -9
- package/esm2020/lib/components/private/add-form-field/add-form-field.component.mjs +54 -13
- package/esm2020/lib/components/private/dynamic-module-field-extra-fix/dynamic-module-field-extra-fix.component.mjs +5 -3
- package/esm2020/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.mjs +4 -2
- package/esm2020/lib/components/private/field-templates/action-button-field-template/action-button-field-template.component.mjs +27 -6
- package/esm2020/lib/components/private/form-records/add-form-record/add-form-record.component.mjs +4 -2
- package/esm2020/lib/models/fields/actionButton.model.mjs +1 -1
- package/esm2020/lib/models/trigger.model.mjs +1 -1
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +128 -30
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +124 -30
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/lib/components/private/action-button-creator/action-button-creator.component.d.ts +2 -0
- package/lib/components/private/add-form-field/add-form-field.component.d.ts +2 -0
- package/lib/components/private/dynamic-module-field-extra-fix/dynamic-module-field-extra-fix.component.d.ts +3 -2
- package/lib/components/private/field-templates/action-button-field-template/action-button-field-template.component.d.ts +1 -1
- package/lib/models/fields/actionButton.model.d.ts +2 -1
- package/lib/models/trigger.model.d.ts +1 -0
- package/package.json +1 -1
|
@@ -607,7 +607,7 @@ export class EqpDynamicModuleConfiguratorComponent {
|
|
|
607
607
|
saveActionButtons(element) {
|
|
608
608
|
if (element != null) {
|
|
609
609
|
if (this.form.ActionButtons != null) {
|
|
610
|
-
var existsActionButtons = this.form.ActionButtons.find(x => x.
|
|
610
|
+
var existsActionButtons = this.form.ActionButtons.find(x => x.ButtonUniqueId == element.ButtonUniqueId);
|
|
611
611
|
if (existsActionButtons == null) {
|
|
612
612
|
// Nuovo trigger
|
|
613
613
|
this.form.ActionButtons.push(element);
|
|
@@ -1357,4 +1357,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
1357
1357
|
type: ViewChild,
|
|
1358
1358
|
args: ["triggersTable", { static: false }]
|
|
1359
1359
|
}] } });
|
|
1360
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydGVkL2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3IvZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydGVkL2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3IvZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpREFBaUQ7QUFDakQsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLGtCQUFrQixFQUVsQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQ0wsaUJBQWlCLEVBR2pCLFVBQVUsR0FDWCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xJLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RCxPQUFPLEVBR0wsYUFBYSxHQUNkLE1BQU0sNkNBQTZDLENBQUM7QUFDckQsT0FBTyxFQUNMLGNBQWMsRUFDZCxJQUFJLEVBRUosa0JBQWtCLEVBQ2xCLFlBQVksR0FDYixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFB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QUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFROUMsb0JBQW9CO3NCQURuQixTQUFTO3VCQUFDLHNCQUFzQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFNcEQsb0JBQW9CO3NCQURuQixTQUFTO3VCQUFDLHNCQUFzQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFPbkQsa0JBQWtCO3NCQURqQixTQUFTO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFNbEQsa0JBQWtCO3NCQURqQixTQUFTO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFVdkMsYUFBYTtzQkFBdEIsTUFBTTtnQkFLRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBR0csR0FBRztzQkFBWixNQUFNO2dCQUl3QyxjQUFjO3NCQUE1RCxTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHRSxhQUFhO3NCQUEzRCxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBpbXBvcnQgeyBUaHJvd1N0bXQgfSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1xyXG4gIFVudHlwZWRGb3JtQnVpbGRlcixcclxuICBVbnR5cGVkRm9ybUNvbnRyb2wsXHJcbiAgVW50eXBlZEZvcm1Hcm91cCxcclxuICBWYWxpZGF0b3JzLFxyXG59IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuaW1wb3J0IHtcclxuICBDZWxsQWxpZ25tZW50RW51bSxcclxuICBDb25maWdDb2x1bW4sXHJcbiAgRXFwVGFibGVDb21wb25lbnQsXHJcbiAgVHlwZUNvbHVtbixcclxufSBmcm9tIFwiQGVxcHJvamVjdC9lcXAtdGFibGVcIjtcclxuaW1wb3J0IHsgTnVtZXJpY0ZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvbnVtZXJpY0ZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEJhc2VGaWVsZCwgRGF0YUdldHRlciwgRGF0YUdldHRlclR5cGVFbnVtLCBGaWVsZEludmlzaWJpbGl0eUVudW0sIEZpZWxkVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvY29udGV4dC5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIEVuZFBvaW50Q29uZmlndXJhdGlvbixcclxuICBFbmRQb2ludERhdGFQYXJhbXMsXHJcbiAgUGFyYW1UeXBlRW51bSxcclxufSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2VuZFBvaW50Q29uZmlndXJhdGlvbi5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIEFjdGlvbk9uUmVjb3JkLFxyXG4gIEZvcm0sXHJcbiAgRm9ybUZpZWxkR3JvdXAsXHJcbiAgRm9ybVNjYWxhclR5cGVFbnVtLFxyXG4gIEZvcm1UeXBlRW51bSxcclxufSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2Zvcm0ubW9kZWxcIjtcclxuaW1wb3J0IHsgQXJyYXlWYWxpZGF0b3JzIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL2N1c3RvbS1mb3JtLXZhbGlkYXRvcnMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9lcXAtZHluYW1pYy1tb2R1bGUtZGlhbG9nLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVXRpbGl0eUhlbHBlclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlc1wiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZyB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbmZpZyB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IER5bmFtaWNMb2FkZXJEaXJlY3RpdmVEYXRhLCBldmVudE91dCB9IGZyb20gXCIuLi8uLi8uLi9kaXJlY3RpdmVzL2R5bmFtaWMtbG9hZGVyL2R5bmFtaWMtbG9hZGVyLmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQgeyBUcmlnZ2VyLCBBY3Rpb25CdXR0b24sIEFjdGlvbkZsYWdFbnVtLCBGaXJlVHJpZ2dlciB9IGZyb20gJy4uLy4uLy4uL21vZGVscy90cmlnZ2VyLm1vZGVsJztcclxuaW1wb3J0IHsgQ29udGVzdHVhbGl6YXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2dldHRlci5tb2RlbFwiO1xyXG5pbXBvcnQgeyBJbWFnZVNlbGVjdG9yRmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9pbWFnZVNlbGVjdG9yRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgRmllbGRFeHRyYUNvbmZpZyB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRFeHRyYUNvbmZpZy5tb2RlbFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvclwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9lcXAtZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yLmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRXFwRHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgXHJcbiAgQElucHV0KCkgZGVidWdNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIGZpZWxkc0V4dHJhQ29uZmlnOiBBcnJheTxGaWVsZEV4dHJhQ29uZmlnPjtcclxuICBASW5wdXQoKSBjb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbmZpZyA9XHJcbiAgICBuZXcgRHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbmZpZygpO1xyXG4gIEBJbnB1dCgpIGZvcm1JRDogc3RyaW5nID0gbnVsbDtcclxuICBASW5wdXQoKSBQcm9qZWN0TmFtZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHZpZXdNb2RlOiBzdHJpbmcgPSBcImFkZE9yRWRpdFwiOyAvLyBFeHBvcnRcclxuICBASW5wdXQoKSBRdWVyeUVkaXRvckNvbXBvbmVudDogRHluYW1pY0xvYWRlckRpcmVjdGl2ZURhdGE7IC8vIEwnaW50ZXJvIGNvbXBvbmVudGUgcXVlcnkgRWRpdG9yXHJcbiAgQElucHV0KCkgdHJpZ2dlcnM6IGFueTtcclxuICBASW5wdXQoKSBhY3Rpb25CdXR0b25zOiBhbnk7XHJcbiAgQElucHV0KCkgY29udGVzdHVhbGl6YXRpb246IEFycmF5PENvbnRlc3R1YWxpemF0aW9uPjtcclxuXHJcbiAgQE91dHB1dCgpIGZpcmVUcmlnZ2VyOiBFdmVudEVtaXR0ZXI8RmlyZVRyaWdnZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaXJlVHJpZ2dlcj4oKTtcclxuXHJcbiAgbG9hZGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogVG9rZW4gZGEgdXNhcmUgbmVnbGkgZW5kcG9pbnQgZGEgY2hpYW1hcmUgcGVyIHJlY3VwZXJhcmUgbyBzYWx2YXJlIGkgcmVjb3JkLlxyXG4gICAqIFVzYXRvIHNvbG8gc2UgdmllbmUgcG9wb2xhdGEgbGEgcHJvcHJpZXTDoCBcImJhc2VTZXJ2ZXJVcmxcIi5cclxuICAgKi9cclxuICB1c2VyVG9rZW46IHN0cmluZyA9IG51bGw7XHJcbiAgLyoqXHJcbiAgICogQ29uZmlndXJhemlvbmUgZGVnbGkgZW5kcG9pbnQgZGEgY2hpYW1hcmUgcGVyIHJlY3VwZXJhcmUgbyBzYWx2YXJlIGkgZGF0aS5cclxuICAgKiBQdcOyIGVzc2VyZSBkZWZpbml0YSBkYWxsJ3V0ZW50ZSBvcHB1cmUgbGFzY2lhdGEgbnVsbCwgdmllbmUgcG9wb2xhdGEgY29uIGRlaVxyXG4gICAqIHZhbG9yaSBkaSBkZWZhdWx0IHNlIHZpZW5lIHZhbG9yaXp6YXRhIGxhIHByb3ByaWV0w6AgXCJiYXNlU2VydmVyVXJsXCIgYWx0cmltZW50aVxyXG4gICAqIHZpZW5lIGxhc2NpYXRhIG51bGwgZSBub24gdmllbmUgZXNlZ3VpdGEgbmVzc3VuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIuXHJcbiAgICovXHJcbiAgZW5kUG9pbnRDb25maWd1cmF0aW9uOiBFbmRQb2ludENvbmZpZ3VyYXRpb24gPSBudWxsO1xyXG4gIC8qKlxyXG4gICAqIFVybCBkZWwgc2VydmVyIGRhIGNoaWFtYXJlIHBlciByZWN1ZXJhcmUsIHNhbHZhcmUgbyBlbGltaW5hcmUgaSByZWNvcmQuXHJcbiAgICogVXNhdG8gcGVyIGNyZWFyZSBsYSBjb25maWd1cmF6aW9uZSBkaSBkZWZhdWx0IGRlZ2xpIGVuZHBvaW50IGRhIGNoaWFtYXJlLlxyXG4gICAqL1xyXG4gIGJhc2VTZXJ2ZXJVcmw6IHN0cmluZyA9IG51bGw7XHJcbiAgY29udGV4dDogQ29udGV4dCA9IG5ldyBDb250ZXh0KCk7XHJcblxyXG4gIC8qIGV4cG9ydCB2YXJpYWJsZXMgKi9cclxuICBkb3dubG9hZE5hbWU6IHN0cmluZztcclxuICBkb3dubG9hZEpzb25IcmVmOiBhbnk7XHJcbiAgc3RyaW5naWZpZWRGb3JtOiBzdHJpbmc7XHJcblxyXG4gIC8qIGltcG9ydCB2YXJpYWJsZXMgKi9cclxuICBpbXBvcnRlZE1vZHVsZTogc3RyaW5nID0gbnVsbDsgLy8ganNvbiBvYmplY3RcclxuICBkaWFsb2dJbXBvcnRSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICBAVmlld0NoaWxkKFwiZGlhbG9nSW1wb3J0XCIsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ0ltcG9ydDogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgZm9ybTogRm9ybSA9IG5ldyBGb3JtKCk7XHJcbiAgYmFja3VwRm9ybTogRm9ybSA9IG51bGw7XHJcbiAgc2F2ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBvcmdhSUQ6IHN0cmluZyA9IG51bGw7XHJcbiAgVXNlcklEOiBudW1iZXIgPSAzNjtcclxuICBpbm5lckZvcm1NYW5hZ21lbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpbm5lckZvcm1SZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuXHJcbiAgLyogQ09ORklHVVJBWklPTkUgUEVSIFZJU1VBTElaWkFaSU9ORSBGT1JNIENSRUFUQSAqL1xyXG4gIHZpZXdDb25maWc6IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnID0gbmV3IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnKFxyXG4gICAgdHJ1ZSxcclxuICAgIGZhbHNlLFxyXG4gICAgZmFsc2UsXHJcbiAgICBcIjBcIlxyXG4gICk7XHJcblxyXG4gIGZvcm1Gb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAgPSBudWxsO1xyXG4gIGZvcm1Db21wbGV0ZWQgPSBmYWxzZTtcclxuICBwcmV2aWV3Rm9ybTogRm9ybTtcclxuICBmb3JtRmllbGRHcm91cE5hbWU6IHN0cmluZztcclxuXHJcbiAgYWN0aW9uQXV0b2NvbXBsZXRlT3B0aW9uczogQXJyYXk8eyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+O1xyXG5cclxuICAvLyNyZWdpb24gRW51bWVyYXRvcmkgdXNhdGkgbmVsbCdodG1sXHJcbiAgRm9ybVR5cGVFbnVtID0gRm9ybVR5cGVFbnVtO1xyXG4gIEZvcm1TY2FsYXJUeXBlRW51bSA9IEZvcm1TY2FsYXJUeXBlRW51bTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIFByb3ByaWV0w6AgcGVyIGNyZWF6aW9uZS9tb2RpZmljYSBjYW1wb1xyXG4gIGZpZWxkc0NvbHVtbnM6IEFycmF5PENvbmZpZ0NvbHVtbj47XHJcbiAgQFZpZXdDaGlsZChcImZpZWxkc1RhYmxlXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBmaWVsZHNUYWJsZTogRXFwVGFibGVDb21wb25lbnQ7XHJcbiAgc2VsZWN0ZWRGaWVsZDogQmFzZUZpZWxkIHwgYW55O1xyXG4gIGluZGV4U2VsZWN0ZWRGaWVsZDogbnVtYmVyO1xyXG4gIGFjdGlvbk9uUmVjb3JkRm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG4gIGRpYWxvZ0ZpZWxkUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ0ZpZWxkXCIsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ0ZpZWxkOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJmaWVsZFNlY3Rpb25Db2x1bW5UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGZpZWxkU2VjdGlvbkNvbHVtblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gUHJvcHJpZXTDoCBwZXIgY3JlYXJlL21vZGlmaWNhcmUgdW5hIEZvcm0gZGkgZGV0dGFnbGlvXHJcbiAgc2VsZWN0ZWRJbm5lckZvcm06IEZvcm07XHJcbiAgaW5kZXhTZWxlY3RlZElubmVyRm9ybTogbnVtYmVyO1xyXG4gIGRpYWxvZ0lubmVyRm9ybVJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dJbm5lckZvcm1cIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBkaWFsb2dJbm5lckZvcm06IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgaW5uZXJGb3JtQ29uZmlnOiBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29uZmlnO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gUHJvcHJpZXTDoCBwZXIgY3JlYXJlL21vZGlmaWNhcmUgdW5hIGFjdGlvbiBzdWkgcmVjb3JkIGRpIHVuYSBGb3JtXHJcbiAgYWN0aW9uc09uUmVjb3JkQ29sdW1uczogQXJyYXk8Q29uZmlnQ29sdW1uPjtcclxuICBAVmlld0NoaWxkKFwiYWN0aW9uc09uUmVjb3JkVGFibGVcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgYWN0aW9uc09uUmVjb3JkVGFibGU6IEVxcFRhYmxlQ29tcG9uZW50O1xyXG4gIHNlbGVjdGVkQWN0aW9uOiBBY3Rpb25PblJlY29yZDtcclxuICBpbmRleFNlbGVjdGVkQWN0aW9uOiBudW1iZXI7XHJcbiAgZGlhbG9nQWN0aW9uT25SZWNvcmRSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICBAVmlld0NoaWxkKFwiZGlhbG9nQWN0aW9uT25SZWNvcmRcIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBkaWFsb2dBY3Rpb25PblJlY29yZDogVGVtcGxhdGVSZWY8YW55PjtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIFByb3ByaWV0w6AgcGVyIGNyZWFyZS9tb2RpZmljYXJlIGRlaSBib3R0b25pIGF6aW9uZVxyXG4gIGFjdGlvbkJ1dHRvbnNDb2x1bW5zOiBBcnJheTxDb25maWdDb2x1bW4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJhY3Rpb25CdXR0b25zVGFibGVcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgYWN0aW9uQnV0dG9uc1RhYmxlOiBFcXBUYWJsZUNvbXBvbmVudDtcclxuICBzZWxlY3RlZEFjdGlvbkJ1dHRvbjogQWN0aW9uQnV0dG9uO1xyXG4gIGluZGV4U2VsZWN0ZWRBY3Rpb25CdXR0b246IG51bWJlcjtcclxuICBkaWFsb2dBY3Rpb25CdXR0b25SZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICBAVmlld0NoaWxkKFwiZGlhbG9nQWN0aW9uQnV0dG9uXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgZGlhbG9nQWN0aW9uQnV0dG9uOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBhY3Rpb25CdXR0b25zRm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG4gIGFjdGlvbnNGbGFnID0gQWN0aW9uRmxhZ0VudW07XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50byBlbWVzc28gcXVhbmRvIHNpIHNhbHZhIHVuYSBmb3JtIGUgbm9uIMOoIHN0YXRvIHNwZWNpZmljYXRvIHVuIGVuZHBvaW50IGRhIGNoaWFtYXJlLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBzYXZlRm9ybUV2ZW50OiBFdmVudEVtaXR0ZXI8Rm9ybT4gPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm0+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50byBlbWVzc28gRE9QTyBhdmVyIGVzZWd1aXRvIHVuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIgcGVyIGlsIHNhbHZhdGFnZ2lvZGkgdW5hIGZvcm0gYWxsJ2VuZHBvaW50IHNwZWNpZmljYXRvLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBhZnRlclNhdmVGb3JtRXZlbnQ6IEV2ZW50RW1pdHRlcjxGb3JtPiA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9ybT4oKTtcclxuXHJcbiAgLy8gT3V0IGNvbXBvbmVudGUgZXN0ZXJub1xyXG4gIEBPdXRwdXQoKSBvdXQ6IEV2ZW50RW1pdHRlcjxldmVudE91dD4gPSBuZXcgRXZlbnRFbWl0dGVyPGV2ZW50T3V0PigpO1xyXG5cclxuICAvLyBUcmlnZ2Vyc1xyXG4gIGRpYWxvZ1RyaWdnZXJzUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ1RyaWdnZXJzXCIsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ1RyaWdnZXJzOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIHNlbGVjdGVkVHJpZ2dlcjogVHJpZ2dlcjtcclxuICB0cmlnZ2Vyc0NvbHVtbnM6IEFycmF5PENvbmZpZ0NvbHVtbj47XHJcbiAgQFZpZXdDaGlsZChcInRyaWdnZXJzVGFibGVcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIHRyaWdnZXJzVGFibGU6IEVxcFRhYmxlQ29tcG9uZW50O1xyXG5cclxuICBzaG93QWxsRmllbGRzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIENvbnRlc3R1YWxpemF0aW9uXHJcbiAgc2VsZWN0ZWRDb250ZXN0dWFsaXphdGlvbjogc3RyaW5nID0gbnVsbDtcclxuICBzZWxlY3RlZENvbnRlc3R1YWxpemF0aW9uVmFsdWU6IG51bWJlciA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgdXRpbGl0eUhlbHBlclNlcnZpY2U6IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplclxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTW9kZSA9IHRoaXMuZGVidWdNb2RlO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnbmdPbkluaXQgLSBjb25maWd1cmF0aW9ucycsIHRoaXMuY29uZmlndXJhdGlvbnMpO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnbmdPbkluaXQgLSBmb3JtSUQnLCB0aGlzLmZvcm1JRCk7XHJcblxyXG4gICAgdGhpcy5iYXNlU2VydmVyVXJsID1cclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlR2VuZXJhbENvbmZpZy5iYXNlU2VydmVyVXJsO1xyXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlR2VuZXJhbENvbmZpZy5jb250ZXh0O1xyXG4gICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gPVxyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnLmVuZFBvaW50Q29uZmlndXJhdGlvbjtcclxuICAgIC8vIHRoaXMuZm9ybUlEID0gdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlR2VuZXJhbENvbmZpZy5mb3JtSUQ7XHJcbiAgICB0aGlzLnVzZXJUb2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUdlbmVyYWxDb25maWcudXNlclRva2VuO1xyXG5cclxuICAgIHRoaXMuZm9ybSA9XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmZvcm07XHJcbiAgICB0aGlzLm9yZ2FJRCA9XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLm9yZ2FJRDtcclxuICAgIHRoaXMuVXNlcklEID1cclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuVXNlcklEO1xyXG4gICAgdGhpcy5pbm5lckZvcm1NYW5hZ21lbnQgPVxyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5pbm5lckZvcm1NYW5hZ21lbnQ7XHJcbiAgICB0aGlzLmlubmVyRm9ybVJlZiA9XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmlubmVyRm9ybVJlZjtcclxuXHJcbiAgICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuXHJcbiAgICB0aGlzLmNvbmZpZ3VyZURlZmF1bHRFbmRQb2ludHMoKTtcclxuICAgIHRoaXMuZ2V0Rm9ybUJ5SUQoKTtcclxuICAgIGlmICh0aGlzLmNvbnRleHQpIHtcclxuICAgICAgVXRpbGl0eUhlbHBlclNlcnZpY2UuU2V0Q29udGV4dCh0aGlzLmNvbnRleHQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjb25maWd1cmFyZSBnbGkgZW5kcG9pbnQgZGEgdXNhcmUgZGkgZGVmYXVsdCBhIHBhcnRpcmUgZGFsbCd1cmwgYmFzZSBkZWwgc2VydmVyXHJcbiAgICogYSBjdWkgc2kgZGV2ZSBjb25uZXR0ZXJlIGUgYWwgdG9rZW4gZGEgcGFzc2FyZSBwZXIgYXV0ZW50aWNhcnNpLlxyXG4gICAqIFNlIGxhIHByb3ByaWV0w6AgYmFzZVNlcnZlclVybCDDqCBudWxsIGUgbm9uIHNvbm8gc3RhdGkgY29uZmlndXJhdGkgaSB2YXJpIGVuZHBvaW50IGFsbG9yYVxyXG4gICAqIG5vbiB2aWVuZSBlc2VndWl0YSBuZXNzdW5hIGNoaWFtYXRhIGh0dHAgcGVyIHJlY3VwZXJhcmUvc2FsdmFyZSBpIGRhdGkuXHJcbiAgICovXHJcbiAgY29uZmlndXJlRGVmYXVsdEVuZFBvaW50cygpIHtcclxuICAgIGlmICghdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiYgdGhpcy5iYXNlU2VydmVyVXJsKSB7XHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uID1cclxuICAgICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLkNvbmZpZ3VyZURlZmF1bHRFbmRQb2ludHMoXHJcbiAgICAgICAgICB0aGlzLmJhc2VTZXJ2ZXJVcmwsXHJcbiAgICAgICAgICB0aGlzLnVzZXJUb2tlblxyXG4gICAgICAgICk7XHJcbiAgICAgIGlmICh0aGlzLmZvcm1JRCkge1xyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludC5QYXJhbXMgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm1JRCxcclxuICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgc3RyaW5nU2FuaXRpemVyKHZhbHVlKSB7XHJcbiAgICBpZiAoIVV0aWxpdHlIZWxwZXJTZXJ2aWNlLnN0cmluZ0NoZWNrUGFyZW50ZXNpcyh2YWx1ZSkpIHtcclxuICAgICAgYWxlcnQoXCJlcnJvcmUhIGVyYW5vIHByZXNlbnRpIGRlbGxlIHBhcmVudGVzaS5cIik7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuICB9XHJcbiAgc2V0TmFtZShOYW1lOiBzdHJpbmcpIHtcclxuICAgIGlmKCF0aGlzLnN0cmluZ1Nhbml0aXplcihOYW1lKSl7XHJcbiAgICAgIGNvbnN0IFJlZ0V4cFBhcmV0ZXNpcyA9IC9bXFwoXFwpXFxbXFxdXFx7XFx9XS9nO1xyXG4gICAgICAvLyBSaW11b3ZpIHR1dHRlIGxlIHBhcmVudGVzaSBub24gYmlsYW5jaWF0ZVxyXG4gICAgICB0aGlzLmZvcm0uTmFtZSA9IE5hbWUucmVwbGFjZShSZWdFeHBQYXJldGVzaXMsICcnKTtcclxuICAgIH1cclxuICAgIGlmKHRoaXMuZm9ybS5JRCA9PSBudWxsKXsgLy8gdGhpcy5mb3JtLkNvZGUgPT0gbnVsbCB8fCB0aGlzLmZvcm0uQ29kZSA9PSB1bmRlZmluZWQgfHwgdGhpcy5mb3JtLkNvZGUgPT0gXCJcIiApe1xyXG4gICAgICB0aGlzLnNldENvZGUodGhpcy5mb3JtLk5hbWUpO1xyXG4gICAgfVxyXG4gIH1cclxuICBzZXRDb2RlKENvZGU6IHN0cmluZykge1xyXG4gICAgdGhpcy5zdHJpbmdTYW5pdGl6ZXIoQ29kZSk7XHJcbiAgICBcclxuICAgIGNvbnN0IFJlZ0V4cFBsYWluID0gL1teXFx3XS9nO1xyXG4gICAgdGhpcy5mb3JtLkNvZGUgPSBDb2RlLnRvVXBwZXJDYXNlKCkucmVwbGFjZShSZWdFeHBQbGFpbiwgXCJcIik7XHJcbiAgfVxyXG4gIG9taXRfc3BlY2lhbF9jaGFyKGV2ZW50KSB7XHJcbiAgICB2YXIgaztcclxuICAgIGsgPSBldmVudC5rZXlDb2RlOyAvLyAgICAgICAgIGsgPSBldmVudC5rZXlDb2RlOyAgKEJvdGggY2FuIGJlIHVzZWQpXHJcbiAgICBpZiAoayA9PSAzNCkge1xyXG4gICAgICBldmVudC5rZXlDb2RlID0gMDtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyogSU1QT1JUIEZVTkNUSU9OICovXHJcbiAgb25JbXBvcnQoZXZlbnQpIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkRmlsZSA9IGV2ZW50LnRhcmdldC5maWxlc1swXTtcclxuICAgIGNvbnN0IGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgZmlsZVJlYWRlci5yZWFkQXNUZXh0KHNlbGVjdGVkRmlsZSwgXCJVVEYtOFwiKTtcclxuICAgIGZpbGVSZWFkZXIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnb25JbXBvcnQgLSBmaWxlUmVhZGVyLnJlc3VsdC50b1N0cmluZygpJywgZmlsZVJlYWRlci5yZXN1bHQudG9TdHJpbmcoKSk7XHJcbiAgICAgIHRoaXMuaW1wb3J0ZWRNb2R1bGUgPSBmaWxlUmVhZGVyLnJlc3VsdC50b1N0cmluZygpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaW1wb3J0ZWRNb2R1bGUgIT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChjb25maXJtKFwic3RhaSBwZXIgc292cmFzY3JpdmVyZSBpbCBtb2R1bG9cIikpIHtcclxuICAgICAgICAgIC8vIGNoaWFtbyBpbCBwYXJzZSBjb3PDrCBkYSBub24gY3JlYXJlIHVuIHJlZmVyZW5jZUJpbmRpbmdcclxuICAgICAgICAgIHZhciBpbXBvcnRlZEZvcm06IEZvcm0gPSBKU09OLnBhcnNlKHRoaXMuaW1wb3J0ZWRNb2R1bGUpO1xyXG4gICAgICAgICAgaW1wb3J0ZWRGb3JtLklEID0gXCJcIjtcclxuICAgICAgICAgIGltcG9ydGVkRm9ybS5OYW1lID0gaW1wb3J0ZWRGb3JtLk5hbWUgKyBcIiAoSW1wb3J0YXRvKVwiO1xyXG5cclxuICAgICAgICAgIGltcG9ydGVkRm9ybSA9IHRoaXMuc2V0SW1wb3J0ZWRGb3JtKGltcG9ydGVkRm9ybSk7XHJcbiAgICAgICAgICB0aGlzLnNldEZvcm1BbmRDb25maWd1cmUoaW1wb3J0ZWRGb3JtKTtcclxuICAgICAgICAgIHRoaXMuc2V0TmFtZShpbXBvcnRlZEZvcm0uTmFtZSk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHRoaXMuY2xvc2VJbXBvcnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYWxlcnQoXCJzZWxlemlvbmEgdW4gZmlsZVwiKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIGZpbGVSZWFkZXIub25lcnJvciA9IChlcnJvcikgPT4ge1xyXG4gICAgICBhbGVydChcInNlbGV6aW9uYSB1biBmaWxlIHZhbGlkbyBvIGNvbnRyb2xsYSBjaGUgbm9uIHNpYSBjb3Jyb3R0b1wiKTtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgc2V0SW1wb3J0ZWRGb3JtKGZvcm06IEZvcm0pe1xyXG5cclxuICAgIC8vIE1vZGlmaWNhIGRlbCBjcmVhdGlvbiB1c2VyIHN1IEltcG9ydFxyXG4gICAgZm9ybS5DcmVhdGlvblVzZXIgPSB0aGlzLlVzZXJJRDtcclxuXHJcbiAgICAvLyBNb2RpZmljYSBkZWkgRmllbGQgc3UgSW1wb3J0XHJcbiAgICBmb3JtLkZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICBpZiAoZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bXCJFbGVuY28gaW1tYWdpbmlcIl0pe1xyXG4gICAgICAgIChmaWVsZCBhcyBJbWFnZVNlbGVjdG9yRmllbGQpLkF0dGFjaG1lbnRMaXN0LmZvckVhY2goKGF0dGFjaG1lbnQpID0+IHtcclxuICAgICAgICAgIGF0dGFjaG1lbnQuSUQgPSAwO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGZvcm07XHJcbiAgfVxyXG5cclxuICBpbXBvcnRNb2R1bGUoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ0ltcG9ydFJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dJbXBvcnQsIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgLy8gd2lkdGg6IFwiNzUlXCIsXHJcbiAgICAgIC8vIG1heEhlaWdodDogXCI4MCVcIixcclxuICAgICAgLy8gaGVpZ2h0OiBcIjgwJVwiLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZUltcG9ydCgpIHtcclxuICAgIHRoaXMuZGlhbG9nSW1wb3J0UmVmLmNsb3NlKCk7XHJcbiAgfVxyXG4gIC8qIEVORCBJTVBPUlQgRlVOQ1RJT04gKi9cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bnppb25lIGRpIGVzcG9ydGF6aW9uZSBtb2R1bG9cclxuICAgKi9cclxuXHJcbiAgZXhwb3J0KCl7XHJcblxyXG4gICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybUlELFxyXG4gICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkV4cG9ydEJ5SURFbmRQb2ludCxcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgKGJhc2U2NHJlczogc3RyaW5nKSA9PiB7XHJcblxyXG4gICAgICAgIGNvbnN0IG5ld0Jsb2IgPSBuZXcgQmxvYihbYmFzZTY0cmVzXSwgeyB0eXBlOiBcInRleHQvcGxhaW5cIiB9KTtcclxuICAgICAgICBjb25zdCBkYXRhID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobmV3QmxvYik7XHJcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgIGxpbmsuaHJlZiA9IGRhdGE7XHJcbiAgICAgICAgbGluay5kb3dubG9hZCA9IFwiZXhwb3J0X1wiK3RoaXMuZm9ybUlEK1wiX2Zvcm0udHh0XCI7IC8vIHNldCBhIG5hbWUgZm9yIHRoZSBmaWxlXHJcbiAgICAgICAgbGluay5jbGljaygpO1xyXG4gICAgICAgIFxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtQW5kQ29uZmlndXJlKG5ldyBGb3JtKCkpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmVjdXBlcmFyZSB0dXR0aSBpIHJlY29yZCBzYWx2YXRpIHBlciB1bmEgcGFydGljb2xhcmUgRm9ybS5cclxuICAgKiBMYSBjaGlhbWF0YSB2aWVuZSBlZmZldHR1YXRhIHNvbG8gc2Ugw6ggc3RhdG8gY29uZmlndXJhdG8gbCdlbmRQb2ludCBkYSB1c2FyZS5cclxuICAgKi9cclxuICBnZXRGb3JtQnlJRCgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5mb3JtSUQgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50XHJcbiAgICApIHtcclxuICAgICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm1JRCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICAgIHRoaXMuc2V0Rm9ybUFuZENvbmZpZ3VyZShyZXMpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZXRGb3JtQW5kQ29uZmlndXJlKG5ldyBGb3JtKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybUFuZENvbmZpZ3VyZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29uZmlndXJvIGwnZXhwb3J0IGRlbCBmb3JtXHJcbiAgICovXHJcblxyXG4gIGNvbmZpZ3VyZUV4cG9ydChyZXM6IEZvcm0pIHtcclxuXHJcbiAgICAgIC8qIGdldHRpbmcgcmVhZHkgZm9yIGV4cG9ydCAqL1xyXG4gICAgICBsZXQgY2xvbmUgPSBuZXcgRm9ybSgpO1xyXG4gICAgICBjbG9uZS5Db2RlID0gXCJJTVBPUlRfXCIgKyByZXMuQ29kZTtcclxuICAgICAgY2xvbmUuTmFtZSA9IFwiaW1wb3J0X1wiICsgcmVzLk5hbWU7XHJcbiAgICAgIGNsb25lLkRlc2NyaXB0aW9uID0gcmVzLkRlc2NyaXB0aW9uO1xyXG4gICAgICBjbG9uZS5Gb3JtU2NhbGFyVHlwZSA9IHJlcy5Gb3JtU2NhbGFyVHlwZTtcclxuICAgICAgY2xvbmUuRm9ybUZpZWxkc0dyb3VwcyA9IHJlcy5Gb3JtRmllbGRzR3JvdXBzO1xyXG4gICAgICBjbG9uZS5BY3Rpb25zT25SZWNvcmQgPSByZXMuQWN0aW9uc09uUmVjb3JkO1xyXG4gICAgICBjbG9uZS5GaWVsZHMgPSByZXMuRmllbGRzO1xyXG4gICAgICBjbG9uZS5PYmplY3RGaWVsZHMgPSByZXMuT2JqZWN0RmllbGRzO1xyXG4gICAgICBjbG9uZS5Jbm5lckZvcm1zID0gcmVzLklubmVyRm9ybXM7XHJcbiAgICAgIGNsb25lLlJvb3RFbnRpdHlJRCA9IHJlcy5Sb290RW50aXR5SUQ7XHJcbiAgICAgIGNsb25lLk9yZ2FJRCA9IHJlcy5PcmdhSUQ7XHJcblxyXG4gICAgICB0aGlzLmRvd25sb2FkTmFtZSA9IFwiZXhwb3J0X1wiICsgcmVzLk5hbWU7XHJcbiAgICAgIHRoaXMuc3RyaW5naWZpZWRGb3JtID0gSlNPTi5zdHJpbmdpZnkoY2xvbmUpO1xyXG4gICAgICB0aGlzLmRvd25sb2FkSnNvbkhyZWYgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKFxyXG4gICAgICAgIFwiZGF0YTp0ZXh0L2pzb247Y2hhcnNldD1VVEYtOCxcIiArXHJcbiAgICAgICAgICBlbmNvZGVVUklDb21wb25lbnQodGhpcy5zdHJpbmdpZmllZEZvcm0pXHJcbiAgICAgICk7XHJcbiAgICAgIFxyXG4gICAgICAvKiBlbmQgZXhwb3J0ICovXHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIGFsIGNhbWJpbyBkZWwgdGlwbyBkaSB2aXN1YWxpenphemlvbmUgZGVsbGEgZm9ybS5cclxuICAgKiBTZSBsJ3V0ZW50ZSBzY2VnbGllIHVuYSB2aXN1YWxpenphemlvbmUgcmFnZ3J1cHBhdGEgaWwgbWV0b2RvIGFnZ2l1bmdlIGFsIEZvcm1Hcm91cCB1biBudW92b1xyXG4gICAqIGNvbnRyb2xsbyBwZXIgbCdhcnJheSBkZWkgbm9taSBkZWxsZSBzZXppb25pIGRhIGNyZWFyZS5cclxuICAgKi9cclxuICBvbkNoYW5nZUZvcm1TY2FsYXJUeXBlKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2UpIHtcclxuICAgICAgaWYgKCF0aGlzLmZvcm1Gb3JtR3JvdXAuY29udGFpbnMoXCJGb3JtRmllbGRzR3JvdXBzXCIpKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woXCJGb3JtRmllbGRzR3JvdXBzXCIpO1xyXG4gICAgICAgIHRoaXMuZm9ybUZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJGb3JtRmllbGRzR3JvdXBzXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzLCBbXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICAgIEFycmF5VmFsaWRhdG9ycy5taW5MZW5naHQoMSksXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzID0gbnVsbDtcclxuICAgICAgaWYgKHRoaXMuZm9ybUZvcm1Hcm91cC5jb250YWlucyhcIkZvcm1GaWVsZHNHcm91cHNcIikpXHJcbiAgICAgICAgdGhpcy5mb3JtRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woXCJGb3JtRmllbGRzR3JvdXBzXCIpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5mb3JtRm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnRvIGludm9jYXRvIGFsIGtleXVwIG5lbGwnaW5wdXQgcGVyIGluc2VyaXJlIGkgbm9taSBkZWxsZSBzZXppb25pIHBlciBsYSB2aXN1YWxpenphemlvbmVcclxuICAgKiByYWdncnVwcGF0YSBkZWxsYSBmb3JtLiBRdWFudG8gbCd1dGVudGUgcHJlbWUgaWwgdGFzdG8gaW52aW8gdmllbmUgYWdnaXVudG8gaWwgbnVvdm8gbm9tZSBhbGxlXHJcbiAgICogc2V6aW9uaSBkaXNwb2JpbGkgc2Ugbm9uIG5lIGVzaXN0ZSB1bmEgY29uIGxvIHN0ZXNzbyBub21lLlxyXG4gICAqIEBwYXJhbSBldmVudCBFdmVudG8gY2hlIHJhcHByZXNlbnRhIGlsIGtleXVwIHN1bGxhIHRhc3RpZXJhLlxyXG4gICAqL1xyXG4gIG9uRm9ybUZpZWxkR3JvdXBOYW1lS2V5VXAoZXZlbnQpIHtcclxuICAgIGlmIChldmVudC5jb2RlID09PSBcIkVudGVyXCIgfHwgZXZlbnQuY29kZSA9PT0gXCJOdW1wYWRFbnRlclwiKSB7XHJcbiAgICAgIGlmICghdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMpIHtcclxuICAgICAgICB0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3VwcyA9IG5ldyBBcnJheTxGb3JtRmllbGRHcm91cD4oKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIXRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzLmZpbmQoXHJcbiAgICAgICAgICAobikgPT4gbi5OYW1lID09IHRoaXMuZm9ybUZpZWxkR3JvdXBOYW1lXHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3Vwcy5wdXNoKHsgTmFtZTogdGhpcy5mb3JtRmllbGRHcm91cE5hbWUgfSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gSW1wb3N0byBpbCBudW92byB2YWxvcmUgZGVsIEZvcm1Db250cm9sIHBlciBhZ2dpb3JuYXJlIGxvIHN0YXRvIGRlbGxhIGZvcm0uXHJcbiAgICAgIHRoaXMuZm9ybUZvcm1Hcm91cC5jb250cm9sc1tcIkZvcm1GaWVsZHNHcm91cHNcIl0uc2V0VmFsdWUoXHJcbiAgICAgICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHNcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5mb3JtRmllbGRHcm91cE5hbWUgPSBudWxsO1xyXG4gICAgICB0aGlzLnNldEZvcm1GaWVsZEdyb3VwT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJpbXVvdmVyZSBsYSBzZXppb25lIHNlbGV6aW9uYXRhIGRhIHF1ZWxsZSBkaXNwb25pYmlsaSBwZXIgbGEgZm9ybS5cclxuICAgKiBAcGFyYW0gZ3JvdXBOYW1lIE5vbWUgZGVsbGEgc2V6aW9uZSBkYSBlbGltaW5hcmUuXHJcbiAgICovXHJcbiAgb25EZWxldGVGb3JtRmllbGRHcm91cE5hbWUoZ3JvdXBOYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzLnNwbGljZShcclxuICAgICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMuZmluZEluZGV4KChnKSA9PiBnLk5hbWUgPT09IGdyb3VwTmFtZSksXHJcbiAgICAgIDFcclxuICAgICk7XHJcbiAgICAvLyBJbXBvc3RvIGlsIG51b3ZvIHZhbG9yZSBkZWwgRm9ybUNvbnRyb2wgcGVyIGFnZ2lvcm5hcmUgbG8gc3RhdG8gZGVsbGEgZm9ybS5cclxuICAgIHRoaXMuZm9ybUZvcm1Hcm91cC5jb250cm9sc1tcIkZvcm1GaWVsZHNHcm91cHNcIl0uc2V0VmFsdWUoXHJcbiAgICAgIHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzXHJcbiAgICApO1xyXG4gICAgLy8gU2UgZXNpc3Rvbm8gRmllbGQgbGVnYXRpIGFsbGEgc2V6aW9uZSBjaGUgc2kgdnVvbGUgZWxpbWluYXJlIGFsbG9yYSByb21wbyBpbCBsZWdhbWUuXHJcbiAgICBpZiAodGhpcy5mb3JtLkZpZWxkcy5maW5kKChmKSA9PiBmLkZpZWxkR3JvdXAgPT0gZ3JvdXBOYW1lKSkge1xyXG4gICAgICB0aGlzLmZvcm0uRmllbGRzLmZpbHRlcigoZikgPT4gZi5GaWVsZEdyb3VwID09IGdyb3VwTmFtZSkuZm9yRWFjaChcclxuICAgICAgICAoZikgPT4gKGYuRmllbGRHcm91cCA9IG51bGwpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldEZvcm1GaWVsZEdyb3VwT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hpYW1hdG8gcXVhbmRvIHNpIHZ1b2xlIGFnZ2l1bmdlcmUgdW4gbnVvdm8gY2FtcG8gbyBzaSB2dW9sZSBtb2RpZmljYXJlIHVubyBlc2lzdGVudGUuXHJcbiAgICogTWVtb3JpenphIGwnZXZlbnR1YWxlIEZpZWxkIHNjZWx0byBvbmUgY3JlYSB1bm8gbnVvdm8gcHJpbWEgZGkgYXByaXJlIGlsIGRpYWxvZyBwZXIgbW9kaWZpY2FybG8vYWdnaXVuZ2VybG8uXHJcbiAgICogQHBhcmFtIGZpZWxkIE9nZ2V0dG8gQmFzZUZpZWxkIGRhIG1vZGlmaWNhcmUuIFNlIG51bGwgbmUgdmllbmUgY3JlYXRhIHVuYSBudW92YSBpc3RhbnphIHBlciBsJ2FnZ2l1bnRhLlxyXG4gICAqL1xyXG4gIG9wZW5GaWVsZERpYWxvZyhmaWVsZDogQmFzZUZpZWxkID0gbnVsbCkge1xyXG5cclxuICAgIGNvbnNvbGUubG9nKFwib3BlbkZpZWxkRGlhbG9nXCIsZmllbGQpO1xyXG5cclxuICAgIGlmIChmaWVsZCkge1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA9IHRoaXMuZm9ybS5GaWVsZHMuaW5kZXhPZihmaWVsZCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWVsZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZmllbGQpKTtcclxuXHJcbiAgICAgIC8vIERhdG8gY2hlIGNvbiBpbCBKU09OLnBhcnNlIHNpIHBlcmRlIHBlciBzdHJhZGEgbGEgZm9ybXVsYSwgbGEgcmltZXR0byBkb3BvLlxyXG4gICAgICAvLyBUYW50byBvcmFtYWkgaWwgcmlmZXJpbWVudG8gY29uIFwiZmllbGRcIiDDqCBzdGF0byBwZXJzbyBlIHN0aWFtbyBwYXNzYW5kbyB1bmEgc3RyaW5nYVxyXG4gICAgICB0aGlzLnNlbGVjdGVkRmllbGQuRm9ybXVsYSA9IGZpZWxkLkZvcm11bGE7XHJcblxyXG4gICAgICBpZih0aGlzLnNlbGVjdGVkRmllbGQuQW5zd2VyU3R5bGUgPT0gbnVsbCl7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkLkFuc3dlclN0eWxlID0geyBJbkxpc3RWaWV3OiB0cnVlLCBWaXNpYmxlSWY6IG51bGwsIEZpZWxkc3R5bGVDU1M6IFwiXCIsIExhYmVsc3R5bGVDU1M6IFwiXCIsIENvbFNwYW5TaXplczogW10gfTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkID0gbmV3IEJhc2VGaWVsZCgpO1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA9IG51bGw7XHJcbiAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGlhbG9nRmllbGRSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nRmllbGQsIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgd2lkdGg6IFwiNzUlXCIsXHJcbiAgICAgIGhlaWdodDogXCI4MCVcIixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoZSBzYWx2YSBpbCBjYW1wbyBhcHBlbmEgY3JlYXRvIG8gbW9kaWZpY2F0by5cclxuICAgKiBQcmltYSBkZWwgc2FsdmF0YWdnaW8gY29udHJvbGxhIHNlIGVzaXN0ZSB1biBhbHRybyBjYW1wbyBjb24gbGEgc3Rlc3NhIGxhYmVsLCBpbiBxdWVzdG9cclxuICAgKiBjYXNlIGdlbmVyZSB1biBlcnJvcmUgKGkgY2FtcGkgZGV2b25vIGF2ZXJlIG5vbWksIGUgcXVpbmRpIGxhYmVsLCB1bml2b2NoZSAtIGkgbm9taSB2ZW5nb25vXHJcbiAgICogcmljYXZhdGkgdW5lbmRvIGxlIHBhcm9sZSBjaGUgZm9ybWFubyBsYSBsYWJlbCB0cmFtaXRlIFwiX1wiKS5cclxuICAgKiBAcGFyYW0gZmllbGQgQ2FtcG8gZGEgc2FsdmFyZVxyXG4gICAqL1xyXG4gIG9uU2F2ZUZpZWxkKGZpZWxkOiBCYXNlRmllbGQpIHtcclxuICAgIGlmIChmaWVsZCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5mb3JtLkZpZWxkcyAmJlxyXG4gICAgICAgIHRoaXMuZm9ybS5GaWVsZHMuZmluZChcclxuICAgICAgICAgIChmLCBpKSA9PlxyXG4gICAgICAgICAgICBmLkxhYmVsID09PSBmaWVsZC5MYWJlbCAmJlxyXG4gICAgICAgICAgICAodGhpcy5pbmRleFNlbGVjdGVkRmllbGQgPT0gbnVsbFxyXG4gICAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICAgIDogdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgIT09IGkpXHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5XYXJuaW5nKFxyXG4gICAgICAgICAgXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgY2FtcGkgY29uIGxvIHN0ZXNzbyBDb2RpY2UuXCJcclxuICAgICAgICApO1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkltcG9zc2liaWxlIGluc2VyaXJlIGR1ZSBjYW1waSBjb24gbG8gc3Rlc3NvIENvZGljZS5cIik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCAhPSBudWxsICYmIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID49IDApIHtcclxuICAgICAgICB0aGlzLmZvcm0uRmllbGRzW3RoaXMuaW5kZXhTZWxlY3RlZEZpZWxkXSA9IGZpZWxkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICghdGhpcy5mb3JtLkZpZWxkcykge1xyXG4gICAgICAgICAgdGhpcy5mb3JtLkZpZWxkcyA9IG5ldyBBcnJheTxCYXNlRmllbGQ+KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZm9ybS5GaWVsZHMucHVzaChmaWVsZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJvblNhdmVGaWVsZFwiLCB0aGlzLmZvcm0pXHJcbiAgICB0aGlzLmNsb3NlRmllbGREaWFsb2coKTtcclxuICAgIHRoaXMuc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgIHRoaXMucmVsb2FkRmllbGRzVGFibGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgY29udHJvbGxhIHNlIGxvIHN0ZXAgcGVyIGwnYWdnaXVudGEgZGVpIGNhbXBpIG5lbGxhIGZvcm0gw6ggY29uY2x1c28uXHJcbiAgICogQHJldHVybnMgU2UgVFJVRSBsbyBzdGVwIHZpZW5lIGNvbnNpZGVyYXRvIGNvbXBsZXRhdG8gZWQgw6ggcG9zc2JpbGUgcGFzc2FyZSBhbCBzdWNjZXNzaXZvLlxyXG4gICAqL1xyXG4gIGlzRmllbGRTdGVwQ29tcGxldGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmZvcm0uRmllbGRzKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5mb3JtLkZvcm1TY2FsYXJUeXBlICE9IEZvcm1TY2FsYXJUeXBlRW51bS5TZW1wbGljZSAmJlxyXG4gICAgICB0aGlzLmZvcm0uRmllbGRzLmZpbmQoKGYpID0+ICFmLkZpZWxkR3JvdXApXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZm9ybS5GaWVsZHMubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgYXByaXJlIGlsIGRpYWxvZyBkaSBjcmVhemlvbmUvbW9kaWZpY2EgZGVsbGUgZm9ybSBkaSBkZXR0YWdsaW8uXHJcbiAgICogU2UgaWwgcGFyYW1ldHJvIHBhc3NhdG8gw6ggbnVsbCBzb25vIGluIGFnZ2l1bnRhIGFsdHJpbWVudGkgc29ubyBpbiBtb2RpZmljYS5cclxuICAgKiBAcGFyYW0gaW5uZW5yRm9ybSBGb3JtIGRpIGRldHRhZ2xpbyBkYSBtb2RpZmljYXJlIChzZSBudWxsIGFsbG9yYSB2YWRvIGluIGFkZCkuXHJcbiAgICovXHJcbiAgb3BlbklubmVyRm9ybURpYWxvZyhpbm5lbnJGb3JtOiBGb3JtID0gbnVsbCkge1xyXG4gICAgdGhpcy5pbm5lckZvcm1Db25maWcgPSBuZXcgRHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbmZpZygpO1xyXG4gICAgdGhpcy5pbm5lckZvcm1Db25maWcuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmlubmVyRm9ybU1hbmFnbWVudCA9XHJcbiAgICAgIHRydWU7XHJcbiAgICAvLyB0aGlzLmlubmVyRm9ybUNvbmZpZy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuZm9ybVxyXG4gICAgLy8gdGhpcy5pbm5lckZvcm1Db25maWcuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmZvcm0uT2xkTmFtZVxyXG4gICAgLy8gdGhpcy5pbm5lckZvcm1Db25maWcuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmlubmVyRm9ybVJlZlxyXG4gICAgLy8gW2Zvcm1dPVwic2VsZWN0ZWRJbm5lckZvcm1cIlxyXG4gICAgLy8gW2lubmVyRm9ybU1hbmFnbWVudF09XCJ0cnVlXCJcclxuICAgIC8vIFtpbm5lckZvcm1SZWZdPVwiZGlhbG9nSW5uZXJGb3JtUmVmXCJcclxuXHJcbiAgICBpZiAoaW5uZW5yRm9ybSkge1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRJbm5lckZvcm0gPSB0aGlzLmZvcm0uSW5uZXJGb3Jtcy5pbmRleE9mKGlubmVuckZvcm0pO1xyXG5cclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZElubmVyRm9ybSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaW5uZW5yRm9ybSkpO1xyXG4gICAgICAvLyB0aGlzLnNlbGVjdGVkSW5uZXJGb3JtLk9sZE5hbWUgPSBpbm5lbnJGb3JtLk5hbWU7XHJcbiAgICAgIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5mb3JtID1cclxuICAgICAgICBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGlubmVuckZvcm0pKTtcclxuICAgICAgdGhpcy5pbm5lckZvcm1Db25maWcuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmZvcm0uT2xkTmFtZSA9XHJcbiAgICAgICAgaW5uZW5yRm9ybS5OYW1lO1xyXG5cclxuICAgICAgdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgPSB0aGlzLmZvcm0uRmllbGRzLmZpbmRJbmRleChcclxuICAgICAgICAoZikgPT4gZi5MYWJlbCA9PT0gaW5uZW5yRm9ybS5OYW1lXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyB0aGlzLnNlbGVjdGVkSW5uZXJGb3JtID0gbmV3IEZvcm0oKTtcclxuICAgICAgdGhpcy5pbm5lckZvcm1Db25maWcuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmZvcm0gPVxyXG4gICAgICAgIG5ldyBGb3JtKCk7XHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZElubmVyRm9ybSA9IG51bGw7XHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID0gbnVsbDtcclxuICAgIH1cclxuICAgIC8vIHRoaXMuZGlhbG9nSW5uZXJGb3JtUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0lubmVyRm9ybSwge1xyXG5cclxuICAgIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5pbm5lckZvcm1SZWYgPVxyXG4gICAgICB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nSW5uZXJGb3JtLCB7XHJcbiAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICAgIHdpZHRoOiBcIjg1JVwiLFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBzY2F0ZW5hdG8gYWwgc2FsdmF0YWdnaW8gZGkgdW5hIGZvcm0gZGkgZGV0dGFnbGlvLlxyXG4gICAqIEBwYXJhbSBldmVudCBGb3JtIGNyZWF0YS9tb2RpZmljYXRhIGRhbGwndXRlbnRlLiBTZSDDqCBudWxsIGFsbG9yYSBsJ3V0ZW50ZSBoYSBhYmJhbmRvbmF0byBsYSBjb25maWd1cmF6aW9uZS5cclxuICAgKi9cclxuICBvblNhdmVPckV4aXRJbm5lckZvcm0oZXZlbnQ6IEZvcm0pIHtcclxuICAgIGlmIChldmVudCAhPSBudWxsKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmZvcm0uTmFtZSA9PT0gZXZlbnQuTmFtZSB8fFxyXG4gICAgICAgICh0aGlzLmZvcm0uSW5uZXJGb3JtcyAmJlxyXG4gICAgICAgICAgdGhpcy5mb3JtLklubmVyRm9ybXMuZmluZChcclxuICAgICAgICAgICAgKGEsIGkpID0+XHJcbiAgICAgICAgICAgICAgYS5OYW1lID09PSBldmVudC5OYW1lICYmXHJcbiAgICAgICAgICAgICAgKHRoaXMuaW5kZXhTZWxlY3RlZElubmVyRm9ybSA9PSBudWxsXHJcbiAgICAgICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgICAgIDogdGhpcy5pbmRleFNlbGVjdGVkSW5uZXJGb3JtICE9PSBpKVxyXG4gICAgICAgICAgKSkgfHxcclxuICAgICAgICAodGhpcy5mb3JtLkZpZWxkcyAmJlxyXG4gICAgICAgICAgdGhpcy5pbmRleFNlbGVjdGVkSW5uZXJGb3JtID09IG51bGwgJiZcclxuICAgICAgICAgIHRoaXMuZm9ybS5GaWVsZHMuZmluZChcclxuICAgICAgICAgICAgKGYsIGkpID0+XHJcbiAgICAgICAgICAgICAgZi5MYWJlbCA9PT0gZXZlbnQuTmFtZSAmJlxyXG4gICAgICAgICAgICAgICh0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA9PSBudWxsXHJcbiAgICAgICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgICAgIDogdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgIT09IGkpXHJcbiAgICAgICAgICApKVxyXG4gICAgICApIHtcclxuICAgICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5XYXJuaW5nKFxyXG4gICAgICAgICAgXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgZm9ybSBkaSBkZXR0YWdsaW8gY29uIGxvIHN0ZXNzbyBub21lLlwiXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICBcIkltcG9zc2liaWxlIGluc2VyaXJlIGR1ZSBmb3JtIGRpIGRldHRhZ2xpbyBjb24gbG8gc3Rlc3NvIG5vbWUuXCJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBpbm5lckZvcm1GaWVsZDogQmFzZUZpZWxkID0gbmV3IEJhc2VGaWVsZCgpO1xyXG4gICAgICBpbm5lckZvcm1GaWVsZC5OYW1lID0gZXZlbnQuTmFtZS5zcGxpdChcIiBcIikuam9pbihcIl9cIik7XHJcbiAgICAgIGlubmVyRm9ybUZpZWxkLkxhYmVsID0gZXZlbnQuTmFtZTtcclxuICAgICAgaW5uZXJGb3JtRmllbGQuRmllbGRUeXBlID0gRmllbGRUeXBlRW51bVtcIkZvcm0gZGkgZGV0dGFnbGlvXCJdO1xyXG4gICAgICBpbm5lckZvcm1GaWVsZC5GaWVsZEdyb3VwID1cclxuICAgICAgICB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCAhPSBudWxsXHJcbiAgICAgICAgICA/IHRoaXMuZm9ybS5GaWVsZHNbdGhpcy5pbmRleFNlbGVjdGVkRmllbGRdLkZpZWxkR3JvdXBcclxuICAgICAgICAgIDogbnVsbDtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmluZGV4U2VsZWN0ZWRJbm5lckZvcm0gIT0gbnVsbCAmJlxyXG4gICAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZElubmVyRm9ybSA+PSAwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5Jbm5lckZvcm1zW3RoaXMuaW5kZXhTZWxlY3RlZElubmVyRm9ybV0gPSBldmVudDtcclxuICAgICAgICB0aGlzLmZvcm0uRmllbGRzW3RoaXMuaW5kZXhTZWxlY3RlZEZpZWxkXSA9IGlubmVyRm9ybUZpZWxkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICghdGhpcy5mb3JtLklubmVyRm9ybXMpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5Jbm5lckZvcm1zID0gbmV3IEFycmF5PEZvcm0+KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZm9ybS5Jbm5lckZvcm1zLnB1c2goZXZlbnQpO1xyXG4gICAgICAgIHRoaXMuZm9ybS5GaWVsZHMucHVzaChpbm5lckZvcm1GaWVsZCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZWxvYWRGaWVsZHNUYWJsZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kaWFsb2dJbm5lckZvcm1SZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgYXByaXJlIGlsIGRpYWxvZyBkaSBjcmVhemlvbmUvbW9kaWZpY2EgZGVsbGUgYWN0aW9uLlxyXG4gICAqIFNlIGlsIHBhcmFtZXRybyBwYXNzYXRvIMOoIG51bGwgc29ubyBpbiBhZ2dpdW50YSBhbHRyaW1lbnRpIHNvbm8gaW4gbW9kaWZpY2EuXHJcbiAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb25PblJlY29yZCBkYSBtb2RpZmljYXJlIChzZSBudWxsIGFsbG9yYSB2YWRvIGluIGFkZCkuXHJcbiAgICovXHJcbiAgb3BlbkFjdGlvbk9uUmVjb3JkRGlhbG9nKGFjdGlvbjogQWN0aW9uT25SZWNvcmQgPSBudWxsKSB7XHJcbiAgICBpZiAoYWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiA9IHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQuaW5kZXhPZihhY3Rpb24pO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQWN0aW9uID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhY3Rpb24pKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb24gPSBuZXcgQWN0aW9uT25SZWNvcmQoKTtcclxuICAgICAgdGhpcy5pbmRleFNlbGVjdGVkQWN0aW9uID0gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMuY3JlYXRlQWN0aW9uT25SZWNvcmRGb3JtKCk7XHJcbiAgICB0aGlzLmRpYWxvZ0FjdGlvbk9uUmVjb3JkUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0FjdGlvbk9uUmVjb3JkLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBcIjc1JVwiLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGFwcmlyZSBpbCBkaWFsb2cgZGkgY3JlYXppb25lL21vZGlmaWNhIGRlaSBib3R0b25pIGF6aW9uZS5cclxuICAgKiBTZSBpbCBwYXJhbWV0cm8gcGFzc2F0byDDqCBudWxsIHNvbm8gaW4gYWdnaXVudGEgYWx0cmltZW50aSBzb25vIGluIG1vZGlmaWNhLlxyXG4gICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uQnV0dG9uIGRhIG1vZGlmaWNhcmUgKHNlIG51bGwgYWxsb3JhIHZhZG8gaW4gYWRkKS5cclxuICAgKi9cclxuICBvcGVuQWN0aW9uQnV0dG9uRGlhbG9nKGV2OiBBY3Rpb25CdXR0b24gPSBudWxsKSB7XHJcblxyXG4gICAgaWYgKGV2ICE9IG51bGwpe1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQWN0aW9uQnV0dG9uID0gZXY7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQWN0aW9uQnV0dG9uID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRpYWxvZ0FjdGlvbkJ1dHRvblJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dBY3Rpb25CdXR0b24sIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgd2lkdGg6IFwiNzUlXCIsXHJcbiAgICB9KTtcclxuICB9ICBcclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBpbXBvc3RhcmUgaSB2YWxvcmkgZGEgc3VnZ2VyaXJlIG5lbGwnYXV0b2NvbXBsZXRlIGRlbCBjYW1wbyBGb3JtdWxhLlxyXG4gICAqIFZpZW5lIHNjYXRlbmF0byBhbCBmb2N1cyAoaW4gcXVlc3RvIGNhc28gdmllbmUgcGFzc2F0byBpbCBwYXJhbWV0cm8gYSBudWxsIHBlciBkaWZmZXJlbnppYXJsb1xyXG4gICAqIGRhbGwnZXZlbnRvIGRpIGNsaWNrIHN1bGxhIHRhc3RpZXJhKSBlIGFsIGtleXVwIHN1bGwnaW5wdXQgKGlsIHBhcmFtZXRybyDDqCBkaXZlcnNvIGRhIG51bGwpLlxyXG4gICAqIEBwYXJhbSBrZXlib2FyZEV2ZW50IEV2ZW50byBzY2F0ZW5hdG8gYWwga2V5dXAgc3VsbGEgdGFzdGllcmEuIFNlIG51bGwgYWxsb3JhIGlsIG1ldG9kbyDDqCBzdGF0byBpbnZvY2F0byBkYWwgZm9jdXMgc3VsbCdpbnB1dC5cclxuICAgKiBAc3VtbWFyeSBBZ2dpb3JuYSBsJ2VsZW5jbyBkZWkgc3VnZ2VyaW1lbnRpIHBlciBsJ2F1dG9jb21wbGV0ZSBzZSBsJ3V0ZW50ZSBlc2VndWUgaWwgZm9jdXMgc3VsbCdpbnB1dFxyXG4gICAqIG9wcHVyZSBhbCBrZXl1cCBzdWxsYSB0YXN0aWVyYSBkaSB1biB0YXN0byBkaXZlcnNvIGRhbGxlIGZyZWNjZS5cclxuICAgKi9cclxuICBzZXRBY3Rpb25BdXRvY29tcGxldGVPcHRpb25zKGtleWJvYXJkRXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIC8vIENyZW8gbCdhcnJheSBwZXIgbCdhdXRvY29tcGxldGUgc29sbyBzZSBzdG8gZmFjZW5kbyBpbCBmb2N1cyBzdWxsJ2lucHV0IG8gc2Ugc3RvIHByZW1lbmRvIHVuIHRhc3RvXHJcbiAgICAvLyBzdWxsYSB0YXN0aWVyYSBkaXZlcnNvIGRhbGxlIGZyZWNjZSAoaW4gcXVlc3QndWx0aW1vIGNhc28sIHNlIG5vbiB2aWVuZSBlc2VndWl0byBpbCBmaWx0cm8gc3VsbCdldmVudG8sXHJcbiAgICAvLyBub24gc2kgcHXDsiBzZWxlemlvbmFyZSB1biBzdWdnZXJpbWVudG8gZGVsbCdhdXRvY29tcGxldGUgcGVyY2jDqCBhbCBjbGljayB2ZXJyZWJiZSByaWNhcmljYXRvIGwnYXJyYXkgZVxyXG4gICAgLy8gc2kgcHJlZGVyZWJiZSBsYSBzZWxlemlvbmUgYXBwZW5hIGZhdHRhKS5cclxuICAgIGlmICgha2V5Ym9hcmRFdmVudCB8fCAha2V5Ym9hcmRFdmVudC5jb2RlLmluY2x1ZGVzKFwiQXJyb3dcIikpIHtcclxuICAgICAgdGhpcy5hY3Rpb25BdXRvY29tcGxldGVPcHRpb25zID1cclxuICAgICAgICBVdGlsaXR5SGVscGVyU2VydmljZS5HZXRBdXRvY29tcGxldGVPcHRpb25zKFxyXG4gICAgICAgICAgdGhpcy5mb3JtLkZpZWxkcyxcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb24uQWN0aW9uXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGwnYXppb25lIGNyZWF0YS9tb2RpZmljYXRlLlxyXG4gICAqL1xyXG4gIHNhdmVBY3Rpb25PblJlY29yZCgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZCAmJlxyXG4gICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmZpbmQoXHJcbiAgICAgICAgKGEsIGkpID0+XHJcbiAgICAgICAgICBhLk5hbWUgPT09IHRoaXMuc2VsZWN0ZWRBY3Rpb24uTmFtZSAmJlxyXG4gICAgICAgICAgKHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiA9PSBudWxsXHJcbiAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICA6IHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiAhPT0gaSlcclxuICAgICAgKVxyXG4gICAgKSB7XHJcbiAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLldhcm5pbmcoXHJcbiAgICAgICAgXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgYWN0aW9uIGNvbiBsbyBzdGVzc28gbm9tZS5cIlxyXG4gICAgICApO1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgYWN0aW9uIGNvbiBsbyBzdGVzc28gbm9tZS5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiAhPSBudWxsICYmIHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiA+PSAwKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmRbdGhpcy5pbmRleFNlbGVjdGVkQWN0aW9uXSA9IHRoaXMuc2VsZWN0ZWRBY3Rpb247XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoIXRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQpIHtcclxuICAgICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkID0gbmV3IEFycmF5PEFjdGlvbk9uUmVjb3JkPigpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQucHVzaCh0aGlzLnNlbGVjdGVkQWN0aW9uKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2xvc2VEaWFsb2dBY3Rpb25PblJlY29yZCgpO1xyXG4gICAgdGhpcy5zZXRBY3Rpb25PcmRpbmFsUG9zaXRpb24oKTtcclxuICAgIHRoaXMucmVsb2FkQWN0aW9uc09uUmVjb3JkVGFibGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgc2FsdmFyZSBsJ2F6aW9uZSBjcmVhdGEvbW9kaWZpY2F0ZS5cclxuICAgKi9cclxuICBzYXZlQWN0aW9uQnV0dG9ucyhlbGVtZW50OiBBY3Rpb25CdXR0b24pe1xyXG4gICAgXHJcbiAgICBpZiAoZWxlbWVudCAhPSBudWxsKXtcclxuICAgICAgaWYgKHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zICE9IG51bGwpe1xyXG4gICAgICAgIHZhciBleGlzdHNBY3Rpb25CdXR0b25zID0gdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMuZmluZCh4ID0+IHguQnV0dG9uQ29kZSA9PSBlbGVtZW50LkJ1dHRvbkNvZGUpO1xyXG4gICAgICAgIGlmIChleGlzdHNBY3Rpb25CdXR0b25zID09IG51bGwpe1xyXG4gICAgICAgICAgLy8gTnVvdm8gdHJpZ2dlclxyXG4gICAgICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMucHVzaChlbGVtZW50KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZXhpc3RzQWN0aW9uQnV0dG9ucyA9IGVsZW1lbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zID0gbmV3IEFycmF5PEFjdGlvbkJ1dHRvbj4oKTtcclxuICAgICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYWN0aW9uQnV0dG9uc1RhYmxlLnJlbG9hZERhdGF0YWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGlhbG9nQWN0aW9uQnV0dG9uUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNoaXVkZXJlIGlsIGRpYWxvZyBkZWxsYSBpbm5lciBmb3JtLlxyXG4gICAqL1xyXG4gIGNsb3NlRGlhbG9nSW5uZXJGb3JtKCkge1xyXG4gICAgdGhpcy5pbm5lckZvcm1SZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY2hpdWRlcmUgaWwgZGlhbG9nIGRpIGdlc3Rpb25lIGRlbGxlIGFjdGlvbi5cclxuICAgKi9cclxuICBjbG9zZURpYWxvZ0FjdGlvbk9uUmVjb3JkKCkge1xyXG4gICAgdGhpcy5kaWFsb2dBY3Rpb25PblJlY29yZFJlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjaGl1ZGVyZSBpbCBkaWFsb2cgZGkgZ2VzdGlvbmUgZGVsbGUgYWN0aW9uIGJ1dHRvbnMuXHJcbiAgICovXHJcbiAgY2xvc2VEaWFsb2dBY3Rpb25CdXR0b25zKCkge1xyXG4gICAgdGhpcy5kaWFsb2dBY3Rpb25CdXR0b25SZWYuY2xvc2UoKTtcclxuICB9ICBcclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzZWduYXJlIGNvbWUgY29uY2x1c2EgbGEgY3JlYXppb25lIGRlbGxhIGZvcm0gZSBwZXIgY3JlYXJuZSB1bmEgY29waWFcclxuICAgKiBkYSB2aXNhbGl6emFyZSBjb21lIGFudGVwcmltYS5cclxuICAgKiBAcGFyYW0gY29tcGxldGVkIFNlIFRSVUUgc2VnbmEgbGEgZm9ybSBjb21lIGNvbmNsdXNhIGUgbmUgY3JlYSB1bmEgY29waWEgZGEgdmlzdWFsaXp6YXJlXHJcbiAgICovXHJcbiAgc2V0Rm9ybVN0YXR1cyhjb21wbGV0ZWQ6IGJvb2xlYW4pIHtcclxuICAgIGlmIChjb21wbGV0ZWQpIHtcclxuICAgICAgdGhpcy5mb3JtQ29tcGxldGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5wcmV2aWV3Rm9ybSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5mb3JtKSk7XHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJwcmV2aWV3Rm9ybVwiLCB0aGlzLnByZXZpZXdGb3JtKVxyXG5cclxuICAgICAgLy8gUGVyIHZpc3VhbGl6emFyZSBjb3JyZXR0YW1lbnRlIGwnb2FudGVwcmltYSBkZWxsYSBmb3JtIGFwcGVuYSBjcmVhdGFcclxuICAgICAgLy8gYmlzb2duYSB2YWxvcml6emFyZSBsYSBwcm9wcmlldMOgIE5hbWUgZGVpIGNhbXBpIGRlbGxhIGZvcm0gZSBkZWxsZSBJbm5lckZvcm1zLlxyXG4gICAgICB0aGlzLnByZXZpZXdGb3JtLkZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgIGZpZWxkLk5hbWUgPSBmaWVsZC5MYWJlbC5zcGxpdChcIiBcIikuam9pbihcIl9cIik7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5wcmV2aWV3Rm9ybS5Jbm5lckZvcm1zICYmXHJcbiAgICAgICAgdGhpcy5wcmV2aWV3Rm9ybS5Jbm5lckZvcm1zLmxlbmd0aCA+IDBcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5wcmV2aWV3Rm9ybS5Jbm5lckZvcm1zLmZvckVhY2goKGZvcm0pID0+IHtcclxuICAgICAgICAgIGZvcm0uRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgICAgIGZpZWxkLk5hbWUgPSBmaWVsZC5MYWJlbC5zcGxpdChcIiBcIikuam9pbihcIl9cIik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtQ29tcGxldGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucHJldmlld0Zvcm0gPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGxhIGZvcm0gY3JlYXRhIGFsbGEgZmluZSBkZWwgd2l6YXJkLlxyXG4gICAqIFNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIHVuIGVuZFBvaW50IHBlciBpbCBzYWx2YXRhZ2dpbyB2aWVuZSBlZmZldHR1YXRhIHVuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIgcGFzc2FuZG8gbCdvZ2dldG8gZGEgc2FsdmFyZVxyXG4gICAqIG5lbCBib2R5IGRlbGxhIGNoaWFtYXRhLCBhbHRyaW1lbnRpIHNjYXRlbmEgbCdldmVudG8gXCJzYXZlRm9ybUV2ZW50XCIuXHJcbiAgICovXHJcbiAgc2F2ZUZvcm0oKSB7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAhPSBudWxsICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLlNhdmVFbmRQb2ludFxyXG4gICAgKSB7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuc2F2ZWQpe1xyXG4gICAgICAgIHRoaXMuYmFja3VwRm9ybSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5mb3JtKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5mb3JtID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmJhY2t1cEZvcm0pKTtcclxuICAgICAgfVxyXG4gICAgICBcclxuXHJcbiAgICAgIC8vIFBlciBmYXIgYXJyaXZhcmUgYWwgc2VydmVyIGwnYXJyYXkgZGkgRmllbGQgYmlzb2duYSBwYXNzYXJsaSBzdSBBbnlcclxuICAgICAgdGhpcy5mb3JtLk9iamVjdEZpZWxkcyA9IFtdO1xyXG4gICAgICB0aGlzLmZvcm0uT2JqZWN0RmxkRXh0cmFDb25maWdWYWx1ZXMgPSBbXTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmZvcm0uRmxkRXh0cmFDb25maWdWYWx1ZXMgIT0gbnVsbCl7XHJcbiAgICAgICAgdGhpcy5mb3JtLk9iamVjdEZsZEV4dHJhQ29uZmlnVmFsdWVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmZvcm0uRmxkRXh0cmFDb25maWdWYWx1ZXMpKTtcclxuICAgICAgfSBcclxuXHJcbiAgICAgIHRoaXMuZm9ybS5GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuXHJcbiAgICAgICAgLy8gVHJhc2Zvcm1vIGlsIGRhdGFnZXR0ZXIgaW4gQmFzZTY0XHJcbiAgICAgICAgZmllbGQuRGF0YUdldHRlclZhbHVlQmFzZTY0U3RyaW5nID0gYnRvYShKU09OLnN0cmluZ2lmeShmaWVsZC5EYXRhR2V0dGVyKSk7XHJcbiAgICAgICAgZmllbGQuRGF0YUdldHRlciA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmIChmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bS5BbGxlZ2F0bykge1xyXG4gICAgICAgICAgY29uc3QgZmxkQTogYW55ID0gZmllbGQ7XHJcbiAgICAgICAgICBmbGRBLk1ldGFkYXRhT2JqZWN0RmllbGRzID0gZmxkQS5NZXRhZGF0YUZpZWxkcztcclxuICAgICAgICAgIGZsZEEuTWV0YWRhdGFGaWVsZHMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuZm9ybS5PYmplY3RGaWVsZHMucHVzaChmbGRBKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gbnVtZXJpY29cIl0pIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICg8TnVtZXJpY0ZpZWxkPmZpZWxkKS5NYXhWYWx1ZSA9PSB1bmRlZmluZWQgfHxcclxuICAgICAgICAgICAgICAoPE51bWVyaWNGaWVsZD5maWVsZCkuTWF4VmFsdWUgPT0gbnVsbFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAoPE51bWVyaWNGaWVsZD5maWVsZCkuTWF4VmFsdWUgPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgKDxOdW1lcmljRmllbGQ+ZmllbGQpLk1pblZhbHVlID09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgICAgICAgICg8TnVtZXJpY0ZpZWxkPmZpZWxkKS5NaW5WYWx1ZSA9PSBudWxsXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICg8TnVtZXJpY0ZpZWxkPmZpZWxkKS5NaW5WYWx1ZSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZm9ybS5PYmplY3RGaWVsZHMucHVzaChmaWVsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5mb3JtLlByb2plY3ROYW1lID0gdGhpcy5Qcm9qZWN0TmFtZTtcclxuICAgICAgdGhpcy5mb3JtLkZpZWxkcyA9IG51bGw7XHJcbiAgICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuICAgICAgaWYgKHRoaXMuZm9ybS5DcmVhdGlvbkRhdGUgPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5DcmVhdGlvbkRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuZm9ybS5DcmVhdGlvblVzZXIgPSB0aGlzLlVzZXJJRDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZvcm0uTW9kaWZ5VXNlciA9IHRoaXMuVXNlcklEO1xyXG5cclxuICAgICAgdGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzID0gSlNPTi5zdHJpbmdpZnkodGhpcy5mb3JtLlRyaWdnZXJzKTtcclxuICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gbnVsbDtcclxuXHJcbiAgICAgIHRoaXMuZm9ybS5PYmplY3RBY3Rpb25CdXR0b25zID0gSlNPTi5zdHJpbmdpZnkodGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMpO1xyXG4gICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucyA9IG51bGw7XHJcblxyXG5cclxuXHJcbiAgICAgIC8vIGNoaWFtYXRhIGVmZmV0dGl2YVxyXG4gICAgICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFBhcmFtTmFtZTogXCJGb3JtXCIsXHJcbiAgICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm0sXHJcbiAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJJbiBCb2R5XCJdLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF07XHJcblxyXG4gICAgICB0aGlzLnNhdmVkID0gdHJ1ZTtcclxuXHJcblxyXG5cclxuICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuU2F2ZUVuZFBvaW50LFxyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgKHJlcykgPT4ge1xyXG4gICAgICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuU3VjY2VzcyhcIkZvcm0gc2FsdmF0YSBjb24gc3VjY2Vzc28hXCIpO1xyXG4gICAgICAgICAgdGhpcy5hZnRlclNhdmVGb3JtRXZlbnQuZW1pdCh0aGlzLmZvcm0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5FcnJvcihcIkVycm9yZSBuZWwgc2FsdmF0YWdnaW8gZGVsbGEgZm9ybVwiKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3JlIG5lbCBzYWx2YXRhZ2dpbyBkZWxsYSBmb3JtXCIsZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2F2ZUZvcm1FdmVudC5lbWl0KHRoaXMuZm9ybSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gRlVOWklPTkkgUFJJVkFURVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGltcG9zdGFyZSBsYSBmb3JtIGUgY29uZmlndXJhcmUgY29sb25uZS9Gb3JtR291cnAuXHJcbiAgICogQHBhcmFtIGZvcm0gRm9ybSBkYSB1dGlsaXp6YXJlLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0Rm9ybUFuZENvbmZpZ3VyZShmb3JtOiBGb3JtID0gbnVsbCkge1xyXG4gICAgXHJcbiAgICBpZiAoZm9ybSAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuZm9ybSA9IGZvcm07XHJcbiAgICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuICAgICAgaWYgKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBudWxsICYmIHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBcIlwiKXtcclxuICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBKU09OLnBhcnNlKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2Vycyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gbmV3IEFycmF5PFRyaWdnZXI+KCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmZvcm0uT2JqZWN0QWN0aW9uQnV0dG9ucyAhPSBudWxsICYmIHRoaXMuZm9ybS5PYmplY3RBY3Rpb25CdXR0b25zICE9IFwiXCIpe1xyXG4gICAgICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zID0gSlNPTi5wYXJzZSh0aGlzLmZvcm0uT2JqZWN0QWN0aW9uQnV0dG9ucyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMgPSBuZXcgQXJyYXk8QWN0aW9uQnV0dG9uPigpO1xyXG4gICAgICB9ICAgICAgXHJcbiAgICAgIFxyXG4gICAgICBpZiAodHlwZW9mIHRoaXMuZm9ybS5GaWVsZHMgIT0gXCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgdGhpcy5mb3JtLkZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG5cclxuICAgICAgICAvLyBUcmFzZm9ybW8gaWwgQmFzZTY0U3RyaW5nIGRlbCBEYXRhZ2V0dGVyIG5lbCBEYXRhZ2V0dGVyIHZlcm8gZSBwcm9wcmlvXHJcbiAgICAgICAgaWYgKGZpZWxkLkRhdGFHZXR0ZXJWYWx1ZUJhc2U2NFN0cmluZyAhPSBudWxsKXtcclxuICAgICAgICAgIGZpZWxkLkRhdGFHZXR0ZXIgPSBKU09OLnBhcnNlKGF0b2IoZmllbGQuRGF0YUdldHRlclZhbHVlQmFzZTY0U3RyaW5nKSk7XHJcbiAgICAgICAgICBmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID0gZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBudWxsID8gRGF0YUdldHRlclR5cGVFbnVtLk1hbnVhbGUgOiBmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlOyAgICAgICAgICBcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZmllbGQuRGF0YUdldHRlciA9IG5ldyBEYXRhR2V0dGVyKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmaWVsZC5EYXRhR2V0dGVyVmFsdWVCYXNlNjRTdHJpbmcgPSBudWxsO1xyXG5cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5jb25maWd1cmVDb2x1bW5zKCk7XHJcbiAgICB0aGlzLmNyZWF0ZUZvcm1Gb3JtKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb25maWd1cmEgbGUgY29sb25uZSBwZXIgbGUgdGFiZWxsZSBuZWNlc3NhcmllIGFsbGEgY3JlYXppb25lIGRlbGxhIGZvcm06XHJcbiAgICogIC0gcGVyIGxhIHZpc3VhbGl6emF6aW9uZSBkZWkgY2FtcGkgaW5zZXJpdGlcclxuICAgKiAgLSBwZXIgbGUgZm9ybSBkaSBkZXR0YWdsaW8gY3JlYXRlXHJcbiAgICogIC0gcGVyIGxlIGF6aW9uaSBjb25maWd1cmF0ZSBzdWkgcmVjb3JkIGRlbGxhIGZvcm1cclxuICAgKi9cclxuXHJcbiAgXHJcbiAgXHJcblxyXG4gIHByaXZhdGUgY29uZmlndXJlQ29sdW1ucygpIHtcclxuICAgIHRoaXMuZmllbGRzQ29sdW1ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJhY3Rpb25cIixcclxuICAgICAgICBkaXNwbGF5OiBcIlwiLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uTWVudUFjdGlvbixcclxuICAgICAgICBidXR0b25NZW51SWNvbjogXCJtb3JlX3ZlcnRcIixcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgNHJlbVwiIH0sXHJcbiAgICAgICAgYWN0aW9uczogW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk1vZGlmaWNhXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZWRpdFwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMuZWRpdEZpZWxkKGVsZW1lbnQpLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJEdXBsaWNhXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZmlsZV9jb3B5XCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy5kdXBsaWNhdGVGaWVsZChlbGVtZW50KSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiRWxpbWluYVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImRlbGV0ZVwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMuZGVsZXRlRWxlbWVudChlbGVtZW50LCBcIkZpZWxkc1wiKSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAvLyB7XHJcbiAgICAgICAgICAvLyAgIG5hbWU6IFwiU3Bvc3RhIHN1XCIsXHJcbiAgICAgICAgICAvLyAgIGljb246IFwiYXJyb3dfdXB3YXJkXCIsXHJcbiAgICAgICAgICAvLyAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT5cclxuICAgICAgICAgIC8vICAgICB0aGlzLm1vdmVFbGVtZW50KGVsZW1lbnQsIHRydWUsIFwiRmllbGRzXCIpLFxyXG4gICAgICAgICAgLy8gICBkaXNhYmxlZDogKGVsZW1lbnQpID0+IHRoaXMuZm9ybS5GaWVsZHMuaW5kZXhPZihlbGVtZW50KSA9PT0gMCxcclxuICAgICAgICAgIC8vIH0sXHJcbiAgICAgICAgICAvLyB7XHJcbiAgICAgICAgICAvLyAgIG5hbWU6IFwiU3Bvc3RhIGdpw7lcIixcclxuICAgICAgICAgIC8vICAgaWNvbjogXCJhcnJvd19kb3dud2FyZFwiLFxyXG4gICAgICAgICAgLy8gICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+XHJcbiAgICAgICAgICAvLyAgICAgdGhpcy5tb3ZlRWxlbWVudChlbGVtZW50LCBmYWxzZSwgXCJGaWVsZHNcIiksXHJcbiAgICAgICAgICAvLyAgIGRpc2FibGVkOiAoZWxlbWVudCkgPT5cclxuICAgICAgICAgIC8vICAgICB0aGlzLmZvcm0uRmllbGRzLmluZGV4T2YoZWxlbWVudCkgPj0gdGhpcy5mb3JtLkZpZWxkcy5sZW5ndGggLSAxLFxyXG4gICAgICAgICAgLy8gfSxcclxuICAgICAgICBdLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIkZpZWxkVHlwZVwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiVGlwb2xvZ2lhXCIsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5FbnVtLFxyXG4gICAgICAgIGVudW1Nb2RlbDogRmllbGRUeXBlRW51bSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMTJyZW1cIiB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7IGtleTogXCJMYWJlbFwiLCBkaXNwbGF5OiBcIkxhYmVsXCIsIHN0eWxlczogeyBmbGV4OiBcIjAgMCA4cmVtXCIgfSB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIkRlc2NyaXB0aW9uXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJEZXNjcml6aW9uZVwiLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCAxMnJlbVwiIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZVwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiVGlwbyBSZWN1cGVybyBEYXRpXCIsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5FbnVtLFxyXG4gICAgICAgIGVudW1Nb2RlbDogRGF0YUdldHRlclR5cGVFbnVtLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCAxMnJlbVwiIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiUmVxdWlyZWRcIixcclxuICAgICAgICBkaXNwbGF5OiBcIk9iYmxpZ2F0b3Jpb1wiLFxyXG4gICAgICAgIHZhbHVlOiAoZWxlbWVudCkgPT4gZWxlbWVudC5SZXF1aXJlZCxcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLkJvb2xlYW4sXHJcbiAgICAgICAgYm9vbGVhblZhbHVlczoge1xyXG4gICAgICAgICAgdHJ1ZTogJzxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgc3VjY2Vzcy1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgICAgZmFsc2U6ICc8aSBjbGFzcz1cImZhIGZhLWNsb3NlIGVycm9yLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgNXJlbVwiLCBjZWxsQWxpZ25tZW50OiBDZWxsQWxpZ25tZW50RW51bS5DRU5URVIgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJGb3JtdWxhXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJDYWxjb2xhdG9cIixcclxuICAgICAgICB2YWx1ZTogKGVsZW1lbnQpID0+IGVsZW1lbnQuRm9ybXVsYSAhPSBudWxsICYmIGVsZW1lbnQuRm9ybXVsYSAhPSAnJyxcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLkJvb2xlYW4sXHJcbiAgICAgICAgYm9vbGVhblZhbHVlczoge1xyXG4gICAgICAgICAgdHJ1ZTogJzxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgc3VjY2Vzcy1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgICAgZmFsc2U6ICc8aSBjbGFzcz1cImZhIGZhLWNsb3NlIGVycm9yLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgNXJlbVwiLCBjZWxsQWxpZ25tZW50OiBDZWxsQWxpZ25tZW50RW51bS5DRU5URVIgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJJbkxpc3RWaWV3XCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJWaXNpYmlsZSBpbiBDb21waWxhemlvbmVcIixcclxuICAgICAgICB2YWx1ZTogKGVsZW1lbnQpID0+IGVsZW1lbnQuSW5MaXN0VmlldyxcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLkJvb2xlYW4sXHJcbiAgICAgICAgYm9vbGVhblZhbHVlczoge1xyXG4gICAgICAgICAgdHJ1ZTogJzxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgc3VjY2Vzcy1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgICAgZmFsc2U6ICc8aSBjbGFzcz1cImZhIGZhLWNsb3NlIGVycm9yLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgN3JlbVwiLCBjZWxsQWxpZ25tZW50OiBDZWxsQWxpZ25tZW50RW51bS5DRU5URVIgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJJbnZpc2liaWxpdHlcIixcclxuICAgICAgICBkaXNwbGF5OiBcIk9jY3VwYSBzcGF6aW8/XCIsXHJcbiAgICAgICAgdmFsdWU6IChlbGVtZW50KSA9PiBlbGVtZW50LkluTGlzdFZpZXcgfHwgZWxlbWVudC5JbnZpc2liaWxpdHkgPT0gRmllbGRJbnZpc2liaWxpdHlFbnVtW1wiTkFTQ09TVE8gQ09OIEFSRUEgVklTSUJJTEVcIl0sXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5Cb29sZWFuLFxyXG4gICAgICAgIGJvb2xlYW5WYWx1ZXM6IHtcclxuICAgICAgICAgIHRydWU6ICc8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHN1Y2Nlc3MtY29sb3JcIj48L2k+JyxcclxuICAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS1jbG9zZSBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDdyZW1cIiwgY2VsbEFsaWdubWVudDogQ2VsbEFsaWdubWVudEVudW0uQ0VOVEVSIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiVmlzaWJsZUlmXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJWaXNpYmlsaXTDoCBjb25kaXppb25hdGFcIixcclxuICAgICAgICB2YWx1ZTogKGVsZW1lbnQpID0+IGVsZW1lbnQuVmlzaWJsZUlmICE9IG51bGwgJiYgZWxlbWVudC5WaXNpYmxlSWYgIT0gXCJcIixcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLkJvb2xlYW4sXHJcbiAgICAgICAgYm9vbGVhblZhbHVlczoge1xyXG4gICAgICAgICAgdHJ1ZTogJzxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgc3VjY2Vzcy1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgICAgZmFsc2U6ICc8aSBjbGFzcz1cImZhIGZhLWNsb3NlIGVycm9yLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgN3JlbVwiLCBjZWxsQWxpZ25tZW50OiBDZWxsQWxpZ25tZW50RW51bS5DRU5URVIgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJBbnN3ZXJTdHlsZS5Jbkxpc3RWaWV3XCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJWaXNpYmlsZSBuZWxsYSByaXNwb3N0YVwiLFxyXG4gICAgICAgIHZhbHVlOiAoZWxlbWVudCkgPT4gIWVsZW1lbnQuQW5zd2VyU3R5bGUgfHwgZWxlbWVudC5BbnN3ZXJTdHlsZSAmJiBlbGVtZW50LkFuc3dlclN0eWxlLkluTGlzdFZpZXcsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5Cb29sZWFuLFxyXG4gICAgICAgIGJvb2xlYW5WYWx1ZXM6IHtcclxuICAgICAgICAgIHRydWU6ICc8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHN1Y2Nlc3MtY29sb3JcIj48L2k+JyxcclxuICAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS1jbG9zZSBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDVyZW1cIiwgY2VsbEFsaWdubWVudDogQ2VsbEFsaWdubWVudEVudW0uQ0VOVEVSIH0sXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5mb3JtLkZvcm1TY2FsYXJUeXBlICYmXHJcbiAgICAgIHRoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2VcclxuICAgICkge1xyXG4gICAgICB0aGlzLmZpZWxkc0NvbHVtbnMuc3BsaWNlKDEsIDAsIHtcclxuICAgICAgICBrZXk6IFwiRmllbGRHcm91cFwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiU2V6aW9uZVwiLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uRXh0ZXJuYWxUZW1wbGF0ZSxcclxuICAgICAgICBleHRlcm5hbFRlbXBsYXRlOiB0aGlzLmZpZWxkU2VjdGlvbkNvbHVtblRlbXBsYXRlLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCAxNHJlbVwiIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyB0aGlzLmZpZWxkc0NvbHVtbnMucHVzaChcclxuICAgICAgLy8gICB7XHJcbiAgICAgIC8vICAgICBrZXk6IFwiRmllbGRHcm91cFwiLFxyXG4gICAgICAvLyAgICAgZGlzcGxheTogXCJTZXppb25lXCIsXHJcbiAgICAgIC8vICAgICB0eXBlOiBUeXBlQ29sdW1uLkV4dGVybmFsVGVtcGxhdGUsXHJcbiAgICAgIC8vICAgICBleHRlcm5hbFRlbXBsYXRlOiB0aGlzLmZpZWxkU2VjdGlvbkNvbHVtblRlbXBsYXRlLFxyXG4gICAgICAvLyAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDE0cmVtXCIgfVxyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFjdGlvbkJ1dHRvbnNDb2x1bW5zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcImFjdGlvblwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiXCIsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5NZW51QWN0aW9uLFxyXG4gICAgICAgIGJ1dHRvbk1lbnVJY29uOiBcIm1vcmVfdmVydFwiLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA2JVwiIH0sXHJcbiAgICAgICAgYWN0aW9uczogW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk1vZGlmaWNhXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZWRpdFwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMub3BlbkFjdGlvbkJ1dHRvbkRpYWxvZyhlbGVtZW50KSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiRWxpbWluYVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImRlbGV0ZVwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5kZWxldGVBY3Rpb25CdXR0b24oZWxlbWVudCksXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXSxcclxuICAgICAgfSxcclxuICAgICAgeyBrZXk6IFwiQnV0dG9uTGFiZWxcIiwgZGlzcGxheTogXCJFdGljaGV0dGFcIiwgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDMwJVwiIH0gfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJCdXR0b25Db2RlXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJDb2RpY2VcIixcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMjAlXCIgfSxcclxuICAgICAgfSwgICAgICBcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJJY29uXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJJY29uYVwiLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCAxMCVcIiB9LFxyXG4gICAgICB9LCAgICAgIFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIlNob3dJblwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiU2V6aW9uaVwiLFxyXG4gICAgICAgIHZhbHVlOiAoZWwpID0+IHtcclxuICAgICAgICAgIHZhciBmaW5hbFRleHQgPSBcIlwiO1xyXG4gICAgICAgICAgZWwuU2hvd0luLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgIGZpbmFsVGV4dCArPSBBY3Rpb25GbGFnRW51bVtlbGVtZW50XStcIiAvIFwiO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm4gZmluYWxUZXh0O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDIwJVwiIH0sXHJcbiAgICAgIH0sXHJcbiAgICBdOyAgICBcclxuXHJcbiAgICB0aGlzLmFjdGlvbnNPblJlY29yZENvbHVtbnMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiYWN0aW9uXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJcIixcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLk1lbnVBY3Rpb24sXHJcbiAgICAgICAgYnV0dG9uTWVudUljb246IFwibW9yZV92ZXJ0XCIsXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDYlXCIgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiTW9kaWZpY2FcIixcclxuICAgICAgICAgICAgaWNvbjogXCJlZGl0XCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy5vcGVuQWN0aW9uT25SZWNvcmREaWFsb2coZWxlbWVudCksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkVsaW1pbmFcIixcclxuICAgICAgICAgICAgaWNvbjogXCJkZWxldGVcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMuZGVsZXRlRWxlbWVudChlbGVtZW50LCBcIkFjdGlvbnNPblJlY29yZFwiKSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiU3Bvc3RhIHN1XCIsXHJcbiAgICAgICAgICAgIGljb246IFwiYXJyb3dfdXB3YXJkXCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT5cclxuICAgICAgICAgICAgICB0aGlzLm1vdmVFbGVtZW50KGVsZW1lbnQsIHRydWUsIFwiQWN0aW9uc09uUmVjb3JkXCIpLFxyXG4gICAgICAgICAgICBkaXNhYmxlZDogKGVsZW1lbnQpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZC5pbmRleE9mKGVsZW1lbnQpID09PSAwLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJTcG9zdGEgZ2nDuVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFycm93X2Rvd253YXJkXCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT5cclxuICAgICAgICAgICAgICB0aGlzLm1vdmVFbGVtZW50KGVsZW1lbnQsIGZhbHNlLCBcIkFjdGlvbnNPblJlY29yZFwiKSxcclxuICAgICAgICAgICAgZGlzYWJsZWQ6IChlbGVtZW50KSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQuaW5kZXhPZihlbGVtZW50KSA+PVxyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQubGVuZ3RoIC0gMSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgfSxcclxuICAgICAgeyBrZXk6IFwiSWNvblwiLCBkaXNwbGF5OiBcIkljb25hXCIsIHN0eWxlczogeyBmbGV4OiBcIiAwIDAgMTUlXCIgfSB9LFxyXG4gICAgICB7IGtleTogXCJOYW1lXCIsIGRpc3BsYXk6IFwiTm9tZVwiLCBzdHlsZXM6IHsgZmxleDogXCIgMCAwIDIwJVwiIH0gfSxcclxuICAgICAgeyBrZXk6IFwiQWN0aW9uXCIsIGRpc3BsYXk6IFwiQXppb25lXCIgfSxcclxuICAgIF07XHJcblxyXG4gICAgdGhpcy50cmlnZ2Vyc0NvbHVtbnMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiYWN0aW9uXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJcIixcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLk1lbnVBY3Rpb24sXHJcbiAgICAgICAgYnV0dG9uTWVudUljb246IFwibW9yZV92ZXJ0XCIsXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDYlXCIgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiTW9kaWZpY2FcIixcclxuICAgICAgICAgICAgaWNvbjogXCJlZGl0XCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy5vcGVuVHJpZ2dlcnNEaWFsb2coZWxlbWVudCksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkVsaW1pbmFcIixcclxuICAgICAgICAgICAgaWNvbjogXCJkZWxldGVcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMuZGVsZXRlVHJpZ2dlcihlbGVtZW50KSxcclxuICAgICAgICAgIH1cclxuICAgICAgICBdLFxyXG4gICAgICB9LFxyXG4gICAgICB7IGtleTogXCJkZXNjcmlwdGlvblwiLCBkaXNwbGF5OiBcIkRlc2NyaXppb25lXCIsIHN0eWxlczogeyBmbGV4OiBcIiAwIDAgMTUlXCIgfSB9LFxyXG4gICAgICB7IGtleTogXCJleGVjdXRpb25cIiwgZGlzcGxheTogXCJDb3NhIGVzZWd1ZVwiLCBzdHlsZXM6IHsgZmxleDogXCIgMCAwIDE1JVwiIH19LFxyXG4gICAgXTtcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhIGlsIEZvcm1Hcm91cCBwZXIgbCdvZ2dldHRvIEZvcm1cclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUZvcm1Gb3JtKCkge1xyXG4gICAgdGhpcy5mb3JtRm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIENvZGU6IFt0aGlzLmZvcm0uQ29kZV0sXHJcbiAgICAgIE5hbWU6IFt0aGlzLmZvcm0uTmFtZSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIERlc2NyaXB0aW9uOiBbdGhpcy5mb3JtLkRlc2NyaXB0aW9uXSxcclxuICAgICAgRm9ybVNjYWxhclR5cGU6IFt0aGlzLmZvcm0uRm9ybVNjYWxhclR5cGUsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlRm9ybVNjYWxhclR5cGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERyYWcgYW5kIERyb3AgZGVsbGUgY29sb25uZSBkZWwgZm9ybVxyXG4gICAqL1xyXG5cclxuICBvbkRyYWdSZWxlYXNlZChldmVudCl7XHJcblxyXG4gIH1cclxuXHJcbiAgb25EcmFnRW5kZWQoZXZlbnQpe1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgICAgdGhpcy5yZWxvYWRGaWVsZHNUYWJsZSgpO1xyXG4gICAgfSwxMDAwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWEgaWwgRm9ybUdyb3VwIGVwciBsJ2FnZ2l1bnRhIG8gbGEgbW9kaWZpY2EgZGkgdW5hIGFjdGlvbiBzdWkgcmVjb3JkIGRlbGxhIEZvcm0uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVBY3Rpb25PblJlY29yZEZvcm0oKSB7XHJcbiAgICB0aGlzLmFjdGlvbk9uUmVjb3JkRm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIE5hbWU6IFt0aGlzLnNlbGVjdGVkQWN0aW9uLk5hbWUsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBJY29uOiBbdGhpcy5zZWxlY3RlZEFjdGlvbi5JY29uLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgQWN0aW9uOiBbdGhpcy5zZWxlY3RlZEFjdGlvbi5BY3Rpb24sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGl1ZGUgaWwgZGlhbG9nIHBlciBhZ2dpdW5nZXJlL21vZGlmaWNhcmUgdW4gRmllbGQgc2VuemEgc2FsdmFyZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgY2xvc2VGaWVsZERpYWxvZygpIHtcclxuICAgIGlmICh0aGlzLmRpYWxvZ0ZpZWxkUmVmICE9IHVuZGVmaW5lZCkgdGhpcy5kaWFsb2dGaWVsZFJlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBnZXN0aXJlIGwnYXBlcnR1cmEgZGVsIGRpYWxvZyBwZXIgbGEgbW9kaWZpY2EgZGkgdW4gRmllbGQuXHJcbiAgICogU2UgaWwgZmllbGQgw6ggZGkgdGlwbyBcIkZvcm0gZGkgZGV0dGFnbGlvXCIgYXByZSBpbCBkaWFsb2cgcGVyIGxhIG1vZGlmaWNhIGRpIHVuYVxyXG4gICAqIElubmVyRm9ybSBhbHRyaW1lbnRpIGFwcmUgcXVlbGxvIHBlciBsYSBtb2RpZmljYSBkaSB1biBGaWVsZC5cclxuICAgKiBAcGFyYW0gZmllbGQgQ2FtcG8gZGEgbW9kaWZpY2FyZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZWRpdEZpZWxkKGZpZWxkOiBCYXNlRmllbGQpIHtcclxuICAgIGlmIChmaWVsZC5GaWVsZFR5cGUgIT0gRmllbGRUeXBlRW51bVtcIkZvcm0gZGkgZGV0dGFnbGlvXCJdKSB7XHJcbiAgICAgIHRoaXMub3BlbkZpZWxkRGlhbG9nKGZpZWxkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub3BlbklubmVyRm9ybURpYWxvZyhcclxuICAgICAgICB0aGlzLmZvcm0uSW5uZXJGb3Jtcy5maW5kKChmKSA9PiBmLk5hbWUgPT0gZmllbGQuTGFiZWwpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGdlc3RpcmUgbGEgZHVwbGljYXppb25lIGRpIHVuIEZpZWxkLlxyXG4gICAqIEBwYXJhbSBmaWVsZCBDYW1wbyBkYSBtb2RpZmljYXJlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkdXBsaWNhdGVGaWVsZChmaWVsZDogQmFzZUZpZWxkKSB7XHJcbiAgICBpZiAoZmllbGQuRmllbGRUeXBlICE9IEZpZWxkVHlwZUVudW1bXCJGb3JtIGRpIGRldHRhZ2xpb1wiXSkge1xyXG4gICAgICAvLyByaWNyZW8gbCdvZ2dldHRvIHBhc3NhbmRvIHBlciB1biBqc29uXHJcbiAgICAgIGxldCBjbG9uZUZpZWxkOiBCYXNlRmllbGQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGZpZWxkKSk7XHJcblxyXG4gICAgICBjbG9uZUZpZWxkLkxhYmVsID0gZmllbGRbXCJMYWJlbFwiXSArIFwiQ29weVwiO1xyXG4gICAgICBjbG9uZUZpZWxkLk9yZGluYWxQb3NpdGlvbiA9IHRoaXMuZm9ybS5GaWVsZHMubGVuZ3RoICsgMTtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWVsZCA9IG5ldyBCYXNlRmllbGQoKTtcclxuICAgICAgdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgPSBudWxsO1xyXG4gICAgICB0aGlzLm9uU2F2ZUZpZWxkKGNsb25lRmllbGQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYWxlcnQoXCJub24gw6ggcG9zc2liaWxlIGR1cGxpY2FyZSB1bmEgZm9ybSBkaSBkZXR0YWdsaW9cIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJpbXVvdmVyZSB1biBGaWVsZCBhbGwnaW50ZXJubyBkaSB1bmEgRm9ybS5cclxuICAgKiBSaWNoaWVkZSBjb25mZXJtYSBhbGwndXRlbnRlIHByaW1hIGRpIHJpbXVvdmVybG8uXHJcbiAgICogQHBhcmFtIGZpZWxkIEJhc2VGaWVsZCBkYSByaW11b3ZlcmVcclxuICAgKi9cclxuICBwcml2YXRlIGRlbGV0ZUVsZW1lbnQoXHJcbiAgICBlbGVtZW50OiBCYXNlRmllbGQgfCBBY3Rpb25PblJlY29yZCB8IEZvcm0sXHJcbiAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZ1xyXG4gICkge1xyXG4gICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuQ29uZmlybShcclxuICAgICAgXCJFbGltaW5hcmUgbCdlbGVtZW50byBzZWxlemlvbmF0bz9cIixcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZm9ybVtwcm9wZXJ0eU5hbWVdLnNwbGljZShcclxuICAgICAgICAgIHRoaXMuZm9ybVtwcm9wZXJ0eU5hbWVdLmluZGV4T2YoZWxlbWVudCksXHJcbiAgICAgICAgICAxXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAocHJvcGVydHlOYW1lID09PSBcIkZpZWxkc1wiKSB7XHJcbiAgICAgICAgICB0aGlzLnNldEZpZWxkT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgICAgICAgICB0aGlzLnJlbG9hZEZpZWxkc1RhYmxlKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eU5hbWUgPT09IFwiQWN0aW9uc09uUmVjb3JkXCIpIHtcclxuICAgICAgICAgIHRoaXMuc2V0QWN0aW9uT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgICAgICAgICB0aGlzLnJlbG9hZEFjdGlvbnNPblJlY29yZFRhYmxlKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eU5hbWUgPT09IFwiQWN0aW9uQnV0dG9uc1wiKSB7XHJcbiAgICAgICAgICB0aGlzLnNldEFjdGlvbkJ1dHRvbk9yZGluYWxQb3NpdGlvbigpO1xyXG4gICAgICAgICAgdGhpcy5yZWxvYWRBY3Rpb25CdXR0b25zT25SZWNvcmRUYWJsZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZmFsc2UsXHJcbiAgICAgIFwiUmljaGllc3RhIGNvbmZlcm1hXCJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHNwb3N0YXJlIHVuIGNhbXBvIGFsbCdpbnRlcm5vIGRlbGxhIGZvcm0uXHJcbiAgICogQHBhcmFtIGZpZWxkIE9nZ2V0dG8gZGkgdGlwbyBCYXNlRmllbGQgZGEgc3Bvc3RhcmUuXHJcbiAgICogQHBhcmFtIG1vdmVVcCBTZSBUUlVFIGFsbG9yYSBzcG9zdGEgdmVyc28gbCdhbHRvIGlsIGNhbXBvIChhYmJhc3NhIGwnaW5kaWNlKSBhbHRyaW1lbnRpIGlsIGNvbnRyYXJpby5cclxuICAgKi9cclxuICBwcml2YXRlIG1vdmVFbGVtZW50KFxyXG4gICAgZWxlbWVudDogQmFzZUZpZWxkIHwgQWN0aW9uT25SZWNvcmQsXHJcbiAgICBtb3ZlVXA6IGJvb2xlYW4sXHJcbiAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZ1xyXG4gICkge1xyXG4gICAgY29uc3Qgc3RhcnRpbmdJbmRleCA9IHRoaXMuZm9ybVtwcm9wZXJ0eU5hbWVdLmluZGV4T2YoZWxlbWVudCk7XHJcbiAgICBjb25zdCBlbmRpbmdJbmRleCA9IHN0YXJ0aW5nSW5kZXggKyAobW92ZVVwID8gLTEgOiAxKTtcclxuXHJcbiAgICB0aGlzLmZvcm1bcHJvcGVydHlOYW1lXS5zcGxpY2Uoc3RhcnRpbmdJbmRleCwgMSk7XHJcbiAgICB0aGlzLmZvcm1bcHJvcGVydHlOYW1lXS5zcGxpY2UoZW5kaW5nSW5kZXgsIDAsIGVsZW1lbnQpO1xyXG5cclxuICAgIGlmIChwcm9wZXJ0eU5hbWUgPT09IFwiRmllbGRzXCIpIHtcclxuICAgICAgdGhpcy5zZXRGaWVsZE9yZGluYWxQb3NpdGlvbigpO1xyXG4gICAgICB0aGlzLnJlbG9hZEZpZWxkc1RhYmxlKCk7XHJcbiAgICB9IGVsc2UgaWYgKHByb3BlcnR5TmFtZSA9PT0gXCJBY3Rpb25zT25SZWNvcmRcIikge1xyXG4gICAgICB0aGlzLnNldEFjdGlvbk9yZGluYWxQb3NpdGlvbigpO1xyXG4gICAgICB0aGlzLnJlbG9hZEFjdGlvbnNPblJlY29yZFRhYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbXBvc3RhIGwnb3JkaW5hbWVudG8gZGVsbGUgc2V6aW9uaSBjaGUgY29tcG9uZ29ubyBsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0Rm9ybUZpZWxkR3JvdXBPcmRpbmFsUG9zaXRpb24oKSB7XHJcbiAgICB0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3Vwcy5mb3JFYWNoKChnLCBpKSA9PiAoZy5PcmRpbmFsUG9zaXRpb24gPSBpKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbXBvc3RhIGwnb3JkaW5hbWVudG8gZGVpIGNhbXBpIGFsbCdpbnRlcm5vIGRlbGxhIGZvcm0gaW4gYmFzZSBhbGwnb3JkaW5lIGNoZSBsJ3V0ZW50ZVxyXG4gICAqIGhhIGRlZmluaXRvIG5lbGxhIHRhYmVsbGEgaW4gY3VpIHNvbm8gbW9zdHJhdGlcclxuICAgKi9cclxuICBwcml2YXRlIHNldEZpZWxkT3JkaW5hbFBvc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybS5GaWVsZHMpIHtcclxuICAgICAgdGhpcy5mb3JtLkZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgIGZpZWxkLk9yZGluYWxQb3NpdGlvbiA9IHRoaXMuZm9ybS5GaWVsZHMuaW5kZXhPZihmaWVsZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaWNhcmljYXJlIGkgZGF0aSBkZWxsYSB0YWJlbGxhIGRlaSBjYW1waSBhZ2dpdW50aSBpbiB1bmEgZm9ybVxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVsb2FkRmllbGRzVGFibGUoKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZHNUYWJsZSkge1xyXG4gICAgICB0aGlzLmZpZWxkc1RhYmxlLnJlbG9hZERhdGF0YWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW1wb3N0YSBsJ29yZGluYW1lbnRvIGRlaSBjYW1waSBhbGwnaW50ZXJubyBkZWxsYSBmb3JtIGluIGJhc2UgYWxsJ29yZGluZSBjaGUgbCd1dGVudGVcclxuICAgKiBoYSBkZWZpbml0byBuZWxsYSB0YWJlbGxhIGluIGN1aSBzb25vIG1vc3RyYXRpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRBY3Rpb25PcmRpbmFsUG9zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZCkge1xyXG4gICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmZvckVhY2goKGFjdGlvbikgPT4ge1xyXG4gICAgICAgIGFjdGlvbi5PcmRpbmFsUG9zaXRpb24gPSB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmluZGV4T2YoYWN0aW9uKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbXBvc3RhIGwnb3JkaW5hbWVudG8gZGVpIGNhbXBpIGFsbCdpbnRlcm5vIGRlbGxhIGZvcm0gaW4gYmFzZSBhbGwnb3JkaW5lIGNoZSBsJ3V0ZW50ZVxyXG4gICAqIGhhIGRlZmluaXRvIG5lbGxhIHRhYmVsbGEgaW4gY3VpIHNvbm8gbW9zdHJhdGlcclxuICAgKi9cclxuICBwcml2YXRlIHNldEFjdGlvbkJ1dHRvbk9yZGluYWxQb3NpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucykge1xyXG4gICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucy5mb3JFYWNoKChhY3Rpb24pID0+IHtcclxuICAgICAgICBhY3Rpb24uT3JkaW5hbFBvc2l0aW9uID0gdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMuaW5kZXhPZihhY3Rpb24pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9ICBcclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaWNhcmljYXJlIGkgZGF0aSBkZWxsYSB0YWJlbGxhIGRlbGxlIGF6aW9uaSBhZ2dpdW50aXZlIHN1aSByZWNvcmQgZGVsbGEgRm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIHJlbG9hZEFjdGlvbnNPblJlY29yZFRhYmxlKCkge1xyXG4gICAgaWYgKHRoaXMuYWN0aW9uc09uUmVjb3JkVGFibGUpIHtcclxuICAgICAgdGhpcy5hY3Rpb25zT25SZWNvcmRUYWJsZS5yZWxvYWREYXRhdGFibGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmljYXJpY2FyZSBpIGRhdGkgZGVsbGEgdGFiZWxsYSBkZWxsZSBhemlvbmkgYWdnaXVudGl2ZSBzdWkgcmVjb3JkIGRlbGxhIEZvcm0uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZWxvYWRBY3Rpb25CdXR0b25zT25SZWNvcmRUYWJsZSgpIHtcclxuICAgIGlmICh0aGlzLmFjdGlvbkJ1dHRvbnNUYWJsZSkge1xyXG4gICAgICB0aGlzLmFjdGlvbkJ1dHRvbnNUYWJsZS5yZWxvYWREYXRhdGFibGUoKTtcclxuICAgIH1cclxuICB9ICBcclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIG9uRXh0ZXJuYWxDb21wb25lbnRPdXQoZXY6IGV2ZW50T3V0KXtcclxuICAgIHRoaXMub3V0LmVtaXQoZXYpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVFJJR0dFUlNcclxuICAgKi9cclxuXHJcbiAgb3BlblRyaWdnZXJzRGlhbG9nKGV2OiBUcmlnZ2VyID0gbnVsbCkge1xyXG5cclxuICAgIGlmIChldiAhPSBudWxsKXtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRyaWdnZXIgPSBldjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmlnZ2VyID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRpYWxvZ1RyaWdnZXJzUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ1RyaWdnZXJzLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBcIjc1JVwiLFxyXG4gICAgICBoZWlnaHQ6IFwiODAlXCIsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNhdmVUcmlnZ2VyKGVsZW1lbnQ6IFRyaWdnZXIpe1xyXG4gICAgXHJcbiAgICBpZiAoZWxlbWVudCAhPSBudWxsKXtcclxuICAgICAgaWYgKHRoaXMuZm9ybS5UcmlnZ2VycyAhPSBudWxsKXtcclxuICAgICAgICB2YXIgZXhpc3RzVHJpZ2dlciA9IHRoaXMuZm9ybS5UcmlnZ2Vycy5maW5kKHggPT4geC5DSUQgPT0gZWxlbWVudC5DSUQpO1xyXG4gICAgICAgIGlmIChleGlzdHNUcmlnZ2VyID09IG51bGwpe1xyXG4gICAgICAgICAgLy8gTnVvdm8gdHJpZ2dlclxyXG4gICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzLnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGV4aXN0c1RyaWdnZXIgPSBlbGVtZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBuZXcgQXJyYXk8VHJpZ2dlcj4oKTtcclxuICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMucHVzaChlbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRyaWdnZXJzVGFibGUucmVsb2FkRGF0YXRhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kaWFsb2dUcmlnZ2Vyc1JlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlVHJpZ2dlcihlbGVtZW50OiBUcmlnZ2VyKXtcclxuICAgIHZhciBpbmRleCA9IHRoaXMuZm9ybS5UcmlnZ2Vycy5maW5kSW5kZXgoeCA9PiB4LkNJRCA9PSBlbGVtZW50LkNJRCk7XHJcbiAgICB0aGlzLmZvcm0uVHJpZ2dlcnMuc3BsaWNlKGluZGV4LDEpO1xyXG4gICAgdGhpcy50cmlnZ2Vyc1RhYmxlLnJlbG9hZERhdGF0YWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlQWN0aW9uQnV0dG9uKGVsZW1lbnQ6IEFjdGlvbkJ1dHRvbil7XHJcbiAgICB2YXIgaW5kZXggPSB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucy5maW5kSW5kZXgoeCA9PiB4LkJ1dHRvbkNvZGUgPT0gZWxlbWVudC5CdXR0b25Db2RlKTtcclxuICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zLnNwbGljZShpbmRleCwxKTtcclxuICAgIHRoaXMuYWN0aW9uQnV0dG9uc1RhYmxlLnJlbG9hZERhdGF0YWJsZSgpO1xyXG4gIH0gIFxyXG5cclxuICBvbkNvbnRlc3R1YWxpemF0aW9uU2VsZWN0KCl7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ29udGVzdHVhbGl6YXRpb25WYWx1ZSA9IHRoaXMuY29udGVzdHVhbGl6YXRpb24uZmluZCh4ID0+IHguZW50aXR5VGFibGVOYW1lID09IHRoaXMuc2VsZWN0ZWRDb250ZXN0dWFsaXphdGlvbikuZW50aXR5SUQ7XHJcbiAgfVxyXG5cclxuICBvbkNvbnRlc3R1YWxpemF0aW9uU2VsZWN0VmFsdWUoKXtcclxuICAgIHRoaXMuY29udGVzdHVhbGl6YXRpb24uZmluZCh4ID0+IHguZW50aXR5VGFibGVOYW1lID09IHRoaXMuc2VsZWN0ZWRDb250ZXN0dWFsaXphdGlvbikuZW50aXR5SUQgPSB0aGlzLnNlbGVjdGVkQ29udGVzdHVhbGl6YXRpb25WYWx1ZTtcclxuICB9XHJcblxyXG4gIGFwcGx5Q29udGVzdHVhbGl6YXRpb24oZWxlbWVudCl7XHJcbiAgICB0aGlzLmZvcm1Db21wbGV0ZWQgPSBmYWxzZTtcclxuICAgIFxyXG4gICAgaWYgKHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQgIT0gbnVsbCl7XHJcbiAgICAgIHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQuaW5wdXRQYXJhbXMuY29uZmlnLmNvbnRlc3R1YWxpemF0aW9uID0gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5mb3JtQ29tcGxldGVkID0gdHJ1ZTtcclxuICAgIH0sNTApO1xyXG4gIH1cclxuXHJcbiAgb25GaXJlVHJpZ2dlcihldjogRmlyZVRyaWdnZXIpe1xyXG4gICAgdGhpcy5maXJlVHJpZ2dlci5lbWl0KGV2KTtcclxuICB9ICAgXHJcblxyXG59XHJcbiIsIjxlcXAtZHluYW1pYy1tb2R1bGUtc3Bpbm5lcj48L2VxcC1keW5hbWljLW1vZHVsZS1zcGlubmVyPlxyXG5cclxuXHJcbjxkaXYgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3ItaGVhZGVyIHJvdyB0aXRsZSBwLTFcIiAqbmdJZj1cImlubmVyRm9ybU1hbmFnbWVudFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTBcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItdGl0bGUtc3RhbmRhcmRcIj5BZ2dpdW50YSBmb3JtIGRpIGRldHRhZ2xpbzwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiB0ZXh0LXJpZ2h0XCI+XHJcbiAgICA8bWF0LWljb24gY2xhc3M9XCJjbG9zZVwiIChjbGljayk9XCJjbG9zZURpYWxvZ0lubmVyRm9ybSgpXCI+Y2xvc2U8L21hdC1pY29uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjwhLS0jcmVnaW9uIEVYUE9SVCBNT0RVTEUgLS0+XHJcbjxkaXYgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3ItZXhwb3J0ZXJcIiAqbmdJZj1cImxvYWRlciAmJiB2aWV3TW9kZSA9PSAnRXhwb3J0J1wiIGNsYXNzPVwicC0zXCI+XHJcbiAgXHJcbiAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJleHBvcnQoKVwiPkVzcG9ydGE8L2J1dHRvbj5cclxuICBcclxuICA8IS0tPGFcclxuICAgIGNsYXNzPVwiYnRuIGJ0bi1jbGVhclwiXHJcbiAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgIHRpdGxlPVwiRG93bmxvYWQgSlNPTlwiXHJcbiAgICBbaHJlZl09XCJkb3dubG9hZEpzb25IcmVmXCJcclxuICAgIGRvd25sb2FkPVwie3sgZG93bmxvYWROYW1lIH19Lmpzb25cIlxyXG4gICAgPkV4cG9ydDwvYT4tLT5cclxuXHJcbjwvZGl2PlxyXG48IS0tI2VuZHJlZ2lvbiBFWFBPUlQgTU9EVUxFIC0tPlxyXG5cclxuPG1hdC1ob3Jpem9udGFsLXN0ZXBwZXJcclxuICAqbmdJZj1cImxvYWRlciAmJiBmb3JtRm9ybUdyb3VwICYmIHZpZXdNb2RlID09ICdhZGRPckVkaXQnXCJcclxuICBsaW5lYXJcclxuICAjc3RlcHBlclxyXG4gIFtuZ0NsYXNzXT1cInsgb3V0ZXJGb3JtOiB0cnVlLCAnaW5uZXJGb3JtTWFuYWdtZW50LXN0ZXBwZXInOiBpbm5lckZvcm1NYW5hZ21lbnQgIH1cIlxyXG4gIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yLXN0ZXBwZXIge3sgJ2xhc3QtZWRpdGVkLXN0ZXAtJyArIHN0ZXBwZXIuc2VsZWN0ZWRJbmRleCB9fVwiXHJcbj5cclxuICA8IS0tI3JlZ2lvbiBEQVRJIEdFTkVSQUxJIERFTExBIEZPUk0gLS0+XHJcbiAgPG1hdC1zdGVwIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yLWdlbmVyYWwtZGF0YVwiIFtzdGVwQ29udHJvbF09XCJmb3JtRm9ybUdyb3VwXCI+XHJcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1Gb3JtR3JvdXBcIiAoa2V5ZG93bi5lbnRlcik9XCIoZmFsc2UpXCI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwTGFiZWw+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJzdGVwcGVyLWhlYWRlci1vdmVybGF5XCJcclxuICAgICAgICAgIChjbGljayk9XCJzZXRGb3JtU3RhdHVzKGZhbHNlKVwiXHJcbiAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgIERhdGkgZ2VuZXJhbGkgZGVsbGEgZm9ybVxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBmaXJzdFJvd1wiPlxyXG4gICAgICAgIDwhLS0gXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsXHJcbiAgICAgICAgICBbbWF0VG9vbHRpcF09XCInVmEgaW5zZXJpdG8gcGVyIGVzc2VyZSB1dGlsaXp6YXRvIGNvbWUgcmlmZXJpbWVudG8gbmVpIHRlbXBsYXRlLiBub24gYWNjZXR0YSBjYXJhdHRlcmkgc3BlY2lhbGkgbmUgc3BhemkuJ1wiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIENvZGljZSBVbml2b2NvIFxyXG4gICAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJuYW1lXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ1ZhIGluc2VyaXRvIHBlciBlc3NlcmUgdXRpbGl6emF0byBjb21lIHJpZmVyaW1lbnRvIG5laSB0ZW1wbGF0ZS4gbm9uIGFjY2V0dGEgY2FyYXR0ZXJpIHNwZWNpYWxpIG5lIHNwYXppLidcIlxyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIkNvZGVcIlxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZm9ybS5Db2RlXCJcclxuICAgICAgICAgICAgICByZXF1aXJlZFxyXG4gICAgICAgICAgICAgIChmb2N1c291dCk9XCJzZXRDb2RlKGZvcm0uQ29kZSlcIlxyXG4gICAgICAgICAgICAgIGRpc2FibGVkPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgcmVhZG9ubHk9XCJ0cnVlXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+IFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPjwvZGl2PlxyXG4gICAgICAgIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibmFtZVwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCJcclxuICAgICAgICAgID4gICAgICAgICAgXHJcbiAgICAgICAgICA8bWF0LWxhYmVsPk5vbWU8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTm9tZVwiXHJcbiAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJOYW1lXCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm0uTmFtZVwiXHJcbiAgICAgICAgICAgICAgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic2V0TmFtZShmb3JtLk5hbWUpXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgPCEtLSA8bWF0LWxhYmVsPlRpcG8gZGkgdmlzdWFsaXp6YXppb25lPC9tYXQtbGFiZWw+IC0tPlxyXG4gICAgICAgICAgPGVxcC1zZWxlY3RcclxuICAgICAgICAgICAgY2xhc3M9XCJuYW1lU2VjdGlvblwiXHJcbiAgICAgICAgICAgIFtlbnVtRGF0YV09XCJGb3JtU2NhbGFyVHlwZUVudW1cIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWxJbnB1dCldPVwiZm9ybS5Gb3JtU2NhbGFyVHlwZVwiXHJcbiAgICAgICAgICAgIFtpc1JlcXVpcmVkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgcmVxdWlyZWRcclxuICAgICAgICAgICAgW3Nob3dDYW5jZWxCdXR0b25dPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICBbZm9ybUdyb3VwSW5wdXRdPVwiZm9ybUZvcm1Hcm91cFwiXHJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCInRm9ybVNjYWxhclR5cGUnXCJcclxuICAgICAgICAgICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvbkNoYW5nZUZvcm1TY2FsYXJUeXBlKClcIlxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlRpcG8gZGkgdmlzdWFsaXp6YXppb25lXCJcclxuXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJuYW1lXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD5EZXNjcml6aW9uZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIkRlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm0uRGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgIChmb2N1c291dCk9XCJzdHJpbmdTYW5pdGl6ZXIoZm9ybS5OYW1lKVwiXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJEZXNjcml6aW9uZVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwicm93IGluc2VydGVkXCJcclxuICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgZm9ybS5Gb3JtU2NhbGFyVHlwZSAmJlxyXG4gICAgICAgICAgZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2VcclxuICAgICAgICBcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJuYW1lU2VjdGlvblwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+IE5vbWUgc2V6aW9uZSAoaW52aW8gcGVyIGNvbmZlcm1hcmUpIDwvbWF0LWxhYmVsPlxyXG5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm1GaWVsZEdyb3VwTmFtZVwiXHJcbiAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcclxuICAgICAgICAgICAgICAoa2V5dXApPVwib25Gb3JtRmllbGRHcm91cE5hbWVLZXlVcCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIk5vbWUgc2V6aW9uZSAoaW52aW8gcGVyIGNvbmZlcm1hcmUpXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC04XCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yLTNcIj5TZXppb25pIGluc2VyaXRlOjwvc3Bhbj5cclxuICAgICAgICAgIDx1bCBjbGFzcz1cInNlY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGdyb3VwTmFtZSBvZiBmb3JtLkZvcm1GaWVsZHNHcm91cHM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlY3Rpb25JbnNlcnRcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvblxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1yLTFcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGVGb3JtRmllbGRHcm91cE5hbWUoZ3JvdXBOYW1lLk5hbWUpXCJcclxuICAgICAgICAgICAgICAgICAgPmNsb3NlIDwvbWF0LWljb25cclxuICAgICAgICAgICAgICAgID57eyBncm91cE5hbWUuTmFtZSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm10LTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICA8IS0tIElNUE9SVCAtLT5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAqbmdJZj1cIiF0aGlzLmZvcm1JRFwiXHJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tY2xlYXIgYnV0dG9uLW5leHQgbWUtMlwiXHJcbiAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgIChjbGljayk9XCJpbXBvcnRNb2R1bGUoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgSW1wb3J0YVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwhLS0gRU5EIElNUE9SVCAtLT5cclxuXHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgY2xhc3M9XCJidXR0b24tbmV4dFwiXHJcbiAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgIG1hdFN0ZXBwZXJOZXh0XHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybUZvcm1Hcm91cC5pbnZhbGlkXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICBTdWNjZXNzaXZvXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9mb3JtPlxyXG4gIDwvbWF0LXN0ZXA+XHJcbiAgPCEtLSNlbmRyZWdpb24gREFUSSBHRU5FUkFMSSBERUxMQSBGT1JNIC0tPlxyXG5cclxuICA8IS0tI3JlZ2lvbiBBR0dJVU5UQSBERUkgQ0FNUEkgREVMTEEgRk9STSAtLT5cclxuICA8bWF0LXN0ZXAgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3ItYWRkLWZpZWxkXCIgW2NvbXBsZXRlZF09XCJpc0ZpZWxkU3RlcENvbXBsZXRlZCgpXCI+XHJcbiAgICA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic3RlcHBlci1oZWFkZXItb3ZlcmxheVwiIChjbGljayk9XCJzZXRGb3JtU3RhdHVzKGZhbHNlKVwiPjwvZGl2PlxyXG4gICAgICA8bWF0LWxhYmVsPkNhbXBpIGRhIGluc2VyaXJlPC9tYXQtbGFiZWw+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LXN0YXJ0IGFkZEJ1dHRvbnNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1lLTJcIlxyXG4gICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIChjbGljayk9XCJvcGVuRmllbGREaWFsb2coKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+QWdnaXVuZ2kgY2FtcG88L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lZCBtZS0yXCJcclxuICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib3BlbklubmVyRm9ybURpYWxvZygpXCJcclxuICAgICAgICAgICpuZ0lmPVwiIWlubmVyRm9ybU1hbmFnbWVudFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+QWdnaXVuZ2kgZm9ybSBkaSBkZXR0YWdsaW88L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGVxcC10YWJsZVxyXG4gICAgICBjbGFzcz1cInRhYmxlXCJcclxuICAgICAgI2ZpZWxkc1RhYmxlXHJcbiAgICAgIFtjcmVhdGVNYXRDYXJkXT1cImZhbHNlXCJcclxuICAgICAgW2NvbHVtbnNdPVwiZmllbGRzQ29sdW1uc1wiXHJcbiAgICAgIFtlbmFibGVEcmFnQW5kRHJvcF09XCJmYWxzZVwiXHJcbiAgICAgIFtlbmFibGVEcmFnQ29sdW1uXT1cInRydWVcIlxyXG4gICAgICBbY2hhbmdlRHJhZ1Jvd1Bvc2l0aW9uXT1cInRydWVcIlxyXG4gICAgICBbZGF0YV09XCJmb3JtLkZpZWxkc1wiXHJcbiAgICAgIFtlbXB0eVRhYmxlTWVzc2FnZV09XCInTmVzc3VuIGNhbXBvIGluc2VyaXRvJ1wiXHJcbiAgICAgIChkcmFnUmVsZWFzZWRFdmVudCk9XCJvbkRyYWdSZWxlYXNlZCgkZXZlbnQpXCJcclxuICAgICAgKGRyYWdFbmRlZEV2ZW50KT1cIm9uRHJhZ0VuZGVkKCRldmVudClcIlxyXG4gICAgICBbc2VhcmNoVGV4dF09XCInJ1wiXHJcbiAgICAgIFtwYWdpbmF0b3JWaXNpYmxlXT1cImZhbHNlXCJcclxuICAgID5cclxuICAgIDwvZXFwLXRhYmxlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtdC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJtci0yIHByZXZpb3VzXCIgbWF0LXJhaXNlZC1idXR0b24gbWF0U3RlcHBlclByZXZpb3VzPlxyXG4gICAgICAgIFByZWNlZGVudGVcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBjbGFzcz1cImJ1dHRvbi1uZXh0XCJcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgbWF0U3RlcHBlck5leHRcclxuICAgICAgICBbZGlzYWJsZWRdPVwiIWlzRmllbGRTdGVwQ29tcGxldGVkKClcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgZGlzYWJsZWQ6IGZvcm1Gb3JtR3JvdXAuaW52YWxpZCB9XCJcclxuICAgICAgICAoY2xpY2spPVwic2V0Rm9ybVN0YXR1cyhmYWxzZSlcIlxyXG4gICAgICA+XHJcbiAgICAgICAgU3VjY2Vzc2l2b1xyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbWF0LXN0ZXA+XHJcbiAgPCEtLSNlbmRyZWdpb24gQUdHSVVOVEEgREVJIENBTVBJIERFTExBIEZPUk0gLS0+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSBtYXRTdGVwcGVySWNvbj1cImVkaXRcIiBsZXQtaW5kZXg9XCJpbmRleFwiPlxyXG4gICAgPG1hdC1sYWJlbD57eyBpbmRleCArIDEgfX08L21hdC1sYWJlbD5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8IS0tI3JlZ2lvbiBBR0dJVU5UQSBERUxMRSBPUEVSQVpJT05JIFNVSSBSRUNPUkQgLS0+XHJcbiAgPCEtLSM8bWF0LXN0ZXA+XHJcbiAgICA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic3RlcHBlci1oZWFkZXItb3ZlcmxheVwiIChjbGljayk9XCJzZXRGb3JtU3RhdHVzKGZhbHNlKVwiPjwvZGl2PlxyXG4gICAgICBBemlvbmkgYWdnaXVudGl2ZSBzdWkgcmVjb3JkXHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LXN0YXJ0IGFkZEJ1dHRvbnNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib3BlbkFjdGlvbk9uUmVjb3JkRGlhbG9nKClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkFnZ2l1bmdpIGF6aW9uZTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxlcXAtdGFibGVcclxuICAgICAgY2xhc3M9XCJ0YWJsZVwiXHJcbiAgICAgICNhY3Rpb25zT25SZWNvcmRUYWJsZVxyXG4gICAgICBbY3JlYXRlTWF0Q2FyZF09XCJmYWxzZVwiXHJcbiAgICAgIFtjb2x1bW5zXT1cImFjdGlvbnNPblJlY29yZENvbHVtbnNcIlxyXG4gICAgICBbZGF0YV09XCJmb3JtLkFjdGlvbnNPblJlY29yZFwiXHJcbiAgICAgIFtlbXB0eVRhYmxlTWVzc2FnZV09XCInTmVzc3VuYSBhY3Rpb24gaW5zZXJpdGEnXCJcclxuICAgICAgW3NlYXJjaFRleHRdPVwiJydcIlxyXG4gICAgPlxyXG4gICAgPC9lcXAtdGFibGU+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm10LTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgYnV0dG9uc05leHREaXZcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1yLTIgcHJldmlvdXNcIiBtYXQtcmFpc2VkLWJ1dHRvbiBtYXRTdGVwcGVyUHJldmlvdXM+XHJcbiAgICAgICAgUHJlY2VkZW50ZVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIGNsYXNzPVwiYnV0dG9uLW5leHRcIlxyXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICBtYXRTdGVwcGVyTmV4dFxyXG4gICAgICAgIChjbGljayk9XCJzZXRGb3JtU3RhdHVzKGZhbHNlKVwiXHJcbiAgICAgID5cclxuICAgICAgICBTdWNjZXNzaXZvXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9tYXQtc3RlcD4tLT5cclxuICA8IS0tI2VuZHJlZ2lvbiBBR0dJVU5UQSBERUxMRSBPUEVSQVpJT05JIFNVSSBSRUNPUkQgLS0+XHJcblxyXG5cclxuXHJcbiAgPCEtLSNlbmRyZWdpb24gQUdHSVVOVEEgREVJIEJPVFRPTkkgQVpJT05FIC0tPiAgXHJcbiAgPG1hdC1zdGVwPlxyXG4gICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD5cclxuICAgICAgPGRpdiBjbGFzcz1cInN0ZXBwZXItaGVhZGVyLW92ZXJsYXlcIiAoY2xpY2spPVwic2V0Rm9ybVN0YXR1cyhmYWxzZSlcIj48L2Rpdj5cclxuICAgICAgQm90dG9uaSBBemlvbmVcclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgYWRkQnV0dG9uc1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxyXG4gICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIChjbGljayk9XCJvcGVuQWN0aW9uQnV0dG9uRGlhbG9nKClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkFnZ2l1bmdpIGJvdHRvbmUgYXppb25lPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGVxcC10YWJsZVxyXG4gICAgICBjbGFzcz1cInRhYmxlXCJcclxuICAgICAgI2FjdGlvbkJ1dHRvbnNUYWJsZVxyXG4gICAgICBbY3JlYXRlTWF0Q2FyZF09XCJmYWxzZVwiXHJcbiAgICAgIFtjb2x1bW5zXT1cImFjdGlvbkJ1dHRvbnNDb2x1bW5zXCJcclxuICAgICAgW2RhdGFdPVwiZm9ybS5BY3Rpb25CdXR0b25zXCJcclxuICAgICAgW2VtcHR5VGFibGVNZXNzYWdlXT1cIidOZXNzdW4gYm90dG9uZSBhemlvbmUgaW5zZXJpdG8nXCJcclxuICAgICAgW3NlYXJjaFRleHRdPVwiJydcIlxyXG5cclxuICAgICAgW2VuYWJsZURyYWdBbmREcm9wXT1cImZhbHNlXCJcclxuICAgICAgW2VuYWJsZURyYWdDb2x1bW5dPVwidHJ1ZVwiXHJcbiAgICAgIFtjaGFuZ2VEcmFnUm93UG9zaXRpb25dPVwidHJ1ZVwiXHJcbiAgICAgIChkcmFnUmVsZWFzZWRFdmVudCk9XCJvbkRyYWdSZWxlYXNlZCgkZXZlbnQpXCJcclxuICAgICAgKGRyYWdFbmRlZEV2ZW50KT1cIm9uRHJhZ0VuZGVkKCRldmVudClcIiAgICAgICBcclxuICAgID5cclxuICAgIDwvZXFwLXRhYmxlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtdC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGJ1dHRvbnNOZXh0RGl2XCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJtci0yIHByZXZpb3VzXCIgbWF0LXJhaXNlZC1idXR0b24gbWF0U3RlcHBlclByZXZpb3VzPlxyXG4gICAgICAgIFByZWNlZGVudGVcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBjbGFzcz1cImJ1dHRvbi1uZXh0XCJcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgbWF0U3RlcHBlck5leHRcclxuICAgICAgICAoY2xpY2spPVwic2V0Rm9ybVN0YXR1cyhmYWxzZSlcIlxyXG4gICAgICA+XHJcbiAgICAgICAgU3VjY2Vzc2l2b1xyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbWF0LXN0ZXA+XHJcbiAgPCEtLSNlbmRyZWdpb24gQUdHSVVOVEEgREVJIEJPVFRPTkkgQVpJT05FIC0tPiAgXHJcblxyXG4gIFxyXG5cclxuICA8IS0tI3JlZ2lvbiBUUklHR0VSUy0tPlxyXG4gIDxtYXQtc3RlcD5cclxuICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwTGFiZWw+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdGVwcGVyLWhlYWRlci1vdmVybGF5XCIgKGNsaWNrKT1cInNldEZvcm1TdGF0dXMoZmFsc2UpXCI+PC9kaXY+XHJcbiAgICAgIFRyaWdnZXJzXHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgYWRkQnV0dG9uc1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxyXG4gICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5UcmlnZ2Vyc0RpYWxvZygpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5BZ2dpdW5naSB0cmlnZ2VyPC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICBcclxuICAgICAgPGVxcC10YWJsZVxyXG4gICAgICAgIGNsYXNzPVwidGFibGVcIlxyXG4gICAgICAgICN0cmlnZ2Vyc1RhYmxlXHJcbiAgICAgICAgW2NyZWF0ZU1hdENhcmRdPVwiZmFsc2VcIlxyXG4gICAgICAgIFtjb2x1bW5zXT1cInRyaWdnZXJzQ29sdW1uc1wiXHJcbiAgICAgICAgW2RhdGFdPVwiZm9ybS5UcmlnZ2Vyc1wiXHJcbiAgICAgICAgW2VtcHR5VGFibGVNZXNzYWdlXT1cIidOZXNzdW5hIGFjdGlvbiBpbnNlcml0YSdcIlxyXG4gICAgICAgIFtzZWFyY2hUZXh0XT1cIicnXCJcclxuICAgICAgPlxyXG4gICAgICA8L2VxcC10YWJsZT4gICAgICBcclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1yLTIgcHJldmlvdXNcIiBtYXQtcmFpc2VkLWJ1dHRvbiBtYXRTdGVwcGVyUHJldmlvdXM+XHJcbiAgICAgICAgICBQcmVjZWRlbnRlXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgY2xhc3M9XCJidXR0b24tbmV4dFwiXHJcbiAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgIG1hdFN0ZXBwZXJOZXh0XHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzRmllbGRTdGVwQ29tcGxldGVkKClcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogZm9ybUZvcm1Hcm91cC5pbnZhbGlkIH1cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNldEZvcm1TdGF0dXModHJ1ZSlcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIFN1Y2Nlc3Npdm9cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+ICAgICAgXHJcblxyXG4gIDwvbWF0LXN0ZXA+XHJcbiAgPCEtLSNlbmRyZWdpb24gVFJJR0dFUlMtLT5cclxuXHJcbiAgPCEtLSNyZWdpb24gVklTVUFMSVpaQVpJT05FIEZPUk0gQ1JFQVRBIC0tPlxyXG4gIDxtYXQtc3RlcCBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci1wcmV2aWV3XCI+XHJcbiAgICA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJzdGVwcGVyLWhlYWRlci1vdmVybGF5XCJcclxuICAgICAgICAoY2xpY2spPVwic2V0Rm9ybVN0YXR1cyggZm9ybUZvcm1Hcm91cC52YWxpZCAmJiBmb3JtLkZpZWxkcyAmJiBmb3JtLkZpZWxkcy5sZW5ndGggPiAwIClcIlxyXG4gICAgICA+PC9kaXY+XHJcbiAgICAgIEFudGVwcmltYVxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPlxyXG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwic2hvd0FsbEZpZWxkc1wiXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICBNb3N0cmEgYW5jaGUgaSBjYW1waSBpbnZpc2liaWxpXHJcbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+XHJcbiAgICAgICAgPGVxcC1zZWxlY3QgW2FycmF5RGF0YV09XCJjb250ZXN0dWFsaXphdGlvblwiIFsobmdNb2RlbElucHV0KV09XCJzZWxlY3RlZENvbnRlc3R1YWxpemF0aW9uXCJcclxuICAgICAgICBbYXJyYXlLZXlQcm9wZXJ0eV09XCInZW50aXR5VGFibGVOYW1lJ1wiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ2VudGl0eVRhYmxlTmFtZSdcIlxyXG4gICAgICAgIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25Db250ZXN0dWFsaXphdGlvblNlbGVjdCgpXCJcclxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0NvbnRlc3R1YWxpenphemlvbmUgZGVsIERCR2V0dGVyJ1wiXHJcbiAgICAgICAgW2luY2x1ZGVGdWxsT2JqZWN0XT1cImZhbHNlXCI+PC9lcXAtc2VsZWN0PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCIgKm5nSWY9XCJzZWxlY3RlZENvbnRlc3R1YWxpemF0aW9uICE9IG51bGxcIj5cclxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRDb250ZXN0dWFsaXphdGlvblZhbHVlXCIgKGNoYW5nZSk9XCJvbkNvbnRlc3R1YWxpemF0aW9uU2VsZWN0VmFsdWUoKVwiPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCIgKm5nSWY9XCJzZWxlY3RlZENvbnRlc3R1YWxpemF0aW9uICE9IG51bGxcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cImFwcGx5Q29udGVzdHVhbGl6YXRpb24oY29udGVzdHVhbGl6YXRpb24pXCI+QXBwbGljYTwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIChjbGljayk9XCJhcHBseUNvbnRlc3R1YWxpemF0aW9uKG51bGwpXCI+UmltdW92aTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8aHIvPlxyXG5cclxuICAgIDxhZGQtZm9ybS1yZWNvcmRcclxuICAgICAgKm5nSWY9XCJwcmV2aWV3Rm9ybSAmJiBmb3JtQ29tcGxldGVkXCJcclxuICAgICAgW2Zvcm1dPVwicHJldmlld0Zvcm1cIlxyXG4gICAgICBbdXNlcklEXT1cIlVzZXJJRFwiXHJcbiAgICAgIFtvcmdhSURdPVwib3JnYUlEXCJcclxuICAgICAgW2NvbmZpZ3VyYXRpb25zXT1cInZpZXdDb25maWdcIlxyXG4gICAgICBbc2hvd0FsbEZpZWxkc109XCJzaG93QWxsRmllbGRzXCJcclxuICAgICAgW1F1ZXJ5RWRpdG9yQ29tcG9uZW50XT1cIlF1ZXJ5RWRpdG9yQ29tcG9uZW50XCJcclxuICAgICAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICAob3V0KT1cIm9uRXh0ZXJuYWxDb21wb25lbnRPdXQoJGV2ZW50KVwiXHJcbiAgICAgIChmaXJlVHJpZ2dlcik9XCJvbkZpcmVUcmlnZ2VyKCRldmVudClcIlxyXG4gICAgICBbaW5Db25maWddPVwidHJ1ZVwiXHJcbiAgICAgID5cclxuICAgIDwvYWRkLWZvcm0tcmVjb3JkPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtdC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGJ1dHRvbi1uZXh0RGl2XCI+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBjbGFzcz1cIm1yLTIgYnV0dG9uLWV4aXRcIlxyXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgbWF0U3RlcHBlclByZXZpb3VzXHJcbiAgICAgICAgKGNsaWNrKT1cInNldEZvcm1TdGF0dXMoZmFsc2UpXCJcclxuICAgICAgPlxyXG4gICAgICAgIFByZWNlZGVudGVcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBjbGFzcz1cImJ1dHRvbi1uZXh0XCJcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgKGNsaWNrKT1cInNhdmVGb3JtKClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgU2FsdmEgZm9ybVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbWF0LXN0ZXA+XHJcbiAgPCEtLSNlbmRyZWdpb24gVklTVUFMSVpaQVpJT05FIEZPUk0gQ1JFQVRBIC0tPlxyXG5cclxuPC9tYXQtaG9yaXpvbnRhbC1zdGVwcGVyPlxyXG5cclxuPCEtLSBESUFMT0cgQUdHSVVOVEEvTU9ESUZJQ0EgQ0FNUE8gLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nRmllbGQ+XHJcbiAgPGVxcC1keW5hbWljLW1vZHVsZS1hZGQtZm9ybS1maWVsZFxyXG4gICAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgICBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiXHJcbiAgICBbZmllbGRdPVwic2VsZWN0ZWRGaWVsZFwiXHJcbiAgICBbaW5kZXhGaWVsZF09XCJpbmRleFNlbGVjdGVkRmllbGRcIlxyXG4gICAgKHNhdmVGaWVsZEV2ZW50KT1cIm9uU2F2ZUZpZWxkKCRldmVudClcIlxyXG4gICAgW2F2YWlsYWJsZUZpZWxkc109XCJmb3JtLkZpZWxkc1wiXHJcbiAgICBbY29udGVzdHVhbGl6YXRpb25dPVwiY29udGVzdHVhbGl6YXRpb25cIlxyXG4gICAgW1F1ZXJ5RWRpdG9yQ29tcG9uZW50XT1cIlF1ZXJ5RWRpdG9yQ29tcG9uZW50XCJcclxuICAgIFtmaWVsZHNFeHRyYUNvbmZpZ109XCJmaWVsZHNFeHRyYUNvbmZpZ1wiXHJcbiAgICBbYWN0aW9uQnV0dG9uc109XCJhY3Rpb25CdXR0b25zXCJcclxuICAgIFtmb3JtRmllbGRzR3JvdXBzXT1cIlxyXG4gICAgICBmb3JtLkZvcm1TY2FsYXJUeXBlICE9IEZvcm1TY2FsYXJUeXBlRW51bS5TZW1wbGljZVxyXG4gICAgICAgID8gZm9ybS5Gb3JtRmllbGRzR3JvdXBzXHJcbiAgICAgICAgOiBudWxsXHJcbiAgICBcIlxyXG5cclxuICAgICAob3V0KT1cIm9uRXh0ZXJuYWxDb21wb25lbnRPdXQoJGV2ZW50KVwiXHJcbiAgPlxyXG4gIDwvZXFwLWR5bmFtaWMtbW9kdWxlLWFkZC1mb3JtLWZpZWxkPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBURU1QTEFURSBQRVIgVklTVUFMSVpaQVJFIExBIENPTE9OTkEgREVMTEEgU0VaSU9ORSBORUxMQSBUQUJFTExBIERFSSBGSUVMRFMgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZmllbGRTZWN0aW9uQ29sdW1uVGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiPlxyXG4gIDxlcXAtc2VsZWN0XHJcbiAgICBbYXJyYXlEYXRhXT1cImZvcm0uRm9ybUZpZWxkc0dyb3Vwc1wiXHJcbiAgICBbKG5nTW9kZWxJbnB1dCldPVwicm93LkZpZWxkR3JvdXBcIlxyXG4gICAgW2FycmF5S2V5UHJvcGVydHldPVwiJ05hbWUnXCJcclxuICAgIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ05hbWUnXCJcclxuICAgIHBsYWNlaG9sZGVyPVwiU2V6aW9uZVwiXHJcbiAgICBbaXNSZXF1aXJlZF09XCJ0cnVlXCJcclxuICAgIFtpbmNsdWRlRnVsbE9iamVjdF09XCJmYWxzZVwiXHJcbiAgPlxyXG4gIDwvZXFwLXNlbGVjdD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gRElBTE9HIFBFUiBBR0dJVU5HRVJFL01PRElGSUNBUkUgVU5BIEFDVElPTiBTVUkgUkVDT1JEIERFTExBIEZPUk0gLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nQWN0aW9uT25SZWNvcmQ+XHJcbiAgXHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJjb250YWluZXItZmx1aWQgdGhpcmQtbW9kYWxcIlxyXG4gICAgc3R5bGU9XCJtYXgtaGVpZ2h0OiA3MHZoICFpbXBvcnRhbnQ7IG92ZXJmbG93LXg6IGhpZGRlbjsgb3ZlcmZsb3cteTogYXV0b1wiXHJcbiAgPlxyXG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJhY3Rpb25PblJlY29yZEZvcm1Hcm91cFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93IHRpdGxlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci10aXRsZS1zdGFuZGFyZFwiPlxyXG4gICAgICAgICAge3tcclxuICAgICAgICAgICAgaW5kZXhTZWxlY3RlZEFjdGlvbiAhPSBudWxsICYmIGluZGV4U2VsZWN0ZWRBY3Rpb24gPj0gMFxyXG4gICAgICAgICAgICAgID8gXCJNb2RpZmljYVwiXHJcbiAgICAgICAgICAgICAgOiBcIkFnZ2l1bmdpXCJcclxuICAgICAgICAgIH19XHJcbiAgICAgICAgICBhemlvbmUgc3VsIHJlY29yZFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD4gTm9tZSA8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiTmFtZVwiXHJcbiAgICAgICAgICAgICAgcmVxdWlyZWRcclxuICAgICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRBY3Rpb24uTmFtZVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTQgbXQtMlwiPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD4gSWNvbmEgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIkljb25cIlxyXG4gICAgICAgICAgICAgIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkQWN0aW9uLkljb25cIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtdC0yXCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPkF6aW9uZSAoSmF2YXNjcmlwdCk8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPHRleHRhcmVhXHJcbiAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICBbcm93c109XCIzXCJcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJBY3Rpb25cIlxyXG4gICAgICAgICAgICAgIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEFjdGlvbi5BY3Rpb25cIlxyXG4gICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYWN0aW9uQXV0b2NvbXBsZXRlXCJcclxuICAgICAgICAgICAgICAoa2V5dXApPVwic2V0QWN0aW9uQXV0b2NvbXBsZXRlT3B0aW9ucygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAoZm9jdXMpPVwic2V0QWN0aW9uQXV0b2NvbXBsZXRlT3B0aW9ucyhudWxsKVwiXHJcbiAgICAgICAgICAgICAgc3R5bGU9XCJcclxuICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGxpZ2h0Z3JheSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjYWN0aW9uQXV0b2NvbXBsZXRlPVwibWF0QXV0b2NvbXBsZXRlXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgYWN0aW9uQXV0b2NvbXBsZXRlT3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyBvcHRpb24ubGFiZWwgfX1cclxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIG10LTIgbWItMVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b25zRm9ybVwiPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBtYXQtcmFpc2VkLWJ1dHRvbiBjYW5jZWxcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiY2xvc2VEaWFsb2dBY3Rpb25PblJlY29yZCgpXCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIEFubnVsbGFcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBjbGFzcz1cIm1yLTIgc2F2ZVwiXHJcbiAgICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJzYXZlQWN0aW9uT25SZWNvcmQoKVwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhY3Rpb25PblJlY29yZEZvcm1Hcm91cC5pbnZhbGlkXCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIFNhbHZhXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Zvcm0+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIERJQUxPRyBQRVIgQUdHSVVOR0VSRS9NT0RJRklDQVJFIFVOIEJPVFRPTkUgQVpJT05FIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ0FjdGlvbkJ1dHRvbj5cclxuICA8YWN0aW9uLWJ1dHRvbi1jcmVhdG9yIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCIgW2Zvcm1dPVwiZm9ybVwiIFtmb3JtdWxhc109XCJhY3Rpb25CdXR0b25zXCIgW2FjdGlvbkJ1dHRvbl09XCJzZWxlY3RlZEFjdGlvbkJ1dHRvblwiIChvblNhdmVSZWNvcmQpPVwic2F2ZUFjdGlvbkJ1dHRvbnMoJGV2ZW50KVwiPjwvYWN0aW9uLWJ1dHRvbi1jcmVhdG9yPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBURU1QTEFURSBQRVIgQ09ORklHVVJBUkUgTEUgRk9STSBESSBERVRUQUdMSU8gLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nSW5uZXJGb3JtPlxyXG4gIDwhLS0gW2Zvcm1dPVwic2VsZWN0ZWRJbm5lckZvcm1cIlxyXG4gICAgW2lubmVyRm9ybU1hbmFnbWVudF09XCJ0cnVlXCJcclxuICAgIFtpbm5lckZvcm1SZWZdPVwiZGlhbG9nSW5uZXJGb3JtUmVmXCIgLS0+XHJcbiAgPGVxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3JcclxuICAgIFtQcm9qZWN0TmFtZV09XCJQcm9qZWN0TmFtZVwiXHJcbiAgICBbY29uZmlndXJhdGlvbnNdPVwiaW5uZXJGb3JtQ29uZmlnXCJcclxuICAgIChzYXZlRm9ybUV2ZW50KT1cIm9uU2F2ZU9yRXhpdElubmVyRm9ybSgkZXZlbnQpXCJcclxuICA+XHJcbiAgPC9lcXAtZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBURU1QTEFURSBQRVIgSU1QT1JUIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ0ltcG9ydD5cclxuICA8bWF0LWNhcmQgY2xhc3M9XCJpbXBvcnREaWFsb2dcIj5cclxuICAgIDxtYXQtY2FyZC1oZWFkZXIgY2xhc3M9XCJwLTIganVzdGlmeS1jb250ZW50LWFyb3VuZFwiPiBcclxuICAgICAgPG1hdC1jYXJkLXRpdGxlPlxyXG4gICAgICAgIEltcG9ydFxyXG4gICAgICA8L21hdC1jYXJkLXRpdGxlPiAgICAgICAgXHJcbiAgICA8L21hdC1jYXJkLWhlYWRlcj5cclxuICAgIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwicC0yXCI+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIGNsYXNzPVwiaW5wdXQtZmlsZS1idG4gcGItMlwiIChjaGFuZ2UpPVwib25JbXBvcnQoJGV2ZW50KVwiIC8+XHJcbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICA8bWF0LWNhcmQtZm9vdGVyIGNsYXNzPVwicC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBjbGFzcz1cImJ0biBidG4tY2xlYXIgYnV0dG9uLWJhY2sgbWUtMlwiXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICBjb2xvcj1cImRpc2FibGVkXCJcclxuICAgICAgICAoY2xpY2spPVwiY2xvc2VJbXBvcnQoKVwiXHJcbiAgICAgID5cclxuICAgICAgICBBbm51bGxhXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9tYXQtY2FyZC1mb290ZXI+XHJcbiAgPC9tYXQtY2FyZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gRElBTE9HIFBFUiBBR0dJVU5HRVJFL01PRElGSUNBUkUgSSBUUklHR0VSUyAtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dUcmlnZ2Vycz5cclxuICA8dHJpZ2dlci1jcmVhdG9yIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCIgW2Zvcm1dPVwiZm9ybVwiIFtmb3JtdWxhc109XCJ0cmlnZ2Vyc1wiIFt0cmlnZ2VyXT1cInNlbGVjdGVkVHJpZ2dlclwiIChvblNhdmVSZWNvcmQpPVwic2F2ZVRyaWdnZXIoJGV2ZW50KVwiPjwvdHJpZ2dlci1jcmVhdG9yPlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
|
|
1360
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydGVkL2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3IvZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydGVkL2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3IvZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpREFBaUQ7QUFDakQsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLGtCQUFrQixFQUVsQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQ0wsaUJBQWlCLEVBR2pCLFVBQVUsR0FDWCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xJLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RCxPQUFPLEVBR0wsYUFBYSxHQUNkLE1BQU0sNkNBQTZDLENBQUM7QUFDckQsT0FBTyxFQUNMLGNBQWMsRUFDZCxJQUFJLEVBRUosa0JBQWtCLEVBQ2xCLFlBQVksR0FDYixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFB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QUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFROUMsb0JBQW9CO3NCQURuQixTQUFTO3VCQUFDLHNCQUFzQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFNcEQsb0JBQW9CO3NCQURuQixTQUFTO3VCQUFDLHNCQUFzQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFPbkQsa0JBQWtCO3NCQURqQixTQUFTO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFNbEQsa0JBQWtCO3NCQURqQixTQUFTO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFVdkMsYUFBYTtzQkFBdEIsTUFBTTtnQkFLRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBR0csR0FBRztzQkFBWixNQUFNO2dCQUl3QyxjQUFjO3NCQUE1RCxTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHRSxhQUFhO3NCQUEzRCxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBpbXBvcnQgeyBUaHJvd1N0bXQgfSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1xyXG4gIFVudHlwZWRGb3JtQnVpbGRlcixcclxuICBVbnR5cGVkRm9ybUNvbnRyb2wsXHJcbiAgVW50eXBlZEZvcm1Hcm91cCxcclxuICBWYWxpZGF0b3JzLFxyXG59IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuaW1wb3J0IHtcclxuICBDZWxsQWxpZ25tZW50RW51bSxcclxuICBDb25maWdDb2x1bW4sXHJcbiAgRXFwVGFibGVDb21wb25lbnQsXHJcbiAgVHlwZUNvbHVtbixcclxufSBmcm9tIFwiQGVxcHJvamVjdC9lcXAtdGFibGVcIjtcclxuaW1wb3J0IHsgTnVtZXJpY0ZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWVsZHMvbnVtZXJpY0ZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEJhc2VGaWVsZCwgRGF0YUdldHRlciwgRGF0YUdldHRlclR5cGVFbnVtLCBGaWVsZEludmlzaWJpbGl0eUVudW0sIEZpZWxkVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvY29udGV4dC5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIEVuZFBvaW50Q29uZmlndXJhdGlvbixcclxuICBFbmRQb2ludERhdGFQYXJhbXMsXHJcbiAgUGFyYW1UeXBlRW51bSxcclxufSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2VuZFBvaW50Q29uZmlndXJhdGlvbi5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIEFjdGlvbk9uUmVjb3JkLFxyXG4gIEZvcm0sXHJcbiAgRm9ybUZpZWxkR3JvdXAsXHJcbiAgRm9ybVNjYWxhclR5cGVFbnVtLFxyXG4gIEZvcm1UeXBlRW51bSxcclxufSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2Zvcm0ubW9kZWxcIjtcclxuaW1wb3J0IHsgQXJyYXlWYWxpZGF0b3JzIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL2N1c3RvbS1mb3JtLXZhbGlkYXRvcnMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9lcXAtZHluYW1pYy1tb2R1bGUtZGlhbG9nLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVXRpbGl0eUhlbHBlclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlc1wiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZyB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbmZpZyB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IER5bmFtaWNMb2FkZXJEaXJlY3RpdmVEYXRhLCBldmVudE91dCB9IGZyb20gXCIuLi8uLi8uLi9kaXJlY3RpdmVzL2R5bmFtaWMtbG9hZGVyL2R5bmFtaWMtbG9hZGVyLmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQgeyBUcmlnZ2VyLCBBY3Rpb25CdXR0b24sIEFjdGlvbkZsYWdFbnVtLCBGaXJlVHJpZ2dlciB9IGZyb20gJy4uLy4uLy4uL21vZGVscy90cmlnZ2VyLm1vZGVsJztcclxuaW1wb3J0IHsgQ29udGVzdHVhbGl6YXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2dldHRlci5tb2RlbFwiO1xyXG5pbXBvcnQgeyBJbWFnZVNlbGVjdG9yRmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9pbWFnZVNlbGVjdG9yRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgRmllbGRFeHRyYUNvbmZpZyB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmllbGRFeHRyYUNvbmZpZy5tb2RlbFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvclwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9lcXAtZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yLmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRXFwRHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgXHJcbiAgQElucHV0KCkgZGVidWdNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIGZpZWxkc0V4dHJhQ29uZmlnOiBBcnJheTxGaWVsZEV4dHJhQ29uZmlnPjtcclxuICBASW5wdXQoKSBjb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbmZpZyA9XHJcbiAgICBuZXcgRHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbmZpZygpO1xyXG4gIEBJbnB1dCgpIGZvcm1JRDogc3RyaW5nID0gbnVsbDtcclxuICBASW5wdXQoKSBQcm9qZWN0TmFtZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHZpZXdNb2RlOiBzdHJpbmcgPSBcImFkZE9yRWRpdFwiOyAvLyBFeHBvcnRcclxuICBASW5wdXQoKSBRdWVyeUVkaXRvckNvbXBvbmVudDogRHluYW1pY0xvYWRlckRpcmVjdGl2ZURhdGE7IC8vIEwnaW50ZXJvIGNvbXBvbmVudGUgcXVlcnkgRWRpdG9yXHJcbiAgQElucHV0KCkgdHJpZ2dlcnM6IGFueTtcclxuICBASW5wdXQoKSBhY3Rpb25CdXR0b25zOiBhbnk7XHJcbiAgQElucHV0KCkgY29udGVzdHVhbGl6YXRpb246IEFycmF5PENvbnRlc3R1YWxpemF0aW9uPjtcclxuXHJcbiAgQE91dHB1dCgpIGZpcmVUcmlnZ2VyOiBFdmVudEVtaXR0ZXI8RmlyZVRyaWdnZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaXJlVHJpZ2dlcj4oKTtcclxuXHJcbiAgbG9hZGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogVG9rZW4gZGEgdXNhcmUgbmVnbGkgZW5kcG9pbnQgZGEgY2hpYW1hcmUgcGVyIHJlY3VwZXJhcmUgbyBzYWx2YXJlIGkgcmVjb3JkLlxyXG4gICAqIFVzYXRvIHNvbG8gc2UgdmllbmUgcG9wb2xhdGEgbGEgcHJvcHJpZXTDoCBcImJhc2VTZXJ2ZXJVcmxcIi5cclxuICAgKi9cclxuICB1c2VyVG9rZW46IHN0cmluZyA9IG51bGw7XHJcbiAgLyoqXHJcbiAgICogQ29uZmlndXJhemlvbmUgZGVnbGkgZW5kcG9pbnQgZGEgY2hpYW1hcmUgcGVyIHJlY3VwZXJhcmUgbyBzYWx2YXJlIGkgZGF0aS5cclxuICAgKiBQdcOyIGVzc2VyZSBkZWZpbml0YSBkYWxsJ3V0ZW50ZSBvcHB1cmUgbGFzY2lhdGEgbnVsbCwgdmllbmUgcG9wb2xhdGEgY29uIGRlaVxyXG4gICAqIHZhbG9yaSBkaSBkZWZhdWx0IHNlIHZpZW5lIHZhbG9yaXp6YXRhIGxhIHByb3ByaWV0w6AgXCJiYXNlU2VydmVyVXJsXCIgYWx0cmltZW50aVxyXG4gICAqIHZpZW5lIGxhc2NpYXRhIG51bGwgZSBub24gdmllbmUgZXNlZ3VpdGEgbmVzc3VuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIuXHJcbiAgICovXHJcbiAgZW5kUG9pbnRDb25maWd1cmF0aW9uOiBFbmRQb2ludENvbmZpZ3VyYXRpb24gPSBudWxsO1xyXG4gIC8qKlxyXG4gICAqIFVybCBkZWwgc2VydmVyIGRhIGNoaWFtYXJlIHBlciByZWN1ZXJhcmUsIHNhbHZhcmUgbyBlbGltaW5hcmUgaSByZWNvcmQuXHJcbiAgICogVXNhdG8gcGVyIGNyZWFyZSBsYSBjb25maWd1cmF6aW9uZSBkaSBkZWZhdWx0IGRlZ2xpIGVuZHBvaW50IGRhIGNoaWFtYXJlLlxyXG4gICAqL1xyXG4gIGJhc2VTZXJ2ZXJVcmw6IHN0cmluZyA9IG51bGw7XHJcbiAgY29udGV4dDogQ29udGV4dCA9IG5ldyBDb250ZXh0KCk7XHJcblxyXG4gIC8qIGV4cG9ydCB2YXJpYWJsZXMgKi9cclxuICBkb3dubG9hZE5hbWU6IHN0cmluZztcclxuICBkb3dubG9hZEpzb25IcmVmOiBhbnk7XHJcbiAgc3RyaW5naWZpZWRGb3JtOiBzdHJpbmc7XHJcblxyXG4gIC8qIGltcG9ydCB2YXJpYWJsZXMgKi9cclxuICBpbXBvcnRlZE1vZHVsZTogc3RyaW5nID0gbnVsbDsgLy8ganNvbiBvYmplY3RcclxuICBkaWFsb2dJbXBvcnRSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICBAVmlld0NoaWxkKFwiZGlhbG9nSW1wb3J0XCIsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ0ltcG9ydDogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgZm9ybTogRm9ybSA9IG5ldyBGb3JtKCk7XHJcbiAgYmFja3VwRm9ybTogRm9ybSA9IG51bGw7XHJcbiAgc2F2ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBvcmdhSUQ6IHN0cmluZyA9IG51bGw7XHJcbiAgVXNlcklEOiBudW1iZXIgPSAzNjtcclxuICBpbm5lckZvcm1NYW5hZ21lbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpbm5lckZvcm1SZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuXHJcbiAgLyogQ09ORklHVVJBWklPTkUgUEVSIFZJU1VBTElaWkFaSU9ORSBGT1JNIENSRUFUQSAqL1xyXG4gIHZpZXdDb25maWc6IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnID0gbmV3IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnKFxyXG4gICAgdHJ1ZSxcclxuICAgIGZhbHNlLFxyXG4gICAgZmFsc2UsXHJcbiAgICBcIjBcIlxyXG4gICk7XHJcblxyXG4gIGZvcm1Gb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAgPSBudWxsO1xyXG4gIGZvcm1Db21wbGV0ZWQgPSBmYWxzZTtcclxuICBwcmV2aWV3Rm9ybTogRm9ybTtcclxuICBmb3JtRmllbGRHcm91cE5hbWU6IHN0cmluZztcclxuXHJcbiAgYWN0aW9uQXV0b2NvbXBsZXRlT3B0aW9uczogQXJyYXk8eyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+O1xyXG5cclxuICAvLyNyZWdpb24gRW51bWVyYXRvcmkgdXNhdGkgbmVsbCdodG1sXHJcbiAgRm9ybVR5cGVFbnVtID0gRm9ybVR5cGVFbnVtO1xyXG4gIEZvcm1TY2FsYXJUeXBlRW51bSA9IEZvcm1TY2FsYXJUeXBlRW51bTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIFByb3ByaWV0w6AgcGVyIGNyZWF6aW9uZS9tb2RpZmljYSBjYW1wb1xyXG4gIGZpZWxkc0NvbHVtbnM6IEFycmF5PENvbmZpZ0NvbHVtbj47XHJcbiAgQFZpZXdDaGlsZChcImZpZWxkc1RhYmxlXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBmaWVsZHNUYWJsZTogRXFwVGFibGVDb21wb25lbnQ7XHJcbiAgc2VsZWN0ZWRGaWVsZDogQmFzZUZpZWxkIHwgYW55O1xyXG4gIGluZGV4U2VsZWN0ZWRGaWVsZDogbnVtYmVyO1xyXG4gIGFjdGlvbk9uUmVjb3JkRm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG4gIGRpYWxvZ0ZpZWxkUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ0ZpZWxkXCIsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ0ZpZWxkOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJmaWVsZFNlY3Rpb25Db2x1bW5UZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGZpZWxkU2VjdGlvbkNvbHVtblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gUHJvcHJpZXTDoCBwZXIgY3JlYXJlL21vZGlmaWNhcmUgdW5hIEZvcm0gZGkgZGV0dGFnbGlvXHJcbiAgc2VsZWN0ZWRJbm5lckZvcm06IEZvcm07XHJcbiAgaW5kZXhTZWxlY3RlZElubmVyRm9ybTogbnVtYmVyO1xyXG4gIGRpYWxvZ0lubmVyRm9ybVJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dJbm5lckZvcm1cIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBkaWFsb2dJbm5lckZvcm06IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgaW5uZXJGb3JtQ29uZmlnOiBEeW5hbWljTW9kdWxlQ29uZmlndXJhdG9yQ29uZmlnO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gUHJvcHJpZXTDoCBwZXIgY3JlYXJlL21vZGlmaWNhcmUgdW5hIGFjdGlvbiBzdWkgcmVjb3JkIGRpIHVuYSBGb3JtXHJcbiAgYWN0aW9uc09uUmVjb3JkQ29sdW1uczogQXJyYXk8Q29uZmlnQ29sdW1uPjtcclxuICBAVmlld0NoaWxkKFwiYWN0aW9uc09uUmVjb3JkVGFibGVcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgYWN0aW9uc09uUmVjb3JkVGFibGU6IEVxcFRhYmxlQ29tcG9uZW50O1xyXG4gIHNlbGVjdGVkQWN0aW9uOiBBY3Rpb25PblJlY29yZDtcclxuICBpbmRleFNlbGVjdGVkQWN0aW9uOiBudW1iZXI7XHJcbiAgZGlhbG9nQWN0aW9uT25SZWNvcmRSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICBAVmlld0NoaWxkKFwiZGlhbG9nQWN0aW9uT25SZWNvcmRcIiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBkaWFsb2dBY3Rpb25PblJlY29yZDogVGVtcGxhdGVSZWY8YW55PjtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIFByb3ByaWV0w6AgcGVyIGNyZWFyZS9tb2RpZmljYXJlIGRlaSBib3R0b25pIGF6aW9uZVxyXG4gIGFjdGlvbkJ1dHRvbnNDb2x1bW5zOiBBcnJheTxDb25maWdDb2x1bW4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJhY3Rpb25CdXR0b25zVGFibGVcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgYWN0aW9uQnV0dG9uc1RhYmxlOiBFcXBUYWJsZUNvbXBvbmVudDtcclxuICBzZWxlY3RlZEFjdGlvbkJ1dHRvbjogQWN0aW9uQnV0dG9uO1xyXG4gIGluZGV4U2VsZWN0ZWRBY3Rpb25CdXR0b246IG51bWJlcjtcclxuICBkaWFsb2dBY3Rpb25CdXR0b25SZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICBAVmlld0NoaWxkKFwiZGlhbG9nQWN0aW9uQnV0dG9uXCIsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgZGlhbG9nQWN0aW9uQnV0dG9uOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBhY3Rpb25CdXR0b25zRm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG4gIGFjdGlvbnNGbGFnID0gQWN0aW9uRmxhZ0VudW07XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50byBlbWVzc28gcXVhbmRvIHNpIHNhbHZhIHVuYSBmb3JtIGUgbm9uIMOoIHN0YXRvIHNwZWNpZmljYXRvIHVuIGVuZHBvaW50IGRhIGNoaWFtYXJlLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBzYXZlRm9ybUV2ZW50OiBFdmVudEVtaXR0ZXI8Rm9ybT4gPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm0+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50byBlbWVzc28gRE9QTyBhdmVyIGVzZWd1aXRvIHVuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIgcGVyIGlsIHNhbHZhdGFnZ2lvZGkgdW5hIGZvcm0gYWxsJ2VuZHBvaW50IHNwZWNpZmljYXRvLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBhZnRlclNhdmVGb3JtRXZlbnQ6IEV2ZW50RW1pdHRlcjxGb3JtPiA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9ybT4oKTtcclxuXHJcbiAgLy8gT3V0IGNvbXBvbmVudGUgZXN0ZXJub1xyXG4gIEBPdXRwdXQoKSBvdXQ6IEV2ZW50RW1pdHRlcjxldmVudE91dD4gPSBuZXcgRXZlbnRFbWl0dGVyPGV2ZW50T3V0PigpO1xyXG5cclxuICAvLyBUcmlnZ2Vyc1xyXG4gIGRpYWxvZ1RyaWdnZXJzUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ1RyaWdnZXJzXCIsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ1RyaWdnZXJzOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIHNlbGVjdGVkVHJpZ2dlcjogVHJpZ2dlcjtcclxuICB0cmlnZ2Vyc0NvbHVtbnM6IEFycmF5PENvbmZpZ0NvbHVtbj47XHJcbiAgQFZpZXdDaGlsZChcInRyaWdnZXJzVGFibGVcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIHRyaWdnZXJzVGFibGU6IEVxcFRhYmxlQ29tcG9uZW50O1xyXG5cclxuICBzaG93QWxsRmllbGRzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIENvbnRlc3R1YWxpemF0aW9uXHJcbiAgc2VsZWN0ZWRDb250ZXN0dWFsaXphdGlvbjogc3RyaW5nID0gbnVsbDtcclxuICBzZWxlY3RlZENvbnRlc3R1YWxpemF0aW9uVmFsdWU6IG51bWJlciA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgdXRpbGl0eUhlbHBlclNlcnZpY2U6IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplclxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTW9kZSA9IHRoaXMuZGVidWdNb2RlO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnbmdPbkluaXQgLSBjb25maWd1cmF0aW9ucycsIHRoaXMuY29uZmlndXJhdGlvbnMpO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnbmdPbkluaXQgLSBmb3JtSUQnLCB0aGlzLmZvcm1JRCk7XHJcblxyXG4gICAgdGhpcy5iYXNlU2VydmVyVXJsID1cclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlR2VuZXJhbENvbmZpZy5iYXNlU2VydmVyVXJsO1xyXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlR2VuZXJhbENvbmZpZy5jb250ZXh0O1xyXG4gICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gPVxyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnLmVuZFBvaW50Q29uZmlndXJhdGlvbjtcclxuICAgIC8vIHRoaXMuZm9ybUlEID0gdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlR2VuZXJhbENvbmZpZy5mb3JtSUQ7XHJcbiAgICB0aGlzLnVzZXJUb2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUdlbmVyYWxDb25maWcudXNlclRva2VuO1xyXG5cclxuICAgIHRoaXMuZm9ybSA9XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmZvcm07XHJcbiAgICB0aGlzLm9yZ2FJRCA9XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLm9yZ2FJRDtcclxuICAgIHRoaXMuVXNlcklEID1cclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuVXNlcklEO1xyXG4gICAgdGhpcy5pbm5lckZvcm1NYW5hZ21lbnQgPVxyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5pbm5lckZvcm1NYW5hZ21lbnQ7XHJcbiAgICB0aGlzLmlubmVyRm9ybVJlZiA9XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmlubmVyRm9ybVJlZjtcclxuXHJcbiAgICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuXHJcbiAgICB0aGlzLmNvbmZpZ3VyZURlZmF1bHRFbmRQb2ludHMoKTtcclxuICAgIHRoaXMuZ2V0Rm9ybUJ5SUQoKTtcclxuICAgIGlmICh0aGlzLmNvbnRleHQpIHtcclxuICAgICAgVXRpbGl0eUhlbHBlclNlcnZpY2UuU2V0Q29udGV4dCh0aGlzLmNvbnRleHQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjb25maWd1cmFyZSBnbGkgZW5kcG9pbnQgZGEgdXNhcmUgZGkgZGVmYXVsdCBhIHBhcnRpcmUgZGFsbCd1cmwgYmFzZSBkZWwgc2VydmVyXHJcbiAgICogYSBjdWkgc2kgZGV2ZSBjb25uZXR0ZXJlIGUgYWwgdG9rZW4gZGEgcGFzc2FyZSBwZXIgYXV0ZW50aWNhcnNpLlxyXG4gICAqIFNlIGxhIHByb3ByaWV0w6AgYmFzZVNlcnZlclVybCDDqCBudWxsIGUgbm9uIHNvbm8gc3RhdGkgY29uZmlndXJhdGkgaSB2YXJpIGVuZHBvaW50IGFsbG9yYVxyXG4gICAqIG5vbiB2aWVuZSBlc2VndWl0YSBuZXNzdW5hIGNoaWFtYXRhIGh0dHAgcGVyIHJlY3VwZXJhcmUvc2FsdmFyZSBpIGRhdGkuXHJcbiAgICovXHJcbiAgY29uZmlndXJlRGVmYXVsdEVuZFBvaW50cygpIHtcclxuICAgIGlmICghdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiYgdGhpcy5iYXNlU2VydmVyVXJsKSB7XHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uID1cclxuICAgICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLkNvbmZpZ3VyZURlZmF1bHRFbmRQb2ludHMoXHJcbiAgICAgICAgICB0aGlzLmJhc2VTZXJ2ZXJVcmwsXHJcbiAgICAgICAgICB0aGlzLnVzZXJUb2tlblxyXG4gICAgICAgICk7XHJcbiAgICAgIGlmICh0aGlzLmZvcm1JRCkge1xyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludC5QYXJhbXMgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm1JRCxcclxuICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgc3RyaW5nU2FuaXRpemVyKHZhbHVlKSB7XHJcbiAgICBpZiAoIVV0aWxpdHlIZWxwZXJTZXJ2aWNlLnN0cmluZ0NoZWNrUGFyZW50ZXNpcyh2YWx1ZSkpIHtcclxuICAgICAgYWxlcnQoXCJlcnJvcmUhIGVyYW5vIHByZXNlbnRpIGRlbGxlIHBhcmVudGVzaS5cIik7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuICB9XHJcbiAgc2V0TmFtZShOYW1lOiBzdHJpbmcpIHtcclxuICAgIGlmKCF0aGlzLnN0cmluZ1Nhbml0aXplcihOYW1lKSl7XHJcbiAgICAgIGNvbnN0IFJlZ0V4cFBhcmV0ZXNpcyA9IC9bXFwoXFwpXFxbXFxdXFx7XFx9XS9nO1xyXG4gICAgICAvLyBSaW11b3ZpIHR1dHRlIGxlIHBhcmVudGVzaSBub24gYmlsYW5jaWF0ZVxyXG4gICAgICB0aGlzLmZvcm0uTmFtZSA9IE5hbWUucmVwbGFjZShSZWdFeHBQYXJldGVzaXMsICcnKTtcclxuICAgIH1cclxuICAgIGlmKHRoaXMuZm9ybS5JRCA9PSBudWxsKXsgLy8gdGhpcy5mb3JtLkNvZGUgPT0gbnVsbCB8fCB0aGlzLmZvcm0uQ29kZSA9PSB1bmRlZmluZWQgfHwgdGhpcy5mb3JtLkNvZGUgPT0gXCJcIiApe1xyXG4gICAgICB0aGlzLnNldENvZGUodGhpcy5mb3JtLk5hbWUpO1xyXG4gICAgfVxyXG4gIH1cclxuICBzZXRDb2RlKENvZGU6IHN0cmluZykge1xyXG4gICAgdGhpcy5zdHJpbmdTYW5pdGl6ZXIoQ29kZSk7XHJcbiAgICBcclxuICAgIGNvbnN0IFJlZ0V4cFBsYWluID0gL1teXFx3XS9nO1xyXG4gICAgdGhpcy5mb3JtLkNvZGUgPSBDb2RlLnRvVXBwZXJDYXNlKCkucmVwbGFjZShSZWdFeHBQbGFpbiwgXCJcIik7XHJcbiAgfVxyXG4gIG9taXRfc3BlY2lhbF9jaGFyKGV2ZW50KSB7XHJcbiAgICB2YXIgaztcclxuICAgIGsgPSBldmVudC5rZXlDb2RlOyAvLyAgICAgICAgIGsgPSBldmVudC5rZXlDb2RlOyAgKEJvdGggY2FuIGJlIHVzZWQpXHJcbiAgICBpZiAoayA9PSAzNCkge1xyXG4gICAgICBldmVudC5rZXlDb2RlID0gMDtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyogSU1QT1JUIEZVTkNUSU9OICovXHJcbiAgb25JbXBvcnQoZXZlbnQpIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkRmlsZSA9IGV2ZW50LnRhcmdldC5maWxlc1swXTtcclxuICAgIGNvbnN0IGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgZmlsZVJlYWRlci5yZWFkQXNUZXh0KHNlbGVjdGVkRmlsZSwgXCJVVEYtOFwiKTtcclxuICAgIGZpbGVSZWFkZXIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnb25JbXBvcnQgLSBmaWxlUmVhZGVyLnJlc3VsdC50b1N0cmluZygpJywgZmlsZVJlYWRlci5yZXN1bHQudG9TdHJpbmcoKSk7XHJcbiAgICAgIHRoaXMuaW1wb3J0ZWRNb2R1bGUgPSBmaWxlUmVhZGVyLnJlc3VsdC50b1N0cmluZygpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaW1wb3J0ZWRNb2R1bGUgIT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChjb25maXJtKFwic3RhaSBwZXIgc292cmFzY3JpdmVyZSBpbCBtb2R1bG9cIikpIHtcclxuICAgICAgICAgIC8vIGNoaWFtbyBpbCBwYXJzZSBjb3PDrCBkYSBub24gY3JlYXJlIHVuIHJlZmVyZW5jZUJpbmRpbmdcclxuICAgICAgICAgIHZhciBpbXBvcnRlZEZvcm06IEZvcm0gPSBKU09OLnBhcnNlKHRoaXMuaW1wb3J0ZWRNb2R1bGUpO1xyXG4gICAgICAgICAgaW1wb3J0ZWRGb3JtLklEID0gXCJcIjtcclxuICAgICAgICAgIGltcG9ydGVkRm9ybS5OYW1lID0gaW1wb3J0ZWRGb3JtLk5hbWUgKyBcIiAoSW1wb3J0YXRvKVwiO1xyXG5cclxuICAgICAgICAgIGltcG9ydGVkRm9ybSA9IHRoaXMuc2V0SW1wb3J0ZWRGb3JtKGltcG9ydGVkRm9ybSk7XHJcbiAgICAgICAgICB0aGlzLnNldEZvcm1BbmRDb25maWd1cmUoaW1wb3J0ZWRGb3JtKTtcclxuICAgICAgICAgIHRoaXMuc2V0TmFtZShpbXBvcnRlZEZvcm0uTmFtZSk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHRoaXMuY2xvc2VJbXBvcnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYWxlcnQoXCJzZWxlemlvbmEgdW4gZmlsZVwiKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIGZpbGVSZWFkZXIub25lcnJvciA9IChlcnJvcikgPT4ge1xyXG4gICAgICBhbGVydChcInNlbGV6aW9uYSB1biBmaWxlIHZhbGlkbyBvIGNvbnRyb2xsYSBjaGUgbm9uIHNpYSBjb3Jyb3R0b1wiKTtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgc2V0SW1wb3J0ZWRGb3JtKGZvcm06IEZvcm0pe1xyXG5cclxuICAgIC8vIE1vZGlmaWNhIGRlbCBjcmVhdGlvbiB1c2VyIHN1IEltcG9ydFxyXG4gICAgZm9ybS5DcmVhdGlvblVzZXIgPSB0aGlzLlVzZXJJRDtcclxuXHJcbiAgICAvLyBNb2RpZmljYSBkZWkgRmllbGQgc3UgSW1wb3J0XHJcbiAgICBmb3JtLkZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICBpZiAoZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bXCJFbGVuY28gaW1tYWdpbmlcIl0pe1xyXG4gICAgICAgIChmaWVsZCBhcyBJbWFnZVNlbGVjdG9yRmllbGQpLkF0dGFjaG1lbnRMaXN0LmZvckVhY2goKGF0dGFjaG1lbnQpID0+IHtcclxuICAgICAgICAgIGF0dGFjaG1lbnQuSUQgPSAwO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGZvcm07XHJcbiAgfVxyXG5cclxuICBpbXBvcnRNb2R1bGUoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ0ltcG9ydFJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dJbXBvcnQsIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgLy8gd2lkdGg6IFwiNzUlXCIsXHJcbiAgICAgIC8vIG1heEhlaWdodDogXCI4MCVcIixcclxuICAgICAgLy8gaGVpZ2h0OiBcIjgwJVwiLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZUltcG9ydCgpIHtcclxuICAgIHRoaXMuZGlhbG9nSW1wb3J0UmVmLmNsb3NlKCk7XHJcbiAgfVxyXG4gIC8qIEVORCBJTVBPUlQgRlVOQ1RJT04gKi9cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bnppb25lIGRpIGVzcG9ydGF6aW9uZSBtb2R1bG9cclxuICAgKi9cclxuXHJcbiAgZXhwb3J0KCl7XHJcblxyXG4gICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybUlELFxyXG4gICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkV4cG9ydEJ5SURFbmRQb2ludCxcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgKGJhc2U2NHJlczogc3RyaW5nKSA9PiB7XHJcblxyXG4gICAgICAgIGNvbnN0IG5ld0Jsb2IgPSBuZXcgQmxvYihbYmFzZTY0cmVzXSwgeyB0eXBlOiBcInRleHQvcGxhaW5cIiB9KTtcclxuICAgICAgICBjb25zdCBkYXRhID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobmV3QmxvYik7XHJcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgIGxpbmsuaHJlZiA9IGRhdGE7XHJcbiAgICAgICAgbGluay5kb3dubG9hZCA9IFwiZXhwb3J0X1wiK3RoaXMuZm9ybUlEK1wiX2Zvcm0udHh0XCI7IC8vIHNldCBhIG5hbWUgZm9yIHRoZSBmaWxlXHJcbiAgICAgICAgbGluay5jbGljaygpO1xyXG4gICAgICAgIFxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtQW5kQ29uZmlndXJlKG5ldyBGb3JtKCkpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmVjdXBlcmFyZSB0dXR0aSBpIHJlY29yZCBzYWx2YXRpIHBlciB1bmEgcGFydGljb2xhcmUgRm9ybS5cclxuICAgKiBMYSBjaGlhbWF0YSB2aWVuZSBlZmZldHR1YXRhIHNvbG8gc2Ugw6ggc3RhdG8gY29uZmlndXJhdG8gbCdlbmRQb2ludCBkYSB1c2FyZS5cclxuICAgKi9cclxuICBnZXRGb3JtQnlJRCgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5mb3JtSUQgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50XHJcbiAgICApIHtcclxuICAgICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm1JRCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICAgIHRoaXMuc2V0Rm9ybUFuZENvbmZpZ3VyZShyZXMpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZXRGb3JtQW5kQ29uZmlndXJlKG5ldyBGb3JtKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybUFuZENvbmZpZ3VyZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29uZmlndXJvIGwnZXhwb3J0IGRlbCBmb3JtXHJcbiAgICovXHJcblxyXG4gIGNvbmZpZ3VyZUV4cG9ydChyZXM6IEZvcm0pIHtcclxuXHJcbiAgICAgIC8qIGdldHRpbmcgcmVhZHkgZm9yIGV4cG9ydCAqL1xyXG4gICAgICBsZXQgY2xvbmUgPSBuZXcgRm9ybSgpO1xyXG4gICAgICBjbG9uZS5Db2RlID0gXCJJTVBPUlRfXCIgKyByZXMuQ29kZTtcclxuICAgICAgY2xvbmUuTmFtZSA9IFwiaW1wb3J0X1wiICsgcmVzLk5hbWU7XHJcbiAgICAgIGNsb25lLkRlc2NyaXB0aW9uID0gcmVzLkRlc2NyaXB0aW9uO1xyXG4gICAgICBjbG9uZS5Gb3JtU2NhbGFyVHlwZSA9IHJlcy5Gb3JtU2NhbGFyVHlwZTtcclxuICAgICAgY2xvbmUuRm9ybUZpZWxkc0dyb3VwcyA9IHJlcy5Gb3JtRmllbGRzR3JvdXBzO1xyXG4gICAgICBjbG9uZS5BY3Rpb25zT25SZWNvcmQgPSByZXMuQWN0aW9uc09uUmVjb3JkO1xyXG4gICAgICBjbG9uZS5GaWVsZHMgPSByZXMuRmllbGRzO1xyXG4gICAgICBjbG9uZS5PYmplY3RGaWVsZHMgPSByZXMuT2JqZWN0RmllbGRzO1xyXG4gICAgICBjbG9uZS5Jbm5lckZvcm1zID0gcmVzLklubmVyRm9ybXM7XHJcbiAgICAgIGNsb25lLlJvb3RFbnRpdHlJRCA9IHJlcy5Sb290RW50aXR5SUQ7XHJcbiAgICAgIGNsb25lLk9yZ2FJRCA9IHJlcy5PcmdhSUQ7XHJcblxyXG4gICAgICB0aGlzLmRvd25sb2FkTmFtZSA9IFwiZXhwb3J0X1wiICsgcmVzLk5hbWU7XHJcbiAgICAgIHRoaXMuc3RyaW5naWZpZWRGb3JtID0gSlNPTi5zdHJpbmdpZnkoY2xvbmUpO1xyXG4gICAgICB0aGlzLmRvd25sb2FkSnNvbkhyZWYgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKFxyXG4gICAgICAgIFwiZGF0YTp0ZXh0L2pzb247Y2hhcnNldD1VVEYtOCxcIiArXHJcbiAgICAgICAgICBlbmNvZGVVUklDb21wb25lbnQodGhpcy5zdHJpbmdpZmllZEZvcm0pXHJcbiAgICAgICk7XHJcbiAgICAgIFxyXG4gICAgICAvKiBlbmQgZXhwb3J0ICovXHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIGFsIGNhbWJpbyBkZWwgdGlwbyBkaSB2aXN1YWxpenphemlvbmUgZGVsbGEgZm9ybS5cclxuICAgKiBTZSBsJ3V0ZW50ZSBzY2VnbGllIHVuYSB2aXN1YWxpenphemlvbmUgcmFnZ3J1cHBhdGEgaWwgbWV0b2RvIGFnZ2l1bmdlIGFsIEZvcm1Hcm91cCB1biBudW92b1xyXG4gICAqIGNvbnRyb2xsbyBwZXIgbCdhcnJheSBkZWkgbm9taSBkZWxsZSBzZXppb25pIGRhIGNyZWFyZS5cclxuICAgKi9cclxuICBvbkNoYW5nZUZvcm1TY2FsYXJUeXBlKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2UpIHtcclxuICAgICAgaWYgKCF0aGlzLmZvcm1Gb3JtR3JvdXAuY29udGFpbnMoXCJGb3JtRmllbGRzR3JvdXBzXCIpKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woXCJGb3JtRmllbGRzR3JvdXBzXCIpO1xyXG4gICAgICAgIHRoaXMuZm9ybUZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgXCJGb3JtRmllbGRzR3JvdXBzXCIsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzLCBbXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICAgIEFycmF5VmFsaWRhdG9ycy5taW5MZW5naHQoMSksXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzID0gbnVsbDtcclxuICAgICAgaWYgKHRoaXMuZm9ybUZvcm1Hcm91cC5jb250YWlucyhcIkZvcm1GaWVsZHNHcm91cHNcIikpXHJcbiAgICAgICAgdGhpcy5mb3JtRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woXCJGb3JtRmllbGRzR3JvdXBzXCIpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5mb3JtRm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnRvIGludm9jYXRvIGFsIGtleXVwIG5lbGwnaW5wdXQgcGVyIGluc2VyaXJlIGkgbm9taSBkZWxsZSBzZXppb25pIHBlciBsYSB2aXN1YWxpenphemlvbmVcclxuICAgKiByYWdncnVwcGF0YSBkZWxsYSBmb3JtLiBRdWFudG8gbCd1dGVudGUgcHJlbWUgaWwgdGFzdG8gaW52aW8gdmllbmUgYWdnaXVudG8gaWwgbnVvdm8gbm9tZSBhbGxlXHJcbiAgICogc2V6aW9uaSBkaXNwb2JpbGkgc2Ugbm9uIG5lIGVzaXN0ZSB1bmEgY29uIGxvIHN0ZXNzbyBub21lLlxyXG4gICAqIEBwYXJhbSBldmVudCBFdmVudG8gY2hlIHJhcHByZXNlbnRhIGlsIGtleXVwIHN1bGxhIHRhc3RpZXJhLlxyXG4gICAqL1xyXG4gIG9uRm9ybUZpZWxkR3JvdXBOYW1lS2V5VXAoZXZlbnQpIHtcclxuICAgIGlmIChldmVudC5jb2RlID09PSBcIkVudGVyXCIgfHwgZXZlbnQuY29kZSA9PT0gXCJOdW1wYWRFbnRlclwiKSB7XHJcbiAgICAgIGlmICghdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMpIHtcclxuICAgICAgICB0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3VwcyA9IG5ldyBBcnJheTxGb3JtRmllbGRHcm91cD4oKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIXRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzLmZpbmQoXHJcbiAgICAgICAgICAobikgPT4gbi5OYW1lID09IHRoaXMuZm9ybUZpZWxkR3JvdXBOYW1lXHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3Vwcy5wdXNoKHsgTmFtZTogdGhpcy5mb3JtRmllbGRHcm91cE5hbWUgfSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gSW1wb3N0byBpbCBudW92byB2YWxvcmUgZGVsIEZvcm1Db250cm9sIHBlciBhZ2dpb3JuYXJlIGxvIHN0YXRvIGRlbGxhIGZvcm0uXHJcbiAgICAgIHRoaXMuZm9ybUZvcm1Hcm91cC5jb250cm9sc1tcIkZvcm1GaWVsZHNHcm91cHNcIl0uc2V0VmFsdWUoXHJcbiAgICAgICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHNcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5mb3JtRmllbGRHcm91cE5hbWUgPSBudWxsO1xyXG4gICAgICB0aGlzLnNldEZvcm1GaWVsZEdyb3VwT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJpbXVvdmVyZSBsYSBzZXppb25lIHNlbGV6aW9uYXRhIGRhIHF1ZWxsZSBkaXNwb25pYmlsaSBwZXIgbGEgZm9ybS5cclxuICAgKiBAcGFyYW0gZ3JvdXBOYW1lIE5vbWUgZGVsbGEgc2V6aW9uZSBkYSBlbGltaW5hcmUuXHJcbiAgICovXHJcbiAgb25EZWxldGVGb3JtRmllbGRHcm91cE5hbWUoZ3JvdXBOYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzLnNwbGljZShcclxuICAgICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMuZmluZEluZGV4KChnKSA9PiBnLk5hbWUgPT09IGdyb3VwTmFtZSksXHJcbiAgICAgIDFcclxuICAgICk7XHJcbiAgICAvLyBJbXBvc3RvIGlsIG51b3ZvIHZhbG9yZSBkZWwgRm9ybUNvbnRyb2wgcGVyIGFnZ2lvcm5hcmUgbG8gc3RhdG8gZGVsbGEgZm9ybS5cclxuICAgIHRoaXMuZm9ybUZvcm1Hcm91cC5jb250cm9sc1tcIkZvcm1GaWVsZHNHcm91cHNcIl0uc2V0VmFsdWUoXHJcbiAgICAgIHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzXHJcbiAgICApO1xyXG4gICAgLy8gU2UgZXNpc3Rvbm8gRmllbGQgbGVnYXRpIGFsbGEgc2V6aW9uZSBjaGUgc2kgdnVvbGUgZWxpbWluYXJlIGFsbG9yYSByb21wbyBpbCBsZWdhbWUuXHJcbiAgICBpZiAodGhpcy5mb3JtLkZpZWxkcy5maW5kKChmKSA9PiBmLkZpZWxkR3JvdXAgPT0gZ3JvdXBOYW1lKSkge1xyXG4gICAgICB0aGlzLmZvcm0uRmllbGRzLmZpbHRlcigoZikgPT4gZi5GaWVsZEdyb3VwID09IGdyb3VwTmFtZSkuZm9yRWFjaChcclxuICAgICAgICAoZikgPT4gKGYuRmllbGRHcm91cCA9IG51bGwpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldEZvcm1GaWVsZEdyb3VwT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hpYW1hdG8gcXVhbmRvIHNpIHZ1b2xlIGFnZ2l1bmdlcmUgdW4gbnVvdm8gY2FtcG8gbyBzaSB2dW9sZSBtb2RpZmljYXJlIHVubyBlc2lzdGVudGUuXHJcbiAgICogTWVtb3JpenphIGwnZXZlbnR1YWxlIEZpZWxkIHNjZWx0byBvbmUgY3JlYSB1bm8gbnVvdm8gcHJpbWEgZGkgYXByaXJlIGlsIGRpYWxvZyBwZXIgbW9kaWZpY2FybG8vYWdnaXVuZ2VybG8uXHJcbiAgICogQHBhcmFtIGZpZWxkIE9nZ2V0dG8gQmFzZUZpZWxkIGRhIG1vZGlmaWNhcmUuIFNlIG51bGwgbmUgdmllbmUgY3JlYXRhIHVuYSBudW92YSBpc3RhbnphIHBlciBsJ2FnZ2l1bnRhLlxyXG4gICAqL1xyXG4gIG9wZW5GaWVsZERpYWxvZyhmaWVsZDogQmFzZUZpZWxkID0gbnVsbCkge1xyXG5cclxuICAgIGNvbnNvbGUubG9nKFwib3BlbkZpZWxkRGlhbG9nXCIsZmllbGQpO1xyXG5cclxuICAgIGlmIChmaWVsZCkge1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA9IHRoaXMuZm9ybS5GaWVsZHMuaW5kZXhPZihmaWVsZCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWVsZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZmllbGQpKTtcclxuXHJcbiAgICAgIC8vIERhdG8gY2hlIGNvbiBpbCBKU09OLnBhcnNlIHNpIHBlcmRlIHBlciBzdHJhZGEgbGEgZm9ybXVsYSwgbGEgcmltZXR0byBkb3BvLlxyXG4gICAgICAvLyBUYW50byBvcmFtYWkgaWwgcmlmZXJpbWVudG8gY29uIFwiZmllbGRcIiDDqCBzdGF0byBwZXJzbyBlIHN0aWFtbyBwYXNzYW5kbyB1bmEgc3RyaW5nYVxyXG4gICAgICB0aGlzLnNlbGVjdGVkRmllbGQuRm9ybXVsYSA9IGZpZWxkLkZvcm11bGE7XHJcblxyXG4gICAgICBpZih0aGlzLnNlbGVjdGVkRmllbGQuQW5zd2VyU3R5bGUgPT0gbnVsbCl7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkLkFuc3dlclN0eWxlID0geyBJbkxpc3RWaWV3OiB0cnVlLCBWaXNpYmxlSWY6IG51bGwsIEZpZWxkc3R5bGVDU1M6IFwiXCIsIExhYmVsc3R5bGVDU1M6IFwiXCIsIENvbFNwYW5TaXplczogW10gfTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkID0gbmV3IEJhc2VGaWVsZCgpO1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA9IG51bGw7XHJcbiAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGlhbG9nRmllbGRSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nRmllbGQsIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgd2lkdGg6IFwiNzUlXCIsXHJcbiAgICAgIGhlaWdodDogXCI4MCVcIixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoZSBzYWx2YSBpbCBjYW1wbyBhcHBlbmEgY3JlYXRvIG8gbW9kaWZpY2F0by5cclxuICAgKiBQcmltYSBkZWwgc2FsdmF0YWdnaW8gY29udHJvbGxhIHNlIGVzaXN0ZSB1biBhbHRybyBjYW1wbyBjb24gbGEgc3Rlc3NhIGxhYmVsLCBpbiBxdWVzdG9cclxuICAgKiBjYXNlIGdlbmVyZSB1biBlcnJvcmUgKGkgY2FtcGkgZGV2b25vIGF2ZXJlIG5vbWksIGUgcXVpbmRpIGxhYmVsLCB1bml2b2NoZSAtIGkgbm9taSB2ZW5nb25vXHJcbiAgICogcmljYXZhdGkgdW5lbmRvIGxlIHBhcm9sZSBjaGUgZm9ybWFubyBsYSBsYWJlbCB0cmFtaXRlIFwiX1wiKS5cclxuICAgKiBAcGFyYW0gZmllbGQgQ2FtcG8gZGEgc2FsdmFyZVxyXG4gICAqL1xyXG4gIG9uU2F2ZUZpZWxkKGZpZWxkOiBCYXNlRmllbGQpIHtcclxuICAgIGlmIChmaWVsZCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5mb3JtLkZpZWxkcyAmJlxyXG4gICAgICAgIHRoaXMuZm9ybS5GaWVsZHMuZmluZChcclxuICAgICAgICAgIChmLCBpKSA9PlxyXG4gICAgICAgICAgICBmLkxhYmVsID09PSBmaWVsZC5MYWJlbCAmJlxyXG4gICAgICAgICAgICAodGhpcy5pbmRleFNlbGVjdGVkRmllbGQgPT0gbnVsbFxyXG4gICAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICAgIDogdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgIT09IGkpXHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5XYXJuaW5nKFxyXG4gICAgICAgICAgXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgY2FtcGkgY29uIGxvIHN0ZXNzbyBDb2RpY2UuXCJcclxuICAgICAgICApO1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkltcG9zc2liaWxlIGluc2VyaXJlIGR1ZSBjYW1waSBjb24gbG8gc3Rlc3NvIENvZGljZS5cIik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCAhPSBudWxsICYmIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID49IDApIHtcclxuICAgICAgICB0aGlzLmZvcm0uRmllbGRzW3RoaXMuaW5kZXhTZWxlY3RlZEZpZWxkXSA9IGZpZWxkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICghdGhpcy5mb3JtLkZpZWxkcykge1xyXG4gICAgICAgICAgdGhpcy5mb3JtLkZpZWxkcyA9IG5ldyBBcnJheTxCYXNlRmllbGQ+KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZm9ybS5GaWVsZHMucHVzaChmaWVsZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJvblNhdmVGaWVsZFwiLCB0aGlzLmZvcm0pXHJcbiAgICB0aGlzLmNsb3NlRmllbGREaWFsb2coKTtcclxuICAgIHRoaXMuc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgIHRoaXMucmVsb2FkRmllbGRzVGFibGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgY29udHJvbGxhIHNlIGxvIHN0ZXAgcGVyIGwnYWdnaXVudGEgZGVpIGNhbXBpIG5lbGxhIGZvcm0gw6ggY29uY2x1c28uXHJcbiAgICogQHJldHVybnMgU2UgVFJVRSBsbyBzdGVwIHZpZW5lIGNvbnNpZGVyYXRvIGNvbXBsZXRhdG8gZWQgw6ggcG9zc2JpbGUgcGFzc2FyZSBhbCBzdWNjZXNzaXZvLlxyXG4gICAqL1xyXG4gIGlzRmllbGRTdGVwQ29tcGxldGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmZvcm0uRmllbGRzKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5mb3JtLkZvcm1TY2FsYXJUeXBlICE9IEZvcm1TY2FsYXJUeXBlRW51bS5TZW1wbGljZSAmJlxyXG4gICAgICB0aGlzLmZvcm0uRmllbGRzLmZpbmQoKGYpID0+ICFmLkZpZWxkR3JvdXApXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZm9ybS5GaWVsZHMubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgYXByaXJlIGlsIGRpYWxvZyBkaSBjcmVhemlvbmUvbW9kaWZpY2EgZGVsbGUgZm9ybSBkaSBkZXR0YWdsaW8uXHJcbiAgICogU2UgaWwgcGFyYW1ldHJvIHBhc3NhdG8gw6ggbnVsbCBzb25vIGluIGFnZ2l1bnRhIGFsdHJpbWVudGkgc29ubyBpbiBtb2RpZmljYS5cclxuICAgKiBAcGFyYW0gaW5uZW5yRm9ybSBGb3JtIGRpIGRldHRhZ2xpbyBkYSBtb2RpZmljYXJlIChzZSBudWxsIGFsbG9yYSB2YWRvIGluIGFkZCkuXHJcbiAgICovXHJcbiAgb3BlbklubmVyRm9ybURpYWxvZyhpbm5lbnJGb3JtOiBGb3JtID0gbnVsbCkge1xyXG4gICAgdGhpcy5pbm5lckZvcm1Db25maWcgPSBuZXcgRHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbmZpZygpO1xyXG4gICAgdGhpcy5pbm5lckZvcm1Db25maWcuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmlubmVyRm9ybU1hbmFnbWVudCA9XHJcbiAgICAgIHRydWU7XHJcbiAgICAvLyB0aGlzLmlubmVyRm9ybUNvbmZpZy5keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcuZm9ybVxyXG4gICAgLy8gdGhpcy5pbm5lckZvcm1Db25maWcuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmZvcm0uT2xkTmFtZVxyXG4gICAgLy8gdGhpcy5pbm5lckZvcm1Db25maWcuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmlubmVyRm9ybVJlZlxyXG4gICAgLy8gW2Zvcm1dPVwic2VsZWN0ZWRJbm5lckZvcm1cIlxyXG4gICAgLy8gW2lubmVyRm9ybU1hbmFnbWVudF09XCJ0cnVlXCJcclxuICAgIC8vIFtpbm5lckZvcm1SZWZdPVwiZGlhbG9nSW5uZXJGb3JtUmVmXCJcclxuXHJcbiAgICBpZiAoaW5uZW5yRm9ybSkge1xyXG4gICAgICB0aGlzLmluZGV4U2VsZWN0ZWRJbm5lckZvcm0gPSB0aGlzLmZvcm0uSW5uZXJGb3Jtcy5pbmRleE9mKGlubmVuckZvcm0pO1xyXG5cclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZElubmVyRm9ybSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaW5uZW5yRm9ybSkpO1xyXG4gICAgICAvLyB0aGlzLnNlbGVjdGVkSW5uZXJGb3JtLk9sZE5hbWUgPSBpbm5lbnJGb3JtLk5hbWU7XHJcbiAgICAgIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5mb3JtID1cclxuICAgICAgICBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGlubmVuckZvcm0pKTtcclxuICAgICAgdGhpcy5pbm5lckZvcm1Db25maWcuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmZvcm0uT2xkTmFtZSA9XHJcbiAgICAgICAgaW5uZW5yRm9ybS5OYW1lO1xyXG5cclxuICAgICAgdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgPSB0aGlzLmZvcm0uRmllbGRzLmZpbmRJbmRleChcclxuICAgICAgICAoZikgPT4gZi5MYWJlbCA9PT0gaW5uZW5yRm9ybS5OYW1lXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyB0aGlzLnNlbGVjdGVkSW5uZXJGb3JtID0gbmV3IEZvcm0oKTtcclxuICAgICAgdGhpcy5pbm5lckZvcm1Db25maWcuZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLmZvcm0gPVxyXG4gICAgICAgIG5ldyBGb3JtKCk7XHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZElubmVyRm9ybSA9IG51bGw7XHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID0gbnVsbDtcclxuICAgIH1cclxuICAgIC8vIHRoaXMuZGlhbG9nSW5uZXJGb3JtUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0lubmVyRm9ybSwge1xyXG5cclxuICAgIHRoaXMuaW5uZXJGb3JtQ29uZmlnLmR5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JTcGVjaWZpY0NvbmZpZy5pbm5lckZvcm1SZWYgPVxyXG4gICAgICB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nSW5uZXJGb3JtLCB7XHJcbiAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICAgIHdpZHRoOiBcIjg1JVwiLFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBzY2F0ZW5hdG8gYWwgc2FsdmF0YWdnaW8gZGkgdW5hIGZvcm0gZGkgZGV0dGFnbGlvLlxyXG4gICAqIEBwYXJhbSBldmVudCBGb3JtIGNyZWF0YS9tb2RpZmljYXRhIGRhbGwndXRlbnRlLiBTZSDDqCBudWxsIGFsbG9yYSBsJ3V0ZW50ZSBoYSBhYmJhbmRvbmF0byBsYSBjb25maWd1cmF6aW9uZS5cclxuICAgKi9cclxuICBvblNhdmVPckV4aXRJbm5lckZvcm0oZXZlbnQ6IEZvcm0pIHtcclxuICAgIGlmIChldmVudCAhPSBudWxsKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmZvcm0uTmFtZSA9PT0gZXZlbnQuTmFtZSB8fFxyXG4gICAgICAgICh0aGlzLmZvcm0uSW5uZXJGb3JtcyAmJlxyXG4gICAgICAgICAgdGhpcy5mb3JtLklubmVyRm9ybXMuZmluZChcclxuICAgICAgICAgICAgKGEsIGkpID0+XHJcbiAgICAgICAgICAgICAgYS5OYW1lID09PSBldmVudC5OYW1lICYmXHJcbiAgICAgICAgICAgICAgKHRoaXMuaW5kZXhTZWxlY3RlZElubmVyRm9ybSA9PSBudWxsXHJcbiAgICAgICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgICAgIDogdGhpcy5pbmRleFNlbGVjdGVkSW5uZXJGb3JtICE9PSBpKVxyXG4gICAgICAgICAgKSkgfHxcclxuICAgICAgICAodGhpcy5mb3JtLkZpZWxkcyAmJlxyXG4gICAgICAgICAgdGhpcy5pbmRleFNlbGVjdGVkSW5uZXJGb3JtID09IG51bGwgJiZcclxuICAgICAgICAgIHRoaXMuZm9ybS5GaWVsZHMuZmluZChcclxuICAgICAgICAgICAgKGYsIGkpID0+XHJcbiAgICAgICAgICAgICAgZi5MYWJlbCA9PT0gZXZlbnQuTmFtZSAmJlxyXG4gICAgICAgICAgICAgICh0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCA9PSBudWxsXHJcbiAgICAgICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgICAgIDogdGhpcy5pbmRleFNlbGVjdGVkRmllbGQgIT09IGkpXHJcbiAgICAgICAgICApKVxyXG4gICAgICApIHtcclxuICAgICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5XYXJuaW5nKFxyXG4gICAgICAgICAgXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgZm9ybSBkaSBkZXR0YWdsaW8gY29uIGxvIHN0ZXNzbyBub21lLlwiXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICBcIkltcG9zc2liaWxlIGluc2VyaXJlIGR1ZSBmb3JtIGRpIGRldHRhZ2xpbyBjb24gbG8gc3Rlc3NvIG5vbWUuXCJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBpbm5lckZvcm1GaWVsZDogQmFzZUZpZWxkID0gbmV3IEJhc2VGaWVsZCgpO1xyXG4gICAgICBpbm5lckZvcm1GaWVsZC5OYW1lID0gZXZlbnQuTmFtZS5zcGxpdChcIiBcIikuam9pbihcIl9cIik7XHJcbiAgICAgIGlubmVyRm9ybUZpZWxkLkxhYmVsID0gZXZlbnQuTmFtZTtcclxuICAgICAgaW5uZXJGb3JtRmllbGQuRmllbGRUeXBlID0gRmllbGRUeXBlRW51bVtcIkZvcm0gZGkgZGV0dGFnbGlvXCJdO1xyXG4gICAgICBpbm5lckZvcm1GaWVsZC5GaWVsZEdyb3VwID1cclxuICAgICAgICB0aGlzLmluZGV4U2VsZWN0ZWRGaWVsZCAhPSBudWxsXHJcbiAgICAgICAgICA/IHRoaXMuZm9ybS5GaWVsZHNbdGhpcy5pbmRleFNlbGVjdGVkRmllbGRdLkZpZWxkR3JvdXBcclxuICAgICAgICAgIDogbnVsbDtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmluZGV4U2VsZWN0ZWRJbm5lckZvcm0gIT0gbnVsbCAmJlxyXG4gICAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZElubmVyRm9ybSA+PSAwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5Jbm5lckZvcm1zW3RoaXMuaW5kZXhTZWxlY3RlZElubmVyRm9ybV0gPSBldmVudDtcclxuICAgICAgICB0aGlzLmZvcm0uRmllbGRzW3RoaXMuaW5kZXhTZWxlY3RlZEZpZWxkXSA9IGlubmVyRm9ybUZpZWxkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICghdGhpcy5mb3JtLklubmVyRm9ybXMpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5Jbm5lckZvcm1zID0gbmV3IEFycmF5PEZvcm0+KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZm9ybS5Jbm5lckZvcm1zLnB1c2goZXZlbnQpO1xyXG4gICAgICAgIHRoaXMuZm9ybS5GaWVsZHMucHVzaChpbm5lckZvcm1GaWVsZCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZWxvYWRGaWVsZHNUYWJsZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kaWFsb2dJbm5lckZvcm1SZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgYXByaXJlIGlsIGRpYWxvZyBkaSBjcmVhemlvbmUvbW9kaWZpY2EgZGVsbGUgYWN0aW9uLlxyXG4gICAqIFNlIGlsIHBhcmFtZXRybyBwYXNzYXRvIMOoIG51bGwgc29ubyBpbiBhZ2dpdW50YSBhbHRyaW1lbnRpIHNvbm8gaW4gbW9kaWZpY2EuXHJcbiAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb25PblJlY29yZCBkYSBtb2RpZmljYXJlIChzZSBudWxsIGFsbG9yYSB2YWRvIGluIGFkZCkuXHJcbiAgICovXHJcbiAgb3BlbkFjdGlvbk9uUmVjb3JkRGlhbG9nKGFjdGlvbjogQWN0aW9uT25SZWNvcmQgPSBudWxsKSB7XHJcbiAgICBpZiAoYWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiA9IHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQuaW5kZXhPZihhY3Rpb24pO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQWN0aW9uID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhY3Rpb24pKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb24gPSBuZXcgQWN0aW9uT25SZWNvcmQoKTtcclxuICAgICAgdGhpcy5pbmRleFNlbGVjdGVkQWN0aW9uID0gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMuY3JlYXRlQWN0aW9uT25SZWNvcmRGb3JtKCk7XHJcbiAgICB0aGlzLmRpYWxvZ0FjdGlvbk9uUmVjb3JkUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0FjdGlvbk9uUmVjb3JkLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBcIjc1JVwiLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGFwcmlyZSBpbCBkaWFsb2cgZGkgY3JlYXppb25lL21vZGlmaWNhIGRlaSBib3R0b25pIGF6aW9uZS5cclxuICAgKiBTZSBpbCBwYXJhbWV0cm8gcGFzc2F0byDDqCBudWxsIHNvbm8gaW4gYWdnaXVudGEgYWx0cmltZW50aSBzb25vIGluIG1vZGlmaWNhLlxyXG4gICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uQnV0dG9uIGRhIG1vZGlmaWNhcmUgKHNlIG51bGwgYWxsb3JhIHZhZG8gaW4gYWRkKS5cclxuICAgKi9cclxuICBvcGVuQWN0aW9uQnV0dG9uRGlhbG9nKGV2OiBBY3Rpb25CdXR0b24gPSBudWxsKSB7XHJcblxyXG4gICAgaWYgKGV2ICE9IG51bGwpe1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQWN0aW9uQnV0dG9uID0gZXY7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQWN0aW9uQnV0dG9uID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRpYWxvZ0FjdGlvbkJ1dHRvblJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dBY3Rpb25CdXR0b24sIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgd2lkdGg6IFwiNzUlXCIsXHJcbiAgICB9KTtcclxuICB9ICBcclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBpbXBvc3RhcmUgaSB2YWxvcmkgZGEgc3VnZ2VyaXJlIG5lbGwnYXV0b2NvbXBsZXRlIGRlbCBjYW1wbyBGb3JtdWxhLlxyXG4gICAqIFZpZW5lIHNjYXRlbmF0byBhbCBmb2N1cyAoaW4gcXVlc3RvIGNhc28gdmllbmUgcGFzc2F0byBpbCBwYXJhbWV0cm8gYSBudWxsIHBlciBkaWZmZXJlbnppYXJsb1xyXG4gICAqIGRhbGwnZXZlbnRvIGRpIGNsaWNrIHN1bGxhIHRhc3RpZXJhKSBlIGFsIGtleXVwIHN1bGwnaW5wdXQgKGlsIHBhcmFtZXRybyDDqCBkaXZlcnNvIGRhIG51bGwpLlxyXG4gICAqIEBwYXJhbSBrZXlib2FyZEV2ZW50IEV2ZW50byBzY2F0ZW5hdG8gYWwga2V5dXAgc3VsbGEgdGFzdGllcmEuIFNlIG51bGwgYWxsb3JhIGlsIG1ldG9kbyDDqCBzdGF0byBpbnZvY2F0byBkYWwgZm9jdXMgc3VsbCdpbnB1dC5cclxuICAgKiBAc3VtbWFyeSBBZ2dpb3JuYSBsJ2VsZW5jbyBkZWkgc3VnZ2VyaW1lbnRpIHBlciBsJ2F1dG9jb21wbGV0ZSBzZSBsJ3V0ZW50ZSBlc2VndWUgaWwgZm9jdXMgc3VsbCdpbnB1dFxyXG4gICAqIG9wcHVyZSBhbCBrZXl1cCBzdWxsYSB0YXN0aWVyYSBkaSB1biB0YXN0byBkaXZlcnNvIGRhbGxlIGZyZWNjZS5cclxuICAgKi9cclxuICBzZXRBY3Rpb25BdXRvY29tcGxldGVPcHRpb25zKGtleWJvYXJkRXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIC8vIENyZW8gbCdhcnJheSBwZXIgbCdhdXRvY29tcGxldGUgc29sbyBzZSBzdG8gZmFjZW5kbyBpbCBmb2N1cyBzdWxsJ2lucHV0IG8gc2Ugc3RvIHByZW1lbmRvIHVuIHRhc3RvXHJcbiAgICAvLyBzdWxsYSB0YXN0aWVyYSBkaXZlcnNvIGRhbGxlIGZyZWNjZSAoaW4gcXVlc3QndWx0aW1vIGNhc28sIHNlIG5vbiB2aWVuZSBlc2VndWl0byBpbCBmaWx0cm8gc3VsbCdldmVudG8sXHJcbiAgICAvLyBub24gc2kgcHXDsiBzZWxlemlvbmFyZSB1biBzdWdnZXJpbWVudG8gZGVsbCdhdXRvY29tcGxldGUgcGVyY2jDqCBhbCBjbGljayB2ZXJyZWJiZSByaWNhcmljYXRvIGwnYXJyYXkgZVxyXG4gICAgLy8gc2kgcHJlZGVyZWJiZSBsYSBzZWxlemlvbmUgYXBwZW5hIGZhdHRhKS5cclxuICAgIGlmICgha2V5Ym9hcmRFdmVudCB8fCAha2V5Ym9hcmRFdmVudC5jb2RlLmluY2x1ZGVzKFwiQXJyb3dcIikpIHtcclxuICAgICAgdGhpcy5hY3Rpb25BdXRvY29tcGxldGVPcHRpb25zID1cclxuICAgICAgICBVdGlsaXR5SGVscGVyU2VydmljZS5HZXRBdXRvY29tcGxldGVPcHRpb25zKFxyXG4gICAgICAgICAgdGhpcy5mb3JtLkZpZWxkcyxcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb24uQWN0aW9uXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGwnYXppb25lIGNyZWF0YS9tb2RpZmljYXRlLlxyXG4gICAqL1xyXG4gIHNhdmVBY3Rpb25PblJlY29yZCgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZCAmJlxyXG4gICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmZpbmQoXHJcbiAgICAgICAgKGEsIGkpID0+XHJcbiAgICAgICAgICBhLk5hbWUgPT09IHRoaXMuc2VsZWN0ZWRBY3Rpb24uTmFtZSAmJlxyXG4gICAgICAgICAgKHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiA9PSBudWxsXHJcbiAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICA6IHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiAhPT0gaSlcclxuICAgICAgKVxyXG4gICAgKSB7XHJcbiAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLldhcm5pbmcoXHJcbiAgICAgICAgXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgYWN0aW9uIGNvbiBsbyBzdGVzc28gbm9tZS5cIlxyXG4gICAgICApO1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbXBvc3NpYmlsZSBpbnNlcmlyZSBkdWUgYWN0aW9uIGNvbiBsbyBzdGVzc28gbm9tZS5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiAhPSBudWxsICYmIHRoaXMuaW5kZXhTZWxlY3RlZEFjdGlvbiA+PSAwKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmRbdGhpcy5pbmRleFNlbGVjdGVkQWN0aW9uXSA9IHRoaXMuc2VsZWN0ZWRBY3Rpb247XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoIXRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQpIHtcclxuICAgICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkID0gbmV3IEFycmF5PEFjdGlvbk9uUmVjb3JkPigpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQucHVzaCh0aGlzLnNlbGVjdGVkQWN0aW9uKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2xvc2VEaWFsb2dBY3Rpb25PblJlY29yZCgpO1xyXG4gICAgdGhpcy5zZXRBY3Rpb25PcmRpbmFsUG9zaXRpb24oKTtcclxuICAgIHRoaXMucmVsb2FkQWN0aW9uc09uUmVjb3JkVGFibGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgc2FsdmFyZSBsJ2F6aW9uZSBjcmVhdGEvbW9kaWZpY2F0ZS5cclxuICAgKi9cclxuICBzYXZlQWN0aW9uQnV0dG9ucyhlbGVtZW50OiBBY3Rpb25CdXR0b24pe1xyXG5cclxuICAgIGlmIChlbGVtZW50ICE9IG51bGwpe1xyXG4gICAgICBpZiAodGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMgIT0gbnVsbCl7XHJcbiAgICAgICAgdmFyIGV4aXN0c0FjdGlvbkJ1dHRvbnMgPSB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucy5maW5kKHggPT4geC5CdXR0b25VbmlxdWVJZCA9PSBlbGVtZW50LkJ1dHRvblVuaXF1ZUlkKTtcclxuICAgICAgICBpZiAoZXhpc3RzQWN0aW9uQnV0dG9ucyA9PSBudWxsKXtcclxuICAgICAgICAgIC8vIE51b3ZvIHRyaWdnZXJcclxuICAgICAgICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zLnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGV4aXN0c0FjdGlvbkJ1dHRvbnMgPSBlbGVtZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucyA9IG5ldyBBcnJheTxBY3Rpb25CdXR0b24+KCk7XHJcbiAgICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMucHVzaChlbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFjdGlvbkJ1dHRvbnNUYWJsZS5yZWxvYWREYXRhdGFibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRpYWxvZ0FjdGlvbkJ1dHRvblJlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjaGl1ZGVyZSBpbCBkaWFsb2cgZGVsbGEgaW5uZXIgZm9ybS5cclxuICAgKi9cclxuICBjbG9zZURpYWxvZ0lubmVyRm9ybSgpIHtcclxuICAgIHRoaXMuaW5uZXJGb3JtUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNoaXVkZXJlIGlsIGRpYWxvZyBkaSBnZXN0aW9uZSBkZWxsZSBhY3Rpb24uXHJcbiAgICovXHJcbiAgY2xvc2VEaWFsb2dBY3Rpb25PblJlY29yZCgpIHtcclxuICAgIHRoaXMuZGlhbG9nQWN0aW9uT25SZWNvcmRSZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY2hpdWRlcmUgaWwgZGlhbG9nIGRpIGdlc3Rpb25lIGRlbGxlIGFjdGlvbiBidXR0b25zLlxyXG4gICAqL1xyXG4gIGNsb3NlRGlhbG9nQWN0aW9uQnV0dG9ucygpIHtcclxuICAgIHRoaXMuZGlhbG9nQWN0aW9uQnV0dG9uUmVmLmNsb3NlKCk7XHJcbiAgfSAgXHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgc2VnbmFyZSBjb21lIGNvbmNsdXNhIGxhIGNyZWF6aW9uZSBkZWxsYSBmb3JtIGUgcGVyIGNyZWFybmUgdW5hIGNvcGlhXHJcbiAgICogZGEgdmlzYWxpenphcmUgY29tZSBhbnRlcHJpbWEuXHJcbiAgICogQHBhcmFtIGNvbXBsZXRlZCBTZSBUUlVFIHNlZ25hIGxhIGZvcm0gY29tZSBjb25jbHVzYSBlIG5lIGNyZWEgdW5hIGNvcGlhIGRhIHZpc3VhbGl6emFyZVxyXG4gICAqL1xyXG4gIHNldEZvcm1TdGF0dXMoY29tcGxldGVkOiBib29sZWFuKSB7XHJcbiAgICBpZiAoY29tcGxldGVkKSB7XHJcbiAgICAgIHRoaXMuZm9ybUNvbXBsZXRlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMucHJldmlld0Zvcm0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybSkpO1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwicHJldmlld0Zvcm1cIiwgdGhpcy5wcmV2aWV3Rm9ybSlcclxuXHJcbiAgICAgIC8vIFBlciB2aXN1YWxpenphcmUgY29ycmV0dGFtZW50ZSBsJ29hbnRlcHJpbWEgZGVsbGEgZm9ybSBhcHBlbmEgY3JlYXRhXHJcbiAgICAgIC8vIGJpc29nbmEgdmFsb3JpenphcmUgbGEgcHJvcHJpZXTDoCBOYW1lIGRlaSBjYW1waSBkZWxsYSBmb3JtIGUgZGVsbGUgSW5uZXJGb3Jtcy5cclxuICAgICAgdGhpcy5wcmV2aWV3Rm9ybS5GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgICBmaWVsZC5OYW1lID0gZmllbGQuTGFiZWwuc3BsaXQoXCIgXCIpLmpvaW4oXCJfXCIpO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMucHJldmlld0Zvcm0uSW5uZXJGb3JtcyAmJlxyXG4gICAgICAgIHRoaXMucHJldmlld0Zvcm0uSW5uZXJGb3Jtcy5sZW5ndGggPiAwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMucHJldmlld0Zvcm0uSW5uZXJGb3Jtcy5mb3JFYWNoKChmb3JtKSA9PiB7XHJcbiAgICAgICAgICBmb3JtLkZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgICAgICBmaWVsZC5OYW1lID0gZmllbGQuTGFiZWwuc3BsaXQoXCIgXCIpLmpvaW4oXCJfXCIpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybUNvbXBsZXRlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnByZXZpZXdGb3JtID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgc2FsdmFyZSBsYSBmb3JtIGNyZWF0YSBhbGxhIGZpbmUgZGVsIHdpemFyZC5cclxuICAgKiBTZSDDqCBzdGF0byBjb25maWd1cmF0byB1biBlbmRQb2ludCBwZXIgaWwgc2FsdmF0YWdnaW8gdmllbmUgZWZmZXR0dWF0YSB1bmEgY2hpYW1hdGEgYWwgc2VydmVyIHBhc3NhbmRvIGwnb2dnZXRvIGRhIHNhbHZhcmVcclxuICAgKiBuZWwgYm9keSBkZWxsYSBjaGlhbWF0YSwgYWx0cmltZW50aSBzY2F0ZW5hIGwnZXZlbnRvIFwic2F2ZUZvcm1FdmVudFwiLlxyXG4gICAqL1xyXG4gIHNhdmVGb3JtKCkge1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gIT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5TYXZlRW5kUG9pbnRcclxuICAgICkge1xyXG5cclxuICAgICAgaWYgKCF0aGlzLnNhdmVkKXtcclxuICAgICAgICB0aGlzLmJhY2t1cEZvcm0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5iYWNrdXBGb3JtKSk7XHJcbiAgICAgIH1cclxuICAgICAgXHJcblxyXG4gICAgICAvLyBQZXIgZmFyIGFycml2YXJlIGFsIHNlcnZlciBsJ2FycmF5IGRpIEZpZWxkIGJpc29nbmEgcGFzc2FybGkgc3UgQW55XHJcbiAgICAgIHRoaXMuZm9ybS5PYmplY3RGaWVsZHMgPSBbXTtcclxuICAgICAgdGhpcy5mb3JtLk9iamVjdEZsZEV4dHJhQ29uZmlnVmFsdWVzID0gW107XHJcblxyXG4gICAgICBpZiAodGhpcy5mb3JtLkZsZEV4dHJhQ29uZmlnVmFsdWVzICE9IG51bGwpe1xyXG4gICAgICAgIHRoaXMuZm9ybS5PYmplY3RGbGRFeHRyYUNvbmZpZ1ZhbHVlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5mb3JtLkZsZEV4dHJhQ29uZmlnVmFsdWVzKSk7XHJcbiAgICAgIH0gXHJcblxyXG4gICAgICB0aGlzLmZvcm0uRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcblxyXG4gICAgICAgIC8vIFRyYXNmb3JtbyBpbCBkYXRhZ2V0dGVyIGluIEJhc2U2NFxyXG4gICAgICAgIGZpZWxkLkRhdGFHZXR0ZXJWYWx1ZUJhc2U2NFN0cmluZyA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkoZmllbGQuRGF0YUdldHRlcikpO1xyXG4gICAgICAgIGZpZWxkLkRhdGFHZXR0ZXIgPSBudWxsO1xyXG5cclxuICAgICAgICBpZiAoZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW0uQWxsZWdhdG8pIHtcclxuICAgICAgICAgIGNvbnN0IGZsZEE6IGFueSA9IGZpZWxkO1xyXG4gICAgICAgICAgZmxkQS5NZXRhZGF0YU9iamVjdEZpZWxkcyA9IGZsZEEuTWV0YWRhdGFGaWVsZHM7XHJcbiAgICAgICAgICBmbGRBLk1ldGFkYXRhRmllbGRzID0gW107XHJcbiAgICAgICAgICB0aGlzLmZvcm0uT2JqZWN0RmllbGRzLnB1c2goZmxkQSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVtcIkNhbXBvIG51bWVyaWNvXCJdKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAoPE51bWVyaWNGaWVsZD5maWVsZCkuTWF4VmFsdWUgPT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgICAgICAgKDxOdW1lcmljRmllbGQ+ZmllbGQpLk1heFZhbHVlID09IG51bGxcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgKDxOdW1lcmljRmllbGQ+ZmllbGQpLk1heFZhbHVlID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICg8TnVtZXJpY0ZpZWxkPmZpZWxkKS5NaW5WYWx1ZSA9PSB1bmRlZmluZWQgfHxcclxuICAgICAgICAgICAgICAoPE51bWVyaWNGaWVsZD5maWVsZCkuTWluVmFsdWUgPT0gbnVsbFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAoPE51bWVyaWNGaWVsZD5maWVsZCkuTWluVmFsdWUgPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmZvcm0uT2JqZWN0RmllbGRzLnB1c2goZmllbGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZm9ybS5Qcm9qZWN0TmFtZSA9IHRoaXMuUHJvamVjdE5hbWU7XHJcbiAgICAgIHRoaXMuZm9ybS5GaWVsZHMgPSBudWxsO1xyXG4gICAgICB0aGlzLmZvcm0uT3JnYUlEID0gdGhpcy5vcmdhSUQ7XHJcbiAgICAgIGlmICh0aGlzLmZvcm0uQ3JlYXRpb25EYXRlID09IG51bGwpIHtcclxuICAgICAgICB0aGlzLmZvcm0uQ3JlYXRpb25EYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICB0aGlzLmZvcm0uQ3JlYXRpb25Vc2VyID0gdGhpcy5Vc2VySUQ7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb3JtLk1vZGlmeVVzZXIgPSB0aGlzLlVzZXJJRDtcclxuXHJcbiAgICAgIHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybS5UcmlnZ2Vycyk7XHJcbiAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IG51bGw7XHJcblxyXG4gICAgICB0aGlzLmZvcm0uT2JqZWN0QWN0aW9uQnV0dG9ucyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zKTtcclxuICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMgPSBudWxsO1xyXG5cclxuXHJcblxyXG4gICAgICAvLyBjaGlhbWF0YSBlZmZldHRpdmFcclxuICAgICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBQYXJhbU5hbWU6IFwiRm9ybVwiLFxyXG4gICAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLFxyXG4gICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiSW4gQm9keVwiXSxcclxuICAgICAgICB9LFxyXG4gICAgICBdO1xyXG5cclxuICAgICAgdGhpcy5zYXZlZCA9IHRydWU7XHJcblxyXG5cclxuXHJcbiAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLlNhdmVFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXMpID0+IHtcclxuICAgICAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLlN1Y2Nlc3MoXCJGb3JtIHNhbHZhdGEgY29uIHN1Y2Nlc3NvIVwiKTtcclxuICAgICAgICAgIHRoaXMuYWZ0ZXJTYXZlRm9ybUV2ZW50LmVtaXQodGhpcy5mb3JtKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuRXJyb3IoXCJFcnJvcmUgbmVsIHNhbHZhdGFnZ2lvIGRlbGxhIGZvcm1cIik7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkVycm9yZSBuZWwgc2FsdmF0YWdnaW8gZGVsbGEgZm9ybVwiLGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNhdmVGb3JtRXZlbnQuZW1pdCh0aGlzLmZvcm0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIEZVTlpJT05JIFBSSVZBVEVcclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBpbXBvc3RhcmUgbGEgZm9ybSBlIGNvbmZpZ3VyYXJlIGNvbG9ubmUvRm9ybUdvdXJwLlxyXG4gICAqIEBwYXJhbSBmb3JtIEZvcm0gZGEgdXRpbGl6emFyZS5cclxuICAgKi9cclxuICBwcml2YXRlIHNldEZvcm1BbmRDb25maWd1cmUoZm9ybTogRm9ybSA9IG51bGwpIHtcclxuICAgIFxyXG4gICAgaWYgKGZvcm0gIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmZvcm0gPSBmb3JtO1xyXG4gICAgICB0aGlzLmZvcm0uT3JnYUlEID0gdGhpcy5vcmdhSUQ7XHJcbiAgICAgIGlmICh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgIT0gbnVsbCAmJiB0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgIT0gXCJcIil7XHJcbiAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gSlNPTi5wYXJzZSh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IG5ldyBBcnJheTxUcmlnZ2VyPigpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5mb3JtLk9iamVjdEFjdGlvbkJ1dHRvbnMgIT0gbnVsbCAmJiB0aGlzLmZvcm0uT2JqZWN0QWN0aW9uQnV0dG9ucyAhPSBcIlwiKXtcclxuICAgICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdEFjdGlvbkJ1dHRvbnMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zID0gbmV3IEFycmF5PEFjdGlvbkJ1dHRvbj4oKTtcclxuICAgICAgfSAgICAgIFxyXG4gICAgICBcclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmZvcm0uRmllbGRzICE9IFwidW5kZWZpbmVkXCIpe1xyXG4gICAgICAgIHRoaXMuZm9ybS5GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuXHJcbiAgICAgICAgLy8gVHJhc2Zvcm1vIGlsIEJhc2U2NFN0cmluZyBkZWwgRGF0YWdldHRlciBuZWwgRGF0YWdldHRlciB2ZXJvIGUgcHJvcHJpb1xyXG4gICAgICAgIGlmIChmaWVsZC5EYXRhR2V0dGVyVmFsdWVCYXNlNjRTdHJpbmcgIT0gbnVsbCl7XHJcbiAgICAgICAgICBmaWVsZC5EYXRhR2V0dGVyID0gSlNPTi5wYXJzZShhdG9iKGZpZWxkLkRhdGFHZXR0ZXJWYWx1ZUJhc2U2NFN0cmluZykpO1xyXG4gICAgICAgICAgZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9IGZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT0gbnVsbCA/IERhdGFHZXR0ZXJUeXBlRW51bS5NYW51YWxlIDogZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZTsgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGZpZWxkLkRhdGFHZXR0ZXIgPSBuZXcgRGF0YUdldHRlcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZmllbGQuRGF0YUdldHRlclZhbHVlQmFzZTY0U3RyaW5nID0gbnVsbDtcclxuXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG4gICAgdGhpcy5jcmVhdGVGb3JtRm9ybSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29uZmlndXJhIGxlIGNvbG9ubmUgcGVyIGxlIHRhYmVsbGUgbmVjZXNzYXJpZSBhbGxhIGNyZWF6aW9uZSBkZWxsYSBmb3JtOlxyXG4gICAqICAtIHBlciBsYSB2aXN1YWxpenphemlvbmUgZGVpIGNhbXBpIGluc2VyaXRpXHJcbiAgICogIC0gcGVyIGxlIGZvcm0gZGkgZGV0dGFnbGlvIGNyZWF0ZVxyXG4gICAqICAtIHBlciBsZSBhemlvbmkgY29uZmlndXJhdGUgc3VpIHJlY29yZCBkZWxsYSBmb3JtXHJcbiAgICovXHJcblxyXG4gIFxyXG4gIFxyXG5cclxuICBwcml2YXRlIGNvbmZpZ3VyZUNvbHVtbnMoKSB7XHJcbiAgICB0aGlzLmZpZWxkc0NvbHVtbnMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiYWN0aW9uXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJcIixcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLk1lbnVBY3Rpb24sXHJcbiAgICAgICAgYnV0dG9uTWVudUljb246IFwibW9yZV92ZXJ0XCIsXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDRyZW1cIiB9LFxyXG4gICAgICAgIGFjdGlvbnM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJNb2RpZmljYVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImVkaXRcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiB0aGlzLmVkaXRGaWVsZChlbGVtZW50KSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiRHVwbGljYVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImZpbGVfY29weVwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMuZHVwbGljYXRlRmllbGQoZWxlbWVudCksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkVsaW1pbmFcIixcclxuICAgICAgICAgICAgaWNvbjogXCJkZWxldGVcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiB0aGlzLmRlbGV0ZUVsZW1lbnQoZWxlbWVudCwgXCJGaWVsZHNcIiksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgLy8ge1xyXG4gICAgICAgICAgLy8gICBuYW1lOiBcIlNwb3N0YSBzdVwiLFxyXG4gICAgICAgICAgLy8gICBpY29uOiBcImFycm93X3Vwd2FyZFwiLFxyXG4gICAgICAgICAgLy8gICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+XHJcbiAgICAgICAgICAvLyAgICAgdGhpcy5tb3ZlRWxlbWVudChlbGVtZW50LCB0cnVlLCBcIkZpZWxkc1wiKSxcclxuICAgICAgICAgIC8vICAgZGlzYWJsZWQ6IChlbGVtZW50KSA9PiB0aGlzLmZvcm0uRmllbGRzLmluZGV4T2YoZWxlbWVudCkgPT09IDAsXHJcbiAgICAgICAgICAvLyB9LFxyXG4gICAgICAgICAgLy8ge1xyXG4gICAgICAgICAgLy8gICBuYW1lOiBcIlNwb3N0YSBnacO5XCIsXHJcbiAgICAgICAgICAvLyAgIGljb246IFwiYXJyb3dfZG93bndhcmRcIixcclxuICAgICAgICAgIC8vICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PlxyXG4gICAgICAgICAgLy8gICAgIHRoaXMubW92ZUVsZW1lbnQoZWxlbWVudCwgZmFsc2UsIFwiRmllbGRzXCIpLFxyXG4gICAgICAgICAgLy8gICBkaXNhYmxlZDogKGVsZW1lbnQpID0+XHJcbiAgICAgICAgICAvLyAgICAgdGhpcy5mb3JtLkZpZWxkcy5pbmRleE9mKGVsZW1lbnQpID49IHRoaXMuZm9ybS5GaWVsZHMubGVuZ3RoIC0gMSxcclxuICAgICAgICAgIC8vIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJGaWVsZFR5cGVcIixcclxuICAgICAgICBkaXNwbGF5OiBcIlRpcG9sb2dpYVwiLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uRW51bSxcclxuICAgICAgICBlbnVtTW9kZWw6IEZpZWxkVHlwZUVudW0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDEycmVtXCIgfSxcclxuICAgICAgfSxcclxuICAgICAgeyBrZXk6IFwiTGFiZWxcIiwgZGlzcGxheTogXCJMYWJlbFwiLCBzdHlsZXM6IHsgZmxleDogXCIwIDAgOHJlbVwiIH0gfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJEZXNjcmlwdGlvblwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiRGVzY3JpemlvbmVcIixcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMTJyZW1cIiB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGVcIixcclxuICAgICAgICBkaXNwbGF5OiBcIlRpcG8gUmVjdXBlcm8gRGF0aVwiLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uRW51bSxcclxuICAgICAgICBlbnVtTW9kZWw6IERhdGFHZXR0ZXJUeXBlRW51bSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMTJyZW1cIiB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIlJlcXVpcmVkXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJPYmJsaWdhdG9yaW9cIixcclxuICAgICAgICB2YWx1ZTogKGVsZW1lbnQpID0+IGVsZW1lbnQuUmVxdWlyZWQsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5Cb29sZWFuLFxyXG4gICAgICAgIGJvb2xlYW5WYWx1ZXM6IHtcclxuICAgICAgICAgIHRydWU6ICc8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHN1Y2Nlc3MtY29sb3JcIj48L2k+JyxcclxuICAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS1jbG9zZSBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDVyZW1cIiwgY2VsbEFsaWdubWVudDogQ2VsbEFsaWdubWVudEVudW0uQ0VOVEVSIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiRm9ybXVsYVwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiQ2FsY29sYXRvXCIsXHJcbiAgICAgICAgdmFsdWU6IChlbGVtZW50KSA9PiBlbGVtZW50LkZvcm11bGEgIT0gbnVsbCAmJiBlbGVtZW50LkZvcm11bGEgIT0gJycsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5Cb29sZWFuLFxyXG4gICAgICAgIGJvb2xlYW5WYWx1ZXM6IHtcclxuICAgICAgICAgIHRydWU6ICc8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHN1Y2Nlc3MtY29sb3JcIj48L2k+JyxcclxuICAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS1jbG9zZSBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDVyZW1cIiwgY2VsbEFsaWdubWVudDogQ2VsbEFsaWdubWVudEVudW0uQ0VOVEVSIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiSW5MaXN0Vmlld1wiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiVmlzaWJpbGUgaW4gQ29tcGlsYXppb25lXCIsXHJcbiAgICAgICAgdmFsdWU6IChlbGVtZW50KSA9PiBlbGVtZW50LkluTGlzdFZpZXcsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5Cb29sZWFuLFxyXG4gICAgICAgIGJvb2xlYW5WYWx1ZXM6IHtcclxuICAgICAgICAgIHRydWU6ICc8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHN1Y2Nlc3MtY29sb3JcIj48L2k+JyxcclxuICAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS1jbG9zZSBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDdyZW1cIiwgY2VsbEFsaWdubWVudDogQ2VsbEFsaWdubWVudEVudW0uQ0VOVEVSIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiSW52aXNpYmlsaXR5XCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJPY2N1cGEgc3BhemlvP1wiLFxyXG4gICAgICAgIHZhbHVlOiAoZWxlbWVudCkgPT4gZWxlbWVudC5Jbkxpc3RWaWV3IHx8IGVsZW1lbnQuSW52aXNpYmlsaXR5ID09IEZpZWxkSW52aXNpYmlsaXR5RW51bVtcIk5BU0NPU1RPIENPTiBBUkVBIFZJU0lCSUxFXCJdLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uQm9vbGVhbixcclxuICAgICAgICBib29sZWFuVmFsdWVzOiB7XHJcbiAgICAgICAgICB0cnVlOiAnPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBzdWNjZXNzLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgICBmYWxzZTogJzxpIGNsYXNzPVwiZmEgZmEtY2xvc2UgZXJyb3ItY29sb3JcIj48L2k+JyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA3cmVtXCIsIGNlbGxBbGlnbm1lbnQ6IENlbGxBbGlnbm1lbnRFbnVtLkNFTlRFUiB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIlZpc2libGVJZlwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiVmlzaWJpbGl0w6AgY29uZGl6aW9uYXRhXCIsXHJcbiAgICAgICAgdmFsdWU6IChlbGVtZW50KSA9PiBlbGVtZW50LlZpc2libGVJZiAhPSBudWxsICYmIGVsZW1lbnQuVmlzaWJsZUlmICE9IFwiXCIsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5Cb29sZWFuLFxyXG4gICAgICAgIGJvb2xlYW5WYWx1ZXM6IHtcclxuICAgICAgICAgIHRydWU6ICc8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHN1Y2Nlc3MtY29sb3JcIj48L2k+JyxcclxuICAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS1jbG9zZSBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDdyZW1cIiwgY2VsbEFsaWdubWVudDogQ2VsbEFsaWdubWVudEVudW0uQ0VOVEVSIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiQW5zd2VyU3R5bGUuSW5MaXN0Vmlld1wiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiVmlzaWJpbGUgbmVsbGEgcmlzcG9zdGFcIixcclxuICAgICAgICB2YWx1ZTogKGVsZW1lbnQpID0+ICFlbGVtZW50LkFuc3dlclN0eWxlIHx8IGVsZW1lbnQuQW5zd2VyU3R5bGUgJiYgZWxlbWVudC5BbnN3ZXJTdHlsZS5Jbkxpc3RWaWV3LFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uQm9vbGVhbixcclxuICAgICAgICBib29sZWFuVmFsdWVzOiB7XHJcbiAgICAgICAgICB0cnVlOiAnPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBzdWNjZXNzLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgICBmYWxzZTogJzxpIGNsYXNzPVwiZmEgZmEtY2xvc2UgZXJyb3ItY29sb3JcIj48L2k+JyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA1cmVtXCIsIGNlbGxBbGlnbm1lbnQ6IENlbGxBbGlnbm1lbnRFbnVtLkNFTlRFUiB9LFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSAmJlxyXG4gICAgICB0aGlzLmZvcm0uRm9ybVNjYWxhclR5cGUgIT0gRm9ybVNjYWxhclR5cGVFbnVtLlNlbXBsaWNlXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5maWVsZHNDb2x1bW5zLnNwbGljZSgxLCAwLCB7XHJcbiAgICAgICAga2V5OiBcIkZpZWxkR3JvdXBcIixcclxuICAgICAgICBkaXNwbGF5OiBcIlNlemlvbmVcIixcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLkV4dGVybmFsVGVtcGxhdGUsXHJcbiAgICAgICAgZXh0ZXJuYWxUZW1wbGF0ZTogdGhpcy5maWVsZFNlY3Rpb25Db2x1bW5UZW1wbGF0ZSxcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMTRyZW1cIiB9LFxyXG4gICAgICB9KTtcclxuICAgICAgLy8gdGhpcy5maWVsZHNDb2x1bW5zLnB1c2goXHJcbiAgICAgIC8vICAge1xyXG4gICAgICAvLyAgICAga2V5OiBcIkZpZWxkR3JvdXBcIixcclxuICAgICAgLy8gICAgIGRpc3BsYXk6IFwiU2V6aW9uZVwiLFxyXG4gICAgICAvLyAgICAgdHlwZTogVHlwZUNvbHVtbi5FeHRlcm5hbFRlbXBsYXRlLFxyXG4gICAgICAvLyAgICAgZXh0ZXJuYWxUZW1wbGF0ZTogdGhpcy5maWVsZFNlY3Rpb25Db2x1bW5UZW1wbGF0ZSxcclxuICAgICAgLy8gICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCAxNHJlbVwiIH1cclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hY3Rpb25CdXR0b25zQ29sdW1ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJhY3Rpb25cIixcclxuICAgICAgICBkaXNwbGF5OiBcIlwiLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uTWVudUFjdGlvbixcclxuICAgICAgICBidXR0b25NZW51SWNvbjogXCJtb3JlX3ZlcnRcIixcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgNiVcIiB9LFxyXG4gICAgICAgIGFjdGlvbnM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJNb2RpZmljYVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImVkaXRcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiB0aGlzLm9wZW5BY3Rpb25CdXR0b25EaWFsb2coZWxlbWVudCksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkVsaW1pbmFcIixcclxuICAgICAgICAgICAgaWNvbjogXCJkZWxldGVcIixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMuZGVsZXRlQWN0aW9uQnV0dG9uKGVsZW1lbnQpLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIF0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHsga2V5OiBcIkJ1dHRvbkxhYmVsXCIsIGRpc3BsYXk6IFwiRXRpY2hldHRhXCIsIHN0eWxlczogeyBmbGV4OiBcIjAgMCAzMCVcIiB9IH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiQnV0dG9uQ29kZVwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiQ29kaWNlXCIsXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDIwJVwiIH0sXHJcbiAgICAgIH0sICAgICAgXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiSWNvblwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiSWNvbmFcIixcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMTAlXCIgfSxcclxuICAgICAgfSwgICAgICBcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJTaG93SW5cIixcclxuICAgICAgICBkaXNwbGF5OiBcIlNlemlvbmlcIixcclxuICAgICAgICB2YWx1ZTogKGVsKSA9PiB7XHJcbiAgICAgICAgICB2YXIgZmluYWxUZXh0ID0gXCJcIjtcclxuICAgICAgICAgIGVsLlNob3dJbi5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICBmaW5hbFRleHQgKz0gQWN0aW9uRmxhZ0VudW1bZWxlbWVudF0rXCIgLyBcIjtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuIGZpbmFsVGV4dDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCAyMCVcIiB9LFxyXG4gICAgICB9LFxyXG4gICAgXTsgICAgXHJcblxyXG4gICAgdGhpcy5hY3Rpb25zT25SZWNvcmRDb2x1bW5zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcImFjdGlvblwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiXCIsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5NZW51QWN0aW9uLFxyXG4gICAgICAgIGJ1dHRvbk1lbnVJY29uOiBcIm1vcmVfdmVydFwiLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA2JVwiIH0sXHJcbiAgICAgICAgYWN0aW9uczogW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk1vZGlmaWNhXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZWRpdFwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMub3BlbkFjdGlvbk9uUmVjb3JkRGlhbG9nKGVsZW1lbnQpLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJFbGltaW5hXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZGVsZXRlXCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT5cclxuICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUVsZW1lbnQoZWxlbWVudCwgXCJBY3Rpb25zT25SZWNvcmRcIiksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIlNwb3N0YSBzdVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFycm93X3Vwd2FyZFwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlRWxlbWVudChlbGVtZW50LCB0cnVlLCBcIkFjdGlvbnNPblJlY29yZFwiKSxcclxuICAgICAgICAgICAgZGlzYWJsZWQ6IChlbGVtZW50KSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQuaW5kZXhPZihlbGVtZW50KSA9PT0gMCxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiU3Bvc3RhIGdpw7lcIixcclxuICAgICAgICAgICAgaWNvbjogXCJhcnJvd19kb3dud2FyZFwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlRWxlbWVudChlbGVtZW50LCBmYWxzZSwgXCJBY3Rpb25zT25SZWNvcmRcIiksXHJcbiAgICAgICAgICAgIGRpc2FibGVkOiAoZWxlbWVudCkgPT5cclxuICAgICAgICAgICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmluZGV4T2YoZWxlbWVudCkgPj1cclxuICAgICAgICAgICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmxlbmd0aCAtIDEsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHsga2V5OiBcIkljb25cIiwgZGlzcGxheTogXCJJY29uYVwiLCBzdHlsZXM6IHsgZmxleDogXCIgMCAwIDE1JVwiIH0gfSxcclxuICAgICAgeyBrZXk6IFwiTmFtZVwiLCBkaXNwbGF5OiBcIk5vbWVcIiwgc3R5bGVzOiB7IGZsZXg6IFwiIDAgMCAyMCVcIiB9IH0sXHJcbiAgICAgIHsga2V5OiBcIkFjdGlvblwiLCBkaXNwbGF5OiBcIkF6aW9uZVwiIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIHRoaXMudHJpZ2dlcnNDb2x1bW5zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcImFjdGlvblwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiXCIsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5NZW51QWN0aW9uLFxyXG4gICAgICAgIGJ1dHRvbk1lbnVJY29uOiBcIm1vcmVfdmVydFwiLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA2JVwiIH0sXHJcbiAgICAgICAgYWN0aW9uczogW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk1vZGlmaWNhXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZWRpdFwiLFxyXG4gICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMub3BlblRyaWdnZXJzRGlhbG9nKGVsZW1lbnQpLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJFbGltaW5hXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZGVsZXRlXCIsXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT5cclxuICAgICAgICAgICAgICB0aGlzLmRlbGV0ZVRyaWdnZXIoZWxlbWVudCksXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXSxcclxuICAgICAgfSxcclxuICAgICAgeyBrZXk6IFwiZGVzY3JpcHRpb25cIiwgZGlzcGxheTogXCJEZXNjcml6aW9uZVwiLCBzdHlsZXM6IHsgZmxleDogXCIgMCAwIDE1JVwiIH0gfSxcclxuICAgICAgeyBrZXk6IFwiZXhlY3V0aW9uXCIsIGRpc3BsYXk6IFwiQ29zYSBlc2VndWVcIiwgc3R5bGVzOiB7IGZsZXg6IFwiIDAgMCAxNSVcIiB9fSxcclxuICAgIF07XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYSBpbCBGb3JtR3JvdXAgcGVyIGwnb2dnZXR0byBGb3JtXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVGb3JtRm9ybSgpIHtcclxuICAgIHRoaXMuZm9ybUZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBDb2RlOiBbdGhpcy5mb3JtLkNvZGVdLFxyXG4gICAgICBOYW1lOiBbdGhpcy5mb3JtLk5hbWUsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBEZXNjcmlwdGlvbjogW3RoaXMuZm9ybS5EZXNjcmlwdGlvbl0sXHJcbiAgICAgIEZvcm1TY2FsYXJUeXBlOiBbdGhpcy5mb3JtLkZvcm1TY2FsYXJUeXBlLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5vbkNoYW5nZUZvcm1TY2FsYXJUeXBlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEcmFnIGFuZCBEcm9wIGRlbGxlIGNvbG9ubmUgZGVsIGZvcm1cclxuICAgKi9cclxuXHJcbiAgb25EcmFnUmVsZWFzZWQoZXZlbnQpe1xyXG5cclxuICB9XHJcblxyXG4gIG9uRHJhZ0VuZGVkKGV2ZW50KXtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNldEZpZWxkT3JkaW5hbFBvc2l0aW9uKCk7XHJcbiAgICAgIHRoaXMucmVsb2FkRmllbGRzVGFibGUoKTtcclxuICAgIH0sMTAwMCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhIGlsIEZvcm1Hcm91cCBlcHIgbCdhZ2dpdW50YSBvIGxhIG1vZGlmaWNhIGRpIHVuYSBhY3Rpb24gc3VpIHJlY29yZCBkZWxsYSBGb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlQWN0aW9uT25SZWNvcmRGb3JtKCkge1xyXG4gICAgdGhpcy5hY3Rpb25PblJlY29yZEZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBOYW1lOiBbdGhpcy5zZWxlY3RlZEFjdGlvbi5OYW1lLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgSWNvbjogW3RoaXMuc2VsZWN0ZWRBY3Rpb24uSWNvbiwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIEFjdGlvbjogW3RoaXMuc2VsZWN0ZWRBY3Rpb24uQWN0aW9uLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hpdWRlIGlsIGRpYWxvZyBwZXIgYWdnaXVuZ2VyZS9tb2RpZmljYXJlIHVuIEZpZWxkIHNlbnphIHNhbHZhcmVcclxuICAgKi9cclxuICBwcml2YXRlIGNsb3NlRmllbGREaWFsb2coKSB7XHJcbiAgICBpZiAodGhpcy5kaWFsb2dGaWVsZFJlZiAhPSB1bmRlZmluZWQpIHRoaXMuZGlhbG9nRmllbGRSZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZ2VzdGlyZSBsJ2FwZXJ0dXJhIGRlbCBkaWFsb2cgcGVyIGxhIG1vZGlmaWNhIGRpIHVuIEZpZWxkLlxyXG4gICAqIFNlIGlsIGZpZWxkIMOoIGRpIHRpcG8gXCJGb3JtIGRpIGRldHRhZ2xpb1wiIGFwcmUgaWwgZGlhbG9nIHBlciBsYSBtb2RpZmljYSBkaSB1bmFcclxuICAgKiBJbm5lckZvcm0gYWx0cmltZW50aSBhcHJlIHF1ZWxsbyBwZXIgbGEgbW9kaWZpY2EgZGkgdW4gRmllbGQuXHJcbiAgICogQHBhcmFtIGZpZWxkIENhbXBvIGRhIG1vZGlmaWNhcmVcclxuICAgKi9cclxuICBwcml2YXRlIGVkaXRGaWVsZChmaWVsZDogQmFzZUZpZWxkKSB7XHJcbiAgICBpZiAoZmllbGQuRmllbGRUeXBlICE9IEZpZWxkVHlwZUVudW1bXCJGb3JtIGRpIGRldHRhZ2xpb1wiXSkge1xyXG4gICAgICB0aGlzLm9wZW5GaWVsZERpYWxvZyhmaWVsZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm9wZW5Jbm5lckZvcm1EaWFsb2coXHJcbiAgICAgICAgdGhpcy5mb3JtLklubmVyRm9ybXMuZmluZCgoZikgPT4gZi5OYW1lID09IGZpZWxkLkxhYmVsKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBnZXN0aXJlIGxhIGR1cGxpY2F6aW9uZSBkaSB1biBGaWVsZC5cclxuICAgKiBAcGFyYW0gZmllbGQgQ2FtcG8gZGEgbW9kaWZpY2FyZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZHVwbGljYXRlRmllbGQoZmllbGQ6IEJhc2VGaWVsZCkge1xyXG4gICAgaWYgKGZpZWxkLkZpZWxkVHlwZSAhPSBGaWVsZFR5cGVFbnVtW1wiRm9ybSBkaSBkZXR0YWdsaW9cIl0pIHtcclxuICAgICAgLy8gcmljcmVvIGwnb2dnZXR0byBwYXNzYW5kbyBwZXIgdW4ganNvblxyXG4gICAgICBsZXQgY2xvbmVGaWVsZDogQmFzZUZpZWxkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmaWVsZCkpO1xyXG5cclxuICAgICAgY2xvbmVGaWVsZC5MYWJlbCA9IGZpZWxkW1wiTGFiZWxcIl0gKyBcIkNvcHlcIjtcclxuICAgICAgY2xvbmVGaWVsZC5PcmRpbmFsUG9zaXRpb24gPSB0aGlzLmZvcm0uRmllbGRzLmxlbmd0aCArIDE7XHJcblxyXG4gICAgICB0aGlzLnNlbGVjdGVkRmllbGQgPSBuZXcgQmFzZUZpZWxkKCk7XHJcbiAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZEZpZWxkID0gbnVsbDtcclxuICAgICAgdGhpcy5vblNhdmVGaWVsZChjbG9uZUZpZWxkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGFsZXJ0KFwibm9uIMOoIHBvc3NpYmlsZSBkdXBsaWNhcmUgdW5hIGZvcm0gZGkgZGV0dGFnbGlvXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaW11b3ZlcmUgdW4gRmllbGQgYWxsJ2ludGVybm8gZGkgdW5hIEZvcm0uXHJcbiAgICogUmljaGllZGUgY29uZmVybWEgYWxsJ3V0ZW50ZSBwcmltYSBkaSByaW11b3ZlcmxvLlxyXG4gICAqIEBwYXJhbSBmaWVsZCBCYXNlRmllbGQgZGEgcmltdW92ZXJlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkZWxldGVFbGVtZW50KFxyXG4gICAgZWxlbWVudDogQmFzZUZpZWxkIHwgQWN0aW9uT25SZWNvcmQgfCBGb3JtLFxyXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmdcclxuICApIHtcclxuICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLkNvbmZpcm0oXHJcbiAgICAgIFwiRWxpbWluYXJlIGwnZWxlbWVudG8gc2VsZXppb25hdG8/XCIsXHJcbiAgICAgICgpID0+IHtcclxuICAgICAgICB0aGlzLmZvcm1bcHJvcGVydHlOYW1lXS5zcGxpY2UoXHJcbiAgICAgICAgICB0aGlzLmZvcm1bcHJvcGVydHlOYW1lXS5pbmRleE9mKGVsZW1lbnQpLFxyXG4gICAgICAgICAgMVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PT0gXCJGaWVsZHNcIikge1xyXG4gICAgICAgICAgdGhpcy5zZXRGaWVsZE9yZGluYWxQb3NpdGlvbigpO1xyXG4gICAgICAgICAgdGhpcy5yZWxvYWRGaWVsZHNUYWJsZSgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHlOYW1lID09PSBcIkFjdGlvbnNPblJlY29yZFwiKSB7XHJcbiAgICAgICAgICB0aGlzLnNldEFjdGlvbk9yZGluYWxQb3NpdGlvbigpO1xyXG4gICAgICAgICAgdGhpcy5yZWxvYWRBY3Rpb25zT25SZWNvcmRUYWJsZSgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHlOYW1lID09PSBcIkFjdGlvbkJ1dHRvbnNcIikge1xyXG4gICAgICAgICAgdGhpcy5zZXRBY3Rpb25CdXR0b25PcmRpbmFsUG9zaXRpb24oKTtcclxuICAgICAgICAgIHRoaXMucmVsb2FkQWN0aW9uQnV0dG9uc09uUmVjb3JkVGFibGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGZhbHNlLFxyXG4gICAgICBcIlJpY2hpZXN0YSBjb25mZXJtYVwiXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzcG9zdGFyZSB1biBjYW1wbyBhbGwnaW50ZXJubyBkZWxsYSBmb3JtLlxyXG4gICAqIEBwYXJhbSBmaWVsZCBPZ2dldHRvIGRpIHRpcG8gQmFzZUZpZWxkIGRhIHNwb3N0YXJlLlxyXG4gICAqIEBwYXJhbSBtb3ZlVXAgU2UgVFJVRSBhbGxvcmEgc3Bvc3RhIHZlcnNvIGwnYWx0byBpbCBjYW1wbyAoYWJiYXNzYSBsJ2luZGljZSkgYWx0cmltZW50aSBpbCBjb250cmFyaW8uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBtb3ZlRWxlbWVudChcclxuICAgIGVsZW1lbnQ6IEJhc2VGaWVsZCB8IEFjdGlvbk9uUmVjb3JkLFxyXG4gICAgbW92ZVVwOiBib29sZWFuLFxyXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmdcclxuICApIHtcclxuICAgIGNvbnN0IHN0YXJ0aW5nSW5kZXggPSB0aGlzLmZvcm1bcHJvcGVydHlOYW1lXS5pbmRleE9mKGVsZW1lbnQpO1xyXG4gICAgY29uc3QgZW5kaW5nSW5kZXggPSBzdGFydGluZ0luZGV4ICsgKG1vdmVVcCA/IC0xIDogMSk7XHJcblxyXG4gICAgdGhpcy5mb3JtW3Byb3BlcnR5TmFtZV0uc3BsaWNlKHN0YXJ0aW5nSW5kZXgsIDEpO1xyXG4gICAgdGhpcy5mb3JtW3Byb3BlcnR5TmFtZV0uc3BsaWNlKGVuZGluZ0luZGV4LCAwLCBlbGVtZW50KTtcclxuXHJcbiAgICBpZiAocHJvcGVydHlOYW1lID09PSBcIkZpZWxkc1wiKSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRPcmRpbmFsUG9zaXRpb24oKTtcclxuICAgICAgdGhpcy5yZWxvYWRGaWVsZHNUYWJsZSgpO1xyXG4gICAgfSBlbHNlIGlmIChwcm9wZXJ0eU5hbWUgPT09IFwiQWN0aW9uc09uUmVjb3JkXCIpIHtcclxuICAgICAgdGhpcy5zZXRBY3Rpb25PcmRpbmFsUG9zaXRpb24oKTtcclxuICAgICAgdGhpcy5yZWxvYWRBY3Rpb25zT25SZWNvcmRUYWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW1wb3N0YSBsJ29yZGluYW1lbnRvIGRlbGxlIHNlemlvbmkgY2hlIGNvbXBvbmdvbm8gbGEgZm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIHNldEZvcm1GaWVsZEdyb3VwT3JkaW5hbFBvc2l0aW9uKCkge1xyXG4gICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMuZm9yRWFjaCgoZywgaSkgPT4gKGcuT3JkaW5hbFBvc2l0aW9uID0gaSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW1wb3N0YSBsJ29yZGluYW1lbnRvIGRlaSBjYW1waSBhbGwnaW50ZXJubyBkZWxsYSBmb3JtIGluIGJhc2UgYWxsJ29yZGluZSBjaGUgbCd1dGVudGVcclxuICAgKiBoYSBkZWZpbml0byBuZWxsYSB0YWJlbGxhIGluIGN1aSBzb25vIG1vc3RyYXRpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRGaWVsZE9yZGluYWxQb3NpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmZvcm0uRmllbGRzKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgICBmaWVsZC5PcmRpbmFsUG9zaXRpb24gPSB0aGlzLmZvcm0uRmllbGRzLmluZGV4T2YoZmllbGQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmljYXJpY2FyZSBpIGRhdGkgZGVsbGEgdGFiZWxsYSBkZWkgY2FtcGkgYWdnaXVudGkgaW4gdW5hIGZvcm1cclxuICAgKi9cclxuICBwcml2YXRlIHJlbG9hZEZpZWxkc1RhYmxlKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGRzVGFibGUpIHtcclxuICAgICAgdGhpcy5maWVsZHNUYWJsZS5yZWxvYWREYXRhdGFibGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEltcG9zdGEgbCdvcmRpbmFtZW50byBkZWkgY2FtcGkgYWxsJ2ludGVybm8gZGVsbGEgZm9ybSBpbiBiYXNlIGFsbCdvcmRpbmUgY2hlIGwndXRlbnRlXHJcbiAgICogaGEgZGVmaW5pdG8gbmVsbGEgdGFiZWxsYSBpbiBjdWkgc29ubyBtb3N0cmF0aVxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0QWN0aW9uT3JkaW5hbFBvc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQpIHtcclxuICAgICAgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZC5mb3JFYWNoKChhY3Rpb24pID0+IHtcclxuICAgICAgICBhY3Rpb24uT3JkaW5hbFBvc2l0aW9uID0gdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZC5pbmRleE9mKGFjdGlvbik7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW1wb3N0YSBsJ29yZGluYW1lbnRvIGRlaSBjYW1waSBhbGwnaW50ZXJubyBkZWxsYSBmb3JtIGluIGJhc2UgYWxsJ29yZGluZSBjaGUgbCd1dGVudGVcclxuICAgKiBoYSBkZWZpbml0byBuZWxsYSB0YWJlbGxhIGluIGN1aSBzb25vIG1vc3RyYXRpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRBY3Rpb25CdXR0b25PcmRpbmFsUG9zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMpIHtcclxuICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMuZm9yRWFjaCgoYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgYWN0aW9uLk9yZGluYWxQb3NpdGlvbiA9IHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zLmluZGV4T2YoYWN0aW9uKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfSAgXHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmljYXJpY2FyZSBpIGRhdGkgZGVsbGEgdGFiZWxsYSBkZWxsZSBhemlvbmkgYWdnaXVudGl2ZSBzdWkgcmVjb3JkIGRlbGxhIEZvcm0uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZWxvYWRBY3Rpb25zT25SZWNvcmRUYWJsZSgpIHtcclxuICAgIGlmICh0aGlzLmFjdGlvbnNPblJlY29yZFRhYmxlKSB7XHJcbiAgICAgIHRoaXMuYWN0aW9uc09uUmVjb3JkVGFibGUucmVsb2FkRGF0YXRhYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJpY2FyaWNhcmUgaSBkYXRpIGRlbGxhIHRhYmVsbGEgZGVsbGUgYXppb25pIGFnZ2l1bnRpdmUgc3VpIHJlY29yZCBkZWxsYSBGb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVsb2FkQWN0aW9uQnV0dG9uc09uUmVjb3JkVGFibGUoKSB7XHJcbiAgICBpZiAodGhpcy5hY3Rpb25CdXR0b25zVGFibGUpIHtcclxuICAgICAgdGhpcy5hY3Rpb25CdXR0b25zVGFibGUucmVsb2FkRGF0YXRhYmxlKCk7XHJcbiAgICB9XHJcbiAgfSAgXHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBvbkV4dGVybmFsQ29tcG9uZW50T3V0KGV2OiBldmVudE91dCl7XHJcbiAgICB0aGlzLm91dC5lbWl0KGV2KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRSSUdHRVJTXHJcbiAgICovXHJcblxyXG4gIG9wZW5UcmlnZ2Vyc0RpYWxvZyhldjogVHJpZ2dlciA9IG51bGwpIHtcclxuXHJcbiAgICBpZiAoZXYgIT0gbnVsbCl7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmlnZ2VyID0gZXY7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVHJpZ2dlciA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kaWFsb2dUcmlnZ2Vyc1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dUcmlnZ2Vycywge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICB3aWR0aDogXCI3NSVcIixcclxuICAgICAgaGVpZ2h0OiBcIjgwJVwiLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzYXZlVHJpZ2dlcihlbGVtZW50OiBUcmlnZ2VyKXtcclxuICAgIFxyXG4gICAgaWYgKGVsZW1lbnQgIT0gbnVsbCl7XHJcbiAgICAgIGlmICh0aGlzLmZvcm0uVHJpZ2dlcnMgIT0gbnVsbCl7XHJcbiAgICAgICAgdmFyIGV4aXN0c1RyaWdnZXIgPSB0aGlzLmZvcm0uVHJpZ2dlcnMuZmluZCh4ID0+IHguQ0lEID09IGVsZW1lbnQuQ0lEKTtcclxuICAgICAgICBpZiAoZXhpc3RzVHJpZ2dlciA9PSBudWxsKXtcclxuICAgICAgICAgIC8vIE51b3ZvIHRyaWdnZXJcclxuICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2Vycy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBleGlzdHNUcmlnZ2VyID0gZWxlbWVudDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gbmV3IEFycmF5PFRyaWdnZXI+KCk7XHJcbiAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzLnB1c2goZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50cmlnZ2Vyc1RhYmxlLnJlbG9hZERhdGF0YWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGlhbG9nVHJpZ2dlcnNSZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVRyaWdnZXIoZWxlbWVudDogVHJpZ2dlcil7XHJcbiAgICB2YXIgaW5kZXggPSB0aGlzLmZvcm0uVHJpZ2dlcnMuZmluZEluZGV4KHggPT4geC5DSUQgPT0gZWxlbWVudC5DSUQpO1xyXG4gICAgdGhpcy5mb3JtLlRyaWdnZXJzLnNwbGljZShpbmRleCwxKTtcclxuICAgIHRoaXMudHJpZ2dlcnNUYWJsZS5yZWxvYWREYXRhdGFibGUoKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZUFjdGlvbkJ1dHRvbihlbGVtZW50OiBBY3Rpb25CdXR0b24pe1xyXG4gICAgdmFyIGluZGV4ID0gdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMuZmluZEluZGV4KHggPT4geC5CdXR0b25Db2RlID09IGVsZW1lbnQuQnV0dG9uQ29kZSk7XHJcbiAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucy5zcGxpY2UoaW5kZXgsMSk7XHJcbiAgICB0aGlzLmFjdGlvbkJ1dHRvbnNUYWJsZS5yZWxvYWREYXRhdGFibGUoKTtcclxuICB9ICBcclxuXHJcbiAgb25Db250ZXN0dWFsaXphdGlvblNlbGVjdCgpe1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbnRlc3R1YWxpemF0aW9uVmFsdWUgPSB0aGlzLmNvbnRlc3R1YWxpemF0aW9uLmZpbmQoeCA9PiB4LmVudGl0eVRhYmxlTmFtZSA9PSB0aGlzLnNlbGVjdGVkQ29udGVzdHVhbGl6YXRpb24pLmVudGl0eUlEO1xyXG4gIH1cclxuXHJcbiAgb25Db250ZXN0dWFsaXphdGlvblNlbGVjdFZhbHVlKCl7XHJcbiAgICB0aGlzLmNvbnRlc3R1YWxpemF0aW9uLmZpbmQoeCA9PiB4LmVudGl0eVRhYmxlTmFtZSA9PSB0aGlzLnNlbGVjdGVkQ29udGVzdHVhbGl6YXRpb24pLmVudGl0eUlEID0gdGhpcy5zZWxlY3RlZENvbnRlc3R1YWxpemF0aW9uVmFsdWU7XHJcbiAgfVxyXG5cclxuICBhcHBseUNvbnRlc3R1YWxpemF0aW9uKGVsZW1lbnQpe1xyXG4gICAgdGhpcy5mb3JtQ29tcGxldGVkID0gZmFsc2U7XHJcbiAgICBcclxuICAgIGlmICh0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50ICE9IG51bGwpe1xyXG4gICAgICB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLmNvbmZpZy5jb250ZXN0dWFsaXphdGlvbiA9IGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZm9ybUNvbXBsZXRlZCA9IHRydWU7XHJcbiAgICB9LDUwKTtcclxuICB9XHJcblxyXG4gIG9uRmlyZVRyaWdnZXIoZXY6IEZpcmVUcmlnZ2VyKXtcclxuICAgIHRoaXMuZmlyZVRyaWdnZXIuZW1pdChldik7XHJcbiAgfSAgIFxyXG5cclxufVxyXG4iLCI8ZXFwLWR5bmFtaWMtbW9kdWxlLXNwaW5uZXI+PC9lcXAtZHluYW1pYy1tb2R1bGUtc3Bpbm5lcj5cclxuXHJcblxyXG48ZGl2IGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yLWhlYWRlciByb3cgdGl0bGUgcC0xXCIgKm5nSWY9XCJpbm5lckZvcm1NYW5hZ21lbnRcIj5cclxuICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEwXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXRpdGxlLXN0YW5kYXJkXCI+QWdnaXVudGEgZm9ybSBkaSBkZXR0YWdsaW88L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiY29sLW1kLTIgdGV4dC1yaWdodFwiPlxyXG4gICAgPG1hdC1pY29uIGNsYXNzPVwiY2xvc2VcIiAoY2xpY2spPVwiY2xvc2VEaWFsb2dJbm5lckZvcm0oKVwiPmNsb3NlPC9tYXQtaWNvbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48IS0tI3JlZ2lvbiBFWFBPUlQgTU9EVUxFIC0tPlxyXG48ZGl2IGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yLWV4cG9ydGVyXCIgKm5nSWY9XCJsb2FkZXIgJiYgdmlld01vZGUgPT0gJ0V4cG9ydCdcIiBjbGFzcz1cInAtM1wiPlxyXG4gIFxyXG4gIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwiZXhwb3J0KClcIj5Fc3BvcnRhPC9idXR0b24+XHJcbiAgXHJcbiAgPCEtLTxhXHJcbiAgICBjbGFzcz1cImJ0biBidG4tY2xlYXJcIlxyXG4gICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICB0aXRsZT1cIkRvd25sb2FkIEpTT05cIlxyXG4gICAgW2hyZWZdPVwiZG93bmxvYWRKc29uSHJlZlwiXHJcbiAgICBkb3dubG9hZD1cInt7IGRvd25sb2FkTmFtZSB9fS5qc29uXCJcclxuICAgID5FeHBvcnQ8L2E+LS0+XHJcblxyXG48L2Rpdj5cclxuPCEtLSNlbmRyZWdpb24gRVhQT1JUIE1PRFVMRSAtLT5cclxuXHJcbjxtYXQtaG9yaXpvbnRhbC1zdGVwcGVyXHJcbiAgKm5nSWY9XCJsb2FkZXIgJiYgZm9ybUZvcm1Hcm91cCAmJiB2aWV3TW9kZSA9PSAnYWRkT3JFZGl0J1wiXHJcbiAgbGluZWFyXHJcbiAgI3N0ZXBwZXJcclxuICBbbmdDbGFzc109XCJ7IG91dGVyRm9ybTogdHJ1ZSwgJ2lubmVyRm9ybU1hbmFnbWVudC1zdGVwcGVyJzogaW5uZXJGb3JtTWFuYWdtZW50ICB9XCJcclxuICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci1zdGVwcGVyIHt7ICdsYXN0LWVkaXRlZC1zdGVwLScgKyBzdGVwcGVyLnNlbGVjdGVkSW5kZXggfX1cIlxyXG4+XHJcbiAgPCEtLSNyZWdpb24gREFUSSBHRU5FUkFMSSBERUxMQSBGT1JNIC0tPlxyXG4gIDxtYXQtc3RlcCBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci1nZW5lcmFsLWRhdGFcIiBbc3RlcENvbnRyb2xdPVwiZm9ybUZvcm1Hcm91cFwiPlxyXG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtRm9ybUdyb3VwXCIgKGtleWRvd24uZW50ZXIpPVwiKGZhbHNlKVwiPlxyXG4gICAgICA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwic3RlcHBlci1oZWFkZXItb3ZlcmxheVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwic2V0Rm9ybVN0YXR1cyhmYWxzZSlcIlxyXG4gICAgICAgID48L2Rpdj5cclxuICAgICAgICBEYXRpIGdlbmVyYWxpIGRlbGxhIGZvcm1cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZmlyc3RSb3dcIj5cclxuICAgICAgICA8IS0tIFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ1ZhIGluc2VyaXRvIHBlciBlc3NlcmUgdXRpbGl6emF0byBjb21lIHJpZmVyaW1lbnRvIG5laSB0ZW1wbGF0ZS4gbm9uIGFjY2V0dGEgY2FyYXR0ZXJpIHNwZWNpYWxpIG5lIHNwYXppLidcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBDb2RpY2UgVW5pdm9jbyBcclxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibmFtZVwiPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidWYSBpbnNlcml0byBwZXIgZXNzZXJlIHV0aWxpenphdG8gY29tZSByaWZlcmltZW50byBuZWkgdGVtcGxhdGUuIG5vbiBhY2NldHRhIGNhcmF0dGVyaSBzcGVjaWFsaSBuZSBzcGF6aS4nXCJcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJDb2RlXCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm0uQ29kZVwiXHJcbiAgICAgICAgICAgICAgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic2V0Q29kZShmb3JtLkNvZGUpXCJcclxuICAgICAgICAgICAgICBkaXNhYmxlZD1cInRydWVcIlxyXG4gICAgICAgICAgICAgIHJlYWRvbmx5PVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PiBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj48L2Rpdj5cclxuICAgICAgICAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm5hbWVcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiXHJcbiAgICAgICAgICA+ICAgICAgICAgIFxyXG4gICAgICAgICAgPG1hdC1sYWJlbD5Ob21lPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIk5vbWVcIlxyXG4gICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiTmFtZVwiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmb3JtLk5hbWVcIlxyXG4gICAgICAgICAgICAgIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInNldE5hbWUoZm9ybS5OYW1lKVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgIDwhLS0gPG1hdC1sYWJlbD5UaXBvIGRpIHZpc3VhbGl6emF6aW9uZTwvbWF0LWxhYmVsPiAtLT5cclxuICAgICAgICAgIDxlcXAtc2VsZWN0XHJcbiAgICAgICAgICAgIGNsYXNzPVwibmFtZVNlY3Rpb25cIlxyXG4gICAgICAgICAgICBbZW51bURhdGFdPVwiRm9ybVNjYWxhclR5cGVFbnVtXCJcclxuICAgICAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cImZvcm0uRm9ybVNjYWxhclR5cGVcIlxyXG4gICAgICAgICAgICBbaXNSZXF1aXJlZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIHJlcXVpcmVkXHJcbiAgICAgICAgICAgIFtzaG93Q2FuY2VsQnV0dG9uXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgW2Zvcm1Hcm91cElucHV0XT1cImZvcm1Gb3JtR3JvdXBcIlxyXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiJ0Zvcm1TY2FsYXJUeXBlJ1wiXHJcbiAgICAgICAgICAgIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25DaGFuZ2VGb3JtU2NhbGFyVHlwZSgpXCJcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJUaXBvIGRpIHZpc3VhbGl6emF6aW9uZVwiXHJcblxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibmFtZVwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+RGVzY3JpemlvbmU8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJEZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmb3JtLkRlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwic3RyaW5nU2FuaXRpemVyKGZvcm0uTmFtZSlcIlxyXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRGVzY3JpemlvbmVcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cInJvdyBpbnNlcnRlZFwiXHJcbiAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgIGZvcm0uRm9ybVNjYWxhclR5cGUgJiZcclxuICAgICAgICAgIGZvcm0uRm9ybVNjYWxhclR5cGUgIT0gRm9ybVNjYWxhclR5cGVFbnVtLlNlbXBsaWNlXHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibmFtZVNlY3Rpb25cIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPiBOb21lIHNlemlvbmUgKGludmlvIHBlciBjb25mZXJtYXJlKSA8L21hdC1sYWJlbD5cclxuXHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmb3JtRmllbGRHcm91cE5hbWVcIlxyXG4gICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXHJcbiAgICAgICAgICAgICAgKGtleXVwKT1cIm9uRm9ybUZpZWxkR3JvdXBOYW1lS2V5VXAoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJOb21lIHNlemlvbmUgKGludmlvIHBlciBjb25mZXJtYXJlKVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtci0zXCI+U2V6aW9uaSBpbnNlcml0ZTo8L3NwYW4+XHJcbiAgICAgICAgICA8dWwgY2xhc3M9XCJzZWN0aW9uLWxpc3RcIj5cclxuICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBncm91cE5hbWUgb2YgZm9ybS5Gb3JtRmllbGRzR3JvdXBzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZWN0aW9uSW5zZXJ0XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb25cclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtci0xXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlRm9ybUZpZWxkR3JvdXBOYW1lKGdyb3VwTmFtZS5OYW1lKVwiXHJcbiAgICAgICAgICAgICAgICAgID5jbG9zZSA8L21hdC1pY29uXHJcbiAgICAgICAgICAgICAgICA+e3sgZ3JvdXBOYW1lLk5hbWUgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgPCEtLSBJTVBPUlQgLS0+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgKm5nSWY9XCIhdGhpcy5mb3JtSURcIlxyXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWNsZWFyIGJ1dHRvbi1uZXh0IG1lLTJcIlxyXG4gICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiaW1wb3J0TW9kdWxlKClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIEltcG9ydGFcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8IS0tIEVORCBJTVBPUlQgLS0+XHJcblxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIGNsYXNzPVwiYnV0dG9uLW5leHRcIlxyXG4gICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICBtYXRTdGVwcGVyTmV4dFxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1Gb3JtR3JvdXAuaW52YWxpZFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgU3VjY2Vzc2l2b1xyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZm9ybT5cclxuICA8L21hdC1zdGVwPlxyXG4gIDwhLS0jZW5kcmVnaW9uIERBVEkgR0VORVJBTEkgREVMTEEgRk9STSAtLT5cclxuXHJcbiAgPCEtLSNyZWdpb24gQUdHSVVOVEEgREVJIENBTVBJIERFTExBIEZPUk0gLS0+XHJcbiAgPG1hdC1zdGVwIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yLWFkZC1maWVsZFwiIFtjb21wbGV0ZWRdPVwiaXNGaWVsZFN0ZXBDb21wbGV0ZWQoKVwiPlxyXG4gICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD5cclxuICAgICAgPGRpdiBjbGFzcz1cInN0ZXBwZXItaGVhZGVyLW92ZXJsYXlcIiAoY2xpY2spPVwic2V0Rm9ybVN0YXR1cyhmYWxzZSlcIj48L2Rpdj5cclxuICAgICAgPG1hdC1sYWJlbD5DYW1waSBkYSBpbnNlcmlyZTwvbWF0LWxhYmVsPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGp1c3RpZnktY29udGVudC1zdGFydCBhZGRCdXR0b25zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtZS0yXCJcclxuICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib3BlbkZpZWxkRGlhbG9nKClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkFnZ2l1bmdpIGNhbXBvPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZWQgbWUtMlwiXHJcbiAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9wZW5Jbm5lckZvcm1EaWFsb2coKVwiXHJcbiAgICAgICAgICAqbmdJZj1cIiFpbm5lckZvcm1NYW5hZ21lbnRcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkFnZ2l1bmdpIGZvcm0gZGkgZGV0dGFnbGlvPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxlcXAtdGFibGVcclxuICAgICAgY2xhc3M9XCJ0YWJsZVwiXHJcbiAgICAgICNmaWVsZHNUYWJsZVxyXG4gICAgICBbY3JlYXRlTWF0Q2FyZF09XCJmYWxzZVwiXHJcbiAgICAgIFtjb2x1bW5zXT1cImZpZWxkc0NvbHVtbnNcIlxyXG4gICAgICBbZW5hYmxlRHJhZ0FuZERyb3BdPVwiZmFsc2VcIlxyXG4gICAgICBbZW5hYmxlRHJhZ0NvbHVtbl09XCJ0cnVlXCJcclxuICAgICAgW2NoYW5nZURyYWdSb3dQb3NpdGlvbl09XCJ0cnVlXCJcclxuICAgICAgW2RhdGFdPVwiZm9ybS5GaWVsZHNcIlxyXG4gICAgICBbZW1wdHlUYWJsZU1lc3NhZ2VdPVwiJ05lc3N1biBjYW1wbyBpbnNlcml0bydcIlxyXG4gICAgICAoZHJhZ1JlbGVhc2VkRXZlbnQpPVwib25EcmFnUmVsZWFzZWQoJGV2ZW50KVwiXHJcbiAgICAgIChkcmFnRW5kZWRFdmVudCk9XCJvbkRyYWdFbmRlZCgkZXZlbnQpXCJcclxuICAgICAgW3NlYXJjaFRleHRdPVwiJydcIlxyXG4gICAgICBbcGFnaW5hdG9yVmlzaWJsZV09XCJmYWxzZVwiXHJcbiAgICA+XHJcbiAgICA8L2VxcC10YWJsZT5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibXQtMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwibXItMiBwcmV2aW91c1wiIG1hdC1yYWlzZWQtYnV0dG9uIG1hdFN0ZXBwZXJQcmV2aW91cz5cclxuICAgICAgICBQcmVjZWRlbnRlXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJidXR0b24tbmV4dFwiXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgIG1hdFN0ZXBwZXJOZXh0XHJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0ZpZWxkU3RlcENvbXBsZXRlZCgpXCJcclxuICAgICAgICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBmb3JtRm9ybUdyb3VwLmludmFsaWQgfVwiXHJcbiAgICAgICAgKGNsaWNrKT1cInNldEZvcm1TdGF0dXMoZmFsc2UpXCJcclxuICAgICAgPlxyXG4gICAgICAgIFN1Y2Nlc3Npdm9cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L21hdC1zdGVwPlxyXG4gIDwhLS0jZW5kcmVnaW9uIEFHR0lVTlRBIERFSSBDQU1QSSBERUxMQSBGT1JNIC0tPlxyXG5cclxuICA8bmctdGVtcGxhdGUgbWF0U3RlcHBlckljb249XCJlZGl0XCIgbGV0LWluZGV4PVwiaW5kZXhcIj5cclxuICAgIDxtYXQtbGFiZWw+e3sgaW5kZXggKyAxIH19PC9tYXQtbGFiZWw+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPCEtLSNyZWdpb24gQUdHSVVOVEEgREVMTEUgT1BFUkFaSU9OSSBTVUkgUkVDT1JEIC0tPlxyXG4gIDwhLS0jPG1hdC1zdGVwPlxyXG4gICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD5cclxuICAgICAgPGRpdiBjbGFzcz1cInN0ZXBwZXItaGVhZGVyLW92ZXJsYXlcIiAoY2xpY2spPVwic2V0Rm9ybVN0YXR1cyhmYWxzZSlcIj48L2Rpdj5cclxuICAgICAgQXppb25pIGFnZ2l1bnRpdmUgc3VpIHJlY29yZFxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGp1c3RpZnktY29udGVudC1zdGFydCBhZGRCdXR0b25zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9wZW5BY3Rpb25PblJlY29yZERpYWxvZygpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5BZ2dpdW5naSBhemlvbmU8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZXFwLXRhYmxlXHJcbiAgICAgIGNsYXNzPVwidGFibGVcIlxyXG4gICAgICAjYWN0aW9uc09uUmVjb3JkVGFibGVcclxuICAgICAgW2NyZWF0ZU1hdENhcmRdPVwiZmFsc2VcIlxyXG4gICAgICBbY29sdW1uc109XCJhY3Rpb25zT25SZWNvcmRDb2x1bW5zXCJcclxuICAgICAgW2RhdGFdPVwiZm9ybS5BY3Rpb25zT25SZWNvcmRcIlxyXG4gICAgICBbZW1wdHlUYWJsZU1lc3NhZ2VdPVwiJ05lc3N1bmEgYWN0aW9uIGluc2VyaXRhJ1wiXHJcbiAgICAgIFtzZWFyY2hUZXh0XT1cIicnXCJcclxuICAgID5cclxuICAgIDwvZXFwLXRhYmxlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtdC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGJ1dHRvbnNOZXh0RGl2XCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJtci0yIHByZXZpb3VzXCIgbWF0LXJhaXNlZC1idXR0b24gbWF0U3RlcHBlclByZXZpb3VzPlxyXG4gICAgICAgIFByZWNlZGVudGVcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBjbGFzcz1cImJ1dHRvbi1uZXh0XCJcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgbWF0U3RlcHBlck5leHRcclxuICAgICAgICAoY2xpY2spPVwic2V0Rm9ybVN0YXR1cyhmYWxzZSlcIlxyXG4gICAgICA+XHJcbiAgICAgICAgU3VjY2Vzc2l2b1xyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbWF0LXN0ZXA+LS0+XHJcbiAgPCEtLSNlbmRyZWdpb24gQUdHSVVOVEEgREVMTEUgT1BFUkFaSU9OSSBTVUkgUkVDT1JEIC0tPlxyXG5cclxuXHJcblxyXG4gIDwhLS0jZW5kcmVnaW9uIEFHR0lVTlRBIERFSSBCT1RUT05JIEFaSU9ORSAtLT4gIFxyXG4gIDxtYXQtc3RlcD5cclxuICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwTGFiZWw+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdGVwcGVyLWhlYWRlci1vdmVybGF5XCIgKGNsaWNrKT1cInNldEZvcm1TdGF0dXMoZmFsc2UpXCI+PC9kaXY+XHJcbiAgICAgIEJvdHRvbmkgQXppb25lXHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LXN0YXJ0IGFkZEJ1dHRvbnNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib3BlbkFjdGlvbkJ1dHRvbkRpYWxvZygpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5BZ2dpdW5naSBib3R0b25lIGF6aW9uZTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxlcXAtdGFibGVcclxuICAgICAgY2xhc3M9XCJ0YWJsZVwiXHJcbiAgICAgICNhY3Rpb25CdXR0b25zVGFibGVcclxuICAgICAgW2NyZWF0ZU1hdENhcmRdPVwiZmFsc2VcIlxyXG4gICAgICBbY29sdW1uc109XCJhY3Rpb25CdXR0b25zQ29sdW1uc1wiXHJcbiAgICAgIFtkYXRhXT1cImZvcm0uQWN0aW9uQnV0dG9uc1wiXHJcbiAgICAgIFtlbXB0eVRhYmxlTWVzc2FnZV09XCInTmVzc3VuIGJvdHRvbmUgYXppb25lIGluc2VyaXRvJ1wiXHJcbiAgICAgIFtzZWFyY2hUZXh0XT1cIicnXCJcclxuXHJcbiAgICAgIFtlbmFibGVEcmFnQW5kRHJvcF09XCJmYWxzZVwiXHJcbiAgICAgIFtlbmFibGVEcmFnQ29sdW1uXT1cInRydWVcIlxyXG4gICAgICBbY2hhbmdlRHJhZ1Jvd1Bvc2l0aW9uXT1cInRydWVcIlxyXG4gICAgICAoZHJhZ1JlbGVhc2VkRXZlbnQpPVwib25EcmFnUmVsZWFzZWQoJGV2ZW50KVwiXHJcbiAgICAgIChkcmFnRW5kZWRFdmVudCk9XCJvbkRyYWdFbmRlZCgkZXZlbnQpXCIgICAgICAgXHJcbiAgICA+XHJcbiAgICA8L2VxcC10YWJsZT5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibXQtMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBidXR0b25zTmV4dERpdlwiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwibXItMiBwcmV2aW91c1wiIG1hdC1yYWlzZWQtYnV0dG9uIG1hdFN0ZXBwZXJQcmV2aW91cz5cclxuICAgICAgICBQcmVjZWRlbnRlXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJidXR0b24tbmV4dFwiXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgIG1hdFN0ZXBwZXJOZXh0XHJcbiAgICAgICAgKGNsaWNrKT1cInNldEZvcm1TdGF0dXMoZmFsc2UpXCJcclxuICAgICAgPlxyXG4gICAgICAgIFN1Y2Nlc3Npdm9cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L21hdC1zdGVwPlxyXG4gIDwhLS0jZW5kcmVnaW9uIEFHR0lVTlRBIERFSSBCT1RUT05JIEFaSU9ORSAtLT4gIFxyXG5cclxuICBcclxuXHJcbiAgPCEtLSNyZWdpb24gVFJJR0dFUlMtLT5cclxuICA8bWF0LXN0ZXA+XHJcbiAgICA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic3RlcHBlci1oZWFkZXItb3ZlcmxheVwiIChjbGljayk9XCJzZXRGb3JtU3RhdHVzKGZhbHNlKVwiPjwvZGl2PlxyXG4gICAgICBUcmlnZ2Vyc1xyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LXN0YXJ0IGFkZEJ1dHRvbnNcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvcGVuVHJpZ2dlcnNEaWFsb2coKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+QWdnaXVuZ2kgdHJpZ2dlcjwvc3Bhbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgXHJcbiAgICAgIDxlcXAtdGFibGVcclxuICAgICAgICBjbGFzcz1cInRhYmxlXCJcclxuICAgICAgICAjdHJpZ2dlcnNUYWJsZVxyXG4gICAgICAgIFtjcmVhdGVNYXRDYXJkXT1cImZhbHNlXCJcclxuICAgICAgICBbY29sdW1uc109XCJ0cmlnZ2Vyc0NvbHVtbnNcIlxyXG4gICAgICAgIFtkYXRhXT1cImZvcm0uVHJpZ2dlcnNcIlxyXG4gICAgICAgIFtlbXB0eVRhYmxlTWVzc2FnZV09XCInTmVzc3VuYSBhY3Rpb24gaW5zZXJpdGEnXCJcclxuICAgICAgICBbc2VhcmNoVGV4dF09XCInJ1wiXHJcbiAgICAgID5cclxuICAgICAgPC9lcXAtdGFibGU+ICAgICAgXHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibXQtMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJtci0yIHByZXZpb3VzXCIgbWF0LXJhaXNlZC1idXR0b24gbWF0U3RlcHBlclByZXZpb3VzPlxyXG4gICAgICAgICAgUHJlY2VkZW50ZVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIGNsYXNzPVwiYnV0dG9uLW5leHRcIlxyXG4gICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICBtYXRTdGVwcGVyTmV4dFxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0ZpZWxkU3RlcENvbXBsZXRlZCgpXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgZGlzYWJsZWQ6IGZvcm1Gb3JtR3JvdXAuaW52YWxpZCB9XCJcclxuICAgICAgICAgIChjbGljayk9XCJzZXRGb3JtU3RhdHVzKHRydWUpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICBTdWNjZXNzaXZvXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PiAgICAgIFxyXG5cclxuICA8L21hdC1zdGVwPlxyXG4gIDwhLS0jZW5kcmVnaW9uIFRSSUdHRVJTLS0+XHJcblxyXG4gIDwhLS0jcmVnaW9uIFZJU1VBTElaWkFaSU9ORSBGT1JNIENSRUFUQSAtLT5cclxuICA8bWF0LXN0ZXAgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3ItcHJldmlld1wiPlxyXG4gICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwic3RlcHBlci1oZWFkZXItb3ZlcmxheVwiXHJcbiAgICAgICAgKGNsaWNrKT1cInNldEZvcm1TdGF0dXMoIGZvcm1Gb3JtR3JvdXAudmFsaWQgJiYgZm9ybS5GaWVsZHMgJiYgZm9ybS5GaWVsZHMubGVuZ3RoID4gMCApXCJcclxuICAgICAgPjwvZGl2PlxyXG4gICAgICBBbnRlcHJpbWFcclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cInNob3dBbGxGaWVsZHNcIlxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgTW9zdHJhIGFuY2hlIGkgY2FtcGkgaW52aXNpYmlsaVxyXG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPlxyXG4gICAgICAgIDxlcXAtc2VsZWN0IFthcnJheURhdGFdPVwiY29udGVzdHVhbGl6YXRpb25cIiBbKG5nTW9kZWxJbnB1dCldPVwic2VsZWN0ZWRDb250ZXN0dWFsaXphdGlvblwiXHJcbiAgICAgICAgW2FycmF5S2V5UHJvcGVydHldPVwiJ2VudGl0eVRhYmxlTmFtZSdcIiBbYXJyYXlWYWx1ZVByb3BlcnR5XT1cIidlbnRpdHlUYWJsZU5hbWUnXCJcclxuICAgICAgICAobmdNb2RlbElucHV0Q2hhbmdlKT1cIm9uQ29udGVzdHVhbGl6YXRpb25TZWxlY3QoKVwiXHJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidDb250ZXN0dWFsaXp6YXppb25lIGRlbCBEQkdldHRlcidcIlxyXG4gICAgICAgIFtpbmNsdWRlRnVsbE9iamVjdF09XCJmYWxzZVwiPjwvZXFwLXNlbGVjdD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiICpuZ0lmPVwic2VsZWN0ZWRDb250ZXN0dWFsaXphdGlvbiAhPSBudWxsXCI+XHJcbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkQ29udGVzdHVhbGl6YXRpb25WYWx1ZVwiIChjaGFuZ2UpPVwib25Db250ZXN0dWFsaXphdGlvblNlbGVjdFZhbHVlKClcIj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiICpuZ0lmPVwic2VsZWN0ZWRDb250ZXN0dWFsaXphdGlvbiAhPSBudWxsXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJhcHBseUNvbnRlc3R1YWxpemF0aW9uKGNvbnRlc3R1YWxpemF0aW9uKVwiPkFwcGxpY2E8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXJcIiAoY2xpY2spPVwiYXBwbHlDb250ZXN0dWFsaXphdGlvbihudWxsKVwiPlJpbXVvdmk8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGhyLz5cclxuXHJcbiAgICA8YWRkLWZvcm0tcmVjb3JkXHJcbiAgICAgICpuZ0lmPVwicHJldmlld0Zvcm0gJiYgZm9ybUNvbXBsZXRlZFwiXHJcbiAgICAgIFtmb3JtXT1cInByZXZpZXdGb3JtXCJcclxuICAgICAgW3VzZXJJRF09XCJVc2VySURcIlxyXG4gICAgICBbb3JnYUlEXT1cIm9yZ2FJRFwiXHJcbiAgICAgIFtjb25maWd1cmF0aW9uc109XCJ2aWV3Q29uZmlnXCJcclxuICAgICAgW3Nob3dBbGxGaWVsZHNdPVwic2hvd0FsbEZpZWxkc1wiXHJcbiAgICAgIFtRdWVyeUVkaXRvckNvbXBvbmVudF09XCJRdWVyeUVkaXRvckNvbXBvbmVudFwiXHJcbiAgICAgIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuICAgICAgKG91dCk9XCJvbkV4dGVybmFsQ29tcG9uZW50T3V0KCRldmVudClcIlxyXG4gICAgICAoZmlyZVRyaWdnZXIpPVwib25GaXJlVHJpZ2dlcigkZXZlbnQpXCJcclxuICAgICAgW2luQ29uZmlnXT1cInRydWVcIlxyXG4gICAgICA+XHJcbiAgICA8L2FkZC1mb3JtLXJlY29yZD5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibXQtMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBidXR0b24tbmV4dERpdlwiPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJtci0yIGJ1dHRvbi1leGl0XCJcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgIG1hdFN0ZXBwZXJQcmV2aW91c1xyXG4gICAgICAgIChjbGljayk9XCJzZXRGb3JtU3RhdHVzKGZhbHNlKVwiXHJcbiAgICAgID5cclxuICAgICAgICBQcmVjZWRlbnRlXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJidXR0b24tbmV4dFwiXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgIChjbGljayk9XCJzYXZlRm9ybSgpXCJcclxuICAgICAgPlxyXG4gICAgICAgIFNhbHZhIGZvcm1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L21hdC1zdGVwPlxyXG4gIDwhLS0jZW5kcmVnaW9uIFZJU1VBTElaWkFaSU9ORSBGT1JNIENSRUFUQSAtLT5cclxuXHJcbjwvbWF0LWhvcml6b250YWwtc3RlcHBlcj5cclxuXHJcbjwhLS0gRElBTE9HIEFHR0lVTlRBL01PRElGSUNBIENBTVBPIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ0ZpZWxkPlxyXG4gIDxlcXAtZHluYW1pYy1tb2R1bGUtYWRkLWZvcm0tZmllbGRcclxuICAgIFtmb3JtXT1cImZvcm1cIlxyXG4gICAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gICAgW2ZpZWxkXT1cInNlbGVjdGVkRmllbGRcIlxyXG4gICAgW2luZGV4RmllbGRdPVwiaW5kZXhTZWxlY3RlZEZpZWxkXCJcclxuICAgIChzYXZlRmllbGRFdmVudCk9XCJvblNhdmVGaWVsZCgkZXZlbnQpXCJcclxuICAgIFthdmFpbGFibGVGaWVsZHNdPVwiZm9ybS5GaWVsZHNcIlxyXG4gICAgW2NvbnRlc3R1YWxpemF0aW9uXT1cImNvbnRlc3R1YWxpemF0aW9uXCJcclxuICAgIFtRdWVyeUVkaXRvckNvbXBvbmVudF09XCJRdWVyeUVkaXRvckNvbXBvbmVudFwiXHJcbiAgICBbZmllbGRzRXh0cmFDb25maWddPVwiZmllbGRzRXh0cmFDb25maWdcIlxyXG4gICAgW2FjdGlvbkJ1dHRvbnNdPVwiYWN0aW9uQnV0dG9uc1wiXHJcbiAgICBbZm9ybUZpZWxkc0dyb3Vwc109XCJcclxuICAgICAgZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2VcclxuICAgICAgICA/IGZvcm0uRm9ybUZpZWxkc0dyb3Vwc1xyXG4gICAgICAgIDogbnVsbFxyXG4gICAgXCJcclxuXHJcbiAgICAgKG91dCk9XCJvbkV4dGVybmFsQ29tcG9uZW50T3V0KCRldmVudClcIlxyXG4gID5cclxuICA8L2VxcC1keW5hbWljLW1vZHVsZS1hZGQtZm9ybS1maWVsZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gVEVNUExBVEUgUEVSIFZJU1VBTElaWkFSRSBMQSBDT0xPTk5BIERFTExBIFNFWklPTkUgTkVMTEEgVEFCRUxMQSBERUkgRklFTERTIC0tPlxyXG48bmctdGVtcGxhdGUgI2ZpZWxkU2VjdGlvbkNvbHVtblRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIj5cclxuICA8ZXFwLXNlbGVjdFxyXG4gICAgW2FycmF5RGF0YV09XCJmb3JtLkZvcm1GaWVsZHNHcm91cHNcIlxyXG4gICAgWyhuZ01vZGVsSW5wdXQpXT1cInJvdy5GaWVsZEdyb3VwXCJcclxuICAgIFthcnJheUtleVByb3BlcnR5XT1cIidOYW1lJ1wiXHJcbiAgICBbYXJyYXlWYWx1ZVByb3BlcnR5XT1cIidOYW1lJ1wiXHJcbiAgICBwbGFjZWhvbGRlcj1cIlNlemlvbmVcIlxyXG4gICAgW2lzUmVxdWlyZWRdPVwidHJ1ZVwiXHJcbiAgICBbaW5jbHVkZUZ1bGxPYmplY3RdPVwiZmFsc2VcIlxyXG4gID5cclxuICA8L2VxcC1zZWxlY3Q+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIERJQUxPRyBQRVIgQUdHSVVOR0VSRS9NT0RJRklDQVJFIFVOQSBBQ1RJT04gU1VJIFJFQ09SRCBERUxMQSBGT1JNIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ0FjdGlvbk9uUmVjb3JkPlxyXG4gIFxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkIHRoaXJkLW1vZGFsXCJcclxuICAgIHN0eWxlPVwibWF4LWhlaWdodDogNzB2aCAhaW1wb3J0YW50OyBvdmVyZmxvdy14OiBoaWRkZW47IG92ZXJmbG93LXk6IGF1dG9cIlxyXG4gID5cclxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiYWN0aW9uT25SZWNvcmRGb3JtR3JvdXBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvdyB0aXRsZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItdGl0bGUtc3RhbmRhcmRcIj5cclxuICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgIGluZGV4U2VsZWN0ZWRBY3Rpb24gIT0gbnVsbCAmJiBpbmRleFNlbGVjdGVkQWN0aW9uID49IDBcclxuICAgICAgICAgICAgICA/IFwiTW9kaWZpY2FcIlxyXG4gICAgICAgICAgICAgIDogXCJBZ2dpdW5naVwiXHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgICAgYXppb25lIHN1bCByZWNvcmRcclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+IE5vbWUgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIk5hbWVcIlxyXG4gICAgICAgICAgICAgIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkQWN0aW9uLk5hbWVcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC00IG10LTJcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+IEljb25hIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJJY29uXCJcclxuICAgICAgICAgICAgICByZXF1aXJlZFxyXG4gICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEFjdGlvbi5JY29uXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbXQtMlwiPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD5BemlvbmUgKEphdmFzY3JpcHQpPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDx0ZXh0YXJlYVxyXG4gICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgW3Jvd3NdPVwiM1wiXHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiQWN0aW9uXCJcclxuICAgICAgICAgICAgICByZXF1aXJlZFxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRBY3Rpb24uQWN0aW9uXCJcclxuICAgICAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImFjdGlvbkF1dG9jb21wbGV0ZVwiXHJcbiAgICAgICAgICAgICAgKGtleXVwKT1cInNldEFjdGlvbkF1dG9jb21wbGV0ZU9wdGlvbnMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgKGZvY3VzKT1cInNldEFjdGlvbkF1dG9jb21wbGV0ZU9wdGlvbnMobnVsbClcIlxyXG4gICAgICAgICAgICAgIHN0eWxlPVwiXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBsaWdodGdyYXkgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHggIWltcG9ydGFudDtcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI2FjdGlvbkF1dG9jb21wbGV0ZT1cIm1hdEF1dG9jb21wbGV0ZVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGFjdGlvbkF1dG9jb21wbGV0ZU9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBtdC0yIG1iLTFcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uc0Zvcm1cIj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgY2xhc3M9XCJidG4gbWF0LXJhaXNlZC1idXR0b24gY2FuY2VsXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlRGlhbG9nQWN0aW9uT25SZWNvcmQoKVwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBBbm51bGxhXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgY2xhc3M9XCJtci0yIHNhdmVcIlxyXG4gICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwic2F2ZUFjdGlvbk9uUmVjb3JkKClcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aW9uT25SZWNvcmRGb3JtR3JvdXAuaW52YWxpZFwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBTYWx2YVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9mb3JtPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBESUFMT0cgUEVSIEFHR0lVTkdFUkUvTU9ESUZJQ0FSRSBVTiBCT1RUT05FIEFaSU9ORSAtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dBY3Rpb25CdXR0b24+XHJcbiAgPGFjdGlvbi1idXR0b24tY3JlYXRvciBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiIFtmb3JtXT1cImZvcm1cIiBbZm9ybXVsYXNdPVwiYWN0aW9uQnV0dG9uc1wiIFthY3Rpb25CdXR0b25dPVwic2VsZWN0ZWRBY3Rpb25CdXR0b25cIiAob25TYXZlUmVjb3JkKT1cInNhdmVBY3Rpb25CdXR0b25zKCRldmVudClcIj48L2FjdGlvbi1idXR0b24tY3JlYXRvcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gVEVNUExBVEUgUEVSIENPTkZJR1VSQVJFIExFIEZPUk0gREkgREVUVEFHTElPIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ0lubmVyRm9ybT5cclxuICA8IS0tIFtmb3JtXT1cInNlbGVjdGVkSW5uZXJGb3JtXCJcclxuICAgIFtpbm5lckZvcm1NYW5hZ21lbnRdPVwidHJ1ZVwiXHJcbiAgICBbaW5uZXJGb3JtUmVmXT1cImRpYWxvZ0lubmVyRm9ybVJlZlwiIC0tPlxyXG4gIDxlcXAtZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yXHJcbiAgICBbUHJvamVjdE5hbWVdPVwiUHJvamVjdE5hbWVcIlxyXG4gICAgW2NvbmZpZ3VyYXRpb25zXT1cImlubmVyRm9ybUNvbmZpZ1wiXHJcbiAgICAoc2F2ZUZvcm1FdmVudCk9XCJvblNhdmVPckV4aXRJbm5lckZvcm0oJGV2ZW50KVwiXHJcbiAgPlxyXG4gIDwvZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gVEVNUExBVEUgUEVSIElNUE9SVCAtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dJbXBvcnQ+XHJcbiAgPG1hdC1jYXJkIGNsYXNzPVwiaW1wb3J0RGlhbG9nXCI+XHJcbiAgICA8bWF0LWNhcmQtaGVhZGVyIGNsYXNzPVwicC0yIGp1c3RpZnktY29udGVudC1hcm91bmRcIj4gXHJcbiAgICAgIDxtYXQtY2FyZC10aXRsZT5cclxuICAgICAgICBJbXBvcnRcclxuICAgICAgPC9tYXQtY2FyZC10aXRsZT4gICAgICAgIFxyXG4gICAgPC9tYXQtY2FyZC1oZWFkZXI+XHJcbiAgICA8bWF0LWNhcmQtY29udGVudCBjbGFzcz1cInAtMlwiPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBjbGFzcz1cImlucHV0LWZpbGUtYnRuIHBiLTJcIiAoY2hhbmdlKT1cIm9uSW1wb3J0KCRldmVudClcIiAvPlxyXG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gICAgPG1hdC1jYXJkLWZvb3RlciBjbGFzcz1cInAtMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWNsZWFyIGJ1dHRvbi1iYWNrIG1lLTJcIlxyXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgY29sb3I9XCJkaXNhYmxlZFwiXHJcbiAgICAgICAgKGNsaWNrKT1cImNsb3NlSW1wb3J0KClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgQW5udWxsYVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbWF0LWNhcmQtZm9vdGVyPlxyXG4gIDwvbWF0LWNhcmQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIERJQUxPRyBQRVIgQUdHSVVOR0VSRS9NT0RJRklDQVJFIEkgVFJJR0dFUlMgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nVHJpZ2dlcnM+XHJcbiAgPHRyaWdnZXItY3JlYXRvciBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiIFtmb3JtXT1cImZvcm1cIiBbZm9ybXVsYXNdPVwidHJpZ2dlcnNcIiBbdHJpZ2dlcl09XCJzZWxlY3RlZFRyaWdnZXJcIiAob25TYXZlUmVjb3JkKT1cInNhdmVUcmlnZ2VyKCRldmVudClcIj48L3RyaWdnZXItY3JlYXRvcj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
|