@bpost/bp-address-auto-complete-by-component 1.1.25 → 1.1.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/VERSION.md +6 -0
- package/esm2020/lib/box-number/box-number.component.mjs +28 -3
- package/esm2020/lib/lib-address-autocomplete-by-component.component.mjs +71 -8
- package/esm2020/lib/locality/locality.component.mjs +12 -2
- package/esm2020/lib/model/query-parameters.model.mjs +7 -1
- package/esm2020/lib/street/street.component.mjs +28 -3
- package/esm2020/lib/street-number/street-number.component.mjs +36 -5
- package/fesm2015/bpost-bp-address-auto-complete-by-component.mjs +176 -16
- package/fesm2015/bpost-bp-address-auto-complete-by-component.mjs.map +1 -1
- package/fesm2020/bpost-bp-address-auto-complete-by-component.mjs +176 -16
- package/fesm2020/bpost-bp-address-auto-complete-by-component.mjs.map +1 -1
- package/lib/box-number/box-number.component.d.ts +1 -0
- package/lib/lib-address-autocomplete-by-component.component.d.ts +3 -1
- package/lib/locality/locality.component.d.ts +3 -1
- package/lib/model/query-parameters.model.d.ts +4 -0
- package/lib/street/street.component.d.ts +4 -1
- package/lib/street-number/street-number.component.d.ts +4 -1
- package/package.json +1 -1
|
@@ -260,6 +260,12 @@ export class LocalityComponent {
|
|
|
260
260
|
default:
|
|
261
261
|
break;
|
|
262
262
|
}
|
|
263
|
+
if (this.includeListOfBoxes) {
|
|
264
|
+
param.setIncludeListOfBoxes(true);
|
|
265
|
+
}
|
|
266
|
+
if (this.includeListOfBusinessNameWithBoxes) {
|
|
267
|
+
param.setIncludeListOfBusinessNameWithBoxes(true);
|
|
268
|
+
}
|
|
263
269
|
return param;
|
|
264
270
|
}
|
|
265
271
|
getTopSuggestions(source) {
|
|
@@ -780,7 +786,7 @@ export class LocalityComponent {
|
|
|
780
786
|
}
|
|
781
787
|
}
|
|
782
788
|
LocalityComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: LocalityComponent, deps: [{ token: i1.AddressService }, { token: i2.LocaleService }, { token: i3.TranslateService }, { token: i4.UnicodeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
783
|
-
LocalityComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: LocalityComponent, selector: "bp-locality", inputs: { labelResourceKey: "labelResourceKey", messageOption: "messageOption", maxSuggesionCount: "maxSuggesionCount", visibleSuggestionCount: "visibleSuggestionCount", sortCriteria: "sortCriteria", baseUrl: "baseUrl", inputText: "inputText", prefillData: "prefillData", showDebugMessageToConsole: "showDebugMessageToConsole", inputLang: "inputLang", isReadonly: "isReadonly", allowNoValidation: "allowNoValidation", validatedByBackend: "validatedByBackend", numberOfExceptions: "numberOfExceptions" }, outputs: { messageChanged: "messageChanged", addressChanged: "addressChanged", focusEvent: "focusEvent", blurEvent: "blurEvent", textChangeEvent: "textChangeEvent", clearInputEventEmitter: "clearInputEventEmitter", prefillEventEmitter: "prefillEventEmitter", numberOfExceptionsEmitter: "numberOfExceptionsEmitter" }, viewQueries: [{ propertyName: "localitySearchInput", first: true, predicate: ["localitySearchInput"], descendants: true }, { propertyName: "localityList", first: true, predicate: ["localityList"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<span *ngIf=\"labelResourceKey\">{{ labelResourceKey | translate}}</span>\n<div class=\"bpaac-dropdown\">\n <div class=\"bpaac-search-bar\">\n <div class=\"bpaac-input-width\">\n \n <input type=\"text\" #localitySearchInput class=\"bpaac-input\" \n [readonly]=\"isReadonly\"\n (keyup) = (checkKeyUP($event))\n (keydown)=\"checkKeyDown($event)\" (input)=\"onInputChange()\"\n [style.color]=\" getTextColor() \"\n [(ngModel)]=\"searchText\" id=\"localityInputField\" [attr.placeholder]=\"placeHolderText\" autocomplete=\"off\"\n (blur)=\"onBlur($event)\" (focus)=\"onFocus()\" (click)=\"onInputClick()\"/>\n <div id=\"bpaac-clear-locality-button\" \n *ngIf=\"mayShowClearButton()\"\n (click)=\"clearInput(true)\" class=\"bpaac-clear\">\n </div>\n </div>\n <!--<div ng-transclude></div>-->\n <input id=\"bpaac-locality-typeahead\" type=\"text\" disabled autocomplete=\"off\" [(ngModel)]=\"bpTypeAhead\" />\n </div>\n <div [hidden]=\"collapseDropdown\" class=\"bpaac-dropdown-menu-container\" *ngIf=\"suggestions && suggestions.length>0\">\n <div #localityList [appVisibleSuggestion]=\"visibleSuggestionCount\" id=\"bpaac-locality-dropdown\" \n class=\"bpaac-dropdown-menu\">\n <ul role=\"listbox\" id=\"bpaac-locality-suggestionsList\" class=\"list-unstyled\">\n <li role=\"option\" \n *ngFor=\"let option of suggestions; let idx = index\" \n [ngClass]=\"{'active':(selectedIndex==idx)}\" (mousedown)=\"clickSuggestion($event, option)\"\n (mouseenter)=\"selectedIndex=idx\" (mouseleave)=\"selectedIndex=-1\">\n <span *ngIf=\"option\" [innerHtml]=\"option.string | highlightSuggestion : wordList\"></span> \n <span *ngIf=\"messageOption === 'P' && option.messages\"> ({{option.municipalityName}})</span><br />\n <ng-container *ngIf=\"messageOption === 'Y'\">\n <span *ngFor=\"let message of option.messages\" \n class=\"bpaac-suggestion-message\"\n [innerHtml]=\"message.translatedMessage\"></span> \n </ng-container>\n </li>\n </ul>\n </div>\n </div>\n</div>", styles: [""], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i7.VisibleSuggestionDirective, selector: "[appVisibleSuggestion]", inputs: ["appVisibleSuggestion"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "translate": i3.TranslatePipe, "highlightSuggestion": i8.HighlightSuggestionPipe } });
|
|
789
|
+
LocalityComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: LocalityComponent, selector: "bp-locality", inputs: { labelResourceKey: "labelResourceKey", messageOption: "messageOption", maxSuggesionCount: "maxSuggesionCount", visibleSuggestionCount: "visibleSuggestionCount", sortCriteria: "sortCriteria", baseUrl: "baseUrl", inputText: "inputText", prefillData: "prefillData", showDebugMessageToConsole: "showDebugMessageToConsole", includeListOfBoxes: "includeListOfBoxes", includeListOfBusinessNameWithBoxes: "includeListOfBusinessNameWithBoxes", inputLang: "inputLang", isReadonly: "isReadonly", allowNoValidation: "allowNoValidation", validatedByBackend: "validatedByBackend", numberOfExceptions: "numberOfExceptions" }, outputs: { messageChanged: "messageChanged", addressChanged: "addressChanged", focusEvent: "focusEvent", blurEvent: "blurEvent", textChangeEvent: "textChangeEvent", clearInputEventEmitter: "clearInputEventEmitter", prefillEventEmitter: "prefillEventEmitter", numberOfExceptionsEmitter: "numberOfExceptionsEmitter" }, viewQueries: [{ propertyName: "localitySearchInput", first: true, predicate: ["localitySearchInput"], descendants: true }, { propertyName: "localityList", first: true, predicate: ["localityList"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<span *ngIf=\"labelResourceKey\">{{ labelResourceKey | translate}}</span>\n<div class=\"bpaac-dropdown\">\n <div class=\"bpaac-search-bar\">\n <div class=\"bpaac-input-width\">\n \n <input type=\"text\" #localitySearchInput class=\"bpaac-input\" \n [readonly]=\"isReadonly\"\n (keyup) = (checkKeyUP($event))\n (keydown)=\"checkKeyDown($event)\" (input)=\"onInputChange()\"\n [style.color]=\" getTextColor() \"\n [(ngModel)]=\"searchText\" id=\"localityInputField\" [attr.placeholder]=\"placeHolderText\" autocomplete=\"off\"\n (blur)=\"onBlur($event)\" (focus)=\"onFocus()\" (click)=\"onInputClick()\"/>\n <div id=\"bpaac-clear-locality-button\" \n *ngIf=\"mayShowClearButton()\"\n (click)=\"clearInput(true)\" class=\"bpaac-clear\">\n </div>\n </div>\n <!--<div ng-transclude></div>-->\n <input id=\"bpaac-locality-typeahead\" type=\"text\" disabled autocomplete=\"off\" [(ngModel)]=\"bpTypeAhead\" />\n </div>\n <div [hidden]=\"collapseDropdown\" class=\"bpaac-dropdown-menu-container\" *ngIf=\"suggestions && suggestions.length>0\">\n <div #localityList [appVisibleSuggestion]=\"visibleSuggestionCount\" id=\"bpaac-locality-dropdown\" \n class=\"bpaac-dropdown-menu\">\n <ul role=\"listbox\" id=\"bpaac-locality-suggestionsList\" class=\"list-unstyled\">\n <li role=\"option\" \n *ngFor=\"let option of suggestions; let idx = index\" \n [ngClass]=\"{'active':(selectedIndex==idx)}\" (mousedown)=\"clickSuggestion($event, option)\"\n (mouseenter)=\"selectedIndex=idx\" (mouseleave)=\"selectedIndex=-1\">\n <span *ngIf=\"option\" [innerHtml]=\"option.string | highlightSuggestion : wordList\"></span> \n <span *ngIf=\"messageOption === 'P' && option.messages\"> ({{option.municipalityName}})</span><br />\n <ng-container *ngIf=\"messageOption === 'Y'\">\n <span *ngFor=\"let message of option.messages\" \n class=\"bpaac-suggestion-message\"\n [innerHtml]=\"message.translatedMessage\"></span> \n </ng-container>\n </li>\n </ul>\n </div>\n </div>\n</div>", styles: [""], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i7.VisibleSuggestionDirective, selector: "[appVisibleSuggestion]", inputs: ["appVisibleSuggestion"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "translate": i3.TranslatePipe, "highlightSuggestion": i8.HighlightSuggestionPipe } });
|
|
784
790
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: LocalityComponent, decorators: [{
|
|
785
791
|
type: Component,
|
|
786
792
|
args: [{ selector: 'bp-locality', template: "<span *ngIf=\"labelResourceKey\">{{ labelResourceKey | translate}}</span>\n<div class=\"bpaac-dropdown\">\n <div class=\"bpaac-search-bar\">\n <div class=\"bpaac-input-width\">\n \n <input type=\"text\" #localitySearchInput class=\"bpaac-input\" \n [readonly]=\"isReadonly\"\n (keyup) = (checkKeyUP($event))\n (keydown)=\"checkKeyDown($event)\" (input)=\"onInputChange()\"\n [style.color]=\" getTextColor() \"\n [(ngModel)]=\"searchText\" id=\"localityInputField\" [attr.placeholder]=\"placeHolderText\" autocomplete=\"off\"\n (blur)=\"onBlur($event)\" (focus)=\"onFocus()\" (click)=\"onInputClick()\"/>\n <div id=\"bpaac-clear-locality-button\" \n *ngIf=\"mayShowClearButton()\"\n (click)=\"clearInput(true)\" class=\"bpaac-clear\">\n </div>\n </div>\n <!--<div ng-transclude></div>-->\n <input id=\"bpaac-locality-typeahead\" type=\"text\" disabled autocomplete=\"off\" [(ngModel)]=\"bpTypeAhead\" />\n </div>\n <div [hidden]=\"collapseDropdown\" class=\"bpaac-dropdown-menu-container\" *ngIf=\"suggestions && suggestions.length>0\">\n <div #localityList [appVisibleSuggestion]=\"visibleSuggestionCount\" id=\"bpaac-locality-dropdown\" \n class=\"bpaac-dropdown-menu\">\n <ul role=\"listbox\" id=\"bpaac-locality-suggestionsList\" class=\"list-unstyled\">\n <li role=\"option\" \n *ngFor=\"let option of suggestions; let idx = index\" \n [ngClass]=\"{'active':(selectedIndex==idx)}\" (mousedown)=\"clickSuggestion($event, option)\"\n (mouseenter)=\"selectedIndex=idx\" (mouseleave)=\"selectedIndex=-1\">\n <span *ngIf=\"option\" [innerHtml]=\"option.string | highlightSuggestion : wordList\"></span> \n <span *ngIf=\"messageOption === 'P' && option.messages\"> ({{option.municipalityName}})</span><br />\n <ng-container *ngIf=\"messageOption === 'Y'\">\n <span *ngFor=\"let message of option.messages\" \n class=\"bpaac-suggestion-message\"\n [innerHtml]=\"message.translatedMessage\"></span> \n </ng-container>\n </li>\n </ul>\n </div>\n </div>\n</div>", styles: [""] }]
|
|
@@ -808,6 +814,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
|
|
|
808
814
|
type: Input
|
|
809
815
|
}], showDebugMessageToConsole: [{
|
|
810
816
|
type: Input
|
|
817
|
+
}], includeListOfBoxes: [{
|
|
818
|
+
type: Input
|
|
819
|
+
}], includeListOfBusinessNameWithBoxes: [{
|
|
820
|
+
type: Input
|
|
811
821
|
}], inputLang: [{
|
|
812
822
|
type: Input
|
|
813
823
|
}], isReadonly: [{
|
|
@@ -835,4 +845,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
|
|
|
835
845
|
}], numberOfExceptionsEmitter: [{
|
|
836
846
|
type: Output
|
|
837
847
|
}] } });
|
|
838
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpdHkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGliLWFkZHJlc3MtYXV0b2NvbXBsZXRlLWJ5LWNvbXBvbmVudC9zcmMvbGliL2xvY2FsaXR5L2xvY2FsaXR5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYi1hZGRyZXNzLWF1dG9jb21wbGV0ZS1ieS1jb21wb25lbnQvc3JjL2xpYi9sb2NhbGl0eS9sb2NhbGl0eS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUE2RSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0osT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUtsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXRELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7QUFPeEQsTUFBTSxPQUFPLGlCQUFpQjtJQXlFNUIsWUFDVSxjQUE4QixFQUM5QixhQUE0QixFQUM1QixnQkFBa0MsRUFDbEMsY0FBOEI7UUFIOUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBeEV4QyxhQUFh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QUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFFRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0cseUJBQXlCO3NCQUFsQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBTaW1wbGVDaGFuZ2VzLCBBZnRlclZpZXdDaGVja2VkLCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uTWVzc2FnZVR5cGUgfSBmcm9tICcuLi9lbnVtL3ZhbGlkYXRpb24tbWVzc2FnZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgQUREUkVTU0xFVkVMIH0gZnJvbSAnLi4vZW51bS9hZGRyZXNzLWxldmVsLmVudW0nO1xuaW1wb3J0IHsgUXVlcnlQYXJhbWV0ZXJzIH0gZnJvbSAnLi4vbW9kZWwvcXVlcnktcGFyYW1ldGVycy5tb2RlbCc7XG5pbXBvcnQgeyBBZGRyZXNzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FkcmVzcy5zZXJ2aWNlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IExvY2FsZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9sb2NhbGUuc2VydmljZSc7XG5pbXBvcnQgeyBVbmljb2RlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3VuaWNvZGUuc2VydmljZSc7XG5pbXBvcnQgeyBEb21IYW5kbGVyIH0gZnJvbSAnLi4vdXRpbHMvZG9taGFuZGxlcic7XG5pbXBvcnQgeyBTb3VyY2VUeXBlIH0gZnJvbSAnLi4vZW51bS9zb3VyY2UtdHlwZS5lbnVtJztcbmltcG9ydCB7IFByZWZpbGxEYXRhIH0gZnJvbSAnLi4vdXRpbHMvcHJlZmlsbC1kYXRhJztcbmltcG9ydCB7IFByZWZpbGxFdmVudCB9IGZyb20gJy4uL3V0aWxzL3ByZWZsbGwuZXZlbnQnO1xuaW1wb3J0IHsgSW5wdXROYW1lVHlwZSB9IGZyb20gJy4uL2VudW0vaW5wdXQtbmFtZS5lbnVtJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYnAtbG9jYWxpdHknLFxuICB0ZW1wbGF0ZVVybDogJy4vbG9jYWxpdHkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9sb2NhbGl0eS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIExvY2FsaXR5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3Q2hlY2tlZCB7XG5cbiAgQFZpZXdDaGlsZCgnbG9jYWxpdHlTZWFyY2hJbnB1dCcsIHsgc3RhdGljOiBmYWxzZSB9KSBsb2NhbGl0eVNlYXJjaElucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdsb2NhbGl0eUxpc3QnLCB7IHN0YXRpYzogZmFsc2UgfSkgbG9jYWxpdHlMaXN0OiBFbGVtZW50UmVmO1xuXG4gIC8vIDIwMjAtMDYtMTVcbiAgLyogICBASW5wdXQoKVxuICAgIG9uRm9jdXNTaG93U3VnZ2VzdGlvbnNBZnRlclByZWZpbGwgPSB0cnVlOyAqL1xuXG4gIEBJbnB1dCgpIGxhYmVsUmVzb3VyY2VLZXkgPSAnY29tbW9uLmxhYmVsLnBvc3RhbENvZGUnO1xuICBASW5wdXQoKSBtZXNzYWdlT3B0aW9uID0gJ1knO1xuICBASW5wdXQoKSBtYXhTdWdnZXNpb25Db3VudCA9IDU7XG4gIEBJbnB1dCgpIHZpc2libGVTdWdnZXN0aW9uQ291bnQgPSA1O1xuICBASW5wdXQoKSBzb3J0Q3JpdGVyaWEgPSAnJztcbiAgQElucHV0KCkgYmFzZVVybDogc3RyaW5nO1xuICBASW5wdXQoKSBpbnB1dFRleHQ6IHN0cmluZztcbiAgLy8gQElucHV0KCkgYWRkcmVzc1BhcmFtczogUHJlZmlsbGVkUGFyYW1ldGVycztcbiAgQElucHV0KCkgcHJlZmlsbERhdGE6IFByZWZpbGxEYXRhO1xuICBASW5wdXQoKSBzaG93RGVidWdNZXNzYWdlVG9Db25zb2xlID0gdHJ1ZTtcblxuICAvLyBAdHMtaWdub3JlXG4gIEBJbnB1dCgpIHNldCBpbnB1dExhbmcodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxvY2FsZVNlcnZpY2UuY2hhbmdlTGFuZyh2YWwpO1xuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS51c2UodmFsKS5zdWJzY3JpYmUoXG4gICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZWRMYW5ndWFnZSgpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBASW5wdXQoKVxuICBpc1JlYWRvbmx5ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFsbG93Tm9WYWxpZGF0aW9uOiBib29sZWFuO1xuICBASW5wdXQoKSB2YWxpZGF0ZWRCeUJhY2tlbmQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIG51bWJlck9mRXhjZXB0aW9uczogbnVtYmVyO1xuXG4gIEBPdXRwdXQoKSBtZXNzYWdlQ2hhbmdlZDogRXZlbnRFbWl0dGVyPHsgbWVzc2FnZVR5cGU6IFZhbGlkYXRpb25NZXNzYWdlVHlwZSwgdHJhbnNsYXRlZE1lc3NhZ2U6IHN0cmluZyB9PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGFkZHJlc3NDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGZvY3VzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgYmx1ckV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHRleHRDaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBjbGVhcklucHV0RXZlbnRFbWl0dGVyOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgcHJlZmlsbEV2ZW50RW1pdHRlcjogRXZlbnRFbWl0dGVyPFByZWZpbGxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFByZWZpbGxFdmVudD4oKTtcbiAgQE91dHB1dCgpIG51bWJlck9mRXhjZXB0aW9uc0VtaXR0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIC8vIGluc3RhbmNlIHByb3BlcnRpZXNcbiAgYWRkcmVzc0lzVmFsaWRhdGVkOiBib29sZWFuO1xuICBicFR5cGVBaGVhZDogc3RyaW5nO1xuICBjb2xsYXBzZURyb3Bkb3duOiBib29sZWFuO1xuICBjb25zdW1lZE51bWJlcjogbnVtYmVyO1xuICBlcnJvckNvZGU6IGFueTtcbiAgbGFzdFNlYXJjaFZhbHVlOiBzdHJpbmc7XG4gIG1pbkxldmVsOiBhbnk7XG4gIHBsYWNlSG9sZGVyVGV4dDogc3RyaW5nO1xuICBwcmV2aW91c0luZGV4OiBudW1iZXI7XG4gIHNlYXJjaFRleHQ6IHN0cmluZz0nJztcbiAgc2VsZWN0ZWRJbmRleDogbnVtYmVyO1xuICBzZWxlY3Rpb25DaGFuZ2VkOiBib29sZWFuO1xuICBzZXF1ZW5jZU51bWJlcjogbnVtYmVyO1xuICBza2lwTmV4dEJsdXI6IGJvb2xlYW47IC8vIE9uQmx1ciBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBjbGlja3Mgc3VnZ2VzdGlvbi92YWxpZGF0b3IgYnV0dG9uXG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBzdWdnZXN0aW9uczogQXJyYXk8YW55PjtcbiAgc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlOiBzdHJpbmc7XG4gIHN1Z2dlc3Rpb25zV29yZExpc3Q6IGFueTtcbiAgdHlwZUFoZWFkV29yZDogc3RyaW5nO1xuICB2YWxpZGF0aW9uTWVzc2FnZUNvZGUgPSBudWxsO1xuICB2YWxpZGF0aW9uTWVzc2FnZU9wdGlvbnMgPSBudWxsO1xuICB3b3JkTGlzdDogYW55O1xuICBwcmVmaWxsVHlwZTpTb3VyY2VUeXBlIDtcblxuICBwcmVmaWxsaW5nID0gZmFsc2U7XG4gIGlzUHJlZmlsbFdpdGhOb01hdGNoID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhZGRyZXNzU2VydmljZTogQWRkcmVzc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBsb2NhbGVTZXJ2aWNlOiBMb2NhbGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHVuaWNvZGVTZXJ2aWNlOiBVbmljb2RlU2VydmljZSxcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFRleHQ7XG4gICAgLy8gaW5zdGFuY2UgcHJvcGVydGllc1xuICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5zdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgdGhpcy5wcmV2aW91c0luZGV4ID0gLTE7XG4gICAgdGhpcy5sYXN0U2VhcmNoVmFsdWUgPSAnJztcbiAgICB0aGlzLndvcmRMaXN0ID0gW107XG4gICAgdGhpcy5zdWdnZXN0aW9uc1dvcmRMaXN0ID0gW107XG4gICAgdGhpcy5icFR5cGVBaGVhZCA9ICcnO1xuICAgIHRoaXMucGxhY2VIb2xkZXJUZXh0ID0gJyc7XG4gICAgdGhpcy5za2lwTmV4dEJsdXIgPSBmYWxzZTsgLy8gT25CbHVyIGlzIHRyaWdnZXJlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBzdWdnZXN0aW9uL3ZhbGlkYXRvciBidXR0b25cbiAgICB0aGlzLmVycm9yQ29kZSA9IG51bGw7XG4gICAgLy8gc2NvcGUgcHJvcGVydGllc1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xO1xuICAgIC8vIHByb3BlcnRpZXNcbiAgICB0aGlzLnR5cGVBaGVhZFdvcmQgPSAnJztcbiAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSBmYWxzZTtcbiAgICB0aGlzLnNlcXVlbmNlTnVtYmVyID0gMDtcbiAgICB0aGlzLmNvbnN1bWVkTnVtYmVyID0gMDtcbiAgICAvLyBpbml0aWFsaXphdGlvblxuICAgIHRoaXMuc2V0U2VhcmNoVGV4dCgnJyk7XG4gICAgdGhpcy5vbkNoYW5nZWRMYW5ndWFnZSgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbkNoYW5nZWQpIHtcbiAgICAgIGNvbnN0IG92ZXJsYXk6IEhUTUxEaXZFbGVtZW50ID0gdGhpcy5sb2NhbGl0eUxpc3QubmF0aXZlRWxlbWVudDtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBsaXN0SXRlbSA9IERvbUhhbmRsZXIuZmluZFNpbmdsZShvdmVybGF5LCAnbGkuYWN0aXZlJyk7XG4gICAgICAgIGlmIChsaXN0SXRlbSkge1xuICAgICAgICAgIERvbUhhbmRsZXIuc2Nyb2xsSW5WaWV3KG92ZXJsYXksIGxpc3RJdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSwgMSk7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG5cbiAgICBcbiAgICBpZiAoY2hhbmdlcykge1xuXG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgncHJlZmlsbERhdGEnKSAmJiAhY2hhbmdlcy5wcmVmaWxsRGF0YS5maXJzdENoYW5nZSkge1xuICAgICAgICB0aGlzLnByZWZpbGxpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSB0aGlzLmxvYWRQYXJhbXMoY2hhbmdlcy5wcmVmaWxsRGF0YS5jdXJyZW50VmFsdWUpO1xuXG4gICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xvY2FsaXR5OjpuZ09uQ2hhbmdlcyAtIGxvYWRQYXJhbWUgcmVzdWx0OicsIHRoaXMuc2VhcmNoVGV4dCk7IH1cbiAgICAgICAgdGhpcy5icFR5cGVBaGVhZCA9ICcnO1xuICAgICAgICBpZiAodGhpcy5zZWFyY2hUZXh0ICE9PSAnJyAmJiB0aGlzLm1pbkxldmVsID09PSBBRERSRVNTTEVWRUwuTE9DQUxJVFkpIHtcbiAgICAgICAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSB0cnVlO1xuICAgICAgICAgIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eU5hbWVcbiAgICAgICAgICAgID0gdGhpcy50cmFuc2Zvcm1NdW5pY2lwYWxpdHlJbkxvd2VyY2FzZUFuZFdpdGhvdXREaWFjcml0aWNzKHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5tdW5pY2lwYWxpdHlOYW1lKTtcbiAgICAgICAgICB0aGlzLm9uSW5wdXRDaGFuZ2UoLyoncHJlZmlsbGVkJyovIFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdpbnB1dFRleHQnKSAmJiAhY2hhbmdlcy5pbnB1dFRleHQuZmlyc3RDaGFuZ2UpIHtcbiAgICAgIFxuICAgICAgICBcbiAgICAgICAgaWYgKHRoaXMubm90RXF1YWxJZ25vcmVDYXNlKHRoaXMuc2VhcmNoVGV4dCwgY2hhbmdlcy5pbnB1dFRleHQuY3VycmVudFZhbHVlKSkge1xuICAgICAgICAgIHRoaXMuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSBjaGFuZ2VzLmlucHV0VGV4dC5jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8qXG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnYmFzZVVybCcpICYmICFjaGFuZ2VzLmJhc2VVcmwuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5jbGVhcldpZGdldCgpO1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0ZWRBZGRyZXNzKCk7XG4gICAgICB9XG4gICAgICAqL1xuXG4gICAgICAvLyBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgndmFsaWRhdGVkQnlCYWNrZW5kJykgJiYgY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgncHJlZmlsbERhdGEnKSkge1xuICAgICAgLy8gICB0aGlzLm9uSW5wdXRDaGFuZ2UoU291cmNlVHlwZS5TT1VSQ0VfUFJFRklMTEVEKVxuICAgICAgLy8gfVxuXG4gICAgfVxuICB9XG5cbiAgdHJhbnNmb3JtTXVuaWNpcGFsaXR5SW5Mb3dlcmNhc2VBbmRXaXRob3V0RGlhY3JpdGljcyhtdW5pY2lwYWxpdHlOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCByZXN1bHQ6IHN0cmluZyA9IG51bGw7XG4gICAgaWYgKG11bmljaXBhbGl0eU5hbWUgIT09IG51bGwgJiYgbXVuaWNpcGFsaXR5TmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLnVuaWNvZGVTZXJ2aWNlLnJlbW92ZURpYWNyaXRpY3MobXVuaWNpcGFsaXR5TmFtZSk7XG4gICAgICByZXN1bHQgPSByZXN1bHQudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygncHJlZmlsbCBtdW5pY2lwYWxpdHknLCByZXN1bHQpOyB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBidWlsZElucHV0V29yZExpc3QoKSB7XG4gICAgdGhpcy53b3JkTGlzdCA9IHRoaXMuc2VhcmNoVGV4dC5zcGxpdCgvW1xccywgXSsvKTtcbiAgICAvLyBjb25zb2xlLmxvZygnTGliQXV0b2NvbXBsZXRlTG9jYWxpdHlDb21wb25lbnQ6OmJ1aWxkSW5wdXRXb3JkTGlzdCcsIHRoaXMud29yZExpc3QpO1xuICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25zICYmIHRoaXMud29yZExpc3QpIHtcbiAgICAgIGZvciAoY29uc3Qgc3VnIG9mIHRoaXMuc3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgaWYgKCFzdWcgfHwgIXN1Zy5oYXNPd25Qcm9wZXJ0eSgnc3RyaW5nJykpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHcgb2YgdGhpcy53b3JkTGlzdCkge1xuICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5zdGFydHNXaXRoSWdub3JlRGlhY3JpdGljcyhzdWcuc3RyaW5nIGFzIHN0cmluZywgdyBhcyBzdHJpbmcpO1xuICAgICAgICAgIGlmIChzdGFydCA+PSAwKSB7XG4gICAgICAgICAgICBjb25zdCB3dyA9IHN1Zy5zdHJpbmcuc3Vic3RyKHN0YXJ0LCB3Lmxlbmd0aCk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnYWRkaW5nIHdvcmQ6JyArIHd3KTtcbiAgICAgICAgICAgIC8vIHd3IGlzIGEgY2FuZGlkYXRlIHRvIGJlIGFkZGVkIHRvIHRoZSB3b3JkbGlzdCBpZiBub3QgYWxyZWFkeSBwcmVzZW50IGluIGl0XG4gICAgICAgICAgICBjb25zdCBwcmVzZW50ID0gdGhpcy53b3JkTGlzdC5maW5kKCh3MTogc3RyaW5nKSA9PiB3MS50b0xvd2VyQ2FzZSgpID09PSB3dy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgIGlmIChwcmVzZW50ID09PSBudWxsIHx8IHByZXNlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB0aGlzLndvcmRMaXN0LnB1c2god3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0cmluZ1N0YXJ0c1dpdGhJZ25vcmVEaWFjcml0aWNzKHZhbHVlLCBwcmVmaXgpIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICAgIGNvbnN0IF92YWx1ZSA9IHRoaXMudW5pY29kZVNlcnZpY2UucmVtb3ZlRGlhY3JpdGljcygodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkgPyB2YWx1ZS50b0xvd2VyQ2FzZSgpIDogdmFsdWUpO1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG4gICAgY29uc3QgX3ByZWZpeCA9IHRoaXMudW5pY29kZVNlcnZpY2UucmVtb3ZlRGlhY3JpdGljcygocHJlZml4ICE9PSBudWxsICYmIHByZWZpeCAhPT0gdW5kZWZpbmVkKSA/IHByZWZpeC50b0xvd2VyQ2FzZSgpIDogcHJlZml4KTtcbiAgICBjb25zdCBzdGFydCA9IF92YWx1ZS5zbGljZSgwLCBfcHJlZml4Lmxlbmd0aCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKF9wcmVmaXgpICE9PSAtMTtcbiAgICByZXR1cm4gc3RhcnQ7XG4gIH1cblxuICBidWlsZFR5cGVBaGVhZChzb3VyY2U6IFNvdXJjZVR5cGUpIHtcbiAgICBpZiAoc291cmNlID09PSBTb3VyY2VUeXBlLlNPVVJDRV9QUkVGSUxMRUQpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgaWYgKCF0aGlzLm1heUFkZFR5cGVBaGVhZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNlYXJjaFRleHRXb3JkcyA9IHRoaXMuc2VhcmNoVGV4dC5zcGxpdCgvW1xccywgXSsvKTtcbiAgICBjb25zdCBsYXN0V29yZCA9IHNlYXJjaFRleHRXb3Jkc1tzZWFyY2hUZXh0V29yZHMubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAodGhpcy5zdWdnZXN0aW9ucy5zb21lKGZ1bmN0aW9uIChzdWcpIHtcbiAgICAgIGlmICghc3VnIHx8ICFzdWcuaGFzT3duUHJvcGVydHkoJ3N0cmluZycpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWcuc3RyaW5nLnNwbGl0KC9bXFxzLV0rLykuc29tZShmdW5jdGlvbiAod29yZCkge1xuICAgICAgICBpZiAodGhpcy5zdHJpbmdTdGFydHNXaXRoSWdub3JlRGlhY3JpdGljcyh3b3JkLCBsYXN0V29yZCkpIHtcbiAgICAgICAgICB0aGlzLnR5cGVBaGVhZFdvcmQgPSB3b3JkO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9LmJpbmQodGhpcykpO1xuICAgIH0uYmluZCh0aGlzKSkpIHtcbiAgICAgIGNvbnN0IGFwcGVuZGl4ID0gdGhpcy50eXBlQWhlYWRXb3JkLnNsaWNlKGxhc3RXb3JkLmxlbmd0aCwgdGhpcy50eXBlQWhlYWRXb3JkLmxlbmd0aCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIHRoaXMuYnBUeXBlQWhlYWQgPSB0aGlzLnNlYXJjaFRleHQgKyBhcHBlbmRpeDtcbiAgICB9XG4gIH1cblxuICBjbGVhckNvbm5lY3Rpb25FcnJvck1lc3NhZ2UoKSB7XG4gICAgaWYgKHRoaXMuZXJyb3JDb2RlKSB7XG4gICAgICAvKlxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldCh0aGlzLmVycm9yQ29kZS8gKiwge3ZhbHVlOiAnd29ybGQnfSogLykuc3Vic2NyaWJlKChyZXM6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHJlcyk7XG4gICAgICAgICAgLy8gPT4gJ2hlbGxvIHdvcmxkJ1xuICAgICAgICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSA9PT0gcmVzICkge1xuICAgICAgICAgICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSgpO1xuICAgICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgKi9cblxuICAgICAgY29uc3QgcmVzID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGhpcy5lcnJvckNvZGUpO1xuICAgICAgaWYgKHRoaXMuc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlID09PSByZXMpIHtcbiAgICAgICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSgpO1xuICAgICAgfVxuICAgICAgLypcbiAgICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSA9PT0gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKHRoaXMuZXJyb3JDb2RlKSkge1xuICAgICAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlKCk7XG4gICAgICB9XG4gICAgICAqL1xuICAgICAgdGhpcy5lcnJvckNvZGUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyVHlwZUFoZWFkKCkge1xuICAgIHRoaXMuYnBUeXBlQWhlYWQgPSAnJztcbiAgfVxuXG4gIGVtaXRUcmFuc2xhdGVkVmFsaWRhdGlvbk1lc3NhZ2UodmFsaWRhdGlvbk1lc3NhZ2VUeXBlOiBWYWxpZGF0aW9uTWVzc2FnZVR5cGUsIG9wdGlvbnM/OiBzdHJpbmdbXSkge1xuICAgIC8vIE1vbWVudGx5LCBvcHRpb25zIGFyZSBOT1QgdXNlZDsgc28gZGF0YSB0eXBlIG9mIHRoZXNlIG9wdGlvbnMgd2lsbCBiZSByZXZpZXdlZCBvbmNlIG5lZWRlZC5cbiAgICBpZiAodmFsaWRhdGlvbk1lc3NhZ2VUeXBlID09PSBudWxsIHx8IHZhbGlkYXRpb25NZXNzYWdlVHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1VuYWJsZSB0byBlbWl0IHZhbGlkYXRpb24gbWVzc2FnZSAtIG1lc3NhZ2Uga2V5IGlzIGludmFsaWQhJywgdmFsaWRhdGlvbk1lc3NhZ2VUeXBlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHZhbGlkYXRpb25NZXNzYWdlVHlwZSkge1xuXG4gICAgICBjYXNlIFZhbGlkYXRpb25NZXNzYWdlVHlwZS5BZGRyZXNzX05vdF9Gb3VuZDpcbiAgICAgIGNhc2UgVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLkFkZHJlc3NfVmFsaWRhdGVkOlxuICAgICAgY2FzZSBWYWxpZGF0aW9uTWVzc2FnZVR5cGUuU2VydmljZV9VbmF2YWlsYWJsZToge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2NvbW1vbi5tZXNzYWdlLicgKyB2YWxpZGF0aW9uTWVzc2FnZVR5cGUpO1xuICAgICAgICAvLyB0aGlzLm1lc3NhZ2VDaGFuZ2VkLmVtaXQobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubWVzc2FnZUNoYW5nZWQuZW1pdCh7IG1lc3NhZ2VUeXBlOiB2YWxpZGF0aW9uTWVzc2FnZVR5cGUsIHRyYW5zbGF0ZWRNZXNzYWdlOiBtZXNzYWdlIH0pO1xuICAgICAgfVxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6YWxpZ25cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignVW5hYmxlIHRvIGVtaXQgdmFsaWRhdGlvbiBtZXNzYWdlIC0gbWVzc2FnZSBrZXkgTk9UIHN1cHBvcnRlZCEnLCB2YWxpZGF0aW9uTWVzc2FnZVR5cGUpO1xuICAgICAgfVxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6YWxpZ25cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gIH1cblxuICBnZW5lcmF0ZVBhcmFtZXRlcnMoKTogUXVlcnlQYXJhbWV0ZXJzIHtcbiAgICBjb25zdCBwYXJhbSA9IG5ldyBRdWVyeVBhcmFtZXRlcnMoe1xuICAgICAgaWQ6IHRoaXMuc2VxdWVuY2VOdW1iZXIsXG4gICAgICBxOiB0aGlzLnNlYXJjaFRleHQsXG4gICAgICBtYXhOdW1iZXJPZlN1Z2dlc3Rpb25zOiB0aGlzLm1heFN1Z2dlc2lvbkNvdW50XG4gICAgfSk7XG5cbiAgICBzd2l0Y2ggKHRoaXMuc29ydENyaXRlcmlhKSB7XG4gICAgICBjYXNlICdQJzpcbiAgICAgICAgcGFyYW0uc29ydEJ5UG9zdGFsQ29kZSh0cnVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0wnOlxuICAgICAgICBwYXJhbS5zb3J0QnlMb2NhbGl0eW5hbWUodHJ1ZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtO1xuICB9XG5cbiAgZ2V0VG9wU3VnZ2VzdGlvbnMoc291cmNlPzogU291cmNlVHlwZSkge1xuICAgIHRoaXMuc2VxdWVuY2VOdW1iZXIgKz0gMTtcbiAgICBjb25zdCBwYXJhbSA9IHRoaXMuZ2VuZXJhdGVQYXJhbWV0ZXJzKCk7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnTE9DQUxJVFkgY2FsbGluZyBzZXJ2aWNlIHBhcmFtcycsIHBhcmFtKTsgfVxuICAgIGlmICh0aGlzLnNlYXJjaFRleHQpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5hZGRyZXNzU2VydmljZS5nZXRMb2NhbGl0eSh0aGlzLmJhc2VVcmwsIHBhcmFtKS5zdWJzY3JpYmUoXG4gICAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsb2NhbGl0eSBzdWdnZXN0aW9ucyByZWNlaXZlZDonLCByZXNwb25zZSk7IH1cbiAgICAgICAgICB0aGlzLmhhbmRsZUdldExvY2FsaXR5UmVzcG9uc2UocmVzcG9uc2UsIHNvdXJjZSk7XG4gICAgICAgICAgaWYgKHNvdXJjZSA9PT0gU291cmNlVHlwZS5TT1VSQ0VfUFJFRklMTEVEKSB7XG4gICAgICAgICAgICB0aGlzLmlzUHJlZmlsbFdpdGhOb01hdGNoID0gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsTXVuaWNpcGFsaXR5UGVyZmVjdE1hdGNoRm91bmQgPT09IHRydWUgPyBmYWxzZSA6IHRydWU7XG4gICAgICAgICAgICB0aGlzLnByZWZpbGxBbmFseXplRGF0YSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNQcmVmaWxsV2l0aE5vTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLFxuICAgICAgICAoKSA9PiB0aGlzLmhhbmRsZUdldExvY2FsaXR5RXJyb3Ioc291cmNlKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBnZXRUZXh0Q29sb3IoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHRoaXMuaXNQcmVmaWxsV2l0aE5vTWF0Y2ggPT09IHRydWUpID8gJ29yYW5nZXJlZCcgOiAnJztcbiAgfVxuXG4gIGhhbmRsZUdldExvY2FsaXR5UmVzcG9uc2UoZGF0YTogYW55LCBzb3VyY2U/OiBTb3VyY2VUeXBlKSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgY29uc29sZS5sb2coJ2hhbmRsZUdldExvY2FsaXR5UmVzcG9uc2UnLCBkYXRhKTtcbiAgICB9XG4gICAgaWYgKGRhdGEgJiYgZGF0YS5yZXNwb25zZSAmJiBkYXRhLnJlc3BvbnNlLnNlcXVlbmNlTnVtYmVyICYmIGRhdGEucmVzcG9uc2Uuc2VxdWVuY2VOdW1iZXIgPj0gdGhpcy5jb25zdW1lZE51bWJlciAmJlxuICAgICAgZGF0YS5yZXNwb25zZS50b3BTdWdnZXN0aW9ucykge1xuICAgICAgdGhpcy5jb25zdW1lZE51bWJlciA9IGRhdGEucmVzcG9uc2Uuc2VxdWVuY2VOdW1iZXI7XG4gICAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvbnMoKTtcbiAgICAgIHRoaXMucGFyc2VUb3BTdWdnZXN0aW9ucyhkYXRhLnJlc3BvbnNlLnRvcFN1Z2dlc3Rpb25zLCBzb3VyY2UpO1xuICAgICAgdGhpcy5idWlsZFR5cGVBaGVhZChzb3VyY2UpO1xuICAgICAgdGhpcy5jbGVhckNvbm5lY3Rpb25FcnJvck1lc3NhZ2UoKTtcbiAgICAgIHRoaXMuYnVpbGRJbnB1dFdvcmRMaXN0KCk7XG4gICAgfVxuICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9ICh0aGlzLnByZWZpbGxpbmcgPT09IHRydWUgJiYgdGhpcy5wcmVmaWxsRGF0YSAhPT0gbnVsbClcbiAgICAgID8gIXRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5vbkZvY3VzU2hvd1N1Z2dlc3Rpb25zQWZ0ZXJQcmVmaWxsIDogZmFsc2U7XG4gIH1cblxuICBoYW5kbGVHZXRMb2NhbGl0eUVycm9yKHNvdXJjZT86IFNvdXJjZVR5cGUpIHtcbiAgICBpZiAodGhpcy5hbGxvd05vVmFsaWRhdGlvbiAmJiB0aGlzLnZhbGlkYXRlZEJ5QmFja2VuZCkge1xuICAgICAgdGhpcy5udW1iZXJPZkV4Y2VwdGlvbnMgKz0gMTtcbiAgICAgIHRoaXMubnVtYmVyT2ZFeGNlcHRpb25zRW1pdHRlci5lbWl0KHRoaXMubnVtYmVyT2ZFeGNlcHRpb25zKTtcbiAgICAgIHRoaXMuc2V0Q29ubmVjdGlvbkVycm9yTWVzc2FnZSgpO1xuICAgIH1cbiAgICBpZih0aGlzLmFsbG93Tm9WYWxpZGF0aW9uICYmIHRoaXMudmFsaWRhdGVkQnlCYWNrZW5kICYmIHNvdXJjZSA9PT0gU291cmNlVHlwZS5TT1VSQ0VfUFJFRklMTEVEKXtcblxuICAgICAgdGhpcy5udW1iZXJPZkV4Y2VwdGlvbnMrPTE7XG4gICAgICB0aGlzLm51bWJlck9mRXhjZXB0aW9uc0VtaXR0ZXIuZW1pdCh0aGlzLm51bWJlck9mRXhjZXB0aW9ucyk7XG4gICAgICB0aGlzLnNldENvbm5lY3Rpb25FcnJvck1lc3NhZ2UoKTtcbiAgICAgIHRoaXMub25JbnB1dENoYW5nZShzb3VyY2UpO1xuICAgIH1cbiAgICBpZih0aGlzLmFsbG93Tm9WYWxpZGF0aW9uICYmICF0aGlzLnZhbGlkYXRlZEJ5QmFja2VuZCAmJiBzb3VyY2UgPT09IFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRCAgKVxuICAgIHtcbiAgICAgIHRoaXMub25JbnB1dENoYW5nZShzb3VyY2UpO1xuICAgIH1cbiAgICBpZighdGhpcy5hbGxvd05vVmFsaWRhdGlvbiAmJiB0aGlzLnZhbGlkYXRlZEJ5QmFja2VuZClcbiAgICB7XG4gICAgICB0aGlzLnNldENvbm5lY3Rpb25FcnJvck1lc3NhZ2UoKTtcbiAgICB9XG4gICAgLy8gdGhpcy5zZXRDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCk7XG5cbiAgfVxuXG4gIGlzQnJvd3NlcklFKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvbXNpZVxcc3x0cmlkZW50XFwvfGVkZ2VcXC8vaS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgfVxuXG4gIGlzRHJvcGRvd25DbGlja2VkKGV2KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXYuZXhwbGljaXRPcmlnaW5hbFRhcmdldCB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgIHJldHVybiAodGFyZ2V0LmlkID09PSAnYnBhYWMtbG9jYWxpdHktZHJvcGRvd24nKTtcbiAgfVxuXG4gIGlzU3RyaW5nKHZhbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWwuY29uc3RydWN0b3IgPT09IFN0cmluZztcbiAgfVxuXG4gIGxvYWRQYXJhbXMocHJlZmlsbERhdGE6IFByZWZpbGxEYXRhKSB7XG4gICAgLy8gdGhpcy5jbGVhcldpZGdldCgpO1xuICAgIGxldCBjb25jYXRTdHIgPSAnJztcbiAgICBpZiAocHJlZmlsbERhdGEgIT09IG51bGwgJiYgcHJlZmlsbERhdGEucGFyYW1ldGVycyAhPT0gbnVsbCkge1xuICAgICAgaWYgKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuaGFzT3duUHJvcGVydHkoJ21pbkxldmVsJykpIHtcbiAgICAgICAgdGhpcy5taW5MZXZlbCA9IHByZWZpbGxEYXRhLnBhcmFtZXRlcnMubWluTGV2ZWw7XG4gICAgICB9XG5cbiAgICAgIC8qXG4gICAgICBpZiAocHJlZmlsbERhdGEucGFyYW1ldGVycy5oYXNPd25Qcm9wZXJ0eSgndW5zdHJ1Y3R1cmVkQWRkcmVzcycpICYmIHRoaXMuaXNTdHJpbmcocHJlZmlsbERhdGEucGFyYW1ldGVycy51bnN0cnVjdHVyZWRBZGRyZXNzKSkge1xuICAgICAgICBjb25jYXRTdHIgPSBwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnVuc3RydWN0dXJlZEFkZHJlc3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocHJlZmlsbERhdGEucGFyYW1ldGVycy5oYXNPd25Qcm9wZXJ0eSgncG9zdGFsQ29kZScpICYmIHRoaXMuaXNTdHJpbmcocHJlZmlsbERhdGEucGFyYW1ldGVycy5wb3N0YWxDb2RlKSkge1xuICAgICAgICAgIGNvbmNhdFN0ciA9IHByZWZpbGxEYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJlZmlsbERhdGEucGFyYW1ldGVycy5oYXNPd25Qcm9wZXJ0eSgnbXVuaWNpcGFsaXR5TmFtZScpICYmIHRoaXMuaXNTdHJpbmcocHJlZmlsbERhdGEucGFyYW1ldGVycy5tdW5pY2lwYWxpdHlOYW1lKSkge1xuICAgICAgICAgIGNvbmNhdFN0ciArPSAnICcgKyBwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICovXG5cbiAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdwb3N0YWxDb2RlJykgJiYgdGhpcy5pc1N0cmluZyhwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnBvc3RhbENvZGUpKSB7XG4gICAgICAgIGNvbmNhdFN0ciA9IHByZWZpbGxEYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdtdW5pY2lwYWxpdHlOYW1lJykgJiYgdGhpcy5pc1N0cmluZyhwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWUpKSB7XG4gICAgICAgIGNvbmNhdFN0ciArPSAnICcgKyBwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmNhdFN0cjtcbiAgfVxuXG4gIG1heVNob3dDbGVhckJ1dHRvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zZWFyY2hUZXh0Lmxlbmd0aCA+IDA7XG4gIH1cblxuICBtYXlBZGRUeXBlQWhlYWQoKSB7XG4gICAgaWYgKHRoaXMuc2VhcmNoVGV4dC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuICgvW15cXHMsIFxcXFxcXC9dJC8pLnRlc3QodGhpcy5zZWFyY2hUZXh0KTtcbiAgfVxuXG4gIG5vdEVxdWFsSWdub3JlQ2FzZShvbGRWYWw6IHN0cmluZywgbmV3VmFsOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gb2xkVmFsLnRvTG93ZXJDYXNlKCkgIT09IG5ld1ZhbC50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgb25CbHVyKGV2KSB7XG4gICAgaWYgKHRoaXMuaXNCcm93c2VySUUoKSAmJiB0aGlzLmlzRHJvcGRvd25DbGlja2VkKGV2KSkge1xuICAgICAgdGhpcy5sb2NhbGl0eVNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2tpcE5leHRCbHVyKSB7XG4gICAgICB0aGlzLnNraXBOZXh0Qmx1ciA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSB0cnVlO1xuICAgICAgdGhpcy5ibHVyRXZlbnQuZW1pdChBRERSRVNTTEVWRUwuTE9DQUxJVFkpO1xuICAgIH1cbiAgfVxuXG4gIG9uRm9jdXMoKSB7XG4gICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gZmFsc2U7XG4gICAgLy8gdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gKHRoaXMucHJlZmlsbGluZyA9PT0gdHJ1ZSAmJiB0aGlzLnByZWZpbGxEYXRhICE9PSBudWxsKVxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgID8gIXRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5vbkZvY3VzU2hvd1N1Z2dlc3Rpb25zQWZ0ZXJQcmVmaWxsIDogZmFsc2U7XG4gICAgLy8gdGhpcy5wcmVmaWxsaW5nID0gZmFsc2U7XG4gICAgdGhpcy5za2lwTmV4dEJsdXIgPSBmYWxzZTtcbiAgICB0aGlzLmZvY3VzRXZlbnQuZW1pdChBRERSRVNTTEVWRUwuTE9DQUxJVFkpO1xuICB9XG5cbiAgb25JbnB1dENsaWNrKCkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xvY2FsaXR5IGNsaWNrJyk7IH1cblxuICB9XG5cbiAgb25JbnB1dENoYW5nZShzb3VyY2U/OiBTb3VyY2VUeXBlKSB7XG4gICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gZmFsc2U7XG4gICAgdGhpcy5yZXNldEFycm93U2VsZWN0ZWRJbmRleCgpO1xuICAgIGlmICghc291cmNlKSB7XG4gICAgICB0aGlzLnByZWZpbGxpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2VkKCk7XG4gICAgfVxuICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICBpZiAodGhpcy5zZWFyY2hUZXh0ID09PSAnJykge1xuICAgICAgdGhpcy5zZXF1ZW5jZU51bWJlciArPSAxO1xuICAgICAgdGhpcy5jb25zdW1lZE51bWJlciA9IHRoaXMuc2VxdWVuY2VOdW1iZXI7XG4gICAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvbnMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlZEJ5QmFja2VuZCkge1xuICAgICAgICBpZiAoc291cmNlID09PSBTb3VyY2VUeXBlLlNPVVJDRV9QUkVGSUxMRUQpIHtcbiAgICAgICAgICB0aGlzLmNsZWFyVHlwZUFoZWFkKCk7XG4gICAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsTXVuaWNpcGFsaXR5UGVyZmVjdE1hdGNoRm91bmQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eUFuZExvY2FsaXR5UGVyZmVjdE1hdGNoRm91bmQgPSB0cnVlO1xuICAgICAgICAgIGNvbnN0IG11bmljaXBhbGl0eU5hbWUgPSB0aGlzLnNlYXJjaFRleHQucmVwbGFjZSgvXFxkKy9nLCAnJykudHJpbSgpO1xuICAgICAgICAgIGNvbnN0IHBvc3RhbENvZGUgPSB0aGlzLnNlYXJjaFRleHQubWF0Y2goL1xcZCsvZyk/LmpvaW4oXCJcIik7XG4gICAgICAgICAgbGV0IHN1Z2dlc3Rpb24gPSB7XG4gICAgICAgICAgJ2FkZHJlc3MnOntcbiAgICAgICAgICAgICdzdHJpbmcnOiB0aGlzLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAnbXVuaWNpcGFsaXR5TmFtZSc6IG11bmljaXBhbGl0eU5hbWUgPyBtdW5pY2lwYWxpdHlOYW1lLnRvVXBwZXJDYXNlKCkgOiAnJyxcbiAgICAgICAgICAgICdsb2NhbGl0eU5hbWUnOiBtdW5pY2lwYWxpdHlOYW1lLFxuICAgICAgICAgICAgJ3Bvc3RhbENvZGUnOiBwb3N0YWxDb2RlLFxuICAgICAgICAgICAgJ3NlYXJjaEJhclN0cmluZyc6IHRoaXMuc2VhcmNoVGV4dFxuICAgICAgICAgIH19XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eVBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9uO1xuICAgICAgICB0aGlzLmlzUHJlZmlsbFdpdGhOb01hdGNoID0gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsTXVuaWNpcGFsaXR5UGVyZmVjdE1hdGNoRm91bmQgPT09IHRydWUgPyBmYWxzZSA6IHRydWU7XG4gICAgICAgIHRoaXMucHJlZmlsbEFuYWx5emVEYXRhKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICB0aGlzLmlzUHJlZmlsbFdpdGhOb01hdGNoID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5jbGVhclR5cGVBaGVhZCgpO1xuICAgICAgICAgIHRoaXMucmVzZXRBcnJvd1NlbGVjdGVkSW5kZXgoKTtcbiAgICAgICAgICBjb25zdCBtdW5pY2lwYWxpdHlOYW1lID0gdGhpcy5zZWFyY2hUZXh0LnJlcGxhY2UoL1xcZCsvZywgJycpLnRyaW0oKTtcbiAgICAgICAgICBjb25zdCBwb3N0YWxDb2RlID0gdGhpcy5zZWFyY2hUZXh0Lm1hdGNoKC9cXGQrL2cpPy5qb2luKFwiXCIpO1xuICAgICAgICAgIGxldCBzdWdnZXN0aW9uID0ge1xuICAgICAgICAgICAgJ3N0cmluZyc6IHRoaXMuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICdtdW5pY2lwYWxpdHlOYW1lJzogbXVuaWNpcGFsaXR5TmFtZSA/IG11bmljaXBhbGl0eU5hbWUudG9VcHBlckNhc2UoKSA6ICcnLFxuICAgICAgICAgICAgJ2xvY2FsaXR5TmFtZSc6IG11bmljaXBhbGl0eU5hbWUsXG4gICAgICAgICAgICAncG9zdGFsQ29kZSc6IHBvc3RhbENvZGUsXG4gICAgICAgICAgICAnc2VhcmNoQmFyU3RyaW5nJzogdGhpcy5zZWFyY2hUZXh0XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRBZGRyZXNzKHN1Z2dlc3Rpb24pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmdldFRvcFN1Z2dlc3Rpb25zKHNvdXJjZSk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKCdMaWJBdXRvY29tcGxldGVMb2NhbGl0eUNvbXBvbmVudDo6b25JbnB1dENoYW5nZSAtIGJlZm9yZScsIHRoaXMud29yZExpc3QpO1xuICAgIHRoaXMuYnVpbGRJbnB1dFdvcmRMaXN0KCk7XG4gICAgLy8gY29uc29sZS5sb2coJ0xpYkF1dG9jb21wbGV0ZUxvY2FsaXR5Q29tcG9uZW50OjpvbklucHV0Q2hhbmdlIC0gYWZ0ZXInLCB0aGlzLndvcmRMaXN0KTtcbiAgfVxuXG4gIHBhcnNlU2luZ2xlU3VnZ2VzdGlvbihzdWdnZXN0aW9uOiBhbnksIHNvdXJjZTogU291cmNlVHlwZSkge1xuICAgIGxldCBzdWdnZXN0aW9uVG9BZGQ6IGFueTtcbiAgICBpZiAodGhpcy5sb2NhbGVTZXJ2aWNlLmlzTG9jYWxlRnJlbmNoKCkgJiYgc3VnZ2VzdGlvbi5oYXNPd25Qcm9wZXJ0eSgnZnJlbmNoJykpIHtcbiAgICAgIHN1Z2dlc3Rpb25Ub0FkZCA9IHN1Z2dlc3Rpb24uZnJlbmNoO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sb2NhbGVTZXJ2aWNlLmlzTG9jYWxlRHV0Y2goKSAmJiBzdWdnZXN0aW9uLmhhc093blByb3BlcnR5KCdkdXRjaCcpKSB7XG4gICAgICBzdWdnZXN0aW9uVG9BZGQgPSBzdWdnZXN0aW9uLmR1dGNoO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sb2NhbGVTZXJ2aWNlLmlzTG9jYWxlR2VybWFuKCkgJiYgc3VnZ2VzdGlvbi5oYXNPd25Qcm9wZXJ0eSgnZ2VybWFuJykpIHtcbiAgICAgIHN1Z2dlc3Rpb25Ub0FkZCA9IHN1Z2dlc3Rpb24uZ2VybWFuO1xuICAgIH0gZWxzZSBpZiAoc3VnZ2VzdGlvbi5oYXNPd25Qcm9wZXJ0eSgnYWRkcmVzcycpKSB7XG4gICAgICBzdWdnZXN0aW9uVG9BZGQgPSBzdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgfVxuICAgIGlmIChzdWdnZXN0aW9uVG9BZGQpIHtcbiAgICAgIGlmIChzdWdnZXN0aW9uLm1lc3NhZ2VzKSB7XG4gICAgICAgIHN1Z2dlc3Rpb25Ub0FkZC5tZXNzYWdlcyA9IHN1Z2dlc3Rpb24ubWVzc2FnZXM7XG4gICAgICB9XG4gICAgICB0aGlzLnN1Z2dlc3Rpb25zLnB1c2goc3VnZ2VzdGlvblRvQWRkKTtcbiAgICAgIGlmICh0aGlzLm1lc3NhZ2VPcHRpb24gPT09ICdZJyAmJiBzdWdnZXN0aW9uVG9BZGQuaGFzT3duUHJvcGVydHkoJ21lc3NhZ2VzJykpIHtcbiAgICAgICAgZm9yIChjb25zdCBtIG9mIHN1Z2dlc3Rpb25Ub0FkZC5tZXNzYWdlcykge1xuICAgICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRNZXNzYWdlID0gdGhpcy50cmFuc2xhdGVNZXNzYWdlKG0pO1xuICAgICAgICAgIGlmICh0cmFuc2xhdGVkTWVzc2FnZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbS50cmFuc2xhdGVkTWVzc2FnZSA9IHRyYW5zbGF0ZWRNZXNzYWdlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHNvdXJjZSA9PT0gU291cmNlVHlwZS5TT1VSQ0VfUFJFRklMTEVEKSB7XG4gICAgICAgIHN1Z2dlc3Rpb24uYWRkcmVzcyA9IHN1Z2dlc3Rpb25Ub0FkZDtcbiAgICAgICAgdGhpcy5wcmVmaWxsQ2hlY2tGb3JQZXJmZWN0TWF0Y2goc3VnZ2VzdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJlZmlsbENoZWNrRm9yUGVyZmVjdE1hdGNoKHN1Z2dlc3Rpb24pIHtcbiAgICBjb25zdCBzdWdBZGRyZXNzID0gc3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgIGlmICggLyohIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eVBlcmZlY3RNYXRjaEZvdW5kICYmKi8gc3VnQWRkcmVzcy5wb3N0YWxDb2RlID09PSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZSkge1xuICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgICBjb25zb2xlLmxvZygnTE9DQUxJVFkgLSBQUkVGSUxMIC0gY2hlY2tpbmcgc3VnZ2VzdGlvbiBmb3IgcGVyZmVjdCBtYXRjaCcsIHRoaXMucHJlZmlsbERhdGEsIHN1Z2dlc3Rpb24pO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3VnZ2VzdGlvbkxvY2FsaXR5ID0gdGhpcy50cmFuc2Zvcm1NdW5pY2lwYWxpdHlJbkxvd2VyY2FzZUFuZFdpdGhvdXREaWFjcml0aWNzKHN1Z0FkZHJlc3MubG9jYWxpdHlOYW1lKTtcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25NdW5pY2lwYWxpdHkgPSB0aGlzLnRyYW5zZm9ybU11bmljaXBhbGl0eUluTG93ZXJjYXNlQW5kV2l0aG91dERpYWNyaXRpY3Moc3VnQWRkcmVzcy5tdW5pY2lwYWxpdHlOYW1lKTtcbiAgICAgIGlmIChzdWdnZXN0aW9uTG9jYWxpdHkuc3RhcnRzV2l0aCh0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlOYW1lKVxuICAgICAgICB8fCBzdWdnZXN0aW9uTXVuaWNpcGFsaXR5LnN0YXJ0c1dpdGgodGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsTXVuaWNpcGFsaXR5TmFtZSkpIHtcbiAgICAgICAgaWYgKHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eUFuZExvY2FsaXR5UGVyZmVjdE1hdGNoRm91bmQgPT09IHRydWUpIHtcbiAgICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdMT0NBTElUWSAtIFBSRUZJTEwgLSBza2lwcGluZyBzdWdnZXN0aW9uOicsIHN1Z2dlc3Rpb24pOyB9XG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0xPQ0FMSVRZIC0gUFJFRklMTCAtIGtlZXBpbmcgc3VnZ2VzdGlvbjonLFxuICAgICAgICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsTXVuaWNpcGFsaXR5UGVyZmVjdE1hdGNoRm91bmQgPSB0cnVlO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uID0gc3VnZ2VzdGlvbjtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gc3VnQWRkcmVzcy5wb3N0YWxDb2RlICsgJyAnICsgc3VnQWRkcmVzcy5sb2NhbGl0eU5hbWU7XG5cbiAgICAgICB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlBbmRMb2NhbGl0eVBlcmZlY3RNYXRjaEZvdW5kID0gKHN1Z2dlc3Rpb25Mb2NhbGl0eS5zdGFydHNXaXRoKHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eU5hbWUpXG4gICAgICAgICAgJiYgc3VnZ2VzdGlvbk11bmljaXBhbGl0eS5zdGFydHNXaXRoKHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eU5hbWUpKSA/IHRydWUgOiBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsTXVuaWNpcGFsaXR5QW5kTG9jYWxpdHlQZXJmZWN0TWF0Y2hGb3VuZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ0xPQ0FMSVRZIC0gUFJFRklMTCAtIFBlcmZlY3QgbWF0Y2ggLSBNdW5pY2lwYWxpdHkgJiBsb2NhdGlvbjonLCBzdWdnZXN0aW9uKTsgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ0xPQ0FMSVRZIC0gUFJFRklMTCAtIE5PIFBlcmZlY3QgbWF0Y2g6Jywgc3VnZ2VzdGlvbik7IH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByZWZpbGxBbmFseXplRGF0YSgpIHtcblxuICAgIGlmICh0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlQZXJmZWN0TWF0Y2hGb3VuZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5wcmVmaWxsRXZlbnRFbWl0dGVyLmVtaXQoLyp0aGlzLnByZWZpbGxEYXRhKi8gbmV3IFByZWZpbGxFdmVudChBRERSRVNTTEVWRUwuTE9DQUxJVFksIHRoaXMucHJlZmlsbERhdGEpKTtcbiAgfVxuXG5cblxuICBwYXJzZVRvcFN1Z2dlc3Rpb25zKHRvcFN1Z2dlc3Rpb25zLCBzb3VyY2U6IFNvdXJjZVR5cGUpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsb2NhbGl0eSAtIHBhcnNlIHN1Z2dlc3Rpb25zJywgdG9wU3VnZ2VzdGlvbnMpOyB9XG4gICAgaWYgKHRvcFN1Z2dlc3Rpb25zLmNvbnN0cnVjdG9yID09PSBBcnJheSkge1xuICAgICAgLy8gdG9wU3VnZ2VzdGlvbnMuZm9yRWFjaCh0aGlzLnBhcnNlU2luZ2xlU3VnZ2VzdGlvbi5iaW5kKHRoaXMpKTtcbiAgICAgIGZvciAoY29uc3Qgc3VnIG9mIHRvcFN1Z2dlc3Rpb25zKSB7XG4gICAgICAgIHRoaXMucGFyc2VTaW5nbGVTdWdnZXN0aW9uKHN1Zywgc291cmNlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYXJzZVNpbmdsZVN1Z2dlc3Rpb24odG9wU3VnZ2VzdGlvbnMsIHNvdXJjZSk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRBcnJvd1NlbGVjdGVkSW5kZXgoKSB7XG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gLTE7XG4gIH1cblxuICBzdGFydHNXaXRoSWdub3JlRGlhY3JpdGljcyh2YWx1ZTogc3RyaW5nLCBwcmVmaXg6IHN0cmluZyk6IG51bWJlciB7XG4gICAgLy8gY29uc29sZS5sb2coJ1NlYXJjaGluZyBmb3IgcHJlZml4IFwiJyArIHByZWZpeCArICdcIiBpbnNpZGUgc3VnZ2VzdGlvbjogJyArIHZhbHVlKTtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICAgIGNvbnN0IF92YWx1ZSA9IHRoaXMudW5pY29kZVNlcnZpY2UucmVtb3ZlRGlhY3JpdGljcygodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkgPyB2YWx1ZS50b0xvd2VyQ2FzZSgpIDogdmFsdWUpO1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG4gICAgY29uc3QgX3ByZWZpeCA9IHRoaXMudW5pY29kZVNlcnZpY2UucmVtb3ZlRGlhY3JpdGljcygocHJlZml4ICE9PSBudWxsICYmIHByZWZpeCAhPT0gdW5kZWZpbmVkKSA/IHByZWZpeC50b0xvd2VyQ2FzZSgpIDogcHJlZml4KTtcbiAgICBjb25zdCBzdGFydCA9IF92YWx1ZS5pbmRleE9mKF9wcmVmaXgpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdzdGFydHNXaXRoSWdub3JlRGlhY3JpdGljczogJyArIHN0YXJ0KTtcbiAgICByZXR1cm4gc3RhcnQ7XG4gIH1cblxuICB2YWx1ZUNoYW5nZWQoKSB7XG4gICAgdGhpcy50ZXh0Q2hhbmdlRXZlbnQuZW1pdCh0aGlzLnNlYXJjaFRleHQpO1xuICB9XG5cbiAgY2xlYXJJbnB1dChmb2N1cz8sIGVtaXQ6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgLy8gdGhpcy5jbGVhclN1Z2dlc3Rpb25zKCk7XG4gICAgLy8gdGhpcy5icFR5cGVBaGVhZCA9ICcnO1xuICAgIC8vIHRoaXMuc2V0U2VhcmNoVGV4dCgnJyk7XG4gICAgdGhpcy5jbGVhcldpZGdldCgpO1xuICAgIHRoaXMucmVzZXRBcnJvd1NlbGVjdGVkSW5kZXgoKTtcbiAgICB0aGlzLnByZXZpb3VzSW5kZXggPSAtMTtcbiAgICB0aGlzLmxhc3RTZWFyY2hWYWx1ZSA9ICcnO1xuICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICB0aGlzLmNsZWFyU2VsZWN0ZWRBZGRyZXNzKCk7XG4gICAgdGhpcy52YWx1ZUNoYW5nZWQoKTtcbiAgICAvLyB0aGlzLmNsZWFyQ29ubmVjdGlvbkVycm9yTWVzc2FnZSgpO1xuICAgIGlmIChmb2N1cyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5sb2NhbGl0eVNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKGVtaXQpIHtcbiAgICAgICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgvKidMT0NBTElUWScqLyBJbnB1dE5hbWVUeXBlLkxPQ0FMSVRZKTtcbiAgICAgIC8vICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgvKidTVFJFRVQnKi8gSW5wdXROYW1lVHlwZS5TVFJFRVQpO1xuICAgICAgLy8gIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KC8qJ1NUUkVFVF9OVU1CRVInKi8gSW5wdXROYW1lVHlwZS5TVFJFRVRfTlVNQkVSKTtcbiAgICAgIC8vICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgvKidCT1hfTlVNQkVSJyovIElucHV0TmFtZVR5cGUuQk9YX05VTUJFUik7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJTZWFyY2hUZXh0KCkge1xuICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xuICB9XG5cbiAgY2xlYXJTZWxlY3RlZEFkZHJlc3MoKSB7XG4gICAgdGhpcy5hZGRyZXNzQ2hhbmdlZC5lbWl0KG51bGwpO1xuICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkID0gZmFsc2U7XG4gIH1cblxuICBjbGVhclN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSgpIHtcbiAgICB0aGlzLmFkZHJlc3NJc1ZhbGlkYXRlZCA9IGZhbHNlO1xuICAgIHRoaXMuc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlID0gJyc7XG4gICAgLy8gdGhpcy5tZXNzYWdlQ2hhbmdlZC5lbWl0KHRoaXMuc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlKTtcbiAgICB0aGlzLm1lc3NhZ2VDaGFuZ2VkLmVtaXQoeyBtZXNzYWdlVHlwZTogbnVsbCwgdHJhbnNsYXRlZE1lc3NhZ2U6IHRoaXMuc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlIH0pO1xuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25zID0gbnVsbDtcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlQ29kZSA9IG51bGw7XG4gIH1cblxuICBjbGVhclN1Z2dlc3Rpb25zKCkge1xuICAgIHRoaXMud29yZExpc3QgPSBbXTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgdGhpcy5zdWdnZXN0aW9uc1dvcmRMaXN0ID0gW107XG4gICAgLy8gY29uc29sZS5sb2coJ0xpYkF1dG9jb21wbGV0ZUxvY2FsaXR5Q29tcG9uZW50OjpjbGVhclN1Z2dlc3Rpb25zJywgdGhpcy53b3JkTGlzdCk7XG4gICAgLy8gdGhpcy5zdWdnZXN0aW9uTWVzc2FnZXMgPSAgW107XG4gIH1cblxuICBjbGlja1N1Z2dlc3Rpb24oZXZlbnQ6IGFueSwgc3VnZ2VzdGlvbjogYW55KSB7XG4gICAgdGhpcy5pc1ByZWZpbGxXaXRoTm9NYXRjaCA9IGZhbHNlO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5jbGVhclR5cGVBaGVhZCgpO1xuICAgIHRoaXMucmVzZXRBcnJvd1NlbGVjdGVkSW5kZXgoKTtcbiAgICB0aGlzLnNldFNlYXJjaFRleHQoc3VnZ2VzdGlvbi5zdHJpbmcpO1xuICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IHRydWU7XG4gICAgLy8gaWYgKHN1Z2dlc3Rpb24uaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSkge1xuICAgIC8vICAgdGhpcy5zaG93QWRkcmVzc0lzVmFsaWRhdGVkKCk7XG4gICAgLy8gfVxuICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkID0gdHJ1ZTtcbiAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvbnMoKTtcbiAgICB0aGlzLnNldFNlbGVjdGVkQWRkcmVzcyhzdWdnZXN0aW9uKTtcbiAgfVxuXG4gIGNsZWFyV2lkZ2V0KCkge1xuICAgIHRoaXMuY2xlYXJTZWFyY2hUZXh0KCk7XG4gICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25zKCk7XG4gICAgdGhpcy5jbGVhclR5cGVBaGVhZCgpO1xuICAgIHRoaXMucHJlZmlsbERhdGEgPSBudWxsO1xuICAgIHRoaXMucHJlZmlsbGluZyA9IGZhbHNlO1xuICB9XG5cbiAgY3Vyc29ySXNPblN1Z2dlc3Rpb25MaXN0KCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSW5kZXggPj0gMDtcbiAgfVxuXG4gIG9uQ2hhbmdlZExhbmd1YWdlKCkge1xuICAgIC8vIHRoaXMucGxhY2VIb2xkZXJUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2xvY2FsaXR5LnBsYWNlaG9sZGVyLmlucHV0LXBsYWNlaG9sZGVyJyk7XG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldCgnbG9jYWxpdHkucGxhY2Vob2xkZXIuaW5wdXQtcGxhY2Vob2xkZXInKVxuICAgICAgLnN1YnNjcmliZSgocmVzOiBzdHJpbmcpID0+IHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ25ldyBwbGFjZWhvbGRlcicsIHJlcyk7XG4gICAgICAgIC8vID0+ICdoZWxsbyB3b3JsZCdcbiAgICAgICAgdGhpcy5wbGFjZUhvbGRlclRleHQgPSByZXM7XG4gICAgICB9KTtcbiAgfVxuXG4gIGNoYW5nZVNlbGVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG1vdmVBcnJvd1NlbGVjdGVkSW5kZXhEb3duKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkSW5kZXggKyAxICE9PSB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZWxlY3RlZEluZGV4Kys7XG4gICAgICB0aGlzLmNoYW5nZVNlbGVjdGlvbigpO1xuICAgICAgdGhpcy5zZXRTZWFyY2hUZXh0QmFzZWRPbkFycm93U2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWRJbmRleCwgdGhpcy5zZWxlY3RlZEluZGV4IC0gMSk7XG4gICAgfVxuICB9XG5cbiAgbW92ZUFycm93U2VsZWN0ZWRJbmRleFVwKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkSW5kZXggLSAxICE9PSAtMikge1xuICAgICAgdGhpcy5zZWxlY3RlZEluZGV4LS07XG4gICAgICB0aGlzLmNoYW5nZVNlbGVjdGlvbigpO1xuICAgICAgdGhpcy5zZXRTZWFyY2hUZXh0QmFzZWRPbkFycm93U2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWRJbmRleCwgdGhpcy5zZWxlY3RlZEluZGV4ICsgMSk7XG4gICAgfVxuICB9XG4gIGNoZWNrS2V5VVAoZXZlbnQpXG4gIHtcbiAgICBzd2l0Y2ggKGV2ZW50LndoaWNoKSB7XG4gICAgICBcbiAgICAgIGNhc2UgODpcbiAgICAgICBcbiAgICAgICAgaWYodGhpcy5zZWFyY2hUZXh0Lmxlbmd0aD4wKVxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoJ1BBUlRJQUxfQ0xFQVJfTE9DQUxJVFknKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgnTE9DQUxJVFknKTtcbiAgICAgICAgICAvLyB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgnU1RSRUVUJyk7XG4gICAgICAgICAgLy8gdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoJ1NUUkVFVF9OVU1CRVInKTtcbiAgICAgICAgICAvLyB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgnQk9YX05VTUJFUicpO1xuICAgICAgICAvLyAgdGhpcy5jbGVhcklucHV0KHRydWUpO1xuICAgICAgICB9XG4gICAgICAgICBicmVhazsgICAgICAgICBcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5jbGVhclR5cGVBaGVhZCgpO1xuICAgICAgICBicmVhaztcblxuICAgIH1cbiAgICBcbiAgfVxuICBjaGVja0tleURvd24oZXZlbnQpIHtcbiAgICBcbiAgICBzd2l0Y2ggKGV2ZW50LndoaWNoKSB7XG4gICAgICAvLyBkb3duIGtleSwgaW5jcmVtZW50IHNlbGVjdGVkSW5kZXhcbiAgICAgIGNhc2UgNDA6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMubW92ZUFycm93U2VsZWN0ZWRJbmRleERvd24oKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIC8vIHVwIGtleSwgZGVjcmVtZW50IHNlbGVjdGVkSW5kZXhcbiAgICAgIGNhc2UgMzg6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMubW92ZUFycm93U2VsZWN0ZWRJbmRleFVwKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gcmlnaHQgYXJyb3cga2V5XG4gICAgICBjYXNlIDM5OlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5jdXJzb3JJc09uU3VnZ2VzdGlvbkxpc3QoKSkge1xuICAgICAgICAgIHRoaXMuY2xpY2tTdWdnZXN0aW9uKGV2ZW50LCB0aGlzLnN1Z2dlc3Rpb25zW3RoaXMuc2VsZWN0ZWRJbmRleF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLnR5cGVBaGVhZFdvcmQgJiYgdGhpcy50eXBlQWhlYWRJc1Nob3duKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U2VhcmNoVGV4dCh0aGlzLmJwVHlwZUFoZWFkKTtcbiAgICAgICAgICAgIHRoaXMudHlwZUFoZWFkV29yZCA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIC8vIHRhYiBrZXlcbiAgICAgIGNhc2UgOTpcbiAgICAgICAgaWYgKCF0aGlzLmFkZHJlc3NJc1ZhbGlkYXRlZCkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RGaXJzdEluTGlzdE9mU3VnZ2VzaW9ucygpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDQ2OlxuICAgICAgICBpZiAoZXZlbnQuY3RybEtleSkge1xuICAgICAgICAgIHRoaXMuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIC8vIGVudGVyIHByZXNzZWRcbiAgICAgIGNhc2UgMTM6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICh0aGlzLmN1cnNvcklzT25TdWdnZXN0aW9uTGlzdCgpKSB7XG4gICAgICAgICAgdGhpcy5jbGlja1N1Z2dlc3Rpb24oZXZlbnQsIHRoaXMuc3VnZ2VzdGlvbnNbdGhpcy5zZWxlY3RlZEluZGV4XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmNsZWFyVHlwZUFoZWFkKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgfVxuICB9XG5cbiAgc2V0Q29ubmVjdGlvbkVycm9yTWVzc2FnZSgpIHtcbiAgICB0aGlzLmVycm9yQ29kZSA9IC8qJ3NlcnZpY2UtdW5hdmFpbGFibGUnKi8gVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLlNlcnZpY2VfVW5hdmFpbGFibGU7XG4gICAgLy8gdGhpcy5zZXRWYWxpZGF0aW9uTWVzc2FnZSh0aGlzLmVycm9yQ29kZSk7XG4gICAgdGhpcy5lbWl0VHJhbnNsYXRlZFZhbGlkYXRpb25NZXNzYWdlKFZhbGlkYXRpb25NZXNzYWdlVHlwZS5TZXJ2aWNlX1VuYXZhaWxhYmxlKTtcbiAgfVxuXG4gIHNldFNlbGVjdGVkQWRkcmVzcyhzdWdnZXN0aW9uOiBhbnkpIHtcbiAgICB0aGlzLmFkZHJlc3NDaGFuZ2VkLmVtaXQoc3VnZ2VzdGlvbik7XG4gIH1cblxuICB0cmFuc2xhdGVNZXNzYWdlKG1lc3NhZ2UpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1lc3NhZ2VLZXkgPSBtZXNzYWdlLmtleTtcbiAgICBzd2l0Y2ggKG1lc3NhZ2VLZXkpIHtcbiAgICAgIGNhc2UgJ3N1YmwnOiB7XG4gICAgICAgIC8vIGFyZ3MgbGVuZ3RoIG11c3QgYmUgMiAhXG4gICAgICAgIGlmIChtZXNzYWdlLmFyZ3MgJiYgbWVzc2FnZS5hcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnbG9jYWxpdHkuc3VnZ2VzdGlvbi5tZXNzYWdlLnN1YmwnLCB7IHN1YjogbWVzc2FnZS5hcmdzWzBdLCBwcmluY2lwYWw6IG1lc3NhZ2UuYXJnc1sxXSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6YWxpZ25cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHlwZUFoZWFkSXNTaG93bigpIHtcbiAgICByZXR1cm4gdGhpcy5icFR5cGVBaGVhZCAmJiB0aGlzLmJwVHlwZUFoZWFkLmxlbmd0aCA+IDA7XG4gIH1cblxuICBzZWxlY3RGaXJzdEluTGlzdE9mU3VnZ2VzaW9ucygpIHtcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAwO1xuICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uKCk7XG4gICAgdGhpcy5zZXRTZWFyY2hUZXh0QmFzZWRPbkFycm93U2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWRJbmRleCwgdGhpcy5zZWxlY3RlZEluZGV4IC0gMSk7XG4gIH1cblxuICBzZXRTZWFyY2hUZXh0KHZhbHVlKSB7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gdmFsdWU7XG4gIH1cblxuICBzZXRTZWFyY2hUZXh0QmFzZWRPbkFycm93U2VsZWN0aW9uKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgaWYgKG5ld1ZhbCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIDw9IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG5ld1ZhbCAhPT0gLTEpIHtcbiAgICAgIGlmIChvbGRWYWwgPT09IC0xKSB7XG4gICAgICAgIHRoaXMubGFzdFNlYXJjaFZhbHVlID0gdGhpcy5zZWFyY2hUZXh0O1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTZWFyY2hUZXh0KHRoaXMuc3VnZ2VzdGlvbnNbdGhpcy5zZWxlY3RlZEluZGV4XS5zdHJpbmcpO1xuICAgICAgdGhpcy5jbGVhclR5cGVBaGVhZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFNlYXJjaFRleHQodGhpcy5sYXN0U2VhcmNoVmFsdWUpO1xuICAgIH1cbiAgfVxuXG59XG4iLCI8c3BhbiAqbmdJZj1cImxhYmVsUmVzb3VyY2VLZXlcIj57eyBsYWJlbFJlc291cmNlS2V5IHwgdHJhbnNsYXRlfX08L3NwYW4+XG48ZGl2IGNsYXNzPVwiYnBhYWMtZHJvcGRvd25cIj5cbiAgICA8ZGl2IGNsYXNzPVwiYnBhYWMtc2VhcmNoLWJhclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnBhYWMtaW5wdXQtd2lkdGhcIj5cbiAgICAgICAgXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiAjbG9jYWxpdHlTZWFyY2hJbnB1dCBjbGFzcz1cImJwYWFjLWlucHV0XCIgXG4gICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgIChrZXl1cCkgPSAoY2hlY2tLZXlVUCgkZXZlbnQpKVxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImNoZWNrS2V5RG93bigkZXZlbnQpXCIgKGlucHV0KT1cIm9uSW5wdXRDaGFuZ2UoKVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIiBnZXRUZXh0Q29sb3IoKSBcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiIGlkPVwibG9jYWxpdHlJbnB1dEZpZWxkXCIgW2F0dHIucGxhY2Vob2xkZXJdPVwicGxhY2VIb2xkZXJUZXh0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiIChmb2N1cyk9XCJvbkZvY3VzKClcIiAoY2xpY2spPVwib25JbnB1dENsaWNrKClcIi8+XG4gICAgICAgICAgICA8ZGl2IGlkPVwiYnBhYWMtY2xlYXItbG9jYWxpdHktYnV0dG9uXCIgXG4gICAgICAgICAgICAgICAgICpuZ0lmPVwibWF5U2hvd0NsZWFyQnV0dG9uKClcIlxuICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJJbnB1dCh0cnVlKVwiIGNsYXNzPVwiYnBhYWMtY2xlYXJcIj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPCEtLTxkaXYgbmctdHJhbnNjbHVkZT48L2Rpdj4tLT5cbiAgICAgICAgPGlucHV0IGlkPVwiYnBhYWMtbG9jYWxpdHktdHlwZWFoZWFkXCIgdHlwZT1cInRleHRcIiBkaXNhYmxlZCBhdXRvY29tcGxldGU9XCJvZmZcIiBbKG5nTW9kZWwpXT1cImJwVHlwZUFoZWFkXCIgLz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IFtoaWRkZW5dPVwiY29sbGFwc2VEcm9wZG93blwiIGNsYXNzPVwiYnBhYWMtZHJvcGRvd24tbWVudS1jb250YWluZXJcIiAqbmdJZj1cInN1Z2dlc3Rpb25zICYmIHN1Z2dlc3Rpb25zLmxlbmd0aD4wXCI+XG4gICAgICAgIDxkaXYgI2xvY2FsaXR5TGlzdCBbYXBwVmlzaWJsZVN1Z2dlc3Rpb25dPVwidmlzaWJsZVN1Z2dlc3Rpb25Db3VudFwiIGlkPVwiYnBhYWMtbG9jYWxpdHktZHJvcGRvd25cIiBcbiAgICAgICAgICAgIGNsYXNzPVwiYnBhYWMtZHJvcGRvd24tbWVudVwiPlxuICAgICAgICAgICAgPHVsIHJvbGU9XCJsaXN0Ym94XCIgaWQ9XCJicGFhYy1sb2NhbGl0eS1zdWdnZXN0aW9uc0xpc3RcIiBjbGFzcz1cImxpc3QtdW5zdHlsZWRcIj5cbiAgICAgICAgICAgICAgICA8bGkgcm9sZT1cIm9wdGlvblwiIFxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHN1Z2dlc3Rpb25zOyBsZXQgaWR4ID0gaW5kZXhcIiBcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhY3RpdmUnOihzZWxlY3RlZEluZGV4PT1pZHgpfVwiIChtb3VzZWRvd24pPVwiY2xpY2tTdWdnZXN0aW9uKCRldmVudCwgb3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cInNlbGVjdGVkSW5kZXg9aWR4XCIgKG1vdXNlbGVhdmUpPVwic2VsZWN0ZWRJbmRleD0tMVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm9wdGlvblwiIFtpbm5lckh0bWxdPVwib3B0aW9uLnN0cmluZyB8IGhpZ2hsaWdodFN1Z2dlc3Rpb24gOiB3b3JkTGlzdFwiPjwvc3Bhbj4gXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibWVzc2FnZU9wdGlvbiA9PT0gJ1AnICYmIG9wdGlvbi5tZXNzYWdlc1wiPiAoe3tvcHRpb24ubXVuaWNpcGFsaXR5TmFtZX19KTwvc3Bhbj48YnIgLz5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2VPcHRpb24gPT09ICdZJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IG1lc3NhZ2Ugb2Ygb3B0aW9uLm1lc3NhZ2VzXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnBhYWMtc3VnZ2VzdGlvbi1tZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySHRtbF09XCJtZXNzYWdlLnRyYW5zbGF0ZWRNZXNzYWdlXCI+PC9zcGFuPiBcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
|
|
848
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpdHkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGliLWFkZHJlc3MtYXV0b2NvbXBsZXRlLWJ5LWNvbXBvbmVudC9zcmMvbGliL2xvY2FsaXR5L2xvY2FsaXR5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYi1hZGRyZXNzLWF1dG9jb21wbGV0ZS1ieS1jb21wb25lbnQvc3JjL2xpYi9sb2NhbGl0eS9sb2NhbGl0eS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUE2RSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0osT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUtsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXRELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7QUFPeEQsTUFBTSxPQUFPLGlCQUFpQjtJQTJFNUIsWUFDVSxjQUE4QixFQUM5QixhQUE0QixFQUM1QixnQkFBa0MsRUFDbEMsY0FBOEI7UUFIOUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBMUV4QyxhQUFh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Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGtDQUFrQztzQkFBMUMsS0FBSztnQkFHTyxTQUFTO3NCQUFyQixLQUFLO2dCQVVOLFVBQVU7c0JBRFQsS0FBSztnQkFFRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFSSxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUVHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyx5QkFBeUI7c0JBQWxDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIFNpbXBsZUNoYW5nZXMsIEFmdGVyVmlld0NoZWNrZWQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFZhbGlkYXRpb25NZXNzYWdlVHlwZSB9IGZyb20gJy4uL2VudW0vdmFsaWRhdGlvbi1tZXNzYWdlLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBBRERSRVNTTEVWRUwgfSBmcm9tICcuLi9lbnVtL2FkZHJlc3MtbGV2ZWwuZW51bSc7XG5pbXBvcnQgeyBRdWVyeVBhcmFtZXRlcnMgfSBmcm9tICcuLi9tb2RlbC9xdWVyeS1wYXJhbWV0ZXJzLm1vZGVsJztcbmltcG9ydCB7IEFkZHJlc3NTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYWRyZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTG9jYWxlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvY2FsZS5zZXJ2aWNlJztcbmltcG9ydCB7IFVuaWNvZGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdW5pY29kZS5zZXJ2aWNlJztcbmltcG9ydCB7IERvbUhhbmRsZXIgfSBmcm9tICcuLi91dGlscy9kb21oYW5kbGVyJztcbmltcG9ydCB7IFNvdXJjZVR5cGUgfSBmcm9tICcuLi9lbnVtL3NvdXJjZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgUHJlZmlsbERhdGEgfSBmcm9tICcuLi91dGlscy9wcmVmaWxsLWRhdGEnO1xuaW1wb3J0IHsgUHJlZmlsbEV2ZW50IH0gZnJvbSAnLi4vdXRpbHMvcHJlZmxsbC5ldmVudCc7XG5pbXBvcnQgeyBJbnB1dE5hbWVUeXBlIH0gZnJvbSAnLi4vZW51bS9pbnB1dC1uYW1lLmVudW0nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdicC1sb2NhbGl0eScsXG4gIHRlbXBsYXRlVXJsOiAnLi9sb2NhbGl0eS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2xvY2FsaXR5LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTG9jYWxpdHlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBBZnRlclZpZXdDaGVja2VkIHtcblxuICBAVmlld0NoaWxkKCdsb2NhbGl0eVNlYXJjaElucHV0JywgeyBzdGF0aWM6IGZhbHNlIH0pIGxvY2FsaXR5U2VhcmNoSW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2xvY2FsaXR5TGlzdCcsIHsgc3RhdGljOiBmYWxzZSB9KSBsb2NhbGl0eUxpc3Q6IEVsZW1lbnRSZWY7XG5cbiAgLy8gMjAyMC0wNi0xNVxuICAvKiAgIEBJbnB1dCgpXG4gICAgb25Gb2N1c1Nob3dTdWdnZXN0aW9uc0FmdGVyUHJlZmlsbCA9IHRydWU7ICovXG5cbiAgQElucHV0KCkgbGFiZWxSZXNvdXJjZUtleSA9ICdjb21tb24ubGFiZWwucG9zdGFsQ29kZSc7XG4gIEBJbnB1dCgpIG1lc3NhZ2VPcHRpb24gPSAnWSc7XG4gIEBJbnB1dCgpIG1heFN1Z2dlc2lvbkNvdW50ID0gNTtcbiAgQElucHV0KCkgdmlzaWJsZVN1Z2dlc3Rpb25Db3VudCA9IDU7XG4gIEBJbnB1dCgpIHNvcnRDcml0ZXJpYSA9ICcnO1xuICBASW5wdXQoKSBiYXNlVXJsOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlucHV0VGV4dDogc3RyaW5nO1xuICAvLyBASW5wdXQoKSBhZGRyZXNzUGFyYW1zOiBQcmVmaWxsZWRQYXJhbWV0ZXJzO1xuICBASW5wdXQoKSBwcmVmaWxsRGF0YTogUHJlZmlsbERhdGE7XG4gIEBJbnB1dCgpIHNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUgPSB0cnVlO1xuICBASW5wdXQoKSBpbmNsdWRlTGlzdE9mQm94ZXM6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGluY2x1ZGVMaXN0T2ZCdXNpbmVzc05hbWVXaXRoQm94ZXM6Ym9vbGVhbjtcblxuICAvLyBAdHMtaWdub3JlXG4gIEBJbnB1dCgpIHNldCBpbnB1dExhbmcodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxvY2FsZVNlcnZpY2UuY2hhbmdlTGFuZyh2YWwpO1xuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS51c2UodmFsKS5zdWJzY3JpYmUoXG4gICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZWRMYW5ndWFnZSgpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBASW5wdXQoKVxuICBpc1JlYWRvbmx5ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFsbG93Tm9WYWxpZGF0aW9uOiBib29sZWFuO1xuICBASW5wdXQoKSB2YWxpZGF0ZWRCeUJhY2tlbmQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIG51bWJlck9mRXhjZXB0aW9uczogbnVtYmVyO1xuXG4gIEBPdXRwdXQoKSBtZXNzYWdlQ2hhbmdlZDogRXZlbnRFbWl0dGVyPHsgbWVzc2FnZVR5cGU6IFZhbGlkYXRpb25NZXNzYWdlVHlwZSwgdHJhbnNsYXRlZE1lc3NhZ2U6IHN0cmluZyB9PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGFkZHJlc3NDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGZvY3VzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgYmx1ckV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHRleHRDaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBjbGVhcklucHV0RXZlbnRFbWl0dGVyOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgcHJlZmlsbEV2ZW50RW1pdHRlcjogRXZlbnRFbWl0dGVyPFByZWZpbGxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFByZWZpbGxFdmVudD4oKTtcbiAgQE91dHB1dCgpIG51bWJlck9mRXhjZXB0aW9uc0VtaXR0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIC8vIGluc3RhbmNlIHByb3BlcnRpZXNcbiAgYWRkcmVzc0lzVmFsaWRhdGVkOiBib29sZWFuO1xuICBicFR5cGVBaGVhZDogc3RyaW5nO1xuICBjb2xsYXBzZURyb3Bkb3duOiBib29sZWFuO1xuICBjb25zdW1lZE51bWJlcjogbnVtYmVyO1xuICBlcnJvckNvZGU6IGFueTtcbiAgbGFzdFNlYXJjaFZhbHVlOiBzdHJpbmc7XG4gIG1pbkxldmVsOiBhbnk7XG4gIHBsYWNlSG9sZGVyVGV4dDogc3RyaW5nO1xuICBwcmV2aW91c0luZGV4OiBudW1iZXI7XG4gIHNlYXJjaFRleHQ6IHN0cmluZz0nJztcbiAgc2VsZWN0ZWRJbmRleDogbnVtYmVyO1xuICBzZWxlY3Rpb25DaGFuZ2VkOiBib29sZWFuO1xuICBzZXF1ZW5jZU51bWJlcjogbnVtYmVyO1xuICBza2lwTmV4dEJsdXI6IGJvb2xlYW47IC8vIE9uQmx1ciBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBjbGlja3Mgc3VnZ2VzdGlvbi92YWxpZGF0b3IgYnV0dG9uXG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBzdWdnZXN0aW9uczogQXJyYXk8YW55PjtcbiAgc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlOiBzdHJpbmc7XG4gIHN1Z2dlc3Rpb25zV29yZExpc3Q6IGFueTtcbiAgdHlwZUFoZWFkV29yZDogc3RyaW5nO1xuICB2YWxpZGF0aW9uTWVzc2FnZUNvZGUgPSBudWxsO1xuICB2YWxpZGF0aW9uTWVzc2FnZU9wdGlvbnMgPSBudWxsO1xuICB3b3JkTGlzdDogYW55O1xuICBwcmVmaWxsVHlwZTpTb3VyY2VUeXBlIDtcblxuICBwcmVmaWxsaW5nID0gZmFsc2U7XG4gIGlzUHJlZmlsbFdpdGhOb01hdGNoID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhZGRyZXNzU2VydmljZTogQWRkcmVzc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBsb2NhbGVTZXJ2aWNlOiBMb2NhbGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHVuaWNvZGVTZXJ2aWNlOiBVbmljb2RlU2VydmljZSxcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFRleHQ7XG4gICAgLy8gaW5zdGFuY2UgcHJvcGVydGllc1xuICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5zdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgdGhpcy5wcmV2aW91c0luZGV4ID0gLTE7XG4gICAgdGhpcy5sYXN0U2VhcmNoVmFsdWUgPSAnJztcbiAgICB0aGlzLndvcmRMaXN0ID0gW107XG4gICAgdGhpcy5zdWdnZXN0aW9uc1dvcmRMaXN0ID0gW107XG4gICAgdGhpcy5icFR5cGVBaGVhZCA9ICcnO1xuICAgIHRoaXMucGxhY2VIb2xkZXJUZXh0ID0gJyc7XG4gICAgdGhpcy5za2lwTmV4dEJsdXIgPSBmYWxzZTsgLy8gT25CbHVyIGlzIHRyaWdnZXJlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBzdWdnZXN0aW9uL3ZhbGlkYXRvciBidXR0b25cbiAgICB0aGlzLmVycm9yQ29kZSA9IG51bGw7XG4gICAgLy8gc2NvcGUgcHJvcGVydGllc1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xO1xuICAgIC8vIHByb3BlcnRpZXNcbiAgICB0aGlzLnR5cGVBaGVhZFdvcmQgPSAnJztcbiAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSBmYWxzZTtcbiAgICB0aGlzLnNlcXVlbmNlTnVtYmVyID0gMDtcbiAgICB0aGlzLmNvbnN1bWVkTnVtYmVyID0gMDtcbiAgICAvLyBpbml0aWFsaXphdGlvblxuICAgIHRoaXMuc2V0U2VhcmNoVGV4dCgnJyk7XG4gICAgdGhpcy5vbkNoYW5nZWRMYW5ndWFnZSgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbkNoYW5nZWQpIHtcbiAgICAgIGNvbnN0IG92ZXJsYXk6IEhUTUxEaXZFbGVtZW50ID0gdGhpcy5sb2NhbGl0eUxpc3QubmF0aXZlRWxlbWVudDtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBsaXN0SXRlbSA9IERvbUhhbmRsZXIuZmluZFNpbmdsZShvdmVybGF5LCAnbGkuYWN0aXZlJyk7XG4gICAgICAgIGlmIChsaXN0SXRlbSkge1xuICAgICAgICAgIERvbUhhbmRsZXIuc2Nyb2xsSW5WaWV3KG92ZXJsYXksIGxpc3RJdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSwgMSk7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG5cbiAgICBcbiAgICBpZiAoY2hhbmdlcykge1xuXG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgncHJlZmlsbERhdGEnKSAmJiAhY2hhbmdlcy5wcmVmaWxsRGF0YS5maXJzdENoYW5nZSkge1xuICAgICAgICB0aGlzLnByZWZpbGxpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSB0aGlzLmxvYWRQYXJhbXMoY2hhbmdlcy5wcmVmaWxsRGF0YS5jdXJyZW50VmFsdWUpO1xuXG4gICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xvY2FsaXR5OjpuZ09uQ2hhbmdlcyAtIGxvYWRQYXJhbWUgcmVzdWx0OicsIHRoaXMuc2VhcmNoVGV4dCk7IH1cbiAgICAgICAgdGhpcy5icFR5cGVBaGVhZCA9ICcnO1xuICAgICAgICBpZiAodGhpcy5zZWFyY2hUZXh0ICE9PSAnJyAmJiB0aGlzLm1pbkxldmVsID09PSBBRERSRVNTTEVWRUwuTE9DQUxJVFkpIHtcbiAgICAgICAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSB0cnVlO1xuICAgICAgICAgIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eU5hbWVcbiAgICAgICAgICAgID0gdGhpcy50cmFuc2Zvcm1NdW5pY2lwYWxpdHlJbkxvd2VyY2FzZUFuZFdpdGhvdXREaWFjcml0aWNzKHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5tdW5pY2lwYWxpdHlOYW1lKTtcbiAgICAgICAgICB0aGlzLm9uSW5wdXRDaGFuZ2UoLyoncHJlZmlsbGVkJyovIFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdpbnB1dFRleHQnKSAmJiAhY2hhbmdlcy5pbnB1dFRleHQuZmlyc3RDaGFuZ2UpIHtcbiAgICAgIFxuICAgICAgICBcbiAgICAgICAgaWYgKHRoaXMubm90RXF1YWxJZ25vcmVDYXNlKHRoaXMuc2VhcmNoVGV4dCwgY2hhbmdlcy5pbnB1dFRleHQuY3VycmVudFZhbHVlKSkge1xuICAgICAgICAgIHRoaXMuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSBjaGFuZ2VzLmlucHV0VGV4dC5jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8qXG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnYmFzZVVybCcpICYmICFjaGFuZ2VzLmJhc2VVcmwuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5jbGVhcldpZGdldCgpO1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0ZWRBZGRyZXNzKCk7XG4gICAgICB9XG4gICAgICAqL1xuXG4gICAgICAvLyBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgndmFsaWRhdGVkQnlCYWNrZW5kJykgJiYgY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgncHJlZmlsbERhdGEnKSkge1xuICAgICAgLy8gICB0aGlzLm9uSW5wdXRDaGFuZ2UoU291cmNlVHlwZS5TT1VSQ0VfUFJFRklMTEVEKVxuICAgICAgLy8gfVxuXG4gICAgfVxuICB9XG5cbiAgdHJhbnNmb3JtTXVuaWNpcGFsaXR5SW5Mb3dlcmNhc2VBbmRXaXRob3V0RGlhY3JpdGljcyhtdW5pY2lwYWxpdHlOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCByZXN1bHQ6IHN0cmluZyA9IG51bGw7XG4gICAgaWYgKG11bmljaXBhbGl0eU5hbWUgIT09IG51bGwgJiYgbXVuaWNpcGFsaXR5TmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLnVuaWNvZGVTZXJ2aWNlLnJlbW92ZURpYWNyaXRpY3MobXVuaWNpcGFsaXR5TmFtZSk7XG4gICAgICByZXN1bHQgPSByZXN1bHQudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygncHJlZmlsbCBtdW5pY2lwYWxpdHknLCByZXN1bHQpOyB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBidWlsZElucHV0V29yZExpc3QoKSB7XG4gICAgdGhpcy53b3JkTGlzdCA9IHRoaXMuc2VhcmNoVGV4dC5zcGxpdCgvW1xccywgXSsvKTtcbiAgICAvLyBjb25zb2xlLmxvZygnTGliQXV0b2NvbXBsZXRlTG9jYWxpdHlDb21wb25lbnQ6OmJ1aWxkSW5wdXRXb3JkTGlzdCcsIHRoaXMud29yZExpc3QpO1xuICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25zICYmIHRoaXMud29yZExpc3QpIHtcbiAgICAgIGZvciAoY29uc3Qgc3VnIG9mIHRoaXMuc3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgaWYgKCFzdWcgfHwgIXN1Zy5oYXNPd25Qcm9wZXJ0eSgnc3RyaW5nJykpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHcgb2YgdGhpcy53b3JkTGlzdCkge1xuICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5zdGFydHNXaXRoSWdub3JlRGlhY3JpdGljcyhzdWcuc3RyaW5nIGFzIHN0cmluZywgdyBhcyBzdHJpbmcpO1xuICAgICAgICAgIGlmIChzdGFydCA+PSAwKSB7XG4gICAgICAgICAgICBjb25zdCB3dyA9IHN1Zy5zdHJpbmcuc3Vic3RyKHN0YXJ0LCB3Lmxlbmd0aCk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnYWRkaW5nIHdvcmQ6JyArIHd3KTtcbiAgICAgICAgICAgIC8vIHd3IGlzIGEgY2FuZGlkYXRlIHRvIGJlIGFkZGVkIHRvIHRoZSB3b3JkbGlzdCBpZiBub3QgYWxyZWFkeSBwcmVzZW50IGluIGl0XG4gICAgICAgICAgICBjb25zdCBwcmVzZW50ID0gdGhpcy53b3JkTGlzdC5maW5kKCh3MTogc3RyaW5nKSA9PiB3MS50b0xvd2VyQ2FzZSgpID09PSB3dy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgIGlmIChwcmVzZW50ID09PSBudWxsIHx8IHByZXNlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB0aGlzLndvcmRMaXN0LnB1c2god3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0cmluZ1N0YXJ0c1dpdGhJZ25vcmVEaWFjcml0aWNzKHZhbHVlLCBwcmVmaXgpIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICAgIGNvbnN0IF92YWx1ZSA9IHRoaXMudW5pY29kZVNlcnZpY2UucmVtb3ZlRGlhY3JpdGljcygodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkgPyB2YWx1ZS50b0xvd2VyQ2FzZSgpIDogdmFsdWUpO1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG4gICAgY29uc3QgX3ByZWZpeCA9IHRoaXMudW5pY29kZVNlcnZpY2UucmVtb3ZlRGlhY3JpdGljcygocHJlZml4ICE9PSBudWxsICYmIHByZWZpeCAhPT0gdW5kZWZpbmVkKSA/IHByZWZpeC50b0xvd2VyQ2FzZSgpIDogcHJlZml4KTtcbiAgICBjb25zdCBzdGFydCA9IF92YWx1ZS5zbGljZSgwLCBfcHJlZml4Lmxlbmd0aCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKF9wcmVmaXgpICE9PSAtMTtcbiAgICByZXR1cm4gc3RhcnQ7XG4gIH1cblxuICBidWlsZFR5cGVBaGVhZChzb3VyY2U6IFNvdXJjZVR5cGUpIHtcbiAgICBpZiAoc291cmNlID09PSBTb3VyY2VUeXBlLlNPVVJDRV9QUkVGSUxMRUQpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgaWYgKCF0aGlzLm1heUFkZFR5cGVBaGVhZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNlYXJjaFRleHRXb3JkcyA9IHRoaXMuc2VhcmNoVGV4dC5zcGxpdCgvW1xccywgXSsvKTtcbiAgICBjb25zdCBsYXN0V29yZCA9IHNlYXJjaFRleHRXb3Jkc1tzZWFyY2hUZXh0V29yZHMubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAodGhpcy5zdWdnZXN0aW9ucy5zb21lKGZ1bmN0aW9uIChzdWcpIHtcbiAgICAgIGlmICghc3VnIHx8ICFzdWcuaGFzT3duUHJvcGVydHkoJ3N0cmluZycpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWcuc3RyaW5nLnNwbGl0KC9bXFxzLV0rLykuc29tZShmdW5jdGlvbiAod29yZCkge1xuICAgICAgICBpZiAodGhpcy5zdHJpbmdTdGFydHNXaXRoSWdub3JlRGlhY3JpdGljcyh3b3JkLCBsYXN0V29yZCkpIHtcbiAgICAgICAgICB0aGlzLnR5cGVBaGVhZFdvcmQgPSB3b3JkO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9LmJpbmQodGhpcykpO1xuICAgIH0uYmluZCh0aGlzKSkpIHtcbiAgICAgIGNvbnN0IGFwcGVuZGl4ID0gdGhpcy50eXBlQWhlYWRXb3JkLnNsaWNlKGxhc3RXb3JkLmxlbmd0aCwgdGhpcy50eXBlQWhlYWRXb3JkLmxlbmd0aCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIHRoaXMuYnBUeXBlQWhlYWQgPSB0aGlzLnNlYXJjaFRleHQgKyBhcHBlbmRpeDtcbiAgICB9XG4gIH1cblxuICBjbGVhckNvbm5lY3Rpb25FcnJvck1lc3NhZ2UoKSB7XG4gICAgaWYgKHRoaXMuZXJyb3JDb2RlKSB7XG4gICAgICAvKlxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldCh0aGlzLmVycm9yQ29kZS8gKiwge3ZhbHVlOiAnd29ybGQnfSogLykuc3Vic2NyaWJlKChyZXM6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHJlcyk7XG4gICAgICAgICAgLy8gPT4gJ2hlbGxvIHdvcmxkJ1xuICAgICAgICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSA9PT0gcmVzICkge1xuICAgICAgICAgICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSgpO1xuICAgICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgKi9cblxuICAgICAgY29uc3QgcmVzID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGhpcy5lcnJvckNvZGUpO1xuICAgICAgaWYgKHRoaXMuc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlID09PSByZXMpIHtcbiAgICAgICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSgpO1xuICAgICAgfVxuICAgICAgLypcbiAgICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSA9PT0gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKHRoaXMuZXJyb3JDb2RlKSkge1xuICAgICAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlKCk7XG4gICAgICB9XG4gICAgICAqL1xuICAgICAgdGhpcy5lcnJvckNvZGUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyVHlwZUFoZWFkKCkge1xuICAgIHRoaXMuYnBUeXBlQWhlYWQgPSAnJztcbiAgfVxuXG4gIGVtaXRUcmFuc2xhdGVkVmFsaWRhdGlvbk1lc3NhZ2UodmFsaWRhdGlvbk1lc3NhZ2VUeXBlOiBWYWxpZGF0aW9uTWVzc2FnZVR5cGUsIG9wdGlvbnM/OiBzdHJpbmdbXSkge1xuICAgIC8vIE1vbWVudGx5LCBvcHRpb25zIGFyZSBOT1QgdXNlZDsgc28gZGF0YSB0eXBlIG9mIHRoZXNlIG9wdGlvbnMgd2lsbCBiZSByZXZpZXdlZCBvbmNlIG5lZWRlZC5cbiAgICBpZiAodmFsaWRhdGlvbk1lc3NhZ2VUeXBlID09PSBudWxsIHx8IHZhbGlkYXRpb25NZXNzYWdlVHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1VuYWJsZSB0byBlbWl0IHZhbGlkYXRpb24gbWVzc2FnZSAtIG1lc3NhZ2Uga2V5IGlzIGludmFsaWQhJywgdmFsaWRhdGlvbk1lc3NhZ2VUeXBlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHZhbGlkYXRpb25NZXNzYWdlVHlwZSkge1xuXG4gICAgICBjYXNlIFZhbGlkYXRpb25NZXNzYWdlVHlwZS5BZGRyZXNzX05vdF9Gb3VuZDpcbiAgICAgIGNhc2UgVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLkFkZHJlc3NfVmFsaWRhdGVkOlxuICAgICAgY2FzZSBWYWxpZGF0aW9uTWVzc2FnZVR5cGUuU2VydmljZV9VbmF2YWlsYWJsZToge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2NvbW1vbi5tZXNzYWdlLicgKyB2YWxpZGF0aW9uTWVzc2FnZVR5cGUpO1xuICAgICAgICAvLyB0aGlzLm1lc3NhZ2VDaGFuZ2VkLmVtaXQobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubWVzc2FnZUNoYW5nZWQuZW1pdCh7IG1lc3NhZ2VUeXBlOiB2YWxpZGF0aW9uTWVzc2FnZVR5cGUsIHRyYW5zbGF0ZWRNZXNzYWdlOiBtZXNzYWdlIH0pO1xuICAgICAgfVxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6YWxpZ25cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignVW5hYmxlIHRvIGVtaXQgdmFsaWRhdGlvbiBtZXNzYWdlIC0gbWVzc2FnZSBrZXkgTk9UIHN1cHBvcnRlZCEnLCB2YWxpZGF0aW9uTWVzc2FnZVR5cGUpO1xuICAgICAgfVxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6YWxpZ25cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gIH1cblxuICBnZW5lcmF0ZVBhcmFtZXRlcnMoKTogUXVlcnlQYXJhbWV0ZXJzIHtcbiAgICBjb25zdCBwYXJhbSA9IG5ldyBRdWVyeVBhcmFtZXRlcnMoe1xuICAgICAgaWQ6IHRoaXMuc2VxdWVuY2VOdW1iZXIsXG4gICAgICBxOiB0aGlzLnNlYXJjaFRleHQsXG4gICAgICBtYXhOdW1iZXJPZlN1Z2dlc3Rpb25zOiB0aGlzLm1heFN1Z2dlc2lvbkNvdW50XG4gICAgfSk7XG5cbiAgICBzd2l0Y2ggKHRoaXMuc29ydENyaXRlcmlhKSB7XG4gICAgICBjYXNlICdQJzpcbiAgICAgICAgcGFyYW0uc29ydEJ5UG9zdGFsQ29kZSh0cnVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0wnOlxuICAgICAgICBwYXJhbS5zb3J0QnlMb2NhbGl0eW5hbWUodHJ1ZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cdFxuXHRpZih0aGlzLmluY2x1ZGVMaXN0T2ZCb3hlcyl7XG4gICAgICBwYXJhbS5zZXRJbmNsdWRlTGlzdE9mQm94ZXModHJ1ZSk7XG4gICAgfVxuICAgIGlmKHRoaXMuaW5jbHVkZUxpc3RPZkJ1c2luZXNzTmFtZVdpdGhCb3hlcyl7XG4gICAgICBwYXJhbS5zZXRJbmNsdWRlTGlzdE9mQnVzaW5lc3NOYW1lV2l0aEJveGVzKHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyYW07XG4gIH1cblxuICBnZXRUb3BTdWdnZXN0aW9ucyhzb3VyY2U/OiBTb3VyY2VUeXBlKSB7XG4gICAgdGhpcy5zZXF1ZW5jZU51bWJlciArPSAxO1xuICAgIGNvbnN0IHBhcmFtID0gdGhpcy5nZW5lcmF0ZVBhcmFtZXRlcnMoKTtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdMT0NBTElUWSBjYWxsaW5nIHNlcnZpY2UgcGFyYW1zJywgcGFyYW0pOyB9XG4gICAgaWYgKHRoaXMuc2VhcmNoVGV4dCkge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmFkZHJlc3NTZXJ2aWNlLmdldExvY2FsaXR5KHRoaXMuYmFzZVVybCwgcGFyYW0pLnN1YnNjcmliZShcbiAgICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xvY2FsaXR5IHN1Z2dlc3Rpb25zIHJlY2VpdmVkOicsIHJlc3BvbnNlKTsgfVxuICAgICAgICAgIHRoaXMuaGFuZGxlR2V0TG9jYWxpdHlSZXNwb25zZShyZXNwb25zZSwgc291cmNlKTtcbiAgICAgICAgICBpZiAoc291cmNlID09PSBTb3VyY2VUeXBlLlNPVVJDRV9QUkVGSUxMRUQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNQcmVmaWxsV2l0aE5vTWF0Y2ggPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlQZXJmZWN0TWF0Y2hGb3VuZCA9PT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucHJlZmlsbEFuYWx5emVEYXRhKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1ByZWZpbGxXaXRoTm9NYXRjaCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAsXG4gICAgICAgICgpID0+IHRoaXMuaGFuZGxlR2V0TG9jYWxpdHlFcnJvcihzb3VyY2UpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGdldFRleHRDb2xvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiAodGhpcy5pc1ByZWZpbGxXaXRoTm9NYXRjaCA9PT0gdHJ1ZSkgPyAnb3JhbmdlcmVkJyA6ICcnO1xuICB9XG5cbiAgaGFuZGxlR2V0TG9jYWxpdHlSZXNwb25zZShkYXRhOiBhbnksIHNvdXJjZT86IFNvdXJjZVR5cGUpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICBjb25zb2xlLmxvZygnaGFuZGxlR2V0TG9jYWxpdHlSZXNwb25zZScsIGRhdGEpO1xuICAgIH1cbiAgICBpZiAoZGF0YSAmJiBkYXRhLnJlc3BvbnNlICYmIGRhdGEucmVzcG9uc2Uuc2VxdWVuY2VOdW1iZXIgJiYgZGF0YS5yZXNwb25zZS5zZXF1ZW5jZU51bWJlciA+PSB0aGlzLmNvbnN1bWVkTnVtYmVyICYmXG4gICAgICBkYXRhLnJlc3BvbnNlLnRvcFN1Z2dlc3Rpb25zKSB7XG4gICAgICB0aGlzLmNvbnN1bWVkTnVtYmVyID0gZGF0YS5yZXNwb25zZS5zZXF1ZW5jZU51bWJlcjtcbiAgICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9ucygpO1xuICAgICAgdGhpcy5wYXJzZVRvcFN1Z2dlc3Rpb25zKGRhdGEucmVzcG9uc2UudG9wU3VnZ2VzdGlvbnMsIHNvdXJjZSk7XG4gICAgICB0aGlzLmJ1aWxkVHlwZUFoZWFkKHNvdXJjZSk7XG4gICAgICB0aGlzLmNsZWFyQ29ubmVjdGlvbkVycm9yTWVzc2FnZSgpO1xuICAgICAgdGhpcy5idWlsZElucHV0V29yZExpc3QoKTtcbiAgICB9XG4gICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gKHRoaXMucHJlZmlsbGluZyA9PT0gdHJ1ZSAmJiB0aGlzLnByZWZpbGxEYXRhICE9PSBudWxsKVxuICAgICAgPyAhdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm9uRm9jdXNTaG93U3VnZ2VzdGlvbnNBZnRlclByZWZpbGwgOiBmYWxzZTtcbiAgfVxuXG4gIGhhbmRsZUdldExvY2FsaXR5RXJyb3Ioc291cmNlPzogU291cmNlVHlwZSkge1xuICAgIGlmICh0aGlzLmFsbG93Tm9WYWxpZGF0aW9uICYmIHRoaXMudmFsaWRhdGVkQnlCYWNrZW5kKSB7XG4gICAgICB0aGlzLm51bWJlck9mRXhjZXB0aW9ucyArPSAxO1xuICAgICAgdGhpcy5udW1iZXJPZkV4Y2VwdGlvbnNFbWl0dGVyLmVtaXQodGhpcy5udW1iZXJPZkV4Y2VwdGlvbnMpO1xuICAgICAgdGhpcy5zZXRDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCk7XG4gICAgfVxuICAgIGlmKHRoaXMuYWxsb3dOb1ZhbGlkYXRpb24gJiYgdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmQgJiYgc291cmNlID09PSBTb3VyY2VUeXBlLlNPVVJDRV9QUkVGSUxMRUQpe1xuXG4gICAgICB0aGlzLm51bWJlck9mRXhjZXB0aW9ucys9MTtcbiAgICAgIHRoaXMubnVtYmVyT2ZFeGNlcHRpb25zRW1pdHRlci5lbWl0KHRoaXMubnVtYmVyT2ZFeGNlcHRpb25zKTtcbiAgICAgIHRoaXMuc2V0Q29ubmVjdGlvbkVycm9yTWVzc2FnZSgpO1xuICAgICAgdGhpcy5vbklucHV0Q2hhbmdlKHNvdXJjZSk7XG4gICAgfVxuICAgIGlmKHRoaXMuYWxsb3dOb1ZhbGlkYXRpb24gJiYgIXRoaXMudmFsaWRhdGVkQnlCYWNrZW5kICYmIHNvdXJjZSA9PT0gU291cmNlVHlwZS5TT1VSQ0VfUFJFRklMTEVEICApXG4gICAge1xuICAgICAgdGhpcy5vbklucHV0Q2hhbmdlKHNvdXJjZSk7XG4gICAgfVxuICAgIGlmKCF0aGlzLmFsbG93Tm9WYWxpZGF0aW9uICYmIHRoaXMudmFsaWRhdGVkQnlCYWNrZW5kKVxuICAgIHtcbiAgICAgIHRoaXMuc2V0Q29ubmVjdGlvbkVycm9yTWVzc2FnZSgpO1xuICAgIH1cbiAgICAvLyB0aGlzLnNldENvbm5lY3Rpb25FcnJvck1lc3NhZ2UoKTtcblxuICB9XG5cbiAgaXNCcm93c2VySUUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9tc2llXFxzfHRyaWRlbnRcXC98ZWRnZVxcLy9pLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpO1xuICB9XG5cbiAgaXNEcm9wZG93bkNsaWNrZWQoZXYpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldi5leHBsaWNpdE9yaWdpbmFsVGFyZ2V0IHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgcmV0dXJuICh0YXJnZXQuaWQgPT09ICdicGFhYy1sb2NhbGl0eS1kcm9wZG93bicpO1xuICB9XG5cbiAgaXNTdHJpbmcodmFsKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZhbC5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nO1xuICB9XG5cbiAgbG9hZFBhcmFtcyhwcmVmaWxsRGF0YTogUHJlZmlsbERhdGEpIHtcbiAgICAvLyB0aGlzLmNsZWFyV2lkZ2V0KCk7XG4gICAgbGV0IGNvbmNhdFN0ciA9ICcnO1xuICAgIGlmIChwcmVmaWxsRGF0YSAhPT0gbnVsbCAmJiBwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzICE9PSBudWxsKSB7XG4gICAgICBpZiAocHJlZmlsbERhdGEucGFyYW1ldGVycy5oYXNPd25Qcm9wZXJ0eSgnbWluTGV2ZWwnKSkge1xuICAgICAgICB0aGlzLm1pbkxldmVsID0gcHJlZmlsbERhdGEucGFyYW1ldGVycy5taW5MZXZlbDtcbiAgICAgIH1cblxuICAgICAgLypcbiAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCd1bnN0cnVjdHVyZWRBZGRyZXNzJykgJiYgdGhpcy5pc1N0cmluZyhwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnVuc3RydWN0dXJlZEFkZHJlc3MpKSB7XG4gICAgICAgIGNvbmNhdFN0ciA9IHByZWZpbGxEYXRhLnBhcmFtZXRlcnMudW5zdHJ1Y3R1cmVkQWRkcmVzcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdwb3N0YWxDb2RlJykgJiYgdGhpcy5pc1N0cmluZyhwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnBvc3RhbENvZGUpKSB7XG4gICAgICAgICAgY29uY2F0U3RyID0gcHJlZmlsbERhdGEucGFyYW1ldGVycy5wb3N0YWxDb2RlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdtdW5pY2lwYWxpdHlOYW1lJykgJiYgdGhpcy5pc1N0cmluZyhwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWUpKSB7XG4gICAgICAgICAgY29uY2F0U3RyICs9ICcgJyArIHByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgKi9cblxuICAgICAgaWYgKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuaGFzT3duUHJvcGVydHkoJ3Bvc3RhbENvZGUnKSAmJiB0aGlzLmlzU3RyaW5nKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZSkpIHtcbiAgICAgICAgY29uY2F0U3RyID0gcHJlZmlsbERhdGEucGFyYW1ldGVycy5wb3N0YWxDb2RlO1xuICAgICAgfVxuICAgICAgaWYgKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuaGFzT3duUHJvcGVydHkoJ211bmljaXBhbGl0eU5hbWUnKSAmJiB0aGlzLmlzU3RyaW5nKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZSkpIHtcbiAgICAgICAgY29uY2F0U3RyICs9ICcgJyArIHByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29uY2F0U3RyO1xuICB9XG5cbiAgbWF5U2hvd0NsZWFyQnV0dG9uKCkge1xuICAgIHJldHVybiB0aGlzLnNlYXJjaFRleHQubGVuZ3RoID4gMDtcbiAgfVxuXG4gIG1heUFkZFR5cGVBaGVhZCgpIHtcbiAgICBpZiAodGhpcy5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKC9bXlxccywgXFxcXFxcL10kLykudGVzdCh0aGlzLnNlYXJjaFRleHQpO1xuICB9XG5cbiAgbm90RXF1YWxJZ25vcmVDYXNlKG9sZFZhbDogc3RyaW5nLCBuZXdWYWw6IHN0cmluZykge1xuICAgIHJldHVybiBvbGRWYWwudG9Mb3dlckNhc2UoKSAhPT0gbmV3VmFsLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBvbkJsdXIoZXYpIHtcbiAgICBpZiAodGhpcy5pc0Jyb3dzZXJJRSgpICYmIHRoaXMuaXNEcm9wZG93bkNsaWNrZWQoZXYpKSB7XG4gICAgICB0aGlzLmxvY2FsaXR5U2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5za2lwTmV4dEJsdXIpIHtcbiAgICAgIHRoaXMuc2tpcE5leHRCbHVyID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IHRydWU7XG4gICAgICB0aGlzLmJsdXJFdmVudC5lbWl0KEFERFJFU1NMRVZFTC5MT0NBTElUWSk7XG4gICAgfVxuICB9XG5cbiAgb25Gb2N1cygpIHtcbiAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSBmYWxzZTtcbiAgICAvLyB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSAodGhpcy5wcmVmaWxsaW5nID09PSB0cnVlICYmIHRoaXMucHJlZmlsbERhdGEgIT09IG51bGwpXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgPyAhdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm9uRm9jdXNTaG93U3VnZ2VzdGlvbnNBZnRlclByZWZpbGwgOiBmYWxzZTtcbiAgICAvLyB0aGlzLnByZWZpbGxpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnNraXBOZXh0Qmx1ciA9IGZhbHNlO1xuICAgIHRoaXMuZm9jdXNFdmVudC5lbWl0KEFERFJFU1NMRVZFTC5MT0NBTElUWSk7XG4gIH1cblxuICBvbklucHV0Q2xpY2soKSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnbG9jYWxpdHkgY2xpY2snKTsgfVxuXG4gIH1cblxuICBvbklucHV0Q2hhbmdlKHNvdXJjZT86IFNvdXJjZVR5cGUpIHtcbiAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSBmYWxzZTtcbiAgICB0aGlzLnJlc2V0QXJyb3dTZWxlY3RlZEluZGV4KCk7XG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgIHRoaXMucHJlZmlsbGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZWQoKTtcbiAgICB9XG4gICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSgpO1xuICAgIGlmICh0aGlzLnNlYXJjaFRleHQgPT09ICcnKSB7XG4gICAgICB0aGlzLnNlcXVlbmNlTnVtYmVyICs9IDE7XG4gICAgICB0aGlzLmNvbnN1bWVkTnVtYmVyID0gdGhpcy5zZXF1ZW5jZU51bWJlcjtcbiAgICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9ucygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXRoaXMudmFsaWRhdGVkQnlCYWNrZW5kKSB7XG4gICAgICAgIGlmIChzb3VyY2UgPT09IFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRCkge1xuICAgICAgICAgIHRoaXMuY2xlYXJUeXBlQWhlYWQoKTtcbiAgICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlQZXJmZWN0TWF0Y2hGb3VuZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsTXVuaWNpcGFsaXR5QW5kTG9jYWxpdHlQZXJmZWN0TWF0Y2hGb3VuZCA9IHRydWU7XG4gICAgICAgICAgY29uc3QgbXVuaWNpcGFsaXR5TmFtZSA9IHRoaXMuc2VhcmNoVGV4dC5yZXBsYWNlKC9cXGQrL2csICcnKS50cmltKCk7XG4gICAgICAgICAgY29uc3QgcG9zdGFsQ29kZSA9IHRoaXMuc2VhcmNoVGV4dC5tYXRjaCgvXFxkKy9nKT8uam9pbihcIlwiKTtcbiAgICAgICAgICBsZXQgc3VnZ2VzdGlvbiA9IHtcbiAgICAgICAgICAnYWRkcmVzcyc6e1xuICAgICAgICAgICAgJ3N0cmluZyc6IHRoaXMuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICdtdW5pY2lwYWxpdHlOYW1lJzogbXVuaWNpcGFsaXR5TmFtZSA/IG11bmljaXBhbGl0eU5hbWUudG9VcHBlckNhc2UoKSA6ICcnLFxuICAgICAgICAgICAgJ2xvY2FsaXR5TmFtZSc6IG11bmljaXBhbGl0eU5hbWUsXG4gICAgICAgICAgICAncG9zdGFsQ29kZSc6IHBvc3RhbENvZGUsXG4gICAgICAgICAgICAnc2VhcmNoQmFyU3RyaW5nJzogdGhpcy5zZWFyY2hUZXh0XG4gICAgICAgICAgfX1cbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsTXVuaWNpcGFsaXR5UGVyZmVjdE1hdGNoU3VnZ2VzdGlvbiA9IHN1Z2dlc3Rpb247XG4gICAgICAgIHRoaXMuaXNQcmVmaWxsV2l0aE5vTWF0Y2ggPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlQZXJmZWN0TWF0Y2hGb3VuZCA9PT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgdGhpcy5wcmVmaWxsQW5hbHl6ZURhdGEoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgIHRoaXMuaXNQcmVmaWxsV2l0aE5vTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmNsZWFyVHlwZUFoZWFkKCk7XG4gICAgICAgICAgdGhpcy5yZXNldEFycm93U2VsZWN0ZWRJbmRleCgpO1xuICAgICAgICAgIGNvbnN0IG11bmljaXBhbGl0eU5hbWUgPSB0aGlzLnNlYXJjaFRleHQucmVwbGFjZSgvXFxkKy9nLCAnJykudHJpbSgpO1xuICAgICAgICAgIGNvbnN0IHBvc3RhbENvZGUgPSB0aGlzLnNlYXJjaFRleHQubWF0Y2goL1xcZCsvZyk/LmpvaW4oXCJcIik7XG4gICAgICAgICAgbGV0IHN1Z2dlc3Rpb24gPSB7XG4gICAgICAgICAgICAnc3RyaW5nJzogdGhpcy5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgJ211bmljaXBhbGl0eU5hbWUnOiBtdW5pY2lwYWxpdHlOYW1lID8gbXVuaWNpcGFsaXR5TmFtZS50b1VwcGVyQ2FzZSgpIDogJycsXG4gICAgICAgICAgICAnbG9jYWxpdHlOYW1lJzogbXVuaWNpcGFsaXR5TmFtZSxcbiAgICAgICAgICAgICdwb3N0YWxDb2RlJzogcG9zdGFsQ29kZSxcbiAgICAgICAgICAgICdzZWFyY2hCYXJTdHJpbmcnOiB0aGlzLnNlYXJjaFRleHRcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEFkZHJlc3Moc3VnZ2VzdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZ2V0VG9wU3VnZ2VzdGlvbnMoc291cmNlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coJ0xpYkF1dG9jb21wbGV0ZUxvY2FsaXR5Q29tcG9uZW50OjpvbklucHV0Q2hhbmdlIC0gYmVmb3JlJywgdGhpcy53b3JkTGlzdCk7XG4gICAgdGhpcy5idWlsZElucHV0V29yZExpc3QoKTtcbiAgICAvLyBjb25zb2xlLmxvZygnTGliQXV0b2NvbXBsZXRlTG9jYWxpdHlDb21wb25lbnQ6Om9uSW5wdXRDaGFuZ2UgLSBhZnRlcicsIHRoaXMud29yZExpc3QpO1xuICB9XG5cbiAgcGFyc2VTaW5nbGVTdWdnZXN0aW9uKHN1Z2dlc3Rpb246IGFueSwgc291cmNlOiBTb3VyY2VUeXBlKSB7XG4gICAgbGV0IHN1Z2dlc3Rpb25Ub0FkZDogYW55O1xuICAgIGlmICh0aGlzLmxvY2FsZVNlcnZpY2UuaXNMb2NhbGVGcmVuY2goKSAmJiBzdWdnZXN0aW9uLmhhc093blByb3BlcnR5KCdmcmVuY2gnKSkge1xuICAgICAgc3VnZ2VzdGlvblRvQWRkID0gc3VnZ2VzdGlvbi5mcmVuY2g7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxvY2FsZVNlcnZpY2UuaXNMb2NhbGVEdXRjaCgpICYmIHN1Z2dlc3Rpb24uaGFzT3duUHJvcGVydHkoJ2R1dGNoJykpIHtcbiAgICAgIHN1Z2dlc3Rpb25Ub0FkZCA9IHN1Z2dlc3Rpb24uZHV0Y2g7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxvY2FsZVNlcnZpY2UuaXNMb2NhbGVHZXJtYW4oKSAmJiBzdWdnZXN0aW9uLmhhc093blByb3BlcnR5KCdnZXJtYW4nKSkge1xuICAgICAgc3VnZ2VzdGlvblRvQWRkID0gc3VnZ2VzdGlvbi5nZXJtYW47XG4gICAgfSBlbHNlIGlmIChzdWdnZXN0aW9uLmhhc093blByb3BlcnR5KCdhZGRyZXNzJykpIHtcbiAgICAgIHN1Z2dlc3Rpb25Ub0FkZCA9IHN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICB9XG4gICAgaWYgKHN1Z2dlc3Rpb25Ub0FkZCkge1xuICAgICAgaWYgKHN1Z2dlc3Rpb24ubWVzc2FnZXMpIHtcbiAgICAgICAgc3VnZ2VzdGlvblRvQWRkLm1lc3NhZ2VzID0gc3VnZ2VzdGlvbi5tZXNzYWdlcztcbiAgICAgIH1cbiAgICAgIHRoaXMuc3VnZ2VzdGlvbnMucHVzaChzdWdnZXN0aW9uVG9BZGQpO1xuICAgICAgaWYgKHRoaXMubWVzc2FnZU9wdGlvbiA9PT0gJ1knICYmIHN1Z2dlc3Rpb25Ub0FkZC5oYXNPd25Qcm9wZXJ0eSgnbWVzc2FnZXMnKSkge1xuICAgICAgICBmb3IgKGNvbnN0IG0gb2Ygc3VnZ2VzdGlvblRvQWRkLm1lc3NhZ2VzKSB7XG4gICAgICAgICAgY29uc3QgdHJhbnNsYXRlZE1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZU1lc3NhZ2UobSk7XG4gICAgICAgICAgaWYgKHRyYW5zbGF0ZWRNZXNzYWdlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBtLnRyYW5zbGF0ZWRNZXNzYWdlID0gdHJhbnNsYXRlZE1lc3NhZ2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc291cmNlID09PSBTb3VyY2VUeXBlLlNPVVJDRV9QUkVGSUxMRUQpIHtcbiAgICAgICAgc3VnZ2VzdGlvbi5hZGRyZXNzID0gc3VnZ2VzdGlvblRvQWRkO1xuICAgICAgICB0aGlzLnByZWZpbGxDaGVja0ZvclBlcmZlY3RNYXRjaChzdWdnZXN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcmVmaWxsQ2hlY2tGb3JQZXJmZWN0TWF0Y2goc3VnZ2VzdGlvbikge1xuICAgIGNvbnN0IHN1Z0FkZHJlc3MgPSBzdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgaWYgKCAvKiEgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsTXVuaWNpcGFsaXR5UGVyZmVjdE1hdGNoRm91bmQgJiYqLyBzdWdBZGRyZXNzLnBvc3RhbENvZGUgPT09IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5wb3N0YWxDb2RlKSB7XG4gICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdMT0NBTElUWSAtIFBSRUZJTEwgLSBjaGVja2luZyBzdWdnZXN0aW9uIGZvciBwZXJmZWN0IG1hdGNoJywgdGhpcy5wcmVmaWxsRGF0YSwgc3VnZ2VzdGlvbik7XG4gICAgICB9XG4gICAgICBjb25zdCBzdWdnZXN0aW9uTG9jYWxpdHkgPSB0aGlzLnRyYW5zZm9ybU11bmljaXBhbGl0eUluTG93ZXJjYXNlQW5kV2l0aG91dERpYWNyaXRpY3Moc3VnQWRkcmVzcy5sb2NhbGl0eU5hbWUpO1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbk11bmljaXBhbGl0eSA9IHRoaXMudHJhbnNmb3JtTXVuaWNpcGFsaXR5SW5Mb3dlcmNhc2VBbmRXaXRob3V0RGlhY3JpdGljcyhzdWdBZGRyZXNzLm11bmljaXBhbGl0eU5hbWUpO1xuICAgICAgaWYgKHN1Z2dlc3Rpb25Mb2NhbGl0eS5zdGFydHNXaXRoKHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eU5hbWUpXG4gICAgICAgIHx8IHN1Z2dlc3Rpb25NdW5pY2lwYWxpdHkuc3RhcnRzV2l0aCh0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlOYW1lKSkge1xuICAgICAgICBpZiAodGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsTXVuaWNpcGFsaXR5QW5kTG9jYWxpdHlQZXJmZWN0TWF0Y2hGb3VuZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ0xPQ0FMSVRZIC0gUFJFRklMTCAtIHNraXBwaW5nIHN1Z2dlc3Rpb246Jywgc3VnZ2VzdGlvbik7IH1cbiAgICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnTE9DQUxJVFkgLSBQUkVGSUxMIC0ga2VlcGluZyBzdWdnZXN0aW9uOicsXG4gICAgICAgICAgICAgIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eVBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlQZXJmZWN0TWF0Y2hGb3VuZCA9IHRydWU7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eVBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9uO1xuICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSBzdWdBZGRyZXNzLnBvc3RhbENvZGUgKyAnICcgKyBzdWdBZGRyZXNzLmxvY2FsaXR5TmFtZTtcblxuICAgICAgIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eUFuZExvY2FsaXR5UGVyZmVjdE1hdGNoRm91bmQgPSAoc3VnZ2VzdGlvbkxvY2FsaXR5LnN0YXJ0c1dpdGgodGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsTXVuaWNpcGFsaXR5TmFtZSlcbiAgICAgICAgICAmJiBzdWdnZXN0aW9uTXVuaWNpcGFsaXR5LnN0YXJ0c1dpdGgodGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsTXVuaWNpcGFsaXR5TmFtZSkpID8gdHJ1ZSA6IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlBbmRMb2NhbGl0eVBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnTE9DQUxJVFkgLSBQUkVGSUxMIC0gUGVyZmVjdCBtYXRjaCAtIE11bmljaXBhbGl0eSAmIGxvY2F0aW9uOicsIHN1Z2dlc3Rpb24pOyB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnTE9DQUxJVFkgLSBQUkVGSUxMIC0gTk8gUGVyZmVjdCBtYXRjaDonLCBzdWdnZXN0aW9uKTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJlZmlsbEFuYWx5emVEYXRhKCkge1xuXG4gICAgaWYgKHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eVBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSB0cnVlO1xuICAgIH0gICAgXG4gICAgdGhpcy5wcmVmaWxsRXZlbnRFbWl0dGVyLmVtaXQoLyp0aGlzLnByZWZpbGxEYXRhKi8gbmV3IFByZWZpbGxFdmVudChBRERSRVNTTEVWRUwuTE9DQUxJVFksIHRoaXMucHJlZmlsbERhdGEpKTsgICAgXG4gIH1cblxuXG5cbiAgcGFyc2VUb3BTdWdnZXN0aW9ucyh0b3BTdWdnZXN0aW9ucywgc291cmNlOiBTb3VyY2VUeXBlKSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnbG9jYWxpdHkgLSBwYXJzZSBzdWdnZXN0aW9ucycsIHRvcFN1Z2dlc3Rpb25zKTsgfVxuICAgIGlmICh0b3BTdWdnZXN0aW9ucy5jb25zdHJ1Y3RvciA9PT0gQXJyYXkpIHtcbiAgICAgIC8vIHRvcFN1Z2dlc3Rpb25zLmZvckVhY2godGhpcy5wYXJzZVNpbmdsZVN1Z2dlc3Rpb24uYmluZCh0aGlzKSk7XG4gICAgICBmb3IgKGNvbnN0IHN1ZyBvZiB0b3BTdWdnZXN0aW9ucykge1xuICAgICAgICB0aGlzLnBhcnNlU2luZ2xlU3VnZ2VzdGlvbihzdWcsIHNvdXJjZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFyc2VTaW5nbGVTdWdnZXN0aW9uKHRvcFN1Z2dlc3Rpb25zLCBzb3VyY2UpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0QXJyb3dTZWxlY3RlZEluZGV4KCkge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xO1xuICB9XG5cbiAgc3RhcnRzV2l0aElnbm9yZURpYWNyaXRpY3ModmFsdWU6IHN0cmluZywgcHJlZml4OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIC8vIGNvbnNvbGUubG9nKCdTZWFyY2hpbmcgZm9yIHByZWZpeCBcIicgKyBwcmVmaXggKyAnXCIgaW5zaWRlIHN1Z2dlc3Rpb246ICcgKyB2YWx1ZSk7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWVcbiAgICBjb25zdCBfdmFsdWUgPSB0aGlzLnVuaWNvZGVTZXJ2aWNlLnJlbW92ZURpYWNyaXRpY3MoKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpID8gdmFsdWUudG9Mb3dlckNhc2UoKSA6IHZhbHVlKTtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICAgIGNvbnN0IF9wcmVmaXggPSB0aGlzLnVuaWNvZGVTZXJ2aWNlLnJlbW92ZURpYWNyaXRpY3MoKHByZWZpeCAhPT0gbnVsbCAmJiBwcmVmaXggIT09IHVuZGVmaW5lZCkgPyBwcmVmaXgudG9Mb3dlckNhc2UoKSA6IHByZWZpeCk7XG4gICAgY29uc3Qgc3RhcnQgPSBfdmFsdWUuaW5kZXhPZihfcHJlZml4KTtcbiAgICAvLyBjb25zb2xlLmxvZygnc3RhcnRzV2l0aElnbm9yZURpYWNyaXRpY3M6ICcgKyBzdGFydCk7XG4gICAgcmV0dXJuIHN0YXJ0O1xuICB9XG5cbiAgdmFsdWVDaGFuZ2VkKCkge1xuICAgIHRoaXMudGV4dENoYW5nZUV2ZW50LmVtaXQodGhpcy5zZWFyY2hUZXh0KTtcbiAgfVxuXG4gIGNsZWFySW5wdXQoZm9jdXM/LCBlbWl0OiBib29sZWFuID0gdHJ1ZSkge1xuICAgIC8vIHRoaXMuY2xlYXJTdWdnZXN0aW9ucygpO1xuICAgIC8vIHRoaXMuYnBUeXBlQWhlYWQgPSAnJztcbiAgICAvLyB0aGlzLnNldFNlYXJjaFRleHQoJycpO1xuICAgIHRoaXMuY2xlYXJXaWRnZXQoKTtcbiAgICB0aGlzLnJlc2V0QXJyb3dTZWxlY3RlZEluZGV4KCk7XG4gICAgdGhpcy5wcmV2aW91c0luZGV4ID0gLTE7XG4gICAgdGhpcy5sYXN0U2VhcmNoVmFsdWUgPSAnJztcbiAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlKCk7XG4gICAgdGhpcy5jbGVhclNlbGVjdGVkQWRkcmVzcygpO1xuICAgIHRoaXMudmFsdWVDaGFuZ2VkKCk7XG4gICAgLy8gdGhpcy5jbGVhckNvbm5lY3Rpb25FcnJvck1lc3NhZ2UoKTtcbiAgICBpZiAoZm9jdXMgPT09IHRydWUpIHtcbiAgICAgIHRoaXMubG9jYWxpdHlTZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICAgIFxuICAgIGlmIChlbWl0KSB7XG4gICAgICAgdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoLyonTE9DQUxJVFknKi8gSW5wdXROYW1lVHlwZS5MT0NBTElUWSk7XG4gICAgICAvLyAgdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoLyonU1RSRUVUJyovIElucHV0TmFtZVR5cGUuU1RSRUVUKTtcbiAgICAgIC8vICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgvKidTVFJFRVRfTlVNQkVSJyovIElucHV0TmFtZVR5cGUuU1RSRUVUX05VTUJFUik7XG4gICAgICAvLyAgdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoLyonQk9YX05VTUJFUicqLyBJbnB1dE5hbWVUeXBlLkJPWF9OVU1CRVIpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyU2VhcmNoVGV4dCgpIHtcbiAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcbiAgfVxuXG4gIGNsZWFyU2VsZWN0ZWRBZGRyZXNzKCkge1xuICAgIHRoaXMuYWRkcmVzc0NoYW5nZWQuZW1pdChudWxsKTtcbiAgICB0aGlzLmFkZHJlc3NJc1ZhbGlkYXRlZCA9IGZhbHNlO1xuICB9XG5cbiAgY2xlYXJTdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UoKSB7XG4gICAgdGhpcy5hZGRyZXNzSXNWYWxpZGF0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSA9ICcnO1xuICAgIC8vIHRoaXMubWVzc2FnZUNoYW5nZWQuZW1pdCh0aGlzLnN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSk7XG4gICAgdGhpcy5tZXNzYWdlQ2hhbmdlZC5lbWl0KHsgbWVzc2FnZVR5cGU6IG51bGwsIHRyYW5zbGF0ZWRNZXNzYWdlOiB0aGlzLnN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSB9KTtcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlT3B0aW9ucyA9IG51bGw7XG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZUNvZGUgPSBudWxsO1xuICB9XG5cbiAgY2xlYXJTdWdnZXN0aW9ucygpIHtcbiAgICB0aGlzLndvcmRMaXN0ID0gW107XG4gICAgdGhpcy5zdWdnZXN0aW9ucyA9IFtdO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnNXb3JkTGlzdCA9IFtdO1xuICAgIC8vIGNvbnNvbGUubG9nKCdMaWJBdXRvY29tcGxldGVMb2NhbGl0eUNvbXBvbmVudDo6Y2xlYXJTdWdnZXN0aW9ucycsIHRoaXMud29yZExpc3QpO1xuICAgIC8vIHRoaXMuc3VnZ2VzdGlvbk1lc3NhZ2VzID0gIFtdO1xuICB9XG5cbiAgY2xpY2tTdWdnZXN0aW9uKGV2ZW50OiBhbnksIHN1Z2dlc3Rpb246IGFueSkge1xuICAgIHRoaXMuaXNQcmVmaWxsV2l0aE5vTWF0Y2ggPSBmYWxzZTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuY2xlYXJUeXBlQWhlYWQoKTtcbiAgICB0aGlzLnJlc2V0QXJyb3dTZWxlY3RlZEluZGV4KCk7XG4gICAgdGhpcy5zZXRTZWFyY2hUZXh0KHN1Z2dlc3Rpb24uc3RyaW5nKTtcbiAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSB0cnVlO1xuICAgIC8vIGlmIChzdWdnZXN0aW9uLmhhc093blByb3BlcnR5KCdpc0NvbXBsZXRlJykpIHtcbiAgICAvLyAgIHRoaXMuc2hvd0FkZHJlc3NJc1ZhbGlkYXRlZCgpO1xuICAgIC8vIH1cbiAgICB0aGlzLmFkZHJlc3NJc1ZhbGlkYXRlZCA9IHRydWU7XG4gICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25zKCk7XG4gICAgdGhpcy5zZXRTZWxlY3RlZEFkZHJlc3Moc3VnZ2VzdGlvbik7XG4gIH1cblxuICBjbGVhcldpZGdldCgpIHtcbiAgICB0aGlzLmNsZWFyU2VhcmNoVGV4dCgpO1xuICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9ucygpO1xuICAgIHRoaXMuY2xlYXJUeXBlQWhlYWQoKTtcbiAgICB0aGlzLnByZWZpbGxEYXRhID0gbnVsbDtcbiAgICB0aGlzLnByZWZpbGxpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIGN1cnNvcklzT25TdWdnZXN0aW9uTGlzdCgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEluZGV4ID49IDA7XG4gIH1cblxuICBvbkNoYW5nZWRMYW5ndWFnZSgpIHtcbiAgICAvLyB0aGlzLnBsYWNlSG9sZGVyVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdsb2NhbGl0eS5wbGFjZWhvbGRlci5pbnB1dC1wbGFjZWhvbGRlcicpO1xuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQoJ2xvY2FsaXR5LnBsYWNlaG9sZGVyLmlucHV0LXBsYWNlaG9sZGVyJylcbiAgICAgIC5zdWJzY3JpYmUoKHJlczogc3RyaW5nKSA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCduZXcgcGxhY2Vob2xkZXInLCByZXMpO1xuICAgICAgICAvLyA9PiAnaGVsbG8gd29ybGQnXG4gICAgICAgIHRoaXMucGxhY2VIb2xkZXJUZXh0ID0gcmVzO1xuICAgICAgfSk7XG4gIH1cblxuICBjaGFuZ2VTZWxlY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBtb3ZlQXJyb3dTZWxlY3RlZEluZGV4RG93bigpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEluZGV4ICsgMSAhPT0gdGhpcy5zdWdnZXN0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCsrO1xuICAgICAgdGhpcy5jaGFuZ2VTZWxlY3Rpb24oKTtcbiAgICAgIHRoaXMuc2V0U2VhcmNoVGV4dEJhc2VkT25BcnJvd1NlbGVjdGlvbih0aGlzLnNlbGVjdGVkSW5kZXgsIHRoaXMuc2VsZWN0ZWRJbmRleCAtIDEpO1xuICAgIH1cbiAgfVxuXG4gIG1vdmVBcnJvd1NlbGVjdGVkSW5kZXhVcCgpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEluZGV4IC0gMSAhPT0gLTIpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleC0tO1xuICAgICAgdGhpcy5jaGFuZ2VTZWxlY3Rpb24oKTtcbiAgICAgIHRoaXMuc2V0U2VhcmNoVGV4dEJhc2VkT25BcnJvd1NlbGVjdGlvbih0aGlzLnNlbGVjdGVkSW5kZXgsIHRoaXMuc2VsZWN0ZWRJbmRleCArIDEpO1xuICAgIH1cbiAgfVxuICBjaGVja0tleVVQKGV2ZW50KVxuICB7XG4gICAgc3dpdGNoIChldmVudC53aGljaCkge1xuICAgICAgXG4gICAgICBjYXNlIDg6XG4gICAgICAgXG4gICAgICAgIGlmKHRoaXMuc2VhcmNoVGV4dC5sZW5ndGg+MClcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KCdQQVJUSUFMX0NMRUFSX0xPQ0FMSVRZJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoJ0xPQ0FMSVRZJyk7XG4gICAgICAgICAgLy8gdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoJ1NUUkVFVCcpO1xuICAgICAgICAgIC8vIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KCdTVFJFRVRfTlVNQkVSJyk7XG4gICAgICAgICAgLy8gdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoJ0JPWF9OVU1CRVInKTtcbiAgICAgICAgLy8gIHRoaXMuY2xlYXJJbnB1dCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICAgYnJlYWs7ICAgICAgICAgXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuY2xlYXJUeXBlQWhlYWQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICB9XG4gICAgXG4gIH1cbiAgY2hlY2tLZXlEb3duKGV2ZW50KSB7XG4gICAgXG4gICAgc3dpdGNoIChldmVudC53aGljaCkge1xuICAgICAgLy8gZG93biBrZXksIGluY3JlbWVudCBzZWxlY3RlZEluZGV4XG4gICAgICBjYXNlIDQwOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm1vdmVBcnJvd1NlbGVjdGVkSW5kZXhEb3duKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICAvLyB1cCBrZXksIGRlY3JlbWVudCBzZWxlY3RlZEluZGV4XG4gICAgICBjYXNlIDM4OlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm1vdmVBcnJvd1NlbGVjdGVkSW5kZXhVcCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIC8vIHJpZ2h0IGFycm93IGtleVxuICAgICAgY2FzZSAzOTpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuY3Vyc29ySXNPblN1Z2dlc3Rpb25MaXN0KCkpIHtcbiAgICAgICAgICB0aGlzLmNsaWNrU3VnZ2VzdGlvbihldmVudCwgdGhpcy5zdWdnZXN0aW9uc1t0aGlzLnNlbGVjdGVkSW5kZXhdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy50eXBlQWhlYWRXb3JkICYmIHRoaXMudHlwZUFoZWFkSXNTaG93bigpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFNlYXJjaFRleHQodGhpcy5icFR5cGVBaGVhZCk7XG4gICAgICAgICAgICB0aGlzLnR5cGVBaGVhZFdvcmQgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyB0YWIga2V5XG4gICAgICBjYXNlIDk6XG4gICAgICAgIGlmICghdGhpcy5hZGRyZXNzSXNWYWxpZGF0ZWQpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0Rmlyc3RJbkxpc3RPZlN1Z2dlc2lvbnMoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA0NjpcbiAgICAgICAgaWYgKGV2ZW50LmN0cmxLZXkpIHtcbiAgICAgICAgICB0aGlzLmNsZWFyV2lkZ2V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyBlbnRlciBwcmVzc2VkXG4gICAgICBjYXNlIDEzOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5jdXJzb3JJc09uU3VnZ2VzdGlvbkxpc3QoKSkge1xuICAgICAgICAgIHRoaXMuY2xpY2tTdWdnZXN0aW9uKGV2ZW50LCB0aGlzLnN1Z2dlc3Rpb25zW3RoaXMuc2VsZWN0ZWRJbmRleF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5jbGVhclR5cGVBaGVhZCgpO1xuICAgICAgICBicmVhaztcblxuICAgIH1cbiAgfVxuXG4gIHNldENvbm5lY3Rpb25FcnJvck1lc3NhZ2UoKSB7XG4gICAgdGhpcy5lcnJvckNvZGUgPSAvKidzZXJ2aWNlLXVuYXZhaWxhYmxlJyovIFZhbGlkYXRpb25NZXNzYWdlVHlwZS5TZXJ2aWNlX1VuYXZhaWxhYmxlO1xuICAgIC8vIHRoaXMuc2V0VmFsaWRhdGlvbk1lc3NhZ2UodGhpcy5lcnJvckNvZGUpO1xuICAgIHRoaXMuZW1pdFRyYW5zbGF0ZWRWYWxpZGF0aW9uTWVzc2FnZShWYWxpZGF0aW9uTWVzc2FnZVR5cGUuU2VydmljZV9VbmF2YWlsYWJsZSk7XG4gIH1cblxuICBzZXRTZWxlY3RlZEFkZHJlc3Moc3VnZ2VzdGlvbjogYW55KSB7XG4gICAgdGhpcy5hZGRyZXNzQ2hhbmdlZC5lbWl0KHN1Z2dlc3Rpb24pO1xuICB9XG5cbiAgdHJhbnNsYXRlTWVzc2FnZShtZXNzYWdlKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXNzYWdlS2V5ID0gbWVzc2FnZS5rZXk7XG4gICAgc3dpdGNoIChtZXNzYWdlS2V5KSB7XG4gICAgICBjYXNlICdzdWJsJzoge1xuICAgICAgICAvLyBhcmdzIGxlbmd0aCBtdXN0IGJlIDIgIVxuICAgICAgICBpZiAobWVzc2FnZS5hcmdzICYmIG1lc3NhZ2UuYXJncy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2xvY2FsaXR5LnN1Z2dlc3Rpb24ubWVzc2FnZS5zdWJsJywgeyBzdWI6IG1lc3NhZ2UuYXJnc1swXSwgcHJpbmNpcGFsOiBtZXNzYWdlLmFyZ3NbMV0gfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmFsaWduXG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHR5cGVBaGVhZElzU2hvd24oKSB7XG4gICAgcmV0dXJuIHRoaXMuYnBUeXBlQWhlYWQgJiYgdGhpcy5icFR5cGVBaGVhZC5sZW5ndGggPiAwO1xuICB9XG5cbiAgc2VsZWN0Rmlyc3RJbkxpc3RPZlN1Z2dlc2lvbnMoKSB7XG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gMDtcbiAgICB0aGlzLmNoYW5nZVNlbGVjdGlvbigpO1xuICAgIHRoaXMuc2V0U2VhcmNoVGV4dEJhc2VkT25BcnJvd1NlbGVjdGlvbih0aGlzLnNlbGVjdGVkSW5kZXgsIHRoaXMuc2VsZWN0ZWRJbmRleCAtIDEpO1xuICB9XG5cbiAgc2V0U2VhcmNoVGV4dCh2YWx1ZSkge1xuICAgIHRoaXMuc2VhcmNoVGV4dCA9IHZhbHVlO1xuICB9XG5cbiAgc2V0U2VhcmNoVGV4dEJhc2VkT25BcnJvd1NlbGVjdGlvbihuZXdWYWwsIG9sZFZhbCkge1xuICAgIGlmIChuZXdWYWwgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCA8PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChuZXdWYWwgIT09IC0xKSB7XG4gICAgICBpZiAob2xkVmFsID09PSAtMSkge1xuICAgICAgICB0aGlzLmxhc3RTZWFyY2hWYWx1ZSA9IHRoaXMuc2VhcmNoVGV4dDtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U2VhcmNoVGV4dCh0aGlzLnN1Z2dlc3Rpb25zW3RoaXMuc2VsZWN0ZWRJbmRleF0uc3RyaW5nKTtcbiAgICAgIHRoaXMuY2xlYXJUeXBlQWhlYWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRTZWFyY2hUZXh0KHRoaXMubGFzdFNlYXJjaFZhbHVlKTtcbiAgICB9XG4gIH1cblxufVxuIiwiPHNwYW4gKm5nSWY9XCJsYWJlbFJlc291cmNlS2V5XCI+e3sgbGFiZWxSZXNvdXJjZUtleSB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuPGRpdiBjbGFzcz1cImJwYWFjLWRyb3Bkb3duXCI+XG4gICAgPGRpdiBjbGFzcz1cImJwYWFjLXNlYXJjaC1iYXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJwYWFjLWlucHV0LXdpZHRoXCI+XG4gICAgICAgIFxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgI2xvY2FsaXR5U2VhcmNoSW5wdXQgY2xhc3M9XCJicGFhYy1pbnB1dFwiIFxuICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJpc1JlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAoa2V5dXApID0gKGNoZWNrS2V5VVAoJGV2ZW50KSlcbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJjaGVja0tleURvd24oJGV2ZW50KVwiIChpbnB1dCk9XCJvbklucHV0Q2hhbmdlKClcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCIgZ2V0VGV4dENvbG9yKCkgXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIiBpZD1cImxvY2FsaXR5SW5wdXRGaWVsZFwiIFthdHRyLnBsYWNlaG9sZGVyXT1cInBsYWNlSG9sZGVyVGV4dFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgKGJsdXIpPVwib25CbHVyKCRldmVudClcIiAoZm9jdXMpPVwib25Gb2N1cygpXCIgKGNsaWNrKT1cIm9uSW5wdXRDbGljaygpXCIvPlxuICAgICAgICAgICAgPGRpdiBpZD1cImJwYWFjLWNsZWFyLWxvY2FsaXR5LWJ1dHRvblwiIFxuICAgICAgICAgICAgICAgICAqbmdJZj1cIm1heVNob3dDbGVhckJ1dHRvbigpXCJcbiAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFySW5wdXQodHJ1ZSlcIiBjbGFzcz1cImJwYWFjLWNsZWFyXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS08ZGl2IG5nLXRyYW5zY2x1ZGU+PC9kaXY+LS0+XG4gICAgICAgIDxpbnB1dCBpZD1cImJwYWFjLWxvY2FsaXR5LXR5cGVhaGVhZFwiIHR5cGU9XCJ0ZXh0XCIgZGlzYWJsZWQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgWyhuZ01vZGVsKV09XCJicFR5cGVBaGVhZFwiIC8+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBbaGlkZGVuXT1cImNvbGxhcHNlRHJvcGRvd25cIiBjbGFzcz1cImJwYWFjLWRyb3Bkb3duLW1lbnUtY29udGFpbmVyXCIgKm5nSWY9XCJzdWdnZXN0aW9ucyAmJiBzdWdnZXN0aW9ucy5sZW5ndGg+MFwiPlxuICAgICAgICA8ZGl2ICNsb2NhbGl0eUxpc3QgW2FwcFZpc2libGVTdWdnZXN0aW9uXT1cInZpc2libGVTdWdnZXN0aW9uQ291bnRcIiBpZD1cImJwYWFjLWxvY2FsaXR5LWRyb3Bkb3duXCIgXG4gICAgICAgICAgICBjbGFzcz1cImJwYWFjLWRyb3Bkb3duLW1lbnVcIj5cbiAgICAgICAgICAgIDx1bCByb2xlPVwibGlzdGJveFwiIGlkPVwiYnBhYWMtbG9jYWxpdHktc3VnZ2VzdGlvbnNMaXN0XCIgY2xhc3M9XCJsaXN0LXVuc3R5bGVkXCI+XG4gICAgICAgICAgICAgICAgPGxpIHJvbGU9XCJvcHRpb25cIiBcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBzdWdnZXN0aW9uczsgbGV0IGlkeCA9IGluZGV4XCIgXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzooc2VsZWN0ZWRJbmRleD09aWR4KX1cIiAobW91c2Vkb3duKT1cImNsaWNrU3VnZ2VzdGlvbigkZXZlbnQsIG9wdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJzZWxlY3RlZEluZGV4PWlkeFwiIChtb3VzZWxlYXZlKT1cInNlbGVjdGVkSW5kZXg9LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvcHRpb25cIiBbaW5uZXJIdG1sXT1cIm9wdGlvbi5zdHJpbmcgfCBoaWdobGlnaHRTdWdnZXN0aW9uIDogd29yZExpc3RcIj48L3NwYW4+IFxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm1lc3NhZ2VPcHRpb24gPT09ICdQJyAmJiBvcHRpb24ubWVzc2FnZXNcIj4gKHt7b3B0aW9uLm11bmljaXBhbGl0eU5hbWV9fSk8L3NwYW4+PGJyIC8+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlT3B0aW9uID09PSAnWSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBtZXNzYWdlIG9mIG9wdGlvbi5tZXNzYWdlc1wiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJwYWFjLXN1Z2dlc3Rpb24tbWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckh0bWxdPVwibWVzc2FnZS50cmFuc2xhdGVkTWVzc2FnZVwiPjwvc3Bhbj4gXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==
|
|
@@ -23,5 +23,11 @@ export class QueryParameters {
|
|
|
23
23
|
setIncludeBusinessName(enable) {
|
|
24
24
|
this.includeBusinessName = enable;
|
|
25
25
|
}
|
|
26
|
+
setIncludeListOfBoxes(enable) {
|
|
27
|
+
this.includeListOfBoxes = enable;
|
|
28
|
+
}
|
|
29
|
+
setIncludeListOfBusinessNameWithBoxes(enable) {
|
|
30
|
+
this.includeListOfBusinessNamesWithBoxes = enable;
|
|
31
|
+
}
|
|
26
32
|
}
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktcGFyYW1ldGVycy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYi1hZGRyZXNzLWF1dG9jb21wbGV0ZS1ieS1jb21wb25lbnQvc3JjL2xpYi9tb2RlbC9xdWVyeS1wYXJhbWV0ZXJzLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxlQUFlO0lBa0J4QixZQUFZLElBQStCO1FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUFlO1FBQzVCLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxNQUFNLENBQUM7SUFDL0MsQ0FBQztJQUVELGtCQUFrQixDQUFDLE1BQWU7UUFDOUIsSUFBSSxDQUFDLDRCQUE0QixHQUFHLE1BQU0sQ0FBQztJQUMvQyxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQWU7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQztJQUNuQyxDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQWU7UUFDMUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQztJQUNyQyxDQUFDO0lBRUQsU0FBUyxDQUFDLE1BQWU7UUFDckIsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUVELGlCQUFpQixDQUFDLE1BQWU7UUFDN0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUM7SUFDakMsQ0FBQztJQUVELHNCQUFzQixDQUFDLE1BQWU7UUFDbEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE1BQU0sQ0FBQztJQUN0QyxDQUFDO0lBRUQscUJBQXFCLENBQUMsTUFBZTtRQUNqQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsTUFBTSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxxQ0FBcUMsQ0FBQyxNQUFlO1FBQ2pELElBQUksQ0FBQyxtQ0FBbUMsR0FBRyxNQUFNLENBQUM7SUFDdEQsQ0FBQztDQUlKIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFF1ZXJ5UGFyYW1ldGVycyB7XHJcbiAgICBpZDogbnVtYmVyO1xyXG4gICAgcTogc3RyaW5nO1xyXG4gICAgcG9zdGFsQ29kZTogc3RyaW5nO1xyXG4gICAgbG9jYWxpdHk6IHN0cmluZztcclxuICAgIHN0cmVldDogc3RyaW5nO1xyXG4gICAgc3RyZWV0TnVtYmVyOiBzdHJpbmc7XHJcbiAgICBtYXhOdW1iZXJPZlN1Z2dlc3Rpb25zOiBudW1iZXI7XHJcbiAgICBzb3J0QnlQb3N0YWxDb2RlTG9jYWxpdHlOYW1lOiBib29sZWFuO1xyXG4gICAgc29ydEJ5TG9jYWxpdHlOYW1lUG9zdGFsQ29kZTogYm9vbGVhbjtcclxuICAgIHNvcnRCeVN0cmVldE5hbWU6IGJvb2xlYW47XHJcbiAgICBzb3J0QnlTdHJlZXROdW1iZXI6IGJvb2xlYW47XHJcbiAgICBzb3J0QnlCb3hOdW1iZXI6IGJvb2xlYW47XHJcbiAgICBpbmNsdWRlTmlzQ29kZTogYm9vbGVhbjtcclxuICAgIGluY2x1ZGVCdXNpbmVzc05hbWU6IGJvb2xlYW47XHJcbiAgICBpbmNsdWRlTGlzdE9mQm94ZXM6IGJvb2xlYW47XHJcbiAgICBpbmNsdWRlTGlzdE9mQnVzaW5lc3NOYW1lc1dpdGhCb3hlczogYm9vbGVhblxyXG5cclxuICAgIGNvbnN0cnVjdG9yKGluaXQ/OiBQYXJ0aWFsPFF1ZXJ5UGFyYW1ldGVycz4pIHtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGluaXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHNvcnRCeVBvc3RhbENvZGUoZW5hYmxlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5zb3J0QnlQb3N0YWxDb2RlTG9jYWxpdHlOYW1lID0gZW5hYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIHNvcnRCeUxvY2FsaXR5bmFtZShlbmFibGU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLnNvcnRCeUxvY2FsaXR5TmFtZVBvc3RhbENvZGUgPSBlbmFibGU7XHJcbiAgICB9XHJcblxyXG4gICAgc29ydEJ5U3RyZWV0KGVuYWJsZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuc29ydEJ5U3RyZWV0TmFtZSA9IGVuYWJsZTtcclxuICAgIH1cclxuXHJcbiAgICBzb3J0QnlTdHJlZXROYihlbmFibGU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLnNvcnRCeVN0cmVldE51bWJlciA9IGVuYWJsZTtcclxuICAgIH1cclxuXHJcbiAgICBzb3J0QnlCb3goZW5hYmxlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5zb3J0QnlCb3hOdW1iZXIgPSBlbmFibGU7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SW5jbHVkZU5pc0NvZGUoZW5hYmxlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5pbmNsdWRlTmlzQ29kZSA9IGVuYWJsZTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbmNsdWRlQnVzaW5lc3NOYW1lKGVuYWJsZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuaW5jbHVkZUJ1c2luZXNzTmFtZSA9IGVuYWJsZTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbmNsdWRlTGlzdE9mQm94ZXMoZW5hYmxlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5pbmNsdWRlTGlzdE9mQm94ZXMgPSBlbmFibGU7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SW5jbHVkZUxpc3RPZkJ1c2luZXNzTmFtZVdpdGhCb3hlcyhlbmFibGU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmluY2x1ZGVMaXN0T2ZCdXNpbmVzc05hbWVzV2l0aEJveGVzID0gZW5hYmxlO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG59XHJcbiJdfQ==
|