gamma-app-controller 1.1.1 → 1.1.2
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/esm2020/lib/application-controller/common.mjs +7 -12
- package/esm2020/lib/application-controller/shared/advanced-component/gamma-advance-operator-table/gamma-advance-operator-table.component.mjs +14 -3
- package/esm2020/lib/application-controller/shared/advanced-component/gamma-table-clumn-bar-chart/gamma-table-clumn-bar-chart.component.mjs +14 -3
- package/esm2020/lib/application-controller/shared/advanced-component/gamma-table-with-percentage/gamma-table-with-percentage.component.mjs +20 -5
- package/esm2020/lib/application-controller/support-components/dash-table/dash-table.component.mjs +4 -3
- package/esm2020/lib/application-controller/support-components/table-with-bar/table-with-bar.component.mjs +4 -3
- package/fesm2015/gamma-app-controller.mjs +57 -23
- package/fesm2015/gamma-app-controller.mjs.map +1 -1
- package/fesm2020/gamma-app-controller.mjs +57 -23
- package/fesm2020/gamma-app-controller.mjs.map +1 -1
- package/lib/application-controller/shared/advanced-component/gamma-advance-operator-table/gamma-advance-operator-table.component.d.ts +2 -0
- package/lib/application-controller/shared/advanced-component/gamma-table-clumn-bar-chart/gamma-table-clumn-bar-chart.component.d.ts +2 -0
- package/lib/application-controller/shared/advanced-component/gamma-table-with-percentage/gamma-table-with-percentage.component.d.ts +2 -0
- package/lib/application-controller/support-components/dash-table/dash-table.component.d.ts +1 -0
- package/lib/application-controller/support-components/table-with-bar/table-with-bar.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -28,6 +28,7 @@ export class GammaAdvanceOperatorTableComponent {
|
|
|
28
28
|
this.isLoader = true;
|
|
29
29
|
this.page_config = value;
|
|
30
30
|
this.page_parms = value.titleParams;
|
|
31
|
+
this.tableHeight = (value.kpiConfig.dataConfig.tableHeight && value.kpiConfig.dataConfig.tableHeight !== "") ? this.setTableHeight(value.kpiConfig.dataConfig.tableHeight) : 'auto';
|
|
31
32
|
if (value.kpiConfig.dataSource && value.kpiConfig.dataSource.length !== 0) {
|
|
32
33
|
if (value.kpiConfig.formate == "daily") {
|
|
33
34
|
const sortedData = value.kpiConfig.dataSource
|
|
@@ -137,6 +138,16 @@ export class GammaAdvanceOperatorTableComponent {
|
|
|
137
138
|
}
|
|
138
139
|
}
|
|
139
140
|
}
|
|
141
|
+
setTableHeight(value) {
|
|
142
|
+
const tableHeight = value;
|
|
143
|
+
if (tableHeight === 'auto') {
|
|
144
|
+
return 'auto';
|
|
145
|
+
}
|
|
146
|
+
const parsedHeight = Number(tableHeight);
|
|
147
|
+
if (!isNaN(parsedHeight) && parsedHeight > 0) {
|
|
148
|
+
return parsedHeight;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
140
151
|
callServiceFunction(functionName, value) {
|
|
141
152
|
if (typeof this.commonService[functionName] === "function") {
|
|
142
153
|
return this.commonService[functionName](value);
|
|
@@ -148,10 +159,10 @@ export class GammaAdvanceOperatorTableComponent {
|
|
|
148
159
|
}
|
|
149
160
|
}
|
|
150
161
|
GammaAdvanceOperatorTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GammaAdvanceOperatorTableComponent, deps: [{ token: i1.CommonService }], target: i0.ɵɵFactoryTarget.Component });
|
|
151
|
-
GammaAdvanceOperatorTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: GammaAdvanceOperatorTableComponent, selector: "app-gamma-advance-operator-table", inputs: { rightClickEnable: "rightClickEnable", chartDataSource: "chartDataSource" }, outputs: { getTableConfigOutPut: "getTableConfigOutPut", oRowClick: "oRowClick", onrightClickContextSelection: "onrightClickContextSelection" }, ngImport: i0, template: "<div class=\"mx-2 bg-gray-800\">\n <ng-container *ngIf=\"isLoader\">\n <div class=\"flex justify-center items-start bg-gray-800 p-2\">\n <app-loader></app-loader>\n </div>\n </ng-container>\n\n <div class=\"mx-2 pb-2\">\n <!-- <dx-data-grid [columnAutoWidth]=\"true\" (onRowClick)=\"onRowClick($event)\" [dataSource]=\"dataSourseForTable\"\n [hoverStateEnabled]=\"true\" [selectedRowKeys]=\"[]\" [showBorders]=\"true\" [showColumnLines]=\"true\"\n *ngIf=\"!isLoader\" [columns]=\"tableDataConfig.columns\" [showRowLines]=\"true\" id=\"gridContainer\"\n (onContextMenuPreparing)=\"addMenuItems($event)\">\n <dxo-search-panel [highlightCaseSensitive]=\"true\"\n [visible]=\"tableDataConfig.searchPanel\"></dxo-search-panel>\n <dxo-export [enabled]=\"true\" fileName=\"{{tableDataConfig.file_name}}\"\n [customizeExcelCell]=\"commonService.customizeExcelCell\"></dxo-export>\n <dxo-paging [pageSize]=\"tableDataConfig.numberOfRow\"></dxo-paging>\n <dxo-pager [showInfo]=\"tableDataConfig.pageInfo\" [showPageSizeSelector]=\"true\"\n [allowedPageSizes]=\"tableDataConfig.allowedPageSizes\">\n </dxo-pager>\n <ng-container *ngIf=\"tableDataConfig.columns && tableDataConfig.columns.length !== 0\">\n <ng-container *ngFor=\"let item of tableDataConfig.columns\">\n <dxi-column *ngIf=\"item.dataField == 'recordDate'\" dataField=\"{{ item.dataField }}\"\n [caption]=\"item.caption\" [visible]=\"item.visible\" sortOrder=\"desc\"></dxi-column>\n <dxi-column *ngIf=\"item.dataField !== 'recordDate'\" format=\"#,##0.##\"\n [sortingMethod]=\"commonService.customValueSorter\" [cellTemplate]=\"item.dataField\"\n [caption]=\"item.caption\" dataField=\"{{ item.dataField }}\" alignment=\"left\"\n [visible]=\"item.visible\">\n </dxi-column>\n </ng-container>\n <ng-container *ngFor=\"let item of tableDataConfig.columns\">\n <div *dxTemplate=\"let data of item.dataField\">\n <span [innerHTML]=\"data.value\"></span>\n </div>\n </ng-container>\n </ng-container>\n\n </dx-data-grid> -->\n <dx-data-grid [columnAutoWidth]=\"true\" (onRowClick)=\"onRowClick($event)\" [dataSource]=\"dataSourseForTable\"\n [hoverStateEnabled]=\"true\" [selectedRowKeys]=\"[]\" [showBorders]=\"true\" [showColumnLines]=\"true\"\n *ngIf=\"!isLoader\" [columns]=\"tableDataConfig.columns\" [showRowLines]=\"true\" id=\"gridContainer\"\n (onContextMenuPreparing)=\"addMenuItems($event)\"\n [customizeExportData]=\"commonService.removeHtmlContentFromData\">\n <dxo-search-panel [highlightCaseSensitive]=\"true\"\n [visible]=\"tableDataConfig.searchPanel\"></dxo-search-panel>\n <dxo-export [enabled]=\"true\" fileName=\"{{tableDataConfig.file_name}}\"\n [customizeExcelCell]=\"commonService.customizeExcelCell\"></dxo-export>\n <dxo-paging [pageSize]=\"tableDataConfig.numberOfRow\"></dxo-paging>\n <dxo-pager [showInfo]=\"tableDataConfig.pageInfo\" [showPageSizeSelector]=\"true\"\n [allowedPageSizes]=\"tableDataConfig.allowedPageSizes\">\n </dxo-pager>\n\n <!-- <ng-container *ngFor=\"let item of tableDataConfig.columns\">\n <dxi-column *ngIf=\"item.dataField == 'recordDate'\" dataField=\"{{ item.dataField }}\"\n [caption]=\"item.caption\" [visible]=\"item.visible\" sortOrder=\"desc\"></dxi-column>\n <dxi-column *ngIf=\"item.dataField !== 'recordDate'\" [sortingMethod]=\"commonService.customValueSorter\"\n [cellTemplate]=\"item.dataField\" [caption]=\"item.caption\" dataField=\"{{ item.dataField }}\"\n alignment=\"left\" [visible]=\"item.visible\">\n </dxi-column>\n </ng-container> -->\n\n <ng-container *ngFor=\"let item of tableDataConfig.columns\">\n <!-- Check if column has nested columns (columnsOne structure) -->\n <dxi-column *ngIf=\"item.columns; else flatColumn\" caption=\"{{ item.caption }}\">\n <ng-container *ngFor=\"let subItem of item.columns\">\n\n <dxi-column *ngIf=\"subItem.dataField == 'recordDate'\" \n [dataField]=\"subItem.dataField\" [caption]=\"subItem.caption\"\n [visible]=\"subItem.visible\" alignment=\"left\" \n sortOrder=\"desc\"></dxi-column>\n\n <dxi-column *ngIf=\"subItem.dataField !== 'recordDate'\" [dataField]=\"subItem.dataField\" [caption]=\"subItem.caption\"\n [visible]=\"subItem.visible\" alignment=\"right\" [cellTemplate]=\"item.dataField\"\n [sortingMethod]=\"commonService.customValueSorter\"></dxi-column>\n </ng-container>\n </dxi-column>\n\n <!-- Flat column structure (columnsTwo structure) -->\n <ng-template #flatColumn>\n\n <dxi-column *ngIf=\"item.dataField == 'recordDate'\" dataField=\"{{ item.dataField }}\"\n [caption]=\"item.caption\" [visible]=\"item.visible\" sortOrder=\"desc\"></dxi-column>\n\n <dxi-column *ngIf=\"item.dataField !== 'recordDate'\" [sortingMethod]=\"commonService.customValueSorter\"\n [cellTemplate]=\"item.dataField\" [caption]=\"item.caption\" dataField=\"{{ item.dataField }}\"\n alignment=\"right\" [visible]=\"item.visible\">\n </dxi-column>\n\n\n <!-- <dxi-column [dataField]=\"item.dataField\" [caption]=\"item.caption\" [visible]=\"item.visible\"\n [cellTemplate]=\"item.dataField\" alignment=\"left\"\n [sortingMethod]=\"commonService.customValueSorter\"></dxi-column> -->\n </ng-template>\n </ng-container>\n\n <ng-container *ngFor=\"let item of tableDataConfig.columns\">\n <div *dxTemplate=\"let data of item.dataField\">\n <span [innerHTML]=\"data.value\"></span>\n </div>\n </ng-container>\n </dx-data-grid>\n\n </div>\n\n\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i4.DxoExportComponent, selector: "dxo-export", inputs: ["backgroundColor", "enabled", "fileName", "formats", "margin", "printingEnabled", "proxyUrl", "svgToCanvas", "allowExportSelectedData", "customizeExcelCell", "excelFilterEnabled", "excelWrapTextEnabled", "ignoreExcelErrors", "texts"] }, { kind: "component", type: i5.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "customizeExportData", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "focusStateEnabled", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExported", "onExporting", "onFileSaving", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "customizeExportDataChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "focusStateEnabledChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i4.DxiColumnComponent, selector: "dxi-column", inputs: ["alignment", "allowEditing", "allowExporting", "allowFiltering", "allowFixing", "allowGrouping", "allowHeaderFiltering", "allowHiding", "allowReordering", "allowResizing", "allowSearch", "allowSorting", "autoExpandGroup", "buttons", "calculateCellValue", "calculateDisplayValue", "calculateFilterExpression", "calculateGroupValue", "calculateSortValue", "caption", "cellTemplate", "columns", "cssClass", "customizeText", "dataField", "dataType", "editCellTemplate", "editorOptions", "encodeHtml", "falseText", "filterOperations", "filterType", "filterValue", "filterValues", "fixed", "fixedPosition", "format", "formItem", "groupCellTemplate", "groupIndex", "headerCellTemplate", "headerFilter", "hidingPriority", "isBand", "lookup", "minWidth", "name", "ownerBand", "renderAsync", "selectedFilterOperation", "setCellValue", "showEditorAlways", "showInColumnChooser", "showWhenGrouped", "sortIndex", "sortingMethod", "sortOrder", "trueText", "type", "validationRules", "visible", "visibleIndex", "width"], outputs: ["filterValueChange", "filterValuesChange", "groupIndexChange", "selectedFilterOperationChange", "sortIndexChange", "sortOrderChange", "visibleChange", "visibleIndexChange"] }, { kind: "component", type: i4.DxoPagerComponent, selector: "dxo-pager", inputs: ["allowedPageSizes", "displayMode", "infoText", "showInfo", "showNavigationButtons", "showPageSizeSelector", "visible"] }, { kind: "component", type: i4.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "component", type: i4.DxoSearchPanelComponent, selector: "dxo-search-panel", inputs: ["highlightCaseSensitive", "highlightSearchText", "placeholder", "searchVisibleColumnsOnly", "text", "visible", "width"], outputs: ["textChange"] }, { kind: "component", type: i6.LoaderComponent, selector: "app-loader" }] });
|
|
162
|
+
GammaAdvanceOperatorTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: GammaAdvanceOperatorTableComponent, selector: "app-gamma-advance-operator-table", inputs: { rightClickEnable: "rightClickEnable", chartDataSource: "chartDataSource" }, outputs: { getTableConfigOutPut: "getTableConfigOutPut", oRowClick: "oRowClick", onrightClickContextSelection: "onrightClickContextSelection" }, ngImport: i0, template: "<div class=\"mx-2 bg-gray-800\">\n <ng-container *ngIf=\"isLoader\">\n <div class=\"flex justify-center items-start bg-gray-800 p-2\">\n <app-loader></app-loader>\n </div>\n </ng-container>\n\n <div class=\"mx-2 pb-2\">\n <!-- <dx-data-grid [columnAutoWidth]=\"true\" (onRowClick)=\"onRowClick($event)\" [dataSource]=\"dataSourseForTable\"\n [hoverStateEnabled]=\"true\" [selectedRowKeys]=\"[]\" [showBorders]=\"true\" [showColumnLines]=\"true\"\n *ngIf=\"!isLoader\" [columns]=\"tableDataConfig.columns\" [showRowLines]=\"true\" id=\"gridContainer\"\n (onContextMenuPreparing)=\"addMenuItems($event)\">\n <dxo-search-panel [highlightCaseSensitive]=\"true\"\n [visible]=\"tableDataConfig.searchPanel\"></dxo-search-panel>\n <dxo-export [enabled]=\"true\" fileName=\"{{tableDataConfig.file_name}}\"\n [customizeExcelCell]=\"commonService.customizeExcelCell\"></dxo-export>\n <dxo-paging [pageSize]=\"tableDataConfig.numberOfRow\"></dxo-paging>\n <dxo-pager [showInfo]=\"tableDataConfig.pageInfo\" [showPageSizeSelector]=\"true\"\n [allowedPageSizes]=\"tableDataConfig.allowedPageSizes\">\n </dxo-pager>\n <ng-container *ngIf=\"tableDataConfig.columns && tableDataConfig.columns.length !== 0\">\n <ng-container *ngFor=\"let item of tableDataConfig.columns\">\n <dxi-column *ngIf=\"item.dataField == 'recordDate'\" dataField=\"{{ item.dataField }}\"\n [caption]=\"item.caption\" [visible]=\"item.visible\" sortOrder=\"desc\"></dxi-column>\n <dxi-column *ngIf=\"item.dataField !== 'recordDate'\" format=\"#,##0.##\"\n [sortingMethod]=\"commonService.customValueSorter\" [cellTemplate]=\"item.dataField\"\n [caption]=\"item.caption\" dataField=\"{{ item.dataField }}\" alignment=\"left\"\n [visible]=\"item.visible\">\n </dxi-column>\n </ng-container>\n <ng-container *ngFor=\"let item of tableDataConfig.columns\">\n <div *dxTemplate=\"let data of item.dataField\">\n <span [innerHTML]=\"data.value\"></span>\n </div>\n </ng-container>\n </ng-container>\n\n </dx-data-grid> -->\n <dx-data-grid [columnAutoWidth]=\"true\" (onRowClick)=\"onRowClick($event)\" [dataSource]=\"dataSourseForTable\"\n [hoverStateEnabled]=\"true\" [selectedRowKeys]=\"[]\" [showBorders]=\"true\" [showColumnLines]=\"true\" [height]=\"tableHeight\"\n *ngIf=\"!isLoader\" [columns]=\"tableDataConfig.columns\" [showRowLines]=\"true\" id=\"gridContainer\"\n (onContextMenuPreparing)=\"addMenuItems($event)\"\n [customizeExportData]=\"commonService.removeHtmlContentFromData\">\n <dxo-search-panel [highlightCaseSensitive]=\"true\"\n [visible]=\"tableDataConfig.searchPanel\"></dxo-search-panel>\n <dxo-export [enabled]=\"true\" fileName=\"{{tableDataConfig.file_name}}\"\n [customizeExcelCell]=\"commonService.customizeExcelCell\"></dxo-export>\n <dxo-paging [pageSize]=\"tableDataConfig.numberOfRow\"></dxo-paging>\n <dxo-pager [showInfo]=\"tableDataConfig.pageInfo\" [showPageSizeSelector]=\"true\"\n [allowedPageSizes]=\"tableDataConfig.allowedPageSizes\">\n </dxo-pager>\n\n <!-- <ng-container *ngFor=\"let item of tableDataConfig.columns\">\n <dxi-column *ngIf=\"item.dataField == 'recordDate'\" dataField=\"{{ item.dataField }}\"\n [caption]=\"item.caption\" [visible]=\"item.visible\" sortOrder=\"desc\"></dxi-column>\n <dxi-column *ngIf=\"item.dataField !== 'recordDate'\" [sortingMethod]=\"commonService.customValueSorter\"\n [cellTemplate]=\"item.dataField\" [caption]=\"item.caption\" dataField=\"{{ item.dataField }}\"\n alignment=\"left\" [visible]=\"item.visible\">\n </dxi-column>\n </ng-container> -->\n\n <ng-container *ngFor=\"let item of tableDataConfig.columns\">\n <!-- Check if column has nested columns (columnsOne structure) -->\n <dxi-column *ngIf=\"item.columns; else flatColumn\" caption=\"{{ item.caption }}\">\n <ng-container *ngFor=\"let subItem of item.columns\">\n\n <dxi-column *ngIf=\"subItem.dataField == 'recordDate'\" \n [dataField]=\"subItem.dataField\" [caption]=\"subItem.caption\"\n [visible]=\"subItem.visible\" alignment=\"left\" \n sortOrder=\"desc\"></dxi-column>\n\n <dxi-column *ngIf=\"subItem.dataField !== 'recordDate'\" [dataField]=\"subItem.dataField\" [caption]=\"subItem.caption\"\n [visible]=\"subItem.visible\" alignment=\"right\" [cellTemplate]=\"item.dataField\"\n [sortingMethod]=\"commonService.customValueSorter\"></dxi-column>\n </ng-container>\n </dxi-column>\n\n <!-- Flat column structure (columnsTwo structure) -->\n <ng-template #flatColumn>\n\n <dxi-column *ngIf=\"item.dataField == 'recordDate'\" dataField=\"{{ item.dataField }}\"\n [caption]=\"item.caption\" [visible]=\"item.visible\" sortOrder=\"desc\"></dxi-column>\n\n <dxi-column *ngIf=\"item.dataField !== 'recordDate'\" [sortingMethod]=\"commonService.customValueSorter\"\n [cellTemplate]=\"item.dataField\" [caption]=\"item.caption\" dataField=\"{{ item.dataField }}\"\n alignment=\"right\" [visible]=\"item.visible\">\n </dxi-column>\n\n\n <!-- <dxi-column [dataField]=\"item.dataField\" [caption]=\"item.caption\" [visible]=\"item.visible\"\n [cellTemplate]=\"item.dataField\" alignment=\"left\"\n [sortingMethod]=\"commonService.customValueSorter\"></dxi-column> -->\n </ng-template>\n </ng-container>\n\n <ng-container *ngFor=\"let item of tableDataConfig.columns\">\n <div *dxTemplate=\"let data of item.dataField\">\n <span [innerHTML]=\"data.value\"></span>\n </div>\n </ng-container>\n </dx-data-grid>\n\n </div>\n\n\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i4.DxoExportComponent, selector: "dxo-export", inputs: ["backgroundColor", "enabled", "fileName", "formats", "margin", "printingEnabled", "proxyUrl", "svgToCanvas", "allowExportSelectedData", "customizeExcelCell", "excelFilterEnabled", "excelWrapTextEnabled", "ignoreExcelErrors", "texts"] }, { kind: "component", type: i5.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "customizeExportData", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "focusStateEnabled", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExported", "onExporting", "onFileSaving", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "customizeExportDataChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "focusStateEnabledChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i4.DxiColumnComponent, selector: "dxi-column", inputs: ["alignment", "allowEditing", "allowExporting", "allowFiltering", "allowFixing", "allowGrouping", "allowHeaderFiltering", "allowHiding", "allowReordering", "allowResizing", "allowSearch", "allowSorting", "autoExpandGroup", "buttons", "calculateCellValue", "calculateDisplayValue", "calculateFilterExpression", "calculateGroupValue", "calculateSortValue", "caption", "cellTemplate", "columns", "cssClass", "customizeText", "dataField", "dataType", "editCellTemplate", "editorOptions", "encodeHtml", "falseText", "filterOperations", "filterType", "filterValue", "filterValues", "fixed", "fixedPosition", "format", "formItem", "groupCellTemplate", "groupIndex", "headerCellTemplate", "headerFilter", "hidingPriority", "isBand", "lookup", "minWidth", "name", "ownerBand", "renderAsync", "selectedFilterOperation", "setCellValue", "showEditorAlways", "showInColumnChooser", "showWhenGrouped", "sortIndex", "sortingMethod", "sortOrder", "trueText", "type", "validationRules", "visible", "visibleIndex", "width"], outputs: ["filterValueChange", "filterValuesChange", "groupIndexChange", "selectedFilterOperationChange", "sortIndexChange", "sortOrderChange", "visibleChange", "visibleIndexChange"] }, { kind: "component", type: i4.DxoPagerComponent, selector: "dxo-pager", inputs: ["allowedPageSizes", "displayMode", "infoText", "showInfo", "showNavigationButtons", "showPageSizeSelector", "visible"] }, { kind: "component", type: i4.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "component", type: i4.DxoSearchPanelComponent, selector: "dxo-search-panel", inputs: ["highlightCaseSensitive", "highlightSearchText", "placeholder", "searchVisibleColumnsOnly", "text", "visible", "width"], outputs: ["textChange"] }, { kind: "component", type: i6.LoaderComponent, selector: "app-loader" }] });
|
|
152
163
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GammaAdvanceOperatorTableComponent, decorators: [{
|
|
153
164
|
type: Component,
|
|
154
|
-
args: [{ selector: 'app-gamma-advance-operator-table', template: "<div class=\"mx-2 bg-gray-800\">\n <ng-container *ngIf=\"isLoader\">\n <div class=\"flex justify-center items-start bg-gray-800 p-2\">\n <app-loader></app-loader>\n </div>\n </ng-container>\n\n <div class=\"mx-2 pb-2\">\n <!-- <dx-data-grid [columnAutoWidth]=\"true\" (onRowClick)=\"onRowClick($event)\" [dataSource]=\"dataSourseForTable\"\n [hoverStateEnabled]=\"true\" [selectedRowKeys]=\"[]\" [showBorders]=\"true\" [showColumnLines]=\"true\"\n *ngIf=\"!isLoader\" [columns]=\"tableDataConfig.columns\" [showRowLines]=\"true\" id=\"gridContainer\"\n (onContextMenuPreparing)=\"addMenuItems($event)\">\n <dxo-search-panel [highlightCaseSensitive]=\"true\"\n [visible]=\"tableDataConfig.searchPanel\"></dxo-search-panel>\n <dxo-export [enabled]=\"true\" fileName=\"{{tableDataConfig.file_name}}\"\n [customizeExcelCell]=\"commonService.customizeExcelCell\"></dxo-export>\n <dxo-paging [pageSize]=\"tableDataConfig.numberOfRow\"></dxo-paging>\n <dxo-pager [showInfo]=\"tableDataConfig.pageInfo\" [showPageSizeSelector]=\"true\"\n [allowedPageSizes]=\"tableDataConfig.allowedPageSizes\">\n </dxo-pager>\n <ng-container *ngIf=\"tableDataConfig.columns && tableDataConfig.columns.length !== 0\">\n <ng-container *ngFor=\"let item of tableDataConfig.columns\">\n <dxi-column *ngIf=\"item.dataField == 'recordDate'\" dataField=\"{{ item.dataField }}\"\n [caption]=\"item.caption\" [visible]=\"item.visible\" sortOrder=\"desc\"></dxi-column>\n <dxi-column *ngIf=\"item.dataField !== 'recordDate'\" format=\"#,##0.##\"\n [sortingMethod]=\"commonService.customValueSorter\" [cellTemplate]=\"item.dataField\"\n [caption]=\"item.caption\" dataField=\"{{ item.dataField }}\" alignment=\"left\"\n [visible]=\"item.visible\">\n </dxi-column>\n </ng-container>\n <ng-container *ngFor=\"let item of tableDataConfig.columns\">\n <div *dxTemplate=\"let data of item.dataField\">\n <span [innerHTML]=\"data.value\"></span>\n </div>\n </ng-container>\n </ng-container>\n\n </dx-data-grid> -->\n <dx-data-grid [columnAutoWidth]=\"true\" (onRowClick)=\"onRowClick($event)\" [dataSource]=\"dataSourseForTable\"\n [hoverStateEnabled]=\"true\" [selectedRowKeys]=\"[]\" [showBorders]=\"true\" [showColumnLines]=\"true\"\n *ngIf=\"!isLoader\" [columns]=\"tableDataConfig.columns\" [showRowLines]=\"true\" id=\"gridContainer\"\n (onContextMenuPreparing)=\"addMenuItems($event)\"\n [customizeExportData]=\"commonService.removeHtmlContentFromData\">\n <dxo-search-panel [highlightCaseSensitive]=\"true\"\n [visible]=\"tableDataConfig.searchPanel\"></dxo-search-panel>\n <dxo-export [enabled]=\"true\" fileName=\"{{tableDataConfig.file_name}}\"\n [customizeExcelCell]=\"commonService.customizeExcelCell\"></dxo-export>\n <dxo-paging [pageSize]=\"tableDataConfig.numberOfRow\"></dxo-paging>\n <dxo-pager [showInfo]=\"tableDataConfig.pageInfo\" [showPageSizeSelector]=\"true\"\n [allowedPageSizes]=\"tableDataConfig.allowedPageSizes\">\n </dxo-pager>\n\n <!-- <ng-container *ngFor=\"let item of tableDataConfig.columns\">\n <dxi-column *ngIf=\"item.dataField == 'recordDate'\" dataField=\"{{ item.dataField }}\"\n [caption]=\"item.caption\" [visible]=\"item.visible\" sortOrder=\"desc\"></dxi-column>\n <dxi-column *ngIf=\"item.dataField !== 'recordDate'\" [sortingMethod]=\"commonService.customValueSorter\"\n [cellTemplate]=\"item.dataField\" [caption]=\"item.caption\" dataField=\"{{ item.dataField }}\"\n alignment=\"left\" [visible]=\"item.visible\">\n </dxi-column>\n </ng-container> -->\n\n <ng-container *ngFor=\"let item of tableDataConfig.columns\">\n <!-- Check if column has nested columns (columnsOne structure) -->\n <dxi-column *ngIf=\"item.columns; else flatColumn\" caption=\"{{ item.caption }}\">\n <ng-container *ngFor=\"let subItem of item.columns\">\n\n <dxi-column *ngIf=\"subItem.dataField == 'recordDate'\" \n [dataField]=\"subItem.dataField\" [caption]=\"subItem.caption\"\n [visible]=\"subItem.visible\" alignment=\"left\" \n sortOrder=\"desc\"></dxi-column>\n\n <dxi-column *ngIf=\"subItem.dataField !== 'recordDate'\" [dataField]=\"subItem.dataField\" [caption]=\"subItem.caption\"\n [visible]=\"subItem.visible\" alignment=\"right\" [cellTemplate]=\"item.dataField\"\n [sortingMethod]=\"commonService.customValueSorter\"></dxi-column>\n </ng-container>\n </dxi-column>\n\n <!-- Flat column structure (columnsTwo structure) -->\n <ng-template #flatColumn>\n\n <dxi-column *ngIf=\"item.dataField == 'recordDate'\" dataField=\"{{ item.dataField }}\"\n [caption]=\"item.caption\" [visible]=\"item.visible\" sortOrder=\"desc\"></dxi-column>\n\n <dxi-column *ngIf=\"item.dataField !== 'recordDate'\" [sortingMethod]=\"commonService.customValueSorter\"\n [cellTemplate]=\"item.dataField\" [caption]=\"item.caption\" dataField=\"{{ item.dataField }}\"\n alignment=\"right\" [visible]=\"item.visible\">\n </dxi-column>\n\n\n <!-- <dxi-column [dataField]=\"item.dataField\" [caption]=\"item.caption\" [visible]=\"item.visible\"\n [cellTemplate]=\"item.dataField\" alignment=\"left\"\n [sortingMethod]=\"commonService.customValueSorter\"></dxi-column> -->\n </ng-template>\n </ng-container>\n\n <ng-container *ngFor=\"let item of tableDataConfig.columns\">\n <div *dxTemplate=\"let data of item.dataField\">\n <span [innerHTML]=\"data.value\"></span>\n </div>\n </ng-container>\n </dx-data-grid>\n\n </div>\n\n\n</div>" }]
|
|
165
|
+
args: [{ selector: 'app-gamma-advance-operator-table', template: "<div class=\"mx-2 bg-gray-800\">\n <ng-container *ngIf=\"isLoader\">\n <div class=\"flex justify-center items-start bg-gray-800 p-2\">\n <app-loader></app-loader>\n </div>\n </ng-container>\n\n <div class=\"mx-2 pb-2\">\n <!-- <dx-data-grid [columnAutoWidth]=\"true\" (onRowClick)=\"onRowClick($event)\" [dataSource]=\"dataSourseForTable\"\n [hoverStateEnabled]=\"true\" [selectedRowKeys]=\"[]\" [showBorders]=\"true\" [showColumnLines]=\"true\"\n *ngIf=\"!isLoader\" [columns]=\"tableDataConfig.columns\" [showRowLines]=\"true\" id=\"gridContainer\"\n (onContextMenuPreparing)=\"addMenuItems($event)\">\n <dxo-search-panel [highlightCaseSensitive]=\"true\"\n [visible]=\"tableDataConfig.searchPanel\"></dxo-search-panel>\n <dxo-export [enabled]=\"true\" fileName=\"{{tableDataConfig.file_name}}\"\n [customizeExcelCell]=\"commonService.customizeExcelCell\"></dxo-export>\n <dxo-paging [pageSize]=\"tableDataConfig.numberOfRow\"></dxo-paging>\n <dxo-pager [showInfo]=\"tableDataConfig.pageInfo\" [showPageSizeSelector]=\"true\"\n [allowedPageSizes]=\"tableDataConfig.allowedPageSizes\">\n </dxo-pager>\n <ng-container *ngIf=\"tableDataConfig.columns && tableDataConfig.columns.length !== 0\">\n <ng-container *ngFor=\"let item of tableDataConfig.columns\">\n <dxi-column *ngIf=\"item.dataField == 'recordDate'\" dataField=\"{{ item.dataField }}\"\n [caption]=\"item.caption\" [visible]=\"item.visible\" sortOrder=\"desc\"></dxi-column>\n <dxi-column *ngIf=\"item.dataField !== 'recordDate'\" format=\"#,##0.##\"\n [sortingMethod]=\"commonService.customValueSorter\" [cellTemplate]=\"item.dataField\"\n [caption]=\"item.caption\" dataField=\"{{ item.dataField }}\" alignment=\"left\"\n [visible]=\"item.visible\">\n </dxi-column>\n </ng-container>\n <ng-container *ngFor=\"let item of tableDataConfig.columns\">\n <div *dxTemplate=\"let data of item.dataField\">\n <span [innerHTML]=\"data.value\"></span>\n </div>\n </ng-container>\n </ng-container>\n\n </dx-data-grid> -->\n <dx-data-grid [columnAutoWidth]=\"true\" (onRowClick)=\"onRowClick($event)\" [dataSource]=\"dataSourseForTable\"\n [hoverStateEnabled]=\"true\" [selectedRowKeys]=\"[]\" [showBorders]=\"true\" [showColumnLines]=\"true\" [height]=\"tableHeight\"\n *ngIf=\"!isLoader\" [columns]=\"tableDataConfig.columns\" [showRowLines]=\"true\" id=\"gridContainer\"\n (onContextMenuPreparing)=\"addMenuItems($event)\"\n [customizeExportData]=\"commonService.removeHtmlContentFromData\">\n <dxo-search-panel [highlightCaseSensitive]=\"true\"\n [visible]=\"tableDataConfig.searchPanel\"></dxo-search-panel>\n <dxo-export [enabled]=\"true\" fileName=\"{{tableDataConfig.file_name}}\"\n [customizeExcelCell]=\"commonService.customizeExcelCell\"></dxo-export>\n <dxo-paging [pageSize]=\"tableDataConfig.numberOfRow\"></dxo-paging>\n <dxo-pager [showInfo]=\"tableDataConfig.pageInfo\" [showPageSizeSelector]=\"true\"\n [allowedPageSizes]=\"tableDataConfig.allowedPageSizes\">\n </dxo-pager>\n\n <!-- <ng-container *ngFor=\"let item of tableDataConfig.columns\">\n <dxi-column *ngIf=\"item.dataField == 'recordDate'\" dataField=\"{{ item.dataField }}\"\n [caption]=\"item.caption\" [visible]=\"item.visible\" sortOrder=\"desc\"></dxi-column>\n <dxi-column *ngIf=\"item.dataField !== 'recordDate'\" [sortingMethod]=\"commonService.customValueSorter\"\n [cellTemplate]=\"item.dataField\" [caption]=\"item.caption\" dataField=\"{{ item.dataField }}\"\n alignment=\"left\" [visible]=\"item.visible\">\n </dxi-column>\n </ng-container> -->\n\n <ng-container *ngFor=\"let item of tableDataConfig.columns\">\n <!-- Check if column has nested columns (columnsOne structure) -->\n <dxi-column *ngIf=\"item.columns; else flatColumn\" caption=\"{{ item.caption }}\">\n <ng-container *ngFor=\"let subItem of item.columns\">\n\n <dxi-column *ngIf=\"subItem.dataField == 'recordDate'\" \n [dataField]=\"subItem.dataField\" [caption]=\"subItem.caption\"\n [visible]=\"subItem.visible\" alignment=\"left\" \n sortOrder=\"desc\"></dxi-column>\n\n <dxi-column *ngIf=\"subItem.dataField !== 'recordDate'\" [dataField]=\"subItem.dataField\" [caption]=\"subItem.caption\"\n [visible]=\"subItem.visible\" alignment=\"right\" [cellTemplate]=\"item.dataField\"\n [sortingMethod]=\"commonService.customValueSorter\"></dxi-column>\n </ng-container>\n </dxi-column>\n\n <!-- Flat column structure (columnsTwo structure) -->\n <ng-template #flatColumn>\n\n <dxi-column *ngIf=\"item.dataField == 'recordDate'\" dataField=\"{{ item.dataField }}\"\n [caption]=\"item.caption\" [visible]=\"item.visible\" sortOrder=\"desc\"></dxi-column>\n\n <dxi-column *ngIf=\"item.dataField !== 'recordDate'\" [sortingMethod]=\"commonService.customValueSorter\"\n [cellTemplate]=\"item.dataField\" [caption]=\"item.caption\" dataField=\"{{ item.dataField }}\"\n alignment=\"right\" [visible]=\"item.visible\">\n </dxi-column>\n\n\n <!-- <dxi-column [dataField]=\"item.dataField\" [caption]=\"item.caption\" [visible]=\"item.visible\"\n [cellTemplate]=\"item.dataField\" alignment=\"left\"\n [sortingMethod]=\"commonService.customValueSorter\"></dxi-column> -->\n </ng-template>\n </ng-container>\n\n <ng-container *ngFor=\"let item of tableDataConfig.columns\">\n <div *dxTemplate=\"let data of item.dataField\">\n <span [innerHTML]=\"data.value\"></span>\n </div>\n </ng-container>\n </dx-data-grid>\n\n </div>\n\n\n</div>" }]
|
|
155
166
|
}], ctorParameters: function () { return [{ type: i1.CommonService }]; }, propDecorators: { getTableConfigOutPut: [{
|
|
156
167
|
type: Output
|
|
157
168
|
}], oRowClick: [{
|
|
@@ -164,4 +175,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
164
175
|
type: Input,
|
|
165
176
|
args: ['chartDataSource']
|
|
166
177
|
}] } });
|
|
167
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtbWEtYWR2YW5jZS1vcGVyYXRvci10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1hZHZhbmNlLW9wZXJhdG9yLXRhYmxlL2dhbW1hLWFkdmFuY2Utb3BlcmF0b3ItdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtYWR2YW5jZS1vcGVyYXRvci10YWJsZS9nYW1tYS1hZHZhbmNlLW9wZXJhdG9yLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxNQUFNLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7O0FBUTlDLE1BQU0sT0FBTyxrQ0FBa0M7SUFrUDdDLFlBQW1CLGFBQTRCO1FBQTVCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBOUUvQyx1QkFBa0IsR0FBUSxFQUFFLENBQUM7UUFHN0IsYUFBUSxHQUFZLElBQUksQ0FBQztRQUN6QixvQkFBZSxHQUFRLEVBQUUsQ0FBQztRQUMxQixtQkFBYyxHQUFHLENBQUMsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLHVDQUF1QyxDQUFDLENBQUE7UUFJN0csY0FBUyxHQUFXLE9BQU8sQ0FBQztRQUNYLHlCQUFvQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzdELGNBQVMsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsRCxpQ0FBNEIsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM3RSxxQkFBZ0IsR0FBWSxJQUFJLENBQUM7SUFpRVMsQ0FBQztJQS9EcEQsSUFDSSxlQUFlLENBQUMsS0FBSztRQUN2QixJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDN0MsT0FBTztTQUNSO2FBQU07WUFDTCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7WUFFcEMsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUV6RSxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLE9BQU8sRUFBRTtvQkFDdEMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVO3lCQUMxQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO3lCQUNuQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFFbkUsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZDLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUNuRyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsZUFBZSxDQUFDO2lCQUUzQztxQkFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLFNBQVMsRUFBRTtvQkFDL0MsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQztvQkFFbEQsSUFBSSxZQUFZLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ2xHLElBQUksWUFBWSxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO3dCQUM3QyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7NEJBQ3RELE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQzs0QkFDMUIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0NBRWhDLE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEtBQUssR0FBRyxDQUFDLENBQUM7Z0NBQ3pFLElBQUksZ0JBQWdCLEVBQUU7b0NBQ3BCLElBQUksZ0JBQWdCLENBQUMsVUFBVSxJQUFJLGdCQUFnQixDQUFDLFVBQVUsS0FBSyxFQUFFLEVBQUU7d0NBQ3JFLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7d0NBQ3pDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO3FDQUNqRjtpQ0FDRjtnQ0FHRCxJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29DQUNyRCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztpQ0FDeEQ7NEJBQ0gsQ0FBQyxDQUFDLENBQUM7NEJBQ0gsT0FBTyxNQUFNLENBQUM7d0JBQ2hCLENBQUMsQ0FBQyxDQUFDO3dCQUNILElBQUksQ0FBQyxrQkFBa0IsR0FBRyxVQUFVLENBQUM7cUJBQ3RDO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNuSyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7cUJBQ3REO2lCQUNGO2dCQUNELFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ3hCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUNUO2lCQUFNO2dCQUNMLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztvQkFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUN4QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDVDtTQUNGO0lBQ0gsQ0FBQztJQUlELFFBQVE7SUFDUixDQUFDO0lBR0QsZ0JBQWdCLENBQUMsT0FBWTtRQUMzQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3BDLE9BQU87Z0JBQ0wsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsU0FBUyxFQUFFLEdBQUc7Z0JBQ2QsT0FBTyxFQUFFLEdBQUc7YUFDYixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBSUQsYUFBYSxDQUFDLEdBQVE7UUFDcEIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFDRCxZQUFZLENBQUMsR0FBVztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztJQUN2QixDQUFDO0lBRUQsVUFBVSxDQUFDLENBQUM7UUFFVixNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQTtRQUM1RixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLFlBQVksQ0FBQztRQUN2RixJQUFJLEdBQUcsR0FBRztZQUNSLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTtZQUNaLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxTQUFTO1lBQy9DLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUs7WUFDL0QsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTTtZQUMvQixhQUFhLEVBQUUsU0FBUztZQUN4QixhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNO1lBQ3RDLFdBQVcsRUFBRSxFQUFFO1NBQ2hCLENBQUE7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsWUFBWSxDQUFDLENBQUM7UUFFWixNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUE7UUFDaEcsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxZQUFZLENBQUM7UUFFdkYsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLFdBQVcsSUFBSSxDQUFDLEVBQUU7WUFDL0MsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLFNBQVMsRUFBRTtnQkFDekIsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLO29CQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUUzQixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7d0JBQ3ZGLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDOzRCQUNYLElBQUksRUFBRSxPQUFPLENBQUMsVUFBVTs0QkFDeEIsV0FBVyxFQUFFLEdBQUcsRUFBRTtnQ0FDaEIsSUFBSSxjQUFjLEdBQUc7b0NBQ25CLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUk7b0NBQ2hCLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxTQUFTO29DQUMvQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLO29DQUMvRCxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNO29DQUMvQixhQUFhLEVBQUUsU0FBUztvQ0FDeEIsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTTtvQ0FDdEMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxNQUFNO2lDQUU1QixDQUFBO2dDQUNELElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUE7NEJBQ3hELENBQUM7eUJBQ0YsQ0FBQyxDQUFDO3FCQUNKO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtJQUNILENBQUM7SUFHRCxtQkFBbUIsQ0FBQyxZQUFvQixFQUFFLEtBQUs7UUFDN0MsSUFBSSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLEtBQUssVUFBVSxFQUFFO1lBQzFELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNoRDthQUFNO1lBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLFlBQVksNkJBQTZCLENBQUMsQ0FBQztZQUNyRSxPQUFPLElBQUksQ0FBQztTQUNiO0lBQ0gsQ0FBQzs7K0hBcFVVLGtDQUFrQzttSEFBbEMsa0NBQWtDLCtTQ1ovQywyK01BeUdNOzJGRDdGTyxrQ0FBa0M7a0JBTDlDLFNBQVM7K0JBQ0Usa0NBQWtDO29HQWtMM0Isb0JBQW9CO3NCQUFwQyxNQUFNO2dCQUNVLFNBQVM7c0JBQXpCLE1BQU07Z0JBQ1UsNEJBQTRCO3NCQUE1QyxNQUFNO2dCQUNFLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRixlQUFlO3NCQURsQixLQUFLO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5cbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBtb21lbnQgZnJvbSAnLi8uLi8uLi8uLi9tb21lbnQtaGVscGVyJztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZ2FtbWEtYWR2YW5jZS1vcGVyYXRvci10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9nYW1tYS1hZHZhbmNlLW9wZXJhdG9yLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ2FtbWEtYWR2YW5jZS1vcGVyYXRvci10YWJsZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEdhbW1hQWR2YW5jZU9wZXJhdG9yVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuLy8gICBpc0pzb25QcmV2aWV3OiBib29sZWFuXG4vLyAgIGRhdGFTb3Vyc2VGb3JUYWJsZTogYW55ID0gW107XG4vLyAgIGpzYW9uRGF0YXNvdXJjZTogYW55O1xuLy8gICBjb25maWdDb2x1bWU6IGFueTtcbi8vICAgaXNMb2FkZXI6IGJvb2xlYW4gPSB0cnVlO1xuLy8gICB0YWJsZURhdGFDb25maWc6IGFueTtcbi8vICAgZW5yaWNoTmFtZUxpc3QgPSBbXCJmb3JtYXRCeXRlc1wiLCBcImZvcm1hdEJ5dHNUb0tiXCIsIFwiZm9ybWF0Qnl0c1RvR2JcIiwgXCJyZWZvcm1hdE51bWJlcldpdGhUaG91c2FuZFNlcGFyYXRvclYzXCJdXG4vLyAgIHBhZ2VfY29uZmlnOiBhbnk7XG4vLyAgIHBhZ2VfcGFybXM6IGFueTtcbi8vICAgcGFnZV9zZWxlY3RlZF9vcGVyYXRvcjogYW55O1xuLy8gICBhY3RpdmVUYWI6IHN0cmluZyA9ICdiYXNpYyc7XG4vLyAgIEBPdXRwdXQoKSBwdWJsaWMgZ2V0VGFibGVDb25maWdPdXRQdXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuLy8gICBAT3V0cHV0KCkgcHVibGljIG9Sb3dDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4vLyAgIEBPdXRwdXQoKSBwdWJsaWMgb25yaWdodENsaWNrQ29udGV4dFNlbGVjdGlvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4vLyAgIEBJbnB1dCgpIHJpZ2h0Q2xpY2tFbmFibGU6IGJvb2xlYW4gPSB0cnVlO1xuXG4vLyAgIEBJbnB1dCgnY2hhcnREYXRhU291cmNlJylcbi8vICAgc2V0IGNoYXJ0RGF0YVNvdXJjZSh2YWx1ZSkge1xuLy8gICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuLy8gICAgICAgcmV0dXJuO1xuLy8gICAgIH0gZWxzZSB7XG4vLyBkZWJ1Z2dlclxuLy8gICAgICAgdGhpcy5pc0xvYWRlciA9IHRydWU7XG4vLyAgICAgICB0aGlzLnBhZ2VfY29uZmlnID0gdmFsdWU7XG4vLyAgICAgICB0aGlzLnBhZ2VfcGFybXMgPSB2YWx1ZS50aXRsZVBhcmFtcztcbi8vICAgICAgIGlmICh2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZSAmJiB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZS5sZW5ndGggIT09IDApIHtcbi8vICAgICAgICAgaWYgKHZhbHVlLmtwaUNvbmZpZy5mb3JtYXRlID09IFwiZGFpbHlcIikge1xuLy8gICAgICAgICAgIGNvbnN0IHNvcnRlZERhdGEgPSB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZVxuLy8gICAgICAgICAgICAgLmZpbHRlcihyZWNvcmQgPT4gcmVjb3JkLnJlY29yZERhdGUpXG4vLyAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gbW9tZW50KGIucmVjb3JkRGF0ZSkuZGlmZihtb21lbnQoYS5yZWNvcmREYXRlKSkpO1xuXG4vLyAgICAgICAgICAgY29uc3QgbW9zdFJlY2VudFJlY29yZCA9IHNvcnRlZERhdGFbMF07XG4vLyAgICAgICAgICAgY29uc3QgZmlsdGVyZWRPYmplY3RzID0gc29ydGVkRGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLnJlY29yZERhdGUgPT09IG1vc3RSZWNlbnRSZWNvcmQucmVjb3JkRGF0ZSk7XG4vLyAgICAgICAgICAgdGhpcy5kYXRhU291cnNlRm9yVGFibGUgPSBmaWx0ZXJlZE9iamVjdHM7XG5cbi8vICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5rcGlDb25maWcuZm9ybWF0ZSA9PSBcIm1vbnRobHlcIikge1xuLy8gICAgICAgICAgIHRoaXMudGFibGVEYXRhQ29uZmlnID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWc7XG5cbi8vICAgICAgICAgICBsZXQgdGFibGVDb2x1bW5zID0gKHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNvbHVtbnMpID8gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuY29sdW1ucyA6IFtdO1xuLy8gICAgICAgICAgIGlmICh0YWJsZUNvbHVtbnMgJiYgdGFibGVDb2x1bW5zLmxlbmd0aCAhPT0gMCkge1xuLy8gICAgICAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlLm1hcChvYmogPT4ge1xuLy8gICAgICAgICAgICAgICBjb25zdCBuZXdPYmogPSB7IC4uLm9iaiB9O1xuLy8gICAgICAgICAgICAgICBPYmplY3Qua2V5cyhuZXdPYmopLmZvckVhY2goa2V5ID0+IHtcblxuLy8gICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kTWF0Y2hPYmplY3QgPSB0YWJsZUNvbHVtbnMuZmluZChvYmogPT4gb2JqLmRhdGFGaWVsZCA9PT0ga2V5KTtcbi8vICAgICAgICAgICAgICAgICBpZiAoZm91bmRNYXRjaE9iamVjdCkge1xuLy8gICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kTWF0Y2hPYmplY3QuZW5yaWNoTmFtZSAmJiBmb3VuZE1hdGNoT2JqZWN0LmVucmljaE5hbWUgIT09IFwiXCIpIHtcbi8vICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZm91bmRNYXRjaE9iamVjdC5lbnJpY2hOYW1lKTtcbi8vICAgICAgICAgICAgICAgICAgICAgbmV3T2JqW2tleV0gPSB0aGlzLmNhbGxTZXJ2aWNlRnVuY3Rpb24oZm91bmRNYXRjaE9iamVjdC5lbnJpY2hOYW1lLCBuZXdPYmpba2V5XSlcbi8vICAgICAgICAgICAgICAgICAgIH1cbi8vICAgICAgICAgICAgICAgICB9XG5cblxuLy8gICAgICAgICAgICAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZGF0ZScpICYmIG5ld09ialtrZXldKSB7XG4vLyAgICAgICAgICAgICAgICAgICBuZXdPYmpba2V5XSA9IG1vbWVudChuZXdPYmpba2V5XSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcbi8vICAgICAgICAgICAgICAgICB9XG4vLyAgICAgICAgICAgICAgIH0pO1xuLy8gICAgICAgICAgICAgICByZXR1cm4gbmV3T2JqO1xuLy8gICAgICAgICAgICAgfSk7XG4vLyAgICAgICAgICAgICB0aGlzLmRhdGFTb3Vyc2VGb3JUYWJsZSA9IGRhdGFTb3VyY2U7XG4vLyAgICAgICAgICAgfSBlbHNlIHtcbi8vICAgICAgICAgICAgIHRoaXMudGFibGVEYXRhQ29uZmlnLmNvbHVtbnMgPSAodmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UgJiYgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UubGVuZ3RoICE9PSAwKSA/IHRoaXMudHJhbnNmb3JtQ29sdW1ucyh2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZVswXSkgOiBbXTtcbi8vICAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJzZUZvclRhYmxlID0gdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2U7XG4vLyAgICAgICAgICAgfVxuLy8gICAgICAgICB9XG4vLyAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuLy8gICAgICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbi8vICAgICAgICAgfSwgMjAwKTtcblxuLy8gICAgICAgfVxuLy8gICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4vLyAgICAgICAgIHRoaXMuZGF0YVNvdXJzZUZvclRhYmxlID0gW107XG4vLyAgICAgICAgIHRoaXMudGFibGVEYXRhQ29uZmlnWydjb2x1bW5zJ10gPSBbXTtcbi8vICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuLy8gICAgICAgfSwgMjAwKTtcbi8vICAgICB9XG4vLyAgIH1cblxuLy8gICBjb25zdHJ1Y3RvcihwdWJsaWMgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSkgeyB9XG5cbi8vICAgbmdPbkluaXQoKTogdm9pZCB7XG4vLyAgIH1cblxuXG4vLyAgIHRyYW5zZm9ybUNvbHVtbnMobWFpbm9iajogYW55KTogYW55W10ge1xuLy8gICAgIHJldHVybiBPYmplY3Qua2V5cyhtYWlub2JqKS5tYXAoa2V5ID0+IHtcbi8vICAgICAgIHJldHVybiB7XG4vLyAgICAgICAgIHZpc2libGU6IHRydWUsXG4vLyAgICAgICAgIGRhdGFGaWVsZDoga2V5LFxuLy8gICAgICAgICBjYXB0aW9uOiBrZXlcbi8vICAgICAgIH07XG4vLyAgICAgfSk7XG4vLyAgIH1cblxuXG5cbi8vICAgZ2V0T2JqZWN0S2V5cyhvYmo6IGFueSk6IHN0cmluZ1tdIHtcbi8vICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKTtcbi8vICAgfVxuLy8gICBzZXRBY3RpdmVUYWIodGFiOiBzdHJpbmcpIHtcbi8vICAgICB0aGlzLmFjdGl2ZVRhYiA9IHRhYjtcbi8vICAgfVxuXG4vLyAgIG9uUm93Q2xpY2soZSkge1xuXG4vLyAgICAgY29uc3QgdGl0bGVfcGFyYW1zID0gZS5kYXRhW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuY29tbW9uQ29uZmlnWydkYXRhRmllbGQnXV1cbi8vICAgICBsZXQgdGl0bGUgPSB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNvbW1vbkNvbmZpZ1sndGl0bGUnXSArIHRpdGxlX3BhcmFtcztcbi8vICAgICBsZXQgb2JqID0ge1xuLy8gICAgICAgZGF0YTogZS5kYXRhLFxuLy8gICAgICAga2V5VG9QYXNzOiB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5rZXlUb1Bhc3MsXG4vLyAgICAgICB0YWJsZVRpdGxlOiAodGhpcy5wYWdlX3Bhcm1zKSA/IHRoaXMucGFnZV9wYXJtcyArIHRpdGxlIDogdGl0bGUsXG4vLyAgICAgICB2aWV3SWQ6IHRoaXMucGFnZV9jb25maWcudmlld0lkLFxuLy8gICAgICAgZHJpbGxEb3duVHlwZTogXCJuYXR1cmFsXCIsXG4vLyAgICAgICBkcmlsbGRvd25Gcm9tOiB0aGlzLnBhZ2VfY29uZmlnLnZpZXdJZCxcbi8vICAgICAgIGRyaWxsZG93blRvOiBcIlwiLFxuLy8gICAgIH1cbi8vICAgICB0aGlzLm9Sb3dDbGljay5lbWl0KG9iaik7XG4vLyAgIH1cblxuLy8gICBhZGRNZW51SXRlbXMoZSkge1xuXG4vLyAgICAgY29uc3QgdGl0bGVfcGFyYW1zID0gZS5yb3cuZGF0YVt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNvbW1vbkNvbmZpZ1snZGF0YUZpZWxkJ11dXG4vLyAgICAgbGV0IHRpdGxlID0gdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5jb21tb25Db25maWdbJ3RpdGxlJ10gKyB0aXRsZV9wYXJhbXM7XG5cbi8vICAgICBpZiAodGhpcy5yaWdodENsaWNrRW5hYmxlICYmIGUuY29sdW1uSW5kZXggPT0gMCkge1xuLy8gICAgICAgaWYgKGUudGFyZ2V0ID09ICdjb250ZW50Jykge1xuLy8gICAgICAgICBpZiAoIWUuaXRlbXMpIGUuaXRlbXMgPSBbXTtcblxuLy8gICAgICAgICB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5jb250ZXh0TWVudS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuLy8gICAgICAgICAgIGlmICghdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcua2V5VG9QYXNzLnNvbWUoa2V5ID0+IGVsZW1lbnQuZGlzcGxheUtleS5pbmNsdWRlcyhrZXkpKSkge1xuLy8gICAgICAgICAgICAgZS5pdGVtcy5wdXNoKHtcbi8vICAgICAgICAgICAgICAgdGV4dDogZWxlbWVudC5kaXNwbGF5S2V5LFxuLy8gICAgICAgICAgICAgICBvbkl0ZW1DbGljazogKCkgPT4ge1xuLy8gICAgICAgICAgICAgICAgIGxldCByaWdodGNsaWNrRGF0YSA9IHtcbi8vICAgICAgICAgICAgICAgICAgIGRhdGE6IGUucm93LmRhdGEsXG4vLyAgICAgICAgICAgICAgICAgICBrZXlUb1Bhc3M6IHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmtleVRvUGFzcyxcbi8vICAgICAgICAgICAgICAgICAgIHRhYmxlVGl0bGU6ICh0aGlzLnBhZ2VfcGFybXMpID8gdGhpcy5wYWdlX3Bhcm1zICsgdGl0bGUgOiB0aXRsZSxcbi8vICAgICAgICAgICAgICAgICAgIHZpZXdJZDogdGhpcy5wYWdlX2NvbmZpZy52aWV3SWQsXG4vLyAgICAgICAgICAgICAgICAgICBkcmlsbERvd25UeXBlOiBcImNvbnRleHRcIixcbi8vICAgICAgICAgICAgICAgICAgIGRyaWxsZG93bkZyb206IHRoaXMucGFnZV9jb25maWcudmlld0lkLFxuLy8gICAgICAgICAgICAgICAgICAgZHJpbGxkb3duVG86IGVsZW1lbnQudmlld0lkLFxuXG4vLyAgICAgICAgICAgICAgICAgfVxuLy8gICAgICAgICAgICAgICAgIHRoaXMub25yaWdodENsaWNrQ29udGV4dFNlbGVjdGlvbi5lbWl0KHJpZ2h0Y2xpY2tEYXRhKVxuLy8gICAgICAgICAgICAgICB9XG4vLyAgICAgICAgICAgICB9KTtcbi8vICAgICAgICAgICB9XG4vLyAgICAgICAgIH0pO1xuLy8gICAgICAgfVxuLy8gICAgIH1cbi8vICAgfVxuXG5cbi8vICAgY2FsbFNlcnZpY2VGdW5jdGlvbihmdW5jdGlvbk5hbWU6IHN0cmluZywgdmFsdWUpOiBhbnkge1xuLy8gICAgIGlmICh0eXBlb2YgdGhpcy5jb21tb25TZXJ2aWNlW2Z1bmN0aW9uTmFtZV0gPT09IFwiZnVuY3Rpb25cIikge1xuLy8gICAgICAgcmV0dXJuIHRoaXMuY29tbW9uU2VydmljZVtmdW5jdGlvbk5hbWVdKHZhbHVlKTtcbi8vICAgICB9IGVsc2Uge1xuLy8gICAgICAgY29uc29sZS5lcnJvcihgRnVuY3Rpb24gJHtmdW5jdGlvbk5hbWV9IG5vdCBmb3VuZCBpbiBDb21tb25TZXJ2aWNlYCk7XG4vLyAgICAgICByZXR1cm4gbnVsbDtcbi8vICAgICB9XG4vLyAgIH1cblxuaXNKc29uUHJldmlldzogYm9vbGVhblxuICBkYXRhU291cnNlRm9yVGFibGU6IGFueSA9IFtdO1xuICBqc2FvbkRhdGFzb3VyY2U6IGFueTtcbiAgY29uZmlnQ29sdW1lOiBhbnk7XG4gIGlzTG9hZGVyOiBib29sZWFuID0gdHJ1ZTtcbiAgdGFibGVEYXRhQ29uZmlnOiBhbnkgPSB7fTtcbiAgZW5yaWNoTmFtZUxpc3QgPSBbXCJmb3JtYXRCeXRlc1wiLCBcImZvcm1hdEJ5dHNUb0tiXCIsIFwiZm9ybWF0Qnl0c1RvR2JcIiwgXCJyZWZvcm1hdE51bWJlcldpdGhUaG91c2FuZFNlcGFyYXRvclYzXCJdXG4gIHBhZ2VfY29uZmlnOiBhbnk7XG4gIHBhZ2VfcGFybXM6IGFueTtcbiAgcGFnZV9zZWxlY3RlZF9vcGVyYXRvcjogYW55O1xuICBhY3RpdmVUYWI6IHN0cmluZyA9ICdiYXNpYyc7XG4gIEBPdXRwdXQoKSBwdWJsaWMgZ2V0VGFibGVDb25maWdPdXRQdXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIG9Sb3dDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgb25yaWdodENsaWNrQ29udGV4dFNlbGVjdGlvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBJbnB1dCgpIHJpZ2h0Q2xpY2tFbmFibGU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgnY2hhcnREYXRhU291cmNlJylcbiAgc2V0IGNoYXJ0RGF0YVNvdXJjZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMucGFnZV9jb25maWcgPSB2YWx1ZTtcbiAgICAgIHRoaXMucGFnZV9wYXJtcyA9IHZhbHVlLnRpdGxlUGFyYW1zO1xuXG4gICAgICBpZiAodmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UgJiYgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UubGVuZ3RoICE9PSAwKSB7XG5cbiAgICAgICAgaWYgKHZhbHVlLmtwaUNvbmZpZy5mb3JtYXRlID09IFwiZGFpbHlcIikge1xuICAgICAgICAgIGNvbnN0IHNvcnRlZERhdGEgPSB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZVxuICAgICAgICAgICAgLmZpbHRlcihyZWNvcmQgPT4gcmVjb3JkLnJlY29yZERhdGUpXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gbW9tZW50KGIucmVjb3JkRGF0ZSkuZGlmZihtb21lbnQoYS5yZWNvcmREYXRlKSkpO1xuXG4gICAgICAgICAgY29uc3QgbW9zdFJlY2VudFJlY29yZCA9IHNvcnRlZERhdGFbMF07XG4gICAgICAgICAgY29uc3QgZmlsdGVyZWRPYmplY3RzID0gc29ydGVkRGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLnJlY29yZERhdGUgPT09IG1vc3RSZWNlbnRSZWNvcmQucmVjb3JkRGF0ZSk7XG4gICAgICAgICAgdGhpcy5kYXRhU291cnNlRm9yVGFibGUgPSBmaWx0ZXJlZE9iamVjdHM7XG5cbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5rcGlDb25maWcuZm9ybWF0ZSA9PSBcIm1vbnRobHlcIikge1xuICAgICAgICAgIHRoaXMudGFibGVEYXRhQ29uZmlnID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWc7XG5cbiAgICAgICAgICBsZXQgdGFibGVDb2x1bW5zID0gKHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNvbHVtbnMpID8gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuY29sdW1ucyA6IFtdO1xuICAgICAgICAgIGlmICh0YWJsZUNvbHVtbnMgJiYgdGFibGVDb2x1bW5zLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlLm1hcChvYmogPT4ge1xuICAgICAgICAgICAgICBjb25zdCBuZXdPYmogPSB7IC4uLm9iaiB9O1xuICAgICAgICAgICAgICBPYmplY3Qua2V5cyhuZXdPYmopLmZvckVhY2goa2V5ID0+IHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kTWF0Y2hPYmplY3QgPSB0YWJsZUNvbHVtbnMuZmluZChvYmogPT4gb2JqLmRhdGFGaWVsZCA9PT0ga2V5KTtcbiAgICAgICAgICAgICAgICBpZiAoZm91bmRNYXRjaE9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kTWF0Y2hPYmplY3QuZW5yaWNoTmFtZSAmJiBmb3VuZE1hdGNoT2JqZWN0LmVucmljaE5hbWUgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZm91bmRNYXRjaE9iamVjdC5lbnJpY2hOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgbmV3T2JqW2tleV0gPSB0aGlzLmNhbGxTZXJ2aWNlRnVuY3Rpb24oZm91bmRNYXRjaE9iamVjdC5lbnJpY2hOYW1lLCBuZXdPYmpba2V5XSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZGF0ZScpICYmIG5ld09ialtrZXldKSB7XG4gICAgICAgICAgICAgICAgICBuZXdPYmpba2V5XSA9IG1vbWVudChuZXdPYmpba2V5XSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gbmV3T2JqO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3Vyc2VGb3JUYWJsZSA9IGRhdGFTb3VyY2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudGFibGVEYXRhQ29uZmlnLmNvbHVtbnMgPSAodmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UgJiYgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UubGVuZ3RoICE9PSAwKSA/IHRoaXMudHJhbnNmb3JtQ29sdW1ucyh2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZVswXSkgOiBbXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJzZUZvclRhYmxlID0gdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgfSwgMjAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJzZUZvclRhYmxlID0gW107XG4gICAgICAgICAgdGhpcy50YWJsZURhdGFDb25maWdbJ2NvbHVtbnMnXSA9IFtdO1xuICAgICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgfSwgMjAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gIH1cblxuXG4gIHRyYW5zZm9ybUNvbHVtbnMobWFpbm9iajogYW55KTogYW55W10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhtYWlub2JqKS5tYXAoa2V5ID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICAgIGRhdGFGaWVsZDoga2V5LFxuICAgICAgICBjYXB0aW9uOiBrZXlcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuXG5cbiAgZ2V0T2JqZWN0S2V5cyhvYmo6IGFueSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKTtcbiAgfVxuICBzZXRBY3RpdmVUYWIodGFiOiBzdHJpbmcpIHtcbiAgICB0aGlzLmFjdGl2ZVRhYiA9IHRhYjtcbiAgfVxuXG4gIG9uUm93Q2xpY2soZSkge1xuXG4gICAgY29uc3QgdGl0bGVfcGFyYW1zID0gZS5kYXRhW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuY29tbW9uQ29uZmlnWydkYXRhRmllbGQnXV1cbiAgICBsZXQgdGl0bGUgPSB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNvbW1vbkNvbmZpZ1sndGl0bGUnXSArIHRpdGxlX3BhcmFtcztcbiAgICBsZXQgb2JqID0ge1xuICAgICAgZGF0YTogZS5kYXRhLFxuICAgICAga2V5VG9QYXNzOiB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5rZXlUb1Bhc3MsXG4gICAgICB0YWJsZVRpdGxlOiAodGhpcy5wYWdlX3Bhcm1zKSA/IHRoaXMucGFnZV9wYXJtcyArIHRpdGxlIDogdGl0bGUsXG4gICAgICB2aWV3SWQ6IHRoaXMucGFnZV9jb25maWcudmlld0lkLFxuICAgICAgZHJpbGxEb3duVHlwZTogXCJuYXR1cmFsXCIsXG4gICAgICBkcmlsbGRvd25Gcm9tOiB0aGlzLnBhZ2VfY29uZmlnLnZpZXdJZCxcbiAgICAgIGRyaWxsZG93blRvOiBcIlwiLFxuICAgIH1cbiAgICB0aGlzLm9Sb3dDbGljay5lbWl0KG9iaik7XG4gIH1cblxuICBhZGRNZW51SXRlbXMoZSkge1xuXG4gICAgY29uc3QgdGl0bGVfcGFyYW1zID0gZS5yb3cuZGF0YVt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNvbW1vbkNvbmZpZ1snZGF0YUZpZWxkJ11dXG4gICAgbGV0IHRpdGxlID0gdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5jb21tb25Db25maWdbJ3RpdGxlJ10gKyB0aXRsZV9wYXJhbXM7XG5cbiAgICBpZiAodGhpcy5yaWdodENsaWNrRW5hYmxlICYmIGUuY29sdW1uSW5kZXggPT0gMCkge1xuICAgICAgaWYgKGUudGFyZ2V0ID09ICdjb250ZW50Jykge1xuICAgICAgICBpZiAoIWUuaXRlbXMpIGUuaXRlbXMgPSBbXTtcblxuICAgICAgICB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5jb250ZXh0TWVudS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcua2V5VG9QYXNzLnNvbWUoa2V5ID0+IGVsZW1lbnQuZGlzcGxheUtleS5pbmNsdWRlcyhrZXkpKSkge1xuICAgICAgICAgICAgZS5pdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgdGV4dDogZWxlbWVudC5kaXNwbGF5S2V5LFxuICAgICAgICAgICAgICBvbkl0ZW1DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCByaWdodGNsaWNrRGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgIGRhdGE6IGUucm93LmRhdGEsXG4gICAgICAgICAgICAgICAgICBrZXlUb1Bhc3M6IHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmtleVRvUGFzcyxcbiAgICAgICAgICAgICAgICAgIHRhYmxlVGl0bGU6ICh0aGlzLnBhZ2VfcGFybXMpID8gdGhpcy5wYWdlX3Bhcm1zICsgdGl0bGUgOiB0aXRsZSxcbiAgICAgICAgICAgICAgICAgIHZpZXdJZDogdGhpcy5wYWdlX2NvbmZpZy52aWV3SWQsXG4gICAgICAgICAgICAgICAgICBkcmlsbERvd25UeXBlOiBcImNvbnRleHRcIixcbiAgICAgICAgICAgICAgICAgIGRyaWxsZG93bkZyb206IHRoaXMucGFnZV9jb25maWcudmlld0lkLFxuICAgICAgICAgICAgICAgICAgZHJpbGxkb3duVG86IGVsZW1lbnQudmlld0lkLFxuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMub25yaWdodENsaWNrQ29udGV4dFNlbGVjdGlvbi5lbWl0KHJpZ2h0Y2xpY2tEYXRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgY2FsbFNlcnZpY2VGdW5jdGlvbihmdW5jdGlvbk5hbWU6IHN0cmluZywgdmFsdWUpOiBhbnkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5jb21tb25TZXJ2aWNlW2Z1bmN0aW9uTmFtZV0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIHRoaXMuY29tbW9uU2VydmljZVtmdW5jdGlvbk5hbWVdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihgRnVuY3Rpb24gJHtmdW5jdGlvbk5hbWV9IG5vdCBmb3VuZCBpbiBDb21tb25TZXJ2aWNlYCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuXG59XG4iLCI8ZGl2IGNsYXNzPVwibXgtMiBiZy1ncmF5LTgwMFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0xvYWRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1zdGFydCBiZy1ncmF5LTgwMCBwLTJcIj5cbiAgICAgICAgICAgIDxhcHAtbG9hZGVyPjwvYXBwLWxvYWRlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwibXgtMiBwYi0yXCI+XG4gICAgICAgIDwhLS0gPGR4LWRhdGEtZ3JpZCBbY29sdW1uQXV0b1dpZHRoXT1cInRydWVcIiAob25Sb3dDbGljayk9XCJvblJvd0NsaWNrKCRldmVudClcIiBbZGF0YVNvdXJjZV09XCJkYXRhU291cnNlRm9yVGFibGVcIlxuICAgICAgICAgICAgW2hvdmVyU3RhdGVFbmFibGVkXT1cInRydWVcIiBbc2VsZWN0ZWRSb3dLZXlzXT1cIltdXCIgW3Nob3dCb3JkZXJzXT1cInRydWVcIiBbc2hvd0NvbHVtbkxpbmVzXT1cInRydWVcIlxuICAgICAgICAgICAgKm5nSWY9XCIhaXNMb2FkZXJcIiBbY29sdW1uc109XCJ0YWJsZURhdGFDb25maWcuY29sdW1uc1wiIFtzaG93Um93TGluZXNdPVwidHJ1ZVwiIGlkPVwiZ3JpZENvbnRhaW5lclwiXG4gICAgICAgICAgICAob25Db250ZXh0TWVudVByZXBhcmluZyk9XCJhZGRNZW51SXRlbXMoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPGR4by1zZWFyY2gtcGFuZWwgW2hpZ2hsaWdodENhc2VTZW5zaXRpdmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3Zpc2libGVdPVwidGFibGVEYXRhQ29uZmlnLnNlYXJjaFBhbmVsXCI+PC9keG8tc2VhcmNoLXBhbmVsPlxuICAgICAgICAgICAgPGR4by1leHBvcnQgW2VuYWJsZWRdPVwidHJ1ZVwiIGZpbGVOYW1lPVwie3t0YWJsZURhdGFDb25maWcuZmlsZV9uYW1lfX1cIlxuICAgICAgICAgICAgICAgIFtjdXN0b21pemVFeGNlbENlbGxdPVwiY29tbW9uU2VydmljZS5jdXN0b21pemVFeGNlbENlbGxcIj48L2R4by1leHBvcnQ+XG4gICAgICAgICAgICA8ZHhvLXBhZ2luZyBbcGFnZVNpemVdPVwidGFibGVEYXRhQ29uZmlnLm51bWJlck9mUm93XCI+PC9keG8tcGFnaW5nPlxuICAgICAgICAgICAgPGR4by1wYWdlciBbc2hvd0luZm9dPVwidGFibGVEYXRhQ29uZmlnLnBhZ2VJbmZvXCIgW3Nob3dQYWdlU2l6ZVNlbGVjdG9yXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFthbGxvd2VkUGFnZVNpemVzXT1cInRhYmxlRGF0YUNvbmZpZy5hbGxvd2VkUGFnZVNpemVzXCI+XG4gICAgICAgICAgICA8L2R4by1wYWdlcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJsZURhdGFDb25maWcuY29sdW1ucyAmJiB0YWJsZURhdGFDb25maWcuY29sdW1ucy5sZW5ndGggIT09IDBcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHRhYmxlRGF0YUNvbmZpZy5jb2x1bW5zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uICpuZ0lmPVwiaXRlbS5kYXRhRmllbGQgPT0gJ3JlY29yZERhdGUnXCIgZGF0YUZpZWxkPVwie3sgaXRlbS5kYXRhRmllbGQgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NhcHRpb25dPVwiaXRlbS5jYXB0aW9uXCIgW3Zpc2libGVdPVwiaXRlbS52aXNpYmxlXCIgc29ydE9yZGVyPVwiZGVzY1wiPjwvZHhpLWNvbHVtbj5cbiAgICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gKm5nSWY9XCJpdGVtLmRhdGFGaWVsZCAhPT0gJ3JlY29yZERhdGUnXCIgZm9ybWF0PVwiIywjIzAuIyNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NvcnRpbmdNZXRob2RdPVwiY29tbW9uU2VydmljZS5jdXN0b21WYWx1ZVNvcnRlclwiIFtjZWxsVGVtcGxhdGVdPVwiaXRlbS5kYXRhRmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NhcHRpb25dPVwiaXRlbS5jYXB0aW9uXCIgZGF0YUZpZWxkPVwie3sgaXRlbS5kYXRhRmllbGQgfX1cIiBhbGlnbm1lbnQ9XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2aXNpYmxlXT1cIml0ZW0udmlzaWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2R4aS1jb2x1bW4+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiB0YWJsZURhdGFDb25maWcuY29sdW1uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGRhdGEgb2YgaXRlbS5kYXRhRmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiZGF0YS52YWx1ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8L2R4LWRhdGEtZ3JpZD4gLS0+XG4gICAgICAgIDxkeC1kYXRhLWdyaWQgW2NvbHVtbkF1dG9XaWR0aF09XCJ0cnVlXCIgKG9uUm93Q2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQpXCIgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJzZUZvclRhYmxlXCJcbiAgICAgICAgICAgIFtob3ZlclN0YXRlRW5hYmxlZF09XCJ0cnVlXCIgW3NlbGVjdGVkUm93S2V5c109XCJbXVwiIFtzaG93Qm9yZGVyc109XCJ0cnVlXCIgW3Nob3dDb2x1bW5MaW5lc109XCJ0cnVlXCJcbiAgICAgICAgICAgICpuZ0lmPVwiIWlzTG9hZGVyXCIgW2NvbHVtbnNdPVwidGFibGVEYXRhQ29uZmlnLmNvbHVtbnNcIiBbc2hvd1Jvd0xpbmVzXT1cInRydWVcIiBpZD1cImdyaWRDb250YWluZXJcIlxuICAgICAgICAgICAgKG9uQ29udGV4dE1lbnVQcmVwYXJpbmcpPVwiYWRkTWVudUl0ZW1zKCRldmVudClcIlxuICAgICAgICAgICAgW2N1c3RvbWl6ZUV4cG9ydERhdGFdPVwiY29tbW9uU2VydmljZS5yZW1vdmVIdG1sQ29udGVudEZyb21EYXRhXCI+XG4gICAgICAgICAgICA8ZHhvLXNlYXJjaC1wYW5lbCBbaGlnaGxpZ2h0Q2FzZVNlbnNpdGl2ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbdmlzaWJsZV09XCJ0YWJsZURhdGFDb25maWcuc2VhcmNoUGFuZWxcIj48L2R4by1zZWFyY2gtcGFuZWw+XG4gICAgICAgICAgICA8ZHhvLWV4cG9ydCBbZW5hYmxlZF09XCJ0cnVlXCIgZmlsZU5hbWU9XCJ7e3RhYmxlRGF0YUNvbmZpZy5maWxlX25hbWV9fVwiXG4gICAgICAgICAgICAgICAgW2N1c3RvbWl6ZUV4Y2VsQ2VsbF09XCJjb21tb25TZXJ2aWNlLmN1c3RvbWl6ZUV4Y2VsQ2VsbFwiPjwvZHhvLWV4cG9ydD5cbiAgICAgICAgICAgIDxkeG8tcGFnaW5nIFtwYWdlU2l6ZV09XCJ0YWJsZURhdGFDb25maWcubnVtYmVyT2ZSb3dcIj48L2R4by1wYWdpbmc+XG4gICAgICAgICAgICA8ZHhvLXBhZ2VyIFtzaG93SW5mb109XCJ0YWJsZURhdGFDb25maWcucGFnZUluZm9cIiBbc2hvd1BhZ2VTaXplU2VsZWN0b3JdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2FsbG93ZWRQYWdlU2l6ZXNdPVwidGFibGVEYXRhQ29uZmlnLmFsbG93ZWRQYWdlU2l6ZXNcIj5cbiAgICAgICAgICAgIDwvZHhvLXBhZ2VyPlxuXG4gICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgdGFibGVEYXRhQ29uZmlnLmNvbHVtbnNcIj5cbiAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiAqbmdJZj1cIml0ZW0uZGF0YUZpZWxkID09ICdyZWNvcmREYXRlJ1wiIGRhdGFGaWVsZD1cInt7IGl0ZW0uZGF0YUZpZWxkIH19XCJcbiAgICAgICAgICAgICAgICAgICAgW2NhcHRpb25dPVwiaXRlbS5jYXB0aW9uXCIgW3Zpc2libGVdPVwiaXRlbS52aXNpYmxlXCIgc29ydE9yZGVyPVwiZGVzY1wiPjwvZHhpLWNvbHVtbj5cbiAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiAqbmdJZj1cIml0ZW0uZGF0YUZpZWxkICE9PSAncmVjb3JkRGF0ZSdcIiBbc29ydGluZ01ldGhvZF09XCJjb21tb25TZXJ2aWNlLmN1c3RvbVZhbHVlU29ydGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2NlbGxUZW1wbGF0ZV09XCJpdGVtLmRhdGFGaWVsZFwiIFtjYXB0aW9uXT1cIml0ZW0uY2FwdGlvblwiIGRhdGFGaWVsZD1cInt7IGl0ZW0uZGF0YUZpZWxkIH19XCJcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50PVwibGVmdFwiIFt2aXNpYmxlXT1cIml0ZW0udmlzaWJsZVwiPlxuICAgICAgICAgICAgICAgIDwvZHhpLWNvbHVtbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiAtLT5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiB0YWJsZURhdGFDb25maWcuY29sdW1uc1wiPlxuICAgICAgICAgICAgICAgIDwhLS0gQ2hlY2sgaWYgY29sdW1uIGhhcyBuZXN0ZWQgY29sdW1ucyAoY29sdW1uc09uZSBzdHJ1Y3R1cmUpIC0tPlxuICAgICAgICAgICAgICAgIDxkeGktY29sdW1uICpuZ0lmPVwiaXRlbS5jb2x1bW5zOyBlbHNlIGZsYXRDb2x1bW5cIiBjYXB0aW9uPVwie3sgaXRlbS5jYXB0aW9uIH19XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN1Ykl0ZW0gb2YgaXRlbS5jb2x1bW5zXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uICpuZ0lmPVwic3ViSXRlbS5kYXRhRmllbGQgPT0gJ3JlY29yZERhdGUnXCIgIFxuICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFGaWVsZF09XCJzdWJJdGVtLmRhdGFGaWVsZFwiIFtjYXB0aW9uXT1cInN1Ykl0ZW0uY2FwdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Zpc2libGVdPVwic3ViSXRlbS52aXNpYmxlXCIgYWxpZ25tZW50PVwibGVmdFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRPcmRlcj1cImRlc2NcIj48L2R4aS1jb2x1bW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uICpuZ0lmPVwic3ViSXRlbS5kYXRhRmllbGQgIT09ICdyZWNvcmREYXRlJ1wiICBbZGF0YUZpZWxkXT1cInN1Ykl0ZW0uZGF0YUZpZWxkXCIgW2NhcHRpb25dPVwic3ViSXRlbS5jYXB0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmlzaWJsZV09XCJzdWJJdGVtLnZpc2libGVcIiBhbGlnbm1lbnQ9XCJyaWdodFwiIFtjZWxsVGVtcGxhdGVdPVwiaXRlbS5kYXRhRmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzb3J0aW5nTWV0aG9kXT1cImNvbW1vblNlcnZpY2UuY3VzdG9tVmFsdWVTb3J0ZXJcIj48L2R4aS1jb2x1bW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZHhpLWNvbHVtbj5cblxuICAgICAgICAgICAgICAgIDwhLS0gRmxhdCBjb2x1bW4gc3RydWN0dXJlIChjb2x1bW5zVHdvIHN0cnVjdHVyZSkgLS0+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNmbGF0Q29sdW1uPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uICpuZ0lmPVwiaXRlbS5kYXRhRmllbGQgPT0gJ3JlY29yZERhdGUnXCIgZGF0YUZpZWxkPVwie3sgaXRlbS5kYXRhRmllbGQgfX1cIlxuICAgICAgICAgICAgICAgICAgICBbY2FwdGlvbl09XCJpdGVtLmNhcHRpb25cIiBbdmlzaWJsZV09XCJpdGVtLnZpc2libGVcIiBzb3J0T3JkZXI9XCJkZXNjXCI+PC9keGktY29sdW1uPlxuXG4gICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gKm5nSWY9XCJpdGVtLmRhdGFGaWVsZCAhPT0gJ3JlY29yZERhdGUnXCIgW3NvcnRpbmdNZXRob2RdPVwiY29tbW9uU2VydmljZS5jdXN0b21WYWx1ZVNvcnRlclwiXG4gICAgICAgICAgICAgICAgICAgIFtjZWxsVGVtcGxhdGVdPVwiaXRlbS5kYXRhRmllbGRcIiBbY2FwdGlvbl09XCJpdGVtLmNhcHRpb25cIiBkYXRhRmllbGQ9XCJ7eyBpdGVtLmRhdGFGaWVsZCB9fVwiXG4gICAgICAgICAgICAgICAgICAgIGFsaWdubWVudD1cInJpZ2h0XCIgW3Zpc2libGVdPVwiaXRlbS52aXNpYmxlXCI+XG4gICAgICAgICAgICAgICAgPC9keGktY29sdW1uPlxuXG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZHhpLWNvbHVtbiBbZGF0YUZpZWxkXT1cIml0ZW0uZGF0YUZpZWxkXCIgW2NhcHRpb25dPVwiaXRlbS5jYXB0aW9uXCIgW3Zpc2libGVdPVwiaXRlbS52aXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjZWxsVGVtcGxhdGVdPVwiaXRlbS5kYXRhRmllbGRcIiBhbGlnbm1lbnQ9XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzb3J0aW5nTWV0aG9kXT1cImNvbW1vblNlcnZpY2UuY3VzdG9tVmFsdWVTb3J0ZXJcIj48L2R4aS1jb2x1bW4+IC0tPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiB0YWJsZURhdGFDb25maWcuY29sdW1uc1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgZGF0YSBvZiBpdGVtLmRhdGFGaWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImRhdGEudmFsdWVcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9keC1kYXRhLWdyaWQ+XG5cbiAgICA8L2Rpdj5cblxuXG48L2Rpdj4iXX0=
|
|
178
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtbWEtYWR2YW5jZS1vcGVyYXRvci10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1hZHZhbmNlLW9wZXJhdG9yLXRhYmxlL2dhbW1hLWFkdmFuY2Utb3BlcmF0b3ItdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtYWR2YW5jZS1vcGVyYXRvci10YWJsZS9nYW1tYS1hZHZhbmNlLW9wZXJhdG9yLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxNQUFNLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7O0FBUTlDLE1BQU0sT0FBTyxrQ0FBa0M7SUFzRjdDLFlBQW1CLGFBQTRCO1FBQTVCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBbkYvQyx1QkFBa0IsR0FBUSxFQUFFLENBQUM7UUFHN0IsYUFBUSxHQUFZLElBQUksQ0FBQztRQUN6QixvQkFBZSxHQUFRLEVBQUUsQ0FBQztRQUMxQixtQkFBYyxHQUFHLENBQUMsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLHVDQUF1QyxDQUFDLENBQUE7UUFRN0csY0FBUyxHQUFXLE9BQU8sQ0FBQztRQUNYLHlCQUFvQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzdELGNBQVMsR0FBc0Is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LElBQUksT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxLQUFLLFVBQVUsRUFBRTtZQUMxRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDaEQ7YUFBTTtZQUNMLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxZQUFZLDZCQUE2QixDQUFDLENBQUM7WUFDckUsT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUM7OytIQXJMVSxrQ0FBa0M7bUhBQWxDLGtDQUFrQywrU0NaL0Msb2dOQXlHTTsyRkQ3Rk8sa0NBQWtDO2tCQUw5QyxTQUFTOytCQUNFLGtDQUFrQztvR0FxQjNCLG9CQUFvQjtzQkFBcEMsTUFBTTtnQkFDVSxTQUFTO3NCQUF6QixNQUFNO2dCQUNVLDRCQUE0QjtzQkFBNUMsTUFBTTtnQkFDRSxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBR0YsZUFBZTtzQkFEbEIsS0FBSzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJcblxuXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJy4vLi4vLi4vLi4vbW9tZW50LWhlbHBlcic7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWdhbW1hLWFkdmFuY2Utb3BlcmF0b3ItdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2FtbWEtYWR2YW5jZS1vcGVyYXRvci10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dhbW1hLWFkdmFuY2Utb3BlcmF0b3ItdGFibGUuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBHYW1tYUFkdmFuY2VPcGVyYXRvclRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuaXNKc29uUHJldmlldzogYm9vbGVhblxuICBkYXRhU291cnNlRm9yVGFibGU6IGFueSA9IFtdO1xuICBqc2FvbkRhdGFzb3VyY2U6IGFueTtcbiAgY29uZmlnQ29sdW1lOiBhbnk7XG4gIGlzTG9hZGVyOiBib29sZWFuID0gdHJ1ZTtcbiAgdGFibGVEYXRhQ29uZmlnOiBhbnkgPSB7fTtcbiAgZW5yaWNoTmFtZUxpc3QgPSBbXCJmb3JtYXRCeXRlc1wiLCBcImZvcm1hdEJ5dHNUb0tiXCIsIFwiZm9ybWF0Qnl0c1RvR2JcIiwgXCJyZWZvcm1hdE51bWJlcldpdGhUaG91c2FuZFNlcGFyYXRvclYzXCJdXG4gIHBhZ2VfY29uZmlnOiBhbnk7XG4gIHBhZ2VfcGFybXM6IGFueTtcbiAgcGFnZV9zZWxlY3RlZF9vcGVyYXRvcjogYW55O1xuXG4gIHRhYmxlSGVpZ2h0OiBhbnk7XG5cbiAgXG4gIGFjdGl2ZVRhYjogc3RyaW5nID0gJ2Jhc2ljJztcbiAgQE91dHB1dCgpIHB1YmxpYyBnZXRUYWJsZUNvbmZpZ091dFB1dDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgb1Jvd0NsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBvbnJpZ2h0Q2xpY2tDb250ZXh0U2VsZWN0aW9uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQElucHV0KCkgcmlnaHRDbGlja0VuYWJsZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KCdjaGFydERhdGFTb3VyY2UnKVxuICBzZXQgY2hhcnREYXRhU291cmNlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNMb2FkZXIgPSB0cnVlO1xuICAgICAgdGhpcy5wYWdlX2NvbmZpZyA9IHZhbHVlO1xuICAgICAgdGhpcy5wYWdlX3Bhcm1zID0gdmFsdWUudGl0bGVQYXJhbXM7XG4gICAgICB0aGlzLnRhYmxlSGVpZ2h0ID0gKHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnRhYmxlSGVpZ2h0ICYmIHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnRhYmxlSGVpZ2h0ICE9PSBcIlwiKT8gdGhpcy5zZXRUYWJsZUhlaWdodCh2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy50YWJsZUhlaWdodCk6J2F1dG8nO1xuXG4gICAgICBpZiAodmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UgJiYgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UubGVuZ3RoICE9PSAwKSB7XG5cbiAgICAgICAgaWYgKHZhbHVlLmtwaUNvbmZpZy5mb3JtYXRlID09IFwiZGFpbHlcIikge1xuICAgICAgICAgIGNvbnN0IHNvcnRlZERhdGEgPSB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZVxuICAgICAgICAgICAgLmZpbHRlcihyZWNvcmQgPT4gcmVjb3JkLnJlY29yZERhdGUpXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gbW9tZW50KGIucmVjb3JkRGF0ZSkuZGlmZihtb21lbnQoYS5yZWNvcmREYXRlKSkpO1xuXG4gICAgICAgICAgY29uc3QgbW9zdFJlY2VudFJlY29yZCA9IHNvcnRlZERhdGFbMF07XG4gICAgICAgICAgY29uc3QgZmlsdGVyZWRPYmplY3RzID0gc29ydGVkRGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLnJlY29yZERhdGUgPT09IG1vc3RSZWNlbnRSZWNvcmQucmVjb3JkRGF0ZSk7XG4gICAgICAgICAgdGhpcy5kYXRhU291cnNlRm9yVGFibGUgPSBmaWx0ZXJlZE9iamVjdHM7XG5cbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5rcGlDb25maWcuZm9ybWF0ZSA9PSBcIm1vbnRobHlcIikge1xuICAgICAgICAgIHRoaXMudGFibGVEYXRhQ29uZmlnID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWc7XG5cbiAgICAgICAgICBsZXQgdGFibGVDb2x1bW5zID0gKHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNvbHVtbnMpID8gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuY29sdW1ucyA6IFtdO1xuICAgICAgICAgIGlmICh0YWJsZUNvbHVtbnMgJiYgdGFibGVDb2x1bW5zLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlLm1hcChvYmogPT4ge1xuICAgICAgICAgICAgICBjb25zdCBuZXdPYmogPSB7IC4uLm9iaiB9O1xuICAgICAgICAgICAgICBPYmplY3Qua2V5cyhuZXdPYmopLmZvckVhY2goa2V5ID0+IHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kTWF0Y2hPYmplY3QgPSB0YWJsZUNvbHVtbnMuZmluZChvYmogPT4gb2JqLmRhdGFGaWVsZCA9PT0ga2V5KTtcbiAgICAgICAgICAgICAgICBpZiAoZm91bmRNYXRjaE9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kTWF0Y2hPYmplY3QuZW5yaWNoTmFtZSAmJiBmb3VuZE1hdGNoT2JqZWN0LmVucmljaE5hbWUgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZm91bmRNYXRjaE9iamVjdC5lbnJpY2hOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgbmV3T2JqW2tleV0gPSB0aGlzLmNhbGxTZXJ2aWNlRnVuY3Rpb24oZm91bmRNYXRjaE9iamVjdC5lbnJpY2hOYW1lLCBuZXdPYmpba2V5XSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZGF0ZScpICYmIG5ld09ialtrZXldKSB7XG4gICAgICAgICAgICAgICAgICBuZXdPYmpba2V5XSA9IG1vbWVudChuZXdPYmpba2V5XSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gbmV3T2JqO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3Vyc2VGb3JUYWJsZSA9IGRhdGFTb3VyY2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudGFibGVEYXRhQ29uZmlnLmNvbHVtbnMgPSAodmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UgJiYgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UubGVuZ3RoICE9PSAwKSA/IHRoaXMudHJhbnNmb3JtQ29sdW1ucyh2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZVswXSkgOiBbXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJzZUZvclRhYmxlID0gdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgfSwgMjAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJzZUZvclRhYmxlID0gW107XG4gICAgICAgICAgdGhpcy50YWJsZURhdGFDb25maWdbJ2NvbHVtbnMnXSA9IFtdO1xuICAgICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgfSwgMjAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gIH1cblxuXG4gIHRyYW5zZm9ybUNvbHVtbnMobWFpbm9iajogYW55KTogYW55W10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhtYWlub2JqKS5tYXAoa2V5ID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICAgIGRhdGFGaWVsZDoga2V5LFxuICAgICAgICBjYXB0aW9uOiBrZXlcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuXG5cbiAgZ2V0T2JqZWN0S2V5cyhvYmo6IGFueSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKTtcbiAgfVxuICBzZXRBY3RpdmVUYWIodGFiOiBzdHJpbmcpIHtcbiAgICB0aGlzLmFjdGl2ZVRhYiA9IHRhYjtcbiAgfVxuXG4gIG9uUm93Q2xpY2soZSkge1xuXG4gICAgY29uc3QgdGl0bGVfcGFyYW1zID0gZS5kYXRhW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuY29tbW9uQ29uZmlnWydkYXRhRmllbGQnXV1cbiAgICBsZXQgdGl0bGUgPSB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNvbW1vbkNvbmZpZ1sndGl0bGUnXSArIHRpdGxlX3BhcmFtcztcbiAgICBsZXQgb2JqID0ge1xuICAgICAgZGF0YTogZS5kYXRhLFxuICAgICAga2V5VG9QYXNzOiB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5rZXlUb1Bhc3MsXG4gICAgICB0YWJsZVRpdGxlOiAodGhpcy5wYWdlX3Bhcm1zKSA/IHRoaXMucGFnZV9wYXJtcyArIHRpdGxlIDogdGl0bGUsXG4gICAgICB2aWV3SWQ6IHRoaXMucGFnZV9jb25maWcudmlld0lkLFxuICAgICAgZHJpbGxEb3duVHlwZTogXCJuYXR1cmFsXCIsXG4gICAgICBkcmlsbGRvd25Gcm9tOiB0aGlzLnBhZ2VfY29uZmlnLnZpZXdJZCxcbiAgICAgIGRyaWxsZG93blRvOiBcIlwiLFxuICAgIH1cbiAgICB0aGlzLm9Sb3dDbGljay5lbWl0KG9iaik7XG4gIH1cblxuICBhZGRNZW51SXRlbXMoZSkge1xuXG4gICAgY29uc3QgdGl0bGVfcGFyYW1zID0gZS5yb3cuZGF0YVt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNvbW1vbkNvbmZpZ1snZGF0YUZpZWxkJ11dXG4gICAgbGV0IHRpdGxlID0gdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5jb21tb25Db25maWdbJ3RpdGxlJ10gKyB0aXRsZV9wYXJhbXM7XG5cbiAgICBpZiAodGhpcy5yaWdodENsaWNrRW5hYmxlICYmIGUuY29sdW1uSW5kZXggPT0gMCkge1xuICAgICAgaWYgKGUudGFyZ2V0ID09ICdjb250ZW50Jykge1xuICAgICAgICBpZiAoIWUuaXRlbXMpIGUuaXRlbXMgPSBbXTtcblxuICAgICAgICB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5jb250ZXh0TWVudS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcua2V5VG9QYXNzLnNvbWUoa2V5ID0+IGVsZW1lbnQuZGlzcGxheUtleS5pbmNsdWRlcyhrZXkpKSkge1xuICAgICAgICAgICAgZS5pdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgdGV4dDogZWxlbWVudC5kaXNwbGF5S2V5LFxuICAgICAgICAgICAgICBvbkl0ZW1DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCByaWdodGNsaWNrRGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgIGRhdGE6IGUucm93LmRhdGEsXG4gICAgICAgICAgICAgICAgICBrZXlUb1Bhc3M6IHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmtleVRvUGFzcyxcbiAgICAgICAgICAgICAgICAgIHRhYmxlVGl0bGU6ICh0aGlzLnBhZ2VfcGFybXMpID8gdGhpcy5wYWdlX3Bhcm1zICsgdGl0bGUgOiB0aXRsZSxcbiAgICAgICAgICAgICAgICAgIHZpZXdJZDogdGhpcy5wYWdlX2NvbmZpZy52aWV3SWQsXG4gICAgICAgICAgICAgICAgICBkcmlsbERvd25UeXBlOiBcImNvbnRleHRcIixcbiAgICAgICAgICAgICAgICAgIGRyaWxsZG93bkZyb206IHRoaXMucGFnZV9jb25maWcudmlld0lkLFxuICAgICAgICAgICAgICAgICAgZHJpbGxkb3duVG86IGVsZW1lbnQudmlld0lkLFxuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMub25yaWdodENsaWNrQ29udGV4dFNlbGVjdGlvbi5lbWl0KHJpZ2h0Y2xpY2tEYXRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldFRhYmxlSGVpZ2h0KHZhbHVlOiBhbnkpOiBhbnkge1xuICBcbiAgICBjb25zdCB0YWJsZUhlaWdodCA9IHZhbHVlO1xuICAgIGlmICh0YWJsZUhlaWdodCA9PT0gJ2F1dG8nKSB7XG4gICAgICByZXR1cm4gJ2F1dG8nO1xuICAgIH1cbiAgICAgIGNvbnN0IHBhcnNlZEhlaWdodCA9IE51bWJlcih0YWJsZUhlaWdodCk7XG4gICAgaWYgKCFpc05hTihwYXJzZWRIZWlnaHQpICYmIHBhcnNlZEhlaWdodCA+IDApIHtcbiAgICAgIHJldHVybiBwYXJzZWRIZWlnaHQ7XG4gICAgfVxuICB9XG5cblxuXG4gIGNhbGxTZXJ2aWNlRnVuY3Rpb24oZnVuY3Rpb25OYW1lOiBzdHJpbmcsIHZhbHVlKTogYW55IHtcbiAgICBpZiAodHlwZW9mIHRoaXMuY29tbW9uU2VydmljZVtmdW5jdGlvbk5hbWVdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbW1vblNlcnZpY2VbZnVuY3Rpb25OYW1lXSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEZ1bmN0aW9uICR7ZnVuY3Rpb25OYW1lfSBub3QgZm91bmQgaW4gQ29tbW9uU2VydmljZWApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cblxufVxuIiwiPGRpdiBjbGFzcz1cIm14LTIgYmctZ3JheS04MDBcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNMb2FkZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtc3RhcnQgYmctZ3JheS04MDAgcC0yXCI+XG4gICAgICAgICAgICA8YXBwLWxvYWRlcj48L2FwcC1sb2FkZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPGRpdiBjbGFzcz1cIm14LTIgcGItMlwiPlxuICAgICAgICA8IS0tIDxkeC1kYXRhLWdyaWQgW2NvbHVtbkF1dG9XaWR0aF09XCJ0cnVlXCIgKG9uUm93Q2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQpXCIgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJzZUZvclRhYmxlXCJcbiAgICAgICAgICAgIFtob3ZlclN0YXRlRW5hYmxlZF09XCJ0cnVlXCIgW3NlbGVjdGVkUm93S2V5c109XCJbXVwiIFtzaG93Qm9yZGVyc109XCJ0cnVlXCIgW3Nob3dDb2x1bW5MaW5lc109XCJ0cnVlXCJcbiAgICAgICAgICAgICpuZ0lmPVwiIWlzTG9hZGVyXCIgW2NvbHVtbnNdPVwidGFibGVEYXRhQ29uZmlnLmNvbHVtbnNcIiBbc2hvd1Jvd0xpbmVzXT1cInRydWVcIiBpZD1cImdyaWRDb250YWluZXJcIlxuICAgICAgICAgICAgKG9uQ29udGV4dE1lbnVQcmVwYXJpbmcpPVwiYWRkTWVudUl0ZW1zKCRldmVudClcIj5cbiAgICAgICAgICAgIDxkeG8tc2VhcmNoLXBhbmVsIFtoaWdobGlnaHRDYXNlU2Vuc2l0aXZlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt2aXNpYmxlXT1cInRhYmxlRGF0YUNvbmZpZy5zZWFyY2hQYW5lbFwiPjwvZHhvLXNlYXJjaC1wYW5lbD5cbiAgICAgICAgICAgIDxkeG8tZXhwb3J0IFtlbmFibGVkXT1cInRydWVcIiBmaWxlTmFtZT1cInt7dGFibGVEYXRhQ29uZmlnLmZpbGVfbmFtZX19XCJcbiAgICAgICAgICAgICAgICBbY3VzdG9taXplRXhjZWxDZWxsXT1cImNvbW1vblNlcnZpY2UuY3VzdG9taXplRXhjZWxDZWxsXCI+PC9keG8tZXhwb3J0PlxuICAgICAgICAgICAgPGR4by1wYWdpbmcgW3BhZ2VTaXplXT1cInRhYmxlRGF0YUNvbmZpZy5udW1iZXJPZlJvd1wiPjwvZHhvLXBhZ2luZz5cbiAgICAgICAgICAgIDxkeG8tcGFnZXIgW3Nob3dJbmZvXT1cInRhYmxlRGF0YUNvbmZpZy5wYWdlSW5mb1wiIFtzaG93UGFnZVNpemVTZWxlY3Rvcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbYWxsb3dlZFBhZ2VTaXplc109XCJ0YWJsZURhdGFDb25maWcuYWxsb3dlZFBhZ2VTaXplc1wiPlxuICAgICAgICAgICAgPC9keG8tcGFnZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFibGVEYXRhQ29uZmlnLmNvbHVtbnMgJiYgdGFibGVEYXRhQ29uZmlnLmNvbHVtbnMubGVuZ3RoICE9PSAwXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiB0YWJsZURhdGFDb25maWcuY29sdW1uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiAqbmdJZj1cIml0ZW0uZGF0YUZpZWxkID09ICdyZWNvcmREYXRlJ1wiIGRhdGFGaWVsZD1cInt7IGl0ZW0uZGF0YUZpZWxkIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjYXB0aW9uXT1cIml0ZW0uY2FwdGlvblwiIFt2aXNpYmxlXT1cIml0ZW0udmlzaWJsZVwiIHNvcnRPcmRlcj1cImRlc2NcIj48L2R4aS1jb2x1bW4+XG4gICAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uICpuZ0lmPVwiaXRlbS5kYXRhRmllbGQgIT09ICdyZWNvcmREYXRlJ1wiIGZvcm1hdD1cIiMsIyMwLiMjXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzb3J0aW5nTWV0aG9kXT1cImNvbW1vblNlcnZpY2UuY3VzdG9tVmFsdWVTb3J0ZXJcIiBbY2VsbFRlbXBsYXRlXT1cIml0ZW0uZGF0YUZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjYXB0aW9uXT1cIml0ZW0uY2FwdGlvblwiIGRhdGFGaWVsZD1cInt7IGl0ZW0uZGF0YUZpZWxkIH19XCIgYWxpZ25tZW50PVwibGVmdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmlzaWJsZV09XCJpdGVtLnZpc2libGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9keGktY29sdW1uPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgdGFibGVEYXRhQ29uZmlnLmNvbHVtbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBkYXRhIG9mIGl0ZW0uZGF0YUZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImRhdGEudmFsdWVcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPC9keC1kYXRhLWdyaWQ+IC0tPlxuICAgICAgICA8ZHgtZGF0YS1ncmlkIFtjb2x1bW5BdXRvV2lkdGhdPVwidHJ1ZVwiIChvblJvd0NsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50KVwiIFtkYXRhU291cmNlXT1cImRhdGFTb3Vyc2VGb3JUYWJsZVwiXG4gICAgICAgICAgICBbaG92ZXJTdGF0ZUVuYWJsZWRdPVwidHJ1ZVwiIFtzZWxlY3RlZFJvd0tleXNdPVwiW11cIiBbc2hvd0JvcmRlcnNdPVwidHJ1ZVwiIFtzaG93Q29sdW1uTGluZXNdPVwidHJ1ZVwiIFtoZWlnaHRdPVwidGFibGVIZWlnaHRcIlxuICAgICAgICAgICAgKm5nSWY9XCIhaXNMb2FkZXJcIiBbY29sdW1uc109XCJ0YWJsZURhdGFDb25maWcuY29sdW1uc1wiIFtzaG93Um93TGluZXNdPVwidHJ1ZVwiIGlkPVwiZ3JpZENvbnRhaW5lclwiXG4gICAgICAgICAgICAob25Db250ZXh0TWVudVByZXBhcmluZyk9XCJhZGRNZW51SXRlbXMoJGV2ZW50KVwiXG4gICAgICAgICAgICBbY3VzdG9taXplRXhwb3J0RGF0YV09XCJjb21tb25TZXJ2aWNlLnJlbW92ZUh0bWxDb250ZW50RnJvbURhdGFcIj5cbiAgICAgICAgICAgIDxkeG8tc2VhcmNoLXBhbmVsIFtoaWdobGlnaHRDYXNlU2Vuc2l0aXZlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt2aXNpYmxlXT1cInRhYmxlRGF0YUNvbmZpZy5zZWFyY2hQYW5lbFwiPjwvZHhvLXNlYXJjaC1wYW5lbD5cbiAgICAgICAgICAgIDxkeG8tZXhwb3J0IFtlbmFibGVkXT1cInRydWVcIiBmaWxlTmFtZT1cInt7dGFibGVEYXRhQ29uZmlnLmZpbGVfbmFtZX19XCJcbiAgICAgICAgICAgICAgICBbY3VzdG9taXplRXhjZWxDZWxsXT1cImNvbW1vblNlcnZpY2UuY3VzdG9taXplRXhjZWxDZWxsXCI+PC9keG8tZXhwb3J0PlxuICAgICAgICAgICAgPGR4by1wYWdpbmcgW3BhZ2VTaXplXT1cInRhYmxlRGF0YUNvbmZpZy5udW1iZXJPZlJvd1wiPjwvZHhvLXBhZ2luZz5cbiAgICAgICAgICAgIDxkeG8tcGFnZXIgW3Nob3dJbmZvXT1cInRhYmxlRGF0YUNvbmZpZy5wYWdlSW5mb1wiIFtzaG93UGFnZVNpemVTZWxlY3Rvcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbYWxsb3dlZFBhZ2VTaXplc109XCJ0YWJsZURhdGFDb25maWcuYWxsb3dlZFBhZ2VTaXplc1wiPlxuICAgICAgICAgICAgPC9keG8tcGFnZXI+XG5cbiAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiB0YWJsZURhdGFDb25maWcuY29sdW1uc1wiPlxuICAgICAgICAgICAgICAgIDxkeGktY29sdW1uICpuZ0lmPVwiaXRlbS5kYXRhRmllbGQgPT0gJ3JlY29yZERhdGUnXCIgZGF0YUZpZWxkPVwie3sgaXRlbS5kYXRhRmllbGQgfX1cIlxuICAgICAgICAgICAgICAgICAgICBbY2FwdGlvbl09XCJpdGVtLmNhcHRpb25cIiBbdmlzaWJsZV09XCJpdGVtLnZpc2libGVcIiBzb3J0T3JkZXI9XCJkZXNjXCI+PC9keGktY29sdW1uPlxuICAgICAgICAgICAgICAgIDxkeGktY29sdW1uICpuZ0lmPVwiaXRlbS5kYXRhRmllbGQgIT09ICdyZWNvcmREYXRlJ1wiIFtzb3J0aW5nTWV0aG9kXT1cImNvbW1vblNlcnZpY2UuY3VzdG9tVmFsdWVTb3J0ZXJcIlxuICAgICAgICAgICAgICAgICAgICBbY2VsbFRlbXBsYXRlXT1cIml0ZW0uZGF0YUZpZWxkXCIgW2NhcHRpb25dPVwiaXRlbS5jYXB0aW9uXCIgZGF0YUZpZWxkPVwie3sgaXRlbS5kYXRhRmllbGQgfX1cIlxuICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ9XCJsZWZ0XCIgW3Zpc2libGVdPVwiaXRlbS52aXNpYmxlXCI+XG4gICAgICAgICAgICAgICAgPC9keGktY29sdW1uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+IC0tPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHRhYmxlRGF0YUNvbmZpZy5jb2x1bW5zXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBDaGVjayBpZiBjb2x1bW4gaGFzIG5lc3RlZCBjb2x1bW5zIChjb2x1bW5zT25lIHN0cnVjdHVyZSkgLS0+XG4gICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gKm5nSWY9XCJpdGVtLmNvbHVtbnM7IGVsc2UgZmxhdENvbHVtblwiIGNhcHRpb249XCJ7eyBpdGVtLmNhcHRpb24gfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3ViSXRlbSBvZiBpdGVtLmNvbHVtbnNcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gKm5nSWY9XCJzdWJJdGVtLmRhdGFGaWVsZCA9PSAncmVjb3JkRGF0ZSdcIiAgXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGF0YUZpZWxkXT1cInN1Ykl0ZW0uZGF0YUZpZWxkXCIgW2NhcHRpb25dPVwic3ViSXRlbS5jYXB0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmlzaWJsZV09XCJzdWJJdGVtLnZpc2libGVcIiBhbGlnbm1lbnQ9XCJsZWZ0XCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydE9yZGVyPVwiZGVzY1wiPjwvZHhpLWNvbHVtbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gKm5nSWY9XCJzdWJJdGVtLmRhdGFGaWVsZCAhPT0gJ3JlY29yZERhdGUnXCIgIFtkYXRhRmllbGRdPVwic3ViSXRlbS5kYXRhRmllbGRcIiBbY2FwdGlvbl09XCJzdWJJdGVtLmNhcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2aXNpYmxlXT1cInN1Ykl0ZW0udmlzaWJsZVwiIGFsaWdubWVudD1cInJpZ2h0XCIgW2NlbGxUZW1wbGF0ZV09XCJpdGVtLmRhdGFGaWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NvcnRpbmdNZXRob2RdPVwiY29tbW9uU2VydmljZS5jdXN0b21WYWx1ZVNvcnRlclwiPjwvZHhpLWNvbHVtbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9keGktY29sdW1uPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBGbGF0IGNvbHVtbiBzdHJ1Y3R1cmUgKGNvbHVtbnNUd28gc3RydWN0dXJlKSAtLT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2ZsYXRDb2x1bW4+XG5cbiAgICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gKm5nSWY9XCJpdGVtLmRhdGFGaWVsZCA9PSAncmVjb3JkRGF0ZSdcIiBkYXRhRmllbGQ9XCJ7eyBpdGVtLmRhdGFGaWVsZCB9fVwiXG4gICAgICAgICAgICAgICAgICAgIFtjYXB0aW9uXT1cIml0ZW0uY2FwdGlvblwiIFt2aXNpYmxlXT1cIml0ZW0udmlzaWJsZVwiIHNvcnRPcmRlcj1cImRlc2NcIj48L2R4aS1jb2x1bW4+XG5cbiAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiAqbmdJZj1cIml0ZW0uZGF0YUZpZWxkICE9PSAncmVjb3JkRGF0ZSdcIiBbc29ydGluZ01ldGhvZF09XCJjb21tb25TZXJ2aWNlLmN1c3RvbVZhbHVlU29ydGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2NlbGxUZW1wbGF0ZV09XCJpdGVtLmRhdGFGaWVsZFwiIFtjYXB0aW9uXT1cIml0ZW0uY2FwdGlvblwiIGRhdGFGaWVsZD1cInt7IGl0ZW0uZGF0YUZpZWxkIH19XCJcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50PVwicmlnaHRcIiBbdmlzaWJsZV09XCJpdGVtLnZpc2libGVcIj5cbiAgICAgICAgICAgICAgICA8L2R4aS1jb2x1bW4+XG5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkeGktY29sdW1uIFtkYXRhRmllbGRdPVwiaXRlbS5kYXRhRmllbGRcIiBbY2FwdGlvbl09XCJpdGVtLmNhcHRpb25cIiBbdmlzaWJsZV09XCJpdGVtLnZpc2libGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NlbGxUZW1wbGF0ZV09XCJpdGVtLmRhdGFGaWVsZFwiIGFsaWdubWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NvcnRpbmdNZXRob2RdPVwiY29tbW9uU2VydmljZS5jdXN0b21WYWx1ZVNvcnRlclwiPjwvZHhpLWNvbHVtbj4gLS0+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHRhYmxlRGF0YUNvbmZpZy5jb2x1bW5zXCI+XG4gICAgICAgICAgICAgICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBkYXRhIG9mIGl0ZW0uZGF0YUZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiZGF0YS52YWx1ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2R4LWRhdGEtZ3JpZD5cblxuICAgIDwvZGl2PlxuXG5cbjwvZGl2PiJdfQ==
|
|
@@ -29,6 +29,7 @@ export class GammaTableClumnBarChartComponent {
|
|
|
29
29
|
this.isLoader = true;
|
|
30
30
|
this.page_config = value;
|
|
31
31
|
this.page_parms = value.titleParams;
|
|
32
|
+
this.tableHeight = (value.kpiConfig.dataConfig.tableHeight && value.kpiConfig.dataConfig.tableHeight !== "") ? this.setTableHeight(value.kpiConfig.dataConfig.tableHeight) : 'auto';
|
|
32
33
|
if (value.kpiConfig.dataSource && value.kpiConfig.dataSource.length !== 0) {
|
|
33
34
|
this.tableConfig = value.kpiConfig.dataConfig;
|
|
34
35
|
const columns = value.kpiConfig.dataConfig.columns;
|
|
@@ -123,12 +124,22 @@ export class GammaTableClumnBarChartComponent {
|
|
|
123
124
|
}
|
|
124
125
|
}
|
|
125
126
|
}
|
|
127
|
+
setTableHeight(value) {
|
|
128
|
+
const tableHeight = value;
|
|
129
|
+
if (tableHeight === 'auto') {
|
|
130
|
+
return 'auto';
|
|
131
|
+
}
|
|
132
|
+
const parsedHeight = Number(tableHeight);
|
|
133
|
+
if (!isNaN(parsedHeight) && parsedHeight > 0) {
|
|
134
|
+
return parsedHeight;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
126
137
|
}
|
|
127
138
|
GammaTableClumnBarChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GammaTableClumnBarChartComponent, deps: [{ token: i1.CommonService }, { token: i2.ToastrService }, { token: i3.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
|
|
128
|
-
GammaTableClumnBarChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: GammaTableClumnBarChartComponent, selector: "app-gamma-table-clumn-bar-chart", inputs: { rightClickEnable: "rightClickEnable", chartDataSource: "chartDataSource" }, outputs: { getTableConfigOutPut: "getTableConfigOutPut", oRowClick: "oRowClick", onrightClickContextSelection: "onrightClickContextSelection" }, ngImport: i0, template: "<div class=\"mx-2 bg-gray-800\">\n <ng-container *ngIf=\"isLoader\">\n <div class=\"flex justify-center items-start bg-gray-800 p-2\">\n <app-loader></app-loader>\n </div>\n </ng-container>\n\n <div class=\"mx-2 pb-2\">\n <ng-container *ngIf=\"!isLoader\">\n <dx-data-grid (onRowClick)=\"onRowClick($event)\" [dataSource]=\"percentageDataSource\"\n (onContextMenuPreparing)=\"addMenuItems($event)\" [rowAlternationEnabled]=\"true\"\n [hoverStateEnabled]=\"true\" [selectedRowKeys]=\"[]\" [showBorders]=\"true\" [showColumnLines]=\"true\"\n [showRowLines]=\"true\" [showRowLines]=\"true\" id=\"gridContainer\"\n [customizeExportData]=\"commonService.removeHtmlContentFromData\">\n <!-- <dxo-search-panel [highlightCaseSensitive]=\"true\"\n [visible]=\"tableConfig.searchPanel\"></dxo-search-panel>\n <dxo-export [enabled]=\"true\" fileName=\"{{tableConfig.file_name}}\"></dxo-export> -->\n <!-- <dxo-paging [pageSize]=\"tableConfig.numberOfRow\"></dxo-paging>\n <dxo-pager [showInfo]=\"tableConfig.pageInfo\" [showPageSizeSelector]=\"true\"\n [allowedPageSizes]=\"tableConfig.allowedPageSizes\">\n </dxo-pager>\n <dxo-load-panel [enabled]=\"true\">\n </dxo-load-panel> -->\n <ng-container *ngFor=\"let item of argumentValue\">\n <dxi-column *ngIf=\"item.dataField == 'recordDate'\" dataField=\"{{ item.dataField }}\"\n [caption]=\"item.caption\" [visible]=\"item.visible\" sortOrder=\"desc\"></dxi-column>\n <dxi-column *ngIf=\"item.dataField !== 'recordDate'\" format=\"#,##0.##\" [caption]=\"item.caption\"\n [sortingMethod]=\"commonService.customValueSorter\" dataField=\"{{ item.dataField }}\"\n alignment=\"left\" [visible]=\"item.visible\">\n </dxi-column>\n </ng-container>\n <ng-container *ngFor=\"let item of dataConfig\">\n <dxi-column cellTemplate=\"{{ item.dataField }}\" dataField=\"{{ item.dataField }}\" alignment=\"right\"\n [sortingMethod]=\"commonService.customValueSorterForBar\"></dxi-column>\n </ng-container>\n <ng-container *ngFor=\"let item of dataConfig\">\n <div *dxTemplate=\"let data of item.dataField\">\n <div [innerHTML]=\"data.value | contentSafeHtml\"></div>\n </div>\n </ng-container>\n </dx-data-grid>\n </ng-container>\n\n </div>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i6.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "customizeExportData", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "focusStateEnabled", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExported", "onExporting", "onFileSaving", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "customizeExportDataChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "focusStateEnabledChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i7.DxiColumnComponent, selector: "dxi-column", inputs: ["alignment", "allowEditing", "allowExporting", "allowFiltering", "allowFixing", "allowGrouping", "allowHeaderFiltering", "allowHiding", "allowReordering", "allowResizing", "allowSearch", "allowSorting", "autoExpandGroup", "buttons", "calculateCellValue", "calculateDisplayValue", "calculateFilterExpression", "calculateGroupValue", "calculateSortValue", "caption", "cellTemplate", "columns", "cssClass", "customizeText", "dataField", "dataType", "editCellTemplate", "editorOptions", "encodeHtml", "falseText", "filterOperations", "filterType", "filterValue", "filterValues", "fixed", "fixedPosition", "format", "formItem", "groupCellTemplate", "groupIndex", "headerCellTemplate", "headerFilter", "hidingPriority", "isBand", "lookup", "minWidth", "name", "ownerBand", "renderAsync", "selectedFilterOperation", "setCellValue", "showEditorAlways", "showInColumnChooser", "showWhenGrouped", "sortIndex", "sortingMethod", "sortOrder", "trueText", "type", "validationRules", "visible", "visibleIndex", "width"], outputs: ["filterValueChange", "filterValuesChange", "groupIndexChange", "selectedFilterOperationChange", "sortIndexChange", "sortOrderChange", "visibleChange", "visibleIndexChange"] }, { kind: "component", type: i8.LoaderComponent, selector: "app-loader" }, { kind: "pipe", type: i9.contentSafeHtml, name: "contentSafeHtml" }] });
|
|
139
|
+
GammaTableClumnBarChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: GammaTableClumnBarChartComponent, selector: "app-gamma-table-clumn-bar-chart", inputs: { rightClickEnable: "rightClickEnable", chartDataSource: "chartDataSource" }, outputs: { getTableConfigOutPut: "getTableConfigOutPut", oRowClick: "oRowClick", onrightClickContextSelection: "onrightClickContextSelection" }, ngImport: i0, template: "<div class=\"mx-2 bg-gray-800\">\n <ng-container *ngIf=\"isLoader\">\n <div class=\"flex justify-center items-start bg-gray-800 p-2\">\n <app-loader></app-loader>\n </div>\n </ng-container>\n\n <div class=\"mx-2 pb-2\">\n <ng-container *ngIf=\"!isLoader\">\n <dx-data-grid (onRowClick)=\"onRowClick($event)\" [dataSource]=\"percentageDataSource\"\n (onContextMenuPreparing)=\"addMenuItems($event)\" [rowAlternationEnabled]=\"true\" [height]=\"tableHeight\"\n [hoverStateEnabled]=\"true\" [selectedRowKeys]=\"[]\" [showBorders]=\"true\" [showColumnLines]=\"true\"\n [showRowLines]=\"true\" [showRowLines]=\"true\" id=\"gridContainer\"\n [customizeExportData]=\"commonService.removeHtmlContentFromData\">\n <!-- <dxo-search-panel [highlightCaseSensitive]=\"true\"\n [visible]=\"tableConfig.searchPanel\"></dxo-search-panel>\n <dxo-export [enabled]=\"true\" fileName=\"{{tableConfig.file_name}}\"></dxo-export> -->\n <!-- <dxo-paging [pageSize]=\"tableConfig.numberOfRow\"></dxo-paging>\n <dxo-pager [showInfo]=\"tableConfig.pageInfo\" [showPageSizeSelector]=\"true\"\n [allowedPageSizes]=\"tableConfig.allowedPageSizes\">\n </dxo-pager>\n <dxo-load-panel [enabled]=\"true\">\n </dxo-load-panel> -->\n <ng-container *ngFor=\"let item of argumentValue\">\n <dxi-column *ngIf=\"item.dataField == 'recordDate'\" dataField=\"{{ item.dataField }}\"\n [caption]=\"item.caption\" [visible]=\"item.visible\" sortOrder=\"desc\"></dxi-column>\n <dxi-column *ngIf=\"item.dataField !== 'recordDate'\" format=\"#,##0.##\" [caption]=\"item.caption\"\n [sortingMethod]=\"commonService.customValueSorter\" dataField=\"{{ item.dataField }}\"\n alignment=\"left\" [visible]=\"item.visible\">\n </dxi-column>\n </ng-container>\n <ng-container *ngFor=\"let item of dataConfig\">\n <dxi-column cellTemplate=\"{{ item.dataField }}\" dataField=\"{{ item.dataField }}\" alignment=\"right\"\n [sortingMethod]=\"commonService.customValueSorterForBar\"></dxi-column>\n </ng-container>\n <ng-container *ngFor=\"let item of dataConfig\">\n <div *dxTemplate=\"let data of item.dataField\">\n <div [innerHTML]=\"data.value | contentSafeHtml\"></div>\n </div>\n </ng-container>\n </dx-data-grid>\n </ng-container>\n\n </div>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i6.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "customizeExportData", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "focusStateEnabled", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExported", "onExporting", "onFileSaving", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "customizeExportDataChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "focusStateEnabledChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i7.DxiColumnComponent, selector: "dxi-column", inputs: ["alignment", "allowEditing", "allowExporting", "allowFiltering", "allowFixing", "allowGrouping", "allowHeaderFiltering", "allowHiding", "allowReordering", "allowResizing", "allowSearch", "allowSorting", "autoExpandGroup", "buttons", "calculateCellValue", "calculateDisplayValue", "calculateFilterExpression", "calculateGroupValue", "calculateSortValue", "caption", "cellTemplate", "columns", "cssClass", "customizeText", "dataField", "dataType", "editCellTemplate", "editorOptions", "encodeHtml", "falseText", "filterOperations", "filterType", "filterValue", "filterValues", "fixed", "fixedPosition", "format", "formItem", "groupCellTemplate", "groupIndex", "headerCellTemplate", "headerFilter", "hidingPriority", "isBand", "lookup", "minWidth", "name", "ownerBand", "renderAsync", "selectedFilterOperation", "setCellValue", "showEditorAlways", "showInColumnChooser", "showWhenGrouped", "sortIndex", "sortingMethod", "sortOrder", "trueText", "type", "validationRules", "visible", "visibleIndex", "width"], outputs: ["filterValueChange", "filterValuesChange", "groupIndexChange", "selectedFilterOperationChange", "sortIndexChange", "sortOrderChange", "visibleChange", "visibleIndexChange"] }, { kind: "component", type: i8.LoaderComponent, selector: "app-loader" }, { kind: "pipe", type: i9.contentSafeHtml, name: "contentSafeHtml" }] });
|
|
129
140
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GammaTableClumnBarChartComponent, decorators: [{
|
|
130
141
|
type: Component,
|
|
131
|
-
args: [{ selector: 'app-gamma-table-clumn-bar-chart', template: "<div class=\"mx-2 bg-gray-800\">\n <ng-container *ngIf=\"isLoader\">\n <div class=\"flex justify-center items-start bg-gray-800 p-2\">\n <app-loader></app-loader>\n </div>\n </ng-container>\n\n <div class=\"mx-2 pb-2\">\n <ng-container *ngIf=\"!isLoader\">\n <dx-data-grid (onRowClick)=\"onRowClick($event)\" [dataSource]=\"percentageDataSource\"\n (onContextMenuPreparing)=\"addMenuItems($event)\" [rowAlternationEnabled]=\"true\"\n [hoverStateEnabled]=\"true\" [selectedRowKeys]=\"[]\" [showBorders]=\"true\" [showColumnLines]=\"true\"\n [showRowLines]=\"true\" [showRowLines]=\"true\" id=\"gridContainer\"\n [customizeExportData]=\"commonService.removeHtmlContentFromData\">\n <!-- <dxo-search-panel [highlightCaseSensitive]=\"true\"\n [visible]=\"tableConfig.searchPanel\"></dxo-search-panel>\n <dxo-export [enabled]=\"true\" fileName=\"{{tableConfig.file_name}}\"></dxo-export> -->\n <!-- <dxo-paging [pageSize]=\"tableConfig.numberOfRow\"></dxo-paging>\n <dxo-pager [showInfo]=\"tableConfig.pageInfo\" [showPageSizeSelector]=\"true\"\n [allowedPageSizes]=\"tableConfig.allowedPageSizes\">\n </dxo-pager>\n <dxo-load-panel [enabled]=\"true\">\n </dxo-load-panel> -->\n <ng-container *ngFor=\"let item of argumentValue\">\n <dxi-column *ngIf=\"item.dataField == 'recordDate'\" dataField=\"{{ item.dataField }}\"\n [caption]=\"item.caption\" [visible]=\"item.visible\" sortOrder=\"desc\"></dxi-column>\n <dxi-column *ngIf=\"item.dataField !== 'recordDate'\" format=\"#,##0.##\" [caption]=\"item.caption\"\n [sortingMethod]=\"commonService.customValueSorter\" dataField=\"{{ item.dataField }}\"\n alignment=\"left\" [visible]=\"item.visible\">\n </dxi-column>\n </ng-container>\n <ng-container *ngFor=\"let item of dataConfig\">\n <dxi-column cellTemplate=\"{{ item.dataField }}\" dataField=\"{{ item.dataField }}\" alignment=\"right\"\n [sortingMethod]=\"commonService.customValueSorterForBar\"></dxi-column>\n </ng-container>\n <ng-container *ngFor=\"let item of dataConfig\">\n <div *dxTemplate=\"let data of item.dataField\">\n <div [innerHTML]=\"data.value | contentSafeHtml\"></div>\n </div>\n </ng-container>\n </dx-data-grid>\n </ng-container>\n\n </div>\n</div>" }]
|
|
142
|
+
args: [{ selector: 'app-gamma-table-clumn-bar-chart', template: "<div class=\"mx-2 bg-gray-800\">\n <ng-container *ngIf=\"isLoader\">\n <div class=\"flex justify-center items-start bg-gray-800 p-2\">\n <app-loader></app-loader>\n </div>\n </ng-container>\n\n <div class=\"mx-2 pb-2\">\n <ng-container *ngIf=\"!isLoader\">\n <dx-data-grid (onRowClick)=\"onRowClick($event)\" [dataSource]=\"percentageDataSource\"\n (onContextMenuPreparing)=\"addMenuItems($event)\" [rowAlternationEnabled]=\"true\" [height]=\"tableHeight\"\n [hoverStateEnabled]=\"true\" [selectedRowKeys]=\"[]\" [showBorders]=\"true\" [showColumnLines]=\"true\"\n [showRowLines]=\"true\" [showRowLines]=\"true\" id=\"gridContainer\"\n [customizeExportData]=\"commonService.removeHtmlContentFromData\">\n <!-- <dxo-search-panel [highlightCaseSensitive]=\"true\"\n [visible]=\"tableConfig.searchPanel\"></dxo-search-panel>\n <dxo-export [enabled]=\"true\" fileName=\"{{tableConfig.file_name}}\"></dxo-export> -->\n <!-- <dxo-paging [pageSize]=\"tableConfig.numberOfRow\"></dxo-paging>\n <dxo-pager [showInfo]=\"tableConfig.pageInfo\" [showPageSizeSelector]=\"true\"\n [allowedPageSizes]=\"tableConfig.allowedPageSizes\">\n </dxo-pager>\n <dxo-load-panel [enabled]=\"true\">\n </dxo-load-panel> -->\n <ng-container *ngFor=\"let item of argumentValue\">\n <dxi-column *ngIf=\"item.dataField == 'recordDate'\" dataField=\"{{ item.dataField }}\"\n [caption]=\"item.caption\" [visible]=\"item.visible\" sortOrder=\"desc\"></dxi-column>\n <dxi-column *ngIf=\"item.dataField !== 'recordDate'\" format=\"#,##0.##\" [caption]=\"item.caption\"\n [sortingMethod]=\"commonService.customValueSorter\" dataField=\"{{ item.dataField }}\"\n alignment=\"left\" [visible]=\"item.visible\">\n </dxi-column>\n </ng-container>\n <ng-container *ngFor=\"let item of dataConfig\">\n <dxi-column cellTemplate=\"{{ item.dataField }}\" dataField=\"{{ item.dataField }}\" alignment=\"right\"\n [sortingMethod]=\"commonService.customValueSorterForBar\"></dxi-column>\n </ng-container>\n <ng-container *ngFor=\"let item of dataConfig\">\n <div *dxTemplate=\"let data of item.dataField\">\n <div [innerHTML]=\"data.value | contentSafeHtml\"></div>\n </div>\n </ng-container>\n </dx-data-grid>\n </ng-container>\n\n </div>\n</div>" }]
|
|
132
143
|
}], ctorParameters: function () { return [{ type: i1.CommonService }, { type: i2.ToastrService }, { type: i3.DomSanitizer }]; }, propDecorators: { getTableConfigOutPut: [{
|
|
133
144
|
type: Output
|
|
134
145
|
}], oRowClick: [{
|
|
@@ -141,4 +152,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
141
152
|
type: Input,
|
|
142
153
|
args: ['chartDataSource']
|
|
143
154
|
}] } });
|
|
144
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtbWEtdGFibGUtY2x1bW4tYmFyLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvYXBwbGljYXRpb24tY29udHJvbGxlci9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2dhbW1hLXRhYmxlLWNsdW1uLWJhci1jaGFydC9nYW1tYS10YWJsZS1jbHVtbi1iYXItY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtdGFibGUtY2x1bW4tYmFyLWNoYXJ0L2dhbW1hLXRhYmxlLWNsdW1uLWJhci1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9FLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQzs7Ozs7Ozs7Ozs7QUFTNUIsTUFBTSxPQUFPLGdDQUFnQztJQXdFM0MsWUFDUyxhQUE0QixFQUMzQixNQUFxQixFQUNyQixTQUF1QjtRQUZ4QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUMzQixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFqRWhCLHlCQUFvQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzdELGNBQVMsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsRCxpQ0FBNEIsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM3RSxxQkFBZ0IsR0FBWSxJQUFJLENBQUM7UUEwRDFDLG9CQUFlLEdBQVEsRUFB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QUMvQixhQUFhLEVBQUUsU0FBUztvQ0FDeEIsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTTtvQ0FDdEMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxNQUFNO2lDQUU1QixDQUFBO2dDQUNELElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUE7NEJBQ3hELENBQUM7eUJBQ0YsQ0FBQyxDQUFDO3FCQUNKO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtJQUNILENBQUM7OzZIQW5MVSxnQ0FBZ0M7aUhBQWhDLGdDQUFnQyw4U0NYN0Msa3RGQTRDTTsyRkRqQ08sZ0NBQWdDO2tCQUw1QyxTQUFTOytCQUNFLGlDQUFpQzsySkFjMUIsb0JBQW9CO3NCQUFwQyxNQUFNO2dCQUNVLFNBQVM7c0JBQXpCLE1BQU07Z0JBQ1UsNEJBQTRCO3NCQUE1QyxNQUFNO2dCQUNFLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFRixlQUFlO3NCQURsQixLQUFLO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1nYW1tYS10YWJsZS1jbHVtbi1iYXItY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2FtbWEtdGFibGUtY2x1bW4tYmFyLWNoYXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ2FtbWEtdGFibGUtY2x1bW4tYmFyLWNoYXJ0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgR2FtbWFUYWJsZUNsdW1uQmFyQ2hhcnRDb21wb25lbnQge1xuICBkYXRhQ29uZmlnOiBhbnk7XG4gIGFyZ3VtZW50VmFsdWU6IGFueTtcbiAgcGVyY2VudGFnZURhdGFTb3VyY2U6IGFueTtcbiAgdGFibGVDb25maWc6IGFueTtcbiAgcGFnZV9jb25maWc6IGFueTtcbiAgcGFnZV9wYXJtczogYW55O1xuXG4gIGlzTG9hZGVyOiBib29sZWFuXG4gIGN1cnJlbnREYXRlRGF0YVxuICBAT3V0cHV0KCkgcHVibGljIGdldFRhYmxlQ29uZmlnT3V0UHV0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBvUm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIG9ucmlnaHRDbGlja0NvbnRleHRTZWxlY3Rpb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKSByaWdodENsaWNrRW5hYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCdjaGFydERhdGFTb3VyY2UnKVxuICBzZXQgY2hhcnREYXRhU291cmNlKHZhbHVlKSB7XG4gICAgLy8gZGVidWdnZXJcbiAgICAvLyBjb25zb2xlLmxvZyh2YWx1ZSk7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNMb2FkZXIgPSB0cnVlO1xuICAgICAgdGhpcy5wYWdlX2NvbmZpZyA9IHZhbHVlO1xuICAgICAgdGhpcy5wYWdlX3Bhcm1zID0gdmFsdWUudGl0bGVQYXJhbXM7XG4gICAgICBpZiAodmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UgJiYgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UubGVuZ3RoICE9PSAwKSB7XG5cblxuXG4gICAgICAgIHRoaXMudGFibGVDb25maWcgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZztcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNvbHVtbnM7XG5cblxuXG4gICAgICAgIGxldCBtYWluRGF0YXNvdXJjZTogYW55O1xuXG4gICAgICAgIGxldCB0YWJsZUNvbHVtbnMgPSAodmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuY29sdW1ucykgPyB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5jb2x1bW5zIDogW107XG4gICAgICAgIGlmICh0YWJsZUNvbHVtbnMgJiYgdGFibGVDb2x1bW5zLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZS5tYXAob2JqID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld09iaiA9IHsgLi4ub2JqIH07XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhuZXdPYmopLmZvckVhY2goa2V5ID0+IHtcblxuICAgICAgICAgICAgICAvLyBjb25zdCBmb3VuZE1hdGNoT2JqZWN0ID0gdGFibGVDb2x1bW5zLmZpbmQob2JqID0+IG9iai5kYXRhRmllbGQgPT09IGtleSk7XG4gICAgICAgICAgICAgIC8vIGlmIChmb3VuZE1hdGNoT2JqZWN0KSB7XG4gICAgICAgICAgICAgIC8vICAgaWYgKGZvdW5kTWF0Y2hPYmplY3QuZW5yaWNoTmFtZSAmJiBmb3VuZE1hdGNoT2JqZWN0LmVucmljaE5hbWUgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgLy8gICAgIGNvbnNvbGUubG9nKGZvdW5kTWF0Y2hPYmplY3QuZW5yaWNoTmFtZSk7XG4gICAgICAgICAgICAgIC8vICAgICBuZXdPYmpba2V5XSA9IHRoaXMuY2FsbFNlcnZpY2VGdW5jdGlvbihmb3VuZE1hdGNoT2JqZWN0LmVucmljaE5hbWUsIG5ld09ialtrZXldKVxuICAgICAgICAgICAgICAvLyAgIH1cbiAgICAgICAgICAgICAgLy8gfVxuXG5cbiAgICAgICAgICAgICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdkYXRlJykgJiYgbmV3T2JqW2tleV0pIHtcbiAgICAgICAgICAgICAgICBuZXdPYmpba2V5XSA9IG1vbWVudChuZXdPYmpba2V5XSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3T2JqO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMucGVyY2VudGFnZURhdGFTb3VyY2UgPSB0aGlzLmxvYWREYWlseU1zY1ZvaWNlVGFibGUoZGF0YVNvdXJjZSwgY29sdW1ucylcbiAgICAgICAgfVxuXG5cblxuXG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgIH1cblxuICAgIH1cbiAgfVxuXG5cbiAgdGFibGVEYXRhU291cmNlOiBhbnkgPSBbXTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplclxuICApIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuXG4gIH1cblxuXG5cbiAgbG9hZERhaWx5TXNjVm9pY2VUYWJsZShkYXRhOiBhbnlbXSwgZGF0YWNvbHVtbnM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5hcmd1bWVudFZhbHVlID0gZGF0YWNvbHVtbnMuZmlsdGVyKFxuICAgICAgKGNvbHVtbjogYW55KSA9PiBjb2x1bW4uaXNTaG93QmFyID09IGZhbHNlXG4gICAgKTtcbiAgICB0aGlzLmRhdGFDb25maWcgPSBkYXRhY29sdW1ucy5maWx0ZXIoXG4gICAgICAoY29sdW1uOiBhbnkpID0+IGNvbHVtbi5pc1Nob3dCYXIgPT0gdHJ1ZVxuICAgICk7XG4gICAgbGV0IGtleXMgPSB0aGlzLmRhdGFDb25maWc7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgbGV0IGZpbmFsRGF0YXNvdXJjZSA9IFtdO1xuICAgIGRhdGEuZm9yRWFjaCgoZWxlbWVudE9uZSkgPT4ge1xuICAgICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gZGF0YS5tYXAoXG4gICAgICAgICAgKGl0ZW0pID0+IHBhcnNlRmxvYXQoaXRlbVtrZXlbJ2RhdGFGaWVsZCddXSkgfHwgMFxuICAgICAgICApOyAvLyBQYXJzZSBudW1iZXJzIHNhZmVseVxuICAgICAgICBjb25zdCBtYXhWYWx1ZSA9IE1hdGgubWF4KC4uLnZhbHVlcyk7XG4gICAgICAgIGNvbnN0IG1pblZhbHVlID0gTWF0aC5taW4oLi4udmFsdWVzKTtcbiAgICAgICAgcmVzdWx0W2tleVsnZGF0YUZpZWxkJ11dID0geyBtYXhWYWx1ZSwgbWluVmFsdWUgfTtcbiAgICAgIH0pO1xuICAgICAgbGV0IG9iaiA9IHt9O1xuICAgICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgbGV0IHdpZHRoVmFsID0gdGhpcy5jb21tb25TZXJ2aWNlLnNjYWxlTnVtYmVyKFxuICAgICAgICAgIHBhcnNlRmxvYXQoZWxlbWVudE9uZVtrZXlbJ2RhdGFGaWVsZCddXSksXG4gICAgICAgICAgcmVzdWx0W2tleVsnZGF0YUZpZWxkJ11dWydtaW5WYWx1ZSddLFxuICAgICAgICAgIHJlc3VsdFtrZXlbJ2RhdGFGaWVsZCddXVsnbWF4VmFsdWUnXSxcbiAgICAgICAgICAxMCxcbiAgICAgICAgICA3NVxuICAgICAgICApO1xuICAgICAgICBsZXQgQmFyID0gdGhpcy5jb21tb25TZXJ2aWNlLmNyZWF0ZUh0bWwoXG4gICAgICAgICAgd2lkdGhWYWwsXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlLnJlZm9ybWF0TnVtYmVyV2l0aFRob3VzYW5kU2VwYXJhdG9yKFxuICAgICAgICAgICAgZWxlbWVudE9uZVtrZXlbJ2RhdGFGaWVsZCddXVxuICAgICAgICAgICksXG4gICAgICAgICAga2V5Wydjb2xvciddXG4gICAgICAgICk7XG4gICAgICAgIG9ialtrZXlbJ2RhdGFGaWVsZCddXSA9IEJhcjtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hcmd1bWVudFZhbHVlLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgb2JqW2VsZW1lbnQuZGF0YUZpZWxkXSA9IGVsZW1lbnRPbmVbZWxlbWVudC5kYXRhRmllbGRdO1xuXG5cbiAgICAgIH0pO1xuICAgICAgZmluYWxEYXRhc291cmNlLnB1c2gob2JqKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZmluYWxEYXRhc291cmNlO1xuICB9XG5cblxuICBvblJvd0NsaWNrKGUpIHtcblxuICAgIGNvbnN0IHRpdGxlX3BhcmFtcyA9IGUuZGF0YVt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNvbW1vbkNvbmZpZ1snZGF0YUZpZWxkJ11dXG4gICAgbGV0IHRpdGxlID0gdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5jb21tb25Db25maWdbJ3RpdGxlJ10gKyB0aXRsZV9wYXJhbXM7XG4gICAgbGV0IG9iaiA9IHtcbiAgICAgIGRhdGE6IGUuZGF0YSxcbiAgICAgIGtleVRvUGFzczogdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcua2V5VG9QYXNzLFxuICAgICAgdGFibGVUaXRsZTogKHRoaXMucGFnZV9wYXJtcykgPyB0aGlzLnBhZ2VfcGFybXMgKyB0aXRsZSA6IHRpdGxlLFxuICAgICAgdmlld0lkOiB0aGlzLnBhZ2VfY29uZmlnLnZpZXdJZCxcbiAgICAgIGRyaWxsRG93blR5cGU6IFwibmF0dXJhbFwiLFxuICAgICAgZHJpbGxkb3duRnJvbTogdGhpcy5wYWdlX2NvbmZpZy52aWV3SWQsXG4gICAgICBkcmlsbGRvd25UbzogXCJcIixcbiAgICB9XG4gICAgdGhpcy5vUm93Q2xpY2suZW1pdChvYmopO1xuICB9XG5cbiAgYWRkTWVudUl0ZW1zKGUpIHtcblxuICAgIGNvbnN0IHRpdGxlX3BhcmFtcyA9IGUucm93LmRhdGFbdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5jb21tb25Db25maWdbJ2RhdGFGaWVsZCddXVxuICAgIGxldCB0aXRsZSA9IHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuY29tbW9uQ29uZmlnWyd0aXRsZSddICsgdGl0bGVfcGFyYW1zO1xuXG4gICAgaWYgKHRoaXMucmlnaHRDbGlja0VuYWJsZSAmJiBlLmNvbHVtbkluZGV4ID09IDApIHtcbiAgICAgIGlmIChlLnRhcmdldCA9PSAnY29udGVudCcpIHtcbiAgICAgICAgaWYgKCFlLml0ZW1zKSBlLml0ZW1zID0gW107XG5cbiAgICAgICAgdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuY29udGV4dE1lbnUuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmtleVRvUGFzcy5zb21lKGtleSA9PiBlbGVtZW50LmRpc3BsYXlLZXkuaW5jbHVkZXMoa2V5KSkpIHtcbiAgICAgICAgICAgIGUuaXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgIHRleHQ6IGVsZW1lbnQuZGlzcGxheUtleSxcbiAgICAgICAgICAgICAgb25JdGVtQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgcmlnaHRjbGlja0RhdGEgPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiBlLnJvdy5kYXRhLFxuICAgICAgICAgICAgICAgICAga2V5VG9QYXNzOiB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5rZXlUb1Bhc3MsXG4gICAgICAgICAgICAgICAgICB0YWJsZVRpdGxlOiAodGhpcy5wYWdlX3Bhcm1zKSA/IHRoaXMucGFnZV9wYXJtcyArIHRpdGxlIDogdGl0bGUsXG4gICAgICAgICAgICAgICAgICB2aWV3SWQ6IHRoaXMucGFnZV9jb25maWcudmlld0lkLFxuICAgICAgICAgICAgICAgICAgZHJpbGxEb3duVHlwZTogXCJjb250ZXh0XCIsXG4gICAgICAgICAgICAgICAgICBkcmlsbGRvd25Gcm9tOiB0aGlzLnBhZ2VfY29uZmlnLnZpZXdJZCxcbiAgICAgICAgICAgICAgICAgIGRyaWxsZG93blRvOiBlbGVtZW50LnZpZXdJZCxcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm9ucmlnaHRDbGlja0NvbnRleHRTZWxlY3Rpb24uZW1pdChyaWdodGNsaWNrRGF0YSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJteC0yIGJnLWdyYXktODAwXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTG9hZGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLXN0YXJ0IGJnLWdyYXktODAwIHAtMlwiPlxuICAgICAgICAgICAgPGFwcC1sb2FkZXI+PC9hcHAtbG9hZGVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxkaXYgY2xhc3M9XCJteC0yIHBiLTJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRlclwiPlxuICAgICAgICAgICAgPGR4LWRhdGEtZ3JpZCAob25Sb3dDbGljayk9XCJvblJvd0NsaWNrKCRldmVudClcIiBbZGF0YVNvdXJjZV09XCJwZXJjZW50YWdlRGF0YVNvdXJjZVwiXG4gICAgICAgICAgICAgICAgKG9uQ29udGV4dE1lbnVQcmVwYXJpbmcpPVwiYWRkTWVudUl0ZW1zKCRldmVudClcIiBbcm93QWx0ZXJuYXRpb25FbmFibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtob3ZlclN0YXRlRW5hYmxlZF09XCJ0cnVlXCIgW3NlbGVjdGVkUm93S2V5c109XCJbXVwiIFtzaG93Qm9yZGVyc109XCJ0cnVlXCIgW3Nob3dDb2x1bW5MaW5lc109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbc2hvd1Jvd0xpbmVzXT1cInRydWVcIiBbc2hvd1Jvd0xpbmVzXT1cInRydWVcIiBpZD1cImdyaWRDb250YWluZXJcIlxuICAgICAgICAgICAgICAgIFtjdXN0b21pemVFeHBvcnREYXRhXT1cImNvbW1vblNlcnZpY2UucmVtb3ZlSHRtbENvbnRlbnRGcm9tRGF0YVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gPGR4by1zZWFyY2gtcGFuZWwgW2hpZ2hsaWdodENhc2VTZW5zaXRpdmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFt2aXNpYmxlXT1cInRhYmxlQ29uZmlnLnNlYXJjaFBhbmVsXCI+PC9keG8tc2VhcmNoLXBhbmVsPlxuICAgICAgICAgICAgICAgIDxkeG8tZXhwb3J0IFtlbmFibGVkXT1cInRydWVcIiBmaWxlTmFtZT1cInt7dGFibGVDb25maWcuZmlsZV9uYW1lfX1cIj48L2R4by1leHBvcnQ+IC0tPlxuICAgICAgICAgICAgICAgIDwhLS0gPGR4by1wYWdpbmcgW3BhZ2VTaXplXT1cInRhYmxlQ29uZmlnLm51bWJlck9mUm93XCI+PC9keG8tcGFnaW5nPlxuICAgICAgICAgICAgICAgIDxkeG8tcGFnZXIgW3Nob3dJbmZvXT1cInRhYmxlQ29uZmlnLnBhZ2VJbmZvXCIgW3Nob3dQYWdlU2l6ZVNlbGVjdG9yXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbYWxsb3dlZFBhZ2VTaXplc109XCJ0YWJsZUNvbmZpZy5hbGxvd2VkUGFnZVNpemVzXCI+XG4gICAgICAgICAgICAgICAgPC9keG8tcGFnZXI+XG4gICAgICAgICAgICAgICAgPGR4by1sb2FkLXBhbmVsIFtlbmFibGVkXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8L2R4by1sb2FkLXBhbmVsPiAtLT5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFyZ3VtZW50VmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gKm5nSWY9XCJpdGVtLmRhdGFGaWVsZCA9PSAncmVjb3JkRGF0ZSdcIiBkYXRhRmllbGQ9XCJ7eyBpdGVtLmRhdGFGaWVsZCB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2FwdGlvbl09XCJpdGVtLmNhcHRpb25cIiBbdmlzaWJsZV09XCJpdGVtLnZpc2libGVcIiBzb3J0T3JkZXI9XCJkZXNjXCI+PC9keGktY29sdW1uPlxuICAgICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiAqbmdJZj1cIml0ZW0uZGF0YUZpZWxkICE9PSAncmVjb3JkRGF0ZSdcIiBmb3JtYXQ9XCIjLCMjMC4jI1wiIFtjYXB0aW9uXT1cIml0ZW0uY2FwdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc29ydGluZ01ldGhvZF09XCJjb21tb25TZXJ2aWNlLmN1c3RvbVZhbHVlU29ydGVyXCIgZGF0YUZpZWxkPVwie3sgaXRlbS5kYXRhRmllbGQgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50PVwibGVmdFwiIFt2aXNpYmxlXT1cIml0ZW0udmlzaWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2R4aS1jb2x1bW4+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkYXRhQ29uZmlnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGNlbGxUZW1wbGF0ZT1cInt7IGl0ZW0uZGF0YUZpZWxkIH19XCIgZGF0YUZpZWxkPVwie3sgaXRlbS5kYXRhRmllbGQgfX1cIiBhbGlnbm1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc29ydGluZ01ldGhvZF09XCJjb21tb25TZXJ2aWNlLmN1c3RvbVZhbHVlU29ydGVyRm9yQmFyXCI+PC9keGktY29sdW1uPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YUNvbmZpZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGRhdGEgb2YgIGl0ZW0uZGF0YUZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpbm5lckhUTUxdPVwiZGF0YS52YWx1ZSB8IGNvbnRlbnRTYWZlSHRtbFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZHgtZGF0YS1ncmlkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwvZGl2PlxuPC9kaXY+Il19
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtbWEtdGFibGUtY2x1bW4tYmFyLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvYXBwbGljYXRpb24tY29udHJvbGxlci9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2dhbW1hLXRhYmxlLWNsdW1uLWJhci1jaGFydC9nYW1tYS10YWJsZS1jbHVtbi1iYXItY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtdGFibGUtY2x1bW4tYmFyLWNoYXJ0L2dhbW1hLXRhYmxlLWNsdW1uLWJhci1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9FLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQzs7Ozs7Ozs7Ozs7QUFTNUIsTUFBTSxPQUFPLGdDQUFnQztJQTJFM0MsWUFDUyxhQUE0QixFQUMzQixNQUFxQixFQUNyQixTQUF1QjtRQUZ4QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUMzQixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFuRWhCLHlCQUFvQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzdELGNBQVMsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsRCxpQ0FBNEIsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM3RSxxQkFBZ0IsR0FBWSxJQUFJLENBQUM7UUE0RDFDLG9CQUFlLEdBQVEsRUFB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QkFEbEIsS0FBSzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZ2FtbWEtdGFibGUtY2x1bW4tYmFyLWNoYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dhbW1hLXRhYmxlLWNsdW1uLWJhci1jaGFydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dhbW1hLXRhYmxlLWNsdW1uLWJhci1jaGFydC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEdhbW1hVGFibGVDbHVtbkJhckNoYXJ0Q29tcG9uZW50IHtcbiAgZGF0YUNvbmZpZzogYW55O1xuICBhcmd1bWVudFZhbHVlOiBhbnk7XG4gIHBlcmNlbnRhZ2VEYXRhU291cmNlOiBhbnk7XG4gIHRhYmxlQ29uZmlnOiBhbnk7XG4gIHBhZ2VfY29uZmlnOiBhbnk7XG4gIHBhZ2VfcGFybXM6IGFueTtcbiAgdGFibGVIZWlnaHQ6IGFueTtcblxuICBpc0xvYWRlcjogYm9vbGVhblxuICBjdXJyZW50RGF0ZURhdGFcbiAgQE91dHB1dCgpIHB1YmxpYyBnZXRUYWJsZUNvbmZpZ091dFB1dDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgb1Jvd0NsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBvbnJpZ2h0Q2xpY2tDb250ZXh0U2VsZWN0aW9uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQElucHV0KCkgcmlnaHRDbGlja0VuYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgnY2hhcnREYXRhU291cmNlJylcbiAgc2V0IGNoYXJ0RGF0YVNvdXJjZSh2YWx1ZSkge1xuICAgIC8vIGRlYnVnZ2VyXG4gICAgLy8gY29uc29sZS5sb2codmFsdWUpO1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMucGFnZV9jb25maWcgPSB2YWx1ZTtcbiAgICAgIHRoaXMucGFnZV9wYXJtcyA9IHZhbHVlLnRpdGxlUGFyYW1zO1xuICAgICAgdGhpcy50YWJsZUhlaWdodCA9ICh2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy50YWJsZUhlaWdodCAmJiB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy50YWJsZUhlaWdodCAhPT0gXCJcIik/IHRoaXMuc2V0VGFibGVIZWlnaHQodmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcudGFibGVIZWlnaHQpOidhdXRvJztcblxuICAgICAgaWYgKHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlICYmIHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlLmxlbmd0aCAhPT0gMCkge1xuXG5cblxuICAgICAgICB0aGlzLnRhYmxlQ29uZmlnID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWc7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5jb2x1bW5zO1xuXG5cblxuICAgICAgICBsZXQgbWFpbkRhdGFzb3VyY2U6IGFueTtcblxuICAgICAgICBsZXQgdGFibGVDb2x1bW5zID0gKHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNvbHVtbnMpID8gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuY29sdW1ucyA6IFtdO1xuICAgICAgICBpZiAodGFibGVDb2x1bW5zICYmIHRhYmxlQ29sdW1ucy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICBjb25zdCBkYXRhU291cmNlID0gdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UubWFwKG9iaiA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdPYmogPSB7IC4uLm9iaiB9O1xuICAgICAgICAgICAgT2JqZWN0LmtleXMobmV3T2JqKS5mb3JFYWNoKGtleSA9PiB7XG5cbiAgICAgICAgICAgICAgLy8gY29uc3QgZm91bmRNYXRjaE9iamVjdCA9IHRhYmxlQ29sdW1ucy5maW5kKG9iaiA9PiBvYmouZGF0YUZpZWxkID09PSBrZXkpO1xuICAgICAgICAgICAgICAvLyBpZiAoZm91bmRNYXRjaE9iamVjdCkge1xuICAgICAgICAgICAgICAvLyAgIGlmIChmb3VuZE1hdGNoT2JqZWN0LmVucmljaE5hbWUgJiYgZm91bmRNYXRjaE9iamVjdC5lbnJpY2hOYW1lICE9PSBcIlwiKSB7XG4gICAgICAgICAgICAgIC8vICAgICBjb25zb2xlLmxvZyhmb3VuZE1hdGNoT2JqZWN0LmVucmljaE5hbWUpO1xuICAgICAgICAgICAgICAvLyAgICAgbmV3T2JqW2tleV0gPSB0aGlzLmNhbGxTZXJ2aWNlRnVuY3Rpb24oZm91bmRNYXRjaE9iamVjdC5lbnJpY2hOYW1lLCBuZXdPYmpba2V5XSlcbiAgICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgICAgIC8vIH1cblxuXG4gICAgICAgICAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZGF0ZScpICYmIG5ld09ialtrZXldKSB7XG4gICAgICAgICAgICAgICAgbmV3T2JqW2tleV0gPSBtb21lbnQobmV3T2JqW2tleV0pLmZvcm1hdChcIllZWVktTU0tRERcIik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ld09iajtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnBlcmNlbnRhZ2VEYXRhU291cmNlID0gdGhpcy5sb2FkRGFpbHlNc2NWb2ljZVRhYmxlKGRhdGFTb3VyY2UsIGNvbHVtbnMpXG4gICAgICAgIH1cblxuXG5cblxuICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICB9XG5cbiAgICB9XG4gIH1cblxuXG4gIHRhYmxlRGF0YVNvdXJjZTogYW55ID0gW107XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXJcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcblxuICB9XG5cblxuXG4gIGxvYWREYWlseU1zY1ZvaWNlVGFibGUoZGF0YTogYW55W10sIGRhdGFjb2x1bW5zOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuYXJndW1lbnRWYWx1ZSA9IGRhdGFjb2x1bW5zLmZpbHRlcihcbiAgICAgIChjb2x1bW46IGFueSkgPT4gY29sdW1uLmlzU2hvd0JhciA9PSBmYWxzZVxuICAgICk7XG4gICAgdGhpcy5kYXRhQ29uZmlnID0gZGF0YWNvbHVtbnMuZmlsdGVyKFxuICAgICAgKGNvbHVtbjogYW55KSA9PiBjb2x1bW4uaXNTaG93QmFyID09IHRydWVcbiAgICApO1xuICAgIGxldCBrZXlzID0gdGhpcy5kYXRhQ29uZmlnO1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGxldCBmaW5hbERhdGFzb3VyY2UgPSBbXTtcbiAgICBkYXRhLmZvckVhY2goKGVsZW1lbnRPbmUpID0+IHtcbiAgICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGRhdGEubWFwKFxuICAgICAgICAgIChpdGVtKSA9PiBwYXJzZUZsb2F0KGl0ZW1ba2V5WydkYXRhRmllbGQnXV0pIHx8IDBcbiAgICAgICAgKTsgLy8gUGFyc2UgbnVtYmVycyBzYWZlbHlcbiAgICAgICAgY29uc3QgbWF4VmFsdWUgPSBNYXRoLm1heCguLi52YWx1ZXMpO1xuICAgICAgICBjb25zdCBtaW5WYWx1ZSA9IE1hdGgubWluKC4uLnZhbHVlcyk7XG4gICAgICAgIHJlc3VsdFtrZXlbJ2RhdGFGaWVsZCddXSA9IHsgbWF4VmFsdWUsIG1pblZhbHVlIH07XG4gICAgICB9KTtcbiAgICAgIGxldCBvYmogPSB7fTtcbiAgICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGxldCB3aWR0aFZhbCA9IHRoaXMuY29tbW9uU2VydmljZS5zY2FsZU51bWJlcihcbiAgICAgICAgICBwYXJzZUZsb2F0KGVsZW1lbnRPbmVba2V5WydkYXRhRmllbGQnXV0pLFxuICAgICAgICAgIHJlc3VsdFtrZXlbJ2RhdGFGaWVsZCddXVsnbWluVmFsdWUnXSxcbiAgICAgICAgICByZXN1bHRba2V5WydkYXRhRmllbGQnXV1bJ21heFZhbHVlJ10sXG4gICAgICAgICAgMTAsXG4gICAgICAgICAgNzVcbiAgICAgICAgKTtcbiAgICAgICAgbGV0IEJhciA9IHRoaXMuY29tbW9uU2VydmljZS5jcmVhdGVIdG1sKFxuICAgICAgICAgIHdpZHRoVmFsLFxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZS5yZWZvcm1hdE51bWJlcldpdGhUaG91c2FuZFNlcGFyYXRvcihcbiAgICAgICAgICAgIGVsZW1lbnRPbmVba2V5WydkYXRhRmllbGQnXV1cbiAgICAgICAgICApLFxuICAgICAgICAgIGtleVsnY29sb3InXVxuICAgICAgICApO1xuICAgICAgICBvYmpba2V5WydkYXRhRmllbGQnXV0gPSBCYXI7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuYXJndW1lbnRWYWx1ZS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIG9ialtlbGVtZW50LmRhdGFGaWVsZF0gPSBlbGVtZW50T25lW2VsZW1lbnQuZGF0YUZpZWxkXTtcblxuXG4gICAgICB9KTtcbiAgICAgIGZpbmFsRGF0YXNvdXJjZS5wdXNoKG9iaik7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpbmFsRGF0YXNvdXJjZTtcbiAgfVxuXG5cbiAgb25Sb3dDbGljayhlKSB7XG5cbiAgICBjb25zdCB0aXRsZV9wYXJhbXMgPSBlLmRhdGFbdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5jb21tb25Db25maWdbJ2RhdGFGaWVsZCddXVxuICAgIGxldCB0aXRsZSA9IHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuY29tbW9uQ29uZmlnWyd0aXRsZSddICsgdGl0bGVfcGFyYW1zO1xuICAgIGxldCBvYmogPSB7XG4gICAgICBkYXRhOiBlLmRhdGEsXG4gICAgICBrZXlUb1Bhc3M6IHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmtleVRvUGFzcyxcbiAgICAgIHRhYmxlVGl0bGU6ICh0aGlzLnBhZ2VfcGFybXMpID8gdGhpcy5wYWdlX3Bhcm1zICsgdGl0bGUgOiB0aXRsZSxcbiAgICAgIHZpZXdJZDogdGhpcy5wYWdlX2NvbmZpZy52aWV3SWQsXG4gICAgICBkcmlsbERvd25UeXBlOiBcIm5hdHVyYWxcIixcbiAgICAgIGRyaWxsZG93bkZyb206IHRoaXMucGFnZV9jb25maWcudmlld0lkLFxuICAgICAgZHJpbGxkb3duVG86IFwiXCIsXG4gICAgfVxuICAgIHRoaXMub1Jvd0NsaWNrLmVtaXQob2JqKTtcbiAgfVxuXG4gIGFkZE1lbnVJdGVtcyhlKSB7XG5cbiAgICBjb25zdCB0aXRsZV9wYXJhbXMgPSBlLnJvdy5kYXRhW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuY29tbW9uQ29uZmlnWydkYXRhRmllbGQnXV1cbiAgICBsZXQgdGl0bGUgPSB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNvbW1vbkNvbmZpZ1sndGl0bGUnXSArIHRpdGxlX3BhcmFtcztcblxuICAgIGlmICh0aGlzLnJpZ2h0Q2xpY2tFbmFibGUgJiYgZS5jb2x1bW5JbmRleCA9PSAwKSB7XG4gICAgICBpZiAoZS50YXJnZXQgPT0gJ2NvbnRlbnQnKSB7XG4gICAgICAgIGlmICghZS5pdGVtcykgZS5pdGVtcyA9IFtdO1xuXG4gICAgICAgIHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmNvbnRleHRNZW51LmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5rZXlUb1Bhc3Muc29tZShrZXkgPT4gZWxlbWVudC5kaXNwbGF5S2V5LmluY2x1ZGVzKGtleSkpKSB7XG4gICAgICAgICAgICBlLml0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICB0ZXh0OiBlbGVtZW50LmRpc3BsYXlLZXksXG4gICAgICAgICAgICAgIG9uSXRlbUNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHJpZ2h0Y2xpY2tEYXRhID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogZS5yb3cuZGF0YSxcbiAgICAgICAgICAgICAgICAgIGtleVRvUGFzczogdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcua2V5VG9QYXNzLFxuICAgICAgICAgICAgICAgICAgdGFibGVUaXRsZTogKHRoaXMucGFnZV9wYXJtcykgPyB0aGlzLnBhZ2VfcGFybXMgKyB0aXRsZSA6IHRpdGxlLFxuICAgICAgICAgICAgICAgICAgdmlld0lkOiB0aGlzLnBhZ2VfY29uZmlnLnZpZXdJZCxcbiAgICAgICAgICAgICAgICAgIGRyaWxsRG93blR5cGU6IFwiY29udGV4dFwiLFxuICAgICAgICAgICAgICAgICAgZHJpbGxkb3duRnJvbTogdGhpcy5wYWdlX2NvbmZpZy52aWV3SWQsXG4gICAgICAgICAgICAgICAgICBkcmlsbGRvd25UbzogZWxlbWVudC52aWV3SWQsXG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5vbnJpZ2h0Q2xpY2tDb250ZXh0U2VsZWN0aW9uLmVtaXQocmlnaHRjbGlja0RhdGEpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0VGFibGVIZWlnaHQodmFsdWU6IGFueSk6IGFueSB7XG4gIFxuICAgIGNvbnN0IHRhYmxlSGVpZ2h0ID0gdmFsdWU7XG4gICAgaWYgKHRhYmxlSGVpZ2h0ID09PSAnYXV0bycpIHtcbiAgICAgIHJldHVybiAnYXV0byc7XG4gICAgfVxuICAgICAgY29uc3QgcGFyc2VkSGVpZ2h0ID0gTnVtYmVyKHRhYmxlSGVpZ2h0KTtcbiAgICBpZiAoIWlzTmFOKHBhcnNlZEhlaWdodCkgJiYgcGFyc2VkSGVpZ2h0ID4gMCkge1xuICAgICAgcmV0dXJuIHBhcnNlZEhlaWdodDtcbiAgICB9XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cIm14LTIgYmctZ3JheS04MDBcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNMb2FkZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtc3RhcnQgYmctZ3JheS04MDAgcC0yXCI+XG4gICAgICAgICAgICA8YXBwLWxvYWRlcj48L2FwcC1sb2FkZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPGRpdiBjbGFzcz1cIm14LTIgcGItMlwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTG9hZGVyXCI+XG4gICAgICAgICAgICA8ZHgtZGF0YS1ncmlkIChvblJvd0NsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50KVwiIFtkYXRhU291cmNlXT1cInBlcmNlbnRhZ2VEYXRhU291cmNlXCJcbiAgICAgICAgICAgICAgICAob25Db250ZXh0TWVudVByZXBhcmluZyk9XCJhZGRNZW51SXRlbXMoJGV2ZW50KVwiIFtyb3dBbHRlcm5hdGlvbkVuYWJsZWRdPVwidHJ1ZVwiIFtoZWlnaHRdPVwidGFibGVIZWlnaHRcIlxuICAgICAgICAgICAgICAgIFtob3ZlclN0YXRlRW5hYmxlZF09XCJ0cnVlXCIgW3NlbGVjdGVkUm93S2V5c109XCJbXVwiIFtzaG93Qm9yZGVyc109XCJ0cnVlXCIgW3Nob3dDb2x1bW5MaW5lc109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbc2hvd1Jvd0xpbmVzXT1cInRydWVcIiBbc2hvd1Jvd0xpbmVzXT1cInRydWVcIiBpZD1cImdyaWRDb250YWluZXJcIlxuICAgICAgICAgICAgICAgIFtjdXN0b21pemVFeHBvcnREYXRhXT1cImNvbW1vblNlcnZpY2UucmVtb3ZlSHRtbENvbnRlbnRGcm9tRGF0YVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gPGR4by1zZWFyY2gtcGFuZWwgW2hpZ2hsaWdodENhc2VTZW5zaXRpdmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFt2aXNpYmxlXT1cInRhYmxlQ29uZmlnLnNlYXJjaFBhbmVsXCI+PC9keG8tc2VhcmNoLXBhbmVsPlxuICAgICAgICAgICAgICAgIDxkeG8tZXhwb3J0IFtlbmFibGVkXT1cInRydWVcIiBmaWxlTmFtZT1cInt7dGFibGVDb25maWcuZmlsZV9uYW1lfX1cIj48L2R4by1leHBvcnQ+IC0tPlxuICAgICAgICAgICAgICAgIDwhLS0gPGR4by1wYWdpbmcgW3BhZ2VTaXplXT1cInRhYmxlQ29uZmlnLm51bWJlck9mUm93XCI+PC9keG8tcGFnaW5nPlxuICAgICAgICAgICAgICAgIDxkeG8tcGFnZXIgW3Nob3dJbmZvXT1cInRhYmxlQ29uZmlnLnBhZ2VJbmZvXCIgW3Nob3dQYWdlU2l6ZVNlbGVjdG9yXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbYWxsb3dlZFBhZ2VTaXplc109XCJ0YWJsZUNvbmZpZy5hbGxvd2VkUGFnZVNpemVzXCI+XG4gICAgICAgICAgICAgICAgPC9keG8tcGFnZXI+XG4gICAgICAgICAgICAgICAgPGR4by1sb2FkLXBhbmVsIFtlbmFibGVkXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8L2R4by1sb2FkLXBhbmVsPiAtLT5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFyZ3VtZW50VmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gKm5nSWY9XCJpdGVtLmRhdGFGaWVsZCA9PSAncmVjb3JkRGF0ZSdcIiBkYXRhRmllbGQ9XCJ7eyBpdGVtLmRhdGFGaWVsZCB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2FwdGlvbl09XCJpdGVtLmNhcHRpb25cIiBbdmlzaWJsZV09XCJpdGVtLnZpc2libGVcIiBzb3J0T3JkZXI9XCJkZXNjXCI+PC9keGktY29sdW1uPlxuICAgICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiAqbmdJZj1cIml0ZW0uZGF0YUZpZWxkICE9PSAncmVjb3JkRGF0ZSdcIiBmb3JtYXQ9XCIjLCMjMC4jI1wiIFtjYXB0aW9uXT1cIml0ZW0uY2FwdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc29ydGluZ01ldGhvZF09XCJjb21tb25TZXJ2aWNlLmN1c3RvbVZhbHVlU29ydGVyXCIgZGF0YUZpZWxkPVwie3sgaXRlbS5kYXRhRmllbGQgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50PVwibGVmdFwiIFt2aXNpYmxlXT1cIml0ZW0udmlzaWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2R4aS1jb2x1bW4+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkYXRhQ29uZmlnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGNlbGxUZW1wbGF0ZT1cInt7IGl0ZW0uZGF0YUZpZWxkIH19XCIgZGF0YUZpZWxkPVwie3sgaXRlbS5kYXRhRmllbGQgfX1cIiBhbGlnbm1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc29ydGluZ01ldGhvZF09XCJjb21tb25TZXJ2aWNlLmN1c3RvbVZhbHVlU29ydGVyRm9yQmFyXCI+PC9keGktY29sdW1uPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YUNvbmZpZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGRhdGEgb2YgIGl0ZW0uZGF0YUZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpbm5lckhUTUxdPVwiZGF0YS52YWx1ZSB8IGNvbnRlbnRTYWZlSHRtbFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZHgtZGF0YS1ncmlkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwvZGl2PlxuPC9kaXY+Il19
|