ngx-rs-ant 1.5.0 → 1.5.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.
Files changed (27) hide show
  1. package/data-grid/data-grid.component.d.ts +26 -26
  2. package/data-grid/data-grid.factory.d.ts +1 -1
  3. package/data-grid/data-grid.module.d.ts +8 -8
  4. package/data-grid/data-grid.service.d.ts +2 -0
  5. package/data-grid/instance-link-template/instance-link-template.component.d.ts +21 -0
  6. package/data-grid/unit-info-template/unit-info-template.component.d.ts +2 -1
  7. package/data-grid/user-info-template/user-info-template.component.d.ts +2 -1
  8. package/esm2020/data-detail/data-detail.component.mjs +5 -1
  9. package/esm2020/data-grid/data-grid.component.mjs +78 -44
  10. package/esm2020/data-grid/data-grid.factory.mjs +13 -17
  11. package/esm2020/data-grid/data-grid.module.mjs +15 -18
  12. package/esm2020/data-grid/data-grid.service.mjs +26 -1
  13. package/esm2020/data-grid/file-cell-template/file-cell-template.component.mjs +3 -7
  14. package/esm2020/data-grid/instance-link-template/instance-link-template.component.mjs +64 -0
  15. package/esm2020/data-grid/unit-info-template/unit-info-template.component.mjs +12 -4
  16. package/esm2020/data-grid/user-info-template/user-info-template.component.mjs +12 -4
  17. package/esm2020/public-api.mjs +1 -3
  18. package/fesm2015/ngx-rs-ant.mjs +758 -661
  19. package/fesm2015/ngx-rs-ant.mjs.map +1 -1
  20. package/fesm2020/ngx-rs-ant.mjs +751 -656
  21. package/fesm2020/ngx-rs-ant.mjs.map +1 -1
  22. package/package.json +1 -1
  23. package/public-api.d.ts +0 -2
  24. package/data-grid/instance-link-template.directive.d.ts +0 -8
  25. package/data-grid/master-detail-template.directive.d.ts +0 -8
  26. package/esm2020/data-grid/instance-link-template.directive.mjs +0 -16
  27. package/esm2020/data-grid/master-detail-template.directive.mjs +0 -16
@@ -1,10 +1,9 @@
1
1
  import { Component, ContentChild, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
2
  import { DxDataGridComponent } from "devextreme-angular";
3
3
  import { DataGridService } from "./data-grid.service";
4
- import { MasterDetailTemplateDirective } from "./master-detail-template.directive";
5
4
  import { RowButtonsTemplateDirective } from "./row-buttons-template.directive";
6
- import { InstanceLinkTemplateDirective } from "./instance-link-template.directive";
7
5
  import { debounceTime } from "rxjs";
6
+ import { notify_error } from "../util/utils";
8
7
  import * as i0 from "@angular/core";
9
8
  import * as i1 from "./data-grid.factory";
10
9
  import * as i2 from "./data-grid.service";
@@ -14,23 +13,31 @@ import * as i5 from "devextreme-angular/ui/data-grid";
14
13
  import * as i6 from "devextreme-angular/ui/nested";
15
14
  import * as i7 from "devextreme-angular/ui/tooltip";
16
15
  import * as i8 from "./file-cell-template/file-cell-template.component";
17
- import * as i9 from "./user-info-template/user-info-template.component";
16
+ import * as i9 from "./instance-link-template/instance-link-template.component";
18
17
  import * as i10 from "./unit-info-template/unit-info-template.component";
18
+ import * as i11 from "./user-info-template/user-info-template.component";
19
19
  export class DataGridComponent {
20
- constructor(factory, service) {
20
+ constructor(factory, service, viewContainerRef) {
21
21
  this.factory = factory;
22
22
  this.service = service;
23
+ this.viewContainerRef = viewContainerRef;
23
24
  this.tenant = 'T';
24
- this.enableMasterDetail = false;
25
- this.columns = [];
25
+ this.keyExpr = ''; // 用于实例属性选择器,加载组件值时以选中字段为主键获取选中行数据
26
+ this.onlyFrontEnd = false; // 仅前端,不通过获取表格数据
26
27
  this.dataSource = {};
27
- this.keyExpr = 'oid';
28
+ this.selectionMode = 'none';
28
29
  this.selectedRowKeys = [];
29
30
  this.selectedRowKeysChange = new EventEmitter();
30
- this.selectionMode = 'none';
31
- this.onDxDataGridCellPrepared = new EventEmitter();
32
- this.onDxDataGridContentReady = new EventEmitter();
33
- this.onDxDataGridSelectionChanged = new EventEmitter();
31
+ this.showRowNum = true;
32
+ this.instanceLinkType = 'tab';
33
+ this.drawerInstanceLinkViewContainerRef = this.viewContainerRef;
34
+ this.onCellPrepared = new EventEmitter();
35
+ this.onContentReady = new EventEmitter();
36
+ this.onEditorPreparing = new EventEmitter();
37
+ this.onRowClick = new EventEmitter();
38
+ this.onRowDblClick = new EventEmitter();
39
+ this.onSelectionChanged = new EventEmitter();
40
+ this.columns = [];
34
41
  }
35
42
  ngOnInit() {
36
43
  this.reload();
@@ -44,9 +51,34 @@ export class DataGridComponent {
44
51
  if (this.customColumnFn) {
45
52
  this.customColumnFn(columns);
46
53
  }
54
+ if (this.instanceLinkType === 'tab' || this.instanceLinkType === 'drawer') {
55
+ columns.unshift({
56
+ fixed: true,
57
+ width: 48,
58
+ cellTemplate: 'instanceLinkTemplate',
59
+ alignment: 'center',
60
+ cssClass: 'cell-vertical-middle'
61
+ });
62
+ }
63
+ if (this.showRowNum) {
64
+ columns.unshift({
65
+ fixed: true,
66
+ width: 48,
67
+ cellTemplate: 'rowIndexTemplate',
68
+ alignment: 'center',
69
+ cssClass: 'cell-vertical-middle'
70
+ });
71
+ }
47
72
  this.columns = columns;
48
73
  });
49
- this.dataSource = this.factory.makeDataGridDataSource(this.tenant, this.className, this.view, this.filter, this.dataGridName);
74
+ if (this.onlyFrontEnd) {
75
+ if (this.dataSource && !Array.isArray(this.dataSource)) {
76
+ notify_error('if onlyFrontEnd set true, you have to set dataSource as an Array');
77
+ }
78
+ }
79
+ else {
80
+ this.dataSource = this.factory.makeDataGridDataSource(this.tenant, this.className, this.view, this.filter, this.keyExpr, this.dataGridName);
81
+ }
50
82
  }
51
83
  convertMultipleValueCellText(cellInfo) {
52
84
  if (!cellInfo.value) {
@@ -77,6 +109,9 @@ export class DataGridComponent {
77
109
  }
78
110
  return cellInfo.data[key];
79
111
  }
112
+ getSelectedRowKeys() {
113
+ return this.dxDataGrid.instance.getSelectedRowKeys();
114
+ }
80
115
  refresh(callback) {
81
116
  this.dxDataGrid.instance.refresh().then(() => {
82
117
  if (callback) {
@@ -84,33 +119,22 @@ export class DataGridComponent {
84
119
  }
85
120
  });
86
121
  }
87
- getSelectedRowKeys() {
88
- return this.dxDataGrid.instance.getSelectedRowKeys();
89
- }
90
- onCellPrepared($event) {
91
- this.onDxDataGridCellPrepared.emit($event);
92
- }
93
- onContentReady($event) {
94
- this.onDxDataGridContentReady.emit($event);
95
- }
96
- onSelectionChanged($event) {
97
- this.onDxDataGridSelectionChanged.emit($event);
98
- }
99
- onEditorPreparing($event) {
122
+ onDxDataGridEditorPreparing($event) {
100
123
  if ($event.parentType === 'filterRow' && $event.editorName === 'dxTextBox') {
101
124
  $event.editorOptions.valueChangeEvent = 'blur';
102
125
  $event.editorOptions.onEnterKey = (e) => {
103
126
  e.component.blur();
104
127
  };
105
128
  }
129
+ this.onEditorPreparing.emit($event);
106
130
  }
107
131
  }
108
- DataGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DataGridComponent, deps: [{ token: i1.DataGridFactory }, { token: i2.DataGridService }], target: i0.ɵɵFactoryTarget.Component });
109
- DataGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DataGridComponent, selector: "rs-data-grid", inputs: { tenant: "tenant", className: "className", view: "view", filter: "filter", enableMasterDetail: "enableMasterDetail", dataGridName: "dataGridName", keyExpr: "keyExpr", height: "height", selectedRowKeys: "selectedRowKeys", selectionMode: "selectionMode", customColumnFn: "customColumnFn" }, outputs: { selectedRowKeysChange: "selectedRowKeysChange", onDxDataGridCellPrepared: "onDxDataGridCellPrepared", onDxDataGridContentReady: "onDxDataGridContentReady", onDxDataGridSelectionChanged: "onDxDataGridSelectionChanged" }, providers: [DataGridService], queries: [{ propertyName: "masterDetailTemplate", first: true, predicate: MasterDetailTemplateDirective, descendants: true }, { propertyName: "rowButtonsTemplate", first: true, predicate: RowButtonsTemplateDirective, descendants: true }, { propertyName: "instanceLinkTemplate", first: true, predicate: InstanceLinkTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "dxDataGrid", first: true, predicate: DxDataGridComponent, descendants: true, static: true }], ngImport: i0, template: "<dx-data-grid [showBorders]=\"true\"\r\n [showRowLines]=\"true\"\r\n [hoverStateEnabled]=\"true\"\r\n [rowAlternationEnabled]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [allowColumnResizing]=\"true\"\r\n columnResizingMode=\"widget\"\r\n dateSerializationFormat=\"yyyy/MM/dd HH:mm:ss\"\r\n [syncLookupFilterValues]=\"false\"\r\n [dataSource]=\"dataSource\"\r\n [columns]=\"columns\"\r\n [height]=\"height\"\r\n [keyExpr]=\"keyExpr\"\r\n [selectedRowKeys]=\"selectedRowKeys\"\r\n (selectedRowKeysChange)=\"selectedRowKeysChange.emit($event)\"\r\n (onCellPrepared)=\"onCellPrepared($event)\"\r\n (onEditorPreparing)=\"onEditorPreparing($event)\"\r\n (onContentReady)=\"onContentReady($event)\"\r\n (onSelectionChanged)=\"onSelectionChanged($event)\"\r\n (onRowExpanding)=\"$event.component.collapseAll(-1)\">\r\n <dxo-sorting mode=\"multiple\"></dxo-sorting>\r\n <dxo-selection [mode]=\"selectionMode\" selectAllMode=\"page\" showCheckBoxesMode=\"always\"></dxo-selection>\r\n <dxo-header-filter [visible]=\"true\">\r\n <dxo-search [enabled]=\"true\"></dxo-search>\r\n <dxo-texts [ok]=\"'\u786E\u5B9A'\"></dxo-texts>\r\n </dxo-header-filter>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-remote-operations [filtering]=\"true\"\r\n [sorting]=\"true\"\r\n [paging]=\"true\">\r\n </dxo-remote-operations>\r\n <dxo-master-detail [enabled]=\"enableMasterDetail\" template=\"masterDetailTemplate\"></dxo-master-detail>\r\n <dxo-paging [pageSize]=\"15\"></dxo-paging>\r\n <dxo-pager [visible]=\"true\"\r\n [showInfo]=\"true\"\r\n infoText=\"\u7B2C{0}\u9875\uFF0C\u5171{1}\u9875\uFF08\u5171{2}\u4E2A\u9879\u76EE\uFF09\"\r\n [showPageSizeSelector]=\"true\"\r\n [allowedPageSizes]=\"[15, 30, 50]\"\r\n ></dxo-pager>\r\n <dxo-scrolling showScrollbar=\"always\"></dxo-scrolling>\r\n <div *dxTemplate=\"let cellInfo of 'masterDetailTemplate'\">\r\n <ng-container [ngTemplateOutlet]=\"masterDetailTemplate.templateRef\"\r\n [ngTemplateOutletContext]=\"{$implicit: cellInfo, cellTemplateLoaded$: service.cellTemplateLoaded$}\"></ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'rowButtonsTemplate'\">\r\n <ng-container [ngTemplateOutlet]=\"rowButtonsTemplate.templateRef\"\r\n [ngTemplateOutletContext]=\"{$implicit: cellInfo, cellTemplateLoaded$: service.cellTemplateLoaded$}\"></ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'instanceLinkTemplate'\">\r\n <ng-container [ngTemplateOutlet]=\"instanceLinkTemplate.templateRef\"\r\n [ngTemplateOutletContext]=\"{$implicit: cellInfo, cellTemplateLoaded$: service.cellTemplateLoaded$}\"></ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'rowIndexTemplate'\">\r\n {{ cellInfo.rowIndex + 1 }}\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'multipleValueCellTemplate'\">\r\n <div [innerHTML]=\"convertMultipleValueCellText(cellInfo)\"></div>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'textCellTemplate'\">\r\n <div #textDiv style=\"text-overflow: ellipsis; overflow: hidden; cursor: pointer;\">{{ cellInfo.value }}</div>\r\n <dx-tooltip [target]=\"textDiv\"\r\n [position]=\"'top'\"\r\n [showEvent]=\"'click'\">\r\n <div *dxTemplate=\"let data of 'content'\">\r\n <p style=\"max-width: 320px; text-align: left; white-space: normal;\" [innerText]=\"cellInfo.value\"></p>\r\n </div>\r\n </dx-tooltip>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'fileCellTemplate'\">\r\n <ng-container *ngFor=\"let file of cellInfo.value\">\r\n <rs-file-cell-template [file]=\"file\"></rs-file-cell-template>\r\n </ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'userCellTemplate'\">\r\n <ng-container *ngFor=\"let user of getOriginalValue(cellInfo, 'userInfo')\">\r\n <rs-user-info-template [uid]=\"user\"></rs-user-info-template>\r\n </ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'unitCellTemplate'\">\r\n <ng-container *ngFor=\"let unit of getOriginalValue(cellInfo, 'unitInfo')\">\r\n <rs-unit-info-template [uid]=\"unit\"></rs-unit-info-template>\r\n </ng-container>\r\n </div>\r\n</dx-data-grid>\r\n", styles: [":host{display:flex;flex-flow:column nowrap}:host dx-data-grid{flex:auto;height:0}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { 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", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "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", "onExporting", "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", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "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: i6.DxoSearchComponent, selector: "dxo-search", inputs: ["editorOptions", "enabled", "timeout", "mode", "searchExpr"] }, { kind: "component", type: i6.DxoSelectionComponent, selector: "dxo-selection", inputs: ["allowSelectAll", "recursive", "selectByClick", "deferred", "mode", "selectAllMode", "showCheckBoxesMode"] }, { kind: "component", type: i6.DxoTextsComponent, selector: "dxo-texts", inputs: ["fix", "leftPosition", "rightPosition", "unfix", "addRow", "cancelAllChanges", "cancelRowChanges", "confirmDeleteMessage", "confirmDeleteTitle", "deleteRow", "editRow", "saveAllChanges", "saveRowChanges", "undeleteRow", "validationCancelChanges", "exportAll", "exportSelectedRows", "exportTo", "clearFilter", "createFilter", "filterEnabledHint", "groupByThisColumn", "groupContinuedMessage", "groupContinuesMessage", "ungroup", "ungroupAll", "cancel", "emptyValue", "ok", "avg", "avgOtherColumn", "count", "max", "maxOtherColumn", "min", "minOtherColumn", "sum", "sumOtherColumn", "allFields", "columnFields", "dataFields", "filterFields", "rowFields", "columnFieldArea", "dataFieldArea", "filterFieldArea", "rowFieldArea", "collapseAll", "dataNotAvailable", "expandAll", "exportToExcel", "grandTotal", "noData", "removeAllSorting", "showFieldChooser", "sortColumnBySummary", "sortRowBySummary", "total", "addRowToNode"] }, { kind: "component", type: i6.DxoHeaderFilterComponent, selector: "dxo-header-filter", inputs: ["allowSearch", "allowSelectAll", "dataSource", "groupInterval", "height", "search", "searchMode", "width", "searchTimeout", "texts", "visible", "showRelevantValues"] }, { kind: "component", type: i6.DxoFilterRowComponent, selector: "dxo-filter-row", inputs: ["applyFilter", "applyFilterText", "betweenEndText", "betweenStartText", "operationDescriptions", "resetOperationText", "showAllText", "showOperationChooser", "visible"] }, { kind: "component", type: i6.DxoMasterDetailComponent, selector: "dxo-master-detail", inputs: ["autoExpandAll", "enabled", "template"] }, { kind: "component", type: i6.DxoPagerComponent, selector: "dxo-pager", inputs: ["allowedPageSizes", "displayMode", "infoText", "label", "showInfo", "showNavigationButtons", "showPageSizeSelector", "visible"] }, { kind: "component", type: i6.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "component", type: i6.DxoRemoteOperationsComponent, selector: "dxo-remote-operations", inputs: ["filtering", "grouping", "groupPaging", "paging", "sorting", "summary"] }, { kind: "component", type: i6.DxoScrollingComponent, selector: "dxo-scrolling", inputs: ["columnRenderingMode", "mode", "preloadEnabled", "renderAsync", "rowRenderingMode", "scrollByContent", "scrollByThumb", "showScrollbar", "useNative"] }, { kind: "component", type: i6.DxoSortingComponent, selector: "dxo-sorting", inputs: ["ascendingText", "clearText", "descendingText", "mode", "showSortIndexes"] }, { kind: "component", type: i7.DxTooltipComponent, selector: "dx-tooltip", inputs: ["animation", "closeOnOutsideClick", "container", "contentTemplate", "copyRootClassesToWrapper", "deferRendering", "disabled", "elementAttr", "height", "hideEvent", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "maxHeight", "maxWidth", "minHeight", "minWidth", "position", "rtlEnabled", "shading", "shadingColor", "showEvent", "target", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onShowing", "onShown", "animationChange", "closeOnOutsideClickChange", "containerChange", "contentTemplateChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "disabledChange", "elementAttrChange", "heightChange", "hideEventChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "maxHeightChange", "maxWidthChange", "minHeightChange", "minWidthChange", "positionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showEventChange", "targetChange", "visibleChange", "widthChange", "wrapperAttrChange"] }, { kind: "component", type: i8.FileCellTemplateComponent, selector: "rs-file-cell-template", inputs: ["file"] }, { kind: "component", type: i9.UserInfoTemplateComponent, selector: "rs-user-info-template", inputs: ["uid"] }, { kind: "component", type: i10.UnitInfoTemplateComponent, selector: "rs-unit-info-template", inputs: ["uid"] }] });
132
+ DataGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DataGridComponent, deps: [{ token: i1.DataGridFactory }, { token: i2.DataGridService }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component });
133
+ DataGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DataGridComponent, selector: "rs-data-grid", inputs: { tenant: "tenant", className: "className", view: "view", filter: "filter", customColumnFn: "customColumnFn", keyExpr: "keyExpr", dataGridName: "dataGridName", height: "height", onlyFrontEnd: "onlyFrontEnd", dataSource: "dataSource", selectionMode: "selectionMode", selectedRowKeys: "selectedRowKeys", showRowNum: "showRowNum", instanceLinkType: "instanceLinkType", drawerInstanceLinkViewContainerRef: "drawerInstanceLinkViewContainerRef", drawerInstanceLinkFormTemplate: "drawerInstanceLinkFormTemplate" }, outputs: { selectedRowKeysChange: "selectedRowKeysChange", onCellPrepared: "onCellPrepared", onContentReady: "onContentReady", onEditorPreparing: "onEditorPreparing", onRowClick: "onRowClick", onRowDblClick: "onRowDblClick", onSelectionChanged: "onSelectionChanged" }, providers: [DataGridService], queries: [{ propertyName: "rowButtonsTemplate", first: true, predicate: RowButtonsTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "dxDataGrid", first: true, predicate: DxDataGridComponent, descendants: true, static: true }], ngImport: i0, template: "<dx-data-grid [showBorders]=\"true\"\r\n [showRowLines]=\"true\"\r\n [hoverStateEnabled]=\"true\"\r\n [rowAlternationEnabled]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [allowColumnResizing]=\"true\"\r\n columnResizingMode=\"widget\"\r\n dateSerializationFormat=\"yyyy/MM/dd HH:mm:ss\"\r\n [syncLookupFilterValues]=\"false\"\r\n [dataSource]=\"dataSource\"\r\n [columns]=\"columns\"\r\n [height]=\"height\"\r\n [keyExpr]=\"keyExpr\"\r\n [selectedRowKeys]=\"selectedRowKeys\"\r\n (selectedRowKeysChange)=\"selectedRowKeysChange.emit($event)\"\r\n (onCellPrepared)=\"onCellPrepared.emit($event)\"\r\n (onContentReady)=\"onContentReady.emit($event)\"\r\n (onEditorPreparing)=\"onDxDataGridEditorPreparing($event)\"\r\n (onRowClick)=\"onRowClick.emit($event)\"\r\n (onRowDblClick)=\"onRowDblClick.emit($event)\"\r\n (onSelectionChanged)=\"onSelectionChanged.emit($event)\">\r\n <dxo-sorting mode=\"multiple\"></dxo-sorting>\r\n <dxo-selection [mode]=\"selectionMode\" selectAllMode=\"page\" showCheckBoxesMode=\"always\"></dxo-selection>\r\n <dxo-header-filter [visible]=\"!onlyFrontEnd\">\r\n <dxo-search [enabled]=\"true\"></dxo-search>\r\n <dxo-texts [ok]=\"'\u786E\u5B9A'\"></dxo-texts>\r\n </dxo-header-filter>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-remote-operations [filtering]=\"true\"\r\n [sorting]=\"true\"\r\n [paging]=\"true\">\r\n </dxo-remote-operations>\r\n <dxo-paging [pageSize]=\"15\"></dxo-paging>\r\n <dxo-pager [visible]=\"true\"\r\n [showInfo]=\"true\"\r\n infoText=\"\u7B2C{0}\u9875\uFF0C\u5171{1}\u9875\uFF08\u5171{2}\u4E2A\u9879\u76EE\uFF09\"\r\n [showPageSizeSelector]=\"true\"\r\n [allowedPageSizes]=\"[15, 30, 50]\"\r\n ></dxo-pager>\r\n <dxo-scrolling showScrollbar=\"always\"></dxo-scrolling>\r\n <div *dxTemplate=\"let cellInfo of 'rowIndexTemplate'\">\r\n {{ cellInfo.rowIndex + 1 }}\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'instanceLinkTemplate'\">\r\n <rs-instance-link-template [tenant]=\"tenant\"\r\n [className]=\"className\"\r\n [oid]=\"cellInfo.data.oid\"\r\n [instanceLinkType]=\"instanceLinkType\"\r\n [drawerViewContainerRef]=\"drawerInstanceLinkViewContainerRef\"\r\n [drawerFormTemplate]=\"drawerInstanceLinkFormTemplate\">\r\n </rs-instance-link-template>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'rowButtonsTemplate'\">\r\n <ng-container [ngTemplateOutlet]=\"rowButtonsTemplate.templateRef\"\r\n [ngTemplateOutletContext]=\"{$implicit: cellInfo, cellTemplateLoaded$: service.cellTemplateLoaded$}\"></ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'multipleValueCellTemplate'\">\r\n <div [innerHTML]=\"convertMultipleValueCellText(cellInfo)\"></div>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'textCellTemplate'\">\r\n <div #textDiv style=\"text-overflow: ellipsis; overflow: hidden; cursor: pointer;\">{{ cellInfo.value }}</div>\r\n <dx-tooltip [target]=\"textDiv\"\r\n [position]=\"'top'\"\r\n [showEvent]=\"'click'\">\r\n <div *dxTemplate=\"let data of 'content'\">\r\n <p style=\"max-width: 320px; text-align: left; white-space: normal;\" [innerText]=\"cellInfo.value\"></p>\r\n </div>\r\n </dx-tooltip>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'fileCellTemplate'\">\r\n <ng-container *ngFor=\"let file of cellInfo.value\">\r\n <rs-file-cell-template [file]=\"file\"></rs-file-cell-template>\r\n </ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'userCellTemplate'\">\r\n <ng-container *ngFor=\"let user of getOriginalValue(cellInfo, 'userInfo')\">\r\n <rs-user-info-template [uid]=\"user\" [cellInfo]=\"cellInfo\"></rs-user-info-template>\r\n </ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'unitCellTemplate'\">\r\n <ng-container *ngFor=\"let unit of getOriginalValue(cellInfo, 'unitInfo')\">\r\n <rs-unit-info-template [uid]=\"unit\" [cellInfo]=\"cellInfo\"></rs-unit-info-template>\r\n </ng-container>\r\n </div>\r\n</dx-data-grid>\r\n", styles: [":host{display:flex;flex-flow:column nowrap}:host dx-data-grid{flex:auto;height:0}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { 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", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "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", "onExporting", "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", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "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: i6.DxoSearchComponent, selector: "dxo-search", inputs: ["editorOptions", "enabled", "timeout", "mode", "searchExpr"] }, { kind: "component", type: i6.DxoSelectionComponent, selector: "dxo-selection", inputs: ["allowSelectAll", "recursive", "selectByClick", "deferred", "mode", "selectAllMode", "showCheckBoxesMode"] }, { kind: "component", type: i6.DxoTextsComponent, selector: "dxo-texts", inputs: ["fix", "leftPosition", "rightPosition", "unfix", "addRow", "cancelAllChanges", "cancelRowChanges", "confirmDeleteMessage", "confirmDeleteTitle", "deleteRow", "editRow", "saveAllChanges", "saveRowChanges", "undeleteRow", "validationCancelChanges", "exportAll", "exportSelectedRows", "exportTo", "clearFilter", "createFilter", "filterEnabledHint", "groupByThisColumn", "groupContinuedMessage", "groupContinuesMessage", "ungroup", "ungroupAll", "cancel", "emptyValue", "ok", "avg", "avgOtherColumn", "count", "max", "maxOtherColumn", "min", "minOtherColumn", "sum", "sumOtherColumn", "allFields", "columnFields", "dataFields", "filterFields", "rowFields", "columnFieldArea", "dataFieldArea", "filterFieldArea", "rowFieldArea", "collapseAll", "dataNotAvailable", "expandAll", "exportToExcel", "grandTotal", "noData", "removeAllSorting", "showFieldChooser", "sortColumnBySummary", "sortRowBySummary", "total", "addRowToNode"] }, { kind: "component", type: i6.DxoHeaderFilterComponent, selector: "dxo-header-filter", inputs: ["allowSearch", "allowSelectAll", "dataSource", "groupInterval", "height", "search", "searchMode", "width", "searchTimeout", "texts", "visible", "showRelevantValues"] }, { kind: "component", type: i6.DxoFilterRowComponent, selector: "dxo-filter-row", inputs: ["applyFilter", "applyFilterText", "betweenEndText", "betweenStartText", "operationDescriptions", "resetOperationText", "showAllText", "showOperationChooser", "visible"] }, { kind: "component", type: i6.DxoPagerComponent, selector: "dxo-pager", inputs: ["allowedPageSizes", "displayMode", "infoText", "label", "showInfo", "showNavigationButtons", "showPageSizeSelector", "visible"] }, { kind: "component", type: i6.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "component", type: i6.DxoRemoteOperationsComponent, selector: "dxo-remote-operations", inputs: ["filtering", "grouping", "groupPaging", "paging", "sorting", "summary"] }, { kind: "component", type: i6.DxoScrollingComponent, selector: "dxo-scrolling", inputs: ["columnRenderingMode", "mode", "preloadEnabled", "renderAsync", "rowRenderingMode", "scrollByContent", "scrollByThumb", "showScrollbar", "useNative"] }, { kind: "component", type: i6.DxoSortingComponent, selector: "dxo-sorting", inputs: ["ascendingText", "clearText", "descendingText", "mode", "showSortIndexes"] }, { kind: "component", type: i7.DxTooltipComponent, selector: "dx-tooltip", inputs: ["animation", "closeOnOutsideClick", "container", "contentTemplate", "copyRootClassesToWrapper", "deferRendering", "disabled", "elementAttr", "height", "hideEvent", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "maxHeight", "maxWidth", "minHeight", "minWidth", "position", "rtlEnabled", "shading", "shadingColor", "showEvent", "target", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onShowing", "onShown", "animationChange", "closeOnOutsideClickChange", "containerChange", "contentTemplateChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "disabledChange", "elementAttrChange", "heightChange", "hideEventChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "maxHeightChange", "maxWidthChange", "minHeightChange", "minWidthChange", "positionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showEventChange", "targetChange", "visibleChange", "widthChange", "wrapperAttrChange"] }, { kind: "component", type: i8.FileCellTemplateComponent, selector: "rs-file-cell-template", inputs: ["file"] }, { kind: "component", type: i9.InstanceLinkTemplateComponent, selector: "rs-instance-link-template", inputs: ["tenant", "className", "oid", "instanceLinkType", "drawerViewContainerRef", "drawerFormTemplate"] }, { kind: "component", type: i10.UnitInfoTemplateComponent, selector: "rs-unit-info-template", inputs: ["uid", "cellInfo"] }, { kind: "component", type: i11.UserInfoTemplateComponent, selector: "rs-user-info-template", inputs: ["uid", "cellInfo"] }] });
110
134
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DataGridComponent, decorators: [{
111
135
  type: Component,
112
- args: [{ selector: 'rs-data-grid', providers: [DataGridService], template: "<dx-data-grid [showBorders]=\"true\"\r\n [showRowLines]=\"true\"\r\n [hoverStateEnabled]=\"true\"\r\n [rowAlternationEnabled]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [allowColumnResizing]=\"true\"\r\n columnResizingMode=\"widget\"\r\n dateSerializationFormat=\"yyyy/MM/dd HH:mm:ss\"\r\n [syncLookupFilterValues]=\"false\"\r\n [dataSource]=\"dataSource\"\r\n [columns]=\"columns\"\r\n [height]=\"height\"\r\n [keyExpr]=\"keyExpr\"\r\n [selectedRowKeys]=\"selectedRowKeys\"\r\n (selectedRowKeysChange)=\"selectedRowKeysChange.emit($event)\"\r\n (onCellPrepared)=\"onCellPrepared($event)\"\r\n (onEditorPreparing)=\"onEditorPreparing($event)\"\r\n (onContentReady)=\"onContentReady($event)\"\r\n (onSelectionChanged)=\"onSelectionChanged($event)\"\r\n (onRowExpanding)=\"$event.component.collapseAll(-1)\">\r\n <dxo-sorting mode=\"multiple\"></dxo-sorting>\r\n <dxo-selection [mode]=\"selectionMode\" selectAllMode=\"page\" showCheckBoxesMode=\"always\"></dxo-selection>\r\n <dxo-header-filter [visible]=\"true\">\r\n <dxo-search [enabled]=\"true\"></dxo-search>\r\n <dxo-texts [ok]=\"'\u786E\u5B9A'\"></dxo-texts>\r\n </dxo-header-filter>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-remote-operations [filtering]=\"true\"\r\n [sorting]=\"true\"\r\n [paging]=\"true\">\r\n </dxo-remote-operations>\r\n <dxo-master-detail [enabled]=\"enableMasterDetail\" template=\"masterDetailTemplate\"></dxo-master-detail>\r\n <dxo-paging [pageSize]=\"15\"></dxo-paging>\r\n <dxo-pager [visible]=\"true\"\r\n [showInfo]=\"true\"\r\n infoText=\"\u7B2C{0}\u9875\uFF0C\u5171{1}\u9875\uFF08\u5171{2}\u4E2A\u9879\u76EE\uFF09\"\r\n [showPageSizeSelector]=\"true\"\r\n [allowedPageSizes]=\"[15, 30, 50]\"\r\n ></dxo-pager>\r\n <dxo-scrolling showScrollbar=\"always\"></dxo-scrolling>\r\n <div *dxTemplate=\"let cellInfo of 'masterDetailTemplate'\">\r\n <ng-container [ngTemplateOutlet]=\"masterDetailTemplate.templateRef\"\r\n [ngTemplateOutletContext]=\"{$implicit: cellInfo, cellTemplateLoaded$: service.cellTemplateLoaded$}\"></ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'rowButtonsTemplate'\">\r\n <ng-container [ngTemplateOutlet]=\"rowButtonsTemplate.templateRef\"\r\n [ngTemplateOutletContext]=\"{$implicit: cellInfo, cellTemplateLoaded$: service.cellTemplateLoaded$}\"></ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'instanceLinkTemplate'\">\r\n <ng-container [ngTemplateOutlet]=\"instanceLinkTemplate.templateRef\"\r\n [ngTemplateOutletContext]=\"{$implicit: cellInfo, cellTemplateLoaded$: service.cellTemplateLoaded$}\"></ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'rowIndexTemplate'\">\r\n {{ cellInfo.rowIndex + 1 }}\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'multipleValueCellTemplate'\">\r\n <div [innerHTML]=\"convertMultipleValueCellText(cellInfo)\"></div>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'textCellTemplate'\">\r\n <div #textDiv style=\"text-overflow: ellipsis; overflow: hidden; cursor: pointer;\">{{ cellInfo.value }}</div>\r\n <dx-tooltip [target]=\"textDiv\"\r\n [position]=\"'top'\"\r\n [showEvent]=\"'click'\">\r\n <div *dxTemplate=\"let data of 'content'\">\r\n <p style=\"max-width: 320px; text-align: left; white-space: normal;\" [innerText]=\"cellInfo.value\"></p>\r\n </div>\r\n </dx-tooltip>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'fileCellTemplate'\">\r\n <ng-container *ngFor=\"let file of cellInfo.value\">\r\n <rs-file-cell-template [file]=\"file\"></rs-file-cell-template>\r\n </ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'userCellTemplate'\">\r\n <ng-container *ngFor=\"let user of getOriginalValue(cellInfo, 'userInfo')\">\r\n <rs-user-info-template [uid]=\"user\"></rs-user-info-template>\r\n </ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'unitCellTemplate'\">\r\n <ng-container *ngFor=\"let unit of getOriginalValue(cellInfo, 'unitInfo')\">\r\n <rs-unit-info-template [uid]=\"unit\"></rs-unit-info-template>\r\n </ng-container>\r\n </div>\r\n</dx-data-grid>\r\n", styles: [":host{display:flex;flex-flow:column nowrap}:host dx-data-grid{flex:auto;height:0}\n"] }]
113
- }], ctorParameters: function () { return [{ type: i1.DataGridFactory }, { type: i2.DataGridService }]; }, propDecorators: { tenant: [{
136
+ args: [{ selector: 'rs-data-grid', providers: [DataGridService], template: "<dx-data-grid [showBorders]=\"true\"\r\n [showRowLines]=\"true\"\r\n [hoverStateEnabled]=\"true\"\r\n [rowAlternationEnabled]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [allowColumnResizing]=\"true\"\r\n columnResizingMode=\"widget\"\r\n dateSerializationFormat=\"yyyy/MM/dd HH:mm:ss\"\r\n [syncLookupFilterValues]=\"false\"\r\n [dataSource]=\"dataSource\"\r\n [columns]=\"columns\"\r\n [height]=\"height\"\r\n [keyExpr]=\"keyExpr\"\r\n [selectedRowKeys]=\"selectedRowKeys\"\r\n (selectedRowKeysChange)=\"selectedRowKeysChange.emit($event)\"\r\n (onCellPrepared)=\"onCellPrepared.emit($event)\"\r\n (onContentReady)=\"onContentReady.emit($event)\"\r\n (onEditorPreparing)=\"onDxDataGridEditorPreparing($event)\"\r\n (onRowClick)=\"onRowClick.emit($event)\"\r\n (onRowDblClick)=\"onRowDblClick.emit($event)\"\r\n (onSelectionChanged)=\"onSelectionChanged.emit($event)\">\r\n <dxo-sorting mode=\"multiple\"></dxo-sorting>\r\n <dxo-selection [mode]=\"selectionMode\" selectAllMode=\"page\" showCheckBoxesMode=\"always\"></dxo-selection>\r\n <dxo-header-filter [visible]=\"!onlyFrontEnd\">\r\n <dxo-search [enabled]=\"true\"></dxo-search>\r\n <dxo-texts [ok]=\"'\u786E\u5B9A'\"></dxo-texts>\r\n </dxo-header-filter>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-remote-operations [filtering]=\"true\"\r\n [sorting]=\"true\"\r\n [paging]=\"true\">\r\n </dxo-remote-operations>\r\n <dxo-paging [pageSize]=\"15\"></dxo-paging>\r\n <dxo-pager [visible]=\"true\"\r\n [showInfo]=\"true\"\r\n infoText=\"\u7B2C{0}\u9875\uFF0C\u5171{1}\u9875\uFF08\u5171{2}\u4E2A\u9879\u76EE\uFF09\"\r\n [showPageSizeSelector]=\"true\"\r\n [allowedPageSizes]=\"[15, 30, 50]\"\r\n ></dxo-pager>\r\n <dxo-scrolling showScrollbar=\"always\"></dxo-scrolling>\r\n <div *dxTemplate=\"let cellInfo of 'rowIndexTemplate'\">\r\n {{ cellInfo.rowIndex + 1 }}\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'instanceLinkTemplate'\">\r\n <rs-instance-link-template [tenant]=\"tenant\"\r\n [className]=\"className\"\r\n [oid]=\"cellInfo.data.oid\"\r\n [instanceLinkType]=\"instanceLinkType\"\r\n [drawerViewContainerRef]=\"drawerInstanceLinkViewContainerRef\"\r\n [drawerFormTemplate]=\"drawerInstanceLinkFormTemplate\">\r\n </rs-instance-link-template>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'rowButtonsTemplate'\">\r\n <ng-container [ngTemplateOutlet]=\"rowButtonsTemplate.templateRef\"\r\n [ngTemplateOutletContext]=\"{$implicit: cellInfo, cellTemplateLoaded$: service.cellTemplateLoaded$}\"></ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'multipleValueCellTemplate'\">\r\n <div [innerHTML]=\"convertMultipleValueCellText(cellInfo)\"></div>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'textCellTemplate'\">\r\n <div #textDiv style=\"text-overflow: ellipsis; overflow: hidden; cursor: pointer;\">{{ cellInfo.value }}</div>\r\n <dx-tooltip [target]=\"textDiv\"\r\n [position]=\"'top'\"\r\n [showEvent]=\"'click'\">\r\n <div *dxTemplate=\"let data of 'content'\">\r\n <p style=\"max-width: 320px; text-align: left; white-space: normal;\" [innerText]=\"cellInfo.value\"></p>\r\n </div>\r\n </dx-tooltip>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'fileCellTemplate'\">\r\n <ng-container *ngFor=\"let file of cellInfo.value\">\r\n <rs-file-cell-template [file]=\"file\"></rs-file-cell-template>\r\n </ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'userCellTemplate'\">\r\n <ng-container *ngFor=\"let user of getOriginalValue(cellInfo, 'userInfo')\">\r\n <rs-user-info-template [uid]=\"user\" [cellInfo]=\"cellInfo\"></rs-user-info-template>\r\n </ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'unitCellTemplate'\">\r\n <ng-container *ngFor=\"let unit of getOriginalValue(cellInfo, 'unitInfo')\">\r\n <rs-unit-info-template [uid]=\"unit\" [cellInfo]=\"cellInfo\"></rs-unit-info-template>\r\n </ng-container>\r\n </div>\r\n</dx-data-grid>\r\n", styles: [":host{display:flex;flex-flow:column nowrap}:host dx-data-grid{flex:auto;height:0}\n"] }]
137
+ }], ctorParameters: function () { return [{ type: i1.DataGridFactory }, { type: i2.DataGridService }, { type: i0.ViewContainerRef }]; }, propDecorators: { tenant: [{
114
138
  type: Input
115
139
  }], className: [{
116
140
  type: Input
@@ -118,39 +142,49 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
118
142
  type: Input
119
143
  }], filter: [{
120
144
  type: Input
121
- }], enableMasterDetail: [{
122
- type: Input
123
- }], dataGridName: [{
145
+ }], customColumnFn: [{
124
146
  type: Input
125
147
  }], keyExpr: [{
126
148
  type: Input
149
+ }], dataGridName: [{
150
+ type: Input
127
151
  }], height: [{
128
152
  type: Input
153
+ }], onlyFrontEnd: [{
154
+ type: Input
155
+ }], dataSource: [{
156
+ type: Input
157
+ }], selectionMode: [{
158
+ type: Input
129
159
  }], selectedRowKeys: [{
130
160
  type: Input
131
161
  }], selectedRowKeysChange: [{
132
162
  type: Output
133
- }], selectionMode: [{
163
+ }], showRowNum: [{
134
164
  type: Input
135
- }], customColumnFn: [{
165
+ }], instanceLinkType: [{
166
+ type: Input
167
+ }], drawerInstanceLinkViewContainerRef: [{
136
168
  type: Input
137
- }], onDxDataGridCellPrepared: [{
169
+ }], drawerInstanceLinkFormTemplate: [{
170
+ type: Input
171
+ }], onCellPrepared: [{
172
+ type: Output
173
+ }], onContentReady: [{
138
174
  type: Output
139
- }], onDxDataGridContentReady: [{
175
+ }], onEditorPreparing: [{
140
176
  type: Output
141
- }], onDxDataGridSelectionChanged: [{
177
+ }], onRowClick: [{
178
+ type: Output
179
+ }], onRowDblClick: [{
180
+ type: Output
181
+ }], onSelectionChanged: [{
142
182
  type: Output
143
183
  }], dxDataGrid: [{
144
184
  type: ViewChild,
145
185
  args: [DxDataGridComponent, { static: true }]
146
- }], masterDetailTemplate: [{
147
- type: ContentChild,
148
- args: [MasterDetailTemplateDirective]
149
186
  }], rowButtonsTemplate: [{
150
187
  type: ContentChild,
151
188
  args: [RowButtonsTemplateDirective]
152
- }], instanceLinkTemplate: [{
153
- type: ContentChild,
154
- args: [InstanceLinkTemplateDirective]
155
189
  }] } });
156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ycy1hbnQvc3JjL2RhdGEtZ3JpZC9kYXRhLWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJzLWFudC9zcmMvZGF0YS1ncmlkL2RhdGEtZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdEcsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDdkQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ2pGLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBRTdFLE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ2pGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7OztBQVFsQyxNQUFNLE9BQU8saUJBQWlCO0lBdUM1QixZQUFvQixPQUF3QixFQUFZLE9BQXdCO1FBQTVELFlBQU8sR0FBUCxPQUFPLENBQWlCO1FBQVksWUFBTyxHQUFQLE9BQU8sQ0FBaUI7UUFyQ2hGLFdBQU0sR0FBUyxHQUFHLENBQUM7UUFRbkIsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBRzNCLFlBQU8sR0FBVSxFQUFFLENBQUM7UUFDcEIsZUFBVSxHQUFRLEVBQUUsQ0FBQztRQUVyQixZQUFPLEdBQVcsS0FBSyxDQUFDO1FBSXhCLG9CQUFlLEdBQVUsRUFBRSxDQUFDO1FBRTVCLDBCQUFxQixHQUFHLElBQUksWUFBWSxF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RGhDLDg5SUFvRkE7MkZEckVhLGlCQUFpQjtrQkFON0IsU0FBUzsrQkFDRSxjQUFjLGFBR2IsQ0FBQyxlQUFlLENBQUM7b0lBSTVCLE1BQU07c0JBREwsS0FBSztnQkFHTixTQUFTO3NCQURSLEtBQUs7Z0JBR04sSUFBSTtzQkFESCxLQUFLO2dCQUdOLE1BQU07c0JBREwsS0FBSztnQkFHTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBR04sWUFBWTtzQkFEWCxLQUFLO2dCQUtOLE9BQU87c0JBRE4sS0FBSztnQkFHTixNQUFNO3NCQURMLEtBQUs7Z0JBR04sZUFBZTtzQkFEZCxLQUFLO2dCQUdOLHFCQUFxQjtzQkFEcEIsTUFBTTtnQkFHUCxhQUFhO3NCQURaLEtBQUs7Z0JBR04sY0FBYztzQkFEYixLQUFLO2dCQUdOLHdCQUF3QjtzQkFEdkIsTUFBTTtnQkFHUCx3QkFBd0I7c0JBRHZCLE1BQU07Z0JBR1AsNEJBQTRCO3NCQUQzQixNQUFNO2dCQUd5QyxVQUFVO3NCQUF6RCxTQUFTO3VCQUFDLG1CQUFtQixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFDRCxvQkFBb0I7c0JBQWhFLFlBQVk7dUJBQUMsNkJBQTZCO2dCQUNBLGtCQUFrQjtzQkFBNUQsWUFBWTt1QkFBQywyQkFBMkI7Z0JBQ0ksb0JBQW9CO3NCQUFoRSxZQUFZO3VCQUFDLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0R4RGF0YUdyaWRDb21wb25lbnR9IGZyb20gXCJkZXZleHRyZW1lLWFuZ3VsYXJcIjtcclxuaW1wb3J0IHtEYXRhR3JpZFNlcnZpY2V9IGZyb20gXCIuL2RhdGEtZ3JpZC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7TWFzdGVyRGV0YWlsVGVtcGxhdGVEaXJlY3RpdmV9IGZyb20gXCIuL21hc3Rlci1kZXRhaWwtdGVtcGxhdGUuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7Um93QnV0dG9uc1RlbXBsYXRlRGlyZWN0aXZlfSBmcm9tIFwiLi9yb3ctYnV0dG9ucy10ZW1wbGF0ZS5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtEYXRhR3JpZEZhY3Rvcnl9IGZyb20gXCIuL2RhdGEtZ3JpZC5mYWN0b3J5XCI7XHJcbmltcG9ydCB7SW5zdGFuY2VMaW5rVGVtcGxhdGVEaXJlY3RpdmV9IGZyb20gXCIuL2luc3RhbmNlLWxpbmstdGVtcGxhdGUuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7ZGVib3VuY2VUaW1lfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdycy1kYXRhLWdyaWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLWdyaWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RhdGEtZ3JpZC5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW0RhdGFHcmlkU2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGFHcmlkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKVxyXG4gIHRlbmFudD86IGFueSA9ICdUJztcclxuICBASW5wdXQoKVxyXG4gIGNsYXNzTmFtZSE6IGFueTtcclxuICBASW5wdXQoKVxyXG4gIHZpZXc/OiBhbnk7XHJcbiAgQElucHV0KClcclxuICBmaWx0ZXI/OiBhbnk7XHJcbiAgQElucHV0KClcclxuICBlbmFibGVNYXN0ZXJEZXRhaWwgPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIGRhdGFHcmlkTmFtZT86IHN0cmluZztcclxuICBjb2x1bW5zOiBhbnlbXSA9IFtdO1xyXG4gIGRhdGFTb3VyY2U6IGFueSA9IHt9O1xyXG4gIEBJbnB1dCgpXHJcbiAga2V5RXhwcjogc3RyaW5nID0gJ29pZCc7XHJcbiAgQElucHV0KClcclxuICBoZWlnaHQ6IGFueTtcclxuICBASW5wdXQoKVxyXG4gIHNlbGVjdGVkUm93S2V5czogYW55W10gPSBbXTtcclxuICBAT3V0cHV0KClcclxuICBzZWxlY3RlZFJvd0tleXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2VsZWN0aW9uTW9kZTogJ25vbmUnIHwgJ211bHRpcGxlJyB8ICdzaW5nbGUnID0gJ25vbmUnO1xyXG4gIEBJbnB1dCgpXHJcbiAgY3VzdG9tQ29sdW1uRm4/OiAoY29sdW1uczogYW55W10pID0+IHZvaWQ7XHJcbiAgQE91dHB1dCgpXHJcbiAgb25EeERhdGFHcmlkQ2VsbFByZXBhcmVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpXHJcbiAgb25EeERhdGFHcmlkQ29udGVudFJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpXHJcbiAgb25EeERhdGFHcmlkU2VsZWN0aW9uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAVmlld0NoaWxkKER4RGF0YUdyaWRDb21wb25lbnQsIHtzdGF0aWM6IHRydWV9KSBkeERhdGFHcmlkITogRHhEYXRhR3JpZENvbXBvbmVudDtcclxuICBAQ29udGVudENoaWxkKE1hc3RlckRldGFpbFRlbXBsYXRlRGlyZWN0aXZlKSBtYXN0ZXJEZXRhaWxUZW1wbGF0ZSE6IE1hc3RlckRldGFpbFRlbXBsYXRlRGlyZWN0aXZlO1xyXG4gIEBDb250ZW50Q2hpbGQoUm93QnV0dG9uc1RlbXBsYXRlRGlyZWN0aXZlKSByb3dCdXR0b25zVGVtcGxhdGUhOiBSb3dCdXR0b25zVGVtcGxhdGVEaXJlY3RpdmU7XHJcbiAgQENvbnRlbnRDaGlsZChJbnN0YW5jZUxpbmtUZW1wbGF0ZURpcmVjdGl2ZSkgaW5zdGFuY2VMaW5rVGVtcGxhdGUhOiBJbnN0YW5jZUxpbmtUZW1wbGF0ZURpcmVjdGl2ZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYWN0b3J5OiBEYXRhR3JpZEZhY3RvcnksIHByb3RlY3RlZCBzZXJ2aWNlOiBEYXRhR3JpZFNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5yZWxvYWQoKTtcclxuICAgIHRoaXMuc2VydmljZS5jZWxsVGVtcGxhdGVMb2FkZWQkLnBpcGUoZGVib3VuY2VUaW1lKDIwMCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICg8YW55PnRoaXMuZHhEYXRhR3JpZC5pbnN0YW5jZSkucmVzaXplKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlbG9hZCgpIHtcclxuICAgIHRoaXMuY29sdW1ucy5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5mYWN0b3J5Lm1ha2VEYXRhR3JpZENvbHVtbnModGhpcy50ZW5hbnQsIHRoaXMuY2xhc3NOYW1lLCB0aGlzLnZpZXcpLnN1YnNjcmliZShjb2x1bW5zID0+IHtcclxuICAgICAgaWYgKHRoaXMuY3VzdG9tQ29sdW1uRm4pIHtcclxuICAgICAgICB0aGlzLmN1c3RvbUNvbHVtbkZuKGNvbHVtbnMpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29sdW1ucyA9IGNvbHVtbnM7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZSA9IHRoaXMuZmFjdG9yeS5tYWtlRGF0YUdyaWREYXRhU291cmNlKHRoaXMudGVuYW50LCB0aGlzLmNsYXNzTmFtZSwgdGhpcy52aWV3LCB0aGlzLmZpbHRlciwgdGhpcy5kYXRhR3JpZE5hbWUpO1xyXG4gIH1cclxuXHJcbiAgY29udmVydE11bHRpcGxlVmFsdWVDZWxsVGV4dChjZWxsSW5mbzogYW55KSB7XHJcbiAgICBpZiAoIWNlbGxJbmZvLnZhbHVlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGNlbGxJbmZvLnZhbHVlKSkge1xyXG4gICAgICBpZiAoY2VsbEluZm8uY29sdW1uLmxvb2t1cCkge1xyXG4gICAgICAgIHJldHVybiBjZWxsSW5mby52YWx1ZS5tYXAoKGl0ZW06IGFueSkgPT4gY2VsbEluZm8uY29sdW1uLmxvb2t1cC5jYWxjdWxhdGVDZWxsVmFsdWUoaXRlbSkpLmpvaW4oJzxiciAvPicpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBjZWxsSW5mby52YWx1ZS5qb2luKCc8YnIgLz4nKTtcclxuICAgIH1cclxuICAgIGlmIChjZWxsSW5mby5jb2x1bW4ubG9va3VwKSB7XHJcbiAgICAgIHJldHVybiBjZWxsSW5mby5jb2x1bW4ubG9va3VwLmNhbGN1bGF0ZUNlbGxWYWx1ZShjZWxsSW5mby52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2VsbEluZm8udmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXRPcmlnaW5hbFZhbHVlKGNlbGxJbmZvOiBhbnksIGtleTogYW55KSB7XHJcbiAgICBjb25zdCBjb25maWcgPSBjZWxsSW5mby5jb2x1bW5ba2V5XTtcclxuICAgIGlmIChjb25maWcpIHtcclxuICAgICAgY29uc3QgdmFsdWUgPSBjZWxsSW5mby5kYXRhW2NvbmZpZy5maWVsZF07XHJcbiAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gW3ZhbHVlXTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2VsbEluZm8uZGF0YVtrZXldO1xyXG4gIH1cclxuXHJcbiAgcmVmcmVzaChjYWxsYmFjaz86IGFueSkge1xyXG4gICAgdGhpcy5keERhdGFHcmlkLmluc3RhbmNlLnJlZnJlc2goKS50aGVuKCgpID0+IHtcclxuICAgICAgaWYgKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY2FsbGJhY2soKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RlZFJvd0tleXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5keERhdGFHcmlkLmluc3RhbmNlLmdldFNlbGVjdGVkUm93S2V5cygpO1xyXG4gIH1cclxuXHJcbiAgb25DZWxsUHJlcGFyZWQoJGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMub25EeERhdGFHcmlkQ2VsbFByZXBhcmVkLmVtaXQoJGV2ZW50KTtcclxuICB9XHJcblxyXG4gIG9uQ29udGVudFJlYWR5KCRldmVudDogYW55KSB7XHJcbiAgICB0aGlzLm9uRHhEYXRhR3JpZENvbnRlbnRSZWFkeS5lbWl0KCRldmVudCk7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGlvbkNoYW5nZWQoJGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMub25EeERhdGFHcmlkU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KCRldmVudCk7XHJcbiAgfVxyXG5cclxuICBvbkVkaXRvclByZXBhcmluZygkZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKCRldmVudC5wYXJlbnRUeXBlID09PSAnZmlsdGVyUm93JyAmJiAkZXZlbnQuZWRpdG9yTmFtZSA9PT0gJ2R4VGV4dEJveCcpIHtcclxuICAgICAgJGV2ZW50LmVkaXRvck9wdGlvbnMudmFsdWVDaGFuZ2VFdmVudCA9ICdibHVyJztcclxuICAgICAgJGV2ZW50LmVkaXRvck9wdGlvbnMub25FbnRlcktleSA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICBlLmNvbXBvbmVudC5ibHVyKCk7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkeC1kYXRhLWdyaWQgW3Nob3dCb3JkZXJzXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgIFtzaG93Um93TGluZXNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgW2hvdmVyU3RhdGVFbmFibGVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgIFtyb3dBbHRlcm5hdGlvbkVuYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgW2NvbHVtbkF1dG9XaWR0aF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICBbYWxsb3dDb2x1bW5SZXNpemluZ109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICBjb2x1bW5SZXNpemluZ01vZGU9XCJ3aWRnZXRcIlxyXG4gICAgICAgICAgICAgIGRhdGVTZXJpYWxpemF0aW9uRm9ybWF0PVwieXl5eS9NTS9kZCBISDptbTpzc1wiXHJcbiAgICAgICAgICAgICAgW3N5bmNMb29rdXBGaWx0ZXJWYWx1ZXNdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIlxyXG4gICAgICAgICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgIFtoZWlnaHRdPVwiaGVpZ2h0XCJcclxuICAgICAgICAgICAgICBba2V5RXhwcl09XCJrZXlFeHByXCJcclxuICAgICAgICAgICAgICBbc2VsZWN0ZWRSb3dLZXlzXT1cInNlbGVjdGVkUm93S2V5c1wiXHJcbiAgICAgICAgICAgICAgKHNlbGVjdGVkUm93S2V5c0NoYW5nZSk9XCJzZWxlY3RlZFJvd0tleXNDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAob25DZWxsUHJlcGFyZWQpPVwib25DZWxsUHJlcGFyZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgKG9uRWRpdG9yUHJlcGFyaW5nKT1cIm9uRWRpdG9yUHJlcGFyaW5nKCRldmVudClcIlxyXG4gICAgICAgICAgICAgIChvbkNvbnRlbnRSZWFkeSk9XCJvbkNvbnRlbnRSZWFkeSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAob25TZWxlY3Rpb25DaGFuZ2VkKT1cIm9uU2VsZWN0aW9uQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAob25Sb3dFeHBhbmRpbmcpPVwiJGV2ZW50LmNvbXBvbmVudC5jb2xsYXBzZUFsbCgtMSlcIj5cclxuICA8ZHhvLXNvcnRpbmcgbW9kZT1cIm11bHRpcGxlXCI+PC9keG8tc29ydGluZz5cclxuICA8ZHhvLXNlbGVjdGlvbiBbbW9kZV09XCJzZWxlY3Rpb25Nb2RlXCIgc2VsZWN0QWxsTW9kZT1cInBhZ2VcIiBzaG93Q2hlY2tCb3hlc01vZGU9XCJhbHdheXNcIj48L2R4by1zZWxlY3Rpb24+XHJcbiAgPGR4by1oZWFkZXItZmlsdGVyIFt2aXNpYmxlXT1cInRydWVcIj5cclxuICAgIDxkeG8tc2VhcmNoIFtlbmFibGVkXT1cInRydWVcIj48L2R4by1zZWFyY2g+XHJcbiAgICA8ZHhvLXRleHRzIFtva109XCIn56Gu5a6aJ1wiPjwvZHhvLXRleHRzPlxyXG4gIDwvZHhvLWhlYWRlci1maWx0ZXI+XHJcbiAgPGR4by1maWx0ZXItcm93IFt2aXNpYmxlXT1cInRydWVcIj48L2R4by1maWx0ZXItcm93PlxyXG4gIDxkeG8tcmVtb3RlLW9wZXJhdGlvbnMgW2ZpbHRlcmluZ109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtzb3J0aW5nXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3BhZ2luZ109XCJ0cnVlXCI+XHJcbiAgPC9keG8tcmVtb3RlLW9wZXJhdGlvbnM+XHJcbiAgPGR4by1tYXN0ZXItZGV0YWlsIFtlbmFibGVkXT1cImVuYWJsZU1hc3RlckRldGFpbFwiIHRlbXBsYXRlPVwibWFzdGVyRGV0YWlsVGVtcGxhdGVcIj48L2R4by1tYXN0ZXItZGV0YWlsPlxyXG4gIDxkeG8tcGFnaW5nIFtwYWdlU2l6ZV09XCIxNVwiPjwvZHhvLXBhZ2luZz5cclxuICA8ZHhvLXBhZ2VyIFt2aXNpYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgW3Nob3dJbmZvXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgaW5mb1RleHQ9XCLnrKx7MH3pobXvvIzlhbF7MX3pobXvvIjlhbF7Mn3kuKrpobnnm67vvIlcIlxyXG4gICAgICAgICAgICAgW3Nob3dQYWdlU2l6ZVNlbGVjdG9yXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgW2FsbG93ZWRQYWdlU2l6ZXNdPVwiWzE1LCAzMCwgNTBdXCJcclxuICA+PC9keG8tcGFnZXI+XHJcbiAgPGR4by1zY3JvbGxpbmcgc2hvd1Njcm9sbGJhcj1cImFsd2F5c1wiPjwvZHhvLXNjcm9sbGluZz5cclxuICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGNlbGxJbmZvIG9mICdtYXN0ZXJEZXRhaWxUZW1wbGF0ZSdcIj5cclxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibWFzdGVyRGV0YWlsVGVtcGxhdGUudGVtcGxhdGVSZWZcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDogY2VsbEluZm8sIGNlbGxUZW1wbGF0ZUxvYWRlZCQ6IHNlcnZpY2UuY2VsbFRlbXBsYXRlTG9hZGVkJH1cIj48L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGNlbGxJbmZvIG9mICdyb3dCdXR0b25zVGVtcGxhdGUnXCI+XHJcbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInJvd0J1dHRvbnNUZW1wbGF0ZS50ZW1wbGF0ZVJlZlwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0OiBjZWxsSW5mbywgY2VsbFRlbXBsYXRlTG9hZGVkJDogc2VydmljZS5jZWxsVGVtcGxhdGVMb2FkZWQkfVwiPjwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgY2VsbEluZm8gb2YgJ2luc3RhbmNlTGlua1RlbXBsYXRlJ1wiPlxyXG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJpbnN0YW5jZUxpbmtUZW1wbGF0ZS50ZW1wbGF0ZVJlZlwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0OiBjZWxsSW5mbywgY2VsbFRlbXBsYXRlTG9hZGVkJDogc2VydmljZS5jZWxsVGVtcGxhdGVMb2FkZWQkfVwiPjwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgY2VsbEluZm8gb2YgJ3Jvd0luZGV4VGVtcGxhdGUnXCI+XHJcbiAgICB7eyBjZWxsSW5mby5yb3dJbmRleCArIDEgfX1cclxuICA8L2Rpdj5cclxuICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGNlbGxJbmZvIG9mICdtdWx0aXBsZVZhbHVlQ2VsbFRlbXBsYXRlJ1wiPlxyXG4gICAgPGRpdiBbaW5uZXJIVE1MXT1cImNvbnZlcnRNdWx0aXBsZVZhbHVlQ2VsbFRleHQoY2VsbEluZm8pXCI+PC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBjZWxsSW5mbyBvZiAndGV4dENlbGxUZW1wbGF0ZSdcIj5cclxuICAgIDxkaXYgI3RleHREaXYgc3R5bGU9XCJ0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsgb3ZlcmZsb3c6IGhpZGRlbjsgY3Vyc29yOiBwb2ludGVyO1wiPnt7IGNlbGxJbmZvLnZhbHVlIH19PC9kaXY+XHJcbiAgICA8ZHgtdG9vbHRpcCBbdGFyZ2V0XT1cInRleHREaXZcIlxyXG4gICAgICAgICAgICAgICAgW3Bvc2l0aW9uXT1cIid0b3AnXCJcclxuICAgICAgICAgICAgICAgIFtzaG93RXZlbnRdPVwiJ2NsaWNrJ1wiPlxyXG4gICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGRhdGEgb2YgJ2NvbnRlbnQnXCI+XHJcbiAgICAgICAgPHAgc3R5bGU9XCJtYXgtd2lkdGg6IDMyMHB4OyB0ZXh0LWFsaWduOiBsZWZ0OyB3aGl0ZS1zcGFjZTogbm9ybWFsO1wiIFtpbm5lclRleHRdPVwiY2VsbEluZm8udmFsdWVcIj48L3A+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9keC10b29sdGlwPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgY2VsbEluZm8gb2YgJ2ZpbGVDZWxsVGVtcGxhdGUnXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWxlIG9mIGNlbGxJbmZvLnZhbHVlXCI+XHJcbiAgICAgIDxycy1maWxlLWNlbGwtdGVtcGxhdGUgW2ZpbGVdPVwiZmlsZVwiPjwvcnMtZmlsZS1jZWxsLXRlbXBsYXRlPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBjZWxsSW5mbyBvZiAndXNlckNlbGxUZW1wbGF0ZSdcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHVzZXIgb2YgZ2V0T3JpZ2luYWxWYWx1ZShjZWxsSW5mbywgJ3VzZXJJbmZvJylcIj5cclxuICAgICAgPHJzLXVzZXItaW5mby10ZW1wbGF0ZSBbdWlkXT1cInVzZXJcIj48L3JzLXVzZXItaW5mby10ZW1wbGF0ZT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgY2VsbEluZm8gb2YgJ3VuaXRDZWxsVGVtcGxhdGUnXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB1bml0IG9mIGdldE9yaWdpbmFsVmFsdWUoY2VsbEluZm8sICd1bml0SW5mbycpXCI+XHJcbiAgICAgIDxycy11bml0LWluZm8tdGVtcGxhdGUgW3VpZF09XCJ1bml0XCI+PC9ycy11bml0LWluZm8tdGVtcGxhdGU+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuPC9keC1kYXRhLWdyaWQ+XHJcbiJdfQ==
190
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ycy1hbnQvc3JjL2RhdGEtZ3JpZC9kYXRhLWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJzLWFudC9zcmMvZGF0YS1ncmlkL2RhdGEtZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQW1CLE1BQU0sZUFBZSxDQUFDO0FBQ3hILE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUU3RSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFRM0MsTUFBTSxPQUFPLGlCQUFpQjtJQW1ENUIsWUFBb0IsT0FBd0IsRUFBWSxPQUF3QixFQUFVLGdCQUFrQztRQUF4RyxZQUFPLEdBQVAsT0FBTyxDQUFpQjtRQUFZLFlBQU8sR0FBUCxPQUFPLENBQWlCO1FBQVUscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQWpENUgsV0FBTSxHQUFTLEdBQUcsQ0FBQztRQVVuQixZQUFPLEdBQVcsRUFBRSxDQUFDLENBQUMsa0NBQWtDO1FBTXhELGlCQUFZLEdBQVksS0FBSyxDQUFDLENBQUMsZ0JBQWdCO1FBRS9DLGVBQVUsR0FBUSxFQUFFLENBQUM7UUFFckIsa0JBQWEsR0FBbUMsTUFBTSxDQUFDO1FBRXZELG9CQUFlLEdBQVUsRUFBRSxDQUFDO1FBRTVCLDBC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YUFBYTtzQkFEWixLQUFLO2dCQUdOLGVBQWU7c0JBRGQsS0FBSztnQkFHTixxQkFBcUI7c0JBRHBCLE1BQU07Z0JBR1AsVUFBVTtzQkFEVCxLQUFLO2dCQUdOLGdCQUFnQjtzQkFEZixLQUFLO2dCQUdOLGtDQUFrQztzQkFEakMsS0FBSztnQkFHTiw4QkFBOEI7c0JBRDdCLEtBQUs7Z0JBR04sY0FBYztzQkFEYixNQUFNO2dCQUdQLGNBQWM7c0JBRGIsTUFBTTtnQkFHUCxpQkFBaUI7c0JBRGhCLE1BQU07Z0JBR1AsVUFBVTtzQkFEVCxNQUFNO2dCQUdQLGFBQWE7c0JBRFosTUFBTTtnQkFHUCxrQkFBa0I7c0JBRGpCLE1BQU07Z0JBRWlELFVBQVU7c0JBQWpFLFNBQVM7dUJBQUMsbUJBQW1CLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUNPLGtCQUFrQjtzQkFBdEUsWUFBWTt1QkFBQywyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgQ29udGVudENoaWxkLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtEeERhdGFHcmlkQ29tcG9uZW50fSBmcm9tIFwiZGV2ZXh0cmVtZS1hbmd1bGFyXCI7XHJcbmltcG9ydCB7RGF0YUdyaWRTZXJ2aWNlfSBmcm9tIFwiLi9kYXRhLWdyaWQuc2VydmljZVwiO1xyXG5pbXBvcnQge1Jvd0J1dHRvbnNUZW1wbGF0ZURpcmVjdGl2ZX0gZnJvbSBcIi4vcm93LWJ1dHRvbnMtdGVtcGxhdGUuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7RGF0YUdyaWRGYWN0b3J5fSBmcm9tIFwiLi9kYXRhLWdyaWQuZmFjdG9yeVwiO1xyXG5pbXBvcnQge2RlYm91bmNlVGltZX0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtub3RpZnlfZXJyb3J9IGZyb20gXCIuLi91dGlsL3V0aWxzXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JzLWRhdGEtZ3JpZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtZ3JpZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZGF0YS1ncmlkLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbRGF0YUdyaWRTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0YUdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpXHJcbiAgdGVuYW50PzogYW55ID0gJ1QnO1xyXG4gIEBJbnB1dCgpXHJcbiAgY2xhc3NOYW1lITogYW55O1xyXG4gIEBJbnB1dCgpXHJcbiAgdmlldz86IGFueTtcclxuICBASW5wdXQoKVxyXG4gIGZpbHRlcj86IGFueTtcclxuICBASW5wdXQoKVxyXG4gIGN1c3RvbUNvbHVtbkZuPzogKGNvbHVtbnM6IGFueVtdKSA9PiB2b2lkO1xyXG4gIEBJbnB1dCgpXHJcbiAga2V5RXhwcjogc3RyaW5nID0gJyc7IC8vIOeUqOS6juWunuS+i+WxnuaAp+mAieaLqeWZqO+8jOWKoOi9vee7hOS7tuWAvOaXtuS7pemAieS4reWtl+auteS4uuS4u+mUruiOt+WPlumAieS4reihjOaVsOaNrlxyXG4gIEBJbnB1dCgpXHJcbiAgZGF0YUdyaWROYW1lPzogc3RyaW5nOyAvLyDnlKjkuo7lnKjojrflj5bmlbDmja7ml7blkIzml7bojrflj5blj7DotKbphY3nva7nmoTooYzlhoXmjInpkq5cclxuICBASW5wdXQoKVxyXG4gIGhlaWdodDogYW55O1xyXG4gIEBJbnB1dCgpXHJcbiAgb25seUZyb250RW5kOiBib29sZWFuID0gZmFsc2U7IC8vIOS7heWJjeerr++8jOS4jemAmui/h+iOt+WPluihqOagvOaVsOaNrlxyXG4gIEBJbnB1dCgpXHJcbiAgZGF0YVNvdXJjZTogYW55ID0ge307XHJcbiAgQElucHV0KClcclxuICBzZWxlY3Rpb25Nb2RlOiAnbm9uZScgfCAnbXVsdGlwbGUnIHwgJ3NpbmdsZScgPSAnbm9uZSc7XHJcbiAgQElucHV0KClcclxuICBzZWxlY3RlZFJvd0tleXM6IGFueVtdID0gW107XHJcbiAgQE91dHB1dCgpXHJcbiAgc2VsZWN0ZWRSb3dLZXlzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcclxuICBASW5wdXQoKVxyXG4gIHNob3dSb3dOdW06IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpXHJcbiAgaW5zdGFuY2VMaW5rVHlwZTogJ3RhYicgfCAnZHJhd2VyJyB8ICdub25lJyA9ICd0YWInO1xyXG4gIEBJbnB1dCgpXHJcbiAgZHJhd2VySW5zdGFuY2VMaW5rVmlld0NvbnRhaW5lclJlZjogYW55ID0gdGhpcy52aWV3Q29udGFpbmVyUmVmO1xyXG4gIEBJbnB1dCgpXHJcbiAgZHJhd2VySW5zdGFuY2VMaW5rRm9ybVRlbXBsYXRlOiBhbnk7XHJcbiAgQE91dHB1dCgpXHJcbiAgb25DZWxsUHJlcGFyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KClcclxuICBvbkNvbnRlbnRSZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uRWRpdG9yUHJlcGFyaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpXHJcbiAgb25Sb3dDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uUm93RGJsQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KClcclxuICBvblNlbGVjdGlvbkNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAVmlld0NoaWxkKER4RGF0YUdyaWRDb21wb25lbnQsIHtzdGF0aWM6IHRydWV9KSBwcml2YXRlIGR4RGF0YUdyaWQhOiBEeERhdGFHcmlkQ29tcG9uZW50O1xyXG4gIEBDb250ZW50Q2hpbGQoUm93QnV0dG9uc1RlbXBsYXRlRGlyZWN0aXZlKSBwcm90ZWN0ZWQgcm93QnV0dG9uc1RlbXBsYXRlITogUm93QnV0dG9uc1RlbXBsYXRlRGlyZWN0aXZlO1xyXG4gIGNvbHVtbnM6IGFueVtdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmFjdG9yeTogRGF0YUdyaWRGYWN0b3J5LCBwcm90ZWN0ZWQgc2VydmljZTogRGF0YUdyaWRTZXJ2aWNlLCBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5yZWxvYWQoKTtcclxuICAgIHRoaXMuc2VydmljZS5jZWxsVGVtcGxhdGVMb2FkZWQkLnBpcGUoZGVib3VuY2VUaW1lKDIwMCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICg8YW55PnRoaXMuZHhEYXRhR3JpZC5pbnN0YW5jZSkucmVzaXplKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlbG9hZCgpIHtcclxuICAgIHRoaXMuY29sdW1ucy5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5mYWN0b3J5Lm1ha2VEYXRhR3JpZENvbHVtbnModGhpcy50ZW5hbnQsIHRoaXMuY2xhc3NOYW1lLCB0aGlzLnZpZXcpLnN1YnNjcmliZShjb2x1bW5zID0+IHtcclxuICAgICAgaWYgKHRoaXMuY3VzdG9tQ29sdW1uRm4pIHtcclxuICAgICAgICB0aGlzLmN1c3RvbUNvbHVtbkZuKGNvbHVtbnMpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmluc3RhbmNlTGlua1R5cGUgPT09ICd0YWInIHx8IHRoaXMuaW5zdGFuY2VMaW5rVHlwZSA9PT0gJ2RyYXdlcicpIHtcclxuICAgICAgICBjb2x1bW5zLnVuc2hpZnQoe1xyXG4gICAgICAgICAgZml4ZWQ6IHRydWUsXHJcbiAgICAgICAgICB3aWR0aDogNDgsXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICdpbnN0YW5jZUxpbmtUZW1wbGF0ZScsXHJcbiAgICAgICAgICBhbGlnbm1lbnQ6ICdjZW50ZXInLFxyXG4gICAgICAgICAgY3NzQ2xhc3M6ICdjZWxsLXZlcnRpY2FsLW1pZGRsZSdcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zaG93Um93TnVtKSB7XHJcbiAgICAgICAgY29sdW1ucy51bnNoaWZ0KHtcclxuICAgICAgICAgIGZpeGVkOiB0cnVlLFxyXG4gICAgICAgICAgd2lkdGg6IDQ4LFxyXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAncm93SW5kZXhUZW1wbGF0ZScsXHJcbiAgICAgICAgICBhbGlnbm1lbnQ6ICdjZW50ZXInLFxyXG4gICAgICAgICAgY3NzQ2xhc3M6ICdjZWxsLXZlcnRpY2FsLW1pZGRsZSdcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNvbHVtbnMgPSBjb2x1bW5zO1xyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5vbmx5RnJvbnRFbmQpIHtcclxuICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZSAmJiAhQXJyYXkuaXNBcnJheSh0aGlzLmRhdGFTb3VyY2UpKSB7XHJcbiAgICAgICAgbm90aWZ5X2Vycm9yKCdpZiBvbmx5RnJvbnRFbmQgc2V0IHRydWUsIHlvdSBoYXZlIHRvIHNldCBkYXRhU291cmNlIGFzIGFuIEFycmF5Jyk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IHRoaXMuZmFjdG9yeS5tYWtlRGF0YUdyaWREYXRhU291cmNlKHRoaXMudGVuYW50LCB0aGlzLmNsYXNzTmFtZSwgdGhpcy52aWV3LCB0aGlzLmZpbHRlciwgdGhpcy5rZXlFeHByLCB0aGlzLmRhdGFHcmlkTmFtZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgY29udmVydE11bHRpcGxlVmFsdWVDZWxsVGV4dChjZWxsSW5mbzogYW55KSB7XHJcbiAgICBpZiAoIWNlbGxJbmZvLnZhbHVlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGNlbGxJbmZvLnZhbHVlKSkge1xyXG4gICAgICBpZiAoY2VsbEluZm8uY29sdW1uLmxvb2t1cCkge1xyXG4gICAgICAgIHJldHVybiBjZWxsSW5mby52YWx1ZS5tYXAoKGl0ZW06IGFueSkgPT4gY2VsbEluZm8uY29sdW1uLmxvb2t1cC5jYWxjdWxhdGVDZWxsVmFsdWUoaXRlbSkpLmpvaW4oJzxiciAvPicpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBjZWxsSW5mby52YWx1ZS5qb2luKCc8YnIgLz4nKTtcclxuICAgIH1cclxuICAgIGlmIChjZWxsSW5mby5jb2x1bW4ubG9va3VwKSB7XHJcbiAgICAgIHJldHVybiBjZWxsSW5mby5jb2x1bW4ubG9va3VwLmNhbGN1bGF0ZUNlbGxWYWx1ZShjZWxsSW5mby52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2VsbEluZm8udmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0T3JpZ2luYWxWYWx1ZShjZWxsSW5mbzogYW55LCBrZXk6IGFueSkge1xyXG4gICAgY29uc3QgY29uZmlnID0gY2VsbEluZm8uY29sdW1uW2tleV07XHJcbiAgICBpZiAoY29uZmlnKSB7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gY2VsbEluZm8uZGF0YVtjb25maWcuZmllbGRdO1xyXG4gICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFt2YWx1ZV07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNlbGxJbmZvLmRhdGFba2V5XTtcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkUm93S2V5cygpIHtcclxuICAgIHJldHVybiB0aGlzLmR4RGF0YUdyaWQuaW5zdGFuY2UuZ2V0U2VsZWN0ZWRSb3dLZXlzKCk7XHJcbiAgfVxyXG5cclxuICByZWZyZXNoKGNhbGxiYWNrPzogYW55KSB7XHJcbiAgICB0aGlzLmR4RGF0YUdyaWQuaW5zdGFuY2UucmVmcmVzaCgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICBjYWxsYmFjaygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uRHhEYXRhR3JpZEVkaXRvclByZXBhcmluZygkZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKCRldmVudC5wYXJlbnRUeXBlID09PSAnZmlsdGVyUm93JyAmJiAkZXZlbnQuZWRpdG9yTmFtZSA9PT0gJ2R4VGV4dEJveCcpIHtcclxuICAgICAgJGV2ZW50LmVkaXRvck9wdGlvbnMudmFsdWVDaGFuZ2VFdmVudCA9ICdibHVyJztcclxuICAgICAgJGV2ZW50LmVkaXRvck9wdGlvbnMub25FbnRlcktleSA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICBlLmNvbXBvbmVudC5ibHVyKCk7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uRWRpdG9yUHJlcGFyaW5nLmVtaXQoJGV2ZW50KTtcclxuICB9XHJcbn1cclxuIiwiPGR4LWRhdGEtZ3JpZCBbc2hvd0JvcmRlcnNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgW3Nob3dSb3dMaW5lc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICBbaG92ZXJTdGF0ZUVuYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgW3Jvd0FsdGVybmF0aW9uRW5hYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICBbY29sdW1uQXV0b1dpZHRoXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgIFthbGxvd0NvbHVtblJlc2l6aW5nXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgIGNvbHVtblJlc2l6aW5nTW9kZT1cIndpZGdldFwiXHJcbiAgICAgICAgICAgICAgZGF0ZVNlcmlhbGl6YXRpb25Gb3JtYXQ9XCJ5eXl5L01NL2RkIEhIOm1tOnNzXCJcclxuICAgICAgICAgICAgICBbc3luY0xvb2t1cEZpbHRlclZhbHVlc109XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXHJcbiAgICAgICAgICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgW2hlaWdodF09XCJoZWlnaHRcIlxyXG4gICAgICAgICAgICAgIFtrZXlFeHByXT1cImtleUV4cHJcIlxyXG4gICAgICAgICAgICAgIFtzZWxlY3RlZFJvd0tleXNdPVwic2VsZWN0ZWRSb3dLZXlzXCJcclxuICAgICAgICAgICAgICAoc2VsZWN0ZWRSb3dLZXlzQ2hhbmdlKT1cInNlbGVjdGVkUm93S2V5c0NoYW5nZS5lbWl0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgIChvbkNlbGxQcmVwYXJlZCk9XCJvbkNlbGxQcmVwYXJlZC5lbWl0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgIChvbkNvbnRlbnRSZWFkeSk9XCJvbkNvbnRlbnRSZWFkeS5lbWl0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgIChvbkVkaXRvclByZXBhcmluZyk9XCJvbkR4RGF0YUdyaWRFZGl0b3JQcmVwYXJpbmcoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgKG9uUm93Q2xpY2spPVwib25Sb3dDbGljay5lbWl0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgIChvblJvd0RibENsaWNrKT1cIm9uUm93RGJsQ2xpY2suZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAob25TZWxlY3Rpb25DaGFuZ2VkKT1cIm9uU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KCRldmVudClcIj5cclxuICA8ZHhvLXNvcnRpbmcgbW9kZT1cIm11bHRpcGxlXCI+PC9keG8tc29ydGluZz5cclxuICA8ZHhvLXNlbGVjdGlvbiBbbW9kZV09XCJzZWxlY3Rpb25Nb2RlXCIgc2VsZWN0QWxsTW9kZT1cInBhZ2VcIiBzaG93Q2hlY2tCb3hlc01vZGU9XCJhbHdheXNcIj48L2R4by1zZWxlY3Rpb24+XHJcbiAgPGR4by1oZWFkZXItZmlsdGVyIFt2aXNpYmxlXT1cIiFvbmx5RnJvbnRFbmRcIj5cclxuICAgIDxkeG8tc2VhcmNoIFtlbmFibGVkXT1cInRydWVcIj48L2R4by1zZWFyY2g+XHJcbiAgICA8ZHhvLXRleHRzIFtva109XCIn56Gu5a6aJ1wiPjwvZHhvLXRleHRzPlxyXG4gIDwvZHhvLWhlYWRlci1maWx0ZXI+XHJcbiAgPGR4by1maWx0ZXItcm93IFt2aXNpYmxlXT1cInRydWVcIj48L2R4by1maWx0ZXItcm93PlxyXG4gIDxkeG8tcmVtb3RlLW9wZXJhdGlvbnMgW2ZpbHRlcmluZ109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtzb3J0aW5nXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3BhZ2luZ109XCJ0cnVlXCI+XHJcbiAgPC9keG8tcmVtb3RlLW9wZXJhdGlvbnM+XHJcbiAgPGR4by1wYWdpbmcgW3BhZ2VTaXplXT1cIjE1XCI+PC9keG8tcGFnaW5nPlxyXG4gIDxkeG8tcGFnZXIgW3Zpc2libGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICBbc2hvd0luZm9dPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICBpbmZvVGV4dD1cIuesrHswfemhte+8jOWFsXsxfemhte+8iOWFsXsyfeS4qumhueebru+8iVwiXHJcbiAgICAgICAgICAgICBbc2hvd1BhZ2VTaXplU2VsZWN0b3JdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICBbYWxsb3dlZFBhZ2VTaXplc109XCJbMTUsIDMwLCA1MF1cIlxyXG4gID48L2R4by1wYWdlcj5cclxuICA8ZHhvLXNjcm9sbGluZyBzaG93U2Nyb2xsYmFyPVwiYWx3YXlzXCI+PC9keG8tc2Nyb2xsaW5nPlxyXG4gIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgY2VsbEluZm8gb2YgJ3Jvd0luZGV4VGVtcGxhdGUnXCI+XHJcbiAgICB7eyBjZWxsSW5mby5yb3dJbmRleCArIDEgfX1cclxuICA8L2Rpdj5cclxuICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGNlbGxJbmZvIG9mICdpbnN0YW5jZUxpbmtUZW1wbGF0ZSdcIj5cclxuICAgIDxycy1pbnN0YW5jZS1saW5rLXRlbXBsYXRlIFt0ZW5hbnRdPVwidGVuYW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc05hbWVdPVwiY2xhc3NOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvaWRdPVwiY2VsbEluZm8uZGF0YS5vaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luc3RhbmNlTGlua1R5cGVdPVwiaW5zdGFuY2VMaW5rVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZHJhd2VyVmlld0NvbnRhaW5lclJlZl09XCJkcmF3ZXJJbnN0YW5jZUxpbmtWaWV3Q29udGFpbmVyUmVmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkcmF3ZXJGb3JtVGVtcGxhdGVdPVwiZHJhd2VySW5zdGFuY2VMaW5rRm9ybVRlbXBsYXRlXCI+XHJcbiAgICA8L3JzLWluc3RhbmNlLWxpbmstdGVtcGxhdGU+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBjZWxsSW5mbyBvZiAncm93QnV0dG9uc1RlbXBsYXRlJ1wiPlxyXG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJyb3dCdXR0b25zVGVtcGxhdGUudGVtcGxhdGVSZWZcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDogY2VsbEluZm8sIGNlbGxUZW1wbGF0ZUxvYWRlZCQ6IHNlcnZpY2UuY2VsbFRlbXBsYXRlTG9hZGVkJH1cIj48L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGNlbGxJbmZvIG9mICdtdWx0aXBsZVZhbHVlQ2VsbFRlbXBsYXRlJ1wiPlxyXG4gICAgPGRpdiBbaW5uZXJIVE1MXT1cImNvbnZlcnRNdWx0aXBsZVZhbHVlQ2VsbFRleHQoY2VsbEluZm8pXCI+PC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBjZWxsSW5mbyBvZiAndGV4dENlbGxUZW1wbGF0ZSdcIj5cclxuICAgIDxkaXYgI3RleHREaXYgc3R5bGU9XCJ0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsgb3ZlcmZsb3c6IGhpZGRlbjsgY3Vyc29yOiBwb2ludGVyO1wiPnt7IGNlbGxJbmZvLnZhbHVlIH19PC9kaXY+XHJcbiAgICA8ZHgtdG9vbHRpcCBbdGFyZ2V0XT1cInRleHREaXZcIlxyXG4gICAgICAgICAgICAgICAgW3Bvc2l0aW9uXT1cIid0b3AnXCJcclxuICAgICAgICAgICAgICAgIFtzaG93RXZlbnRdPVwiJ2NsaWNrJ1wiPlxyXG4gICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGRhdGEgb2YgJ2NvbnRlbnQnXCI+XHJcbiAgICAgICAgPHAgc3R5bGU9XCJtYXgtd2lkdGg6IDMyMHB4OyB0ZXh0LWFsaWduOiBsZWZ0OyB3aGl0ZS1zcGFjZTogbm9ybWFsO1wiIFtpbm5lclRleHRdPVwiY2VsbEluZm8udmFsdWVcIj48L3A+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9keC10b29sdGlwPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgY2VsbEluZm8gb2YgJ2ZpbGVDZWxsVGVtcGxhdGUnXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWxlIG9mIGNlbGxJbmZvLnZhbHVlXCI+XHJcbiAgICAgIDxycy1maWxlLWNlbGwtdGVtcGxhdGUgW2ZpbGVdPVwiZmlsZVwiPjwvcnMtZmlsZS1jZWxsLXRlbXBsYXRlPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBjZWxsSW5mbyBvZiAndXNlckNlbGxUZW1wbGF0ZSdcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHVzZXIgb2YgZ2V0T3JpZ2luYWxWYWx1ZShjZWxsSW5mbywgJ3VzZXJJbmZvJylcIj5cclxuICAgICAgPHJzLXVzZXItaW5mby10ZW1wbGF0ZSBbdWlkXT1cInVzZXJcIiBbY2VsbEluZm9dPVwiY2VsbEluZm9cIj48L3JzLXVzZXItaW5mby10ZW1wbGF0ZT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgY2VsbEluZm8gb2YgJ3VuaXRDZWxsVGVtcGxhdGUnXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB1bml0IG9mIGdldE9yaWdpbmFsVmFsdWUoY2VsbEluZm8sICd1bml0SW5mbycpXCI+XHJcbiAgICAgIDxycy11bml0LWluZm8tdGVtcGxhdGUgW3VpZF09XCJ1bml0XCIgW2NlbGxJbmZvXT1cImNlbGxJbmZvXCI+PC9ycy11bml0LWluZm8tdGVtcGxhdGU+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuPC9keC1kYXRhLWdyaWQ+XHJcbiJdfQ==