fixa-admin 0.0.55 → 0.0.56
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/components/grid/grid.component.mjs +21 -5
- package/esm2022/lib/models/shared.model.mjs +1 -1
- package/fesm2022/fixa-admin.mjs +20 -4
- package/fesm2022/fixa-admin.mjs.map +1 -1
- package/lib/components/grid/grid.component.d.ts +2 -1
- package/lib/models/shared.model.d.ts +1 -0
- package/package.json +1 -1
|
@@ -73,6 +73,7 @@ export class GridComponent {
|
|
|
73
73
|
this.actionWidth = 100;
|
|
74
74
|
this.label = null;
|
|
75
75
|
this.id = null;
|
|
76
|
+
this.requireFilterOrData = false;
|
|
76
77
|
this.rowModelType = 'serverSide';
|
|
77
78
|
this.serverSideSort = true;
|
|
78
79
|
this.serverSideFilter = true;
|
|
@@ -198,7 +199,7 @@ export class GridComponent {
|
|
|
198
199
|
this._filterBoxItems.push({
|
|
199
200
|
field: el.field,
|
|
200
201
|
label: el.label,
|
|
201
|
-
value: null,
|
|
202
|
+
value: el.defaultValue != null ? el.defaultValue : null,
|
|
202
203
|
items: res,
|
|
203
204
|
type: el.type,
|
|
204
205
|
position: el.position ? el.position : 'filter',
|
|
@@ -217,7 +218,7 @@ export class GridComponent {
|
|
|
217
218
|
this._filterBoxItems.push({
|
|
218
219
|
field: el.field,
|
|
219
220
|
label: el.label,
|
|
220
|
-
value: null,
|
|
221
|
+
value: el.defaultValue != null ? el.defaultValue : null,
|
|
221
222
|
items,
|
|
222
223
|
type: el.type,
|
|
223
224
|
position: el.position ? el.position : 'filter',
|
|
@@ -228,7 +229,7 @@ export class GridComponent {
|
|
|
228
229
|
this._filterBoxItems.push({
|
|
229
230
|
field: el.field,
|
|
230
231
|
label: el.label,
|
|
231
|
-
value: null,
|
|
232
|
+
value: el.defaultValue != null ? el.defaultValue : null,
|
|
232
233
|
items,
|
|
233
234
|
type: el.type,
|
|
234
235
|
position: el.position ? el.position : 'filter',
|
|
@@ -237,6 +238,9 @@ export class GridComponent {
|
|
|
237
238
|
}
|
|
238
239
|
}
|
|
239
240
|
});
|
|
241
|
+
setTimeout(() => {
|
|
242
|
+
this.handleFilterLabelValue();
|
|
243
|
+
}, 50);
|
|
240
244
|
}
|
|
241
245
|
}
|
|
242
246
|
get column() {
|
|
@@ -877,6 +881,16 @@ export class GridComponent {
|
|
|
877
881
|
}
|
|
878
882
|
}
|
|
879
883
|
});
|
|
884
|
+
if (this.requireFilterOrData != null) {
|
|
885
|
+
if (this.requireFilterOrData && ((gridFilter.data == null || Object.keys(gridFilter.data).length == 0) && (gridFilter.filter.filters == null || gridFilter.filter.filters.length == 0))) {
|
|
886
|
+
this._toast.show('برای نمایش اطلاعات ، انتخاب یک فیلتر الزامی است', 'warning');
|
|
887
|
+
params.success({
|
|
888
|
+
rowData: [],
|
|
889
|
+
rowCount: 0,
|
|
890
|
+
});
|
|
891
|
+
return;
|
|
892
|
+
}
|
|
893
|
+
}
|
|
880
894
|
this.gridModel = gridFilter;
|
|
881
895
|
this.fetchData(gridFilter, requestParams).then(data => {
|
|
882
896
|
params.success({
|
|
@@ -903,7 +917,7 @@ export class GridComponent {
|
|
|
903
917
|
this.fetchTemplate();
|
|
904
918
|
}
|
|
905
919
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: GridComponent, deps: [{ token: i1.TranslateService }, { token: i0.ChangeDetectorRef }, { token: i2.ToastService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
906
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: GridComponent, selector: "app-grid", inputs: { actionWidth: "actionWidth", label: "label", id: "id", isRowSelection: "isRowSelection", rowModelType: "rowModelType", serverSideSort: "serverSideSort", serverSideFilter: "serverSideFilter", isToolbar: "isToolbar", rtl: "rtl", paginationPageSize: "paginationPageSize", paginationPageSizeSelector: "paginationPageSizeSelector", enableAdvancedFilter: "enableAdvancedFilter", treeModel: "treeModel", isLeaf: "isLeaf", rowData: "rowData", autoColumnSize: "autoColumnSize", showAdvancedButton: "showAdvancedButton", actionItems: "actionItems", toolbarItems: "toolbarItems", treeGroupColumn: "treeGroupColumn", filterItems: "filterItems", fetchData: "fetchData", column: "column" }, outputs: { onAction: "onAction", onToolbar: "onToolbar", onClicked: "onClicked", rowSelectionChange: "rowSelectionChange" }, ngImport: i0, template: "<!-- <button (click)=\"enableAdvancedFilter=!enableAdvancedFilter\">advanced</button> -->\n<div class=\"flex justify-between items-center py-4 border-b border-b-slate-200 mx-4\" *ngIf=\"isToolbar\">\n <div>\n <h4 class=\"font-semibold text-2xl\">{{ label }}</h4>\n </div>\n <div class=\"flex gap-3\">\n @for (item of toolbarItems; track $index) {\n <button nz-button [nzLoading]=\"item.loading ? item.loading : false\" (click)=\"handleClick(item)\" [nzType]=\"item.type\">\n <span nz-icon [nzType]=\"item.icon\"></span>\n {{ item.text }}\n </button>\n }\n <button\n nz-button\n nzType=\"default\"\n nz-popover\n nzPopoverTitle=\"\"\n [(nzPopoverVisible)]=\"visibleFilterBox\"\n nzPopoverTrigger=\"click\"\n [nzPopoverContent]=\"contentTemplate\"\n nzPopoverOverlayClassName=\"filter-popover\"\n nzPopoverPlacement=\"bottom\"\n *ngIf=\"_filterBoxItems.length > 0\">\n <span nz-icon nzType=\"filter\"></span>\n \u0641\u06CC\u0644\u062A\u0631\n </button>\n <button\n nz-button\n nzType=\"default\"\n class=\"flex items-center\"\n nz-popover\n nzPopoverTitle=\"\"\n [(nzPopoverVisible)]=\"visibleFilterTemplateBox\"\n nzPopoverTrigger=\"click\"\n [nzPopoverContent]=\"contentFilterTemplate\"\n nzPopoverOverlayClassName=\"filter-popover-sm\"\n nzPopoverPlacement=\"bottom\"\n *ngIf=\"id != null\">\n <span nz-icon nzType=\"layout\"></span>\n \u0641\u06CC\u0644\u062A\u0631 \u0647\u0627\u06CC \u0630\u062E\u06CC\u0631\u0647 \u0634\u062F\u0647\n </button>\n <button nz-button (click)=\"refresh()\" nzType=\"default\">\n <span nz-icon nzType=\"sync\"></span>\n \u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06CC\n </button>\n <!-- <button nz-button (click)=\"advancedFilter()\" *ngIf=\"showAdvancedButton\" nzType=\"default\">\n <span nz-icon nzType=\"filter\"></span>\n \u062C\u0633\u062A\u062C\u0648\u06CC \u067E\u06CC\u0634\u0631\u0641\u062A\u0647\n </button> -->\n </div>\n</div>\n<ng-template #contentTemplate class=\"w-full\">\n <div class=\"grid gap-x-4 pt-4\" [ngClass]=\"{ 'grid-cols-1': _filterBoxItems.length == 1, 'grid-cols-2': _filterBoxItems.length > 1 }\">\n <div *ngFor=\"let item of _filterBoxItems\" [ngClass]=\"{ 'col-span-2': item.type == 'date' || item.type == 'date-time' }\">\n <div *ngIf=\"item.type == 'date' || item.type == 'date-time'\" class=\"grid grid-cols-2 gap-x-4\">\n <nz-form-item>\n <nz-form-label>\u0627\u0632 \u062A\u0627\u0631\u06CC\u062E</nz-form-label>\n <nz-form-control>\n <qeydar-date-picker\n [ngModel]=\"item.value != null ? item.value[0] : null\"\n (onChangeValue)=\"changeDatePickerValue($event, item, 0)\"\n [showToday]=\"true\"\n [allowEmpty]=\"true\"\n [calendarType]=\"'jalali'\"\n format=\"yyyy-MM-dd\"\n [rtl]=\"true\"></qeydar-date-picker>\n </nz-form-control>\n </nz-form-item>\n <nz-form-item>\n <nz-form-label>\u062A\u0627 \u062A\u0627\u0631\u06CC\u062E</nz-form-label>\n <nz-form-control>\n <qeydar-date-picker\n [ngModel]=\"item.value != null ? item.value[1] : null\"\n (onChangeValue)=\"changeDatePickerValue($event, item, 1)\"\n [showToday]=\"true\"\n [allowEmpty]=\"true\"\n [calendarType]=\"'jalali'\"\n format=\"yyyy-MM-dd\"\n [rtl]=\"true\"></qeydar-date-picker>\n </nz-form-control>\n </nz-form-item>\n </div>\n <div *ngIf=\"item.type == 'enum' || item.type == 'select' || item.type == 'boolean'\">\n <nz-form-item class=\"w-full\">\n <nz-form-label>{{ item.label }}</nz-form-label>\n <nz-select class=\"w-full\" [(ngModel)]=\"item.value\" nzShowSearch>\n <nz-option *ngFor=\"let item2 of item.items\" [nzValue]=\"item2.value\" [nzLabel]=\"item2.label\"></nz-option>\n </nz-select>\n </nz-form-item>\n </div>\n <div *ngIf=\"item.type == 'tree-select'\">\n <nz-form-item class=\"w-full\">\n <nz-form-label>{{ item.label }}</nz-form-label>\n <nz-tree-select class=\"w-full\" [nzNodes]=\"item.nodes\" nzShowSearch [(ngModel)]=\"item.value\"></nz-tree-select>\n </nz-form-item>\n </div>\n <div *ngIf=\"item.type == 'string' || item.type == null\">\n <nz-form-item class=\"w-full\">\n <nz-form-label>{{ item.label }}</nz-form-label>\n <input type=\"text\" nz-input [(ngModel)]=\"item.value\" />\n </nz-form-item>\n </div>\n </div>\n </div>\n <div class=\"flex gap-2 pt-4 mt-4 border-t border-t-slate-200\">\n <button nz-button nzType=\"primary\" (click)=\"filter()\">\u0627\u0639\u0645\u0627\u0644</button>\n <button nz-button nzType=\"default\" (click)=\"clearFilter()\">\u067E\u0627\u06A9\u0633\u0627\u0632\u06CC \u0648 \u0628\u0633\u062A\u0646</button>\n </div>\n</ng-template>\n<!-- template items box -->\n<ng-template #contentFilterTemplate class=\"w-full\">\n <ul class=\"flex flex-col gap-2 max-h-[300px]\">\n <li class=\"p-2 rounded-lg cursor-pointer border border-slate-200\" *ngFor=\"let item of filterTemplateItems\" (click)=\"setTemplateFilter(item)\">{{ item.title }}</li>\n </ul>\n</ng-template>\n<div class=\"flex items-center justify-between gap-2 px-4 py-2 h-14\" *ngIf=\"isToolbar\">\n <div class=\"flex items-center gap-2\">\n <span class=\"font-medium text-sm text-blue-500\">\u0641\u06CC\u0644\u062A\u0631\u0647\u0627\u06CC \u0627\u0639\u0645\u0627\u0644 \u0634\u062F\u0647:</span>\n <ul class=\"flex items-center gap-2\">\n <li class=\"bg-white border border-slate-200 rounded-md px-2 py-1 flex items-center gap-1 h-8\" *ngIf=\"filterItemsValues.length == 0\">\n <span class=\"text-slate-800 font-medium text-sm\">\u0628\u062F\u0648\u0646 \u0641\u06CC\u0644\u062A\u0631</span>\n </li>\n <li class=\"bg-white border border-slate-200 rounded-md px-2 py-1 flex items-center gap-1 h-8\" *ngFor=\"let item of filterItemsValues\">\n <label class=\"text-slate-500 text-sm\">{{ item.label }}:</label>\n <span class=\"text-slate-800 font-medium text-sm\">{{ item.value | translate }}</span>\n <i class=\"fa-regular fa-times cursor-pointer ps-2\" (click)=\"removeFilter(item)\"></i>\n </li>\n </ul>\n </div>\n <div class=\"flex items-center gap-2\" *ngIf=\"id != null\">\n <button nz-button nzType=\"default\" *ngIf=\"filterItemsValues.length > 0 || gridId != null\" (click)=\"saveFilterGrid()\">\n {{ gridId == null ? '\u0630\u062E\u06CC\u0631\u0647 \u0641\u06CC\u0644\u062A\u0631' : '\u0627\u0639\u0645\u0627\u0644 \u062A\u063A\u06CC\u06CC\u0631\u0627\u062A \u0641\u06CC\u0644\u062A\u0631' }}\n </button>\n <button nz-button nzType=\"default\" *ngIf=\"gridId != null\" (click)=\"clearFilter(); gridId = null\">\u0644\u063A\u0648</button>\n </div>\n</div>\n\n<nz-modal [(nzVisible)]=\"isVisibleModal\" nzTitle=\"\u0627\u0641\u0632\u0648\u062F\u0646 \u0642\u0627\u0644\u0628 \u062C\u062F\u06CC\u062F\" (nzOnCancel)=\"handleCancelModal()\" (nzOnOk)=\"handleOkModal()\">\n <ng-container *nzModalContent>\n <nz-form-item class=\"w-full\">\n <nz-form-label>\u0639\u0646\u0648\u0627\u0646 \u0642\u0627\u0644\u0628</nz-form-label>\n <input type=\"text\" nz-input [(ngModel)]=\"templateName\" />\n </nz-form-item>\n </ng-container>\n</nz-modal>\n\n<ag-grid-angular\n style=\"width: 100%\"\n [style]=\"isToolbar ? 'height: calc(100% - 1rem - 124px);' : 'height: 100%;'\"\n [columnDefs]=\"columnDefs\"\n [pagination]=\"true\"\n [paginationPageSize]=\"paginationPageSize\"\n [paginationPageSizeSelector]=\"paginationPageSizeSelector\"\n [class]=\"themeClass\"\n [rowHeight]=\"48\"\n [defaultColDef]=\"defaultColDef\"\n [enableAdvancedFilter]=\"enableAdvancedFilter\"\n [enableRtl]=\"rtl\"\n [treeData]=\"treeModel\"\n [autoGroupColumnDef]=\"autoGroupColumnDef\"\n [isServerSideGroup]=\"isServerSideGroup\"\n [getServerSideGroupKey]=\"getServerSideGroupKey\"\n [rowModelType]=\"rowModelType\"\n [rowData]=\"rowData\"\n [serverSideDatasource]=\"datasource\"\n (gridReady)=\"onGridReady($event)\"\n [cacheBlockSize]=\"paginationPageSize\"\n [maxBlocksInCache]=\"2\"\n [context]=\"{ actionItems: actionItems }\"\n (cellDoubleClicked)=\"cellDoubleClicked($event)\"\n [autoSizeStrategy]=\"_autoColumnSize\"\n [rowSelection]=\"_rowSelection\"\n (selectionChanged)=\"selectionChanged($event)\"\n [theme]=\"\"\n [getRowClass]=\"getRowClass\"\n #grid />\n", dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "enableStrictPivotColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressMoveWhenColumnDragging", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "components", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "quickFilterText", "cacheQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "advancedFilterModel", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "suppressAdvancedFilterEval", "suppressSetFilterByDefault", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "dragAndDropImageComponent", "dragAndDropImageComponentParams", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "loading", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDuration", "cellFlashDelay", "cellFadeDuration", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "suppressGroupMaintainValueType", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideInfiniteScroll", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "cellSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "selectionColumnDef", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "enableGroupEdit", "initialState", "theme", "loadThemeGoogleFonts", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "focusGridInnerElement", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "cellSelectionDeleteStart", "cellSelectionDeleteEnd", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "advancedFilterBuilderVisibleChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "dragCancelled", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "rowDragCancel", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "headerFocused", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "cellSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged"] }, { kind: "directive", type: i5.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: i6.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i7.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i8.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "component", type: i9.NzModalComponent, selector: "nz-modal", inputs: ["nzMask", "nzMaskClosable", "nzCloseOnNavigation", "nzVisible", "nzClosable", "nzOkLoading", "nzOkDisabled", "nzCancelDisabled", "nzCancelLoading", "nzKeyboard", "nzNoAnimation", "nzCentered", "nzDraggable", "nzContent", "nzFooter", "nzZIndex", "nzWidth", "nzWrapClassName", "nzClassName", "nzStyle", "nzTitle", "nzCloseIcon", "nzMaskStyle", "nzBodyStyle", "nzOkText", "nzCancelText", "nzOkType", "nzOkDanger", "nzIconType", "nzModalType", "nzAutofocus", "nzOnOk", "nzOnCancel"], outputs: ["nzOnOk", "nzOnCancel", "nzAfterOpen", "nzAfterClose", "nzVisibleChange"], exportAs: ["nzModal"] }, { kind: "directive", type: i9.NzModalContentDirective, selector: "[nzModalContent]", exportAs: ["nzModalContent"] }, { kind: "directive", type: i10.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i11.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStepperless", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "directive", type: i12.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i12.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "component", type: i13.NzFormItemComponent, selector: "nz-form-item", exportAs: ["nzFormItem"] }, { kind: "component", type: i13.NzFormLabelComponent, selector: "nz-form-label", inputs: ["nzFor", "nzRequired", "nzNoColon", "nzTooltipTitle", "nzTooltipIcon", "nzLabelAlign", "nzLabelWrap"], exportAs: ["nzFormLabel"] }, { kind: "component", type: i13.NzFormControlComponent, selector: "nz-form-control", inputs: ["nzSuccessTip", "nzWarningTip", "nzErrorTip", "nzValidatingTip", "nzExtra", "nzAutoTips", "nzDisableAutoTips", "nzHasFeedback", "nzValidateStatus"], exportAs: ["nzFormControl"] }, { kind: "component", type: i14.NzOptionComponent, selector: "nz-option", inputs: ["nzTitle", "nzLabel", "nzValue", "nzKey", "nzDisabled", "nzHide", "nzCustomContent"], exportAs: ["nzOption"] }, { kind: "component", type: i14.NzSelectComponent, selector: "nz-select", inputs: ["nzId", "nzSize", "nzStatus", "nzOptionHeightPx", "nzOptionOverflowSize", "nzDropdownClassName", "nzDropdownMatchSelectWidth", "nzDropdownStyle", "nzNotFoundContent", "nzPlaceHolder", "nzPlacement", "nzMaxTagCount", "nzDropdownRender", "nzCustomTemplate", "nzSuffixIcon", "nzClearIcon", "nzRemoveIcon", "nzMenuItemSelectedIcon", "nzTokenSeparators", "nzMaxTagPlaceholder", "nzMaxMultipleCount", "nzMode", "nzFilterOption", "compareWith", "nzAllowClear", "nzBorderless", "nzShowSearch", "nzLoading", "nzAutoFocus", "nzAutoClearSearchValue", "nzServerSearch", "nzDisabled", "nzOpen", "nzSelectOnTab", "nzBackdrop", "nzOptions", "nzShowArrow"], outputs: ["nzOnSearch", "nzScrollToBottom", "nzOpenChange", "nzBlur", "nzFocus"], exportAs: ["nzSelect"] }, { kind: "component", type: i15.NzTreeSelectComponent, selector: "nz-tree-select", inputs: ["nzId", "nzAllowClear", "nzShowExpand", "nzShowLine", "nzDropdownMatchSelectWidth", "nzCheckable", "nzHideUnMatched", "nzShowIcon", "nzShowSearch", "nzDisabled", "nzAsyncData", "nzMultiple", "nzDefaultExpandAll", "nzCheckStrictly", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualHeight", "nzExpandedIcon", "nzNotFoundContent", "nzNodes", "nzOpen", "nzSize", "nzPlaceHolder", "nzDropdownStyle", "nzDropdownClassName", "nzBackdrop", "nzStatus", "nzPlacement", "nzExpandedKeys", "nzDisplayWith", "nzMaxTagCount", "nzMaxTagPlaceholder", "nzTreeTemplate"], outputs: ["nzOpenChange", "nzCleared", "nzRemoved", "nzExpandChange", "nzTreeClick", "nzTreeCheckBoxChange"], exportAs: ["nzTreeSelect"] }, { kind: "directive", type: i16.NzPopoverDirective, selector: "[nz-popover]", inputs: ["nzPopoverArrowPointAtCenter", "nzPopoverTitle", "nzPopoverContent", "nz-popover", "nzPopoverTrigger", "nzPopoverPlacement", "nzPopoverOrigin", "nzPopoverVisible", "nzPopoverMouseEnterDelay", "nzPopoverMouseLeaveDelay", "nzPopoverOverlayClassName", "nzPopoverOverlayStyle", "nzPopoverBackdrop"], outputs: ["nzPopoverVisibleChange"], exportAs: ["nzPopover"] }, { kind: "component", type: i17.DatePickerComponent, selector: "qeydar-date-picker", inputs: ["rtl", "mode", "isRange", "customLabels", "calendarType", "lang", "cssClass", "footerDescription", "rangeInputLabels", "inputLabel", "placement", "disabled", "isInline", "showSidebar", "showToday", "valueFormat", "disableInputMask", "disabledDates", "disabledDatesFilter", "disabledTimesFilter", "allowEmpty", "readOnly", "readOnlyInput", "minDate", "maxDate", "format"], outputs: ["onFocus", "onBlur", "onChangeValue", "onOpenChange"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] }); }
|
|
920
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: GridComponent, selector: "app-grid", inputs: { actionWidth: "actionWidth", label: "label", id: "id", isRowSelection: "isRowSelection", requireFilterOrData: "requireFilterOrData", rowModelType: "rowModelType", serverSideSort: "serverSideSort", serverSideFilter: "serverSideFilter", isToolbar: "isToolbar", rtl: "rtl", paginationPageSize: "paginationPageSize", paginationPageSizeSelector: "paginationPageSizeSelector", enableAdvancedFilter: "enableAdvancedFilter", treeModel: "treeModel", isLeaf: "isLeaf", rowData: "rowData", autoColumnSize: "autoColumnSize", showAdvancedButton: "showAdvancedButton", actionItems: "actionItems", toolbarItems: "toolbarItems", treeGroupColumn: "treeGroupColumn", filterItems: "filterItems", fetchData: "fetchData", column: "column" }, outputs: { onAction: "onAction", onToolbar: "onToolbar", onClicked: "onClicked", rowSelectionChange: "rowSelectionChange" }, ngImport: i0, template: "<!-- <button (click)=\"enableAdvancedFilter=!enableAdvancedFilter\">advanced</button> -->\n<div class=\"flex justify-between items-center py-4 border-b border-b-slate-200 mx-4\" *ngIf=\"isToolbar\">\n <div>\n <h4 class=\"font-semibold text-2xl\">{{ label }}</h4>\n </div>\n <div class=\"flex gap-3\">\n @for (item of toolbarItems; track $index) {\n <button nz-button [nzLoading]=\"item.loading ? item.loading : false\" (click)=\"handleClick(item)\" [nzType]=\"item.type\">\n <span nz-icon [nzType]=\"item.icon\"></span>\n {{ item.text }}\n </button>\n }\n <button\n nz-button\n nzType=\"default\"\n nz-popover\n nzPopoverTitle=\"\"\n [(nzPopoverVisible)]=\"visibleFilterBox\"\n nzPopoverTrigger=\"click\"\n [nzPopoverContent]=\"contentTemplate\"\n nzPopoverOverlayClassName=\"filter-popover\"\n nzPopoverPlacement=\"bottom\"\n *ngIf=\"_filterBoxItems.length > 0\">\n <span nz-icon nzType=\"filter\"></span>\n \u0641\u06CC\u0644\u062A\u0631\n </button>\n <button\n nz-button\n nzType=\"default\"\n class=\"flex items-center\"\n nz-popover\n nzPopoverTitle=\"\"\n [(nzPopoverVisible)]=\"visibleFilterTemplateBox\"\n nzPopoverTrigger=\"click\"\n [nzPopoverContent]=\"contentFilterTemplate\"\n nzPopoverOverlayClassName=\"filter-popover-sm\"\n nzPopoverPlacement=\"bottom\"\n *ngIf=\"id != null\">\n <span nz-icon nzType=\"layout\"></span>\n \u0641\u06CC\u0644\u062A\u0631 \u0647\u0627\u06CC \u0630\u062E\u06CC\u0631\u0647 \u0634\u062F\u0647\n </button>\n <button nz-button (click)=\"refresh()\" nzType=\"default\">\n <span nz-icon nzType=\"sync\"></span>\n \u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06CC\n </button>\n <!-- <button nz-button (click)=\"advancedFilter()\" *ngIf=\"showAdvancedButton\" nzType=\"default\">\n <span nz-icon nzType=\"filter\"></span>\n \u062C\u0633\u062A\u062C\u0648\u06CC \u067E\u06CC\u0634\u0631\u0641\u062A\u0647\n </button> -->\n </div>\n</div>\n<ng-template #contentTemplate class=\"w-full\">\n <div class=\"grid gap-x-4 pt-4\" [ngClass]=\"{ 'grid-cols-1': _filterBoxItems.length == 1, 'grid-cols-2': _filterBoxItems.length > 1 }\">\n <div *ngFor=\"let item of _filterBoxItems\" [ngClass]=\"{ 'col-span-2': item.type == 'date' || item.type == 'date-time' }\">\n <div *ngIf=\"item.type == 'date' || item.type == 'date-time'\" class=\"grid grid-cols-2 gap-x-4\">\n <nz-form-item>\n <nz-form-label>\u0627\u0632 \u062A\u0627\u0631\u06CC\u062E</nz-form-label>\n <nz-form-control>\n <qeydar-date-picker\n [ngModel]=\"item.value != null ? item.value[0] : null\"\n (onChangeValue)=\"changeDatePickerValue($event, item, 0)\"\n [showToday]=\"true\"\n [allowEmpty]=\"true\"\n [calendarType]=\"'jalali'\"\n format=\"yyyy-MM-dd\"\n [rtl]=\"true\"></qeydar-date-picker>\n </nz-form-control>\n </nz-form-item>\n <nz-form-item>\n <nz-form-label>\u062A\u0627 \u062A\u0627\u0631\u06CC\u062E</nz-form-label>\n <nz-form-control>\n <qeydar-date-picker\n [ngModel]=\"item.value != null ? item.value[1] : null\"\n (onChangeValue)=\"changeDatePickerValue($event, item, 1)\"\n [showToday]=\"true\"\n [allowEmpty]=\"true\"\n [calendarType]=\"'jalali'\"\n format=\"yyyy-MM-dd\"\n [rtl]=\"true\"></qeydar-date-picker>\n </nz-form-control>\n </nz-form-item>\n </div>\n <div *ngIf=\"item.type == 'enum' || item.type == 'select' || item.type == 'boolean'\">\n <nz-form-item class=\"w-full\">\n <nz-form-label>{{ item.label }}</nz-form-label>\n <nz-select class=\"w-full\" [(ngModel)]=\"item.value\" nzShowSearch>\n <nz-option *ngFor=\"let item2 of item.items\" [nzValue]=\"item2.value\" [nzLabel]=\"item2.label\"></nz-option>\n </nz-select>\n </nz-form-item>\n </div>\n <div *ngIf=\"item.type == 'tree-select'\">\n <nz-form-item class=\"w-full\">\n <nz-form-label>{{ item.label }}</nz-form-label>\n <nz-tree-select class=\"w-full\" [nzNodes]=\"item.nodes\" nzShowSearch [(ngModel)]=\"item.value\"></nz-tree-select>\n </nz-form-item>\n </div>\n <div *ngIf=\"item.type == 'string' || item.type == null\">\n <nz-form-item class=\"w-full\">\n <nz-form-label>{{ item.label }}</nz-form-label>\n <input type=\"text\" nz-input [(ngModel)]=\"item.value\" />\n </nz-form-item>\n </div>\n </div>\n </div>\n <div class=\"flex gap-2 pt-4 mt-4 border-t border-t-slate-200\">\n <button nz-button nzType=\"primary\" (click)=\"filter()\">\u0627\u0639\u0645\u0627\u0644</button>\n <button nz-button nzType=\"default\" (click)=\"clearFilter()\">\u067E\u0627\u06A9\u0633\u0627\u0632\u06CC \u0648 \u0628\u0633\u062A\u0646</button>\n </div>\n</ng-template>\n<!-- template items box -->\n<ng-template #contentFilterTemplate class=\"w-full\">\n <ul class=\"flex flex-col gap-2 max-h-[300px]\">\n <li class=\"p-2 rounded-lg cursor-pointer border border-slate-200\" *ngFor=\"let item of filterTemplateItems\" (click)=\"setTemplateFilter(item)\">{{ item.title }}</li>\n </ul>\n</ng-template>\n<div class=\"flex items-center justify-between gap-2 px-4 py-2 h-14\" *ngIf=\"isToolbar\">\n <div class=\"flex items-center gap-2\">\n <span class=\"font-medium text-sm text-blue-500\">\u0641\u06CC\u0644\u062A\u0631\u0647\u0627\u06CC \u0627\u0639\u0645\u0627\u0644 \u0634\u062F\u0647:</span>\n <ul class=\"flex items-center gap-2\">\n <li class=\"bg-white border border-slate-200 rounded-md px-2 py-1 flex items-center gap-1 h-8\" *ngIf=\"filterItemsValues.length == 0\">\n <span class=\"text-slate-800 font-medium text-sm\">\u0628\u062F\u0648\u0646 \u0641\u06CC\u0644\u062A\u0631</span>\n </li>\n <li class=\"bg-white border border-slate-200 rounded-md px-2 py-1 flex items-center gap-1 h-8\" *ngFor=\"let item of filterItemsValues\">\n <label class=\"text-slate-500 text-sm\">{{ item.label }}:</label>\n <span class=\"text-slate-800 font-medium text-sm\">{{ item.value | translate }}</span>\n <i class=\"fa-regular fa-times cursor-pointer ps-2\" (click)=\"removeFilter(item)\"></i>\n </li>\n </ul>\n </div>\n <div class=\"flex items-center gap-2\" *ngIf=\"id != null\">\n <button nz-button nzType=\"default\" *ngIf=\"filterItemsValues.length > 0 || gridId != null\" (click)=\"saveFilterGrid()\">\n {{ gridId == null ? '\u0630\u062E\u06CC\u0631\u0647 \u0641\u06CC\u0644\u062A\u0631' : '\u0627\u0639\u0645\u0627\u0644 \u062A\u063A\u06CC\u06CC\u0631\u0627\u062A \u0641\u06CC\u0644\u062A\u0631' }}\n </button>\n <button nz-button nzType=\"default\" *ngIf=\"gridId != null\" (click)=\"clearFilter(); gridId = null\">\u0644\u063A\u0648</button>\n </div>\n</div>\n\n<nz-modal [(nzVisible)]=\"isVisibleModal\" nzTitle=\"\u0627\u0641\u0632\u0648\u062F\u0646 \u0642\u0627\u0644\u0628 \u062C\u062F\u06CC\u062F\" (nzOnCancel)=\"handleCancelModal()\" (nzOnOk)=\"handleOkModal()\">\n <ng-container *nzModalContent>\n <nz-form-item class=\"w-full\">\n <nz-form-label>\u0639\u0646\u0648\u0627\u0646 \u0642\u0627\u0644\u0628</nz-form-label>\n <input type=\"text\" nz-input [(ngModel)]=\"templateName\" />\n </nz-form-item>\n </ng-container>\n</nz-modal>\n\n<ag-grid-angular\n style=\"width: 100%\"\n [style]=\"isToolbar ? 'height: calc(100% - 1rem - 124px);' : 'height: 100%;'\"\n [columnDefs]=\"columnDefs\"\n [pagination]=\"true\"\n [paginationPageSize]=\"paginationPageSize\"\n [paginationPageSizeSelector]=\"paginationPageSizeSelector\"\n [class]=\"themeClass\"\n [rowHeight]=\"48\"\n [defaultColDef]=\"defaultColDef\"\n [enableAdvancedFilter]=\"enableAdvancedFilter\"\n [enableRtl]=\"rtl\"\n [treeData]=\"treeModel\"\n [autoGroupColumnDef]=\"autoGroupColumnDef\"\n [isServerSideGroup]=\"isServerSideGroup\"\n [getServerSideGroupKey]=\"getServerSideGroupKey\"\n [rowModelType]=\"rowModelType\"\n [rowData]=\"rowData\"\n [serverSideDatasource]=\"datasource\"\n (gridReady)=\"onGridReady($event)\"\n [cacheBlockSize]=\"paginationPageSize\"\n [maxBlocksInCache]=\"2\"\n [context]=\"{ actionItems: actionItems }\"\n (cellDoubleClicked)=\"cellDoubleClicked($event)\"\n [autoSizeStrategy]=\"_autoColumnSize\"\n [rowSelection]=\"_rowSelection\"\n (selectionChanged)=\"selectionChanged($event)\"\n [theme]=\"\"\n [getRowClass]=\"getRowClass\"\n #grid />\n", dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "enableStrictPivotColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressMoveWhenColumnDragging", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "components", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "quickFilterText", "cacheQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "advancedFilterModel", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "suppressAdvancedFilterEval", "suppressSetFilterByDefault", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "dragAndDropImageComponent", "dragAndDropImageComponentParams", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "loading", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDuration", "cellFlashDelay", "cellFadeDuration", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "suppressGroupMaintainValueType", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideInfiniteScroll", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "cellSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "selectionColumnDef", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "enableGroupEdit", "initialState", "theme", "loadThemeGoogleFonts", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "focusGridInnerElement", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "cellSelectionDeleteStart", "cellSelectionDeleteEnd", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "advancedFilterBuilderVisibleChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "dragCancelled", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "rowDragCancel", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "headerFocused", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "cellSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged"] }, { kind: "directive", type: i5.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: i6.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i7.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i8.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "component", type: i9.NzModalComponent, selector: "nz-modal", inputs: ["nzMask", "nzMaskClosable", "nzCloseOnNavigation", "nzVisible", "nzClosable", "nzOkLoading", "nzOkDisabled", "nzCancelDisabled", "nzCancelLoading", "nzKeyboard", "nzNoAnimation", "nzCentered", "nzDraggable", "nzContent", "nzFooter", "nzZIndex", "nzWidth", "nzWrapClassName", "nzClassName", "nzStyle", "nzTitle", "nzCloseIcon", "nzMaskStyle", "nzBodyStyle", "nzOkText", "nzCancelText", "nzOkType", "nzOkDanger", "nzIconType", "nzModalType", "nzAutofocus", "nzOnOk", "nzOnCancel"], outputs: ["nzOnOk", "nzOnCancel", "nzAfterOpen", "nzAfterClose", "nzVisibleChange"], exportAs: ["nzModal"] }, { kind: "directive", type: i9.NzModalContentDirective, selector: "[nzModalContent]", exportAs: ["nzModalContent"] }, { kind: "directive", type: i10.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i11.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStepperless", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "directive", type: i12.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i12.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "component", type: i13.NzFormItemComponent, selector: "nz-form-item", exportAs: ["nzFormItem"] }, { kind: "component", type: i13.NzFormLabelComponent, selector: "nz-form-label", inputs: ["nzFor", "nzRequired", "nzNoColon", "nzTooltipTitle", "nzTooltipIcon", "nzLabelAlign", "nzLabelWrap"], exportAs: ["nzFormLabel"] }, { kind: "component", type: i13.NzFormControlComponent, selector: "nz-form-control", inputs: ["nzSuccessTip", "nzWarningTip", "nzErrorTip", "nzValidatingTip", "nzExtra", "nzAutoTips", "nzDisableAutoTips", "nzHasFeedback", "nzValidateStatus"], exportAs: ["nzFormControl"] }, { kind: "component", type: i14.NzOptionComponent, selector: "nz-option", inputs: ["nzTitle", "nzLabel", "nzValue", "nzKey", "nzDisabled", "nzHide", "nzCustomContent"], exportAs: ["nzOption"] }, { kind: "component", type: i14.NzSelectComponent, selector: "nz-select", inputs: ["nzId", "nzSize", "nzStatus", "nzOptionHeightPx", "nzOptionOverflowSize", "nzDropdownClassName", "nzDropdownMatchSelectWidth", "nzDropdownStyle", "nzNotFoundContent", "nzPlaceHolder", "nzPlacement", "nzMaxTagCount", "nzDropdownRender", "nzCustomTemplate", "nzSuffixIcon", "nzClearIcon", "nzRemoveIcon", "nzMenuItemSelectedIcon", "nzTokenSeparators", "nzMaxTagPlaceholder", "nzMaxMultipleCount", "nzMode", "nzFilterOption", "compareWith", "nzAllowClear", "nzBorderless", "nzShowSearch", "nzLoading", "nzAutoFocus", "nzAutoClearSearchValue", "nzServerSearch", "nzDisabled", "nzOpen", "nzSelectOnTab", "nzBackdrop", "nzOptions", "nzShowArrow"], outputs: ["nzOnSearch", "nzScrollToBottom", "nzOpenChange", "nzBlur", "nzFocus"], exportAs: ["nzSelect"] }, { kind: "component", type: i15.NzTreeSelectComponent, selector: "nz-tree-select", inputs: ["nzId", "nzAllowClear", "nzShowExpand", "nzShowLine", "nzDropdownMatchSelectWidth", "nzCheckable", "nzHideUnMatched", "nzShowIcon", "nzShowSearch", "nzDisabled", "nzAsyncData", "nzMultiple", "nzDefaultExpandAll", "nzCheckStrictly", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualHeight", "nzExpandedIcon", "nzNotFoundContent", "nzNodes", "nzOpen", "nzSize", "nzPlaceHolder", "nzDropdownStyle", "nzDropdownClassName", "nzBackdrop", "nzStatus", "nzPlacement", "nzExpandedKeys", "nzDisplayWith", "nzMaxTagCount", "nzMaxTagPlaceholder", "nzTreeTemplate"], outputs: ["nzOpenChange", "nzCleared", "nzRemoved", "nzExpandChange", "nzTreeClick", "nzTreeCheckBoxChange"], exportAs: ["nzTreeSelect"] }, { kind: "directive", type: i16.NzPopoverDirective, selector: "[nz-popover]", inputs: ["nzPopoverArrowPointAtCenter", "nzPopoverTitle", "nzPopoverContent", "nz-popover", "nzPopoverTrigger", "nzPopoverPlacement", "nzPopoverOrigin", "nzPopoverVisible", "nzPopoverMouseEnterDelay", "nzPopoverMouseLeaveDelay", "nzPopoverOverlayClassName", "nzPopoverOverlayStyle", "nzPopoverBackdrop"], outputs: ["nzPopoverVisibleChange"], exportAs: ["nzPopover"] }, { kind: "component", type: i17.DatePickerComponent, selector: "qeydar-date-picker", inputs: ["rtl", "mode", "isRange", "customLabels", "calendarType", "lang", "cssClass", "footerDescription", "rangeInputLabels", "inputLabel", "placement", "disabled", "isInline", "showSidebar", "showToday", "valueFormat", "disableInputMask", "disabledDates", "disabledDatesFilter", "disabledTimesFilter", "allowEmpty", "readOnly", "readOnlyInput", "minDate", "maxDate", "format"], outputs: ["onFocus", "onBlur", "onChangeValue", "onOpenChange"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] }); }
|
|
907
921
|
}
|
|
908
922
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: GridComponent, decorators: [{
|
|
909
923
|
type: Component,
|
|
@@ -924,6 +938,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
924
938
|
type: Input
|
|
925
939
|
}], isRowSelection: [{
|
|
926
940
|
type: Input
|
|
941
|
+
}], requireFilterOrData: [{
|
|
942
|
+
type: Input
|
|
927
943
|
}], rowModelType: [{
|
|
928
944
|
type: Input
|
|
929
945
|
}], serverSideSort: [{
|
|
@@ -963,4 +979,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
963
979
|
}], column: [{
|
|
964
980
|
type: Input
|
|
965
981
|
}] } });
|
|
966
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL2dyaWQvZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRyxPQUFPLEVBQXdKLGNBQWMsRUFBb0csTUFBTSwyQkFBMkIsQ0FBQztBQUNuVCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHNUQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlCOUIsTUFBTSxPQUFPLGFBQWE7SUFDdEIsWUFDWSxVQUE0QixFQUM1QixJQUF1QixFQUN2QixNQUFvQjtRQUZwQixlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQUM1QixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUN2QixXQUFNLEdBQU4sTUFBTSxDQUFjO1FBTXpCLDBCQUFxQixHQUFHLElBQUksQ0FBQztRQUM3Qix5QkFBb0IsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN6QixxQkFBZ0IsR0FBVyxJQUFJLENBQUM7UUFDeEMsa0JBQWEsR0FBd0I7WUFDakMsSUFBSSxFQUFFLFdBQVc7WUFDakIsVUFBVSxFQUFFLEtBQUs7U0FDcEIsQ0FBQztRQUVGLGVBQVUsR0FBVyxpQkFBaUIsQ0FBQztRQUN2Qyxl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QUFFO3NCQURELEtBQUs7Z0JBSUssY0FBYztzQkFEeEIsS0FBSztnQkE2Qk4sWUFBWTtzQkFEWCxLQUFLO2dCQUlOLGNBQWM7c0JBRGIsS0FBSztnQkFJTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7Z0JBSU4sR0FBRztzQkFERixLQUFLO2dCQUlOLGtCQUFrQjtzQkFEakIsS0FBSztnQkFJTiwwQkFBMEI7c0JBRHpCLEtBQUs7Z0JBSU4sb0JBQW9CO3NCQURuQixLQUFLO2dCQUlOLFNBQVM7c0JBRFIsS0FBSztnQkFJTixNQUFNO3NCQURMLEtBQUs7Z0JBSU4sT0FBTztzQkFETixLQUFLO2dCQUlLLGNBQWM7c0JBRHhCLEtBQUs7Z0JBYU4sa0JBQWtCO3NCQURqQixLQUFLO2dCQUlOLFdBQVc7c0JBRFYsS0FBSztnQkFlTixZQUFZO3NCQURYLEtBQUs7Z0JBaUJLLGVBQWU7c0JBRHpCLEtBQUs7Z0JBeUJLLFdBQVc7c0JBRHJCLEtBQUs7Z0JBaUVOLFNBQVM7c0JBRFIsS0FBSztnQkFJSyxNQUFNO3NCQURoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2VsbERvdWJsZUNsaWNrZWRFdmVudCwgQ29sRGVmLCBHcmlkQXBpLCBJRGF0ZUZpbHRlclBhcmFtcywgSVJvd05vZGUsIElTZXJ2ZXJTaWRlRGF0YXNvdXJjZSwgSVNlcnZlclNpZGVHZXRSb3dzUGFyYW1zLCBSb3dNb2RlbFR5cGUsIFJvd1NlbGVjdGlvbk9wdGlvbnMsIFNlbGVjdGlvbkNoYW5nZWRFdmVudCwgU2l6ZUNvbHVtbnNUb0NvbnRlbnRTdHJhdGVneSwgU2l6ZUNvbHVtbnNUb0ZpdEdyaWRTdHJhdGVneSwgU2l6ZUNvbHVtbnNUb0ZpdFByb3ZpZGVkV2lkdGhTdHJhdGVneSB9IGZyb20gJ0BhZy1ncmlkLWNvbW11bml0eS9jb3JlJztcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBBY3Rpb25JdGVtcywgQ29sdW1uSXRlbXMsIERhdGFzb3VyY2VPdXRwdXRNb2RlbCwgRmlsdGVyQm94SXRlbXNNb2RlbCwgRmlsdGVyQm94TW9kZWwsIEZpbHRlckdyaWRJdGVtc01vZGVsLCBGaWx0ZXJJdGVtc01vZGVsLCBGaWx0ZXJJdGVtc1ZhbHVlc01vZGVsLCBGaWx0ZXJPcGVyYXRvciwgRmlsdGVyVGVtcGxhdGVNb2RlbCwgR3JpZEFjdGlvbk91dHB1dCwgR3JpZElucHV0TW9kZWwsIEdyaWRSZXF1ZXN0UGFyYW0sIFNvcnRNb2RlbCwgVG9vbGJhckl0ZW1zIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3NoYXJlZC5tb2RlbCc7XG5pbXBvcnQgeyBKRGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9kYXRlLnBpcGUnO1xuaW1wb3J0IHsgQWN0aW9uc0NlbGxSZW5kZXJlciB9IGZyb20gJy4uL2luZGV4LmFwaSc7XG5pbXBvcnQgeyBEYXRlRmlsdGVyLCBUaW1lRmlsdGVyIH0gZnJvbSAnLi9maWx0ZXIvaW5kZXguYXBpJztcbmltcG9ydCB7IE56VHJlZU5vZGVPcHRpb25zIH0gZnJvbSAnbmctem9ycm8tYW50ZC90cmVlJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2luZGV4LmFwaSc7XG5pbXBvcnQgeyBkYiB9IGZyb20gJy4uLy4uL2RiJztcbmV4cG9ydCBpbnRlcmZhY2UgSU9seW1waWNEYXRhIHtcbiAgICBhdGhsZXRlOiBzdHJpbmcsXG4gICAgYWdlOiBudW1iZXIsXG4gICAgY291bnRyeTogc3RyaW5nLFxuICAgIHllYXI6IG51bWJlcixcbiAgICBkYXRlOiBzdHJpbmcsXG4gICAgc3BvcnQ6IHN0cmluZyxcbiAgICBnb2xkOiBudW1iZXIsXG4gICAgc2lsdmVyOiBudW1iZXIsXG4gICAgYnJvbnplOiBudW1iZXIsXG4gICAgdG90YWw6IG51bWJlclxufVxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtZ3JpZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dyaWQuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBHcmlkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIF90b2FzdDogVG9hc3RTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuZGF0YXNvdXJjZSA9IHRoaXMuY3JlYXRlU2VydmVyU2lkZURhdGFzb3VyY2UoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBncmlkQXBpITogR3JpZEFwaTtcbiAgICBwdWJsaWMgaXNTZXJ2ZXJTaWRlR3JvdXA7XG4gICAgcHVibGljIGdldFNlcnZlclNpZGVHcm91cEtleSA9IG51bGw7XG4gICAgcHVibGljIGdyb3VwRGVmYXVsdEV4cGFuZGVkID0gLTE7XG4gICAgcHJpdmF0ZSBfdHJlZUdyb3VwQ29sdW1uOiBzdHJpbmcgPSBudWxsO1xuICAgIF9yb3dTZWxlY3Rpb246IFJvd1NlbGVjdGlvbk9wdGlvbnMgPSB7XG4gICAgICAgIG1vZGU6ICdzaW5nbGVSb3cnLFxuICAgICAgICBjaGVja2JveGVzOiBmYWxzZVxuICAgIH07XG4gICAgZGF0YXNvdXJjZTogSVNlcnZlclNpZGVEYXRhc291cmNlO1xuICAgIHRoZW1lQ2xhc3M6IHN0cmluZyA9IFwiYWctdGhlbWUtcXVhcnR6XCI7XG4gICAgY29sdW1uRGVmczogQ29sRGVmW10gPSBbXTtcbiAgICB2aXNpYmxlRmlsdGVyQm94OiBib29sZWFuID0gZmFsc2U7XG4gICAgX2NvbHVtbjogQ29sdW1uSXRlbXNbXSA9IFtdO1xuICAgIF9maWx0ZXJCb3hJdGVtczogRmlsdGVyQm94TW9kZWxbXSA9IFtdO1xuICAgIGZpbHRlckl0ZW1zVmFsdWVzOiBGaWx0ZXJJdGVtc1ZhbHVlc01vZGVsW10gPSBbXTtcbiAgICBmaWx0ZXJUZW1wbGF0ZUl0ZW1zOiBGaWx0ZXJUZW1wbGF0ZU1vZGVsW10gPSBbXTtcbiAgICB2aXNpYmxlRmlsdGVyVGVtcGxhdGVCb3g6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpc1Zpc2libGVNb2RhbDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGdyaWRNb2RlbDogR3JpZElucHV0TW9kZWwgPSBudWxsO1xuICAgIHRlbXBsYXRlTmFtZTogc3RyaW5nID0gbnVsbDtcbiAgICBncmlkSWQ6IHN0cmluZyA9IG51bGw7XG5cbiAgICBfYXV0b0NvbHVtblNpemU6IFNpemVDb2x1bW5zVG9GaXRHcmlkU3RyYXRlZ3kgfCBTaXplQ29sdW1uc1RvRml0UHJvdmlkZWRXaWR0aFN0cmF0ZWd5IHwgU2l6ZUNvbHVtbnNUb0NvbnRlbnRTdHJhdGVneSA9IHsgdHlwZTogJ2ZpdEdyaWRXaWR0aCcgfTtcbiAgICBhdXRvR3JvdXBDb2x1bW5EZWY6IENvbERlZiA9IHtcbiAgICAgICAgaGVhZGVyTmFtZTogXCJcIixcbiAgICAgICAgbWluV2lkdGg6IDI1MCxcbiAgICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgICBjZWxsUmVuZGVyZXJQYXJhbXM6IHtcbiAgICAgICAgICAgIHN1cHByZXNzQ291bnQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlclBhcmFtczoge1xuICAgICAgICAgICAgbWF4TnVtQ29uZGl0aW9uczogMVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGRlZmF1bHRDb2xEZWY6IENvbERlZiA9IHtcbiAgICAgICAgZmxleDogMSxcbiAgICAgICAgbWluV2lkdGg6IDE1MCxcbiAgICAgICAgZmlsdGVyOiAnYWdUZXh0Q29sdW1uRmlsdGVyJyxcbiAgICAgICAgc3VwcHJlc3NIZWFkZXJNZW51QnV0dG9uOiB0cnVlLFxuICAgICAgICBzdXBwcmVzc0hlYWRlckNvbnRleHRNZW51OiB0cnVlLFxuICAgICAgICBzdXBwcmVzc1NpemVUb0ZpdDogdHJ1ZVxuICAgIH07XG5cbiAgICBnZXRSb3dDbGFzcyhwYXJhbXMpIHtcbiAgICAgICAgaWYgKHBhcmFtcy5ub2RlLnJvd0luZGV4ICUgMiAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuICdyb3ctb2RkJ1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cblxuICAgIEBPdXRwdXQoKVxuICAgIG9uQWN0aW9uOiBFdmVudEVtaXR0ZXI8R3JpZEFjdGlvbk91dHB1dD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBvblRvb2xiYXI6IEV2ZW50RW1pdHRlcjxUb29sYmFySXRlbXM+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgb25DbGlja2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHJvd1NlbGVjdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBASW5wdXQoKVxuICAgIGFjdGlvbldpZHRoOiBudW1iZXIgPSAxMDA7XG5cbiAgICBASW5wdXQoKVxuICAgIGxhYmVsOiBzdHJpbmcgPSBudWxsO1xuXG4gICAgQElucHV0KClcbiAgICBpZDogc3RyaW5nID0gbnVsbDtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBpc1Jvd1NlbGVjdGlvbih2OiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICB0aGlzLl9yb3dTZWxlY3Rpb24gPSB7XG4gICAgICAgICAgICAgICAgbW9kZTogJ211bHRpUm93JyxcbiAgICAgICAgICAgICAgICBjaGVja2JveGVzOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZWxlY3Rpb25DaGFuZ2VkKGU6IFNlbGVjdGlvbkNoYW5nZWRFdmVudCkge1xuICAgICAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgICAgICBlLmFwaS5mb3JFYWNoTm9kZSgoZWwpID0+IHtcbiAgICAgICAgICAgIGlmIChlbC5pc1NlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKGVsLmRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yb3dTZWxlY3Rpb25DaGFuZ2UuZW1pdChpdGVtcyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdEFsbCgpIHtcbiAgICAgICAgdGhpcy5ncmlkQXBpLnNlbGVjdEFsbCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZXNlbGVjdEFsbCgpIHtcbiAgICAgICAgdGhpcy5ncmlkQXBpLmRlc2VsZWN0QWxsKCk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICByb3dNb2RlbFR5cGU6IFJvd01vZGVsVHlwZSA9ICdzZXJ2ZXJTaWRlJztcblxuICAgIEBJbnB1dCgpXG4gICAgc2VydmVyU2lkZVNvcnQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBzZXJ2ZXJTaWRlRmlsdGVyOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgaXNUb29sYmFyOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcnRsOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcGFnaW5hdGlvblBhZ2VTaXplID0gMjU7XG5cbiAgICBASW5wdXQoKVxuICAgIHBhZ2luYXRpb25QYWdlU2l6ZVNlbGVjdG9yOiBudW1iZXJbXSB8IGJvb2xlYW4gPSBbMjVdO1xuXG4gICAgQElucHV0KClcbiAgICBlbmFibGVBZHZhbmNlZEZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICB0cmVlTW9kZWw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgaXNMZWFmOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHJvd0RhdGE6IGFueSA9IG51bGw7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgYXV0b0NvbHVtblNpemUoKTogU2l6ZUNvbHVtbnNUb0ZpdEdyaWRTdHJhdGVneSB8IFNpemVDb2x1bW5zVG9GaXRQcm92aWRlZFdpZHRoU3RyYXRlZ3kgfCBTaXplQ29sdW1uc1RvQ29udGVudFN0cmF0ZWd5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dG9Db2x1bW5TaXplO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IGF1dG9Db2x1bW5TaXplKHY6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgIHRoaXMuX2F1dG9Db2x1bW5TaXplID0geyB0eXBlOiAnZml0Q2VsbENvbnRlbnRzJyB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fYXV0b0NvbHVtblNpemUgPSB7IHR5cGU6ICdmaXRHcmlkV2lkdGgnIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHNob3dBZHZhbmNlZEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIGFjdGlvbkl0ZW1zOiBBY3Rpb25JdGVtc1tdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICBjb2RlOiAnZWRpdCcsXG4gICAgICAgICAgICBpY29uOiAnZmEtbGlnaHQgZmEtcGVuJyxcbiAgICAgICAgICAgIGFsdDogJ9mI24zYsdin24zYtCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgY29kZTogJ2RlbGV0ZScsXG4gICAgICAgICAgICBpY29uOiAnZmEtbGlnaHQgZmEtdHJhc2gnLFxuICAgICAgICAgICAgYWx0OiAn2K3YsNmBJ1xuICAgICAgICB9XG4gICAgXTtcblxuICAgIEBJbnB1dCgpXG4gICAgdG9vbGJhckl0ZW1zOiBUb29sYmFySXRlbXNbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgY29kZTogJ2luc2VydCcsXG4gICAgICAgICAgICBpY29uOiAncGx1cycsXG4gICAgICAgICAgICB0ZXh0OiAn2KfbjNis2KfYryDYsdiv24zZgSDYrNiv24zYrycsXG4gICAgICAgICAgICB0eXBlOiAncHJpbWFyeSdcbiAgICAgICAgfSxcbiAgICAgICAgLy8ge1xuICAgICAgICAvLyAgICAgY29kZTogJ3JlZnJlc2gnLFxuICAgICAgICAvLyAgICAgaWNvbjogJ3N5bmMnLFxuICAgICAgICAvLyAgICAgdGV4dDogJ9io2LHZiNiy2LHYs9in2YbbjCcsXG4gICAgICAgIC8vICAgICB0eXBlOiAnZGVmYXVsdCdcbiAgICAgICAgLy8gfVxuICAgIF07XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgdHJlZUdyb3VwQ29sdW1uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlR3JvdXBDb2x1bW47XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgdHJlZUdyb3VwQ29sdW1uKHY6IHN0cmluZykge1xuICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgdGhpcy5fdHJlZUdyb3VwQ29sdW1uID0gdjtcbiAgICAgICAgICAgIHRoaXMuaXNTZXJ2ZXJTaWRlR3JvdXAgPSBkYXRhSXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMZWFmKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YUl0ZW0ubGFzdE5vZGUpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YUl0ZW1bdl07XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhSXRlbVt2XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5nZXRTZXJ2ZXJTaWRlR3JvdXBLZXkgPSBkYXRhSXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFJdGVtW3ZdO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIHRoaXMuYXV0b0dyb3VwQ29sdW1uRGVmLmhlYWRlck5hbWUgPSB2O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGZpbHRlckl0ZW1zKHY6IEZpbHRlckl0ZW1zTW9kZWxbXSkge1xuICAgICAgICBpZiAodiAhPSBudWxsICYmIHYubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdi5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fZmlsdGVyQm94SXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5maWVsZCA9PSBlbC5maWVsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW1zID0gW107XG4gICAgICAgICAgICAgICAgICAgIGlmICgoZWwudHlwZSA9PSAnZW51bScgfHwgZWwudHlwZSA9PSAnc2VsZWN0JyB8fCBlbC50eXBlID09ICd0cmVlLXNlbGVjdCcpICYmIGVsLml0ZW1zICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLml0ZW1zPy4oKS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbm9kZXM6IE56VHJlZU5vZGVPcHRpb25zW10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWwudHlwZSA9PSAndHJlZS1zZWxlY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRUb056VHJlZU5vZGVzID0gKGl0ZW1zOiBGaWx0ZXJCb3hJdGVtc01vZGVsW10pOiBOelRyZWVOb2RlT3B0aW9uc1tdID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtcy5tYXAoaXRlbSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogU3RyaW5nKGl0ZW0udmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTGVhZjogaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDAgPyBmYWxzZSA6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IGl0ZW0uY2hpbGRyZW4gPyBjb252ZXJ0VG9OelRyZWVOb2RlcyhpdGVtLmNoaWxkcmVuKSA6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzID0gY29udmVydFRvTnpUcmVlTm9kZXMocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyQm94SXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGVsLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHJlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZWwudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGVsLnBvc2l0aW9uID8gZWwucG9zaXRpb24gOiAnZmlsdGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVsLnR5cGUgPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoXCJ0cnVlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KFwiZmFsc2VcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlckJveEl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogZWwubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZWwudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogZWwucG9zaXRpb24gPyBlbC5wb3NpdGlvbiA6ICdmaWx0ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzOiBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJCb3hJdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGVsLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGVsLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGVsLnBvc2l0aW9uID8gZWwucG9zaXRpb24gOiAnZmlsdGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlczogW11cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBmZXRjaERhdGE6IChmaWx0ZXJHcmlkOiBHcmlkSW5wdXRNb2RlbCwgcmVxdWVzdFBhcmFtczogR3JpZFJlcXVlc3RQYXJhbSkgPT4gUHJvbWlzZTxEYXRhc291cmNlT3V0cHV0TW9kZWw+O1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGNvbHVtbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IGNvbHVtbih2OiBDb2x1bW5JdGVtc1tdKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5EZWZzID0gW107XG4gICAgICAgICAgICBpZiAodiAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29sdW1uID0gdjtcbiAgICAgICAgICAgICAgICB2LmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmaWx0ZXI6IGFueSA9ICdhZ1RleHRDb2x1bW5GaWx0ZXInO1xuICAgICAgICAgICAgICAgICAgICB2YXIgc29ydGFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZmlsdGVyUGFyYW1zOiBJRGF0ZUZpbHRlclBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heE51bUNvbmRpdGlvbnM6IDFcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlbC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSAnYWdOdW1iZXJDb2x1bW5GaWx0ZXInO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtcy5maWx0ZXJPcHRpb25zID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVtcHR5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlLZXk6ICd0cnVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnWUVTJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVkaWNhdGU6ICgpID0+IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZklucHV0czogMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5S2V5OiAnZmFsc2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdOTycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGljYXRlOiAoKSA9PiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZJbnB1dHM6IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbnVtJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSAnYWdOdW1iZXJDb2x1bW5GaWx0ZXInO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBlbC5maWx0ZXJJdGVtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlLZXk6IGVsLmZpbHRlckl0ZW1zW3Byb3BlcnR5XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiB0aGlzLl90cmFuc2xhdGUuaW5zdGFudChlbC5maWx0ZXJJdGVtc1twcm9wZXJ0eV0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGljYXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZJbnB1dHM6IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW1zLmZpbHRlck9wdGlvbnMgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW1wdHlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSAnYWdOdW1iZXJDb2x1bW5GaWx0ZXInO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSAnYWdTZXRDb2x1bW5GaWx0ZXInO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSAnYWdUZXh0Q29sdW1uRmlsdGVyJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA9ICdhZ0RhdGVDb2x1bW5GaWx0ZXInO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSAnYWdUZXh0Q29sdW1uRmlsdGVyJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZmlsdGVyQm94SXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5maWVsZCA9PSBlbC5maWVsZCB8fCBpdGVtLmZpZWxkID09IGVsLnNlYXJjaEZpZWxkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsLmZpbHRlciAhPSB1bmRlZmluZWQgJiYgKGVsLmZpbHRlciA9PSAnZmlsdGVyLWJveCcgfHwgZWwuZmlsdGVyID09ICdub25lJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbC5zb3J0YWJsZSAhPSB1bmRlZmluZWQgJiYgIWVsLnNvcnRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3J0YWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbC5maWVsZCAhPSB0aGlzLl90cmVlR3JvdXBDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbC50eXBlICYmIGVsLnR5cGUgPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5EZWZzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xJZDogZWwuaWQgPyBlbC5pZCA6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6IGVsLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiBlbC5lZGl0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IGVsLm1pbldpZHRoID8gZWwubWluV2lkdGggOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbm5lZDogZWwucGlubmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsQ2xhc3M6ICdhZy1ib29sZWFuLWNlbGwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsUmVuZGVyZXI6IHBhcmFtcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1zLnZhbHVlID8gJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHN0cm9rZT1cImdyZWVuXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIGNsYXNzPVwiZmVhdGhlciBmZWF0aGVyLWNoZWNrXCI+PHBhdGggZD1cIk0yMCA2TDkgMTdMNCAxMlwiLz48L3N2Zz4nIDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHN0cm9rZT1cInJlZFwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjFcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBjbGFzcz1cImZlYXRoZXIgZmVhdGhlci14XCI+PGxpbmUgeDE9XCIxOFwiIHkxPVwiNlwiIHgyPVwiNlwiIHkyPVwiMThcIiAvPjxsaW5lIHgxPVwiNlwiIHkxPVwiNlwiIHgyPVwiMThcIiB5Mj1cIjE4XCIgLz48L3N2Zz4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbC50eXBlICYmIGVsLnR5cGUgPT0gJ2VudW0nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5EZWZzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xJZDogZWwuaWQgPyBlbC5pZCA6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6IGVsLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiBlbC5lZGl0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlubmVkOiBlbC5waW5uZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBlbC5taW5XaWR0aCA/IGVsLm1pbldpZHRoIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsUmVuZGVyZXI6IHBhcmFtcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KHBhcmFtcy52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVsLnR5cGUgJiYgZWwudHlwZSA9PSAnZGF0ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkRlZnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbElkOiBlbC5pZCA/IGVsLmlkIDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyTmFtZTogZWwubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjogRGF0ZUZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiBlbC5lZGl0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IGVsLm1pbldpZHRoID8gZWwubWluV2lkdGggOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbm5lZDogZWwucGlubmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsUmVuZGVyZXI6IHBhcmFtcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBKRGF0ZVBpcGUoKS50cmFuc2Zvcm0ocGFyYW1zLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVsLnR5cGUgJiYgZWwudHlwZSA9PSAndGltZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkRlZnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbElkOiBlbC5pZCA/IGVsLmlkIDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyTmFtZTogZWwubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjogVGltZUZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiBlbC5lZGl0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IGVsLm1pbldpZHRoID8gZWwubWluV2lkdGggOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbm5lZDogZWwucGlubmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsUmVuZGVyZXI6IHBhcmFtcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtcy52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVsLnR5cGUgJiYgZWwudHlwZSA9PSAnZGF0ZS10aW1lJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRGVmcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sSWQ6IGVsLmlkID8gZWwuaWQgOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiBlbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiBEYXRlRmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IGVsLmVkaXRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogZWwubWluV2lkdGggPyBlbC5taW5XaWR0aCA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlubmVkOiBlbC5waW5uZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxSZW5kZXJlcjogcGFyYW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEpEYXRlUGlwZSgpLnRyYW5zZm9ybShwYXJhbXMudmFsdWUsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbC50eXBlICYmIGVsLnR5cGUgPT0gJ3ByaWNlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRGVmcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sSWQ6IGVsLmlkID8gZWwuaWQgOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiBlbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZTogZWwuZWRpdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBlbC5taW5XaWR0aCA/IGVsLm1pbldpZHRoIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW5uZWQ6IGVsLnBpbm5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbFJlbmRlcmVyOiBwYXJhbXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbXMudmFsdWUudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZWwudHlwZSAmJiBlbC50eXBlID09ICdpbWFnZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkRlZnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbElkOiBlbC5pZCA/IGVsLmlkIDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyTmFtZTogZWwubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiA4MCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDgwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlubmVkOiBlbC5waW5uZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxSZW5kZXJlcjogcGFyYW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYDxpbWcgY2xhc3M9XCJyb3VuZGVkLWZ1bGwgbXQtMVwiIHdpZHRoPVwiMzJcIiBoZWlnaHQ9XCIzMlwiIHNyYz1cIiR7cGFyYW1zLnZhbHVlfVwiLz5gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5EZWZzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xJZDogZWwuaWQgPyBlbC5pZCA6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6IGVsLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZTogZWwuZWRpdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlubmVkOiBlbC5waW5uZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBlbC5taW5XaWR0aCA/IGVsLm1pbldpZHRoIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9Hcm91cENvbHVtbkRlZi5maWVsZCA9IGVsLmZpZWxkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29sdW1uLmZpbHRlcigoZWwpID0+IGVsLmZpbHRlciA9PSAnZmlsdGVyLWJveCcpLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpdGVtcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWwuZmlsdGVySXRlbXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlbC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZW51bSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGVsLmZpbHRlckl0ZW1zKS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoZWwuZmlsdGVySXRlbXNbaXRlbV0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlbC5maWx0ZXJJdGVtc1tpdGVtXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhlbC5maWx0ZXJJdGVtcykuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KFwidHJ1ZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLl90cmFuc2xhdGUuaW5zdGFudChcImZhbHNlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlckJveEl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGVsLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGVsLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2ZpbHRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlczogW11cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hY3Rpb25JdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRGVmcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiB0aGlzLmFjdGlvbldpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzaXphYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGlubmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdhY3Rpb25zJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxSZW5kZXJlcjogQWN0aW9uc0NlbGxSZW5kZXJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxSZW5kZXJlclBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IChwYXJhbXM6IEdyaWRBY3Rpb25PdXRwdXQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkFjdGlvbi5lbWl0KHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMTAwKTtcbiAgICB9XG5cbiAgICBjaGFuZ2VEYXRlUGlja2VyVmFsdWUoZSwgaXRlbTogRmlsdGVyQm94TW9kZWwsIGluZGV4KSB7XG4gICAgICAgIGlmIChpdGVtLnZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIGl0ZW0udmFsdWVbaW5kZXhdID0gZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGl0ZW0udmFsdWUgPSBbbnVsbCwgbnVsbF07XG4gICAgICAgICAgICBpdGVtLnZhbHVlW2luZGV4XSA9IGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjZWxsRG91YmxlQ2xpY2tlZChlOiBDZWxsRG91YmxlQ2xpY2tlZEV2ZW50KSB7XG4gICAgICAgIHRoaXMub25DbGlja2VkLmVtaXQoeyAuLi5lLmRhdGEsIGNvbElkOiBlLmNvbHVtbi5nZXRDb2xJZCgpIH0pO1xuICAgIH1cblxuICAgIGhhbmRsZUNsaWNrKGl0ZW06IFRvb2xiYXJJdGVtcykge1xuICAgICAgICB0aGlzLm9uVG9vbGJhci5lbWl0KGl0ZW0pO1xuICAgIH1cblxuICAgIHNhdmVGaWx0ZXJHcmlkKCkge1xuICAgICAgICBpZiAodGhpcy5pZCA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLl90b2FzdC5zaG93KCfYtNmG2KfYs9mHINuMINis2K/ZiNmEINmI2KfYsdivINmG2LTYr9mHINin2LPYqicsICdlcnJvcicpO1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JpZElkID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaXNWaXNpYmxlTW9kYWwgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRiLmdyaWRGaWx0ZXJJdGVtcy5nZXQodGhpcy5ncmlkSWQpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIGRiLmdyaWRGaWx0ZXJJdGVtcy5wdXQoe1xuICAgICAgICAgICAgICAgICAgICAuLi5yZXMsXG4gICAgICAgICAgICAgICAgICAgIGdyaWQ6IHRoaXMuZ3JpZE1vZGVsLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hUZW1wbGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3RvYXN0LnNob3coJ9mC2KfZhNioINio2Kcg2YXZiNmB2YLbjNiqINio2LHZiNiy2LHYs9in2YbbjCDYtNivJywgJ3N1Y2Nlc3MnKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIGhhbmRsZUNhbmNlbE1vZGFsKCkge1xuICAgICAgICB0aGlzLmlzVmlzaWJsZU1vZGFsID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgaGFuZGxlT2tNb2RhbCgpIHtcbiAgICAgICAgaWYgKHRoaXMudGVtcGxhdGVOYW1lID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuX3RvYXN0LnNob3coJ9i52YbZiNin2YYg2YLYp9mE2Kgg2YjYp9ix2K8g2YbYtNiv2Ycg2KfYs9iqJywgJ2Vycm9yJyk7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWRJZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpLnRvU3RyaW5nKCk7XG4gICAgICAgIGRiLmdyaWRGaWx0ZXJJdGVtcy5hZGQoe1xuICAgICAgICAgICAgaWQ6IHRoaXMuZ3JpZElkLFxuICAgICAgICAgICAgZ3JpZDogdGhpcy5ncmlkTW9kZWwsXG4gICAgICAgICAgICB0YWJsZUlkOiB0aGlzLmlkLFxuICAgICAgICAgICAgdGl0bGU6IHRoaXMudGVtcGxhdGVOYW1lLFxuICAgICAgICAgICAgdXNlck5hbWU6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3RvYXN0LnNob3coJ9mC2KfZhNioINio2Kcg2YXZiNmB2YLbjNiqINiw2K7bjNix2Ycg2LTYrycsICdzdWNjZXNzJyk7XG4gICAgICAgIHRoaXMudGVtcGxhdGVOYW1lID0gbnVsbDtcbiAgICAgICAgdGhpcy5pc1Zpc2libGVNb2RhbCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLmZldGNoVGVtcGxhdGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVmcmVzaChwdXJnZSA9IGZhbHNlKSB7XG4gICAgICAgIGlmICh0aGlzLnJvd01vZGVsVHlwZSA9PSAnc2VydmVyU2lkZScpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZEFwaS5yZWZyZXNoU2VydmVyU2lkZSh7IHB1cmdlIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJvd0RhdGEgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZEFwaS5yZWZyZXNoQ2VsbHMoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZEFwaS5zZXRHcmlkT3B0aW9uKCdjb2x1bW5EZWZzJywgdGhpcy5jb2x1bW5EZWZzKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZEFwaS5zZXRHcmlkT3B0aW9uKCdsb2FkaW5nJywgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmZldGNoRGF0YShudWxsLCBudWxsKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucm93RGF0YSA9IGRhdGEuaXRlbXM7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkQXBpLnNldEdyaWRPcHRpb24oJ2xvYWRpbmcnLCBmYWxzZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uR3JpZFJlYWR5KHBhcmFtczogYW55KSB7XG4gICAgICAgIHRoaXMuZ3JpZEFwaSA9IHBhcmFtcy5hcGk7XG4gICAgICAgIGlmICh0aGlzLnJvd01vZGVsVHlwZSA9PSAnY2xpZW50U2lkZScpIHtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hEYXRhKG51bGwsIG51bGwpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dEYXRhID0gZGF0YS5pdGVtcztcbiAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBwYXJhbXMuZmFpbCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZHZhbmNlZEZpbHRlcigpIHtcbiAgICAgICAgdGhpcy5lbmFibGVBZHZhbmNlZEZpbHRlciA9ICF0aGlzLmVuYWJsZUFkdmFuY2VkRmlsdGVyO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZEFwaS5zaG93QWR2YW5jZWRGaWx0ZXJCdWlsZGVyKCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYWctaWNvbi1tYXhpbWl6ZScpWzBdIGFzIEhUTUxFbGVtZW50KS5jbGljaygpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSwgMTApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Um91dGVUb05vZGUocm93Tm9kZTogSVJvd05vZGUpOiBzdHJpbmdbXSB7XG4gICAgICAgIGlmICghcm93Tm9kZS5wYXJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgLi4udGhpcy5nZXRSb3V0ZVRvTm9kZShyb3dOb2RlLnBhcmVudCksXG4gICAgICAgICAgICByb3dOb2RlLmtleSA/IHJvd05vZGUua2V5IDogcm93Tm9kZS5kYXRhLmVtcGxveWVlTmFtZSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICByZWZyZXNoTm9kZShpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZ3JpZEFwaS5nZXRSb3dOb2RlKGlkKTtcbiAgICAgICAgY29uc3Qgcm91dGUgPSB0aGlzLmdldFJvdXRlVG9Ob2RlKHNlbGVjdGVkUm93cyk7XG4gICAgICAgIHRoaXMuZ3JpZEFwaS5yZWZyZXNoU2VydmVyU2lkZSh7XG4gICAgICAgICAgICBwdXJnZTogdHJ1ZSxcbiAgICAgICAgICAgIHJvdXRlOiByb3V0ZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbGVhckZpbHRlcigpIHtcbiAgICAgICAgdGhpcy52aXNpYmxlRmlsdGVyQm94ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2ZpbHRlckJveEl0ZW1zLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgICBlbC52YWx1ZSA9IG51bGw7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmdyaWRBcGkuc2V0RmlsdGVyTW9kZWwobnVsbCk7XG4gICAgICAgIHRoaXMuZ3JpZEFwaS5vbkZpbHRlckNoYW5nZWQoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJJdGVtc1ZhbHVlcyA9IFtdO1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG5cbiAgICByZWZyZXNoUGFyZW50Tm9kZShpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZ3JpZEFwaS5nZXRSb3dOb2RlKGlkKTtcbiAgICAgICAgY29uc3Qgcm91dGUgPSB0aGlzLmdldFJvdXRlVG9Ob2RlKHNlbGVjdGVkUm93cy5wYXJlbnQpO1xuICAgICAgICB0aGlzLmdyaWRBcGkucmVmcmVzaFNlcnZlclNpZGUoe1xuICAgICAgICAgICAgcHVyZ2U6IHRydWUsXG4gICAgICAgICAgICByb3V0ZTogcm91dGVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZmlsdGVyKCkge1xuICAgICAgICB0aGlzLmhhbmRsZUZpbHRlckxhYmVsVmFsdWUoKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIHRoaXMudmlzaWJsZUZpbHRlckJveCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHNldFRlbXBsYXRlRmlsdGVyKGl0ZW06IEZpbHRlclRlbXBsYXRlTW9kZWwpIHtcbiAgICAgICAgdGhpcy5jbGVhckZpbHRlcigpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGl0ZW0uZ3JpZC5maWx0ZXIuZmlsdGVycy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRFbCA9IHRoaXMuX2NvbHVtbi5maW5kKChpdGVtKSA9PiBpdGVtLmZpZWxkID09IGVsLmZpZWxkIHx8IGl0ZW0uc2VhcmNoRmllbGQgPT0gZWwuZmllbGQpO1xuICAgICAgICAgICAgICAgIGlmIChmaW5kRWwgJiYgdGhpcy5jb2x1bW5EZWZzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZmllbGQgPT0gZmluZEVsLmZpZWxkICYmIGl0ZW0uZmlsdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRBcGkuc2V0Q29sdW1uRmlsdGVyTW9kZWwoZmluZEVsLmZpZWxkLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBlbC5sb2dpYyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjogZWwudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9maWx0ZXJCb3hJdGVtcy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0uZmllbGQgPT0gZWwuZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJCb3hJdGVtc1tpbmRleF0udmFsdWUgPSBlbC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZElkID0gaXRlbS5pZDtcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZUZpbHRlclRlbXBsYXRlQm94ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVGaWx0ZXJMYWJlbFZhbHVlKCk7XG4gICAgICAgICAgICB0aGlzLmdyaWRBcGkub25GaWx0ZXJDaGFuZ2VkKCk7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgfSwgMTAwKTtcbiAgICB9XG5cbiAgICBoYW5kbGVGaWx0ZXJMYWJlbFZhbHVlKCkge1xuICAgICAgICB0aGlzLl9maWx0ZXJCb3hJdGVtcy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmluZEVsID0gdGhpcy5maWx0ZXJJdGVtc1ZhbHVlcy5maW5kKChmaSkgPT4gZmkuZmllbGQgPT0gZWwuZmllbGQpO1xuICAgICAgICAgICAgaWYgKCFmaW5kRWwpIHtcbiAgICAgICAgICAgICAgICBpZiAoZWwudmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckl0ZW1zVmFsdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGVsLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGVsLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsLnZhbHVlID09IG51bGwgfHwgZWwudmFsdWUgPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckl0ZW1zVmFsdWVzID0gdGhpcy5maWx0ZXJJdGVtc1ZhbHVlcy5maWx0ZXIoKGZpKSA9PiBmaS5maWVsZCAhPSBlbC5maWVsZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZmluZEVsLnZhbHVlID0gZWwudmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbW92ZUZpbHRlcihpdGVtOiBGaWx0ZXJJdGVtc1ZhbHVlc01vZGVsKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fZmlsdGVyQm94SXRlbXMuZmluZEluZGV4KChlbCkgPT4gZWwuZmllbGQgPT0gaXRlbS5maWVsZCk7XG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXJCb3hJdGVtc1tpbmRleF0udmFsdWUgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ncmlkQXBpLnNldENvbHVtbkZpbHRlck1vZGVsKGl0ZW0uZmllbGQsIG51bGwpO1xuICAgICAgICAgICAgdGhpcy5ncmlkQXBpLm9uRmlsdGVyQ2hhbmdlZCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsdGVySXRlbXNWYWx1ZXMgPSB0aGlzLmZpbHRlckl0ZW1zVmFsdWVzLmZpbHRlcigoZWwpID0+IGVsLmZpZWxkICE9IGl0ZW0uZmllbGQpO1xuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG5cbiAgICBjcmVhdGVTZXJ2ZXJTaWRlRGF0YXNvdXJjZSgpOiBJU2VydmVyU2lkZURhdGFzb3VyY2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZ2V0Um93czogKHBhcmFtczogSVNlcnZlclNpZGVHZXRSb3dzUGFyYW1zKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGZpbHRlcjogRmlsdGVyR3JpZEl0ZW1zTW9kZWwgPSBudWxsO1xuICAgICAgICAgICAgICAgIGZpbHRlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBsb2dpYzogJ0FORCcsXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IFtdLFxuICAgICAgICAgICAgICAgICAgICBpZ25vcmVDYXNlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgdHJ1bmNhdGVEYXRlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkID0ga2V5ID09ICdhZy1HcmlkLUF1dG9Db2x1bW4nID8gdGhpcy5fdHJlZUdyb3VwQ29sdW1uIDoga2V5O1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvcGVyYXRvciA9IEZpbHRlck9wZXJhdG9yLmVxdWFscztcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpZ25vcmVDYXNlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kRWwgPSB0aGlzLl9jb2x1bW4uZmluZCgoZWwpID0+IGVsLmZpZWxkID09IGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09ICdhZy1HcmlkLUF1dG9Db2x1bW4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgPSB0aGlzLl90cmVlR3JvdXBDb2x1bW47XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkID0ga2V5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaW5kRWwuc2VhcmNoRmllbGQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCA9IGZpbmRFbC5zZWFyY2hGaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS5maWx0ZXJUeXBlID09ICdjdXN0b20tZGF0ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS5kYXRlRnJvbSAmJiBwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbFtrZXldLmRhdGVUbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9IEZpbHRlck9wZXJhdG9yLmJldHdlZW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gW3BhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0uZGF0ZUZyb20sIHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0uZGF0ZVRvXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0uZGF0ZUZyb20pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBGaWx0ZXJPcGVyYXRvci50cnVuY0dyZWF0ZXJUaGFuRXF1YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS5kYXRlRnJvbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0uZGF0ZVRvICYmIHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0uZGF0ZVRvICE9IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBGaWx0ZXJPcGVyYXRvci50cnVuY0xlc3NUaGFuT3JFcXVhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbFtrZXldLmRhdGVUbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0uZmlsdGVyVHlwZSA9PSAnY3VzdG9tLXRpbWUnICYmIHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0udGltZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBGaWx0ZXJPcGVyYXRvci5lcXVhbHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBgJHtwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbFtrZXldLnRpbWUuc3Vic3RyKDAsIDIpfToke3BhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0udGltZS5zdWJzdHIoMiwgMil9OiR7cGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS50aW1lLnN1YnN0cig0LCAyKX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRmlsdGVyT3BlcmF0b3JbcGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS50eXBlXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9IEZpbHRlck9wZXJhdG9yW3BhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0udHlwZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUNhc2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS5maWx0ZXIgPyBwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbFtrZXldLmZpbHRlciA6IHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0udHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmluZEVsICYmIGZpbmRFbC50eXBlID09ICdlbnVtJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVDYXNlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluZEZpbHRlckl0ZW1zRWwgPSB0aGlzLmZpbHRlckl0ZW1zVmFsdWVzLmZpbmQoKGZpKSA9PiBmaS5maWVsZCA9PSBmaW5kRWwuZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaW5kRmlsdGVySXRlbXNFbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVySXRlbXNWYWx1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBmaW5kRWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBmaW5kRWwubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5kRmlsdGVySXRlbXNFbC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWM6ICdBTkQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlQ2FzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVuY2F0ZURhdGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZmlsdGVySXRlbXNWYWx1ZXMgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5maWx0ZXJJdGVtc1ZhbHVlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBzb3J0czogU29ydE1vZGVsW10gPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnJlcXVlc3Quc29ydE1vZGVsLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kRWwgPSB0aGlzLl9jb2x1bW4uZmluZCgoZWwpID0+IGVsLmZpZWxkID09IHBhcmFtcy5yZXF1ZXN0LnNvcnRNb2RlbFswXS5jb2xJZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5kRWwuc2VhcmNoRmllbGQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc29ydHMgPSBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcjogcGFyYW1zLnJlcXVlc3Quc29ydE1vZGVsWzBdLnNvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGZpbmRFbC5zZWFyY2hGaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3J0cyA9IFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyOiBwYXJhbXMucmVxdWVzdC5zb3J0TW9kZWxbMF0uc29ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogcGFyYW1zLnJlcXVlc3Quc29ydE1vZGVsWzBdLmNvbElkXG4gICAgICAgICAgICAgICAgICAgICAgICB9XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBncmlkRmlsdGVyOiBHcmlkSW5wdXRNb2RlbCA9IHtcbiAgICAgICAgICAgICAgICAgICAgdGFrZTogcGFyYW1zLmFwaS5wYWdpbmF0aW9uR2V0UGFnZVNpemUoKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge30sXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgc2tpcDogcGFyYW1zLmFwaS5wYWdpbmF0aW9uR2V0Q3VycmVudFBhZ2UoKSAqIHBhcmFtcy5hcGkucGFnaW5hdGlvbkdldFBhZ2VTaXplKCksXG4gICAgICAgICAgICAgICAgICAgIHNvcnRzXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0UGFyYW1zOiBHcmlkUmVxdWVzdFBhcmFtID0ge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlOiBwYXJhbXMucGFyZW50Tm9kZS5kYXRhXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJCb3hJdGVtcy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWwudmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsLnBvc2l0aW9uID09ICdmaWx0ZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlbC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9IEZpbHRlck9wZXJhdG9yLmNvbnRhaW5zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGUnOiBjYXNlICdkYXRlLXRpbWUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBGaWx0ZXJPcGVyYXRvci5iZXR3ZWVuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsLnZhbHVlWzBdID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC52YWx1ZVswXSA9IG5ldyBEYXRlKCcxOTk3LTAxLTAxJykudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZWwudmFsdWVbMV0gPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsLnZhbHVlWzFdID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9IEZpbHRlck9wZXJhdG9yLmVxdWFscztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkRmlsdGVyLmZpbHRlci5maWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVDYXNlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWM6ICdBTkQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1bmNhdGVEYXRlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGVsLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWRGaWx0ZXIuZGF0YVtlbC5maWVsZF0gPSBlbC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE1vZGVsID0gZ3JpZEZpbHRlcjtcbiAgICAgICAgICAgICAgICB0aGlzLmZldGNoRGF0YShncmlkRmlsdGVyLCByZXF1ZXN0UGFyYW1zKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXMuc3VjY2Vzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhOiBkYXRhLml0ZW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm93Q291bnQ6IGRhdGEudG90YWxDb3VudCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJvd01vZGVsVHlwZSA9PSAnc2VydmVyU2lkZScgJiYgdGhpcy5ncmlkQXBpLmdldFNlcnZlclNpZGVTZWxlY3Rpb25TdGF0ZSgpWydzZWxlY3RBbGwnXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGwoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmZhaWwoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmZXRjaFRlbXBsYXRlKCkge1xuICAgICAgICBpZiAodGhpcy5pZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBkYi5ncmlkRmlsdGVySXRlbXMuZmlsdGVyKChlbCkgPT4gZWwudGFibGVJZCA9PSB0aGlzLmlkKS50b0FycmF5KCkudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJUZW1wbGF0ZUl0ZW1zID0gcmVzO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mZXRjaFRlbXBsYXRlKCk7XG4gICAgfVxufSIsIjwhLS0gPGJ1dHRvbiAoY2xpY2spPVwiZW5hYmxlQWR2YW5jZWRGaWx0ZXI9IWVuYWJsZUFkdmFuY2VkRmlsdGVyXCI+YWR2YW5jZWQ8L2J1dHRvbj4gLS0+XG48ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIHB5LTQgYm9yZGVyLWIgYm9yZGVyLWItc2xhdGUtMjAwIG14LTRcIiAqbmdJZj1cImlzVG9vbGJhclwiPlxuICAgIDxkaXY+XG4gICAgICAgIDxoNCBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC0yeGxcIj57eyBsYWJlbCB9fTwvaDQ+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTNcIj5cbiAgICAgICAgQGZvciAoaXRlbSBvZiB0b29sYmFySXRlbXM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICA8YnV0dG9uIG56LWJ1dHRvbiBbbnpMb2FkaW5nXT1cIml0ZW0ubG9hZGluZyA/IGl0ZW0ubG9hZGluZyA6IGZhbHNlXCIgKGNsaWNrKT1cImhhbmRsZUNsaWNrKGl0ZW0pXCIgW256VHlwZV09XCJpdGVtLnR5cGVcIj5cbiAgICAgICAgICAgIDxzcGFuIG56LWljb24gW256VHlwZV09XCJpdGVtLmljb25cIj48L3NwYW4+XG4gICAgICAgICAgICB7eyBpdGVtLnRleHQgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbnotYnV0dG9uXG4gICAgICAgICAgICBuelR5cGU9XCJkZWZhdWx0XCJcbiAgICAgICAgICAgIG56LXBvcG92ZXJcbiAgICAgICAgICAgIG56UG9wb3ZlclRpdGxlPVwiXCJcbiAgICAgICAgICAgIFsobnpQb3BvdmVyVmlzaWJsZSldPVwidmlzaWJsZUZpbHRlckJveFwiXG4gICAgICAgICAgICBuelBvcG92ZXJUcmlnZ2VyPVwiY2xpY2tcIlxuICAgICAgICAgICAgW256UG9wb3ZlckNvbnRlbnRdPVwiY29udGVudFRlbXBsYXRlXCJcbiAgICAgICAgICAgIG56UG9wb3Zlck92ZXJsYXlDbGFzc05hbWU9XCJmaWx0ZXItcG9wb3ZlclwiXG4gICAgICAgICAgICBuelBvcG92ZXJQbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgICAgICAgICAgKm5nSWY9XCJfZmlsdGVyQm94SXRlbXMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPHNwYW4gbnotaWNvbiBuelR5cGU9XCJmaWx0ZXJcIj48L3NwYW4+XG4gICAgICAgICAgICDZgduM2YTYqtixXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBuei1idXR0b25cbiAgICAgICAgICAgIG56VHlwZT1cImRlZmF1bHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICBuei1wb3BvdmVyXG4gICAgICAgICAgICBuelBvcG92ZXJUaXRsZT1cIlwiXG4gICAgICAgICAgICBbKG56UG9wb3ZlclZpc2libGUpXT1cInZpc2libGVGaWx0ZXJUZW1wbGF0ZUJveFwiXG4gICAgICAgICAgICBuelBvcG92ZXJUcmlnZ2VyPVwiY2xpY2tcIlxuICAgICAgICAgICAgW256UG9wb3ZlckNvbnRlbnRdPVwiY29udGVudEZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgIG56UG9wb3Zlck92ZXJsYXlDbGFzc05hbWU9XCJmaWx0ZXItcG9wb3Zlci1zbVwiXG4gICAgICAgICAgICBuelBvcG92ZXJQbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgICAgICAgICAgKm5nSWY9XCJpZCAhPSBudWxsXCI+XG4gICAgICAgICAgICA8c3BhbiBuei1pY29uIG56VHlwZT1cImxheW91dFwiPjwvc3Bhbj5cbiAgICAgICAgICAgINmB24zZhNiq2LEg2YfYp9uMINiw2K7bjNix2Ycg2LTYr9mHXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG56LWJ1dHRvbiAoY2xpY2spPVwicmVmcmVzaCgpXCIgbnpUeXBlPVwiZGVmYXVsdFwiPlxuICAgICAgICAgICAgPHNwYW4gbnotaWNvbiBuelR5cGU9XCJzeW5jXCI+PC9zcGFuPlxuICAgICAgICAgICAg2KjYsdmI2LLYsdiz2KfZhtuMXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8IS0tIDxidXR0b24gbnotYnV0dG9uIChjbGljayk9XCJhZHZhbmNlZEZpbHRlcigpXCIgKm5nSWY9XCJzaG93QWR2YW5jZWRCdXR0b25cIiBuelR5cGU9XCJkZWZhdWx0XCI+XG4gICAgICAgICAgICA8c3BhbiBuei1pY29uIG56VHlwZT1cImZpbHRlclwiPjwvc3Bhbj5cbiAgICAgICAgICAgINis2LPYqtis2YjbjCDZvtuM2LTYsdmB2KrZh1xuICAgICAgICA8L2J1dHRvbj4gLS0+XG4gICAgPC9kaXY+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjY29udGVudFRlbXBsYXRlIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgPGRpdiBjbGFzcz1cImdyaWQgZ2FwLXgtNCBwdC00XCIgW25nQ2xhc3NdPVwieyAnZ3JpZC1jb2xzLTEnOiBfZmlsdGVyQm94SXRlbXMubGVuZ3RoID09IDEsICdncmlkLWNvbHMtMic6IF9maWx0ZXJCb3hJdGVtcy5sZW5ndGggPiAxIH1cIj5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBfZmlsdGVyQm94SXRlbXNcIiBbbmdDbGFzc109XCJ7ICdjb2wtc3Bhbi0yJzogaXRlbS50eXBlID09ICdkYXRlJyB8fCBpdGVtLnR5cGUgPT0gJ2RhdGUtdGltZScgfVwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0udHlwZSA9PSAnZGF0ZScgfHwgaXRlbS50eXBlID09ICdkYXRlLXRpbWUnXCIgY2xhc3M9XCJncmlkIGdyaWQtY29scy0yIGdhcC14LTRcIj5cbiAgICAgICAgICAgICAgICA8bnotZm9ybS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICA8bnotZm9ybS1sYWJlbD7Yp9iyINiq2KfYsduM2K48L256LWZvcm0tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxuei1mb3JtLWNvbnRyb2w+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cWV5ZGFyLWRhdGUtcGlja2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiaXRlbS52YWx1ZSAhPSBudWxsID8gaXRlbS52YWx1ZVswXSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZVZhbHVlKT1cImNoYW5nZURhdGVQaWNrZXJWYWx1ZSgkZXZlbnQsIGl0ZW0sIDApXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1RvZGF5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthbGxvd0VtcHR5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYWxlbmRhclR5cGVdPVwiJ2phbGFsaSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdD1cInl5eXktTU0tZGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtydGxdPVwidHJ1ZVwiPjwvcWV5ZGFyLWRhdGUtcGlja2VyPlxuICAgICAgICAgICAgICAgICAgICA8L256LWZvcm0tY29udHJvbD5cbiAgICAgICAgICAgICAgICA8L256LWZvcm0taXRlbT5cbiAgICAgICAgICAgICAgICA8bnotZm9ybS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICA8bnotZm9ybS1sYWJlbD7YqtinINiq2KfYsduM2K48L256LWZvcm0tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxuei1mb3JtLWNvbnRyb2w+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cWV5ZGFyLWRhdGUtcGlja2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiaXRlbS52YWx1ZSAhPSBudWxsID8gaXRlbS52YWx1ZVsxXSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZVZhbHVlKT1cImNoYW5nZURhdGVQaWNrZXJWYWx1ZSgkZXZlbnQsIGl0ZW0sIDEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1RvZGF5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthbGxvd0VtcHR5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYWxlbmRhclR5cGVdPVwiJ2phbGFsaSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdD1cInl5eXktTU0tZGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtydGxdPVwidHJ1ZVwiPjwvcWV5ZGFyLWRhdGUtcGlja2VyPlxuICAgICAgICAgICAgICAgICAgICA8L256LWZvcm0tY29udHJvbD5cbiAgICAgICAgICAgICAgICA8L256LWZvcm0taXRlbT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0udHlwZSA9PSAnZW51bScgfHwgaXRlbS50eXBlID09ICdzZWxlY3QnIHx8IGl0ZW0udHlwZSA9PSAnYm9vbGVhbidcIj5cbiAgICAgICAgICAgICAgICA8bnotZm9ybS1pdGVtIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuei1mb3JtLWxhYmVsPnt7IGl0ZW0ubGFiZWwgfX08L256LWZvcm0tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxuei1zZWxlY3QgY2xhc3M9XCJ3LWZ1bGxcIiBbKG5nTW9kZWwpXT1cIml0ZW0udmFsdWVcIiBuelNob3dTZWFyY2g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bnotb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtMiBvZiBpdGVtLml0ZW1zXCIgW256VmFsdWVdPVwiaXRlbTIudmFsdWVcIiBbbnpMYWJlbF09XCJpdGVtMi5sYWJlbFwiPjwvbnotb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L256LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L256LWZvcm0taXRlbT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0udHlwZSA9PSAndHJlZS1zZWxlY3QnXCI+XG4gICAgICAgICAgICAgICAgPG56LWZvcm0taXRlbSBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8bnotZm9ybS1sYWJlbD57eyBpdGVtLmxhYmVsIH19PC9uei1mb3JtLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8bnotdHJlZS1zZWxlY3QgY2xhc3M9XCJ3LWZ1bGxcIiBbbnpOb2Rlc109XCJpdGVtLm5vZGVzXCIgbnpTaG93U2VhcmNoIFsobmdNb2RlbCldPVwiaXRlbS52YWx1ZVwiPjwvbnotdHJlZS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9uei1mb3JtLWl0ZW0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtLnR5cGUgPT0gJ3N0cmluZycgfHwgaXRlbS50eXBlID09IG51bGxcIj5cbiAgICAgICAgICAgICAgICA8bnotZm9ybS1pdGVtIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuei1mb3JtLWxhYmVsPnt7IGl0ZW0ubGFiZWwgfX08L256LWZvcm0tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG56LWlucHV0IFsobmdNb2RlbCldPVwiaXRlbS52YWx1ZVwiIC8+XG4gICAgICAgICAgICAgICAgPC9uei1mb3JtLWl0ZW0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTIgcHQtNCBtdC00IGJvcmRlci10IGJvcmRlci10LXNsYXRlLTIwMFwiPlxuICAgICAgICA8YnV0dG9uIG56LWJ1dHRvbiBuelR5cGU9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImZpbHRlcigpXCI+2KfYudmF2KfZhDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG56LWJ1dHRvbiBuelR5cGU9XCJkZWZhdWx0XCIgKGNsaWNrKT1cImNsZWFyRmlsdGVyKClcIj7Zvtin2qnYs9in2LLbjCDZiCDYqNiz2KrZhjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjwhLS0gdGVtcGxhdGUgaXRlbXMgYm94ICAtLT5cbjxuZy10ZW1wbGF0ZSAjY29udGVudEZpbHRlclRlbXBsYXRlIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgPHVsIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMiBtYXgtaC1bMzAwcHhdXCI+XG4gICAgICAgIDxsaSBjbGFzcz1cInAtMiByb3VuZGVkLWxnIGN1cnNvci1wb2ludGVyIGJvcmRlciBib3JkZXItc2xhdGUtMjAwXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyVGVtcGxhdGVJdGVtc1wiIChjbGljayk9XCJzZXRUZW1wbGF0ZUZpbHRlcihpdGVtKVwiPnt7IGl0ZW0udGl0bGUgfX08L2xpPlxuICAgIDwvdWw+XG48L25nLXRlbXBsYXRlPlxuPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBweC00IHB5LTIgaC0xNFwiICpuZ0lmPVwiaXNUb29sYmFyXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1tZWRpdW0gdGV4dC1zbSB0ZXh0LWJsdWUtNTAwXCI+2YHbjNmE2KrYsdmH2KfbjCDYp9i52YXYp9mEINi02K/Zhzo8L3NwYW4+XG4gICAgICAgIDx1bCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJiZy13aGl0ZSBib3JkZXIgYm9yZGVyLXNsYXRlLTIwMCByb3VuZGVkLW1kIHB4LTIgcHktMSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBoLThcIiAqbmdJZj1cImZpbHRlckl0ZW1zVmFsdWVzLmxlbmd0aCA9PSAwXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNsYXRlLTgwMCBmb250LW1lZGl1bSB0ZXh0LXNtXCI+2KjYr9mI2YYg2YHbjNmE2KrYsTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJiZy13aGl0ZSBib3JkZXIgYm9yZGVyLXNsYXRlLTIwMCByb3VuZGVkLW1kIHB4LTIgcHktMSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBoLThcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJJdGVtc1ZhbHVlc1wiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInRleHQtc2xhdGUtNTAwIHRleHQtc21cIj57eyBpdGVtLmxhYmVsIH19OjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNsYXRlLTgwMCBmb250LW1lZGl1bSB0ZXh0LXNtXCI+e3sgaXRlbS52YWx1ZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXJlZ3VsYXIgZmEtdGltZXMgY3Vyc29yLXBvaW50ZXIgcHMtMlwiIChjbGljayk9XCJyZW1vdmVGaWx0ZXIoaXRlbSlcIj48L2k+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiICpuZ0lmPVwiaWQgIT0gbnVsbFwiPlxuICAgICAgICA8YnV0dG9uIG56LWJ1dHRvbiBuelR5cGU9XCJkZWZhdWx0XCIgKm5nSWY9XCJmaWx0ZXJJdGVtc1ZhbHVlcy5sZW5ndGggPiAwIHx8IGdyaWRJZCAhPSBudWxsXCIgKGNsaWNrKT1cInNhdmVGaWx0ZXJHcmlkKClcIj5cbiAgICAgICAgICAgIHt7IGdyaWRJZCA9PSBudWxsID8gJ9iw2K7bjNix2Ycg2YHbjNmE2KrYsScgOiAn2KfYudmF2KfZhCDYqti624zbjNix2KfYqiDZgduM2YTYqtixJyB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBuei1idXR0b24gbnpUeXBlPVwiZGVmYXVsdFwiICpuZ0lmPVwiZ3JpZElkICE9IG51bGxcIiAoY2xpY2spPVwiY2xlYXJGaWx0ZXIoKTsgZ3JpZElkID0gbnVsbFwiPtmE2LrZiDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxuei1tb2RhbCBbKG56VmlzaWJsZSldPVwiaXNWaXNpYmxlTW9kYWxcIiBuelRpdGxlPVwi2KfZgdiy2YjYr9mGINmC2KfZhNioINis2K/bjNivXCIgKG56T25DYW5jZWwpPVwiaGFuZGxlQ2FuY2VsTW9kYWwoKVwiIChuek9uT2spPVwiaGFuZGxlT2tNb2RhbCgpXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbnpNb2RhbENvbnRlbnQ+XG4gICAgICAgIDxuei1mb3JtLWl0ZW0gY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgIDxuei1mb3JtLWxhYmVsPti52YbZiNin2YYg2YLYp9mE2Kg8L256LWZvcm0tbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuei1pbnB1dCBbKG5nTW9kZWwpXT1cInRlbXBsYXRlTmFtZVwiIC8+XG4gICAgICAgIDwvbnotZm9ybS1pdGVtPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uei1tb2RhbD5cblxuPGFnLWdyaWQtYW5ndWxhclxuICAgIHN0eWxlPVwid2lkdGg6IDEwMCVcIlxuICAgIFtzdHlsZV09XCJpc1Rvb2xiYXIgPyAnaGVpZ2h0OiBjYWxjKDEwMCUgLSAxcmVtIC0gMTI0cHgpOycgOiAnaGVpZ2h0OiAxMDAlOydcIlxuICAgIFtjb2x1bW5EZWZzXT1cImNvbHVtbkRlZnNcIlxuICAgIFtwYWdpbmF0aW9uXT1cInRydWVcIlxuICAgIFtwYWdpbmF0aW9uUGFnZVNpemVdPVwicGFnaW5hdGlvblBhZ2VTaXplXCJcbiAgICBbcGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3JdPVwicGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3JcIlxuICAgIFtjbGFzc109XCJ0aGVtZUNsYXNzXCJcbiAgICBbcm93SGVpZ2h0XT1cIjQ4XCJcbiAgICBbZGVmYXVsdENvbERlZl09XCJkZWZhdWx0Q29sRGVmXCJcbiAgICBbZW5hYmxlQWR2YW5jZWRGaWx0ZXJdPVwiZW5hYmxlQWR2YW5jZWRGaWx0ZXJcIlxuICAgIFtlbmFibGVSdGxdPVwicnRsXCJcbiAgICBbdHJlZURhdGFdPVwidHJlZU1vZGVsXCJcbiAgICBbYXV0b0dyb3VwQ29sdW1uRGVmXT1cImF1dG9Hcm91cENvbHVtbkRlZlwiXG4gICAgW2lzU2VydmVyU2lkZUdyb3VwXT1cImlzU2VydmVyU2lkZUdyb3VwXCJcbiAgICBbZ2V0U2VydmVyU2lkZUdyb3VwS2V5XT1cImdldFNlcnZlclNpZGVHcm91cEtleVwiXG4gICAgW3Jvd01vZGVsVHlwZV09XCJyb3dNb2RlbFR5cGVcIlxuICAgIFtyb3dEYXRhXT1cInJvd0RhdGFcIlxuICAgIFtzZXJ2ZXJTaWRlRGF0YXNvdXJjZV09XCJkYXRhc291cmNlXCJcbiAgICAoZ3JpZFJlYWR5KT1cIm9uR3JpZFJlYWR5KCRldmVudClcIlxuICAgIFtjYWNoZUJsb2NrU2l6ZV09XCJwYWdpbmF0aW9uUGFnZVNpemVcIlxuICAgIFttYXhCbG9ja3NJbkNhY2hlXT1cIjJcIlxuICAgIFtjb250ZXh0XT1cInsgYWN0aW9uSXRlbXM6IGFjdGlvbkl0ZW1zIH1cIlxuICAgIChjZWxsRG91YmxlQ2xpY2tlZCk9XCJjZWxsRG91YmxlQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICBbYXV0b1NpemVTdHJhdGVneV09XCJfYXV0b0NvbHVtblNpemVcIlxuICAgIFtyb3dTZWxlY3Rpb25dPVwiX3Jvd1NlbGVjdGlvblwiXG4gICAgKHNlbGVjdGlvbkNoYW5nZWQpPVwic2VsZWN0aW9uQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICBbdGhlbWVdPVwiXCJcbiAgICBbZ2V0Um93Q2xhc3NdPVwiZ2V0Um93Q2xhc3NcIlxuICAgICNncmlkIC8+XG4iXX0=
|
|
982
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL2dyaWQvZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRyxPQUFPLEVBQXdKLGNBQWMsRUFBb0csTUFBTSwyQkFBMkIsQ0FBQztBQUNuVCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHNUQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlCOUIsTUFBTSxPQUFPLGFBQWE7SUFDdEIsWUFDWSxVQUE0QixFQUM1QixJQUF1QixFQUN2QixNQUFvQjtRQUZwQixlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQUM1QixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUN2QixXQUFNLEdBQU4sTUFBTSxDQUFjO1FBTXpCLDBCQUFxQixHQUFHLElBQUksQ0FBQztRQUM3Qix5QkFBb0IsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN6QixxQkFBZ0IsR0FBVyxJQUFJLENBQUM7UUFDeEMsa0JBQWEsR0FBd0I7WUFDakMsSUFBSSxFQUFFLFdBQVc7WUFDakIsVUFBVSxFQUFFLEtBQUs7U0FDcEIsQ0FBQztRQUVGLGVBQVUsR0FBVyxpQkFBaUIsQ0FBQztRQUN2Qyxl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Z0JBSU4sY0FBYztzQkFEYixLQUFLO2dCQUlOLGdCQUFnQjtzQkFEZixLQUFLO2dCQUlOLFNBQVM7c0JBRFIsS0FBSztnQkFJTixHQUFHO3NCQURGLEtBQUs7Z0JBSU4sa0JBQWtCO3NCQURqQixLQUFLO2dCQUlOLDBCQUEwQjtzQkFEekIsS0FBSztnQkFJTixvQkFBb0I7c0JBRG5CLEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQUlOLE1BQU07c0JBREwsS0FBSztnQkFJTixPQUFPO3NCQUROLEtBQUs7Z0JBSUssY0FBYztzQkFEeEIsS0FBSztnQkFhTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBSU4sV0FBVztzQkFEVixLQUFLO2dCQWVOLFlBQVk7c0JBRFgsS0FBSztnQkFpQkssZUFBZTtzQkFEekIsS0FBSztnQkF5QkssV0FBVztzQkFEckIsS0FBSztnQkFvRU4sU0FBUztzQkFEUixLQUFLO2dCQUlLLE1BQU07c0JBRGhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZWxsRG91YmxlQ2xpY2tlZEV2ZW50LCBDb2xEZWYsIEdyaWRBcGksIElEYXRlRmlsdGVyUGFyYW1zLCBJUm93Tm9kZSwgSVNlcnZlclNpZGVEYXRhc291cmNlLCBJU2VydmVyU2lkZUdldFJvd3NQYXJhbXMsIFJvd01vZGVsVHlwZSwgUm93U2VsZWN0aW9uT3B0aW9ucywgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50LCBTaXplQ29sdW1uc1RvQ29udGVudFN0cmF0ZWd5LCBTaXplQ29sdW1uc1RvRml0R3JpZFN0cmF0ZWd5LCBTaXplQ29sdW1uc1RvRml0UHJvdmlkZWRXaWR0aFN0cmF0ZWd5IH0gZnJvbSAnQGFnLWdyaWQtY29tbXVuaXR5L2NvcmUnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEFjdGlvbkl0ZW1zLCBDb2x1bW5JdGVtcywgRGF0YXNvdXJjZU91dHB1dE1vZGVsLCBGaWx0ZXJCb3hJdGVtc01vZGVsLCBGaWx0ZXJCb3hNb2RlbCwgRmlsdGVyR3JpZEl0ZW1zTW9kZWwsIEZpbHRlckl0ZW1zTW9kZWwsIEZpbHRlckl0ZW1zVmFsdWVzTW9kZWwsIEZpbHRlck9wZXJhdG9yLCBGaWx0ZXJUZW1wbGF0ZU1vZGVsLCBHcmlkQWN0aW9uT3V0cHV0LCBHcmlkSW5wdXRNb2RlbCwgR3JpZFJlcXVlc3RQYXJhbSwgU29ydE1vZGVsLCBUb29sYmFySXRlbXMgfSBmcm9tICcuLi8uLi9tb2RlbHMvc2hhcmVkLm1vZGVsJztcbmltcG9ydCB7IEpEYXRlUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL2RhdGUucGlwZSc7XG5pbXBvcnQgeyBBY3Rpb25zQ2VsbFJlbmRlcmVyIH0gZnJvbSAnLi4vaW5kZXguYXBpJztcbmltcG9ydCB7IERhdGVGaWx0ZXIsIFRpbWVGaWx0ZXIgfSBmcm9tICcuL2ZpbHRlci9pbmRleC5hcGknO1xuaW1wb3J0IHsgTnpUcmVlTm9kZU9wdGlvbnMgfSBmcm9tICduZy16b3Jyby1hbnRkL3RyZWUnO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaW5kZXguYXBpJztcbmltcG9ydCB7IGRiIH0gZnJvbSAnLi4vLi4vZGInO1xuZXhwb3J0IGludGVyZmFjZSBJT2x5bXBpY0RhdGEge1xuICAgIGF0aGxldGU6IHN0cmluZyxcbiAgICBhZ2U6IG51bWJlcixcbiAgICBjb3VudHJ5OiBzdHJpbmcsXG4gICAgeWVhcjogbnVtYmVyLFxuICAgIGRhdGU6IHN0cmluZyxcbiAgICBzcG9ydDogc3RyaW5nLFxuICAgIGdvbGQ6IG51bWJlcixcbiAgICBzaWx2ZXI6IG51bWJlcixcbiAgICBicm9uemU6IG51bWJlcixcbiAgICB0b3RhbDogbnVtYmVyXG59XG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC1ncmlkJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIEdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgX3RvYXN0OiBUb2FzdFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5kYXRhc291cmNlID0gdGhpcy5jcmVhdGVTZXJ2ZXJTaWRlRGF0YXNvdXJjZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIGdyaWRBcGkhOiBHcmlkQXBpO1xuICAgIHB1YmxpYyBpc1NlcnZlclNpZGVHcm91cDtcbiAgICBwdWJsaWMgZ2V0U2VydmVyU2lkZUdyb3VwS2V5ID0gbnVsbDtcbiAgICBwdWJsaWMgZ3JvdXBEZWZhdWx0RXhwYW5kZWQgPSAtMTtcbiAgICBwcml2YXRlIF90cmVlR3JvdXBDb2x1bW46IHN0cmluZyA9IG51bGw7XG4gICAgX3Jvd1NlbGVjdGlvbjogUm93U2VsZWN0aW9uT3B0aW9ucyA9IHtcbiAgICAgICAgbW9kZTogJ3NpbmdsZVJvdycsXG4gICAgICAgIGNoZWNrYm94ZXM6IGZhbHNlXG4gICAgfTtcbiAgICBkYXRhc291cmNlOiBJU2VydmVyU2lkZURhdGFzb3VyY2U7XG4gICAgdGhlbWVDbGFzczogc3RyaW5nID0gXCJhZy10aGVtZS1xdWFydHpcIjtcbiAgICBjb2x1bW5EZWZzOiBDb2xEZWZbXSA9IFtdO1xuICAgIHZpc2libGVGaWx0ZXJCb3g6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBfY29sdW1uOiBDb2x1bW5JdGVtc1tdID0gW107XG4gICAgX2ZpbHRlckJveEl0ZW1zOiBGaWx0ZXJCb3hNb2RlbFtdID0gW107XG4gICAgZmlsdGVySXRlbXNWYWx1ZXM6IEZpbHRlckl0ZW1zVmFsdWVzTW9kZWxbXSA9IFtdO1xuICAgIGZpbHRlclRlbXBsYXRlSXRlbXM6IEZpbHRlclRlbXBsYXRlTW9kZWxbXSA9IFtdO1xuICAgIHZpc2libGVGaWx0ZXJUZW1wbGF0ZUJveDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGlzVmlzaWJsZU1vZGFsOiBib29sZWFuID0gZmFsc2U7XG4gICAgZ3JpZE1vZGVsOiBHcmlkSW5wdXRNb2RlbCA9IG51bGw7XG4gICAgdGVtcGxhdGVOYW1lOiBzdHJpbmcgPSBudWxsO1xuICAgIGdyaWRJZDogc3RyaW5nID0gbnVsbDtcblxuICAgIF9hdXRvQ29sdW1uU2l6ZTogU2l6ZUNvbHVtbnNUb0ZpdEdyaWRTdHJhdGVneSB8IFNpemVDb2x1bW5zVG9GaXRQcm92aWRlZFdpZHRoU3RyYXRlZ3kgfCBTaXplQ29sdW1uc1RvQ29udGVudFN0cmF0ZWd5ID0geyB0eXBlOiAnZml0R3JpZFdpZHRoJyB9O1xuICAgIGF1dG9Hcm91cENvbHVtbkRlZjogQ29sRGVmID0ge1xuICAgICAgICBoZWFkZXJOYW1lOiBcIlwiLFxuICAgICAgICBtaW5XaWR0aDogMjUwLFxuICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgIGNlbGxSZW5kZXJlclBhcmFtczoge1xuICAgICAgICAgICAgc3VwcHJlc3NDb3VudDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZmlsdGVyUGFyYW1zOiB7XG4gICAgICAgICAgICBtYXhOdW1Db25kaXRpb25zOiAxXG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZGVmYXVsdENvbERlZjogQ29sRGVmID0ge1xuICAgICAgICBmbGV4OiAxLFxuICAgICAgICBtaW5XaWR0aDogMTUwLFxuICAgICAgICBmaWx0ZXI6ICdhZ1RleHRDb2x1bW5GaWx0ZXInLFxuICAgICAgICBzdXBwcmVzc0hlYWRlck1lbnVCdXR0b246IHRydWUsXG4gICAgICAgIHN1cHByZXNzSGVhZGVyQ29udGV4dE1lbnU6IHRydWUsXG4gICAgICAgIHN1cHByZXNzU2l6ZVRvRml0OiB0cnVlXG4gICAgfTtcblxuICAgIGdldFJvd0NsYXNzKHBhcmFtcykge1xuICAgICAgICBpZiAocGFyYW1zLm5vZGUucm93SW5kZXggJSAyICE9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3Jvdy1vZGQnXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuXG4gICAgQE91dHB1dCgpXG4gICAgb25BY3Rpb246IEV2ZW50RW1pdHRlcjxHcmlkQWN0aW9uT3V0cHV0PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIG9uVG9vbGJhcjogRXZlbnRFbWl0dGVyPFRvb2xiYXJJdGVtcz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBvbkNsaWNrZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcm93U2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBJbnB1dCgpXG4gICAgYWN0aW9uV2lkdGg6IG51bWJlciA9IDEwMDtcblxuICAgIEBJbnB1dCgpXG4gICAgbGFiZWw6IHN0cmluZyA9IG51bGw7XG5cbiAgICBASW5wdXQoKVxuICAgIGlkOiBzdHJpbmcgPSBudWxsO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGlzUm93U2VsZWN0aW9uKHY6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jvd1NlbGVjdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBtb2RlOiAnbXVsdGlSb3cnLFxuICAgICAgICAgICAgICAgIGNoZWNrYm94ZXM6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlbGVjdGlvbkNoYW5nZWQoZTogU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgIGUuYXBpLmZvckVhY2hOb2RlKChlbCkgPT4ge1xuICAgICAgICAgICAgaWYgKGVsLmlzU2VsZWN0ZWQoKSkge1xuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goZWwuZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJvd1NlbGVjdGlvbkNoYW5nZS5lbWl0KGl0ZW1zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0QWxsKCkge1xuICAgICAgICB0aGlzLmdyaWRBcGkuc2VsZWN0QWxsKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlc2VsZWN0QWxsKCkge1xuICAgICAgICB0aGlzLmdyaWRBcGkuZGVzZWxlY3RBbGwoKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHJlcXVpcmVGaWx0ZXJPckRhdGE6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcm93TW9kZWxUeXBlOiBSb3dNb2RlbFR5cGUgPSAnc2VydmVyU2lkZSc7XG5cbiAgICBASW5wdXQoKVxuICAgIHNlcnZlclNpZGVTb3J0OiBib29sZWFuID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgc2VydmVyU2lkZUZpbHRlcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIGlzVG9vbGJhcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIHJ0bDogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIHBhZ2luYXRpb25QYWdlU2l6ZSA9IDI1O1xuXG4gICAgQElucHV0KClcbiAgICBwYWdpbmF0aW9uUGFnZVNpemVTZWxlY3RvcjogbnVtYmVyW10gfCBib29sZWFuID0gWzI1XTtcblxuICAgIEBJbnB1dCgpXG4gICAgZW5hYmxlQWR2YW5jZWRGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgdHJlZU1vZGVsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIGlzTGVhZjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICByb3dEYXRhOiBhbnkgPSBudWxsO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGF1dG9Db2x1bW5TaXplKCk6IFNpemVDb2x1bW5zVG9GaXRHcmlkU3RyYXRlZ3kgfCBTaXplQ29sdW1uc1RvRml0UHJvdmlkZWRXaWR0aFN0cmF0ZWd5IHwgU2l6ZUNvbHVtbnNUb0NvbnRlbnRTdHJhdGVneSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRvQ29sdW1uU2l6ZTtcbiAgICB9XG4gICAgcHVibGljIHNldCBhdXRvQ29sdW1uU2l6ZSh2OiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICB0aGlzLl9hdXRvQ29sdW1uU2l6ZSA9IHsgdHlwZTogJ2ZpdENlbGxDb250ZW50cycgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2F1dG9Db2x1bW5TaXplID0geyB0eXBlOiAnZml0R3JpZFdpZHRoJyB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBzaG93QWR2YW5jZWRCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBhY3Rpb25JdGVtczogQWN0aW9uSXRlbXNbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgY29kZTogJ2VkaXQnLFxuICAgICAgICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLXBlbicsXG4gICAgICAgICAgICBhbHQ6ICfZiNuM2LHYp9uM2LQnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvZGU6ICdkZWxldGUnLFxuICAgICAgICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLXRyYXNoJyxcbiAgICAgICAgICAgIGFsdDogJ9it2LDZgSdcbiAgICAgICAgfVxuICAgIF07XG5cbiAgICBASW5wdXQoKVxuICAgIHRvb2xiYXJJdGVtczogVG9vbGJhckl0ZW1zW10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvZGU6ICdpbnNlcnQnLFxuICAgICAgICAgICAgaWNvbjogJ3BsdXMnLFxuICAgICAgICAgICAgdGV4dDogJ9in24zYrNin2K8g2LHYr9uM2YEg2KzYr9uM2K8nLFxuICAgICAgICAgICAgdHlwZTogJ3ByaW1hcnknXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHtcbiAgICAgICAgLy8gICAgIGNvZGU6ICdyZWZyZXNoJyxcbiAgICAgICAgLy8gICAgIGljb246ICdzeW5jJyxcbiAgICAgICAgLy8gICAgIHRleHQ6ICfYqNix2YjYstix2LPYp9mG24wnLFxuICAgICAgICAvLyAgICAgdHlwZTogJ2RlZmF1bHQnXG4gICAgICAgIC8vIH1cbiAgICBdO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHRyZWVHcm91cENvbHVtbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJlZUdyb3VwQ29sdW1uO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IHRyZWVHcm91cENvbHVtbih2OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgIHRoaXMuX3RyZWVHcm91cENvbHVtbiA9IHY7XG4gICAgICAgICAgICB0aGlzLmlzU2VydmVyU2lkZUdyb3VwID0gZGF0YUl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTGVhZikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRhdGFJdGVtLmxhc3ROb2RlKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFJdGVtW3ZdO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YUl0ZW1bdl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuZ2V0U2VydmVyU2lkZUdyb3VwS2V5ID0gZGF0YUl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhSXRlbVt2XTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyB0aGlzLmF1dG9Hcm91cENvbHVtbkRlZi5oZWFkZXJOYW1lID0gdjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBmaWx0ZXJJdGVtcyh2OiBGaWx0ZXJJdGVtc01vZGVsW10pIHtcbiAgICAgICAgaWYgKHYgIT0gbnVsbCAmJiB2Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHYuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2ZpbHRlckJveEl0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZmllbGQgPT0gZWwuZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpdGVtcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGVsLnR5cGUgPT0gJ2VudW0nIHx8IGVsLnR5cGUgPT0gJ3NlbGVjdCcgfHwgZWwudHlwZSA9PSAndHJlZS1zZWxlY3QnKSAmJiBlbC5pdGVtcyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbC5pdGVtcz8uKCkudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5vZGVzOiBOelRyZWVOb2RlT3B0aW9uc1tdID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsLnR5cGUgPT0gJ3RyZWUtc2VsZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb252ZXJ0VG9OelRyZWVOb2RlcyA9IChpdGVtczogRmlsdGVyQm94SXRlbXNNb2RlbFtdKTogTnpUcmVlTm9kZU9wdGlvbnNbXSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbXMubWFwKGl0ZW0gPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFN0cmluZyhpdGVtLnZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xlYWY6IGl0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwID8gZmFsc2UgOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBpdGVtLmNoaWxkcmVuID8gY29udmVydFRvTnpUcmVlTm9kZXMoaXRlbS5jaGlsZHJlbikgOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlcyA9IGNvbnZlcnRUb056VHJlZU5vZGVzKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlckJveEl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGVsLmRlZmF1bHRWYWx1ZSAhPSBudWxsID8gZWwuZGVmYXVsdFZhbHVlIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHJlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZWwudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGVsLnBvc2l0aW9uID8gZWwucG9zaXRpb24gOiAnZmlsdGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVsLnR5cGUgPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoXCJ0cnVlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KFwiZmFsc2VcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlckJveEl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogZWwubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGVsLmRlZmF1bHRWYWx1ZSAhPSBudWxsID8gZWwuZGVmYXVsdFZhbHVlIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBlbC50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBlbC5wb3NpdGlvbiA/IGVsLnBvc2l0aW9uIDogJ2ZpbHRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXM6IFtdXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlckJveEl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogZWwubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGVsLmRlZmF1bHRWYWx1ZSAhPSBudWxsID8gZWwuZGVmYXVsdFZhbHVlIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBlbC50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBlbC5wb3NpdGlvbiA/IGVsLnBvc2l0aW9uIDogJ2ZpbHRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXM6IFtdXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUZpbHRlckxhYmVsVmFsdWUoKTtcbiAgICAgICAgICAgIH0sIDUwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgZmV0Y2hEYXRhOiAoZmlsdGVyR3JpZDogR3JpZElucHV0TW9kZWwsIHJlcXVlc3RQYXJhbXM6IEdyaWRSZXF1ZXN0UGFyYW0pID0+IFByb21pc2U8RGF0YXNvdXJjZU91dHB1dE1vZGVsPjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBjb2x1bW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbjtcbiAgICB9XG4gICAgcHVibGljIHNldCBjb2x1bW4odjogQ29sdW1uSXRlbXNbXSkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uRGVmcyA9IFtdO1xuICAgICAgICAgICAgaWYgKHYgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbHVtbiA9IHY7XG4gICAgICAgICAgICAgICAgdi5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZmlsdGVyOiBhbnkgPSAnYWdUZXh0Q29sdW1uRmlsdGVyJztcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNvcnRhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpbHRlclBhcmFtczogSURhdGVGaWx0ZXJQYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhOdW1Db25kaXRpb25zOiAxXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZWwudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID0gJ2FnTnVtYmVyQ29sdW1uRmlsdGVyJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbXMuZmlsdGVyT3B0aW9ucyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbXB0eVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5S2V5OiAndHJ1ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ1lFUycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGljYXRlOiAoKSA9PiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZJbnB1dHM6IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUtleTogJ2ZhbHNlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnTk8nKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWRpY2F0ZTogKCkgPT4gdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mSW5wdXRzOiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZW51bSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID0gJ2FnTnVtYmVyQ29sdW1uRmlsdGVyJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gZWwuZmlsdGVySXRlbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5S2V5OiBlbC5maWx0ZXJJdGVtc1twcm9wZXJ0eV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoZWwuZmlsdGVySXRlbXNbcHJvcGVydHldKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWRpY2F0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mSW5wdXRzOiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtcy5maWx0ZXJPcHRpb25zID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVtcHR5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW1zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID0gJ2FnTnVtYmVyQ29sdW1uRmlsdGVyJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID0gJ2FnU2V0Q29sdW1uRmlsdGVyJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID0gJ2FnVGV4dENvbHVtbkZpbHRlcic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSAnYWdEYXRlQ29sdW1uRmlsdGVyJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID0gJ2FnVGV4dENvbHVtbkZpbHRlcic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2ZpbHRlckJveEl0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZmllbGQgPT0gZWwuZmllbGQgfHwgaXRlbS5maWVsZCA9PSBlbC5zZWFyY2hGaWVsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbC5maWx0ZXIgIT0gdW5kZWZpbmVkICYmIChlbC5maWx0ZXIgPT0gJ2ZpbHRlci1ib3gnIHx8IGVsLmZpbHRlciA9PSAnbm9uZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZWwuc29ydGFibGUgIT0gdW5kZWZpbmVkICYmICFlbC5zb3J0YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc29ydGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZWwuZmllbGQgIT0gdGhpcy5fdHJlZUdyb3VwQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWwudHlwZSAmJiBlbC50eXBlID09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRGVmcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sSWQ6IGVsLmlkID8gZWwuaWQgOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiBlbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZTogZWwuZWRpdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBlbC5taW5XaWR0aCA/IGVsLm1pbldpZHRoIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW5uZWQ6IGVsLnBpbm5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbENsYXNzOiAnYWctYm9vbGVhbi1jZWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbFJlbmRlcmVyOiBwYXJhbXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy52YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtcy52YWx1ZSA/ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiBzdHJva2U9XCJncmVlblwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjFcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBjbGFzcz1cImZlYXRoZXIgZmVhdGhlci1jaGVja1wiPjxwYXRoIGQ9XCJNMjAgNkw5IDE3TDQgMTJcIi8+PC9zdmc+JyA6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBzdHJva2U9XCJyZWRcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgY2xhc3M9XCJmZWF0aGVyIGZlYXRoZXIteFwiPjxsaW5lIHgxPVwiMThcIiB5MT1cIjZcIiB4Mj1cIjZcIiB5Mj1cIjE4XCIgLz48bGluZSB4MT1cIjZcIiB5MT1cIjZcIiB4Mj1cIjE4XCIgeTI9XCIxOFwiIC8+PC9zdmc+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZWwudHlwZSAmJiBlbC50eXBlID09ICdlbnVtJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRGVmcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sSWQ6IGVsLmlkID8gZWwuaWQgOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiBlbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZTogZWwuZWRpdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbm5lZDogZWwucGlubmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogZWwubWluV2lkdGggPyBlbC5taW5XaWR0aCA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbFJlbmRlcmVyOiBwYXJhbXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGUuaW5zdGFudChwYXJhbXMudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbC50eXBlICYmIGVsLnR5cGUgPT0gJ2RhdGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5EZWZzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xJZDogZWwuaWQgPyBlbC5pZCA6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6IGVsLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IERhdGVGaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZTogZWwuZWRpdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBlbC5taW5XaWR0aCA/IGVsLm1pbldpZHRoIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW5uZWQ6IGVsLnBpbm5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbFJlbmRlcmVyOiBwYXJhbXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSkRhdGVQaXBlKCkudHJhbnNmb3JtKHBhcmFtcy52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlbC50eXBlICYmIGVsLnR5cGUgPT0gJ3RpbWUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5EZWZzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xJZDogZWwuaWQgPyBlbC5pZCA6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6IGVsLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IFRpbWVGaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZTogZWwuZWRpdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBlbC5taW5XaWR0aCA/IGVsLm1pbldpZHRoIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW5uZWQ6IGVsLnBpbm5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbFJlbmRlcmVyOiBwYXJhbXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbXMudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlbC50eXBlICYmIGVsLnR5cGUgPT0gJ2RhdGUtdGltZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkRlZnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbElkOiBlbC5pZCA/IGVsLmlkIDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyTmFtZTogZWwubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjogRGF0ZUZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiBlbC5lZGl0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IGVsLm1pbldpZHRoID8gZWwubWluV2lkdGggOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbm5lZDogZWwucGlubmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsUmVuZGVyZXI6IHBhcmFtcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBKRGF0ZVBpcGUoKS50cmFuc2Zvcm0ocGFyYW1zLnZhbHVlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZWwudHlwZSAmJiBlbC50eXBlID09ICdwcmljZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkRlZnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbElkOiBlbC5pZCA/IGVsLmlkIDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyTmFtZTogZWwubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IGVsLmVkaXRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogZWwubWluV2lkdGggPyBlbC5taW5XaWR0aCA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlubmVkOiBlbC5waW5uZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxSZW5kZXJlcjogcGFyYW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1zLnZhbHVlLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVsLnR5cGUgJiYgZWwudHlwZSA9PSAnaW1hZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5EZWZzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xJZDogZWwuaWQgPyBlbC5pZCA6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6IGVsLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogODAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiA4MCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbm5lZDogZWwucGlubmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsUmVuZGVyZXI6IHBhcmFtcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGA8aW1nIGNsYXNzPVwicm91bmRlZC1mdWxsIG10LTFcIiB3aWR0aD1cIjMyXCIgaGVpZ2h0PVwiMzJcIiBzcmM9XCIke3BhcmFtcy52YWx1ZX1cIi8+YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRGVmcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sSWQ6IGVsLmlkID8gZWwuaWQgOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiBlbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IGVsLmVkaXRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbm5lZDogZWwucGlubmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogZWwubWluV2lkdGggPyBlbC5taW5XaWR0aCA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvR3JvdXBDb2x1bW5EZWYuZmllbGQgPSBlbC5maWVsZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbHVtbi5maWx0ZXIoKGVsKSA9PiBlbC5maWx0ZXIgPT0gJ2ZpbHRlci1ib3gnKS5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsLmZpbHRlckl0ZW1zICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZWwudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VudW0nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhlbC5maWx0ZXJJdGVtcykuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KGVsLmZpbHRlckl0ZW1zW2l0ZW1dKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZWwuZmlsdGVySXRlbXNbaXRlbV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZWwuZmlsdGVySXRlbXMpLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLl90cmFuc2xhdGUuaW5zdGFudChcInRydWVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoXCJmYWxzZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJCb3hJdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBlbC50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdmaWx0ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXM6IFtdXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aW9uSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkRlZnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyTmFtZTogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogdGhpcy5hY3Rpb25XaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBpbm5lZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiAnYWN0aW9ucycsXG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsUmVuZGVyZXI6IEFjdGlvbnNDZWxsUmVuZGVyZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsUmVuZGVyZXJQYXJhbXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiAocGFyYW1zOiBHcmlkQWN0aW9uT3V0cHV0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25BY3Rpb24uZW1pdChwYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDEwMCk7XG4gICAgfVxuXG4gICAgY2hhbmdlRGF0ZVBpY2tlclZhbHVlKGUsIGl0ZW06IEZpbHRlckJveE1vZGVsLCBpbmRleCkge1xuICAgICAgICBpZiAoaXRlbS52YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpdGVtLnZhbHVlW2luZGV4XSA9IGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpdGVtLnZhbHVlID0gW251bGwsIG51bGxdO1xuICAgICAgICAgICAgaXRlbS52YWx1ZVtpbmRleF0gPSBlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2VsbERvdWJsZUNsaWNrZWQoZTogQ2VsbERvdWJsZUNsaWNrZWRFdmVudCkge1xuICAgICAgICB0aGlzLm9uQ2xpY2tlZC5lbWl0KHsgLi4uZS5kYXRhLCBjb2xJZDogZS5jb2x1bW4uZ2V0Q29sSWQoKSB9KTtcbiAgICB9XG5cbiAgICBoYW5kbGVDbGljayhpdGVtOiBUb29sYmFySXRlbXMpIHtcbiAgICAgICAgdGhpcy5vblRvb2xiYXIuZW1pdChpdGVtKTtcbiAgICB9XG5cbiAgICBzYXZlRmlsdGVyR3JpZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaWQgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5fdG9hc3Quc2hvdygn2LTZhtin2LPZhyDbjCDYrNiv2YjZhCDZiNin2LHYryDZhti02K/ZhyDYp9iz2KonLCAnZXJyb3InKTtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdyaWRJZCA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlzVmlzaWJsZU1vZGFsID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYi5ncmlkRmlsdGVySXRlbXMuZ2V0KHRoaXMuZ3JpZElkKS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICBkYi5ncmlkRmlsdGVySXRlbXMucHV0KHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucmVzLFxuICAgICAgICAgICAgICAgICAgICBncmlkOiB0aGlzLmdyaWRNb2RlbCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmZldGNoVGVtcGxhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl90b2FzdC5zaG93KCfZgtin2YTYqCDYqNinINmF2YjZgdmC24zYqiDYqNix2YjYstix2LPYp9mG24wg2LTYrycsICdzdWNjZXNzJyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBoYW5kbGVDYW5jZWxNb2RhbCgpIHtcbiAgICAgICAgdGhpcy5pc1Zpc2libGVNb2RhbCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIGhhbmRsZU9rTW9kYWwoKSB7XG4gICAgICAgIGlmICh0aGlzLnRlbXBsYXRlTmFtZSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLl90b2FzdC5zaG93KCfYudmG2YjYp9mGINmC2KfZhNioINmI2KfYsdivINmG2LTYr9mHINin2LPYqicsICdlcnJvcicpO1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkSWQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKS50b1N0cmluZygpO1xuICAgICAgICBkYi5ncmlkRmlsdGVySXRlbXMuYWRkKHtcbiAgICAgICAgICAgIGlkOiB0aGlzLmdyaWRJZCxcbiAgICAgICAgICAgIGdyaWQ6IHRoaXMuZ3JpZE1vZGVsLFxuICAgICAgICAgICAgdGFibGVJZDogdGhpcy5pZCxcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLnRlbXBsYXRlTmFtZSxcbiAgICAgICAgICAgIHVzZXJOYW1lOiBudWxsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl90b2FzdC5zaG93KCfZgtin2YTYqCDYqNinINmF2YjZgdmC24zYqiDYsNiu24zYsdmHINi02K8nLCAnc3VjY2VzcycpO1xuICAgICAgICB0aGlzLnRlbXBsYXRlTmFtZSA9IG51bGw7XG4gICAgICAgIHRoaXMuaXNWaXNpYmxlTW9kYWwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5mZXRjaFRlbXBsYXRlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZnJlc2gocHVyZ2UgPSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5yb3dNb2RlbFR5cGUgPT0gJ3NlcnZlclNpZGUnKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWRBcGkucmVmcmVzaFNlcnZlclNpZGUoeyBwdXJnZSB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yb3dEYXRhID0gW107XG4gICAgICAgICAgICB0aGlzLmdyaWRBcGkucmVmcmVzaENlbGxzKCk7XG4gICAgICAgICAgICB0aGlzLmdyaWRBcGkuc2V0R3JpZE9wdGlvbignY29sdW1uRGVmcycsIHRoaXMuY29sdW1uRGVmcyk7XG4gICAgICAgICAgICB0aGlzLmdyaWRBcGkuc2V0R3JpZE9wdGlvbignbG9hZGluZycsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5mZXRjaERhdGEobnVsbCwgbnVsbCkudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd0RhdGEgPSBkYXRhLml0ZW1zO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZEFwaS5zZXRHcmlkT3B0aW9uKCdsb2FkaW5nJywgZmFsc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkdyaWRSZWFkeShwYXJhbXM6IGFueSkge1xuICAgICAgICB0aGlzLmdyaWRBcGkgPSBwYXJhbXMuYXBpO1xuICAgICAgICBpZiAodGhpcy5yb3dNb2RlbFR5cGUgPT0gJ2NsaWVudFNpZGUnKSB7XG4gICAgICAgICAgICB0aGlzLmZldGNoRGF0YShudWxsLCBudWxsKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucm93RGF0YSA9IGRhdGEuaXRlbXM7XG4gICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLmZhaWwoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWR2YW5jZWRGaWx0ZXIoKSB7XG4gICAgICAgIHRoaXMuZW5hYmxlQWR2YW5jZWRGaWx0ZXIgPSAhdGhpcy5lbmFibGVBZHZhbmNlZEZpbHRlcjtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdyaWRBcGkuc2hvd0FkdmFuY2VkRmlsdGVyQnVpbGRlcigpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2FnLWljb24tbWF4aW1pemUnKVswXSBhcyBIVE1MRWxlbWVudCkuY2xpY2soKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0sIDEwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJvdXRlVG9Ob2RlKHJvd05vZGU6IElSb3dOb2RlKTogc3RyaW5nW10ge1xuICAgICAgICBpZiAoIXJvd05vZGUucGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLnRoaXMuZ2V0Um91dGVUb05vZGUocm93Tm9kZS5wYXJlbnQpLFxuICAgICAgICAgICAgcm93Tm9kZS5rZXkgPyByb3dOb2RlLmtleSA6IHJvd05vZGUuZGF0YS5lbXBsb3llZU5hbWUsXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcmVmcmVzaE5vZGUoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLmdyaWRBcGkuZ2V0Um93Tm9kZShpZCk7XG4gICAgICAgIGNvbnN0IHJvdXRlID0gdGhpcy5nZXRSb3V0ZVRvTm9kZShzZWxlY3RlZFJvd3MpO1xuICAgICAgICB0aGlzLmdyaWRBcGkucmVmcmVzaFNlcnZlclNpZGUoe1xuICAgICAgICAgICAgcHVyZ2U6IHRydWUsXG4gICAgICAgICAgICByb3V0ZTogcm91dGVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xlYXJGaWx0ZXIoKSB7XG4gICAgICAgIHRoaXMudmlzaWJsZUZpbHRlckJveCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9maWx0ZXJCb3hJdGVtcy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgICAgZWwudmFsdWUgPSBudWxsO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ncmlkQXBpLnNldEZpbHRlck1vZGVsKG51bGwpO1xuICAgICAgICB0aGlzLmdyaWRBcGkub25GaWx0ZXJDaGFuZ2VkKCk7XG4gICAgICAgIHRoaXMuZmlsdGVySXRlbXNWYWx1ZXMgPSBbXTtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgcmVmcmVzaFBhcmVudE5vZGUoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLmdyaWRBcGkuZ2V0Um93Tm9kZShpZCk7XG4gICAgICAgIGNvbnN0IHJvdXRlID0gdGhpcy5nZXRSb3V0ZVRvTm9kZShzZWxlY3RlZFJvd3MucGFyZW50KTtcbiAgICAgICAgdGhpcy5ncmlkQXBpLnJlZnJlc2hTZXJ2ZXJTaWRlKHtcbiAgICAgICAgICAgIHB1cmdlOiB0cnVlLFxuICAgICAgICAgICAgcm91dGU6IHJvdXRlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZpbHRlcigpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVGaWx0ZXJMYWJlbFZhbHVlKCk7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICB0aGlzLnZpc2libGVGaWx0ZXJCb3ggPSBmYWxzZTtcbiAgICB9XG5cbiAgICBzZXRUZW1wbGF0ZUZpbHRlcihpdGVtOiBGaWx0ZXJUZW1wbGF0ZU1vZGVsKSB7XG4gICAgICAgIHRoaXMuY2xlYXJGaWx0ZXIoKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpdGVtLmdyaWQuZmlsdGVyLmZpbHRlcnMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaW5kRWwgPSB0aGlzLl9jb2x1bW4uZmluZCgoaXRlbSkgPT4gaXRlbS5maWVsZCA9PSBlbC5maWVsZCB8fCBpdGVtLnNlYXJjaEZpZWxkID09IGVsLmZpZWxkKTtcbiAgICAgICAgICAgICAgICBpZiAoZmluZEVsICYmIHRoaXMuY29sdW1uRGVmcy5maW5kKChpdGVtKSA9PiBpdGVtLmZpZWxkID09IGZpbmRFbC5maWVsZCAmJiBpdGVtLmZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkQXBpLnNldENvbHVtbkZpbHRlck1vZGVsKGZpbmRFbC5maWVsZCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZWwubG9naWMsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IGVsLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fZmlsdGVyQm94SXRlbXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLmZpZWxkID09IGVsLmZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyQm94SXRlbXNbaW5kZXhdLnZhbHVlID0gZWwudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmdyaWRJZCA9IGl0ZW0uaWQ7XG4gICAgICAgICAgICB0aGlzLnZpc2libGVGaWx0ZXJUZW1wbGF0ZUJveCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRmlsdGVyTGFiZWxWYWx1ZSgpO1xuICAgICAgICAgICAgdGhpcy5ncmlkQXBpLm9uRmlsdGVyQ2hhbmdlZCgpO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH0sIDEwMCk7XG4gICAgfVxuXG4gICAgaGFuZGxlRmlsdGVyTGFiZWxWYWx1ZSgpIHtcbiAgICAgICAgdGhpcy5fZmlsdGVyQm94SXRlbXMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbmRFbCA9IHRoaXMuZmlsdGVySXRlbXNWYWx1ZXMuZmluZCgoZmkpID0+IGZpLmZpZWxkID09IGVsLmZpZWxkKTtcbiAgICAgICAgICAgIGlmICghZmluZEVsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsLnZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJJdGVtc1ZhbHVlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlbC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChlbC52YWx1ZSA9PSBudWxsIHx8IGVsLnZhbHVlID09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJJdGVtc1ZhbHVlcyA9IHRoaXMuZmlsdGVySXRlbXNWYWx1ZXMuZmlsdGVyKChmaSkgPT4gZmkuZmllbGQgIT0gZWwuZmllbGQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbmRFbC52YWx1ZSA9IGVsLnZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVGaWx0ZXIoaXRlbTogRmlsdGVySXRlbXNWYWx1ZXNNb2RlbCkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX2ZpbHRlckJveEl0ZW1zLmZpbmRJbmRleCgoZWwpID0+IGVsLmZpZWxkID09IGl0ZW0uZmllbGQpO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVyQm94SXRlbXNbaW5kZXhdLnZhbHVlID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZEFwaS5zZXRDb2x1bW5GaWx0ZXJNb2RlbChpdGVtLmZpZWxkLCBudWxsKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZEFwaS5vbkZpbHRlckNoYW5nZWQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbHRlckl0ZW1zVmFsdWVzID0gdGhpcy5maWx0ZXJJdGVtc1ZhbHVlcy5maWx0ZXIoKGVsKSA9PiBlbC5maWVsZCAhPSBpdGVtLmZpZWxkKTtcbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgY3JlYXRlU2VydmVyU2lkZURhdGFzb3VyY2UoKTogSVNlcnZlclNpZGVEYXRhc291cmNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGdldFJvd3M6IChwYXJhbXM6IElTZXJ2ZXJTaWRlR2V0Um93c1BhcmFtcykgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBmaWx0ZXI6IEZpbHRlckdyaWRJdGVtc01vZGVsID0gbnVsbDtcbiAgICAgICAgICAgICAgICBmaWx0ZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbG9naWM6ICdBTkQnLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgaWdub3JlQ2FzZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHRydW5jYXRlRGF0ZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMocGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWwpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGtleSA9PSAnYWctR3JpZC1BdXRvQ29sdW1uJyA/IHRoaXMuX3RyZWVHcm91cENvbHVtbiA6IGtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgb3BlcmF0b3IgPSBGaWx0ZXJPcGVyYXRvci5lcXVhbHM7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaWdub3JlQ2FzZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluZEVsID0gdGhpcy5fY29sdW1uLmZpbmQoKGVsKSA9PiBlbC5maWVsZCA9PSBrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PSAnYWctR3JpZC1BdXRvQ29sdW1uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkID0gdGhpcy5fdHJlZUdyb3VwQ29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCA9IGtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmluZEVsLnNlYXJjaEZpZWxkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgPSBmaW5kRWwuc2VhcmNoRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0uZmlsdGVyVHlwZSA9PSAnY3VzdG9tLWRhdGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0uZGF0ZUZyb20gJiYgcGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS5kYXRlVG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBGaWx0ZXJPcGVyYXRvci5iZXR3ZWVuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IFtwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbFtrZXldLmRhdGVGcm9tLCBwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbFtrZXldLmRhdGVUb107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbFtrZXldLmRhdGVGcm9tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID0gRmlsdGVyT3BlcmF0b3IudHJ1bmNHcmVhdGVyVGhhbkVxdWFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0uZGF0ZUZyb207XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbFtrZXldLmRhdGVUbyAmJiBwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbFtrZXldLmRhdGVUbyAhPSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID0gRmlsdGVyT3BlcmF0b3IudHJ1bmNMZXNzVGhhbk9yRXF1YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS5kYXRlVG87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbFtrZXldLmZpbHRlclR5cGUgPT0gJ2N1c3RvbS10aW1lJyAmJiBwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbFtrZXldLnRpbWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID0gRmlsdGVyT3BlcmF0b3IuZXF1YWxzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYCR7cGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS50aW1lLnN1YnN0cigwLCAyKX06JHtwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbFtrZXldLnRpbWUuc3Vic3RyKDIsIDIpfToke3BhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0udGltZS5zdWJzdHIoNCwgMil9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEZpbHRlck9wZXJhdG9yW3BhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0udHlwZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBGaWx0ZXJPcGVyYXRvcltwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbFtrZXldLnR5cGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVDYXNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0uZmlsdGVyID8gcGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS5maWx0ZXIgOiBwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbFtrZXldLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmRFbCAmJiBmaW5kRWwudHlwZSA9PSAnZW51bScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlQ2FzZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRGaWx0ZXJJdGVtc0VsID0gdGhpcy5maWx0ZXJJdGVtc1ZhbHVlcy5maW5kKChmaSkgPT4gZmkuZmllbGQgPT0gZmluZEVsLmZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmluZEZpbHRlckl0ZW1zRWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckl0ZW1zVmFsdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogZmluZEVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogZmluZEVsLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluZEZpbHRlckl0ZW1zRWwudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5maWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljOiAnQU5EJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUNhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1bmNhdGVEYXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmZpbHRlckl0ZW1zVmFsdWVzID0gc3RydWN0dXJlZENsb25lKHRoaXMuZmlsdGVySXRlbXNWYWx1ZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgc29ydHM6IFNvcnRNb2RlbFtdID0gW107XG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5yZXF1ZXN0LnNvcnRNb2RlbC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluZEVsID0gdGhpcy5fY29sdW1uLmZpbmQoKGVsKSA9PiBlbC5maWVsZCA9PSBwYXJhbXMucmVxdWVzdC5zb3J0TW9kZWxbMF0uY29sSWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmluZEVsLnNlYXJjaEZpZWxkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRzID0gW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXI6IHBhcmFtcy5yZXF1ZXN0LnNvcnRNb2RlbFswXS5zb3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBmaW5kRWwuc2VhcmNoRmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgIH1dO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc29ydHMgPSBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcjogcGFyYW1zLnJlcXVlc3Quc29ydE1vZGVsWzBdLnNvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IHBhcmFtcy5yZXF1ZXN0LnNvcnRNb2RlbFswXS5jb2xJZFxuICAgICAgICAgICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JpZEZpbHRlcjogR3JpZElucHV0TW9kZWwgPSB7XG4gICAgICAgICAgICAgICAgICAgIHRha2U6IHBhcmFtcy5hcGkucGFnaW5hdGlvbkdldFBhZ2VTaXplKCksXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHt9LFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgIHNraXA6IHBhcmFtcy5hcGkucGFnaW5hdGlvbkdldEN1cnJlbnRQYWdlKCkgKiBwYXJhbXMuYXBpLnBhZ2luYXRpb25HZXRQYWdlU2l6ZSgpLFxuICAgICAgICAgICAgICAgICAgICBzb3J0c1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdFBhcmFtczogR3JpZFJlcXVlc3RQYXJhbSA9IHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZTogcGFyYW1zLnBhcmVudE5vZGUuZGF0YVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyQm94SXRlbXMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsLnZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbC5wb3NpdGlvbiA9PSAnZmlsdGVyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZWwudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBGaWx0ZXJPcGVyYXRvci5jb250YWlucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdkYXRlJzogY2FzZSAnZGF0ZS10aW1lJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID0gRmlsdGVyT3BlcmF0b3IuYmV0d2VlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbC52YWx1ZVswXSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWwudmFsdWVbMF0gPSBuZXcgRGF0ZSgnMTk5Ny0wMS0wMScpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVsLnZhbHVlWzFdID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC52YWx1ZVsxXSA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBGaWx0ZXJPcGVyYXRvci5lcXVhbHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZEZpbHRlci5maWx0ZXIuZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyczogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlQ2FzZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljOiAnQU5EJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydW5jYXRlRGF0ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlbC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkRmlsdGVyLmRhdGFbZWwuZmllbGRdID0gZWwudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZXF1aXJlRmlsdGVyT3JEYXRhICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVxdWlyZUZpbHRlck9yRGF0YSAmJiAoKGdyaWRGaWx0ZXIuZGF0YSA9PSBudWxsIHx8IE9iamVjdC5rZXlzKGdyaWRGaWx0ZXIuZGF0YSkubGVuZ3RoID09IDApICYmIChncmlkRmlsdGVyLmZpbHRlci5maWx0ZXJzID09IG51bGwgfHwgZ3JpZEZpbHRlci5maWx0ZXIuZmlsdGVycy5sZW5ndGggPT0gMCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90b2FzdC5zaG93KCfYqNix2KfbjCDZhtmF2KfbjNi0INin2LfZhNin2LnYp9iqINiMINin2YbYqtiu2KfYqCDbjNqpINmB24zZhNiq2LEg2KfZhNiy2KfZhduMINin2LPYqicsICd3YXJuaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuc3VjY2Vzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93RGF0YTogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93Q291bnQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE1vZGVsID0gZ3JpZEZpbHRlcjtcbiAgICAgICAgICAgICAgICB0aGlzLmZldGNoRGF0YShncmlkRmlsdGVyLCByZXF1ZXN0UGFyYW1zKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXMuc3VjY2Vzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhOiBkYXRhLml0ZW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm93Q291bnQ6IGRhdGEudG90YWxDb3VudCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJvd01vZGVsVHlwZSA9PSAnc2VydmVyU2lkZScgJiYgdGhpcy5ncmlkQXBpLmdldFNlcnZlclNpZGVTZWxlY3Rpb25TdGF0ZSgpWydzZWxlY3RBbGwnXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGwoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmZhaWwoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmZXRjaFRlbXBsYXRlKCkge1xuICAgICAgICBpZiAodGhpcy5pZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBkYi5ncmlkRmlsdGVySXRlbXMuZmlsdGVyKChlbCkgPT4gZWwudGFibGVJZCA9PSB0aGlzLmlkKS50b0FycmF5KCkudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJUZW1wbGF0ZUl0ZW1zID0gcmVzO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mZXRjaFRlbXBsYXRlKCk7XG4gICAgfVxufSIsIjwhLS0gPGJ1dHRvbiAoY2xpY2spPVwiZW5hYmxlQWR2YW5jZWRGaWx0ZXI9IWVuYWJsZUFkdmFuY2VkRmlsdGVyXCI+YWR2YW5jZWQ8L2J1dHRvbj4gLS0+XG48ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIHB5LTQgYm9yZGVyLWIgYm9yZGVyLWItc2xhdGUtMjAwIG14LTRcIiAqbmdJZj1cImlzVG9vbGJhclwiPlxuICAgIDxkaXY+XG4gICAgICAgIDxoNCBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC0yeGxcIj57eyBsYWJlbCB9fTwvaDQ+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTNcIj5cbiAgICAgICAgQGZvciAoaXRlbSBvZiB0b29sYmFySXRlbXM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICA8YnV0dG9uIG56LWJ1dHRvbiBbbnpMb2FkaW5nXT1cIml0ZW0ubG9hZGluZyA/IGl0ZW0ubG9hZGluZyA6IGZhbHNlXCIgKGNsaWNrKT1cImhhbmRsZUNsaWNrKGl0ZW0pXCIgW256VHlwZV09XCJpdGVtLnR5cGVcIj5cbiAgICAgICAgICAgIDxzcGFuIG56LWljb24gW256VHlwZV09XCJpdGVtLmljb25cIj48L3NwYW4+XG4gICAgICAgICAgICB7eyBpdGVtLnRleHQgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbnotYnV0dG9uXG4gICAgICAgICAgICBuelR5cGU9XCJkZWZhdWx0XCJcbiAgICAgICAgICAgIG56LXBvcG92ZXJcbiAgICAgICAgICAgIG56UG9wb3ZlclRpdGxlPVwiXCJcbiAgICAgICAgICAgIFsobnpQb3BvdmVyVmlzaWJsZSldPVwidmlzaWJsZUZpbHRlckJveFwiXG4gICAgICAgICAgICBuelBvcG92ZXJUcmlnZ2VyPVwiY2xpY2tcIlxuICAgICAgICAgICAgW256UG9wb3ZlckNvbnRlbnRdPVwiY29udGVudFRlbXBsYXRlXCJcbiAgICAgICAgICAgIG56UG9wb3Zlck92ZXJsYXlDbGFzc05hbWU9XCJmaWx0ZXItcG9wb3ZlclwiXG4gICAgICAgICAgICBuelBvcG92ZXJQbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgICAgICAgICAgKm5nSWY9XCJfZmlsdGVyQm94SXRlbXMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPHNwYW4gbnotaWNvbiBuelR5cGU9XCJmaWx0ZXJcIj48L3NwYW4+XG4gICAgICAgICAgICDZgduM2YTYqtixXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBuei1idXR0b25cbiAgICAgICAgICAgIG56VHlwZT1cImRlZmF1bHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICBuei1wb3BvdmVyXG4gICAgICAgICAgICBuelBvcG92ZXJUaXRsZT1cIlwiXG4gICAgICAgICAgICBbKG56UG9wb3ZlclZpc2libGUpXT1cInZpc2libGVGaWx0ZXJUZW1wbGF0ZUJveFwiXG4gICAgICAgICAgICBuelBvcG92ZXJUcmlnZ2VyPVwiY2xpY2tcIlxuICAgICAgICAgICAgW256UG9wb3ZlckNvbnRlbnRdPVwiY29udGVudEZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgIG56UG9wb3Zlck92ZXJsYXlDbGFzc05hbWU9XCJmaWx0ZXItcG9wb3Zlci1zbVwiXG4gICAgICAgICAgICBuelBvcG92ZXJQbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgICAgICAgICAgKm5nSWY9XCJpZCAhPSBudWxsXCI+XG4gICAgICAgICAgICA8c3BhbiBuei1pY29uIG56VHlwZT1cImxheW91dFwiPjwvc3Bhbj5cbiAgICAgICAgICAgINmB24zZhNiq2LEg2YfYp9uMINiw2K7bjNix2Ycg2LTYr9mHXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG56LWJ1dHRvbiAoY2xpY2spPVwicmVmcmVzaCgpXCIgbnpUeXBlPVwiZGVmYXVsdFwiPlxuICAgICAgICAgICAgPHNwYW4gbnotaWNvbiBuelR5cGU9XCJzeW5jXCI+PC9zcGFuPlxuICAgICAgICAgICAg2KjYsdmI2LLYsdiz2KfZhtuMXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8IS0tIDxidXR0b24gbnotYnV0dG9uIChjbGljayk9XCJhZHZhbmNlZEZpbHRlcigpXCIgKm5nSWY9XCJzaG93QWR2YW5jZWRCdXR0b25cIiBuelR5cGU9XCJkZWZhdWx0XCI+XG4gICAgICAgICAgICA8c3BhbiBuei1pY29uIG56VHlwZT1cImZpbHRlclwiPjwvc3Bhbj5cbiAgICAgICAgICAgINis2LPYqtis2YjbjCDZvtuM2LTYsdmB2KrZh1xuICAgICAgICA8L2J1dHRvbj4gLS0+XG4gICAgPC9kaXY+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjY29udGVudFRlbXBsYXRlIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgPGRpdiBjbGFzcz1cImdyaWQgZ2FwLXgtNCBwdC00XCIgW25nQ2xhc3NdPVwieyAnZ3JpZC1jb2xzLTEnOiBfZmlsdGVyQm94SXRlbXMubGVuZ3RoID09IDEsICdncmlkLWNvbHMtMic6IF9maWx0ZXJCb3hJdGVtcy5sZW5ndGggPiAxIH1cIj5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBfZmlsdGVyQm94SXRlbXNcIiBbbmdDbGFzc109XCJ7ICdjb2wtc3Bhbi0yJzogaXRlbS50eXBlID09ICdkYXRlJyB8fCBpdGVtLnR5cGUgPT0gJ2RhdGUtdGltZScgfVwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0udHlwZSA9PSAnZGF0ZScgfHwgaXRlbS50eXBlID09ICdkYXRlLXRpbWUnXCIgY2xhc3M9XCJncmlkIGdyaWQtY29scy0yIGdhcC14LTRcIj5cbiAgICAgICAgICAgICAgICA8bnotZm9ybS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICA8bnotZm9ybS1sYWJlbD7Yp9iyINiq2KfYsduM2K48L256LWZvcm0tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxuei1mb3JtLWNvbnRyb2w+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cWV5ZGFyLWRhdGUtcGlja2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiaXRlbS52YWx1ZSAhPSBudWxsID8gaXRlbS52YWx1ZVswXSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZVZhbHVlKT1cImNoYW5nZURhdGVQaWNrZXJWYWx1ZSgkZXZlbnQsIGl0ZW0sIDApXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1RvZGF5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthbGxvd0VtcHR5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYWxlbmRhclR5cGVdPVwiJ2phbGFsaSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdD1cInl5eXktTU0tZGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtydGxdPVwidHJ1ZVwiPjwvcWV5ZGFyLWRhdGUtcGlja2VyPlxuICAgICAgICAgICAgICAgICAgICA8L256LWZvcm0tY29udHJvbD5cbiAgICAgICAgICAgICAgICA8L256LWZvcm0taXRlbT5cbiAgICAgICAgICAgICAgICA8bnotZm9ybS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICA8bnotZm9ybS1sYWJlbD7YqtinINiq2KfYsduM2K48L256LWZvcm0tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxuei1mb3JtLWNvbnRyb2w+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cWV5ZGFyLWRhdGUtcGlja2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiaXRlbS52YWx1ZSAhPSBudWxsID8gaXRlbS52YWx1ZVsxXSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZVZhbHVlKT1cImNoYW5nZURhdGVQaWNrZXJWYWx1ZSgkZXZlbnQsIGl0ZW0sIDEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1RvZGF5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthbGxvd0VtcHR5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYWxlbmRhclR5cGVdPVwiJ2phbGFsaSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdD1cInl5eXktTU0tZGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtydGxdPVwidHJ1ZVwiPjwvcWV5ZGFyLWRhdGUtcGlja2VyPlxuICAgICAgICAgICAgICAgICAgICA8L256LWZvcm0tY29udHJvbD5cbiAgICAgICAgICAgICAgICA8L256LWZvcm0taXRlbT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0udHlwZSA9PSAnZW51bScgfHwgaXRlbS50eXBlID09ICdzZWxlY3QnIHx8IGl0ZW0udHlwZSA9PSAnYm9vbGVhbidcIj5cbiAgICAgICAgICAgICAgICA8bnotZm9ybS1pdGVtIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuei1mb3JtLWxhYmVsPnt7IGl0ZW0ubGFiZWwgfX08L256LWZvcm0tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxuei1zZWxlY3QgY2xhc3M9XCJ3LWZ1bGxcIiBbKG5nTW9kZWwpXT1cIml0ZW0udmFsdWVcIiBuelNob3dTZWFyY2g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bnotb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtMiBvZiBpdGVtLml0ZW1zXCIgW256VmFsdWVdPVwiaXRlbTIudmFsdWVcIiBbbnpMYWJlbF09XCJpdGVtMi5sYWJlbFwiPjwvbnotb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L256LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L256LWZvcm0taXRlbT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0udHlwZSA9PSAndHJlZS1zZWxlY3QnXCI+XG4gICAgICAgICAgICAgICAgPG56LWZvcm0taXRlbSBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8bnotZm9ybS1sYWJlbD57eyBpdGVtLmxhYmVsIH19PC9uei1mb3JtLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8bnotdHJlZS1zZWxlY3QgY2xhc3M9XCJ3LWZ1bGxcIiBbbnpOb2Rlc109XCJpdGVtLm5vZGVzXCIgbnpTaG93U2VhcmNoIFsobmdNb2RlbCldPVwiaXRlbS52YWx1ZVwiPjwvbnotdHJlZS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9uei1mb3JtLWl0ZW0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtLnR5cGUgPT0gJ3N0cmluZycgfHwgaXRlbS50eXBlID09IG51bGxcIj5cbiAgICAgICAgICAgICAgICA8bnotZm9ybS1pdGVtIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuei1mb3JtLWxhYmVsPnt7IGl0ZW0ubGFiZWwgfX08L256LWZvcm0tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG56LWlucHV0IFsobmdNb2RlbCldPVwiaXRlbS52YWx1ZVwiIC8+XG4gICAgICAgICAgICAgICAgPC9uei1mb3JtLWl0ZW0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTIgcHQtNCBtdC00IGJvcmRlci10IGJvcmRlci10LXNsYXRlLTIwMFwiPlxuICAgICAgICA8YnV0dG9uIG56LWJ1dHRvbiBuelR5cGU9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImZpbHRlcigpXCI+2KfYudmF2KfZhDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG56LWJ1dHRvbiBuelR5cGU9XCJkZWZhdWx0XCIgKGNsaWNrKT1cImNsZWFyRmlsdGVyKClcIj7Zvtin2qnYs9in2LLbjCDZiCDYqNiz2KrZhjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjwhLS0gdGVtcGxhdGUgaXRlbXMgYm94ICAtLT5cbjxuZy10ZW1wbGF0ZSAjY29udGVudEZpbHRlclRlbXBsYXRlIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgPHVsIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMiBtYXgtaC1bMzAwcHhdXCI+XG4gICAgICAgIDxsaSBjbGFzcz1cInAtMiByb3VuZGVkLWxnIGN1cnNvci1wb2ludGVyIGJvcmRlciBib3JkZXItc2xhdGUtMjAwXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyVGVtcGxhdGVJdGVtc1wiIChjbGljayk9XCJzZXRUZW1wbGF0ZUZpbHRlcihpdGVtKVwiPnt7IGl0ZW0udGl0bGUgfX08L2xpPlxuICAgIDwvdWw+XG48L25nLXRlbXBsYXRlPlxuPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBweC00IHB5LTIgaC0xNFwiICpuZ0lmPVwiaXNUb29sYmFyXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1tZWRpdW0gdGV4dC1zbSB0ZXh0LWJsdWUtNTAwXCI+2YHbjNmE2KrYsdmH2KfbjCDYp9i52YXYp9mEINi02K/Zhzo8L3NwYW4+XG4gICAgICAgIDx1bCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJiZy13aGl0ZSBib3JkZXIgYm9yZGVyLXNsYXRlLTIwMCByb3VuZGVkLW1kIHB4LTIgcHktMSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBoLThcIiAqbmdJZj1cImZpbHRlckl0ZW1zVmFsdWVzLmxlbmd0aCA9PSAwXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNsYXRlLTgwMCBmb250LW1lZGl1bSB0ZXh0LXNtXCI+2KjYr9mI2YYg2YHbjNmE2KrYsTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJiZy13aGl0ZSBib3JkZXIgYm9yZGVyLXNsYXRlLTIwMCByb3VuZGVkLW1kIHB4LTIgcHktMSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBoLThcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJJdGVtc1ZhbHVlc1wiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInRleHQtc2xhdGUtNTAwIHRleHQtc21cIj57eyBpdGVtLmxhYmVsIH19OjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNsYXRlLTgwMCBmb250LW1lZGl1bSB0ZXh0LXNtXCI+e3sgaXRlbS52YWx1ZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXJlZ3VsYXIgZmEtdGltZXMgY3Vyc29yLXBvaW50ZXIgcHMtMlwiIChjbGljayk9XCJyZW1vdmVGaWx0ZXIoaXRlbSlcIj48L2k+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiICpuZ0lmPVwiaWQgIT0gbnVsbFwiPlxuICAgICAgICA8YnV0dG9uIG56LWJ1dHRvbiBuelR5cGU9XCJkZWZhdWx0XCIgKm5nSWY9XCJmaWx0ZXJJdGVtc1ZhbHVlcy5sZW5ndGggPiAwIHx8IGdyaWRJZCAhPSBudWxsXCIgKGNsaWNrKT1cInNhdmVGaWx0ZXJHcmlkKClcIj5cbiAgICAgICAgICAgIHt7IGdyaWRJZCA9PSBudWxsID8gJ9iw2K7bjNix2Ycg2YHbjNmE2KrYsScgOiAn2KfYudmF2KfZhCDYqti624zbjNix2KfYqiDZgduM2YTYqtixJyB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBuei1idXR0b24gbnpUeXBlPVwiZGVmYXVsdFwiICpuZ0lmPVwiZ3JpZElkICE9IG51bGxcIiAoY2xpY2spPVwiY2xlYXJGaWx0ZXIoKTsgZ3JpZElkID0gbnVsbFwiPtmE2LrZiDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxuei1tb2RhbCBbKG56VmlzaWJsZSldPVwiaXNWaXNpYmxlTW9kYWxcIiBuelRpdGxlPVwi2KfZgdiy2YjYr9mGINmC2KfZhNioINis2K/bjNivXCIgKG56T25DYW5jZWwpPVwiaGFuZGxlQ2FuY2VsTW9kYWwoKVwiIChuek9uT2spPVwiaGFuZGxlT2tNb2RhbCgpXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbnpNb2RhbENvbnRlbnQ+XG4gICAgICAgIDxuei1mb3JtLWl0ZW0gY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgIDxuei1mb3JtLWxhYmVsPti52YbZiNin2YYg2YLYp9mE2Kg8L256LWZvcm0tbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuei1pbnB1dCBbKG5nTW9kZWwpXT1cInRlbXBsYXRlTmFtZVwiIC8+XG4gICAgICAgIDwvbnotZm9ybS1pdGVtPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uei1tb2RhbD5cblxuPGFnLWdyaWQtYW5ndWxhclxuICAgIHN0eWxlPVwid2lkdGg6IDEwMCVcIlxuICAgIFtzdHlsZV09XCJpc1Rvb2xiYXIgPyAnaGVpZ2h0OiBjYWxjKDEwMCUgLSAxcmVtIC0gMTI0cHgpOycgOiAnaGVpZ2h0OiAxMDAlOydcIlxuICAgIFtjb2x1bW5EZWZzXT1cImNvbHVtbkRlZnNcIlxuICAgIFtwYWdpbmF0aW9uXT1cInRydWVcIlxuICAgIFtwYWdpbmF0aW9uUGFnZVNpemVdPVwicGFnaW5hdGlvblBhZ2VTaXplXCJcbiAgICBbcGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3JdPVwicGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3JcIlxuICAgIFtjbGFzc109XCJ0aGVtZUNsYXNzXCJcbiAgICBbcm93SGVpZ2h0XT1cIjQ4XCJcbiAgICBbZGVmYXVsdENvbERlZl09XCJkZWZhdWx0Q29sRGVmXCJcbiAgICBbZW5hYmxlQWR2YW5jZWRGaWx0ZXJdPVwiZW5hYmxlQWR2YW5jZWRGaWx0ZXJcIlxuICAgIFtlbmFibGVSdGxdPVwicnRsXCJcbiAgICBbdHJlZURhdGFdPVwidHJlZU1vZGVsXCJcbiAgICBbYXV0b0dyb3VwQ29sdW1uRGVmXT1cImF1dG9Hcm91cENvbHVtbkRlZlwiXG4gICAgW2lzU2VydmVyU2lkZUdyb3VwXT1cImlzU2VydmVyU2lkZUdyb3VwXCJcbiAgICBbZ2V0U2VydmVyU2lkZUdyb3VwS2V5XT1cImdldFNlcnZlclNpZGVHcm91cEtleVwiXG4gICAgW3Jvd01vZGVsVHlwZV09XCJyb3dNb2RlbFR5cGVcIlxuICAgIFtyb3dEYXRhXT1cInJvd0RhdGFcIlxuICAgIFtzZXJ2ZXJTaWRlRGF0YXNvdXJjZV09XCJkYXRhc291cmNlXCJcbiAgICAoZ3JpZFJlYWR5KT1cIm9uR3JpZFJlYWR5KCRldmVudClcIlxuICAgIFtjYWNoZUJsb2NrU2l6ZV09XCJwYWdpbmF0aW9uUGFnZVNpemVcIlxuICAgIFttYXhCbG9ja3NJbkNhY2hlXT1cIjJcIlxuICAgIFtjb250ZXh0XT1cInsgYWN0aW9uSXRlbXM6IGFjdGlvbkl0ZW1zIH1cIlxuICAgIChjZWxsRG91YmxlQ2xpY2tlZCk9XCJjZWxsRG91YmxlQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICBbYXV0b1NpemVTdHJhdGVneV09XCJfYXV0b0NvbHVtblNpemVcIlxuICAgIFtyb3dTZWxlY3Rpb25dPVwiX3Jvd1NlbGVjdGlvblwiXG4gICAgKHNlbGVjdGlvbkNoYW5nZWQpPVwic2VsZWN0aW9uQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICBbdGhlbWVdPVwiXCJcbiAgICBbZ2V0Um93Q2xhc3NdPVwiZ2V0Um93Q2xhc3NcIlxuICAgICNncmlkIC8+XG4iXX0=
|