master-control 0.4.51 → 0.4.53
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/esm2022/lib/annuity-premium-calculator/annuity-premium-calculator.component.mjs +3 -3
- package/esm2022/lib/master-control.component.mjs +2 -2
- package/esm2022/lib/medial-questions/medial-questions.component.mjs +23 -4
- package/fesm2022/master-control.mjs +25 -6
- package/fesm2022/master-control.mjs.map +1 -1
- package/lib/medial-questions/medial-questions.component.d.ts +2 -1
- package/master-control-0.4.53.tgz +0 -0
- package/package.json +1 -1
- package/master-control-0.4.51.tgz +0 -0
|
@@ -20,6 +20,7 @@ export class MedialQuestionsComponent {
|
|
|
20
20
|
ngZone;
|
|
21
21
|
masterService;
|
|
22
22
|
questionsValueChange = new EventEmitter();
|
|
23
|
+
clusterId = input(); // non mandatory cluster id
|
|
23
24
|
triggerValidation;
|
|
24
25
|
medialQuestionResponse = input();
|
|
25
26
|
personUWOpenQuoteResponse = input();
|
|
@@ -2016,12 +2017,18 @@ export class MedialQuestionsComponent {
|
|
|
2016
2017
|
if (!this.checkIfValueIsEmpty(mainRequestForLa) && this.personType() !== 'PH') {
|
|
2017
2018
|
this.saveQuestionRequestLa = mainRequestForLa;
|
|
2018
2019
|
sessionStorage.setItem('saveQuestionRequestLa', JSON.stringify(mainRequestForLa));
|
|
2020
|
+
if (!this.checkIfValueIsEmpty(this.clusterId())) {
|
|
2021
|
+
sessionStorage.setItem(`LA_${this.clusterId()}`, JSON.stringify(mainRequestForLa));
|
|
2022
|
+
}
|
|
2019
2023
|
// saveRequestsArray.push(this.commonService.saveAnswers(mainRequestForLa, !calledFromConfirmation));
|
|
2020
2024
|
// saveRequestsArray.push(this.commonService.saveAnswers(mainRequestForLa, (!this.checkIfValueIsEmpty(this.sharedService.openQuoteResponse) && !this.checkIfValueIsEmpty(this.sharedService.openQuoteResponse.isEditAllowedForAgent) && this.sharedService.openQuoteResponse.isEditAllowedForAgent && this.sharedService.openQuoteResponse.isEditAllowedForAgent.toLowerCase() === 'true') ? true : !calledFromConfirmation));
|
|
2021
2025
|
}
|
|
2022
2026
|
if (!this.checkIfValueIsEmpty(mainRequestForLa) && this.personType() === 'PH') {
|
|
2023
2027
|
this.saveQuestionRequestPh = mainRequestForLa;
|
|
2024
2028
|
sessionStorage.setItem('saveQuestionRequestPh', JSON.stringify(mainRequestForLa));
|
|
2029
|
+
if (!this.checkIfValueIsEmpty(this.clusterId())) {
|
|
2030
|
+
sessionStorage.setItem(`PH_${this.clusterId()}`, JSON.stringify(mainRequestForLa));
|
|
2031
|
+
}
|
|
2025
2032
|
// saveRequestsArray.push(this.commonService.saveAnswers(mainRequestForPh, !calledFromConfirmation));
|
|
2026
2033
|
// saveRequestsArray.push(this.commonService.saveAnswers(mainRequestForPh, (!this.checkIfValueIsEmpty(this.sharedService.openQuoteResponse) && !this.checkIfValueIsEmpty(this.sharedService.openQuoteResponse.isEditAllowedForAgent) && this.sharedService.openQuoteResponse.isEditAllowedForAgent && this.sharedService.openQuoteResponse.isEditAllowedForAgent.toLowerCase() === 'true') ? true : !calledFromConfirmation));
|
|
2027
2034
|
}
|
|
@@ -2254,8 +2261,20 @@ export class MedialQuestionsComponent {
|
|
|
2254
2261
|
// }
|
|
2255
2262
|
}
|
|
2256
2263
|
});
|
|
2257
|
-
|
|
2258
|
-
|
|
2264
|
+
if (!this.checkIfValueIsEmpty(this.personType()) && this.personType === 'PH') {
|
|
2265
|
+
sessionStorage.setItem('isMedicalQuestionsValidForPH', isValid);
|
|
2266
|
+
sessionStorage.setItem('validationMessageForMedicalQuestionsForPH', validationMessage);
|
|
2267
|
+
if (!this.checkIfValueIsEmpty(this.clusterId())) {
|
|
2268
|
+
sessionStorage.setItem(`PH_${this.clusterId()}_isValid`, isValid);
|
|
2269
|
+
}
|
|
2270
|
+
}
|
|
2271
|
+
else {
|
|
2272
|
+
sessionStorage.setItem('isMedicalQuestionsValid', isValid);
|
|
2273
|
+
sessionStorage.setItem('validationMessageForMedicalQuestions', validationMessage);
|
|
2274
|
+
if (!this.checkIfValueIsEmpty(this.clusterId())) {
|
|
2275
|
+
sessionStorage.setItem(`LA_${this.clusterId()}_isValid`, isValid);
|
|
2276
|
+
}
|
|
2277
|
+
}
|
|
2259
2278
|
}
|
|
2260
2279
|
valueChangeForMultiselect(question) {
|
|
2261
2280
|
if (question['cammundaQuestionCode'] === 'LifeMediCndtn' || question['cammundaQuestionCode'] === 'MediCndtn') {
|
|
@@ -2529,7 +2548,7 @@ export class MedialQuestionsComponent {
|
|
|
2529
2548
|
return window;
|
|
2530
2549
|
}
|
|
2531
2550
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MedialQuestionsComponent, deps: [{ token: i0.NgZone }, { token: i1.MasterService }], target: i0.ɵɵFactoryTarget.Component });
|
|
2532
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: MedialQuestionsComponent, isStandalone: true, selector: "lib-medial-questions", inputs: { triggerValidation: { classPropertyName: "triggerValidation", publicName: "triggerValidation", isSignal: false, isRequired: false, transformFunction: null }, medialQuestionResponse: { classPropertyName: "medialQuestionResponse", publicName: "medialQuestionResponse", isSignal: true, isRequired: false, transformFunction: null }, personUWOpenQuoteResponse: { classPropertyName: "personUWOpenQuoteResponse", publicName: "personUWOpenQuoteResponse", isSignal: true, isRequired: false, transformFunction: null }, defaultValues: { classPropertyName: "defaultValues", publicName: "defaultValues", isSignal: true, isRequired: false, transformFunction: null }, personType: { classPropertyName: "personType", publicName: "personType", isSignal: true, isRequired: false, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { questionsValueChange: "questionsValueChange" }, viewQueries: [{ propertyName: "addressInput", first: true, predicate: ["addressInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "\n<div *ngFor=\"let section of questionList\">\n <div\n *ngIf=\"\n !checkIfValueIsEmpty(section['questions']) &&\n section['showSection']\n \"\n class=\"card p-3 mb-4\"\n id=\"personUwMedicalQuestions\"\n >\n <h6 class=\"page-title bold-label\">\n {{ getTitleCase(section[\"sectionName\"]) }}\n </h6>\n <lib-hr-line [field]=\"horizontalLineObj\" />\n <div *ngFor=\"let questions of section['questions']\" class=\"row\">\n <!-- <div *ngIf=\"questions['questionType'] === 'IMAGE TEXT'\">\n <img [src]=\"questions['sampleS3Link']\" class=\"d-block mx-auto\" [alt]=\"questions['title']\">\n <h3 [innerHTML]=\"questions['questionText']\"></h3>\n </div> -->\n\n <div\n [ngClass]=\"questions?.field?.cssClass\"\n *ngIf=\"\n questions['questionType'] === 'FREE TEXT' &&\n questions['cammundaQuestionCode'] !== 'QHT' &&\n questions['isShowQuestionInUI']\n \"\n >\n <!-- <label class=\"field-lable d-block\"\n >{{ questions[\"questionText\"] }}\n <span\n *ngIf=\"\n questions.optionalQuestion === 'N'\n \"\n style=\"color: #ee0000\"\n >*</span\n >\n </label> -->\n <div class=\"col-12 px-0 my-1\">\n <lib-textbox [(ngModel)]=\"personUwAnswers[questions.questionId]\" [field]=\"questions['field']\" (blur)=\"removeSubQuestionValues()\" />\n </div>\n </div>\n\n <div\n [ngClass]=\"questions?.field?.cssClass\"\n *ngIf=\"\n questions['questionType'] === 'HEIGHTINPUT' &&\n questions['cammundaQuestionCode'] === 'QHTF' &&\n questions['isShowQuestionInUI']\n \"\n >\n <label class=\"card-topic d-block field-lable\"\n >Height\n <span\n style=\"color: #ee0000\"\n >*</span\n >\n </label>\n <div\n class=\"col-auto px-0 my-0 py-0 heightinput\"\n id=\"medicalQuestionsHeightInput\"\n >\n <div class=\"row col-12 my-1\" *ngIf=\"personUwAnswers['medicalQuestionsHeightUnit'] === 'CM'\">\n <div class=\"col-7 py-0 heightInputs\">\n <lib-textbox [(ngModel)]=\"personUwAnswers['medicalQuestionsHeightInput']\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"medQuestionObj['QHT']['field']\" />\n </div>\n <div class=\"col-5\">\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionsHeightUnit']\" [field]=\"medQuestionObj['heightObjectTypes']\" (ngModelChange)=\"checkAndUpdateHeightUnit()\" />\n </div>\n </div>\n <div\n class=\"row\"\n *ngIf=\"\n personUwAnswers[\n 'medicalQuestionsHeightUnit'\n ] === 'FEET'\n \"\n >\n <div class=\"col-4 py-0 my-1\">\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionFeetInput']\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"medQuestionObj['QHTF']['field']\" />\n </div>\n <div class=\"col-4 py-0 my-1\">\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionsInchesInput']\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"medQuestionObj['QHTI']['field']\" />\n </div>\n <div\n class=\"col-4 py-0 my-1\"\n >\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionsHeightUnit']\" [field]=\"medQuestionObj['heightObjectTypes']\" (ngModelChange)=\"checkAndUpdateHeightUnit()\" />\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"row mt-0 pt-0\"\n *ngIf=\"\n questions['questionType'] === 'MAP' &&\n questions['isShowQuestionInUI']\n \"\n >\n\n\n <div class=\"map-container\">\n <div class=\"address-search-container mb-3\">\n\n <div class=\"row mb-3\">\n <div class=\"col-6\">\n <label class=\"form-label card-topic\">Longitude</label>\n <input\n type=\"number\"\n class=\"form-control\"\n autocomplete=\"off\"\n [(ngModel)]=\"longitude\"\n placeholder=\"Enter longitude\"\n step=\"any\"\n readonly\n >\n </div>\n <div class=\"col-6\">\n <label class=\"form-label card-topic\">Latitude</label>\n <input\n type=\"number\"\n class=\"form-control\"\n autocomplete=\"off\"\n [(ngModel)]=\"latitude\"\n placeholder=\"Enter latitude\"\n step=\"any\"\n readonly\n >\n </div>\n </div>\n\n <input\n #addressInput\n type=\"text\"\n class=\"form-control\"\n placeholder=\"Search for address\"\n (keyup)=\"onAddressInputKeyup($event)\"\n (focus)=\"showDropdown = true\"\n (blur)=\"onInputBlur()\"\n autocomplete=\"off\"\n >\n <div\n *ngIf=\"showDropdown && addressSuggestions.length > 0\"\n class=\"autocomplete-dropdown position-absolute w-100 mt-1\"\n style=\"z-index: 1000; max-height: 200px; overflow-y: auto; background: white; border: 1px solid #ccc; border-radius: 4px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);\"\n >\n <div\n *ngFor=\"let suggestion of addressSuggestions; let i = index\"\n class=\"dropdown-item p-2\"\n style=\"cursor: pointer; border-bottom: 1px solid #eee;\"\n (mousedown)=\"selectAddress(suggestion)\"\n (mouseenter)=\"hoveredIndex = i\"\n [class.bg-light]=\"hoveredIndex === i\"\n >\n <div class=\"fw-bold\">{{ suggestion.main_text }}</div>\n <small class=\"text-muted\">{{ suggestion.secondary_text }}</small>\n </div>\n </div>\n <small class=\"text-muted\">Start typing to search for addresses</small>\n </div>\n <google-map [center]=\"center\" [zoom]=\"zoom\">\n <map-marker [position]=\"currentCoordinates\"></map-marker>\n </google-map>\n </div>\n </div>\n\n\n <div\n [ngClass]=\"questions?.field?.cssClass\"\n *ngIf=\"\n (questions['questionType'] === 'RADIO BUTTON' ||\n questions['questionType'] === 'ADDMORE') &&\n questions['isShowQuestionInUI']\n \"\n >\n <lib-radio [(ngModel)]=\"personUwAnswers[questions.questionId]\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"questions['field']\" />\n </div>\n\n <div\n class=\"my-1\"\n [ngClass]=\"questions?.field?.cssClass\"\n *ngIf=\"\n questions['questionType'] === 'CHECKBOX' &&\n questions['isShowQuestionInUI']\n \"\n >\n <lib-multiple-select [(ngModel)]=\"personUwAnswers[questions.questionId]\" (ngModelChange)=\"valueChangeForMultiselect(questions)\" [field]=\"questions['field']\" />\n </div>\n\n <div\n class=\"my-1\"\n [ngClass]=\"questions?.field?.cssClass\"\n *ngIf=\"\n questions['questionType'] === 'DECLARATION' &&\n questions['isShowQuestionInUI']\n \"\n >\n <lib-checkbox [(ngModel)]=\"personUwAnswers[questions.questionId]\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"questions['field']\" />\n </div>\n\n <div\n class=\"my-1\"\n [ngClass]=\"questions?.field?.cssClass\"\n *ngIf=\"\n questions['questionType'] === 'DROPDOWN' &&\n questions['isShowQuestionInUI']\n \"\n >\n <lib-select [(ngModel)]=\"personUwAnswers[questions.questionId]\" [field]=\"questions['field']\" (ngModelChange)=\"removeSubQuestionValues()\" />\n </div>\n\n <div\n class=\"my-1\"\n [ngClass]=\"questions?.field?.cssClass\"\n *ngIf=\"\n questions['questionType'] === 'CALENDAR' &&\n questions['isShowQuestionInUI']\n \"\n >\n <lib-dob [(ngModel)]=\"personUwAnswers[questions.questionId]\" [field]=\"questions['field']\" (ngModelChange)=\"removeSubQuestionValues()\" />\n </div>\n\n <!-- <div\n class=\"\"\n *ngIf=\"\n questions['questionType'] === 'HEIGHTINPUT' &&\n questions['cammundaQuestionCode'] === 'QHTF' &&\n questions['isShowQuestionInUI']\n \"\n >\n </div> -->\n <div\n class=\"my-1\"\n [ngClass]=\"questions?.field?.cssClass\"\n *ngIf=\"\n questions['questionType'] === 'DOCUPLOAD' &&\n questions['isShowQuestionInUI']\n \"\n >\n <lib-upload [field]=\"questions['field']\" (filePreview)=\"onDocumentFilePreview($event)\" />\n <lib-file-preview\n *ngIf=\"previewFile\"\n [field]=\"questions['field']\"\n [file]=\"previewFile\"\n (closed)=\"closeFilePreview()\">\n </lib-file-preview>\n </div>\n\n\n <div\n [ngClass]=\"questions?.field?.cssClass\"\n *ngIf=\"\n questions['questionType'] === 'PASSPORT_UPLOAD' &&\n questions['isShowQuestionInUI']\n \"\n >\n <!-- pending -->\n </div>\n </div>\n </div>\n </div>\n", styles: [".map-container{width:100%;position:relative}.address-search-container{position:relative}.address-search-container input{width:100%;padding:10px;border:1px solid #ddd;border-radius:4px;box-sizing:border-box}.address-search-container input:focus{outline:none;border-color:#4285f4;box-shadow:0 0 0 2px #4285f433}.pac-container{z-index:10000!important;border-radius:4px;border:1px solid #ddd;box-shadow:0 2px 6px #0000004d}.pac-item{padding:10px;border-bottom:1px solid #eee;cursor:pointer}.pac-item:hover{background-color:#f5f5f5}.selected-address{padding:8px;background-color:#f8f9fa;border-radius:4px;border-left:3px solid #28a745}.map-container ::ng-deep google-map>div{height:400px!important;width:auto!important}.medicalQues{font-size:12px;font-style:normal;font-weight:400;line-height:normal}.heightinput{border:2px solid #fb0;padding:10px;border-radius:4px;width:fit-content}.heightInputs{display:flex;align-items:center;gap:10px}.blink_me{animation:blinker 1s linear infinite}.invalid-field-one-ui{border:2px solid #dc3545!important;box-shadow:0 0 0 3px #dc354526!important}.invalid-field-one-ui:focus{border-color:#dc3545!important;box-shadow:0 0 0 3px #dc354540!important}@keyframes blinker{50%{opacity:0}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: TextboxComponent, selector: "lib-textbox", inputs: ["field", "reactiveFormControlobject"], outputs: ["blur"] }, { kind: "component", type: RadioComponent, selector: "lib-radio", inputs: ["reactiveFormControlobject", "field"], outputs: ["change"] }, { kind: "component", type: CheckboxComponent, selector: "lib-checkbox", inputs: ["field", "reactiveFormControlobject"], outputs: ["change"] }, { kind: "component", type: SelectComponent, selector: "lib-select", inputs: ["field", "reactiveFormControlobject"], outputs: ["selectionChange", "infoClick"] }, { kind: "component", type: DobComponent, selector: "lib-dob", inputs: ["field", "reactiveFormControlobject"], outputs: ["blur", "valueChange", "dateSelected", "invalidDate"] }, { kind: "component", type: UploadComponent, selector: "lib-upload", inputs: ["documentUploaderField", "openQuoteImageObj", "field", "reactiveFormControlobject"], outputs: ["filesChanged", "fileRemoved", "filePreview"] }, { kind: "component", type: MultipleSelectComponent, selector: "lib-multiple-select", inputs: ["field", "reactiveFormControlobject"], outputs: ["selectionChange"] }, { kind: "ngmodule", type: GoogleMapsModule }, { kind: "component", type: i4.GoogleMap, selector: "google-map", inputs: ["height", "width", "mapId", "mapTypeId", "center", "zoom", "options"], outputs: ["mapInitialized", "authFailure", "boundsChanged", "centerChanged", "mapClick", "mapDblclick", "mapDrag", "mapDragend", "mapDragstart", "headingChanged", "idle", "maptypeidChanged", "mapMousemove", "mapMouseout", "mapMouseover", "projectionChanged", "mapRightclick", "tilesloaded", "tiltChanged", "zoomChanged"], exportAs: ["googleMap"] }, { kind: "directive", type: i4.MapMarker, selector: "map-marker", inputs: ["title", "position", "label", "clickable", "options", "icon", "visible"], outputs: ["animationChanged", "mapClick", "clickableChanged", "cursorChanged", "mapDblclick", "mapDrag", "mapDragend", "draggableChanged", "mapDragstart", "flatChanged", "iconChanged", "mapMousedown", "mapMouseout", "mapMouseover", "mapMouseup", "positionChanged", "mapRightclick", "shapeChanged", "titleChanged", "visibleChanged", "zindexChanged", "markerInitialized"], exportAs: ["mapMarker"] }, { kind: "component", type: HrLineComponent, selector: "lib-hr-line", inputs: ["field"] }, { kind: "component", type: FilePreviewComponent, selector: "lib-file-preview", inputs: ["field", "file"], outputs: ["closed"] }] });
|
|
2551
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: MedialQuestionsComponent, isStandalone: true, selector: "lib-medial-questions", inputs: { clusterId: { classPropertyName: "clusterId", publicName: "clusterId", isSignal: true, isRequired: false, transformFunction: null }, triggerValidation: { classPropertyName: "triggerValidation", publicName: "triggerValidation", isSignal: false, isRequired: false, transformFunction: null }, medialQuestionResponse: { classPropertyName: "medialQuestionResponse", publicName: "medialQuestionResponse", isSignal: true, isRequired: false, transformFunction: null }, personUWOpenQuoteResponse: { classPropertyName: "personUWOpenQuoteResponse", publicName: "personUWOpenQuoteResponse", isSignal: true, isRequired: false, transformFunction: null }, defaultValues: { classPropertyName: "defaultValues", publicName: "defaultValues", isSignal: true, isRequired: false, transformFunction: null }, personType: { classPropertyName: "personType", publicName: "personType", isSignal: true, isRequired: false, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { questionsValueChange: "questionsValueChange" }, viewQueries: [{ propertyName: "addressInput", first: true, predicate: ["addressInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "\n<div *ngFor=\"let section of questionList\">\n <div\n *ngIf=\"\n !checkIfValueIsEmpty(section['questions']) &&\n section['showSection']\n \"\n class=\"card p-3 mb-4\"\n id=\"personUwMedicalQuestions\"\n >\n <h6 class=\"page-title bold-label\">\n {{ getTitleCase(section[\"sectionName\"]) }}\n </h6>\n <lib-hr-line [field]=\"horizontalLineObj\" />\n <div *ngFor=\"let questions of section['questions']\" class=\"row\">\n <!-- <div *ngIf=\"questions['questionType'] === 'IMAGE TEXT'\">\n <img [src]=\"questions['sampleS3Link']\" class=\"d-block mx-auto\" [alt]=\"questions['title']\">\n <h3 [innerHTML]=\"questions['questionText']\"></h3>\n </div> -->\n\n <div\n [ngClass]=\"questions?.field?.cssClass\"\n *ngIf=\"\n questions['questionType'] === 'FREE TEXT' &&\n questions['cammundaQuestionCode'] !== 'QHT' &&\n questions['isShowQuestionInUI']\n \"\n >\n <!-- <label class=\"field-lable d-block\"\n >{{ questions[\"questionText\"] }}\n <span\n *ngIf=\"\n questions.optionalQuestion === 'N'\n \"\n style=\"color: #ee0000\"\n >*</span\n >\n </label> -->\n <div class=\"col-12 px-0 my-1\">\n <lib-textbox [(ngModel)]=\"personUwAnswers[questions.questionId]\" [field]=\"questions['field']\" (blur)=\"removeSubQuestionValues()\" />\n </div>\n </div>\n\n <div\n [ngClass]=\"questions?.field?.cssClass\"\n *ngIf=\"\n questions['questionType'] === 'HEIGHTINPUT' &&\n questions['cammundaQuestionCode'] === 'QHTF' &&\n questions['isShowQuestionInUI']\n \"\n >\n <label class=\"card-topic d-block field-lable\"\n >Height\n <span\n style=\"color: #ee0000\"\n >*</span\n >\n </label>\n <div\n class=\"col-auto px-0 my-0 py-0 heightinput\"\n id=\"medicalQuestionsHeightInput\"\n >\n <div class=\"row col-12 my-1\" *ngIf=\"personUwAnswers['medicalQuestionsHeightUnit'] === 'CM'\">\n <div class=\"col-7 py-0 heightInputs\">\n <lib-textbox [(ngModel)]=\"personUwAnswers['medicalQuestionsHeightInput']\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"medQuestionObj['QHT']['field']\" />\n </div>\n <div class=\"col-5\">\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionsHeightUnit']\" [field]=\"medQuestionObj['heightObjectTypes']\" (ngModelChange)=\"checkAndUpdateHeightUnit()\" />\n </div>\n </div>\n <div\n class=\"row\"\n *ngIf=\"\n personUwAnswers[\n 'medicalQuestionsHeightUnit'\n ] === 'FEET'\n \"\n >\n <div class=\"col-4 py-0 my-1\">\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionFeetInput']\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"medQuestionObj['QHTF']['field']\" />\n </div>\n <div class=\"col-4 py-0 my-1\">\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionsInchesInput']\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"medQuestionObj['QHTI']['field']\" />\n </div>\n <div\n class=\"col-4 py-0 my-1\"\n >\n <lib-select [(ngModel)]=\"personUwAnswers['medicalQuestionsHeightUnit']\" [field]=\"medQuestionObj['heightObjectTypes']\" (ngModelChange)=\"checkAndUpdateHeightUnit()\" />\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"row mt-0 pt-0\"\n *ngIf=\"\n questions['questionType'] === 'MAP' &&\n questions['isShowQuestionInUI']\n \"\n >\n\n\n <div class=\"map-container\">\n <div class=\"address-search-container mb-3\">\n\n <div class=\"row mb-3\">\n <div class=\"col-6\">\n <label class=\"form-label card-topic\">Longitude</label>\n <input\n type=\"number\"\n class=\"form-control\"\n autocomplete=\"off\"\n [(ngModel)]=\"longitude\"\n placeholder=\"Enter longitude\"\n step=\"any\"\n readonly\n >\n </div>\n <div class=\"col-6\">\n <label class=\"form-label card-topic\">Latitude</label>\n <input\n type=\"number\"\n class=\"form-control\"\n autocomplete=\"off\"\n [(ngModel)]=\"latitude\"\n placeholder=\"Enter latitude\"\n step=\"any\"\n readonly\n >\n </div>\n </div>\n\n <input\n #addressInput\n type=\"text\"\n class=\"form-control\"\n placeholder=\"Search for address\"\n (keyup)=\"onAddressInputKeyup($event)\"\n (focus)=\"showDropdown = true\"\n (blur)=\"onInputBlur()\"\n autocomplete=\"off\"\n >\n <div\n *ngIf=\"showDropdown && addressSuggestions.length > 0\"\n class=\"autocomplete-dropdown position-absolute w-100 mt-1\"\n style=\"z-index: 1000; max-height: 200px; overflow-y: auto; background: white; border: 1px solid #ccc; border-radius: 4px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);\"\n >\n <div\n *ngFor=\"let suggestion of addressSuggestions; let i = index\"\n class=\"dropdown-item p-2\"\n style=\"cursor: pointer; border-bottom: 1px solid #eee;\"\n (mousedown)=\"selectAddress(suggestion)\"\n (mouseenter)=\"hoveredIndex = i\"\n [class.bg-light]=\"hoveredIndex === i\"\n >\n <div class=\"fw-bold\">{{ suggestion.main_text }}</div>\n <small class=\"text-muted\">{{ suggestion.secondary_text }}</small>\n </div>\n </div>\n <small class=\"text-muted\">Start typing to search for addresses</small>\n </div>\n <google-map [center]=\"center\" [zoom]=\"zoom\">\n <map-marker [position]=\"currentCoordinates\"></map-marker>\n </google-map>\n </div>\n </div>\n\n\n <div\n [ngClass]=\"questions?.field?.cssClass\"\n *ngIf=\"\n (questions['questionType'] === 'RADIO BUTTON' ||\n questions['questionType'] === 'ADDMORE') &&\n questions['isShowQuestionInUI']\n \"\n >\n <lib-radio [(ngModel)]=\"personUwAnswers[questions.questionId]\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"questions['field']\" />\n </div>\n\n <div\n class=\"my-1\"\n [ngClass]=\"questions?.field?.cssClass\"\n *ngIf=\"\n questions['questionType'] === 'CHECKBOX' &&\n questions['isShowQuestionInUI']\n \"\n >\n <lib-multiple-select [(ngModel)]=\"personUwAnswers[questions.questionId]\" (ngModelChange)=\"valueChangeForMultiselect(questions)\" [field]=\"questions['field']\" />\n </div>\n\n <div\n class=\"my-1\"\n [ngClass]=\"questions?.field?.cssClass\"\n *ngIf=\"\n questions['questionType'] === 'DECLARATION' &&\n questions['isShowQuestionInUI']\n \"\n >\n <lib-checkbox [(ngModel)]=\"personUwAnswers[questions.questionId]\" (ngModelChange)=\"removeSubQuestionValues()\" [field]=\"questions['field']\" />\n </div>\n\n <div\n class=\"my-1\"\n [ngClass]=\"questions?.field?.cssClass\"\n *ngIf=\"\n questions['questionType'] === 'DROPDOWN' &&\n questions['isShowQuestionInUI']\n \"\n >\n <lib-select [(ngModel)]=\"personUwAnswers[questions.questionId]\" [field]=\"questions['field']\" (ngModelChange)=\"removeSubQuestionValues()\" />\n </div>\n\n <div\n class=\"my-1\"\n [ngClass]=\"questions?.field?.cssClass\"\n *ngIf=\"\n questions['questionType'] === 'CALENDAR' &&\n questions['isShowQuestionInUI']\n \"\n >\n <lib-dob [(ngModel)]=\"personUwAnswers[questions.questionId]\" [field]=\"questions['field']\" (ngModelChange)=\"removeSubQuestionValues()\" />\n </div>\n\n <!-- <div\n class=\"\"\n *ngIf=\"\n questions['questionType'] === 'HEIGHTINPUT' &&\n questions['cammundaQuestionCode'] === 'QHTF' &&\n questions['isShowQuestionInUI']\n \"\n >\n </div> -->\n <div\n class=\"my-1\"\n [ngClass]=\"questions?.field?.cssClass\"\n *ngIf=\"\n questions['questionType'] === 'DOCUPLOAD' &&\n questions['isShowQuestionInUI']\n \"\n >\n <lib-upload [field]=\"questions['field']\" (filePreview)=\"onDocumentFilePreview($event)\" />\n <lib-file-preview\n *ngIf=\"previewFile\"\n [field]=\"questions['field']\"\n [file]=\"previewFile\"\n (closed)=\"closeFilePreview()\">\n </lib-file-preview>\n </div>\n\n\n <div\n [ngClass]=\"questions?.field?.cssClass\"\n *ngIf=\"\n questions['questionType'] === 'PASSPORT_UPLOAD' &&\n questions['isShowQuestionInUI']\n \"\n >\n <!-- pending -->\n </div>\n </div>\n </div>\n </div>\n", styles: [".map-container{width:100%;position:relative}.address-search-container{position:relative}.address-search-container input{width:100%;padding:10px;border:1px solid #ddd;border-radius:4px;box-sizing:border-box}.address-search-container input:focus{outline:none;border-color:#4285f4;box-shadow:0 0 0 2px #4285f433}.pac-container{z-index:10000!important;border-radius:4px;border:1px solid #ddd;box-shadow:0 2px 6px #0000004d}.pac-item{padding:10px;border-bottom:1px solid #eee;cursor:pointer}.pac-item:hover{background-color:#f5f5f5}.selected-address{padding:8px;background-color:#f8f9fa;border-radius:4px;border-left:3px solid #28a745}.map-container ::ng-deep google-map>div{height:400px!important;width:auto!important}.medicalQues{font-size:12px;font-style:normal;font-weight:400;line-height:normal}.heightinput{border:2px solid #fb0;padding:10px;border-radius:4px;width:fit-content}.heightInputs{display:flex;align-items:center;gap:10px}.blink_me{animation:blinker 1s linear infinite}.invalid-field-one-ui{border:2px solid #dc3545!important;box-shadow:0 0 0 3px #dc354526!important}.invalid-field-one-ui:focus{border-color:#dc3545!important;box-shadow:0 0 0 3px #dc354540!important}@keyframes blinker{50%{opacity:0}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: TextboxComponent, selector: "lib-textbox", inputs: ["field", "reactiveFormControlobject"], outputs: ["blur"] }, { kind: "component", type: RadioComponent, selector: "lib-radio", inputs: ["reactiveFormControlobject", "field"], outputs: ["change"] }, { kind: "component", type: CheckboxComponent, selector: "lib-checkbox", inputs: ["field", "reactiveFormControlobject"], outputs: ["change"] }, { kind: "component", type: SelectComponent, selector: "lib-select", inputs: ["field", "reactiveFormControlobject"], outputs: ["selectionChange", "infoClick"] }, { kind: "component", type: DobComponent, selector: "lib-dob", inputs: ["field", "reactiveFormControlobject"], outputs: ["blur", "valueChange", "dateSelected", "invalidDate"] }, { kind: "component", type: UploadComponent, selector: "lib-upload", inputs: ["documentUploaderField", "openQuoteImageObj", "field", "reactiveFormControlobject"], outputs: ["filesChanged", "fileRemoved", "filePreview"] }, { kind: "component", type: MultipleSelectComponent, selector: "lib-multiple-select", inputs: ["field", "reactiveFormControlobject"], outputs: ["selectionChange"] }, { kind: "ngmodule", type: GoogleMapsModule }, { kind: "component", type: i4.GoogleMap, selector: "google-map", inputs: ["height", "width", "mapId", "mapTypeId", "center", "zoom", "options"], outputs: ["mapInitialized", "authFailure", "boundsChanged", "centerChanged", "mapClick", "mapDblclick", "mapDrag", "mapDragend", "mapDragstart", "headingChanged", "idle", "maptypeidChanged", "mapMousemove", "mapMouseout", "mapMouseover", "projectionChanged", "mapRightclick", "tilesloaded", "tiltChanged", "zoomChanged"], exportAs: ["googleMap"] }, { kind: "directive", type: i4.MapMarker, selector: "map-marker", inputs: ["title", "position", "label", "clickable", "options", "icon", "visible"], outputs: ["animationChanged", "mapClick", "clickableChanged", "cursorChanged", "mapDblclick", "mapDrag", "mapDragend", "draggableChanged", "mapDragstart", "flatChanged", "iconChanged", "mapMousedown", "mapMouseout", "mapMouseover", "mapMouseup", "positionChanged", "mapRightclick", "shapeChanged", "titleChanged", "visibleChanged", "zindexChanged", "markerInitialized"], exportAs: ["mapMarker"] }, { kind: "component", type: HrLineComponent, selector: "lib-hr-line", inputs: ["field"] }, { kind: "component", type: FilePreviewComponent, selector: "lib-file-preview", inputs: ["field", "file"], outputs: ["closed"] }] });
|
|
2533
2552
|
}
|
|
2534
2553
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MedialQuestionsComponent, decorators: [{
|
|
2535
2554
|
type: Component,
|
|
@@ -2556,4 +2575,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
2556
2575
|
type: ViewChild,
|
|
2557
2576
|
args: ['addressInput']
|
|
2558
2577
|
}] } });
|
|
2559
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL21lZGlhbC1xdWVzdGlvbnMvbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL21lZGlhbC1xdWVzdGlvbnMvbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBVSxTQUFTLEVBQXlCLEtBQUssRUFBMEMsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU1SyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHL0QsT0FBTyxFQUFFLG9C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QkFBdUI7d0JBQ3ZCLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixvQkFBb0I7cUJBQ3JCO3VHQUtTLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRSxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBUXFCLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdvb2dsZU1hcHNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9nb29nbGUtbWFwcyc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCwgTmdab25lLCBBZnRlclZpZXdJbml0LCBpbnB1dCwgU2ltcGxlQ2hhbmdlcywgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgcXVlc3Rpb25zUmVzcG9uc2UgZnJvbSAnLi9xdWVzdGlvbnMuanNvbidcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRleHRib3hDb21wb25lbnQgfSBmcm9tICcuLi90ZXh0Ym94L3RleHRib3guY29tcG9uZW50JztcbmltcG9ydCB7IFJhZGlvQ29tcG9uZW50IH0gZnJvbSAnLi4vcmFkaW8vcmFkaW8uY29tcG9uZW50JztcbmltcG9ydCB7IENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50JztcbmltcG9ydCB7IFNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7IERvYkNvbXBvbmVudCB9IGZyb20gJy4uL2RvYi9kb2IuY29tcG9uZW50JztcbmltcG9ydCB7IFVwbG9hZENvbXBvbmVudCB9IGZyb20gJy4uL3VwbG9hZC91cGxvYWQuY29tcG9uZW50JztcbmltcG9ydCB7IE11bHRpcGxlU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vbXVsdGlwbGUtc2VsZWN0L211bHRpcGxlLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSHJMaW5lQ29tcG9uZW50IH0gZnJvbSAnLi4vaHItbGluZS9oci1saW5lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXN0ZXJDb250cm9sU2VydmljZSB9IGZyb20gJy4uL21hc3Rlci1jb250cm9sLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWFzdGVyU2VydmljZSB9IGZyb20gJy4uL21hc3Rlci5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVQcmV2aWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vZmlsZS1wcmV2aWV3L2ZpbGUtcHJldmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItbWVkaWFsLXF1ZXN0aW9ucycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIC8vIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgVGV4dGJveENvbXBvbmVudCxcbiAgICBSYWRpb0NvbXBvbmVudCxcbiAgICBDaGVja2JveENvbXBvbmVudCxcbiAgICBTZWxlY3RDb21wb25lbnQsXG4gICAgRG9iQ29tcG9uZW50LFxuICAgIFVwbG9hZENvbXBvbmVudCxcbiAgICBNdWx0aXBsZVNlbGVjdENvbXBvbmVudCxcbiAgICBHb29nbGVNYXBzTW9kdWxlLFxuICAgIEhyTGluZUNvbXBvbmVudCxcbiAgICBGaWxlUHJldmlld0NvbXBvbmVudFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9tZWRpYWwtcXVlc3Rpb25zLmNvbXBvbmVudC5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBNZWRpYWxRdWVzdGlvbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBAT3V0cHV0KCkgcXVlc3Rpb25zVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQElucHV0KCkgdHJpZ2dlclZhbGlkYXRpb24/OiBTdWJqZWN0PHZvaWQ+O1xuICBtZWRpYWxRdWVzdGlvblJlc3BvbnNlID0gaW5wdXQ8YW55PigpO1xuICBwZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlIDogYW55ID0gaW5wdXQ8YW55PigpO1xuICBkZWZhdWx0VmFsdWVzIDogYW55ID0gaW5wdXQ8YW55PigpO1xuICBwZXJzb25UeXBlOiBhbnkgPSBpbnB1dDxhbnk+KCk7XG4gIHBlcnNvblV3SWQgOiBhbnkgPSBcIlwiO1xuICBpc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGUgOiBhbnkgPSBudWxsO1xuICBtZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UgOiBhbnkgPSB7fTtcbiAgQFZpZXdDaGlsZCgnYWRkcmVzc0lucHV0JykgYWRkcmVzc0lucHV0ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcbiAgcHJpdmF0ZSBhdXRvY29tcGxldGUhOiBnb29nbGUubWFwcy5wbGFjZXMuQXV0b2NvbXBsZXRlO1xuICBzYXZlUXVlc3Rpb25SZXF1ZXN0TGE6IGFueSA9IFtdO1xuICBzYXZlUXVlc3Rpb25SZXF1ZXN0UGg6IGFueSA9IFtdO1xuICBmaWVsZDogYW55ID0gaW5wdXQucmVxdWlyZWQ8YW55PigpO1xuICBxdWVzdGlvbkxpc3Q6IGFueSA9IFtdO1xuICBjdXJyZW50Q29vcmRpbmF0ZXM6IGFueSA9IHt9O1xuICBwZXJzb25Vd1Jlc3BvbnNlT2JqOiBhbnkgPSBbXTtcbiAgY2VudGVyOiBnb29nbGUubWFwcy5MYXRMbmdMaXRlcmFsID0geyBsYXQ6IDQwLjczMDYxLCBsbmc6IC03My45MzUyNDIgfTtcbiAgbGF0aXR1ZGU6IGFueTtcbiAgbG9uZ2l0dWRlOiBhbnk7XG4gIHpvb206IGFueTtcbiAgbWFya2VyOiBhbnkgPSB7fTtcblxuXG4gIHBlcnNvblV3QW5zd2VyczogYW55ID0ge1xuICAgIG1lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0OiAnRkVFVCcsXG4gICAgbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0OiAwLFxuICAgIG1lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dDogMCxcbiAgICBtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQ6IDAsXG4gIH07XG4gIG1lZFF1ZXN0aW9uT2JqOiBhbnkgPSB7fTtcbiAgbGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3g6IGFueSA9IFtdO1xuICBtZWRpY2FsUXVlc3Rpb25zRmVldExpc3Q6IGFueSA9IFtdO1xuICBtZWRpY2FsUXVlc3Rpb25zSW5jaGVzTGlzdDogYW55ID0gW107XG4gIHF1ZXN0aW9uSGVhZGVyOiBhbnkgPSBbJ2VpYSBkZXRhaWxzJywgJ2FiaGEgZGV0YWlscycsICdwZXAgZGV0YWlscyddO1xuICBtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdFR5cGVzOiBhbnkgPSBbXG4gICAge1xuICAgICAgbGFiZWw6ICdDbScsXG4gICAgICB2YWx1ZTogJ0NNJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnRmVldCcsXG4gICAgICB2YWx1ZTogJ0ZFRVQnLFxuICAgIH0sXG4gIF07XG4gIHNob3dEcm9wZG93biA9IGZhbHNlO1xuICBhZGRyZXNzU3VnZ2VzdGlvbnM6IGFueVtdID0gW107XG4gIGhvdmVyZWRJbmRleCA9IC0xO1xuICBzZWFyY2hUaW1lb3V0OiBhbnk7XG4gIGhvcml6b250YWxMaW5lT2JqIDogYW55ID0ge1xuICAgICAgICAgICAgICAgICAgICBcImNvbnRyb2xTdHlsZVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImNvbnRyb2xUeXBlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJvcmRlckNvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJvcmRlcldpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJvcmRlclJhZGl1c1wiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250U2l6ZVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250V2VpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvbnRGYW1pbHlcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjYXJldENvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm51ZGdlRGlzcGxheUltYWdlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRyb3Bkb3duT3B0aW9uQmdDb2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkcm9wZG93bk9wdGlvbkNvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRyb3Bkb3duT3B0aW9uRm9udFdlaWdodFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ3aWR0aFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb2N1c0JvcmRlcldpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzQm9yZGVyQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNCYWNrZ3JvdW5kXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkJnQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Gb250V2VpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJMZWZ0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXNcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaG92ZXJCb3JkZXJDb2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJob3ZlckJvcmRlcldpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImhvdmVyQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGlzYWJsZUNvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpc2FibGVCYWNrZ3JvdW5kXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImVycm9yQm9yZGVyQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZXJyb3JCb3JkZXJXaWR0aFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlcnJvckNvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNyZWF0ZWREYXRlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInBhZGRpbmdcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWFyZ2luXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImlzTWFzdGVyQ3NzXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNvbnRyb2xNZXRhSWRcIjogXCJMSV9DT01fR0VOX0NUUkxfaHJMaW5lX2hyTGluZV9WMVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJib3JkZXJTdHlsZVwiOiBcInNvbGlkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImhlaWdodFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtaW5IZWlnaHRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWF4SGVpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1pbldpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1heFdpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNzc0NsYXNzXCI6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCJmaWVsZE5hbWVcIjogXCJockxpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJsYWJlbFwiOiBcInNvbGlkIGxpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJwbGFjZUhvbGRlclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBcIm1ldGFJZFwiOiBcIkxJX0NPTV9HRU5fQ1RSTF9ockxpbmVfaHJMaW5lX1YxXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiaXNWaXNpYmxlXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwiaXNEaXNhYmxlXCI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBcImRlZmF1bHRWYWx1ZVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBcInZhbGlkYXRvcnNcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJpc1JlcXVpcmVkXCI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJyZXF1aXJlZE1lc3NhZ2VcIjogXCJUaGlzIGZpZWxkIGNhbm5vdCBiZSBlbXB0eVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtaW5MZW5ndGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWluTGVuZ3RoTWVzc2FnZVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXhMZW5ndGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWF4TGVuZ3RoTWVzc2FnZVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJwYXR0ZXJuXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInBhdHRlcm5NZXNzYWdlXCI6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCJvcHRpb25zXCI6IFtdLFxuICAgICAgICAgICAgICAgICAgICBcImNzc0NsYXNzXCI6IFwiY29sLTEyXCIsXG4gICAgICAgICAgICAgICAgICAgIFwidmFsdWVcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgXCJzdHlsZVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBcImltYWdlVXJsXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIFwiY29uZmlnRGF0YVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImhyVGV4dFwiOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwibWV0YURhdGFPYmpcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgXCJpc1Nob3dMYWJlbFwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBcImlzTWFzdGVyQ29udHJvbFwiOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgXCJjb250cm9sVHlwZVwiOiBcImhyTGluZVwiXG4gICAgICAgICAgICAgICAgfTtcbiAgcHJldmlld0ZpbGU6IEZpbGUgfCBudWxsID0gbnVsbDtcbiAgY29uc3RydWN0b3IocHVibGljIG5nWm9uZTogTmdab25lLCBwdWJsaWMgbWFzdGVyU2VydmljZSA6IE1hc3RlclNlcnZpY2UpIHtcbiAgICBjb25zb2xlLmxvZygnbWVkaWFsUXVlc3Rpb25SZXNwb25zZWVlZWVlJywgdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKCkpO1xuICAgIGNvbnNvbGUubG9nKCdwZXJzb250eXBlJywgdGhpcy5wZXJzb25UeXBlKCkpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMudHJpZ2dlclZhbGlkYXRpb24pIHtcbiAgICB0aGlzLnRyaWdnZXJWYWxpZGF0aW9uLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnZhbGlkYXRlTWVkaWNhbFF1ZXN0aW9ucyh0cnVlKTtcbiAgICB9KTtcbiAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChcbiAgICAgICgoY2hhbmdlc1snbWVkaWFsUXVlc3Rpb25SZXNwb25zZSddKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGNoYW5nZXNbJ21lZGlhbFF1ZXN0aW9uUmVzcG9uc2UnXS5jdXJyZW50VmFsdWUpKSB8fFxuICAgICAgKChjaGFuZ2VzWydwcmVwYXJlUGVyc29uVXdRdWVzdGlvbnNPYmonXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShjaGFuZ2VzWydwcmVwYXJlUGVyc29uVXdRdWVzdGlvbnNPYmonXS5jdXJyZW50VmFsdWUpKVxuICAgICkge1xuICAgICAgaWYgKCdnZW9sb2NhdGlvbicgaW4gbmF2aWdhdG9yKSB7XG4gICAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oKHBvc2l0aW9uKSA9PiB7XG4gICAgICAgICAgdGhpcy5sYXRpdHVkZSA9IHBvc2l0aW9uLmNvb3Jkcy5sYXRpdHVkZTtcbiAgICAgICAgICB0aGlzLmxvbmdpdHVkZSA9IHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGU7XG4gICAgICAgICAgdGhpcy56b29tID0gMTU7XG4gICAgICAgICAgdGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMgPSB7XG4gICAgICAgICAgICBsYXQ6IHRoaXMubGF0aXR1ZGUsXG4gICAgICAgICAgICBsbmc6IHRoaXMubG9uZ2l0dWRlLFxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5jZW50ZXIgPSB7IC4uLnRoaXMuY3VycmVudENvb3JkaW5hdGVzIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5wcmVwYXJlUGVyc29uVXdRdWVzdGlvbnNPYmooKTtcbiAgICB9XG5cbiAgICBpZigoKGNoYW5nZXNbJ2RlZmF1bHRWYWx1ZXMnXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShjaGFuZ2VzWydkZWZhdWx0VmFsdWVzJ10uY3VycmVudFZhbHVlKSkpIHtcbiAgICAgIGlmKHR5cGVvZiB0aGlzLmRlZmF1bHRWYWx1ZXMoKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnMgPSB7Li4udGhpcy5wZXJzb25Vd0Fuc3dlcnMsIC4uLnRoaXMuZGVmYXVsdFZhbHVlcygpfTtcbiAgICAgICAgdGhpcy5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVBdXRvY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUhlaWdodFF1ZXN0aW9uSWRzKCk6IHZvaWQge1xuICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXSA9ICcnO1xuICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSA9ICcnO1xuICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSA9ICcnO1xuXG4gICAgLy8gdGhpcy5xdWVzdGlvbkxpc3QuZm9yRWFjaCgoc2VjdGlvbjogYW55KSA9PiB7XG4gICAgLy8gICBpZiAoc2VjdGlvbi5xdWVzdGlvbnMgJiYgQXJyYXkuaXNBcnJheShzZWN0aW9uLnF1ZXN0aW9ucykpIHtcbiAgICAvLyAgICAgc2VjdGlvbi5xdWVzdGlvbnMuZm9yRWFjaCgocXVlc3Rpb246IGFueSkgPT4ge1xuICAgIC8vICAgICAgIHN3aXRjaCAocXVlc3Rpb24uY2FtbXVuZGFRdWVzdGlvbkNvZGUpIHtcbiAgICAvLyAgICAgICAgIGNhc2UgJ1FIVCc6XG4gICAgLy8gICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXSA9IHF1ZXN0aW9uLnF1ZXN0aW9uSWQ7XG4gICAgLy8gICAgICAgICAgIGJyZWFrO1xuICAgIC8vICAgICAgICAgY2FzZSAnUUhURic6XG4gICAgLy8gICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSA9IHF1ZXN0aW9uLnF1ZXN0aW9uSWQ7XG4gICAgLy8gICAgICAgICAgIGJyZWFrO1xuICAgIC8vICAgICAgICAgY2FzZSAnUUhUSSc6XG4gICAgLy8gICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSA9IHF1ZXN0aW9uLnF1ZXN0aW9uSWQ7XG4gICAgLy8gICAgICAgICAgIGJyZWFrO1xuICAgIC8vICAgICAgIH1cbiAgICAvLyAgICAgfSk7XG4gICAgLy8gICB9XG4gICAgLy8gfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVBdXRvY29tcGxldGUoKTogdm9pZCB7XG4gICAgdGhpcy5hdXRvY29tcGxldGUgPSBuZXcgZ29vZ2xlLm1hcHMucGxhY2VzLkF1dG9jb21wbGV0ZShcbiAgICAgIHRoaXMuYWRkcmVzc0lucHV0Py5uYXRpdmVFbGVtZW50LFxuICAgICAge1xuICAgICAgICB0eXBlczogWydhZGRyZXNzJ10sXG4gICAgICAgIGNvbXBvbmVudFJlc3RyaWN0aW9uczogeyBjb3VudHJ5OiAnSU4nIH0sXG4gICAgICAgIGZpZWxkczogWydwbGFjZV9pZCcsICdnZW9tZXRyeScsICduYW1lJywgJ2Zvcm1hdHRlZF9hZGRyZXNzJ10sXG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuYXV0b2NvbXBsZXRlLmFkZExpc3RlbmVyKCdwbGFjZV9jaGFuZ2VkJywgKCkgPT4ge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5vblBsYWNlU2VsZWN0ZWQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvblBsYWNlU2VsZWN0ZWQoKTogdm9pZCB7XG4gICAgY29uc3QgcGxhY2UgPSB0aGlzLmF1dG9jb21wbGV0ZS5nZXRQbGFjZSgpO1xuXG4gICAgaWYgKCFwbGFjZS5nZW9tZXRyeSB8fCAhcGxhY2UuZ2VvbWV0cnkubG9jYXRpb24pIHtcbiAgICAgIGNvbnNvbGUubG9nKCdObyBkZXRhaWxzIGF2YWlsYWJsZSBmb3IgaW5wdXQ6ICcsIHBsYWNlLm5hbWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxvY2F0aW9uID0gcGxhY2UuZ2VvbWV0cnkubG9jYXRpb247XG4gICAgdGhpcy5jZW50ZXIgPSB7XG4gICAgICBsYXQ6IGxvY2F0aW9uLmxhdCgpLFxuICAgICAgbG5nOiBsb2NhdGlvbi5sbmcoKSxcbiAgICB9O1xuICAgIHRoaXMuY3VycmVudENvb3JkaW5hdGVzID0gdGhpcy5jZW50ZXI7XG5cbiAgICBpZiAocGxhY2UuZ2VvbWV0cnkudmlld3BvcnQpIHtcbiAgICAgIHRoaXMuem9vbSA9IDE1O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnpvb20gPSAxMztcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnU2VsZWN0ZWQgcGxhY2U6Jywge1xuICAgICAgbmFtZTogcGxhY2UubmFtZSxcbiAgICAgIGFkZHJlc3M6IHBsYWNlLmZvcm1hdHRlZF9hZGRyZXNzLFxuICAgICAgY29vcmRpbmF0ZXM6IHRoaXMuY2VudGVyLFxuICAgIH0pO1xuXG4gICAgdGhpcy5zdG9yZVNlbGVjdGVkQWRkcmVzcyhwbGFjZSk7XG4gIH1cblxuICBwcml2YXRlIHN0b3JlU2VsZWN0ZWRBZGRyZXNzKHBsYWNlOiBnb29nbGUubWFwcy5wbGFjZXMuUGxhY2VSZXN1bHQpOiB2b2lkIHtcbiAgICBjb25zdCBhZGRyZXNzRGF0YSA9IHtcbiAgICAgIHBsYWNlSWQ6IHBsYWNlLnBsYWNlX2lkLFxuICAgICAgbmFtZTogcGxhY2UubmFtZSxcbiAgICAgIGZvcm1hdHRlZEFkZHJlc3M6IHBsYWNlLmZvcm1hdHRlZF9hZGRyZXNzLFxuICAgICAgY29vcmRpbmF0ZXM6IHRoaXMuY2VudGVyLFxuICAgIH07XG4gIH1cblxuICBzZWFyY2hBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGdlb2NvZGVyID0gbmV3IGdvb2dsZS5tYXBzLkdlb2NvZGVyKCk7XG5cbiAgICBnZW9jb2Rlci5nZW9jb2RlKHsgYWRkcmVzczogYWRkcmVzcyB9LCAocmVzdWx0cywgc3RhdHVzKSA9PiB7XG4gICAgICBpZiAoc3RhdHVzID09PSAnT0snICYmIHJlc3VsdHMgJiYgcmVzdWx0c1swXSkge1xuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHJlc3VsdHNbMF0uZ2VvbWV0cnkubG9jYXRpb247XG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jZW50ZXIgPSB7XG4gICAgICAgICAgICBsYXQ6IGxvY2F0aW9uLmxhdCgpLFxuICAgICAgICAgICAgbG5nOiBsb2NhdGlvbi5sbmcoKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuY3VycmVudENvb3JkaW5hdGVzID0gdGhpcy5jZW50ZXI7XG4gICAgICAgICAgdGhpcy56b29tID0gMTU7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgJ0dlb2NvZGUgd2FzIG5vdCBzdWNjZXNzZnVsIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbjogJyArIHN0YXR1c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25BZGRyZXNzSW5wdXRLZXl1cChldmVudDogYW55KSB7XG4gICAgY29uc3QgcXVlcnkgPSBldmVudC50YXJnZXQudmFsdWU7XG5cbiAgICAvLyBDbGVhciBwcmV2aW91cyB0aW1lb3V0XG4gICAgaWYgKHRoaXMuc2VhcmNoVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2VhcmNoVGltZW91dCk7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGFycm93IGtleSBuYXZpZ2F0aW9uXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIHRoaXMuaG92ZXJlZEluZGV4ID0gTWF0aC5taW4oXG4gICAgICAgIHRoaXMuaG92ZXJlZEluZGV4ICsgMSxcbiAgICAgICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnMubGVuZ3RoIC0gMVxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICB0aGlzLmhvdmVyZWRJbmRleCA9IE1hdGgubWF4KHRoaXMuaG92ZXJlZEluZGV4IC0gMSwgLTEpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaG92ZXJlZEluZGV4ID49IDAgJiZcbiAgICAgICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnNbdGhpcy5ob3ZlcmVkSW5kZXhdXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zZWxlY3RBZGRyZXNzKHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zW3RoaXMuaG92ZXJlZEluZGV4XSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICB0aGlzLnNob3dEcm9wZG93biA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChxdWVyeS5sZW5ndGggPCAyKSB7XG4gICAgICB0aGlzLmFkZHJlc3NTdWdnZXN0aW9ucyA9IFtdO1xuICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlYXJjaFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2VhcmNoQWRkcmVzc2VzKHF1ZXJ5KTtcbiAgICB9LCAzMDApO1xuICB9XG5cbiAgc2VhcmNoQWRkcmVzc2VzKHF1ZXJ5OiBzdHJpbmcpIHtcbiAgICAvLyBSZXBsYWNlIHRoaXMgd2l0aCB5b3VyIGFjdHVhbCBhZGRyZXNzIHNlYXJjaCBBUEkgY2FsbFxuICAgIC8vIEZvciBleGFtcGxlLCB1c2luZyBHb29nbGUgUGxhY2VzIEFQSTpcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBuZXcgZ29vZ2xlLm1hcHMucGxhY2VzLkF1dG9jb21wbGV0ZVNlcnZpY2UoKTtcbiAgICBzZXJ2aWNlLmdldFBsYWNlUHJlZGljdGlvbnMoXG4gICAgICB7XG4gICAgICAgIGlucHV0OiBxdWVyeSxcbiAgICAgICAgdHlwZXM6IFsnYWRkcmVzcyddLFxuICAgICAgfSxcbiAgICAgIChwcmVkaWN0aW9ucywgc3RhdHVzKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzdGF0dXMgPT09IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZXNTZXJ2aWNlU3RhdHVzLk9LICYmXG4gICAgICAgICAgcHJlZGljdGlvbnNcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnMgPSBwcmVkaWN0aW9ucy5tYXAoKHByZWRpY3Rpb24pID0+ICh7XG4gICAgICAgICAgICBwbGFjZV9pZDogcHJlZGljdGlvbi5wbGFjZV9pZCxcbiAgICAgICAgICAgIG1haW5fdGV4dDogcHJlZGljdGlvbi5zdHJ1Y3R1cmVkX2Zvcm1hdHRpbmcubWFpbl90ZXh0LFxuICAgICAgICAgICAgc2Vjb25kYXJ5X3RleHQ6IHByZWRpY3Rpb24uc3RydWN0dXJlZF9mb3JtYXR0aW5nLnNlY29uZGFyeV90ZXh0LFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHByZWRpY3Rpb24uZGVzY3JpcHRpb24sXG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmhvdmVyZWRJbmRleCA9IC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zID0gW107XG4gICAgICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzZWxlY3RBZGRyZXNzKHN1Z2dlc3Rpb246IGFueSkge1xuICAgIGNvbnN0IGFkZHJlc3NJbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAnI2FkZHJlc3NJbnB1dCdcbiAgICApIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgaWYgKGFkZHJlc3NJbnB1dCkge1xuICAgICAgYWRkcmVzc0lucHV0LnZhbHVlID0gc3VnZ2VzdGlvbi5kZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gbmV3IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZXNTZXJ2aWNlKFxuICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICApO1xuICAgIHNlcnZpY2UuZ2V0RGV0YWlscyhcbiAgICAgIHtcbiAgICAgICAgcGxhY2VJZDogc3VnZ2VzdGlvbi5wbGFjZV9pZCxcbiAgICAgICAgZmllbGRzOiBbJ2dlb21ldHJ5JywgJ2Zvcm1hdHRlZF9hZGRyZXNzJ10sXG4gICAgICB9LFxuICAgICAgKHBsYWNlLCBzdGF0dXMpID0+IHtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gZ29vZ2xlLm1hcHMucGxhY2VzLlBsYWNlc1NlcnZpY2VTdGF0dXMuT0sgJiYgcGxhY2UpIHtcbiAgICAgICAgICBjb25zdCBsYXQgPSBwbGFjZS5nZW9tZXRyeT8ubG9jYXRpb24/LmxhdCgpO1xuICAgICAgICAgIGNvbnN0IGxuZyA9IHBsYWNlLmdlb21ldHJ5Py5sb2NhdGlvbj8ubG5nKCk7XG5cbiAgICAgICAgICBpZiAobGF0ICE9PSB1bmRlZmluZWQgJiYgbG5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMubG9uZ2l0dWRlID0gbG5nO1xuICAgICAgICAgICAgdGhpcy5sYXRpdHVkZSA9IGxhdDtcblxuICAgICAgICAgICAgdGhpcy5jZW50ZXIgPSB7IGxhdCwgbG5nIH07XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDb29yZGluYXRlcyA9IHRoaXMuY2VudGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnNob3dEcm9wZG93biA9IGZhbHNlO1xuICAgIHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zID0gW107XG4gIH1cblxuICBvbklucHV0Qmx1cigpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gZmFsc2U7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG4gIGZpbmRNZWRpY2FsUXVlc3Rpb25zSW5PcGVuUXVvdGUoYXJyYXlPZk9iaiA6IGFueSkge1xuICAgIGlmKGFycmF5T2ZPYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdNZWRpQ25kdG4nIHx8IGFycmF5T2ZPYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICAnTGlmZU1lZGlDbmR0bicpIHtcbiAgICAgIHRoaXMuaXNNZWRpY2FsU3ViUXVlc3Rpb25zQXZhaWxhYmxlID0gYXJyYXlPZk9iajtcbiAgICB9XG4gICAgaWYodGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuaXNNZWRpY2FsU3ViUXVlc3Rpb25zQXZhaWxhYmxlKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGFycmF5T2ZPYmpbJ3BlcnNvblVXQWN0aXZpdHlSZXNwb25zZUVudGl0eSddKSkge1xuICAgICAgYXJyYXlPZk9ialsncGVyc29uVVdBY3Rpdml0eVJlc3BvbnNlRW50aXR5J10uZm9yRWFjaCgoc2luZ2xlU3ViQXJyYXkgOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5maW5kTWVkaWNhbFF1ZXN0aW9uc0luT3BlblF1b3RlKHNpbmdsZVN1YkFycmF5KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG1hcEFuc3dlcnNGb3JPcGVuUXVvdGUoKSB7XG4gICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXT8ucXVlc3Rpb25MaXN0KSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdPy5xdWVzdGlvbkxpc3RbMF0/LnBlcnNvblVXZGV0YWlsc0xpc3QpKSB7XG4gICAgICBsZXQgYXJyYXlPZktleXMgOiBhbnkgPSBPYmplY3Qua2V5cyh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXT8ucXVlc3Rpb25MaXN0WzBdPy5wZXJzb25VV2RldGFpbHNMaXN0KTtcbiAgICAgIGFycmF5T2ZLZXlzLmZvckVhY2goKHNpbmdsZUtleSA6IGFueSwgc2luZ2xlS2V5TGVuZ3RoIDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdWydxdWVzdGlvbkxpc3QnXVswXVsncGVyc29uVVdkZXRhaWxzTGlzdCddW3NpbmdsZUtleV0pKSB7XG4gICAgICAgICAgdGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF1bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J11bc2luZ2xlS2V5XS5mb3JFYWNoKChzaW5nbGVBbnN3ZXJPYmogOiBhbnksIHNpbmdsZUFuc3dlck9iakxlbmd0aCA6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQZXJzb25Vd0Fuc3dlcnMoc2luZ2xlQW5zd2VyT2JqKTtcbiAgICAgICAgICAgIGlmKHNpbmdsZUtleUxlbmd0aCA9PT0gKGFycmF5T2ZLZXlzLmxlbmd0aCAtIDEpICYmIHNpbmdsZUFuc3dlck9iakxlbmd0aCA9PT0gKHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdWydxdWVzdGlvbkxpc3QnXVswXVsncGVyc29uVVdkZXRhaWxzTGlzdCddW3NpbmdsZUtleV0ubGVuZ3RoIC0gMSkpIHtcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIH1cbiAgfVxuXG4gIHByZXBhcmVQZXJzb25Vd1F1ZXN0aW9uc09iaigpIHtcbiAgICB0aGlzLnF1ZXN0aW9uTGlzdCA9IFtdO1xuICAgIGxldCBkYXRhOiBhbnkgPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKTtcbiAgICB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94ID0gW107XG5cbiAgICBsZXQgaXNEaXNhYmxlIDogYW55ID0gZmFsc2U7XG4gICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdpc0Rpc2FibGVNZWRpY2FsUXVlc3Rpb25zJykpICkge1xuICAgICAgbGV0IGlzRGlzYWJsZU1lZGljYWxRdWVzdGlvbnNpblVpICA6IGFueSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2lzRGlzYWJsZU1lZGljYWxRdWVzdGlvbnMnKTtcbiAgICAgIGlzRGlzYWJsZSA9IEpTT04ucGFyc2UoaXNEaXNhYmxlTWVkaWNhbFF1ZXN0aW9uc2luVWkpID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRhdGFbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10pKSB7XG4gICAgICBsZXQgcGVyc29uVXdJZEFycmF5OiBhbnkgPSBbXTtcbiAgICAgIGRhdGFbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmo6IGFueSkgPT4ge1xuICAgICAgICBwZXJzb25Vd0lkQXJyYXkucHVzaChzaW5nbGVRdWVzdGlvbk9ialsncGVyc29uVVdJZCddKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoXG4gICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZGF0YSkgJiZcbiAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddKVxuICAgICAgKSB7XG5cbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZGF0YVsncXVlc3Rpb25zUmVzcG9uc2UnXSkpIHtcbiAgICAgICAgICBsZXQgZGlzdGluY3RTdGVwczogYW55ID0gW107XG4gICAgICAgICAgZGF0YVsncXVlc3Rpb25zUmVzcG9uc2UnXS5mb3JFYWNoKChzaW5nbGVQZXJzb25PYmplY3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0lkID0gc2luZ2xlUGVyc29uT2JqZWN0WydwZXJzb25VV0lkJ10udG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVBlcnNvbk9iamVjdFsncXVlc3Rpb25MaXN0J10pKSB7XG4gICAgICAgICAgICAgIHNpbmdsZVBlcnNvbk9iamVjdFsncXVlc3Rpb25MaXN0J10uZm9yRWFjaChcbiAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHNpbmdsZVF1ZXN0aW9uWyd0aXRsZSddID09PSAnTWVkaWNhbCBEZXRhaWxzJykge1xuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UZXh0J10gPSBzaW5nbGVRdWVzdGlvbltcbiAgICAgICAgICAgICAgICAgICAgICAncXVlc3Rpb25UZXh0J1xuICAgICAgICAgICAgICAgICAgICBdLnJlcGxhY2UoL1xcXFxuL2csICdcXG4nKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSA9XG4gICAgICAgICAgICAgICAgICAgIGRhdGFbJ2RvbWFpblZhbHVlcyddW3NpbmdsZVF1ZXN0aW9uWydkb21haW5OYW1lJ11dO1xuXG4gICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZmllbGQnXSA9IHRoaXMuZ2V0RmllbGQoc2luZ2xlUXVlc3Rpb24pO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoc2luZ2xlUXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdQQU4nKSB7XG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWyd2YWxpZGF0aW9ucyddID1cbiAgICAgICAgICAgICAgICAgICAgICAne1wiVHlwZVwiOlwiQWxwaGFOdW1lcmljXCIsXCJNaW5WYWx1ZVwiOlwiMTBcIixcIk1heFZhbHVlXCI6XCIxMFwiLFwicmVnZXhQYXR0ZXJuXCI6XCIvXihbYS16QS1aXSl7NX0oWzAtOV0pezR9KFthLXpBLVpdKXsxfT8kL1wifSc7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAvLyBpZiAoc2luZ2xlUXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdGdGNhQ250Y0RldGxzJykge1xuICAgICAgICAgICAgICAgICAgLy8gICBzaW5nbGVRdWVzdGlvblsndmFsaWRhdGlvbnMnXSA9ICd7XCJjdXN0b21WYWxpZGF0aW9uXCI6W3tcImNvdW50cnlcIjpcIklOXCIsXCJNaW5WYWx1ZVwiOlwiMTBcIixcIk1heFZhbHVlXCI6XCIxMFwiLFwicmVnZXhQYXR0ZXJuXCI6XCIoKF5bNi05XSl7MX0oWzAtOV0pezl9JClcIn0se1wiY291bnRyeVwiOlwiT1RIRVJcIixcIk1pblZhbHVlXCI6XCI1XCIsXCJNYXhWYWx1ZVwiOlwiMTRcIn1dfSc7XG4gICAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJlxuICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ11cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10uZm9yRWFjaChcbiAgICAgICAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9iajogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dFF1ZXN0aW9uT2JqZWN0OiBhbnkgPSBzaW5nbGVQZXJzb25PYmplY3RbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdxdWVzdGlvbkxpc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICBdLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG9iamVjdDogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFsncXVlc3Rpb25JZCddID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmpbJ25leHRRdWVzdGlvbklkJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFF1ZXN0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFF1ZXN0aW9uT2JqZWN0WzBdWydhbnN3ZXJlZFZhbHVlJ10gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmpbJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmIChzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsnZG9tYWluVmFsdWVzJ11bc2luZ2xlUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXV1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIGRhdGFbJ2RvbWFpblZhbHVlcyddW1xuICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXVxuICAgICAgICAgICAgICAgICAgICAgIF0uZm9yRWFjaCgoc2luZ2xlRG9tYWluVmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3gucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXG4gICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKCFkaXN0aW5jdFN0ZXBzLmluY2x1ZGVzKHNpbmdsZVF1ZXN0aW9uWydzdGVwJ10pKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMucHVzaChzaW5nbGVRdWVzdGlvblsnc3RlcCddKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXS5mb3JFYWNoKChxdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgcXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0lNQUdFIFRFWFQnKSB7XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvblsncXVlc3Rpb25UZXh0J10gPSBxdWVzdGlvbltcbiAgICAgICAgICAgICAgICAgICAgJ3F1ZXN0aW9uVGV4dCdcbiAgICAgICAgICAgICAgICAgIF0ucmVwbGFjZUFsbCgnXFxcXG4nLCAnPGJyPicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZGljYWxRdWVzdGlvbnNGZWV0TGlzdCA9IHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVEYnXSA9IHF1ZXN0aW9uO1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhURiddWydmaWVsZCddWydpc1Nob3dMYWJlbCddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFRGJ11bJ2ZpZWxkJ11bJ2NvbnRyb2xTdHlsZSddID0ge1xuICAgICAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogJ3NlbGVjdCcsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMTZweCcsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6ICc0MDAnLFxuICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiAnTXVsaXNoJyxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJyNGRkZGRkYnLFxuICAgICAgICAgICAgICAgICAgICBjYXJldENvbG9yOiAnI2ZmYmIwMCcsXG4gICAgICAgICAgICAgICAgICAgIG51ZGdlRGlzcGxheUltYWdlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkJnQ29sb3I6ICcjRkZGRkZGJyxcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25Db2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6ICc0MDAnLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JhY2tncm91bmQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJnQ29sb3I6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Db2xvcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJMZWZ0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyUmFkaXVzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBob3ZlckJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUNvbG9yOiAnI0VDRUNFQycsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVCYWNrZ3JvdW5kOiAnI0VDRUNFQycsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQm9yZGVyQ29sb3I6ICcjRUUwMDAwJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkRGF0ZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBpc01hc3RlckNzczogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbE1ldGFJZDpcbiAgICAgICAgICAgICAgICAgICAgICAnTElfQ09NX0dFTl9DVFJMX3NlbGVjdF9kb3dubG9hZERvY3VtZW50c19WMScsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclN0eWxlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUSScpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWNhbFF1ZXN0aW9uc0luY2hlc0xpc3QgPSBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ107XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFRJJ10gPSBxdWVzdGlvbjtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVEknXVsnZmllbGQnXVsnaXNTaG93TGFiZWwnXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhUSSddWydmaWVsZCddWydjb250cm9sU3R5bGUnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbFR5cGU6ICdzZWxlY3QnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogJzE2cHgnLFxuICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiAnNDAwJyxcbiAgICAgICAgICAgICAgICAgICAgZm9udEZhbWlseTogJ011bGlzaCcsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICcjRkZGRkZGJyxcbiAgICAgICAgICAgICAgICAgICAgY2FyZXRDb2xvcjogJyNmZmJiMDAnLFxuICAgICAgICAgICAgICAgICAgICBudWRnZURpc3BsYXlJbWFnZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25CZ0NvbG9yOiAnI0ZGRkZGRicsXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiAnNDAwJyxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCYWNrZ3JvdW5kOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0NvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25CZ0NvbG9yOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQ29sb3I6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyTGVmdDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlclJhZGl1czogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICAgICAgICAgICAgICBob3ZlckJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBob3ZlckNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVDb2xvcjogJyNFQ0VDRUMnLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQmFja2dyb3VuZDogJyNFQ0VDRUMnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckJvcmRlckNvbG9yOiAnI0VFMDAwMCcsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlZERhdGU6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgaXNNYXN0ZXJDc3M6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xNZXRhSWQ6XG4gICAgICAgICAgICAgICAgICAgICAgJ0xJX0NPTV9HRU5fQ1RSTF9zZWxlY3RfZG93bmxvYWREb2N1bWVudHNfVjEnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJTdHlsZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBjc3NDbGFzczogbnVsbCxcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCcpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWNhbFF1ZXN0aW9uc0luY2hlc0xpc3QgPSBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ107XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFQnXSA9IHF1ZXN0aW9uO1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhUJ11bJ2ZpZWxkJ11bJ2lzU2hvd0xhYmVsJ10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVCddWydmaWVsZCddWydjb250cm9sU3R5bGUnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbFR5cGU6ICdGUkVFVEVYVCcsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMTZweCcsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6ICc0MDAnLFxuICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiAnTXVsaXNoJyxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJyNGRkZGRkYnLFxuICAgICAgICAgICAgICAgICAgICBjYXJldENvbG9yOiAnI2ZmYmIwMCcsXG4gICAgICAgICAgICAgICAgICAgIG51ZGdlRGlzcGxheUltYWdlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkJnQ29sb3I6ICcjRkZGRkZGJyxcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25Db2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6ICc0MDAnLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JhY2tncm91bmQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJnQ29sb3I6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Db2xvcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJMZWZ0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyUmFkaXVzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBob3ZlckJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUNvbG9yOiAnI0VDRUNFQycsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVCYWNrZ3JvdW5kOiAnI0VDRUNFQycsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQm9yZGVyQ29sb3I6ICcjRUUwMDAwJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkRGF0ZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBpc01hc3RlckNzczogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbE1ldGFJZDpcbiAgICAgICAgICAgICAgICAgICAgICAnTElfQ09NX0dFTl9DVFJMX3NlbGVjdF9kb3dubG9hZERvY3VtZW50c19WMScsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclN0eWxlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnREVDTEFSQVRJT04nKSB7XG4gICAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdyZWN2U2Z0Q29weScpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqZWN0Wydyb2xlJ11dW10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddID0gW107XG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICBkb21haW5JbnRlcm5hbFZhbHVlOiBxdWVzdGlvblsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgICAgICAgIGRvbWFpblVpVmFsdWU6ICdOJyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ10gPSBbXTtcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZG9tYWluSW50ZXJuYWxWYWx1ZTogcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICAgICAgZG9tYWluVWlWYWx1ZTogJ1knLFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnaGFyZENvcHlMYW5nJykge1xuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID0gJ0hBUkQgQ09QWSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBzaW5nbGVQZXJzb25PYmplY3RbJ3F1ZXN0aW9uTGlzdCddLnNvcnQoXG4gICAgICAgICAgICAgICAgKGE6IGFueSwgYjogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgYVsnc3RlcCddIC0gYlsnc3RlcCddIHx8IGFbJ2Rpc3BsYXlPcmRlciddIC0gYlsnZGlzcGxheU9yZGVyJ11cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHF1ZXN0aW9uc0xpc3RGb3JMQTogYW55ID0gW107XG4gICAgICAgICAgICBkaXN0aW5jdFN0ZXBzLmZvckVhY2goKHN0ZXBzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkT2JqOiBhbnkgPSBzaW5nbGVQZXJzb25PYmplY3RbJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ3N0ZXAnXSA9PT0gc3RlcHNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge1xuICAgICAgICAgICAgICAgIHN0ZXA6IHN0ZXBzLFxuICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVBlcnNvbk9iamVjdFsncGVyc29uVVdJZCddLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25zOiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKVxuICAgICAgICAgICAgICAgICAgPyBmaWx0ZXJlZE9ialxuICAgICAgICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgICAgICAgICBzZWN0aW9uTmFtZTogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iailcbiAgICAgICAgICAgICAgICAgID8gZmlsdGVyZWRPYmpbMF1bJ3RpdGxlJ11cbiAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgaXNNZWRpY2FsU3ViUXVlc3Rpb246IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNob3dTZWN0aW9uOiB0cnVlLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iaikpIHtcbiAgICAgICAgICAgICAgICAvLyBIYXJkIENvcHkgYW5kIE1hcCBxdWVzdGlvblxuICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZEhhcmRDb3B5UXVlc3Rpb246IGFueSA9IGZpbHRlcmVkT2JqLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ3JlY3ZTZnRDb3B5J1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRIYXJkQ29weVF1ZXN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgb2JqWydxdWVzdGlvbnMnXS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25UeXBlOiAnTUFQJyxcbiAgICAgICAgICAgICAgICAgICAgaXNTaG93UXVlc3Rpb25JblVJOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvblJlbGF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25JZDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkSGFyZENvcHlRdWVzdGlvblswXVsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uQW5zd2VyOiAnWScsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBpZiBOUkkgdGhlbiBwYXNzcG9ydCB1cGxvYWQgaXMgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICBsZXQgZmlsdGVyZWROYXRpb25hbGl0eVF1ZXN0aW9uOiBhbnkgPSBmaWx0ZXJlZE9iai5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdOYXRpb25hbGl0eSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkTmF0aW9uYWxpdHlRdWVzdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVBlcnNvbk9iamVjdFsncXVlc3Rpb25MaXN0J10ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uVHlwZTogJ1BBU1NQT1JUX1VQTE9BRCcsXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsUXVlc3Rpb246ICdOJyxcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25UZXh0OiAnUGFzc3BvcnQgRGV0YWlscyAnLFxuICAgICAgICAgICAgICAgICAgICBpc1Nob3dRdWVzdGlvbkluVUk6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uUmVsYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbklkOlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWROYXRpb25hbGl0eVF1ZXN0aW9uWzBdWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25BbnN3ZXI6ICdmb3Jnbk5hdGlvbmFsJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgb2JqWydxdWVzdGlvbnMnXS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25UeXBlOiAnUEFTU1BPUlRfVVBMT0FEJyxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxRdWVzdGlvbjogJ04nLFxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblRleHQ6ICdQYXNzcG9ydCBEZXRhaWxzICcsXG4gICAgICAgICAgICAgICAgICAgIGlzU2hvd1F1ZXN0aW9uSW5VSTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25SZWxhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uSWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZE5hdGlvbmFsaXR5UXVlc3Rpb25bMF1bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbkFuc3dlcjogJ2ZvcmduTmF0aW9uYWwnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHF1ZXN0aW9uc0xpc3RGb3JMQS5wdXNoKG9iaik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIGxldCBsaWZlQXNzdXJlZE9iamVjdEluZGV4SW5NYXN0ZXI6IGFueSA9IHRoaXMucXVlc3Rpb25MaXN0LmZpbmRJbmRleCgoc2luZ2xlT2JqOiBhbnkpID0+IHNpbmdsZU9ialsncm9sZSddID09PSBzaW5nbGVQZXJzb25PYmplY3RbJ3JvbGUnXSk7XG4gICAgICAgICAgICAvLyBpZiAobGlmZUFzc3VyZWRPYmplY3RJbmRleEluTWFzdGVyICE9PSB0aGlzLm51bWJlck1pbnVzT25lKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uTGlzdCA9IHF1ZXN0aW9uc0xpc3RGb3JMQTtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZUhlaWdodFF1ZXN0aW9uSWRzKCk7XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqID0gZGF0YVsncXVlc3Rpb25zUmVzcG9uc2UnXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKCkpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF0pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF0/LnF1ZXN0aW9uTGlzdCkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXT8ucXVlc3Rpb25MaXN0WzBdPy5wZXJzb25VV2RldGFpbHNMaXN0KSApIHtcbiAgICAgICAgICBsZXQgaXNTdWJRdWVzdGlvbkV4aXN0czogYW55ID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5pc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGUgPSBudWxsO1xuICAgICAgICAgIGxldCBhcnJheU9mS2V5cyA6IGFueSA9IE9iamVjdC5rZXlzKHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdPy5xdWVzdGlvbkxpc3RbMF0/LnBlcnNvblVXZGV0YWlsc0xpc3QpO1xuICAgICAgICAgIGFycmF5T2ZLZXlzLmZvckVhY2goKHNpbmdsZUtleSA6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF1bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J11bc2luZ2xlS2V5XSkpIHtcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF1bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J11bc2luZ2xlS2V5XS5mb3JFYWNoKChzaW5nbGVBbnN3ZXJPYmogOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbmRNZWRpY2FsUXVlc3Rpb25zSW5PcGVuUXVvdGUoc2luZ2xlQW5zd2VyT2JqKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuaXNNZWRpY2FsU3ViUXVlc3Rpb25zQXZhaWxhYmxlKSkge1xuICAgICAgICAgICAgdGhpcy5tYXN0ZXJTZXJ2aWNlXG4gICAgICAgICAgICAgIC5nZXRTdWJRdWVzdGlvbnMoXG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZCgpPy5jb25maWdEYXRhLFxuICAgICAgICAgICAgICAgIHRoaXMuaXNNZWRpY2FsU3ViUXVlc3Rpb25zQXZhaWxhYmxlWydhbnN3ZXInXSxcbiAgICAgICAgICAgICAgICB0aGlzLmlzTWVkaWNhbFN1YlF1ZXN0aW9uc0F2YWlsYWJsZVsncGVyc29uVVdJZCddXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAoc3ViUXVlc3Rpb25SZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBsZXQgZGlzdGluY3RTdGVwczogYW55ID0gW107XG4gICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzdWJRdWVzdGlvblJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblJlc3BvbnNlLmZvckVhY2goKHN1YlF1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10gPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ2RvbWFpblZhbHVlcyddW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnZG9tYWluTmFtZSddXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2ZpZWxkJ10gPSB0aGlzLmdldEZpZWxkKHN1YlF1ZXN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRpc3RpbmN0U3RlcHMuaW5jbHVkZXMoc3ViUXVlc3Rpb25bJ2NsdXN0ZXJJZCddKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5wdXNoKHN1YlF1ZXN0aW9uWydjbHVzdGVySWQnXSk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblJlc3BvbnNlLnNvcnQoXG4gICAgICAgICAgICAgICAgICAgICAgKGE6IGFueSwgYjogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgYVsnc3RlcCddIC0gYlsnc3RlcCddIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBhWydkaXNwbGF5T3JkZXInXSAtIGJbJ2Rpc3BsYXlPcmRlciddXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMuZm9yRWFjaCgoc3RlcHM6IGFueSwgaW5kOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgZmlsdGVyZWRPYmo6IGFueSA9IHN1YlF1ZXN0aW9uUmVzcG9uc2UuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydjbHVzdGVySWQnXSA9PT0gc3RlcHNcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXA6IDEwMDAgKyBpbmQsXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbnM6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gZmlsdGVyZWRPYmpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25OYW1lOiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkT2JqWzBdWyd0aXRsZSddXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc01lZGljYWxTdWJRdWVzdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dTZWN0aW9uOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGVbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BlcnNvblVXSWQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0udG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGxldCBMYUluZGV4OiBhbnkgPSB0aGlzLnBlcnNvblV3TWFzdGVyT2JqLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIChzaW5nbGU6IGFueSkgPT4gc2luZ2xlWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvblsncm9sZSddXG4gICAgICAgICAgICAgICAgICAgICAgLy8gKTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uTGlzdC5wdXNoKG9iaik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSA9IHN1YlF1ZXN0aW9uUmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgIC8vIGxldCBsYUluZGV4OiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KChzaW5nbGVQZXJzb25PYmo6IGFueSkgPT4gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvblsncm9sZSddKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bXG4gICAgICAgICAgICAgICAgICAgICAgJ3F1ZXN0aW9uTGlzdCdcbiAgICAgICAgICAgICAgICAgICAgXSA9IHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydxdWVzdGlvbnNSZXNwb25zZSddWzBdW1xuICAgICAgICAgICAgICAgICAgICAgICdxdWVzdGlvbkxpc3QnXG4gICAgICAgICAgICAgICAgICAgIF0uY29uY2F0KHRoaXMubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcEFuc3dlcnNGb3JPcGVuUXVvdGUoKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwQW5zd2Vyc0Zvck9wZW5RdW90ZSgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLm1hcEFuc3dlcnNGb3JPcGVuUXVvdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWFwQW5zd2Vyc0Zvck9wZW5RdW90ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKS5mb3JFYWNoKChzaW5nbGVQZXJzb246IGFueSkgPT4ge1xuICAgICAgICAgIC8vICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUGVyc29uWydxdWVzdGlvbkxpc3QnXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVQZXJzb25bJ3F1ZXN0aW9uTGlzdCddWzBdKSkge1xuICAgICAgICAgIC8vICAgICBsZXQgYXJyYXlPZktleXMgPSBPYmplY3Qua2V5cyhzaW5nbGVQZXJzb25bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J10pO1xuICAgICAgICAgIC8vICAgICBpZiAoYXJyYXlPZktleXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIC8vICAgICAgIGFycmF5T2ZLZXlzLmZvckVhY2goKHNpbmdsZUtleSkgPT4ge1xuICAgICAgICAgIC8vICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUGVyc29uWydxdWVzdGlvbkxpc3QnXVswXVsncGVyc29uVVdkZXRhaWxzTGlzdCddW3NpbmdsZUtleV0pKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgIHNpbmdsZVBlcnNvblsncXVlc3Rpb25MaXN0J11bMF1bJ3BlcnNvblVXZGV0YWlsc0xpc3QnXVtzaW5nbGVLZXldLmZvckVhY2goKGFuc3dlck9iajogYW55KSA9PiB7XG5cbiAgICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0gPSBhbnN3ZXJPYmouYW5zd2VyO1xuXG5cbiAgICAgICAgICAvLyAgICAgICAgICAgICBsZXQgZmlsdGVyZWRRdWVzdGlvbjogYW55ID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT0gYW5zd2VyT2JqWydxdWVzdGlvbklkJ10pO1xuICAgICAgICAgIC8vICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb24pICYmIGZpbHRlcmVkUXVlc3Rpb25bMF1bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0gPSBbXTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIGxldCBsaXN0T2ZPcHRpb25zU2VsZWN0ZWQgOiBhbnkgPSBhbnN3ZXJPYmouYW5zd2VyLnNwbGl0KCcsJyk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyBsaXN0T2ZPcHRpb25zU2VsZWN0ZWQuZm9yRWFjaCgoc2luZ2xlRWxlbWVudCA6IGFueSkgPT4ge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb24pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvblswXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uWzBdWydkb21haW5WYWx1ZXMnXSkpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgICBsZXQgZmlsdGVyZWREb21haW5WYWx1ZU9iaiA6IGFueSA9IGZpbHRlcmVkUXVlc3Rpb25bMF1bJ2RvbWFpblZhbHVlcyddLmZpbHRlcigoc2luZ2xlT2JqIDogYW55KSA9PiBzaW5nbGVPYmpbJ2RvbWFpbkludGVybmFsVmFsdWUnXSA9PT0gc2luZ2xlRWxlbWVudCk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZERvbWFpblZhbHVlT2JqKSkge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLnF1ZXN0aW9uSWRdLnB1c2goe1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgICAgICBsYWJlbCA6IGZpbHRlcmVkRG9tYWluVmFsdWVPYmpbMF1bJ2RvbWFpblVpVmFsdWUnXSxcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgICAgICAgdmFsdWUgOiBmaWx0ZXJlZERvbWFpblZhbHVlT2JqWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgICAgIH0pO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgfVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0gPSBhbnN3ZXJPYmouYW5zd2VyLnNwbGl0KCcsJyk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IGFuc3dlck9iai5hbnN3ZXJcbiAgICAgICAgICAvLyAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAoYW5zd2VyT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUJykge1xuICAgICAgICAgICAgICAgICAgICAgIC8vICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddID0gYW5zd2VyT2JqWydhbnN3ZXInXTtcbiAgICAgICAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKGFuc3dlck9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gICBsZXQgZmVldEFuc3dlciA9IGFuc3dlck9ialsnYW5zd2VyJ10uc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGFuc3dlck9ialsnYW5zd2VyJ10pICYmIGFuc3dlck9ialsnYW5zd2VyJ10uaW5jbHVkZXMoJy4nKSkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10gPSBmZWV0QW5zd2VyWzBdO1xuICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10gPSBmZWV0QW5zd2VyWzFdO1xuICAgICAgICAgICAgICAgICAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddID0gZmVldEFuc3dlclswXTtcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddID0gJzAnO1xuICAgICAgICAgICAgICAgICAgICAgIC8vICAgfVxuICAgICAgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25SZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gICBpZiAoc2luZ2xlUXVlc3Rpb25SZXNwb25zZVsncXVlc3Rpb25JZCddID09PSBhbnN3ZXJPYmpbJ3F1ZXN0aW9uSWQnXSAmJiBzaW5nbGVRdWVzdGlvblJlc3BvbnNlWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RFQ0xBUkFUSU9OJykge1xuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0gPSBhbnN3ZXJPYmouYW5zd2VyO1xuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vICAgfVxuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vIH0pO1xuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vIGxldCBsYUluZGV4OiBhbnkgPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gc2luZ2xlUGVyc29uWydyb2xlJ10pO1xuXG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvbikgJiYgZmlsdGVyZWRRdWVzdGlvblswXVsncXVlc3Rpb25UeXBlJ10gPT09ICdERUNMQVJBVElPTicpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IGFuc3dlck9iai5hbnN3ZXI7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gfVxuXG4gICAgICAgICAgLy8gICAgICAgICAgICAgaWYgKGFuc3dlck9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ0xpZmVNZWRpQ25kdG4nIHx8IGFuc3dlck9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ01lZGlDbmR0bicpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIGlzU3ViUXVlc3Rpb25FeGlzdHMgPSB0cnVlO1xuXG5cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgXCJ1cmxQYXJhbUZvckRpc2Vhc2VcIjogXCJtZGVpY2FsSGlzdG9yeVwiLFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICBcImFwaVVybFwiOiBcImh0dHBzOi8vcHJlcHJvZC1kaXJlY3Rwb3J0YWxsaWZlLmdvZGlnaXQuY29tL0RpcmVjdFBvcnRhbExpZmUvbGlmZS9mZXRjaFN1YlF1ZXN0aW9uc1wiLFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICBcInVybFBhcmFtRm9yUGVyc29uVXdJZFwiOiBcInBlcnNvblVXSURcIixcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgXCJ0b2tlbkNvb2tpZVBhcmFtXCI6IFwidjNUb2tlblwiLFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICBcImlzU2VuZFRva2VuXCI6IGZhbHNlXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICB0aGlzLm1hc3RlclNlcnZpY2UuZ2V0U3ViUXVlc3Rpb25zKHRoaXMuZmllbGQoKT8uY29uZmlnRGF0YSwgYW5zd2VyT2JqWydhbnN3ZXInXSwgYW5zd2VyT2JqWydwZXJzb25VV0lkJ10pLnN1YnNjcmliZShcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgKHN1YlF1ZXN0aW9uUmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIC8vIHRoaXMubG9hZGVyU2VydmljZS5kaXNwbGF5KGZhbHNlKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICBsZXQgZGlzdGluY3RTdGVwczogYW55ID0gW107XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc3ViUXVlc3Rpb25SZXNwb25zZSkpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uUmVzcG9uc2UuZm9yRWFjaCgoc3ViUXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSA9IHRydWU7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IGZhbHNlO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddKSAmJlxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10pXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10gPSBbc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXV07XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJlxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSlcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXh0UXVlc3Rpb25PYmplY3Q6IGFueSA9IHN1YlF1ZXN0aW9uUmVzcG9uc2UuZmlsdGVyKFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob2JqZWN0OiBhbnkpID0+IG9iamVjdFsncXVlc3Rpb25JZCddID09PSBzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqWyduZXh0UXVlc3Rpb25JZCddXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRRdWVzdGlvbk9iamVjdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRRdWVzdGlvbk9iamVjdFswXVsnYW5zd2VyZWRWYWx1ZSddID0gc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9ialsncGFyZW50UXVlc3Rpb25WYWx1ZSddO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSA9IHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydkb21haW5WYWx1ZXMnXVtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnZG9tYWluTmFtZSddXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2ZpZWxkJ10gPSB0aGlzLmdldEZpZWxkKHN1YlF1ZXN0aW9uKTtcblxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzdWJRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10pKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIC8vICAgc3ViUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLmZvckVhY2goKHN1YkRvbWFpbjogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnN1Yk1lZGljYWxRdWVzdGlvbnNEb21haW5JbnRlcm5hbFZhbHVlc0xpc3QucHVzaChzdWJEb21haW5bJ2RvbWFpbkludGVybmFsVmFsdWUnXSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIC8vICAgfSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkaXN0aW5jdFN0ZXBzLmluY2x1ZGVzKHN1YlF1ZXN0aW9uWydjbHVzdGVySWQnXSkpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFN0ZXBzLnB1c2goc3ViUXVlc3Rpb25bJ2NsdXN0ZXJJZCddKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblJlc3BvbnNlLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiBhWydzdGVwJ10gLSBiWydzdGVwJ10gfHwgYVsnZGlzcGxheU9yZGVyJ10gLSBiWydkaXNwbGF5T3JkZXInXSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFN0ZXBzLmZvckVhY2goKHN0ZXBzOiBhbnksIGluZDogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZE9iajogYW55ID0gc3ViUXVlc3Rpb25SZXNwb25zZS5maWx0ZXIoKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydjbHVzdGVySWQnXSA9PT0gc3RlcHMpO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc3RlcDogMTAwMCArIGluZCxcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbnM6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopID8gZmlsdGVyZWRPYmogOiBbXSxcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uTmFtZTogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iaikgPyBmaWx0ZXJlZE9ialswXVsndGl0bGUnXSA6ICcnLFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIGlzTWVkaWNhbFN1YlF1ZXN0aW9uOiB0cnVlLFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dTZWN0aW9uOiB0cnVlLFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IGFuc3dlck9ialsncGVyc29uVVdJZCddLnRvU3RyaW5nKCksXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIC8vIGxldCBMYUluZGV4OiBhbnkgPSB0aGlzLnBlcnNvblV3TWFzdGVyT2JqLmZpbmRJbmRleChcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLy8gICAoc2luZ2xlOiBhbnkpID0+IHNpbmdsZVsncm9sZSddID09PSBzaW5nbGVQZXJzb25bJ3JvbGUnXVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAvLyApO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uTGlzdC5wdXNoKG9iaik7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UgPSBzdWJRdWVzdGlvblJlc3BvbnNlO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgLy8gbGV0IGxhSW5kZXg6IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gc2luZ2xlUGVyc29uWydyb2xlJ10pO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bJ3F1ZXN0aW9uTGlzdCddID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bJ3F1ZXN0aW9uTGlzdCddLmNvbmNhdCh0aGlzLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmRpc2FibGVDb25maXJtYXRpb25CdXR0b24gPSBmYWxzZTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgLy8gdGhpcy5kaXNhYmxlQ29uZmlybWF0aW9uQnV0dG9uID0gdHJ1ZTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmxvYWRlclNlcnZpY2UuZGlzcGxheShmYWxzZSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgfVxuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vIGVsc2Uge1xuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vICAgdGhpcy5sb2FkZXJTZXJ2aWNlLmRpc3BsYXkoZmFsc2UpO1xuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vIH1cblxuICAgICAgICAgIC8vICAgICAgICAgICAgIGlmICh0eXBlb2YgYW5zd2VyT2JqLmFuc3dlciA9PT0gJ3N0cmluZycgJiYgYW5zd2VyT2JqLmFuc3dlciAhPT0gJ1knICYmIGFuc3dlck9iai5hbnN3ZXIgIT09ICdOJykge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gaWYgKGFuc3dlck9iai5hbnN3ZXIuaW5jbHVkZXMoJywnKSkge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICBhbnN3ZXJPYmouYW5zd2VyLnNwbGl0KCcsJykuZm9yRWFjaCgoYW5zd2VyOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJdID0gdHJ1ZTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgfSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmouYW5zd2VyXSA9IHRydWU7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgfVxuICAgICAgICAgIC8vICAgICAgICAgICAgIHRoaXMuICB1cGRhdGVQZXJzb25Vd0Fuc3dlcnMoYW5zd2VyT2JqKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgfSk7XG4gICAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgICAgLy8gICAgICAgfSk7XG4gICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAvLyAgIH1cbiAgICAgICAgICAvLyB9KTtcbiAgICAgICAgfVxuXG5cbiAgICB9XG5cbiAgICB0aGlzLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XG5cbiAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydoZWlnaHRPYmplY3RUeXBlcyddID0ge1xuICAgICAgY29udHJvbFN0eWxlOiB7XG4gICAgICAgIGNvbnRyb2xUeXBlOiAnc2VsZWN0JyxcbiAgICAgICAgYm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgYm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgIGJvcmRlclJhZGl1czogbnVsbCxcbiAgICAgICAgZm9udFNpemU6ICcxNnB4JyxcbiAgICAgICAgZm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgIGZvbnRGYW1pbHk6ICdNdWxpc2gnLFxuICAgICAgICBjb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICBiYWNrZ3JvdW5kOiAnI0ZGRkZGRicsXG4gICAgICAgIGNhcmV0Q29sb3I6ICcjZmZiYjAwJyxcbiAgICAgICAgbnVkZ2VEaXNwbGF5SW1hZ2U6IG51bGwsXG4gICAgICAgIGRyb3Bkb3duT3B0aW9uQmdDb2xvcjogJyNGRkZGRkYnLFxuICAgICAgICBkcm9wZG93bk9wdGlvbkNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgIGRyb3Bkb3duT3B0aW9uRm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgICBmb2N1c0JvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICBmb2N1c0JvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgIGZvY3VzQmFja2dyb3VuZDogbnVsbCxcbiAgICAgICAgZm9jdXNDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQmdDb2xvcjogbnVsbCxcbiAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yOiBudWxsLFxuICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uRm9udFdlaWdodDogbnVsbCxcbiAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlckxlZnQ6IG51bGwsXG4gICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXM6IG51bGwsXG4gICAgICAgIGhvdmVyQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgaG92ZXJCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgaG92ZXJDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICBkaXNhYmxlQ29sb3I6ICcjRUNFQ0VDJyxcbiAgICAgICAgZGlzYWJsZUJhY2tncm91bmQ6ICcjRUNFQ0VDJyxcbiAgICAgICAgZXJyb3JCb3JkZXJDb2xvcjogJyNFRTAwMDAnLFxuICAgICAgICBlcnJvckJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICBlcnJvckNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgIGNyZWF0ZWREYXRlOiBudWxsLFxuICAgICAgICBwYWRkaW5nOiBudWxsLFxuICAgICAgICBtYXJnaW46IG51bGwsXG4gICAgICAgIGlzTWFzdGVyQ3NzOiBudWxsLFxuICAgICAgICBjb250cm9sTWV0YUlkOiAnTElfQ09NX0dFTl9DVFJMX3NlbGVjdF9kb3dubG9hZERvY3VtZW50c19WMScsXG4gICAgICAgIGJvcmRlclN0eWxlOiBudWxsLFxuICAgICAgICBoZWlnaHQ6IG51bGwsXG4gICAgICAgIG1pbkhlaWdodDogbnVsbCxcbiAgICAgICAgbWF4SGVpZ2h0OiBudWxsLFxuICAgICAgICBtaW5XaWR0aDogbnVsbCxcbiAgICAgICAgbWF4V2lkdGg6IG51bGwsXG4gICAgICAgIGNzc0NsYXNzOiBudWxsLFxuICAgICAgfSxcbiAgICAgIGZpZWxkTmFtZTogbnVsbCxcbiAgICAgIGxhYmVsOiAnZmVldCAvIGluY2hlcycsXG4gICAgICBwbGFjZUhvbGRlcjogJycsXG4gICAgICBtZXRhSWQ6ICcnLFxuICAgICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgICAgaXNEaXNhYmxlOiBpc0Rpc2FibGUsXG4gICAgICB2YWxpZGF0b3JzOiB7XG4gICAgICAgIGlzUmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICByZXF1aXJlZE1lc3NhZ2U6ICdUaGlzIGZpZWxkIGNhbm5vdCBiZSBlbXB0eScsXG4gICAgICAgIG1pbkxlbmd0aDogbnVsbCxcbiAgICAgICAgbWluTGVuZ3RoTWVzc2FnZTogbnVsbCxcbiAgICAgICAgbWF4TGVuZ3RoOiAxNTAsXG4gICAgICAgIG1heExlbmd0aE1lc3NhZ2U6IG51bGwsXG4gICAgICAgIHBhdHRlcm46IG51bGwsXG4gICAgICAgIHBhdHRlcm5NZXNzYWdlOiAnJyxcbiAgICAgIH0sXG4gICAgICBvcHRpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0NtJyxcbiAgICAgICAgICB2YWx1ZTogJ0NNJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnRmVldCcsXG4gICAgICAgICAgdmFsdWU6ICdGRUVUJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBjc3NDbGFzczogbnVsbCxcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgc3R5bGU6IG51bGwsXG4gICAgICBpbWFnZVVybDogbnVsbCxcbiAgICAgIGNvbmZpZ0RhdGE6IHt9LFxuICAgICAgbWV0YURhdGFPYmo6IG51bGwsXG4gICAgICBpc1Nob3dMYWJlbDogZmFsc2UsXG4gICAgICBpc01hc3RlckNvbnRyb2w6IGZhbHNlLFxuICAgICAgY29udHJvbFR5cGU6ICdzZWxlY3QnLFxuICAgIH07XG4gIH1cblxuICB1cGRhdGVQZXJzb25Vd0Fuc3dlcnMoYW5zd2VyT2JqOiBhbnkpIHtcblxuICAgIGlmIChhbnN3ZXJPYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFQnKSB7XG4gICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J10gPSBhbnN3ZXJPYmpbJ2Fuc3dlciddO1xuICAgIH1cbiAgICBpZiAoYW5zd2VyT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicpIHtcbiAgICAgIGxldCBmZWV0QW5zd2VyID0gYW5zd2VyT2JqWydhbnN3ZXInXS5zcGxpdCgnLicpO1xuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoYW5zd2VyT2JqWydhbnN3ZXInXSkgJiYgYW5zd2VyT2JqWydhbnN3ZXInXS5pbmNsdWRlcygnLicpKSB7XG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSA9IGZlZXRBbnN3ZXJbMF07XG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSA9IGZlZXRBbnN3ZXJbMV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10gPSBmZWV0QW5zd2VyWzBdO1xuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10gPSAnMCc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGZpbHRlcmVkUXVlc3Rpb246IGFueSA9IHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydxdWVzdGlvbnNSZXNwb25zZSddWzBdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09IGFuc3dlck9ialsncXVlc3Rpb25JZCddKTtcbiAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb24pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvblswXSkpIHtcbiAgICAgIGlmKGZpbHRlcmVkUXVlc3Rpb25bMF1bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnKSB7XG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IGFuc3dlck9iai5hbnN3ZXIuc3BsaXQoJywnKTtcblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLnF1ZXN0aW9uSWRdID0gYW5zd2VyT2JqLmFuc3dlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoYW5zd2VyT2JqLnBlcnNvblVXQWN0aXZpdHlSZXNwb25zZUVudGl0eSkpIHtcbiAgICAgIGFuc3dlck9iai5wZXJzb25VV0FjdGl2aXR5UmVzcG9uc2VFbnRpdHkuZm9yRWFjaCgoc3VicXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZVBlcnNvblV3QW5zd2VycyhzdWJxdWVzdGlvbik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2F2ZVF1ZXN0aW9uRGV0YWlscygpXG4gICAgfVxuICB9XG5cbiAgY2hlY2tJZlZhbHVlSXNFbXB0eSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUudHJpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgdmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdmFsdWUgPT09IG51bGwgfHxcbiAgICAgIHZhbHVlID09PSAnJyB8fFxuICAgICAgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSB8fFxuICAgICAgSlNPTi5zdHJpbmdpZnkodmFsdWUpID09PSAne30nXG4gICAgKTtcbiAgfVxuXG4gIGdldFRpdGxlQ2FzZShoZWFkZXI6IGFueSk6IGFueSB7XG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgaWYgKHRoaXMucXVlc3Rpb25IZWFkZXIuaW5jbHVkZXMoaGVhZGVyLnRvTG9jYWxlTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgIGxldCB2YWwgPSBoZWFkZXIuc3BsaXQoJyAnKTtcbiAgICAgICAgcmV0dXJuIHZhbFswXS50b1VwcGVyQ2FzZSgpICsgJyAnICsgdGhpcy50b1RpdGxlQ2FzZSh2YWxbMV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGhlYWRlci50b1VwcGVyQ2FzZSgpID09PSAnRkFUQ0EgREVUQUlMUycpIHtcbiAgICAgICAgICByZXR1cm4gaGVhZGVyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnRvVGl0bGVDYXNlKGhlYWRlcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdG9UaXRsZUNhc2UodmFsdWU6IGFueSkge1xuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgIC50b1N0cmluZygpXG4gICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgIC9cXHdcXFMqL2csXG4gICAgICAgICAgKHR4dDogYW55KSA9PiB0eHRbMF0udG9VcHBlckNhc2UoKSArIHR4dC5zdWJzdHIoMSkudG9Mb3dlckNhc2UoKVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGdldEZpZWxkKHF1ZXN0aW9uT2JqOiBhbnkpIHtcbiAgICBsZXQgb3B0aW9uc09iajogYW55ID0gW107XG4gICAgbGV0IGNvbnRyb2xTdHlsZSA6IGFueSA9IHt9O1xuICAgIGlmIChxdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pIHtcbiAgICAgIHF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKChzaW5nbGVPcHRpb25WYWx1ZTogYW55KSA9PiB7XG4gICAgICAgIG9wdGlvbnNPYmoucHVzaCh7XG4gICAgICAgICAgbGFiZWw6IHNpbmdsZU9wdGlvblZhbHVlWydkb21haW5VaVZhbHVlJ10sXG4gICAgICAgICAgdmFsdWU6IHNpbmdsZU9wdGlvblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ10sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGxldCBpc0Rpc2FibGUgOiBhbnkgPSBmYWxzZTtcbiAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2lzRGlzYWJsZU1lZGljYWxRdWVzdGlvbnMnKSkgKSB7XG4gICAgICBsZXQgaXNEaXNhYmxlTWVkaWNhbFF1ZXN0aW9uc2luVWkgIDogYW55ID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaXNEaXNhYmxlTWVkaWNhbFF1ZXN0aW9ucycpO1xuICAgICAgaXNEaXNhYmxlID0gSlNPTi5wYXJzZShpc0Rpc2FibGVNZWRpY2FsUXVlc3Rpb25zaW5VaSkgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuICAgIGxldCBtaW5MZW5ndGg6IGFueSA9IG51bGw7XG4gICAgbGV0IG1heExlbmd0aDogYW55ID0gMjAwO1xuICAgIGxldCBwYXR0ZXJuOiBhbnkgPSBudWxsO1xuICAgIGxldCBwYXR0ZXJuTWVzc2FnZTogYW55ID0gbnVsbDtcbiAgIGxldCBjb25maWdEYXRhOiBhbnkgPSAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuZmllbGQoKT8uY29uZmlnRGF0YSlcbiAgPyB0aGlzLmZpZWxkKCk/LmNvbmZpZ0RhdGFcbiAgOiB7fTtcblxuICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkocXVlc3Rpb25PYmpbJ2NvbmZpZ0RhdGEnXSkpIHtcbiAgICAgIGNvbmZpZ0RhdGEgPSB7Li4uY29uZmlnRGF0YSwgLi4ucXVlc3Rpb25PYmpbJ2NvbmZpZ0RhdGEnXX07XG4gICAgfVxuXG4gICAgaWYocXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAgJ1JBRElPIEJVVFRPTicgfHwgcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQURETU9SRScpIHtcbiAgICAgIGNvbnRyb2xTdHlsZSA9IHtcbiAgICAgICAgICAgICAgICAgIFwiY29udHJvbFR5cGVcIjogXCJyYWRpb1wiLFxuICAgICAgICAgICAgICAgICAgXCJib3JkZXJDb2xvclwiOiBcIiNEQURBREFcIixcbiAgICAgICAgICAgICAgICAgIFwiYm9yZGVyV2lkdGhcIjogXCIxcHhcIixcbiAgICAgICAgICAgICAgICAgIFwiYm9yZGVyUmFkaXVzXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImZvbnRTaXplXCI6IFwiMTJweFwiLFxuICAgICAgICAgICAgICAgICAgXCJmb250V2VpZ2h0XCI6IFwiNDAwXCIsXG4gICAgICAgICAgICAgICAgICBcImZvbnRGYW1pbHlcIjogXCJNdWxpc2hcIixcbiAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogXCIjNDQ0NDQ0XCIsXG4gICAgICAgICAgICAgICAgICBcImJhY2tncm91bmRcIjogXCIjRkZGRkZGXCIsXG4gICAgICAgICAgICAgICAgICBcImNhcmV0Q29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwibnVkZ2VEaXNwbGF5SW1hZ2VcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiZHJvcGRvd25PcHRpb25CZ0NvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImRyb3Bkb3duT3B0aW9uQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcIndpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImZvY3VzQm9yZGVyV2lkdGhcIjogXCIxcHhcIixcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNCb3JkZXJDb2xvclwiOiBcIiNmZmJiMDBcIixcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNCYWNrZ3JvdW5kXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImZvY3VzQ29sb3JcIjogXCIjNDQ0NDQ0XCIsXG4gICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25CZ0NvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Db2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uRm9udFdlaWdodFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyTGVmdFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyUmFkaXVzXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImhvdmVyQm9yZGVyQ29sb3JcIjogXCIjREFEQURBXCIsXG4gICAgICAgICAgICAgICAgICBcImhvdmVyQm9yZGVyV2lkdGhcIjogXCIxcHhcIixcbiAgICAgICAgICAgICAgICAgIFwiaG92ZXJDb2xvclwiOiBcIiM0NDQ0NDRcIixcbiAgICAgICAgICAgICAgICAgIFwiZGlzYWJsZUNvbG9yXCI6IFwiI0VDRUNFQ1wiLFxuICAgICAgICAgICAgICAgICAgXCJkaXNhYmxlQmFja2dyb3VuZFwiOiBcIiNFQ0VDRUNcIixcbiAgICAgICAgICAgICAgICAgIFwiZXJyb3JCb3JkZXJDb2xvclwiOiBcIiNEQURBREFcIixcbiAgICAgICAgICAgICAgICAgIFwiZXJyb3JCb3JkZXJXaWR0aFwiOiBcIjFweFwiLFxuICAgICAgICAgICAgICAgICAgXCJlcnJvckNvbG9yXCI6IFwiIzQ0NDQ0NFwiLFxuICAgICAgICAgICAgICAgICAgXCJjcmVhdGVkRGF0ZVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJwYWRkaW5nXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcIm1hcmdpblwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJpc01hc3RlckNzc1wiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJjb250cm9sTWV0YUlkXCI6IFwiQUxMX0NPTV9HRU5fQ1RSTF9yYWRpb19ub21pbmVlR2VuZGVyX1YxXCIsXG4gICAgICAgICAgICAgICAgICBcImJvcmRlclN0eWxlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImhlaWdodFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJtaW5IZWlnaHRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwibWF4SGVpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcIm1pbldpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcIm1heFdpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImNzc0NsYXNzXCI6IG51bGxcbiAgICAgICAgICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShxdWVzdGlvbk9ialsndmFsaWRhdGlvbnMnXSkpIHtcbiAgICAgIGxldCB2YWxpZGF0aW9uT2JqOiBhbnkgPSBKU09OLnBhcnNlKHF1ZXN0aW9uT2JqWyd2YWxpZGF0aW9ucyddKTtcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHZhbGlkYXRpb25PYmpbJ01pblZhbHVlJ10pKSB7XG4gICAgICAgIG1pbkxlbmd0aCA9IHZhbGlkYXRpb25PYmpbJ01pblZhbHVlJ107XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh2YWxpZGF0aW9uT2JqWydNYXhWYWx1ZSddKSkge1xuICAgICAgICBtYXhMZW5ndGggPSB2YWxpZGF0aW9uT2JqWydNYXhWYWx1ZSddO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodmFsaWRhdGlvbk9ialsnVHlwZSddKSkge1xuICAgICAgICBpZiAodmFsaWRhdGlvbk9ialsnVHlwZSddID09PSAnTnVtZXJpYycpIHtcbiAgICAgICAgICBwYXR0ZXJuID0gJ15bMC05XSskJztcbiAgICAgICAgICBwYXR0ZXJuTWVzc2FnZSA9ICdPbmx5IG51bWJlcnMgYXJlIGFsbG93ZWQuJztcbiAgICAgICAgICBjb25maWdEYXRhWydpc0FsbG93TnVtYmVyc0luVGV4dEZpZWxkcyddID0gdHJ1ZTtcbiAgICAgICAgICBtYXhMZW5ndGggPSAnOScucmVwZWF0KE51bWJlcihtYXhMZW5ndGgpKTtcbiAgICAgICAgICBjb25maWdEYXRhWydtYXhWYWx1ZSddID0gbWF4TGVuZ3RoO1xuICAgICAgICAgIGNvbmZpZ0RhdGFbJ21pblZhbHVlJ10gPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25PYmpbJ1R5cGUnXSA9PT0gJ0FscGhhTnVtZXJpYycpIHtcbiAgICAgICAgICBwYXR0ZXJuID0gJ15bYS16QS1aMC05XFxcXHNdKyQnO1xuICAgICAgICAgIHBhdHRlcm5NZXNzYWdlID0gJ09ubHkgbGV0dGVycyBhbmQgbnVtYmVycyBhcmUgYWxsb3dlZC4nO1xuICAgICAgICAgIGNvbmZpZ0RhdGFbJ2lzQWxsb3dOdW1iZXJzSW5UZXh0RmllbGRzJ10gPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXR0ZXJuID0gbnVsbDtcbiAgICAgICAgICBwYXR0ZXJuTWVzc2FnZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnRGF0YTogY29uZmlnRGF0YSxcbiAgICAgIGNvbnRyb2xTdHlsZTogY29udHJvbFN0eWxlLFxuICAgICAgY29udHJvbFR5cGU6XG4gICAgICAgIHF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0ZSRUUgVEVYVCdcbiAgICAgICAgICA/ICd0ZXh0J1xuICAgICAgICAgIDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnUkFESU8gQlVUVE9OJyB8fFxuICAgICAgICAgICAgcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQURETU9SRSdcbiAgICAgICAgICA/ICdyYWRpbydcbiAgICAgICAgICA6IHF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyB8fFxuICAgICAgICAgICAgcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnREVDTEFSQVRJT04nXG4gICAgICAgICAgPyAnY2hlY2tib3gnXG4gICAgICAgICAgOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdDQUxFTkRBUidcbiAgICAgICAgICA/ICdkYXRlJ1xuICAgICAgICAgIDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnRFJPUERPV04nXG4gICAgICAgICAgPyAnc2VsZWN0J1xuICAgICAgICAgIDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnRE9DVVBMT0FEJ1xuICAgICAgICAgID8gJ2ZpbGUnXG4gICAgICAgICAgOiAnJyxcbiAgICAgIGZpZWxkTmFtZTogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXSxcbiAgICAgIGlzRGlzYWJsZSxcbiAgICAgIGxhYmVsOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UZXh0J10sXG4gICAgICBwbGFjZUhvbGRlcjogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVGV4dCddLFxuICAgICAgdmFsaWRhdG9yczoge1xuICAgICAgICBpc1JlcXVpcmVkOiBxdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTicgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgIG1pbkxlbmd0aCxcbiAgICAgICAgbWF4TGVuZ3RoLFxuICAgICAgICBwYXR0ZXJuLFxuICAgICAgICBwYXR0ZXJuTWVzc2FnZSxcbiAgICAgIH0sXG4gICAgICBjc3NDbGFzczogXCJtYi0yXCIsXG4gICAgICBpc1Zpc2libGU6IHRydWUsXG4gICAgICBvcHRpb25zOiBvcHRpb25zT2JqLFxuICAgICAgaXNTaG93TGFiZWw6IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIHJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKHF1ZXN0aW9uPzogYW55KSB7XG4gICAgY29uc29sZS5sb2coJ3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzcycsIHRoaXMucXVlc3Rpb25MaXN0KVxuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucXVlc3Rpb25MaXN0KSkge1xuICAgICAgdGhpcy5xdWVzdGlvbkxpc3QuZm9yRWFjaCgoc2luZ2xlU2VjdGlvbjogYW55KSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddKSkge1xuICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5zaG93UXVlc3Rpb24oc2luZ2xlUXVlc3Rpb24pKSB7XG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IGZhbHNlO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRGlzYWJsZSB0aGUgcXVlc3Rpb24gaWYgaXQgaGFzIGEgZGVmYXVsdCB2YWx1ZVxuICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25JZCA9IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10/LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBjb25zdCBoYXNEZWZhdWx0VmFsdWUgPSAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuZGVmYXVsdFZhbHVlcygpKSAmJiBPYmplY3Qua2V5cyh0aGlzLmRlZmF1bHRWYWx1ZXMoKSkuaW5jbHVkZXMocXVlc3Rpb25JZCk7XG4gICAgICAgICAgICBpZiAoaGFzRGVmYXVsdFZhbHVlICYmIHNpbmdsZVF1ZXN0aW9uWydmaWVsZCddKSB7XG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydmaWVsZCddID0ge1xuICAgICAgICAgICAgICAgIC4uLnNpbmdsZVF1ZXN0aW9uWydmaWVsZCddLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZTogdHJ1ZVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnKSB7XG4gICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgaXNOb25lSW5Eb21haW5WYWx1ZXM6IGFueSA9IHNpbmdsZVF1ZXN0aW9uW1xuICAgICAgICAgICAgICAgICAgJ2RvbWFpblZhbHVlcydcbiAgICAgICAgICAgICAgICBdLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVPYmo6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlT2JqWydkb21haW5VaVZhbHVlJ10udG9VcHBlckNhc2UoKSA9PT0gJ05PTkUnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaChcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVEb21haW5WYWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGlzTm9uZUluRG9tYWluVmFsdWVzKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNOb25lSW5Eb21haW5WYWx1ZXNbMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTm9uZUluRG9tYWluVmFsdWVzWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11cbiAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIG5vbmUgaXMgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaChcbiAgICAgICAgICAgICAgICAgICAgICAgIChzaW5nbGVEb21haW5WYWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBhbGwgc2VsZWN0ZWQgY2hlY2tib3ggcXVlc3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZS5kb21haW5VaVZhbHVlLnRvVXBwZXJDYXNlKCkgIT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05PTkUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlLmlzRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZS5pc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbGV0IGlzU2VjdGlvbkV4aXN0c0luQmxvY2tlZExpc3Q6IGFueSA9IHRoaXMuaXNCbG9ja2VkUXVlc3Rpb25zTGlzdC5maWx0ZXIoKHNpbmdsZUJsb2NrZWRPYmo6IGFueSkgPT4gc2luZ2xlQmxvY2tlZE9ialsnc2VjdGlvblRpdGxlJ10udHJpbSgpID09PSBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRyaW0oKSk7XG4gICAgICAgIHNpbmdsZVNlY3Rpb25bJ3Nob3dTZWN0aW9uJ10gPSAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcbiAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGlzU2VjdGlvbkV4aXN0c0luQmxvY2tlZExpc3QpKSB7XG4gICAgICAgIC8vICAgaWYgKGlzU2VjdGlvbkV4aXN0c0luQmxvY2tlZExpc3RbMF0uaXNCbG9ja2VkRm9yQ3VzdG9tZXJGbG93ICYmICF0aGlzLmxvYWRpbmdBZ2VudHBvcnRhbCkge1xuICAgICAgICAvLyAgICAgc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXSA9IGZhbHNlO1xuICAgICAgICAvLyAgICAgbGV0IGZpbHRlcmVkSW5kZXg6IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pO1xuICAgICAgICAvLyAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgICAvLyAgICAgICBsZXQgZmlsdGVyZWRRdWVzdGlvbjogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2ZpbHRlcmVkSW5kZXhdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uT2JqSW5TZWN0aW9uWydxdWVzdGlvbklkJ10pO1xuICAgICAgICAvLyAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uKSkge1xuICAgICAgICAvLyAgICAgICAgIGZpbHRlcmVkUXVlc3Rpb25bMF1bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXTtcbiAgICAgICAgLy8gICAgICAgfVxuICAgICAgICAvLyAgICAgfSk7XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyAgIGlmICgoaXNTZWN0aW9uRXhpc3RzSW5CbG9ja2VkTGlzdFswXS5pc0Jsb2NrZWRGb3JBZ2VudEZsb3cgfHwgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnYWdlbnRDaGFubmVsJykgPT09ICdEMjAnIHx8IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FnZW50Q2hhbm5lbCcpID09PSAnRDA1JyB8fCBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdhZ2VudENoYW5uZWwnKSA9PT0gJ0QwNicpICYmIHRoaXMubG9hZGluZ0FnZW50cG9ydGFsKSB7XG4gICAgICAgIC8vICAgICBzaW5nbGVTZWN0aW9uWydzaG93U2VjdGlvbiddID0gZmFsc2U7XG4gICAgICAgIC8vICAgICBsZXQgZmlsdGVyZWRJbmRleDogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSk7XG4gICAgICAgIC8vICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvbjogYW55KSA9PiB7XG4gICAgICAgIC8vICAgICAgIGxldCBmaWx0ZXJlZFF1ZXN0aW9uOiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bZmlsdGVyZWRJbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT0gc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb25bJ3F1ZXN0aW9uSWQnXSk7XG4gICAgICAgIC8vICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb24pKSB7XG4gICAgICAgIC8vICAgICAgICAgZmlsdGVyZWRRdWVzdGlvblswXVsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBzaW5nbGVTZWN0aW9uWydzaG93U2VjdGlvbiddO1xuICAgICAgICAvLyAgICAgICB9XG4gICAgICAgIC8vICAgICB9KTtcbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vIH1cbiAgICAgICAgbGV0IGhpZGRlblF1ZXN0aW9uczogYW55ID0gdGhpcy5xdWVzdGlvbkxpc3QuZmlsdGVyKFxuICAgICAgICAgIChzaW5nbGVTZWN0aW9uT2JqOiBhbnkpID0+ICFzaW5nbGVTZWN0aW9uT2JqWydzaG93U2VjdGlvbiddXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGlkZGVuUXVlc3Rpb25zKSkge1xuICAgICAgICAgIGhpZGRlblF1ZXN0aW9ucy5mb3JFYWNoKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goXG4gICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gbGV0IGZpbHRlcmVkUXVlc3Rpb246IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PSBzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvblsncXVlc3Rpb25JZCddKTtcbiAgICAgICAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uKSkge1xuICAgICAgICAgICAgICAgIC8vICAgZmlsdGVyZWRRdWVzdGlvblswXVsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMucXVlc3Rpb25MaXN0LnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiBhWydzdGVwJ10gLSBiWydzdGVwJ10pO1xuXG4gICAgY29uc29sZS5sb2coJ3F1ZXN0aW9ucyBsaXN0JywgdGhpcy5xdWVzdGlvbkxpc3QpO1xuICAgIGNvbnNvbGUubG9nKCdxdWVzdGlvbnMgYW5zd2VycycsIHRoaXMucGVyc29uVXdBbnN3ZXJzKTtcbiAgICB0aGlzLnNhdmVRdWVzdGlvbkRldGFpbHMoKTtcbiAgICB0aGlzLnF1ZXN0aW9uc1ZhbHVlQ2hhbmdlLmVtaXQodGhpcy5wZXJzb25Vd0Fuc3dlcnMpO1xuICB9XG5cbiAgc2hvd1F1ZXN0aW9uKGN1cnJlbnRRdWVzdGlvbjogYW55KSB7XG4gICAgbGV0IHNob3dRdWVzdGlvbjogYW55ID0gZmFsc2U7XG4gICAgbGV0IHN1YlF1ZXN0aW9uczogYW55ID0gW107XG4gICAgLy8gbGV0IGN1cnJlbnRTZWN0aW9uSW5kZXg6IGFueSA9IHF1ZXN0aW9uc1Jlc3BvbnNlWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSBwZXJzb25Sb2xlKVxuICAgIC8vIGxldCByb2xlID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2N1cnJlbnRTZWN0aW9uSW5kZXhdWydyb2xlJ11cblxuICAgIHRoaXMucGVyc29uVXdSZXNwb25zZU9ialswXS5xdWVzdGlvbkxpc3QuZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgbGV0IGlzU3ViUXVlc3Rpb25PYmplY3Q6IGFueSA9IFtdO1xuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSkpIHtcbiAgICAgICAgaXNTdWJRdWVzdGlvbk9iamVjdCA9IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10uZmlsdGVyKFxuICAgICAgICAgIChxdWVzdGlvblJlbGF0aW9uT2JqOiBhbnkpID0+XG4gICAgICAgICAgICBxdWVzdGlvblJlbGF0aW9uT2JqWyduZXh0UXVlc3Rpb25JZCddID09PVxuICAgICAgICAgICAgY3VycmVudFF1ZXN0aW9uWydxdWVzdGlvbklkJ11cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1N1YlF1ZXN0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgc3ViUXVlc3Rpb25zLnB1c2goc2luZ2xlUXVlc3Rpb24pO1xuICAgICAgICBpc1N1YlF1ZXN0aW9uT2JqZWN0LmZvckVhY2goKHNpbmdsZVN1YlF1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddICE9PSAnQ0hFQ0tCT1gnICYmXG4gICAgICAgICAgICAgIHNpbmdsZVN1YlF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblZhbHVlJ10udG9TdHJpbmcoKVswXSAhPT0gJyEnICYmXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dID09PVxuICAgICAgICAgICAgICAgIHNpbmdsZVN1YlF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblZhbHVlJ10pIHx8XG4gICAgICAgICAgICAoc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXS50b1N0cmluZygpWzBdID09PSAnIScgJiZcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXVxuICAgICAgICAgICAgICApICYmXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dICE9PVxuICAgICAgICAgICAgICAgIHNpbmdsZVN1YlF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblZhbHVlJ11cbiAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAuc3BsaXQoJyEnKVsxXSkgfHxcbiAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiZcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXVxuICAgICAgICAgICAgICApICYmXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dPy5pbmNsdWRlcyhzaW5nbGVTdWJRdWVzdGlvblsncGFyZW50UXVlc3Rpb25WYWx1ZSddKVxuICAgICAgICAgICAgICAvLyB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXT8uZmlsdGVyKFxuICAgICAgICAgICAgICAvLyAgIChzaW5nbGVPYmo6IGFueSkgPT5cbiAgICAgICAgICAgICAgLy8gICAgIHNpbmdsZU9iaiA9PT1cbiAgICAgICAgICAgICAgLy8gICAgIHNpbmdsZVN1YlF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblZhbHVlJ11cbiAgICAgICAgICAgICAgLy8gKS5sZW5ndGggPiAwXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBzaG93UXVlc3Rpb24gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc3ViUXVlc3Rpb25zKSAmJlxuICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddKVxuICAgICkge1xuICAgICAgc2hvd1F1ZXN0aW9uID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShjdXJyZW50UXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uUmVsYXRpb24nXSkgJiZcbiAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgIGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddWydwYXJlbnRRdWVzdGlvbklkJ11cbiAgICAgICkgJiZcbiAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgIGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddWydwYXJlbnRRdWVzdGlvbklkJ11cbiAgICAgICAgXVxuICAgICAgKSAmJlxuICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgIGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddWydwYXJlbnRRdWVzdGlvbklkJ11cbiAgICAgIF0gPT09IGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddWydwYXJlbnRRdWVzdGlvbkFuc3dlciddXG4gICAgKSB7XG4gICAgICBzaG93UXVlc3Rpb24gPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoY3VycmVudFF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ05PRElTUExBWScpIHtcbiAgICAgIHNob3dRdWVzdGlvbiA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gc2hvd1F1ZXN0aW9uO1xuICB9XG5cbiAgc2F2ZVF1ZXN0aW9uRGV0YWlscygpIHtcbiAgICAvLyByZW1vdmUgYWxsIGNoZWNrYm94IHF1ZXN0aW9ucyBwcmVzZW50IGluIHZhbHVlc1xuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3gpKSB7XG4gICAgICAvLyBsZXQgbGlmZUFzc3VyZWRrZXlzOiBhbnkgPSBPYmplY3Qua2V5cyh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXSk7XG4gICAgICAvLyBsZXQgcG9saWN5QXNzdXJlZEtleXM6IGFueSA9IE9iamVjdC5rZXlzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydwb2xpY3lIb2xkZXInXSk7XG4gICAgICAvLyBsZXQgbGlmZUFzc3VyZWRPbmVLZXlzOiBhbnkgPSBPYmplY3Qua2V5cyh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWRPbmUnXSk7XG4gICAgICAvLyBsZXQgbGlmZUFzc3VyZWRUd29LZXlzOiBhbnkgPSBPYmplY3Qua2V5cyh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWRUd28nXSk7XG4gICAgICAvLyB0aGlzLnBlcnNvblV3QW5zd2Vycy5mb3JFYWNoKChzaW5nbGVLZXk6IGFueSkgPT4ge1xuICAgICAgLy8gICBpZiAoaXNOYU4oTnVtYmVyKHNpbmdsZUtleSkpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkJ11bc2luZ2xlS2V5XSkgJiYgdGhpcy5saXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveC5pbmNsdWRlcyh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXVtzaW5nbGVLZXldKSkge1xuICAgICAgLy8gICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXVtzaW5nbGVLZXldO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9KTtcbiAgICAgIC8vIHBvbGljeUFzc3VyZWRLZXlzLmZvckVhY2goKHNpbmdsZUtleTogYW55KSA9PiB7XG4gICAgICAvLyAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddW3NpbmdsZUtleV0pICYmIHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3guaW5jbHVkZXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ3BvbGljeUhvbGRlciddW3NpbmdsZUtleV0pKSB7XG4gICAgICAvLyAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzWydwb2xpY3lIb2xkZXInXVtzaW5nbGVLZXldO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9KTtcbiAgICAgIC8vIGxpZmVBc3N1cmVkT25lS2V5cy5mb3JFYWNoKChzaW5nbGVLZXk6IGFueSkgPT4ge1xuICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWRPbmUnXVtzaW5nbGVLZXldKSAmJiB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94LmluY2x1ZGVzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZE9uZSddW3NpbmdsZUtleV0pKSB7XG4gICAgICAvLyAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzWydwb2xpY3lIb2xkZXInXVtzaW5nbGVLZXldO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9KTtcbiAgICAgIC8vIGxpZmVBc3N1cmVkVHdvS2V5cy5mb3JFYWNoKChzaW5nbGVLZXk6IGFueSkgPT4ge1xuICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWRUd28nXVtzaW5nbGVLZXldKSAmJiB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94LmluY2x1ZGVzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZFR3byddW3NpbmdsZUtleV0pKSB7XG4gICAgICAvLyAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzWydwb2xpY3lIb2xkZXInXVtzaW5nbGVLZXldO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9KTtcbiAgICB9XG4gICAgLy8gbGV0IGhlaWdodEluSW5jaGVzT2JqOiBhbnkgPSBbXTtcbiAgICAvLyBsZXQgaGVpZ2h0SW5GZWV0T2JqOiBhbnkgPSBbXTtcbiAgICAvLyBsZXQgaGVpZ2h0SW5DZW50aW1ldGVyT2JqOiBhbnkgPSBbXTtcbiAgICBsZXQgaXNWYWxpZDogYW55ID0gdHJ1ZTtcbiAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9iaikgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXSkpIHtcbiAgICAvLyAgIGxldCBsYUluZGV4OiBhbnkgPSB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gJ2xpZmVBc3N1cmVkJyk7XG4gICAgLy8gICBpZiAobGFJbmRleCAhPT0gLTEgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtsYUluZGV4XSkpIHtcbiAgICAvLyAgICAgaGVpZ2h0SW5JbmNoZXNPYmogPSB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtsYUluZGV4XVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUSScpO1xuICAgIC8vICAgICBoZWlnaHRJbkZlZXRPYmogPSB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtsYUluZGV4XVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicpO1xuICAgIC8vICAgICBoZWlnaHRJbkNlbnRpbWV0ZXJPYmogPSB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtsYUluZGV4XVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUJyk7XG4gICAgLy8gICB9XG4gICAgLy8gfVxuXG4gICAgLy8gdmFsaWRhdGlvbiBmb3IgbWVkaWNhbCBhbmQgbm9uIG1lZGljYWwgcXVlc3Rpb25zIDpcbiAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9iaikgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdNYXN0ZXJPYmopICYmIGlzVmFsaWQpIHtcbiAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd01hc3Rlck9iai5mb3JFYWNoKChzaW5nbGVQZXJzb25PYmo6IGFueSwgc2luZ2xlUGVyc29uSW5kZXg6IGFueSkgPT4ge1xuICAgIC8vICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVQZXJzb25PYmpbJ3F1ZXN0aW9uTGlzdCddKSAmJiBpc1ZhbGlkKSB7XG4gICAgLy8gICAgICAgbGV0IHJvbGU6IGFueSA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSAnbGlmZUFzc3VyZWQnID8gXCJsaWZlIGFzc3VyZWRcIiA6IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSAncG9saWN5SG9sZGVyJyA/IFwicG9saWN5IGhvbGRlclwiIDogc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09ICdsaWZlQXNzdXJlZE9uZScgPyBcIkpvaW50IExpZmUgMVwiIDogc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09ICdsaWZlQXNzdXJlZFR3bycgPyBcIkpvaW50IExpZmUgMlwiIDogXCJcIjtcbiAgICAvLyAgICAgICBzaW5nbGVQZXJzb25PYmpbJ3F1ZXN0aW9uTGlzdCddLmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xuICAgIC8vICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10pICYmIGlzVmFsaWQpIHtcbiAgICAvLyAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSkgJiYgKHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udG9VcHBlckNhc2UoKS5yZXBsYWNlQWxsKCcgJywgJ18nKSA9PT0gJ1RFTExfVVNfTU9SRScgfHwgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PSAnQkFTSUNfREVUQUlMUycpICYmIGlzVmFsaWQpIHtcblxuICAgIC8vICAgICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGhlaWdodCBlbnRlcmVkIGluIGZlZXRcbiAgICAvLyAgICAgICAgICAgICBpZiAodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J10gPT09ICdGRUVUJykge1xuICAgIC8vICAgICAgICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUSScpO1xuICAgIC8vICAgICAgICAgICAgICAgbGV0IGhlaWdodEluRmVldE9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcigob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnKTtcbiAgICAvLyAgICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzT2JqKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldE9iaikgJiYgKHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10pIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10pKSkge1xuICAgIC8vICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJiAhc2F2ZWRyYWZ0ICYmIHJlZGlyZWN0KSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JZDogYW55ID0gaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10gKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGVudGVyIEhlaWdodCBpbiBGZWV0IGFuZCBJbmNoZXMgZm9yICcgKyByb2xlXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5vcGVuU25hY2tCYXIoJ1BsZWFzZSBlbnRlciBIZWlnaHQgaW4gRmVldCBhbmQgSW5jaGVzIGZvciAnICsgcm9sZSwgJ0Nsb3NlJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiAhdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnbGlmZSBhc3N1cmVkJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdwb2xpY3kgaG9sZGVyJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX1BIJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdqb2ludGxpZmUnKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnSm9pbnQgTGlmZSAxJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdKT0lOVExJRkVPTkUnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ0pvaW50IExpZmUgMicpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigxKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnSk9JTlRMSUZFVFdPJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAvLyAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgaGVpZ2h0IGluIGNtXG4gICAgLy8gICAgICAgICAgICAgbGV0IGhlaWdodEluQ2VudGltZXRlck9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcigob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCcpO1xuICAgIC8vICAgICAgICAgICAgIGlmICh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0NNJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXSkgJiZcbiAgICAvLyAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DZW50aW1ldGVyT2JqKSAmJiBpc1ZhbGlkKSB7XG4gICAgLy8gICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmlzTWFuZGF0b3J5RmllbGQgJiYgIXNhdmVkcmFmdCAmJiByZWRpcmVjdCkge1xuICAgIC8vICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgIT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddICsgJ18nICsgc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGVudGVyIEhlaWdodCBpbiBDTSAnICsgcm9sZVxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0pO1xuICAgIC8vICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uub3BlblNuYWNrQmFyKCdQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIENNICcgKyByb2xlLCAnQ2xvc2UnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiAhdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSA9PT0gJ2xpZmUgYXNzdXJlZCcpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAncG9saWN5IGhvbGRlcicpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9QSCcpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ2pvaW50bGlmZScpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnSm9pbnQgTGlmZSAxJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdKT0lOVExJRkVPTkUnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ0pvaW50IExpZmUgMicpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMSk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnSk9JTlRMSUZFVFdPJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICB9XG5cbiAgICAvLyAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgIH1cblxuICAgIC8vICAgICAgICAgICB9XG5cbiAgICAvLyAgICAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmo6IGFueSkgPT4ge1xuICAgIC8vICAgICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGJhc2ljIHF1ZXN0aW9uc1xuICAgIC8vICAgICAgICAgICAgIGlmIChcbiAgICAvLyAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmopICYmXG4gICAgLy8gICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10pICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAvLyAgICAgICAgICAgICAgIGlzVmFsaWQgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0lNQUdFIFRFWFQnICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVCcgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0RFQ0xBUkFUSU9OJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdoYXJkQ29weUxhbmcnICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdQQVNTUE9SVF9VUExPQUQnICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVEYnICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVEknICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddLnRvU3RyaW5nKCkgPT09ICdOJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgKChzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ11dKSkgfHxcbiAgICAvLyAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJiAhdGhpcy52YWxpZGF0ZUNoZWNrQm94RmllbGQoc2luZ2xlUXVlc3Rpb25PYmosIHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSkpICYmIGlzVmFsaWRcbiAgICAvLyAgICAgICAgICAgICApIHtcbiAgICAvLyAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJiAhc2F2ZWRyYWZ0ICYmIHJlZGlyZWN0KSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIGxldCBxdWVzdGlvbklkOiBhbnkgPSBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddICsgJ18nICsgc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xuICAgIC8vICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBlbnRlciBhbGwgdGhlIGRldGFpbHMgaW4gJyArIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10gKyAnIGZvciAnICsgcm9sZVxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0pO1xuICAgIC8vICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uub3BlblNuYWNrQmFyKCdQbGVhc2UgZW50ZXIgYWxsIHRoZSBkZXRhaWxzIGluICcgKyBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddICsgJyBmb3IgJyArIHJvbGUsICdDbG9zZScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmICF0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnbGlmZSBhc3N1cmVkJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdwb2xpY3kgaG9sZGVyJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigxKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX1BIJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnam9pbnRsaWZlJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJqb2ludCBsaWZlIGNhc2VcIik7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICB9XG5cbiAgICAvLyAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgIH1cblxuICAgIC8vICAgICAgICAgICAgIGlmIChcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ1BBU1NQT1JUX1VQTE9BRCcgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXG4gICAgLy8gICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJlxuICAgIC8vICAgICAgICAgICAgICAgcmVkaXJlY3RcbiAgICAvLyAgICAgICAgICAgICApIHtcbiAgICAvLyAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqOiBhbnkgPSB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnF1ZXN0aW9uc1Bhc3Nwb3J0VXBsb2FkT2JqLmZpbHRlcigoc2luZ2xlT2JqOiBhbnkpID0+IChzaW5nbGVPYmpbJ3BlcnNvblR5cGUnXSA9PT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gJiYgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZU9ialsnZG1zSWQnXSkpKTtcbiAgICAvLyAgICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmopKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChgJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydxdWVzdGlvblR5cGUnXX1fJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWyd0eXBlJ119XyR7ZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsncGVyc29uVHlwZSddfWApO1xuICAgIC8vICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgdXBsb2FkIHBhc3Nwb3J0ICcgKyBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydsYWJlbCddICsgJyBkb2N1bWVudCBmb3IgJyArIHJvbGVcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAvLyAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIHVwbG9hZCBwYXNzcG9ydCAnICsgZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsnbGFiZWwnXSArICcgZG9jdW1lbnQgZm9yICcgKyByb2xlLCAnQ2xvc2UnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdsaWZlIGFzc3VyZWQnKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ3BvbGljeSBob2xkZXInKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9QSCcpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdqb2ludGxpZmUnKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImpvaW50IGxpZmUgY2FzZVwiKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgICB9XG5cbiAgICAvLyAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgZGVjbGFyYXRpb24gcXVlc3Rpb25zXG4gICAgLy8gICAgICAgICAgICAgaWYgKGlzVmFsaWQgJiYgc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25UeXBlID09PSAnREVDTEFSQVRJT04nICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAvLyAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSkgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJ1xuICAgIC8vICAgICAgICAgICAgICkge1xuICAgIC8vICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQgJiZcbiAgICAvLyAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2VycykgJiZcbiAgICAvLyAgICAgICAgICAgICAgICAgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKSAmJlxuICAgIC8vICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdKSAmJlxuICAgIC8vICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ10pICYmXG4gICAgLy8gICAgICAgICAgICAgICAgICAgKCghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkgJiZcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSA9PT0gJ04nKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSkpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pKSB7XG5cbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xuICAgIC8vICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5pc01hbmRhdG9yeUZpZWxkICYmICFzYXZlZHJhZnQgJiYgcmVkaXJlY3QpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JZDogYW55ID0gc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25JZCArICdfJyArIHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2Ugc2VsZWN0IGFsbCB0aGUgZGV0YWlscyBpbiAnICsgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSArICcgZm9yICcgKyByb2xlXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgfVxuXG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgbWVkaWNhbCBzdWIgcXVlc3Rpb25zXG4gICAgLy8gICAgICAgICAgICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSkpIHtcbiAgICAvLyAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UuZm9yRWFjaCgocXVlc3Rpb246IGFueSkgPT4ge1xuICAgIC8vICAgICAgICAgICAgIC8vICAgICBpZiAoXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgdGhpcy5zaG93U3ViUXVlc3Rpb24ocXVlc3Rpb24pICYmXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgcXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddICE9PSAnSU1BR0UgVEVYVCcgJiZcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICBxdWVzdGlvblsnb3B0aW9uYWxRdWVzdGlvbiddLnRvU3RyaW5nKCkgPT09ICdOJyAmJlxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICgocXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddICE9PSAnQ0hFQ0tCT1gnICYmXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkJ11bcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0pKSB8fFxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICAgKHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJiAhdGhpcy52YWxpZGF0ZUNoZWNrQm94RmllbGQocXVlc3Rpb24sICdsaWZlQXNzdXJlZCcpKSlcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgKSB7XG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCAmJiAhc2F2ZWRyYWZ0KSB7XG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBhbnN3ZXIgYWxsIG1lZGljYWwgc3ViIHF1ZXN0aW9ucyAnICsgcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSArICcgJyArIHF1ZXN0aW9uWydxdWVzdGlvblRleHQnXVxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICAgfSk7XG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgfVxuICAgIC8vICAgICAgICAgICAgIC8vICAgICB9XG4gICAgLy8gICAgICAgICAgICAgLy8gICB9KTtcbiAgICAvLyAgICAgICAgICAgICAvLyB9XG4gICAgLy8gICAgICAgICAgIH0pO1xuXG4gICAgLy8gICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGZhdGNoIGRlY2xhcmF0aW9uXG4gICAgLy8gICAgICAgICAgIC8vIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvbi5xdWVzdGlvbnMpICYmIGlzVmFsaWQpe1xuICAgIC8vICAgICAgICAgICAvLyBzaW5nbGVTZWN0aW9uLnF1ZXN0aW9ucy5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iajphbnkpID0+IHtcbiAgICAvLyAgICAgICAgICAgLy8gICBpZihpc1ZhbGlkICYmIHNpbmdsZVF1ZXN0aW9uT2JqLnF1ZXN0aW9uVHlwZSA9PT0gJ0RFQ0xBUkFUSU9OJyAmJiBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxuICAgIC8vICAgICAgICAgICAvLyAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTidcbiAgICAvLyAgICAgICAgICAgLy8gICAgICl7XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgIGlmKCBpc1ZhbGlkICYmXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2VycykgJiZcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pICYmXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXSkgJiZcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ10pICAmJlxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgKCghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkgJiZcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSA9PT0gJ04nKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSkpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pKSB7XG5cbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgIT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSB7XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCAmJiAhc2F2ZWRyYWZ0KSB7XG4gICAgLy8gICAgICAgICAgIC8vIGxldCBxdWVzdGlvbklkOiBhbnkgPSBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvbklkICsgJ18nICsgc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBzZWxlY3QgYWxsIHRoZSBkZXRhaWxzIGluICcgKyBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddICsgJyBmb3IgJyArIHJvbGVcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgIH0pO1xuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgfVxuICAgIC8vICAgICAgICAgICAvLyAgIH1cbiAgICAvLyAgICAgICAgICAgLy8gfSk7XG4gICAgLy8gICAgICAgICAgIC8vIH1cblxuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICAgIH0pO1xuICAgIC8vICAgICB9XG4gICAgLy8gICB9KTtcbiAgICAvLyB9XG5cbiAgICAvLyBpZiAoKGlzVmFsaWQgfHwgc2F2ZWRyYWZ0KSB8fCB0aGlzLnNoYXJlZFNlcnZpY2UubG9hZGluZ0FnZW50cG9ydGFsKSB7XG4gICAgLy8gaWYgKGlzVmFsaWQpIHtcbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgLy8gdGhpcy5sb2FkZXJTZXJ2aWNlLmRpc3BsYXkodHJ1ZSk7XG4gICAgICAvLyBsZXQgcmVxdWVzdDogYW55ID0gW107XG4gICAgICBsZXQgbWFpblJlcU9iajogYW55ID0gW107XG4gICAgICBsZXQgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uczogYW55ID0gW107XG4gICAgICBsZXQgbWFpblJlcXVlc3RGb3JMYTogYW55ID0gW107XG4gICAgICBsZXQgbWFpblJlcXVlc3RGb3JQaDogYW55ID0gW107XG4gICAgICB0aGlzLnF1ZXN0aW9uTGlzdC5mb3JFYWNoKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUGVyc29uT2JqWydxdWVzdGlvbkxpc3QnXSkpIHtcbiAgICAgICAgLy8gc2luZ2xlUGVyc29uT2JqWydxdWVzdGlvbkxpc3QnXS5mb3JFYWNoKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgLy8gaWYgKFxuICAgICAgICAvLyAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSkgJiZcbiAgICAgICAgLy8gICAoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PVxuICAgICAgICAvLyAgICAgJ1RFTExfVVNfTU9SRScgfHxcbiAgICAgICAgLy8gICAgIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udG9VcHBlckNhc2UoKS5yZXBsYWNlQWxsKCcgJywgJ18nKSA9PT1cbiAgICAgICAgLy8gICAgICAgJ0JBU0lDX0RFVEFJTFMnKVxuICAgICAgICAvLyApIHtcbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBoZWlnaHQgaW4gY21cbiAgICAgICAgICBsZXQgaGVpZ2h0SW5DZW50aW1ldGVyT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxuICAgICAgICAgICAgKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFQnIHx8IG9ialsncXVlc3Rpb25JZCddID09PSB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J11cbiAgICAgICAgICApO1xuICAgICAgICAgIGxldCBoZWlnaHRJbkluY2hlc09iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcbiAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUSScgfHwgb2JqWydxdWVzdGlvbklkJ10gPT09IHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXVxuICAgICAgICAgICk7XG4gICAgICAgICAgbGV0IGhlaWdodEluRmVldE9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcbiAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicgfHwgb2JqWydxdWVzdGlvbklkJ10gPT09IHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J10gPT09ICdDTScgJiZcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DZW50aW1ldGVyT2JqKSAmJlxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmopICYmXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J11cbiAgICAgICAgICAgICkgJiYgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXVxuICAgICAgICAgICAgKSAmJiAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBwYXNzIGhlaWdodCBpbiBjbSBvYmpcbiAgICAgICAgICAgIGxldCBjbU9iakluQW5zd2Vyc2luZGV4OiBhbnkgPSBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxuICAgICAgICAgICAgICAgIG9iai5xdWVzdGlvbklkID09PSBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXSAmJlxuICAgICAgICAgICAgICAgIG9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ11cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoY21PYmpJbkFuc3dlcnNpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tjbU9iakluQW5zd2Vyc2luZGV4XVsnYW5zd2VyJ10gPVxuICAgICAgICAgICAgICAgIHBhcnNlSW50KFxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddXG4gICAgICAgICAgICAgICAgKS50b1N0cmluZygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgYW5zd2VyOiBwYXJzZUludChcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXVxuICAgICAgICAgICAgICAgICkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxuICAgICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcbiAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IGhlaWdodEluQ2VudGltZXRlck9ialswXVsnY2x1c3RlcklkJ10sXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBoZWlnaHQgaW4gaW5jaGVzXG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXM6IGFueSA9IChcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddICogMC4zOTM3MDFcbiAgICAgICAgICAgICkudG9GaXhlZCgyKTtcbiAgICAgICAgICAgIGxldCBoZWlnaHRJbkZlZXQ6IGFueSA9XG4gICAgICAgICAgICAgIHBhcnNlRmxvYXQoKGhlaWdodEluSW5jaGVzIC8gMTIpLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXSkgPiAxMlxuICAgICAgICAgICAgICAgID8gKGhlaWdodEluSW5jaGVzIC8gMTIpLnRvRml4ZWQoMSlcbiAgICAgICAgICAgICAgICA6IChoZWlnaHRJbkluY2hlcyAvIDEyKS50b0ZpeGVkKDIpO1xuICAgICAgICAgICAgbGV0IGluY2hlc29iakluQW5zd2Vyc2luZGV4OiBhbnkgPVxuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICBvYmoucXVlc3Rpb25JZCA9PT0gaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXSAmJlxuICAgICAgICAgICAgICAgICAgb2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGluY2hlc29iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2luY2hlc29iakluQW5zd2Vyc2luZGV4XVsnYW5zd2VyJ10gPVxuICAgICAgICAgICAgICAgIHBhcnNlSW50KGhlaWdodEluSW5jaGVzKS50b1N0cmluZygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICBhbnN3ZXI6IHBhcnNlSW50KGhlaWdodEluSW5jaGVzKS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXG4gICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxuICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ2NsdXN0ZXJJZCddLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGhlaWdodCBpbiBmZWV0XG5cbiAgICAgICAgICAgIGxldCBmZWV0T2JqSW5BbnN3ZXJzaW5kZXg6IGFueSA9XG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgIChvYmo6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgIG9iai5xdWVzdGlvbklkID09PSBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSAmJlxuICAgICAgICAgICAgICAgICAgb2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGZlZXRPYmpJbkFuc3dlcnNpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tmZWV0T2JqSW5BbnN3ZXJzaW5kZXhdWydhbnN3ZXInXSA9XG4gICAgICAgICAgICAgICAgcGFyc2VGbG9hdChoZWlnaHRJbkZlZXQpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICBhbnN3ZXI6IHBhcnNlRmxvYXQoaGVpZ2h0SW5GZWV0KS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXG4gICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxuICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogaGVpZ2h0SW5GZWV0T2JqWzBdWydjbHVzdGVySWQnXSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnRkVFVCcgJiZcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXVxuICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXRPYmopKSB7XG4gICAgICAgICAgICAgIGxldCBoZWlnaHRJbkluY2hlczogYW55ID1cbiAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSkgKlxuICAgICAgICAgICAgICAgICAgMTIgK1xuICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddKTtcbiAgICAgICAgICAgICAgbGV0IGhlaWdodEluQ206IGFueSA9IChcbiAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KGhlaWdodEluSW5jaGVzKSAvIDAuMzkzNzAxXG4gICAgICAgICAgICAgICkudG9GaXhlZCgyKTtcbiAgICAgICAgICAgICAgbGV0IGZlZXRPYmpJbkFuc3dlcnNpbmRleDogYW55ID1cbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgIChvYmo6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgb2JqLnF1ZXN0aW9uSWQgPT09IGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddICYmXG4gICAgICAgICAgICAgICAgICAgIG9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ11cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoZmVldE9iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbZmVldE9iakluQW5zd2Vyc2luZGV4XVsnYW5zd2VyJ10gPVxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddLnRvU3RyaW5nKCkgK1xuICAgICAgICAgICAgICAgICAgJy4nICtcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J11cbiAgICAgICAgICAgICAgICAgIF0udG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgICBhbnN3ZXI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXS50b1N0cmluZygpICtcbiAgICAgICAgICAgICAgICAgICAgJy4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxuICAgICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxuICAgICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkZlZXRPYmpbMF1bJ2NsdXN0ZXJJZCddLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGxldCBpbmNoZXNvYmpJbkFuc3dlcnNpbmRleDogYW55ID1cbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgIChvYmo6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgb2JqLnF1ZXN0aW9uSWQgPT09IGhlaWdodEluSW5jaGVzT2JqWzBdWydxdWVzdGlvbklkJ10gJiZcbiAgICAgICAgICAgICAgICAgICAgb2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChpbmNoZXNvYmpJbkFuc3dlcnNpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2luY2hlc29iakluQW5zd2Vyc2luZGV4XVsnYW5zd2VyJ10gPVxuICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoaGVpZ2h0SW5JbmNoZXMpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGhlaWdodEluSW5jaGVzT2JqWzBdWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgICBhbnN3ZXI6IHBhcnNlSW50KGhlaWdodEluSW5jaGVzKS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcbiAgICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ2NsdXN0ZXJJZCddLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGxldCBjbU9iakluQW5zd2Vyc2luZGV4OiBhbnkgPVxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICBvYmoucXVlc3Rpb25JZCA9PT0gaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ10gJiZcbiAgICAgICAgICAgICAgICAgICAgb2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChjbU9iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbY21PYmpJbkFuc3dlcnNpbmRleF1bJ2Fuc3dlciddID1cbiAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGhlaWdodEluQ20pLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgICAgYW5zd2VyOiBwYXJzZUludChoZWlnaHRJbkNtKS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcbiAgICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydjbHVzdGVySWQnXSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DZW50aW1ldGVyT2JqKSAmJlxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGxldCBoZWlnaHRJbkNtQW5zd2VyT2JqZWN0OiBhbnkgPSBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT1cbiAgICAgICAgICAgICAgICBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNtQW5zd2VyT2JqZWN0KSAmJlxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ21BbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2hlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddXSA9XG4gICAgICAgICAgICAgICAgaGVpZ2h0SW5DbUFuc3dlck9iamVjdFswXVsnYW5zd2VyJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkluY2hlc09iaikgJiZcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGxldCBoZWlnaHRJbkluY2hlc0Fuc3dlck9iamVjdDogYW55ID1cbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PVxuICAgICAgICAgICAgICAgICAgaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzQW5zd2VyT2JqZWN0KSAmJlxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzQW5zd2VyT2JqZWN0WzBdWydhbnN3ZXInXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1toZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddXSA9XG4gICAgICAgICAgICAgICAgaGVpZ2h0SW5JbmNoZXNBbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0T2JqKSAmJlxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGxldCBoZWlnaHRJbkZlZXRBbnN3ZXJPYmplY3Q6IGFueSA9XG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT1cbiAgICAgICAgICAgICAgICAgIGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0QW5zd2VyT2JqZWN0KSAmJlxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldEFuc3dlck9iamVjdFswXVsnYW5zd2VyJ10pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ11dID1cbiAgICAgICAgICAgICAgICBoZWlnaHRJbkZlZXRBbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgLy8gfVxuICAgICAgICBsZXQgaXNOb0Rpc3BsYXlRdWVzdGlvbkluU2VjdGlvbjogYW55ID0gIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXVxuICAgICAgICApXG4gICAgICAgICAgPyBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXG4gICAgICAgICAgICAgIChzaW5nbGVEYXRhOiBhbnkpID0+IHNpbmdsZURhdGFbJ3F1ZXN0aW9uVHlwZSddID09PSAnTk9ESVNQTEFZJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgIDogW107XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXSB8fFxuICAgICAgICAgICAgaXNOb0Rpc3BsYXlRdWVzdGlvbkluU2VjdGlvbi5sZW5ndGggPiAwKSAmJlxuICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10pXG4gICAgICAgICkge1xuICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ2hhcmRDb3B5TGFuZycpIHtcbiAgICAgICAgICAgICAgaWYgKHNpbmdsZVF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dID0gJ0VuZ2xpc2gnO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGNoZWNrZWRPcHRpb25zQXJyOiBhbnkgPSBbXTtcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSkpIHtcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLmZvckVhY2goXG4gICAgICAgICAgICAgICAgKHNpbmdsZURvbWFpblZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cbiAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZE9wdGlvbnNBcnIucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnXG4gICAgICAgICAgICAgICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgLy8gZm9yIGNoZWNrYm94IHF1ZXN0aW9uXG5cbiAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0OiBhbnkgPVxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgKHNpbmdsZUFuc3dlck9iajogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVBbnN3ZXJPYmpbJ3F1ZXN0aW9uSWQnXSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddICYmXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZUFuc3dlck9ialsncGVyc29uVVdJZCddID09PVxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChxdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgICAgYW5zd2VyOiAnJyxcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXG4gICAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXG4gICAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IHNpbmdsZVF1ZXN0aW9uWydjbHVzdGVySWQnXSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIG9ialsnYW5zd2VyJ10gPSB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaChvYmopO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbcXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3RdW1xuICAgICAgICAgICAgICAgICAgJ2Fuc3dlcidcbiAgICAgICAgICAgICAgICBdID0gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0udG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSAhPT0gJ0NIRUNLQk9YJyAmJlxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAvLyBub24gY2hlY2tib3ggcXVlc3Rpb25cbiAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0OiBhbnkgPVxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgKHNpbmdsZUFuc3dlck9iajogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVBbnN3ZXJPYmpbJ3F1ZXN0aW9uSWQnXSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddICYmXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZUFuc3dlck9ialsncGVyc29uVVdJZCddID09PVxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChxdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgICAgYW5zd2VyOlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDQUxFTkRBUidcbiAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0sXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxuICAgICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxuICAgICAgICAgICAgICAgICAgY2x1c3RlcklkOiBzaW5nbGVRdWVzdGlvblsnY2x1c3RlcklkJ10sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW3F1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0XVtcbiAgICAgICAgICAgICAgICAgICdhbnN3ZXInXG4gICAgICAgICAgICAgICAgXSA9XG4gICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDQUxFTkRBUidcbiAgICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZihzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSkpIHtcbiAgICAgICAgICAgIC8vICAgbGV0IHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0IDogYW55ID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoKHNpbmdsZUFuc3dlck9iaiA6IGFueSkgPT4gKHNpbmdsZUFuc3dlck9ialsncXVlc3Rpb25JZCddID09PSBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddICAmJiBzaW5nbGVBbnN3ZXJPYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddKSlcbiAgICAgICAgICAgIC8vICAgaWYocXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3QgPT09IC0xKSB7XG4gICAgICAgICAgICAvLyAgICAgbGV0IG9iajogYW55ID0ge1xuICAgICAgICAgICAgLy8gICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxuICAgICAgICAgICAgLy8gICAgICAgcXVlc3Rpb25JZDogc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgIC8vICAgICAgIGFuc3dlcjogc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInID8gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0obmV3IERhdGUodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0pLCAneXl5eS1NTS1kZCcpIDogdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0sXG4gICAgICAgICAgICAvLyAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxuICAgICAgICAgICAgLy8gICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxuICAgICAgICAgICAgLy8gICAgICAgY2x1c3RlcklkOiBzaW5nbGVRdWVzdGlvblsnY2x1c3RlcklkJ10sXG4gICAgICAgICAgICAvLyAgICAgfTtcbiAgICAgICAgICAgIC8vICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2gob2JqKTtcbiAgICAgICAgICAgIC8vICAgICBpZihzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcbiAgICAgICAgICAgIC8vICAgICAgIGxldCBjaGVja2VkT3B0aW9uc0FyciA6IGFueSA9IFtdO1xuICAgICAgICAgICAgLy8gICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10pKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKChzaW5nbGVEb21haW5WYWx1ZSA6IGFueSkgPT4ge1xuICAgICAgICAgICAgLy8gICAgICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pICYmIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBjaGVja2VkT3B0aW9uc0Fyci5wdXNoKHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ10pO1xuICAgICAgICAgICAgLy8gICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyAgICAgICB9XG4gICAgICAgICAgICAvLyAgICAgICBvYmpbJ2Fuc3dlciddID0gY2hlY2tlZE9wdGlvbnNBcnIudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyAgICAgLy8gb2JqZWN0IGFscmVhZHkgdGhlcmUgc28gb3ZlciByaWRlIHRoZSBuZXcgYW5zd2VyXG4gICAgICAgICAgICAvLyAgICAgaWYoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnKSB7XG4gICAgICAgICAgICAvLyAgICAgICBsZXQgY2hlY2tlZE9wdGlvbnNBcnIgOiBhbnkgPSBbXTtcbiAgICAgICAgICAgIC8vICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddKSkge1xuICAgICAgICAgICAgLy8gICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaCgoc2luZ2xlRG9tYWluVmFsdWUgOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSAmJiB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkge1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgY2hlY2tlZE9wdGlvbnNBcnIucHVzaChzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKTtcbiAgICAgICAgICAgIC8vICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gICAgICAgfVxuICAgICAgICAgICAgLy8gICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1txdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdF1bJ2Fuc3dlciddID0gY2hlY2tlZE9wdGlvbnNBcnIudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIC8vICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1txdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdF1bJ2Fuc3dlciddID0gIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NBTEVOREFSJyA/IHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKG5ldyBEYXRlKHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dKSwgJ3l5eXktTU0tZGQnKSA6IHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dO1xuICAgICAgICAgICAgLy8gICAgIH1cblxuICAgICAgICAgICAgLy8gICB9XG5cbiAgICAgICAgICAgIC8vIH1cblxuICAgICAgICAgICAgLy8gaWYgKHNpbmdsZVF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAncmV0RmluYW5jRWxnYmwnKSB7XG4gICAgICAgICAgICAvLyAgIGxldCBmaW5hbmNpYWxFbGlnaWJpbGl0eUFuc3dlckluZGV4OiBhbnkgPSBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleCgoc2luZ2xlQW5zd2VyT2JqOiBhbnkpID0+IChzaW5nbGVBbnN3ZXJPYmpbJ3F1ZXN0aW9uSWQnXSA9PT0gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSAmJiBzaW5nbGVBbnN3ZXJPYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddKSlcbiAgICAgICAgICAgIC8vICAgbGV0IG9iajogYW55ID0ge1xuICAgICAgICAgICAgLy8gICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgIC8vICAgICBxdWVzdGlvbklkOiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgLy8gICAgIGFuc3dlcjogdGhpcy5zaGFyZWRTZXJ2aWNlLmZpbmFuY2lhbEVsaWdpYmlsaXR5LFxuICAgICAgICAgICAgLy8gICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXG4gICAgICAgICAgICAvLyAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxuICAgICAgICAgICAgLy8gICAgIGNsdXN0ZXJJZDogc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddLFxuICAgICAgICAgICAgLy8gICB9O1xuICAgICAgICAgICAgLy8gICBpZiAoZmluYW5jaWFsRWxpZ2liaWxpdHlBbnN3ZXJJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIC8vICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2gob2JqKTtcbiAgICAgICAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2ZpbmFuY2lhbEVsaWdpYmlsaXR5QW5zd2VySW5kZXhdWydhbnN3ZXInXSA9IHRoaXMuc2hhcmVkU2VydmljZS5maW5hbmNpYWxFbGlnaWJpbGl0eTtcbiAgICAgICAgICAgIC8vICAgfVxuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIH0pO1xuICAgICAgICAvLyB9XG4gICAgICB9KTtcbiAgICAgIGxldCBkaXN0aW5jdFBlcnNvbklkRnJvbVJlcXVlc3Q6IGFueSA9IFtcbiAgICAgICAgLi4ubmV3IFNldChcbiAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLm1hcCgoaXRlbTogYW55KSA9PlxuICAgICAgICAgICAgaXRlbS5wZXJzb25VV0lkLnRvU3RyaW5nKClcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICBdO1xuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZGlzdGluY3RQZXJzb25JZEZyb21SZXF1ZXN0KSkge1xuICAgICAgICBtYWluUmVxdWVzdEZvckxhID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXG4gICAgICAgICAgKHNpbmdsZUFuc3dlcjogYW55KSA9PlxuICAgICAgICAgICAgc2luZ2xlQW5zd2VyWydwZXJzb25VV0lkJ10gPT09IGRpc3RpbmN0UGVyc29uSWRGcm9tUmVxdWVzdFswXVxuICAgICAgICApO1xuICAgICAgICBpZiAoZGlzdGluY3RQZXJzb25JZEZyb21SZXF1ZXN0Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yUGggPSBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbHRlcihcbiAgICAgICAgICAgIChzaW5nbGVBbnN3ZXI6IGFueSkgPT5cbiAgICAgICAgICAgICAgc2luZ2xlQW5zd2VyWydwZXJzb25VV0lkJ10gPT09IGRpc3RpbmN0UGVyc29uSWRGcm9tUmVxdWVzdFsxXVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxldCBzYXZlUmVxdWVzdHNBcnJheTogYW55ID0gW107XG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShtYWluUmVxdWVzdEZvckxhKSAmJiB0aGlzLnBlcnNvblR5cGUoKSAhPT0gJ1BIJykge1xuICAgICAgICB0aGlzLnNhdmVRdWVzdGlvblJlcXVlc3RMYSA9IG1haW5SZXF1ZXN0Rm9yTGE7XG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXG4gICAgICAgICAgJ3NhdmVRdWVzdGlvblJlcXVlc3RMYScsXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkobWFpblJlcXVlc3RGb3JMYSlcbiAgICAgICAgKTtcbiAgICAgICAgLy8gc2F2ZVJlcXVlc3RzQXJyYXkucHVzaCh0aGlzLmNvbW1vblNlcnZpY2Uuc2F2ZUFuc3dlcnMobWFpblJlcXVlc3RGb3JMYSwgIWNhbGxlZEZyb21Db25maXJtYXRpb24pKTtcbiAgICAgICAgLy8gc2F2ZVJlcXVlc3RzQXJyYXkucHVzaCh0aGlzLmNvbW1vblNlcnZpY2Uuc2F2ZUFuc3dlcnMobWFpblJlcXVlc3RGb3JMYSwgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZS5pc0VkaXRBbGxvd2VkRm9yQWdlbnQpICYmIHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZS5pc0VkaXRBbGxvd2VkRm9yQWdlbnQgJiYgdGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudC50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpID8gdHJ1ZSA6ICFjYWxsZWRGcm9tQ29uZmlybWF0aW9uKSk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShtYWluUmVxdWVzdEZvckxhKSAmJiB0aGlzLnBlcnNvblR5cGUoKSA9PT0gJ1BIJykge1xuICAgICAgICB0aGlzLnNhdmVRdWVzdGlvblJlcXVlc3RQaCA9IG1haW5SZXF1ZXN0Rm9yTGE7XG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXG4gICAgICAgICAgJ3NhdmVRdWVzdGlvblJlcXVlc3RQaCcsXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkobWFpblJlcXVlc3RGb3JMYSlcbiAgICAgICAgKTtcbiAgICAgICAgLy8gIHNhdmVSZXF1ZXN0c0FycmF5LnB1c2godGhpcy5jb21tb25TZXJ2aWNlLnNhdmVBbnN3ZXJzKG1haW5SZXF1ZXN0Rm9yUGgsICFjYWxsZWRGcm9tQ29uZmlybWF0aW9uKSk7XG4gICAgICAgIC8vIHNhdmVSZXF1ZXN0c0FycmF5LnB1c2godGhpcy5jb21tb25TZXJ2aWNlLnNhdmVBbnN3ZXJzKG1haW5SZXF1ZXN0Rm9yUGgsICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UuaXNFZGl0QWxsb3dlZEZvckFnZW50KSAmJiB0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UuaXNFZGl0QWxsb3dlZEZvckFnZW50ICYmIHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZS5pc0VkaXRBbGxvd2VkRm9yQWdlbnQudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnKSA/IHRydWUgOiAhY2FsbGVkRnJvbUNvbmZpcm1hdGlvbikpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRlTWVkaWNhbFF1ZXN0aW9ucygpO1xuICB9XG5cbiAgZ2V0Q29va2llVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb29raWUgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTtcbiAgICBsZXQgdG9rZW5OYW1lID0gJyc7XG4gICAgbGV0IHRva2VuVmFsdWUgPSAnJztcbiAgICBjb25zdCBpbmRleDIgPSAyO1xuICAgIGNvb2tpZS5mb3JFYWNoKChkYXRhKSA9PiB7XG4gICAgICBpZiAoZGF0YS5zcGxpdCgnPScpWzBdLmluY2x1ZGVzKG5hbWUpICYmICEhZGF0YS5zcGxpdCgnPScpWzFdKSB7XG4gICAgICAgIHRva2VuTmFtZSA9IGRhdGEuc3BsaXQoJz0nKVswXS50cmltKCk7XG4gICAgICAgIHRva2VuVmFsdWUgPSBkYXRhLnNwbGl0KCc9JylbMV07XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIG5hbWUgPT09ICdsaW5rJyAmJlxuICAgICAgICBkYXRhLnNwbGl0KCc9JylbMF0uaW5jbHVkZXMobmFtZSkgJiZcbiAgICAgICAgZGF0YS5zcGxpdCgnPScpW2luZGV4Ml0gIT09IG51bGwgJiZcbiAgICAgICAgZGF0YS5zcGxpdCgnPScpW2luZGV4Ml0gIT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIHRva2VuVmFsdWUgPSB0b2tlblZhbHVlICsgJz0nICsgZGF0YS5zcGxpdCgnPScpW2luZGV4Ml07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRva2VuVmFsdWU7XG4gIH1cblxuICB2YWxpZGF0ZU1lZGljYWxRdWVzdGlvbnMoZm9jdXNPbkluVmFsaWQgOiBhbnkgPSBmYWxzZSkge1xuICAgIGxldCBpc1ZhbGlkOiBhbnkgPSB0cnVlO1xuICAgIGxldCB2YWxpZGF0aW9uTWVzc2FnZSA6IGFueSA9ICcnO1xuICAgIHRoaXMucXVlc3Rpb25MaXN0LmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10pICYmIGlzVmFsaWQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSkgJiZcbiAgICAgICAgICAoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PVxuICAgICAgICAgICAgJ1RFTExfVVNfTU9SRScgfHxcbiAgICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udG9VcHBlckNhc2UoKS5yZXBsYWNlQWxsKCcgJywgJ18nKSA9PT1cbiAgICAgICAgICAgICAgJ0JBU0lDX0RFVEFJTFMnKSAmJlxuICAgICAgICAgIGlzVmFsaWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgaGVpZ2h0IGVudGVyZWQgaW4gZmVldFxuICAgICAgICAgIGlmICh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0ZFRVQnKSB7XG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXNPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXG4gICAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUSSdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5GZWV0T2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxuICAgICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzT2JqKSAmJlxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldE9iaikgJiZcbiAgICAgICAgICAgICAgKHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J11cbiAgICAgICAgICAgICAgKSB8fFxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXVxuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICB2YWxpZGF0aW9uTWVzc2FnZSA9IGBQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIEZlZXQgYW5kIEluY2hlc2A7XG4gICAgICAgICAgICAgIGlmKGZvY3VzT25JblZhbGlkKSB7XG4gICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9ICdtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gaWYgKHRoaXMuc2hhcmVkU2VydmljZS5pc01hbmRhdG9yeUZpZWxkICYmICFzYXZlZHJhZnQgJiYgcmVkaXJlY3QpIHtcbiAgICAgICAgICAgICAgLy8gaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgICAgICAgICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xuICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgIC8vIGxldCBxdWVzdGlvbklkOiBhbnkgPSBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSArICdfJyArIHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgICAgICAgICAgICAvLyB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgICAgICAgICAgIC8vIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XG4gICAgICAgICAgICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xuICAgICAgICAgICAgICAvLyAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgICAgICAgICAgICAvLyAgICAgbWVzc2FnZTogJ1BsZWFzZSBlbnRlciBIZWlnaHQgaW4gRmVldCBhbmQgSW5jaGVzIGZvciAnICsgcm9sZVxuICAgICAgICAgICAgICAvLyAgIH0pO1xuICAgICAgICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIGVudGVyIEhlaWdodCBpbiBGZWV0IGFuZCBJbmNoZXMgZm9yICcgKyByb2xlLCAnQ2xvc2UnKTtcblxuICAgICAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAgICAgLy8gcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGhlaWdodCBpbiBjbVxuICAgICAgICAgIGxldCBoZWlnaHRJbkNlbnRpbWV0ZXJPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXG4gICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCdcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnQ00nICYmXG4gICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXVxuICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmopICYmXG4gICAgICAgICAgICBpc1ZhbGlkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICB2YWxpZGF0aW9uTWVzc2FnZSA9IGBQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIGNlbnRpbWV0ZXJgO1xuXG4gICAgICAgICAgICBpZihmb2N1c09uSW5WYWxpZCkge1xuICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JZDogYW55ID0gJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCc7XG4gICAgICAgICAgICAgIHRoaXMuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmo6IGFueSkgPT4ge1xuICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGJhc2ljIHF1ZXN0aW9uc1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmopICYmXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10pICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAgICAgICAgIGlzVmFsaWQgJiZcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0lNQUdFIFRFWFQnICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVCcgJiZcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0RFQ0xBUkFUSU9OJyAmJlxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdoYXJkQ29weUxhbmcnICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdQQVNTUE9SVF9VUExPQUQnICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVEYnICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVEknICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddLnRvU3RyaW5nKCkgPT09ICdOJyAmJlxuICAgICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddXVxuICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgLy8gKChzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcbiAgICAgICAgICAgIC8vICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXVtzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddXSkpIHx8XG4gICAgICAgICAgICAvLyAgIChzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiYgIXRoaXMudmFsaWRhdGVDaGVja0JveEZpZWxkKHNpbmdsZVF1ZXN0aW9uT2JqLCBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkpKVxuICAgICAgICAgICAgaXNWYWxpZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGFsbCB0aGUgZGV0YWlscyBpbiAke3NpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ119YDtcbiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYoZm9jdXNPbkluVmFsaWQpIHtcbiAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ107XG4gICAgICAgICAgICAgIHRoaXMuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaWYgKFxuICAgICAgICAgIC8vICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnUEFTU1BPUlRfVVBMT0FEJyAmJlxuICAgICAgICAgIC8vICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nICYmXG4gICAgICAgICAgLy8gICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAgICAgICAvLyApIHtcbiAgICAgICAgICAvLyAgIGxldCBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqOiBhbnkgPSB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnF1ZXN0aW9uc1Bhc3Nwb3J0VXBsb2FkT2JqLmZpbHRlcigoc2luZ2xlT2JqOiBhbnkpID0+IChzaW5nbGVPYmpbJ3BlcnNvblR5cGUnXSA9PT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gJiYgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZU9ialsnZG1zSWQnXSkpKTtcbiAgICAgICAgICAvLyAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmopKSB7XG4gICAgICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChgJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydxdWVzdGlvblR5cGUnXX1fJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWyd0eXBlJ119XyR7ZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsncGVyc29uVHlwZSddfWApO1xuICAgICAgICAgIC8vICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xuICAgICAgICAgIC8vICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcbiAgICAgICAgICAvLyAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAgICAgICAvLyAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgdXBsb2FkIHBhc3Nwb3J0ICcgKyBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydsYWJlbCddICsgJyBkb2N1bWVudCBmb3IgJyArIHJvbGVcbiAgICAgICAgICAvLyAgICAgICB9KTtcbiAgICAgICAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIHVwbG9hZCBwYXNzcG9ydCAnICsgZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsnbGFiZWwnXSArICcgZG9jdW1lbnQgZm9yICcgKyByb2xlLCAnQ2xvc2UnKTtcbiAgICAgICAgICAvLyAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xuICAgICAgICAgIC8vICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XG4gICAgICAgICAgLy8gICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgICAgICAgLy8gICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xuICAgICAgICAgIC8vICAgICAgICAgaWYgKHJvbGUgPT09ICdsaWZlIGFzc3VyZWQnKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAgICAgICAvLyAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ3BvbGljeSBob2xkZXInKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9QSCcpO1xuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgICAvLyAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdqb2ludGxpZmUnKSB7XG4gICAgICAgICAgLy8gICAgICAgICBjb25zb2xlLmxvZyhcImpvaW50IGxpZmUgY2FzZVwiKTtcbiAgICAgICAgICAvLyAgICAgICB9XG4gICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAvLyAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgIC8vICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgLy8gICB9XG5cbiAgICAgICAgICAvLyB9XG4gICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgZGVjbGFyYXRpb24gcXVlc3Rpb25zXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXNWYWxpZCAmJlxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25UeXBlID09PSAnREVDTEFSQVRJT04nICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSkgJiZcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJ1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoaXNWYWxpZCAmJlxuICAgICAgICAgICAgICAgIC8vICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dKSAmJlxuICAgICAgICAgICAgICAgIC8vICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkgJiZcbiAgICAgICAgICAgICAgICAvLyAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdKSAmJlxuICAgICAgICAgICAgICAgIC8vICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXSkgJiZcbiAgICAgICAgICAgICAgICAvLyAgICgoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV1bc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ11dID09PVxuICAgICAgICAgICAgICAgICAgJ04nKSB8fFxuICAgICAgICAgICAgICAhdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV0gfHxcbiAgICAgICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ11dXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLy8gKVxuICAgICAgICAgICAgICAvLyB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGFsbCB0aGUgZGV0YWlscyBpbiAke3NpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ119YDtcblxuICAgICAgICAgICAgICBpZihmb2N1c09uSW5WYWxpZCkge1xuICAgICAgICAgICAgICAgIGxldCBxdWVzdGlvbklkOiBhbnkgPSBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBtZWRpY2FsIHN1YiBxdWVzdGlvbnNcbiAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlKSkge1xuICAgICAgICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZS5mb3JFYWNoKChxdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICAgIGlmIChcbiAgICAgICAgICAvLyAgICAgICB0aGlzLnNob3dTdWJRdWVzdGlvbihxdWVzdGlvbikgJiZcbiAgICAgICAgICAvLyAgICAgICBxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdJTUFHRSBURVhUJyAmJlxuICAgICAgICAgIC8vICAgICAgIHF1ZXN0aW9uWydvcHRpb25hbFF1ZXN0aW9uJ10udG9TdHJpbmcoKSA9PT0gJ04nICYmXG4gICAgICAgICAgLy8gICAgICAgKChxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcbiAgICAgICAgICAvLyAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXVtxdWVzdGlvblsncXVlc3Rpb25JZCddXSkpIHx8XG4gICAgICAgICAgLy8gICAgICAgICAocXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmICF0aGlzLnZhbGlkYXRlQ2hlY2tCb3hGaWVsZChxdWVzdGlvbiwgJ2xpZmVBc3N1cmVkJykpKVxuICAgICAgICAgIC8vICAgICApIHtcbiAgICAgICAgICAvLyAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgLy8gICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UubG9hZGluZ0FnZW50cG9ydGFsICYmICFzYXZlZHJhZnQpIHtcbiAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcbiAgICAgICAgICAvLyAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgICAgICAgIC8vICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGFuc3dlciBhbGwgbWVkaWNhbCBzdWIgcXVlc3Rpb25zICcgKyBxdWVzdGlvblsncXVlc3Rpb25JZCddICsgJyAnICsgcXVlc3Rpb25bJ3F1ZXN0aW9uVGV4dCddXG4gICAgICAgICAgLy8gICAgICAgICB9KTtcbiAgICAgICAgICAvLyAgICAgICB9XG4gICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAvLyAgIH0pO1xuICAgICAgICAgIC8vIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgZmF0Y2ggZGVjbGFyYXRpb25cbiAgICAgICAgLy8gaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uLnF1ZXN0aW9ucykgJiYgaXNWYWxpZCl7XG4gICAgICAgIC8vIHNpbmdsZVNlY3Rpb24ucXVlc3Rpb25zLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqOmFueSkgPT4ge1xuICAgICAgICAvLyAgIGlmKGlzVmFsaWQgJiYgc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25UeXBlID09PSAnREVDTEFSQVRJT04nICYmIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxuICAgICAgICAvLyAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10pICYmXG4gICAgICAgIC8vICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJ1xuICAgICAgICAvLyAgICAgKXtcbiAgICAgICAgLy8gICAgICAgaWYoIGlzVmFsaWQgJiZcbiAgICAgICAgLy8gICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXSkgJiZcbiAgICAgICAgLy8gICAgICAgICAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pICYmXG4gICAgICAgIC8vICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXSkgJiZcbiAgICAgICAgLy8gICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ10pICAmJlxuICAgICAgICAvLyAgICAgICAgICAgKCghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXVtzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pICYmXG4gICAgICAgIC8vICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV1bc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dID09PSAnTicpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV1bc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSkpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pKSB7XG5cbiAgICAgICAgLy8gICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgIT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSB7XG4gICAgICAgIC8vICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIC8vICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCAmJiAhc2F2ZWRyYWZ0KSB7XG4gICAgICAgIC8vIGxldCBxdWVzdGlvbklkOiBhbnkgPSBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvbklkICsgJ18nICsgc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xuICAgICAgICAvLyAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XG4gICAgICAgIC8vICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XG4gICAgICAgIC8vICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAgICAgLy8gICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBzZWxlY3QgYWxsIHRoZSBkZXRhaWxzIGluICcgKyBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddICsgJyBmb3IgJyArIHJvbGVcbiAgICAgICAgLy8gICAgICAgICAgIH0pO1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vICAgICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgfVxuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gfSk7XG4gICAgICAgIC8vIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2lzTWVkaWNhbFF1ZXN0aW9uc1ZhbGlkJywgaXNWYWxpZCk7XG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgndmFsaWRhdGlvbk1lc3NhZ2VGb3JNZWRpY2FsUXVlc3Rpb25zJywgdmFsaWRhdGlvbk1lc3NhZ2UpO1xuICB9XG5cbiAgdmFsdWVDaGFuZ2VGb3JNdWx0aXNlbGVjdChxdWVzdGlvbiA6IGFueSkge1xuICAgIGlmIChxdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ0xpZmVNZWRpQ25kdG4nIHx8IHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnTWVkaUNuZHRuJyApIHtcbiAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dLmxlbmd0aCA+IDBcblxuICAgICAgLy8gaWYgbm9uZSBpcyBzZWxlY3RlZCB0aGVuIHJlbW92ZSBhbGwgYW5kIGNhbGwgQVBJXG4gICAgICBsZXQgaXNOb25lU2VsZWN0ZWQgOiBhbnkgPSB0aGlzLnBlcnNvblV3QW5zd2Vyc1txdWVzdGlvblsncXVlc3Rpb25JZCddXS5maW5kSW5kZXgoKHNpbmdsZU9iaiA6YW55KSA9PiBzaW5nbGVPYmogPT09ICdOb01lZEhpc3RyeScpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGlzTm9uZVNlbGVjdGVkICE9PSAgLTFcbiAgICAgICkge1xuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1txdWVzdGlvblsncXVlc3Rpb25JZCddXSA9IHRoaXMucGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dID0gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0uZmlsdGVyKChzaW5nbGVPYmogOiBhbnkpID0+IHNpbmdsZU9iaiA9PT0gJ05vTWVkSGlzdHJ5JylcbiAgICAgIH1cbiAgICAgIHRoaXMubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlID0gW107XG4gICAgICBpZiAoXG4gICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkxpc3RcbiAgICAgICAgKSkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uTGlzdCA9IHRoaXMucXVlc3Rpb25MaXN0LmZpbHRlcigoc2luZ2xlU2VjdGlvbjogYW55KSA9PiAoKHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddKSB8fCAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddKSAmJiAhc2luZ2xlU2VjdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSkpICkpO1xuICAgICAgfVxuICAgICAgLy8gbGV0IGN1cnJlbnRTZWN0aW9uSW5kZXg6IGFueSA9IHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleChcbiAgICAgIC8vICAgKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PlxuICAgICAgLy8gICAgIHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PVxuICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd01hc3Rlck9ialtzaW5nbGVQZXJzb25JbmRleF1bJ3JvbGUnXVxuICAgICAgLy8gKTtcbiAgICAgIC8vIHJlbW92ZSBtZWRpY2FsIHN1YiBxdWVzdGlvbnMgZnJvbSBxdWVzdGlvbnMgcmVzcG9uc2UgbGlzdFxuICAgICAgLy8gaWYgKFxuICAgICAgLy8gICBjdXJyZW50U2VjdGlvbkluZGV4ICE9PSB0aGlzLm51bWJlckNvbnN0YW50Lm51bWJlcm1pbnVzMSAmJlxuICAgICAgLy8gICAhdGhpcy5zaGFyZWRjaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW1xuICAgICAgLy8gICAgICAgY3VycmVudFNlY3Rpb25JbmRleFxuICAgICAgLy8gICAgIF1cbiAgICAgIC8vICAgKSAmJlxuICAgICAgLy8gICAhdGhpcy5zaGFyZWRjaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW1xuICAgICAgLy8gICAgICAgY3VycmVudFNlY3Rpb25JbmRleFxuICAgICAgLy8gICAgIF1bJ3F1ZXN0aW9uTGlzdCddXG4gICAgICAvLyAgIClcbiAgICAgIC8vICkge1xuICAgICAgICAvLyB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtcbiAgICAgICAgLy8gICBjdXJyZW50U2VjdGlvbkluZGV4XG4gICAgICAgIC8vIF1bJ3F1ZXN0aW9uTGlzdCddID0gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbXG4gICAgICAgIC8vICAgJ3F1ZXN0aW9uc1Jlc3BvbnNlJ1xuICAgICAgICAvLyBdW2N1cnJlbnRTZWN0aW9uSW5kZXhdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoXG4gICAgICAgIC8vICAgKHNpbmdsZUxpc3RJdGVtOiBhbnkpID0+XG4gICAgICAgIC8vICAgICB0aGlzLnNoYXJlZGNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgIC8vICAgICAgIHNpbmdsZUxpc3RJdGVtWydpc01lZGljYWxTdWJRdWVzdGlvbiddXG4gICAgICAgIC8vICAgICApIHx8XG4gICAgICAgIC8vICAgICAoIXRoaXMuc2hhcmVkY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgLy8gICAgICAgc2luZ2xlTGlzdEl0ZW1bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ11cbiAgICAgICAgLy8gICAgICkgJiZcbiAgICAgICAgLy8gICAgICAgIXNpbmdsZUxpc3RJdGVtWydpc01lZGljYWxTdWJRdWVzdGlvbiddKVxuICAgICAgICAvLyApO1xuICAgICAgLy8gfVxuICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bXG4gICAgICAvLyAgICdxdWVzdGlvbkxpc3QnXG4gICAgICAvLyBdLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uOiBhbnksIGluZGV4OiBhbnkpID0+IHtcbiAgICAgIC8vICAgaWYgKHNpbmdsZVF1ZXN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddKSB7XG4gICAgICAvLyAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bXG4gICAgICAvLyAgICAgICAncXVlc3Rpb25MaXN0J1xuICAgICAgLy8gICAgIF0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfSk7XG5cbiAgICAgIC8vIHRoaXMucXVlc3Rpb25MaXN0ID0gdGhpcy5xdWVzdGlvbkxpc3QuZmlsdGVyKChzaW5nbGVTZWN0aW9uIDogYW55KSA9PiAoIXNpbmdsZVNlY3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10gfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10pKSk7XG4gICAgICAvLyB0aGlzLnF1ZXN0aW9uTGlzdC5mb3JFYWNoKChzaW5nbGVNYXN0ZXJPYmo6IGFueSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICAvLyAgIGlmIChzaW5nbGVNYXN0ZXJPYmpbJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10pIHtcbiAgICAgIC8vICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdNYXN0ZXJPYmpbc2luZ2xlUGVyc29uSW5kZXhdW1xuICAgICAgLy8gICAgICAgJ3F1ZXN0aW9uTGlzdCdcbiAgICAgIC8vICAgICBdWydxdWVzdGlvbnMnXSA9IFtdO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9KTtcbiAgICAgIC8vIHRoaXMubG9hZGVyLmRpc3BsYXkodHJ1ZSk7XG5cbiAgICAgIGxldCBzZWxlY3RlZERpc2Vhc2VzIDogYW55ID0gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0udG9TdHJpbmcoKTtcbiAgICAgIC8vIGxldCByZXF1ZXN0OiBhbnkgPSBKU09OLnBhcnNlKFxuICAgICAgLy8gICBKU09OLnN0cmluZ2lmeShcbiAgICAgIC8vICAgICB0aGlzLmZldGNoU3ViUXVlc3Rpb25zTGlzdFtcbiAgICAgIC8vICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd01hc3Rlck9ialtzaW5nbGVQZXJzb25JbmRleF1bJ3JvbGUnXVxuICAgICAgLy8gICAgIF0udG9TdHJpbmcoKVxuICAgICAgLy8gICApXG4gICAgICAvLyApO1xuICAgICAgaWYocXVlc3Rpb25bJ2ZpZWxkJ11bJ2NvbmZpZ0RhdGEnXS5oYXNPd25Qcm9wZXJ0eSgnYXBpVXJsJykgJiYgcXVlc3Rpb25bJ2ZpZWxkJ11bJ2NvbmZpZ0RhdGEnXS5oYXNPd25Qcm9wZXJ0eSgndXJsUGFyYW1Gb3JEaXNlYXNlJykgJiYgcXVlc3Rpb25bJ2ZpZWxkJ11bJ2NvbmZpZ0RhdGEnXS5oYXNPd25Qcm9wZXJ0eSgndXJsUGFyYW1Gb3JQZXJzb25Vd0lkJykgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShxdWVzdGlvblsnZmllbGQnXVsnY29uZmlnRGF0YSddWydhcGlVcmwnXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShxdWVzdGlvblsnZmllbGQnXVsnY29uZmlnRGF0YSddWyd1cmxQYXJhbUZvckRpc2Vhc2UnXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShxdWVzdGlvblsnZmllbGQnXVsnY29uZmlnRGF0YSddWyd1cmxQYXJhbUZvclBlcnNvblV3SWQnXSkpIHtcbiAgICAgICAgdGhpcy5tYXN0ZXJTZXJ2aWNlLmdldFN1YlF1ZXN0aW9ucyhxdWVzdGlvblsnZmllbGQnXVsnY29uZmlnRGF0YSddLCBzZWxlY3RlZERpc2Vhc2VzLCB0aGlzLnBlcnNvblV3SWQpLnN1YnNjcmliZShcbiAgICAgICAgICAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAvLyB0aGlzLmxvYWRlci5kaXNwbGF5KGZhbHNlKTtcbiAgICAgICAgICAgIGxldCBkaXN0aW5jdFN0ZXBzOiBhbnkgPSBbXTtcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRhdGEpKSB7XG4gICAgICAgICAgICAgIGRhdGEuZm9yRWFjaCgoc3ViUXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uW1xuICAgICAgICAgICAgICAgICAgJ2RvbWFpblZhbHVlcydcbiAgICAgICAgICAgICAgICBdID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ2RvbWFpblZhbHVlcyddW1xuICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ11cbiAgICAgICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10pXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddID0gW1xuICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddXG4gICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiZcbiAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ11cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10uZm9yRWFjaChcbiAgICAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXh0UXVlc3Rpb25PYmplY3Q6IGFueSA9IGRhdGEuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgKG9iamVjdDogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RbJ3F1ZXN0aW9uSWQnXSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9ialsnbmV4dFF1ZXN0aW9uSWQnXVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRRdWVzdGlvbk9iamVjdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0UXVlc3Rpb25PYmplY3RbMF1bJ2Fuc3dlcmVkVmFsdWUnXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmpbJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGlmIChcbiAgICAgICAgICAgICAgICAvLyAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgLy8gICAgIHN1YlF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXVxuICAgICAgICAgICAgICAgIC8vICAgKVxuICAgICAgICAgICAgICAgIC8vICkge1xuICAgICAgICAgICAgICAgIC8vICAgc3ViUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLmZvckVhY2goKHN1YkRvbWFpbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5zdWJNZWRpY2FsUXVlc3Rpb25zRG9tYWluSW50ZXJuYWxWYWx1ZXNMaXN0LnB1c2goXG4gICAgICAgICAgICAgICAgLy8gICAgICAgc3ViRG9tYWluWydkb21haW5JbnRlcm5hbFZhbHVlJ11cbiAgICAgICAgICAgICAgICAvLyAgICAgKTtcbiAgICAgICAgICAgICAgICAvLyAgIH0pO1xuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICBpZiAoIWRpc3RpbmN0U3RlcHMuaW5jbHVkZXMoc3ViUXVlc3Rpb25bJ2NsdXN0ZXJJZCddKSkge1xuICAgICAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5wdXNoKHN1YlF1ZXN0aW9uWydjbHVzdGVySWQnXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydmaWVsZCddID0gdGhpcy5nZXRGaWVsZChzdWJRdWVzdGlvbik7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBkYXRhLnNvcnQoXG4gICAgICAgICAgICAgICAgKGE6IGFueSwgYjogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgYVsnc3RlcCddIC0gYlsnc3RlcCddIHx8IGFbJ2Rpc3BsYXlPcmRlciddIC0gYlsnZGlzcGxheU9yZGVyJ11cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5mb3JFYWNoKChzdGVwczogYW55LCBpbmQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZE9iajogYW55ID0gZGF0YS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddID09PSBzdGVwc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge1xuICAgICAgICAgICAgICAgICAgc3RlcDogMTAwMCArIGluZCxcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uczogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iailcbiAgICAgICAgICAgICAgICAgICAgPyBmaWx0ZXJlZE9ialxuICAgICAgICAgICAgICAgICAgICA6IFtdLFxuICAgICAgICAgICAgICAgICAgc2VjdGlvbk5hbWU6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkT2JqXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgID8gZmlsdGVyZWRPYmpbMF1bJ3RpdGxlJ11cbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHRoaXMucGVyc29uVXdJZCxcbiAgICAgICAgICAgICAgICAgIGlzTWVkaWNhbFN1YlF1ZXN0aW9uOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgc2hvd1NlY3Rpb246IHRydWVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25MaXN0LnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHRoaXMubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlID0gZGF0YTtcbiAgICAgICAgICAgICAgLy8gbWVyZ2UgbWVkaWNhbCBzdWIgcXVlc3Rpb25zIGludG8gcGVyc29uIHV3IG1haW4gcXVlc3Rpb25zIHJlc3BvbnNlIChyZXF1aXJlZCBmb3Igc2hvdyBxdWVzdGlvbiBmdW5jdGlvbiB0byB3b3JrKVxuICAgICAgICAgICAgICAvLyBjbGVhcmluZyBvbiB0b3AgYmVmb3JlIGFwaSBjYWxsXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdSZXNwb25zZU9ialswXVsncXVlc3Rpb25MaXN0J10gPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbMF1bJ3F1ZXN0aW9uTGlzdCddLmNvbmNhdCh0aGlzLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8vIHRoaXMubG9hZGVyLmRpc3BsYXkoZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXG4gIH1cbiAgb25Eb2N1bWVudEZpbGVQcmV2aWV3KGV2ZW50OiB7IGZpbGU6IEZpbGUsIGluZGV4OiBudW1iZXIgfSk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdQcmV2aWV3IHJlcXVlc3RlZCBmb3I6JywgZXZlbnQuZmlsZS5uYW1lKTtcbiAgICB0aGlzLnByZXZpZXdGaWxlID0gZXZlbnQuZmlsZTtcbiAgfVxuXG4gIGNsb3NlRmlsZVByZXZpZXcoKTogdm9pZCB7XG4gICAgdGhpcy5wcmV2aWV3RmlsZSA9IG51bGw7XG4gIH1cblxuICBjaGVja0FuZFVwZGF0ZUhlaWdodFVuaXQoKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCdcbiAgICAgICAgXSA9PT0gJ0ZFRVQnICYmXG4gICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J1xuICAgICAgICAgIF1cbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGxldCBoZWlnaHRJbkluY2hlczogYW55ID0gKFxuICAgICAgICAgIHBhcnNlRmxvYXQoXG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCdcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApICogMC4zOTM3MDFcbiAgICAgICAgKS50b0ZpeGVkKDIpO1xuICAgICAgICBsZXQgaGVpZ2h0SW5GZWV0OiBhbnkgPVxuICAgICAgICAgIHBhcnNlRmxvYXQoXG4gICAgICAgICAgICAoaGVpZ2h0SW5JbmNoZXMgLyAxMilcbiAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgLnNwbGl0KCcuJylbMV1cbiAgICAgICAgICApID4gMTJcbiAgICAgICAgICAgID8gKGhlaWdodEluSW5jaGVzIC8gMTIpLnRvRml4ZWQoMSlcbiAgICAgICAgICAgIDogKGhlaWdodEluSW5jaGVzIC8gMTIpLnRvRml4ZWQoMik7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgaGVpZ2h0SW5GZWV0LnRvU3RyaW5nKCkuc3BsaXQoJy4nKVswXVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J1xuICAgICAgICAgIF0gPSBoZWlnaHRJbkZlZXQudG9TdHJpbmcoKS5zcGxpdCgnLicpWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgaGVpZ2h0SW5GZWV0LnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J1xuICAgICAgICAgIF0gPVxuICAgICAgICAgICAgaGVpZ2h0SW5GZWV0LnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXSAhPT0gJzExJyAmJlxuICAgICAgICAgICAgaGVpZ2h0SW5GZWV0LnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXSAhPT0gJzEyJyAmJlxuICAgICAgICAgICAgaGVpZ2h0SW5GZWV0LnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXSAhPT0gJzEzJ1xuICAgICAgICAgICAgICA/IGhlaWdodEluRmVldFxuICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgIC5zcGxpdCgnLicpWzFdXG4gICAgICAgICAgICAgICAgICAuY2hhckF0KDApXG4gICAgICAgICAgICAgIDogaGVpZ2h0SW5GZWV0LnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J1xuICAgICAgICBdID09PSAnQ00nICYmXG4gICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J1xuICAgICAgICAgIF1cbiAgICAgICAgKSAmJlxuICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCdcbiAgICAgICAgICBdXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXM6IGFueSA9XG4gICAgICAgICAgcGFyc2VGbG9hdChcbiAgICAgICAgICAgIHBhcnNlRmxvYXQoXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICkudG9TdHJpbmcoKSArXG4gICAgICAgICAgICAgICcuJyArXG4gICAgICAgICAgICAgIHBhcnNlRmxvYXQoXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J1xuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgKS50b1N0cmluZygpXG4gICAgICAgICAgKSAqIDEyO1xuICAgICAgICBsZXQgaGVpZ2h0SW5DbTogYW55ID0gKFxuICAgICAgICAgIHBhcnNlRmxvYXQoaGVpZ2h0SW5JbmNoZXMpIC8gMC4zOTM3MDFcbiAgICAgICAgKS50b0ZpeGVkKDIpO1xuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J1xuICAgICAgICBdID0gaGVpZ2h0SW5DbTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcbiAgICB9XG5cbiAgZm9jdXNUb0VsZW1lbnQoZWxlbWVudElkOiBhbnkpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTtcbiAgICBjb25zdCBoZWFkZXJPZmZzZXQgPSAxMjA7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2Nyb2xsQ29udGFpbmVyOiBhbnkgPSB0aGlzLmdldFNjcm9sbGFibGVQYXJlbnQoZWxlbWVudCk7XG5cbiAgICAvLyBXYWl0IGZvciB0aGUgbmV4dCBmcmFtZSBzbyBsYXlvdXQgaXMgc2V0dGxlZCBiZWZvcmUgc2Nyb2xsaW5nLlxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBjb250YWluZXJSZWN0ID1cbiAgICAgICAgc2Nyb2xsQ29udGFpbmVyID09PSB3aW5kb3dcbiAgICAgICAgICA/IHsgdG9wOiAwIH1cbiAgICAgICAgICA6IChzY3JvbGxDb250YWluZXIgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICBjb25zdCBjdXJyZW50U2Nyb2xsID1cbiAgICAgICAgc2Nyb2xsQ29udGFpbmVyID09PSB3aW5kb3dcbiAgICAgICAgICA/IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIHx8IDBcbiAgICAgICAgICA6IChzY3JvbGxDb250YWluZXIgYXMgSFRNTEVsZW1lbnQpLnNjcm9sbFRvcDtcblxuICAgICAgY29uc3QgdGFyZ2V0UG9zaXRpb24gPVxuICAgICAgICBlbGVtZW50UmVjdC50b3AgLSBjb250YWluZXJSZWN0LnRvcCArIGN1cnJlbnRTY3JvbGwgLSBoZWFkZXJPZmZzZXQ7XG5cbiAgICAgIGlmIChzY3JvbGxDb250YWluZXIgPT09IHdpbmRvdykge1xuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IHRhcmdldFBvc2l0aW9uLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAoc2Nyb2xsQ29udGFpbmVyIGFzIEhUTUxFbGVtZW50KS5zY3JvbGxUbyh7XG4gICAgICAgICAgdG9wOiB0YXJnZXRQb3NpdGlvbixcbiAgICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBlbGVtZW50LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnYmxpbmtfbWUnLCAnaW52YWxpZC1maWVsZC1vbmUtdWknKTtcblxuICAgICAgLy8gUmVtb3ZlIGJsaW5rIGFuaW1hdGlvbiBhZnRlciBkdXJhdGlvblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnYmxpbmtfbWUnKTtcbiAgICAgIH0sIDM1MDApO1xuXG4gICAgICAvLyBSZW1vdmUgaW52YWxpZC1maWVsZC1vbmUtdWkgY2xhc3Mgd2hlbiB1c2VyIGludGVyYWN0cyB3aXRoIHRoZSBmaWVsZFxuICAgICAgY29uc3QgcmVtb3ZlSW52YWxpZENsYXNzID0gKGV2ZW50PzogYW55KSA9PiB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnaW52YWxpZC1maWVsZC1vbmUtdWknKTtcbiAgICAgICAgLy8gQ2xlYW4gdXAgYWxsIGV2ZW50IGxpc3RlbmVycyBmcm9tIG1haW4gZWxlbWVudFxuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2lucHV0JywgcmVtb3ZlSW52YWxpZENsYXNzKTtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVtb3ZlSW52YWxpZENsYXNzLCB0cnVlKTtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCduZ01vZGVsQ2hhbmdlJywgcmVtb3ZlSW52YWxpZENsYXNzKTtcblxuICAgICAgICAvLyBDbGVhbiB1cCBldmVudCBsaXN0ZW5lcnMgZnJvbSBjaGlsZCByYWRpby9jaGVja2JveCBpbnB1dHNcbiAgICAgICAgY29uc3QgcmFkaW9JbnB1dHMgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9XCJyYWRpb1wiXScpO1xuICAgICAgICBjb25zdCBjaGVja2JveElucHV0cyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJyk7XG4gICAgICAgIHJhZGlvSW5wdXRzLmZvckVhY2goKHJhZGlvOiBhbnkpID0+IHtcbiAgICAgICAgICByYWRpby5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgICAgIHJhZGlvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVtb3ZlSW52YWxpZENsYXNzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNoZWNrYm94SW5wdXRzLmZvckVhY2goKGNoZWNrYm94OiBhbnkpID0+IHtcbiAgICAgICAgICBjaGVja2JveC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgICAgIGNoZWNrYm94LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVtb3ZlSW52YWxpZENsYXNzKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICAvLyBGb3IgdGV4dGJveCAtIHRyaWdnZXJzIG9uIHR5cGluZ1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHJlbW92ZUludmFsaWRDbGFzcyk7XG5cbiAgICAgIC8vIEZvciBzZWxlY3QgZHJvcGRvd24gLSB0cmlnZ2VycyBvbiB2YWx1ZSBjaGFuZ2VcbiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgcmVtb3ZlSW52YWxpZENsYXNzKTtcblxuICAgICAgLy8gRm9yIGRpcmVjdCBjbGljayBvbiB0aGUgZWxlbWVudCAtIHVzZSBjYXB0dXJlIHBoYXNlIHRvIGNhdGNoIGNoaWxkIGV2ZW50c1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHJlbW92ZUludmFsaWRDbGFzcywgdHJ1ZSk7XG5cbiAgICAgIC8vIEZvciBBbmd1bGFyIG5nTW9kZWwgY2hhbmdlc1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCduZ01vZGVsQ2hhbmdlJywgcmVtb3ZlSW52YWxpZENsYXNzKTtcblxuICAgICAgLy8gSGFuZGxlIHJhZGlvIGJ1dHRvbnMgd2l0aGluIHRoZSBlbGVtZW50IChjb21tb24gaW4gQW5ndWxhciBmb3JtcylcbiAgICAgIGNvbnN0IHJhZGlvSW5wdXRzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPVwicmFkaW9cIl0nKTtcbiAgICAgIHJhZGlvSW5wdXRzLmZvckVhY2goKHJhZGlvOiBhbnkpID0+IHtcbiAgICAgICAgcmFkaW8uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgcmVtb3ZlSW52YWxpZENsYXNzKTtcbiAgICAgICAgcmFkaW8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEhhbmRsZSBjaGVja2JveGVzIHdpdGhpbiB0aGUgZWxlbWVudCAoZm9yIG11bHRpLXNlbGVjdClcbiAgICAgIGNvbnN0IGNoZWNrYm94SW5wdXRzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKTtcbiAgICAgIGNoZWNrYm94SW5wdXRzLmZvckVhY2goKGNoZWNrYm94OiBhbnkpID0+IHtcbiAgICAgICAgY2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgcmVtb3ZlSW52YWxpZENsYXNzKTtcbiAgICAgICAgY2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFNjcm9sbGFibGVQYXJlbnQobm9kZTogSFRNTEVsZW1lbnQgfCBudWxsKTogSFRNTEVsZW1lbnQgfCBXaW5kb3cge1xuICAgIGxldCBwYXJlbnQgPSBub2RlPy5wYXJlbnRFbGVtZW50O1xuICAgIHdoaWxlIChwYXJlbnQpIHtcbiAgICAgIGNvbnN0IG92ZXJmbG93WSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudCkub3ZlcmZsb3dZO1xuICAgICAgaWYgKG92ZXJmbG93WSA9PT0gJ2F1dG8nIHx8IG92ZXJmbG93WSA9PT0gJ3Njcm9sbCcpIHtcbiAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgIH1cbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnRFbGVtZW50O1xuICAgIH1cbiAgICByZXR1cm4gd2luZG93O1xuICB9XG59XG4iLCJcbjxkaXYgKm5nRm9yPVwibGV0IHNlY3Rpb24gb2YgcXVlc3Rpb25MaXN0XCI+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgIWNoZWNrSWZWYWx1ZUlzRW1wdHkoc2VjdGlvblsncXVlc3Rpb25zJ10pICYmXG4gICAgICAgIHNlY3Rpb25bJ3Nob3dTZWN0aW9uJ11cbiAgICAgIFwiXG4gICAgICBjbGFzcz1cImNhcmQgcC0zIG1iLTRcIlxuICAgICAgaWQ9XCJwZXJzb25Vd01lZGljYWxRdWVzdGlvbnNcIlxuICAgID5cbiAgICAgIDxoNiBjbGFzcz1cInBhZ2UtdGl0bGUgYm9sZC1sYWJlbFwiPlxuICAgICAgICB7eyBnZXRUaXRsZUNhc2Uoc2VjdGlvbltcInNlY3Rpb25OYW1lXCJdKSB9fVxuICAgICAgPC9oNj5cbiAgICAgIDxsaWItaHItbGluZSBbZmllbGRdPVwiaG9yaXpvbnRhbExpbmVPYmpcIiAvPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcXVlc3Rpb25zIG9mIHNlY3Rpb25bJ3F1ZXN0aW9ucyddXCIgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0lNQUdFIFRFWFQnXCI+XG4gICAgICAgICAgPGltZyBbc3JjXT1cInF1ZXN0aW9uc1snc2FtcGxlUzNMaW5rJ11cIiBjbGFzcz1cImQtYmxvY2sgbXgtYXV0b1wiIFthbHRdPVwicXVlc3Rpb25zWyd0aXRsZSddXCI+XG4gICAgICAgICAgPGgzIFtpbm5lckhUTUxdPVwicXVlc3Rpb25zWydxdWVzdGlvblRleHQnXVwiPjwvaDM+XG4gICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnRlJFRSBURVhUJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhUJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cImZpZWxkLWxhYmxlIGQtYmxvY2tcIlxuICAgICAgICAgICAgPnt7IHF1ZXN0aW9uc1tcInF1ZXN0aW9uVGV4dFwiXSB9fVxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnMub3B0aW9uYWxRdWVzdGlvbiA9PT0gJ04nXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIHN0eWxlPVwiY29sb3I6ICNlZTAwMDBcIlxuICAgICAgICAgICAgICA+JiM0Mjs8L3NwYW5cbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2xhYmVsPiAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHB4LTAgbXktMVwiPlxuICAgICAgICAgICAgPGxpYi10ZXh0Ym94IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAoYmx1cik9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInF1ZXN0aW9ucz8uZmllbGQ/LmNzc0NsYXNzXCJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0hFSUdIVElOUFVUJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2FyZC10b3BpYyBkLWJsb2NrIGZpZWxkLWxhYmxlXCJcbiAgICAgICAgICAgID5IZWlnaHRcbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIHN0eWxlPVwiY29sb3I6ICNlZTAwMDBcIlxuICAgICAgICAgICAgICA+JiM0Mjs8L3NwYW5cbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiY29sLWF1dG8gcHgtMCBteS0wIHB5LTAgaGVpZ2h0aW5wdXRcIlxuICAgICAgICAgICAgaWQ9XCJtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY29sLTEyIG15LTFcIiAqbmdJZj1cInBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0NNJ1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgcHktMCBoZWlnaHRJbnB1dHNcIj5cbiAgICAgICAgICAgICAgICA8bGliLXRleHRib3ggWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddXCIgKG5nTW9kZWxDaGFuZ2UpPVwicmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiIFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnUUhUJ11bJ2ZpZWxkJ11cIiAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTVcIj5cbiAgICAgICAgICAgICAgICA8bGliLXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXVwiIFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnaGVpZ2h0T2JqZWN0VHlwZXMnXVwiIChuZ01vZGVsQ2hhbmdlKT1cImNoZWNrQW5kVXBkYXRlSGVpZ2h0VW5pdCgpXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJyb3dcIlxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIHBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCdcbiAgICAgICAgICAgICAgICBdID09PSAnRkVFVCdcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IHB5LTAgbXktMVwiPlxuICAgICAgICAgICAgICAgIDxsaWItc2VsZWN0IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXVwiIChuZ01vZGVsQ2hhbmdlKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIiBbZmllbGRdPVwibWVkUXVlc3Rpb25PYmpbJ1FIVEYnXVsnZmllbGQnXVwiIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgcHktMCBteS0xXCI+XG4gICAgICAgICAgICAgICAgPGxpYi1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddXCIgKG5nTW9kZWxDaGFuZ2UpPVwicmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiIFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnUUhUSSddWydmaWVsZCddXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC00IHB5LTAgbXktMVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bGliLXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXVwiIFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnaGVpZ2h0T2JqZWN0VHlwZXMnXVwiIChuZ01vZGVsQ2hhbmdlKT1cImNoZWNrQW5kVXBkYXRlSGVpZ2h0VW5pdCgpXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInJvdyBtdC0wIHB0LTBcIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnTUFQJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxuICAgICAgICAgIFwiXG4gICAgICAgID5cblxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1hcC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGRyZXNzLXNlYXJjaC1jb250YWluZXIgbWItM1wiPlxuXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBjYXJkLXRvcGljXCI+TG9uZ2l0dWRlPC9sYWJlbD5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJsb25naXR1ZGVcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgbG9uZ2l0dWRlXCJcbiAgICAgICAgICBzdGVwPVwiYW55XCJcbiAgICAgICAgICByZWFkb25seVxuICAgICAgICA+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGNhcmQtdG9waWNcIj5MYXRpdHVkZTwvbGFiZWw+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwibGF0aXR1ZGVcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgbGF0aXR1ZGVcIlxuICAgICAgICAgIHN0ZXA9XCJhbnlcIlxuICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgID5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgICA8aW5wdXRcbiAgICAgICAgI2FkZHJlc3NJbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggZm9yIGFkZHJlc3NcIlxuICAgICAgICAoa2V5dXApPVwib25BZGRyZXNzSW5wdXRLZXl1cCgkZXZlbnQpXCJcbiAgICAgICAgKGZvY3VzKT1cInNob3dEcm9wZG93biA9IHRydWVcIlxuICAgICAgICAoYmx1cik9XCJvbklucHV0Qmx1cigpXCJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgID5cbiAgICAgIDxkaXZcbiAgICAqbmdJZj1cInNob3dEcm9wZG93biAmJiBhZGRyZXNzU3VnZ2VzdGlvbnMubGVuZ3RoID4gMFwiXG4gICAgY2xhc3M9XCJhdXRvY29tcGxldGUtZHJvcGRvd24gcG9zaXRpb24tYWJzb2x1dGUgdy0xMDAgbXQtMVwiXG4gICAgc3R5bGU9XCJ6LWluZGV4OiAxMDAwOyBtYXgtaGVpZ2h0OiAyMDBweDsgb3ZlcmZsb3cteTogYXV0bzsgYmFja2dyb3VuZDogd2hpdGU7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IGJvcmRlci1yYWRpdXM6IDRweDsgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwwLDAsMC4xKTtcIlxuICA+XG4gICAgPGRpdlxuICAgICAgKm5nRm9yPVwibGV0IHN1Z2dlc3Rpb24gb2YgYWRkcmVzc1N1Z2dlc3Rpb25zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwLTJcIlxuICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWVlO1wiXG4gICAgICAobW91c2Vkb3duKT1cInNlbGVjdEFkZHJlc3Moc3VnZ2VzdGlvbilcIlxuICAgICAgKG1vdXNlZW50ZXIpPVwiaG92ZXJlZEluZGV4ID0gaVwiXG4gICAgICBbY2xhc3MuYmctbGlnaHRdPVwiaG92ZXJlZEluZGV4ID09PSBpXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZFwiPnt7IHN1Z2dlc3Rpb24ubWFpbl90ZXh0IH19PC9kaXY+XG4gICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+e3sgc3VnZ2VzdGlvbi5zZWNvbmRhcnlfdGV4dCB9fTwvc21hbGw+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZFwiPlN0YXJ0IHR5cGluZyB0byBzZWFyY2ggZm9yIGFkZHJlc3Nlczwvc21hbGw+XG4gICAgPC9kaXY+XG4gICAgICAgICAgICA8Z29vZ2xlLW1hcCBbY2VudGVyXT1cImNlbnRlclwiIFt6b29tXT1cInpvb21cIj5cbiAgICAgICAgICAgICAgPG1hcC1tYXJrZXIgW3Bvc2l0aW9uXT1cImN1cnJlbnRDb29yZGluYXRlc1wiPjwvbWFwLW1hcmtlcj5cbiAgICAgICAgICAgIDwvZ29vZ2xlLW1hcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAocXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ1JBRElPIEJVVFRPTicgfHxcbiAgICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0FERE1PUkUnKSAmJlxuICAgICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxsaWItcmFkaW8gWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCIgKG5nTW9kZWxDaGFuZ2UpPVwicmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAvPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJteS0xXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJxdWVzdGlvbnM/LmZpZWxkPy5jc3NDbGFzc1wiXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGxpYi1tdWx0aXBsZS1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCIgKG5nTW9kZWxDaGFuZ2UpPVwidmFsdWVDaGFuZ2VGb3JNdWx0aXNlbGVjdChxdWVzdGlvbnMpXCIgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiIC8+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cIm15LTFcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInF1ZXN0aW9ucz8uZmllbGQ/LmNzc0NsYXNzXCJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RFQ0xBUkFUSU9OJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bGliLWNoZWNrYm94IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIChuZ01vZGVsQ2hhbmdlKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIiBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwibXktMVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnRFJPUERPV04nICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxsaWItc2VsZWN0IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwibXktMVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxsaWItZG9iIFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJcIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnSEVJR0hUSU5QVVQnICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJteS0xXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJxdWVzdGlvbnM/LmZpZWxkPy5jc3NDbGFzc1wiXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdET0NVUExPQUQnICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxsaWItdXBsb2FkIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAoZmlsZVByZXZpZXcpPVwib25Eb2N1bWVudEZpbGVQcmV2aWV3KCRldmVudClcIiAvPlxuICAgICAgICAgIDxsaWItZmlsZS1wcmV2aWV3XG4gICAgICAgICAgICAqbmdJZj1cInByZXZpZXdGaWxlXCJcbiAgICAgICAgICAgIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIlxuICAgICAgICAgICAgW2ZpbGVdPVwicHJldmlld0ZpbGVcIlxuICAgICAgICAgICAgKGNsb3NlZCk9XCJjbG9zZUZpbGVQcmV2aWV3KClcIj5cbiAgICAgICAgICA8L2xpYi1maWxlLXByZXZpZXc+XG4gICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInF1ZXN0aW9ucz8uZmllbGQ/LmNzc0NsYXNzXCJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ1BBU1NQT1JUX1VQTE9BRCcgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgIDwhLS0gcGVuZGluZyAtLT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4iXX0=
|
|
2578
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL21lZGlhbC1xdWVzdGlvbnMvbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL21lZGlhbC1xdWVzdGlvbnMvbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBVSxTQUFTLEVBQXlCLEtBQUssRUFBMEMsTUFBTSxFQUFFLFlBQVksRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUVwTCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHL0QsT0FBTyxFQUFFLG9C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Qjt3QkFDbkIsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLGlCQUFpQjt3QkFDakIsZUFBZTt3QkFDZixZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsdUJBQXVCO3dCQUN2QixnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2Ysb0JBQW9CO3FCQUNyQjt1R0FLUyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBRUUsaUJBQWlCO3NCQUF6QixLQUFLO2dCQVFxQixZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHb29nbGVNYXBzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZ29vZ2xlLW1hcHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQsIE5nWm9uZSwgQWZ0ZXJWaWV3SW5pdCwgaW5wdXQsIFNpbXBsZUNoYW5nZXMsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgb3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgcXVlc3Rpb25zUmVzcG9uc2UgZnJvbSAnLi9xdWVzdGlvbnMuanNvbidcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRleHRib3hDb21wb25lbnQgfSBmcm9tICcuLi90ZXh0Ym94L3RleHRib3guY29tcG9uZW50JztcbmltcG9ydCB7IFJhZGlvQ29tcG9uZW50IH0gZnJvbSAnLi4vcmFkaW8vcmFkaW8uY29tcG9uZW50JztcbmltcG9ydCB7IENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50JztcbmltcG9ydCB7IFNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7IERvYkNvbXBvbmVudCB9IGZyb20gJy4uL2RvYi9kb2IuY29tcG9uZW50JztcbmltcG9ydCB7IFVwbG9hZENvbXBvbmVudCB9IGZyb20gJy4uL3VwbG9hZC91cGxvYWQuY29tcG9uZW50JztcbmltcG9ydCB7IE11bHRpcGxlU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vbXVsdGlwbGUtc2VsZWN0L211bHRpcGxlLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSHJMaW5lQ29tcG9uZW50IH0gZnJvbSAnLi4vaHItbGluZS9oci1saW5lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXN0ZXJDb250cm9sU2VydmljZSB9IGZyb20gJy4uL21hc3Rlci1jb250cm9sLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWFzdGVyU2VydmljZSB9IGZyb20gJy4uL21hc3Rlci5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVQcmV2aWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vZmlsZS1wcmV2aWV3L2ZpbGUtcHJldmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItbWVkaWFsLXF1ZXN0aW9ucycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIC8vIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgVGV4dGJveENvbXBvbmVudCxcbiAgICBSYWRpb0NvbXBvbmVudCxcbiAgICBDaGVja2JveENvbXBvbmVudCxcbiAgICBTZWxlY3RDb21wb25lbnQsXG4gICAgRG9iQ29tcG9uZW50LFxuICAgIFVwbG9hZENvbXBvbmVudCxcbiAgICBNdWx0aXBsZVNlbGVjdENvbXBvbmVudCxcbiAgICBHb29nbGVNYXBzTW9kdWxlLFxuICAgIEhyTGluZUNvbXBvbmVudCxcbiAgICBGaWxlUHJldmlld0NvbXBvbmVudFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9tZWRpYWwtcXVlc3Rpb25zLmNvbXBvbmVudC5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBNZWRpYWxRdWVzdGlvbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBAT3V0cHV0KCkgcXVlc3Rpb25zVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgY2x1c3RlcklkIDogYW55ID0gaW5wdXQ8YW55PigpOyAvLyBub24gbWFuZGF0b3J5IGNsdXN0ZXIgaWRcbiAgQElucHV0KCkgdHJpZ2dlclZhbGlkYXRpb24/OiBTdWJqZWN0PHZvaWQ+O1xuICBtZWRpYWxRdWVzdGlvblJlc3BvbnNlID0gaW5wdXQ8YW55PigpO1xuICBwZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlIDogYW55ID0gaW5wdXQ8YW55PigpO1xuICBkZWZhdWx0VmFsdWVzIDogYW55ID0gaW5wdXQ8YW55PigpO1xuICBwZXJzb25UeXBlOiBhbnkgPSBpbnB1dDxhbnk+KCk7XG4gIHBlcnNvblV3SWQgOiBhbnkgPSBcIlwiO1xuICBpc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGUgOiBhbnkgPSBudWxsO1xuICBtZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UgOiBhbnkgPSB7fTtcbiAgQFZpZXdDaGlsZCgnYWRkcmVzc0lucHV0JykgYWRkcmVzc0lucHV0ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcbiAgcHJpdmF0ZSBhdXRvY29tcGxldGUhOiBnb29nbGUubWFwcy5wbGFjZXMuQXV0b2NvbXBsZXRlO1xuICBzYXZlUXVlc3Rpb25SZXF1ZXN0TGE6IGFueSA9IFtdO1xuICBzYXZlUXVlc3Rpb25SZXF1ZXN0UGg6IGFueSA9IFtdO1xuICBmaWVsZDogYW55ID0gaW5wdXQucmVxdWlyZWQ8YW55PigpO1xuICBxdWVzdGlvbkxpc3Q6IGFueSA9IFtdO1xuICBjdXJyZW50Q29vcmRpbmF0ZXM6IGFueSA9IHt9O1xuICBwZXJzb25Vd1Jlc3BvbnNlT2JqOiBhbnkgPSBbXTtcbiAgY2VudGVyOiBnb29nbGUubWFwcy5MYXRMbmdMaXRlcmFsID0geyBsYXQ6IDQwLjczMDYxLCBsbmc6IC03My45MzUyNDIgfTtcbiAgbGF0aXR1ZGU6IGFueTtcbiAgbG9uZ2l0dWRlOiBhbnk7XG4gIHpvb206IGFueTtcbiAgbWFya2VyOiBhbnkgPSB7fTtcblxuXG4gIHBlcnNvblV3QW5zd2VyczogYW55ID0ge1xuICAgIG1lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0OiAnRkVFVCcsXG4gICAgbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0OiAwLFxuICAgIG1lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dDogMCxcbiAgICBtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQ6IDAsXG4gIH07XG4gIG1lZFF1ZXN0aW9uT2JqOiBhbnkgPSB7fTtcbiAgbGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3g6IGFueSA9IFtdO1xuICBtZWRpY2FsUXVlc3Rpb25zRmVldExpc3Q6IGFueSA9IFtdO1xuICBtZWRpY2FsUXVlc3Rpb25zSW5jaGVzTGlzdDogYW55ID0gW107XG4gIHF1ZXN0aW9uSGVhZGVyOiBhbnkgPSBbJ2VpYSBkZXRhaWxzJywgJ2FiaGEgZGV0YWlscycsICdwZXAgZGV0YWlscyddO1xuICBtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdFR5cGVzOiBhbnkgPSBbXG4gICAge1xuICAgICAgbGFiZWw6ICdDbScsXG4gICAgICB2YWx1ZTogJ0NNJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnRmVldCcsXG4gICAgICB2YWx1ZTogJ0ZFRVQnLFxuICAgIH0sXG4gIF07XG4gIHNob3dEcm9wZG93biA9IGZhbHNlO1xuICBhZGRyZXNzU3VnZ2VzdGlvbnM6IGFueVtdID0gW107XG4gIGhvdmVyZWRJbmRleCA9IC0xO1xuICBzZWFyY2hUaW1lb3V0OiBhbnk7XG4gIGhvcml6b250YWxMaW5lT2JqIDogYW55ID0ge1xuICAgICAgICAgICAgICAgICAgICBcImNvbnRyb2xTdHlsZVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImNvbnRyb2xUeXBlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJvcmRlckNvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJvcmRlcldpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJvcmRlclJhZGl1c1wiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250U2l6ZVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250V2VpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvbnRGYW1pbHlcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjYXJldENvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm51ZGdlRGlzcGxheUltYWdlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRyb3Bkb3duT3B0aW9uQmdDb2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkcm9wZG93bk9wdGlvbkNvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRyb3Bkb3duT3B0aW9uRm9udFdlaWdodFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ3aWR0aFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb2N1c0JvcmRlcldpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzQm9yZGVyQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNCYWNrZ3JvdW5kXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkJnQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Gb250V2VpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJMZWZ0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXNcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaG92ZXJCb3JkZXJDb2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJob3ZlckJvcmRlcldpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImhvdmVyQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGlzYWJsZUNvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpc2FibGVCYWNrZ3JvdW5kXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImVycm9yQm9yZGVyQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZXJyb3JCb3JkZXJXaWR0aFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlcnJvckNvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNyZWF0ZWREYXRlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInBhZGRpbmdcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWFyZ2luXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImlzTWFzdGVyQ3NzXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNvbnRyb2xNZXRhSWRcIjogXCJMSV9DT01fR0VOX0NUUkxfaHJMaW5lX2hyTGluZV9WMVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJib3JkZXJTdHlsZVwiOiBcInNvbGlkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImhlaWdodFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtaW5IZWlnaHRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWF4SGVpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1pbldpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1heFdpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNzc0NsYXNzXCI6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCJmaWVsZE5hbWVcIjogXCJockxpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJsYWJlbFwiOiBcInNvbGlkIGxpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJwbGFjZUhvbGRlclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBcIm1ldGFJZFwiOiBcIkxJX0NPTV9HRU5fQ1RSTF9ockxpbmVfaHJMaW5lX1YxXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiaXNWaXNpYmxlXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwiaXNEaXNhYmxlXCI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBcImRlZmF1bHRWYWx1ZVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBcInZhbGlkYXRvcnNcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJpc1JlcXVpcmVkXCI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJyZXF1aXJlZE1lc3NhZ2VcIjogXCJUaGlzIGZpZWxkIGNhbm5vdCBiZSBlbXB0eVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtaW5MZW5ndGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWluTGVuZ3RoTWVzc2FnZVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXhMZW5ndGhcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWF4TGVuZ3RoTWVzc2FnZVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJwYXR0ZXJuXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInBhdHRlcm5NZXNzYWdlXCI6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCJvcHRpb25zXCI6IFtdLFxuICAgICAgICAgICAgICAgICAgICBcImNzc0NsYXNzXCI6IFwiY29sLTEyXCIsXG4gICAgICAgICAgICAgICAgICAgIFwidmFsdWVcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgXCJzdHlsZVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBcImltYWdlVXJsXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIFwiY29uZmlnRGF0YVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImhyVGV4dFwiOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwibWV0YURhdGFPYmpcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgXCJpc1Nob3dMYWJlbFwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBcImlzTWFzdGVyQ29udHJvbFwiOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgXCJjb250cm9sVHlwZVwiOiBcImhyTGluZVwiXG4gICAgICAgICAgICAgICAgfTtcbiAgcHJldmlld0ZpbGU6IEZpbGUgfCBudWxsID0gbnVsbDtcbiAgY29uc3RydWN0b3IocHVibGljIG5nWm9uZTogTmdab25lLCBwdWJsaWMgbWFzdGVyU2VydmljZSA6IE1hc3RlclNlcnZpY2UpIHtcbiAgICBjb25zb2xlLmxvZygnbWVkaWFsUXVlc3Rpb25SZXNwb25zZWVlZWVlJywgdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKCkpO1xuICAgIGNvbnNvbGUubG9nKCdwZXJzb250eXBlJywgdGhpcy5wZXJzb25UeXBlKCkpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMudHJpZ2dlclZhbGlkYXRpb24pIHtcbiAgICB0aGlzLnRyaWdnZXJWYWxpZGF0aW9uLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnZhbGlkYXRlTWVkaWNhbFF1ZXN0aW9ucyh0cnVlKTtcbiAgICB9KTtcbiAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChcbiAgICAgICgoY2hhbmdlc1snbWVkaWFsUXVlc3Rpb25SZXNwb25zZSddKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGNoYW5nZXNbJ21lZGlhbFF1ZXN0aW9uUmVzcG9uc2UnXS5jdXJyZW50VmFsdWUpKSB8fFxuICAgICAgKChjaGFuZ2VzWydwcmVwYXJlUGVyc29uVXdRdWVzdGlvbnNPYmonXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShjaGFuZ2VzWydwcmVwYXJlUGVyc29uVXdRdWVzdGlvbnNPYmonXS5jdXJyZW50VmFsdWUpKVxuICAgICkge1xuICAgICAgaWYgKCdnZW9sb2NhdGlvbicgaW4gbmF2aWdhdG9yKSB7XG4gICAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oKHBvc2l0aW9uKSA9PiB7XG4gICAgICAgICAgdGhpcy5sYXRpdHVkZSA9IHBvc2l0aW9uLmNvb3Jkcy5sYXRpdHVkZTtcbiAgICAgICAgICB0aGlzLmxvbmdpdHVkZSA9IHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGU7XG4gICAgICAgICAgdGhpcy56b29tID0gMTU7XG4gICAgICAgICAgdGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMgPSB7XG4gICAgICAgICAgICBsYXQ6IHRoaXMubGF0aXR1ZGUsXG4gICAgICAgICAgICBsbmc6IHRoaXMubG9uZ2l0dWRlLFxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5jZW50ZXIgPSB7IC4uLnRoaXMuY3VycmVudENvb3JkaW5hdGVzIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5wcmVwYXJlUGVyc29uVXdRdWVzdGlvbnNPYmooKTtcbiAgICB9XG5cbiAgICBpZigoKGNoYW5nZXNbJ2RlZmF1bHRWYWx1ZXMnXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShjaGFuZ2VzWydkZWZhdWx0VmFsdWVzJ10uY3VycmVudFZhbHVlKSkpIHtcbiAgICAgIGlmKHR5cGVvZiB0aGlzLmRlZmF1bHRWYWx1ZXMoKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnMgPSB7Li4udGhpcy5wZXJzb25Vd0Fuc3dlcnMsIC4uLnRoaXMuZGVmYXVsdFZhbHVlcygpfTtcbiAgICAgICAgdGhpcy5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVBdXRvY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUhlaWdodFF1ZXN0aW9uSWRzKCk6IHZvaWQge1xuICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXSA9ICcnO1xuICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSA9ICcnO1xuICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSA9ICcnO1xuXG4gICAgLy8gdGhpcy5xdWVzdGlvbkxpc3QuZm9yRWFjaCgoc2VjdGlvbjogYW55KSA9PiB7XG4gICAgLy8gICBpZiAoc2VjdGlvbi5xdWVzdGlvbnMgJiYgQXJyYXkuaXNBcnJheShzZWN0aW9uLnF1ZXN0aW9ucykpIHtcbiAgICAvLyAgICAgc2VjdGlvbi5xdWVzdGlvbnMuZm9yRWFjaCgocXVlc3Rpb246IGFueSkgPT4ge1xuICAgIC8vICAgICAgIHN3aXRjaCAocXVlc3Rpb24uY2FtbXVuZGFRdWVzdGlvbkNvZGUpIHtcbiAgICAvLyAgICAgICAgIGNhc2UgJ1FIVCc6XG4gICAgLy8gICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXSA9IHF1ZXN0aW9uLnF1ZXN0aW9uSWQ7XG4gICAgLy8gICAgICAgICAgIGJyZWFrO1xuICAgIC8vICAgICAgICAgY2FzZSAnUUhURic6XG4gICAgLy8gICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSA9IHF1ZXN0aW9uLnF1ZXN0aW9uSWQ7XG4gICAgLy8gICAgICAgICAgIGJyZWFrO1xuICAgIC8vICAgICAgICAgY2FzZSAnUUhUSSc6XG4gICAgLy8gICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSA9IHF1ZXN0aW9uLnF1ZXN0aW9uSWQ7XG4gICAgLy8gICAgICAgICAgIGJyZWFrO1xuICAgIC8vICAgICAgIH1cbiAgICAvLyAgICAgfSk7XG4gICAgLy8gICB9XG4gICAgLy8gfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVBdXRvY29tcGxldGUoKTogdm9pZCB7XG4gICAgdGhpcy5hdXRvY29tcGxldGUgPSBuZXcgZ29vZ2xlLm1hcHMucGxhY2VzLkF1dG9jb21wbGV0ZShcbiAgICAgIHRoaXMuYWRkcmVzc0lucHV0Py5uYXRpdmVFbGVtZW50LFxuICAgICAge1xuICAgICAgICB0eXBlczogWydhZGRyZXNzJ10sXG4gICAgICAgIGNvbXBvbmVudFJlc3RyaWN0aW9uczogeyBjb3VudHJ5OiAnSU4nIH0sXG4gICAgICAgIGZpZWxkczogWydwbGFjZV9pZCcsICdnZW9tZXRyeScsICduYW1lJywgJ2Zvcm1hdHRlZF9hZGRyZXNzJ10sXG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuYXV0b2NvbXBsZXRlLmFkZExpc3RlbmVyKCdwbGFjZV9jaGFuZ2VkJywgKCkgPT4ge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5vblBsYWNlU2VsZWN0ZWQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvblBsYWNlU2VsZWN0ZWQoKTogdm9pZCB7XG4gICAgY29uc3QgcGxhY2UgPSB0aGlzLmF1dG9jb21wbGV0ZS5nZXRQbGFjZSgpO1xuXG4gICAgaWYgKCFwbGFjZS5nZW9tZXRyeSB8fCAhcGxhY2UuZ2VvbWV0cnkubG9jYXRpb24pIHtcbiAgICAgIGNvbnNvbGUubG9nKCdObyBkZXRhaWxzIGF2YWlsYWJsZSBmb3IgaW5wdXQ6ICcsIHBsYWNlLm5hbWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxvY2F0aW9uID0gcGxhY2UuZ2VvbWV0cnkubG9jYXRpb247XG4gICAgdGhpcy5jZW50ZXIgPSB7XG4gICAgICBsYXQ6IGxvY2F0aW9uLmxhdCgpLFxuICAgICAgbG5nOiBsb2NhdGlvbi5sbmcoKSxcbiAgICB9O1xuICAgIHRoaXMuY3VycmVudENvb3JkaW5hdGVzID0gdGhpcy5jZW50ZXI7XG5cbiAgICBpZiAocGxhY2UuZ2VvbWV0cnkudmlld3BvcnQpIHtcbiAgICAgIHRoaXMuem9vbSA9IDE1O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnpvb20gPSAxMztcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnU2VsZWN0ZWQgcGxhY2U6Jywge1xuICAgICAgbmFtZTogcGxhY2UubmFtZSxcbiAgICAgIGFkZHJlc3M6IHBsYWNlLmZvcm1hdHRlZF9hZGRyZXNzLFxuICAgICAgY29vcmRpbmF0ZXM6IHRoaXMuY2VudGVyLFxuICAgIH0pO1xuXG4gICAgdGhpcy5zdG9yZVNlbGVjdGVkQWRkcmVzcyhwbGFjZSk7XG4gIH1cblxuICBwcml2YXRlIHN0b3JlU2VsZWN0ZWRBZGRyZXNzKHBsYWNlOiBnb29nbGUubWFwcy5wbGFjZXMuUGxhY2VSZXN1bHQpOiB2b2lkIHtcbiAgICBjb25zdCBhZGRyZXNzRGF0YSA9IHtcbiAgICAgIHBsYWNlSWQ6IHBsYWNlLnBsYWNlX2lkLFxuICAgICAgbmFtZTogcGxhY2UubmFtZSxcbiAgICAgIGZvcm1hdHRlZEFkZHJlc3M6IHBsYWNlLmZvcm1hdHRlZF9hZGRyZXNzLFxuICAgICAgY29vcmRpbmF0ZXM6IHRoaXMuY2VudGVyLFxuICAgIH07XG4gIH1cblxuICBzZWFyY2hBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGdlb2NvZGVyID0gbmV3IGdvb2dsZS5tYXBzLkdlb2NvZGVyKCk7XG5cbiAgICBnZW9jb2Rlci5nZW9jb2RlKHsgYWRkcmVzczogYWRkcmVzcyB9LCAocmVzdWx0cywgc3RhdHVzKSA9PiB7XG4gICAgICBpZiAoc3RhdHVzID09PSAnT0snICYmIHJlc3VsdHMgJiYgcmVzdWx0c1swXSkge1xuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHJlc3VsdHNbMF0uZ2VvbWV0cnkubG9jYXRpb247XG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jZW50ZXIgPSB7XG4gICAgICAgICAgICBsYXQ6IGxvY2F0aW9uLmxhdCgpLFxuICAgICAgICAgICAgbG5nOiBsb2NhdGlvbi5sbmcoKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuY3VycmVudENvb3JkaW5hdGVzID0gdGhpcy5jZW50ZXI7XG4gICAgICAgICAgdGhpcy56b29tID0gMTU7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgJ0dlb2NvZGUgd2FzIG5vdCBzdWNjZXNzZnVsIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbjogJyArIHN0YXR1c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25BZGRyZXNzSW5wdXRLZXl1cChldmVudDogYW55KSB7XG4gICAgY29uc3QgcXVlcnkgPSBldmVudC50YXJnZXQudmFsdWU7XG5cbiAgICAvLyBDbGVhciBwcmV2aW91cyB0aW1lb3V0XG4gICAgaWYgKHRoaXMuc2VhcmNoVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2VhcmNoVGltZW91dCk7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGFycm93IGtleSBuYXZpZ2F0aW9uXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIHRoaXMuaG92ZXJlZEluZGV4ID0gTWF0aC5taW4oXG4gICAgICAgIHRoaXMuaG92ZXJlZEluZGV4ICsgMSxcbiAgICAgICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnMubGVuZ3RoIC0gMVxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICB0aGlzLmhvdmVyZWRJbmRleCA9IE1hdGgubWF4KHRoaXMuaG92ZXJlZEluZGV4IC0gMSwgLTEpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaG92ZXJlZEluZGV4ID49IDAgJiZcbiAgICAgICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnNbdGhpcy5ob3ZlcmVkSW5kZXhdXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zZWxlY3RBZGRyZXNzKHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zW3RoaXMuaG92ZXJlZEluZGV4XSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICB0aGlzLnNob3dEcm9wZG93biA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChxdWVyeS5sZW5ndGggPCAyKSB7XG4gICAgICB0aGlzLmFkZHJlc3NTdWdnZXN0aW9ucyA9IFtdO1xuICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlYXJjaFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2VhcmNoQWRkcmVzc2VzKHF1ZXJ5KTtcbiAgICB9LCAzMDApO1xuICB9XG5cbiAgc2VhcmNoQWRkcmVzc2VzKHF1ZXJ5OiBzdHJpbmcpIHtcbiAgICAvLyBSZXBsYWNlIHRoaXMgd2l0aCB5b3VyIGFjdHVhbCBhZGRyZXNzIHNlYXJjaCBBUEkgY2FsbFxuICAgIC8vIEZvciBleGFtcGxlLCB1c2luZyBHb29nbGUgUGxhY2VzIEFQSTpcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBuZXcgZ29vZ2xlLm1hcHMucGxhY2VzLkF1dG9jb21wbGV0ZVNlcnZpY2UoKTtcbiAgICBzZXJ2aWNlLmdldFBsYWNlUHJlZGljdGlvbnMoXG4gICAgICB7XG4gICAgICAgIGlucHV0OiBxdWVyeSxcbiAgICAgICAgdHlwZXM6IFsnYWRkcmVzcyddLFxuICAgICAgfSxcbiAgICAgIChwcmVkaWN0aW9ucywgc3RhdHVzKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzdGF0dXMgPT09IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZXNTZXJ2aWNlU3RhdHVzLk9LICYmXG4gICAgICAgICAgcHJlZGljdGlvbnNcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnMgPSBwcmVkaWN0aW9ucy5tYXAoKHByZWRpY3Rpb24pID0+ICh7XG4gICAgICAgICAgICBwbGFjZV9pZDogcHJlZGljdGlvbi5wbGFjZV9pZCxcbiAgICAgICAgICAgIG1haW5fdGV4dDogcHJlZGljdGlvbi5zdHJ1Y3R1cmVkX2Zvcm1hdHRpbmcubWFpbl90ZXh0LFxuICAgICAgICAgICAgc2Vjb25kYXJ5X3RleHQ6IHByZWRpY3Rpb24uc3RydWN0dXJlZF9mb3JtYXR0aW5nLnNlY29uZGFyeV90ZXh0LFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHByZWRpY3Rpb24uZGVzY3JpcHRpb24sXG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmhvdmVyZWRJbmRleCA9IC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zID0gW107XG4gICAgICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzZWxlY3RBZGRyZXNzKHN1Z2dlc3Rpb246IGFueSkge1xuICAgIGNvbnN0IGFkZHJlc3NJbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAnI2FkZHJlc3NJbnB1dCdcbiAgICApIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgaWYgKGFkZHJlc3NJbnB1dCkge1xuICAgICAgYWRkcmVzc0lucHV0LnZhbHVlID0gc3VnZ2VzdGlvbi5kZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gbmV3IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZXNTZXJ2aWNlKFxuICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICApO1xuICAgIHNlcnZpY2UuZ2V0RGV0YWlscyhcbiAgICAgIHtcbiAgICAgICAgcGxhY2VJZDogc3VnZ2VzdGlvbi5wbGFjZV9pZCxcbiAgICAgICAgZmllbGRzOiBbJ2dlb21ldHJ5JywgJ2Zvcm1hdHRlZF9hZGRyZXNzJ10sXG4gICAgICB9LFxuICAgICAgKHBsYWNlLCBzdGF0dXMpID0+IHtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gZ29vZ2xlLm1hcHMucGxhY2VzLlBsYWNlc1NlcnZpY2VTdGF0dXMuT0sgJiYgcGxhY2UpIHtcbiAgICAgICAgICBjb25zdCBsYXQgPSBwbGFjZS5nZW9tZXRyeT8ubG9jYXRpb24/LmxhdCgpO1xuICAgICAgICAgIGNvbnN0IGxuZyA9IHBsYWNlLmdlb21ldHJ5Py5sb2NhdGlvbj8ubG5nKCk7XG5cbiAgICAgICAgICBpZiAobGF0ICE9PSB1bmRlZmluZWQgJiYgbG5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMubG9uZ2l0dWRlID0gbG5nO1xuICAgICAgICAgICAgdGhpcy5sYXRpdHVkZSA9IGxhdDtcblxuICAgICAgICAgICAgdGhpcy5jZW50ZXIgPSB7IGxhdCwgbG5nIH07XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDb29yZGluYXRlcyA9IHRoaXMuY2VudGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnNob3dEcm9wZG93biA9IGZhbHNlO1xuICAgIHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zID0gW107XG4gIH1cblxuICBvbklucHV0Qmx1cigpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gZmFsc2U7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG4gIGZpbmRNZWRpY2FsUXVlc3Rpb25zSW5PcGVuUXVvdGUoYXJyYXlPZk9iaiA6IGFueSkge1xuICAgIGlmKGFycmF5T2ZPYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdNZWRpQ25kdG4nIHx8IGFycmF5T2ZPYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICAnTGlmZU1lZGlDbmR0bicpIHtcbiAgICAgIHRoaXMuaXNNZWRpY2FsU3ViUXVlc3Rpb25zQXZhaWxhYmxlID0gYXJyYXlPZk9iajtcbiAgICB9XG4gICAgaWYodGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuaXNNZWRpY2FsU3ViUXVlc3Rpb25zQXZhaWxhYmxlKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGFycmF5T2ZPYmpbJ3BlcnNvblVXQWN0aXZpdHlSZXNwb25zZUVudGl0eSddKSkge1xuICAgICAgYXJyYXlPZk9ialsncGVyc29uVVdBY3Rpdml0eVJlc3BvbnNlRW50aXR5J10uZm9yRWFjaCgoc2luZ2xlU3ViQXJyYXkgOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5maW5kTWVkaWNhbFF1ZXN0aW9uc0luT3BlblF1b3RlKHNpbmdsZVN1YkFycmF5KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG1hcEFuc3dlcnNGb3JPcGVuUXVvdGUoKSB7XG4gICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXT8ucXVlc3Rpb25MaXN0KSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdPy5xdWVzdGlvbkxpc3RbMF0/LnBlcnNvblVXZGV0YWlsc0xpc3QpKSB7XG4gICAgICBsZXQgYXJyYXlPZktleXMgOiBhbnkgPSBPYmplY3Qua2V5cyh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXT8ucXVlc3Rpb25MaXN0WzBdPy5wZXJzb25VV2RldGFpbHNMaXN0KTtcbiAgICAgIGFycmF5T2ZLZXlzLmZvckVhY2goKHNpbmdsZUtleSA6IGFueSwgc2luZ2xlS2V5TGVuZ3RoIDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdWydxdWVzdGlvbkxpc3QnXVswXVsncGVyc29uVVdkZXRhaWxzTGlzdCddW3NpbmdsZUtleV0pKSB7XG4gICAgICAgICAgdGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF1bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J11bc2luZ2xlS2V5XS5mb3JFYWNoKChzaW5nbGVBbnN3ZXJPYmogOiBhbnksIHNpbmdsZUFuc3dlck9iakxlbmd0aCA6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQZXJzb25Vd0Fuc3dlcnMoc2luZ2xlQW5zd2VyT2JqKTtcbiAgICAgICAgICAgIGlmKHNpbmdsZUtleUxlbmd0aCA9PT0gKGFycmF5T2ZLZXlzLmxlbmd0aCAtIDEpICYmIHNpbmdsZUFuc3dlck9iakxlbmd0aCA9PT0gKHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdWydxdWVzdGlvbkxpc3QnXVswXVsncGVyc29uVVdkZXRhaWxzTGlzdCddW3NpbmdsZUtleV0ubGVuZ3RoIC0gMSkpIHtcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIH1cbiAgfVxuXG4gIHByZXBhcmVQZXJzb25Vd1F1ZXN0aW9uc09iaigpIHtcbiAgICB0aGlzLnF1ZXN0aW9uTGlzdCA9IFtdO1xuICAgIGxldCBkYXRhOiBhbnkgPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKTtcbiAgICB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94ID0gW107XG5cbiAgICBsZXQgaXNEaXNhYmxlIDogYW55ID0gZmFsc2U7XG4gICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdpc0Rpc2FibGVNZWRpY2FsUXVlc3Rpb25zJykpICkge1xuICAgICAgbGV0IGlzRGlzYWJsZU1lZGljYWxRdWVzdGlvbnNpblVpICA6IGFueSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2lzRGlzYWJsZU1lZGljYWxRdWVzdGlvbnMnKTtcbiAgICAgIGlzRGlzYWJsZSA9IEpTT04ucGFyc2UoaXNEaXNhYmxlTWVkaWNhbFF1ZXN0aW9uc2luVWkpID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRhdGFbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10pKSB7XG4gICAgICBsZXQgcGVyc29uVXdJZEFycmF5OiBhbnkgPSBbXTtcbiAgICAgIGRhdGFbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmo6IGFueSkgPT4ge1xuICAgICAgICBwZXJzb25Vd0lkQXJyYXkucHVzaChzaW5nbGVRdWVzdGlvbk9ialsncGVyc29uVVdJZCddKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoXG4gICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZGF0YSkgJiZcbiAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddKVxuICAgICAgKSB7XG5cbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZGF0YVsncXVlc3Rpb25zUmVzcG9uc2UnXSkpIHtcbiAgICAgICAgICBsZXQgZGlzdGluY3RTdGVwczogYW55ID0gW107XG4gICAgICAgICAgZGF0YVsncXVlc3Rpb25zUmVzcG9uc2UnXS5mb3JFYWNoKChzaW5nbGVQZXJzb25PYmplY3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0lkID0gc2luZ2xlUGVyc29uT2JqZWN0WydwZXJzb25VV0lkJ10udG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVBlcnNvbk9iamVjdFsncXVlc3Rpb25MaXN0J10pKSB7XG4gICAgICAgICAgICAgIHNpbmdsZVBlcnNvbk9iamVjdFsncXVlc3Rpb25MaXN0J10uZm9yRWFjaChcbiAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHNpbmdsZVF1ZXN0aW9uWyd0aXRsZSddID09PSAnTWVkaWNhbCBEZXRhaWxzJykge1xuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UZXh0J10gPSBzaW5nbGVRdWVzdGlvbltcbiAgICAgICAgICAgICAgICAgICAgICAncXVlc3Rpb25UZXh0J1xuICAgICAgICAgICAgICAgICAgICBdLnJlcGxhY2UoL1xcXFxuL2csICdcXG4nKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSA9XG4gICAgICAgICAgICAgICAgICAgIGRhdGFbJ2RvbWFpblZhbHVlcyddW3NpbmdsZVF1ZXN0aW9uWydkb21haW5OYW1lJ11dO1xuXG4gICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZmllbGQnXSA9IHRoaXMuZ2V0RmllbGQoc2luZ2xlUXVlc3Rpb24pO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoc2luZ2xlUXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdQQU4nKSB7XG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWyd2YWxpZGF0aW9ucyddID1cbiAgICAgICAgICAgICAgICAgICAgICAne1wiVHlwZVwiOlwiQWxwaGFOdW1lcmljXCIsXCJNaW5WYWx1ZVwiOlwiMTBcIixcIk1heFZhbHVlXCI6XCIxMFwiLFwicmVnZXhQYXR0ZXJuXCI6XCIvXihbYS16QS1aXSl7NX0oWzAtOV0pezR9KFthLXpBLVpdKXsxfT8kL1wifSc7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAvLyBpZiAoc2luZ2xlUXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdGdGNhQ250Y0RldGxzJykge1xuICAgICAgICAgICAgICAgICAgLy8gICBzaW5nbGVRdWVzdGlvblsndmFsaWRhdGlvbnMnXSA9ICd7XCJjdXN0b21WYWxpZGF0aW9uXCI6W3tcImNvdW50cnlcIjpcIklOXCIsXCJNaW5WYWx1ZVwiOlwiMTBcIixcIk1heFZhbHVlXCI6XCIxMFwiLFwicmVnZXhQYXR0ZXJuXCI6XCIoKF5bNi05XSl7MX0oWzAtOV0pezl9JClcIn0se1wiY291bnRyeVwiOlwiT1RIRVJcIixcIk1pblZhbHVlXCI6XCI1XCIsXCJNYXhWYWx1ZVwiOlwiMTRcIn1dfSc7XG4gICAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJlxuICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ11cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10uZm9yRWFjaChcbiAgICAgICAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9iajogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dFF1ZXN0aW9uT2JqZWN0OiBhbnkgPSBzaW5nbGVQZXJzb25PYmplY3RbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdxdWVzdGlvbkxpc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICBdLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG9iamVjdDogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFsncXVlc3Rpb25JZCddID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmpbJ25leHRRdWVzdGlvbklkJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFF1ZXN0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFF1ZXN0aW9uT2JqZWN0WzBdWydhbnN3ZXJlZFZhbHVlJ10gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmpbJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmIChzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsnZG9tYWluVmFsdWVzJ11bc2luZ2xlUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXV1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIGRhdGFbJ2RvbWFpblZhbHVlcyddW1xuICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXVxuICAgICAgICAgICAgICAgICAgICAgIF0uZm9yRWFjaCgoc2luZ2xlRG9tYWluVmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3gucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXG4gICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKCFkaXN0aW5jdFN0ZXBzLmluY2x1ZGVzKHNpbmdsZVF1ZXN0aW9uWydzdGVwJ10pKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMucHVzaChzaW5nbGVRdWVzdGlvblsnc3RlcCddKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXS5mb3JFYWNoKChxdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgcXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0lNQUdFIFRFWFQnKSB7XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvblsncXVlc3Rpb25UZXh0J10gPSBxdWVzdGlvbltcbiAgICAgICAgICAgICAgICAgICAgJ3F1ZXN0aW9uVGV4dCdcbiAgICAgICAgICAgICAgICAgIF0ucmVwbGFjZUFsbCgnXFxcXG4nLCAnPGJyPicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZGljYWxRdWVzdGlvbnNGZWV0TGlzdCA9IHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVEYnXSA9IHF1ZXN0aW9uO1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhURiddWydmaWVsZCddWydpc1Nob3dMYWJlbCddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFRGJ11bJ2ZpZWxkJ11bJ2NvbnRyb2xTdHlsZSddID0ge1xuICAgICAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogJ3NlbGVjdCcsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMTZweCcsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6ICc0MDAnLFxuICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiAnTXVsaXNoJyxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJyNGRkZGRkYnLFxuICAgICAgICAgICAgICAgICAgICBjYXJldENvbG9yOiAnI2ZmYmIwMCcsXG4gICAgICAgICAgICAgICAgICAgIG51ZGdlRGlzcGxheUltYWdlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkJnQ29sb3I6ICcjRkZGRkZGJyxcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25Db2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6ICc0MDAnLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JhY2tncm91bmQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJnQ29sb3I6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Db2xvcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJMZWZ0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyUmFkaXVzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBob3ZlckJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUNvbG9yOiAnI0VDRUNFQycsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVCYWNrZ3JvdW5kOiAnI0VDRUNFQycsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQm9yZGVyQ29sb3I6ICcjRUUwMDAwJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkRGF0ZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBpc01hc3RlckNzczogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbE1ldGFJZDpcbiAgICAgICAgICAgICAgICAgICAgICAnTElfQ09NX0dFTl9DVFJMX3NlbGVjdF9kb3dubG9hZERvY3VtZW50c19WMScsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclN0eWxlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUSScpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWNhbFF1ZXN0aW9uc0luY2hlc0xpc3QgPSBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ107XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFRJJ10gPSBxdWVzdGlvbjtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVEknXVsnZmllbGQnXVsnaXNTaG93TGFiZWwnXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhUSSddWydmaWVsZCddWydjb250cm9sU3R5bGUnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbFR5cGU6ICdzZWxlY3QnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogJzE2cHgnLFxuICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiAnNDAwJyxcbiAgICAgICAgICAgICAgICAgICAgZm9udEZhbWlseTogJ011bGlzaCcsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICcjRkZGRkZGJyxcbiAgICAgICAgICAgICAgICAgICAgY2FyZXRDb2xvcjogJyNmZmJiMDAnLFxuICAgICAgICAgICAgICAgICAgICBudWRnZURpc3BsYXlJbWFnZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25CZ0NvbG9yOiAnI0ZGRkZGRicsXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiAnNDAwJyxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCYWNrZ3JvdW5kOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0NvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25CZ0NvbG9yOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQ29sb3I6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyTGVmdDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlclJhZGl1czogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICAgICAgICAgICAgICBob3ZlckJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBob3ZlckNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVDb2xvcjogJyNFQ0VDRUMnLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQmFja2dyb3VuZDogJyNFQ0VDRUMnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckJvcmRlckNvbG9yOiAnI0VFMDAwMCcsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlZERhdGU6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgaXNNYXN0ZXJDc3M6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xNZXRhSWQ6XG4gICAgICAgICAgICAgICAgICAgICAgJ0xJX0NPTV9HRU5fQ1RSTF9zZWxlY3RfZG93bmxvYWREb2N1bWVudHNfVjEnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJTdHlsZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBjc3NDbGFzczogbnVsbCxcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCcpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWNhbFF1ZXN0aW9uc0luY2hlc0xpc3QgPSBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ107XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFQnXSA9IHF1ZXN0aW9uO1xuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhUJ11bJ2ZpZWxkJ11bJ2lzU2hvd0xhYmVsJ10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVCddWydmaWVsZCddWydjb250cm9sU3R5bGUnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbFR5cGU6ICdGUkVFVEVYVCcsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMTZweCcsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6ICc0MDAnLFxuICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiAnTXVsaXNoJyxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJyNGRkZGRkYnLFxuICAgICAgICAgICAgICAgICAgICBjYXJldENvbG9yOiAnI2ZmYmIwMCcsXG4gICAgICAgICAgICAgICAgICAgIG51ZGdlRGlzcGxheUltYWdlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkJnQ29sb3I6ICcjRkZGRkZGJyxcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25Db2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6ICc0MDAnLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JhY2tncm91bmQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJnQ29sb3I6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Db2xvcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJMZWZ0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyUmFkaXVzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBob3ZlckJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQ29sb3I6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUNvbG9yOiAnI0VDRUNFQycsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVCYWNrZ3JvdW5kOiAnI0VDRUNFQycsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQm9yZGVyQ29sb3I6ICcjRUUwMDAwJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkRGF0ZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBpc01hc3RlckNzczogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbE1ldGFJZDpcbiAgICAgICAgICAgICAgICAgICAgICAnTElfQ09NX0dFTl9DVFJMX3NlbGVjdF9kb3dubG9hZERvY3VtZW50c19WMScsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclN0eWxlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnREVDTEFSQVRJT04nKSB7XG4gICAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdyZWN2U2Z0Q29weScpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqZWN0Wydyb2xlJ11dW10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddID0gW107XG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICBkb21haW5JbnRlcm5hbFZhbHVlOiBxdWVzdGlvblsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgICAgICAgIGRvbWFpblVpVmFsdWU6ICdOJyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ10gPSBbXTtcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZG9tYWluSW50ZXJuYWxWYWx1ZTogcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICAgICAgZG9tYWluVWlWYWx1ZTogJ1knLFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnaGFyZENvcHlMYW5nJykge1xuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID0gJ0hBUkQgQ09QWSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBzaW5nbGVQZXJzb25PYmplY3RbJ3F1ZXN0aW9uTGlzdCddLnNvcnQoXG4gICAgICAgICAgICAgICAgKGE6IGFueSwgYjogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgYVsnc3RlcCddIC0gYlsnc3RlcCddIHx8IGFbJ2Rpc3BsYXlPcmRlciddIC0gYlsnZGlzcGxheU9yZGVyJ11cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHF1ZXN0aW9uc0xpc3RGb3JMQTogYW55ID0gW107XG4gICAgICAgICAgICBkaXN0aW5jdFN0ZXBzLmZvckVhY2goKHN0ZXBzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkT2JqOiBhbnkgPSBzaW5nbGVQZXJzb25PYmplY3RbJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ3N0ZXAnXSA9PT0gc3RlcHNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge1xuICAgICAgICAgICAgICAgIHN0ZXA6IHN0ZXBzLFxuICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVBlcnNvbk9iamVjdFsncGVyc29uVVdJZCddLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25zOiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKVxuICAgICAgICAgICAgICAgICAgPyBmaWx0ZXJlZE9ialxuICAgICAgICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgICAgICAgICBzZWN0aW9uTmFtZTogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iailcbiAgICAgICAgICAgICAgICAgID8gZmlsdGVyZWRPYmpbMF1bJ3RpdGxlJ11cbiAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgaXNNZWRpY2FsU3ViUXVlc3Rpb246IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNob3dTZWN0aW9uOiB0cnVlLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iaikpIHtcbiAgICAgICAgICAgICAgICAvLyBIYXJkIENvcHkgYW5kIE1hcCBxdWVzdGlvblxuICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZEhhcmRDb3B5UXVlc3Rpb246IGFueSA9IGZpbHRlcmVkT2JqLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ3JlY3ZTZnRDb3B5J1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRIYXJkQ29weVF1ZXN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgb2JqWydxdWVzdGlvbnMnXS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25UeXBlOiAnTUFQJyxcbiAgICAgICAgICAgICAgICAgICAgaXNTaG93UXVlc3Rpb25JblVJOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvblJlbGF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25JZDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkSGFyZENvcHlRdWVzdGlvblswXVsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uQW5zd2VyOiAnWScsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBpZiBOUkkgdGhlbiBwYXNzcG9ydCB1cGxvYWQgaXMgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICBsZXQgZmlsdGVyZWROYXRpb25hbGl0eVF1ZXN0aW9uOiBhbnkgPSBmaWx0ZXJlZE9iai5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdOYXRpb25hbGl0eSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkTmF0aW9uYWxpdHlRdWVzdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVBlcnNvbk9iamVjdFsncXVlc3Rpb25MaXN0J10ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uVHlwZTogJ1BBU1NQT1JUX1VQTE9BRCcsXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsUXVlc3Rpb246ICdOJyxcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25UZXh0OiAnUGFzc3BvcnQgRGV0YWlscyAnLFxuICAgICAgICAgICAgICAgICAgICBpc1Nob3dRdWVzdGlvbkluVUk6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uUmVsYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbklkOlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWROYXRpb25hbGl0eVF1ZXN0aW9uWzBdWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25BbnN3ZXI6ICdmb3Jnbk5hdGlvbmFsJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgb2JqWydxdWVzdGlvbnMnXS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25UeXBlOiAnUEFTU1BPUlRfVVBMT0FEJyxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxRdWVzdGlvbjogJ04nLFxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblRleHQ6ICdQYXNzcG9ydCBEZXRhaWxzICcsXG4gICAgICAgICAgICAgICAgICAgIGlzU2hvd1F1ZXN0aW9uSW5VSTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25SZWxhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uSWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZE5hdGlvbmFsaXR5UXVlc3Rpb25bMF1bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbkFuc3dlcjogJ2ZvcmduTmF0aW9uYWwnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHF1ZXN0aW9uc0xpc3RGb3JMQS5wdXNoKG9iaik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIGxldCBsaWZlQXNzdXJlZE9iamVjdEluZGV4SW5NYXN0ZXI6IGFueSA9IHRoaXMucXVlc3Rpb25MaXN0LmZpbmRJbmRleCgoc2luZ2xlT2JqOiBhbnkpID0+IHNpbmdsZU9ialsncm9sZSddID09PSBzaW5nbGVQZXJzb25PYmplY3RbJ3JvbGUnXSk7XG4gICAgICAgICAgICAvLyBpZiAobGlmZUFzc3VyZWRPYmplY3RJbmRleEluTWFzdGVyICE9PSB0aGlzLm51bWJlck1pbnVzT25lKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uTGlzdCA9IHF1ZXN0aW9uc0xpc3RGb3JMQTtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZUhlaWdodFF1ZXN0aW9uSWRzKCk7XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqID0gZGF0YVsncXVlc3Rpb25zUmVzcG9uc2UnXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKCkpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF0pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF0/LnF1ZXN0aW9uTGlzdCkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXT8ucXVlc3Rpb25MaXN0WzBdPy5wZXJzb25VV2RldGFpbHNMaXN0KSApIHtcbiAgICAgICAgICBsZXQgaXNTdWJRdWVzdGlvbkV4aXN0czogYW55ID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5pc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGUgPSBudWxsO1xuICAgICAgICAgIGxldCBhcnJheU9mS2V5cyA6IGFueSA9IE9iamVjdC5rZXlzKHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdPy5xdWVzdGlvbkxpc3RbMF0/LnBlcnNvblVXZGV0YWlsc0xpc3QpO1xuICAgICAgICAgIGFycmF5T2ZLZXlzLmZvckVhY2goKHNpbmdsZUtleSA6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF1bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J11bc2luZ2xlS2V5XSkpIHtcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF1bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J11bc2luZ2xlS2V5XS5mb3JFYWNoKChzaW5nbGVBbnN3ZXJPYmogOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbmRNZWRpY2FsUXVlc3Rpb25zSW5PcGVuUXVvdGUoc2luZ2xlQW5zd2VyT2JqKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuaXNNZWRpY2FsU3ViUXVlc3Rpb25zQXZhaWxhYmxlKSkge1xuICAgICAgICAgICAgdGhpcy5tYXN0ZXJTZXJ2aWNlXG4gICAgICAgICAgICAgIC5nZXRTdWJRdWVzdGlvbnMoXG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZCgpPy5jb25maWdEYXRhLFxuICAgICAgICAgICAgICAgIHRoaXMuaXNNZWRpY2FsU3ViUXVlc3Rpb25zQXZhaWxhYmxlWydhbnN3ZXInXSxcbiAgICAgICAgICAgICAgICB0aGlzLmlzTWVkaWNhbFN1YlF1ZXN0aW9uc0F2YWlsYWJsZVsncGVyc29uVVdJZCddXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAoc3ViUXVlc3Rpb25SZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBsZXQgZGlzdGluY3RTdGVwczogYW55ID0gW107XG4gICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzdWJRdWVzdGlvblJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblJlc3BvbnNlLmZvckVhY2goKHN1YlF1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10gPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ2RvbWFpblZhbHVlcyddW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnZG9tYWluTmFtZSddXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2ZpZWxkJ10gPSB0aGlzLmdldEZpZWxkKHN1YlF1ZXN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRpc3RpbmN0U3RlcHMuaW5jbHVkZXMoc3ViUXVlc3Rpb25bJ2NsdXN0ZXJJZCddKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5wdXNoKHN1YlF1ZXN0aW9uWydjbHVzdGVySWQnXSk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblJlc3BvbnNlLnNvcnQoXG4gICAgICAgICAgICAgICAgICAgICAgKGE6IGFueSwgYjogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgYVsnc3RlcCddIC0gYlsnc3RlcCddIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBhWydkaXNwbGF5T3JkZXInXSAtIGJbJ2Rpc3BsYXlPcmRlciddXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMuZm9yRWFjaCgoc3RlcHM6IGFueSwgaW5kOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgZmlsdGVyZWRPYmo6IGFueSA9IHN1YlF1ZXN0aW9uUmVzcG9uc2UuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydjbHVzdGVySWQnXSA9PT0gc3RlcHNcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXA6IDEwMDAgKyBpbmQsXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbnM6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gZmlsdGVyZWRPYmpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25OYW1lOiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkT2JqWzBdWyd0aXRsZSddXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc01lZGljYWxTdWJRdWVzdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dTZWN0aW9uOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGVbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BlcnNvblVXSWQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0udG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGxldCBMYUluZGV4OiBhbnkgPSB0aGlzLnBlcnNvblV3TWFzdGVyT2JqLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIChzaW5nbGU6IGFueSkgPT4gc2luZ2xlWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvblsncm9sZSddXG4gICAgICAgICAgICAgICAgICAgICAgLy8gKTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uTGlzdC5wdXNoKG9iaik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSA9IHN1YlF1ZXN0aW9uUmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgIC8vIGxldCBsYUluZGV4OiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KChzaW5nbGVQZXJzb25PYmo6IGFueSkgPT4gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvblsncm9sZSddKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bXG4gICAgICAgICAgICAgICAgICAgICAgJ3F1ZXN0aW9uTGlzdCdcbiAgICAgICAgICAgICAgICAgICAgXSA9IHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydxdWVzdGlvbnNSZXNwb25zZSddWzBdW1xuICAgICAgICAgICAgICAgICAgICAgICdxdWVzdGlvbkxpc3QnXG4gICAgICAgICAgICAgICAgICAgIF0uY29uY2F0KHRoaXMubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcEFuc3dlcnNGb3JPcGVuUXVvdGUoKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwQW5zd2Vyc0Zvck9wZW5RdW90ZSgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLm1hcEFuc3dlcnNGb3JPcGVuUXVvdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWFwQW5zd2Vyc0Zvck9wZW5RdW90ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKS5mb3JFYWNoKChzaW5nbGVQZXJzb246IGFueSkgPT4ge1xuICAgICAgICAgIC8vICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUGVyc29uWydxdWVzdGlvbkxpc3QnXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVQZXJzb25bJ3F1ZXN0aW9uTGlzdCddWzBdKSkge1xuICAgICAgICAgIC8vICAgICBsZXQgYXJyYXlPZktleXMgPSBPYmplY3Qua2V5cyhzaW5nbGVQZXJzb25bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J10pO1xuICAgICAgICAgIC8vICAgICBpZiAoYXJyYXlPZktleXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIC8vICAgICAgIGFycmF5T2ZLZXlzLmZvckVhY2goKHNpbmdsZUtleSkgPT4ge1xuICAgICAgICAgIC8vICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUGVyc29uWydxdWVzdGlvbkxpc3QnXVswXVsncGVyc29uVVdkZXRhaWxzTGlzdCddW3NpbmdsZUtleV0pKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgIHNpbmdsZVBlcnNvblsncXVlc3Rpb25MaXN0J11bMF1bJ3BlcnNvblVXZGV0YWlsc0xpc3QnXVtzaW5nbGVLZXldLmZvckVhY2goKGFuc3dlck9iajogYW55KSA9PiB7XG5cbiAgICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0gPSBhbnN3ZXJPYmouYW5zd2VyO1xuXG5cbiAgICAgICAgICAvLyAgICAgICAgICAgICBsZXQgZmlsdGVyZWRRdWVzdGlvbjogYW55ID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT0gYW5zd2VyT2JqWydxdWVzdGlvbklkJ10pO1xuICAgICAgICAgIC8vICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb24pICYmIGZpbHRlcmVkUXVlc3Rpb25bMF1bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0gPSBbXTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIGxldCBsaXN0T2ZPcHRpb25zU2VsZWN0ZWQgOiBhbnkgPSBhbnN3ZXJPYmouYW5zd2VyLnNwbGl0KCcsJyk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyBsaXN0T2ZPcHRpb25zU2VsZWN0ZWQuZm9yRWFjaCgoc2luZ2xlRWxlbWVudCA6IGFueSkgPT4ge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb24pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvblswXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uWzBdWydkb21haW5WYWx1ZXMnXSkpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgICBsZXQgZmlsdGVyZWREb21haW5WYWx1ZU9iaiA6IGFueSA9IGZpbHRlcmVkUXVlc3Rpb25bMF1bJ2RvbWFpblZhbHVlcyddLmZpbHRlcigoc2luZ2xlT2JqIDogYW55KSA9PiBzaW5nbGVPYmpbJ2RvbWFpbkludGVybmFsVmFsdWUnXSA9PT0gc2luZ2xlRWxlbWVudCk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZERvbWFpblZhbHVlT2JqKSkge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLnF1ZXN0aW9uSWRdLnB1c2goe1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgICAgICBsYWJlbCA6IGZpbHRlcmVkRG9tYWluVmFsdWVPYmpbMF1bJ2RvbWFpblVpVmFsdWUnXSxcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgICAgICAgdmFsdWUgOiBmaWx0ZXJlZERvbWFpblZhbHVlT2JqWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgICAgIH0pO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgfVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0gPSBhbnN3ZXJPYmouYW5zd2VyLnNwbGl0KCcsJyk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IGFuc3dlck9iai5hbnN3ZXJcbiAgICAgICAgICAvLyAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAoYW5zd2VyT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUJykge1xuICAgICAgICAgICAgICAgICAgICAgIC8vICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddID0gYW5zd2VyT2JqWydhbnN3ZXInXTtcbiAgICAgICAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKGFuc3dlck9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gICBsZXQgZmVldEFuc3dlciA9IGFuc3dlck9ialsnYW5zd2VyJ10uc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGFuc3dlck9ialsnYW5zd2VyJ10pICYmIGFuc3dlck9ialsnYW5zd2VyJ10uaW5jbHVkZXMoJy4nKSkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10gPSBmZWV0QW5zd2VyWzBdO1xuICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10gPSBmZWV0QW5zd2VyWzFdO1xuICAgICAgICAgICAgICAgICAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddID0gZmVldEFuc3dlclswXTtcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddID0gJzAnO1xuICAgICAgICAgICAgICAgICAgICAgIC8vICAgfVxuICAgICAgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25SZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gICBpZiAoc2luZ2xlUXVlc3Rpb25SZXNwb25zZVsncXVlc3Rpb25JZCddID09PSBhbnN3ZXJPYmpbJ3F1ZXN0aW9uSWQnXSAmJiBzaW5nbGVRdWVzdGlvblJlc3BvbnNlWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RFQ0xBUkFUSU9OJykge1xuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0gPSBhbnN3ZXJPYmouYW5zd2VyO1xuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vICAgfVxuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vIH0pO1xuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vIGxldCBsYUluZGV4OiBhbnkgPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gc2luZ2xlUGVyc29uWydyb2xlJ10pO1xuXG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvbikgJiYgZmlsdGVyZWRRdWVzdGlvblswXVsncXVlc3Rpb25UeXBlJ10gPT09ICdERUNMQVJBVElPTicpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IGFuc3dlck9iai5hbnN3ZXI7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gfVxuXG4gICAgICAgICAgLy8gICAgICAgICAgICAgaWYgKGFuc3dlck9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ0xpZmVNZWRpQ25kdG4nIHx8IGFuc3dlck9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ01lZGlDbmR0bicpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIGlzU3ViUXVlc3Rpb25FeGlzdHMgPSB0cnVlO1xuXG5cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgXCJ1cmxQYXJhbUZvckRpc2Vhc2VcIjogXCJtZGVpY2FsSGlzdG9yeVwiLFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICBcImFwaVVybFwiOiBcImh0dHBzOi8vcHJlcHJvZC1kaXJlY3Rwb3J0YWxsaWZlLmdvZGlnaXQuY29tL0RpcmVjdFBvcnRhbExpZmUvbGlmZS9mZXRjaFN1YlF1ZXN0aW9uc1wiLFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICBcInVybFBhcmFtRm9yUGVyc29uVXdJZFwiOiBcInBlcnNvblVXSURcIixcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgXCJ0b2tlbkNvb2tpZVBhcmFtXCI6IFwidjNUb2tlblwiLFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICBcImlzU2VuZFRva2VuXCI6IGZhbHNlXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICB0aGlzLm1hc3RlclNlcnZpY2UuZ2V0U3ViUXVlc3Rpb25zKHRoaXMuZmllbGQoKT8uY29uZmlnRGF0YSwgYW5zd2VyT2JqWydhbnN3ZXInXSwgYW5zd2VyT2JqWydwZXJzb25VV0lkJ10pLnN1YnNjcmliZShcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgKHN1YlF1ZXN0aW9uUmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIC8vIHRoaXMubG9hZGVyU2VydmljZS5kaXNwbGF5KGZhbHNlKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICBsZXQgZGlzdGluY3RTdGVwczogYW55ID0gW107XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc3ViUXVlc3Rpb25SZXNwb25zZSkpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uUmVzcG9uc2UuZm9yRWFjaCgoc3ViUXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSA9IHRydWU7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IGZhbHNlO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddKSAmJlxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10pXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10gPSBbc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXV07XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJlxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSlcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXh0UXVlc3Rpb25PYmplY3Q6IGFueSA9IHN1YlF1ZXN0aW9uUmVzcG9uc2UuZmlsdGVyKFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob2JqZWN0OiBhbnkpID0+IG9iamVjdFsncXVlc3Rpb25JZCddID09PSBzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqWyduZXh0UXVlc3Rpb25JZCddXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRRdWVzdGlvbk9iamVjdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRRdWVzdGlvbk9iamVjdFswXVsnYW5zd2VyZWRWYWx1ZSddID0gc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9ialsncGFyZW50UXVlc3Rpb25WYWx1ZSddO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSA9IHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydkb21haW5WYWx1ZXMnXVtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnZG9tYWluTmFtZSddXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2ZpZWxkJ10gPSB0aGlzLmdldEZpZWxkKHN1YlF1ZXN0aW9uKTtcblxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzdWJRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10pKSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIC8vICAgc3ViUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLmZvckVhY2goKHN1YkRvbWFpbjogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnN1Yk1lZGljYWxRdWVzdGlvbnNEb21haW5JbnRlcm5hbFZhbHVlc0xpc3QucHVzaChzdWJEb21haW5bJ2RvbWFpbkludGVybmFsVmFsdWUnXSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIC8vICAgfSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkaXN0aW5jdFN0ZXBzLmluY2x1ZGVzKHN1YlF1ZXN0aW9uWydjbHVzdGVySWQnXSkpIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFN0ZXBzLnB1c2goc3ViUXVlc3Rpb25bJ2NsdXN0ZXJJZCddKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblJlc3BvbnNlLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiBhWydzdGVwJ10gLSBiWydzdGVwJ10gfHwgYVsnZGlzcGxheU9yZGVyJ10gLSBiWydkaXNwbGF5T3JkZXInXSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFN0ZXBzLmZvckVhY2goKHN0ZXBzOiBhbnksIGluZDogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZE9iajogYW55ID0gc3ViUXVlc3Rpb25SZXNwb25zZS5maWx0ZXIoKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydjbHVzdGVySWQnXSA9PT0gc3RlcHMpO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc3RlcDogMTAwMCArIGluZCxcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbnM6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopID8gZmlsdGVyZWRPYmogOiBbXSxcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uTmFtZTogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iaikgPyBmaWx0ZXJlZE9ialswXVsndGl0bGUnXSA6ICcnLFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIGlzTWVkaWNhbFN1YlF1ZXN0aW9uOiB0cnVlLFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dTZWN0aW9uOiB0cnVlLFxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IGFuc3dlck9ialsncGVyc29uVVdJZCddLnRvU3RyaW5nKCksXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIC8vIGxldCBMYUluZGV4OiBhbnkgPSB0aGlzLnBlcnNvblV3TWFzdGVyT2JqLmZpbmRJbmRleChcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLy8gICAoc2luZ2xlOiBhbnkpID0+IHNpbmdsZVsncm9sZSddID09PSBzaW5nbGVQZXJzb25bJ3JvbGUnXVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAvLyApO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uTGlzdC5wdXNoKG9iaik7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UgPSBzdWJRdWVzdGlvblJlc3BvbnNlO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgLy8gbGV0IGxhSW5kZXg6IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gc2luZ2xlUGVyc29uWydyb2xlJ10pO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bJ3F1ZXN0aW9uTGlzdCddID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bJ3F1ZXN0aW9uTGlzdCddLmNvbmNhdCh0aGlzLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmRpc2FibGVDb25maXJtYXRpb25CdXR0b24gPSBmYWxzZTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgLy8gdGhpcy5kaXNhYmxlQ29uZmlybWF0aW9uQnV0dG9uID0gdHJ1ZTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmxvYWRlclNlcnZpY2UuZGlzcGxheShmYWxzZSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgfVxuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vIGVsc2Uge1xuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vICAgdGhpcy5sb2FkZXJTZXJ2aWNlLmRpc3BsYXkoZmFsc2UpO1xuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vIH1cblxuICAgICAgICAgIC8vICAgICAgICAgICAgIGlmICh0eXBlb2YgYW5zd2VyT2JqLmFuc3dlciA9PT0gJ3N0cmluZycgJiYgYW5zd2VyT2JqLmFuc3dlciAhPT0gJ1knICYmIGFuc3dlck9iai5hbnN3ZXIgIT09ICdOJykge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gaWYgKGFuc3dlck9iai5hbnN3ZXIuaW5jbHVkZXMoJywnKSkge1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICBhbnN3ZXJPYmouYW5zd2VyLnNwbGl0KCcsJykuZm9yRWFjaCgoYW5zd2VyOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJdID0gdHJ1ZTtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgfSk7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmouYW5zd2VyXSA9IHRydWU7XG4gICAgICAgICAgLy8gICAgICAgICAgICAgfVxuICAgICAgICAgIC8vICAgICAgICAgICAgIHRoaXMuICB1cGRhdGVQZXJzb25Vd0Fuc3dlcnMoYW5zd2VyT2JqKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgfSk7XG4gICAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgICAgLy8gICAgICAgfSk7XG4gICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAvLyAgIH1cbiAgICAgICAgICAvLyB9KTtcbiAgICAgICAgfVxuXG5cbiAgICB9XG5cbiAgICB0aGlzLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XG5cbiAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydoZWlnaHRPYmplY3RUeXBlcyddID0ge1xuICAgICAgY29udHJvbFN0eWxlOiB7XG4gICAgICAgIGNvbnRyb2xUeXBlOiAnc2VsZWN0JyxcbiAgICAgICAgYm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgYm9yZGVyV2lkdGg6ICcxLjVweCcsXG4gICAgICAgIGJvcmRlclJhZGl1czogbnVsbCxcbiAgICAgICAgZm9udFNpemU6ICcxNnB4JyxcbiAgICAgICAgZm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgIGZvbnRGYW1pbHk6ICdNdWxpc2gnLFxuICAgICAgICBjb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICBiYWNrZ3JvdW5kOiAnI0ZGRkZGRicsXG4gICAgICAgIGNhcmV0Q29sb3I6ICcjZmZiYjAwJyxcbiAgICAgICAgbnVkZ2VEaXNwbGF5SW1hZ2U6IG51bGwsXG4gICAgICAgIGRyb3Bkb3duT3B0aW9uQmdDb2xvcjogJyNGRkZGRkYnLFxuICAgICAgICBkcm9wZG93bk9wdGlvbkNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgIGRyb3Bkb3duT3B0aW9uRm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgICBmb2N1c0JvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICBmb2N1c0JvcmRlckNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgIGZvY3VzQmFja2dyb3VuZDogbnVsbCxcbiAgICAgICAgZm9jdXNDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQmdDb2xvcjogbnVsbCxcbiAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yOiBudWxsLFxuICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uRm9udFdlaWdodDogbnVsbCxcbiAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlckxlZnQ6IG51bGwsXG4gICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXM6IG51bGwsXG4gICAgICAgIGhvdmVyQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgaG92ZXJCb3JkZXJXaWR0aDogJzEuNXB4JyxcbiAgICAgICAgaG92ZXJDb2xvcjogJyM0NDQ0NDQnLFxuICAgICAgICBkaXNhYmxlQ29sb3I6ICcjRUNFQ0VDJyxcbiAgICAgICAgZGlzYWJsZUJhY2tncm91bmQ6ICcjRUNFQ0VDJyxcbiAgICAgICAgZXJyb3JCb3JkZXJDb2xvcjogJyNFRTAwMDAnLFxuICAgICAgICBlcnJvckJvcmRlcldpZHRoOiAnMS41cHgnLFxuICAgICAgICBlcnJvckNvbG9yOiAnIzQ0NDQ0NCcsXG4gICAgICAgIGNyZWF0ZWREYXRlOiBudWxsLFxuICAgICAgICBwYWRkaW5nOiBudWxsLFxuICAgICAgICBtYXJnaW46IG51bGwsXG4gICAgICAgIGlzTWFzdGVyQ3NzOiBudWxsLFxuICAgICAgICBjb250cm9sTWV0YUlkOiAnTElfQ09NX0dFTl9DVFJMX3NlbGVjdF9kb3dubG9hZERvY3VtZW50c19WMScsXG4gICAgICAgIGJvcmRlclN0eWxlOiBudWxsLFxuICAgICAgICBoZWlnaHQ6IG51bGwsXG4gICAgICAgIG1pbkhlaWdodDogbnVsbCxcbiAgICAgICAgbWF4SGVpZ2h0OiBudWxsLFxuICAgICAgICBtaW5XaWR0aDogbnVsbCxcbiAgICAgICAgbWF4V2lkdGg6IG51bGwsXG4gICAgICAgIGNzc0NsYXNzOiBudWxsLFxuICAgICAgfSxcbiAgICAgIGZpZWxkTmFtZTogbnVsbCxcbiAgICAgIGxhYmVsOiAnZmVldCAvIGluY2hlcycsXG4gICAgICBwbGFjZUhvbGRlcjogJycsXG4gICAgICBtZXRhSWQ6ICcnLFxuICAgICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgICAgaXNEaXNhYmxlOiBpc0Rpc2FibGUsXG4gICAgICB2YWxpZGF0b3JzOiB7XG4gICAgICAgIGlzUmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICByZXF1aXJlZE1lc3NhZ2U6ICdUaGlzIGZpZWxkIGNhbm5vdCBiZSBlbXB0eScsXG4gICAgICAgIG1pbkxlbmd0aDogbnVsbCxcbiAgICAgICAgbWluTGVuZ3RoTWVzc2FnZTogbnVsbCxcbiAgICAgICAgbWF4TGVuZ3RoOiAxNTAsXG4gICAgICAgIG1heExlbmd0aE1lc3NhZ2U6IG51bGwsXG4gICAgICAgIHBhdHRlcm46IG51bGwsXG4gICAgICAgIHBhdHRlcm5NZXNzYWdlOiAnJyxcbiAgICAgIH0sXG4gICAgICBvcHRpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0NtJyxcbiAgICAgICAgICB2YWx1ZTogJ0NNJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnRmVldCcsXG4gICAgICAgICAgdmFsdWU6ICdGRUVUJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBjc3NDbGFzczogbnVsbCxcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgc3R5bGU6IG51bGwsXG4gICAgICBpbWFnZVVybDogbnVsbCxcbiAgICAgIGNvbmZpZ0RhdGE6IHt9LFxuICAgICAgbWV0YURhdGFPYmo6IG51bGwsXG4gICAgICBpc1Nob3dMYWJlbDogZmFsc2UsXG4gICAgICBpc01hc3RlckNvbnRyb2w6IGZhbHNlLFxuICAgICAgY29udHJvbFR5cGU6ICdzZWxlY3QnLFxuICAgIH07XG4gIH1cblxuICB1cGRhdGVQZXJzb25Vd0Fuc3dlcnMoYW5zd2VyT2JqOiBhbnkpIHtcblxuICAgIGlmIChhbnN3ZXJPYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFQnKSB7XG4gICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J10gPSBhbnN3ZXJPYmpbJ2Fuc3dlciddO1xuICAgIH1cbiAgICBpZiAoYW5zd2VyT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicpIHtcbiAgICAgIGxldCBmZWV0QW5zd2VyID0gYW5zd2VyT2JqWydhbnN3ZXInXS5zcGxpdCgnLicpO1xuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoYW5zd2VyT2JqWydhbnN3ZXInXSkgJiYgYW5zd2VyT2JqWydhbnN3ZXInXS5pbmNsdWRlcygnLicpKSB7XG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSA9IGZlZXRBbnN3ZXJbMF07XG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSA9IGZlZXRBbnN3ZXJbMV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10gPSBmZWV0QW5zd2VyWzBdO1xuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10gPSAnMCc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGZpbHRlcmVkUXVlc3Rpb246IGFueSA9IHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydxdWVzdGlvbnNSZXNwb25zZSddWzBdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09IGFuc3dlck9ialsncXVlc3Rpb25JZCddKTtcbiAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb24pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvblswXSkpIHtcbiAgICAgIGlmKGZpbHRlcmVkUXVlc3Rpb25bMF1bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnKSB7XG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IGFuc3dlck9iai5hbnN3ZXIuc3BsaXQoJywnKTtcblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLnF1ZXN0aW9uSWRdID0gYW5zd2VyT2JqLmFuc3dlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoYW5zd2VyT2JqLnBlcnNvblVXQWN0aXZpdHlSZXNwb25zZUVudGl0eSkpIHtcbiAgICAgIGFuc3dlck9iai5wZXJzb25VV0FjdGl2aXR5UmVzcG9uc2VFbnRpdHkuZm9yRWFjaCgoc3VicXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZVBlcnNvblV3QW5zd2VycyhzdWJxdWVzdGlvbik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2F2ZVF1ZXN0aW9uRGV0YWlscygpXG4gICAgfVxuICB9XG5cbiAgY2hlY2tJZlZhbHVlSXNFbXB0eSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUudHJpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgdmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdmFsdWUgPT09IG51bGwgfHxcbiAgICAgIHZhbHVlID09PSAnJyB8fFxuICAgICAgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSB8fFxuICAgICAgSlNPTi5zdHJpbmdpZnkodmFsdWUpID09PSAne30nXG4gICAgKTtcbiAgfVxuXG4gIGdldFRpdGxlQ2FzZShoZWFkZXI6IGFueSk6IGFueSB7XG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgaWYgKHRoaXMucXVlc3Rpb25IZWFkZXIuaW5jbHVkZXMoaGVhZGVyLnRvTG9jYWxlTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgIGxldCB2YWwgPSBoZWFkZXIuc3BsaXQoJyAnKTtcbiAgICAgICAgcmV0dXJuIHZhbFswXS50b1VwcGVyQ2FzZSgpICsgJyAnICsgdGhpcy50b1RpdGxlQ2FzZSh2YWxbMV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGhlYWRlci50b1VwcGVyQ2FzZSgpID09PSAnRkFUQ0EgREVUQUlMUycpIHtcbiAgICAgICAgICByZXR1cm4gaGVhZGVyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnRvVGl0bGVDYXNlKGhlYWRlcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdG9UaXRsZUNhc2UodmFsdWU6IGFueSkge1xuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgIC50b1N0cmluZygpXG4gICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgIC9cXHdcXFMqL2csXG4gICAgICAgICAgKHR4dDogYW55KSA9PiB0eHRbMF0udG9VcHBlckNhc2UoKSArIHR4dC5zdWJzdHIoMSkudG9Mb3dlckNhc2UoKVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGdldEZpZWxkKHF1ZXN0aW9uT2JqOiBhbnkpIHtcbiAgICBsZXQgb3B0aW9uc09iajogYW55ID0gW107XG4gICAgbGV0IGNvbnRyb2xTdHlsZSA6IGFueSA9IHt9O1xuICAgIGlmIChxdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pIHtcbiAgICAgIHF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKChzaW5nbGVPcHRpb25WYWx1ZTogYW55KSA9PiB7XG4gICAgICAgIG9wdGlvbnNPYmoucHVzaCh7XG4gICAgICAgICAgbGFiZWw6IHNpbmdsZU9wdGlvblZhbHVlWydkb21haW5VaVZhbHVlJ10sXG4gICAgICAgICAgdmFsdWU6IHNpbmdsZU9wdGlvblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ10sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGxldCBpc0Rpc2FibGUgOiBhbnkgPSBmYWxzZTtcbiAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2lzRGlzYWJsZU1lZGljYWxRdWVzdGlvbnMnKSkgKSB7XG4gICAgICBsZXQgaXNEaXNhYmxlTWVkaWNhbFF1ZXN0aW9uc2luVWkgIDogYW55ID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaXNEaXNhYmxlTWVkaWNhbFF1ZXN0aW9ucycpO1xuICAgICAgaXNEaXNhYmxlID0gSlNPTi5wYXJzZShpc0Rpc2FibGVNZWRpY2FsUXVlc3Rpb25zaW5VaSkgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuICAgIGxldCBtaW5MZW5ndGg6IGFueSA9IG51bGw7XG4gICAgbGV0IG1heExlbmd0aDogYW55ID0gMjAwO1xuICAgIGxldCBwYXR0ZXJuOiBhbnkgPSBudWxsO1xuICAgIGxldCBwYXR0ZXJuTWVzc2FnZTogYW55ID0gbnVsbDtcbiAgIGxldCBjb25maWdEYXRhOiBhbnkgPSAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuZmllbGQoKT8uY29uZmlnRGF0YSlcbiAgPyB0aGlzLmZpZWxkKCk/LmNvbmZpZ0RhdGFcbiAgOiB7fTtcblxuICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkocXVlc3Rpb25PYmpbJ2NvbmZpZ0RhdGEnXSkpIHtcbiAgICAgIGNvbmZpZ0RhdGEgPSB7Li4uY29uZmlnRGF0YSwgLi4ucXVlc3Rpb25PYmpbJ2NvbmZpZ0RhdGEnXX07XG4gICAgfVxuXG4gICAgaWYocXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAgJ1JBRElPIEJVVFRPTicgfHwgcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQURETU9SRScpIHtcbiAgICAgIGNvbnRyb2xTdHlsZSA9IHtcbiAgICAgICAgICAgICAgICAgIFwiY29udHJvbFR5cGVcIjogXCJyYWRpb1wiLFxuICAgICAgICAgICAgICAgICAgXCJib3JkZXJDb2xvclwiOiBcIiNEQURBREFcIixcbiAgICAgICAgICAgICAgICAgIFwiYm9yZGVyV2lkdGhcIjogXCIxcHhcIixcbiAgICAgICAgICAgICAgICAgIFwiYm9yZGVyUmFkaXVzXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImZvbnRTaXplXCI6IFwiMTJweFwiLFxuICAgICAgICAgICAgICAgICAgXCJmb250V2VpZ2h0XCI6IFwiNDAwXCIsXG4gICAgICAgICAgICAgICAgICBcImZvbnRGYW1pbHlcIjogXCJNdWxpc2hcIixcbiAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogXCIjNDQ0NDQ0XCIsXG4gICAgICAgICAgICAgICAgICBcImJhY2tncm91bmRcIjogXCIjRkZGRkZGXCIsXG4gICAgICAgICAgICAgICAgICBcImNhcmV0Q29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwibnVkZ2VEaXNwbGF5SW1hZ2VcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiZHJvcGRvd25PcHRpb25CZ0NvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImRyb3Bkb3duT3B0aW9uQ29sb3JcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwiZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcIndpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImZvY3VzQm9yZGVyV2lkdGhcIjogXCIxcHhcIixcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNCb3JkZXJDb2xvclwiOiBcIiNmZmJiMDBcIixcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNCYWNrZ3JvdW5kXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImZvY3VzQ29sb3JcIjogXCIjNDQ0NDQ0XCIsXG4gICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25CZ0NvbG9yXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Db2xvclwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uRm9udFdlaWdodFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyTGVmdFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyUmFkaXVzXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImhvdmVyQm9yZGVyQ29sb3JcIjogXCIjREFEQURBXCIsXG4gICAgICAgICAgICAgICAgICBcImhvdmVyQm9yZGVyV2lkdGhcIjogXCIxcHhcIixcbiAgICAgICAgICAgICAgICAgIFwiaG92ZXJDb2xvclwiOiBcIiM0NDQ0NDRcIixcbiAgICAgICAgICAgICAgICAgIFwiZGlzYWJsZUNvbG9yXCI6IFwiI0VDRUNFQ1wiLFxuICAgICAgICAgICAgICAgICAgXCJkaXNhYmxlQmFja2dyb3VuZFwiOiBcIiNFQ0VDRUNcIixcbiAgICAgICAgICAgICAgICAgIFwiZXJyb3JCb3JkZXJDb2xvclwiOiBcIiNEQURBREFcIixcbiAgICAgICAgICAgICAgICAgIFwiZXJyb3JCb3JkZXJXaWR0aFwiOiBcIjFweFwiLFxuICAgICAgICAgICAgICAgICAgXCJlcnJvckNvbG9yXCI6IFwiIzQ0NDQ0NFwiLFxuICAgICAgICAgICAgICAgICAgXCJjcmVhdGVkRGF0ZVwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJwYWRkaW5nXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcIm1hcmdpblwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJpc01hc3RlckNzc1wiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJjb250cm9sTWV0YUlkXCI6IFwiQUxMX0NPTV9HRU5fQ1RSTF9yYWRpb19ub21pbmVlR2VuZGVyX1YxXCIsXG4gICAgICAgICAgICAgICAgICBcImJvcmRlclN0eWxlXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImhlaWdodFwiOiBudWxsLFxuICAgICAgICAgICAgICAgICAgXCJtaW5IZWlnaHRcIjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIFwibWF4SGVpZ2h0XCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcIm1pbldpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcIm1heFdpZHRoXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICBcImNzc0NsYXNzXCI6IG51bGxcbiAgICAgICAgICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShxdWVzdGlvbk9ialsndmFsaWRhdGlvbnMnXSkpIHtcbiAgICAgIGxldCB2YWxpZGF0aW9uT2JqOiBhbnkgPSBKU09OLnBhcnNlKHF1ZXN0aW9uT2JqWyd2YWxpZGF0aW9ucyddKTtcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHZhbGlkYXRpb25PYmpbJ01pblZhbHVlJ10pKSB7XG4gICAgICAgIG1pbkxlbmd0aCA9IHZhbGlkYXRpb25PYmpbJ01pblZhbHVlJ107XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh2YWxpZGF0aW9uT2JqWydNYXhWYWx1ZSddKSkge1xuICAgICAgICBtYXhMZW5ndGggPSB2YWxpZGF0aW9uT2JqWydNYXhWYWx1ZSddO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodmFsaWRhdGlvbk9ialsnVHlwZSddKSkge1xuICAgICAgICBpZiAodmFsaWRhdGlvbk9ialsnVHlwZSddID09PSAnTnVtZXJpYycpIHtcbiAgICAgICAgICBwYXR0ZXJuID0gJ15bMC05XSskJztcbiAgICAgICAgICBwYXR0ZXJuTWVzc2FnZSA9ICdPbmx5IG51bWJlcnMgYXJlIGFsbG93ZWQuJztcbiAgICAgICAgICBjb25maWdEYXRhWydpc0FsbG93TnVtYmVyc0luVGV4dEZpZWxkcyddID0gdHJ1ZTtcbiAgICAgICAgICBtYXhMZW5ndGggPSAnOScucmVwZWF0KE51bWJlcihtYXhMZW5ndGgpKTtcbiAgICAgICAgICBjb25maWdEYXRhWydtYXhWYWx1ZSddID0gbWF4TGVuZ3RoO1xuICAgICAgICAgIGNvbmZpZ0RhdGFbJ21pblZhbHVlJ10gPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25PYmpbJ1R5cGUnXSA9PT0gJ0FscGhhTnVtZXJpYycpIHtcbiAgICAgICAgICBwYXR0ZXJuID0gJ15bYS16QS1aMC05XFxcXHNdKyQnO1xuICAgICAgICAgIHBhdHRlcm5NZXNzYWdlID0gJ09ubHkgbGV0dGVycyBhbmQgbnVtYmVycyBhcmUgYWxsb3dlZC4nO1xuICAgICAgICAgIGNvbmZpZ0RhdGFbJ2lzQWxsb3dOdW1iZXJzSW5UZXh0RmllbGRzJ10gPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXR0ZXJuID0gbnVsbDtcbiAgICAgICAgICBwYXR0ZXJuTWVzc2FnZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnRGF0YTogY29uZmlnRGF0YSxcbiAgICAgIGNvbnRyb2xTdHlsZTogY29udHJvbFN0eWxlLFxuICAgICAgY29udHJvbFR5cGU6XG4gICAgICAgIHF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0ZSRUUgVEVYVCdcbiAgICAgICAgICA/ICd0ZXh0J1xuICAgICAgICAgIDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnUkFESU8gQlVUVE9OJyB8fFxuICAgICAgICAgICAgcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQURETU9SRSdcbiAgICAgICAgICA/ICdyYWRpbydcbiAgICAgICAgICA6IHF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyB8fFxuICAgICAgICAgICAgcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnREVDTEFSQVRJT04nXG4gICAgICAgICAgPyAnY2hlY2tib3gnXG4gICAgICAgICAgOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdDQUxFTkRBUidcbiAgICAgICAgICA/ICdkYXRlJ1xuICAgICAgICAgIDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnRFJPUERPV04nXG4gICAgICAgICAgPyAnc2VsZWN0J1xuICAgICAgICAgIDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnRE9DVVBMT0FEJ1xuICAgICAgICAgID8gJ2ZpbGUnXG4gICAgICAgICAgOiAnJyxcbiAgICAgIGZpZWxkTmFtZTogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXSxcbiAgICAgIGlzRGlzYWJsZSxcbiAgICAgIGxhYmVsOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UZXh0J10sXG4gICAgICBwbGFjZUhvbGRlcjogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVGV4dCddLFxuICAgICAgdmFsaWRhdG9yczoge1xuICAgICAgICBpc1JlcXVpcmVkOiBxdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTicgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgIG1pbkxlbmd0aCxcbiAgICAgICAgbWF4TGVuZ3RoLFxuICAgICAgICBwYXR0ZXJuLFxuICAgICAgICBwYXR0ZXJuTWVzc2FnZSxcbiAgICAgIH0sXG4gICAgICBjc3NDbGFzczogXCJtYi0yXCIsXG4gICAgICBpc1Zpc2libGU6IHRydWUsXG4gICAgICBvcHRpb25zOiBvcHRpb25zT2JqLFxuICAgICAgaXNTaG93TGFiZWw6IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIHJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKHF1ZXN0aW9uPzogYW55KSB7XG4gICAgY29uc29sZS5sb2coJ3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzcycsIHRoaXMucXVlc3Rpb25MaXN0KVxuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucXVlc3Rpb25MaXN0KSkge1xuICAgICAgdGhpcy5xdWVzdGlvbkxpc3QuZm9yRWFjaCgoc2luZ2xlU2VjdGlvbjogYW55KSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddKSkge1xuICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5zaG93UXVlc3Rpb24oc2luZ2xlUXVlc3Rpb24pKSB7XG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IGZhbHNlO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRGlzYWJsZSB0aGUgcXVlc3Rpb24gaWYgaXQgaGFzIGEgZGVmYXVsdCB2YWx1ZVxuICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25JZCA9IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10/LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBjb25zdCBoYXNEZWZhdWx0VmFsdWUgPSAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuZGVmYXVsdFZhbHVlcygpKSAmJiBPYmplY3Qua2V5cyh0aGlzLmRlZmF1bHRWYWx1ZXMoKSkuaW5jbHVkZXMocXVlc3Rpb25JZCk7XG4gICAgICAgICAgICBpZiAoaGFzRGVmYXVsdFZhbHVlICYmIHNpbmdsZVF1ZXN0aW9uWydmaWVsZCddKSB7XG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydmaWVsZCddID0ge1xuICAgICAgICAgICAgICAgIC4uLnNpbmdsZVF1ZXN0aW9uWydmaWVsZCddLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZTogdHJ1ZVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnKSB7XG4gICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgaXNOb25lSW5Eb21haW5WYWx1ZXM6IGFueSA9IHNpbmdsZVF1ZXN0aW9uW1xuICAgICAgICAgICAgICAgICAgJ2RvbWFpblZhbHVlcydcbiAgICAgICAgICAgICAgICBdLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVPYmo6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlT2JqWydkb21haW5VaVZhbHVlJ10udG9VcHBlckNhc2UoKSA9PT0gJ05PTkUnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaChcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVEb21haW5WYWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGlzTm9uZUluRG9tYWluVmFsdWVzKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNOb25lSW5Eb21haW5WYWx1ZXNbMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTm9uZUluRG9tYWluVmFsdWVzWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11cbiAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIG5vbmUgaXMgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaChcbiAgICAgICAgICAgICAgICAgICAgICAgIChzaW5nbGVEb21haW5WYWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBhbGwgc2VsZWN0ZWQgY2hlY2tib3ggcXVlc3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZS5kb21haW5VaVZhbHVlLnRvVXBwZXJDYXNlKCkgIT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05PTkUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlLmlzRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZS5pc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbGV0IGlzU2VjdGlvbkV4aXN0c0luQmxvY2tlZExpc3Q6IGFueSA9IHRoaXMuaXNCbG9ja2VkUXVlc3Rpb25zTGlzdC5maWx0ZXIoKHNpbmdsZUJsb2NrZWRPYmo6IGFueSkgPT4gc2luZ2xlQmxvY2tlZE9ialsnc2VjdGlvblRpdGxlJ10udHJpbSgpID09PSBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRyaW0oKSk7XG4gICAgICAgIHNpbmdsZVNlY3Rpb25bJ3Nob3dTZWN0aW9uJ10gPSAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcbiAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGlzU2VjdGlvbkV4aXN0c0luQmxvY2tlZExpc3QpKSB7XG4gICAgICAgIC8vICAgaWYgKGlzU2VjdGlvbkV4aXN0c0luQmxvY2tlZExpc3RbMF0uaXNCbG9ja2VkRm9yQ3VzdG9tZXJGbG93ICYmICF0aGlzLmxvYWRpbmdBZ2VudHBvcnRhbCkge1xuICAgICAgICAvLyAgICAgc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXSA9IGZhbHNlO1xuICAgICAgICAvLyAgICAgbGV0IGZpbHRlcmVkSW5kZXg6IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pO1xuICAgICAgICAvLyAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgICAvLyAgICAgICBsZXQgZmlsdGVyZWRRdWVzdGlvbjogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2ZpbHRlcmVkSW5kZXhdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uT2JqSW5TZWN0aW9uWydxdWVzdGlvbklkJ10pO1xuICAgICAgICAvLyAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uKSkge1xuICAgICAgICAvLyAgICAgICAgIGZpbHRlcmVkUXVlc3Rpb25bMF1bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXTtcbiAgICAgICAgLy8gICAgICAgfVxuICAgICAgICAvLyAgICAgfSk7XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyAgIGlmICgoaXNTZWN0aW9uRXhpc3RzSW5CbG9ja2VkTGlzdFswXS5pc0Jsb2NrZWRGb3JBZ2VudEZsb3cgfHwgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnYWdlbnRDaGFubmVsJykgPT09ICdEMjAnIHx8IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FnZW50Q2hhbm5lbCcpID09PSAnRDA1JyB8fCBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdhZ2VudENoYW5uZWwnKSA9PT0gJ0QwNicpICYmIHRoaXMubG9hZGluZ0FnZW50cG9ydGFsKSB7XG4gICAgICAgIC8vICAgICBzaW5nbGVTZWN0aW9uWydzaG93U2VjdGlvbiddID0gZmFsc2U7XG4gICAgICAgIC8vICAgICBsZXQgZmlsdGVyZWRJbmRleDogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSk7XG4gICAgICAgIC8vICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvbjogYW55KSA9PiB7XG4gICAgICAgIC8vICAgICAgIGxldCBmaWx0ZXJlZFF1ZXN0aW9uOiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bZmlsdGVyZWRJbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT0gc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb25bJ3F1ZXN0aW9uSWQnXSk7XG4gICAgICAgIC8vICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb24pKSB7XG4gICAgICAgIC8vICAgICAgICAgZmlsdGVyZWRRdWVzdGlvblswXVsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBzaW5nbGVTZWN0aW9uWydzaG93U2VjdGlvbiddO1xuICAgICAgICAvLyAgICAgICB9XG4gICAgICAgIC8vICAgICB9KTtcbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vIH1cbiAgICAgICAgbGV0IGhpZGRlblF1ZXN0aW9uczogYW55ID0gdGhpcy5xdWVzdGlvbkxpc3QuZmlsdGVyKFxuICAgICAgICAgIChzaW5nbGVTZWN0aW9uT2JqOiBhbnkpID0+ICFzaW5nbGVTZWN0aW9uT2JqWydzaG93U2VjdGlvbiddXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGlkZGVuUXVlc3Rpb25zKSkge1xuICAgICAgICAgIGhpZGRlblF1ZXN0aW9ucy5mb3JFYWNoKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goXG4gICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gbGV0IGZpbHRlcmVkUXVlc3Rpb246IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PSBzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvblsncXVlc3Rpb25JZCddKTtcbiAgICAgICAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uKSkge1xuICAgICAgICAgICAgICAgIC8vICAgZmlsdGVyZWRRdWVzdGlvblswXVsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMucXVlc3Rpb25MaXN0LnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiBhWydzdGVwJ10gLSBiWydzdGVwJ10pO1xuXG4gICAgY29uc29sZS5sb2coJ3F1ZXN0aW9ucyBsaXN0JywgdGhpcy5xdWVzdGlvbkxpc3QpO1xuICAgIGNvbnNvbGUubG9nKCdxdWVzdGlvbnMgYW5zd2VycycsIHRoaXMucGVyc29uVXdBbnN3ZXJzKTtcbiAgICB0aGlzLnNhdmVRdWVzdGlvbkRldGFpbHMoKTtcbiAgICB0aGlzLnF1ZXN0aW9uc1ZhbHVlQ2hhbmdlLmVtaXQodGhpcy5wZXJzb25Vd0Fuc3dlcnMpO1xuICB9XG5cbiAgc2hvd1F1ZXN0aW9uKGN1cnJlbnRRdWVzdGlvbjogYW55KSB7XG4gICAgbGV0IHNob3dRdWVzdGlvbjogYW55ID0gZmFsc2U7XG4gICAgbGV0IHN1YlF1ZXN0aW9uczogYW55ID0gW107XG4gICAgLy8gbGV0IGN1cnJlbnRTZWN0aW9uSW5kZXg6IGFueSA9IHF1ZXN0aW9uc1Jlc3BvbnNlWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSBwZXJzb25Sb2xlKVxuICAgIC8vIGxldCByb2xlID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2N1cnJlbnRTZWN0aW9uSW5kZXhdWydyb2xlJ11cblxuICAgIHRoaXMucGVyc29uVXdSZXNwb25zZU9ialswXS5xdWVzdGlvbkxpc3QuZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgbGV0IGlzU3ViUXVlc3Rpb25PYmplY3Q6IGFueSA9IFtdO1xuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSkpIHtcbiAgICAgICAgaXNTdWJRdWVzdGlvbk9iamVjdCA9IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10uZmlsdGVyKFxuICAgICAgICAgIChxdWVzdGlvblJlbGF0aW9uT2JqOiBhbnkpID0+XG4gICAgICAgICAgICBxdWVzdGlvblJlbGF0aW9uT2JqWyduZXh0UXVlc3Rpb25JZCddID09PVxuICAgICAgICAgICAgY3VycmVudFF1ZXN0aW9uWydxdWVzdGlvbklkJ11cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1N1YlF1ZXN0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgc3ViUXVlc3Rpb25zLnB1c2goc2luZ2xlUXVlc3Rpb24pO1xuICAgICAgICBpc1N1YlF1ZXN0aW9uT2JqZWN0LmZvckVhY2goKHNpbmdsZVN1YlF1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddICE9PSAnQ0hFQ0tCT1gnICYmXG4gICAgICAgICAgICAgIHNpbmdsZVN1YlF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblZhbHVlJ10udG9TdHJpbmcoKVswXSAhPT0gJyEnICYmXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dID09PVxuICAgICAgICAgICAgICAgIHNpbmdsZVN1YlF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblZhbHVlJ10pIHx8XG4gICAgICAgICAgICAoc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXS50b1N0cmluZygpWzBdID09PSAnIScgJiZcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXVxuICAgICAgICAgICAgICApICYmXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dICE9PVxuICAgICAgICAgICAgICAgIHNpbmdsZVN1YlF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblZhbHVlJ11cbiAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAuc3BsaXQoJyEnKVsxXSkgfHxcbiAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiZcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXVxuICAgICAgICAgICAgICApICYmXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dPy5pbmNsdWRlcyhzaW5nbGVTdWJRdWVzdGlvblsncGFyZW50UXVlc3Rpb25WYWx1ZSddKVxuICAgICAgICAgICAgICAvLyB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXT8uZmlsdGVyKFxuICAgICAgICAgICAgICAvLyAgIChzaW5nbGVPYmo6IGFueSkgPT5cbiAgICAgICAgICAgICAgLy8gICAgIHNpbmdsZU9iaiA9PT1cbiAgICAgICAgICAgICAgLy8gICAgIHNpbmdsZVN1YlF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblZhbHVlJ11cbiAgICAgICAgICAgICAgLy8gKS5sZW5ndGggPiAwXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBzaG93UXVlc3Rpb24gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc3ViUXVlc3Rpb25zKSAmJlxuICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddKVxuICAgICkge1xuICAgICAgc2hvd1F1ZXN0aW9uID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShjdXJyZW50UXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uUmVsYXRpb24nXSkgJiZcbiAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgIGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddWydwYXJlbnRRdWVzdGlvbklkJ11cbiAgICAgICkgJiZcbiAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgIGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddWydwYXJlbnRRdWVzdGlvbklkJ11cbiAgICAgICAgXVxuICAgICAgKSAmJlxuICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgIGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddWydwYXJlbnRRdWVzdGlvbklkJ11cbiAgICAgIF0gPT09IGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddWydwYXJlbnRRdWVzdGlvbkFuc3dlciddXG4gICAgKSB7XG4gICAgICBzaG93UXVlc3Rpb24gPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoY3VycmVudFF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ05PRElTUExBWScpIHtcbiAgICAgIHNob3dRdWVzdGlvbiA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gc2hvd1F1ZXN0aW9uO1xuICB9XG5cbiAgc2F2ZVF1ZXN0aW9uRGV0YWlscygpIHtcbiAgICAvLyByZW1vdmUgYWxsIGNoZWNrYm94IHF1ZXN0aW9ucyBwcmVzZW50IGluIHZhbHVlc1xuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3gpKSB7XG4gICAgICAvLyBsZXQgbGlmZUFzc3VyZWRrZXlzOiBhbnkgPSBPYmplY3Qua2V5cyh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXSk7XG4gICAgICAvLyBsZXQgcG9saWN5QXNzdXJlZEtleXM6IGFueSA9IE9iamVjdC5rZXlzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydwb2xpY3lIb2xkZXInXSk7XG4gICAgICAvLyBsZXQgbGlmZUFzc3VyZWRPbmVLZXlzOiBhbnkgPSBPYmplY3Qua2V5cyh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWRPbmUnXSk7XG4gICAgICAvLyBsZXQgbGlmZUFzc3VyZWRUd29LZXlzOiBhbnkgPSBPYmplY3Qua2V5cyh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWRUd28nXSk7XG4gICAgICAvLyB0aGlzLnBlcnNvblV3QW5zd2Vycy5mb3JFYWNoKChzaW5nbGVLZXk6IGFueSkgPT4ge1xuICAgICAgLy8gICBpZiAoaXNOYU4oTnVtYmVyKHNpbmdsZUtleSkpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkJ11bc2luZ2xlS2V5XSkgJiYgdGhpcy5saXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveC5pbmNsdWRlcyh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXVtzaW5nbGVLZXldKSkge1xuICAgICAgLy8gICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXVtzaW5nbGVLZXldO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9KTtcbiAgICAgIC8vIHBvbGljeUFzc3VyZWRLZXlzLmZvckVhY2goKHNpbmdsZUtleTogYW55KSA9PiB7XG4gICAgICAvLyAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddW3NpbmdsZUtleV0pICYmIHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3guaW5jbHVkZXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ3BvbGljeUhvbGRlciddW3NpbmdsZUtleV0pKSB7XG4gICAgICAvLyAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzWydwb2xpY3lIb2xkZXInXVtzaW5nbGVLZXldO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9KTtcbiAgICAgIC8vIGxpZmVBc3N1cmVkT25lS2V5cy5mb3JFYWNoKChzaW5nbGVLZXk6IGFueSkgPT4ge1xuICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWRPbmUnXVtzaW5nbGVLZXldKSAmJiB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94LmluY2x1ZGVzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZE9uZSddW3NpbmdsZUtleV0pKSB7XG4gICAgICAvLyAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzWydwb2xpY3lIb2xkZXInXVtzaW5nbGVLZXldO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9KTtcbiAgICAgIC8vIGxpZmVBc3N1cmVkVHdvS2V5cy5mb3JFYWNoKChzaW5nbGVLZXk6IGFueSkgPT4ge1xuICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWRUd28nXVtzaW5nbGVLZXldKSAmJiB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94LmluY2x1ZGVzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZFR3byddW3NpbmdsZUtleV0pKSB7XG4gICAgICAvLyAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzWydwb2xpY3lIb2xkZXInXVtzaW5nbGVLZXldO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9KTtcbiAgICB9XG4gICAgLy8gbGV0IGhlaWdodEluSW5jaGVzT2JqOiBhbnkgPSBbXTtcbiAgICAvLyBsZXQgaGVpZ2h0SW5GZWV0T2JqOiBhbnkgPSBbXTtcbiAgICAvLyBsZXQgaGVpZ2h0SW5DZW50aW1ldGVyT2JqOiBhbnkgPSBbXTtcbiAgICBsZXQgaXNWYWxpZDogYW55ID0gdHJ1ZTtcbiAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9iaikgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXSkpIHtcbiAgICAvLyAgIGxldCBsYUluZGV4OiBhbnkgPSB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gJ2xpZmVBc3N1cmVkJyk7XG4gICAgLy8gICBpZiAobGFJbmRleCAhPT0gLTEgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtsYUluZGV4XSkpIHtcbiAgICAvLyAgICAgaGVpZ2h0SW5JbmNoZXNPYmogPSB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtsYUluZGV4XVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUSScpO1xuICAgIC8vICAgICBoZWlnaHRJbkZlZXRPYmogPSB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtsYUluZGV4XVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicpO1xuICAgIC8vICAgICBoZWlnaHRJbkNlbnRpbWV0ZXJPYmogPSB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtsYUluZGV4XVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUJyk7XG4gICAgLy8gICB9XG4gICAgLy8gfVxuXG4gICAgLy8gdmFsaWRhdGlvbiBmb3IgbWVkaWNhbCBhbmQgbm9uIG1lZGljYWwgcXVlc3Rpb25zIDpcbiAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9iaikgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdNYXN0ZXJPYmopICYmIGlzVmFsaWQpIHtcbiAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd01hc3Rlck9iai5mb3JFYWNoKChzaW5nbGVQZXJzb25PYmo6IGFueSwgc2luZ2xlUGVyc29uSW5kZXg6IGFueSkgPT4ge1xuICAgIC8vICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVQZXJzb25PYmpbJ3F1ZXN0aW9uTGlzdCddKSAmJiBpc1ZhbGlkKSB7XG4gICAgLy8gICAgICAgbGV0IHJvbGU6IGFueSA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSAnbGlmZUFzc3VyZWQnID8gXCJsaWZlIGFzc3VyZWRcIiA6IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSAncG9saWN5SG9sZGVyJyA/IFwicG9saWN5IGhvbGRlclwiIDogc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09ICdsaWZlQXNzdXJlZE9uZScgPyBcIkpvaW50IExpZmUgMVwiIDogc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09ICdsaWZlQXNzdXJlZFR3bycgPyBcIkpvaW50IExpZmUgMlwiIDogXCJcIjtcbiAgICAvLyAgICAgICBzaW5nbGVQZXJzb25PYmpbJ3F1ZXN0aW9uTGlzdCddLmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xuICAgIC8vICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10pICYmIGlzVmFsaWQpIHtcbiAgICAvLyAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSkgJiYgKHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udG9VcHBlckNhc2UoKS5yZXBsYWNlQWxsKCcgJywgJ18nKSA9PT0gJ1RFTExfVVNfTU9SRScgfHwgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PSAnQkFTSUNfREVUQUlMUycpICYmIGlzVmFsaWQpIHtcblxuICAgIC8vICAgICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGhlaWdodCBlbnRlcmVkIGluIGZlZXRcbiAgICAvLyAgICAgICAgICAgICBpZiAodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J10gPT09ICdGRUVUJykge1xuICAgIC8vICAgICAgICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUSScpO1xuICAgIC8vICAgICAgICAgICAgICAgbGV0IGhlaWdodEluRmVldE9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcigob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnKTtcbiAgICAvLyAgICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzT2JqKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldE9iaikgJiYgKHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10pIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10pKSkge1xuICAgIC8vICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJiAhc2F2ZWRyYWZ0ICYmIHJlZGlyZWN0KSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JZDogYW55ID0gaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10gKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGVudGVyIEhlaWdodCBpbiBGZWV0IGFuZCBJbmNoZXMgZm9yICcgKyByb2xlXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5vcGVuU25hY2tCYXIoJ1BsZWFzZSBlbnRlciBIZWlnaHQgaW4gRmVldCBhbmQgSW5jaGVzIGZvciAnICsgcm9sZSwgJ0Nsb3NlJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiAhdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnbGlmZSBhc3N1cmVkJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdwb2xpY3kgaG9sZGVyJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX1BIJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdqb2ludGxpZmUnKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnSm9pbnQgTGlmZSAxJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdKT0lOVExJRkVPTkUnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ0pvaW50IExpZmUgMicpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigxKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnSk9JTlRMSUZFVFdPJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAvLyAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgaGVpZ2h0IGluIGNtXG4gICAgLy8gICAgICAgICAgICAgbGV0IGhlaWdodEluQ2VudGltZXRlck9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcigob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCcpO1xuICAgIC8vICAgICAgICAgICAgIGlmICh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0NNJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXSkgJiZcbiAgICAvLyAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DZW50aW1ldGVyT2JqKSAmJiBpc1ZhbGlkKSB7XG4gICAgLy8gICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmlzTWFuZGF0b3J5RmllbGQgJiYgIXNhdmVkcmFmdCAmJiByZWRpcmVjdCkge1xuICAgIC8vICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgIT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddICsgJ18nICsgc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGVudGVyIEhlaWdodCBpbiBDTSAnICsgcm9sZVxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0pO1xuICAgIC8vICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uub3BlblNuYWNrQmFyKCdQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIENNICcgKyByb2xlLCAnQ2xvc2UnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiAhdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSA9PT0gJ2xpZmUgYXNzdXJlZCcpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAncG9saWN5IGhvbGRlcicpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9QSCcpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ2pvaW50bGlmZScpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnSm9pbnQgTGlmZSAxJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdKT0lOVExJRkVPTkUnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ0pvaW50IExpZmUgMicpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMSk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnSk9JTlRMSUZFVFdPJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICB9XG5cbiAgICAvLyAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgIH1cblxuICAgIC8vICAgICAgICAgICB9XG5cbiAgICAvLyAgICAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmo6IGFueSkgPT4ge1xuICAgIC8vICAgICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGJhc2ljIHF1ZXN0aW9uc1xuICAgIC8vICAgICAgICAgICAgIGlmIChcbiAgICAvLyAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmopICYmXG4gICAgLy8gICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10pICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAvLyAgICAgICAgICAgICAgIGlzVmFsaWQgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0lNQUdFIFRFWFQnICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVCcgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0RFQ0xBUkFUSU9OJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdoYXJkQ29weUxhbmcnICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdQQVNTUE9SVF9VUExPQUQnICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVEYnICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVEknICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddLnRvU3RyaW5nKCkgPT09ICdOJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgKChzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ11dKSkgfHxcbiAgICAvLyAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJiAhdGhpcy52YWxpZGF0ZUNoZWNrQm94RmllbGQoc2luZ2xlUXVlc3Rpb25PYmosIHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSkpICYmIGlzVmFsaWRcbiAgICAvLyAgICAgICAgICAgICApIHtcbiAgICAvLyAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJiAhc2F2ZWRyYWZ0ICYmIHJlZGlyZWN0KSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIGxldCBxdWVzdGlvbklkOiBhbnkgPSBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddICsgJ18nICsgc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xuICAgIC8vICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBlbnRlciBhbGwgdGhlIGRldGFpbHMgaW4gJyArIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10gKyAnIGZvciAnICsgcm9sZVxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0pO1xuICAgIC8vICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uub3BlblNuYWNrQmFyKCdQbGVhc2UgZW50ZXIgYWxsIHRoZSBkZXRhaWxzIGluICcgKyBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddICsgJyBmb3IgJyArIHJvbGUsICdDbG9zZScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmICF0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnbGlmZSBhc3N1cmVkJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdwb2xpY3kgaG9sZGVyJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigxKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX1BIJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnam9pbnRsaWZlJykge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJqb2ludCBsaWZlIGNhc2VcIik7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICB9XG5cbiAgICAvLyAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgIH1cblxuICAgIC8vICAgICAgICAgICAgIGlmIChcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ1BBU1NQT1JUX1VQTE9BRCcgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXG4gICAgLy8gICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJlxuICAgIC8vICAgICAgICAgICAgICAgcmVkaXJlY3RcbiAgICAvLyAgICAgICAgICAgICApIHtcbiAgICAvLyAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqOiBhbnkgPSB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnF1ZXN0aW9uc1Bhc3Nwb3J0VXBsb2FkT2JqLmZpbHRlcigoc2luZ2xlT2JqOiBhbnkpID0+IChzaW5nbGVPYmpbJ3BlcnNvblR5cGUnXSA9PT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gJiYgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZU9ialsnZG1zSWQnXSkpKTtcbiAgICAvLyAgICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmopKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChgJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydxdWVzdGlvblR5cGUnXX1fJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWyd0eXBlJ119XyR7ZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsncGVyc29uVHlwZSddfWApO1xuICAgIC8vICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgdXBsb2FkIHBhc3Nwb3J0ICcgKyBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydsYWJlbCddICsgJyBkb2N1bWVudCBmb3IgJyArIHJvbGVcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAvLyAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIHVwbG9hZCBwYXNzcG9ydCAnICsgZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsnbGFiZWwnXSArICcgZG9jdW1lbnQgZm9yICcgKyByb2xlLCAnQ2xvc2UnKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdsaWZlIGFzc3VyZWQnKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ3BvbGljeSBob2xkZXInKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9QSCcpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdqb2ludGxpZmUnKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImpvaW50IGxpZmUgY2FzZVwiKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgICB9XG5cbiAgICAvLyAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgZGVjbGFyYXRpb24gcXVlc3Rpb25zXG4gICAgLy8gICAgICAgICAgICAgaWYgKGlzVmFsaWQgJiYgc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25UeXBlID09PSAnREVDTEFSQVRJT04nICYmXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAvLyAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSkgJiZcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJ1xuICAgIC8vICAgICAgICAgICAgICkge1xuICAgIC8vICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQgJiZcbiAgICAvLyAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2VycykgJiZcbiAgICAvLyAgICAgICAgICAgICAgICAgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKSAmJlxuICAgIC8vICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdKSAmJlxuICAgIC8vICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ10pICYmXG4gICAgLy8gICAgICAgICAgICAgICAgICAgKCghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkgJiZcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSA9PT0gJ04nKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSkpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pKSB7XG5cbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xuICAgIC8vICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5pc01hbmRhdG9yeUZpZWxkICYmICFzYXZlZHJhZnQgJiYgcmVkaXJlY3QpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JZDogYW55ID0gc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25JZCArICdfJyArIHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2Ugc2VsZWN0IGFsbCB0aGUgZGV0YWlscyBpbiAnICsgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSArICcgZm9yICcgKyByb2xlXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgfVxuXG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgbWVkaWNhbCBzdWIgcXVlc3Rpb25zXG4gICAgLy8gICAgICAgICAgICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSkpIHtcbiAgICAvLyAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UuZm9yRWFjaCgocXVlc3Rpb246IGFueSkgPT4ge1xuICAgIC8vICAgICAgICAgICAgIC8vICAgICBpZiAoXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgdGhpcy5zaG93U3ViUXVlc3Rpb24ocXVlc3Rpb24pICYmXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgcXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddICE9PSAnSU1BR0UgVEVYVCcgJiZcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICBxdWVzdGlvblsnb3B0aW9uYWxRdWVzdGlvbiddLnRvU3RyaW5nKCkgPT09ICdOJyAmJlxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICgocXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddICE9PSAnQ0hFQ0tCT1gnICYmXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkJ11bcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0pKSB8fFxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICAgKHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJiAhdGhpcy52YWxpZGF0ZUNoZWNrQm94RmllbGQocXVlc3Rpb24sICdsaWZlQXNzdXJlZCcpKSlcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgKSB7XG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCAmJiAhc2F2ZWRyYWZ0KSB7XG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBhbnN3ZXIgYWxsIG1lZGljYWwgc3ViIHF1ZXN0aW9ucyAnICsgcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSArICcgJyArIHF1ZXN0aW9uWydxdWVzdGlvblRleHQnXVxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICAgfSk7XG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgfVxuICAgIC8vICAgICAgICAgICAgIC8vICAgICB9XG4gICAgLy8gICAgICAgICAgICAgLy8gICB9KTtcbiAgICAvLyAgICAgICAgICAgICAvLyB9XG4gICAgLy8gICAgICAgICAgIH0pO1xuXG4gICAgLy8gICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGZhdGNoIGRlY2xhcmF0aW9uXG4gICAgLy8gICAgICAgICAgIC8vIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvbi5xdWVzdGlvbnMpICYmIGlzVmFsaWQpe1xuICAgIC8vICAgICAgICAgICAvLyBzaW5nbGVTZWN0aW9uLnF1ZXN0aW9ucy5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iajphbnkpID0+IHtcbiAgICAvLyAgICAgICAgICAgLy8gICBpZihpc1ZhbGlkICYmIHNpbmdsZVF1ZXN0aW9uT2JqLnF1ZXN0aW9uVHlwZSA9PT0gJ0RFQ0xBUkFUSU9OJyAmJiBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxuICAgIC8vICAgICAgICAgICAvLyAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTidcbiAgICAvLyAgICAgICAgICAgLy8gICAgICl7XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgIGlmKCBpc1ZhbGlkICYmXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2VycykgJiZcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pICYmXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXSkgJiZcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ10pICAmJlxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgKCghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkgJiZcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSA9PT0gJ04nKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSkpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pKSB7XG5cbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgIT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSB7XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCAmJiAhc2F2ZWRyYWZ0KSB7XG4gICAgLy8gICAgICAgICAgIC8vIGxldCBxdWVzdGlvbklkOiBhbnkgPSBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvbklkICsgJ18nICsgc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBzZWxlY3QgYWxsIHRoZSBkZXRhaWxzIGluICcgKyBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddICsgJyBmb3IgJyArIHJvbGVcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgIH0pO1xuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgfVxuICAgIC8vICAgICAgICAgICAvLyAgIH1cbiAgICAvLyAgICAgICAgICAgLy8gfSk7XG4gICAgLy8gICAgICAgICAgIC8vIH1cblxuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICAgIH0pO1xuICAgIC8vICAgICB9XG4gICAgLy8gICB9KTtcbiAgICAvLyB9XG5cbiAgICAvLyBpZiAoKGlzVmFsaWQgfHwgc2F2ZWRyYWZ0KSB8fCB0aGlzLnNoYXJlZFNlcnZpY2UubG9hZGluZ0FnZW50cG9ydGFsKSB7XG4gICAgLy8gaWYgKGlzVmFsaWQpIHtcbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgLy8gdGhpcy5sb2FkZXJTZXJ2aWNlLmRpc3BsYXkodHJ1ZSk7XG4gICAgICAvLyBsZXQgcmVxdWVzdDogYW55ID0gW107XG4gICAgICBsZXQgbWFpblJlcU9iajogYW55ID0gW107XG4gICAgICBsZXQgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uczogYW55ID0gW107XG4gICAgICBsZXQgbWFpblJlcXVlc3RGb3JMYTogYW55ID0gW107XG4gICAgICBsZXQgbWFpblJlcXVlc3RGb3JQaDogYW55ID0gW107XG4gICAgICB0aGlzLnF1ZXN0aW9uTGlzdC5mb3JFYWNoKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUGVyc29uT2JqWydxdWVzdGlvbkxpc3QnXSkpIHtcbiAgICAgICAgLy8gc2luZ2xlUGVyc29uT2JqWydxdWVzdGlvbkxpc3QnXS5mb3JFYWNoKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgLy8gaWYgKFxuICAgICAgICAvLyAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSkgJiZcbiAgICAgICAgLy8gICAoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PVxuICAgICAgICAvLyAgICAgJ1RFTExfVVNfTU9SRScgfHxcbiAgICAgICAgLy8gICAgIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udG9VcHBlckNhc2UoKS5yZXBsYWNlQWxsKCcgJywgJ18nKSA9PT1cbiAgICAgICAgLy8gICAgICAgJ0JBU0lDX0RFVEFJTFMnKVxuICAgICAgICAvLyApIHtcbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBoZWlnaHQgaW4gY21cbiAgICAgICAgICBsZXQgaGVpZ2h0SW5DZW50aW1ldGVyT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxuICAgICAgICAgICAgKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFQnIHx8IG9ialsncXVlc3Rpb25JZCddID09PSB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J11cbiAgICAgICAgICApO1xuICAgICAgICAgIGxldCBoZWlnaHRJbkluY2hlc09iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcbiAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUSScgfHwgb2JqWydxdWVzdGlvbklkJ10gPT09IHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXVxuICAgICAgICAgICk7XG4gICAgICAgICAgbGV0IGhlaWdodEluRmVldE9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcbiAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicgfHwgb2JqWydxdWVzdGlvbklkJ10gPT09IHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J10gPT09ICdDTScgJiZcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DZW50aW1ldGVyT2JqKSAmJlxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmopICYmXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J11cbiAgICAgICAgICAgICkgJiYgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXVxuICAgICAgICAgICAgKSAmJiAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBwYXNzIGhlaWdodCBpbiBjbSBvYmpcbiAgICAgICAgICAgIGxldCBjbU9iakluQW5zd2Vyc2luZGV4OiBhbnkgPSBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxuICAgICAgICAgICAgICAgIG9iai5xdWVzdGlvbklkID09PSBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXSAmJlxuICAgICAgICAgICAgICAgIG9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ11cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoY21PYmpJbkFuc3dlcnNpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tjbU9iakluQW5zd2Vyc2luZGV4XVsnYW5zd2VyJ10gPVxuICAgICAgICAgICAgICAgIHBhcnNlSW50KFxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddXG4gICAgICAgICAgICAgICAgKS50b1N0cmluZygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgYW5zd2VyOiBwYXJzZUludChcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXVxuICAgICAgICAgICAgICAgICkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxuICAgICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcbiAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IGhlaWdodEluQ2VudGltZXRlck9ialswXVsnY2x1c3RlcklkJ10sXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBoZWlnaHQgaW4gaW5jaGVzXG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXM6IGFueSA9IChcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddICogMC4zOTM3MDFcbiAgICAgICAgICAgICkudG9GaXhlZCgyKTtcbiAgICAgICAgICAgIGxldCBoZWlnaHRJbkZlZXQ6IGFueSA9XG4gICAgICAgICAgICAgIHBhcnNlRmxvYXQoKGhlaWdodEluSW5jaGVzIC8gMTIpLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXSkgPiAxMlxuICAgICAgICAgICAgICAgID8gKGhlaWdodEluSW5jaGVzIC8gMTIpLnRvRml4ZWQoMSlcbiAgICAgICAgICAgICAgICA6IChoZWlnaHRJbkluY2hlcyAvIDEyKS50b0ZpeGVkKDIpO1xuICAgICAgICAgICAgbGV0IGluY2hlc29iakluQW5zd2Vyc2luZGV4OiBhbnkgPVxuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICBvYmoucXVlc3Rpb25JZCA9PT0gaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXSAmJlxuICAgICAgICAgICAgICAgICAgb2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGluY2hlc29iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2luY2hlc29iakluQW5zd2Vyc2luZGV4XVsnYW5zd2VyJ10gPVxuICAgICAgICAgICAgICAgIHBhcnNlSW50KGhlaWdodEluSW5jaGVzKS50b1N0cmluZygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICBhbnN3ZXI6IHBhcnNlSW50KGhlaWdodEluSW5jaGVzKS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXG4gICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxuICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ2NsdXN0ZXJJZCddLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGhlaWdodCBpbiBmZWV0XG5cbiAgICAgICAgICAgIGxldCBmZWV0T2JqSW5BbnN3ZXJzaW5kZXg6IGFueSA9XG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgIChvYmo6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgIG9iai5xdWVzdGlvbklkID09PSBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSAmJlxuICAgICAgICAgICAgICAgICAgb2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGZlZXRPYmpJbkFuc3dlcnNpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tmZWV0T2JqSW5BbnN3ZXJzaW5kZXhdWydhbnN3ZXInXSA9XG4gICAgICAgICAgICAgICAgcGFyc2VGbG9hdChoZWlnaHRJbkZlZXQpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgICAgICBhbnN3ZXI6IHBhcnNlRmxvYXQoaGVpZ2h0SW5GZWV0KS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXG4gICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxuICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogaGVpZ2h0SW5GZWV0T2JqWzBdWydjbHVzdGVySWQnXSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnRkVFVCcgJiZcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXVxuICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXRPYmopKSB7XG4gICAgICAgICAgICAgIGxldCBoZWlnaHRJbkluY2hlczogYW55ID1cbiAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSkgKlxuICAgICAgICAgICAgICAgICAgMTIgK1xuICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddKTtcbiAgICAgICAgICAgICAgbGV0IGhlaWdodEluQ206IGFueSA9IChcbiAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KGhlaWdodEluSW5jaGVzKSAvIDAuMzkzNzAxXG4gICAgICAgICAgICAgICkudG9GaXhlZCgyKTtcbiAgICAgICAgICAgICAgbGV0IGZlZXRPYmpJbkFuc3dlcnNpbmRleDogYW55ID1cbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgIChvYmo6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgb2JqLnF1ZXN0aW9uSWQgPT09IGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddICYmXG4gICAgICAgICAgICAgICAgICAgIG9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ11cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoZmVldE9iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbZmVldE9iakluQW5zd2Vyc2luZGV4XVsnYW5zd2VyJ10gPVxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddLnRvU3RyaW5nKCkgK1xuICAgICAgICAgICAgICAgICAgJy4nICtcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J11cbiAgICAgICAgICAgICAgICAgIF0udG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgICBhbnN3ZXI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXS50b1N0cmluZygpICtcbiAgICAgICAgICAgICAgICAgICAgJy4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxuICAgICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxuICAgICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkZlZXRPYmpbMF1bJ2NsdXN0ZXJJZCddLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGxldCBpbmNoZXNvYmpJbkFuc3dlcnNpbmRleDogYW55ID1cbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgIChvYmo6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgb2JqLnF1ZXN0aW9uSWQgPT09IGhlaWdodEluSW5jaGVzT2JqWzBdWydxdWVzdGlvbklkJ10gJiZcbiAgICAgICAgICAgICAgICAgICAgb2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChpbmNoZXNvYmpJbkFuc3dlcnNpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2luY2hlc29iakluQW5zd2Vyc2luZGV4XVsnYW5zd2VyJ10gPVxuICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoaGVpZ2h0SW5JbmNoZXMpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGhlaWdodEluSW5jaGVzT2JqWzBdWydxdWVzdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgICBhbnN3ZXI6IHBhcnNlSW50KGhlaWdodEluSW5jaGVzKS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcbiAgICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ2NsdXN0ZXJJZCddLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGxldCBjbU9iakluQW5zd2Vyc2luZGV4OiBhbnkgPVxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICBvYmoucXVlc3Rpb25JZCA9PT0gaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ10gJiZcbiAgICAgICAgICAgICAgICAgICAgb2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChjbU9iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbY21PYmpJbkFuc3dlcnNpbmRleF1bJ2Fuc3dlciddID1cbiAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGhlaWdodEluQ20pLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgICAgYW5zd2VyOiBwYXJzZUludChoZWlnaHRJbkNtKS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcbiAgICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydjbHVzdGVySWQnXSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DZW50aW1ldGVyT2JqKSAmJlxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGxldCBoZWlnaHRJbkNtQW5zd2VyT2JqZWN0OiBhbnkgPSBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT1cbiAgICAgICAgICAgICAgICBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNtQW5zd2VyT2JqZWN0KSAmJlxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ21BbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2hlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddXSA9XG4gICAgICAgICAgICAgICAgaGVpZ2h0SW5DbUFuc3dlck9iamVjdFswXVsnYW5zd2VyJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkluY2hlc09iaikgJiZcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGxldCBoZWlnaHRJbkluY2hlc0Fuc3dlck9iamVjdDogYW55ID1cbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PVxuICAgICAgICAgICAgICAgICAgaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzQW5zd2VyT2JqZWN0KSAmJlxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzQW5zd2VyT2JqZWN0WzBdWydhbnN3ZXInXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1toZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddXSA9XG4gICAgICAgICAgICAgICAgaGVpZ2h0SW5JbmNoZXNBbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0T2JqKSAmJlxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGxldCBoZWlnaHRJbkZlZXRBbnN3ZXJPYmplY3Q6IGFueSA9XG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT1cbiAgICAgICAgICAgICAgICAgIGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0QW5zd2VyT2JqZWN0KSAmJlxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldEFuc3dlck9iamVjdFswXVsnYW5zd2VyJ10pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ11dID1cbiAgICAgICAgICAgICAgICBoZWlnaHRJbkZlZXRBbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgLy8gfVxuICAgICAgICBsZXQgaXNOb0Rpc3BsYXlRdWVzdGlvbkluU2VjdGlvbjogYW55ID0gIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXVxuICAgICAgICApXG4gICAgICAgICAgPyBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXG4gICAgICAgICAgICAgIChzaW5nbGVEYXRhOiBhbnkpID0+IHNpbmdsZURhdGFbJ3F1ZXN0aW9uVHlwZSddID09PSAnTk9ESVNQTEFZJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgIDogW107XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXSB8fFxuICAgICAgICAgICAgaXNOb0Rpc3BsYXlRdWVzdGlvbkluU2VjdGlvbi5sZW5ndGggPiAwKSAmJlxuICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10pXG4gICAgICAgICkge1xuICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ2hhcmRDb3B5TGFuZycpIHtcbiAgICAgICAgICAgICAgaWYgKHNpbmdsZVF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dID0gJ0VuZ2xpc2gnO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGNoZWNrZWRPcHRpb25zQXJyOiBhbnkgPSBbXTtcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSkpIHtcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLmZvckVhY2goXG4gICAgICAgICAgICAgICAgKHNpbmdsZURvbWFpblZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cbiAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZE9wdGlvbnNBcnIucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnXG4gICAgICAgICAgICAgICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgLy8gZm9yIGNoZWNrYm94IHF1ZXN0aW9uXG5cbiAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0OiBhbnkgPVxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgKHNpbmdsZUFuc3dlck9iajogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVBbnN3ZXJPYmpbJ3F1ZXN0aW9uSWQnXSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddICYmXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZUFuc3dlck9ialsncGVyc29uVVdJZCddID09PVxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChxdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgICAgYW5zd2VyOiAnJyxcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXG4gICAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXG4gICAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IHNpbmdsZVF1ZXN0aW9uWydjbHVzdGVySWQnXSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIG9ialsnYW5zd2VyJ10gPSB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaChvYmopO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbcXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3RdW1xuICAgICAgICAgICAgICAgICAgJ2Fuc3dlcidcbiAgICAgICAgICAgICAgICBdID0gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0udG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSAhPT0gJ0NIRUNLQk9YJyAmJlxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAvLyBub24gY2hlY2tib3ggcXVlc3Rpb25cbiAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0OiBhbnkgPVxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgKHNpbmdsZUFuc3dlck9iajogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVBbnN3ZXJPYmpbJ3F1ZXN0aW9uSWQnXSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddICYmXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZUFuc3dlck9ialsncGVyc29uVVdJZCddID09PVxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChxdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgICAgICAgYW5zd2VyOlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDQUxFTkRBUidcbiAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0sXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxuICAgICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxuICAgICAgICAgICAgICAgICAgY2x1c3RlcklkOiBzaW5nbGVRdWVzdGlvblsnY2x1c3RlcklkJ10sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW3F1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0XVtcbiAgICAgICAgICAgICAgICAgICdhbnN3ZXInXG4gICAgICAgICAgICAgICAgXSA9XG4gICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDQUxFTkRBUidcbiAgICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZihzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSkpIHtcbiAgICAgICAgICAgIC8vICAgbGV0IHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0IDogYW55ID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoKHNpbmdsZUFuc3dlck9iaiA6IGFueSkgPT4gKHNpbmdsZUFuc3dlck9ialsncXVlc3Rpb25JZCddID09PSBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddICAmJiBzaW5nbGVBbnN3ZXJPYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddKSlcbiAgICAgICAgICAgIC8vICAgaWYocXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3QgPT09IC0xKSB7XG4gICAgICAgICAgICAvLyAgICAgbGV0IG9iajogYW55ID0ge1xuICAgICAgICAgICAgLy8gICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxuICAgICAgICAgICAgLy8gICAgICAgcXVlc3Rpb25JZDogc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcbiAgICAgICAgICAgIC8vICAgICAgIGFuc3dlcjogc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInID8gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0obmV3IERhdGUodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0pLCAneXl5eS1NTS1kZCcpIDogdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0sXG4gICAgICAgICAgICAvLyAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxuICAgICAgICAgICAgLy8gICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxuICAgICAgICAgICAgLy8gICAgICAgY2x1c3RlcklkOiBzaW5nbGVRdWVzdGlvblsnY2x1c3RlcklkJ10sXG4gICAgICAgICAgICAvLyAgICAgfTtcbiAgICAgICAgICAgIC8vICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2gob2JqKTtcbiAgICAgICAgICAgIC8vICAgICBpZihzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcbiAgICAgICAgICAgIC8vICAgICAgIGxldCBjaGVja2VkT3B0aW9uc0FyciA6IGFueSA9IFtdO1xuICAgICAgICAgICAgLy8gICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10pKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKChzaW5nbGVEb21haW5WYWx1ZSA6IGFueSkgPT4ge1xuICAgICAgICAgICAgLy8gICAgICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pICYmIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBjaGVja2VkT3B0aW9uc0Fyci5wdXNoKHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ10pO1xuICAgICAgICAgICAgLy8gICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyAgICAgICB9XG4gICAgICAgICAgICAvLyAgICAgICBvYmpbJ2Fuc3dlciddID0gY2hlY2tlZE9wdGlvbnNBcnIudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyAgICAgLy8gb2JqZWN0IGFscmVhZHkgdGhlcmUgc28gb3ZlciByaWRlIHRoZSBuZXcgYW5zd2VyXG4gICAgICAgICAgICAvLyAgICAgaWYoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnKSB7XG4gICAgICAgICAgICAvLyAgICAgICBsZXQgY2hlY2tlZE9wdGlvbnNBcnIgOiBhbnkgPSBbXTtcbiAgICAgICAgICAgIC8vICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddKSkge1xuICAgICAgICAgICAgLy8gICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaCgoc2luZ2xlRG9tYWluVmFsdWUgOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSAmJiB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkge1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgY2hlY2tlZE9wdGlvbnNBcnIucHVzaChzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKTtcbiAgICAgICAgICAgIC8vICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gICAgICAgfVxuICAgICAgICAgICAgLy8gICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1txdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdF1bJ2Fuc3dlciddID0gY2hlY2tlZE9wdGlvbnNBcnIudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIC8vICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1txdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdF1bJ2Fuc3dlciddID0gIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NBTEVOREFSJyA/IHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKG5ldyBEYXRlKHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dKSwgJ3l5eXktTU0tZGQnKSA6IHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dO1xuICAgICAgICAgICAgLy8gICAgIH1cblxuICAgICAgICAgICAgLy8gICB9XG5cbiAgICAgICAgICAgIC8vIH1cblxuICAgICAgICAgICAgLy8gaWYgKHNpbmdsZVF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAncmV0RmluYW5jRWxnYmwnKSB7XG4gICAgICAgICAgICAvLyAgIGxldCBmaW5hbmNpYWxFbGlnaWJpbGl0eUFuc3dlckluZGV4OiBhbnkgPSBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleCgoc2luZ2xlQW5zd2VyT2JqOiBhbnkpID0+IChzaW5nbGVBbnN3ZXJPYmpbJ3F1ZXN0aW9uSWQnXSA9PT0gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSAmJiBzaW5nbGVBbnN3ZXJPYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddKSlcbiAgICAgICAgICAgIC8vICAgbGV0IG9iajogYW55ID0ge1xuICAgICAgICAgICAgLy8gICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcbiAgICAgICAgICAgIC8vICAgICBxdWVzdGlvbklkOiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddLFxuICAgICAgICAgICAgLy8gICAgIGFuc3dlcjogdGhpcy5zaGFyZWRTZXJ2aWNlLmZpbmFuY2lhbEVsaWdpYmlsaXR5LFxuICAgICAgICAgICAgLy8gICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXG4gICAgICAgICAgICAvLyAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxuICAgICAgICAgICAgLy8gICAgIGNsdXN0ZXJJZDogc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddLFxuICAgICAgICAgICAgLy8gICB9O1xuICAgICAgICAgICAgLy8gICBpZiAoZmluYW5jaWFsRWxpZ2liaWxpdHlBbnN3ZXJJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIC8vICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2gob2JqKTtcbiAgICAgICAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2ZpbmFuY2lhbEVsaWdpYmlsaXR5QW5zd2VySW5kZXhdWydhbnN3ZXInXSA9IHRoaXMuc2hhcmVkU2VydmljZS5maW5hbmNpYWxFbGlnaWJpbGl0eTtcbiAgICAgICAgICAgIC8vICAgfVxuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIH0pO1xuICAgICAgICAvLyB9XG4gICAgICB9KTtcbiAgICAgIGxldCBkaXN0aW5jdFBlcnNvbklkRnJvbVJlcXVlc3Q6IGFueSA9IFtcbiAgICAgICAgLi4ubmV3IFNldChcbiAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLm1hcCgoaXRlbTogYW55KSA9PlxuICAgICAgICAgICAgaXRlbS5wZXJzb25VV0lkLnRvU3RyaW5nKClcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICBdO1xuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZGlzdGluY3RQZXJzb25JZEZyb21SZXF1ZXN0KSkge1xuICAgICAgICBtYWluUmVxdWVzdEZvckxhID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXG4gICAgICAgICAgKHNpbmdsZUFuc3dlcjogYW55KSA9PlxuICAgICAgICAgICAgc2luZ2xlQW5zd2VyWydwZXJzb25VV0lkJ10gPT09IGRpc3RpbmN0UGVyc29uSWRGcm9tUmVxdWVzdFswXVxuICAgICAgICApO1xuICAgICAgICBpZiAoZGlzdGluY3RQZXJzb25JZEZyb21SZXF1ZXN0Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yUGggPSBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbHRlcihcbiAgICAgICAgICAgIChzaW5nbGVBbnN3ZXI6IGFueSkgPT5cbiAgICAgICAgICAgICAgc2luZ2xlQW5zd2VyWydwZXJzb25VV0lkJ10gPT09IGRpc3RpbmN0UGVyc29uSWRGcm9tUmVxdWVzdFsxXVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxldCBzYXZlUmVxdWVzdHNBcnJheTogYW55ID0gW107XG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShtYWluUmVxdWVzdEZvckxhKSAmJiB0aGlzLnBlcnNvblR5cGUoKSAhPT0gJ1BIJykge1xuICAgICAgICB0aGlzLnNhdmVRdWVzdGlvblJlcXVlc3RMYSA9IG1haW5SZXF1ZXN0Rm9yTGE7XG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXG4gICAgICAgICAgJ3NhdmVRdWVzdGlvblJlcXVlc3RMYScsXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkobWFpblJlcXVlc3RGb3JMYSlcbiAgICAgICAgKTtcbiAgICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLmNsdXN0ZXJJZCgpKSkge1xuICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oYExBXyR7dGhpcy5jbHVzdGVySWQoKX1gLCBKU09OLnN0cmluZ2lmeShtYWluUmVxdWVzdEZvckxhKSlcbiAgICAgICAgfVxuICAgICAgICAvLyBzYXZlUmVxdWVzdHNBcnJheS5wdXNoKHRoaXMuY29tbW9uU2VydmljZS5zYXZlQW5zd2VycyhtYWluUmVxdWVzdEZvckxhLCAhY2FsbGVkRnJvbUNvbmZpcm1hdGlvbikpO1xuICAgICAgICAvLyBzYXZlUmVxdWVzdHNBcnJheS5wdXNoKHRoaXMuY29tbW9uU2VydmljZS5zYXZlQW5zd2VycyhtYWluUmVxdWVzdEZvckxhLCAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudCkgJiYgdGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudCAmJiB0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UuaXNFZGl0QWxsb3dlZEZvckFnZW50LnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJykgPyB0cnVlIDogIWNhbGxlZEZyb21Db25maXJtYXRpb24pKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KG1haW5SZXF1ZXN0Rm9yTGEpICYmIHRoaXMucGVyc29uVHlwZSgpID09PSAnUEgnKSB7XG4gICAgICAgIHRoaXMuc2F2ZVF1ZXN0aW9uUmVxdWVzdFBoID0gbWFpblJlcXVlc3RGb3JMYTtcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgICAgICAnc2F2ZVF1ZXN0aW9uUmVxdWVzdFBoJyxcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShtYWluUmVxdWVzdEZvckxhKVxuICAgICAgICApO1xuICAgICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuY2x1c3RlcklkKCkpKSB7XG4gICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShgUEhfJHt0aGlzLmNsdXN0ZXJJZCgpfWAsIEpTT04uc3RyaW5naWZ5KG1haW5SZXF1ZXN0Rm9yTGEpKVxuICAgICAgICB9XG4gICAgICAgIC8vICBzYXZlUmVxdWVzdHNBcnJheS5wdXNoKHRoaXMuY29tbW9uU2VydmljZS5zYXZlQW5zd2VycyhtYWluUmVxdWVzdEZvclBoLCAhY2FsbGVkRnJvbUNvbmZpcm1hdGlvbikpO1xuICAgICAgICAvLyBzYXZlUmVxdWVzdHNBcnJheS5wdXNoKHRoaXMuY29tbW9uU2VydmljZS5zYXZlQW5zd2VycyhtYWluUmVxdWVzdEZvclBoLCAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudCkgJiYgdGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudCAmJiB0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UuaXNFZGl0QWxsb3dlZEZvckFnZW50LnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJykgPyB0cnVlIDogIWNhbGxlZEZyb21Db25maXJtYXRpb24pKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy52YWxpZGF0ZU1lZGljYWxRdWVzdGlvbnMoKTtcbiAgfVxuXG4gIGdldENvb2tpZVZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgY29va2llID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7XG4gICAgbGV0IHRva2VuTmFtZSA9ICcnO1xuICAgIGxldCB0b2tlblZhbHVlID0gJyc7XG4gICAgY29uc3QgaW5kZXgyID0gMjtcbiAgICBjb29raWUuZm9yRWFjaCgoZGF0YSkgPT4ge1xuICAgICAgaWYgKGRhdGEuc3BsaXQoJz0nKVswXS5pbmNsdWRlcyhuYW1lKSAmJiAhIWRhdGEuc3BsaXQoJz0nKVsxXSkge1xuICAgICAgICB0b2tlbk5hbWUgPSBkYXRhLnNwbGl0KCc9JylbMF0udHJpbSgpO1xuICAgICAgICB0b2tlblZhbHVlID0gZGF0YS5zcGxpdCgnPScpWzFdO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBuYW1lID09PSAnbGluaycgJiZcbiAgICAgICAgZGF0YS5zcGxpdCgnPScpWzBdLmluY2x1ZGVzKG5hbWUpICYmXG4gICAgICAgIGRhdGEuc3BsaXQoJz0nKVtpbmRleDJdICE9PSBudWxsICYmXG4gICAgICAgIGRhdGEuc3BsaXQoJz0nKVtpbmRleDJdICE9PSB1bmRlZmluZWRcbiAgICAgICkge1xuICAgICAgICB0b2tlblZhbHVlID0gdG9rZW5WYWx1ZSArICc9JyArIGRhdGEuc3BsaXQoJz0nKVtpbmRleDJdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0b2tlblZhbHVlO1xuICB9XG5cbiAgdmFsaWRhdGVNZWRpY2FsUXVlc3Rpb25zKGZvY3VzT25JblZhbGlkIDogYW55ID0gZmFsc2UpIHtcbiAgICBsZXQgaXNWYWxpZDogYW55ID0gdHJ1ZTtcbiAgICBsZXQgdmFsaWRhdGlvbk1lc3NhZ2UgOiBhbnkgPSAnJztcbiAgICB0aGlzLnF1ZXN0aW9uTGlzdC5mb3JFYWNoKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddKSAmJiBpc1ZhbGlkKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10pICYmXG4gICAgICAgICAgKHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udG9VcHBlckNhc2UoKS5yZXBsYWNlQWxsKCcgJywgJ18nKSA9PT1cbiAgICAgICAgICAgICdURUxMX1VTX01PUkUnIHx8XG4gICAgICAgICAgICBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09XG4gICAgICAgICAgICAgICdCQVNJQ19ERVRBSUxTJykgJiZcbiAgICAgICAgICBpc1ZhbGlkXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGhlaWdodCBlbnRlcmVkIGluIGZlZXRcbiAgICAgICAgICBpZiAodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J10gPT09ICdGRUVUJykge1xuICAgICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxuICAgICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEknXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbGV0IGhlaWdodEluRmVldE9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcbiAgICAgICAgICAgICAgKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkluY2hlc09iaikgJiZcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXRPYmopICYmXG4gICAgICAgICAgICAgICh0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddXG4gICAgICAgICAgICAgICkgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J11cbiAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIEhlaWdodCBpbiBGZWV0IGFuZCBJbmNoZXNgO1xuICAgICAgICAgICAgICBpZihmb2N1c09uSW5WYWxpZCkge1xuICAgICAgICAgICAgICAgIGxldCBxdWVzdGlvbklkOiBhbnkgPSAnbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0JztcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJiAhc2F2ZWRyYWZ0ICYmIHJlZGlyZWN0KSB7XG4gICAgICAgICAgICAgIC8vIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcbiAgICAgICAgICAgICAgLy8gICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcbiAgICAgICAgICAgICAgLy8gICB0aGlzLnNoYXJlZFNlcnZpY2UucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcbiAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAvLyBsZXQgcXVlc3Rpb25JZDogYW55ID0gaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10gKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAgICAgICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xuICAgICAgICAgICAgICAvLyBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcbiAgICAgICAgICAgICAgLy8gICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAgICAgICAgICAgLy8gICAgIG1lc3NhZ2U6ICdQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIEZlZXQgYW5kIEluY2hlcyBmb3IgJyArIHJvbGVcbiAgICAgICAgICAgICAgLy8gICB9KTtcbiAgICAgICAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gdGhpcy52YWxpZGF0aW9uU2VydmljZS5vcGVuU25hY2tCYXIoJ1BsZWFzZSBlbnRlciBIZWlnaHQgaW4gRmVldCBhbmQgSW5jaGVzIGZvciAnICsgcm9sZSwgJ0Nsb3NlJyk7XG5cbiAgICAgICAgICAgICAgLy8gfVxuXG4gICAgICAgICAgICAgIC8vIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBoZWlnaHQgaW4gY21cbiAgICAgICAgICBsZXQgaGVpZ2h0SW5DZW50aW1ldGVyT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxuICAgICAgICAgICAgKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFQnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0NNJyAmJlxuICAgICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J11cbiAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DZW50aW1ldGVyT2JqKSAmJlxuICAgICAgICAgICAgaXNWYWxpZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIEhlaWdodCBpbiBjZW50aW1ldGVyYDtcblxuICAgICAgICAgICAgaWYoZm9jdXNPbkluVmFsaWQpIHtcbiAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9ICdtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnO1xuICAgICAgICAgICAgICB0aGlzLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBiYXNpYyBxdWVzdGlvbnNcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqKSAmJlxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXG4gICAgICAgICAgICBpc1ZhbGlkICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdJTUFHRSBURVhUJyAmJlxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdRSFQnICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdERUNMQVJBVElPTicgJiZcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnaGFyZENvcHlMYW5nJyAmJlxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnUEFTU1BPUlRfVVBMT0FEJyAmJlxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdRSFRGJyAmJlxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdRSFRJJyAmJlxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXS50b1N0cmluZygpID09PSAnTicgJiZcbiAgICAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV1cbiAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgIC8vICgoc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnQ0hFQ0tCT1gnICYmXG4gICAgICAgICAgICAvLyAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV1bc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV0pKSB8fFxuICAgICAgICAgICAgLy8gICAoc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmICF0aGlzLnZhbGlkYXRlQ2hlY2tCb3hGaWVsZChzaW5nbGVRdWVzdGlvbk9iaiwgc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pKSlcbiAgICAgICAgICAgIGlzVmFsaWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhbGlkYXRpb25NZXNzYWdlID0gYFBsZWFzZSBlbnRlciBhbGwgdGhlIGRldGFpbHMgaW4gJHtzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddfWA7XG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmKGZvY3VzT25JblZhbGlkKSB7XG4gICAgICAgICAgICAgIGxldCBxdWVzdGlvbklkOiBhbnkgPSBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddO1xuICAgICAgICAgICAgICB0aGlzLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGlmIChcbiAgICAgICAgICAvLyAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ1BBU1NQT1JUX1VQTE9BRCcgJiZcbiAgICAgICAgICAvLyAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJyAmJlxuICAgICAgICAgIC8vICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXG4gICAgICAgICAgLy8gKSB7XG4gICAgICAgICAgLy8gICBsZXQgZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9iajogYW55ID0gdGhpcy52YWxpZGF0aW9uU2VydmljZS5xdWVzdGlvbnNQYXNzcG9ydFVwbG9hZE9iai5maWx0ZXIoKHNpbmdsZU9iajogYW55KSA9PiAoc2luZ2xlT2JqWydwZXJzb25UeXBlJ10gPT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddICYmIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVPYmpbJ2Rtc0lkJ10pKSk7XG4gICAgICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqKSkge1xuICAgICAgICAgIC8vICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQoYCR7ZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsncXVlc3Rpb25UeXBlJ119XyR7ZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsndHlwZSddfV8ke2ZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ3BlcnNvblR5cGUnXX1gKTtcbiAgICAgICAgICAvLyAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcbiAgICAgICAgICAvLyAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XG4gICAgICAgICAgLy8gICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgICAgICAgLy8gICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIHVwbG9hZCBwYXNzcG9ydCAnICsgZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsnbGFiZWwnXSArICcgZG9jdW1lbnQgZm9yICcgKyByb2xlXG4gICAgICAgICAgLy8gICAgICAgfSk7XG4gICAgICAgICAgLy8gICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5vcGVuU25hY2tCYXIoJ1BsZWFzZSB1cGxvYWQgcGFzc3BvcnQgJyArIGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ2xhYmVsJ10gKyAnIGRvY3VtZW50IGZvciAnICsgcm9sZSwgJ0Nsb3NlJyk7XG4gICAgICAgICAgLy8gICAgICAgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcbiAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xuICAgICAgICAgIC8vICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgICAgICAgLy8gICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xuICAgICAgICAgIC8vICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmICF0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcbiAgICAgICAgICAvLyAgICAgICAgIGlmIChyb2xlID09PSAnbGlmZSBhc3N1cmVkJykge1xuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgICAgICAgLy8gICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdwb2xpY3kgaG9sZGVyJykge1xuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfUEgnKTtcbiAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XG4gICAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgICAgLy8gICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnam9pbnRsaWZlJykge1xuICAgICAgICAgIC8vICAgICAgICAgY29uc29sZS5sb2coXCJqb2ludCBsaWZlIGNhc2VcIik7XG4gICAgICAgICAgLy8gICAgICAgfVxuICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgLy8gICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAvLyAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIC8vICAgfVxuXG4gICAgICAgICAgLy8gfVxuICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGRlY2xhcmF0aW9uIHF1ZXN0aW9uc1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGlzVmFsaWQgJiZcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqLnF1ZXN0aW9uVHlwZSA9PT0gJ0RFQ0xBUkFUSU9OJyAmJlxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10pICYmXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTidcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKGlzVmFsaWQgJiZcbiAgICAgICAgICAgICAgICAvLyAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXSkgJiZcbiAgICAgICAgICAgICAgICAvLyAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pICYmXG4gICAgICAgICAgICAgICAgLy8gICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXSkgJiZcbiAgICAgICAgICAgICAgICAvLyAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ10pICYmXG4gICAgICAgICAgICAgICAgLy8gICAoKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddXSA9PT1cbiAgICAgICAgICAgICAgICAgICdOJykgfHxcbiAgICAgICAgICAgICAgIXRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ11dIHx8XG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC8vIClcbiAgICAgICAgICAgICAgLy8gfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgIHZhbGlkYXRpb25NZXNzYWdlID0gYFBsZWFzZSBlbnRlciBhbGwgdGhlIGRldGFpbHMgaW4gJHtzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddfWA7XG5cbiAgICAgICAgICAgICAgaWYoZm9jdXNPbkluVmFsaWQpIHtcbiAgICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JZDogYW55ID0gc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgbWVkaWNhbCBzdWIgcXVlc3Rpb25zXG4gICAgICAgICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSkpIHtcbiAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UuZm9yRWFjaCgocXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgIC8vICAgICBpZiAoXG4gICAgICAgICAgLy8gICAgICAgdGhpcy5zaG93U3ViUXVlc3Rpb24ocXVlc3Rpb24pICYmXG4gICAgICAgICAgLy8gICAgICAgcXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddICE9PSAnSU1BR0UgVEVYVCcgJiZcbiAgICAgICAgICAvLyAgICAgICBxdWVzdGlvblsnb3B0aW9uYWxRdWVzdGlvbiddLnRvU3RyaW5nKCkgPT09ICdOJyAmJlxuICAgICAgICAgIC8vICAgICAgICgocXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddICE9PSAnQ0hFQ0tCT1gnICYmXG4gICAgICAgICAgLy8gICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkJ11bcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0pKSB8fFxuICAgICAgICAgIC8vICAgICAgICAgKHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJiAhdGhpcy52YWxpZGF0ZUNoZWNrQm94RmllbGQocXVlc3Rpb24sICdsaWZlQXNzdXJlZCcpKSlcbiAgICAgICAgICAvLyAgICAgKSB7XG4gICAgICAgICAgLy8gICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgIC8vICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCAmJiAhc2F2ZWRyYWZ0KSB7XG4gICAgICAgICAgLy8gICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XG4gICAgICAgICAgLy8gICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAgICAgICAvLyAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBhbnN3ZXIgYWxsIG1lZGljYWwgc3ViIHF1ZXN0aW9ucyAnICsgcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSArICcgJyArIHF1ZXN0aW9uWydxdWVzdGlvblRleHQnXVxuICAgICAgICAgIC8vICAgICAgICAgfSk7XG4gICAgICAgICAgLy8gICAgICAgfVxuICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgLy8gICB9KTtcbiAgICAgICAgICAvLyB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGZhdGNoIGRlY2xhcmF0aW9uXG4gICAgICAgIC8vIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvbi5xdWVzdGlvbnMpICYmIGlzVmFsaWQpe1xuICAgICAgICAvLyBzaW5nbGVTZWN0aW9uLnF1ZXN0aW9ucy5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iajphbnkpID0+IHtcbiAgICAgICAgLy8gICBpZihpc1ZhbGlkICYmIHNpbmdsZVF1ZXN0aW9uT2JqLnF1ZXN0aW9uVHlwZSA9PT0gJ0RFQ0xBUkFUSU9OJyAmJiBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcbiAgICAgICAgLy8gICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxuICAgICAgICAvLyAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTidcbiAgICAgICAgLy8gICAgICl7XG4gICAgICAgIC8vICAgICAgIGlmKCBpc1ZhbGlkICYmXG4gICAgICAgIC8vICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV0pICYmXG4gICAgICAgIC8vICAgICAgICAgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKSAmJlxuICAgICAgICAvLyAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF0pICYmXG4gICAgICAgIC8vICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKSAgJiZcbiAgICAgICAgLy8gICAgICAgICAgICgoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV1bc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSAmJlxuICAgICAgICAvLyAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSA9PT0gJ04nKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkpKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKSkge1xuXG4gICAgICAgIC8vICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xuICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcbiAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAvLyAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5sb2FkaW5nQWdlbnRwb3J0YWwgJiYgIXNhdmVkcmFmdCkge1xuICAgICAgICAvLyBsZXQgcXVlc3Rpb25JZDogYW55ID0gc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25JZCArICdfJyArIHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xuICAgICAgICAvLyAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcbiAgICAgICAgLy8gICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xuICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xuICAgICAgICAvLyAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgICAgIC8vICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2Ugc2VsZWN0IGFsbCB0aGUgZGV0YWlscyBpbiAnICsgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSArICcgZm9yICcgKyByb2xlXG4gICAgICAgIC8vICAgICAgICAgICB9KTtcbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyAgICAgICAgICB9XG4gICAgICAgIC8vICAgICAgIH1cbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vIH0pO1xuICAgICAgICAvLyB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVHlwZSgpKSAmJiB0aGlzLnBlcnNvblR5cGUgPT09ICdQSCcpIHtcbiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2lzTWVkaWNhbFF1ZXN0aW9uc1ZhbGlkRm9yUEgnLCBpc1ZhbGlkKTtcbiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3ZhbGlkYXRpb25NZXNzYWdlRm9yTWVkaWNhbFF1ZXN0aW9uc0ZvclBIJywgdmFsaWRhdGlvbk1lc3NhZ2UpO1xuICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLmNsdXN0ZXJJZCgpKSkge1xuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGBQSF8ke3RoaXMuY2x1c3RlcklkKCl9X2lzVmFsaWRgLCBpc1ZhbGlkKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnaXNNZWRpY2FsUXVlc3Rpb25zVmFsaWQnLCBpc1ZhbGlkKTtcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCd2YWxpZGF0aW9uTWVzc2FnZUZvck1lZGljYWxRdWVzdGlvbnMnLCB2YWxpZGF0aW9uTWVzc2FnZSk7XG5cbiAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuY2x1c3RlcklkKCkpKSB7XG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oYExBXyR7dGhpcy5jbHVzdGVySWQoKX1faXNWYWxpZGAsIGlzVmFsaWQpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFsdWVDaGFuZ2VGb3JNdWx0aXNlbGVjdChxdWVzdGlvbiA6IGFueSkge1xuICAgIGlmIChxdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ0xpZmVNZWRpQ25kdG4nIHx8IHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnTWVkaUNuZHRuJyApIHtcbiAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dLmxlbmd0aCA+IDBcblxuICAgICAgLy8gaWYgbm9uZSBpcyBzZWxlY3RlZCB0aGVuIHJlbW92ZSBhbGwgYW5kIGNhbGwgQVBJXG4gICAgICBsZXQgaXNOb25lU2VsZWN0ZWQgOiBhbnkgPSB0aGlzLnBlcnNvblV3QW5zd2Vyc1txdWVzdGlvblsncXVlc3Rpb25JZCddXS5maW5kSW5kZXgoKHNpbmdsZU9iaiA6YW55KSA9PiBzaW5nbGVPYmogPT09ICdOb01lZEhpc3RyeScpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGlzTm9uZVNlbGVjdGVkICE9PSAgLTFcbiAgICAgICkge1xuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1txdWVzdGlvblsncXVlc3Rpb25JZCddXSA9IHRoaXMucGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dID0gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0uZmlsdGVyKChzaW5nbGVPYmogOiBhbnkpID0+IHNpbmdsZU9iaiA9PT0gJ05vTWVkSGlzdHJ5JylcbiAgICAgIH1cbiAgICAgIHRoaXMubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlID0gW107XG4gICAgICBpZiAoXG4gICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkxpc3RcbiAgICAgICAgKSkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uTGlzdCA9IHRoaXMucXVlc3Rpb25MaXN0LmZpbHRlcigoc2luZ2xlU2VjdGlvbjogYW55KSA9PiAoKHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddKSB8fCAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddKSAmJiAhc2luZ2xlU2VjdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSkpICkpO1xuICAgICAgfVxuICAgICAgLy8gbGV0IGN1cnJlbnRTZWN0aW9uSW5kZXg6IGFueSA9IHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleChcbiAgICAgIC8vICAgKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PlxuICAgICAgLy8gICAgIHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PVxuICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd01hc3Rlck9ialtzaW5nbGVQZXJzb25JbmRleF1bJ3JvbGUnXVxuICAgICAgLy8gKTtcbiAgICAgIC8vIHJlbW92ZSBtZWRpY2FsIHN1YiBxdWVzdGlvbnMgZnJvbSBxdWVzdGlvbnMgcmVzcG9uc2UgbGlzdFxuICAgICAgLy8gaWYgKFxuICAgICAgLy8gICBjdXJyZW50U2VjdGlvbkluZGV4ICE9PSB0aGlzLm51bWJlckNvbnN0YW50Lm51bWJlcm1pbnVzMSAmJlxuICAgICAgLy8gICAhdGhpcy5zaGFyZWRjaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW1xuICAgICAgLy8gICAgICAgY3VycmVudFNlY3Rpb25JbmRleFxuICAgICAgLy8gICAgIF1cbiAgICAgIC8vICAgKSAmJlxuICAgICAgLy8gICAhdGhpcy5zaGFyZWRjaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW1xuICAgICAgLy8gICAgICAgY3VycmVudFNlY3Rpb25JbmRleFxuICAgICAgLy8gICAgIF1bJ3F1ZXN0aW9uTGlzdCddXG4gICAgICAvLyAgIClcbiAgICAgIC8vICkge1xuICAgICAgICAvLyB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtcbiAgICAgICAgLy8gICBjdXJyZW50U2VjdGlvbkluZGV4XG4gICAgICAgIC8vIF1bJ3F1ZXN0aW9uTGlzdCddID0gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbXG4gICAgICAgIC8vICAgJ3F1ZXN0aW9uc1Jlc3BvbnNlJ1xuICAgICAgICAvLyBdW2N1cnJlbnRTZWN0aW9uSW5kZXhdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoXG4gICAgICAgIC8vICAgKHNpbmdsZUxpc3RJdGVtOiBhbnkpID0+XG4gICAgICAgIC8vICAgICB0aGlzLnNoYXJlZGNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgIC8vICAgICAgIHNpbmdsZUxpc3RJdGVtWydpc01lZGljYWxTdWJRdWVzdGlvbiddXG4gICAgICAgIC8vICAgICApIHx8XG4gICAgICAgIC8vICAgICAoIXRoaXMuc2hhcmVkY2hlY2tJZlZhbHVlSXNFbXB0eShcbiAgICAgICAgLy8gICAgICAgc2luZ2xlTGlzdEl0ZW1bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ11cbiAgICAgICAgLy8gICAgICkgJiZcbiAgICAgICAgLy8gICAgICAgIXNpbmdsZUxpc3RJdGVtWydpc01lZGljYWxTdWJRdWVzdGlvbiddKVxuICAgICAgICAvLyApO1xuICAgICAgLy8gfVxuICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bXG4gICAgICAvLyAgICdxdWVzdGlvbkxpc3QnXG4gICAgICAvLyBdLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uOiBhbnksIGluZGV4OiBhbnkpID0+IHtcbiAgICAgIC8vICAgaWYgKHNpbmdsZVF1ZXN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddKSB7XG4gICAgICAvLyAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bXG4gICAgICAvLyAgICAgICAncXVlc3Rpb25MaXN0J1xuICAgICAgLy8gICAgIF0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfSk7XG5cbiAgICAgIC8vIHRoaXMucXVlc3Rpb25MaXN0ID0gdGhpcy5xdWVzdGlvbkxpc3QuZmlsdGVyKChzaW5nbGVTZWN0aW9uIDogYW55KSA9PiAoIXNpbmdsZVNlY3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10gfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10pKSk7XG4gICAgICAvLyB0aGlzLnF1ZXN0aW9uTGlzdC5mb3JFYWNoKChzaW5nbGVNYXN0ZXJPYmo6IGFueSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICAvLyAgIGlmIChzaW5nbGVNYXN0ZXJPYmpbJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10pIHtcbiAgICAgIC8vICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdNYXN0ZXJPYmpbc2luZ2xlUGVyc29uSW5kZXhdW1xuICAgICAgLy8gICAgICAgJ3F1ZXN0aW9uTGlzdCdcbiAgICAgIC8vICAgICBdWydxdWVzdGlvbnMnXSA9IFtdO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9KTtcbiAgICAgIC8vIHRoaXMubG9hZGVyLmRpc3BsYXkodHJ1ZSk7XG5cbiAgICAgIGxldCBzZWxlY3RlZERpc2Vhc2VzIDogYW55ID0gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0udG9TdHJpbmcoKTtcbiAgICAgIC8vIGxldCByZXF1ZXN0OiBhbnkgPSBKU09OLnBhcnNlKFxuICAgICAgLy8gICBKU09OLnN0cmluZ2lmeShcbiAgICAgIC8vICAgICB0aGlzLmZldGNoU3ViUXVlc3Rpb25zTGlzdFtcbiAgICAgIC8vICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd01hc3Rlck9ialtzaW5nbGVQZXJzb25JbmRleF1bJ3JvbGUnXVxuICAgICAgLy8gICAgIF0udG9TdHJpbmcoKVxuICAgICAgLy8gICApXG4gICAgICAvLyApO1xuICAgICAgaWYocXVlc3Rpb25bJ2ZpZWxkJ11bJ2NvbmZpZ0RhdGEnXS5oYXNPd25Qcm9wZXJ0eSgnYXBpVXJsJykgJiYgcXVlc3Rpb25bJ2ZpZWxkJ11bJ2NvbmZpZ0RhdGEnXS5oYXNPd25Qcm9wZXJ0eSgndXJsUGFyYW1Gb3JEaXNlYXNlJykgJiYgcXVlc3Rpb25bJ2ZpZWxkJ11bJ2NvbmZpZ0RhdGEnXS5oYXNPd25Qcm9wZXJ0eSgndXJsUGFyYW1Gb3JQZXJzb25Vd0lkJykgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShxdWVzdGlvblsnZmllbGQnXVsnY29uZmlnRGF0YSddWydhcGlVcmwnXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShxdWVzdGlvblsnZmllbGQnXVsnY29uZmlnRGF0YSddWyd1cmxQYXJhbUZvckRpc2Vhc2UnXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShxdWVzdGlvblsnZmllbGQnXVsnY29uZmlnRGF0YSddWyd1cmxQYXJhbUZvclBlcnNvblV3SWQnXSkpIHtcbiAgICAgICAgdGhpcy5tYXN0ZXJTZXJ2aWNlLmdldFN1YlF1ZXN0aW9ucyhxdWVzdGlvblsnZmllbGQnXVsnY29uZmlnRGF0YSddLCBzZWxlY3RlZERpc2Vhc2VzLCB0aGlzLnBlcnNvblV3SWQpLnN1YnNjcmliZShcbiAgICAgICAgICAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAvLyB0aGlzLmxvYWRlci5kaXNwbGF5KGZhbHNlKTtcbiAgICAgICAgICAgIGxldCBkaXN0aW5jdFN0ZXBzOiBhbnkgPSBbXTtcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRhdGEpKSB7XG4gICAgICAgICAgICAgIGRhdGEuZm9yRWFjaCgoc3ViUXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uW1xuICAgICAgICAgICAgICAgICAgJ2RvbWFpblZhbHVlcydcbiAgICAgICAgICAgICAgICBdID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ2RvbWFpblZhbHVlcyddW1xuICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ11cbiAgICAgICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10pXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddID0gW1xuICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddXG4gICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiZcbiAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ11cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10uZm9yRWFjaChcbiAgICAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXh0UXVlc3Rpb25PYmplY3Q6IGFueSA9IGRhdGEuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgKG9iamVjdDogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RbJ3F1ZXN0aW9uSWQnXSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9ialsnbmV4dFF1ZXN0aW9uSWQnXVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRRdWVzdGlvbk9iamVjdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0UXVlc3Rpb25PYmplY3RbMF1bJ2Fuc3dlcmVkVmFsdWUnXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmpbJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGlmIChcbiAgICAgICAgICAgICAgICAvLyAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgLy8gICAgIHN1YlF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXVxuICAgICAgICAgICAgICAgIC8vICAgKVxuICAgICAgICAgICAgICAgIC8vICkge1xuICAgICAgICAgICAgICAgIC8vICAgc3ViUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLmZvckVhY2goKHN1YkRvbWFpbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5zdWJNZWRpY2FsUXVlc3Rpb25zRG9tYWluSW50ZXJuYWxWYWx1ZXNMaXN0LnB1c2goXG4gICAgICAgICAgICAgICAgLy8gICAgICAgc3ViRG9tYWluWydkb21haW5JbnRlcm5hbFZhbHVlJ11cbiAgICAgICAgICAgICAgICAvLyAgICAgKTtcbiAgICAgICAgICAgICAgICAvLyAgIH0pO1xuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICBpZiAoIWRpc3RpbmN0U3RlcHMuaW5jbHVkZXMoc3ViUXVlc3Rpb25bJ2NsdXN0ZXJJZCddKSkge1xuICAgICAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5wdXNoKHN1YlF1ZXN0aW9uWydjbHVzdGVySWQnXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydmaWVsZCddID0gdGhpcy5nZXRGaWVsZChzdWJRdWVzdGlvbik7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBkYXRhLnNvcnQoXG4gICAgICAgICAgICAgICAgKGE6IGFueSwgYjogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgYVsnc3RlcCddIC0gYlsnc3RlcCddIHx8IGFbJ2Rpc3BsYXlPcmRlciddIC0gYlsnZGlzcGxheU9yZGVyJ11cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5mb3JFYWNoKChzdGVwczogYW55LCBpbmQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZE9iajogYW55ID0gZGF0YS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddID09PSBzdGVwc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge1xuICAgICAgICAgICAgICAgICAgc3RlcDogMTAwMCArIGluZCxcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uczogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iailcbiAgICAgICAgICAgICAgICAgICAgPyBmaWx0ZXJlZE9ialxuICAgICAgICAgICAgICAgICAgICA6IFtdLFxuICAgICAgICAgICAgICAgICAgc2VjdGlvbk5hbWU6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkT2JqXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgID8gZmlsdGVyZWRPYmpbMF1bJ3RpdGxlJ11cbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHRoaXMucGVyc29uVXdJZCxcbiAgICAgICAgICAgICAgICAgIGlzTWVkaWNhbFN1YlF1ZXN0aW9uOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgc2hvd1NlY3Rpb246IHRydWVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25MaXN0LnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHRoaXMubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlID0gZGF0YTtcbiAgICAgICAgICAgICAgLy8gbWVyZ2UgbWVkaWNhbCBzdWIgcXVlc3Rpb25zIGludG8gcGVyc29uIHV3IG1haW4gcXVlc3Rpb25zIHJlc3BvbnNlIChyZXF1aXJlZCBmb3Igc2hvdyBxdWVzdGlvbiBmdW5jdGlvbiB0byB3b3JrKVxuICAgICAgICAgICAgICAvLyBjbGVhcmluZyBvbiB0b3AgYmVmb3JlIGFwaSBjYWxsXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdSZXNwb25zZU9ialswXVsncXVlc3Rpb25MaXN0J10gPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbMF1bJ3F1ZXN0aW9uTGlzdCddLmNvbmNhdCh0aGlzLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8vIHRoaXMubG9hZGVyLmRpc3BsYXkoZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXG4gIH1cbiAgb25Eb2N1bWVudEZpbGVQcmV2aWV3KGV2ZW50OiB7IGZpbGU6IEZpbGUsIGluZGV4OiBudW1iZXIgfSk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdQcmV2aWV3IHJlcXVlc3RlZCBmb3I6JywgZXZlbnQuZmlsZS5uYW1lKTtcbiAgICB0aGlzLnByZXZpZXdGaWxlID0gZXZlbnQuZmlsZTtcbiAgfVxuXG4gIGNsb3NlRmlsZVByZXZpZXcoKTogdm9pZCB7XG4gICAgdGhpcy5wcmV2aWV3RmlsZSA9IG51bGw7XG4gIH1cblxuICBjaGVja0FuZFVwZGF0ZUhlaWdodFVuaXQoKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCdcbiAgICAgICAgXSA9PT0gJ0ZFRVQnICYmXG4gICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J1xuICAgICAgICAgIF1cbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGxldCBoZWlnaHRJbkluY2hlczogYW55ID0gKFxuICAgICAgICAgIHBhcnNlRmxvYXQoXG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCdcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApICogMC4zOTM3MDFcbiAgICAgICAgKS50b0ZpeGVkKDIpO1xuICAgICAgICBsZXQgaGVpZ2h0SW5GZWV0OiBhbnkgPVxuICAgICAgICAgIHBhcnNlRmxvYXQoXG4gICAgICAgICAgICAoaGVpZ2h0SW5JbmNoZXMgLyAxMilcbiAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgLnNwbGl0KCcuJylbMV1cbiAgICAgICAgICApID4gMTJcbiAgICAgICAgICAgID8gKGhlaWdodEluSW5jaGVzIC8gMTIpLnRvRml4ZWQoMSlcbiAgICAgICAgICAgIDogKGhlaWdodEluSW5jaGVzIC8gMTIpLnRvRml4ZWQoMik7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgaGVpZ2h0SW5GZWV0LnRvU3RyaW5nKCkuc3BsaXQoJy4nKVswXVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J1xuICAgICAgICAgIF0gPSBoZWlnaHRJbkZlZXQudG9TdHJpbmcoKS5zcGxpdCgnLicpWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgICAgaGVpZ2h0SW5GZWV0LnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J1xuICAgICAgICAgIF0gPVxuICAgICAgICAgICAgaGVpZ2h0SW5GZWV0LnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXSAhPT0gJzExJyAmJlxuICAgICAgICAgICAgaGVpZ2h0SW5GZWV0LnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXSAhPT0gJzEyJyAmJlxuICAgICAgICAgICAgaGVpZ2h0SW5GZWV0LnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXSAhPT0gJzEzJ1xuICAgICAgICAgICAgICA/IGhlaWdodEluRmVldFxuICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgIC5zcGxpdCgnLicpWzFdXG4gICAgICAgICAgICAgICAgICAuY2hhckF0KDApXG4gICAgICAgICAgICAgIDogaGVpZ2h0SW5GZWV0LnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J1xuICAgICAgICBdID09PSAnQ00nICYmXG4gICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXG4gICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J1xuICAgICAgICAgIF1cbiAgICAgICAgKSAmJlxuICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxuICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCdcbiAgICAgICAgICBdXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXM6IGFueSA9XG4gICAgICAgICAgcGFyc2VGbG9hdChcbiAgICAgICAgICAgIHBhcnNlRmxvYXQoXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xuICAgICAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICkudG9TdHJpbmcoKSArXG4gICAgICAgICAgICAgICcuJyArXG4gICAgICAgICAgICAgIHBhcnNlRmxvYXQoXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXG4gICAgICAgICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J1xuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgKS50b1N0cmluZygpXG4gICAgICAgICAgKSAqIDEyO1xuICAgICAgICBsZXQgaGVpZ2h0SW5DbTogYW55ID0gKFxuICAgICAgICAgIHBhcnNlRmxvYXQoaGVpZ2h0SW5JbmNoZXMpIC8gMC4zOTM3MDFcbiAgICAgICAgKS50b0ZpeGVkKDIpO1xuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J1xuICAgICAgICBdID0gaGVpZ2h0SW5DbTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcbiAgICB9XG5cbiAgZm9jdXNUb0VsZW1lbnQoZWxlbWVudElkOiBhbnkpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTtcbiAgICBjb25zdCBoZWFkZXJPZmZzZXQgPSAxMjA7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2Nyb2xsQ29udGFpbmVyOiBhbnkgPSB0aGlzLmdldFNjcm9sbGFibGVQYXJlbnQoZWxlbWVudCk7XG5cbiAgICAvLyBXYWl0IGZvciB0aGUgbmV4dCBmcmFtZSBzbyBsYXlvdXQgaXMgc2V0dGxlZCBiZWZvcmUgc2Nyb2xsaW5nLlxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBjb250YWluZXJSZWN0ID1cbiAgICAgICAgc2Nyb2xsQ29udGFpbmVyID09PSB3aW5kb3dcbiAgICAgICAgICA/IHsgdG9wOiAwIH1cbiAgICAgICAgICA6IChzY3JvbGxDb250YWluZXIgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICBjb25zdCBjdXJyZW50U2Nyb2xsID1cbiAgICAgICAgc2Nyb2xsQ29udGFpbmVyID09PSB3aW5kb3dcbiAgICAgICAgICA/IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIHx8IDBcbiAgICAgICAgICA6IChzY3JvbGxDb250YWluZXIgYXMgSFRNTEVsZW1lbnQpLnNjcm9sbFRvcDtcblxuICAgICAgY29uc3QgdGFyZ2V0UG9zaXRpb24gPVxuICAgICAgICBlbGVtZW50UmVjdC50b3AgLSBjb250YWluZXJSZWN0LnRvcCArIGN1cnJlbnRTY3JvbGwgLSBoZWFkZXJPZmZzZXQ7XG5cbiAgICAgIGlmIChzY3JvbGxDb250YWluZXIgPT09IHdpbmRvdykge1xuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IHRhcmdldFBvc2l0aW9uLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAoc2Nyb2xsQ29udGFpbmVyIGFzIEhUTUxFbGVtZW50KS5zY3JvbGxUbyh7XG4gICAgICAgICAgdG9wOiB0YXJnZXRQb3NpdGlvbixcbiAgICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBlbGVtZW50LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnYmxpbmtfbWUnLCAnaW52YWxpZC1maWVsZC1vbmUtdWknKTtcblxuICAgICAgLy8gUmVtb3ZlIGJsaW5rIGFuaW1hdGlvbiBhZnRlciBkdXJhdGlvblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnYmxpbmtfbWUnKTtcbiAgICAgIH0sIDM1MDApO1xuXG4gICAgICAvLyBSZW1vdmUgaW52YWxpZC1maWVsZC1vbmUtdWkgY2xhc3Mgd2hlbiB1c2VyIGludGVyYWN0cyB3aXRoIHRoZSBmaWVsZFxuICAgICAgY29uc3QgcmVtb3ZlSW52YWxpZENsYXNzID0gKGV2ZW50PzogYW55KSA9PiB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnaW52YWxpZC1maWVsZC1vbmUtdWknKTtcbiAgICAgICAgLy8gQ2xlYW4gdXAgYWxsIGV2ZW50IGxpc3RlbmVycyBmcm9tIG1haW4gZWxlbWVudFxuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2lucHV0JywgcmVtb3ZlSW52YWxpZENsYXNzKTtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVtb3ZlSW52YWxpZENsYXNzLCB0cnVlKTtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCduZ01vZGVsQ2hhbmdlJywgcmVtb3ZlSW52YWxpZENsYXNzKTtcblxuICAgICAgICAvLyBDbGVhbiB1cCBldmVudCBsaXN0ZW5lcnMgZnJvbSBjaGlsZCByYWRpby9jaGVja2JveCBpbnB1dHNcbiAgICAgICAgY29uc3QgcmFkaW9JbnB1dHMgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9XCJyYWRpb1wiXScpO1xuICAgICAgICBjb25zdCBjaGVja2JveElucHV0cyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJyk7XG4gICAgICAgIHJhZGlvSW5wdXRzLmZvckVhY2goKHJhZGlvOiBhbnkpID0+IHtcbiAgICAgICAgICByYWRpby5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgICAgIHJhZGlvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVtb3ZlSW52YWxpZENsYXNzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNoZWNrYm94SW5wdXRzLmZvckVhY2goKGNoZWNrYm94OiBhbnkpID0+IHtcbiAgICAgICAgICBjaGVja2JveC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgICAgIGNoZWNrYm94LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVtb3ZlSW52YWxpZENsYXNzKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICAvLyBGb3IgdGV4dGJveCAtIHRyaWdnZXJzIG9uIHR5cGluZ1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHJlbW92ZUludmFsaWRDbGFzcyk7XG5cbiAgICAgIC8vIEZvciBzZWxlY3QgZHJvcGRvd24gLSB0cmlnZ2VycyBvbiB2YWx1ZSBjaGFuZ2VcbiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgcmVtb3ZlSW52YWxpZENsYXNzKTtcblxuICAgICAgLy8gRm9yIGRpcmVjdCBjbGljayBvbiB0aGUgZWxlbWVudCAtIHVzZSBjYXB0dXJlIHBoYXNlIHRvIGNhdGNoIGNoaWxkIGV2ZW50c1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHJlbW92ZUludmFsaWRDbGFzcywgdHJ1ZSk7XG5cbiAgICAgIC8vIEZvciBBbmd1bGFyIG5nTW9kZWwgY2hhbmdlc1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCduZ01vZGVsQ2hhbmdlJywgcmVtb3ZlSW52YWxpZENsYXNzKTtcblxuICAgICAgLy8gSGFuZGxlIHJhZGlvIGJ1dHRvbnMgd2l0aGluIHRoZSBlbGVtZW50IChjb21tb24gaW4gQW5ndWxhciBmb3JtcylcbiAgICAgIGNvbnN0IHJhZGlvSW5wdXRzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPVwicmFkaW9cIl0nKTtcbiAgICAgIHJhZGlvSW5wdXRzLmZvckVhY2goKHJhZGlvOiBhbnkpID0+IHtcbiAgICAgICAgcmFkaW8uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgcmVtb3ZlSW52YWxpZENsYXNzKTtcbiAgICAgICAgcmFkaW8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEhhbmRsZSBjaGVja2JveGVzIHdpdGhpbiB0aGUgZWxlbWVudCAoZm9yIG11bHRpLXNlbGVjdClcbiAgICAgIGNvbnN0IGNoZWNrYm94SW5wdXRzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKTtcbiAgICAgIGNoZWNrYm94SW5wdXRzLmZvckVhY2goKGNoZWNrYm94OiBhbnkpID0+IHtcbiAgICAgICAgY2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgcmVtb3ZlSW52YWxpZENsYXNzKTtcbiAgICAgICAgY2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW1vdmVJbnZhbGlkQ2xhc3MpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFNjcm9sbGFibGVQYXJlbnQobm9kZTogSFRNTEVsZW1lbnQgfCBudWxsKTogSFRNTEVsZW1lbnQgfCBXaW5kb3cge1xuICAgIGxldCBwYXJlbnQgPSBub2RlPy5wYXJlbnRFbGVtZW50O1xuICAgIHdoaWxlIChwYXJlbnQpIHtcbiAgICAgIGNvbnN0IG92ZXJmbG93WSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudCkub3ZlcmZsb3dZO1xuICAgICAgaWYgKG92ZXJmbG93WSA9PT0gJ2F1dG8nIHx8IG92ZXJmbG93WSA9PT0gJ3Njcm9sbCcpIHtcbiAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgIH1cbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnRFbGVtZW50O1xuICAgIH1cbiAgICByZXR1cm4gd2luZG93O1xuICB9XG59XG4iLCJcbjxkaXYgKm5nRm9yPVwibGV0IHNlY3Rpb24gb2YgcXVlc3Rpb25MaXN0XCI+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgIWNoZWNrSWZWYWx1ZUlzRW1wdHkoc2VjdGlvblsncXVlc3Rpb25zJ10pICYmXG4gICAgICAgIHNlY3Rpb25bJ3Nob3dTZWN0aW9uJ11cbiAgICAgIFwiXG4gICAgICBjbGFzcz1cImNhcmQgcC0zIG1iLTRcIlxuICAgICAgaWQ9XCJwZXJzb25Vd01lZGljYWxRdWVzdGlvbnNcIlxuICAgID5cbiAgICAgIDxoNiBjbGFzcz1cInBhZ2UtdGl0bGUgYm9sZC1sYWJlbFwiPlxuICAgICAgICB7eyBnZXRUaXRsZUNhc2Uoc2VjdGlvbltcInNlY3Rpb25OYW1lXCJdKSB9fVxuICAgICAgPC9oNj5cbiAgICAgIDxsaWItaHItbGluZSBbZmllbGRdPVwiaG9yaXpvbnRhbExpbmVPYmpcIiAvPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcXVlc3Rpb25zIG9mIHNlY3Rpb25bJ3F1ZXN0aW9ucyddXCIgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0lNQUdFIFRFWFQnXCI+XG4gICAgICAgICAgPGltZyBbc3JjXT1cInF1ZXN0aW9uc1snc2FtcGxlUzNMaW5rJ11cIiBjbGFzcz1cImQtYmxvY2sgbXgtYXV0b1wiIFthbHRdPVwicXVlc3Rpb25zWyd0aXRsZSddXCI+XG4gICAgICAgICAgPGgzIFtpbm5lckhUTUxdPVwicXVlc3Rpb25zWydxdWVzdGlvblRleHQnXVwiPjwvaDM+XG4gICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnRlJFRSBURVhUJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhUJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cImZpZWxkLWxhYmxlIGQtYmxvY2tcIlxuICAgICAgICAgICAgPnt7IHF1ZXN0aW9uc1tcInF1ZXN0aW9uVGV4dFwiXSB9fVxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnMub3B0aW9uYWxRdWVzdGlvbiA9PT0gJ04nXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIHN0eWxlPVwiY29sb3I6ICNlZTAwMDBcIlxuICAgICAgICAgICAgICA+JiM0Mjs8L3NwYW5cbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2xhYmVsPiAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHB4LTAgbXktMVwiPlxuICAgICAgICAgICAgPGxpYi10ZXh0Ym94IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAoYmx1cik9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInF1ZXN0aW9ucz8uZmllbGQ/LmNzc0NsYXNzXCJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0hFSUdIVElOUFVUJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2FyZC10b3BpYyBkLWJsb2NrIGZpZWxkLWxhYmxlXCJcbiAgICAgICAgICAgID5IZWlnaHRcbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIHN0eWxlPVwiY29sb3I6ICNlZTAwMDBcIlxuICAgICAgICAgICAgICA+JiM0Mjs8L3NwYW5cbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiY29sLWF1dG8gcHgtMCBteS0wIHB5LTAgaGVpZ2h0aW5wdXRcIlxuICAgICAgICAgICAgaWQ9XCJtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY29sLTEyIG15LTFcIiAqbmdJZj1cInBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0NNJ1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgcHktMCBoZWlnaHRJbnB1dHNcIj5cbiAgICAgICAgICAgICAgICA8bGliLXRleHRib3ggWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddXCIgKG5nTW9kZWxDaGFuZ2UpPVwicmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiIFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnUUhUJ11bJ2ZpZWxkJ11cIiAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTVcIj5cbiAgICAgICAgICAgICAgICA8bGliLXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXVwiIFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnaGVpZ2h0T2JqZWN0VHlwZXMnXVwiIChuZ01vZGVsQ2hhbmdlKT1cImNoZWNrQW5kVXBkYXRlSGVpZ2h0VW5pdCgpXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJyb3dcIlxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIHBlcnNvblV3QW5zd2Vyc1tcbiAgICAgICAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCdcbiAgICAgICAgICAgICAgICBdID09PSAnRkVFVCdcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IHB5LTAgbXktMVwiPlxuICAgICAgICAgICAgICAgIDxsaWItc2VsZWN0IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXVwiIChuZ01vZGVsQ2hhbmdlKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIiBbZmllbGRdPVwibWVkUXVlc3Rpb25PYmpbJ1FIVEYnXVsnZmllbGQnXVwiIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgcHktMCBteS0xXCI+XG4gICAgICAgICAgICAgICAgPGxpYi1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddXCIgKG5nTW9kZWxDaGFuZ2UpPVwicmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiIFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnUUhUSSddWydmaWVsZCddXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC00IHB5LTAgbXktMVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bGliLXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXVwiIFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnaGVpZ2h0T2JqZWN0VHlwZXMnXVwiIChuZ01vZGVsQ2hhbmdlKT1cImNoZWNrQW5kVXBkYXRlSGVpZ2h0VW5pdCgpXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInJvdyBtdC0wIHB0LTBcIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnTUFQJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxuICAgICAgICAgIFwiXG4gICAgICAgID5cblxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1hcC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGRyZXNzLXNlYXJjaC1jb250YWluZXIgbWItM1wiPlxuXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBjYXJkLXRvcGljXCI+TG9uZ2l0dWRlPC9sYWJlbD5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJsb25naXR1ZGVcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgbG9uZ2l0dWRlXCJcbiAgICAgICAgICBzdGVwPVwiYW55XCJcbiAgICAgICAgICByZWFkb25seVxuICAgICAgICA+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGNhcmQtdG9waWNcIj5MYXRpdHVkZTwvbGFiZWw+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwibGF0aXR1ZGVcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgbGF0aXR1ZGVcIlxuICAgICAgICAgIHN0ZXA9XCJhbnlcIlxuICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgID5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgICA8aW5wdXRcbiAgICAgICAgI2FkZHJlc3NJbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggZm9yIGFkZHJlc3NcIlxuICAgICAgICAoa2V5dXApPVwib25BZGRyZXNzSW5wdXRLZXl1cCgkZXZlbnQpXCJcbiAgICAgICAgKGZvY3VzKT1cInNob3dEcm9wZG93biA9IHRydWVcIlxuICAgICAgICAoYmx1cik9XCJvbklucHV0Qmx1cigpXCJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgID5cbiAgICAgIDxkaXZcbiAgICAqbmdJZj1cInNob3dEcm9wZG93biAmJiBhZGRyZXNzU3VnZ2VzdGlvbnMubGVuZ3RoID4gMFwiXG4gICAgY2xhc3M9XCJhdXRvY29tcGxldGUtZHJvcGRvd24gcG9zaXRpb24tYWJzb2x1dGUgdy0xMDAgbXQtMVwiXG4gICAgc3R5bGU9XCJ6LWluZGV4OiAxMDAwOyBtYXgtaGVpZ2h0OiAyMDBweDsgb3ZlcmZsb3cteTogYXV0bzsgYmFja2dyb3VuZDogd2hpdGU7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IGJvcmRlci1yYWRpdXM6IDRweDsgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwwLDAsMC4xKTtcIlxuICA+XG4gICAgPGRpdlxuICAgICAgKm5nRm9yPVwibGV0IHN1Z2dlc3Rpb24gb2YgYWRkcmVzc1N1Z2dlc3Rpb25zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwLTJcIlxuICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWVlO1wiXG4gICAgICAobW91c2Vkb3duKT1cInNlbGVjdEFkZHJlc3Moc3VnZ2VzdGlvbilcIlxuICAgICAgKG1vdXNlZW50ZXIpPVwiaG92ZXJlZEluZGV4ID0gaVwiXG4gICAgICBbY2xhc3MuYmctbGlnaHRdPVwiaG92ZXJlZEluZGV4ID09PSBpXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZFwiPnt7IHN1Z2dlc3Rpb24ubWFpbl90ZXh0IH19PC9kaXY+XG4gICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+e3sgc3VnZ2VzdGlvbi5zZWNvbmRhcnlfdGV4dCB9fTwvc21hbGw+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZFwiPlN0YXJ0IHR5cGluZyB0byBzZWFyY2ggZm9yIGFkZHJlc3Nlczwvc21hbGw+XG4gICAgPC9kaXY+XG4gICAgICAgICAgICA8Z29vZ2xlLW1hcCBbY2VudGVyXT1cImNlbnRlclwiIFt6b29tXT1cInpvb21cIj5cbiAgICAgICAgICAgICAgPG1hcC1tYXJrZXIgW3Bvc2l0aW9uXT1cImN1cnJlbnRDb29yZGluYXRlc1wiPjwvbWFwLW1hcmtlcj5cbiAgICAgICAgICAgIDwvZ29vZ2xlLW1hcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAocXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ1JBRElPIEJVVFRPTicgfHxcbiAgICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0FERE1PUkUnKSAmJlxuICAgICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxsaWItcmFkaW8gWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCIgKG5nTW9kZWxDaGFuZ2UpPVwicmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAvPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJteS0xXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJxdWVzdGlvbnM/LmZpZWxkPy5jc3NDbGFzc1wiXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGxpYi1tdWx0aXBsZS1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCIgKG5nTW9kZWxDaGFuZ2UpPVwidmFsdWVDaGFuZ2VGb3JNdWx0aXNlbGVjdChxdWVzdGlvbnMpXCIgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiIC8+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cIm15LTFcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInF1ZXN0aW9ucz8uZmllbGQ/LmNzc0NsYXNzXCJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RFQ0xBUkFUSU9OJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bGliLWNoZWNrYm94IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIChuZ01vZGVsQ2hhbmdlKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIiBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwibXktMVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnRFJPUERPV04nICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxsaWItc2VsZWN0IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwibXktMVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxsaWItZG9iIFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJcIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnSEVJR0hUSU5QVVQnICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJyAmJlxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJteS0xXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJxdWVzdGlvbnM/LmZpZWxkPy5jc3NDbGFzc1wiXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdET0NVUExPQUQnICYmXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxsaWItdXBsb2FkIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAoZmlsZVByZXZpZXcpPVwib25Eb2N1bWVudEZpbGVQcmV2aWV3KCRldmVudClcIiAvPlxuICAgICAgICAgIDxsaWItZmlsZS1wcmV2aWV3XG4gICAgICAgICAgICAqbmdJZj1cInByZXZpZXdGaWxlXCJcbiAgICAgICAgICAgIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIlxuICAgICAgICAgICAgW2ZpbGVdPVwicHJldmlld0ZpbGVcIlxuICAgICAgICAgICAgKGNsb3NlZCk9XCJjbG9zZUZpbGVQcmV2aWV3KClcIj5cbiAgICAgICAgICA8L2xpYi1maWxlLXByZXZpZXc+XG4gICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInF1ZXN0aW9ucz8uZmllbGQ/LmNzc0NsYXNzXCJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ1BBU1NQT1JUX1VQTE9BRCcgJiZcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgIDwhLS0gcGVuZGluZyAtLT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4iXX0=
|