@tsi-developpement/tsi-shared-ui 1.9.2 → 1.9.4
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/enums/grid-sizing-mode.mjs +15 -0
- package/esm2022/lib/enums/index.mjs +2 -2
- package/esm2022/lib/interfaces/grid/grid-configuration.mjs +1 -1
- package/esm2022/lib/interfaces/index.mjs +1 -2
- package/esm2022/lib/tsi-components/create-or-edit-entity-informations/create-or-edit-entity-informations.component.mjs +1 -1
- package/esm2022/lib/tsi-components/create-or-edit-modele-import/create-or-edit-modele-import.component.mjs +4 -5
- package/esm2022/lib/tsi-components/input-components/editable-grid/editable-grid.component.mjs +61 -3
- package/esm2022/lib/tsi-components/input-components/tsi-rate-input/tsi-rate-input.component.mjs +41 -12
- package/esm2022/lib/tsi-components/manage-import-export/manage-import-export.component.mjs +1 -1
- package/esm2022/lib/tsi-components/manage-reporting/manage-reporting.component.mjs +3 -5
- package/esm2022/lib/tsi-components/modal-component/modal.component.mjs +1 -1
- package/esm2022/lib/tsi-components/output-components/tsi-generic-grid/tsi-generic-grid.component.mjs +71 -78
- package/esm2022/lib/tsi-components/output-components/tsi-rate-display/tsi-rate-display.component.mjs +15 -5
- package/esm2022/lib/tsi-components/output-components/tsi-view-grid/tsi-view-grid.component.mjs +7 -4
- package/esm2022/lib/tsi-components/tsi-action-erp-create-or-edit/tsi-action-erp-create-or-edit.component.mjs +1 -1
- package/esm2022/lib/tsi-components/tsi-action-erp-list/tsi-action-erp-list.component.mjs +1 -1
- package/esm2022/lib/tsi-components/tsi-dynamic-form/dynamic-form-list/dynamic-form-list.component.mjs +1 -1
- package/esm2022/lib/tsi-components/tsi-generic-crud/tsi-generic-crud.component.mjs +7 -3
- package/esm2022/lib/tsi-components/tsi-notes-grid/tsi-notes-grid.component.mjs +1 -1
- package/esm2022/lib/tsi-components/tsi-popup-text-viewer/tsi-popup-text-viewer.component.mjs +1 -1
- package/esm2022/lib/tsi-components/tsi-upload-grid/tsi-upload-grid.component.mjs +1 -1
- package/esm2022/lib/tsi-helpers/column-width.controller.mjs +97 -0
- package/esm2022/lib/tsi-helpers/grid-col-style.helper.mjs +28 -5
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs +4039 -3839
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs.map +1 -1
- package/lib/consts/app-providers.d.ts +1 -1
- package/lib/enums/grid-sizing-mode.d.ts +13 -0
- package/lib/enums/index.d.ts +1 -1
- package/lib/interfaces/grid/grid-configuration.d.ts +7 -2
- package/lib/interfaces/index.d.ts +0 -1
- package/lib/tsi-components/input-components/editable-grid/editable-grid.component.d.ts +45 -1
- package/lib/tsi-components/input-components/tsi-rate-input/tsi-rate-input.component.d.ts +24 -3
- package/lib/tsi-components/output-components/tsi-generic-grid/tsi-generic-grid.component.d.ts +48 -2
- package/lib/tsi-components/output-components/tsi-rate-display/tsi-rate-display.component.d.ts +7 -1
- package/lib/tsi-components/output-components/tsi-view-grid/tsi-view-grid.component.d.ts +3 -2
- package/lib/tsi-components/tsi-generic-crud/tsi-generic-crud.component.d.ts +3 -1
- package/lib/tsi-helpers/column-width.controller.d.ts +67 -0
- package/lib/tsi-helpers/grid-col-style.helper.d.ts +16 -5
- package/package.json +1 -1
- package/esm2022/lib/enums/css-units.mjs +0 -10
- package/esm2022/lib/interfaces/styles/css-size-property.mjs +0 -17
- package/lib/enums/css-units.d.ts +0 -8
- package/lib/interfaces/styles/css-size-property.d.ts +0 -10
|
@@ -5,10 +5,9 @@ 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 {
|
|
8
|
+
import { 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
|
-
import { CSSSizeProperty, } from '../../interfaces';
|
|
12
11
|
import { AppRoutes } from '../../routes/app.routes';
|
|
13
12
|
import { ManageReportingRoutes } from '../../routes/manage-reporting.routes';
|
|
14
13
|
import { TsiFormComponentBaseComponent } from '../../tsi-base/components/tsi-form-base/tsi-form-base.component';
|
|
@@ -99,7 +98,6 @@ export class ManageReportingComponent extends TsiFormComponentBaseComponent {
|
|
|
99
98
|
field: 'isDefault',
|
|
100
99
|
header: 'shared_reporting_report_isdefault',
|
|
101
100
|
type: DisplayTypes.CHECKBOX_DISPLAY,
|
|
102
|
-
width: new CSSSizeProperty(10, CSSUnits.PRECENT),
|
|
103
101
|
},
|
|
104
102
|
{
|
|
105
103
|
header: '',
|
|
@@ -1026,7 +1024,7 @@ export class ManageReportingComponent extends TsiFormComponentBaseComponent {
|
|
|
1026
1024
|
this.isloading = false;
|
|
1027
1025
|
}
|
|
1028
1026
|
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 }); }
|
|
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", "searchDebounceTime", "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", "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" }] }); }
|
|
1027
|
+
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", "searchDebounceTime", "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", "showHeaderFilters", "showFilterButton", "selectAll", "checkedByField", "sortMode", "sizingMode", "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" }] }); }
|
|
1030
1028
|
}
|
|
1031
1029
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ManageReportingComponent, decorators: [{
|
|
1032
1030
|
type: Component,
|
|
@@ -1052,4 +1050,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1052
1050
|
}], customReportingMode: [{
|
|
1053
1051
|
type: Input
|
|
1054
1052
|
}] } });
|
|
1055
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLXJlcG9ydGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvbWFuYWdlLXJlcG9ydGluZy9tYW5hZ2UtcmVwb3J0aW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9tYW5hZ2UtcmVwb3J0aW5nL21hbmFnZS1yZXBvcnRpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDMUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzFFLE9BQU8sRUFDTCxRQUFRLEVBQ1IsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixZQUFZLEVBRVosYUFBYSxFQUNiLEtBQUssRUFDTCxhQUFhLEdBQ2QsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBRUwsZUFBZSxHQUVoQixNQUFNLGtCQUFrQixDQUFDO0FB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aUI7c0JBQXpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBGaWxlVXBsb2FkIH0gZnJvbSAncHJpbWVuZy9maWxldXBsb2FkJztcclxuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgYXBwUHJvdmlkZXJzIH0gZnJvbSAnLi4vLi4vY29uc3RzL2FwcC1wcm92aWRlcnMnO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25LZXlzIH0gZnJvbSAnLi4vLi4vY29uc3RzL2xvY2FsaXphdGlvbi1rZXknO1xyXG5pbXBvcnQgeyBxdWVyeVBhcmFtTmFtZXNDb25zdCB9IGZyb20gJy4uLy4uL2NvbnN0cy9xdWVyeVBhcmFtTmFtZXMuY29uc3QnO1xyXG5pbXBvcnQgeyBTZWdtZW50IH0gZnJvbSAnLi4vLi4vZW5kLXBvaW50cyc7XHJcbmltcG9ydCB7IFJlcG9ydGluZ0VuZHBvaW50cyB9IGZyb20gJy4uLy4uL2VuZC1wb2ludHMvcmVwb3J0aW5nLWVuZHBvaW50cyc7XHJcbmltcG9ydCB7XHJcbiAgQ1NTVW5pdHMsXHJcbiAgRGlzcGxheVR5cGVzLFxyXG4gIEdyaWRTZWxlY3Rpb25Nb2RlLFxyXG4gIEdyaWRTb3J0TW9kZSxcclxuICBIdHRwTWV0aG9kVHlwZSxcclxuICBNb2RhbFNpemVFbnVtLFxyXG4gIE1vZGVzLFxyXG4gIFRzaVJlcG9ydFR5cGUsXHJcbn0gZnJvbSAnLi4vLi4vZW51bXMnO1xyXG5pbXBvcnQgeyBCdXR0b25UeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvYnV0dG9uLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IFRvb2x0aXBQb3NpdGlvbiB9IGZyb20gJy4uLy4uL2VudW1zL3Rvb2x0aXBQb3NpdGlvbi5lbnVtJztcclxuaW1wb3J0IHtcclxuICBCdXR0b25DbGlja1Jlc3VsdCxcclxuICBDU1NTaXplUHJvcGVydHksXHJcbiAgR3JpZENvbHVtbixcclxufSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHtcclxuICBKc29uRGF0YUNvbm5lY3Rpb24sXHJcbiAgS2V5VmFsdWVQYWlyLFxyXG4gIE9wdGlvbmFsRW5kcG9pbnRzLFxyXG4gIFJlcG9ydFRlbXBsYXRlUmVzcG9uc2UsXHJcbiAgUmVwb3J0VG9FZGl0VGVtcGxhdGUsXHJcbiAgUmVwb3J0VG9FZGl0VGVtcGxhdGVQYXlsb2FkLFxyXG4gIFJlcG9ydFRvUHJpbnQsXHJcbiAgUmVwb3J0VG9UZW1wbGF0ZSxcclxufSBmcm9tICcuLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBBcHBSb3V0ZXMgfSBmcm9tICcuLi8uLi9yb3V0ZXMvYXBwLnJvdXRlcyc7XHJcbmltcG9ydCB7IE1hbmFnZVJlcG9ydGluZ1JvdXRlcyB9IGZyb20gJy4uLy4uL3JvdXRlcy9tYW5hZ2UtcmVwb3J0aW5nLnJvdXRlcyc7XHJcbmltcG9ydCB7XHJcbiAgRXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLFxyXG4gIElkZW50aXR5TWFuYWdlclNlcnZpY2UsXHJcbiAgUmVwb3J0aW5nU2VydmljZSxcclxuICBUc2lDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gIFRzaU1vZGFsU2VydmljZSxcclxuICBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG59IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgVHNpRm9ybUNvbXBvbmVudEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi90c2ktYmFzZS9jb21wb25lbnRzL3RzaS1mb3JtLWJhc2UvdHNpLWZvcm0tYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBZGRSZXBvcnRQb3B1cENvbXBvbmVudCB9IGZyb20gJy4vYWRkLXJlcG9ydC1wb3B1cC9hZGQtcmVwb3J0LXBvcHVwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVtYWlsSW5mb3JtYXRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvYXBwbGljYXRpb24vY29uZmlndXJhdGlvbi9lbWFpbC1pbmZvcm1hdGlvbic7XHJcbmltcG9ydCB7IE1haWxpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwbGljYXRpb24vbWFpbGluZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHNpU2VuZE1haWxDb21wb25lbnQgfSBmcm9tICcuLi90c2ktc2VuZC1tYWlsL3RzaS1zZW5kLW1haWwuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLW1hbmFnZS1yZXBvcnRpbmcnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tYW5hZ2UtcmVwb3J0aW5nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9tYW5hZ2UtcmVwb3J0aW5nLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbLi4uYXBwUHJvdmlkZXJzXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1hbmFnZVJlcG9ydGluZ0NvbXBvbmVudFxyXG4gIGV4dGVuZHMgVHNpRm9ybUNvbXBvbmVudEJhc2VDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAvLyNyZWdpb24gcHJvcGVydGllc1xyXG5cclxuICByZWFkb25seSBFRElUSU9OX1BFUlNPTk5BTElTRSA9ICdhcHAtZWRpdGlvbi1wZXJzb25uYWxpc2UnO1xyXG4gIHJlcG9ydHM6IFJlcG9ydFRlbXBsYXRlUmVzcG9uc2VbXSA9IFtdO1xyXG4gIGpzb25EYXRhQ29ubmVjdGlvbjogSnNvbkRhdGFDb25uZWN0aW9uIHwgdW5kZWZpbmVkO1xyXG4gIGpzb25EYXRhQ29ubmVjdGlvbklkOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcbiAgcmVwb3J0VG9QcmludElkOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcbiAgdG9VcGxvYWRGaWxlRGF0YTogYW55ID0gdW5kZWZpbmVkO1xyXG4gIGNvbHVtbnM6IEdyaWRDb2x1bW5bXSA9IFtdO1xyXG4gIGlzRnJvbUZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmb3JtTmFtZXM6IEtleVZhbHVlUGFpcjxzdHJpbmcsIHN0cmluZz5bXSA9IFtdO1xyXG4gIHNlbGVjdGVkUmVwb3J0czogbnVtYmVyW10gPSBbXTtcclxuICBzZWxlY3Rpb25Nb2RlID0gR3JpZFNlbGVjdGlvbk1vZGUuTXVsdGlwbGU7XHJcbiAgZ2V0Rm9ybU5hbWVzRW5kcG9pbnQ6IHN0cmluZyA9IFJlcG9ydGluZ0VuZHBvaW50cy5nZXRBdmFpbGFibGVGb3JtTmFtZXMoKTtcclxuICBnbG9iYWxGaWx0ZXJGaWVsZHMgPSBbJ25hbWUnXTtcclxuICByZWZyZXNoSm9iVGltZU91dDogYW55O1xyXG4gIHByZXZpb3VzRm9ybU5hbWU6IHN0cmluZyA9ICcnO1xyXG4gIGlzVXBkYXRlUmVwb3J0RnJvbUZpbGVEaWFsb2dWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdG9VcGxvYWRUb1VwZGF0ZVJlcG9ydEZpbGVEYXRhOiBhbnkgPSB1bmRlZmluZWQ7XHJcbiAgc2VsZWN0ZWRSZXBvcnRUb1VwZGF0ZUZyb21GaWxlOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcbiAgZGVmYXVsdFJlcG9ydFRlbXBsYXRlRGF0YTogc3RyaW5nW10gPSBbXTtcclxuICBkZWZhdWx0VGVtcGxhdGVDb2x1bW5zOiBHcmlkQ29sdW1uW10gPSBbXTtcclxuICB0b29sdGlwUG9zaXRpb24gPSBUb29sdGlwUG9zaXRpb247XHJcbiAgcHJpdmF0ZSBfZGlhbG9nUmVmPzogRHluYW1pY0RpYWxvZ1JlZjtcclxuICBpc0VkaXRpb25QZXJzb25uYWxpc2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlbnRpdHlJZD86IHN0cmluZztcclxuICByZXBvcnREaXNjcmltaW5hdG9yPzogYW55O1xyXG4gIGh0dHBNZXRob2RUeXBlPzogSHR0cE1ldGhvZFR5cGU7XHJcbiAgcmVxdWVzdERhdGE/OiBhbnk7XHJcbiAgc29ydE1vZGVSZWYgPSBHcmlkU29ydE1vZGVcclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcmVwb3J0VHlwZUxhYmVsczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgIFtUc2lSZXBvcnRUeXBlLkRhc2hib2FyZF06ICdEYXNoYm9hcmQnLFxyXG4gICAgW1RzaVJlcG9ydFR5cGUuTGlzdF06ICdFbmQgdXNlcicsXHJcbiAgICBbVHNpUmVwb3J0VHlwZS5SVEZdOiAnUlRGJyxcclxuICB9O1xyXG5cclxuICBwcml2YXRlIF9pc1JlcG9ydEZvckZpY2hlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGdldCBpc1JlcG9ydEZvckZpY2hlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgIXRoaXMub3RoZXJGb3JtRW5kcG9pbnQ/LmluY2x1ZGVzKCdnZXRhbGxwYWdlZCcpICYmICF0aGlzLnJlcXVlc3REYXRhXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgQFZpZXdDaGlsZCgnZmlsZVVwbG9hZCcpIGZpbGVVcGxvYWQ/OiBGaWxlVXBsb2FkO1xyXG4gIEBWaWV3Q2hpbGQoJ2ltcG9ydEZpbGVUb1JlcG9ydEZpbGVVcGxvYWQnKVxyXG4gIGltcG9ydEZpbGVUb1JlcG9ydEZpbGVVcGxvYWQ/OiBGaWxlVXBsb2FkO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JNZXNzYWdlS2V5OiBzdHJpbmcgPSAnc2hhcmVkX3JlcG9ydGluZ19lcnJvcl9vY2N1cmVkJztcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkYXNoYm9hcmRNb2R1bGVSb3V0ZSA9IGAke0FwcFJvdXRlcy5hcHB9LyR7QXBwUm91dGVzLmRhc2hib2FyZH1gO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG4gIGJ1dHRvblR5cGUgPSBCdXR0b25UeXBlO1xyXG4gIC8vIHBhcmFtZXRyZTogUGFyYW1ldHJlc0FwcGxpY2F0aW9uUGFpZSA9IG5ldyBQYXJhbWV0cmVzQXBwbGljYXRpb25QYWllKCk7XHJcbiAgLy8jcmVnaW9uIElucHV0IHByb3BlcnRpZXNcclxuICBASW5wdXQoKSBvdGhlckZvcm1OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7IC8vZm9ybUlkZW50aWZpZXJcclxuICBASW5wdXQoKSBvdGhlckZvcm1FbmRwb2ludDogc3RyaW5nIHwgdW5kZWZpbmVkOyAvLz0gYCR7R2VzdGlvbkNvbW1lcmNpYWxlU2VnbWVudHMuZmFjdHVyZVZlbnRlfS8xNjVlYzVmZC00ZDM0LTQ1NDYtYWUxNS0wMDQ0ZTcwOGI5ZDlgO1xyXG4gIEBJbnB1dCgpIGZvcm1FbmRwb2ludEJvZHk6IHN0cmluZyB8IHVuZGVmaW5lZDsgLy9mb3JtSWRlbnRpZmllclxyXG4gIEBJbnB1dCgpIGlzRm9ybUVuZHBvaW50UGFnZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBmaWx0ZXJzSHRtbFRlbXBsYXRlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgb3B0aW9uYWxFbmRwb2ludHM/OiBPcHRpb25hbEVuZHBvaW50cztcclxuICBASW5wdXQoKSBjdXN0b21SZXBvcnRpbmdNb2RlPzogYm9vbGVhbjtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIE91dHB1dCBwcm9wZXJ0aWVzXHJcbiAgLy9AT3V0cHV0KCkgaGlkZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gY3RvclxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gcHVibGljIF9wYXJhbWV0cmVzQXBwbGljYXRpb25QYWllU2VydmljZTogUGFyYW1ldHJlc0FwcGxpY2F0aW9uUGFpZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlcG9ydGluZ1NlcnZpY2U6IFJlcG9ydGluZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGlkZW50aXR5TWFuYWdlclNlcnZpY2U6IElkZW50aXR5TWFuYWdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IFRzaUNvbmZpcm1hdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcmVmOiBEeW5hbWljRGlhbG9nUmVmLFxyXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyxcclxuICAgIHByaXZhdGUgX3RzaU1vZGFsU2VydmljZTogVHNpTW9kYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWFpbGluZ1NlcnZpY2U6IE1haWxpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlOiBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXHJcbiAgKSB7XHJcbiAgICBzdXBlcihyZWYsIGNvbmZpZyk7XHJcblxyXG4gICAgLy9pbml0IGNvbHVtbnNcclxuICAgIHRoaXMuY29sdW1ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGZpZWxkOiAnbmFtZScsXHJcbiAgICAgICAgaGVhZGVyOiAnc2hhcmVkX3JlcG9ydGluZ19yZXBvcnRfbmFtZScsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBmaWVsZDogJ3JlcG9ydFR5cGVOYW1lJyxcclxuICAgICAgICBoZWFkZXI6ICdzaGFyZWRfcmVwb3J0aW5nX3JlcG9ydF90eXBlJyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGZpZWxkOiAnaXNEZWZhdWx0JyxcclxuICAgICAgICBoZWFkZXI6ICdzaGFyZWRfcmVwb3J0aW5nX3JlcG9ydF9pc2RlZmF1bHQnLFxyXG4gICAgICAgIHR5cGU6IERpc3BsYXlUeXBlcy5DSEVDS0JPWF9ESVNQTEFZLFxyXG4gICAgICAgIHdpZHRoOiBuZXcgQ1NTU2l6ZVByb3BlcnR5KDEwLCBDU1NVbml0cy5QUkVDRU5UKSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgICAgZmllbGQ6ICdzZW5kJyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktc2VuZCcsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgcC1idXR0b24tc3VjY2VzcycsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfc2VuZF9yZXBvcnRfYnlfZW1haWwnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ2VkaXQnLFxyXG4gICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1maWxlLWVkaXQnLFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXN1Y2Nlc3MnLFxyXG4gICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX3JlcG9ydGluZ19lZGl0JyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgICAgZmllbGQ6ICd2aWV3JyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktZXllJyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi1pbmZvJyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfdmlldycsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICAgIGZpZWxkOiAnZXhwb3J0JyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktZmlsZS1leHBvcnQnLFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWhlbHAnLFxyXG4gICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX3JlcG9ydGluZ19leHBvcnQnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ2ltcG9ydCcsXHJcbiAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLXBhcGVyY2xpcCcsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgcC1idXR0b24td2FybmluZycsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfcmVwb3J0aW5nX2ltcG9ydCcsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICAgIGZpZWxkOiAnZGVmYXVsdCcsXHJcbiAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWJvb2ttYXJrLWZpbGwnLFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0JyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfc2V0X2RlZmF1bHQnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ2RlbGV0ZScsXHJcbiAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLXRyYXNoJyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi1kYW5nZXInLFxyXG4gICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX3JlcG9ydGluZ19kZWxldGVfcmVwb3J0JyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgICAgZmllbGQ6ICdBZGRfVG9fQnVpbHRJbl9UZW1wbGF0ZXMnLFxyXG4gICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1hcnJvdy1jaXJjbGUtZG93bicsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgcC1idXR0b24taGVscCcsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfcmVwb3J0aW5nX2V4cG9ydF9kZXZfcmVwb3J0JyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgICAgZmllbGQ6ICdNYWtlX2RlZmF1bHRfcmVwb3J0X2xheW91dCcsXHJcbiAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWJvb2ttYXJrLWZpbGwnLFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWRhbmdlcicsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfcmVwb3J0aW5nX21ha2VfZGVmYXVsdF9yZXBvcnRfbGF5b3V0JyxcclxuICAgICAgfSxcclxuICAgIF07XHJcbiAgICB0aGlzLmRlZmF1bHRUZW1wbGF0ZUNvbHVtbnMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBmaWVsZDogJ25hbWUnLFxyXG4gICAgICAgIGhlYWRlcjogJ3NoYXJlZF9yZXBvcnRpbmdfcmVwb3J0X25hbWUnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgZmllbGQ6ICdyZXBvcnRUeXBlTmFtZScsXHJcbiAgICAgICAgaGVhZGVyOiAnc2hhcmVkX3JlcG9ydGluZ19yZXBvcnRfdHlwZScsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICAgIGZpZWxkOiAnZGVsZXRlRGVmYXVsdFJlcG9ydEZpbGUnLFxyXG4gICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS10cmFzaCcsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgcC1idXR0b24tZGFuZ2VyJyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfZGVsZXRlX2RlZmF1bHRfcmVwb3J0JyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgICAgZmllbGQ6ICdBZGRfRnJvbV9CdWlsdEluX1RlbXBsYXRlcycsXHJcbiAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWFycm93LWNpcmNsZS11cCcsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgcC1idXR0b24tcHJpbWFyeScsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfcmVwb3J0aW5nX2FkZF90b19teV9saXN0X3JlcG9ydCcsXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgY2hlY2tJZklzRGV2TW9kZSgpIHtcclxuICAgIGlmIChTZWdtZW50LnByb2R1Y3Rpb24pIHtcclxuICAgICAgbGV0IGJ1dHRvbkFkQnVpbHRpblRlbXBsYXRlc0luZGV4ID0gdGhpcy5jb2x1bW5zLmZpbmRJbmRleChcclxuICAgICAgICAoY29sOiBHcmlkQ29sdW1uKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gY29sLmZpZWxkID09ICdBZGRfVG9fQnVpbHRJbl9UZW1wbGF0ZXMnO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgaWYgKGJ1dHRvbkFkQnVpbHRpblRlbXBsYXRlc0luZGV4ICE9IC0xKSB7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zLnNwbGljZShidXR0b25BZEJ1aWx0aW5UZW1wbGF0ZXNJbmRleCwgMSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBidXR0b25EZWxldGVEZWZhdWx0UmVwb3J0RmlsZUluZGV4ID1cclxuICAgICAgICB0aGlzLmRlZmF1bHRUZW1wbGF0ZUNvbHVtbnMuZmluZEluZGV4KChjb2w6IEdyaWRDb2x1bW4pID0+IHtcclxuICAgICAgICAgIHJldHVybiBjb2wuZmllbGQgPT0gJ2RlbGV0ZURlZmF1bHRSZXBvcnRGaWxlJztcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChidXR0b25EZWxldGVEZWZhdWx0UmVwb3J0RmlsZUluZGV4ICE9IC0xKSB7XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0VGVtcGxhdGVDb2x1bW5zLnNwbGljZShcclxuICAgICAgICAgIGJ1dHRvbkRlbGV0ZURlZmF1bHRSZXBvcnRGaWxlSW5kZXgsXHJcbiAgICAgICAgICAxXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9oYW5kbGUgTGlmZWN5Y2xlIEhvb2tzXHJcbiAgb3ZlcnJpZGUgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmlzRWRpdGlvblBlcnNvbm5hbGlzZSA9IHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygnYWRtaW5pc3RyYXRpb24nKTtcclxuICAgIHRoaXMuY2hlY2tJZklzRGV2TW9kZSgpO1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgIC8vIGlmICh0aGlzLm90aGVyRm9ybU5hbWUgKSB7XHJcbiAgICB0aGlzLmlzRnJvbUZvcm0gPSB0cnVlO1xyXG4gICAgdGhpcy5jb2x1bW5zLnNwbGljZSgzLCAwLCB7XHJcbiAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgIGZpZWxkOiAncHJpbnQnLFxyXG4gICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLXByaW50JyxcclxuICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgcC1idXR0b24tc2Vjb25kYXJ5JyxcclxuICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfcmVwb3J0aW5nX3JlcG9ydF9wcmludCcsXHJcbiAgICB9KTtcclxuICAgIGlmICh0aGlzLm90aGVyRm9ybU5hbWUgJiYgdGhpcy5vdGhlckZvcm1OYW1lICE9ICdhcHAtbWFuYWdlLXJlcG9ydGluZycpIHtcclxuICAgICAgdGhpcy5mb3JtTmFtZXMgPSBbeyBrZXk6IHRoaXMub3RoZXJGb3JtTmFtZSwgdmFsdWU6IHRoaXMub3RoZXJGb3JtTmFtZSB9XTtcclxuICAgIH1cclxuICAgIHRoaXMuZW50aXR5SWQgPSB0aGlzLmNvbmZpZy5kYXRhPy5pZDtcclxuICAgIHRoaXMuY3VzdG9tUmVwb3J0aW5nTW9kZSA9IHRoaXMuY29uZmlnPy5kYXRhPy5jdXN0b21SZXBvcnRpbmdNb2RlO1xyXG4gICAgdGhpcy5odHRwTWV0aG9kVHlwZSA9IHRoaXMuY29uZmlnPy5kYXRhPy5odHRwTWV0aG9kVHlwZTtcclxuICAgIGF3YWl0IHRoaXMuX3JlZnJlc2hSZXBvcnRzKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xyXG5cclxuICAgIGlmICh0aGlzLnJlZnJlc2hKb2JUaW1lT3V0KSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlZnJlc2hKb2JUaW1lT3V0KTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBoYW5kbGUgZXZlbnRzXHJcbiAgYXN5bmMgb25SZWZyZXNoKCkge1xyXG4gICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHModHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBvblByaW50RGVmYXVsdChldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5vdGhlckZvcm1OYW1lKSB7XHJcbiAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZS5nZXREZWZhdWx0UmVwb3J0KHRoaXMub3RoZXJGb3JtTmFtZSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgLy8gbGV0IGRlZmF1bHRSZXBvcnRJZDogc3RyaW5nID0gZGF0YTtcclxuICAgICAgICAgIHRoaXMuX3ZpZXdSZXBvcnQoZGF0YS51aWQpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7IH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25GaWxlU2VsZWN0ZWQoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgZmlsZTogRmlsZSA9IGV2ZW50LmN1cnJlbnRGaWxlc1swXTtcclxuICAgIHRoaXMudG9VcGxvYWRGaWxlRGF0YSA9IGZpbGU7XHJcbiAgfVxyXG5cclxuICBvbkltcG9ydEZpbGUoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgIC51cGxvYWRSZXBvcnRGaWxlKHRoaXMudG9VcGxvYWRGaWxlRGF0YSwgdGhpcy5yZXBvcnREaXNjcmltaW5hdG9yKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiBhc3luYyAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuX3JlZnJlc2hSZXBvcnRzKCk7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfcmVwb3J0X3VwbG9hZGVkX3N1Y2Nlc3NmdWxseSdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLmZpbGVVcGxvYWQ/LmNsZWFyKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vY2FuY2VsIGJ1dHRvbiBjbGlja1xyXG4gIG9uQ2xlYXIoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy50b1VwbG9hZEZpbGVEYXRhID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgLy9jYW5jZWwgYnV0dG9uIGNsaWNrXHJcbiAgb25SZW1vdmUoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy50b1VwbG9hZEZpbGVEYXRhID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlQnV0dG9uQ29sdW1uQ2xpY2tlZChldmVudDogQnV0dG9uQ2xpY2tSZXN1bHQpOiB2b2lkIHtcclxuICAgIHN3aXRjaCAoZXZlbnQuZmllbGQpIHtcclxuICAgICAgY2FzZSAnc2VuZCc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnc2VuZCcpO1xyXG4gICAgICAgIHRoaXMuX3NlbmRSZXBvcnQoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdlZGl0Jzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdlZGl0Jyk7XHJcbiAgICAgICAgdGhpcy5fZWRpdFJlcG9ydChldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ3ZpZXcnOiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3ZpZXcnKTtcclxuICAgICAgICB0aGlzLl92aWV3RGFzaGJvYXJkdChldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ2RlbGV0ZSc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZGVsZXRlJyk7XHJcbiAgICAgICAgdGhpcy5fZGVsZXRlUmVwb3J0KGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAncHJpbnQnOiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3ByaW50Jyk7XHJcbiAgICAgICAgdGhpcy5fdmlld1JlcG9ydChldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ2V4cG9ydCc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZXhwb3J0Jyk7XHJcbiAgICAgICAgdGhpcy5fZXhwb3J0UmVwb3J0KGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnZGVmYXVsdCc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZGVmYXVsdCcpO1xyXG4gICAgICAgIHRoaXMuX3NldERlZmF1bHRSZXBvcnQoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdpbXBvcnQnOiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2ltcG9ydCcpO1xyXG4gICAgICAgIHRoaXMuX2ltcG9ydFRvUmVwb3J0KGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnQWRkX0Zyb21fQnVpbHRJbl9UZW1wbGF0ZXMnOiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0FkZF9Gcm9tX0J1aWx0SW5fVGVtcGxhdGVzJyk7XHJcbiAgICAgICAgdGhpcy5fYWRkRnJvbUJ1aWx0SW5UZW1wbGF0ZXMoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdBZGRfVG9fQnVpbHRJbl9UZW1wbGF0ZXMnOiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0FkZF9Ub19CdWlsdEluX1RlbXBsYXRlcycpO1xyXG4gICAgICAgIHRoaXMuX2FkZFRvQnVpbHRJblRlbXBsYXRlcyhldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ3ByZXZpZXcnOiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3ByZXZpZXcnKTtcclxuICAgICAgICB0aGlzLnByZXZpZXdCdWlsdEluUmVwb3J0VGVtcGxhdGUoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdNYWtlX2RlZmF1bHRfcmVwb3J0X2xheW91dCc6IHtcclxuICAgICAgICB0aGlzLm1ha2VSZXBvcnREZWZhdWx0TGF5b3V0KGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnZGVsZXRlRGVmYXVsdFJlcG9ydEZpbGUnOiB7XHJcbiAgICAgICAgdGhpcy5kZWxldGVEZWZhdWx0UmVwb3J0RmlsZShldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkZWxldGVEZWZhdWx0UmVwb3J0RmlsZShmaWxlTmFtZTogYW55KSB7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybShcclxuICAgICAgTG9jYWxpemF0aW9uS2V5cy5jb25maXJtRGVsZXRlLFxyXG4gICAgICB1bmRlZmluZWQsXHJcbiAgICAgIChyZXN1bHQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICBsZXQgZm9ybU5hbWUgPSB0aGlzLm90aGVyRm9ybU5hbWUgPz8gdGhpcy5FRElUSU9OX1BFUlNPTk5BTElTRTtcclxuICAgICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgICAgICAuZGVsZXRlRGVmYXVsdFJlcG9ydFRlbXBsYXRlRmlsZShmb3JtTmFtZSwgZmlsZU5hbWUpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgIG5leHQ6IGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlZnJlc2hSZXBvcnRzKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICAgIExvY2FsaXphdGlvbktleXMuZGVsZXRlZFN1Y2Nlc3NmdWxseVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb25EZWxldGVTZWxlY3RlZFJlcG9ydHMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybShcclxuICAgICAgTG9jYWxpemF0aW9uS2V5cy5jb25maXJtRGVsZXRlLFxyXG4gICAgICB1bmRlZmluZWQsXHJcbiAgICAgIChyZXN1bHQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICByZXN1bHQgJiZcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZXBvcnRzICE9IG51bGwgJiZcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZXBvcnRzICE9IHVuZGVmaW5lZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5kZWxldGVNdWx0aXBsZVJlcG9ydHModGhpcy5zZWxlY3RlZFJlcG9ydHMpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgIG5leHQ6IGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlZnJlc2hSZXBvcnRzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uS2V5cy5kZWxldGVkU3VjY2Vzc2Z1bGx5XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb25OZXdSZXBvcnQoKTogdm9pZCB7XHJcbiAgICBpZiAoXHJcbiAgICAgICh0aGlzLm90aGVyRm9ybUVuZHBvaW50ICYmIHRoaXMub3RoZXJGb3JtTmFtZSkgfHxcclxuICAgICAgdGhpcy5pc0VkaXRpb25QZXJzb25uYWxpc2VcclxuICAgICkge1xyXG4gICAgICBsZXQgcmVwb3J0VG9UZW1wbGF0ZUlkOiBudW1iZXI7XHJcbiAgICAgIGxldCBtb2RhbFNpemUgPSBNb2RhbFNpemVFbnVtLkxhcmdlO1xyXG4gICAgICBsZXQgY29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICAgIHdpZHRoOiBtb2RhbFNpemUud2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBtb2RhbFNpemUuaGVpZ2h0LFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIG1vZGU6IE1vZGVzLmNyZWF0ZSxcclxuICAgICAgICAgIGlzRWRpdGlvblBlcnNvbm5hbGlzZTogdGhpcy5pc0VkaXRpb25QZXJzb25uYWxpc2UsXHJcbiAgICAgICAgICBmcm9tRW5kcG9pbnQ6IHRoaXMub3RoZXJGb3JtRW5kcG9pbnQsXHJcbiAgICAgICAgICByZXBvcnRCdXNpbmVzc0NsYXNzOiB0aGlzLmJ1c2luZXNzQ2xhc3MsXHJcbiAgICAgICAgICBjdXN0b21SZXBvcnRpbmdNb2RlOiB0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGUsXHJcbiAgICAgICAgfSxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuX2RpYWxvZ1JlZiA9IHRoaXMuX3RzaU1vZGFsU2VydmljZS5vcGVuKFxyXG4gICAgICAgIEFkZFJlcG9ydFBvcHVwQ29tcG9uZW50LFxyXG4gICAgICAgIGNvbmZpZ1xyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5fZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHJldHVybjtcclxuICAgICAgICBjb25zb2xlLmxvZyh2YWwpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pc1JlcG9ydEZvckZpY2hlKSB7XHJcbiAgICAgICAgICB2YWwuZW5kUG9pbnRWYWx1ZSA9IHZhbD8uZW5kUG9pbnRWYWx1ZT8ucmVwbGFjZUFsbCgne2lkfScsIHRoaXMuZW50aXR5SWQpOyAgICAgICAgICBcclxuICAgICAgICAgIHZhbC5lbmRQb2ludFZhbHVlID0gdmFsPy5lbmRQb2ludFZhbHVlPy5yZXBsYWNlQWxsKCd7YnVzaW5lc3NDbGFzc30nLCB0aGlzLmJ1c2luZXNzQ2xhc3MpO1xyXG5cclxuICAgICAgICAgIHZhbC5lbmRQb2ludEtleSA9IHZhbD8uZW5kUG9pbnRLZXk/LnJlcGxhY2VBbGwoJ3tpZH0nLCB0aGlzLmVudGl0eUlkKTtcclxuICAgICAgICAgIHZhbC5lbmRQb2ludEtleSA9IHZhbD8uZW5kUG9pbnRLZXk/LnJlcGxhY2VBbGwoJ3tidXNpbmVzc0NsYXNzfScsIHRoaXMuYnVzaW5lc3NDbGFzcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgICAgIC5hZGRSZXBvcnRUb01vZGVsKFxyXG4gICAgICAgICAgICB0aGlzLl9uZXdSZXBvcnRUb1RlbXBsYXRlKFxyXG4gICAgICAgICAgICAgIHZhbC5yZXBvcnRUeXBlLFxyXG4gICAgICAgICAgICAgIHZhbC5yZXBvcnROYW1lLFxyXG4gICAgICAgICAgICAgIHZhbC5lbmRQb2ludFZhbHVlLFxyXG4gICAgICAgICAgICAgIHZhbC5tb2R1bGUsXHJcbiAgICAgICAgICAgICAgdmFsLnRyaU9yZHJlLFxyXG4gICAgICAgICAgICAgIHZhbC5yZXBvcnROYW1lQWJyZWdlLFxyXG4gICAgICAgICAgICAgIHZhbC5kaXNwbGF5XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiBhc3luYyAodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgcmVwb3J0VG9UZW1wbGF0ZUlkID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgbGV0IHVybERlc2lnbmVyO1xyXG4gICAgICAgICAgICAgIGxldCB0ZW5hbnRVaWQgPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pZGVudGl0eU1hbmFnZXJTZXJ2aWNlLnBhcnNlTXlBdXRoVG9rZW4oKT8udGVuYW50VWlkO1xyXG5cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMub25SZWZyZXNoKClcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHZhbC5yZXBvcnRUeXBlID09PSBUc2lSZXBvcnRUeXBlLkxpc3QpIHtcclxuICAgICAgICAgICAgICAgIHVybERlc2lnbmVyID0gYCR7U2VnbWVudC5yZXBvcnRpbmdTZXJ2aWNlQmFzZX0vcmVwb3J0LWRlc2lnbmVyLyR7cmVwb3J0VG9UZW1wbGF0ZUlkfT8ke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnRlbmFudFVpZH09JHt0ZW5hbnRVaWR9YDtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbC5yZXBvcnRUeXBlID09PSBUc2lSZXBvcnRUeXBlLkRhc2hib2FyZCkge1xyXG4gICAgICAgICAgICAgICAgdXJsRGVzaWduZXIgPSBgJHtTZWdtZW50LmFwcEJhc2VIcmVmfS8ke3RoaXMuZGFzaGJvYXJkTW9kdWxlUm91dGV9LyR7TWFuYWdlUmVwb3J0aW5nUm91dGVzLmRhc2hib2FyZERlc2lnbmVyfT8ke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnJlcG9ydFRvVGVtcGxhdGV9PSR7cmVwb3J0VG9UZW1wbGF0ZUlkfSYke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnRlbmFudFVpZH09JHt0ZW5hbnRVaWR9YDtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbC5yZXBvcnRUeXBlID09PSBUc2lSZXBvcnRUeXBlLlJURikge1xyXG4gICAgICAgICAgICAgICAgdXJsRGVzaWduZXIgPSBgJHtTZWdtZW50LnJlcG9ydGluZ1NlcnZpY2VCYXNlfS9tYWlsbWVyZ2UvJHtyZXBvcnRUb1RlbXBsYXRlSWR9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgd2luZG93Lm9wZW4odXJsRGVzaWduZXIsICdfYmxhbmsnKTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19yZWRpcmVjdGVkX3RvX25ld19yZXBvcnRfc3VjY2Vzc2Z1bGx5J1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fY2xvc2VNb2RhbCh2YWwpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Nsb3NlTW9kYWwodmFsOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9kaWFsb2dSZWYpIHtcclxuICAgICAgdGhpcy5fZGlhbG9nUmVmLmRlc3Ryb3koKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIG9uRm9ybUNoYW5nZSgpIHtcclxuICAgIGF3YWl0IHRoaXMuX3JlZnJlc2hSZXBvcnRzKCk7XHJcbiAgfVxyXG5cclxuICBvbkltcG9ydEZpbGVUb1JlcG9ydE1vZGFsQ2FuY2VsQ2xpY2soKTogdm9pZCB7XHJcbiAgICB0aGlzLl9oaWRlSW1wb3J0RmlsZVRvUmVwb3J0RGlhbG9nKCk7XHJcbiAgfVxyXG5cclxuICBvbkltcG9ydEZpbGVUb1JlcG9ydE1vZGFsU2F2ZUNsaWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc2hvd0ltcG9ydEZpbGVUb1JlcG9ydERpYWxvZygpO1xyXG4gIH1cclxuICAvLyNyZWdpb24gZmlsZSBpbXBvcnRcclxuICBvbkltcG9ydEZpbGVUb1JlcG9ydF9GaWxlU2VsZWN0ZWQoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgZmlsZTogRmlsZSA9IGV2ZW50LmN1cnJlbnRGaWxlc1swXTtcclxuICAgIHRoaXMudG9VcGxvYWRUb1VwZGF0ZVJlcG9ydEZpbGVEYXRhID0gZmlsZTtcclxuICB9XHJcblxyXG4gIG9uSW1wb3J0RmlsZVRvUmVwb3J0X0ltcG9ydEZpbGUoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSZXBvcnRUb1VwZGF0ZUZyb21GaWxlKSB7XHJcbiAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgIC51cGRhdGVSZXBvcnRMYXlvdXQoXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVwb3J0VG9VcGRhdGVGcm9tRmlsZSxcclxuICAgICAgICAgIHRoaXMudG9VcGxvYWRUb1VwZGF0ZVJlcG9ydEZpbGVEYXRhXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogYXN5bmMgKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlZnJlc2hSZXBvcnRzKCk7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX3JlcG9ydF91cGxvYWRlZF9zdWNjZXNzZnVsbHknXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuaW1wb3J0RmlsZVRvUmVwb3J0RmlsZVVwbG9hZD8uY2xlYXIoKTtcclxuICAgICAgICAgICAgdGhpcy5faGlkZUltcG9ydEZpbGVUb1JlcG9ydERpYWxvZygpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9jYW5jZWwgYnV0dG9uIGNsaWNrXHJcbiAgb25JbXBvcnRGaWxlVG9SZXBvcnRfQ2xlYXIoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy50b1VwbG9hZFRvVXBkYXRlUmVwb3J0RmlsZURhdGEgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvL2NhbmNlbCBidXR0b24gY2xpY2tcclxuICBvbkltcG9ydEZpbGVUb1JlcG9ydF9SZW1vdmUoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy50b1VwbG9hZFRvVXBkYXRlUmVwb3J0RmlsZURhdGEgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIHByaXZhdGUgbWV0aG9kc1xyXG4gIHByaXZhdGUgYXN5bmMgX3JlZnJlc2hSZXBvcnRzKHJlZnJlc2hSZXBvcnRMaXN0OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgIGxldCBmb3JtTmFtZSA9IHRoaXMub3RoZXJGb3JtTmFtZVxyXG4gICAgICA/IHRoaXMub3RoZXJGb3JtTmFtZVxyXG4gICAgICA6IHRoaXMuRURJVElPTl9QRVJTT05OQUxJU0U7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGl0ZW1zID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmdldFJlcG9ydHMoZm9ybU5hbWUsIHRoaXMucmVwb3J0RGlzY3JpbWluYXRvcilcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5yZXBvcnRzID0gaXRlbXMubWFwKChyKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLnIsXHJcbiAgICAgICAgICByZXBvcnRUeXBlTmFtZTpcclxuICAgICAgICAgICAgTWFuYWdlUmVwb3J0aW5nQ29tcG9uZW50LnJlcG9ydFR5cGVMYWJlbHNbci5yZXBvcnRUeXBlXSB8fFxyXG4gICAgICAgICAgICAnVW5rbm93bicsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlZnJlc2hSZXBvcnRMaXN0KSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgLy9nZXQgZGVmYXVsdCByZXBvcnQgdGVtcGxhdGVzIGZvciB0aGlzIGZvcm1cclxuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuZ2V0RGVmYXVsdFJlcG9ydFRlbXBsYXRlKGZvcm1OYW1lKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0UmVwb3J0VGVtcGxhdGVEYXRhID0gcmVzdWx0Py5kYXRhO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikgeyB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBfdmlld1JlcG9ydCh1aWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgLy8gaWYgKHRoaXMub3RoZXJGb3JtRW5kcG9pbnQgJiYgdWlkKSB7XHJcbiAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgbGV0IHJlcG9ydCA9IHRoaXMucmVwb3J0cy5maW5kKChyKSA9PiByLnVpZCA9PT0gdWlkKTtcclxuICAgIGlmIChyZXBvcnQgPT09IHVuZGVmaW5lZCB8fCByZXBvcnQgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAuYWRkUmVwb3J0VG9QcmludChcclxuICAgICAgICB0aGlzLl9uZXdSZXBvcnRUb1ByaW50KHVpZCwgcmVwb3J0LnJlcG9ydFR5cGUsIHJlcG9ydD8ucmVzdEVuZHBvaW50KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgIGxldCByZXBvcnRUb1RlbXBsYXRlSWQgPSBkYXRhLnVpZDtcclxuICAgICAgICAgIGxldCB1cmxEZXNpZ25lcjtcclxuICAgICAgICAgIGxldCB0ZW5hbnRVaWQgPVxyXG4gICAgICAgICAgICB0aGlzLmlkZW50aXR5TWFuYWdlclNlcnZpY2UucGFyc2VNeUF1dGhUb2tlbigpPy50ZW5hbnRVaWQ7XHJcbiAgICAgICAgICBpZiAoZGF0YS5yZXBvcnRUeXBlID09PSBUc2lSZXBvcnRUeXBlLkxpc3QpIHtcclxuICAgICAgICAgICAgdXJsRGVzaWduZXIgPSBgJHtTZWdtZW50LnJlcG9ydGluZ1NlcnZpY2VCYXNlfS9yZXBvcnQtdmlld2VyLyR7cmVwb3J0VG9UZW1wbGF0ZUlkfT8ke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnRlbmFudFVpZH09JHt0ZW5hbnRVaWR9YDtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5yZXBvcnRUeXBlID09PSBUc2lSZXBvcnRUeXBlLkRhc2hib2FyZCkge1xyXG4gICAgICAgICAgICB1cmxEZXNpZ25lciA9IGAke1NlZ21lbnQuYXBwQmFzZUhyZWZ9LyR7dGhpcy5kYXNoYm9hcmRNb2R1bGVSb3V0ZX0vJHtNYW5hZ2VSZXBvcnRpbmdSb3V0ZXMuZGFzaGJvYXJkVmlld2VyfT8ke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnJlcG9ydFRvUHJpbnR9PSR7cmVwb3J0VG9UZW1wbGF0ZUlkfSYke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnRlbmFudFVpZH09JHt0ZW5hbnRVaWR9YDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB3aW5kb3cub3Blbih1cmxEZXNpZ25lciwgJ19ibGFuaycpO1xyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX3JlZGlyZWN0ZWRfdG9fcHJpbnRfcmVwb3J0X3N1Y2Nlc3NmdWxseSdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7IH0sXHJcbiAgICAgIH0pO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgX3NlbmRSZXBvcnQodWlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCByZXBvcnQgPSB0aGlzLnJlcG9ydHMuZmluZCgocikgPT4gci51aWQgPT09IHVpZCk7XHJcbiAgICBpZiAocmVwb3J0ID09PSB1bmRlZmluZWQgfHwgcmVwb3J0ID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBtb2RhbFNpemUgPSBNb2RhbFNpemVFbnVtLlhNZWRpdW07XHJcbiAgICBsZXQgc2F2ZVN1YmplY3Q6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgICBsZXQgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgZGF0YTogeyBzYXZlU3ViamVjdCB9LFxyXG4gICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgd2lkdGg6IG1vZGFsU2l6ZS53aWR0aCxcclxuICAgICAgaGVpZ2h0OiBtb2RhbFNpemUuaGVpZ2h0LFxyXG4gICAgfTtcclxuICAgIHRoaXMuX2RpYWxvZ1JlZiA9IHRoaXMuX3RzaU1vZGFsU2VydmljZS5vcGVuKFxyXG4gICAgICBUc2lTZW5kTWFpbENvbXBvbmVudCxcclxuICAgICAgY29uZlxyXG4gICAgKTtcclxuICAgIHNhdmVTdWJqZWN0LnN1YnNjcmliZSgodmFsOiBFbWFpbEluZm9ybWF0aW9uKSA9PiB7XHJcbiAgICAgIGlmICghdmFsKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdmFsLnRvQWRkcmVzcykge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIGlmICghdmFsLnN1YmplY3QpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICBsZXQgcmVwb3J0VG9QcmludCA9IHRoaXMuX25ld1JlcG9ydFRvUHJpbnQoXHJcbiAgICAgICAgdWlkLFxyXG4gICAgICAgIHJlcG9ydCEucmVwb3J0VHlwZSxcclxuICAgICAgICByZXBvcnQ/LnJlc3RFbmRwb2ludFxyXG4gICAgICApXHJcbiAgICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgICAgLmV4cG9ydFJlcG9ydEZpbGVUb1BkZihyZXBvcnRUb1ByaW50KVxyXG4gICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5leHQ6IGFzeW5jIChibG9iKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgbmV3RmlsZSA9IG5ldyBGaWxlKFtibG9iXSwgJ1JlcG9ydC5wZGYnLCB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBibG9iLnR5cGUsXHJcbiAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgIGxldCBhdHRhY2htZW50czogRmlsZVtdID0gW107XHJcbiAgICAgICAgICAgICAgYXR0YWNobWVudHMucHVzaChuZXdGaWxlKVxyXG4gICAgICAgICAgICAgIHRoaXMuX21haWxpbmdTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAuc2VuZE1haWwoXHJcbiAgICAgICAgICAgICAgICAgIHZhbC50b0FkZHJlc3MhLFxyXG4gICAgICAgICAgICAgICAgICB2YWwuc3ViamVjdCEsXHJcbiAgICAgICAgICAgICAgICAgIHZhbC5tZXNzYWdlID8/IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzLFxyXG4gICAgICAgICAgICAgICAgICB2YWwuY2NBZGRyZXNzXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuaW5mbyhcclxuICAgICAgICAgICAgICAgICAgICAgIExvY2FsaXphdGlvbktleXMuc2VudFN1Y2Nlc3NGdWxseVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLnNob3dFcnJvck1lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgICAgICAgICBlcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZG93bmxvYWRpbmcgdGhlIFBERicsIGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19yZWRpcmVjdGVkX3RvX3ByaW50X3JlcG9ydF9zdWNjZXNzZnVsbHknXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX2RpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuX2Nsb3NlTW9kYWwodmFsKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgX2VkaXRSZXBvcnQodWlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBsZXQgcmVwb3J0ID0gdGhpcy5yZXBvcnRzLmZpbmQoKHIpID0+IHIudWlkID09PSB1aWQpO1xyXG5cclxuICAgIGlmIChyZXBvcnQgPT09IHVuZGVmaW5lZCB8fCByZXBvcnQgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgIC5hZGRSZXBvcnRUb0VkaXRUZW1wbGF0ZShcclxuICAgICAgICB0aGlzLl9uZXdSZXBvcnRUb0VkaXRUZW1wbGF0ZShcclxuICAgICAgICAgIHVpZCxcclxuICAgICAgICAgIHJlcG9ydC5yZXBvcnRUeXBlLFxyXG4gICAgICAgICAgcmVwb3J0Py5yZXN0RW5kcG9pbnQsXHJcbiAgICAgICAgICByZXBvcnQ/Lm1vZHVsZSxcclxuICAgICAgICAgIHJlcG9ydD8ub3JkZXIsXHJcbiAgICAgICAgICByZXBvcnQ/LnJlcG9ydE5hbWUsXHJcbiAgICAgICAgICByZXBvcnQ/LnNob3J0TmFtZSxcclxuICAgICAgICAgIHJlcG9ydD8uZGlzcGxheVxyXG4gICAgICAgIClcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAodmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2codmFsdWUpO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmlzUmVwb3J0Rm9yRmljaGUpIHtcclxuICAgICAgICAgICAgY29uc3QgZ3VpZFJlZ2V4ID0gL1swLTlhLWZBLUYtXXszNn0vZztcclxuICAgICAgICAgICAgdmFsdWUucmVzdEVuZHBvaW50ID0gdmFsdWU/LnJlc3RFbmRwb2ludD8ucmVwbGFjZUFsbChcclxuICAgICAgICAgICAgICBndWlkUmVnZXgsXHJcbiAgICAgICAgICAgICAgJ3tpZH0nXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgbGV0IGNvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIHdpZHRoOiBNb2RhbFNpemVFbnVtLkxhcmdlLndpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IE1vZGFsU2l6ZUVudW0uTGFyZ2UuaGVpZ2h0LFxyXG4gICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxyXG4gICAgICAgICAgICAgIG1vZGU6IE1vZGVzLmVkaXQsXHJcbiAgICAgICAgICAgICAgaXNFZGl0aW9uUGVyc29ubmFsaXNlOiB0aGlzLmlzRWRpdGlvblBlcnNvbm5hbGlzZSxcclxuICAgICAgICAgICAgICBmcm9tRW5kcG9pbnQ6IHRoaXMub3RoZXJGb3JtRW5kcG9pbnRcclxuICAgICAgICAgICAgICAgID8gdGhpcy5vdGhlckZvcm1FbmRwb2ludFxyXG4gICAgICAgICAgICAgICAgOiByZXBvcnQ/LnJlc3RFbmRwb2ludCxcclxuICAgICAgICAgICAgICByZXBvcnRCdXNpbmVzc0NsYXNzOiB0aGlzLmJ1c2luZXNzQ2xhc3MsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy5fZGlhbG9nUmVmID0gdGhpcy5fdHNpTW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgICAgICAgIEFkZFJlcG9ydFBvcHVwQ29tcG9uZW50LFxyXG4gICAgICAgICAgICBjb25maWdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLl9kaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGxldCBtb2RlbDogUmVwb3J0VG9FZGl0VGVtcGxhdGVQYXlsb2FkID0ge1xyXG4gICAgICAgICAgICAgIHJlcG9ydFRlbXBsYXRlVWlkOiB1aWQsXHJcbiAgICAgICAgICAgICAgcmVwb3J0TmFtZTogdmFsLnJlcG9ydE5hbWUsXHJcbiAgICAgICAgICAgICAgcmVzdEVuZHBvaW50OiB0aGlzLmlzUmVwb3J0Rm9yRmljaGVcclxuICAgICAgICAgICAgICAgID8gdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmluc2VydE5ld1VpZEluUmVzdEVuZFBvaW50KFxyXG4gICAgICAgICAgICAgICAgICB2YWw/LmVuZFBvaW50VmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuaWRcclxuICAgICAgICAgICAgICAgICkgPz8gdGhpcy5vdGhlckZvcm1FbmRwb2ludFxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLm90aGVyRm9ybUVuZHBvaW50LFxyXG4gICAgICAgICAgICAgIG1vZHVsZTogdmFsLm1vZHVsZSxcclxuICAgICAgICAgICAgICBvcmRlcjogdmFsLnRyaU9yZHJlLFxyXG4gICAgICAgICAgICAgIHNob3J0TmFtZTogdmFsLnJlcG9ydE5hbWVBYnJlZ2UsXHJcbiAgICAgICAgICAgICAgZGlzcGxheTogdmFsLmRpc3BsYXksXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuZWRpdFJlcG9ydFRvRWRpdFRlbXBsYXRlKG1vZGVsKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbmV4dCA6IGFzeW5jICh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9uUmVmcmVzaCgpXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGxldCByZXBvcnRUb1RlbXBsYXRlSWQgPSB2YWx1ZS51aWQ7XHJcbiAgICAgICAgICAgIGxldCB1cmxEZXNpZ25lcjtcclxuICAgICAgICAgICAgbGV0IHRlbmFudFVpZCA9XHJcbiAgICAgICAgICAgICAgdGhpcy5pZGVudGl0eU1hbmFnZXJTZXJ2aWNlLnBhcnNlTXlBdXRoVG9rZW4oKT8udGVuYW50VWlkO1xyXG5cclxuICAgICAgICAgICAgbGV0IGNhbnJlZGlyZWN0ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NhblJlZGlyZWN0Jyk7XHJcblxyXG4gICAgICAgICAgICBpZiAodmFsdWUucmVwb3J0VHlwZSA9PT0gVHNpUmVwb3J0VHlwZS5MaXN0KSB7XHJcbiAgICAgICAgICAgICAgdXJsRGVzaWduZXIgPSBgJHtTZWdtZW50LnJlcG9ydGluZ1NlcnZpY2VCYXNlfS9yZXBvcnQtZGVzaWduZXItZWRpdC8ke3JlcG9ydFRvVGVtcGxhdGVJZH0/JHtxdWVyeVBhcmFtTmFtZXNDb25zdC50ZW5hbnRVaWR9PSR7dGVuYW50VWlkfWA7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUucmVwb3J0VHlwZSA9PT0gVHNpUmVwb3J0VHlwZS5EYXNoYm9hcmQpIHtcclxuICAgICAgICAgICAgICB1cmxEZXNpZ25lciA9IGAke1NlZ21lbnQuYXBwQmFzZUhyZWZ9LyR7dGhpcy5kYXNoYm9hcmRNb2R1bGVSb3V0ZX0vJHtNYW5hZ2VSZXBvcnRpbmdSb3V0ZXMuZGFzaGJvYXJkRGVzaWduZXJ9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QucmVwb3J0VG9FZGl0fT0ke3JlcG9ydFRvVGVtcGxhdGVJZH0mJHtxdWVyeVBhcmFtTmFtZXNDb25zdC50ZW5hbnRVaWR9PSR7dGVuYW50VWlkfWA7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUucmVwb3J0VHlwZSA9PT0gVHNpUmVwb3J0VHlwZS5SVEYpIHtcclxuICAgICAgICAgICAgICB1cmxEZXNpZ25lciA9IGAke1NlZ21lbnQucmVwb3J0aW5nU2VydmljZUJhc2V9L21haWxtZXJnZS1lZGl0LyR7cmVwb3J0VG9UZW1wbGF0ZUlkfT8ke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnRlbmFudFVpZH09JHt0ZW5hbnRVaWR9YDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNhbnJlZGlyZWN0ICYmIEpTT04ucGFyc2UoY2FucmVkaXJlY3QpID09IHRydWUpIHtcclxuICAgICAgICAgICAgICB3aW5kb3cub3Blbih1cmxEZXNpZ25lciwgJ19ibGFuaycpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19yZWRpcmVjdGVkX3RvX2VkaXRfcmVwb3J0X3N1Y2Nlc3NmdWxseSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kZWxldGVSZXBvcnQodWlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKFxyXG4gICAgICBMb2NhbGl6YXRpb25LZXlzLmNvbmZpcm1EZWxldGUsXHJcbiAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgKHJlc3VsdDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQgJiYgdWlkICE9IG51bGwgJiYgdWlkICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmRlbGV0ZVJlcG9ydCh1aWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAgIExvY2FsaXphdGlvbktleXMuZGVsZXRlZFN1Y2Nlc3NmdWxseVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHMoKTtcclxuICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXREZWZhdWx0UmVwb3J0KGlkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKFxyXG4gICAgICAnc2hhcmVkX3JlcG9ydGluZ19jb25maXJtX3NldF9kZWZhdWx0X3JlcG9ydF9maWxlJyxcclxuICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAocmVzdWx0OiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCAmJiBpZCAhPSBudWxsICYmIGlkICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5zZXREZWZhdWx0UmVwb3J0KGlkLCB0aGlzLnJlcG9ydERpc2NyaW1pbmF0b3IpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgIG5leHQ6IGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25LZXlzLnNhdmVkU3VjY2Vzc2Z1bGx5XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2V4cG9ydFJlcG9ydCh1aWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHVpZCkge1xyXG4gICAgICBsZXQgcmVwb3J0TmFtZTogc3RyaW5nID0gJ2ZpbGUtbmFtZS5qc29uJztcclxuICAgICAgbGV0IHJlcG9ydCA9IHRoaXMucmVwb3J0cy5maW5kKChyKSA9PiByLnVpZCA9PSB1aWQpO1xyXG4gICAgICBpZiAocmVwb3J0KSB7XHJcbiAgICAgICAgcmVwb3J0TmFtZSA9IHJlcG9ydC5uYW1lO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmV4cG9ydFJlcG9ydEZpbGUodWlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgbGV0IGZpbGUgPSBuZXcgQmxvYihbcmVzcG9uc2VdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyB9KTtcclxuICAgICAgICAgIHZhciBmaWxlVVJMID0gVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTtcclxuICAgICAgICAgIGxldCByZXBvcnRSb3V0ZSA9IGZpbGVVUkw7XHJcbiAgICAgICAgICB2YXIgZG93bmxvYWRMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgICAgZG93bmxvYWRMaW5rLmRvd25sb2FkID0gcmVwb3J0TmFtZTtcclxuICAgICAgICAgIGRvd25sb2FkTGluay5ocmVmID0gcmVwb3J0Um91dGU7XHJcbiAgICAgICAgICBkb3dubG9hZExpbmsuY2xpY2soKTtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19yZXBvcnRfZXhwb3J0ZWRfc3VjY2Vzc2Z1bGx5J1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbXBvcnRUb1JlcG9ydChpZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoaWQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJlcG9ydFRvVXBkYXRlRnJvbUZpbGUgPSBpZDtcclxuICAgICAgdGhpcy5fc2hvd0ltcG9ydEZpbGVUb1JlcG9ydERpYWxvZygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbmV3SnNvbkRhdGFDb25uZWN0aW9uKCk6IEpzb25EYXRhQ29ubmVjdGlvbiB7XHJcbiAgICBpZiAodGhpcy5vdGhlckZvcm1FbmRwb2ludCAhPSBudWxsICYmIHRoaXMub3RoZXJGb3JtRW5kcG9pbnQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGxldCBuZXdKc29uRGF0YUNvbm5lY3Rpb246IEpzb25EYXRhQ29ubmVjdGlvbiA9IHtcclxuICAgICAgICBuYW1lOiBgJHt0aGlzLm90aGVyRm9ybU5hbWV9LUpzb25EU2AsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IHVuZGVmaW5lZCxcclxuICAgICAgICB1cmk6IHRoaXMub3RoZXJGb3JtRW5kcG9pbnQsXHJcbiAgICAgICAgaHR0cFJlcXVlc3RDb250ZW50OiB1bmRlZmluZWQsXHJcbiAgICAgIH07XHJcblxyXG4gICAgICByZXR1cm4gbmV3SnNvbkRhdGFDb25uZWN0aW9uO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgRXJyb3IoJ3NvbWUgb2YgdGhlIHJlcXVpcmVkIHByb3BlcnRpZXMgOiB1cmkgaGF2ZSBub3QgYmVlbiBzZXQgIScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbmV3UmVwb3J0VG9QcmludChcclxuICAgIHVpZDogc3RyaW5nLFxyXG4gICAgcmVwb3J0VHlwZTogbnVtYmVyLFxyXG4gICAgcmVzdEVuZHBvaW50Pzogc3RyaW5nLFxyXG4gICAgbW9kdWxlPzogc3RyaW5nLFxyXG4gICAgb3JkZXI/OiBudW1iZXIsXHJcbiAgICBzaG9ydE5hbWU/OiBzdHJpbmcsXHJcbiAgICBkaXNwbGF5PzogYm9vbGVhblxyXG4gICk6IFJlcG9ydFRvUHJpbnQge1xyXG4gICAgbGV0IHRva2VuID0gdGhpcy5pZGVudGl0eU1hbmFnZXJTZXJ2aWNlLmdldEF1dGhUb2tlbigpO1xyXG4gICAgbGV0IHVzZXJuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQgPVxyXG4gICAgICB0aGlzLmlkZW50aXR5TWFuYWdlclNlcnZpY2UucGFyc2VNeUF1dGhUb2tlbigpLm5hbWU7XHJcbiAgICBpZiAodXNlcm5hbWUpIHtcclxuICAgICAgaWYgKHVpZCAmJiAvKnRoaXMub3RoZXJGb3JtRW5kcG9pbnQgJiYgdGhpcy5vdGhlckZvcm1OYW1lICYmKi8gdG9rZW4pIHtcclxuICAgICAgICBsZXQgbmV3UmVwb3J0VG9QcmludDogUmVwb3J0VG9QcmludCA9IHtcclxuICAgICAgICAgIHJlcG9ydFRlbXBsYXRlVWlkOiB1aWQsXHJcbiAgICAgICAgICByZXN0RW5kcG9pbnQ6IHRoaXMuaXNSZXBvcnRGb3JGaWNoZVxyXG4gICAgICAgICAgICA/IHRoaXMucmVwb3J0aW5nU2VydmljZS5pbnNlcnROZXdVaWRJblJlc3RFbmRQb2ludChcclxuICAgICAgICAgICAgICByZXN0RW5kcG9pbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5pZFxyXG4gICAgICAgICAgICApID8/IHRoaXMub3RoZXJGb3JtRW5kcG9pbnRcclxuICAgICAgICAgICAgOiB0aGlzLm90aGVyRm9ybUVuZHBvaW50LFxyXG4gICAgICAgICAgcmVxdWVzdERhdGE6ICF0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGVcclxuICAgICAgICAgICAgPyB0aGlzLmZvcm1FbmRwb2ludEJvZHlcclxuICAgICAgICAgICAgOiB0aGlzLnJlcXVlc3REYXRhLFxyXG4gICAgICAgICAgZm9ybU5hbWU6IHRoaXMub3RoZXJGb3JtTmFtZSxcclxuICAgICAgICAgIHJlcG9ydFR5cGU6IHJlcG9ydFR5cGUsXHJcbiAgICAgICAgICB1c2VybmFtZTogdXNlcm5hbWUsXHJcbiAgICAgICAgICB1c2VyVG9rZW46IHJlcG9ydFR5cGUgPT0gVHNpUmVwb3J0VHlwZS5EYXNoYm9hcmQgPyB1bmRlZmluZWQgOiB0b2tlbixcclxuICAgICAgICAgIGlzUGFnZWQ6IHRoaXMuaXNGb3JtRW5kcG9pbnRQYWdlZCA9PSB0cnVlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgaHRtbEZpbHRlcnNUZXh0OiB0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGUsXHJcbiAgICAgICAgICBvcHRpb25hbEVuZHBvaW50c0pzb246IHRoaXMub3B0aW9uYWxFbmRwb2ludHMsXHJcbiAgICAgICAgICBtb2R1bGU6IG1vZHVsZSxcclxuICAgICAgICAgIG9yZGVyOiBvcmRlcixcclxuICAgICAgICAgIHNob3J0TmFtZTogc2hvcnROYW1lLFxyXG4gICAgICAgICAgZGlzcGxheTogZGlzcGxheSxcclxuICAgICAgICAgIGh0dHBNZXRob2RUeXBlOiB0aGlzLmh0dHBNZXRob2RUeXBlLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiBuZXdSZXBvcnRUb1ByaW50O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IEVycm9yKFxyXG4gICAgICAgICAgJ3NvbWUgb2YgdGhlIHJlcXVpcmVkIHByb3BlcnRpZXMgOiB1c2VyIHRva2VuLCBmb3JtTmFtZSwgZm9ybUVuZHBvaW50IG9yIHNlbGVjdGVkUmVwb3J0IGhhdmUgbm90IGJlZW4gc2V0ICEnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgRXJyb3IoXCJwcm9wZXJ0eSAnVXNlck5hbWUgJyBvZiBjdXJyZW50IHVzZXIgaGF2ZSBub3QgYmVlbiBzZXQgIVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX25ld1JlcG9ydFRvVGVtcGxhdGUoXHJcbiAgICByZXBvcnRUeXBlOiBUc2lSZXBvcnRUeXBlLFxyXG4gICAgcmVwb3J0TmFtZTogc3RyaW5nLFxyXG4gICAgcmVzdEVuZHBvaW50OiBzdHJpbmcsXHJcbiAgICBtb2R1bGU6IHN0cmluZyxcclxuICAgIG9yZGVyOiBudW1iZXIsXHJcbiAgICBzaG9ydE5hbWU6IHN0cmluZyxcclxuICAgIGRpc3BsYXk6IGJvb2xlYW5cclxuICApOiBSZXBvcnRUb1RlbXBsYXRlIHtcclxuICAgIGxldCB0b2tlbiA9IHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5nZXRBdXRoVG9rZW4oKTtcclxuXHJcbiAgICBpZiAodGhpcy5vdGhlckZvcm1FbmRwb2ludCAmJiB0aGlzLm90aGVyRm9ybU5hbWUgJiYgdG9rZW4pIHtcclxuICAgICAgbGV0IHJlcG9ydFRvVGVtcGxhdGU6IFJlcG9ydFRvVGVtcGxhdGUgPSB7XHJcbiAgICAgICAgcmVzdEVuZHBvaW50OiByZXN0RW5kcG9pbnQsXHJcbiAgICAgICAgcmVxdWVzdERhdGE6ICF0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGVcclxuICAgICAgICAgID8gdGhpcy5mb3JtRW5kcG9pbnRCb2R5XHJcbiAgICAgICAgICA6IHRoaXMucmVxdWVzdERhdGEsXHJcbiAgICAgICAgZm9ybUVudGl0eTogdGhpcy5vdGhlckZvcm1OYW1lLCAvL3RoaXMuZ2V0Rm9ybU5hbWUodGhpcy5vdGhlckZvcm1OYW1lKSwgLy90aGlzLm90aGVyRm9ybU5hbWUsXHJcbiAgICAgICAgdXNlclRva2VuOiByZXBvcnRUeXBlID09IFRzaVJlcG9ydFR5cGUuRGFzaGJvYXJkID8gdW5kZWZpbmVkIDogdG9rZW4sXHJcbiAgICAgICAgcmVwb3J0TmFtZTogcmVwb3J0TmFtZSxcclxuICAgICAgICBpc1BhZ2VkOiB0aGlzLmlzRm9ybUVuZHBvaW50UGFnZWQgPT0gdHJ1ZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICByZXBvcnRUeXBlOiByZXBvcnRUeXBlLCAvL3RoaXMuaXNGb3JtRW5kcG9pbnRQYWdlZCA9PSB0cnVlID8gVHNpUmVwb3J0VHlwZS5MaXN0IDogVHNpUmVwb3J0VHlwZS5Gb3JtLFxyXG4gICAgICAgIG9wdGlvbmFsRW5kcG9pbnRzSnNvbjogdGhpcy5vcHRpb25hbEVuZHBvaW50cyxcclxuICAgICAgICBodG1sRmlsdGVyc1RleHQ6IHRoaXMuZmlsdGVyc0h0bWxUZW1wbGF0ZSxcclxuICAgICAgICBtb2R1bGU6IG1vZHVsZSxcclxuICAgICAgICBvcmRlcjogb3JkZXIsXHJcbiAgICAgICAgc2hvcnROYW1lOiBzaG9ydE5hbWUsXHJcbiAgICAgICAgZGlzcGxheTogZGlzcGxheSxcclxuICAgICAgICBkZXNjcmltaW5hdG9yVmFsdWU6IHRoaXMucmVwb3J0RGlzY3JpbWluYXRvcixcclxuICAgICAgICBodHRwTWV0aG9kVHlwZTogdGhpcy5odHRwTWV0aG9kVHlwZSxcclxuICAgICAgfTtcclxuICAgICAgY29uc29sZS5sb2cocmVwb3J0VG9UZW1wbGF0ZSk7XHJcbiAgICAgIHJldHVybiByZXBvcnRUb1RlbXBsYXRlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHJlcG9ydFRvVGVtcGxhdGU6IFJlcG9ydFRvVGVtcGxhdGUgPSB7XHJcbiAgICAgICAgcmVzdEVuZHBvaW50OlxyXG4gICAgICAgICAgdGhpcy5pc1JlcG9ydEZvckZpY2hlIHx8IHRoaXMuY3VzdG9tUmVwb3J0aW5nTW9kZVxyXG4gICAgICAgICAgICA/IHJlc3RFbmRwb2ludCFcclxuICAgICAgICAgICAgOiB0aGlzLm90aGVyRm9ybUVuZHBvaW50ISxcclxuICAgICAgICByZXF1ZXN0RGF0YTogIXRoaXMuY3VzdG9tUmVwb3J0aW5nTW9kZVxyXG4gICAgICAgICAgPyBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIHNvcnRpbmc6IFt7IHByb3BlcnR5OiAnVUlEJywgb3JkZXI6ICdBU0MnIH1dLFxyXG4gICAgICAgICAgICBnZXRBbGxEYXRhOiB0cnVlLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIDogdGhpcy5yZXF1ZXN0RGF0YSxcclxuICAgICAgICBmb3JtRW50aXR5OiAnJyxcclxuICAgICAgICB1c2VyVG9rZW46IHJlcG9ydFR5cGUgPT0gVHNpUmVwb3J0VHlwZS5EYXNoYm9hcmQgPyB1bmRlZmluZWQgOiB0b2tlbiEsXHJcbiAgICAgICAgcmVwb3J0TmFtZTogcmVwb3J0TmFtZSxcclxuICAgICAgICBpc1BhZ2VkOiB0aGlzLmlzRm9ybUVuZHBvaW50UGFnZWQgPT0gdHJ1ZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICByZXBvcnRUeXBlOiByZXBvcnRUeXBlLCAvL3RoaXMuaXNGb3JtRW5kcG9pbnRQYWdlZCA9PSB0cnVlID8gVHNpUmVwb3J0VHlwZS5MaXN0IDogVHNpUmVwb3J0VHlwZS5Gb3JtLFxyXG4gICAgICAgIG9wdGlvbmFsRW5kcG9pbnRzSnNvbjogdGhpcy5vcHRpb25hbEVuZHBvaW50cyxcclxuICAgICAgICBodG1sRmlsdGVyc1RleHQ6IHRoaXMuZmlsdGVyc0h0bWxUZW1wbGF0ZSxcclxuICAgICAgICBtb2R1bGU6IG1vZHVsZSxcclxuICAgICAgICBvcmRlcjogb3JkZXIsXHJcbiAgICAgICAgc2hvcnROYW1lOiBzaG9ydE5hbWUsXHJcbiAgICAgICAgZGlzcGxheTogZGlzcGxheSxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJldHVybiByZXBvcnRUb1RlbXBsYXRlO1xyXG4gICAgICAvLyB0aHJvdyBFcnJvcignc29tZSBvZiB0aGUgcmVxdWlyZWQgcHJvcGVydGllcyA6IHVzZXIgdG9rZW4sIGZvcm1OYW1lIG9yIGZvcm1FbmRwb2ludCBoYXZlIG5vdCBiZWVuIHNldCAhJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9uZXdSZXBvcnRUb0VkaXRUZW1wbGF0ZShcclxuICAgIHVpZDogc3RyaW5nLFxyXG4gICAgcmVwb3J0VHlwZTogVHNpUmVwb3J0VHlwZSxcclxuICAgIHJlc3RFbmRQb2ludD86IHN0cmluZyxcclxuICAgIG1vZHVsZT86IHN0cmluZyxcclxuICAgIG9yZGVyPzogbnVtYmVyLFxyXG4gICAgcmVwb3J0TmFtZT86IHN0cmluZyxcclxuICAgIHNob3J0TmFtZT86IHN0cmluZyxcclxuICAgIGRpc3BsYXk/OiBib29sZWFuXHJcbiAgKTogUmVwb3J0VG9FZGl0VGVtcGxhdGUge1xyXG4gICAgbGV0IHRva2VuID0gdGhpcy5pZGVudGl0eU1hbmFnZXJTZXJ2aWNlLmdldEF1dGhUb2tlbigpO1xyXG4gICAgbGV0IHVzZXJuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQgPVxyXG4gICAgICB0aGlzLmlkZW50aXR5TWFuYWdlclNlcnZpY2UucGFyc2VNeUF1dGhUb2tlbigpLm5hbWU7XHJcblxyXG4gICAgaWYgKHVzZXJuYW1lKSB7XHJcbiAgICAgIGlmICh1aWQgJiYgLyp0aGlzLm90aGVyRm9ybUVuZHBvaW50ICYmIHRoaXMub3RoZXJGb3JtTmFtZSAmJiovIHRva2VuKSB7XHJcbiAgICAgICAgbGV0IHJlcG9ydFRvRWRpdFRlbXBsYXRlOiBSZXBvcnRUb0VkaXRUZW1wbGF0ZSA9IHtcclxuICAgICAgICAgIHJlc3RFbmRwb2ludDogdGhpcy5pc1JlcG9ydEZvckZpY2hlXHJcbiAgICAgICAgICAgID8gdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmluc2VydE5ld1VpZEluUmVzdEVuZFBvaW50KFxyXG4gICAgICAgICAgICAgIHJlc3RFbmRQb2ludCxcclxuICAgICAgICAgICAgICB0aGlzLmlkXHJcbiAgICAgICAgICAgICkgPz8gdGhpcy5vdGhlckZvcm1FbmRwb2ludFxyXG4gICAgICAgICAgICA6IHRoaXMub3RoZXJGb3JtRW5kcG9pbnQsXHJcbiAgICAgICAgICByZXF1ZXN0RGF0YTogIXRoaXMuY3VzdG9tUmVwb3J0aW5nTW9kZVxyXG4gICAgICAgICAgICA/IHRoaXMuZm9ybUVuZHBvaW50Qm9keVxyXG4gICAgICAgICAgICA6IHRoaXMucmVxdWVzdERhdGEsXHJcbiAgICAgICAgICBmb3JtTmFtZTogdGhpcy5vdGhlckZvcm1OYW1lLCAvLyB0aGlzLmdldEZvcm1OYW1lKHRoaXMub3RoZXJGb3JtTmFtZSEpLFxyXG4gICAgICAgICAgcmVwb3J0VGVtcGxhdGVVaWQ6IHVpZCxcclxuICAgICAgICAgIHJlcG9ydFR5cGU6IHJlcG9ydFR5cGUsXHJcbiAgICAgICAgICB1c2VybmFtZTogdXNlcm5hbWUsXHJcbiAgICAgICAgICB1c2VyVG9rZW46IHJlcG9ydFR5cGUgPT0gVHNpUmVwb3J0VHlwZS5EYXNoYm9hcmQgPyB1bmRlZmluZWQgOiB0b2tlbixcclxuICAgICAgICAgIGlzUGFnZWQ6IHRoaXMuaXNGb3JtRW5kcG9pbnRQYWdlZCA9PSB0cnVlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgb3B0aW9uYWxFbmRwb2ludHNKc29uOiB0aGlzLm9wdGlvbmFsRW5kcG9pbnRzLFxyXG4gICAgICAgICAgaHRtbEZpbHRlcnNUZXh0OiB0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGUsXHJcbiAgICAgICAgICBtb2R1bGU6IG1vZHVsZSxcclxuICAgICAgICAgIG9yZGVyOiBvcmRlcixcclxuICAgICAgICAgIHJlcG9ydE5hbWU6IHJlcG9ydE5hbWUsXHJcbiAgICAgICAgICBzaG9ydE5hbWU6IHNob3J0TmFtZSxcclxuICAgICAgICAgIGRpc3BsYXk6IGRpc3BsYXksXHJcbiAgICAgICAgICBodHRwTWV0aG9kVHlwZTogdGhpcy5odHRwTWV0aG9kVHlwZSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiByZXBvcnRUb0VkaXRUZW1wbGF0ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aHJvdyBFcnJvcihcclxuICAgICAgICAgICdzb21lIG9mIHRoZSByZXF1aXJlZCBwcm9wZXJ0aWVzIDogdXNlciB0b2tlbiBvciBzZWxlY3RlZFJlcG9ydCBoYXZlIG5vdCBiZWVuIHNldCAhJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRocm93IEVycm9yKFwicHJvcGVydHkgJ1VzZXJOYW1lICcgb2YgY3VycmVudCB1c2VyIGhhdmUgbm90IGJlZW4gc2V0ICFcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZWZyZXNoUmVwb3J0c0pvYigpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUud2FybignUmVmcmVzaCBSZXBvcnRzIEpvYiBhdCA6ICcsIG5ldyBEYXRlKCkpO1xyXG4gICAgLy9cclxuICAgIGlmICh0aGlzLm90aGVyRm9ybU5hbWUgIT0gbnVsbCAmJiB0aGlzLm90aGVyRm9ybU5hbWUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgIC5nZXRSZXBvcnRzKHRoaXMub3RoZXJGb3JtTmFtZSwgdGhpcy5yZXBvcnREaXNjcmltaW5hdG9yKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKGl0ZW1zKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVwb3J0cyA9IGl0ZW1zO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMucHJldmlvdXNGb3JtTmFtZSAhPSB0aGlzLm90aGVyRm9ybU5hbWUpIHtcclxuICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAgIExvY2FsaXphdGlvbktleXMucmV0cmlldmVkU3VjY2Vzc2Z1bGx5XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzRm9ybU5hbWUgPSB0aGlzLm90aGVyRm9ybU5hbWUgPz8gJyc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vXHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaEpvYlRpbWVPdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoUmVwb3J0c0pvYigpO1xyXG4gICAgICAgICAgICB9LCAxMDAwMCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hKb2JUaW1lT3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFJlcG9ydHNKb2IoKTtcclxuICAgICAgICAgICAgfSwgMTAwMDApO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7IH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlZnJlc2hKb2JUaW1lT3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fcmVmcmVzaFJlcG9ydHNKb2IoKTtcclxuICAgICAgfSwgMTAwMDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2hvd0ltcG9ydEZpbGVUb1JlcG9ydERpYWxvZygpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNVcGRhdGVSZXBvcnRGcm9tRmlsZURpYWxvZ1Zpc2libGUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGlkZUltcG9ydEZpbGVUb1JlcG9ydERpYWxvZygpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNVcGRhdGVSZXBvcnRGcm9tRmlsZURpYWxvZ1Zpc2libGUgPSBmYWxzZTtcclxuICAgIHRoaXMudG9VcGxvYWRUb1VwZGF0ZVJlcG9ydEZpbGVEYXRhID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgLy8gZ2V0RGVmYXVsdFJlcG9ydFRlbXBsYXRlKCl7XHJcbiAgcHJldmlld0J1aWx0SW5SZXBvcnRUZW1wbGF0ZSh0ZW1wbGF0ZU5hbWU6IHN0cmluZykge1xyXG4gICAgbGV0IHVybDogc3RyaW5nID0gYCR7U2VnbWVudC5yZXBvcnRpbmdTZXJ2aWNlQmFzZX0vcmVwb3J0LXZpZXdlci8ke3RoaXMub3RoZXJGb3JtTmFtZX0vJHt0ZW1wbGF0ZU5hbWV9YDtcclxuICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xyXG4gIH1cclxuXHJcbiAgLy9hZGQgYSByZXBvcnQgZnJvbSB0aGUgYnVpbHQtaW4gbW9kZWwgdG8gdGhlIHVzZXIgbGlzdFxyXG4gIF9hZGRGcm9tQnVpbHRJblRlbXBsYXRlcyh0ZW1wbGF0ZU5hbWU6IGFueSkge1xyXG4gICAgbGV0IGZvcm1OYW1lID0gdGhpcy5vdGhlckZvcm1OYW1lID8/IHRoaXMuRURJVElPTl9QRVJTT05OQUxJU0U7XHJcbiAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgLmFkZEZyb21CdWlsdEluVGVtcGxhdGUoZm9ybU5hbWUsIHRlbXBsYXRlTmFtZSwgdGhpcy5yZXBvcnREaXNjcmltaW5hdG9yKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiBhc3luYyAocmVzKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzICYmIHJlcy5pc1N1Y2Nlc3MgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHMoKTtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmluZm8ocmVzLm1zZyk7XHJcbiAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLndhcm4oXHJcbiAgICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfY2Fubm90X2FkZF9mcm9tX2J1aWx0X2luX3RlbXBsYXRlJ1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS53YXJuKFxyXG4gICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19jYW5ub3RfYWRkX2Zyb21fYnVpbHRfaW5fdGVtcGxhdGUnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy9hZGQgYSByZXBvcnQgZnJvbSB0aGUgdXNlciBsaXN0IHRvIGJ1aWx0LWluIG1vZGVsIHRlbXBsYXRlXHJcbiAgX2FkZFRvQnVpbHRJblRlbXBsYXRlcyhyZXBvcnRJZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuYWRkVG9CdWlsdEluVGVtcGxhdGUocmVwb3J0SWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IGFzeW5jIChyZXMpID0+IHtcclxuICAgICAgICBhd2FpdCB0aGlzLl9yZWZyZXNoUmVwb3J0cyh0cnVlKTtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuaW5mbyhMb2NhbGl6YXRpb25LZXlzLnNhdmVkU3VjY2Vzc2Z1bGx5KTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uud2FybihcclxuICAgICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX2FkZF90b19idWlsdGluX3RlbXBsYXRlX3JlcG9ydF9mYWlsZWQnXHJcbiAgICAgICAgKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIG1ha2UgcmVwb3J0IGxheW91dCBhcyBkZWZhdWx0IGZvciBhbGwgcmVwb3J0c1xyXG4gIG1ha2VSZXBvcnREZWZhdWx0TGF5b3V0KHJlcG9ydFVpZDogc3RyaW5nKSB7XHJcbiAgICBsZXQgcmVxdWVzdCA9IHtcclxuICAgICAgcmVwb3J0VGVtcGxhdGVVaWQ6IHJlcG9ydFVpZCxcclxuICAgIH07XHJcbiAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UubWFrZVJlcG9ydExheW91dEFzRGVmYXVsdExheW91dChyZXF1ZXN0KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xyXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKCdzaGFyZWRfcmVwb3J0aW5nX3N1Y2Nlc3NfdXBkYXRlZCcpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS53YXJuKCdzaGFyZWRfcmVwb3J0aW5nX2Vycm9yX29jY3VyZWQnKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuICAvLyNlbmQgcmVnaW9uXHJcblxyXG4gIF92aWV3RGFzaGJvYXJkdCh1aWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIGxldCByZXBvcnQgPSB0aGlzLnJlcG9ydHMuZmluZCgocikgPT4gci51aWQgPT09IHVpZCk7XHJcbiAgICBpZiAoIXJlcG9ydCkge1xyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJlcG9ydFRlbXBsYXRlSWQgPSByZXBvcnQudWlkO1xyXG4gICAgbGV0IHRlbmFudFVpZCA9IHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5wYXJzZU15QXV0aFRva2VuKCk/LnRlbmFudFVpZDtcclxuXHJcbiAgICBsZXQgdXJsVmlld2VyID0gYCR7U2VnbWVudC5hcHBCYXNlSHJlZn0vJHt0aGlzLmRhc2hib2FyZE1vZHVsZVJvdXRlfS8ke01hbmFnZVJlcG9ydGluZ1JvdXRlcy5kYXNoYm9hcmRWaWV3ZXJ9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QucmVwb3J0VGVtcGxhdGV9PSR7cmVwb3J0VGVtcGxhdGVJZH0mJHtxdWVyeVBhcmFtTmFtZXNDb25zdC50ZW5hbnRVaWR9PSR7dGVuYW50VWlkfWA7XHJcblxyXG4gICAgY29uc29sZS5sb2coJz4+PiBfdmlld0Rhc2hib2FyZHQgfiB1cmxWaWV3ZXI6JywgdXJsVmlld2VyKTtcclxuXHJcbiAgICB3aW5kb3cub3Blbih1cmxWaWV3ZXIsICdfYmxhbmsnKTtcclxuICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAnc2hhcmVkX3JlcG9ydGluZ19yZWRpcmVjdGVkX3RvX3ByaW50X3JlcG9ydF9zdWNjZXNzZnVsbHknXHJcbiAgICApO1xyXG4gICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiXHJcbjxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgPGRpdiAqYnVzeT1cImlzbG9hZGluZ1wiPjwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBjb2wtMTBcIj5cclxuICAgICAgPGRpdiAqbmdJZj1cImlzRnJvbUZvcm07IGVsc2Ugbm90RnJvbUZvcm1cIj5cclxuICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTJcIiBbbGFiZWxWYWx1ZV09XCInc2hhcmVkX3JlcG9ydGluZ19mb3JtJ1wiPlxyXG4gICAgICAgIDwvVHNpLUxhYmVsPlxyXG4gICAgICAgIDxwLWRyb3Bkb3duIGNsYXNzPVwiY29sLTEwIHRzaS1jb21wb25lbnRcIiBjbGFzcz1cInRzaS1jb21wb25lbnRcIiBzdHlsZUNsYXNzPVwidHNpLWNvbXBvbmVudFwiIGFwcGVuZFRwPVwiYm9keVwiXHJcbiAgICAgICAgICBbb3B0aW9uc109XCJmb3JtTmFtZXNcIiBbbmdNb2RlbF09XCJvdGhlckZvcm1OYW1lXCIgb3B0aW9uTGFiZWw9XCJ2YWx1ZVwiIG9wdGlvblZhbHVlPVwia2V5XCIgW2ZpbHRlcl09XCJ0cnVlXCJcclxuICAgICAgICAgIGZpbHRlckJ5PVwidmFsdWVcIiBbc2hvd0NsZWFyXT1cInRydWVcIiBwbGFjZWhvbGRlcj1cInt7J3NoYXJlZF9yZXBvcnRpbmdfc2VsZWN0X2Zvcm0nIHwgbG9jYWxpemV9fVwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiPlxyXG4gICAgICAgIDwvcC1kcm9wZG93bj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgI25vdEZyb21Gb3JtPlxyXG4gICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTJcIiBbbGFiZWxWYWx1ZV09XCInc2hhcmVkX3JlcG9ydGluZ19mb3JtJ1wiPlxyXG4gICAgICAgICAgPC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyBjbGFzcz1cImNvbC0xMFwiIFsoYmluZCldPVwib3RoZXJGb3JtTmFtZVwiIChiaW5kQ2hhbmdlKT1cIm9uRm9ybUNoYW5nZSgpXCJcclxuICAgICAgICAgICAgW2xpc3RTb3VyY2VVcmxdPVwiZ2V0Rm9ybU5hbWVzRW5kcG9pbnRcIiBbZWxlbWVudFNvdXJjZVVybF09XCJnZXRGb3JtTmFtZXNFbmRwb2ludCBcIiBbaXNGaWx0ZXJlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgaWQtZmllbGQ9XCJrZXlcIiBsYWJlbC1maWVsZD1cInZhbHVlXCI+XHJcbiAgICAgICAgICA8L1RzaS1TZWFyY2gtQ29tYm8+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPHAtdG9vbGJhciBzdHlsZUNsYXNzPVwibWItNCBnYXAtMlwiPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxlZnRcIj5cclxuICAgICAgPFRzaS1CdXR0b24gW3RleHRdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfYWRkX3JlcG9ydCcgfCBsb2NhbGl6ZVwiIGljb249XCJwLWJ1dHRvbi1pY29uIHAtYnV0dG9uLWljb24tbGVmdCBwaSBwaS1wbHVzXCJcclxuICAgICAgICBzdHlsZUNsYXNzPVwicC1lbGVtZW50IHAtYnV0dG9uLXN1Y2Nlc3MgbWwtMiBtci0yIHAtYnV0dG9uIHAtY29tcG9uZW50IG5nLXN0YXItaW5zZXJ0ZWQgcC1idXR0b24tbGFiZWxcIiAoY2xpY2spPVwib25OZXdSZXBvcnQoKVwiPjwvVHNpLUJ1dHRvbj5cclxuICAgICAgPFRzaS1CdXR0b24gW2J1dHRvblR5cGVdPVwiYnV0dG9uVHlwZS5TdWJtaXRcIiBbdGV4dF09XCInc2hhcmVkX3JlcG9ydGluZ19kZWxldGVfcmVwb3J0JyB8IGxvY2FsaXplXCIgaWNvbj1cInAtYnV0dG9uLWljb24gcC1idXR0b24taWNvbi1sZWZ0IHBpIHBpLXRyYXNoXCJcclxuICAgICAgICBzdHlsZUNsYXNzPVwicC1lbGVtZW50IHAtYnV0dG9uLWRhbmdlciBwLWJ1dHRvbiBwLWNvbXBvbmVudCBuZy1zdGFyLWluc2VydGVkIHAtYnV0dG9uLWxhYmVsXCIgKGNsaWNrKT1cIm9uRGVsZXRlU2VsZWN0ZWRSZXBvcnRzKClcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIhc2VsZWN0ZWRSZXBvcnRzIHx8ICFzZWxlY3RlZFJlcG9ydHMubGVuZ3RoXCI+PC9Uc2ktQnV0dG9uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicmlnaHRcIj5cclxuICAgICAgPHAtZmlsZVVwbG9hZCAjZmlsZVVwbG9hZCBuYW1lPVwiZGVtb1tdXCIgKG9uQmVmb3JlVXBsb2FkKT1cIm9uSW1wb3J0RmlsZSgkZXZlbnQpXCJcclxuICAgICAgICAob25TZWxlY3QpPVwib25GaWxlU2VsZWN0ZWQoJGV2ZW50KVwiIChvbkNsZWFyKT1cIm9uQ2xlYXIoJGV2ZW50KVwiIChvblJlbW92ZSk9XCJvblJlbW92ZSgkZXZlbnQpXCIgW211bHRpcGxlXT1cImZhbHNlXCJcclxuICAgICAgICBhY2NlcHQ9XCJhcHBsaWNhdGlvbi9qc29uXCIgW21heEZpbGVTaXplXT1cIjEwMDAwMDAwXCIgXHJcbiAgICAgICAgW2ludmFsaWRGaWxlU2l6ZU1lc3NhZ2VTdW1tYXJ5XT1cIidzaGFyZWRfZmlsZV91cGxvYWRfaW52YWxpZF9maWxlX3NpemVfbWVzc2FnZV9zdW1tYXJ5JyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVTaXplTWVzc2FnZURldGFpbF09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV9zaXplX21lc3NhZ2VfZGV0YWlsJyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVUeXBlTWVzc2FnZVN1bW1hcnldPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfdHlwZV9tZXNzYWdlX3N1bW1hcnknIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZUxpbWl0TWVzc2FnZURldGFpbF09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV9saW1pdF9tZXNzYWdlX2RldGFpbCcgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW2ludmFsaWRGaWxlTGltaXRNZXNzYWdlU3VtbWFyeV09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV9saW1pdF9tZXNzYWdlX3N1bW1hcnknIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZVR5cGVNZXNzYWdlRGV0YWlsXT1cIidzaGFyZWRfZmlsZV91cGxvYWRfaW52YWxpZF9maWxlX3R5cGVfbWVzc2FnZV9kZXRhaWwnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtjaG9vc2VJY29uXT1cIidwaSBwaS1wYXBlcmNsaXAnXCIgY2FuY2VsU3R5bGVDbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeVwiIHVwbG9hZFN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1oZWxwXCJcclxuICAgICAgICByZW1vdmVTdHlsZUNsYXNzPVwicC1idXR0b24tZGFuZ2VyXCIgW2Nob29zZUxhYmVsXT1cIidzaGFyZWRfcmVwb3J0aW5nX2Nob29zZV9yZXBvcnRfZmlsZScgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW3VwbG9hZExhYmVsXT1cIidzaGFyZWRfcmVwb3J0aW5nX2ltcG9ydF9yZXBvcnQnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtjYW5jZWxMYWJlbF09XCInc2hhcmVkX3JlcG9ydGluZ19jYW5jZWxfY2hvb3NlX3JlcG9ydF9maWxlJyB8IGxvY2FsaXplXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwidG9VcGxvYWRGaWxlRGF0YVwiIHBUZW1wbGF0ZT1cImZpbGV1cGxvYWQtY29udGVudFwiPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvcC1maWxlVXBsb2FkPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3AtdG9vbGJhcj5cclxuXHJcbiAgPCEtLSA8VHNpLURpc3BsYXktR3JpZCBbc2hvd0hlYWRlcl09XCJ0cnVlXCJcclxuICAgIFtoZWFkZXJdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfbXlfdGVtcGxhdGUnXCJcclxuICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIiBbZ3JpZERhdGFdPVwicmVwb3J0c1wiIGtleT1cInVpZFwiXHJcbiAgICAoYnV0dG9uQ29sdW1uQ2xpY2tlZCk9XCJoYW5kbGVCdXR0b25Db2x1bW5DbGlja2VkKCRldmVudClcIiBbKHNlbGVjdGVkSXRlbXMpXT1cInNlbGVjdGVkUmVwb3J0c1wiXHJcbiAgICBbc2hvd0ZpbHRlcnNdPVwiZmFsc2VcIlxyXG4gICAgW3BhZ2luYXRvcl09XCJ0cnVlXCJcclxuICAgIFtnbG9iYWxGaWx0ZXJGaWVsZHNdPVwiZ2xvYmFsRmlsdGVyRmllbGRzXCI+XHJcbiAgPC9Uc2ktRGlzcGxheS1HcmlkPiAtLT5cclxuXHJcblxyXG4gIDwhLS08ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjpsZWZ0XCI+IDxwLWJ1dHRvbiBpY29uPVwicGkgcGktcmVmcmVzaFwiICBbcFRvb2x0aXBdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfcmVmcmVzaCcgfCBsb2NhbGl6ZVwiIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLlRvcFwiICBsYWJlbD1cIlJlbG9hZFwiIHNldmVyaXR5PVwiaGVscFwiIChjbGljayk9XCJvblJlZnJlc2goKVwiIC8+IDwvZGl2PlxyXG4gIDxwLWJ1dHRvbiBpY29uPVwicGkgcGktcmVmcmVzaFwiIGNsYXNzPVwicC1idXR0b24tcm91bmRlZFwiIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi10ZXh0XCIgLz5cclxuLS0+XHJcbiAgXHJcbiAgPFRzaS1CdXR0b24gc3R5bGVDbGFzcz1cInAtZWxlbWVudCBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXJhaXNlZCBwLWJ1dHRvbi1yb3VuZGVkIG1iLTMgbWwtM1wiICBcclxuICAgIFt0b29sdGlwVGV4dF09XCInc2hhcmVkX3JlcG9ydGluZ19yZWZyZXNoJ1wiIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLlRvcFwiXHJcbiAgICBpY29uPVwicGkgcGktcmVmcmVzaFwiIChjbGljayk9XCJvblJlZnJlc2goKVwiPjwvVHNpLUJ1dHRvbj5cclxuXHJcbiAgPHRzaS12aWV3LWdyaWQgXHJcbiAgICBbc29ydE1vZGVdPVwic29ydE1vZGVSZWYuU2luZ2xlXCJcclxuICAgIFtoZWFkZXJdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfbXlfdGVtcGxhdGUnXCJcclxuICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIiBbZ3JpZERhdGFdPVwicmVwb3J0c1wiIGtleT1cInVpZFwiXHJcbiAgICAoYnV0dG9uQ29sdW1uQ2xpY2tlZCk9XCJoYW5kbGVCdXR0b25Db2x1bW5DbGlja2VkKCRldmVudClcIiBbKHNlbGVjdGVkSXRlbXMpXT1cInNlbGVjdGVkUmVwb3J0c1wiXHJcbiAgICBbZ2V0RGF0YUZyb21BcGldPVwiZmFsc2VcIlxyXG4gICAgW2Zvcm1OYW1lXT1cIidteS1yZXBvcnQtdGVtcGxhdGVzJ1wiXHJcbiAgICA+XHJcbiAgPC90c2ktdmlldy1ncmlkPlxyXG4gIDxici8+XHJcbiAgIDwhLS0gRGVmYXVsdCBUZW1wbGF0ZSAtLT5cclxuICAgPCEtLSA8VHNpLURpc3BsYXktR3JpZCBcclxuICAgW3Nob3dIZWFkZXJdPVwidHJ1ZVwiIFxyXG4gICBbaGVhZGVyXT1cIidzaGFyZWRfcmVwb3J0aW5nX0J1aWx0SW5fdGVtcGxhdGUnXCJcclxuICAgW3Nob3dTdW1tYXJ5Rm9vdGVyXT1cImZhbHNlXCIgXHJcbiAgIFtwYWdpbmF0b3JdPVwiZmFsc2VcIiBcclxuICAgW3Nob3dGaWx0ZXJzXT1cImZhbHNlXCIgXHJcbiAgIFtjb2x1bW5zXT1cImRlZmF1bHRUZW1wbGF0ZUNvbHVtbnNcIiBcclxuICAgW2dyaWREYXRhXT1cImRlZmF1bHRSZXBvcnRUZW1wbGF0ZURhdGFcIiBcclxuICAgKGJ1dHRvbkNvbHVtbkNsaWNrZWQpPVwiaGFuZGxlQnV0dG9uQ29sdW1uQ2xpY2tlZCgkZXZlbnQpXCJcclxuICAgW3BhZ2luYXRvcl09XCJ0cnVlXCJcclxuICAga2V5PVwibmFtZVwiPlxyXG4gIDwvVHNpLURpc3BsYXktR3JpZD4gLS0+XHJcblxyXG4gIFxyXG4gIDx0c2ktdmlldy1ncmlkXHJcbiAgIFtzb3J0TW9kZV09XCJzb3J0TW9kZVJlZi5TaW5nbGVcIlxyXG4gICBbaGVhZGVyXT1cIidzaGFyZWRfcmVwb3J0aW5nX0J1aWx0SW5fdGVtcGxhdGUnXCJcclxuICAgW2NvbHVtbnNdPVwiZGVmYXVsdFRlbXBsYXRlQ29sdW1uc1wiIFxyXG4gICBbZ3JpZERhdGFdPVwiZGVmYXVsdFJlcG9ydFRlbXBsYXRlRGF0YVwiIFxyXG4gICAoYnV0dG9uQ29sdW1uQ2xpY2tlZCk9XCJoYW5kbGVCdXR0b25Db2x1bW5DbGlja2VkKCRldmVudClcIlxyXG4gICBbZ2V0RGF0YUZyb21BcGldPVwiZmFsc2VcIlxyXG4gICBbZm9ybU5hbWVdPVwiJ2RlZmF1bHQtbXktcmVwb3J0LXRlbXBsYXRlcydcIlxyXG4gICBrZXk9XCJuYW1lXCI+XHJcbiAgPC90c2ktdmlldy1ncmlkPlxyXG5cclxuXHJcblxyXG5cclxuICBcclxuXHJcbiAgPCEtLSBkaWFsb2cgdG8gaW1wb3J0IGZpbGUgdG8gcmVwb3J0IC0tPlxyXG4gIDxwLWRpYWxvZyBoZWFkZXI9XCJ7eydzaGFyZWRfcmVwb3J0aW5nX3NlbGVjdF9maWxlX3RvX2ltcG9ydF9pbnRvX3JlcG9ydCcgfCBsb2NhbGl6ZX19XCIgWyh2aXNpYmxlKV09XCJpc1VwZGF0ZVJlcG9ydEZyb21GaWxlRGlhbG9nVmlzaWJsZVwiIFtzdHlsZV09XCJ7d2lkdGg6ICc1MHZ3J31cIj5cclxuICAgIDwhLS0gPFRzaS1Nb2RhbC1IZWFkZXIgKG9uQ2xvc2VDbGljayk9XCJvbkltcG9ydEZpbGVUb1JlcG9ydE1vZGFsQ2FuY2VsQ2xpY2soKVwiIFtpbnB1dFRpdGxlXT1cIidzaGFyZWRfcmVwb3J0aW5nX3NlbGVjdF9maWxlX3RvX2ltcG9ydF9pbnRvX3JlcG9ydCdcIj48L1RzaS1Nb2RhbC1IZWFkZXI+IC0tPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCI+XHJcbiAgICAgIDxwLWZpbGVVcGxvYWQgI2ltcG9ydEZpbGVUb1JlcG9ydEZpbGVVcGxvYWQgbmFtZT1cImltcG9ydEZpbGVUb1JlcG9ydFwiIChvbkJlZm9yZVVwbG9hZCk9XCJvbkltcG9ydEZpbGVUb1JlcG9ydF9JbXBvcnRGaWxlKCRldmVudClcIlxyXG4gICAgICAgIChvblNlbGVjdCk9XCJvbkltcG9ydEZpbGVUb1JlcG9ydF9GaWxlU2VsZWN0ZWQoJGV2ZW50KVwiIChvbkNsZWFyKT1cIm9uSW1wb3J0RmlsZVRvUmVwb3J0X0NsZWFyKCRldmVudClcIiAob25SZW1vdmUpPVwib25JbXBvcnRGaWxlVG9SZXBvcnRfUmVtb3ZlKCRldmVudClcIiBbbXVsdGlwbGVdPVwiZmFsc2VcIlxyXG4gICAgICAgIGFjY2VwdD1cImFwcGxpY2F0aW9uL2pzb25cIiBbbWF4RmlsZVNpemVdPVwiMTAwMDAwMDBcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZVNpemVNZXNzYWdlU3VtbWFyeV09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV9zaXplX21lc3NhZ2Vfc3VtbWFyeScgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW2ludmFsaWRGaWxlU2l6ZU1lc3NhZ2VEZXRhaWxdPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfc2l6ZV9tZXNzYWdlX2RldGFpbCcgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW2ludmFsaWRGaWxlVHlwZU1lc3NhZ2VTdW1tYXJ5XT1cIidzaGFyZWRfZmlsZV91cGxvYWRfaW52YWxpZF9maWxlX3R5cGVfbWVzc2FnZV9zdW1tYXJ5JyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVMaW1pdE1lc3NhZ2VEZXRhaWxdPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfbGltaXRfbWVzc2FnZV9kZXRhaWwnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZUxpbWl0TWVzc2FnZVN1bW1hcnldPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfbGltaXRfbWVzc2FnZV9zdW1tYXJ5JyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVUeXBlTWVzc2FnZURldGFpbF09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV90eXBlX21lc3NhZ2VfZGV0YWlsJyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbY2hvb3NlSWNvbl09XCIncGkgcGktcGFwZXJjbGlwJ1wiIGNhbmNlbFN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnlcIiB1cGxvYWRTdHlsZUNsYXNzPVwicC1idXR0b24taGVscFwiXHJcbiAgICAgICAgcmVtb3ZlU3R5bGVDbGFzcz1cInAtYnV0dG9uLWRhbmdlclwiIFtjaG9vc2VMYWJlbF09XCInc2hhcmVkX3JlcG9ydGluZ19jaG9vc2VfcmVwb3J0X2ZpbGUnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFt1cGxvYWRMYWJlbF09XCInc2hhcmVkX3JlcG9ydGluZ19pbXBvcnRfcmVwb3J0JyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbY2FuY2VsTGFiZWxdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfY2FuY2VsX2Nob29zZV9yZXBvcnRfZmlsZScgfCBsb2NhbGl6ZVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cInRvVXBsb2FkVG9VcGRhdGVSZXBvcnRGaWxlRGF0YVwiIHBUZW1wbGF0ZT1cImZpbGV1cGxvYWQtY29udGVudFwiPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvcC1maWxlVXBsb2FkPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8IS0tIDxUc2ktTW9kYWwtRm9vdGVyIChvbkNhbmNlbENsaWNrKT1cIm9uSW1wb3J0RmlsZVRvUmVwb3J0TW9kYWxDYW5jZWxDbGljaygpXCJcclxuICAgIChvblNhdmVDbGljayk9XCJvbkltcG9ydEZpbGVUb1JlcG9ydE1vZGFsU2F2ZUNsaWNrKClcIlxyXG4gICAgW3NhdmVEaXNhYmxlZF09XCIhdG9VcGxvYWRUb1VwZGF0ZVJlcG9ydEZpbGVEYXRhXCI+PC9Uc2ktTW9kYWwtRm9vdGVyPiAtLT5cclxuXHJcbjwvcC1kaWFsb2c+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
1053
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLXJlcG9ydGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvbWFuYWdlLXJlcG9ydGluZy9tYW5hZ2UtcmVwb3J0aW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9tYW5hZ2UtcmVwb3J0aW5nL21hbmFnZS1yZXBvcnRpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDMUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzFFLE9BQU8sRUFDTCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLFlBQVksRUFFWixhQUFhLEVBQ2IsS0FBSyxFQUNMLGFBQWEsR0FDZCxNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBZW5FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVB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QkFDRyxtQkFBbUI7c0JBQTNCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgRmlsZVVwbG9hZCB9IGZyb20gJ3ByaW1lbmcvZmlsZXVwbG9hZCc7XHJcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGFwcFByb3ZpZGVycyB9IGZyb20gJy4uLy4uL2NvbnN0cy9hcHAtcHJvdmlkZXJzJztcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uS2V5cyB9IGZyb20gJy4uLy4uL2NvbnN0cy9sb2NhbGl6YXRpb24ta2V5JztcclxuaW1wb3J0IHsgcXVlcnlQYXJhbU5hbWVzQ29uc3QgfSBmcm9tICcuLi8uLi9jb25zdHMvcXVlcnlQYXJhbU5hbWVzLmNvbnN0JztcclxuaW1wb3J0IHsgU2VnbWVudCB9IGZyb20gJy4uLy4uL2VuZC1wb2ludHMnO1xyXG5pbXBvcnQgeyBSZXBvcnRpbmdFbmRwb2ludHMgfSBmcm9tICcuLi8uLi9lbmQtcG9pbnRzL3JlcG9ydGluZy1lbmRwb2ludHMnO1xyXG5pbXBvcnQge1xyXG4gIERpc3BsYXlUeXBlcyxcclxuICBHcmlkU2VsZWN0aW9uTW9kZSxcclxuICBHcmlkU29ydE1vZGUsXHJcbiAgSHR0cE1ldGhvZFR5cGUsXHJcbiAgTW9kYWxTaXplRW51bSxcclxuICBNb2RlcyxcclxuICBUc2lSZXBvcnRUeXBlLFxyXG59IGZyb20gJy4uLy4uL2VudW1zJztcclxuaW1wb3J0IHsgQnV0dG9uVHlwZSB9IGZyb20gJy4uLy4uL2VudW1zL2J1dHRvbi10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBUb29sdGlwUG9zaXRpb24gfSBmcm9tICcuLi8uLi9lbnVtcy90b29sdGlwUG9zaXRpb24uZW51bSc7XHJcbmltcG9ydCB7XHJcbiAgQnV0dG9uQ2xpY2tSZXN1bHQsXHJcbiAgR3JpZENvbHVtbixcclxufSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHtcclxuICBKc29uRGF0YUNvbm5lY3Rpb24sXHJcbiAgS2V5VmFsdWVQYWlyLFxyXG4gIE9wdGlvbmFsRW5kcG9pbnRzLFxyXG4gIFJlcG9ydFRlbXBsYXRlUmVzcG9uc2UsXHJcbiAgUmVwb3J0VG9FZGl0VGVtcGxhdGUsXHJcbiAgUmVwb3J0VG9FZGl0VGVtcGxhdGVQYXlsb2FkLFxyXG4gIFJlcG9ydFRvUHJpbnQsXHJcbiAgUmVwb3J0VG9UZW1wbGF0ZSxcclxufSBmcm9tICcuLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBBcHBSb3V0ZXMgfSBmcm9tICcuLi8uLi9yb3V0ZXMvYXBwLnJvdXRlcyc7XHJcbmltcG9ydCB7IE1hbmFnZVJlcG9ydGluZ1JvdXRlcyB9IGZyb20gJy4uLy4uL3JvdXRlcy9tYW5hZ2UtcmVwb3J0aW5nLnJvdXRlcyc7XHJcbmltcG9ydCB7XHJcbiAgRXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLFxyXG4gIElkZW50aXR5TWFuYWdlclNlcnZpY2UsXHJcbiAgUmVwb3J0aW5nU2VydmljZSxcclxuICBUc2lDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gIFRzaU1vZGFsU2VydmljZSxcclxuICBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG59IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgVHNpRm9ybUNvbXBvbmVudEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi90c2ktYmFzZS9jb21wb25lbnRzL3RzaS1mb3JtLWJhc2UvdHNpLWZvcm0tYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBZGRSZXBvcnRQb3B1cENvbXBvbmVudCB9IGZyb20gJy4vYWRkLXJlcG9ydC1wb3B1cC9hZGQtcmVwb3J0LXBvcHVwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVtYWlsSW5mb3JtYXRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvYXBwbGljYXRpb24vY29uZmlndXJhdGlvbi9lbWFpbC1pbmZvcm1hdGlvbic7XHJcbmltcG9ydCB7IE1haWxpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwbGljYXRpb24vbWFpbGluZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHNpU2VuZE1haWxDb21wb25lbnQgfSBmcm9tICcuLi90c2ktc2VuZC1tYWlsL3RzaS1zZW5kLW1haWwuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLW1hbmFnZS1yZXBvcnRpbmcnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tYW5hZ2UtcmVwb3J0aW5nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9tYW5hZ2UtcmVwb3J0aW5nLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbLi4uYXBwUHJvdmlkZXJzXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1hbmFnZVJlcG9ydGluZ0NvbXBvbmVudFxyXG4gIGV4dGVuZHMgVHNpRm9ybUNvbXBvbmVudEJhc2VDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAvLyNyZWdpb24gcHJvcGVydGllc1xyXG5cclxuICByZWFkb25seSBFRElUSU9OX1BFUlNPTk5BTElTRSA9ICdhcHAtZWRpdGlvbi1wZXJzb25uYWxpc2UnO1xyXG4gIHJlcG9ydHM6IFJlcG9ydFRlbXBsYXRlUmVzcG9uc2VbXSA9IFtdO1xyXG4gIGpzb25EYXRhQ29ubmVjdGlvbjogSnNvbkRhdGFDb25uZWN0aW9uIHwgdW5kZWZpbmVkO1xyXG4gIGpzb25EYXRhQ29ubmVjdGlvbklkOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcbiAgcmVwb3J0VG9QcmludElkOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcbiAgdG9VcGxvYWRGaWxlRGF0YTogYW55ID0gdW5kZWZpbmVkO1xyXG4gIGNvbHVtbnM6IEdyaWRDb2x1bW5bXSA9IFtdO1xyXG4gIGlzRnJvbUZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmb3JtTmFtZXM6IEtleVZhbHVlUGFpcjxzdHJpbmcsIHN0cmluZz5bXSA9IFtdO1xyXG4gIHNlbGVjdGVkUmVwb3J0czogbnVtYmVyW10gPSBbXTtcclxuICBzZWxlY3Rpb25Nb2RlID0gR3JpZFNlbGVjdGlvbk1vZGUuTXVsdGlwbGU7XHJcbiAgZ2V0Rm9ybU5hbWVzRW5kcG9pbnQ6IHN0cmluZyA9IFJlcG9ydGluZ0VuZHBvaW50cy5nZXRBdmFpbGFibGVGb3JtTmFtZXMoKTtcclxuICBnbG9iYWxGaWx0ZXJGaWVsZHMgPSBbJ25hbWUnXTtcclxuICByZWZyZXNoSm9iVGltZU91dDogYW55O1xyXG4gIHByZXZpb3VzRm9ybU5hbWU6IHN0cmluZyA9ICcnO1xyXG4gIGlzVXBkYXRlUmVwb3J0RnJvbUZpbGVEaWFsb2dWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdG9VcGxvYWRUb1VwZGF0ZVJlcG9ydEZpbGVEYXRhOiBhbnkgPSB1bmRlZmluZWQ7XHJcbiAgc2VsZWN0ZWRSZXBvcnRUb1VwZGF0ZUZyb21GaWxlOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcbiAgZGVmYXVsdFJlcG9ydFRlbXBsYXRlRGF0YTogc3RyaW5nW10gPSBbXTtcclxuICBkZWZhdWx0VGVtcGxhdGVDb2x1bW5zOiBHcmlkQ29sdW1uW10gPSBbXTtcclxuICB0b29sdGlwUG9zaXRpb24gPSBUb29sdGlwUG9zaXRpb247XHJcbiAgcHJpdmF0ZSBfZGlhbG9nUmVmPzogRHluYW1pY0RpYWxvZ1JlZjtcclxuICBpc0VkaXRpb25QZXJzb25uYWxpc2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlbnRpdHlJZD86IHN0cmluZztcclxuICByZXBvcnREaXNjcmltaW5hdG9yPzogYW55O1xyXG4gIGh0dHBNZXRob2RUeXBlPzogSHR0cE1ldGhvZFR5cGU7XHJcbiAgcmVxdWVzdERhdGE/OiBhbnk7XHJcbiAgc29ydE1vZGVSZWYgPSBHcmlkU29ydE1vZGVcclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcmVwb3J0VHlwZUxhYmVsczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgIFtUc2lSZXBvcnRUeXBlLkRhc2hib2FyZF06ICdEYXNoYm9hcmQnLFxyXG4gICAgW1RzaVJlcG9ydFR5cGUuTGlzdF06ICdFbmQgdXNlcicsXHJcbiAgICBbVHNpUmVwb3J0VHlwZS5SVEZdOiAnUlRGJyxcclxuICB9O1xyXG5cclxuICBwcml2YXRlIF9pc1JlcG9ydEZvckZpY2hlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGdldCBpc1JlcG9ydEZvckZpY2hlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgIXRoaXMub3RoZXJGb3JtRW5kcG9pbnQ/LmluY2x1ZGVzKCdnZXRhbGxwYWdlZCcpICYmICF0aGlzLnJlcXVlc3REYXRhXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgQFZpZXdDaGlsZCgnZmlsZVVwbG9hZCcpIGZpbGVVcGxvYWQ/OiBGaWxlVXBsb2FkO1xyXG4gIEBWaWV3Q2hpbGQoJ2ltcG9ydEZpbGVUb1JlcG9ydEZpbGVVcGxvYWQnKVxyXG4gIGltcG9ydEZpbGVUb1JlcG9ydEZpbGVVcGxvYWQ/OiBGaWxlVXBsb2FkO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JNZXNzYWdlS2V5OiBzdHJpbmcgPSAnc2hhcmVkX3JlcG9ydGluZ19lcnJvcl9vY2N1cmVkJztcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkYXNoYm9hcmRNb2R1bGVSb3V0ZSA9IGAke0FwcFJvdXRlcy5hcHB9LyR7QXBwUm91dGVzLmRhc2hib2FyZH1gO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG4gIGJ1dHRvblR5cGUgPSBCdXR0b25UeXBlO1xyXG4gIC8vIHBhcmFtZXRyZTogUGFyYW1ldHJlc0FwcGxpY2F0aW9uUGFpZSA9IG5ldyBQYXJhbWV0cmVzQXBwbGljYXRpb25QYWllKCk7XHJcbiAgLy8jcmVnaW9uIElucHV0IHByb3BlcnRpZXNcclxuICBASW5wdXQoKSBvdGhlckZvcm1OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7IC8vZm9ybUlkZW50aWZpZXJcclxuICBASW5wdXQoKSBvdGhlckZvcm1FbmRwb2ludDogc3RyaW5nIHwgdW5kZWZpbmVkOyAvLz0gYCR7R2VzdGlvbkNvbW1lcmNpYWxlU2VnbWVudHMuZmFjdHVyZVZlbnRlfS8xNjVlYzVmZC00ZDM0LTQ1NDYtYWUxNS0wMDQ0ZTcwOGI5ZDlgO1xyXG4gIEBJbnB1dCgpIGZvcm1FbmRwb2ludEJvZHk6IHN0cmluZyB8IHVuZGVmaW5lZDsgLy9mb3JtSWRlbnRpZmllclxyXG4gIEBJbnB1dCgpIGlzRm9ybUVuZHBvaW50UGFnZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBmaWx0ZXJzSHRtbFRlbXBsYXRlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgb3B0aW9uYWxFbmRwb2ludHM/OiBPcHRpb25hbEVuZHBvaW50cztcclxuICBASW5wdXQoKSBjdXN0b21SZXBvcnRpbmdNb2RlPzogYm9vbGVhbjtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIE91dHB1dCBwcm9wZXJ0aWVzXHJcbiAgLy9AT3V0cHV0KCkgaGlkZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gY3RvclxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gcHVibGljIF9wYXJhbWV0cmVzQXBwbGljYXRpb25QYWllU2VydmljZTogUGFyYW1ldHJlc0FwcGxpY2F0aW9uUGFpZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlcG9ydGluZ1NlcnZpY2U6IFJlcG9ydGluZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGlkZW50aXR5TWFuYWdlclNlcnZpY2U6IElkZW50aXR5TWFuYWdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IFRzaUNvbmZpcm1hdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcmVmOiBEeW5hbWljRGlhbG9nUmVmLFxyXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyxcclxuICAgIHByaXZhdGUgX3RzaU1vZGFsU2VydmljZTogVHNpTW9kYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWFpbGluZ1NlcnZpY2U6IE1haWxpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlOiBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXHJcbiAgKSB7XHJcbiAgICBzdXBlcihyZWYsIGNvbmZpZyk7XHJcblxyXG4gICAgLy9pbml0IGNvbHVtbnNcclxuICAgIHRoaXMuY29sdW1ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGZpZWxkOiAnbmFtZScsXHJcbiAgICAgICAgaGVhZGVyOiAnc2hhcmVkX3JlcG9ydGluZ19yZXBvcnRfbmFtZScsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBmaWVsZDogJ3JlcG9ydFR5cGVOYW1lJyxcclxuICAgICAgICBoZWFkZXI6ICdzaGFyZWRfcmVwb3J0aW5nX3JlcG9ydF90eXBlJyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGZpZWxkOiAnaXNEZWZhdWx0JyxcclxuICAgICAgICBoZWFkZXI6ICdzaGFyZWRfcmVwb3J0aW5nX3JlcG9ydF9pc2RlZmF1bHQnLFxyXG4gICAgICAgIHR5cGU6IERpc3BsYXlUeXBlcy5DSEVDS0JPWF9ESVNQTEFZLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ3NlbmQnLFxyXG4gICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1zZW5kJyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi1zdWNjZXNzJyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9zZW5kX3JlcG9ydF9ieV9lbWFpbCcsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICAgIGZpZWxkOiAnZWRpdCcsXHJcbiAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWZpbGUtZWRpdCcsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgcC1idXR0b24tc3VjY2VzcycsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfcmVwb3J0aW5nX2VkaXQnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ3ZpZXcnLFxyXG4gICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1leWUnLFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWluZm8nLFxyXG4gICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX3JlcG9ydGluZ192aWV3JyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgICAgZmllbGQ6ICdleHBvcnQnLFxyXG4gICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1maWxlLWV4cG9ydCcsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgcC1idXR0b24taGVscCcsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfcmVwb3J0aW5nX2V4cG9ydCcsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICAgIGZpZWxkOiAnaW1wb3J0JyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktcGFwZXJjbGlwJyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi13YXJuaW5nJyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfaW1wb3J0JyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgICAgZmllbGQ6ICdkZWZhdWx0JyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktYm9va21hcmstZmlsbCcsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQnLFxyXG4gICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX3JlcG9ydGluZ19zZXRfZGVmYXVsdCcsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICAgIGZpZWxkOiAnZGVsZXRlJyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktdHJhc2gnLFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWRhbmdlcicsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfcmVwb3J0aW5nX2RlbGV0ZV9yZXBvcnQnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ0FkZF9Ub19CdWlsdEluX1RlbXBsYXRlcycsXHJcbiAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWFycm93LWNpcmNsZS1kb3duJyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi1oZWxwJyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfZXhwb3J0X2Rldl9yZXBvcnQnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ01ha2VfZGVmYXVsdF9yZXBvcnRfbGF5b3V0JyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktYm9va21hcmstZmlsbCcsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgcC1idXR0b24tZGFuZ2VyJyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfbWFrZV9kZWZhdWx0X3JlcG9ydF9sYXlvdXQnLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuICAgIHRoaXMuZGVmYXVsdFRlbXBsYXRlQ29sdW1ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGZpZWxkOiAnbmFtZScsXHJcbiAgICAgICAgaGVhZGVyOiAnc2hhcmVkX3JlcG9ydGluZ19yZXBvcnRfbmFtZScsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBmaWVsZDogJ3JlcG9ydFR5cGVOYW1lJyxcclxuICAgICAgICBoZWFkZXI6ICdzaGFyZWRfcmVwb3J0aW5nX3JlcG9ydF90eXBlJyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgICAgZmllbGQ6ICdkZWxldGVEZWZhdWx0UmVwb3J0RmlsZScsXHJcbiAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLXRyYXNoJyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi1kYW5nZXInLFxyXG4gICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX3JlcG9ydGluZ19kZWxldGVfZGVmYXVsdF9yZXBvcnQnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ0FkZF9Gcm9tX0J1aWx0SW5fVGVtcGxhdGVzJyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktYXJyb3ctY2lyY2xlLXVwJyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi1wcmltYXJ5JyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfYWRkX3RvX215X2xpc3RfcmVwb3J0JyxcclxuICAgICAgfSxcclxuICAgIF07XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBjaGVja0lmSXNEZXZNb2RlKCkge1xyXG4gICAgaWYgKFNlZ21lbnQucHJvZHVjdGlvbikge1xyXG4gICAgICBsZXQgYnV0dG9uQWRCdWlsdGluVGVtcGxhdGVzSW5kZXggPSB0aGlzLmNvbHVtbnMuZmluZEluZGV4KFxyXG4gICAgICAgIChjb2w6IEdyaWRDb2x1bW4pID0+IHtcclxuICAgICAgICAgIHJldHVybiBjb2wuZmllbGQgPT0gJ0FkZF9Ub19CdWlsdEluX1RlbXBsYXRlcyc7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgICBpZiAoYnV0dG9uQWRCdWlsdGluVGVtcGxhdGVzSW5kZXggIT0gLTEpIHtcclxuICAgICAgICB0aGlzLmNvbHVtbnMuc3BsaWNlKGJ1dHRvbkFkQnVpbHRpblRlbXBsYXRlc0luZGV4LCAxKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGJ1dHRvbkRlbGV0ZURlZmF1bHRSZXBvcnRGaWxlSW5kZXggPVxyXG4gICAgICAgIHRoaXMuZGVmYXVsdFRlbXBsYXRlQ29sdW1ucy5maW5kSW5kZXgoKGNvbDogR3JpZENvbHVtbikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGNvbC5maWVsZCA9PSAnZGVsZXRlRGVmYXVsdFJlcG9ydEZpbGUnO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKGJ1dHRvbkRlbGV0ZURlZmF1bHRSZXBvcnRGaWxlSW5kZXggIT0gLTEpIHtcclxuICAgICAgICB0aGlzLmRlZmF1bHRUZW1wbGF0ZUNvbHVtbnMuc3BsaWNlKFxyXG4gICAgICAgICAgYnV0dG9uRGVsZXRlRGVmYXVsdFJlcG9ydEZpbGVJbmRleCxcclxuICAgICAgICAgIDFcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL2hhbmRsZSBMaWZlY3ljbGUgSG9va3NcclxuICBvdmVycmlkZSBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuaXNFZGl0aW9uUGVyc29ubmFsaXNlID0gdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCdhZG1pbmlzdHJhdGlvbicpO1xyXG4gICAgdGhpcy5jaGVja0lmSXNEZXZNb2RlKCk7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgLy8gaWYgKHRoaXMub3RoZXJGb3JtTmFtZSApIHtcclxuICAgIHRoaXMuaXNGcm9tRm9ybSA9IHRydWU7XHJcbiAgICB0aGlzLmNvbHVtbnMuc3BsaWNlKDMsIDAsIHtcclxuICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgZmllbGQ6ICdwcmludCcsXHJcbiAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICBidXR0b25JY29uOiAncGkgcGktcHJpbnQnLFxyXG4gICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi1zZWNvbmRhcnknLFxyXG4gICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfcmVwb3J0X3ByaW50JyxcclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMub3RoZXJGb3JtTmFtZSAmJiB0aGlzLm90aGVyRm9ybU5hbWUgIT0gJ2FwcC1tYW5hZ2UtcmVwb3J0aW5nJykge1xyXG4gICAgICB0aGlzLmZvcm1OYW1lcyA9IFt7IGtleTogdGhpcy5vdGhlckZvcm1OYW1lLCB2YWx1ZTogdGhpcy5vdGhlckZvcm1OYW1lIH1dO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbnRpdHlJZCA9IHRoaXMuY29uZmlnLmRhdGE/LmlkO1xyXG4gICAgdGhpcy5jdXN0b21SZXBvcnRpbmdNb2RlID0gdGhpcy5jb25maWc/LmRhdGE/LmN1c3RvbVJlcG9ydGluZ01vZGU7XHJcbiAgICB0aGlzLmh0dHBNZXRob2RUeXBlID0gdGhpcy5jb25maWc/LmRhdGE/Lmh0dHBNZXRob2RUeXBlO1xyXG4gICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHModHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcblxyXG4gICAgaWYgKHRoaXMucmVmcmVzaEpvYlRpbWVPdXQpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVmcmVzaEpvYlRpbWVPdXQpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIGhhbmRsZSBldmVudHNcclxuICBhc3luYyBvblJlZnJlc2goKSB7XHJcbiAgICBhd2FpdCB0aGlzLl9yZWZyZXNoUmVwb3J0cyh0cnVlKTtcclxuICB9XHJcblxyXG4gIG9uUHJpbnREZWZhdWx0KGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm90aGVyRm9ybU5hbWUpIHtcclxuICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmdldERlZmF1bHRSZXBvcnQodGhpcy5vdGhlckZvcm1OYW1lKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAvLyBsZXQgZGVmYXVsdFJlcG9ydElkOiBzdHJpbmcgPSBkYXRhO1xyXG4gICAgICAgICAgdGhpcy5fdmlld1JlcG9ydChkYXRhLnVpZCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHsgfSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkZpbGVTZWxlY3RlZChldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBmaWxlOiBGaWxlID0gZXZlbnQuY3VycmVudEZpbGVzWzBdO1xyXG4gICAgdGhpcy50b1VwbG9hZEZpbGVEYXRhID0gZmlsZTtcclxuICB9XHJcblxyXG4gIG9uSW1wb3J0RmlsZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgLnVwbG9hZFJlcG9ydEZpbGUodGhpcy50b1VwbG9hZEZpbGVEYXRhLCB0aGlzLnJlcG9ydERpc2NyaW1pbmF0b3IpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IGFzeW5jIChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHMoKTtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19yZXBvcnRfdXBsb2FkZWRfc3VjY2Vzc2Z1bGx5J1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuZmlsZVVwbG9hZD8uY2xlYXIoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy9jYW5jZWwgYnV0dG9uIGNsaWNrXHJcbiAgb25DbGVhcihldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnRvVXBsb2FkRmlsZURhdGEgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvL2NhbmNlbCBidXR0b24gY2xpY2tcclxuICBvblJlbW92ZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnRvVXBsb2FkRmlsZURhdGEgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVCdXR0b25Db2x1bW5DbGlja2VkKGV2ZW50OiBCdXR0b25DbGlja1Jlc3VsdCk6IHZvaWQge1xyXG4gICAgc3dpdGNoIChldmVudC5maWVsZCkge1xyXG4gICAgICBjYXNlICdzZW5kJzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdzZW5kJyk7XHJcbiAgICAgICAgdGhpcy5fc2VuZFJlcG9ydChldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ2VkaXQnOiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2VkaXQnKTtcclxuICAgICAgICB0aGlzLl9lZGl0UmVwb3J0KGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAndmlldyc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygndmlldycpO1xyXG4gICAgICAgIHRoaXMuX3ZpZXdEYXNoYm9hcmR0KGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnZGVsZXRlJzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdkZWxldGUnKTtcclxuICAgICAgICB0aGlzLl9kZWxldGVSZXBvcnQoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdwcmludCc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygncHJpbnQnKTtcclxuICAgICAgICB0aGlzLl92aWV3UmVwb3J0KGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnZXhwb3J0Jzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdleHBvcnQnKTtcclxuICAgICAgICB0aGlzLl9leHBvcnRSZXBvcnQoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdkZWZhdWx0Jzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdkZWZhdWx0Jyk7XHJcbiAgICAgICAgdGhpcy5fc2V0RGVmYXVsdFJlcG9ydChldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ2ltcG9ydCc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnaW1wb3J0Jyk7XHJcbiAgICAgICAgdGhpcy5faW1wb3J0VG9SZXBvcnQoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdBZGRfRnJvbV9CdWlsdEluX1RlbXBsYXRlcyc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnQWRkX0Zyb21fQnVpbHRJbl9UZW1wbGF0ZXMnKTtcclxuICAgICAgICB0aGlzLl9hZGRGcm9tQnVpbHRJblRlbXBsYXRlcyhldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0FkZF9Ub19CdWlsdEluX1RlbXBsYXRlcyc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnQWRkX1RvX0J1aWx0SW5fVGVtcGxhdGVzJyk7XHJcbiAgICAgICAgdGhpcy5fYWRkVG9CdWlsdEluVGVtcGxhdGVzKGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAncHJldmlldyc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygncHJldmlldycpO1xyXG4gICAgICAgIHRoaXMucHJldmlld0J1aWx0SW5SZXBvcnRUZW1wbGF0ZShldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ01ha2VfZGVmYXVsdF9yZXBvcnRfbGF5b3V0Jzoge1xyXG4gICAgICAgIHRoaXMubWFrZVJlcG9ydERlZmF1bHRMYXlvdXQoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdkZWxldGVEZWZhdWx0UmVwb3J0RmlsZSc6IHtcclxuICAgICAgICB0aGlzLmRlbGV0ZURlZmF1bHRSZXBvcnRGaWxlKGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRlbGV0ZURlZmF1bHRSZXBvcnRGaWxlKGZpbGVOYW1lOiBhbnkpIHtcclxuICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKFxyXG4gICAgICBMb2NhbGl6YXRpb25LZXlzLmNvbmZpcm1EZWxldGUsXHJcbiAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgKHJlc3VsdDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0ID09IHRydWUpIHtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIGxldCBmb3JtTmFtZSA9IHRoaXMub3RoZXJGb3JtTmFtZSA/PyB0aGlzLkVESVRJT05fUEVSU09OTkFMSVNFO1xyXG4gICAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5kZWxldGVEZWZhdWx0UmVwb3J0VGVtcGxhdGVGaWxlKGZvcm1OYW1lLCBmaWxlTmFtZSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgbmV4dDogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHModHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uS2V5cy5kZWxldGVkU3VjY2Vzc2Z1bGx5XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvbkRlbGV0ZVNlbGVjdGVkUmVwb3J0cygpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKFxyXG4gICAgICBMb2NhbGl6YXRpb25LZXlzLmNvbmZpcm1EZWxldGUsXHJcbiAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgKHJlc3VsdDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHJlc3VsdCAmJlxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJlcG9ydHMgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJlcG9ydHMgIT0gdW5kZWZpbmVkXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgICAgICAgLmRlbGV0ZU11bHRpcGxlUmVwb3J0cyh0aGlzLnNlbGVjdGVkUmVwb3J0cylcclxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgbmV4dDogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25LZXlzLmRlbGV0ZWRTdWNjZXNzZnVsbHlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvbk5ld1JlcG9ydCgpOiB2b2lkIHtcclxuICAgIGlmIChcclxuICAgICAgKHRoaXMub3RoZXJGb3JtRW5kcG9pbnQgJiYgdGhpcy5vdGhlckZvcm1OYW1lKSB8fFxyXG4gICAgICB0aGlzLmlzRWRpdGlvblBlcnNvbm5hbGlzZVxyXG4gICAgKSB7XHJcbiAgICAgIGxldCByZXBvcnRUb1RlbXBsYXRlSWQ6IG51bWJlcjtcclxuICAgICAgbGV0IG1vZGFsU2l6ZSA9IE1vZGFsU2l6ZUVudW0uTGFyZ2U7XHJcbiAgICAgIGxldCBjb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XHJcbiAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgICAgd2lkdGg6IG1vZGFsU2l6ZS53aWR0aCxcclxuICAgICAgICBoZWlnaHQ6IG1vZGFsU2l6ZS5oZWlnaHQsXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgbW9kZTogTW9kZXMuY3JlYXRlLFxyXG4gICAgICAgICAgaXNFZGl0aW9uUGVyc29ubmFsaXNlOiB0aGlzLmlzRWRpdGlvblBlcnNvbm5hbGlzZSxcclxuICAgICAgICAgIGZyb21FbmRwb2ludDogdGhpcy5vdGhlckZvcm1FbmRwb2ludCxcclxuICAgICAgICAgIHJlcG9ydEJ1c2luZXNzQ2xhc3M6IHRoaXMuYnVzaW5lc3NDbGFzcyxcclxuICAgICAgICAgIGN1c3RvbVJlcG9ydGluZ01vZGU6IHRoaXMuY3VzdG9tUmVwb3J0aW5nTW9kZSxcclxuICAgICAgICB9LFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5fZGlhbG9nUmVmID0gdGhpcy5fdHNpTW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgICAgQWRkUmVwb3J0UG9wdXBDb21wb25lbnQsXHJcbiAgICAgICAgY29uZmlnXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLl9kaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHZhbCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzUmVwb3J0Rm9yRmljaGUpIHtcclxuICAgICAgICAgIHZhbC5lbmRQb2ludFZhbHVlID0gdmFsPy5lbmRQb2ludFZhbHVlPy5yZXBsYWNlQWxsKCd7aWR9JywgdGhpcy5lbnRpdHlJZCk7ICAgICAgICAgIFxyXG4gICAgICAgICAgdmFsLmVuZFBvaW50VmFsdWUgPSB2YWw/LmVuZFBvaW50VmFsdWU/LnJlcGxhY2VBbGwoJ3tidXNpbmVzc0NsYXNzfScsIHRoaXMuYnVzaW5lc3NDbGFzcyk7XHJcblxyXG4gICAgICAgICAgdmFsLmVuZFBvaW50S2V5ID0gdmFsPy5lbmRQb2ludEtleT8ucmVwbGFjZUFsbCgne2lkfScsIHRoaXMuZW50aXR5SWQpO1xyXG4gICAgICAgICAgdmFsLmVuZFBvaW50S2V5ID0gdmFsPy5lbmRQb2ludEtleT8ucmVwbGFjZUFsbCgne2J1c2luZXNzQ2xhc3N9JywgdGhpcy5idXNpbmVzc0NsYXNzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgICAgLmFkZFJlcG9ydFRvTW9kZWwoXHJcbiAgICAgICAgICAgIHRoaXMuX25ld1JlcG9ydFRvVGVtcGxhdGUoXHJcbiAgICAgICAgICAgICAgdmFsLnJlcG9ydFR5cGUsXHJcbiAgICAgICAgICAgICAgdmFsLnJlcG9ydE5hbWUsXHJcbiAgICAgICAgICAgICAgdmFsLmVuZFBvaW50VmFsdWUsXHJcbiAgICAgICAgICAgICAgdmFsLm1vZHVsZSxcclxuICAgICAgICAgICAgICB2YWwudHJpT3JkcmUsXHJcbiAgICAgICAgICAgICAgdmFsLnJlcG9ydE5hbWVBYnJlZ2UsXHJcbiAgICAgICAgICAgICAgdmFsLmRpc3BsYXlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IGFzeW5jICh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICByZXBvcnRUb1RlbXBsYXRlSWQgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICBsZXQgdXJsRGVzaWduZXI7XHJcbiAgICAgICAgICAgICAgbGV0IHRlbmFudFVpZCA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlkZW50aXR5TWFuYWdlclNlcnZpY2UucGFyc2VNeUF1dGhUb2tlbigpPy50ZW5hbnRVaWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vblJlZnJlc2goKVxyXG5cclxuICAgICAgICAgICAgICBpZiAodmFsLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgdXJsRGVzaWduZXIgPSBgJHtTZWdtZW50LnJlcG9ydGluZ1NlcnZpY2VCYXNlfS9yZXBvcnQtZGVzaWduZXIvJHtyZXBvcnRUb1RlbXBsYXRlSWR9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuRGFzaGJvYXJkKSB7XHJcbiAgICAgICAgICAgICAgICB1cmxEZXNpZ25lciA9IGAke1NlZ21lbnQuYXBwQmFzZUhyZWZ9LyR7dGhpcy5kYXNoYm9hcmRNb2R1bGVSb3V0ZX0vJHtNYW5hZ2VSZXBvcnRpbmdSb3V0ZXMuZGFzaGJvYXJkRGVzaWduZXJ9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QucmVwb3J0VG9UZW1wbGF0ZX09JHtyZXBvcnRUb1RlbXBsYXRlSWR9JiR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuUlRGKSB7XHJcbiAgICAgICAgICAgICAgICB1cmxEZXNpZ25lciA9IGAke1NlZ21lbnQucmVwb3J0aW5nU2VydmljZUJhc2V9L21haWxtZXJnZS8ke3JlcG9ydFRvVGVtcGxhdGVJZH0/JHtxdWVyeVBhcmFtTmFtZXNDb25zdC50ZW5hbnRVaWR9PSR7dGVuYW50VWlkfWA7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB3aW5kb3cub3Blbih1cmxEZXNpZ25lciwgJ19ibGFuaycpO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX3JlZGlyZWN0ZWRfdG9fbmV3X3JlcG9ydF9zdWNjZXNzZnVsbHknXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9jbG9zZU1vZGFsKHZhbCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xvc2VNb2RhbCh2YWw6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2RpYWxvZ1JlZikge1xyXG4gICAgICB0aGlzLl9kaWFsb2dSZWYuZGVzdHJveSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25Gb3JtQ2hhbmdlKCkge1xyXG4gICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHMoKTtcclxuICB9XHJcblxyXG4gIG9uSW1wb3J0RmlsZVRvUmVwb3J0TW9kYWxDYW5jZWxDbGljaygpOiB2b2lkIHtcclxuICAgIHRoaXMuX2hpZGVJbXBvcnRGaWxlVG9SZXBvcnREaWFsb2coKTtcclxuICB9XHJcblxyXG4gIG9uSW1wb3J0RmlsZVRvUmVwb3J0TW9kYWxTYXZlQ2xpY2soKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zaG93SW1wb3J0RmlsZVRvUmVwb3J0RGlhbG9nKCk7XHJcbiAgfVxyXG4gIC8vI3JlZ2lvbiBmaWxlIGltcG9ydFxyXG4gIG9uSW1wb3J0RmlsZVRvUmVwb3J0X0ZpbGVTZWxlY3RlZChldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBmaWxlOiBGaWxlID0gZXZlbnQuY3VycmVudEZpbGVzWzBdO1xyXG4gICAgdGhpcy50b1VwbG9hZFRvVXBkYXRlUmVwb3J0RmlsZURhdGEgPSBmaWxlO1xyXG4gIH1cclxuXHJcbiAgb25JbXBvcnRGaWxlVG9SZXBvcnRfSW1wb3J0RmlsZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFJlcG9ydFRvVXBkYXRlRnJvbUZpbGUpIHtcclxuICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgICAgLnVwZGF0ZVJlcG9ydExheW91dChcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZXBvcnRUb1VwZGF0ZUZyb21GaWxlLFxyXG4gICAgICAgICAgdGhpcy50b1VwbG9hZFRvVXBkYXRlUmVwb3J0RmlsZURhdGFcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiBhc3luYyAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHMoKTtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfcmVwb3J0X3VwbG9hZGVkX3N1Y2Nlc3NmdWxseSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5pbXBvcnRGaWxlVG9SZXBvcnRGaWxlVXBsb2FkPy5jbGVhcigpO1xyXG4gICAgICAgICAgICB0aGlzLl9oaWRlSW1wb3J0RmlsZVRvUmVwb3J0RGlhbG9nKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL2NhbmNlbCBidXR0b24gY2xpY2tcclxuICBvbkltcG9ydEZpbGVUb1JlcG9ydF9DbGVhcihldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnRvVXBsb2FkVG9VcGRhdGVSZXBvcnRGaWxlRGF0YSA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIC8vY2FuY2VsIGJ1dHRvbiBjbGlja1xyXG4gIG9uSW1wb3J0RmlsZVRvUmVwb3J0X1JlbW92ZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnRvVXBsb2FkVG9VcGRhdGVSZXBvcnRGaWxlRGF0YSA9IHVuZGVmaW5lZDtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gcHJpdmF0ZSBtZXRob2RzXHJcbiAgcHJpdmF0ZSBhc3luYyBfcmVmcmVzaFJlcG9ydHMocmVmcmVzaFJlcG9ydExpc3Q6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgbGV0IGZvcm1OYW1lID0gdGhpcy5vdGhlckZvcm1OYW1lXHJcbiAgICAgID8gdGhpcy5vdGhlckZvcm1OYW1lXHJcbiAgICAgIDogdGhpcy5FRElUSU9OX1BFUlNPTk5BTElTRTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgaXRlbXMgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuZ2V0UmVwb3J0cyhmb3JtTmFtZSwgdGhpcy5yZXBvcnREaXNjcmltaW5hdG9yKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnJlcG9ydHMgPSBpdGVtcy5tYXAoKHIpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4ucixcclxuICAgICAgICAgIHJlcG9ydFR5cGVOYW1lOlxyXG4gICAgICAgICAgICBNYW5hZ2VSZXBvcnRpbmdDb21wb25lbnQucmVwb3J0VHlwZUxhYmVsc1tyLnJlcG9ydFR5cGVdIHx8XHJcbiAgICAgICAgICAgICdVbmtub3duJyxcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVmcmVzaFJlcG9ydExpc3QpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICAvL2dldCBkZWZhdWx0IHJlcG9ydCB0ZW1wbGF0ZXMgZm9yIHRoaXMgZm9ybVxyXG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZS5nZXREZWZhdWx0UmVwb3J0VGVtcGxhdGUoZm9ybU5hbWUpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmRlZmF1bHRSZXBvcnRUZW1wbGF0ZURhdGEgPSByZXN1bHQ/LmRhdGE7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7IH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIF92aWV3UmVwb3J0KHVpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAvLyBpZiAodGhpcy5vdGhlckZvcm1FbmRwb2ludCAmJiB1aWQpIHtcclxuICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBsZXQgcmVwb3J0ID0gdGhpcy5yZXBvcnRzLmZpbmQoKHIpID0+IHIudWlkID09PSB1aWQpO1xyXG4gICAgaWYgKHJlcG9ydCA9PT0gdW5kZWZpbmVkIHx8IHJlcG9ydCA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgIC5hZGRSZXBvcnRUb1ByaW50KFxyXG4gICAgICAgIHRoaXMuX25ld1JlcG9ydFRvUHJpbnQodWlkLCByZXBvcnQucmVwb3J0VHlwZSwgcmVwb3J0Py5yZXN0RW5kcG9pbnQpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgbGV0IHJlcG9ydFRvVGVtcGxhdGVJZCA9IGRhdGEudWlkO1xyXG4gICAgICAgICAgbGV0IHVybERlc2lnbmVyO1xyXG4gICAgICAgICAgbGV0IHRlbmFudFVpZCA9XHJcbiAgICAgICAgICAgIHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5wYXJzZU15QXV0aFRva2VuKCk/LnRlbmFudFVpZDtcclxuICAgICAgICAgIGlmIChkYXRhLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuTGlzdCkge1xyXG4gICAgICAgICAgICB1cmxEZXNpZ25lciA9IGAke1NlZ21lbnQucmVwb3J0aW5nU2VydmljZUJhc2V9L3JlcG9ydC12aWV3ZXIvJHtyZXBvcnRUb1RlbXBsYXRlSWR9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChkYXRhLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuRGFzaGJvYXJkKSB7XHJcbiAgICAgICAgICAgIHVybERlc2lnbmVyID0gYCR7U2VnbWVudC5hcHBCYXNlSHJlZn0vJHt0aGlzLmRhc2hib2FyZE1vZHVsZVJvdXRlfS8ke01hbmFnZVJlcG9ydGluZ1JvdXRlcy5kYXNoYm9hcmRWaWV3ZXJ9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QucmVwb3J0VG9QcmludH09JHtyZXBvcnRUb1RlbXBsYXRlSWR9JiR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHdpbmRvdy5vcGVuKHVybERlc2lnbmVyLCAnX2JsYW5rJyk7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfcmVkaXJlY3RlZF90b19wcmludF9yZXBvcnRfc3VjY2Vzc2Z1bGx5J1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHsgfSxcclxuICAgICAgfSk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBfc2VuZFJlcG9ydCh1aWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IHJlcG9ydCA9IHRoaXMucmVwb3J0cy5maW5kKChyKSA9PiByLnVpZCA9PT0gdWlkKTtcclxuICAgIGlmIChyZXBvcnQgPT09IHVuZGVmaW5lZCB8fCByZXBvcnQgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IG1vZGFsU2l6ZSA9IE1vZGFsU2l6ZUVudW0uWE1lZGl1bTtcclxuICAgIGxldCBzYXZlU3ViamVjdDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuICAgIGxldCBjb25mOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICBkYXRhOiB7IHNhdmVTdWJqZWN0IH0sXHJcbiAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICB3aWR0aDogbW9kYWxTaXplLndpZHRoLFxyXG4gICAgICBoZWlnaHQ6IG1vZGFsU2l6ZS5oZWlnaHQsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5fZGlhbG9nUmVmID0gdGhpcy5fdHNpTW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgIFRzaVNlbmRNYWlsQ29tcG9uZW50LFxyXG4gICAgICBjb25mXHJcbiAgICApO1xyXG4gICAgc2F2ZVN1YmplY3Quc3Vic2NyaWJlKCh2YWw6IEVtYWlsSW5mb3JtYXRpb24pID0+IHtcclxuICAgICAgaWYgKCF2YWwpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF2YWwudG9BZGRyZXNzKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF2YWwuc3ViamVjdCkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIGxldCByZXBvcnRUb1ByaW50ID0gdGhpcy5fbmV3UmVwb3J0VG9QcmludChcclxuICAgICAgICB1aWQsXHJcbiAgICAgICAgcmVwb3J0IS5yZXBvcnRUeXBlLFxyXG4gICAgICAgIHJlcG9ydD8ucmVzdEVuZHBvaW50XHJcbiAgICAgIClcclxuICAgICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgICAuZXhwb3J0UmVwb3J0RmlsZVRvUGRmKHJlcG9ydFRvUHJpbnQpXHJcbiAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmV4dDogYXN5bmMgKGJsb2IpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBuZXdGaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCAnUmVwb3J0LnBkZicsIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGJsb2IudHlwZSxcclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgbGV0IGF0dGFjaG1lbnRzOiBGaWxlW10gPSBbXTtcclxuICAgICAgICAgICAgICBhdHRhY2htZW50cy5wdXNoKG5ld0ZpbGUpXHJcbiAgICAgICAgICAgICAgdGhpcy5fbWFpbGluZ1NlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5zZW5kTWFpbChcclxuICAgICAgICAgICAgICAgICAgdmFsLnRvQWRkcmVzcyEsXHJcbiAgICAgICAgICAgICAgICAgIHZhbC5zdWJqZWN0ISxcclxuICAgICAgICAgICAgICAgICAgdmFsLm1lc3NhZ2UgPz8gXCJcIixcclxuICAgICAgICAgICAgICAgICAgYXR0YWNobWVudHMsXHJcbiAgICAgICAgICAgICAgICAgIHZhbC5jY0FkZHJlc3NcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5pbmZvKFxyXG4gICAgICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uS2V5cy5zZW50U3VjY2Vzc0Z1bGx5XHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2Uuc2hvd0Vycm9yTWVzc2FnZShcclxuICAgICAgICAgICAgICAgICAgICAgIGVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2VcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkb3dubG9hZGluZyB0aGUgUERGJywgZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX3JlZGlyZWN0ZWRfdG9fcHJpbnRfcmVwb3J0X3N1Y2Nlc3NmdWxseSdcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5fY2xvc2VNb2RhbCh2YWwpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBfZWRpdFJlcG9ydCh1aWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIGxldCByZXBvcnQgPSB0aGlzLnJlcG9ydHMuZmluZCgocikgPT4gci51aWQgPT09IHVpZCk7XHJcblxyXG4gICAgaWYgKHJlcG9ydCA9PT0gdW5kZWZpbmVkIHx8IHJlcG9ydCA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgLmFkZFJlcG9ydFRvRWRpdFRlbXBsYXRlKFxyXG4gICAgICAgIHRoaXMuX25ld1JlcG9ydFRvRWRpdFRlbXBsYXRlKFxyXG4gICAgICAgICAgdWlkLFxyXG4gICAgICAgICAgcmVwb3J0LnJlcG9ydFR5cGUsXHJcbiAgICAgICAgICByZXBvcnQ/LnJlc3RFbmRwb2ludCxcclxuICAgICAgICAgIHJlcG9ydD8ubW9kdWxlLFxyXG4gICAgICAgICAgcmVwb3J0Py5vcmRlcixcclxuICAgICAgICAgIHJlcG9ydD8ucmVwb3J0TmFtZSxcclxuICAgICAgICAgIHJlcG9ydD8uc2hvcnROYW1lLFxyXG4gICAgICAgICAgcmVwb3J0Py5kaXNwbGF5XHJcbiAgICAgICAgKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICh2YWx1ZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyh2YWx1ZSk7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuaXNSZXBvcnRGb3JGaWNoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBndWlkUmVnZXggPSAvWzAtOWEtZkEtRi1dezM2fS9nO1xyXG4gICAgICAgICAgICB2YWx1ZS5yZXN0RW5kcG9pbnQgPSB2YWx1ZT8ucmVzdEVuZHBvaW50Py5yZXBsYWNlQWxsKFxyXG4gICAgICAgICAgICAgIGd1aWRSZWdleCxcclxuICAgICAgICAgICAgICAne2lkfSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBsZXQgY29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgd2lkdGg6IE1vZGFsU2l6ZUVudW0uTGFyZ2Uud2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogTW9kYWxTaXplRW51bS5MYXJnZS5oZWlnaHQsXHJcbiAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXHJcbiAgICAgICAgICAgICAgbW9kZTogTW9kZXMuZWRpdCxcclxuICAgICAgICAgICAgICBpc0VkaXRpb25QZXJzb25uYWxpc2U6IHRoaXMuaXNFZGl0aW9uUGVyc29ubmFsaXNlLFxyXG4gICAgICAgICAgICAgIGZyb21FbmRwb2ludDogdGhpcy5vdGhlckZvcm1FbmRwb2ludFxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLm90aGVyRm9ybUVuZHBvaW50XHJcbiAgICAgICAgICAgICAgICA6IHJlcG9ydD8ucmVzdEVuZHBvaW50LFxyXG4gICAgICAgICAgICAgIHJlcG9ydEJ1c2luZXNzQ2xhc3M6IHRoaXMuYnVzaW5lc3NDbGFzcyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLl9kaWFsb2dSZWYgPSB0aGlzLl90c2lNb2RhbFNlcnZpY2Uub3BlbihcclxuICAgICAgICAgICAgQWRkUmVwb3J0UG9wdXBDb21wb25lbnQsXHJcbiAgICAgICAgICAgIGNvbmZpZ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgbGV0IG1vZGVsOiBSZXBvcnRUb0VkaXRUZW1wbGF0ZVBheWxvYWQgPSB7XHJcbiAgICAgICAgICAgICAgcmVwb3J0VGVtcGxhdGVVaWQ6IHVpZCxcclxuICAgICAgICAgICAgICByZXBvcnROYW1lOiB2YWwucmVwb3J0TmFtZSxcclxuICAgICAgICAgICAgICByZXN0RW5kcG9pbnQ6IHRoaXMuaXNSZXBvcnRGb3JGaWNoZVxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuaW5zZXJ0TmV3VWlkSW5SZXN0RW5kUG9pbnQoXHJcbiAgICAgICAgICAgICAgICAgIHZhbD8uZW5kUG9pbnRWYWx1ZSxcclxuICAgICAgICAgICAgICAgICAgdGhpcy5pZFxyXG4gICAgICAgICAgICAgICAgKSA/PyB0aGlzLm90aGVyRm9ybUVuZHBvaW50XHJcbiAgICAgICAgICAgICAgICA6IHRoaXMub3RoZXJGb3JtRW5kcG9pbnQsXHJcbiAgICAgICAgICAgICAgbW9kdWxlOiB2YWwubW9kdWxlLFxyXG4gICAgICAgICAgICAgIG9yZGVyOiB2YWwudHJpT3JkcmUsXHJcbiAgICAgICAgICAgICAgc2hvcnROYW1lOiB2YWwucmVwb3J0TmFtZUFicmVnZSxcclxuICAgICAgICAgICAgICBkaXNwbGF5OiB2YWwuZGlzcGxheSxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZS5lZGl0UmVwb3J0VG9FZGl0VGVtcGxhdGUobW9kZWwpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuZXh0IDogYXN5bmMgKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMub25SZWZyZXNoKClcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgbGV0IHJlcG9ydFRvVGVtcGxhdGVJZCA9IHZhbHVlLnVpZDtcclxuICAgICAgICAgICAgbGV0IHVybERlc2lnbmVyO1xyXG4gICAgICAgICAgICBsZXQgdGVuYW50VWlkID1cclxuICAgICAgICAgICAgICB0aGlzLmlkZW50aXR5TWFuYWdlclNlcnZpY2UucGFyc2VNeUF1dGhUb2tlbigpPy50ZW5hbnRVaWQ7XHJcblxyXG4gICAgICAgICAgICBsZXQgY2FucmVkaXJlY3QgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY2FuUmVkaXJlY3QnKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS5yZXBvcnRUeXBlID09PSBUc2lSZXBvcnRUeXBlLkxpc3QpIHtcclxuICAgICAgICAgICAgICB1cmxEZXNpZ25lciA9IGAke1NlZ21lbnQucmVwb3J0aW5nU2VydmljZUJhc2V9L3JlcG9ydC1kZXNpZ25lci1lZGl0LyR7cmVwb3J0VG9UZW1wbGF0ZUlkfT8ke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnRlbmFudFVpZH09JHt0ZW5hbnRVaWR9YDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5yZXBvcnRUeXBlID09PSBUc2lSZXBvcnRUeXBlLkRhc2hib2FyZCkge1xyXG4gICAgICAgICAgICAgIHVybERlc2lnbmVyID0gYCR7U2VnbWVudC5hcHBCYXNlSHJlZn0vJHt0aGlzLmRhc2hib2FyZE1vZHVsZVJvdXRlfS8ke01hbmFnZVJlcG9ydGluZ1JvdXRlcy5kYXNoYm9hcmREZXNpZ25lcn0/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+PC9Uc2ktQnV0dG9uPlxyXG5cclxuICA8dHNpLXZpZXctZ3JpZCBcclxuICAgIFtzb3J0TW9kZV09XCJzb3J0TW9kZVJlZi5TaW5nbGVcIlxyXG4gICAgW2hlYWRlcl09XCInc2hhcmVkX3JlcG9ydGluZ19teV90ZW1wbGF0ZSdcIlxyXG4gICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiIFtncmlkRGF0YV09XCJyZXBvcnRzXCIga2V5PVwidWlkXCJcclxuICAgIChidXR0b25Db2x1bW5DbGlja2VkKT1cImhhbmRsZUJ1dHRvbkNvbHVtbkNsaWNrZWQoJGV2ZW50KVwiIFsoc2VsZWN0ZWRJdGVtcyldPVwic2VsZWN0ZWRSZXBvcnRzXCJcclxuICAgIFtnZXREYXRhRnJvbUFwaV09XCJmYWxzZVwiXHJcbiAgICBbZm9ybU5hbWVdPVwiJ215LXJlcG9ydC10ZW1wbGF0ZXMnXCJcclxuICAgID5cclxuICA8L3RzaS12aWV3LWdyaWQ+XHJcbiAgPGJyLz5cclxuICAgPCEtLSBEZWZhdWx0IFRlbXBsYXRlIC0tPlxyXG4gICA8IS0tIDxUc2ktRGlzcGxheS1HcmlkIFxyXG4gICBbc2hvd0hlYWRlcl09XCJ0cnVlXCIgXHJcbiAgIFtoZWFkZXJdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfQnVpbHRJbl90ZW1wbGF0ZSdcIlxyXG4gICBbc2hvd1N1bW1hcnlGb290ZXJdPVwiZmFsc2VcIiBcclxuICAgW3BhZ2luYXRvcl09XCJmYWxzZVwiIFxyXG4gICBbc2hvd0ZpbHRlcnNdPVwiZmFsc2VcIiBcclxuICAgW2NvbHVtbnNdPVwiZGVmYXVsdFRlbXBsYXRlQ29sdW1uc1wiIFxyXG4gICBbZ3JpZERhdGFdPVwiZGVmYXVsdFJlcG9ydFRlbXBsYXRlRGF0YVwiIFxyXG4gICAoYnV0dG9uQ29sdW1uQ2xpY2tlZCk9XCJoYW5kbGVCdXR0b25Db2x1bW5DbGlja2VkKCRldmVudClcIlxyXG4gICBbcGFnaW5hdG9yXT1cInRydWVcIlxyXG4gICBrZXk9XCJuYW1lXCI+XHJcbiAgPC9Uc2ktRGlzcGxheS1HcmlkPiAtLT5cclxuXHJcbiAgXHJcbiAgPHRzaS12aWV3LWdyaWRcclxuICAgW3NvcnRNb2RlXT1cInNvcnRNb2RlUmVmLlNpbmdsZVwiXHJcbiAgIFtoZWFkZXJdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfQnVpbHRJbl90ZW1wbGF0ZSdcIlxyXG4gICBbY29sdW1uc109XCJkZWZhdWx0VGVtcGxhdGVDb2x1bW5zXCIgXHJcbiAgIFtncmlkRGF0YV09XCJkZWZhdWx0UmVwb3J0VGVtcGxhdGVEYXRhXCIgXHJcbiAgIChidXR0b25Db2x1bW5DbGlja2VkKT1cImhhbmRsZUJ1dHRvbkNvbHVtbkNsaWNrZWQoJGV2ZW50KVwiXHJcbiAgIFtnZXREYXRhRnJvbUFwaV09XCJmYWxzZVwiXHJcbiAgIFtmb3JtTmFtZV09XCInZGVmYXVsdC1teS1yZXBvcnQtdGVtcGxhdGVzJ1wiXHJcbiAgIGtleT1cIm5hbWVcIj5cclxuICA8L3RzaS12aWV3LWdyaWQ+XHJcblxyXG5cclxuXHJcblxyXG4gIFxyXG5cclxuICA8IS0tIGRpYWxvZyB0byBpbXBvcnQgZmlsZSB0byByZXBvcnQgLS0+XHJcbiAgPHAtZGlhbG9nIGhlYWRlcj1cInt7J3NoYXJlZF9yZXBvcnRpbmdfc2VsZWN0X2ZpbGVfdG9faW1wb3J0X2ludG9fcmVwb3J0JyB8IGxvY2FsaXplfX1cIiBbKHZpc2libGUpXT1cImlzVXBkYXRlUmVwb3J0RnJvbUZpbGVEaWFsb2dWaXNpYmxlXCIgW3N0eWxlXT1cInt3aWR0aDogJzUwdncnfVwiPlxyXG4gICAgPCEtLSA8VHNpLU1vZGFsLUhlYWRlciAob25DbG9zZUNsaWNrKT1cIm9uSW1wb3J0RmlsZVRvUmVwb3J0TW9kYWxDYW5jZWxDbGljaygpXCIgW2lucHV0VGl0bGVdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfc2VsZWN0X2ZpbGVfdG9faW1wb3J0X2ludG9fcmVwb3J0J1wiPjwvVHNpLU1vZGFsLUhlYWRlcj4gLS0+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIj5cclxuICAgICAgPHAtZmlsZVVwbG9hZCAjaW1wb3J0RmlsZVRvUmVwb3J0RmlsZVVwbG9hZCBuYW1lPVwiaW1wb3J0RmlsZVRvUmVwb3J0XCIgKG9uQmVmb3JlVXBsb2FkKT1cIm9uSW1wb3J0RmlsZVRvUmVwb3J0X0ltcG9ydEZpbGUoJGV2ZW50KVwiXHJcbiAgICAgICAgKG9uU2VsZWN0KT1cIm9uSW1wb3J0RmlsZVRvUmVwb3J0X0ZpbGVTZWxlY3RlZCgkZXZlbnQpXCIgKG9uQ2xlYXIpPVwib25JbXBvcnRGaWxlVG9SZXBvcnRfQ2xlYXIoJGV2ZW50KVwiIChvblJlbW92ZSk9XCJvbkltcG9ydEZpbGVUb1JlcG9ydF9SZW1vdmUoJGV2ZW50KVwiIFttdWx0aXBsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgYWNjZXB0PVwiYXBwbGljYXRpb24vanNvblwiIFttYXhGaWxlU2l6ZV09XCIxMDAwMDAwMFwiXHJcbiAgICAgICAgW2ludmFsaWRGaWxlU2l6ZU1lc3NhZ2VTdW1tYXJ5XT1cIidzaGFyZWRfZmlsZV91cGxvYWRfaW52YWxpZF9maWxlX3NpemVfbWVzc2FnZV9zdW1tYXJ5JyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVTaXplTWVzc2FnZURldGFpbF09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV9zaXplX21lc3NhZ2VfZGV0YWlsJyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVUeXBlTWVzc2FnZVN1bW1hcnldPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfdHlwZV9tZXNzYWdlX3N1bW1hcnknIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZUxpbWl0TWVzc2FnZURldGFpbF09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV9saW1pdF9tZXNzYWdlX2RldGFpbCcgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW2ludmFsaWRGaWxlTGltaXRNZXNzYWdlU3VtbWFyeV09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV9saW1pdF9tZXNzYWdlX3N1bW1hcnknIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZVR5cGVNZXNzYWdlRGV0YWlsXT1cIidzaGFyZWRfZmlsZV91cGxvYWRfaW52YWxpZF9maWxlX3R5cGVfbWVzc2FnZV9kZXRhaWwnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtjaG9vc2VJY29uXT1cIidwaSBwaS1wYXBlcmNsaXAnXCIgY2FuY2VsU3R5bGVDbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeVwiIHVwbG9hZFN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1oZWxwXCJcclxuICAgICAgICByZW1vdmVTdHlsZUNsYXNzPVwicC1idXR0b24tZGFuZ2VyXCIgW2Nob29zZUxhYmVsXT1cIidzaGFyZWRfcmVwb3J0aW5nX2Nob29zZV9yZXBvcnRfZmlsZScgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW3VwbG9hZExhYmVsXT1cIidzaGFyZWRfcmVwb3J0aW5nX2ltcG9ydF9yZXBvcnQnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtjYW5jZWxMYWJlbF09XCInc2hhcmVkX3JlcG9ydGluZ19jYW5jZWxfY2hvb3NlX3JlcG9ydF9maWxlJyB8IGxvY2FsaXplXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwidG9VcGxvYWRUb1VwZGF0ZVJlcG9ydEZpbGVEYXRhXCIgcFRlbXBsYXRlPVwiZmlsZXVwbG9hZC1jb250ZW50XCI+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9wLWZpbGVVcGxvYWQ+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDwhLS0gPFRzaS1Nb2RhbC1Gb290ZXIgKG9uQ2FuY2VsQ2xpY2spPVwib25JbXBvcnRGaWxlVG9SZXBvcnRNb2RhbENhbmNlbENsaWNrKClcIlxyXG4gICAgKG9uU2F2ZUNsaWNrKT1cIm9uSW1wb3J0RmlsZVRvUmVwb3J0TW9kYWxTYXZlQ2xpY2soKVwiXHJcbiAgICBbc2F2ZURpc2FibGVkXT1cIiF0b1VwbG9hZFRvVXBkYXRlUmVwb3J0RmlsZURhdGFcIj48L1RzaS1Nb2RhbC1Gb290ZXI+IC0tPlxyXG5cclxuPC9wLWRpYWxvZz5cclxuPC9kaXY+XHJcbiJdfQ==
|