gamma-app-controller 1.3.4 → 1.3.5
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/application-controller/application-dataset-call.service.mjs +7 -2
- package/esm2020/lib/application-controller/support-components/dash-table/dash-table.component.mjs +9 -1
- package/esm2020/lib/shared/advanced-component/gamma-advance-chart/gamma-advance-chart.component.mjs +1 -1
- package/esm2020/lib/shared/template-dataset-call-service.mjs +7 -10
- package/esm2020/lib/template-module/kpiWithSingleLayout/kpi-with-dataset.component.mjs +2 -2
- package/fesm2015/gamma-app-controller.mjs +21 -11
- package/fesm2015/gamma-app-controller.mjs.map +1 -1
- package/fesm2020/gamma-app-controller.mjs +21 -11
- package/fesm2020/gamma-app-controller.mjs.map +1 -1
- package/lib/application-controller/support-components/dash-table/dash-table.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -704,7 +704,7 @@ export class KpiWithDataSetTestComponent {
|
|
|
704
704
|
const hourlyNode = this.dashBoardWidgetConfig.widgets
|
|
705
705
|
.map(widget => widget.widgetNode.find(node => this.getHourlyData(node)))
|
|
706
706
|
.find(node => node);
|
|
707
|
-
if (hourlyNode && event.keyToPass.includes("recordDate")) {
|
|
707
|
+
if (hourlyNode && event.keyToPass.includes("recordDate") || event.keyToPass.includes("record_date")) {
|
|
708
708
|
this.getViewByRowCLickForHourlyChart(event, hourlyNode);
|
|
709
709
|
}
|
|
710
710
|
const currentViewNode = this.dashBoardWidgetConfig.widgets
|
|
@@ -1287,4 +1287,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
1287
1287
|
type: ViewChild,
|
|
1288
1288
|
args: ['dynamicContainerForPopup', { static: true }]
|
|
1289
1289
|
}] } });
|
|
1290
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3BpLXdpdGgtZGF0YXNldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL3RlbXBsYXRlLW1vZHVsZS9rcGlXaXRoU2luZ2xlTGF5b3V0L2twaS13aXRoLWRhdGFzZXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi90ZW1wbGF0ZS1tb2R1bGUva3BpV2l0aFNpbmdsZUxheW91dC9rcGktd2l0aC1kYXRhc2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCxTQUFTLEVBUVQsU0FBUyxFQUVULGdCQUFnQixFQUNuQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLE1BQU0sTUFBTSw0Q0FBNEMsQ0FBQztBQUVoRSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRzlCLE9BQU8sRUFDSCwwQkFBMEIsRUFDN0IsTUFBTSxtRkFBbUYsQ0FBQztBQUMzRixPQUFPLEVBQ0gsMkJBQTJCLEVBQzlCLE1BQU0scUZBQXFGLENBQUM7QUFDN0YsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0seUVBQXlFLENBQUM7QUFDbEgsT0FBTyxFQUNILGlDQUFpQyxFQUNwQyxNQUFNLG1HQUFtRyxDQUFDO0FBQzNHLE9BQU8sRUFDSCw2QkFBNkIsRUFDaEMsTUFBTSwyRkFBMkYsQ0FBQztBQUNuRyxPQUFPLEVBQ0gsa0NBQWtDLEVBQ3JDLE1BQU0scUdBQXFHLENBQUM7QUFDN0csT0FBTyxFQUNILGtDQUFrQyxFQUNyQyxNQUFNLHFHQUFxRyxDQUFDO0FBQzdHLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDJFQUEyRSxDQUFDO0FBQ2pILE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHVFQUF1RSxDQUFD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LENBQUM7YUFDaEM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDOzt3SEF4L0NRLDJCQUEyQjs0R0FBM0IsMkJBQTJCLCtLQVlXLGdCQUFnQixvR0FFaEMsZ0JBQWdCLHVSQ3JFbkQsZ2pFQTRDVzsyRkRXRSwyQkFBMkI7a0JBTHZDLFNBQVM7K0JBQ0ksc0JBQXNCO3dlQWlCaEMseUJBQXlCO3NCQUR4QixTQUFTO3VCQUFDLDJCQUEyQixFQUFFLEVBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFDO2dCQUdoRSxZQUFZO3NCQURYLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFDO2dCQUVELGdCQUFnQjtzQkFBOUQsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBQ1Usd0JBQXdCO3NCQUE5RSxTQUFTO3VCQUFDLDBCQUEwQixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIENvbXBvbmVudFJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uRXh0cmFzLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgbW9tZW50IGZyb20gJy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvbW9tZW50LWhlbHBlcic7XG5pbXBvcnQge1RvYXN0clNlcnZpY2V9IGZyb20gJ25neC10b2FzdHInO1xuaW1wb3J0IHtmb3JrSm9pbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge3Rha2UsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtDb21tb25TZXJ2aWNlfSBmcm9tICcuLi8uLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEdhbW1hQWR2YW5jZUNoYXJ0Q29tcG9uZW50XG59IGZyb20gJy4uLy4uL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtYWR2YW5jZS1jaGFydC9nYW1tYS1hZHZhbmNlLWNoYXJ0LmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIEdhbW1hVG9kYXlQcmV2aW91c0NvbXBvbmVudFxufSBmcm9tICcuLi8uLi9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2dhbW1hLXRvZGF5LXByZXZpb3VzL2dhbW1hLXRvZGF5LXByZXZpb3VzLmNvbXBvbmVudCc7XG5pbXBvcnQge0FwcEFkdmFuY2VIZWFkZXJDb21wb25lbnR9IGZyb20gJy4uLy4uL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvYXBwLWFkdmFuY2UtaGVhZGVyL2FwcC1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgR2FtbWFUYWJsZVdpdGhQZXJjZW50YWdlQ29tcG9uZW50XG59IGZyb20gJy4uLy4uL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtdGFibGUtd2l0aC1wZXJjZW50YWdlL2dhbW1hLXRhYmxlLXdpdGgtcGVyY2VudGFnZS5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgICBHYW1tU2luZ2xlTnVtYmVyQ2FyZENvbXBvbmVudFxufSBmcm9tICcuLi8uLi9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2dhbW0tc2luZ2xlLW51bWJlci1jYXJkL2dhbW0tc2luZ2xlLW51bWJlci1jYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIEdhbW1hQWR2YW5jZU9wZXJhdG9yVGFibGVDb21wb25lbnRcbn0gZnJvbSAnLi4vLi4vc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1hZHZhbmNlLW9wZXJhdG9yLXRhYmxlL2dhbW1hLWFkdmFuY2Utb3BlcmF0b3ItdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgQWR2YW5jZVdpZGdldEhlYWRlckZpbHRlckNvbXBvbmVudFxufSBmcm9tICcuLi8uLi9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2FkdmFuY2Utd2lkZ2V0LWhlYWRlci1maWx0ZXIvYWR2YW5jZS13aWRnZXQtaGVhZGVyLWZpbHRlci5jb21wb25lbnQnO1xuaW1wb3J0IHtHYW1tYUdlb0NoYXJ0Q29tcG9uZW50fSBmcm9tICcuLi8uLi9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2dhbW1hLWdlby1jaGFydC9nYW1tYS1nZW8tY2hhcnQuY29tcG9uZW50JztcbmltcG9ydCB7R2FtbWFIZWF0Q2hhcnRDb21wb25lbnR9IGZyb20gJy4uLy4uL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtaGVhdG1hcC9nYW1tYS1oZWF0bWFwLmNvbXBvbmVudCc7XG5pbXBvcnQge0twaVdpdGhTaW5nbGVMYXlvdXRTZXJ2aWNlfSBmcm9tICcuL2twaS1zaW5nbGUtbGF5b3V0LnNlcnZpY2UnO1xuaW1wb3J0IHtTaW5nbGVMYXlvdXRBcHBsaWNhdGlvbkRhdHNzZXRzQ2FsbH0gZnJvbSAnLi9zaW5nbGUtbGF5b3V0LWRhdGFzZXQtY2FsbC5zZXJ2aWNlJztcbmltcG9ydCB7QXBwbGljYXRpb25DaGF0QXBpQ2FsbFNlcnZpY2V9IGZyb20gJy4vYXBwbGljYXRpb24tY2hhdC1hcGktY2FsbC5zZXJ2aWNlJztcbmltcG9ydCB7QXBwU2luZ2xlTGF5b3V0TG9jYWxTdG9yYWdlfSBmcm9tICcuL3NpbmdsZS50b2tlblN0b3JhZ2Uuc2VydmNlJztcbmltcG9ydCB7UGVybWlzc2lvbkhlbHBlcn0gZnJvbSAnLi4vLi4vc2hhcmVkL3Blcm1pc3Npb24taGVscGVyJztcblxuLy8gaW1wb3J0IHsgQXBwbGljYXRpb25DaGF0QXBpQ2FsbFNlcnZpY2UgfSBmcm9tICcuL2FwcGxpY2F0aW9uLWNoYXQtYXBpLWNhbGwuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLWtwaS13aXRoLWRhdGFzZXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9rcGktd2l0aC1kYXRhc2V0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9rcGktd2l0aC1kYXRhc2V0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgS3BpV2l0aERhdGFTZXRUZXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBkYXNoYm9yZF9jb250YWluZXI6IGFueSA9IFtdO1xuICAgIHNlbGVjdGVkX3dpZHRoOiBhbnk7XG4gICAgd2lkZ2V0X3dpZHRoID0gWyd3LWZ1bGwnLCAndy0xLzInLCAndy0xLzMnLCAndy0xLzQnLCAndy0xLzUnLCAndy0xLzYnXVxuICAgIGxvYWRpbmdNb2RhbDogYm9vbGVhbjtcbiAgICBwYWdlX3RpdGxlID0gJ0Rhc2hib2FyZCc7XG4gICAgZGVmYXVsdFN0YXJ0RGF0ZTtcbiAgICBkZWZhdWx0RW5kRGF0ZTtcbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RvclxuICAgICAqL1xuXG4gICAgQFZpZXdDaGlsZCgnZHluYW1pY0NvbXBvbmVudENvbnRhaW5lcicsIHtyZWFkOiBWaWV3Q29udGFpbmVyUmVmfSlcbiAgICBkeW5hbWljQ29tcG9uZW50Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xuICAgIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicsIHtyZWFkOiBWaWV3Q29udGFpbmVyUmVmfSlcbiAgICBjb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWY7XG4gICAgQFZpZXdDaGlsZCgnZHluYW1pY0NvbnRhaW5lcicsIHtzdGF0aWM6IHRydWV9KSBkeW5hbWljQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ2R5bmFtaWNDb250YWluZXJGb3JQb3B1cCcsIHtzdGF0aWM6IHRydWV9KSBkeW5hbWljQ29udGFpbmVyRm9yUG9wdXA6IEVsZW1lbnRSZWY7XG5cbiAgICBkeW5hbWljQ29tcG9uZW50UmVmczogQ29tcG9uZW50UmVmPGFueT5bXSA9IFtdO1xuICAgIC8vIGR5bmFtaWNDb21wb25lbnRSZWZzOiBDb21wb25lbnRSZWY8YW55PltdID0gW107XG5cbiAgICBDb21wUmVmczogQ29tcG9uZW50UmVmPGFueT47XG5cbiAgICBjb21wb25lbnRDbGFzc01hcCA9IHtcbiAgICAgICAgR2FtbWFBZHZhbmNlQ2hhcnRDb21wb25lbnQsXG4gICAgICAgIEdhbW1hVG9kYXlQcmV2aW91c0NvbXBvbmVudCxcbiAgICAgICAgQXBwQWR2YW5jZUhlYWRlckNvbXBvbmVudCxcbiAgICAgICAgR2FtbWFUYWJsZVdpdGhQZXJjZW50YWdlQ29tcG9uZW50LFxuICAgICAgICBHYW1tU2luZ2xlTnVtYmVyQ2FyZENvbXBvbmVudCxcbiAgICAgICAgR2FtbWFBZHZhbmNlT3BlcmF0b3JUYWJsZUNvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZVdpZGdldEhlYWRlckZpbHRlckNvbXBvbmVudCxcbiAgICAgICAgR2FtbWFHZW9DaGFydENvbXBvbmVudCxcbiAgICAgICAgR2FtbWFIZWF0Q2hhcnRDb21wb25lbnRcbiAgICB9O1xuICAgIGRhdGFTb3VyY2VNYXRhRGF0YTogYW55ID0gW107XG4gICAgcXVlcnlUeXBlID0gXCJtb25nb1wiO1xuICAgIGRhdGFTZXRNb2RhbDogYW55ID0gW107XG4gICAgY29tcG9uZW50Q29uZmlnRGF0YVNvdXJjZTogYW55ID0gW107XG4gICAgc2VsZXNjZWREYXRhU291cmNlOiBhbnk7XG4gICAgZGF0YVNvdXJjZU1vZGFsOiBhbnkgPSB7fTtcbiAgICBpc0Rhc2hCb2FyZENvbnRlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHNlbGVjdGVkVmlld0Zvcm1Db21wb25lbnQ6IGFueSA9IHt9O1xuICAgIGFkZGVkd2lkR2V0Q29uZmlnID0ge1xuICAgICAgICBcImRpc3BsYXlcIjogdHJ1ZSxcbiAgICAgICAgXCJ3aWRnZXRUaXRsZVwiOiBcIlwiLFxuICAgICAgICBcIndpZHRoXCI6IFwiXCIsXG4gICAgICAgIFwiaGVpZ2h0XCI6IFwiXCJcbiAgICB9XG5cblxuICAgIGRhc2hCb2FyZFdpZGdldENvbmZpZzogYW55ID0gW107XG4gICAgaXNXaWRnZXRDcmVhdGlvbkNvbnRlbnQ6IGJvb2xlYW47XG4gICAgc2VsZWN0ZWRXaWR0aDogYW55O1xuICAgIHNlbGVjdGVkSGVpZ2h0OiBhbnk7XG4gICAgbmV3V2lkZ2V0SW5kZXg6IGFueTtcbiAgICBzZWxlY3RlZEluZGV4T2JqRm9yQ2hhcnQ6IGFueSA9IHt9O1xuICAgIHNlbGVjdGVkQ29udGFpbmVyT2JqZWN0Rm9yQ2hhcnQ6IGFueSA9IHt9O1xuICAgIGRhdGFTZXR0YWJsZURhdGFTb3VyY2U6IGFueTtcbiAgICB1bmlxdWVEYXRhU2V0T2JqZWN0ID0ge307XG5cbiAgICBpc0Rhc2hCb2FyZENvbnRlbnRUeXBlVmlldzogYm9vbGVhbiA9IHRydWU7XG4gICAgZmlsdGVyczogYW55O1xuICAgIGFsbFdpZGdldEJ5RGF0YXNldCA9IFtdO1xuICAgIHBhZ2VUaXRsZTogYW55O1xuICAgIHN0YXRlRGF0YVNvdXJjZSA9IG5ldyBNYXAoKTtcbiAgICBtYWluUGFnZURpdkVsZW1lbnQ6IGFueTtcbiAgICBjb250ZXh0TWVudURhdGFTb3VyY2U6IGFueSA9IFtdO1xuICAgIGhhdmluZ0RhdGFPYmplY3Q6IGFueSA9IHt9O1xuICAgIGlzV2lkZ2V0RmlsdGVyczogYm9vbGVhbjtcbiAgICBub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2U6IGFueTtcbiAgICBnbG9iYWxEZWZhdWx0RmlsdGVyOiBhbnkgPSB7fTtcbiAgICBwYWdlSWQ6IGFueTtcblxuICAgIGtwaV9icmVhZGNydW1ic19jb250YWluZXI6IGFueTtcbiAgICBvcGVyYXRvck5hbWU6IGFueTtcblxuICAgIGRlZmF1bHRWaWV3SWRzOiBhbnkgPSBbXTtcbiAgICBkZWZhdWx0Vmlld0lkc09uUGFnZVJlZnJlc2g6IGFueSA9IFtdO1xuICAgIGlzUG9wdXBWaWV3OiBib29sZWFuO1xuICAgIG1vZGFsQ29uZmlnczogYW55O1xuICAgIGRlZmF1bHRNYXRjaGVkRmlsdGVycyA9IHtvcGVyYXRpb25GaWx0ZXI6IHtzdGFydERhdGU6IFwiXCIsIGVuZERhdGU6IFwiXCJ9fTtcbiAgICBpc0RlZmF1bHRGaWx0ZXJQYXJhbXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHZpZXdQYXJhbXM6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICAgICAgcHJpdmF0ZSBzZXJ2aWNlOiBLcGlXaXRoU2luZ2xlTGF5b3V0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgZGF0YXNldFNlcnZpY2U6IFNpbmdsZUxheW91dEFwcGxpY2F0aW9uRGF0c3NldHNDYWxsLFxuICAgICAgICBwcml2YXRlIGNoYXRBcGlTZXJ2aWNlOiBBcHBsaWNhdGlvbkNoYXRBcGlDYWxsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzdG9yYWdlOiBBcHBTaW5nbGVMYXlvdXRMb2NhbFN0b3JhZ2UsXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBwZXJtaXNzaW9uSGVscGVyOiBQZXJtaXNzaW9uSGVscGVyXG4gICAgKSB7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VydmljZS5nZXRsaXN0S3BpQnJvd3NlcigpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiAoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMua3BpX2JyZWFkY3J1bWJzX2NvbnRhaW5lciA9IGRhdGE7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuXG4gICAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wYWdlSWQgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zWydwYWdlSWQnXTtcbiAgICAgICAgY29uc3Qge3BhZ2VJZH0gPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zO1xuICAgICAgICBpZiAodGhpcy5wYWdlSWQpIHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHtwYWdlSWR9LFxuICAgICAgICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdldFBhZ2VEYXRhU291cmNlKGZhbHNlKTtcblxuICAgIH1cblxuICAgIGFzeW5jIGdldEZpbHRlcnNGb3JUZW1wbGF0ZShmaWx0ZXIpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJzID0gZmlsdGVyO1xuICAgICAgICAvLyB0aGlzLmRlZmF1bHRTdGFydERhdGUgPSBmaWx0ZXIuc3RhcnREYXRlO1xuICAgICAgICAvLyB0aGlzLmRlZmF1bHRFbmREYXRlID0gZmlsdGVyLmVuZERhdGU7XG4gICAgICAgIGZpbHRlci5vcGVyYXRpb25GaWx0ZXJbJ3N0YXJ0RGF0ZSddID0gZmlsdGVyLnN0YXJ0RGF0ZTtcbiAgICAgICAgZmlsdGVyLm9wZXJhdGlvbkZpbHRlclsnZW5kRGF0ZSddID0gZmlsdGVyLmVuZERhdGU7XG5cbiAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0UGFnZURhdGFTb3VyY2UodHJ1ZSk7XG5cbiAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0ge307XG4gICAgICAgIGxldCBhcGlDYWxscyA9IFtdO1xuXG4gICAgICAgIHRoaXMuYWxsV2lkZ2V0QnlEYXRhc2V0LmZvckVhY2godmlldyA9PiB7XG4gICAgICAgICAgICB2aWV3LmRhdGFzZXRJZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZpZXcud2lkZ2V0SWQgPT0gZmlsdGVyLmZpbHRlck9iamVjdHMud2lkZ2V0SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZvdW5kID0gKHRoaXMuZGF0YVNldE1vZGFsIGFzIGFueVtdKS5maW5kKGQgPT4gZC5kYXRhc2V0SWQgPT09IGlkKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHdpZGdldEZpbHRlciA9IHRoaXMuZ2V0V2lkZ2V0RmlsdGVySXRlbXMoZmlsdGVyLmZpbHRlck9iamVjdHMuZmlsdGVycy5maWx0ZXJJdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgIHZpZXcuZmlsdGVycyA9IHdpZGdldEZpbHRlcjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcGlDYWxscy5wdXNoKHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0RGF0YUZyb21EYXRhU2V0KGZvdW5kLCBpZCwgd2lkZ2V0RmlsdGVyKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBQcm9taXNlLmFsbChhcGlDYWxscykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdsb2JhbERlZmF1bHRGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgICAgICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldFVuaXF1ZURhdGFTZXRPYmplY3QoKTtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRGl2RWxlbWVudHModGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0LCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICBnZXRXaWRnZXRGaWx0ZXJJdGVtcyh3aWRnZXRGaWx0ZXJEYXRhKSB7XG5cbiAgICAgICAgbGV0IGFwaUpzb25PYmplY3Q6IGFueSA9IHt9O1xuICAgICAgICBhcGlKc29uT2JqZWN0WydvcGVyYXRpb25GaWx0ZXInXSA9IHt9O1xuICAgICAgICB3aWRnZXRGaWx0ZXJEYXRhLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5maWx0ZXJUeXBlID09ICdkYXRlJyB8fCBlbGVtZW50LmZpbHRlclR5cGUgPT0gJ2RhdGV0aW1lJykge1xuICAgICAgICAgICAgICAgIGFwaUpzb25PYmplY3RbJ29wZXJhdGlvbkZpbHRlciddW2VsZW1lbnQuYXBpTmFtZV0gPSBtb21lbnQoZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWUpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBlbGVtZW50LmZpbHRlckRhdGFTb3VyY2VWYWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiBlbGVtZW50LmZpbHRlckRhdGFTb3VyY2VWYWx1ZSAhPT0gXCJcIikgfHxcbiAgICAgICAgICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkoZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWUpICYmIGVsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Lm9wZXJhdG9yTmFtZSAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZmlsdGVyVHlwZSA9PSBcImNvbnRlbnRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwaUpzb25PYmplY3RbJ29wZXJhdGlvbkZpbHRlciddW2VsZW1lbnQub3BlcmF0b3JOYW1lXSA9IGVsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZmlsdGVyVHlwZSA9PSBcInNpbmdsZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBpSnNvbk9iamVjdFsnb3BlcmF0aW9uRmlsdGVyJ11bZWxlbWVudC5vcGVyYXRvck5hbWVdID0gZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwaUpzb25PYmplY3RbJ29wZXJhdGlvbkZpbHRlciddW2VsZW1lbnQub3BlcmF0b3JOYW1lXSA9IEFycmF5LmlzQXJyYXkoZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWUpID8gZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWUgOiBbZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBpSnNvbk9iamVjdFtlbGVtZW50LmFwaU5hbWVdID0gZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBhcGlKc29uT2JqZWN0WydvcGVyYXRpb25GaWx0ZXInXSA9IG9wZXJhdGlvbkZpbHRlcjtcblxuXG4gICAgICAgIHJldHVybiBhcGlKc29uT2JqZWN0O1xuXG4gICAgfVxuXG4gICAgZ2V0UGFnZURhdGFTb3VyY2UoY29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLmdldEFwcFBhZ2VEZXRhaWxDb25maWcodGhpcy5wYWdlSWQpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0gZGF0YS5wZXJtaXNzaW9ucyA/IHRoaXMucGVybWlzc2lvbkhlbHBlci5nZXRQZXJtaXNzaW9uRW50aXR5KGRhdGEucGVybWlzc2lvbnMpIDogdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNQZXJtaXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmF2aWdhdGlvbjogTmF2aWdhdGlvbkV4dHJhcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ZWRVcmw6IHRoaXMucm91dGVyLnVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogXCJtZXJnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydhcHBzLzQwMSddLCBuYXZpZ2F0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZVRpdGxlID0gZGF0YS5wYWdlTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcgPSBkYXRhO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZ2V0RHJpbGxkb3duRGlzcGxheUJ5VXJsUGFyYW1zKGRhdGEud2lkZ2V0cyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0KSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QpLmxlbmd0aCAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVEaXZFbGVtZW50cyh0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QsIGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldENvbXBvbmVudENvbmZpZ1NldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcblxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ0Vycm9yJyk7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cblxuICAgIGdldENvbXBvbmVudENvbmZpZ1NldCgpIHtcbiAgICAgICAgbGV0IGRhdGFzZXQgPSB0aGlzLnNlcnZpY2UuZ2V0QXBwRGF0YXNldENvbmZpZ3MoKTtcbiAgICAgICAgbGV0IHZpZXdDb21wb25lbnQgPSB0aGlzLnNlcnZpY2UuZ2V0QXBwVmlld0NvbmZpZ3MoKTtcbiAgICAgICAgdGhpcy5kZWZhdWx0Vmlld0lkcyA9IFtdO1xuICAgICAgICBmb3JrSm9pbih7XG4gICAgICAgICAgICBkYXRhc2V0Q29uZmlnOiBkYXRhc2V0LFxuICAgICAgICAgICAgdmlld0NvbmZpZzogdmlld0NvbXBvbmVudFxuICAgICAgICB9KS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogKCh7ZGF0YXNldENvbmZpZywgdmlld0NvbmZpZ30pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudENvbmZpZ0RhdGFTb3VyY2UgPSB2aWV3Q29uZmlnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNldE1vZGFsID0gZGF0YXNldENvbmZpZztcbiAgICAgICAgICAgICAgICB0aGlzLmFsbFdpZGdldEJ5RGF0YXNldCA9IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHtwYWdlSWQsIHN0YXJ0RGF0ZSwgZW5kRGF0ZSwgaWQsIG5hbWUsIC4uLnBhcmFtc30gPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zO1xuICAgICAgICAgICAgICAgIGxldCBkZWZhdWx0RmlsdGVycyA9IHtvcGVyYXRpb25GaWx0ZXI6IHtzdGFydERhdGU6IFwiXCIsIGVuZERhdGU6IFwiXCIsIC4uLnBhcmFtc319O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cy5mb3JFYWNoKHdpZGdldCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHdpZGdldC5maWx0ZXJzLmZpbHRlckl0ZW1zLmZvckVhY2goZWxlbWVudCA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmZpbHRlclR5cGUgPT09ICdkYXRlJyB8fCBlbGVtZW50LmZpbHRlclR5cGUgPT09ICdkYXRldGltZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5kZWZhdWx0RmlsdGVyVHlwZSA9PT0gXCJkeW5hbWljXCIgJiYgZWxlbWVudC5tb21lbnRGdW5jdGlvbiAhPT0gXCJcIiAmJiBlbGVtZW50LmRlZmF1bHRGaWx0ZXJWYWx1ZSAhPT0gXCJcIiAmJiBlbGVtZW50Lm1vbWVudEZvcm1hdCAhPT0gXCJcIikge1xuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQubW9tZW50RnVuY3Rpb24gPT0gXCJtb250aFBpY2tlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgW2NvdW50LCB1bml0XSA9IGVsZW1lbnQuZGVmYXVsdEZpbHRlclZhbHVlLnNwbGl0KCcsJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmFwaU5hbWUgPT09IFwiZW5kRGF0ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZGlzcGxheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVycy5vcGVyYXRpb25GaWx0ZXIuZW5kRGF0ZSA9IChlbmREYXRlICYmIGVuZERhdGUgIT09ICcnKSA/IGVuZERhdGUgOiBtb21lbnQoKS5zdWJ0cmFjdChwYXJzZUludChjb3VudCksIHVuaXQpLmVuZE9mKHVuaXQpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEVuZERhdGUgPSBtb21lbnQoKS5zdWJ0cmFjdChwYXJzZUludChjb3VudCksIHVuaXQpLmVuZE9mKHVuaXQpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYXBpTmFtZSA9PT0gXCJzdGFydERhdGVcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlci5zdGFydERhdGUgPSAoc3RhcnREYXRlICYmIHN0YXJ0RGF0ZSAhPT0gJycpID8gc3RhcnREYXRlIDogbW9tZW50KCkuc3VidHJhY3QocGFyc2VJbnQoY291bnQpLCB1bml0KS5zdGFydE9mKHVuaXQpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQubW9tZW50RnVuY3Rpb24gPT0gXCJ3ZWVrUGlja2VyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmFwaU5hbWUgPT09IFwiZW5kRGF0ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZGlzcGxheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVycy5vcGVyYXRpb25GaWx0ZXIuZW5kRGF0ZSA9IChlbmREYXRlICYmIGVuZERhdGUgIT09ICcnKSA/IGVuZERhdGUgOiBtb21lbnQoKS5lbmRPZignd2VlaycpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEVuZERhdGUgPSBtb21lbnQoKS5lbmRPZignd2VlaycpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYXBpTmFtZSA9PT0gXCJzdGFydERhdGVcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlci5zdGFydERhdGUgPSAoc3RhcnREYXRlICYmIHN0YXJ0RGF0ZSAhPT0gJycpID8gc3RhcnREYXRlIDogbW9tZW50KCkuc3RhcnRPZignd2VlaycpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0U3RhcnREYXRlID0gbW9tZW50KCkuc3RhcnRPZignd2VlaycpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgW2NvdW50LCB1bml0XSA9IGVsZW1lbnQuZGVmYXVsdEZpbHRlclZhbHVlLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5hcGlOYW1lID09PSBcImVuZERhdGVcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmRpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlcnMub3BlcmF0aW9uRmlsdGVyLmVuZERhdGUgPSAoZW5kRGF0ZSAmJiBlbmREYXRlICE9PSAnJykgPyBlbmREYXRlIDogbW9tZW50KClbZWxlbWVudC5tb21lbnRGdW5jdGlvbl0ocGFyc2VJbnQoY291bnQpLCB1bml0KS5mb3JtYXQoZWxlbWVudC5tb21lbnRGb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRFbmREYXRlID0gbW9tZW50KClbZWxlbWVudC5tb21lbnRGdW5jdGlvbl0ocGFyc2VJbnQoY291bnQpLCB1bml0KS5mb3JtYXQoZWxlbWVudC5tb21lbnRGb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmFwaU5hbWUgPT09IFwic3RhcnREYXRlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVycy5vcGVyYXRpb25GaWx0ZXIuc3RhcnREYXRlID0gKHN0YXJ0RGF0ZSAmJiBzdGFydERhdGUgIT09ICcnKSA/IHN0YXJ0RGF0ZSA6IG1vbWVudCgpW2VsZW1lbnQubW9tZW50RnVuY3Rpb25dKHBhcnNlSW50KGNvdW50KSwgdW5pdCkuZm9ybWF0KGVsZW1lbnQubW9tZW50Rm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRTdGFydERhdGUgPSBtb21lbnQoKVtlbGVtZW50Lm1vbWVudEZ1bmN0aW9uXShwYXJzZUludChjb3VudCksIHVuaXQpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuZGVmYXVsdEZpbHRlclR5cGUgPT09IFwic3RhdGljXCIgJiYgZWxlbWVudC5kZWZhdWx0RmlsdGVyVmFsdWUgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYXBpTmFtZSA9PT0gXCJlbmREYXRlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmRpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVycy5vcGVyYXRpb25GaWx0ZXIuZW5kRGF0ZSA9IGVsZW1lbnQuZGVmYXVsdEZpbHRlclZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEVuZERhdGUgPSBlbGVtZW50LmRlZmF1bHRGaWx0ZXJWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5hcGlOYW1lID09PSBcInN0YXJ0RGF0ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVycy5vcGVyYXRpb25GaWx0ZXIuc3RhcnREYXRlID0gZWxlbWVudC5kZWZhdWx0RmlsdGVyVmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFN0YXJ0RGF0ZSA9IGVsZW1lbnQuZGVmYXVsdEZpbHRlclZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YgZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWUgPT09IFwic3RyaW5nXCIgJiYgZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWUgIT09IFwiXCIpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBcnJheS5pc0FycmF5KGVsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlKSAmJiBlbGVtZW50LmZpbHRlckRhdGFTb3VyY2VWYWx1ZS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5vcGVyYXRvck5hbWUgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlcltlbGVtZW50Lm9wZXJhdG9yTmFtZV0gPSBBcnJheS5pc0FycmF5KGVsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFtlbGVtZW50LmZpbHRlckRhdGFTb3VyY2VWYWx1ZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVycy5vcGVyYXRpb25GaWx0ZXJbZWxlbWVudC5hcGlOYW1lXSA9IGVsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlLmpvaW4oXCIsXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YXNldElkczogU2V0PGFueT4gPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCB2aWV3SWRzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFzZXRJZHNTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgICAgICAgICAgICAgICAgICB3aWRnZXQud2lkZ2V0Tm9kZS5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUubm9kZVByb3BlcnRpZXMuZGlzcGxheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2godmlldyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFZpZXdJZHMucHVzaCh2aWV3LnZpZXdJZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm91bmRPYmplY3QgPSB0aGlzLmRlZmF1bHRWaWV3SWRzT25QYWdlUmVmcmVzaD8uZmluZChpdGVtID0+IGl0ZW0udmlld0lkID09PSB2aWV3LnZpZXdJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlcml2ZWRGaWx0ZXJzID0gZm91bmRPYmplY3QgPyB0aGlzLmdldERyaWxkb3duRmlsdGVyKGZvdW5kT2JqZWN0LCBkZWZhdWx0RmlsdGVycykgOiBkZWZhdWx0RmlsdGVycztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZmlsdGVyc1wiOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRlcml2ZWRGaWx0ZXJzKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImtleVRvUGFzc1wiOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZHJpbGxEb3duVHlwZVwiOiBcIm5hdHVyYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZHJpbGxkb3duRnJvbVwiOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZURhdGFTb3VyY2Uuc2V0KHZpZXcudmlld0lkLCBvYmopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBub2RlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldElkOiB2aWV3LmRhdGFzZXRJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJZDogdmlldy52aWV3SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IGRlcml2ZWRGaWx0ZXJzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldElkc1NldC5hZGQodmlldy5kYXRhc2V0SWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc2V0SWRzLmFkZChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0lkcy5hZGQodmlldy52aWV3SWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2godmlldyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0lkOiB2aWV3LnZpZXdJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdOYW1lOiBub2RlLm5vZGVQcm9wZXJ0aWVzLndpZGdldFRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUtleTogdmlldy5rcGlDb25maWcua2V5VG9QYXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFZpZXdJZHNPblBhZ2VSZWZyZXNoPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZpZXdzID0gdGhpcy5kZWZhdWx0Vmlld0lkc09uUGFnZVJlZnJlc2gubWFwKGl0ZW0gPT4gaXRlbS52aWV3SWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0Vmlld0lkcyA9IFsuLi50aGlzLmRlZmF1bHRWaWV3SWRzLCAuLi5uZXdWaWV3cy5maWx0ZXIoaXRlbSA9PiAhdGhpcy5kZWZhdWx0Vmlld0lkcy5pbmNsdWRlcyhpdGVtKSldO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gZm9yIFJURE1TIG9wZXJhdG9ybmFtZVxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLm9wZXJhdG9yTmFtZSA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbJ29wZXJhdG9yTmFtZSddO1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiAodGhpcy5vcGVyYXRvck5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gICBkZWZhdWx0RmlsdGVycy5vcGVyYXRpb25GaWx0ZXJbJ29wZXJhdG9yX2tleSddID0gdGhpcy5vcGVyYXRvck5hbWU7XG4gICAgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICAgICAgbGV0IHVuaXF1ZWRhdGFzZXRJZHMgPSBBcnJheS5mcm9tKGRhdGFzZXRJZHNTZXQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWRnZXRJZDogd2lkZ2V0LndpZGdldElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUlkOiB3aWRnZXQucGFnZUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyczogZGVmYXVsdEZpbHRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhc2V0SWRzOiB1bmlxdWVkYXRhc2V0SWRzXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxXaWRnZXRCeURhdGFzZXQucHVzaChvYmopO1xuICAgICAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgICAgICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICBsZXQgYXBpQ2FsbHMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLmFsbFdpZGdldEJ5RGF0YXNldC5mb3JFYWNoKHZpZXcgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2aWV3LmRhdGFzZXRJZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSAoZGF0YXNldENvbmZpZyBhcyBhbnlbXSkuZmluZChkID0+IGQuZGF0YXNldElkID09PSBpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGlDYWxscy5wdXNoKHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0RGF0YUZyb21EYXRhU2V0KGZvdW5kLCBpZCwgdmlldy5maWx0ZXJzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIFByb21pc2UuYWxsKGFwaUNhbGxzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0gdGhpcy5kYXRhc2V0U2VydmljZS5nZXRVbmlxdWVEYXRhU2V0T2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRGl2RWxlbWVudHModGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGxldCB1cmxQYXJhbXM6IGFueSA9IGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlclxuICAgICAgICAgICAgICAgICAgICB1cmxQYXJhbXNbJ3BhZ2VJZCddID0gdGhpcy5wYWdlSWRcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5hdmlnYXRpb246IE5hdmlnYXRpb25FeHRyYXMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtczogdXJsUGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogXCJtZXJnZVwiXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCBuYXZpZ2F0aW9uKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLCBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ0Vycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0RGF0YVNldCgpIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmdldEFwcERhdGFzZXRDb25maWdzKCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFTZXR0YWJsZURhdGFTb3VyY2UgPSBkYXRhO1xuICAgICAgICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnRGF0YXNldCBDcmVhdGlvbicpXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cblxuICAgIGFzeW5jIGNyZWF0ZURpdkVsZW1lbnRzKGRhdGFzZXRCeUlkLCBjb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuZHluYW1pY0NvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgY29uc3QgY29udGV4dF9maWx0ZXIgPSB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy5maWx0ZXJzID8gdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcuZmlsdGVycy5maWx0ZXJJdGVtcyA6IG51bGw7XG5cbiAgICAgICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cy5mb3JFYWNoKGFzeW5jIGRpdiA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3dEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGxldCB3X2hlaWdodCA9IChkaXYud2lkZ2V0UHJvcGVydGllcy5oZWlnaHQgPT0gXCJcIikgPyBcImgtYXV0b1wiIDogJ2gtWycgKyBkaXYud2lkZ2V0UHJvcGVydGllcy5oZWlnaHQgKyAnXSc7XG4gICAgICAgICAgICByb3dEaXYuY2xhc3NMaXN0LmFkZChkaXYud2lkZ2V0UHJvcGVydGllcy53aWR0aCwgd19oZWlnaHQpO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlckl0ZW1zID0gKGRpdi5maWx0ZXJzKSA/IGRpdi5maWx0ZXJzLmZpbHRlckl0ZW1zIDogW107XG4gICAgICAgICAgICB0aGlzLmxvYWRGaWx0ZXJDb21wb25lbnQoZGl2LCBmaWx0ZXJEaXYsIGZpbHRlckl0ZW1zLCBjb250ZXh0X2ZpbHRlcik7XG4gICAgICAgICAgICByb3dEaXYuYXBwZW5kQ2hpbGQoZmlsdGVyRGl2KTtcblxuICAgICAgICAgICAgaWYgKGRpdi53aWRnZXROb2RlLmxlbmd0aCAhPSAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IG1haW5JdGVtRGl2ID0gcm93RGl2LnF1ZXJ5U2VsZWN0b3IoJy5mbGV4LmZsZXgtd3JhcCcpO1xuXG5cbiAgICAgICAgICAgICAgICAvLyBJZiBjb250ZXh0IGlzIHRydWUgYW5kIG1haW5JdGVtRGl2IGV4aXN0cywgY2xlYXIgaXRzIGNvbnRlbnRzXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQgJiYgbWFpbkl0ZW1EaXYpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpbkl0ZW1EaXYuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgbWFpbkl0ZW1EaXYgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICAgICAgICAgICAgICBtYWluSXRlbURpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICBtYWluSXRlbURpdi5jbGFzc0xpc3QuYWRkKFwiZmxleFwiLCBcImZsZXgtd3JhcFwiKTtcbiAgICAgICAgICAgICAgICAgICAgcm93RGl2LmFwcGVuZENoaWxkKG1haW5JdGVtRGl2KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRXaWRnZXROb2RlcyhkaXYsIG1haW5JdGVtRGl2LCBkYXRhc2V0QnlJZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChyb3dEaXYpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBsb2FkV2lkZ2V0Tm9kZXMoZGl2OiBhbnksIG1haW5JdGVtRGl2OiBhbnksIGRhdGFzZXRCeUlkOiBhbnkpIHtcbiAgICAgICAgdGhpcy5tYWluUGFnZURpdkVsZW1lbnQgPSBtYWluSXRlbURpdjtcblxuICAgICAgICBkaXYud2lkZ2V0Tm9kZS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0uY29tcENvbmZpZy52aWV3Q29uZmlnLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzUGVybWlzc2lvbiA9IGl0ZW0uY29tcENvbmZpZy52aWV3Q29uZmlnWzBdWydwZXJtaXNzaW9ucyddID8gdGhpcy5wZXJtaXNzaW9uSGVscGVyLmdldFBlcm1pc3Npb25FbnRpdHkoaXRlbS5jb21wQ29uZmlnLnZpZXdDb25maWdbMF1bJ3Blcm1pc3Npb25zJ10pIDogdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoaGFzUGVybWlzc2lvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRTaW5nbGVXaWRnZXROb2RlKGl0ZW0sIG1haW5JdGVtRGl2LCBkYXRhc2V0QnlJZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRTaW5nbGVXaWRnZXROb2RlKGl0ZW0sIG1haW5JdGVtRGl2LCBkYXRhc2V0QnlJZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICBsb2FkU2luZ2xlV2lkZ2V0Tm9kZShpdGVtOiBhbnksIGNvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50LCBkYXRhc2V0QnlJZDogYW55KSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRJZCA9IGBpZC0ke2l0ZW0uaWR9YDtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7ZWxlbWVudElkfWApO1xuICAgICAgICBpZiAoaXRlbS5ub2RlUHJvcGVydGllcy5kaXNwbGF5ICYmICFleGlzdGluZ0VsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHdfaGVpZ2h0ID0gaXRlbS5ub2RlUHJvcGVydGllcy5oZWlnaHQgPT09IFwiXCIgPyBcImgtYXV0b1wiIDogYGgtWyR7aXRlbS5ub2RlUHJvcGVydGllcy5oZWlnaHR9XWA7XG4gICAgICAgICAgICBjb25zdCBpdGVtRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBpdGVtRGl2LmlkID0gZWxlbWVudElkO1xuICAgICAgICAgICAgaXRlbURpdi5jbGFzc0xpc3QuYWRkKGl0ZW0ubm9kZVByb3BlcnRpZXMud2lkdGgsIHdfaGVpZ2h0LCAnbWItMicpO1xuICAgICAgICAgICAgaWYgKGl0ZW0ubm9kZVByb3BlcnRpZXMud2lkZ2V0VGl0bGUgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB3aWRnZXREaXYgPSB0aGlzLmdldFdpZGdldFRpdGxlRGl2KGl0ZW0pO1xuICAgICAgICAgICAgICAgIGl0ZW1EaXYuYXBwZW5kQ2hpbGQod2lkZ2V0RGl2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGlubmVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBpbm5lckRpdi5jbGFzc0xpc3QuYWRkKCdyb3VuZGVkJywgJ2p1c3RpZnktY2VudGVyJywgJ2l0ZW1zLWNlbnRlcicsICdib3JkZXInLCAncC0xJywgJ20tMScsICdmbGV4JywgJ2ZsZXgtcm93Jyk7XG4gICAgICAgICAgICBpdGVtLmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhc1Blcm1pc3Npb24gPSBlbGVtZW50WydwZXJtaXNzaW9ucyddID8gdGhpcy5wZXJtaXNzaW9uSGVscGVyLmdldFBlcm1pc3Npb25FbnRpdHkoZWxlbWVudFsncGVybWlzc2lvbnMnXSkgOiB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChoYXNQZXJtaXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQua3BpQ29uZmlnWydkYXRhU291cmNlJ10gPSBkYXRhc2V0QnlJZFtlbGVtZW50LmRhdGFzZXRJZF07XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQua3BpQ29uZmlnWydjb250ZXh0TWVudSddID0gdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2U7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRbJ3RpdGxlUGFyYW1zJ10gPSBpdGVtLm5vZGVQcm9wZXJ0aWVzLndpZGdldFBhcmFtcyB8fCBcIlwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wX29iamVjdCA9IHRoaXMuZmluZFdpZGdldEJ5SWQodGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cywgaXRlbS5pZCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZER5bmFtaWNDb21wb25lbnQoZWxlbWVudCwgY29tcF9vYmplY3QsIGl0ZW1EaXYpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKGl0ZW1EaXYpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzRGFzaEJvYXJkQ29udGVudFR5cGVWaWV3KSB7XG4gICAgICAgICAgICAgICAgaXRlbURpdi5hcHBlbmRDaGlsZChpbm5lckRpdik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIGlmIChleGlzdGluZ0VsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1EaXYgPSBleGlzdGluZ0VsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBpdGVtRGl2LmlubmVySFRNTCA9ICcnO1xuICAgICAgICAgICAgaWYgKGl0ZW0ubm9kZVByb3BlcnRpZXMud2lkZ2V0VGl0bGUgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB3aWRnZXREaXYgPSB0aGlzLmdldFdpZGdldFRpdGxlRGl2KGl0ZW0pO1xuICAgICAgICAgICAgICAgIGl0ZW1EaXYuYXBwZW5kQ2hpbGQod2lkZ2V0RGl2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZW0uY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5rcGlDb25maWdbJ2RhdGFTb3VyY2UnXSA9IGRhdGFzZXRCeUlkW2VsZW1lbnQuZGF0YXNldElkXTtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmtwaUNvbmZpZ1snY29udGV4dE1lbnUnXSA9IHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlO1xuICAgICAgICAgICAgICAgIGVsZW1lbnRbJ3RpdGxlUGFyYW1zJ10gPSBpdGVtLm5vZGVQcm9wZXJ0aWVzLndpZGdldFBhcmFtcyB8fCBcIlwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBfb2JqZWN0ID0gdGhpcy5maW5kV2lkZ2V0QnlJZCh0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzLCBpdGVtLmlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWREeW5hbWljQ29tcG9uZW50KGVsZW1lbnQsIGNvbXBfb2JqZWN0LCBpdGVtRGl2KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNEYXNoQm9hcmRDb250ZW50VHlwZVZpZXcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbm5lckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGlubmVyRGl2LmNsYXNzTGlzdC5hZGQoJ3JvdW5kZWQnLCAnanVzdGlmeS1jZW50ZXInLCAnaXRlbXMtY2VudGVyJywgJ2JvcmRlcicsICdwLTEnLCAnbS0xJywgJ2ZsZXgnLCAnZmxleC1yb3cnKTtcbiAgICAgICAgICAgICAgICBpdGVtRGl2LmFwcGVuZENoaWxkKGlubmVyRGl2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFdpZGdldFRpdGxlRGl2KGl0ZW0pIHtcblxuICAgICAgICBjb25zdCB3aWRnZXREaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgd2lkZ2V0RGl2LmNsYXNzTGlzdC5hZGQoXG4gICAgICAgICAgICAnZmxleCcsICdpdGVtcy1jZW50ZXInLCAnanVzdGlmeS1iZXR3ZWVuJywgJ2ZvbnQtYm9sZCcsICd0ZXh0LW1kJyxcbiAgICAgICAgICAgICd0ZXh0LWdyYXktOTAwJywgJ2Rhcms6dGV4dC13aGl0ZScsICdib3JkZXItYicsICdwLTMnLCAnZGFyazpiZy1ncmF5LTgwMCcsICdiZy1ncmF5LTIwMCcsXG4gICAgICAgICAgICAnbXgtMicsICdyb3VuZGVkLXQtbGcnLCAncmVsYXRpdmUnXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgdGl0bGVEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGl0bGVEaXYuY2xhc3NMaXN0LmFkZCgncmVsYXRpdmUnLCAnZ3JvdXAnKTtcblxuICAgICAgICBsZXQgcGFyYW1zID0gXCJcIjtcbiAgICAgICAgaWYgKCFpdGVtLm5vZGVQcm9wZXJ0aWVzLndpZGdldFBhcmFtcyAmJiB0aGlzLmRlZmF1bHRWaWV3SWRzT25QYWdlUmVmcmVzaD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSB0aGlzLmdldFRpdGxlUGFyYW1zKGl0ZW0pIHx8IFwiXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBpdGVtLm5vZGVQcm9wZXJ0aWVzLndpZGdldFBhcmFtcyB8fCBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgd2lkZ2V0VGl0bGUgPSBpdGVtLm5vZGVQcm9wZXJ0aWVzLndpZGdldFRpdGxlO1xuICAgICAgICBjb25zdCB0b29sdGlwTWF0Y2ggPSB3aWRnZXRUaXRsZS5tYXRjaCgvXFwkdFxceyhbXFxzXFxTXSo/KVxcfS8pO1xuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlUaXRsZSA9IHdpZGdldFRpdGxlLnJlcGxhY2UoL1xcJHRcXHtbXFxzXFxTXSo/XFx9L2csICcnKS50cmltKCk7XG5cbiAgICAgICAgdGl0bGVEaXYuaW5uZXJUZXh0ID0gZGlzcGxheVRpdGxlICsgcGFyYW1zO1xuXG4gICAgICAgIGlmICh0b29sdGlwTWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvb2x0aXBDb250ZW50ID0gdG9vbHRpcE1hdGNoWzFdLnRyaW0oKTtcbiAgICAgICAgICAgIGNvbnN0IHRvb2x0aXBEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRvb2x0aXBEaXYuY2xhc3NMaXN0LmFkZChcbiAgICAgICAgICAgICAgICAnYWJzb2x1dGUnLCAnbGVmdC0wJywgJ2JvdHRvbS1mdWxsJywgJ21iLTInLCAndy1tYXgnLCAnbWF4LXcteHMnLFxuICAgICAgICAgICAgICAgICdiZy1ibGFjaycsICd0ZXh0LXdoaXRlJywgJ3RleHQtc20nLCAncC0yJywgJ3JvdW5kZWQtbGcnLCAnc2hhZG93LWxnJyxcbiAgICAgICAgICAgICAgICAnb3BhY2l0eS0wJywgJ2dyb3VwLWhvdmVyOm9wYWNpdHktMTAwJywgJ3RyYW5zaXRpb24tb3BhY2l0eScsICdkdXJhdGlvbi0zMDAnLFxuICAgICAgICAgICAgICAgICd6LTUwJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRvb2x0aXBEaXYuaW5uZXJIVE1MID0gdG9vbHRpcENvbnRlbnQ7XG5cbiAgICAgICAgICAgIHRpdGxlRGl2LmFwcGVuZENoaWxkKHRvb2x0aXBEaXYpO1xuICAgICAgICB9XG5cbiAgICAgICAgd2lkZ2V0RGl2LmFwcGVuZENoaWxkKHRpdGxlRGl2KTtcblxuXG4gICAgICAgIGNvbnN0IHNlYXJjaENvbnRhaW5lckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBzZWFyY2hDb250YWluZXJEaXYuY2xhc3NMaXN0LmFkZCgnZmxleCcsICdpdGVtcy1jZW50ZXInLCAnbWwtYXV0bycsICdzcGFjZS14LTInLCAnanVzdGlmeS1lbmQnKTsgLy8gbWwtYXV0byBwdXNoZXMgY29udGVudCB0byB0aGUgcmlnaHQgc2lkZVxuXG4gICAgICAgIC8vIENoZWNrIGZvciB3aWRnZXQgZmlsdGVyXG4gICAgICAgIGlmIChpdGVtLm5vZGVQcm9wZXJ0aWVzLmlzV2lkZ2V0RmlsdGVyKSB7XG4gICAgICAgICAgICBjb25zdCBzZWFyY2hCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgICAgICAgIHNlYXJjaEJ1dHRvbi5pbm5lclRleHQgPSAnRmlsdGVyJztcbiAgICAgICAgICAgIHNlYXJjaEJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdweC0zJywgJ3B5LTEuNScsICdiZy1ibHVlLTYwMCcsICdtci0yJywgJ3RleHQtd2hpdGUnLCAncm91bmRlZCcsICdob3ZlcjpiZy1ibHVlLTcwMCcpO1xuICAgICAgICAgICAgdGhpcy5ub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2UgPSB7fTtcbiAgICAgICAgICAgIHRoaXMubm9kZXByb3BlcnRpY2VGaWx0ZXJEYXRhU291cmNlWyd2aWV3Q29uZmlnJ10gPSBpdGVtO1xuICAgICAgICAgICAgdGhpcy5ub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2VbJ2hhdmluZ0NvbmZpZyddID0gW107XG5cbiAgICAgICAgICAgIHNlYXJjaEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzV2lkZ2V0RmlsdGVycyA9IHRydWU7XG4gICAgICAgICAgICAgICAgbGV0IGZpbHRlUHJvcGVydGljZSA9IFtdO1xuICAgICAgICAgICAgICAgIGl0ZW0uY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBrZXlfbmFtZSA9IHRoaXMudW5pcXVlRGF0YVNldE9iamVjdFtlbGVtZW50LmRhdGFzZXRJZF1bMF07XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGtleV9uYW1lKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbHRlUHJvcGVydGljZS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVQcm9wZXJ0aWNlLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZmlsdGVQcm9wZXJ0aWNlLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lOiBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwiZmxvYXRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2UuaGF2aW5nQ29uZmlnLnB1c2gob2JqKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZWFyY2hDb250YWluZXJEaXYuYXBwZW5kQ2hpbGQoc2VhcmNoQnV0dG9uKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIGl0ZW0gZmlsdGVySWRcbiAgICAgICAgaWYgKGl0ZW0uZmlsdGVySWQpIHtcbiAgICAgICAgICAgIHRoaXMubm9kZXByb3BlcnRpY2VGaWx0ZXJEYXRhU291cmNlID0ge307XG4gICAgICAgICAgICB0aGlzLm5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZVsndmlld0NvbmZpZyddID0gaXRlbTtcbiAgICAgICAgICAgIHRoaXMubm9kZXByb3BlcnRpY2VGaWx0ZXJEYXRhU291cmNlWydoYXZpbmdDb25maWcnXSA9IFtdO1xuXG4gICAgICAgICAgICB0aGlzLnNlcnZpY2UuZ2V0QXBwRmlsdGVyQ29uZmlnKGl0ZW0uZmlsdGVySWQpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkV2lkZ2V0RmlsdGVyQ29tcG9uZW50KGl0ZW0sIHdpZGdldERpdiwgZGF0YS5maWx0ZXJJdGVtcywgaXRlbSk7XG4gICAgICAgICAgICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBmb3Igbm9kZSBmaWx0ZXJzXG4gICAgICAgIGlmIChpdGVtLm5vZGVQcm9wZXJ0aWVzLm5vZGVmaWx0ZXJzICYmIGl0ZW0ubm9kZVByb3BlcnRpZXMubm9kZWZpbHRlcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBpdGVtLm5vZGVQcm9wZXJ0aWVzLm5vZGVmaWx0ZXJzLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBmaWx0ZXJEaXYuY2xhc3NMaXN0LmFkZCgnZmxleCcsICdpdGVtcy1jZW50ZXInKTtcblxuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIuaW5wdXRfdHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRCb3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICAgICAgICAgICAgICB0ZXh0Qm94LnR5cGUgPSAndGV4dCc7XG4gICAgICAgICAgICAgICAgICAgIHRleHRCb3gucGxhY2Vob2xkZXIgPSBgRW50ZXIgJHtmaWx0ZXIubG9jYWxfY29sdW1ufWA7XG4gICAgICAgICAgICAgICAgICAgIHRleHRCb3guY2xhc3NMaXN0LmFkZCgncHgtMicsICdweS0xLjUnLCAncm91bmRlZCcsICdib3JkZXInLCAnbXItMScsICdib3JkZXItZ3JheS01MDAnLCAndGV4dC1ncmF5LTkwMCcsICdkYXJrOmJnLWdyYXktNzAwJywgJ2Rhcms6dGV4dC13aGl0ZScpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICAgICAgICAgICAgICBzZWFyY2hCdXR0b24uaW5uZXJUZXh0ID0gJ1NlYXJjaCc7XG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaEJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdweC0zJywgJ3B5LTEuNScsICdiZy1ibHVlLTYwMCcsICdtci0yJywgJ3RleHQtd2hpdGUnLCAncm91bmRlZCcsICdob3ZlcjpiZy1ibHVlLTcwMCcpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlcGFyZXJvdEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICBzZXBhcmVyb3RCdXR0b24uaW5uZXJIVE1MID0gJ3wnO1xuXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaFRlcm0gPSB0ZXh0Qm94LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRSZWFyY2hSZXN1bHRGcm9tSW5wdXRCb3goc2VhcmNoVGVybSwgaXRlbSwgZmlsdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyRGl2LmFwcGVuZENoaWxkKHRleHRCb3gpO1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJEaXYuYXBwZW5kQ2hpbGQoc2VhcmNoQnV0dG9uKTtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyRGl2LmFwcGVuZENoaWxkKHNlcGFyZXJvdEJ1dHRvbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc2VhcmNoQ29udGFpbmVyRGl2LmFwcGVuZENoaWxkKGZpbHRlckRpdik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdpZGdldERpdi5hcHBlbmRDaGlsZChzZWFyY2hDb250YWluZXJEaXYpO1xuICAgICAgICByZXR1cm4gd2lkZ2V0RGl2O1xuICAgIH1cblxuXG4gICAgbG9hZER5bmFtaWNDb21wb25lbnQoZGF0YSwgaW5kZXhPYmosIGNvbnRhaW5lckVsZW1lbnQpOiBhbnkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRDbGFzcyA9IHRoaXMuY29tcG9uZW50Q2xhc3NNYXBbZGF0YS5rcGlDb25maWcuY29tcG9uZW50TmFtZV07XG4gICAgICAgIHRoaXMuQ29tcFJlZnMgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudENsYXNzKTtcbiAgICAgICAgY29uc3QgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlID0gdGhpcy5Db21wUmVmcy5pbnN0YW5jZTtcblxuICAgICAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UuY2hhcnREYXRhU291cmNlID0gZGF0YTtcbiAgICAgICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLmtwaV9uYW1lID0gXCJcIjtcbiAgICAgICAgaWYgKGRhdGEua3BpQ29uZmlnLmNvbXBvbmVudE5hbWUgPT0gXCJHYW1tYUFkdmFuY2VPcGVyYXRvclRhYmxlQ29tcG9uZW50XCIgfHwgZGF0YS5rcGlDb25maWcuY29tcG9uZW50TmFtZSA9PSBcIkdhbW1hVGFibGVXaXRoUGVyY2VudGFnZUNvbXBvbmVudFwiKSB7XG4gICAgICAgICAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2Uub1Jvd0NsaWNrLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Um93Q2xpY2sodmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2Uub25yaWdodENsaWNrQ29udGV4dFNlbGVjdGlvbi5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldENvbnRleHRDbGljayh2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLmtwaUNvbmZpZy5jb21wb25lbnROYW1lID09IFwiR2FtbWFBZHZhbmNlQ2hhcnRDb21wb25lbnRcIikge1xuXG4gICAgICAgICAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2Uub25DaGFydFBvaW50Q2xpY2suc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRSb3dDbGljayh2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpbmRleE9iai5jb21wQ29uZmlnLmR5bmFtaWNDb21wb25lbnRSZWZzLnB1c2godGhpcy5Db21wUmVmcyk7XG4gICAgICAgIGNvbnN0IGNzc0NsYXNzID0gXCJ3LWZ1bGxcIjtcbiAgICAgICAgdGhpcy5Db21wUmVmcy5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoY3NzQ2xhc3MpO1xuICAgICAgICBjb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuQ29tcFJlZnMubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgbG9hZEZpbHRlckNvbXBvbmVudChpbmRleE9iaiwgY29udGFpbmVyRWxlbWVudCwgZmlsdGVySXRlbXMsIGNvbnRleHRfZmlsdGVyKSB7XG4gICAgICAgIGxldCB1c2VyTmFtZSA9IHRoaXMuc3RvcmFnZS5nZXQoJ3VzZXJfbmFtZScpXG4gICAgICAgIGxldCBzZWxlY3RlZERhdGVzID0ge3N0YXJ0RGF0ZTogdGhpcy5kZWZhdWx0U3RhcnREYXRlLCBlbmREYXRlOiB0aGlzLmRlZmF1bHRFbmREYXRlfVxuICAgICAgICBjb25zdCBjb21wb25lbnRDbGFzcyA9IHRoaXMuY29tcG9uZW50Q2xhc3NNYXBbJ0FwcEFkdmFuY2VIZWFkZXJDb21wb25lbnQnXTtcbiAgICAgICAgdGhpcy5Db21wUmVmcyA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50Q2xhc3MpO1xuICAgICAgICBjb25zdCBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UgPSB0aGlzLkNvbXBSZWZzLmluc3RhbmNlO1xuICAgICAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2Uuc2VsZWN0ZWREYXRlcyA9IHNlbGVjdGVkRGF0ZXM7XG4gICAgICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5maWx0ZXJJdGVtcyA9IGZpbHRlckl0ZW1zO1xuICAgICAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UuY29udGV4dEZpbHRlckl0ZW1zID0gY29udGV4dF9maWx0ZXI7XG4gICAgICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5maWx0ZXJPYmplY3RzID0gaW5kZXhPYmo7XG5cbiAgICAgICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLnBhZ2VUaXRsZSA9IHRoaXMucGFnZVRpdGxlO1xuICAgICAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UuYnJlYWRfY3J1bWJzX2NvbnRhaW5lciA9IHRoaXMua3BpX2JyZWFkY3J1bWJzX2NvbnRhaW5lcjtcbiAgICAgICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLmlzRWRpdEJ1dHRvbiA9ICh1c2VyTmFtZSAmJiB1c2VyTmFtZSA9PSBcImFkbWluXCIpID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UuaXNBZHZhbmNlQnV0dG9uID0gdHJ1ZTtcbiAgICAgICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLmdldEZpbHRlclBhZ2VDb25maWcuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdldEZpbHRlcnNGb3JUZW1wbGF0ZSh2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UuZ2V0T3BlcmF0b3JOYW1lLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkRGF0YUJ5T3BlcmF0b3IodmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLmdldENvbnRleHRGaWx0ZXJEYXRhLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZXRDb250ZXh0RmlsdGVyRGF0YSh2YWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGluZGV4T2JqLmNvbXBDb25maWcuZHluYW1pY0NvbXBvbmVudFJlZnMucHVzaCh0aGlzLkNvbXBSZWZzKTtcbiAgICAgICAgY29uc3QgY3NzQ2xhc3MgPSBcInctZnVsbFwiO1xuICAgICAgICB0aGlzLkNvbXBSZWZzLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChjc3NDbGFzcyk7XG4gICAgICAgIGNvbnRhaW5lckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5Db21wUmVmcy5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBsb2FkV2lkZ2V0RmlsdGVyQ29tcG9uZW50KGluZGV4T2JqLCBjb250YWluZXJFbGVtZW50LCBmaWx0ZXJJdGVtcywgdmlld0lkcykge1xuICAgICAgICBsZXQgc2VsZWN0ZWREYXRlcyA9IHtzdGFydERhdGU6IHRoaXMuZGVmYXVsdFN0YXJ0RGF0ZSwgZW5kRGF0ZTogdGhpcy5kZWZhdWx0RW5kRGF0ZX1cbiAgICAgICAgY29uc3QgY29tcG9uZW50Q2xhc3MgPSB0aGlzLmNvbXBvbmVudENsYXNzTWFwWydBZHZhbmNlV2lkZ2V0SGVhZGVyRmlsdGVyQ29tcG9uZW50J107XG4gICAgICAgIHRoaXMuQ29tcFJlZnMgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudENsYXNzKTtcbiAgICAgICAgY29uc3QgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlID0gdGhpcy5Db21wUmVmcy5pbnN0YW5jZTtcbiAgICAgICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLnNlbGVjdGVkRGF0ZXMgPSBzZWxlY3RlZERhdGVzO1xuICAgICAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UuZmlsdGVySXRlbXMgPSBmaWx0ZXJJdGVtcztcbiAgICAgICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLnZpZXdJZHMgPSB2aWV3SWRzO1xuXG4gICAgICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5nZXRXaWRnZXRGaWx0ZXJDb25maWcuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdldFdpZGdldEZpbHRlckZvclRlbXBsYXRlKHZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW5kZXhPYmouY29tcENvbmZpZy5keW5hbWljQ29tcG9uZW50UmVmcy5wdXNoKHRoaXMuQ29tcFJlZnMpO1xuICAgICAgICBjb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuQ29tcFJlZnMubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgLy8gZm9yIGNvbnRleHQgbWVudSBmdW5jdGlvblxuICAgIGdldENvbnRleHRDbGljayhldmVudCkge1xuICAgICAgICBjb25zdCBzdGF0ZURhdGEgPSBBcnJheS5mcm9tKHRoaXMuc3RhdGVEYXRhU291cmNlLmtleXMoKSk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWaWV3SW5kZXggPSBzdGF0ZURhdGEuaW5kZXhPZihldmVudC52aWV3SWQpO1xuICAgICAgICBjb25zdCBkZWxldGVkVmlld0lkcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gY3VycmVudFZpZXdJbmRleCArIDE7IGkgPCBzdGF0ZURhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGRlbGV0ZWRWaWV3SWRzLnB1c2goc3RhdGVEYXRhW2ldKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgZWxlbWVudC53aWRnZXROb2RlLmZvckVhY2goKG5vZGU6IGFueSwgbm9kZUluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXRFbGVtZW50T2ZDdXJyZW50Vmlldyhub2RlLCBldmVudC5kcmlsbGRvd25UbykpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZpZXcgPSBlbGVtZW50LndpZGdldE5vZGVbbm9kZUluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFwaUNhbGxzID0gW107XG4gICAgICAgICAgICAgICAgICAgIGxldCBjaGF0QXBpQ2FsbCA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBhcHBsaWVkRmlsdGVycyA9IHRoaXMuZ2V0U2V0T3BlcmF0b3JGaWx0ZXIoZXZlbnQsIHRoaXMuc3RhdGVEYXRhU291cmNlLmdldChldmVudC5kcmlsbGRvd25Gcm9tKSk7XG4gICAgICAgICAgICAgICAgICAgIHZpZXcuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2goY29udGVudFZpZXcgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZvdW5kID0gKHRoaXMuZGF0YVNldE1vZGFsIGFzIGFueVtdKS5maW5kKGQgPT4gZC5kYXRhc2V0SWQgPT09IGNvbnRlbnRWaWV3LmRhdGFzZXRJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGlDYWxscy5wdXNoKHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0RGF0YUZyb21EYXRhU2V0KGZvdW5kLCBjb250ZW50Vmlldy5kYXRhc2V0SWQsIGFwcGxpZWRGaWx0ZXJzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdEFwaUNhbGwucHVzaCh0aGlzLmNoYXRBcGlTZXJ2aWNlLmdldERhdGFGb3JDaGF0QWkodGhpcy5wYWdlSWQsIGNvbnRlbnRWaWV3LCBhcHBsaWVkRmlsdGVycykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwoYXBpQ2FsbHMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0gdGhpcy5kYXRhc2V0U2VydmljZS5nZXRVbmlxdWVEYXRhU2V0T2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBlbnRyeSBvZiBkZWxldGVkVmlld0lkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQud2lkZ2V0Tm9kZS5mb3JFYWNoKHZpZXdWYWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdWYWx1ZS5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaCh2aWV3SWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXdJZC52aWV3SWQgPT0gZW50cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdHMgPSB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZS5zb21lKGl0ZW0gPT4gaXRlbS52aWV3SWQgPT09IHZpZXdJZC52aWV3SWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIG5vdCBleGlzdHMsIHB1c2ggdGhlIG5ldyBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2UucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3SWQ6IHZpZXdJZC52aWV3SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3TmFtZTogbm9kZS5ub2RlUHJvcGVydGllcy53aWRnZXRUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlLZXk6IHZpZXdJZC5rcGlDb25maWcua2V5VG9QYXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydERhdGEgPSB0aGlzLnN0YXRlRGF0YVNvdXJjZS5nZXQoZW50cnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydERhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZURhdGFTb3VyY2UuZGVsZXRlKGVudHJ5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3VmFsdWUubm9kZVByb3BlcnRpZXNbJ2Rpc3BsYXknXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZWZpeGVkSWQgPSBgaWQtJHt2aWV3VmFsdWUuaWR9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50VG9IaWRlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7cHJlZml4ZWRJZH1gKSBhcyBIVE1MRWxlbWVudDsgLy8gQ2FzdCB0byBIVE1MRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50VG9IaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRUb0hpZGUucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2UgPSB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZS5maWx0ZXIoZSA9PiBlLmRpc3BsYXlLZXkgIT09IGV2ZW50LmtleVRvUGFzcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3LmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKHZhbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmaWx0ZXJzXCI6IGFwcGxpZWRGaWx0ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImtleVRvUGFzc1wiOiB0aGlzLnVwZGF0ZU9wZXJhdG9yRGF0YShldmVudC5rZXlUb1Bhc3MsIGV2ZW50LmRhdGEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRyaWxsRG93blR5cGVcIjogZXZlbnQuZHJpbGxEb3duVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkcmlsbGRvd25Gcm9tXCI6IGV2ZW50LmRyaWxsZG93bkZyb21cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZURhdGFTb3VyY2Uuc2V0KHZhbFsndmlld0lkJ10sIG9iailcblxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3Lm5vZGVQcm9wZXJ0aWVzWydkaXNwbGF5J10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmlldy5ub2RlUHJvcGVydGllc1snd2lkZ2V0UGFyYW1zJ10gPSBldmVudC50YWJsZVRpdGxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJlZml4ZWRJZCA9IGBpZC0ke3ZpZXcuaWR9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtwcmVmaXhlZElkfWApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkU2luZ2xlV2lkZ2V0Tm9kZSh2aWV3LCB0aGlzLm1haW5QYWdlRGl2RWxlbWVudCwgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20odGhpcy5tYWluUGFnZURpdkVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMjAwKTtcblxuXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmF2aWdhdGlvbjogTmF2aWdhdGlvbkV4dHJhcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtczogYXBwbGllZEZpbHRlcnNbJ29wZXJhdGlvbkZpbHRlciddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IFwibWVyZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCBuYXZpZ2F0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBub2RlLm5vZGVQcm9wZXJ0aWVzWydkaXNwbGF5J10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gZm9yIHJvdyBjbGljayBmdW5jdGlvblxuICAgIGFzeW5jIGdldFJvd0NsaWNrKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHN0YXRlRGF0YSA9IEFycmF5LmZyb20odGhpcy5zdGF0ZURhdGFTb3VyY2Uua2V5cygpKTtcbiAgICAgICAgY29uc3QgY3VycmVudFZpZXdJbmRleCA9IHN0YXRlRGF0YS5pbmRleE9mKGV2ZW50LnZpZXdJZCk7XG4gICAgICAgIGNvbnN0IGRlbGV0ZWRWaWV3SWRzID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IGN1cnJlbnRWaWV3SW5kZXggKyAxOyBpIDwgc3RhdGVEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAvLyBpZiAoIXRoaXMuZGVmYXVsdFZpZXdJZHMuaW5jbHVkZXMoc3RhdGVEYXRhW2ldKSkge1xuICAgICAgICAgICAgZGVsZXRlZFZpZXdJZHMucHVzaChzdGF0ZURhdGFbaV0pO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhvdXJseU5vZGUgPSB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzXG4gICAgICAgICAgICAubWFwKHdpZGdldCA9PiB3aWRnZXQud2lkZ2V0Tm9kZS5maW5kKG5vZGUgPT4gdGhpcy5nZXRIb3VybHlEYXRhKG5vZGUpKSlcbiAgICAgICAgICAgIC5maW5kKG5vZGUgPT4gbm9kZSk7XG5cbiAgICAgICAgaWYgKGhvdXJseU5vZGUgJiYgZXZlbnQua2V5VG9QYXNzLmluY2x1ZGVzKFwicmVjb3JkRGF0ZVwiKSkge1xuICAgICAgICAgICAgdGhpcy5nZXRWaWV3QnlSb3dDTGlja0ZvckhvdXJseUNoYXJ0KGV2ZW50LCBob3VybHlOb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRWaWV3Tm9kZSA9IHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHNcbiAgICAgICAgICAgIC5tYXAod2lkZ2V0ID0+IHdpZGdldC53aWRnZXROb2RlLmZpbmQobm9kZSA9PiB0aGlzLmdldEVsZW1lbnRPZkN1cnJlbnRWaWV3KG5vZGUsIGV2ZW50LnZpZXdJZCkpKVxuICAgICAgICAgICAgLmZpbmQobm9kZSA9PiBub2RlKTtcblxuXG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwO1xuICAgICAgICBpZiAoY3VycmVudFZpZXdOb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBkcmlsZG93bnNGb3JDdXJyZW50VmlldyA9IFtdO1xuICAgICAgICAgICAgY29uc3QgZHJpbGRvd25zRm9yQ3VycmVudFBhZ2UgPSBbXTtcbiAgICAgICAgICAgIGN1cnJlbnRWaWV3Tm9kZS5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaChhc3luYyBlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5rcGlDb25maWcudmlld1Byb3BlcnRpZXMuZW5hYmxlQ2xpY2tFdmVudCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5rcGlDb25maWcudmlld1Byb3BlcnRpZXMuY2xpY2tFdmVudE9wdGlvbnM/LmV2ZW50VHlwZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmtwaUNvbmZpZy52aWV3UHJvcGVydGllcy5jbGlja0V2ZW50T3B0aW9ucy5ldmVudFR5cGUgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBldmVudFR5cGUgPSBlbGVtZW50LmtwaUNvbmZpZy52aWV3UHJvcGVydGllcy5jbGlja0V2ZW50T3B0aW9ucy5ldmVudFR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXNzb2NpYXRlZFZpZXdzID0gZWxlbWVudC5rcGlDb25maWcudmlld1Byb3BlcnRpZXMuY2xpY2tFdmVudE9wdGlvbnMuYXNzb2NpYXRlZFZpZXdzO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFzc29jaWF0ZWRQYWdlID0gKGVsZW1lbnQua3BpQ29uZmlnLnZpZXdQcm9wZXJ0aWVzLmNsaWNrRXZlbnRPcHRpb25zLmFzc29jaWF0ZWRQYWdlKSA/IGVsZW1lbnQua3BpQ29uZmlnLnZpZXdQcm9wZXJ0aWVzLmNsaWNrRXZlbnRPcHRpb25zLmFzc29jaWF0ZWRQYWdlIDogXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjbGlja0V2ZW50T3B0aW9ucyA9IGVsZW1lbnQua3BpQ29uZmlnLnZpZXdQcm9wZXJ0aWVzLmNsaWNrRXZlbnRPcHRpb25zO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09ICdvcHRpb25hbERyaWxsRG93bicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXNzb2NpYXRlZFZpZXdzICYmIGFzc29jaWF0ZWRWaWV3cy5sZW5ndGggIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCB2aWV3Rm9yRHJpbGxEb3duIG9mIGFzc29jaWF0ZWRWaWV3cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyQ29uZGl0aW9uID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh2aWV3Rm9yRHJpbGxEb3duWydmaWx0ZXJDb25kaXRpb24nXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWF0Y2hGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJDb25kaXRpb24uZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdWVyeVBhcmFtcy5nZXQoa2V5KSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hGb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoRm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Rm9yRHJpbGxEb3duWyd2aWV3SWQnXS5mb3JFYWNoKHZpZXdGb3JJZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaWxkb3duc0ZvckN1cnJlbnRWaWV3LnB1c2godmlld0ZvcklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSAnZHJpbGxkb3duJyB8fCBldmVudFR5cGUgPT0gJ3BvcHVwJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGVudHJ5IG9mIGFzc29jaWF0ZWRWaWV3cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmlsZG93bnNGb3JDdXJyZW50Vmlldy5wdXNoKGVudHJ5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSAnbmF2aWdhdGVUb1BhZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLmdldEFwcFBhZ2VEZXRhaWxDb25maWcoYXNzb2NpYXRlZFBhZ2UpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB7cGFnZUlkLCBpZCwgbmFtZSwgLi4ucGFyYW1zfSA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXNzb2NpYXRlZFBhcmFtc1RlbXBsYXRlID0gY2xpY2tFdmVudE9wdGlvbnMuYXNzb2NpYXRlZFBhcmFtcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcHBsaWVkRmlsdGVycyA9IHRoaXMuZ2V0U2V0T3BlcmF0b3JGaWx0ZXIoZXZlbnQsIHRoaXMuc3RhdGVEYXRhU291cmNlLmdldChldmVudC52aWV3SWQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmtleVRvUGFzcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tlbGVtZW50XSA9IGV2ZW50LmRhdGFbZWxlbWVudF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1sncGFnZUlkJ10gPSBhc3NvY2lhdGVkUGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhc3NvY2lhdGVkUGFyYW1zVGVtcGxhdGUgIT09IFwiXCIpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaW5hbEFzc29jaWF0ZWRQYXJhbXM6IGFueSA9IHRoaXMucmVwbGFjZUFzc29jaWF0ZWRQYXJhbXMoYXNzb2NpYXRlZFBhcmFtc1RlbXBsYXRlLCBwYXJhbXMsIGFwcGxpZWRGaWx0ZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtczogYW55ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxBc3NvY2lhdGVkUGFyYW1zLnNwbGl0KFwiJlwiKS5mb3JFYWNoKHBhaXIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBwYWlyLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zWydwYWdlSWQnXSA9IHBhcmFtc1sncGFnZUlkJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZnVsbFVybCA9IHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShbZGF0YS5wYWdlVXJsXSwge3F1ZXJ5UGFyYW1zfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtkYXRhLnBhZ2VVcmxdLCB7cXVlcnlQYXJhbXN9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aW5kb3cub3BlbihmdWxsVXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmdWxsVXJsID0gdGhpcy5yb3V0ZXIuc2VyaWFsaXplVXJsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKFtkYXRhLnBhZ2VVcmxdLCB7cXVlcnlQYXJhbXM6IHBhcmFtc30pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbZGF0YS5wYWdlVXJsXSwge3F1ZXJ5UGFyYW1zfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2luZG93Lm9wZW4oZnVsbFVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSAnc2FtZVZpZXdEcmlsbGRvd24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdnZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHJpbGRvd25zRm9yQ3VycmVudFZpZXcubGVuZ3RoICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCB2aWV3SWRGb3JOZXh0IG9mIGRyaWxkb3duc0ZvckN1cnJlbnRWaWV3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRWaWV3Tm9kZSA9IHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAod2lkZ2V0ID0+IHdpZGdldC53aWRnZXROb2RlLmZpbmQobm9kZSA9PiB0aGlzLmdldEVsZW1lbnRPZkN1cnJlbnRWaWV3KG5vZGUsIHZpZXdJZEZvck5leHQpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKG5vZGUgPT4gbm9kZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSAncG9wdXAnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmlzUG9wdXBWaWV3ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0TW9kYWxWaWV3QnlSb3dDTGljayhldmVudCwgbmV4dFZpZXdOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0Vmlld0J5Um93Q0xpY2soZXZlbnQsIG5leHRWaWV3Tm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGVudHJ5IG9mIGRlbGV0ZWRWaWV3SWRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQud2lkZ2V0Tm9kZS5mb3JFYWNoKHZpZXdWYWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3VmFsdWUuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2godmlld0lkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmlld0lkLnZpZXdJZCA9PSBlbnRyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdHMgPSB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZS5zb21lKGl0ZW0gPT4gaXRlbS52aWV3SWQgPT09IHZpZXdJZC52aWV3SWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2UucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0lkOiB2aWV3SWQudmlld0lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdOYW1lOiBjdXJyZW50Vmlld05vZGUubm9kZVByb3BlcnRpZXMud2lkZ2V0VGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUtleTogdmlld0lkLmtwaUNvbmZpZy5rZXlUb1Bhc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0RGF0YSA9IHRoaXMuc3RhdGVEYXRhU291cmNlLmdldChlbnRyeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydERhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVEYXRhU291cmNlLmRlbGV0ZShlbnRyeSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3VmFsdWUubm9kZVByb3BlcnRpZXNbJ2Rpc3BsYXknXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmVmaXhlZElkID0gYGlkLSR7dmlld1ZhbHVlLmlkfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0hpZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtwcmVmaXhlZElkfWApIGFzIEhUTUxFbGVtZW50OyAvLyBDYXN0IHRvIEhUTUxFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50VG9IaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50VG9IaWRlLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFZpZXdJbmRleCA9IHN0YXRlRGF0YS5pbmRleE9mKGV2ZW50LnZpZXdJZCkgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFZpZXcgPSB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCh3aWRnZXQgPT4gd2lkZ2V0LndpZGdldE5vZGVbbmV4dFZpZXdJbmRleF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmQobm9kZSA9PiBub2RlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRWaWV3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0Vmlld0J5Um93Q0xpY2soZXZlbnQsIG5leHRWaWV3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICAgICAgLy8gZm9yIHZpZXcgZ3JvdXBcblxuXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRWaWV3QnlSb3dDTGlja0ZvckhvdXJseUNoYXJ0KGV2ZW50LCBub2RlKSB7XG5cbiAgICAgICAgbGV0IGFwaUNhbGxzID0gW107XG4gICAgICAgIGNvbnN0IGRlbGV0ZWRWaWV3SWRzID0gW107XG4gICAgICAgIG5vZGUuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBsZXQgYXBwbGllZEZpbHRlcnMgPSB0aGlzLmdldFNldE9wZXJhdG9yRmlsdGVyKGV2ZW50LCB0aGlzLnN0YXRlRGF0YVNvdXJjZS5nZXQoaXRlbS52aWV3SWQpKTtcbiAgICAgICAgICAgIGxldCBmb3VuZCA9ICh0aGlzLmRhdGFTZXRNb2RhbCBhcyBhbnlbXSkuZmluZChkID0+IGQuZGF0YXNldElkID09PSBpdGVtLmRhdGFzZXRJZCk7XG4gICAgICAgICAgICBkZWxldGVkVmlld0lkcy5wdXNoKGl0ZW0udmlld0lkKTtcbiAgICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICAgIGFwaUNhbGxzLnB1c2godGhpcy5kYXRhc2V0U2VydmljZS5nZXREYXRhRnJvbURhdGFTZXQoZm91bmQsIGl0ZW0uZGF0YXNldElkLCBhcHBsaWVkRmlsdGVycykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgUHJvbWlzZS5hbGwoYXBpQ2FsbHMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0gdGhpcy5kYXRhc2V0U2VydmljZS5nZXRVbmlxdWVEYXRhU2V0T2JqZWN0KCk7XG4gICAgICAgICAgICAvLyBub2RlLm5vZGVQcm9wZXJ0aWVzWyd3aWRnZXRQYXJhbXMnXSA9IGV2ZW50LnRhYmxlVGl0bGU7XG4gICAgICAgICAgICB0aGlzLmxvYWRTaW5nbGVXaWRnZXROb2RlKG5vZGUsIHRoaXMubWFpblBhZ2VEaXZFbGVtZW50LCB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSh0aGlzLm1haW5QYWdlRGl2RWxlbWVudCk7XG4gICAgICAgICAgICB9LCAyMDApO1xuXG4gICAgICAgIH0pO1xuICAgICAgICAvLyB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0TW9kYWxWaWV3QnlSb3dDTGljayhldmVudCwgdmlldykge1xuICAgICAgICBsZXQgYXBpQ2FsbHMgPSBbXTtcbiAgICAgICAgbGV0IGFwcGxpZWRGaWx0ZXJzID0gdGhpcy5nZXRTZXRPcGVyYXRvckZpbHRlcihldmVudCwgdGhpcy5zdGF0ZURhdGFTb3VyY2UuZ2V0KGV2ZW50LnZpZXdJZCkpO1xuICAgICAgICB2aWV3LmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKGNvbnRlbnRWaWV3ID0+IHtcbiAgICAgICAgICAgIGxldCBmb3VuZCA9ICh0aGlzLmRhdGFTZXRNb2RhbCBhcyBhbnlbXSkuZmluZChkID0+IGQuZGF0YXNldElkID09PSBjb250ZW50Vmlldy5kYXRhc2V0SWQpO1xuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgYXBpQ2FsbHMucHVzaCh0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldERhdGFGcm9tRGF0YVNldChmb3VuZCwgY29udGVudFZpZXcuZGF0YXNldElkLCBhcHBsaWVkRmlsdGVycykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoYXBpQ2FsbHMpXG5cblxuICAgICAgICB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZSA9IHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlLmZpbHRlcihlID0+IGUuZGlzcGxheUtleSAhPT0gZXZlbnQua2V5VG9QYXNzKTtcbiAgICAgICAgdmlldy5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaCh2aWV3Zm9yRGF0YVNldCA9PiB7XG5cbiAgICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICAgICAgXCJmaWx0ZXJzXCI6IGFwcGxpZWRGaWx0ZXJzLFxuICAgICAgICAgICAgICAgIFwia2V5VG9QYXNzXCI6IHRoaXMudXBkYXRlT3BlcmF0b3JEYXRhKGV2ZW50LmtleVRvUGFzcywgZXZlbnQuZGF0YSksXG4gICAgICAgICAgICAgICAgXCJkcmlsbERvd25UeXBlXCI6IGV2ZW50LmRyaWxsRG93blR5cGUsXG4gICAgICAgICAgICAgICAgXCJkcmlsbGRvd25Gcm9tXCI6IGV2ZW50LmRyaWxsZG93bkZyb21cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RhdGVEYXRhU291cmNlLnNldCh2aWV3Zm9yRGF0YVNldFsndmlld0lkJ10sIG9iailcbiAgICAgICAgfSk7XG4gICAgICAgIHZpZXcubm9kZVByb3BlcnRpZXNbJ2Rpc3BsYXknXSA9IHRydWU7XG4gICAgICAgIHZpZXcubm9kZVByb3BlcnRpZXNbJ3dpZGdldFBhcmFtcyddID0gZXZlbnQudGFibGVUaXRsZTtcbiAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0gdGhpcy5kYXRhc2V0U2VydmljZS5nZXRVbmlxdWVEYXRhU2V0T2JqZWN0KCk7XG4gICAgICAgIHRoaXMubW9kYWxDb25maWdzID0ge1xuICAgICAgICAgICAgdmlldzogdmlldyxcbiAgICAgICAgICAgIGRhdGFzb3VyY2U6IHRoaXMudW5pcXVlRGF0YVNldE9iamVjdFxuICAgICAgICB9XG4gICAgICAgIC8vIHRoaXMubG9hZFNpbmdsZVdpZGdldE5vZGUodmlldywgdGhpcy5tYWluUGFnZURpdkVsZW1lbnQsIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaXNQb3B1cFZpZXcgPSB0cnVlO1xuICAgICAgICB9LCAyMDApO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFZpZXdCeVJvd0NMaWNrKGV2ZW50LCB2aWV3KSB7XG4gICAgICAgIGxldCBhcGlDYWxscyA9IFtdO1xuICAgICAgICBsZXQgY2hhdEFwaUNhbGwgPSBbXTtcbiAgICAgICAgbGV0IGFwcGxpZWRGaWx0ZXJzID0gdGhpcy5nZXRTZXRPcGVyYXRvckZpbHRlcihldmVudCwgdGhpcy5zdGF0ZURhdGFTb3VyY2UuZ2V0KGV2ZW50LnZpZXdJZCkpO1xuXG4gICAgICAgIHZpZXcuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2goY29udGVudFZpZXcgPT4ge1xuICAgICAgICAgICAgbGV0IGZvdW5kID0gKHRoaXMuZGF0YVNldE1vZGFsIGFzIGFueVtdKS5maW5kKGQgPT4gZC5kYXRhc2V0SWQgPT09IGNvbnRlbnRWaWV3LmRhdGFzZXRJZCk7XG4gICAgICAgICAgICAvLyBsZXQgcXVlcnlQYXJhbXMgPSB0aGlzLmdldEZpbHRlcnNGb3JRdWVyeVBhcmFtcyhhcHBsaWVkRmlsdGVycywgZm91bmQuY29uZmlnLnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycywgY29udGVudFZpZXcpO1xuXG4gICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICBhcGlDYWxscy5wdXNoKHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0RGF0YUZyb21EYXRhU2V0KGZvdW5kLCBjb250ZW50Vmlldy5kYXRhc2V0SWQsIGFwcGxpZWRGaWx0ZXJzKSk7XG4gICAgICAgICAgICAgICAgY2hhdEFwaUNhbGwucHVzaCh0aGlzLmNoYXRBcGlTZXJ2aWNlLmdldERhdGFGb3JDaGF0QWkodGhpcy5wYWdlSWQsIGNvbnRlbnRWaWV3LCBhcHBsaWVkRmlsdGVycykpO1xuXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChhcGlDYWxscylcblxuXG4gICAgICAgIHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlID0gdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2UuZmlsdGVyKGUgPT4gZS5kaXNwbGF5S2V5ICE9PSBldmVudC5rZXlUb1Bhc3MpO1xuICAgICAgICB2aWV3LmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKHZpZXdmb3JEYXRhU2V0ID0+IHtcblxuICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICBcImZpbHRlcnNcIjogYXBwbGllZEZpbHRlcnMsXG4gICAgICAgICAgICAgICAgXCJrZXlUb1Bhc3NcIjogdGhpcy51cGRhdGVPcGVyYXRvckRhdGEoZXZlbnQua2V5VG9QYXNzLCBldmVudC5kYXRhKSxcbiAgICAgICAgICAgICAgICBcImRyaWxsRG93blR5cGVcIjogZXZlbnQuZHJpbGxEb3duVHlwZSxcbiAgICAgICAgICAgICAgICBcImRyaWxsZG93bkZyb21cIjogZXZlbnQuZHJpbGxkb3duRnJvbVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZURhdGFTb3VyY2Uuc2V0KHZpZXdmb3JEYXRhU2V0Wyd2aWV3SWQnXSwgb2JqKVxuICAgICAgICB9KTtcbiAgICAgICAgdmlldy5ub2RlUHJvcGVydGllc1snZGlzcGxheSddID0gdHJ1ZTtcbiAgICAgICAgdmlldy5ub2RlUHJvcGVydGllc1snd2lkZ2V0UGFyYW1zJ10gPSBldmVudC50YWJsZVRpdGxlO1xuICAgICAgICBjb25zdCBwcmVmaXhlZElkID0gYGlkLSR7dmlldy5pZH1gO1xuICAgICAgICBjb25zdCBjb250YWluZXJFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7cHJlZml4ZWRJZH1gKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0gdGhpcy5kYXRhc2V0U2VydmljZS5nZXRVbmlxdWVEYXRhU2V0T2JqZWN0KCk7XG4gICAgICAgIHRoaXMubG9hZFNpbmdsZVdpZGdldE5vZGUodmlldywgdGhpcy5tYWluUGFnZURpdkVsZW1lbnQsIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCk7XG5cbiAgICAgICAgbGV0IG5hdmlnYXRpb246IE5hdmlnYXRpb25FeHRyYXMgPSB7XG4gICAgICAgICAgICBxdWVyeVBhcmFtczogYXBwbGllZEZpbHRlcnNbJ29wZXJhdGlvbkZpbHRlciddLFxuICAgICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogXCJtZXJnZVwiXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCBuYXZpZ2F0aW9uKTtcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5zdGF0ZURhdGFTb3VyY2UpO1xuXG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKHRoaXMubWFpblBhZ2VEaXZFbGVtZW50KTtcbiAgICAgICAgfSwgMjAwKTtcbiAgICB9XG5cbiAgICByZXBsYWNlQXNzb2NpYXRlZFBhcmFtcyh0ZW1wbGF0ZTogc3RyaW5nLCBwYXJhbXM6IGFueSwgYXBwbGllZEZpbHRlcnM6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKC9cXCQoRnxQKVxceyhbXn1dKylcXH0vZywgKG1hdGNoLCB0eXBlLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlID09PSBcIkZcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcHBsaWVkRmlsdGVycy5vcGVyYXRpb25GaWx0ZXI/LltrZXldID8/IFwiXCI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwiUFwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtcz8uW2tleV0gPz8gXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2Nyb2xsVG9Cb3R0b20oY29udGFpbmVyOiBIVE1MRWxlbWVudCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5zY3JvbGxJbnRvVmlldyh7YmxvY2s6ICdlbmQnfSk7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuICAgICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICBmaW5kV2lkZ2V0QnlJZChjb25maWdzOiBhbnlbXSwgaWQ6IHN0cmluZyk6IGFueSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGZvciAoY29uc3QgY29uZmlnIG9mIGNvbmZpZ3MpIHtcbiAgICAgICAgICAgIGlmIChjb25maWcuaWQgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb25maWcud2lkZ2V0Tm9kZSAmJiBjb25maWcud2lkZ2V0Tm9kZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLmZpbmRXaWRnZXRCeUlkKGNvbmZpZy53aWRnZXROb2RlLCBpZCk7XG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB1cGRhdGVPcGVyYXRvckRhdGEoa2V5X25hbWU6IHN0cmluZ1tdLCB2YWx1ZV9kYXRhOiBhbnkpOiBhbnkge1xuICAgICAgICBsZXQgb3BlcmF0b3IgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5X25hbWUpIHtcbiAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHt9O1xuICAgICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZV9kYXRhW2tleV07XG4gICAgICAgICAgICBvcGVyYXRvci5wdXNoKG9iailcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3BlcmF0b3I7XG4gICAgfVxuXG5cbiAgICBnZXRFbGVtZW50T2ZDdXJyZW50Vmlldyhub2RlLCB2aWV3SWQpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZE9iamVjdCA9IG5vZGUuY29tcENvbmZpZy52aWV3Q29uZmlnLmZpbmQob2JqZWN0ID0+IG9iamVjdC52aWV3SWQgPT09IHZpZXdJZCk7XG4gICAgICAgIHJldHVybiBtYXRjaGVkT2JqZWN0ID8gbm9kZSA6IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0SG91cmx5RGF0YShub2RlKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZWRPYmplY3QgPSBub2RlLmNvbXBDb25maWcudmlld0NvbmZpZy5maW5kKG9iamVjdCA9PiBvYmplY3Qua3BpQ29uZmlnLmZvcm1hdGUgPT09ICdob3VybHknKTtcbiAgICAgICAgcmV0dXJuIG1hdGNoZWRPYmplY3QgPyBub2RlIDogbnVsbDtcbiAgICB9XG5cbiAgICBnZXRTZXRPcGVyYXRvckZpbHRlcihvYmplY3REYXRhLCBwcmV2aW91c1ZpZXdTdGF0ZXMpIHtcblxuICAgICAgICBjb25zdCB7ZGF0YSwga2V5VG9QYXNzfSA9IG9iamVjdERhdGE7XG4gICAgICAgIGNvbnN0IGFwcGxpZWRGaWx0ZXIgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHByZXZpb3VzVmlld1N0YXRlcy5maWx0ZXJzLm9wZXJhdGlvbkZpbHRlcikpO1xuXG4gICAgICAgIGtleVRvUGFzcy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkS2V5ID0ga2V5LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCAnJyk7XG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRLZXkgPT09IFwicmVjb3JkZGF0ZVwiICYmIFwic3RhcnREYXRlXCIgaW4gYXBwbGllZEZpbHRlciAmJiBcImVuZERhdGVcIiBpbiBhcHBsaWVkRmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGFwcGxpZWRGaWx0ZXIuc3RhcnREYXRlID0gZGF0YVtrZXldO1xuICAgICAgICAgICAgICAgICAgICBhcHBsaWVkRmlsdGVyLmVuZERhdGUgPSBkYXRhW2tleV07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXBwbGllZEZpbHRlcltrZXldID0gZGF0YVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRvcGVyYXRpb25GaWx0ZXIgPSB0aGlzLmdsb2JhbERlZmF1bHRGaWx0ZXIub3BlcmF0aW9uRmlsdGVyO1xuICAgICAgICBpZiAoZGVmYXVsdG9wZXJhdGlvbkZpbHRlcikge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZGVmYXVsdG9wZXJhdGlvbkZpbHRlcikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghYXBwbGllZEZpbHRlci5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFwcGxpZWRGaWx0ZXJba2V5XSA9IGRlZmF1bHRvcGVyYXRpb25GaWx0ZXJba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9wZXJhdGlvbkZpbHRlciA9IHt9O1xuICAgICAgICBvcGVyYXRpb25GaWx0ZXJbJ29wZXJhdGlvbkZpbHRlciddID0gYXBwbGllZEZpbHRlcjtcbiAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkZpbHRlcjtcbiAgICB9XG5cblxuICAgIGdldFJlYXJjaFJlc3VsdEZyb21JbnB1dEJveChpbnB1dFZhbHVlLCB2aWV3Q29uZmlnLCBmaWx0ZXJPYmplY3QpIHtcbiAgICAgICAgbGV0IHZpZXcgPSB2aWV3Q29uZmlnO1xuICAgICAgICBsZXQgZXZlbnROb2RlID0ge2RhdGE6IHt9LCBrZXlUb1Bhc3M6IFtdfVxuICAgICAgICBldmVudE5vZGUuZGF0YVtmaWx0ZXJPYmplY3Quc2VydmVyX2NvbHVtbl0gPSBpbnB1dFZhbHVlO1xuICAgICAgICBldmVudE5vZGVbJ2tleVRvUGFzcyddID0gW2ZpbHRlck9iamVjdC5zZXJ2ZXJfY29sdW1uXTtcbiAgICAgICAgbGV0IGFwaUNhbGxzID0gW107XG5cbiAgICAgICAgdmlldy5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaChjb250ZW50VmlldyA9PiB7XG4gICAgICAgICAgICBsZXQgYXBwbGllZEZpbHRlcnMgPSB0aGlzLmdldFNldE9wZXJhdG9yRmlsdGVyKGV2ZW50Tm9kZSwgdGhpcy5zdGF0ZURhdGFTb3VyY2UuZ2V0KGNvbnRlbnRWaWV3LnZpZXdJZCkpO1xuICAgICAgICAgICAgbGV0IGZvdW5kID0gKHRoaXMuZGF0YVNldE1vZGFsIGFzIGFueVtdKS5maW5kKGQgPT4gZC5kYXRhc2V0SWQgPT09IGNvbnRlbnRWaWV3LmRhdGFzZXRJZCk7XG4gICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICBhcGlDYWxscy5wdXNoKHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0RGF0YUZyb21EYXRhU2V0KGZvdW5kLCBjb250ZW50Vmlldy5kYXRhc2V0SWQsIGFwcGxpZWRGaWx0ZXJzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB2aWV3Q29uZmlnLm5vZGVQcm9wZXJ0aWVzWydkaXNwbGF5J10gPSBmYWxzZTtcbiAgICAgICAgY29uc3QgcHJlZml4ZWRJZCA9IGBpZC0ke3ZpZXdDb25maWcuaWR9YDtcbiAgICAgICAgY29uc3QgZWxlbWVudFRvSGlkZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3ByZWZpeGVkSWR9YCkgYXMgSFRNTEVsZW1lbnQ7IC8vIENhc3QgdG8gSFRNTEVsZW1lbnRcbiAgICAgICAgaWYgKGVsZW1lbnRUb0hpZGUpIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0hpZGUucmVtb3ZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBQcm9taXNlLmFsbChhcGlDYWxscykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldFVuaXF1ZURhdGFTZXRPYmplY3QoKTtcblxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2UgPSB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZS5maWx0ZXIoZSA9PiBlLmRpc3BsYXlLZXkgIT09IHZpZXdDb25maWcua2V5VG9QYXNzKTtcblxuICAgICAgICAgICAgdmlldy5ub2RlUHJvcGVydGllc1snZGlzcGxheSddID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIHZpZXcubm9kZVByb3BlcnRpZXNbJ3dpZGdldFBhcmFtcyddID0gZXZlbnQudGFibGVUaXRsZTtcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeGVkSWQgPSBgaWQtJHt2aWV3LmlkfWA7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7cHJlZml4ZWRJZH1gKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMubG9hZFNpbmdsZVdpZGdldE5vZGUodmlldywgdGhpcy5tYWluUGFnZURpdkVsZW1lbnQsIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKHRoaXMubWFpblBhZ2VEaXZFbGVtZW50KTtcbiAgICAgICAgICAgIH0sIDIwMCk7XG4gICAgICAgICAgICBsZXQgcGFyYW1zID0ge307XG4gICAgICAgICAgICBwYXJhbXNbZmlsdGVyT2JqZWN0LnNlcnZlcl9jb2x1bW5dID0gaW5wdXRWYWx1ZTtcbiAgICAgICAgICAgIGxldCBuYXZpZ2F0aW9uOiBOYXZpZ2F0aW9uRXh0cmFzID0ge1xuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiBwYXJhbXMsXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogXCJtZXJnZVwiXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIG5hdmlnYXRpb24pO1xuICAgICAgICB9KTtcbiAgICB9XG5cblxuICAgIHN1Ym1pdEZpbHRlcigpIHtcbiAgICAgICAgbGV0IHZpZXcgPSB0aGlzLm5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZS52aWV3Q29uZmlnO1xuICAgICAgICAvLyBsZXQgY2FsX3ZhbHVlID0gKHBhcnNlRmxvYXQoc2VhcmNoVGVybSkgLyAxMDApXG4gICAgICAgIGxldCBhcGlDYWxscyA9IFtdO1xuICAgICAgICB0aGlzLmhhdmluZ0RhdGFPYmplY3QgPSB0aGlzLm5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZS5oYXZpbmdDb25maWcuZmlsdGVyKHZhbHVlID0+IHZhbHVlLnZhbHVlICE9PSBcIlwiKTtcbiAgICAgICAgdmlldy5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaChjb250ZW50VmlldyA9PiB7XG4gICAgICAgICAgICBsZXQgYXBwbGllZEZpbHRlcnMgPSB0aGlzLnN0YXRlRGF0YVNvdXJjZS5nZXQoY29udGVudFZpZXcudmlld0lkKTtcbiAgICAgICAgICAgIGxldCBmb3VuZCA9ICh0aGlzLmRhdGFTZXRNb2RhbCBhcyBhbnlbXSkuZmluZChkID0+IGQuZGF0YXNldElkID09PSBjb250ZW50Vmlldy5kYXRhc2V0SWQpO1xuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgYXBpQ2FsbHMucHVzaCh0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldERhdGFGcm9tRGF0YVNldChmb3VuZCwgY29udGVudFZpZXcuZGF0YXNldElkLCBhcHBsaWVkRmlsdGVycy5maWx0ZXJzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBQcm9taXNlLmFsbChhcGlDYWxscykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldFVuaXF1ZURhdGFTZXRPYmplY3QoKTtcblxuICAgICAgICAgICAgdGhpcy5ub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2Uudmlld0NvbmZpZy5ub2RlUHJvcGVydGllc1snZGlzcGxheSddID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBwcmVmaXhlZElkID0gYGlkLSR7dGhpcy5ub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2Uudmlld0NvbmZpZy5pZH1gO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudFRvSGlkZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3ByZWZpeGVkSWR9YCkgYXMgSFRNTEVsZW1lbnQ7IC8vIENhc3QgdG8gSFRNTEVsZW1lbnRcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9IaWRlKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudFRvSGlkZS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2UgPSB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZS5maWx0ZXIoZSA9PiBlLmRpc3BsYXlLZXkgIT09IHRoaXMubm9kZXByb3BlcnRpY2VGaWx0ZXJEYXRhU291cmNlLnZpZXdDb25maWcua2V5VG9QYXNzKTtcbiAgICAgICAgICAgIHRoaXMuaXNXaWRnZXRGaWx0ZXJzID0gZmFsc2U7XG4gICAgICAgICAgICB2aWV3Lm5vZGVQcm9wZXJ0aWVzWydkaXNwbGF5J10gPSB0cnVlO1xuICAgICAgICAgICAgLy8gdmlldy5ub2RlUHJvcGVydGllc1snd2lkZ2V0UGFyYW1zJ10gPSBldmVudC50YWJsZVRpdGxlO1xuICAgICAgICAgICAgLy8gY29uc3QgcHJlZml4ZWRJZCA9IGBpZC0ke3ZpZXcuaWR9YDtcbiAgICAgICAgICAgIC8vIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtwcmVmaXhlZElkfWApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5sb2FkU2luZ2xlV2lkZ2V0Tm9kZSh2aWV3LCB0aGlzLm1haW5QYWdlRGl2RWxlbWVudCwgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0KTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20odGhpcy5tYWluUGFnZURpdkVsZW1lbnQpO1xuICAgICAgICAgICAgfSwgMjAwKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICBnZXRXaWRnZXRGaWx0ZXJGb3JUZW1wbGF0ZSh2YWx1ZSkge1xuXG4gICAgICAgIGxldCBhcGlDYWxscyA9IFtdO1xuICAgICAgICBjb25zdCBkZWxldGVkVmlld0lkcyA9IFtdO1xuICAgICAgICB2YWx1ZS52aWV3Tm9kZXMuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBsZXQgd2lkZ2V0RmlsdGVyID0gdGhpcy5zdGF0ZURhdGFTb3VyY2UuZ2V0KGl0ZW0udmlld0lkKTtcbiAgICAgICAgICAgIGxldCBhcHBsaWVkRmlsdGVycyA9IHdpZGdldEZpbHRlci5maWx0ZXJzO1xuICAgICAgICAgICAgbGV0IGZvdW5kID0gKHRoaXMuZGF0YVNldE1vZGFsIGFzIGFueVtdKS5maW5kKGQgPT4gZC5kYXRhc2V0SWQgPT09IGl0ZW0uZGF0YXNldElkKTtcbiAgICAgICAgICAgIGRlbGV0ZWRWaWV3SWRzLnB1c2goaXRlbS52aWV3SWQpO1xuICAgICAgICAgICAgY29uc3QgaGF2aW5nID0gT2JqZWN0LmVudHJpZXModmFsdWUub3BlcmF0aW9uRmlsdGVyKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICAgICAgICAgICAgICBjb2x1bW5OYW1lOiBrZXksXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwiZmxvYXRcIixcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogXCJndGVcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgZm91bmQuY29uZmlnLnF1ZXJ5Q29uZmlnWydoYXZpbmdzJ10gPSBoYXZpbmc7XG4gICAgICAgICAgICAgICAgYXBpQ2FsbHMucHVzaCh0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldERhdGFGcm9tRGF0YVNldChmb3VuZCwgaXRlbS5kYXRhc2V0SWQsIGFwcGxpZWRGaWx0ZXJzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBQcm9taXNlLmFsbChhcGlDYWxscykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldFVuaXF1ZURhdGFTZXRPYmplY3QoKTtcbiAgICAgICAgICAgIC8vIHZhbHVlLnZpZXdOb2Rlcy5ub2RlUHJvcGVydGllc1snd2lkZ2V0UGFyYW1zJ10gPSBldmVudC50YWJsZVRpdGxlO1xuICAgICAgICAgICAgdGhpcy5sb2FkU2luZ2xlV2lkZ2V0Tm9kZSh2YWx1ZS52aWV3Tm9kZXMsIHRoaXMubWFpblBhZ2VEaXZFbGVtZW50LCB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSh0aGlzLm1haW5QYWdlRGl2RWxlbWVudCk7XG4gICAgICAgICAgICB9LCAyMDApO1xuXG4gICAgICAgIH0pO1xuICAgICAgICAvLyB9XG4gICAgfVxuXG4gICAgYXN5bmMgbG9hZERhdGFCeU9wZXJhdG9yKG9wTmFtZSkge1xuICAgICAgICBsZXQgZmlsdGVyID0ge29wZXJhdGlvbkZpbHRlcjoge3N0YXJ0RGF0ZTogXCJcIiwgZW5kRGF0ZTogXCJcIiwgb3BlcmF0b3Jfa2V5OiBcIlwifX07XG4gICAgICAgIGZpbHRlci5vcGVyYXRpb25GaWx0ZXJbJ3N0YXJ0RGF0ZSddID0gdGhpcy5kZWZhdWx0U3RhcnREYXRlO1xuICAgICAgICBmaWx0ZXIub3BlcmF0aW9uRmlsdGVyWydlbmREYXRlJ10gPSB0aGlzLmRlZmF1bHRFbmREYXRlO1xuICAgICAgICBmaWx0ZXIub3BlcmF0aW9uRmlsdGVyWydvcGVyYXRvcl9rZXknXSA9IG9wTmFtZTtcbiAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuXG4gICAgICAgIGxldCBuYXZpZ2F0aW9uOiBOYXZpZ2F0aW9uRXh0cmFzID0ge1xuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgICAgICAgICBcIm9wZXJhdG9yTmFtZVwiOiBvcE5hbWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiBcIm1lcmdlXCJcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIG5hdmlnYXRpb24pO1xuXG4gICAgICAgIC8vIHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnID0gW107XG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0UGFnZURhdGFTb3VyY2UodHJ1ZSk7XG4gICAgICAgIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCA9IHt9O1xuICAgICAgICBsZXQgYXBpQ2FsbHMgPSBbXTtcblxuICAgICAgICB0aGlzLmFsbFdpZGdldEJ5RGF0YXNldC5mb3JFYWNoKHZpZXcgPT4ge1xuICAgICAgICAgICAgdmlldy5kYXRhc2V0SWRzLmZvckVhY2goaWQgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBmb3VuZCA9ICh0aGlzLmRhdGFTZXRNb2RhbCBhcyBhbnlbXSkuZmluZChkID0+IGQuZGF0YXNldElkID09PSBpZC5kYXRhc2V0SWQpO1xuICAgICAgICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICBhcGlDYWxscy5wdXNoKHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0RGF0YUZyb21EYXRhU2V0KGZvdW5kLCBpZC5kYXRhc2V0SWQsIGZpbHRlcikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgUHJvbWlzZS5hbGwoYXBpQ2FsbHMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nbG9iYWxEZWZhdWx0RmlsdGVyID0gZmlsdGVyO1xuICAgICAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0gdGhpcy5kYXRhc2V0U2VydmljZS5nZXRVbmlxdWVEYXRhU2V0T2JqZWN0KCk7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZURpdkVsZW1lbnRzKHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIGFzeW5jIGdldENvbnRleHRGaWx0ZXJEYXRhKHZhbHVlKSB7XG5cbiAgICAgICAgbGV0IGZpbHRlciA9IHtvcGVyYXRpb25GaWx0ZXI6IHtzdGFydERhdGU6IFwiXCIsIGVuZERhdGU6IFwiXCJ9fTtcbiAgICAgICAgZmlsdGVyLm9wZXJhdGlvbkZpbHRlclsnc3RhcnREYXRlJ10gPSB0aGlzLmRlZmF1bHRTdGFydERhdGU7XG4gICAgICAgIGZpbHRlci5vcGVyYXRpb25GaWx0ZXJbJ2VuZERhdGUnXSA9IHRoaXMuZGVmYXVsdEVuZERhdGU7XG4gICAgICAgIGZpbHRlci5vcGVyYXRpb25GaWx0ZXJbdmFsdWUub3BlcmF0b3JOYW1lXSA9IHRoaXMucGFyc2VJbnB1dCh2YWx1ZS5kZWZhdWx0RmlsdGVyVmFsdWUpO1xuICAgICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IHRydWU7XG4gICAgICAgIGxldCBvYmogPSB7fTtcbiAgICAgICAgb2JqW3ZhbHVlLm9wZXJhdG9yTmFtZV0gPSB2YWx1ZS5kZWZhdWx0RmlsdGVyVmFsdWU7XG4gICAgICAgIGxldCBuYXZpZ2F0aW9uOiBOYXZpZ2F0aW9uRXh0cmFzID0ge1xuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IG9iaixcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IFwibWVyZ2VcIlxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwgbmF2aWdhdGlvbik7XG5cbiAgICAgICAgLy8gdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcgPSBbXTtcbiAgICAgICAgYXdhaXQgdGhpcy5nZXRQYWdlRGF0YVNvdXJjZSh0cnVlKTtcbiAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0ge307XG4gICAgICAgIGxldCBhcGlDYWxscyA9IFtdO1xuXG4gICAgICAgIHRoaXMuYWxsV2lkZ2V0QnlEYXRhc2V0LmZvckVhY2godmlldyA9PiB7XG4gICAgICAgICAgICB2aWV3LmRhdGFzZXRJZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGZvdW5kID0gKHRoaXMuZGF0YVNldE1vZGFsIGFzIGFueVtdKS5maW5kKGQgPT4gZC5kYXRhc2V0SWQgPT09IGlkLmRhdGFzZXRJZCk7XG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGFwaUNhbGxzLnB1c2godGhpcy5kYXRhc2V0U2VydmljZS5nZXREYXRhRnJvbURhdGFTZXQoZm91bmQsIGlkLmRhdGFzZXRJZCwgZmlsdGVyKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBQcm9taXNlLmFsbChhcGlDYWxscykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdsb2JhbERlZmF1bHRGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgICAgICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldFVuaXF1ZURhdGFTZXRPYmplY3QoKTtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRGl2RWxlbWVudHModGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0LCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHBhcnNlSW5wdXQoaW5wdXQpIHtcbiAgICAgICAgaW5wdXQgPSBpbnB1dC50cmltKCk7XG5cbiAgICAgICAgaWYgKGlucHV0LmluY2x1ZGVzKCcsJykpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5zcGxpdCgnLCcpLm1hcChpdGVtID0+IGl0ZW0udHJpbSgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgZ2V0RHJpbGxkb3duRGlzcGxheUJ5VXJsUGFyYW1zKGFsbF92aWV3cykge1xuICAgICAgICB0aGlzLmRlZmF1bHRWaWV3SWRzT25QYWdlUmVmcmVzaCA9IFtdO1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zO1xuICAgICAgICB0aGlzLmRlZmF1bHRWaWV3SWRzT25QYWdlUmVmcmVzaCA9IChwYXJhbXNbJ3ZpZXdzJ10gJiYgcGFyYW1zWyd2aWV3cyddICE9PSBcIlwiKSA/IEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KHBhcmFtc1sndmlld3MnXSkpIDogW107XG4gICAgICAgIGFsbF92aWV3cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgZm9yIChsZXQgZW50cnkgb2YgZWxlbWVudC53aWRnZXROb2RlKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNob3VsZERpc3BsYXkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBlbnRyeS5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaCh2aWV3ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFZpZXdJZHNPblBhZ2VSZWZyZXNoLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm91bmRPYmplY3QgPSB0aGlzLmRlZmF1bHRWaWV3SWRzT25QYWdlUmVmcmVzaC5maW5kKHZhbCA9PiB2YWwudmlld0lkID09PSB2aWV3LnZpZXdJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmRPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGREaXNwbGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGREaXNwbGF5KSB7XG4gICAgICAgICAgICAgICAgICAgIGVudHJ5Lm5vZGVQcm9wZXJ0aWVzLmRpc3BsYXkgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuXG4gICAgfVxuXG5cbiAgICBnZXRGaWx0ZXJzRm9yUXVlcnlQYXJhbXMob3BlcmF0b3JzLCBmaWx0ZXJzLCB2aWV3UGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IG9wZXJhdGlvbkZpbHRlciA9IG9wZXJhdG9ycy5vcGVyYXRpb25GaWx0ZXIgfHwge307XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYXJhbXMgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zO1xuXG4gICAgICAgIGxldCBjdXJyZW50Vmlld3M6IGFueVtdID0gW107XG4gICAgICAgIGlmIChjdXJyZW50UGFyYW1zWyd2aWV3cyddKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRWaWV3cyA9IEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KGN1cnJlbnRQYXJhbXNbJ3ZpZXdzJ10pKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiSW52YWxpZCB2aWV3cyBwYXJhbVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbHRlckRhdGE6IGFueSA9IHt2aWV3SWQ6IHZpZXdQYXJhbXMudmlld0lkfTtcblxuICAgICAgICBmaWx0ZXJzLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsS2V5ID0gZmlsdGVyLmxvY2FsQ29sdW1uO1xuICAgICAgICAgICAgY29uc3Qgc2VydmVyS2V5ID0gZmlsdGVyLnNlcnZlckNvbHVtbjtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IG9wZXJhdGlvbkZpbHRlcltsb2NhbEtleV07XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVyRGF0YVtzZXJ2ZXJLZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSBjdXJyZW50Vmlld3MuZmluZEluZGV4KHYgPT4gdi52aWV3SWQgPT09IHZpZXdQYXJhbXMudmlld0lkKTtcblxuICAgICAgICBpZiAoZXhpc3RpbmdJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGN1cnJlbnRWaWV3c1tleGlzdGluZ0luZGV4XSA9IGZpbHRlckRhdGE7XG4gICAgICAgICAgICBjdXJyZW50Vmlld3MgPSBjdXJyZW50Vmlld3Muc2xpY2UoMCwgZXhpc3RpbmdJbmRleCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3VycmVudFZpZXdzLnB1c2goZmlsdGVyRGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbmNvZGVkVmlld3MgPSBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoY3VycmVudFZpZXdzKSk7XG5cbiAgICAgICAgY29uc3QgbWVyZ2VkUGFyYW1zID0ge1xuICAgICAgICAgICAgLi4uY3VycmVudFBhcmFtcyxcbiAgICAgICAgICAgIHZpZXdzOiBlbmNvZGVkVmlld3NcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBuYXZpZ2F0aW9uOiBOYXZpZ2F0aW9uRXh0cmFzID0ge1xuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IG1lcmdlZFBhcmFtcyxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZSdcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwgbmF2aWdhdGlvbik7XG4gICAgfVxuXG4gICAgZ2V0RHJpbGRvd25GaWx0ZXIoZHJpbGRvd25GaWx0ZXIsIGRlZmF1bHRGaWx0ZXIpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWREYXRlRmllbGRzID0gWydyZWNvcmREYXRlJywgJ3JlY29yZF9kYXRlJywgJ2V2ZW50RGF0ZScsICdldmVudF9kYXRlJ107XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGVmYXVsdEZpbHRlcikpO1xuICAgICAgICBjb25zdCB7dmlld0lkLCAuLi5maWx0ZXJlZERyaWxsZG93bn0gPSBkcmlsZG93bkZpbHRlcjtcbiAgICAgICAgbGV0IGRhdGVWYWx1ZSA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGV4cGVjdGVkRGF0ZUZpZWxkcykge1xuICAgICAgICAgICAgaWYgKGZpbHRlcmVkRHJpbGxkb3duW2tleV0pIHtcbiAgICAgICAgICAgICAgICBkYXRlVmFsdWUgPSBmaWx0ZXJlZERyaWxsZG93bltrZXldO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRlVmFsdWUpIHtcbiAgICAgICAgICAgIHJlc3VsdC5vcGVyYXRpb25GaWx0ZXIuc3RhcnREYXRlID0gZGF0ZVZhbHVlO1xuICAgICAgICAgICAgcmVzdWx0Lm9wZXJhdGlvbkZpbHRlci5lbmREYXRlID0gZGF0ZVZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGZpbHRlcmVkRHJpbGxkb3duKSB7XG4gICAgICAgICAgICBpZiAoIWV4cGVjdGVkRGF0ZUZpZWxkcy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0Lm9wZXJhdGlvbkZpbHRlcltrZXldID0gZmlsdGVyZWREcmlsbGRvd25ba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICB9XG5cblxuICAgIGdldFRpdGxlUGFyYW1zKGl0ZW1zKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcblxuICAgICAgICBpdGVtcy5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kT2JqZWN0ID0gdGhpcy5kZWZhdWx0Vmlld0lkc09uUGFnZVJlZnJlc2guZmluZCh2YWwgPT4gdmFsLnZpZXdJZCA9PT0gZWxlbWVudC52aWV3SWQpO1xuICAgICAgICAgICAgaWYgKGZvdW5kT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmVudHJpZXMoZm91bmRPYmplY3QpXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKFtrZXldKSA9PiBrZXkgIT09ICd2aWV3SWQnKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnZlcnQga2V5IHRvIFRpdGxlIENhc2Ugd2l0aCBzcGFjZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEtleSA9IGtleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9fL2csICcgJykgICAgICAgICAgICAgICAgIC8vIHJlcGxhY2UgdW5kZXJzY29yZXMgd2l0aCBzcGFjZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxiXFx3L2csIGNoYXIgPT4gY2hhci50b1VwcGVyQ2FzZSgpKTsgLy8gY2FwaXRhbGl6ZSBlYWNoIHdvcmRcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtmb3JtYXR0ZWRLZXl9ID0gJHt2YWx1ZX1gO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuam9pbignIHwgJyk7XG5cbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goYHwgJHtyZXN1bHR9IGApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0cy5qb2luKCdcXG4nKTsgLy8gb3Igd2hhdGV2ZXIgc2VwYXJhdG9yIHlvdSBwcmVmZXIgYmV0d2VlbiBtdWx0aXBsZSByZXN1bHRzXG4gICAgfVxuXG5cbn1cbiIsIjxhcHAtbG9hZGluZyAqbmdJZj1cImxvYWRpbmdNb2RhbFwiPjwvYXBwLWxvYWRpbmc+XG5cbjxkaXYgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgXCIgI2R5bmFtaWNDb250YWluZXI+PC9kaXY+XG48L2Rpdj5cblxuPGR4LXBvcHVwIFsodmlzaWJsZSldPVwiaXNXaWRnZXRGaWx0ZXJzXCIgW2Nsb3NlT25PdXRzaWRlQ2xpY2tdPVwiZmFsc2VcIiBbZHJhZ0VuYWJsZWRdPVwiZmFsc2VcIiBbd2lkdGhdPVwiODAwXCIgW2hlaWdodF09XCI0MDBcIlxuICAgIFtzaG93VGl0bGVdPVwidHJ1ZVwiIGNsYXNzPVwicG9wdXBcIiB0aXRsZT1cIkRhdGFzZXQgRmlsdGVyXCI+XG4gICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBkYXRhIG9mICdjb250ZW50J1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxuICAgICAgICAgICAgPGR4LXNjcm9sbC12aWV3IFt3aWR0aF09XCInMTAwJSdcIiBbaGVpZ2h0XT1cIic4NSUnXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2UuaGF2aW5nQ29uZmlnOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IG15LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJpdGVtLmNvbHVtbk5hbWVcIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggW2l0ZW1zXT1cIlsnZ2V0JywnbGV0J11cIiBbKG5nTW9kZWwpXT1cIml0ZW0ub3BlcmF0b3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIk9wZXJhdG9yXCI+PC9keC1zZWxlY3QtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwiaXRlbS52YWx1ZVwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwvZHgtc2Nyb2xsLXZpZXc+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZCBteC0xIGZsZXgtZ3JvdyBib3JkZXItdFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX3N1Y2Nlc3NfbWR9fSBjdXJzb3ItcG9pbnRlciBtdC0yXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN1Ym1pdEZpbHRlcigpXCI+U3VibWl0PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cblxuICAgIDwvZGl2PlxuPC9keC1wb3B1cD5cbjxkeC1wb3B1cCBbKHZpc2libGUpXT1cImlzUG9wdXBWaWV3XCIgW2Nsb3NlT25PdXRzaWRlQ2xpY2tdPVwiZmFsc2VcIiBbZHJhZ0VuYWJsZWRdPVwiZmFsc2VcIiBbd2lkdGhdPVwiMTAwMFwiIFtoZWlnaHRdPVwiJ2F1dG8nXCJcbiAgICBbc2hvd1RpdGxlXT1cInRydWVcIiBjbGFzcz1cInBvcHVwXCIgdGl0bGU9XCJQb3B1cCBWaWV3XCI+XG4gICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBkYXRhIG9mICdjb250ZW50J1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICA8YXBwLWR5bmFtaWMtd2lkZ2V0IFttb2RhbENvbmZpZ3NdPVwibW9kYWxDb25maWdzXCIgIFtjb250ZXh0TWVudURhdGFTb3VyY2VdPVwiY29udGV4dE1lbnVEYXRhU291cmNlXCI+XG4gICAgICAgICAgICA8L2FwcC1keW5hbWljLXdpZGdldD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2R4LXBvcHVwPiJdfQ==
|
|
1290
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3BpLXdpdGgtZGF0YXNldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL3RlbXBsYXRlLW1vZHVsZS9rcGlXaXRoU2luZ2xlTGF5b3V0L2twaS13aXRoLWRhdGFzZXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi90ZW1wbGF0ZS1tb2R1bGUva3BpV2l0aFNpbmdsZUxheW91dC9rcGktd2l0aC1kYXRhc2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCxTQUFTLEVBUVQsU0FBUyxFQUVULGdCQUFnQixFQUNuQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLE1BQU0sTUFBTSw0Q0FBNEMsQ0FBQztBQUVoRSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRzlCLE9BQU8sRUFDSCwwQkFBMEIsRUFDN0IsTUFBTSxtRkFBbUYsQ0FBQztBQUMzRixPQUFPLEVBQ0gsMkJBQTJCLEVBQzlCLE1BQU0scUZBQXFGLENBQUM7QUFDN0YsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0seUVBQXlFLENBQUM7QUFDbEgsT0FBTyxFQUNILGlDQUFpQyxFQUNwQyxNQUFNLG1HQUFtRyxDQUFDO0FBQzNHLE9BQU8sRUFDSCw2QkFBNkIsRUFDaEMsTUFBTSwyRkFBMkYsQ0FBQztBQUNuRyxPQUFPLEVBQ0gsa0NBQWtDLEVBQ3JDLE1BQU0scUdBQXFHLENBQUM7QUFDN0csT0FBTyxFQUNILGtDQUFrQyxFQUNyQyxNQUFNLHFHQUFxRyxDQUFDO0FBQzdHLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDJFQUEyRSxDQUFDO0FBQ2pILE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHVFQUF1RSxDQUFD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QkFFakIsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLE1BQU0sR0FBRyxDQUFDLENBQUM7YUFDaEM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDOzt3SEF4L0NRLDJCQUEyQjs0R0FBM0IsMkJBQTJCLCtLQVlXLGdCQUFnQixvR0FFaEMsZ0JBQWdCLHVSQ3JFbkQsZ2pFQTRDVzsyRkRXRSwyQkFBMkI7a0JBTHZDLFNBQVM7K0JBQ0ksc0JBQXNCO3dlQWlCaEMseUJBQXlCO3NCQUR4QixTQUFTO3VCQUFDLDJCQUEyQixFQUFFLEVBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFDO2dCQUdoRSxZQUFZO3NCQURYLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFDO2dCQUVELGdCQUFnQjtzQkFBOUQsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBQ1Usd0JBQXdCO3NCQUE5RSxTQUFTO3VCQUFDLDBCQUEwQixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIENvbXBvbmVudFJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uRXh0cmFzLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgbW9tZW50IGZyb20gJy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvbW9tZW50LWhlbHBlcic7XG5pbXBvcnQge1RvYXN0clNlcnZpY2V9IGZyb20gJ25neC10b2FzdHInO1xuaW1wb3J0IHtmb3JrSm9pbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge3Rha2UsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtDb21tb25TZXJ2aWNlfSBmcm9tICcuLi8uLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEdhbW1hQWR2YW5jZUNoYXJ0Q29tcG9uZW50XG59IGZyb20gJy4uLy4uL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtYWR2YW5jZS1jaGFydC9nYW1tYS1hZHZhbmNlLWNoYXJ0LmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIEdhbW1hVG9kYXlQcmV2aW91c0NvbXBvbmVudFxufSBmcm9tICcuLi8uLi9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2dhbW1hLXRvZGF5LXByZXZpb3VzL2dhbW1hLXRvZGF5LXByZXZpb3VzLmNvbXBvbmVudCc7XG5pbXBvcnQge0FwcEFkdmFuY2VIZWFkZXJDb21wb25lbnR9IGZyb20gJy4uLy4uL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvYXBwLWFkdmFuY2UtaGVhZGVyL2FwcC1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgR2FtbWFUYWJsZVdpdGhQZXJjZW50YWdlQ29tcG9uZW50XG59IGZyb20gJy4uLy4uL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtdGFibGUtd2l0aC1wZXJjZW50YWdlL2dhbW1hLXRhYmxlLXdpdGgtcGVyY2VudGFnZS5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgICBHYW1tU2luZ2xlTnVtYmVyQ2FyZENvbXBvbmVudFxufSBmcm9tICcuLi8uLi9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2dhbW0tc2luZ2xlLW51bWJlci1jYXJkL2dhbW0tc2luZ2xlLW51bWJlci1jYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIEdhbW1hQWR2YW5jZU9wZXJhdG9yVGFibGVDb21wb25lbnRcbn0gZnJvbSAnLi4vLi4vc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1hZHZhbmNlLW9wZXJhdG9yLXRhYmxlL2dhbW1hLWFkdmFuY2Utb3BlcmF0b3ItdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgQWR2YW5jZVdpZGdldEhlYWRlckZpbHRlckNvbXBvbmVudFxufSBmcm9tICcuLi8uLi9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2FkdmFuY2Utd2lkZ2V0LWhlYWRlci1maWx0ZXIvYWR2YW5jZS13aWRnZXQtaGVhZGVyLWZpbHRlci5jb21wb25lbnQnO1xuaW1wb3J0IHtHYW1tYUdlb0NoYXJ0Q29tcG9uZW50fSBmcm9tICcuLi8uLi9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2dhbW1hLWdlby1jaGFydC9nYW1tYS1nZW8tY2hhcnQuY29tcG9uZW50JztcbmltcG9ydCB7R2FtbWFIZWF0Q2hhcnRDb21wb25lbnR9IGZyb20gJy4uLy4uL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtaGVhdG1hcC9nYW1tYS1oZWF0bWFwLmNvbXBvbmVudCc7XG5pbXBvcnQge0twaVdpdGhTaW5nbGVMYXlvdXRTZXJ2aWNlfSBmcm9tICcuL2twaS1zaW5nbGUtbGF5b3V0LnNlcnZpY2UnO1xuaW1wb3J0IHtTaW5nbGVMYXlvdXRBcHBsaWNhdGlvbkRhdHNzZXRzQ2FsbH0gZnJvbSAnLi9zaW5nbGUtbGF5b3V0LWRhdGFzZXQtY2FsbC5zZXJ2aWNlJztcbmltcG9ydCB7QXBwbGljYXRpb25DaGF0QXBpQ2FsbFNlcnZpY2V9IGZyb20gJy4vYXBwbGljYXRpb24tY2hhdC1hcGktY2FsbC5zZXJ2aWNlJztcbmltcG9ydCB7QXBwU2luZ2xlTGF5b3V0TG9jYWxTdG9yYWdlfSBmcm9tICcuL3NpbmdsZS50b2tlblN0b3JhZ2Uuc2VydmNlJztcbmltcG9ydCB7UGVybWlzc2lvbkhlbHBlcn0gZnJvbSAnLi4vLi4vc2hhcmVkL3Blcm1pc3Npb24taGVscGVyJztcblxuLy8gaW1wb3J0IHsgQXBwbGljYXRpb25DaGF0QXBpQ2FsbFNlcnZpY2UgfSBmcm9tICcuL2FwcGxpY2F0aW9uLWNoYXQtYXBpLWNhbGwuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLWtwaS13aXRoLWRhdGFzZXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9rcGktd2l0aC1kYXRhc2V0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9rcGktd2l0aC1kYXRhc2V0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgS3BpV2l0aERhdGFTZXRUZXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBkYXNoYm9yZF9jb250YWluZXI6IGFueSA9IFtdO1xuICAgIHNlbGVjdGVkX3dpZHRoOiBhbnk7XG4gICAgd2lkZ2V0X3dpZHRoID0gWyd3LWZ1bGwnLCAndy0xLzInLCAndy0xLzMnLCAndy0xLzQnLCAndy0xLzUnLCAndy0xLzYnXVxuICAgIGxvYWRpbmdNb2RhbDogYm9vbGVhbjtcbiAgICBwYWdlX3RpdGxlID0gJ0Rhc2hib2FyZCc7XG4gICAgZGVmYXVsdFN0YXJ0RGF0ZTtcbiAgICBkZWZhdWx0RW5kRGF0ZTtcbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RvclxuICAgICAqL1xuXG4gICAgQFZpZXdDaGlsZCgnZHluYW1pY0NvbXBvbmVudENvbnRhaW5lcicsIHtyZWFkOiBWaWV3Q29udGFpbmVyUmVmfSlcbiAgICBkeW5hbWljQ29tcG9uZW50Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xuICAgIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicsIHtyZWFkOiBWaWV3Q29udGFpbmVyUmVmfSlcbiAgICBjb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWY7XG4gICAgQFZpZXdDaGlsZCgnZHluYW1pY0NvbnRhaW5lcicsIHtzdGF0aWM6IHRydWV9KSBkeW5hbWljQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ2R5bmFtaWNDb250YWluZXJGb3JQb3B1cCcsIHtzdGF0aWM6IHRydWV9KSBkeW5hbWljQ29udGFpbmVyRm9yUG9wdXA6IEVsZW1lbnRSZWY7XG5cbiAgICBkeW5hbWljQ29tcG9uZW50UmVmczogQ29tcG9uZW50UmVmPGFueT5bXSA9IFtdO1xuICAgIC8vIGR5bmFtaWNDb21wb25lbnRSZWZzOiBDb21wb25lbnRSZWY8YW55PltdID0gW107XG5cbiAgICBDb21wUmVmczogQ29tcG9uZW50UmVmPGFueT47XG5cbiAgICBjb21wb25lbnRDbGFzc01hcCA9IHtcbiAgICAgICAgR2FtbWFBZHZhbmNlQ2hhcnRDb21wb25lbnQsXG4gICAgICAgIEdhbW1hVG9kYXlQcmV2aW91c0NvbXBvbmVudCxcbiAgICAgICAgQXBwQWR2YW5jZUhlYWRlckNvbXBvbmVudCxcbiAgICAgICAgR2FtbWFUYWJsZVdpdGhQZXJjZW50YWdlQ29tcG9uZW50LFxuICAgICAgICBHYW1tU2luZ2xlTnVtYmVyQ2FyZENvbXBvbmVudCxcbiAgICAgICAgR2FtbWFBZHZhbmNlT3BlcmF0b3JUYWJsZUNvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZVdpZGdldEhlYWRlckZpbHRlckNvbXBvbmVudCxcbiAgICAgICAgR2FtbWFHZW9DaGFydENvbXBvbmVudCxcbiAgICAgICAgR2FtbWFIZWF0Q2hhcnRDb21wb25lbnRcbiAgICB9O1xuICAgIGRhdGFTb3VyY2VNYXRhRGF0YTogYW55ID0gW107XG4gICAgcXVlcnlUeXBlID0gXCJtb25nb1wiO1xuICAgIGRhdGFTZXRNb2RhbDogYW55ID0gW107XG4gICAgY29tcG9uZW50Q29uZmlnRGF0YVNvdXJjZTogYW55ID0gW107XG4gICAgc2VsZXNjZWREYXRhU291cmNlOiBhbnk7XG4gICAgZGF0YVNvdXJjZU1vZGFsOiBhbnkgPSB7fTtcbiAgICBpc0Rhc2hCb2FyZENvbnRlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHNlbGVjdGVkVmlld0Zvcm1Db21wb25lbnQ6IGFueSA9IHt9O1xuICAgIGFkZGVkd2lkR2V0Q29uZmlnID0ge1xuICAgICAgICBcImRpc3BsYXlcIjogdHJ1ZSxcbiAgICAgICAgXCJ3aWRnZXRUaXRsZVwiOiBcIlwiLFxuICAgICAgICBcIndpZHRoXCI6IFwiXCIsXG4gICAgICAgIFwiaGVpZ2h0XCI6IFwiXCJcbiAgICB9XG5cblxuICAgIGRhc2hCb2FyZFdpZGdldENvbmZpZzogYW55ID0gW107XG4gICAgaXNXaWRnZXRDcmVhdGlvbkNvbnRlbnQ6IGJvb2xlYW47XG4gICAgc2VsZWN0ZWRXaWR0aDogYW55O1xuICAgIHNlbGVjdGVkSGVpZ2h0OiBhbnk7XG4gICAgbmV3V2lkZ2V0SW5kZXg6IGFueTtcbiAgICBzZWxlY3RlZEluZGV4T2JqRm9yQ2hhcnQ6IGFueSA9IHt9O1xuICAgIHNlbGVjdGVkQ29udGFpbmVyT2JqZWN0Rm9yQ2hhcnQ6IGFueSA9IHt9O1xuICAgIGRhdGFTZXR0YWJsZURhdGFTb3VyY2U6IGFueTtcbiAgICB1bmlxdWVEYXRhU2V0T2JqZWN0ID0ge307XG5cbiAgICBpc0Rhc2hCb2FyZENvbnRlbnRUeXBlVmlldzogYm9vbGVhbiA9IHRydWU7XG4gICAgZmlsdGVyczogYW55O1xuICAgIGFsbFdpZGdldEJ5RGF0YXNldCA9IFtdO1xuICAgIHBhZ2VUaXRsZTogYW55O1xuICAgIHN0YXRlRGF0YVNvdXJjZSA9IG5ldyBNYXAoKTtcbiAgICBtYWluUGFnZURpdkVsZW1lbnQ6IGFueTtcbiAgICBjb250ZXh0TWVudURhdGFTb3VyY2U6IGFueSA9IFtdO1xuICAgIGhhdmluZ0RhdGFPYmplY3Q6IGFueSA9IHt9O1xuICAgIGlzV2lkZ2V0RmlsdGVyczogYm9vbGVhbjtcbiAgICBub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2U6IGFueTtcbiAgICBnbG9iYWxEZWZhdWx0RmlsdGVyOiBhbnkgPSB7fTtcbiAgICBwYWdlSWQ6IGFueTtcblxuICAgIGtwaV9icmVhZGNydW1ic19jb250YWluZXI6IGFueTtcbiAgICBvcGVyYXRvck5hbWU6IGFueTtcblxuICAgIGRlZmF1bHRWaWV3SWRzOiBhbnkgPSBbXTtcbiAgICBkZWZhdWx0Vmlld0lkc09uUGFnZVJlZnJlc2g6IGFueSA9IFtdO1xuICAgIGlzUG9wdXBWaWV3OiBib29sZWFuO1xuICAgIG1vZGFsQ29uZmlnczogYW55O1xuICAgIGRlZmF1bHRNYXRjaGVkRmlsdGVycyA9IHtvcGVyYXRpb25GaWx0ZXI6IHtzdGFydERhdGU6IFwiXCIsIGVuZERhdGU6IFwiXCJ9fTtcbiAgICBpc0RlZmF1bHRGaWx0ZXJQYXJhbXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHZpZXdQYXJhbXM6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICAgICAgcHJpdmF0ZSBzZXJ2aWNlOiBLcGlXaXRoU2luZ2xlTGF5b3V0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgZGF0YXNldFNlcnZpY2U6IFNpbmdsZUxheW91dEFwcGxpY2F0aW9uRGF0c3NldHNDYWxsLFxuICAgICAgICBwcml2YXRlIGNoYXRBcGlTZXJ2aWNlOiBBcHBsaWNhdGlvbkNoYXRBcGlDYWxsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzdG9yYWdlOiBBcHBTaW5nbGVMYXlvdXRMb2NhbFN0b3JhZ2UsXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBwZXJtaXNzaW9uSGVscGVyOiBQZXJtaXNzaW9uSGVscGVyXG4gICAgKSB7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VydmljZS5nZXRsaXN0S3BpQnJvd3NlcigpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiAoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMua3BpX2JyZWFkY3J1bWJzX2NvbnRhaW5lciA9IGRhdGE7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuXG4gICAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wYWdlSWQgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zWydwYWdlSWQnXTtcbiAgICAgICAgY29uc3Qge3BhZ2VJZH0gPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zO1xuICAgICAgICBpZiAodGhpcy5wYWdlSWQpIHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHtwYWdlSWR9LFxuICAgICAgICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdldFBhZ2VEYXRhU291cmNlKGZhbHNlKTtcblxuICAgIH1cblxuICAgIGFzeW5jIGdldEZpbHRlcnNGb3JUZW1wbGF0ZShmaWx0ZXIpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJzID0gZmlsdGVyO1xuICAgICAgICAvLyB0aGlzLmRlZmF1bHRTdGFydERhdGUgPSBmaWx0ZXIuc3RhcnREYXRlO1xuICAgICAgICAvLyB0aGlzLmRlZmF1bHRFbmREYXRlID0gZmlsdGVyLmVuZERhdGU7XG4gICAgICAgIGZpbHRlci5vcGVyYXRpb25GaWx0ZXJbJ3N0YXJ0RGF0ZSddID0gZmlsdGVyLnN0YXJ0RGF0ZTtcbiAgICAgICAgZmlsdGVyLm9wZXJhdGlvbkZpbHRlclsnZW5kRGF0ZSddID0gZmlsdGVyLmVuZERhdGU7XG5cbiAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0UGFnZURhdGFTb3VyY2UodHJ1ZSk7XG5cbiAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0ge307XG4gICAgICAgIGxldCBhcGlDYWxscyA9IFtdO1xuXG4gICAgICAgIHRoaXMuYWxsV2lkZ2V0QnlEYXRhc2V0LmZvckVhY2godmlldyA9PiB7XG4gICAgICAgICAgICB2aWV3LmRhdGFzZXRJZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZpZXcud2lkZ2V0SWQgPT0gZmlsdGVyLmZpbHRlck9iamVjdHMud2lkZ2V0SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZvdW5kID0gKHRoaXMuZGF0YVNldE1vZGFsIGFzIGFueVtdKS5maW5kKGQgPT4gZC5kYXRhc2V0SWQgPT09IGlkKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHdpZGdldEZpbHRlciA9IHRoaXMuZ2V0V2lkZ2V0RmlsdGVySXRlbXMoZmlsdGVyLmZpbHRlck9iamVjdHMuZmlsdGVycy5maWx0ZXJJdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgIHZpZXcuZmlsdGVycyA9IHdpZGdldEZpbHRlcjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcGlDYWxscy5wdXNoKHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0RGF0YUZyb21EYXRhU2V0KGZvdW5kLCBpZCwgd2lkZ2V0RmlsdGVyKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBQcm9taXNlLmFsbChhcGlDYWxscykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdsb2JhbERlZmF1bHRGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgICAgICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldFVuaXF1ZURhdGFTZXRPYmplY3QoKTtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRGl2RWxlbWVudHModGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0LCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICBnZXRXaWRnZXRGaWx0ZXJJdGVtcyh3aWRnZXRGaWx0ZXJEYXRhKSB7XG5cbiAgICAgICAgbGV0IGFwaUpzb25PYmplY3Q6IGFueSA9IHt9O1xuICAgICAgICBhcGlKc29uT2JqZWN0WydvcGVyYXRpb25GaWx0ZXInXSA9IHt9O1xuICAgICAgICB3aWRnZXRGaWx0ZXJEYXRhLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5maWx0ZXJUeXBlID09ICdkYXRlJyB8fCBlbGVtZW50LmZpbHRlclR5cGUgPT0gJ2RhdGV0aW1lJykge1xuICAgICAgICAgICAgICAgIGFwaUpzb25PYmplY3RbJ29wZXJhdGlvbkZpbHRlciddW2VsZW1lbnQuYXBpTmFtZV0gPSBtb21lbnQoZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWUpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBlbGVtZW50LmZpbHRlckRhdGFTb3VyY2VWYWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiBlbGVtZW50LmZpbHRlckRhdGFTb3VyY2VWYWx1ZSAhPT0gXCJcIikgfHxcbiAgICAgICAgICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkoZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWUpICYmIGVsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Lm9wZXJhdG9yTmFtZSAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZmlsdGVyVHlwZSA9PSBcImNvbnRlbnRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwaUpzb25PYmplY3RbJ29wZXJhdGlvbkZpbHRlciddW2VsZW1lbnQub3BlcmF0b3JOYW1lXSA9IGVsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZmlsdGVyVHlwZSA9PSBcInNpbmdsZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBpSnNvbk9iamVjdFsnb3BlcmF0aW9uRmlsdGVyJ11bZWxlbWVudC5vcGVyYXRvck5hbWVdID0gZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwaUpzb25PYmplY3RbJ29wZXJhdGlvbkZpbHRlciddW2VsZW1lbnQub3BlcmF0b3JOYW1lXSA9IEFycmF5LmlzQXJyYXkoZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWUpID8gZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWUgOiBbZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBpSnNvbk9iamVjdFtlbGVtZW50LmFwaU5hbWVdID0gZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBhcGlKc29uT2JqZWN0WydvcGVyYXRpb25GaWx0ZXInXSA9IG9wZXJhdGlvbkZpbHRlcjtcblxuXG4gICAgICAgIHJldHVybiBhcGlKc29uT2JqZWN0O1xuXG4gICAgfVxuXG4gICAgZ2V0UGFnZURhdGFTb3VyY2UoY29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLmdldEFwcFBhZ2VEZXRhaWxDb25maWcodGhpcy5wYWdlSWQpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0gZGF0YS5wZXJtaXNzaW9ucyA/IHRoaXMucGVybWlzc2lvbkhlbHBlci5nZXRQZXJtaXNzaW9uRW50aXR5KGRhdGEucGVybWlzc2lvbnMpIDogdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNQZXJtaXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmF2aWdhdGlvbjogTmF2aWdhdGlvbkV4dHJhcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ZWRVcmw6IHRoaXMucm91dGVyLnVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogXCJtZXJnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydhcHBzLzQwMSddLCBuYXZpZ2F0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZVRpdGxlID0gZGF0YS5wYWdlTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcgPSBkYXRhO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZ2V0RHJpbGxkb3duRGlzcGxheUJ5VXJsUGFyYW1zKGRhdGEud2lkZ2V0cyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0KSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QpLmxlbmd0aCAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVEaXZFbGVtZW50cyh0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QsIGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldENvbXBvbmVudENvbmZpZ1NldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcblxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ0Vycm9yJyk7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cblxuICAgIGdldENvbXBvbmVudENvbmZpZ1NldCgpIHtcbiAgICAgICAgbGV0IGRhdGFzZXQgPSB0aGlzLnNlcnZpY2UuZ2V0QXBwRGF0YXNldENvbmZpZ3MoKTtcbiAgICAgICAgbGV0IHZpZXdDb21wb25lbnQgPSB0aGlzLnNlcnZpY2UuZ2V0QXBwVmlld0NvbmZpZ3MoKTtcbiAgICAgICAgdGhpcy5kZWZhdWx0Vmlld0lkcyA9IFtdO1xuICAgICAgICBmb3JrSm9pbih7XG4gICAgICAgICAgICBkYXRhc2V0Q29uZmlnOiBkYXRhc2V0LFxuICAgICAgICAgICAgdmlld0NvbmZpZzogdmlld0NvbXBvbmVudFxuICAgICAgICB9KS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogKCh7ZGF0YXNldENvbmZpZywgdmlld0NvbmZpZ30pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudENvbmZpZ0RhdGFTb3VyY2UgPSB2aWV3Q29uZmlnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNldE1vZGFsID0gZGF0YXNldENvbmZpZztcbiAgICAgICAgICAgICAgICB0aGlzLmFsbFdpZGdldEJ5RGF0YXNldCA9IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHtwYWdlSWQsIHN0YXJ0RGF0ZSwgZW5kRGF0ZSwgaWQsIG5hbWUsIC4uLnBhcmFtc30gPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zO1xuICAgICAgICAgICAgICAgIGxldCBkZWZhdWx0RmlsdGVycyA9IHtvcGVyYXRpb25GaWx0ZXI6IHtzdGFydERhdGU6IFwiXCIsIGVuZERhdGU6IFwiXCIsIC4uLnBhcmFtc319O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cy5mb3JFYWNoKHdpZGdldCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHdpZGdldC5maWx0ZXJzLmZpbHRlckl0ZW1zLmZvckVhY2goZWxlbWVudCA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmZpbHRlclR5cGUgPT09ICdkYXRlJyB8fCBlbGVtZW50LmZpbHRlclR5cGUgPT09ICdkYXRldGltZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5kZWZhdWx0RmlsdGVyVHlwZSA9PT0gXCJkeW5hbWljXCIgJiYgZWxlbWVudC5tb21lbnRGdW5jdGlvbiAhPT0gXCJcIiAmJiBlbGVtZW50LmRlZmF1bHRGaWx0ZXJWYWx1ZSAhPT0gXCJcIiAmJiBlbGVtZW50Lm1vbWVudEZvcm1hdCAhPT0gXCJcIikge1xuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQubW9tZW50RnVuY3Rpb24gPT0gXCJtb250aFBpY2tlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgW2NvdW50LCB1bml0XSA9IGVsZW1lbnQuZGVmYXVsdEZpbHRlclZhbHVlLnNwbGl0KCcsJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmFwaU5hbWUgPT09IFwiZW5kRGF0ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZGlzcGxheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVycy5vcGVyYXRpb25GaWx0ZXIuZW5kRGF0ZSA9IChlbmREYXRlICYmIGVuZERhdGUgIT09ICcnKSA/IGVuZERhdGUgOiBtb21lbnQoKS5zdWJ0cmFjdChwYXJzZUludChjb3VudCksIHVuaXQpLmVuZE9mKHVuaXQpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEVuZERhdGUgPSBtb21lbnQoKS5zdWJ0cmFjdChwYXJzZUludChjb3VudCksIHVuaXQpLmVuZE9mKHVuaXQpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYXBpTmFtZSA9PT0gXCJzdGFydERhdGVcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlci5zdGFydERhdGUgPSAoc3RhcnREYXRlICYmIHN0YXJ0RGF0ZSAhPT0gJycpID8gc3RhcnREYXRlIDogbW9tZW50KCkuc3VidHJhY3QocGFyc2VJbnQoY291bnQpLCB1bml0KS5zdGFydE9mKHVuaXQpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQubW9tZW50RnVuY3Rpb24gPT0gXCJ3ZWVrUGlja2VyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmFwaU5hbWUgPT09IFwiZW5kRGF0ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZGlzcGxheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVycy5vcGVyYXRpb25GaWx0ZXIuZW5kRGF0ZSA9IChlbmREYXRlICYmIGVuZERhdGUgIT09ICcnKSA/IGVuZERhdGUgOiBtb21lbnQoKS5lbmRPZignd2VlaycpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEVuZERhdGUgPSBtb21lbnQoKS5lbmRPZignd2VlaycpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYXBpTmFtZSA9PT0gXCJzdGFydERhdGVcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlci5zdGFydERhdGUgPSAoc3RhcnREYXRlICYmIHN0YXJ0RGF0ZSAhPT0gJycpID8gc3RhcnREYXRlIDogbW9tZW50KCkuc3RhcnRPZignd2VlaycpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0U3RhcnREYXRlID0gbW9tZW50KCkuc3RhcnRPZignd2VlaycpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgW2NvdW50LCB1bml0XSA9IGVsZW1lbnQuZGVmYXVsdEZpbHRlclZhbHVlLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5hcGlOYW1lID09PSBcImVuZERhdGVcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmRpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlcnMub3BlcmF0aW9uRmlsdGVyLmVuZERhdGUgPSAoZW5kRGF0ZSAmJiBlbmREYXRlICE9PSAnJykgPyBlbmREYXRlIDogbW9tZW50KClbZWxlbWVudC5tb21lbnRGdW5jdGlvbl0ocGFyc2VJbnQoY291bnQpLCB1bml0KS5mb3JtYXQoZWxlbWVudC5tb21lbnRGb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRFbmREYXRlID0gbW9tZW50KClbZWxlbWVudC5tb21lbnRGdW5jdGlvbl0ocGFyc2VJbnQoY291bnQpLCB1bml0KS5mb3JtYXQoZWxlbWVudC5tb21lbnRGb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmFwaU5hbWUgPT09IFwic3RhcnREYXRlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVycy5vcGVyYXRpb25GaWx0ZXIuc3RhcnREYXRlID0gKHN0YXJ0RGF0ZSAmJiBzdGFydERhdGUgIT09ICcnKSA/IHN0YXJ0RGF0ZSA6IG1vbWVudCgpW2VsZW1lbnQubW9tZW50RnVuY3Rpb25dKHBhcnNlSW50KGNvdW50KSwgdW5pdCkuZm9ybWF0KGVsZW1lbnQubW9tZW50Rm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRTdGFydERhdGUgPSBtb21lbnQoKVtlbGVtZW50Lm1vbWVudEZ1bmN0aW9uXShwYXJzZUludChjb3VudCksIHVuaXQpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuZGVmYXVsdEZpbHRlclR5cGUgPT09IFwic3RhdGljXCIgJiYgZWxlbWVudC5kZWZhdWx0RmlsdGVyVmFsdWUgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYXBpTmFtZSA9PT0gXCJlbmREYXRlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmRpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVycy5vcGVyYXRpb25GaWx0ZXIuZW5kRGF0ZSA9IGVsZW1lbnQuZGVmYXVsdEZpbHRlclZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEVuZERhdGUgPSBlbGVtZW50LmRlZmF1bHRGaWx0ZXJWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5hcGlOYW1lID09PSBcInN0YXJ0RGF0ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVycy5vcGVyYXRpb25GaWx0ZXIuc3RhcnREYXRlID0gZWxlbWVudC5kZWZhdWx0RmlsdGVyVmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFN0YXJ0RGF0ZSA9IGVsZW1lbnQuZGVmYXVsdEZpbHRlclZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YgZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWUgPT09IFwic3RyaW5nXCIgJiYgZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWUgIT09IFwiXCIpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBcnJheS5pc0FycmF5KGVsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlKSAmJiBlbGVtZW50LmZpbHRlckRhdGFTb3VyY2VWYWx1ZS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5vcGVyYXRvck5hbWUgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlcltlbGVtZW50Lm9wZXJhdG9yTmFtZV0gPSBBcnJheS5pc0FycmF5KGVsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFtlbGVtZW50LmZpbHRlckRhdGFTb3VyY2VWYWx1ZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVycy5vcGVyYXRpb25GaWx0ZXJbZWxlbWVudC5hcGlOYW1lXSA9IGVsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlLmpvaW4oXCIsXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YXNldElkczogU2V0PGFueT4gPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCB2aWV3SWRzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFzZXRJZHNTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgICAgICAgICAgICAgICAgICB3aWRnZXQud2lkZ2V0Tm9kZS5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUubm9kZVByb3BlcnRpZXMuZGlzcGxheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2godmlldyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFZpZXdJZHMucHVzaCh2aWV3LnZpZXdJZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm91bmRPYmplY3QgPSB0aGlzLmRlZmF1bHRWaWV3SWRzT25QYWdlUmVmcmVzaD8uZmluZChpdGVtID0+IGl0ZW0udmlld0lkID09PSB2aWV3LnZpZXdJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlcml2ZWRGaWx0ZXJzID0gZm91bmRPYmplY3QgPyB0aGlzLmdldERyaWxkb3duRmlsdGVyKGZvdW5kT2JqZWN0LCBkZWZhdWx0RmlsdGVycykgOiBkZWZhdWx0RmlsdGVycztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZmlsdGVyc1wiOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRlcml2ZWRGaWx0ZXJzKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImtleVRvUGFzc1wiOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZHJpbGxEb3duVHlwZVwiOiBcIm5hdHVyYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZHJpbGxkb3duRnJvbVwiOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZURhdGFTb3VyY2Uuc2V0KHZpZXcudmlld0lkLCBvYmopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBub2RlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldElkOiB2aWV3LmRhdGFzZXRJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJZDogdmlldy52aWV3SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IGRlcml2ZWRGaWx0ZXJzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldElkc1NldC5hZGQodmlldy5kYXRhc2V0SWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc2V0SWRzLmFkZChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0lkcy5hZGQodmlldy52aWV3SWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2godmlldyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0lkOiB2aWV3LnZpZXdJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdOYW1lOiBub2RlLm5vZGVQcm9wZXJ0aWVzLndpZGdldFRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUtleTogdmlldy5rcGlDb25maWcua2V5VG9QYXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFZpZXdJZHNPblBhZ2VSZWZyZXNoPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZpZXdzID0gdGhpcy5kZWZhdWx0Vmlld0lkc09uUGFnZVJlZnJlc2gubWFwKGl0ZW0gPT4gaXRlbS52aWV3SWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0Vmlld0lkcyA9IFsuLi50aGlzLmRlZmF1bHRWaWV3SWRzLCAuLi5uZXdWaWV3cy5maWx0ZXIoaXRlbSA9PiAhdGhpcy5kZWZhdWx0Vmlld0lkcy5pbmNsdWRlcyhpdGVtKSldO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gZm9yIFJURE1TIG9wZXJhdG9ybmFtZVxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLm9wZXJhdG9yTmFtZSA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbJ29wZXJhdG9yTmFtZSddO1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiAodGhpcy5vcGVyYXRvck5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gICBkZWZhdWx0RmlsdGVycy5vcGVyYXRpb25GaWx0ZXJbJ29wZXJhdG9yX2tleSddID0gdGhpcy5vcGVyYXRvck5hbWU7XG4gICAgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICAgICAgbGV0IHVuaXF1ZWRhdGFzZXRJZHMgPSBBcnJheS5mcm9tKGRhdGFzZXRJZHNTZXQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWRnZXRJZDogd2lkZ2V0LndpZGdldElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUlkOiB3aWRnZXQucGFnZUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyczogZGVmYXVsdEZpbHRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhc2V0SWRzOiB1bmlxdWVkYXRhc2V0SWRzXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxXaWRnZXRCeURhdGFzZXQucHVzaChvYmopO1xuICAgICAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgICAgICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICBsZXQgYXBpQ2FsbHMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLmFsbFdpZGdldEJ5RGF0YXNldC5mb3JFYWNoKHZpZXcgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2aWV3LmRhdGFzZXRJZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSAoZGF0YXNldENvbmZpZyBhcyBhbnlbXSkuZmluZChkID0+IGQuZGF0YXNldElkID09PSBpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGlDYWxscy5wdXNoKHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0RGF0YUZyb21EYXRhU2V0KGZvdW5kLCBpZCwgdmlldy5maWx0ZXJzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIFByb21pc2UuYWxsKGFwaUNhbGxzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0gdGhpcy5kYXRhc2V0U2VydmljZS5nZXRVbmlxdWVEYXRhU2V0T2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRGl2RWxlbWVudHModGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGxldCB1cmxQYXJhbXM6IGFueSA9IGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlclxuICAgICAgICAgICAgICAgICAgICB1cmxQYXJhbXNbJ3BhZ2VJZCddID0gdGhpcy5wYWdlSWRcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5hdmlnYXRpb246IE5hdmlnYXRpb25FeHRyYXMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtczogdXJsUGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogXCJtZXJnZVwiXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCBuYXZpZ2F0aW9uKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLCBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ0Vycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0RGF0YVNldCgpIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmdldEFwcERhdGFzZXRDb25maWdzKCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFTZXR0YWJsZURhdGFTb3VyY2UgPSBkYXRhO1xuICAgICAgICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnRGF0YXNldCBDcmVhdGlvbicpXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cblxuICAgIGFzeW5jIGNyZWF0ZURpdkVsZW1lbnRzKGRhdGFzZXRCeUlkLCBjb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuZHluYW1pY0NvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgY29uc3QgY29udGV4dF9maWx0ZXIgPSB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy5maWx0ZXJzID8gdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcuZmlsdGVycy5maWx0ZXJJdGVtcyA6IG51bGw7XG5cbiAgICAgICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cy5mb3JFYWNoKGFzeW5jIGRpdiA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3dEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGxldCB3X2hlaWdodCA9IChkaXYud2lkZ2V0UHJvcGVydGllcy5oZWlnaHQgPT0gXCJcIikgPyBcImgtYXV0b1wiIDogJ2gtWycgKyBkaXYud2lkZ2V0UHJvcGVydGllcy5oZWlnaHQgKyAnXSc7XG4gICAgICAgICAgICByb3dEaXYuY2xhc3NMaXN0LmFkZChkaXYud2lkZ2V0UHJvcGVydGllcy53aWR0aCwgd19oZWlnaHQpO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlckl0ZW1zID0gKGRpdi5maWx0ZXJzKSA/IGRpdi5maWx0ZXJzLmZpbHRlckl0ZW1zIDogW107XG4gICAgICAgICAgICB0aGlzLmxvYWRGaWx0ZXJDb21wb25lbnQoZGl2LCBmaWx0ZXJEaXYsIGZpbHRlckl0ZW1zLCBjb250ZXh0X2ZpbHRlcik7XG4gICAgICAgICAgICByb3dEaXYuYXBwZW5kQ2hpbGQoZmlsdGVyRGl2KTtcblxuICAgICAgICAgICAgaWYgKGRpdi53aWRnZXROb2RlLmxlbmd0aCAhPSAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IG1haW5JdGVtRGl2ID0gcm93RGl2LnF1ZXJ5U2VsZWN0b3IoJy5mbGV4LmZsZXgtd3JhcCcpO1xuXG5cbiAgICAgICAgICAgICAgICAvLyBJZiBjb250ZXh0IGlzIHRydWUgYW5kIG1haW5JdGVtRGl2IGV4aXN0cywgY2xlYXIgaXRzIGNvbnRlbnRzXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQgJiYgbWFpbkl0ZW1EaXYpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpbkl0ZW1EaXYuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgbWFpbkl0ZW1EaXYgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICAgICAgICAgICAgICBtYWluSXRlbURpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICBtYWluSXRlbURpdi5jbGFzc0xpc3QuYWRkKFwiZmxleFwiLCBcImZsZXgtd3JhcFwiKTtcbiAgICAgICAgICAgICAgICAgICAgcm93RGl2LmFwcGVuZENoaWxkKG1haW5JdGVtRGl2KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRXaWRnZXROb2RlcyhkaXYsIG1haW5JdGVtRGl2LCBkYXRhc2V0QnlJZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChyb3dEaXYpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBsb2FkV2lkZ2V0Tm9kZXMoZGl2OiBhbnksIG1haW5JdGVtRGl2OiBhbnksIGRhdGFzZXRCeUlkOiBhbnkpIHtcbiAgICAgICAgdGhpcy5tYWluUGFnZURpdkVsZW1lbnQgPSBtYWluSXRlbURpdjtcblxuICAgICAgICBkaXYud2lkZ2V0Tm9kZS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0uY29tcENvbmZpZy52aWV3Q29uZmlnLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzUGVybWlzc2lvbiA9IGl0ZW0uY29tcENvbmZpZy52aWV3Q29uZmlnWzBdWydwZXJtaXNzaW9ucyddID8gdGhpcy5wZXJtaXNzaW9uSGVscGVyLmdldFBlcm1pc3Npb25FbnRpdHkoaXRlbS5jb21wQ29uZmlnLnZpZXdDb25maWdbMF1bJ3Blcm1pc3Npb25zJ10pIDogdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoaGFzUGVybWlzc2lvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRTaW5nbGVXaWRnZXROb2RlKGl0ZW0sIG1haW5JdGVtRGl2LCBkYXRhc2V0QnlJZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRTaW5nbGVXaWRnZXROb2RlKGl0ZW0sIG1haW5JdGVtRGl2LCBkYXRhc2V0QnlJZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICBsb2FkU2luZ2xlV2lkZ2V0Tm9kZShpdGVtOiBhbnksIGNvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50LCBkYXRhc2V0QnlJZDogYW55KSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRJZCA9IGBpZC0ke2l0ZW0uaWR9YDtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7ZWxlbWVudElkfWApO1xuICAgICAgICBpZiAoaXRlbS5ub2RlUHJvcGVydGllcy5kaXNwbGF5ICYmICFleGlzdGluZ0VsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHdfaGVpZ2h0ID0gaXRlbS5ub2RlUHJvcGVydGllcy5oZWlnaHQgPT09IFwiXCIgPyBcImgtYXV0b1wiIDogYGgtWyR7aXRlbS5ub2RlUHJvcGVydGllcy5oZWlnaHR9XWA7XG4gICAgICAgICAgICBjb25zdCBpdGVtRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBpdGVtRGl2LmlkID0gZWxlbWVudElkO1xuICAgICAgICAgICAgaXRlbURpdi5jbGFzc0xpc3QuYWRkKGl0ZW0ubm9kZVByb3BlcnRpZXMud2lkdGgsIHdfaGVpZ2h0LCAnbWItMicpO1xuICAgICAgICAgICAgaWYgKGl0ZW0ubm9kZVByb3BlcnRpZXMud2lkZ2V0VGl0bGUgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB3aWRnZXREaXYgPSB0aGlzLmdldFdpZGdldFRpdGxlRGl2KGl0ZW0pO1xuICAgICAgICAgICAgICAgIGl0ZW1EaXYuYXBwZW5kQ2hpbGQod2lkZ2V0RGl2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGlubmVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBpbm5lckRpdi5jbGFzc0xpc3QuYWRkKCdyb3VuZGVkJywgJ2p1c3RpZnktY2VudGVyJywgJ2l0ZW1zLWNlbnRlcicsICdib3JkZXInLCAncC0xJywgJ20tMScsICdmbGV4JywgJ2ZsZXgtcm93Jyk7XG4gICAgICAgICAgICBpdGVtLmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhc1Blcm1pc3Npb24gPSBlbGVtZW50WydwZXJtaXNzaW9ucyddID8gdGhpcy5wZXJtaXNzaW9uSGVscGVyLmdldFBlcm1pc3Npb25FbnRpdHkoZWxlbWVudFsncGVybWlzc2lvbnMnXSkgOiB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChoYXNQZXJtaXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQua3BpQ29uZmlnWydkYXRhU291cmNlJ10gPSBkYXRhc2V0QnlJZFtlbGVtZW50LmRhdGFzZXRJZF07XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQua3BpQ29uZmlnWydjb250ZXh0TWVudSddID0gdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2U7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRbJ3RpdGxlUGFyYW1zJ10gPSBpdGVtLm5vZGVQcm9wZXJ0aWVzLndpZGdldFBhcmFtcyB8fCBcIlwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wX29iamVjdCA9IHRoaXMuZmluZFdpZGdldEJ5SWQodGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cywgaXRlbS5pZCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZER5bmFtaWNDb21wb25lbnQoZWxlbWVudCwgY29tcF9vYmplY3QsIGl0ZW1EaXYpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKGl0ZW1EaXYpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzRGFzaEJvYXJkQ29udGVudFR5cGVWaWV3KSB7XG4gICAgICAgICAgICAgICAgaXRlbURpdi5hcHBlbmRDaGlsZChpbm5lckRpdik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIGlmIChleGlzdGluZ0VsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1EaXYgPSBleGlzdGluZ0VsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBpdGVtRGl2LmlubmVySFRNTCA9ICcnO1xuICAgICAgICAgICAgaWYgKGl0ZW0ubm9kZVByb3BlcnRpZXMud2lkZ2V0VGl0bGUgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB3aWRnZXREaXYgPSB0aGlzLmdldFdpZGdldFRpdGxlRGl2KGl0ZW0pO1xuICAgICAgICAgICAgICAgIGl0ZW1EaXYuYXBwZW5kQ2hpbGQod2lkZ2V0RGl2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZW0uY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5rcGlDb25maWdbJ2RhdGFTb3VyY2UnXSA9IGRhdGFzZXRCeUlkW2VsZW1lbnQuZGF0YXNldElkXTtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmtwaUNvbmZpZ1snY29udGV4dE1lbnUnXSA9IHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlO1xuICAgICAgICAgICAgICAgIGVsZW1lbnRbJ3RpdGxlUGFyYW1zJ10gPSBpdGVtLm5vZGVQcm9wZXJ0aWVzLndpZGdldFBhcmFtcyB8fCBcIlwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBfb2JqZWN0ID0gdGhpcy5maW5kV2lkZ2V0QnlJZCh0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzLCBpdGVtLmlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWREeW5hbWljQ29tcG9uZW50KGVsZW1lbnQsIGNvbXBfb2JqZWN0LCBpdGVtRGl2KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNEYXNoQm9hcmRDb250ZW50VHlwZVZpZXcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbm5lckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGlubmVyRGl2LmNsYXNzTGlzdC5hZGQoJ3JvdW5kZWQnLCAnanVzdGlmeS1jZW50ZXInLCAnaXRlbXMtY2VudGVyJywgJ2JvcmRlcicsICdwLTEnLCAnbS0xJywgJ2ZsZXgnLCAnZmxleC1yb3cnKTtcbiAgICAgICAgICAgICAgICBpdGVtRGl2LmFwcGVuZENoaWxkKGlubmVyRGl2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFdpZGdldFRpdGxlRGl2KGl0ZW0pIHtcblxuICAgICAgICBjb25zdCB3aWRnZXREaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgd2lkZ2V0RGl2LmNsYXNzTGlzdC5hZGQoXG4gICAgICAgICAgICAnZmxleCcsICdpdGVtcy1jZW50ZXInLCAnanVzdGlmeS1iZXR3ZWVuJywgJ2ZvbnQtYm9sZCcsICd0ZXh0LW1kJyxcbiAgICAgICAgICAgICd0ZXh0LWdyYXktOTAwJywgJ2Rhcms6dGV4dC13aGl0ZScsICdib3JkZXItYicsICdwLTMnLCAnZGFyazpiZy1ncmF5LTgwMCcsICdiZy1ncmF5LTIwMCcsXG4gICAgICAgICAgICAnbXgtMicsICdyb3VuZGVkLXQtbGcnLCAncmVsYXRpdmUnXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgdGl0bGVEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGl0bGVEaXYuY2xhc3NMaXN0LmFkZCgncmVsYXRpdmUnLCAnZ3JvdXAnKTtcblxuICAgICAgICBsZXQgcGFyYW1zID0gXCJcIjtcbiAgICAgICAgaWYgKCFpdGVtLm5vZGVQcm9wZXJ0aWVzLndpZGdldFBhcmFtcyAmJiB0aGlzLmRlZmF1bHRWaWV3SWRzT25QYWdlUmVmcmVzaD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSB0aGlzLmdldFRpdGxlUGFyYW1zKGl0ZW0pIHx8IFwiXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBpdGVtLm5vZGVQcm9wZXJ0aWVzLndpZGdldFBhcmFtcyB8fCBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgd2lkZ2V0VGl0bGUgPSBpdGVtLm5vZGVQcm9wZXJ0aWVzLndpZGdldFRpdGxlO1xuICAgICAgICBjb25zdCB0b29sdGlwTWF0Y2ggPSB3aWRnZXRUaXRsZS5tYXRjaCgvXFwkdFxceyhbXFxzXFxTXSo/KVxcfS8pO1xuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlUaXRsZSA9IHdpZGdldFRpdGxlLnJlcGxhY2UoL1xcJHRcXHtbXFxzXFxTXSo/XFx9L2csICcnKS50cmltKCk7XG5cbiAgICAgICAgdGl0bGVEaXYuaW5uZXJUZXh0ID0gZGlzcGxheVRpdGxlICsgcGFyYW1zO1xuXG4gICAgICAgIGlmICh0b29sdGlwTWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvb2x0aXBDb250ZW50ID0gdG9vbHRpcE1hdGNoWzFdLnRyaW0oKTtcbiAgICAgICAgICAgIGNvbnN0IHRvb2x0aXBEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRvb2x0aXBEaXYuY2xhc3NMaXN0LmFkZChcbiAgICAgICAgICAgICAgICAnYWJzb2x1dGUnLCAnbGVmdC0wJywgJ2JvdHRvbS1mdWxsJywgJ21iLTInLCAndy1tYXgnLCAnbWF4LXcteHMnLFxuICAgICAgICAgICAgICAgICdiZy1ibGFjaycsICd0ZXh0LXdoaXRlJywgJ3RleHQtc20nLCAncC0yJywgJ3JvdW5kZWQtbGcnLCAnc2hhZG93LWxnJyxcbiAgICAgICAgICAgICAgICAnb3BhY2l0eS0wJywgJ2dyb3VwLWhvdmVyOm9wYWNpdHktMTAwJywgJ3RyYW5zaXRpb24tb3BhY2l0eScsICdkdXJhdGlvbi0zMDAnLFxuICAgICAgICAgICAgICAgICd6LTUwJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRvb2x0aXBEaXYuaW5uZXJIVE1MID0gdG9vbHRpcENvbnRlbnQ7XG5cbiAgICAgICAgICAgIHRpdGxlRGl2LmFwcGVuZENoaWxkKHRvb2x0aXBEaXYpO1xuICAgICAgICB9XG5cbiAgICAgICAgd2lkZ2V0RGl2LmFwcGVuZENoaWxkKHRpdGxlRGl2KTtcblxuXG4gICAgICAgIGNvbnN0IHNlYXJjaENvbnRhaW5lckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBzZWFyY2hDb250YWluZXJEaXYuY2xhc3NMaXN0LmFkZCgnZmxleCcsICdpdGVtcy1jZW50ZXInLCAnbWwtYXV0bycsICdzcGFjZS14LTInLCAnanVzdGlmeS1lbmQnKTsgLy8gbWwtYXV0byBwdXNoZXMgY29udGVudCB0byB0aGUgcmlnaHQgc2lkZVxuXG4gICAgICAgIC8vIENoZWNrIGZvciB3aWRnZXQgZmlsdGVyXG4gICAgICAgIGlmIChpdGVtLm5vZGVQcm9wZXJ0aWVzLmlzV2lkZ2V0RmlsdGVyKSB7XG4gICAgICAgICAgICBjb25zdCBzZWFyY2hCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgICAgICAgIHNlYXJjaEJ1dHRvbi5pbm5lclRleHQgPSAnRmlsdGVyJztcbiAgICAgICAgICAgIHNlYXJjaEJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdweC0zJywgJ3B5LTEuNScsICdiZy1ibHVlLTYwMCcsICdtci0yJywgJ3RleHQtd2hpdGUnLCAncm91bmRlZCcsICdob3ZlcjpiZy1ibHVlLTcwMCcpO1xuICAgICAgICAgICAgdGhpcy5ub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2UgPSB7fTtcbiAgICAgICAgICAgIHRoaXMubm9kZXByb3BlcnRpY2VGaWx0ZXJEYXRhU291cmNlWyd2aWV3Q29uZmlnJ10gPSBpdGVtO1xuICAgICAgICAgICAgdGhpcy5ub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2VbJ2hhdmluZ0NvbmZpZyddID0gW107XG5cbiAgICAgICAgICAgIHNlYXJjaEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzV2lkZ2V0RmlsdGVycyA9IHRydWU7XG4gICAgICAgICAgICAgICAgbGV0IGZpbHRlUHJvcGVydGljZSA9IFtdO1xuICAgICAgICAgICAgICAgIGl0ZW0uY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBrZXlfbmFtZSA9IHRoaXMudW5pcXVlRGF0YVNldE9iamVjdFtlbGVtZW50LmRhdGFzZXRJZF1bMF07XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGtleV9uYW1lKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbHRlUHJvcGVydGljZS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVQcm9wZXJ0aWNlLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZmlsdGVQcm9wZXJ0aWNlLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lOiBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwiZmxvYXRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2UuaGF2aW5nQ29uZmlnLnB1c2gob2JqKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZWFyY2hDb250YWluZXJEaXYuYXBwZW5kQ2hpbGQoc2VhcmNoQnV0dG9uKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIGl0ZW0gZmlsdGVySWRcbiAgICAgICAgaWYgKGl0ZW0uZmlsdGVySWQpIHtcbiAgICAgICAgICAgIHRoaXMubm9kZXByb3BlcnRpY2VGaWx0ZXJEYXRhU291cmNlID0ge307XG4gICAgICAgICAgICB0aGlzLm5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZVsndmlld0NvbmZpZyddID0gaXRlbTtcbiAgICAgICAgICAgIHRoaXMubm9kZXByb3BlcnRpY2VGaWx0ZXJEYXRhU291cmNlWydoYXZpbmdDb25maWcnXSA9IFtdO1xuXG4gICAgICAgICAgICB0aGlzLnNlcnZpY2UuZ2V0QXBwRmlsdGVyQ29uZmlnKGl0ZW0uZmlsdGVySWQpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkV2lkZ2V0RmlsdGVyQ29tcG9uZW50KGl0ZW0sIHdpZGdldERpdiwgZGF0YS5maWx0ZXJJdGVtcywgaXRlbSk7XG4gICAgICAgICAgICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBmb3Igbm9kZSBmaWx0ZXJzXG4gICAgICAgIGlmIChpdGVtLm5vZGVQcm9wZXJ0aWVzLm5vZGVmaWx0ZXJzICYmIGl0ZW0ubm9kZVByb3BlcnRpZXMubm9kZWZpbHRlcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBpdGVtLm5vZGVQcm9wZXJ0aWVzLm5vZGVmaWx0ZXJzLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBmaWx0ZXJEaXYuY2xhc3NMaXN0LmFkZCgnZmxleCcsICdpdGVtcy1jZW50ZXInKTtcblxuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIuaW5wdXRfdHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRCb3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICAgICAgICAgICAgICB0ZXh0Qm94LnR5cGUgPSAndGV4dCc7XG4gICAgICAgICAgICAgICAgICAgIHRleHRCb3gucGxhY2Vob2xkZXIgPSBgRW50ZXIgJHtmaWx0ZXIubG9jYWxfY29sdW1ufWA7XG4gICAgICAgICAgICAgICAgICAgIHRleHRCb3guY2xhc3NMaXN0LmFkZCgncHgtMicsICdweS0xLjUnLCAncm91bmRlZCcsICdib3JkZXInLCAnbXItMScsICdib3JkZXItZ3JheS01MDAnLCAndGV4dC1ncmF5LTkwMCcsICdkYXJrOmJnLWdyYXktNzAwJywgJ2Rhcms6dGV4dC13aGl0ZScpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICAgICAgICAgICAgICBzZWFyY2hCdXR0b24uaW5uZXJUZXh0ID0gJ1NlYXJjaCc7XG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaEJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdweC0zJywgJ3B5LTEuNScsICdiZy1ibHVlLTYwMCcsICdtci0yJywgJ3RleHQtd2hpdGUnLCAncm91bmRlZCcsICdob3ZlcjpiZy1ibHVlLTcwMCcpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlcGFyZXJvdEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICBzZXBhcmVyb3RCdXR0b24uaW5uZXJIVE1MID0gJ3wnO1xuXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaFRlcm0gPSB0ZXh0Qm94LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRSZWFyY2hSZXN1bHRGcm9tSW5wdXRCb3goc2VhcmNoVGVybSwgaXRlbSwgZmlsdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyRGl2LmFwcGVuZENoaWxkKHRleHRCb3gpO1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJEaXYuYXBwZW5kQ2hpbGQoc2VhcmNoQnV0dG9uKTtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyRGl2LmFwcGVuZENoaWxkKHNlcGFyZXJvdEJ1dHRvbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc2VhcmNoQ29udGFpbmVyRGl2LmFwcGVuZENoaWxkKGZpbHRlckRpdik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdpZGdldERpdi5hcHBlbmRDaGlsZChzZWFyY2hDb250YWluZXJEaXYpO1xuICAgICAgICByZXR1cm4gd2lkZ2V0RGl2O1xuICAgIH1cblxuXG4gICAgbG9hZER5bmFtaWNDb21wb25lbnQoZGF0YSwgaW5kZXhPYmosIGNvbnRhaW5lckVsZW1lbnQpOiBhbnkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRDbGFzcyA9IHRoaXMuY29tcG9uZW50Q2xhc3NNYXBbZGF0YS5rcGlDb25maWcuY29tcG9uZW50TmFtZV07XG4gICAgICAgIHRoaXMuQ29tcFJlZnMgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudENsYXNzKTtcbiAgICAgICAgY29uc3QgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlID0gdGhpcy5Db21wUmVmcy5pbnN0YW5jZTtcblxuICAgICAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UuY2hhcnREYXRhU291cmNlID0gZGF0YTtcbiAgICAgICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLmtwaV9uYW1lID0gXCJcIjtcbiAgICAgICAgaWYgKGRhdGEua3BpQ29uZmlnLmNvbXBvbmVudE5hbWUgPT0gXCJHYW1tYUFkdmFuY2VPcGVyYXRvclRhYmxlQ29tcG9uZW50XCIgfHwgZGF0YS5rcGlDb25maWcuY29tcG9uZW50TmFtZSA9PSBcIkdhbW1hVGFibGVXaXRoUGVyY2VudGFnZUNvbXBvbmVudFwiKSB7XG4gICAgICAgICAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2Uub1Jvd0NsaWNrLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Um93Q2xpY2sodmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2Uub25yaWdodENsaWNrQ29udGV4dFNlbGVjdGlvbi5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldENvbnRleHRDbGljayh2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLmtwaUNvbmZpZy5jb21wb25lbnROYW1lID09IFwiR2FtbWFBZHZhbmNlQ2hhcnRDb21wb25lbnRcIikge1xuXG4gICAgICAgICAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2Uub25DaGFydFBvaW50Q2xpY2suc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRSb3dDbGljayh2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpbmRleE9iai5jb21wQ29uZmlnLmR5bmFtaWNDb21wb25lbnRSZWZzLnB1c2godGhpcy5Db21wUmVmcyk7XG4gICAgICAgIGNvbnN0IGNzc0NsYXNzID0gXCJ3LWZ1bGxcIjtcbiAgICAgICAgdGhpcy5Db21wUmVmcy5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoY3NzQ2xhc3MpO1xuICAgICAgICBjb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuQ29tcFJlZnMubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgbG9hZEZpbHRlckNvbXBvbmVudChpbmRleE9iaiwgY29udGFpbmVyRWxlbWVudCwgZmlsdGVySXRlbXMsIGNvbnRleHRfZmlsdGVyKSB7XG4gICAgICAgIGxldCB1c2VyTmFtZSA9IHRoaXMuc3RvcmFnZS5nZXQoJ3VzZXJfbmFtZScpXG4gICAgICAgIGxldCBzZWxlY3RlZERhdGVzID0ge3N0YXJ0RGF0ZTogdGhpcy5kZWZhdWx0U3RhcnREYXRlLCBlbmREYXRlOiB0aGlzLmRlZmF1bHRFbmREYXRlfVxuICAgICAgICBjb25zdCBjb21wb25lbnRDbGFzcyA9IHRoaXMuY29tcG9uZW50Q2xhc3NNYXBbJ0FwcEFkdmFuY2VIZWFkZXJDb21wb25lbnQnXTtcbiAgICAgICAgdGhpcy5Db21wUmVmcyA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50Q2xhc3MpO1xuICAgICAgICBjb25zdCBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UgPSB0aGlzLkNvbXBSZWZzLmluc3RhbmNlO1xuICAgICAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2Uuc2VsZWN0ZWREYXRlcyA9IHNlbGVjdGVkRGF0ZXM7XG4gICAgICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5maWx0ZXJJdGVtcyA9IGZpbHRlckl0ZW1zO1xuICAgICAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UuY29udGV4dEZpbHRlckl0ZW1zID0gY29udGV4dF9maWx0ZXI7XG4gICAgICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5maWx0ZXJPYmplY3RzID0gaW5kZXhPYmo7XG5cbiAgICAgICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLnBhZ2VUaXRsZSA9IHRoaXMucGFnZVRpdGxlO1xuICAgICAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UuYnJlYWRfY3J1bWJzX2NvbnRhaW5lciA9IHRoaXMua3BpX2JyZWFkY3J1bWJzX2NvbnRhaW5lcjtcbiAgICAgICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLmlzRWRpdEJ1dHRvbiA9ICh1c2VyTmFtZSAmJiB1c2VyTmFtZSA9PSBcImFkbWluXCIpID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UuaXNBZHZhbmNlQnV0dG9uID0gdHJ1ZTtcbiAgICAgICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLmdldEZpbHRlclBhZ2VDb25maWcuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdldEZpbHRlcnNGb3JUZW1wbGF0ZSh2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UuZ2V0T3BlcmF0b3JOYW1lLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkRGF0YUJ5T3BlcmF0b3IodmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLmdldENvbnRleHRGaWx0ZXJEYXRhLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZXRDb250ZXh0RmlsdGVyRGF0YSh2YWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGluZGV4T2JqLmNvbXBDb25maWcuZHluYW1pY0NvbXBvbmVudFJlZnMucHVzaCh0aGlzLkNvbXBSZWZzKTtcbiAgICAgICAgY29uc3QgY3NzQ2xhc3MgPSBcInctZnVsbFwiO1xuICAgICAgICB0aGlzLkNvbXBSZWZzLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChjc3NDbGFzcyk7XG4gICAgICAgIGNvbnRhaW5lckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5Db21wUmVmcy5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBsb2FkV2lkZ2V0RmlsdGVyQ29tcG9uZW50KGluZGV4T2JqLCBjb250YWluZXJFbGVtZW50LCBmaWx0ZXJJdGVtcywgdmlld0lkcykge1xuICAgICAgICBsZXQgc2VsZWN0ZWREYXRlcyA9IHtzdGFydERhdGU6IHRoaXMuZGVmYXVsdFN0YXJ0RGF0ZSwgZW5kRGF0ZTogdGhpcy5kZWZhdWx0RW5kRGF0ZX1cbiAgICAgICAgY29uc3QgY29tcG9uZW50Q2xhc3MgPSB0aGlzLmNvbXBvbmVudENsYXNzTWFwWydBZHZhbmNlV2lkZ2V0SGVhZGVyRmlsdGVyQ29tcG9uZW50J107XG4gICAgICAgIHRoaXMuQ29tcFJlZnMgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudENsYXNzKTtcbiAgICAgICAgY29uc3QgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlID0gdGhpcy5Db21wUmVmcy5pbnN0YW5jZTtcbiAgICAgICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLnNlbGVjdGVkRGF0ZXMgPSBzZWxlY3RlZERhdGVzO1xuICAgICAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UuZmlsdGVySXRlbXMgPSBmaWx0ZXJJdGVtcztcbiAgICAgICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLnZpZXdJZHMgPSB2aWV3SWRzO1xuXG4gICAgICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5nZXRXaWRnZXRGaWx0ZXJDb25maWcuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdldFdpZGdldEZpbHRlckZvclRlbXBsYXRlKHZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW5kZXhPYmouY29tcENvbmZpZy5keW5hbWljQ29tcG9uZW50UmVmcy5wdXNoKHRoaXMuQ29tcFJlZnMpO1xuICAgICAgICBjb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuQ29tcFJlZnMubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgLy8gZm9yIGNvbnRleHQgbWVudSBmdW5jdGlvblxuICAgIGdldENvbnRleHRDbGljayhldmVudCkge1xuICAgICAgICBjb25zdCBzdGF0ZURhdGEgPSBBcnJheS5mcm9tKHRoaXMuc3RhdGVEYXRhU291cmNlLmtleXMoKSk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWaWV3SW5kZXggPSBzdGF0ZURhdGEuaW5kZXhPZihldmVudC52aWV3SWQpO1xuICAgICAgICBjb25zdCBkZWxldGVkVmlld0lkcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gY3VycmVudFZpZXdJbmRleCArIDE7IGkgPCBzdGF0ZURhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGRlbGV0ZWRWaWV3SWRzLnB1c2goc3RhdGVEYXRhW2ldKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgZWxlbWVudC53aWRnZXROb2RlLmZvckVhY2goKG5vZGU6IGFueSwgbm9kZUluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXRFbGVtZW50T2ZDdXJyZW50Vmlldyhub2RlLCBldmVudC5kcmlsbGRvd25UbykpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZpZXcgPSBlbGVtZW50LndpZGdldE5vZGVbbm9kZUluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFwaUNhbGxzID0gW107XG4gICAgICAgICAgICAgICAgICAgIGxldCBjaGF0QXBpQ2FsbCA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBhcHBsaWVkRmlsdGVycyA9IHRoaXMuZ2V0U2V0T3BlcmF0b3JGaWx0ZXIoZXZlbnQsIHRoaXMuc3RhdGVEYXRhU291cmNlLmdldChldmVudC5kcmlsbGRvd25Gcm9tKSk7XG4gICAgICAgICAgICAgICAgICAgIHZpZXcuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2goY29udGVudFZpZXcgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZvdW5kID0gKHRoaXMuZGF0YVNldE1vZGFsIGFzIGFueVtdKS5maW5kKGQgPT4gZC5kYXRhc2V0SWQgPT09IGNvbnRlbnRWaWV3LmRhdGFzZXRJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGlDYWxscy5wdXNoKHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0RGF0YUZyb21EYXRhU2V0KGZvdW5kLCBjb250ZW50Vmlldy5kYXRhc2V0SWQsIGFwcGxpZWRGaWx0ZXJzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdEFwaUNhbGwucHVzaCh0aGlzLmNoYXRBcGlTZXJ2aWNlLmdldERhdGFGb3JDaGF0QWkodGhpcy5wYWdlSWQsIGNvbnRlbnRWaWV3LCBhcHBsaWVkRmlsdGVycykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwoYXBpQ2FsbHMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0gdGhpcy5kYXRhc2V0U2VydmljZS5nZXRVbmlxdWVEYXRhU2V0T2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBlbnRyeSBvZiBkZWxldGVkVmlld0lkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQud2lkZ2V0Tm9kZS5mb3JFYWNoKHZpZXdWYWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdWYWx1ZS5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaCh2aWV3SWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXdJZC52aWV3SWQgPT0gZW50cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdHMgPSB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZS5zb21lKGl0ZW0gPT4gaXRlbS52aWV3SWQgPT09IHZpZXdJZC52aWV3SWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIG5vdCBleGlzdHMsIHB1c2ggdGhlIG5ldyBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2UucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3SWQ6IHZpZXdJZC52aWV3SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3TmFtZTogbm9kZS5ub2RlUHJvcGVydGllcy53aWRnZXRUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlLZXk6IHZpZXdJZC5rcGlDb25maWcua2V5VG9QYXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydERhdGEgPSB0aGlzLnN0YXRlRGF0YVNvdXJjZS5nZXQoZW50cnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydERhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZURhdGFTb3VyY2UuZGVsZXRlKGVudHJ5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3VmFsdWUubm9kZVByb3BlcnRpZXNbJ2Rpc3BsYXknXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZWZpeGVkSWQgPSBgaWQtJHt2aWV3VmFsdWUuaWR9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50VG9IaWRlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7cHJlZml4ZWRJZH1gKSBhcyBIVE1MRWxlbWVudDsgLy8gQ2FzdCB0byBIVE1MRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50VG9IaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRUb0hpZGUucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2UgPSB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZS5maWx0ZXIoZSA9PiBlLmRpc3BsYXlLZXkgIT09IGV2ZW50LmtleVRvUGFzcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3LmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKHZhbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmaWx0ZXJzXCI6IGFwcGxpZWRGaWx0ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImtleVRvUGFzc1wiOiB0aGlzLnVwZGF0ZU9wZXJhdG9yRGF0YShldmVudC5rZXlUb1Bhc3MsIGV2ZW50LmRhdGEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRyaWxsRG93blR5cGVcIjogZXZlbnQuZHJpbGxEb3duVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkcmlsbGRvd25Gcm9tXCI6IGV2ZW50LmRyaWxsZG93bkZyb21cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZURhdGFTb3VyY2Uuc2V0KHZhbFsndmlld0lkJ10sIG9iailcblxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3Lm5vZGVQcm9wZXJ0aWVzWydkaXNwbGF5J10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmlldy5ub2RlUHJvcGVydGllc1snd2lkZ2V0UGFyYW1zJ10gPSBldmVudC50YWJsZVRpdGxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJlZml4ZWRJZCA9IGBpZC0ke3ZpZXcuaWR9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtwcmVmaXhlZElkfWApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkU2luZ2xlV2lkZ2V0Tm9kZSh2aWV3LCB0aGlzLm1haW5QYWdlRGl2RWxlbWVudCwgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20odGhpcy5tYWluUGFnZURpdkVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMjAwKTtcblxuXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmF2aWdhdGlvbjogTmF2aWdhdGlvbkV4dHJhcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtczogYXBwbGllZEZpbHRlcnNbJ29wZXJhdGlvbkZpbHRlciddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IFwibWVyZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCBuYXZpZ2F0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBub2RlLm5vZGVQcm9wZXJ0aWVzWydkaXNwbGF5J10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gZm9yIHJvdyBjbGljayBmdW5jdGlvblxuICAgIGFzeW5jIGdldFJvd0NsaWNrKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHN0YXRlRGF0YSA9IEFycmF5LmZyb20odGhpcy5zdGF0ZURhdGFTb3VyY2Uua2V5cygpKTtcbiAgICAgICAgY29uc3QgY3VycmVudFZpZXdJbmRleCA9IHN0YXRlRGF0YS5pbmRleE9mKGV2ZW50LnZpZXdJZCk7XG4gICAgICAgIGNvbnN0IGRlbGV0ZWRWaWV3SWRzID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IGN1cnJlbnRWaWV3SW5kZXggKyAxOyBpIDwgc3RhdGVEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAvLyBpZiAoIXRoaXMuZGVmYXVsdFZpZXdJZHMuaW5jbHVkZXMoc3RhdGVEYXRhW2ldKSkge1xuICAgICAgICAgICAgZGVsZXRlZFZpZXdJZHMucHVzaChzdGF0ZURhdGFbaV0pO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhvdXJseU5vZGUgPSB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzXG4gICAgICAgICAgICAubWFwKHdpZGdldCA9PiB3aWRnZXQud2lkZ2V0Tm9kZS5maW5kKG5vZGUgPT4gdGhpcy5nZXRIb3VybHlEYXRhKG5vZGUpKSlcbiAgICAgICAgICAgIC5maW5kKG5vZGUgPT4gbm9kZSk7XG5cbiAgICAgICAgaWYgKGhvdXJseU5vZGUgJiYgZXZlbnQua2V5VG9QYXNzLmluY2x1ZGVzKFwicmVjb3JkRGF0ZVwiKSB8fCBldmVudC5rZXlUb1Bhc3MuaW5jbHVkZXMoXCJyZWNvcmRfZGF0ZVwiKSkge1xuICAgICAgICAgICAgdGhpcy5nZXRWaWV3QnlSb3dDTGlja0ZvckhvdXJseUNoYXJ0KGV2ZW50LCBob3VybHlOb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRWaWV3Tm9kZSA9IHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHNcbiAgICAgICAgICAgIC5tYXAod2lkZ2V0ID0+IHdpZGdldC53aWRnZXROb2RlLmZpbmQobm9kZSA9PiB0aGlzLmdldEVsZW1lbnRPZkN1cnJlbnRWaWV3KG5vZGUsIGV2ZW50LnZpZXdJZCkpKVxuICAgICAgICAgICAgLmZpbmQobm9kZSA9PiBub2RlKTtcblxuXG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwO1xuICAgICAgICBpZiAoY3VycmVudFZpZXdOb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBkcmlsZG93bnNGb3JDdXJyZW50VmlldyA9IFtdO1xuICAgICAgICAgICAgY29uc3QgZHJpbGRvd25zRm9yQ3VycmVudFBhZ2UgPSBbXTtcbiAgICAgICAgICAgIGN1cnJlbnRWaWV3Tm9kZS5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaChhc3luYyBlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5rcGlDb25maWcudmlld1Byb3BlcnRpZXMuZW5hYmxlQ2xpY2tFdmVudCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5rcGlDb25maWcudmlld1Byb3BlcnRpZXMuY2xpY2tFdmVudE9wdGlvbnM/LmV2ZW50VHlwZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmtwaUNvbmZpZy52aWV3UHJvcGVydGllcy5jbGlja0V2ZW50T3B0aW9ucy5ldmVudFR5cGUgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBldmVudFR5cGUgPSBlbGVtZW50LmtwaUNvbmZpZy52aWV3UHJvcGVydGllcy5jbGlja0V2ZW50T3B0aW9ucy5ldmVudFR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXNzb2NpYXRlZFZpZXdzID0gZWxlbWVudC5rcGlDb25maWcudmlld1Byb3BlcnRpZXMuY2xpY2tFdmVudE9wdGlvbnMuYXNzb2NpYXRlZFZpZXdzO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFzc29jaWF0ZWRQYWdlID0gKGVsZW1lbnQua3BpQ29uZmlnLnZpZXdQcm9wZXJ0aWVzLmNsaWNrRXZlbnRPcHRpb25zLmFzc29jaWF0ZWRQYWdlKSA/IGVsZW1lbnQua3BpQ29uZmlnLnZpZXdQcm9wZXJ0aWVzLmNsaWNrRXZlbnRPcHRpb25zLmFzc29jaWF0ZWRQYWdlIDogXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjbGlja0V2ZW50T3B0aW9ucyA9IGVsZW1lbnQua3BpQ29uZmlnLnZpZXdQcm9wZXJ0aWVzLmNsaWNrRXZlbnRPcHRpb25zO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09ICdvcHRpb25hbERyaWxsRG93bicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXNzb2NpYXRlZFZpZXdzICYmIGFzc29jaWF0ZWRWaWV3cy5sZW5ndGggIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCB2aWV3Rm9yRHJpbGxEb3duIG9mIGFzc29jaWF0ZWRWaWV3cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyQ29uZGl0aW9uID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh2aWV3Rm9yRHJpbGxEb3duWydmaWx0ZXJDb25kaXRpb24nXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWF0Y2hGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJDb25kaXRpb24uZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdWVyeVBhcmFtcy5nZXQoa2V5KSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hGb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoRm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Rm9yRHJpbGxEb3duWyd2aWV3SWQnXS5mb3JFYWNoKHZpZXdGb3JJZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaWxkb3duc0ZvckN1cnJlbnRWaWV3LnB1c2godmlld0ZvcklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSAnZHJpbGxkb3duJyB8fCBldmVudFR5cGUgPT0gJ3BvcHVwJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGVudHJ5IG9mIGFzc29jaWF0ZWRWaWV3cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmlsZG93bnNGb3JDdXJyZW50Vmlldy5wdXNoKGVudHJ5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSAnbmF2aWdhdGVUb1BhZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLmdldEFwcFBhZ2VEZXRhaWxDb25maWcoYXNzb2NpYXRlZFBhZ2UpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB7cGFnZUlkLCBpZCwgbmFtZSwgLi4ucGFyYW1zfSA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXNzb2NpYXRlZFBhcmFtc1RlbXBsYXRlID0gY2xpY2tFdmVudE9wdGlvbnMuYXNzb2NpYXRlZFBhcmFtcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcHBsaWVkRmlsdGVycyA9IHRoaXMuZ2V0U2V0T3BlcmF0b3JGaWx0ZXIoZXZlbnQsIHRoaXMuc3RhdGVEYXRhU291cmNlLmdldChldmVudC52aWV3SWQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmtleVRvUGFzcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tlbGVtZW50XSA9IGV2ZW50LmRhdGFbZWxlbWVudF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1sncGFnZUlkJ10gPSBhc3NvY2lhdGVkUGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhc3NvY2lhdGVkUGFyYW1zVGVtcGxhdGUgIT09IFwiXCIpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaW5hbEFzc29jaWF0ZWRQYXJhbXM6IGFueSA9IHRoaXMucmVwbGFjZUFzc29jaWF0ZWRQYXJhbXMoYXNzb2NpYXRlZFBhcmFtc1RlbXBsYXRlLCBwYXJhbXMsIGFwcGxpZWRGaWx0ZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtczogYW55ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxBc3NvY2lhdGVkUGFyYW1zLnNwbGl0KFwiJlwiKS5mb3JFYWNoKHBhaXIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBwYWlyLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zWydwYWdlSWQnXSA9IHBhcmFtc1sncGFnZUlkJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZnVsbFVybCA9IHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShbZGF0YS5wYWdlVXJsXSwge3F1ZXJ5UGFyYW1zfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtkYXRhLnBhZ2VVcmxdLCB7cXVlcnlQYXJhbXN9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aW5kb3cub3BlbihmdWxsVXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmdWxsVXJsID0gdGhpcy5yb3V0ZXIuc2VyaWFsaXplVXJsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKFtkYXRhLnBhZ2VVcmxdLCB7cXVlcnlQYXJhbXM6IHBhcmFtc30pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbZGF0YS5wYWdlVXJsXSwge3F1ZXJ5UGFyYW1zfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2luZG93Lm9wZW4oZnVsbFVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSAnc2FtZVZpZXdEcmlsbGRvd24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdnZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHJpbGRvd25zRm9yQ3VycmVudFZpZXcubGVuZ3RoICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCB2aWV3SWRGb3JOZXh0IG9mIGRyaWxkb3duc0ZvckN1cnJlbnRWaWV3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRWaWV3Tm9kZSA9IHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAod2lkZ2V0ID0+IHdpZGdldC53aWRnZXROb2RlLmZpbmQobm9kZSA9PiB0aGlzLmdldEVsZW1lbnRPZkN1cnJlbnRWaWV3KG5vZGUsIHZpZXdJZEZvck5leHQpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKG5vZGUgPT4gbm9kZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSAncG9wdXAnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmlzUG9wdXBWaWV3ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0TW9kYWxWaWV3QnlSb3dDTGljayhldmVudCwgbmV4dFZpZXdOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0Vmlld0J5Um93Q0xpY2soZXZlbnQsIG5leHRWaWV3Tm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGVudHJ5IG9mIGRlbGV0ZWRWaWV3SWRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQud2lkZ2V0Tm9kZS5mb3JFYWNoKHZpZXdWYWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3VmFsdWUuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2godmlld0lkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmlld0lkLnZpZXdJZCA9PSBlbnRyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdHMgPSB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZS5zb21lKGl0ZW0gPT4gaXRlbS52aWV3SWQgPT09IHZpZXdJZC52aWV3SWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2UucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0lkOiB2aWV3SWQudmlld0lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdOYW1lOiBjdXJyZW50Vmlld05vZGUubm9kZVByb3BlcnRpZXMud2lkZ2V0VGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUtleTogdmlld0lkLmtwaUNvbmZpZy5rZXlUb1Bhc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0RGF0YSA9IHRoaXMuc3RhdGVEYXRhU291cmNlLmdldChlbnRyeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydERhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVEYXRhU291cmNlLmRlbGV0ZShlbnRyeSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3VmFsdWUubm9kZVByb3BlcnRpZXNbJ2Rpc3BsYXknXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmVmaXhlZElkID0gYGlkLSR7dmlld1ZhbHVlLmlkfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0hpZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtwcmVmaXhlZElkfWApIGFzIEhUTUxFbGVtZW50OyAvLyBDYXN0IHRvIEhUTUxFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50VG9IaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50VG9IaWRlLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFZpZXdJbmRleCA9IHN0YXRlRGF0YS5pbmRleE9mKGV2ZW50LnZpZXdJZCkgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFZpZXcgPSB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCh3aWRnZXQgPT4gd2lkZ2V0LndpZGdldE5vZGVbbmV4dFZpZXdJbmRleF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmQobm9kZSA9PiBub2RlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRWaWV3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0Vmlld0J5Um93Q0xpY2soZXZlbnQsIG5leHRWaWV3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICAgICAgLy8gZm9yIHZpZXcgZ3JvdXBcblxuXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRWaWV3QnlSb3dDTGlja0ZvckhvdXJseUNoYXJ0KGV2ZW50LCBub2RlKSB7XG5cbiAgICAgICAgbGV0IGFwaUNhbGxzID0gW107XG4gICAgICAgIGNvbnN0IGRlbGV0ZWRWaWV3SWRzID0gW107XG4gICAgICAgIG5vZGUuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBsZXQgYXBwbGllZEZpbHRlcnMgPSB0aGlzLmdldFNldE9wZXJhdG9yRmlsdGVyKGV2ZW50LCB0aGlzLnN0YXRlRGF0YVNvdXJjZS5nZXQoaXRlbS52aWV3SWQpKTtcbiAgICAgICAgICAgIGxldCBmb3VuZCA9ICh0aGlzLmRhdGFTZXRNb2RhbCBhcyBhbnlbXSkuZmluZChkID0+IGQuZGF0YXNldElkID09PSBpdGVtLmRhdGFzZXRJZCk7XG4gICAgICAgICAgICBkZWxldGVkVmlld0lkcy5wdXNoKGl0ZW0udmlld0lkKTtcbiAgICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICAgIGFwaUNhbGxzLnB1c2godGhpcy5kYXRhc2V0U2VydmljZS5nZXREYXRhRnJvbURhdGFTZXQoZm91bmQsIGl0ZW0uZGF0YXNldElkLCBhcHBsaWVkRmlsdGVycykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgUHJvbWlzZS5hbGwoYXBpQ2FsbHMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0gdGhpcy5kYXRhc2V0U2VydmljZS5nZXRVbmlxdWVEYXRhU2V0T2JqZWN0KCk7XG4gICAgICAgICAgICAvLyBub2RlLm5vZGVQcm9wZXJ0aWVzWyd3aWRnZXRQYXJhbXMnXSA9IGV2ZW50LnRhYmxlVGl0bGU7XG4gICAgICAgICAgICB0aGlzLmxvYWRTaW5nbGVXaWRnZXROb2RlKG5vZGUsIHRoaXMubWFpblBhZ2VEaXZFbGVtZW50LCB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSh0aGlzLm1haW5QYWdlRGl2RWxlbWVudCk7XG4gICAgICAgICAgICB9LCAyMDApO1xuXG4gICAgICAgIH0pO1xuICAgICAgICAvLyB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0TW9kYWxWaWV3QnlSb3dDTGljayhldmVudCwgdmlldykge1xuICAgICAgICBsZXQgYXBpQ2FsbHMgPSBbXTtcbiAgICAgICAgbGV0IGFwcGxpZWRGaWx0ZXJzID0gdGhpcy5nZXRTZXRPcGVyYXRvckZpbHRlcihldmVudCwgdGhpcy5zdGF0ZURhdGFTb3VyY2UuZ2V0KGV2ZW50LnZpZXdJZCkpO1xuICAgICAgICB2aWV3LmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKGNvbnRlbnRWaWV3ID0+IHtcbiAgICAgICAgICAgIGxldCBmb3VuZCA9ICh0aGlzLmRhdGFTZXRNb2RhbCBhcyBhbnlbXSkuZmluZChkID0+IGQuZGF0YXNldElkID09PSBjb250ZW50Vmlldy5kYXRhc2V0SWQpO1xuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgYXBpQ2FsbHMucHVzaCh0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldERhdGFGcm9tRGF0YVNldChmb3VuZCwgY29udGVudFZpZXcuZGF0YXNldElkLCBhcHBsaWVkRmlsdGVycykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoYXBpQ2FsbHMpXG5cblxuICAgICAgICB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZSA9IHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlLmZpbHRlcihlID0+IGUuZGlzcGxheUtleSAhPT0gZXZlbnQua2V5VG9QYXNzKTtcbiAgICAgICAgdmlldy5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaCh2aWV3Zm9yRGF0YVNldCA9PiB7XG5cbiAgICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICAgICAgXCJmaWx0ZXJzXCI6IGFwcGxpZWRGaWx0ZXJzLFxuICAgICAgICAgICAgICAgIFwia2V5VG9QYXNzXCI6IHRoaXMudXBkYXRlT3BlcmF0b3JEYXRhKGV2ZW50LmtleVRvUGFzcywgZXZlbnQuZGF0YSksXG4gICAgICAgICAgICAgICAgXCJkcmlsbERvd25UeXBlXCI6IGV2ZW50LmRyaWxsRG93blR5cGUsXG4gICAgICAgICAgICAgICAgXCJkcmlsbGRvd25Gcm9tXCI6IGV2ZW50LmRyaWxsZG93bkZyb21cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RhdGVEYXRhU291cmNlLnNldCh2aWV3Zm9yRGF0YVNldFsndmlld0lkJ10sIG9iailcbiAgICAgICAgfSk7XG4gICAgICAgIHZpZXcubm9kZVByb3BlcnRpZXNbJ2Rpc3BsYXknXSA9IHRydWU7XG4gICAgICAgIHZpZXcubm9kZVByb3BlcnRpZXNbJ3dpZGdldFBhcmFtcyddID0gZXZlbnQudGFibGVUaXRsZTtcbiAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0gdGhpcy5kYXRhc2V0U2VydmljZS5nZXRVbmlxdWVEYXRhU2V0T2JqZWN0KCk7XG4gICAgICAgIHRoaXMubW9kYWxDb25maWdzID0ge1xuICAgICAgICAgICAgdmlldzogdmlldyxcbiAgICAgICAgICAgIGRhdGFzb3VyY2U6IHRoaXMudW5pcXVlRGF0YVNldE9iamVjdFxuICAgICAgICB9XG4gICAgICAgIC8vIHRoaXMubG9hZFNpbmdsZVdpZGdldE5vZGUodmlldywgdGhpcy5tYWluUGFnZURpdkVsZW1lbnQsIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaXNQb3B1cFZpZXcgPSB0cnVlO1xuICAgICAgICB9LCAyMDApO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFZpZXdCeVJvd0NMaWNrKGV2ZW50LCB2aWV3KSB7XG4gICAgICAgIGxldCBhcGlDYWxscyA9IFtdO1xuICAgICAgICBsZXQgY2hhdEFwaUNhbGwgPSBbXTtcbiAgICAgICAgbGV0IGFwcGxpZWRGaWx0ZXJzID0gdGhpcy5nZXRTZXRPcGVyYXRvckZpbHRlcihldmVudCwgdGhpcy5zdGF0ZURhdGFTb3VyY2UuZ2V0KGV2ZW50LnZpZXdJZCkpO1xuXG4gICAgICAgIHZpZXcuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2goY29udGVudFZpZXcgPT4ge1xuICAgICAgICAgICAgbGV0IGZvdW5kID0gKHRoaXMuZGF0YVNldE1vZGFsIGFzIGFueVtdKS5maW5kKGQgPT4gZC5kYXRhc2V0SWQgPT09IGNvbnRlbnRWaWV3LmRhdGFzZXRJZCk7XG4gICAgICAgICAgICAvLyBsZXQgcXVlcnlQYXJhbXMgPSB0aGlzLmdldEZpbHRlcnNGb3JRdWVyeVBhcmFtcyhhcHBsaWVkRmlsdGVycywgZm91bmQuY29uZmlnLnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycywgY29udGVudFZpZXcpO1xuXG4gICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICBhcGlDYWxscy5wdXNoKHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0RGF0YUZyb21EYXRhU2V0KGZvdW5kLCBjb250ZW50Vmlldy5kYXRhc2V0SWQsIGFwcGxpZWRGaWx0ZXJzKSk7XG4gICAgICAgICAgICAgICAgY2hhdEFwaUNhbGwucHVzaCh0aGlzLmNoYXRBcGlTZXJ2aWNlLmdldERhdGFGb3JDaGF0QWkodGhpcy5wYWdlSWQsIGNvbnRlbnRWaWV3LCBhcHBsaWVkRmlsdGVycykpO1xuXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChhcGlDYWxscylcblxuXG4gICAgICAgIHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlID0gdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2UuZmlsdGVyKGUgPT4gZS5kaXNwbGF5S2V5ICE9PSBldmVudC5rZXlUb1Bhc3MpO1xuICAgICAgICB2aWV3LmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKHZpZXdmb3JEYXRhU2V0ID0+IHtcblxuICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICBcImZpbHRlcnNcIjogYXBwbGllZEZpbHRlcnMsXG4gICAgICAgICAgICAgICAgXCJrZXlUb1Bhc3NcIjogdGhpcy51cGRhdGVPcGVyYXRvckRhdGEoZXZlbnQua2V5VG9QYXNzLCBldmVudC5kYXRhKSxcbiAgICAgICAgICAgICAgICBcImRyaWxsRG93blR5cGVcIjogZXZlbnQuZHJpbGxEb3duVHlwZSxcbiAgICAgICAgICAgICAgICBcImRyaWxsZG93bkZyb21cIjogZXZlbnQuZHJpbGxkb3duRnJvbVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZURhdGFTb3VyY2Uuc2V0KHZpZXdmb3JEYXRhU2V0Wyd2aWV3SWQnXSwgb2JqKVxuICAgICAgICB9KTtcbiAgICAgICAgdmlldy5ub2RlUHJvcGVydGllc1snZGlzcGxheSddID0gdHJ1ZTtcbiAgICAgICAgdmlldy5ub2RlUHJvcGVydGllc1snd2lkZ2V0UGFyYW1zJ10gPSBldmVudC50YWJsZVRpdGxlO1xuICAgICAgICBjb25zdCBwcmVmaXhlZElkID0gYGlkLSR7dmlldy5pZH1gO1xuICAgICAgICBjb25zdCBjb250YWluZXJFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7cHJlZml4ZWRJZH1gKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0gdGhpcy5kYXRhc2V0U2VydmljZS5nZXRVbmlxdWVEYXRhU2V0T2JqZWN0KCk7XG4gICAgICAgIHRoaXMubG9hZFNpbmdsZVdpZGdldE5vZGUodmlldywgdGhpcy5tYWluUGFnZURpdkVsZW1lbnQsIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCk7XG5cbiAgICAgICAgbGV0IG5hdmlnYXRpb246IE5hdmlnYXRpb25FeHRyYXMgPSB7XG4gICAgICAgICAgICBxdWVyeVBhcmFtczogYXBwbGllZEZpbHRlcnNbJ29wZXJhdGlvbkZpbHRlciddLFxuICAgICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogXCJtZXJnZVwiXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCBuYXZpZ2F0aW9uKTtcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5zdGF0ZURhdGFTb3VyY2UpO1xuXG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKHRoaXMubWFpblBhZ2VEaXZFbGVtZW50KTtcbiAgICAgICAgfSwgMjAwKTtcbiAgICB9XG5cbiAgICByZXBsYWNlQXNzb2NpYXRlZFBhcmFtcyh0ZW1wbGF0ZTogc3RyaW5nLCBwYXJhbXM6IGFueSwgYXBwbGllZEZpbHRlcnM6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKC9cXCQoRnxQKVxceyhbXn1dKylcXH0vZywgKG1hdGNoLCB0eXBlLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlID09PSBcIkZcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcHBsaWVkRmlsdGVycy5vcGVyYXRpb25GaWx0ZXI/LltrZXldID8/IFwiXCI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwiUFwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtcz8uW2tleV0gPz8gXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2Nyb2xsVG9Cb3R0b20oY29udGFpbmVyOiBIVE1MRWxlbWVudCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5zY3JvbGxJbnRvVmlldyh7YmxvY2s6ICdlbmQnfSk7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuICAgICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICBmaW5kV2lkZ2V0QnlJZChjb25maWdzOiBhbnlbXSwgaWQ6IHN0cmluZyk6IGFueSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGZvciAoY29uc3QgY29uZmlnIG9mIGNvbmZpZ3MpIHtcbiAgICAgICAgICAgIGlmIChjb25maWcuaWQgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb25maWcud2lkZ2V0Tm9kZSAmJiBjb25maWcud2lkZ2V0Tm9kZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLmZpbmRXaWRnZXRCeUlkKGNvbmZpZy53aWRnZXROb2RlLCBpZCk7XG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB1cGRhdGVPcGVyYXRvckRhdGEoa2V5X25hbWU6IHN0cmluZ1tdLCB2YWx1ZV9kYXRhOiBhbnkpOiBhbnkge1xuICAgICAgICBsZXQgb3BlcmF0b3IgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5X25hbWUpIHtcbiAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHt9O1xuICAgICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZV9kYXRhW2tleV07XG4gICAgICAgICAgICBvcGVyYXRvci5wdXNoKG9iailcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3BlcmF0b3I7XG4gICAgfVxuXG5cbiAgICBnZXRFbGVtZW50T2ZDdXJyZW50Vmlldyhub2RlLCB2aWV3SWQpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZE9iamVjdCA9IG5vZGUuY29tcENvbmZpZy52aWV3Q29uZmlnLmZpbmQob2JqZWN0ID0+IG9iamVjdC52aWV3SWQgPT09IHZpZXdJZCk7XG4gICAgICAgIHJldHVybiBtYXRjaGVkT2JqZWN0ID8gbm9kZSA6IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0SG91cmx5RGF0YShub2RlKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZWRPYmplY3QgPSBub2RlLmNvbXBDb25maWcudmlld0NvbmZpZy5maW5kKG9iamVjdCA9PiBvYmplY3Qua3BpQ29uZmlnLmZvcm1hdGUgPT09ICdob3VybHknKTtcbiAgICAgICAgcmV0dXJuIG1hdGNoZWRPYmplY3QgPyBub2RlIDogbnVsbDtcbiAgICB9XG5cbiAgICBnZXRTZXRPcGVyYXRvckZpbHRlcihvYmplY3REYXRhLCBwcmV2aW91c1ZpZXdTdGF0ZXMpIHtcblxuICAgICAgICBjb25zdCB7ZGF0YSwga2V5VG9QYXNzfSA9IG9iamVjdERhdGE7XG4gICAgICAgIGNvbnN0IGFwcGxpZWRGaWx0ZXIgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHByZXZpb3VzVmlld1N0YXRlcy5maWx0ZXJzLm9wZXJhdGlvbkZpbHRlcikpO1xuXG4gICAgICAgIGtleVRvUGFzcy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkS2V5ID0ga2V5LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCAnJyk7XG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRLZXkgPT09IFwicmVjb3JkZGF0ZVwiICYmIFwic3RhcnREYXRlXCIgaW4gYXBwbGllZEZpbHRlciAmJiBcImVuZERhdGVcIiBpbiBhcHBsaWVkRmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGFwcGxpZWRGaWx0ZXIuc3RhcnREYXRlID0gZGF0YVtrZXldO1xuICAgICAgICAgICAgICAgICAgICBhcHBsaWVkRmlsdGVyLmVuZERhdGUgPSBkYXRhW2tleV07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXBwbGllZEZpbHRlcltrZXldID0gZGF0YVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRvcGVyYXRpb25GaWx0ZXIgPSB0aGlzLmdsb2JhbERlZmF1bHRGaWx0ZXIub3BlcmF0aW9uRmlsdGVyO1xuICAgICAgICBpZiAoZGVmYXVsdG9wZXJhdGlvbkZpbHRlcikge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZGVmYXVsdG9wZXJhdGlvbkZpbHRlcikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghYXBwbGllZEZpbHRlci5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFwcGxpZWRGaWx0ZXJba2V5XSA9IGRlZmF1bHRvcGVyYXRpb25GaWx0ZXJba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9wZXJhdGlvbkZpbHRlciA9IHt9O1xuICAgICAgICBvcGVyYXRpb25GaWx0ZXJbJ29wZXJhdGlvbkZpbHRlciddID0gYXBwbGllZEZpbHRlcjtcbiAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkZpbHRlcjtcbiAgICB9XG5cblxuICAgIGdldFJlYXJjaFJlc3VsdEZyb21JbnB1dEJveChpbnB1dFZhbHVlLCB2aWV3Q29uZmlnLCBmaWx0ZXJPYmplY3QpIHtcbiAgICAgICAgbGV0IHZpZXcgPSB2aWV3Q29uZmlnO1xuICAgICAgICBsZXQgZXZlbnROb2RlID0ge2RhdGE6IHt9LCBrZXlUb1Bhc3M6IFtdfVxuICAgICAgICBldmVudE5vZGUuZGF0YVtmaWx0ZXJPYmplY3Quc2VydmVyX2NvbHVtbl0gPSBpbnB1dFZhbHVlO1xuICAgICAgICBldmVudE5vZGVbJ2tleVRvUGFzcyddID0gW2ZpbHRlck9iamVjdC5zZXJ2ZXJfY29sdW1uXTtcbiAgICAgICAgbGV0IGFwaUNhbGxzID0gW107XG5cbiAgICAgICAgdmlldy5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaChjb250ZW50VmlldyA9PiB7XG4gICAgICAgICAgICBsZXQgYXBwbGllZEZpbHRlcnMgPSB0aGlzLmdldFNldE9wZXJhdG9yRmlsdGVyKGV2ZW50Tm9kZSwgdGhpcy5zdGF0ZURhdGFTb3VyY2UuZ2V0KGNvbnRlbnRWaWV3LnZpZXdJZCkpO1xuICAgICAgICAgICAgbGV0IGZvdW5kID0gKHRoaXMuZGF0YVNldE1vZGFsIGFzIGFueVtdKS5maW5kKGQgPT4gZC5kYXRhc2V0SWQgPT09IGNvbnRlbnRWaWV3LmRhdGFzZXRJZCk7XG4gICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICBhcGlDYWxscy5wdXNoKHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0RGF0YUZyb21EYXRhU2V0KGZvdW5kLCBjb250ZW50Vmlldy5kYXRhc2V0SWQsIGFwcGxpZWRGaWx0ZXJzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB2aWV3Q29uZmlnLm5vZGVQcm9wZXJ0aWVzWydkaXNwbGF5J10gPSBmYWxzZTtcbiAgICAgICAgY29uc3QgcHJlZml4ZWRJZCA9IGBpZC0ke3ZpZXdDb25maWcuaWR9YDtcbiAgICAgICAgY29uc3QgZWxlbWVudFRvSGlkZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3ByZWZpeGVkSWR9YCkgYXMgSFRNTEVsZW1lbnQ7IC8vIENhc3QgdG8gSFRNTEVsZW1lbnRcbiAgICAgICAgaWYgKGVsZW1lbnRUb0hpZGUpIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0hpZGUucmVtb3ZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBQcm9taXNlLmFsbChhcGlDYWxscykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldFVuaXF1ZURhdGFTZXRPYmplY3QoKTtcblxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2UgPSB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZS5maWx0ZXIoZSA9PiBlLmRpc3BsYXlLZXkgIT09IHZpZXdDb25maWcua2V5VG9QYXNzKTtcblxuICAgICAgICAgICAgdmlldy5ub2RlUHJvcGVydGllc1snZGlzcGxheSddID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIHZpZXcubm9kZVByb3BlcnRpZXNbJ3dpZGdldFBhcmFtcyddID0gZXZlbnQudGFibGVUaXRsZTtcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeGVkSWQgPSBgaWQtJHt2aWV3LmlkfWA7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7cHJlZml4ZWRJZH1gKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMubG9hZFNpbmdsZVdpZGdldE5vZGUodmlldywgdGhpcy5tYWluUGFnZURpdkVsZW1lbnQsIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKHRoaXMubWFpblBhZ2VEaXZFbGVtZW50KTtcbiAgICAgICAgICAgIH0sIDIwMCk7XG4gICAgICAgICAgICBsZXQgcGFyYW1zID0ge307XG4gICAgICAgICAgICBwYXJhbXNbZmlsdGVyT2JqZWN0LnNlcnZlcl9jb2x1bW5dID0gaW5wdXRWYWx1ZTtcbiAgICAgICAgICAgIGxldCBuYXZpZ2F0aW9uOiBOYXZpZ2F0aW9uRXh0cmFzID0ge1xuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiBwYXJhbXMsXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogXCJtZXJnZVwiXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIG5hdmlnYXRpb24pO1xuICAgICAgICB9KTtcbiAgICB9XG5cblxuICAgIHN1Ym1pdEZpbHRlcigpIHtcbiAgICAgICAgbGV0IHZpZXcgPSB0aGlzLm5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZS52aWV3Q29uZmlnO1xuICAgICAgICAvLyBsZXQgY2FsX3ZhbHVlID0gKHBhcnNlRmxvYXQoc2VhcmNoVGVybSkgLyAxMDApXG4gICAgICAgIGxldCBhcGlDYWxscyA9IFtdO1xuICAgICAgICB0aGlzLmhhdmluZ0RhdGFPYmplY3QgPSB0aGlzLm5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZS5oYXZpbmdDb25maWcuZmlsdGVyKHZhbHVlID0+IHZhbHVlLnZhbHVlICE9PSBcIlwiKTtcbiAgICAgICAgdmlldy5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaChjb250ZW50VmlldyA9PiB7XG4gICAgICAgICAgICBsZXQgYXBwbGllZEZpbHRlcnMgPSB0aGlzLnN0YXRlRGF0YVNvdXJjZS5nZXQoY29udGVudFZpZXcudmlld0lkKTtcbiAgICAgICAgICAgIGxldCBmb3VuZCA9ICh0aGlzLmRhdGFTZXRNb2RhbCBhcyBhbnlbXSkuZmluZChkID0+IGQuZGF0YXNldElkID09PSBjb250ZW50Vmlldy5kYXRhc2V0SWQpO1xuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgYXBpQ2FsbHMucHVzaCh0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldERhdGFGcm9tRGF0YVNldChmb3VuZCwgY29udGVudFZpZXcuZGF0YXNldElkLCBhcHBsaWVkRmlsdGVycy5maWx0ZXJzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBQcm9taXNlLmFsbChhcGlDYWxscykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldFVuaXF1ZURhdGFTZXRPYmplY3QoKTtcblxuICAgICAgICAgICAgdGhpcy5ub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2Uudmlld0NvbmZpZy5ub2RlUHJvcGVydGllc1snZGlzcGxheSddID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBwcmVmaXhlZElkID0gYGlkLSR7dGhpcy5ub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2Uudmlld0NvbmZpZy5pZH1gO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudFRvSGlkZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3ByZWZpeGVkSWR9YCkgYXMgSFRNTEVsZW1lbnQ7IC8vIENhc3QgdG8gSFRNTEVsZW1lbnRcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9IaWRlKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudFRvSGlkZS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2UgPSB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZS5maWx0ZXIoZSA9PiBlLmRpc3BsYXlLZXkgIT09IHRoaXMubm9kZXByb3BlcnRpY2VGaWx0ZXJEYXRhU291cmNlLnZpZXdDb25maWcua2V5VG9QYXNzKTtcbiAgICAgICAgICAgIHRoaXMuaXNXaWRnZXRGaWx0ZXJzID0gZmFsc2U7XG4gICAgICAgICAgICB2aWV3Lm5vZGVQcm9wZXJ0aWVzWydkaXNwbGF5J10gPSB0cnVlO1xuICAgICAgICAgICAgLy8gdmlldy5ub2RlUHJvcGVydGllc1snd2lkZ2V0UGFyYW1zJ10gPSBldmVudC50YWJsZVRpdGxlO1xuICAgICAgICAgICAgLy8gY29uc3QgcHJlZml4ZWRJZCA9IGBpZC0ke3ZpZXcuaWR9YDtcbiAgICAgICAgICAgIC8vIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtwcmVmaXhlZElkfWApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5sb2FkU2luZ2xlV2lkZ2V0Tm9kZSh2aWV3LCB0aGlzLm1haW5QYWdlRGl2RWxlbWVudCwgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0KTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20odGhpcy5tYWluUGFnZURpdkVsZW1lbnQpO1xuICAgICAgICAgICAgfSwgMjAwKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICBnZXRXaWRnZXRGaWx0ZXJGb3JUZW1wbGF0ZSh2YWx1ZSkge1xuXG4gICAgICAgIGxldCBhcGlDYWxscyA9IFtdO1xuICAgICAgICBjb25zdCBkZWxldGVkVmlld0lkcyA9IFtdO1xuICAgICAgICB2YWx1ZS52aWV3Tm9kZXMuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBsZXQgd2lkZ2V0RmlsdGVyID0gdGhpcy5zdGF0ZURhdGFTb3VyY2UuZ2V0KGl0ZW0udmlld0lkKTtcbiAgICAgICAgICAgIGxldCBhcHBsaWVkRmlsdGVycyA9IHdpZGdldEZpbHRlci5maWx0ZXJzO1xuICAgICAgICAgICAgbGV0IGZvdW5kID0gKHRoaXMuZGF0YVNldE1vZGFsIGFzIGFueVtdKS5maW5kKGQgPT4gZC5kYXRhc2V0SWQgPT09IGl0ZW0uZGF0YXNldElkKTtcbiAgICAgICAgICAgIGRlbGV0ZWRWaWV3SWRzLnB1c2goaXRlbS52aWV3SWQpO1xuICAgICAgICAgICAgY29uc3QgaGF2aW5nID0gT2JqZWN0LmVudHJpZXModmFsdWUub3BlcmF0aW9uRmlsdGVyKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICAgICAgICAgICAgICBjb2x1bW5OYW1lOiBrZXksXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwiZmxvYXRcIixcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogXCJndGVcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgZm91bmQuY29uZmlnLnF1ZXJ5Q29uZmlnWydoYXZpbmdzJ10gPSBoYXZpbmc7XG4gICAgICAgICAgICAgICAgYXBpQ2FsbHMucHVzaCh0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldERhdGFGcm9tRGF0YVNldChmb3VuZCwgaXRlbS5kYXRhc2V0SWQsIGFwcGxpZWRGaWx0ZXJzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBQcm9taXNlLmFsbChhcGlDYWxscykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldFVuaXF1ZURhdGFTZXRPYmplY3QoKTtcbiAgICAgICAgICAgIC8vIHZhbHVlLnZpZXdOb2Rlcy5ub2RlUHJvcGVydGllc1snd2lkZ2V0UGFyYW1zJ10gPSBldmVudC50YWJsZVRpdGxlO1xuICAgICAgICAgICAgdGhpcy5sb2FkU2luZ2xlV2lkZ2V0Tm9kZSh2YWx1ZS52aWV3Tm9kZXMsIHRoaXMubWFpblBhZ2VEaXZFbGVtZW50LCB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSh0aGlzLm1haW5QYWdlRGl2RWxlbWVudCk7XG4gICAgICAgICAgICB9LCAyMDApO1xuXG4gICAgICAgIH0pO1xuICAgICAgICAvLyB9XG4gICAgfVxuXG4gICAgYXN5bmMgbG9hZERhdGFCeU9wZXJhdG9yKG9wTmFtZSkge1xuICAgICAgICBsZXQgZmlsdGVyID0ge29wZXJhdGlvbkZpbHRlcjoge3N0YXJ0RGF0ZTogXCJcIiwgZW5kRGF0ZTogXCJcIiwgb3BlcmF0b3Jfa2V5OiBcIlwifX07XG4gICAgICAgIGZpbHRlci5vcGVyYXRpb25GaWx0ZXJbJ3N0YXJ0RGF0ZSddID0gdGhpcy5kZWZhdWx0U3RhcnREYXRlO1xuICAgICAgICBmaWx0ZXIub3BlcmF0aW9uRmlsdGVyWydlbmREYXRlJ10gPSB0aGlzLmRlZmF1bHRFbmREYXRlO1xuICAgICAgICBmaWx0ZXIub3BlcmF0aW9uRmlsdGVyWydvcGVyYXRvcl9rZXknXSA9IG9wTmFtZTtcbiAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuXG4gICAgICAgIGxldCBuYXZpZ2F0aW9uOiBOYXZpZ2F0aW9uRXh0cmFzID0ge1xuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgICAgICAgICBcIm9wZXJhdG9yTmFtZVwiOiBvcE5hbWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiBcIm1lcmdlXCJcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIG5hdmlnYXRpb24pO1xuXG4gICAgICAgIC8vIHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnID0gW107XG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0UGFnZURhdGFTb3VyY2UodHJ1ZSk7XG4gICAgICAgIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCA9IHt9O1xuICAgICAgICBsZXQgYXBpQ2FsbHMgPSBbXTtcblxuICAgICAgICB0aGlzLmFsbFdpZGdldEJ5RGF0YXNldC5mb3JFYWNoKHZpZXcgPT4ge1xuICAgICAgICAgICAgdmlldy5kYXRhc2V0SWRzLmZvckVhY2goaWQgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBmb3VuZCA9ICh0aGlzLmRhdGFTZXRNb2RhbCBhcyBhbnlbXSkuZmluZChkID0+IGQuZGF0YXNldElkID09PSBpZC5kYXRhc2V0SWQpO1xuICAgICAgICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICBhcGlDYWxscy5wdXNoKHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0RGF0YUZyb21EYXRhU2V0KGZvdW5kLCBpZC5kYXRhc2V0SWQsIGZpbHRlcikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgUHJvbWlzZS5hbGwoYXBpQ2FsbHMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nbG9iYWxEZWZhdWx0RmlsdGVyID0gZmlsdGVyO1xuICAgICAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0gdGhpcy5kYXRhc2V0U2VydmljZS5nZXRVbmlxdWVEYXRhU2V0T2JqZWN0KCk7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZURpdkVsZW1lbnRzKHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIGFzeW5jIGdldENvbnRleHRGaWx0ZXJEYXRhKHZhbHVlKSB7XG5cbiAgICAgICAgbGV0IGZpbHRlciA9IHtvcGVyYXRpb25GaWx0ZXI6IHtzdGFydERhdGU6IFwiXCIsIGVuZERhdGU6IFwiXCJ9fTtcbiAgICAgICAgZmlsdGVyLm9wZXJhdGlvbkZpbHRlclsnc3RhcnREYXRlJ10gPSB0aGlzLmRlZmF1bHRTdGFydERhdGU7XG4gICAgICAgIGZpbHRlci5vcGVyYXRpb25GaWx0ZXJbJ2VuZERhdGUnXSA9IHRoaXMuZGVmYXVsdEVuZERhdGU7XG4gICAgICAgIGZpbHRlci5vcGVyYXRpb25GaWx0ZXJbdmFsdWUub3BlcmF0b3JOYW1lXSA9IHRoaXMucGFyc2VJbnB1dCh2YWx1ZS5kZWZhdWx0RmlsdGVyVmFsdWUpO1xuICAgICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IHRydWU7XG4gICAgICAgIGxldCBvYmogPSB7fTtcbiAgICAgICAgb2JqW3ZhbHVlLm9wZXJhdG9yTmFtZV0gPSB2YWx1ZS5kZWZhdWx0RmlsdGVyVmFsdWU7XG4gICAgICAgIGxldCBuYXZpZ2F0aW9uOiBOYXZpZ2F0aW9uRXh0cmFzID0ge1xuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IG9iaixcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IFwibWVyZ2VcIlxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwgbmF2aWdhdGlvbik7XG5cbiAgICAgICAgLy8gdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcgPSBbXTtcbiAgICAgICAgYXdhaXQgdGhpcy5nZXRQYWdlRGF0YVNvdXJjZSh0cnVlKTtcbiAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0ge307XG4gICAgICAgIGxldCBhcGlDYWxscyA9IFtdO1xuXG4gICAgICAgIHRoaXMuYWxsV2lkZ2V0QnlEYXRhc2V0LmZvckVhY2godmlldyA9PiB7XG4gICAgICAgICAgICB2aWV3LmRhdGFzZXRJZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGZvdW5kID0gKHRoaXMuZGF0YVNldE1vZGFsIGFzIGFueVtdKS5maW5kKGQgPT4gZC5kYXRhc2V0SWQgPT09IGlkLmRhdGFzZXRJZCk7XG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGFwaUNhbGxzLnB1c2godGhpcy5kYXRhc2V0U2VydmljZS5nZXREYXRhRnJvbURhdGFTZXQoZm91bmQsIGlkLmRhdGFzZXRJZCwgZmlsdGVyKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBQcm9taXNlLmFsbChhcGlDYWxscykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdsb2JhbERlZmF1bHRGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgICAgICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldFVuaXF1ZURhdGFTZXRPYmplY3QoKTtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRGl2RWxlbWVudHModGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0LCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHBhcnNlSW5wdXQoaW5wdXQpIHtcbiAgICAgICAgaW5wdXQgPSBpbnB1dC50cmltKCk7XG5cbiAgICAgICAgaWYgKGlucHV0LmluY2x1ZGVzKCcsJykpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5zcGxpdCgnLCcpLm1hcChpdGVtID0+IGl0ZW0udHJpbSgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgZ2V0RHJpbGxkb3duRGlzcGxheUJ5VXJsUGFyYW1zKGFsbF92aWV3cykge1xuICAgICAgICB0aGlzLmRlZmF1bHRWaWV3SWRzT25QYWdlUmVmcmVzaCA9IFtdO1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zO1xuICAgICAgICB0aGlzLmRlZmF1bHRWaWV3SWRzT25QYWdlUmVmcmVzaCA9IChwYXJhbXNbJ3ZpZXdzJ10gJiYgcGFyYW1zWyd2aWV3cyddICE9PSBcIlwiKSA/IEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KHBhcmFtc1sndmlld3MnXSkpIDogW107XG4gICAgICAgIGFsbF92aWV3cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgZm9yIChsZXQgZW50cnkgb2YgZWxlbWVudC53aWRnZXROb2RlKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNob3VsZERpc3BsYXkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBlbnRyeS5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaCh2aWV3ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFZpZXdJZHNPblBhZ2VSZWZyZXNoLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm91bmRPYmplY3QgPSB0aGlzLmRlZmF1bHRWaWV3SWRzT25QYWdlUmVmcmVzaC5maW5kKHZhbCA9PiB2YWwudmlld0lkID09PSB2aWV3LnZpZXdJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmRPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGREaXNwbGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGREaXNwbGF5KSB7XG4gICAgICAgICAgICAgICAgICAgIGVudHJ5Lm5vZGVQcm9wZXJ0aWVzLmRpc3BsYXkgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuXG4gICAgfVxuXG5cbiAgICBnZXRGaWx0ZXJzRm9yUXVlcnlQYXJhbXMob3BlcmF0b3JzLCBmaWx0ZXJzLCB2aWV3UGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IG9wZXJhdGlvbkZpbHRlciA9IG9wZXJhdG9ycy5vcGVyYXRpb25GaWx0ZXIgfHwge307XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYXJhbXMgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zO1xuXG4gICAgICAgIGxldCBjdXJyZW50Vmlld3M6IGFueVtdID0gW107XG4gICAgICAgIGlmIChjdXJyZW50UGFyYW1zWyd2aWV3cyddKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRWaWV3cyA9IEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KGN1cnJlbnRQYXJhbXNbJ3ZpZXdzJ10pKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiSW52YWxpZCB2aWV3cyBwYXJhbVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbHRlckRhdGE6IGFueSA9IHt2aWV3SWQ6IHZpZXdQYXJhbXMudmlld0lkfTtcblxuICAgICAgICBmaWx0ZXJzLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsS2V5ID0gZmlsdGVyLmxvY2FsQ29sdW1uO1xuICAgICAgICAgICAgY29uc3Qgc2VydmVyS2V5ID0gZmlsdGVyLnNlcnZlckNvbHVtbjtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IG9wZXJhdGlvbkZpbHRlcltsb2NhbEtleV07XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVyRGF0YVtzZXJ2ZXJLZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSBjdXJyZW50Vmlld3MuZmluZEluZGV4KHYgPT4gdi52aWV3SWQgPT09IHZpZXdQYXJhbXMudmlld0lkKTtcblxuICAgICAgICBpZiAoZXhpc3RpbmdJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGN1cnJlbnRWaWV3c1tleGlzdGluZ0luZGV4XSA9IGZpbHRlckRhdGE7XG4gICAgICAgICAgICBjdXJyZW50Vmlld3MgPSBjdXJyZW50Vmlld3Muc2xpY2UoMCwgZXhpc3RpbmdJbmRleCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3VycmVudFZpZXdzLnB1c2goZmlsdGVyRGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbmNvZGVkVmlld3MgPSBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoY3VycmVudFZpZXdzKSk7XG5cbiAgICAgICAgY29uc3QgbWVyZ2VkUGFyYW1zID0ge1xuICAgICAgICAgICAgLi4uY3VycmVudFBhcmFtcyxcbiAgICAgICAgICAgIHZpZXdzOiBlbmNvZGVkVmlld3NcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBuYXZpZ2F0aW9uOiBOYXZpZ2F0aW9uRXh0cmFzID0ge1xuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IG1lcmdlZFBhcmFtcyxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZSdcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwgbmF2aWdhdGlvbik7XG4gICAgfVxuXG4gICAgZ2V0RHJpbGRvd25GaWx0ZXIoZHJpbGRvd25GaWx0ZXIsIGRlZmF1bHRGaWx0ZXIpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWREYXRlRmllbGRzID0gWydyZWNvcmREYXRlJywgJ3JlY29yZF9kYXRlJywgJ2V2ZW50RGF0ZScsICdldmVudF9kYXRlJ107XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGVmYXVsdEZpbHRlcikpO1xuICAgICAgICBjb25zdCB7dmlld0lkLCAuLi5maWx0ZXJlZERyaWxsZG93bn0gPSBkcmlsZG93bkZpbHRlcjtcbiAgICAgICAgbGV0IGRhdGVWYWx1ZSA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGV4cGVjdGVkRGF0ZUZpZWxkcykge1xuICAgICAgICAgICAgaWYgKGZpbHRlcmVkRHJpbGxkb3duW2tleV0pIHtcbiAgICAgICAgICAgICAgICBkYXRlVmFsdWUgPSBmaWx0ZXJlZERyaWxsZG93bltrZXldO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRlVmFsdWUpIHtcbiAgICAgICAgICAgIHJlc3VsdC5vcGVyYXRpb25GaWx0ZXIuc3RhcnREYXRlID0gZGF0ZVZhbHVlO1xuICAgICAgICAgICAgcmVzdWx0Lm9wZXJhdGlvbkZpbHRlci5lbmREYXRlID0gZGF0ZVZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGZpbHRlcmVkRHJpbGxkb3duKSB7XG4gICAgICAgICAgICBpZiAoIWV4cGVjdGVkRGF0ZUZpZWxkcy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0Lm9wZXJhdGlvbkZpbHRlcltrZXldID0gZmlsdGVyZWREcmlsbGRvd25ba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICB9XG5cblxuICAgIGdldFRpdGxlUGFyYW1zKGl0ZW1zKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcblxuICAgICAgICBpdGVtcy5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kT2JqZWN0ID0gdGhpcy5kZWZhdWx0Vmlld0lkc09uUGFnZVJlZnJlc2guZmluZCh2YWwgPT4gdmFsLnZpZXdJZCA9PT0gZWxlbWVudC52aWV3SWQpO1xuICAgICAgICAgICAgaWYgKGZvdW5kT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmVudHJpZXMoZm91bmRPYmplY3QpXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKFtrZXldKSA9PiBrZXkgIT09ICd2aWV3SWQnKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnZlcnQga2V5IHRvIFRpdGxlIENhc2Ugd2l0aCBzcGFjZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEtleSA9IGtleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9fL2csICcgJykgICAgICAgICAgICAgICAgIC8vIHJlcGxhY2UgdW5kZXJzY29yZXMgd2l0aCBzcGFjZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxiXFx3L2csIGNoYXIgPT4gY2hhci50b1VwcGVyQ2FzZSgpKTsgLy8gY2FwaXRhbGl6ZSBlYWNoIHdvcmRcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtmb3JtYXR0ZWRLZXl9ID0gJHt2YWx1ZX1gO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuam9pbignIHwgJyk7XG5cbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goYHwgJHtyZXN1bHR9IGApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0cy5qb2luKCdcXG4nKTsgLy8gb3Igd2hhdGV2ZXIgc2VwYXJhdG9yIHlvdSBwcmVmZXIgYmV0d2VlbiBtdWx0aXBsZSByZXN1bHRzXG4gICAgfVxuXG5cbn1cbiIsIjxhcHAtbG9hZGluZyAqbmdJZj1cImxvYWRpbmdNb2RhbFwiPjwvYXBwLWxvYWRpbmc+XG5cbjxkaXYgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgXCIgI2R5bmFtaWNDb250YWluZXI+PC9kaXY+XG48L2Rpdj5cblxuPGR4LXBvcHVwIFsodmlzaWJsZSldPVwiaXNXaWRnZXRGaWx0ZXJzXCIgW2Nsb3NlT25PdXRzaWRlQ2xpY2tdPVwiZmFsc2VcIiBbZHJhZ0VuYWJsZWRdPVwiZmFsc2VcIiBbd2lkdGhdPVwiODAwXCIgW2hlaWdodF09XCI0MDBcIlxuICAgIFtzaG93VGl0bGVdPVwidHJ1ZVwiIGNsYXNzPVwicG9wdXBcIiB0aXRsZT1cIkRhdGFzZXQgRmlsdGVyXCI+XG4gICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBkYXRhIG9mICdjb250ZW50J1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxuICAgICAgICAgICAgPGR4LXNjcm9sbC12aWV3IFt3aWR0aF09XCInMTAwJSdcIiBbaGVpZ2h0XT1cIic4NSUnXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2UuaGF2aW5nQ29uZmlnOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IG15LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJpdGVtLmNvbHVtbk5hbWVcIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggW2l0ZW1zXT1cIlsnZ2V0JywnbGV0J11cIiBbKG5nTW9kZWwpXT1cIml0ZW0ub3BlcmF0b3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIk9wZXJhdG9yXCI+PC9keC1zZWxlY3QtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwiaXRlbS52YWx1ZVwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwvZHgtc2Nyb2xsLXZpZXc+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZCBteC0xIGZsZXgtZ3JvdyBib3JkZXItdFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX3N1Y2Nlc3NfbWR9fSBjdXJzb3ItcG9pbnRlciBtdC0yXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN1Ym1pdEZpbHRlcigpXCI+U3VibWl0PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cblxuICAgIDwvZGl2PlxuPC9keC1wb3B1cD5cbjxkeC1wb3B1cCBbKHZpc2libGUpXT1cImlzUG9wdXBWaWV3XCIgW2Nsb3NlT25PdXRzaWRlQ2xpY2tdPVwiZmFsc2VcIiBbZHJhZ0VuYWJsZWRdPVwiZmFsc2VcIiBbd2lkdGhdPVwiMTAwMFwiIFtoZWlnaHRdPVwiJ2F1dG8nXCJcbiAgICBbc2hvd1RpdGxlXT1cInRydWVcIiBjbGFzcz1cInBvcHVwXCIgdGl0bGU9XCJQb3B1cCBWaWV3XCI+XG4gICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBkYXRhIG9mICdjb250ZW50J1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICA8YXBwLWR5bmFtaWMtd2lkZ2V0IFttb2RhbENvbmZpZ3NdPVwibW9kYWxDb25maWdzXCIgIFtjb250ZXh0TWVudURhdGFTb3VyY2VdPVwiY29udGV4dE1lbnVEYXRhU291cmNlXCI+XG4gICAgICAgICAgICA8L2FwcC1keW5hbWljLXdpZGdldD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2R4LXBvcHVwPiJdfQ==
|