@enigmatry/entry-components 16.0.1-preview.4 → 16.0.1-preview.9
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/assets/nswag-templates/Client.RequestBody.liquid +95 -0
- package/assets/nswag-templates/Client.RequestUrl.liquid +68 -0
- package/assets/nswag-templates/ConvertToClass.liquid +65 -0
- package/assets/nswag-templates/original/Client.RequestBody.liquid +89 -0
- package/assets/nswag-templates/original/Client.RequestUrl.liquid +60 -0
- package/assets/nswag-templates/original/ConvertToClass.liquid +65 -0
- package/assets/nswag-templates/original/File.FormatDate.liquid +5 -0
- package/assets/nswag-templates/original/File.ParseDateOnly.liquid +5 -0
- package/esm2022/table/components/entry-table/entry-table.component.mjs +6 -3
- package/fesm2022/enigmatry-entry-components-table.mjs +5 -2
- package/fesm2022/enigmatry-entry-components-table.mjs.map +1 -1
- package/package.json +1 -1
- package/styles/_generator.scss +2 -0
- package/styles/modules/_default-theme.scss +9 -5
- package/styles/modules/components/toggle/_generator.scss +45 -0
- package/table/components/entry-table/entry-table.component.d.ts +1 -0
|
@@ -149,15 +149,18 @@ export class EntryTableComponent {
|
|
|
149
149
|
scrollToTop() {
|
|
150
150
|
this._elementRef.nativeElement.scrollTop = 0;
|
|
151
151
|
}
|
|
152
|
+
get shouldShowPaginator() {
|
|
153
|
+
return this.showPaginator && this._data.length > 0;
|
|
154
|
+
}
|
|
152
155
|
convertToKebabCase(value) {
|
|
153
156
|
return value?.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();
|
|
154
157
|
}
|
|
155
158
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EntryTableComponent, deps: [{ token: ENTRY_TABLE_CONFIG }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
156
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EntryTableComponent, selector: "entry-table", inputs: { displayedColumns: "displayedColumns", columns: "columns", data: "data", total: "total", loading: "loading", showPaginator: "showPaginator", pageDisabled: "pageDisabled", showFirstLastButtons: "showFirstLastButtons", pageIndex: "pageIndex", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", hidePageSize: "hidePageSize", paginationTemplate: "paginationTemplate", sortActive: "sortActive", sortDirection: "sortDirection", sortDisableClear: "sortDisableClear", sortDisabled: "sortDisabled", sortStart: "sortStart", rowHover: "rowHover", rowStriped: "rowStriped", rowFocusVisible: "rowFocusVisible", multiSelectable: "multiSelectable", rowSelected: "rowSelected", rowSelectable: "rowSelectable", showSelectAllCheckbox: "showSelectAllCheckbox", rowSelectionFormatter: "rowSelectionFormatter", rowClassFormatter: "rowClassFormatter", showContextMenu: "showContextMenu", contextMenuItems: "contextMenuItems", contextMenuTemplate: "contextMenuTemplate", rowContextMenuFormatter: "rowContextMenuFormatter", noResultText: "noResultText", noResultTemplate: "noResultTemplate", headerTemplate: "headerTemplate", cellTemplate: "cellTemplate" }, outputs: { pageChange: "pageChange", sortChange: "sortChange", rowClick: "rowClick", rowSelectionChange: "rowSelectionChange", contextMenuItemSelected: "contextMenuItemSelected" }, host: { properties: { "class": "this.className" } }, usesOnChanges: true, ngImport: i0, template: "<!-- Table content -->\n<table mat-table \n [ngClass]=\"{'mat-table-hover': rowHover, 'mat-table-striped': rowStriped, 'mat-table-with-data': !hasNoResult }\"\n [dataSource]=\"dataSource\"\n matSort\n [matSortActive]=\"sortActive\"\n [matSortDirection]=\"sortDirection\"\n [matSortDisableClear]=\"sortDisableClear\"\n [matSortDisabled]=\"sortDisabled\"\n [matSortStart]=\"sortStart\"\n (matSortChange)=\"sortChange.emit($event)\">\n\n <!-- Selection column -->\n <ng-container *ngIf=\"rowSelectable\" [matColumnDef]=\"selectionColumn\">\n <th mat-header-cell *matHeaderCellDef class=\"selection-cell\">\n <mat-checkbox *ngIf=\"multiSelectable && showSelectAllCheckbox\"\n [checked]=\"rowSelection.hasValue() && isAllSelected()\"\n [indeterminate]=\"rowSelection.hasValue() && !isAllSelected()\"\n (change)=\"$event ? toggleSelectAllCheckbox() : null\">\n </mat-checkbox>\n </th>\n <td mat-cell *matCellDef=\"let row; let index = index; let dataIndex = dataIndex;\"\n class=\"selection-cell\"\n (click)=\"$event.stopPropagation()\">\n <mat-checkbox\n *ngIf=\"multiSelectable && !(rowSelectionFormatter.hideCheckbox && rowSelectionFormatter.hideCheckbox!(row))\"\n [disabled]=\"rowSelectionFormatter.disabled && rowSelectionFormatter.disabled!(row)\"\n [checked]=\"rowSelection.isSelected(row)\"\n (change)=\"$event ? toggleRowSelection(row) : null\">\n </mat-checkbox>\n <mat-radio-button\n *ngIf=\"!multiSelectable && !(rowSelectionFormatter.hideCheckbox && rowSelectionFormatter.hideCheckbox!(row))\"\n [disabled]=\"rowSelectionFormatter.disabled && rowSelectionFormatter.disabled!(row)\"\n [checked]=\"rowSelection.isSelected(row)\"\n [value]=\"rowSelection.isSelected(row)\"\n (change)=\"$event ? toggleRowSelection(row) : null\">\n </mat-radio-button>\n </td>\n </ng-container>\n\n <!-- Context menu column -->\n <ng-container *ngIf=\"showContextMenu\" [matColumnDef]=\"contextMenuColumn\">\n <th mat-header-cell *matHeaderCellDef class=\"action-cell\"></th>\n <td mat-cell *matCellDef=\"let row; let index = index; let dataIndex = dataIndex;\"\n class=\"action-cell\">\n <ng-template [ngIf]=\"isTemplateRef(contextMenuTemplate)\" [ngIfElse]=\"contextMenuTpl\">\n <ng-template [ngTemplateOutlet]=\"contextMenuTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row }\">\n </ng-template>\n </ng-template>\n <ng-template #contextMenuTpl>\n <entry-cell-context-menu\n [items]=\"contextMenuItems\"\n [rowData]=\"row\"\n [rowMenuFormatter]=\"rowContextMenuFormatter\"\n (selected)=\"contextMenuItemSelected.emit({itemId: $event, rowData: row})\"\n ></entry-cell-context-menu>\n </ng-template>\n </td>\n </ng-container>\n\n <ng-container *ngFor=\"let col of columns;\">\n <ng-container [matColumnDef]=\"col.field\"\n [sticky]=\"col.pinned==='left'\" [stickyEnd]=\"col.pinned==='right'\">\n <th mat-header-cell *matHeaderCellDef\n [class]=\"getColumnClassList(col)\"\n [ngClass]=\"{'mat-table-sticky-left': col.pinned === 'left', 'mat-table-sticky-right': col.pinned === 'right'}\"\n [ngStyle]=\"{'width': col.width, 'min-width': col.width}\">\n <ng-template [ngIf]=\"isTemplateRef(headerTemplate)\" [ngIfElse]=\"headerTpl\">\n <ng-template [ngTemplateOutlet]=\"headerTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\">\n </ng-template>\n </ng-template>\n <ng-template #headerTpl>\n <ng-template [ngIf]=\"headerTemplate && isTemplateRef(headerTemplate[col.field])\"\n [ngIfElse]=\"defaultHeaderTpl\">\n <ng-template [ngTemplateOutlet]=\"headerTemplate[col.field]\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\">\n </ng-template>\n </ng-template>\n </ng-template>\n <ng-template #defaultHeaderTpl>\n <div [mat-sort-header]=\"col.sortProp?.id || col.field\"\n [disabled]=\"!col.sortable\"\n [disableClear]=\"col.sortProp?.disableClear\">\n <span>{{col.header}}</span>\n </div>\n </ng-template>\n </th>\n\n <td mat-cell *matCellDef=\"let row; let index = index; let dataIndex = dataIndex;\"\n [class]=\"getColumnClassList(col)\"\n [ngClass]=\"{'mat-table-sticky-left': col.pinned === 'left', 'mat-table-sticky-right': col.pinned === 'right'}\"\n [ngStyle]=\"{'width': col.width, 'min-width': col.width}\">\n <ng-template [ngIf]=\"isTemplateRef(cellTemplate)\" [ngIfElse]=\"cellTpl\">\n <ng-template [ngTemplateOutlet]=\"cellTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row, index: getIndex(index, dataIndex), colDef: col }\">\n </ng-template>\n </ng-template>\n <ng-template #cellTpl>\n <ng-template [ngIf]=\"cellTemplate && isTemplateRef(cellTemplate[col.field])\"\n [ngIfElse]=\"colDefCellTpl\">\n <ng-template [ngTemplateOutlet]=\"cellTemplate[col.field]\"\n [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row, index: getIndex(index, dataIndex), colDef: col }\">\n </ng-template>\n </ng-template>\n </ng-template>\n <ng-template #colDefCellTpl>\n <ng-template [ngIf]=\"col.cellTemplate\" [ngIfElse]=\"defaultCellTpl\"\n [ngTemplateOutlet]=\"col.cellTemplate ?? null\"\n [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row, index: getIndex(index, dataIndex), colDef: col }\">\n </ng-template>\n </ng-template>\n <ng-template #defaultCellTpl>\n <entry-cell [rowData]=\"row\" [colDef]=\"col\"></entry-cell>\n </ng-template>\n </td>\n </ng-container>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\n <tr mat-row\n *matRowDef=\"let row; let index = index; let dataIndex = dataIndex; columns: displayedColumns;\"\n [ngClass]=\"getRowClassList(row, getIndex(index, dataIndex))\"\n [attr.tabindex]=\"rowFocusVisible ? 0 : -1\"\n (click)=\"rowClick.emit(row)\"\n (keyup.enter)=\"rowClick.emit(row)\">\n </tr>\n</table>\n\n<!-- No results -->\n<div class=\"no-results mat-body-2\" *ngIf=\"hasNoResult\">\n <ng-template [ngIf]=\"isTemplateRef(noResultTemplate)\" [ngIfElse]=\"defaultNoResultTpl\">\n <ng-template [ngTemplateOutlet]=\"noResultTemplate\"></ng-template>\n </ng-template>\n <ng-template #defaultNoResultTpl>{{noResultText}}</ng-template>\n</div>\n\n<!-- Pagination -->\n<ng-template [ngIf]=\"isTemplateRef(paginationTemplate)\" [ngIfElse]=\"defaultPaginationTemplate\">\n <ng-template [ngTemplateOutlet]=\"paginationTemplate\"></ng-template>\n</ng-template>\n<ng-template #defaultPaginationTemplate>\n <mat-paginator class=\"pagination\" *ngIf=\"showPaginator\"\n [showFirstLastButtons]=\"showFirstLastButtons\"\n [length]=\"total\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [hidePageSize]=\"hidePageSize\"\n (page)=\"handlePage($event)\"\n [disabled]=\"pageDisabled\">\n </mat-paginator>\n</ng-template>", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i2.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i2.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i2.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i2.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i2.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i2.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i2.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i3.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i3.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: i4.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i6.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "component", type: i7.EntryCellComponent, selector: "entry-cell", inputs: ["rowData", "colDef"] }, { kind: "component", type: i8.EntryCellContextMenuComponent, selector: "entry-cell-context-menu", inputs: ["items", "rowMenuFormatter", "rowData"], outputs: ["selected"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
159
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EntryTableComponent, selector: "entry-table", inputs: { displayedColumns: "displayedColumns", columns: "columns", data: "data", total: "total", loading: "loading", showPaginator: "showPaginator", pageDisabled: "pageDisabled", showFirstLastButtons: "showFirstLastButtons", pageIndex: "pageIndex", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", hidePageSize: "hidePageSize", paginationTemplate: "paginationTemplate", sortActive: "sortActive", sortDirection: "sortDirection", sortDisableClear: "sortDisableClear", sortDisabled: "sortDisabled", sortStart: "sortStart", rowHover: "rowHover", rowStriped: "rowStriped", rowFocusVisible: "rowFocusVisible", multiSelectable: "multiSelectable", rowSelected: "rowSelected", rowSelectable: "rowSelectable", showSelectAllCheckbox: "showSelectAllCheckbox", rowSelectionFormatter: "rowSelectionFormatter", rowClassFormatter: "rowClassFormatter", showContextMenu: "showContextMenu", contextMenuItems: "contextMenuItems", contextMenuTemplate: "contextMenuTemplate", rowContextMenuFormatter: "rowContextMenuFormatter", noResultText: "noResultText", noResultTemplate: "noResultTemplate", headerTemplate: "headerTemplate", cellTemplate: "cellTemplate" }, outputs: { pageChange: "pageChange", sortChange: "sortChange", rowClick: "rowClick", rowSelectionChange: "rowSelectionChange", contextMenuItemSelected: "contextMenuItemSelected" }, host: { properties: { "class": "this.className" } }, usesOnChanges: true, ngImport: i0, template: "<!-- Table content -->\n<table mat-table\n [ngClass]=\"{'mat-table-hover': rowHover, 'mat-table-striped': rowStriped, 'mat-table-with-data': !hasNoResult }\"\n [dataSource]=\"dataSource\"\n matSort\n [matSortActive]=\"sortActive\"\n [matSortDirection]=\"sortDirection\"\n [matSortDisableClear]=\"sortDisableClear\"\n [matSortDisabled]=\"sortDisabled\"\n [matSortStart]=\"sortStart\"\n (matSortChange)=\"sortChange.emit($event)\">\n\n <!-- Selection column -->\n <ng-container *ngIf=\"rowSelectable\" [matColumnDef]=\"selectionColumn\">\n <th mat-header-cell *matHeaderCellDef class=\"selection-cell\">\n <mat-checkbox *ngIf=\"multiSelectable && showSelectAllCheckbox\"\n [checked]=\"rowSelection.hasValue() && isAllSelected()\"\n [indeterminate]=\"rowSelection.hasValue() && !isAllSelected()\"\n (change)=\"$event ? toggleSelectAllCheckbox() : null\">\n </mat-checkbox>\n </th>\n <td mat-cell *matCellDef=\"let row; let index = index; let dataIndex = dataIndex;\"\n class=\"selection-cell\"\n (click)=\"$event.stopPropagation()\">\n <mat-checkbox\n *ngIf=\"multiSelectable && !(rowSelectionFormatter.hideCheckbox && rowSelectionFormatter.hideCheckbox!(row))\"\n [disabled]=\"rowSelectionFormatter.disabled && rowSelectionFormatter.disabled!(row)\"\n [checked]=\"rowSelection.isSelected(row)\"\n (change)=\"$event ? toggleRowSelection(row) : null\">\n </mat-checkbox>\n <mat-radio-button\n *ngIf=\"!multiSelectable && !(rowSelectionFormatter.hideCheckbox && rowSelectionFormatter.hideCheckbox!(row))\"\n [disabled]=\"rowSelectionFormatter.disabled && rowSelectionFormatter.disabled!(row)\"\n [checked]=\"rowSelection.isSelected(row)\"\n [value]=\"rowSelection.isSelected(row)\"\n (change)=\"$event ? toggleRowSelection(row) : null\">\n </mat-radio-button>\n </td>\n </ng-container>\n\n <!-- Context menu column -->\n <ng-container *ngIf=\"showContextMenu\" [matColumnDef]=\"contextMenuColumn\">\n <th mat-header-cell *matHeaderCellDef class=\"action-cell\"></th>\n <td mat-cell *matCellDef=\"let row; let index = index; let dataIndex = dataIndex;\"\n class=\"action-cell\">\n <ng-template [ngIf]=\"isTemplateRef(contextMenuTemplate)\" [ngIfElse]=\"contextMenuTpl\">\n <ng-template [ngTemplateOutlet]=\"contextMenuTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row }\">\n </ng-template>\n </ng-template>\n <ng-template #contextMenuTpl>\n <entry-cell-context-menu\n [items]=\"contextMenuItems\"\n [rowData]=\"row\"\n [rowMenuFormatter]=\"rowContextMenuFormatter\"\n (selected)=\"contextMenuItemSelected.emit({itemId: $event, rowData: row})\"\n ></entry-cell-context-menu>\n </ng-template>\n </td>\n </ng-container>\n\n <ng-container *ngFor=\"let col of columns;\">\n <ng-container [matColumnDef]=\"col.field\"\n [sticky]=\"col.pinned==='left'\" [stickyEnd]=\"col.pinned==='right'\">\n <th mat-header-cell *matHeaderCellDef\n [class]=\"getColumnClassList(col)\"\n [ngClass]=\"{'mat-table-sticky-left': col.pinned === 'left', 'mat-table-sticky-right': col.pinned === 'right'}\"\n [ngStyle]=\"{'width': col.width, 'min-width': col.width}\">\n <ng-template [ngIf]=\"isTemplateRef(headerTemplate)\" [ngIfElse]=\"headerTpl\">\n <ng-template [ngTemplateOutlet]=\"headerTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\">\n </ng-template>\n </ng-template>\n <ng-template #headerTpl>\n <ng-template [ngIf]=\"headerTemplate && isTemplateRef(headerTemplate[col.field])\"\n [ngIfElse]=\"defaultHeaderTpl\">\n <ng-template [ngTemplateOutlet]=\"headerTemplate[col.field]\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\">\n </ng-template>\n </ng-template>\n </ng-template>\n <ng-template #defaultHeaderTpl>\n <div [mat-sort-header]=\"col.sortProp?.id || col.field\"\n [disabled]=\"!col.sortable\"\n [disableClear]=\"col.sortProp?.disableClear\">\n <span>{{col.header}}</span>\n </div>\n </ng-template>\n </th>\n\n <td mat-cell *matCellDef=\"let row; let index = index; let dataIndex = dataIndex;\"\n [class]=\"getColumnClassList(col)\"\n [ngClass]=\"{'mat-table-sticky-left': col.pinned === 'left', 'mat-table-sticky-right': col.pinned === 'right'}\"\n [ngStyle]=\"{'width': col.width, 'min-width': col.width}\">\n <ng-template [ngIf]=\"isTemplateRef(cellTemplate)\" [ngIfElse]=\"cellTpl\">\n <ng-template [ngTemplateOutlet]=\"cellTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row, index: getIndex(index, dataIndex), colDef: col }\">\n </ng-template>\n </ng-template>\n <ng-template #cellTpl>\n <ng-template [ngIf]=\"cellTemplate && isTemplateRef(cellTemplate[col.field])\"\n [ngIfElse]=\"colDefCellTpl\">\n <ng-template [ngTemplateOutlet]=\"cellTemplate[col.field]\"\n [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row, index: getIndex(index, dataIndex), colDef: col }\">\n </ng-template>\n </ng-template>\n </ng-template>\n <ng-template #colDefCellTpl>\n <ng-template [ngIf]=\"col.cellTemplate\" [ngIfElse]=\"defaultCellTpl\"\n [ngTemplateOutlet]=\"col.cellTemplate ?? null\"\n [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row, index: getIndex(index, dataIndex), colDef: col }\">\n </ng-template>\n </ng-template>\n <ng-template #defaultCellTpl>\n <entry-cell [rowData]=\"row\" [colDef]=\"col\"></entry-cell>\n </ng-template>\n </td>\n </ng-container>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\n <tr mat-row\n *matRowDef=\"let row; let index = index; let dataIndex = dataIndex; columns: displayedColumns;\"\n [ngClass]=\"getRowClassList(row, getIndex(index, dataIndex))\"\n [attr.tabindex]=\"rowFocusVisible ? 0 : -1\"\n (click)=\"rowClick.emit(row)\"\n (keyup.enter)=\"rowClick.emit(row)\">\n </tr>\n</table>\n\n<!-- No results -->\n<div class=\"no-results mat-body-2\" *ngIf=\"hasNoResult\">\n <ng-template [ngIf]=\"isTemplateRef(noResultTemplate)\" [ngIfElse]=\"defaultNoResultTpl\">\n <ng-template [ngTemplateOutlet]=\"noResultTemplate\"></ng-template>\n </ng-template>\n <ng-template #defaultNoResultTpl>{{noResultText}}</ng-template>\n</div>\n\n<!-- Pagination -->\n<ng-template [ngIf]=\"isTemplateRef(paginationTemplate)\" [ngIfElse]=\"defaultPaginationTemplate\">\n <ng-template [ngTemplateOutlet]=\"paginationTemplate\"></ng-template>\n</ng-template>\n<ng-template #defaultPaginationTemplate>\n <mat-paginator class=\"pagination\" *ngIf=\"shouldShowPaginator\"\n [showFirstLastButtons]=\"showFirstLastButtons\"\n [length]=\"total\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [hidePageSize]=\"hidePageSize\"\n (page)=\"handlePage($event)\"\n [disabled]=\"pageDisabled\">\n </mat-paginator>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i2.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i2.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i2.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i2.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i2.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i2.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i2.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i3.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i3.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: i4.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i6.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "component", type: i7.EntryCellComponent, selector: "entry-cell", inputs: ["rowData", "colDef"] }, { kind: "component", type: i8.EntryCellContextMenuComponent, selector: "entry-cell-context-menu", inputs: ["items", "rowMenuFormatter", "rowData"], outputs: ["selected"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
157
160
|
}
|
|
158
161
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EntryTableComponent, decorators: [{
|
|
159
162
|
type: Component,
|
|
160
|
-
args: [{ selector: 'entry-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- Table content -->\n<table mat-table
|
|
163
|
+
args: [{ selector: 'entry-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- Table content -->\n<table mat-table\n [ngClass]=\"{'mat-table-hover': rowHover, 'mat-table-striped': rowStriped, 'mat-table-with-data': !hasNoResult }\"\n [dataSource]=\"dataSource\"\n matSort\n [matSortActive]=\"sortActive\"\n [matSortDirection]=\"sortDirection\"\n [matSortDisableClear]=\"sortDisableClear\"\n [matSortDisabled]=\"sortDisabled\"\n [matSortStart]=\"sortStart\"\n (matSortChange)=\"sortChange.emit($event)\">\n\n <!-- Selection column -->\n <ng-container *ngIf=\"rowSelectable\" [matColumnDef]=\"selectionColumn\">\n <th mat-header-cell *matHeaderCellDef class=\"selection-cell\">\n <mat-checkbox *ngIf=\"multiSelectable && showSelectAllCheckbox\"\n [checked]=\"rowSelection.hasValue() && isAllSelected()\"\n [indeterminate]=\"rowSelection.hasValue() && !isAllSelected()\"\n (change)=\"$event ? toggleSelectAllCheckbox() : null\">\n </mat-checkbox>\n </th>\n <td mat-cell *matCellDef=\"let row; let index = index; let dataIndex = dataIndex;\"\n class=\"selection-cell\"\n (click)=\"$event.stopPropagation()\">\n <mat-checkbox\n *ngIf=\"multiSelectable && !(rowSelectionFormatter.hideCheckbox && rowSelectionFormatter.hideCheckbox!(row))\"\n [disabled]=\"rowSelectionFormatter.disabled && rowSelectionFormatter.disabled!(row)\"\n [checked]=\"rowSelection.isSelected(row)\"\n (change)=\"$event ? toggleRowSelection(row) : null\">\n </mat-checkbox>\n <mat-radio-button\n *ngIf=\"!multiSelectable && !(rowSelectionFormatter.hideCheckbox && rowSelectionFormatter.hideCheckbox!(row))\"\n [disabled]=\"rowSelectionFormatter.disabled && rowSelectionFormatter.disabled!(row)\"\n [checked]=\"rowSelection.isSelected(row)\"\n [value]=\"rowSelection.isSelected(row)\"\n (change)=\"$event ? toggleRowSelection(row) : null\">\n </mat-radio-button>\n </td>\n </ng-container>\n\n <!-- Context menu column -->\n <ng-container *ngIf=\"showContextMenu\" [matColumnDef]=\"contextMenuColumn\">\n <th mat-header-cell *matHeaderCellDef class=\"action-cell\"></th>\n <td mat-cell *matCellDef=\"let row; let index = index; let dataIndex = dataIndex;\"\n class=\"action-cell\">\n <ng-template [ngIf]=\"isTemplateRef(contextMenuTemplate)\" [ngIfElse]=\"contextMenuTpl\">\n <ng-template [ngTemplateOutlet]=\"contextMenuTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row }\">\n </ng-template>\n </ng-template>\n <ng-template #contextMenuTpl>\n <entry-cell-context-menu\n [items]=\"contextMenuItems\"\n [rowData]=\"row\"\n [rowMenuFormatter]=\"rowContextMenuFormatter\"\n (selected)=\"contextMenuItemSelected.emit({itemId: $event, rowData: row})\"\n ></entry-cell-context-menu>\n </ng-template>\n </td>\n </ng-container>\n\n <ng-container *ngFor=\"let col of columns;\">\n <ng-container [matColumnDef]=\"col.field\"\n [sticky]=\"col.pinned==='left'\" [stickyEnd]=\"col.pinned==='right'\">\n <th mat-header-cell *matHeaderCellDef\n [class]=\"getColumnClassList(col)\"\n [ngClass]=\"{'mat-table-sticky-left': col.pinned === 'left', 'mat-table-sticky-right': col.pinned === 'right'}\"\n [ngStyle]=\"{'width': col.width, 'min-width': col.width}\">\n <ng-template [ngIf]=\"isTemplateRef(headerTemplate)\" [ngIfElse]=\"headerTpl\">\n <ng-template [ngTemplateOutlet]=\"headerTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\">\n </ng-template>\n </ng-template>\n <ng-template #headerTpl>\n <ng-template [ngIf]=\"headerTemplate && isTemplateRef(headerTemplate[col.field])\"\n [ngIfElse]=\"defaultHeaderTpl\">\n <ng-template [ngTemplateOutlet]=\"headerTemplate[col.field]\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\">\n </ng-template>\n </ng-template>\n </ng-template>\n <ng-template #defaultHeaderTpl>\n <div [mat-sort-header]=\"col.sortProp?.id || col.field\"\n [disabled]=\"!col.sortable\"\n [disableClear]=\"col.sortProp?.disableClear\">\n <span>{{col.header}}</span>\n </div>\n </ng-template>\n </th>\n\n <td mat-cell *matCellDef=\"let row; let index = index; let dataIndex = dataIndex;\"\n [class]=\"getColumnClassList(col)\"\n [ngClass]=\"{'mat-table-sticky-left': col.pinned === 'left', 'mat-table-sticky-right': col.pinned === 'right'}\"\n [ngStyle]=\"{'width': col.width, 'min-width': col.width}\">\n <ng-template [ngIf]=\"isTemplateRef(cellTemplate)\" [ngIfElse]=\"cellTpl\">\n <ng-template [ngTemplateOutlet]=\"cellTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row, index: getIndex(index, dataIndex), colDef: col }\">\n </ng-template>\n </ng-template>\n <ng-template #cellTpl>\n <ng-template [ngIf]=\"cellTemplate && isTemplateRef(cellTemplate[col.field])\"\n [ngIfElse]=\"colDefCellTpl\">\n <ng-template [ngTemplateOutlet]=\"cellTemplate[col.field]\"\n [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row, index: getIndex(index, dataIndex), colDef: col }\">\n </ng-template>\n </ng-template>\n </ng-template>\n <ng-template #colDefCellTpl>\n <ng-template [ngIf]=\"col.cellTemplate\" [ngIfElse]=\"defaultCellTpl\"\n [ngTemplateOutlet]=\"col.cellTemplate ?? null\"\n [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row, index: getIndex(index, dataIndex), colDef: col }\">\n </ng-template>\n </ng-template>\n <ng-template #defaultCellTpl>\n <entry-cell [rowData]=\"row\" [colDef]=\"col\"></entry-cell>\n </ng-template>\n </td>\n </ng-container>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\n <tr mat-row\n *matRowDef=\"let row; let index = index; let dataIndex = dataIndex; columns: displayedColumns;\"\n [ngClass]=\"getRowClassList(row, getIndex(index, dataIndex))\"\n [attr.tabindex]=\"rowFocusVisible ? 0 : -1\"\n (click)=\"rowClick.emit(row)\"\n (keyup.enter)=\"rowClick.emit(row)\">\n </tr>\n</table>\n\n<!-- No results -->\n<div class=\"no-results mat-body-2\" *ngIf=\"hasNoResult\">\n <ng-template [ngIf]=\"isTemplateRef(noResultTemplate)\" [ngIfElse]=\"defaultNoResultTpl\">\n <ng-template [ngTemplateOutlet]=\"noResultTemplate\"></ng-template>\n </ng-template>\n <ng-template #defaultNoResultTpl>{{noResultText}}</ng-template>\n</div>\n\n<!-- Pagination -->\n<ng-template [ngIf]=\"isTemplateRef(paginationTemplate)\" [ngIfElse]=\"defaultPaginationTemplate\">\n <ng-template [ngTemplateOutlet]=\"paginationTemplate\"></ng-template>\n</ng-template>\n<ng-template #defaultPaginationTemplate>\n <mat-paginator class=\"pagination\" *ngIf=\"shouldShowPaginator\"\n [showFirstLastButtons]=\"showFirstLastButtons\"\n [length]=\"total\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [hidePageSize]=\"hidePageSize\"\n (page)=\"handlePage($event)\"\n [disabled]=\"pageDisabled\">\n </mat-paginator>\n</ng-template>\n" }]
|
|
161
164
|
}], ctorParameters: function () { return [{ type: i9.EntryTableConfig, decorators: [{
|
|
162
165
|
type: Inject,
|
|
163
166
|
args: [ENTRY_TABLE_CONFIG]
|
|
@@ -245,4 +248,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
245
248
|
}], cellTemplate: [{
|
|
246
249
|
type: Input
|
|
247
250
|
}] } });
|
|
248
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnktdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9lbnRyeS1jb21wb25lbnRzL3RhYmxlL2NvbXBvbmVudHMvZW50cnktdGFibGUvZW50cnktdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9lbnRyeS1jb21wb25lbnRzL3RhYmxlL2NvbXBvbmVudHMvZW50cnktdGFibGUvZW50cnktdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBRXZELE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEVBRXZCLFdBQVcsRUFJWCxXQUFXLEVBQ1gsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUk3RCxPQUFPLEVBRW1ELGtCQUFrQixFQUMzRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7Ozs7OztBQU8xQixNQUFNLE9BQU8sbUJBQW1CO0lBeUU5QixJQUFJLFdBQVc7UUFDYixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUNsRSxDQUFDO0lBTUQsWUFDc0MsT0FBeUIsRUFDckQsV0FBb0MsRUFDcEMsa0JBQXFDO1FBRlQsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFDckQsZ0JBQVcsR0FBWCxXQUFXLENBQXlCO1FBQ3BDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBbUI7UUFuRnpCLGNBQVMsR0FBRyxhQUFhLENBQUM7UUFFaEQsZUFBVSxHQUFH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O3NCQUF4QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNO2dCQUlFLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNJLFFBQVE7c0JBQWpCLE1BQU07Z0JBSUUsZUFBZTtzQkFBdkIsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0ksa0JBQWtCO3NCQUEzQixNQUFNO2dCQUlFLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0ksdUJBQXVCO3NCQUFoQyxNQUFNO2dCQUlFLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQVNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmcgKi9cblxuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBPbkNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRWxlbWVudFJlZixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgSG9zdEJpbmRpbmcsXG4gIEluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgU29ydCwgU29ydERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuXG5pbXBvcnQge1xuICBDb2x1bW5EZWYsIFBhZ2VkRGF0YSwgUm93U2VsZWN0aW9uRm9ybWF0dGVyLCBSb3dDbGFzc0Zvcm1hdHRlcixcbiAgQ29udGV4dE1lbnVJdGVtLCBSb3dDb250ZXh0TWVudUZvcm1hdHRlciwgQ2VsbFRlbXBsYXRlLCBFTlRSWV9UQUJMRV9DT05GSUcsIEVudHJ5VGFibGVDb25maWdcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VudHJ5LXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VudHJ5LXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRW50cnlUYWJsZUNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIEBIb3N0QmluZGluZygnY2xhc3MnKSBjbGFzc05hbWUgPSAnZW50cnktdGFibGUnO1xuXG4gIGRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPFQ+KFtdKTtcblxuICBASW5wdXQoKSBkaXNwbGF5ZWRDb2x1bW5zOiBzdHJpbmdbXTtcbiAgQElucHV0KCkgY29sdW1uczogQ29sdW1uRGVmW10gPSBbXTtcblxuICAvLyBEYXRhXG5cbiAgcHJpdmF0ZSBfZGF0YTogVFtdID0gW107XG4gIHByaXZhdGUgX3BhZ2U6IFBhZ2VkRGF0YTxUPjtcbiAgQElucHV0KCkgZGF0YTogVFtdIHwgUGFnZWREYXRhPFQ+IHwgbnVsbCB8IHVuZGVmaW5lZCA9IFtdO1xuICBASW5wdXQoKSB0b3RhbCA9IDA7XG4gIEBJbnB1dCgpIGxvYWRpbmcgPSBmYWxzZTtcblxuICAvLyBQYWdpbmF0aW9uXG5cbiAgQElucHV0KCkgc2hvd1BhZ2luYXRvcjogYm9vbGVhbjtcbiAgQElucHV0KCkgcGFnZURpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dGaXJzdExhc3RCdXR0b25zOiBib29sZWFuO1xuICBASW5wdXQoKSBwYWdlSW5kZXggPSAwO1xuICBASW5wdXQoKSBwYWdlU2l6ZTogbnVtYmVyO1xuICBASW5wdXQoKSBwYWdlU2l6ZU9wdGlvbnM6IG51bWJlcltdO1xuICBASW5wdXQoKSBoaWRlUGFnZVNpemU6IGJvb2xlYW47XG4gIEBPdXRwdXQoKSBwYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxQYWdlRXZlbnQ+KCk7XG5cbiAgQElucHV0KCkgcGFnaW5hdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8vIFNvcnRcblxuICBASW5wdXQoKSBzb3J0QWN0aXZlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNvcnREaXJlY3Rpb246IFNvcnREaXJlY3Rpb247XG4gIEBJbnB1dCgpIHNvcnREaXNhYmxlQ2xlYXIgPSBmYWxzZTtcbiAgQElucHV0KCkgc29ydERpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNvcnRTdGFydDogJ2FzYycgfCAnZGVzYycgPSAnYXNjJztcbiAgQE91dHB1dCgpIHNvcnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNvcnQ+KCk7XG5cbiAgLy8gUm93XG5cbiAgQElucHV0KCkgcm93SG92ZXIgPSBmYWxzZTtcbiAgQElucHV0KCkgcm93U3RyaXBlZCA9IGZhbHNlO1xuICBASW5wdXQoKSByb3dGb2N1c1Zpc2libGUgPSBmYWxzZTtcbiAgQE91dHB1dCgpIHJvd0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuXG4gIC8vIFJvdyBzZWxlY3Rpb25cblxuICBASW5wdXQoKSBtdWx0aVNlbGVjdGFibGUgPSB0cnVlO1xuICByb3dTZWxlY3Rpb246IFNlbGVjdGlvbk1vZGVsPFQ+ID0gbmV3IFNlbGVjdGlvbk1vZGVsPFQ+KHRydWUsIFtdKTtcblxuICBASW5wdXQoKSByb3dTZWxlY3RlZDogVFtdID0gW107XG4gIEBJbnB1dCgpIHJvd1NlbGVjdGFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd1NlbGVjdEFsbENoZWNrYm94ID0gdHJ1ZTtcbiAgQElucHV0KCkgcm93U2VsZWN0aW9uRm9ybWF0dGVyOiBSb3dTZWxlY3Rpb25Gb3JtYXR0ZXIgPSB7fTtcbiAgQElucHV0KCkgcm93Q2xhc3NGb3JtYXR0ZXI6IFJvd0NsYXNzRm9ybWF0dGVyO1xuICBAT3V0cHV0KCkgcm93U2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUW10+KCk7XG5cbiAgLy8gQ29udGV4dCBtZW51XG5cbiAgQElucHV0KCkgc2hvd0NvbnRleHRNZW51ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbnRleHRNZW51SXRlbXM6IENvbnRleHRNZW51SXRlbVtdID0gW107XG4gIEBJbnB1dCgpIGNvbnRleHRNZW51VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsO1xuICBASW5wdXQoKSByb3dDb250ZXh0TWVudUZvcm1hdHRlcjogUm93Q29udGV4dE1lbnVGb3JtYXR0ZXI7XG4gIEBPdXRwdXQoKSBjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBpdGVtSWQ6IHN0cmluZzsgcm93RGF0YTogVCB9PigpO1xuXG4gIC8vIE5vIFJlc3VsdFxuXG4gIEBJbnB1dCgpIG5vUmVzdWx0VGV4dDogc3RyaW5nO1xuICBASW5wdXQoKSBub1Jlc3VsdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbDtcblxuICByZWFkb25seSBzZWxlY3Rpb25Db2x1bW4gPSAnc2VsZWN0aW9uLWNvbHVtbic7XG4gIHJlYWRvbmx5IGNvbnRleHRNZW51Q29sdW1uID0gJ2NvbnRleHQtbWVudS1jb2x1bW4nO1xuXG4gIGdldCBoYXNOb1Jlc3VsdCgpIHtcbiAgICByZXR1cm4gKCF0aGlzLmRhdGEgfHwgdGhpcy5fZGF0YS5sZW5ndGggPT09IDApICYmICF0aGlzLmxvYWRpbmc7XG4gIH1cblxuICBASW5wdXQoKSBoZWFkZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IENlbGxUZW1wbGF0ZSB8IGFueTtcblxuICBASW5wdXQoKSBjZWxsVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCBDZWxsVGVtcGxhdGUgfCBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChFTlRSWV9UQUJMRV9DT05GSUcpIHByaXZhdGUgX2NvbmZpZzogRW50cnlUYWJsZUNvbmZpZyxcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHsgfVxuXG4gIGRldGVjdENoYW5nZXMoKSB7XG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgaXNUZW1wbGF0ZVJlZihvYmo6IGFueSkge1xuICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcbiAgfVxuXG4gIGdldFJvd0NsYXNzTGlzdChyb3dEYXRhOiBULCBpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgY2xhc3NMaXN0ID0ge1xuICAgICAgc2VsZWN0ZWQ6IHRoaXMucm93U2VsZWN0aW9uLmlzU2VsZWN0ZWQocm93RGF0YSksXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgICAnbWF0LXJvdy1vZGQnOiBpbmRleCAlIDIsXG4gICAgfTtcbiAgICBpZiAodGhpcy5yb3dDbGFzc0Zvcm1hdHRlcikge1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5yb3dDbGFzc0Zvcm1hdHRlcikpIHtcbiAgICAgICAgY2xhc3NMaXN0W2tleV0gPSB0aGlzLnJvd0NsYXNzRm9ybWF0dGVyW2tleV0ocm93RGF0YSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjbGFzc0xpc3Q7XG4gIH1cblxuICBnZXRDb2x1bW5DbGFzc0xpc3QoY29sRGVmOiBDb2x1bW5EZWYpOiBzdHJpbmcge1xuICAgIGNvbnN0IGN1c3RvbUNsYXNzZXMgPSBjb2xEZWYuY2xhc3MgPz8gJyc7XG4gICAgY29uc3QgY29sdW1uVHlwZSA9IGNvbERlZi50eXBlID8/ICcnO1xuICAgIGNvbnN0IGNvbHVtbkZpZWxkID0gYGNlbGwtJHt0aGlzLmNvbnZlcnRUb0tlYmFiQ2FzZShjb2xEZWYuZmllbGQpfWA7XG5cbiAgICByZXR1cm4gYCR7Y3VzdG9tQ2xhc3Nlc30gJHtjb2x1bW5UeXBlfSAke2NvbHVtbkZpZWxkfWA7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgdGhpcy5zaG93UGFnaW5hdG9yID0gdGhpcy5zaG93UGFnaW5hdG9yID8/IHRoaXMuX2NvbmZpZy5zaG93UGFnaW5hdG9yO1xuICAgIHRoaXMuc2hvd0ZpcnN0TGFzdEJ1dHRvbnMgPSB0aGlzLnNob3dGaXJzdExhc3RCdXR0b25zID8/IHRoaXMuX2NvbmZpZy5zaG93Rmlyc3RMYXN0QnV0dG9ucztcbiAgICB0aGlzLnBhZ2VTaXplT3B0aW9ucyA9IHRoaXMucGFnZVNpemVPcHRpb25zID8/IHRoaXMuX2NvbmZpZy5wYWdlU2l6ZU9wdGlvbnM7XG4gICAgdGhpcy5oaWRlUGFnZVNpemUgPSB0aGlzLmhpZGVQYWdlU2l6ZSA/PyB0aGlzLl9jb25maWcuaGlkZVBhZ2VTaXplO1xuICAgIHRoaXMubm9SZXN1bHRUZXh0ID0gdGhpcy5ub1Jlc3VsdFRleHQgPz8gdGhpcy5fY29uZmlnLm5vUmVzdWx0c1RleHQ7XG5cbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uaGlkZSkubWFwKGl0ZW0gPT4gaXRlbS5maWVsZCk7XG5cbiAgICBpZiAodGhpcy5yb3dTZWxlY3RhYmxlICYmICF0aGlzLmRpc3BsYXllZENvbHVtbnMuaW5jbHVkZXModGhpcy5zZWxlY3Rpb25Db2x1bW4pKSB7XG4gICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMudW5zaGlmdCh0aGlzLnNlbGVjdGlvbkNvbHVtbik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2hvd0NvbnRleHRNZW51ICYmICF0aGlzLmRpc3BsYXllZENvbHVtbnMuaW5jbHVkZXModGhpcy5jb250ZXh0TWVudUNvbHVtbikpIHtcbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucy5wdXNoKHRoaXMuY29udGV4dE1lbnVDb2x1bW4pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJvd1NlbGVjdGFibGUpIHtcbiAgICAgIHRoaXMucm93U2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPFQ+KHRoaXMubXVsdGlTZWxlY3RhYmxlLCB0aGlzLnJvd1NlbGVjdGVkKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZGF0YSkge1xuICAgICAgdGhpcy5kYXRhID0gW107XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5kYXRhKSkge1xuICAgICAgdGhpcy5fZGF0YSA9IHRoaXMuZGF0YSBhcyBUW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3BhZ2UgPSB0aGlzLmRhdGEgYXMgUGFnZWREYXRhPFQ+O1xuICAgICAgdGhpcy5fZGF0YSA9IHRoaXMuX3BhZ2UuaXRlbXMgPz8gW107XG4gICAgICB0aGlzLnRvdGFsID0gdGhpcy5fcGFnZS50b3RhbENvdW50ID8/IDA7XG4gICAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy5fcGFnZS5wYWdlU2l6ZSA/PyB0aGlzLnBhZ2VTaXplID8/IHRoaXMuX2NvbmZpZy5wYWdlU2l6ZTtcbiAgICAgIHRoaXMucGFnZUluZGV4ID0gdGhpcy5fcGFnZS5wYWdlTnVtYmVyID8gdGhpcy5fcGFnZS5wYWdlTnVtYmVyIC0gMSA6IHRoaXMucGFnZUluZGV4O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kaXNjb25uZWN0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSh0aGlzLl9kYXRhKTtcblxuICAgIGlmIChjaGFuZ2VzLmRhdGEpIHtcbiAgICAgIHRoaXMuc2Nyb2xsVG9Ub3AoKTtcbiAgICB9XG4gIH1cblxuICBnZXRJbmRleChpbmRleDogbnVtYmVyLCBkYXRhSW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiB0eXBlb2YgaW5kZXggPT09ICd1bmRlZmluZWQnID8gZGF0YUluZGV4IDogaW5kZXg7XG4gIH1cblxuICBpc0FsbFNlbGVjdGVkKCkge1xuICAgIGNvbnN0IG51bVNlbGVjdGVkID0gdGhpcy5yb3dTZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoO1xuICAgIGNvbnN0IG51bVJvd3MgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5maWx0ZXIocm93ID0+ICF0aGlzLnJvd1NlbGVjdGlvbkZvcm1hdHRlci5kaXNhYmxlZD8uKHJvdykpLmxlbmd0aDtcbiAgICByZXR1cm4gbnVtU2VsZWN0ZWQgPT09IG51bVJvd3M7XG4gIH1cblxuICB0b2dnbGVTZWxlY3RBbGxDaGVja2JveCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0FsbFNlbGVjdGVkKCkpIHtcbiAgICAgIHRoaXMucm93U2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICB0aGlzLnJvd1NlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMucm93U2VsZWN0aW9uLnNlbGVjdGVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgaWYgKCF0aGlzLnJvd1NlbGVjdGlvbkZvcm1hdHRlci5kaXNhYmxlZD8uKHJvdykpIHtcbiAgICAgICAgdGhpcy5yb3dTZWxlY3Rpb24uc2VsZWN0KHJvdyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5yb3dTZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLnJvd1NlbGVjdGlvbi5zZWxlY3RlZCk7XG4gIH1cblxuICB0b2dnbGVSb3dTZWxlY3Rpb24ocm93OiBhbnkpIHtcbiAgICB0aGlzLnJvd1NlbGVjdGlvbi50b2dnbGUocm93KTtcbiAgICB0aGlzLnJvd1NlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMucm93U2VsZWN0aW9uLnNlbGVjdGVkKTtcbiAgfVxuXG4gIGhhbmRsZVBhZ2UoZTogUGFnZUV2ZW50KSB7XG4gICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQoZSk7XG4gIH1cblxuICBzY3JvbGxUb1RvcCgpOiB2b2lkIHtcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFRvS2ViYWJDYXNlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB2YWx1ZT8ucmVwbGFjZSgvKFthLXowLTldKShbQS1aXSkvZywgJyQxLSQyJykudG9Mb3dlckNhc2UoKTtcbiAgfVxufVxuIiwiPCEtLSBUYWJsZSBjb250ZW50IC0tPlxuPHRhYmxlIG1hdC10YWJsZSBcbiAgICAgICAgW25nQ2xhc3NdPVwieydtYXQtdGFibGUtaG92ZXInOiByb3dIb3ZlciwgJ21hdC10YWJsZS1zdHJpcGVkJzogcm93U3RyaXBlZCwgJ21hdC10YWJsZS13aXRoLWRhdGEnOiAhaGFzTm9SZXN1bHQgfVwiXG4gICAgICAgIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIlxuICAgICAgICBtYXRTb3J0XG4gICAgICAgIFttYXRTb3J0QWN0aXZlXT1cInNvcnRBY3RpdmVcIlxuICAgICAgICBbbWF0U29ydERpcmVjdGlvbl09XCJzb3J0RGlyZWN0aW9uXCJcbiAgICAgICAgW21hdFNvcnREaXNhYmxlQ2xlYXJdPVwic29ydERpc2FibGVDbGVhclwiXG4gICAgICAgIFttYXRTb3J0RGlzYWJsZWRdPVwic29ydERpc2FibGVkXCJcbiAgICAgICAgW21hdFNvcnRTdGFydF09XCJzb3J0U3RhcnRcIlxuICAgICAgICAobWF0U29ydENoYW5nZSk9XCJzb3J0Q2hhbmdlLmVtaXQoJGV2ZW50KVwiPlxuXG4gIDwhLS0gU2VsZWN0aW9uIGNvbHVtbiAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvd1NlbGVjdGFibGVcIiBbbWF0Q29sdW1uRGVmXT1cInNlbGVjdGlvbkNvbHVtblwiPlxuICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJzZWxlY3Rpb24tY2VsbFwiPlxuICAgICAgPG1hdC1jaGVja2JveCAqbmdJZj1cIm11bHRpU2VsZWN0YWJsZSAmJiBzaG93U2VsZWN0QWxsQ2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJyb3dTZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiBpc0FsbFNlbGVjdGVkKClcIlxuICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJyb3dTZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiAhaXNBbGxTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyB0b2dnbGVTZWxlY3RBbGxDaGVja2JveCgpIDogbnVsbFwiPlxuICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgPC90aD5cbiAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93OyBsZXQgaW5kZXggPSBpbmRleDsgbGV0IGRhdGFJbmRleCA9IGRhdGFJbmRleDtcIlxuICAgICAgICBjbGFzcz1cInNlbGVjdGlvbi1jZWxsXCJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgPG1hdC1jaGVja2JveFxuICAgICAgICAqbmdJZj1cIm11bHRpU2VsZWN0YWJsZSAmJiAhKHJvd1NlbGVjdGlvbkZvcm1hdHRlci5oaWRlQ2hlY2tib3ggJiYgcm93U2VsZWN0aW9uRm9ybWF0dGVyLmhpZGVDaGVja2JveCEocm93KSlcIlxuICAgICAgICBbZGlzYWJsZWRdPVwicm93U2VsZWN0aW9uRm9ybWF0dGVyLmRpc2FibGVkICYmIHJvd1NlbGVjdGlvbkZvcm1hdHRlci5kaXNhYmxlZCEocm93KVwiXG4gICAgICAgIFtjaGVja2VkXT1cInJvd1NlbGVjdGlvbi5pc1NlbGVjdGVkKHJvdylcIlxuICAgICAgICAoY2hhbmdlKT1cIiRldmVudCA/IHRvZ2dsZVJvd1NlbGVjdGlvbihyb3cpIDogbnVsbFwiPlxuICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICA8bWF0LXJhZGlvLWJ1dHRvblxuICAgICAgICAqbmdJZj1cIiFtdWx0aVNlbGVjdGFibGUgJiYgIShyb3dTZWxlY3Rpb25Gb3JtYXR0ZXIuaGlkZUNoZWNrYm94ICYmIHJvd1NlbGVjdGlvbkZvcm1hdHRlci5oaWRlQ2hlY2tib3ghKHJvdykpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInJvd1NlbGVjdGlvbkZvcm1hdHRlci5kaXNhYmxlZCAmJiByb3dTZWxlY3Rpb25Gb3JtYXR0ZXIuZGlzYWJsZWQhKHJvdylcIlxuICAgICAgICBbY2hlY2tlZF09XCJyb3dTZWxlY3Rpb24uaXNTZWxlY3RlZChyb3cpXCJcbiAgICAgICAgW3ZhbHVlXT1cInJvd1NlbGVjdGlvbi5pc1NlbGVjdGVkKHJvdylcIlxuICAgICAgICAoY2hhbmdlKT1cIiRldmVudCA/IHRvZ2dsZVJvd1NlbGVjdGlvbihyb3cpIDogbnVsbFwiPlxuICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgIDwvdGQ+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gQ29udGV4dCBtZW51IGNvbHVtbiAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dDb250ZXh0TWVudVwiIFttYXRDb2x1bW5EZWZdPVwiY29udGV4dE1lbnVDb2x1bW5cIj5cbiAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwiYWN0aW9uLWNlbGxcIj48L3RoPlxuICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3c7IGxldCBpbmRleCA9IGluZGV4OyBsZXQgZGF0YUluZGV4ID0gZGF0YUluZGV4O1wiXG4gICAgICAgIGNsYXNzPVwiYWN0aW9uLWNlbGxcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImlzVGVtcGxhdGVSZWYoY29udGV4dE1lbnVUZW1wbGF0ZSlcIiBbbmdJZkVsc2VdPVwiY29udGV4dE1lbnVUcGxcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udGV4dE1lbnVUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHJvdywgcm93RGF0YTogcm93IH1cIj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2NvbnRleHRNZW51VHBsPlxuICAgICAgICAgIDxlbnRyeS1jZWxsLWNvbnRleHQtbWVudVxuICAgICAgICAgICAgW2l0ZW1zXT1cImNvbnRleHRNZW51SXRlbXNcIlxuICAgICAgICAgICAgW3Jvd0RhdGFdPVwicm93XCJcbiAgICAgICAgICAgIFtyb3dNZW51Rm9ybWF0dGVyXT1cInJvd0NvbnRleHRNZW51Rm9ybWF0dGVyXCJcbiAgICAgICAgICAgIChzZWxlY3RlZCk9XCJjb250ZXh0TWVudUl0ZW1TZWxlY3RlZC5lbWl0KHtpdGVtSWQ6ICRldmVudCwgcm93RGF0YTogcm93fSlcIlxuICAgICAgICAgID48L2VudHJ5LWNlbGwtY29udGV4dC1tZW51PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvdGQ+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zO1wiPlxuICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJjb2wuZmllbGRcIlxuICAgICAgICAgICAgICAgICAgW3N0aWNreV09XCJjb2wucGlubmVkPT09J2xlZnQnXCIgW3N0aWNreUVuZF09XCJjb2wucGlubmVkPT09J3JpZ2h0J1wiPlxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZlxuICAgICAgICAgIFtjbGFzc109XCJnZXRDb2x1bW5DbGFzc0xpc3QoY29sKVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydtYXQtdGFibGUtc3RpY2t5LWxlZnQnOiBjb2wucGlubmVkID09PSAnbGVmdCcsICdtYXQtdGFibGUtc3RpY2t5LXJpZ2h0JzogY29sLnBpbm5lZCA9PT0gJ3JpZ2h0J31cIlxuICAgICAgICAgIFtuZ1N0eWxlXT1cInsnd2lkdGgnOiBjb2wud2lkdGgsICdtaW4td2lkdGgnOiBjb2wud2lkdGh9XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImlzVGVtcGxhdGVSZWYoaGVhZGVyVGVtcGxhdGUpXCIgW25nSWZFbHNlXT1cImhlYWRlclRwbFwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhlYWRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjb2wsIGNvbERlZjogY29sIH1cIj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2hlYWRlclRwbD5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJoZWFkZXJUZW1wbGF0ZSAmJiBpc1RlbXBsYXRlUmVmKGhlYWRlclRlbXBsYXRlW2NvbC5maWVsZF0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nSWZFbHNlXT1cImRlZmF1bHRIZWFkZXJUcGxcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhlYWRlclRlbXBsYXRlW2NvbC5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogY29sLCBjb2xEZWY6IGNvbCB9XCI+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0SGVhZGVyVHBsPlxuICAgICAgICAgICAgPGRpdiBbbWF0LXNvcnQtaGVhZGVyXT1cImNvbC5zb3J0UHJvcD8uaWQgfHwgY29sLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY29sLnNvcnRhYmxlXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ2xlYXJdPVwiY29sLnNvcnRQcm9wPy5kaXNhYmxlQ2xlYXJcIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3tjb2wuaGVhZGVyfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC90aD5cblxuICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvdzsgbGV0IGluZGV4ID0gaW5kZXg7IGxldCBkYXRhSW5kZXggPSBkYXRhSW5kZXg7XCJcbiAgICAgICAgICBbY2xhc3NdPVwiZ2V0Q29sdW1uQ2xhc3NMaXN0KGNvbClcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsnbWF0LXRhYmxlLXN0aWNreS1sZWZ0JzogY29sLnBpbm5lZCA9PT0gJ2xlZnQnLCAnbWF0LXRhYmxlLXN0aWNreS1yaWdodCc6IGNvbC5waW5uZWQgPT09ICdyaWdodCd9XCJcbiAgICAgICAgICBbbmdTdHlsZV09XCJ7J3dpZHRoJzogY29sLndpZHRoLCAnbWluLXdpZHRoJzogY29sLndpZHRofVwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiaXNUZW1wbGF0ZVJlZihjZWxsVGVtcGxhdGUpXCIgW25nSWZFbHNlXT1cImNlbGxUcGxcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2VsbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcm93LCByb3dEYXRhOiByb3csIGluZGV4OiBnZXRJbmRleChpbmRleCwgZGF0YUluZGV4KSwgY29sRGVmOiBjb2wgfVwiPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbFRwbD5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiY2VsbFRlbXBsYXRlICYmIGlzVGVtcGxhdGVSZWYoY2VsbFRlbXBsYXRlW2NvbC5maWVsZF0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0lmRWxzZV09XCJjb2xEZWZDZWxsVHBsXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2VsbFRlbXBsYXRlW2NvbC5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHJvdywgcm93RGF0YTogcm93LCBpbmRleDogZ2V0SW5kZXgoaW5kZXgsIGRhdGFJbmRleCksIGNvbERlZjogY29sIH1cIj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNjb2xEZWZDZWxsVHBsPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJjb2wuY2VsbFRlbXBsYXRlXCIgW25nSWZFbHNlXT1cImRlZmF1bHRDZWxsVHBsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbC5jZWxsVGVtcGxhdGUgPz8gbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHJvdywgcm93RGF0YTogcm93LCBpbmRleDogZ2V0SW5kZXgoaW5kZXgsIGRhdGFJbmRleCksIGNvbERlZjogY29sIH1cIj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRDZWxsVHBsPlxuICAgICAgICAgIDxlbnRyeS1jZWxsIFtyb3dEYXRhXT1cInJvd1wiIFtjb2xEZWZdPVwiY29sXCI+PC9lbnRyeS1jZWxsPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWVcIj48L3RyPlxuICA8dHIgbWF0LXJvd1xuICAgICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGxldCBpbmRleCA9IGluZGV4OyBsZXQgZGF0YUluZGV4ID0gZGF0YUluZGV4OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zO1wiXG4gICAgICBbbmdDbGFzc109XCJnZXRSb3dDbGFzc0xpc3Qocm93LCBnZXRJbmRleChpbmRleCwgZGF0YUluZGV4KSlcIlxuICAgICAgW2F0dHIudGFiaW5kZXhdPVwicm93Rm9jdXNWaXNpYmxlID8gMCA6IC0xXCJcbiAgICAgIChjbGljayk9XCJyb3dDbGljay5lbWl0KHJvdylcIlxuICAgICAgKGtleXVwLmVudGVyKT1cInJvd0NsaWNrLmVtaXQocm93KVwiPlxuICA8L3RyPlxuPC90YWJsZT5cblxuPCEtLSBObyByZXN1bHRzIC0tPlxuPGRpdiBjbGFzcz1cIm5vLXJlc3VsdHMgbWF0LWJvZHktMlwiICpuZ0lmPVwiaGFzTm9SZXN1bHRcIj5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImlzVGVtcGxhdGVSZWYobm9SZXN1bHRUZW1wbGF0ZSlcIiBbbmdJZkVsc2VdPVwiZGVmYXVsdE5vUmVzdWx0VHBsXCI+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5vUmVzdWx0VGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI2RlZmF1bHROb1Jlc3VsdFRwbD57e25vUmVzdWx0VGV4dH19PC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuXG48IS0tIFBhZ2luYXRpb24gLS0+XG48bmctdGVtcGxhdGUgW25nSWZdPVwiaXNUZW1wbGF0ZVJlZihwYWdpbmF0aW9uVGVtcGxhdGUpXCIgW25nSWZFbHNlXT1cImRlZmF1bHRQYWdpbmF0aW9uVGVtcGxhdGVcIj5cbiAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInBhZ2luYXRpb25UZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0UGFnaW5hdGlvblRlbXBsYXRlPlxuICA8bWF0LXBhZ2luYXRvciBjbGFzcz1cInBhZ2luYXRpb25cIiAqbmdJZj1cInNob3dQYWdpbmF0b3JcIlxuICAgICAgICAgICAgICAgICAgW3Nob3dGaXJzdExhc3RCdXR0b25zXT1cInNob3dGaXJzdExhc3RCdXR0b25zXCJcbiAgICAgICAgICAgICAgICAgIFtsZW5ndGhdPVwidG90YWxcIlxuICAgICAgICAgICAgICAgICAgW3BhZ2VJbmRleF09XCJwYWdlSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcbiAgICAgICAgICAgICAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgIFtoaWRlUGFnZVNpemVdPVwiaGlkZVBhZ2VTaXplXCJcbiAgICAgICAgICAgICAgICAgIChwYWdlKT1cImhhbmRsZVBhZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicGFnZURpc2FibGVkXCI+XG4gIDwvbWF0LXBhZ2luYXRvcj5cbjwvbmctdGVtcGxhdGU+Il19
|
|
251
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnktdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9lbnRyeS1jb21wb25lbnRzL3RhYmxlL2NvbXBvbmVudHMvZW50cnktdGFibGUvZW50cnktdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9lbnRyeS1jb21wb25lbnRzL3RhYmxlL2NvbXBvbmVudHMvZW50cnktdGFibGUvZW50cnktdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBRXZELE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEVBRXZCLFdBQVcsRUFJWCxXQUFXLEVBQ1gsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUk3RCxPQUFPLEVBRW1ELGtCQUFrQixFQUMzRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7Ozs7OztBQU8xQixNQUFNLE9BQU8sbUJBQW1CO0lBeUU5QixJQUFJLFdBQVc7UUFDYixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUNsRSxDQUFDO0lBTUQsWUFDc0MsT0FBeUIsRUFDckQsV0FBb0MsRUFDcEMsa0JBQXFDO1FBRlQsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFDckQsZ0JBQVcsR0FBWCxXQUFXLENBQXlCO1FBQ3BDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBbUI7UUFuRnpCLGNBQVMsR0FBRyxhQUFhLENBQUM7UUFFaEQsZUFBVSxHQUFHLElBQUksa0JBQWtCLENBQUksRUFBRSxDQUFDLENBQUM7UUFHbEMsWUFBTyxHQUFnQixFQUFFLENBQUM7UUFFbkMsT0FBTztRQUVDLFVBQUssR0FBUSxFQUFFLENBQUM7UUFFZixTQUFJLEdBQTBDLEVBQUUsQ0FBQztRQUNqRCxVQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUtoQixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUVyQixjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBSWIsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFhLENBQUM7UUFRNUMscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLGNBQVMsR0FBbUIsS0FBSyxDQUFDO1FBQ2pDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRWhELE1BQU07UUFFRyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDdkIsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFLLENBQUM7UUFFM0MsZ0JBQWdCO1FBRVAsb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFDaEMsaUJBQVksR0FBc0IsSUFBSSxjQUFjLENBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXpELGdCQUFXLEdBQVEsRUFBRSxDQUFDO1FBQ3RCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLDBCQUFxQixHQUFHLElBQUksQ0FBQztRQUM3QiwwQkFBcUIsR0FBMEIsRUFBRSxDQUFDO1FBRWpELHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFdkQsZUFBZTtRQUVOLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLHFCQUFnQixHQUFzQixFQUFFLENBQUM7UUFHeEMsNEJBQXVCLEdBQUcsSUFBSSxZQUFZLEVBQWtDLENBQUM7UUFPOUUsb0JBQWUsR0FBRyxrQkFBa0IsQ0FBQztRQUNyQyxzQkFBaUIsR0FBRyxxQkFBcUIsQ0FBQztJQWFBLENBQUM7SUFFcEQsYUFBYTtRQUNYLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsYUFBYSxDQUFDLEdBQVE7UUFDcEIsT0FBTyxHQUFHLFlBQVksV0FBVyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxlQUFlLENBQUMsT0FBVSxFQUFFLEtBQWE7UUFDdkMsTUFBTSxTQUFTLEdBQUc7WUFDaEIsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztZQUMvQyxnRUFBZ0U7WUFDaEUsYUFBYSxFQUFFLEtBQUssR0FBRyxDQUFDO1NBQ3pCLENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7Z0JBQ3JELFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDdkQ7U0FDRjtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxNQUFpQjtRQUNsQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUN6QyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNyQyxNQUFNLFdBQVcsR0FBRyxRQUFRLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUVwRSxPQUFPLEdBQUcsYUFBYSxJQUFJLFVBQVUsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUN0RSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUM7UUFDM0YsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDO1FBQzVFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztRQUNuRSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFFcEUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXhGLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQy9FLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ3JEO1FBRUQsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRTtZQUNuRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1NBQ3BEO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxjQUFjLENBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDbkY7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNkLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1NBQ2hCO1FBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM1QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFXLENBQUM7U0FDL0I7YUFBTTtZQUNMLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQW9CLENBQUM7WUFDdkMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQzlFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztTQUNyRjtRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQzlCO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVyRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3BCO0lBQ0gsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFhLEVBQUUsU0FBaUI7UUFDdkMsT0FBTyxPQUFPLEtBQUssS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzFELENBQUM7SUFFRCxhQUFhO1FBQ1gsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQ3RELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3ZHLE9BQU8sV0FBVyxLQUFLLE9BQU8sQ0FBQztJQUNqQyxDQUFDO0lBRUQsdUJBQXVCO1FBQ3JCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pELE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUMvQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUMvQjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxHQUFRO1FBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsVUFBVSxDQUFDLENBQVk7UUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxJQUFJLG1CQUFtQjtRQUNyQixPQUFPLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxLQUFhO1FBQ3RDLE9BQU8sS0FBSyxFQUFFLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyRSxDQUFDOytHQTdNVSxtQkFBbUIsa0JBa0ZwQixrQkFBa0I7bUdBbEZqQixtQkFBbUIsZzdDQy9CaEMsOG5QQTBKQTs7NEZEM0hhLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxhQUFhLG1CQUVOLHVCQUF1QixDQUFDLE1BQU07OzBCQW9GNUMsTUFBTTsyQkFBQyxrQkFBa0I7cUdBakZOLFNBQVM7c0JBQTlCLFdBQVc7dUJBQUMsT0FBTztnQkFJWCxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQU1HLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUlHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNO2dCQUVFLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFJRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNO2dCQUlFLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNJLFFBQVE7c0JBQWpCLE1BQU07Z0JBSUUsZUFBZTtzQkFBdkIsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0ksa0JBQWtCO3NCQUEzQixNQUFNO2dCQUlFLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0ksdUJBQXVCO3NCQUFoQyxNQUFNO2dCQUlFLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQVNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmcgKi9cblxuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBPbkNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRWxlbWVudFJlZixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgSG9zdEJpbmRpbmcsXG4gIEluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgU29ydCwgU29ydERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuXG5pbXBvcnQge1xuICBDb2x1bW5EZWYsIFBhZ2VkRGF0YSwgUm93U2VsZWN0aW9uRm9ybWF0dGVyLCBSb3dDbGFzc0Zvcm1hdHRlcixcbiAgQ29udGV4dE1lbnVJdGVtLCBSb3dDb250ZXh0TWVudUZvcm1hdHRlciwgQ2VsbFRlbXBsYXRlLCBFTlRSWV9UQUJMRV9DT05GSUcsIEVudHJ5VGFibGVDb25maWdcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VudHJ5LXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VudHJ5LXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRW50cnlUYWJsZUNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIEBIb3N0QmluZGluZygnY2xhc3MnKSBjbGFzc05hbWUgPSAnZW50cnktdGFibGUnO1xuXG4gIGRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPFQ+KFtdKTtcblxuICBASW5wdXQoKSBkaXNwbGF5ZWRDb2x1bW5zOiBzdHJpbmdbXTtcbiAgQElucHV0KCkgY29sdW1uczogQ29sdW1uRGVmW10gPSBbXTtcblxuICAvLyBEYXRhXG5cbiAgcHJpdmF0ZSBfZGF0YTogVFtdID0gW107XG4gIHByaXZhdGUgX3BhZ2U6IFBhZ2VkRGF0YTxUPjtcbiAgQElucHV0KCkgZGF0YTogVFtdIHwgUGFnZWREYXRhPFQ+IHwgbnVsbCB8IHVuZGVmaW5lZCA9IFtdO1xuICBASW5wdXQoKSB0b3RhbCA9IDA7XG4gIEBJbnB1dCgpIGxvYWRpbmcgPSBmYWxzZTtcblxuICAvLyBQYWdpbmF0aW9uXG5cbiAgQElucHV0KCkgc2hvd1BhZ2luYXRvcjogYm9vbGVhbjtcbiAgQElucHV0KCkgcGFnZURpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dGaXJzdExhc3RCdXR0b25zOiBib29sZWFuO1xuICBASW5wdXQoKSBwYWdlSW5kZXggPSAwO1xuICBASW5wdXQoKSBwYWdlU2l6ZTogbnVtYmVyO1xuICBASW5wdXQoKSBwYWdlU2l6ZU9wdGlvbnM6IG51bWJlcltdO1xuICBASW5wdXQoKSBoaWRlUGFnZVNpemU6IGJvb2xlYW47XG4gIEBPdXRwdXQoKSBwYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxQYWdlRXZlbnQ+KCk7XG5cbiAgQElucHV0KCkgcGFnaW5hdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8vIFNvcnRcblxuICBASW5wdXQoKSBzb3J0QWN0aXZlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNvcnREaXJlY3Rpb246IFNvcnREaXJlY3Rpb247XG4gIEBJbnB1dCgpIHNvcnREaXNhYmxlQ2xlYXIgPSBmYWxzZTtcbiAgQElucHV0KCkgc29ydERpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNvcnRTdGFydDogJ2FzYycgfCAnZGVzYycgPSAnYXNjJztcbiAgQE91dHB1dCgpIHNvcnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNvcnQ+KCk7XG5cbiAgLy8gUm93XG5cbiAgQElucHV0KCkgcm93SG92ZXIgPSBmYWxzZTtcbiAgQElucHV0KCkgcm93U3RyaXBlZCA9IGZhbHNlO1xuICBASW5wdXQoKSByb3dGb2N1c1Zpc2libGUgPSBmYWxzZTtcbiAgQE91dHB1dCgpIHJvd0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuXG4gIC8vIFJvdyBzZWxlY3Rpb25cblxuICBASW5wdXQoKSBtdWx0aVNlbGVjdGFibGUgPSB0cnVlO1xuICByb3dTZWxlY3Rpb246IFNlbGVjdGlvbk1vZGVsPFQ+ID0gbmV3IFNlbGVjdGlvbk1vZGVsPFQ+KHRydWUsIFtdKTtcblxuICBASW5wdXQoKSByb3dTZWxlY3RlZDogVFtdID0gW107XG4gIEBJbnB1dCgpIHJvd1NlbGVjdGFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd1NlbGVjdEFsbENoZWNrYm94ID0gdHJ1ZTtcbiAgQElucHV0KCkgcm93U2VsZWN0aW9uRm9ybWF0dGVyOiBSb3dTZWxlY3Rpb25Gb3JtYXR0ZXIgPSB7fTtcbiAgQElucHV0KCkgcm93Q2xhc3NGb3JtYXR0ZXI6IFJvd0NsYXNzRm9ybWF0dGVyO1xuICBAT3V0cHV0KCkgcm93U2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUW10+KCk7XG5cbiAgLy8gQ29udGV4dCBtZW51XG5cbiAgQElucHV0KCkgc2hvd0NvbnRleHRNZW51ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbnRleHRNZW51SXRlbXM6IENvbnRleHRNZW51SXRlbVtdID0gW107XG4gIEBJbnB1dCgpIGNvbnRleHRNZW51VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsO1xuICBASW5wdXQoKSByb3dDb250ZXh0TWVudUZvcm1hdHRlcjogUm93Q29udGV4dE1lbnVGb3JtYXR0ZXI7XG4gIEBPdXRwdXQoKSBjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBpdGVtSWQ6IHN0cmluZzsgcm93RGF0YTogVCB9PigpO1xuXG4gIC8vIE5vIFJlc3VsdFxuXG4gIEBJbnB1dCgpIG5vUmVzdWx0VGV4dDogc3RyaW5nO1xuICBASW5wdXQoKSBub1Jlc3VsdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbDtcblxuICByZWFkb25seSBzZWxlY3Rpb25Db2x1bW4gPSAnc2VsZWN0aW9uLWNvbHVtbic7XG4gIHJlYWRvbmx5IGNvbnRleHRNZW51Q29sdW1uID0gJ2NvbnRleHQtbWVudS1jb2x1bW4nO1xuXG4gIGdldCBoYXNOb1Jlc3VsdCgpIHtcbiAgICByZXR1cm4gKCF0aGlzLmRhdGEgfHwgdGhpcy5fZGF0YS5sZW5ndGggPT09IDApICYmICF0aGlzLmxvYWRpbmc7XG4gIH1cblxuICBASW5wdXQoKSBoZWFkZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IENlbGxUZW1wbGF0ZSB8IGFueTtcblxuICBASW5wdXQoKSBjZWxsVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCBDZWxsVGVtcGxhdGUgfCBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChFTlRSWV9UQUJMRV9DT05GSUcpIHByaXZhdGUgX2NvbmZpZzogRW50cnlUYWJsZUNvbmZpZyxcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHsgfVxuXG4gIGRldGVjdENoYW5nZXMoKSB7XG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgaXNUZW1wbGF0ZVJlZihvYmo6IGFueSkge1xuICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcbiAgfVxuXG4gIGdldFJvd0NsYXNzTGlzdChyb3dEYXRhOiBULCBpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgY2xhc3NMaXN0ID0ge1xuICAgICAgc2VsZWN0ZWQ6IHRoaXMucm93U2VsZWN0aW9uLmlzU2VsZWN0ZWQocm93RGF0YSksXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgICAnbWF0LXJvdy1vZGQnOiBpbmRleCAlIDIsXG4gICAgfTtcbiAgICBpZiAodGhpcy5yb3dDbGFzc0Zvcm1hdHRlcikge1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5yb3dDbGFzc0Zvcm1hdHRlcikpIHtcbiAgICAgICAgY2xhc3NMaXN0W2tleV0gPSB0aGlzLnJvd0NsYXNzRm9ybWF0dGVyW2tleV0ocm93RGF0YSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjbGFzc0xpc3Q7XG4gIH1cblxuICBnZXRDb2x1bW5DbGFzc0xpc3QoY29sRGVmOiBDb2x1bW5EZWYpOiBzdHJpbmcge1xuICAgIGNvbnN0IGN1c3RvbUNsYXNzZXMgPSBjb2xEZWYuY2xhc3MgPz8gJyc7XG4gICAgY29uc3QgY29sdW1uVHlwZSA9IGNvbERlZi50eXBlID8/ICcnO1xuICAgIGNvbnN0IGNvbHVtbkZpZWxkID0gYGNlbGwtJHt0aGlzLmNvbnZlcnRUb0tlYmFiQ2FzZShjb2xEZWYuZmllbGQpfWA7XG5cbiAgICByZXR1cm4gYCR7Y3VzdG9tQ2xhc3Nlc30gJHtjb2x1bW5UeXBlfSAke2NvbHVtbkZpZWxkfWA7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgdGhpcy5zaG93UGFnaW5hdG9yID0gdGhpcy5zaG93UGFnaW5hdG9yID8/IHRoaXMuX2NvbmZpZy5zaG93UGFnaW5hdG9yO1xuICAgIHRoaXMuc2hvd0ZpcnN0TGFzdEJ1dHRvbnMgPSB0aGlzLnNob3dGaXJzdExhc3RCdXR0b25zID8/IHRoaXMuX2NvbmZpZy5zaG93Rmlyc3RMYXN0QnV0dG9ucztcbiAgICB0aGlzLnBhZ2VTaXplT3B0aW9ucyA9IHRoaXMucGFnZVNpemVPcHRpb25zID8/IHRoaXMuX2NvbmZpZy5wYWdlU2l6ZU9wdGlvbnM7XG4gICAgdGhpcy5oaWRlUGFnZVNpemUgPSB0aGlzLmhpZGVQYWdlU2l6ZSA/PyB0aGlzLl9jb25maWcuaGlkZVBhZ2VTaXplO1xuICAgIHRoaXMubm9SZXN1bHRUZXh0ID0gdGhpcy5ub1Jlc3VsdFRleHQgPz8gdGhpcy5fY29uZmlnLm5vUmVzdWx0c1RleHQ7XG5cbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uaGlkZSkubWFwKGl0ZW0gPT4gaXRlbS5maWVsZCk7XG5cbiAgICBpZiAodGhpcy5yb3dTZWxlY3RhYmxlICYmICF0aGlzLmRpc3BsYXllZENvbHVtbnMuaW5jbHVkZXModGhpcy5zZWxlY3Rpb25Db2x1bW4pKSB7XG4gICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMudW5zaGlmdCh0aGlzLnNlbGVjdGlvbkNvbHVtbik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2hvd0NvbnRleHRNZW51ICYmICF0aGlzLmRpc3BsYXllZENvbHVtbnMuaW5jbHVkZXModGhpcy5jb250ZXh0TWVudUNvbHVtbikpIHtcbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucy5wdXNoKHRoaXMuY29udGV4dE1lbnVDb2x1bW4pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJvd1NlbGVjdGFibGUpIHtcbiAgICAgIHRoaXMucm93U2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPFQ+KHRoaXMubXVsdGlTZWxlY3RhYmxlLCB0aGlzLnJvd1NlbGVjdGVkKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZGF0YSkge1xuICAgICAgdGhpcy5kYXRhID0gW107XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5kYXRhKSkge1xuICAgICAgdGhpcy5fZGF0YSA9IHRoaXMuZGF0YSBhcyBUW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3BhZ2UgPSB0aGlzLmRhdGEgYXMgUGFnZWREYXRhPFQ+O1xuICAgICAgdGhpcy5fZGF0YSA9IHRoaXMuX3BhZ2UuaXRlbXMgPz8gW107XG4gICAgICB0aGlzLnRvdGFsID0gdGhpcy5fcGFnZS50b3RhbENvdW50ID8/IDA7XG4gICAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy5fcGFnZS5wYWdlU2l6ZSA/PyB0aGlzLnBhZ2VTaXplID8/IHRoaXMuX2NvbmZpZy5wYWdlU2l6ZTtcbiAgICAgIHRoaXMucGFnZUluZGV4ID0gdGhpcy5fcGFnZS5wYWdlTnVtYmVyID8gdGhpcy5fcGFnZS5wYWdlTnVtYmVyIC0gMSA6IHRoaXMucGFnZUluZGV4O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kaXNjb25uZWN0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSh0aGlzLl9kYXRhKTtcblxuICAgIGlmIChjaGFuZ2VzLmRhdGEpIHtcbiAgICAgIHRoaXMuc2Nyb2xsVG9Ub3AoKTtcbiAgICB9XG4gIH1cblxuICBnZXRJbmRleChpbmRleDogbnVtYmVyLCBkYXRhSW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiB0eXBlb2YgaW5kZXggPT09ICd1bmRlZmluZWQnID8gZGF0YUluZGV4IDogaW5kZXg7XG4gIH1cblxuICBpc0FsbFNlbGVjdGVkKCkge1xuICAgIGNvbnN0IG51bVNlbGVjdGVkID0gdGhpcy5yb3dTZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoO1xuICAgIGNvbnN0IG51bVJvd3MgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5maWx0ZXIocm93ID0+ICF0aGlzLnJvd1NlbGVjdGlvbkZvcm1hdHRlci5kaXNhYmxlZD8uKHJvdykpLmxlbmd0aDtcbiAgICByZXR1cm4gbnVtU2VsZWN0ZWQgPT09IG51bVJvd3M7XG4gIH1cblxuICB0b2dnbGVTZWxlY3RBbGxDaGVja2JveCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0FsbFNlbGVjdGVkKCkpIHtcbiAgICAgIHRoaXMucm93U2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICB0aGlzLnJvd1NlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMucm93U2VsZWN0aW9uLnNlbGVjdGVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgaWYgKCF0aGlzLnJvd1NlbGVjdGlvbkZvcm1hdHRlci5kaXNhYmxlZD8uKHJvdykpIHtcbiAgICAgICAgdGhpcy5yb3dTZWxlY3Rpb24uc2VsZWN0KHJvdyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5yb3dTZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLnJvd1NlbGVjdGlvbi5zZWxlY3RlZCk7XG4gIH1cblxuICB0b2dnbGVSb3dTZWxlY3Rpb24ocm93OiBhbnkpIHtcbiAgICB0aGlzLnJvd1NlbGVjdGlvbi50b2dnbGUocm93KTtcbiAgICB0aGlzLnJvd1NlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMucm93U2VsZWN0aW9uLnNlbGVjdGVkKTtcbiAgfVxuXG4gIGhhbmRsZVBhZ2UoZTogUGFnZUV2ZW50KSB7XG4gICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQoZSk7XG4gIH1cblxuICBzY3JvbGxUb1RvcCgpOiB2b2lkIHtcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgfVxuXG4gIGdldCBzaG91bGRTaG93UGFnaW5hdG9yKCl7XG4gICAgcmV0dXJuIHRoaXMuc2hvd1BhZ2luYXRvciAmJiB0aGlzLl9kYXRhLmxlbmd0aCA+IDA7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRUb0tlYmFiQ2FzZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdmFsdWU/LnJlcGxhY2UoLyhbYS16MC05XSkoW0EtWl0pL2csICckMS0kMicpLnRvTG93ZXJDYXNlKCk7XG4gIH1cbn1cbiIsIjwhLS0gVGFibGUgY29udGVudCAtLT5cbjx0YWJsZSBtYXQtdGFibGVcbiAgICAgICAgW25nQ2xhc3NdPVwieydtYXQtdGFibGUtaG92ZXInOiByb3dIb3ZlciwgJ21hdC10YWJsZS1zdHJpcGVkJzogcm93U3RyaXBlZCwgJ21hdC10YWJsZS13aXRoLWRhdGEnOiAhaGFzTm9SZXN1bHQgfVwiXG4gICAgICAgIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIlxuICAgICAgICBtYXRTb3J0XG4gICAgICAgIFttYXRTb3J0QWN0aXZlXT1cInNvcnRBY3RpdmVcIlxuICAgICAgICBbbWF0U29ydERpcmVjdGlvbl09XCJzb3J0RGlyZWN0aW9uXCJcbiAgICAgICAgW21hdFNvcnREaXNhYmxlQ2xlYXJdPVwic29ydERpc2FibGVDbGVhclwiXG4gICAgICAgIFttYXRTb3J0RGlzYWJsZWRdPVwic29ydERpc2FibGVkXCJcbiAgICAgICAgW21hdFNvcnRTdGFydF09XCJzb3J0U3RhcnRcIlxuICAgICAgICAobWF0U29ydENoYW5nZSk9XCJzb3J0Q2hhbmdlLmVtaXQoJGV2ZW50KVwiPlxuXG4gIDwhLS0gU2VsZWN0aW9uIGNvbHVtbiAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvd1NlbGVjdGFibGVcIiBbbWF0Q29sdW1uRGVmXT1cInNlbGVjdGlvbkNvbHVtblwiPlxuICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJzZWxlY3Rpb24tY2VsbFwiPlxuICAgICAgPG1hdC1jaGVja2JveCAqbmdJZj1cIm11bHRpU2VsZWN0YWJsZSAmJiBzaG93U2VsZWN0QWxsQ2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJyb3dTZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiBpc0FsbFNlbGVjdGVkKClcIlxuICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJyb3dTZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiAhaXNBbGxTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyB0b2dnbGVTZWxlY3RBbGxDaGVja2JveCgpIDogbnVsbFwiPlxuICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgPC90aD5cbiAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93OyBsZXQgaW5kZXggPSBpbmRleDsgbGV0IGRhdGFJbmRleCA9IGRhdGFJbmRleDtcIlxuICAgICAgICBjbGFzcz1cInNlbGVjdGlvbi1jZWxsXCJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgPG1hdC1jaGVja2JveFxuICAgICAgICAqbmdJZj1cIm11bHRpU2VsZWN0YWJsZSAmJiAhKHJvd1NlbGVjdGlvbkZvcm1hdHRlci5oaWRlQ2hlY2tib3ggJiYgcm93U2VsZWN0aW9uRm9ybWF0dGVyLmhpZGVDaGVja2JveCEocm93KSlcIlxuICAgICAgICBbZGlzYWJsZWRdPVwicm93U2VsZWN0aW9uRm9ybWF0dGVyLmRpc2FibGVkICYmIHJvd1NlbGVjdGlvbkZvcm1hdHRlci5kaXNhYmxlZCEocm93KVwiXG4gICAgICAgIFtjaGVja2VkXT1cInJvd1NlbGVjdGlvbi5pc1NlbGVjdGVkKHJvdylcIlxuICAgICAgICAoY2hhbmdlKT1cIiRldmVudCA/IHRvZ2dsZVJvd1NlbGVjdGlvbihyb3cpIDogbnVsbFwiPlxuICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICA8bWF0LXJhZGlvLWJ1dHRvblxuICAgICAgICAqbmdJZj1cIiFtdWx0aVNlbGVjdGFibGUgJiYgIShyb3dTZWxlY3Rpb25Gb3JtYXR0ZXIuaGlkZUNoZWNrYm94ICYmIHJvd1NlbGVjdGlvbkZvcm1hdHRlci5oaWRlQ2hlY2tib3ghKHJvdykpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInJvd1NlbGVjdGlvbkZvcm1hdHRlci5kaXNhYmxlZCAmJiByb3dTZWxlY3Rpb25Gb3JtYXR0ZXIuZGlzYWJsZWQhKHJvdylcIlxuICAgICAgICBbY2hlY2tlZF09XCJyb3dTZWxlY3Rpb24uaXNTZWxlY3RlZChyb3cpXCJcbiAgICAgICAgW3ZhbHVlXT1cInJvd1NlbGVjdGlvbi5pc1NlbGVjdGVkKHJvdylcIlxuICAgICAgICAoY2hhbmdlKT1cIiRldmVudCA/IHRvZ2dsZVJvd1NlbGVjdGlvbihyb3cpIDogbnVsbFwiPlxuICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgIDwvdGQ+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gQ29udGV4dCBtZW51IGNvbHVtbiAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dDb250ZXh0TWVudVwiIFttYXRDb2x1bW5EZWZdPVwiY29udGV4dE1lbnVDb2x1bW5cIj5cbiAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwiYWN0aW9uLWNlbGxcIj48L3RoPlxuICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3c7IGxldCBpbmRleCA9IGluZGV4OyBsZXQgZGF0YUluZGV4ID0gZGF0YUluZGV4O1wiXG4gICAgICAgIGNsYXNzPVwiYWN0aW9uLWNlbGxcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImlzVGVtcGxhdGVSZWYoY29udGV4dE1lbnVUZW1wbGF0ZSlcIiBbbmdJZkVsc2VdPVwiY29udGV4dE1lbnVUcGxcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udGV4dE1lbnVUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHJvdywgcm93RGF0YTogcm93IH1cIj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2NvbnRleHRNZW51VHBsPlxuICAgICAgICAgIDxlbnRyeS1jZWxsLWNvbnRleHQtbWVudVxuICAgICAgICAgICAgW2l0ZW1zXT1cImNvbnRleHRNZW51SXRlbXNcIlxuICAgICAgICAgICAgW3Jvd0RhdGFdPVwicm93XCJcbiAgICAgICAgICAgIFtyb3dNZW51Rm9ybWF0dGVyXT1cInJvd0NvbnRleHRNZW51Rm9ybWF0dGVyXCJcbiAgICAgICAgICAgIChzZWxlY3RlZCk9XCJjb250ZXh0TWVudUl0ZW1TZWxlY3RlZC5lbWl0KHtpdGVtSWQ6ICRldmVudCwgcm93RGF0YTogcm93fSlcIlxuICAgICAgICAgID48L2VudHJ5LWNlbGwtY29udGV4dC1tZW51PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvdGQ+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zO1wiPlxuICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJjb2wuZmllbGRcIlxuICAgICAgICAgICAgICAgICAgW3N0aWNreV09XCJjb2wucGlubmVkPT09J2xlZnQnXCIgW3N0aWNreUVuZF09XCJjb2wucGlubmVkPT09J3JpZ2h0J1wiPlxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZlxuICAgICAgICAgIFtjbGFzc109XCJnZXRDb2x1bW5DbGFzc0xpc3QoY29sKVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydtYXQtdGFibGUtc3RpY2t5LWxlZnQnOiBjb2wucGlubmVkID09PSAnbGVmdCcsICdtYXQtdGFibGUtc3RpY2t5LXJpZ2h0JzogY29sLnBpbm5lZCA9PT0gJ3JpZ2h0J31cIlxuICAgICAgICAgIFtuZ1N0eWxlXT1cInsnd2lkdGgnOiBjb2wud2lkdGgsICdtaW4td2lkdGgnOiBjb2wud2lkdGh9XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImlzVGVtcGxhdGVSZWYoaGVhZGVyVGVtcGxhdGUpXCIgW25nSWZFbHNlXT1cImhlYWRlclRwbFwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhlYWRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjb2wsIGNvbERlZjogY29sIH1cIj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2hlYWRlclRwbD5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJoZWFkZXJUZW1wbGF0ZSAmJiBpc1RlbXBsYXRlUmVmKGhlYWRlclRlbXBsYXRlW2NvbC5maWVsZF0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nSWZFbHNlXT1cImRlZmF1bHRIZWFkZXJUcGxcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhlYWRlclRlbXBsYXRlW2NvbC5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogY29sLCBjb2xEZWY6IGNvbCB9XCI+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0SGVhZGVyVHBsPlxuICAgICAgICAgICAgPGRpdiBbbWF0LXNvcnQtaGVhZGVyXT1cImNvbC5zb3J0UHJvcD8uaWQgfHwgY29sLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY29sLnNvcnRhYmxlXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ2xlYXJdPVwiY29sLnNvcnRQcm9wPy5kaXNhYmxlQ2xlYXJcIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3tjb2wuaGVhZGVyfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC90aD5cblxuICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvdzsgbGV0IGluZGV4ID0gaW5kZXg7IGxldCBkYXRhSW5kZXggPSBkYXRhSW5kZXg7XCJcbiAgICAgICAgICBbY2xhc3NdPVwiZ2V0Q29sdW1uQ2xhc3NMaXN0KGNvbClcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsnbWF0LXRhYmxlLXN0aWNreS1sZWZ0JzogY29sLnBpbm5lZCA9PT0gJ2xlZnQnLCAnbWF0LXRhYmxlLXN0aWNreS1yaWdodCc6IGNvbC5waW5uZWQgPT09ICdyaWdodCd9XCJcbiAgICAgICAgICBbbmdTdHlsZV09XCJ7J3dpZHRoJzogY29sLndpZHRoLCAnbWluLXdpZHRoJzogY29sLndpZHRofVwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiaXNUZW1wbGF0ZVJlZihjZWxsVGVtcGxhdGUpXCIgW25nSWZFbHNlXT1cImNlbGxUcGxcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2VsbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcm93LCByb3dEYXRhOiByb3csIGluZGV4OiBnZXRJbmRleChpbmRleCwgZGF0YUluZGV4KSwgY29sRGVmOiBjb2wgfVwiPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbFRwbD5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiY2VsbFRlbXBsYXRlICYmIGlzVGVtcGxhdGVSZWYoY2VsbFRlbXBsYXRlW2NvbC5maWVsZF0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0lmRWxzZV09XCJjb2xEZWZDZWxsVHBsXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2VsbFRlbXBsYXRlW2NvbC5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHJvdywgcm93RGF0YTogcm93LCBpbmRleDogZ2V0SW5kZXgoaW5kZXgsIGRhdGFJbmRleCksIGNvbERlZjogY29sIH1cIj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNjb2xEZWZDZWxsVHBsPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJjb2wuY2VsbFRlbXBsYXRlXCIgW25nSWZFbHNlXT1cImRlZmF1bHRDZWxsVHBsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbC5jZWxsVGVtcGxhdGUgPz8gbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHJvdywgcm93RGF0YTogcm93LCBpbmRleDogZ2V0SW5kZXgoaW5kZXgsIGRhdGFJbmRleCksIGNvbERlZjogY29sIH1cIj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRDZWxsVHBsPlxuICAgICAgICAgIDxlbnRyeS1jZWxsIFtyb3dEYXRhXT1cInJvd1wiIFtjb2xEZWZdPVwiY29sXCI+PC9lbnRyeS1jZWxsPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWVcIj48L3RyPlxuICA8dHIgbWF0LXJvd1xuICAgICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGxldCBpbmRleCA9IGluZGV4OyBsZXQgZGF0YUluZGV4ID0gZGF0YUluZGV4OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zO1wiXG4gICAgICBbbmdDbGFzc109XCJnZXRSb3dDbGFzc0xpc3Qocm93LCBnZXRJbmRleChpbmRleCwgZGF0YUluZGV4KSlcIlxuICAgICAgW2F0dHIudGFiaW5kZXhdPVwicm93Rm9jdXNWaXNpYmxlID8gMCA6IC0xXCJcbiAgICAgIChjbGljayk9XCJyb3dDbGljay5lbWl0KHJvdylcIlxuICAgICAgKGtleXVwLmVudGVyKT1cInJvd0NsaWNrLmVtaXQocm93KVwiPlxuICA8L3RyPlxuPC90YWJsZT5cblxuPCEtLSBObyByZXN1bHRzIC0tPlxuPGRpdiBjbGFzcz1cIm5vLXJlc3VsdHMgbWF0LWJvZHktMlwiICpuZ0lmPVwiaGFzTm9SZXN1bHRcIj5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImlzVGVtcGxhdGVSZWYobm9SZXN1bHRUZW1wbGF0ZSlcIiBbbmdJZkVsc2VdPVwiZGVmYXVsdE5vUmVzdWx0VHBsXCI+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5vUmVzdWx0VGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI2RlZmF1bHROb1Jlc3VsdFRwbD57e25vUmVzdWx0VGV4dH19PC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuXG48IS0tIFBhZ2luYXRpb24gLS0+XG48bmctdGVtcGxhdGUgW25nSWZdPVwiaXNUZW1wbGF0ZVJlZihwYWdpbmF0aW9uVGVtcGxhdGUpXCIgW25nSWZFbHNlXT1cImRlZmF1bHRQYWdpbmF0aW9uVGVtcGxhdGVcIj5cbiAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInBhZ2luYXRpb25UZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0UGFnaW5hdGlvblRlbXBsYXRlPlxuICA8bWF0LXBhZ2luYXRvciBjbGFzcz1cInBhZ2luYXRpb25cIiAqbmdJZj1cInNob3VsZFNob3dQYWdpbmF0b3JcIlxuICAgICAgICAgICAgICAgICAgW3Nob3dGaXJzdExhc3RCdXR0b25zXT1cInNob3dGaXJzdExhc3RCdXR0b25zXCJcbiAgICAgICAgICAgICAgICAgIFtsZW5ndGhdPVwidG90YWxcIlxuICAgICAgICAgICAgICAgICAgW3BhZ2VJbmRleF09XCJwYWdlSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcbiAgICAgICAgICAgICAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgIFtoaWRlUGFnZVNpemVdPVwiaGlkZVBhZ2VTaXplXCJcbiAgICAgICAgICAgICAgICAgIChwYWdlKT1cImhhbmRsZVBhZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicGFnZURpc2FibGVkXCI+XG4gIDwvbWF0LXBhZ2luYXRvcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -280,15 +280,18 @@ class EntryTableComponent {
|
|
|
280
280
|
scrollToTop() {
|
|
281
281
|
this._elementRef.nativeElement.scrollTop = 0;
|
|
282
282
|
}
|
|
283
|
+
get shouldShowPaginator() {
|
|
284
|
+
return this.showPaginator && this._data.length > 0;
|
|
285
|
+
}
|
|
283
286
|
convertToKebabCase(value) {
|
|
284
287
|
return value?.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();
|
|
285
288
|
}
|
|
286
289
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EntryTableComponent, deps: [{ token: ENTRY_TABLE_CONFIG }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
287
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EntryTableComponent, selector: "entry-table", inputs: { displayedColumns: "displayedColumns", columns: "columns", data: "data", total: "total", loading: "loading", showPaginator: "showPaginator", pageDisabled: "pageDisabled", showFirstLastButtons: "showFirstLastButtons", pageIndex: "pageIndex", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", hidePageSize: "hidePageSize", paginationTemplate: "paginationTemplate", sortActive: "sortActive", sortDirection: "sortDirection", sortDisableClear: "sortDisableClear", sortDisabled: "sortDisabled", sortStart: "sortStart", rowHover: "rowHover", rowStriped: "rowStriped", rowFocusVisible: "rowFocusVisible", multiSelectable: "multiSelectable", rowSelected: "rowSelected", rowSelectable: "rowSelectable", showSelectAllCheckbox: "showSelectAllCheckbox", rowSelectionFormatter: "rowSelectionFormatter", rowClassFormatter: "rowClassFormatter", showContextMenu: "showContextMenu", contextMenuItems: "contextMenuItems", contextMenuTemplate: "contextMenuTemplate", rowContextMenuFormatter: "rowContextMenuFormatter", noResultText: "noResultText", noResultTemplate: "noResultTemplate", headerTemplate: "headerTemplate", cellTemplate: "cellTemplate" }, outputs: { pageChange: "pageChange", sortChange: "sortChange", rowClick: "rowClick", rowSelectionChange: "rowSelectionChange", contextMenuItemSelected: "contextMenuItemSelected" }, host: { properties: { "class": "this.className" } }, usesOnChanges: true, ngImport: i0, template: "<!-- Table content -->\n<table mat-table \n [ngClass]=\"{'mat-table-hover': rowHover, 'mat-table-striped': rowStriped, 'mat-table-with-data': !hasNoResult }\"\n [dataSource]=\"dataSource\"\n matSort\n [matSortActive]=\"sortActive\"\n [matSortDirection]=\"sortDirection\"\n [matSortDisableClear]=\"sortDisableClear\"\n [matSortDisabled]=\"sortDisabled\"\n [matSortStart]=\"sortStart\"\n (matSortChange)=\"sortChange.emit($event)\">\n\n <!-- Selection column -->\n <ng-container *ngIf=\"rowSelectable\" [matColumnDef]=\"selectionColumn\">\n <th mat-header-cell *matHeaderCellDef class=\"selection-cell\">\n <mat-checkbox *ngIf=\"multiSelectable && showSelectAllCheckbox\"\n [checked]=\"rowSelection.hasValue() && isAllSelected()\"\n [indeterminate]=\"rowSelection.hasValue() && !isAllSelected()\"\n (change)=\"$event ? toggleSelectAllCheckbox() : null\">\n </mat-checkbox>\n </th>\n <td mat-cell *matCellDef=\"let row; let index = index; let dataIndex = dataIndex;\"\n class=\"selection-cell\"\n (click)=\"$event.stopPropagation()\">\n <mat-checkbox\n *ngIf=\"multiSelectable && !(rowSelectionFormatter.hideCheckbox && rowSelectionFormatter.hideCheckbox!(row))\"\n [disabled]=\"rowSelectionFormatter.disabled && rowSelectionFormatter.disabled!(row)\"\n [checked]=\"rowSelection.isSelected(row)\"\n (change)=\"$event ? toggleRowSelection(row) : null\">\n </mat-checkbox>\n <mat-radio-button\n *ngIf=\"!multiSelectable && !(rowSelectionFormatter.hideCheckbox && rowSelectionFormatter.hideCheckbox!(row))\"\n [disabled]=\"rowSelectionFormatter.disabled && rowSelectionFormatter.disabled!(row)\"\n [checked]=\"rowSelection.isSelected(row)\"\n [value]=\"rowSelection.isSelected(row)\"\n (change)=\"$event ? toggleRowSelection(row) : null\">\n </mat-radio-button>\n </td>\n </ng-container>\n\n <!-- Context menu column -->\n <ng-container *ngIf=\"showContextMenu\" [matColumnDef]=\"contextMenuColumn\">\n <th mat-header-cell *matHeaderCellDef class=\"action-cell\"></th>\n <td mat-cell *matCellDef=\"let row; let index = index; let dataIndex = dataIndex;\"\n class=\"action-cell\">\n <ng-template [ngIf]=\"isTemplateRef(contextMenuTemplate)\" [ngIfElse]=\"contextMenuTpl\">\n <ng-template [ngTemplateOutlet]=\"contextMenuTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row }\">\n </ng-template>\n </ng-template>\n <ng-template #contextMenuTpl>\n <entry-cell-context-menu\n [items]=\"contextMenuItems\"\n [rowData]=\"row\"\n [rowMenuFormatter]=\"rowContextMenuFormatter\"\n (selected)=\"contextMenuItemSelected.emit({itemId: $event, rowData: row})\"\n ></entry-cell-context-menu>\n </ng-template>\n </td>\n </ng-container>\n\n <ng-container *ngFor=\"let col of columns;\">\n <ng-container [matColumnDef]=\"col.field\"\n [sticky]=\"col.pinned==='left'\" [stickyEnd]=\"col.pinned==='right'\">\n <th mat-header-cell *matHeaderCellDef\n [class]=\"getColumnClassList(col)\"\n [ngClass]=\"{'mat-table-sticky-left': col.pinned === 'left', 'mat-table-sticky-right': col.pinned === 'right'}\"\n [ngStyle]=\"{'width': col.width, 'min-width': col.width}\">\n <ng-template [ngIf]=\"isTemplateRef(headerTemplate)\" [ngIfElse]=\"headerTpl\">\n <ng-template [ngTemplateOutlet]=\"headerTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\">\n </ng-template>\n </ng-template>\n <ng-template #headerTpl>\n <ng-template [ngIf]=\"headerTemplate && isTemplateRef(headerTemplate[col.field])\"\n [ngIfElse]=\"defaultHeaderTpl\">\n <ng-template [ngTemplateOutlet]=\"headerTemplate[col.field]\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\">\n </ng-template>\n </ng-template>\n </ng-template>\n <ng-template #defaultHeaderTpl>\n <div [mat-sort-header]=\"col.sortProp?.id || col.field\"\n [disabled]=\"!col.sortable\"\n [disableClear]=\"col.sortProp?.disableClear\">\n <span>{{col.header}}</span>\n </div>\n </ng-template>\n </th>\n\n <td mat-cell *matCellDef=\"let row; let index = index; let dataIndex = dataIndex;\"\n [class]=\"getColumnClassList(col)\"\n [ngClass]=\"{'mat-table-sticky-left': col.pinned === 'left', 'mat-table-sticky-right': col.pinned === 'right'}\"\n [ngStyle]=\"{'width': col.width, 'min-width': col.width}\">\n <ng-template [ngIf]=\"isTemplateRef(cellTemplate)\" [ngIfElse]=\"cellTpl\">\n <ng-template [ngTemplateOutlet]=\"cellTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row, index: getIndex(index, dataIndex), colDef: col }\">\n </ng-template>\n </ng-template>\n <ng-template #cellTpl>\n <ng-template [ngIf]=\"cellTemplate && isTemplateRef(cellTemplate[col.field])\"\n [ngIfElse]=\"colDefCellTpl\">\n <ng-template [ngTemplateOutlet]=\"cellTemplate[col.field]\"\n [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row, index: getIndex(index, dataIndex), colDef: col }\">\n </ng-template>\n </ng-template>\n </ng-template>\n <ng-template #colDefCellTpl>\n <ng-template [ngIf]=\"col.cellTemplate\" [ngIfElse]=\"defaultCellTpl\"\n [ngTemplateOutlet]=\"col.cellTemplate ?? null\"\n [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row, index: getIndex(index, dataIndex), colDef: col }\">\n </ng-template>\n </ng-template>\n <ng-template #defaultCellTpl>\n <entry-cell [rowData]=\"row\" [colDef]=\"col\"></entry-cell>\n </ng-template>\n </td>\n </ng-container>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\n <tr mat-row\n *matRowDef=\"let row; let index = index; let dataIndex = dataIndex; columns: displayedColumns;\"\n [ngClass]=\"getRowClassList(row, getIndex(index, dataIndex))\"\n [attr.tabindex]=\"rowFocusVisible ? 0 : -1\"\n (click)=\"rowClick.emit(row)\"\n (keyup.enter)=\"rowClick.emit(row)\">\n </tr>\n</table>\n\n<!-- No results -->\n<div class=\"no-results mat-body-2\" *ngIf=\"hasNoResult\">\n <ng-template [ngIf]=\"isTemplateRef(noResultTemplate)\" [ngIfElse]=\"defaultNoResultTpl\">\n <ng-template [ngTemplateOutlet]=\"noResultTemplate\"></ng-template>\n </ng-template>\n <ng-template #defaultNoResultTpl>{{noResultText}}</ng-template>\n</div>\n\n<!-- Pagination -->\n<ng-template [ngIf]=\"isTemplateRef(paginationTemplate)\" [ngIfElse]=\"defaultPaginationTemplate\">\n <ng-template [ngTemplateOutlet]=\"paginationTemplate\"></ng-template>\n</ng-template>\n<ng-template #defaultPaginationTemplate>\n <mat-paginator class=\"pagination\" *ngIf=\"showPaginator\"\n [showFirstLastButtons]=\"showFirstLastButtons\"\n [length]=\"total\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [hidePageSize]=\"hidePageSize\"\n (page)=\"handlePage($event)\"\n [disabled]=\"pageDisabled\">\n </mat-paginator>\n</ng-template>", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2$1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i2$1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i2$1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i2$1.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i2$1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i2$1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i2$1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i2$1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i2$1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i2$1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i3$1.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i3$1.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: i4$1.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i6.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "component", type: EntryCellComponent, selector: "entry-cell", inputs: ["rowData", "colDef"] }, { kind: "component", type: EntryCellContextMenuComponent, selector: "entry-cell-context-menu", inputs: ["items", "rowMenuFormatter", "rowData"], outputs: ["selected"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
290
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EntryTableComponent, selector: "entry-table", inputs: { displayedColumns: "displayedColumns", columns: "columns", data: "data", total: "total", loading: "loading", showPaginator: "showPaginator", pageDisabled: "pageDisabled", showFirstLastButtons: "showFirstLastButtons", pageIndex: "pageIndex", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", hidePageSize: "hidePageSize", paginationTemplate: "paginationTemplate", sortActive: "sortActive", sortDirection: "sortDirection", sortDisableClear: "sortDisableClear", sortDisabled: "sortDisabled", sortStart: "sortStart", rowHover: "rowHover", rowStriped: "rowStriped", rowFocusVisible: "rowFocusVisible", multiSelectable: "multiSelectable", rowSelected: "rowSelected", rowSelectable: "rowSelectable", showSelectAllCheckbox: "showSelectAllCheckbox", rowSelectionFormatter: "rowSelectionFormatter", rowClassFormatter: "rowClassFormatter", showContextMenu: "showContextMenu", contextMenuItems: "contextMenuItems", contextMenuTemplate: "contextMenuTemplate", rowContextMenuFormatter: "rowContextMenuFormatter", noResultText: "noResultText", noResultTemplate: "noResultTemplate", headerTemplate: "headerTemplate", cellTemplate: "cellTemplate" }, outputs: { pageChange: "pageChange", sortChange: "sortChange", rowClick: "rowClick", rowSelectionChange: "rowSelectionChange", contextMenuItemSelected: "contextMenuItemSelected" }, host: { properties: { "class": "this.className" } }, usesOnChanges: true, ngImport: i0, template: "<!-- Table content -->\n<table mat-table\n [ngClass]=\"{'mat-table-hover': rowHover, 'mat-table-striped': rowStriped, 'mat-table-with-data': !hasNoResult }\"\n [dataSource]=\"dataSource\"\n matSort\n [matSortActive]=\"sortActive\"\n [matSortDirection]=\"sortDirection\"\n [matSortDisableClear]=\"sortDisableClear\"\n [matSortDisabled]=\"sortDisabled\"\n [matSortStart]=\"sortStart\"\n (matSortChange)=\"sortChange.emit($event)\">\n\n <!-- Selection column -->\n <ng-container *ngIf=\"rowSelectable\" [matColumnDef]=\"selectionColumn\">\n <th mat-header-cell *matHeaderCellDef class=\"selection-cell\">\n <mat-checkbox *ngIf=\"multiSelectable && showSelectAllCheckbox\"\n [checked]=\"rowSelection.hasValue() && isAllSelected()\"\n [indeterminate]=\"rowSelection.hasValue() && !isAllSelected()\"\n (change)=\"$event ? toggleSelectAllCheckbox() : null\">\n </mat-checkbox>\n </th>\n <td mat-cell *matCellDef=\"let row; let index = index; let dataIndex = dataIndex;\"\n class=\"selection-cell\"\n (click)=\"$event.stopPropagation()\">\n <mat-checkbox\n *ngIf=\"multiSelectable && !(rowSelectionFormatter.hideCheckbox && rowSelectionFormatter.hideCheckbox!(row))\"\n [disabled]=\"rowSelectionFormatter.disabled && rowSelectionFormatter.disabled!(row)\"\n [checked]=\"rowSelection.isSelected(row)\"\n (change)=\"$event ? toggleRowSelection(row) : null\">\n </mat-checkbox>\n <mat-radio-button\n *ngIf=\"!multiSelectable && !(rowSelectionFormatter.hideCheckbox && rowSelectionFormatter.hideCheckbox!(row))\"\n [disabled]=\"rowSelectionFormatter.disabled && rowSelectionFormatter.disabled!(row)\"\n [checked]=\"rowSelection.isSelected(row)\"\n [value]=\"rowSelection.isSelected(row)\"\n (change)=\"$event ? toggleRowSelection(row) : null\">\n </mat-radio-button>\n </td>\n </ng-container>\n\n <!-- Context menu column -->\n <ng-container *ngIf=\"showContextMenu\" [matColumnDef]=\"contextMenuColumn\">\n <th mat-header-cell *matHeaderCellDef class=\"action-cell\"></th>\n <td mat-cell *matCellDef=\"let row; let index = index; let dataIndex = dataIndex;\"\n class=\"action-cell\">\n <ng-template [ngIf]=\"isTemplateRef(contextMenuTemplate)\" [ngIfElse]=\"contextMenuTpl\">\n <ng-template [ngTemplateOutlet]=\"contextMenuTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row }\">\n </ng-template>\n </ng-template>\n <ng-template #contextMenuTpl>\n <entry-cell-context-menu\n [items]=\"contextMenuItems\"\n [rowData]=\"row\"\n [rowMenuFormatter]=\"rowContextMenuFormatter\"\n (selected)=\"contextMenuItemSelected.emit({itemId: $event, rowData: row})\"\n ></entry-cell-context-menu>\n </ng-template>\n </td>\n </ng-container>\n\n <ng-container *ngFor=\"let col of columns;\">\n <ng-container [matColumnDef]=\"col.field\"\n [sticky]=\"col.pinned==='left'\" [stickyEnd]=\"col.pinned==='right'\">\n <th mat-header-cell *matHeaderCellDef\n [class]=\"getColumnClassList(col)\"\n [ngClass]=\"{'mat-table-sticky-left': col.pinned === 'left', 'mat-table-sticky-right': col.pinned === 'right'}\"\n [ngStyle]=\"{'width': col.width, 'min-width': col.width}\">\n <ng-template [ngIf]=\"isTemplateRef(headerTemplate)\" [ngIfElse]=\"headerTpl\">\n <ng-template [ngTemplateOutlet]=\"headerTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\">\n </ng-template>\n </ng-template>\n <ng-template #headerTpl>\n <ng-template [ngIf]=\"headerTemplate && isTemplateRef(headerTemplate[col.field])\"\n [ngIfElse]=\"defaultHeaderTpl\">\n <ng-template [ngTemplateOutlet]=\"headerTemplate[col.field]\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\">\n </ng-template>\n </ng-template>\n </ng-template>\n <ng-template #defaultHeaderTpl>\n <div [mat-sort-header]=\"col.sortProp?.id || col.field\"\n [disabled]=\"!col.sortable\"\n [disableClear]=\"col.sortProp?.disableClear\">\n <span>{{col.header}}</span>\n </div>\n </ng-template>\n </th>\n\n <td mat-cell *matCellDef=\"let row; let index = index; let dataIndex = dataIndex;\"\n [class]=\"getColumnClassList(col)\"\n [ngClass]=\"{'mat-table-sticky-left': col.pinned === 'left', 'mat-table-sticky-right': col.pinned === 'right'}\"\n [ngStyle]=\"{'width': col.width, 'min-width': col.width}\">\n <ng-template [ngIf]=\"isTemplateRef(cellTemplate)\" [ngIfElse]=\"cellTpl\">\n <ng-template [ngTemplateOutlet]=\"cellTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row, index: getIndex(index, dataIndex), colDef: col }\">\n </ng-template>\n </ng-template>\n <ng-template #cellTpl>\n <ng-template [ngIf]=\"cellTemplate && isTemplateRef(cellTemplate[col.field])\"\n [ngIfElse]=\"colDefCellTpl\">\n <ng-template [ngTemplateOutlet]=\"cellTemplate[col.field]\"\n [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row, index: getIndex(index, dataIndex), colDef: col }\">\n </ng-template>\n </ng-template>\n </ng-template>\n <ng-template #colDefCellTpl>\n <ng-template [ngIf]=\"col.cellTemplate\" [ngIfElse]=\"defaultCellTpl\"\n [ngTemplateOutlet]=\"col.cellTemplate ?? null\"\n [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row, index: getIndex(index, dataIndex), colDef: col }\">\n </ng-template>\n </ng-template>\n <ng-template #defaultCellTpl>\n <entry-cell [rowData]=\"row\" [colDef]=\"col\"></entry-cell>\n </ng-template>\n </td>\n </ng-container>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\n <tr mat-row\n *matRowDef=\"let row; let index = index; let dataIndex = dataIndex; columns: displayedColumns;\"\n [ngClass]=\"getRowClassList(row, getIndex(index, dataIndex))\"\n [attr.tabindex]=\"rowFocusVisible ? 0 : -1\"\n (click)=\"rowClick.emit(row)\"\n (keyup.enter)=\"rowClick.emit(row)\">\n </tr>\n</table>\n\n<!-- No results -->\n<div class=\"no-results mat-body-2\" *ngIf=\"hasNoResult\">\n <ng-template [ngIf]=\"isTemplateRef(noResultTemplate)\" [ngIfElse]=\"defaultNoResultTpl\">\n <ng-template [ngTemplateOutlet]=\"noResultTemplate\"></ng-template>\n </ng-template>\n <ng-template #defaultNoResultTpl>{{noResultText}}</ng-template>\n</div>\n\n<!-- Pagination -->\n<ng-template [ngIf]=\"isTemplateRef(paginationTemplate)\" [ngIfElse]=\"defaultPaginationTemplate\">\n <ng-template [ngTemplateOutlet]=\"paginationTemplate\"></ng-template>\n</ng-template>\n<ng-template #defaultPaginationTemplate>\n <mat-paginator class=\"pagination\" *ngIf=\"shouldShowPaginator\"\n [showFirstLastButtons]=\"showFirstLastButtons\"\n [length]=\"total\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [hidePageSize]=\"hidePageSize\"\n (page)=\"handlePage($event)\"\n [disabled]=\"pageDisabled\">\n </mat-paginator>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2$1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i2$1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i2$1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i2$1.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i2$1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i2$1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i2$1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i2$1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i2$1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i2$1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i3$1.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i3$1.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: i4$1.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i6.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "component", type: EntryCellComponent, selector: "entry-cell", inputs: ["rowData", "colDef"] }, { kind: "component", type: EntryCellContextMenuComponent, selector: "entry-cell-context-menu", inputs: ["items", "rowMenuFormatter", "rowData"], outputs: ["selected"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
288
291
|
}
|
|
289
292
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EntryTableComponent, decorators: [{
|
|
290
293
|
type: Component,
|
|
291
|
-
args: [{ selector: 'entry-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- Table content -->\n<table mat-table
|
|
294
|
+
args: [{ selector: 'entry-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- Table content -->\n<table mat-table\n [ngClass]=\"{'mat-table-hover': rowHover, 'mat-table-striped': rowStriped, 'mat-table-with-data': !hasNoResult }\"\n [dataSource]=\"dataSource\"\n matSort\n [matSortActive]=\"sortActive\"\n [matSortDirection]=\"sortDirection\"\n [matSortDisableClear]=\"sortDisableClear\"\n [matSortDisabled]=\"sortDisabled\"\n [matSortStart]=\"sortStart\"\n (matSortChange)=\"sortChange.emit($event)\">\n\n <!-- Selection column -->\n <ng-container *ngIf=\"rowSelectable\" [matColumnDef]=\"selectionColumn\">\n <th mat-header-cell *matHeaderCellDef class=\"selection-cell\">\n <mat-checkbox *ngIf=\"multiSelectable && showSelectAllCheckbox\"\n [checked]=\"rowSelection.hasValue() && isAllSelected()\"\n [indeterminate]=\"rowSelection.hasValue() && !isAllSelected()\"\n (change)=\"$event ? toggleSelectAllCheckbox() : null\">\n </mat-checkbox>\n </th>\n <td mat-cell *matCellDef=\"let row; let index = index; let dataIndex = dataIndex;\"\n class=\"selection-cell\"\n (click)=\"$event.stopPropagation()\">\n <mat-checkbox\n *ngIf=\"multiSelectable && !(rowSelectionFormatter.hideCheckbox && rowSelectionFormatter.hideCheckbox!(row))\"\n [disabled]=\"rowSelectionFormatter.disabled && rowSelectionFormatter.disabled!(row)\"\n [checked]=\"rowSelection.isSelected(row)\"\n (change)=\"$event ? toggleRowSelection(row) : null\">\n </mat-checkbox>\n <mat-radio-button\n *ngIf=\"!multiSelectable && !(rowSelectionFormatter.hideCheckbox && rowSelectionFormatter.hideCheckbox!(row))\"\n [disabled]=\"rowSelectionFormatter.disabled && rowSelectionFormatter.disabled!(row)\"\n [checked]=\"rowSelection.isSelected(row)\"\n [value]=\"rowSelection.isSelected(row)\"\n (change)=\"$event ? toggleRowSelection(row) : null\">\n </mat-radio-button>\n </td>\n </ng-container>\n\n <!-- Context menu column -->\n <ng-container *ngIf=\"showContextMenu\" [matColumnDef]=\"contextMenuColumn\">\n <th mat-header-cell *matHeaderCellDef class=\"action-cell\"></th>\n <td mat-cell *matCellDef=\"let row; let index = index; let dataIndex = dataIndex;\"\n class=\"action-cell\">\n <ng-template [ngIf]=\"isTemplateRef(contextMenuTemplate)\" [ngIfElse]=\"contextMenuTpl\">\n <ng-template [ngTemplateOutlet]=\"contextMenuTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row }\">\n </ng-template>\n </ng-template>\n <ng-template #contextMenuTpl>\n <entry-cell-context-menu\n [items]=\"contextMenuItems\"\n [rowData]=\"row\"\n [rowMenuFormatter]=\"rowContextMenuFormatter\"\n (selected)=\"contextMenuItemSelected.emit({itemId: $event, rowData: row})\"\n ></entry-cell-context-menu>\n </ng-template>\n </td>\n </ng-container>\n\n <ng-container *ngFor=\"let col of columns;\">\n <ng-container [matColumnDef]=\"col.field\"\n [sticky]=\"col.pinned==='left'\" [stickyEnd]=\"col.pinned==='right'\">\n <th mat-header-cell *matHeaderCellDef\n [class]=\"getColumnClassList(col)\"\n [ngClass]=\"{'mat-table-sticky-left': col.pinned === 'left', 'mat-table-sticky-right': col.pinned === 'right'}\"\n [ngStyle]=\"{'width': col.width, 'min-width': col.width}\">\n <ng-template [ngIf]=\"isTemplateRef(headerTemplate)\" [ngIfElse]=\"headerTpl\">\n <ng-template [ngTemplateOutlet]=\"headerTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\">\n </ng-template>\n </ng-template>\n <ng-template #headerTpl>\n <ng-template [ngIf]=\"headerTemplate && isTemplateRef(headerTemplate[col.field])\"\n [ngIfElse]=\"defaultHeaderTpl\">\n <ng-template [ngTemplateOutlet]=\"headerTemplate[col.field]\"\n [ngTemplateOutletContext]=\"{ $implicit: col, colDef: col }\">\n </ng-template>\n </ng-template>\n </ng-template>\n <ng-template #defaultHeaderTpl>\n <div [mat-sort-header]=\"col.sortProp?.id || col.field\"\n [disabled]=\"!col.sortable\"\n [disableClear]=\"col.sortProp?.disableClear\">\n <span>{{col.header}}</span>\n </div>\n </ng-template>\n </th>\n\n <td mat-cell *matCellDef=\"let row; let index = index; let dataIndex = dataIndex;\"\n [class]=\"getColumnClassList(col)\"\n [ngClass]=\"{'mat-table-sticky-left': col.pinned === 'left', 'mat-table-sticky-right': col.pinned === 'right'}\"\n [ngStyle]=\"{'width': col.width, 'min-width': col.width}\">\n <ng-template [ngIf]=\"isTemplateRef(cellTemplate)\" [ngIfElse]=\"cellTpl\">\n <ng-template [ngTemplateOutlet]=\"cellTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row, index: getIndex(index, dataIndex), colDef: col }\">\n </ng-template>\n </ng-template>\n <ng-template #cellTpl>\n <ng-template [ngIf]=\"cellTemplate && isTemplateRef(cellTemplate[col.field])\"\n [ngIfElse]=\"colDefCellTpl\">\n <ng-template [ngTemplateOutlet]=\"cellTemplate[col.field]\"\n [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row, index: getIndex(index, dataIndex), colDef: col }\">\n </ng-template>\n </ng-template>\n </ng-template>\n <ng-template #colDefCellTpl>\n <ng-template [ngIf]=\"col.cellTemplate\" [ngIfElse]=\"defaultCellTpl\"\n [ngTemplateOutlet]=\"col.cellTemplate ?? null\"\n [ngTemplateOutletContext]=\"{ $implicit: row, rowData: row, index: getIndex(index, dataIndex), colDef: col }\">\n </ng-template>\n </ng-template>\n <ng-template #defaultCellTpl>\n <entry-cell [rowData]=\"row\" [colDef]=\"col\"></entry-cell>\n </ng-template>\n </td>\n </ng-container>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\n <tr mat-row\n *matRowDef=\"let row; let index = index; let dataIndex = dataIndex; columns: displayedColumns;\"\n [ngClass]=\"getRowClassList(row, getIndex(index, dataIndex))\"\n [attr.tabindex]=\"rowFocusVisible ? 0 : -1\"\n (click)=\"rowClick.emit(row)\"\n (keyup.enter)=\"rowClick.emit(row)\">\n </tr>\n</table>\n\n<!-- No results -->\n<div class=\"no-results mat-body-2\" *ngIf=\"hasNoResult\">\n <ng-template [ngIf]=\"isTemplateRef(noResultTemplate)\" [ngIfElse]=\"defaultNoResultTpl\">\n <ng-template [ngTemplateOutlet]=\"noResultTemplate\"></ng-template>\n </ng-template>\n <ng-template #defaultNoResultTpl>{{noResultText}}</ng-template>\n</div>\n\n<!-- Pagination -->\n<ng-template [ngIf]=\"isTemplateRef(paginationTemplate)\" [ngIfElse]=\"defaultPaginationTemplate\">\n <ng-template [ngTemplateOutlet]=\"paginationTemplate\"></ng-template>\n</ng-template>\n<ng-template #defaultPaginationTemplate>\n <mat-paginator class=\"pagination\" *ngIf=\"shouldShowPaginator\"\n [showFirstLastButtons]=\"showFirstLastButtons\"\n [length]=\"total\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [hidePageSize]=\"hidePageSize\"\n (page)=\"handlePage($event)\"\n [disabled]=\"pageDisabled\">\n </mat-paginator>\n</ng-template>\n" }]
|
|
292
295
|
}], ctorParameters: function () { return [{ type: EntryTableConfig, decorators: [{
|
|
293
296
|
type: Inject,
|
|
294
297
|
args: [ENTRY_TABLE_CONFIG]
|