ngx-histaff-alpha 3.2.3 → 3.2.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/app/libraries/core-org-param/core-org-param.component.mjs +2 -2
- package/esm2022/lib/app/libraries/core-page-list/core-page-list.component.mjs +4 -3
- package/esm2022/lib/app/libraries/staffprofile/staffprofile.component.mjs +2 -1
- package/fesm2022/ngx-histaff-alpha.mjs +5 -3
- package/fesm2022/ngx-histaff-alpha.mjs.map +1 -1
- package/lib/app/libraries/core-table/core-table.component.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1058,6 +1058,7 @@ export class CorePageListComponent extends CoreFormControlBaseComponent {
|
|
|
1058
1058
|
/** END setTimeout*/
|
|
1059
1059
|
}
|
|
1060
1060
|
onParamKitValueChange(data) {
|
|
1061
|
+
console.log("onParamKitValueChange", data);
|
|
1061
1062
|
switch (data.field) {
|
|
1062
1063
|
case 'orgIds':
|
|
1063
1064
|
const newOrgInOperators = JSON.parse(JSON.stringify(this.inOperators$.value));
|
|
@@ -1654,7 +1655,7 @@ export class CorePageListComponent extends CoreFormControlBaseComponent {
|
|
|
1654
1655
|
useExisting: CorePageListComponent,
|
|
1655
1656
|
},
|
|
1656
1657
|
CorePageListState,
|
|
1657
|
-
], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "corePageListContainer", first: true, predicate: ["corePageListContainer"], descendants: true }, { propertyName: "paginationContainer", first: true, predicate: ["paginationContainer"], descendants: true }, { propertyName: "fileImport", first: true, predicate: ["fileImport"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #container class=\"core-page-list-container\" #corePageListContainer [ngStyle]=\"{ height: height + 'px' }\">\r\n\r\n <core-page-header *ngIf=\"!!!hideHeader\" [instanceNumber]=\"corePageListInstanceNumber\" [title]=\"title\" (buttonClick)=\"onCorePageHeaderButtonClick($event)\"\r\n [hideButtonGroup]=\"!!seekerMode || !!hideButtonGroup\"></core-page-header>\r\n\r\n <input #fileImport type=\"file\" name=\"name\"\r\n accept=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\r\n style=\"display: none;\" (change)='inputFile($event)' />\r\n\r\n <!--\r\n Khi \u0111\u00E3 t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao compositionHeight c\u1EE7a core-composition\r\n C\u1EA7n t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao coreTableHeight c\u1EE7a CoreTable\r\n N\u1EBFu ph\u1EA7n top c\u1EE7a composition c\u1ED1 \u0111\u1ECBnh (v\u00ED d\u1EE5 khi s\u1EED d\u1EE5ng CoreParamKit) th\u00EC ph\u00E9p tr\u1EEB \u0111\u01A1n gi\u1EA3n\r\n Nh\u01B0ng n\u1EBFu ph\u1EA7n top \u0111\u01B0\u1EE3c customize, ta ph\u1EA3i s\u1EED d\u1EE5ng extraManualOffset\r\n -->\r\n <core-composition \r\n [coreCompositionInstanceNumber]=\"corePageListInstanceNumber\" \r\n [top]=\"topPlace\" \r\n [left]=\"!!hideLeft? undefined :left\" \r\n [main]=\"coreTable\" \r\n [height]=\"compositionHeight\">\r\n </core-composition>\r\n\r\n <router-outlet name=\"corePageListAux\"></router-outlet>\r\n\r\n</div>\r\n\r\n<ng-template #topPlace>\r\n\r\n <ng-container *ngIf=\"!!showParamKit\">\r\n <core-common-param-kit [datePeriodComparisonFor]=\"datePeriodComparisonFor\"\r\n [enableTimeZoneConverterForDateTimePeriodParameters]=\"enableTimeZoneConverterForDateTimePeriodParameters\"\r\n [datePeriodComparisonForLabelKey]=\"datePeriodComparisonForLabelKey\"\r\n [statusInclusionFor]=\"statusInclusionFor\" [statusInclusionForLabelKey]=\"statusInclusionForLabelKey\"\r\n [statusOptionsApi]=\"statusOptionsApi\"\r\n [statusOptions$]=\"statusOptions$\"\r\n [showOrgParam]=\"showOrgParam\"\r\n [hideGeneralSearch]=\"hideGeneralSearch\"\r\n [hideDatePeriodComparison]=\"hideDatePeriodComparison\" \r\n [hideStatusInclusion]=\"hideStatusInclusion\"\r\n (onChange)=\"onParamKitValueChange($event)\"></core-common-param-kit>\r\n </ng-container>\r\n\r\n <ng-container *ngTemplateOutlet=\"top\">\r\n\r\n </ng-container>\r\n\r\n</ng-template>\r\n\r\n<ng-template #coreTable>\r\n\r\n <div [class.opacity0]=\"!!!geometricDone\">\r\n\r\n <!--\r\n Khi \u0111\u00E3 t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao compositionHeight c\u1EE7a core-composition\r\n C\u1EA7n t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao coreTableHeight c\u1EE7a CoreTable\r\n N\u1EBFu ph\u1EA7n top c\u1EE7a composition c\u1ED1 \u0111\u1ECBnh (v\u00ED d\u1EE5 khi s\u1EED d\u1EE5ng CoreParamKit) th\u00EC ph\u00E9p tr\u1EEB \u0111\u01A1n gi\u1EA3n\r\n Nh\u01B0ng n\u1EBFu ph\u1EA7n top \u0111\u01B0\u1EE3c customize, ta ph\u1EA3i s\u1EED d\u1EE5ng extraManualOffset\r\n\r\n C\u1EA7n t\u00EDnh tableHeight nh\u01B0 th\u1EBF n\u00E0o?\r\n -->\r\n <core-table #coreTableAlone width=\"100%\" [height]=\"tableHeight\" [rowHeight]=\"rowHeight || '46px'\" [wrap]=\"wrap\"\r\n [columns]=\"columns\" [data]=\"list\" [showCheckbox]=\"!!!hideCheck\" headerHeight=\"60px\" [showTools]=\"showListInlineTools\"\r\n [tools]=\"inlineTools\" (onToolClick)=\"onToolClick($event)\" (onRowClick)=\"onRowClick($event)\"\r\n (onRowDoubleClick)=\"onRowDoubleClick($event)\" (onSelectedIdsChange)=\"onSelectedIdsChange($event)\"\r\n (onSelectedDataChange)=\"onSelectedDataChange($event)\" [frozen]=\"frozen || 1\"\r\n (onSearching)=\"onSearching($event)\" (onColumnCaptionClick)=\"onColumnCaptionClick($event)\"\r\n [corePageListInstanceNumber]=\"corePageListInstanceNumber\" [loading]=\"loading\"\r\n [columnSearchDefaultOpen]=\"columnSearchDefaultOpen\" [lazyLoading]=\"true\"\r\n [headerWrap]=\"headerWrap\"\r\n [headerFirstRowHeight]=\"headerFirstRowHeight\"\r\n [noPaddingCell]=\"noPaddingCell\"\r\n [disableHighlightOnClick]=\"disableHighlightOnClick\"\r\n ></core-table>\r\n\r\n <div class=\"d-flex-end pagination-wrapper\" #paginationContainer>\r\n <core-pagination-full [height]=\"paginationHeight\" [currentPage$]=\"currentPage$\" [pageSize$]=\"pageSize$\"\r\n [pageCount]=\"pageCount\" [innerBodyCount$]=\"innerBodyCount$\" [pagination$]=\"pagination$\"\r\n [loading]=\"loading\" [fixedPageSize]=\"fixedPageSize\" [background]=\"'#848484'\"></core-pagination-full>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n</ng-template>\r\n\r\n<core-api-progress *ngIf=\"longApiRunning\" (onClose)=\"onProgressWindowClose($event)\"></core-api-progress>\r\n\r\n<app-fullscreen-modal-loader *ngIf=\"prefetchLoading\"></app-fullscreen-modal-loader>", styles: [".core-page-list-container{--height: auto;box-sizing:border-box!important;border:none!important;height:var(--height)}.core-page-list-container *{box-sizing:border-box}.core-page-list-container .column-caption{text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i16.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i16.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i16.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i4.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: CoreTableComponent, selector: "core-table", inputs: ["id", "width", "height", "showCheckbox", "checkboxSize", "outerButtons", "showTools", "tools", "checkingResetFlag", "borderRadius", "headerBackgroundColor", "headerWrap", "headerFirstRowHeight", "headerSecondRowHeight", "wrap", "allowCellScrollY", "loading", "rowHeight", "frozen", "footer", "columns", "data", "selectedIds", "corePageListInstanceNumber", "disableHighlightOnClick", "freeMode", "searchSwitchDisabled", "disableSorting", "inlineToolItems", "columnSearchDefaultOpen", "lazyLoading", "noPaddingCell"], outputs: ["onSearching", "onToolClick", "onRowClick", "onRowDoubleClick", "onSelectedIdsChange", "onSelectedDataChange", "onColumnCaptionClick"] }, { kind: "component", type: CorePaginationFullComponent, selector: "core-pagination-full", inputs: ["currentPage$", "height", "pageCount", "loading", "showAdd", "background", "pageSize$", "innerBodyCount$", "pagination$", "fixedPageSize"], outputs: ["onClickAdd", "onCurrentPageChange"] }, { kind: "component", type: CorePageHeaderComponent, selector: "core-page-header", inputs: ["instanceNumber", "shownItems", "title", "hideButtonGroup"], outputs: ["buttonClick"] }, { kind: "component", type: CoreCompositionComponent, selector: "core-composition", inputs: ["coreCompositionInstanceNumber", "top", "left", "leftWidth", "main", "height", "defaultResizeOff"] }, { kind: "component", type: CoreCommonParamKitComponent, selector: "core-common-param-kit", inputs: ["enableTimeZoneConverterForDateTimePeriodParameters", "datePeriodComparisonFor", "datePeriodComparisonForLabelKey", "statusInclusionFor", "statusInclusionForLabelKey", "statusOptionsApi", "showOrgParam", "hideDatePeriodComparison", "hideStatusInclusion", "hideGeneralSearch", "statusOptions$"], outputs: ["onChange"] }, { kind: "component", type: CoreApiProgressComponent, selector: "core-api-progress", outputs: ["onClose"] }, { kind: "component", type: FullscreenModalLoaderComponent, selector: "app-fullscreen-modal-loader", inputs: ["content"] }] }); }
|
|
1658
|
+
], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "corePageListContainer", first: true, predicate: ["corePageListContainer"], descendants: true }, { propertyName: "paginationContainer", first: true, predicate: ["paginationContainer"], descendants: true }, { propertyName: "fileImport", first: true, predicate: ["fileImport"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #container class=\"core-page-list-container\" #corePageListContainer [ngStyle]=\"{ height: height + 'px' }\">\r\n\r\n <core-page-header *ngIf=\"!!!hideHeader\" [instanceNumber]=\"corePageListInstanceNumber\" [title]=\"title\" (buttonClick)=\"onCorePageHeaderButtonClick($event)\"\r\n [hideButtonGroup]=\"!!seekerMode || !!hideButtonGroup\"></core-page-header>\r\n\r\n <input #fileImport type=\"file\" name=\"name\"\r\n accept=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\r\n style=\"display: none;\" (change)='inputFile($event)' />\r\n\r\n <!--\r\n Khi \u0111\u00E3 t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao compositionHeight c\u1EE7a core-composition\r\n C\u1EA7n t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao coreTableHeight c\u1EE7a CoreTable\r\n N\u1EBFu ph\u1EA7n top c\u1EE7a composition c\u1ED1 \u0111\u1ECBnh (v\u00ED d\u1EE5 khi s\u1EED d\u1EE5ng CoreParamKit) th\u00EC ph\u00E9p tr\u1EEB \u0111\u01A1n gi\u1EA3n\r\n Nh\u01B0ng n\u1EBFu ph\u1EA7n top \u0111\u01B0\u1EE3c customize, ta ph\u1EA3i s\u1EED d\u1EE5ng extraManualOffset\r\n -->\r\n <core-composition \r\n [coreCompositionInstanceNumber]=\"corePageListInstanceNumber\" \r\n [top]=\"topPlace\" \r\n [left]=\"!!hideLeft? undefined :left\" \r\n [main]=\"coreTable\" \r\n [height]=\"compositionHeight\">\r\n </core-composition>\r\n\r\n <router-outlet name=\"corePageListAux\"></router-outlet>\r\n\r\n</div>\r\n\r\n<ng-template #topPlace>\r\n\r\n <ng-container *ngIf=\"!!showParamKit\">\r\n <core-common-param-kit \r\n [datePeriodComparisonFor]=\"datePeriodComparisonFor\"\r\n [enableTimeZoneConverterForDateTimePeriodParameters]=\"enableTimeZoneConverterForDateTimePeriodParameters\"\r\n [datePeriodComparisonForLabelKey]=\"datePeriodComparisonForLabelKey\"\r\n [statusInclusionFor]=\"statusInclusionFor\" [statusInclusionForLabelKey]=\"statusInclusionForLabelKey\"\r\n [statusOptionsApi]=\"statusOptionsApi\"\r\n [statusOptions$]=\"statusOptions$\"\r\n [showOrgParam]=\"showOrgParam\"\r\n [hideGeneralSearch]=\"hideGeneralSearch\"\r\n [hideDatePeriodComparison]=\"hideDatePeriodComparison\" \r\n [hideStatusInclusion]=\"hideStatusInclusion\"\r\n (onChange)=\"onParamKitValueChange($event)\"></core-common-param-kit>\r\n </ng-container>\r\n\r\n <ng-container *ngTemplateOutlet=\"top\">\r\n\r\n </ng-container>\r\n\r\n</ng-template>\r\n\r\n<ng-template #coreTable>\r\n\r\n <div [class.opacity0]=\"!!!geometricDone\">\r\n\r\n <!--\r\n Khi \u0111\u00E3 t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao compositionHeight c\u1EE7a core-composition\r\n C\u1EA7n t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao coreTableHeight c\u1EE7a CoreTable\r\n N\u1EBFu ph\u1EA7n top c\u1EE7a composition c\u1ED1 \u0111\u1ECBnh (v\u00ED d\u1EE5 khi s\u1EED d\u1EE5ng CoreParamKit) th\u00EC ph\u00E9p tr\u1EEB \u0111\u01A1n gi\u1EA3n\r\n Nh\u01B0ng n\u1EBFu ph\u1EA7n top \u0111\u01B0\u1EE3c customize, ta ph\u1EA3i s\u1EED d\u1EE5ng extraManualOffset\r\n\r\n C\u1EA7n t\u00EDnh tableHeight nh\u01B0 th\u1EBF n\u00E0o?\r\n -->\r\n <core-table #coreTableAlone width=\"100%\" [height]=\"tableHeight\" [rowHeight]=\"rowHeight || '46px'\" [wrap]=\"wrap\"\r\n [columns]=\"columns\" [data]=\"list\" [showCheckbox]=\"!!!hideCheck\" headerHeight=\"60px\" [showTools]=\"showListInlineTools\"\r\n [tools]=\"inlineTools\" (onToolClick)=\"onToolClick($event)\" (onRowClick)=\"onRowClick($event)\"\r\n (onRowDoubleClick)=\"onRowDoubleClick($event)\" (onSelectedIdsChange)=\"onSelectedIdsChange($event)\"\r\n (onSelectedDataChange)=\"onSelectedDataChange($event)\" [frozen]=\"frozen || 1\"\r\n (onSearching)=\"onSearching($event)\" (onColumnCaptionClick)=\"onColumnCaptionClick($event)\"\r\n [corePageListInstanceNumber]=\"corePageListInstanceNumber\" [loading]=\"loading\"\r\n [columnSearchDefaultOpen]=\"columnSearchDefaultOpen\" [lazyLoading]=\"true\"\r\n [headerWrap]=\"headerWrap\"\r\n [headerFirstRowHeight]=\"headerFirstRowHeight\"\r\n [noPaddingCell]=\"noPaddingCell\"\r\n [disableHighlightOnClick]=\"disableHighlightOnClick\"\r\n ></core-table>\r\n\r\n <div class=\"d-flex-end pagination-wrapper\" #paginationContainer>\r\n <core-pagination-full [height]=\"paginationHeight\" [currentPage$]=\"currentPage$\" [pageSize$]=\"pageSize$\"\r\n [pageCount]=\"pageCount\" [innerBodyCount$]=\"innerBodyCount$\" [pagination$]=\"pagination$\"\r\n [loading]=\"loading\" [fixedPageSize]=\"fixedPageSize\" [background]=\"'#848484'\"></core-pagination-full>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n</ng-template>\r\n\r\n<core-api-progress *ngIf=\"longApiRunning\" (onClose)=\"onProgressWindowClose($event)\"></core-api-progress>\r\n\r\n<app-fullscreen-modal-loader *ngIf=\"prefetchLoading\"></app-fullscreen-modal-loader>", styles: [".core-page-list-container{--height: auto;box-sizing:border-box!important;border:none!important;height:var(--height)}.core-page-list-container *{box-sizing:border-box}.core-page-list-container .column-caption{text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i16.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i16.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i16.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i4.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: CoreTableComponent, selector: "core-table", inputs: ["id", "width", "height", "showCheckbox", "checkboxSize", "outerButtons", "showTools", "tools", "checkingResetFlag", "borderRadius", "headerBackgroundColor", "headerWrap", "headerFirstRowHeight", "headerSecondRowHeight", "wrap", "allowCellScrollY", "loading", "rowHeight", "frozen", "footer", "columns", "data", "selectedIds", "corePageListInstanceNumber", "disableHighlightOnClick", "freeMode", "searchSwitchDisabled", "disableSorting", "inlineToolItems", "columnSearchDefaultOpen", "lazyLoading", "noPaddingCell"], outputs: ["onSearching", "onToolClick", "onRowClick", "onRowDoubleClick", "onSelectedIdsChange", "onSelectedDataChange", "onColumnCaptionClick"] }, { kind: "component", type: CorePaginationFullComponent, selector: "core-pagination-full", inputs: ["currentPage$", "height", "pageCount", "loading", "showAdd", "background", "pageSize$", "innerBodyCount$", "pagination$", "fixedPageSize"], outputs: ["onClickAdd", "onCurrentPageChange"] }, { kind: "component", type: CorePageHeaderComponent, selector: "core-page-header", inputs: ["instanceNumber", "shownItems", "title", "hideButtonGroup"], outputs: ["buttonClick"] }, { kind: "component", type: CoreCompositionComponent, selector: "core-composition", inputs: ["coreCompositionInstanceNumber", "top", "left", "leftWidth", "main", "height", "defaultResizeOff"] }, { kind: "component", type: CoreCommonParamKitComponent, selector: "core-common-param-kit", inputs: ["enableTimeZoneConverterForDateTimePeriodParameters", "datePeriodComparisonFor", "datePeriodComparisonForLabelKey", "statusInclusionFor", "statusInclusionForLabelKey", "statusOptionsApi", "showOrgParam", "hideDatePeriodComparison", "hideStatusInclusion", "hideGeneralSearch", "statusOptions$"], outputs: ["onChange"] }, { kind: "component", type: CoreApiProgressComponent, selector: "core-api-progress", outputs: ["onClose"] }, { kind: "component", type: FullscreenModalLoaderComponent, selector: "app-fullscreen-modal-loader", inputs: ["content"] }] }); }
|
|
1658
1659
|
}
|
|
1659
1660
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CorePageListComponent, decorators: [{
|
|
1660
1661
|
type: Component,
|
|
@@ -1675,7 +1676,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
1675
1676
|
useExisting: CorePageListComponent,
|
|
1676
1677
|
},
|
|
1677
1678
|
CorePageListState,
|
|
1678
|
-
], template: "<div #container class=\"core-page-list-container\" #corePageListContainer [ngStyle]=\"{ height: height + 'px' }\">\r\n\r\n <core-page-header *ngIf=\"!!!hideHeader\" [instanceNumber]=\"corePageListInstanceNumber\" [title]=\"title\" (buttonClick)=\"onCorePageHeaderButtonClick($event)\"\r\n [hideButtonGroup]=\"!!seekerMode || !!hideButtonGroup\"></core-page-header>\r\n\r\n <input #fileImport type=\"file\" name=\"name\"\r\n accept=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\r\n style=\"display: none;\" (change)='inputFile($event)' />\r\n\r\n <!--\r\n Khi \u0111\u00E3 t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao compositionHeight c\u1EE7a core-composition\r\n C\u1EA7n t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao coreTableHeight c\u1EE7a CoreTable\r\n N\u1EBFu ph\u1EA7n top c\u1EE7a composition c\u1ED1 \u0111\u1ECBnh (v\u00ED d\u1EE5 khi s\u1EED d\u1EE5ng CoreParamKit) th\u00EC ph\u00E9p tr\u1EEB \u0111\u01A1n gi\u1EA3n\r\n Nh\u01B0ng n\u1EBFu ph\u1EA7n top \u0111\u01B0\u1EE3c customize, ta ph\u1EA3i s\u1EED d\u1EE5ng extraManualOffset\r\n -->\r\n <core-composition \r\n [coreCompositionInstanceNumber]=\"corePageListInstanceNumber\" \r\n [top]=\"topPlace\" \r\n [left]=\"!!hideLeft? undefined :left\" \r\n [main]=\"coreTable\" \r\n [height]=\"compositionHeight\">\r\n </core-composition>\r\n\r\n <router-outlet name=\"corePageListAux\"></router-outlet>\r\n\r\n</div>\r\n\r\n<ng-template #topPlace>\r\n\r\n <ng-container *ngIf=\"!!showParamKit\">\r\n <core-common-param-kit [datePeriodComparisonFor]=\"datePeriodComparisonFor\"\r\n [enableTimeZoneConverterForDateTimePeriodParameters]=\"enableTimeZoneConverterForDateTimePeriodParameters\"\r\n [datePeriodComparisonForLabelKey]=\"datePeriodComparisonForLabelKey\"\r\n [statusInclusionFor]=\"statusInclusionFor\" [statusInclusionForLabelKey]=\"statusInclusionForLabelKey\"\r\n [statusOptionsApi]=\"statusOptionsApi\"\r\n [statusOptions$]=\"statusOptions$\"\r\n [showOrgParam]=\"showOrgParam\"\r\n [hideGeneralSearch]=\"hideGeneralSearch\"\r\n [hideDatePeriodComparison]=\"hideDatePeriodComparison\" \r\n [hideStatusInclusion]=\"hideStatusInclusion\"\r\n (onChange)=\"onParamKitValueChange($event)\"></core-common-param-kit>\r\n </ng-container>\r\n\r\n <ng-container *ngTemplateOutlet=\"top\">\r\n\r\n </ng-container>\r\n\r\n</ng-template>\r\n\r\n<ng-template #coreTable>\r\n\r\n <div [class.opacity0]=\"!!!geometricDone\">\r\n\r\n <!--\r\n Khi \u0111\u00E3 t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao compositionHeight c\u1EE7a core-composition\r\n C\u1EA7n t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao coreTableHeight c\u1EE7a CoreTable\r\n N\u1EBFu ph\u1EA7n top c\u1EE7a composition c\u1ED1 \u0111\u1ECBnh (v\u00ED d\u1EE5 khi s\u1EED d\u1EE5ng CoreParamKit) th\u00EC ph\u00E9p tr\u1EEB \u0111\u01A1n gi\u1EA3n\r\n Nh\u01B0ng n\u1EBFu ph\u1EA7n top \u0111\u01B0\u1EE3c customize, ta ph\u1EA3i s\u1EED d\u1EE5ng extraManualOffset\r\n\r\n C\u1EA7n t\u00EDnh tableHeight nh\u01B0 th\u1EBF n\u00E0o?\r\n -->\r\n <core-table #coreTableAlone width=\"100%\" [height]=\"tableHeight\" [rowHeight]=\"rowHeight || '46px'\" [wrap]=\"wrap\"\r\n [columns]=\"columns\" [data]=\"list\" [showCheckbox]=\"!!!hideCheck\" headerHeight=\"60px\" [showTools]=\"showListInlineTools\"\r\n [tools]=\"inlineTools\" (onToolClick)=\"onToolClick($event)\" (onRowClick)=\"onRowClick($event)\"\r\n (onRowDoubleClick)=\"onRowDoubleClick($event)\" (onSelectedIdsChange)=\"onSelectedIdsChange($event)\"\r\n (onSelectedDataChange)=\"onSelectedDataChange($event)\" [frozen]=\"frozen || 1\"\r\n (onSearching)=\"onSearching($event)\" (onColumnCaptionClick)=\"onColumnCaptionClick($event)\"\r\n [corePageListInstanceNumber]=\"corePageListInstanceNumber\" [loading]=\"loading\"\r\n [columnSearchDefaultOpen]=\"columnSearchDefaultOpen\" [lazyLoading]=\"true\"\r\n [headerWrap]=\"headerWrap\"\r\n [headerFirstRowHeight]=\"headerFirstRowHeight\"\r\n [noPaddingCell]=\"noPaddingCell\"\r\n [disableHighlightOnClick]=\"disableHighlightOnClick\"\r\n ></core-table>\r\n\r\n <div class=\"d-flex-end pagination-wrapper\" #paginationContainer>\r\n <core-pagination-full [height]=\"paginationHeight\" [currentPage$]=\"currentPage$\" [pageSize$]=\"pageSize$\"\r\n [pageCount]=\"pageCount\" [innerBodyCount$]=\"innerBodyCount$\" [pagination$]=\"pagination$\"\r\n [loading]=\"loading\" [fixedPageSize]=\"fixedPageSize\" [background]=\"'#848484'\"></core-pagination-full>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n</ng-template>\r\n\r\n<core-api-progress *ngIf=\"longApiRunning\" (onClose)=\"onProgressWindowClose($event)\"></core-api-progress>\r\n\r\n<app-fullscreen-modal-loader *ngIf=\"prefetchLoading\"></app-fullscreen-modal-loader>", styles: [".core-page-list-container{--height: auto;box-sizing:border-box!important;border:none!important;height:var(--height)}.core-page-list-container *{box-sizing:border-box}.core-page-list-container .column-caption{text-align:center}\n"] }]
|
|
1679
|
+
], template: "<div #container class=\"core-page-list-container\" #corePageListContainer [ngStyle]=\"{ height: height + 'px' }\">\r\n\r\n <core-page-header *ngIf=\"!!!hideHeader\" [instanceNumber]=\"corePageListInstanceNumber\" [title]=\"title\" (buttonClick)=\"onCorePageHeaderButtonClick($event)\"\r\n [hideButtonGroup]=\"!!seekerMode || !!hideButtonGroup\"></core-page-header>\r\n\r\n <input #fileImport type=\"file\" name=\"name\"\r\n accept=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\r\n style=\"display: none;\" (change)='inputFile($event)' />\r\n\r\n <!--\r\n Khi \u0111\u00E3 t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao compositionHeight c\u1EE7a core-composition\r\n C\u1EA7n t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao coreTableHeight c\u1EE7a CoreTable\r\n N\u1EBFu ph\u1EA7n top c\u1EE7a composition c\u1ED1 \u0111\u1ECBnh (v\u00ED d\u1EE5 khi s\u1EED d\u1EE5ng CoreParamKit) th\u00EC ph\u00E9p tr\u1EEB \u0111\u01A1n gi\u1EA3n\r\n Nh\u01B0ng n\u1EBFu ph\u1EA7n top \u0111\u01B0\u1EE3c customize, ta ph\u1EA3i s\u1EED d\u1EE5ng extraManualOffset\r\n -->\r\n <core-composition \r\n [coreCompositionInstanceNumber]=\"corePageListInstanceNumber\" \r\n [top]=\"topPlace\" \r\n [left]=\"!!hideLeft? undefined :left\" \r\n [main]=\"coreTable\" \r\n [height]=\"compositionHeight\">\r\n </core-composition>\r\n\r\n <router-outlet name=\"corePageListAux\"></router-outlet>\r\n\r\n</div>\r\n\r\n<ng-template #topPlace>\r\n\r\n <ng-container *ngIf=\"!!showParamKit\">\r\n <core-common-param-kit \r\n [datePeriodComparisonFor]=\"datePeriodComparisonFor\"\r\n [enableTimeZoneConverterForDateTimePeriodParameters]=\"enableTimeZoneConverterForDateTimePeriodParameters\"\r\n [datePeriodComparisonForLabelKey]=\"datePeriodComparisonForLabelKey\"\r\n [statusInclusionFor]=\"statusInclusionFor\" [statusInclusionForLabelKey]=\"statusInclusionForLabelKey\"\r\n [statusOptionsApi]=\"statusOptionsApi\"\r\n [statusOptions$]=\"statusOptions$\"\r\n [showOrgParam]=\"showOrgParam\"\r\n [hideGeneralSearch]=\"hideGeneralSearch\"\r\n [hideDatePeriodComparison]=\"hideDatePeriodComparison\" \r\n [hideStatusInclusion]=\"hideStatusInclusion\"\r\n (onChange)=\"onParamKitValueChange($event)\"></core-common-param-kit>\r\n </ng-container>\r\n\r\n <ng-container *ngTemplateOutlet=\"top\">\r\n\r\n </ng-container>\r\n\r\n</ng-template>\r\n\r\n<ng-template #coreTable>\r\n\r\n <div [class.opacity0]=\"!!!geometricDone\">\r\n\r\n <!--\r\n Khi \u0111\u00E3 t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao compositionHeight c\u1EE7a core-composition\r\n C\u1EA7n t\u00EDnh \u0111\u01B0\u1EE3c ch\u00EDnh x\u00E1c chi\u1EC1u cao coreTableHeight c\u1EE7a CoreTable\r\n N\u1EBFu ph\u1EA7n top c\u1EE7a composition c\u1ED1 \u0111\u1ECBnh (v\u00ED d\u1EE5 khi s\u1EED d\u1EE5ng CoreParamKit) th\u00EC ph\u00E9p tr\u1EEB \u0111\u01A1n gi\u1EA3n\r\n Nh\u01B0ng n\u1EBFu ph\u1EA7n top \u0111\u01B0\u1EE3c customize, ta ph\u1EA3i s\u1EED d\u1EE5ng extraManualOffset\r\n\r\n C\u1EA7n t\u00EDnh tableHeight nh\u01B0 th\u1EBF n\u00E0o?\r\n -->\r\n <core-table #coreTableAlone width=\"100%\" [height]=\"tableHeight\" [rowHeight]=\"rowHeight || '46px'\" [wrap]=\"wrap\"\r\n [columns]=\"columns\" [data]=\"list\" [showCheckbox]=\"!!!hideCheck\" headerHeight=\"60px\" [showTools]=\"showListInlineTools\"\r\n [tools]=\"inlineTools\" (onToolClick)=\"onToolClick($event)\" (onRowClick)=\"onRowClick($event)\"\r\n (onRowDoubleClick)=\"onRowDoubleClick($event)\" (onSelectedIdsChange)=\"onSelectedIdsChange($event)\"\r\n (onSelectedDataChange)=\"onSelectedDataChange($event)\" [frozen]=\"frozen || 1\"\r\n (onSearching)=\"onSearching($event)\" (onColumnCaptionClick)=\"onColumnCaptionClick($event)\"\r\n [corePageListInstanceNumber]=\"corePageListInstanceNumber\" [loading]=\"loading\"\r\n [columnSearchDefaultOpen]=\"columnSearchDefaultOpen\" [lazyLoading]=\"true\"\r\n [headerWrap]=\"headerWrap\"\r\n [headerFirstRowHeight]=\"headerFirstRowHeight\"\r\n [noPaddingCell]=\"noPaddingCell\"\r\n [disableHighlightOnClick]=\"disableHighlightOnClick\"\r\n ></core-table>\r\n\r\n <div class=\"d-flex-end pagination-wrapper\" #paginationContainer>\r\n <core-pagination-full [height]=\"paginationHeight\" [currentPage$]=\"currentPage$\" [pageSize$]=\"pageSize$\"\r\n [pageCount]=\"pageCount\" [innerBodyCount$]=\"innerBodyCount$\" [pagination$]=\"pagination$\"\r\n [loading]=\"loading\" [fixedPageSize]=\"fixedPageSize\" [background]=\"'#848484'\"></core-pagination-full>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n</ng-template>\r\n\r\n<core-api-progress *ngIf=\"longApiRunning\" (onClose)=\"onProgressWindowClose($event)\"></core-api-progress>\r\n\r\n<app-fullscreen-modal-loader *ngIf=\"prefetchLoading\"></app-fullscreen-modal-loader>", styles: [".core-page-list-container{--height: auto;box-sizing:border-box!important;border:none!important;height:var(--height)}.core-page-list-container *{box-sizing:border-box}.core-page-list-container .column-caption{text-align:center}\n"] }]
|
|
1679
1680
|
}], ctorParameters: () => [{ type: i1.CorePageListService }, { type: i2.CorePageListState }, { type: i3.CorePageEditService }, { type: i4.Router }, { type: i4.ActivatedRoute }, { type: i5.MultiLanguageService }, { type: i6.AlertService }, { type: i7.AuthService }, { type: i8.AppService }, { type: i9.DialogService }, { type: i10.RoutingService }, { type: i11.LongTaskService }, { type: i12.LayoutService }, { type: i13.CoreCompositionService }, { type: i14.CoreButtonGroupService }, { type: i15.JsonService }], propDecorators: { normalMode: [{
|
|
1680
1681
|
type: Input
|
|
1681
1682
|
}], hideHeader: [{
|
|
@@ -1819,4 +1820,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
1819
1820
|
type: ViewChild,
|
|
1820
1821
|
args: ['fileImport']
|
|
1821
1822
|
}] } });
|
|
1822
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1wYWdlLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvbGlicmFyaWVzL2NvcmUtcGFnZS1saXN0L2NvcmUtcGFnZS1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXBhZ2UtbGlzdC9jb3JlLXBhZ2UtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBb0MsU0FBUyxFQUFlLE1BQU0sRUFBRSxZQUFZLEVBQTRCLFNBQVMsR0FBRyxNQUFNLGVBQWUsQ0FBQztBQUNuTCxPQUFPLEVBQTBCLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxrQkFBa0IsR0FBNEQsTUFBTSxvQ0FBb0MsQ0FBQztBQUlsSSxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBZ0IsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsR0FBRyxNQUFNLE1BQU0sQ0FBQztBQUN6SSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQztBQUM3RyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsMkJBQTJCLEVBQXVDLE1BQU0sZ0ZBQWdGLENBQUM7QUFLbEssT0FBTyxFQUFFLGtCQUFrQixFQUF3RixNQUFNLG9DQUFvQyxDQUFD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QUNHLG9DQUFvQztzQkFBNUMsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsNkJBQTZCO3NCQUFyQyxLQUFLO2dCQUVJLHlCQUF5QjtzQkFBbEMsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csMEJBQTBCO3NCQUFuQyxNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBRWlCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDYyxxQkFBcUI7c0JBQXhELFNBQVM7dUJBQUMsdUJBQXVCO2dCQUNBLG1CQUFtQjtzQkFBcEQsU0FBUzt1QkFBQyxxQkFBcUI7Z0JBQ1AsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIFZpZXdDaGlsZCwgVGVtcGxhdGVSZWYsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIGlzRGV2TW9kZSwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQ29yZVRhYmxlQ29tcG9uZW50LCBJQ29yZVRhYmxlVG9vbENsaWNrRXZlbnRFbWl0dGVyRGF0YSwgSUNvcmVUYWJsZVRvb2xJdGVtLCB9IGZyb20gJy4uL2NvcmUtdGFibGUvY29yZS10YWJsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlUGFnZUxpc3RTZXJ2aWNlLCBJR2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3QsIElJbXBvcnRYbHN4VG9EYlJlcXVlc3QgfSBmcm9tICcuL2NvcmUtcGFnZS1saXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb3JlUGFnZUVkaXRTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS1wYWdlLWVkaXQvY29yZS1wYWdlLWVkaXQuc2VydmljZSc7XHJcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4uL2FsZXJ0L2FsZXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBmcm9tRXZlbnQsIG1hcCwgc3dpdGNoTWFwLCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb3JlUGFnZUxpc3RTdGF0ZSB9IGZyb20gJy4vY29yZS1wYWdlLWxpc3Quc3RhdGUnO1xyXG5pbXBvcnQgeyBJQ29yZUJ1dHRvblZOUyB9IGZyb20gJy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMvSUNvcmVCdXR0b25WTlMnO1xyXG5pbXBvcnQgeyBFbnVtQ29yZUJ1dHRvblZOU0NvZGUgfSBmcm9tICcuLi9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtdm5zL0VudW1Db3JlQnV0dG9uVk5TQ29kZSc7XHJcbmltcG9ydCB7IENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9jb3JlLWZvcm0tY29udHJvbC1iYXNlL2NvcmUtZm9ybS1jb250cm9sLWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvcmVDb21tb25QYXJhbUtpdENvbXBvbmVudCwgSUNvcmVDb21tb25QYXJhbUtpdEV2ZW50RW1pdHRlckRhdGEgfSBmcm9tICcuLi9jb3JlLWNvbW1vbi1wYXJhbS1raXQvY29yZS1jb21tb24tcGFyYW0ta2l0L2NvcmUtY29tbW9uLXBhcmFtLWtpdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBMb25nVGFza1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9sb25nLXRhc2suc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmVDb21wb3NpdGlvblNlcnZpY2UgfSBmcm9tICcuLi9jb3JlLWNvbXBvc2l0aW9uL2NvcmUtY29tcG9zaXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmVCdXR0b25Hcm91cFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtc2VydmljZSc7XHJcbmltcG9ydCB7IElDb3JlQnV0dG9uR3JvdXBTdGF0dXMgfSBmcm9tICcuLi9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtc2VydmljZSc7XHJcbmltcG9ydCB7IEVudW1GaWx0ZXJPcGVyYXRvciwgSUZpbHRlck9wZXJhdG9yLCBJSW5PcGVyYXRvciwgSVBhZ2luYXRpb24sIElRdWVyeUxpc3RSZXF1ZXN0LCBJU2VhcmNoSXRlbSwgSVNvcnRJdGVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUXVlcnlMaXN0UmVxdWVzdCc7XHJcbmltcG9ydCB7IGFwaSB9IGZyb20gXCJhbHBoYS1nbG9iYWwtY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IEVudW1UcmFuc2xhdGVLZXkgfSBmcm9tIFwiYWxwaGEtZ2xvYmFsLWNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBNdWx0aUxhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL211bHRpLWxhbmd1YWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHAuc2VydmljZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IFJvdXRpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcm91dGluZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTGF5b3V0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xheW91dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSnNvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9qc29uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBhbGVydE9wdGlvbnMsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2FsZXJ0T3B0aW9ucyc7XHJcbmltcG9ydCB7IElGb3JtYXRlZFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JRm9ybWF0ZWRSZXNwb25zZSc7XHJcbmltcG9ydCB7IElRdWVyeUxpc3RSZXNwb25zZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVF1ZXJ5TGlzdFJlc3BvbnNlJztcclxuaW1wb3J0IHsgZGVmYXVsdFBhZ2luZyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9kZWZhdWx0UGFnaW5nJztcclxuaW1wb3J0IHsgSUlkc1JlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lJZHNSZXF1ZXN0JztcclxuaW1wb3J0IHsgSVRvZ2dsZUFjdGl2ZUlkc1JlcXVlc3QsIElUb2dnbGVBcHByb3ZlSWRzUmVxdWVzdCwgSVRvbmdsZVVuQXBwcm92ZUlkc1JlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lUb2dnbGVBY3RpdmVJZHNSZXF1ZXN0JztcclxuaW1wb3J0IHsgRW51bVNvcnREaXJlY3Rpb24gfSBmcm9tICcuLi8uLi9lbnVtL0VudW1Tb3J0RGlyZWN0aW9uJztcclxuaW1wb3J0IHsgSVN5c011dGF0aW9uTG9nQmVmb3JlQWZ0ZXJSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JU3lzTXV0YXRpb25Mb2dCZWZvcmVBZnRlclJlcXVlc3QnO1xyXG5pbXBvcnQgeyBJQ29yZVRhYmxlQ29sdW1uSXRlbSB9IGZyb20gJy4uL2NvcmUtdGFibGUvSUNvcmVUYWJsZUNvbHVtbkl0ZW0nO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb3JlUGFnaW5hdGlvbkZ1bGxDb21wb25lbnQgfSBmcm9tICcuLi9jb3JlLXBhZ2luYXRpb24tZnVsbC9jb3JlLXBhZ2luYXRpb24tZnVsbC9jb3JlLXBhZ2luYXRpb24tZnVsbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlUGFnZUhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtcGFnZS1oZWFkZXIvY29yZS1wYWdlLWhlYWRlci9jb3JlLXBhZ2UtaGVhZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVDb21wb3NpdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtY29tcG9zaXRpb24vY29yZS1jb21wb3NpdGlvbi9jb3JlLWNvbXBvc2l0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVBcGlQcm9ncmVzc0NvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtYXBpLXByb2dyZXNzL2NvcmUtYXBpLXByb2dyZXNzL2NvcmUtYXBpLXByb2dyZXNzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZ1bGxzY3JlZW5Nb2RhbExvYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2Z1bGxzY3JlZW4tbW9kYWwtbG9hZGVyL2Z1bGxzY3JlZW4tbW9kYWwtbG9hZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElDb3JlQ2hlY2tsaXN0T3B0aW9uIH0gZnJvbSAnLi4vY29yZS1jaGVja2xpc3QvY29yZS1jaGVja2xpc3QvY29yZS1jaGVja2xpc3QuY29tcG9uZW50JztcclxuXHJcbi8qIEtoaSBraMO0bmcgY8OzIGTDsm5nIG7DoG8gxJHGsOG7o2MgdGljayBjaOG7jW4sIGPDoWMgbsO6dCBzYXUgc+G6vSDEkcaw4bujYyDhuqluIMSRaTogKi9cclxuY29uc3QgRU1QVFlfU0VMRUNUSU9OX0hJRERFTl9CVVRUT046IEVudW1Db3JlQnV0dG9uVk5TQ29kZVtdID0gW1xyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRURJVCwgLy8gU+G7rWFcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0xPQ0ssIC8vIEtow7NhXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9VTkxPQ0ssIC8vIE3hu58ga2jDs2FcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0FDVElWQVRFLCAvLyDDgXAgZOG7pW5nXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9JTkFDVElWQVRFLCAvLyBOZ+G7q25nIMOhcCBk4bulbmdcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1JFU0VULCAvLyBSZXNldCAobeG6rXQga2jhuql1KVxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfQ09QWSwgLy8gU2FvIGNow6lwXHJcblxyXG4gIC8vIEPDoWMgdGjhu4MgbG/huqFpIGluXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9QUklOVCxcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1BSSU5UXzJDLFxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfUFJJTlRfMkNfMjAwOCxcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1BSSU5UXzJDXzk4LFxyXG4gIC8vXHJcblxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfREVMRVRFLCAvLyB4w7NhXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9BUFBST1ZFLCAvLyBwaMOqIGR1eeG7h3RcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1JFSkVDVCwgLy8gdOG7qyBjaOG7kWlcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1VOQVBQUk9WRSwgLy8gYuG7jyBwaMOqIGR1eeG7h3RcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1BFTkRJTkdfQVBQUk9WRSwgLy8gbeG7nyBjaOG7nSBwaMOqIGR1eeG7h3RcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0xJUVVJREFURV9DT05UUkFDVCwgLy8gdGhhbmggbMO9IGjhu6NwIMSR4buTbmdcclxuXVxyXG5cclxuLy9kZWNsYXJlIGxldCBjb3JlRmlsZVV0aWxzOiBhbnk7XHJcbi8vaW1wb3J0IHsgY29yZUZpbGVVdGlscyB9IGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9qcy9jb3JlRmlsZVV0aWxzJztcclxuLy9jb25zdCBibG9iVG9CYXNlNjQgPSBjb3JlRmlsZVV0aWxzLnByb3RvdHlwZS5ibG9iVG9CYXNlNjQ7XHJcblxyXG5jb25zdCBibG9iVG9CYXNlNjQgPSBhc3luYyAoYmxvYikgPT4ge1xyXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgXykgPT4ge1xyXG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXHJcbiAgICAgIHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiByZXNvbHZlKHJlYWRlci5yZXN1bHQpXHJcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2IpXHJcbiAgfSlcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ29yZVBhZ2VMaXN0QXBpRGVmaW5pdGlvbiB7XHJcbiAgcXVlcnlMaXN0UmVsYXRpdmVQYXRoOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvcmVQYWdlTGlzdFNlYXJjaE9iamVjdCB7XHJcbiAgcHJldmlvdXM6IElTZWFyY2hJdGVtW107XHJcbiAgY3VycmVudDogSVNlYXJjaEl0ZW1bXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ29yZVBhZ2VMaXN0RWRpdFJvdXRpbmcge1xyXG4gIGF1eGlsaWFyeTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDb3JlUGFnZUxpc3RDUlVEIHtcclxuICBkZWxldGVJZHM/OiBhcGk7XHJcbiAgdG9nZ2xlQWN0aXZlSWRzPzogYXBpO1xyXG4gIHRvZ2dsZUFwcHJvdmVJZHM/OiBhcGk7XHJcbiAgdG9nZ2xlVW5hcHByb3ZlSWRzPzogYXBpO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElYbHN4SW1wb3J0T2JqZWN0IHtcclxuICB4bHN4U2lkOiBzdHJpbmcsXHJcbiAgeGxzeEV4Q29kZTogc3RyaW5nLFxyXG4gIHhsc3hTZXNzaW9uOiBudW1iZXIsXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvcmVUYWJsZUZsYXRDb2x1bW5JdGVtIHtcclxuICBjYXB0aW9uOiBzdHJpbmc7XHJcbiAgZmllbGQ6IHN0cmluZztcclxuICB0eXBlPzogc3RyaW5nO1xyXG4gIHBpcGU/OiBzdHJpbmc7XHJcbiAgYWxpZ24/OiBzdHJpbmc7XHJcbiAgd2lkdGg/OiBudW1iZXI7XHJcbiAgaGlkZGVuPzogYm9vbGVhbjtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb3JlLXBhZ2UtbGlzdCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBSb3V0ZXJNb2R1bGUsXHJcbiAgICBDb3JlVGFibGVDb21wb25lbnQsXHJcbiAgICBDb3JlUGFnaW5hdGlvbkZ1bGxDb21wb25lbnQsXHJcbiAgICBDb3JlUGFnZUhlYWRlckNvbXBvbmVudCxcclxuICAgIENvcmVDb21wb3NpdGlvbkNvbXBvbmVudCxcclxuICAgIENvcmVDb21tb25QYXJhbUtpdENvbXBvbmVudCxcclxuICAgIENvcmVBcGlQcm9ncmVzc0NvbXBvbmVudCxcclxuICAgIEZ1bGxzY3JlZW5Nb2RhbExvYWRlckNvbXBvbmVudFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvcmUtcGFnZS1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jb3JlLXBhZ2UtbGlzdC5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBDb3JlUGFnZUxpc3RDb21wb25lbnQsXHJcbiAgICB9LFxyXG4gICAgQ29yZVBhZ2VMaXN0U3RhdGUsXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvcmVQYWdlTGlzdENvbXBvbmVudCBleHRlbmRzIENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICAvKiBXSEVOIFlPVSBETyBOT1QgV0FOVCBQT1BVUCwgcGFzcyBbbm9ybWFsTW9kZV09XCJ0cnVlXCIgKi9cclxuICBASW5wdXQoKSBub3JtYWxNb2RlITogYm9vbGVhbjtcclxuICAvKiBTVEFSVDogU29tZSByb3V0ZWQgY29tcG9uZW50cywgc3VjaCBhcyBTdGFmZlByb2ZpbGUsIG1heSBiZSByZXVzZWQgYXMgcmVhZG9ubHkgZm9yIHNlZWtpbmcgKi9cclxuICBASW5wdXQoKSBoaWRlSGVhZGVyITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBoaWRlQnV0dG9uR3JvdXAhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHNlZWtlck1vZGUhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIG1jY01vZGUhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGhlaWdodCE6IG51bWJlcjtcclxuICAvKiBFTkQ6IFNvbWUgcm91dGVkIGNvbXBvbmVudHMsIHN1Y2ggYXMgU3RhZmZQcm9maWxlLCBtYXkgYmUgcmV1c2VkIGFzIHJlYWRvbmx5IGZvciBzZWVraW5nICovXHJcblxyXG4gIC8qIGNoYW5nZSB0aGVzZSAyIHByb3BzIHRvIHdyYXAgaGVhZGVyIHRleHRzICovXHJcbiAgQElucHV0KCkgaGVhZGVyV3JhcCE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaGVhZGVyRmlyc3RSb3dIZWlnaHQhOiBudW1iZXI7XHJcbiAgLyoqICovXHJcblxyXG4gIC8qKlNob3cgUGFyYW1LaXQgKi9cclxuICBASW5wdXQoKSBlbmFibGVUaW1lWm9uZUNvbnZlcnRlckZvckRhdGVUaW1lUGVyaW9kUGFyYW1ldGVycyE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2hvd1BhcmFtS2l0ITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBkYXRlUGVyaW9kQ29tcGFyaXNvbkZvciE6IHN0cmluZztcclxuICBASW5wdXQoKSBkYXRlUGVyaW9kQ29tcGFyaXNvbkZvckxhYmVsS2V5ITogRW51bVRyYW5zbGF0ZUtleTtcclxuICBASW5wdXQoKSBzdGF0dXNJbmNsdXNpb25Gb3IhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc3RhdHVzSW5jbHVzaW9uRm9yTGFiZWxLZXkhOiBFbnVtVHJhbnNsYXRlS2V5O1xyXG4gIEBJbnB1dCgpIHN0YXR1c09wdGlvbnNBcGkhOiBhcGk7XHJcbiAgQElucHV0KCkgc3RhdHVzT3B0aW9ucyQ6IEJlaGF2aW9yU3ViamVjdDxJQ29yZUNoZWNrbGlzdE9wdGlvbltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SUNvcmVDaGVja2xpc3RPcHRpb25bXT4oW10pO1xyXG4gIEBJbnB1dCgpIHNob3dPcmdQYXJhbSE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaGlkZUdlbmVyYWxTZWFyY2ghOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGhpZGVEYXRlUGVyaW9kQ29tcGFyaXNvbiE6IGJvb2xlYW47IC8vIGlmIHdlIHdhbnQgbm90IHRvIHVzZSBkYXRlIHAgZmlsdGVyXHJcbiAgQElucHV0KCkgaGlkZVN0YXR1c0luY2x1c2lvbiE6IGJvb2xlYW47IC8vIGlmIHdlIHdhbnQgbm90IHRvIHVzZSBzdGF0dXMgZmlsdGVyXHJcbiAgLyoqRW5kIFNob3cgUGFyYW1LaXQgKi9cclxuXHJcbiAgQElucHV0KCkgdGl0bGUhOiBFbnVtVHJhbnNsYXRlS2V5O1xyXG4gIEBJbnB1dCgpIGhhc0lkT2ZTdHJpbmdUeXBlITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBoaWRlQ2hlY2shOiBib29sZWFuO1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlfSkgYXBpRGVmaW5pdGlvbiE6IElDb3JlUGFnZUxpc3RBcGlEZWZpbml0aW9uO1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlfSkgY29sdW1ucyE6IElDb3JlVGFibGVDb2x1bW5JdGVtW107XHJcbiAgQElucHV0KCkgZnJvemVuITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGlubGluZVRvb2xzITogSUNvcmVUYWJsZVRvb2xJdGVtW107XHJcbiAgQElucHV0KCkgaW5saW5lVG9vbEl0ZW1zITogRW51bUNvcmVCdXR0b25WTlNDb2RlW107XHJcbiAgQElucHV0KCkgZWRpdFJvdXRlITogSUNvcmVQYWdlTGlzdEVkaXRSb3V0aW5nO1xyXG4gIEBJbnB1dCgpIGNydWQhOiBJQ29yZVBhZ2VMaXN0Q1JVRDtcclxuICBASW5wdXQoKSBzaG93TGlzdElubGluZVRvb2xzITogYm9vbGVhbjtcclxuICBASW5wdXQoKSB0b3AhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBJbnB1dCgpIGxlZnQhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBJbnB1dCgpIGhpZGVMZWZ0ITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBvdXRlclBhcmFtJCE6IEJlaGF2aW9yU3ViamVjdDxhbnk+O1xyXG4gIEBJbnB1dCgpIG91dGVyRmlsdGVyJCE6IEJlaGF2aW9yU3ViamVjdDxJRmlsdGVyT3BlcmF0b3JbXSB8IHVuZGVmaW5lZD47XHJcbiAgQElucHV0KCkgb3V0ZXJTb3J0ITogSVNvcnRJdGVtW107XHJcbiAgQElucHV0KCkgb3V0ZXJGaWx0ZXJPcGVyYXRvcnMhOiBJRmlsdGVyT3BlcmF0b3JbXTtcclxuICBASW5wdXQoKSBvdXRlckluT3BlcmF0b3JzITogSUluT3BlcmF0b3JbXSB8IG51bGw7XHJcbiAgQElucHV0KCkgYXV0b1Jlc2l6ZVdpdGhXaW5kb3chOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGV4dHJhTWFudWFsT2Zmc2V0ITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHdyYXAhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHJvd0hlaWdodCE6IHN0cmluZztcclxuICBASW5wdXQoKSBzZWxmUmVzb2x2ZUNvcmVQYWdlSGVhZGVyQnV0dG9uQ2xpY2shOiBib29sZWFuOyAvLyBUaGUgY2FsbGVyIHdpbGwgaXRzZWxmIHJlc29sdmUgZXZlbnRzIGVtbWl0ZWQgYnkgQ29yZVBhZ2VIZWFkZXIgYnV0dG9ucyAoZm9yIHNvbWUpXHJcbiAgQElucHV0KCkgY2xlYXJEYXRhJCE6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcclxuICBASW5wdXQoKSBkZWxldGVWYWxpZGF0ZUZuITogRnVuY3Rpb247XHJcbiAgQElucHV0KCkgZ2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3QhOiBJR2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3Q7XHJcbiAgQElucHV0KCkgaW1wb3J0UHJldmlld1BhdGghOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY29sdW1uU2VhcmNoRGVmYXVsdE9wZW4hOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGZpeGVkUGFnZVNpemUhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgZGlzYWJsZURvdWJsZUNsaWNrITogYm9vbGVhbjtcclxuXHJcbiAgQElucHV0KCkgbm9QYWRkaW5nQ2VsbCE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgZGlzYWJsZUhpZ2hsaWdodE9uQ2xpY2shOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGxvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgQElucHV0KCkgZXhjbHVkZWRJZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXJbXT4oW10pO1xyXG5cclxuICBASW5wdXQoKSBkaXNhYmxlRGlhbG9nSW5mb3JtYXRpb25MaW5lczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgY29yZVBhZ2VIZWFkZXJCdXR0b25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8SUNvcmVCdXR0b25WTlM+KCk7XHJcbiAgQE91dHB1dCgpIHJvd0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSByb3dEb3VibGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0ZWRJZHNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkRGF0YUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25JbnN0YW5jZUNyZWF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuICBAT3V0cHV0KCkgb25JbnB1dEZpbGVCYXNlNjREYXRhUmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGxpc3RDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xyXG5cclxuICBAVmlld0NoaWxkKCdjb250YWluZXInKSBjb250YWluZXIhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2NvcmVQYWdlTGlzdENvbnRhaW5lcicpIGNvcmVQYWdlTGlzdENvbnRhaW5lciE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgncGFnaW5hdGlvbkNvbnRhaW5lcicpIHBhZ2luYXRpb25Db250YWluZXIhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2ZpbGVJbXBvcnQnKSBmaWxlSW1wb3J0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgZ2VvbWV0cmljRG9uZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBoZWlnaHRSZXNpemluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhlaWdodCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgdG9wUGxhY2VIZWlnaHQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG5cclxuICByZXNpemVIZWlnaHRGbGFnJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBwYWdpbmF0aW9uSGVpZ2h0ITogbnVtYmVyO1xyXG4gIGNvbXBvc2l0aW9uSGVpZ2h0ITogbnVtYmVyO1xyXG4gIGNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyITogbnVtYmVyO1xyXG4gIGRpYWxvZ0luc3RhbmNlTnVtYmVyITogbnVtYmVyO1xyXG5cclxuICByZXNpemVTdHJlYW0kID0gZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpO1xyXG5cclxuICBjbGlja0dlbmVyYXRlVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG5cclxuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIHF1ZXJ5TGlzdFN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcclxuICBsb2FkaW5nITogYm9vbGVhbjtcclxuXHJcbiAgc2VsZWN0ZWRJZHM6IHN0cmluZ1tdIHwgbnVtYmVyW10gPSBbXTtcclxuICBzZWxlY3RlZERhdGE6IGFueVtdID0gW107XHJcblxyXG4gIGlzQWRtaW46IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgdmlld0luaXREb25lITogYm9vbGVhbjtcclxuXHJcbiAgLyogc3RhcnQ6IHBhc3NpbmcgdGhpcyB2YXIgdG8gUGFnaW5hdGlvbiAqL1xyXG5cclxuICBwYWdlQ291bnQhOiBudW1iZXI7XHJcblxyXG4gIC8vIFBhc3NpbmcgQmVoYXZpb3JTdWJqZWN0IHRvIG90aGVyIGNvbXBvbmVudCBpcyBsaWtlIHVzaW5nIGEgc2VydmljZSAodGhhdCBob2xkcyB0aGlzIEJlaGF2aW9yU3ViamVjdCkgaW5qZWN0ZWQgdG8gYm90aCBjb21wb25lbnRzXHJcbiAgY3VycmVudFBhZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDEpO1xyXG5cclxuICAvKiBlbmQ6IHBhc3NpbmcgdGhpcyB2YXIgdG8gUGFnaW5hdGlvbiAqL1xyXG5cclxuICBwYWdlU2l6ZSQhOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPjtcclxuXHJcbiAgZmlsdGVyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcclxuICBmaWx0ZXJPcGVyYXRvcnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJRmlsdGVyT3BlcmF0b3JbXT4oW10pO1xyXG4gIGluT3BlcmF0b3JzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SUluT3BlcmF0b3JbXT4oW10pO1xyXG4gIGdlbmVyYWxTZWFyY2gkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcclxuICBzZWFyY2gkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJQ29yZVBhZ2VMaXN0U2VhcmNoT2JqZWN0IHwgbnVsbD4obnVsbCk7XHJcbiAgc29ydCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElTb3J0SXRlbVtdPihbXSk7XHJcbiAgcGFnaW5hdGlvbiQhOiBCZWhhdmlvclN1YmplY3Q8SVBhZ2luYXRpb24+O1xyXG4gIGZvcmNlUmVsb2FkaW5nRmxhZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBxdWVyeUxpc3RSZXF1ZXN0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVF1ZXJ5TGlzdFJlcXVlc3Q+KHsgbGFuZzogJ3ZpJyB9KTtcclxuICBxdWVyeUxpc3RTdHJlYW0kITogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gIGlubmVyQm9keUNvdW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigxKTtcclxuXHJcbiAgcGF1c2VTdWJzY3RpcHRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBsaXN0ITogYW55W107XHJcbiAgdGFibGVIZWlnaHQhOiBudW1iZXI7XHJcbiAgYXZhaWxhYmxlQ29sdW1uc0ZvckdlbmVyYWxTZWFyY2ghOiBzdHJpbmdbXTtcclxuICBkYXRhSW1wb3J0ITogYW55O1xyXG4gIHBlbmRpbmdBY3Rpb24hOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGUgfCBudWxsO1xyXG4gIGlkU3RhdGU6IGFueTtcclxuICB0ZW1wbGF0ZUZpbGVOYW1lITogc3RyaW5nO1xyXG5cclxuICBsb25nQXBpUnVubmluZyE6IGJvb2xlYW47XHJcbiAgcHJlZmV0Y2hMb2FkaW5nITogYm9vbGVhbjtcclxuXHJcbiAgYnV0dG9uR3JvdXBTdGF0dXMhOiBJQ29yZUJ1dHRvbkdyb3VwU3RhdHVzO1xyXG5cclxuICBleHBvcnRDb3JlUGFnZUxpc3RHcmlkVG9FeGNlbFN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNvcmVQYWdlTGlzdFNlcnZpY2U6IENvcmVQYWdlTGlzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvcmVQYWdlTGlzdFN0YXRlOiBDb3JlUGFnZUxpc3RTdGF0ZSxcclxuICAgIHByaXZhdGUgY29yZVBhZ2VFZGl0U2VydmljZTogQ29yZVBhZ2VFZGl0U2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgbWxzOiBNdWx0aUxhbmd1YWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgYXBwU2VydmljZTogQXBwU2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGluZ1NlcnZpY2U6IFJvdXRpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBsb25nVGFza1NlcnZpY2U6IExvbmdUYXNrU2VydmljZSxcclxuICAgIHB1YmxpYyBsYXlvdXRTZXJ2aWNlOiBMYXlvdXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb3JlQ29tcG9zaXRpb25TZXJ2aWNlOiBDb3JlQ29tcG9zaXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb3JlQnV0dG9uR3JvdXBTZXJ2aWNlOiBDb3JlQnV0dG9uR3JvdXBTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBqc29uU2VydmljZTogSnNvblNlcnZpY2UsXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG5cclxuICAgIGlmICghISF0aGlzLmlubGluZVRvb2xJdGVtcykge1xyXG4gICAgICB0aGlzLmlubGluZVRvb2xJdGVtcyA9IFtcclxuICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0VESVQsXHJcbiAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9ERUxFVEVcclxuICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBuYXZpZ2F0aW9uID0gdGhpcy5yb3V0ZXI/LmdldEN1cnJlbnROYXZpZ2F0aW9uKClcclxuICAgIGlmIChuYXZpZ2F0aW9uKSB7XHJcbiAgICAgIGNvbnN0IGV4dHJhcyA9IG5hdmlnYXRpb24uZXh0cmFzO1xyXG4gICAgICBpZiAoISFleHRyYXMgJiYgJ3N0YXRlJyBpbiBleHRyYXMpIHtcclxuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8oYENvcmVQYWdlTGlzdCBpcyB1c2luZyBvbGQgaW5zdGFuY2UgbnVtYmVyICR7dGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcn1gLCBhbGVydE9wdGlvbnMpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghIWV4dHJhcy5zdGF0ZSAmJiAnaWQnIGluIGV4dHJhcy5zdGF0ZSEpIHtcclxuICAgICAgICAgIHRoaXMuaWRTdGF0ZSA9IGV4dHJhcy5zdGF0ZVsnaWQnXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCEhZXh0cmFzLnN0YXRlICYmICdpbnN0YW5jZU51bWJlcicgaW4gZXh0cmFzLnN0YXRlISkge1xyXG4gICAgICAgICAgdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlciA9IGV4dHJhcy5zdGF0ZVsnaW5zdGFuY2VOdW1iZXInXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyogVEhJUyBDT0RFIFdJTEwgREVGSU5FIG91dGVyUGFyYW0kIEZJTFRFUiBmb3IgaW1wb3J0IHByZXZpZXcgdGFzayAqL1xyXG4gICAgaWYgKG5hdmlnYXRpb24/LmV4dHJhcz8uc3RhdGUpIHtcclxuICAgICAgY29uc3QgaW1wb3J0UHJldmlld091dGVyUGFyYW0gPSBuYXZpZ2F0aW9uPy5leHRyYXM/LnN0YXRlIVtcImltcG9ydFByZXZpZXdPdXRlclBhcmFtXCJdXHJcbiAgICAgIGlmICghIXRoaXMub3V0ZXJQYXJhbSQpIHtcclxuICAgICAgICBpZiAoISF0aGlzLm91dGVyUGFyYW0kPy52YWx1ZSkge1xyXG4gICAgICAgICAgaWYgKCEhaW1wb3J0UHJldmlld091dGVyUGFyYW0pIHtcclxuICAgICAgICAgICAgbGV0IG5ld091dGVyUGFyYW0gPSB0aGlzLm91dGVyUGFyYW0kLnZhbHVlO1xyXG4gICAgICAgICAgICBuZXdPdXRlclBhcmFtID0ge1xyXG4gICAgICAgICAgICAgIC4uLm5ld091dGVyUGFyYW0sXHJcbiAgICAgICAgICAgICAgLi4uaW1wb3J0UHJldmlld091dGVyUGFyYW0sXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5vdXRlclBhcmFtJC5uZXh0KG5ld091dGVyUGFyYW0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoISFpbXBvcnRQcmV2aWV3T3V0ZXJQYXJhbSkge1xyXG4gICAgICAgICAgICB0aGlzLm91dGVyUGFyYW0kLm5leHQoaW1wb3J0UHJldmlld091dGVyUGFyYW0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoISFpbXBvcnRQcmV2aWV3T3V0ZXJQYXJhbSkge1xyXG4gICAgICAgICAgdGhpcy5vdXRlclBhcmFtJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihpbXBvcnRQcmV2aWV3T3V0ZXJQYXJhbSlcclxuICAgICAgICAgIHRoaXMub3V0ZXJQYXJhbVN1YnNjcmliZUZuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG4gICAgaWYgKCEhIXRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIpIHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5pbnN0YW5jZXMucHVzaCh7XHJcbiAgICAgIGluc3RhbmNlTnVtYmVyOiB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyLFxyXG4gICAgICByZWxvYWRGbGFnJDogbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSksXHJcbiAgICAgIGlkJDogbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpLFxyXG4gICAgICB0Ym9keUhlaWdodCQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKSxcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghIXRoaXMuaWRTdGF0ZSkge1xyXG4gICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgaWQ6IHRoaXMuaWRTdGF0ZVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudGVtcGxhdGVGaWxlTmFtZSA9IHRoaXMuZ2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3Q/LmV4Q29kZTtcclxuXHJcbiAgICBpZiAoISF0aGlzLm91dGVyRmlsdGVyJCkge1xyXG4gICAgICB0aGlzLm91dGVyRmlsdGVyJC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgdGhpcy5vdXRlckZpbHRlck9wZXJhdG9ycyA9IHggfHwgW107XHJcbiAgICAgICAgdGhpcy5tZXJnZUZpbHRlck9wZXJhdG9yKCk7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ291dGVySW5PcGVyYXRvcnMnXSkge1xyXG4gICAgICBjb25zdCBjdXJyZW50SW5PcGVyYXRvcnM6IElJbk9wZXJhdG9yW10gPSB0aGlzLmluT3BlcmF0b3JzJC52YWx1ZTtcclxuICAgICAgY29uc3QgY2hhbmdlZEluT3BlcmF0b3JzOiBJSW5PcGVyYXRvcltdID0gY2hhbmdlc1snb3V0ZXJJbk9wZXJhdG9ycyddLmN1cnJlbnRWYWx1ZSB8fCBbXTtcclxuICAgICAgY29uc3QgcmVtYWluSW5PcGVyYXRvcnMgPSBjdXJyZW50SW5PcGVyYXRvcnMuZmlsdGVyKHggPT4gISEhY2hhbmdlZEluT3BlcmF0b3JzLmZpbHRlcih5ID0+IHkuZmllbGQgPT09IHguZmllbGQpLmxlbmd0aCk7XHJcbiAgICAgIGNvbnN0IG5ld0luT3BlcmF0b3JzID0gWy4uLnJlbWFpbkluT3BlcmF0b3JzLCAuLi5jaGFuZ2VkSW5PcGVyYXRvcnNdO1xyXG5cclxuICAgICAgdGhpcy5pbk9wZXJhdG9ycyQubmV4dChuZXdJbk9wZXJhdG9ycyk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snaGVpZ2h0J10pIHtcclxuXHJcbiAgICAgIC8vIEtow7RuZyB0aOG7gyB0w61uaCDEkcaw4bujYyBz4buRIMSRbyBow6xuaCBo4buNYyBu4bq/dSBBZnRlclZpZXdJbml0IGNoxrBhIGNo4bqheVxyXG4gICAgICAvLyBOw6puIOG7nyDEkcOieSB0YSBjaOG7iSDEkcahbiBnaeG6o24gbMOgIGfDoW4gdGhheSDEkeG7lWkgY+G7p2EgaGVpZ2h0IHbDoG8gaGVpZ2h0JFxyXG4gICAgICB0aGlzLmhlaWdodCQubmV4dChjaGFuZ2VzWydoZWlnaHQnXS5jdXJyZW50VmFsdWUpO1xyXG5cclxuICAgICAgaWYgKCEhY2hhbmdlc1snaGVpZ2h0J10pIHtcclxuICAgICAgICB0aGlzLmNhbGN1bGF0ZVRhYmxlSGVpZ2h0QmFzZWRPbkhlaWdodEFuZFRvcFJlZkhlaWdodChjaGFuZ2VzWydoZWlnaHQnXS5jdXJyZW50VmFsdWUsIHRoaXMudG9wUGxhY2VIZWlnaHQkLnZhbHVlKVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvKlxyXG4gICAgICBpZiAoISFjaGFuZ2VzWydoZWlnaHQnXS5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgICAvLyBO4bq/dSBjaGnhu4F1IGNhbyBj4bunYSBDb3JlUGFnZUxpc3QgxJHGsOG7o2MgdHJ1eeG7gW4gdsOgb1xyXG4gICAgICAgIC8vIFRow6wgY+G6p24gdMOtbmggY2hp4buBdSBjYW8gY+G7p2EgQ29yZUNvbXBvc2l0aW9uID0gdGhpcy5oZWlnaHRcclxuICAgICAgICAvLyBO4bq/dSBoaeG7g24gdGjhu4sgQ29yZVBhZ2VIZWFkZXIgdGjDrCBj4bqnbiB0cuG7qyB0aeG6v3AgxJFpIGNvcmVQYWdlSGVhZGVySGVpZ2h0XHJcbiAgICAgICAgdGhpcy5jb21wb3NpdGlvbkhlaWdodCA9IGNoYW5nZXNbJ2hlaWdodCddLmN1cnJlbnRWYWx1ZSAtICghIXRoaXMuaGlkZUhlYWRlciA/IDAgOiB0aGlzLmxheW91dFNlcnZpY2UuY29yZVBhZ2VIZWFkZXJIZWlnaHQpO1xyXG4gICAgICAgIC8vIFTDrW5oIGx1w7RuIGNoaeG7gXUgY2FvIHRhYmxlSGVpZ2h0XHJcbiAgICAgICAgLy8gTuG6v3UgZXh0cmFNYW51YWxPZmZzZXQgxJHGsOG7o2MgdHJ1eeG7gW4gdsOgbyBt4buZdCBjw6FjaCB0aOG7pyBjw7RuZ1xyXG4gICAgICAgIGlmICghIXRoaXMuZXh0cmFNYW51YWxPZmZzZXQpIHtcclxuICAgICAgICAgIHRoaXMudGFibGVIZWlnaHQgPSBjaGFuZ2VzWydoZWlnaHQnXS5jdXJyZW50VmFsdWUgLSB0aGlzLmV4IHRyYU1hbnVhbE9mZnNldCAtIHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnaW5hdGlvbkhlaWdodDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gQ+G6p24gdMOtbmggY2hp4buBdSBjYW8gY+G7p2EgcGjhuqduIHRvcCBraGkgaG9vayBBZnRlclZpZXdJbml0IMSRxrDhu6NjIGvDrWNoIGhv4bqhdFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAqL1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzWydvdXRlckZpbHRlck9wZXJhdG9ycyddKSB7XHJcbiAgICAgIHRoaXMubWVyZ2VGaWx0ZXJPcGVyYXRvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucXVlcnlMaXN0U3Vic2NyaWJlKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgLyogUXVlcnlMaXN0IHN1YiAqL1xyXG4gIHN1YnNjcmliZVF1ZXJ5TGlzdCh4OiBhbnkpIHtcclxuICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgIGNvbnN0IGlubmVyQm9keTogSVF1ZXJ5TGlzdFJlc3BvbnNlID0gYm9keS5pbm5lckJvZHk7XHJcbiAgICAgICAgaWYgKCEhaW5uZXJCb2R5KSB7XHJcblxyXG4gICAgICAgICAgLyogI3JlZ2lvbiBUcmlja2lseSByZXNldCBpZCQsIHRtcEZpbHRlciQgYW5kIHRtcEluT3BlcmF0b3JzJCAqL1xyXG4gICAgICAgICAgdGhpcy5wYXVzZVN1YnNjdGlwdGlvbiA9IHRydWU7IC8vIDw9PSBQYXVzZVxyXG5cclxuICAgICAgICAgIGNvbnN0IG5ld1F1ZXJ5TGlzdFJlcXVlc3QgPSB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlO1xyXG5cclxuICAgICAgICAgIHRoaXMuY29yZVBhZ2VMaXN0U3RhdGUuaWQkLm5leHQobnVsbClcclxuICAgICAgICAgIG5ld1F1ZXJ5TGlzdFJlcXVlc3QuaWQgPSBudWxsO1xyXG5cclxuICAgICAgICAgIC8qIFRoaXMgY29kZSBibG9jayByYWlzZXMgYSBidWcgZ2VuZXJhbGx5ICovXHJcbiAgICAgICAgICAvLyBpZiAoISF0aGlzLmNvcmVQYWdlTGlzdFN0YXRlLmlkJC52YWx1ZSkge1xyXG4gICAgICAgICAgLy8gICB0aGlzLmNvcmVQYWdlTGlzdFN0YXRlLmlkJC5uZXh0KG51bGwpXHJcbiAgICAgICAgICAvLyAgIG5ld1F1ZXJ5TGlzdFJlcXVlc3QuaWQgPSBudWxsO1xyXG4gICAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAgIC8vICAgbmV3UXVlcnlMaXN0UmVxdWVzdC5pZCA9IG51bGw7XHJcbiAgICAgICAgICAvLyB9O1xyXG5cclxuICAgICAgICAgIGlmICghIXRoaXMudG1wRmlsdGVyQWN0aXZlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9sZEZpbHRlciA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5wcmltYXJ5RmlsdGVyKSk7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyJC5uZXh0KG9sZEZpbHRlcik7XHJcbiAgICAgICAgICAgIG5ld1F1ZXJ5TGlzdFJlcXVlc3QuZmlsdGVyID0gb2xkRmlsdGVyO1xyXG4gICAgICAgICAgICB0aGlzLnByaW1hcnlGaWx0ZXIgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIHRoaXMudG1wRmlsdGVyQWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKCEhdGhpcy50bXBJbk9wZXJhdG9yc0FjdGl2ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBvbGRJbk9wZXJ0b3JzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnByaW1hcnlJbk9wZXJhdG9ycykpO1xyXG4gICAgICAgICAgICB0aGlzLmluT3BlcmF0b3JzJC5uZXh0KG9sZEluT3BlcnRvcnMpO1xyXG4gICAgICAgICAgICBuZXdRdWVyeUxpc3RSZXF1ZXN0LmluT3BlcmF0b3JzID0gb2xkSW5PcGVydG9ycztcclxuICAgICAgICAgICAgdGhpcy5wcmltYXJ5SW5PcGVyYXRvcnMgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy50bXBJbk9wZXJhdG9yc0FjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dChuZXdRdWVyeUxpc3RSZXF1ZXN0KTtcclxuXHJcbiAgICAgICAgICB0aGlzLnBhdXNlU3Vic2N0aXB0aW9uID0gZmFsc2U7IC8vIDw9PSBBY3RpdmUgYmFjayBhZ2FpblxyXG5cclxuICAgICAgICAgIC8qICNlbmRyZWdpb24gVHJpY2tpbHkgcmVzZXQgaWQkLCB0bXBGaWx0ZXIkIGFuZCB0bXBJbk9wZXJhdG9ycyQgKi9cclxuXHJcbiAgICAgICAgICB0aGlzLmxpc3QgPSBpbm5lckJvZHkubGlzdCE7XHJcbiAgICAgICAgICB0aGlzLmxpc3RDaGFuZ2UuZW1pdCh0aGlzLmxpc3QpO1xyXG5cclxuICAgICAgICAgIHRoaXMuaW5uZXJCb2R5Q291bnQkLm5leHQoaW5uZXJCb2R5LmNvdW50ISk7XHJcbiAgICAgICAgICB0aGlzLnBhZ2VDb3VudCA9IE1hdGguY2VpbChpbm5lckJvZHkuY291bnQhIC8gdGhpcy5wYWdlU2l6ZSQudmFsdWUpO1xyXG5cclxuICAgICAgICAgIGlmIChpbm5lckJvZHkucGFnZSAhPT0gdGhpcy5jdXJyZW50UGFnZSQudmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5wYXVzZVN1YnNjdGlwdGlvbiA9IHRydWU7IC8vIDw9PSBQYXVzZVxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlJC5uZXh0KGlubmVyQm9keS5wYWdlISk7XHJcbiAgICAgICAgICAgIHRoaXMucGF1c2VTdWJzY3RpcHRpb24gPSBmYWxzZTsgLy8gPD09IEFjdGl2ZSBiYWNrIGFnYWluXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubGlzdCA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5saXN0Q2hhbmdlLmVtaXQoW10pO1xyXG5cclxuICAgICAgICAgIHRoaXMucGFnZUNvdW50ID0gMDtcclxuICAgICAgICAgIC8vdGhpcy5yZXNwb25zZVNlcnZpY2UucmVzb2x2ZShib2R5KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5saXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5saXN0Q2hhbmdlLmVtaXQoW10pO1xyXG5cclxuICAgICAgICB0aGlzLnBhZ2VDb3VudCA9IDA7XHJcbiAgICAgICAgLy90aGlzLnJlc3BvbnNlU2VydmljZS5yZXNvbHZlKGJvZHkpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgLy8gICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgLy8gICAgIEpTT04uc3RyaW5naWZ5KHgsIG51bGwsIDIpLFxyXG4gICAgICAvLyAgICAgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnNcclxuICAgICAgLy8gICApO1xyXG4gICAgICAvLyB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBtZXJnZUZpbHRlck9wZXJhdG9yKCk6IHZvaWQge1xyXG4gICAgLyogU1RBUlQ6IE1lcmdlIGZpbHRlck9wZXJhdG9yIHdpdGggb3V0ZXIgb25lICovXHJcbiAgICBpZiAoISF0aGlzLm91dGVyRmlsdGVyT3BlcmF0b3JzKSB7XHJcbiAgICAgIGlmICh0aGlzLmZpbHRlck9wZXJhdG9ycyQudmFsdWUpIHtcclxuICAgICAgICBjb25zdCBjdXJyZW50RmlsdGVyT3BlcmF0b3JzOiBJRmlsdGVyT3BlcmF0b3JbXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5maWx0ZXJPcGVyYXRvcnMkLnZhbHVlKSk7XHJcbiAgICAgICAgdGhpcy5vdXRlckZpbHRlck9wZXJhdG9ycy5tYXAoKG9mbykgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZmlsdGVyID0gY3VycmVudEZpbHRlck9wZXJhdG9ycy5maWx0ZXIoKG8pID0+IG8uZmllbGQgPT09IG9mby5maWVsZCAmJiBvLm9wZXJhdG9yID09PSBvZm8ub3BlcmF0b3IpO1xyXG4gICAgICAgICAgLy8gb3B0aW1pc3RpY2FsbHkgZmlsdGVyLmxlbmd0aCA9PT0gMVxyXG4gICAgICAgICAgaWYgKCEhZmlsdGVyLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBmaWx0ZXJbMF0uZGF0ZVRpbWVWYWx1ZSA9IG9mby5kYXRlVGltZVZhbHVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY3VycmVudEZpbHRlck9wZXJhdG9ycy5wdXNoKG9mbyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJPcGVyYXRvcnMkLm5leHQoY3VycmVudEZpbHRlck9wZXJhdG9ycyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJPcGVyYXRvcnMkLm5leHQodGhpcy5vdXRlckZpbHRlck9wZXJhdG9ycyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8qIEVORDogQ3JlYXRlL01lcmdlL092ZXJ3cml0ZSBmaWx0ZXJPcGVyYXRvciB3aXRoIG91dGVyIG9uZSAqL1xyXG4gIH1cclxuICB0bXBGaWx0ZXJBY3RpdmUhOiBib29sZWFuO1xyXG4gIHRtcEluT3BlcmF0b3JzQWN0aXZlITogYm9vbGVhbjtcclxuICBwcmltYXJ5RmlsdGVyITogYW55O1xyXG4gIHByaW1hcnlJbk9wZXJhdG9ycyE6IElJbk9wZXJhdG9yW107XHJcblxyXG4gIG91dGVyUGFyYW1TdWJzY3JpYmVGbigpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLm91dGVyUGFyYW0kLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIC8vIG1lcmdlIG9yIG92ZXJ3cmlyZSBjdXJyZW50IGZpbHRlclxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRGaWx0ZXIgPSB0aGlzLmZpbHRlciQudmFsdWU7XHJcbiAgICAgICAgaWYgKCEhY3VycmVudEZpbHRlcikge1xyXG4gICAgICAgICAgY29uc3QgbmV3RmlsdGVyID0ge1xyXG4gICAgICAgICAgICAuLi5jdXJyZW50RmlsdGVyLFxyXG4gICAgICAgICAgICAuLi54LFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyJC5uZXh0KG5ld0ZpbHRlcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyJC5uZXh0KHgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5jbGlja0dlbmVyYXRlVGVtcGxhdGUkLnBpcGUoXHJcbiAgICAgICAgbWFwKHggPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJtYXBcIiwgeClcclxuICAgICAgICAgIHJldHVybiB4O1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGZpbHRlcih4ID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiZmlsdGVyXCIsICEheClcclxuICAgICAgICAgIHJldHVybiAhIXhcclxuICAgICAgICB9KSxcclxuICAgICAgICBzd2l0Y2hNYXAoeCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvbmdBcGlSdW5uaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudGVtcGxhdGVGaWxlTmFtZSA9IHRoaXMuZ2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3Q/LmV4Q29kZSArIFwiX1wiICsgeCArIFwiLnhsc3hcIlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5nZW5lcmF0ZVRlbXBsYXRlKHRoaXMuZ2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3QpXHJcbiAgICAgICAgfSlcclxuICAgICAgKS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgdGhpcy5sb25nQXBpUnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuXHJcbiAgICAgICAgICBpZiAoeC5ib2R5LnN0YXR1c0NvZGUgPT09IDQwMCkgcmV0dXJuXHJcblxyXG4gICAgICAgICAgbGV0IGRvd25sb2FkTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgZG93bmxvYWRMaW5rLmhyZWYgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbeC5ib2R5XSkpXHJcbiAgICAgICAgICBkb3dubG9hZExpbmsuc2V0QXR0cmlidXRlKFwiZG93bmxvYWRcIiwgdGhpcy50ZW1wbGF0ZUZpbGVOYW1lKTtcclxuICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG93bmxvYWRMaW5rKTtcclxuICAgICAgICAgIGRvd25sb2FkTGluay5jbGljaygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKFwiRG93bmxvYWQgZmFpbGVkLiBQbGVhc2UgY29udGFjdCB5b3VyIGRldmVsb3BlciB0ZWFtIHRvIHJlc29sdmVcIiwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KSlcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLnRtcEZpbHRlciQucGlwZShmaWx0ZXIoeCA9PiAhIXggJiYgISEhdGhpcy50bXBGaWx0ZXJBY3RpdmUpKS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgdGhpcy5wcmltYXJ5RmlsdGVyID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlciQudmFsdWUpKTtcclxuICAgICAgICB0aGlzLmZpbHRlciQubmV4dCh4KTtcclxuICAgICAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UudG1wRmlsdGVyJC5uZXh0KG51bGwpO1xyXG4gICAgICAgIHRoaXMudG1wRmlsdGVyQWN0aXZlID0gdHJ1ZTtcclxuICAgICAgfSlcclxuICAgIClcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UudG1wSW5PcGVyYXRvcnMkLnBpcGUoZmlsdGVyKHggPT4gISF4Lmxlbmd0aCAmJiAhISF0aGlzLnRtcEluT3BlcmF0b3JzQWN0aXZlKSkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgIHRoaXMucHJpbWFyeUluT3BlcmF0b3JzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmluT3BlcmF0b3JzJC52YWx1ZSkpO1xyXG4gICAgICAgIHRoaXMuaW5PcGVyYXRvcnMkLm5leHQoeCk7XHJcbiAgICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLnRtcEluT3BlcmF0b3JzJC5uZXh0KFtdKTtcclxuICAgICAgICB0aGlzLnRtcEluT3BlcmF0b3JzQWN0aXZlID0gdHJ1ZTtcclxuICAgICAgfSlcclxuICAgIClcclxuICAgIGlmICghIXRoaXMub3V0ZXJTb3J0KSB7XHJcbiAgICAgIHRoaXMuc29ydCQubmV4dCh0aGlzLm91dGVyU29ydCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vbkluc3RhbmNlQ3JlYXRlZC5lbWl0KHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIpO1xyXG5cclxuICAgIGlmICghIXRoaXMuZml4ZWRQYWdlU2l6ZSkge1xyXG4gICAgICB0aGlzLnBhZ2VTaXplJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPih0aGlzLmZpeGVkUGFnZVNpemUpO1xyXG4gICAgICB0aGlzLnBhZ2luYXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJUGFnaW5hdGlvbj4oe1xyXG4gICAgICAgIHNraXA6IDAsXHJcbiAgICAgICAgdGFrZTogdGhpcy5maXhlZFBhZ2VTaXplLFxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGFnZVNpemUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KGRlZmF1bHRQYWdpbmcudGFrZSk7XHJcbiAgICAgIHRoaXMucGFnaW5hdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElQYWdpbmF0aW9uPih7XHJcbiAgICAgICAgc2tpcDogMCxcclxuICAgICAgICB0YWtlOiBkZWZhdWx0UGFnaW5nLnRha2UsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuZXdBdmFpbGFibGVDb2x1bW5zRm9yR2VuZXJhbFNlYXJjaDogc3RyaW5nW10gPSBbXTtcclxuICAgIHRoaXMuY29sdW1ucy5tYXAoKHgpID0+IHtcclxuICAgICAgLy8gaWYgKHgudHlwZSA9PT0gJ3RleHQnIHx8IHgudHlwZSA9PT0gJ3N0cmluZycgfHwgeC50eXBlID09PSAnZGF0ZScgfHwgeC50eXBlID09PSAnZGF0ZXRpbWUnKSB7XHJcbiAgICAgIC8vIGlmICh4LnR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICBpZiAoeC50eXBlID09PSAndGV4dCcgfHwgeC50eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIG5ld0F2YWlsYWJsZUNvbHVtbnNGb3JHZW5lcmFsU2VhcmNoLnB1c2goeC5maWVsZCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5hdmFpbGFibGVDb2x1bW5zRm9yR2VuZXJhbFNlYXJjaCA9IG5ld0F2YWlsYWJsZUNvbHVtbnNGb3JHZW5lcmFsU2VhcmNoO1xyXG5cclxuICAgIGlmICghIXRoaXMuY2xlYXJEYXRhJCkge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmNsZWFyRGF0YSRcclxuICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICBmaWx0ZXIoKHgpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gISF4O1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoXykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxpc3QgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5saXN0Q2hhbmdlLmVtaXQoW10pO1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyRGF0YSQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGFnaW5hdGlvbkhlaWdodCA9IE51bWJlcihcclxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXHJcbiAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0tc2l6ZS1jb3JlLXBhZ2luYXRpb24taGVpZ2h0JylcclxuICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcclxuICAgICk7XHJcblxyXG4gICAgLy8gc2V0IGRlZmF1bHQgc29ydCBkaXJlY3Rpb25cclxuXHJcbiAgICBjb25zdCBuZXdTb3J0OiBJU29ydEl0ZW1bXSA9IFtdO1xyXG4gICAgdGhpcy5jb2x1bW5zLmZpbHRlcih4ID0+IHguZmllbGQgIT09IFwiaWRcIikubWFwKChjKSA9PiB7XHJcbiAgICAgIG5ld1NvcnQucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6IGMuZmllbGQsXHJcbiAgICAgICAgc29ydERpcmVjdGlvbjogRW51bVNvcnREaXJlY3Rpb24uTk9ORSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIC8vIGFjY2VwdCBkZWZhdWx0c29ydCBwYXJhbVxyXG4gICAgdGhpcy5zb3J0JC5uZXh0KG5ld1NvcnQubWFwKHQxID0+ICh7IC4uLnQxLCAuLi50aGlzLnNvcnQkLnZhbHVlLmZpbmQodDIgPT4gdDIuZmllbGQgPT09IHQxLmZpZWxkKSB9KSkpO1xyXG5cclxuICAgIC8qIFNUQVJUOiBNZXJnZSBmaWx0ZXJPcGVyYXRvciB3aXRoIG91dGVyIG9uZSAqL1xyXG4gICAgaWYgKCEhdGhpcy5vdXRlckZpbHRlck9wZXJhdG9ycykge1xyXG4gICAgICBpZiAodGhpcy5maWx0ZXJPcGVyYXRvcnMkLnZhbHVlKSB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudEZpbHRlck9wZXJhdG9yczogSUZpbHRlck9wZXJhdG9yW10gPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5maWx0ZXJPcGVyYXRvcnMkLnZhbHVlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5vdXRlckZpbHRlck9wZXJhdG9ycy5tYXAoKG9mbykgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZmlsdGVyID0gY3VycmVudEZpbHRlck9wZXJhdG9ycy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChvKSA9PiBvLmZpZWxkID09PSBvZm8uZmllbGRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICAvLyBvcHRpbWlzdGljYWxseSBmaWx0ZXIubGVuZ3RoID09PSAxXHJcbiAgICAgICAgICBpZiAoISFmaWx0ZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZpbHRlclswXS5vcGVyYXRvciA9IG9mby5vcGVyYXRvcjtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRGaWx0ZXJPcGVyYXRvcnMucHVzaChvZm8pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyT3BlcmF0b3JzJC5uZXh0KGN1cnJlbnRGaWx0ZXJPcGVyYXRvcnMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyT3BlcmF0b3JzJC5uZXh0KHRoaXMub3V0ZXJGaWx0ZXJPcGVyYXRvcnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvKiBFTkQ6IENyZWF0ZS9NZXJnZS9PdmVyd3JpdGUgZmlsdGVyT3BlcmF0b3Igd2l0aCBvdXRlciBvbmUgKi9cclxuXHJcbiAgICAvKiBTVEFSVDogU3Vic2NyaXB0aW9uIGZvciBvdXRlclBhcmFtJCAqL1xyXG4gICAgLy8gU29tZSBzaW1wbGUgbWFzdGVyIGRhdGEgZG8gbm90IGhhdmUgb3V0ZXJQYXJhbSQgSU1QT1JUQU5UISEhXHJcbiAgICBpZiAoISF0aGlzLm91dGVyUGFyYW0kKSB7XHJcbiAgICAgIHRoaXMub3V0ZXJQYXJhbVN1YnNjcmliZUZuKCk7XHJcbiAgICB9XHJcbiAgICAvKiBFTkQ6IFN1YnNjcmlwdGlvbiBmb3Igb3V0ZXJQYXJhbSQgKi9cclxuXHJcbiAgICAvKiBTVEFSVDogU3Vic2NyaXB0aW9ucyBmb3IgcXVlcnlMaXN0UmVxdWVzdCQgKi9cclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5tbHMubGFuZyQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICBsYW5nOiB4LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5leGNsdWRlZElkcyQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICBleGNsdWRlZElkczogeFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5nZW5lcmFsU2VhcmNoJFxyXG4gICAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MDApLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICAgIGdlbmVyYWxTZWFyY2g6IHtcclxuICAgICAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLmdlbmVyYWxTZWFyY2gsXHJcbiAgICAgICAgICAgICAgc2VhcmNoRm9yOiB4LFxyXG4gICAgICAgICAgICAgIGF2YWlsYWJsZUNvbHVtbnM6IHRoaXMuYXZhaWxhYmxlQ29sdW1uc0ZvckdlbmVyYWxTZWFyY2gsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5maWx0ZXIkLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgZmlsdGVyOiB4LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5maWx0ZXJPcGVyYXRvcnMkLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgZmlsdGVyT3BlcmF0b3JzOiB4LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5pbk9wZXJhdG9ycyQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICBpbk9wZXJhdG9yczogeCxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAndGhpcy5xdWVyeUxpc3RSZXF1ZXN0JCBjaGFuZ2VkOiAnLFxyXG4gICAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLnNlYXJjaCRcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIGRlYm91bmNlVGltZSg1MDApLFxyXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXYsIGN1cnIpID0+IHtcclxuICAgICAgICAgICAgbGV0IGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoISFwcmV2IHx8ICEhY3Vycikge1xyXG4gICAgICAgICAgICAgIGNvbmRpdGlvbiA9IEpTT04uc3RyaW5naWZ5KHByZXYpID09PSBKU09OLnN0cmluZ2lmeShjdXJyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gY29uZGl0aW9uO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZSxcclxuICAgICAgICAgICAgc2VhcmNoOiAhIXg/LmN1cnJlbnRcclxuICAgICAgICAgICAgICA/IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoeD8uY3VycmVudCkpXHJcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5zb3J0JC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgLi4uSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlKSksXHJcbiAgICAgICAgICBzb3J0OiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHgpKSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMucGFnaW5hdGlvbiQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICBwYWdpbmF0aW9uOiB4LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmluc3RhbmNlc1xyXG4gICAgICAgIC5maWx0ZXIoKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIpWzBdXHJcbiAgICAgICAgLnJlbG9hZEZsYWckIS5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCd0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQgaXMgYmVpbmcgY2hhbmdlZC4uLicsIHgpO1xyXG4gICAgICAgICAgdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLm5leHQoeCk7XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuZm9yY2VSZWxvYWRpbmdGbGFnJC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZSxcclxuICAgICAgICAgIGZvcmNlUmVsb2FkaW5nRmxhZzogeCxcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UkXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpIC8vIElNUE9SVEFOVCFcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJjdXJyZW50UGFnZSBjaGFuZ2UgdG9cIiwgeClcclxuICAgICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcclxuICAgICAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlPy5wYWdpbmF0aW9uISxcclxuICAgICAgICAgICAgICBza2lwOiAoeCAtIDEpICogdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZT8ucGFnaW5hdGlvbj8udGFrZSEsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmxvYWRpbmckLnN1YnNjcmliZSh4ID0+IHRoaXMubG9hZGluZyA9IHgpXHJcbiAgICApXHJcblxyXG4gICAgLyogRU5EOiBTdWJzY3JpcHRpb25zIGZvciBxdWVyeUxpc3RSZXF1ZXN0JCAqL1xyXG5cclxuICAgIC8vIFF1YW4gdHLhu41uZzogQ29yZVBhZ2VMaXN0IGPhuqduIGJp4bq/dCBjaMOtbmggeMOhYyBjaGnhu4F1IGNhb1xyXG4gICAgLy8gVHV5IG5oacOqbiBjw7Mgbmhp4buBdSB0csaw4budbmcgaOG7o3AgY2hp4buBdSBjYW8gbsOgeSBraMO0bmcgxJHGsOG7o2MgdHJ1eeG7gW4gdsOgbyBraGkgdHJp4buDbiBraGFpXHJcbiAgICAvLyBYw6l0IHRyxrDhu51uZyBo4bujcCBjw6FjIGZvcm0gZGFuaCBt4bulYyBjxqEgYuG6o25cclxuICAgIC8vIGNvbnRlbnQtY29udGFpbmVyID0+IGNvbnN1bWUgY29tcG9uZW50ID0+IGNvcmUtcGFnZS1saXN0ID0+IGNvcmUtcGFnZS1oZWFkZXIgPT4gY29yZS1jb21wb3NpdGlvbiA9PiB0b3BSZWYgKyB0YWJsZSArIHBhZ2luYXRpb25cclxuICAgIC8vIHRhIGPDsyB0aOG7gyB0w61uaCBz4buRIG3hurdjIMSR4buLbmggKG7hur91IGhlaWdodCBraMO0bmcgxJHGsOG7o2MgdHJ1eeG7gW4gdsOgbylcclxuICAgIGlmICh0aGlzLmhlaWdodCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMubGF5b3V0U2VydmljZS5jb250ZW50Q29udGFpbmVySGVpZ2h0JC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICAvLyBiYXNpY1NwYWNpbmcgbMOgIHBhZGRpbmdCb3R0b20gY+G7p2EgbOG7m3AgY29udGVudC1jb250YWluZXJcclxuICAgICAgICAgIHRoaXMuaGVpZ2h0ID0geCAtIHRoaXMubGF5b3V0U2VydmljZS5iYXNpY1NwYWNpbmc7XHJcbiAgICAgICAgICB0aGlzLmhlaWdodCQubmV4dCh4IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmJhc2ljU3BhY2luZylcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgb25Sb3dEb3VibGVDbGljayhldmVudDogYW55KSB7XHJcbiAgICBpZiAoISF0aGlzLnNlZWtlck1vZGUgfHwgISF0aGlzLm1jY01vZGUgfHwgISF0aGlzLmRpc2FibGVEb3VibGVDbGljaykge1xyXG4gICAgICB0aGlzLnJvd0RvdWJsZUNsaWNrLmVtaXQoZXZlbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKCEhIXRoaXMuc2VsZlJlc29sdmVDb3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrKSB7XHJcbiAgICAgICAgdGhpcy5jb3JlUGFnZUVkaXRTZXJ2aWNlLmZyb21VcmwgPSB0aGlzLnJvdXRlci51cmw7XHJcbiAgICAgICAgaWYgKCEhdGhpcy5ub3JtYWxNb2RlKSB7XHJcbiAgICAgICAgICBpZiAoISF0aGlzLmhhc0lkT2ZTdHJpbmdUeXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgIGJ0b2EoZXZlbnQuaWQpLFxyXG4gICAgICAgICAgICAgICAgeyBsaXN0SW5zdGFuY2U6IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgfSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUucGFyZW50LFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgIGJ0b2EoZXZlbnQuaWQudG9TdHJpbmcoKSksXHJcbiAgICAgICAgICAgICAgICB7IGxpc3RJbnN0YW5jZTogdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlciB9LFxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZS5wYXJlbnQsXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoISF0aGlzLmhhc0lkT2ZTdHJpbmdUeXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgb3V0bGV0czoge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcmVQYWdlTGlzdEF1eDogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnRvYShldmVudC5pZCksXHJcbiAgICAgICAgICAgICAgICAgICAgICB7IGxpc3RJbnN0YW5jZTogdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlciB9LFxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgb3V0bGV0czoge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcmVQYWdlTGlzdEF1eDogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnRvYShldmVudC5pZC50b1N0cmluZygpKSxcclxuICAgICAgICAgICAgICAgICAgICAgIHsgbGlzdEluc3RhbmNlOiB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJvd0RvdWJsZUNsaWNrLmVtaXQoZXZlbnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblJvd0NsaWNrKGU6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coJ0NvclBhZ2VMaXN0IG9uUm93Q2xpY2sgZScsIGUpO1xyXG4gICAgaWYgKCEhZS5pZCkge1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKGUuaWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgXCJUaGUgJ2lkJyBjb2x1bW5zIGlzIG51bGwuIFBsZWFzZSBjaGVjayB3aHlcIixcclxuICAgICAgICBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9uc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yb3dDbGljay5lbWl0KGUpO1xyXG4gIH1cclxuXHJcbiAgb25Ub29sQ2xpY2soZXZlbnQ6IElDb3JlVGFibGVUb29sQ2xpY2tFdmVudEVtaXR0ZXJEYXRhKSB7IH1cclxuXHJcbiAgb25TZWFyY2hpbmcoZTogSVNlYXJjaEl0ZW1bXSk6IHZvaWQge1xyXG4gICAgY29uc3QgcHJldiA9ICEhdGhpcy5zZWFyY2gkLnZhbHVlPy5jdXJyZW50XHJcbiAgICAgID8gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNlYXJjaCQudmFsdWU/LmN1cnJlbnQpKVxyXG4gICAgICA6IG51bGw7XHJcbiAgICB0aGlzLnNlYXJjaCQubmV4dCh7XHJcbiAgICAgIHByZXZpb3VzOiBwcmV2ISxcclxuICAgICAgY3VycmVudDogZSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNpemVIZWlnaHRXaGVuQ29udGFpbmVySGFzRml4ZWRIZWlnaHQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuICAgIGNvbnN0IHBhZ2luYXRpb25IZWlnaHQgPSBOdW1iZXIoXHJcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxyXG4gICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXNpemUtY29yZS1wYWdpbmF0aW9uLWhlaWdodCcpXHJcbiAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICApO1xyXG4gICAgY29uc3QgdGFibGVCb3JkZXJUb3AgPSBOdW1iZXIoXHJcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxyXG4gICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXNpemUtY29yZS10YWJsZS1ib3JkZXItdG9wJylcclxuICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgYmxvY2tDZWxsU3BhY2luZyA9IE51bWJlcihcclxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXHJcbiAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0tc2l6ZS1sYXlvdXQtYmxvY2stY2VsbC1zcGFjaW5nJylcclxuICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jb3JlUGFnZUxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcclxuICAgICAgJy0taGVpZ2h0JyxcclxuICAgICAgY29udGFpbmVySGVpZ2h0ICsgJ3B4J1xyXG4gICAgKTtcclxuICAgIGNvbnN0IHJlbGF0ZWRUYWJsZUZpbHRlciA9IHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5pbnN0YW5jZXMuZmlsdGVyKFxyXG4gICAgICAoeCkgPT4geC5pbnN0YW5jZU51bWJlciA9PT0gdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlclxyXG4gICAgKTtcclxuICAgIGlmICghIXJlbGF0ZWRUYWJsZUZpbHRlci5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgcmVsYXRlZFRhYmxlID0gcmVsYXRlZFRhYmxlRmlsdGVyWzBdLmNvcmVUYWJsZVJlZjtcclxuICAgICAgaWYgKCEhcmVsYXRlZFRhYmxlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1JlbGF0ZWQgQ29yZVRhYmxlQ29tcG9uZW50UmVmIEZPVU5EISEhJyk7XHJcbiAgICAgICAgLy9zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBmZWF0dXJlSGVpZ2h0ID1cclxuICAgICAgICAgIGNvbnRhaW5lckhlaWdodCAtXHJcbiAgICAgICAgICBwYWdpbmF0aW9uSGVpZ2h0IC1cclxuICAgICAgICAgIHRhYmxlQm9yZGVyVG9wIC1cclxuICAgICAgICAgIDIgKiBibG9ja0NlbGxTcGFjaW5nICogMCAvKiBwYWRkaW5nIGluY2x1ZWQgaW4gb2JqZWN0IGl0c2VsZiAqLyAtXHJcbiAgICAgICAgICAodGhpcy5leHRyYU1hbnVhbE9mZnNldCB8fCAwKTtcclxuICAgICAgICByZWxhdGVkVGFibGUubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcclxuICAgICAgICAgICctLWhlaWdodCcsXHJcbiAgICAgICAgICBmZWF0dXJlSGVpZ2h0ICsgJ3B4J1xyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpcnN0SGVhZGVyUm93SGVpZ2h0ID0gTnVtYmVyKFxyXG4gICAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShyZWxhdGVkVGFibGUubmF0aXZlRWxlbWVudClcclxuICAgICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0taGVhZGVyLTFzdC1yb3ctaGVpZ2h0JylcclxuICAgICAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBzZWNvbmRIZWFkZXJSb3dIZWlnaHQgPSBOdW1iZXIoXHJcbiAgICAgICAgICBnZXRDb21wdXRlZFN0eWxlKHJlbGF0ZWRUYWJsZS5uYXRpdmVFbGVtZW50KVxyXG4gICAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1oZWFkZXItMm5kLXJvdy1oZWlnaHQnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBmZWF0dXJlVGJvZHlIZWlnaHQgPVxyXG4gICAgICAgICAgZmVhdHVyZUhlaWdodCAtIGZpcnN0SGVhZGVyUm93SGVpZ2h0IC0gc2Vjb25kSGVhZGVyUm93SGVpZ2h0O1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZygnZmVhdHVyZVRib2R5SGVpZ2h0JywgZmVhdHVyZVRib2R5SGVpZ2h0KTtcclxuXHJcbiAgICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmluc3RhbmNlc1xyXG4gICAgICAgICAgLmZpbHRlcihcclxuICAgICAgICAgICAgKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXJcclxuICAgICAgICAgIClbMF1cclxuICAgICAgICAgIC50Ym9keUhlaWdodCQubmV4dChmZWF0dXJlVGJvZHlIZWlnaHQpO1xyXG4gICAgICAgIC8vfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignUmVsYXRlZCBDb3JlVGFibGVDb21wb25lbnRSZWYgd2FzIHVuZGVmaW5lZCcpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcignTm8gcmVsYXRlZCBDb3JlVGFibGVDb21wb25lbnRSZWYgZm91bmQnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzaXplSGVpZ2h0V2hlbkNvbnRhaW5lckhhc1VuZGVmaW5lZEhlaWdodCgpOiB2b2lkIHtcclxuXHJcbiAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSB0aGlzLmxheW91dFNlcnZpY2UuY29udGVudENvbnRhaW5lckhlaWdodCQudmFsdWU7XHJcbiAgICBjb25zdCBwYWdlSGVhZGVySGVpZ2h0ID0gdGhpcy5sYXlvdXRTZXJ2aWNlLmNvcmVQYWdlSGVhZGVySGVpZ2h0O1xyXG4gICAgY29uc3QgcGFnaW5hdGlvbkhlaWdodCA9IHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnaW5hdGlvbkhlaWdodDtcclxuICAgIGNvbnN0IHRhYmxlQm9yZGVyVG9wID0gdGhpcy5sYXlvdXRTZXJ2aWNlLnRhYmxlQm9yZGVyVG9wO1xyXG4gICAgY29uc3QgYmFzaWNTcGFjaW5nID0gdGhpcy5sYXlvdXRTZXJ2aWNlLmJhc2ljU3BhY2luZztcclxuXHJcbiAgICB0aGlzLmNvcmVQYWdlTGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxyXG4gICAgICAnLS1oZWlnaHQnLFxyXG4gICAgICBjb250YWluZXJIZWlnaHQgLSAyICogYmFzaWNTcGFjaW5nICsgJ3B4J1xyXG4gICAgKTtcclxuICAgIGNvbnN0IHJlbGF0ZWRUYWJsZUZpbHRlciA9IHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5pbnN0YW5jZXMuZmlsdGVyKFxyXG4gICAgICAoeCkgPT4geC5pbnN0YW5jZU51bWJlciA9PT0gdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlclxyXG4gICAgKTtcclxuICAgIGlmICghIXJlbGF0ZWRUYWJsZUZpbHRlci5sZW5ndGgpIHtcclxuXHJcbiAgICAgIGlmICghIXRoaXMuYXV0b1Jlc2l6ZVdpdGhXaW5kb3cpIHtcclxuXHJcbiAgICAgICAgY29uc3QgcmVsYXRlZFRhYmxlID0gcmVsYXRlZFRhYmxlRmlsdGVyWzBdLmNvcmVUYWJsZVJlZjtcclxuICAgICAgICBpZiAoISFyZWxhdGVkVGFibGUpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdSZWxhdGVkIENvcmVUYWJsZUNvbXBvbmVudFJlZiBGT1VORCEhIScpO1xyXG4gICAgICAgICAgLy9zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGZlYXR1cmVIZWlnaHQgPVxyXG4gICAgICAgICAgICBjb250YWluZXJIZWlnaHQgLVxyXG4gICAgICAgICAgICBwYWdlSGVhZGVySGVpZ2h0IC1cclxuICAgICAgICAgICAgcGFnaW5hdGlvbkhlaWdodCAtXHJcbiAgICAgICAgICAgIHRhYmxlQm9yZGVyVG9wIC1cclxuICAgICAgICAgICAgMiAqIGJhc2ljU3BhY2luZyAtXHJcbiAgICAgICAgICAgICh0aGlzLmV4dHJhTWFudWFsT2Zmc2V0IHx8IDApO1xyXG4gICAgICAgICAgcmVsYXRlZFRhYmxlLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXHJcbiAgICAgICAgICAgICctLWhlaWdodCcsXHJcbiAgICAgICAgICAgIGZlYXR1cmVIZWlnaHQgKyAncHgnXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGZpcnN0SGVhZGVyUm93SGVpZ2h0ID0gTnVtYmVyKFxyXG4gICAgICAgICAgICBnZXRDb21wdXRlZFN0eWxlKHJlbGF0ZWRUYWJsZS5uYXRpdmVFbGVtZW50KVxyXG4gICAgICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLWhlYWRlci0xc3Qtcm93LWhlaWdodCcpXHJcbiAgICAgICAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc3Qgc2Vjb25kSGVhZGVyUm93SGVpZ2h0ID0gTnVtYmVyKFxyXG4gICAgICAgICAgICBnZXRDb21wdXRlZFN0eWxlKHJlbGF0ZWRUYWJsZS5uYXRpdmVFbGVtZW50KVxyXG4gICAgICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLWhlYWRlci0ybmQtcm93LWhlaWdodCcpXHJcbiAgICAgICAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGZlYXR1cmVUYm9keUhlaWdodCA9XHJcbiAgICAgICAgICAgIGZlYXR1cmVIZWlnaHQgLSBmaXJzdEhlYWRlclJvd0hlaWdodCAtIHNlY29uZEhlYWRlclJvd0hlaWdodDtcclxuXHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnZmVhdHVyZVRib2R5SGVpZ2h0JywgZmVhdHVyZVRib2R5SGVpZ2h0KTtcclxuXHJcbiAgICAgICAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2VzXHJcbiAgICAgICAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXJcclxuICAgICAgICAgICAgKVswXVxyXG4gICAgICAgICAgICAudGJvZHlIZWlnaHQkLm5leHQoZmVhdHVyZVRib2R5SGVpZ2h0KTtcclxuICAgICAgICAgIC8vfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1JlbGF0ZWQgQ29yZVRhYmxlQ29tcG9uZW50UmVmIHdhcyB1bmRlZmluZWQnKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgfVxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHJlbGF0ZWQgQ29yZVRhYmxlQ29tcG9uZW50UmVmIGZvdW5kJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2l6ZUhlaWdodCQoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XHJcbiAgICAgIHRoaXMuaGVpZ2h0UmVzaXppbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLnJlc2l6ZUhlaWdodCgpO1xyXG4gICAgICB0aGlzLmhlaWdodFJlc2l6aW5nID0gZmFsc2U7XHJcbiAgICAgIG9ic2VydmVyLm5leHQobmV3IERhdGUoKS5nZXRUaW1lKCkpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNpemVIZWlnaHQoKTogdm9pZCB7XHJcbiAgICBpZiAoISEhdGhpcy5zZWVrZXJNb2RlKSB7XHJcbiAgICAgIC8qICNzdGFydCBFRElUSU5HIENPREUgQkxPQ0sgQkVMTE9XIE9OTFkgSUYgWU9VIEtOT1cgQUxMIFRIRSBBUFAgREVTSUdOIEZMT1dTICovXHJcbiAgICAgIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXHJcbiAgICAgIGlmICghIXRoaXMuaGVpZ2h0KSB7XHJcbiAgICAgICAgdGhpcy5yZXNpemVIZWlnaHRXaGVuQ29udGFpbmVySGFzRml4ZWRIZWlnaHQoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlc2l6ZUhlaWdodFdoZW5Db250YWluZXJIYXNVbmRlZmluZWRIZWlnaHQoKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gdG8gZG8gc210aCBtYXliZVxyXG4gICAgfVxyXG4gICAgLyogI2VuZCBFRElUSU5HIENPREUgQkxPQ0sgQkVMTE9XIE9OTFkgSUYgWU9VIEtOT1cgQUxMIFRIRSBBUFAgREVTSUdOIEZMT1dTICovXHJcbiAgfVxyXG5cclxuICBxdWVyeUxpc3RTdWJzY3JpYmUoKTogdm9pZCB7XHJcbiAgICBpZiAoISEhdGhpcy5xdWVyeUxpc3RTdWJzY3JpcHRpb24gJiYgISF0aGlzLnF1ZXJ5TGlzdFN0cmVhbSQpIHtcclxuICAgICAgdGhpcy5xdWVyeUxpc3RTdWJzY3JpcHRpb24gPSB0aGlzLnF1ZXJ5TGlzdFN0cmVhbSQuc3Vic2NyaWJlKHggPT4gdGhpcy5zdWJzY3JpYmVRdWVyeUxpc3QoeCkpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYWxjdWxhdGVUYWJsZUhlaWdodEJhc2VkT25IZWlnaHRBbmRUb3BSZWZIZWlnaHQoaGVpZ2h0OiBudW1iZXIsIHRvcFJlZkhlaWdodDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQgfHwgdG9wUmVmSGVpZ2h0ID09PSB1bmRlZmluZWQpIHJldHVybjtcclxuICAgIHRoaXMuY29tcG9zaXRpb25IZWlnaHQgPSBoZWlnaHQgLSAoISF0aGlzLmhpZGVIZWFkZXIgPyAwIDogdGhpcy5sYXlvdXRTZXJ2aWNlLmNvcmVQYWdlSGVhZGVySGVpZ2h0KTtcclxuICAgIC8vICghdG9wUmVmSGVpZ2h0ID8gMTUgOiAwKSA9PiBO4bq/dSBjw7MgcGjhuqduIFRvcCBz4bq9IGPDsyB0aMOqbSBtYXJnaW5Cb3R0b20gMTVweCBj4bunYSBuw7MuXHJcbiAgICB0aGlzLnRhYmxlSGVpZ2h0ID0gaGVpZ2h0IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmNvcmVQYWdlSGVhZGVySGVpZ2h0IC0gdG9wUmVmSGVpZ2h0IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmNvcmVQYWdpbmF0aW9uSGVpZ2h0IC0gKCEhdG9wUmVmSGVpZ2h0ID8gMTUgOiAwKSAgLy8gMTVweCBpcyBtYXJnaW5Cb3R0b20gb2YgdG9wUmVmXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAvKiogU1RBUlQgc2V0VGltZW91dCAqL1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgICBjb25zdCB0cnlGaW5kID0gdGhpcy5jb3JlQnV0dG9uR3JvdXBTZXJ2aWNlLmluc3RhbmNlcy5maWx0ZXIoeCA9PiB4Lmluc3RhbmNlTnVtYmVyID09PSB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyKTtcclxuICAgICAgaWYgKCEhdHJ5RmluZC5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmJ1dHRvbkdyb3VwU3RhdHVzID0gdHJ5RmluZFswXTtcclxuICAgICAgICB0aGlzLmJ1dHRvbkdyb3VwU3RhdHVzLm11c3RCZUhpZGRlbiQubmV4dChFTVBUWV9TRUxFQ1RJT05fSElEREVOX0JVVFRPTilcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoaXNEZXZNb2RlKCkgJiYgISghdGhpcy5zZWVrZXJNb2RlIHx8ICF0aGlzLmhpZGVCdXR0b25Hcm91cCkpIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLndhcm4oXCJLaMO0bmcgdMOsbSB0aOG6pXkgaW5zdGFuY2UgbnVtYmVyIGPhu6dhIGLhu5kgbsO6dCDEkWnhu4F1IGtoaeG7g25cIiwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBjb21wb3NpdGlvbkZpbHRlciA9IHRoaXMuY29yZUNvbXBvc2l0aW9uU2VydmljZS5pbnN0YW5jZXMuZmlsdGVyKHggPT4geC5pbnN0YW5jZU51bWJlciA9PT0gdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcik7XHJcbiAgICAgIGlmICghIWNvbXBvc2l0aW9uRmlsdGVyLmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgY29tcG9zaXRpb25GaWx0ZXJbMF0udG9wUmVmJC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudG9wUGxhY2VIZWlnaHQkLm5leHQoeC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodClcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcblxyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5oZWlnaHQkLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgIHRoaXMuY2FsY3VsYXRlVGFibGVIZWlnaHRCYXNlZE9uSGVpZ2h0QW5kVG9wUmVmSGVpZ2h0KHgsIHRoaXMudG9wUGxhY2VIZWlnaHQkLnZhbHVlKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMudG9wUGxhY2VIZWlnaHQkLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgIHRoaXMuY2FsY3VsYXRlVGFibGVIZWlnaHRCYXNlZE9uSGVpZ2h0QW5kVG9wUmVmSGVpZ2h0KHRoaXMuaGVpZ2h0JC52YWx1ZSwgeClcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLnJlc2l6ZUhlaWdodEZsYWckLnBpcGUoXHJcbiAgICAgICAgICBzd2l0Y2hNYXAoXyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2VvbWV0cmljRG9uZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXNpemVIZWlnaHQkKClcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcInJlc2l6ZUhlaWdodEZsYWckIHN3aXRjaE1hcCBmaW5hbCB2YWx1ZVwiLCB4KVxyXG4gICAgICAgICAgaWYgKCEhIXRoaXMuaGVpZ2h0UmVzaXppbmcpIHRoaXMuZ2VvbWV0cmljRG9uZSA9IHRydWU7XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgIClcclxuICAgICAgLy8gdGhpcy5jYWxjdWxhdGVUYWJsZUhlaWdodCgpO1xyXG5cclxuICAgICAgaWYgKCEhdGhpcy5zaG93UGFyYW1LaXQpIHtcclxuICAgICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAvLyBjYWxjdWxhdGluZyBvZmZzZXQgb2YgdGhlIHRvcFxyXG4gICAgICAgIGNvbnN0IHRyeUZpbmRDb3JlSGVhZGVyUGFyYW1zRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXHJcbiAgICAgICAgICAnLmNvcmUtaGVhZGVyLXBhcmFtcy1jb250YWluZXInXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoQXJyYXkuZnJvbSh0cnlGaW5kQ29yZUhlYWRlclBhcmFtc0VsZW1lbnQpLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgY29uc3QgaXRlbSA9IEFycmF5LmZyb20odHJ5RmluZENvcmVIZWFkZXJQYXJhbXNFbGVtZW50KVswXTtcclxuICAgICAgICAgIGNvbnN0IHJlY3QgPSBpdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgdGhpcy5leHRyYU1hbnVhbE9mZnNldCA9IHJlY3QuaGVpZ2h0ICsgMTU7IC8vIG1iMTUgaXMgbWFyZ2luLWJvdHRvbSAxNXB4IG9mIGZvcm0gcm93XHJcblxyXG4gICAgICAgICAgdGhpcy5yZXNpemVIZWlnaHRGbGFnJC5uZXh0KCEhIXRoaXMucmVzaXplSGVpZ2h0RmxhZyQudmFsdWUpO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKCEhIXRoaXMuZXh0cmFNYW51YWxPZmZzZXQpIHRoaXMuZXh0cmFNYW51YWxPZmZzZXQgPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXNpemVIZWlnaHRGbGFnJC5uZXh0KCEhIXRoaXMucmVzaXplSGVpZ2h0RmxhZyQudmFsdWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICghISF0aGlzLmV4dHJhTWFudWFsT2Zmc2V0KSB0aGlzLmV4dHJhTWFudWFsT2Zmc2V0ID0gMDtcclxuICAgICAgICB0aGlzLnJlc2l6ZUhlaWdodEZsYWckLm5leHQoISEhdGhpcy5yZXNpemVIZWlnaHRGbGFnJC52YWx1ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHRyeUZpbHRlciA9IHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5pbnN0YW5jZXNcclxuICAgICAgICAuZmlsdGVyKCh4KSA9PiB4Lmluc3RhbmNlTnVtYmVyID09PSB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyKTtcclxuICAgICAgaWYgKCEhIXRyeUZpbHRlci5sZW5ndGgpIHtcclxuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGBDb3JlUGFnZUxpc3QgaW5zdGFuY2VzIGRvIG5vdCBpbmNsdWRlIG51bWJlciAke3RoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXJ9YCwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmluc3RhbmNlc1xyXG4gICAgICAgICAgICAuZmlsdGVyKCh4KSA9PiB4Lmluc3RhbmNlTnVtYmVyID09PSB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyKVswXVxyXG4gICAgICAgICAgICAuaWQkLnBpcGUoXHJcbiAgICAgICAgICAgICAgZmlsdGVyKF8gPT4gISEhdGhpcy5pZFN0YXRlKVxyXG4gICAgICAgICAgICApLnN1YnNjcmliZSgoeDogYW55KSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdjb3JlUGFnZUxpc3RTZXJ2aWNlLmluc3RhbmNlIGlkJCBoYXMgY2hhbmdlZCwgeCA9ICcsIHgpO1xyXG4gICAgICAgICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgaWQ6IHgsXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goIC8vIG91dGVyLXB1c2hcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZGlhbG9nQ29uZmlybWVkJC5waXBlKFxyXG4gICAgICAgICAgZmlsdGVyKGkgPT4gISEhdGhpcy5kaWFsb2dTZXJ2aWNlLmJ1c3kgJiYgISFpPy5jb25maXJtZWQgJiYgaS5pbnN0YW5jZU51bWJlciA9PT0gdGhpcy5kaWFsb2dJbnN0YW5jZU51bWJlcilcclxuICAgICAgICApLnN1YnNjcmliZSgoKSA9PiB7XHJcblxyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnJlc2V0U2VydmljZSgpXHJcblxyXG4gICAgICAgICAgc3dpdGNoICh0aGlzLnBlbmRpbmdBY3Rpb24pIHtcclxuICAgICAgICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1VQTE9BRDpcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIk5vdyB1cGxvYWRpbmcuLi4gXCIsIHRoaXMuZGF0YUltcG9ydCk7XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goIC8vIG1pZGRlbS1wdXNoXHJcbiAgICAgICAgICAgICAgLy8gKVxyXG4gICAgICAgICAgICAgIHRoaXMucGVuZGluZ0FjdGlvbiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9ERUxFVEU6XHJcblxyXG5cclxuICAgICAgICAgICAgICBjb25zdCBzeXNNdXRhdGlvbkxvZ0JlZm9yZUFmdGVyUmVxdWVzdDogSVN5c011dGF0aW9uTG9nQmVmb3JlQWZ0ZXJSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICAgICAgc3lzRnVuY3Rpb25Db2RlOiB0aGlzLnJvdXRpbmdTZXJ2aWNlLmN1cnJlbnRGdW5jdGlvbiQudmFsdWU/LmNvZGUhLFxyXG4gICAgICAgICAgICAgICAgc3lzQWN0aW9uQ29kZTogRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9ERUxFVEUsXHJcbiAgICAgICAgICAgICAgICBiZWZvcmU6IEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWREYXRhKSxcclxuICAgICAgICAgICAgICAgIGFmdGVyOiAnXCJcIicsXHJcbiAgICAgICAgICAgICAgICB1c2VybmFtZTogdGhpcy5hdXRoU2VydmljZS5kYXRhJC52YWx1ZT8udXNlck5hbWUhXHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0OiBJSWRzUmVxdWVzdCA9IHtcclxuICAgICAgICAgICAgICAgIGlkczogdGhpcy5zZWxlY3RlZElkcyBhcyBudW1iZXJbXSxcclxuICAgICAgICAgICAgICAgIHN5c011dGF0aW9uTG9nQmVmb3JlQWZ0ZXJSZXF1ZXN0XHJcbiAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgLmRlbGV0ZUlkcyhyZXF1ZXN0LCB0aGlzLmNydWQuZGVsZXRlSWRzISlcclxuICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwIHx8IHguYm9keS5zdGF0dXNDb2RlID09ICcyMDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9yY2VSZWxvYWRpbmdGbGFnJC5uZXh0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICEhIXRoaXMuZm9yY2VSZWxvYWRpbmdGbGFnJC52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmlkcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDQwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHRoaXMucGVuZGluZ0FjdGlvbiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9VTkFQUFJPVkU6XHJcbiAgICAgICAgICAgICAgY29uc3Qgc3lzTXV0YXRpb25Mb2dCZWZvcmVBZnRlclNlbmRVbmFwcHJvdmU6IElTeXNNdXRhdGlvbkxvZ0JlZm9yZUFmdGVyUmVxdWVzdCA9IHtcclxuICAgICAgICAgICAgICAgIHN5c0Z1bmN0aW9uQ29kZTogdGhpcy5yb3V0aW5nU2VydmljZS5jdXJyZW50RnVuY3Rpb24kLnZhbHVlPy5jb2RlISxcclxuICAgICAgICAgICAgICAgIHN5c0FjdGlvbkNvZGU6IEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfVU5BUFBST1ZFLFxyXG4gICAgICAgICAgICAgICAgYmVmb3JlOiBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkRGF0YSksXHJcbiAgICAgICAgICAgICAgICBhZnRlcjogJ1wiXCInLFxyXG4gICAgICAgICAgICAgICAgdXNlcm5hbWU6IHRoaXMuYXV0aFNlcnZpY2UuZGF0YSQudmFsdWU/LnVzZXJOYW1lIVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgY29uc3Qgc2VuZFJlcXVlc3Q6IElUb25nbGVVbkFwcHJvdmVJZHNSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICAgICAgcmVhc29uOiB0aGlzLmRpYWxvZ1NlcnZpY2UucmVhc29uJC52YWx1ZSxcclxuICAgICAgICAgICAgICAgIGlkczogdGhpcy5zZWxlY3RlZElkcyBhcyBudW1iZXJbXSxcclxuICAgICAgICAgICAgICAgIHZhbHVlVG9CaW5kOiBmYWxzZVxyXG4gICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5hcHBTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAgIC5wb3N0KHRoaXMuY3J1ZC50b2dnbGVVbmFwcHJvdmVJZHMhLCBzZW5kUmVxdWVzdClcclxuICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwIHx8IHguYm9keS5zdGF0dXNDb2RlID09ICcyMDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9yY2VSZWxvYWRpbmdGbGFnJC5uZXh0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICEhIXRoaXMuZm9yY2VSZWxvYWRpbmdGbGFnJC52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmlkcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDQwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHRoaXMucGVuZGluZ0FjdGlvbiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG5cclxuXHJcbiAgICAgIGlmICh0aGlzLmF1dG9SZXNpemVXaXRoV2luZG93KSB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICB0aGlzLnJlc2l6ZVN0cmVhbSQucGlwZShkZWJvdW5jZVRpbWUoMjAwKSkuc3Vic2NyaWJlKChfOiBhbnkpID0+IHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmVzaXplSGVpZ2h0RmxhZyQubmV4dCghISF0aGlzLnJlc2l6ZUhlaWdodEZsYWckLnZhbHVlKTtcclxuXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIC8qIFNUQVJUOiBTdWJzY3JpcHRpb24gZm9yIGxpc3QgKi9cclxuXHJcbiAgICAgIHRoaXMucXVlcnlMaXN0U3RyZWFtJCA9IHRoaXMucXVlcnlMaXN0UmVxdWVzdCQucGlwZShcclxuICAgICAgICBtYXAoeCA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIm1hcCB4ID0+IFwiLCB4KVxyXG4gICAgICAgICAgY29uc3QgZmlsdGVyMUNvbmRpdGlvbiA9ICEheCAmJiAvKiEheC5zb3J0ICYmICovICEheC5wYWdpbmF0aW9uXHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIm1hcCBmaWx0ZXIxQ29uZGl0aW9uID0+IFwiLCBmaWx0ZXIxQ29uZGl0aW9uKVxyXG4gICAgICAgICAgcmV0dXJuIHhcclxuICAgICAgICB9KSxcclxuICAgICAgICBmaWx0ZXIoKHg6IElRdWVyeUxpc3RSZXF1ZXN0KSA9PiAhIXggJiYgLyohIXguc29ydCAmJiAqLyAhIXgucGFnaW5hdGlvbiksXHJcbiAgICAgICAgZmlsdGVyKChfKSA9PiAhdGhpcy5wYXVzZVN1YnNjdGlwdGlvbiksXHJcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXYsIGN1cnIpID0+IHtcclxuICAgICAgICAgIC8qIFNUQVJUOiBBc3NpbWlsYXRpb24gbnVsbCBhbmQgbm90LWV4aXN0aW5nIHByb3BlcnR5ICovXHJcbiAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgbGFuZzogc3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgZ2VuZXJhbFNlYXJjaD86IElHZW5lcmFsU2VhcmNoO1xyXG4gICAgICAgICAgICAgICAgc29ydD86IElTb3J0SXRlbVtdO1xyXG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbj86IElQYWdpbmF0aW9uO1xyXG4gICAgICAgICAgICAgICAgZmlsdGVyPzogYW55O1xyXG4gICAgICAgICAgICAgICAgZmlsdGVyT3BlcmF0b3JzPzogSUZpbHRlck9wZXJhdG9yW107XHJcbiAgICAgICAgICAgICAgICBpbk9wZXJhdG9ycz86IElJbk9wZXJhdG9yW107XHJcbiAgICAgICAgICAgICAgICBzZWFyY2g/OiBJU2VhcmNoSXRlbVtdO1xyXG4gICAgICAgICAgICAgICAgaWQ/OiBudW1iZXIgfCBzdHJpbmcgfCBudWxsLFxyXG4gICAgICAgICAgICAgICAgZm9yY2VSZWxvYWRpbmdGbGFnPzogYm9vbGVhbjtcclxuICAgICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgICAvL2dlbmVyYWxTZWFyY2hcclxuICAgICAgICAgIGlmICghISFwcmV2LmdlbmVyYWxTZWFyY2g/LnNlYXJjaEZvcikgcHJldi5nZW5lcmFsU2VhcmNoID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgaWYgKCEhIWN1cnIuZ2VuZXJhbFNlYXJjaD8uc2VhcmNoRm9yKSBjdXJyLmdlbmVyYWxTZWFyY2ggPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgICAgLy8gc29ydFxyXG4gICAgICAgICAgaWYgKCEhcHJldi5zb3J0KSB7XHJcbiAgICAgICAgICAgIGlmIChwcmV2LnNvcnQubGVuZ3RoID09PSAwKSBwcmV2LnNvcnQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoISFjdXJyLnNvcnQpIHtcclxuICAgICAgICAgICAgaWYgKGN1cnIuc29ydC5sZW5ndGggPT09IDApIGN1cnIuc29ydCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBzZWFyY2hcclxuICAgICAgICAgIGlmICghIXByZXYuc2VhcmNoKSB7XHJcbiAgICAgICAgICAgIGlmIChwcmV2LnNlYXJjaC5sZW5ndGggPT09IDApIHByZXYuc2VhcmNoID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCEhY3Vyci5zZWFyY2gpIHtcclxuICAgICAgICAgICAgaWYgKGN1cnIuc2VhcmNoLmxlbmd0aCA9PT0gMCkgY3Vyci5zZWFyY2ggPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gaWRcclxuICAgICAgICAgIGlmICghISFwcmV2LmlkKSBwcmV2LmlkID0gbnVsbDtcclxuICAgICAgICAgIGlmICghISFjdXJyLmlkKSBjdXJyLmlkID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAvKiBFTkQ6IEFzc2ltaWxhdGlvbiBudWxsIGFuZCBub3QtZXhpc3RpbmcgcHJvcGVydHkgKi9cclxuXHJcbiAgICAgICAgICBjb25zdCBjb25kaXRpb24gPSBKU09OLnN0cmluZ2lmeShwcmV2KSA9PT0gSlNPTi5zdHJpbmdpZnkoY3Vycik7XHJcblxyXG4gICAgICAgICAgaWYgKCEhIWNvbmRpdGlvbikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmdyb3VwKCdDT01QQVJJU09OJyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdwcmV2JywgcHJldik7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdjdXJyJywgY3Vycik7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdjb25kaXRpb24nLCBjb25kaXRpb24pO1xyXG4gICAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gY29uZGl0aW9uO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICAvKiBTVEFSVDogdXNlIHN3aXRjaE1hcCBmb3IgY2FuY2VsbGF0aW9uXHJcbiAgICAgICAgICAqL1xyXG4gICAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5ncm91cCgnc3dpdGNoTWFwIHRyaWdnZXJlZCcpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJ4LmlkID0gXCIsIHguaWQpXHJcbiAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgY29uc3QgdXJsID0gdGhpcy5hcGlEZWZpbml0aW9uLnF1ZXJ5TGlzdFJlbGF0aXZlUGF0aCArIFwiP2NvbXB1dGluZ1dpdGhMb2NhbFRpbWVab25lPXRydWVcIjtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UucXVlcnlMaXN0KHgsIHVybCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAvKlxyXG4gICAgICAgIC8qIEVORDogdXNlIHN3aXRjaE1hcCBmb3IgY2FuY2VsbGF0aW9uXHJcbiAgICAgICAgKi9cclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMucXVlcnlMaXN0U3Vic2NyaWJlKCk7XHJcblxyXG4gICAgICAvKiBFTkQ6IFN1YnNjcmlwdGlvbiBmb3IgbGlzdCAqL1xyXG4gICAgICAvL30pO1xyXG4gICAgfSlcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVzaXplSGVpZ2h0RmxhZyQubmV4dCghISF0aGlzLnJlc2l6ZUhlaWdodEZsYWckLnZhbHVlKSwgNTAwKVxyXG5cclxuICAgIC8qKiBFTkQgc2V0VGltZW91dCovXHJcbiAgfVxyXG5cclxuICBvblBhcmFtS2l0VmFsdWVDaGFuZ2UoZGF0YTogSUNvcmVDb21tb25QYXJhbUtpdEV2ZW50RW1pdHRlckRhdGEpOiB2b2lkIHtcclxuICAgIHN3aXRjaCAoZGF0YS5maWVsZCkge1xyXG4gICAgICBjYXNlICdvcmdJZHMnOlxyXG4gICAgICAgIGNvbnN0IG5ld09yZ0luT3BlcmF0b3JzOiBJSW5PcGVyYXRvcltdID0gSlNPTi5wYXJzZShcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuaW5PcGVyYXRvcnMkLnZhbHVlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgaW5PcmdmaWx0ZXIgPSBuZXdPcmdJbk9wZXJhdG9ycy5maWx0ZXIoXHJcbiAgICAgICAgICAoeCkgPT4geC5maWVsZCA9PT0gJ29yZ0lkJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGluT3JnZmlsdGVyLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgaW5PcmdmaWx0ZXJbMF0udmFsdWVzID0gZGF0YS52YWx1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGluT3JnZmlsdGVyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgbmV3T3JnSW5PcGVyYXRvcnMucHVzaCh7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnb3JnSWQnLFxyXG4gICAgICAgICAgICB2YWx1ZXM6IGRhdGEudmFsdWUsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIGBJbk9wZXJhdG9ycyBlcnJvciBmb3IgJHtkYXRhLmZpZWxkfTogZmllbGQgbmFtZSBpcyBub3QgdW5pcXVlIGluIHRoZSBhcnJheWBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaW5PcGVyYXRvcnMkLm5leHQobmV3T3JnSW5PcGVyYXRvcnMpKVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZ2VuZXJhbFNlYXJjaCc6XHJcbiAgICAgICAgdGhpcy5nZW5lcmFsU2VhcmNoJC5uZXh0KGRhdGEudmFsdWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdkYXRlRnJvbSc6XHJcbiAgICAgICAgY29uc3QgbmV3RnJvbUZpbHRlck9wZXJhdG9yczogSUZpbHRlck9wZXJhdG9yW10gPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5maWx0ZXJPcGVyYXRvcnMkLnZhbHVlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyRnJvbSA9IG5ld0Zyb21GaWx0ZXJPcGVyYXRvcnMuZmlsdGVyKFxyXG4gICAgICAgICAgKHgpID0+XHJcbiAgICAgICAgICAgIHguZmllbGQgPT09IHRoaXMuZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3IgJiZcclxuICAgICAgICAgICAgeC5vcGVyYXRvciA9PT0gRW51bUZpbHRlck9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGZpbHRlckZyb20ubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICBpZiAoISFkYXRhLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGZpbHRlckZyb21bMF0uZGF0ZVRpbWVWYWx1ZSA9IG5ldyBEYXRlKFxyXG4gICAgICAgICAgICAgIChkYXRhLnZhbHVlIGFzIERhdGUpLnNldEhvdXJzKDAsIDAsIDAsIDApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmaWx0ZXJGcm9tWzBdLmRhdGVUaW1lVmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyRnJvbS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIGlmICghIWRhdGEudmFsdWUpIHtcclxuICAgICAgICAgICAgbmV3RnJvbUZpbHRlck9wZXJhdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgICBmaWVsZDogdGhpcy5kYXRlUGVyaW9kQ29tcGFyaXNvbkZvcixcclxuICAgICAgICAgICAgICBvcGVyYXRvcjogRW51bUZpbHRlck9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTCxcclxuICAgICAgICAgICAgICBkYXRlVGltZVZhbHVlOiBuZXcgRGF0ZShcclxuICAgICAgICAgICAgICAgIChkYXRhLnZhbHVlIGFzIERhdGUpLnNldEhvdXJzKDAsIDAsIDAsIDApXHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICBgRmlsdGVyT3BlcmF0b3JzIGVycm9yIGZvciAke2RhdGEuZmllbGR9OiBjb21iaW5hdGlvbiBvZiBmaWVsZCBuYW1lIGFuZCBvcGVyYXRvciBuYW1lIGlzIG5vdCB1bmlxdWUgaW4gdGhlIGFycmF5YFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmlsdGVyT3BlcmF0b3JzJC5uZXh0KG5ld0Zyb21GaWx0ZXJPcGVyYXRvcnMpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZGF0ZVRvJzpcclxuICAgICAgICBjb25zdCBuZXdUb0ZpbHRlck9wZXJhdG9yczogSUZpbHRlck9wZXJhdG9yW10gPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5maWx0ZXJPcGVyYXRvcnMkLnZhbHVlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyVG8gPSBuZXdUb0ZpbHRlck9wZXJhdG9ycy5maWx0ZXIoXHJcbiAgICAgICAgICAoeCkgPT5cclxuICAgICAgICAgICAgeC5maWVsZCA9PT0gdGhpcy5kYXRlUGVyaW9kQ29tcGFyaXNvbkZvciAmJlxyXG4gICAgICAgICAgICB4Lm9wZXJhdG9yID09PSBFbnVtRmlsdGVyT3BlcmF0b3IuTEVTU19USEFOX09SX0VRVUFMXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoZmlsdGVyVG8ubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICBpZiAoISFkYXRhLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGZpbHRlclRvWzBdLmRhdGVUaW1lVmFsdWUgPSBuZXcgRGF0ZShcclxuICAgICAgICAgICAgICAoZGF0YS52YWx1ZSBhcyBEYXRlKS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmaWx0ZXJUb1swXS5kYXRlVGltZVZhbHVlID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlclRvLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgaWYgKCEhZGF0YS52YWx1ZSkge1xyXG4gICAgICAgICAgICBuZXdUb0ZpbHRlck9wZXJhdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgICBmaWVsZDogdGhpcy5kYXRlUGVyaW9kQ29tcGFyaXNvbkZvcixcclxuICAgICAgICAgICAgICBvcGVyYXRvcjogRW51bUZpbHRlck9wZXJhdG9yLkxFU1NfVEhBTl9PUl9FUVVBTCxcclxuICAgICAgICAgICAgICBkYXRlVGltZVZhbHVlOiBuZXcgRGF0ZShcclxuICAgICAgICAgICAgICAgIChkYXRhLnZhbHVlIGFzIERhdGUpLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSlcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIGBGaWx0ZXJPcGVyYXRvcnMgZXJyb3IgZm9yICR7ZGF0YS5maWVsZH06IGNvbWJpbmF0aW9uIG9mIGZpZWxkIG5hbWUgYW5kIG9wZXJhdG9yIG5hbWUgaXMgbm90IHVuaXF1ZSBpbiB0aGUgYXJyYXlgXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5maWx0ZXJPcGVyYXRvcnMkLm5leHQobmV3VG9GaWx0ZXJPcGVyYXRvcnMpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnc3RhdHVzSWRzJzpcclxuICAgICAgICBjb25zdCBuZXdJbk9wZXJhdG9yczogSUluT3BlcmF0b3JbXSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmluT3BlcmF0b3JzJC52YWx1ZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGluZmlsdGVyID0gbmV3SW5PcGVyYXRvcnMuZmlsdGVyKFxyXG4gICAgICAgICAgKHgpID0+IHguZmllbGQgPT09IHRoaXMuc3RhdHVzSW5jbHVzaW9uRm9yXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoaW5maWx0ZXIubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICBpbmZpbHRlclswXS52YWx1ZXMgPSBkYXRhLnZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaW5maWx0ZXIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICBuZXdJbk9wZXJhdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgZmllbGQ6IHRoaXMuc3RhdHVzSW5jbHVzaW9uRm9yLFxyXG4gICAgICAgICAgICB2YWx1ZXM6IGRhdGEudmFsdWUsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIGBJbk9wZXJhdG9ycyBlcnJvciBmb3IgJHtkYXRhLmZpZWxkfTogZmllbGQgbmFtZSBpcyBub3QgdW5pcXVlIGluIHRoZSBhcnJheWBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaW5PcGVyYXRvcnMkLm5leHQobmV3SW5PcGVyYXRvcnMpKVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydFRvRXhjZWwoKTogdm9pZCB7XHJcbiAgICAvKiBQaMawxqFuZyBwaMOhcCB4deG6pXQgQ1NWICovXHJcbiAgICAvKiBD4bqnbiB0aGF5IGLhurFuZyB4deG6pXQgRVhDRUwgYuG6sW5nIEJhY2tlbmQgKi9cclxuICAgIC8qXHJcbiAgICBjb25zdCBjc3ZEYXRhOiBhbnlbXVtdID0gW107XHJcblxyXG4gICAgbGV0IHJvdzE6IGFueVtdID0gW107XHJcbiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKCh4KSA9PiB4LmZpZWxkICE9ICdpZCcpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5jb2x1bW5zKVxyXG4gICAgdGhpcy5jb2x1bW5zLm1hcCgoeCkgPT4ge1xyXG4gICAgICByb3cxLnB1c2godGhpcy5tbHMudHJhbnMoeC5jYXB0aW9uKSk7XHJcbiAgICB9KTtcclxuICAgIGNzdkRhdGEucHVzaChyb3cxKTtcclxuXHJcbiAgICB0aGlzLmxpc3QubWFwKChyb3csIGluZGV4KSA9PiB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRSb3c6IGFueVtdID0gW107XHJcbiAgICAgIHRoaXMuY29sdW1ucy5tYXAoKGNvbHVtbikgPT4ge1xyXG4gICAgICAgIGlmIChjb2x1bW4uZmllbGQgIT0gJ2lkJykge1xyXG4gICAgICAgICAgbGV0IGN1cnJlbnRDZWxsID0gcm93W2NvbHVtbi5maWVsZF07XHJcbiAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRDZWxsPy5yZXBsYWNlQWxsID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRDZWxsID0gY3VycmVudENlbGwucmVwbGFjZUFsbCgnLCcsICc7Jyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjdXJyZW50Um93LnB1c2goY3VycmVudENlbGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjc3ZEYXRhLnB1c2goY3VycmVudFJvdyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgY3N2Q29udGVudCA9IGNzdkRhdGEubWFwKChlKSA9PiBlLmpvaW4oJywnKSkuam9pbignXFxuJyk7XHJcblxyXG4gICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBsaW5rLnNldEF0dHJpYnV0ZShcclxuICAgICAgJ2hyZWYnLFxyXG4gICAgICAnZGF0YTp0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04LCVFRiVCQiVCRicgKyBlbmNvZGVVUkkoY3N2Q29udGVudClcclxuICAgICk7XHJcbiAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCAnRXhwb3J0RXhlbC5jc3YnKTtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XHJcbiAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICAqL1xyXG4gICAgLypcclxuICAgIELhuq90IMSR4bqndSB4deG6pXQgRXhjZWwgYuG6sW5nIEJhY2tlbmRcclxuICAgICovXHJcblxyXG4gICAgLy8gVGh1IHRo4bqtcCBuaGnDqm4gbGnhu4d1XHJcblxyXG4gICAgaWYgKCF0aGlzLmlubmVyQm9keUNvdW50JC52YWx1ZSkge1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKHRoaXMubWxzLnRyYW5zKCdYTFNYX05PX1JFU1VMVF9UT19FWFBPUlQnKSwgYWxlcnRPcHRpb25zKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHVybCA9IHRoaXMuYXBpRGVmaW5pdGlvbi5xdWVyeUxpc3RSZWxhdGl2ZVBhdGg7XHJcbiAgICBjb25zdCB4ID0gdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZTsgLy8gQ+G6p24gbG/huqFpIGLhu48gcGFnaW5nIGto4buPaSDEkeG7kWkgdMaw4bujbmcgbsOgeVxyXG5cclxuICAgIHgucGFnaW5hdGlvbiA9IHtcclxuICAgICAgc2tpcDogMCxcclxuICAgICAgdGFrZTogdGhpcy5pbm5lckJvZHlDb3VudCQudmFsdWVcclxuICAgIH1cclxuXHJcbiAgICBsZXQgYXBpU3RyZWFtJDogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gICAgLy8gTuG6v3UgY8OzIGTDsm5nIGThu68gbGnhu4d1IGNoZWNrZWQgdGjDrCBjaOG7iSB4deG6pXQgY8OhYyBkw7JuZyBuw6B5XHJcbiAgICBpZiAoISF0aGlzLnNlbGVjdGVkRGF0YS5sZW5ndGgpIHtcclxuICAgICAgYXBpU3RyZWFtJCA9IG5ldyBPYnNlcnZhYmxlPGFueT4ob2JzZXJ2ZXIgPT4ge1xyXG4gICAgICAgIG9ic2VydmVyLm5leHQoe1xyXG4gICAgICAgICAgb2s6IHRydWUsXHJcbiAgICAgICAgICBzdGF0dXM6IDIwMCxcclxuICAgICAgICAgIGJvZHk6IHtcclxuICAgICAgICAgICAgc3RhdHVzQ29kZTogMjAwLFxyXG4gICAgICAgICAgICBpbm5lckJvZHk6IHtcclxuICAgICAgICAgICAgICBsaXN0OiB0aGlzLnNlbGVjdGVkRGF0YVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBUcsOhaSBs4bqhaSwgeHXhuqV0IDEwMCUgc2F1IGtoaSDEkcOjIGzhu41jICh0b8OgbiBi4buZIGPDoWMgdHJhbmcpXHJcbiAgICAgIGFwaVN0cmVhbSQgPSB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UucXVlcnlMaXN0KHgsIHVybCk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyBJdCdzIHRpbWUgdG8gc3Vic2NyaWJlIGFwaVN0cmVhbSRcclxuICAgIHRoaXMucHJlZmV0Y2hMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICBhcGlTdHJlYW0kLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICB0aGlzLnByZWZldGNoTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgIC8vdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhgJHtib2R5LmlubmVyQm9keS5jb3VudH0gcm93cyBvZiBkYXRhIGZldGNoZWQuIEl0IGlzIHRpbWUgdG8gZG8gd2l0aCBiYWNrZW5kIGV4Y2VsIGV4cG9ydGluZ2AsIGFsZXJ0T3B0aW9ucylcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGFwaVBvaW50ID0gYXBpLlhMU1hfRVhQT1JUX0NPUkVfUEFHRV9MSVNUX1RPX0VYQ0VMO1xyXG4gICAgICAgICAgICBjb25zdCBmbGF0Q29sdW1uczogSUNvcmVUYWJsZUZsYXRDb2x1bW5JdGVtW10gPSBbXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1ucy5maWx0ZXIoeCA9PiAheC5oaWRkZW4pLm1hcChjID0+IHtcclxuICAgICAgICAgICAgICBmbGF0Q29sdW1ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBjYXB0aW9uOiBjLmNhcHRpb24sXHJcbiAgICAgICAgICAgICAgICAgIGZpZWxkOiBjLmZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICB0eXBlOiBjLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAgIHBpcGU6IGMucGlwZSxcclxuICAgICAgICAgICAgICAgICAgYWxpZ246IGMuYWxpZ24sXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBjLndpZHRoLFxyXG4gICAgICAgICAgICAgICAgICBoaWRkZW46IGMuaGlkZGVuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgICAgY29uc3QgZmxhdERhdGE6IGFueVtdID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgIGZsYXRDb2x1bW5zLm1hcChjID0+IGtleXMucHVzaChjLmZpZWxkKSk7XHJcbiAgICAgICAgICAgIGJvZHkuaW5uZXJCb2R5Lmxpc3QubWFwKChyb3c6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGU6IGFueSA9IHt9O1xyXG4gICAgICAgICAgICAgIGtleXMubWFwKGsgPT4ge1xyXG4gICAgICAgICAgICAgICAgZVtrXSA9IHJvd1trXTtcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIGZsYXREYXRhLnB1c2goZSk7XHJcbiAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvYmogPSB7XHJcbiAgICAgICAgICAgICAgY29sdW1uczogZmxhdENvbHVtbnMsXHJcbiAgICAgICAgICAgICAgZGF0YTogZmxhdERhdGFcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMuanNvblNlcnZpY2Uuc3RyaW5naWZ5KG9iaik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmxvbmdBcGlSdW5uaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0Q29yZVBhZ2VMaXN0R3JpZFRvRXhjZWxTdWJzY3JpcHRpb24gPSB0aGlzLmFwcFNlcnZpY2UuYmxvYlBvc3QoYXBpUG9pbnQsIHBheWxvYWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb25nQXBpUnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIGlmIChyZXNwb25zZS5ib2R5LnN0YXR1c0NvZGUgPT09IDQwMCkgcmV0dXJuXHJcblxyXG4gICAgICAgICAgICAgIGxldCBkb3dubG9hZExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAgICAgICAgICAgICBkb3dubG9hZExpbmsuaHJlZiA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtyZXNwb25zZS5ib2R5XSkpXHJcbiAgICAgICAgICAgICAgZG93bmxvYWRMaW5rLnNldEF0dHJpYnV0ZShcImRvd25sb2FkXCIsIHRoaXMubWxzLnRyYW5zKHRoaXMudGl0bGUpICsgXCIueGxzeFwiKTtcclxuICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvd25sb2FkTGluayk7XHJcbiAgICAgICAgICAgICAgZG93bmxvYWRMaW5rLmNsaWNrKCk7XHJcbiAgICAgICAgICAgIH0pXHJcblxyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApXHJcblxyXG4gIH1cclxuXHJcbiAgb25Db3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrKGU6IElDb3JlQnV0dG9uVk5TKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvcmVQYWdlSGVhZGVyQnV0dG9uQ2xpY2suZW1pdChlKTtcclxuXHJcbiAgICBzd2l0Y2ggKGUuY29kZSkge1xyXG5cclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0NSRUFURTpcclxuXHJcbiAgICAgICAgaWYgKCEhIXRoaXMuc2VsZlJlc29sdmVDb3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrKSB7XHJcblxyXG4gICAgICAgICAgdGhpcy5jb3JlUGFnZUVkaXRTZXJ2aWNlLmZyb21VcmwgPSB0aGlzLnJvdXRlci51cmw7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMubm9ybWFsTW9kZSkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgICAgW2J0b2EoJzAnKSwgeyBsaXN0SW5zdGFuY2U6IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgfV0sXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZS5wYXJlbnQsXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBvdXRsZXRzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29yZVBhZ2VMaXN0QXV4OiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICBidG9hKCcwJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICB7IGxpc3RJbnN0YW5jZTogdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlciB9LFxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRURJVDpcclxuICAgICAgICBpZiAoISEhdGhpcy5zZWxmUmVzb2x2ZUNvcmVQYWdlSGVhZGVyQnV0dG9uQ2xpY2spIHtcclxuXHJcbiAgICAgICAgICB0aGlzLmNvcmVQYWdlRWRpdFNlcnZpY2UuZnJvbVVybCA9IHRoaXMucm91dGVyLnVybDtcclxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IodGhpcy5tbHMudHJhbnMoJ1NFTEVDVF9PTkxZX09ORV9SRUNPUkRfVE9fRURJVCcpLCBhbGVydE9wdGlvbnMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCEhdGhpcy5ub3JtYWxNb2RlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgICAgICAgIFtidG9hKCcnICsgdGhpcy5zZWxlY3RlZElkc1swXSksIHsgbGlzdEluc3RhbmNlOiB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyIH1dLFxyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZS5wYXJlbnQsXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgb3V0bGV0czoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JlUGFnZUxpc3RBdXg6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBidG9hKCcnICsgdGhpcy5zZWxlY3RlZElkc1swXSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsaXN0SW5zdGFuY2U6IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKHRoaXMubWxzLnRyYW5zKCdOT19TRUxFQ1RFRF9JRF9UT19FRElUJyksIGFsZXJ0T3B0aW9ucyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9BQ1RJVkFURTpcclxuICAgICAgICBpZiAoISF0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZWxlY3RlZElkc1swXSAhPT0gJ251bWJlcidcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKFxyXG4gICAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKFxyXG4gICAgICAgICAgICAgICAgRW51bVRyYW5zbGF0ZUtleS5DT1JFX1BBR0VfTElTVF9BQ1RJVkVfSURTX01FVEhPRF9TVVBPUlRTX09OTFlfTlVNQkVSX1RZUEVcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ05PX1NFTEVDVEVEX0lEX1RPX0FDVElWQVRFJyksXHJcbiAgICAgICAgICAgIGFsZXJ0T3B0aW9uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXF1ZXN0OiBJVG9nZ2xlQWN0aXZlSWRzUmVxdWVzdCA9IHtcclxuICAgICAgICAgIHZhbHVlVG9CaW5kOiB0cnVlLFxyXG4gICAgICAgICAgaWRzOiB0aGlzLnNlbGVjdGVkSWRzIGFzIG51bWJlcltdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgY29uZmlybUFjdGl2ZSA9IHdpbmRvdy5jb25maXJtKFxyXG4gICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ2NvbW1vbi5jb25maXJtLmRlbGV0ZS5hY3RpdmUucHJlZml4JykgK1xyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZElkcykgK1xyXG4gICAgICAgICAgJz8nXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoY29uZmlybUFjdGl2ZSkge1xyXG4gICAgICAgICAgaWYgKCEhdGhpcy5jcnVkLnRvZ2dsZUFjdGl2ZUlkcykge1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UucG9zdCh0aGlzLmNydWQudG9nZ2xlQWN0aXZlSWRzLCByZXF1ZXN0KVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwIHx8IHguYm9keS5zdGF0dXNDb2RlID09ICcyMDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQubmV4dChcclxuICAgICAgICAgICAgICAgICAgICAgICAgISEhdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5pZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS53YXJuKHRoaXMubWxzLnRyYW5zKEVudW1UcmFuc2xhdGVLZXkuTk9fQVBJX0VORF9QT0lOVF9QUk9WSURFRF9GT1JfQUNUSVZBVElPTiksIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfSU5BQ1RJVkFURTpcclxuXHJcbiAgICAgICAgaWYgKCEhdGhpcy5zZWxlY3RlZElkcy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2VsZWN0ZWRJZHNbMF0gIT09ICdudW1iZXInXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbyhcclxuICAgICAgICAgICAgICB0aGlzLm1scy50cmFucyhcclxuICAgICAgICAgICAgICAgIEVudW1UcmFuc2xhdGVLZXkuQ09SRV9QQUdFX0xJU1RfSU5BQ1RJVkVfSURTX01FVEhPRF9TVVBPUlRTX09OTFlfTlVNQkVSX1RZUEVcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ05PX1NFTEVDVEVEX0lEX1RPX0lOQUNUSVZBVEUnKSxcclxuICAgICAgICAgICAgYWxlcnRPcHRpb25zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IElUb2dnbGVBY3RpdmVJZHNSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgdmFsdWVUb0JpbmQ6IGZhbHNlLFxyXG4gICAgICAgICAgaWRzOiB0aGlzLnNlbGVjdGVkSWRzIGFzIG51bWJlcltdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgY29uZmlybUluYWN0aXZlID0gd2luZG93LmNvbmZpcm0oXHJcbiAgICAgICAgICB0aGlzLm1scy50cmFucygnY29tbW9uLmNvbmZpcm0uZGVsZXRlLmluYWN0aXZlLnByZWZpeCcpICtcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRJZHMpICtcclxuICAgICAgICAgICc/J1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGNvbmZpcm1JbmFjdGl2ZSkge1xyXG4gICAgICAgICAgaWYgKCEhdGhpcy5jcnVkLnRvZ2dsZUFjdGl2ZUlkcykge1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UucG9zdCh0aGlzLmNydWQudG9nZ2xlQWN0aXZlSWRzLCBwYXlsb2FkKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwIHx8IHguYm9keS5zdGF0dXNDb2RlID09ICcyMDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQubmV4dChcclxuICAgICAgICAgICAgICAgICAgICAgICAgISEhdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5pZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS53YXJuKHRoaXMubWxzLnRyYW5zKEVudW1UcmFuc2xhdGVLZXkuTk9fQVBJX0VORF9QT0lOVF9QUk9WSURFRF9GT1JfQUNUSVZBVElPTiksIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfREVMRVRFOlxyXG4gICAgICAgIGlmICghIXRoaXMuc2VsZWN0ZWRJZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnNlbGVjdGVkSWRzWzBdICE9PSAnbnVtYmVyJyAmJlxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZWxlY3RlZElkc1swXSAhPT0gJ3N0cmluZydcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKFxyXG4gICAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKFxyXG4gICAgICAgICAgICAgICAgJ0NPUkVfUEFHRV9MSVNUX0RFTEVURV9JRFNfTUVUSE9EX1NVUE9SVFNfT05MWV9OVU1CRVJfQU5EX1NUUklOR19UWVBFUydcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ05PX1NFTEVDVEVEX0lEX1RPX0RFTEVURScpLFxyXG4gICAgICAgICAgICBhbGVydE9wdGlvbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghIXRoaXMuZGVsZXRlVmFsaWRhdGVGbikge1xyXG5cclxuICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZDogYm9vbGVhbiA9IHRoaXMuZGVsZXRlVmFsaWRhdGVGbih0aGlzLnNlbGVjdGVkRGF0YSk7XHJcbiAgICAgICAgICBpZiAoISEhdmFsaWRhdGVkKSByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpb24gPSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RFTEVURVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50aXRsZSQubmV4dChFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfRElBTE9HX1NFUlZJQ0VfQ09ORklSTUFUSU9OKVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5va0J1dHRvblRleHQkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0NPTkZJUk1fRElBTE9HX0JVVFRPTl9DT05GSVJNKVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jYW5jZWxCdXR0b25UZXh0JC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9DT05GSVJNX0RJQUxPR19CVVRUT05fQ0FOQ0VMKVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93Q2FuY2VsT25seSQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJ1c3kgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5ib2R5JC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9ESUFMT0dfU0VSVklDRV9BUkVfWU9VX1NVUkVfVE9fREVMRVRFKTtcclxuICAgICAgICBsZXQgbGlzdERlbGV0ZUlkczogYW55W10gPSBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YS5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgICAgbGlzdERlbGV0ZUlkcy5wdXNoKHhbdGhpcy5jb2x1bW5zWzFdLmZpZWxkXSlcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZURpYWxvZ0luZm9ybWF0aW9uTGluZXMpIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5pbmZvcm1hdGlvbkxpbmVzJC5uZXh0KGxpc3REZWxldGVJZHMpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5pbmZvcm1hdGlvbkxpbmVzJC5uZXh0KFtdKVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0NvbmZpcm1EaWFsb2ckLm5leHQodHJ1ZSk7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfVU5BUFBST1ZFOlxyXG4gICAgICAgIGlmICghIXRoaXMuc2VsZWN0ZWRJZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnNlbGVjdGVkSWRzWzBdICE9PSAnbnVtYmVyJyAmJlxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZWxlY3RlZElkc1swXSAhPT0gJ3N0cmluZydcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKFxyXG4gICAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKFxyXG4gICAgICAgICAgICAgICAgJ0NPUkVfUEFHRV9MSVNUX0RFTEVURV9JRFNfTUVUSE9EX1NVUE9SVFNfT05MWV9OVU1CRVJfQU5EX1NUUklOR19UWVBFUydcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ05PX1NFTEVDVEVEX0lEX1RPX0RFTEVURScpLFxyXG4gICAgICAgICAgICBhbGVydE9wdGlvbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghIXRoaXMuZGVsZXRlVmFsaWRhdGVGbikge1xyXG5cclxuICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZDogYm9vbGVhbiA9IHRoaXMuZGVsZXRlVmFsaWRhdGVGbih0aGlzLnNlbGVjdGVkRGF0YSk7XHJcbiAgICAgICAgICBpZiAoISEhdmFsaWRhdGVkKSByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpb24gPSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1VOQVBQUk9WRVxyXG4gICAgICAgIC8vIHRoaXMuZGlhbG9nU2VydmljZS50aXRsZSQubmV4dChFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfRElBTE9HX1NFUlZJQ0VfQ09ORklSTUFUSU9OKVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5va0J1dHRvblRleHQkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0NPTkZJUk1fRElBTE9HX0JVVFRPTl9DT05GSVJNKVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jYW5jZWxCdXR0b25UZXh0JC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9DT05GSVJNX0RJQUxPR19CVVRUT05fQ0FOQ0VMKVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93Q2FuY2VsT25seSQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJ1c3kgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5ib2R5JC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9ESUFMT0dfU0VSVklDRV9BUkVfWU9VX1VOQVBQUk9WRV9JTlBVVF9SRUFTT04pO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93aW5nVXAkLm5leHQodHJ1ZSlcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0NvbmZpcm1EaWFsb2ckLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9BUFBST1ZFOlxyXG4gICAgICAgIGlmICghIXRoaXMuc2VsZWN0ZWRJZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnNlbGVjdGVkSWRzWzBdICE9PSAnbnVtYmVyJ1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8oXHJcbiAgICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoXHJcbiAgICAgICAgICAgICAgICBFbnVtVHJhbnNsYXRlS2V5LkNPUkVfUEFHRV9MSVNUX0FDVElWRV9JRFNfTUVUSE9EX1NVUE9SVFNfT05MWV9OVU1CRVJfVFlQRVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICB0aGlzLm1scy50cmFucygnTk9fU0VMRUNURURfSURfVE9fQVBQUk9WRScpLFxyXG4gICAgICAgICAgICBhbGVydE9wdGlvbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVxdWVzdEFwcHJvdmU6IElUb2dnbGVBcHByb3ZlSWRzUmVxdWVzdCA9IHtcclxuICAgICAgICAgIHZhbHVlVG9CaW5kOiB0cnVlLFxyXG4gICAgICAgICAgaWRzOiB0aGlzLnNlbGVjdGVkSWRzIGFzIG51bWJlcltdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgY29uZmlybUFwcHJvdmUgPSB3aW5kb3cuY29uZmlybShcclxuICAgICAgICAgIHRoaXMubWxzLnRyYW5zKCdjb21tb24uY29uZmlybS5hcHByb3ZlLnByZWZpeCcpICtcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRJZHMpICtcclxuICAgICAgICAgICc/J1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGNvbmZpcm1BcHByb3ZlKSB7XHJcbiAgICAgICAgICBpZiAoISF0aGlzLmNydWQudG9nZ2xlQXBwcm92ZUlkcykge1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UucG9zdCh0aGlzLmNydWQudG9nZ2xlQXBwcm92ZUlkcywgcmVxdWVzdEFwcHJvdmUpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDAgfHwgeC5ib2R5LnN0YXR1c0NvZGUgPT0gJzIwMCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9yY2VSZWxvYWRpbmdGbGFnJC5uZXh0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAhISF0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQudmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmlkcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLndhcm4odGhpcy5tbHMudHJhbnMoRW51bVRyYW5zbGF0ZUtleS5OT19BUElfRU5EX1BPSU5UX1BST1ZJREVEX0ZPUl9BQ1RJVkFUSU9OKSwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9QRU5ESU5HX0FQUFJPVkU6XHJcbiAgICAgICAgaWYgKCEhdGhpcy5zZWxlY3RlZElkcy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2VsZWN0ZWRJZHNbMF0gIT09ICdudW1iZXInXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbyhcclxuICAgICAgICAgICAgICB0aGlzLm1scy50cmFucyhcclxuICAgICAgICAgICAgICAgIEVudW1UcmFuc2xhdGVLZXkuQ09SRV9QQUdFX0xJU1RfQUNUSVZFX0lEU19NRVRIT0RfU1VQT1JUU19PTkxZX05VTUJFUl9UWVBFXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKCdOT19TRUxFQ1RFRF9JRF9UT19QRU5ESU5HX0FQUFJPVkUnKSxcclxuICAgICAgICAgICAgYWxlcnRPcHRpb25zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlcXVlc3RQZW5kaW5nQXBwcm92ZTogSVRvZ2dsZUFwcHJvdmVJZHNSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgdmFsdWVUb0JpbmQ6IGZhbHNlLFxyXG4gICAgICAgICAgaWRzOiB0aGlzLnNlbGVjdGVkSWRzIGFzIG51bWJlcltdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgY29uZmlybVBlbmRpbmdBcHByb3ZlID0gd2luZG93LmNvbmZpcm0oXHJcbiAgICAgICAgICB0aGlzLm1scy50cmFucygnY29tbW9uLmNvbmZpcm0ucGVuZGluZy5hcHByb3ZlLnByZWZpeCcpICtcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRJZHMpICtcclxuICAgICAgICAgICc/J1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGNvbmZpcm1QZW5kaW5nQXBwcm92ZSkge1xyXG4gICAgICAgICAgaWYgKCEhdGhpcy5jcnVkLnRvZ2dsZUFwcHJvdmVJZHMpIHtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLnBvc3QodGhpcy5jcnVkLnRvZ2dsZUFwcHJvdmVJZHMsIHJlcXVlc3RQZW5kaW5nQXBwcm92ZSlcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCB8fCB4LmJvZHkuc3RhdHVzQ29kZSA9PSAnMjAwJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLm5leHQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICEhIXRoaXMuZm9yY2VSZWxvYWRpbmdGbGFnJC52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuaWRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uud2Fybih0aGlzLm1scy50cmFucyhFbnVtVHJhbnNsYXRlS2V5Lk5PX0FQSV9FTkRfUE9JTlRfUFJPVklERURfRk9SX0FDVElWQVRJT04pLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0VYUE9SVEVYRUw6XHJcblxyXG4gICAgICAgIHRoaXMuZXhwb3J0VG9FeGNlbCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRE9XTkxPQUQ6XHJcbiAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJIRUFERVJfRE9XTkxPQUQgY2xpY2tlZFwiLCBub3cpO1xyXG4gICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKGBpbXBvcnQtc2FsYXJ5LWJhY2tkYXRlYCkhIDwgMFxyXG4gICAgICAgICAgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgc2FsYXJ5LWltcG9ydGApISA8IDBcclxuICAgICAgICAgICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoYGltcG9ydC1hZGRgKSEgPCAwXHJcbiAgICAgICAgICAmJiB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKGBpbXBvcnQtbW9udGhseS10YXhgKSEgPCAwXHJcbiAgICAgICAgICAmJiB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKGBzaGlmdHNvcnRgKSEgPCAwXHJcbiAgICAgICAgICAmJiB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKGBkZWNsYXJlc3VucGVyYCkhIDwgMFxyXG4gICAgICAgICAgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgcmVnaXN0ZXJsZWF2ZWApISA8IDBcclxuICAgICAgICAgICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoYG92ZXJ0aW1lYCkhIDwgMFxyXG4gICAgICAgICAgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgaW1wb3J0LXRheC1hbm51YWxgKSEgPCAwXHJcbiAgICAgICAgICAmJiB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKGBjbXMvcHJvZmlsZS9saXN0L2V2YWx1YXRlYCkhIDwgMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5jbGlja0dlbmVyYXRlVGVtcGxhdGUkLm5leHQobm93KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9VUExPQUQ6XHJcbiAgICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoYGNtcy9wcm9maWxlL2xpc3QvZXZhbHVhdGVgKSA+PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLmNvcmVQYWdlSGVhZGVyQnV0dG9uQ2xpY2suZW1pdChlKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmJyb3dzZUZpbGVJbnB1dCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0xPQ0s6XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9VTkxPQ0s6XHJcbiAgICAgICAgdGhpcy5jb3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrLmVtaXQoZSlcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zb2xlLmxvZyhlLmNvZGUpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGVkSWRzQ2hhbmdlKGU6IHN0cmluZ1tdIHwgbnVtYmVyW10pIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSBlO1xyXG4gICAgdGhpcy5zZWxlY3RlZElkc0NoYW5nZS5lbWl0KGUpO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RlZERhdGFDaGFuZ2UoZTogYW55W10pIHtcclxuICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gZTtcclxuICAgIHRoaXMuc2VsZWN0ZWREYXRhQ2hhbmdlLmVtaXQoZSk7XHJcbiAgICBpZiAoISFlLmxlbmd0aCkge1xyXG4gICAgICBpZiAoZS5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgdGhpcy5idXR0b25Hcm91cFN0YXR1cz8ubXVzdEJlSGlkZGVuJC5uZXh0KFtcclxuICAgICAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRURJVCxcclxuICAgICAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfTElRVUlEQVRFX0NPTlRSQUNUXHJcbiAgICAgICAgXSlcclxuICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgaWYgKCEhZVswXS5pc0xvY2spIHtcclxuICAgICAgICAgIHRoaXMuYnV0dG9uR3JvdXBTdGF0dXM/Lm11c3RCZUhpZGRlbiQubmV4dChbRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9MT0NLXSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5idXR0b25Hcm91cFN0YXR1cz8ubXVzdEJlSGlkZGVuJC5uZXh0KFtFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1VOTE9DS10pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5idXR0b25Hcm91cFN0YXR1cz8ubXVzdEJlSGlkZGVuJC5uZXh0KEVNUFRZX1NFTEVDVElPTl9ISURERU5fQlVUVE9OKVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG9uQ29sdW1uQ2FwdGlvbkNsaWNrKGU6IElDb3JlVGFibGVDb2x1bW5JdGVtKSB7XHJcbiAgICBjb25zdCBuZXdTb3J0OiBJU29ydEl0ZW1bXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zb3J0JC52YWx1ZSkpO1xyXG4gICAgbmV3U29ydC5tYXAoKGMpID0+IHtcclxuICAgICAgaWYgKGMuZmllbGQgPT09IGUuZmllbGQpIHtcclxuICAgICAgICBpZiAoYy5zb3J0RGlyZWN0aW9uID09PSBFbnVtU29ydERpcmVjdGlvbi5OT05FKSB7XHJcbiAgICAgICAgICBjLnNvcnREaXJlY3Rpb24gPSBFbnVtU29ydERpcmVjdGlvbi5BU0M7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjLnNvcnREaXJlY3Rpb24gPT09IEVudW1Tb3J0RGlyZWN0aW9uLkFTQykge1xyXG4gICAgICAgICAgYy5zb3J0RGlyZWN0aW9uID0gRW51bVNvcnREaXJlY3Rpb24uREVTQztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYy5zb3J0RGlyZWN0aW9uID0gRW51bVNvcnREaXJlY3Rpb24uTk9ORTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYy5zb3J0RGlyZWN0aW9uID0gRW51bVNvcnREaXJlY3Rpb24uTk9ORTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNvcnQkLm5leHQobmV3U29ydCk7XHJcbiAgfVxyXG5cclxuICBpbnB1dEZpbGUgPSBhc3luYyAoZTogYW55KSA9PiB7XHJcbiAgICBjb25zb2xlLmxvZyhcImlucHV0RmlsZSBlXCIsIGUpXHJcbiAgICBjb25zdCBmaWxlcyA9IGUudGFyZ2V0LmZpbGVzO1xyXG4gICAgY29uc3QgZmlsZSA9IGZpbGVzWzBdO1xyXG4gICAgbGV0IGZpbGVOYW1lID0gZmlsZS5uYW1lO1xyXG5cclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZmlsZV0pO1xyXG5cclxuICAgIGJsb2JUb0Jhc2U2NChibG9iKS50aGVuKChiYXNlNjQ6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLm9uSW5wdXRGaWxlQmFzZTY0RGF0YVJlYWR5LmVtaXQoYmFzZTY0KTtcclxuXHJcbiAgICAgIC8vIE7hur91IHRoYW0gc+G7kSBnZW5lcmF0ZVRlbXBsYXRlUmVxdWVzdCDEkcaw4bujYyB0cnV54buBbiB2w6BvXHJcbiAgICAgIC8vIEltcG9ydCBz4bq9IHRo4buxYyB0aGkgdGhlbyBxdXkgdHLDrG5oIENvcmVcclxuICAgICAgaWYgKHRoaXMuZ2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3QpIHtcclxuICAgICAgICBjb25zdCBpbXBvcnRYbHN4VG9EYlJlcXVlc3Q6IElJbXBvcnRYbHN4VG9EYlJlcXVlc3QgPSB7XHJcbiAgICAgICAgICBmaWxlTmFtZSxcclxuICAgICAgICAgIGV4Q29kZTogdGhpcy5nZW5lcmF0ZVRlbXBsYXRlUmVxdWVzdC5leENvZGUsXHJcbiAgICAgICAgICBiYXNlNjRTdHJpbmc6IGJhc2U2NFxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvbmdBcGlSdW5uaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5pbXBvcnRYbHN4VG9EYihpbXBvcnRYbHN4VG9EYlJlcXVlc3QpLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IE51bWJlcih0aGlzLmxvbmdUYXNrU2VydmljZS5kYXRhJC52YWx1ZT8ub3V0ZXJNZXNzYWdlKTtcclxuICAgICAgICAgICAgdGhpcy5sb25nQXBpUnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGRvd25sb2FkTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICAgIGRvd25sb2FkTGluay5ocmVmID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW3guYm9keV0pKVxyXG4gICAgICAgICAgICAgIGZpbGVOYW1lID0gZmlsZU5hbWUuc3BsaXQoXCIueGxzeFwiKVswXSArIFwiX3Byb2Nlc3NlZF9cIiArIG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgXCIueGxzeFwiO1xyXG4gICAgICAgICAgICAgIGRvd25sb2FkTGluay5zZXRBdHRyaWJ1dGUoXCJkb3dubG9hZFwiLCBmaWxlTmFtZSk7XHJcbiAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb3dubG9hZExpbmspO1xyXG4gICAgICAgICAgICAgIGRvd25sb2FkTGluay5jbGljaygpO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBpbXBvcnRQcmV2aWV3T3V0ZXJQYXJhbTogSVhsc3hJbXBvcnRPYmplY3QgPSB7XHJcbiAgICAgICAgICAgICAgICB4bHN4U2lkOiB0aGlzLmF1dGhTZXJ2aWNlLmRhdGEkLnZhbHVlPy5pZCEsXHJcbiAgICAgICAgICAgICAgICB4bHN4RXhDb2RlOiB0aGlzLmdlbmVyYXRlVGVtcGxhdGVSZXF1ZXN0LmV4Q29kZSxcclxuICAgICAgICAgICAgICAgIHhsc3hTZXNzaW9uOiBzZXNzaW9uXHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBpZiAoISEhdGhpcy5pbXBvcnRQcmV2aWV3UGF0aCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcIidpbXBvcnRQcmV2aWV3UGF0aCcgaW5wdXQgcHJvcGVydHkgd2FzIG1pc3NpbmchXCIsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBvdXRsZXRzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVQYWdlTGlzdEF1eDogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW1wb3J0UHJldmlld1BhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsaXN0SW5zdGFuY2U6IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsIHN0YXRlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaW1wb3J0UHJldmlld091dGVyUGFyYW1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgfSk7XHJcblxyXG5cclxuICB9O1xyXG5cclxuICBicm93c2VGaWxlSW5wdXQoKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyhcImJyb3dzZUZpbGVJbnB1dFwiKVxyXG4gICAgdGhpcy5maWxlSW1wb3J0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBudWxsO1xyXG4gICAgdGhpcy5maWxlSW1wb3J0Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICB9XHJcblxyXG4gIG9uUHJvZ3Jlc3NXaW5kb3dDbG9zZShfOiBhbnkpIHtcclxuICAgIHRoaXMubG9uZ0FwaVJ1bm5pbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuZXhwb3J0Q29yZVBhZ2VMaXN0R3JpZFRvRXhjZWxTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKClcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLm1hcCgoeCkgPT4geD8udW5zdWJzY3JpYmUoKSk7XHJcbiAgICBpZiAoISF0aGlzLnF1ZXJ5TGlzdFN1YnNjcmlwdGlvbikgdGhpcy5xdWVyeUxpc3RTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiAjY29udGFpbmVyIGNsYXNzPVwiY29yZS1wYWdlLWxpc3QtY29udGFpbmVyXCIgI2NvcmVQYWdlTGlzdENvbnRhaW5lciBbbmdTdHlsZV09XCJ7IGhlaWdodDogaGVpZ2h0ICsgJ3B4JyB9XCI+XHJcblxyXG4gICAgPGNvcmUtcGFnZS1oZWFkZXIgKm5nSWY9XCIhISFoaWRlSGVhZGVyXCIgW2luc3RhbmNlTnVtYmVyXT1cImNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyXCIgW3RpdGxlXT1cInRpdGxlXCIgKGJ1dHRvbkNsaWNrKT1cIm9uQ29yZVBhZ2VIZWFkZXJCdXR0b25DbGljaygkZXZlbnQpXCJcclxuICAgICAgICBbaGlkZUJ1dHRvbkdyb3VwXT1cIiEhc2Vla2VyTW9kZSB8fCAhIWhpZGVCdXR0b25Hcm91cFwiPjwvY29yZS1wYWdlLWhlYWRlcj5cclxuXHJcbiAgICA8aW5wdXQgI2ZpbGVJbXBvcnQgdHlwZT1cImZpbGVcIiBuYW1lPVwibmFtZVwiXHJcbiAgICAgICAgYWNjZXB0PVwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQsIGFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbFwiXHJcbiAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIChjaGFuZ2UpPSdpbnB1dEZpbGUoJGV2ZW50KScgLz5cclxuXHJcbiAgICA8IS0tXHJcbiAgICAgICAgS2hpIMSRw6MgdMOtbmggxJHGsOG7o2MgY2jDrW5oIHjDoWMgY2hp4buBdSBjYW8gY29tcG9zaXRpb25IZWlnaHQgY+G7p2EgY29yZS1jb21wb3NpdGlvblxyXG4gICAgICAgIEPhuqduIHTDrW5oIMSRxrDhu6NjIGNow61uaCB4w6FjIGNoaeG7gXUgY2FvIGNvcmVUYWJsZUhlaWdodCBj4bunYSBDb3JlVGFibGVcclxuICAgICAgICBO4bq/dSBwaOG6p24gdG9wIGPhu6dhIGNvbXBvc2l0aW9uIGPhu5EgxJHhu4tuaCAodsOtIGThu6Uga2hpIHPhu60gZOG7pW5nIENvcmVQYXJhbUtpdCkgdGjDrCBwaMOpcCB0cuG7qyDEkcahbiBnaeG6o25cclxuICAgICAgICBOaMawbmcgbuG6v3UgcGjhuqduIHRvcCDEkcaw4bujYyBjdXN0b21pemUsIHRhIHBo4bqjaSBz4butIGThu6VuZyBleHRyYU1hbnVhbE9mZnNldFxyXG4gICAgLS0+XHJcbiAgICA8Y29yZS1jb21wb3NpdGlvbiBcclxuICAgICAgICBbY29yZUNvbXBvc2l0aW9uSW5zdGFuY2VOdW1iZXJdPVwiY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXJcIiBcclxuICAgICAgICBbdG9wXT1cInRvcFBsYWNlXCIgXHJcbiAgICAgICAgW2xlZnRdPVwiISFoaWRlTGVmdD8gdW5kZWZpbmVkIDpsZWZ0XCIgXHJcbiAgICAgICAgW21haW5dPVwiY29yZVRhYmxlXCIgXHJcbiAgICAgICAgW2hlaWdodF09XCJjb21wb3NpdGlvbkhlaWdodFwiPlxyXG4gICAgPC9jb3JlLWNvbXBvc2l0aW9uPlxyXG5cclxuICAgIDxyb3V0ZXItb3V0bGV0IG5hbWU9XCJjb3JlUGFnZUxpc3RBdXhcIj48L3JvdXRlci1vdXRsZXQ+XHJcblxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjdG9wUGxhY2U+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEhc2hvd1BhcmFtS2l0XCI+XHJcbiAgICAgICAgPGNvcmUtY29tbW9uLXBhcmFtLWtpdCBbZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3JdPVwiZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3JcIlxyXG4gICAgICAgICAgICBbZW5hYmxlVGltZVpvbmVDb252ZXJ0ZXJGb3JEYXRlVGltZVBlcmlvZFBhcmFtZXRlcnNdPVwiZW5hYmxlVGltZVpvbmVDb252ZXJ0ZXJGb3JEYXRlVGltZVBlcmlvZFBhcmFtZXRlcnNcIlxyXG4gICAgICAgICAgICBbZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3JMYWJlbEtleV09XCJkYXRlUGVyaW9kQ29tcGFyaXNvbkZvckxhYmVsS2V5XCJcclxuICAgICAgICAgICAgW3N0YXR1c0luY2x1c2lvbkZvcl09XCJzdGF0dXNJbmNsdXNpb25Gb3JcIiBbc3RhdHVzSW5jbHVzaW9uRm9yTGFiZWxLZXldPVwic3RhdHVzSW5jbHVzaW9uRm9yTGFiZWxLZXlcIlxyXG4gICAgICAgICAgICBbc3RhdHVzT3B0aW9uc0FwaV09XCJzdGF0dXNPcHRpb25zQXBpXCJcclxuICAgICAgICAgICAgW3N0YXR1c09wdGlvbnMkXT1cInN0YXR1c09wdGlvbnMkXCJcclxuICAgICAgICAgICAgW3Nob3dPcmdQYXJhbV09XCJzaG93T3JnUGFyYW1cIlxyXG4gICAgICAgICAgICBbaGlkZUdlbmVyYWxTZWFyY2hdPVwiaGlkZUdlbmVyYWxTZWFyY2hcIlxyXG4gICAgICAgICAgICBbaGlkZURhdGVQZXJpb2RDb21wYXJpc29uXT1cImhpZGVEYXRlUGVyaW9kQ29tcGFyaXNvblwiIFxyXG4gICAgICAgICAgICBbaGlkZVN0YXR1c0luY2x1c2lvbl09XCJoaWRlU3RhdHVzSW5jbHVzaW9uXCJcclxuICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uUGFyYW1LaXRWYWx1ZUNoYW5nZSgkZXZlbnQpXCI+PC9jb3JlLWNvbW1vbi1wYXJhbS1raXQ+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidG9wXCI+XHJcblxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNjb3JlVGFibGU+XHJcblxyXG4gICAgPGRpdiBbY2xhc3Mub3BhY2l0eTBdPVwiISEhZ2VvbWV0cmljRG9uZVwiPlxyXG5cclxuICAgICAgICA8IS0tXHJcbiAgICAgICAgICAgIEtoaSDEkcOjIHTDrW5oIMSRxrDhu6NjIGNow61uaCB4w6FjIGNoaeG7gXUgY2FvIGNvbXBvc2l0aW9uSGVpZ2h0IGPhu6dhIGNvcmUtY29tcG9zaXRpb25cclxuICAgICAgICAgICAgQ+G6p24gdMOtbmggxJHGsOG7o2MgY2jDrW5oIHjDoWMgY2hp4buBdSBjYW8gY29yZVRhYmxlSGVpZ2h0IGPhu6dhIENvcmVUYWJsZVxyXG4gICAgICAgICAgICBO4bq/dSBwaOG6p24gdG9wIGPhu6dhIGNvbXBvc2l0aW9uIGPhu5EgxJHhu4tuaCAodsOtIGThu6Uga2hpIHPhu60gZOG7pW5nIENvcmVQYXJhbUtpdCkgdGjDrCBwaMOpcCB0cuG7qyDEkcahbiBnaeG6o25cclxuICAgICAgICAgICAgTmjGsG5nIG7hur91IHBo4bqnbiB0b3AgxJHGsOG7o2MgY3VzdG9taXplLCB0YSBwaOG6o2kgc+G7rSBk4bulbmcgZXh0cmFNYW51YWxPZmZzZXRcclxuXHJcbiAgICAgICAgICAgIEPhuqduIHTDrW5oIHRhYmxlSGVpZ2h0IG5oxrAgdGjhur8gbsOgbz9cclxuICAgICAgICAtLT5cclxuICAgICAgICA8Y29yZS10YWJsZSAjY29yZVRhYmxlQWxvbmUgd2lkdGg9XCIxMDAlXCIgW2hlaWdodF09XCJ0YWJsZUhlaWdodFwiIFtyb3dIZWlnaHRdPVwicm93SGVpZ2h0IHx8ICc0NnB4J1wiIFt3cmFwXT1cIndyYXBcIlxyXG4gICAgICAgICAgICBbY29sdW1uc109XCJjb2x1bW5zXCIgW2RhdGFdPVwibGlzdFwiIFtzaG93Q2hlY2tib3hdPVwiISEhaGlkZUNoZWNrXCIgaGVhZGVySGVpZ2h0PVwiNjBweFwiIFtzaG93VG9vbHNdPVwic2hvd0xpc3RJbmxpbmVUb29sc1wiXHJcbiAgICAgICAgICAgIFt0b29sc109XCJpbmxpbmVUb29sc1wiIChvblRvb2xDbGljayk9XCJvblRvb2xDbGljaygkZXZlbnQpXCIgKG9uUm93Q2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgKG9uUm93RG91YmxlQ2xpY2spPVwib25Sb3dEb3VibGVDbGljaygkZXZlbnQpXCIgKG9uU2VsZWN0ZWRJZHNDaGFuZ2UpPVwib25TZWxlY3RlZElkc0NoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKG9uU2VsZWN0ZWREYXRhQ2hhbmdlKT1cIm9uU2VsZWN0ZWREYXRhQ2hhbmdlKCRldmVudClcIiBbZnJvemVuXT1cImZyb3plbiB8fCAxXCJcclxuICAgICAgICAgICAgKG9uU2VhcmNoaW5nKT1cIm9uU2VhcmNoaW5nKCRldmVudClcIiAob25Db2x1bW5DYXB0aW9uQ2xpY2spPVwib25Db2x1bW5DYXB0aW9uQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIFtjb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcl09XCJjb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlclwiIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxyXG4gICAgICAgICAgICBbY29sdW1uU2VhcmNoRGVmYXVsdE9wZW5dPVwiY29sdW1uU2VhcmNoRGVmYXVsdE9wZW5cIiBbbGF6eUxvYWRpbmddPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIFtoZWFkZXJXcmFwXT1cImhlYWRlcldyYXBcIlxyXG4gICAgICAgICAgICBbaGVhZGVyRmlyc3RSb3dIZWlnaHRdPVwiaGVhZGVyRmlyc3RSb3dIZWlnaHRcIlxyXG4gICAgICAgICAgICBbbm9QYWRkaW5nQ2VsbF09XCJub1BhZGRpbmdDZWxsXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVIaWdobGlnaHRPbkNsaWNrXT1cImRpc2FibGVIaWdobGlnaHRPbkNsaWNrXCJcclxuICAgICAgICAgICAgPjwvY29yZS10YWJsZT5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleC1lbmQgcGFnaW5hdGlvbi13cmFwcGVyXCIgI3BhZ2luYXRpb25Db250YWluZXI+XHJcbiAgICAgICAgICAgIDxjb3JlLXBhZ2luYXRpb24tZnVsbCBbaGVpZ2h0XT1cInBhZ2luYXRpb25IZWlnaHRcIiBbY3VycmVudFBhZ2UkXT1cImN1cnJlbnRQYWdlJFwiIFtwYWdlU2l6ZSRdPVwicGFnZVNpemUkXCJcclxuICAgICAgICAgICAgICAgIFtwYWdlQ291bnRdPVwicGFnZUNvdW50XCIgW2lubmVyQm9keUNvdW50JF09XCJpbm5lckJvZHlDb3VudCRcIiBbcGFnaW5hdGlvbiRdPVwicGFnaW5hdGlvbiRcIlxyXG4gICAgICAgICAgICAgICAgW2xvYWRpbmddPVwibG9hZGluZ1wiIFtmaXhlZFBhZ2VTaXplXT1cImZpeGVkUGFnZVNpemVcIiBbYmFja2dyb3VuZF09XCInIzg0ODQ4NCdcIj48L2NvcmUtcGFnaW5hdGlvbi1mdWxsPlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48Y29yZS1hcGktcHJvZ3Jlc3MgKm5nSWY9XCJsb25nQXBpUnVubmluZ1wiIChvbkNsb3NlKT1cIm9uUHJvZ3Jlc3NXaW5kb3dDbG9zZSgkZXZlbnQpXCI+PC9jb3JlLWFwaS1wcm9ncmVzcz5cclxuXHJcbjxhcHAtZnVsbHNjcmVlbi1tb2RhbC1sb2FkZXIgKm5nSWY9XCJwcmVmZXRjaExvYWRpbmdcIj48L2FwcC1mdWxsc2NyZWVuLW1vZGFsLWxvYWRlcj4iXX0=
|
|
1823
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1wYWdlLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvbGlicmFyaWVzL2NvcmUtcGFnZS1saXN0L2NvcmUtcGFnZS1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXBhZ2UtbGlzdC9jb3JlLXBhZ2UtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBb0MsU0FBUyxFQUFlLE1BQU0sRUFBRSxZQUFZLEVBQTRCLFNBQVMsR0FBRyxNQUFNLGVBQWUsQ0FBQztBQUNuTCxPQUFPLEVBQTBCLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxrQkFBa0IsR0FBNEQsTUFBTSxvQ0FBb0MsQ0FBQztBQUlsSSxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBZ0IsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsR0FBRyxNQUFNLE1BQU0sQ0FBQztBQUN6SSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQztBQUM3RyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsMkJBQTJCLEVBQXVDLE1BQU0sZ0ZBQWdGLENBQUM7QUFLbEssT0FBTyxFQUFFLGtCQUFrQixFQUF3RixNQUFNLG9DQUFvQyxDQUFD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LEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csb0NBQW9DO3NCQUE1QyxLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFRyw2QkFBNkI7c0JBQXJDLEtBQUs7Z0JBRUkseUJBQXlCO3NCQUFsQyxNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRywwQkFBMEI7c0JBQW5DLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFFaUIsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQUNjLHFCQUFxQjtzQkFBeEQsU0FBUzt1QkFBQyx1QkFBdUI7Z0JBQ0EsbUJBQW1CO3NCQUFwRCxTQUFTO3VCQUFDLHFCQUFxQjtnQkFDUCxVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgVmlld0NoaWxkLCBUZW1wbGF0ZVJlZiwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgaXNEZXZNb2RlLCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBDb3JlVGFibGVDb21wb25lbnQsIElDb3JlVGFibGVUb29sQ2xpY2tFdmVudEVtaXR0ZXJEYXRhLCBJQ29yZVRhYmxlVG9vbEl0ZW0sIH0gZnJvbSAnLi4vY29yZS10YWJsZS9jb3JlLXRhYmxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVQYWdlTGlzdFNlcnZpY2UsIElHZW5lcmF0ZVRlbXBsYXRlUmVxdWVzdCwgSUltcG9ydFhsc3hUb0RiUmVxdWVzdCB9IGZyb20gJy4vY29yZS1wYWdlLWxpc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmVQYWdlRWRpdFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlLXBhZ2UtZWRpdC9jb3JlLXBhZ2UtZWRpdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vYWxlcnQvYWxlcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIGZyb21FdmVudCwgbWFwLCBzd2l0Y2hNYXAsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvcmVQYWdlTGlzdFN0YXRlIH0gZnJvbSAnLi9jb3JlLXBhZ2UtbGlzdC5zdGF0ZSc7XHJcbmltcG9ydCB7IElDb3JlQnV0dG9uVk5TIH0gZnJvbSAnLi4vY29yZS1idXR0b24tZ3JvdXAtdm5zL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9JQ29yZUJ1dHRvblZOUyc7XHJcbmltcG9ydCB7IEVudW1Db3JlQnV0dG9uVk5TQ29kZSB9IGZyb20gJy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMvRW51bUNvcmVCdXR0b25WTlNDb2RlJztcclxuaW1wb3J0IHsgQ29yZUZvcm1Db250cm9sQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtZm9ybS1jb250cm9sLWJhc2UvY29yZS1mb3JtLWNvbnRyb2wtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ29yZUNvbW1vblBhcmFtS2l0Q29tcG9uZW50LCBJQ29yZUNvbW1vblBhcmFtS2l0RXZlbnRFbWl0dGVyRGF0YSB9IGZyb20gJy4uL2NvcmUtY29tbW9uLXBhcmFtLWtpdC9jb3JlLWNvbW1vbi1wYXJhbS1raXQvY29yZS1jb21tb24tcGFyYW0ta2l0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExvbmdUYXNrU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvbmctdGFzay5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZUNvbXBvc2l0aW9uU2VydmljZSB9IGZyb20gJy4uL2NvcmUtY29tcG9zaXRpb24vY29yZS1jb21wb3NpdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZUJ1dHRvbkdyb3VwU2VydmljZSB9IGZyb20gJy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC1zZXJ2aWNlJztcclxuaW1wb3J0IHsgSUNvcmVCdXR0b25Hcm91cFN0YXR1cyB9IGZyb20gJy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC1zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW51bUZpbHRlck9wZXJhdG9yLCBJRmlsdGVyT3BlcmF0b3IsIElJbk9wZXJhdG9yLCBJUGFnaW5hdGlvbiwgSVF1ZXJ5TGlzdFJlcXVlc3QsIElTZWFyY2hJdGVtLCBJU29ydEl0ZW0gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lRdWVyeUxpc3RSZXF1ZXN0JztcclxuaW1wb3J0IHsgYXBpIH0gZnJvbSBcImFscGhhLWdsb2JhbC1jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgRW51bVRyYW5zbGF0ZUtleSB9IGZyb20gXCJhbHBoYS1nbG9iYWwtY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbXVsdGktbGFuZ3VhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBwU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUm91dGluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yb3V0aW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMYXlvdXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGF5b3V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBKc29uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2pzb24uc2VydmljZSc7XHJcbmltcG9ydCB7IGFsZXJ0T3B0aW9ucywgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvYWxlcnRPcHRpb25zJztcclxuaW1wb3J0IHsgSUZvcm1hdGVkUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lGb3JtYXRlZFJlc3BvbnNlJztcclxuaW1wb3J0IHsgSVF1ZXJ5TGlzdFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUXVlcnlMaXN0UmVzcG9uc2UnO1xyXG5pbXBvcnQgeyBkZWZhdWx0UGFnaW5nIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2RlZmF1bHRQYWdpbmcnO1xyXG5pbXBvcnQgeyBJSWRzUmVxdWVzdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSUlkc1JlcXVlc3QnO1xyXG5pbXBvcnQgeyBJVG9nZ2xlQWN0aXZlSWRzUmVxdWVzdCwgSVRvZ2dsZUFwcHJvdmVJZHNSZXF1ZXN0LCBJVG9uZ2xlVW5BcHByb3ZlSWRzUmVxdWVzdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVRvZ2dsZUFjdGl2ZUlkc1JlcXVlc3QnO1xyXG5pbXBvcnQgeyBFbnVtU29ydERpcmVjdGlvbiB9IGZyb20gJy4uLy4uL2VudW0vRW51bVNvcnREaXJlY3Rpb24nO1xyXG5pbXBvcnQgeyBJU3lzTXV0YXRpb25Mb2dCZWZvcmVBZnRlclJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lTeXNNdXRhdGlvbkxvZ0JlZm9yZUFmdGVyUmVxdWVzdCc7XHJcbmltcG9ydCB7IElDb3JlVGFibGVDb2x1bW5JdGVtIH0gZnJvbSAnLi4vY29yZS10YWJsZS9JQ29yZVRhYmxlQ29sdW1uSXRlbSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvcmVQYWdpbmF0aW9uRnVsbENvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtcGFnaW5hdGlvbi1mdWxsL2NvcmUtcGFnaW5hdGlvbi1mdWxsL2NvcmUtcGFnaW5hdGlvbi1mdWxsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVQYWdlSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS1wYWdlLWhlYWRlci9jb3JlLXBhZ2UtaGVhZGVyL2NvcmUtcGFnZS1oZWFkZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZUNvbXBvc2l0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS1jb21wb3NpdGlvbi9jb3JlLWNvbXBvc2l0aW9uL2NvcmUtY29tcG9zaXRpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZUFwaVByb2dyZXNzQ29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS1hcGktcHJvZ3Jlc3MvY29yZS1hcGktcHJvZ3Jlc3MvY29yZS1hcGktcHJvZ3Jlc3MuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRnVsbHNjcmVlbk1vZGFsTG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZnVsbHNjcmVlbi1tb2RhbC1sb2FkZXIvZnVsbHNjcmVlbi1tb2RhbC1sb2FkZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSUNvcmVDaGVja2xpc3RPcHRpb24gfSBmcm9tICcuLi9jb3JlLWNoZWNrbGlzdC9jb3JlLWNoZWNrbGlzdC9jb3JlLWNoZWNrbGlzdC5jb21wb25lbnQnO1xyXG5cclxuLyogS2hpIGtow7RuZyBjw7MgZMOybmcgbsOgbyDEkcaw4bujYyB0aWNrIGNo4buNbiwgY8OhYyBuw7p0IHNhdSBz4bq9IMSRxrDhu6NjIOG6qW4gxJFpOiAqL1xyXG5jb25zdCBFTVBUWV9TRUxFQ1RJT05fSElEREVOX0JVVFRPTjogRW51bUNvcmVCdXR0b25WTlNDb2RlW10gPSBbXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9FRElULCAvLyBT4butYVxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfTE9DSywgLy8gS2jDs2FcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1VOTE9DSywgLy8gTeG7nyBraMOzYVxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfQUNUSVZBVEUsIC8vIMOBcCBk4bulbmdcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0lOQUNUSVZBVEUsIC8vIE5n4burbmcgw6FwIGThu6VuZ1xyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfUkVTRVQsIC8vIFJlc2V0ICht4bqtdCBraOG6qXUpXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9DT1BZLCAvLyBTYW8gY2jDqXBcclxuXHJcbiAgLy8gQ8OhYyB0aOG7gyBsb+G6oWkgaW5cclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1BSSU5ULFxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfUFJJTlRfMkMsXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9QUklOVF8yQ18yMDA4LFxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfUFJJTlRfMkNfOTgsXHJcbiAgLy9cclxuXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9ERUxFVEUsIC8vIHjDs2FcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0FQUFJPVkUsIC8vIHBow6ogZHV54buHdFxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfUkVKRUNULCAvLyB04burIGNo4buRaVxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfVU5BUFBST1ZFLCAvLyBi4buPIHBow6ogZHV54buHdFxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfUEVORElOR19BUFBST1ZFLCAvLyBt4bufIGNo4budIHBow6ogZHV54buHdFxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfTElRVUlEQVRFX0NPTlRSQUNULCAvLyB0aGFuaCBsw70gaOG7o3AgxJHhu5NuZ1xyXG5dXHJcblxyXG4vL2RlY2xhcmUgbGV0IGNvcmVGaWxlVXRpbHM6IGFueTtcclxuLy9pbXBvcnQgeyBjb3JlRmlsZVV0aWxzIH0gZnJvbSAnLi4vLi4vLi4vYXNzZXRzL2pzL2NvcmVGaWxlVXRpbHMnO1xyXG4vL2NvbnN0IGJsb2JUb0Jhc2U2NCA9IGNvcmVGaWxlVXRpbHMucHJvdG90eXBlLmJsb2JUb0Jhc2U2NDtcclxuXHJcbmNvbnN0IGJsb2JUb0Jhc2U2NCA9IGFzeW5jIChibG9iKSA9PiB7XHJcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCBfKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcclxuICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdClcclxuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYilcclxuICB9KVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDb3JlUGFnZUxpc3RBcGlEZWZpbml0aW9uIHtcclxuICBxdWVyeUxpc3RSZWxhdGl2ZVBhdGg6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ29yZVBhZ2VMaXN0U2VhcmNoT2JqZWN0IHtcclxuICBwcmV2aW91czogSVNlYXJjaEl0ZW1bXTtcclxuICBjdXJyZW50OiBJU2VhcmNoSXRlbVtdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDb3JlUGFnZUxpc3RFZGl0Um91dGluZyB7XHJcbiAgYXV4aWxpYXJ5OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvcmVQYWdlTGlzdENSVUQge1xyXG4gIGRlbGV0ZUlkcz86IGFwaTtcclxuICB0b2dnbGVBY3RpdmVJZHM/OiBhcGk7XHJcbiAgdG9nZ2xlQXBwcm92ZUlkcz86IGFwaTtcclxuICB0b2dnbGVVbmFwcHJvdmVJZHM/OiBhcGk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVhsc3hJbXBvcnRPYmplY3Qge1xyXG4gIHhsc3hTaWQ6IHN0cmluZyxcclxuICB4bHN4RXhDb2RlOiBzdHJpbmcsXHJcbiAgeGxzeFNlc3Npb246IG51bWJlcixcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ29yZVRhYmxlRmxhdENvbHVtbkl0ZW0ge1xyXG4gIGNhcHRpb246IHN0cmluZztcclxuICBmaWVsZDogc3RyaW5nO1xyXG4gIHR5cGU/OiBzdHJpbmc7XHJcbiAgcGlwZT86IHN0cmluZztcclxuICBhbGlnbj86IHN0cmluZztcclxuICB3aWR0aD86IG51bWJlcjtcclxuICBoaWRkZW4/OiBib29sZWFuO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NvcmUtcGFnZS1saXN0JyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFJvdXRlck1vZHVsZSxcclxuICAgIENvcmVUYWJsZUNvbXBvbmVudCxcclxuICAgIENvcmVQYWdpbmF0aW9uRnVsbENvbXBvbmVudCxcclxuICAgIENvcmVQYWdlSGVhZGVyQ29tcG9uZW50LFxyXG4gICAgQ29yZUNvbXBvc2l0aW9uQ29tcG9uZW50LFxyXG4gICAgQ29yZUNvbW1vblBhcmFtS2l0Q29tcG9uZW50LFxyXG4gICAgQ29yZUFwaVByb2dyZXNzQ29tcG9uZW50LFxyXG4gICAgRnVsbHNjcmVlbk1vZGFsTG9hZGVyQ29tcG9uZW50XHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29yZS1wYWdlLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvcmUtcGFnZS1saXN0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgICAgdXNlRXhpc3Rpbmc6IENvcmVQYWdlTGlzdENvbXBvbmVudCxcclxuICAgIH0sXHJcbiAgICBDb3JlUGFnZUxpc3RTdGF0ZSxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29yZVBhZ2VMaXN0Q29tcG9uZW50IGV4dGVuZHMgQ29yZUZvcm1Db250cm9sQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIC8qIFdIRU4gWU9VIERPIE5PVCBXQU5UIFBPUFVQLCBwYXNzIFtub3JtYWxNb2RlXT1cInRydWVcIiAqL1xyXG4gIEBJbnB1dCgpIG5vcm1hbE1vZGUhOiBib29sZWFuO1xyXG4gIC8qIFNUQVJUOiBTb21lIHJvdXRlZCBjb21wb25lbnRzLCBzdWNoIGFzIFN0YWZmUHJvZmlsZSwgbWF5IGJlIHJldXNlZCBhcyByZWFkb25seSBmb3Igc2Vla2luZyAqL1xyXG4gIEBJbnB1dCgpIGhpZGVIZWFkZXIhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGhpZGVCdXR0b25Hcm91cCE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2Vla2VyTW9kZSE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgbWNjTW9kZSE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaGVpZ2h0ITogbnVtYmVyO1xyXG4gIC8qIEVORDogU29tZSByb3V0ZWQgY29tcG9uZW50cywgc3VjaCBhcyBTdGFmZlByb2ZpbGUsIG1heSBiZSByZXVzZWQgYXMgcmVhZG9ubHkgZm9yIHNlZWtpbmcgKi9cclxuXHJcbiAgLyogY2hhbmdlIHRoZXNlIDIgcHJvcHMgdG8gd3JhcCBoZWFkZXIgdGV4dHMgKi9cclxuICBASW5wdXQoKSBoZWFkZXJXcmFwITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBoZWFkZXJGaXJzdFJvd0hlaWdodCE6IG51bWJlcjtcclxuICAvKiogKi9cclxuXHJcbiAgLyoqU2hvdyBQYXJhbUtpdCAqL1xyXG4gIEBJbnB1dCgpIGVuYWJsZVRpbWVab25lQ29udmVydGVyRm9yRGF0ZVRpbWVQZXJpb2RQYXJhbWV0ZXJzITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBzaG93UGFyYW1LaXQhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGRhdGVQZXJpb2RDb21wYXJpc29uRm9yITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGRhdGVQZXJpb2RDb21wYXJpc29uRm9yTGFiZWxLZXkhOiBFbnVtVHJhbnNsYXRlS2V5O1xyXG4gIEBJbnB1dCgpIHN0YXR1c0luY2x1c2lvbkZvciE6IHN0cmluZztcclxuICBASW5wdXQoKSBzdGF0dXNJbmNsdXNpb25Gb3JMYWJlbEtleSE6IEVudW1UcmFuc2xhdGVLZXk7XHJcbiAgQElucHV0KCkgc3RhdHVzT3B0aW9uc0FwaSE6IGFwaTtcclxuICBASW5wdXQoKSBzdGF0dXNPcHRpb25zJDogQmVoYXZpb3JTdWJqZWN0PElDb3JlQ2hlY2tsaXN0T3B0aW9uW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJQ29yZUNoZWNrbGlzdE9wdGlvbltdPihbXSk7XHJcbiAgQElucHV0KCkgc2hvd09yZ1BhcmFtITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBoaWRlR2VuZXJhbFNlYXJjaCE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaGlkZURhdGVQZXJpb2RDb21wYXJpc29uITogYm9vbGVhbjsgLy8gaWYgd2Ugd2FudCBub3QgdG8gdXNlIGRhdGUgcCBmaWx0ZXJcclxuICBASW5wdXQoKSBoaWRlU3RhdHVzSW5jbHVzaW9uITogYm9vbGVhbjsgLy8gaWYgd2Ugd2FudCBub3QgdG8gdXNlIHN0YXR1cyBmaWx0ZXJcclxuICAvKipFbmQgU2hvdyBQYXJhbUtpdCAqL1xyXG5cclxuICBASW5wdXQoKSB0aXRsZSE6IEVudW1UcmFuc2xhdGVLZXk7XHJcbiAgQElucHV0KCkgaGFzSWRPZlN0cmluZ1R5cGUhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGhpZGVDaGVjayE6IGJvb2xlYW47XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWV9KSBhcGlEZWZpbml0aW9uITogSUNvcmVQYWdlTGlzdEFwaURlZmluaXRpb247XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWV9KSBjb2x1bW5zITogSUNvcmVUYWJsZUNvbHVtbkl0ZW1bXTtcclxuICBASW5wdXQoKSBmcm96ZW4hOiBudW1iZXI7XHJcbiAgQElucHV0KCkgaW5saW5lVG9vbHMhOiBJQ29yZVRhYmxlVG9vbEl0ZW1bXTtcclxuICBASW5wdXQoKSBpbmxpbmVUb29sSXRlbXMhOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGVbXTtcclxuICBASW5wdXQoKSBlZGl0Um91dGUhOiBJQ29yZVBhZ2VMaXN0RWRpdFJvdXRpbmc7XHJcbiAgQElucHV0KCkgY3J1ZCE6IElDb3JlUGFnZUxpc3RDUlVEO1xyXG4gIEBJbnB1dCgpIHNob3dMaXN0SW5saW5lVG9vbHMhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHRvcCE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgbGVmdCE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgaGlkZUxlZnQhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIG91dGVyUGFyYW0kITogQmVoYXZpb3JTdWJqZWN0PGFueT47XHJcbiAgQElucHV0KCkgb3V0ZXJGaWx0ZXIkITogQmVoYXZpb3JTdWJqZWN0PElGaWx0ZXJPcGVyYXRvcltdIHwgdW5kZWZpbmVkPjtcclxuICBASW5wdXQoKSBvdXRlclNvcnQhOiBJU29ydEl0ZW1bXTtcclxuICBASW5wdXQoKSBvdXRlckZpbHRlck9wZXJhdG9ycyE6IElGaWx0ZXJPcGVyYXRvcltdO1xyXG4gIEBJbnB1dCgpIG91dGVySW5PcGVyYXRvcnMhOiBJSW5PcGVyYXRvcltdIHwgbnVsbDtcclxuICBASW5wdXQoKSBhdXRvUmVzaXplV2l0aFdpbmRvdyE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgZXh0cmFNYW51YWxPZmZzZXQhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgd3JhcCE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgcm93SGVpZ2h0ITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNlbGZSZXNvbHZlQ29yZVBhZ2VIZWFkZXJCdXR0b25DbGljayE6IGJvb2xlYW47IC8vIFRoZSBjYWxsZXIgd2lsbCBpdHNlbGYgcmVzb2x2ZSBldmVudHMgZW1taXRlZCBieSBDb3JlUGFnZUhlYWRlciBidXR0b25zIChmb3Igc29tZSlcclxuICBASW5wdXQoKSBjbGVhckRhdGEkITogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xyXG4gIEBJbnB1dCgpIGRlbGV0ZVZhbGlkYXRlRm4hOiBGdW5jdGlvbjtcclxuICBASW5wdXQoKSBnZW5lcmF0ZVRlbXBsYXRlUmVxdWVzdCE6IElHZW5lcmF0ZVRlbXBsYXRlUmVxdWVzdDtcclxuICBASW5wdXQoKSBpbXBvcnRQcmV2aWV3UGF0aCE6IHN0cmluZztcclxuICBASW5wdXQoKSBjb2x1bW5TZWFyY2hEZWZhdWx0T3BlbiE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgZml4ZWRQYWdlU2l6ZSE6IG51bWJlcjtcclxuICBASW5wdXQoKSBkaXNhYmxlRG91YmxlQ2xpY2shOiBib29sZWFuO1xyXG5cclxuICBASW5wdXQoKSBub1BhZGRpbmdDZWxsITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBkaXNhYmxlSGlnaGxpZ2h0T25DbGljayE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgbG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBASW5wdXQoKSBleGNsdWRlZElkcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcltdPihbXSk7XHJcblxyXG4gIEBJbnB1dCgpIGRpc2FibGVEaWFsb2dJbmZvcm1hdGlvbkxpbmVzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSBjb3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxJQ29yZUJ1dHRvblZOUz4oKTtcclxuICBAT3V0cHV0KCkgcm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHJvd0RvdWJsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RlZElkc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0ZWREYXRhQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkluc3RhbmNlQ3JlYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG4gIEBPdXRwdXQoKSBvbklucHV0RmlsZUJhc2U2NERhdGFSZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgbGlzdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIGNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnY29yZVBhZ2VMaXN0Q29udGFpbmVyJykgY29yZVBhZ2VMaXN0Q29udGFpbmVyITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdwYWdpbmF0aW9uQ29udGFpbmVyJykgcGFnaW5hdGlvbkNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnZmlsZUltcG9ydCcpIGZpbGVJbXBvcnQhOiBFbGVtZW50UmVmO1xyXG5cclxuICBnZW9tZXRyaWNEb25lOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGhlaWdodFJlc2l6aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaGVpZ2h0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICB0b3BQbGFjZUhlaWdodCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcblxyXG4gIHJlc2l6ZUhlaWdodEZsYWckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHBhZ2luYXRpb25IZWlnaHQhOiBudW1iZXI7XHJcbiAgY29tcG9zaXRpb25IZWlnaHQhOiBudW1iZXI7XHJcbiAgY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIhOiBudW1iZXI7XHJcbiAgZGlhbG9nSW5zdGFuY2VOdW1iZXIhOiBudW1iZXI7XHJcblxyXG4gIHJlc2l6ZVN0cmVhbSQgPSBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJyk7XHJcblxyXG4gIGNsaWNrR2VuZXJhdGVUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcblxyXG4gIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcbiAgcXVlcnlMaXN0U3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xyXG4gIGxvYWRpbmchOiBib29sZWFuO1xyXG5cclxuICBzZWxlY3RlZElkczogc3RyaW5nW10gfCBudW1iZXJbXSA9IFtdO1xyXG4gIHNlbGVjdGVkRGF0YTogYW55W10gPSBbXTtcclxuXHJcbiAgaXNBZG1pbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICB2aWV3SW5pdERvbmUhOiBib29sZWFuO1xyXG5cclxuICAvKiBzdGFydDogcGFzc2luZyB0aGlzIHZhciB0byBQYWdpbmF0aW9uICovXHJcblxyXG4gIHBhZ2VDb3VudCE6IG51bWJlcjtcclxuXHJcbiAgLy8gUGFzc2luZyBCZWhhdmlvclN1YmplY3QgdG8gb3RoZXIgY29tcG9uZW50IGlzIGxpa2UgdXNpbmcgYSBzZXJ2aWNlICh0aGF0IGhvbGRzIHRoaXMgQmVoYXZpb3JTdWJqZWN0KSBpbmplY3RlZCB0byBib3RoIGNvbXBvbmVudHNcclxuICBjdXJyZW50UGFnZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMSk7XHJcblxyXG4gIC8qIGVuZDogcGFzc2luZyB0aGlzIHZhciB0byBQYWdpbmF0aW9uICovXHJcblxyXG4gIHBhZ2VTaXplJCE6IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+O1xyXG5cclxuICBmaWx0ZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xyXG4gIGZpbHRlck9wZXJhdG9ycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElGaWx0ZXJPcGVyYXRvcltdPihbXSk7XHJcbiAgaW5PcGVyYXRvcnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJSW5PcGVyYXRvcltdPihbXSk7XHJcbiAgZ2VuZXJhbFNlYXJjaCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xyXG4gIHNlYXJjaCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElDb3JlUGFnZUxpc3RTZWFyY2hPYmplY3QgfCBudWxsPihudWxsKTtcclxuICBzb3J0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVNvcnRJdGVtW10+KFtdKTtcclxuICBwYWdpbmF0aW9uJCE6IEJlaGF2aW9yU3ViamVjdDxJUGFnaW5hdGlvbj47XHJcbiAgZm9yY2VSZWxvYWRpbmdGbGFnJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHF1ZXJ5TGlzdFJlcXVlc3QkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJUXVlcnlMaXN0UmVxdWVzdD4oeyBsYW5nOiAndmknIH0pO1xyXG4gIHF1ZXJ5TGlzdFN0cmVhbSQhOiBPYnNlcnZhYmxlPGFueT47XHJcbiAgaW5uZXJCb2R5Q291bnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDEpO1xyXG5cclxuICBwYXVzZVN1YnNjdGlwdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGxpc3QhOiBhbnlbXTtcclxuICB0YWJsZUhlaWdodCE6IG51bWJlcjtcclxuICBhdmFpbGFibGVDb2x1bW5zRm9yR2VuZXJhbFNlYXJjaCE6IHN0cmluZ1tdO1xyXG4gIGRhdGFJbXBvcnQhOiBhbnk7XHJcbiAgcGVuZGluZ0FjdGlvbiE6IEVudW1Db3JlQnV0dG9uVk5TQ29kZSB8IG51bGw7XHJcbiAgaWRTdGF0ZTogYW55O1xyXG4gIHRlbXBsYXRlRmlsZU5hbWUhOiBzdHJpbmc7XHJcblxyXG4gIGxvbmdBcGlSdW5uaW5nITogYm9vbGVhbjtcclxuICBwcmVmZXRjaExvYWRpbmchOiBib29sZWFuO1xyXG5cclxuICBidXR0b25Hcm91cFN0YXR1cyE6IElDb3JlQnV0dG9uR3JvdXBTdGF0dXM7XHJcblxyXG4gIGV4cG9ydENvcmVQYWdlTGlzdEdyaWRUb0V4Y2VsU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY29yZVBhZ2VMaXN0U2VydmljZTogQ29yZVBhZ2VMaXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgY29yZVBhZ2VMaXN0U3RhdGU6IENvcmVQYWdlTGlzdFN0YXRlLFxyXG4gICAgcHJpdmF0ZSBjb3JlUGFnZUVkaXRTZXJ2aWNlOiBDb3JlUGFnZUVkaXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSBtbHM6IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhcHBTZXJ2aWNlOiBBcHBTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0aW5nU2VydmljZTogUm91dGluZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxvbmdUYXNrU2VydmljZTogTG9uZ1Rhc2tTZXJ2aWNlLFxyXG4gICAgcHVibGljIGxheW91dFNlcnZpY2U6IExheW91dFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvcmVDb21wb3NpdGlvblNlcnZpY2U6IENvcmVDb21wb3NpdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvcmVCdXR0b25Hcm91cFNlcnZpY2U6IENvcmVCdXR0b25Hcm91cFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGpzb25TZXJ2aWNlOiBKc29uU2VydmljZSxcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcblxyXG4gICAgaWYgKCEhIXRoaXMuaW5saW5lVG9vbEl0ZW1zKSB7XHJcbiAgICAgIHRoaXMuaW5saW5lVG9vbEl0ZW1zID0gW1xyXG4gICAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRURJVCxcclxuICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RFTEVURVxyXG4gICAgICBdXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG5hdmlnYXRpb24gPSB0aGlzLnJvdXRlcj8uZ2V0Q3VycmVudE5hdmlnYXRpb24oKVxyXG4gICAgaWYgKG5hdmlnYXRpb24pIHtcclxuICAgICAgY29uc3QgZXh0cmFzID0gbmF2aWdhdGlvbi5leHRyYXM7XHJcbiAgICAgIGlmICghIWV4dHJhcyAmJiAnc3RhdGUnIGluIGV4dHJhcykge1xyXG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbyhgQ29yZVBhZ2VMaXN0IGlzIHVzaW5nIG9sZCBpbnN0YW5jZSBudW1iZXIgJHt0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyfWAsIGFsZXJ0T3B0aW9ucylcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCEhZXh0cmFzLnN0YXRlICYmICdpZCcgaW4gZXh0cmFzLnN0YXRlISkge1xyXG4gICAgICAgICAgdGhpcy5pZFN0YXRlID0gZXh0cmFzLnN0YXRlWydpZCddO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoISFleHRyYXMuc3RhdGUgJiYgJ2luc3RhbmNlTnVtYmVyJyBpbiBleHRyYXMuc3RhdGUhKSB7XHJcbiAgICAgICAgICB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyID0gZXh0cmFzLnN0YXRlWydpbnN0YW5jZU51bWJlciddO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiBUSElTIENPREUgV0lMTCBERUZJTkUgb3V0ZXJQYXJhbSQgRklMVEVSIGZvciBpbXBvcnQgcHJldmlldyB0YXNrICovXHJcbiAgICBpZiAobmF2aWdhdGlvbj8uZXh0cmFzPy5zdGF0ZSkge1xyXG4gICAgICBjb25zdCBpbXBvcnRQcmV2aWV3T3V0ZXJQYXJhbSA9IG5hdmlnYXRpb24/LmV4dHJhcz8uc3RhdGUhW1wiaW1wb3J0UHJldmlld091dGVyUGFyYW1cIl1cclxuICAgICAgaWYgKCEhdGhpcy5vdXRlclBhcmFtJCkge1xyXG4gICAgICAgIGlmICghIXRoaXMub3V0ZXJQYXJhbSQ/LnZhbHVlKSB7XHJcbiAgICAgICAgICBpZiAoISFpbXBvcnRQcmV2aWV3T3V0ZXJQYXJhbSkge1xyXG4gICAgICAgICAgICBsZXQgbmV3T3V0ZXJQYXJhbSA9IHRoaXMub3V0ZXJQYXJhbSQudmFsdWU7XHJcbiAgICAgICAgICAgIG5ld091dGVyUGFyYW0gPSB7XHJcbiAgICAgICAgICAgICAgLi4ubmV3T3V0ZXJQYXJhbSxcclxuICAgICAgICAgICAgICAuLi5pbXBvcnRQcmV2aWV3T3V0ZXJQYXJhbSxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm91dGVyUGFyYW0kLm5leHQobmV3T3V0ZXJQYXJhbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICghIWltcG9ydFByZXZpZXdPdXRlclBhcmFtKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3V0ZXJQYXJhbSQubmV4dChpbXBvcnRQcmV2aWV3T3V0ZXJQYXJhbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICghIWltcG9ydFByZXZpZXdPdXRlclBhcmFtKSB7XHJcbiAgICAgICAgICB0aGlzLm91dGVyUGFyYW0kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KGltcG9ydFByZXZpZXdPdXRlclBhcmFtKVxyXG4gICAgICAgICAgdGhpcy5vdXRlclBhcmFtU3Vic2NyaWJlRm4oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcbiAgICBpZiAoISEhdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcikgdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlciA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmluc3RhbmNlcy5wdXNoKHtcclxuICAgICAgaW5zdGFuY2VOdW1iZXI6IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIsXHJcbiAgICAgIHJlbG9hZEZsYWckOiBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKSxcclxuICAgICAgaWQkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCksXHJcbiAgICAgIHRib2R5SGVpZ2h0JDogbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpLFxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCEhdGhpcy5pZFN0YXRlKSB7XHJcbiAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZSxcclxuICAgICAgICBpZDogdGhpcy5pZFN0YXRlXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50ZW1wbGF0ZUZpbGVOYW1lID0gdGhpcy5nZW5lcmF0ZVRlbXBsYXRlUmVxdWVzdD8uZXhDb2RlO1xyXG5cclxuICAgIGlmICghIXRoaXMub3V0ZXJGaWx0ZXIkKSB7XHJcbiAgICAgIHRoaXMub3V0ZXJGaWx0ZXIkLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICB0aGlzLm91dGVyRmlsdGVyT3BlcmF0b3JzID0geCB8fCBbXTtcclxuICAgICAgICB0aGlzLm1lcmdlRmlsdGVyT3BlcmF0b3IoKTtcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1snb3V0ZXJJbk9wZXJhdG9ycyddKSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRJbk9wZXJhdG9yczogSUluT3BlcmF0b3JbXSA9IHRoaXMuaW5PcGVyYXRvcnMkLnZhbHVlO1xyXG4gICAgICBjb25zdCBjaGFuZ2VkSW5PcGVyYXRvcnM6IElJbk9wZXJhdG9yW10gPSBjaGFuZ2VzWydvdXRlckluT3BlcmF0b3JzJ10uY3VycmVudFZhbHVlIHx8IFtdO1xyXG4gICAgICBjb25zdCByZW1haW5Jbk9wZXJhdG9ycyA9IGN1cnJlbnRJbk9wZXJhdG9ycy5maWx0ZXIoeCA9PiAhISFjaGFuZ2VkSW5PcGVyYXRvcnMuZmlsdGVyKHkgPT4geS5maWVsZCA9PT0geC5maWVsZCkubGVuZ3RoKTtcclxuICAgICAgY29uc3QgbmV3SW5PcGVyYXRvcnMgPSBbLi4ucmVtYWluSW5PcGVyYXRvcnMsIC4uLmNoYW5nZWRJbk9wZXJhdG9yc107XHJcblxyXG4gICAgICB0aGlzLmluT3BlcmF0b3JzJC5uZXh0KG5ld0luT3BlcmF0b3JzKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydoZWlnaHQnXSkge1xyXG5cclxuICAgICAgLy8gS2jDtG5nIHRo4buDIHTDrW5oIMSRxrDhu6NjIHPhu5EgxJFvIGjDrG5oIGjhu41jIG7hur91IEFmdGVyVmlld0luaXQgY2jGsGEgY2jhuqF5XHJcbiAgICAgIC8vIE7Dqm4g4bufIMSRw6J5IHRhIGNo4buJIMSRxqFuIGdp4bqjbiBsw6AgZ8OhbiB0aGF5IMSR4buVaSBj4bunYSBoZWlnaHQgdsOgbyBoZWlnaHQkXHJcbiAgICAgIHRoaXMuaGVpZ2h0JC5uZXh0KGNoYW5nZXNbJ2hlaWdodCddLmN1cnJlbnRWYWx1ZSk7XHJcblxyXG4gICAgICBpZiAoISFjaGFuZ2VzWydoZWlnaHQnXSkge1xyXG4gICAgICAgIHRoaXMuY2FsY3VsYXRlVGFibGVIZWlnaHRCYXNlZE9uSGVpZ2h0QW5kVG9wUmVmSGVpZ2h0KGNoYW5nZXNbJ2hlaWdodCddLmN1cnJlbnRWYWx1ZSwgdGhpcy50b3BQbGFjZUhlaWdodCQudmFsdWUpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qXHJcbiAgICAgIGlmICghIWNoYW5nZXNbJ2hlaWdodCddLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAgIC8vIE7hur91IGNoaeG7gXUgY2FvIGPhu6dhIENvcmVQYWdlTGlzdCDEkcaw4bujYyB0cnV54buBbiB2w6BvXHJcbiAgICAgICAgLy8gVGjDrCBj4bqnbiB0w61uaCBjaGnhu4F1IGNhbyBj4bunYSBDb3JlQ29tcG9zaXRpb24gPSB0aGlzLmhlaWdodFxyXG4gICAgICAgIC8vIE7hur91IGhp4buDbiB0aOG7iyBDb3JlUGFnZUhlYWRlciB0aMOsIGPhuqduIHRy4burIHRp4bq/cCDEkWkgY29yZVBhZ2VIZWFkZXJIZWlnaHRcclxuICAgICAgICB0aGlzLmNvbXBvc2l0aW9uSGVpZ2h0ID0gY2hhbmdlc1snaGVpZ2h0J10uY3VycmVudFZhbHVlIC0gKCEhdGhpcy5oaWRlSGVhZGVyID8gMCA6IHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnZUhlYWRlckhlaWdodCk7XHJcbiAgICAgICAgLy8gVMOtbmggbHXDtG4gY2hp4buBdSBjYW8gdGFibGVIZWlnaHRcclxuICAgICAgICAvLyBO4bq/dSBleHRyYU1hbnVhbE9mZnNldCDEkcaw4bujYyB0cnV54buBbiB2w6BvIG3hu5l0IGPDoWNoIHRo4bunIGPDtG5nXHJcbiAgICAgICAgaWYgKCEhdGhpcy5leHRyYU1hbnVhbE9mZnNldCkge1xyXG4gICAgICAgICAgdGhpcy50YWJsZUhlaWdodCA9IGNoYW5nZXNbJ2hlaWdodCddLmN1cnJlbnRWYWx1ZSAtIHRoaXMuZXggdHJhTWFudWFsT2Zmc2V0IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmNvcmVQYWdpbmF0aW9uSGVpZ2h0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBD4bqnbiB0w61uaCBjaGnhu4F1IGNhbyBj4bunYSBwaOG6p24gdG9wIGtoaSBob29rIEFmdGVyVmlld0luaXQgxJHGsOG7o2Mga8OtY2ggaG/huqF0XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgICovXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZXNbJ291dGVyRmlsdGVyT3BlcmF0b3JzJ10pIHtcclxuICAgICAgdGhpcy5tZXJnZUZpbHRlck9wZXJhdG9yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5xdWVyeUxpc3RTdWJzY3JpYmUoKTtcclxuXHJcbiAgfVxyXG5cclxuICAvKiBRdWVyeUxpc3Qgc3ViICovXHJcbiAgc3Vic2NyaWJlUXVlcnlMaXN0KHg6IGFueSkge1xyXG4gICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgY29uc3QgaW5uZXJCb2R5OiBJUXVlcnlMaXN0UmVzcG9uc2UgPSBib2R5LmlubmVyQm9keTtcclxuICAgICAgICBpZiAoISFpbm5lckJvZHkpIHtcclxuXHJcbiAgICAgICAgICAvKiAjcmVnaW9uIFRyaWNraWx5IHJlc2V0IGlkJCwgdG1wRmlsdGVyJCBhbmQgdG1wSW5PcGVyYXRvcnMkICovXHJcbiAgICAgICAgICB0aGlzLnBhdXNlU3Vic2N0aXB0aW9uID0gdHJ1ZTsgLy8gPD09IFBhdXNlXHJcblxyXG4gICAgICAgICAgY29uc3QgbmV3UXVlcnlMaXN0UmVxdWVzdCA9IHRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWU7XHJcblxyXG4gICAgICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTdGF0ZS5pZCQubmV4dChudWxsKVxyXG4gICAgICAgICAgbmV3UXVlcnlMaXN0UmVxdWVzdC5pZCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgLyogVGhpcyBjb2RlIGJsb2NrIHJhaXNlcyBhIGJ1ZyBnZW5lcmFsbHkgKi9cclxuICAgICAgICAgIC8vIGlmICghIXRoaXMuY29yZVBhZ2VMaXN0U3RhdGUuaWQkLnZhbHVlKSB7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuY29yZVBhZ2VMaXN0U3RhdGUuaWQkLm5leHQobnVsbClcclxuICAgICAgICAgIC8vICAgbmV3UXVlcnlMaXN0UmVxdWVzdC5pZCA9IG51bGw7XHJcbiAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gICBuZXdRdWVyeUxpc3RSZXF1ZXN0LmlkID0gbnVsbDtcclxuICAgICAgICAgIC8vIH07XHJcblxyXG4gICAgICAgICAgaWYgKCEhdGhpcy50bXBGaWx0ZXJBY3RpdmUpIHtcclxuICAgICAgICAgICAgY29uc3Qgb2xkRmlsdGVyID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnByaW1hcnlGaWx0ZXIpKTtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXIkLm5leHQob2xkRmlsdGVyKTtcclxuICAgICAgICAgICAgbmV3UXVlcnlMaXN0UmVxdWVzdC5maWx0ZXIgPSBvbGRGaWx0ZXI7XHJcbiAgICAgICAgICAgIHRoaXMucHJpbWFyeUZpbHRlciA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy50bXBGaWx0ZXJBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoISF0aGlzLnRtcEluT3BlcmF0b3JzQWN0aXZlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9sZEluT3BlcnRvcnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMucHJpbWFyeUluT3BlcmF0b3JzKSk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5PcGVyYXRvcnMkLm5leHQob2xkSW5PcGVydG9ycyk7XHJcbiAgICAgICAgICAgIG5ld1F1ZXJ5TGlzdFJlcXVlc3QuaW5PcGVyYXRvcnMgPSBvbGRJbk9wZXJ0b3JzO1xyXG4gICAgICAgICAgICB0aGlzLnByaW1hcnlJbk9wZXJhdG9ycyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcEluT3BlcmF0b3JzQWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KG5ld1F1ZXJ5TGlzdFJlcXVlc3QpO1xyXG5cclxuICAgICAgICAgIHRoaXMucGF1c2VTdWJzY3RpcHRpb24gPSBmYWxzZTsgLy8gPD09IEFjdGl2ZSBiYWNrIGFnYWluXHJcblxyXG4gICAgICAgICAgLyogI2VuZHJlZ2lvbiBUcmlja2lseSByZXNldCBpZCQsIHRtcEZpbHRlciQgYW5kIHRtcEluT3BlcmF0b3JzJCAqL1xyXG5cclxuICAgICAgICAgIHRoaXMubGlzdCA9IGlubmVyQm9keS5saXN0ITtcclxuICAgICAgICAgIHRoaXMubGlzdENoYW5nZS5lbWl0KHRoaXMubGlzdCk7XHJcblxyXG4gICAgICAgICAgdGhpcy5pbm5lckJvZHlDb3VudCQubmV4dChpbm5lckJvZHkuY291bnQhKTtcclxuICAgICAgICAgIHRoaXMucGFnZUNvdW50ID0gTWF0aC5jZWlsKGlubmVyQm9keS5jb3VudCEgLyB0aGlzLnBhZ2VTaXplJC52YWx1ZSk7XHJcblxyXG4gICAgICAgICAgaWYgKGlubmVyQm9keS5wYWdlICE9PSB0aGlzLmN1cnJlbnRQYWdlJC52YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnBhdXNlU3Vic2N0aXB0aW9uID0gdHJ1ZTsgLy8gPD09IFBhdXNlXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UkLm5leHQoaW5uZXJCb2R5LnBhZ2UhKTtcclxuICAgICAgICAgICAgdGhpcy5wYXVzZVN1YnNjdGlwdGlvbiA9IGZhbHNlOyAvLyA8PT0gQWN0aXZlIGJhY2sgYWdhaW5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5saXN0ID0gW107XHJcbiAgICAgICAgICB0aGlzLmxpc3RDaGFuZ2UuZW1pdChbXSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5wYWdlQ291bnQgPSAwO1xyXG4gICAgICAgICAgLy90aGlzLnJlc3BvbnNlU2VydmljZS5yZXNvbHZlKGJvZHkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLmxpc3RDaGFuZ2UuZW1pdChbXSk7XHJcblxyXG4gICAgICAgIHRoaXMucGFnZUNvdW50ID0gMDtcclxuICAgICAgICAvL3RoaXMucmVzcG9uc2VTZXJ2aWNlLnJlc29sdmUoYm9keSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAvLyAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAvLyAgICAgSlNPTi5zdHJpbmdpZnkoeCwgbnVsbCwgMiksXHJcbiAgICAgIC8vICAgICBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9uc1xyXG4gICAgICAvLyAgICk7XHJcbiAgICAgIC8vIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG1lcmdlRmlsdGVyT3BlcmF0b3IoKTogdm9pZCB7XHJcbiAgICAvKiBTVEFSVDogTWVyZ2UgZmlsdGVyT3BlcmF0b3Igd2l0aCBvdXRlciBvbmUgKi9cclxuICAgIGlmICghIXRoaXMub3V0ZXJGaWx0ZXJPcGVyYXRvcnMpIHtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyT3BlcmF0b3JzJC52YWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRGaWx0ZXJPcGVyYXRvcnM6IElGaWx0ZXJPcGVyYXRvcltdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlck9wZXJhdG9ycyQudmFsdWUpKTtcclxuICAgICAgICB0aGlzLm91dGVyRmlsdGVyT3BlcmF0b3JzLm1hcCgob2ZvKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBjdXJyZW50RmlsdGVyT3BlcmF0b3JzLmZpbHRlcigobykgPT4gby5maWVsZCA9PT0gb2ZvLmZpZWxkICYmIG8ub3BlcmF0b3IgPT09IG9mby5vcGVyYXRvcik7XHJcbiAgICAgICAgICAvLyBvcHRpbWlzdGljYWxseSBmaWx0ZXIubGVuZ3RoID09PSAxXHJcbiAgICAgICAgICBpZiAoISFmaWx0ZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZpbHRlclswXS5kYXRlVGltZVZhbHVlID0gb2ZvLmRhdGVUaW1lVmFsdWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjdXJyZW50RmlsdGVyT3BlcmF0b3JzLnB1c2gob2ZvKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmZpbHRlck9wZXJhdG9ycyQubmV4dChjdXJyZW50RmlsdGVyT3BlcmF0b3JzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZpbHRlck9wZXJhdG9ycyQubmV4dCh0aGlzLm91dGVyRmlsdGVyT3BlcmF0b3JzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyogRU5EOiBDcmVhdGUvTWVyZ2UvT3ZlcndyaXRlIGZpbHRlck9wZXJhdG9yIHdpdGggb3V0ZXIgb25lICovXHJcbiAgfVxyXG4gIHRtcEZpbHRlckFjdGl2ZSE6IGJvb2xlYW47XHJcbiAgdG1wSW5PcGVyYXRvcnNBY3RpdmUhOiBib29sZWFuO1xyXG4gIHByaW1hcnlGaWx0ZXIhOiBhbnk7XHJcbiAgcHJpbWFyeUluT3BlcmF0b3JzITogSUluT3BlcmF0b3JbXTtcclxuXHJcbiAgb3V0ZXJQYXJhbVN1YnNjcmliZUZuKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMub3V0ZXJQYXJhbSQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgLy8gbWVyZ2Ugb3Igb3ZlcndyaXJlIGN1cnJlbnQgZmlsdGVyXHJcbiAgICAgICAgY29uc3QgY3VycmVudEZpbHRlciA9IHRoaXMuZmlsdGVyJC52YWx1ZTtcclxuICAgICAgICBpZiAoISFjdXJyZW50RmlsdGVyKSB7XHJcbiAgICAgICAgICBjb25zdCBuZXdGaWx0ZXIgPSB7XHJcbiAgICAgICAgICAgIC4uLmN1cnJlbnRGaWx0ZXIsXHJcbiAgICAgICAgICAgIC4uLngsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXIkLm5leHQobmV3RmlsdGVyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXIkLm5leHQoeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmNsaWNrR2VuZXJhdGVUZW1wbGF0ZSQucGlwZShcclxuICAgICAgICBtYXAoeCA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIm1hcFwiLCB4KVxyXG4gICAgICAgICAgcmV0dXJuIHg7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgZmlsdGVyKHggPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJmaWx0ZXJcIiwgISF4KVxyXG4gICAgICAgICAgcmV0dXJuICEheFxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCh4ID0+IHtcclxuICAgICAgICAgIHRoaXMubG9uZ0FwaVJ1bm5pbmcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy50ZW1wbGF0ZUZpbGVOYW1lID0gdGhpcy5nZW5lcmF0ZVRlbXBsYXRlUmVxdWVzdD8uZXhDb2RlICsgXCJfXCIgKyB4ICsgXCIueGxzeFwiXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmdlbmVyYXRlVGVtcGxhdGUodGhpcy5nZW5lcmF0ZVRlbXBsYXRlUmVxdWVzdClcclxuICAgICAgICB9KVxyXG4gICAgICApLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICB0aGlzLmxvbmdBcGlSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG5cclxuICAgICAgICAgIGlmICh4LmJvZHkuc3RhdHVzQ29kZSA9PT0gNDAwKSByZXR1cm5cclxuXHJcbiAgICAgICAgICBsZXQgZG93bmxvYWRMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgICAgICBkb3dubG9hZExpbmsuaHJlZiA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFt4LmJvZHldKSlcclxuICAgICAgICAgIGRvd25sb2FkTGluay5zZXRBdHRyaWJ1dGUoXCJkb3dubG9hZFwiLCB0aGlzLnRlbXBsYXRlRmlsZU5hbWUpO1xyXG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb3dubG9hZExpbmspO1xyXG4gICAgICAgICAgZG93bmxvYWRMaW5rLmNsaWNrKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8oXCJEb3dubG9hZCBmYWlsZWQuIFBsZWFzZSBjb250YWN0IHlvdXIgZGV2ZWxvcGVyIHRlYW0gdG8gcmVzb2x2ZVwiLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICB9XHJcbiAgICAgIH0pKVxyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UudG1wRmlsdGVyJC5waXBlKGZpbHRlcih4ID0+ICEheCAmJiAhISF0aGlzLnRtcEZpbHRlckFjdGl2ZSkpLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICB0aGlzLnByaW1hcnlGaWx0ZXIgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZmlsdGVyJC52YWx1ZSkpO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyJC5uZXh0KHgpO1xyXG4gICAgICAgIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS50bXBGaWx0ZXIkLm5leHQobnVsbCk7XHJcbiAgICAgICAgdGhpcy50bXBGaWx0ZXJBY3RpdmUgPSB0cnVlO1xyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS50bXBJbk9wZXJhdG9ycyQucGlwZShmaWx0ZXIoeCA9PiAhIXgubGVuZ3RoICYmICEhIXRoaXMudG1wSW5PcGVyYXRvcnNBY3RpdmUpKS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgdGhpcy5wcmltYXJ5SW5PcGVyYXRvcnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuaW5PcGVyYXRvcnMkLnZhbHVlKSk7XHJcbiAgICAgICAgdGhpcy5pbk9wZXJhdG9ycyQubmV4dCh4KTtcclxuICAgICAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UudG1wSW5PcGVyYXRvcnMkLm5leHQoW10pO1xyXG4gICAgICAgIHRoaXMudG1wSW5PcGVyYXRvcnNBY3RpdmUgPSB0cnVlO1xyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gICAgaWYgKCEhdGhpcy5vdXRlclNvcnQpIHtcclxuICAgICAgdGhpcy5zb3J0JC5uZXh0KHRoaXMub3V0ZXJTb3J0KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm9uSW5zdGFuY2VDcmVhdGVkLmVtaXQodGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcik7XHJcblxyXG4gICAgaWYgKCEhdGhpcy5maXhlZFBhZ2VTaXplKSB7XHJcbiAgICAgIHRoaXMucGFnZVNpemUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KHRoaXMuZml4ZWRQYWdlU2l6ZSk7XHJcbiAgICAgIHRoaXMucGFnaW5hdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElQYWdpbmF0aW9uPih7XHJcbiAgICAgICAgc2tpcDogMCxcclxuICAgICAgICB0YWtlOiB0aGlzLmZpeGVkUGFnZVNpemUsXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wYWdlU2l6ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oZGVmYXVsdFBhZ2luZy50YWtlKTtcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVBhZ2luYXRpb24+KHtcclxuICAgICAgICBza2lwOiAwLFxyXG4gICAgICAgIHRha2U6IGRlZmF1bHRQYWdpbmcudGFrZSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG5ld0F2YWlsYWJsZUNvbHVtbnNGb3JHZW5lcmFsU2VhcmNoOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgdGhpcy5jb2x1bW5zLm1hcCgoeCkgPT4ge1xyXG4gICAgICAvLyBpZiAoeC50eXBlID09PSAndGV4dCcgfHwgeC50eXBlID09PSAnc3RyaW5nJyB8fCB4LnR5cGUgPT09ICdkYXRlJyB8fCB4LnR5cGUgPT09ICdkYXRldGltZScpIHtcclxuICAgICAgLy8gaWYgKHgudHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgIGlmICh4LnR5cGUgPT09ICd0ZXh0JyB8fCB4LnR5cGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgbmV3QXZhaWxhYmxlQ29sdW1uc0ZvckdlbmVyYWxTZWFyY2gucHVzaCh4LmZpZWxkKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmF2YWlsYWJsZUNvbHVtbnNGb3JHZW5lcmFsU2VhcmNoID0gbmV3QXZhaWxhYmxlQ29sdW1uc0ZvckdlbmVyYWxTZWFyY2g7XHJcblxyXG4gICAgaWYgKCEhdGhpcy5jbGVhckRhdGEkKSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMuY2xlYXJEYXRhJFxyXG4gICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgIGZpbHRlcigoeCkgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiAhIXg7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChfKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdCA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RDaGFuZ2UuZW1pdChbXSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJEYXRhJC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wYWdpbmF0aW9uSGVpZ2h0ID0gTnVtYmVyKFxyXG4gICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcclxuICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaXplLWNvcmUtcGFnaW5hdGlvbi1oZWlnaHQnKVxyXG4gICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBzZXQgZGVmYXVsdCBzb3J0IGRpcmVjdGlvblxyXG5cclxuICAgIGNvbnN0IG5ld1NvcnQ6IElTb3J0SXRlbVtdID0gW107XHJcbiAgICB0aGlzLmNvbHVtbnMuZmlsdGVyKHggPT4geC5maWVsZCAhPT0gXCJpZFwiKS5tYXAoKGMpID0+IHtcclxuICAgICAgbmV3U29ydC5wdXNoKHtcclxuICAgICAgICBmaWVsZDogYy5maWVsZCxcclxuICAgICAgICBzb3J0RGlyZWN0aW9uOiBFbnVtU29ydERpcmVjdGlvbi5OT05FLFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgLy8gYWNjZXB0IGRlZmF1bHRzb3J0IHBhcmFtXHJcbiAgICB0aGlzLnNvcnQkLm5leHQobmV3U29ydC5tYXAodDEgPT4gKHsgLi4udDEsIC4uLnRoaXMuc29ydCQudmFsdWUuZmluZCh0MiA9PiB0Mi5maWVsZCA9PT0gdDEuZmllbGQpIH0pKSk7XHJcblxyXG4gICAgLyogU1RBUlQ6IE1lcmdlIGZpbHRlck9wZXJhdG9yIHdpdGggb3V0ZXIgb25lICovXHJcbiAgICBpZiAoISF0aGlzLm91dGVyRmlsdGVyT3BlcmF0b3JzKSB7XHJcbiAgICAgIGlmICh0aGlzLmZpbHRlck9wZXJhdG9ycyQudmFsdWUpIHtcclxuICAgICAgICBjb25zdCBjdXJyZW50RmlsdGVyT3BlcmF0b3JzOiBJRmlsdGVyT3BlcmF0b3JbXSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlck9wZXJhdG9ycyQudmFsdWUpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLm91dGVyRmlsdGVyT3BlcmF0b3JzLm1hcCgob2ZvKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBjdXJyZW50RmlsdGVyT3BlcmF0b3JzLmZpbHRlcihcclxuICAgICAgICAgICAgKG8pID0+IG8uZmllbGQgPT09IG9mby5maWVsZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIC8vIG9wdGltaXN0aWNhbGx5IGZpbHRlci5sZW5ndGggPT09IDFcclxuICAgICAgICAgIGlmICghIWZpbHRlci5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZmlsdGVyWzBdLm9wZXJhdG9yID0gb2ZvLm9wZXJhdG9yO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY3VycmVudEZpbHRlck9wZXJhdG9ycy5wdXNoKG9mbyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJPcGVyYXRvcnMkLm5leHQoY3VycmVudEZpbHRlck9wZXJhdG9ycyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJPcGVyYXRvcnMkLm5leHQodGhpcy5vdXRlckZpbHRlck9wZXJhdG9ycyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8qIEVORDogQ3JlYXRlL01lcmdlL092ZXJ3cml0ZSBmaWx0ZXJPcGVyYXRvciB3aXRoIG91dGVyIG9uZSAqL1xyXG5cclxuICAgIC8qIFNUQVJUOiBTdWJzY3JpcHRpb24gZm9yIG91dGVyUGFyYW0kICovXHJcbiAgICAvLyBTb21lIHNpbXBsZSBtYXN0ZXIgZGF0YSBkbyBub3QgaGF2ZSBvdXRlclBhcmFtJCBJTVBPUlRBTlQhISFcclxuICAgIGlmICghIXRoaXMub3V0ZXJQYXJhbSQpIHtcclxuICAgICAgdGhpcy5vdXRlclBhcmFtU3Vic2NyaWJlRm4oKTtcclxuICAgIH1cclxuICAgIC8qIEVORDogU3Vic2NyaXB0aW9uIGZvciBvdXRlclBhcmFtJCAqL1xyXG5cclxuICAgIC8qIFNUQVJUOiBTdWJzY3JpcHRpb25zIGZvciBxdWVyeUxpc3RSZXF1ZXN0JCAqL1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLm1scy5sYW5nJC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZSxcclxuICAgICAgICAgIGxhbmc6IHgsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmV4Y2x1ZGVkSWRzJC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZSxcclxuICAgICAgICAgIGV4Y2x1ZGVkSWRzOiB4XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmdlbmVyYWxTZWFyY2gkXHJcbiAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDUwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZSxcclxuICAgICAgICAgICAgZ2VuZXJhbFNlYXJjaDoge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUuZ2VuZXJhbFNlYXJjaCxcclxuICAgICAgICAgICAgICBzZWFyY2hGb3I6IHgsXHJcbiAgICAgICAgICAgICAgYXZhaWxhYmxlQ29sdW1uczogdGhpcy5hdmFpbGFibGVDb2x1bW5zRm9yR2VuZXJhbFNlYXJjaCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmZpbHRlciQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICBmaWx0ZXI6IHgsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmZpbHRlck9wZXJhdG9ycyQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICBmaWx0ZXJPcGVyYXRvcnM6IHgsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmluT3BlcmF0b3JzJC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZSxcclxuICAgICAgICAgIGluT3BlcmF0b3JzOiB4LFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICd0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkIGNoYW5nZWQ6ICcsXHJcbiAgICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlXHJcbiAgICAgICAgKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuc2VhcmNoJFxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDUwMCksXHJcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldiwgY3VycikgPT4ge1xyXG4gICAgICAgICAgICBsZXQgY29uZGl0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICghIXByZXYgfHwgISFjdXJyKSB7XHJcbiAgICAgICAgICAgICAgY29uZGl0aW9uID0gSlNPTi5zdHJpbmdpZnkocHJldikgPT09IEpTT04uc3RyaW5naWZ5KGN1cnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBjb25kaXRpb247XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgICAgICAuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgICBzZWFyY2g6ICEheD8uY3VycmVudFxyXG4gICAgICAgICAgICAgID8gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh4Py5jdXJyZW50KSlcclxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLnNvcnQkLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAuLi5KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUpKSxcclxuICAgICAgICAgIHNvcnQ6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoeCkpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uJC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZSxcclxuICAgICAgICAgIHBhZ2luYXRpb246IHgsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2VzXHJcbiAgICAgICAgLmZpbHRlcigoeCkgPT4geC5pbnN0YW5jZU51bWJlciA9PT0gdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcilbMF1cclxuICAgICAgICAucmVsb2FkRmxhZyQhLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ3RoaXMuZm9yY2VSZWxvYWRpbmdGbGFnJCBpcyBiZWluZyBjaGFuZ2VkLi4uJywgeCk7XHJcbiAgICAgICAgICB0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQubmV4dCh4KTtcclxuICAgICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgZm9yY2VSZWxvYWRpbmdGbGFnOiB4LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZSRcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkgLy8gSU1QT1JUQU5UIVxyXG4gICAgICAgIClcclxuICAgICAgICAuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcImN1cnJlbnRQYWdlIGNoYW5nZSB0b1wiLCB4KVxyXG4gICAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZSxcclxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWU/LnBhZ2luYXRpb24hLFxyXG4gICAgICAgICAgICAgIHNraXA6ICh4IC0gMSkgKiB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlPy5wYWdpbmF0aW9uPy50YWtlISxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMubG9hZGluZyQuc3Vic2NyaWJlKHggPT4gdGhpcy5sb2FkaW5nID0geClcclxuICAgIClcclxuXHJcbiAgICAvKiBFTkQ6IFN1YnNjcmlwdGlvbnMgZm9yIHF1ZXJ5TGlzdFJlcXVlc3QkICovXHJcblxyXG4gICAgLy8gUXVhbiB0cuG7jW5nOiBDb3JlUGFnZUxpc3QgY+G6p24gYmnhur90IGNow61uaCB4w6FjIGNoaeG7gXUgY2FvXHJcbiAgICAvLyBUdXkgbmhpw6puIGPDsyBuaGnhu4F1IHRyxrDhu51uZyBo4bujcCBjaGnhu4F1IGNhbyBuw6B5IGtow7RuZyDEkcaw4bujYyB0cnV54buBbiB2w6BvIGtoaSB0cmnhu4NuIGtoYWlcclxuICAgIC8vIFjDqXQgdHLGsOG7nW5nIGjhu6NwIGPDoWMgZm9ybSBkYW5oIG3hu6VjIGPGoSBi4bqjblxyXG4gICAgLy8gY29udGVudC1jb250YWluZXIgPT4gY29uc3VtZSBjb21wb25lbnQgPT4gY29yZS1wYWdlLWxpc3QgPT4gY29yZS1wYWdlLWhlYWRlciA9PiBjb3JlLWNvbXBvc2l0aW9uID0+IHRvcFJlZiArIHRhYmxlICsgcGFnaW5hdGlvblxyXG4gICAgLy8gdGEgY8OzIHRo4buDIHTDrW5oIHPhu5EgbeG6t2MgxJHhu4tuaCAobuG6v3UgaGVpZ2h0IGtow7RuZyDEkcaw4bujYyB0cnV54buBbiB2w6BvKVxyXG4gICAgaWYgKHRoaXMuaGVpZ2h0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5sYXlvdXRTZXJ2aWNlLmNvbnRlbnRDb250YWluZXJIZWlnaHQkLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgIC8vIGJhc2ljU3BhY2luZyBsw6AgcGFkZGluZ0JvdHRvbSBj4bunYSBs4bubcCBjb250ZW50LWNvbnRhaW5lclxyXG4gICAgICAgICAgdGhpcy5oZWlnaHQgPSB4IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmJhc2ljU3BhY2luZztcclxuICAgICAgICAgIHRoaXMuaGVpZ2h0JC5uZXh0KHggLSB0aGlzLmxheW91dFNlcnZpY2UuYmFzaWNTcGFjaW5nKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBvblJvd0RvdWJsZUNsaWNrKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICghIXRoaXMuc2Vla2VyTW9kZSB8fCAhIXRoaXMubWNjTW9kZSB8fCAhIXRoaXMuZGlzYWJsZURvdWJsZUNsaWNrKSB7XHJcbiAgICAgIHRoaXMucm93RG91YmxlQ2xpY2suZW1pdChldmVudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoISEhdGhpcy5zZWxmUmVzb2x2ZUNvcmVQYWdlSGVhZGVyQnV0dG9uQ2xpY2spIHtcclxuICAgICAgICB0aGlzLmNvcmVQYWdlRWRpdFNlcnZpY2UuZnJvbVVybCA9IHRoaXMucm91dGVyLnVybDtcclxuICAgICAgICBpZiAoISF0aGlzLm5vcm1hbE1vZGUpIHtcclxuICAgICAgICAgIGlmICghIXRoaXMuaGFzSWRPZlN0cmluZ1R5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgYnRvYShldmVudC5pZCksXHJcbiAgICAgICAgICAgICAgICB7IGxpc3RJbnN0YW5jZTogdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlciB9LFxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZS5wYXJlbnQsXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgYnRvYShldmVudC5pZC50b1N0cmluZygpKSxcclxuICAgICAgICAgICAgICAgIHsgbGlzdEluc3RhbmNlOiB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyIH0sXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLnBhcmVudCxcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICghIXRoaXMuaGFzSWRPZlN0cmluZ1R5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBvdXRsZXRzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29yZVBhZ2VMaXN0QXV4OiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICBidG9hKGV2ZW50LmlkKSxcclxuICAgICAgICAgICAgICAgICAgICAgIHsgbGlzdEluc3RhbmNlOiB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBvdXRsZXRzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29yZVBhZ2VMaXN0QXV4OiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICBidG9hKGV2ZW50LmlkLnRvU3RyaW5nKCkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgeyBsaXN0SW5zdGFuY2U6IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgfSxcclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucm93RG91YmxlQ2xpY2suZW1pdChldmVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uUm93Q2xpY2soZTogYW55KTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZygnQ29yUGFnZUxpc3Qgb25Sb3dDbGljayBlJywgZSk7XHJcbiAgICBpZiAoISFlLmlkKSB7XHJcbiAgICAgIHRoaXMub25DaGFuZ2UoZS5pZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICBcIlRoZSAnaWQnIGNvbHVtbnMgaXMgbnVsbC4gUGxlYXNlIGNoZWNrIHdoeVwiLFxyXG4gICAgICAgIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJvd0NsaWNrLmVtaXQoZSk7XHJcbiAgfVxyXG5cclxuICBvblRvb2xDbGljayhldmVudDogSUNvcmVUYWJsZVRvb2xDbGlja0V2ZW50RW1pdHRlckRhdGEpIHsgfVxyXG5cclxuICBvblNlYXJjaGluZyhlOiBJU2VhcmNoSXRlbVtdKTogdm9pZCB7XHJcbiAgICBjb25zdCBwcmV2ID0gISF0aGlzLnNlYXJjaCQudmFsdWU/LmN1cnJlbnRcclxuICAgICAgPyBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuc2VhcmNoJC52YWx1ZT8uY3VycmVudCkpXHJcbiAgICAgIDogbnVsbDtcclxuICAgIHRoaXMuc2VhcmNoJC5uZXh0KHtcclxuICAgICAgcHJldmlvdXM6IHByZXYhLFxyXG4gICAgICBjdXJyZW50OiBlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2l6ZUhlaWdodFdoZW5Db250YWluZXJIYXNGaXhlZEhlaWdodCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHRoaXMuaGVpZ2h0O1xyXG4gICAgY29uc3QgcGFnaW5hdGlvbkhlaWdodCA9IE51bWJlcihcclxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXHJcbiAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0tc2l6ZS1jb3JlLXBhZ2luYXRpb24taGVpZ2h0JylcclxuICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcclxuICAgICk7XHJcbiAgICBjb25zdCB0YWJsZUJvcmRlclRvcCA9IE51bWJlcihcclxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXHJcbiAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0tc2l6ZS1jb3JlLXRhYmxlLWJvcmRlci10b3AnKVxyXG4gICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBibG9ja0NlbGxTcGFjaW5nID0gTnVtYmVyKFxyXG4gICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcclxuICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaXplLWxheW91dC1ibG9jay1jZWxsLXNwYWNpbmcnKVxyXG4gICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNvcmVQYWdlTGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxyXG4gICAgICAnLS1oZWlnaHQnLFxyXG4gICAgICBjb250YWluZXJIZWlnaHQgKyAncHgnXHJcbiAgICApO1xyXG4gICAgY29uc3QgcmVsYXRlZFRhYmxlRmlsdGVyID0gdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmluc3RhbmNlcy5maWx0ZXIoXHJcbiAgICAgICh4KSA9PiB4Lmluc3RhbmNlTnVtYmVyID09PSB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyXHJcbiAgICApO1xyXG4gICAgaWYgKCEhcmVsYXRlZFRhYmxlRmlsdGVyLmxlbmd0aCkge1xyXG4gICAgICBjb25zdCByZWxhdGVkVGFibGUgPSByZWxhdGVkVGFibGVGaWx0ZXJbMF0uY29yZVRhYmxlUmVmO1xyXG4gICAgICBpZiAoISFyZWxhdGVkVGFibGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnUmVsYXRlZCBDb3JlVGFibGVDb21wb25lbnRSZWYgRk9VTkQhISEnKTtcclxuICAgICAgICAvL3NldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZlYXR1cmVIZWlnaHQgPVxyXG4gICAgICAgICAgY29udGFpbmVySGVpZ2h0IC1cclxuICAgICAgICAgIHBhZ2luYXRpb25IZWlnaHQgLVxyXG4gICAgICAgICAgdGFibGVCb3JkZXJUb3AgLVxyXG4gICAgICAgICAgMiAqIGJsb2NrQ2VsbFNwYWNpbmcgKiAwIC8qIHBhZGRpbmcgaW5jbHVlZCBpbiBvYmplY3QgaXRzZWxmICovIC1cclxuICAgICAgICAgICh0aGlzLmV4dHJhTWFudWFsT2Zmc2V0IHx8IDApO1xyXG4gICAgICAgIHJlbGF0ZWRUYWJsZS5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxyXG4gICAgICAgICAgJy0taGVpZ2h0JyxcclxuICAgICAgICAgIGZlYXR1cmVIZWlnaHQgKyAncHgnXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgZmlyc3RIZWFkZXJSb3dIZWlnaHQgPSBOdW1iZXIoXHJcbiAgICAgICAgICBnZXRDb21wdXRlZFN0eWxlKHJlbGF0ZWRUYWJsZS5uYXRpdmVFbGVtZW50KVxyXG4gICAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1oZWFkZXItMXN0LXJvdy1oZWlnaHQnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHNlY29uZEhlYWRlclJvd0hlaWdodCA9IE51bWJlcihcclxuICAgICAgICAgIGdldENvbXB1dGVkU3R5bGUocmVsYXRlZFRhYmxlLm5hdGl2ZUVsZW1lbnQpXHJcbiAgICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLWhlYWRlci0ybmQtcm93LWhlaWdodCcpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZlYXR1cmVUYm9keUhlaWdodCA9XHJcbiAgICAgICAgICBmZWF0dXJlSGVpZ2h0IC0gZmlyc3RIZWFkZXJSb3dIZWlnaHQgLSBzZWNvbmRIZWFkZXJSb3dIZWlnaHQ7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKCdmZWF0dXJlVGJvZHlIZWlnaHQnLCBmZWF0dXJlVGJvZHlIZWlnaHQpO1xyXG5cclxuICAgICAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2VzXHJcbiAgICAgICAgICAuZmlsdGVyKFxyXG4gICAgICAgICAgICAoeCkgPT4geC5pbnN0YW5jZU51bWJlciA9PT0gdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlclxyXG4gICAgICAgICAgKVswXVxyXG4gICAgICAgICAgLnRib2R5SGVpZ2h0JC5uZXh0KGZlYXR1cmVUYm9keUhlaWdodCk7XHJcbiAgICAgICAgLy99KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdSZWxhdGVkIENvcmVUYWJsZUNvbXBvbmVudFJlZiB3YXMgdW5kZWZpbmVkJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdObyByZWxhdGVkIENvcmVUYWJsZUNvbXBvbmVudFJlZiBmb3VuZCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNpemVIZWlnaHRXaGVuQ29udGFpbmVySGFzVW5kZWZpbmVkSGVpZ2h0KCk6IHZvaWQge1xyXG5cclxuICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHRoaXMubGF5b3V0U2VydmljZS5jb250ZW50Q29udGFpbmVySGVpZ2h0JC52YWx1ZTtcclxuICAgIGNvbnN0IHBhZ2VIZWFkZXJIZWlnaHQgPSB0aGlzLmxheW91dFNlcnZpY2UuY29yZVBhZ2VIZWFkZXJIZWlnaHQ7XHJcbiAgICBjb25zdCBwYWdpbmF0aW9uSGVpZ2h0ID0gdGhpcy5sYXlvdXRTZXJ2aWNlLmNvcmVQYWdpbmF0aW9uSGVpZ2h0O1xyXG4gICAgY29uc3QgdGFibGVCb3JkZXJUb3AgPSB0aGlzLmxheW91dFNlcnZpY2UudGFibGVCb3JkZXJUb3A7XHJcbiAgICBjb25zdCBiYXNpY1NwYWNpbmcgPSB0aGlzLmxheW91dFNlcnZpY2UuYmFzaWNTcGFjaW5nO1xyXG5cclxuICAgIHRoaXMuY29yZVBhZ2VMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXHJcbiAgICAgICctLWhlaWdodCcsXHJcbiAgICAgIGNvbnRhaW5lckhlaWdodCAtIDIgKiBiYXNpY1NwYWNpbmcgKyAncHgnXHJcbiAgICApO1xyXG4gICAgY29uc3QgcmVsYXRlZFRhYmxlRmlsdGVyID0gdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmluc3RhbmNlcy5maWx0ZXIoXHJcbiAgICAgICh4KSA9PiB4Lmluc3RhbmNlTnVtYmVyID09PSB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyXHJcbiAgICApO1xyXG4gICAgaWYgKCEhcmVsYXRlZFRhYmxlRmlsdGVyLmxlbmd0aCkge1xyXG5cclxuICAgICAgaWYgKCEhdGhpcy5hdXRvUmVzaXplV2l0aFdpbmRvdykge1xyXG5cclxuICAgICAgICBjb25zdCByZWxhdGVkVGFibGUgPSByZWxhdGVkVGFibGVGaWx0ZXJbMF0uY29yZVRhYmxlUmVmO1xyXG4gICAgICAgIGlmICghIXJlbGF0ZWRUYWJsZSkge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1JlbGF0ZWQgQ29yZVRhYmxlQ29tcG9uZW50UmVmIEZPVU5EISEhJyk7XHJcbiAgICAgICAgICAvL3NldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZmVhdHVyZUhlaWdodCA9XHJcbiAgICAgICAgICAgIGNvbnRhaW5lckhlaWdodCAtXHJcbiAgICAgICAgICAgIHBhZ2VIZWFkZXJIZWlnaHQgLVxyXG4gICAgICAgICAgICBwYWdpbmF0aW9uSGVpZ2h0IC1cclxuICAgICAgICAgICAgdGFibGVCb3JkZXJUb3AgLVxyXG4gICAgICAgICAgICAyICogYmFzaWNTcGFjaW5nIC1cclxuICAgICAgICAgICAgKHRoaXMuZXh0cmFNYW51YWxPZmZzZXQgfHwgMCk7XHJcbiAgICAgICAgICByZWxhdGVkVGFibGUubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcclxuICAgICAgICAgICAgJy0taGVpZ2h0JyxcclxuICAgICAgICAgICAgZmVhdHVyZUhlaWdodCArICdweCdcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgY29uc3QgZmlyc3RIZWFkZXJSb3dIZWlnaHQgPSBOdW1iZXIoXHJcbiAgICAgICAgICAgIGdldENvbXB1dGVkU3R5bGUocmVsYXRlZFRhYmxlLm5hdGl2ZUVsZW1lbnQpXHJcbiAgICAgICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0taGVhZGVyLTFzdC1yb3ctaGVpZ2h0JylcclxuICAgICAgICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCBzZWNvbmRIZWFkZXJSb3dIZWlnaHQgPSBOdW1iZXIoXHJcbiAgICAgICAgICAgIGdldENvbXB1dGVkU3R5bGUocmVsYXRlZFRhYmxlLm5hdGl2ZUVsZW1lbnQpXHJcbiAgICAgICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0taGVhZGVyLTJuZC1yb3ctaGVpZ2h0JylcclxuICAgICAgICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgY29uc3QgZmVhdHVyZVRib2R5SGVpZ2h0ID1cclxuICAgICAgICAgICAgZmVhdHVyZUhlaWdodCAtIGZpcnN0SGVhZGVyUm93SGVpZ2h0IC0gc2Vjb25kSGVhZGVyUm93SGVpZ2h0O1xyXG5cclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdmZWF0dXJlVGJvZHlIZWlnaHQnLCBmZWF0dXJlVGJvZHlIZWlnaHQpO1xyXG5cclxuICAgICAgICAgIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5pbnN0YW5jZXNcclxuICAgICAgICAgICAgLmZpbHRlcihcclxuICAgICAgICAgICAgICAoeCkgPT4geC5pbnN0YW5jZU51bWJlciA9PT0gdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlclxyXG4gICAgICAgICAgICApWzBdXHJcbiAgICAgICAgICAgIC50Ym9keUhlaWdodCQubmV4dChmZWF0dXJlVGJvZHlIZWlnaHQpO1xyXG4gICAgICAgICAgLy99KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignUmVsYXRlZCBDb3JlVGFibGVDb21wb25lbnRSZWYgd2FzIHVuZGVmaW5lZCcpO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcignTm8gcmVsYXRlZCBDb3JlVGFibGVDb21wb25lbnRSZWYgZm91bmQnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzaXplSGVpZ2h0JCgpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcclxuICAgICAgdGhpcy5oZWlnaHRSZXNpemluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMucmVzaXplSGVpZ2h0KCk7XHJcbiAgICAgIHRoaXMuaGVpZ2h0UmVzaXppbmcgPSBmYWxzZTtcclxuICAgICAgb2JzZXJ2ZXIubmV4dChuZXcgRGF0ZSgpLmdldFRpbWUoKSlcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2l6ZUhlaWdodCgpOiB2b2lkIHtcclxuICAgIGlmICghISF0aGlzLnNlZWtlck1vZGUpIHtcclxuICAgICAgLyogI3N0YXJ0IEVESVRJTkcgQ09ERSBCTE9DSyBCRUxMT1cgT05MWSBJRiBZT1UgS05PVyBBTEwgVEhFIEFQUCBERVNJR04gRkxPV1MgKi9cclxuICAgICAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cclxuICAgICAgaWYgKCEhdGhpcy5oZWlnaHQpIHtcclxuICAgICAgICB0aGlzLnJlc2l6ZUhlaWdodFdoZW5Db250YWluZXJIYXNGaXhlZEhlaWdodCgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVzaXplSGVpZ2h0V2hlbkNvbnRhaW5lckhhc1VuZGVmaW5lZEhlaWdodCgpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyB0byBkbyBzbXRoIG1heWJlXHJcbiAgICB9XHJcbiAgICAvKiAjZW5kIEVESVRJTkcgQ09ERSBCTE9DSyBCRUxMT1cgT05MWSBJRiBZT1UgS05PVyBBTEwgVEhFIEFQUCBERVNJR04gRkxPV1MgKi9cclxuICB9XHJcblxyXG4gIHF1ZXJ5TGlzdFN1YnNjcmliZSgpOiB2b2lkIHtcclxuICAgIGlmICghISF0aGlzLnF1ZXJ5TGlzdFN1YnNjcmlwdGlvbiAmJiAhIXRoaXMucXVlcnlMaXN0U3RyZWFtJCkge1xyXG4gICAgICB0aGlzLnF1ZXJ5TGlzdFN1YnNjcmlwdGlvbiA9IHRoaXMucXVlcnlMaXN0U3RyZWFtJC5zdWJzY3JpYmUoeCA9PiB0aGlzLnN1YnNjcmliZVF1ZXJ5TGlzdCh4KSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhbGN1bGF0ZVRhYmxlSGVpZ2h0QmFzZWRPbkhlaWdodEFuZFRvcFJlZkhlaWdodChoZWlnaHQ6IG51bWJlciwgdG9wUmVmSGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmIChoZWlnaHQgPT09IHVuZGVmaW5lZCB8fCB0b3BSZWZIZWlnaHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG4gICAgdGhpcy5jb21wb3NpdGlvbkhlaWdodCA9IGhlaWdodCAtICghIXRoaXMuaGlkZUhlYWRlciA/IDAgOiB0aGlzLmxheW91dFNlcnZpY2UuY29yZVBhZ2VIZWFkZXJIZWlnaHQpO1xyXG4gICAgLy8gKCF0b3BSZWZIZWlnaHQgPyAxNSA6IDApID0+IE7hur91IGPDsyBwaOG6p24gVG9wIHPhur0gY8OzIHRow6ptIG1hcmdpbkJvdHRvbSAxNXB4IGPhu6dhIG7Dsy5cclxuICAgIHRoaXMudGFibGVIZWlnaHQgPSBoZWlnaHQgLSB0aGlzLmxheW91dFNlcnZpY2UuY29yZVBhZ2VIZWFkZXJIZWlnaHQgLSB0b3BSZWZIZWlnaHQgLSB0aGlzLmxheW91dFNlcnZpY2UuY29yZVBhZ2luYXRpb25IZWlnaHQgLSAoISF0b3BSZWZIZWlnaHQgPyAxNSA6IDApICAvLyAxNXB4IGlzIG1hcmdpbkJvdHRvbSBvZiB0b3BSZWZcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIC8qKiBTVEFSVCBzZXRUaW1lb3V0ICovXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuXHJcbiAgICAgIGNvbnN0IHRyeUZpbmQgPSB0aGlzLmNvcmVCdXR0b25Hcm91cFNlcnZpY2UuaW5zdGFuY2VzLmZpbHRlcih4ID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIpO1xyXG4gICAgICBpZiAoISF0cnlGaW5kLmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuYnV0dG9uR3JvdXBTdGF0dXMgPSB0cnlGaW5kWzBdO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uR3JvdXBTdGF0dXMubXVzdEJlSGlkZGVuJC5uZXh0KEVNUFRZX1NFTEVDVElPTl9ISURERU5fQlVUVE9OKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSAmJiAhKCF0aGlzLnNlZWtlck1vZGUgfHwgIXRoaXMuaGlkZUJ1dHRvbkdyb3VwKSkge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uud2FybihcIktow7RuZyB0w6xtIHRo4bqleSBpbnN0YW5jZSBudW1iZXIgY+G7p2EgYuG7mSBuw7p0IMSRaeG7gXUga2hp4buDblwiLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGNvbXBvc2l0aW9uRmlsdGVyID0gdGhpcy5jb3JlQ29tcG9zaXRpb25TZXJ2aWNlLmluc3RhbmNlcy5maWx0ZXIoeCA9PiB4Lmluc3RhbmNlTnVtYmVyID09PSB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyKTtcclxuICAgICAgaWYgKCEhY29tcG9zaXRpb25GaWx0ZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICBjb21wb3NpdGlvbkZpbHRlclswXS50b3BSZWYkLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgdGhpcy50b3BQbGFjZUhlaWdodCQubmV4dCh4Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmhlaWdodCQuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgdGhpcy5jYWxjdWxhdGVUYWJsZUhlaWdodEJhc2VkT25IZWlnaHRBbmRUb3BSZWZIZWlnaHQoeCwgdGhpcy50b3BQbGFjZUhlaWdodCQudmFsdWUpXHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy50b3BQbGFjZUhlaWdodCQuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgdGhpcy5jYWxjdWxhdGVUYWJsZUhlaWdodEJhc2VkT25IZWlnaHRBbmRUb3BSZWZIZWlnaHQodGhpcy5oZWlnaHQkLnZhbHVlLCB4KVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMucmVzaXplSGVpZ2h0RmxhZyQucGlwZShcclxuICAgICAgICAgIHN3aXRjaE1hcChfID0+IHtcclxuICAgICAgICAgICAgdGhpcy5nZW9tZXRyaWNEb25lID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc2l6ZUhlaWdodCQoKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwicmVzaXplSGVpZ2h0RmxhZyQgc3dpdGNoTWFwIGZpbmFsIHZhbHVlXCIsIHgpXHJcbiAgICAgICAgICBpZiAoISEhdGhpcy5oZWlnaHRSZXNpemluZykgdGhpcy5nZW9tZXRyaWNEb25lID0gdHJ1ZTtcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgKVxyXG4gICAgICAvLyB0aGlzLmNhbGN1bGF0ZVRhYmxlSGVpZ2h0KCk7XHJcblxyXG4gICAgICBpZiAoISF0aGlzLnNob3dQYXJhbUtpdCkge1xyXG4gICAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIC8vIGNhbGN1bGF0aW5nIG9mZnNldCBvZiB0aGUgdG9wXHJcbiAgICAgICAgY29uc3QgdHJ5RmluZENvcmVIZWFkZXJQYXJhbXNFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcclxuICAgICAgICAgICcuY29yZS1oZWFkZXItcGFyYW1zLWNvbnRhaW5lcidcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChBcnJheS5mcm9tKHRyeUZpbmRDb3JlSGVhZGVyUGFyYW1zRWxlbWVudCkubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtID0gQXJyYXkuZnJvbSh0cnlGaW5kQ29yZUhlYWRlclBhcmFtc0VsZW1lbnQpWzBdO1xyXG4gICAgICAgICAgY29uc3QgcmVjdCA9IGl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICB0aGlzLmV4dHJhTWFudWFsT2Zmc2V0ID0gcmVjdC5oZWlnaHQgKyAxNTsgLy8gbWIxNSBpcyBtYXJnaW4tYm90dG9tIDE1cHggb2YgZm9ybSByb3dcclxuXHJcbiAgICAgICAgICB0aGlzLnJlc2l6ZUhlaWdodEZsYWckLm5leHQoISEhdGhpcy5yZXNpemVIZWlnaHRGbGFnJC52YWx1ZSk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoISEhdGhpcy5leHRyYU1hbnVhbE9mZnNldCkgdGhpcy5leHRyYU1hbnVhbE9mZnNldCA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc2l6ZUhlaWdodEZsYWckLm5leHQoISEhdGhpcy5yZXNpemVIZWlnaHRGbGFnJC52YWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCEhIXRoaXMuZXh0cmFNYW51YWxPZmZzZXQpIHRoaXMuZXh0cmFNYW51YWxPZmZzZXQgPSAwO1xyXG4gICAgICAgIHRoaXMucmVzaXplSGVpZ2h0RmxhZyQubmV4dCghISF0aGlzLnJlc2l6ZUhlaWdodEZsYWckLnZhbHVlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgdHJ5RmlsdGVyID0gdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmluc3RhbmNlc1xyXG4gICAgICAgIC5maWx0ZXIoKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIpO1xyXG4gICAgICBpZiAoISEhdHJ5RmlsdGVyLmxlbmd0aCkge1xyXG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoYENvcmVQYWdlTGlzdCBpbnN0YW5jZXMgZG8gbm90IGluY2x1ZGUgbnVtYmVyICR7dGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcn1gLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2VzXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIpWzBdXHJcbiAgICAgICAgICAgIC5pZCQucGlwZShcclxuICAgICAgICAgICAgICBmaWx0ZXIoXyA9PiAhISF0aGlzLmlkU3RhdGUpXHJcbiAgICAgICAgICAgICkuc3Vic2NyaWJlKCh4OiBhbnkpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2NvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2UgaWQkIGhhcyBjaGFuZ2VkLCB4ID0gJywgeCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICAgICAgICBpZDogeCxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCggLy8gb3V0ZXItcHVzaFxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5kaWFsb2dDb25maXJtZWQkLnBpcGUoXHJcbiAgICAgICAgICBmaWx0ZXIoaSA9PiAhISF0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSAmJiAhIWk/LmNvbmZpcm1lZCAmJiBpLmluc3RhbmNlTnVtYmVyID09PSB0aGlzLmRpYWxvZ0luc3RhbmNlTnVtYmVyKVxyXG4gICAgICAgICkuc3Vic2NyaWJlKCgpID0+IHtcclxuXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UucmVzZXRTZXJ2aWNlKClcclxuXHJcbiAgICAgICAgICBzd2l0Y2ggKHRoaXMucGVuZGluZ0FjdGlvbikge1xyXG4gICAgICAgICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfVVBMT0FEOlxyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTm93IHVwbG9hZGluZy4uLiBcIiwgdGhpcy5kYXRhSW1wb3J0KTtcclxuICAgICAgICAgICAgICAvLyB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCggLy8gbWlkZGVtLXB1c2hcclxuICAgICAgICAgICAgICAvLyApXHJcbiAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQWN0aW9uID0gbnVsbDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RFTEVURTpcclxuXHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHN5c011dGF0aW9uTG9nQmVmb3JlQWZ0ZXJSZXF1ZXN0OiBJU3lzTXV0YXRpb25Mb2dCZWZvcmVBZnRlclJlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgICAgICBzeXNGdW5jdGlvbkNvZGU6IHRoaXMucm91dGluZ1NlcnZpY2UuY3VycmVudEZ1bmN0aW9uJC52YWx1ZT8uY29kZSEsXHJcbiAgICAgICAgICAgICAgICBzeXNBY3Rpb25Db2RlOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RFTEVURSxcclxuICAgICAgICAgICAgICAgIGJlZm9yZTogSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZERhdGEpLFxyXG4gICAgICAgICAgICAgICAgYWZ0ZXI6ICdcIlwiJyxcclxuICAgICAgICAgICAgICAgIHVzZXJuYW1lOiB0aGlzLmF1dGhTZXJ2aWNlLmRhdGEkLnZhbHVlPy51c2VyTmFtZSFcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3Q6IElJZHNSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICAgICAgaWRzOiB0aGlzLnNlbGVjdGVkSWRzIGFzIG51bWJlcltdLFxyXG4gICAgICAgICAgICAgICAgc3lzTXV0YXRpb25Mb2dCZWZvcmVBZnRlclJlcXVlc3RcclxuICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAuZGVsZXRlSWRzKHJlcXVlc3QsIHRoaXMuY3J1ZC5kZWxldGVJZHMhKVxyXG4gICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDAgfHwgeC5ib2R5LnN0YXR1c0NvZGUgPT0gJzIwMCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLm5leHQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgISEhdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuaWRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gNDAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQWN0aW9uID0gbnVsbDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1VOQVBQUk9WRTpcclxuICAgICAgICAgICAgICBjb25zdCBzeXNNdXRhdGlvbkxvZ0JlZm9yZUFmdGVyU2VuZFVuYXBwcm92ZTogSVN5c011dGF0aW9uTG9nQmVmb3JlQWZ0ZXJSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICAgICAgc3lzRnVuY3Rpb25Db2RlOiB0aGlzLnJvdXRpbmdTZXJ2aWNlLmN1cnJlbnRGdW5jdGlvbiQudmFsdWU/LmNvZGUhLFxyXG4gICAgICAgICAgICAgICAgc3lzQWN0aW9uQ29kZTogRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9VTkFQUFJPVkUsXHJcbiAgICAgICAgICAgICAgICBiZWZvcmU6IEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWREYXRhKSxcclxuICAgICAgICAgICAgICAgIGFmdGVyOiAnXCJcIicsXHJcbiAgICAgICAgICAgICAgICB1c2VybmFtZTogdGhpcy5hdXRoU2VydmljZS5kYXRhJC52YWx1ZT8udXNlck5hbWUhXHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBjb25zdCBzZW5kUmVxdWVzdDogSVRvbmdsZVVuQXBwcm92ZUlkc1JlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgICAgICByZWFzb246IHRoaXMuZGlhbG9nU2VydmljZS5yZWFzb24kLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgaWRzOiB0aGlzLnNlbGVjdGVkSWRzIGFzIG51bWJlcltdLFxyXG4gICAgICAgICAgICAgICAgdmFsdWVUb0JpbmQ6IGZhbHNlXHJcbiAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgLnBvc3QodGhpcy5jcnVkLnRvZ2dsZVVuYXBwcm92ZUlkcyEsIHNlbmRSZXF1ZXN0KVxyXG4gICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDAgfHwgeC5ib2R5LnN0YXR1c0NvZGUgPT0gJzIwMCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLm5leHQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgISEhdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuaWRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gNDAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQWN0aW9uID0gbnVsbDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG5cclxuICAgICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZVdpdGhXaW5kb3cpIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgIHRoaXMucmVzaXplU3RyZWFtJC5waXBlKGRlYm91bmNlVGltZSgyMDApKS5zdWJzY3JpYmUoKF86IGFueSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yZXNpemVIZWlnaHRGbGFnJC5uZXh0KCEhIXRoaXMucmVzaXplSGVpZ2h0RmxhZyQudmFsdWUpO1xyXG5cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgLyogU1RBUlQ6IFN1YnNjcmlwdGlvbiBmb3IgbGlzdCAqL1xyXG5cclxuICAgICAgdGhpcy5xdWVyeUxpc3RTdHJlYW0kID0gdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5waXBlKFxyXG4gICAgICAgIG1hcCh4ID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwibWFwIHggPT4gXCIsIHgpXHJcbiAgICAgICAgICBjb25zdCBmaWx0ZXIxQ29uZGl0aW9uID0gISF4ICYmIC8qISF4LnNvcnQgJiYgKi8gISF4LnBhZ2luYXRpb25cclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwibWFwIGZpbHRlcjFDb25kaXRpb24gPT4gXCIsIGZpbHRlcjFDb25kaXRpb24pXHJcbiAgICAgICAgICByZXR1cm4geFxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGZpbHRlcigoeDogSVF1ZXJ5TGlzdFJlcXVlc3QpID0+ICEheCAmJiAvKiEheC5zb3J0ICYmICovICEheC5wYWdpbmF0aW9uKSxcclxuICAgICAgICBmaWx0ZXIoKF8pID0+ICF0aGlzLnBhdXNlU3Vic2N0aXB0aW9uKSxcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldiwgY3VycikgPT4ge1xyXG4gICAgICAgICAgLyogU1RBUlQ6IEFzc2ltaWxhdGlvbiBudWxsIGFuZCBub3QtZXhpc3RpbmcgcHJvcGVydHkgKi9cclxuICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICBsYW5nOiBzdHJpbmc7XHJcbiAgICAgICAgICAgICAgICBnZW5lcmFsU2VhcmNoPzogSUdlbmVyYWxTZWFyY2g7XHJcbiAgICAgICAgICAgICAgICBzb3J0PzogSVNvcnRJdGVtW107XHJcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uPzogSVBhZ2luYXRpb247XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXI/OiBhbnk7XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJPcGVyYXRvcnM/OiBJRmlsdGVyT3BlcmF0b3JbXTtcclxuICAgICAgICAgICAgICAgIGluT3BlcmF0b3JzPzogSUluT3BlcmF0b3JbXTtcclxuICAgICAgICAgICAgICAgIHNlYXJjaD86IElTZWFyY2hJdGVtW107XHJcbiAgICAgICAgICAgICAgICBpZD86IG51bWJlciB8IHN0cmluZyB8IG51bGwsXHJcbiAgICAgICAgICAgICAgICBmb3JjZVJlbG9hZGluZ0ZsYWc/OiBib29sZWFuO1xyXG4gICAgICAgICAgICAqL1xyXG5cclxuICAgICAgICAgIC8vZ2VuZXJhbFNlYXJjaFxyXG4gICAgICAgICAgaWYgKCEhIXByZXYuZ2VuZXJhbFNlYXJjaD8uc2VhcmNoRm9yKSBwcmV2LmdlbmVyYWxTZWFyY2ggPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICBpZiAoISEhY3Vyci5nZW5lcmFsU2VhcmNoPy5zZWFyY2hGb3IpIGN1cnIuZ2VuZXJhbFNlYXJjaCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgICAvLyBzb3J0XHJcbiAgICAgICAgICBpZiAoISFwcmV2LnNvcnQpIHtcclxuICAgICAgICAgICAgaWYgKHByZXYuc29ydC5sZW5ndGggPT09IDApIHByZXYuc29ydCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghIWN1cnIuc29ydCkge1xyXG4gICAgICAgICAgICBpZiAoY3Vyci5zb3J0Lmxlbmd0aCA9PT0gMCkgY3Vyci5zb3J0ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIHNlYXJjaFxyXG4gICAgICAgICAgaWYgKCEhcHJldi5zZWFyY2gpIHtcclxuICAgICAgICAgICAgaWYgKHByZXYuc2VhcmNoLmxlbmd0aCA9PT0gMCkgcHJldi5zZWFyY2ggPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoISFjdXJyLnNlYXJjaCkge1xyXG4gICAgICAgICAgICBpZiAoY3Vyci5zZWFyY2gubGVuZ3RoID09PSAwKSBjdXJyLnNlYXJjaCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBpZFxyXG4gICAgICAgICAgaWYgKCEhIXByZXYuaWQpIHByZXYuaWQgPSBudWxsO1xyXG4gICAgICAgICAgaWYgKCEhIWN1cnIuaWQpIGN1cnIuaWQgPSBudWxsO1xyXG5cclxuICAgICAgICAgIC8qIEVORDogQXNzaW1pbGF0aW9uIG51bGwgYW5kIG5vdC1leGlzdGluZyBwcm9wZXJ0eSAqL1xyXG5cclxuICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IEpTT04uc3RyaW5naWZ5KHByZXYpID09PSBKU09OLnN0cmluZ2lmeShjdXJyKTtcclxuXHJcbiAgICAgICAgICBpZiAoISEhY29uZGl0aW9uKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXAoJ0NPTVBBUklTT04nKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3ByZXYnLCBwcmV2KTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2N1cnInLCBjdXJyKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2NvbmRpdGlvbicsIGNvbmRpdGlvbik7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBjb25kaXRpb247XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgLypcclxuICAgICAgICAgIC8qIFNUQVJUOiB1c2Ugc3dpdGNoTWFwIGZvciBjYW5jZWxsYXRpb25cclxuICAgICAgICAgICovXHJcbiAgICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmdyb3VwKCdzd2l0Y2hNYXAgdHJpZ2dlcmVkJyk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcInguaWQgPSBcIiwgeC5pZClcclxuICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmFwaURlZmluaXRpb24ucXVlcnlMaXN0UmVsYXRpdmVQYXRoICsgXCI/Y29tcHV0aW5nV2l0aExvY2FsVGltZVpvbmU9dHJ1ZVwiO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5xdWVyeUxpc3QoeCwgdXJsKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgLyogRU5EOiB1c2Ugc3dpdGNoTWFwIGZvciBjYW5jZWxsYXRpb25cclxuICAgICAgICAqL1xyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5xdWVyeUxpc3RTdWJzY3JpYmUoKTtcclxuXHJcbiAgICAgIC8qIEVORDogU3Vic2NyaXB0aW9uIGZvciBsaXN0ICovXHJcbiAgICAgIC8vfSk7XHJcbiAgICB9KVxyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZXNpemVIZWlnaHRGbGFnJC5uZXh0KCEhIXRoaXMucmVzaXplSGVpZ2h0RmxhZyQudmFsdWUpLCA1MDApXHJcblxyXG4gICAgLyoqIEVORCBzZXRUaW1lb3V0Ki9cclxuICB9XHJcblxyXG4gIG9uUGFyYW1LaXRWYWx1ZUNoYW5nZShkYXRhOiBJQ29yZUNvbW1vblBhcmFtS2l0RXZlbnRFbWl0dGVyRGF0YSk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coXCJvblBhcmFtS2l0VmFsdWVDaGFuZ2VcIiwgIGRhdGEpXHJcbiAgICBzd2l0Y2ggKGRhdGEuZmllbGQpIHtcclxuICAgICAgY2FzZSAnb3JnSWRzJzpcclxuICAgICAgICBjb25zdCBuZXdPcmdJbk9wZXJhdG9yczogSUluT3BlcmF0b3JbXSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmluT3BlcmF0b3JzJC52YWx1ZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGluT3JnZmlsdGVyID0gbmV3T3JnSW5PcGVyYXRvcnMuZmlsdGVyKFxyXG4gICAgICAgICAgKHgpID0+IHguZmllbGQgPT09ICdvcmdJZCdcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChpbk9yZ2ZpbHRlci5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgIGluT3JnZmlsdGVyWzBdLnZhbHVlcyA9IGRhdGEudmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpbk9yZ2ZpbHRlci5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIG5ld09yZ0luT3BlcmF0b3JzLnB1c2goe1xyXG4gICAgICAgICAgICBmaWVsZDogJ29yZ0lkJyxcclxuICAgICAgICAgICAgdmFsdWVzOiBkYXRhLnZhbHVlLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICBgSW5PcGVyYXRvcnMgZXJyb3IgZm9yICR7ZGF0YS5maWVsZH06IGZpZWxkIG5hbWUgaXMgbm90IHVuaXF1ZSBpbiB0aGUgYXJyYXlgXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmluT3BlcmF0b3JzJC5uZXh0KG5ld09yZ0luT3BlcmF0b3JzKSlcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2dlbmVyYWxTZWFyY2gnOlxyXG4gICAgICAgIHRoaXMuZ2VuZXJhbFNlYXJjaCQubmV4dChkYXRhLnZhbHVlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZGF0ZUZyb20nOlxyXG4gICAgICAgIGNvbnN0IG5ld0Zyb21GaWx0ZXJPcGVyYXRvcnM6IElGaWx0ZXJPcGVyYXRvcltdID0gSlNPTi5wYXJzZShcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuZmlsdGVyT3BlcmF0b3JzJC52YWx1ZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGZpbHRlckZyb20gPSBuZXdGcm9tRmlsdGVyT3BlcmF0b3JzLmZpbHRlcihcclxuICAgICAgICAgICh4KSA9PlxyXG4gICAgICAgICAgICB4LmZpZWxkID09PSB0aGlzLmRhdGVQZXJpb2RDb21wYXJpc29uRm9yICYmXHJcbiAgICAgICAgICAgIHgub3BlcmF0b3IgPT09IEVudW1GaWx0ZXJPcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChmaWx0ZXJGcm9tLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgaWYgKCEhZGF0YS52YWx1ZSkge1xyXG4gICAgICAgICAgICBmaWx0ZXJGcm9tWzBdLmRhdGVUaW1lVmFsdWUgPSBuZXcgRGF0ZShcclxuICAgICAgICAgICAgICAoZGF0YS52YWx1ZSBhcyBEYXRlKS5zZXRIb3VycygwLCAwLCAwLCAwKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZmlsdGVyRnJvbVswXS5kYXRlVGltZVZhbHVlID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlckZyb20ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICBpZiAoISFkYXRhLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIG5ld0Zyb21GaWx0ZXJPcGVyYXRvcnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgZmllbGQ6IHRoaXMuZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3IsXHJcbiAgICAgICAgICAgICAgb3BlcmF0b3I6IEVudW1GaWx0ZXJPcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUwsXHJcbiAgICAgICAgICAgICAgZGF0ZVRpbWVWYWx1ZTogbmV3IERhdGUoXHJcbiAgICAgICAgICAgICAgICAoZGF0YS52YWx1ZSBhcyBEYXRlKS5zZXRIb3VycygwLCAwLCAwLCAwKVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgYEZpbHRlck9wZXJhdG9ycyBlcnJvciBmb3IgJHtkYXRhLmZpZWxkfTogY29tYmluYXRpb24gb2YgZmllbGQgbmFtZSBhbmQgb3BlcmF0b3IgbmFtZSBpcyBub3QgdW5pcXVlIGluIHRoZSBhcnJheWBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZpbHRlck9wZXJhdG9ycyQubmV4dChuZXdGcm9tRmlsdGVyT3BlcmF0b3JzKTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2RhdGVUbyc6XHJcbiAgICAgICAgY29uc3QgbmV3VG9GaWx0ZXJPcGVyYXRvcnM6IElGaWx0ZXJPcGVyYXRvcltdID0gSlNPTi5wYXJzZShcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuZmlsdGVyT3BlcmF0b3JzJC52YWx1ZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGZpbHRlclRvID0gbmV3VG9GaWx0ZXJPcGVyYXRvcnMuZmlsdGVyKFxyXG4gICAgICAgICAgKHgpID0+XHJcbiAgICAgICAgICAgIHguZmllbGQgPT09IHRoaXMuZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3IgJiZcclxuICAgICAgICAgICAgeC5vcGVyYXRvciA9PT0gRW51bUZpbHRlck9wZXJhdG9yLkxFU1NfVEhBTl9PUl9FUVVBTFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGZpbHRlclRvLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgaWYgKCEhZGF0YS52YWx1ZSkge1xyXG4gICAgICAgICAgICBmaWx0ZXJUb1swXS5kYXRlVGltZVZhbHVlID0gbmV3IERhdGUoXHJcbiAgICAgICAgICAgICAgKGRhdGEudmFsdWUgYXMgRGF0ZSkuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZmlsdGVyVG9bMF0uZGF0ZVRpbWVWYWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXJUby5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIGlmICghIWRhdGEudmFsdWUpIHtcclxuICAgICAgICAgICAgbmV3VG9GaWx0ZXJPcGVyYXRvcnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgZmllbGQ6IHRoaXMuZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3IsXHJcbiAgICAgICAgICAgICAgb3BlcmF0b3I6IEVudW1GaWx0ZXJPcGVyYXRvci5MRVNTX1RIQU5fT1JfRVFVQUwsXHJcbiAgICAgICAgICAgICAgZGF0ZVRpbWVWYWx1ZTogbmV3IERhdGUoXHJcbiAgICAgICAgICAgICAgICAoZGF0YS52YWx1ZSBhcyBEYXRlKS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpXHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICBgRmlsdGVyT3BlcmF0b3JzIGVycm9yIGZvciAke2RhdGEuZmllbGR9OiBjb21iaW5hdGlvbiBvZiBmaWVsZCBuYW1lIGFuZCBvcGVyYXRvciBuYW1lIGlzIG5vdCB1bmlxdWUgaW4gdGhlIGFycmF5YFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmlsdGVyT3BlcmF0b3JzJC5uZXh0KG5ld1RvRmlsdGVyT3BlcmF0b3JzKTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3N0YXR1c0lkcyc6XHJcbiAgICAgICAgY29uc3QgbmV3SW5PcGVyYXRvcnM6IElJbk9wZXJhdG9yW10gPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5pbk9wZXJhdG9ycyQudmFsdWUpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBpbmZpbHRlciA9IG5ld0luT3BlcmF0b3JzLmZpbHRlcihcclxuICAgICAgICAgICh4KSA9PiB4LmZpZWxkID09PSB0aGlzLnN0YXR1c0luY2x1c2lvbkZvclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGluZmlsdGVyLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgaW5maWx0ZXJbMF0udmFsdWVzID0gZGF0YS52YWx1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGluZmlsdGVyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgbmV3SW5PcGVyYXRvcnMucHVzaCh7XHJcbiAgICAgICAgICAgIGZpZWxkOiB0aGlzLnN0YXR1c0luY2x1c2lvbkZvcixcclxuICAgICAgICAgICAgdmFsdWVzOiBkYXRhLnZhbHVlLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICBgSW5PcGVyYXRvcnMgZXJyb3IgZm9yICR7ZGF0YS5maWVsZH06IGZpZWxkIG5hbWUgaXMgbm90IHVuaXF1ZSBpbiB0aGUgYXJyYXlgXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmluT3BlcmF0b3JzJC5uZXh0KG5ld0luT3BlcmF0b3JzKSlcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHBvcnRUb0V4Y2VsKCk6IHZvaWQge1xyXG4gICAgLyogUGjGsMahbmcgcGjDoXAgeHXhuqV0IENTViAqL1xyXG4gICAgLyogQ+G6p24gdGhheSBi4bqxbmcgeHXhuqV0IEVYQ0VMIGLhurFuZyBCYWNrZW5kICovXHJcbiAgICAvKlxyXG4gICAgY29uc3QgY3N2RGF0YTogYW55W11bXSA9IFtdO1xyXG5cclxuICAgIGxldCByb3cxOiBhbnlbXSA9IFtdO1xyXG4gICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcigoeCkgPT4geC5maWVsZCAhPSAnaWQnKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMuY29sdW1ucylcclxuICAgIHRoaXMuY29sdW1ucy5tYXAoKHgpID0+IHtcclxuICAgICAgcm93MS5wdXNoKHRoaXMubWxzLnRyYW5zKHguY2FwdGlvbikpO1xyXG4gICAgfSk7XHJcbiAgICBjc3ZEYXRhLnB1c2gocm93MSk7XHJcblxyXG4gICAgdGhpcy5saXN0Lm1hcCgocm93LCBpbmRleCkgPT4ge1xyXG4gICAgICBjb25zdCBjdXJyZW50Um93OiBhbnlbXSA9IFtdO1xyXG4gICAgICB0aGlzLmNvbHVtbnMubWFwKChjb2x1bW4pID0+IHtcclxuICAgICAgICBpZiAoY29sdW1uLmZpZWxkICE9ICdpZCcpIHtcclxuICAgICAgICAgIGxldCBjdXJyZW50Q2VsbCA9IHJvd1tjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50Q2VsbD8ucmVwbGFjZUFsbCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBjdXJyZW50Q2VsbCA9IGN1cnJlbnRDZWxsLnJlcGxhY2VBbGwoJywnLCAnOycpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY3VycmVudFJvdy5wdXNoKGN1cnJlbnRDZWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY3N2RGF0YS5wdXNoKGN1cnJlbnRSb3cpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IGNzdkNvbnRlbnQgPSBjc3ZEYXRhLm1hcCgoZSkgPT4gZS5qb2luKCcsJykpLmpvaW4oJ1xcbicpO1xyXG5cclxuICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgbGluay5zZXRBdHRyaWJ1dGUoXHJcbiAgICAgICdocmVmJyxcclxuICAgICAgJ2RhdGE6dGV4dC9jc3Y7Y2hhcnNldD11dGYtOCwlRUYlQkIlQkYnICsgZW5jb2RlVVJJKGNzdkNvbnRlbnQpXHJcbiAgICApO1xyXG4gICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgJ0V4cG9ydEV4ZWwuY3N2Jyk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xyXG4gICAgbGluay5jbGljaygpO1xyXG4gICAgKi9cclxuICAgIC8qXHJcbiAgICBC4bqvdCDEkeG6p3UgeHXhuqV0IEV4Y2VsIGLhurFuZyBCYWNrZW5kXHJcbiAgICAqL1xyXG5cclxuICAgIC8vIFRodSB0aOG6rXAgbmhpw6puIGxp4buHdVxyXG5cclxuICAgIGlmICghdGhpcy5pbm5lckJvZHlDb3VudCQudmFsdWUpIHtcclxuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbyh0aGlzLm1scy50cmFucygnWExTWF9OT19SRVNVTFRfVE9fRVhQT1JUJyksIGFsZXJ0T3B0aW9ucyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB1cmwgPSB0aGlzLmFwaURlZmluaXRpb24ucXVlcnlMaXN0UmVsYXRpdmVQYXRoO1xyXG4gICAgY29uc3QgeCA9IHRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWU7IC8vIEPhuqduIGxv4bqhaSBi4buPIHBhZ2luZyBraOG7j2kgxJHhu5FpIHTGsOG7o25nIG7DoHlcclxuXHJcbiAgICB4LnBhZ2luYXRpb24gPSB7XHJcbiAgICAgIHNraXA6IDAsXHJcbiAgICAgIHRha2U6IHRoaXMuaW5uZXJCb2R5Q291bnQkLnZhbHVlXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGFwaVN0cmVhbSQ6IE9ic2VydmFibGU8YW55PjtcclxuICAgIC8vIE7hur91IGPDsyBkw7JuZyBk4buvIGxp4buHdSBjaGVja2VkIHRow6wgY2jhu4kgeHXhuqV0IGPDoWMgZMOybmcgbsOgeVxyXG4gICAgaWYgKCEhdGhpcy5zZWxlY3RlZERhdGEubGVuZ3RoKSB7XHJcbiAgICAgIGFwaVN0cmVhbSQgPSBuZXcgT2JzZXJ2YWJsZTxhbnk+KG9ic2VydmVyID0+IHtcclxuICAgICAgICBvYnNlcnZlci5uZXh0KHtcclxuICAgICAgICAgIG9rOiB0cnVlLFxyXG4gICAgICAgICAgc3RhdHVzOiAyMDAsXHJcbiAgICAgICAgICBib2R5OiB7XHJcbiAgICAgICAgICAgIHN0YXR1c0NvZGU6IDIwMCxcclxuICAgICAgICAgICAgaW5uZXJCb2R5OiB7XHJcbiAgICAgICAgICAgICAgbGlzdDogdGhpcy5zZWxlY3RlZERhdGFcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gVHLDoWkgbOG6oWksIHh14bqldCAxMDAlIHNhdSBraGkgxJHDoyBs4buNYyAodG/DoG4gYuG7mSBjw6FjIHRyYW5nKVxyXG4gICAgICBhcGlTdHJlYW0kID0gdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLnF1ZXJ5TGlzdCh4LCB1cmwpO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgLy8gSXQncyB0aW1lIHRvIHN1YnNjcmliZSBhcGlTdHJlYW0kXHJcbiAgICB0aGlzLnByZWZldGNoTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgYXBpU3RyZWFtJC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgdGhpcy5wcmVmZXRjaExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAvL3RoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoYCR7Ym9keS5pbm5lckJvZHkuY291bnR9IHJvd3Mgb2YgZGF0YSBmZXRjaGVkLiBJdCBpcyB0aW1lIHRvIGRvIHdpdGggYmFja2VuZCBleGNlbCBleHBvcnRpbmdgLCBhbGVydE9wdGlvbnMpXHJcblxyXG4gICAgICAgICAgICBjb25zdCBhcGlQb2ludCA9IGFwaS5YTFNYX0VYUE9SVF9DT1JFX1BBR0VfTElTVF9UT19FWENFTDtcclxuICAgICAgICAgICAgY29uc3QgZmxhdENvbHVtbnM6IElDb3JlVGFibGVGbGF0Q29sdW1uSXRlbVtdID0gW107XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMuZmlsdGVyKHggPT4gIXguaGlkZGVuKS5tYXAoYyA9PiB7XHJcbiAgICAgICAgICAgICAgZmxhdENvbHVtbnMucHVzaChcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgY2FwdGlvbjogYy5jYXB0aW9uLFxyXG4gICAgICAgICAgICAgICAgICBmaWVsZDogYy5maWVsZCxcclxuICAgICAgICAgICAgICAgICAgdHlwZTogYy50eXBlLFxyXG4gICAgICAgICAgICAgICAgICBwaXBlOiBjLnBpcGUsXHJcbiAgICAgICAgICAgICAgICAgIGFsaWduOiBjLmFsaWduLFxyXG4gICAgICAgICAgICAgICAgICB3aWR0aDogYy53aWR0aCxcclxuICAgICAgICAgICAgICAgICAgaGlkZGVuOiBjLmhpZGRlblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZsYXREYXRhOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgICAgICBmbGF0Q29sdW1ucy5tYXAoYyA9PiBrZXlzLnB1c2goYy5maWVsZCkpO1xyXG4gICAgICAgICAgICBib2R5LmlubmVyQm9keS5saXN0Lm1hcCgocm93OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBlOiBhbnkgPSB7fTtcclxuICAgICAgICAgICAgICBrZXlzLm1hcChrID0+IHtcclxuICAgICAgICAgICAgICAgIGVba10gPSByb3dba107XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICBmbGF0RGF0YS5wdXNoKGUpO1xyXG4gICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgICAgY29uc3Qgb2JqID0ge1xyXG4gICAgICAgICAgICAgIGNvbHVtbnM6IGZsYXRDb2x1bW5zLFxyXG4gICAgICAgICAgICAgIGRhdGE6IGZsYXREYXRhXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLmpzb25TZXJ2aWNlLnN0cmluZ2lmeShvYmopO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5sb25nQXBpUnVubmluZyA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmV4cG9ydENvcmVQYWdlTGlzdEdyaWRUb0V4Y2VsU3Vic2NyaXB0aW9uID0gdGhpcy5hcHBTZXJ2aWNlLmJsb2JQb3N0KGFwaVBvaW50LCBwYXlsb2FkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMubG9uZ0FwaVJ1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuYm9keS5zdGF0dXNDb2RlID09PSA0MDApIHJldHVyblxyXG5cclxuICAgICAgICAgICAgICBsZXQgZG93bmxvYWRMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgICAgICAgICAgZG93bmxvYWRMaW5rLmhyZWYgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbcmVzcG9uc2UuYm9keV0pKVxyXG4gICAgICAgICAgICAgIGRvd25sb2FkTGluay5zZXRBdHRyaWJ1dGUoXCJkb3dubG9hZFwiLCB0aGlzLm1scy50cmFucyh0aGlzLnRpdGxlKSArIFwiLnhsc3hcIik7XHJcbiAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb3dubG9hZExpbmspO1xyXG4gICAgICAgICAgICAgIGRvd25sb2FkTGluay5jbGljaygpO1xyXG4gICAgICAgICAgICB9KVxyXG5cclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKVxyXG5cclxuICB9XHJcblxyXG4gIG9uQ29yZVBhZ2VIZWFkZXJCdXR0b25DbGljayhlOiBJQ29yZUJ1dHRvblZOUyk6IHZvaWQge1xyXG4gICAgdGhpcy5jb3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrLmVtaXQoZSk7XHJcblxyXG4gICAgc3dpdGNoIChlLmNvZGUpIHtcclxuXHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9DUkVBVEU6XHJcblxyXG4gICAgICAgIGlmICghISF0aGlzLnNlbGZSZXNvbHZlQ29yZVBhZ2VIZWFkZXJCdXR0b25DbGljaykge1xyXG5cclxuICAgICAgICAgIHRoaXMuY29yZVBhZ2VFZGl0U2VydmljZS5mcm9tVXJsID0gdGhpcy5yb3V0ZXIudXJsO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLm5vcm1hbE1vZGUpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgIFtidG9hKCcwJyksIHsgbGlzdEluc3RhbmNlOiB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyIH1dLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUucGFyZW50LFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgb3V0bGV0czoge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcmVQYWdlTGlzdEF1eDogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnRvYSgnMCcpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgeyBsaXN0SW5zdGFuY2U6IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgfSxcclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0VESVQ6XHJcbiAgICAgICAgaWYgKCEhIXRoaXMuc2VsZlJlc29sdmVDb3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrKSB7XHJcblxyXG4gICAgICAgICAgdGhpcy5jb3JlUGFnZUVkaXRTZXJ2aWNlLmZyb21VcmwgPSB0aGlzLnJvdXRlci51cmw7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZElkcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKHRoaXMubWxzLnRyYW5zKCdTRUxFQ1RfT05MWV9PTkVfUkVDT1JEX1RPX0VESVQnKSwgYWxlcnRPcHRpb25zKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZElkcy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgIGlmICghIXRoaXMubm9ybWFsTW9kZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgICAgICBbYnRvYSgnJyArIHRoaXMuc2VsZWN0ZWRJZHNbMF0pLCB7IGxpc3RJbnN0YW5jZTogdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlciB9XSxcclxuICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUucGFyZW50LFxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIG91dGxldHM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29yZVBhZ2VMaXN0QXV4OiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnRvYSgnJyArIHRoaXMuc2VsZWN0ZWRJZHNbMF0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGlzdEluc3RhbmNlOiB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcih0aGlzLm1scy50cmFucygnTk9fU0VMRUNURURfSURfVE9fRURJVCcpLCBhbGVydE9wdGlvbnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfQUNUSVZBVEU6XHJcbiAgICAgICAgaWYgKCEhdGhpcy5zZWxlY3RlZElkcy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2VsZWN0ZWRJZHNbMF0gIT09ICdudW1iZXInXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbyhcclxuICAgICAgICAgICAgICB0aGlzLm1scy50cmFucyhcclxuICAgICAgICAgICAgICAgIEVudW1UcmFuc2xhdGVLZXkuQ09SRV9QQUdFX0xJU1RfQUNUSVZFX0lEU19NRVRIT0RfU1VQT1JUU19PTkxZX05VTUJFUl9UWVBFXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKCdOT19TRUxFQ1RFRF9JRF9UT19BQ1RJVkFURScpLFxyXG4gICAgICAgICAgICBhbGVydE9wdGlvbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVxdWVzdDogSVRvZ2dsZUFjdGl2ZUlkc1JlcXVlc3QgPSB7XHJcbiAgICAgICAgICB2YWx1ZVRvQmluZDogdHJ1ZSxcclxuICAgICAgICAgIGlkczogdGhpcy5zZWxlY3RlZElkcyBhcyBudW1iZXJbXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGNvbmZpcm1BY3RpdmUgPSB3aW5kb3cuY29uZmlybShcclxuICAgICAgICAgIHRoaXMubWxzLnRyYW5zKCdjb21tb24uY29uZmlybS5kZWxldGUuYWN0aXZlLnByZWZpeCcpICtcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRJZHMpICtcclxuICAgICAgICAgICc/J1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGNvbmZpcm1BY3RpdmUpIHtcclxuICAgICAgICAgIGlmICghIXRoaXMuY3J1ZC50b2dnbGVBY3RpdmVJZHMpIHtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLnBvc3QodGhpcy5jcnVkLnRvZ2dsZUFjdGl2ZUlkcywgcmVxdWVzdClcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCB8fCB4LmJvZHkuc3RhdHVzQ29kZSA9PSAnMjAwJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLm5leHQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICEhIXRoaXMuZm9yY2VSZWxvYWRpbmdGbGFnJC52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuaWRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uud2Fybih0aGlzLm1scy50cmFucyhFbnVtVHJhbnNsYXRlS2V5Lk5PX0FQSV9FTkRfUE9JTlRfUFJPVklERURfRk9SX0FDVElWQVRJT04pLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0lOQUNUSVZBVEU6XHJcblxyXG4gICAgICAgIGlmICghIXRoaXMuc2VsZWN0ZWRJZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnNlbGVjdGVkSWRzWzBdICE9PSAnbnVtYmVyJ1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8oXHJcbiAgICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoXHJcbiAgICAgICAgICAgICAgICBFbnVtVHJhbnNsYXRlS2V5LkNPUkVfUEFHRV9MSVNUX0lOQUNUSVZFX0lEU19NRVRIT0RfU1VQT1JUU19PTkxZX05VTUJFUl9UWVBFXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKCdOT19TRUxFQ1RFRF9JRF9UT19JTkFDVElWQVRFJyksXHJcbiAgICAgICAgICAgIGFsZXJ0T3B0aW9uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwYXlsb2FkOiBJVG9nZ2xlQWN0aXZlSWRzUmVxdWVzdCA9IHtcclxuICAgICAgICAgIHZhbHVlVG9CaW5kOiBmYWxzZSxcclxuICAgICAgICAgIGlkczogdGhpcy5zZWxlY3RlZElkcyBhcyBudW1iZXJbXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGNvbmZpcm1JbmFjdGl2ZSA9IHdpbmRvdy5jb25maXJtKFxyXG4gICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ2NvbW1vbi5jb25maXJtLmRlbGV0ZS5pbmFjdGl2ZS5wcmVmaXgnKSArXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkSWRzKSArXHJcbiAgICAgICAgICAnPydcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChjb25maXJtSW5hY3RpdmUpIHtcclxuICAgICAgICAgIGlmICghIXRoaXMuY3J1ZC50b2dnbGVBY3RpdmVJZHMpIHtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLnBvc3QodGhpcy5jcnVkLnRvZ2dsZUFjdGl2ZUlkcywgcGF5bG9hZClcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCB8fCB4LmJvZHkuc3RhdHVzQ29kZSA9PSAnMjAwJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLm5leHQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICEhIXRoaXMuZm9yY2VSZWxvYWRpbmdGbGFnJC52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuaWRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uud2Fybih0aGlzLm1scy50cmFucyhFbnVtVHJhbnNsYXRlS2V5Lk5PX0FQSV9FTkRfUE9JTlRfUFJPVklERURfRk9SX0FDVElWQVRJT04pLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RFTEVURTpcclxuICAgICAgICBpZiAoISF0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZWxlY3RlZElkc1swXSAhPT0gJ251bWJlcicgJiZcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2VsZWN0ZWRJZHNbMF0gIT09ICdzdHJpbmcnXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbyhcclxuICAgICAgICAgICAgICB0aGlzLm1scy50cmFucyhcclxuICAgICAgICAgICAgICAgICdDT1JFX1BBR0VfTElTVF9ERUxFVEVfSURTX01FVEhPRF9TVVBPUlRTX09OTFlfTlVNQkVSX0FORF9TVFJJTkdfVFlQRVMnXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKCdOT19TRUxFQ1RFRF9JRF9UT19ERUxFVEUnKSxcclxuICAgICAgICAgICAgYWxlcnRPcHRpb25zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoISF0aGlzLmRlbGV0ZVZhbGlkYXRlRm4pIHtcclxuXHJcbiAgICAgICAgICBjb25zdCB2YWxpZGF0ZWQ6IGJvb2xlYW4gPSB0aGlzLmRlbGV0ZVZhbGlkYXRlRm4odGhpcy5zZWxlY3RlZERhdGEpO1xyXG4gICAgICAgICAgaWYgKCEhIXZhbGlkYXRlZCkgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wZW5kaW5nQWN0aW9uID0gRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9ERUxFVEVcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudGl0bGUkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0RJQUxPR19TRVJWSUNFX0NPTkZJUk1BVElPTilcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub2tCdXR0b25UZXh0JC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9DT05GSVJNX0RJQUxPR19CVVRUT05fQ09ORklSTSlcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2FuY2VsQnV0dG9uVGV4dCQubmV4dChFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfQ09ORklSTV9ESUFMT0dfQlVUVE9OX0NBTkNFTClcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0NhbmNlbE9ubHkkLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5idXN5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYm9keSQubmV4dChFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfRElBTE9HX1NFUlZJQ0VfQVJFX1lPVV9TVVJFX1RPX0RFTEVURSk7XHJcbiAgICAgICAgbGV0IGxpc3REZWxldGVJZHM6IGFueVtdID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgIGxpc3REZWxldGVJZHMucHVzaCh4W3RoaXMuY29sdW1uc1sxXS5maWVsZF0pXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVEaWFsb2dJbmZvcm1hdGlvbkxpbmVzKSB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuaW5mb3JtYXRpb25MaW5lcyQubmV4dChsaXN0RGVsZXRlSWRzKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuaW5mb3JtYXRpb25MaW5lcyQubmV4dChbXSlcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dDb25maXJtRGlhbG9nJC5uZXh0KHRydWUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1VOQVBQUk9WRTpcclxuICAgICAgICBpZiAoISF0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZWxlY3RlZElkc1swXSAhPT0gJ251bWJlcicgJiZcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2VsZWN0ZWRJZHNbMF0gIT09ICdzdHJpbmcnXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbyhcclxuICAgICAgICAgICAgICB0aGlzLm1scy50cmFucyhcclxuICAgICAgICAgICAgICAgICdDT1JFX1BBR0VfTElTVF9ERUxFVEVfSURTX01FVEhPRF9TVVBPUlRTX09OTFlfTlVNQkVSX0FORF9TVFJJTkdfVFlQRVMnXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKCdOT19TRUxFQ1RFRF9JRF9UT19ERUxFVEUnKSxcclxuICAgICAgICAgICAgYWxlcnRPcHRpb25zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoISF0aGlzLmRlbGV0ZVZhbGlkYXRlRm4pIHtcclxuXHJcbiAgICAgICAgICBjb25zdCB2YWxpZGF0ZWQ6IGJvb2xlYW4gPSB0aGlzLmRlbGV0ZVZhbGlkYXRlRm4odGhpcy5zZWxlY3RlZERhdGEpO1xyXG4gICAgICAgICAgaWYgKCEhIXZhbGlkYXRlZCkgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wZW5kaW5nQWN0aW9uID0gRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9VTkFQUFJPVkVcclxuICAgICAgICAvLyB0aGlzLmRpYWxvZ1NlcnZpY2UudGl0bGUkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0RJQUxPR19TRVJWSUNFX0NPTkZJUk1BVElPTilcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub2tCdXR0b25UZXh0JC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9DT05GSVJNX0RJQUxPR19CVVRUT05fQ09ORklSTSlcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2FuY2VsQnV0dG9uVGV4dCQubmV4dChFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfQ09ORklSTV9ESUFMT0dfQlVUVE9OX0NBTkNFTClcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0NhbmNlbE9ubHkkLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5idXN5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYm9keSQubmV4dChFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfRElBTE9HX1NFUlZJQ0VfQVJFX1lPVV9VTkFQUFJPVkVfSU5QVVRfUkVBU09OKTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd2luZ1VwJC5uZXh0KHRydWUpXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dDb25maXJtRGlhbG9nJC5uZXh0KHRydWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfQVBQUk9WRTpcclxuICAgICAgICBpZiAoISF0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZWxlY3RlZElkc1swXSAhPT0gJ251bWJlcidcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKFxyXG4gICAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKFxyXG4gICAgICAgICAgICAgICAgRW51bVRyYW5zbGF0ZUtleS5DT1JFX1BBR0VfTElTVF9BQ1RJVkVfSURTX01FVEhPRF9TVVBPUlRTX09OTFlfTlVNQkVSX1RZUEVcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ05PX1NFTEVDVEVEX0lEX1RPX0FQUFJPVkUnKSxcclxuICAgICAgICAgICAgYWxlcnRPcHRpb25zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlcXVlc3RBcHByb3ZlOiBJVG9nZ2xlQXBwcm92ZUlkc1JlcXVlc3QgPSB7XHJcbiAgICAgICAgICB2YWx1ZVRvQmluZDogdHJ1ZSxcclxuICAgICAgICAgIGlkczogdGhpcy5zZWxlY3RlZElkcyBhcyBudW1iZXJbXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGNvbmZpcm1BcHByb3ZlID0gd2luZG93LmNvbmZpcm0oXHJcbiAgICAgICAgICB0aGlzLm1scy50cmFucygnY29tbW9uLmNvbmZpcm0uYXBwcm92ZS5wcmVmaXgnKSArXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkSWRzKSArXHJcbiAgICAgICAgICAnPydcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChjb25maXJtQXBwcm92ZSkge1xyXG4gICAgICAgICAgaWYgKCEhdGhpcy5jcnVkLnRvZ2dsZUFwcHJvdmVJZHMpIHtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLnBvc3QodGhpcy5jcnVkLnRvZ2dsZUFwcHJvdmVJZHMsIHJlcXVlc3RBcHByb3ZlKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwIHx8IHguYm9keS5zdGF0dXNDb2RlID09ICcyMDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQubmV4dChcclxuICAgICAgICAgICAgICAgICAgICAgICAgISEhdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5pZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS53YXJuKHRoaXMubWxzLnRyYW5zKEVudW1UcmFuc2xhdGVLZXkuTk9fQVBJX0VORF9QT0lOVF9QUk9WSURFRF9GT1JfQUNUSVZBVElPTiksIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfUEVORElOR19BUFBST1ZFOlxyXG4gICAgICAgIGlmICghIXRoaXMuc2VsZWN0ZWRJZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnNlbGVjdGVkSWRzWzBdICE9PSAnbnVtYmVyJ1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8oXHJcbiAgICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoXHJcbiAgICAgICAgICAgICAgICBFbnVtVHJhbnNsYXRlS2V5LkNPUkVfUEFHRV9MSVNUX0FDVElWRV9JRFNfTUVUSE9EX1NVUE9SVFNfT05MWV9OVU1CRVJfVFlQRVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICB0aGlzLm1scy50cmFucygnTk9fU0VMRUNURURfSURfVE9fUEVORElOR19BUFBST1ZFJyksXHJcbiAgICAgICAgICAgIGFsZXJ0T3B0aW9uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXF1ZXN0UGVuZGluZ0FwcHJvdmU6IElUb2dnbGVBcHByb3ZlSWRzUmVxdWVzdCA9IHtcclxuICAgICAgICAgIHZhbHVlVG9CaW5kOiBmYWxzZSxcclxuICAgICAgICAgIGlkczogdGhpcy5zZWxlY3RlZElkcyBhcyBudW1iZXJbXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGNvbmZpcm1QZW5kaW5nQXBwcm92ZSA9IHdpbmRvdy5jb25maXJtKFxyXG4gICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ2NvbW1vbi5jb25maXJtLnBlbmRpbmcuYXBwcm92ZS5wcmVmaXgnKSArXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkSWRzKSArXHJcbiAgICAgICAgICAnPydcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChjb25maXJtUGVuZGluZ0FwcHJvdmUpIHtcclxuICAgICAgICAgIGlmICghIXRoaXMuY3J1ZC50b2dnbGVBcHByb3ZlSWRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgIHRoaXMuYXBwU2VydmljZS5wb3N0KHRoaXMuY3J1ZC50b2dnbGVBcHByb3ZlSWRzLCByZXF1ZXN0UGVuZGluZ0FwcHJvdmUpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDAgfHwgeC5ib2R5LnN0YXR1c0NvZGUgPT0gJzIwMCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9yY2VSZWxvYWRpbmdGbGFnJC5uZXh0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAhISF0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQudmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmlkcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLndhcm4odGhpcy5tbHMudHJhbnMoRW51bVRyYW5zbGF0ZUtleS5OT19BUElfRU5EX1BPSU5UX1BST1ZJREVEX0ZPUl9BQ1RJVkFUSU9OKSwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9FWFBPUlRFWEVMOlxyXG5cclxuICAgICAgICB0aGlzLmV4cG9ydFRvRXhjZWwoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RPV05MT0FEOlxyXG4gICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiSEVBREVSX0RPV05MT0FEIGNsaWNrZWRcIiwgbm93KTtcclxuICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgaW1wb3J0LXNhbGFyeS1iYWNrZGF0ZWApISA8IDBcclxuICAgICAgICAgICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoYHNhbGFyeS1pbXBvcnRgKSEgPCAwXHJcbiAgICAgICAgICAmJiB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKGBpbXBvcnQtYWRkYCkhIDwgMFxyXG4gICAgICAgICAgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgaW1wb3J0LW1vbnRobHktdGF4YCkhIDwgMFxyXG4gICAgICAgICAgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgc2hpZnRzb3J0YCkhIDwgMFxyXG4gICAgICAgICAgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgZGVjbGFyZXN1bnBlcmApISA8IDBcclxuICAgICAgICAgICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoYHJlZ2lzdGVybGVhdmVgKSEgPCAwXHJcbiAgICAgICAgICAmJiB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKGBvdmVydGltZWApISA8IDBcclxuICAgICAgICAgICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoYGltcG9ydC10YXgtYW5udWFsYCkhIDwgMFxyXG4gICAgICAgICAgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgY21zL3Byb2ZpbGUvbGlzdC9ldmFsdWF0ZWApISA8IDBcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuY2xpY2tHZW5lcmF0ZVRlbXBsYXRlJC5uZXh0KG5vdyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfVVBMT0FEOlxyXG4gICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKGBjbXMvcHJvZmlsZS9saXN0L2V2YWx1YXRlYCkgPj0gMCkge1xyXG4gICAgICAgICAgdGhpcy5jb3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrLmVtaXQoZSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5icm93c2VGaWxlSW5wdXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9MT0NLOlxyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfVU5MT0NLOlxyXG4gICAgICAgIHRoaXMuY29yZVBhZ2VIZWFkZXJCdXR0b25DbGljay5lbWl0KGUpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY29uc29sZS5sb2coZS5jb2RlKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RlZElkc0NoYW5nZShlOiBzdHJpbmdbXSB8IG51bWJlcltdKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSWRzID0gZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJZHNDaGFuZ2UuZW1pdChlKTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0ZWREYXRhQ2hhbmdlKGU6IGFueVtdKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IGU7XHJcbiAgICB0aGlzLnNlbGVjdGVkRGF0YUNoYW5nZS5lbWl0KGUpO1xyXG4gICAgaWYgKCEhZS5sZW5ndGgpIHtcclxuICAgICAgaWYgKGUubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIHRoaXMuYnV0dG9uR3JvdXBTdGF0dXM/Lm11c3RCZUhpZGRlbiQubmV4dChbXHJcbiAgICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0VESVQsXHJcbiAgICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0xJUVVJREFURV9DT05UUkFDVFxyXG4gICAgICAgIF0pXHJcbiAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIGlmICghIWVbMF0uaXNMb2NrKSB7XHJcbiAgICAgICAgICB0aGlzLmJ1dHRvbkdyb3VwU3RhdHVzPy5tdXN0QmVIaWRkZW4kLm5leHQoW0VudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfTE9DS10pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYnV0dG9uR3JvdXBTdGF0dXM/Lm11c3RCZUhpZGRlbiQubmV4dChbRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9VTkxPQ0tdKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYnV0dG9uR3JvdXBTdGF0dXM/Lm11c3RCZUhpZGRlbiQubmV4dChFTVBUWV9TRUxFQ1RJT05fSElEREVOX0JVVFRPTilcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBvbkNvbHVtbkNhcHRpb25DbGljayhlOiBJQ29yZVRhYmxlQ29sdW1uSXRlbSkge1xyXG4gICAgY29uc3QgbmV3U29ydDogSVNvcnRJdGVtW10gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuc29ydCQudmFsdWUpKTtcclxuICAgIG5ld1NvcnQubWFwKChjKSA9PiB7XHJcbiAgICAgIGlmIChjLmZpZWxkID09PSBlLmZpZWxkKSB7XHJcbiAgICAgICAgaWYgKGMuc29ydERpcmVjdGlvbiA9PT0gRW51bVNvcnREaXJlY3Rpb24uTk9ORSkge1xyXG4gICAgICAgICAgYy5zb3J0RGlyZWN0aW9uID0gRW51bVNvcnREaXJlY3Rpb24uQVNDO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYy5zb3J0RGlyZWN0aW9uID09PSBFbnVtU29ydERpcmVjdGlvbi5BU0MpIHtcclxuICAgICAgICAgIGMuc29ydERpcmVjdGlvbiA9IEVudW1Tb3J0RGlyZWN0aW9uLkRFU0M7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGMuc29ydERpcmVjdGlvbiA9IEVudW1Tb3J0RGlyZWN0aW9uLk5PTkU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGMuc29ydERpcmVjdGlvbiA9IEVudW1Tb3J0RGlyZWN0aW9uLk5PTkU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5zb3J0JC5uZXh0KG5ld1NvcnQpO1xyXG4gIH1cclxuXHJcbiAgaW5wdXRGaWxlID0gYXN5bmMgKGU6IGFueSkgPT4ge1xyXG4gICAgY29uc29sZS5sb2coXCJpbnB1dEZpbGUgZVwiLCBlKVxyXG4gICAgY29uc3QgZmlsZXMgPSBlLnRhcmdldC5maWxlcztcclxuICAgIGNvbnN0IGZpbGUgPSBmaWxlc1swXTtcclxuICAgIGxldCBmaWxlTmFtZSA9IGZpbGUubmFtZTtcclxuXHJcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2ZpbGVdKTtcclxuXHJcbiAgICBibG9iVG9CYXNlNjQoYmxvYikudGhlbigoYmFzZTY0OiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5vbklucHV0RmlsZUJhc2U2NERhdGFSZWFkeS5lbWl0KGJhc2U2NCk7XHJcblxyXG4gICAgICAvLyBO4bq/dSB0aGFtIHPhu5EgZ2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3QgxJHGsOG7o2MgdHJ1eeG7gW4gdsOgb1xyXG4gICAgICAvLyBJbXBvcnQgc+G6vSB0aOG7sWMgdGhpIHRoZW8gcXV5IHRyw6xuaCBDb3JlXHJcbiAgICAgIGlmICh0aGlzLmdlbmVyYXRlVGVtcGxhdGVSZXF1ZXN0KSB7XHJcbiAgICAgICAgY29uc3QgaW1wb3J0WGxzeFRvRGJSZXF1ZXN0OiBJSW1wb3J0WGxzeFRvRGJSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgZmlsZU5hbWUsXHJcbiAgICAgICAgICBleENvZGU6IHRoaXMuZ2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3QuZXhDb2RlLFxyXG4gICAgICAgICAgYmFzZTY0U3RyaW5nOiBiYXNlNjRcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sb25nQXBpUnVubmluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW1wb3J0WGxzeFRvRGIoaW1wb3J0WGxzeFRvRGJSZXF1ZXN0KS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSBOdW1iZXIodGhpcy5sb25nVGFza1NlcnZpY2UuZGF0YSQudmFsdWU/Lm91dGVyTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHRoaXMubG9uZ0FwaVJ1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgIGxldCBkb3dubG9hZExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAgICAgICAgICAgICBkb3dubG9hZExpbmsuaHJlZiA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFt4LmJvZHldKSlcclxuICAgICAgICAgICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lLnNwbGl0KFwiLnhsc3hcIilbMF0gKyBcIl9wcm9jZXNzZWRfXCIgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIFwiLnhsc3hcIjtcclxuICAgICAgICAgICAgICBkb3dubG9hZExpbmsuc2V0QXR0cmlidXRlKFwiZG93bmxvYWRcIiwgZmlsZU5hbWUpO1xyXG4gICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG93bmxvYWRMaW5rKTtcclxuICAgICAgICAgICAgICBkb3dubG9hZExpbmsuY2xpY2soKTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgaW1wb3J0UHJldmlld091dGVyUGFyYW06IElYbHN4SW1wb3J0T2JqZWN0ID0ge1xyXG4gICAgICAgICAgICAgICAgeGxzeFNpZDogdGhpcy5hdXRoU2VydmljZS5kYXRhJC52YWx1ZT8uaWQhLFxyXG4gICAgICAgICAgICAgICAgeGxzeEV4Q29kZTogdGhpcy5nZW5lcmF0ZVRlbXBsYXRlUmVxdWVzdC5leENvZGUsXHJcbiAgICAgICAgICAgICAgICB4bHN4U2Vzc2lvbjogc2Vzc2lvblxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgaWYgKCEhIXRoaXMuaW1wb3J0UHJldmlld1BhdGgpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXCInaW1wb3J0UHJldmlld1BhdGgnIGlucHV0IHByb3BlcnR5IHdhcyBtaXNzaW5nIVwiLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgb3V0bGV0czoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JlUGFnZUxpc3RBdXg6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmltcG9ydFByZXZpZXdQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGlzdEluc3RhbmNlOiB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLCBzdGF0ZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbixcclxuICAgICAgICAgICAgICAgICAgICAgIGltcG9ydFByZXZpZXdPdXRlclBhcmFtXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG5cclxuICAgICAgfVxyXG5cclxuICAgIH0pO1xyXG5cclxuXHJcbiAgfTtcclxuXHJcbiAgYnJvd3NlRmlsZUlucHV0KCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coXCJicm93c2VGaWxlSW5wdXRcIilcclxuICAgIHRoaXMuZmlsZUltcG9ydC5uYXRpdmVFbGVtZW50LnZhbHVlID0gbnVsbDtcclxuICAgIHRoaXMuZmlsZUltcG9ydC5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICBvblByb2dyZXNzV2luZG93Q2xvc2UoXzogYW55KSB7XHJcbiAgICB0aGlzLmxvbmdBcGlSdW5uaW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLmV4cG9ydENvcmVQYWdlTGlzdEdyaWRUb0V4Y2VsU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5tYXAoKHgpID0+IHg/LnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgaWYgKCEhdGhpcy5xdWVyeUxpc3RTdWJzY3JpcHRpb24pIHRoaXMucXVlcnlMaXN0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgI2NvbnRhaW5lciBjbGFzcz1cImNvcmUtcGFnZS1saXN0LWNvbnRhaW5lclwiICNjb3JlUGFnZUxpc3RDb250YWluZXIgW25nU3R5bGVdPVwieyBoZWlnaHQ6IGhlaWdodCArICdweCcgfVwiPlxyXG5cclxuICAgIDxjb3JlLXBhZ2UtaGVhZGVyICpuZ0lmPVwiISEhaGlkZUhlYWRlclwiIFtpbnN0YW5jZU51bWJlcl09XCJjb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlclwiIFt0aXRsZV09XCJ0aXRsZVwiIChidXR0b25DbGljayk9XCJvbkNvcmVQYWdlSGVhZGVyQnV0dG9uQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgW2hpZGVCdXR0b25Hcm91cF09XCIhIXNlZWtlck1vZGUgfHwgISFoaWRlQnV0dG9uR3JvdXBcIj48L2NvcmUtcGFnZS1oZWFkZXI+XHJcblxyXG4gICAgPGlucHV0ICNmaWxlSW1wb3J0IHR5cGU9XCJmaWxlXCIgbmFtZT1cIm5hbWVcIlxyXG4gICAgICAgIGFjY2VwdD1cImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0LCBhcHBsaWNhdGlvbi92bmQubXMtZXhjZWxcIlxyXG4gICAgICAgIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiAoY2hhbmdlKT0naW5wdXRGaWxlKCRldmVudCknIC8+XHJcblxyXG4gICAgPCEtLVxyXG4gICAgICAgIEtoaSDEkcOjIHTDrW5oIMSRxrDhu6NjIGNow61uaCB4w6FjIGNoaeG7gXUgY2FvIGNvbXBvc2l0aW9uSGVpZ2h0IGPhu6dhIGNvcmUtY29tcG9zaXRpb25cclxuICAgICAgICBD4bqnbiB0w61uaCDEkcaw4bujYyBjaMOtbmggeMOhYyBjaGnhu4F1IGNhbyBjb3JlVGFibGVIZWlnaHQgY+G7p2EgQ29yZVRhYmxlXHJcbiAgICAgICAgTuG6v3UgcGjhuqduIHRvcCBj4bunYSBjb21wb3NpdGlvbiBj4buRIMSR4buLbmggKHbDrSBk4bulIGtoaSBz4butIGThu6VuZyBDb3JlUGFyYW1LaXQpIHRow6wgcGjDqXAgdHLhu6sgxJHGoW4gZ2nhuqNuXHJcbiAgICAgICAgTmjGsG5nIG7hur91IHBo4bqnbiB0b3AgxJHGsOG7o2MgY3VzdG9taXplLCB0YSBwaOG6o2kgc+G7rSBk4bulbmcgZXh0cmFNYW51YWxPZmZzZXRcclxuICAgIC0tPlxyXG4gICAgPGNvcmUtY29tcG9zaXRpb24gXHJcbiAgICAgICAgW2NvcmVDb21wb3NpdGlvbkluc3RhbmNlTnVtYmVyXT1cImNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyXCIgXHJcbiAgICAgICAgW3RvcF09XCJ0b3BQbGFjZVwiIFxyXG4gICAgICAgIFtsZWZ0XT1cIiEhaGlkZUxlZnQ/IHVuZGVmaW5lZCA6bGVmdFwiIFxyXG4gICAgICAgIFttYWluXT1cImNvcmVUYWJsZVwiIFxyXG4gICAgICAgIFtoZWlnaHRdPVwiY29tcG9zaXRpb25IZWlnaHRcIj5cclxuICAgIDwvY29yZS1jb21wb3NpdGlvbj5cclxuXHJcbiAgICA8cm91dGVyLW91dGxldCBuYW1lPVwiY29yZVBhZ2VMaXN0QXV4XCI+PC9yb3V0ZXItb3V0bGV0PlxyXG5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI3RvcFBsYWNlPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhIXNob3dQYXJhbUtpdFwiPlxyXG4gICAgICAgIDxjb3JlLWNvbW1vbi1wYXJhbS1raXQgXHJcbiAgICAgICAgICAgIFtkYXRlUGVyaW9kQ29tcGFyaXNvbkZvcl09XCJkYXRlUGVyaW9kQ29tcGFyaXNvbkZvclwiXHJcbiAgICAgICAgICAgIFtlbmFibGVUaW1lWm9uZUNvbnZlcnRlckZvckRhdGVUaW1lUGVyaW9kUGFyYW1ldGVyc109XCJlbmFibGVUaW1lWm9uZUNvbnZlcnRlckZvckRhdGVUaW1lUGVyaW9kUGFyYW1ldGVyc1wiXHJcbiAgICAgICAgICAgIFtkYXRlUGVyaW9kQ29tcGFyaXNvbkZvckxhYmVsS2V5XT1cImRhdGVQZXJpb2RDb21wYXJpc29uRm9yTGFiZWxLZXlcIlxyXG4gICAgICAgICAgICBbc3RhdHVzSW5jbHVzaW9uRm9yXT1cInN0YXR1c0luY2x1c2lvbkZvclwiIFtzdGF0dXNJbmNsdXNpb25Gb3JMYWJlbEtleV09XCJzdGF0dXNJbmNsdXNpb25Gb3JMYWJlbEtleVwiXHJcbiAgICAgICAgICAgIFtzdGF0dXNPcHRpb25zQXBpXT1cInN0YXR1c09wdGlvbnNBcGlcIlxyXG4gICAgICAgICAgICBbc3RhdHVzT3B0aW9ucyRdPVwic3RhdHVzT3B0aW9ucyRcIlxyXG4gICAgICAgICAgICBbc2hvd09yZ1BhcmFtXT1cInNob3dPcmdQYXJhbVwiXHJcbiAgICAgICAgICAgIFtoaWRlR2VuZXJhbFNlYXJjaF09XCJoaWRlR2VuZXJhbFNlYXJjaFwiXHJcbiAgICAgICAgICAgIFtoaWRlRGF0ZVBlcmlvZENvbXBhcmlzb25dPVwiaGlkZURhdGVQZXJpb2RDb21wYXJpc29uXCIgXHJcbiAgICAgICAgICAgIFtoaWRlU3RhdHVzSW5jbHVzaW9uXT1cImhpZGVTdGF0dXNJbmNsdXNpb25cIlxyXG4gICAgICAgICAgICAob25DaGFuZ2UpPVwib25QYXJhbUtpdFZhbHVlQ2hhbmdlKCRldmVudClcIj48L2NvcmUtY29tbW9uLXBhcmFtLWtpdD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b3BcIj5cclxuXHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2NvcmVUYWJsZT5cclxuXHJcbiAgICA8ZGl2IFtjbGFzcy5vcGFjaXR5MF09XCIhISFnZW9tZXRyaWNEb25lXCI+XHJcblxyXG4gICAgICAgIDwhLS1cclxuICAgICAgICAgICAgS2hpIMSRw6MgdMOtbmggxJHGsOG7o2MgY2jDrW5oIHjDoWMgY2hp4buBdSBjYW8gY29tcG9zaXRpb25IZWlnaHQgY+G7p2EgY29yZS1jb21wb3NpdGlvblxyXG4gICAgICAgICAgICBD4bqnbiB0w61uaCDEkcaw4bujYyBjaMOtbmggeMOhYyBjaGnhu4F1IGNhbyBjb3JlVGFibGVIZWlnaHQgY+G7p2EgQ29yZVRhYmxlXHJcbiAgICAgICAgICAgIE7hur91IHBo4bqnbiB0b3AgY+G7p2EgY29tcG9zaXRpb24gY+G7kSDEkeG7i25oICh2w60gZOG7pSBraGkgc+G7rSBk4bulbmcgQ29yZVBhcmFtS2l0KSB0aMOsIHBow6lwIHRy4burIMSRxqFuIGdp4bqjblxyXG4gICAgICAgICAgICBOaMawbmcgbuG6v3UgcGjhuqduIHRvcCDEkcaw4bujYyBjdXN0b21pemUsIHRhIHBo4bqjaSBz4butIGThu6VuZyBleHRyYU1hbnVhbE9mZnNldFxyXG5cclxuICAgICAgICAgICAgQ+G6p24gdMOtbmggdGFibGVIZWlnaHQgbmjGsCB0aOG6vyBuw6BvP1xyXG4gICAgICAgIC0tPlxyXG4gICAgICAgIDxjb3JlLXRhYmxlICNjb3JlVGFibGVBbG9uZSB3aWR0aD1cIjEwMCVcIiBbaGVpZ2h0XT1cInRhYmxlSGVpZ2h0XCIgW3Jvd0hlaWdodF09XCJyb3dIZWlnaHQgfHwgJzQ2cHgnXCIgW3dyYXBdPVwid3JhcFwiXHJcbiAgICAgICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIiBbZGF0YV09XCJsaXN0XCIgW3Nob3dDaGVja2JveF09XCIhISFoaWRlQ2hlY2tcIiBoZWFkZXJIZWlnaHQ9XCI2MHB4XCIgW3Nob3dUb29sc109XCJzaG93TGlzdElubGluZVRvb2xzXCJcclxuICAgICAgICAgICAgW3Rvb2xzXT1cImlubGluZVRvb2xzXCIgKG9uVG9vbENsaWNrKT1cIm9uVG9vbENsaWNrKCRldmVudClcIiAob25Sb3dDbGljayk9XCJvblJvd0NsaWNrKCRldmVudClcIlxyXG4gICAgICAgICAgICAob25Sb3dEb3VibGVDbGljayk9XCJvblJvd0RvdWJsZUNsaWNrKCRldmVudClcIiAob25TZWxlY3RlZElkc0NoYW5nZSk9XCJvblNlbGVjdGVkSWRzQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAob25TZWxlY3RlZERhdGFDaGFuZ2UpPVwib25TZWxlY3RlZERhdGFDaGFuZ2UoJGV2ZW50KVwiIFtmcm96ZW5dPVwiZnJvemVuIHx8IDFcIlxyXG4gICAgICAgICAgICAob25TZWFyY2hpbmcpPVwib25TZWFyY2hpbmcoJGV2ZW50KVwiIChvbkNvbHVtbkNhcHRpb25DbGljayk9XCJvbkNvbHVtbkNhcHRpb25DbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgW2NvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyXT1cImNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyXCIgW2xvYWRpbmddPVwibG9hZGluZ1wiXHJcbiAgICAgICAgICAgIFtjb2x1bW5TZWFyY2hEZWZhdWx0T3Blbl09XCJjb2x1bW5TZWFyY2hEZWZhdWx0T3BlblwiIFtsYXp5TG9hZGluZ109XCJ0cnVlXCJcclxuICAgICAgICAgICAgW2hlYWRlcldyYXBdPVwiaGVhZGVyV3JhcFwiXHJcbiAgICAgICAgICAgIFtoZWFkZXJGaXJzdFJvd0hlaWdodF09XCJoZWFkZXJGaXJzdFJvd0hlaWdodFwiXHJcbiAgICAgICAgICAgIFtub1BhZGRpbmdDZWxsXT1cIm5vUGFkZGluZ0NlbGxcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZUhpZ2hsaWdodE9uQ2xpY2tdPVwiZGlzYWJsZUhpZ2hsaWdodE9uQ2xpY2tcIlxyXG4gICAgICAgICAgICA+PC9jb3JlLXRhYmxlPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4LWVuZCBwYWdpbmF0aW9uLXdyYXBwZXJcIiAjcGFnaW5hdGlvbkNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPGNvcmUtcGFnaW5hdGlvbi1mdWxsIFtoZWlnaHRdPVwicGFnaW5hdGlvbkhlaWdodFwiIFtjdXJyZW50UGFnZSRdPVwiY3VycmVudFBhZ2UkXCIgW3BhZ2VTaXplJF09XCJwYWdlU2l6ZSRcIlxyXG4gICAgICAgICAgICAgICAgW3BhZ2VDb3VudF09XCJwYWdlQ291bnRcIiBbaW5uZXJCb2R5Q291bnQkXT1cImlubmVyQm9keUNvdW50JFwiIFtwYWdpbmF0aW9uJF09XCJwYWdpbmF0aW9uJFwiXHJcbiAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJsb2FkaW5nXCIgW2ZpeGVkUGFnZVNpemVdPVwiZml4ZWRQYWdlU2l6ZVwiIFtiYWNrZ3JvdW5kXT1cIicjODQ4NDg0J1wiPjwvY29yZS1wYWdpbmF0aW9uLWZ1bGw+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxjb3JlLWFwaS1wcm9ncmVzcyAqbmdJZj1cImxvbmdBcGlSdW5uaW5nXCIgKG9uQ2xvc2UpPVwib25Qcm9ncmVzc1dpbmRvd0Nsb3NlKCRldmVudClcIj48L2NvcmUtYXBpLXByb2dyZXNzPlxyXG5cclxuPGFwcC1mdWxsc2NyZWVuLW1vZGFsLWxvYWRlciAqbmdJZj1cInByZWZldGNoTG9hZGluZ1wiPjwvYXBwLWZ1bGxzY3JlZW4tbW9kYWwtbG9hZGVyPiJdfQ==
|