gamma-app-controller 2.0.21 → 2.0.24

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.
@@ -678,10 +678,10 @@ export class GammaGeoChartComponent {
678
678
  }
679
679
  }
680
680
  GammaGeoChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GammaGeoChartComponent, deps: [{ token: i1.CommonService }], target: i0.ɵɵFactoryTarget.Component });
681
- GammaGeoChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: GammaGeoChartComponent, selector: "app-gamma-geo-chart", 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 <div class=\"relative w-full\">\n\n\n <div class=\"absolute left-4 top-[60px] bottom-6 z-[9999] pointer-events-none\" *ngIf=\"!isLoader\">\n <div class=\"flex items-center h-80 px-4 py-3 rounded-xl shadow-lg backdrop-blur-md bg-black/60\">\n <div class=\"w-4 h-full rounded-full shadow-xl\"\n [style.background]=\"'linear-gradient(to bottom,' + chartConfig.colorOne + ',' + chartConfig.colorTwo + ')'\">\n </div>\n\n <!-- <div class=\"flex flex-col justify-between h-80 ml-2 text-xs text-white\">\n <span>High</span>\n <span>Low</span>\n </div> -->\n </div>\n </div>\n\n\n \n\n <!-- <div class=\"absolute top-[200px] left-4 bottom-6 z-40 flex items-center\">\n <div class=\"flex items-center space-x-2\">\n <div class=\"w-4 h-full rounded-full shadow-lg\"\n [style.background]=\"'linear-gradient(to right,' + chartConfig.colorOne + ',' + chartConfig.colorTwo + ')'\"></div>\n <div class=\"flex flex-col justify-between h-full text-xs text-white\">\n <span>High</span>\n <span>Low</span>\n </div>\n </div>\n </div> -->\n\n\n <div id=\"regions_div\" #googlMap style=\"width: 100%\"></div>\n <div id=\"googlemap\" style=\"width: 100%;\" [style.height]=\"chartHeight\"></div>\n <div *ngIf=\"isLoader\" class=\"absolute inset-0 z-50 flex items-center justify-center bg-black/40 backdrop-blur-sm\">\n <div class=\"geo-chart-loader\"></div>\n </div>\n <div class=\"mx-2 pb-2\">\n <div class=\" mx-auto w-full mt-3\" *ngIf=\"isRangeSliderVisible\">\n <div class=\"flex items-center justify-between mb-2\">\n <button class=\"text-white px-3 py-2 rounded bg-gray-800 hover:bg-gray-700\" (click)=\"togglePlay()\">\n <i class=\"fa\" [ngClass]=\"isPlaying ? 'fa-pause' : 'fa-play'\"></i>\n </button>\n <div class=\"flex space-x-2 text-sm font-semibold\">\n <ng-container *ngFor=\"let year of allSelectedRangeSliderValues; let i = index\">\n <span class=\"cursor-pointer select-none px-2 py-1 rounded-md transition\" [ngClass]=\"{\n 'bg-black text-white shadow': year === selectedRangeSliderValue,\n 'text-gray-300 hover:text-white': year !== selectedRangeSliderValue\n }\" (click)=\"setYearByIndex(i)\">\n {{ year }}\n </span>\n </ng-container>\n </div>\n <button class=\"text-white px-3 py-2 rounded bg-gray-800 hover:bg-gray-700\" (click)=\"restart()\">\n <i class=\"fa fa-refresh\"></i>\n </button>\n </div>\n <input type=\"range\" class=\"w-full h-2 rounded-lg appearance-none cursor-pointer\n bg-gradient-to-r from-green-400 via-yellow-400 to-red-500\" [min]=\"0\"\n [max]=\"allSelectedRangeSliderValues.length - 1\" [value]=\"choroplethMapCurrentIndex\"\n (input)=\"onYearChange($event)\" />\n </div>\n </div>\n </div>\n</div>", styles: [".geo-chart-loader{width:64px;height:64px;border:6px solid rgba(255,255,255,.2);border-top-color:#4ade80;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
681
+ GammaGeoChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: GammaGeoChartComponent, selector: "app-gamma-geo-chart", 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 <div class=\"relative w-full\">\n\n\n <div class=\"absolute left-4 bottom-6 top-[60px] z-[999999] pointer-events-none floting-side-bar\" *ngIf=\"!isLoader\">\n <div class=\"flex items-center h-80 px-4 py-3 rounded-xl shadow-lg backdrop-blur-md bg-black/60\">\n <div class=\"w-4 h-full rounded-full shadow-xl\"\n [style.background]=\"'linear-gradient(to bottom,' + chartConfig.colorOne + ',' + chartConfig.colorTwo + ')'\">\n </div>\n </div>\n </div>\n\n\n \n\n <!-- <div class=\"absolute top-[200px] left-4 bottom-6 z-40 flex items-center\">\n <div class=\"flex items-center space-x-2\">\n <div class=\"w-4 h-full rounded-full shadow-lg\"\n [style.background]=\"'linear-gradient(to right,' + chartConfig.colorOne + ',' + chartConfig.colorTwo + ')'\"></div>\n <div class=\"flex flex-col justify-between h-full text-xs text-white\">\n <span>High</span>\n <span>Low</span>\n </div>\n </div>\n </div> -->\n\n\n <div id=\"regions_div\" #googlMap style=\"width: 100%\"></div>\n <div id=\"googlemap\" style=\"width: 100%;\" [style.height]=\"chartHeight\"></div>\n <div *ngIf=\"isLoader\" class=\"absolute inset-0 z-50 flex items-center justify-center bg-black/40 backdrop-blur-sm\">\n <div class=\"geo-chart-loader\"></div>\n </div>\n <div class=\"mx-2 pb-2\">\n <div class=\" mx-auto w-full mt-3\" *ngIf=\"isRangeSliderVisible\">\n <div class=\"flex items-center justify-between mb-2\">\n <button class=\"text-white px-3 py-2 rounded bg-gray-800 hover:bg-gray-700\" (click)=\"togglePlay()\">\n <i class=\"fa\" [ngClass]=\"isPlaying ? 'fa-pause' : 'fa-play'\"></i>\n </button>\n <div class=\"flex space-x-2 text-sm font-semibold\">\n <ng-container *ngFor=\"let year of allSelectedRangeSliderValues; let i = index\">\n <span class=\"cursor-pointer select-none px-2 py-1 rounded-md transition\" [ngClass]=\"{\n 'bg-black text-white shadow': year === selectedRangeSliderValue,\n 'text-gray-300 hover:text-white': year !== selectedRangeSliderValue\n }\" (click)=\"setYearByIndex(i)\">\n {{ year }}\n </span>\n </ng-container>\n </div>\n <button class=\"text-white px-3 py-2 rounded bg-gray-800 hover:bg-gray-700\" (click)=\"restart()\">\n <i class=\"fa fa-refresh\"></i>\n </button>\n </div>\n <input type=\"range\" class=\"w-full h-2 rounded-lg appearance-none cursor-pointer\n bg-gradient-to-r from-green-400 via-yellow-400 to-red-500\" [min]=\"0\"\n [max]=\"allSelectedRangeSliderValues.length - 1\" [value]=\"choroplethMapCurrentIndex\"\n (input)=\"onYearChange($event)\" />\n </div>\n </div>\n </div>\n</div>", styles: [".geo-chart-loader{width:64px;height:64px;border:6px solid rgba(255,255,255,.2);border-top-color:#4ade80;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.floting-side-bar{top:60px;z-index:999999}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
682
682
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GammaGeoChartComponent, decorators: [{
683
683
  type: Component,
684
- args: [{ selector: "app-gamma-geo-chart", template: "<div class=\"mx-2 bg-gray-800\">\n <div class=\"relative w-full\">\n\n\n <div class=\"absolute left-4 top-[60px] bottom-6 z-[9999] pointer-events-none\" *ngIf=\"!isLoader\">\n <div class=\"flex items-center h-80 px-4 py-3 rounded-xl shadow-lg backdrop-blur-md bg-black/60\">\n <div class=\"w-4 h-full rounded-full shadow-xl\"\n [style.background]=\"'linear-gradient(to bottom,' + chartConfig.colorOne + ',' + chartConfig.colorTwo + ')'\">\n </div>\n\n <!-- <div class=\"flex flex-col justify-between h-80 ml-2 text-xs text-white\">\n <span>High</span>\n <span>Low</span>\n </div> -->\n </div>\n </div>\n\n\n \n\n <!-- <div class=\"absolute top-[200px] left-4 bottom-6 z-40 flex items-center\">\n <div class=\"flex items-center space-x-2\">\n <div class=\"w-4 h-full rounded-full shadow-lg\"\n [style.background]=\"'linear-gradient(to right,' + chartConfig.colorOne + ',' + chartConfig.colorTwo + ')'\"></div>\n <div class=\"flex flex-col justify-between h-full text-xs text-white\">\n <span>High</span>\n <span>Low</span>\n </div>\n </div>\n </div> -->\n\n\n <div id=\"regions_div\" #googlMap style=\"width: 100%\"></div>\n <div id=\"googlemap\" style=\"width: 100%;\" [style.height]=\"chartHeight\"></div>\n <div *ngIf=\"isLoader\" class=\"absolute inset-0 z-50 flex items-center justify-center bg-black/40 backdrop-blur-sm\">\n <div class=\"geo-chart-loader\"></div>\n </div>\n <div class=\"mx-2 pb-2\">\n <div class=\" mx-auto w-full mt-3\" *ngIf=\"isRangeSliderVisible\">\n <div class=\"flex items-center justify-between mb-2\">\n <button class=\"text-white px-3 py-2 rounded bg-gray-800 hover:bg-gray-700\" (click)=\"togglePlay()\">\n <i class=\"fa\" [ngClass]=\"isPlaying ? 'fa-pause' : 'fa-play'\"></i>\n </button>\n <div class=\"flex space-x-2 text-sm font-semibold\">\n <ng-container *ngFor=\"let year of allSelectedRangeSliderValues; let i = index\">\n <span class=\"cursor-pointer select-none px-2 py-1 rounded-md transition\" [ngClass]=\"{\n 'bg-black text-white shadow': year === selectedRangeSliderValue,\n 'text-gray-300 hover:text-white': year !== selectedRangeSliderValue\n }\" (click)=\"setYearByIndex(i)\">\n {{ year }}\n </span>\n </ng-container>\n </div>\n <button class=\"text-white px-3 py-2 rounded bg-gray-800 hover:bg-gray-700\" (click)=\"restart()\">\n <i class=\"fa fa-refresh\"></i>\n </button>\n </div>\n <input type=\"range\" class=\"w-full h-2 rounded-lg appearance-none cursor-pointer\n bg-gradient-to-r from-green-400 via-yellow-400 to-red-500\" [min]=\"0\"\n [max]=\"allSelectedRangeSliderValues.length - 1\" [value]=\"choroplethMapCurrentIndex\"\n (input)=\"onYearChange($event)\" />\n </div>\n </div>\n </div>\n</div>", styles: [".geo-chart-loader{width:64px;height:64px;border:6px solid rgba(255,255,255,.2);border-top-color:#4ade80;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"] }]
684
+ args: [{ selector: "app-gamma-geo-chart", template: "<div class=\"mx-2 bg-gray-800\">\n <div class=\"relative w-full\">\n\n\n <div class=\"absolute left-4 bottom-6 top-[60px] z-[999999] pointer-events-none floting-side-bar\" *ngIf=\"!isLoader\">\n <div class=\"flex items-center h-80 px-4 py-3 rounded-xl shadow-lg backdrop-blur-md bg-black/60\">\n <div class=\"w-4 h-full rounded-full shadow-xl\"\n [style.background]=\"'linear-gradient(to bottom,' + chartConfig.colorOne + ',' + chartConfig.colorTwo + ')'\">\n </div>\n </div>\n </div>\n\n\n \n\n <!-- <div class=\"absolute top-[200px] left-4 bottom-6 z-40 flex items-center\">\n <div class=\"flex items-center space-x-2\">\n <div class=\"w-4 h-full rounded-full shadow-lg\"\n [style.background]=\"'linear-gradient(to right,' + chartConfig.colorOne + ',' + chartConfig.colorTwo + ')'\"></div>\n <div class=\"flex flex-col justify-between h-full text-xs text-white\">\n <span>High</span>\n <span>Low</span>\n </div>\n </div>\n </div> -->\n\n\n <div id=\"regions_div\" #googlMap style=\"width: 100%\"></div>\n <div id=\"googlemap\" style=\"width: 100%;\" [style.height]=\"chartHeight\"></div>\n <div *ngIf=\"isLoader\" class=\"absolute inset-0 z-50 flex items-center justify-center bg-black/40 backdrop-blur-sm\">\n <div class=\"geo-chart-loader\"></div>\n </div>\n <div class=\"mx-2 pb-2\">\n <div class=\" mx-auto w-full mt-3\" *ngIf=\"isRangeSliderVisible\">\n <div class=\"flex items-center justify-between mb-2\">\n <button class=\"text-white px-3 py-2 rounded bg-gray-800 hover:bg-gray-700\" (click)=\"togglePlay()\">\n <i class=\"fa\" [ngClass]=\"isPlaying ? 'fa-pause' : 'fa-play'\"></i>\n </button>\n <div class=\"flex space-x-2 text-sm font-semibold\">\n <ng-container *ngFor=\"let year of allSelectedRangeSliderValues; let i = index\">\n <span class=\"cursor-pointer select-none px-2 py-1 rounded-md transition\" [ngClass]=\"{\n 'bg-black text-white shadow': year === selectedRangeSliderValue,\n 'text-gray-300 hover:text-white': year !== selectedRangeSliderValue\n }\" (click)=\"setYearByIndex(i)\">\n {{ year }}\n </span>\n </ng-container>\n </div>\n <button class=\"text-white px-3 py-2 rounded bg-gray-800 hover:bg-gray-700\" (click)=\"restart()\">\n <i class=\"fa fa-refresh\"></i>\n </button>\n </div>\n <input type=\"range\" class=\"w-full h-2 rounded-lg appearance-none cursor-pointer\n bg-gradient-to-r from-green-400 via-yellow-400 to-red-500\" [min]=\"0\"\n [max]=\"allSelectedRangeSliderValues.length - 1\" [value]=\"choroplethMapCurrentIndex\"\n (input)=\"onYearChange($event)\" />\n </div>\n </div>\n </div>\n</div>", styles: [".geo-chart-loader{width:64px;height:64px;border:6px solid rgba(255,255,255,.2);border-top-color:#4ade80;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.floting-side-bar{top:60px;z-index:999999}\n"] }]
685
685
  }], ctorParameters: function () { return [{ type: i1.CommonService }]; }, propDecorators: { googlMap: [{
686
686
  type: ViewChild,
687
687
  args: ["googlMap"]
@@ -697,4 +697,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
697
697
  type: Input,
698
698
  args: ["chartDataSource"]
699
699
  }] } });
700
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtbWEtZ2VvLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1nZW8tY2hhcnQvZ2FtbWEtZ2VvLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1nZW8tY2hhcnQvZ2FtbWEtZ2VvLWNoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sTUFBTSxNQUFNLCtDQUErQyxDQUFDOzs7O0FBVW5FLE1BQU0sT0FBTyxzQkFBc0I7SUF1TWpDLFlBQW1CLGFBQTRCO1FBQTVCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBbkwvQyxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBSWIsV0FBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV2Qix5QkFBb0IsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM3RCxjQUFTLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbEQsaUNBQTRCLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDN0UscUJBQWdCLEdBQVksSUFBSSxDQUFDO1FBUzFDLCtCQUEwQixHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO1FBQ3ZELHdCQUFtQixHQUFXLFFBQVEsQ0FBQztRQUN2Qyx3QkFBbUIsR0FBVyxDQUFDLFFBQVEsQ0FBQTtRQUN2QyxpQ0FBNEIsR0FBVSxFQUFF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QkFBd0IsRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUM3RixDQUFDOzttSEFuK0JVLHNCQUFzQjt1R0FBdEIsc0JBQXNCLHdZQ3BCbkMsdStGQWdFTTsyRkQ1Q08sc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNFLHFCQUFxQjtvR0FLUixRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBeUJKLG9CQUFvQjtzQkFBcEMsTUFBTTtnQkFDVSxTQUFTO3NCQUF6QixNQUFNO2dCQUNVLDRCQUE0QjtzQkFBNUMsTUFBTTtnQkFDRSxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBMkJGLGVBQWU7c0JBRGxCLEtBQUs7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IG1vbWVudCBmcm9tICcuLi8uLi8uLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL21vbWVudC1oZWxwZXInO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvY29tbW9uJztcbi8vIGltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xuZGVjbGFyZSB2YXIgZ29vZ2xlOiBhbnk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJhcHAtZ2FtbWEtZ2VvLWNoYXJ0XCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vZ2FtbWEtZ2VvLWNoYXJ0LmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogWycuL2dhbW1hLWdlby1jaGFydC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEdhbW1hR2VvQ2hhcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBAVmlld0NoaWxkKFwiZ29vZ2xNYXBcIikgZ29vZ2xNYXA6IEVsZW1lbnRSZWY7XG4gIGNoYXJEYXRhOiBhbnk7XG4gIGNoYXJ0SGVpZ2h0OiBhbnk7XG4gIGJhY2dyb3VuZENvbG9yOiBhbnk7XG4gIG1hcENvbG9yczogYW55O1xuICBjaGFydFR5cGU6IGFueTtcbiAgdG9vdFRpcENvbHVtbjogYW55O1xuICByZWdpb246IGFueTtcbiAgcmVnaW9uQ29kZTogYW55O1xuICAvLyBoZWF0IE1hcCBzdGFydFxuICBtYXA6IGFueTtcbiAgbG9jYXRpb25zO1xuICBtYXBUWXBlOiBhbnk7XG4gIG1hcE9wdGlvbkZvckhlYXRNYXA6IHtcbiAgICB6b29tOiBudW1iZXI7XG4gIH07XG4gIGN1cnJlbnRJbmZvV2luZG93OiBhbnk7XG4gIC8vIGhlYXQgTWFwIGVuZFxuICAvL2hlYXQgb25seSBtYXAgc3RhcnQgLy9cbiAgbWFya2VycyA9IFtdO1xuICBoZWF0bWFwOiBhbnk7XG4gIGhlYXRtYXBEYXRhOiBhbnk7XG4gIHpvb21WYWx1Rm9yQWxsOiBudW1iZXI7XG4gIGJvdW5kcyA9IG5ldyBnb29nbGUubWFwcy5MYXRMbmdCb3VuZHMoKTtcbiAgLy9oZWF0IG9ubHkgbWFwIGVuZCAvL1xuICBAT3V0cHV0KCkgcHVibGljIGdldFRhYmxlQ29uZmlnT3V0UHV0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBvUm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIG9ucmlnaHRDbGlja0NvbnRleHRTZWxlY3Rpb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKSByaWdodENsaWNrRW5hYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgaXNMb2FkZXI6IGJvb2xlYW47XG4gIHBhZ2VfY29uZmlnOiBhbnk7XG4gIHBhZ2VfcGFybXM6IGFueTtcbiAgc29ydEJ5OiBhbnk7XG4gIGZpbHRlcmVkT2JqZWN0czogYW55O1xuXG5cbiAgLy9jaG9yb3BsZXRoTWFwIHZhcmlhYmxlcy8vXG4gIGNob3JvcGxldGhfbWFwX2RhdGFfc291cmNlID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgbWluQ2hvcm9wbGV0aE1hcENudDogbnVtYmVyID0gSW5maW5pdHk7XG4gIG1heENob3JvcGxldGhNYXBDbnQ6IG51bWJlciA9IC1JbmZpbml0eVxuICBhbGxTZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWVzOiBhbnlbXSA9IFtdO1xuICBzZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWU6IHN0cmluZztcbiAgY2hvcm9wbGV0aE1hcERhdGFTb3VyY2UgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBjaG9yb3BsZXRoVG9vbHRpcERhdGFTb3VyY2UgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICBjaG9yb3BsZXRoTWFwRGF0YTogYW55O1xuICBpc1JhbmdlU2xpZGVyVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBjaG9yb3BsZXRoTWFwQ2hhcnRDb25maWc6IGFueTtcbiAgaXNQbGF5aW5nID0gZmFsc2U7XG4gIHBsYXlJbnRlcnZhbDogYW55O1xuICBjaG9yb3BsZXRoTWFwQ3VycmVudEluZGV4ID0gMDtcbiAgY2hvcm9wbGV0aE1hcHNsaWRlU3BlZWQ6IG51bWJlcjtcblxuICBjaGFydENvbmZpZzphbnk7XG5cbiAgQElucHV0KFwiY2hhcnREYXRhU291cmNlXCIpXG4gIHNldCBjaGFydERhdGFTb3VyY2UodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuXG4gICAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMucGFnZV9jb25maWcgPSB2YWx1ZTtcbiAgICAgIHRoaXMucGFnZV9wYXJtcyA9IHZhbHVlLnRpdGxlUGFyYW1zO1xuICAgICAgdGhpcy5zb3J0QnkgPSB2YWx1ZS5rcGlDb25maWc/LmRhdGFDb25maWc/LnNvcnRCeTtcbiAgICAgIC8vIHRoaXMuaW5Sb2FtZXJHZW9DaGFydC5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICcnO1xuICAgICAgaWYgKHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlICYmIHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICBpZiAodmFsdWUua3BpQ29uZmlnLmZvcm1hdGUgPT0gXCJtb250aGx5XCIpIHtcbiAgICAgICAgICB0aGlzLm1hcFRZcGUgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXBUeXBlO1xuICAgICAgICAgIGlmICh0aGlzLm1hcFRZcGUgPT0gXCJnZW9NYXBcIikge1xuICAgICAgICAgICAgdGhpcy5yZWdpb24gPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5yZWdpb247XG4gICAgICAgICAgICB0aGlzLnJlZ2lvbkNvZGUgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5yZWdpb25Db2RlO1xuICAgICAgICAgICAgdGhpcy50b290VGlwQ29sdW1uID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuY2hhcnRfY29uZmlnO1xuICAgICAgICAgICAgbGV0IGRhdGEgPSB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZTtcbiAgICAgICAgICAgIHRoaXMuY2hhcnRIZWlnaHQgPSBgJHt2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5zaXplfXB4YDtcbiAgICAgICAgICAgIHRoaXMuY2hhcnRUeXBlID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuY2hhcnRUeXBlO1xuICAgICAgICAgICAgdGhpcy5iYWNncm91bmRDb2xvciA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgICAgIHRoaXMubWFwQ29sb3JzID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuY29sb3JzO1xuICAgICAgICAgICAgLy8gbGV0IGNvbmZpZyA9IHZhbHVlLmNoYXJ0Q29uZmlnO1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0YSA9IFtcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnW1wiYXJndW1lbnRGaWVsZFwiXSxcbiAgICAgICAgICAgICAgICB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZ1tcImNoYXJ0VmFsdWVGaWVsZFwiXSxcbiAgICAgICAgICAgICAgICB7IHR5cGU6IFwic3RyaW5nXCIsIHJvbGU6IFwidG9vbHRpcFwiLCBwOiB7IGh0bWw6IHRydWUgfSB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgXS5jb25jYXQoXG4gICAgICAgICAgICAgIGRhdGEubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9vbHRpcCA9IHRoaXMuZ2V0VG9vbHRpcChpdGVtKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgaXRlbVt2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZ1tcImFyZ3VtZW50RmllbGRcIl1dLFxuICAgICAgICAgICAgICAgICAgaXRlbVt2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZ1tcImNoYXJ0VmFsdWVGaWVsZFwiXV0sXG4gICAgICAgICAgICAgICAgICB0b29sdGlwLFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5jaGFyRGF0YSA9IGZvcm1hdHRlZERhdGE7XG4gICAgICAgICAgICAvLyB0aGlzLmxvYWRHb29nbGVDaGFydHMoKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgICAgIC8vIHRoaXMubG9hZEdvb2dsZUNoYXJ0cygpO1xuICAgICAgICAgICAgfSwgMjAwKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubWFwVFlwZSA9PSBcImJ1YmJsZU1hcFwiKSB7XG4gICAgICAgICAgICB0aGlzLmxvY2F0aW9ucyA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlO1xuICAgICAgICAgICAgdGhpcy5jaGFydEhlaWdodCA9IGAke3ZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnNpemV9cHhgO1xuICAgICAgICAgICAgdGhpcy50b290VGlwQ29sdW1uID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuY2hhcnRfY29uZmlnO1xuICAgICAgICAgICAgdGhpcy5tYXBPcHRpb25Gb3JIZWF0TWFwID0ge1xuICAgICAgICAgICAgICB6b29tOiB0aGlzLnpvb21WYWx1Rm9yQWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubWFwVFlwZSA9PSBcImNob3JvcGxldGhNYXBcIikge1xuICAgICAgICAgICAgdGhpcy5jaGFydENvbmZpZyA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnO1xuICAgICAgICAgICAgbGV0IGNoYXJ0Q29uZmlnID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWc7XG5cbiAgICAgICAgICAgIGlmIChjaGFydENvbmZpZy5pc0RhdGFBZ2dyZWdhdGlvbikge1xuICAgICAgICAgICAgICBjb25zdCBhZ2dyZWF0aW9uRGF0YSA9IHRoaXMuZ2V0R3JvdXBEYXRhRm9yQ2hhcnQodmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UsIGNoYXJ0Q29uZmlnWydkYXRhQWdncmVnYXRpb25Db25maWcnXVsnZGF0YUFnZ3JlZ2F0ZUNvbHVtZXMnXSwgY2hhcnRDb25maWdbJ2RhdGFBZ2dyZWdhdGlvbkNvbmZpZyddWydhZ2dyZWdhdGVGaWVsZHMnXSk7XG4gICAgICAgICAgICAgIHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlID0gYWdncmVhdGlvbkRhdGE7XG5cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLmNob3JvcGxldGhNYXBEYXRhU291cmNlID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgICAgICAgICAgIHRoaXMuY2hvcm9wbGV0aFRvb2x0aXBEYXRhU291cmNlID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgICAgICAgICAgIHRoaXMuY2hvcm9wbGV0aE1hcERhdGEgPSB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZTtcblxuXG4gICAgICAgICAgICB0aGlzLmNoYXJ0SGVpZ2h0ID0gYCR7Y2hhcnRDb25maWcuc2l6ZX1weGA7XG5cbiAgICAgICAgICAgIGxldCB0b290VGlwQ29sdW1uID0gY2hhcnRDb25maWcuY2hhcnRfY29uZmlnXG4gICAgICAgICAgICAgIC5maWx0ZXIoYyA9PiBjLmRpc3BsYXlGb3IgPT09ICdtYXAnIHx8IGMuZGlzcGxheUZvciA9PT0gJ3Rvb2x0aXAnKTtcblxuICAgICAgICAgICAgY29uc3QgdmFsdWVGaWVsZCA9XG4gICAgICAgICAgICAgIGNoYXJ0Q29uZmlnLmNoYXJ0X2NvbmZpZy5maW5kKGMgPT4gYy5kaXNwbGF5Rm9yID09PSAnbWFwJyk/LmRhdGFGaWVsZDtcblxuICAgICAgICAgICAgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UuZm9yRWFjaChkID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qga2V5ID0gZFtjaGFydENvbmZpZy5hcmd1bWVudEZpZWxkXS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IHZhbCA9IGRbdmFsdWVGaWVsZF07XG5cbiAgICAgICAgICAgICAgdGhpcy5jaG9yb3BsZXRoTWFwRGF0YVNvdXJjZS5zZXQoa2V5LCB2YWwpO1xuICAgICAgICAgICAgICB0aGlzLmNob3JvcGxldGhUb29sdGlwRGF0YVNvdXJjZS5zZXQoa2V5LCBkKTtcblxuICAgICAgICAgICAgICB0aGlzLm1pbkNob3JvcGxldGhNYXBDbnQgPSBNYXRoLm1pbih0aGlzLm1pbkNob3JvcGxldGhNYXBDbnQsIGRbdmFsdWVGaWVsZF0pO1xuICAgICAgICAgICAgICB0aGlzLm1heENob3JvcGxldGhNYXBDbnQgPSBNYXRoLm1heCh0aGlzLm1heENob3JvcGxldGhNYXBDbnQsIGRbdmFsdWVGaWVsZF0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChjaGFydENvbmZpZy5pc1ZhbHVlRmllbGRSYW5nZVNsaWRlcikge1xuICAgICAgICAgICAgICB0aGlzLmFsbFNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZXMgPSBbLi4ubmV3IFNldCh2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZS5tYXAoZCA9PiBkW2NoYXJ0Q29uZmlnLnNsaWRlclZhbHVlRmllbGRdKSldO1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZSA9IHRoaXMuYWxsU2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlc1swXTtcbiAgICAgICAgICAgICAgdGhpcy5pc1JhbmdlU2xpZGVyVmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2hvcm9wbGV0aE1hcERhdGEodGhpcy5zZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWUsIGNoYXJ0Q29uZmlnKTtcbiAgICAgICAgICAgICAgdGhpcy5jaG9yb3BsZXRoTWFwQ2hhcnRDb25maWcgPSBjaGFydENvbmZpZztcbiAgICAgICAgICAgICAgdGhpcy5jaG9yb3BsZXRoTWFwc2xpZGVTcGVlZCA9IGNoYXJ0Q29uZmlnLnNsaWRlU3BlZWQ7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgdGhpcy5pbml0Q2hvcm9wbGV0aE1hcChjaGFydENvbmZpZywgdG9vdFRpcENvbHVtbik7XG5cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxvY2F0aW9ucyA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlO1xuICAgICAgICAgICAgdGhpcy50b290VGlwQ29sdW1uID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuY2hhcnRfY29uZmlnO1xuICAgICAgICAgICAgdGhpcy5jaGFydEhlaWdodCA9IGAke3ZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnNpemV9cHhgO1xuICAgICAgICAgICAgdGhpcy56b29tVmFsdUZvckFsbCA9IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICAgIHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuem9vbVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMubWFwT3B0aW9uRm9ySGVhdE1hcCA9IHtcbiAgICAgICAgICAgICAgem9vbTogdGhpcy56b29tVmFsdUZvckFsbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5rcGlDb25maWcuZm9ybWF0ZSA9PSBcImRhaWx5XCIpIHtcbiAgICAgICAgICB0aGlzLm1hcFRZcGUgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXBUeXBlO1xuICAgICAgICAgIGNvbnN0IHNvcnRlZERhdGEgPSB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZVxuICAgICAgICAgICAgLmZpbHRlcihyZWNvcmQgPT4gcmVjb3JkW3RoaXMuc29ydEJ5XSlcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBtb21lbnQoYlt0aGlzLnNvcnRCeV0pLmRpZmYobW9tZW50KGFbdGhpcy5zb3J0QnldKSkpO1xuICAgICAgICAgIGNvbnN0IG1vc3RSZWNlbnRSZWNvcmQgPSBzb3J0ZWREYXRhWzBdO1xuXG4gICAgICAgICAgaWYgKHZhbHVlLmVuZERhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPYmplY3RzID0gc29ydGVkRGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhW3RoaXMuc29ydEJ5XSA9PT0gdmFsdWUuZW5kRGF0ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPYmplY3RzID0gc29ydGVkRGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhW3RoaXMuc29ydEJ5XSA9PT0gbW9zdFJlY2VudFJlY29yZFt0aGlzLnNvcnRCeV0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLm1hcFRZcGUgPT0gXCJidWJibGVNYXBcIikge1xuICAgICAgICAgICAgdGhpcy5sb2NhdGlvbnMgPSB0aGlzLmZpbHRlcmVkT2JqZWN0cztcbiAgICAgICAgICAgIHRoaXMuY2hhcnRIZWlnaHQgPSBgJHt2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5zaXplfXB4YDtcbiAgICAgICAgICAgIHRoaXMudG9vdFRpcENvbHVtbiA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNoYXJ0X2NvbmZpZztcbiAgICAgICAgICAgIHRoaXMubWFwT3B0aW9uRm9ySGVhdE1hcCA9IHtcbiAgICAgICAgICAgICAgem9vbTogdGhpcy56b29tVmFsdUZvckFsbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgfVxuXG5cbiAgICB9XG5cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHsgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tYXBUWXBlID09IFwiZ2VvTWFwXCIpIHtcbiAgICAgIHRoaXMubG9hZEdvb2dsZUNoYXJ0cygpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5tYXBUWXBlID09IFwiaGVhdE1hcFwiKSB7XG4gICAgICBpZiAodGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5oZWF0TWFwQ2F0ZWdvcnkgPT0gXCJoZWF0TWFwT25seVwiKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5sb2FkR29vZ2xlSGVhdE9ubHlNYXBzKHRoaXMubG9jYXRpb25zKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5oZWF0TWFwQ2F0ZWdvcnkgPT0gXCJoZWF0TWFwTWFya2VyXCIpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVNYXAoKTtcbiAgICAgICAgdGhpcy5hZGRNYXJrZXJzKCk7XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplSGVhdFdpdGhNYXJrZXJNYXAodGhpcy5sb2NhdGlvbnMpO1xuXG4gICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKHRoaXMubWFwVFlwZSA9PSBcImNob3JvcGxldGhNYXBcIikge1xuXG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZU1hcCgpO1xuICAgICAgdGhpcy5hZGRCdWJibGVNYXJrZXJzKCk7XG4gICAgfVxuICB9XG5cblxuICBnZXRHcm91cERhdGFGb3JDaGFydChkYXRhLCBhZ2dyZWdhdGlvbkNvbmZpZywgZ3JvdXBCeUNvbHVtbnMpIHtcbiAgICBjb25zdCBncm91cE1hcCA9IHt9O1xuXG4gICAgZGF0YS5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICBjb25zdCBncm91cEtleSA9IGdyb3VwQnlDb2x1bW5zLm1hcChjb2wgPT4gcm93W2NvbF0pLmpvaW4oXCJ8fFwiKTtcblxuICAgICAgaWYgKCFncm91cE1hcFtncm91cEtleV0pIHtcbiAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldID0ge307XG5cbiAgICAgICAgZ3JvdXBCeUNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVtjb2xdID0gcm93W2NvbF07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGFnZ3JlZ2F0aW9uQ29uZmlnLmZvckVhY2goKHsgYWdncmVnYXRlRGF0YUZpZWxkLCBhZ2dyZWdhdGVGdW5jdGlvblR5cGUgfSkgPT4ge1xuICAgICAgICAgIHN3aXRjaCAoYWdncmVnYXRlRnVuY3Rpb25UeXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwic3VtXCI6XG4gICAgICAgICAgICBjYXNlIFwiYXZnXCI6XG4gICAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdID0gMDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWluXCI6XG4gICAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdID0gSW5maW5pdHk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1heFwiOlxuICAgICAgICAgICAgICBncm91cE1hcFtncm91cEtleV1bYWdncmVnYXRlRGF0YUZpZWxkXSA9IC1JbmZpbml0eTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiY291bnRcIjpcbiAgICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gPSAwO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYWdncmVnYXRlRnVuY3Rpb25UeXBlID09PSBcImF2Z1wiKSB7XG4gICAgICAgICAgICBncm91cE1hcFtncm91cEtleV1bYCR7YWdncmVnYXRlRGF0YUZpZWxkfV9fY291bnRgXSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gQXBwbHkgYWdncmVnYXRpb25zXG4gICAgICBhZ2dyZWdhdGlvbkNvbmZpZy5mb3JFYWNoKCh7IGFnZ3JlZ2F0ZURhdGFGaWVsZCwgYWdncmVnYXRlRnVuY3Rpb25UeXBlIH0pID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSByb3dbYWdncmVnYXRlRGF0YUZpZWxkXTtcblxuICAgICAgICBzd2l0Y2ggKGFnZ3JlZ2F0ZUZ1bmN0aW9uVHlwZSkge1xuICAgICAgICAgIGNhc2UgXCJzdW1cIjpcbiAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdICs9IHZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiYXZnXCI6XG4gICAgICAgICAgICBncm91cE1hcFtncm91cEtleV1bYWdncmVnYXRlRGF0YUZpZWxkXSArPSB2YWx1ZTtcbiAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVtgJHthZ2dyZWdhdGVEYXRhRmllbGR9X19jb3VudGBdICs9IDE7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJtaW5cIjpcbiAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdID1cbiAgICAgICAgICAgICAgTWF0aC5taW4oZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIm1heFwiOlxuICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gPVxuICAgICAgICAgICAgICBNYXRoLm1heChncm91cE1hcFtncm91cEtleV1bYWdncmVnYXRlRGF0YUZpZWxkXSwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiY291bnRcIjpcbiAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdICs9IDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBGaW5hbGl6ZSBhdmVyYWdlc1xuICAgIE9iamVjdC52YWx1ZXMoZ3JvdXBNYXApLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgYWdncmVnYXRpb25Db25maWcuZm9yRWFjaCgoeyBhZ2dyZWdhdGVEYXRhRmllbGQsIGFnZ3JlZ2F0ZUZ1bmN0aW9uVHlwZSB9KSA9PiB7XG4gICAgICAgIGlmIChhZ2dyZWdhdGVGdW5jdGlvblR5cGUgPT09IFwiYXZnXCIpIHtcbiAgICAgICAgICBncm91cFthZ2dyZWdhdGVEYXRhRmllbGRdID1cbiAgICAgICAgICAgIGdyb3VwW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gLyBncm91cFtgJHthZ2dyZWdhdGVEYXRhRmllbGR9X19jb3VudGBdO1xuICAgICAgICAgIGRlbGV0ZSBncm91cFtgJHthZ2dyZWdhdGVEYXRhRmllbGR9X19jb3VudGBdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKGdyb3VwTWFwKTtcbiAgfVxuXG4gIGxvYWRHb29nbGVDaGFydHMoKSB7XG4gICAgZ29vZ2xlLmNoYXJ0cy5sb2FkKFwiY3VycmVudFwiLCB7XG4gICAgICBwYWNrYWdlczogW3RoaXMuY2hhcnRUeXBlXSxcbiAgICB9KTtcbiAgICBnb29nbGUuY2hhcnRzLnNldE9uTG9hZENhbGxiYWNrKHRoaXMuZHJhd0NoYXJ0LmJpbmQodGhpcykpO1xuICB9XG5cbiAgZHJhd0NoYXJ0KCkge1xuICAgIGNvbnN0IGRhdGEgPSBnb29nbGUudmlzdWFsaXphdGlvbi5hcnJheVRvRGF0YVRhYmxlKHRoaXMuY2hhckRhdGEpO1xuXG4gICAgLy8gY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAvLyAgIHJlZ2lvbjogJ1VTQScsXG4gICAgLy8gICBkaXNwbGF5TW9kZTogJ21hcmtlcnMnLFxuICAgIC8vICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLmJhY2dyb3VuZENvbG9yLFxuICAgIC8vICAgdG9vbHRpcDogeyBpc0h0bWw6IHRydWUgfSxcbiAgICAvLyAgIGNvbG9yQXhpczogeyBjb2xvcnM6IHRoaXMubWFwQ29sb3JzIH1cbiAgICAvLyB9O1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbkNvbmZpZygpO1xuXG4gICAgY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uR2VvQ2hhcnQoXG4gICAgICB0aGlzLmdvb2dsTWFwLm5hdGl2ZUVsZW1lbnRcbiAgICApO1xuICAgIHRoaXMuZ29vZ2xNYXAubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmNoYXJ0SGVpZ2h0O1xuICAgIGNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7XG4gIH1cblxuICBnZXRUb29sdGlwKGRhdGEpIHtcbiAgICBsZXQgdG9vbFRpcERhdGEgPSBcIlwiO1xuICAgIHRoaXMudG9vdFRpcENvbHVtbi5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGRhdGFbZWxlbWVudC5kYXRhRmllbGRdID09PSAnbnVtYmVyJykge1xuICAgICAgICB0b29sVGlwRGF0YSArPVxuICAgICAgICAgIFwiPGRpdiBjbGFzcz0naW5saW5lJz48Yj5cIiArXG4gICAgICAgICAgZWxlbWVudC5jYXB0aW9uICtcbiAgICAgICAgICBcIjo8L2I+PC9kaXY+IFwiICtcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2Uucm91bmRPZmZUaWxsVHdvKGRhdGFbZWxlbWVudC5kYXRhRmllbGRdLCAyKSArXG4gICAgICAgICAgXCI8YnIgLz5cIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRvb2xUaXBEYXRhICs9XG4gICAgICAgICAgXCI8ZGl2IGNsYXNzPSdpbmxpbmUnPjxiPlwiICtcbiAgICAgICAgICBlbGVtZW50LmNhcHRpb24gK1xuICAgICAgICAgIFwiOjwvYj48L2Rpdj4gXCIgK1xuICAgICAgICAgIGRhdGFbZWxlbWVudC5kYXRhRmllbGRdICtcbiAgICAgICAgICBcIjxiciAvPlwiO1xuICAgICAgfVxuXG5cbiAgICB9KTtcbiAgICByZXR1cm4gdG9vbFRpcERhdGE7XG4gIH1cblxuICBnZXRPcHRpb25Db25maWcoKSB7XG4gICAgaWYgKHRoaXMucmVnaW9uID09ICdjaXR5Jykge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvbkNvZGUsXG4gICAgICAgIGRpc3BsYXlNb2RlOiAnbWFya2VycycsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5iYWNncm91bmRDb2xvcixcbiAgICAgICAgdG9vbHRpcDogeyBpc0h0bWw6IHRydWUgfSxcbiAgICAgICAgY29sb3JBeGlzOiB7IGNvbG9yczogdGhpcy5tYXBDb2xvcnMgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoaXMuYmFjZ3JvdW5kQ29sb3IsXG4gICAgICAgIHRvb2x0aXA6IHsgaXNIdG1sOiB0cnVlIH0sXG4gICAgICAgIGNvbG9yQXhpczogeyBjb2xvcnM6IHRoaXMubWFwQ29sb3JzIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG4gIH1cblxuXG4gIC8vICBHZW8gTWFwIGVuZCAvL1xuXG4gIC8vIEhlYXQgTWFwIHN0YXJ0IC8vXG4gIGluaXRpYWxpemVNYXAoKTogdm9pZCB7XG4gICAgY29uc3QgbWFwT3B0aW9ucyA9IHRoaXMubWFwT3B0aW9uRm9ySGVhdE1hcDtcbiAgICAvLyB7XG4gICAgLy8gICBjZW50ZXI6IHsgbGF0OiAzNy4wOTAyLCBsbmc6IC05NS43MTI5IH0sIC8vIENlbnRlciBvZiB0aGUgVVNBXG4gICAgLy8gICB6b29tOiA1LFxuICAgIC8vIH07XG5cbiAgICBpZiAodGhpcy5tYXBUWXBlID09IFwiYnViYmxlTWFwXCIpIHtcbiAgICAgIG1hcE9wdGlvbnNbXCJzdHlsZXNcIl0gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBmZWF0dXJlVHlwZTogXCJhbGxcIixcbiAgICAgICAgICBzdHlsZXJzOiBbXG4gICAgICAgICAgICB7IHNhdHVyYXRpb246IC0xMDAgfSxcbiAgICAgICAgICAgIHsgbGlnaHRuZXNzOiA3MCB9LFxuICAgICAgICAgICAgeyB2aXNpYmlsaXR5OiBcInNpbXBsaWZpZWRcIiB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBmZWF0dXJlVHlwZTogXCJhZG1pbmlzdHJhdGl2ZS5jb3VudHJ5XCIsXG4gICAgICAgICAgZWxlbWVudFR5cGU6IFwibGFiZWxzXCIsXG4gICAgICAgICAgc3R5bGVyczogW1xuICAgICAgICAgICAgeyBsaWdodG5lc3M6IC0zMCB9LCAvLyBEYXJrZW4gbGFiZWxzIGZ1cnRoZXJcbiAgICAgICAgICAgIHsgdmlzaWJpbGl0eTogXCJvblwiIH0sXG4gICAgICAgICAgICB7IGZvbnRXZWlnaHQ6IFwiYm9sZFwiIH0sIC8vIE1ha2UgbGFiZWxzIGJvbGRcbiAgICAgICAgICAgIHsgZm9udFNpemU6IFwiMTJweFwiIH0sIC8vIEluY3JlYXNlIGZvbnQgc2l6ZVxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBmZWF0dXJlVHlwZTogXCJhZG1pbmlzdHJhdGl2ZS5jb3VudHJ5XCIsXG4gICAgICAgICAgZWxlbWVudFR5cGU6IFwiZ2VvbWV0cnkuc3Ryb2tlXCIsXG4gICAgICAgICAgc3R5bGVyczogW1xuICAgICAgICAgICAgeyBsaWdodG5lc3M6IC00MCB9LCAvLyBEYXJrZW4gYm9yZGVycyBzaWduaWZpY2FudGx5XG4gICAgICAgICAgICB7IHdlaWdodDogMS41IH0sIC8vIEluY3JlYXNlIGJvcmRlciB0aGlja25lc3NcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZmVhdHVyZVR5cGU6IFwiYWRtaW5pc3RyYXRpdmUuY291bnRyeVwiLFxuICAgICAgICAgIGVsZW1lbnRUeXBlOiBcImdlb21ldHJ5LmZpbGxcIixcbiAgICAgICAgICBzdHlsZXJzOiBbXG4gICAgICAgICAgICB7IGxpZ2h0bmVzczogOTAgfSwgLy8gS2VlcCBmaWxsIHZlcnkgbGlnaHRcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9XG5cbiAgICB0aGlzLm1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAoXG4gICAgICAvLyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlZ2lvbnNfZGl2XCIpICxcbiAgICAgIHRoaXMuZ29vZ2xNYXAubmF0aXZlRWxlbWVudCxcbiAgICAgIG1hcE9wdGlvbnNcbiAgICApO1xuICAgIHRoaXMuZ29vZ2xNYXAubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmNoYXJ0SGVpZ2h0O1xuICB9XG5cbiAgLy8gQWRkIG1hcmtlcnMgdG8gdGhlIG1hcFxuICBhZGRNYXJrZXJzKCk6IHZvaWQge1xuICAgIHRoaXMubG9jYXRpb25zLmZvckVhY2goKGxvY2F0aW9uKSA9PiB7XG4gICAgICBjb25zdCBtYXJrZXIgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHtcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBsYXQ6IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICBsb2NhdGlvblt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxhdGl0dWRlXVxuICAgICAgICAgICksXG4gICAgICAgICAgbG5nOiBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgbG9jYXRpb25bdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXJrZXJMb25naXR1ZGVdXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgaWNvbjogdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5pY29uID8ge1xuICAgICAgICAgIHVybDogdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5pY29uLCAvLyBSZXBsYWNlIHdpdGggeW91ciBpY29uIHBhdGhcbiAgICAgICAgICBzY2FsZWRTaXplOiB7XG4gICAgICAgICAgICB3aWR0aDogMzIsXG4gICAgICAgICAgICBoZWlnaHQ6IDMyLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0gOiAnJyxcbiAgICAgICAgLy8gdG9vbHRpcFRleHQ6XG4gICAgICAgIG1hcDogdGhpcy5tYXAsXG4gICAgICAgIC8vIHRpdGxlOiBgJHtsb2NhdGlvbi5jaXR5fTogJCR7bG9jYXRpb24udG90YWxfc2FsZXNfYW1vdW50fWAsXG4gICAgICAgIHRpdGxlOiBgJHtsb2NhdGlvbi5jaXR5fTogJCR7bG9jYXRpb24udG90YWxfc2FsZXNfYW1vdW50fWAsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYm91bmRzLmV4dGVuZChtYXJrZXIuZ2V0UG9zaXRpb24oKSk7XG4gICAgICB0aGlzLm1hcmtlcnMucHVzaChtYXJrZXIpO1xuXG4gICAgICAvLyBBZGQgYW4gaW5mbyB3aW5kb3dcbiAgICAgIGxldCBzdHJpbmdXaXRob3V0UXVvdGVzID0gdGhpcy5nZXRJbmZvV2luZG9EYXRhKGxvY2F0aW9uKTtcbiAgICAgIGNvbnN0IGluZm9XSW5kb3dEYXRhID0gdGhpcy5nZXRJbmZvV2luZG9EYXRhKGxvY2F0aW9uKTtcblxuICAgICAgY29uc3QgaW5mb1dpbmRvdyA9IG5ldyBnb29nbGUubWFwcy5JbmZvV2luZG93KHtcbiAgICAgICAgLy8gY29udGVudDogaW5mb1dJbmRvd0RhdGEsXG4gICAgICAgIGNvbnRlbnQ6IGA8ZGl2IHN0eWxlPVwiaGVpZ2h0OiAxMDAlOyB3aWR0aDogMTAwJTsgY29sb3I6IGJsYWNrOyBmb250LXNpemU6IDIwcHg7XCI+XG4gICAgICAgICR7aW5mb1dJbmRvd0RhdGF9XG4gICAgICA8L2Rpdj5gLFxuICAgICAgfSk7XG4gICAgICAvLyB7XG4gICAgICAvLyAgIGNvbnRlbnQ6IGA8ZGl2IHN0eWxlPVwiICBoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlO2NvbG9yOiBibGFjazsgZm9udC1zaXplOiAyMHB4O1wiPjxoND4ke1xuICAgICAgLy8gICAgIGxvY2F0aW9uLmNpdHlcbiAgICAgIC8vICAgfTwvaDQ+PHA+VG90YWwgU2FsZXM6ICQke2xvY2F0aW9uLnRvdGFsX3NhbGVzX2Ftb3VudC50b0ZpeGVkKFxuICAgICAgLy8gICAgIDJcbiAgICAgIC8vICAgKX08L3A+PC9kaXY+YCxcbiAgICAgIC8vIH1cblxuICAgICAgbWFya2VyLmFkZExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50SW5mb1dpbmRvdykge1xuICAgICAgICAgIHRoaXMuY3VycmVudEluZm9XaW5kb3cuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpbmZvV2luZG93Lm9wZW4odGhpcy5tYXAsIG1hcmtlcik7XG4gICAgICAgIHRoaXMuY3VycmVudEluZm9XaW5kb3cgPSBpbmZvV2luZG93O1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5tYXAuZml0Qm91bmRzKHRoaXMuYm91bmRzKTtcblxuXG4gIH1cblxuICBnZXRJbmZvV2luZG9EYXRhKGRhdGEpIHtcbiAgICBsZXQgdG9vbFRpcERhdGEgPSBgYDtcbiAgICB0aGlzLnRvb3RUaXBDb2x1bW4uZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBkYXRhW2VsZW1lbnQuZGF0YUZpZWxkXSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICB0b29sVGlwRGF0YSArPVxuICAgICAgICAgIGA8ZGl2IGNsYXNzPSdpbmxpbmUnPjxiPmAgK1xuICAgICAgICAgIGVsZW1lbnQuY2FwdGlvbiArXG4gICAgICAgICAgYDo8L2I+PC9kaXY+IGAgK1xuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZS5yb3VuZE9mZlRpbGxUd28oZGF0YVtlbGVtZW50LmRhdGFGaWVsZF0sIDIpICtcbiAgICAgICAgICBgPGJyIC8+YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRvb2xUaXBEYXRhICs9XG4gICAgICAgICAgYDxkaXYgY2xhc3M9J2lubGluZSc+PGI+YCArXG4gICAgICAgICAgZWxlbWVudC5jYXB0aW9uICtcbiAgICAgICAgICBgOjwvYj48L2Rpdj4gYCArXG4gICAgICAgICAgZGF0YVtlbGVtZW50LmRhdGFGaWVsZF0gK1xuICAgICAgICAgIGA8YnIgLz5gO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0b29sVGlwRGF0YTtcbiAgfVxuICAvLyBIZWF0IE1hcCBFbmQgLy9cblxuICAvL2hlYXQgb25seSBtYXAgc3RhcnQgLy9cblxuICBsb2FkR29vZ2xlSGVhdE9ubHlNYXBzKGRhdGEpOiB2b2lkIHtcbiAgICB0aGlzLmhlYXRtYXBEYXRhID0gW107XG4gICAgZGF0YS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICBsZXQgbGF0aXR1ZGUgPSBwYXJzZUZsb2F0KFxuICAgICAgICBlbGVtZW50W3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcubWFya2VyTGF0aXR1ZGVdXG4gICAgICApO1xuICAgICAgbGV0IGxvZ3RpdHVkZSA9IHBhcnNlRmxvYXQoXG4gICAgICAgIGVsZW1lbnRbdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXJrZXJMb25naXR1ZGVdXG4gICAgICApO1xuICAgICAgLy8gbGV0IHdlaWdodCA9IChjZWxsTm9kZS5wcm9wZXJ0aWVzWydXZWlnaHQnXSAhPSB1bmRlZmluZWQpID8gY2VsbE5vZGUucHJvcGVydGllc1snV2VpZ2h0J10gOiBcIk5BXCI7XG4gICAgICB0aGlzLmhlYXRtYXBEYXRhLnB1c2goe1xuICAgICAgICBsb2NhdGlvbjogbmV3IGdvb2dsZS5tYXBzLkxhdExuZyhsYXRpdHVkZSwgbG9ndGl0dWRlKVxuICAgICAgICAvLyB3ZWlnaHQ6IHBhcnNlRmxvYXQod2VpZ2h0KSxcblxuICAgICAgfSk7XG4gICAgICB0aGlzLmJvdW5kcy5leHRlbmQobmV3IGdvb2dsZS5tYXBzLkxhdExuZyhsYXRpdHVkZSwgbG9ndGl0dWRlKSk7XG4gICAgfSk7XG4gICAgY29uc3QgbWFwT3B0aW9ucyA9IHtcbiAgICAgIC8vIGNlbnRlcjoge1xuICAgICAgLy8gICBsYXQ6IHBhcnNlRmxvYXQodGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5jZW50ZXJMYXRpdHVkZSksXG4gICAgICAvLyAgIGxuZzogcGFyc2VGbG9hdCh0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNlbnRlckxvbmdpdHVkZSksXG4gICAgICAvLyB9LFxuICAgICAgLy8gem9vbTogcGFyc2VGbG9hdCh0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnpvb20pXG4gICAgICB6b29tOiB0aGlzLnpvb21WYWx1Rm9yQWxsXG4gICAgfTtcblxuXG5cblxuICAgIHRoaXMubWFwID0gbmV3IGdvb2dsZS5tYXBzLk1hcCh0aGlzLmdvb2dsTWFwLm5hdGl2ZUVsZW1lbnQsIG1hcE9wdGlvbnMpO1xuICAgIHRoaXMuZ29vZ2xNYXAubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmNoYXJ0SGVpZ2h0O1xuICAgIHRoaXMubWFwLmZpdEJvdW5kcyh0aGlzLmJvdW5kcyk7XG4gICAgdGhpcy5oZWF0bWFwID0gbmV3IGdvb2dsZS5tYXBzLnZpc3VhbGl6YXRpb24uSGVhdG1hcExheWVyKHtcbiAgICAgIGRhdGE6IHRoaXMuaGVhdG1hcERhdGEsXG4gICAgICBtYXA6IHRoaXMubWFwLFxuICAgIH0pO1xuXG4gIH1cblxuXG4gIC8vaGVhdCBvbmx5IG1hcCBlbmQgLy9cblxuICAvL2hlYXQgYW5kIE1hcmtlciAgbWFwIFN0YXJ0IC8vXG4gIGluaXRpYWxpemVIZWF0V2l0aE1hcmtlck1hcChkYXRhKSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXBcbiAgICB0aGlzLm1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAodGhpcy5nb29nbE1hcC5uYXRpdmVFbGVtZW50LCB7XG4gICAgICAvLyBjZW50ZXI6IHsgbGF0OiAzNy43NzQ5LCBsbmc6IC0xMjIuNDE5NCB9LFxuICAgICAgem9vbTogcGFyc2VGbG9hdChcbiAgICAgICAgdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy56b29tXG4gICAgICApLFxuICAgIH0pO1xuICAgIHRoaXMuZ29vZ2xNYXAubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmNoYXJ0SGVpZ2h0O1xuICAgIC8vIEluaXRpYWxpemUgaGVhdG1hcCBsYXllclxuICAgIHRoaXMuaGVhdG1hcERhdGEgPSBbXTtcbiAgICBkYXRhLmZvckVhY2goZWxlbWVudCA9PiB7XG5cbiAgICAgIGxldCBsYXRpdHVkZSA9IHBhcnNlRmxvYXQoXG4gICAgICAgIGVsZW1lbnRbdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXJrZXJMYXRpdHVkZV1cbiAgICAgICk7XG4gICAgICBsZXQgbG9ndGl0dWRlID0gcGFyc2VGbG9hdChcbiAgICAgICAgZWxlbWVudFt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxvbmdpdHVkZV1cbiAgICAgICk7XG4gICAgICB0aGlzLmhlYXRtYXBEYXRhLnB1c2goe1xuICAgICAgICBsb2NhdGlvbjogbmV3IGdvb2dsZS5tYXBzLkxhdExuZyhsYXRpdHVkZSwgbG9ndGl0dWRlKVxuICAgICAgfSk7XG4gICAgICB0aGlzLmJvdW5kcy5leHRlbmQobmV3IGdvb2dsZS5tYXBzLkxhdExuZyhsYXRpdHVkZSwgbG9ndGl0dWRlKSk7XG4gICAgfSk7XG4gICAgdGhpcy5oZWF0bWFwID0gbmV3IGdvb2dsZS5tYXBzLnZpc3VhbGl6YXRpb24uSGVhdG1hcExheWVyKHtcbiAgICAgIGRhdGE6IHRoaXMuaGVhdG1hcERhdGEsXG4gICAgICBtYXA6IHRoaXMubWFwLFxuICAgIH0pO1xuICAgIC8vIEluaXRpYWxpemUgbWFya2Vyc1xuICAgIHRoaXMubG9jYXRpb25zLmZvckVhY2goKGxvY2F0aW9uKSA9PiB7XG4gICAgICBjb25zdCBtYXJrZXIgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHtcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBsYXQ6IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICBsb2NhdGlvblt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxhdGl0dWRlXVxuICAgICAgICAgICksXG4gICAgICAgICAgbG5nOiBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgbG9jYXRpb25bdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXJrZXJMb25naXR1ZGVdXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgaWNvbjogdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5pY29uID8ge1xuICAgICAgICAgIHVybDogdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5pY29uLCAvLyBSZXBsYWNlIHdpdGggeW91ciBpY29uIHBhdGhcbiAgICAgICAgICBzY2FsZWRTaXplOiB7XG4gICAgICAgICAgICB3aWR0aDogMzIsXG4gICAgICAgICAgICBoZWlnaHQ6IDMyLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0gOiAnJyxcbiAgICAgICAgLy8gdG9vbHRpcFRleHQ6XG4gICAgICAgIG1hcDogdGhpcy5tYXAsXG4gICAgICAgIC8vIHRpdGxlOiBgJHtsb2NhdGlvbi5jaXR5fTogJCR7bG9jYXRpb24udG90YWxfc2FsZXNfYW1vdW50fWAsXG4gICAgICAgIHRpdGxlOiBgJHtsb2NhdGlvbi5jaXR5fTogJCR7bG9jYXRpb24udG90YWxfc2FsZXNfYW1vdW50fWAsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYm91bmRzLmV4dGVuZChtYXJrZXIuZ2V0UG9zaXRpb24oKSk7XG4gICAgICB0aGlzLm1hcmtlcnMucHVzaChtYXJrZXIpO1xuXG4gICAgICAvLyBBZGQgYW4gaW5mbyB3aW5kb3dcblxuICAgICAgLy8gQWRkIGFuIGluZm8gd2luZG93XG4gICAgICBjb25zdCBpbmZvV0luZG93RGF0YSA9IHRoaXMuZ2V0SW5mb1dpbmRvRGF0YShsb2NhdGlvbik7XG4gICAgICBjb25zdCBpbmZvV2luZG93ID0gbmV3IGdvb2dsZS5tYXBzLkluZm9XaW5kb3coe1xuICAgICAgICBjb250ZW50OiBgPGRpdiBzdHlsZT1cImhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7IGNvbG9yOiBibGFjazsgZm9udC1zaXplOiAyMHB4O1wiPlxuICAgICAgICAgICAgJHtpbmZvV0luZG93RGF0YX1cbiAgICAgICAgICA8L2Rpdj5gLFxuICAgICAgfSk7XG5cblxuICAgICAgbWFya2VyLmFkZExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50SW5mb1dpbmRvdykge1xuICAgICAgICAgIHRoaXMuY3VycmVudEluZm9XaW5kb3cuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpbmZvV2luZG93Lm9wZW4odGhpcy5tYXAsIG1hcmtlcik7XG4gICAgICAgIHRoaXMuY3VycmVudEluZm9XaW5kb3cgPSBpbmZvV2luZG93O1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5tYXAuZml0Qm91bmRzKHRoaXMuYm91bmRzKTtcblxuICAgIC8vIEFkZCBsaXN0ZW5lciBmb3Igem9vbSBjaGFuZ2VzXG4gICAgdGhpcy5tYXAuYWRkTGlzdGVuZXIoJ3pvb21fY2hhbmdlZCcsICgpID0+IHRoaXMuaGFuZGxlWm9vbUNoYW5nZSgpKTtcbiAgfVxuXG4gIGhhbmRsZVpvb21DaGFuZ2UoKSB7XG4gICAgY29uc3Qgem9vbUxldmVsID0gdGhpcy5tYXAuZ2V0Wm9vbSgpO1xuICAgIGlmICh6b29tTGV2ZWwgPCA1KSB7XG4gICAgICAvLyBTaG93IGhlYXRtYXAgYW5kIGhpZGUgbWFya2Vyc1xuICAgICAgdGhpcy5oZWF0bWFwLnNldE1hcCh0aGlzLm1hcCk7XG4gICAgICB0aGlzLm1hcmtlcnMuZm9yRWFjaCgobWFya2VyKSA9PiBtYXJrZXIuc2V0TWFwKG51bGwpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSGlkZSBoZWF0bWFwIGFuZCBzaG93IG1hcmtlcnNcbiAgICAgIHRoaXMuaGVhdG1hcC5zZXRNYXAobnVsbCk7XG4gICAgICB0aGlzLm1hcmtlcnMuZm9yRWFjaCgobWFya2VyKSA9PiBtYXJrZXIuc2V0TWFwKHRoaXMubWFwKSk7XG4gICAgfVxuICB9XG5cbiAgLy9oZWF0IGFuZCBNYXJrZXIgIG1hcCBFbmQgLy9cbiAgLy9CdWJibGUgQ2hhcnQgU3RhcnRcbiAgYWRkQnViYmxlTWFya2VycygpOiB2b2lkIHtcbiAgICB0aGlzLnByZXBhcmVCdWJibGVEYXRhKCk7XG4gICAgdGhpcy5sb2NhdGlvbnMuZm9yRWFjaCgobG9jYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IG1hcmtlciA9IG5ldyBnb29nbGUubWFwcy5NYXJrZXIoe1xuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIGxhdDogcGFyc2VGbG9hdChcbiAgICAgICAgICAgIGxvY2F0aW9uW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcubWFya2VyTGF0aXR1ZGVdXG4gICAgICAgICAgKSxcbiAgICAgICAgICBsbmc6IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICBsb2NhdGlvblt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxvbmdpdHVkZV1cbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBpY29uOiB7XG4gICAgICAgICAgcGF0aDogZ29vZ2xlLm1hcHMuU3ltYm9sUGF0aC5DSVJDTEUsXG4gICAgICAgICAgc2NhbGU6IE1hdGgucm91bmQobG9jYXRpb24uc2FsZXNfcGVyY2VudGFnZSksIC8vIEFkanVzdCBidWJibGUgc2l6ZVxuICAgICAgICAgIGZpbGxDb2xvcjogdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5idWJibGVDb2xvcixcbiAgICAgICAgICBmaWxsT3BhY2l0eTogMC42LFxuICAgICAgICAgIHN0cm9rZVdlaWdodDogMCxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdG9vbHRpcFRleHQ6XG4gICAgICAgIG1hcDogdGhpcy5tYXAsXG4gICAgICAgIC8vIHRpdGxlOiBgJHtsb2NhdGlvbi5jaXR5fTogJCR7bG9jYXRpb24udG90YWxfc2FsZXNfYW1vdW50fWAsXG4gICAgICAgIHRpdGxlOiBgJHtsb2NhdGlvbi5jaXR5fTogJCR7bG9jYXRpb25bdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5hZ3J1bWVudFZhbHVlXVxuICAgICAgICAgIH1gLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmJvdW5kcy5leHRlbmQobWFya2VyLmdldFBvc2l0aW9uKCkpO1xuICAgICAgdGhpcy5tYXJrZXJzLnB1c2gobWFya2VyKTtcblxuICAgICAgLy8gQWRkIGFuIGluZm8gd2luZG93XG4gICAgICBsZXQgc3RyaW5nV2l0aG91dFF1b3RlcyA9IHRoaXMuZ2V0SW5mb1dpbmRvRGF0YShsb2NhdGlvbik7XG4gICAgICBjb25zdCBpbmZvV0luZG93RGF0YSA9IHRoaXMuZ2V0SW5mb1dpbmRvRGF0YShsb2NhdGlvbik7XG5cbiAgICAgIGNvbnN0IGluZm9XaW5kb3cgPSBuZXcgZ29vZ2xlLm1hcHMuSW5mb1dpbmRvdyh7XG4gICAgICAgIC8vIGNvbnRlbnQ6IGluZm9XSW5kb3dEYXRhLFxuICAgICAgICBjb250ZW50OiBgPGRpdiBzdHlsZT1cImhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7IGNvbG9yOiBibGFjazsgZm9udC1zaXplOiAyMHB4O1wiPlxuICAgICAgICAgJHtpbmZvV0luZG93RGF0YX1cbiAgICAgICA8L2Rpdj5gLFxuICAgICAgfSk7XG5cbiAgICAgIG1hcmtlci5hZGRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEluZm9XaW5kb3cpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRJbmZvV2luZG93LmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaW5mb1dpbmRvdy5vcGVuKHRoaXMubWFwLCBtYXJrZXIpO1xuICAgICAgICB0aGlzLmN1cnJlbnRJbmZvV2luZG93ID0gaW5mb1dpbmRvdztcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMubWFwLmZpdEJvdW5kcyh0aGlzLmJvdW5kcyk7XG4gIH1cblxuICBwcmVwYXJlQnViYmxlRGF0YSgpIHtcbiAgICAvLyBTdGVwIDE6IEZpbmQgbWluIGFuZCBtYXggdG90YWxfc2FsZXNfYW1vdW50XG4gICAgY29uc3QgbWluU2FsZXMgPSBNYXRoLm1pbihcbiAgICAgIC4uLnRoaXMubG9jYXRpb25zLm1hcChcbiAgICAgICAgKGQpID0+IGRbdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5hZ3J1bWVudFZhbHVlXVxuICAgICAgKVxuICAgICk7XG4gICAgY29uc3QgbWF4U2FsZXMgPSBNYXRoLm1heChcbiAgICAgIC4uLnRoaXMubG9jYXRpb25zLm1hcChcbiAgICAgICAgKGQpID0+IGRbdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5hZ3J1bWVudFZhbHVlXVxuICAgICAgKVxuICAgICk7XG5cbiAgICAvLyBTdGVwIDI6IERlZmluZSBtaW4gYW5kIG1heCBwZXJjZW50YWdlIHZhbHVlc1xuICAgIGNvbnN0IG1pblBlcmNlbnRhZ2UgPVxuICAgICAgdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5idWJibGVNaW5pbXVtU2l6ZTtcbiAgICBjb25zdCBtYXhQZXJjZW50YWdlID1cbiAgICAgIHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuYnViYmxlTWF4aW11bVNpemU7XG5cbiAgICAvLyBTdGVwIDM6IE5vcm1hbGl6ZSBmdW5jdGlvblxuICAgIGNvbnN0IG5vcm1hbGl6ZSA9ICh2YWx1ZSwgbWluLCBtYXgpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICgodmFsdWUgLSBtaW4pIC8gKG1heCAtIG1pbikpICogKG1heFBlcmNlbnRhZ2UgLSBtaW5QZXJjZW50YWdlKSArXG4gICAgICAgIG1pblBlcmNlbnRhZ2VcbiAgICAgICk7XG4gICAgfTtcblxuICAgIC8vIFN0ZXAgNDogQXNzaWduIGNhbGN1bGF0ZWQgcGVyY2VudGFnZSB0byBlYWNoIG9iamVjdFxuICAgIHRoaXMubG9jYXRpb25zLmZvckVhY2goKGQpID0+IHtcbiAgICAgIGQuc2FsZXNfcGVyY2VudGFnZSA9IE1hdGgubWluKFxuICAgICAgICBNYXRoLm1heChcbiAgICAgICAgICBub3JtYWxpemUoXG4gICAgICAgICAgICBkW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuYWdydW1lbnRWYWx1ZV0sXG4gICAgICAgICAgICBtaW5TYWxlcyxcbiAgICAgICAgICAgIG1heFNhbGVzXG4gICAgICAgICAgKSxcbiAgICAgICAgICBtaW5QZXJjZW50YWdlXG4gICAgICAgICksXG4gICAgICAgIG1heFBlcmNlbnRhZ2VcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbiAgLy9CdWJibGUgQ2hhcnQgRW5kXG5cbiAgLy8gY2hvcm9wbGV0aE1hcCBzdGFydCAvL1xuXG4gIGdldENvbG9yKGNudDogbnVtYmVyLCBzdGFydENvbG9yOiBzdHJpbmcsIGVuZENvbG9yOiBzdHJpbmcsIG1pbkNvdW50OiBudW1iZXIsIG1heENvdW50OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmIChjbnQgPT09IHVuZGVmaW5lZCB8fCBjbnQgPT09IG51bGwgfHwgbWF4Q291bnQgPT09IG1pbkNvdW50KSB7XG4gICAgICByZXR1cm4gJyNjY2NjY2MnO1xuICAgIH1cblxuICAgIC8vIGNvbnN0IHJhdGlvID0gTWF0aC5taW4oXG4gICAgLy8gICBNYXRoLm1heCgoY250IC0gbWluQ291bnQpIC8gKG1heENvdW50IC0gbWluQ291bnQpLCAwKSxcbiAgICAvLyAgIDFcbiAgICAvLyApO1xuXG4gICAgY29uc3QgcmF3UmF0aW8gPVxuICAgICAgKGNudCAtIG1pbkNvdW50KSAvIChtYXhDb3VudCAtIG1pbkNvdW50KTtcblxuICAgIC8vIGdhbW1hIDwgMSBleGFnZ2VyYXRlcyBkaWZmZXJlbmNlc1xuICAgIGNvbnN0IGdhbW1hID0gMC4yOyAvLyB0cnkgMC40IOKAkyAwLjdcbiAgICBjb25zdCByYXRpbyA9IE1hdGgucG93KFxuICAgICAgTWF0aC5taW4oTWF0aC5tYXgocmF3UmF0aW8sIDApLCAxKSxcbiAgICAgIGdhbW1hXG4gICAgKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5oZXhUb1JnYihzdGFydENvbG9yKTtcbiAgICBjb25zdCBlbmQgPSB0aGlzLmhleFRvUmdiKGVuZENvbG9yKTtcblxuICAgIGNvbnN0IHIgPSB0aGlzLmxlcnAoc3RhcnQuciwgZW5kLnIsIHJhdGlvKTtcbiAgICBjb25zdCBnID0gdGhpcy5sZXJwKHN0YXJ0LmcsIGVuZC5nLCByYXRpbyk7XG4gICAgY29uc3QgYiA9IHRoaXMubGVycChzdGFydC5iLCBlbmQuYiwgcmF0aW8pO1xuXG5cbiAgICByZXR1cm4gYHJnYigke3J9LCAke2d9LCAke2J9KWA7XG4gIH1cblxuICBsZXJwKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyLCByYXRpbzogbnVtYmVyKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoc3RhcnQgKyAoZW5kIC0gc3RhcnQpICogcmF0aW8pO1xuICB9XG4gIGhleFRvUmdiKGhleDogc3RyaW5nKSB7XG4gICAgY29uc3QgY2xlYW5IZXggPSBoZXgucmVwbGFjZSgnIycsICcnKTtcbiAgICBjb25zdCBiaWdpbnQgPSBwYXJzZUludChjbGVhbkhleCwgMTYpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHI6IChiaWdpbnQgPj4gMTYpICYgMjU1LFxuICAgICAgZzogKGJpZ2ludCA+PiA4KSAmIDI1NSxcbiAgICAgIGI6IGJpZ2ludCAmIDI1NVxuICAgIH07XG4gIH1cblxuXG4gIGluaXRDaG9yb3BsZXRoTWFwKGNoYXJ0Q29uZmlnOiBhbnksIHRvb3RUaXBDb2x1bW46IGFueVtdKTogdm9pZCB7XG5cbiAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTsgXG5cbiAgICB0aGlzLm1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAoXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImdvb2dsZW1hcFwiKSBhcyBIVE1MRWxlbWVudCxcbiAgICAgIHtcbiAgICAgICAgY2VudGVyOiB7XG4gICAgICAgICAgbGF0OiBwYXJzZUZsb2F0KGNoYXJ0Q29uZmlnLmNlbnRlckxhdCksXG4gICAgICAgICAgbG5nOiBwYXJzZUZsb2F0KGNoYXJ0Q29uZmlnLmNlbnRlckxuZylcbiAgICAgICAgfSxcbiAgICAgICAgem9vbTogcGFyc2VJbnQoY2hhcnRDb25maWcuem9vbSlcbiAgICAgIH1cbiAgICApO1xuXG4gICAgZ29vZ2xlLm1hcHMuZXZlbnQuYWRkTGlzdGVuZXJPbmNlKFxuICAgICAgdGhpcy5tYXAuZGF0YSxcbiAgICAgICdhZGRmZWF0dXJlJyxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5hcHBseUNob3JvcGxldGhTdHlsZXMoY2hhcnRDb25maWcpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hcC5kYXRhLmxvYWRHZW9Kc29uKGNoYXJ0Q29uZmlnLmdqc29uRmlsZVBhdGgpO1xuXG4gICAgLy8gdGhpcy5tYXAgPSBuZXcgZ29vZ2xlLm1hcHMuTWFwKFxuICAgIC8vICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJnb29nbGVtYXBcIikgYXMgSFRNTEVsZW1lbnQsXG4gICAgLy8gICB7XG4gICAgLy8gICAgIGNlbnRlcjogeyBsYXQ6IHBhcnNlRmxvYXQoY2hhcnRDb25maWcuY2VudGVyTGF0KSwgbG5nOiBwYXJzZUZsb2F0KGNoYXJ0Q29uZmlnLmNlbnRlckxuZykgfSxcbiAgICAvLyAgICAgem9vbTogcGFyc2VJbnQoY2hhcnRDb25maWcuem9vbSlcbiAgICAvLyAgIH1cbiAgICAvLyApO1xuXG5cbiAgICAvLyB0aGlzLm1hcC5kYXRhLmxvYWRHZW9Kc29uKGNoYXJ0Q29uZmlnLmdqc29uRmlsZVBhdGgpO1xuICAgIC8vIHRoaXMubWFwLmRhdGEuc2V0U3R5bGUoZmVhdHVyZSA9PiB0aGlzLmdldEZlYXR1cmVTdHlsZShmZWF0dXJlLCBjaGFydENvbmZpZywgdGhpcy5taW5DaG9yb3BsZXRoTWFwQ250LCB0aGlzLm1heENob3JvcGxldGhNYXBDbnQpKTtcblxuICAgIGNvbnN0IGluZm9XaW5kb3cgPSBuZXcgZ29vZ2xlLm1hcHMuSW5mb1dpbmRvdygpO1xuXG4gICAgdGhpcy5tYXAuZGF0YS5hZGRMaXN0ZW5lcignbW91c2VvdmVyJywgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGRpc3RyaWN0ID0gZXZlbnQuZmVhdHVyZS5nZXRQcm9wZXJ0eSgnZCcpO1xuICAgICAgY29uc3Qga2V5ID0gZGlzdHJpY3Q/LnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgIGNvbnN0IHJvdyA9IHRoaXMuY2hvcm9wbGV0aFRvb2x0aXBEYXRhU291cmNlLmdldChrZXkpO1xuXG4gICAgICBpbmZvV2luZG93LnNldENvbnRlbnQoXG4gICAgICAgIHRoaXMuYnVpbGRJbmZvV2luZG93Q29udGVudChkaXN0cmljdCwgcm93LCB0b290VGlwQ29sdW1uKVxuICAgICAgKTtcblxuICAgICAgaW5mb1dpbmRvdy5zZXRQb3NpdGlvbihldmVudC5sYXRMbmcpO1xuICAgICAgaW5mb1dpbmRvdy5vcGVuKHRoaXMubWFwKTtcbiAgICB9KTtcblxuICAgIHRoaXMubWFwLmRhdGEuYWRkTGlzdGVuZXIoJ21vdXNlb3V0JywgKCkgPT4gaW5mb1dpbmRvdy5jbG9zZSgpKTtcbiAgfVxuXG4gIGFwcGx5Q2hvcm9wbGV0aFN0eWxlcyhjaGFydENvbmZpZzogYW55KSB7XG4gICAgdGhpcy5tYXAuZGF0YS5zZXRTdHlsZShmZWF0dXJlID0+XG4gICAgICB0aGlzLmdldEZlYXR1cmVTdHlsZShmZWF0dXJlLCBjaGFydENvbmZpZywgdGhpcy5taW5DaG9yb3BsZXRoTWFwQ250LCB0aGlzLm1heENob3JvcGxldGhNYXBDbnQpXG4gICAgKTtcblxuICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgfVxuXG5cblxuICBidWlsZEluZm9XaW5kb3dDb250ZW50KGRpc3RyaWN0OiBzdHJpbmcsIHJvdzogYW55LCB0b290VGlwQ29sdW1uOiBhbnlbXSk6IHN0cmluZyB7XG5cbiAgICBjb25zdCByb3dzID0gdG9vdFRpcENvbHVtbi5tYXAoYyA9PiBgXG4gICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47XCI+XG4gICAgICA8c3Bhbj4ke2MuY2FwdGlvbn08L3NwYW4+XG4gICAgICA8c3Ryb25nPiR7cm93Py5bYy5kYXRhRmllbGRdID8/ICdObyBkYXRhJ308L3N0cm9uZz5cbiAgICA8L2Rpdj5cbiAgYCkuam9pbignJyk7XG5cbiAgICByZXR1cm4gYFxuICAgIDxkaXYgc3R5bGU9XCJcbiAgICAgIGNvbG9yOiMwMDA7XG4gICAgICBiYWNrZ3JvdW5kOiNmZmY7XG4gICAgICBwYWRkaW5nOjhweCAxMnB4O1xuICAgICAgZm9udC1zaXplOjEzcHg7XG4gICAgICBtaW4td2lkdGg6MTUwcHg7XG4gICAgXCI+XG4gICAgICA8ZGl2IHN0eWxlPVwiZm9udC13ZWlnaHQ6NjAwOyBtYXJnaW4tYm90dG9tOjZweDtcIj5cbiAgICAgICAgJHtkaXN0cmljdH0gOiBcbiAgICAgIDwvZGl2PlxuICAgICAgJHtyb3dzfVxuICAgIDwvZGl2PlxuICBgO1xuICB9XG5cblxuICB1cGRhdGVDaG9yb3BsZXRoTWFwRGF0YSh5ZWFyOiBzdHJpbmcsIGNoYXJ0Q29uZmlnOiBhbnkpIHtcbiAgICB0aGlzLmNob3JvcGxldGhNYXBEYXRhU291cmNlLmNsZWFyKCk7XG4gICAgdGhpcy5jaG9yb3BsZXRoVG9vbHRpcERhdGFTb3VyY2UuY2xlYXIoKTtcbiAgICBsZXQgbWluQ2hvcm9wbGV0aE1hcENudCA9IEluZmluaXR5O1xuICAgIGxldCBtYXhDaG9yb3BsZXRoTWFwQ250ID0gLUluZmluaXR5O1xuICAgIFxuXG4gICAgY29uc3QgdmFsdWVGaWVsZCA9IGNoYXJ0Q29uZmlnLmNoYXJ0X2NvbmZpZy5maW5kKFxuICAgICAgYyA9PiBjLmRpc3BsYXlGb3IgPT09ICdtYXAnXG4gICAgKT8uZGF0YUZpZWxkO1xuXG4gICAgdGhpcy5jaG9yb3BsZXRoTWFwRGF0YVxuICAgICAgLmZpbHRlcihkID0+IGRbY2hhcnRDb25maWcuc2xpZGVyVmFsdWVGaWVsZF0gPT09IHllYXIpXG4gICAgICAuZm9yRWFjaChkID0+IHtcbiAgICAgICAgY29uc3Qga2V5ID0gZC5kaXN0cmljdC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICB0aGlzLmNob3JvcGxldGhNYXBEYXRhU291cmNlLnNldChrZXksIGRbdmFsdWVGaWVsZF0pO1xuICAgICAgICB0aGlzLmNob3JvcGxldGhUb29sdGlwRGF0YVNvdXJjZS5zZXQoa2V5LCBkKTtcblxuICAgICAgICBtaW5DaG9yb3BsZXRoTWFwQ250ID0gTWF0aC5taW4obWluQ2hvcm9wbGV0aE1hcENudCwgZFt2YWx1ZUZpZWxkXSk7XG4gICAgICAgIG1heENob3JvcGxldGhNYXBDbnQgPSBNYXRoLm1heChtYXhDaG9yb3BsZXRoTWFwQ250LCBkW3ZhbHVlRmllbGRdKTtcbiAgICAgIH0pO1xuXG5cbiAgICBpZiAodGhpcy5tYXApIHtcbiAgICAgIGlmICh0aGlzLm1hcCkge1xuICAgICAgICB0aGlzLm1hcC5kYXRhLmZvckVhY2goZmVhdHVyZSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3R5bGUgPSB0aGlzLmdldEZlYXR1cmVTdHlsZShmZWF0dXJlLCBjaGFydENvbmZpZywgdGhpcy5taW5DaG9yb3BsZXRoTWFwQ250LCB0aGlzLm1heENob3JvcGxldGhNYXBDbnQpO1xuXG4gICAgICAgICAgdGhpcy5tYXAuZGF0YS5vdmVycmlkZVN0eWxlKGZlYXR1cmUsIHN0eWxlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICB9XG4gIH1cblxuICBnZXRGZWF0dXJlU3R5bGUoZmVhdHVyZTogYW55LCBjaGFydENvbmZpZzogYW55LCBtaW5Db3VudCwgbWF4Q291bnQpIHtcbiAgICBjb25zdCBkaXN0cmljdE5hbWUgPSBmZWF0dXJlLmdldFByb3BlcnR5KCdkJyk/LnRvVXBwZXJDYXNlKCk7XG4gICAgY29uc3QgY250ID0gdGhpcy5jaG9yb3BsZXRoTWFwRGF0YVNvdXJjZS5nZXQoZGlzdHJpY3ROYW1lKTtcbiAgICByZXR1cm4ge1xuICAgICAgZmlsbENvbG9yOiB0aGlzLmdldENvbG9yKGNudCwgY2hhcnRDb25maWcuY29sb3JPbmUsIGNoYXJ0Q29uZmlnLmNvbG9yVHdvLCBtaW5Db3VudCwgbWF4Q291bnQpLFxuICAgICAgc3Ryb2tlQ29sb3I6ICcjNTU1JyxcbiAgICAgIHN0cm9rZVdlaWdodDogMSxcbiAgICAgIGZpbGxPcGFjaXR5OiAwLjc1XG4gICAgfTtcbiAgfVxuXG4gIC8vIGNob3JvcGxldGhNYXAgc3RhcnQgLy9cblxuXG5cblxuICB0b2dnbGVQbGF5KCkge1xuICAgIGlmICh0aGlzLmlzUGxheWluZykge1xuICAgICAgdGhpcy5wYXVzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBsYXkoKTtcbiAgICB9XG4gIH1cblxuICBwbGF5KCkge1xuICAgIHRoaXMuaXNQbGF5aW5nID0gdHJ1ZTtcbiAgICB0aGlzLnBsYXlJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNob3JvcGxldGhNYXBDdXJyZW50SW5kZXggPCB0aGlzLmFsbFNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICB0aGlzLmNob3JvcGxldGhNYXBDdXJyZW50SW5kZXgrKztcbiAgICAgICAgdGhpcy51cGRhdGVZZWFyQnlJbmRleCh0aGlzLmNob3JvcGxldGhNYXBDdXJyZW50SW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuY2hvcm9wbGV0aE1hcHNsaWRlU3BlZWQpO1xuXG4gIH1cblxuICBwYXVzZSgpIHtcbiAgICB0aGlzLmlzUGxheWluZyA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnBsYXlJbnRlcnZhbCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnBsYXlJbnRlcnZhbCk7XG4gICAgICB0aGlzLnBsYXlJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmVzdGFydCgpIHtcbiAgICB0aGlzLnBhdXNlKCk7XG4gICAgdGhpcy5jaG9yb3BsZXRoTWFwQ3VycmVudEluZGV4ID0gMDtcbiAgICB0aGlzLnVwZGF0ZVllYXJCeUluZGV4KHRoaXMuY2hvcm9wbGV0aE1hcEN1cnJlbnRJbmRleCk7XG4gIH1cblxuICBvblllYXJDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucGF1c2UoKTsgLy8gc3RvcCBhdXRvcGxheSB3aGVuIHVzZXIgbW92ZXMgc2xpZGVyXG4gICAgdGhpcy5jaG9yb3BsZXRoTWFwQ3VycmVudEluZGV4ID0gK2V2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZVllYXJCeUluZGV4KHRoaXMuY2hvcm9wbGV0aE1hcEN1cnJlbnRJbmRleCk7XG4gIH1cblxuICBzZXRZZWFyQnlJbmRleChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5wYXVzZSgpO1xuICAgIHRoaXMuY2hvcm9wbGV0aE1hcEN1cnJlbnRJbmRleCA9IGluZGV4O1xuICAgIHRoaXMudXBkYXRlWWVhckJ5SW5kZXgoaW5kZXgpO1xuICB9XG5cbiAgdXBkYXRlWWVhckJ5SW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlID0gdGhpcy5hbGxTZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWVzW2luZGV4XTtcbiAgICB0aGlzLnVwZGF0ZUNob3JvcGxldGhNYXBEYXRhKHRoaXMuc2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlLCB0aGlzLmNob3JvcGxldGhNYXBDaGFydENvbmZpZyk7XG4gIH1cblxuXG4gIC8vIHNldFllYXJCeUluZGV4KGluZGV4OiBudW1iZXIpIHtcbiAgLy8gICB0aGlzLnNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZSA9IHRoaXMuYWxsU2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlc1tpbmRleF07XG4gIC8vICAgdGhpcy51cGRhdGVDaG9yb3BsZXRoTWFwRGF0YSh0aGlzLnNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZSwgdGhpcy5jaG9yb3BsZXRoTWFwQ2hhcnRDb25maWcpO1xuICAvLyB9XG5cbiAgLy8gb25ZZWFyQ2hhbmdlKGV2ZW50OiBFdmVudCkge1xuICAvLyAgIGNvbnN0IGluZGV4ID0gKyhldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gIC8vICAgdGhpcy5zZXRZZWFyQnlJbmRleChpbmRleCk7XG4gIC8vIH1cblxuXG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJteC0yIGJnLWdyYXktODAwXCI+XG4gIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSB3LWZ1bGxcIj5cblxuXG4gICAgPGRpdiBjbGFzcz1cImFic29sdXRlIGxlZnQtNCB0b3AtWzYwcHhdIGJvdHRvbS02IHotWzk5OTldIHBvaW50ZXItZXZlbnRzLW5vbmVcIiAqbmdJZj1cIiFpc0xvYWRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGgtODAgcHgtNCBweS0zIHJvdW5kZWQteGwgc2hhZG93LWxnIGJhY2tkcm9wLWJsdXItbWQgYmctYmxhY2svNjBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctNCBoLWZ1bGwgcm91bmRlZC1mdWxsIHNoYWRvdy14bFwiXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwiJ2xpbmVhci1ncmFkaWVudCh0byBib3R0b20sJyArIGNoYXJ0Q29uZmlnLmNvbG9yT25lICsgJywnICsgY2hhcnRDb25maWcuY29sb3JUd28gKyAnKSdcIj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWJldHdlZW4gaC04MCBtbC0yIHRleHQteHMgdGV4dC13aGl0ZVwiPlxuICAgICAgICAgIDxzcGFuPkhpZ2g8L3NwYW4+XG4gICAgICAgICAgPHNwYW4+TG93PC9zcGFuPlxuICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuXG4gICAgXG5cbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSB0b3AtWzIwMHB4XSBsZWZ0LTQgYm90dG9tLTYgei00MCBmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidy00IGgtZnVsbCByb3VuZGVkLWZ1bGwgc2hhZG93LWxnXCJcbiAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cIidsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsJyArIGNoYXJ0Q29uZmlnLmNvbG9yT25lICsgJywnICsgY2hhcnRDb25maWcuY29sb3JUd28gKyAnKSdcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuIGgtZnVsbCB0ZXh0LXhzIHRleHQtd2hpdGVcIj5cbiAgICAgICAgICA8c3Bhbj5IaWdoPC9zcGFuPlxuICAgICAgICAgIDxzcGFuPkxvdzwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG5cblxuICAgIDxkaXYgaWQ9XCJyZWdpb25zX2RpdlwiICNnb29nbE1hcCBzdHlsZT1cIndpZHRoOiAxMDAlXCI+PC9kaXY+XG4gICAgPGRpdiBpZD1cImdvb2dsZW1hcFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgW3N0eWxlLmhlaWdodF09XCJjaGFydEhlaWdodFwiPjwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJpc0xvYWRlclwiIGNsYXNzPVwiYWJzb2x1dGUgaW5zZXQtMCB6LTUwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLWJsYWNrLzQwIGJhY2tkcm9wLWJsdXItc21cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnZW8tY2hhcnQtbG9hZGVyXCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm14LTIgcGItMlwiPlxuICAgICAgPGRpdiBjbGFzcz1cIiBteC1hdXRvIHctZnVsbCBtdC0zXCIgKm5nSWY9XCJpc1JhbmdlU2xpZGVyVmlzaWJsZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIG1iLTJcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidGV4dC13aGl0ZSBweC0zIHB5LTIgcm91bmRlZCBiZy1ncmF5LTgwMCBob3ZlcjpiZy1ncmF5LTcwMFwiIChjbGljayk9XCJ0b2dnbGVQbGF5KClcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFcIiBbbmdDbGFzc109XCJpc1BsYXlpbmcgPyAnZmEtcGF1c2UnIDogJ2ZhLXBsYXknXCI+PC9pPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHNwYWNlLXgtMiB0ZXh0LXNtIGZvbnQtc2VtaWJvbGRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHllYXIgb2YgYWxsU2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIHNlbGVjdC1ub25lIHB4LTIgcHktMSByb3VuZGVkLW1kIHRyYW5zaXRpb25cIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnYmctYmxhY2sgdGV4dC13aGl0ZSBzaGFkb3cnOiB5ZWFyID09PSBzZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWUsXG4gICAgICAgICAgICAndGV4dC1ncmF5LTMwMCBob3Zlcjp0ZXh0LXdoaXRlJzogeWVhciAhPT0gc2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlXG4gICAgICAgICAgfVwiIChjbGljayk9XCJzZXRZZWFyQnlJbmRleChpKVwiPlxuICAgICAgICAgICAgICAgIHt7IHllYXIgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInRleHQtd2hpdGUgcHgtMyBweS0yIHJvdW5kZWQgYmctZ3JheS04MDAgaG92ZXI6YmctZ3JheS03MDBcIiAoY2xpY2spPVwicmVzdGFydCgpXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXJlZnJlc2hcIj48L2k+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8aW5wdXQgdHlwZT1cInJhbmdlXCIgY2xhc3M9XCJ3LWZ1bGwgaC0yIHJvdW5kZWQtbGcgYXBwZWFyYW5jZS1ub25lIGN1cnNvci1wb2ludGVyXG4gICAgICAgICAgIGJnLWdyYWRpZW50LXRvLXIgZnJvbS1ncmVlbi00MDAgdmlhLXllbGxvdy00MDAgdG8tcmVkLTUwMFwiIFttaW5dPVwiMFwiXG4gICAgICAgICAgW21heF09XCJhbGxTZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWVzLmxlbmd0aCAtIDFcIiBbdmFsdWVdPVwiY2hvcm9wbGV0aE1hcEN1cnJlbnRJbmRleFwiXG4gICAgICAgICAgKGlucHV0KT1cIm9uWWVhckNoYW5nZSgkZXZlbnQpXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
700
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtbWEtZ2VvLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1nZW8tY2hhcnQvZ2FtbWEtZ2VvLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1nZW8tY2hhcnQvZ2FtbWEtZ2VvLWNoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sTUFBTSxNQUFNLCtDQUErQyxDQUFDOzs7O0FBVW5FLE1BQU0sT0FBTyxzQkFBc0I7SUF1TWpDLFlBQW1CLGFBQTRCO1FBQTVCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBbkwvQyxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBSWIsV0FBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV2Qix5QkFBb0IsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM3RCxjQUFTLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbEQsaUNBQTRCLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDN0UscUJBQWdCLEdBQVksSUFBSSxDQUFDO1FBUzFDLCtCQUEwQixHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO1FBQ3ZELHdCQUFtQixHQUFXLFFBQVEsQ0FBQztRQUN2Qyx3QkFBbUIsR0FBVyxDQUFDLFFBQVEsQ0FBQTtRQUN2QyxpQ0FBNEIsR0FBVSxFQUFF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QkFBd0IsRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUM3RixDQUFDOzttSEFuK0JVLHNCQUFzQjt1R0FBdEIsc0JBQXNCLHdZQ3BCbkMsazFGQTJETTsyRkR2Q08sc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNFLHFCQUFxQjtvR0FLUixRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBeUJKLG9CQUFvQjtzQkFBcEMsTUFBTTtnQkFDVSxTQUFTO3NCQUF6QixNQUFNO2dCQUNVLDRCQUE0QjtzQkFBNUMsTUFBTTtnQkFDRSxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBMkJGLGVBQWU7c0JBRGxCLEtBQUs7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IG1vbWVudCBmcm9tICcuLi8uLi8uLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL21vbWVudC1oZWxwZXInO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvY29tbW9uJztcbi8vIGltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xuZGVjbGFyZSB2YXIgZ29vZ2xlOiBhbnk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJhcHAtZ2FtbWEtZ2VvLWNoYXJ0XCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vZ2FtbWEtZ2VvLWNoYXJ0LmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogWycuL2dhbW1hLWdlby1jaGFydC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEdhbW1hR2VvQ2hhcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBAVmlld0NoaWxkKFwiZ29vZ2xNYXBcIikgZ29vZ2xNYXA6IEVsZW1lbnRSZWY7XG4gIGNoYXJEYXRhOiBhbnk7XG4gIGNoYXJ0SGVpZ2h0OiBhbnk7XG4gIGJhY2dyb3VuZENvbG9yOiBhbnk7XG4gIG1hcENvbG9yczogYW55O1xuICBjaGFydFR5cGU6IGFueTtcbiAgdG9vdFRpcENvbHVtbjogYW55O1xuICByZWdpb246IGFueTtcbiAgcmVnaW9uQ29kZTogYW55O1xuICAvLyBoZWF0IE1hcCBzdGFydFxuICBtYXA6IGFueTtcbiAgbG9jYXRpb25zO1xuICBtYXBUWXBlOiBhbnk7XG4gIG1hcE9wdGlvbkZvckhlYXRNYXA6IHtcbiAgICB6b29tOiBudW1iZXI7XG4gIH07XG4gIGN1cnJlbnRJbmZvV2luZG93OiBhbnk7XG4gIC8vIGhlYXQgTWFwIGVuZFxuICAvL2hlYXQgb25seSBtYXAgc3RhcnQgLy9cbiAgbWFya2VycyA9IFtdO1xuICBoZWF0bWFwOiBhbnk7XG4gIGhlYXRtYXBEYXRhOiBhbnk7XG4gIHpvb21WYWx1Rm9yQWxsOiBudW1iZXI7XG4gIGJvdW5kcyA9IG5ldyBnb29nbGUubWFwcy5MYXRMbmdCb3VuZHMoKTtcbiAgLy9oZWF0IG9ubHkgbWFwIGVuZCAvL1xuICBAT3V0cHV0KCkgcHVibGljIGdldFRhYmxlQ29uZmlnT3V0UHV0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBvUm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIG9ucmlnaHRDbGlja0NvbnRleHRTZWxlY3Rpb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKSByaWdodENsaWNrRW5hYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgaXNMb2FkZXI6IGJvb2xlYW47XG4gIHBhZ2VfY29uZmlnOiBhbnk7XG4gIHBhZ2VfcGFybXM6IGFueTtcbiAgc29ydEJ5OiBhbnk7XG4gIGZpbHRlcmVkT2JqZWN0czogYW55O1xuXG5cbiAgLy9jaG9yb3BsZXRoTWFwIHZhcmlhYmxlcy8vXG4gIGNob3JvcGxldGhfbWFwX2RhdGFfc291cmNlID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgbWluQ2hvcm9wbGV0aE1hcENudDogbnVtYmVyID0gSW5maW5pdHk7XG4gIG1heENob3JvcGxldGhNYXBDbnQ6IG51bWJlciA9IC1JbmZpbml0eVxuICBhbGxTZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWVzOiBhbnlbXSA9IFtdO1xuICBzZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWU6IHN0cmluZztcbiAgY2hvcm9wbGV0aE1hcERhdGFTb3VyY2UgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBjaG9yb3BsZXRoVG9vbHRpcERhdGFTb3VyY2UgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICBjaG9yb3BsZXRoTWFwRGF0YTogYW55O1xuICBpc1JhbmdlU2xpZGVyVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBjaG9yb3BsZXRoTWFwQ2hhcnRDb25maWc6IGFueTtcbiAgaXNQbGF5aW5nID0gZmFsc2U7XG4gIHBsYXlJbnRlcnZhbDogYW55O1xuICBjaG9yb3BsZXRoTWFwQ3VycmVudEluZGV4ID0gMDtcbiAgY2hvcm9wbGV0aE1hcHNsaWRlU3BlZWQ6IG51bWJlcjtcblxuICBjaGFydENvbmZpZzphbnk7XG5cbiAgQElucHV0KFwiY2hhcnREYXRhU291cmNlXCIpXG4gIHNldCBjaGFydERhdGFTb3VyY2UodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuXG4gICAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMucGFnZV9jb25maWcgPSB2YWx1ZTtcbiAgICAgIHRoaXMucGFnZV9wYXJtcyA9IHZhbHVlLnRpdGxlUGFyYW1zO1xuICAgICAgdGhpcy5zb3J0QnkgPSB2YWx1ZS5rcGlDb25maWc/LmRhdGFDb25maWc/LnNvcnRCeTtcbiAgICAgIC8vIHRoaXMuaW5Sb2FtZXJHZW9DaGFydC5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICcnO1xuICAgICAgaWYgKHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlICYmIHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICBpZiAodmFsdWUua3BpQ29uZmlnLmZvcm1hdGUgPT0gXCJtb250aGx5XCIpIHtcbiAgICAgICAgICB0aGlzLm1hcFRZcGUgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXBUeXBlO1xuICAgICAgICAgIGlmICh0aGlzLm1hcFRZcGUgPT0gXCJnZW9NYXBcIikge1xuICAgICAgICAgICAgdGhpcy5yZWdpb24gPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5yZWdpb247XG4gICAgICAgICAgICB0aGlzLnJlZ2lvbkNvZGUgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5yZWdpb25Db2RlO1xuICAgICAgICAgICAgdGhpcy50b290VGlwQ29sdW1uID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuY2hhcnRfY29uZmlnO1xuICAgICAgICAgICAgbGV0IGRhdGEgPSB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZTtcbiAgICAgICAgICAgIHRoaXMuY2hhcnRIZWlnaHQgPSBgJHt2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5zaXplfXB4YDtcbiAgICAgICAgICAgIHRoaXMuY2hhcnRUeXBlID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuY2hhcnRUeXBlO1xuICAgICAgICAgICAgdGhpcy5iYWNncm91bmRDb2xvciA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgICAgIHRoaXMubWFwQ29sb3JzID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuY29sb3JzO1xuICAgICAgICAgICAgLy8gbGV0IGNvbmZpZyA9IHZhbHVlLmNoYXJ0Q29uZmlnO1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0YSA9IFtcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnW1wiYXJndW1lbnRGaWVsZFwiXSxcbiAgICAgICAgICAgICAgICB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZ1tcImNoYXJ0VmFsdWVGaWVsZFwiXSxcbiAgICAgICAgICAgICAgICB7IHR5cGU6IFwic3RyaW5nXCIsIHJvbGU6IFwidG9vbHRpcFwiLCBwOiB7IGh0bWw6IHRydWUgfSB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgXS5jb25jYXQoXG4gICAgICAgICAgICAgIGRhdGEubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9vbHRpcCA9IHRoaXMuZ2V0VG9vbHRpcChpdGVtKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgaXRlbVt2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZ1tcImFyZ3VtZW50RmllbGRcIl1dLFxuICAgICAgICAgICAgICAgICAgaXRlbVt2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZ1tcImNoYXJ0VmFsdWVGaWVsZFwiXV0sXG4gICAgICAgICAgICAgICAgICB0b29sdGlwLFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5jaGFyRGF0YSA9IGZvcm1hdHRlZERhdGE7XG4gICAgICAgICAgICAvLyB0aGlzLmxvYWRHb29nbGVDaGFydHMoKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgICAgIC8vIHRoaXMubG9hZEdvb2dsZUNoYXJ0cygpO1xuICAgICAgICAgICAgfSwgMjAwKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubWFwVFlwZSA9PSBcImJ1YmJsZU1hcFwiKSB7XG4gICAgICAgICAgICB0aGlzLmxvY2F0aW9ucyA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlO1xuICAgICAgICAgICAgdGhpcy5jaGFydEhlaWdodCA9IGAke3ZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnNpemV9cHhgO1xuICAgICAgICAgICAgdGhpcy50b290VGlwQ29sdW1uID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuY2hhcnRfY29uZmlnO1xuICAgICAgICAgICAgdGhpcy5tYXBPcHRpb25Gb3JIZWF0TWFwID0ge1xuICAgICAgICAgICAgICB6b29tOiB0aGlzLnpvb21WYWx1Rm9yQWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubWFwVFlwZSA9PSBcImNob3JvcGxldGhNYXBcIikge1xuICAgICAgICAgICAgdGhpcy5jaGFydENvbmZpZyA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnO1xuICAgICAgICAgICAgbGV0IGNoYXJ0Q29uZmlnID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWc7XG5cbiAgICAgICAgICAgIGlmIChjaGFydENvbmZpZy5pc0RhdGFBZ2dyZWdhdGlvbikge1xuICAgICAgICAgICAgICBjb25zdCBhZ2dyZWF0aW9uRGF0YSA9IHRoaXMuZ2V0R3JvdXBEYXRhRm9yQ2hhcnQodmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UsIGNoYXJ0Q29uZmlnWydkYXRhQWdncmVnYXRpb25Db25maWcnXVsnZGF0YUFnZ3JlZ2F0ZUNvbHVtZXMnXSwgY2hhcnRDb25maWdbJ2RhdGFBZ2dyZWdhdGlvbkNvbmZpZyddWydhZ2dyZWdhdGVGaWVsZHMnXSk7XG4gICAgICAgICAgICAgIHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlID0gYWdncmVhdGlvbkRhdGE7XG5cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLmNob3JvcGxldGhNYXBEYXRhU291cmNlID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgICAgICAgICAgIHRoaXMuY2hvcm9wbGV0aFRvb2x0aXBEYXRhU291cmNlID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgICAgICAgICAgIHRoaXMuY2hvcm9wbGV0aE1hcERhdGEgPSB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZTtcblxuXG4gICAgICAgICAgICB0aGlzLmNoYXJ0SGVpZ2h0ID0gYCR7Y2hhcnRDb25maWcuc2l6ZX1weGA7XG5cbiAgICAgICAgICAgIGxldCB0b290VGlwQ29sdW1uID0gY2hhcnRDb25maWcuY2hhcnRfY29uZmlnXG4gICAgICAgICAgICAgIC5maWx0ZXIoYyA9PiBjLmRpc3BsYXlGb3IgPT09ICdtYXAnIHx8IGMuZGlzcGxheUZvciA9PT0gJ3Rvb2x0aXAnKTtcblxuICAgICAgICAgICAgY29uc3QgdmFsdWVGaWVsZCA9XG4gICAgICAgICAgICAgIGNoYXJ0Q29uZmlnLmNoYXJ0X2NvbmZpZy5maW5kKGMgPT4gYy5kaXNwbGF5Rm9yID09PSAnbWFwJyk/LmRhdGFGaWVsZDtcblxuICAgICAgICAgICAgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UuZm9yRWFjaChkID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qga2V5ID0gZFtjaGFydENvbmZpZy5hcmd1bWVudEZpZWxkXS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IHZhbCA9IGRbdmFsdWVGaWVsZF07XG5cbiAgICAgICAgICAgICAgdGhpcy5jaG9yb3BsZXRoTWFwRGF0YVNvdXJjZS5zZXQoa2V5LCB2YWwpO1xuICAgICAgICAgICAgICB0aGlzLmNob3JvcGxldGhUb29sdGlwRGF0YVNvdXJjZS5zZXQoa2V5LCBkKTtcblxuICAgICAgICAgICAgICB0aGlzLm1pbkNob3JvcGxldGhNYXBDbnQgPSBNYXRoLm1pbih0aGlzLm1pbkNob3JvcGxldGhNYXBDbnQsIGRbdmFsdWVGaWVsZF0pO1xuICAgICAgICAgICAgICB0aGlzLm1heENob3JvcGxldGhNYXBDbnQgPSBNYXRoLm1heCh0aGlzLm1heENob3JvcGxldGhNYXBDbnQsIGRbdmFsdWVGaWVsZF0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChjaGFydENvbmZpZy5pc1ZhbHVlRmllbGRSYW5nZVNsaWRlcikge1xuICAgICAgICAgICAgICB0aGlzLmFsbFNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZXMgPSBbLi4ubmV3IFNldCh2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZS5tYXAoZCA9PiBkW2NoYXJ0Q29uZmlnLnNsaWRlclZhbHVlRmllbGRdKSldO1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZSA9IHRoaXMuYWxsU2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlc1swXTtcbiAgICAgICAgICAgICAgdGhpcy5pc1JhbmdlU2xpZGVyVmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2hvcm9wbGV0aE1hcERhdGEodGhpcy5zZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWUsIGNoYXJ0Q29uZmlnKTtcbiAgICAgICAgICAgICAgdGhpcy5jaG9yb3BsZXRoTWFwQ2hhcnRDb25maWcgPSBjaGFydENvbmZpZztcbiAgICAgICAgICAgICAgdGhpcy5jaG9yb3BsZXRoTWFwc2xpZGVTcGVlZCA9IGNoYXJ0Q29uZmlnLnNsaWRlU3BlZWQ7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgdGhpcy5pbml0Q2hvcm9wbGV0aE1hcChjaGFydENvbmZpZywgdG9vdFRpcENvbHVtbik7XG5cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxvY2F0aW9ucyA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlO1xuICAgICAgICAgICAgdGhpcy50b290VGlwQ29sdW1uID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuY2hhcnRfY29uZmlnO1xuICAgICAgICAgICAgdGhpcy5jaGFydEhlaWdodCA9IGAke3ZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnNpemV9cHhgO1xuICAgICAgICAgICAgdGhpcy56b29tVmFsdUZvckFsbCA9IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICAgIHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuem9vbVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMubWFwT3B0aW9uRm9ySGVhdE1hcCA9IHtcbiAgICAgICAgICAgICAgem9vbTogdGhpcy56b29tVmFsdUZvckFsbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5rcGlDb25maWcuZm9ybWF0ZSA9PSBcImRhaWx5XCIpIHtcbiAgICAgICAgICB0aGlzLm1hcFRZcGUgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXBUeXBlO1xuICAgICAgICAgIGNvbnN0IHNvcnRlZERhdGEgPSB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZVxuICAgICAgICAgICAgLmZpbHRlcihyZWNvcmQgPT4gcmVjb3JkW3RoaXMuc29ydEJ5XSlcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBtb21lbnQoYlt0aGlzLnNvcnRCeV0pLmRpZmYobW9tZW50KGFbdGhpcy5zb3J0QnldKSkpO1xuICAgICAgICAgIGNvbnN0IG1vc3RSZWNlbnRSZWNvcmQgPSBzb3J0ZWREYXRhWzBdO1xuXG4gICAgICAgICAgaWYgKHZhbHVlLmVuZERhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPYmplY3RzID0gc29ydGVkRGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhW3RoaXMuc29ydEJ5XSA9PT0gdmFsdWUuZW5kRGF0ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPYmplY3RzID0gc29ydGVkRGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhW3RoaXMuc29ydEJ5XSA9PT0gbW9zdFJlY2VudFJlY29yZFt0aGlzLnNvcnRCeV0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLm1hcFRZcGUgPT0gXCJidWJibGVNYXBcIikge1xuICAgICAgICAgICAgdGhpcy5sb2NhdGlvbnMgPSB0aGlzLmZpbHRlcmVkT2JqZWN0cztcbiAgICAgICAgICAgIHRoaXMuY2hhcnRIZWlnaHQgPSBgJHt2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5zaXplfXB4YDtcbiAgICAgICAgICAgIHRoaXMudG9vdFRpcENvbHVtbiA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNoYXJ0X2NvbmZpZztcbiAgICAgICAgICAgIHRoaXMubWFwT3B0aW9uRm9ySGVhdE1hcCA9IHtcbiAgICAgICAgICAgICAgem9vbTogdGhpcy56b29tVmFsdUZvckFsbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgfVxuXG5cbiAgICB9XG5cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHsgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tYXBUWXBlID09IFwiZ2VvTWFwXCIpIHtcbiAgICAgIHRoaXMubG9hZEdvb2dsZUNoYXJ0cygpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5tYXBUWXBlID09IFwiaGVhdE1hcFwiKSB7XG4gICAgICBpZiAodGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5oZWF0TWFwQ2F0ZWdvcnkgPT0gXCJoZWF0TWFwT25seVwiKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5sb2FkR29vZ2xlSGVhdE9ubHlNYXBzKHRoaXMubG9jYXRpb25zKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5oZWF0TWFwQ2F0ZWdvcnkgPT0gXCJoZWF0TWFwTWFya2VyXCIpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVNYXAoKTtcbiAgICAgICAgdGhpcy5hZGRNYXJrZXJzKCk7XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplSGVhdFdpdGhNYXJrZXJNYXAodGhpcy5sb2NhdGlvbnMpO1xuXG4gICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKHRoaXMubWFwVFlwZSA9PSBcImNob3JvcGxldGhNYXBcIikge1xuXG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZU1hcCgpO1xuICAgICAgdGhpcy5hZGRCdWJibGVNYXJrZXJzKCk7XG4gICAgfVxuICB9XG5cblxuICBnZXRHcm91cERhdGFGb3JDaGFydChkYXRhLCBhZ2dyZWdhdGlvbkNvbmZpZywgZ3JvdXBCeUNvbHVtbnMpIHtcbiAgICBjb25zdCBncm91cE1hcCA9IHt9O1xuXG4gICAgZGF0YS5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICBjb25zdCBncm91cEtleSA9IGdyb3VwQnlDb2x1bW5zLm1hcChjb2wgPT4gcm93W2NvbF0pLmpvaW4oXCJ8fFwiKTtcblxuICAgICAgaWYgKCFncm91cE1hcFtncm91cEtleV0pIHtcbiAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldID0ge307XG5cbiAgICAgICAgZ3JvdXBCeUNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVtjb2xdID0gcm93W2NvbF07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGFnZ3JlZ2F0aW9uQ29uZmlnLmZvckVhY2goKHsgYWdncmVnYXRlRGF0YUZpZWxkLCBhZ2dyZWdhdGVGdW5jdGlvblR5cGUgfSkgPT4ge1xuICAgICAgICAgIHN3aXRjaCAoYWdncmVnYXRlRnVuY3Rpb25UeXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwic3VtXCI6XG4gICAgICAgICAgICBjYXNlIFwiYXZnXCI6XG4gICAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdID0gMDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWluXCI6XG4gICAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdID0gSW5maW5pdHk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1heFwiOlxuICAgICAgICAgICAgICBncm91cE1hcFtncm91cEtleV1bYWdncmVnYXRlRGF0YUZpZWxkXSA9IC1JbmZpbml0eTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiY291bnRcIjpcbiAgICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gPSAwO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYWdncmVnYXRlRnVuY3Rpb25UeXBlID09PSBcImF2Z1wiKSB7XG4gICAgICAgICAgICBncm91cE1hcFtncm91cEtleV1bYCR7YWdncmVnYXRlRGF0YUZpZWxkfV9fY291bnRgXSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gQXBwbHkgYWdncmVnYXRpb25zXG4gICAgICBhZ2dyZWdhdGlvbkNvbmZpZy5mb3JFYWNoKCh7IGFnZ3JlZ2F0ZURhdGFGaWVsZCwgYWdncmVnYXRlRnVuY3Rpb25UeXBlIH0pID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSByb3dbYWdncmVnYXRlRGF0YUZpZWxkXTtcblxuICAgICAgICBzd2l0Y2ggKGFnZ3JlZ2F0ZUZ1bmN0aW9uVHlwZSkge1xuICAgICAgICAgIGNhc2UgXCJzdW1cIjpcbiAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdICs9IHZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiYXZnXCI6XG4gICAgICAgICAgICBncm91cE1hcFtncm91cEtleV1bYWdncmVnYXRlRGF0YUZpZWxkXSArPSB2YWx1ZTtcbiAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVtgJHthZ2dyZWdhdGVEYXRhRmllbGR9X19jb3VudGBdICs9IDE7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJtaW5cIjpcbiAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdID1cbiAgICAgICAgICAgICAgTWF0aC5taW4oZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIm1heFwiOlxuICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gPVxuICAgICAgICAgICAgICBNYXRoLm1heChncm91cE1hcFtncm91cEtleV1bYWdncmVnYXRlRGF0YUZpZWxkXSwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiY291bnRcIjpcbiAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdICs9IDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBGaW5hbGl6ZSBhdmVyYWdlc1xuICAgIE9iamVjdC52YWx1ZXMoZ3JvdXBNYXApLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgYWdncmVnYXRpb25Db25maWcuZm9yRWFjaCgoeyBhZ2dyZWdhdGVEYXRhRmllbGQsIGFnZ3JlZ2F0ZUZ1bmN0aW9uVHlwZSB9KSA9PiB7XG4gICAgICAgIGlmIChhZ2dyZWdhdGVGdW5jdGlvblR5cGUgPT09IFwiYXZnXCIpIHtcbiAgICAgICAgICBncm91cFthZ2dyZWdhdGVEYXRhRmllbGRdID1cbiAgICAgICAgICAgIGdyb3VwW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gLyBncm91cFtgJHthZ2dyZWdhdGVEYXRhRmllbGR9X19jb3VudGBdO1xuICAgICAgICAgIGRlbGV0ZSBncm91cFtgJHthZ2dyZWdhdGVEYXRhRmllbGR9X19jb3VudGBdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKGdyb3VwTWFwKTtcbiAgfVxuXG4gIGxvYWRHb29nbGVDaGFydHMoKSB7XG4gICAgZ29vZ2xlLmNoYXJ0cy5sb2FkKFwiY3VycmVudFwiLCB7XG4gICAgICBwYWNrYWdlczogW3RoaXMuY2hhcnRUeXBlXSxcbiAgICB9KTtcbiAgICBnb29nbGUuY2hhcnRzLnNldE9uTG9hZENhbGxiYWNrKHRoaXMuZHJhd0NoYXJ0LmJpbmQodGhpcykpO1xuICB9XG5cbiAgZHJhd0NoYXJ0KCkge1xuICAgIGNvbnN0IGRhdGEgPSBnb29nbGUudmlzdWFsaXphdGlvbi5hcnJheVRvRGF0YVRhYmxlKHRoaXMuY2hhckRhdGEpO1xuXG4gICAgLy8gY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAvLyAgIHJlZ2lvbjogJ1VTQScsXG4gICAgLy8gICBkaXNwbGF5TW9kZTogJ21hcmtlcnMnLFxuICAgIC8vICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLmJhY2dyb3VuZENvbG9yLFxuICAgIC8vICAgdG9vbHRpcDogeyBpc0h0bWw6IHRydWUgfSxcbiAgICAvLyAgIGNvbG9yQXhpczogeyBjb2xvcnM6IHRoaXMubWFwQ29sb3JzIH1cbiAgICAvLyB9O1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbkNvbmZpZygpO1xuXG4gICAgY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uR2VvQ2hhcnQoXG4gICAgICB0aGlzLmdvb2dsTWFwLm5hdGl2ZUVsZW1lbnRcbiAgICApO1xuICAgIHRoaXMuZ29vZ2xNYXAubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmNoYXJ0SGVpZ2h0O1xuICAgIGNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7XG4gIH1cblxuICBnZXRUb29sdGlwKGRhdGEpIHtcbiAgICBsZXQgdG9vbFRpcERhdGEgPSBcIlwiO1xuICAgIHRoaXMudG9vdFRpcENvbHVtbi5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGRhdGFbZWxlbWVudC5kYXRhRmllbGRdID09PSAnbnVtYmVyJykge1xuICAgICAgICB0b29sVGlwRGF0YSArPVxuICAgICAgICAgIFwiPGRpdiBjbGFzcz0naW5saW5lJz48Yj5cIiArXG4gICAgICAgICAgZWxlbWVudC5jYXB0aW9uICtcbiAgICAgICAgICBcIjo8L2I+PC9kaXY+IFwiICtcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2Uucm91bmRPZmZUaWxsVHdvKGRhdGFbZWxlbWVudC5kYXRhRmllbGRdLCAyKSArXG4gICAgICAgICAgXCI8YnIgLz5cIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRvb2xUaXBEYXRhICs9XG4gICAgICAgICAgXCI8ZGl2IGNsYXNzPSdpbmxpbmUnPjxiPlwiICtcbiAgICAgICAgICBlbGVtZW50LmNhcHRpb24gK1xuICAgICAgICAgIFwiOjwvYj48L2Rpdj4gXCIgK1xuICAgICAgICAgIGRhdGFbZWxlbWVudC5kYXRhRmllbGRdICtcbiAgICAgICAgICBcIjxiciAvPlwiO1xuICAgICAgfVxuXG5cbiAgICB9KTtcbiAgICByZXR1cm4gdG9vbFRpcERhdGE7XG4gIH1cblxuICBnZXRPcHRpb25Db25maWcoKSB7XG4gICAgaWYgKHRoaXMucmVnaW9uID09ICdjaXR5Jykge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvbkNvZGUsXG4gICAgICAgIGRpc3BsYXlNb2RlOiAnbWFya2VycycsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5iYWNncm91bmRDb2xvcixcbiAgICAgICAgdG9vbHRpcDogeyBpc0h0bWw6IHRydWUgfSxcbiAgICAgICAgY29sb3JBeGlzOiB7IGNvbG9yczogdGhpcy5tYXBDb2xvcnMgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoaXMuYmFjZ3JvdW5kQ29sb3IsXG4gICAgICAgIHRvb2x0aXA6IHsgaXNIdG1sOiB0cnVlIH0sXG4gICAgICAgIGNvbG9yQXhpczogeyBjb2xvcnM6IHRoaXMubWFwQ29sb3JzIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG4gIH1cblxuXG4gIC8vICBHZW8gTWFwIGVuZCAvL1xuXG4gIC8vIEhlYXQgTWFwIHN0YXJ0IC8vXG4gIGluaXRpYWxpemVNYXAoKTogdm9pZCB7XG4gICAgY29uc3QgbWFwT3B0aW9ucyA9IHRoaXMubWFwT3B0aW9uRm9ySGVhdE1hcDtcbiAgICAvLyB7XG4gICAgLy8gICBjZW50ZXI6IHsgbGF0OiAzNy4wOTAyLCBsbmc6IC05NS43MTI5IH0sIC8vIENlbnRlciBvZiB0aGUgVVNBXG4gICAgLy8gICB6b29tOiA1LFxuICAgIC8vIH07XG5cbiAgICBpZiAodGhpcy5tYXBUWXBlID09IFwiYnViYmxlTWFwXCIpIHtcbiAgICAgIG1hcE9wdGlvbnNbXCJzdHlsZXNcIl0gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBmZWF0dXJlVHlwZTogXCJhbGxcIixcbiAgICAgICAgICBzdHlsZXJzOiBbXG4gICAgICAgICAgICB7IHNhdHVyYXRpb246IC0xMDAgfSxcbiAgICAgICAgICAgIHsgbGlnaHRuZXNzOiA3MCB9LFxuICAgICAgICAgICAgeyB2aXNpYmlsaXR5OiBcInNpbXBsaWZpZWRcIiB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBmZWF0dXJlVHlwZTogXCJhZG1pbmlzdHJhdGl2ZS5jb3VudHJ5XCIsXG4gICAgICAgICAgZWxlbWVudFR5cGU6IFwibGFiZWxzXCIsXG4gICAgICAgICAgc3R5bGVyczogW1xuICAgICAgICAgICAgeyBsaWdodG5lc3M6IC0zMCB9LCAvLyBEYXJrZW4gbGFiZWxzIGZ1cnRoZXJcbiAgICAgICAgICAgIHsgdmlzaWJpbGl0eTogXCJvblwiIH0sXG4gICAgICAgICAgICB7IGZvbnRXZWlnaHQ6IFwiYm9sZFwiIH0sIC8vIE1ha2UgbGFiZWxzIGJvbGRcbiAgICAgICAgICAgIHsgZm9udFNpemU6IFwiMTJweFwiIH0sIC8vIEluY3JlYXNlIGZvbnQgc2l6ZVxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBmZWF0dXJlVHlwZTogXCJhZG1pbmlzdHJhdGl2ZS5jb3VudHJ5XCIsXG4gICAgICAgICAgZWxlbWVudFR5cGU6IFwiZ2VvbWV0cnkuc3Ryb2tlXCIsXG4gICAgICAgICAgc3R5bGVyczogW1xuICAgICAgICAgICAgeyBsaWdodG5lc3M6IC00MCB9LCAvLyBEYXJrZW4gYm9yZGVycyBzaWduaWZpY2FudGx5XG4gICAgICAgICAgICB7IHdlaWdodDogMS41IH0sIC8vIEluY3JlYXNlIGJvcmRlciB0aGlja25lc3NcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZmVhdHVyZVR5cGU6IFwiYWRtaW5pc3RyYXRpdmUuY291bnRyeVwiLFxuICAgICAgICAgIGVsZW1lbnRUeXBlOiBcImdlb21ldHJ5LmZpbGxcIixcbiAgICAgICAgICBzdHlsZXJzOiBbXG4gICAgICAgICAgICB7IGxpZ2h0bmVzczogOTAgfSwgLy8gS2VlcCBmaWxsIHZlcnkgbGlnaHRcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9XG5cbiAgICB0aGlzLm1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAoXG4gICAgICAvLyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlZ2lvbnNfZGl2XCIpICxcbiAgICAgIHRoaXMuZ29vZ2xNYXAubmF0aXZlRWxlbWVudCxcbiAgICAgIG1hcE9wdGlvbnNcbiAgICApO1xuICAgIHRoaXMuZ29vZ2xNYXAubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmNoYXJ0SGVpZ2h0O1xuICB9XG5cbiAgLy8gQWRkIG1hcmtlcnMgdG8gdGhlIG1hcFxuICBhZGRNYXJrZXJzKCk6IHZvaWQge1xuICAgIHRoaXMubG9jYXRpb25zLmZvckVhY2goKGxvY2F0aW9uKSA9PiB7XG4gICAgICBjb25zdCBtYXJrZXIgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHtcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBsYXQ6IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICBsb2NhdGlvblt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxhdGl0dWRlXVxuICAgICAgICAgICksXG4gICAgICAgICAgbG5nOiBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgbG9jYXRpb25bdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXJrZXJMb25naXR1ZGVdXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgaWNvbjogdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5pY29uID8ge1xuICAgICAgICAgIHVybDogdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5pY29uLCAvLyBSZXBsYWNlIHdpdGggeW91ciBpY29uIHBhdGhcbiAgICAgICAgICBzY2FsZWRTaXplOiB7XG4gICAgICAgICAgICB3aWR0aDogMzIsXG4gICAgICAgICAgICBoZWlnaHQ6IDMyLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0gOiAnJyxcbiAgICAgICAgLy8gdG9vbHRpcFRleHQ6XG4gICAgICAgIG1hcDogdGhpcy5tYXAsXG4gICAgICAgIC8vIHRpdGxlOiBgJHtsb2NhdGlvbi5jaXR5fTogJCR7bG9jYXRpb24udG90YWxfc2FsZXNfYW1vdW50fWAsXG4gICAgICAgIHRpdGxlOiBgJHtsb2NhdGlvbi5jaXR5fTogJCR7bG9jYXRpb24udG90YWxfc2FsZXNfYW1vdW50fWAsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYm91bmRzLmV4dGVuZChtYXJrZXIuZ2V0UG9zaXRpb24oKSk7XG4gICAgICB0aGlzLm1hcmtlcnMucHVzaChtYXJrZXIpO1xuXG4gICAgICAvLyBBZGQgYW4gaW5mbyB3aW5kb3dcbiAgICAgIGxldCBzdHJpbmdXaXRob3V0UXVvdGVzID0gdGhpcy5nZXRJbmZvV2luZG9EYXRhKGxvY2F0aW9uKTtcbiAgICAgIGNvbnN0IGluZm9XSW5kb3dEYXRhID0gdGhpcy5nZXRJbmZvV2luZG9EYXRhKGxvY2F0aW9uKTtcblxuICAgICAgY29uc3QgaW5mb1dpbmRvdyA9IG5ldyBnb29nbGUubWFwcy5JbmZvV2luZG93KHtcbiAgICAgICAgLy8gY29udGVudDogaW5mb1dJbmRvd0RhdGEsXG4gICAgICAgIGNvbnRlbnQ6IGA8ZGl2IHN0eWxlPVwiaGVpZ2h0OiAxMDAlOyB3aWR0aDogMTAwJTsgY29sb3I6IGJsYWNrOyBmb250LXNpemU6IDIwcHg7XCI+XG4gICAgICAgICR7aW5mb1dJbmRvd0RhdGF9XG4gICAgICA8L2Rpdj5gLFxuICAgICAgfSk7XG4gICAgICAvLyB7XG4gICAgICAvLyAgIGNvbnRlbnQ6IGA8ZGl2IHN0eWxlPVwiICBoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlO2NvbG9yOiBibGFjazsgZm9udC1zaXplOiAyMHB4O1wiPjxoND4ke1xuICAgICAgLy8gICAgIGxvY2F0aW9uLmNpdHlcbiAgICAgIC8vICAgfTwvaDQ+PHA+VG90YWwgU2FsZXM6ICQke2xvY2F0aW9uLnRvdGFsX3NhbGVzX2Ftb3VudC50b0ZpeGVkKFxuICAgICAgLy8gICAgIDJcbiAgICAgIC8vICAgKX08L3A+PC9kaXY+YCxcbiAgICAgIC8vIH1cblxuICAgICAgbWFya2VyLmFkZExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50SW5mb1dpbmRvdykge1xuICAgICAgICAgIHRoaXMuY3VycmVudEluZm9XaW5kb3cuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpbmZvV2luZG93Lm9wZW4odGhpcy5tYXAsIG1hcmtlcik7XG4gICAgICAgIHRoaXMuY3VycmVudEluZm9XaW5kb3cgPSBpbmZvV2luZG93O1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5tYXAuZml0Qm91bmRzKHRoaXMuYm91bmRzKTtcblxuXG4gIH1cblxuICBnZXRJbmZvV2luZG9EYXRhKGRhdGEpIHtcbiAgICBsZXQgdG9vbFRpcERhdGEgPSBgYDtcbiAgICB0aGlzLnRvb3RUaXBDb2x1bW4uZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBkYXRhW2VsZW1lbnQuZGF0YUZpZWxkXSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICB0b29sVGlwRGF0YSArPVxuICAgICAgICAgIGA8ZGl2IGNsYXNzPSdpbmxpbmUnPjxiPmAgK1xuICAgICAgICAgIGVsZW1lbnQuY2FwdGlvbiArXG4gICAgICAgICAgYDo8L2I+PC9kaXY+IGAgK1xuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZS5yb3VuZE9mZlRpbGxUd28oZGF0YVtlbGVtZW50LmRhdGFGaWVsZF0sIDIpICtcbiAgICAgICAgICBgPGJyIC8+YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRvb2xUaXBEYXRhICs9XG4gICAgICAgICAgYDxkaXYgY2xhc3M9J2lubGluZSc+PGI+YCArXG4gICAgICAgICAgZWxlbWVudC5jYXB0aW9uICtcbiAgICAgICAgICBgOjwvYj48L2Rpdj4gYCArXG4gICAgICAgICAgZGF0YVtlbGVtZW50LmRhdGFGaWVsZF0gK1xuICAgICAgICAgIGA8YnIgLz5gO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0b29sVGlwRGF0YTtcbiAgfVxuICAvLyBIZWF0IE1hcCBFbmQgLy9cblxuICAvL2hlYXQgb25seSBtYXAgc3RhcnQgLy9cblxuICBsb2FkR29vZ2xlSGVhdE9ubHlNYXBzKGRhdGEpOiB2b2lkIHtcbiAgICB0aGlzLmhlYXRtYXBEYXRhID0gW107XG4gICAgZGF0YS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICBsZXQgbGF0aXR1ZGUgPSBwYXJzZUZsb2F0KFxuICAgICAgICBlbGVtZW50W3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcubWFya2VyTGF0aXR1ZGVdXG4gICAgICApO1xuICAgICAgbGV0IGxvZ3RpdHVkZSA9IHBhcnNlRmxvYXQoXG4gICAgICAgIGVsZW1lbnRbdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXJrZXJMb25naXR1ZGVdXG4gICAgICApO1xuICAgICAgLy8gbGV0IHdlaWdodCA9IChjZWxsTm9kZS5wcm9wZXJ0aWVzWydXZWlnaHQnXSAhPSB1bmRlZmluZWQpID8gY2VsbE5vZGUucHJvcGVydGllc1snV2VpZ2h0J10gOiBcIk5BXCI7XG4gICAgICB0aGlzLmhlYXRtYXBEYXRhLnB1c2goe1xuICAgICAgICBsb2NhdGlvbjogbmV3IGdvb2dsZS5tYXBzLkxhdExuZyhsYXRpdHVkZSwgbG9ndGl0dWRlKVxuICAgICAgICAvLyB3ZWlnaHQ6IHBhcnNlRmxvYXQod2VpZ2h0KSxcblxuICAgICAgfSk7XG4gICAgICB0aGlzLmJvdW5kcy5leHRlbmQobmV3IGdvb2dsZS5tYXBzLkxhdExuZyhsYXRpdHVkZSwgbG9ndGl0dWRlKSk7XG4gICAgfSk7XG4gICAgY29uc3QgbWFwT3B0aW9ucyA9IHtcbiAgICAgIC8vIGNlbnRlcjoge1xuICAgICAgLy8gICBsYXQ6IHBhcnNlRmxvYXQodGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5jZW50ZXJMYXRpdHVkZSksXG4gICAgICAvLyAgIGxuZzogcGFyc2VGbG9hdCh0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNlbnRlckxvbmdpdHVkZSksXG4gICAgICAvLyB9LFxuICAgICAgLy8gem9vbTogcGFyc2VGbG9hdCh0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnpvb20pXG4gICAgICB6b29tOiB0aGlzLnpvb21WYWx1Rm9yQWxsXG4gICAgfTtcblxuXG5cblxuICAgIHRoaXMubWFwID0gbmV3IGdvb2dsZS5tYXBzLk1hcCh0aGlzLmdvb2dsTWFwLm5hdGl2ZUVsZW1lbnQsIG1hcE9wdGlvbnMpO1xuICAgIHRoaXMuZ29vZ2xNYXAubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmNoYXJ0SGVpZ2h0O1xuICAgIHRoaXMubWFwLmZpdEJvdW5kcyh0aGlzLmJvdW5kcyk7XG4gICAgdGhpcy5oZWF0bWFwID0gbmV3IGdvb2dsZS5tYXBzLnZpc3VhbGl6YXRpb24uSGVhdG1hcExheWVyKHtcbiAgICAgIGRhdGE6IHRoaXMuaGVhdG1hcERhdGEsXG4gICAgICBtYXA6IHRoaXMubWFwLFxuICAgIH0pO1xuXG4gIH1cblxuXG4gIC8vaGVhdCBvbmx5IG1hcCBlbmQgLy9cblxuICAvL2hlYXQgYW5kIE1hcmtlciAgbWFwIFN0YXJ0IC8vXG4gIGluaXRpYWxpemVIZWF0V2l0aE1hcmtlck1hcChkYXRhKSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXBcbiAgICB0aGlzLm1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAodGhpcy5nb29nbE1hcC5uYXRpdmVFbGVtZW50LCB7XG4gICAgICAvLyBjZW50ZXI6IHsgbGF0OiAzNy43NzQ5LCBsbmc6IC0xMjIuNDE5NCB9LFxuICAgICAgem9vbTogcGFyc2VGbG9hdChcbiAgICAgICAgdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy56b29tXG4gICAgICApLFxuICAgIH0pO1xuICAgIHRoaXMuZ29vZ2xNYXAubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmNoYXJ0SGVpZ2h0O1xuICAgIC8vIEluaXRpYWxpemUgaGVhdG1hcCBsYXllclxuICAgIHRoaXMuaGVhdG1hcERhdGEgPSBbXTtcbiAgICBkYXRhLmZvckVhY2goZWxlbWVudCA9PiB7XG5cbiAgICAgIGxldCBsYXRpdHVkZSA9IHBhcnNlRmxvYXQoXG4gICAgICAgIGVsZW1lbnRbdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXJrZXJMYXRpdHVkZV1cbiAgICAgICk7XG4gICAgICBsZXQgbG9ndGl0dWRlID0gcGFyc2VGbG9hdChcbiAgICAgICAgZWxlbWVudFt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxvbmdpdHVkZV1cbiAgICAgICk7XG4gICAgICB0aGlzLmhlYXRtYXBEYXRhLnB1c2goe1xuICAgICAgICBsb2NhdGlvbjogbmV3IGdvb2dsZS5tYXBzLkxhdExuZyhsYXRpdHVkZSwgbG9ndGl0dWRlKVxuICAgICAgfSk7XG4gICAgICB0aGlzLmJvdW5kcy5leHRlbmQobmV3IGdvb2dsZS5tYXBzLkxhdExuZyhsYXRpdHVkZSwgbG9ndGl0dWRlKSk7XG4gICAgfSk7XG4gICAgdGhpcy5oZWF0bWFwID0gbmV3IGdvb2dsZS5tYXBzLnZpc3VhbGl6YXRpb24uSGVhdG1hcExheWVyKHtcbiAgICAgIGRhdGE6IHRoaXMuaGVhdG1hcERhdGEsXG4gICAgICBtYXA6IHRoaXMubWFwLFxuICAgIH0pO1xuICAgIC8vIEluaXRpYWxpemUgbWFya2Vyc1xuICAgIHRoaXMubG9jYXRpb25zLmZvckVhY2goKGxvY2F0aW9uKSA9PiB7XG4gICAgICBjb25zdCBtYXJrZXIgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHtcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBsYXQ6IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICBsb2NhdGlvblt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxhdGl0dWRlXVxuICAgICAgICAgICksXG4gICAgICAgICAgbG5nOiBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgbG9jYXRpb25bdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXJrZXJMb25naXR1ZGVdXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgaWNvbjogdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5pY29uID8ge1xuICAgICAgICAgIHVybDogdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5pY29uLCAvLyBSZXBsYWNlIHdpdGggeW91ciBpY29uIHBhdGhcbiAgICAgICAgICBzY2FsZWRTaXplOiB7XG4gICAgICAgICAgICB3aWR0aDogMzIsXG4gICAgICAgICAgICBoZWlnaHQ6IDMyLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0gOiAnJyxcbiAgICAgICAgLy8gdG9vbHRpcFRleHQ6XG4gICAgICAgIG1hcDogdGhpcy5tYXAsXG4gICAgICAgIC8vIHRpdGxlOiBgJHtsb2NhdGlvbi5jaXR5fTogJCR7bG9jYXRpb24udG90YWxfc2FsZXNfYW1vdW50fWAsXG4gICAgICAgIHRpdGxlOiBgJHtsb2NhdGlvbi5jaXR5fTogJCR7bG9jYXRpb24udG90YWxfc2FsZXNfYW1vdW50fWAsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYm91bmRzLmV4dGVuZChtYXJrZXIuZ2V0UG9zaXRpb24oKSk7XG4gICAgICB0aGlzLm1hcmtlcnMucHVzaChtYXJrZXIpO1xuXG4gICAgICAvLyBBZGQgYW4gaW5mbyB3aW5kb3dcblxuICAgICAgLy8gQWRkIGFuIGluZm8gd2luZG93XG4gICAgICBjb25zdCBpbmZvV0luZG93RGF0YSA9IHRoaXMuZ2V0SW5mb1dpbmRvRGF0YShsb2NhdGlvbik7XG4gICAgICBjb25zdCBpbmZvV2luZG93ID0gbmV3IGdvb2dsZS5tYXBzLkluZm9XaW5kb3coe1xuICAgICAgICBjb250ZW50OiBgPGRpdiBzdHlsZT1cImhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7IGNvbG9yOiBibGFjazsgZm9udC1zaXplOiAyMHB4O1wiPlxuICAgICAgICAgICAgJHtpbmZvV0luZG93RGF0YX1cbiAgICAgICAgICA8L2Rpdj5gLFxuICAgICAgfSk7XG5cblxuICAgICAgbWFya2VyLmFkZExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50SW5mb1dpbmRvdykge1xuICAgICAgICAgIHRoaXMuY3VycmVudEluZm9XaW5kb3cuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpbmZvV2luZG93Lm9wZW4odGhpcy5tYXAsIG1hcmtlcik7XG4gICAgICAgIHRoaXMuY3VycmVudEluZm9XaW5kb3cgPSBpbmZvV2luZG93O1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5tYXAuZml0Qm91bmRzKHRoaXMuYm91bmRzKTtcblxuICAgIC8vIEFkZCBsaXN0ZW5lciBmb3Igem9vbSBjaGFuZ2VzXG4gICAgdGhpcy5tYXAuYWRkTGlzdGVuZXIoJ3pvb21fY2hhbmdlZCcsICgpID0+IHRoaXMuaGFuZGxlWm9vbUNoYW5nZSgpKTtcbiAgfVxuXG4gIGhhbmRsZVpvb21DaGFuZ2UoKSB7XG4gICAgY29uc3Qgem9vbUxldmVsID0gdGhpcy5tYXAuZ2V0Wm9vbSgpO1xuICAgIGlmICh6b29tTGV2ZWwgPCA1KSB7XG4gICAgICAvLyBTaG93IGhlYXRtYXAgYW5kIGhpZGUgbWFya2Vyc1xuICAgICAgdGhpcy5oZWF0bWFwLnNldE1hcCh0aGlzLm1hcCk7XG4gICAgICB0aGlzLm1hcmtlcnMuZm9yRWFjaCgobWFya2VyKSA9PiBtYXJrZXIuc2V0TWFwKG51bGwpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSGlkZSBoZWF0bWFwIGFuZCBzaG93IG1hcmtlcnNcbiAgICAgIHRoaXMuaGVhdG1hcC5zZXRNYXAobnVsbCk7XG4gICAgICB0aGlzLm1hcmtlcnMuZm9yRWFjaCgobWFya2VyKSA9PiBtYXJrZXIuc2V0TWFwKHRoaXMubWFwKSk7XG4gICAgfVxuICB9XG5cbiAgLy9oZWF0IGFuZCBNYXJrZXIgIG1hcCBFbmQgLy9cbiAgLy9CdWJibGUgQ2hhcnQgU3RhcnRcbiAgYWRkQnViYmxlTWFya2VycygpOiB2b2lkIHtcbiAgICB0aGlzLnByZXBhcmVCdWJibGVEYXRhKCk7XG4gICAgdGhpcy5sb2NhdGlvbnMuZm9yRWFjaCgobG9jYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IG1hcmtlciA9IG5ldyBnb29nbGUubWFwcy5NYXJrZXIoe1xuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIGxhdDogcGFyc2VGbG9hdChcbiAgICAgICAgICAgIGxvY2F0aW9uW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcubWFya2VyTGF0aXR1ZGVdXG4gICAgICAgICAgKSxcbiAgICAgICAgICBsbmc6IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICBsb2NhdGlvblt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxvbmdpdHVkZV1cbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBpY29uOiB7XG4gICAgICAgICAgcGF0aDogZ29vZ2xlLm1hcHMuU3ltYm9sUGF0aC5DSVJDTEUsXG4gICAgICAgICAgc2NhbGU6IE1hdGgucm91bmQobG9jYXRpb24uc2FsZXNfcGVyY2VudGFnZSksIC8vIEFkanVzdCBidWJibGUgc2l6ZVxuICAgICAgICAgIGZpbGxDb2xvcjogdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5idWJibGVDb2xvcixcbiAgICAgICAgICBmaWxsT3BhY2l0eTogMC42LFxuICAgICAgICAgIHN0cm9rZVdlaWdodDogMCxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdG9vbHRpcFRleHQ6XG4gICAgICAgIG1hcDogdGhpcy5tYXAsXG4gICAgICAgIC8vIHRpdGxlOiBgJHtsb2NhdGlvbi5jaXR5fTogJCR7bG9jYXRpb24udG90YWxfc2FsZXNfYW1vdW50fWAsXG4gICAgICAgIHRpdGxlOiBgJHtsb2NhdGlvbi5jaXR5fTogJCR7bG9jYXRpb25bdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5hZ3J1bWVudFZhbHVlXVxuICAgICAgICAgIH1gLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmJvdW5kcy5leHRlbmQobWFya2VyLmdldFBvc2l0aW9uKCkpO1xuICAgICAgdGhpcy5tYXJrZXJzLnB1c2gobWFya2VyKTtcblxuICAgICAgLy8gQWRkIGFuIGluZm8gd2luZG93XG4gICAgICBsZXQgc3RyaW5nV2l0aG91dFF1b3RlcyA9IHRoaXMuZ2V0SW5mb1dpbmRvRGF0YShsb2NhdGlvbik7XG4gICAgICBjb25zdCBpbmZvV0luZG93RGF0YSA9IHRoaXMuZ2V0SW5mb1dpbmRvRGF0YShsb2NhdGlvbik7XG5cbiAgICAgIGNvbnN0IGluZm9XaW5kb3cgPSBuZXcgZ29vZ2xlLm1hcHMuSW5mb1dpbmRvdyh7XG4gICAgICAgIC8vIGNvbnRlbnQ6IGluZm9XSW5kb3dEYXRhLFxuICAgICAgICBjb250ZW50OiBgPGRpdiBzdHlsZT1cImhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7IGNvbG9yOiBibGFjazsgZm9udC1zaXplOiAyMHB4O1wiPlxuICAgICAgICAgJHtpbmZvV0luZG93RGF0YX1cbiAgICAgICA8L2Rpdj5gLFxuICAgICAgfSk7XG5cbiAgICAgIG1hcmtlci5hZGRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEluZm9XaW5kb3cpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRJbmZvV2luZG93LmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaW5mb1dpbmRvdy5vcGVuKHRoaXMubWFwLCBtYXJrZXIpO1xuICAgICAgICB0aGlzLmN1cnJlbnRJbmZvV2luZG93ID0gaW5mb1dpbmRvdztcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMubWFwLmZpdEJvdW5kcyh0aGlzLmJvdW5kcyk7XG4gIH1cblxuICBwcmVwYXJlQnViYmxlRGF0YSgpIHtcbiAgICAvLyBTdGVwIDE6IEZpbmQgbWluIGFuZCBtYXggdG90YWxfc2FsZXNfYW1vdW50XG4gICAgY29uc3QgbWluU2FsZXMgPSBNYXRoLm1pbihcbiAgICAgIC4uLnRoaXMubG9jYXRpb25zLm1hcChcbiAgICAgICAgKGQpID0+IGRbdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5hZ3J1bWVudFZhbHVlXVxuICAgICAgKVxuICAgICk7XG4gICAgY29uc3QgbWF4U2FsZXMgPSBNYXRoLm1heChcbiAgICAgIC4uLnRoaXMubG9jYXRpb25zLm1hcChcbiAgICAgICAgKGQpID0+IGRbdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5hZ3J1bWVudFZhbHVlXVxuICAgICAgKVxuICAgICk7XG5cbiAgICAvLyBTdGVwIDI6IERlZmluZSBtaW4gYW5kIG1heCBwZXJjZW50YWdlIHZhbHVlc1xuICAgIGNvbnN0IG1pblBlcmNlbnRhZ2UgPVxuICAgICAgdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5idWJibGVNaW5pbXVtU2l6ZTtcbiAgICBjb25zdCBtYXhQZXJjZW50YWdlID1cbiAgICAgIHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuYnViYmxlTWF4aW11bVNpemU7XG5cbiAgICAvLyBTdGVwIDM6IE5vcm1hbGl6ZSBmdW5jdGlvblxuICAgIGNvbnN0IG5vcm1hbGl6ZSA9ICh2YWx1ZSwgbWluLCBtYXgpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICgodmFsdWUgLSBtaW4pIC8gKG1heCAtIG1pbikpICogKG1heFBlcmNlbnRhZ2UgLSBtaW5QZXJjZW50YWdlKSArXG4gICAgICAgIG1pblBlcmNlbnRhZ2VcbiAgICAgICk7XG4gICAgfTtcblxuICAgIC8vIFN0ZXAgNDogQXNzaWduIGNhbGN1bGF0ZWQgcGVyY2VudGFnZSB0byBlYWNoIG9iamVjdFxuICAgIHRoaXMubG9jYXRpb25zLmZvckVhY2goKGQpID0+IHtcbiAgICAgIGQuc2FsZXNfcGVyY2VudGFnZSA9IE1hdGgubWluKFxuICAgICAgICBNYXRoLm1heChcbiAgICAgICAgICBub3JtYWxpemUoXG4gICAgICAgICAgICBkW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuYWdydW1lbnRWYWx1ZV0sXG4gICAgICAgICAgICBtaW5TYWxlcyxcbiAgICAgICAgICAgIG1heFNhbGVzXG4gICAgICAgICAgKSxcbiAgICAgICAgICBtaW5QZXJjZW50YWdlXG4gICAgICAgICksXG4gICAgICAgIG1heFBlcmNlbnRhZ2VcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbiAgLy9CdWJibGUgQ2hhcnQgRW5kXG5cbiAgLy8gY2hvcm9wbGV0aE1hcCBzdGFydCAvL1xuXG4gIGdldENvbG9yKGNudDogbnVtYmVyLCBzdGFydENvbG9yOiBzdHJpbmcsIGVuZENvbG9yOiBzdHJpbmcsIG1pbkNvdW50OiBudW1iZXIsIG1heENvdW50OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmIChjbnQgPT09IHVuZGVmaW5lZCB8fCBjbnQgPT09IG51bGwgfHwgbWF4Q291bnQgPT09IG1pbkNvdW50KSB7XG4gICAgICByZXR1cm4gJyNjY2NjY2MnO1xuICAgIH1cblxuICAgIC8vIGNvbnN0IHJhdGlvID0gTWF0aC5taW4oXG4gICAgLy8gICBNYXRoLm1heCgoY250IC0gbWluQ291bnQpIC8gKG1heENvdW50IC0gbWluQ291bnQpLCAwKSxcbiAgICAvLyAgIDFcbiAgICAvLyApO1xuXG4gICAgY29uc3QgcmF3UmF0aW8gPVxuICAgICAgKGNudCAtIG1pbkNvdW50KSAvIChtYXhDb3VudCAtIG1pbkNvdW50KTtcblxuICAgIC8vIGdhbW1hIDwgMSBleGFnZ2VyYXRlcyBkaWZmZXJlbmNlc1xuICAgIGNvbnN0IGdhbW1hID0gMC4yOyAvLyB0cnkgMC40IOKAkyAwLjdcbiAgICBjb25zdCByYXRpbyA9IE1hdGgucG93KFxuICAgICAgTWF0aC5taW4oTWF0aC5tYXgocmF3UmF0aW8sIDApLCAxKSxcbiAgICAgIGdhbW1hXG4gICAgKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5oZXhUb1JnYihzdGFydENvbG9yKTtcbiAgICBjb25zdCBlbmQgPSB0aGlzLmhleFRvUmdiKGVuZENvbG9yKTtcblxuICAgIGNvbnN0IHIgPSB0aGlzLmxlcnAoc3RhcnQuciwgZW5kLnIsIHJhdGlvKTtcbiAgICBjb25zdCBnID0gdGhpcy5sZXJwKHN0YXJ0LmcsIGVuZC5nLCByYXRpbyk7XG4gICAgY29uc3QgYiA9IHRoaXMubGVycChzdGFydC5iLCBlbmQuYiwgcmF0aW8pO1xuXG5cbiAgICByZXR1cm4gYHJnYigke3J9LCAke2d9LCAke2J9KWA7XG4gIH1cblxuICBsZXJwKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyLCByYXRpbzogbnVtYmVyKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoc3RhcnQgKyAoZW5kIC0gc3RhcnQpICogcmF0aW8pO1xuICB9XG4gIGhleFRvUmdiKGhleDogc3RyaW5nKSB7XG4gICAgY29uc3QgY2xlYW5IZXggPSBoZXgucmVwbGFjZSgnIycsICcnKTtcbiAgICBjb25zdCBiaWdpbnQgPSBwYXJzZUludChjbGVhbkhleCwgMTYpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHI6IChiaWdpbnQgPj4gMTYpICYgMjU1LFxuICAgICAgZzogKGJpZ2ludCA+PiA4KSAmIDI1NSxcbiAgICAgIGI6IGJpZ2ludCAmIDI1NVxuICAgIH07XG4gIH1cblxuXG4gIGluaXRDaG9yb3BsZXRoTWFwKGNoYXJ0Q29uZmlnOiBhbnksIHRvb3RUaXBDb2x1bW46IGFueVtdKTogdm9pZCB7XG5cbiAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTsgXG5cbiAgICB0aGlzLm1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAoXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImdvb2dsZW1hcFwiKSBhcyBIVE1MRWxlbWVudCxcbiAgICAgIHtcbiAgICAgICAgY2VudGVyOiB7XG4gICAgICAgICAgbGF0OiBwYXJzZUZsb2F0KGNoYXJ0Q29uZmlnLmNlbnRlckxhdCksXG4gICAgICAgICAgbG5nOiBwYXJzZUZsb2F0KGNoYXJ0Q29uZmlnLmNlbnRlckxuZylcbiAgICAgICAgfSxcbiAgICAgICAgem9vbTogcGFyc2VJbnQoY2hhcnRDb25maWcuem9vbSlcbiAgICAgIH1cbiAgICApO1xuXG4gICAgZ29vZ2xlLm1hcHMuZXZlbnQuYWRkTGlzdGVuZXJPbmNlKFxuICAgICAgdGhpcy5tYXAuZGF0YSxcbiAgICAgICdhZGRmZWF0dXJlJyxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5hcHBseUNob3JvcGxldGhTdHlsZXMoY2hhcnRDb25maWcpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hcC5kYXRhLmxvYWRHZW9Kc29uKGNoYXJ0Q29uZmlnLmdqc29uRmlsZVBhdGgpO1xuXG4gICAgLy8gdGhpcy5tYXAgPSBuZXcgZ29vZ2xlLm1hcHMuTWFwKFxuICAgIC8vICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJnb29nbGVtYXBcIikgYXMgSFRNTEVsZW1lbnQsXG4gICAgLy8gICB7XG4gICAgLy8gICAgIGNlbnRlcjogeyBsYXQ6IHBhcnNlRmxvYXQoY2hhcnRDb25maWcuY2VudGVyTGF0KSwgbG5nOiBwYXJzZUZsb2F0KGNoYXJ0Q29uZmlnLmNlbnRlckxuZykgfSxcbiAgICAvLyAgICAgem9vbTogcGFyc2VJbnQoY2hhcnRDb25maWcuem9vbSlcbiAgICAvLyAgIH1cbiAgICAvLyApO1xuXG5cbiAgICAvLyB0aGlzLm1hcC5kYXRhLmxvYWRHZW9Kc29uKGNoYXJ0Q29uZmlnLmdqc29uRmlsZVBhdGgpO1xuICAgIC8vIHRoaXMubWFwLmRhdGEuc2V0U3R5bGUoZmVhdHVyZSA9PiB0aGlzLmdldEZlYXR1cmVTdHlsZShmZWF0dXJlLCBjaGFydENvbmZpZywgdGhpcy5taW5DaG9yb3BsZXRoTWFwQ250LCB0aGlzLm1heENob3JvcGxldGhNYXBDbnQpKTtcblxuICAgIGNvbnN0IGluZm9XaW5kb3cgPSBuZXcgZ29vZ2xlLm1hcHMuSW5mb1dpbmRvdygpO1xuXG4gICAgdGhpcy5tYXAuZGF0YS5hZGRMaXN0ZW5lcignbW91c2VvdmVyJywgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGRpc3RyaWN0ID0gZXZlbnQuZmVhdHVyZS5nZXRQcm9wZXJ0eSgnZCcpO1xuICAgICAgY29uc3Qga2V5ID0gZGlzdHJpY3Q/LnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgIGNvbnN0IHJvdyA9IHRoaXMuY2hvcm9wbGV0aFRvb2x0aXBEYXRhU291cmNlLmdldChrZXkpO1xuXG4gICAgICBpbmZvV2luZG93LnNldENvbnRlbnQoXG4gICAgICAgIHRoaXMuYnVpbGRJbmZvV2luZG93Q29udGVudChkaXN0cmljdCwgcm93LCB0b290VGlwQ29sdW1uKVxuICAgICAgKTtcblxuICAgICAgaW5mb1dpbmRvdy5zZXRQb3NpdGlvbihldmVudC5sYXRMbmcpO1xuICAgICAgaW5mb1dpbmRvdy5vcGVuKHRoaXMubWFwKTtcbiAgICB9KTtcblxuICAgIHRoaXMubWFwLmRhdGEuYWRkTGlzdGVuZXIoJ21vdXNlb3V0JywgKCkgPT4gaW5mb1dpbmRvdy5jbG9zZSgpKTtcbiAgfVxuXG4gIGFwcGx5Q2hvcm9wbGV0aFN0eWxlcyhjaGFydENvbmZpZzogYW55KSB7XG4gICAgdGhpcy5tYXAuZGF0YS5zZXRTdHlsZShmZWF0dXJlID0+XG4gICAgICB0aGlzLmdldEZlYXR1cmVTdHlsZShmZWF0dXJlLCBjaGFydENvbmZpZywgdGhpcy5taW5DaG9yb3BsZXRoTWFwQ250LCB0aGlzLm1heENob3JvcGxldGhNYXBDbnQpXG4gICAgKTtcblxuICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgfVxuXG5cblxuICBidWlsZEluZm9XaW5kb3dDb250ZW50KGRpc3RyaWN0OiBzdHJpbmcsIHJvdzogYW55LCB0b290VGlwQ29sdW1uOiBhbnlbXSk6IHN0cmluZyB7XG5cbiAgICBjb25zdCByb3dzID0gdG9vdFRpcENvbHVtbi5tYXAoYyA9PiBgXG4gICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47XCI+XG4gICAgICA8c3Bhbj4ke2MuY2FwdGlvbn08L3NwYW4+XG4gICAgICA8c3Ryb25nPiR7cm93Py5bYy5kYXRhRmllbGRdID8/ICdObyBkYXRhJ308L3N0cm9uZz5cbiAgICA8L2Rpdj5cbiAgYCkuam9pbignJyk7XG5cbiAgICByZXR1cm4gYFxuICAgIDxkaXYgc3R5bGU9XCJcbiAgICAgIGNvbG9yOiMwMDA7XG4gICAgICBiYWNrZ3JvdW5kOiNmZmY7XG4gICAgICBwYWRkaW5nOjhweCAxMnB4O1xuICAgICAgZm9udC1zaXplOjEzcHg7XG4gICAgICBtaW4td2lkdGg6MTUwcHg7XG4gICAgXCI+XG4gICAgICA8ZGl2IHN0eWxlPVwiZm9udC13ZWlnaHQ6NjAwOyBtYXJnaW4tYm90dG9tOjZweDtcIj5cbiAgICAgICAgJHtkaXN0cmljdH0gOiBcbiAgICAgIDwvZGl2PlxuICAgICAgJHtyb3dzfVxuICAgIDwvZGl2PlxuICBgO1xuICB9XG5cblxuICB1cGRhdGVDaG9yb3BsZXRoTWFwRGF0YSh5ZWFyOiBzdHJpbmcsIGNoYXJ0Q29uZmlnOiBhbnkpIHtcbiAgICB0aGlzLmNob3JvcGxldGhNYXBEYXRhU291cmNlLmNsZWFyKCk7XG4gICAgdGhpcy5jaG9yb3BsZXRoVG9vbHRpcERhdGFTb3VyY2UuY2xlYXIoKTtcbiAgICBsZXQgbWluQ2hvcm9wbGV0aE1hcENudCA9IEluZmluaXR5O1xuICAgIGxldCBtYXhDaG9yb3BsZXRoTWFwQ250ID0gLUluZmluaXR5O1xuICAgIFxuXG4gICAgY29uc3QgdmFsdWVGaWVsZCA9IGNoYXJ0Q29uZmlnLmNoYXJ0X2NvbmZpZy5maW5kKFxuICAgICAgYyA9PiBjLmRpc3BsYXlGb3IgPT09ICdtYXAnXG4gICAgKT8uZGF0YUZpZWxkO1xuXG4gICAgdGhpcy5jaG9yb3BsZXRoTWFwRGF0YVxuICAgICAgLmZpbHRlcihkID0+IGRbY2hhcnRDb25maWcuc2xpZGVyVmFsdWVGaWVsZF0gPT09IHllYXIpXG4gICAgICAuZm9yRWFjaChkID0+IHtcbiAgICAgICAgY29uc3Qga2V5ID0gZC5kaXN0cmljdC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICB0aGlzLmNob3JvcGxldGhNYXBEYXRhU291cmNlLnNldChrZXksIGRbdmFsdWVGaWVsZF0pO1xuICAgICAgICB0aGlzLmNob3JvcGxldGhUb29sdGlwRGF0YVNvdXJjZS5zZXQoa2V5LCBkKTtcblxuICAgICAgICBtaW5DaG9yb3BsZXRoTWFwQ250ID0gTWF0aC5taW4obWluQ2hvcm9wbGV0aE1hcENudCwgZFt2YWx1ZUZpZWxkXSk7XG4gICAgICAgIG1heENob3JvcGxldGhNYXBDbnQgPSBNYXRoLm1heChtYXhDaG9yb3BsZXRoTWFwQ250LCBkW3ZhbHVlRmllbGRdKTtcbiAgICAgIH0pO1xuXG5cbiAgICBpZiAodGhpcy5tYXApIHtcbiAgICAgIGlmICh0aGlzLm1hcCkge1xuICAgICAgICB0aGlzLm1hcC5kYXRhLmZvckVhY2goZmVhdHVyZSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3R5bGUgPSB0aGlzLmdldEZlYXR1cmVTdHlsZShmZWF0dXJlLCBjaGFydENvbmZpZywgdGhpcy5taW5DaG9yb3BsZXRoTWFwQ250LCB0aGlzLm1heENob3JvcGxldGhNYXBDbnQpO1xuXG4gICAgICAgICAgdGhpcy5tYXAuZGF0YS5vdmVycmlkZVN0eWxlKGZlYXR1cmUsIHN0eWxlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICB9XG4gIH1cblxuICBnZXRGZWF0dXJlU3R5bGUoZmVhdHVyZTogYW55LCBjaGFydENvbmZpZzogYW55LCBtaW5Db3VudCwgbWF4Q291bnQpIHtcbiAgICBjb25zdCBkaXN0cmljdE5hbWUgPSBmZWF0dXJlLmdldFByb3BlcnR5KCdkJyk/LnRvVXBwZXJDYXNlKCk7XG4gICAgY29uc3QgY250ID0gdGhpcy5jaG9yb3BsZXRoTWFwRGF0YVNvdXJjZS5nZXQoZGlzdHJpY3ROYW1lKTtcbiAgICByZXR1cm4ge1xuICAgICAgZmlsbENvbG9yOiB0aGlzLmdldENvbG9yKGNudCwgY2hhcnRDb25maWcuY29sb3JPbmUsIGNoYXJ0Q29uZmlnLmNvbG9yVHdvLCBtaW5Db3VudCwgbWF4Q291bnQpLFxuICAgICAgc3Ryb2tlQ29sb3I6ICcjNTU1JyxcbiAgICAgIHN0cm9rZVdlaWdodDogMSxcbiAgICAgIGZpbGxPcGFjaXR5OiAwLjc1XG4gICAgfTtcbiAgfVxuXG4gIC8vIGNob3JvcGxldGhNYXAgc3RhcnQgLy9cblxuXG5cblxuICB0b2dnbGVQbGF5KCkge1xuICAgIGlmICh0aGlzLmlzUGxheWluZykge1xuICAgICAgdGhpcy5wYXVzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBsYXkoKTtcbiAgICB9XG4gIH1cblxuICBwbGF5KCkge1xuICAgIHRoaXMuaXNQbGF5aW5nID0gdHJ1ZTtcbiAgICB0aGlzLnBsYXlJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNob3JvcGxldGhNYXBDdXJyZW50SW5kZXggPCB0aGlzLmFsbFNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICB0aGlzLmNob3JvcGxldGhNYXBDdXJyZW50SW5kZXgrKztcbiAgICAgICAgdGhpcy51cGRhdGVZZWFyQnlJbmRleCh0aGlzLmNob3JvcGxldGhNYXBDdXJyZW50SW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuY2hvcm9wbGV0aE1hcHNsaWRlU3BlZWQpO1xuXG4gIH1cblxuICBwYXVzZSgpIHtcbiAgICB0aGlzLmlzUGxheWluZyA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnBsYXlJbnRlcnZhbCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnBsYXlJbnRlcnZhbCk7XG4gICAgICB0aGlzLnBsYXlJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmVzdGFydCgpIHtcbiAgICB0aGlzLnBhdXNlKCk7XG4gICAgdGhpcy5jaG9yb3BsZXRoTWFwQ3VycmVudEluZGV4ID0gMDtcbiAgICB0aGlzLnVwZGF0ZVllYXJCeUluZGV4KHRoaXMuY2hvcm9wbGV0aE1hcEN1cnJlbnRJbmRleCk7XG4gIH1cblxuICBvblllYXJDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucGF1c2UoKTsgLy8gc3RvcCBhdXRvcGxheSB3aGVuIHVzZXIgbW92ZXMgc2xpZGVyXG4gICAgdGhpcy5jaG9yb3BsZXRoTWFwQ3VycmVudEluZGV4ID0gK2V2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZVllYXJCeUluZGV4KHRoaXMuY2hvcm9wbGV0aE1hcEN1cnJlbnRJbmRleCk7XG4gIH1cblxuICBzZXRZZWFyQnlJbmRleChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5wYXVzZSgpO1xuICAgIHRoaXMuY2hvcm9wbGV0aE1hcEN1cnJlbnRJbmRleCA9IGluZGV4O1xuICAgIHRoaXMudXBkYXRlWWVhckJ5SW5kZXgoaW5kZXgpO1xuICB9XG5cbiAgdXBkYXRlWWVhckJ5SW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlID0gdGhpcy5hbGxTZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWVzW2luZGV4XTtcbiAgICB0aGlzLnVwZGF0ZUNob3JvcGxldGhNYXBEYXRhKHRoaXMuc2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlLCB0aGlzLmNob3JvcGxldGhNYXBDaGFydENvbmZpZyk7XG4gIH1cblxuXG4gIC8vIHNldFllYXJCeUluZGV4KGluZGV4OiBudW1iZXIpIHtcbiAgLy8gICB0aGlzLnNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZSA9IHRoaXMuYWxsU2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlc1tpbmRleF07XG4gIC8vICAgdGhpcy51cGRhdGVDaG9yb3BsZXRoTWFwRGF0YSh0aGlzLnNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZSwgdGhpcy5jaG9yb3BsZXRoTWFwQ2hhcnRDb25maWcpO1xuICAvLyB9XG5cbiAgLy8gb25ZZWFyQ2hhbmdlKGV2ZW50OiBFdmVudCkge1xuICAvLyAgIGNvbnN0IGluZGV4ID0gKyhldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gIC8vICAgdGhpcy5zZXRZZWFyQnlJbmRleChpbmRleCk7XG4gIC8vIH1cblxuXG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJteC0yIGJnLWdyYXktODAwXCI+XG4gIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSB3LWZ1bGxcIj5cblxuXG4gICAgPGRpdiBjbGFzcz1cImFic29sdXRlIGxlZnQtNCBib3R0b20tNiB0b3AtWzYwcHhdIHotWzk5OTk5OV0gcG9pbnRlci1ldmVudHMtbm9uZSBmbG90aW5nLXNpZGUtYmFyXCIgKm5nSWY9XCIhaXNMb2FkZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBoLTgwIHB4LTQgcHktMyByb3VuZGVkLXhsIHNoYWRvdy1sZyBiYWNrZHJvcC1ibHVyLW1kIGJnLWJsYWNrLzYwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LTQgaC1mdWxsIHJvdW5kZWQtZnVsbCBzaGFkb3cteGxcIlxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cIidsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCcgKyBjaGFydENvbmZpZy5jb2xvck9uZSArICcsJyArIGNoYXJ0Q29uZmlnLmNvbG9yVHdvICsgJyknXCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cblxuICAgIFxuXG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgdG9wLVsyMDBweF0gbGVmdC00IGJvdHRvbS02IHotNDAgZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctNCBoLWZ1bGwgcm91bmRlZC1mdWxsIHNoYWRvdy1sZ1wiXG4gICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCInbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCcgKyBjaGFydENvbmZpZy5jb2xvck9uZSArICcsJyArIGNoYXJ0Q29uZmlnLmNvbG9yVHdvICsgJyknXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGp1c3RpZnktYmV0d2VlbiBoLWZ1bGwgdGV4dC14cyB0ZXh0LXdoaXRlXCI+XG4gICAgICAgICAgPHNwYW4+SGlnaDwvc3Bhbj5cbiAgICAgICAgICA8c3Bhbj5Mb3c8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuXG5cbiAgICA8ZGl2IGlkPVwicmVnaW9uc19kaXZcIiAjZ29vZ2xNYXAgc3R5bGU9XCJ3aWR0aDogMTAwJVwiPjwvZGl2PlxuICAgIDxkaXYgaWQ9XCJnb29nbGVtYXBcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiIFtzdHlsZS5oZWlnaHRdPVwiY2hhcnRIZWlnaHRcIj48L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkZXJcIiBjbGFzcz1cImFic29sdXRlIGluc2V0LTAgei01MCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy1ibGFjay80MCBiYWNrZHJvcC1ibHVyLXNtXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ2VvLWNoYXJ0LWxvYWRlclwiPjwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJteC0yIHBiLTJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCIgbXgtYXV0byB3LWZ1bGwgbXQtM1wiICpuZ0lmPVwiaXNSYW5nZVNsaWRlclZpc2libGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBtYi0yXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInRleHQtd2hpdGUgcHgtMyBweS0yIHJvdW5kZWQgYmctZ3JheS04MDAgaG92ZXI6YmctZ3JheS03MDBcIiAoY2xpY2spPVwidG9nZ2xlUGxheSgpXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhXCIgW25nQ2xhc3NdPVwiaXNQbGF5aW5nID8gJ2ZhLXBhdXNlJyA6ICdmYS1wbGF5J1wiPjwvaT5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBzcGFjZS14LTIgdGV4dC1zbSBmb250LXNlbWlib2xkXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB5ZWFyIG9mIGFsbFNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZSBweC0yIHB5LTEgcm91bmRlZC1tZCB0cmFuc2l0aW9uXCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2JnLWJsYWNrIHRleHQtd2hpdGUgc2hhZG93JzogeWVhciA9PT0gc2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlLFxuICAgICAgICAgICAgJ3RleHQtZ3JheS0zMDAgaG92ZXI6dGV4dC13aGl0ZSc6IHllYXIgIT09IHNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZVxuICAgICAgICAgIH1cIiAoY2xpY2spPVwic2V0WWVhckJ5SW5kZXgoaSlcIj5cbiAgICAgICAgICAgICAgICB7eyB5ZWFyIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ0ZXh0LXdoaXRlIHB4LTMgcHktMiByb3VuZGVkIGJnLWdyYXktODAwIGhvdmVyOmJnLWdyYXktNzAwXCIgKGNsaWNrKT1cInJlc3RhcnQoKVwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1yZWZyZXNoXCI+PC9pPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIGNsYXNzPVwidy1mdWxsIGgtMiByb3VuZGVkLWxnIGFwcGVhcmFuY2Utbm9uZSBjdXJzb3ItcG9pbnRlclxuICAgICAgICAgICBiZy1ncmFkaWVudC10by1yIGZyb20tZ3JlZW4tNDAwIHZpYS15ZWxsb3ctNDAwIHRvLXJlZC01MDBcIiBbbWluXT1cIjBcIlxuICAgICAgICAgIFttYXhdPVwiYWxsU2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlcy5sZW5ndGggLSAxXCIgW3ZhbHVlXT1cImNob3JvcGxldGhNYXBDdXJyZW50SW5kZXhcIlxuICAgICAgICAgIChpbnB1dCk9XCJvblllYXJDaGFuZ2UoJGV2ZW50KVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=
@@ -4257,10 +4257,10 @@ class GammaGeoChartComponent {
4257
4257
  }
4258
4258
  }
4259
4259
  GammaGeoChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GammaGeoChartComponent, deps: [{ token: CommonService }], target: i0.ɵɵFactoryTarget.Component });
4260
- GammaGeoChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: GammaGeoChartComponent, selector: "app-gamma-geo-chart", 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 <div class=\"relative w-full\">\n\n\n <div class=\"absolute left-4 top-[60px] bottom-6 z-[9999] pointer-events-none\" *ngIf=\"!isLoader\">\n <div class=\"flex items-center h-80 px-4 py-3 rounded-xl shadow-lg backdrop-blur-md bg-black/60\">\n <div class=\"w-4 h-full rounded-full shadow-xl\"\n [style.background]=\"'linear-gradient(to bottom,' + chartConfig.colorOne + ',' + chartConfig.colorTwo + ')'\">\n </div>\n\n <!-- <div class=\"flex flex-col justify-between h-80 ml-2 text-xs text-white\">\n <span>High</span>\n <span>Low</span>\n </div> -->\n </div>\n </div>\n\n\n \n\n <!-- <div class=\"absolute top-[200px] left-4 bottom-6 z-40 flex items-center\">\n <div class=\"flex items-center space-x-2\">\n <div class=\"w-4 h-full rounded-full shadow-lg\"\n [style.background]=\"'linear-gradient(to right,' + chartConfig.colorOne + ',' + chartConfig.colorTwo + ')'\"></div>\n <div class=\"flex flex-col justify-between h-full text-xs text-white\">\n <span>High</span>\n <span>Low</span>\n </div>\n </div>\n </div> -->\n\n\n <div id=\"regions_div\" #googlMap style=\"width: 100%\"></div>\n <div id=\"googlemap\" style=\"width: 100%;\" [style.height]=\"chartHeight\"></div>\n <div *ngIf=\"isLoader\" class=\"absolute inset-0 z-50 flex items-center justify-center bg-black/40 backdrop-blur-sm\">\n <div class=\"geo-chart-loader\"></div>\n </div>\n <div class=\"mx-2 pb-2\">\n <div class=\" mx-auto w-full mt-3\" *ngIf=\"isRangeSliderVisible\">\n <div class=\"flex items-center justify-between mb-2\">\n <button class=\"text-white px-3 py-2 rounded bg-gray-800 hover:bg-gray-700\" (click)=\"togglePlay()\">\n <i class=\"fa\" [ngClass]=\"isPlaying ? 'fa-pause' : 'fa-play'\"></i>\n </button>\n <div class=\"flex space-x-2 text-sm font-semibold\">\n <ng-container *ngFor=\"let year of allSelectedRangeSliderValues; let i = index\">\n <span class=\"cursor-pointer select-none px-2 py-1 rounded-md transition\" [ngClass]=\"{\n 'bg-black text-white shadow': year === selectedRangeSliderValue,\n 'text-gray-300 hover:text-white': year !== selectedRangeSliderValue\n }\" (click)=\"setYearByIndex(i)\">\n {{ year }}\n </span>\n </ng-container>\n </div>\n <button class=\"text-white px-3 py-2 rounded bg-gray-800 hover:bg-gray-700\" (click)=\"restart()\">\n <i class=\"fa fa-refresh\"></i>\n </button>\n </div>\n <input type=\"range\" class=\"w-full h-2 rounded-lg appearance-none cursor-pointer\n bg-gradient-to-r from-green-400 via-yellow-400 to-red-500\" [min]=\"0\"\n [max]=\"allSelectedRangeSliderValues.length - 1\" [value]=\"choroplethMapCurrentIndex\"\n (input)=\"onYearChange($event)\" />\n </div>\n </div>\n </div>\n</div>", styles: [".geo-chart-loader{width:64px;height:64px;border:6px solid rgba(255,255,255,.2);border-top-color:#4ade80;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "directive", type: i4$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
4260
+ GammaGeoChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: GammaGeoChartComponent, selector: "app-gamma-geo-chart", 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 <div class=\"relative w-full\">\n\n\n <div class=\"absolute left-4 bottom-6 top-[60px] z-[999999] pointer-events-none floting-side-bar\" *ngIf=\"!isLoader\">\n <div class=\"flex items-center h-80 px-4 py-3 rounded-xl shadow-lg backdrop-blur-md bg-black/60\">\n <div class=\"w-4 h-full rounded-full shadow-xl\"\n [style.background]=\"'linear-gradient(to bottom,' + chartConfig.colorOne + ',' + chartConfig.colorTwo + ')'\">\n </div>\n </div>\n </div>\n\n\n \n\n <!-- <div class=\"absolute top-[200px] left-4 bottom-6 z-40 flex items-center\">\n <div class=\"flex items-center space-x-2\">\n <div class=\"w-4 h-full rounded-full shadow-lg\"\n [style.background]=\"'linear-gradient(to right,' + chartConfig.colorOne + ',' + chartConfig.colorTwo + ')'\"></div>\n <div class=\"flex flex-col justify-between h-full text-xs text-white\">\n <span>High</span>\n <span>Low</span>\n </div>\n </div>\n </div> -->\n\n\n <div id=\"regions_div\" #googlMap style=\"width: 100%\"></div>\n <div id=\"googlemap\" style=\"width: 100%;\" [style.height]=\"chartHeight\"></div>\n <div *ngIf=\"isLoader\" class=\"absolute inset-0 z-50 flex items-center justify-center bg-black/40 backdrop-blur-sm\">\n <div class=\"geo-chart-loader\"></div>\n </div>\n <div class=\"mx-2 pb-2\">\n <div class=\" mx-auto w-full mt-3\" *ngIf=\"isRangeSliderVisible\">\n <div class=\"flex items-center justify-between mb-2\">\n <button class=\"text-white px-3 py-2 rounded bg-gray-800 hover:bg-gray-700\" (click)=\"togglePlay()\">\n <i class=\"fa\" [ngClass]=\"isPlaying ? 'fa-pause' : 'fa-play'\"></i>\n </button>\n <div class=\"flex space-x-2 text-sm font-semibold\">\n <ng-container *ngFor=\"let year of allSelectedRangeSliderValues; let i = index\">\n <span class=\"cursor-pointer select-none px-2 py-1 rounded-md transition\" [ngClass]=\"{\n 'bg-black text-white shadow': year === selectedRangeSliderValue,\n 'text-gray-300 hover:text-white': year !== selectedRangeSliderValue\n }\" (click)=\"setYearByIndex(i)\">\n {{ year }}\n </span>\n </ng-container>\n </div>\n <button class=\"text-white px-3 py-2 rounded bg-gray-800 hover:bg-gray-700\" (click)=\"restart()\">\n <i class=\"fa fa-refresh\"></i>\n </button>\n </div>\n <input type=\"range\" class=\"w-full h-2 rounded-lg appearance-none cursor-pointer\n bg-gradient-to-r from-green-400 via-yellow-400 to-red-500\" [min]=\"0\"\n [max]=\"allSelectedRangeSliderValues.length - 1\" [value]=\"choroplethMapCurrentIndex\"\n (input)=\"onYearChange($event)\" />\n </div>\n </div>\n </div>\n</div>", styles: [".geo-chart-loader{width:64px;height:64px;border:6px solid rgba(255,255,255,.2);border-top-color:#4ade80;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.floting-side-bar{top:60px;z-index:999999}\n"], dependencies: [{ kind: "directive", type: i4$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
4261
4261
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GammaGeoChartComponent, decorators: [{
4262
4262
  type: Component,
4263
- args: [{ selector: "app-gamma-geo-chart", template: "<div class=\"mx-2 bg-gray-800\">\n <div class=\"relative w-full\">\n\n\n <div class=\"absolute left-4 top-[60px] bottom-6 z-[9999] pointer-events-none\" *ngIf=\"!isLoader\">\n <div class=\"flex items-center h-80 px-4 py-3 rounded-xl shadow-lg backdrop-blur-md bg-black/60\">\n <div class=\"w-4 h-full rounded-full shadow-xl\"\n [style.background]=\"'linear-gradient(to bottom,' + chartConfig.colorOne + ',' + chartConfig.colorTwo + ')'\">\n </div>\n\n <!-- <div class=\"flex flex-col justify-between h-80 ml-2 text-xs text-white\">\n <span>High</span>\n <span>Low</span>\n </div> -->\n </div>\n </div>\n\n\n \n\n <!-- <div class=\"absolute top-[200px] left-4 bottom-6 z-40 flex items-center\">\n <div class=\"flex items-center space-x-2\">\n <div class=\"w-4 h-full rounded-full shadow-lg\"\n [style.background]=\"'linear-gradient(to right,' + chartConfig.colorOne + ',' + chartConfig.colorTwo + ')'\"></div>\n <div class=\"flex flex-col justify-between h-full text-xs text-white\">\n <span>High</span>\n <span>Low</span>\n </div>\n </div>\n </div> -->\n\n\n <div id=\"regions_div\" #googlMap style=\"width: 100%\"></div>\n <div id=\"googlemap\" style=\"width: 100%;\" [style.height]=\"chartHeight\"></div>\n <div *ngIf=\"isLoader\" class=\"absolute inset-0 z-50 flex items-center justify-center bg-black/40 backdrop-blur-sm\">\n <div class=\"geo-chart-loader\"></div>\n </div>\n <div class=\"mx-2 pb-2\">\n <div class=\" mx-auto w-full mt-3\" *ngIf=\"isRangeSliderVisible\">\n <div class=\"flex items-center justify-between mb-2\">\n <button class=\"text-white px-3 py-2 rounded bg-gray-800 hover:bg-gray-700\" (click)=\"togglePlay()\">\n <i class=\"fa\" [ngClass]=\"isPlaying ? 'fa-pause' : 'fa-play'\"></i>\n </button>\n <div class=\"flex space-x-2 text-sm font-semibold\">\n <ng-container *ngFor=\"let year of allSelectedRangeSliderValues; let i = index\">\n <span class=\"cursor-pointer select-none px-2 py-1 rounded-md transition\" [ngClass]=\"{\n 'bg-black text-white shadow': year === selectedRangeSliderValue,\n 'text-gray-300 hover:text-white': year !== selectedRangeSliderValue\n }\" (click)=\"setYearByIndex(i)\">\n {{ year }}\n </span>\n </ng-container>\n </div>\n <button class=\"text-white px-3 py-2 rounded bg-gray-800 hover:bg-gray-700\" (click)=\"restart()\">\n <i class=\"fa fa-refresh\"></i>\n </button>\n </div>\n <input type=\"range\" class=\"w-full h-2 rounded-lg appearance-none cursor-pointer\n bg-gradient-to-r from-green-400 via-yellow-400 to-red-500\" [min]=\"0\"\n [max]=\"allSelectedRangeSliderValues.length - 1\" [value]=\"choroplethMapCurrentIndex\"\n (input)=\"onYearChange($event)\" />\n </div>\n </div>\n </div>\n</div>", styles: [".geo-chart-loader{width:64px;height:64px;border:6px solid rgba(255,255,255,.2);border-top-color:#4ade80;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"] }]
4263
+ args: [{ selector: "app-gamma-geo-chart", template: "<div class=\"mx-2 bg-gray-800\">\n <div class=\"relative w-full\">\n\n\n <div class=\"absolute left-4 bottom-6 top-[60px] z-[999999] pointer-events-none floting-side-bar\" *ngIf=\"!isLoader\">\n <div class=\"flex items-center h-80 px-4 py-3 rounded-xl shadow-lg backdrop-blur-md bg-black/60\">\n <div class=\"w-4 h-full rounded-full shadow-xl\"\n [style.background]=\"'linear-gradient(to bottom,' + chartConfig.colorOne + ',' + chartConfig.colorTwo + ')'\">\n </div>\n </div>\n </div>\n\n\n \n\n <!-- <div class=\"absolute top-[200px] left-4 bottom-6 z-40 flex items-center\">\n <div class=\"flex items-center space-x-2\">\n <div class=\"w-4 h-full rounded-full shadow-lg\"\n [style.background]=\"'linear-gradient(to right,' + chartConfig.colorOne + ',' + chartConfig.colorTwo + ')'\"></div>\n <div class=\"flex flex-col justify-between h-full text-xs text-white\">\n <span>High</span>\n <span>Low</span>\n </div>\n </div>\n </div> -->\n\n\n <div id=\"regions_div\" #googlMap style=\"width: 100%\"></div>\n <div id=\"googlemap\" style=\"width: 100%;\" [style.height]=\"chartHeight\"></div>\n <div *ngIf=\"isLoader\" class=\"absolute inset-0 z-50 flex items-center justify-center bg-black/40 backdrop-blur-sm\">\n <div class=\"geo-chart-loader\"></div>\n </div>\n <div class=\"mx-2 pb-2\">\n <div class=\" mx-auto w-full mt-3\" *ngIf=\"isRangeSliderVisible\">\n <div class=\"flex items-center justify-between mb-2\">\n <button class=\"text-white px-3 py-2 rounded bg-gray-800 hover:bg-gray-700\" (click)=\"togglePlay()\">\n <i class=\"fa\" [ngClass]=\"isPlaying ? 'fa-pause' : 'fa-play'\"></i>\n </button>\n <div class=\"flex space-x-2 text-sm font-semibold\">\n <ng-container *ngFor=\"let year of allSelectedRangeSliderValues; let i = index\">\n <span class=\"cursor-pointer select-none px-2 py-1 rounded-md transition\" [ngClass]=\"{\n 'bg-black text-white shadow': year === selectedRangeSliderValue,\n 'text-gray-300 hover:text-white': year !== selectedRangeSliderValue\n }\" (click)=\"setYearByIndex(i)\">\n {{ year }}\n </span>\n </ng-container>\n </div>\n <button class=\"text-white px-3 py-2 rounded bg-gray-800 hover:bg-gray-700\" (click)=\"restart()\">\n <i class=\"fa fa-refresh\"></i>\n </button>\n </div>\n <input type=\"range\" class=\"w-full h-2 rounded-lg appearance-none cursor-pointer\n bg-gradient-to-r from-green-400 via-yellow-400 to-red-500\" [min]=\"0\"\n [max]=\"allSelectedRangeSliderValues.length - 1\" [value]=\"choroplethMapCurrentIndex\"\n (input)=\"onYearChange($event)\" />\n </div>\n </div>\n </div>\n</div>", styles: [".geo-chart-loader{width:64px;height:64px;border:6px solid rgba(255,255,255,.2);border-top-color:#4ade80;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.floting-side-bar{top:60px;z-index:999999}\n"] }]
4264
4264
  }], ctorParameters: function () { return [{ type: CommonService }]; }, propDecorators: { googlMap: [{
4265
4265
  type: ViewChild,
4266
4266
  args: ["googlMap"]