@rangertechnologies/ngnxt 2.1.92 → 2.1.93

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.
@@ -420,11 +420,11 @@ export class QuestionbookComponent {
420
420
  this.isCalendarModalOpen = false;
421
421
  }
422
422
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QuestionbookComponent, deps: [{ token: i1.SalesforceService }, { token: i2.DataService }, { token: i3.ChangeService }, { token: i4.StorageService }, { token: i5.I18nService }, { token: i0.ChangeDetectorRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
423
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: QuestionbookComponent, selector: "lib-questionbook", inputs: { qbItem: "qbItem", questionItem: "questionItem", translatedQuestions: "translatedQuestions", questions: "questions", errorFieldId: "errorFieldId", labelValue: "labelValue", token: "token", dropDownData: "dropDownData" }, outputs: { handleDropDown: "handleDropDown", handleQuestion: "handleQuestion", hadleDropDownDependent: "hadleDropDownDependent", handleCalendarDate: "handleCalendarDate", handleCalendarEvent: "handleCalendarEvent" }, ngImport: i0, template: "<!-- HA 20DEC23 Book Style from salesforce -->\r\n<!-- HA 28DEC23 Removed IsShengel(removal of shengel values applies for this reason) and direct styling of books to avoid styling issues-->\r\n<!-- HA 18JAN24 Added class for styling -->\r\n<div [style]=\"bookStyle\" class=\"content-box form-group\">\r\n <div class=\"form-row\">\r\n <!-- HA 20DEC23 Directive and Question Style from salesforce -->\r\n <!-- RA09DEC24 Changed keys-->\r\n <div\r\n [class]=\"'col-lg-' + ques.size + ' paddingnone'\"\r\n *ngFor=\"let ques of questions;let i = index\" [id]=\"ques.id\" [dir]=\"ques.langDirection\" [style]=\"ques?.style?.questionStyle\">\r\n <!-- Sub Question Label -->\r\n <!-- HA 20DEC23 Label Style from salesforce -->\r\n <!-- VD 09May24 is hide field change-->\r\n <div *ngIf=\"!ques.isHidden\">\r\n <div *ngIf=\"ques.type === 'DateTime'\">\r\n \r\n </div>\r\n <!-- VD 20JUN24 - help text changes-->\r\n <!-- VD 01Aug24 - validation change-->\r\n <!-- // VD 02Aug24 - label value style-->\r\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\" *ngIf=\"ques.style?.showLabel ? ques.style?.showLabel : true\" [style]=\"ques.style?.labelStyle\">\r\n <span [class]=\"'dis-flex shengel-myt-font3 myt-font7 '\" [style]=\"ques.style?.labelValueStyle\">{{ removeCharacters(ques?.questionText) }}\r\n <div *ngIf=\"ques.isOptional\" style=\"color: red;\">*</div>\r\n <!-- RS 17JAN2025 -->\r\n <!-- Displays icons with tooltips help text -->\r\n <div *ngIf=\"ques.questionText && ques?.helpText\" \r\n class=\"icon\" \r\n [matTooltip]=\"ques?.helpText\"\r\n matTooltipClass=\"white-tooltip\">i</div>\r\n <!-- RS 17JAN2025 -->\r\n <!-- Displays icons with tooltips for file requirements -->\r\n <div \r\n class=\"icon\" \r\n *ngIf=\"ques.fieldsMeta\"\r\n [matTooltip]=\"getFileRequirements(ques.fieldsMeta)\"\r\n matTooltipClass=\"white-tooltip\"\r\n style=\"margin-left: 4px;\"\r\n >i</div>\r\n </span>\r\n</div>\r\n <!-- // VD 12Jun24 - readonly change-->\r\n <!-- DateTime -->\r\n <div *ngIf=\"ques.type === 'DateTime'\">\r\n <app-custom-date-picker [minDate]=\"ques.minDate\" [error]=\"ques.error\" [errorMessage]=\"ques.errorMessage\" [readOnly]=\"ques.isReadOnly\" [date]=\"ques.input\" (dateChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-date-picker>\r\n </div>\r\n \r\n <!-- Date-->\r\n <div *ngIf=\"ques.type === 'Date'\">\r\n <app-custom-date [date]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.errorMessage\" [readOnly]=\"ques.isReadOnly\" (dateChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-date>\r\n </div>\r\n \r\n <!-- Time-->\r\n <div *ngIf=\"ques.type === 'Time'\">\r\n <app-custom-time [time]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.errorMessage\" [readOnly]=\"ques.isReadOnly\" (timeChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-time>\r\n </div>\r\n <!-- calendar -->\r\n <div *ngIf=\"ques.type === 'Calendar'\">\r\n <app-custom-calendar\r\n [question]=\"ques\"\r\n (eventSelected)=\"getCalendarEvent($event)\"\r\n (dateSelected)=\"getCurrentCalendar($event)\"\r\n (openModal)=\"openCalendarModal($event)\"\r\n (closeModal)=\"closeCalendarModal($event)\"\r\n ></app-custom-calendar>\r\n <!-- model used in calendar component -->\r\n <app-custom-model *ngIf=\"isCalendarModalOpen\"\r\n [modalTitle]=\"calendarModalTitle\"\r\n [isModalOpen]=\"isCalendarModalOpen\"\r\n [modalSize]=\"calendarModalSize\"\r\n [saveButtonValue]=\"calendarSaveButtonValue\"\r\n [modalFooter]=\"modalCalendarModalFooter\"\r\n (saveButtonEmit)=\"onCalendarModalSave()\"\r\n (cancelButtonEmit)=\"closeCalendarModal($event)\"\r\n >\r\n <lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\" (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\r\n </app-custom-model>\r\n </div>\r\n <!-- Text -->\r\n <div *ngIf=\"ques.type === 'Text' || ques.type === 'Link'\" >\r\n <app-custom-input [value]=\"ques.input\" [ngClassValue]=\"{\r\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.progressBar,\r\n textBox: !qbItem.progressBar\r\n }\" [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [idValue]=\"ques.trackingId\" [focusEvent]=\"clearSQError(ques.id)\"\r\n [error]=\"ques.error\" [placeholder]=\"ques.question\" (inputValue)=\"childEventCapture($event, ques)\">\r\n </app-custom-input>\r\n </div>\r\n \r\n <!-- for pick location -->\r\n <!-- VD 21DEC23 - dependent field change -->\r\n <div *ngIf=\"ques.type === 'Location'\">\r\n <!-- HA10012024 Added Api key as input -->\r\n <app-pick-location [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.selectedValue\" [question]=\"ques\" (locationSelected)=\"childEventCapture($event, ques)\">\r\n </app-pick-location>\r\n </div>\r\n \r\n <!-- for text area -->\r\n <div *ngIf=\"ques.type === 'TextArea'\">\r\n <app-custom-text-area [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.question \"\r\n (textareaValueChange)=\"childEventCapture($event, ques)\"></app-custom-text-area>\r\n </div>\r\n <!-- RS 06JAN25 -->\r\n <!-- for rich text editor -->\r\n <div *ngIf=\"ques.type === 'RichTextArea'\">\r\n <app-custom-rich-text \r\n [question]=\"ques\"\r\n [readOnly]=\"ques.isReadOnly\"\r\n [value]=\"ques.input || ''\"\r\n [error]=\"ques.error\"\r\n [placeholder]=\"ques.question\"\r\n (textValueChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-rich-text>\r\n </div>\r\n\r\n <!-- Email -->\r\n <div *ngIf=\"ques.type === 'Email'\">\r\n <input type=\"email\" readOnly=\"ques.isReadOnly\" [(ngModel)]=\"ques.input\" [id]=\"ques.id\" required=\"\" (focus)=\"clearSQError(ques.id)\"\r\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\" />\r\n </div>\r\n \r\n <!-- Table -->\r\n <!-- RS 03FEB2025 -->\r\n <!-- Added handleTableSave to handle table data persistence, enabling saving table contents to local storage when save button is clicked -->\r\n <div *ngIf=\"ques.type === 'Table'\" class=\"\">\r\n <app-custom-table [question]=\"ques\" [apiMeta]=\"ques.subText\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\"(saveTableData)=\"handleTableSave($event, ques)\">\r\n </app-custom-table>\r\n </div>\r\n \r\n <!-- Table Appendix -->\r\n <div *ngIf=\"ques.type === 'TableAppendix'\" class=\"\">\r\n <app-table-appendix [question]=\"ques\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-table-appendix>\r\n </div>\r\n <!-- list -->\r\n <!-- VD 20Aug24 used correct attribute -->\r\n <div *ngIf=\"ques.type === 'List'\" class=\"\">\r\n <lib-search-box [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [apiMeta]=\"ques.subText\" [id]=\"ques.id\" [placeHolderText]=\"ques.question\" [filterName]=\"ques.input\" (searchValueChange)=\"childEventCapture($event, ques)\">\r\n </lib-search-box>\r\n </div>\r\n \r\n <!-- Dropdown -->\r\n <!-- HA 09FEB24 Added condition of sqOption to the dropdown -->\r\n <div *ngIf=\"ques?.type === 'Dropdown' && ques?.options\" class=\"\">\r\n <!-- HA 20DEC23 For Translation --> <!-- VD 19JAN24 - getting token as input -->\r\n <app-custom-dropdown [options]=\"ques.options\"\r\n [token]=\"token\"\r\n [apiMeta]=\"ques.subText\" [id]=\"ques.id\"\r\n [selectedValue]=\"ques.selectedValue\"\r\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\r\n [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\"\r\n [referenceField]=\"ques.referenceField\"\r\n [readOnly]=\"ques.isReadOnly\"\r\n [question]=\"ques\"\r\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-custom-dropdown>\r\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"ques?.input?.length > 0\"></i>\r\n </div>\r\n <!-- // VD 02Aug24 custom-radio component -->\r\n <div *ngIf=\"ques.type === 'Radio' && ques?.options\" class=\"\">\r\n <app-custom-radio [options]=\"ques.options\" [token]=\"token\"\r\n [apiMeta]=\"ques.subText\" [id]=\"ques.id\" [selectedValue]=\"ques.selectedValue\"\r\n [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\"\r\n [referenceField]=\"ques.referenceField\"\r\n [readOnly]=\"ques.isReadOnly\"\r\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-custom-radio>\r\n </div>\r\n \r\n <!-- Attachment / Files -->\r\n <div *ngIf=\"ques.type === 'File'\" class=\"\">\r\n <app-file-upload [limitFileUploading]=\"5\" [error]=\"ques.error\" [question]=\"ques\" [allFiles]=\"ques.input\" [tableFile]=\"false\"\r\n (selectedFileData)=\"childEventCapture($event, ques)\" (deletedFileData)=\"deleteFile($event)\"\r\n [isDeleteFileButtonVisible]=\"true\"></app-file-upload>\r\n </div>\r\n <div *ngIf=\"ques.type === 'PopUpMessage'\" class=\"\">\r\n <app-dependent-table [alertMessage]=\"ques.errorMessage\">\r\n </app-dependent-table>\r\n </div>\r\n <div *ngIf=\"ques.type === 'Label'\" class=\"\">\r\n <app-custom-label [labelStyle]=\"ques.title\" [labelValue]=\"ques.question\">\r\n </app-custom-label>\r\n </div>\r\n <!-- // VD 02Aug24 image component -->\r\n <div *ngIf=\"ques.type === 'Image'\" class=\"\">\r\n <app-custom-image [question]=\"ques\">\r\n </app-custom-image>\r\n </div>\r\n <!-- 08NOV23 - button type question added -->\r\n <!-- Button -->\r\n <div *ngIf=\"ques.type === 'Button'\" class=\"\">\r\n <app-custom-button [height]=\"'50px'\"\r\n [width]=\"'150px'\"\r\n [buttonText]=\"ques?.question\"\r\n [value]=\"ques?.question\"\r\n (buttonValue)=\"childEventCapture($event, ques)\"\r\n >\r\n </app-custom-button>\r\n </div>\r\n <!-- HA 20DEC23 This is to load book type questions-->\r\n <div *ngIf=\"ques.type === 'Book'\">\r\n <!-- HA 09FEB24 Added ternary operator -->\r\n <lib-questionbook [qbItem]=\"ques.qbItem\" [labelValue]=\"labelValue\" [questions]=\"ques.qbItem?.subQuestions\" (handleDropDown)=\"getDropDown($event)\"></lib-questionbook>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- 06-09-24 for calendar type-->\r\n<!-- <ng-template dynamicComponentHost></ng-template> -->", styles: [".col-lg-6{width:100%}.myt-font7{display:flex;justify-content:flex-start;align-items:center}.icon{display:inline-block;width:15px;height:15px;border-radius:50%;background-color:#08010177;color:#fff;text-align:center;line-height:16px;font-size:11px;font-family:Arial,sans-serif;font-weight:700;margin-left:5px}@media (min-width: 1200px){.col-lg-6{width:50%!important}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}}.icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background-color:#f5f5f5;border:1px solid #ddd;color:#666;margin-left:4px;font-size:12px;cursor:pointer!important}::ng-deep .mat-tooltip-panel{background:#fff!important}::ng-deep .mat-tooltip{background-color:#fff!important;color:#333!important;white-space:pre-line!important;line-height:1.5!important}.mat-tooltip{padding:8px 16px!important}::ng-deep .white-tooltip{white-space:pre-line!important;line-height:1.5!important}\n"], dependencies: [{ kind: "component", type: i6.CustomRichTextComponent, selector: "app-custom-rich-text", inputs: ["value", "placeholder", "error", "question", "rows", "readOnly", "minLength", "maxLength"], outputs: ["textValueChange"] }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.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: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i10.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "component", type: i11.PickLocationComponent, selector: "app-pick-location", inputs: ["address", "question", "apiKey"], outputs: ["locationSelected"] }, { kind: "component", type: i12.CustomInputComponent, selector: "app-custom-input", inputs: ["value", "question", "disabled", "placeholder", "error", "fromShengel", "readOnly", "ngClassValue", "idValue", "focusEvent"], outputs: ["inputValue"] }, { kind: "component", type: i13.CustomTextAreaComponent, selector: "app-custom-text-area", inputs: ["value", "placeholder", "rows", "error", "question", "readOnly"], outputs: ["textareaValueChange"] }, { kind: "component", type: i14.CustomTableComponent, selector: "app-custom-table", inputs: ["question", "apiMeta"], outputs: ["valueChange", "saveTableData"] }, { kind: "component", type: i15.CustomCalendarComponent, selector: "app-custom-calendar", inputs: ["allEvents", "question", "nxtId"], outputs: ["eventSelected", "dateSelected", "openModal", "closeModal"] }, { kind: "component", type: i16.CustomDatePickerComponent, selector: "app-custom-date-picker", inputs: ["date", "minDate", "maxDate", "error", "errorMessage", "readOnly"], outputs: ["dateChange"] }, { kind: "component", type: i17.CustomDropdownComponent, selector: "app-custom-dropdown", inputs: ["options", "placeholder", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "question", "referenceField", "token"], outputs: ["valueChange"] }, { kind: "component", type: i18.SearchBoxComponent, selector: "lib-search-box", inputs: ["placeHolderText", "question", "apiMeta", "id", "readOnly", "filterName"], outputs: ["searchValueChange"] }, { kind: "component", type: QuestionbookComponent, selector: "lib-questionbook", inputs: ["qbItem", "questionItem", "translatedQuestions", "questions", "errorFieldId", "labelValue", "token", "dropDownData"], outputs: ["handleDropDown", "handleQuestion", "hadleDropDownDependent", "handleCalendarDate", "handleCalendarEvent"] }, { kind: "component", type: i19.FileUploadComponent, selector: "app-file-upload", inputs: ["allFiles", "limitFileUploading", "isDeleteFileButtonVisible", "isShowNoFileIcon", "tableFile", "question", "error"], outputs: ["selectedFileData", "deletedFileData"] }, { kind: "component", type: i20.DependentTableComponent, selector: "app-dependent-table", inputs: ["alertMessage"] }, { kind: "component", type: i21.CustomLabelComponent, selector: "app-custom-label", inputs: ["labelValue", "labelStyle"] }, { kind: "component", type: i22.TableAppendixComponent, selector: "app-table-appendix", inputs: ["question"], outputs: ["valueChange"] }, { kind: "component", type: i23.CustomDateComponent, selector: "app-custom-date", inputs: ["date", "readOnly", "error", "errorMessage"], outputs: ["dateChange"] }, { kind: "component", type: i24.CustomTimeComponent, selector: "app-custom-time", inputs: ["time", "readOnly", "error", "errorMessage"], outputs: ["timeChange"] }, { kind: "component", type: i25.CustomButtonComponent, selector: "app-custom-button", inputs: ["height", "width", "textColor", "buttonText", "value", "backgroundColor"], outputs: ["buttonValue"] }, { kind: "component", type: i26.CustomModelComponent, selector: "app-custom-model", inputs: ["modalTitle", "isModalOpen", "modalSize", "saveButtonValue", "modalFooter"], outputs: ["saveButtonEmit", "cancelButtonEmit"] }, { kind: "component", type: i27.CustomImageComponent, selector: "app-custom-image", inputs: ["alt", "src", "imageStyle", "question"] }, { kind: "component", type: i28.CustomRadioComponent, selector: "app-custom-radio", inputs: ["options", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "referenceField", "token"], outputs: ["valueChange"] }, { kind: "pipe", type: i29.I18nPipe, name: "i18n" }] });
423
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: QuestionbookComponent, selector: "lib-questionbook", inputs: { qbItem: "qbItem", questionItem: "questionItem", translatedQuestions: "translatedQuestions", questions: "questions", errorFieldId: "errorFieldId", labelValue: "labelValue", token: "token", dropDownData: "dropDownData" }, outputs: { handleDropDown: "handleDropDown", handleQuestion: "handleQuestion", hadleDropDownDependent: "hadleDropDownDependent", handleCalendarDate: "handleCalendarDate", handleCalendarEvent: "handleCalendarEvent" }, ngImport: i0, template: "<!-- HA 20DEC23 Book Style from salesforce -->\r\n<!-- HA 28DEC23 Removed IsShengel(removal of shengel values applies for this reason) and direct styling of books to avoid styling issues-->\r\n<!-- HA 18JAN24 Added class for styling -->\r\n<div [style]=\"bookStyle\" class=\"content-box form-group\">\r\n <div class=\"form-row\">\r\n <!-- HA 20DEC23 Directive and Question Style from salesforce -->\r\n <!-- RA09DEC24 Changed keys-->\r\n <div\r\n [class]=\"'col-lg-' + ques.size + ' paddingnone'\"\r\n *ngFor=\"let ques of questions;let i = index\" [id]=\"ques.id\" [dir]=\"ques.langDirection\" [style]=\"ques?.style?.questionStyle\">\r\n <!-- Sub Question Label -->\r\n <!-- HA 20DEC23 Label Style from salesforce -->\r\n <!-- VD 09May24 is hide field change-->\r\n <div *ngIf=\"!ques.isHidden\">\r\n <div *ngIf=\"ques.type === 'DateTime'\">\r\n \r\n </div>\r\n <!-- VD 20JUN24 - help text changes-->\r\n <!-- VD 01Aug24 - validation change-->\r\n <!-- // VD 02Aug24 - label value style-->\r\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\" *ngIf=\"ques.style?.showLabel ? ques.style?.showLabel : true\" [style]=\"ques.style?.labelStyle\">\r\n <span [class]=\"'dis-flex shengel-myt-font3 myt-font7 '\" [style]=\"ques.style?.labelValueStyle\">{{ removeCharacters(ques?.questionText) }}\r\n <div *ngIf=\"ques.isOptional\" style=\"color: red;\">*</div>\r\n <!-- RS 17JAN2025 -->\r\n <!-- Displays icons with tooltips help text -->\r\n <div *ngIf=\"ques.questionText && ques?.helpText\" \r\n class=\"icon\" \r\n [matTooltip]=\"ques?.helpText\"\r\n matTooltipClass=\"white-tooltip\">i</div>\r\n <!-- RS 17JAN2025 -->\r\n <!-- Displays icons with tooltips for file requirements -->\r\n <div \r\n class=\"icon\" \r\n *ngIf=\"ques.fieldsMeta\"\r\n [matTooltip]=\"getFileRequirements(ques.fieldsMeta)\"\r\n matTooltipClass=\"white-tooltip\"\r\n style=\"margin-left: 4px;\"\r\n >i</div>\r\n </span>\r\n</div>\r\n <!-- // VD 12Jun24 - readonly change-->\r\n <!-- DateTime -->\r\n <div *ngIf=\"ques.type === 'DateTime'\">\r\n <app-custom-date-picker [minDate]=\"ques.minDate\" [error]=\"ques.error\" [errorMessage]=\"ques.errorMessage\" [readOnly]=\"ques.isReadOnly\" [date]=\"ques.input\" (dateChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-date-picker>\r\n </div>\r\n \r\n <!-- Date-->\r\n <div *ngIf=\"ques.type === 'Date'\">\r\n <app-custom-date [date]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.errorMessage\" [readOnly]=\"ques.isReadOnly\" (dateChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-date>\r\n </div>\r\n \r\n <!-- Time-->\r\n <div *ngIf=\"ques.type === 'Time'\">\r\n <app-custom-time [time]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.errorMessage\" [readOnly]=\"ques.isReadOnly\" (timeChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-time>\r\n </div>\r\n <!-- calendar -->\r\n <div *ngIf=\"ques.type === 'Calendar'\">\r\n <app-custom-calendar\r\n [question]=\"ques\"\r\n (eventSelected)=\"getCalendarEvent($event)\"\r\n (dateSelected)=\"getCurrentCalendar($event)\"\r\n (openModal)=\"openCalendarModal($event)\"\r\n (closeModal)=\"closeCalendarModal($event)\"\r\n ></app-custom-calendar>\r\n <!-- model used in calendar component -->\r\n <app-custom-model *ngIf=\"isCalendarModalOpen\"\r\n [modalTitle]=\"calendarModalTitle\"\r\n [isModalOpen]=\"isCalendarModalOpen\"\r\n [modalSize]=\"calendarModalSize\"\r\n [saveButtonValue]=\"calendarSaveButtonValue\"\r\n [modalFooter]=\"modalCalendarModalFooter\"\r\n (saveButtonEmit)=\"onCalendarModalSave()\"\r\n (cancelButtonEmit)=\"closeCalendarModal($event)\"\r\n >\r\n <lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\" (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\r\n </app-custom-model>\r\n </div>\r\n <!-- Text -->\r\n <div *ngIf=\"ques.type === 'Text' || ques.type === 'Link'\" >\r\n <app-custom-input [value]=\"ques.input\" [ngClassValue]=\"{\r\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.progressBar,\r\n textBox: !qbItem.progressBar\r\n }\" [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [idValue]=\"ques.trackingId\" [focusEvent]=\"clearSQError(ques.id)\"\r\n [error]=\"ques.error\" [placeholder]=\"ques.question\" (inputValue)=\"childEventCapture($event, ques)\">\r\n </app-custom-input>\r\n </div>\r\n \r\n <!-- for pick location -->\r\n <!-- VD 21DEC23 - dependent field change -->\r\n <div *ngIf=\"ques.type === 'Location'\">\r\n <!-- HA10012024 Added Api key as input -->\r\n <app-pick-location [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.selectedValue\" [question]=\"ques\" (locationSelected)=\"childEventCapture($event, ques)\">\r\n </app-pick-location>\r\n </div>\r\n \r\n <!-- for text area -->\r\n <div *ngIf=\"ques.type === 'TextArea'\">\r\n <app-custom-text-area [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.question \"\r\n (textareaValueChange)=\"childEventCapture($event, ques)\"></app-custom-text-area>\r\n </div>\r\n <!-- RS 06JAN25 -->\r\n <!-- for rich text editor -->\r\n <div *ngIf=\"ques.type === 'RichTextArea'\">\r\n <app-custom-rich-text \r\n [question]=\"ques\"\r\n [readOnly]=\"ques.isReadOnly\"\r\n [value]=\"ques.input || ''\"\r\n [error]=\"ques.error\"\r\n [placeholder]=\"ques.question\"\r\n (textValueChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-rich-text>\r\n </div>\r\n\r\n <!-- Email -->\r\n <div *ngIf=\"ques.type === 'Email'\">\r\n <input type=\"email\" readOnly=\"ques.isReadOnly\" [(ngModel)]=\"ques.input\" [id]=\"ques.id\" required=\"\" (focus)=\"clearSQError(ques.id)\"\r\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\" />\r\n </div>\r\n \r\n <!-- Table -->\r\n <!-- RS 03FEB2025 -->\r\n <!-- Added handleTableSave to handle table data persistence, enabling saving table contents to local storage when save button is clicked -->\r\n <div *ngIf=\"ques.type === 'Table'\" class=\"\">\r\n <app-custom-table [question]=\"ques\" [apiMeta]=\"ques.subText\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\"(saveTableData)=\"handleTableSave($event, ques)\">\r\n </app-custom-table>\r\n </div>\r\n \r\n <!-- Table Appendix -->\r\n <div *ngIf=\"ques.type === 'TableAppendix'\" class=\"\">\r\n <app-table-appendix [question]=\"ques\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-table-appendix>\r\n </div>\r\n <!-- list -->\r\n <!-- VD 20Aug24 used correct attribute -->\r\n <div *ngIf=\"ques.type === 'List'\" class=\"\">\r\n <lib-search-box [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [apiMeta]=\"ques.subText\" [id]=\"ques.id\" [placeHolderText]=\"ques.question\" [filterName]=\"ques.input\" (searchValueChange)=\"childEventCapture($event, ques)\">\r\n </lib-search-box>\r\n </div>\r\n \r\n <!-- Dropdown -->\r\n <!-- HA 09FEB24 Added condition of sqOption to the dropdown -->\r\n <div *ngIf=\"ques?.type === 'Dropdown' && ques?.options\" class=\"\">\r\n <!-- HA 20DEC23 For Translation --> <!-- VD 19JAN24 - getting token as input -->\r\n <!-- AP 10FEB25 - Dynamically binding selectedValue based on isShengel condition -->\r\n <app-custom-dropdown [options]=\"ques.options\"\r\n [token]=\"token\"\r\n [apiMeta]=\"ques.subText\" [id]=\"ques.id\"\r\n [selectedValue]=\"qbItem.isShengel ? ques.input : ques.selectedValue\" \r\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\r\n [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\"\r\n [referenceField]=\"ques.referenceField\"\r\n [readOnly]=\"ques.isReadOnly\"\r\n [question]=\"ques\"\r\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-custom-dropdown>\r\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"ques?.input?.length > 0\"></i>\r\n </div>\r\n <!-- // VD 02Aug24 custom-radio component -->\r\n <div *ngIf=\"ques.type === 'Radio' && ques?.options\" class=\"\">\r\n <app-custom-radio [options]=\"ques.options\" [token]=\"token\"\r\n [apiMeta]=\"ques.subText\" [id]=\"ques.id\" [selectedValue]=\"ques.selectedValue\"\r\n [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\"\r\n [referenceField]=\"ques.referenceField\"\r\n [readOnly]=\"ques.isReadOnly\"\r\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-custom-radio>\r\n </div>\r\n \r\n <!-- Attachment / Files -->\r\n <div *ngIf=\"ques.type === 'File'\" class=\"\">\r\n <app-file-upload [limitFileUploading]=\"5\" [error]=\"ques.error\" [question]=\"ques\" [allFiles]=\"ques.input\" [tableFile]=\"false\"\r\n (selectedFileData)=\"childEventCapture($event, ques)\" (deletedFileData)=\"deleteFile($event)\"\r\n [isDeleteFileButtonVisible]=\"true\"></app-file-upload>\r\n </div>\r\n <div *ngIf=\"ques.type === 'PopUpMessage'\" class=\"\">\r\n <app-dependent-table [alertMessage]=\"ques.errorMessage\">\r\n </app-dependent-table>\r\n </div>\r\n <div *ngIf=\"ques.type === 'Label'\" class=\"\">\r\n <app-custom-label [labelStyle]=\"ques.title\" [labelValue]=\"ques.question\">\r\n </app-custom-label>\r\n </div>\r\n <!-- // VD 02Aug24 image component -->\r\n <div *ngIf=\"ques.type === 'Image'\" class=\"\">\r\n <app-custom-image [question]=\"ques\">\r\n </app-custom-image>\r\n </div>\r\n <!-- 08NOV23 - button type question added -->\r\n <!-- Button -->\r\n <div *ngIf=\"ques.type === 'Button'\" class=\"\">\r\n <app-custom-button [height]=\"'50px'\"\r\n [width]=\"'150px'\"\r\n [buttonText]=\"ques?.question\"\r\n [value]=\"ques?.question\"\r\n (buttonValue)=\"childEventCapture($event, ques)\"\r\n >\r\n </app-custom-button>\r\n </div>\r\n <!-- HA 20DEC23 This is to load book type questions-->\r\n <div *ngIf=\"ques.type === 'Book'\">\r\n <!-- HA 09FEB24 Added ternary operator -->\r\n <lib-questionbook [qbItem]=\"ques.qbItem\" [labelValue]=\"labelValue\" [questions]=\"ques.qbItem?.subQuestions\" (handleDropDown)=\"getDropDown($event)\"></lib-questionbook>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- 06-09-24 for calendar type-->\r\n<!-- <ng-template dynamicComponentHost></ng-template> -->", styles: [".col-lg-6{width:100%}.myt-font7{display:flex;justify-content:flex-start;align-items:center}.icon{display:inline-block;width:15px;height:15px;border-radius:50%;background-color:#08010177;color:#fff;text-align:center;line-height:16px;font-size:11px;font-family:Arial,sans-serif;font-weight:700;margin-left:5px}@media (min-width: 1200px){.col-lg-6{width:50%!important}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}}.icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background-color:#f5f5f5;border:1px solid #ddd;color:#666;margin-left:4px;font-size:12px;cursor:pointer!important}::ng-deep .mat-tooltip-panel{background:#fff!important}::ng-deep .mat-tooltip{background-color:#fff!important;color:#333!important;white-space:pre-line!important;line-height:1.5!important}.mat-tooltip{padding:8px 16px!important}::ng-deep .white-tooltip{white-space:pre-line!important;line-height:1.5!important}\n"], dependencies: [{ kind: "component", type: i6.CustomRichTextComponent, selector: "app-custom-rich-text", inputs: ["value", "placeholder", "error", "question", "rows", "readOnly", "minLength", "maxLength"], outputs: ["textValueChange"] }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.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: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i10.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "component", type: i11.PickLocationComponent, selector: "app-pick-location", inputs: ["address", "question", "apiKey"], outputs: ["locationSelected"] }, { kind: "component", type: i12.CustomInputComponent, selector: "app-custom-input", inputs: ["value", "question", "disabled", "placeholder", "error", "fromShengel", "readOnly", "ngClassValue", "idValue", "focusEvent"], outputs: ["inputValue"] }, { kind: "component", type: i13.CustomTextAreaComponent, selector: "app-custom-text-area", inputs: ["value", "placeholder", "rows", "error", "question", "readOnly"], outputs: ["textareaValueChange"] }, { kind: "component", type: i14.CustomTableComponent, selector: "app-custom-table", inputs: ["question", "apiMeta"], outputs: ["valueChange", "saveTableData"] }, { kind: "component", type: i15.CustomCalendarComponent, selector: "app-custom-calendar", inputs: ["allEvents", "question", "nxtId"], outputs: ["eventSelected", "dateSelected", "openModal", "closeModal"] }, { kind: "component", type: i16.CustomDatePickerComponent, selector: "app-custom-date-picker", inputs: ["date", "minDate", "maxDate", "error", "errorMessage", "readOnly"], outputs: ["dateChange"] }, { kind: "component", type: i17.CustomDropdownComponent, selector: "app-custom-dropdown", inputs: ["options", "placeholder", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "question", "referenceField", "token"], outputs: ["valueChange"] }, { kind: "component", type: i18.SearchBoxComponent, selector: "lib-search-box", inputs: ["placeHolderText", "question", "apiMeta", "id", "readOnly", "filterName"], outputs: ["searchValueChange"] }, { kind: "component", type: QuestionbookComponent, selector: "lib-questionbook", inputs: ["qbItem", "questionItem", "translatedQuestions", "questions", "errorFieldId", "labelValue", "token", "dropDownData"], outputs: ["handleDropDown", "handleQuestion", "hadleDropDownDependent", "handleCalendarDate", "handleCalendarEvent"] }, { kind: "component", type: i19.FileUploadComponent, selector: "app-file-upload", inputs: ["allFiles", "limitFileUploading", "isDeleteFileButtonVisible", "isShowNoFileIcon", "tableFile", "question", "error"], outputs: ["selectedFileData", "deletedFileData"] }, { kind: "component", type: i20.DependentTableComponent, selector: "app-dependent-table", inputs: ["alertMessage"] }, { kind: "component", type: i21.CustomLabelComponent, selector: "app-custom-label", inputs: ["labelValue", "labelStyle"] }, { kind: "component", type: i22.TableAppendixComponent, selector: "app-table-appendix", inputs: ["question"], outputs: ["valueChange"] }, { kind: "component", type: i23.CustomDateComponent, selector: "app-custom-date", inputs: ["date", "readOnly", "error", "errorMessage"], outputs: ["dateChange"] }, { kind: "component", type: i24.CustomTimeComponent, selector: "app-custom-time", inputs: ["time", "readOnly", "error", "errorMessage"], outputs: ["timeChange"] }, { kind: "component", type: i25.CustomButtonComponent, selector: "app-custom-button", inputs: ["height", "width", "textColor", "buttonText", "value", "backgroundColor"], outputs: ["buttonValue"] }, { kind: "component", type: i26.CustomModelComponent, selector: "app-custom-model", inputs: ["modalTitle", "isModalOpen", "modalSize", "saveButtonValue", "modalFooter"], outputs: ["saveButtonEmit", "cancelButtonEmit"] }, { kind: "component", type: i27.CustomImageComponent, selector: "app-custom-image", inputs: ["alt", "src", "imageStyle", "question"] }, { kind: "component", type: i28.CustomRadioComponent, selector: "app-custom-radio", inputs: ["options", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "referenceField", "token"], outputs: ["valueChange"] }, { kind: "pipe", type: i29.I18nPipe, name: "i18n" }] });
424
424
  }
425
425
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QuestionbookComponent, decorators: [{
426
426
  type: Component,
427
- args: [{ selector: 'lib-questionbook', template: "<!-- HA 20DEC23 Book Style from salesforce -->\r\n<!-- HA 28DEC23 Removed IsShengel(removal of shengel values applies for this reason) and direct styling of books to avoid styling issues-->\r\n<!-- HA 18JAN24 Added class for styling -->\r\n<div [style]=\"bookStyle\" class=\"content-box form-group\">\r\n <div class=\"form-row\">\r\n <!-- HA 20DEC23 Directive and Question Style from salesforce -->\r\n <!-- RA09DEC24 Changed keys-->\r\n <div\r\n [class]=\"'col-lg-' + ques.size + ' paddingnone'\"\r\n *ngFor=\"let ques of questions;let i = index\" [id]=\"ques.id\" [dir]=\"ques.langDirection\" [style]=\"ques?.style?.questionStyle\">\r\n <!-- Sub Question Label -->\r\n <!-- HA 20DEC23 Label Style from salesforce -->\r\n <!-- VD 09May24 is hide field change-->\r\n <div *ngIf=\"!ques.isHidden\">\r\n <div *ngIf=\"ques.type === 'DateTime'\">\r\n \r\n </div>\r\n <!-- VD 20JUN24 - help text changes-->\r\n <!-- VD 01Aug24 - validation change-->\r\n <!-- // VD 02Aug24 - label value style-->\r\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\" *ngIf=\"ques.style?.showLabel ? ques.style?.showLabel : true\" [style]=\"ques.style?.labelStyle\">\r\n <span [class]=\"'dis-flex shengel-myt-font3 myt-font7 '\" [style]=\"ques.style?.labelValueStyle\">{{ removeCharacters(ques?.questionText) }}\r\n <div *ngIf=\"ques.isOptional\" style=\"color: red;\">*</div>\r\n <!-- RS 17JAN2025 -->\r\n <!-- Displays icons with tooltips help text -->\r\n <div *ngIf=\"ques.questionText && ques?.helpText\" \r\n class=\"icon\" \r\n [matTooltip]=\"ques?.helpText\"\r\n matTooltipClass=\"white-tooltip\">i</div>\r\n <!-- RS 17JAN2025 -->\r\n <!-- Displays icons with tooltips for file requirements -->\r\n <div \r\n class=\"icon\" \r\n *ngIf=\"ques.fieldsMeta\"\r\n [matTooltip]=\"getFileRequirements(ques.fieldsMeta)\"\r\n matTooltipClass=\"white-tooltip\"\r\n style=\"margin-left: 4px;\"\r\n >i</div>\r\n </span>\r\n</div>\r\n <!-- // VD 12Jun24 - readonly change-->\r\n <!-- DateTime -->\r\n <div *ngIf=\"ques.type === 'DateTime'\">\r\n <app-custom-date-picker [minDate]=\"ques.minDate\" [error]=\"ques.error\" [errorMessage]=\"ques.errorMessage\" [readOnly]=\"ques.isReadOnly\" [date]=\"ques.input\" (dateChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-date-picker>\r\n </div>\r\n \r\n <!-- Date-->\r\n <div *ngIf=\"ques.type === 'Date'\">\r\n <app-custom-date [date]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.errorMessage\" [readOnly]=\"ques.isReadOnly\" (dateChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-date>\r\n </div>\r\n \r\n <!-- Time-->\r\n <div *ngIf=\"ques.type === 'Time'\">\r\n <app-custom-time [time]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.errorMessage\" [readOnly]=\"ques.isReadOnly\" (timeChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-time>\r\n </div>\r\n <!-- calendar -->\r\n <div *ngIf=\"ques.type === 'Calendar'\">\r\n <app-custom-calendar\r\n [question]=\"ques\"\r\n (eventSelected)=\"getCalendarEvent($event)\"\r\n (dateSelected)=\"getCurrentCalendar($event)\"\r\n (openModal)=\"openCalendarModal($event)\"\r\n (closeModal)=\"closeCalendarModal($event)\"\r\n ></app-custom-calendar>\r\n <!-- model used in calendar component -->\r\n <app-custom-model *ngIf=\"isCalendarModalOpen\"\r\n [modalTitle]=\"calendarModalTitle\"\r\n [isModalOpen]=\"isCalendarModalOpen\"\r\n [modalSize]=\"calendarModalSize\"\r\n [saveButtonValue]=\"calendarSaveButtonValue\"\r\n [modalFooter]=\"modalCalendarModalFooter\"\r\n (saveButtonEmit)=\"onCalendarModalSave()\"\r\n (cancelButtonEmit)=\"closeCalendarModal($event)\"\r\n >\r\n <lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\" (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\r\n </app-custom-model>\r\n </div>\r\n <!-- Text -->\r\n <div *ngIf=\"ques.type === 'Text' || ques.type === 'Link'\" >\r\n <app-custom-input [value]=\"ques.input\" [ngClassValue]=\"{\r\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.progressBar,\r\n textBox: !qbItem.progressBar\r\n }\" [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [idValue]=\"ques.trackingId\" [focusEvent]=\"clearSQError(ques.id)\"\r\n [error]=\"ques.error\" [placeholder]=\"ques.question\" (inputValue)=\"childEventCapture($event, ques)\">\r\n </app-custom-input>\r\n </div>\r\n \r\n <!-- for pick location -->\r\n <!-- VD 21DEC23 - dependent field change -->\r\n <div *ngIf=\"ques.type === 'Location'\">\r\n <!-- HA10012024 Added Api key as input -->\r\n <app-pick-location [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.selectedValue\" [question]=\"ques\" (locationSelected)=\"childEventCapture($event, ques)\">\r\n </app-pick-location>\r\n </div>\r\n \r\n <!-- for text area -->\r\n <div *ngIf=\"ques.type === 'TextArea'\">\r\n <app-custom-text-area [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.question \"\r\n (textareaValueChange)=\"childEventCapture($event, ques)\"></app-custom-text-area>\r\n </div>\r\n <!-- RS 06JAN25 -->\r\n <!-- for rich text editor -->\r\n <div *ngIf=\"ques.type === 'RichTextArea'\">\r\n <app-custom-rich-text \r\n [question]=\"ques\"\r\n [readOnly]=\"ques.isReadOnly\"\r\n [value]=\"ques.input || ''\"\r\n [error]=\"ques.error\"\r\n [placeholder]=\"ques.question\"\r\n (textValueChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-rich-text>\r\n </div>\r\n\r\n <!-- Email -->\r\n <div *ngIf=\"ques.type === 'Email'\">\r\n <input type=\"email\" readOnly=\"ques.isReadOnly\" [(ngModel)]=\"ques.input\" [id]=\"ques.id\" required=\"\" (focus)=\"clearSQError(ques.id)\"\r\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\" />\r\n </div>\r\n \r\n <!-- Table -->\r\n <!-- RS 03FEB2025 -->\r\n <!-- Added handleTableSave to handle table data persistence, enabling saving table contents to local storage when save button is clicked -->\r\n <div *ngIf=\"ques.type === 'Table'\" class=\"\">\r\n <app-custom-table [question]=\"ques\" [apiMeta]=\"ques.subText\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\"(saveTableData)=\"handleTableSave($event, ques)\">\r\n </app-custom-table>\r\n </div>\r\n \r\n <!-- Table Appendix -->\r\n <div *ngIf=\"ques.type === 'TableAppendix'\" class=\"\">\r\n <app-table-appendix [question]=\"ques\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-table-appendix>\r\n </div>\r\n <!-- list -->\r\n <!-- VD 20Aug24 used correct attribute -->\r\n <div *ngIf=\"ques.type === 'List'\" class=\"\">\r\n <lib-search-box [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [apiMeta]=\"ques.subText\" [id]=\"ques.id\" [placeHolderText]=\"ques.question\" [filterName]=\"ques.input\" (searchValueChange)=\"childEventCapture($event, ques)\">\r\n </lib-search-box>\r\n </div>\r\n \r\n <!-- Dropdown -->\r\n <!-- HA 09FEB24 Added condition of sqOption to the dropdown -->\r\n <div *ngIf=\"ques?.type === 'Dropdown' && ques?.options\" class=\"\">\r\n <!-- HA 20DEC23 For Translation --> <!-- VD 19JAN24 - getting token as input -->\r\n <app-custom-dropdown [options]=\"ques.options\"\r\n [token]=\"token\"\r\n [apiMeta]=\"ques.subText\" [id]=\"ques.id\"\r\n [selectedValue]=\"ques.selectedValue\"\r\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\r\n [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\"\r\n [referenceField]=\"ques.referenceField\"\r\n [readOnly]=\"ques.isReadOnly\"\r\n [question]=\"ques\"\r\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-custom-dropdown>\r\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"ques?.input?.length > 0\"></i>\r\n </div>\r\n <!-- // VD 02Aug24 custom-radio component -->\r\n <div *ngIf=\"ques.type === 'Radio' && ques?.options\" class=\"\">\r\n <app-custom-radio [options]=\"ques.options\" [token]=\"token\"\r\n [apiMeta]=\"ques.subText\" [id]=\"ques.id\" [selectedValue]=\"ques.selectedValue\"\r\n [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\"\r\n [referenceField]=\"ques.referenceField\"\r\n [readOnly]=\"ques.isReadOnly\"\r\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-custom-radio>\r\n </div>\r\n \r\n <!-- Attachment / Files -->\r\n <div *ngIf=\"ques.type === 'File'\" class=\"\">\r\n <app-file-upload [limitFileUploading]=\"5\" [error]=\"ques.error\" [question]=\"ques\" [allFiles]=\"ques.input\" [tableFile]=\"false\"\r\n (selectedFileData)=\"childEventCapture($event, ques)\" (deletedFileData)=\"deleteFile($event)\"\r\n [isDeleteFileButtonVisible]=\"true\"></app-file-upload>\r\n </div>\r\n <div *ngIf=\"ques.type === 'PopUpMessage'\" class=\"\">\r\n <app-dependent-table [alertMessage]=\"ques.errorMessage\">\r\n </app-dependent-table>\r\n </div>\r\n <div *ngIf=\"ques.type === 'Label'\" class=\"\">\r\n <app-custom-label [labelStyle]=\"ques.title\" [labelValue]=\"ques.question\">\r\n </app-custom-label>\r\n </div>\r\n <!-- // VD 02Aug24 image component -->\r\n <div *ngIf=\"ques.type === 'Image'\" class=\"\">\r\n <app-custom-image [question]=\"ques\">\r\n </app-custom-image>\r\n </div>\r\n <!-- 08NOV23 - button type question added -->\r\n <!-- Button -->\r\n <div *ngIf=\"ques.type === 'Button'\" class=\"\">\r\n <app-custom-button [height]=\"'50px'\"\r\n [width]=\"'150px'\"\r\n [buttonText]=\"ques?.question\"\r\n [value]=\"ques?.question\"\r\n (buttonValue)=\"childEventCapture($event, ques)\"\r\n >\r\n </app-custom-button>\r\n </div>\r\n <!-- HA 20DEC23 This is to load book type questions-->\r\n <div *ngIf=\"ques.type === 'Book'\">\r\n <!-- HA 09FEB24 Added ternary operator -->\r\n <lib-questionbook [qbItem]=\"ques.qbItem\" [labelValue]=\"labelValue\" [questions]=\"ques.qbItem?.subQuestions\" (handleDropDown)=\"getDropDown($event)\"></lib-questionbook>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- 06-09-24 for calendar type-->\r\n<!-- <ng-template dynamicComponentHost></ng-template> -->", styles: [".col-lg-6{width:100%}.myt-font7{display:flex;justify-content:flex-start;align-items:center}.icon{display:inline-block;width:15px;height:15px;border-radius:50%;background-color:#08010177;color:#fff;text-align:center;line-height:16px;font-size:11px;font-family:Arial,sans-serif;font-weight:700;margin-left:5px}@media (min-width: 1200px){.col-lg-6{width:50%!important}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}}.icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background-color:#f5f5f5;border:1px solid #ddd;color:#666;margin-left:4px;font-size:12px;cursor:pointer!important}::ng-deep .mat-tooltip-panel{background:#fff!important}::ng-deep .mat-tooltip{background-color:#fff!important;color:#333!important;white-space:pre-line!important;line-height:1.5!important}.mat-tooltip{padding:8px 16px!important}::ng-deep .white-tooltip{white-space:pre-line!important;line-height:1.5!important}\n"] }]
427
+ args: [{ selector: 'lib-questionbook', template: "<!-- HA 20DEC23 Book Style from salesforce -->\r\n<!-- HA 28DEC23 Removed IsShengel(removal of shengel values applies for this reason) and direct styling of books to avoid styling issues-->\r\n<!-- HA 18JAN24 Added class for styling -->\r\n<div [style]=\"bookStyle\" class=\"content-box form-group\">\r\n <div class=\"form-row\">\r\n <!-- HA 20DEC23 Directive and Question Style from salesforce -->\r\n <!-- RA09DEC24 Changed keys-->\r\n <div\r\n [class]=\"'col-lg-' + ques.size + ' paddingnone'\"\r\n *ngFor=\"let ques of questions;let i = index\" [id]=\"ques.id\" [dir]=\"ques.langDirection\" [style]=\"ques?.style?.questionStyle\">\r\n <!-- Sub Question Label -->\r\n <!-- HA 20DEC23 Label Style from salesforce -->\r\n <!-- VD 09May24 is hide field change-->\r\n <div *ngIf=\"!ques.isHidden\">\r\n <div *ngIf=\"ques.type === 'DateTime'\">\r\n \r\n </div>\r\n <!-- VD 20JUN24 - help text changes-->\r\n <!-- VD 01Aug24 - validation change-->\r\n <!-- // VD 02Aug24 - label value style-->\r\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\" *ngIf=\"ques.style?.showLabel ? ques.style?.showLabel : true\" [style]=\"ques.style?.labelStyle\">\r\n <span [class]=\"'dis-flex shengel-myt-font3 myt-font7 '\" [style]=\"ques.style?.labelValueStyle\">{{ removeCharacters(ques?.questionText) }}\r\n <div *ngIf=\"ques.isOptional\" style=\"color: red;\">*</div>\r\n <!-- RS 17JAN2025 -->\r\n <!-- Displays icons with tooltips help text -->\r\n <div *ngIf=\"ques.questionText && ques?.helpText\" \r\n class=\"icon\" \r\n [matTooltip]=\"ques?.helpText\"\r\n matTooltipClass=\"white-tooltip\">i</div>\r\n <!-- RS 17JAN2025 -->\r\n <!-- Displays icons with tooltips for file requirements -->\r\n <div \r\n class=\"icon\" \r\n *ngIf=\"ques.fieldsMeta\"\r\n [matTooltip]=\"getFileRequirements(ques.fieldsMeta)\"\r\n matTooltipClass=\"white-tooltip\"\r\n style=\"margin-left: 4px;\"\r\n >i</div>\r\n </span>\r\n</div>\r\n <!-- // VD 12Jun24 - readonly change-->\r\n <!-- DateTime -->\r\n <div *ngIf=\"ques.type === 'DateTime'\">\r\n <app-custom-date-picker [minDate]=\"ques.minDate\" [error]=\"ques.error\" [errorMessage]=\"ques.errorMessage\" [readOnly]=\"ques.isReadOnly\" [date]=\"ques.input\" (dateChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-date-picker>\r\n </div>\r\n \r\n <!-- Date-->\r\n <div *ngIf=\"ques.type === 'Date'\">\r\n <app-custom-date [date]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.errorMessage\" [readOnly]=\"ques.isReadOnly\" (dateChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-date>\r\n </div>\r\n \r\n <!-- Time-->\r\n <div *ngIf=\"ques.type === 'Time'\">\r\n <app-custom-time [time]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.errorMessage\" [readOnly]=\"ques.isReadOnly\" (timeChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-time>\r\n </div>\r\n <!-- calendar -->\r\n <div *ngIf=\"ques.type === 'Calendar'\">\r\n <app-custom-calendar\r\n [question]=\"ques\"\r\n (eventSelected)=\"getCalendarEvent($event)\"\r\n (dateSelected)=\"getCurrentCalendar($event)\"\r\n (openModal)=\"openCalendarModal($event)\"\r\n (closeModal)=\"closeCalendarModal($event)\"\r\n ></app-custom-calendar>\r\n <!-- model used in calendar component -->\r\n <app-custom-model *ngIf=\"isCalendarModalOpen\"\r\n [modalTitle]=\"calendarModalTitle\"\r\n [isModalOpen]=\"isCalendarModalOpen\"\r\n [modalSize]=\"calendarModalSize\"\r\n [saveButtonValue]=\"calendarSaveButtonValue\"\r\n [modalFooter]=\"modalCalendarModalFooter\"\r\n (saveButtonEmit)=\"onCalendarModalSave()\"\r\n (cancelButtonEmit)=\"closeCalendarModal($event)\"\r\n >\r\n <lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\" (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\r\n </app-custom-model>\r\n </div>\r\n <!-- Text -->\r\n <div *ngIf=\"ques.type === 'Text' || ques.type === 'Link'\" >\r\n <app-custom-input [value]=\"ques.input\" [ngClassValue]=\"{\r\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.progressBar,\r\n textBox: !qbItem.progressBar\r\n }\" [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [idValue]=\"ques.trackingId\" [focusEvent]=\"clearSQError(ques.id)\"\r\n [error]=\"ques.error\" [placeholder]=\"ques.question\" (inputValue)=\"childEventCapture($event, ques)\">\r\n </app-custom-input>\r\n </div>\r\n \r\n <!-- for pick location -->\r\n <!-- VD 21DEC23 - dependent field change -->\r\n <div *ngIf=\"ques.type === 'Location'\">\r\n <!-- HA10012024 Added Api key as input -->\r\n <app-pick-location [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.selectedValue\" [question]=\"ques\" (locationSelected)=\"childEventCapture($event, ques)\">\r\n </app-pick-location>\r\n </div>\r\n \r\n <!-- for text area -->\r\n <div *ngIf=\"ques.type === 'TextArea'\">\r\n <app-custom-text-area [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.question \"\r\n (textareaValueChange)=\"childEventCapture($event, ques)\"></app-custom-text-area>\r\n </div>\r\n <!-- RS 06JAN25 -->\r\n <!-- for rich text editor -->\r\n <div *ngIf=\"ques.type === 'RichTextArea'\">\r\n <app-custom-rich-text \r\n [question]=\"ques\"\r\n [readOnly]=\"ques.isReadOnly\"\r\n [value]=\"ques.input || ''\"\r\n [error]=\"ques.error\"\r\n [placeholder]=\"ques.question\"\r\n (textValueChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-rich-text>\r\n </div>\r\n\r\n <!-- Email -->\r\n <div *ngIf=\"ques.type === 'Email'\">\r\n <input type=\"email\" readOnly=\"ques.isReadOnly\" [(ngModel)]=\"ques.input\" [id]=\"ques.id\" required=\"\" (focus)=\"clearSQError(ques.id)\"\r\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\" />\r\n </div>\r\n \r\n <!-- Table -->\r\n <!-- RS 03FEB2025 -->\r\n <!-- Added handleTableSave to handle table data persistence, enabling saving table contents to local storage when save button is clicked -->\r\n <div *ngIf=\"ques.type === 'Table'\" class=\"\">\r\n <app-custom-table [question]=\"ques\" [apiMeta]=\"ques.subText\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\"(saveTableData)=\"handleTableSave($event, ques)\">\r\n </app-custom-table>\r\n </div>\r\n \r\n <!-- Table Appendix -->\r\n <div *ngIf=\"ques.type === 'TableAppendix'\" class=\"\">\r\n <app-table-appendix [question]=\"ques\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-table-appendix>\r\n </div>\r\n <!-- list -->\r\n <!-- VD 20Aug24 used correct attribute -->\r\n <div *ngIf=\"ques.type === 'List'\" class=\"\">\r\n <lib-search-box [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [apiMeta]=\"ques.subText\" [id]=\"ques.id\" [placeHolderText]=\"ques.question\" [filterName]=\"ques.input\" (searchValueChange)=\"childEventCapture($event, ques)\">\r\n </lib-search-box>\r\n </div>\r\n \r\n <!-- Dropdown -->\r\n <!-- HA 09FEB24 Added condition of sqOption to the dropdown -->\r\n <div *ngIf=\"ques?.type === 'Dropdown' && ques?.options\" class=\"\">\r\n <!-- HA 20DEC23 For Translation --> <!-- VD 19JAN24 - getting token as input -->\r\n <!-- AP 10FEB25 - Dynamically binding selectedValue based on isShengel condition -->\r\n <app-custom-dropdown [options]=\"ques.options\"\r\n [token]=\"token\"\r\n [apiMeta]=\"ques.subText\" [id]=\"ques.id\"\r\n [selectedValue]=\"qbItem.isShengel ? ques.input : ques.selectedValue\" \r\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\r\n [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\"\r\n [referenceField]=\"ques.referenceField\"\r\n [readOnly]=\"ques.isReadOnly\"\r\n [question]=\"ques\"\r\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-custom-dropdown>\r\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"ques?.input?.length > 0\"></i>\r\n </div>\r\n <!-- // VD 02Aug24 custom-radio component -->\r\n <div *ngIf=\"ques.type === 'Radio' && ques?.options\" class=\"\">\r\n <app-custom-radio [options]=\"ques.options\" [token]=\"token\"\r\n [apiMeta]=\"ques.subText\" [id]=\"ques.id\" [selectedValue]=\"ques.selectedValue\"\r\n [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\"\r\n [referenceField]=\"ques.referenceField\"\r\n [readOnly]=\"ques.isReadOnly\"\r\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-custom-radio>\r\n </div>\r\n \r\n <!-- Attachment / Files -->\r\n <div *ngIf=\"ques.type === 'File'\" class=\"\">\r\n <app-file-upload [limitFileUploading]=\"5\" [error]=\"ques.error\" [question]=\"ques\" [allFiles]=\"ques.input\" [tableFile]=\"false\"\r\n (selectedFileData)=\"childEventCapture($event, ques)\" (deletedFileData)=\"deleteFile($event)\"\r\n [isDeleteFileButtonVisible]=\"true\"></app-file-upload>\r\n </div>\r\n <div *ngIf=\"ques.type === 'PopUpMessage'\" class=\"\">\r\n <app-dependent-table [alertMessage]=\"ques.errorMessage\">\r\n </app-dependent-table>\r\n </div>\r\n <div *ngIf=\"ques.type === 'Label'\" class=\"\">\r\n <app-custom-label [labelStyle]=\"ques.title\" [labelValue]=\"ques.question\">\r\n </app-custom-label>\r\n </div>\r\n <!-- // VD 02Aug24 image component -->\r\n <div *ngIf=\"ques.type === 'Image'\" class=\"\">\r\n <app-custom-image [question]=\"ques\">\r\n </app-custom-image>\r\n </div>\r\n <!-- 08NOV23 - button type question added -->\r\n <!-- Button -->\r\n <div *ngIf=\"ques.type === 'Button'\" class=\"\">\r\n <app-custom-button [height]=\"'50px'\"\r\n [width]=\"'150px'\"\r\n [buttonText]=\"ques?.question\"\r\n [value]=\"ques?.question\"\r\n (buttonValue)=\"childEventCapture($event, ques)\"\r\n >\r\n </app-custom-button>\r\n </div>\r\n <!-- HA 20DEC23 This is to load book type questions-->\r\n <div *ngIf=\"ques.type === 'Book'\">\r\n <!-- HA 09FEB24 Added ternary operator -->\r\n <lib-questionbook [qbItem]=\"ques.qbItem\" [labelValue]=\"labelValue\" [questions]=\"ques.qbItem?.subQuestions\" (handleDropDown)=\"getDropDown($event)\"></lib-questionbook>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- 06-09-24 for calendar type-->\r\n<!-- <ng-template dynamicComponentHost></ng-template> -->", styles: [".col-lg-6{width:100%}.myt-font7{display:flex;justify-content:flex-start;align-items:center}.icon{display:inline-block;width:15px;height:15px;border-radius:50%;background-color:#08010177;color:#fff;text-align:center;line-height:16px;font-size:11px;font-family:Arial,sans-serif;font-weight:700;margin-left:5px}@media (min-width: 1200px){.col-lg-6{width:50%!important}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}}.icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background-color:#f5f5f5;border:1px solid #ddd;color:#666;margin-left:4px;font-size:12px;cursor:pointer!important}::ng-deep .mat-tooltip-panel{background:#fff!important}::ng-deep .mat-tooltip{background-color:#fff!important;color:#333!important;white-space:pre-line!important;line-height:1.5!important}.mat-tooltip{padding:8px 16px!important}::ng-deep .white-tooltip{white-space:pre-line!important;line-height:1.5!important}\n"] }]
428
428
  }], ctorParameters: () => [{ type: i1.SalesforceService }, { type: i2.DataService }, { type: i3.ChangeService }, { type: i4.StorageService }, { type: i5.I18nService }, { type: i0.ChangeDetectorRef }, { type: Document, decorators: [{
429
429
  type: Inject,
430
430
  args: [DOCUMENT]
@@ -455,4 +455,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
455
455
  }], handleCalendarEvent: [{
456
456
  type: Output
457
457
  }] } });
458
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25ib29rLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUE2RCxNQUFNLGVBQWUsQ0FBQztBQU9sSixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHeEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQTRCLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUWpFLE1BQU0sT0FBTyxxQkFBcUI7SUF5RFo7SUFDVjtJQUNBO0lBQ0E7SUFDRDtJQUNDO0lBQ2tCO0lBOURuQixNQUFNLENBQWU7SUFDckIsWUFBWSxDQUFXO0lBQ3ZCLG1CQUFtQixHQUFXLEVBQUUsQ0FBQSxDQUFFLG1DQUFtQztJQUNyRSxTQUFTLENBQWE7SUFDdEIsWUFBWSxDQUFLO0lBQ2pCLFVBQVUsQ0FBUTtJQUNsQixLQUFLLENBQVEsQ0FBQyxzQ0FBc0M7SUFDbkQsY0FBYyxHQUFxQixJQUFJLFlBQVksRUFBTyxDQUFDO0lBQzNELGNBQWMsR0FBcUIsSUFBSSxZQUFZLEVBQU8sQ0FBQyxDQUFDLG9DQUFvQztJQUNqRyxZQUFZLENBQUs7SUFDMUIsMkZBQTJGO0lBQzNGLFlBQVksQ0FBYTtJQUN6QixnQkFBZ0IsR0FBVSxFQUFFLENBQUM7SUFDN0IsY0FBYyxH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QUUsS0FBSyxFQUFDLENBQUM7WUFDckIsdUVBQXVFO1lBQ3ZFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNsSCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqSCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFB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S0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RGLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3BHLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RGLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3JGLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ25GLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3JGLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBRS9GLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FB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cHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBWaWV3Q2hpbGQsIENoYW5nZURldGVjdG9yUmVmLCBTaW1wbGVDaGFuZ2VzLCBDb21wb25lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUXVlc3Rpb24sIFF1ZXN0aW9uQm9vayB9IGZyb20gJy4uLy4uL3dyYXBwZXInO1xyXG5pbXBvcnQgeyBTYWxlc2ZvcmNlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zYWxlc2ZvcmNlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hhbmdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBFcnJvcldyYXBwZXIgfSBmcm9tICcuLi8uLi9tb2RlbC9lcnJvcldyYXBwZXInO1xyXG4vLyBIQSAxOURFQzIzIGltcG9ydGVkIHRyYW5zbGF0aW9uIHNlcnZpY2VcclxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi9pMThuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IERlcGVuZGVuY3lNZXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9kZXBlbmRlbmN5TWV0YSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1xdWVzdGlvbmJvb2snLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9xdWVzdGlvbmJvb2suY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3F1ZXN0aW9uYm9vay5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uYm9va0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgcWJJdGVtOiBRdWVzdGlvbkJvb2s7XHJcbiAgQElucHV0KCkgcXVlc3Rpb25JdGVtOiBRdWVzdGlvbjtcclxuICBASW5wdXQoKSB0cmFuc2xhdGVkUXVlc3Rpb25zIDogYW55W10gPSBbXSAgLy8gVkQgMTFKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcclxuICBASW5wdXQoKSBxdWVzdGlvbnM6IFF1ZXN0aW9uW107XHJcbiAgQElucHV0KCkgZXJyb3JGaWVsZElkOmFueTtcclxuICBASW5wdXQoKSBsYWJlbFZhbHVlOnN0cmluZzsgXHJcbiAgQElucHV0KCkgdG9rZW46c3RyaW5nOyAvLyBWRCAxOUpBTjI0IC0gZ2V0dGluZyB0b2tlbiBhcyBpbnB1dFxyXG4gIEBPdXRwdXQoKSBoYW5kbGVEcm9wRG93bjpFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBoYW5kbGVRdWVzdGlvbjpFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpOyAvLyBWRCAxOUp1bDAxIC0gZ2V0IHVwZGF0ZWQgcXVlc3Rpb25cclxuICBASW5wdXQoKSBkcm9wRG93bkRhdGE6YW55O1xyXG4gIC8vQFZpZXdDaGlsZChDb21wb25lbnRob3N0RGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBkeW5hbWljSG9zdDogQ29tcG9uZW50aG9zdERpcmVjdGl2ZTtcclxuICBzdWJRdWVzdGlvbnM6IFF1ZXN0aW9uW107XHJcbiAgc2VsZWN0ZWRGaWxlRGF0YTogYW55W10gPSBbXTtcclxuICBsb2FkQ29tcG9uZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIC8vIEhBIDI4REVDMjMgQWRkZWQgc3R5bGluZyBhbmQgbG9naWNzIHRvIGxvYWQgdGhlIGJvb2sgdHlwZSBxdWVzdGlvbnMgXHJcbiAgcWJSZWY6IFF1ZXN0aW9uQm9vaztcclxuICAvLyAgSEEgMTlERUMyMyBEZWNsYXJhdGlvbiBmb3IgU2FsZXNmb3JjZSBTdHlsaW5nXHJcbiAgc3R5bGU6IGFueTtcclxuICBsYW5nRGlyZWN0aW9uID0gJ2x0cic7XHJcbiAgYm9va1N0eWxlOiBhbnk7XHJcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG4vLyBSUyAxN0pBTjIwMjVcclxuLy9Gb3JtYXRzIGFuZCByZXR1cm5zIGZpbGUgdXBsb2FkIHJlcXVpcmVtZW50cyBmcm9tIGEgSlNPTiBzdHJpbmdcclxuICBnZXRGaWxlUmVxdWlyZW1lbnRzKGZpZWxkc01ldGE6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBtZXRhRGF0YSA9IEpTT04ucGFyc2UoZmllbGRzTWV0YSk7XHJcbiAgICAgIGNvbnN0IGZpbGVDb25maWcgPSBtZXRhRGF0YVswXTtcclxuICAgICAgXHJcbiAgICAgIGlmICghZmlsZUNvbmZpZykgcmV0dXJuICcnO1xyXG5cclxuICAgICAgY29uc3QgcmVxdWlyZW1lbnRzID0gW107XHJcbiAgICAgIFxyXG4gICAgICBpZiAoZmlsZUNvbmZpZy5hbGxvd2VkVHlwZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgIHJlcXVpcmVtZW50cy5wdXNoKGBBY2NlcHRlZCBmb3JtYXRzOiAke2ZpbGVDb25maWcuYWxsb3dlZFR5cGVzLmpvaW4oJywgJyl9YCk7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIGlmIChmaWxlQ29uZmlnLm1heEZpbGVTaXplKSB7XHJcbiAgICAgICAgcmVxdWlyZW1lbnRzLnB1c2goYE1heGltdW0gc2l6ZSBwZXIgZmlsZTogJHtmaWxlQ29uZmlnLm1heEZpbGVTaXplIC8gMTA0ODU3Nn1NQmApO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBpZiAoZmlsZUNvbmZpZy5tYXhGaWxlcykge1xyXG4gICAgICAgIHJlcXVpcmVtZW50cy5wdXNoKGBNYXhpbXVtIG51bWJlciBvZiBmaWxlczogJHtmaWxlQ29uZmlnLm1heEZpbGVzfWApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gcmVxdWlyZW1lbnRzLm1hcChyZXEgPT4gcmVxLnRyaW0oKSkuam9pbignXFxuJyk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIGZpZWxkc01ldGE6JywgZXJyb3IpO1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG4gIEBPdXRwdXQoKSBoYWRsZURyb3BEb3duRGVwZW5kZW50OkV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIC8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlc1xyXG4gIEBPdXRwdXQoKSBoYW5kbGVDYWxlbmRhckRhdGU6RXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGhhbmRsZUNhbGVuZGFyRXZlbnQ6RXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgcHVibGljIGJvb2tRdWVzdGlvbnNNYXA6IGFueSA9IG5ldyBNYXAoKTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNmU2VydmljZTogU2FsZXNmb3JjZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcclxuICAgIHByaXZhdGUgY2hhbmdlU2VydmljZTogQ2hhbmdlU2VydmljZSwgXHJcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZSxcclxuICAgIHB1YmxpYyBpMThuU2VydmljZTogSTE4blNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudFxyXG4gICAgKSB7IFxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAvLyBWRCAxM1NlcDI0IGNoYW5nZXNcclxuICAgIHRoaXMucHJvY2Vzc0RhdGEoKTtcclxuICAgIC8vIFZEIHNlcDEzMjQgY2hhbmdlcyAtIHByb2Nlc3MgZGF0YSB3aGVuIGRhdGFiaW5kIHZhbHVlIGNoYW5nZVxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5nZVNlcnZpY2UuY3VzdG9tQ2hhbmdlJC5zdWJzY3JpYmUoXHJcbiAgICAgIChjaGFuZ2VWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgaWYoY2hhbmdlVmFsdWUgPT0gJ2RhdGFCaW5kJykge1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NEYXRhKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAgLy8gVkQgMTNTZXAyNCBjaGFuZ2VzXHJcbiAgIC8vIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzXHJcbiAgcHJvY2Vzc0RhdGEoKXtcclxuICAgIC8vICBIQSAxOURFQzIzIExvZ2ljIGZvciBRdWVzdGlvbiBCb29rIFN0eWxpbmcoU2xhZXNmb3JjZSlcclxuICAgIC8vIEhBIDA5RkVCMjQgQWRkZWQgdGVybmFyeVxyXG4gICAgaWYodGhpcy5xYkl0ZW0/LnN0eWxlKXtcclxuICAgICAgLy8gSEEgMjhERUMyMyBBZGRlZCBzdHlsaW5nIGFuZCBsb2dpY3MgdG8gbG9hZCB0aGUgYm9vayB0eXBlIHF1ZXN0aW9ucyBcclxuICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUgPSB0eXBlb2YgdGhpcy5xYkl0ZW0uc3R5bGUgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZSgnJyt0aGlzLnFiSXRlbT8uc3R5bGUpIDogdGhpcy5xYkl0ZW0uc3R5bGU7XHJcbiAgICAgIHRoaXMucWJJdGVtLnN0eWxlLmxhYmVsQ2xhc3MgPSB0aGlzLnFiSXRlbS5zdHlsZT8ubGFiZWxDbGFzcyA/IHRoaXMucWJJdGVtLnN0eWxlPy5sYWJlbENsYXNzIDogXCJcIjtcclxuICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUubGFiZWxTdHlsZSA9IHRoaXMucWJJdGVtLnN0eWxlPy5sYWJlbFN0eWxlID8gdGhpcy5xYkl0ZW0uc3R5bGU/LmxhYmVsU3R5bGUgOiBcIlwiO1xyXG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5sYWJlbFZhbHVlU3R5bGUgPSB0aGlzLnFiSXRlbS5zdHlsZT8ubGFiZWxWYWx1ZVN0eWxlID8gdGhpcy5xYkl0ZW0uc3R5bGU/LmxhYmVsVmFsdWVTdHlsZSA6IFwiXCI7XHJcbiAgICAgIHRoaXMucWJJdGVtLnN0eWxlLmlucHV0Q2xhc3MgPSB0aGlzLnFiSXRlbS5zdHlsZT8uaW5wdXRDbGFzcyA/IHRoaXMucWJJdGVtLnN0eWxlPy5pbnB1dENsYXNzIDogXCJcIjtcclxuICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUuaW5wdXRTdHlsZSA9IHRoaXMucWJJdGVtLnN0eWxlLmlucHV0U3R5bGUgPyB0aGlzLnFiSXRlbS5zdHlsZT8uaW5wdXRTdHlsZSA6IFwiXCI7XHJcbiAgICAgIHRoaXMucWJJdGVtLnN0eWxlLmJvb2tTdHlsZSA9IHRoaXMucWJJdGVtLnN0eWxlPy5ib29rU3R5bGUgPyB0aGlzLnFiSXRlbS5zdHlsZT8uYm9va1N0eWxlIDogXCJcIjtcclxuICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUuc2hvd0xhYmVsID0gdGhpcy5xYkl0ZW0uc3R5bGU/LnNob3dMYWJlbCA/IHRoaXMucWJJdGVtLnN0eWxlPy5zaG93TGFiZWwgOiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgaWYodGhpcy5xYkl0ZW0pe1xyXG4gICAgICAgIHRoaXMucWJJdGVtLnN0eWxlID0ge1xyXG4gICAgICAgICAgXCJsYWJlbENsYXNzXCIgOiBcIlwiLFxyXG4gICAgICAgICAgXCJsYWJlbFN0eWxlXCIgOiBcIlwiLFxyXG4gICAgICAgICAgXCJsYWJlbFZhbHVlU3R5bGVcIiA6IFwiXCIsXHJcbiAgICAgICAgICBcImlucHV0Q2xhc3NcIiA6IFwiXCIsXHJcbiAgICAgICAgICBcImlucHV0U3R5bGVcIiA6IFwiXCIsXHJcbiAgICAgICAgICBcImJvb2tTdHlsZVwiIDogXCJcIixcclxuICAgICAgICAgIFwic2hvd0xhYmVsXCI6IHRydWUsXHJcbiAgICAgICAgICBcImRpcmVjdGlvblwiIDogXCJsdHJcIixcclxuICAgICAgICAgIFwicXVlc3Rpb25TdHlsZVwiOiBcIlwiXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5xYkl0ZW0uc3R5bGUucXVlc3Rpb25TdHlsZSA9IHRoaXMucWJJdGVtPy5zdHlsZT8ucXVlc3Rpb25TdHlsZSA/IHRoaXMucWJJdGVtPy5zdHlsZS5xdWVzdGlvblN0eWxlIDogXCJcIjtcclxuICAgIHRoaXMubGFuZ0RpcmVjdGlvbiA9IHRoaXMucWJJdGVtLnN0eWxlLmRpcmVjdGlvbiA9IHRoaXMucWJJdGVtPy5zdHlsZT8uZGlyZWN0aW9uID8gdGhpcy5xYkl0ZW0/LnN0eWxlPy5kaXJlY3Rpb24gOiAnbHRyJztcclxuICAgIHRoaXMuYm9va1N0eWxlID0gdGhpcy5xYkl0ZW0/LnN0eWxlPy5ib29rU3R5bGU7XHJcbiAgICB0aGlzLnF1ZXN0aW9ucy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICB2YXIgaHRtbEVsZW1lbnQgPSBlbGVtZW50Py5xdWVzdGlvblRleHQgO1xyXG4gICAgICB2YXIgdGV4dE9ubHkgPSBodG1sRWxlbWVudD8ucmVwbGFjZSgvPFtePl0qPi9nLCAnJylcclxuICAgICAgZWxlbWVudC5xdWVzdGlvblRleHQgPSB0ZXh0T25seTtcclxuICAgICAgLy8gIEhBIDE5REVDMjMgTG9naWMgZm9yIFF1ZXN0aW9uIFN0eWxpbmcoU2xhZXNmb3JjZSlcclxuICAgICAgLy8gSEEgMjhERUMyMyBBZGRlZCBzdHlsaW5nIGFuZCBsb2dpY3MgdG8gbG9hZCB0aGUgYm9vayB0eXBlIHF1ZXN0aW9ucyBcclxuICAgICAgaWYoZWxlbWVudC50eXBlID09PSAnQm9vaycpe1xyXG4gICAgICAgIGlmKGVsZW1lbnRbJ3FiUmVmZXJlbmNlUXVlc3Rpb25zJ10pe1xyXG4gICAgICAgICAgdmFyIHFiID0gSlNPTi5wYXJzZShlbGVtZW50WydxYlJlZmVyZW5jZVF1ZXN0aW9ucyddKTtcclxuICAgICAgICAgIGlmKHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZSl7XHJcbiAgICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZSA9IHR5cGVvZiBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZSgnJytxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUpIDogcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlID0gdGhpcy5xYkl0ZW0uc3R5bGU7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gQm9vayB0eXBlIHF1ZXN0aW9uIHN0eWxpbmdcclxuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5sYWJlbENsYXNzID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5sYWJlbENsYXNzID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5sYWJlbENsYXNzIDogXCJcIjtcclxuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5sYWJlbFN0eWxlID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5sYWJlbFN0eWxlID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5sYWJlbFN0eWxlIDogXCJcIjtcclxuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5sYWJlbFZhbHVlU3R5bGUgPSBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfXz8ubGFiZWxWYWx1ZVN0eWxlID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLmxhYmVsVmFsdWVTdHlsZSA6IFwiXCI7XHJcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUuaW5wdXRDbGFzcyA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uaW5wdXRDbGFzcyA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uaW5wdXRDbGFzcyA6IFwiXCI7XHJcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUuaW5wdXRTdHlsZSA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uaW5wdXRTdHlsZSA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uaW5wdXRTdHlsZSA6IFwiXCI7XHJcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUuYm9va1N0eWxlID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5ib29rU3R5bGUgPyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmJvb2tTdHlsZSA6IFwiXCI7XHJcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUuc2hvd0xhYmVsID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5zaG93TGFiZWwgPyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LnNob3dMYWJlbCA6IHRydWU7XHJcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUucXVlc3Rpb25TdHlsZSA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8ucXVlc3Rpb25TdHlsZSA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8ucXVlc3Rpb25TdHlsZSA6IFwiXCI7XHJcbiAgICAgICAgICBxYlsnbGFuZ0RpcmVjdGlvbiddID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLmRpcmVjdGlvbiA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uZGlyZWN0aW9uIDogdGhpcy5sYW5nRGlyZWN0aW9uO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAvLyBMb29wIGZvciBlYWNoIHF1ZXN0aW9uIGluIHRoZSBib29rXHJcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3ViUXVlc3Rpb25zLmZvckVhY2gocXVlc3Rpb25Gcm9tQm9vayA9PiB7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2suc3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZSA6IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZTtcclxuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5zdHlsZS5sYWJlbENsYXNzID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ubGFiZWxDbGFzcyA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmxhYmVsQ2xhc3MgOiBcIlwiO1xyXG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmxhYmVsU3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5sYWJlbFN0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ubGFiZWxTdHlsZSA6IFwiXCI7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2suc3R5bGUubGFiZWxWYWx1ZVN0eWxlID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ubGFiZWxWYWx1ZVN0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ubGFiZWxWYWx1ZVN0eWxlIDogXCJcIjtcclxuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5zdHlsZS5pbnB1dENsYXNzID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uaW5wdXRDbGFzcyA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmlucHV0Q2xhc3MgOiBcIlwiO1xyXG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmlucHV0U3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5pbnB1dFN0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uaW5wdXRTdHlsZSA6IFwiXCI7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2suc3R5bGUuYm9va1N0eWxlID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uYm9va1N0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uYm9va1N0eWxlIDogXCJcIjtcclxuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5zdHlsZS5zaG93TGFiZWwgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5zaG93TGFiZWwgPyBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5zaG93TGFiZWwgOiB0cnVlO1xyXG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLnF1ZXN0aW9uU3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5xdWVzdGlvblN0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ucXVlc3Rpb25TdHlsZSA6IFwiXCI7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2tbJ2xhbmdEaXJlY3Rpb24nXSA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmRpcmVjdGlvbiA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmRpcmVjdGlvbiA6IHRoaXMubGFuZ0RpcmVjdGlvbjtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgZWxlbWVudFsncWJJdGVtJ10gPSBxYlsncXVlc3Rpb25ib29rJ107XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsZW1lbnQuc3R5bGUgPSBlbGVtZW50LnN0eWxlID8gdHlwZW9mIGVsZW1lbnQuc3R5bGUgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZSgnJytlbGVtZW50Py5zdHlsZSkgOiBlbGVtZW50Py5zdHlsZSA6IHRoaXMucWJJdGVtPy5zdHlsZTtcclxuXHJcbiAgICAgIGVsZW1lbnQuc3R5bGUubGFiZWxDbGFzcyA9IGVsZW1lbnQuc3R5bGU/LmxhYmVsQ2xhc3MgPyBlbGVtZW50LnN0eWxlPy5sYWJlbENsYXNzIDogXCJcIjtcclxuICAgICAgZWxlbWVudC5zdHlsZS5sYWJlbFN0eWxlID0gZWxlbWVudC5zdHlsZT8ubGFiZWxTdHlsZSA/IGVsZW1lbnQuc3R5bGU/LmxhYmVsU3R5bGUgOiBcIlwiO1xyXG4gICAgICBlbGVtZW50LnN0eWxlLmxhYmVsVmFsdWVTdHlsZSA9IGVsZW1lbnQuc3R5bGU/LmxhYmVsVmFsdWVTdHlsZSA/IGVsZW1lbnQuc3R5bGUubGFiZWxWYWx1ZVN0eWxlIDogXCJcIjtcclxuICAgICAgZWxlbWVudC5zdHlsZS5pbnB1dENsYXNzID0gZWxlbWVudC5zdHlsZT8uaW5wdXRDbGFzcyA/IGVsZW1lbnQuc3R5bGU/LmlucHV0Q2xhc3MgOiBcIlwiO1xyXG4gICAgICBlbGVtZW50LnN0eWxlLmlucHV0U3R5bGUgPSBlbGVtZW50LnN0eWxlLmlucHV0U3R5bGUgPyBlbGVtZW50LnN0eWxlPy5pbnB1dFN0eWxlIDogXCJcIjtcclxuICAgICAgZWxlbWVudC5zdHlsZS5ib29rU3R5bGUgPSBlbGVtZW50LnN0eWxlPy5ib29rU3R5bGUgPyBlbGVtZW50LnN0eWxlPy5ib29rU3R5bGUgOiBcIlwiO1xyXG4gICAgICBlbGVtZW50LnN0eWxlLnNob3dMYWJlbCA9IGVsZW1lbnQuc3R5bGU/LnNob3dMYWJlbCA/IGVsZW1lbnQuc3R5bGU/LnNob3dMYWJlbCA6IHRydWU7XHJcbiAgICAgIGVsZW1lbnQuc3R5bGUucXVlc3Rpb25TdHlsZSA9IGVsZW1lbnQuc3R5bGU/LnF1ZXN0aW9uU3R5bGUgPyBlbGVtZW50LnN0eWxlPy5xdWVzdGlvblN0eWxlIDogXCJcIjtcclxuXHJcbiAgICAgIGVsZW1lbnRbJ2xhbmdEaXJlY3Rpb24nXSA9IGVsZW1lbnQuc3R5bGU/LmRpcmVjdGlvbiA/IGVsZW1lbnQuc3R5bGU/LmRpcmVjdGlvbiA6IHRoaXMubGFuZ0RpcmVjdGlvbjtcclxuXHJcblxyXG4gICAgICAvL1ZEIDAyQXVnMjQgZGVwZW5kZW50IGZpZWxkIHNob3cvaGlkZSBjaGFuZ2VzXHJcbiAgICAgIC8vIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzXHJcbiAgICAgIGlmKGVsZW1lbnQucmVmZXJlbmNlRmllbGQpe1xyXG4gICAgICAgIGVsZW1lbnQuZGVwZW5kZW50UmVmID0gZWxlbWVudC5yZWZlcmVuY2VGaWVsZDtcclxuICAgICAgfVxyXG4gICAgICBpZihlbGVtZW50LnN1YlRleHQpe1xyXG4gICAgICAgICBsZXQgZGVwZW5kZW5jeU9iajogRGVwZW5kZW5jeU1ldGEgPSBKU09OLnBhcnNlKGVsZW1lbnQuc3ViVGV4dCk7XHJcbiAgICAgICAgIGlmKGRlcGVuZGVuY3lPYmouaXNEZXBlbmRlbnRGaWVsZCl7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuaXNIaWRkZW4gPSB0cnVlO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgLy8gVkQgMDdBdWcyNCAtIGlzRGVwZW5kZW50RmllbGQgY2hhbmdlXHJcbiAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuY2hhbmdlU2VydmljZS5jaGFuZ2VBbm5vdW5jZWQkLnN1YnNjcmliZShcclxuICAgICAgICAgICAgKGNoYW5nZVZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgIC8vIFZEIDIwQXVnMjQgLSBpc0RlcGVuZGVudEZpZWxkIGNoYW5nZVxyXG4gICAgICAgICAgICAgIGlmKGNoYW5nZVZhbHVlICE9IHVuZGVmaW5lZCAmJiBkZXBlbmRlbmN5T2JqLmlzRGVwZW5kZW50RmllbGQpIHtcclxuICAgICAgICAgICAgICAgIGlmKGNoYW5nZVZhbHVlLnZhbHVlT2JqICE9IHVuZGVmaW5lZCAmJiBjaGFuZ2VWYWx1ZS5mcm9tUXVlc3Rpb25JZCA9PSBkZXBlbmRlbmN5T2JqLnNvdXJjZVF1ZXN0aW9uSWQpIHtcclxuICAgICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQuaXNIaWRkZW5GaWVsZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIGlmKGRlcGVuZGVuY3lPYmouZGVwZW5kZW50VmFsdWUgPT0gY2hhbmdlVmFsdWUudmFsdWVPYmope1xyXG4gICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmlzSGlkZGVuID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaW5wdXQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZWxlY3RlZFZhbHVlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGVsZW1lbnQuZGVwZW5kZW50UmVmID09IGNoYW5nZVZhbHVlLnJlZmVyZW5jZUZpZWxkKXtcclxuICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucmVmZXJlbmNlRmllbGQgPSBjaGFuZ2VWYWx1ZS5yZWZlcmVuY2VGaWVsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmlzSGlkZGVuID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmlucHV0ID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZWxlY3RlZFZhbHVlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZURlcGVuZGVudEVsZW1lbnRzKGVsZW1lbnQuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIGRlcGVuZGVudCBzZWxlY3Rpb24gcmVtb3ZlIHRoZSByZWZlcmVuY2VcclxuICAgICAgICAgICAgICAgICAgICBpZihlbGVtZW50LmRlcGVuZGVudFJlZiA9PSBjaGFuZ2VWYWx1ZS5yZWZlcmVuY2VGaWVsZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucmVmZXJlbmNlRmllbGQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS51cGRhdGUoZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gc3VuZGF5IGNvbW1lbnRcclxuICAgICAgLy8gaWYgKGVsZW1lbnQudHlwZSA9PT0gJ0NhbGVuZGFyJykge1xyXG4gICAgICAvLyAgIHRoaXMub3BlbkNhbGVuZGFyQ29tcG9uZW50KGVsZW1lbnQpO1xyXG4gICAgICAvLyB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc3ViUXVlc3Rpb25zID0gW107XHJcbiAgICB0aGlzLnNldFN1YlF1ZXN0aW9ucyh0aGlzLnF1ZXN0aW9ucyk7XHJcbiAgICB0aGlzLnByb2Nlc3NUcmFuc2xhdGVkUXVlc3Rpb25zKCk7IFxyXG4gIH1cclxuLy8gVkQgMDdBdWcyNCAtIGlzRGVwZW5kZW50RmllbGQgY2hhbmdlXHJcbiAgaGlkZURlcGVuZGVudEVsZW1lbnRzKGVsZW1lbnRJZCkge1xyXG4gICAgbGV0IGVsZW1lbnRzVG9IaWRlID0gdGhpcy5xdWVzdGlvbnMuZmlsdGVyKGVsID0+IHtcclxuICAgICAgICBpZiAoZWwuc3ViVGV4dCkge1xyXG4gICAgICAgICAgICBsZXQgZGVwT2JqID0gSlNPTi5wYXJzZShlbC5zdWJUZXh0KTtcclxuICAgICAgICAgICAgcmV0dXJuIGRlcE9iai5zb3VyY2VRdWVzdGlvbklkID09IGVsZW1lbnRJZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZWxlbWVudHNUb0hpZGUuZm9yRWFjaChlbCA9PiB7XHJcbiAgICAgICAgZWwuaXNIaWRkZW4gPSB0cnVlO1xyXG4gICAgICAgIGVsLmlucHV0ID0gJyc7XHJcbiAgICAgICAgZWwuc2VsZWN0ZWRWYWx1ZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZShlbCk7XHJcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgaGlkZSBlbGVtZW50cyBkZXBlbmRlbnQgb24gdGhpcyBvbmVcclxuICAgICAgICB0aGlzLmhpZGVEZXBlbmRlbnRFbGVtZW50cyhlbC5pZCk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuICBjbGVhclNRRXJyb3IocXVlc0lkKSB7XHJcbiAgICB2YXIgc3FMaXN0ID0gdGhpcy5zdWJRdWVzdGlvbnM/LmZpbHRlcigoaXRlbSkgPT4gaXRlbS5pZCA9PSBxdWVzSWQpO1xyXG4gICAgZm9yICh2YXIgc3Egb2Ygc3FMaXN0KSB7XHJcbiAgICAgIHNxLmVycm9yID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcbiAvLyBWRCAxMUp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xyXG4gIHByb2Nlc3NUcmFuc2xhdGVkUXVlc3Rpb25zKCl7XHJcbiAgICBpZiAodGhpcy50cmFuc2xhdGVkUXVlc3Rpb25zICYmIHRoaXMudHJhbnNsYXRlZFF1ZXN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMucXVlc3Rpb25zLmZvckVhY2goKG9yZ1F1ZXN0aW9uOiBhbnkpPT4ge1xyXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVkUXVlc3Rpb25zLmZvckVhY2goKHRyYW5zUXVlc3Rpb246YW55KSA9PiB7XHJcbiAgICAgICAgICAgICBpZihvcmdRdWVzdGlvbi51bmlxdWVJZGVudGlmaWVyID09IHRyYW5zUXVlc3Rpb24uaWRlbnRpZmllcil7XHJcbiAgICAgICAgICAgICAgIG9yZ1F1ZXN0aW9uLnF1ZXN0aW9uVGV4dCA9IHRyYW5zUXVlc3Rpb24ubGFiZWw7XHJcbiAgICAgICAgICAgICAgIG9yZ1F1ZXN0aW9uLnF1ZXN0aW9uID0gdHJhbnNRdWVzdGlvbi5wbGFjZUhvbGRlcjtcclxuICAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIC8vICBjb25zb2xlLmxvZygnb3JpZ2luYWxRdWVzdGlvbicgKyB0aGlzLnF1ZXN0aW9ucyk7XHJcbiAgICAvLyAgY29uc29sZS5sb2codGhpcy5xdWVzdGlvbnMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0U3ViUXVlc3Rpb25zKHJlY29yZHMpIHtcclxuICAgIHRoaXMuc3ViUXVlc3Rpb25zLnB1c2gocmVjb3Jkcyk7XHJcbiAgfVxyXG5cclxuICAvLyBDYXB0dXJlIGFuZCBQcm9jZXNzIENoaWxkIEV2ZW50XHJcbiAgY2hpbGRFdmVudENhcHR1cmUoZXZlbnQsIHF1ZXM/OmFueSkge1xyXG4gICAgbGV0IGRyb3Bkb3duRGF0YSA9ICB7fTtcclxuICAgIHRoaXMuY2hhbmdlU2VydmljZS5hbm5vdW5jZUNoYW5nZShldmVudCk7XHJcbiAgICBpZihxdWVzKXtcclxuICAgICAgaWYocXVlcy50eXBlID09ICdEcm9wZG93bicgfHxxdWVzLnR5cGUgPT0gJ1JhZGlvJyApIHtcclxuICAgICAgICAvLyBIQSAxOUpBTjI0IENvcnJlY3Rpb24gb2YgZHJvcGRvd24gdmFsdWVzXHJcbiAgICAgICAgcXVlcy5zZWxlY3RlZE9iaiA9IGV2ZW50LnZhbHVlT2JqID8gZXZlbnQudmFsdWVPYmogOiBudWxsO1xyXG4gICAgICAgIHF1ZXMuaW5wdXQgPSBldmVudC5zZWxlY3RlZE9iaiA/IGV2ZW50LnNlbGVjdGVkT2JqIDogZXZlbnQudmFsdWVPYmo7XHJcbiAgICAgICAgcXVlcy5zZWxlY3RlZFZhbHVlID0gZXZlbnQudmFsdWVPYmogPyBldmVudC52YWx1ZU9iaiA6IG51bGw7XHJcbiAgICAgICAgLy8gZW1pdCB0aGUgZHJvcGRvd24gZGF0YSB0byBwYXJlbnRcclxuICAgICAgICBkcm9wZG93bkRhdGFbJ2V2ZW50J10gPSBldmVudC52YWx1ZU9iajtcclxuICAgICAgICBkcm9wZG93bkRhdGFbJ3F1ZXMnXSA9IHF1ZXM7XHJcbiAgICAgICAgaWYoZHJvcGRvd25EYXRhWydldmVudCddKXtcclxuICAgICAgICAgIHRoaXMuaGFuZGxlRHJvcERvd24uZW1pdChkcm9wZG93bkRhdGEpO1xyXG4gICAgICAgIH0gIC8vIFZEIDIxREVDMjMgLSBkZXBlbmRlbnQgZmllbGQgY2hhbmdlXHJcbiAgICAgIH0gZWxzZSBpZihxdWVzLnR5cGUgPT0gJ0xvY2F0aW9uJyl7XHJcbiAgICAgICAgcXVlcy5pbnB1dCA9IGV2ZW50LnZhbHVlT2JqO1xyXG4gICAgICAgIHF1ZXMuc2VsZWN0ZWRWYWx1ZSA9IGV2ZW50LnZhbHVlT2JqLmFkZHJlc3M7XHJcbiAgICAgIH1lbHNlIGlmKHF1ZXMudHlwZSA9PSAnRmlsZScpeyBcclxuICAgICAgICBxdWVzLmlucHV0ID0gdGhpcy5zZWxlY3RlZEZpbGVEYXRhID0gZXZlbnQ7XHJcblxyXG5cclxuIC8vIEhhbmRsZSBmaWxlIHZhbGlkYXRpb24gZXJyb3JzXHJcbiBpZiAoQXJyYXkuaXNBcnJheShldmVudCkgJiYgZXZlbnQubGVuZ3RoID09PSAwKSB7XHJcbiAgLy8gTm8gZmlsZXMgdXBsb2FkZWQgd2hlbiByZXF1aXJlZFxyXG4gIHF1ZXMuZXJyb3IgPSBxdWVzLkVycm9yX01lc3NhZ2VfX2MgPyBuZXcgRXJyb3JXcmFwcGVyKCkgOiBudWxsO1xyXG59IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZXZlbnQpICYmIGV2ZW50Lmxlbmd0aCA+IDApIHtcclxuICAvLyBGaWxlcyB3ZXJlIHN1Y2Nlc3NmdWxseSB1cGxvYWRlZFxyXG4gIHF1ZXMuZXJyb3IgPSBudWxsO1xyXG59XHJcblxyXG4vLyBJZiB0aGVyZSB3ZXJlIHZhbGlkYXRpb24gZXJyb3JzIGZyb20gdGhlIGZpbGUgdXBsb2FkIGNvbXBvbmVudFxyXG5pZiAoZXZlbnQudmFsaWRhdGlvbkVycm9ycyAmJiBldmVudC52YWxpZGF0aW9uRXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICBxdWVzLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xyXG4gIHF1ZXMuZXJyb3IubWVzc2FnZSA9IGV2ZW50LnZhbGlkYXRpb25FcnJvcnNbMF07IC8vIFVzZSB0aGUgZmlyc3QgdmFsaWRhdGlvbiBlcnJvclxyXG59XHJcblxyXG4gICAgICB9ZWxzZSBpZihxdWVzLnR5cGUgPT0gJ0RhdGUnIHx8IHF1ZXMudHlwZSA9PSAnRGF0ZVRpbWUnKXsgLy8gSEEgMjRKQU4yNCBDb252ZXJ0aW5nIERhdGUgYW5kIERhdGVUaW1lIHRvIFVUQ1xyXG4gICAgICAgICBpZihldmVudC52YWx1ZSl7XHJcbiAgICAgICAgICBsZXQgZCA9IG5ldyBEYXRlKGV2ZW50LnZhbHVlKTtcclxuICAgICAgICAgIGxldCB1dGNTdHJpbmcgPSBkPy50b0lTT1N0cmluZygpO1xyXG4gICAgICAgICAgcXVlcy5pbnB1dCA9IHV0Y1N0cmluZztcclxuICAgICAgICAgfWVsc2Uge1xyXG4gICAgICAgICAgcXVlcy5pbnB1dCA9ICcnO1xyXG4gICAgICAgICB9XHJcbiAgICAgIH1lbHNlIGlmKHF1ZXMudHlwZSA9PSAnTGlzdCcpe1xyXG4gICAgICAgIC8vIFZEIDIwQXVnMjQgaGFuZGxpbmcgdGhlIGxpc3QgdHlwZSAgaGFuZGxlIG11bHRpcGxlIG9iamVjdCB2YWx1ZXNcclxuICAgICAgICBxdWVzLmlucHV0ID0gdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZShldmVudC52YWx1ZU9iaixldmVudC5maWVsZCk7XHJcbiAgICAgIH0vL1JTIDA2SkFOMjVcclxuICAgICAgZWxzZSBpZiAocXVlcy50eXBlID09PSAnUmljaFRleHRBcmVhJykgeyAgICAgICAgIFxyXG4gICAgICAgIGNvbnNvbGUubG9nKCdSaWNoVGV4dEFyZWEgZXZlbnQ6JywgZXZlbnQpO1xyXG4gICAgICAgIHF1ZXMuaW5wdXQgPSBldmVudCB8fCAnJztcclxuICAgICAgfSBlbHNle1xyXG4gICAgICAgIHF1ZXMuaW5wdXQgPSBldmVudDtcclxuICAgICAgfVxyXG4gICAgICAvL1JTIDA2SkFOMjVcclxuICAgICAgLy8gVmFsaWRhdGUgZXJyb3IgbWVzc2FnZSAtIG1vZGlmaWVkIHRvIGhhbmRsZSByaWNoIHRleHRcclxuICAgICAgICAgIGNvbnN0IGhhc0Vycm9yID0gcXVlcy5FcnJvcl9NZXNzYWdlX19jICYmIChcclxuICAgICAgICAgICAgKHF1ZXMudHlwZSA9PT0gJ0ZpbGUnICYmIHF1ZXMuaW5wdXQubGVuZ3RoID09PSAwKSB8fFxyXG4gICAgICAgICAgICAocXVlcy50eXBlID09PSAnUmljaFRleHRBcmVhJyAmJiAoIXF1ZXMuaW5wdXQgfHwgcXVlcy5pbnB1dC50cmltKCkgPT09ICcnKSkgfHxcclxuICAgICAgICAgICAgKHF1ZXMudHlwZSAhPT0gJ0ZpbGUnICYmIHF1ZXMuVHlwZV9fYyAhPT0gJ1JpY2hUZXh0QXJlYScgJiYgIXF1ZXMuaW5wdXQpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcXVlcy5lcnJvciA9IGhhc0Vycm9yID8gbmV3IEVycm9yV3JhcHBlcigpIDogbnVsbDtcclxuICAgICAgcXVlcy5lcnJvciA9IGhhc0Vycm9yID8gbmV3IEVycm9yV3JhcHBlcigpIDogbnVsbDtcclxuICAgICAgLy8gT25jZSB0aGUgcmlnaHQgdmFsdWUgaXMgc3RvcmVkIGluIHF1ZXMuaW5wdXQgc3RvcmUgdGhlIHF1ZXMgKHdpdGggaW5wdXQpIGluIHN0b3JhZ2VTZXJ2aWNlXHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UudXBkYXRlKHF1ZXMpO1xyXG4gICAgICAvLyBWRCAxOUp1bDAxIC0gZ2V0IHVwZGF0ZWQgcXVlc3Rpb25cclxuICAgICAgdGhpcy5oYW5kbGVRdWVzdGlvbi5lbWl0KHF1ZXMpO1xyXG4gICAgfVxyXG4gIH1cclxuICBkZWxldGVGaWxlKGZpbGVEYXRhOmFueSl7XHJcbiAgICBjb25zb2xlLmxvZygnZmlsZURBVEEnLGZpbGVEYXRhKVxyXG4gIH1cclxuICBnZXREcm9wRG93bihldmVudDphbnkpe1xyXG4gICAgdGhpcy5oYWRsZURyb3BEb3duRGVwZW5kZW50LmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuLy8gVkQgMDZTZXAyNCBjYWxlbmRhciBjaGFuZ2VzXHJcbiAgZ2V0Q3VycmVudENhbGVuZGFyKGV2ZW50OmFueSl7XHJcbiAgICB0aGlzLmhhbmRsZUNhbGVuZGFyRGF0ZS5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIGdldENhbGVuZGFyRXZlbnQoZXZlbnQ6YW55KXtcclxuICAgIGlmKGV2ZW50KXtcclxuICAgICAgdGhpcy5oYW5kbGVDYWxlbmRhckV2ZW50LmVtaXQoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAvLyBWRCAwNlNlcDI0IHJlbW92ZSB0aGUgc3BlY2lhbCBjaGFyZWN0ZXJzIGFuZCB0YWdzIFxyXG4gIC8vIGZyb20gdGhlIHF1ZXN0aW9uVGV4dFxyXG4gIHJlbW92ZUNoYXJhY3RlcnMocXVlc3Rpb25UZXh0OnN0cmluZyl7XHJcbiAgICAgbGV0IHVwZGF0ZWRUZXh0ID0gcXVlc3Rpb25UZXh0Py5yZXBsYWNlKC88W14+XSo+L2csICcnKTtcclxuICAgICByZXR1cm4gdXBkYXRlZFRleHQ7XHJcbiAgfVxyXG5cclxuLy8gc3VuZGF5IGNvbW1lbnRcclxuICAvLyBvcGVuQ2FsZW5kYXJDb21wb25lbnQocXVlcykge1xyXG4gIC8vICAgY29uc3Qgdmlld0NvbnRhaW5lclJlZiA9IHRoaXMuZHluYW1pY0hvc3Qudmlld0NvbnRhaW5lclJlZjtcclxuICAvLyAgIGlmKHZpZXdDb250YWluZXJSZWYpe1xyXG4gIC8vICAgICB2aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XHJcbiAgLy8gICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KEN1c3RvbUNhbGVuZGFyQ29tcG9uZW50KTtcclxuICAvLyAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnF1ZXN0aW9uID0gcXVlcztcclxuICAvLyAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmRhdGVTZWxlY3RlZC5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHRoaXMuZ2V0Q3VycmVudENhbGVuZGFyKGV2ZW50KSk7XHJcbiAgLy8gICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5ldmVudFNlbGVjdGVkLnN1YnNjcmliZSgoZXZlbnQ6YW55KSA9PiB0aGlzLmdldENhbGVuZGFyRXZlbnQoZXZlbnQpKVxyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgaXNDYWxlbmRhck1vZGFsT3BlbiA9IGZhbHNlO1xyXG4gIGNhbGVuZGFyTW9kYWxUaXRsZTphbnk7XHJcbiAgY2FsZW5kYXJNb2RhbFNpemU6YW55O1xyXG4gIGNhbGVuZGFyU2F2ZUJ1dHRvblZhbHVlOiBhbnk7XHJcbiAgcmVmZXJlbmNlUXVlc3Rpb25zID0gW107XHJcbiAgcWJSZWZyZW5jZUJvb2s6YW55O1xyXG4gIG1vZGFsQ2FsZW5kYXJNb2RhbEZvb3Rlcjphbnk7XHJcbiAgLy9SUyAwM0ZFQjIwMjUgIFNhdmUgdGhlIHRhYmxlIGRhdGEgaW5kZXBlbmRlbnRseVxyXG4gIGhhbmRsZVRhYmxlU2F2ZSh0YWJsZURhdGE6IGFueSwgcXVlczogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZygnU2F2aW5nIHRhYmxlIGRhdGE6JywgdGFibGVEYXRhKTtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGB0YWJsZV8ke3F1ZXMuaWR9YCwgSlNPTi5zdHJpbmdpZnkodGFibGVEYXRhKSk7XHJcbiAgfVxyXG4gIG9wZW5DYWxlbmRhck1vZGFsKGV2ZW50KSB7XHJcbiAgICB0aGlzLmlzQ2FsZW5kYXJNb2RhbE9wZW4gPSB0cnVlO1xyXG4gICAgdGhpcy5xYlJlZnJlbmNlQm9vayA9IGV2ZW50LnFiUmVmcmVuY2VCb29rO1xyXG4gICAgdGhpcy5yZWZlcmVuY2VRdWVzdGlvbnMgPSBldmVudC5yZWZlcmVuY2VRdWVzdGlvbnM7XHJcbiAgICB0aGlzLmNhbGVuZGFyTW9kYWxUaXRsZSA9IGV2ZW50Lm1vZGFsVGl0bGU7XHJcbiAgICB0aGlzLmNhbGVuZGFyTW9kYWxTaXplID0gZXZlbnQubW9kYWxTaXplO1xyXG4gICAgdGhpcy5jYWxlbmRhclNhdmVCdXR0b25WYWx1ZSA9IGV2ZW50LnNhdmVCdXR0b25WYWx1ZTtcclxuICAgIHRoaXMubW9kYWxDYWxlbmRhck1vZGFsRm9vdGVyID0gZXZlbnQubW9kYWxGb290ZXI7XHJcbiAgfVxyXG5cclxuXHJcbiAgb25DYWxlbmRhck1vZGFsU2F2ZSgpe1xyXG4gICAgdGhpcy5jaGFuZ2VTZXJ2aWNlLmRhdGFDaGFuZ2VzKCdjYWxlbmRhci1tb2RhbC1zYXZlJyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgaGFuZGxlUXVlc3Rpb25FdmVudChldmVudCl7XHJcbiAgICBjb25zb2xlLmxvZygnaGFuZGxlIHF1ZXN0aW9uIGhlcmUnKTtcclxuICB9XHJcbiBcclxuICBjbG9zZUNhbGVuZGFyTW9kYWwoZXZlbnQpe1xyXG4gICAgdGhpcy5pc0NhbGVuZGFyTW9kYWxPcGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8IS0tIEhBIDIwREVDMjMgQm9vayBTdHlsZSBmcm9tIHNhbGVzZm9yY2UgLS0+XHJcbjwhLS0gSEEgMjhERUMyMyAgUmVtb3ZlZCBJc1NoZW5nZWwocmVtb3ZhbCBvZiBzaGVuZ2VsIHZhbHVlcyBhcHBsaWVzIGZvciB0aGlzIHJlYXNvbikgYW5kIGRpcmVjdCBzdHlsaW5nIG9mIGJvb2tzIHRvIGF2b2lkIHN0eWxpbmcgaXNzdWVzLS0+XHJcbjwhLS0gSEEgMThKQU4yNCAgQWRkZWQgY2xhc3MgZm9yIHN0eWxpbmcgLS0+XHJcbjxkaXYgW3N0eWxlXT1cImJvb2tTdHlsZVwiIGNsYXNzPVwiY29udGVudC1ib3ggZm9ybS1ncm91cFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XHJcbiAgICAgICAgPCEtLSBIQSAyMERFQzIzIERpcmVjdGl2ZSBhbmQgUXVlc3Rpb24gU3R5bGUgZnJvbSBzYWxlc2ZvcmNlIC0tPlxyXG4gICAgICAgIDwhLS0gUkEwOURFQzI0IENoYW5nZWQga2V5cy0tPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICAgW2NsYXNzXT1cIidjb2wtbGctJyArIHF1ZXMuc2l6ZSArICcgcGFkZGluZ25vbmUnXCJcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHF1ZXMgb2YgcXVlc3Rpb25zO2xldCBpID0gaW5kZXhcIiBbaWRdPVwicXVlcy5pZFwiIFtkaXJdPVwicXVlcy5sYW5nRGlyZWN0aW9uXCIgW3N0eWxlXT1cInF1ZXM/LnN0eWxlPy5xdWVzdGlvblN0eWxlXCI+XHJcbiAgICAgICAgICAgIDwhLS0gU3ViIFF1ZXN0aW9uIExhYmVsIC0tPlxyXG4gICAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgTGFiZWwgU3R5bGUgZnJvbSBzYWxlc2ZvcmNlIC0tPlxyXG4gICAgICAgICAgICA8IS0tIFZEIDA5TWF5MjQgaXMgaGlkZSBmaWVsZCBjaGFuZ2UtLT5cclxuICAgICAgICAgPGRpdiAqbmdJZj1cIiFxdWVzLmlzSGlkZGVuXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdEYXRlVGltZSdcIj5cclxuIFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBWRCAyMEpVTjI0IC0gaGVscCB0ZXh0IGNoYW5nZXMtLT5cclxuICAgICAgICAgICAgPCEtLSBWRCAwMUF1ZzI0IC0gdmFsaWRhdGlvbiBjaGFuZ2UtLT5cclxuICAgICAgICAgICAgPCEtLSAvLyBWRCAwMkF1ZzI0IC0gbGFiZWwgdmFsdWUgc3R5bGUtLT5cclxuICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IGRvd24yOiBxYkl0ZW0/LnByb2dyZXNzQmFyIH1cIiAqbmdJZj1cInF1ZXMuc3R5bGU/LnNob3dMYWJlbCA/IHF1ZXMuc3R5bGU/LnNob3dMYWJlbCA6IHRydWVcIiBbc3R5bGVdPVwicXVlcy5zdHlsZT8ubGFiZWxTdHlsZVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cIidkaXMtZmxleCBzaGVuZ2VsLW15dC1mb250MyBteXQtZm9udDcgJ1wiIFtzdHlsZV09XCJxdWVzLnN0eWxlPy5sYWJlbFZhbHVlU3R5bGVcIj57eyByZW1vdmVDaGFyYWN0ZXJzKHF1ZXM/LnF1ZXN0aW9uVGV4dCkgfX1cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICAqbmdJZj1cInF1ZXMuaXNPcHRpb25hbFwiIHN0eWxlPVwiY29sb3I6IHJlZDtcIj4qPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBSUyAxN0pBTjIwMjUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBEaXNwbGF5cyBpY29ucyB3aXRoIHRvb2x0aXBzIGhlbHAgdGV4dCAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5xdWVzdGlvblRleHQgJiYgcXVlcz8uaGVscFRleHRcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cInF1ZXM/LmhlbHBUZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwid2hpdGUtdG9vbHRpcFwiPmk8L2Rpdj5cclxuICAgICAgICA8IS0tIFJTIDE3SkFOMjAyNSAtLT5cclxuICAgICAgICA8IS0tICBEaXNwbGF5cyBpY29ucyB3aXRoIHRvb2x0aXBzIGZvciBmaWxlIHJlcXVpcmVtZW50cyAtLT5cclxuICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICBjbGFzcz1cImljb25cIiBcclxuICAgICAgICAgICAgKm5nSWY9XCJxdWVzLmZpZWxkc01ldGFcIlxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJnZXRGaWxlUmVxdWlyZW1lbnRzKHF1ZXMuZmllbGRzTWV0YSlcIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJ3aGl0ZS10b29sdGlwXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tbGVmdDogNHB4O1wiXHJcbiAgICAgICAgPmk8L2Rpdj5cclxuICAgIDwvc3Bhbj5cclxuPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gLy8gVkQgMTJKdW4yNCAtIHJlYWRvbmx5IGNoYW5nZS0tPlxyXG4gICAgICAgICAgICA8IS0tIERhdGVUaW1lIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnRGF0ZVRpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1kYXRlLXBpY2tlciBbbWluRGF0ZV09XCJxdWVzLm1pbkRhdGVcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiIFtlcnJvck1lc3NhZ2VdPVwicXVlcy5lcnJvck1lc3NhZ2VcIiBbcmVhZE9ubHldPVwicXVlcy5pc1JlYWRPbmx5XCIgW2RhdGVdPVwicXVlcy5pbnB1dFwiIChkYXRlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1kYXRlLXBpY2tlcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiBcclxuICAgICAgICAgICAgIDwhLS0gRGF0ZS0tPlxyXG4gICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0RhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1kYXRlICBbZGF0ZV09XCJxdWVzLmlucHV0XCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbZXJyb3JNZXNzYWdlXT1cInF1ZXMuZXJyb3JNZXNzYWdlXCIgW3JlYWRPbmx5XT1cInF1ZXMuaXNSZWFkT25seVwiIChkYXRlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1kYXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuIFxyXG4gICAgICAgICAgICAgPCEtLSBUaW1lLS0+XHJcbiAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnVGltZSdcIj5cclxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLXRpbWUgIFt0aW1lXT1cInF1ZXMuaW5wdXRcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiIFtlcnJvck1lc3NhZ2VdPVwicXVlcy5lcnJvck1lc3NhZ2VcIiBbcmVhZE9ubHldPVwicXVlcy5pc1JlYWRPbmx5XCIgKHRpbWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLXRpbWU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgIDwhLS0gY2FsZW5kYXIgIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnQ2FsZW5kYXInXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1jYWxlbmRhclxyXG4gICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cInF1ZXNcIlxyXG4gICAgICAgICAgICAgICAgKGV2ZW50U2VsZWN0ZWQpPVwiZ2V0Q2FsZW5kYXJFdmVudCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChkYXRlU2VsZWN0ZWQpPVwiZ2V0Q3VycmVudENhbGVuZGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKG9wZW5Nb2RhbCk9XCJvcGVuQ2FsZW5kYXJNb2RhbCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChjbG9zZU1vZGFsKT1cImNsb3NlQ2FsZW5kYXJNb2RhbCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgID48L2FwcC1jdXN0b20tY2FsZW5kYXI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIG1vZGVsIHVzZWQgaW4gY2FsZW5kYXIgY29tcG9uZW50IC0tPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tbW9kZWwgKm5nSWY9XCJpc0NhbGVuZGFyTW9kYWxPcGVuXCJcclxuICAgICAgICAgICAgICAgICAgICBbbW9kYWxUaXRsZV09XCJjYWxlbmRhck1vZGFsVGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpc01vZGFsT3Blbl09XCJpc0NhbGVuZGFyTW9kYWxPcGVuXCJcclxuICAgICAgICAgICAgICAgICAgICBbbW9kYWxTaXplXT1cImNhbGVuZGFyTW9kYWxTaXplXCJcclxuICAgICAgICAgICAgICAgICAgICBbc2F2ZUJ1dHRvblZhbHVlXT1cImNhbGVuZGFyU2F2ZUJ1dHRvblZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbbW9kYWxGb290ZXJdPVwibW9kYWxDYWxlbmRhck1vZGFsRm9vdGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAoc2F2ZUJ1dHRvbkVtaXQpPVwib25DYWxlbmRhck1vZGFsU2F2ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2FuY2VsQnV0dG9uRW1pdCk9XCJjbG9zZUNhbGVuZGFyTW9kYWwoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uYm9vayAgW3FiSXRlbV09XCJxYlJlZnJlbmNlQm9va1wiIFtxdWVzdGlvbnNdPVwicmVmZXJlbmNlUXVlc3Rpb25zXCIgKGhhbmRsZVF1ZXN0aW9uKT1cImhhbmRsZVF1ZXN0aW9uRXZlbnQoJGV2ZW50KVwiPjwvbGliLXF1ZXN0aW9uYm9vaz5cclxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1tb2RlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gVGV4dCAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1RleHQnIHx8IHF1ZXMudHlwZSA9PT0gJ0xpbmsnXCIgPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20taW5wdXQgW3ZhbHVlXT1cInF1ZXMuaW5wdXRcIiBbbmdDbGFzc1ZhbHVlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpcy1mbGV4IGR0LWxpbmUgZGF0ZS1saW5lIGJvb2tUZXh0IGJveG91dGxpbmUgbXl0LWZvbnQxJzogcWJJdGVtLnByb2dyZXNzQmFyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Qm94OiAhcWJJdGVtLnByb2dyZXNzQmFyXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiIFtxdWVzdGlvbl09XCJxdWVzXCIgW3JlYWRPbmx5XT1cInF1ZXMuaXNSZWFkT25seVwiIFtpZFZhbHVlXT1cInF1ZXMudHJhY2tpbmdJZFwiIFtmb2N1c0V2ZW50XT1cImNsZWFyU1FFcnJvcihxdWVzLmlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbcGxhY2Vob2xkZXJdPVwicXVlcy5xdWVzdGlvblwiIChpbnB1dFZhbHVlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1pbnB1dD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiBcclxuICAgICAgICAgICAgPCEtLSBmb3IgcGljayBsb2NhdGlvbiAtLT5cclxuICAgICAgICAgICAgPCEtLSAgIFZEIDIxREVDMjMgLSBkZXBlbmRlbnQgZmllbGQgY2hhbmdlIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnTG9jYXRpb24nXCI+XHJcbiAgICAgICAgICAgIDwhLS0gSEExMDAxMjAyNCBBZGRlZCBBcGkga2V5IGFzIGlucHV0IC0tPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1waWNrLWxvY2F0aW9uIFthcGlLZXldPVwicWJJdGVtWydhcGlLZXknXVwiIFthZGRyZXNzXT1cInF1ZXMuc2VsZWN0ZWRWYWx1ZVwiIFtxdWVzdGlvbl09XCJxdWVzXCIgKGxvY2F0aW9uU2VsZWN0ZWQpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9hcHAtcGljay1sb2NhdGlvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiBcclxuICAgICAgICAgICAgPCEtLSBmb3IgIHRleHQgYXJlYSAgIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnVGV4dEFyZWEnXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS10ZXh0LWFyZWEgW3F1ZXN0aW9uXT1cInF1ZXNcIiBbcmVhZE9ubHldPVwicXVlcy5pc1JlYWRPbmx5XCIgW3ZhbHVlXT1cInF1ZXMuaW5wdXRcIiBbcm93c109XCIzXCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbcGxhY2Vob2xkZXJdPVwicXVlcy5xdWVzdGlvbiBcIlxyXG4gICAgICAgICAgICAgICAgICAgICh0ZXh0YXJlYVZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj48L2FwcC1jdXN0b20tdGV4dC1hcmVhPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBSUyAwNkpBTjI1IC0tPlxyXG4gICAgICAgICAgIDwhLS0gZm9yIHJpY2ggdGV4dCBlZGl0b3IgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdSaWNoVGV4dEFyZWEnXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1yaWNoLXRleHQgXHJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cInF1ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJxdWVzLmlzUmVhZE9ubHlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJxdWVzLmlucHV0IHx8ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPVwicXVlcy5lcnJvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInF1ZXMucXVlc3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICh0ZXh0VmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLXJpY2gtdGV4dD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEVtYWlsIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnRW1haWwnXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImVtYWlsXCIgcmVhZE9ubHk9XCJxdWVzLmlzUmVhZE9ubHlcIiBbKG5nTW9kZWwpXT1cInF1ZXMuaW5wdXRcIiBbaWRdPVwicXVlcy5pZFwiIHJlcXVpcmVkPVwiXCIgKGZvY3VzKT1cImNsZWFyU1FFcnJvcihxdWVzLmlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3sgcXVlcy5lcnJvciA/ICdyZWQnIDogJycgfX1cIiBwbGFjZWhvbGRlcj1cInt7IHF1ZXMucXVlc3Rpb24gfX1cIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuIFxyXG4gICAgICAgICAgIDwhLS0gVGFibGUgLS0+XHJcbiAgICAgICAgICAgIDwhLS0gUlMgMDNGRUIyMDI1IC0tPlxyXG4gICAgICAgICAgICA8IS0tIEFkZGVkIGhhbmRsZVRhYmxlU2F2ZSB0byBoYW5kbGUgdGFibGUgZGF0YSBwZXJzaXN0ZW5jZSwgZW5hYmxpbmcgc2F2aW5nIHRhYmxlIGNvbnRlbnRzIHRvIGxvY2FsIHN0b3JhZ2Ugd2hlbiBzYXZlIGJ1dHRvbiBpcyBjbGlja2VkIC0tPlxyXG4gICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdUYWJsZSdcIiBjbGFzcz1cIlwiPlxyXG4gICAgICAgICAgICA8YXBwLWN1c3RvbS10YWJsZSBbcXVlc3Rpb25dPVwicXVlc1wiIFthcGlNZXRhXT1cInF1ZXMuc3ViVGV4dFwiICh2YWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpOyBjbGVhclNRRXJyb3IocXVlcy5pZClcIihzYXZlVGFibGVEYXRhKT1cImhhbmRsZVRhYmxlU2F2ZSgkZXZlbnQsIHF1ZXMpXCI+XHJcbiAgICAgICAgICAgIDwvYXBwLWN1c3RvbS10YWJsZT5cclxuICAgICAgICA8L2Rpdj5cclxuIFxyXG4gICAgICAgICAgICAgIDwhLS0gVGFibGUgQXBwZW5kaXggLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1RhYmxlQXBwZW5kaXgnXCIgY2xhc3M9XCJcIj5cclxuICAgICAgICAgICAgICAgIDxhcHAtdGFibGUtYXBwZW5kaXggW3F1ZXN0aW9uXT1cInF1ZXNcIiAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKTsgY2xlYXJTUUVycm9yKHF1ZXMuaWQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC10YWJsZS1hcHBlbmRpeD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICA8IS0tIGxpc3QgLS0+XHJcbiAgICAgICAgICAgICA8IS0tIFZEIDIwQXVnMjQgdXNlZCBjb3JyZWN0IGF0dHJpYnV0ZSAtLT5cclxuICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdMaXN0J1wiIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLXNlYXJjaC1ib3ggW3F1ZXN0aW9uXT1cInF1ZXNcIiBbcmVhZE9ubHldPVwicXVlcy5pc1JlYWRPbmx5XCIgW2FwaU1ldGFdPVwicXVlcy5zdWJUZXh0XCIgW2lkXT1cInF1ZXMuaWRcIiBbcGxhY2VIb2xkZXJUZXh0XT1cInF1ZXMucXVlc3Rpb25cIiAgW2ZpbHRlck5hbWVdPVwicXVlcy5pbnB1dFwiIChzZWFyY2hWYWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2xpYi1zZWFyY2gtYm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuIFxyXG4gICAgICAgICAgICA8IS0tIERyb3Bkb3duIC0tPlxyXG4gICAgICAgICAgICA8IS0tIEhBIDA5RkVCMjQgQWRkZWQgY29uZGl0aW9uIG9mIHNxT3B0aW9uIHRvIHRoZSBkcm9wZG93biAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXM/LnR5cGUgPT09ICdEcm9wZG93bicgJiYgcXVlcz8ub3B0aW9uc1wiIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPiA8IS0tIFZEIDE5SkFOMjQgLSBnZXR0aW5nIHRva2VuIGFzIGlucHV0IC0tPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tZHJvcGRvd24gW29wdGlvbnNdPVwicXVlcy5vcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICBbdG9rZW5dPVwidG9rZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgIFthcGlNZXRhXT1cInF1ZXMuc3ViVGV4dFwiIFtpZF09XCJxdWVzLmlkXCJcclxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZV09XCJxdWVzLnNlbGVjdGVkVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiLS0te3snc2VsZWN0JyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX0tLS1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvck1lc3NhZ2VdPVwicXVlcy5lcnJvck1lc3NhZ2VcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3JlZmVyZW5jZUZpZWxkXT1cInF1ZXMucmVmZXJlbmNlRmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJxdWVzLmlzUmVhZE9ubHlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJxdWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKTsgY2xlYXJTUUVycm9yKHF1ZXMuaWQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZWNrIFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwicXVlcz8uaW5wdXQ/Lmxlbmd0aCA+IDBcIj48L2k+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIC8vIFZEIDAyQXVnMjQgY3VzdG9tLXJhZGlvIGNvbXBvbmVudCAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1JhZGlvJyAmJiBxdWVzPy5vcHRpb25zXCIgY2xhc3M9XCJcIj5cclxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLXJhZGlvIFtvcHRpb25zXT1cInF1ZXMub3B0aW9uc1wiIFt0b2tlbl09XCJ0b2tlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2FwaU1ldGFdPVwicXVlcy5zdWJUZXh0XCIgW2lkXT1cInF1ZXMuaWRcIiBbc2VsZWN0ZWRWYWx1ZV09XCJxdWVzLnNlbGVjdGVkVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvck1lc3NhZ2VdPVwicXVlcy5lcnJvck1lc3NhZ2VcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3JlZmVyZW5jZUZpZWxkXT1cInF1ZXMucmVmZXJlbmNlRmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJxdWVzLmlzUmVhZE9ubHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpOyBjbGVhclNRRXJyb3IocXVlcy5pZClcIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1yYWRpbz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiBcclxuICAgICAgICAgICAgPCEtLSBBdHRhY2htZW50IC8gRmlsZXMgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdGaWxlJ1wiIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWZpbGUtdXBsb2FkIFtsaW1pdEZpbGVVcGxvYWRpbmddPVwiNVwiIFtlcnJvcl09XCJxdWVzLmVycm9yXCIgW3F1ZXN0aW9uXT1cInF1ZXNcIiBbYWxsRmlsZXNdPVwicXVlcy5pbnB1dFwiIFt0YWJsZUZpbGVdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkRmlsZURhdGEpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiIChkZWxldGVkRmlsZURhdGEpPVwiZGVsZXRlRmlsZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIFtpc0RlbGV0ZUZpbGVCdXR0b25WaXNpYmxlXT1cInRydWVcIj48L2FwcC1maWxlLXVwbG9hZD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdQb3BVcE1lc3NhZ2UnXCIgY2xhc3M9XCJcIj5cclxuICAgICAgICAgICAgICAgIDxhcHAtZGVwZW5kZW50LXRhYmxlIFthbGVydE1lc3NhZ2VdPVwicXVlcy5lcnJvck1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLWRlcGVuZGVudC10YWJsZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdMYWJlbCdcIiBjbGFzcz1cIlwiPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tbGFiZWwgW2xhYmVsU3R5bGVdPVwicXVlcy50aXRsZVwiIFtsYWJlbFZhbHVlXT1cInF1ZXMucXVlc3Rpb25cIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1sYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICA8IS0tIC8vIFZEIDAyQXVnMjQgaW1hZ2UgY29tcG9uZW50IC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnSW1hZ2UnXCIgY2xhc3M9XCJcIj5cclxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLWltYWdlIFtxdWVzdGlvbl09XCJxdWVzXCI+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20taW1hZ2U+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIDA4Tk9WMjMgLSBidXR0b24gdHlwZSBxdWVzdGlvbiBhZGRlZCAtLT5cclxuICAgICAgICAgICAgIDwhLS0gQnV0dG9uIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnQnV0dG9uJ1wiIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1idXR0b24gW2hlaWdodF09XCInNTBweCdcIlxyXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIicxNTBweCdcIlxyXG4gICAgICAgICAgICAgICAgW2J1dHRvblRleHRdPVwicXVlcz8ucXVlc3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInF1ZXM/LnF1ZXN0aW9uXCJcclxuICAgICAgICAgICAgICAgIChidXR0b25WYWx1ZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgIFRoaXMgaXMgdG8gbG9hZCBib29rIHR5cGUgcXVlc3Rpb25zLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdCb29rJ1wiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBIQSAwOUZFQjI0IEFkZGVkIHRlcm5hcnkgb3BlcmF0b3IgLS0+XHJcbiAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uYm9vayBbcWJJdGVtXT1cInF1ZXMucWJJdGVtXCIgW2xhYmVsVmFsdWVdPVwibGFiZWxWYWx1ZVwiIFtxdWVzdGlvbnNdPVwicXVlcy5xYkl0ZW0/LnN1YlF1ZXN0aW9uc1wiICAoaGFuZGxlRHJvcERvd24pPVwiZ2V0RHJvcERvd24oJGV2ZW50KVwiPjwvbGliLXF1ZXN0aW9uYm9vaz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPCEtLSAwNi0wOS0yNCBmb3IgY2FsZW5kYXIgdHlwZS0tPlxyXG48IS0tIDxuZy10ZW1wbGF0ZSBkeW5hbWljQ29tcG9uZW50SG9zdD48L25nLXRlbXBsYXRlPiAtLT4iXX0=
458
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25ib29rLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUE2RCxNQUFNLGVBQWUsQ0FBQztBQU9sSixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHeEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQTRCLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUWpFLE1BQU0sT0FBTyxxQkFBcUI7SUF5RFo7SUFDVjtJQUNBO0lBQ0E7SUFDRDtJQUNDO0lBQ2tCO0lBOURuQixNQUFNLENBQWU7SUFDckIsWUFBWSxDQUFXO0lBQ3ZCLG1CQUFtQixHQUFXLEVBQUUsQ0FBQSxDQUFFLG1DQUFtQztJQUNyRSxTQUFTLENBQWE7SUFDdEIsWUFBWSxDQUFLO0lBQ2pCLFVBQVUsQ0FBUTtJQUNsQixLQUFLLENBQVEsQ0FBQyxzQ0FBc0M7SUFDbkQsY0FBYyxHQUFxQixJQUFJLFlBQVksRUFBTyxDQUFDO0lBQzNELGNBQWMsR0FBcUIsSUFBSSxZQUFZLEVBQU8sQ0FBQyxDQUFDLG9DQUFvQztJQUNqRyxZQUFZLENBQUs7SUFDMUIsMkZBQTJGO0lBQzNGLFlBQVksQ0FBYTtJQUN6QixnQkFBZ0IsR0FBVSxFQUFFLENBQUM7SUFDN0IsY0FBYyxH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QUUsS0FBSyxFQUFDLENBQUM7WUFDckIsdUVBQXVFO1lBQ3ZFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNsSCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqSCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFB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S0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RGLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3BHLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RGLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3JGLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ25GLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3JGLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBRS9GLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7WUFHcEcsOENBQThDO1lBQzlDLDBCQUEwQjtZQUMxQixJQUFHLE9BQU8sQ0FBQyxjQUFjLEVBQUMsQ0FBQztnQkFDekIsT0FBTyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO1lBQ2hELENBQUM7WUFDRCxJQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUMsQ0FBQztnQkFDakIsSUFBSSxhQUFhLEdBQW1CLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNoRSxJQUFHLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBQyxDQUFDO29CQUNoQyxPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDM0IsQ0FBQztnQkFDRix1Q0FBdUM7Z0JBQ3JDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQy9ELENBQUMsV0FBVyxFQUFFLEVBQUU7b0JBQ2IsdUNBQXVDO29CQUN4QyxJQUFHLFdBQVcsSUFBSSxTQUFTLElBQUksYUFBYSxDQUFDLGdCQUFnQixFQUFFLENBQUM7d0JBQzlELElBQUcsV0FBVyxDQUFDLFFBQVEsSUFBSSxTQUFTLElBQUksV0FBVyxDQUFDLGNBQWMsSUFBSSxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzs0QkFDcEcsZ0NBQWdDOzRCQUNqQyxJQUFHLGFBQWEsQ0FBQyxjQUFjLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBQyxDQUFDO2dDQUN0RCxPQUFPLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztnQ0FDekIsT0FBTyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7Z0NBQ25CLE9BQU8sQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO2dDQUNuQyxJQUFHLE9BQU8sQ0FBQyxZQUFZLElBQUksV0FBVyxDQUFDLGNBQWMsRUFBQyxDQUFDO29DQUNyRCxPQUFPLENBQUMsY0FBYyxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUM7Z0NBQ3RELENBQUM7NEJBQ0gsQ0FBQztpQ0FBSyxDQUFDO2dDQUNMLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dDQUN4QixPQUFPLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQ0FDbkIsT0FBTyxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7Z0NBQ2xDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7Z0NBQ3ZDLDBEQUEwRDtnQ0FDMUQsSUFBRyxPQUFPLENBQUMsWUFBWSxJQUFJLFdBQVcsQ0FBQyxjQUFjLEVBQUMsQ0FBQztvQ0FDbkQsT0FBTyxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7Z0NBQ2hDLENBQUM7NEJBQ0gsQ0FBQzt3QkFDSCxDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQyxDQUNGLENBQUM7Z0JBQ0osSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEMsQ0FBQztZQUNELGlCQUFpQjtZQUNqQixxQ0FBcUM7WUFDckMseUNBQXlDO1lBQ3pDLElBQUk7UUFDTixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFDSCx1Q0FBdUM7SUFDckMscUJBQXFCLENBQUMsU0FBUztRQUM3QixJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUM1QyxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDYixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDcEMsT0FBTyxNQUFNLENBQUMsZ0JBQWdCLElBQUksU0FBUyxDQUFDO1lBQ2hELENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztRQUVILGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDeEIsRUFBRSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDbkIsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDZCxFQUFFLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztZQUM3QixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMvQixrREFBa0Q7WUFDbEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFQyxZQUFZLENBQUMsTUFBTTtRQUNqQixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsQ0FBQztRQUNwRSxLQUFLLElBQUksRUFBRSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ3RCLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0lBQ0YsbUNBQW1DO0lBQ2xDLDBCQUEwQjtRQUN4QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBZ0IsRUFBQyxFQUFFO2dCQUN2QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBaUIsRUFBRSxFQUFFO29CQUNwRCxJQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsSUFBSSxhQUFhLENBQUMsVUFBVSxFQUFDLENBQUM7d0JBQzNELFdBQVcsQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQzt3QkFDL0MsV0FBVyxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDO29CQUNuRCxDQUFDO2dCQUNKLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7WUFDTCxxREFBcUQ7WUFDckQsZ0NBQWdDO1FBQ2hDLENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLE9BQU87UUFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBUztRQUNoQyxJQUFJLFlBQVksR0FBSSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsSUFBRyxJQUFJLEVBQUMsQ0FBQztZQUNQLElBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxVQUFVLElBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLEVBQUcsQ0FBQztnQkFDbkQsMkNBQTJDO2dCQUMzQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDMUQsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO2dCQUNwRSxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDNUQsbUNBQW1DO2dCQUNuQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztnQkFDdkMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDNUIsSUFBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUMsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3pDLENBQUMsQ0FBRSxzQ0FBc0M7WUFDM0MsQ0FBQztpQkFBTSxJQUFHLElBQUksQ0FBQyxJQUFJLElBQUksVUFBVSxFQUFDLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUM5QyxDQUFDO2lCQUFLLElBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxNQUFNLEVBQUMsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO2dCQUdsRCxnQ0FBZ0M7Z0JBQ2hDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUNoRCxrQ0FBa0M7b0JBQ2xDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2pFLENBQUM7cUJBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3BELG1DQUFtQztvQkFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Z0JBQ3BCLENBQUM7Z0JBRUQsaUVBQWlFO2dCQUNqRSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNoRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7b0JBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlDQUFpQztnQkFDbkYsQ0FBQztZQUVLLENBQUM7aUJBQUssSUFBRyxJQUFJLENBQUMsSUFBSSxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLFVBQVUsRUFBQyxDQUFDLENBQUMsaURBQWlEO2dCQUN4RyxJQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUMsQ0FBQztvQkFDZixJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzlCLElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQztvQkFDakMsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7Z0JBQ3hCLENBQUM7cUJBQUssQ0FBQztvQkFDTixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDakIsQ0FBQztZQUNKLENBQUM7aUJBQUssSUFBRyxJQUFJLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFBQyxDQUFDO2dCQUM1QixtRUFBbUU7Z0JBQ25FLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckUsQ0FBQyxDQUFBLFlBQVk7aUJBQ1IsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGNBQWMsRUFBRSxDQUFDO2dCQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDM0IsQ0FBQztpQkFBSyxDQUFDO2dCQUNMLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLENBQUM7WUFDRCxZQUFZO1lBQ1osd0RBQXdEO1lBQ3BELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUN4QyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztnQkFDakQsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLGNBQWMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUMzRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUN6RSxDQUFDO1lBQ0YsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUN0RCxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ2xELDZGQUE2RjtZQUM3RixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQyxvQ0FBb0M7WUFDcEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFDRCxVQUFVLENBQUMsUUFBWTtRQUNyQixPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBQyxRQUFRLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBQ0QsV0FBVyxDQUFDLEtBQVM7UUFDbkIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ0gsOEJBQThCO0lBQzVCLGtCQUFrQixDQUFDLEtBQVM7UUFDMUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBUztRQUN4QixJQUFHLEtBQUssRUFBQyxDQUFDO1lBQ1IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQztJQUVGLHFEQUFxRDtJQUNwRCx3QkFBd0I7SUFDeEIsZ0JBQWdCLENBQUMsWUFBbUI7UUFDakMsSUFBSSxXQUFXLEdBQUcsWUFBWSxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDeEQsT0FBTyxXQUFXLENBQUM7SUFDdEIsQ0FBQztJQUVILGlCQUFpQjtJQUNmLGdDQUFnQztJQUNoQyxnRUFBZ0U7SUFDaEUsMEJBQTBCO0lBQzFCLGdDQUFnQztJQUNoQyxzRkFBc0Y7SUFDdEYsNkNBQTZDO0lBQzdDLG9HQUFvRztJQUNwRyxpR0FBaUc7SUFDakcsTUFBTTtJQUNOLElBQUk7SUFFSixtQkFBbUIsR0FBRyxLQUFLLENBQUM7SUFDNUIsa0JBQWtCLENBQUs7SUFDdkIsaUJBQWlCLENBQUs7SUFDdEIsdUJBQXVCLENBQU07SUFDN0Isa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLGNBQWMsQ0FBSztJQUNuQix3QkFBd0IsQ0FBSztJQUM3QixpREFBaUQ7SUFDakQsZUFBZSxDQUFDLFNBQWMsRUFBRSxJQUFTO1FBQ3ZDLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDN0MsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUNELGlCQUFpQixDQUFDLEtBQUs7UUFDckIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztRQUNoQyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7UUFDM0MsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztRQUNuRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUMzQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUN6QyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQztRQUNyRCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztJQUNwRCxDQUFDO0lBR0QsbUJBQW1CO1FBQ2pCLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUdELG1CQUFtQixDQUFDLEtBQUs7UUFDdkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFLO1FBQ3RCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7SUFDbkMsQ0FBQzt3R0F2WlUscUJBQXFCLHFNQStEdEIsUUFBUTs0RkEvRFAscUJBQXFCLHVmQ25CbEMsNDlZQWtOeUQsdTJJRC9MNUMscUJBQXFCOzs0RkFBckIscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLGtCQUFrQjs7MEJBbUV6QixNQUFNOzJCQUFDLFFBQVE7eUNBOURULE1BQU07c0JBQWQsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0ksY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNFLFlBQVk7c0JBQXBCLEtBQUs7Z0JBMENJLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFFRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBWaWV3Q2hpbGQsIENoYW5nZURldGVjdG9yUmVmLCBTaW1wbGVDaGFuZ2VzLCBDb21wb25lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUXVlc3Rpb24sIFF1ZXN0aW9uQm9vayB9IGZyb20gJy4uLy4uL3dyYXBwZXInO1xyXG5pbXBvcnQgeyBTYWxlc2ZvcmNlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zYWxlc2ZvcmNlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hhbmdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBFcnJvcldyYXBwZXIgfSBmcm9tICcuLi8uLi9tb2RlbC9lcnJvcldyYXBwZXInO1xyXG4vLyBIQSAxOURFQzIzIGltcG9ydGVkIHRyYW5zbGF0aW9uIHNlcnZpY2VcclxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi9pMThuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IERlcGVuZGVuY3lNZXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9kZXBlbmRlbmN5TWV0YSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1xdWVzdGlvbmJvb2snLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9xdWVzdGlvbmJvb2suY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3F1ZXN0aW9uYm9vay5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uYm9va0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgcWJJdGVtOiBRdWVzdGlvbkJvb2s7XHJcbiAgQElucHV0KCkgcXVlc3Rpb25JdGVtOiBRdWVzdGlvbjtcclxuICBASW5wdXQoKSB0cmFuc2xhdGVkUXVlc3Rpb25zIDogYW55W10gPSBbXSAgLy8gVkQgMTFKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcclxuICBASW5wdXQoKSBxdWVzdGlvbnM6IFF1ZXN0aW9uW107XHJcbiAgQElucHV0KCkgZXJyb3JGaWVsZElkOmFueTtcclxuICBASW5wdXQoKSBsYWJlbFZhbHVlOnN0cmluZzsgXHJcbiAgQElucHV0KCkgdG9rZW46c3RyaW5nOyAvLyBWRCAxOUpBTjI0IC0gZ2V0dGluZyB0b2tlbiBhcyBpbnB1dFxyXG4gIEBPdXRwdXQoKSBoYW5kbGVEcm9wRG93bjpFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBoYW5kbGVRdWVzdGlvbjpFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpOyAvLyBWRCAxOUp1bDAxIC0gZ2V0IHVwZGF0ZWQgcXVlc3Rpb25cclxuICBASW5wdXQoKSBkcm9wRG93bkRhdGE6YW55O1xyXG4gIC8vQFZpZXdDaGlsZChDb21wb25lbnRob3N0RGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBkeW5hbWljSG9zdDogQ29tcG9uZW50aG9zdERpcmVjdGl2ZTtcclxuICBzdWJRdWVzdGlvbnM6IFF1ZXN0aW9uW107XHJcbiAgc2VsZWN0ZWRGaWxlRGF0YTogYW55W10gPSBbXTtcclxuICBsb2FkQ29tcG9uZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIC8vIEhBIDI4REVDMjMgQWRkZWQgc3R5bGluZyBhbmQgbG9naWNzIHRvIGxvYWQgdGhlIGJvb2sgdHlwZSBxdWVzdGlvbnMgXHJcbiAgcWJSZWY6IFF1ZXN0aW9uQm9vaztcclxuICAvLyAgSEEgMTlERUMyMyBEZWNsYXJhdGlvbiBmb3IgU2FsZXNmb3JjZSBTdHlsaW5nXHJcbiAgc3R5bGU6IGFueTtcclxuICBsYW5nRGlyZWN0aW9uID0gJ2x0cic7XHJcbiAgYm9va1N0eWxlOiBhbnk7XHJcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG4vLyBSUyAxN0pBTjIwMjVcclxuLy9Gb3JtYXRzIGFuZCByZXR1cm5zIGZpbGUgdXBsb2FkIHJlcXVpcmVtZW50cyBmcm9tIGEgSlNPTiBzdHJpbmdcclxuICBnZXRGaWxlUmVxdWlyZW1lbnRzKGZpZWxkc01ldGE6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBtZXRhRGF0YSA9IEpTT04ucGFyc2UoZmllbGRzTWV0YSk7XHJcbiAgICAgIGNvbnN0IGZpbGVDb25maWcgPSBtZXRhRGF0YVswXTtcclxuICAgICAgXHJcbiAgICAgIGlmICghZmlsZUNvbmZpZykgcmV0dXJuICcnO1xyXG5cclxuICAgICAgY29uc3QgcmVxdWlyZW1lbnRzID0gW107XHJcbiAgICAgIFxyXG4gICAgICBpZiAoZmlsZUNvbmZpZy5hbGxvd2VkVHlwZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgIHJlcXVpcmVtZW50cy5wdXNoKGBBY2NlcHRlZCBmb3JtYXRzOiAke2ZpbGVDb25maWcuYWxsb3dlZFR5cGVzLmpvaW4oJywgJyl9YCk7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIGlmIChmaWxlQ29uZmlnLm1heEZpbGVTaXplKSB7XHJcbiAgICAgICAgcmVxdWlyZW1lbnRzLnB1c2goYE1heGltdW0gc2l6ZSBwZXIgZmlsZTogJHtmaWxlQ29uZmlnLm1heEZpbGVTaXplIC8gMTA0ODU3Nn1NQmApO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBpZiAoZmlsZUNvbmZpZy5tYXhGaWxlcykge1xyXG4gICAgICAgIHJlcXVpcmVtZW50cy5wdXNoKGBNYXhpbXVtIG51bWJlciBvZiBmaWxlczogJHtmaWxlQ29uZmlnLm1heEZpbGVzfWApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gcmVxdWlyZW1lbnRzLm1hcChyZXEgPT4gcmVxLnRyaW0oKSkuam9pbignXFxuJyk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIGZpZWxkc01ldGE6JywgZXJyb3IpO1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG4gIEBPdXRwdXQoKSBoYWRsZURyb3BEb3duRGVwZW5kZW50OkV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIC8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlc1xyXG4gIEBPdXRwdXQoKSBoYW5kbGVDYWxlbmRhckRhdGU6RXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGhhbmRsZUNhbGVuZGFyRXZlbnQ6RXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgcHVibGljIGJvb2tRdWVzdGlvbnNNYXA6IGFueSA9IG5ldyBNYXAoKTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNmU2VydmljZTogU2FsZXNmb3JjZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcclxuICAgIHByaXZhdGUgY2hhbmdlU2VydmljZTogQ2hhbmdlU2VydmljZSwgXHJcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZSxcclxuICAgIHB1YmxpYyBpMThuU2VydmljZTogSTE4blNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudFxyXG4gICAgKSB7IFxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAvLyBWRCAxM1NlcDI0IGNoYW5nZXNcclxuICAgIHRoaXMucHJvY2Vzc0RhdGEoKTtcclxuICAgIC8vIFZEIHNlcDEzMjQgY2hhbmdlcyAtIHByb2Nlc3MgZGF0YSB3aGVuIGRhdGFiaW5kIHZhbHVlIGNoYW5nZVxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5nZVNlcnZpY2UuY3VzdG9tQ2hhbmdlJC5zdWJzY3JpYmUoXHJcbiAgICAgIChjaGFuZ2VWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgaWYoY2hhbmdlVmFsdWUgPT0gJ2RhdGFCaW5kJykge1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NEYXRhKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAgLy8gVkQgMTNTZXAyNCBjaGFuZ2VzXHJcbiAgIC8vIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzXHJcbiAgcHJvY2Vzc0RhdGEoKXtcclxuICAgIC8vICBIQSAxOURFQzIzIExvZ2ljIGZvciBRdWVzdGlvbiBCb29rIFN0eWxpbmcoU2xhZXNmb3JjZSlcclxuICAgIC8vIEhBIDA5RkVCMjQgQWRkZWQgdGVybmFyeVxyXG4gICAgaWYodGhpcy5xYkl0ZW0/LnN0eWxlKXtcclxuICAgICAgLy8gSEEgMjhERUMyMyBBZGRlZCBzdHlsaW5nIGFuZCBsb2dpY3MgdG8gbG9hZCB0aGUgYm9vayB0eXBlIHF1ZXN0aW9ucyBcclxuICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUgPSB0eXBlb2YgdGhpcy5xYkl0ZW0uc3R5bGUgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZSgnJyt0aGlzLnFiSXRlbT8uc3R5bGUpIDogdGhpcy5xYkl0ZW0uc3R5bGU7XHJcbiAgICAgIHRoaXMucWJJdGVtLnN0eWxlLmxhYmVsQ2xhc3MgPSB0aGlzLnFiSXRlbS5zdHlsZT8ubGFiZWxDbGFzcyA/IHRoaXMucWJJdGVtLnN0eWxlPy5sYWJlbENsYXNzIDogXCJcIjtcclxuICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUubGFiZWxTdHlsZSA9IHRoaXMucWJJdGVtLnN0eWxlPy5sYWJlbFN0eWxlID8gdGhpcy5xYkl0ZW0uc3R5bGU/LmxhYmVsU3R5bGUgOiBcIlwiO1xyXG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5sYWJlbFZhbHVlU3R5bGUgPSB0aGlzLnFiSXRlbS5zdHlsZT8ubGFiZWxWYWx1ZVN0eWxlID8gdGhpcy5xYkl0ZW0uc3R5bGU/LmxhYmVsVmFsdWVTdHlsZSA6IFwiXCI7XHJcbiAgICAgIHRoaXMucWJJdGVtLnN0eWxlLmlucHV0Q2xhc3MgPSB0aGlzLnFiSXRlbS5zdHlsZT8uaW5wdXRDbGFzcyA/IHRoaXMucWJJdGVtLnN0eWxlPy5pbnB1dENsYXNzIDogXCJcIjtcclxuICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUuaW5wdXRTdHlsZSA9IHRoaXMucWJJdGVtLnN0eWxlLmlucHV0U3R5bGUgPyB0aGlzLnFiSXRlbS5zdHlsZT8uaW5wdXRTdHlsZSA6IFwiXCI7XHJcbiAgICAgIHRoaXMucWJJdGVtLnN0eWxlLmJvb2tTdHlsZSA9IHRoaXMucWJJdGVtLnN0eWxlPy5ib29rU3R5bGUgPyB0aGlzLnFiSXRlbS5zdHlsZT8uYm9va1N0eWxlIDogXCJcIjtcclxuICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUuc2hvd0xhYmVsID0gdGhpcy5xYkl0ZW0uc3R5bGU/LnNob3dMYWJlbCA/IHRoaXMucWJJdGVtLnN0eWxlPy5zaG93TGFiZWwgOiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgaWYodGhpcy5xYkl0ZW0pe1xyXG4gICAgICAgIHRoaXMucWJJdGVtLnN0eWxlID0ge1xyXG4gICAgICAgICAgXCJsYWJlbENsYXNzXCIgOiBcIlwiLFxyXG4gICAgICAgICAgXCJsYWJlbFN0eWxlXCIgOiBcIlwiLFxyXG4gICAgICAgICAgXCJsYWJlbFZhbHVlU3R5bGVcIiA6IFwiXCIsXHJcbiAgICAgICAgICBcImlucHV0Q2xhc3NcIiA6IFwiXCIsXHJcbiAgICAgICAgICBcImlucHV0U3R5bGVcIiA6IFwiXCIsXHJcbiAgICAgICAgICBcImJvb2tTdHlsZVwiIDogXCJcIixcclxuICAgICAgICAgIFwic2hvd0xhYmVsXCI6IHRydWUsXHJcbiAgICAgICAgICBcImRpcmVjdGlvblwiIDogXCJsdHJcIixcclxuICAgICAgICAgIFwicXVlc3Rpb25TdHlsZVwiOiBcIlwiXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5xYkl0ZW0uc3R5bGUucXVlc3Rpb25TdHlsZSA9IHRoaXMucWJJdGVtPy5zdHlsZT8ucXVlc3Rpb25TdHlsZSA/IHRoaXMucWJJdGVtPy5zdHlsZS5xdWVzdGlvblN0eWxlIDogXCJcIjtcclxuICAgIHRoaXMubGFuZ0RpcmVjdGlvbiA9IHRoaXMucWJJdGVtLnN0eWxlLmRpcmVjdGlvbiA9IHRoaXMucWJJdGVtPy5zdHlsZT8uZGlyZWN0aW9uID8gdGhpcy5xYkl0ZW0/LnN0eWxlPy5kaXJlY3Rpb24gOiAnbHRyJztcclxuICAgIHRoaXMuYm9va1N0eWxlID0gdGhpcy5xYkl0ZW0/LnN0eWxlPy5ib29rU3R5bGU7XHJcbiAgICB0aGlzLnF1ZXN0aW9ucy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICB2YXIgaHRtbEVsZW1lbnQgPSBlbGVtZW50Py5xdWVzdGlvblRleHQgO1xyXG4gICAgICB2YXIgdGV4dE9ubHkgPSBodG1sRWxlbWVudD8ucmVwbGFjZSgvPFtePl0qPi9nLCAnJylcclxuICAgICAgZWxlbWVudC5xdWVzdGlvblRleHQgPSB0ZXh0T25seTtcclxuICAgICAgLy8gIEhBIDE5REVDMjMgTG9naWMgZm9yIFF1ZXN0aW9uIFN0eWxpbmcoU2xhZXNmb3JjZSlcclxuICAgICAgLy8gSEEgMjhERUMyMyBBZGRlZCBzdHlsaW5nIGFuZCBsb2dpY3MgdG8gbG9hZCB0aGUgYm9vayB0eXBlIHF1ZXN0aW9ucyBcclxuICAgICAgaWYoZWxlbWVudC50eXBlID09PSAnQm9vaycpe1xyXG4gICAgICAgIGlmKGVsZW1lbnRbJ3FiUmVmZXJlbmNlUXVlc3Rpb25zJ10pe1xyXG4gICAgICAgICAgdmFyIHFiID0gSlNPTi5wYXJzZShlbGVtZW50WydxYlJlZmVyZW5jZVF1ZXN0aW9ucyddKTtcclxuICAgICAgICAgIGlmKHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZSl7XHJcbiAgICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZSA9IHR5cGVvZiBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZSgnJytxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUpIDogcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlID0gdGhpcy5xYkl0ZW0uc3R5bGU7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gQm9vayB0eXBlIHF1ZXN0aW9uIHN0eWxpbmdcclxuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5sYWJlbENsYXNzID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5sYWJlbENsYXNzID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5sYWJlbENsYXNzIDogXCJcIjtcclxuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5sYWJlbFN0eWxlID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5sYWJlbFN0eWxlID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5sYWJlbFN0eWxlIDogXCJcIjtcclxuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5sYWJlbFZhbHVlU3R5bGUgPSBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfXz8ubGFiZWxWYWx1ZVN0eWxlID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLmxhYmVsVmFsdWVTdHlsZSA6IFwiXCI7XHJcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUuaW5wdXRDbGFzcyA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uaW5wdXRDbGFzcyA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uaW5wdXRDbGFzcyA6IFwiXCI7XHJcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUuaW5wdXRTdHlsZSA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uaW5wdXRTdHlsZSA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uaW5wdXRTdHlsZSA6IFwiXCI7XHJcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUuYm9va1N0eWxlID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5ib29rU3R5bGUgPyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmJvb2tTdHlsZSA6IFwiXCI7XHJcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUuc2hvd0xhYmVsID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5zaG93TGFiZWwgPyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LnNob3dMYWJlbCA6IHRydWU7XHJcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUucXVlc3Rpb25TdHlsZSA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8ucXVlc3Rpb25TdHlsZSA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8ucXVlc3Rpb25TdHlsZSA6IFwiXCI7XHJcbiAgICAgICAgICBxYlsnbGFuZ0RpcmVjdGlvbiddID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLmRpcmVjdGlvbiA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uZGlyZWN0aW9uIDogdGhpcy5sYW5nRGlyZWN0aW9uO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAvLyBMb29wIGZvciBlYWNoIHF1ZXN0aW9uIGluIHRoZSBib29rXHJcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3ViUXVlc3Rpb25zLmZvckVhY2gocXVlc3Rpb25Gcm9tQm9vayA9PiB7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2suc3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZSA6IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZTtcclxuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5zdHlsZS5sYWJlbENsYXNzID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ubGFiZWxDbGFzcyA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmxhYmVsQ2xhc3MgOiBcIlwiO1xyXG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmxhYmVsU3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5sYWJlbFN0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ubGFiZWxTdHlsZSA6IFwiXCI7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2suc3R5bGUubGFiZWxWYWx1ZVN0eWxlID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ubGFiZWxWYWx1ZVN0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ubGFiZWxWYWx1ZVN0eWxlIDogXCJcIjtcclxuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5zdHlsZS5pbnB1dENsYXNzID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uaW5wdXRDbGFzcyA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmlucHV0Q2xhc3MgOiBcIlwiO1xyXG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmlucHV0U3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5pbnB1dFN0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uaW5wdXRTdHlsZSA6IFwiXCI7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2suc3R5bGUuYm9va1N0eWxlID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uYm9va1N0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uYm9va1N0eWxlIDogXCJcIjtcclxuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5zdHlsZS5zaG93TGFiZWwgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5zaG93TGFiZWwgPyBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5zaG93TGFiZWwgOiB0cnVlO1xyXG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLnF1ZXN0aW9uU3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5xdWVzdGlvblN0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ucXVlc3Rpb25TdHlsZSA6IFwiXCI7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2tbJ2xhbmdEaXJlY3Rpb24nXSA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmRpcmVjdGlvbiA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmRpcmVjdGlvbiA6IHRoaXMubGFuZ0RpcmVjdGlvbjtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgZWxlbWVudFsncWJJdGVtJ10gPSBxYlsncXVlc3Rpb25ib29rJ107XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsZW1lbnQuc3R5bGUgPSBlbGVtZW50LnN0eWxlID8gdHlwZW9mIGVsZW1lbnQuc3R5bGUgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZSgnJytlbGVtZW50Py5zdHlsZSkgOiBlbGVtZW50Py5zdHlsZSA6IHRoaXMucWJJdGVtPy5zdHlsZTtcclxuXHJcbiAgICAgIGVsZW1lbnQuc3R5bGUubGFiZWxDbGFzcyA9IGVsZW1lbnQuc3R5bGU/LmxhYmVsQ2xhc3MgPyBlbGVtZW50LnN0eWxlPy5sYWJlbENsYXNzIDogXCJcIjtcclxuICAgICAgZWxlbWVudC5zdHlsZS5sYWJlbFN0eWxlID0gZWxlbWVudC5zdHlsZT8ubGFiZWxTdHlsZSA/IGVsZW1lbnQuc3R5bGU/LmxhYmVsU3R5bGUgOiBcIlwiO1xyXG4gICAgICBlbGVtZW50LnN0eWxlLmxhYmVsVmFsdWVTdHlsZSA9IGVsZW1lbnQuc3R5bGU/LmxhYmVsVmFsdWVTdHlsZSA/IGVsZW1lbnQuc3R5bGUubGFiZWxWYWx1ZVN0eWxlIDogXCJcIjtcclxuICAgICAgZWxlbWVudC5zdHlsZS5pbnB1dENsYXNzID0gZWxlbWVudC5zdHlsZT8uaW5wdXRDbGFzcyA/IGVsZW1lbnQuc3R5bGU/LmlucHV0Q2xhc3MgOiBcIlwiO1xyXG4gICAgICBlbGVtZW50LnN0eWxlLmlucHV0U3R5bGUgPSBlbGVtZW50LnN0eWxlLmlucHV0U3R5bGUgPyBlbGVtZW50LnN0eWxlPy5pbnB1dFN0eWxlIDogXCJcIjtcclxuICAgICAgZWxlbWVudC5zdHlsZS5ib29rU3R5bGUgPSBlbGVtZW50LnN0eWxlPy5ib29rU3R5bGUgPyBlbGVtZW50LnN0eWxlPy5ib29rU3R5bGUgOiBcIlwiO1xyXG4gICAgICBlbGVtZW50LnN0eWxlLnNob3dMYWJlbCA9IGVsZW1lbnQuc3R5bGU/LnNob3dMYWJlbCA/IGVsZW1lbnQuc3R5bGU/LnNob3dMYWJlbCA6IHRydWU7XHJcbiAgICAgIGVsZW1lbnQuc3R5bGUucXVlc3Rpb25TdHlsZSA9IGVsZW1lbnQuc3R5bGU/LnF1ZXN0aW9uU3R5bGUgPyBlbGVtZW50LnN0eWxlPy5xdWVzdGlvblN0eWxlIDogXCJcIjtcclxuXHJcbiAgICAgIGVsZW1lbnRbJ2xhbmdEaXJlY3Rpb24nXSA9IGVsZW1lbnQuc3R5bGU/LmRpcmVjdGlvbiA/IGVsZW1lbnQuc3R5bGU/LmRpcmVjdGlvbiA6IHRoaXMubGFuZ0RpcmVjdGlvbjtcclxuXHJcblxyXG4gICAgICAvL1ZEIDAyQXVnMjQgZGVwZW5kZW50IGZpZWxkIHNob3cvaGlkZSBjaGFuZ2VzXHJcbiAgICAgIC8vIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzXHJcbiAgICAgIGlmKGVsZW1lbnQucmVmZXJlbmNlRmllbGQpe1xyXG4gICAgICAgIGVsZW1lbnQuZGVwZW5kZW50UmVmID0gZWxlbWVudC5yZWZlcmVuY2VGaWVsZDtcclxuICAgICAgfVxyXG4gICAgICBpZihlbGVtZW50LnN1YlRleHQpe1xyXG4gICAgICAgICBsZXQgZGVwZW5kZW5jeU9iajogRGVwZW5kZW5jeU1ldGEgPSBKU09OLnBhcnNlKGVsZW1lbnQuc3ViVGV4dCk7XHJcbiAgICAgICAgIGlmKGRlcGVuZGVuY3lPYmouaXNEZXBlbmRlbnRGaWVsZCl7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuaXNIaWRkZW4gPSB0cnVlO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgLy8gVkQgMDdBdWcyNCAtIGlzRGVwZW5kZW50RmllbGQgY2hhbmdlXHJcbiAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuY2hhbmdlU2VydmljZS5jaGFuZ2VBbm5vdW5jZWQkLnN1YnNjcmliZShcclxuICAgICAgICAgICAgKGNoYW5nZVZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgIC8vIFZEIDIwQXVnMjQgLSBpc0RlcGVuZGVudEZpZWxkIGNoYW5nZVxyXG4gICAgICAgICAgICAgIGlmKGNoYW5nZVZhbHVlICE9IHVuZGVmaW5lZCAmJiBkZXBlbmRlbmN5T2JqLmlzRGVwZW5kZW50RmllbGQpIHtcclxuICAgICAgICAgICAgICAgIGlmKGNoYW5nZVZhbHVlLnZhbHVlT2JqICE9IHVuZGVmaW5lZCAmJiBjaGFuZ2VWYWx1ZS5mcm9tUXVlc3Rpb25JZCA9PSBkZXBlbmRlbmN5T2JqLnNvdXJjZVF1ZXN0aW9uSWQpIHtcclxuICAgICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQuaXNIaWRkZW5GaWVsZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIGlmKGRlcGVuZGVuY3lPYmouZGVwZW5kZW50VmFsdWUgPT0gY2hhbmdlVmFsdWUudmFsdWVPYmope1xyXG4gICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmlzSGlkZGVuID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaW5wdXQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZWxlY3RlZFZhbHVlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGVsZW1lbnQuZGVwZW5kZW50UmVmID09IGNoYW5nZVZhbHVlLnJlZmVyZW5jZUZpZWxkKXtcclxuICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucmVmZXJlbmNlRmllbGQgPSBjaGFuZ2VWYWx1ZS5yZWZlcmVuY2VGaWVsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmlzSGlkZGVuID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmlucHV0ID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZWxlY3RlZFZhbHVlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZURlcGVuZGVudEVsZW1lbnRzKGVsZW1lbnQuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIGRlcGVuZGVudCBzZWxlY3Rpb24gcmVtb3ZlIHRoZSByZWZlcmVuY2VcclxuICAgICAgICAgICAgICAgICAgICBpZihlbGVtZW50LmRlcGVuZGVudFJlZiA9PSBjaGFuZ2VWYWx1ZS5yZWZlcmVuY2VGaWVsZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucmVmZXJlbmNlRmllbGQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS51cGRhdGUoZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gc3VuZGF5IGNvbW1lbnRcclxuICAgICAgLy8gaWYgKGVsZW1lbnQudHlwZSA9PT0gJ0NhbGVuZGFyJykge1xyXG4gICAgICAvLyAgIHRoaXMub3BlbkNhbGVuZGFyQ29tcG9uZW50KGVsZW1lbnQpO1xyXG4gICAgICAvLyB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc3ViUXVlc3Rpb25zID0gW107XHJcbiAgICB0aGlzLnNldFN1YlF1ZXN0aW9ucyh0aGlzLnF1ZXN0aW9ucyk7XHJcbiAgICB0aGlzLnByb2Nlc3NUcmFuc2xhdGVkUXVlc3Rpb25zKCk7IFxyXG4gIH1cclxuLy8gVkQgMDdBdWcyNCAtIGlzRGVwZW5kZW50RmllbGQgY2hhbmdlXHJcbiAgaGlkZURlcGVuZGVudEVsZW1lbnRzKGVsZW1lbnRJZCkge1xyXG4gICAgbGV0IGVsZW1lbnRzVG9IaWRlID0gdGhpcy5xdWVzdGlvbnMuZmlsdGVyKGVsID0+IHtcclxuICAgICAgICBpZiAoZWwuc3ViVGV4dCkge1xyXG4gICAgICAgICAgICBsZXQgZGVwT2JqID0gSlNPTi5wYXJzZShlbC5zdWJUZXh0KTtcclxuICAgICAgICAgICAgcmV0dXJuIGRlcE9iai5zb3VyY2VRdWVzdGlvbklkID09IGVsZW1lbnRJZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZWxlbWVudHNUb0hpZGUuZm9yRWFjaChlbCA9PiB7XHJcbiAgICAgICAgZWwuaXNIaWRkZW4gPSB0cnVlO1xyXG4gICAgICAgIGVsLmlucHV0ID0gJyc7XHJcbiAgICAgICAgZWwuc2VsZWN0ZWRWYWx1ZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZShlbCk7XHJcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgaGlkZSBlbGVtZW50cyBkZXBlbmRlbnQgb24gdGhpcyBvbmVcclxuICAgICAgICB0aGlzLmhpZGVEZXBlbmRlbnRFbGVtZW50cyhlbC5pZCk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuICBjbGVhclNRRXJyb3IocXVlc0lkKSB7XHJcbiAgICB2YXIgc3FMaXN0ID0gdGhpcy5zdWJRdWVzdGlvbnM/LmZpbHRlcigoaXRlbSkgPT4gaXRlbS5pZCA9PSBxdWVzSWQpO1xyXG4gICAgZm9yICh2YXIgc3Egb2Ygc3FMaXN0KSB7XHJcbiAgICAgIHNxLmVycm9yID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcbiAvLyBWRCAxMUp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xyXG4gIHByb2Nlc3NUcmFuc2xhdGVkUXVlc3Rpb25zKCl7XHJcbiAgICBpZiAodGhpcy50cmFuc2xhdGVkUXVlc3Rpb25zICYmIHRoaXMudHJhbnNsYXRlZFF1ZXN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMucXVlc3Rpb25zLmZvckVhY2goKG9yZ1F1ZXN0aW9uOiBhbnkpPT4ge1xyXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVkUXVlc3Rpb25zLmZvckVhY2goKHRyYW5zUXVlc3Rpb246YW55KSA9PiB7XHJcbiAgICAgICAgICAgICBpZihvcmdRdWVzdGlvbi51bmlxdWVJZGVudGlmaWVyID09IHRyYW5zUXVlc3Rpb24uaWRlbnRpZmllcil7XHJcbiAgICAgICAgICAgICAgIG9yZ1F1ZXN0aW9uLnF1ZXN0aW9uVGV4dCA9IHRyYW5zUXVlc3Rpb24ubGFiZWw7XHJcbiAgICAgICAgICAgICAgIG9yZ1F1ZXN0aW9uLnF1ZXN0aW9uID0gdHJhbnNRdWVzdGlvbi5wbGFjZUhvbGRlcjtcclxuICAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIC8vICBjb25zb2xlLmxvZygnb3JpZ2luYWxRdWVzdGlvbicgKyB0aGlzLnF1ZXN0aW9ucyk7XHJcbiAgICAvLyAgY29uc29sZS5sb2codGhpcy5xdWVzdGlvbnMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0U3ViUXVlc3Rpb25zKHJlY29yZHMpIHtcclxuICAgIHRoaXMuc3ViUXVlc3Rpb25zLnB1c2gocmVjb3Jkcyk7XHJcbiAgfVxyXG5cclxuICAvLyBDYXB0dXJlIGFuZCBQcm9jZXNzIENoaWxkIEV2ZW50XHJcbiAgY2hpbGRFdmVudENhcHR1cmUoZXZlbnQsIHF1ZXM/OmFueSkge1xyXG4gICAgbGV0IGRyb3Bkb3duRGF0YSA9ICB7fTtcclxuICAgIHRoaXMuY2hhbmdlU2VydmljZS5hbm5vdW5jZUNoYW5nZShldmVudCk7XHJcbiAgICBpZihxdWVzKXtcclxuICAgICAgaWYocXVlcy50eXBlID09ICdEcm9wZG93bicgfHxxdWVzLnR5cGUgPT0gJ1JhZGlvJyApIHtcclxuICAgICAgICAvLyBIQSAxOUpBTjI0IENvcnJlY3Rpb24gb2YgZHJvcGRvd24gdmFsdWVzXHJcbiAgICAgICAgcXVlcy5zZWxlY3RlZE9iaiA9IGV2ZW50LnZhbHVlT2JqID8gZXZlbnQudmFsdWVPYmogOiBudWxsO1xyXG4gICAgICAgIHF1ZXMuaW5wdXQgPSBldmVudC5zZWxlY3RlZE9iaiA/IGV2ZW50LnNlbGVjdGVkT2JqIDogZXZlbnQudmFsdWVPYmo7XHJcbiAgICAgICAgcXVlcy5zZWxlY3RlZFZhbHVlID0gZXZlbnQudmFsdWVPYmogPyBldmVudC52YWx1ZU9iaiA6IG51bGw7XHJcbiAgICAgICAgLy8gZW1pdCB0aGUgZHJvcGRvd24gZGF0YSB0byBwYXJlbnRcclxuICAgICAgICBkcm9wZG93bkRhdGFbJ2V2ZW50J10gPSBldmVudC52YWx1ZU9iajtcclxuICAgICAgICBkcm9wZG93bkRhdGFbJ3F1ZXMnXSA9IHF1ZXM7XHJcbiAgICAgICAgaWYoZHJvcGRvd25EYXRhWydldmVudCddKXtcclxuICAgICAgICAgIHRoaXMuaGFuZGxlRHJvcERvd24uZW1pdChkcm9wZG93bkRhdGEpO1xyXG4gICAgICAgIH0gIC8vIFZEIDIxREVDMjMgLSBkZXBlbmRlbnQgZmllbGQgY2hhbmdlXHJcbiAgICAgIH0gZWxzZSBpZihxdWVzLnR5cGUgPT0gJ0xvY2F0aW9uJyl7XHJcbiAgICAgICAgcXVlcy5pbnB1dCA9IGV2ZW50LnZhbHVlT2JqO1xyXG4gICAgICAgIHF1ZXMuc2VsZWN0ZWRWYWx1ZSA9IGV2ZW50LnZhbHVlT2JqLmFkZHJlc3M7XHJcbiAgICAgIH1lbHNlIGlmKHF1ZXMudHlwZSA9PSAnRmlsZScpeyBcclxuICAgICAgICBxdWVzLmlucHV0ID0gdGhpcy5zZWxlY3RlZEZpbGVEYXRhID0gZXZlbnQ7XHJcblxyXG5cclxuIC8vIEhhbmRsZSBmaWxlIHZhbGlkYXRpb24gZXJyb3JzXHJcbiBpZiAoQXJyYXkuaXNBcnJheShldmVudCkgJiYgZXZlbnQubGVuZ3RoID09PSAwKSB7XHJcbiAgLy8gTm8gZmlsZXMgdXBsb2FkZWQgd2hlbiByZXF1aXJlZFxyXG4gIHF1ZXMuZXJyb3IgPSBxdWVzLkVycm9yX01lc3NhZ2VfX2MgPyBuZXcgRXJyb3JXcmFwcGVyKCkgOiBudWxsO1xyXG59IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZXZlbnQpICYmIGV2ZW50Lmxlbmd0aCA+IDApIHtcclxuICAvLyBGaWxlcyB3ZXJlIHN1Y2Nlc3NmdWxseSB1cGxvYWRlZFxyXG4gIHF1ZXMuZXJyb3IgPSBudWxsO1xyXG59XHJcblxyXG4vLyBJZiB0aGVyZSB3ZXJlIHZhbGlkYXRpb24gZXJyb3JzIGZyb20gdGhlIGZpbGUgdXBsb2FkIGNvbXBvbmVudFxyXG5pZiAoZXZlbnQudmFsaWRhdGlvbkVycm9ycyAmJiBldmVudC52YWxpZGF0aW9uRXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICBxdWVzLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xyXG4gIHF1ZXMuZXJyb3IubWVzc2FnZSA9IGV2ZW50LnZhbGlkYXRpb25FcnJvcnNbMF07IC8vIFVzZSB0aGUgZmlyc3QgdmFsaWRhdGlvbiBlcnJvclxyXG59XHJcblxyXG4gICAgICB9ZWxzZSBpZihxdWVzLnR5cGUgPT0gJ0RhdGUnIHx8IHF1ZXMudHlwZSA9PSAnRGF0ZVRpbWUnKXsgLy8gSEEgMjRKQU4yNCBDb252ZXJ0aW5nIERhdGUgYW5kIERhdGVUaW1lIHRvIFVUQ1xyXG4gICAgICAgICBpZihldmVudC52YWx1ZSl7XHJcbiAgICAgICAgICBsZXQgZCA9IG5ldyBEYXRlKGV2ZW50LnZhbHVlKTtcclxuICAgICAgICAgIGxldCB1dGNTdHJpbmcgPSBkPy50b0lTT1N0cmluZygpO1xyXG4gICAgICAgICAgcXVlcy5pbnB1dCA9IHV0Y1N0cmluZztcclxuICAgICAgICAgfWVsc2Uge1xyXG4gICAgICAgICAgcXVlcy5pbnB1dCA9ICcnO1xyXG4gICAgICAgICB9XHJcbiAgICAgIH1lbHNlIGlmKHF1ZXMudHlwZSA9PSAnTGlzdCcpe1xyXG4gICAgICAgIC8vIFZEIDIwQXVnMjQgaGFuZGxpbmcgdGhlIGxpc3QgdHlwZSAgaGFuZGxlIG11bHRpcGxlIG9iamVjdCB2YWx1ZXNcclxuICAgICAgICBxdWVzLmlucHV0ID0gdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZShldmVudC52YWx1ZU9iaixldmVudC5maWVsZCk7XHJcbiAgICAgIH0vL1JTIDA2SkFOMjVcclxuICAgICAgZWxzZSBpZiAocXVlcy50eXBlID09PSAnUmljaFRleHRBcmVhJykgeyAgICAgICAgIFxyXG4gICAgICAgIGNvbnNvbGUubG9nKCdSaWNoVGV4dEFyZWEgZXZlbnQ6JywgZXZlbnQpO1xyXG4gICAgICAgIHF1ZXMuaW5wdXQgPSBldmVudCB8fCAnJztcclxuICAgICAgfSBlbHNle1xyXG4gICAgICAgIHF1ZXMuaW5wdXQgPSBldmVudDtcclxuICAgICAgfVxyXG4gICAgICAvL1JTIDA2SkFOMjVcclxuICAgICAgLy8gVmFsaWRhdGUgZXJyb3IgbWVzc2FnZSAtIG1vZGlmaWVkIHRvIGhhbmRsZSByaWNoIHRleHRcclxuICAgICAgICAgIGNvbnN0IGhhc0Vycm9yID0gcXVlcy5FcnJvcl9NZXNzYWdlX19jICYmIChcclxuICAgICAgICAgICAgKHF1ZXMudHlwZSA9PT0gJ0ZpbGUnICYmIHF1ZXMuaW5wdXQubGVuZ3RoID09PSAwKSB8fFxyXG4gICAgICAgICAgICAocXVlcy50eXBlID09PSAnUmljaFRleHRBcmVhJyAmJiAoIXF1ZXMuaW5wdXQgfHwgcXVlcy5pbnB1dC50cmltKCkgPT09ICcnKSkgfHxcclxuICAgICAgICAgICAgKHF1ZXMudHlwZSAhPT0gJ0ZpbGUnICYmIHF1ZXMuVHlwZV9fYyAhPT0gJ1JpY2hUZXh0QXJlYScgJiYgIXF1ZXMuaW5wdXQpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcXVlcy5lcnJvciA9IGhhc0Vycm9yID8gbmV3IEVycm9yV3JhcHBlcigpIDogbnVsbDtcclxuICAgICAgcXVlcy5lcnJvciA9IGhhc0Vycm9yID8gbmV3IEVycm9yV3JhcHBlcigpIDogbnVsbDtcclxuICAgICAgLy8gT25jZSB0aGUgcmlnaHQgdmFsdWUgaXMgc3RvcmVkIGluIHF1ZXMuaW5wdXQgc3RvcmUgdGhlIHF1ZXMgKHdpdGggaW5wdXQpIGluIHN0b3JhZ2VTZXJ2aWNlXHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UudXBkYXRlKHF1ZXMpO1xyXG4gICAgICAvLyBWRCAxOUp1bDAxIC0gZ2V0IHVwZGF0ZWQgcXVlc3Rpb25cclxuICAgICAgdGhpcy5oYW5kbGVRdWVzdGlvbi5lbWl0KHF1ZXMpO1xyXG4gICAgfVxyXG4gIH1cclxuICBkZWxldGVGaWxlKGZpbGVEYXRhOmFueSl7XHJcbiAgICBjb25zb2xlLmxvZygnZmlsZURBVEEnLGZpbGVEYXRhKVxyXG4gIH1cclxuICBnZXREcm9wRG93bihldmVudDphbnkpe1xyXG4gICAgdGhpcy5oYWRsZURyb3BEb3duRGVwZW5kZW50LmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuLy8gVkQgMDZTZXAyNCBjYWxlbmRhciBjaGFuZ2VzXHJcbiAgZ2V0Q3VycmVudENhbGVuZGFyKGV2ZW50OmFueSl7XHJcbiAgICB0aGlzLmhhbmRsZUNhbGVuZGFyRGF0ZS5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIGdldENhbGVuZGFyRXZlbnQoZXZlbnQ6YW55KXtcclxuICAgIGlmKGV2ZW50KXtcclxuICAgICAgdGhpcy5oYW5kbGVDYWxlbmRhckV2ZW50LmVtaXQoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAvLyBWRCAwNlNlcDI0IHJlbW92ZSB0aGUgc3BlY2lhbCBjaGFyZWN0ZXJzIGFuZCB0YWdzIFxyXG4gIC8vIGZyb20gdGhlIHF1ZXN0aW9uVGV4dFxyXG4gIHJlbW92ZUNoYXJhY3RlcnMocXVlc3Rpb25UZXh0OnN0cmluZyl7XHJcbiAgICAgbGV0IHVwZGF0ZWRUZXh0ID0gcXVlc3Rpb25UZXh0Py5yZXBsYWNlKC88W14+XSo+L2csICcnKTtcclxuICAgICByZXR1cm4gdXBkYXRlZFRleHQ7XHJcbiAgfVxyXG5cclxuLy8gc3VuZGF5IGNvbW1lbnRcclxuICAvLyBvcGVuQ2FsZW5kYXJDb21wb25lbnQocXVlcykge1xyXG4gIC8vICAgY29uc3Qgdmlld0NvbnRhaW5lclJlZiA9IHRoaXMuZHluYW1pY0hvc3Qudmlld0NvbnRhaW5lclJlZjtcclxuICAvLyAgIGlmKHZpZXdDb250YWluZXJSZWYpe1xyXG4gIC8vICAgICB2aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XHJcbiAgLy8gICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KEN1c3RvbUNhbGVuZGFyQ29tcG9uZW50KTtcclxuICAvLyAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnF1ZXN0aW9uID0gcXVlcztcclxuICAvLyAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmRhdGVTZWxlY3RlZC5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHRoaXMuZ2V0Q3VycmVudENhbGVuZGFyKGV2ZW50KSk7XHJcbiAgLy8gICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5ldmVudFNlbGVjdGVkLnN1YnNjcmliZSgoZXZlbnQ6YW55KSA9PiB0aGlzLmdldENhbGVuZGFyRXZlbnQoZXZlbnQpKVxyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgaXNDYWxlbmRhck1vZGFsT3BlbiA9IGZhbHNlO1xyXG4gIGNhbGVuZGFyTW9kYWxUaXRsZTphbnk7XHJcbiAgY2FsZW5kYXJNb2RhbFNpemU6YW55O1xyXG4gIGNhbGVuZGFyU2F2ZUJ1dHRvblZhbHVlOiBhbnk7XHJcbiAgcmVmZXJlbmNlUXVlc3Rpb25zID0gW107XHJcbiAgcWJSZWZyZW5jZUJvb2s6YW55O1xyXG4gIG1vZGFsQ2FsZW5kYXJNb2RhbEZvb3Rlcjphbnk7XHJcbiAgLy9SUyAwM0ZFQjIwMjUgIFNhdmUgdGhlIHRhYmxlIGRhdGEgaW5kZXBlbmRlbnRseVxyXG4gIGhhbmRsZVRhYmxlU2F2ZSh0YWJsZURhdGE6IGFueSwgcXVlczogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZygnU2F2aW5nIHRhYmxlIGRhdGE6JywgdGFibGVEYXRhKTtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGB0YWJsZV8ke3F1ZXMuaWR9YCwgSlNPTi5zdHJpbmdpZnkodGFibGVEYXRhKSk7XHJcbiAgfVxyXG4gIG9wZW5DYWxlbmRhck1vZGFsKGV2ZW50KSB7XHJcbiAgICB0aGlzLmlzQ2FsZW5kYXJNb2RhbE9wZW4gPSB0cnVlO1xyXG4gICAgdGhpcy5xYlJlZnJlbmNlQm9vayA9IGV2ZW50LnFiUmVmcmVuY2VCb29rO1xyXG4gICAgdGhpcy5yZWZlcmVuY2VRdWVzdGlvbnMgPSBldmVudC5yZWZlcmVuY2VRdWVzdGlvbnM7XHJcbiAgICB0aGlzLmNhbGVuZGFyTW9kYWxUaXRsZSA9IGV2ZW50Lm1vZGFsVGl0bGU7XHJcbiAgICB0aGlzLmNhbGVuZGFyTW9kYWxTaXplID0gZXZlbnQubW9kYWxTaXplO1xyXG4gICAgdGhpcy5jYWxlbmRhclNhdmVCdXR0b25WYWx1ZSA9IGV2ZW50LnNhdmVCdXR0b25WYWx1ZTtcclxuICAgIHRoaXMubW9kYWxDYWxlbmRhck1vZGFsRm9vdGVyID0gZXZlbnQubW9kYWxGb290ZXI7XHJcbiAgfVxyXG5cclxuXHJcbiAgb25DYWxlbmRhck1vZGFsU2F2ZSgpe1xyXG4gICAgdGhpcy5jaGFuZ2VTZXJ2aWNlLmRhdGFDaGFuZ2VzKCdjYWxlbmRhci1tb2RhbC1zYXZlJyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgaGFuZGxlUXVlc3Rpb25FdmVudChldmVudCl7XHJcbiAgICBjb25zb2xlLmxvZygnaGFuZGxlIHF1ZXN0aW9uIGhlcmUnKTtcclxuICB9XHJcbiBcclxuICBjbG9zZUNhbGVuZGFyTW9kYWwoZXZlbnQpe1xyXG4gICAgdGhpcy5pc0NhbGVuZGFyTW9kYWxPcGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8IS0tIEhBIDIwREVDMjMgQm9vayBTdHlsZSBmcm9tIHNhbGVzZm9yY2UgLS0+XHJcbjwhLS0gSEEgMjhERUMyMyAgUmVtb3ZlZCBJc1NoZW5nZWwocmVtb3ZhbCBvZiBzaGVuZ2VsIHZhbHVlcyBhcHBsaWVzIGZvciB0aGlzIHJlYXNvbikgYW5kIGRpcmVjdCBzdHlsaW5nIG9mIGJvb2tzIHRvIGF2b2lkIHN0eWxpbmcgaXNzdWVzLS0+XHJcbjwhLS0gSEEgMThKQU4yNCAgQWRkZWQgY2xhc3MgZm9yIHN0eWxpbmcgLS0+XHJcbjxkaXYgW3N0eWxlXT1cImJvb2tTdHlsZVwiIGNsYXNzPVwiY29udGVudC1ib3ggZm9ybS1ncm91cFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XHJcbiAgICAgICAgPCEtLSBIQSAyMERFQzIzIERpcmVjdGl2ZSBhbmQgUXVlc3Rpb24gU3R5bGUgZnJvbSBzYWxlc2ZvcmNlIC0tPlxyXG4gICAgICAgIDwhLS0gUkEwOURFQzI0IENoYW5nZWQga2V5cy0tPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICAgW2NsYXNzXT1cIidjb2wtbGctJyArIHF1ZXMuc2l6ZSArICcgcGFkZGluZ25vbmUnXCJcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHF1ZXMgb2YgcXVlc3Rpb25zO2xldCBpID0gaW5kZXhcIiBbaWRdPVwicXVlcy5pZFwiIFtkaXJdPVwicXVlcy5sYW5nRGlyZWN0aW9uXCIgW3N0eWxlXT1cInF1ZXM/LnN0eWxlPy5xdWVzdGlvblN0eWxlXCI+XHJcbiAgICAgICAgICAgIDwhLS0gU3ViIFF1ZXN0aW9uIExhYmVsIC0tPlxyXG4gICAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgTGFiZWwgU3R5bGUgZnJvbSBzYWxlc2ZvcmNlIC0tPlxyXG4gICAgICAgICAgICA8IS0tIFZEIDA5TWF5MjQgaXMgaGlkZSBmaWVsZCBjaGFuZ2UtLT5cclxuICAgICAgICAgPGRpdiAqbmdJZj1cIiFxdWVzLmlzSGlkZGVuXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdEYXRlVGltZSdcIj5cclxuIFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBWRCAyMEpVTjI0IC0gaGVscCB0ZXh0IGNoYW5nZXMtLT5cclxuICAgICAgICAgICAgPCEtLSBWRCAwMUF1ZzI0IC0gdmFsaWRhdGlvbiBjaGFuZ2UtLT5cclxuICAgICAgICAgICAgPCEtLSAvLyBWRCAwMkF1ZzI0IC0gbGFiZWwgdmFsdWUgc3R5bGUtLT5cclxuICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IGRvd24yOiBxYkl0ZW0/LnByb2dyZXNzQmFyIH1cIiAqbmdJZj1cInF1ZXMuc3R5bGU/LnNob3dMYWJlbCA/IHF1ZXMuc3R5bGU/LnNob3dMYWJlbCA6IHRydWVcIiBbc3R5bGVdPVwicXVlcy5zdHlsZT8ubGFiZWxTdHlsZVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cIidkaXMtZmxleCBzaGVuZ2VsLW15dC1mb250MyBteXQtZm9udDcgJ1wiIFtzdHlsZV09XCJxdWVzLnN0eWxlPy5sYWJlbFZhbHVlU3R5bGVcIj57eyByZW1vdmVDaGFyYWN0ZXJzKHF1ZXM/LnF1ZXN0aW9uVGV4dCkgfX1cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICAqbmdJZj1cInF1ZXMuaXNPcHRpb25hbFwiIHN0eWxlPVwiY29sb3I6IHJlZDtcIj4qPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBSUyAxN0pBTjIwMjUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBEaXNwbGF5cyBpY29ucyB3aXRoIHRvb2x0aXBzIGhlbHAgdGV4dCAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5xdWVzdGlvblRleHQgJiYgcXVlcz8uaGVscFRleHRcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cInF1ZXM/LmhlbHBUZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwid2hpdGUtdG9vbHRpcFwiPmk8L2Rpdj5cclxuICAgICAgICA8IS0tIFJTIDE3SkFOMjAyNSAtLT5cclxuICAgICAgICA8IS0tICBEaXNwbGF5cyBpY29ucyB3aXRoIHRvb2x0aXBzIGZvciBmaWxlIHJlcXVpcmVtZW50cyAtLT5cclxuICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICBjbGFzcz1cImljb25cIiBcclxuICAgICAgICAgICAgKm5nSWY9XCJxdWVzLmZpZWxkc01ldGFcIlxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJnZXRGaWxlUmVxdWlyZW1lbnRzKHF1ZXMuZmllbGRzTWV0YSlcIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJ3aGl0ZS10b29sdGlwXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tbGVmdDogNHB4O1wiXHJcbiAgICAgICAgPmk8L2Rpdj5cclxuICAgIDwvc3Bhbj5cclxuPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gLy8gVkQgMTJKdW4yNCAtIHJlYWRvbmx5IGNoYW5nZS0tPlxyXG4gICAgICAgICAgICA8IS0tIERhdGVUaW1lIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnRGF0ZVRpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1kYXRlLXBpY2tlciBbbWluRGF0ZV09XCJxdWVzLm1pbkRhdGVcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiIFtlcnJvck1lc3NhZ2VdPVwicXVlcy5lcnJvck1lc3NhZ2VcIiBbcmVhZE9ubHldPVwicXVlcy5pc1JlYWRPbmx5XCIgW2RhdGVdPVwicXVlcy5pbnB1dFwiIChkYXRlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1kYXRlLXBpY2tlcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiBcclxuICAgICAgICAgICAgIDwhLS0gRGF0ZS0tPlxyXG4gICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0RhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1kYXRlICBbZGF0ZV09XCJxdWVzLmlucHV0XCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbZXJyb3JNZXNzYWdlXT1cInF1ZXMuZXJyb3JNZXNzYWdlXCIgW3JlYWRPbmx5XT1cInF1ZXMuaXNSZWFkT25seVwiIChkYXRlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1kYXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuIFxyXG4gICAgICAgICAgICAgPCEtLSBUaW1lLS0+XHJcbiAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnVGltZSdcIj5cclxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLXRpbWUgIFt0aW1lXT1cInF1ZXMuaW5wdXRcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiIFtlcnJvck1lc3NhZ2VdPVwicXVlcy5lcnJvck1lc3NhZ2VcIiBbcmVhZE9ubHldPVwicXVlcy5pc1JlYWRPbmx5XCIgKHRpbWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLXRpbWU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgIDwhLS0gY2FsZW5kYXIgIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnQ2FsZW5kYXInXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1jYWxlbmRhclxyXG4gICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cInF1ZXNcIlxyXG4gICAgICAgICAgICAgICAgKGV2ZW50U2VsZWN0ZWQpPVwiZ2V0Q2FsZW5kYXJFdmVudCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChkYXRlU2VsZWN0ZWQpPVwiZ2V0Q3VycmVudENhbGVuZGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKG9wZW5Nb2RhbCk9XCJvcGVuQ2FsZW5kYXJNb2RhbCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChjbG9zZU1vZGFsKT1cImNsb3NlQ2FsZW5kYXJNb2RhbCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgID48L2FwcC1jdXN0b20tY2FsZW5kYXI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIG1vZGVsIHVzZWQgaW4gY2FsZW5kYXIgY29tcG9uZW50IC0tPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tbW9kZWwgKm5nSWY9XCJpc0NhbGVuZGFyTW9kYWxPcGVuXCJcclxuICAgICAgICAgICAgICAgICAgICBbbW9kYWxUaXRsZV09XCJjYWxlbmRhck1vZGFsVGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpc01vZGFsT3Blbl09XCJpc0NhbGVuZGFyTW9kYWxPcGVuXCJcclxuICAgICAgICAgICAgICAgICAgICBbbW9kYWxTaXplXT1cImNhbGVuZGFyTW9kYWxTaXplXCJcclxuICAgICAgICAgICAgICAgICAgICBbc2F2ZUJ1dHRvblZhbHVlXT1cImNhbGVuZGFyU2F2ZUJ1dHRvblZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbbW9kYWxGb290ZXJdPVwibW9kYWxDYWxlbmRhck1vZGFsRm9vdGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAoc2F2ZUJ1dHRvbkVtaXQpPVwib25DYWxlbmRhck1vZGFsU2F2ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2FuY2VsQnV0dG9uRW1pdCk9XCJjbG9zZUNhbGVuZGFyTW9kYWwoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uYm9vayAgW3FiSXRlbV09XCJxYlJlZnJlbmNlQm9va1wiIFtxdWVzdGlvbnNdPVwicmVmZXJlbmNlUXVlc3Rpb25zXCIgKGhhbmRsZVF1ZXN0aW9uKT1cImhhbmRsZVF1ZXN0aW9uRXZlbnQoJGV2ZW50KVwiPjwvbGliLXF1ZXN0aW9uYm9vaz5cclxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1tb2RlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gVGV4dCAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1RleHQnIHx8IHF1ZXMudHlwZSA9PT0gJ0xpbmsnXCIgPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20taW5wdXQgW3ZhbHVlXT1cInF1ZXMuaW5wdXRcIiBbbmdDbGFzc1ZhbHVlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpcy1mbGV4IGR0LWxpbmUgZGF0ZS1saW5lIGJvb2tUZXh0IGJveG91dGxpbmUgbXl0LWZvbnQxJzogcWJJdGVtLnByb2dyZXNzQmFyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Qm94OiAhcWJJdGVtLnByb2dyZXNzQmFyXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiIFtxdWVzdGlvbl09XCJxdWVzXCIgW3JlYWRPbmx5XT1cInF1ZXMuaXNSZWFkT25seVwiIFtpZFZhbHVlXT1cInF1ZXMudHJhY2tpbmdJZFwiIFtmb2N1c0V2ZW50XT1cImNsZWFyU1FFcnJvcihxdWVzLmlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbcGxhY2Vob2xkZXJdPVwicXVlcy5xdWVzdGlvblwiIChpbnB1dFZhbHVlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1pbnB1dD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiBcclxuICAgICAgICAgICAgPCEtLSBmb3IgcGljayBsb2NhdGlvbiAtLT5cclxuICAgICAgICAgICAgPCEtLSAgIFZEIDIxREVDMjMgLSBkZXBlbmRlbnQgZmllbGQgY2hhbmdlIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnTG9jYXRpb24nXCI+XHJcbiAgICAgICAgICAgIDwhLS0gSEExMDAxMjAyNCBBZGRlZCBBcGkga2V5IGFzIGlucHV0IC0tPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1waWNrLWxvY2F0aW9uIFthcGlLZXldPVwicWJJdGVtWydhcGlLZXknXVwiIFthZGRyZXNzXT1cInF1ZXMuc2VsZWN0ZWRWYWx1ZVwiIFtxdWVzdGlvbl09XCJxdWVzXCIgKGxvY2F0aW9uU2VsZWN0ZWQpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9hcHAtcGljay1sb2NhdGlvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiBcclxuICAgICAgICAgICAgPCEtLSBmb3IgIHRleHQgYXJlYSAgIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnVGV4dEFyZWEnXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS10ZXh0LWFyZWEgW3F1ZXN0aW9uXT1cInF1ZXNcIiBbcmVhZE9ubHldPVwicXVlcy5pc1JlYWRPbmx5XCIgW3ZhbHVlXT1cInF1ZXMuaW5wdXRcIiBbcm93c109XCIzXCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbcGxhY2Vob2xkZXJdPVwicXVlcy5xdWVzdGlvbiBcIlxyXG4gICAgICAgICAgICAgICAgICAgICh0ZXh0YXJlYVZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj48L2FwcC1jdXN0b20tdGV4dC1hcmVhPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBSUyAwNkpBTjI1IC0tPlxyXG4gICAgICAgICAgIDwhLS0gZm9yIHJpY2ggdGV4dCBlZGl0b3IgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdSaWNoVGV4dEFyZWEnXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1yaWNoLXRleHQgXHJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cInF1ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJxdWVzLmlzUmVhZE9ubHlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJxdWVzLmlucHV0IHx8ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPVwicXVlcy5lcnJvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInF1ZXMucXVlc3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICh0ZXh0VmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLXJpY2gtdGV4dD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEVtYWlsIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnRW1haWwnXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImVtYWlsXCIgcmVhZE9ubHk9XCJxdWVzLmlzUmVhZE9ubHlcIiBbKG5nTW9kZWwpXT1cInF1ZXMuaW5wdXRcIiBbaWRdPVwicXVlcy5pZFwiIHJlcXVpcmVkPVwiXCIgKGZvY3VzKT1cImNsZWFyU1FFcnJvcihxdWVzLmlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3sgcXVlcy5lcnJvciA/ICdyZWQnIDogJycgfX1cIiBwbGFjZWhvbGRlcj1cInt7IHF1ZXMucXVlc3Rpb24gfX1cIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuIFxyXG4gICAgICAgICAgIDwhLS0gVGFibGUgLS0+XHJcbiAgICAgICAgICAgIDwhLS0gUlMgMDNGRUIyMDI1IC0tPlxyXG4gICAgICAgICAgICA8IS0tIEFkZGVkIGhhbmRsZVRhYmxlU2F2ZSB0byBoYW5kbGUgdGFibGUgZGF0YSBwZXJzaXN0ZW5jZSwgZW5hYmxpbmcgc2F2aW5nIHRhYmxlIGNvbnRlbnRzIHRvIGxvY2FsIHN0b3JhZ2Ugd2hlbiBzYXZlIGJ1dHRvbiBpcyBjbGlja2VkIC0tPlxyXG4gICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdUYWJsZSdcIiBjbGFzcz1cIlwiPlxyXG4gICAgICAgICAgICA8YXBwLWN1c3RvbS10YWJsZSBbcXVlc3Rpb25dPVwicXVlc1wiIFthcGlNZXRhXT1cInF1ZXMuc3ViVGV4dFwiICh2YWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpOyBjbGVhclNRRXJyb3IocXVlcy5pZClcIihzYXZlVGFibGVEYXRhKT1cImhhbmRsZVRhYmxlU2F2ZSgkZXZlbnQsIHF1ZXMpXCI+XHJcbiAgICAgICAgICAgIDwvYXBwLWN1c3RvbS10YWJsZT5cclxuICAgICAgICA8L2Rpdj5cclxuIFxyXG4gICAgICAgICAgICAgIDwhLS0gVGFibGUgQXBwZW5kaXggLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1RhYmxlQXBwZW5kaXgnXCIgY2xhc3M9XCJcIj5cclxuICAgICAgICAgICAgICAgIDxhcHAtdGFibGUtYXBwZW5kaXggW3F1ZXN0aW9uXT1cInF1ZXNcIiAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKTsgY2xlYXJTUUVycm9yKHF1ZXMuaWQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC10YWJsZS1hcHBlbmRpeD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICA8IS0tIGxpc3QgLS0+XHJcbiAgICAgICAgICAgICA8IS0tIFZEIDIwQXVnMjQgdXNlZCBjb3JyZWN0IGF0dHJpYnV0ZSAtLT5cclxuICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdMaXN0J1wiIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLXNlYXJjaC1ib3ggW3F1ZXN0aW9uXT1cInF1ZXNcIiBbcmVhZE9ubHldPVwicXVlcy5pc1JlYWRPbmx5XCIgW2FwaU1ldGFdPVwicXVlcy5zdWJUZXh0XCIgW2lkXT1cInF1ZXMuaWRcIiBbcGxhY2VIb2xkZXJUZXh0XT1cInF1ZXMucXVlc3Rpb25cIiAgW2ZpbHRlck5hbWVdPVwicXVlcy5pbnB1dFwiIChzZWFyY2hWYWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2xpYi1zZWFyY2gtYm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuIFxyXG4gICAgICAgICAgICA8IS0tIERyb3Bkb3duIC0tPlxyXG4gICAgICAgICAgICA8IS0tIEhBIDA5RkVCMjQgQWRkZWQgY29uZGl0aW9uIG9mIHNxT3B0aW9uIHRvIHRoZSBkcm9wZG93biAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXM/LnR5cGUgPT09ICdEcm9wZG93bicgJiYgcXVlcz8ub3B0aW9uc1wiIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPiA8IS0tIFZEIDE5SkFOMjQgLSBnZXR0aW5nIHRva2VuIGFzIGlucHV0IC0tPlxyXG4gICAgICAgICAgICAgICAgIDwhLS0gQVAgMTBGRUIyNSAtIER5bmFtaWNhbGx5IGJpbmRpbmcgc2VsZWN0ZWRWYWx1ZSBiYXNlZCBvbiBpc1NoZW5nZWwgY29uZGl0aW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tZHJvcGRvd24gW29wdGlvbnNdPVwicXVlcy5vcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICBbdG9rZW5dPVwidG9rZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgIFthcGlNZXRhXT1cInF1ZXMuc3ViVGV4dFwiIFtpZF09XCJxdWVzLmlkXCJcclxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZV09XCJxYkl0ZW0uaXNTaGVuZ2VsID8gcXVlcy5pbnB1dCA6IHF1ZXMuc2VsZWN0ZWRWYWx1ZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiLS0te3snc2VsZWN0JyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX0tLS1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvck1lc3NhZ2VdPVwicXVlcy5lcnJvck1lc3NhZ2VcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3JlZmVyZW5jZUZpZWxkXT1cInF1ZXMucmVmZXJlbmNlRmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJxdWVzLmlzUmVhZE9ubHlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJxdWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKTsgY2xlYXJTUUVycm9yKHF1ZXMuaWQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZWNrIFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwicXVlcz8uaW5wdXQ/Lmxlbmd0aCA+IDBcIj48L2k+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIC8vIFZEIDAyQXVnMjQgY3VzdG9tLXJhZGlvIGNvbXBvbmVudCAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1JhZGlvJyAmJiBxdWVzPy5vcHRpb25zXCIgY2xhc3M9XCJcIj5cclxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLXJhZGlvIFtvcHRpb25zXT1cInF1ZXMub3B0aW9uc1wiIFt0b2tlbl09XCJ0b2tlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2FwaU1ldGFdPVwicXVlcy5zdWJUZXh0XCIgW2lkXT1cInF1ZXMuaWRcIiBbc2VsZWN0ZWRWYWx1ZV09XCJxdWVzLnNlbGVjdGVkVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvck1lc3NhZ2VdPVwicXVlcy5lcnJvck1lc3NhZ2VcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3JlZmVyZW5jZUZpZWxkXT1cInF1ZXMucmVmZXJlbmNlRmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJxdWVzLmlzUmVhZE9ubHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpOyBjbGVhclNRRXJyb3IocXVlcy5pZClcIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1yYWRpbz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiBcclxuICAgICAgICAgICAgPCEtLSBBdHRhY2htZW50IC8gRmlsZXMgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdGaWxlJ1wiIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWZpbGUtdXBsb2FkIFtsaW1pdEZpbGVVcGxvYWRpbmddPVwiNVwiIFtlcnJvcl09XCJxdWVzLmVycm9yXCIgW3F1ZXN0aW9uXT1cInF1ZXNcIiBbYWxsRmlsZXNdPVwicXVlcy5pbnB1dFwiIFt0YWJsZUZpbGVdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkRmlsZURhdGEpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiIChkZWxldGVkRmlsZURhdGEpPVwiZGVsZXRlRmlsZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIFtpc0RlbGV0ZUZpbGVCdXR0b25WaXNpYmxlXT1cInRydWVcIj48L2FwcC1maWxlLXVwbG9hZD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdQb3BVcE1lc3NhZ2UnXCIgY2xhc3M9XCJcIj5cclxuICAgICAgICAgICAgICAgIDxhcHAtZGVwZW5kZW50LXRhYmxlIFthbGVydE1lc3NhZ2VdPVwicXVlcy5lcnJvck1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLWRlcGVuZGVudC10YWJsZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdMYWJlbCdcIiBjbGFzcz1cIlwiPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tbGFiZWwgW2xhYmVsU3R5bGVdPVwicXVlcy50aXRsZVwiIFtsYWJlbFZhbHVlXT1cInF1ZXMucXVlc3Rpb25cIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1sYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICA8IS0tIC8vIFZEIDAyQXVnMjQgaW1hZ2UgY29tcG9uZW50IC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnSW1hZ2UnXCIgY2xhc3M9XCJcIj5cclxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLWltYWdlIFtxdWVzdGlvbl09XCJxdWVzXCI+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20taW1hZ2U+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIDA4Tk9WMjMgLSBidXR0b24gdHlwZSBxdWVzdGlvbiBhZGRlZCAtLT5cclxuICAgICAgICAgICAgIDwhLS0gQnV0dG9uIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnQnV0dG9uJ1wiIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1idXR0b24gW2hlaWdodF09XCInNTBweCdcIlxyXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIicxNTBweCdcIlxyXG4gICAgICAgICAgICAgICAgW2J1dHRvblRleHRdPVwicXVlcz8ucXVlc3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInF1ZXM/LnF1ZXN0aW9uXCJcclxuICAgICAgICAgICAgICAgIChidXR0b25WYWx1ZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgIFRoaXMgaXMgdG8gbG9hZCBib29rIHR5cGUgcXVlc3Rpb25zLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdCb29rJ1wiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBIQSAwOUZFQjI0IEFkZGVkIHRlcm5hcnkgb3BlcmF0b3IgLS0+XHJcbiAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uYm9vayBbcWJJdGVtXT1cInF1ZXMucWJJdGVtXCIgW2xhYmVsVmFsdWVdPVwibGFiZWxWYWx1ZVwiIFtxdWVzdGlvbnNdPVwicXVlcy5xYkl0ZW0/LnN1YlF1ZXN0aW9uc1wiICAoaGFuZGxlRHJvcERvd24pPVwiZ2V0RHJvcERvd24oJGV2ZW50KVwiPjwvbGliLXF1ZXN0aW9uYm9vaz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPCEtLSAwNi0wOS0yNCBmb3IgY2FsZW5kYXIgdHlwZS0tPlxyXG48IS0tIDxuZy10ZW1wbGF0ZSBkeW5hbWljQ29tcG9uZW50SG9zdD48L25nLXRlbXBsYXRlPiAtLT4iXX0=