gamma-app-controller 2.0.5 → 2.0.7
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-menu-controller/application-create-menu/application-create-menu.component.mjs +9 -7
- package/esm2020/lib/shared/advanced-component/gamma-geo-chart/gamma-geo-chart.component.mjs +115 -5
- package/esm2020/lib/shared/advanced-component/google-geo-map/google-geo-map.component.mjs +5 -4
- package/esm2020/lib/template-module/KpiCreationModule/create-kpi-tree.component.mjs +21 -5
- package/fesm2015/gamma-app-controller.mjs +147 -14
- package/fesm2015/gamma-app-controller.mjs.map +1 -1
- package/fesm2020/gamma-app-controller.mjs +141 -13
- package/fesm2020/gamma-app-controller.mjs.map +1 -1
- package/lib/shared/advanced-component/gamma-geo-chart/gamma-geo-chart.component.d.ts +13 -0
- package/lib/template-module/KpiCreationModule/create-kpi-tree.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -67,6 +67,7 @@ export class GoogleGeoMapComponent {
|
|
|
67
67
|
};
|
|
68
68
|
}
|
|
69
69
|
else if (this.mapTYpe == "choroplethMap") {
|
|
70
|
+
debugger;
|
|
70
71
|
let choroplethMapDataSource = new Map();
|
|
71
72
|
let choroplethTooltipDataSource = new Map();
|
|
72
73
|
let chartConfig = value.kpiConfig.dataConfig;
|
|
@@ -467,7 +468,7 @@ export class GoogleGeoMapComponent {
|
|
|
467
468
|
};
|
|
468
469
|
}
|
|
469
470
|
initChoroplethMapMap(chartConfig, tootTipColumn, choroplethMapDataSource, choroplethTooltipDataSource) {
|
|
470
|
-
const map = new google.maps.Map(
|
|
471
|
+
const map = new google.maps.Map(this.googlMap.nativeElement, {
|
|
471
472
|
center: { lat: parseFloat(chartConfig.centerLat), lng: parseFloat(chartConfig.centerLng) },
|
|
472
473
|
zoom: parseInt(chartConfig.zoom)
|
|
473
474
|
});
|
|
@@ -524,10 +525,10 @@ export class GoogleGeoMapComponent {
|
|
|
524
525
|
}
|
|
525
526
|
}
|
|
526
527
|
GoogleGeoMapComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GoogleGeoMapComponent, deps: [{ token: i1.CommonService }], target: i0.ɵɵFactoryTarget.Component });
|
|
527
|
-
GoogleGeoMapComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: GoogleGeoMapComponent, selector: "app-google-geo-map", inputs: { rightClickEnable: "rightClickEnable", chartDataSource: "chartDataSource" }, outputs: { getTableConfigOutPut: "getTableConfigOutPut", oRowClick: "oRowClick", onrightClickContextSelection: "onrightClickContextSelection" }, viewQueries: [{ propertyName: "googlMap", first: true, predicate: ["googlMap"], descendants: true }], ngImport: i0, template: "<div class=\"mx-2 bg-gray-800\">\n <ng-container *ngIf=\"isLoader\">\n <div class=\"flex justify-center items-start bg-gray-800 p-2\">\n <app-loader></app-loader>\n </div>\n </ng-container>\n\n <div class=\"mx-2 pb-2\">\n\n <ng-container>\n <!-- <div id=\"regions_div\" style=\"width: 100%\" ></div> -->\n <div id=\"regions_div\" #googlMap style=\"width: 100%\"></div>\n <div id=\"googlemap\" style=\"width: 100%;\" [style.height]=\"chartHeight\"></div
|
|
528
|
+
GoogleGeoMapComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: GoogleGeoMapComponent, selector: "app-google-geo-map", inputs: { rightClickEnable: "rightClickEnable", chartDataSource: "chartDataSource" }, outputs: { getTableConfigOutPut: "getTableConfigOutPut", oRowClick: "oRowClick", onrightClickContextSelection: "onrightClickContextSelection" }, viewQueries: [{ propertyName: "googlMap", first: true, predicate: ["googlMap"], descendants: true }], ngImport: i0, template: "<div class=\"mx-2 bg-gray-800\">\n <ng-container *ngIf=\"isLoader\">\n <div class=\"flex justify-center items-start bg-gray-800 p-2\">\n <app-loader></app-loader>\n </div>\n </ng-container>\n\n <div class=\"mx-2 pb-2\">\n\n <ng-container>\n <!-- <div id=\"regions_div\" style=\"width: 100%\" ></div> -->\n <div id=\"regions_div\" #googlMap style=\"width: 100%\"></div>\n <!-- <div id=\"googlemap\" style=\"width: 100%;\" [style.height]=\"chartHeight\"></div> -->\n\n </ng-container>\n\n\n\n </div>\n\n\n</div>", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.LoaderComponent, selector: "app-loader" }] });
|
|
528
529
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GoogleGeoMapComponent, decorators: [{
|
|
529
530
|
type: Component,
|
|
530
|
-
args: [{ selector: "app-google-geo-map", template: "<div class=\"mx-2 bg-gray-800\">\n <ng-container *ngIf=\"isLoader\">\n <div class=\"flex justify-center items-start bg-gray-800 p-2\">\n <app-loader></app-loader>\n </div>\n </ng-container>\n\n <div class=\"mx-2 pb-2\">\n\n <ng-container>\n <!-- <div id=\"regions_div\" style=\"width: 100%\" ></div> -->\n <div id=\"regions_div\" #googlMap style=\"width: 100%\"></div>\n <div id=\"googlemap\" style=\"width: 100%;\" [style.height]=\"chartHeight\"></div
|
|
531
|
+
args: [{ selector: "app-google-geo-map", template: "<div class=\"mx-2 bg-gray-800\">\n <ng-container *ngIf=\"isLoader\">\n <div class=\"flex justify-center items-start bg-gray-800 p-2\">\n <app-loader></app-loader>\n </div>\n </ng-container>\n\n <div class=\"mx-2 pb-2\">\n\n <ng-container>\n <!-- <div id=\"regions_div\" style=\"width: 100%\" ></div> -->\n <div id=\"regions_div\" #googlMap style=\"width: 100%\"></div>\n <!-- <div id=\"googlemap\" style=\"width: 100%;\" [style.height]=\"chartHeight\"></div> -->\n\n </ng-container>\n\n\n\n </div>\n\n\n</div>" }]
|
|
531
532
|
}], ctorParameters: function () { return [{ type: i1.CommonService }]; }, propDecorators: { googlMap: [{
|
|
532
533
|
type: ViewChild,
|
|
533
534
|
args: ["googlMap"]
|
|
@@ -543,4 +544,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
543
544
|
type: Input,
|
|
544
545
|
args: ["chartDataSource"]
|
|
545
546
|
}] } });
|
|
546
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLWdlby1tYXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2dvb2dsZS1nZW8tbWFwL2dvb2dsZS1nZW8tbWFwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nb29nbGUtZ2VvLW1hcC9nb29nbGUtZ2VvLW1hcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLE1BQU0sTUFBTSwrQ0FBK0MsQ0FBQzs7Ozs7QUFRbkUsTUFBTSxPQUFPLHFCQUFxQjtJQTJLaEMsWUFBbUIsYUFBNEI7UUFBNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFsSzlCLHlCQUFvQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzdELGNBQVMsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsRCxpQ0FBNEIsR0FDM0MsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNaLHFCQUFnQixHQUFZLElBQUksQ0FBQztRQWUxQyxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBSWIsV0FBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQU14QywrQkFBMEIsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUN2RCx3QkFBbUIsR0FBVyxRQUFRLENBQUM7UUFDdkMsd0JBQW1CLEdBQVcsQ0FBQyxRQUFRLENBQUE7SUFtSVksQ0FBQztJQWpJcEQsSUFDSSxlQUFl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RUFBRSxFQUFFO1lBQzlDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsc0JBQXNCLENBQUMsUUFBZ0IsRUFBRSxHQUFRLEVBQUUsYUFBb0I7UUFFckUsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDOztjQUUxQixDQUFDLENBQUMsT0FBTztnQkFDUCxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUzs7R0FFNUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVWLE9BQU87Ozs7Ozs7OztVQVNELFFBQVE7O1FBRVYsSUFBSTs7R0FFVCxDQUFDO0lBQ0YsQ0FBQzs7a0hBdHVCVSxxQkFBcUI7c0dBQXJCLHFCQUFxQix1WUNsQmxDLDRoQkFxQk07MkZESE8scUJBQXFCO2tCQUpqQyxTQUFTOytCQUNFLG9CQUFvQjtvR0FJUCxRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBUUosb0JBQW9CO3NCQUFwQyxNQUFNO2dCQUNVLFNBQVM7c0JBQXpCLE1BQU07Z0JBQ1UsNEJBQTRCO3NCQUE1QyxNQUFNO2dCQUVFLGdCQUFnQjtzQkFBeEIsS0FBSztnQkE4QkYsZUFBZTtzQkFEbEIsS0FBSzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gJy4uLy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvbW9tZW50LWhlbHBlcic7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYXBwbGljYXRpb24tY29udHJvbGxlci9jb21tb24nO1xuZGVjbGFyZSB2YXIgZ29vZ2xlOiBhbnk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJhcHAtZ29vZ2xlLWdlby1tYXBcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9nb29nbGUtZ2VvLW1hcC5jb21wb25lbnQuaHRtbFwiLFxufSlcbmV4cG9ydCBjbGFzcyBHb29nbGVHZW9NYXBDb21wb25lbnQge1xuICBAVmlld0NoaWxkKFwiZ29vZ2xNYXBcIikgZ29vZ2xNYXA6IEVsZW1lbnRSZWY7XG4gIGNoYXJEYXRhOiBhbnk7XG4gIGNoYXJ0SGVpZ2h0OiBhbnk7XG4gIGJhY2dyb3VuZENvbG9yOiBhbnk7XG4gIG1hcENvbG9yczogYW55O1xuICBjaGFydFR5cGU6IGFueTtcbiAgdG9vdFRpcENvbHVtbjogYW55O1xuICByZWdpb246IGFueTtcbiAgQE91dHB1dCgpIHB1YmxpYyBnZXRUYWJsZUNvbmZpZ091dFB1dDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgb1Jvd0NsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBvbnJpZ2h0Q2xpY2tDb250ZXh0U2VsZWN0aW9uOiBFdmVudEVtaXR0ZXI8YW55PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKSByaWdodENsaWNrRW5hYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgaXNMb2FkZXI6IGJvb2xlYW47XG4gIHBhZ2VfY29uZmlnOiBhbnk7XG4gIHBhZ2VfcGFybXM6IGFueTtcbiAgcmVnaW9uQ29kZTogYW55O1xuICAvLyBoZWF0IE1hcCBzdGFydFxuICBtYXA6IGFueTtcbiAgbG9jYXRpb25zO1xuICBtYXBUWXBlOiBhbnk7XG4gIG1hcE9wdGlvbkZvckhlYXRNYXA6IHtcbiAgICB6b29tOiBudW1iZXI7XG4gIH07XG4gIGN1cnJlbnRJbmZvV2luZG93OiBhbnk7IC8vIFRyYWNrIHRoZSBvcGVuIEluZm9XaW5kb3dcbiAgLy8gaGVhdCBNYXAgZW5kXG4gIC8vaGVhdCBvbmx5IG1hcCBzdGFydCAvL1xuICBtYXJrZXJzID0gW107XG4gIGhlYXRtYXA6IGFueTtcbiAgaGVhdG1hcERhdGE6IGFueTtcbiAgem9vbVZhbHVGb3JBbGw6IG51bWJlcjtcbiAgYm91bmRzID0gbmV3IGdvb2dsZS5tYXBzLkxhdExuZ0JvdW5kcygpO1xuICAvL2hlYXQgb25seSBtYXAgZW5kIC8vXG4gIHNvcnRCeTogYW55O1xuICBmaWx0ZXJlZE9iamVjdHM6IGFueTtcblxuICAvL2Nob3JvcGxldGhNYXAgdmFyaWFibGVzLy9cbiAgY2hvcm9wbGV0aF9tYXBfZGF0YV9zb3VyY2UgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBtaW5DaG9yb3BsZXRoTWFwQ250OiBudW1iZXIgPSBJbmZpbml0eTtcbiAgbWF4Q2hvcm9wbGV0aE1hcENudDogbnVtYmVyID0gLUluZmluaXR5XG5cbiAgQElucHV0KFwiY2hhcnREYXRhU291cmNlXCIpXG4gIHNldCBjaGFydERhdGFTb3VyY2UodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0xvYWRlciA9IHRydWU7XG4gICAgICB0aGlzLnBhZ2VfY29uZmlnID0gdmFsdWU7XG4gICAgICB0aGlzLnBhZ2VfcGFybXMgPSB2YWx1ZS50aXRsZVBhcmFtcztcbiAgICAgIHRoaXMuc29ydEJ5ID0gdmFsdWUua3BpQ29uZmlnPy5kYXRhQ29uZmlnPy5zb3J0Qnk7XG5cbiAgICAgIC8vIHRoaXMuaW5Sb2FtZXJHZW9DaGFydC5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICcnO1xuICAgICAgaWYgKFxuICAgICAgICB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZSAmJlxuICAgICAgICB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZS5sZW5ndGggIT09IDBcbiAgICAgICkge1xuICAgICAgICBpZiAodmFsdWUua3BpQ29uZmlnLmZvcm1hdGUgPT0gXCJtb250aGx5XCIpIHtcbiAgICAgICAgICB0aGlzLm1hcFRZcGUgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXBUeXBlO1xuICAgICAgICAgIGlmICh0aGlzLm1hcFRZcGUgPT0gXCJnZW9NYXBcIikge1xuICAgICAgICAgICAgdGhpcy5yZWdpb24gPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5yZWdpb247XG4gICAgICAgICAgICB0aGlzLnJlZ2lvbkNvZGUgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5yZWdpb25Db2RlO1xuICAgICAgICAgICAgdGhpcy50b290VGlwQ29sdW1uID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuY2hhcnRfY29uZmlnO1xuICAgICAgICAgICAgbGV0IGRhdGEgPSB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZTtcbiAgICAgICAgICAgIHRoaXMuY2hhcnRIZWlnaHQgPSBgJHt2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5zaXplfXB4YDtcbiAgICAgICAgICAgIHRoaXMuY2hhcnRUeXBlID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuY2hhcnRUeXBlO1xuICAgICAgICAgICAgdGhpcy5iYWNncm91bmRDb2xvciA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgICAgIHRoaXMubWFwQ29sb3JzID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuY29sb3JzO1xuICAgICAgICAgICAgLy8gbGV0IGNvbmZpZyA9IHZhbHVlLmNoYXJ0Q29uZmlnO1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0YSA9IFtcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnW1wiYXJndW1lbnRGaWVsZFwiXSxcbiAgICAgICAgICAgICAgICB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZ1tcImNoYXJ0VmFsdWVGaWVsZFwiXSxcbiAgICAgICAgICAgICAgICB7IHR5cGU6IFwic3RyaW5nXCIsIHJvbGU6IFwidG9vbHRpcFwiLCBwOiB7IGh0bWw6IHRydWUgfSB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgXS5jb25jYXQoXG4gICAgICAgICAgICAgIGRhdGEubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9vbHRpcCA9IHRoaXMuZ2V0VG9vbHRpcChpdGVtKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgaXRlbVt2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZ1tcImFyZ3VtZW50RmllbGRcIl1dLFxuICAgICAgICAgICAgICAgICAgaXRlbVt2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZ1tcImNoYXJ0VmFsdWVGaWVsZFwiXV0sXG4gICAgICAgICAgICAgICAgICB0b29sdGlwLFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5jaGFyRGF0YSA9IGZvcm1hdHRlZERhdGE7XG4gICAgICAgICAgICAvLyB0aGlzLmxvYWRHb29nbGVDaGFydHMoKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgICAgIC8vIHRoaXMubG9hZEdvb2dsZUNoYXJ0cygpO1xuICAgICAgICAgICAgfSwgMjAwKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubWFwVFlwZSA9PSBcImJ1YmJsZU1hcFwiKSB7XG4gICAgICAgICAgICB0aGlzLmxvY2F0aW9ucyA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlO1xuICAgICAgICAgICAgdGhpcy5jaGFydEhlaWdodCA9IGAke3ZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnNpemV9cHhgO1xuICAgICAgICAgICAgdGhpcy50b290VGlwQ29sdW1uID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuY2hhcnRfY29uZmlnO1xuICAgICAgICAgICAgdGhpcy5tYXBPcHRpb25Gb3JIZWF0TWFwID0ge1xuICAgICAgICAgICAgICB6b29tOiB0aGlzLnpvb21WYWx1Rm9yQWxsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5tYXBUWXBlID09IFwiY2hvcm9wbGV0aE1hcFwiKSB7XG5cbiAgICAgICAgICAgIGxldCBjaG9yb3BsZXRoTWFwRGF0YVNvdXJjZSA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gICAgICAgICAgICBsZXQgY2hvcm9wbGV0aFRvb2x0aXBEYXRhU291cmNlID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcblxuXG4gICAgICAgICAgICBsZXQgY2hhcnRDb25maWcgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZztcblxuICAgICAgICAgICAgdGhpcy5jaGFydEhlaWdodCA9IGAke2NoYXJ0Q29uZmlnLnNpemV9cHhgO1xuXG4gICAgICAgICAgICBsZXQgdG9vdFRpcENvbHVtbiA9IGNoYXJ0Q29uZmlnLmNoYXJ0X2NvbmZpZ1xuICAgICAgICAgICAgICAuZmlsdGVyKGMgPT4gYy5kaXNwbGF5Rm9yID09PSAnbWFwJyB8fCBjLmRpc3BsYXlGb3IgPT09ICd0b29sdGlwJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlRmllbGQgPVxuICAgICAgICAgICAgICBjaGFydENvbmZpZy5jaGFydF9jb25maWcuZmluZChjID0+IGMuZGlzcGxheUZvciA9PT0gJ21hcCcpPy5kYXRhRmllbGQ7XG5cbiAgICAgICAgICAgIHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlLmZvckVhY2goZCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGtleSA9IGRbY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZF0udG9VcHBlckNhc2UoKTtcblxuICAgICAgICAgICAgICBjb25zdCB2YWwgPSBkW3ZhbHVlRmllbGRdO1xuXG4gICAgICAgICAgICAgIGNob3JvcGxldGhNYXBEYXRhU291cmNlLnNldChrZXksIHZhbCk7XG4gICAgICAgICAgICAgIGNob3JvcGxldGhUb29sdGlwRGF0YVNvdXJjZS5zZXQoa2V5LCBkKTtcblxuICAgICAgICAgICAgICB0aGlzLm1pbkNob3JvcGxldGhNYXBDbnQgPSBNYXRoLm1pbih0aGlzLm1pbkNob3JvcGxldGhNYXBDbnQsIGRbdmFsdWVGaWVsZF0pO1xuICAgICAgICAgICAgICB0aGlzLm1heENob3JvcGxldGhNYXBDbnQgPSBNYXRoLm1heCh0aGlzLm1heENob3JvcGxldGhNYXBDbnQsIGRbdmFsdWVGaWVsZF0pO1xuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICAgICAgdGhpcy5pbml0Q2hvcm9wbGV0aE1hcE1hcChjaGFydENvbmZpZywgdG9vdFRpcENvbHVtbiwgY2hvcm9wbGV0aE1hcERhdGFTb3VyY2UsIGNob3JvcGxldGhUb29sdGlwRGF0YVNvdXJjZSk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAvLyB0aGlzLmxvYWRHb29nbGVDaGFydHMoKTtcbiAgICAgICAgICAgIH0sIDIwMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9jYXRpb25zID0gdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2U7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0SGVpZ2h0ID0gYCR7dmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuc2l6ZX1weGA7XG4gICAgICAgICAgICB0aGlzLnRvb3RUaXBDb2x1bW4gPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5jaGFydF9jb25maWc7XG4gICAgICAgICAgICB0aGlzLnpvb21WYWx1Rm9yQWxsID0gcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy56b29tXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5tYXBPcHRpb25Gb3JIZWF0TWFwID0ge1xuICAgICAgICAgICAgICB6b29tOiB0aGlzLnpvb21WYWx1Rm9yQWxsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2VcbiAgICAgICAgICBpZiAodmFsdWUua3BpQ29uZmlnLmZvcm1hdGUgPT0gXCJkYWlseVwiKSB7XG4gICAgICAgICAgICB0aGlzLm1hcFRZcGUgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXBUeXBlO1xuICAgICAgICAgICAgY29uc3Qgc29ydGVkRGF0YSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlXG4gICAgICAgICAgICAgIC5maWx0ZXIocmVjb3JkID0+IHJlY29yZFt0aGlzLnNvcnRCeV0pXG4gICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBtb21lbnQoYlt0aGlzLnNvcnRCeV0pLmRpZmYobW9tZW50KGFbdGhpcy5zb3J0QnldKSkpO1xuICAgICAgICAgICAgY29uc3QgbW9zdFJlY2VudFJlY29yZCA9IHNvcnRlZERhdGFbMF07XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZS5lbmREYXRlKSB7XG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPYmplY3RzID0gc29ydGVkRGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhW3RoaXMuc29ydEJ5XSA9PT0gdmFsdWUuZW5kRGF0ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkT2JqZWN0cyA9IHNvcnRlZERhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YVt0aGlzLnNvcnRCeV0gPT09IG1vc3RSZWNlbnRSZWNvcmRbdGhpcy5zb3J0QnldKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMubWFwVFlwZSA9PSBcImJ1YmJsZU1hcFwiKSB7XG4gICAgICAgICAgICAgIHRoaXMubG9jYXRpb25zID0gdGhpcy5maWx0ZXJlZE9iamVjdHM7XG4gICAgICAgICAgICAgIHRoaXMuY2hhcnRIZWlnaHQgPSBgJHt2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5zaXplfXB4YDtcbiAgICAgICAgICAgICAgdGhpcy50b290VGlwQ29sdW1uID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuY2hhcnRfY29uZmlnO1xuICAgICAgICAgICAgICB0aGlzLm1hcE9wdGlvbkZvckhlYXRNYXAgPSB7XG4gICAgICAgICAgICAgICAgem9vbTogdGhpcy56b29tVmFsdUZvckFsbFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gdGhpcy5sb2FkR29vZ2xlSGVhdE9ubHlNYXBzKHRoaXMubG9jYXRpb25zKTtcblxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1hcFRZcGUgPT0gXCJnZW9NYXBcIikge1xuICAgICAgdGhpcy5sb2FkR29vZ2xlQ2hhcnRzKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1hcFRZcGUgPT0gXCJoZWF0TWFwXCIpIHtcbiAgICAgIGlmICh0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmhlYXRNYXBDYXRlZ29yeSA9PSBcImhlYXRNYXBPbmx5XCIpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvYWRHb29nbGVIZWF0T25seU1hcHModGhpcy5sb2NhdGlvbnMpO1xuXG4gICAgICB9IGVsc2UgaWYgKHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuaGVhdE1hcENhdGVnb3J5ID09IFwiaGVhdE1hcE1hcmtlclwiKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplTWFwKCk7XG4gICAgICAgIHRoaXMuYWRkTWFya2VycygpO1xuICAgICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgLy8gICB0aGlzLmxvYWRNYXAoKTtcbiAgICAgICAgLy8gfSwgMCk7XG5cblxuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUhlYXRXaXRoTWFya2VyTWFwKHRoaXMubG9jYXRpb25zKTtcblxuICAgICAgfVxuXG4gICAgfSBlbHNlIGlmICh0aGlzLm1hcFRZcGUgPT0gXCJjaG9yb3BsZXRoTWFwXCIpIHtcblxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICB0aGlzLmluaXRpYWxpemVNYXAoKTtcbiAgICAgIHRoaXMuYWRkQnViYmxlTWFya2VycygpO1xuICAgIH1cbiAgfVxuICAvLyAgR2VvIE1hcCBzdGFydCAvL1xuICBsb2FkR29vZ2xlQ2hhcnRzKCkge1xuICAgIGdvb2dsZS5jaGFydHMubG9hZChcImN1cnJlbnRcIiwge1xuICAgICAgcGFja2FnZXM6IFt0aGlzLmNoYXJ0VHlwZV0sXG4gICAgfSk7XG4gICAgZ29vZ2xlLmNoYXJ0cy5zZXRPbkxvYWRDYWxsYmFjayh0aGlzLmRyYXdDaGFydC5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIGRyYXdDaGFydCgpIHtcbiAgICBjb25zdCBkYXRhID0gZ29vZ2xlLnZpc3VhbGl6YXRpb24uYXJyYXlUb0RhdGFUYWJsZSh0aGlzLmNoYXJEYXRhKTtcblxuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbkNvbmZpZygpO1xuXG4gICAgLy8gb3B0aW9uc1snZGF0YU1vZGUnXSA9ICdyZWdpb25zJztcblxuICAgIGNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkdlb0NoYXJ0KFxuICAgICAgdGhpcy5nb29nbE1hcC5uYXRpdmVFbGVtZW50XG4gICAgKTtcbiAgICB0aGlzLmdvb2dsTWFwLm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5jaGFydEhlaWdodDtcblxuICAgIGNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7XG4gIH1cblxuICBnZXRUb29sdGlwKGRhdGEpIHtcbiAgICBsZXQgdG9vbFRpcERhdGEgPSBcIlwiO1xuICAgIHRoaXMudG9vdFRpcENvbHVtbi5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGRhdGFbZWxlbWVudC5kYXRhRmllbGRdID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHRvb2xUaXBEYXRhICs9XG4gICAgICAgICAgXCI8ZGl2IGNsYXNzPSdpbmxpbmUnPjxiPlwiICtcbiAgICAgICAgICBlbGVtZW50LmNhcHRpb24gK1xuICAgICAgICAgIFwiOjwvYj48L2Rpdj4gXCIgK1xuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZS5yb3VuZE9mZlRpbGxUd28oZGF0YVtlbGVtZW50LmRhdGFGaWVsZF0sIDIpICtcbiAgICAgICAgICBcIjxiciAvPlwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9vbFRpcERhdGEgKz1cbiAgICAgICAgICBcIjxkaXYgY2xhc3M9J2lubGluZSc+PGI+XCIgK1xuICAgICAgICAgIGVsZW1lbnQuY2FwdGlvbiArXG4gICAgICAgICAgXCI6PC9iPjwvZGl2PiBcIiArXG4gICAgICAgICAgZGF0YVtlbGVtZW50LmRhdGFGaWVsZF0gK1xuICAgICAgICAgIFwiPGJyIC8+XCI7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRvb2xUaXBEYXRhO1xuICB9XG5cbiAgZ2V0T3B0aW9uQ29uZmlnKCkge1xuICAgIGlmICh0aGlzLnJlZ2lvbiA9PSBcImNpdHlcIikge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvbkNvZGUsXG4gICAgICAgIGRpc3BsYXlNb2RlOiBcIm1hcmtlcnNcIixcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLmJhY2dyb3VuZENvbG9yLFxuICAgICAgICB0b29sdGlwOiB7IGlzSHRtbDogdHJ1ZSB9LFxuICAgICAgICBjb2xvckF4aXM6IHsgY29sb3JzOiB0aGlzLm1hcENvbG9ycyB9LFxuICAgICAgfTtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoaXMuYmFjZ3JvdW5kQ29sb3IsXG4gICAgICAgIHRvb2x0aXA6IHsgaXNIdG1sOiB0cnVlIH0sXG4gICAgICAgIGNvbG9yQXhpczogeyBjb2xvcnM6IHRoaXMubWFwQ29sb3JzIH0sXG4gICAgICB9O1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuICB9XG5cbiAgLy8gIEdlbyBNYXAgZW5kIC8vXG5cbiAgLy8gSGVhdCBNYXAgc3RhcnQgLy9cbiAgaW5pdGlhbGl6ZU1hcCgpOiB2b2lkIHtcbiAgICBjb25zdCBtYXBPcHRpb25zID0gdGhpcy5tYXBPcHRpb25Gb3JIZWF0TWFwO1xuICAgIC8vIHtcbiAgICAvLyAgIGNlbnRlcjogeyBsYXQ6IDM3LjA5MDIsIGxuZzogLTk1LjcxMjkgfSwgLy8gQ2VudGVyIG9mIHRoZSBVU0FcbiAgICAvLyAgIHpvb206IDUsXG4gICAgLy8gfTtcblxuICAgIGlmICh0aGlzLm1hcFRZcGUgPT0gXCJidWJibGVNYXBcIikge1xuICAgICAgbWFwT3B0aW9uc1snc3R5bGVzJ10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBmZWF0dXJlVHlwZTogJ2FsbCcsXG4gICAgICAgICAgc3R5bGVyczogW1xuICAgICAgICAgICAgeyBzYXR1cmF0aW9uOiAtMTAwIH0sXG4gICAgICAgICAgICB7IGxpZ2h0bmVzczogNzAgfSxcbiAgICAgICAgICAgIHsgdmlzaWJpbGl0eTogJ3NpbXBsaWZpZWQnIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZlYXR1cmVUeXBlOiAnYWRtaW5pc3RyYXRpdmUuY291bnRyeScsXG4gICAgICAgICAgZWxlbWVudFR5cGU6ICdsYWJlbHMnLFxuICAgICAgICAgIHN0eWxlcnM6IFtcbiAgICAgICAgICAgIHsgbGlnaHRuZXNzOiAtMzAgfSwgLy8gRGFya2VuIGxhYmVscyBmdXJ0aGVyXG4gICAgICAgICAgICB7IHZpc2liaWxpdHk6ICdvbicgfSxcbiAgICAgICAgICAgIHsgZm9udFdlaWdodDogJ2JvbGQnIH0sIC8vIE1ha2UgbGFiZWxzIGJvbGRcbiAgICAgICAgICAgIHsgZm9udFNpemU6ICcxMnB4JyB9IC8vIEluY3JlYXNlIGZvbnQgc2l6ZVxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBmZWF0dXJlVHlwZTogXCJhZG1pbmlzdHJhdGl2ZS5jb3VudHJ5XCIsXG4gICAgICAgICAgZWxlbWVudFR5cGU6IFwiZ2VvbWV0cnkuc3Ryb2tlXCIsXG4gICAgICAgICAgc3R5bGVyczogW1xuICAgICAgICAgICAgeyBsaWdodG5lc3M6IC00MCB9LCAvLyBEYXJrZW4gYm9yZGVycyBzaWduaWZpY2FudGx5XG4gICAgICAgICAgICB7IHdlaWdodDogMS41IH0sIC8vIEluY3JlYXNlIGJvcmRlciB0aGlja25lc3NcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZmVhdHVyZVR5cGU6IFwiYWRtaW5pc3RyYXRpdmUuY291bnRyeVwiLFxuICAgICAgICAgIGVsZW1lbnRUeXBlOiBcImdlb21ldHJ5LmZpbGxcIixcbiAgICAgICAgICBzdHlsZXJzOiBbXG4gICAgICAgICAgICB7IGxpZ2h0bmVzczogOTAgfSAvLyBLZWVwIGZpbGwgdmVyeSBsaWdodFxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cblxuXG4gICAgdGhpcy5tYXAgPSBuZXcgZ29vZ2xlLm1hcHMuTWFwKFxuICAgICAgLy8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZWdpb25zX2RpdlwiKSAsXG4gICAgICB0aGlzLmdvb2dsTWFwLm5hdGl2ZUVsZW1lbnQsXG4gICAgICBtYXBPcHRpb25zXG4gICAgKTtcbiAgICB0aGlzLmdvb2dsTWFwLm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5jaGFydEhlaWdodDtcbiAgfVxuXG4gIC8vIEFkZCBtYXJrZXJzIHRvIHRoZSBtYXBcbiAgYWRkTWFya2VycygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5pY29uKSB7XG5cbiAgICB9XG4gICAgdGhpcy5sb2NhdGlvbnMuZm9yRWFjaCgobG9jYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IG1hcmtlciA9IG5ldyBnb29nbGUubWFwcy5NYXJrZXIoe1xuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIGxhdDogcGFyc2VGbG9hdChcbiAgICAgICAgICAgIGxvY2F0aW9uW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcubWFya2VyTGF0aXR1ZGVdXG4gICAgICAgICAgKSxcbiAgICAgICAgICBsbmc6IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICBsb2NhdGlvblt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxvbmdpdHVkZV1cbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBpY29uOiB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmljb24gPyB7XG4gICAgICAgICAgdXJsOiB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmljb24sIC8vIFJlcGxhY2Ugd2l0aCB5b3VyIGljb24gcGF0aFxuICAgICAgICAgIHNjYWxlZFNpemU6IHtcbiAgICAgICAgICAgIHdpZHRoOiAzMixcbiAgICAgICAgICAgIGhlaWdodDogMzIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSA6IFwiXCIsXG4gICAgICAgIC8vIHRvb2x0aXBUZXh0OlxuICAgICAgICBtYXA6IHRoaXMubWFwLFxuICAgICAgICAvLyB0aXRsZTogYCR7bG9jYXRpb24uY2l0eX06ICQke2xvY2F0aW9uLnRvdGFsX3NhbGVzX2Ftb3VudH1gLFxuICAgICAgICB0aXRsZTogYCR7bG9jYXRpb24uY2l0eX06ICQke2xvY2F0aW9uLnRvdGFsX3NhbGVzX2Ftb3VudH1gLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmJvdW5kcy5leHRlbmQobWFya2VyLmdldFBvc2l0aW9uKCkpO1xuICAgICAgdGhpcy5tYXJrZXJzLnB1c2gobWFya2VyKTtcblxuICAgICAgLy8gQWRkIGFuIGluZm8gd2luZG93XG4gICAgICBsZXQgc3RyaW5nV2l0aG91dFF1b3RlcyA9IHRoaXMuZ2V0SW5mb1dpbmRvRGF0YShsb2NhdGlvbik7XG4gICAgICBjb25zdCBpbmZvV0luZG93RGF0YSA9IHRoaXMuZ2V0SW5mb1dpbmRvRGF0YShsb2NhdGlvbik7XG5cbiAgICAgIGNvbnN0IGluZm9XaW5kb3cgPSBuZXcgZ29vZ2xlLm1hcHMuSW5mb1dpbmRvdyh7XG4gICAgICAgIC8vIGNvbnRlbnQ6IGluZm9XSW5kb3dEYXRhLFxuICAgICAgICBjb250ZW50OiBgPGRpdiBzdHlsZT1cImhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7IGNvbG9yOiBibGFjazsgZm9udC1zaXplOiAyMHB4O1wiPlxuICAgICAgICAke2luZm9XSW5kb3dEYXRhfVxuICAgICAgPC9kaXY+YCxcbiAgICAgIH0pO1xuXG4gICAgICBtYXJrZXIuYWRkTGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRJbmZvV2luZG93KSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50SW5mb1dpbmRvdy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGluZm9XaW5kb3cub3Blbih0aGlzLm1hcCwgbWFya2VyKTtcbiAgICAgICAgdGhpcy5jdXJyZW50SW5mb1dpbmRvdyA9IGluZm9XaW5kb3c7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLm1hcC5maXRCb3VuZHModGhpcy5ib3VuZHMpO1xuXG5cbiAgfVxuXG4gIGdldEluZm9XaW5kb0RhdGEoZGF0YSkge1xuICAgIGxldCB0b29sVGlwRGF0YSA9IGBgO1xuICAgIHRoaXMudG9vdFRpcENvbHVtbi5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGRhdGFbZWxlbWVudC5kYXRhRmllbGRdID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHRvb2xUaXBEYXRhICs9XG4gICAgICAgICAgYDxkaXYgY2xhc3M9J2lubGluZSc+PGI+YCArXG4gICAgICAgICAgZWxlbWVudC5jYXB0aW9uICtcbiAgICAgICAgICBgOjwvYj48L2Rpdj4gYCArXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlLnJvdW5kT2ZmVGlsbFR3byhkYXRhW2VsZW1lbnQuZGF0YUZpZWxkXSwgMikgK1xuICAgICAgICAgIGA8YnIgLz5gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9vbFRpcERhdGEgKz1cbiAgICAgICAgICBgPGRpdiBjbGFzcz0naW5saW5lJz48Yj5gICtcbiAgICAgICAgICBlbGVtZW50LmNhcHRpb24gK1xuICAgICAgICAgIGA6PC9iPjwvZGl2PiBgICtcbiAgICAgICAgICBkYXRhW2VsZW1lbnQuZGF0YUZpZWxkXSArXG4gICAgICAgICAgYDxiciAvPmA7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRvb2xUaXBEYXRhO1xuICB9XG4gIC8vIEhlYXQgTWFwIEVuZCAvL1xuXG4gIC8vaGVhdCBvbmx5IG1hcCBzdGFydCAvL1xuXG4gIGxvYWRHb29nbGVIZWF0T25seU1hcHMoZGF0YSk6IHZvaWQge1xuICAgIHRoaXMuaGVhdG1hcERhdGEgPSBbXTtcbiAgICBkYXRhLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGxldCBsYXRpdHVkZSA9IHBhcnNlRmxvYXQoXG4gICAgICAgIGVsZW1lbnRbdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXJrZXJMYXRpdHVkZV1cbiAgICAgICk7XG4gICAgICBsZXQgbG9ndGl0dWRlID0gcGFyc2VGbG9hdChcbiAgICAgICAgZWxlbWVudFt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxvbmdpdHVkZV1cbiAgICAgICk7XG4gICAgICAvLyBsZXQgd2VpZ2h0ID0gKGNlbGxOb2RlLnByb3BlcnRpZXNbJ1dlaWdodCddICE9IHVuZGVmaW5lZCkgPyBjZWxsTm9kZS5wcm9wZXJ0aWVzWydXZWlnaHQnXSA6IFwiTkFcIjtcbiAgICAgIHRoaXMuaGVhdG1hcERhdGEucHVzaCh7XG4gICAgICAgIGxvY2F0aW9uOiBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKGxhdGl0dWRlLCBsb2d0aXR1ZGUpXG4gICAgICAgIC8vIHdlaWdodDogcGFyc2VGbG9hdCh3ZWlnaHQpLFxuXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYm91bmRzLmV4dGVuZChuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKGxhdGl0dWRlLCBsb2d0aXR1ZGUpKTtcbiAgICB9KTtcbiAgICBjb25zdCBtYXBPcHRpb25zID0ge1xuICAgICAgem9vbTogdGhpcy56b29tVmFsdUZvckFsbFxuICAgIH07XG5cblxuXG5cbiAgICB0aGlzLm1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAodGhpcy5nb29nbE1hcC5uYXRpdmVFbGVtZW50LCBtYXBPcHRpb25zKTtcbiAgICB0aGlzLmdvb2dsTWFwLm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5jaGFydEhlaWdodDtcbiAgICB0aGlzLm1hcC5maXRCb3VuZHModGhpcy5ib3VuZHMpO1xuICAgIHRoaXMuaGVhdG1hcCA9IG5ldyBnb29nbGUubWFwcy52aXN1YWxpemF0aW9uLkhlYXRtYXBMYXllcih7XG4gICAgICBkYXRhOiB0aGlzLmhlYXRtYXBEYXRhLFxuICAgICAgbWFwOiB0aGlzLm1hcCxcbiAgICB9KTtcblxuXG4gIH1cblxuXG4gIC8vaGVhdCBvbmx5IG1hcCBlbmQgLy9cblxuICAvL2hlYXQgYW5kIE1hcmtlciAgbWFwIFN0YXJ0IC8vXG4gIGluaXRpYWxpemVIZWF0V2l0aE1hcmtlck1hcChkYXRhKSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXBcbiAgICB0aGlzLm1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAodGhpcy5nb29nbE1hcC5uYXRpdmVFbGVtZW50LCB7XG4gICAgICAvLyBjZW50ZXI6IHsgbGF0OiAzNy43NzQ5LCBsbmc6IC0xMjIuNDE5NCB9LFxuICAgICAgem9vbTogcGFyc2VGbG9hdChcbiAgICAgICAgdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy56b29tXG4gICAgICApLFxuICAgIH0pO1xuICAgIHRoaXMuZ29vZ2xNYXAubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmNoYXJ0SGVpZ2h0O1xuICAgIC8vIEluaXRpYWxpemUgaGVhdG1hcCBsYXllclxuICAgIHRoaXMuaGVhdG1hcERhdGEgPSBbXTtcbiAgICBkYXRhLmZvckVhY2goZWxlbWVudCA9PiB7XG5cbiAgICAgIGxldCBsYXRpdHVkZSA9IHBhcnNlRmxvYXQoXG4gICAgICAgIGVsZW1lbnRbdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXJrZXJMYXRpdHVkZV1cbiAgICAgICk7XG4gICAgICBsZXQgbG9ndGl0dWRlID0gcGFyc2VGbG9hdChcbiAgICAgICAgZWxlbWVudFt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxvbmdpdHVkZV1cbiAgICAgICk7XG4gICAgICB0aGlzLmhlYXRtYXBEYXRhLnB1c2goe1xuICAgICAgICBsb2NhdGlvbjogbmV3IGdvb2dsZS5tYXBzLkxhdExuZyhsYXRpdHVkZSwgbG9ndGl0dWRlKVxuICAgICAgfSk7XG4gICAgICB0aGlzLmJvdW5kcy5leHRlbmQobmV3IGdvb2dsZS5tYXBzLkxhdExuZyhsYXRpdHVkZSwgbG9ndGl0dWRlKSk7XG4gICAgfSk7XG4gICAgdGhpcy5oZWF0bWFwID0gbmV3IGdvb2dsZS5tYXBzLnZpc3VhbGl6YXRpb24uSGVhdG1hcExheWVyKHtcbiAgICAgIGRhdGE6IHRoaXMuaGVhdG1hcERhdGEsXG4gICAgICBtYXA6IHRoaXMubWFwLFxuICAgIH0pO1xuICAgIC8vIEluaXRpYWxpemUgbWFya2Vyc1xuICAgIHRoaXMubG9jYXRpb25zLmZvckVhY2goKGxvY2F0aW9uKSA9PiB7XG4gICAgICBjb25zdCBtYXJrZXIgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHtcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBsYXQ6IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICBsb2NhdGlvblt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxhdGl0dWRlXVxuICAgICAgICAgICksXG4gICAgICAgICAgbG5nOiBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgbG9jYXRpb25bdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXJrZXJMb25naXR1ZGVdXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgaWNvbjogdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5pY29uID8ge1xuICAgICAgICAgIHVybDogdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5pY29uLCAvLyBSZXBsYWNlIHdpdGggeW91ciBpY29uIHBhdGhcbiAgICAgICAgICBzY2FsZWRTaXplOiB7XG4gICAgICAgICAgICB3aWR0aDogMzIsXG4gICAgICAgICAgICBoZWlnaHQ6IDMyLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0gOiAnJyxcbiAgICAgICAgLy8gdG9vbHRpcFRleHQ6XG4gICAgICAgIG1hcDogdGhpcy5tYXAsXG4gICAgICAgIC8vIHRpdGxlOiBgJHtsb2NhdGlvbi5jaXR5fTogJCR7bG9jYXRpb24udG90YWxfc2FsZXNfYW1vdW50fWAsXG4gICAgICAgIHRpdGxlOiBgJHtsb2NhdGlvbi5jaXR5fTogJCR7bG9jYXRpb24udG90YWxfc2FsZXNfYW1vdW50fWAsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYm91bmRzLmV4dGVuZChtYXJrZXIuZ2V0UG9zaXRpb24oKSk7XG4gICAgICB0aGlzLm1hcmtlcnMucHVzaChtYXJrZXIpO1xuXG4gICAgICAvLyBBZGQgYW4gaW5mbyB3aW5kb3dcblxuICAgICAgLy8gQWRkIGFuIGluZm8gd2luZG93XG4gICAgICBjb25zdCBpbmZvV0luZG93RGF0YSA9IHRoaXMuZ2V0SW5mb1dpbmRvRGF0YShsb2NhdGlvbik7XG4gICAgICBjb25zdCBpbmZvV2luZG93ID0gbmV3IGdvb2dsZS5tYXBzLkluZm9XaW5kb3coe1xuICAgICAgICBjb250ZW50OiBgPGRpdiBzdHlsZT1cImhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7IGNvbG9yOiBibGFjazsgZm9udC1zaXplOiAyMHB4O1wiPlxuICAgICAgICAgICAgJHtpbmZvV0luZG93RGF0YX1cbiAgICAgICAgICA8L2Rpdj5gLFxuICAgICAgfSk7XG5cblxuICAgICAgbWFya2VyLmFkZExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50SW5mb1dpbmRvdykge1xuICAgICAgICAgIHRoaXMuY3VycmVudEluZm9XaW5kb3cuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpbmZvV2luZG93Lm9wZW4odGhpcy5tYXAsIG1hcmtlcik7XG4gICAgICAgIHRoaXMuY3VycmVudEluZm9XaW5kb3cgPSBpbmZvV2luZG93O1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5tYXAuZml0Qm91bmRzKHRoaXMuYm91bmRzKTtcblxuICAgIC8vIEFkZCBsaXN0ZW5lciBmb3Igem9vbSBjaGFuZ2VzXG4gICAgdGhpcy5tYXAuYWRkTGlzdGVuZXIoJ3pvb21fY2hhbmdlZCcsICgpID0+IHRoaXMuaGFuZGxlWm9vbUNoYW5nZSgpKTtcbiAgfVxuXG4gIGhhbmRsZVpvb21DaGFuZ2UoKSB7XG4gICAgY29uc3Qgem9vbUxldmVsID0gdGhpcy5tYXAuZ2V0Wm9vbSgpO1xuICAgIGlmICh6b29tTGV2ZWwgPCA1KSB7XG4gICAgICAvLyBTaG93IGhlYXRtYXAgYW5kIGhpZGUgbWFya2Vyc1xuICAgICAgdGhpcy5oZWF0bWFwLnNldE1hcCh0aGlzLm1hcCk7XG4gICAgICB0aGlzLm1hcmtlcnMuZm9yRWFjaCgobWFya2VyKSA9PiBtYXJrZXIuc2V0TWFwKG51bGwpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSGlkZSBoZWF0bWFwIGFuZCBzaG93IG1hcmtlcnNcbiAgICAgIHRoaXMuaGVhdG1hcC5zZXRNYXAobnVsbCk7XG4gICAgICB0aGlzLm1hcmtlcnMuZm9yRWFjaCgobWFya2VyKSA9PiBtYXJrZXIuc2V0TWFwKHRoaXMubWFwKSk7XG4gICAgfVxuICB9XG5cbiAgLy9oZWF0IGFuZCBNYXJrZXIgIG1hcCBFbmQgLy9cblxuICAvL0J1YmJsZSBDaGFydCBTdGFydFxuICBhZGRCdWJibGVNYXJrZXJzKCk6IHZvaWQge1xuICAgIHRoaXMucHJlcGFyZUJ1YmJsZURhdGEoKTtcbiAgICB0aGlzLmxvY2F0aW9ucy5mb3JFYWNoKChsb2NhdGlvbikgPT4ge1xuICAgICAgY29uc3QgbWFya2VyID0gbmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7XG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbGF0OiBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgbG9jYXRpb25bdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXJrZXJMYXRpdHVkZV1cbiAgICAgICAgICApLFxuICAgICAgICAgIGxuZzogcGFyc2VGbG9hdChcbiAgICAgICAgICAgIGxvY2F0aW9uW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcubWFya2VyTG9uZ2l0dWRlXVxuICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIGljb246IHtcbiAgICAgICAgICBwYXRoOiBnb29nbGUubWFwcy5TeW1ib2xQYXRoLkNJUkNMRSxcbiAgICAgICAgICBzY2FsZTogTWF0aC5yb3VuZChsb2NhdGlvbi5zYWxlc19wZXJjZW50YWdlKSwgLy8gQWRqdXN0IGJ1YmJsZSBzaXplXG4gICAgICAgICAgZmlsbENvbG9yOiB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmJ1YmJsZUNvbG9yLFxuICAgICAgICAgIGZpbGxPcGFjaXR5OiAwLjYsXG4gICAgICAgICAgc3Ryb2tlV2VpZ2h0OiAwLFxuICAgICAgICB9LFxuICAgICAgICAvLyB0b29sdGlwVGV4dDpcbiAgICAgICAgbWFwOiB0aGlzLm1hcCxcbiAgICAgICAgLy8gdGl0bGU6IGAke2xvY2F0aW9uLmNpdHl9OiAkJHtsb2NhdGlvbi50b3RhbF9zYWxlc19hbW91bnR9YCxcbiAgICAgICAgdGl0bGU6IGAke2xvY2F0aW9uLmNpdHl9OiAkJHtsb2NhdGlvblt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmFncnVtZW50VmFsdWVdfWAsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYm91bmRzLmV4dGVuZChtYXJrZXIuZ2V0UG9zaXRpb24oKSk7XG4gICAgICB0aGlzLm1hcmtlcnMucHVzaChtYXJrZXIpO1xuXG4gICAgICAvLyBBZGQgYW4gaW5mbyB3aW5kb3dcbiAgICAgIGxldCBzdHJpbmdXaXRob3V0UXVvdGVzID0gdGhpcy5nZXRJbmZvV2luZG9EYXRhKGxvY2F0aW9uKTtcbiAgICAgIGNvbnN0IGluZm9XSW5kb3dEYXRhID0gdGhpcy5nZXRJbmZvV2luZG9EYXRhKGxvY2F0aW9uKTtcblxuICAgICAgY29uc3QgaW5mb1dpbmRvdyA9IG5ldyBnb29nbGUubWFwcy5JbmZvV2luZG93KHtcbiAgICAgICAgLy8gY29udGVudDogaW5mb1dJbmRvd0RhdGEsXG4gICAgICAgIGNvbnRlbnQ6IGA8ZGl2IHN0eWxlPVwiaGVpZ2h0OiAxMDAlOyB3aWR0aDogMTAwJTsgY29sb3I6IGJsYWNrOyBmb250LXNpemU6IDIwcHg7XCI+XG4gICAgICAgICR7aW5mb1dJbmRvd0RhdGF9XG4gICAgICA8L2Rpdj5gLFxuICAgICAgfSk7XG5cbiAgICAgIG1hcmtlci5hZGRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEluZm9XaW5kb3cpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRJbmZvV2luZG93LmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaW5mb1dpbmRvdy5vcGVuKHRoaXMubWFwLCBtYXJrZXIpO1xuICAgICAgICB0aGlzLmN1cnJlbnRJbmZvV2luZG93ID0gaW5mb1dpbmRvdztcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMubWFwLmZpdEJvdW5kcyh0aGlzLmJvdW5kcyk7XG5cblxuICB9XG5cbiAgcHJlcGFyZUJ1YmJsZURhdGEoKSB7XG4gICAgLy8gU3RlcCAxOiBGaW5kIG1pbiBhbmQgbWF4IHRvdGFsX3NhbGVzX2Ftb3VudFxuICAgIGNvbnN0IG1pblNhbGVzID0gTWF0aC5taW4oLi4udGhpcy5sb2NhdGlvbnMubWFwKGQgPT4gZFt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmFncnVtZW50VmFsdWVdKSk7XG4gICAgY29uc3QgbWF4U2FsZXMgPSBNYXRoLm1heCguLi50aGlzLmxvY2F0aW9ucy5tYXAoZCA9PiBkW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuYWdydW1lbnRWYWx1ZV0pKTtcblxuICAgIC8vIFN0ZXAgMjogRGVmaW5lIG1pbiBhbmQgbWF4IHBlcmNlbnRhZ2UgdmFsdWVzXG4gICAgY29uc3QgbWluUGVyY2VudGFnZSA9IHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuYnViYmxlTWluaW11bVNpemU7XG4gICAgY29uc3QgbWF4UGVyY2VudGFnZSA9IHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuYnViYmxlTWF4aW11bVNpemU7XG5cbiAgICAvLyBTdGVwIDM6IE5vcm1hbGl6ZSBmdW5jdGlvblxuICAgIGNvbnN0IG5vcm1hbGl6ZSA9ICh2YWx1ZSwgbWluLCBtYXgpID0+IHtcbiAgICAgIHJldHVybiAoKHZhbHVlIC0gbWluKSAvIChtYXggLSBtaW4pKSAqIChtYXhQZXJjZW50YWdlIC0gbWluUGVyY2VudGFnZSkgKyBtaW5QZXJjZW50YWdlO1xuICAgIH07XG5cbiAgICAvLyBTdGVwIDQ6IEFzc2lnbiBjYWxjdWxhdGVkIHBlcmNlbnRhZ2UgdG8gZWFjaCBvYmplY3RcbiAgICB0aGlzLmxvY2F0aW9ucy5mb3JFYWNoKGQgPT4ge1xuICAgICAgZC5zYWxlc19wZXJjZW50YWdlID0gTWF0aC5taW4oTWF0aC5tYXgobm9ybWFsaXplKGRbdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5hZ3J1bWVudFZhbHVlXSwgbWluU2FsZXMsIG1heFNhbGVzKSwgbWluUGVyY2VudGFnZSksIG1heFBlcmNlbnRhZ2UpO1xuICAgIH0pO1xuXG4gIH1cblxuXG5cbiAgLy9CdWJibGUgQ2hhcnQgRW5kXG5cbiAgLy8gY2hvcm9wbGV0aE1hcCBzdGFydCAvL1xuXG5cblxuICBnZXRDb2xvcihjbnQ6IG51bWJlciwgc3RhcnRDb2xvcjogc3RyaW5nLCBlbmRDb2xvcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoY250ID09PSB1bmRlZmluZWQgfHwgY250ID09PSBudWxsIHx8IHRoaXMubWF4Q2hvcm9wbGV0aE1hcENudCA9PT0gdGhpcy5taW5DaG9yb3BsZXRoTWFwQ250KSB7XG4gICAgICByZXR1cm4gJyNjY2NjY2MnO1xuICAgIH1cblxuICAgIGNvbnN0IHJhdGlvID0gTWF0aC5taW4oXG4gICAgICBNYXRoLm1heCgoY250IC0gdGhpcy5taW5DaG9yb3BsZXRoTWFwQ250KSAvICh0aGlzLm1heENob3JvcGxldGhNYXBDbnQgLSB0aGlzLm1pbkNob3JvcGxldGhNYXBDbnQpLCAwKSxcbiAgICAgIDFcbiAgICApO1xuXG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLmhleFRvUmdiKHN0YXJ0Q29sb3IpO1xuICAgIGNvbnN0IGVuZCA9IHRoaXMuaGV4VG9SZ2IoZW5kQ29sb3IpO1xuXG4gICAgY29uc3QgciA9IHRoaXMubGVycChzdGFydC5yLCBlbmQuciwgcmF0aW8pO1xuICAgIGNvbnN0IGcgPSB0aGlzLmxlcnAoc3RhcnQuZywgZW5kLmcsIHJhdGlvKTtcbiAgICBjb25zdCBiID0gdGhpcy5sZXJwKHN0YXJ0LmIsIGVuZC5iLCByYXRpbyk7XG5cbiAgICByZXR1cm4gYHJnYigke3J9LCAke2d9LCAke2J9KWA7XG4gIH1cblxuICBsZXJwKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyLCByYXRpbzogbnVtYmVyKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoc3RhcnQgKyAoZW5kIC0gc3RhcnQpICogcmF0aW8pO1xuICB9XG4gIGhleFRvUmdiKGhleDogc3RyaW5nKSB7XG4gICAgY29uc3QgY2xlYW5IZXggPSBoZXgucmVwbGFjZSgnIycsICcnKTtcbiAgICBjb25zdCBiaWdpbnQgPSBwYXJzZUludChjbGVhbkhleCwgMTYpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHI6IChiaWdpbnQgPj4gMTYpICYgMjU1LFxuICAgICAgZzogKGJpZ2ludCA+PiA4KSAmIDI1NSxcbiAgICAgIGI6IGJpZ2ludCAmIDI1NVxuICAgIH07XG4gIH1cblxuXG4gIGluaXRDaG9yb3BsZXRoTWFwTWFwKGNoYXJ0Q29uZmlnOiBhbnksIHRvb3RUaXBDb2x1bW46IGFueVtdLCBjaG9yb3BsZXRoTWFwRGF0YVNvdXJjZTogTWFwPHN0cmluZywgbnVtYmVyPiwgY2hvcm9wbGV0aFRvb2x0aXBEYXRhU291cmNlOiBNYXA8c3RyaW5nLCBhbnk+KTogdm9pZCB7XG5cbiAgICBjb25zdCBtYXAgPSBuZXcgZ29vZ2xlLm1hcHMuTWFwKFxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvb2dsZW1hcCcpIGFzIEhUTUxFbGVtZW50LFxuICAgICAge1xuICAgICAgICBjZW50ZXI6IHsgbGF0OiBwYXJzZUZsb2F0KGNoYXJ0Q29uZmlnLmNlbnRlckxhdCksIGxuZzogcGFyc2VGbG9hdChjaGFydENvbmZpZy5jZW50ZXJMbmcpIH0sXG4gICAgICAgIHpvb206IHBhcnNlSW50KGNoYXJ0Q29uZmlnLnpvb20pXG4gICAgICB9XG4gICAgKTtcblxuICAgIG1hcC5kYXRhLmxvYWRHZW9Kc29uKGNoYXJ0Q29uZmlnLmdqc29uRmlsZVBhdGgpO1xuXG4gICAgbWFwLmRhdGEuc2V0U3R5bGUoKGZlYXR1cmU6IGFueSkgPT4ge1xuICAgICAgY29uc3QgZGlzdHJpY3QgPSBmZWF0dXJlLmdldFByb3BlcnR5KCdkJyk/LnRvVXBwZXJDYXNlKCk7XG4gICAgICBjb25zdCBjbnQgPSBjaG9yb3BsZXRoTWFwRGF0YVNvdXJjZS5nZXQoZGlzdHJpY3QpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBmaWxsQ29sb3I6IHRoaXMuZ2V0Q29sb3IoXG4gICAgICAgICAgY250LFxuICAgICAgICAgIGNoYXJ0Q29uZmlnLmNvbG9yT25lLFxuICAgICAgICAgIGNoYXJ0Q29uZmlnLmNvbG9yVHdvXG4gICAgICAgICksXG4gICAgICAgIHN0cm9rZUNvbG9yOiAnIzU1NScsXG4gICAgICAgIHN0cm9rZVdlaWdodDogMSxcbiAgICAgICAgZmlsbE9wYWNpdHk6IDAuNzVcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbmZvV2luZG93ID0gbmV3IGdvb2dsZS5tYXBzLkluZm9XaW5kb3coKTtcblxuICAgIG1hcC5kYXRhLmFkZExpc3RlbmVyKCdtb3VzZW92ZXInLCAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgY29uc3QgZGlzdHJpY3QgPSBldmVudC5mZWF0dXJlLmdldFByb3BlcnR5KCdkJyk7XG4gICAgICBjb25zdCBrZXkgPSBkaXN0cmljdD8udG9VcHBlckNhc2UoKTtcblxuICAgICAgY29uc3Qgcm93ID0gY2hvcm9wbGV0aFRvb2x0aXBEYXRhU291cmNlLmdldChrZXkpO1xuXG4gICAgICBpbmZvV2luZG93LnNldENvbnRlbnQoXG4gICAgICAgIHRoaXMuYnVpbGRJbmZvV2luZG93Q29udGVudChkaXN0cmljdCwgcm93LCB0b290VGlwQ29sdW1uKVxuICAgICAgKTtcblxuICAgICAgaW5mb1dpbmRvdy5zZXRQb3NpdGlvbihldmVudC5sYXRMbmcpO1xuICAgICAgaW5mb1dpbmRvdy5vcGVuKG1hcCk7XG4gICAgfSk7XG5cbiAgICBtYXAuZGF0YS5hZGRMaXN0ZW5lcignbW91c2VvdXQnLCAoKSA9PiBpbmZvV2luZG93LmNsb3NlKCkpO1xuICB9XG5cblxuICBnZXRGZWF0dXJlQ2VudGVyKGZlYXR1cmUpOiBhbnkge1xuICAgIGNvbnN0IGJvdW5kcyA9IG5ldyBnb29nbGUubWFwcy5MYXRMbmdCb3VuZHMoKTtcblxuICAgIGZlYXR1cmUuZ2V0R2VvbWV0cnkoKT8uZm9yRWFjaExhdExuZygobGF0TG5nKSA9PiB7XG4gICAgICBib3VuZHMuZXh0ZW5kKGxhdExuZyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYm91bmRzLmdldENlbnRlcigpO1xuICB9XG5cbiAgYnVpbGRJbmZvV2luZG93Q29udGVudChkaXN0cmljdDogc3RyaW5nLCByb3c6IGFueSwgdG9vdFRpcENvbHVtbjogYW55W10pOiBzdHJpbmcge1xuXG4gICAgY29uc3Qgcm93cyA9IHRvb3RUaXBDb2x1bW4ubWFwKGMgPT4gYFxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO1wiPlxuICAgICAgPHNwYW4+JHtjLmNhcHRpb259PC9zcGFuPlxuICAgICAgPHN0cm9uZz4ke3Jvdz8uW2MuZGF0YUZpZWxkXSA/PyAnTm8gZGF0YSd9PC9zdHJvbmc+XG4gICAgPC9kaXY+XG4gIGApLmpvaW4oJycpO1xuXG4gICAgcmV0dXJuIGBcbiAgICA8ZGl2IHN0eWxlPVwiXG4gICAgICBjb2xvcjojMDAwO1xuICAgICAgYmFja2dyb3VuZDojZmZmO1xuICAgICAgcGFkZGluZzo4cHggMTJweDtcbiAgICAgIGZvbnQtc2l6ZToxM3B4O1xuICAgICAgbWluLXdpZHRoOjE1MHB4O1xuICAgIFwiPlxuICAgICAgPGRpdiBzdHlsZT1cImZvbnQtd2VpZ2h0OjYwMDsgbWFyZ2luLWJvdHRvbTo2cHg7XCI+XG4gICAgICAgICR7ZGlzdHJpY3R9XG4gICAgICA8L2Rpdj5cbiAgICAgICR7cm93c31cbiAgICA8L2Rpdj5cbiAgYDtcbiAgfVxuXG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJteC0yIGJnLWdyYXktODAwXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0xvYWRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLXN0YXJ0IGJnLWdyYXktODAwIHAtMlwiPlxuICAgICAgPGFwcC1sb2FkZXI+PC9hcHAtbG9hZGVyPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8ZGl2IGNsYXNzPVwibXgtMiBwYi0yXCI+XG5cbiAgICA8bmctY29udGFpbmVyPlxuICAgICAgPCEtLSA8ZGl2IGlkPVwicmVnaW9uc19kaXZcIiBzdHlsZT1cIndpZHRoOiAxMDAlXCIgPjwvZGl2PiAgIC0tPlxuICAgICAgPGRpdiBpZD1cInJlZ2lvbnNfZGl2XCIgI2dvb2dsTWFwIHN0eWxlPVwid2lkdGg6IDEwMCVcIj48L2Rpdj5cbiAgICAgIDxkaXYgaWQ9XCJnb29nbGVtYXBcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiIFtzdHlsZS5oZWlnaHRdPVwiY2hhcnRIZWlnaHRcIj48L2Rpdj5cblxuICAgIDwvbmctY29udGFpbmVyPlxuXG5cblxuICA8L2Rpdj5cblxuXG48L2Rpdj4iXX0=
|
|
547
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLWdlby1tYXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2dvb2dsZS1nZW8tbWFwL2dvb2dsZS1nZW8tbWFwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nb29nbGUtZ2VvLW1hcC9nb29nbGUtZ2VvLW1hcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLE1BQU0sTUFBTSwrQ0FBK0MsQ0FBQzs7Ozs7QUFRbkUsTUFBTSxPQUFPLHFCQUFxQjtJQTRLaEMsWUFBbUIsYUFBNEI7UUFBNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFuSzlCLHlCQUFvQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzdELGNBQVMsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsRCxpQ0FBNEIsR0FDM0MsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNaLHFCQUFnQixHQUFZLElBQUksQ0FBQztRQWUxQyxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBSWIsV0FBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQU14QywrQkFBMEIsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUN2RCx3QkFBbUIsR0FBVyxRQUFRLENBQUM7UUFDdkMsd0JBQW1CLEdBQVcsQ0FBQyxRQUFRLENBQUE7SUFvSVksQ0FBQztJQWxJcEQsSUFDSSxlQUFl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Q0FBQyxNQUFNLEVBQUUsRUFBRTtZQUM5QyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELHNCQUFzQixDQUFDLFFBQWdCLEVBQUUsR0FBUSxFQUFFLGFBQW9CO1FBRXJFLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs7Y0FFMUIsQ0FBQyxDQUFDLE9BQU87Z0JBQ1AsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVM7O0dBRTVDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFVixPQUFPOzs7Ozs7Ozs7VUFTRCxRQUFROztRQUVWLElBQUk7O0dBRVQsQ0FBQztJQUNGLENBQUM7O2tIQTl1QlUscUJBQXFCO3NHQUFyQixxQkFBcUIsdVlDbEJsQyxxaUJBcUJNOzJGREhPLHFCQUFxQjtrQkFKakMsU0FBUzsrQkFDRSxvQkFBb0I7b0dBSVAsUUFBUTtzQkFBOUIsU0FBUzt1QkFBQyxVQUFVO2dCQVFKLG9CQUFvQjtzQkFBcEMsTUFBTTtnQkFDVSxTQUFTO3NCQUF6QixNQUFNO2dCQUNVLDRCQUE0QjtzQkFBNUMsTUFBTTtnQkFFRSxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBOEJGLGVBQWU7c0JBRGxCLEtBQUs7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IG1vbWVudCBmcm9tICcuLi8uLi8uLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL21vbWVudC1oZWxwZXInO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvY29tbW9uJztcbmRlY2xhcmUgdmFyIGdvb2dsZTogYW55O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiYXBwLWdvb2dsZS1nZW8tbWFwXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vZ29vZ2xlLWdlby1tYXAuY29tcG9uZW50Lmh0bWxcIixcbn0pXG5leHBvcnQgY2xhc3MgR29vZ2xlR2VvTWFwQ29tcG9uZW50IHtcbiAgQFZpZXdDaGlsZChcImdvb2dsTWFwXCIpIGdvb2dsTWFwOiBFbGVtZW50UmVmO1xuICBjaGFyRGF0YTogYW55O1xuICBjaGFydEhlaWdodDogYW55O1xuICBiYWNncm91bmRDb2xvcjogYW55O1xuICBtYXBDb2xvcnM6IGFueTtcbiAgY2hhcnRUeXBlOiBhbnk7XG4gIHRvb3RUaXBDb2x1bW46IGFueTtcbiAgcmVnaW9uOiBhbnk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgZ2V0VGFibGVDb25maWdPdXRQdXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIG9Sb3dDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgb25yaWdodENsaWNrQ29udGV4dFNlbGVjdGlvbjogRXZlbnRFbWl0dGVyPGFueT4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQElucHV0KCkgcmlnaHRDbGlja0VuYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIGlzTG9hZGVyOiBib29sZWFuO1xuICBwYWdlX2NvbmZpZzogYW55O1xuICBwYWdlX3Bhcm1zOiBhbnk7XG4gIHJlZ2lvbkNvZGU6IGFueTtcbiAgLy8gaGVhdCBNYXAgc3RhcnRcbiAgbWFwOiBhbnk7XG4gIGxvY2F0aW9ucztcbiAgbWFwVFlwZTogYW55O1xuICBtYXBPcHRpb25Gb3JIZWF0TWFwOiB7XG4gICAgem9vbTogbnVtYmVyO1xuICB9O1xuICBjdXJyZW50SW5mb1dpbmRvdzogYW55OyAvLyBUcmFjayB0aGUgb3BlbiBJbmZvV2luZG93XG4gIC8vIGhlYXQgTWFwIGVuZFxuICAvL2hlYXQgb25seSBtYXAgc3RhcnQgLy9cbiAgbWFya2VycyA9IFtdO1xuICBoZWF0bWFwOiBhbnk7XG4gIGhlYXRtYXBEYXRhOiBhbnk7XG4gIHpvb21WYWx1Rm9yQWxsOiBudW1iZXI7XG4gIGJvdW5kcyA9IG5ldyBnb29nbGUubWFwcy5MYXRMbmdCb3VuZHMoKTtcbiAgLy9oZWF0IG9ubHkgbWFwIGVuZCAvL1xuICBzb3J0Qnk6IGFueTtcbiAgZmlsdGVyZWRPYmplY3RzOiBhbnk7XG5cbiAgLy9jaG9yb3BsZXRoTWFwIHZhcmlhYmxlcy8vXG4gIGNob3JvcGxldGhfbWFwX2RhdGFfc291cmNlID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgbWluQ2hvcm9wbGV0aE1hcENudDogbnVtYmVyID0gSW5maW5pdHk7XG4gIG1heENob3JvcGxldGhNYXBDbnQ6IG51bWJlciA9IC1JbmZpbml0eVxuXG4gIEBJbnB1dChcImNoYXJ0RGF0YVNvdXJjZVwiKVxuICBzZXQgY2hhcnREYXRhU291cmNlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNMb2FkZXIgPSB0cnVlO1xuICAgICAgdGhpcy5wYWdlX2NvbmZpZyA9IHZhbHVlO1xuICAgICAgdGhpcy5wYWdlX3Bhcm1zID0gdmFsdWUudGl0bGVQYXJhbXM7XG4gICAgICB0aGlzLnNvcnRCeSA9IHZhbHVlLmtwaUNvbmZpZz8uZGF0YUNvbmZpZz8uc29ydEJ5O1xuXG4gICAgICAvLyB0aGlzLmluUm9hbWVyR2VvQ2hhcnQubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnJztcbiAgICAgIGlmIChcbiAgICAgICAgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UgJiZcbiAgICAgICAgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UubGVuZ3RoICE9PSAwXG4gICAgICApIHtcbiAgICAgICAgaWYgKHZhbHVlLmtwaUNvbmZpZy5mb3JtYXRlID09IFwibW9udGhseVwiKSB7XG4gICAgICAgICAgdGhpcy5tYXBUWXBlID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcubWFwVHlwZTtcbiAgICAgICAgICBpZiAodGhpcy5tYXBUWXBlID09IFwiZ2VvTWFwXCIpIHtcbiAgICAgICAgICAgIHRoaXMucmVnaW9uID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcucmVnaW9uO1xuICAgICAgICAgICAgdGhpcy5yZWdpb25Db2RlID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcucmVnaW9uQ29kZTtcbiAgICAgICAgICAgIHRoaXMudG9vdFRpcENvbHVtbiA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNoYXJ0X2NvbmZpZztcbiAgICAgICAgICAgIGxldCBkYXRhID0gdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2U7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0SGVpZ2h0ID0gYCR7dmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuc2l6ZX1weGA7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0VHlwZSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNoYXJ0VHlwZTtcbiAgICAgICAgICAgIHRoaXMuYmFjZ3JvdW5kQ29sb3IgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICAgICAgICB0aGlzLm1hcENvbG9ycyA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNvbG9ycztcbiAgICAgICAgICAgIC8vIGxldCBjb25maWcgPSB2YWx1ZS5jaGFydENvbmZpZztcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGEgPSBbXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZ1tcImFyZ3VtZW50RmllbGRcIl0sXG4gICAgICAgICAgICAgICAgdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWdbXCJjaGFydFZhbHVlRmllbGRcIl0sXG4gICAgICAgICAgICAgICAgeyB0eXBlOiBcInN0cmluZ1wiLCByb2xlOiBcInRvb2x0aXBcIiwgcDogeyBodG1sOiB0cnVlIH0gfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIF0uY29uY2F0KFxuICAgICAgICAgICAgICBkYXRhLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvb2x0aXAgPSB0aGlzLmdldFRvb2x0aXAoaXRlbSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgIGl0ZW1bdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWdbXCJhcmd1bWVudEZpZWxkXCJdXSxcbiAgICAgICAgICAgICAgICAgIGl0ZW1bdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWdbXCJjaGFydFZhbHVlRmllbGRcIl1dLFxuICAgICAgICAgICAgICAgICAgdG9vbHRpcCxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuY2hhckRhdGEgPSBmb3JtYXR0ZWREYXRhO1xuICAgICAgICAgICAgLy8gdGhpcy5sb2FkR29vZ2xlQ2hhcnRzKCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAvLyB0aGlzLmxvYWRHb29nbGVDaGFydHMoKTtcbiAgICAgICAgICAgIH0sIDIwMCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1hcFRZcGUgPT0gXCJidWJibGVNYXBcIikge1xuICAgICAgICAgICAgdGhpcy5sb2NhdGlvbnMgPSB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZTtcbiAgICAgICAgICAgIHRoaXMuY2hhcnRIZWlnaHQgPSBgJHt2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5zaXplfXB4YDtcbiAgICAgICAgICAgIHRoaXMudG9vdFRpcENvbHVtbiA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNoYXJ0X2NvbmZpZztcbiAgICAgICAgICAgIHRoaXMubWFwT3B0aW9uRm9ySGVhdE1hcCA9IHtcbiAgICAgICAgICAgICAgem9vbTogdGhpcy56b29tVmFsdUZvckFsbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubWFwVFlwZSA9PSBcImNob3JvcGxldGhNYXBcIikge1xuICAgICAgICAgICAgZGVidWdnZXJcblxuICAgICAgICAgICAgbGV0IGNob3JvcGxldGhNYXBEYXRhU291cmNlID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgICAgICAgICAgIGxldCBjaG9yb3BsZXRoVG9vbHRpcERhdGFTb3VyY2UgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuXG5cbiAgICAgICAgICAgIGxldCBjaGFydENvbmZpZyA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnO1xuXG4gICAgICAgICAgICB0aGlzLmNoYXJ0SGVpZ2h0ID0gYCR7Y2hhcnRDb25maWcuc2l6ZX1weGA7XG5cbiAgICAgICAgICAgIGxldCB0b290VGlwQ29sdW1uID0gY2hhcnRDb25maWcuY2hhcnRfY29uZmlnXG4gICAgICAgICAgICAgIC5maWx0ZXIoYyA9PiBjLmRpc3BsYXlGb3IgPT09ICdtYXAnIHx8IGMuZGlzcGxheUZvciA9PT0gJ3Rvb2x0aXAnKTtcblxuICAgICAgICAgICAgY29uc3QgdmFsdWVGaWVsZCA9XG4gICAgICAgICAgICAgIGNoYXJ0Q29uZmlnLmNoYXJ0X2NvbmZpZy5maW5kKGMgPT4gYy5kaXNwbGF5Rm9yID09PSAnbWFwJyk/LmRhdGFGaWVsZDtcblxuICAgICAgICAgICAgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UuZm9yRWFjaChkID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qga2V5ID0gZFtjaGFydENvbmZpZy5hcmd1bWVudEZpZWxkXS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IHZhbCA9IGRbdmFsdWVGaWVsZF07XG5cbiAgICAgICAgICAgICAgY2hvcm9wbGV0aE1hcERhdGFTb3VyY2Uuc2V0KGtleSwgdmFsKTtcbiAgICAgICAgICAgICAgY2hvcm9wbGV0aFRvb2x0aXBEYXRhU291cmNlLnNldChrZXksIGQpO1xuXG4gICAgICAgICAgICAgIHRoaXMubWluQ2hvcm9wbGV0aE1hcENudCA9IE1hdGgubWluKHRoaXMubWluQ2hvcm9wbGV0aE1hcENudCwgZFt2YWx1ZUZpZWxkXSk7XG4gICAgICAgICAgICAgIHRoaXMubWF4Q2hvcm9wbGV0aE1hcENudCA9IE1hdGgubWF4KHRoaXMubWF4Q2hvcm9wbGV0aE1hcENudCwgZFt2YWx1ZUZpZWxkXSk7XG4gICAgICAgICAgICB9KTtcblxuXG4gICAgICAgICAgICB0aGlzLmluaXRDaG9yb3BsZXRoTWFwTWFwKGNoYXJ0Q29uZmlnLCB0b290VGlwQ29sdW1uLCBjaG9yb3BsZXRoTWFwRGF0YVNvdXJjZSwgY2hvcm9wbGV0aFRvb2x0aXBEYXRhU291cmNlKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgICAgIC8vIHRoaXMubG9hZEdvb2dsZUNoYXJ0cygpO1xuICAgICAgICAgICAgfSwgMjAwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2NhdGlvbnMgPSB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZTtcbiAgICAgICAgICAgIHRoaXMuY2hhcnRIZWlnaHQgPSBgJHt2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5zaXplfXB4YDtcbiAgICAgICAgICAgIHRoaXMudG9vdFRpcENvbHVtbiA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNoYXJ0X2NvbmZpZztcbiAgICAgICAgICAgIHRoaXMuem9vbVZhbHVGb3JBbGwgPSBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgICB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnpvb21cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLm1hcE9wdGlvbkZvckhlYXRNYXAgPSB7XG4gICAgICAgICAgICAgIHpvb206IHRoaXMuem9vbVZhbHVGb3JBbGxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIGlmICh2YWx1ZS5rcGlDb25maWcuZm9ybWF0ZSA9PSBcImRhaWx5XCIpIHtcbiAgICAgICAgICAgIHRoaXMubWFwVFlwZSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcFR5cGU7XG4gICAgICAgICAgICBjb25zdCBzb3J0ZWREYXRhID0gdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2VcbiAgICAgICAgICAgICAgLmZpbHRlcihyZWNvcmQgPT4gcmVjb3JkW3RoaXMuc29ydEJ5XSlcbiAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IG1vbWVudChiW3RoaXMuc29ydEJ5XSkuZGlmZihtb21lbnQoYVt0aGlzLnNvcnRCeV0pKSk7XG4gICAgICAgICAgICBjb25zdCBtb3N0UmVjZW50UmVjb3JkID0gc29ydGVkRGF0YVswXTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlLmVuZERhdGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZE9iamVjdHMgPSBzb3J0ZWREYXRhLmZpbHRlcihkYXRhID0+IGRhdGFbdGhpcy5zb3J0QnldID09PSB2YWx1ZS5lbmREYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPYmplY3RzID0gc29ydGVkRGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhW3RoaXMuc29ydEJ5XSA9PT0gbW9zdFJlY2VudFJlY29yZFt0aGlzLnNvcnRCeV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5tYXBUWXBlID09IFwiYnViYmxlTWFwXCIpIHtcbiAgICAgICAgICAgICAgdGhpcy5sb2NhdGlvbnMgPSB0aGlzLmZpbHRlcmVkT2JqZWN0cztcbiAgICAgICAgICAgICAgdGhpcy5jaGFydEhlaWdodCA9IGAke3ZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnNpemV9cHhgO1xuICAgICAgICAgICAgICB0aGlzLnRvb3RUaXBDb2x1bW4gPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5jaGFydF9jb25maWc7XG4gICAgICAgICAgICAgIHRoaXMubWFwT3B0aW9uRm9ySGVhdE1hcCA9IHtcbiAgICAgICAgICAgICAgICB6b29tOiB0aGlzLnpvb21WYWx1Rm9yQWxsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyB0aGlzLmxvYWRHb29nbGVIZWF0T25seU1hcHModGhpcy5sb2NhdGlvbnMpO1xuXG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubWFwVFlwZSA9PSBcImdlb01hcFwiKSB7XG4gICAgICB0aGlzLmxvYWRHb29nbGVDaGFydHMoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubWFwVFlwZSA9PSBcImhlYXRNYXBcIikge1xuICAgICAgaWYgKHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuaGVhdE1hcENhdGVnb3J5ID09IFwiaGVhdE1hcE9ubHlcIikge1xuICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMubG9hZEdvb2dsZUhlYXRPbmx5TWFwcyh0aGlzLmxvY2F0aW9ucyk7XG5cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5oZWF0TWFwQ2F0ZWdvcnkgPT0gXCJoZWF0TWFwTWFya2VyXCIpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVNYXAoKTtcbiAgICAgICAgdGhpcy5hZGRNYXJrZXJzKCk7XG4gICAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyAgIHRoaXMubG9hZE1hcCgpO1xuICAgICAgICAvLyB9LCAwKTtcblxuXG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplSGVhdFdpdGhNYXJrZXJNYXAodGhpcy5sb2NhdGlvbnMpO1xuXG4gICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKHRoaXMubWFwVFlwZSA9PSBcImNob3JvcGxldGhNYXBcIikge1xuXG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZU1hcCgpO1xuICAgICAgdGhpcy5hZGRCdWJibGVNYXJrZXJzKCk7XG4gICAgfVxuICB9XG4gIC8vICBHZW8gTWFwIHN0YXJ0IC8vXG4gIGxvYWRHb29nbGVDaGFydHMoKSB7XG4gICAgZ29vZ2xlLmNoYXJ0cy5sb2FkKFwiY3VycmVudFwiLCB7XG4gICAgICBwYWNrYWdlczogW3RoaXMuY2hhcnRUeXBlXSxcbiAgICB9KTtcbiAgICBnb29nbGUuY2hhcnRzLnNldE9uTG9hZENhbGxiYWNrKHRoaXMuZHJhd0NoYXJ0LmJpbmQodGhpcykpO1xuICB9XG5cbiAgZHJhd0NoYXJ0KCkge1xuICAgIGNvbnN0IGRhdGEgPSBnb29nbGUudmlzdWFsaXphdGlvbi5hcnJheVRvRGF0YVRhYmxlKHRoaXMuY2hhckRhdGEpO1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uQ29uZmlnKCk7XG5cbiAgICAvLyBvcHRpb25zWydkYXRhTW9kZSddID0gJ3JlZ2lvbnMnO1xuXG4gICAgY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uR2VvQ2hhcnQoXG4gICAgICB0aGlzLmdvb2dsTWFwLm5hdGl2ZUVsZW1lbnRcbiAgICApO1xuICAgIHRoaXMuZ29vZ2xNYXAubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmNoYXJ0SGVpZ2h0O1xuXG4gICAgY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTtcbiAgfVxuXG4gIGdldFRvb2x0aXAoZGF0YSkge1xuICAgIGxldCB0b29sVGlwRGF0YSA9IFwiXCI7XG4gICAgdGhpcy50b290VGlwQ29sdW1uLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZGF0YVtlbGVtZW50LmRhdGFGaWVsZF0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgdG9vbFRpcERhdGEgKz1cbiAgICAgICAgICBcIjxkaXYgY2xhc3M9J2lubGluZSc+PGI+XCIgK1xuICAgICAgICAgIGVsZW1lbnQuY2FwdGlvbiArXG4gICAgICAgICAgXCI6PC9iPjwvZGl2PiBcIiArXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlLnJvdW5kT2ZmVGlsbFR3byhkYXRhW2VsZW1lbnQuZGF0YUZpZWxkXSwgMikgK1xuICAgICAgICAgIFwiPGJyIC8+XCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b29sVGlwRGF0YSArPVxuICAgICAgICAgIFwiPGRpdiBjbGFzcz0naW5saW5lJz48Yj5cIiArXG4gICAgICAgICAgZWxlbWVudC5jYXB0aW9uICtcbiAgICAgICAgICBcIjo8L2I+PC9kaXY+IFwiICtcbiAgICAgICAgICBkYXRhW2VsZW1lbnQuZGF0YUZpZWxkXSArXG4gICAgICAgICAgXCI8YnIgLz5cIjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdG9vbFRpcERhdGE7XG4gIH1cblxuICBnZXRPcHRpb25Db25maWcoKSB7XG4gICAgaWYgKHRoaXMucmVnaW9uID09IFwiY2l0eVwiKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICByZWdpb246IHRoaXMucmVnaW9uQ29kZSxcbiAgICAgICAgZGlzcGxheU1vZGU6IFwibWFya2Vyc1wiLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoaXMuYmFjZ3JvdW5kQ29sb3IsXG4gICAgICAgIHRvb2x0aXA6IHsgaXNIdG1sOiB0cnVlIH0sXG4gICAgICAgIGNvbG9yQXhpczogeyBjb2xvcnM6IHRoaXMubWFwQ29sb3JzIH0sXG4gICAgICB9O1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5iYWNncm91bmRDb2xvcixcbiAgICAgICAgdG9vbHRpcDogeyBpc0h0bWw6IHRydWUgfSxcbiAgICAgICAgY29sb3JBeGlzOiB7IGNvbG9yczogdGhpcy5tYXBDb2xvcnMgfSxcbiAgICAgIH07XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG4gIH1cblxuICAvLyAgR2VvIE1hcCBlbmQgLy9cblxuICAvLyBIZWF0IE1hcCBzdGFydCAvL1xuICBpbml0aWFsaXplTWFwKCk6IHZvaWQge1xuICAgIGNvbnN0IG1hcE9wdGlvbnMgPSB0aGlzLm1hcE9wdGlvbkZvckhlYXRNYXA7XG4gICAgLy8ge1xuICAgIC8vICAgY2VudGVyOiB7IGxhdDogMzcuMDkwMiwgbG5nOiAtOTUuNzEyOSB9LCAvLyBDZW50ZXIgb2YgdGhlIFVTQVxuICAgIC8vICAgem9vbTogNSxcbiAgICAvLyB9O1xuXG4gICAgaWYgKHRoaXMubWFwVFlwZSA9PSBcImJ1YmJsZU1hcFwiKSB7XG4gICAgICBtYXBPcHRpb25zWydzdHlsZXMnXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGZlYXR1cmVUeXBlOiAnYWxsJyxcbiAgICAgICAgICBzdHlsZXJzOiBbXG4gICAgICAgICAgICB7IHNhdHVyYXRpb246IC0xMDAgfSxcbiAgICAgICAgICAgIHsgbGlnaHRuZXNzOiA3MCB9LFxuICAgICAgICAgICAgeyB2aXNpYmlsaXR5OiAnc2ltcGxpZmllZCcgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZmVhdHVyZVR5cGU6ICdhZG1pbmlzdHJhdGl2ZS5jb3VudHJ5JyxcbiAgICAgICAgICBlbGVtZW50VHlwZTogJ2xhYmVscycsXG4gICAgICAgICAgc3R5bGVyczogW1xuICAgICAgICAgICAgeyBsaWdodG5lc3M6IC0zMCB9LCAvLyBEYXJrZW4gbGFiZWxzIGZ1cnRoZXJcbiAgICAgICAgICAgIHsgdmlzaWJpbGl0eTogJ29uJyB9LFxuICAgICAgICAgICAgeyBmb250V2VpZ2h0OiAnYm9sZCcgfSwgLy8gTWFrZSBsYWJlbHMgYm9sZFxuICAgICAgICAgICAgeyBmb250U2l6ZTogJzEycHgnIH0gLy8gSW5jcmVhc2UgZm9udCBzaXplXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZlYXR1cmVUeXBlOiBcImFkbWluaXN0cmF0aXZlLmNvdW50cnlcIixcbiAgICAgICAgICBlbGVtZW50VHlwZTogXCJnZW9tZXRyeS5zdHJva2VcIixcbiAgICAgICAgICBzdHlsZXJzOiBbXG4gICAgICAgICAgICB7IGxpZ2h0bmVzczogLTQwIH0sIC8vIERhcmtlbiBib3JkZXJzIHNpZ25pZmljYW50bHlcbiAgICAgICAgICAgIHsgd2VpZ2h0OiAxLjUgfSwgLy8gSW5jcmVhc2UgYm9yZGVyIHRoaWNrbmVzc1xuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBmZWF0dXJlVHlwZTogXCJhZG1pbmlzdHJhdGl2ZS5jb3VudHJ5XCIsXG4gICAgICAgICAgZWxlbWVudFR5cGU6IFwiZ2VvbWV0cnkuZmlsbFwiLFxuICAgICAgICAgIHN0eWxlcnM6IFtcbiAgICAgICAgICAgIHsgbGlnaHRuZXNzOiA5MCB9IC8vIEtlZXAgZmlsbCB2ZXJ5IGxpZ2h0XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuXG5cbiAgICB0aGlzLm1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAoXG4gICAgICAvLyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlZ2lvbnNfZGl2XCIpICxcbiAgICAgIHRoaXMuZ29vZ2xNYXAubmF0aXZlRWxlbWVudCxcbiAgICAgIG1hcE9wdGlvbnNcbiAgICApO1xuICAgIHRoaXMuZ29vZ2xNYXAubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmNoYXJ0SGVpZ2h0O1xuICB9XG5cbiAgLy8gQWRkIG1hcmtlcnMgdG8gdGhlIG1hcFxuICBhZGRNYXJrZXJzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmljb24pIHtcblxuICAgIH1cbiAgICB0aGlzLmxvY2F0aW9ucy5mb3JFYWNoKChsb2NhdGlvbikgPT4ge1xuICAgICAgY29uc3QgbWFya2VyID0gbmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7XG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbGF0OiBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgbG9jYXRpb25bdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXJrZXJMYXRpdHVkZV1cbiAgICAgICAgICApLFxuICAgICAgICAgIGxuZzogcGFyc2VGbG9hdChcbiAgICAgICAgICAgIGxvY2F0aW9uW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcubWFya2VyTG9uZ2l0dWRlXVxuICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIGljb246IHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuaWNvbiA/IHtcbiAgICAgICAgICB1cmw6IHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuaWNvbiwgLy8gUmVwbGFjZSB3aXRoIHlvdXIgaWNvbiBwYXRoXG4gICAgICAgICAgc2NhbGVkU2l6ZToge1xuICAgICAgICAgICAgd2lkdGg6IDMyLFxuICAgICAgICAgICAgaGVpZ2h0OiAzMixcbiAgICAgICAgICB9LFxuICAgICAgICB9IDogXCJcIixcbiAgICAgICAgLy8gdG9vbHRpcFRleHQ6XG4gICAgICAgIG1hcDogdGhpcy5tYXAsXG4gICAgICAgIC8vIHRpdGxlOiBgJHtsb2NhdGlvbi5jaXR5fTogJCR7bG9jYXRpb24udG90YWxfc2FsZXNfYW1vdW50fWAsXG4gICAgICAgIHRpdGxlOiBgJHtsb2NhdGlvbi5jaXR5fTogJCR7bG9jYXRpb24udG90YWxfc2FsZXNfYW1vdW50fWAsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYm91bmRzLmV4dGVuZChtYXJrZXIuZ2V0UG9zaXRpb24oKSk7XG4gICAgICB0aGlzLm1hcmtlcnMucHVzaChtYXJrZXIpO1xuXG4gICAgICAvLyBBZGQgYW4gaW5mbyB3aW5kb3dcbiAgICAgIGxldCBzdHJpbmdXaXRob3V0UXVvdGVzID0gdGhpcy5nZXRJbmZvV2luZG9EYXRhKGxvY2F0aW9uKTtcbiAgICAgIGNvbnN0IGluZm9XSW5kb3dEYXRhID0gdGhpcy5nZXRJbmZvV2luZG9EYXRhKGxvY2F0aW9uKTtcblxuICAgICAgY29uc3QgaW5mb1dpbmRvdyA9IG5ldyBnb29nbGUubWFwcy5JbmZvV2luZG93KHtcbiAgICAgICAgLy8gY29udGVudDogaW5mb1dJbmRvd0RhdGEsXG4gICAgICAgIGNvbnRlbnQ6IGA8ZGl2IHN0eWxlPVwiaGVpZ2h0OiAxMDAlOyB3aWR0aDogMTAwJTsgY29sb3I6IGJsYWNrOyBmb250LXNpemU6IDIwcHg7XCI+XG4gICAgICAgICR7aW5mb1dJbmRvd0RhdGF9XG4gICAgICA8L2Rpdj5gLFxuICAgICAgfSk7XG5cbiAgICAgIG1hcmtlci5hZGRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEluZm9XaW5kb3cpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRJbmZvV2luZG93LmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaW5mb1dpbmRvdy5vcGVuKHRoaXMubWFwLCBtYXJrZXIpO1xuICAgICAgICB0aGlzLmN1cnJlbnRJbmZvV2luZG93ID0gaW5mb1dpbmRvdztcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMubWFwLmZpdEJvdW5kcyh0aGlzLmJvdW5kcyk7XG5cblxuICB9XG5cbiAgZ2V0SW5mb1dpbmRvRGF0YShkYXRhKSB7XG4gICAgbGV0IHRvb2xUaXBEYXRhID0gYGA7XG4gICAgdGhpcy50b290VGlwQ29sdW1uLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZGF0YVtlbGVtZW50LmRhdGFGaWVsZF0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgdG9vbFRpcERhdGEgKz1cbiAgICAgICAgICBgPGRpdiBjbGFzcz0naW5saW5lJz48Yj5gICtcbiAgICAgICAgICBlbGVtZW50LmNhcHRpb24gK1xuICAgICAgICAgIGA6PC9iPjwvZGl2PiBgICtcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2Uucm91bmRPZmZUaWxsVHdvKGRhdGFbZWxlbWVudC5kYXRhRmllbGRdLCAyKSArXG4gICAgICAgICAgYDxiciAvPmA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b29sVGlwRGF0YSArPVxuICAgICAgICAgIGA8ZGl2IGNsYXNzPSdpbmxpbmUnPjxiPmAgK1xuICAgICAgICAgIGVsZW1lbnQuY2FwdGlvbiArXG4gICAgICAgICAgYDo8L2I+PC9kaXY+IGAgK1xuICAgICAgICAgIGRhdGFbZWxlbWVudC5kYXRhRmllbGRdICtcbiAgICAgICAgICBgPGJyIC8+YDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdG9vbFRpcERhdGE7XG4gIH1cbiAgLy8gSGVhdCBNYXAgRW5kIC8vXG5cbiAgLy9oZWF0IG9ubHkgbWFwIHN0YXJ0IC8vXG5cbiAgbG9hZEdvb2dsZUhlYXRPbmx5TWFwcyhkYXRhKTogdm9pZCB7XG4gICAgdGhpcy5oZWF0bWFwRGF0YSA9IFtdO1xuICAgIGRhdGEuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgbGV0IGxhdGl0dWRlID0gcGFyc2VGbG9hdChcbiAgICAgICAgZWxlbWVudFt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxhdGl0dWRlXVxuICAgICAgKTtcbiAgICAgIGxldCBsb2d0aXR1ZGUgPSBwYXJzZUZsb2F0KFxuICAgICAgICBlbGVtZW50W3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcubWFya2VyTG9uZ2l0dWRlXVxuICAgICAgKTtcbiAgICAgIC8vIGxldCB3ZWlnaHQgPSAoY2VsbE5vZGUucHJvcGVydGllc1snV2VpZ2h0J10gIT0gdW5kZWZpbmVkKSA/IGNlbGxOb2RlLnByb3BlcnRpZXNbJ1dlaWdodCddIDogXCJOQVwiO1xuICAgICAgdGhpcy5oZWF0bWFwRGF0YS5wdXNoKHtcbiAgICAgICAgbG9jYXRpb246IG5ldyBnb29nbGUubWFwcy5MYXRMbmcobGF0aXR1ZGUsIGxvZ3RpdHVkZSlcbiAgICAgICAgLy8gd2VpZ2h0OiBwYXJzZUZsb2F0KHdlaWdodCksXG5cbiAgICAgIH0pO1xuICAgICAgdGhpcy5ib3VuZHMuZXh0ZW5kKG5ldyBnb29nbGUubWFwcy5MYXRMbmcobGF0aXR1ZGUsIGxvZ3RpdHVkZSkpO1xuICAgIH0pO1xuICAgIGNvbnN0IG1hcE9wdGlvbnMgPSB7XG4gICAgICB6b29tOiB0aGlzLnpvb21WYWx1Rm9yQWxsXG4gICAgfTtcblxuXG5cblxuICAgIHRoaXMubWFwID0gbmV3IGdvb2dsZS5tYXBzLk1hcCh0aGlzLmdvb2dsTWFwLm5hdGl2ZUVsZW1lbnQsIG1hcE9wdGlvbnMpO1xuICAgIHRoaXMuZ29vZ2xNYXAubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmNoYXJ0SGVpZ2h0O1xuICAgIHRoaXMubWFwLmZpdEJvdW5kcyh0aGlzLmJvdW5kcyk7XG4gICAgdGhpcy5oZWF0bWFwID0gbmV3IGdvb2dsZS5tYXBzLnZpc3VhbGl6YXRpb24uSGVhdG1hcExheWVyKHtcbiAgICAgIGRhdGE6IHRoaXMuaGVhdG1hcERhdGEsXG4gICAgICBtYXA6IHRoaXMubWFwLFxuICAgIH0pO1xuXG5cbiAgfVxuXG5cbiAgLy9oZWF0IG9ubHkgbWFwIGVuZCAvL1xuXG4gIC8vaGVhdCBhbmQgTWFya2VyICBtYXAgU3RhcnQgLy9cbiAgaW5pdGlhbGl6ZUhlYXRXaXRoTWFya2VyTWFwKGRhdGEpIHtcbiAgICAvLyBJbml0aWFsaXplIG1hcFxuICAgIHRoaXMubWFwID0gbmV3IGdvb2dsZS5tYXBzLk1hcCh0aGlzLmdvb2dsTWFwLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgIC8vIGNlbnRlcjogeyBsYXQ6IDM3Ljc3NDksIGxuZzogLTEyMi40MTk0IH0sXG4gICAgICB6b29tOiBwYXJzZUZsb2F0KFxuICAgICAgICB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnpvb21cbiAgICAgICksXG4gICAgfSk7XG4gICAgdGhpcy5nb29nbE1hcC5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuY2hhcnRIZWlnaHQ7XG4gICAgLy8gSW5pdGlhbGl6ZSBoZWF0bWFwIGxheWVyXG4gICAgdGhpcy5oZWF0bWFwRGF0YSA9IFtdO1xuICAgIGRhdGEuZm9yRWFjaChlbGVtZW50ID0+IHtcblxuICAgICAgbGV0IGxhdGl0dWRlID0gcGFyc2VGbG9hdChcbiAgICAgICAgZWxlbWVudFt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxhdGl0dWRlXVxuICAgICAgKTtcbiAgICAgIGxldCBsb2d0aXR1ZGUgPSBwYXJzZUZsb2F0KFxuICAgICAgICBlbGVtZW50W3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcubWFya2VyTG9uZ2l0dWRlXVxuICAgICAgKTtcbiAgICAgIHRoaXMuaGVhdG1hcERhdGEucHVzaCh7XG4gICAgICAgIGxvY2F0aW9uOiBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKGxhdGl0dWRlLCBsb2d0aXR1ZGUpXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYm91bmRzLmV4dGVuZChuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKGxhdGl0dWRlLCBsb2d0aXR1ZGUpKTtcbiAgICB9KTtcbiAgICB0aGlzLmhlYXRtYXAgPSBuZXcgZ29vZ2xlLm1hcHMudmlzdWFsaXphdGlvbi5IZWF0bWFwTGF5ZXIoe1xuICAgICAgZGF0YTogdGhpcy5oZWF0bWFwRGF0YSxcbiAgICAgIG1hcDogdGhpcy5tYXAsXG4gICAgfSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXJrZXJzXG4gICAgdGhpcy5sb2NhdGlvbnMuZm9yRWFjaCgobG9jYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IG1hcmtlciA9IG5ldyBnb29nbGUubWFwcy5NYXJrZXIoe1xuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIGxhdDogcGFyc2VGbG9hdChcbiAgICAgICAgICAgIGxvY2F0aW9uW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcubWFya2VyTGF0aXR1ZGVdXG4gICAgICAgICAgKSxcbiAgICAgICAgICBsbmc6IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICBsb2NhdGlvblt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxvbmdpdHVkZV1cbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBpY29uOiB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmljb24gPyB7XG4gICAgICAgICAgdXJsOiB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmljb24sIC8vIFJlcGxhY2Ugd2l0aCB5b3VyIGljb24gcGF0aFxuICAgICAgICAgIHNjYWxlZFNpemU6IHtcbiAgICAgICAgICAgIHdpZHRoOiAzMixcbiAgICAgICAgICAgIGhlaWdodDogMzIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSA6ICcnLFxuICAgICAgICAvLyB0b29sdGlwVGV4dDpcbiAgICAgICAgbWFwOiB0aGlzLm1hcCxcbiAgICAgICAgLy8gdGl0bGU6IGAke2xvY2F0aW9uLmNpdHl9OiAkJHtsb2NhdGlvbi50b3RhbF9zYWxlc19hbW91bnR9YCxcbiAgICAgICAgdGl0bGU6IGAke2xvY2F0aW9uLmNpdHl9OiAkJHtsb2NhdGlvbi50b3RhbF9zYWxlc19hbW91bnR9YCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5ib3VuZHMuZXh0ZW5kKG1hcmtlci5nZXRQb3NpdGlvbigpKTtcbiAgICAgIHRoaXMubWFya2Vycy5wdXNoKG1hcmtlcik7XG5cbiAgICAgIC8vIEFkZCBhbiBpbmZvIHdpbmRvd1xuXG4gICAgICAvLyBBZGQgYW4gaW5mbyB3aW5kb3dcbiAgICAgIGNvbnN0IGluZm9XSW5kb3dEYXRhID0gdGhpcy5nZXRJbmZvV2luZG9EYXRhKGxvY2F0aW9uKTtcbiAgICAgIGNvbnN0IGluZm9XaW5kb3cgPSBuZXcgZ29vZ2xlLm1hcHMuSW5mb1dpbmRvdyh7XG4gICAgICAgIGNvbnRlbnQ6IGA8ZGl2IHN0eWxlPVwiaGVpZ2h0OiAxMDAlOyB3aWR0aDogMTAwJTsgY29sb3I6IGJsYWNrOyBmb250LXNpemU6IDIwcHg7XCI+XG4gICAgICAgICAgICAke2luZm9XSW5kb3dEYXRhfVxuICAgICAgICAgIDwvZGl2PmAsXG4gICAgICB9KTtcblxuXG4gICAgICBtYXJrZXIuYWRkTGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRJbmZvV2luZG93KSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50SW5mb1dpbmRvdy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGluZm9XaW5kb3cub3Blbih0aGlzLm1hcCwgbWFya2VyKTtcbiAgICAgICAgdGhpcy5jdXJyZW50SW5mb1dpbmRvdyA9IGluZm9XaW5kb3c7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLm1hcC5maXRCb3VuZHModGhpcy5ib3VuZHMpO1xuXG4gICAgLy8gQWRkIGxpc3RlbmVyIGZvciB6b29tIGNoYW5nZXNcbiAgICB0aGlzLm1hcC5hZGRMaXN0ZW5lcignem9vbV9jaGFuZ2VkJywgKCkgPT4gdGhpcy5oYW5kbGVab29tQ2hhbmdlKCkpO1xuICB9XG5cbiAgaGFuZGxlWm9vbUNoYW5nZSgpIHtcbiAgICBjb25zdCB6b29tTGV2ZWwgPSB0aGlzLm1hcC5nZXRab29tKCk7XG4gICAgaWYgKHpvb21MZXZlbCA8IDUpIHtcbiAgICAgIC8vIFNob3cgaGVhdG1hcCBhbmQgaGlkZSBtYXJrZXJzXG4gICAgICB0aGlzLmhlYXRtYXAuc2V0TWFwKHRoaXMubWFwKTtcbiAgICAgIHRoaXMubWFya2Vycy5mb3JFYWNoKChtYXJrZXIpID0+IG1hcmtlci5zZXRNYXAobnVsbCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBIaWRlIGhlYXRtYXAgYW5kIHNob3cgbWFya2Vyc1xuICAgICAgdGhpcy5oZWF0bWFwLnNldE1hcChudWxsKTtcbiAgICAgIHRoaXMubWFya2Vycy5mb3JFYWNoKChtYXJrZXIpID0+IG1hcmtlci5zZXRNYXAodGhpcy5tYXApKTtcbiAgICB9XG4gIH1cblxuICAvL2hlYXQgYW5kIE1hcmtlciAgbWFwIEVuZCAvL1xuXG4gIC8vQnViYmxlIENoYXJ0IFN0YXJ0XG4gIGFkZEJ1YmJsZU1hcmtlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5wcmVwYXJlQnViYmxlRGF0YSgpO1xuICAgIHRoaXMubG9jYXRpb25zLmZvckVhY2goKGxvY2F0aW9uKSA9PiB7XG4gICAgICBjb25zdCBtYXJrZXIgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHtcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBsYXQ6IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICBsb2NhdGlvblt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxhdGl0dWRlXVxuICAgICAgICAgICksXG4gICAgICAgICAgbG5nOiBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgbG9jYXRpb25bdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXJrZXJMb25naXR1ZGVdXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgaWNvbjoge1xuICAgICAgICAgIHBhdGg6IGdvb2dsZS5tYXBzLlN5bWJvbFBhdGguQ0lSQ0xFLFxuICAgICAgICAgIHNjYWxlOiBNYXRoLnJvdW5kKGxvY2F0aW9uLnNhbGVzX3BlcmNlbnRhZ2UpLCAvLyBBZGp1c3QgYnViYmxlIHNpemVcbiAgICAgICAgICBmaWxsQ29sb3I6IHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuYnViYmxlQ29sb3IsXG4gICAgICAgICAgZmlsbE9wYWNpdHk6IDAuNixcbiAgICAgICAgICBzdHJva2VXZWlnaHQ6IDAsXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHRvb2x0aXBUZXh0OlxuICAgICAgICBtYXA6IHRoaXMubWFwLFxuICAgICAgICAvLyB0aXRsZTogYCR7bG9jYXRpb24uY2l0eX06ICQke2xvY2F0aW9uLnRvdGFsX3NhbGVzX2Ftb3VudH1gLFxuICAgICAgICB0aXRsZTogYCR7bG9jYXRpb24uY2l0eX06ICQke2xvY2F0aW9uW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuYWdydW1lbnRWYWx1ZV19YCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5ib3VuZHMuZXh0ZW5kKG1hcmtlci5nZXRQb3NpdGlvbigpKTtcbiAgICAgIHRoaXMubWFya2Vycy5wdXNoKG1hcmtlcik7XG5cbiAgICAgIC8vIEFkZCBhbiBpbmZvIHdpbmRvd1xuICAgICAgbGV0IHN0cmluZ1dpdGhvdXRRdW90ZXMgPSB0aGlzLmdldEluZm9XaW5kb0RhdGEobG9jYXRpb24pO1xuICAgICAgY29uc3QgaW5mb1dJbmRvd0RhdGEgPSB0aGlzLmdldEluZm9XaW5kb0RhdGEobG9jYXRpb24pO1xuXG4gICAgICBjb25zdCBpbmZvV2luZG93ID0gbmV3IGdvb2dsZS5tYXBzLkluZm9XaW5kb3coe1xuICAgICAgICAvLyBjb250ZW50OiBpbmZvV0luZG93RGF0YSxcbiAgICAgICAgY29udGVudDogYDxkaXYgc3R5bGU9XCJoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlOyBjb2xvcjogYmxhY2s7IGZvbnQtc2l6ZTogMjBweDtcIj5cbiAgICAgICAgJHtpbmZvV0luZG93RGF0YX1cbiAgICAgIDwvZGl2PmAsXG4gICAgICB9KTtcblxuICAgICAgbWFya2VyLmFkZExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50SW5mb1dpbmRvdykge1xuICAgICAgICAgIHRoaXMuY3VycmVudEluZm9XaW5kb3cuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpbmZvV2luZG93Lm9wZW4odGhpcy5tYXAsIG1hcmtlcik7XG4gICAgICAgIHRoaXMuY3VycmVudEluZm9XaW5kb3cgPSBpbmZvV2luZG93O1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5tYXAuZml0Qm91bmRzKHRoaXMuYm91bmRzKTtcblxuXG4gIH1cblxuICBwcmVwYXJlQnViYmxlRGF0YSgpIHtcbiAgICAvLyBTdGVwIDE6IEZpbmQgbWluIGFuZCBtYXggdG90YWxfc2FsZXNfYW1vdW50XG4gICAgY29uc3QgbWluU2FsZXMgPSBNYXRoLm1pbiguLi50aGlzLmxvY2F0aW9ucy5tYXAoZCA9PiBkW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuYWdydW1lbnRWYWx1ZV0pKTtcbiAgICBjb25zdCBtYXhTYWxlcyA9IE1hdGgubWF4KC4uLnRoaXMubG9jYXRpb25zLm1hcChkID0+IGRbdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5hZ3J1bWVudFZhbHVlXSkpO1xuXG4gICAgLy8gU3RlcCAyOiBEZWZpbmUgbWluIGFuZCBtYXggcGVyY2VudGFnZSB2YWx1ZXNcbiAgICBjb25zdCBtaW5QZXJjZW50YWdlID0gdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5idWJibGVNaW5pbXVtU2l6ZTtcbiAgICBjb25zdCBtYXhQZXJjZW50YWdlID0gdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5idWJibGVNYXhpbXVtU2l6ZTtcblxuICAgIC8vIFN0ZXAgMzogTm9ybWFsaXplIGZ1bmN0aW9uXG4gICAgY29uc3Qgbm9ybWFsaXplID0gKHZhbHVlLCBtaW4sIG1heCkgPT4ge1xuICAgICAgcmV0dXJuICgodmFsdWUgLSBtaW4pIC8gKG1heCAtIG1pbikpICogKG1heFBlcmNlbnRhZ2UgLSBtaW5QZXJjZW50YWdlKSArIG1pblBlcmNlbnRhZ2U7XG4gICAgfTtcblxuICAgIC8vIFN0ZXAgNDogQXNzaWduIGNhbGN1bGF0ZWQgcGVyY2VudGFnZSB0byBlYWNoIG9iamVjdFxuICAgIHRoaXMubG9jYXRpb25zLmZvckVhY2goZCA9PiB7XG4gICAgICBkLnNhbGVzX3BlcmNlbnRhZ2UgPSBNYXRoLm1pbihNYXRoLm1heChub3JtYWxpemUoZFt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmFncnVtZW50VmFsdWVdLCBtaW5TYWxlcywgbWF4U2FsZXMpLCBtaW5QZXJjZW50YWdlKSwgbWF4UGVyY2VudGFnZSk7XG4gICAgfSk7XG5cbiAgfVxuXG5cblxuICAvL0J1YmJsZSBDaGFydCBFbmRcblxuICAvLyBjaG9yb3BsZXRoTWFwIHN0YXJ0IC8vXG5cblxuXG4gIGdldENvbG9yKGNudDogbnVtYmVyLCBzdGFydENvbG9yOiBzdHJpbmcsIGVuZENvbG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChjbnQgPT09IHVuZGVmaW5lZCB8fCBjbnQgPT09IG51bGwgfHwgdGhpcy5tYXhDaG9yb3BsZXRoTWFwQ250ID09PSB0aGlzLm1pbkNob3JvcGxldGhNYXBDbnQpIHtcbiAgICAgIHJldHVybiAnI2NjY2NjYyc7XG4gICAgfVxuXG4gICAgY29uc3QgcmF0aW8gPSBNYXRoLm1pbihcbiAgICAgIE1hdGgubWF4KChjbnQgLSB0aGlzLm1pbkNob3JvcGxldGhNYXBDbnQpIC8gKHRoaXMubWF4Q2hvcm9wbGV0aE1hcENudCAtIHRoaXMubWluQ2hvcm9wbGV0aE1hcENudCksIDApLFxuICAgICAgMVxuICAgICk7XG5cbiAgICBjb25zdCBzdGFydCA9IHRoaXMuaGV4VG9SZ2Ioc3RhcnRDb2xvcik7XG4gICAgY29uc3QgZW5kID0gdGhpcy5oZXhUb1JnYihlbmRDb2xvcik7XG5cbiAgICBjb25zdCByID0gdGhpcy5sZXJwKHN0YXJ0LnIsIGVuZC5yLCByYXRpbyk7XG4gICAgY29uc3QgZyA9IHRoaXMubGVycChzdGFydC5nLCBlbmQuZywgcmF0aW8pO1xuICAgIGNvbnN0IGIgPSB0aGlzLmxlcnAoc3RhcnQuYiwgZW5kLmIsIHJhdGlvKTtcblxuICAgIHJldHVybiBgcmdiKCR7cn0sICR7Z30sICR7Yn0pYDtcbiAgfVxuXG4gIGxlcnAoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIHJhdGlvOiBudW1iZXIpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChzdGFydCArIChlbmQgLSBzdGFydCkgKiByYXRpbyk7XG4gIH1cbiAgaGV4VG9SZ2IoaGV4OiBzdHJpbmcpIHtcbiAgICBjb25zdCBjbGVhbkhleCA9IGhleC5yZXBsYWNlKCcjJywgJycpO1xuICAgIGNvbnN0IGJpZ2ludCA9IHBhcnNlSW50KGNsZWFuSGV4LCAxNik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcjogKGJpZ2ludCA+PiAxNikgJiAyNTUsXG4gICAgICBnOiAoYmlnaW50ID4+IDgpICYgMjU1LFxuICAgICAgYjogYmlnaW50ICYgMjU1XG4gICAgfTtcbiAgfVxuXG5cbiAgaW5pdENob3JvcGxldGhNYXBNYXAoY2hhcnRDb25maWc6IGFueSwgdG9vdFRpcENvbHVtbjogYW55W10sIGNob3JvcGxldGhNYXBEYXRhU291cmNlOiBNYXA8c3RyaW5nLCBudW1iZXI+LCBjaG9yb3BsZXRoVG9vbHRpcERhdGFTb3VyY2U6IE1hcDxzdHJpbmcsIGFueT4pOiB2b2lkIHtcblxuXG4gICAgIGNvbnN0IG1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAoXG4gICAgICAvLyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlZ2lvbnNfZGl2XCIpICxcbiAgICAgIHRoaXMuZ29vZ2xNYXAubmF0aXZlRWxlbWVudCxcbiAgICAgIHtcbiAgICAgICAgY2VudGVyOiB7IGxhdDogcGFyc2VGbG9hdChjaGFydENvbmZpZy5jZW50ZXJMYXQpLCBsbmc6IHBhcnNlRmxvYXQoY2hhcnRDb25maWcuY2VudGVyTG5nKSB9LFxuICAgICAgICB6b29tOiBwYXJzZUludChjaGFydENvbmZpZy56b29tKVxuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBjb25zdCBtYXAgPSBuZXcgZ29vZ2xlLm1hcHMuTWFwKFxuICAgIC8vICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dvb2dsZW1hcCcpIGFzIEhUTUxFbGVtZW50LFxuICAgICAgXG4gICAgLy8gKTtcblxuICAgIG1hcC5kYXRhLmxvYWRHZW9Kc29uKGNoYXJ0Q29uZmlnLmdqc29uRmlsZVBhdGgpO1xuXG4gICAgbWFwLmRhdGEuc2V0U3R5bGUoKGZlYXR1cmU6IGFueSkgPT4ge1xuICAgICAgY29uc3QgZGlzdHJpY3QgPSBmZWF0dXJlLmdldFByb3BlcnR5KCdkJyk/LnRvVXBwZXJDYXNlKCk7XG4gICAgICBjb25zdCBjbnQgPSBjaG9yb3BsZXRoTWFwRGF0YVNvdXJjZS5nZXQoZGlzdHJpY3QpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBmaWxsQ29sb3I6IHRoaXMuZ2V0Q29sb3IoXG4gICAgICAgICAgY250LFxuICAgICAgICAgIGNoYXJ0Q29uZmlnLmNvbG9yT25lLFxuICAgICAgICAgIGNoYXJ0Q29uZmlnLmNvbG9yVHdvXG4gICAgICAgICksXG4gICAgICAgIHN0cm9rZUNvbG9yOiAnIzU1NScsXG4gICAgICAgIHN0cm9rZVdlaWdodDogMSxcbiAgICAgICAgZmlsbE9wYWNpdHk6IDAuNzVcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbmZvV2luZG93ID0gbmV3IGdvb2dsZS5tYXBzLkluZm9XaW5kb3coKTtcblxuICAgIG1hcC5kYXRhLmFkZExpc3RlbmVyKCdtb3VzZW92ZXInLCAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgY29uc3QgZGlzdHJpY3QgPSBldmVudC5mZWF0dXJlLmdldFByb3BlcnR5KCdkJyk7XG4gICAgICBjb25zdCBrZXkgPSBkaXN0cmljdD8udG9VcHBlckNhc2UoKTtcblxuICAgICAgY29uc3Qgcm93ID0gY2hvcm9wbGV0aFRvb2x0aXBEYXRhU291cmNlLmdldChrZXkpO1xuXG4gICAgICBpbmZvV2luZG93LnNldENvbnRlbnQoXG4gICAgICAgIHRoaXMuYnVpbGRJbmZvV2luZG93Q29udGVudChkaXN0cmljdCwgcm93LCB0b290VGlwQ29sdW1uKVxuICAgICAgKTtcblxuICAgICAgaW5mb1dpbmRvdy5zZXRQb3NpdGlvbihldmVudC5sYXRMbmcpO1xuICAgICAgaW5mb1dpbmRvdy5vcGVuKG1hcCk7XG4gICAgfSk7XG5cbiAgICBtYXAuZGF0YS5hZGRMaXN0ZW5lcignbW91c2VvdXQnLCAoKSA9PiBpbmZvV2luZG93LmNsb3NlKCkpO1xuICB9XG5cblxuICBnZXRGZWF0dXJlQ2VudGVyKGZlYXR1cmUpOiBhbnkge1xuICAgIGNvbnN0IGJvdW5kcyA9IG5ldyBnb29nbGUubWFwcy5MYXRMbmdCb3VuZHMoKTtcblxuICAgIGZlYXR1cmUuZ2V0R2VvbWV0cnkoKT8uZm9yRWFjaExhdExuZygobGF0TG5nKSA9PiB7XG4gICAgICBib3VuZHMuZXh0ZW5kKGxhdExuZyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYm91bmRzLmdldENlbnRlcigpO1xuICB9XG5cbiAgYnVpbGRJbmZvV2luZG93Q29udGVudChkaXN0cmljdDogc3RyaW5nLCByb3c6IGFueSwgdG9vdFRpcENvbHVtbjogYW55W10pOiBzdHJpbmcge1xuXG4gICAgY29uc3Qgcm93cyA9IHRvb3RUaXBDb2x1bW4ubWFwKGMgPT4gYFxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO1wiPlxuICAgICAgPHNwYW4+JHtjLmNhcHRpb259PC9zcGFuPlxuICAgICAgPHN0cm9uZz4ke3Jvdz8uW2MuZGF0YUZpZWxkXSA/PyAnTm8gZGF0YSd9PC9zdHJvbmc+XG4gICAgPC9kaXY+XG4gIGApLmpvaW4oJycpO1xuXG4gICAgcmV0dXJuIGBcbiAgICA8ZGl2IHN0eWxlPVwiXG4gICAgICBjb2xvcjojMDAwO1xuICAgICAgYmFja2dyb3VuZDojZmZmO1xuICAgICAgcGFkZGluZzo4cHggMTJweDtcbiAgICAgIGZvbnQtc2l6ZToxM3B4O1xuICAgICAgbWluLXdpZHRoOjE1MHB4O1xuICAgIFwiPlxuICAgICAgPGRpdiBzdHlsZT1cImZvbnQtd2VpZ2h0OjYwMDsgbWFyZ2luLWJvdHRvbTo2cHg7XCI+XG4gICAgICAgICR7ZGlzdHJpY3R9XG4gICAgICA8L2Rpdj5cbiAgICAgICR7cm93c31cbiAgICA8L2Rpdj5cbiAgYDtcbiAgfVxuXG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJteC0yIGJnLWdyYXktODAwXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0xvYWRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLXN0YXJ0IGJnLWdyYXktODAwIHAtMlwiPlxuICAgICAgPGFwcC1sb2FkZXI+PC9hcHAtbG9hZGVyPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8ZGl2IGNsYXNzPVwibXgtMiBwYi0yXCI+XG5cbiAgICA8bmctY29udGFpbmVyPlxuICAgICAgPCEtLSA8ZGl2IGlkPVwicmVnaW9uc19kaXZcIiBzdHlsZT1cIndpZHRoOiAxMDAlXCIgPjwvZGl2PiAgIC0tPlxuICAgICAgPGRpdiBpZD1cInJlZ2lvbnNfZGl2XCIgI2dvb2dsTWFwIHN0eWxlPVwid2lkdGg6IDEwMCVcIj48L2Rpdj5cbiAgICAgIDwhLS0gPGRpdiBpZD1cImdvb2dsZW1hcFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgW3N0eWxlLmhlaWdodF09XCJjaGFydEhlaWdodFwiPjwvZGl2PiAtLT5cblxuICAgIDwvbmctY29udGFpbmVyPlxuXG5cblxuICA8L2Rpdj5cblxuXG48L2Rpdj4iXX0=
|