@tsi-developpement/tsi-shared-ui 1.8.2 → 1.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/tsi-base/components/tsi-form-base/tsi-form-base.component.mjs +4 -1
- package/esm2022/lib/tsi-components/manage-reporting/manage-reporting.component.mjs +12 -6
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs +13 -4
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs.map +1 -1
- package/lib/consts/app-providers.d.ts +1 -1
- package/lib/tsi-components/manage-reporting/manage-reporting.component.d.ts +2 -1
- package/package.json +1 -1
|
@@ -5,7 +5,7 @@ import { LocalizationKeys } from '../../consts/localization-key';
|
|
|
5
5
|
import { queryParamNamesConst } from '../../consts/queryParamNames.const';
|
|
6
6
|
import { Segment } from '../../end-points';
|
|
7
7
|
import { ReportingEndpoints } from '../../end-points/reporting-endpoints';
|
|
8
|
-
import { CSSUnits, DisplayTypes, GridSelectionMode, ModalSizeEnum, Modes, TsiReportType, } from '../../enums';
|
|
8
|
+
import { CSSUnits, DisplayTypes, GridSelectionMode, GridSortMode, ModalSizeEnum, Modes, TsiReportType, } from '../../enums';
|
|
9
9
|
import { ButtonType } from '../../enums/button-type.enum';
|
|
10
10
|
import { TooltipPosition } from '../../enums/tooltipPosition.enum';
|
|
11
11
|
import { CSSSizeProperty, } from '../../interfaces';
|
|
@@ -78,6 +78,7 @@ export class ManageReportingComponent extends TsiFormComponentBaseComponent {
|
|
|
78
78
|
this.defaultTemplateColumns = [];
|
|
79
79
|
this.tooltipPosition = TooltipPosition;
|
|
80
80
|
this.isEditionPersonnalise = false;
|
|
81
|
+
this.sortModeRef = GridSortMode;
|
|
81
82
|
this._isReportForFiche = false;
|
|
82
83
|
this.errorMessageKey = 'shared_reporting_error_occured';
|
|
83
84
|
this.dashboardModuleRoute = `${AppRoutes.app}/${AppRoutes.dashboard}`;
|
|
@@ -431,11 +432,12 @@ export class ManageReportingComponent extends TsiFormComponentBaseComponent {
|
|
|
431
432
|
this.reportingService
|
|
432
433
|
.addReportToModel(this._newReportToTemplate(val.reportType, val.reportName, val.endPointValue, val.module, val.triOrdre, val.reportNameAbrege, val.display))
|
|
433
434
|
.subscribe({
|
|
434
|
-
next: (value) => {
|
|
435
|
+
next: async (value) => {
|
|
435
436
|
this.isloading = true;
|
|
436
437
|
reportToTemplateId = value;
|
|
437
438
|
let urlDesigner;
|
|
438
439
|
let tenantUid = this.identityManagerService.parseMyAuthToken()?.tenantUid;
|
|
440
|
+
await this.onRefresh();
|
|
439
441
|
if (val.reportType === TsiReportType.List) {
|
|
440
442
|
urlDesigner = `${Segment.reportingServiceBase}/report-designer/${reportToTemplateId}?${queryParamNamesConst.tenantUid}=${tenantUid}`;
|
|
441
443
|
}
|
|
@@ -673,7 +675,11 @@ export class ManageReportingComponent extends TsiFormComponentBaseComponent {
|
|
|
673
675
|
shortName: val.reportNameAbrege,
|
|
674
676
|
display: val.display,
|
|
675
677
|
};
|
|
676
|
-
this.reportingService.editReportToEditTemplate(model).subscribe(
|
|
678
|
+
this.reportingService.editReportToEditTemplate(model).subscribe({
|
|
679
|
+
next: async (value) => {
|
|
680
|
+
await this.onRefresh();
|
|
681
|
+
},
|
|
682
|
+
});
|
|
677
683
|
let reportToTemplateId = value.uid;
|
|
678
684
|
let urlDesigner;
|
|
679
685
|
let tenantUid = this.identityManagerService.parseMyAuthToken()?.tenantUid;
|
|
@@ -1020,11 +1026,11 @@ export class ManageReportingComponent extends TsiFormComponentBaseComponent {
|
|
|
1020
1026
|
this.isloading = false;
|
|
1021
1027
|
}
|
|
1022
1028
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ManageReportingComponent, deps: [{ token: i1.ReportingService }, { token: i1.IdentityManagerService }, { token: i1.TsiConfirmationService }, { token: i1.TsiNotificationService }, { token: i2.DynamicDialogRef }, { token: i2.DynamicDialogConfig }, { token: i1.TsiModalService }, { token: i3.MailingService }, { token: i1.ErrorResponseManagerService }, { token: i4.Router }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1023
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ManageReportingComponent, selector: "app-manage-reporting", inputs: { otherFormName: "otherFormName", otherFormEndpoint: "otherFormEndpoint", formEndpointBody: "formEndpointBody", isFormEndpointPaged: "isFormEndpointPaged", filtersHtmlTemplate: "filtersHtmlTemplate", optionalEndpoints: "optionalEndpoints", customReportingMode: "customReportingMode" }, providers: [...appProviders], viewQueries: [{ propertyName: "fileUpload", first: true, predicate: ["fileUpload"], descendants: true }, { propertyName: "importFileToReportFileUpload", first: true, predicate: ["importFileToReportFileUpload"], descendants: true }], usesInheritance: true, ngImport: i0, template: "\r\n<div class=\"card\">\r\n <div *busy=\"isloading\"></div>\r\n <div class=\"grid\">\r\n <div class=\"grid col-10\">\r\n <div *ngIf=\"isFromForm; else notFromForm\">\r\n <Tsi-Label class=\"col-2\" [labelValue]=\"'shared_reporting_form'\">\r\n </Tsi-Label>\r\n <p-dropdown class=\"col-10 tsi-component\" class=\"tsi-component\" styleClass=\"tsi-component\" appendTp=\"body\"\r\n [options]=\"formNames\" [ngModel]=\"otherFormName\" optionLabel=\"value\" optionValue=\"key\" [filter]=\"true\"\r\n filterBy=\"value\" [showClear]=\"true\" placeholder=\"{{'shared_reporting_select_form' | localize}}\"\r\n [disabled]=\"true\">\r\n </p-dropdown>\r\n </div>\r\n\r\n <ng-template #notFromForm>\r\n <ng-container>\r\n <Tsi-Label class=\"col-2\" [labelValue]=\"'shared_reporting_form'\">\r\n </Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-10\" [(bind)]=\"otherFormName\" (bindChange)=\"onFormChange()\"\r\n [listSourceUrl]=\"getFormNamesEndpoint\" [elementSourceUrl]=\"getFormNamesEndpoint \" [isFiltered]=\"true\"\r\n id-field=\"key\" label-field=\"value\">\r\n </Tsi-Search-Combo>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n </div>\r\n\r\n <p-toolbar styleClass=\"mb-4 gap-2\">\r\n <ng-template pTemplate=\"left\">\r\n <Tsi-Button [text]=\"'shared_reporting_add_report' | localize\" icon=\"p-button-icon p-button-icon-left pi pi-plus\"\r\n styleClass=\"p-element p-button-success ml-2 mr-2 p-button p-component ng-star-inserted p-button-label\" (click)=\"onNewReport()\"></Tsi-Button>\r\n <Tsi-Button [buttonType]=\"buttonType.Submit\" [text]=\"'shared_reporting_delete_report' | localize\" icon=\"p-button-icon p-button-icon-left pi pi-trash\"\r\n styleClass=\"p-element p-button-danger p-button p-component ng-star-inserted p-button-label\" (click)=\"onDeleteSelectedReports()\"\r\n [disabled]=\"!selectedReports || !selectedReports.length\"></Tsi-Button>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"right\">\r\n <p-fileUpload #fileUpload name=\"demo[]\" (onBeforeUpload)=\"onImportFile($event)\"\r\n (onSelect)=\"onFileSelected($event)\" (onClear)=\"onClear($event)\" (onRemove)=\"onRemove($event)\" [multiple]=\"false\"\r\n accept=\"application/json\" [maxFileSize]=\"10000000\" \r\n [invalidFileSizeMessageSummary]=\"'shared_file_upload_invalid_file_size_message_summary' | localize\"\r\n [invalidFileSizeMessageDetail]=\"'shared_file_upload_invalid_file_size_message_detail' | localize\"\r\n [invalidFileTypeMessageSummary]=\"'shared_file_upload_invalid_file_type_message_summary' | localize\"\r\n [invalidFileLimitMessageDetail]=\"'shared_file_upload_invalid_file_limit_message_detail' | localize\"\r\n [invalidFileLimitMessageSummary]=\"'shared_file_upload_invalid_file_limit_message_summary' | localize\"\r\n [invalidFileTypeMessageDetail]=\"'shared_file_upload_invalid_file_type_message_detail' | localize\"\r\n [chooseIcon]=\"'pi pi-paperclip'\" cancelStyleClass=\"p-button-secondary\" uploadStyleClass=\"p-button-help\"\r\n removeStyleClass=\"p-button-danger\" [chooseLabel]=\"'shared_reporting_choose_report_file' | localize\"\r\n [uploadLabel]=\"'shared_reporting_import_report' | localize\"\r\n [cancelLabel]=\"'shared_reporting_cancel_choose_report_file' | localize\">\r\n <ng-template *ngIf=\"toUploadFileData\" pTemplate=\"fileupload-content\">\r\n </ng-template>\r\n </p-fileUpload>\r\n </ng-template>\r\n </p-toolbar>\r\n\r\n <!-- <Tsi-Display-Grid [showHeader]=\"true\"\r\n [header]=\"'shared_reporting_my_template'\"\r\n [columns]=\"columns\" [gridData]=\"reports\" key=\"uid\"\r\n (buttonColumnClicked)=\"handleButtonColumnClicked($event)\" [(selectedItems)]=\"selectedReports\"\r\n [showFilters]=\"false\"\r\n [paginator]=\"true\"\r\n [globalFilterFields]=\"globalFilterFields\">\r\n </Tsi-Display-Grid> -->\r\n\r\n\r\n <!--<div style=\"text-align:left\"> <p-button icon=\"pi pi-refresh\" [pTooltip]=\"'shared_reporting_refresh' | localize\" [tooltipPosition]=\"tooltipPosition.Top\" label=\"Reload\" severity=\"help\" (click)=\"onRefresh()\" /> </div>\r\n <p-button icon=\"pi pi-refresh\" class=\"p-button-rounded\" styleClass=\"p-button-text\" />\r\n-->\r\n \r\n <Tsi-Button styleClass=\"p-element p-button-text p-button-raised p-button-rounded mb-3 ml-3\" \r\n [tooltipText]=\"'shared_reporting_refresh'\" [tooltipPosition]=\"tooltipPosition.Top\"\r\n icon=\"pi pi-refresh\" (click)=\"onRefresh()\"></Tsi-Button>\r\n\r\n <tsi-view-grid \r\n [header]=\"'shared_reporting_my_template'\"\r\n [columns]=\"columns\" [gridData]=\"reports\" key=\"uid\"\r\n (buttonColumnClicked)=\"handleButtonColumnClicked($event)\" [(selectedItems)]=\"selectedReports\"\r\n [getDataFromApi]=\"false\"\r\n [formName]=\"'my-report-templates'\"\r\n >\r\n </tsi-view-grid>\r\n <br/>\r\n <!-- Default Template -->\r\n <!-- <Tsi-Display-Grid \r\n [showHeader]=\"true\" \r\n [header]=\"'shared_reporting_BuiltIn_template'\"\r\n [showSummaryFooter]=\"false\" \r\n [paginator]=\"false\" \r\n [showFilters]=\"false\" \r\n [columns]=\"defaultTemplateColumns\" \r\n [gridData]=\"defaultReportTemplateData\" \r\n (buttonColumnClicked)=\"handleButtonColumnClicked($event)\"\r\n [paginator]=\"true\"\r\n key=\"name\">\r\n </Tsi-Display-Grid> -->\r\n\r\n \r\n <tsi-view-grid\r\n [header]=\"'shared_reporting_BuiltIn_template'\"\r\n [columns]=\"defaultTemplateColumns\" \r\n [gridData]=\"defaultReportTemplateData\" \r\n (buttonColumnClicked)=\"handleButtonColumnClicked($event)\"\r\n [getDataFromApi]=\"false\"\r\n [formName]=\"'default-my-report-templates'\"\r\n key=\"name\">\r\n </tsi-view-grid>\r\n\r\n\r\n\r\n\r\n \r\n\r\n <!-- dialog to import file to report -->\r\n <p-dialog header=\"{{'shared_reporting_select_file_to_import_into_report' | localize}}\" [(visible)]=\"isUpdateReportFromFileDialogVisible\" [style]=\"{width: '50vw'}\">\r\n <!-- <Tsi-Modal-Header (onCloseClick)=\"onImportFileToReportModalCancelClick()\" [inputTitle]=\"'shared_reporting_select_file_to_import_into_report'\"></Tsi-Modal-Header> -->\r\n\r\n <ng-template pTemplate=\"body\">\r\n <p-fileUpload #importFileToReportFileUpload name=\"importFileToReport\" (onBeforeUpload)=\"onImportFileToReport_ImportFile($event)\"\r\n (onSelect)=\"onImportFileToReport_FileSelected($event)\" (onClear)=\"onImportFileToReport_Clear($event)\" (onRemove)=\"onImportFileToReport_Remove($event)\" [multiple]=\"false\"\r\n accept=\"application/json\" [maxFileSize]=\"10000000\"\r\n [invalidFileSizeMessageSummary]=\"'shared_file_upload_invalid_file_size_message_summary' | localize\"\r\n [invalidFileSizeMessageDetail]=\"'shared_file_upload_invalid_file_size_message_detail' | localize\"\r\n [invalidFileTypeMessageSummary]=\"'shared_file_upload_invalid_file_type_message_summary' | localize\"\r\n [invalidFileLimitMessageDetail]=\"'shared_file_upload_invalid_file_limit_message_detail' | localize\"\r\n [invalidFileLimitMessageSummary]=\"'shared_file_upload_invalid_file_limit_message_summary' | localize\"\r\n [invalidFileTypeMessageDetail]=\"'shared_file_upload_invalid_file_type_message_detail' | localize\"\r\n [chooseIcon]=\"'pi pi-paperclip'\" cancelStyleClass=\"p-button-secondary\" uploadStyleClass=\"p-button-help\"\r\n removeStyleClass=\"p-button-danger\" [chooseLabel]=\"'shared_reporting_choose_report_file' | localize\"\r\n [uploadLabel]=\"'shared_reporting_import_report' | localize\"\r\n [cancelLabel]=\"'shared_reporting_cancel_choose_report_file' | localize\">\r\n <ng-template *ngIf=\"toUploadToUpdateReportFileData\" pTemplate=\"fileupload-content\">\r\n </ng-template>\r\n </p-fileUpload>\r\n </ng-template>\r\n\r\n <!-- <Tsi-Modal-Footer (onCancelClick)=\"onImportFileToReportModalCancelClick()\"\r\n (onSaveClick)=\"onImportFileToReportModalSaveClick()\"\r\n [saveDisabled]=\"!toUploadToUpdateReportFileData\"></Tsi-Modal-Footer> -->\r\n\r\n</p-dialog>\r\n</div>\r\n", styles: [".p-button.p-button-icon-only.p-button-rounded{height:2rem!important}::ng-deep .p-fileupload-choose input{display:none!important}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i8.Toolbar, selector: "p-toolbar", inputs: ["style", "styleClass", "ariaLabelledBy"] }, { kind: "component", type: i9.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "component", type: i10.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "autoShowPanelOnPrintableCharacterKeyDown", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i11.FileUpload, selector: "p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "component", type: i12.TsiSearchComboComponent, selector: "Tsi-Search-Combo", inputs: ["elementSourceUrl", "listSourceUrl", "listSourceParams", "id-field", "label-field", "multiple", "sort", "showClear", "reloadDataSource", "isFiltered", "selectedLabel", "maxWidth", "businessClass", "comboType", "statusMetadata", "currentRowItem", "datasource", "bind", "maxSelectedLabels", "tooltipMaxDisplayedItems", "bindMode", "showSearchButton", "showAddButton", "showConsultButton", "showUpdateButton"], outputs: ["bindChange", "datasource-loaded", "init", "isLoaded", "selectedLabelChange", "onClick", "onSearchButtonClick", "selectionChange"] }, { kind: "component", type: i13.TsiLabelComponent, selector: "Tsi-Label", inputs: ["labelValue", "styleClass", "infoText"] }, { kind: "component", type: i14.TsiViewGridComponent, selector: "tsi-view-grid", inputs: ["columns", "gridConfiguration", "viewComponent", "crudService", "header", "modalSize", "showConsultButton", "showSearchField", "searchFields", "formEndpoint", "formName", "id", "showImportExportButton", "targetBusinessClass", "getDataFromApi", "gridData", "isSearchButtonDisabled", "selectKeyOnly", "selectionMode", "selectedItems", "key", "showGlobalSearch", "showExportButton", "showCalenderView", "calenderSchema", "showHeaderFilters", "showFilterButton", "selectAll", "checkedByField", "sortMode", "searchOnInit"], outputs: ["summariesChange", "selectedItemsChange", "buttonColumnClicked", "searchFieldsValueChanged", "getAllPagedResultChanged"] }, { kind: "component", type: i15.TsiButtonComponent, selector: "Tsi-Button", inputs: ["disabled", "text", "style", "tooltipText", "tooltipPosition", "buttonType", "icon", "styleClass", "iconSrc", "id", "iconWidth", "iconClass"], outputs: ["onClick", "rightClick"] }, { kind: "directive", type: i16.BusyDirective, selector: "[busy]", inputs: ["busy"] }, { kind: "pipe", type: i17.LocalizePipe, name: "localize" }] }); }
|
|
1029
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ManageReportingComponent, selector: "app-manage-reporting", inputs: { otherFormName: "otherFormName", otherFormEndpoint: "otherFormEndpoint", formEndpointBody: "formEndpointBody", isFormEndpointPaged: "isFormEndpointPaged", filtersHtmlTemplate: "filtersHtmlTemplate", optionalEndpoints: "optionalEndpoints", customReportingMode: "customReportingMode" }, providers: [...appProviders], viewQueries: [{ propertyName: "fileUpload", first: true, predicate: ["fileUpload"], descendants: true }, { propertyName: "importFileToReportFileUpload", first: true, predicate: ["importFileToReportFileUpload"], descendants: true }], usesInheritance: true, ngImport: i0, template: "\r\n<div class=\"card\">\r\n <div *busy=\"isloading\"></div>\r\n <div class=\"grid\">\r\n <div class=\"grid col-10\">\r\n <div *ngIf=\"isFromForm; else notFromForm\">\r\n <Tsi-Label class=\"col-2\" [labelValue]=\"'shared_reporting_form'\">\r\n </Tsi-Label>\r\n <p-dropdown class=\"col-10 tsi-component\" class=\"tsi-component\" styleClass=\"tsi-component\" appendTp=\"body\"\r\n [options]=\"formNames\" [ngModel]=\"otherFormName\" optionLabel=\"value\" optionValue=\"key\" [filter]=\"true\"\r\n filterBy=\"value\" [showClear]=\"true\" placeholder=\"{{'shared_reporting_select_form' | localize}}\"\r\n [disabled]=\"true\">\r\n </p-dropdown>\r\n </div>\r\n\r\n <ng-template #notFromForm>\r\n <ng-container>\r\n <Tsi-Label class=\"col-2\" [labelValue]=\"'shared_reporting_form'\">\r\n </Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-10\" [(bind)]=\"otherFormName\" (bindChange)=\"onFormChange()\"\r\n [listSourceUrl]=\"getFormNamesEndpoint\" [elementSourceUrl]=\"getFormNamesEndpoint \" [isFiltered]=\"true\"\r\n id-field=\"key\" label-field=\"value\">\r\n </Tsi-Search-Combo>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n </div>\r\n\r\n <p-toolbar styleClass=\"mb-4 gap-2\">\r\n <ng-template pTemplate=\"left\">\r\n <Tsi-Button [text]=\"'shared_reporting_add_report' | localize\" icon=\"p-button-icon p-button-icon-left pi pi-plus\"\r\n styleClass=\"p-element p-button-success ml-2 mr-2 p-button p-component ng-star-inserted p-button-label\" (click)=\"onNewReport()\"></Tsi-Button>\r\n <Tsi-Button [buttonType]=\"buttonType.Submit\" [text]=\"'shared_reporting_delete_report' | localize\" icon=\"p-button-icon p-button-icon-left pi pi-trash\"\r\n styleClass=\"p-element p-button-danger p-button p-component ng-star-inserted p-button-label\" (click)=\"onDeleteSelectedReports()\"\r\n [disabled]=\"!selectedReports || !selectedReports.length\"></Tsi-Button>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"right\">\r\n <p-fileUpload #fileUpload name=\"demo[]\" (onBeforeUpload)=\"onImportFile($event)\"\r\n (onSelect)=\"onFileSelected($event)\" (onClear)=\"onClear($event)\" (onRemove)=\"onRemove($event)\" [multiple]=\"false\"\r\n accept=\"application/json\" [maxFileSize]=\"10000000\" \r\n [invalidFileSizeMessageSummary]=\"'shared_file_upload_invalid_file_size_message_summary' | localize\"\r\n [invalidFileSizeMessageDetail]=\"'shared_file_upload_invalid_file_size_message_detail' | localize\"\r\n [invalidFileTypeMessageSummary]=\"'shared_file_upload_invalid_file_type_message_summary' | localize\"\r\n [invalidFileLimitMessageDetail]=\"'shared_file_upload_invalid_file_limit_message_detail' | localize\"\r\n [invalidFileLimitMessageSummary]=\"'shared_file_upload_invalid_file_limit_message_summary' | localize\"\r\n [invalidFileTypeMessageDetail]=\"'shared_file_upload_invalid_file_type_message_detail' | localize\"\r\n [chooseIcon]=\"'pi pi-paperclip'\" cancelStyleClass=\"p-button-secondary\" uploadStyleClass=\"p-button-help\"\r\n removeStyleClass=\"p-button-danger\" [chooseLabel]=\"'shared_reporting_choose_report_file' | localize\"\r\n [uploadLabel]=\"'shared_reporting_import_report' | localize\"\r\n [cancelLabel]=\"'shared_reporting_cancel_choose_report_file' | localize\">\r\n <ng-template *ngIf=\"toUploadFileData\" pTemplate=\"fileupload-content\">\r\n </ng-template>\r\n </p-fileUpload>\r\n </ng-template>\r\n </p-toolbar>\r\n\r\n <!-- <Tsi-Display-Grid [showHeader]=\"true\"\r\n [header]=\"'shared_reporting_my_template'\"\r\n [columns]=\"columns\" [gridData]=\"reports\" key=\"uid\"\r\n (buttonColumnClicked)=\"handleButtonColumnClicked($event)\" [(selectedItems)]=\"selectedReports\"\r\n [showFilters]=\"false\"\r\n [paginator]=\"true\"\r\n [globalFilterFields]=\"globalFilterFields\">\r\n </Tsi-Display-Grid> -->\r\n\r\n\r\n <!--<div style=\"text-align:left\"> <p-button icon=\"pi pi-refresh\" [pTooltip]=\"'shared_reporting_refresh' | localize\" [tooltipPosition]=\"tooltipPosition.Top\" label=\"Reload\" severity=\"help\" (click)=\"onRefresh()\" /> </div>\r\n <p-button icon=\"pi pi-refresh\" class=\"p-button-rounded\" styleClass=\"p-button-text\" />\r\n-->\r\n \r\n <Tsi-Button styleClass=\"p-element p-button-text p-button-raised p-button-rounded mb-3 ml-3\" \r\n [tooltipText]=\"'shared_reporting_refresh'\" [tooltipPosition]=\"tooltipPosition.Top\"\r\n icon=\"pi pi-refresh\" (click)=\"onRefresh()\"></Tsi-Button>\r\n\r\n <tsi-view-grid \r\n [sortMode]=\"sortModeRef.Single\"\r\n [header]=\"'shared_reporting_my_template'\"\r\n [columns]=\"columns\" [gridData]=\"reports\" key=\"uid\"\r\n (buttonColumnClicked)=\"handleButtonColumnClicked($event)\" [(selectedItems)]=\"selectedReports\"\r\n [getDataFromApi]=\"false\"\r\n [formName]=\"'my-report-templates'\"\r\n >\r\n </tsi-view-grid>\r\n <br/>\r\n <!-- Default Template -->\r\n <!-- <Tsi-Display-Grid \r\n [showHeader]=\"true\" \r\n [header]=\"'shared_reporting_BuiltIn_template'\"\r\n [showSummaryFooter]=\"false\" \r\n [paginator]=\"false\" \r\n [showFilters]=\"false\" \r\n [columns]=\"defaultTemplateColumns\" \r\n [gridData]=\"defaultReportTemplateData\" \r\n (buttonColumnClicked)=\"handleButtonColumnClicked($event)\"\r\n [paginator]=\"true\"\r\n key=\"name\">\r\n </Tsi-Display-Grid> -->\r\n\r\n \r\n <tsi-view-grid\r\n [sortMode]=\"sortModeRef.Single\"\r\n [header]=\"'shared_reporting_BuiltIn_template'\"\r\n [columns]=\"defaultTemplateColumns\" \r\n [gridData]=\"defaultReportTemplateData\" \r\n (buttonColumnClicked)=\"handleButtonColumnClicked($event)\"\r\n [getDataFromApi]=\"false\"\r\n [formName]=\"'default-my-report-templates'\"\r\n key=\"name\">\r\n </tsi-view-grid>\r\n\r\n\r\n\r\n\r\n \r\n\r\n <!-- dialog to import file to report -->\r\n <p-dialog header=\"{{'shared_reporting_select_file_to_import_into_report' | localize}}\" [(visible)]=\"isUpdateReportFromFileDialogVisible\" [style]=\"{width: '50vw'}\">\r\n <!-- <Tsi-Modal-Header (onCloseClick)=\"onImportFileToReportModalCancelClick()\" [inputTitle]=\"'shared_reporting_select_file_to_import_into_report'\"></Tsi-Modal-Header> -->\r\n\r\n <ng-template pTemplate=\"body\">\r\n <p-fileUpload #importFileToReportFileUpload name=\"importFileToReport\" (onBeforeUpload)=\"onImportFileToReport_ImportFile($event)\"\r\n (onSelect)=\"onImportFileToReport_FileSelected($event)\" (onClear)=\"onImportFileToReport_Clear($event)\" (onRemove)=\"onImportFileToReport_Remove($event)\" [multiple]=\"false\"\r\n accept=\"application/json\" [maxFileSize]=\"10000000\"\r\n [invalidFileSizeMessageSummary]=\"'shared_file_upload_invalid_file_size_message_summary' | localize\"\r\n [invalidFileSizeMessageDetail]=\"'shared_file_upload_invalid_file_size_message_detail' | localize\"\r\n [invalidFileTypeMessageSummary]=\"'shared_file_upload_invalid_file_type_message_summary' | localize\"\r\n [invalidFileLimitMessageDetail]=\"'shared_file_upload_invalid_file_limit_message_detail' | localize\"\r\n [invalidFileLimitMessageSummary]=\"'shared_file_upload_invalid_file_limit_message_summary' | localize\"\r\n [invalidFileTypeMessageDetail]=\"'shared_file_upload_invalid_file_type_message_detail' | localize\"\r\n [chooseIcon]=\"'pi pi-paperclip'\" cancelStyleClass=\"p-button-secondary\" uploadStyleClass=\"p-button-help\"\r\n removeStyleClass=\"p-button-danger\" [chooseLabel]=\"'shared_reporting_choose_report_file' | localize\"\r\n [uploadLabel]=\"'shared_reporting_import_report' | localize\"\r\n [cancelLabel]=\"'shared_reporting_cancel_choose_report_file' | localize\">\r\n <ng-template *ngIf=\"toUploadToUpdateReportFileData\" pTemplate=\"fileupload-content\">\r\n </ng-template>\r\n </p-fileUpload>\r\n </ng-template>\r\n\r\n <!-- <Tsi-Modal-Footer (onCancelClick)=\"onImportFileToReportModalCancelClick()\"\r\n (onSaveClick)=\"onImportFileToReportModalSaveClick()\"\r\n [saveDisabled]=\"!toUploadToUpdateReportFileData\"></Tsi-Modal-Footer> -->\r\n\r\n</p-dialog>\r\n</div>\r\n", styles: [".p-button.p-button-icon-only.p-button-rounded{height:2rem!important}::ng-deep .p-fileupload-choose input{display:none!important}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i8.Toolbar, selector: "p-toolbar", inputs: ["style", "styleClass", "ariaLabelledBy"] }, { kind: "component", type: i9.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "component", type: i10.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "autoShowPanelOnPrintableCharacterKeyDown", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i11.FileUpload, selector: "p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "component", type: i12.TsiSearchComboComponent, selector: "Tsi-Search-Combo", inputs: ["elementSourceUrl", "listSourceUrl", "listSourceParams", "id-field", "label-field", "multiple", "sort", "showClear", "reloadDataSource", "isFiltered", "selectedLabel", "maxWidth", "businessClass", "comboType", "statusMetadata", "currentRowItem", "datasource", "bind", "maxSelectedLabels", "tooltipMaxDisplayedItems", "bindMode", "showSearchButton", "showAddButton", "showConsultButton", "showUpdateButton"], outputs: ["bindChange", "datasource-loaded", "init", "isLoaded", "selectedLabelChange", "onClick", "onSearchButtonClick", "selectionChange"] }, { kind: "component", type: i13.TsiLabelComponent, selector: "Tsi-Label", inputs: ["labelValue", "styleClass", "infoText"] }, { kind: "component", type: i14.TsiViewGridComponent, selector: "tsi-view-grid", inputs: ["columns", "gridConfiguration", "viewComponent", "crudService", "header", "modalSize", "showConsultButton", "showSearchField", "searchFields", "formEndpoint", "formName", "id", "showImportExportButton", "targetBusinessClass", "getDataFromApi", "gridData", "isSearchButtonDisabled", "selectKeyOnly", "selectionMode", "selectedItems", "key", "showGlobalSearch", "showExportButton", "showCalenderView", "calenderSchema", "showHeaderFilters", "showFilterButton", "selectAll", "checkedByField", "sortMode", "searchOnInit"], outputs: ["summariesChange", "selectedItemsChange", "buttonColumnClicked", "searchFieldsValueChanged", "getAllPagedResultChanged"] }, { kind: "component", type: i15.TsiButtonComponent, selector: "Tsi-Button", inputs: ["disabled", "text", "style", "tooltipText", "tooltipPosition", "buttonType", "icon", "styleClass", "iconSrc", "id", "iconWidth", "iconClass"], outputs: ["onClick", "rightClick"] }, { kind: "directive", type: i16.BusyDirective, selector: "[busy]", inputs: ["busy"] }, { kind: "pipe", type: i17.LocalizePipe, name: "localize" }] }); }
|
|
1024
1030
|
}
|
|
1025
1031
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ManageReportingComponent, decorators: [{
|
|
1026
1032
|
type: Component,
|
|
1027
|
-
args: [{ selector: 'app-manage-reporting', providers: [...appProviders], template: "\r\n<div class=\"card\">\r\n <div *busy=\"isloading\"></div>\r\n <div class=\"grid\">\r\n <div class=\"grid col-10\">\r\n <div *ngIf=\"isFromForm; else notFromForm\">\r\n <Tsi-Label class=\"col-2\" [labelValue]=\"'shared_reporting_form'\">\r\n </Tsi-Label>\r\n <p-dropdown class=\"col-10 tsi-component\" class=\"tsi-component\" styleClass=\"tsi-component\" appendTp=\"body\"\r\n [options]=\"formNames\" [ngModel]=\"otherFormName\" optionLabel=\"value\" optionValue=\"key\" [filter]=\"true\"\r\n filterBy=\"value\" [showClear]=\"true\" placeholder=\"{{'shared_reporting_select_form' | localize}}\"\r\n [disabled]=\"true\">\r\n </p-dropdown>\r\n </div>\r\n\r\n <ng-template #notFromForm>\r\n <ng-container>\r\n <Tsi-Label class=\"col-2\" [labelValue]=\"'shared_reporting_form'\">\r\n </Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-10\" [(bind)]=\"otherFormName\" (bindChange)=\"onFormChange()\"\r\n [listSourceUrl]=\"getFormNamesEndpoint\" [elementSourceUrl]=\"getFormNamesEndpoint \" [isFiltered]=\"true\"\r\n id-field=\"key\" label-field=\"value\">\r\n </Tsi-Search-Combo>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n </div>\r\n\r\n <p-toolbar styleClass=\"mb-4 gap-2\">\r\n <ng-template pTemplate=\"left\">\r\n <Tsi-Button [text]=\"'shared_reporting_add_report' | localize\" icon=\"p-button-icon p-button-icon-left pi pi-plus\"\r\n styleClass=\"p-element p-button-success ml-2 mr-2 p-button p-component ng-star-inserted p-button-label\" (click)=\"onNewReport()\"></Tsi-Button>\r\n <Tsi-Button [buttonType]=\"buttonType.Submit\" [text]=\"'shared_reporting_delete_report' | localize\" icon=\"p-button-icon p-button-icon-left pi pi-trash\"\r\n styleClass=\"p-element p-button-danger p-button p-component ng-star-inserted p-button-label\" (click)=\"onDeleteSelectedReports()\"\r\n [disabled]=\"!selectedReports || !selectedReports.length\"></Tsi-Button>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"right\">\r\n <p-fileUpload #fileUpload name=\"demo[]\" (onBeforeUpload)=\"onImportFile($event)\"\r\n (onSelect)=\"onFileSelected($event)\" (onClear)=\"onClear($event)\" (onRemove)=\"onRemove($event)\" [multiple]=\"false\"\r\n accept=\"application/json\" [maxFileSize]=\"10000000\" \r\n [invalidFileSizeMessageSummary]=\"'shared_file_upload_invalid_file_size_message_summary' | localize\"\r\n [invalidFileSizeMessageDetail]=\"'shared_file_upload_invalid_file_size_message_detail' | localize\"\r\n [invalidFileTypeMessageSummary]=\"'shared_file_upload_invalid_file_type_message_summary' | localize\"\r\n [invalidFileLimitMessageDetail]=\"'shared_file_upload_invalid_file_limit_message_detail' | localize\"\r\n [invalidFileLimitMessageSummary]=\"'shared_file_upload_invalid_file_limit_message_summary' | localize\"\r\n [invalidFileTypeMessageDetail]=\"'shared_file_upload_invalid_file_type_message_detail' | localize\"\r\n [chooseIcon]=\"'pi pi-paperclip'\" cancelStyleClass=\"p-button-secondary\" uploadStyleClass=\"p-button-help\"\r\n removeStyleClass=\"p-button-danger\" [chooseLabel]=\"'shared_reporting_choose_report_file' | localize\"\r\n [uploadLabel]=\"'shared_reporting_import_report' | localize\"\r\n [cancelLabel]=\"'shared_reporting_cancel_choose_report_file' | localize\">\r\n <ng-template *ngIf=\"toUploadFileData\" pTemplate=\"fileupload-content\">\r\n </ng-template>\r\n </p-fileUpload>\r\n </ng-template>\r\n </p-toolbar>\r\n\r\n <!-- <Tsi-Display-Grid [showHeader]=\"true\"\r\n [header]=\"'shared_reporting_my_template'\"\r\n [columns]=\"columns\" [gridData]=\"reports\" key=\"uid\"\r\n (buttonColumnClicked)=\"handleButtonColumnClicked($event)\" [(selectedItems)]=\"selectedReports\"\r\n [showFilters]=\"false\"\r\n [paginator]=\"true\"\r\n [globalFilterFields]=\"globalFilterFields\">\r\n </Tsi-Display-Grid> -->\r\n\r\n\r\n <!--<div style=\"text-align:left\"> <p-button icon=\"pi pi-refresh\" [pTooltip]=\"'shared_reporting_refresh' | localize\" [tooltipPosition]=\"tooltipPosition.Top\" label=\"Reload\" severity=\"help\" (click)=\"onRefresh()\" /> </div>\r\n <p-button icon=\"pi pi-refresh\" class=\"p-button-rounded\" styleClass=\"p-button-text\" />\r\n-->\r\n \r\n <Tsi-Button styleClass=\"p-element p-button-text p-button-raised p-button-rounded mb-3 ml-3\" \r\n [tooltipText]=\"'shared_reporting_refresh'\" [tooltipPosition]=\"tooltipPosition.Top\"\r\n icon=\"pi pi-refresh\" (click)=\"onRefresh()\"></Tsi-Button>\r\n\r\n <tsi-view-grid \r\n [header]=\"'shared_reporting_my_template'\"\r\n [columns]=\"columns\" [gridData]=\"reports\" key=\"uid\"\r\n (buttonColumnClicked)=\"handleButtonColumnClicked($event)\" [(selectedItems)]=\"selectedReports\"\r\n [getDataFromApi]=\"false\"\r\n [formName]=\"'my-report-templates'\"\r\n >\r\n </tsi-view-grid>\r\n <br/>\r\n <!-- Default Template -->\r\n <!-- <Tsi-Display-Grid \r\n [showHeader]=\"true\" \r\n [header]=\"'shared_reporting_BuiltIn_template'\"\r\n [showSummaryFooter]=\"false\" \r\n [paginator]=\"false\" \r\n [showFilters]=\"false\" \r\n [columns]=\"defaultTemplateColumns\" \r\n [gridData]=\"defaultReportTemplateData\" \r\n (buttonColumnClicked)=\"handleButtonColumnClicked($event)\"\r\n [paginator]=\"true\"\r\n key=\"name\">\r\n </Tsi-Display-Grid> -->\r\n\r\n \r\n <tsi-view-grid\r\n [header]=\"'shared_reporting_BuiltIn_template'\"\r\n [columns]=\"defaultTemplateColumns\" \r\n [gridData]=\"defaultReportTemplateData\" \r\n (buttonColumnClicked)=\"handleButtonColumnClicked($event)\"\r\n [getDataFromApi]=\"false\"\r\n [formName]=\"'default-my-report-templates'\"\r\n key=\"name\">\r\n </tsi-view-grid>\r\n\r\n\r\n\r\n\r\n \r\n\r\n <!-- dialog to import file to report -->\r\n <p-dialog header=\"{{'shared_reporting_select_file_to_import_into_report' | localize}}\" [(visible)]=\"isUpdateReportFromFileDialogVisible\" [style]=\"{width: '50vw'}\">\r\n <!-- <Tsi-Modal-Header (onCloseClick)=\"onImportFileToReportModalCancelClick()\" [inputTitle]=\"'shared_reporting_select_file_to_import_into_report'\"></Tsi-Modal-Header> -->\r\n\r\n <ng-template pTemplate=\"body\">\r\n <p-fileUpload #importFileToReportFileUpload name=\"importFileToReport\" (onBeforeUpload)=\"onImportFileToReport_ImportFile($event)\"\r\n (onSelect)=\"onImportFileToReport_FileSelected($event)\" (onClear)=\"onImportFileToReport_Clear($event)\" (onRemove)=\"onImportFileToReport_Remove($event)\" [multiple]=\"false\"\r\n accept=\"application/json\" [maxFileSize]=\"10000000\"\r\n [invalidFileSizeMessageSummary]=\"'shared_file_upload_invalid_file_size_message_summary' | localize\"\r\n [invalidFileSizeMessageDetail]=\"'shared_file_upload_invalid_file_size_message_detail' | localize\"\r\n [invalidFileTypeMessageSummary]=\"'shared_file_upload_invalid_file_type_message_summary' | localize\"\r\n [invalidFileLimitMessageDetail]=\"'shared_file_upload_invalid_file_limit_message_detail' | localize\"\r\n [invalidFileLimitMessageSummary]=\"'shared_file_upload_invalid_file_limit_message_summary' | localize\"\r\n [invalidFileTypeMessageDetail]=\"'shared_file_upload_invalid_file_type_message_detail' | localize\"\r\n [chooseIcon]=\"'pi pi-paperclip'\" cancelStyleClass=\"p-button-secondary\" uploadStyleClass=\"p-button-help\"\r\n removeStyleClass=\"p-button-danger\" [chooseLabel]=\"'shared_reporting_choose_report_file' | localize\"\r\n [uploadLabel]=\"'shared_reporting_import_report' | localize\"\r\n [cancelLabel]=\"'shared_reporting_cancel_choose_report_file' | localize\">\r\n <ng-template *ngIf=\"toUploadToUpdateReportFileData\" pTemplate=\"fileupload-content\">\r\n </ng-template>\r\n </p-fileUpload>\r\n </ng-template>\r\n\r\n <!-- <Tsi-Modal-Footer (onCancelClick)=\"onImportFileToReportModalCancelClick()\"\r\n (onSaveClick)=\"onImportFileToReportModalSaveClick()\"\r\n [saveDisabled]=\"!toUploadToUpdateReportFileData\"></Tsi-Modal-Footer> -->\r\n\r\n</p-dialog>\r\n</div>\r\n", styles: [".p-button.p-button-icon-only.p-button-rounded{height:2rem!important}::ng-deep .p-fileupload-choose input{display:none!important}\n"] }]
|
|
1033
|
+
args: [{ selector: 'app-manage-reporting', providers: [...appProviders], template: "\r\n<div class=\"card\">\r\n <div *busy=\"isloading\"></div>\r\n <div class=\"grid\">\r\n <div class=\"grid col-10\">\r\n <div *ngIf=\"isFromForm; else notFromForm\">\r\n <Tsi-Label class=\"col-2\" [labelValue]=\"'shared_reporting_form'\">\r\n </Tsi-Label>\r\n <p-dropdown class=\"col-10 tsi-component\" class=\"tsi-component\" styleClass=\"tsi-component\" appendTp=\"body\"\r\n [options]=\"formNames\" [ngModel]=\"otherFormName\" optionLabel=\"value\" optionValue=\"key\" [filter]=\"true\"\r\n filterBy=\"value\" [showClear]=\"true\" placeholder=\"{{'shared_reporting_select_form' | localize}}\"\r\n [disabled]=\"true\">\r\n </p-dropdown>\r\n </div>\r\n\r\n <ng-template #notFromForm>\r\n <ng-container>\r\n <Tsi-Label class=\"col-2\" [labelValue]=\"'shared_reporting_form'\">\r\n </Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-10\" [(bind)]=\"otherFormName\" (bindChange)=\"onFormChange()\"\r\n [listSourceUrl]=\"getFormNamesEndpoint\" [elementSourceUrl]=\"getFormNamesEndpoint \" [isFiltered]=\"true\"\r\n id-field=\"key\" label-field=\"value\">\r\n </Tsi-Search-Combo>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n </div>\r\n\r\n <p-toolbar styleClass=\"mb-4 gap-2\">\r\n <ng-template pTemplate=\"left\">\r\n <Tsi-Button [text]=\"'shared_reporting_add_report' | localize\" icon=\"p-button-icon p-button-icon-left pi pi-plus\"\r\n styleClass=\"p-element p-button-success ml-2 mr-2 p-button p-component ng-star-inserted p-button-label\" (click)=\"onNewReport()\"></Tsi-Button>\r\n <Tsi-Button [buttonType]=\"buttonType.Submit\" [text]=\"'shared_reporting_delete_report' | localize\" icon=\"p-button-icon p-button-icon-left pi pi-trash\"\r\n styleClass=\"p-element p-button-danger p-button p-component ng-star-inserted p-button-label\" (click)=\"onDeleteSelectedReports()\"\r\n [disabled]=\"!selectedReports || !selectedReports.length\"></Tsi-Button>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"right\">\r\n <p-fileUpload #fileUpload name=\"demo[]\" (onBeforeUpload)=\"onImportFile($event)\"\r\n (onSelect)=\"onFileSelected($event)\" (onClear)=\"onClear($event)\" (onRemove)=\"onRemove($event)\" [multiple]=\"false\"\r\n accept=\"application/json\" [maxFileSize]=\"10000000\" \r\n [invalidFileSizeMessageSummary]=\"'shared_file_upload_invalid_file_size_message_summary' | localize\"\r\n [invalidFileSizeMessageDetail]=\"'shared_file_upload_invalid_file_size_message_detail' | localize\"\r\n [invalidFileTypeMessageSummary]=\"'shared_file_upload_invalid_file_type_message_summary' | localize\"\r\n [invalidFileLimitMessageDetail]=\"'shared_file_upload_invalid_file_limit_message_detail' | localize\"\r\n [invalidFileLimitMessageSummary]=\"'shared_file_upload_invalid_file_limit_message_summary' | localize\"\r\n [invalidFileTypeMessageDetail]=\"'shared_file_upload_invalid_file_type_message_detail' | localize\"\r\n [chooseIcon]=\"'pi pi-paperclip'\" cancelStyleClass=\"p-button-secondary\" uploadStyleClass=\"p-button-help\"\r\n removeStyleClass=\"p-button-danger\" [chooseLabel]=\"'shared_reporting_choose_report_file' | localize\"\r\n [uploadLabel]=\"'shared_reporting_import_report' | localize\"\r\n [cancelLabel]=\"'shared_reporting_cancel_choose_report_file' | localize\">\r\n <ng-template *ngIf=\"toUploadFileData\" pTemplate=\"fileupload-content\">\r\n </ng-template>\r\n </p-fileUpload>\r\n </ng-template>\r\n </p-toolbar>\r\n\r\n <!-- <Tsi-Display-Grid [showHeader]=\"true\"\r\n [header]=\"'shared_reporting_my_template'\"\r\n [columns]=\"columns\" [gridData]=\"reports\" key=\"uid\"\r\n (buttonColumnClicked)=\"handleButtonColumnClicked($event)\" [(selectedItems)]=\"selectedReports\"\r\n [showFilters]=\"false\"\r\n [paginator]=\"true\"\r\n [globalFilterFields]=\"globalFilterFields\">\r\n </Tsi-Display-Grid> -->\r\n\r\n\r\n <!--<div style=\"text-align:left\"> <p-button icon=\"pi pi-refresh\" [pTooltip]=\"'shared_reporting_refresh' | localize\" [tooltipPosition]=\"tooltipPosition.Top\" label=\"Reload\" severity=\"help\" (click)=\"onRefresh()\" /> </div>\r\n <p-button icon=\"pi pi-refresh\" class=\"p-button-rounded\" styleClass=\"p-button-text\" />\r\n-->\r\n \r\n <Tsi-Button styleClass=\"p-element p-button-text p-button-raised p-button-rounded mb-3 ml-3\" \r\n [tooltipText]=\"'shared_reporting_refresh'\" [tooltipPosition]=\"tooltipPosition.Top\"\r\n icon=\"pi pi-refresh\" (click)=\"onRefresh()\"></Tsi-Button>\r\n\r\n <tsi-view-grid \r\n [sortMode]=\"sortModeRef.Single\"\r\n [header]=\"'shared_reporting_my_template'\"\r\n [columns]=\"columns\" [gridData]=\"reports\" key=\"uid\"\r\n (buttonColumnClicked)=\"handleButtonColumnClicked($event)\" [(selectedItems)]=\"selectedReports\"\r\n [getDataFromApi]=\"false\"\r\n [formName]=\"'my-report-templates'\"\r\n >\r\n </tsi-view-grid>\r\n <br/>\r\n <!-- Default Template -->\r\n <!-- <Tsi-Display-Grid \r\n [showHeader]=\"true\" \r\n [header]=\"'shared_reporting_BuiltIn_template'\"\r\n [showSummaryFooter]=\"false\" \r\n [paginator]=\"false\" \r\n [showFilters]=\"false\" \r\n [columns]=\"defaultTemplateColumns\" \r\n [gridData]=\"defaultReportTemplateData\" \r\n (buttonColumnClicked)=\"handleButtonColumnClicked($event)\"\r\n [paginator]=\"true\"\r\n key=\"name\">\r\n </Tsi-Display-Grid> -->\r\n\r\n \r\n <tsi-view-grid\r\n [sortMode]=\"sortModeRef.Single\"\r\n [header]=\"'shared_reporting_BuiltIn_template'\"\r\n [columns]=\"defaultTemplateColumns\" \r\n [gridData]=\"defaultReportTemplateData\" \r\n (buttonColumnClicked)=\"handleButtonColumnClicked($event)\"\r\n [getDataFromApi]=\"false\"\r\n [formName]=\"'default-my-report-templates'\"\r\n key=\"name\">\r\n </tsi-view-grid>\r\n\r\n\r\n\r\n\r\n \r\n\r\n <!-- dialog to import file to report -->\r\n <p-dialog header=\"{{'shared_reporting_select_file_to_import_into_report' | localize}}\" [(visible)]=\"isUpdateReportFromFileDialogVisible\" [style]=\"{width: '50vw'}\">\r\n <!-- <Tsi-Modal-Header (onCloseClick)=\"onImportFileToReportModalCancelClick()\" [inputTitle]=\"'shared_reporting_select_file_to_import_into_report'\"></Tsi-Modal-Header> -->\r\n\r\n <ng-template pTemplate=\"body\">\r\n <p-fileUpload #importFileToReportFileUpload name=\"importFileToReport\" (onBeforeUpload)=\"onImportFileToReport_ImportFile($event)\"\r\n (onSelect)=\"onImportFileToReport_FileSelected($event)\" (onClear)=\"onImportFileToReport_Clear($event)\" (onRemove)=\"onImportFileToReport_Remove($event)\" [multiple]=\"false\"\r\n accept=\"application/json\" [maxFileSize]=\"10000000\"\r\n [invalidFileSizeMessageSummary]=\"'shared_file_upload_invalid_file_size_message_summary' | localize\"\r\n [invalidFileSizeMessageDetail]=\"'shared_file_upload_invalid_file_size_message_detail' | localize\"\r\n [invalidFileTypeMessageSummary]=\"'shared_file_upload_invalid_file_type_message_summary' | localize\"\r\n [invalidFileLimitMessageDetail]=\"'shared_file_upload_invalid_file_limit_message_detail' | localize\"\r\n [invalidFileLimitMessageSummary]=\"'shared_file_upload_invalid_file_limit_message_summary' | localize\"\r\n [invalidFileTypeMessageDetail]=\"'shared_file_upload_invalid_file_type_message_detail' | localize\"\r\n [chooseIcon]=\"'pi pi-paperclip'\" cancelStyleClass=\"p-button-secondary\" uploadStyleClass=\"p-button-help\"\r\n removeStyleClass=\"p-button-danger\" [chooseLabel]=\"'shared_reporting_choose_report_file' | localize\"\r\n [uploadLabel]=\"'shared_reporting_import_report' | localize\"\r\n [cancelLabel]=\"'shared_reporting_cancel_choose_report_file' | localize\">\r\n <ng-template *ngIf=\"toUploadToUpdateReportFileData\" pTemplate=\"fileupload-content\">\r\n </ng-template>\r\n </p-fileUpload>\r\n </ng-template>\r\n\r\n <!-- <Tsi-Modal-Footer (onCancelClick)=\"onImportFileToReportModalCancelClick()\"\r\n (onSaveClick)=\"onImportFileToReportModalSaveClick()\"\r\n [saveDisabled]=\"!toUploadToUpdateReportFileData\"></Tsi-Modal-Footer> -->\r\n\r\n</p-dialog>\r\n</div>\r\n", styles: [".p-button.p-button-icon-only.p-button-rounded{height:2rem!important}::ng-deep .p-fileupload-choose input{display:none!important}\n"] }]
|
|
1028
1034
|
}], ctorParameters: () => [{ type: i1.ReportingService }, { type: i1.IdentityManagerService }, { type: i1.TsiConfirmationService }, { type: i1.TsiNotificationService }, { type: i2.DynamicDialogRef }, { type: i2.DynamicDialogConfig }, { type: i1.TsiModalService }, { type: i3.MailingService }, { type: i1.ErrorResponseManagerService }, { type: i4.Router }], propDecorators: { fileUpload: [{
|
|
1029
1035
|
type: ViewChild,
|
|
1030
1036
|
args: ['fileUpload']
|
|
@@ -1046,4 +1052,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1046
1052
|
}], customReportingMode: [{
|
|
1047
1053
|
type: Input
|
|
1048
1054
|
}] } });
|
|
1049
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLXJlcG9ydGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvbWFuYWdlLXJlcG9ydGluZy9tYW5hZ2UtcmVwb3J0aW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9tYW5hZ2UtcmVwb3J0aW5nL21hbmFnZS1yZXBvcnRpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDMUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzFFLE9BQU8sRUFDTCxRQUFRLEVBQ1IsWUFBWSxFQUNaLGlCQUFpQixFQUVqQixhQUFhLEVBQ2IsS0FBSyxFQUNMLGFBQWEsR0FDZCxNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFFTCxlQUFlLEdBRWhCLE1BQU0sa0JBQWtCLENBQUM7QUFXMUIsT0FBTyxF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ZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgRmlsZVVwbG9hZCB9IGZyb20gJ3ByaW1lbmcvZmlsZXVwbG9hZCc7XHJcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGFwcFByb3ZpZGVycyB9IGZyb20gJy4uLy4uL2NvbnN0cy9hcHAtcHJvdmlkZXJzJztcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uS2V5cyB9IGZyb20gJy4uLy4uL2NvbnN0cy9sb2NhbGl6YXRpb24ta2V5JztcclxuaW1wb3J0IHsgcXVlcnlQYXJhbU5hbWVzQ29uc3QgfSBmcm9tICcuLi8uLi9jb25zdHMvcXVlcnlQYXJhbU5hbWVzLmNvbnN0JztcclxuaW1wb3J0IHsgU2VnbWVudCB9IGZyb20gJy4uLy4uL2VuZC1wb2ludHMnO1xyXG5pbXBvcnQgeyBSZXBvcnRpbmdFbmRwb2ludHMgfSBmcm9tICcuLi8uLi9lbmQtcG9pbnRzL3JlcG9ydGluZy1lbmRwb2ludHMnO1xyXG5pbXBvcnQge1xyXG4gIENTU1VuaXRzLFxyXG4gIERpc3BsYXlUeXBlcyxcclxuICBHcmlkU2VsZWN0aW9uTW9kZSxcclxuICBIdHRwTWV0aG9kVHlwZSxcclxuICBNb2RhbFNpemVFbnVtLFxyXG4gIE1vZGVzLFxyXG4gIFRzaVJlcG9ydFR5cGUsXHJcbn0gZnJvbSAnLi4vLi4vZW51bXMnO1xyXG5pbXBvcnQgeyBCdXR0b25UeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvYnV0dG9uLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IFRvb2x0aXBQb3NpdGlvbiB9IGZyb20gJy4uLy4uL2VudW1zL3Rvb2x0aXBQb3NpdGlvbi5lbnVtJztcclxuaW1wb3J0IHtcclxuICBCdXR0b25DbGlja1Jlc3VsdCxcclxuICBDU1NTaXplUHJvcGVydHksXHJcbiAgR3JpZENvbHVtbixcclxufSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHtcclxuICBKc29uRGF0YUNvbm5lY3Rpb24sXHJcbiAgS2V5VmFsdWVQYWlyLFxyXG4gIE9wdGlvbmFsRW5kcG9pbnRzLFxyXG4gIFJlcG9ydFRlbXBsYXRlUmVzcG9uc2UsXHJcbiAgUmVwb3J0VG9FZGl0VGVtcGxhdGUsXHJcbiAgUmVwb3J0VG9FZGl0VGVtcGxhdGVQYXlsb2FkLFxyXG4gIFJlcG9ydFRvUHJpbnQsXHJcbiAgUmVwb3J0VG9UZW1wbGF0ZSxcclxufSBmcm9tICcuLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBBcHBSb3V0ZXMgfSBmcm9tICcuLi8uLi9yb3V0ZXMvYXBwLnJvdXRlcyc7XHJcbmltcG9ydCB7IE1hbmFnZVJlcG9ydGluZ1JvdXRlcyB9IGZyb20gJy4uLy4uL3JvdXRlcy9tYW5hZ2UtcmVwb3J0aW5nLnJvdXRlcyc7XHJcbmltcG9ydCB7XHJcbiAgRXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLFxyXG4gIElkZW50aXR5TWFuYWdlclNlcnZpY2UsXHJcbiAgUmVwb3J0aW5nU2VydmljZSxcclxuICBUc2lDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gIFRzaU1vZGFsU2VydmljZSxcclxuICBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG59IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgVHNpRm9ybUNvbXBvbmVudEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi90c2ktYmFzZS9jb21wb25lbnRzL3RzaS1mb3JtLWJhc2UvdHNpLWZvcm0tYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBZGRSZXBvcnRQb3B1cENvbXBvbmVudCB9IGZyb20gJy4vYWRkLXJlcG9ydC1wb3B1cC9hZGQtcmVwb3J0LXBvcHVwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVtYWlsSW5mb3JtYXRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvYXBwbGljYXRpb24vY29uZmlndXJhdGlvbi9lbWFpbC1pbmZvcm1hdGlvbic7XHJcbmltcG9ydCB7IE1haWxpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwbGljYXRpb24vbWFpbGluZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHNpU2VuZE1haWxDb21wb25lbnQgfSBmcm9tICcuLi90c2ktc2VuZC1tYWlsL3RzaS1zZW5kLW1haWwuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLW1hbmFnZS1yZXBvcnRpbmcnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tYW5hZ2UtcmVwb3J0aW5nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9tYW5hZ2UtcmVwb3J0aW5nLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbLi4uYXBwUHJvdmlkZXJzXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1hbmFnZVJlcG9ydGluZ0NvbXBvbmVudFxyXG4gIGV4dGVuZHMgVHNpRm9ybUNvbXBvbmVudEJhc2VDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAvLyNyZWdpb24gcHJvcGVydGllc1xyXG5cclxuICByZWFkb25seSBFRElUSU9OX1BFUlNPTk5BTElTRSA9ICdhcHAtZWRpdGlvbi1wZXJzb25uYWxpc2UnO1xyXG4gIHJlcG9ydHM6IFJlcG9ydFRlbXBsYXRlUmVzcG9uc2VbXSA9IFtdO1xyXG4gIGpzb25EYXRhQ29ubmVjdGlvbjogSnNvbkRhdGFDb25uZWN0aW9uIHwgdW5kZWZpbmVkO1xyXG4gIGpzb25EYXRhQ29ubmVjdGlvbklkOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcbiAgcmVwb3J0VG9QcmludElkOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcbiAgdG9VcGxvYWRGaWxlRGF0YTogYW55ID0gdW5kZWZpbmVkO1xyXG4gIGNvbHVtbnM6IEdyaWRDb2x1bW5bXSA9IFtdO1xyXG4gIGlzRnJvbUZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmb3JtTmFtZXM6IEtleVZhbHVlUGFpcjxzdHJpbmcsIHN0cmluZz5bXSA9IFtdO1xyXG4gIHNlbGVjdGVkUmVwb3J0czogbnVtYmVyW10gPSBbXTtcclxuICBzZWxlY3Rpb25Nb2RlID0gR3JpZFNlbGVjdGlvbk1vZGUuTXVsdGlwbGU7XHJcbiAgZ2V0Rm9ybU5hbWVzRW5kcG9pbnQ6IHN0cmluZyA9IFJlcG9ydGluZ0VuZHBvaW50cy5nZXRBdmFpbGFibGVGb3JtTmFtZXMoKTtcclxuICBnbG9iYWxGaWx0ZXJGaWVsZHMgPSBbJ25hbWUnXTtcclxuICByZWZyZXNoSm9iVGltZU91dDogYW55O1xyXG4gIHByZXZpb3VzRm9ybU5hbWU6IHN0cmluZyA9ICcnO1xyXG4gIGlzVXBkYXRlUmVwb3J0RnJvbUZpbGVEaWFsb2dWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdG9VcGxvYWRUb1VwZGF0ZVJlcG9ydEZpbGVEYXRhOiBhbnkgPSB1bmRlZmluZWQ7XHJcbiAgc2VsZWN0ZWRSZXBvcnRUb1VwZGF0ZUZyb21GaWxlOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcbiAgZGVmYXVsdFJlcG9ydFRlbXBsYXRlRGF0YTogc3RyaW5nW10gPSBbXTtcclxuICBkZWZhdWx0VGVtcGxhdGVDb2x1bW5zOiBHcmlkQ29sdW1uW10gPSBbXTtcclxuICB0b29sdGlwUG9zaXRpb24gPSBUb29sdGlwUG9zaXRpb247XHJcbiAgcHJpdmF0ZSBfZGlhbG9nUmVmPzogRHluYW1pY0RpYWxvZ1JlZjtcclxuICBpc0VkaXRpb25QZXJzb25uYWxpc2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlbnRpdHlJZD86IHN0cmluZztcclxuICByZXBvcnREaXNjcmltaW5hdG9yPzogYW55O1xyXG4gIGh0dHBNZXRob2RUeXBlPzogSHR0cE1ldGhvZFR5cGU7XHJcbiAgcmVxdWVzdERhdGE/OiBhbnk7XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHJlcG9ydFR5cGVMYWJlbHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XHJcbiAgICBbVHNpUmVwb3J0VHlwZS5EYXNoYm9hcmRdOiAnRGFzaGJvYXJkJyxcclxuICAgIFtUc2lSZXBvcnRUeXBlLkxpc3RdOiAnRW5kIHVzZXInLFxyXG4gICAgW1RzaVJlcG9ydFR5cGUuUlRGXTogJ1JURicsXHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfaXNSZXBvcnRGb3JGaWNoZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBnZXQgaXNSZXBvcnRGb3JGaWNoZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICF0aGlzLm90aGVyRm9ybUVuZHBvaW50Py5pbmNsdWRlcygnZ2V0YWxscGFnZWQnKSAmJiAhdGhpcy5yZXF1ZXN0RGF0YVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2ZpbGVVcGxvYWQnKSBmaWxlVXBsb2FkPzogRmlsZVVwbG9hZDtcclxuICBAVmlld0NoaWxkKCdpbXBvcnRGaWxlVG9SZXBvcnRGaWxlVXBsb2FkJylcclxuICBpbXBvcnRGaWxlVG9SZXBvcnRGaWxlVXBsb2FkPzogRmlsZVVwbG9hZDtcclxuICBwcml2YXRlIHJlYWRvbmx5IGVycm9yTWVzc2FnZUtleTogc3RyaW5nID0gJ3NoYXJlZF9yZXBvcnRpbmdfZXJyb3Jfb2NjdXJlZCc7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGFzaGJvYXJkTW9kdWxlUm91dGUgPSBgJHtBcHBSb3V0ZXMuYXBwfS8ke0FwcFJvdXRlcy5kYXNoYm9hcmR9YDtcclxuICAvLyNlbmRyZWdpb25cclxuICBidXR0b25UeXBlID0gQnV0dG9uVHlwZTtcclxuICAvLyBwYXJhbWV0cmU6IFBhcmFtZXRyZXNBcHBsaWNhdGlvblBhaWUgPSBuZXcgUGFyYW1ldHJlc0FwcGxpY2F0aW9uUGFpZSgpO1xyXG4gIC8vI3JlZ2lvbiBJbnB1dCBwcm9wZXJ0aWVzXHJcbiAgQElucHV0KCkgb3RoZXJGb3JtTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkOyAvL2Zvcm1JZGVudGlmaWVyXHJcbiAgQElucHV0KCkgb3RoZXJGb3JtRW5kcG9pbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDsgLy89IGAke0dlc3Rpb25Db21tZXJjaWFsZVNlZ21lbnRzLmZhY3R1cmVWZW50ZX0vMTY1ZWM1ZmQtNGQzNC00NTQ2LWFlMTUtMDA0NGU3MDhiOWQ5YDtcclxuICBASW5wdXQoKSBmb3JtRW5kcG9pbnRCb2R5OiBzdHJpbmcgfCB1bmRlZmluZWQ7IC8vZm9ybUlkZW50aWZpZXJcclxuICBASW5wdXQoKSBpc0Zvcm1FbmRwb2ludFBhZ2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZmlsdGVyc0h0bWxUZW1wbGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIG9wdGlvbmFsRW5kcG9pbnRzPzogT3B0aW9uYWxFbmRwb2ludHM7XHJcbiAgQElucHV0KCkgY3VzdG9tUmVwb3J0aW5nTW9kZT86IGJvb2xlYW47XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBPdXRwdXQgcHJvcGVydGllc1xyXG4gIC8vQE91dHB1dCgpIGhpZGU6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIGN0b3JcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIHB1YmxpYyBfcGFyYW1ldHJlc0FwcGxpY2F0aW9uUGFpZVNlcnZpY2U6IFBhcmFtZXRyZXNBcHBsaWNhdGlvblBhaWVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXBvcnRpbmdTZXJ2aWNlOiBSZXBvcnRpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpZGVudGl0eU1hbmFnZXJTZXJ2aWNlOiBJZGVudGl0eU1hbmFnZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb25maXJtYXRpb25TZXJ2aWNlOiBUc2lDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHVibGljIG92ZXJyaWRlIHJlZjogRHluYW1pY0RpYWxvZ1JlZixcclxuICAgIHB1YmxpYyBvdmVycmlkZSBjb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcsXHJcbiAgICBwcml2YXRlIF90c2lNb2RhbFNlcnZpY2U6IFRzaU1vZGFsU2VydmljZSxcclxuICAgIHByaXZhdGUgX21haWxpbmdTZXJ2aWNlOiBNYWlsaW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZTogRXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxyXG4gICkge1xyXG4gICAgc3VwZXIocmVmLCBjb25maWcpO1xyXG5cclxuICAgIC8vaW5pdCBjb2x1bW5zXHJcbiAgICB0aGlzLmNvbHVtbnMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBmaWVsZDogJ25hbWUnLFxyXG4gICAgICAgIGhlYWRlcjogJ3NoYXJlZF9yZXBvcnRpbmdfcmVwb3J0X25hbWUnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgZmllbGQ6ICdyZXBvcnRUeXBlTmFtZScsXHJcbiAgICAgICAgaGVhZGVyOiAnc2hhcmVkX3JlcG9ydGluZ19yZXBvcnRfdHlwZScsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBmaWVsZDogJ2lzRGVmYXVsdCcsXHJcbiAgICAgICAgaGVhZGVyOiAnc2hhcmVkX3JlcG9ydGluZ19yZXBvcnRfaXNkZWZhdWx0JyxcclxuICAgICAgICB0eXBlOiBEaXNwbGF5VHlwZXMuQ0hFQ0tCT1hfRElTUExBWSxcclxuICAgICAgICB3aWR0aDogbmV3IENTU1NpemVQcm9wZXJ0eSgxMCwgQ1NTVW5pdHMuUFJFQ0VOVCksXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICAgIGZpZWxkOiAnc2VuZCcsXHJcbiAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLXNlbmQnLFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXN1Y2Nlc3MnLFxyXG4gICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX3NlbmRfcmVwb3J0X2J5X2VtYWlsJyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgICAgZmllbGQ6ICdlZGl0JyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktZmlsZS1lZGl0JyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi1zdWNjZXNzJyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfZWRpdCcsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICAgIGZpZWxkOiAndmlldycsXHJcbiAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWV5ZScsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgcC1idXR0b24taW5mbycsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfcmVwb3J0aW5nX3ZpZXcnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ2V4cG9ydCcsXHJcbiAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWZpbGUtZXhwb3J0JyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi1oZWxwJyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfZXhwb3J0JyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgICAgZmllbGQ6ICdpbXBvcnQnLFxyXG4gICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1wYXBlcmNsaXAnLFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXdhcm5pbmcnLFxyXG4gICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX3JlcG9ydGluZ19pbXBvcnQnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ2RlZmF1bHQnLFxyXG4gICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1ib29rbWFyay1maWxsJyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCcsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfcmVwb3J0aW5nX3NldF9kZWZhdWx0JyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgICAgZmllbGQ6ICdkZWxldGUnLFxyXG4gICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS10cmFzaCcsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgcC1idXR0b24tZGFuZ2VyJyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfZGVsZXRlX3JlcG9ydCcsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICAgIGZpZWxkOiAnQWRkX1RvX0J1aWx0SW5fVGVtcGxhdGVzJyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktYXJyb3ctY2lyY2xlLWRvd24nLFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWhlbHAnLFxyXG4gICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX3JlcG9ydGluZ19leHBvcnRfZGV2X3JlcG9ydCcsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICAgIGZpZWxkOiAnTWFrZV9kZWZhdWx0X3JlcG9ydF9sYXlvdXQnLFxyXG4gICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1ib29rbWFyay1maWxsJyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi1kYW5nZXInLFxyXG4gICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX3JlcG9ydGluZ19tYWtlX2RlZmF1bHRfcmVwb3J0X2xheW91dCcsXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG4gICAgdGhpcy5kZWZhdWx0VGVtcGxhdGVDb2x1bW5zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgZmllbGQ6ICduYW1lJyxcclxuICAgICAgICBoZWFkZXI6ICdzaGFyZWRfcmVwb3J0aW5nX3JlcG9ydF9uYW1lJyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGZpZWxkOiAncmVwb3J0VHlwZU5hbWUnLFxyXG4gICAgICAgIGhlYWRlcjogJ3NoYXJlZF9yZXBvcnRpbmdfcmVwb3J0X3R5cGUnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ2RlbGV0ZURlZmF1bHRSZXBvcnRGaWxlJyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktdHJhc2gnLFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWRhbmdlcicsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfcmVwb3J0aW5nX2RlbGV0ZV9kZWZhdWx0X3JlcG9ydCcsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICAgIGZpZWxkOiAnQWRkX0Zyb21fQnVpbHRJbl9UZW1wbGF0ZXMnLFxyXG4gICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1hcnJvdy1jaXJjbGUtdXAnLFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXByaW1hcnknLFxyXG4gICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX3JlcG9ydGluZ19hZGRfdG9fbXlfbGlzdF9yZXBvcnQnLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIGNoZWNrSWZJc0Rldk1vZGUoKSB7XHJcbiAgICBpZiAoU2VnbWVudC5wcm9kdWN0aW9uKSB7XHJcbiAgICAgIGxldCBidXR0b25BZEJ1aWx0aW5UZW1wbGF0ZXNJbmRleCA9IHRoaXMuY29sdW1ucy5maW5kSW5kZXgoXHJcbiAgICAgICAgKGNvbDogR3JpZENvbHVtbikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGNvbC5maWVsZCA9PSAnQWRkX1RvX0J1aWx0SW5fVGVtcGxhdGVzJztcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChidXR0b25BZEJ1aWx0aW5UZW1wbGF0ZXNJbmRleCAhPSAtMSkge1xyXG4gICAgICAgIHRoaXMuY29sdW1ucy5zcGxpY2UoYnV0dG9uQWRCdWlsdGluVGVtcGxhdGVzSW5kZXgsIDEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgYnV0dG9uRGVsZXRlRGVmYXVsdFJlcG9ydEZpbGVJbmRleCA9XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0VGVtcGxhdGVDb2x1bW5zLmZpbmRJbmRleCgoY29sOiBHcmlkQ29sdW1uKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gY29sLmZpZWxkID09ICdkZWxldGVEZWZhdWx0UmVwb3J0RmlsZSc7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoYnV0dG9uRGVsZXRlRGVmYXVsdFJlcG9ydEZpbGVJbmRleCAhPSAtMSkge1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdFRlbXBsYXRlQ29sdW1ucy5zcGxpY2UoXHJcbiAgICAgICAgICBidXR0b25EZWxldGVEZWZhdWx0UmVwb3J0RmlsZUluZGV4LFxyXG4gICAgICAgICAgMVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vaGFuZGxlIExpZmVjeWNsZSBIb29rc1xyXG4gIG92ZXJyaWRlIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5pc0VkaXRpb25QZXJzb25uYWxpc2UgPSB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoJ2FkbWluaXN0cmF0aW9uJyk7XHJcbiAgICB0aGlzLmNoZWNrSWZJc0Rldk1vZGUoKTtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAvLyBpZiAodGhpcy5vdGhlckZvcm1OYW1lICkge1xyXG4gICAgdGhpcy5pc0Zyb21Gb3JtID0gdHJ1ZTtcclxuICAgIHRoaXMuY29sdW1ucy5zcGxpY2UoMywgMCwge1xyXG4gICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICBmaWVsZDogJ3ByaW50JyxcclxuICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1wcmludCcsXHJcbiAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXNlY29uZGFyeScsXHJcbiAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX3JlcG9ydGluZ19yZXBvcnRfcHJpbnQnLFxyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5vdGhlckZvcm1OYW1lICYmIHRoaXMub3RoZXJGb3JtTmFtZSAhPSAnYXBwLW1hbmFnZS1yZXBvcnRpbmcnKSB7XHJcbiAgICAgIHRoaXMuZm9ybU5hbWVzID0gW3sga2V5OiB0aGlzLm90aGVyRm9ybU5hbWUsIHZhbHVlOiB0aGlzLm90aGVyRm9ybU5hbWUgfV07XHJcbiAgICB9XHJcbiAgICB0aGlzLmVudGl0eUlkID0gdGhpcy5jb25maWcuZGF0YT8uaWQ7XHJcbiAgICB0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGUgPSB0aGlzLmNvbmZpZz8uZGF0YT8uY3VzdG9tUmVwb3J0aW5nTW9kZTtcclxuICAgIHRoaXMuaHR0cE1ldGhvZFR5cGUgPSB0aGlzLmNvbmZpZz8uZGF0YT8uaHR0cE1ldGhvZFR5cGU7XHJcbiAgICBhd2FpdCB0aGlzLl9yZWZyZXNoUmVwb3J0cyh0cnVlKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuXHJcbiAgICBpZiAodGhpcy5yZWZyZXNoSm9iVGltZU91dCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5yZWZyZXNoSm9iVGltZU91dCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gaGFuZGxlIGV2ZW50c1xyXG4gIGFzeW5jIG9uUmVmcmVzaCgpIHtcclxuICAgIGF3YWl0IHRoaXMuX3JlZnJlc2hSZXBvcnRzKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgb25QcmludERlZmF1bHQoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMub3RoZXJGb3JtTmFtZSkge1xyXG4gICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuZ2V0RGVmYXVsdFJlcG9ydCh0aGlzLm90aGVyRm9ybU5hbWUpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICAgIC8vIGxldCBkZWZhdWx0UmVwb3J0SWQ6IHN0cmluZyA9IGRhdGE7XHJcbiAgICAgICAgICB0aGlzLl92aWV3UmVwb3J0KGRhdGEudWlkKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4geyB9LFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRmlsZVNlbGVjdGVkKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpbGU6IEZpbGUgPSBldmVudC5jdXJyZW50RmlsZXNbMF07XHJcbiAgICB0aGlzLnRvVXBsb2FkRmlsZURhdGEgPSBmaWxlO1xyXG4gIH1cclxuXHJcbiAgb25JbXBvcnRGaWxlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAudXBsb2FkUmVwb3J0RmlsZSh0aGlzLnRvVXBsb2FkRmlsZURhdGEsIHRoaXMucmVwb3J0RGlzY3JpbWluYXRvcilcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogYXN5bmMgKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLl9yZWZyZXNoUmVwb3J0cygpO1xyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX3JlcG9ydF91cGxvYWRlZF9zdWNjZXNzZnVsbHknXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5maWxlVXBsb2FkPy5jbGVhcigpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvL2NhbmNlbCBidXR0b24gY2xpY2tcclxuICBvbkNsZWFyKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMudG9VcGxvYWRGaWxlRGF0YSA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIC8vY2FuY2VsIGJ1dHRvbiBjbGlja1xyXG4gIG9uUmVtb3ZlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMudG9VcGxvYWRGaWxlRGF0YSA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIGhhbmRsZUJ1dHRvbkNvbHVtbkNsaWNrZWQoZXZlbnQ6IEJ1dHRvbkNsaWNrUmVzdWx0KTogdm9pZCB7XHJcbiAgICBzd2l0Y2ggKGV2ZW50LmZpZWxkKSB7XHJcbiAgICAgIGNhc2UgJ3NlbmQnOiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3NlbmQnKTtcclxuICAgICAgICB0aGlzLl9zZW5kUmVwb3J0KGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnZWRpdCc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZWRpdCcpO1xyXG4gICAgICAgIHRoaXMuX2VkaXRSZXBvcnQoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICd2aWV3Jzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCd2aWV3Jyk7XHJcbiAgICAgICAgdGhpcy5fdmlld0Rhc2hib2FyZHQoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdkZWxldGUnOiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2RlbGV0ZScpO1xyXG4gICAgICAgIHRoaXMuX2RlbGV0ZVJlcG9ydChldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ3ByaW50Jzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdwcmludCcpO1xyXG4gICAgICAgIHRoaXMuX3ZpZXdSZXBvcnQoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdleHBvcnQnOiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2V4cG9ydCcpO1xyXG4gICAgICAgIHRoaXMuX2V4cG9ydFJlcG9ydChldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ2RlZmF1bHQnOiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2RlZmF1bHQnKTtcclxuICAgICAgICB0aGlzLl9zZXREZWZhdWx0UmVwb3J0KGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnaW1wb3J0Jzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdpbXBvcnQnKTtcclxuICAgICAgICB0aGlzLl9pbXBvcnRUb1JlcG9ydChldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0FkZF9Gcm9tX0J1aWx0SW5fVGVtcGxhdGVzJzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdBZGRfRnJvbV9CdWlsdEluX1RlbXBsYXRlcycpO1xyXG4gICAgICAgIHRoaXMuX2FkZEZyb21CdWlsdEluVGVtcGxhdGVzKGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnQWRkX1RvX0J1aWx0SW5fVGVtcGxhdGVzJzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdBZGRfVG9fQnVpbHRJbl9UZW1wbGF0ZXMnKTtcclxuICAgICAgICB0aGlzLl9hZGRUb0J1aWx0SW5UZW1wbGF0ZXMoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdwcmV2aWV3Jzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdwcmV2aWV3Jyk7XHJcbiAgICAgICAgdGhpcy5wcmV2aWV3QnVpbHRJblJlcG9ydFRlbXBsYXRlKGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnTWFrZV9kZWZhdWx0X3JlcG9ydF9sYXlvdXQnOiB7XHJcbiAgICAgICAgdGhpcy5tYWtlUmVwb3J0RGVmYXVsdExheW91dChldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ2RlbGV0ZURlZmF1bHRSZXBvcnRGaWxlJzoge1xyXG4gICAgICAgIHRoaXMuZGVsZXRlRGVmYXVsdFJlcG9ydEZpbGUoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGVsZXRlRGVmYXVsdFJlcG9ydEZpbGUoZmlsZU5hbWU6IGFueSkge1xyXG4gICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oXHJcbiAgICAgIExvY2FsaXphdGlvbktleXMuY29uZmlybURlbGV0ZSxcclxuICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAocmVzdWx0OiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgbGV0IGZvcm1OYW1lID0gdGhpcy5vdGhlckZvcm1OYW1lID8/IHRoaXMuRURJVElPTl9QRVJTT05OQUxJU0U7XHJcbiAgICAgICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgICAgICAgLmRlbGV0ZURlZmF1bHRSZXBvcnRUZW1wbGF0ZUZpbGUoZm9ybU5hbWUsIGZpbGVOYW1lKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICBuZXh0OiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9yZWZyZXNoUmVwb3J0cyh0cnVlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25LZXlzLmRlbGV0ZWRTdWNjZXNzZnVsbHlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9uRGVsZXRlU2VsZWN0ZWRSZXBvcnRzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oXHJcbiAgICAgIExvY2FsaXphdGlvbktleXMuY29uZmlybURlbGV0ZSxcclxuICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAocmVzdWx0OiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgcmVzdWx0ICYmXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVwb3J0cyAhPSBudWxsICYmXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVwb3J0cyAhPSB1bmRlZmluZWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgICAgICAuZGVsZXRlTXVsdGlwbGVSZXBvcnRzKHRoaXMuc2VsZWN0ZWRSZXBvcnRzKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICBuZXh0OiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9yZWZyZXNoUmVwb3J0cygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICAgIExvY2FsaXphdGlvbktleXMuZGVsZXRlZFN1Y2Nlc3NmdWxseVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9uTmV3UmVwb3J0KCk6IHZvaWQge1xyXG4gICAgaWYgKFxyXG4gICAgICAodGhpcy5vdGhlckZvcm1FbmRwb2ludCAmJiB0aGlzLm90aGVyRm9ybU5hbWUpIHx8XHJcbiAgICAgIHRoaXMuaXNFZGl0aW9uUGVyc29ubmFsaXNlXHJcbiAgICApIHtcclxuICAgICAgbGV0IHJlcG9ydFRvVGVtcGxhdGVJZDogbnVtYmVyO1xyXG4gICAgICBsZXQgbW9kYWxTaXplID0gTW9kYWxTaXplRW51bS5MYXJnZTtcclxuICAgICAgbGV0IGNvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICB3aWR0aDogbW9kYWxTaXplLndpZHRoLFxyXG4gICAgICAgIGhlaWdodDogbW9kYWxTaXplLmhlaWdodCxcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBtb2RlOiBNb2Rlcy5jcmVhdGUsXHJcbiAgICAgICAgICBpc0VkaXRpb25QZXJzb25uYWxpc2U6IHRoaXMuaXNFZGl0aW9uUGVyc29ubmFsaXNlLFxyXG4gICAgICAgICAgZnJvbUVuZHBvaW50OiB0aGlzLm90aGVyRm9ybUVuZHBvaW50LFxyXG4gICAgICAgICAgcmVwb3J0QnVzaW5lc3NDbGFzczogdGhpcy5idXNpbmVzc0NsYXNzLFxyXG4gICAgICAgICAgY3VzdG9tUmVwb3J0aW5nTW9kZTogdGhpcy5jdXN0b21SZXBvcnRpbmdNb2RlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLl9kaWFsb2dSZWYgPSB0aGlzLl90c2lNb2RhbFNlcnZpY2Uub3BlbihcclxuICAgICAgICBBZGRSZXBvcnRQb3B1cENvbXBvbmVudCxcclxuICAgICAgICBjb25maWdcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMuX2RpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcbiAgICAgICAgY29uc29sZS5sb2codmFsKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNSZXBvcnRGb3JGaWNoZSkge1xyXG4gICAgICAgICAgdmFsLmVuZFBvaW50VmFsdWUgPSB2YWw/LmVuZFBvaW50VmFsdWU/LnJlcGxhY2VBbGwoJ3tpZH0nLCB0aGlzLmVudGl0eUlkKTsgICAgICAgICAgXHJcbiAgICAgICAgICB2YWwuZW5kUG9pbnRWYWx1ZSA9IHZhbD8uZW5kUG9pbnRWYWx1ZT8ucmVwbGFjZUFsbCgne2J1c2luZXNzQ2xhc3N9JywgdGhpcy5idXNpbmVzc0NsYXNzKTtcclxuXHJcbiAgICAgICAgICB2YWwuZW5kUG9pbnRLZXkgPSB2YWw/LmVuZFBvaW50S2V5Py5yZXBsYWNlQWxsKCd7aWR9JywgdGhpcy5lbnRpdHlJZCk7XHJcbiAgICAgICAgICB2YWwuZW5kUG9pbnRLZXkgPSB2YWw/LmVuZFBvaW50S2V5Py5yZXBsYWNlQWxsKCd7YnVzaW5lc3NDbGFzc30nLCB0aGlzLmJ1c2luZXNzQ2xhc3MpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgICAgICAuYWRkUmVwb3J0VG9Nb2RlbChcclxuICAgICAgICAgICAgdGhpcy5fbmV3UmVwb3J0VG9UZW1wbGF0ZShcclxuICAgICAgICAgICAgICB2YWwucmVwb3J0VHlwZSxcclxuICAgICAgICAgICAgICB2YWwucmVwb3J0TmFtZSxcclxuICAgICAgICAgICAgICB2YWwuZW5kUG9pbnRWYWx1ZSxcclxuICAgICAgICAgICAgICB2YWwubW9kdWxlLFxyXG4gICAgICAgICAgICAgIHZhbC50cmlPcmRyZSxcclxuICAgICAgICAgICAgICB2YWwucmVwb3J0TmFtZUFicmVnZSxcclxuICAgICAgICAgICAgICB2YWwuZGlzcGxheVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHJlcG9ydFRvVGVtcGxhdGVJZCA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgIGxldCB1cmxEZXNpZ25lcjtcclxuICAgICAgICAgICAgICBsZXQgdGVuYW50VWlkID1cclxuICAgICAgICAgICAgICAgIHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5wYXJzZU15QXV0aFRva2VuKCk/LnRlbmFudFVpZDtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHZhbC5yZXBvcnRUeXBlID09PSBUc2lSZXBvcnRUeXBlLkxpc3QpIHtcclxuICAgICAgICAgICAgICAgIHVybERlc2lnbmVyID0gYCR7U2VnbWVudC5yZXBvcnRpbmdTZXJ2aWNlQmFzZX0vcmVwb3J0LWRlc2lnbmVyLyR7cmVwb3J0VG9UZW1wbGF0ZUlkfT8ke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnRlbmFudFVpZH09JHt0ZW5hbnRVaWR9YDtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbC5yZXBvcnRUeXBlID09PSBUc2lSZXBvcnRUeXBlLkRhc2hib2FyZCkge1xyXG4gICAgICAgICAgICAgICAgdXJsRGVzaWduZXIgPSBgJHtTZWdtZW50LmFwcEJhc2VIcmVmfS8ke3RoaXMuZGFzaGJvYXJkTW9kdWxlUm91dGV9LyR7TWFuYWdlUmVwb3J0aW5nUm91dGVzLmRhc2hib2FyZERlc2lnbmVyfT8ke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnJlcG9ydFRvVGVtcGxhdGV9PSR7cmVwb3J0VG9UZW1wbGF0ZUlkfSYke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnRlbmFudFVpZH09JHt0ZW5hbnRVaWR9YDtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbC5yZXBvcnRUeXBlID09PSBUc2lSZXBvcnRUeXBlLlJURikge1xyXG4gICAgICAgICAgICAgICAgdXJsRGVzaWduZXIgPSBgJHtTZWdtZW50LnJlcG9ydGluZ1NlcnZpY2VCYXNlfS9tYWlsbWVyZ2UvJHtyZXBvcnRUb1RlbXBsYXRlSWR9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgd2luZG93Lm9wZW4odXJsRGVzaWduZXIsICdfYmxhbmsnKTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19yZWRpcmVjdGVkX3RvX25ld19yZXBvcnRfc3VjY2Vzc2Z1bGx5J1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fY2xvc2VNb2RhbCh2YWwpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Nsb3NlTW9kYWwodmFsOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9kaWFsb2dSZWYpIHtcclxuICAgICAgdGhpcy5fZGlhbG9nUmVmLmRlc3Ryb3koKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIG9uRm9ybUNoYW5nZSgpIHtcclxuICAgIGF3YWl0IHRoaXMuX3JlZnJlc2hSZXBvcnRzKCk7XHJcbiAgfVxyXG5cclxuICBvbkltcG9ydEZpbGVUb1JlcG9ydE1vZGFsQ2FuY2VsQ2xpY2soKTogdm9pZCB7XHJcbiAgICB0aGlzLl9oaWRlSW1wb3J0RmlsZVRvUmVwb3J0RGlhbG9nKCk7XHJcbiAgfVxyXG5cclxuICBvbkltcG9ydEZpbGVUb1JlcG9ydE1vZGFsU2F2ZUNsaWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc2hvd0ltcG9ydEZpbGVUb1JlcG9ydERpYWxvZygpO1xyXG4gIH1cclxuICAvLyNyZWdpb24gZmlsZSBpbXBvcnRcclxuICBvbkltcG9ydEZpbGVUb1JlcG9ydF9GaWxlU2VsZWN0ZWQoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgZmlsZTogRmlsZSA9IGV2ZW50LmN1cnJlbnRGaWxlc1swXTtcclxuICAgIHRoaXMudG9VcGxvYWRUb1VwZGF0ZVJlcG9ydEZpbGVEYXRhID0gZmlsZTtcclxuICB9XHJcblxyXG4gIG9uSW1wb3J0RmlsZVRvUmVwb3J0X0ltcG9ydEZpbGUoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSZXBvcnRUb1VwZGF0ZUZyb21GaWxlKSB7XHJcbiAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgIC51cGRhdGVSZXBvcnRMYXlvdXQoXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVwb3J0VG9VcGRhdGVGcm9tRmlsZSxcclxuICAgICAgICAgIHRoaXMudG9VcGxvYWRUb1VwZGF0ZVJlcG9ydEZpbGVEYXRhXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogYXN5bmMgKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlZnJlc2hSZXBvcnRzKCk7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX3JlcG9ydF91cGxvYWRlZF9zdWNjZXNzZnVsbHknXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuaW1wb3J0RmlsZVRvUmVwb3J0RmlsZVVwbG9hZD8uY2xlYXIoKTtcclxuICAgICAgICAgICAgdGhpcy5faGlkZUltcG9ydEZpbGVUb1JlcG9ydERpYWxvZygpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9jYW5jZWwgYnV0dG9uIGNsaWNrXHJcbiAgb25JbXBvcnRGaWxlVG9SZXBvcnRfQ2xlYXIoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy50b1VwbG9hZFRvVXBkYXRlUmVwb3J0RmlsZURhdGEgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvL2NhbmNlbCBidXR0b24gY2xpY2tcclxuICBvbkltcG9ydEZpbGVUb1JlcG9ydF9SZW1vdmUoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy50b1VwbG9hZFRvVXBkYXRlUmVwb3J0RmlsZURhdGEgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIHByaXZhdGUgbWV0aG9kc1xyXG4gIHByaXZhdGUgYXN5bmMgX3JlZnJlc2hSZXBvcnRzKHJlZnJlc2hSZXBvcnRMaXN0OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgIGxldCBmb3JtTmFtZSA9IHRoaXMub3RoZXJGb3JtTmFtZVxyXG4gICAgICA/IHRoaXMub3RoZXJGb3JtTmFtZVxyXG4gICAgICA6IHRoaXMuRURJVElPTl9QRVJTT05OQUxJU0U7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGl0ZW1zID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmdldFJlcG9ydHMoZm9ybU5hbWUsIHRoaXMucmVwb3J0RGlzY3JpbWluYXRvcilcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5yZXBvcnRzID0gaXRlbXMubWFwKChyKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLnIsXHJcbiAgICAgICAgICByZXBvcnRUeXBlTmFtZTpcclxuICAgICAgICAgICAgTWFuYWdlUmVwb3J0aW5nQ29tcG9uZW50LnJlcG9ydFR5cGVMYWJlbHNbci5yZXBvcnRUeXBlXSB8fFxyXG4gICAgICAgICAgICAnVW5rbm93bicsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlZnJlc2hSZXBvcnRMaXN0KSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgLy9nZXQgZGVmYXVsdCByZXBvcnQgdGVtcGxhdGVzIGZvciB0aGlzIGZvcm1cclxuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuZ2V0RGVmYXVsdFJlcG9ydFRlbXBsYXRlKGZvcm1OYW1lKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0UmVwb3J0VGVtcGxhdGVEYXRhID0gcmVzdWx0Py5kYXRhO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikgeyB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBfdmlld1JlcG9ydCh1aWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgLy8gaWYgKHRoaXMub3RoZXJGb3JtRW5kcG9pbnQgJiYgdWlkKSB7XHJcbiAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgbGV0IHJlcG9ydCA9IHRoaXMucmVwb3J0cy5maW5kKChyKSA9PiByLnVpZCA9PT0gdWlkKTtcclxuICAgIGlmIChyZXBvcnQgPT09IHVuZGVmaW5lZCB8fCByZXBvcnQgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAuYWRkUmVwb3J0VG9QcmludChcclxuICAgICAgICB0aGlzLl9uZXdSZXBvcnRUb1ByaW50KHVpZCwgcmVwb3J0LnJlcG9ydFR5cGUsIHJlcG9ydD8ucmVzdEVuZHBvaW50KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgIGxldCByZXBvcnRUb1RlbXBsYXRlSWQgPSBkYXRhLnVpZDtcclxuICAgICAgICAgIGxldCB1cmxEZXNpZ25lcjtcclxuICAgICAgICAgIGxldCB0ZW5hbnRVaWQgPVxyXG4gICAgICAgICAgICB0aGlzLmlkZW50aXR5TWFuYWdlclNlcnZpY2UucGFyc2VNeUF1dGhUb2tlbigpPy50ZW5hbnRVaWQ7XHJcbiAgICAgICAgICBpZiAoZGF0YS5yZXBvcnRUeXBlID09PSBUc2lSZXBvcnRUeXBlLkxpc3QpIHtcclxuICAgICAgICAgICAgdXJsRGVzaWduZXIgPSBgJHtTZWdtZW50LnJlcG9ydGluZ1NlcnZpY2VCYXNlfS9yZXBvcnQtdmlld2VyLyR7cmVwb3J0VG9UZW1wbGF0ZUlkfT8ke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnRlbmFudFVpZH09JHt0ZW5hbnRVaWR9YDtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5yZXBvcnRUeXBlID09PSBUc2lSZXBvcnRUeXBlLkRhc2hib2FyZCkge1xyXG4gICAgICAgICAgICB1cmxEZXNpZ25lciA9IGAke1NlZ21lbnQuYXBwQmFzZUhyZWZ9LyR7dGhpcy5kYXNoYm9hcmRNb2R1bGVSb3V0ZX0vJHtNYW5hZ2VSZXBvcnRpbmdSb3V0ZXMuZGFzaGJvYXJkRGVzaWduZXJ9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QucmVwb3J0VG9QcmludH09JHtyZXBvcnRUb1RlbXBsYXRlSWR9JiR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHdpbmRvdy5vcGVuKHVybERlc2lnbmVyLCAnX2JsYW5rJyk7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfcmVkaXJlY3RlZF90b19wcmludF9yZXBvcnRfc3VjY2Vzc2Z1bGx5J1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHsgfSxcclxuICAgICAgfSk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBfc2VuZFJlcG9ydCh1aWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IHJlcG9ydCA9IHRoaXMucmVwb3J0cy5maW5kKChyKSA9PiByLnVpZCA9PT0gdWlkKTtcclxuICAgIGlmIChyZXBvcnQgPT09IHVuZGVmaW5lZCB8fCByZXBvcnQgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IG1vZGFsU2l6ZSA9IE1vZGFsU2l6ZUVudW0uWE1lZGl1bTtcclxuICAgIGxldCBzYXZlU3ViamVjdDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuICAgIGxldCBjb25mOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICBkYXRhOiB7IHNhdmVTdWJqZWN0IH0sXHJcbiAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICB3aWR0aDogbW9kYWxTaXplLndpZHRoLFxyXG4gICAgICBoZWlnaHQ6IG1vZGFsU2l6ZS5oZWlnaHQsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5fZGlhbG9nUmVmID0gdGhpcy5fdHNpTW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgIFRzaVNlbmRNYWlsQ29tcG9uZW50LFxyXG4gICAgICBjb25mXHJcbiAgICApO1xyXG4gICAgc2F2ZVN1YmplY3Quc3Vic2NyaWJlKCh2YWw6IEVtYWlsSW5mb3JtYXRpb24pID0+IHtcclxuICAgICAgaWYgKCF2YWwpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF2YWwudG9BZGRyZXNzKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF2YWwuc3ViamVjdCkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIGxldCByZXBvcnRUb1ByaW50ID0gdGhpcy5fbmV3UmVwb3J0VG9QcmludChcclxuICAgICAgICB1aWQsXHJcbiAgICAgICAgcmVwb3J0IS5yZXBvcnRUeXBlLFxyXG4gICAgICAgIHJlcG9ydD8ucmVzdEVuZHBvaW50XHJcbiAgICAgIClcclxuICAgICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgICAuZXhwb3J0UmVwb3J0RmlsZVRvUGRmKHJlcG9ydFRvUHJpbnQpXHJcbiAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmV4dDogYXN5bmMgKGJsb2IpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBuZXdGaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCAnUmVwb3J0LnBkZicsIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGJsb2IudHlwZSxcclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgbGV0IGF0dGFjaG1lbnRzOiBGaWxlW10gPSBbXTtcclxuICAgICAgICAgICAgICBhdHRhY2htZW50cy5wdXNoKG5ld0ZpbGUpXHJcbiAgICAgICAgICAgICAgdGhpcy5fbWFpbGluZ1NlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5zZW5kTWFpbChcclxuICAgICAgICAgICAgICAgICAgdmFsLnRvQWRkcmVzcyEsXHJcbiAgICAgICAgICAgICAgICAgIHZhbC5zdWJqZWN0ISxcclxuICAgICAgICAgICAgICAgICAgdmFsLm1lc3NhZ2UgPz8gXCJcIixcclxuICAgICAgICAgICAgICAgICAgYXR0YWNobWVudHMsXHJcbiAgICAgICAgICAgICAgICAgIHZhbC5jY0FkZHJlc3NcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5pbmZvKFxyXG4gICAgICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uS2V5cy5zZW50U3VjY2Vzc0Z1bGx5XHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2Uuc2hvd0Vycm9yTWVzc2FnZShcclxuICAgICAgICAgICAgICAgICAgICAgIGVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2VcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkb3dubG9hZGluZyB0aGUgUERGJywgZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX3JlZGlyZWN0ZWRfdG9fcHJpbnRfcmVwb3J0X3N1Y2Nlc3NmdWxseSdcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5fY2xvc2VNb2RhbCh2YWwpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBfZWRpdFJlcG9ydCh1aWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIGxldCByZXBvcnQgPSB0aGlzLnJlcG9ydHMuZmluZCgocikgPT4gci51aWQgPT09IHVpZCk7XHJcblxyXG4gICAgaWYgKHJlcG9ydCA9PT0gdW5kZWZpbmVkIHx8IHJlcG9ydCA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgLmFkZFJlcG9ydFRvRWRpdFRlbXBsYXRlKFxyXG4gICAgICAgIHRoaXMuX25ld1JlcG9ydFRvRWRpdFRlbXBsYXRlKFxyXG4gICAgICAgICAgdWlkLFxyXG4gICAgICAgICAgcmVwb3J0LnJlcG9ydFR5cGUsXHJcbiAgICAgICAgICByZXBvcnQ/LnJlc3RFbmRwb2ludCxcclxuICAgICAgICAgIHJlcG9ydD8ubW9kdWxlLFxyXG4gICAgICAgICAgcmVwb3J0Py5vcmRlcixcclxuICAgICAgICAgIHJlcG9ydD8ucmVwb3J0TmFtZSxcclxuICAgICAgICAgIHJlcG9ydD8uc2hvcnROYW1lLFxyXG4gICAgICAgICAgcmVwb3J0Py5kaXNwbGF5XHJcbiAgICAgICAgKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICh2YWx1ZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyh2YWx1ZSk7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuaXNSZXBvcnRGb3JGaWNoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBndWlkUmVnZXggPSAvWzAtOWEtZkEtRi1dezM2fS9nO1xyXG4gICAgICAgICAgICB2YWx1ZS5yZXN0RW5kcG9pbnQgPSB2YWx1ZT8ucmVzdEVuZHBvaW50Py5yZXBsYWNlQWxsKFxyXG4gICAgICAgICAgICAgIGd1aWRSZWdleCxcclxuICAgICAgICAgICAgICAne2lkfSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBsZXQgY29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgd2lkdGg6IE1vZGFsU2l6ZUVudW0uTGFyZ2Uud2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogTW9kYWxTaXplRW51bS5MYXJnZS5oZWlnaHQsXHJcbiAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXHJcbiAgICAgICAgICAgICAgbW9kZTogTW9kZXMuZWRpdCxcclxuICAgICAgICAgICAgICBpc0VkaXRpb25QZXJzb25uYWxpc2U6IHRoaXMuaXNFZGl0aW9uUGVyc29ubmFsaXNlLFxyXG4gICAgICAgICAgICAgIGZyb21FbmRwb2ludDogdGhpcy5vdGhlckZvcm1FbmRwb2ludFxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLm90aGVyRm9ybUVuZHBvaW50XHJcbiAgICAgICAgICAgICAgICA6IHJlcG9ydD8ucmVzdEVuZHBvaW50LFxyXG4gICAgICAgICAgICAgIHJlcG9ydEJ1c2luZXNzQ2xhc3M6IHRoaXMuYnVzaW5lc3NDbGFzcyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLl9kaWFsb2dSZWYgPSB0aGlzLl90c2lNb2RhbFNlcnZpY2Uub3BlbihcclxuICAgICAgICAgICAgQWRkUmVwb3J0UG9wdXBDb21wb25lbnQsXHJcbiAgICAgICAgICAgIGNvbmZpZ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgbGV0IG1vZGVsOiBSZXBvcnRUb0VkaXRUZW1wbGF0ZVBheWxvYWQgPSB7XHJcbiAgICAgICAgICAgICAgcmVwb3J0VGVtcGxhdGVVaWQ6IHVpZCxcclxuICAgICAgICAgICAgICByZXBvcnROYW1lOiB2YWwucmVwb3J0TmFtZSxcclxuICAgICAgICAgICAgICByZXN0RW5kcG9pbnQ6IHRoaXMuaXNSZXBvcnRGb3JGaWNoZVxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuaW5zZXJ0TmV3VWlkSW5SZXN0RW5kUG9pbnQoXHJcbiAgICAgICAgICAgICAgICAgIHZhbD8uZW5kUG9pbnRWYWx1ZSxcclxuICAgICAgICAgICAgICAgICAgdGhpcy5pZFxyXG4gICAgICAgICAgICAgICAgKSA/PyB0aGlzLm90aGVyRm9ybUVuZHBvaW50XHJcbiAgICAgICAgICAgICAgICA6IHRoaXMub3RoZXJGb3JtRW5kcG9pbnQsXHJcbiAgICAgICAgICAgICAgbW9kdWxlOiB2YWwubW9kdWxlLFxyXG4gICAgICAgICAgICAgIG9yZGVyOiB2YWwudHJpT3JkcmUsXHJcbiAgICAgICAgICAgICAgc2hvcnROYW1lOiB2YWwucmVwb3J0TmFtZUFicmVnZSxcclxuICAgICAgICAgICAgICBkaXNwbGF5OiB2YWwuZGlzcGxheSxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZS5lZGl0UmVwb3J0VG9FZGl0VGVtcGxhdGUobW9kZWwpLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IHJlcG9ydFRvVGVtcGxhdGVJZCA9IHZhbHVlLnVpZDtcclxuICAgICAgICAgICAgbGV0IHVybERlc2lnbmVyO1xyXG4gICAgICAgICAgICBsZXQgdGVuYW50VWlkID1cclxuICAgICAgICAgICAgICB0aGlzLmlkZW50aXR5TWFuYWdlclNlcnZpY2UucGFyc2VNeUF1dGhUb2tlbigpPy50ZW5hbnRVaWQ7XHJcblxyXG4gICAgICAgICAgICBsZXQgY2FucmVkaXJlY3QgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY2FuUmVkaXJlY3QnKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS5yZXBvcnRUeXBlID09PSBUc2lSZXBvcnRUeXBlLkxpc3QpIHtcclxuICAgICAgICAgICAgICB1cmxEZXNpZ25lciA9IGAke1NlZ21lbnQucmVwb3J0aW5nU2VydmljZUJhc2V9L3JlcG9ydC1kZXNpZ25lci1lZGl0LyR7cmVwb3J0VG9UZW1wbGF0ZUlkfT8ke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnRlbmFudFVpZH09JHt0ZW5hbnRVaWR9YDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5yZXBvcnRUeXBlID09PSBUc2lSZXBvcnRUeXBlLkRhc2hib2FyZCkge1xyXG4gICAgICAgICAgICAgIHVybERlc2lnbmVyID0gYCR7U2VnbWVudC5hcHBCYXNlSHJlZn0vJHt0aGlzLmRhc2hib2FyZE1vZHVsZVJvdXRlfS8ke01hbmFnZVJlcG9ydGluZ1JvdXRlcy5kYXNoYm9hcmREZXNpZ25lcn0/JHtxdWVyeVBhcmFtTmFtZXNDb25zdC5yZXBvcnRUb0VkaXR9PSR7cmVwb3J0VG9UZW1wbGF0ZUlkfSYke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnRlbmFudFVpZH09JHt0ZW5hbnRVaWR9YDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5yZXBvcnRUeXBlID09PSBUc2lSZXBvcnRUeXBlLlJURikge1xyXG4gICAgICAgICAgICAgIHVybERlc2lnbmVyID0gYCR7U2VnbWVudC5yZXBvcnRpbmdTZXJ2aWNlQmFzZX0vbWFpbG1lcmdlLWVkaXQvJHtyZXBvcnRUb1RlbXBsYXRlSWR9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY2FucmVkaXJlY3QgJiYgSlNPTi5wYXJzZShjYW5yZWRpcmVjdCkgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgIHdpbmRvdy5vcGVuKHVybERlc2lnbmVyLCAnX2JsYW5rJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX3JlZGlyZWN0ZWRfdG9fZWRpdF9yZXBvcnRfc3VjY2Vzc2Z1bGx5J1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RlbGV0ZVJlcG9ydCh1aWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oXHJcbiAgICAgIExvY2FsaXphdGlvbktleXMuY29uZmlybURlbGV0ZSxcclxuICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAocmVzdWx0OiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCAmJiB1aWQgIT0gbnVsbCAmJiB1aWQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuZGVsZXRlUmVwb3J0KHVpZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uS2V5cy5kZWxldGVkU3VjY2Vzc2Z1bGx5XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9yZWZyZXNoUmVwb3J0cygpO1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldERlZmF1bHRSZXBvcnQoaWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oXHJcbiAgICAgICdzaGFyZWRfcmVwb3J0aW5nX2NvbmZpcm1fc2V0X2RlZmF1bHRfcmVwb3J0X2ZpbGUnLFxyXG4gICAgICB1bmRlZmluZWQsXHJcbiAgICAgIChyZXN1bHQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0ICYmIGlkICE9IG51bGwgJiYgaWQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgICAgICAgLnNldERlZmF1bHRSZXBvcnQoaWQsIHRoaXMucmVwb3J0RGlzY3JpbWluYXRvcilcclxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgbmV4dDogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICAgIExvY2FsaXphdGlvbktleXMuc2F2ZWRTdWNjZXNzZnVsbHlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9yZWZyZXNoUmVwb3J0cygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZXhwb3J0UmVwb3J0KHVpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodWlkKSB7XHJcbiAgICAgIGxldCByZXBvcnROYW1lOiBzdHJpbmcgPSAnZmlsZS1uYW1lLmpzb24nO1xyXG4gICAgICBsZXQgcmVwb3J0ID0gdGhpcy5yZXBvcnRzLmZpbmQoKHIpID0+IHIudWlkID09IHVpZCk7XHJcbiAgICAgIGlmIChyZXBvcnQpIHtcclxuICAgICAgICByZXBvcnROYW1lID0gcmVwb3J0Lm5hbWU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuZXhwb3J0UmVwb3J0RmlsZSh1aWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBsZXQgZmlsZSA9IG5ldyBCbG9iKFtyZXNwb25zZV0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nIH0pO1xyXG4gICAgICAgICAgdmFyIGZpbGVVUkwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpO1xyXG4gICAgICAgICAgbGV0IHJlcG9ydFJvdXRlID0gZmlsZVVSTDtcclxuICAgICAgICAgIHZhciBkb3dubG9hZExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICAgICAgICBkb3dubG9hZExpbmsuZG93bmxvYWQgPSByZXBvcnROYW1lO1xyXG4gICAgICAgICAgZG93bmxvYWRMaW5rLmhyZWYgPSByZXBvcnRSb3V0ZTtcclxuICAgICAgICAgIGRvd25sb2FkTGluay5jbGljaygpO1xyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX3JlcG9ydF9leHBvcnRlZF9zdWNjZXNzZnVsbHknXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ltcG9ydFRvUmVwb3J0KGlkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmIChpZCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUmVwb3J0VG9VcGRhdGVGcm9tRmlsZSA9IGlkO1xyXG4gICAgICB0aGlzLl9zaG93SW1wb3J0RmlsZVRvUmVwb3J0RGlhbG9nKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9uZXdKc29uRGF0YUNvbm5lY3Rpb24oKTogSnNvbkRhdGFDb25uZWN0aW9uIHtcclxuICAgIGlmICh0aGlzLm90aGVyRm9ybUVuZHBvaW50ICE9IG51bGwgJiYgdGhpcy5vdGhlckZvcm1FbmRwb2ludCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgbGV0IG5ld0pzb25EYXRhQ29ubmVjdGlvbjogSnNvbkRhdGFDb25uZWN0aW9uID0ge1xyXG4gICAgICAgIG5hbWU6IGAke3RoaXMub3RoZXJGb3JtTmFtZX0tSnNvbkRTYCxcclxuICAgICAgICBkaXNwbGF5TmFtZTogdW5kZWZpbmVkLFxyXG4gICAgICAgIHVyaTogdGhpcy5vdGhlckZvcm1FbmRwb2ludCxcclxuICAgICAgICBodHRwUmVxdWVzdENvbnRlbnQ6IHVuZGVmaW5lZCxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJldHVybiBuZXdKc29uRGF0YUNvbm5lY3Rpb247XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBFcnJvcignc29tZSBvZiB0aGUgcmVxdWlyZWQgcHJvcGVydGllcyA6IHVyaSBoYXZlIG5vdCBiZWVuIHNldCAhJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9uZXdSZXBvcnRUb1ByaW50KFxyXG4gICAgdWlkOiBzdHJpbmcsXHJcbiAgICByZXBvcnRUeXBlOiBudW1iZXIsXHJcbiAgICByZXN0RW5kcG9pbnQ/OiBzdHJpbmcsXHJcbiAgICBtb2R1bGU/OiBzdHJpbmcsXHJcbiAgICBvcmRlcj86IG51bWJlcixcclxuICAgIHNob3J0TmFtZT86IHN0cmluZyxcclxuICAgIGRpc3BsYXk/OiBib29sZWFuXHJcbiAgKTogUmVwb3J0VG9QcmludCB7XHJcbiAgICBsZXQgdG9rZW4gPSB0aGlzLmlkZW50aXR5TWFuYWdlclNlcnZpY2UuZ2V0QXV0aFRva2VuKCk7XHJcbiAgICBsZXQgdXNlcm5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCA9XHJcbiAgICAgIHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5wYXJzZU15QXV0aFRva2VuKCkubmFtZTtcclxuICAgIGlmICh1c2VybmFtZSkge1xyXG4gICAgICBpZiAodWlkICYmIC8qdGhpcy5vdGhlckZvcm1FbmRwb2ludCAmJiB0aGlzLm90aGVyRm9ybU5hbWUgJiYqLyB0b2tlbikge1xyXG4gICAgICAgIGxldCBuZXdSZXBvcnRUb1ByaW50OiBSZXBvcnRUb1ByaW50ID0ge1xyXG4gICAgICAgICAgcmVwb3J0VGVtcGxhdGVVaWQ6IHVpZCxcclxuICAgICAgICAgIHJlc3RFbmRwb2ludDogdGhpcy5pc1JlcG9ydEZvckZpY2hlXHJcbiAgICAgICAgICAgID8gdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmluc2VydE5ld1VpZEluUmVzdEVuZFBvaW50KFxyXG4gICAgICAgICAgICAgIHJlc3RFbmRwb2ludCxcclxuICAgICAgICAgICAgICB0aGlzLmlkXHJcbiAgICAgICAgICAgICkgPz8gdGhpcy5vdGhlckZvcm1FbmRwb2ludFxyXG4gICAgICAgICAgICA6IHRoaXMub3RoZXJGb3JtRW5kcG9pbnQsXHJcbiAgICAgICAgICByZXF1ZXN0RGF0YTogIXRoaXMuY3VzdG9tUmVwb3J0aW5nTW9kZVxyXG4gICAgICAgICAgICA/IHRoaXMuZm9ybUVuZHBvaW50Qm9keVxyXG4gICAgICAgICAgICA6IHRoaXMucmVxdWVzdERhdGEsXHJcbiAgICAgICAgICBmb3JtTmFtZTogdGhpcy5vdGhlckZvcm1OYW1lLFxyXG4gICAgICAgICAgcmVwb3J0VHlwZTogcmVwb3J0VHlwZSxcclxuICAgICAgICAgIHVzZXJuYW1lOiB1c2VybmFtZSxcclxuICAgICAgICAgIHVzZXJUb2tlbjogcmVwb3J0VHlwZSA9PSBUc2lSZXBvcnRUeXBlLkRhc2hib2FyZCA/IHVuZGVmaW5lZCA6IHRva2VuLFxyXG4gICAgICAgICAgaXNQYWdlZDogdGhpcy5pc0Zvcm1FbmRwb2ludFBhZ2VkID09IHRydWUgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgICBodG1sRmlsdGVyc1RleHQ6IHRoaXMuZmlsdGVyc0h0bWxUZW1wbGF0ZSxcclxuICAgICAgICAgIG9wdGlvbmFsRW5kcG9pbnRzSnNvbjogdGhpcy5vcHRpb25hbEVuZHBvaW50cyxcclxuICAgICAgICAgIG1vZHVsZTogbW9kdWxlLFxyXG4gICAgICAgICAgb3JkZXI6IG9yZGVyLFxyXG4gICAgICAgICAgc2hvcnROYW1lOiBzaG9ydE5hbWUsXHJcbiAgICAgICAgICBkaXNwbGF5OiBkaXNwbGF5LFxyXG4gICAgICAgICAgaHR0cE1ldGhvZFR5cGU6IHRoaXMuaHR0cE1ldGhvZFR5cGUsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ld1JlcG9ydFRvUHJpbnQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3IoXHJcbiAgICAgICAgICAnc29tZSBvZiB0aGUgcmVxdWlyZWQgcHJvcGVydGllcyA6IHVzZXIgdG9rZW4sIGZvcm1OYW1lLCBmb3JtRW5kcG9pbnQgb3Igc2VsZWN0ZWRSZXBvcnQgaGF2ZSBub3QgYmVlbiBzZXQgISdcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBFcnJvcihcInByb3BlcnR5ICdVc2VyTmFtZSAnIG9mIGN1cnJlbnQgdXNlciBoYXZlIG5vdCBiZWVuIHNldCAhXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbmV3UmVwb3J0VG9UZW1wbGF0ZShcclxuICAgIHJlcG9ydFR5cGU6IFRzaVJlcG9ydFR5cGUsXHJcbiAgICByZXBvcnROYW1lOiBzdHJpbmcsXHJcbiAgICByZXN0RW5kcG9pbnQ6IHN0cmluZyxcclxuICAgIG1vZHVsZTogc3RyaW5nLFxyXG4gICAgb3JkZXI6IG51bWJlcixcclxuICAgIHNob3J0TmFtZTogc3RyaW5nLFxyXG4gICAgZGlzcGxheTogYm9vbGVhblxyXG4gICk6IFJlcG9ydFRvVGVtcGxhdGUge1xyXG4gICAgbGV0IHRva2VuID0gdGhpcy5pZGVudGl0eU1hbmFnZXJTZXJ2aWNlLmdldEF1dGhUb2tlbigpO1xyXG5cclxuICAgIGlmICh0aGlzLm90aGVyRm9ybUVuZHBvaW50ICYmIHRoaXMub3RoZXJGb3JtTmFtZSAmJiB0b2tlbikge1xyXG4gICAgICBsZXQgcmVwb3J0VG9UZW1wbGF0ZTogUmVwb3J0VG9UZW1wbGF0ZSA9IHtcclxuICAgICAgICByZXN0RW5kcG9pbnQ6IHJlc3RFbmRwb2ludCxcclxuICAgICAgICByZXF1ZXN0RGF0YTogIXRoaXMuY3VzdG9tUmVwb3J0aW5nTW9kZVxyXG4gICAgICAgICAgPyB0aGlzLmZvcm1FbmRwb2ludEJvZHlcclxuICAgICAgICAgIDogdGhpcy5yZXF1ZXN0RGF0YSxcclxuICAgICAgICBmb3JtRW50aXR5OiB0aGlzLm90aGVyRm9ybU5hbWUsIC8vdGhpcy5nZXRGb3JtTmFtZSh0aGlzLm90aGVyRm9ybU5hbWUpLCAvL3RoaXMub3RoZXJGb3JtTmFtZSxcclxuICAgICAgICB1c2VyVG9rZW46IHJlcG9ydFR5cGUgPT0gVHNpUmVwb3J0VHlwZS5EYXNoYm9hcmQgPyB1bmRlZmluZWQgOiB0b2tlbixcclxuICAgICAgICByZXBvcnROYW1lOiByZXBvcnROYW1lLFxyXG4gICAgICAgIGlzUGFnZWQ6IHRoaXMuaXNGb3JtRW5kcG9pbnRQYWdlZCA9PSB0cnVlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgIHJlcG9ydFR5cGU6IHJlcG9ydFR5cGUsIC8vdGhpcy5pc0Zvcm1FbmRwb2ludFBhZ2VkID09IHRydWUgPyBUc2lSZXBvcnRUeXBlLkxpc3QgOiBUc2lSZXBvcnRUeXBlLkZvcm0sXHJcbiAgICAgICAgb3B0aW9uYWxFbmRwb2ludHNKc29uOiB0aGlzLm9wdGlvbmFsRW5kcG9pbnRzLFxyXG4gICAgICAgIGh0bWxGaWx0ZXJzVGV4dDogdGhpcy5maWx0ZXJzSHRtbFRlbXBsYXRlLFxyXG4gICAgICAgIG1vZHVsZTogbW9kdWxlLFxyXG4gICAgICAgIG9yZGVyOiBvcmRlcixcclxuICAgICAgICBzaG9ydE5hbWU6IHNob3J0TmFtZSxcclxuICAgICAgICBkaXNwbGF5OiBkaXNwbGF5LFxyXG4gICAgICAgIGRlc2NyaW1pbmF0b3JWYWx1ZTogdGhpcy5yZXBvcnREaXNjcmltaW5hdG9yLFxyXG4gICAgICAgIGh0dHBNZXRob2RUeXBlOiB0aGlzLmh0dHBNZXRob2RUeXBlLFxyXG4gICAgICB9O1xyXG4gICAgICBjb25zb2xlLmxvZyhyZXBvcnRUb1RlbXBsYXRlKTtcclxuICAgICAgcmV0dXJuIHJlcG9ydFRvVGVtcGxhdGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgcmVwb3J0VG9UZW1wbGF0ZTogUmVwb3J0VG9UZW1wbGF0ZSA9IHtcclxuICAgICAgICByZXN0RW5kcG9pbnQ6XHJcbiAgICAgICAgICB0aGlzLmlzUmVwb3J0Rm9yRmljaGUgfHwgdGhpcy5jdXN0b21SZXBvcnRpbmdNb2RlXHJcbiAgICAgICAgICAgID8gcmVzdEVuZHBvaW50IVxyXG4gICAgICAgICAgICA6IHRoaXMub3RoZXJGb3JtRW5kcG9pbnQhLFxyXG4gICAgICAgIHJlcXVlc3REYXRhOiAhdGhpcy5jdXN0b21SZXBvcnRpbmdNb2RlXHJcbiAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgc29ydGluZzogW3sgcHJvcGVydHk6ICdVSUQnLCBvcmRlcjogJ0FTQycgfV0sXHJcbiAgICAgICAgICAgIGdldEFsbERhdGE6IHRydWUsXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgOiB0aGlzLnJlcXVlc3REYXRhLFxyXG4gICAgICAgIGZvcm1FbnRpdHk6ICcnLFxyXG4gICAgICAgIHVzZXJUb2tlbjogcmVwb3J0VHlwZSA9PSBUc2lSZXBvcnRUeXBlLkRhc2hib2FyZCA/IHVuZGVmaW5lZCA6IHRva2VuISxcclxuICAgICAgICByZXBvcnROYW1lOiByZXBvcnROYW1lLFxyXG4gICAgICAgIGlzUGFnZWQ6IHRoaXMuaXNGb3JtRW5kcG9pbnRQYWdlZCA9PSB0cnVlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgIHJlcG9ydFR5cGU6IHJlcG9ydFR5cGUsIC8vdGhpcy5pc0Zvcm1FbmRwb2ludFBhZ2VkID09IHRydWUgPyBUc2lSZXBvcnRUeXBlLkxpc3QgOiBUc2lSZXBvcnRUeXBlLkZvcm0sXHJcbiAgICAgICAgb3B0aW9uYWxFbmRwb2ludHNKc29uOiB0aGlzLm9wdGlvbmFsRW5kcG9pbnRzLFxyXG4gICAgICAgIGh0bWxGaWx0ZXJzVGV4dDogdGhpcy5maWx0ZXJzSHRtbFRlbXBsYXRlLFxyXG4gICAgICAgIG1vZHVsZTogbW9kdWxlLFxyXG4gICAgICAgIG9yZGVyOiBvcmRlcixcclxuICAgICAgICBzaG9ydE5hbWU6IHNob3J0TmFtZSxcclxuICAgICAgICBkaXNwbGF5OiBkaXNwbGF5LFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgcmV0dXJuIHJlcG9ydFRvVGVtcGxhdGU7XHJcbiAgICAgIC8vIHRocm93IEVycm9yKCdzb21lIG9mIHRoZSByZXF1aXJlZCBwcm9wZXJ0aWVzIDogdXNlciB0b2tlbiwgZm9ybU5hbWUgb3IgZm9ybUVuZHBvaW50IGhhdmUgbm90IGJlZW4gc2V0ICEnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX25ld1JlcG9ydFRvRWRpdFRlbXBsYXRlKFxyXG4gICAgdWlkOiBzdHJpbmcsXHJcbiAgICByZXBvcnRUeXBlOiBUc2lSZXBvcnRUeXBlLFxyXG4gICAgcmVzdEVuZFBvaW50Pzogc3RyaW5nLFxyXG4gICAgbW9kdWxlPzogc3RyaW5nLFxyXG4gICAgb3JkZXI/OiBudW1iZXIsXHJcbiAgICByZXBvcnROYW1lPzogc3RyaW5nLFxyXG4gICAgc2hvcnROYW1lPzogc3RyaW5nLFxyXG4gICAgZGlzcGxheT86IGJvb2xlYW5cclxuICApOiBSZXBvcnRUb0VkaXRUZW1wbGF0ZSB7XHJcbiAgICBsZXQgdG9rZW4gPSB0aGlzLmlkZW50aXR5TWFuYWdlclNlcnZpY2UuZ2V0QXV0aFRva2VuKCk7XHJcbiAgICBsZXQgdXNlcm5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCA9XHJcbiAgICAgIHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5wYXJzZU15QXV0aFRva2VuKCkubmFtZTtcclxuXHJcbiAgICBpZiAodXNlcm5hbWUpIHtcclxuICAgICAgaWYgKHVpZCAmJiAvKnRoaXMub3RoZXJGb3JtRW5kcG9pbnQgJiYgdGhpcy5vdGhlckZvcm1OYW1lICYmKi8gdG9rZW4pIHtcclxuICAgICAgICBsZXQgcmVwb3J0VG9FZGl0VGVtcGxhdGU6IFJlcG9ydFRvRWRpdFRlbXBsYXRlID0ge1xyXG4gICAgICAgICAgcmVzdEVuZHBvaW50OiB0aGlzLmlzUmVwb3J0Rm9yRmljaGVcclxuICAgICAgICAgICAgPyB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuaW5zZXJ0TmV3VWlkSW5SZXN0RW5kUG9pbnQoXHJcbiAgICAgICAgICAgICAgcmVzdEVuZFBvaW50LFxyXG4gICAgICAgICAgICAgIHRoaXMuaWRcclxuICAgICAgICAgICAgKSA/PyB0aGlzLm90aGVyRm9ybUVuZHBvaW50XHJcbiAgICAgICAgICAgIDogdGhpcy5vdGhlckZvcm1FbmRwb2ludCxcclxuICAgICAgICAgIHJlcXVlc3REYXRhOiAhdGhpcy5jdXN0b21SZXBvcnRpbmdNb2RlXHJcbiAgICAgICAgICAgID8gdGhpcy5mb3JtRW5kcG9pbnRCb2R5XHJcbiAgICAgICAgICAgIDogdGhpcy5yZXF1ZXN0RGF0YSxcclxuICAgICAgICAgIGZvcm1OYW1lOiB0aGlzLm90aGVyRm9ybU5hbWUsIC8vIHRoaXMuZ2V0Rm9ybU5hbWUodGhpcy5vdGhlckZvcm1OYW1lISksXHJcbiAgICAgICAgICByZXBvcnRUZW1wbGF0ZVVpZDogdWlkLFxyXG4gICAgICAgICAgcmVwb3J0VHlwZTogcmVwb3J0VHlwZSxcclxuICAgICAgICAgIHVzZXJuYW1lOiB1c2VybmFtZSxcclxuICAgICAgICAgIHVzZXJUb2tlbjogcmVwb3J0VHlwZSA9PSBUc2lSZXBvcnRUeXBlLkRhc2hib2FyZCA/IHVuZGVmaW5lZCA6IHRva2VuLFxyXG4gICAgICAgICAgaXNQYWdlZDogdGhpcy5pc0Zvcm1FbmRwb2ludFBhZ2VkID09IHRydWUgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgICBvcHRpb25hbEVuZHBvaW50c0pzb246IHRoaXMub3B0aW9uYWxFbmRwb2ludHMsXHJcbiAgICAgICAgICBodG1sRmlsdGVyc1RleHQ6IHRoaXMuZmlsdGVyc0h0bWxUZW1wbGF0ZSxcclxuICAgICAgICAgIG1vZHVsZTogbW9kdWxlLFxyXG4gICAgICAgICAgb3JkZXI6IG9yZGVyLFxyXG4gICAgICAgICAgcmVwb3J0TmFtZTogcmVwb3J0TmFtZSxcclxuICAgICAgICAgIHNob3J0TmFtZTogc2hvcnROYW1lLFxyXG4gICAgICAgICAgZGlzcGxheTogZGlzcGxheSxcclxuICAgICAgICAgIGh0dHBNZXRob2RUeXBlOiB0aGlzLmh0dHBNZXRob2RUeXBlLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHJlcG9ydFRvRWRpdFRlbXBsYXRlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IEVycm9yKFxyXG4gICAgICAgICAgJ3NvbWUgb2YgdGhlIHJlcXVpcmVkIHByb3BlcnRpZXMgOiB1c2VyIHRva2VuIG9yIHNlbGVjdGVkUmVwb3J0IGhhdmUgbm90IGJlZW4gc2V0ICEnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhyb3cgRXJyb3IoXCJwcm9wZXJ0eSAnVXNlck5hbWUgJyBvZiBjdXJyZW50IHVzZXIgaGF2ZSBub3QgYmVlbiBzZXQgIVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlZnJlc2hSZXBvcnRzSm9iKCk6IHZvaWQge1xyXG4gICAgY29uc29sZS53YXJuKCdSZWZyZXNoIFJlcG9ydHMgSm9iIGF0IDogJywgbmV3IERhdGUoKSk7XHJcbiAgICAvL1xyXG4gICAgaWYgKHRoaXMub3RoZXJGb3JtTmFtZSAhPSBudWxsICYmIHRoaXMub3RoZXJGb3JtTmFtZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgICAgLmdldFJlcG9ydHModGhpcy5vdGhlckZvcm1OYW1lLCB0aGlzLnJlcG9ydERpc2NyaW1pbmF0b3IpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAoaXRlbXMpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZXBvcnRzID0gaXRlbXM7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2aW91c0Zvcm1OYW1lICE9IHRoaXMub3RoZXJGb3JtTmFtZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uS2V5cy5yZXRyaWV2ZWRTdWNjZXNzZnVsbHlcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHRoaXMucHJldmlvdXNGb3JtTmFtZSA9IHRoaXMub3RoZXJGb3JtTmFtZSA/PyAnJztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9cclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoSm9iVGltZU91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hSZXBvcnRzSm9iKCk7XHJcbiAgICAgICAgICAgIH0sIDEwMDAwKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaEpvYlRpbWVPdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoUmVwb3J0c0pvYigpO1xyXG4gICAgICAgICAgICB9LCAxMDAwMCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHsgfSxcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVmcmVzaEpvYlRpbWVPdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLl9yZWZyZXNoUmVwb3J0c0pvYigpO1xyXG4gICAgICB9LCAxMDAwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zaG93SW1wb3J0RmlsZVRvUmVwb3J0RGlhbG9nKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1VwZGF0ZVJlcG9ydEZyb21GaWxlRGlhbG9nVmlzaWJsZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oaWRlSW1wb3J0RmlsZVRvUmVwb3J0RGlhbG9nKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1VwZGF0ZVJlcG9ydEZyb21GaWxlRGlhbG9nVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy50b1VwbG9hZFRvVXBkYXRlUmVwb3J0RmlsZURhdGEgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvLyBnZXREZWZhdWx0UmVwb3J0VGVtcGxhdGUoKXtcclxuICBwcmV2aWV3QnVpbHRJblJlcG9ydFRlbXBsYXRlKHRlbXBsYXRlTmFtZTogc3RyaW5nKSB7XHJcbiAgICBsZXQgdXJsOiBzdHJpbmcgPSBgJHtTZWdtZW50LnJlcG9ydGluZ1NlcnZpY2VCYXNlfS9yZXBvcnQtdmlld2VyLyR7dGhpcy5vdGhlckZvcm1OYW1lfS8ke3RlbXBsYXRlTmFtZX1gO1xyXG4gICAgd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJyk7XHJcbiAgfVxyXG5cclxuICAvL2FkZCBhIHJlcG9ydCBmcm9tIHRoZSBidWlsdC1pbiBtb2RlbCB0byB0aGUgdXNlciBsaXN0XHJcbiAgX2FkZEZyb21CdWlsdEluVGVtcGxhdGVzKHRlbXBsYXRlTmFtZTogYW55KSB7XHJcbiAgICBsZXQgZm9ybU5hbWUgPSB0aGlzLm90aGVyRm9ybU5hbWUgPz8gdGhpcy5FRElUSU9OX1BFUlNPTk5BTElTRTtcclxuICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAuYWRkRnJvbUJ1aWx0SW5UZW1wbGF0ZShmb3JtTmFtZSwgdGVtcGxhdGVOYW1lLCB0aGlzLnJlcG9ydERpc2NyaW1pbmF0b3IpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IGFzeW5jIChyZXMpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmlzU3VjY2VzcyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9yZWZyZXNoUmVwb3J0cygpO1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuaW5mbyhyZXMubXNnKTtcclxuICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uud2FybihcclxuICAgICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19jYW5ub3RfYWRkX2Zyb21fYnVpbHRfaW5fdGVtcGxhdGUnXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLndhcm4oXHJcbiAgICAgICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX2Nhbm5vdF9hZGRfZnJvbV9idWlsdF9pbl90ZW1wbGF0ZSdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvL2FkZCBhIHJlcG9ydCBmcm9tIHRoZSB1c2VyIGxpc3QgdG8gYnVpbHQtaW4gbW9kZWwgdGVtcGxhdGVcclxuICBfYWRkVG9CdWlsdEluVGVtcGxhdGVzKHJlcG9ydElkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMucmVwb3J0aW5nU2VydmljZS5hZGRUb0J1aWx0SW5UZW1wbGF0ZShyZXBvcnRJZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogYXN5bmMgKHJlcykgPT4ge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3JlZnJlc2hSZXBvcnRzKHRydWUpO1xyXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5pbmZvKExvY2FsaXphdGlvbktleXMuc2F2ZWRTdWNjZXNzZnVsbHkpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS53YXJuKFxyXG4gICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfYWRkX3RvX2J1aWx0aW5fdGVtcGxhdGVfcmVwb3J0X2ZhaWxlZCdcclxuICAgICAgICApO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gbWFrZSByZXBvcnQgbGF5b3V0IGFzIGRlZmF1bHQgZm9yIGFsbCByZXBvcnRzXHJcbiAgbWFrZVJlcG9ydERlZmF1bHRMYXlvdXQocmVwb3J0VWlkOiBzdHJpbmcpIHtcclxuICAgIGxldCByZXF1ZXN0ID0ge1xyXG4gICAgICByZXBvcnRUZW1wbGF0ZVVpZDogcmVwb3J0VWlkLFxyXG4gICAgfTtcclxuICAgIHRoaXMucmVwb3J0aW5nU2VydmljZS5tYWtlUmVwb3J0TGF5b3V0QXNEZWZhdWx0TGF5b3V0KHJlcXVlc3QpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoJ3NoYXJlZF9yZXBvcnRpbmdfc3VjY2Vzc191cGRhdGVkJyk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLndhcm4oJ3NoYXJlZF9yZXBvcnRpbmdfZXJyb3Jfb2NjdXJlZCcpO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vI2VuZCByZWdpb25cclxuXHJcbiAgX3ZpZXdEYXNoYm9hcmR0KHVpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgbGV0IHJlcG9ydCA9IHRoaXMucmVwb3J0cy5maW5kKChyKSA9PiByLnVpZCA9PT0gdWlkKTtcclxuICAgIGlmICghcmVwb3J0KSB7XHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcmVwb3J0VGVtcGxhdGVJZCA9IHJlcG9ydC51aWQ7XHJcbiAgICBsZXQgdGVuYW50VWlkID0gdGhpcy5pZGVudGl0eU1hbmFnZXJTZXJ2aWNlLnBhcnNlTXlBdXRoVG9rZW4oKT8udGVuYW50VWlkO1xyXG5cclxuICAgIGxldCB1cmxWaWV3ZXIgPSBgJHtTZWdtZW50LmFwcEJhc2VIcmVmfS8ke3RoaXMuZGFzaGJvYXJkTW9kdWxlUm91dGV9LyR7TWFuYWdlUmVwb3J0aW5nUm91dGVzLmRhc2hib2FyZFZpZXdlcn0/JHtxdWVyeVBhcmFtTmFtZXNDb25zdC5yZXBvcnRUZW1wbGF0ZX09JHtyZXBvcnRUZW1wbGF0ZUlkfSYke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnRlbmFudFVpZH09JHt0ZW5hbnRVaWR9YDtcclxuXHJcbiAgICBjb25zb2xlLmxvZygnPj4+IF92aWV3RGFzaGJvYXJkdCB+IHVybFZpZXdlcjonLCB1cmxWaWV3ZXIpO1xyXG5cclxuICAgIHdpbmRvdy5vcGVuKHVybFZpZXdlciwgJ19ibGFuaycpO1xyXG4gICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICdzaGFyZWRfcmVwb3J0aW5nX3JlZGlyZWN0ZWRfdG9fcHJpbnRfcmVwb3J0X3N1Y2Nlc3NmdWxseSdcclxuICAgICk7XHJcbiAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCJcclxuPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICA8ZGl2ICpidXN5PVwiaXNsb2FkaW5nXCI+PC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJncmlkIGNvbC0xMFwiPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNGcm9tRm9ybTsgZWxzZSBub3RGcm9tRm9ybVwiPlxyXG4gICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtMlwiIFtsYWJlbFZhbHVlXT1cIidzaGFyZWRfcmVwb3J0aW5nX2Zvcm0nXCI+XHJcbiAgICAgICAgPC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgPHAtZHJvcGRvd24gY2xhc3M9XCJjb2wtMTAgdHNpLWNvbXBvbmVudFwiIGNsYXNzPVwidHNpLWNvbXBvbmVudFwiIHN0eWxlQ2xhc3M9XCJ0c2ktY29tcG9uZW50XCIgYXBwZW5kVHA9XCJib2R5XCJcclxuICAgICAgICAgIFtvcHRpb25zXT1cImZvcm1OYW1lc1wiIFtuZ01vZGVsXT1cIm90aGVyRm9ybU5hbWVcIiBvcHRpb25MYWJlbD1cInZhbHVlXCIgb3B0aW9uVmFsdWU9XCJrZXlcIiBbZmlsdGVyXT1cInRydWVcIlxyXG4gICAgICAgICAgZmlsdGVyQnk9XCJ2YWx1ZVwiIFtzaG93Q2xlYXJdPVwidHJ1ZVwiIHBsYWNlaG9sZGVyPVwie3snc2hhcmVkX3JlcG9ydGluZ19zZWxlY3RfZm9ybScgfCBsb2NhbGl6ZX19XCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCI+XHJcbiAgICAgICAgPC9wLWRyb3Bkb3duPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjbm90RnJvbUZvcm0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtMlwiIFtsYWJlbFZhbHVlXT1cIidzaGFyZWRfcmVwb3J0aW5nX2Zvcm0nXCI+XHJcbiAgICAgICAgICA8L1RzaS1MYWJlbD5cclxuICAgICAgICAgIDxUc2ktU2VhcmNoLUNvbWJvIGNsYXNzPVwiY29sLTEwXCIgWyhiaW5kKV09XCJvdGhlckZvcm1OYW1lXCIgKGJpbmRDaGFuZ2UpPVwib25Gb3JtQ2hhbmdlKClcIlxyXG4gICAgICAgICAgICBbbGlzdFNvdXJjZVVybF09XCJnZXRGb3JtTmFtZXNFbmRwb2ludFwiIFtlbGVtZW50U291cmNlVXJsXT1cImdldEZvcm1OYW1lc0VuZHBvaW50IFwiIFtpc0ZpbHRlcmVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICBpZC1maWVsZD1cImtleVwiIGxhYmVsLWZpZWxkPVwidmFsdWVcIj5cclxuICAgICAgICAgIDwvVHNpLVNlYXJjaC1Db21ibz5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8cC10b29sYmFyIHN0eWxlQ2xhc3M9XCJtYi00IGdhcC0yXCI+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwibGVmdFwiPlxyXG4gICAgICA8VHNpLUJ1dHRvbiBbdGV4dF09XCInc2hhcmVkX3JlcG9ydGluZ19hZGRfcmVwb3J0JyB8IGxvY2FsaXplXCIgaWNvbj1cInAtYnV0dG9uLWljb24gcC1idXR0b24taWNvbi1sZWZ0IHBpIHBpLXBsdXNcIlxyXG4gICAgICAgIHN0eWxlQ2xhc3M9XCJwLWVsZW1lbnQgcC1idXR0b24tc3VjY2VzcyBtbC0yIG1yLTIgcC1idXR0b24gcC1jb21wb25lbnQgbmctc3Rhci1pbnNlcnRlZCBwLWJ1dHRvbi1sYWJlbFwiIChjbGljayk9XCJvbk5ld1JlcG9ydCgpXCI+PC9Uc2ktQnV0dG9uPlxyXG4gICAgICA8VHNpLUJ1dHRvbiBbYnV0dG9uVHlwZV09XCJidXR0b25UeXBlLlN1Ym1pdFwiIFt0ZXh0XT1cIidzaGFyZWRfcmVwb3J0aW5nX2RlbGV0ZV9yZXBvcnQnIHwgbG9jYWxpemVcIiBpY29uPVwicC1idXR0b24taWNvbiBwLWJ1dHRvbi1pY29uLWxlZnQgcGkgcGktdHJhc2hcIlxyXG4gICAgICAgIHN0eWxlQ2xhc3M9XCJwLWVsZW1lbnQgcC1idXR0b24tZGFuZ2VyIHAtYnV0dG9uIHAtY29tcG9uZW50IG5nLXN0YXItaW5zZXJ0ZWQgcC1idXR0b24tbGFiZWxcIiAoY2xpY2spPVwib25EZWxldGVTZWxlY3RlZFJlcG9ydHMoKVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiFzZWxlY3RlZFJlcG9ydHMgfHwgIXNlbGVjdGVkUmVwb3J0cy5sZW5ndGhcIj48L1RzaS1CdXR0b24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJyaWdodFwiPlxyXG4gICAgICA8cC1maWxlVXBsb2FkICNmaWxlVXBsb2FkIG5hbWU9XCJkZW1vW11cIiAob25CZWZvcmVVcGxvYWQpPVwib25JbXBvcnRGaWxlKCRldmVudClcIlxyXG4gICAgICAgIChvblNlbGVjdCk9XCJvbkZpbGVTZWxlY3RlZCgkZXZlbnQpXCIgKG9uQ2xlYXIpPVwib25DbGVhcigkZXZlbnQpXCIgKG9uUmVtb3ZlKT1cIm9uUmVtb3ZlKCRldmVudClcIiBbbXVsdGlwbGVdPVwiZmFsc2VcIlxyXG4gICAgICAgIGFjY2VwdD1cImFwcGxpY2F0aW9uL2pzb25cIiBbbWF4RmlsZVNpemVdPVwiMTAwMDAwMDBcIiBcclxuICAgICAgICBbaW52YWxpZEZpbGVTaXplTWVzc2FnZVN1bW1hcnldPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfc2l6ZV9tZXNzYWdlX3N1bW1hcnknIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZVNpemVNZXNzYWdlRGV0YWlsXT1cIidzaGFyZWRfZmlsZV91cGxvYWRfaW52YWxpZF9maWxlX3NpemVfbWVzc2FnZV9kZXRhaWwnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZVR5cGVNZXNzYWdlU3VtbWFyeV09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV90eXBlX21lc3NhZ2Vfc3VtbWFyeScgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW2ludmFsaWRGaWxlTGltaXRNZXNzYWdlRGV0YWlsXT1cIidzaGFyZWRfZmlsZV91cGxvYWRfaW52YWxpZF9maWxlX2xpbWl0X21lc3NhZ2VfZGV0YWlsJyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVMaW1pdE1lc3NhZ2VTdW1tYXJ5XT1cIidzaGFyZWRfZmlsZV91cGxvYWRfaW52YWxpZF9maWxlX2xpbWl0X21lc3NhZ2Vfc3VtbWFyeScgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW2ludmFsaWRGaWxlVHlwZU1lc3NhZ2VEZXRhaWxdPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfdHlwZV9tZXNzYWdlX2RldGFpbCcgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW2Nob29zZUljb25dPVwiJ3BpIHBpLXBhcGVyY2xpcCdcIiBjYW5jZWxTdHlsZUNsYXNzPVwicC1idXR0b24tc2Vjb25kYXJ5XCIgdXBsb2FkU3R5bGVDbGFzcz1cInAtYnV0dG9uLWhlbHBcIlxyXG4gICAgICAgIHJlbW92ZVN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1kYW5nZXJcIiBbY2hvb3NlTGFiZWxdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfY2hvb3NlX3JlcG9ydF9maWxlJyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbdXBsb2FkTGFiZWxdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfaW1wb3J0X3JlcG9ydCcgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW2NhbmNlbExhYmVsXT1cIidzaGFyZWRfcmVwb3J0aW5nX2NhbmNlbF9jaG9vc2VfcmVwb3J0X2ZpbGUnIHwgbG9jYWxpemVcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJ0b1VwbG9hZEZpbGVEYXRhXCIgcFRlbXBsYXRlPVwiZmlsZXVwbG9hZC1jb250ZW50XCI+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9wLWZpbGVVcGxvYWQ+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvcC10b29sYmFyPlxyXG5cclxuICA8IS0tIDxUc2ktRGlzcGxheS1HcmlkIFtzaG93SGVhZGVyXT1cInRydWVcIlxyXG4gICAgW2hlYWRlcl09XCInc2hhcmVkX3JlcG9ydGluZ19teV90ZW1wbGF0ZSdcIlxyXG4gICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiIFtncmlkRGF0YV09XCJyZXBvcnRzXCIga2V5PVwidWlkXCJcclxuICAgIChidXR0b25Db2x1bW5DbGlja2VkKT1cImhhbmRsZUJ1dHRvbkNvbHVtbkNsaWNrZWQoJGV2ZW50KVwiIFsoc2VsZWN0ZWRJdGVtcyldPVwic2VsZWN0ZWRSZXBvcnRzXCJcclxuICAgIFtzaG93RmlsdGVyc109XCJmYWxzZVwiXHJcbiAgICBbcGFnaW5hdG9yXT1cInRydWVcIlxyXG4gICAgW2dsb2JhbEZpbHRlckZpZWxkc109XCJnbG9iYWxGaWx0ZXJGaWVsZHNcIj5cclxuICA8L1RzaS1EaXNwbGF5LUdyaWQ+IC0tPlxyXG5cclxuXHJcbiAgPCEtLTxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOmxlZnRcIj4gPHAtYnV0dG9uIGljb249XCJwaSBwaS1yZWZyZXNoXCIgIFtwVG9vbHRpcF09XCInc2hhcmVkX3JlcG9ydGluZ19yZWZyZXNoJyB8IGxvY2FsaXplXCIgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb24uVG9wXCIgIGxhYmVsPVwiUmVsb2FkXCIgc2V2ZXJpdHk9XCJoZWxwXCIgKGNsaWNrKT1cIm9uUmVmcmVzaCgpXCIgLz4gPC9kaXY+XHJcbiAgPHAtYnV0dG9uIGljb249XCJwaSBwaS1yZWZyZXNoXCIgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkXCIgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXRleHRcIiAvPlxyXG4tLT5cclxuICBcclxuICA8VHNpLUJ1dHRvbiBzdHlsZUNsYXNzPVwicC1lbGVtZW50IHAtYnV0dG9uLXRleHQgcC1idXR0b24tcmFpc2VkIHAtYnV0dG9uLXJvdW5kZWQgbWItMyBtbC0zXCIgIFxyXG4gICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfcmVwb3J0aW5nX3JlZnJlc2gnXCIgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb24uVG9wXCJcclxuICAgIGljb249XCJwaSBwaS1yZWZyZXNoXCIgKGNsaWNrKT1cIm9uUmVmcmVzaCgpXCI+PC9Uc2ktQnV0dG9uPlxyXG5cclxuICA8dHNpLXZpZXctZ3JpZCBcclxuICAgIFtoZWFkZXJdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfbXlfdGVtcGxhdGUnXCJcclxuICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIiBbZ3JpZERhdGFdPVwicmVwb3J0c1wiIGtleT1cInVpZFwiXHJcbiAgICAoYnV0dG9uQ29sdW1uQ2xpY2tlZCk9XCJoYW5kbGVCdXR0b25Db2x1bW5DbGlja2VkKCRldmVudClcIiBbKHNlbGVjdGVkSXRlbXMpXT1cInNlbGVjdGVkUmVwb3J0c1wiXHJcbiAgICBbZ2V0RGF0YUZyb21BcGldPVwiZmFsc2VcIlxyXG4gICAgW2Zvcm1OYW1lXT1cIidteS1yZXBvcnQtdGVtcGxhdGVzJ1wiXHJcbiAgICA+XHJcbiAgPC90c2ktdmlldy1ncmlkPlxyXG4gIDxici8+XHJcbiAgIDwhLS0gRGVmYXVsdCBUZW1wbGF0ZSAtLT5cclxuICAgPCEtLSA8VHNpLURpc3BsYXktR3JpZCBcclxuICAgW3Nob3dIZWFkZXJdPVwidHJ1ZVwiIFxyXG4gICBbaGVhZGVyXT1cIidzaGFyZWRfcmVwb3J0aW5nX0J1aWx0SW5fdGVtcGxhdGUnXCJcclxuICAgW3Nob3dTdW1tYXJ5Rm9vdGVyXT1cImZhbHNlXCIgXHJcbiAgIFtwYWdpbmF0b3JdPVwiZmFsc2VcIiBcclxuICAgW3Nob3dGaWx0ZXJzXT1cImZhbHNlXCIgXHJcbiAgIFtjb2x1bW5zXT1cImRlZmF1bHRUZW1wbGF0ZUNvbHVtbnNcIiBcclxuICAgW2dyaWREYXRhXT1cImRlZmF1bHRSZXBvcnRUZW1wbGF0ZURhdGFcIiBcclxuICAgKGJ1dHRvbkNvbHVtbkNsaWNrZWQpPVwiaGFuZGxlQnV0dG9uQ29sdW1uQ2xpY2tlZCgkZXZlbnQpXCJcclxuICAgW3BhZ2luYXRvcl09XCJ0cnVlXCJcclxuICAga2V5PVwibmFtZVwiPlxyXG4gIDwvVHNpLURpc3BsYXktR3JpZD4gLS0+XHJcblxyXG4gIFxyXG4gIDx0c2ktdmlldy1ncmlkXHJcbiAgIFtoZWFkZXJdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfQnVpbHRJbl90ZW1wbGF0ZSdcIlxyXG4gICBbY29sdW1uc109XCJkZWZhdWx0VGVtcGxhdGVDb2x1bW5zXCIgXHJcbiAgIFtncmlkRGF0YV09XCJkZWZhdWx0UmVwb3J0VGVtcGxhdGVEYXRhXCIgXHJcbiAgIChidXR0b25Db2x1bW5DbGlja2VkKT1cImhhbmRsZUJ1dHRvbkNvbHVtbkNsaWNrZWQoJGV2ZW50KVwiXHJcbiAgIFtnZXREYXRhRnJvbUFwaV09XCJmYWxzZVwiXHJcbiAgIFtmb3JtTmFtZV09XCInZGVmYXVsdC1teS1yZXBvcnQtdGVtcGxhdGVzJ1wiXHJcbiAgIGtleT1cIm5hbWVcIj5cclxuICA8L3RzaS12aWV3LWdyaWQ+XHJcblxyXG5cclxuXHJcblxyXG4gIFxyXG5cclxuICA8IS0tIGRpYWxvZyB0byBpbXBvcnQgZmlsZSB0byByZXBvcnQgLS0+XHJcbiAgPHAtZGlhbG9nIGhlYWRlcj1cInt7J3NoYXJlZF9yZXBvcnRpbmdfc2VsZWN0X2ZpbGVfdG9faW1wb3J0X2ludG9fcmVwb3J0JyB8IGxvY2FsaXplfX1cIiBbKHZpc2libGUpXT1cImlzVXBkYXRlUmVwb3J0RnJvbUZpbGVEaWFsb2dWaXNpYmxlXCIgW3N0eWxlXT1cInt3aWR0aDogJzUwdncnfVwiPlxyXG4gICAgPCEtLSA8VHNpLU1vZGFsLUhlYWRlciAob25DbG9zZUNsaWNrKT1cIm9uSW1wb3J0RmlsZVRvUmVwb3J0TW9kYWxDYW5jZWxDbGljaygpXCIgW2lucHV0VGl0bGVdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfc2VsZWN0X2ZpbGVfdG9faW1wb3J0X2ludG9fcmVwb3J0J1wiPjwvVHNpLU1vZGFsLUhlYWRlcj4gLS0+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIj5cclxuICAgICAgPHAtZmlsZVVwbG9hZCAjaW1wb3J0RmlsZVRvUmVwb3J0RmlsZVVwbG9hZCBuYW1lPVwiaW1wb3J0RmlsZVRvUmVwb3J0XCIgKG9uQmVmb3JlVXBsb2FkKT1cIm9uSW1wb3J0RmlsZVRvUmVwb3J0X0ltcG9ydEZpbGUoJGV2ZW50KVwiXHJcbiAgICAgICAgKG9uU2VsZWN0KT1cIm9uSW1wb3J0RmlsZVRvUmVwb3J0X0ZpbGVTZWxlY3RlZCgkZXZlbnQpXCIgKG9uQ2xlYXIpPVwib25JbXBvcnRGaWxlVG9SZXBvcnRfQ2xlYXIoJGV2ZW50KVwiIChvblJlbW92ZSk9XCJvbkltcG9ydEZpbGVUb1JlcG9ydF9SZW1vdmUoJGV2ZW50KVwiIFttdWx0aXBsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgYWNjZXB0PVwiYXBwbGljYXRpb24vanNvblwiIFttYXhGaWxlU2l6ZV09XCIxMDAwMDAwMFwiXHJcbiAgICAgICAgW2ludmFsaWRGaWxlU2l6ZU1lc3NhZ2VTdW1tYXJ5XT1cIidzaGFyZWRfZmlsZV91cGxvYWRfaW52YWxpZF9maWxlX3NpemVfbWVzc2FnZV9zdW1tYXJ5JyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVTaXplTWVzc2FnZURldGFpbF09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV9zaXplX21lc3NhZ2VfZGV0YWlsJyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVUeXBlTWVzc2FnZVN1bW1hcnldPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfdHlwZV9tZXNzYWdlX3N1bW1hcnknIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZUxpbWl0TWVzc2FnZURldGFpbF09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV9saW1pdF9tZXNzYWdlX2RldGFpbCcgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW2ludmFsaWRGaWxlTGltaXRNZXNzYWdlU3VtbWFyeV09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV9saW1pdF9tZXNzYWdlX3N1bW1hcnknIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZVR5cGVNZXNzYWdlRGV0YWlsXT1cIidzaGFyZWRfZmlsZV91cGxvYWRfaW52YWxpZF9maWxlX3R5cGVfbWVzc2FnZV9kZXRhaWwnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtjaG9vc2VJY29uXT1cIidwaSBwaS1wYXBlcmNsaXAnXCIgY2FuY2VsU3R5bGVDbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeVwiIHVwbG9hZFN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1oZWxwXCJcclxuICAgICAgICByZW1vdmVTdHlsZUNsYXNzPVwicC1idXR0b24tZGFuZ2VyXCIgW2Nob29zZUxhYmVsXT1cIidzaGFyZWRfcmVwb3J0aW5nX2Nob29zZV9yZXBvcnRfZmlsZScgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW3VwbG9hZExhYmVsXT1cIidzaGFyZWRfcmVwb3J0aW5nX2ltcG9ydF9yZXBvcnQnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtjYW5jZWxMYWJlbF09XCInc2hhcmVkX3JlcG9ydGluZ19jYW5jZWxfY2hvb3NlX3JlcG9ydF9maWxlJyB8IGxvY2FsaXplXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwidG9VcGxvYWRUb1VwZGF0ZVJlcG9ydEZpbGVEYXRhXCIgcFRlbXBsYXRlPVwiZmlsZXVwbG9hZC1jb250ZW50XCI+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9wLWZpbGVVcGxvYWQ+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDwhLS0gPFRzaS1Nb2RhbC1Gb290ZXIgKG9uQ2FuY2VsQ2xpY2spPVwib25JbXBvcnRGaWxlVG9SZXBvcnRNb2RhbENhbmNlbENsaWNrKClcIlxyXG4gICAgKG9uU2F2ZUNsaWNrKT1cIm9uSW1wb3J0RmlsZVRvUmVwb3J0TW9kYWxTYXZlQ2xpY2soKVwiXHJcbiAgICBbc2F2ZURpc2FibGVkXT1cIiF0b1VwbG9hZFRvVXBkYXRlUmVwb3J0RmlsZURhdGFcIj48L1RzaS1Nb2RhbC1Gb290ZXI+IC0tPlxyXG5cclxuPC9wLWRpYWxvZz5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
1055
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLXJlcG9ydGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvbWFuYWdlLXJlcG9ydGluZy9tYW5hZ2UtcmVwb3J0aW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9tYW5hZ2UtcmVwb3J0aW5nL21hbmFnZS1yZXBvcnRpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDMUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzFFLE9BQU8sRUFDTCxRQUFRLEVBQ1IsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixZQUFZLEVBRVosYUFBYSxFQUNiLEtBQUssRUFDTCxhQUFhLEdBQ2QsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBRUwsZUFBZSxHQUVoQixNQUFNLGtCQUFrQixDQUFDO0FB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QUFpQjtzQkFBekIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgRHluYW1pY0RpYWxvZ0NvbmZpZywgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IEZpbGVVcGxvYWQgfSBmcm9tICdwcmltZW5nL2ZpbGV1cGxvYWQnO1xyXG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBhcHBQcm92aWRlcnMgfSBmcm9tICcuLi8uLi9jb25zdHMvYXBwLXByb3ZpZGVycyc7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvbktleXMgfSBmcm9tICcuLi8uLi9jb25zdHMvbG9jYWxpemF0aW9uLWtleSc7XHJcbmltcG9ydCB7IHF1ZXJ5UGFyYW1OYW1lc0NvbnN0IH0gZnJvbSAnLi4vLi4vY29uc3RzL3F1ZXJ5UGFyYW1OYW1lcy5jb25zdCc7XHJcbmltcG9ydCB7IFNlZ21lbnQgfSBmcm9tICcuLi8uLi9lbmQtcG9pbnRzJztcclxuaW1wb3J0IHsgUmVwb3J0aW5nRW5kcG9pbnRzIH0gZnJvbSAnLi4vLi4vZW5kLXBvaW50cy9yZXBvcnRpbmctZW5kcG9pbnRzJztcclxuaW1wb3J0IHtcclxuICBDU1NVbml0cyxcclxuICBEaXNwbGF5VHlwZXMsXHJcbiAgR3JpZFNlbGVjdGlvbk1vZGUsXHJcbiAgR3JpZFNvcnRNb2RlLFxyXG4gIEh0dHBNZXRob2RUeXBlLFxyXG4gIE1vZGFsU2l6ZUVudW0sXHJcbiAgTW9kZXMsXHJcbiAgVHNpUmVwb3J0VHlwZSxcclxufSBmcm9tICcuLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IEJ1dHRvblR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcy9idXR0b24tdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgVG9vbHRpcFBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vZW51bXMvdG9vbHRpcFBvc2l0aW9uLmVudW0nO1xyXG5pbXBvcnQge1xyXG4gIEJ1dHRvbkNsaWNrUmVzdWx0LFxyXG4gIENTU1NpemVQcm9wZXJ0eSxcclxuICBHcmlkQ29sdW1uLFxyXG59IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQge1xyXG4gIEpzb25EYXRhQ29ubmVjdGlvbixcclxuICBLZXlWYWx1ZVBhaXIsXHJcbiAgT3B0aW9uYWxFbmRwb2ludHMsXHJcbiAgUmVwb3J0VGVtcGxhdGVSZXNwb25zZSxcclxuICBSZXBvcnRUb0VkaXRUZW1wbGF0ZSxcclxuICBSZXBvcnRUb0VkaXRUZW1wbGF0ZVBheWxvYWQsXHJcbiAgUmVwb3J0VG9QcmludCxcclxuICBSZXBvcnRUb1RlbXBsYXRlLFxyXG59IGZyb20gJy4uLy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEFwcFJvdXRlcyB9IGZyb20gJy4uLy4uL3JvdXRlcy9hcHAucm91dGVzJztcclxuaW1wb3J0IHsgTWFuYWdlUmVwb3J0aW5nUm91dGVzIH0gZnJvbSAnLi4vLi4vcm91dGVzL21hbmFnZS1yZXBvcnRpbmcucm91dGVzJztcclxuaW1wb3J0IHtcclxuICBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UsXHJcbiAgSWRlbnRpdHlNYW5hZ2VyU2VydmljZSxcclxuICBSZXBvcnRpbmdTZXJ2aWNlLFxyXG4gIFRzaUNvbmZpcm1hdGlvblNlcnZpY2UsXHJcbiAgVHNpTW9kYWxTZXJ2aWNlLFxyXG4gIFRzaU5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbn0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBUc2lGb3JtQ29tcG9uZW50QmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3RzaS1iYXNlL2NvbXBvbmVudHMvdHNpLWZvcm0tYmFzZS90c2ktZm9ybS1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFkZFJlcG9ydFBvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi9hZGQtcmVwb3J0LXBvcHVwL2FkZC1yZXBvcnQtcG9wdXAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRW1haWxJbmZvcm1hdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9hcHBsaWNhdGlvbi9jb25maWd1cmF0aW9uL2VtYWlsLWluZm9ybWF0aW9uJztcclxuaW1wb3J0IHsgTWFpbGluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHBsaWNhdGlvbi9tYWlsaW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUc2lTZW5kTWFpbENvbXBvbmVudCB9IGZyb20gJy4uL3RzaS1zZW5kLW1haWwvdHNpLXNlbmQtbWFpbC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtbWFuYWdlLXJlcG9ydGluZycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL21hbmFnZS1yZXBvcnRpbmcuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL21hbmFnZS1yZXBvcnRpbmcuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFsuLi5hcHBQcm92aWRlcnNdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWFuYWdlUmVwb3J0aW5nQ29tcG9uZW50XHJcbiAgZXh0ZW5kcyBUc2lGb3JtQ29tcG9uZW50QmFzZUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIC8vI3JlZ2lvbiBwcm9wZXJ0aWVzXHJcblxyXG4gIHJlYWRvbmx5IEVESVRJT05fUEVSU09OTkFMSVNFID0gJ2FwcC1lZGl0aW9uLXBlcnNvbm5hbGlzZSc7XHJcbiAgcmVwb3J0czogUmVwb3J0VGVtcGxhdGVSZXNwb25zZVtdID0gW107XHJcbiAganNvbkRhdGFDb25uZWN0aW9uOiBKc29uRGF0YUNvbm5lY3Rpb24gfCB1bmRlZmluZWQ7XHJcbiAganNvbkRhdGFDb25uZWN0aW9uSWQ6IG51bWJlciB8IHVuZGVmaW5lZDtcclxuICByZXBvcnRUb1ByaW50SWQ6IG51bWJlciB8IHVuZGVmaW5lZDtcclxuICB0b1VwbG9hZEZpbGVEYXRhOiBhbnkgPSB1bmRlZmluZWQ7XHJcbiAgY29sdW1uczogR3JpZENvbHVtbltdID0gW107XHJcbiAgaXNGcm9tRm9ybTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGZvcm1OYW1lczogS2V5VmFsdWVQYWlyPHN0cmluZywgc3RyaW5nPltdID0gW107XHJcbiAgc2VsZWN0ZWRSZXBvcnRzOiBudW1iZXJbXSA9IFtdO1xyXG4gIHNlbGVjdGlvbk1vZGUgPSBHcmlkU2VsZWN0aW9uTW9kZS5NdWx0aXBsZTtcclxuICBnZXRGb3JtTmFtZXNFbmRwb2ludDogc3RyaW5nID0gUmVwb3J0aW5nRW5kcG9pbnRzLmdldEF2YWlsYWJsZUZvcm1OYW1lcygpO1xyXG4gIGdsb2JhbEZpbHRlckZpZWxkcyA9IFsnbmFtZSddO1xyXG4gIHJlZnJlc2hKb2JUaW1lT3V0OiBhbnk7XHJcbiAgcHJldmlvdXNGb3JtTmFtZTogc3RyaW5nID0gJyc7XHJcbiAgaXNVcGRhdGVSZXBvcnRGcm9tRmlsZURpYWxvZ1Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0b1VwbG9hZFRvVXBkYXRlUmVwb3J0RmlsZURhdGE6IGFueSA9IHVuZGVmaW5lZDtcclxuICBzZWxlY3RlZFJlcG9ydFRvVXBkYXRlRnJvbUZpbGU6IG51bWJlciB8IHVuZGVmaW5lZDtcclxuICBkZWZhdWx0UmVwb3J0VGVtcGxhdGVEYXRhOiBzdHJpbmdbXSA9IFtdO1xyXG4gIGRlZmF1bHRUZW1wbGF0ZUNvbHVtbnM6IEdyaWRDb2x1bW5bXSA9IFtdO1xyXG4gIHRvb2x0aXBQb3NpdGlvbiA9IFRvb2x0aXBQb3NpdGlvbjtcclxuICBwcml2YXRlIF9kaWFsb2dSZWY/OiBEeW5hbWljRGlhbG9nUmVmO1xyXG4gIGlzRWRpdGlvblBlcnNvbm5hbGlzZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVudGl0eUlkPzogc3RyaW5nO1xyXG4gIHJlcG9ydERpc2NyaW1pbmF0b3I/OiBhbnk7XHJcbiAgaHR0cE1ldGhvZFR5cGU/OiBIdHRwTWV0aG9kVHlwZTtcclxuICByZXF1ZXN0RGF0YT86IGFueTtcclxuICBzb3J0TW9kZVJlZiA9IEdyaWRTb3J0TW9kZVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSByZXBvcnRUeXBlTGFiZWxzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gICAgW1RzaVJlcG9ydFR5cGUuRGFzaGJvYXJkXTogJ0Rhc2hib2FyZCcsXHJcbiAgICBbVHNpUmVwb3J0VHlwZS5MaXN0XTogJ0VuZCB1c2VyJyxcclxuICAgIFtUc2lSZXBvcnRUeXBlLlJURl06ICdSVEYnLFxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgX2lzUmVwb3J0Rm9yRmljaGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgZ2V0IGlzUmVwb3J0Rm9yRmljaGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAhdGhpcy5vdGhlckZvcm1FbmRwb2ludD8uaW5jbHVkZXMoJ2dldGFsbHBhZ2VkJykgJiYgIXRoaXMucmVxdWVzdERhdGFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBAVmlld0NoaWxkKCdmaWxlVXBsb2FkJykgZmlsZVVwbG9hZD86IEZpbGVVcGxvYWQ7XHJcbiAgQFZpZXdDaGlsZCgnaW1wb3J0RmlsZVRvUmVwb3J0RmlsZVVwbG9hZCcpXHJcbiAgaW1wb3J0RmlsZVRvUmVwb3J0RmlsZVVwbG9hZD86IEZpbGVVcGxvYWQ7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBlcnJvck1lc3NhZ2VLZXk6IHN0cmluZyA9ICdzaGFyZWRfcmVwb3J0aW5nX2Vycm9yX29jY3VyZWQnO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRhc2hib2FyZE1vZHVsZVJvdXRlID0gYCR7QXBwUm91dGVzLmFwcH0vJHtBcHBSb3V0ZXMuZGFzaGJvYXJkfWA7XHJcbiAgLy8jZW5kcmVnaW9uXHJcbiAgYnV0dG9uVHlwZSA9IEJ1dHRvblR5cGU7XHJcbiAgLy8gcGFyYW1ldHJlOiBQYXJhbWV0cmVzQXBwbGljYXRpb25QYWllID0gbmV3IFBhcmFtZXRyZXNBcHBsaWNhdGlvblBhaWUoKTtcclxuICAvLyNyZWdpb24gSW5wdXQgcHJvcGVydGllc1xyXG4gIEBJbnB1dCgpIG90aGVyRm9ybU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDsgLy9mb3JtSWRlbnRpZmllclxyXG4gIEBJbnB1dCgpIG90aGVyRm9ybUVuZHBvaW50OiBzdHJpbmcgfCB1bmRlZmluZWQ7IC8vPSBgJHtHZXN0aW9uQ29tbWVyY2lhbGVTZWdtZW50cy5mYWN0dXJlVmVudGV9LzE2NWVjNWZkLTRkMzQtNDU0Ni1hZTE1LTAwNDRlNzA4YjlkOWA7XHJcbiAgQElucHV0KCkgZm9ybUVuZHBvaW50Qm9keTogc3RyaW5nIHwgdW5kZWZpbmVkOyAvL2Zvcm1JZGVudGlmaWVyXHJcbiAgQElucHV0KCkgaXNGb3JtRW5kcG9pbnRQYWdlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGZpbHRlcnNIdG1sVGVtcGxhdGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBvcHRpb25hbEVuZHBvaW50cz86IE9wdGlvbmFsRW5kcG9pbnRzO1xyXG4gIEBJbnB1dCgpIGN1c3RvbVJlcG9ydGluZ01vZGU/OiBib29sZWFuO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gT3V0cHV0IHByb3BlcnRpZXNcclxuICAvL0BPdXRwdXQoKSBoaWRlOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBjdG9yXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyBwdWJsaWMgX3BhcmFtZXRyZXNBcHBsaWNhdGlvblBhaWVTZXJ2aWNlOiBQYXJhbWV0cmVzQXBwbGljYXRpb25QYWllU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVwb3J0aW5nU2VydmljZTogUmVwb3J0aW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgaWRlbnRpdHlNYW5hZ2VyU2VydmljZTogSWRlbnRpdHlNYW5hZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgY29uZmlybWF0aW9uU2VydmljZTogVHNpQ29uZmlybWF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogVHNpTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgIHB1YmxpYyBvdmVycmlkZSByZWY6IER5bmFtaWNEaWFsb2dSZWYsXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnLFxyXG4gICAgcHJpdmF0ZSBfdHNpTW9kYWxTZXJ2aWNlOiBUc2lNb2RhbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9tYWlsaW5nU2VydmljZTogTWFpbGluZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2U6IEVycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcclxuICApIHtcclxuICAgIHN1cGVyKHJlZiwgY29uZmlnKTtcclxuXHJcbiAgICAvL2luaXQgY29sdW1uc1xyXG4gICAgdGhpcy5jb2x1bW5zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgZmllbGQ6ICduYW1lJyxcclxuICAgICAgICBoZWFkZXI6ICdzaGFyZWRfcmVwb3J0aW5nX3JlcG9ydF9uYW1lJyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGZpZWxkOiAncmVwb3J0VHlwZU5hbWUnLFxyXG4gICAgICAgIGhlYWRlcjogJ3NoYXJlZF9yZXBvcnRpbmdfcmVwb3J0X3R5cGUnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgZmllbGQ6ICdpc0RlZmF1bHQnLFxyXG4gICAgICAgIGhlYWRlcjogJ3NoYXJlZF9yZXBvcnRpbmdfcmVwb3J0X2lzZGVmYXVsdCcsXHJcbiAgICAgICAgdHlwZTogRGlzcGxheVR5cGVzLkNIRUNLQk9YX0RJU1BMQVksXHJcbiAgICAgICAgd2lkdGg6IG5ldyBDU1NTaXplUHJvcGVydHkoMTAsIENTU1VuaXRzLlBSRUNFTlQpLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ3NlbmQnLFxyXG4gICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1zZW5kJyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi1zdWNjZXNzJyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9zZW5kX3JlcG9ydF9ieV9lbWFpbCcsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICAgIGZpZWxkOiAnZWRpdCcsXHJcbiAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWZpbGUtZWRpdCcsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgcC1idXR0b24tc3VjY2VzcycsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfcmVwb3J0aW5nX2VkaXQnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ3ZpZXcnLFxyXG4gICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1leWUnLFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWluZm8nLFxyXG4gICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX3JlcG9ydGluZ192aWV3JyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgICAgZmllbGQ6ICdleHBvcnQnLFxyXG4gICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1maWxlLWV4cG9ydCcsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgcC1idXR0b24taGVscCcsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfcmVwb3J0aW5nX2V4cG9ydCcsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICAgIGZpZWxkOiAnaW1wb3J0JyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktcGFwZXJjbGlwJyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi13YXJuaW5nJyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfaW1wb3J0JyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgICAgZmllbGQ6ICdkZWZhdWx0JyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktYm9va21hcmstZmlsbCcsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQnLFxyXG4gICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX3JlcG9ydGluZ19zZXRfZGVmYXVsdCcsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICAgIGZpZWxkOiAnZGVsZXRlJyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktdHJhc2gnLFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWRhbmdlcicsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfcmVwb3J0aW5nX2RlbGV0ZV9yZXBvcnQnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ0FkZF9Ub19CdWlsdEluX1RlbXBsYXRlcycsXHJcbiAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWFycm93LWNpcmNsZS1kb3duJyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi1oZWxwJyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfZXhwb3J0X2Rldl9yZXBvcnQnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ01ha2VfZGVmYXVsdF9yZXBvcnRfbGF5b3V0JyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktYm9va21hcmstZmlsbCcsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgcC1idXR0b24tZGFuZ2VyJyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfbWFrZV9kZWZhdWx0X3JlcG9ydF9sYXlvdXQnLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuICAgIHRoaXMuZGVmYXVsdFRlbXBsYXRlQ29sdW1ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGZpZWxkOiAnbmFtZScsXHJcbiAgICAgICAgaGVhZGVyOiAnc2hhcmVkX3JlcG9ydGluZ19yZXBvcnRfbmFtZScsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBmaWVsZDogJ3JlcG9ydFR5cGVOYW1lJyxcclxuICAgICAgICBoZWFkZXI6ICdzaGFyZWRfcmVwb3J0aW5nX3JlcG9ydF90eXBlJyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgICAgZmllbGQ6ICdkZWxldGVEZWZhdWx0UmVwb3J0RmlsZScsXHJcbiAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLXRyYXNoJyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi1kYW5nZXInLFxyXG4gICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX3JlcG9ydGluZ19kZWxldGVfZGVmYXVsdF9yZXBvcnQnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ0FkZF9Gcm9tX0J1aWx0SW5fVGVtcGxhdGVzJyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktYXJyb3ctY2lyY2xlLXVwJyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi1wcmltYXJ5JyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfYWRkX3RvX215X2xpc3RfcmVwb3J0JyxcclxuICAgICAgfSxcclxuICAgIF07XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBjaGVja0lmSXNEZXZNb2RlKCkge1xyXG4gICAgaWYgKFNlZ21lbnQucHJvZHVjdGlvbikge1xyXG4gICAgICBsZXQgYnV0dG9uQWRCdWlsdGluVGVtcGxhdGVzSW5kZXggPSB0aGlzLmNvbHVtbnMuZmluZEluZGV4KFxyXG4gICAgICAgIChjb2w6IEdyaWRDb2x1bW4pID0+IHtcclxuICAgICAgICAgIHJldHVybiBjb2wuZmllbGQgPT0gJ0FkZF9Ub19CdWlsdEluX1RlbXBsYXRlcyc7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgICBpZiAoYnV0dG9uQWRCdWlsdGluVGVtcGxhdGVzSW5kZXggIT0gLTEpIHtcclxuICAgICAgICB0aGlzLmNvbHVtbnMuc3BsaWNlKGJ1dHRvbkFkQnVpbHRpblRlbXBsYXRlc0luZGV4LCAxKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGJ1dHRvbkRlbGV0ZURlZmF1bHRSZXBvcnRGaWxlSW5kZXggPVxyXG4gICAgICAgIHRoaXMuZGVmYXVsdFRlbXBsYXRlQ29sdW1ucy5maW5kSW5kZXgoKGNvbDogR3JpZENvbHVtbikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGNvbC5maWVsZCA9PSAnZGVsZXRlRGVmYXVsdFJlcG9ydEZpbGUnO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKGJ1dHRvbkRlbGV0ZURlZmF1bHRSZXBvcnRGaWxlSW5kZXggIT0gLTEpIHtcclxuICAgICAgICB0aGlzLmRlZmF1bHRUZW1wbGF0ZUNvbHVtbnMuc3BsaWNlKFxyXG4gICAgICAgICAgYnV0dG9uRGVsZXRlRGVmYXVsdFJlcG9ydEZpbGVJbmRleCxcclxuICAgICAgICAgIDFcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL2hhbmRsZSBMaWZlY3ljbGUgSG9va3NcclxuICBvdmVycmlkZSBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuaXNFZGl0aW9uUGVyc29ubmFsaXNlID0gdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCdhZG1pbmlzdHJhdGlvbicpO1xyXG4gICAgdGhpcy5jaGVja0lmSXNEZXZNb2RlKCk7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgLy8gaWYgKHRoaXMub3RoZXJGb3JtTmFtZSApIHtcclxuICAgIHRoaXMuaXNGcm9tRm9ybSA9IHRydWU7XHJcbiAgICB0aGlzLmNvbHVtbnMuc3BsaWNlKDMsIDAsIHtcclxuICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgZmllbGQ6ICdwcmludCcsXHJcbiAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICBidXR0b25JY29uOiAncGkgcGktcHJpbnQnLFxyXG4gICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi1zZWNvbmRhcnknLFxyXG4gICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfcmVwb3J0X3ByaW50JyxcclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMub3RoZXJGb3JtTmFtZSAmJiB0aGlzLm90aGVyRm9ybU5hbWUgIT0gJ2FwcC1tYW5hZ2UtcmVwb3J0aW5nJykge1xyXG4gICAgICB0aGlzLmZvcm1OYW1lcyA9IFt7IGtleTogdGhpcy5vdGhlckZvcm1OYW1lLCB2YWx1ZTogdGhpcy5vdGhlckZvcm1OYW1lIH1dO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbnRpdHlJZCA9IHRoaXMuY29uZmlnLmRhdGE/LmlkO1xyXG4gICAgdGhpcy5jdXN0b21SZXBvcnRpbmdNb2RlID0gdGhpcy5jb25maWc/LmRhdGE/LmN1c3RvbVJlcG9ydGluZ01vZGU7XHJcbiAgICB0aGlzLmh0dHBNZXRob2RUeXBlID0gdGhpcy5jb25maWc/LmRhdGE/Lmh0dHBNZXRob2RUeXBlO1xyXG4gICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHModHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcblxyXG4gICAgaWYgKHRoaXMucmVmcmVzaEpvYlRpbWVPdXQpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVmcmVzaEpvYlRpbWVPdXQpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIGhhbmRsZSBldmVudHNcclxuICBhc3luYyBvblJlZnJlc2goKSB7XHJcbiAgICBhd2FpdCB0aGlzLl9yZWZyZXNoUmVwb3J0cyh0cnVlKTtcclxuICB9XHJcblxyXG4gIG9uUHJpbnREZWZhdWx0KGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm90aGVyRm9ybU5hbWUpIHtcclxuICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmdldERlZmF1bHRSZXBvcnQodGhpcy5vdGhlckZvcm1OYW1lKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAvLyBsZXQgZGVmYXVsdFJlcG9ydElkOiBzdHJpbmcgPSBkYXRhO1xyXG4gICAgICAgICAgdGhpcy5fdmlld1JlcG9ydChkYXRhLnVpZCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHsgfSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkZpbGVTZWxlY3RlZChldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBmaWxlOiBGaWxlID0gZXZlbnQuY3VycmVudEZpbGVzWzBdO1xyXG4gICAgdGhpcy50b1VwbG9hZEZpbGVEYXRhID0gZmlsZTtcclxuICB9XHJcblxyXG4gIG9uSW1wb3J0RmlsZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgLnVwbG9hZFJlcG9ydEZpbGUodGhpcy50b1VwbG9hZEZpbGVEYXRhLCB0aGlzLnJlcG9ydERpc2NyaW1pbmF0b3IpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IGFzeW5jIChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHMoKTtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19yZXBvcnRfdXBsb2FkZWRfc3VjY2Vzc2Z1bGx5J1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuZmlsZVVwbG9hZD8uY2xlYXIoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy9jYW5jZWwgYnV0dG9uIGNsaWNrXHJcbiAgb25DbGVhcihldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnRvVXBsb2FkRmlsZURhdGEgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvL2NhbmNlbCBidXR0b24gY2xpY2tcclxuICBvblJlbW92ZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnRvVXBsb2FkRmlsZURhdGEgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVCdXR0b25Db2x1bW5DbGlja2VkKGV2ZW50OiBCdXR0b25DbGlja1Jlc3VsdCk6IHZvaWQge1xyXG4gICAgc3dpdGNoIChldmVudC5maWVsZCkge1xyXG4gICAgICBjYXNlICdzZW5kJzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdzZW5kJyk7XHJcbiAgICAgICAgdGhpcy5fc2VuZFJlcG9ydChldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ2VkaXQnOiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2VkaXQnKTtcclxuICAgICAgICB0aGlzLl9lZGl0UmVwb3J0KGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAndmlldyc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygndmlldycpO1xyXG4gICAgICAgIHRoaXMuX3ZpZXdEYXNoYm9hcmR0KGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnZGVsZXRlJzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdkZWxldGUnKTtcclxuICAgICAgICB0aGlzLl9kZWxldGVSZXBvcnQoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdwcmludCc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygncHJpbnQnKTtcclxuICAgICAgICB0aGlzLl92aWV3UmVwb3J0KGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnZXhwb3J0Jzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdleHBvcnQnKTtcclxuICAgICAgICB0aGlzLl9leHBvcnRSZXBvcnQoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdkZWZhdWx0Jzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdkZWZhdWx0Jyk7XHJcbiAgICAgICAgdGhpcy5fc2V0RGVmYXVsdFJlcG9ydChldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ2ltcG9ydCc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnaW1wb3J0Jyk7XHJcbiAgICAgICAgdGhpcy5faW1wb3J0VG9SZXBvcnQoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdBZGRfRnJvbV9CdWlsdEluX1RlbXBsYXRlcyc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnQWRkX0Zyb21fQnVpbHRJbl9UZW1wbGF0ZXMnKTtcclxuICAgICAgICB0aGlzLl9hZGRGcm9tQnVpbHRJblRlbXBsYXRlcyhldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0FkZF9Ub19CdWlsdEluX1RlbXBsYXRlcyc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnQWRkX1RvX0J1aWx0SW5fVGVtcGxhdGVzJyk7XHJcbiAgICAgICAgdGhpcy5fYWRkVG9CdWlsdEluVGVtcGxhdGVzKGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAncHJldmlldyc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygncHJldmlldycpO1xyXG4gICAgICAgIHRoaXMucHJldmlld0J1aWx0SW5SZXBvcnRUZW1wbGF0ZShldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ01ha2VfZGVmYXVsdF9yZXBvcnRfbGF5b3V0Jzoge1xyXG4gICAgICAgIHRoaXMubWFrZVJlcG9ydERlZmF1bHRMYXlvdXQoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdkZWxldGVEZWZhdWx0UmVwb3J0RmlsZSc6IHtcclxuICAgICAgICB0aGlzLmRlbGV0ZURlZmF1bHRSZXBvcnRGaWxlKGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRlbGV0ZURlZmF1bHRSZXBvcnRGaWxlKGZpbGVOYW1lOiBhbnkpIHtcclxuICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKFxyXG4gICAgICBMb2NhbGl6YXRpb25LZXlzLmNvbmZpcm1EZWxldGUsXHJcbiAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgKHJlc3VsdDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0ID09IHRydWUpIHtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIGxldCBmb3JtTmFtZSA9IHRoaXMub3RoZXJGb3JtTmFtZSA/PyB0aGlzLkVESVRJT05fUEVSU09OTkFMSVNFO1xyXG4gICAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5kZWxldGVEZWZhdWx0UmVwb3J0VGVtcGxhdGVGaWxlKGZvcm1OYW1lLCBmaWxlTmFtZSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgbmV4dDogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHModHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uS2V5cy5kZWxldGVkU3VjY2Vzc2Z1bGx5XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvbkRlbGV0ZVNlbGVjdGVkUmVwb3J0cygpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKFxyXG4gICAgICBMb2NhbGl6YXRpb25LZXlzLmNvbmZpcm1EZWxldGUsXHJcbiAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgKHJlc3VsdDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHJlc3VsdCAmJlxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJlcG9ydHMgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJlcG9ydHMgIT0gdW5kZWZpbmVkXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgICAgICAgLmRlbGV0ZU11bHRpcGxlUmVwb3J0cyh0aGlzLnNlbGVjdGVkUmVwb3J0cylcclxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgbmV4dDogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25LZXlzLmRlbGV0ZWRTdWNjZXNzZnVsbHlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvbk5ld1JlcG9ydCgpOiB2b2lkIHtcclxuICAgIGlmIChcclxuICAgICAgKHRoaXMub3RoZXJGb3JtRW5kcG9pbnQgJiYgdGhpcy5vdGhlckZvcm1OYW1lKSB8fFxyXG4gICAgICB0aGlzLmlzRWRpdGlvblBlcnNvbm5hbGlzZVxyXG4gICAgKSB7XHJcbiAgICAgIGxldCByZXBvcnRUb1RlbXBsYXRlSWQ6IG51bWJlcjtcclxuICAgICAgbGV0IG1vZGFsU2l6ZSA9IE1vZGFsU2l6ZUVudW0uTGFyZ2U7XHJcbiAgICAgIGxldCBjb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XHJcbiAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgICAgd2lkdGg6IG1vZGFsU2l6ZS53aWR0aCxcclxuICAgICAgICBoZWlnaHQ6IG1vZGFsU2l6ZS5oZWlnaHQsXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgbW9kZTogTW9kZXMuY3JlYXRlLFxyXG4gICAgICAgICAgaXNFZGl0aW9uUGVyc29ubmFsaXNlOiB0aGlzLmlzRWRpdGlvblBlcnNvbm5hbGlzZSxcclxuICAgICAgICAgIGZyb21FbmRwb2ludDogdGhpcy5vdGhlckZvcm1FbmRwb2ludCxcclxuICAgICAgICAgIHJlcG9ydEJ1c2luZXNzQ2xhc3M6IHRoaXMuYnVzaW5lc3NDbGFzcyxcclxuICAgICAgICAgIGN1c3RvbVJlcG9ydGluZ01vZGU6IHRoaXMuY3VzdG9tUmVwb3J0aW5nTW9kZSxcclxuICAgICAgICB9LFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5fZGlhbG9nUmVmID0gdGhpcy5fdHNpTW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgICAgQWRkUmVwb3J0UG9wdXBDb21wb25lbnQsXHJcbiAgICAgICAgY29uZmlnXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLl9kaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHZhbCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzUmVwb3J0Rm9yRmljaGUpIHtcclxuICAgICAgICAgIHZhbC5lbmRQb2ludFZhbHVlID0gdmFsPy5lbmRQb2ludFZhbHVlPy5yZXBsYWNlQWxsKCd7aWR9JywgdGhpcy5lbnRpdHlJZCk7ICAgICAgICAgIFxyXG4gICAgICAgICAgdmFsLmVuZFBvaW50VmFsdWUgPSB2YWw/LmVuZFBvaW50VmFsdWU/LnJlcGxhY2VBbGwoJ3tidXNpbmVzc0NsYXNzfScsIHRoaXMuYnVzaW5lc3NDbGFzcyk7XHJcblxyXG4gICAgICAgICAgdmFsLmVuZFBvaW50S2V5ID0gdmFsPy5lbmRQb2ludEtleT8ucmVwbGFjZUFsbCgne2lkfScsIHRoaXMuZW50aXR5SWQpO1xyXG4gICAgICAgICAgdmFsLmVuZFBvaW50S2V5ID0gdmFsPy5lbmRQb2ludEtleT8ucmVwbGFjZUFsbCgne2J1c2luZXNzQ2xhc3N9JywgdGhpcy5idXNpbmVzc0NsYXNzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgICAgLmFkZFJlcG9ydFRvTW9kZWwoXHJcbiAgICAgICAgICAgIHRoaXMuX25ld1JlcG9ydFRvVGVtcGxhdGUoXHJcbiAgICAgICAgICAgICAgdmFsLnJlcG9ydFR5cGUsXHJcbiAgICAgICAgICAgICAgdmFsLnJlcG9ydE5hbWUsXHJcbiAgICAgICAgICAgICAgdmFsLmVuZFBvaW50VmFsdWUsXHJcbiAgICAgICAgICAgICAgdmFsLm1vZHVsZSxcclxuICAgICAgICAgICAgICB2YWwudHJpT3JkcmUsXHJcbiAgICAgICAgICAgICAgdmFsLnJlcG9ydE5hbWVBYnJlZ2UsXHJcbiAgICAgICAgICAgICAgdmFsLmRpc3BsYXlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IGFzeW5jICh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICByZXBvcnRUb1RlbXBsYXRlSWQgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICBsZXQgdXJsRGVzaWduZXI7XHJcbiAgICAgICAgICAgICAgbGV0IHRlbmFudFVpZCA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlkZW50aXR5TWFuYWdlclNlcnZpY2UucGFyc2VNeUF1dGhUb2tlbigpPy50ZW5hbnRVaWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vblJlZnJlc2goKVxyXG5cclxuICAgICAgICAgICAgICBpZiAodmFsLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgdXJsRGVzaWduZXIgPSBgJHtTZWdtZW50LnJlcG9ydGluZ1NlcnZpY2VCYXNlfS9yZXBvcnQtZGVzaWduZXIvJHtyZXBvcnRUb1RlbXBsYXRlSWR9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuRGFzaGJvYXJkKSB7XHJcbiAgICAgICAgICAgICAgICB1cmxEZXNpZ25lciA9IGAke1NlZ21lbnQuYXBwQmFzZUhyZWZ9LyR7dGhpcy5kYXNoYm9hcmRNb2R1bGVSb3V0ZX0vJHtNYW5hZ2VSZXBvcnRpbmdSb3V0ZXMuZGFzaGJvYXJkRGVzaWduZXJ9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QucmVwb3J0VG9UZW1wbGF0ZX09JHtyZXBvcnRUb1RlbXBsYXRlSWR9JiR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuUlRGKSB7XHJcbiAgICAgICAgICAgICAgICB1cmxEZXNpZ25lciA9IGAke1NlZ21lbnQucmVwb3J0aW5nU2VydmljZUJhc2V9L21haWxtZXJnZS8ke3JlcG9ydFRvVGVtcGxhdGVJZH0/JHtxdWVyeVBhcmFtTmFtZXNDb25zdC50ZW5hbnRVaWR9PSR7dGVuYW50VWlkfWA7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB3aW5kb3cub3Blbih1cmxEZXNpZ25lciwgJ19ibGFuaycpO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX3JlZGlyZWN0ZWRfdG9fbmV3X3JlcG9ydF9zdWNjZXNzZnVsbHknXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9jbG9zZU1vZGFsKHZhbCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xvc2VNb2RhbCh2YWw6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2RpYWxvZ1JlZikge1xyXG4gICAgICB0aGlzLl9kaWFsb2dSZWYuZGVzdHJveSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25Gb3JtQ2hhbmdlKCkge1xyXG4gICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHMoKTtcclxuICB9XHJcblxyXG4gIG9uSW1wb3J0RmlsZVRvUmVwb3J0TW9kYWxDYW5jZWxDbGljaygpOiB2b2lkIHtcclxuICAgIHRoaXMuX2hpZGVJbXBvcnRGaWxlVG9SZXBvcnREaWFsb2coKTtcclxuICB9XHJcblxyXG4gIG9uSW1wb3J0RmlsZVRvUmVwb3J0TW9kYWxTYXZlQ2xpY2soKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zaG93SW1wb3J0RmlsZVRvUmVwb3J0RGlhbG9nKCk7XHJcbiAgfVxyXG4gIC8vI3JlZ2lvbiBmaWxlIGltcG9ydFxyXG4gIG9uSW1wb3J0RmlsZVRvUmVwb3J0X0ZpbGVTZWxlY3RlZChldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBmaWxlOiBGaWxlID0gZXZlbnQuY3VycmVudEZpbGVzWzBdO1xyXG4gICAgdGhpcy50b1VwbG9hZFRvVXBkYXRlUmVwb3J0RmlsZURhdGEgPSBmaWxlO1xyXG4gIH1cclxuXHJcbiAgb25JbXBvcnRGaWxlVG9SZXBvcnRfSW1wb3J0RmlsZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFJlcG9ydFRvVXBkYXRlRnJvbUZpbGUpIHtcclxuICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgICAgLnVwZGF0ZVJlcG9ydExheW91dChcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZXBvcnRUb1VwZGF0ZUZyb21GaWxlLFxyXG4gICAgICAgICAgdGhpcy50b1VwbG9hZFRvVXBkYXRlUmVwb3J0RmlsZURhdGFcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiBhc3luYyAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHMoKTtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfcmVwb3J0X3VwbG9hZGVkX3N1Y2Nlc3NmdWxseSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5pbXBvcnRGaWxlVG9SZXBvcnRGaWxlVXBsb2FkPy5jbGVhcigpO1xyXG4gICAgICAgICAgICB0aGlzLl9oaWRlSW1wb3J0RmlsZVRvUmVwb3J0RGlhbG9nKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL2NhbmNlbCBidXR0b24gY2xpY2tcclxuICBvbkltcG9ydEZpbGVUb1JlcG9ydF9DbGVhcihldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnRvVXBsb2FkVG9VcGRhdGVSZXBvcnRGaWxlRGF0YSA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIC8vY2FuY2VsIGJ1dHRvbiBjbGlja1xyXG4gIG9uSW1wb3J0RmlsZVRvUmVwb3J0X1JlbW92ZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnRvVXBsb2FkVG9VcGRhdGVSZXBvcnRGaWxlRGF0YSA9IHVuZGVmaW5lZDtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gcHJpdmF0ZSBtZXRob2RzXHJcbiAgcHJpdmF0ZSBhc3luYyBfcmVmcmVzaFJlcG9ydHMocmVmcmVzaFJlcG9ydExpc3Q6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgbGV0IGZvcm1OYW1lID0gdGhpcy5vdGhlckZvcm1OYW1lXHJcbiAgICAgID8gdGhpcy5vdGhlckZvcm1OYW1lXHJcbiAgICAgIDogdGhpcy5FRElUSU9OX1BFUlNPTk5BTElTRTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgaXRlbXMgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuZ2V0UmVwb3J0cyhmb3JtTmFtZSwgdGhpcy5yZXBvcnREaXNjcmltaW5hdG9yKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnJlcG9ydHMgPSBpdGVtcy5tYXAoKHIpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4ucixcclxuICAgICAgICAgIHJlcG9ydFR5cGVOYW1lOlxyXG4gICAgICAgICAgICBNYW5hZ2VSZXBvcnRpbmdDb21wb25lbnQucmVwb3J0VHlwZUxhYmVsc1tyLnJlcG9ydFR5cGVdIHx8XHJcbiAgICAgICAgICAgICdVbmtub3duJyxcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVmcmVzaFJlcG9ydExpc3QpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICAvL2dldCBkZWZhdWx0IHJlcG9ydCB0ZW1wbGF0ZXMgZm9yIHRoaXMgZm9ybVxyXG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZS5nZXREZWZhdWx0UmVwb3J0VGVtcGxhdGUoZm9ybU5hbWUpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmRlZmF1bHRSZXBvcnRUZW1wbGF0ZURhdGEgPSByZXN1bHQ/LmRhdGE7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7IH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIF92aWV3UmVwb3J0KHVpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAvLyBpZiAodGhpcy5vdGhlckZvcm1FbmRwb2ludCAmJiB1aWQpIHtcclxuICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBsZXQgcmVwb3J0ID0gdGhpcy5yZXBvcnRzLmZpbmQoKHIpID0+IHIudWlkID09PSB1aWQpO1xyXG4gICAgaWYgKHJlcG9ydCA9PT0gdW5kZWZpbmVkIHx8IHJlcG9ydCA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgIC5hZGRSZXBvcnRUb1ByaW50KFxyXG4gICAgICAgIHRoaXMuX25ld1JlcG9ydFRvUHJpbnQodWlkLCByZXBvcnQucmVwb3J0VHlwZSwgcmVwb3J0Py5yZXN0RW5kcG9pbnQpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgbGV0IHJlcG9ydFRvVGVtcGxhdGVJZCA9IGRhdGEudWlkO1xyXG4gICAgICAgICAgbGV0IHVybERlc2lnbmVyO1xyXG4gICAgICAgICAgbGV0IHRlbmFudFVpZCA9XHJcbiAgICAgICAgICAgIHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5wYXJzZU15QXV0aFRva2VuKCk/LnRlbmFudFVpZDtcclxuICAgICAgICAgIGlmIChkYXRhLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuTGlzdCkge1xyXG4gICAgICAgICAgICB1cmxEZXNpZ25lciA9IGAke1NlZ21lbnQucmVwb3J0aW5nU2VydmljZUJhc2V9L3JlcG9ydC12aWV3ZXIvJHtyZXBvcnRUb1RlbXBsYXRlSWR9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChkYXRhLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuRGFzaGJvYXJkKSB7XHJcbiAgICAgICAgICAgIHVybERlc2lnbmVyID0gYCR7U2VnbWVudC5hcHBCYXNlSHJlZn0vJHt0aGlzLmRhc2hib2FyZE1vZHVsZVJvdXRlfS8ke01hbmFnZVJlcG9ydGluZ1JvdXRlcy5kYXNoYm9hcmREZXNpZ25lcn0/JHtxdWVyeVBhcmFtTmFtZXNDb25zdC5yZXBvcnRUb1ByaW50fT0ke3JlcG9ydFRvVGVtcGxhdGVJZH0mJHtxdWVyeVBhcmFtTmFtZXNDb25zdC50ZW5hbnRVaWR9PSR7dGVuYW50VWlkfWA7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgd2luZG93Lm9wZW4odXJsRGVzaWduZXIsICdfYmxhbmsnKTtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19yZWRpcmVjdGVkX3RvX3ByaW50X3JlcG9ydF9zdWNjZXNzZnVsbHknXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4geyB9LFxyXG4gICAgICB9KTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIF9zZW5kUmVwb3J0KHVpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgcmVwb3J0ID0gdGhpcy5yZXBvcnRzLmZpbmQoKHIpID0+IHIudWlkID09PSB1aWQpO1xyXG4gICAgaWYgKHJlcG9ydCA9PT0gdW5kZWZpbmVkIHx8IHJlcG9ydCA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgbW9kYWxTaXplID0gTW9kYWxTaXplRW51bS5YTWVkaXVtO1xyXG4gICAgbGV0IHNhdmVTdWJqZWN0OiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG4gICAgbGV0IGNvbmY6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XHJcbiAgICAgIGRhdGE6IHsgc2F2ZVN1YmplY3QgfSxcclxuICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBtb2RhbFNpemUud2lkdGgsXHJcbiAgICAgIGhlaWdodDogbW9kYWxTaXplLmhlaWdodCxcclxuICAgIH07XHJcbiAgICB0aGlzLl9kaWFsb2dSZWYgPSB0aGlzLl90c2lNb2RhbFNlcnZpY2Uub3BlbihcclxuICAgICAgVHNpU2VuZE1haWxDb21wb25lbnQsXHJcbiAgICAgIGNvbmZcclxuICAgICk7XHJcbiAgICBzYXZlU3ViamVjdC5zdWJzY3JpYmUoKHZhbDogRW1haWxJbmZvcm1hdGlvbikgPT4ge1xyXG4gICAgICBpZiAoIXZhbCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXZhbC50b0FkZHJlc3MpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICBpZiAoIXZhbC5zdWJqZWN0KSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgbGV0IHJlcG9ydFRvUHJpbnQgPSB0aGlzLl9uZXdSZXBvcnRUb1ByaW50KFxyXG4gICAgICAgIHVpZCxcclxuICAgICAgICByZXBvcnQhLnJlcG9ydFR5cGUsXHJcbiAgICAgICAgcmVwb3J0Py5yZXN0RW5kcG9pbnRcclxuICAgICAgKVxyXG4gICAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgIC5leHBvcnRSZXBvcnRGaWxlVG9QZGYocmVwb3J0VG9QcmludClcclxuICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuZXh0OiBhc3luYyAoYmxvYikgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG5ld0ZpbGUgPSBuZXcgRmlsZShbYmxvYl0sICdSZXBvcnQucGRmJywge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYmxvYi50eXBlLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICBsZXQgYXR0YWNobWVudHM6IEZpbGVbXSA9IFtdO1xyXG4gICAgICAgICAgICAgIGF0dGFjaG1lbnRzLnB1c2gobmV3RmlsZSlcclxuICAgICAgICAgICAgICB0aGlzLl9tYWlsaW5nU2VydmljZVxyXG4gICAgICAgICAgICAgICAgLnNlbmRNYWlsKFxyXG4gICAgICAgICAgICAgICAgICB2YWwudG9BZGRyZXNzISxcclxuICAgICAgICAgICAgICAgICAgdmFsLnN1YmplY3QhLFxyXG4gICAgICAgICAgICAgICAgICB2YWwubWVzc2FnZSA/PyBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICBhdHRhY2htZW50cyxcclxuICAgICAgICAgICAgICAgICAgdmFsLmNjQWRkcmVzc1xyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmluZm8oXHJcbiAgICAgICAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25LZXlzLnNlbnRTdWNjZXNzRnVsbHlcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZS5zaG93RXJyb3JNZXNzYWdlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGRvd25sb2FkaW5nIHRoZSBQREYnLCBlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfcmVkaXJlY3RlZF90b19wcmludF9yZXBvcnRfc3VjY2Vzc2Z1bGx5J1xyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9kaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLl9jbG9zZU1vZGFsKHZhbCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIF9lZGl0UmVwb3J0KHVpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgbGV0IHJlcG9ydCA9IHRoaXMucmVwb3J0cy5maW5kKChyKSA9PiByLnVpZCA9PT0gdWlkKTtcclxuXHJcbiAgICBpZiAocmVwb3J0ID09PSB1bmRlZmluZWQgfHwgcmVwb3J0ID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAuYWRkUmVwb3J0VG9FZGl0VGVtcGxhdGUoXHJcbiAgICAgICAgdGhpcy5fbmV3UmVwb3J0VG9FZGl0VGVtcGxhdGUoXHJcbiAgICAgICAgICB1aWQsXHJcbiAgICAgICAgICByZXBvcnQucmVwb3J0VHlwZSxcclxuICAgICAgICAgIHJlcG9ydD8ucmVzdEVuZHBvaW50LFxyXG4gICAgICAgICAgcmVwb3J0Py5tb2R1bGUsXHJcbiAgICAgICAgICByZXBvcnQ/Lm9yZGVyLFxyXG4gICAgICAgICAgcmVwb3J0Py5yZXBvcnROYW1lLFxyXG4gICAgICAgICAgcmVwb3J0Py5zaG9ydE5hbWUsXHJcbiAgICAgICAgICByZXBvcnQ/LmRpc3BsYXlcclxuICAgICAgICApXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHZhbHVlKTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5pc1JlcG9ydEZvckZpY2hlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGd1aWRSZWdleCA9IC9bMC05YS1mQS1GLV17MzZ9L2c7XHJcbiAgICAgICAgICAgIHZhbHVlLnJlc3RFbmRwb2ludCA9IHZhbHVlPy5yZXN0RW5kcG9pbnQ/LnJlcGxhY2VBbGwoXHJcbiAgICAgICAgICAgICAgZ3VpZFJlZ2V4LFxyXG4gICAgICAgICAgICAgICd7aWR9J1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGxldCBjb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XHJcbiAgICAgICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICB3aWR0aDogTW9kYWxTaXplRW51bS5MYXJnZS53aWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBNb2RhbFNpemVFbnVtLkxhcmdlLmhlaWdodCxcclxuICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcclxuICAgICAgICAgICAgICBtb2RlOiBNb2Rlcy5lZGl0LFxyXG4gICAgICAgICAgICAgIGlzRWRpdGlvblBlcnNvbm5hbGlzZTogdGhpcy5pc0VkaXRpb25QZXJzb25uYWxpc2UsXHJcbiAgICAgICAgICAgICAgZnJvbUVuZHBvaW50OiB0aGlzLm90aGVyRm9ybUVuZHBvaW50XHJcbiAgICAgICAgICAgICAgICA/IHRoaXMub3RoZXJGb3JtRW5kcG9pbnRcclxuICAgICAgICAgICAgICAgIDogcmVwb3J0Py5yZXN0RW5kcG9pbnQsXHJcbiAgICAgICAgICAgICAgcmVwb3J0QnVzaW5lc3NDbGFzczogdGhpcy5idXNpbmVzc0NsYXNzLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZiA9IHRoaXMuX3RzaU1vZGFsU2VydmljZS5vcGVuKFxyXG4gICAgICAgICAgICBBZGRSZXBvcnRQb3B1cENvbXBvbmVudCxcclxuICAgICAgICAgICAgY29uZmlnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5fZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBsZXQgbW9kZWw6IFJlcG9ydFRvRWRpdFRlbXBsYXRlUGF5bG9hZCA9IHtcclxuICAgICAgICAgICAgICByZXBvcnRUZW1wbGF0ZVVpZDogdWlkLFxyXG4gICAgICAgICAgICAgIHJlcG9ydE5hbWU6IHZhbC5yZXBvcnROYW1lLFxyXG4gICAgICAgICAgICAgIHJlc3RFbmRwb2ludDogdGhpcy5pc1JlcG9ydEZvckZpY2hlXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMucmVwb3J0aW5nU2VydmljZS5pbnNlcnROZXdVaWRJblJlc3RFbmRQb2ludChcclxuICAgICAgICAgICAgICAgICAgdmFsPy5lbmRQb2ludFZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmlkXHJcbiAgICAgICAgICAgICAgICApID8/IHRoaXMub3RoZXJGb3JtRW5kcG9pbnRcclxuICAgICAgICAgICAgICAgIDogdGhpcy5vdGhlckZvcm1FbmRwb2ludCxcclxuICAgICAgICAgICAgICBtb2R1bGU6IHZhbC5tb2R1bGUsXHJcbiAgICAgICAgICAgICAgb3JkZXI6IHZhbC50cmlPcmRyZSxcclxuICAgICAgICAgICAgICBzaG9ydE5hbWU6IHZhbC5yZXBvcnROYW1lQWJyZWdlLFxyXG4gICAgICAgICAgICAgIGRpc3BsYXk6IHZhbC5kaXNwbGF5LFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmVkaXRSZXBvcnRUb0VkaXRUZW1wbGF0ZShtb2RlbCkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG5leHQgOiBhc3luYyAodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vblJlZnJlc2goKVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgcmVwb3J0VG9UZW1wbGF0ZUlkID0gdmFsdWUudWlkO1xyXG4gICAgICAgICAgICBsZXQgdXJsRGVzaWduZXI7XHJcbiAgICAgICAgICAgIGxldCB0ZW5hbnRVaWQgPVxyXG4gICAgICAgICAgICAgIHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5wYXJzZU15QXV0aFRva2VuKCk/LnRlbmFudFVpZDtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYW5yZWRpcmVjdCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjYW5SZWRpcmVjdCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHZhbHVlLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuTGlzdCkge1xyXG4gICAgICAgICAgICAgIHVybERlc2lnbmVyID0gYCR7U2VnbWVudC5yZXBvcnRpbmdTZXJ2aWNlQmFzZX0vcmVwb3J0LWRlc2lnbmVyLWVkaXQvJHtyZXBvcnRUb1RlbXBsYXRlSWR9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuRGFzaGJvYXJkKSB7XHJcbiAgICAgICAgICAgICAgdXJsRGVzaWduZXIgPSBgJHtTZWdtZW50LmFwcEJhc2VIcmVmfS8ke3RoaXMuZGFzaGJvYXJkTW9kdWxlUm91dGV9LyR7TWFuYWdlUmVwb3J0aW5nUm91dGVzLmRhc2hib2FyZERlc2lnbmVyfT8ke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnJlcG9ydFRvRWRpdH09JHtyZXBvcnRUb1RlbXBsYXRlSWR9JiR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuUlRGKSB7XHJcbiAgICAgICAgICAgICAgdXJsRGVzaWduZXIgPSBgJHtTZWdtZW50LnJlcG9ydGluZ1NlcnZpY2VCYXNlfS9tYWlsbWVyZ2UtZWRpdC8ke3JlcG9ydFRvVGVtcGxhdGVJZH0/JHtxdWVyeVBhcmFtTmFtZXNDb25zdC50ZW5hbnRVaWR9PSR7dGVuYW50VWlkfWA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjYW5yZWRpcmVjdCAmJiBKU09OLnBhcnNlKGNhbnJlZGlyZWN0KSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgd2luZG93Lm9wZW4odXJsRGVzaWduZXIsICdfYmxhbmsnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfcmVkaXJlY3RlZF90b19lZGl0X3JlcG9ydF9zdWNjZXNzZnVsbHknXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGVsZXRlUmVwb3J0KHVpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybShcclxuICAgICAgTG9jYWxpemF0aW9uS2V5cy5jb25maXJtRGVsZXRlLFxyXG4gICAgICB1bmRlZmluZWQsXHJcbiAgICAgIChyZXN1bHQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0ICYmIHVpZCAhPSBudWxsICYmIHVpZCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZS5kZWxldGVSZXBvcnQodWlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25LZXlzLmRlbGV0ZWRTdWNjZXNzZnVsbHlcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlZnJlc2hSZXBvcnRzKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0RGVmYXVsdFJlcG9ydChpZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybShcclxuICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfY29uZmlybV9zZXRfZGVmYXVsdF9yZXBvcnRfZmlsZScsXHJcbiAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgKHJlc3VsdDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQgJiYgaWQgIT0gbnVsbCAmJiBpZCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgICAgICAuc2V0RGVmYXVsdFJlcG9ydChpZCwgdGhpcy5yZXBvcnREaXNjcmltaW5hdG9yKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICBuZXh0OiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uS2V5cy5zYXZlZFN1Y2Nlc3NmdWxseVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlZnJlc2hSZXBvcnRzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9leHBvcnRSZXBvcnQodWlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh1aWQpIHtcclxuICAgICAgbGV0IHJlcG9ydE5hbWU6IHN0cmluZyA9ICdmaWxlLW5hbWUuanNvbic7XHJcbiAgICAgIGxldCByZXBvcnQgPSB0aGlzLnJlcG9ydHMuZmluZCgocikgPT4gci51aWQgPT0gdWlkKTtcclxuICAgICAgaWYgKHJlcG9ydCkge1xyXG4gICAgICAgIHJlcG9ydE5hbWUgPSByZXBvcnQubmFtZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZS5leHBvcnRSZXBvcnRGaWxlKHVpZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGxldCBmaWxlID0gbmV3IEJsb2IoW3Jlc3BvbnNlXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vanNvbicgfSk7XHJcbiAgICAgICAgICB2YXIgZmlsZVVSTCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7XHJcbiAgICAgICAgICBsZXQgcmVwb3J0Um91dGUgPSBmaWxlVVJMO1xyXG4gICAgICAgICAgdmFyIGRvd25sb2FkTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICAgIGRvd25sb2FkTGluay5kb3dubG9hZCA9IHJlcG9ydE5hbWU7XHJcbiAgICAgICAgICBkb3dubG9hZExpbmsuaHJlZiA9IHJlcG9ydFJvdXRlO1xyXG4gICAgICAgICAgZG93bmxvYWRMaW5rLmNsaWNrKCk7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfcmVwb3J0X2V4cG9ydGVkX3N1Y2Nlc3NmdWxseSdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW1wb3J0VG9SZXBvcnQoaWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKGlkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSZXBvcnRUb1VwZGF0ZUZyb21GaWxlID0gaWQ7XHJcbiAgICAgIHRoaXMuX3Nob3dJbXBvcnRGaWxlVG9SZXBvcnREaWFsb2coKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX25ld0pzb25EYXRhQ29ubmVjdGlvbigpOiBKc29uRGF0YUNvbm5lY3Rpb24ge1xyXG4gICAgaWYgKHRoaXMub3RoZXJGb3JtRW5kcG9pbnQgIT0gbnVsbCAmJiB0aGlzLm90aGVyRm9ybUVuZHBvaW50ICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBsZXQgbmV3SnNvbkRhdGFDb25uZWN0aW9uOiBKc29uRGF0YUNvbm5lY3Rpb24gPSB7XHJcbiAgICAgICAgbmFtZTogYCR7dGhpcy5vdGhlckZvcm1OYW1lfS1Kc29uRFNgLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiB1bmRlZmluZWQsXHJcbiAgICAgICAgdXJpOiB0aGlzLm90aGVyRm9ybUVuZHBvaW50LFxyXG4gICAgICAgIGh0dHBSZXF1ZXN0Q29udGVudDogdW5kZWZpbmVkLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgcmV0dXJuIG5ld0pzb25EYXRhQ29ubmVjdGlvbjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IEVycm9yKCdzb21lIG9mIHRoZSByZXF1aXJlZCBwcm9wZXJ0aWVzIDogdXJpIGhhdmUgbm90IGJlZW4gc2V0ICEnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX25ld1JlcG9ydFRvUHJpbnQoXHJcbiAgICB1aWQ6IHN0cmluZyxcclxuICAgIHJlcG9ydFR5cGU6IG51bWJlcixcclxuICAgIHJlc3RFbmRwb2ludD86IHN0cmluZyxcclxuICAgIG1vZHVsZT86IHN0cmluZyxcclxuICAgIG9yZGVyPzogbnVtYmVyLFxyXG4gICAgc2hvcnROYW1lPzogc3RyaW5nLFxyXG4gICAgZGlzcGxheT86IGJvb2xlYW5cclxuICApOiBSZXBvcnRUb1ByaW50IHtcclxuICAgIGxldCB0b2tlbiA9IHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5nZXRBdXRoVG9rZW4oKTtcclxuICAgIGxldCB1c2VybmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkID1cclxuICAgICAgdGhpcy5pZGVudGl0eU1hbmFnZXJTZXJ2aWNlLnBhcnNlTXlBdXRoVG9rZW4oKS5uYW1lO1xyXG4gICAgaWYgKHVzZXJuYW1lKSB7XHJcbiAgICAgIGlmICh1aWQgJiYgLyp0aGlzLm90aGVyRm9ybUVuZHBvaW50ICYmIHRoaXMub3RoZXJGb3JtTmFtZSAmJiovIHRva2VuKSB7XHJcbiAgICAgICAgbGV0IG5ld1JlcG9ydFRvUHJpbnQ6IFJlcG9ydFRvUHJpbnQgPSB7XHJcbiAgICAgICAgICByZXBvcnRUZW1wbGF0ZVVpZDogdWlkLFxyXG4gICAgICAgICAgcmVzdEVuZHBvaW50OiB0aGlzLmlzUmVwb3J0Rm9yRmljaGVcclxuICAgICAgICAgICAgPyB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuaW5zZXJ0TmV3VWlkSW5SZXN0RW5kUG9pbnQoXHJcbiAgICAgICAgICAgICAgcmVzdEVuZHBvaW50LFxyXG4gICAgICAgICAgICAgIHRoaXMuaWRcclxuICAgICAgICAgICAgKSA/PyB0aGlzLm90aGVyRm9ybUVuZHBvaW50XHJcbiAgICAgICAgICAgIDogdGhpcy5vdGhlckZvcm1FbmRwb2ludCxcclxuICAgICAgICAgIHJlcXVlc3REYXRhOiAhdGhpcy5jdXN0b21SZXBvcnRpbmdNb2RlXHJcbiAgICAgICAgICAgID8gdGhpcy5mb3JtRW5kcG9pbnRCb2R5XHJcbiAgICAgICAgICAgIDogdGhpcy5yZXF1ZXN0RGF0YSxcclxuICAgICAgICAgIGZvcm1OYW1lOiB0aGlzLm90aGVyRm9ybU5hbWUsXHJcbiAgICAgICAgICByZXBvcnRUeXBlOiByZXBvcnRUeXBlLFxyXG4gICAgICAgICAgdXNlcm5hbWU6IHVzZXJuYW1lLFxyXG4gICAgICAgICAgdXNlclRva2VuOiByZXBvcnRUeXBlID09IFRzaVJlcG9ydFR5cGUuRGFzaGJvYXJkID8gdW5kZWZpbmVkIDogdG9rZW4sXHJcbiAgICAgICAgICBpc1BhZ2VkOiB0aGlzLmlzRm9ybUVuZHBvaW50UGFnZWQgPT0gdHJ1ZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgIGh0bWxGaWx0ZXJzVGV4dDogdGhpcy5maWx0ZXJzSHRtbFRlbXBsYXRlLFxyXG4gICAgICAgICAgb3B0aW9uYWxFbmRwb2ludHNKc29uOiB0aGlzLm9wdGlvbmFsRW5kcG9pbnRzLFxyXG4gICAgICAgICAgbW9kdWxlOiBtb2R1bGUsXHJcbiAgICAgICAgICBvcmRlcjogb3JkZXIsXHJcbiAgICAgICAgICBzaG9ydE5hbWU6IHNob3J0TmFtZSxcclxuICAgICAgICAgIGRpc3BsYXk6IGRpc3BsYXksXHJcbiAgICAgICAgICBodHRwTWV0aG9kVHlwZTogdGhpcy5odHRwTWV0aG9kVHlwZSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3UmVwb3J0VG9QcmludDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aHJvdyBFcnJvcihcclxuICAgICAgICAgICdzb21lIG9mIHRoZSByZXF1aXJlZCBwcm9wZXJ0aWVzIDogdXNlciB0b2tlbiwgZm9ybU5hbWUsIGZvcm1FbmRwb2ludCBvciBzZWxlY3RlZFJlcG9ydCBoYXZlIG5vdCBiZWVuIHNldCAhJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IEVycm9yKFwicHJvcGVydHkgJ1VzZXJOYW1lICcgb2YgY3VycmVudCB1c2VyIGhhdmUgbm90IGJlZW4gc2V0ICFcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9uZXdSZXBvcnRUb1RlbXBsYXRlKFxyXG4gICAgcmVwb3J0VHlwZTogVHNpUmVwb3J0VHlwZSxcclxuICAgIHJlcG9ydE5hbWU6IHN0cmluZyxcclxuICAgIHJlc3RFbmRwb2ludDogc3RyaW5nLFxyXG4gICAgbW9kdWxlOiBzdHJpbmcsXHJcbiAgICBvcmRlcjogbnVtYmVyLFxyXG4gICAgc2hvcnROYW1lOiBzdHJpbmcsXHJcbiAgICBkaXNwbGF5OiBib29sZWFuXHJcbiAgKTogUmVwb3J0VG9UZW1wbGF0ZSB7XHJcbiAgICBsZXQgdG9rZW4gPSB0aGlzLmlkZW50aXR5TWFuYWdlclNlcnZpY2UuZ2V0QXV0aFRva2VuKCk7XHJcblxyXG4gICAgaWYgKHRoaXMub3RoZXJGb3JtRW5kcG9pbnQgJiYgdGhpcy5vdGhlckZvcm1OYW1lICYmIHRva2VuKSB7XHJcbiAgICAgIGxldCByZXBvcnRUb1RlbXBsYXRlOiBSZXBvcnRUb1RlbXBsYXRlID0ge1xyXG4gICAgICAgIHJlc3RFbmRwb2ludDogcmVzdEVuZHBvaW50LFxyXG4gICAgICAgIHJlcXVlc3REYXRhOiAhdGhpcy5jdXN0b21SZXBvcnRpbmdNb2RlXHJcbiAgICAgICAgICA/IHRoaXMuZm9ybUVuZHBvaW50Qm9keVxyXG4gICAgICAgICAgOiB0aGlzLnJlcXVlc3REYXRhLFxyXG4gICAgICAgIGZvcm1FbnRpdHk6IHRoaXMub3RoZXJGb3JtTmFtZSwgLy90aGlzLmdldEZvcm1OYW1lKHRoaXMub3RoZXJGb3JtTmFtZSksIC8vdGhpcy5vdGhlckZvcm1OYW1lLFxyXG4gICAgICAgIHVzZXJUb2tlbjogcmVwb3J0VHlwZSA9PSBUc2lSZXBvcnRUeXBlLkRhc2hib2FyZCA/IHVuZGVmaW5lZCA6IHRva2VuLFxyXG4gICAgICAgIHJlcG9ydE5hbWU6IHJlcG9ydE5hbWUsXHJcbiAgICAgICAgaXNQYWdlZDogdGhpcy5pc0Zvcm1FbmRwb2ludFBhZ2VkID09IHRydWUgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgcmVwb3J0VHlwZTogcmVwb3J0VHlwZSwgLy90aGlzLmlzRm9ybUVuZHBvaW50UGFnZWQgPT0gdHJ1ZSA/IFRzaVJlcG9ydFR5cGUuTGlzdCA6IFRzaVJlcG9ydFR5cGUuRm9ybSxcclxuICAgICAgICBvcHRpb25hbEVuZHBvaW50c0pzb246IHRoaXMub3B0aW9uYWxFbmRwb2ludHMsXHJcbiAgICAgICAgaHRtbEZpbHRlcnNUZXh0OiB0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGUsXHJcbiAgICAgICAgbW9kdWxlOiBtb2R1bGUsXHJcbiAgICAgICAgb3JkZXI6IG9yZGVyLFxyXG4gICAgICAgIHNob3J0TmFtZTogc2hvcnROYW1lLFxyXG4gICAgICAgIGRpc3BsYXk6IGRpc3BsYXksXHJcbiAgICAgICAgZGVzY3JpbWluYXRvclZhbHVlOiB0aGlzLnJlcG9ydERpc2NyaW1pbmF0b3IsXHJcbiAgICAgICAgaHR0cE1ldGhvZFR5cGU6IHRoaXMuaHR0cE1ldGhvZFR5cGUsXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnNvbGUubG9nKHJlcG9ydFRvVGVtcGxhdGUpO1xyXG4gICAgICByZXR1cm4gcmVwb3J0VG9UZW1wbGF0ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCByZXBvcnRUb1RlbXBsYXRlOiBSZXBvcnRUb1RlbXBsYXRlID0ge1xyXG4gICAgICAgIHJlc3RFbmRwb2ludDpcclxuICAgICAgICAgIHRoaXMuaXNSZXBvcnRGb3JGaWNoZSB8fCB0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGVcclxuICAgICAgICAgICAgPyByZXN0RW5kcG9pbnQhXHJcbiAgICAgICAgICAgIDogdGhpcy5vdGhlckZvcm1FbmRwb2ludCEsXHJcbiAgICAgICAgcmVxdWVzdERhdGE6ICF0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGVcclxuICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBzb3J0aW5nOiBbeyBwcm9wZXJ0eTogJ1VJRCcsIG9yZGVyOiAnQVNDJyB9XSxcclxuICAgICAgICAgICAgZ2V0QWxsRGF0YTogdHJ1ZSxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICA6IHRoaXMucmVxdWVzdERhdGEsXHJcbiAgICAgICAgZm9ybUVudGl0eTogJycsXHJcbiAgICAgICAgdXNlclRva2VuOiByZXBvcnRUeXBlID09IFRzaVJlcG9ydFR5cGUuRGFzaGJvYXJkID8gdW5kZWZpbmVkIDogdG9rZW4hLFxyXG4gICAgICAgIHJlcG9ydE5hbWU6IHJlcG9ydE5hbWUsXHJcbiAgICAgICAgaXNQYWdlZDogdGhpcy5pc0Zvcm1FbmRwb2ludFBhZ2VkID09IHRydWUgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgcmVwb3J0VHlwZTogcmVwb3J0VHlwZSwgLy90aGlzLmlzRm9ybUVuZHBvaW50UGFnZWQgPT0gdHJ1ZSA/IFRzaVJlcG9ydFR5cGUuTGlzdCA6IFRzaVJlcG9ydFR5cGUuRm9ybSxcclxuICAgICAgICBvcHRpb25hbEVuZHBvaW50c0pzb246IHRoaXMub3B0aW9uYWxFbmRwb2ludHMsXHJcbiAgICAgICAgaHRtbEZpbHRlcnNUZXh0OiB0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGUsXHJcbiAgICAgICAgbW9kdWxlOiBtb2R1bGUsXHJcbiAgICAgICAgb3JkZXI6IG9yZGVyLFxyXG4gICAgICAgIHNob3J0TmFtZTogc2hvcnROYW1lLFxyXG4gICAgICAgIGRpc3BsYXk6IGRpc3BsYXksXHJcbiAgICAgIH07XHJcblxyXG4gICAgICByZXR1cm4gcmVwb3J0VG9UZW1wbGF0ZTtcclxuICAgICAgLy8gdGhyb3cgRXJyb3IoJ3NvbWUgb2YgdGhlIHJlcXVpcmVkIHByb3BlcnRpZXMgOiB1c2VyIHRva2VuLCBmb3JtTmFtZSBvciBmb3JtRW5kcG9pbnQgaGF2ZSBub3QgYmVlbiBzZXQgIScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbmV3UmVwb3J0VG9FZGl0VGVtcGxhdGUoXHJcbiAgICB1aWQ6IHN0cmluZyxcclxuICAgIHJlcG9ydFR5cGU6IFRzaVJlcG9ydFR5cGUsXHJcbiAgICByZXN0RW5kUG9pbnQ/OiBzdHJpbmcsXHJcbiAgICBtb2R1bGU/OiBzdHJpbmcsXHJcbiAgICBvcmRlcj86IG51bWJlcixcclxuICAgIHJlcG9ydE5hbWU/OiBzdHJpbmcsXHJcbiAgICBzaG9ydE5hbWU/OiBzdHJpbmcsXHJcbiAgICBkaXNwbGF5PzogYm9vbGVhblxyXG4gICk6IFJlcG9ydFRvRWRpdFRlbXBsYXRlIHtcclxuICAgIGxldCB0b2tlbiA9IHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5nZXRBdXRoVG9rZW4oKTtcclxuICAgIGxldCB1c2VybmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkID1cclxuICAgICAgdGhpcy5pZGVudGl0eU1hbmFnZXJTZXJ2aWNlLnBhcnNlTXlBdXRoVG9rZW4oKS5uYW1lO1xyXG5cclxuICAgIGlmICh1c2VybmFtZSkge1xyXG4gICAgICBpZiAodWlkICYmIC8qdGhpcy5vdGhlckZvcm1FbmRwb2ludCAmJiB0aGlzLm90aGVyRm9ybU5hbWUgJiYqLyB0b2tlbikge1xyXG4gICAgICAgIGxldCByZXBvcnRUb0VkaXRUZW1wbGF0ZTogUmVwb3J0VG9FZGl0VGVtcGxhdGUgPSB7XHJcbiAgICAgICAgICByZXN0RW5kcG9pbnQ6IHRoaXMuaXNSZXBvcnRGb3JGaWNoZVxyXG4gICAgICAgICAgICA/IHRoaXMucmVwb3J0aW5nU2VydmljZS5pbnNlcnROZXdVaWRJblJlc3RFbmRQb2ludChcclxuICAgICAgICAgICAgICByZXN0RW5kUG9pbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5pZFxyXG4gICAgICAgICAgICApID8/IHRoaXMub3RoZXJGb3JtRW5kcG9pbnRcclxuICAgICAgICAgICAgOiB0aGlzLm90aGVyRm9ybUVuZHBvaW50LFxyXG4gICAgICAgICAgcmVxdWVzdERhdGE6ICF0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGVcclxuICAgICAgICAgICAgPyB0aGlzLmZvcm1FbmRwb2ludEJvZHlcclxuICAgICAgICAgICAgOiB0aGlzLnJlcXVlc3REYXRhLFxyXG4gICAgICAgICAgZm9ybU5hbWU6IHRoaXMub3RoZXJGb3JtTmFtZSwgLy8gdGhpcy5nZXRGb3JtTmFtZSh0aGlzLm90aGVyRm9ybU5hbWUhKSxcclxuICAgICAgICAgIHJlcG9ydFRlbXBsYXRlVWlkOiB1aWQsXHJcbiAgICAgICAgICByZXBvcnRUeXBlOiByZXBvcnRUeXBlLFxyXG4gICAgICAgICAgdXNlcm5hbWU6IHVzZXJuYW1lLFxyXG4gICAgICAgICAgdXNlclRva2VuOiByZXBvcnRUeXBlID09IFRzaVJlcG9ydFR5cGUuRGFzaGJvYXJkID8gdW5kZWZpbmVkIDogdG9rZW4sXHJcbiAgICAgICAgICBpc1BhZ2VkOiB0aGlzLmlzRm9ybUVuZHBvaW50UGFnZWQgPT0gdHJ1ZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgIG9wdGlvbmFsRW5kcG9pbnRzSnNvbjogdGhpcy5vcHRpb25hbEVuZHBvaW50cyxcclxuICAgICAgICAgIGh0bWxGaWx0ZXJzVGV4dDogdGhpcy5maWx0ZXJzSHRtbFRlbXBsYXRlLFxyXG4gICAgICAgICAgbW9kdWxlOiBtb2R1bGUsXHJcbiAgICAgICAgICBvcmRlcjogb3JkZXIsXHJcbiAgICAgICAgICByZXBvcnROYW1lOiByZXBvcnROYW1lLFxyXG4gICAgICAgICAgc2hvcnROYW1lOiBzaG9ydE5hbWUsXHJcbiAgICAgICAgICBkaXNwbGF5OiBkaXNwbGF5LFxyXG4gICAgICAgICAgaHR0cE1ldGhvZFR5cGU6IHRoaXMuaHR0cE1ldGhvZFR5cGUsXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gcmVwb3J0VG9FZGl0VGVtcGxhdGU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3IoXHJcbiAgICAgICAgICAnc29tZSBvZiB0aGUgcmVxdWlyZWQgcHJvcGVydGllcyA6IHVzZXIgdG9rZW4gb3Igc2VsZWN0ZWRSZXBvcnQgaGF2ZSBub3QgYmVlbiBzZXQgISdcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aHJvdyBFcnJvcihcInByb3BlcnR5ICdVc2VyTmFtZSAnIG9mIGN1cnJlbnQgdXNlciBoYXZlIG5vdCBiZWVuIHNldCAhXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVmcmVzaFJlcG9ydHNKb2IoKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLndhcm4oJ1JlZnJlc2ggUmVwb3J0cyBKb2IgYXQgOiAnLCBuZXcgRGF0ZSgpKTtcclxuICAgIC8vXHJcbiAgICBpZiAodGhpcy5vdGhlckZvcm1OYW1lICE9IG51bGwgJiYgdGhpcy5vdGhlckZvcm1OYW1lICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgICAuZ2V0UmVwb3J0cyh0aGlzLm90aGVyRm9ybU5hbWUsIHRoaXMucmVwb3J0RGlzY3JpbWluYXRvcilcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChpdGVtcykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlcG9ydHMgPSBpdGVtcztcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXZpb3VzRm9ybU5hbWUgIT0gdGhpcy5vdGhlckZvcm1OYW1lKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25LZXlzLnJldHJpZXZlZFN1Y2Nlc3NmdWxseVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1OYW1lID0gdGhpcy5vdGhlckZvcm1OYW1lID8/ICcnO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hKb2JUaW1lT3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFJlcG9ydHNKb2IoKTtcclxuICAgICAgICAgICAgfSwgMTAwMDApO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoSm9iVGltZU91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hSZXBvcnRzSm9iKCk7XHJcbiAgICAgICAgICAgIH0sIDEwMDAwKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4geyB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZWZyZXNoSm9iVGltZU91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX3JlZnJlc2hSZXBvcnRzSm9iKCk7XHJcbiAgICAgIH0sIDEwMDAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Nob3dJbXBvcnRGaWxlVG9SZXBvcnREaWFsb2coKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzVXBkYXRlUmVwb3J0RnJvbUZpbGVEaWFsb2dWaXNpYmxlID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hpZGVJbXBvcnRGaWxlVG9SZXBvcnREaWFsb2coKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzVXBkYXRlUmVwb3J0RnJvbUZpbGVEaWFsb2dWaXNpYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLnRvVXBsb2FkVG9VcGRhdGVSZXBvcnRGaWxlRGF0YSA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIC8vIGdldERlZmF1bHRSZXBvcnRUZW1wbGF0ZSgpe1xyXG4gIHByZXZpZXdCdWlsdEluUmVwb3J0VGVtcGxhdGUodGVtcGxhdGVOYW1lOiBzdHJpbmcpIHtcclxuICAgIGxldCB1cmw6IHN0cmluZyA9IGAke1NlZ21lbnQucmVwb3J0aW5nU2VydmljZUJhc2V9L3JlcG9ydC12aWV3ZXIvJHt0aGlzLm90aGVyRm9ybU5hbWV9LyR7dGVtcGxhdGVOYW1lfWA7XHJcbiAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcclxuICB9XHJcblxyXG4gIC8vYWRkIGEgcmVwb3J0IGZyb20gdGhlIGJ1aWx0LWluIG1vZGVsIHRvIHRoZSB1c2VyIGxpc3RcclxuICBfYWRkRnJvbUJ1aWx0SW5UZW1wbGF0ZXModGVtcGxhdGVOYW1lOiBhbnkpIHtcclxuICAgIGxldCBmb3JtTmFtZSA9IHRoaXMub3RoZXJGb3JtTmFtZSA/PyB0aGlzLkVESVRJT05fUEVSU09OTkFMSVNFO1xyXG4gICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgIC5hZGRGcm9tQnVpbHRJblRlbXBsYXRlKGZvcm1OYW1lLCB0ZW1wbGF0ZU5hbWUsIHRoaXMucmVwb3J0RGlzY3JpbWluYXRvcilcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogYXN5bmMgKHJlcykgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuaXNTdWNjZXNzID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlZnJlc2hSZXBvcnRzKCk7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5pbmZvKHJlcy5tc2cpO1xyXG4gICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS53YXJuKFxyXG4gICAgICAgICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX2Nhbm5vdF9hZGRfZnJvbV9idWlsdF9pbl90ZW1wbGF0ZSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uud2FybihcclxuICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfY2Fubm90X2FkZF9mcm9tX2J1aWx0X2luX3RlbXBsYXRlJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vYWRkIGEgcmVwb3J0IGZyb20gdGhlIHVzZXIgbGlzdCB0byBidWlsdC1pbiBtb2RlbCB0ZW1wbGF0ZVxyXG4gIF9hZGRUb0J1aWx0SW5UZW1wbGF0ZXMocmVwb3J0SWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmFkZFRvQnVpbHRJblRlbXBsYXRlKHJlcG9ydElkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiBhc3luYyAocmVzKSA9PiB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHModHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmluZm8oTG9jYWxpemF0aW9uS2V5cy5zYXZlZFN1Y2Nlc3NmdWxseSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLndhcm4oXHJcbiAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19hZGRfdG9fYnVpbHRpbl90ZW1wbGF0ZV9yZXBvcnRfZmFpbGVkJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBtYWtlIHJlcG9ydCBsYXlvdXQgYXMgZGVmYXVsdCBmb3IgYWxsIHJlcG9ydHNcclxuICBtYWtlUmVwb3J0RGVmYXVsdExheW91dChyZXBvcnRVaWQ6IHN0cmluZykge1xyXG4gICAgbGV0IHJlcXVlc3QgPSB7XHJcbiAgICAgIHJlcG9ydFRlbXBsYXRlVWlkOiByZXBvcnRVaWQsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLm1ha2VSZXBvcnRMYXlvdXRBc0RlZmF1bHRMYXlvdXQocmVxdWVzdCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2Vzcygnc2hhcmVkX3JlcG9ydGluZ19zdWNjZXNzX3VwZGF0ZWQnKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uud2Fybignc2hhcmVkX3JlcG9ydGluZ19lcnJvcl9vY2N1cmVkJyk7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy8jZW5kIHJlZ2lvblxyXG5cclxuICBfdmlld0Rhc2hib2FyZHQodWlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBsZXQgcmVwb3J0ID0gdGhpcy5yZXBvcnRzLmZpbmQoKHIpID0+IHIudWlkID09PSB1aWQpO1xyXG4gICAgaWYgKCFyZXBvcnQpIHtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXBvcnRUZW1wbGF0ZUlkID0gcmVwb3J0LnVpZDtcclxuICAgIGxldCB0ZW5hbnRVaWQgPSB0aGlzLmlkZW50aXR5TWFuYWdlclNlcnZpY2UucGFyc2VNeUF1dGhUb2tlbigpPy50ZW5hbnRVaWQ7XHJcblxyXG4gICAgbGV0IHVybFZpZXdlciA9IGAke1NlZ21lbnQuYXBwQmFzZUhyZWZ9LyR7dGhpcy5kYXNoYm9hcmRNb2R1bGVSb3V0ZX0vJHtNYW5hZ2VSZXBvcnRpbmdSb3V0ZXMuZGFzaGJvYXJkVmlld2VyfT8ke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnJlcG9ydFRlbXBsYXRlfT0ke3JlcG9ydFRlbXBsYXRlSWR9JiR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKCc+Pj4gX3ZpZXdEYXNoYm9hcmR0IH4gdXJsVmlld2VyOicsIHVybFZpZXdlcik7XHJcblxyXG4gICAgd2luZG93Lm9wZW4odXJsVmlld2VyLCAnX2JsYW5rJyk7XHJcbiAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfcmVkaXJlY3RlZF90b19wcmludF9yZXBvcnRfc3VjY2Vzc2Z1bGx5J1xyXG4gICAgKTtcclxuICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiIsIlxyXG48ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gIDxkaXYgKmJ1c3k9XCJpc2xvYWRpbmdcIj48L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImdyaWQgY29sLTEwXCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJpc0Zyb21Gb3JtOyBlbHNlIG5vdEZyb21Gb3JtXCI+XHJcbiAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC0yXCIgW2xhYmVsVmFsdWVdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfZm9ybSdcIj5cclxuICAgICAgICA8L1RzaS1MYWJlbD5cclxuICAgICAgICA8cC1kcm9wZG93biBjbGFzcz1cImNvbC0xMCB0c2ktY29tcG9uZW50XCIgY2xhc3M9XCJ0c2ktY29tcG9uZW50XCIgc3R5bGVDbGFzcz1cInRzaS1jb21wb25lbnRcIiBhcHBlbmRUcD1cImJvZHlcIlxyXG4gICAgICAgICAgW29wdGlvbnNdPVwiZm9ybU5hbWVzXCIgW25nTW9kZWxdPVwib3RoZXJGb3JtTmFtZVwiIG9wdGlvbkxhYmVsPVwidmFsdWVcIiBvcHRpb25WYWx1ZT1cImtleVwiIFtmaWx0ZXJdPVwidHJ1ZVwiXHJcbiAgICAgICAgICBmaWx0ZXJCeT1cInZhbHVlXCIgW3Nob3dDbGVhcl09XCJ0cnVlXCIgcGxhY2Vob2xkZXI9XCJ7eydzaGFyZWRfcmVwb3J0aW5nX3NlbGVjdF9mb3JtJyB8IGxvY2FsaXplfX1cIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cInRydWVcIj5cclxuICAgICAgICA8L3AtZHJvcGRvd24+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlICNub3RGcm9tRm9ybT5cclxuICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC0yXCIgW2xhYmVsVmFsdWVdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfZm9ybSdcIj5cclxuICAgICAgICAgIDwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gY2xhc3M9XCJjb2wtMTBcIiBbKGJpbmQpXT1cIm90aGVyRm9ybU5hbWVcIiAoYmluZENoYW5nZSk9XCJvbkZvcm1DaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgIFtsaXN0U291cmNlVXJsXT1cImdldEZvcm1OYW1lc0VuZHBvaW50XCIgW2VsZW1lbnRTb3VyY2VVcmxdPVwiZ2V0Rm9ybU5hbWVzRW5kcG9pbnQgXCIgW2lzRmlsdGVyZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIGlkLWZpZWxkPVwia2V5XCIgbGFiZWwtZmllbGQ9XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgPC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxwLXRvb2xiYXIgc3R5bGVDbGFzcz1cIm1iLTQgZ2FwLTJcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJsZWZ0XCI+XHJcbiAgICAgIDxUc2ktQnV0dG9uIFt0ZXh0XT1cIidzaGFyZWRfcmVwb3J0aW5nX2FkZF9yZXBvcnQnIHwgbG9jYWxpemVcIiBpY29uPVwicC1idXR0b24taWNvbiBwLWJ1dHRvbi1pY29uLWxlZnQgcGkgcGktcGx1c1wiXHJcbiAgICAgICAgc3R5bGVDbGFzcz1cInAtZWxlbWVudCBwLWJ1dHRvbi1zdWNjZXNzIG1sLTIgbXItMiBwLWJ1dHRvbiBwLWNvbXBvbmVudCBuZy1zdGFyLWluc2VydGVkIHAtYnV0dG9uLWxhYmVsXCIgKGNsaWNrKT1cIm9uTmV3UmVwb3J0KClcIj48L1RzaS1CdXR0b24+XHJcbiAgICAgIDxUc2ktQnV0dG9uIFtidXR0b25UeXBlXT1cImJ1dHRvblR5cGUuU3VibWl0XCIgW3RleHRdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfZGVsZXRlX3JlcG9ydCcgfCBsb2NhbGl6ZVwiIGljb249XCJwLWJ1dHRvbi1pY29uIHAtYnV0dG9uLWljb24tbGVmdCBwaSBwaS10cmFzaFwiXHJcbiAgICAgICAgc3R5bGVDbGFzcz1cInAtZWxlbWVudCBwLWJ1dHRvbi1kYW5nZXIgcC1idXR0b24gcC1jb21wb25lbnQgbmctc3Rhci1pbnNlcnRlZCBwLWJ1dHRvbi1sYWJlbFwiIChjbGljayk9XCJvbkRlbGV0ZVNlbGVjdGVkUmVwb3J0cygpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiIXNlbGVjdGVkUmVwb3J0cyB8fCAhc2VsZWN0ZWRSZXBvcnRzLmxlbmd0aFwiPjwvVHNpLUJ1dHRvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInJpZ2h0XCI+XHJcbiAgICAgIDxwLWZpbGVVcGxvYWQgI2ZpbGVVcGxvYWQgbmFtZT1cImRlbW9bXVwiIChvbkJlZm9yZVVwbG9hZCk9XCJvbkltcG9ydEZpbGUoJGV2ZW50KVwiXHJcbiAgICAgICAgKG9uU2VsZWN0KT1cIm9uRmlsZVNlbGVjdGVkKCRldmVudClcIiAob25DbGVhcik9XCJvbkNsZWFyKCRldmVudClcIiAob25SZW1vdmUpPVwib25SZW1vdmUoJGV2ZW50KVwiIFttdWx0aXBsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgYWNjZXB0PVwiYXBwbGljYXRpb24vanNvblwiIFttYXhGaWxlU2l6ZV09XCIxMDAwMDAwMFwiIFxyXG4gICAgICAgIFtpbnZhbGlkRmlsZVNpemVNZXNzYWdlU3VtbWFyeV09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV9zaXplX21lc3NhZ2Vfc3VtbWFyeScgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW2ludmFsaWRGaWxlU2l6ZU1lc3NhZ2VEZXRhaWxdPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfc2l6ZV9tZXNzYWdlX2RldGFpbCcgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW2ludmFsaWRGaWxlVHlwZU1lc3NhZ2VTdW1tYXJ5XT1cIidzaGFyZWRfZmlsZV91cGxvYWRfaW52YWxpZF9maWxlX3R5cGVfbWVzc2FnZV9zdW1tYXJ5JyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVMaW1pdE1lc3NhZ2VEZXRhaWxdPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfbGltaXRfbWVzc2FnZV9kZXRhaWwnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZUxpbWl0TWVzc2FnZVN1bW1hcnldPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfbGltaXRfbWVzc2FnZV9zdW1tYXJ5JyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVUeXBlTWVzc2FnZURldGFpbF09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV90eXBlX21lc3NhZ2VfZGV0YWlsJyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbY2hvb3NlSWNvbl09XCIncGkgcGktcGFwZXJjbGlwJ1wiIGNhbmNlbFN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnlcIiB1cGxvYWRTdHlsZUNsYXNzPVwicC1idXR0b24taGVscFwiXHJcbiAgICAgICAgcmVtb3ZlU3R5bGVDbGFzcz1cInAtYnV0dG9uLWRhbmdlclwiIFtjaG9vc2VMYWJlbF09XCInc2hhcmVkX3JlcG9ydGluZ19jaG9vc2VfcmVwb3J0X2ZpbGUnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFt1cGxvYWRMYWJlbF09XCInc2hhcmVkX3JlcG9ydGluZ19pbXBvcnRfcmVwb3J0JyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbY2FuY2VsTGFiZWxdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfY2FuY2VsX2Nob29zZV9yZXBvcnRfZmlsZScgfCBsb2NhbGl6ZVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cInRvVXBsb2FkRmlsZURhdGFcIiBwVGVtcGxhdGU9XCJmaWxldXBsb2FkLWNvbnRlbnRcIj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L3AtZmlsZVVwbG9hZD5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9wLXRvb2xiYXI+XHJcblxyXG4gIDwhLS0gPFRzaS1EaXNwbGF5LUdyaWQgW3Nob3dIZWFkZXJdPVwidHJ1ZVwiXHJcbiAgICBbaGVhZGVyXT1cIidzaGFyZWRfcmVwb3J0aW5nX215X3RlbXBsYXRlJ1wiXHJcbiAgICBbY29sdW1uc109XCJjb2x1bW5zXCIgW2dyaWREYXRhXT1cInJlcG9ydHNcIiBrZXk9XCJ1aWRcIlxyXG4gICAgKGJ1dHRvbkNvbHVtbkNsaWNrZWQpPVwiaGFuZGxlQnV0dG9uQ29sdW1uQ2xpY2tlZCgkZXZlbnQpXCIgWyhzZWxlY3RlZEl0ZW1zKV09XCJzZWxlY3RlZFJlcG9ydHNcIlxyXG4gICAgW3Nob3dGaWx0ZXJzXT1cImZhbHNlXCJcclxuICAgIFtwYWdpbmF0b3JdPVwidHJ1ZVwiXHJcbiAgICBbZ2xvYmFsRmlsdGVyRmllbGRzXT1cImdsb2JhbEZpbHRlckZpZWxkc1wiPlxyXG4gIDwvVHNpLURpc3BsYXktR3JpZD4gLS0+XHJcblxyXG5cclxuICA8IS0tPGRpdiBzdHlsZT1cInRleHQtYWxpZ246bGVmdFwiPiA8cC1idXR0b24gaWNvbj1cInBpIHBpLXJlZnJlc2hcIiAgW3BUb29sdGlwXT1cIidzaGFyZWRfcmVwb3J0aW5nX3JlZnJlc2gnIHwgbG9jYWxpemVcIiBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Ub3BcIiAgbGFiZWw9XCJSZWxvYWRcIiBzZXZlcml0eT1cImhlbHBcIiAoY2xpY2spPVwib25SZWZyZXNoKClcIiAvPiA8L2Rpdj5cclxuICA8cC1idXR0b24gaWNvbj1cInBpIHBpLXJlZnJlc2hcIiBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWRcIiBzdHlsZUNsYXNzPVwicC1idXR0b24tdGV4dFwiIC8+XHJcbi0tPlxyXG4gIFxyXG4gIDxUc2ktQnV0dG9uIHN0eWxlQ2xhc3M9XCJwLWVsZW1lbnQgcC1idXR0b24tdGV4dCBwLWJ1dHRvbi1yYWlzZWQgcC1idXR0b24tcm91bmRlZCBtYi0zIG1sLTNcIiAgXHJcbiAgICBbdG9vbHRpcFRleHRdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfcmVmcmVzaCdcIiBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Ub3BcIlxyXG4gICAgaWNvbj1cInBpIHBpLXJlZnJlc2hcIiAoY2xpY2spPVwib25SZWZyZXNoKClcIj48L1RzaS1CdXR0b24+XHJcblxyXG4gIDx0c2ktdmlldy1ncmlkIFxyXG4gICAgW3NvcnRNb2RlXT1cInNvcnRNb2RlUmVmLlNpbmdsZVwiXHJcbiAgICBbaGVhZGVyXT1cIidzaGFyZWRfcmVwb3J0aW5nX215X3RlbXBsYXRlJ1wiXHJcbiAgICBbY29sdW1uc109XCJjb2x1bW5zXCIgW2dyaWREYXRhXT1cInJlcG9ydHNcIiBrZXk9XCJ1aWRcIlxyXG4gICAgKGJ1dHRvbkNvbHVtbkNsaWNrZWQpPVwiaGFuZGxlQnV0dG9uQ29sdW1uQ2xpY2tlZCgkZXZlbnQpXCIgWyhzZWxlY3RlZEl0ZW1zKV09XCJzZWxlY3RlZFJlcG9ydHNcIlxyXG4gICAgW2dldERhdGFGcm9tQXBpXT1cImZhbHNlXCJcclxuICAgIFtmb3JtTmFtZV09XCInbXktcmVwb3J0LXRlbXBsYXRlcydcIlxyXG4gICAgPlxyXG4gIDwvdHNpLXZpZXctZ3JpZD5cclxuICA8YnIvPlxyXG4gICA8IS0tIERlZmF1bHQgVGVtcGxhdGUgLS0+XHJcbiAgIDwhLS0gPFRzaS1EaXNwbGF5LUdyaWQgXHJcbiAgIFtzaG93SGVhZGVyXT1cInRydWVcIiBcclxuICAgW2hlYWRlcl09XCInc2hhcmVkX3JlcG9ydGluZ19CdWlsdEluX3RlbXBsYXRlJ1wiXHJcbiAgIFtzaG93U3VtbWFyeUZvb3Rlcl09XCJmYWxzZVwiIFxyXG4gICBbcGFnaW5hdG9yXT1cImZhbHNlXCIgXHJcbiAgIFtzaG93RmlsdGVyc109XCJmYWxzZVwiIFxyXG4gICBbY29sdW1uc109XCJkZWZhdWx0VGVtcGxhdGVDb2x1bW5zXCIgXHJcbiAgIFtncmlkRGF0YV09XCJkZWZhdWx0UmVwb3J0VGVtcGxhdGVEYXRhXCIgXHJcbiAgIChidXR0b25Db2x1bW5DbGlja2VkKT1cImhhbmRsZUJ1dHRvbkNvbHVtbkNsaWNrZWQoJGV2ZW50KVwiXHJcbiAgIFtwYWdpbmF0b3JdPVwidHJ1ZVwiXHJcbiAgIGtleT1cIm5hbWVcIj5cclxuICA8L1RzaS1EaXNwbGF5LUdyaWQ+IC0tPlxyXG5cclxuICBcclxuICA8dHNpLXZpZXctZ3JpZFxyXG4gICBbc29ydE1vZGVdPVwic29ydE1vZGVSZWYuU2luZ2xlXCJcclxuICAgW2hlYWRlcl09XCInc2hhcmVkX3JlcG9ydGluZ19CdWlsdEluX3RlbXBsYXRlJ1wiXHJcbiAgIFtjb2x1bW5zXT1cImRlZmF1bHRUZW1wbGF0ZUNvbHVtbnNcIiBcclxuICAgW2dyaWREYXRhXT1cImRlZmF1bHRSZXBvcnRUZW1wbGF0ZURhdGFcIiBcclxuICAgKGJ1dHRvbkNvbHVtbkNsaWNrZWQpPVwiaGFuZGxlQnV0dG9uQ29sdW1uQ2xpY2tlZCgkZXZlbnQpXCJcclxuICAgW2dldERhdGFGcm9tQXBpXT1cImZhbHNlXCJcclxuICAgW2Zvcm1OYW1lXT1cIidkZWZhdWx0LW15LXJlcG9ydC10ZW1wbGF0ZXMnXCJcclxuICAga2V5PVwibmFtZVwiPlxyXG4gIDwvdHNpLXZpZXctZ3JpZD5cclxuXHJcblxyXG5cclxuXHJcbiAgXHJcblxyXG4gIDwhLS0gZGlhbG9nIHRvIGltcG9ydCBmaWxlIHRvIHJlcG9ydCAtLT5cclxuICA8cC1kaWFsb2cgaGVhZGVyPVwie3snc2hhcmVkX3JlcG9ydGluZ19zZWxlY3RfZmlsZV90b19pbXBvcnRfaW50b19yZXBvcnQnIHwgbG9jYWxpemV9fVwiIFsodmlzaWJsZSldPVwiaXNVcGRhdGVSZXBvcnRGcm9tRmlsZURpYWxvZ1Zpc2libGVcIiBbc3R5bGVdPVwie3dpZHRoOiAnNTB2dyd9XCI+XHJcbiAgICA8IS0tIDxUc2ktTW9kYWwtSGVhZGVyIChvbkNsb3NlQ2xpY2spPVwib25JbXBvcnRGaWxlVG9SZXBvcnRNb2RhbENhbmNlbENsaWNrKClcIiBbaW5wdXRUaXRsZV09XCInc2hhcmVkX3JlcG9ydGluZ19zZWxlY3RfZmlsZV90b19pbXBvcnRfaW50b19yZXBvcnQnXCI+PC9Uc2ktTW9kYWwtSGVhZGVyPiAtLT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiPlxyXG4gICAgICA8cC1maWxlVXBsb2FkICNpbXBvcnRGaWxlVG9SZXBvcnRGaWxlVXBsb2FkIG5hbWU9XCJpbXBvcnRGaWxlVG9SZXBvcnRcIiAob25CZWZvcmVVcGxvYWQpPVwib25JbXBvcnRGaWxlVG9SZXBvcnRfSW1wb3J0RmlsZSgkZXZlbnQpXCJcclxuICAgICAgICAob25TZWxlY3QpPVwib25JbXBvcnRGaWxlVG9SZXBvcnRfRmlsZVNlbGVjdGVkKCRldmVudClcIiAob25DbGVhcik9XCJvbkltcG9ydEZpbGVUb1JlcG9ydF9DbGVhcigkZXZlbnQpXCIgKG9uUmVtb3ZlKT1cIm9uSW1wb3J0RmlsZVRvUmVwb3J0X1JlbW92ZSgkZXZlbnQpXCIgW211bHRpcGxlXT1cImZhbHNlXCJcclxuICAgICAgICBhY2NlcHQ9XCJhcHBsaWNhdGlvbi9qc29uXCIgW21heEZpbGVTaXplXT1cIjEwMDAwMDAwXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVTaXplTWVzc2FnZVN1bW1hcnldPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfc2l6ZV9tZXNzYWdlX3N1bW1hcnknIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZVNpemVNZXNzYWdlRGV0YWlsXT1cIidzaGFyZWRfZmlsZV91cGxvYWRfaW52YWxpZF9maWxlX3NpemVfbWVzc2FnZV9kZXRhaWwnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZVR5cGVNZXNzYWdlU3VtbWFyeV09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV90eXBlX21lc3NhZ2Vfc3VtbWFyeScgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW2ludmFsaWRGaWxlTGltaXRNZXNzYWdlRGV0YWlsXT1cIidzaGFyZWRfZmlsZV91cGxvYWRfaW52YWxpZF9maWxlX2xpbWl0X21lc3NhZ2VfZGV0YWlsJyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVMaW1pdE1lc3NhZ2VTdW1tYXJ5XT1cIidzaGFyZWRfZmlsZV91cGxvYWRfaW52YWxpZF9maWxlX2xpbWl0X21lc3NhZ2Vfc3VtbWFyeScgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW2ludmFsaWRGaWxlVHlwZU1lc3NhZ2VEZXRhaWxdPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfdHlwZV9tZXNzYWdlX2RldGFpbCcgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW2Nob29zZUljb25dPVwiJ3BpIHBpLXBhcGVyY2xpcCdcIiBjYW5jZWxTdHlsZUNsYXNzPVwicC1idXR0b24tc2Vjb25kYXJ5XCIgdXBsb2FkU3R5bGVDbGFzcz1cInAtYnV0dG9uLWhlbHBcIlxyXG4gICAgICAgIHJlbW92ZVN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1kYW5nZXJcIiBbY2hvb3NlTGFiZWxdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfY2hvb3NlX3JlcG9ydF9maWxlJyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbdXBsb2FkTGFiZWxdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfaW1wb3J0X3JlcG9ydCcgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW2NhbmNlbExhYmVsXT1cIidzaGFyZWRfcmVwb3J0aW5nX2NhbmNlbF9jaG9vc2VfcmVwb3J0X2ZpbGUnIHwgbG9jYWxpemVcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJ0b1VwbG9hZFRvVXBkYXRlUmVwb3J0RmlsZURhdGFcIiBwVGVtcGxhdGU9XCJmaWxldXBsb2FkLWNvbnRlbnRcIj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L3AtZmlsZVVwbG9hZD5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPCEtLSA8VHNpLU1vZGFsLUZvb3RlciAob25DYW5jZWxDbGljayk9XCJvbkltcG9ydEZpbGVUb1JlcG9ydE1vZGFsQ2FuY2VsQ2xpY2soKVwiXHJcbiAgICAob25TYXZlQ2xpY2spPVwib25JbXBvcnRGaWxlVG9SZXBvcnRNb2RhbFNhdmVDbGljaygpXCJcclxuICAgIFtzYXZlRGlzYWJsZWRdPVwiIXRvVXBsb2FkVG9VcGRhdGVSZXBvcnRGaWxlRGF0YVwiPjwvVHNpLU1vZGFsLUZvb3Rlcj4gLS0+XHJcblxyXG48L3AtZGlhbG9nPlxyXG48L2Rpdj5cclxuIl19
|