ngx-vector-components 5.142.0 → 5.144.0
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/CHANGELOG.md +12 -0
- package/esm2022/lib/components/fields/data-table/data-table.component.mjs +26 -13
- package/esm2022/lib/models/data-table.model.mjs +1 -1
- package/esm2022/lib/models/profile.model.mjs +3 -1
- package/fesm2022/ngx-vector-components.mjs +19 -7
- package/fesm2022/ngx-vector-components.mjs.map +1 -1
- package/lib/components/badge/badge.component.d.ts +1 -1
- package/lib/components/fields/data-table/data-table.component.d.ts +8 -1
- package/lib/models/data-table.model.d.ts +8 -0
- package/lib/models/profile.model.d.ts +3 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [5.144.0] (19/03/2026)
|
|
4
|
+
|
|
5
|
+
### Feat
|
|
6
|
+
|
|
7
|
+
- Add 'SHOW_ORDER_APPROVAL' and 'SHOW_ACCOUNTS_RECEIVABLE' ProfileModuleActionType in `profile.model.ts`
|
|
8
|
+
|
|
9
|
+
## [5.143.0] (18/03/2026)
|
|
10
|
+
|
|
11
|
+
### Feat
|
|
12
|
+
|
|
13
|
+
- Add `cellEdit` property to `TableColumn` interface in `data-table.component.ts`
|
|
14
|
+
|
|
3
15
|
## [5.142.0] (16/03/2026)
|
|
4
16
|
|
|
5
17
|
### Feat
|
|
@@ -8,16 +8,19 @@ import { MaskUtil } from '../../../utils';
|
|
|
8
8
|
import { FiltersComponent } from '../filters/filters.component';
|
|
9
9
|
import * as i0 from "@angular/core";
|
|
10
10
|
import * as i1 from "@angular/common";
|
|
11
|
-
import * as i2 from "
|
|
12
|
-
import * as i3 from "
|
|
13
|
-
import * as i4 from "primeng/
|
|
14
|
-
import * as i5 from "
|
|
15
|
-
import * as i6 from "../../
|
|
16
|
-
import * as i7 from "primeng/
|
|
17
|
-
import * as i8 from "
|
|
18
|
-
import * as i9 from "
|
|
19
|
-
import * as i10 from "
|
|
20
|
-
import * as i11 from "
|
|
11
|
+
import * as i2 from "@angular/forms";
|
|
12
|
+
import * as i3 from "primeng/inputtext";
|
|
13
|
+
import * as i4 from "primeng/api";
|
|
14
|
+
import * as i5 from "primeng/inputnumber";
|
|
15
|
+
import * as i6 from "../../panel/panel.component";
|
|
16
|
+
import * as i7 from "primeng/tabview";
|
|
17
|
+
import * as i8 from "../../badge/badge.component";
|
|
18
|
+
import * as i9 from "../../score/score.component";
|
|
19
|
+
import * as i10 from "primeng/menu";
|
|
20
|
+
import * as i11 from "primeng/table";
|
|
21
|
+
import * as i12 from "../button/button.component";
|
|
22
|
+
import * as i13 from "../filters/filters.component";
|
|
23
|
+
import * as i14 from "@ngx-translate/core";
|
|
21
24
|
export class DataTableComponent {
|
|
22
25
|
set data(_data) {
|
|
23
26
|
this._data = _data;
|
|
@@ -111,6 +114,7 @@ export class DataTableComponent {
|
|
|
111
114
|
this.onFilterChanged = new EventEmitter();
|
|
112
115
|
this.onTabSelected = new EventEmitter();
|
|
113
116
|
this.onExpandRow = new EventEmitter();
|
|
117
|
+
this.onCellEdit = new EventEmitter();
|
|
114
118
|
this.firstLazyLoad = false;
|
|
115
119
|
this.shouldLazyLoadWithoutFilter = false;
|
|
116
120
|
this.reorderableColumns = false;
|
|
@@ -311,6 +315,13 @@ export class DataTableComponent {
|
|
|
311
315
|
isHtmlCell(col) {
|
|
312
316
|
return !col.type || !this.isBadgeCell(col);
|
|
313
317
|
}
|
|
318
|
+
isEditableCell(col) {
|
|
319
|
+
return this.isHtmlCell(col) && !!col.cellEdit;
|
|
320
|
+
}
|
|
321
|
+
onCellEditComplete(item, col, value) {
|
|
322
|
+
item[col.field] = value;
|
|
323
|
+
this.onCellEdit.emit({ item, field: col.field, value });
|
|
324
|
+
}
|
|
314
325
|
isBadgeCell(col) {
|
|
315
326
|
return col.type && [TableColumnType.TEXT_BADGE, TableColumnType.STACK_BADGE].includes(col.type);
|
|
316
327
|
}
|
|
@@ -348,11 +359,11 @@ export class DataTableComponent {
|
|
|
348
359
|
return active ? 'success' : 'error';
|
|
349
360
|
}
|
|
350
361
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DataTableComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
351
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DataTableComponent, selector: "vector-data-table", inputs: { columns: "columns", data: "data", exportExcel: "exportExcel", exportPDF: "exportPDF", customFunction: "customFunction", totalRecords: "totalRecords", disabledHeadercheckbox: "disabledHeadercheckbox", filters: "filters", addItemLabel: "addItemLabel", pagination: "pagination", virtualPagination: "virtualPagination", tabs: "tabs", customButtons: "customButtons", addItemButtonPlusSign: "addItemButtonPlusSign", hasActions: "hasActions", hasExpandableIcon: "hasExpandableIcon", addNameColumnExpand: "addNameColumnExpand", expandable: "expandable", expansionTemplate: "expansionTemplate", selectionMode: "selectionMode", selectionType: "selectionType", height: "height", showLimitBalance: "showLimitBalance", showDataBalance: "showDataBalance", dataAccountBalance: "dataAccountBalance", firstLazyLoad: "firstLazyLoad", shouldLazyLoadWithoutFilter: "shouldLazyLoadWithoutFilter", reorderableColumns: "reorderableColumns" }, outputs: { onLazyLoad: "onLazyLoad", onFilter: "onFilter", onAdd: "onAdd", onExportExcel: "onExportExcel", onExportPDF: "onExportPDF", onSelectedRows: "onSelectedRows", onFilterChanged: "onFilterChanged", onTabSelected: "onTabSelected", onExpandRow: "onExpandRow" }, viewQueries: [{ propertyName: "filtersComponent", first: true, predicate: FiltersComponent, descendants: true, static: true }], ngImport: i0, template: "<div class=\"grid\">\n <div class=\"col-12\">\n <vector-filters\n [fields]=\"filters\"\n (onSearch)=\"lazyLoaded({ filter: true, data: $event })\"\n (formBuilded)=\"subscribeToFilterChanges()\"\n ></vector-filters>\n </div>\n <div\n class=\"table-header-actions field\"\n *ngIf=\"addItemLabel || exportExcel || exportPDF || customFunction || customButtons\"\n >\n <button *ngIf=\"exportExcel\" (click)=\"onExportExcel.emit()\" class=\"export-button export-excel\">\n <i class=\"fas fa-file-excel\"></i><span>Excel</span>\n </button>\n <button *ngIf=\"exportPDF\" (click)=\"onExportPDF.emit()\" class=\"export-button export-pdf\">\n <i class=\"fas fa-file-pdf\"></i><span>PDF</span>\n </button>\n <button\n *ngFor=\"let button of customFunction\"\n (click)=\"button.clickFunction()\"\n class=\"export-button custom-function\"\n >\n <i *ngIf=\"button?.icon\" class=\"{{ button?.icon }}\"></i><span>{{ button?.label }}</span>\n </button>\n\n <vector-button\n *ngFor=\"let button of customButtons\"\n class=\"add-item-button\"\n [round]=\"true\"\n [label]=\"button.label\"\n (click)=\"button.clickFunction()\"\n [rightIcon]=\"addItemButtonPlusSign ? 'pi pi-plus' : ''\"\n [disabled]=\"button.disabled === true\"\n ></vector-button>\n <vector-button\n *ngIf=\"addItemLabel\"\n class=\"add-item-button\"\n [label]=\"addItemLabel\"\n (click)=\"onAdd.emit()\"\n [rightIcon]=\"addItemButtonPlusSign ? 'pi pi-plus' : ''\"\n [round]=\"true\"\n ></vector-button>\n </div>\n @if (showLimitBalance) {\n <div class=\"col-12 grid ml-0\">\n @for (itemAccount of dataAccountBalance; track $index) {\n @if (itemAccount.visible) {\n <div class=\"card balance-container\">\n <span class=\"card-header\">{{ itemAccount.name }}</span>\n <div class=\"card-content value-container\">\n <span>R$ </span>\n <span *ngIf=\"itemAccount.showBalance\" class=\"balance\">{{ balance(itemAccount) }}</span>\n <div class=\"hidden-balance\" *ngIf=\"!itemAccount.showBalance\"></div>\n <div class=\"icon-container\">\n <i\n class=\"fas\"\n [ngClass]=\"{ 'fa-eye': !itemAccount.showBalance, 'fa-eye-slash': itemAccount.showBalance }\"\n (click)=\"changeShowBalance(itemAccount)\"\n ></i>\n </div>\n </div>\n </div>\n }\n }\n </div>\n }\n @if (showDataBalance) {\n <div class=\"col-12 grid ml-0\">\n @for (itemAccount of dataAccountBalance; track $index) {\n <div class=\"card balance-container\">\n <span class=\"card-header\">{{ itemAccount.name }}</span>\n <div class=\"card-content value-container\">\n <span class=\"balance\">{{ itemAccount.valueBalance }}</span>\n </div>\n </div>\n }\n </div>\n }\n\n <div class=\"col-12\">\n <vector-panel class=\"data-table-panel\">\n <p-tabView (onChange)=\"onTabChange($event)\" *ngIf=\"tabs?.length\">\n <p-tabPanel *ngFor=\"let tab of tabs\">\n <ng-template pTemplate=\"header\">\n <em *ngIf=\"tab.icon\" [class]=\"tab.icon\"> </em>\n <span>{{ tab.name }}</span>\n </ng-template>\n </p-tabPanel>\n </p-tabView>\n <p-table\n currentPageReportTemplate=\"Mostrando {first} at\u00E9 {last} de {totalRecords} registros\"\n sortMode=\"single\"\n [rows]=\"10\"\n [lazy]=\"pagination && !virtualPagination\"\n [value]=\"data\"\n [paginator]=\"pagination\"\n [totalRecords]=\"totalRecords\"\n [showCurrentPageReport]=\"true\"\n [rowsPerPageOptions]=\"[10, 25, 50, 100]\"\n [responsive]=\"true\"\n [resizableColumns]=\"true\"\n [scrollable]=\"true\"\n scrollDirection=\"vertical\"\n responsiveLayout=\"scroll\"\n dataKey=\"id\"\n [scrollHeight]=\"height\"\n [attr.selectionMode]=\"selectionMode\"\n [(selection)]=\"selectedItems\"\n (onRowSelect)=\"changeSelectedItems($event)\"\n (onHeaderCheckboxToggle)=\"changeSelectedItems($event)\"\n (onRowUnselect)=\"changeSelectedItems($event)\"\n (onLazyLoad)=\"lazyLoaded({ filter: false, data: $event })\"\n (selectionChange)=\"onSelectionChange($event)\"\n [reorderableColumns]=\"reorderableColumns\"\n >\n <ng-template pTemplate=\"header\">\n <tr class=\"header\">\n <th *ngIf=\"reorderableColumns\" style=\"width: 5rem\"></th>\n\n <th *ngIf=\"selectionType === 'checkbox'\">\n <p-tableHeaderCheckbox [disabled]=\"disabledHeadercheckbox\"></p-tableHeaderCheckbox>\n </th>\n <th class=\"text-center\" *ngIf=\"hasExpandableIcon\">\n {{ addNameColumnExpand }}\n </th>\n <th *ngIf=\"hasActions\">{{ 'app.label.actions' | translate }}</th>\n <th *ngIf=\"selectionType === 'radiobutton'\">\n <div class=\"flex align-items-center\">\n <span></span>\n </div>\n </th>\n @for (col of columns; track $index) {\n @if (!col.hidden) {\n <th\n [ngStyle]=\"getColStyle(col)\"\n [pSortableColumn]=\"col.notSortable ? '' : col.field\"\n pReorderableColumn\n >\n <div class=\"flex align-items-center\">\n <span>{{ col.header }}</span> <p-sortIcon *ngIf=\"!col.notSortable\" [field]=\"col.field\"></p-sortIcon>\n </div>\n </th>\n }\n }\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-rowData let-item let-expanded=\"expanded\" let-index=\"rowIndex\">\n <tr\n class=\"row\"\n [pSelectableRow]=\"rowData\"\n [ngClass]=\"{ expandable: expandable }\"\n [pRowToggler]=\"expandable ? item : undefined\"\n (click)=\"onRowClick(item)\"\n [pReorderableRow]=\"index\"\n >\n <ng-container *ngIf=\"reorderableColumns\">\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"justify-content-center align-items-center\">\n <span class=\"pi pi-bars\" pReorderableRowHandle></span>\n </td>\n </ng-container>\n <ng-container *ngIf=\"selectionType === 'checkbox'\">\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"justify-content-center align-items-center\">\n <p-tableCheckbox [value]=\"item\" [disabled]=\"item.disabledCheckBox\"></p-tableCheckbox>\n </td>\n </ng-container>\n <ng-container *ngIf=\"selectionType === 'radiobutton'\">\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"justify-content-center align-items-center\">\n <p-tableRadioButton [value]=\"item\"></p-tableRadioButton>\n </td>\n </ng-container>\n <td *ngIf=\"hasExpandableIcon\" style=\"max-width: 150px\" class=\"centered\">\n <p-menu #menu [model]=\"item.actions\" [popup]=\"true\" appendTo=\"body\"></p-menu>\n <i\n [ngClass]=\"\n expanded ? 'actions-menu-button pi pi-chevron-down' : 'actions-menu-button pi pi-chevron-right'\n \"\n ></i>\n </td>\n <td *ngIf=\"hasActions\">\n <p-menu #menu [model]=\"item.actions\" [popup]=\"true\" appendTo=\"body\"></p-menu>\n <i class=\"actions-menu-button fas fa-cog\" (click)=\"menu.toggle($event)\"></i>\n </td>\n @for (col of columns; track $index) {\n @if (!col.hidden) {\n <ng-container>\n <td\n *ngIf=\"isHtmlCell(col)\"\n class=\"cell\"\n [innerHTML]=\"getCellContent(item, col)\"\n (click)=\"col && col.clickFunction && col.clickFunction(item)\"\n [ngStyle]=\"getColStyle(col)\"\n ></td>\n <td\n *ngIf=\"(!isHtmlCell(col) && !!col.getStatus) || isScoreCell(col)\"\n class=\"cell\"\n (click)=\"col && col.clickFunction && col.clickFunction(item)\"\n [ngStyle]=\"getColStyle(col)\"\n >\n <vector-badge\n *ngIf=\"isBadgeCell(col)\"\n [label]=\"getCellText(item, col)\"\n [type]=\"col.getStatus && col.getStatus(item[col.field])\"\n [tooltip]=\"getTooltipText(item, col)\"\n ></vector-badge>\n <vector-score *ngIf=\"isScoreCell(col)\" [score]=\"item[col.field]\"></vector-score>\n </td>\n </ng-container>\n }\n }\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr class=\"row\">\n <td class=\"no-results\" [attr.colspan]=\"columns.length + 1\">Nenhum resultado encontrado</td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"paginatorright\"> </ng-template>\n <ng-template let-item pTemplate=\"paginatordropdownitem\"> {{ item.value }} </ng-template>\n <ng-template pTemplate=\"rowexpansion\" let-item>\n <tr>\n <td [attr.colspan]=\"columns.length + (hasActions ? 1 : 0)\">\n <ng-container *ngTemplateOutlet=\"expansionTemplate; context: { item }\"> </ng-container>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </vector-panel>\n </div>\n</div>\n", styles: [".no-results{padding:15px;background-color:#fff;width:100%}.centered{display:flex;justify-content:center}.table-header-actions{display:flex;justify-content:flex-end;align-items:flex-end;width:100%;padding-right:7px;margin-bottom:15px!important}@media (min-width: 768px){.table-header-actions{margin-top:-3px}}.table-header-actions .export-button{padding:7px 10px;color:#fff;display:flex;align-items:center;border:none;border-radius:5px;margin:5px;font-size:.75rem;cursor:pointer}.table-header-actions .export-button.export-excel{background-color:var(--success-color)}.table-header-actions .export-button.export-excel:hover{background-color:var(--success-color-dark)}.table-header-actions .export-button.export-pdf{background-color:var(--error-color)}.table-header-actions .export-button.export-pdf:hover{background-color:var(--error-color-dark)}.table-header-actions .export-button.custom-function{background-color:var(--theme-primary)}.table-header-actions .export-button.custom-function:hover{background-color:var(--theme-medium)}.table-header-actions .export-button i{color:#fff}.table-header-actions .export-button span{margin-left:5px}.table-header-actions .add-item-button{margin-left:10px}.actions-menu-button{font-size:23px;cursor:pointer;color:var(--theme-medium)}.expandable{cursor:pointer}.balance-container{display:flex;flex-direction:column;min-width:13%;padding:0;margin-bottom:30px;top:30px;right:40px;border-radius:8px;margin-right:15px}.balance-container .header-right{flex:1;flex-direction:row;justify-content:flex-end;display:flex}@media screen and (max-width: 1450px){.balance-container{width:40%}}@media screen and (max-width: 960px){.balance-container{position:relative;width:80%;top:auto;right:auto}}.balance-container .card-header{color:var(--theme-medium);border-radius:9px 9px 0 0;padding:10px 10px 2px;font-weight:500;font-size:13px;line-height:17px;letter-spacing:.25px}.balance-container .value-container{display:flex;flex-direction:row;align-items:center;padding:0 10px 5px}.balance-container .value-container span{font-size:2em;font-weight:700;color:var(--theme-secondary)}@media screen and (max-width: 640px){.balance-container .value-container span{font-size:1.6em}}.balance-container .value-container .balance{margin-left:8px;width:70%}.balance-container .value-container .hidden-balance{background-color:var(--gray-lighter);padding:15px;margin-left:8px;width:70%;height:100%}.balance-container .value-container .icon-container{display:flex;flex:1;justify-content:center;align-items:center}.balance-container .value-container .icon-container i{cursor:pointer;font-size:2em;padding-top:2px;color:var(--theme-medium)}\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: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i3.PanelComponent, selector: "vector-panel" }, { kind: "component", type: i4.TabView, selector: "p-tabView", inputs: ["style", "styleClass", "controlClose", "scrollable", "activeIndex", "selectOnFocus", "nextButtonAriaLabel", "prevButtonAriaLabel", "autoHideButtons", "tabindex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i4.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "component", type: i5.BadgeComponent, selector: "vector-badge", inputs: ["type", "label", "customColor", "customBackgroundColor", "tooltip"] }, { kind: "component", type: i6.ScoreComponent, selector: "vector-score", inputs: ["score"] }, { kind: "component", type: i7.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "component", type: i8.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i8.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "directive", type: i8.SelectableRow, selector: "[pSelectableRow]", inputs: ["pSelectableRow", "pSelectableRowIndex", "pSelectableRowDisabled"] }, { kind: "directive", type: i8.RowToggler, selector: "[pRowToggler]", inputs: ["pRowToggler", "pRowTogglerDisabled"] }, { kind: "directive", type: i8.ReorderableColumn, selector: "[pReorderableColumn]", inputs: ["pReorderableColumnDisabled"] }, { kind: "component", type: i8.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i8.TableRadioButton, selector: "p-tableRadioButton", inputs: ["disabled", "value", "index", "inputId", "name", "ariaLabel"] }, { kind: "component", type: i8.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i8.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "directive", type: i8.ReorderableRowHandle, selector: "[pReorderableRowHandle]" }, { kind: "directive", type: i8.ReorderableRow, selector: "[pReorderableRow]", inputs: ["pReorderableRow", "pReorderableRowDisabled"] }, { kind: "component", type: i9.ButtonComponent, selector: "vector-button", inputs: ["disabled", "label", "type", "leftIcon", "rightIcon", "noShadow", "round", "style", "loading"], outputs: ["onClick"] }, { kind: "component", type: i10.FiltersComponent, selector: "vector-filters", inputs: ["fields"], outputs: ["onSearch", "formBuilded"] }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }] }); }
|
|
362
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DataTableComponent, selector: "vector-data-table", inputs: { columns: "columns", data: "data", exportExcel: "exportExcel", exportPDF: "exportPDF", customFunction: "customFunction", totalRecords: "totalRecords", disabledHeadercheckbox: "disabledHeadercheckbox", filters: "filters", addItemLabel: "addItemLabel", pagination: "pagination", virtualPagination: "virtualPagination", tabs: "tabs", customButtons: "customButtons", addItemButtonPlusSign: "addItemButtonPlusSign", hasActions: "hasActions", hasExpandableIcon: "hasExpandableIcon", addNameColumnExpand: "addNameColumnExpand", expandable: "expandable", expansionTemplate: "expansionTemplate", selectionMode: "selectionMode", selectionType: "selectionType", height: "height", showLimitBalance: "showLimitBalance", showDataBalance: "showDataBalance", dataAccountBalance: "dataAccountBalance", firstLazyLoad: "firstLazyLoad", shouldLazyLoadWithoutFilter: "shouldLazyLoadWithoutFilter", reorderableColumns: "reorderableColumns" }, outputs: { onLazyLoad: "onLazyLoad", onFilter: "onFilter", onAdd: "onAdd", onExportExcel: "onExportExcel", onExportPDF: "onExportPDF", onSelectedRows: "onSelectedRows", onFilterChanged: "onFilterChanged", onTabSelected: "onTabSelected", onExpandRow: "onExpandRow", onCellEdit: "onCellEdit" }, viewQueries: [{ propertyName: "filtersComponent", first: true, predicate: FiltersComponent, descendants: true, static: true }], ngImport: i0, template: "<div class=\"grid\">\n <div class=\"col-12\">\n <vector-filters\n [fields]=\"filters\"\n (onSearch)=\"lazyLoaded({ filter: true, data: $event })\"\n (formBuilded)=\"subscribeToFilterChanges()\"\n ></vector-filters>\n </div>\n <div\n class=\"table-header-actions field\"\n *ngIf=\"addItemLabel || exportExcel || exportPDF || customFunction || customButtons\"\n >\n <button *ngIf=\"exportExcel\" (click)=\"onExportExcel.emit()\" class=\"export-button export-excel\">\n <i class=\"fas fa-file-excel\"></i><span>Excel</span>\n </button>\n <button *ngIf=\"exportPDF\" (click)=\"onExportPDF.emit()\" class=\"export-button export-pdf\">\n <i class=\"fas fa-file-pdf\"></i><span>PDF</span>\n </button>\n <button\n *ngFor=\"let button of customFunction\"\n (click)=\"button.clickFunction()\"\n class=\"export-button custom-function\"\n >\n <i *ngIf=\"button?.icon\" class=\"{{ button?.icon }}\"></i><span>{{ button?.label }}</span>\n </button>\n\n <vector-button\n *ngFor=\"let button of customButtons\"\n class=\"add-item-button\"\n [round]=\"true\"\n [label]=\"button.label\"\n (click)=\"button.clickFunction()\"\n [rightIcon]=\"addItemButtonPlusSign ? 'pi pi-plus' : ''\"\n [disabled]=\"button.disabled === true\"\n ></vector-button>\n <vector-button\n *ngIf=\"addItemLabel\"\n class=\"add-item-button\"\n [label]=\"addItemLabel\"\n (click)=\"onAdd.emit()\"\n [rightIcon]=\"addItemButtonPlusSign ? 'pi pi-plus' : ''\"\n [round]=\"true\"\n ></vector-button>\n </div>\n @if (showLimitBalance) {\n <div class=\"col-12 grid ml-0\">\n @for (itemAccount of dataAccountBalance; track $index) {\n @if (itemAccount.visible) {\n <div class=\"card balance-container\">\n <span class=\"card-header\">{{ itemAccount.name }}</span>\n <div class=\"card-content value-container\">\n <span>R$ </span>\n <span *ngIf=\"itemAccount.showBalance\" class=\"balance\">{{ balance(itemAccount) }}</span>\n <div class=\"hidden-balance\" *ngIf=\"!itemAccount.showBalance\"></div>\n <div class=\"icon-container\">\n <i\n class=\"fas\"\n [ngClass]=\"{ 'fa-eye': !itemAccount.showBalance, 'fa-eye-slash': itemAccount.showBalance }\"\n (click)=\"changeShowBalance(itemAccount)\"\n ></i>\n </div>\n </div>\n </div>\n }\n }\n </div>\n }\n @if (showDataBalance) {\n <div class=\"col-12 grid ml-0\">\n @for (itemAccount of dataAccountBalance; track $index) {\n <div class=\"card balance-container\">\n <span class=\"card-header\">{{ itemAccount.name }}</span>\n <div class=\"card-content value-container\">\n <span class=\"balance\">{{ itemAccount.valueBalance }}</span>\n </div>\n </div>\n }\n </div>\n }\n\n <div class=\"col-12\">\n <vector-panel class=\"data-table-panel\">\n <p-tabView (onChange)=\"onTabChange($event)\" *ngIf=\"tabs?.length\">\n <p-tabPanel *ngFor=\"let tab of tabs\">\n <ng-template pTemplate=\"header\">\n <em *ngIf=\"tab.icon\" [class]=\"tab.icon\"> </em>\n <span>{{ tab.name }}</span>\n </ng-template>\n </p-tabPanel>\n </p-tabView>\n <p-table\n currentPageReportTemplate=\"Mostrando {first} at\u00E9 {last} de {totalRecords} registros\"\n sortMode=\"single\"\n [rows]=\"10\"\n [lazy]=\"pagination && !virtualPagination\"\n [value]=\"data\"\n [paginator]=\"pagination\"\n [totalRecords]=\"totalRecords\"\n [showCurrentPageReport]=\"true\"\n [rowsPerPageOptions]=\"[10, 25, 50, 100]\"\n [responsive]=\"true\"\n [resizableColumns]=\"true\"\n [scrollable]=\"true\"\n scrollDirection=\"vertical\"\n responsiveLayout=\"scroll\"\n dataKey=\"id\"\n [scrollHeight]=\"height\"\n [attr.selectionMode]=\"selectionMode\"\n [(selection)]=\"selectedItems\"\n (onRowSelect)=\"changeSelectedItems($event)\"\n (onHeaderCheckboxToggle)=\"changeSelectedItems($event)\"\n (onRowUnselect)=\"changeSelectedItems($event)\"\n (onLazyLoad)=\"lazyLoaded({ filter: false, data: $event })\"\n (selectionChange)=\"onSelectionChange($event)\"\n [reorderableColumns]=\"reorderableColumns\"\n editMode=\"cell\"\n >\n <ng-template pTemplate=\"header\">\n <tr class=\"header\">\n <th *ngIf=\"reorderableColumns\" style=\"width: 5rem\"></th>\n\n <th *ngIf=\"selectionType === 'checkbox'\">\n <p-tableHeaderCheckbox [disabled]=\"disabledHeadercheckbox\"></p-tableHeaderCheckbox>\n </th>\n <th class=\"text-center\" *ngIf=\"hasExpandableIcon\">\n {{ addNameColumnExpand }}\n </th>\n <th *ngIf=\"hasActions\">{{ 'app.label.actions' | translate }}</th>\n <th *ngIf=\"selectionType === 'radiobutton'\">\n <div class=\"flex align-items-center\">\n <span></span>\n </div>\n </th>\n @for (col of columns; track $index) {\n @if (!col.hidden) {\n <th\n [ngStyle]=\"getColStyle(col)\"\n [pSortableColumn]=\"col.notSortable ? '' : col.field\"\n pReorderableColumn\n >\n <div class=\"flex align-items-center\">\n <span>{{ col.header }}</span> <p-sortIcon *ngIf=\"!col.notSortable\" [field]=\"col.field\"></p-sortIcon>\n </div>\n </th>\n }\n }\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-rowData let-item let-expanded=\"expanded\" let-index=\"rowIndex\">\n <tr\n class=\"row\"\n [pSelectableRow]=\"rowData\"\n [ngClass]=\"{ expandable: expandable }\"\n [pRowToggler]=\"expandable ? item : undefined\"\n (click)=\"onRowClick(item)\"\n [pReorderableRow]=\"index\"\n >\n <ng-container *ngIf=\"reorderableColumns\">\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"justify-content-center align-items-center\">\n <span class=\"pi pi-bars\" pReorderableRowHandle></span>\n </td>\n </ng-container>\n <ng-container *ngIf=\"selectionType === 'checkbox'\">\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"justify-content-center align-items-center\">\n <p-tableCheckbox [value]=\"item\" [disabled]=\"item.disabledCheckBox\"></p-tableCheckbox>\n </td>\n </ng-container>\n <ng-container *ngIf=\"selectionType === 'radiobutton'\">\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"justify-content-center align-items-center\">\n <p-tableRadioButton [value]=\"item\"></p-tableRadioButton>\n </td>\n </ng-container>\n <td *ngIf=\"hasExpandableIcon\" style=\"max-width: 150px\" class=\"centered\">\n <p-menu #menu [model]=\"item.actions\" [popup]=\"true\" appendTo=\"body\"></p-menu>\n <i\n [ngClass]=\"\n expanded ? 'actions-menu-button pi pi-chevron-down' : 'actions-menu-button pi pi-chevron-right'\n \"\n ></i>\n </td>\n <td *ngIf=\"hasActions\">\n <p-menu #menu [model]=\"item.actions\" [popup]=\"true\" appendTo=\"body\"></p-menu>\n <i class=\"actions-menu-button fas fa-cog\" (click)=\"menu.toggle($event)\"></i>\n </td>\n @for (col of columns; track $index) {\n @if (!col.hidden) {\n <ng-container>\n <td\n *ngIf=\"isEditableCell(col)\"\n class=\"cell\"\n [pEditableColumn]=\"item\"\n [pEditableColumnField]=\"col.field\"\n [ngStyle]=\"getColStyle(col)\"\n >\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <p-inputNumber\n *ngIf=\"!col.cellEdit?.editType || col.cellEdit?.editType === 'number'\"\n [(ngModel)]=\"item[col.field]\"\n [suffix]=\"col.cellEdit?.editSuffix || ''\"\n mode=\"decimal\"\n [maxFractionDigits]=\"col.cellEdit?.editMaxFractionDigits ?? 2\"\n [min]=\"col.cellEdit?.editMin ?? 0\"\n [max]=\"col.cellEdit?.editMax\"\n (onBlur)=\"onCellEditComplete(item, col, item[col.field])\"\n ></p-inputNumber>\n <input\n *ngIf=\"col.cellEdit?.editType === 'text'\"\n pInputText\n [(ngModel)]=\"item[col.field]\"\n (blur)=\"onCellEditComplete(item, col, item[col.field])\"\n />\n </ng-template>\n <ng-template pTemplate=\"output\">\n <span>{{ item[col.field] }}{{ col.cellEdit?.editSuffix || '' }}</span>\n <i class=\"pi pi-pencil ml-2 text-primary\"></i>\n </ng-template>\n </p-cellEditor>\n </td>\n <td\n *ngIf=\"isHtmlCell(col) && !col.cellEdit\"\n class=\"cell\"\n [innerHTML]=\"getCellContent(item, col)\"\n (click)=\"col && col.clickFunction && col.clickFunction(item)\"\n [ngStyle]=\"getColStyle(col)\"\n ></td>\n <td\n *ngIf=\"(!isHtmlCell(col) && !!col.getStatus) || isScoreCell(col)\"\n class=\"cell\"\n (click)=\"col && col.clickFunction && col.clickFunction(item)\"\n [ngStyle]=\"getColStyle(col)\"\n >\n <vector-badge\n *ngIf=\"isBadgeCell(col)\"\n [label]=\"getCellText(item, col)\"\n [type]=\"col.getStatus && col.getStatus(item[col.field])\"\n [tooltip]=\"getTooltipText(item, col)\"\n ></vector-badge>\n <vector-score *ngIf=\"isScoreCell(col)\" [score]=\"item[col.field]\"></vector-score>\n </td>\n </ng-container>\n }\n }\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr class=\"row\">\n <td class=\"no-results\" [attr.colspan]=\"columns.length + 1\">Nenhum resultado encontrado</td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"paginatorright\"> </ng-template>\n <ng-template let-item pTemplate=\"paginatordropdownitem\"> {{ item.value }} </ng-template>\n <ng-template pTemplate=\"rowexpansion\" let-item>\n <tr>\n <td [attr.colspan]=\"columns.length + (hasActions ? 1 : 0)\">\n <ng-container *ngTemplateOutlet=\"expansionTemplate; context: { item }\"> </ng-container>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </vector-panel>\n </div>\n</div>\n", styles: [".no-results{padding:15px;background-color:#fff;width:100%}.centered{display:flex;justify-content:center}.table-header-actions{display:flex;justify-content:flex-end;align-items:flex-end;width:100%;padding-right:7px;margin-bottom:15px!important}@media (min-width: 768px){.table-header-actions{margin-top:-3px}}.table-header-actions .export-button{padding:7px 10px;color:#fff;display:flex;align-items:center;border:none;border-radius:5px;margin:5px;font-size:.75rem;cursor:pointer}.table-header-actions .export-button.export-excel{background-color:var(--success-color)}.table-header-actions .export-button.export-excel:hover{background-color:var(--success-color-dark)}.table-header-actions .export-button.export-pdf{background-color:var(--error-color)}.table-header-actions .export-button.export-pdf:hover{background-color:var(--error-color-dark)}.table-header-actions .export-button.custom-function{background-color:var(--theme-primary)}.table-header-actions .export-button.custom-function:hover{background-color:var(--theme-medium)}.table-header-actions .export-button i{color:#fff}.table-header-actions .export-button span{margin-left:5px}.table-header-actions .add-item-button{margin-left:10px}.actions-menu-button{font-size:23px;cursor:pointer;color:var(--theme-medium)}.expandable{cursor:pointer}.balance-container{display:flex;flex-direction:column;min-width:13%;padding:0;margin-bottom:30px;top:30px;right:40px;border-radius:8px;margin-right:15px}.balance-container .header-right{flex:1;flex-direction:row;justify-content:flex-end;display:flex}@media screen and (max-width: 1450px){.balance-container{width:40%}}@media screen and (max-width: 960px){.balance-container{position:relative;width:80%;top:auto;right:auto}}.balance-container .card-header{color:var(--theme-medium);border-radius:9px 9px 0 0;padding:10px 10px 2px;font-weight:500;font-size:13px;line-height:17px;letter-spacing:.25px}.balance-container .value-container{display:flex;flex-direction:row;align-items:center;padding:0 10px 5px}.balance-container .value-container span{font-size:2em;font-weight:700;color:var(--theme-secondary)}@media screen and (max-width: 640px){.balance-container .value-container span{font-size:1.6em}}.balance-container .value-container .balance{margin-left:8px;width:70%}.balance-container .value-container .hidden-balance{background-color:var(--gray-lighter);padding:15px;margin-left:8px;width:70%;height:100%}.balance-container .value-container .icon-container{display:flex;flex:1;justify-content:center;align-items:center}.balance-container .value-container .icon-container i{cursor:pointer;font-size:2em;padding-top:2px;color:var(--theme-medium)}\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: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i5.InputNumber, selector: "p-inputNumber", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabelledBy", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "variant", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "autofocus", "disabled"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "component", type: i6.PanelComponent, selector: "vector-panel" }, { kind: "component", type: i7.TabView, selector: "p-tabView", inputs: ["style", "styleClass", "controlClose", "scrollable", "activeIndex", "selectOnFocus", "nextButtonAriaLabel", "prevButtonAriaLabel", "autoHideButtons", "tabindex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i7.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "component", type: i8.BadgeComponent, selector: "vector-badge", inputs: ["type", "label", "customColor", "customBackgroundColor", "tooltip"] }, { kind: "component", type: i9.ScoreComponent, selector: "vector-score", inputs: ["score"] }, { kind: "component", type: i10.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "component", type: i11.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i11.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "directive", type: i11.SelectableRow, selector: "[pSelectableRow]", inputs: ["pSelectableRow", "pSelectableRowIndex", "pSelectableRowDisabled"] }, { kind: "directive", type: i11.RowToggler, selector: "[pRowToggler]", inputs: ["pRowToggler", "pRowTogglerDisabled"] }, { kind: "directive", type: i11.ReorderableColumn, selector: "[pReorderableColumn]", inputs: ["pReorderableColumnDisabled"] }, { kind: "directive", type: i11.EditableColumn, selector: "[pEditableColumn]", inputs: ["pEditableColumn", "pEditableColumnField", "pEditableColumnRowIndex", "pEditableColumnDisabled", "pFocusCellSelector"] }, { kind: "component", type: i11.CellEditor, selector: "p-cellEditor" }, { kind: "component", type: i11.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i11.TableRadioButton, selector: "p-tableRadioButton", inputs: ["disabled", "value", "index", "inputId", "name", "ariaLabel"] }, { kind: "component", type: i11.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i11.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "directive", type: i11.ReorderableRowHandle, selector: "[pReorderableRowHandle]" }, { kind: "directive", type: i11.ReorderableRow, selector: "[pReorderableRow]", inputs: ["pReorderableRow", "pReorderableRowDisabled"] }, { kind: "component", type: i12.ButtonComponent, selector: "vector-button", inputs: ["disabled", "label", "type", "leftIcon", "rightIcon", "noShadow", "round", "style", "loading"], outputs: ["onClick"] }, { kind: "component", type: i13.FiltersComponent, selector: "vector-filters", inputs: ["fields"], outputs: ["onSearch", "formBuilded"] }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }] }); }
|
|
352
363
|
}
|
|
353
364
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DataTableComponent, decorators: [{
|
|
354
365
|
type: Component,
|
|
355
|
-
args: [{ selector: 'vector-data-table', template: "<div class=\"grid\">\n <div class=\"col-12\">\n <vector-filters\n [fields]=\"filters\"\n (onSearch)=\"lazyLoaded({ filter: true, data: $event })\"\n (formBuilded)=\"subscribeToFilterChanges()\"\n ></vector-filters>\n </div>\n <div\n class=\"table-header-actions field\"\n *ngIf=\"addItemLabel || exportExcel || exportPDF || customFunction || customButtons\"\n >\n <button *ngIf=\"exportExcel\" (click)=\"onExportExcel.emit()\" class=\"export-button export-excel\">\n <i class=\"fas fa-file-excel\"></i><span>Excel</span>\n </button>\n <button *ngIf=\"exportPDF\" (click)=\"onExportPDF.emit()\" class=\"export-button export-pdf\">\n <i class=\"fas fa-file-pdf\"></i><span>PDF</span>\n </button>\n <button\n *ngFor=\"let button of customFunction\"\n (click)=\"button.clickFunction()\"\n class=\"export-button custom-function\"\n >\n <i *ngIf=\"button?.icon\" class=\"{{ button?.icon }}\"></i><span>{{ button?.label }}</span>\n </button>\n\n <vector-button\n *ngFor=\"let button of customButtons\"\n class=\"add-item-button\"\n [round]=\"true\"\n [label]=\"button.label\"\n (click)=\"button.clickFunction()\"\n [rightIcon]=\"addItemButtonPlusSign ? 'pi pi-plus' : ''\"\n [disabled]=\"button.disabled === true\"\n ></vector-button>\n <vector-button\n *ngIf=\"addItemLabel\"\n class=\"add-item-button\"\n [label]=\"addItemLabel\"\n (click)=\"onAdd.emit()\"\n [rightIcon]=\"addItemButtonPlusSign ? 'pi pi-plus' : ''\"\n [round]=\"true\"\n ></vector-button>\n </div>\n @if (showLimitBalance) {\n <div class=\"col-12 grid ml-0\">\n @for (itemAccount of dataAccountBalance; track $index) {\n @if (itemAccount.visible) {\n <div class=\"card balance-container\">\n <span class=\"card-header\">{{ itemAccount.name }}</span>\n <div class=\"card-content value-container\">\n <span>R$ </span>\n <span *ngIf=\"itemAccount.showBalance\" class=\"balance\">{{ balance(itemAccount) }}</span>\n <div class=\"hidden-balance\" *ngIf=\"!itemAccount.showBalance\"></div>\n <div class=\"icon-container\">\n <i\n class=\"fas\"\n [ngClass]=\"{ 'fa-eye': !itemAccount.showBalance, 'fa-eye-slash': itemAccount.showBalance }\"\n (click)=\"changeShowBalance(itemAccount)\"\n ></i>\n </div>\n </div>\n </div>\n }\n }\n </div>\n }\n @if (showDataBalance) {\n <div class=\"col-12 grid ml-0\">\n @for (itemAccount of dataAccountBalance; track $index) {\n <div class=\"card balance-container\">\n <span class=\"card-header\">{{ itemAccount.name }}</span>\n <div class=\"card-content value-container\">\n <span class=\"balance\">{{ itemAccount.valueBalance }}</span>\n </div>\n </div>\n }\n </div>\n }\n\n <div class=\"col-12\">\n <vector-panel class=\"data-table-panel\">\n <p-tabView (onChange)=\"onTabChange($event)\" *ngIf=\"tabs?.length\">\n <p-tabPanel *ngFor=\"let tab of tabs\">\n <ng-template pTemplate=\"header\">\n <em *ngIf=\"tab.icon\" [class]=\"tab.icon\"> </em>\n <span>{{ tab.name }}</span>\n </ng-template>\n </p-tabPanel>\n </p-tabView>\n <p-table\n currentPageReportTemplate=\"Mostrando {first} at\u00E9 {last} de {totalRecords} registros\"\n sortMode=\"single\"\n [rows]=\"10\"\n [lazy]=\"pagination && !virtualPagination\"\n [value]=\"data\"\n [paginator]=\"pagination\"\n [totalRecords]=\"totalRecords\"\n [showCurrentPageReport]=\"true\"\n [rowsPerPageOptions]=\"[10, 25, 50, 100]\"\n [responsive]=\"true\"\n [resizableColumns]=\"true\"\n [scrollable]=\"true\"\n scrollDirection=\"vertical\"\n responsiveLayout=\"scroll\"\n dataKey=\"id\"\n [scrollHeight]=\"height\"\n [attr.selectionMode]=\"selectionMode\"\n [(selection)]=\"selectedItems\"\n (onRowSelect)=\"changeSelectedItems($event)\"\n (onHeaderCheckboxToggle)=\"changeSelectedItems($event)\"\n (onRowUnselect)=\"changeSelectedItems($event)\"\n (onLazyLoad)=\"lazyLoaded({ filter: false, data: $event })\"\n (selectionChange)=\"onSelectionChange($event)\"\n [reorderableColumns]=\"reorderableColumns\"\n >\n <ng-template pTemplate=\"header\">\n <tr class=\"header\">\n <th *ngIf=\"reorderableColumns\" style=\"width: 5rem\"></th>\n\n <th *ngIf=\"selectionType === 'checkbox'\">\n <p-tableHeaderCheckbox [disabled]=\"disabledHeadercheckbox\"></p-tableHeaderCheckbox>\n </th>\n <th class=\"text-center\" *ngIf=\"hasExpandableIcon\">\n {{ addNameColumnExpand }}\n </th>\n <th *ngIf=\"hasActions\">{{ 'app.label.actions' | translate }}</th>\n <th *ngIf=\"selectionType === 'radiobutton'\">\n <div class=\"flex align-items-center\">\n <span></span>\n </div>\n </th>\n @for (col of columns; track $index) {\n @if (!col.hidden) {\n <th\n [ngStyle]=\"getColStyle(col)\"\n [pSortableColumn]=\"col.notSortable ? '' : col.field\"\n pReorderableColumn\n >\n <div class=\"flex align-items-center\">\n <span>{{ col.header }}</span> <p-sortIcon *ngIf=\"!col.notSortable\" [field]=\"col.field\"></p-sortIcon>\n </div>\n </th>\n }\n }\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-rowData let-item let-expanded=\"expanded\" let-index=\"rowIndex\">\n <tr\n class=\"row\"\n [pSelectableRow]=\"rowData\"\n [ngClass]=\"{ expandable: expandable }\"\n [pRowToggler]=\"expandable ? item : undefined\"\n (click)=\"onRowClick(item)\"\n [pReorderableRow]=\"index\"\n >\n <ng-container *ngIf=\"reorderableColumns\">\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"justify-content-center align-items-center\">\n <span class=\"pi pi-bars\" pReorderableRowHandle></span>\n </td>\n </ng-container>\n <ng-container *ngIf=\"selectionType === 'checkbox'\">\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"justify-content-center align-items-center\">\n <p-tableCheckbox [value]=\"item\" [disabled]=\"item.disabledCheckBox\"></p-tableCheckbox>\n </td>\n </ng-container>\n <ng-container *ngIf=\"selectionType === 'radiobutton'\">\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"justify-content-center align-items-center\">\n <p-tableRadioButton [value]=\"item\"></p-tableRadioButton>\n </td>\n </ng-container>\n <td *ngIf=\"hasExpandableIcon\" style=\"max-width: 150px\" class=\"centered\">\n <p-menu #menu [model]=\"item.actions\" [popup]=\"true\" appendTo=\"body\"></p-menu>\n <i\n [ngClass]=\"\n expanded ? 'actions-menu-button pi pi-chevron-down' : 'actions-menu-button pi pi-chevron-right'\n \"\n ></i>\n </td>\n <td *ngIf=\"hasActions\">\n <p-menu #menu [model]=\"item.actions\" [popup]=\"true\" appendTo=\"body\"></p-menu>\n <i class=\"actions-menu-button fas fa-cog\" (click)=\"menu.toggle($event)\"></i>\n </td>\n @for (col of columns; track $index) {\n @if (!col.hidden) {\n <ng-container>\n <td\n *ngIf=\"isHtmlCell(col)\"\n class=\"cell\"\n [innerHTML]=\"getCellContent(item, col)\"\n (click)=\"col && col.clickFunction && col.clickFunction(item)\"\n [ngStyle]=\"getColStyle(col)\"\n ></td>\n <td\n *ngIf=\"(!isHtmlCell(col) && !!col.getStatus) || isScoreCell(col)\"\n class=\"cell\"\n (click)=\"col && col.clickFunction && col.clickFunction(item)\"\n [ngStyle]=\"getColStyle(col)\"\n >\n <vector-badge\n *ngIf=\"isBadgeCell(col)\"\n [label]=\"getCellText(item, col)\"\n [type]=\"col.getStatus && col.getStatus(item[col.field])\"\n [tooltip]=\"getTooltipText(item, col)\"\n ></vector-badge>\n <vector-score *ngIf=\"isScoreCell(col)\" [score]=\"item[col.field]\"></vector-score>\n </td>\n </ng-container>\n }\n }\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr class=\"row\">\n <td class=\"no-results\" [attr.colspan]=\"columns.length + 1\">Nenhum resultado encontrado</td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"paginatorright\"> </ng-template>\n <ng-template let-item pTemplate=\"paginatordropdownitem\"> {{ item.value }} </ng-template>\n <ng-template pTemplate=\"rowexpansion\" let-item>\n <tr>\n <td [attr.colspan]=\"columns.length + (hasActions ? 1 : 0)\">\n <ng-container *ngTemplateOutlet=\"expansionTemplate; context: { item }\"> </ng-container>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </vector-panel>\n </div>\n</div>\n", styles: [".no-results{padding:15px;background-color:#fff;width:100%}.centered{display:flex;justify-content:center}.table-header-actions{display:flex;justify-content:flex-end;align-items:flex-end;width:100%;padding-right:7px;margin-bottom:15px!important}@media (min-width: 768px){.table-header-actions{margin-top:-3px}}.table-header-actions .export-button{padding:7px 10px;color:#fff;display:flex;align-items:center;border:none;border-radius:5px;margin:5px;font-size:.75rem;cursor:pointer}.table-header-actions .export-button.export-excel{background-color:var(--success-color)}.table-header-actions .export-button.export-excel:hover{background-color:var(--success-color-dark)}.table-header-actions .export-button.export-pdf{background-color:var(--error-color)}.table-header-actions .export-button.export-pdf:hover{background-color:var(--error-color-dark)}.table-header-actions .export-button.custom-function{background-color:var(--theme-primary)}.table-header-actions .export-button.custom-function:hover{background-color:var(--theme-medium)}.table-header-actions .export-button i{color:#fff}.table-header-actions .export-button span{margin-left:5px}.table-header-actions .add-item-button{margin-left:10px}.actions-menu-button{font-size:23px;cursor:pointer;color:var(--theme-medium)}.expandable{cursor:pointer}.balance-container{display:flex;flex-direction:column;min-width:13%;padding:0;margin-bottom:30px;top:30px;right:40px;border-radius:8px;margin-right:15px}.balance-container .header-right{flex:1;flex-direction:row;justify-content:flex-end;display:flex}@media screen and (max-width: 1450px){.balance-container{width:40%}}@media screen and (max-width: 960px){.balance-container{position:relative;width:80%;top:auto;right:auto}}.balance-container .card-header{color:var(--theme-medium);border-radius:9px 9px 0 0;padding:10px 10px 2px;font-weight:500;font-size:13px;line-height:17px;letter-spacing:.25px}.balance-container .value-container{display:flex;flex-direction:row;align-items:center;padding:0 10px 5px}.balance-container .value-container span{font-size:2em;font-weight:700;color:var(--theme-secondary)}@media screen and (max-width: 640px){.balance-container .value-container span{font-size:1.6em}}.balance-container .value-container .balance{margin-left:8px;width:70%}.balance-container .value-container .hidden-balance{background-color:var(--gray-lighter);padding:15px;margin-left:8px;width:70%;height:100%}.balance-container .value-container .icon-container{display:flex;flex:1;justify-content:center;align-items:center}.balance-container .value-container .icon-container i{cursor:pointer;font-size:2em;padding-top:2px;color:var(--theme-medium)}\n"] }]
|
|
366
|
+
args: [{ selector: 'vector-data-table', template: "<div class=\"grid\">\n <div class=\"col-12\">\n <vector-filters\n [fields]=\"filters\"\n (onSearch)=\"lazyLoaded({ filter: true, data: $event })\"\n (formBuilded)=\"subscribeToFilterChanges()\"\n ></vector-filters>\n </div>\n <div\n class=\"table-header-actions field\"\n *ngIf=\"addItemLabel || exportExcel || exportPDF || customFunction || customButtons\"\n >\n <button *ngIf=\"exportExcel\" (click)=\"onExportExcel.emit()\" class=\"export-button export-excel\">\n <i class=\"fas fa-file-excel\"></i><span>Excel</span>\n </button>\n <button *ngIf=\"exportPDF\" (click)=\"onExportPDF.emit()\" class=\"export-button export-pdf\">\n <i class=\"fas fa-file-pdf\"></i><span>PDF</span>\n </button>\n <button\n *ngFor=\"let button of customFunction\"\n (click)=\"button.clickFunction()\"\n class=\"export-button custom-function\"\n >\n <i *ngIf=\"button?.icon\" class=\"{{ button?.icon }}\"></i><span>{{ button?.label }}</span>\n </button>\n\n <vector-button\n *ngFor=\"let button of customButtons\"\n class=\"add-item-button\"\n [round]=\"true\"\n [label]=\"button.label\"\n (click)=\"button.clickFunction()\"\n [rightIcon]=\"addItemButtonPlusSign ? 'pi pi-plus' : ''\"\n [disabled]=\"button.disabled === true\"\n ></vector-button>\n <vector-button\n *ngIf=\"addItemLabel\"\n class=\"add-item-button\"\n [label]=\"addItemLabel\"\n (click)=\"onAdd.emit()\"\n [rightIcon]=\"addItemButtonPlusSign ? 'pi pi-plus' : ''\"\n [round]=\"true\"\n ></vector-button>\n </div>\n @if (showLimitBalance) {\n <div class=\"col-12 grid ml-0\">\n @for (itemAccount of dataAccountBalance; track $index) {\n @if (itemAccount.visible) {\n <div class=\"card balance-container\">\n <span class=\"card-header\">{{ itemAccount.name }}</span>\n <div class=\"card-content value-container\">\n <span>R$ </span>\n <span *ngIf=\"itemAccount.showBalance\" class=\"balance\">{{ balance(itemAccount) }}</span>\n <div class=\"hidden-balance\" *ngIf=\"!itemAccount.showBalance\"></div>\n <div class=\"icon-container\">\n <i\n class=\"fas\"\n [ngClass]=\"{ 'fa-eye': !itemAccount.showBalance, 'fa-eye-slash': itemAccount.showBalance }\"\n (click)=\"changeShowBalance(itemAccount)\"\n ></i>\n </div>\n </div>\n </div>\n }\n }\n </div>\n }\n @if (showDataBalance) {\n <div class=\"col-12 grid ml-0\">\n @for (itemAccount of dataAccountBalance; track $index) {\n <div class=\"card balance-container\">\n <span class=\"card-header\">{{ itemAccount.name }}</span>\n <div class=\"card-content value-container\">\n <span class=\"balance\">{{ itemAccount.valueBalance }}</span>\n </div>\n </div>\n }\n </div>\n }\n\n <div class=\"col-12\">\n <vector-panel class=\"data-table-panel\">\n <p-tabView (onChange)=\"onTabChange($event)\" *ngIf=\"tabs?.length\">\n <p-tabPanel *ngFor=\"let tab of tabs\">\n <ng-template pTemplate=\"header\">\n <em *ngIf=\"tab.icon\" [class]=\"tab.icon\"> </em>\n <span>{{ tab.name }}</span>\n </ng-template>\n </p-tabPanel>\n </p-tabView>\n <p-table\n currentPageReportTemplate=\"Mostrando {first} at\u00E9 {last} de {totalRecords} registros\"\n sortMode=\"single\"\n [rows]=\"10\"\n [lazy]=\"pagination && !virtualPagination\"\n [value]=\"data\"\n [paginator]=\"pagination\"\n [totalRecords]=\"totalRecords\"\n [showCurrentPageReport]=\"true\"\n [rowsPerPageOptions]=\"[10, 25, 50, 100]\"\n [responsive]=\"true\"\n [resizableColumns]=\"true\"\n [scrollable]=\"true\"\n scrollDirection=\"vertical\"\n responsiveLayout=\"scroll\"\n dataKey=\"id\"\n [scrollHeight]=\"height\"\n [attr.selectionMode]=\"selectionMode\"\n [(selection)]=\"selectedItems\"\n (onRowSelect)=\"changeSelectedItems($event)\"\n (onHeaderCheckboxToggle)=\"changeSelectedItems($event)\"\n (onRowUnselect)=\"changeSelectedItems($event)\"\n (onLazyLoad)=\"lazyLoaded({ filter: false, data: $event })\"\n (selectionChange)=\"onSelectionChange($event)\"\n [reorderableColumns]=\"reorderableColumns\"\n editMode=\"cell\"\n >\n <ng-template pTemplate=\"header\">\n <tr class=\"header\">\n <th *ngIf=\"reorderableColumns\" style=\"width: 5rem\"></th>\n\n <th *ngIf=\"selectionType === 'checkbox'\">\n <p-tableHeaderCheckbox [disabled]=\"disabledHeadercheckbox\"></p-tableHeaderCheckbox>\n </th>\n <th class=\"text-center\" *ngIf=\"hasExpandableIcon\">\n {{ addNameColumnExpand }}\n </th>\n <th *ngIf=\"hasActions\">{{ 'app.label.actions' | translate }}</th>\n <th *ngIf=\"selectionType === 'radiobutton'\">\n <div class=\"flex align-items-center\">\n <span></span>\n </div>\n </th>\n @for (col of columns; track $index) {\n @if (!col.hidden) {\n <th\n [ngStyle]=\"getColStyle(col)\"\n [pSortableColumn]=\"col.notSortable ? '' : col.field\"\n pReorderableColumn\n >\n <div class=\"flex align-items-center\">\n <span>{{ col.header }}</span> <p-sortIcon *ngIf=\"!col.notSortable\" [field]=\"col.field\"></p-sortIcon>\n </div>\n </th>\n }\n }\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-rowData let-item let-expanded=\"expanded\" let-index=\"rowIndex\">\n <tr\n class=\"row\"\n [pSelectableRow]=\"rowData\"\n [ngClass]=\"{ expandable: expandable }\"\n [pRowToggler]=\"expandable ? item : undefined\"\n (click)=\"onRowClick(item)\"\n [pReorderableRow]=\"index\"\n >\n <ng-container *ngIf=\"reorderableColumns\">\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"justify-content-center align-items-center\">\n <span class=\"pi pi-bars\" pReorderableRowHandle></span>\n </td>\n </ng-container>\n <ng-container *ngIf=\"selectionType === 'checkbox'\">\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"justify-content-center align-items-center\">\n <p-tableCheckbox [value]=\"item\" [disabled]=\"item.disabledCheckBox\"></p-tableCheckbox>\n </td>\n </ng-container>\n <ng-container *ngIf=\"selectionType === 'radiobutton'\">\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"justify-content-center align-items-center\">\n <p-tableRadioButton [value]=\"item\"></p-tableRadioButton>\n </td>\n </ng-container>\n <td *ngIf=\"hasExpandableIcon\" style=\"max-width: 150px\" class=\"centered\">\n <p-menu #menu [model]=\"item.actions\" [popup]=\"true\" appendTo=\"body\"></p-menu>\n <i\n [ngClass]=\"\n expanded ? 'actions-menu-button pi pi-chevron-down' : 'actions-menu-button pi pi-chevron-right'\n \"\n ></i>\n </td>\n <td *ngIf=\"hasActions\">\n <p-menu #menu [model]=\"item.actions\" [popup]=\"true\" appendTo=\"body\"></p-menu>\n <i class=\"actions-menu-button fas fa-cog\" (click)=\"menu.toggle($event)\"></i>\n </td>\n @for (col of columns; track $index) {\n @if (!col.hidden) {\n <ng-container>\n <td\n *ngIf=\"isEditableCell(col)\"\n class=\"cell\"\n [pEditableColumn]=\"item\"\n [pEditableColumnField]=\"col.field\"\n [ngStyle]=\"getColStyle(col)\"\n >\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <p-inputNumber\n *ngIf=\"!col.cellEdit?.editType || col.cellEdit?.editType === 'number'\"\n [(ngModel)]=\"item[col.field]\"\n [suffix]=\"col.cellEdit?.editSuffix || ''\"\n mode=\"decimal\"\n [maxFractionDigits]=\"col.cellEdit?.editMaxFractionDigits ?? 2\"\n [min]=\"col.cellEdit?.editMin ?? 0\"\n [max]=\"col.cellEdit?.editMax\"\n (onBlur)=\"onCellEditComplete(item, col, item[col.field])\"\n ></p-inputNumber>\n <input\n *ngIf=\"col.cellEdit?.editType === 'text'\"\n pInputText\n [(ngModel)]=\"item[col.field]\"\n (blur)=\"onCellEditComplete(item, col, item[col.field])\"\n />\n </ng-template>\n <ng-template pTemplate=\"output\">\n <span>{{ item[col.field] }}{{ col.cellEdit?.editSuffix || '' }}</span>\n <i class=\"pi pi-pencil ml-2 text-primary\"></i>\n </ng-template>\n </p-cellEditor>\n </td>\n <td\n *ngIf=\"isHtmlCell(col) && !col.cellEdit\"\n class=\"cell\"\n [innerHTML]=\"getCellContent(item, col)\"\n (click)=\"col && col.clickFunction && col.clickFunction(item)\"\n [ngStyle]=\"getColStyle(col)\"\n ></td>\n <td\n *ngIf=\"(!isHtmlCell(col) && !!col.getStatus) || isScoreCell(col)\"\n class=\"cell\"\n (click)=\"col && col.clickFunction && col.clickFunction(item)\"\n [ngStyle]=\"getColStyle(col)\"\n >\n <vector-badge\n *ngIf=\"isBadgeCell(col)\"\n [label]=\"getCellText(item, col)\"\n [type]=\"col.getStatus && col.getStatus(item[col.field])\"\n [tooltip]=\"getTooltipText(item, col)\"\n ></vector-badge>\n <vector-score *ngIf=\"isScoreCell(col)\" [score]=\"item[col.field]\"></vector-score>\n </td>\n </ng-container>\n }\n }\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr class=\"row\">\n <td class=\"no-results\" [attr.colspan]=\"columns.length + 1\">Nenhum resultado encontrado</td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"paginatorright\"> </ng-template>\n <ng-template let-item pTemplate=\"paginatordropdownitem\"> {{ item.value }} </ng-template>\n <ng-template pTemplate=\"rowexpansion\" let-item>\n <tr>\n <td [attr.colspan]=\"columns.length + (hasActions ? 1 : 0)\">\n <ng-container *ngTemplateOutlet=\"expansionTemplate; context: { item }\"> </ng-container>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </vector-panel>\n </div>\n</div>\n", styles: [".no-results{padding:15px;background-color:#fff;width:100%}.centered{display:flex;justify-content:center}.table-header-actions{display:flex;justify-content:flex-end;align-items:flex-end;width:100%;padding-right:7px;margin-bottom:15px!important}@media (min-width: 768px){.table-header-actions{margin-top:-3px}}.table-header-actions .export-button{padding:7px 10px;color:#fff;display:flex;align-items:center;border:none;border-radius:5px;margin:5px;font-size:.75rem;cursor:pointer}.table-header-actions .export-button.export-excel{background-color:var(--success-color)}.table-header-actions .export-button.export-excel:hover{background-color:var(--success-color-dark)}.table-header-actions .export-button.export-pdf{background-color:var(--error-color)}.table-header-actions .export-button.export-pdf:hover{background-color:var(--error-color-dark)}.table-header-actions .export-button.custom-function{background-color:var(--theme-primary)}.table-header-actions .export-button.custom-function:hover{background-color:var(--theme-medium)}.table-header-actions .export-button i{color:#fff}.table-header-actions .export-button span{margin-left:5px}.table-header-actions .add-item-button{margin-left:10px}.actions-menu-button{font-size:23px;cursor:pointer;color:var(--theme-medium)}.expandable{cursor:pointer}.balance-container{display:flex;flex-direction:column;min-width:13%;padding:0;margin-bottom:30px;top:30px;right:40px;border-radius:8px;margin-right:15px}.balance-container .header-right{flex:1;flex-direction:row;justify-content:flex-end;display:flex}@media screen and (max-width: 1450px){.balance-container{width:40%}}@media screen and (max-width: 960px){.balance-container{position:relative;width:80%;top:auto;right:auto}}.balance-container .card-header{color:var(--theme-medium);border-radius:9px 9px 0 0;padding:10px 10px 2px;font-weight:500;font-size:13px;line-height:17px;letter-spacing:.25px}.balance-container .value-container{display:flex;flex-direction:row;align-items:center;padding:0 10px 5px}.balance-container .value-container span{font-size:2em;font-weight:700;color:var(--theme-secondary)}@media screen and (max-width: 640px){.balance-container .value-container span{font-size:1.6em}}.balance-container .value-container .balance{margin-left:8px;width:70%}.balance-container .value-container .hidden-balance{background-color:var(--gray-lighter);padding:15px;margin-left:8px;width:70%;height:100%}.balance-container .value-container .icon-container{display:flex;flex:1;justify-content:center;align-items:center}.balance-container .value-container .icon-container i{cursor:pointer;font-size:2em;padding-top:2px;color:var(--theme-medium)}\n"] }]
|
|
356
367
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { columns: [{
|
|
357
368
|
type: Input
|
|
358
369
|
}], data: [{
|
|
@@ -421,6 +432,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
421
432
|
type: Output
|
|
422
433
|
}], onExpandRow: [{
|
|
423
434
|
type: Output
|
|
435
|
+
}], onCellEdit: [{
|
|
436
|
+
type: Output
|
|
424
437
|
}], firstLazyLoad: [{
|
|
425
438
|
type: Input
|
|
426
439
|
}], shouldLazyLoadWithoutFilter: [{
|
|
@@ -431,4 +444,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
431
444
|
type: ViewChild,
|
|
432
445
|
args: [FiltersComponent, { static: true }]
|
|
433
446
|
}] } });
|
|
434
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmVjdG9yLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2ZpZWxkcy9kYXRhLXRhYmxlL2RhdGEtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZlY3Rvci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9maWVsZHMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFnQyxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEVBQXVDLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQWUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7Ozs7OztBQU83RSxNQUFNLE9BQU8sa0JBQWtCO0lBRzdCLElBQ1csSUFBSSxDQUFDLEtBQVk7UUFDMUIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFB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O3NCQURuQixNQUFNO2dCQUdBLFdBQVc7c0JBRGpCLE1BQU07Z0JBSUEsYUFBYTtzQkFEbkIsS0FBSztnQkFHQywyQkFBMkI7c0JBRGpDLEtBQUs7Z0JBR0Msa0JBQWtCO3NCQUR4QixLQUFLO2dCQUlDLGdCQUFnQjtzQkFEdEIsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSAnbHV4b24nO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBGaWx0ZXJDaGFuZ2VkRXZlbnQsIExpc3RJdGVtLCBTdGF0dXMgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHsgRGF0YVRhYmxlTGF6eUxvYWRFdmVudCwgVGFibGVDb2x1bW4sIFRhYmxlQ29sdW1uVHlwZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9kYXRhLXRhYmxlLm1vZGVsJztcbmltcG9ydCB7IE1hc2tVdGlsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgRmlsdGVyRmllbGQsIEZpbHRlcnNDb21wb25lbnQgfSBmcm9tICcuLi9maWx0ZXJzL2ZpbHRlcnMuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmVjdG9yLWRhdGEtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGEtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRGF0YVRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKVxuICBwdWJsaWMgY29sdW1uczogVGFibGVDb2x1bW5bXSA9IFtdO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRhdGEoX2RhdGE6IGFueVtdKSB7XG4gICAgdGhpcy5fZGF0YSA9IF9kYXRhO1xuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuX2RhdGE/LmZpbHRlcigoaXRlbSkgPT4gaXRlbS5zZWxlY3RlZCkgfHwgW107XG4gIH1cbiAgcHVibGljIGdldCBkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICB9XG4gIHByaXZhdGUgX2RhdGE6IGFueVtdID0gW107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBleHBvcnRFeGNlbCA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZXhwb3J0UERGID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjdXN0b21GdW5jdGlvbjogeyBsYWJlbDogc3RyaW5nOyBpY29uPzogc3RyaW5nOyBjbGlja0Z1bmN0aW9uOiBGdW5jdGlvbiB9W10gfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0b3RhbFJlY29yZHMgPSAwO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZGlzYWJsZWRIZWFkZXJjaGVja2JveCA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZmlsdGVyczogRmlsdGVyRmllbGRbXSA9IFtdO1xuICBASW5wdXQoKVxuICBwdWJsaWMgYWRkSXRlbUxhYmVsID0gJyc7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBwYWdpbmF0aW9uID0gdHJ1ZTtcbiAgQElucHV0KClcbiAgcHVibGljIHZpcnR1YWxQYWdpbmF0aW9uID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdGFicyhfdGFiczogTGlzdEl0ZW1bXSkge1xuICAgIHRoaXMuX3RhYnMgPSBfdGFicztcbiAgICB0aGlzLl90YWJTZWxlY3RlZCA9IF90YWJzWzBdO1xuICB9XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjdXN0b21CdXR0b25zOiB7IGxhYmVsOiBzdHJpbmc7IGNsaWNrRnVuY3Rpb246IEZ1bmN0aW9uOyBkaXNhYmxlZD86IGJvb2xlYW4gfVtdIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKVxuICBwdWJsaWMgYWRkSXRlbUJ1dHRvblBsdXNTaWduID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoYXNBY3Rpb25zOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KClcbiAgcHVibGljIGhhc0V4cGFuZGFibGVJY29uID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhZGROYW1lQ29sdW1uRXhwYW5kID0gJyc7XG4gIEBJbnB1dCgpIGV4cGFuZGFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgZXhwYW5zaW9uVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbDtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzZWxlY3Rpb25Nb2RlKF9zZWxlY3Rpb25Nb2RlKSB7XG4gICAgc3dpdGNoIChfc2VsZWN0aW9uTW9kZSkge1xuICAgICAgY2FzZSAnc2luZ2xlJzpcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZSA9ICdzaW5nbGUnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ211bHRpcGxlJzpcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZSA9ICdtdWx0aXBsZSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZSA9IG51bGw7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKVxuICBwdWJsaWMgc2VsZWN0aW9uVHlwZTogJ2NoZWNrYm94JyB8ICdyYWRpb2J1dHRvbicgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBoZWlnaHQoX2hlaWdodDogc3RyaW5nKSB7XG4gICAgc3dpdGNoIChfaGVpZ2h0KSB7XG4gICAgICBjYXNlICdzbWFsbCc6XG4gICAgICAgIHRoaXMuX2hlaWdodCA9ICczMDBweCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbWVkaXVtJzpcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gJzUwMHB4JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsYXJnZSc6XG4gICAgICAgIHRoaXMuX2hlaWdodCA9ICc3MDBweCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZnVsbCc6XG4gICAgICAgIHRoaXMuX2hlaWdodCA9ICdmbGV4JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLl9oZWlnaHQgPSAnMzAwcHgnO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvd0xpbWl0QmFsYW5jZSA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvd0RhdGFCYWxhbmNlID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkYXRhQWNjb3VudEJhbGFuY2U6IHsgdmlzaWJsZTogYm9vbGVhbjsgbmFtZTogc3RyaW5nOyB2YWx1ZUJhbGFuY2U6IG51bWJlcjsgc2hvd0JhbGFuY2U6IGJvb2xlYW4gfVtdID0gW107XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBvbkxhenlMb2FkID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRhVGFibGVMYXp5TG9hZEV2ZW50PigpO1xuICBAT3V0cHV0KClcbiAgcHVibGljIG9uRmlsdGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb25BZGQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb25FeHBvcnRFeGNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBvbkV4cG9ydFBERiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBvblNlbGVjdGVkUm93cyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KClcbiAgcHVibGljIG9uRmlsdGVyQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyQ2hhbmdlZEV2ZW50PigpO1xuICBAT3V0cHV0KClcbiAgcHVibGljIG9uVGFiU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPExpc3RJdGVtPigpO1xuICBAT3V0cHV0KClcbiAgcHVibGljIG9uRXhwYW5kUm93OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZmlyc3RMYXp5TG9hZCA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvdWxkTGF6eUxvYWRXaXRob3V0RmlsdGVyID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyByZW9yZGVyYWJsZUNvbHVtbnMgPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKEZpbHRlcnNDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHB1YmxpYyBmaWx0ZXJzQ29tcG9uZW50OiBGaWx0ZXJzQ29tcG9uZW50IHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBzZWxlY3RlZEl0ZW1zOiBhbnkgPSBbXTtcblxuICBnZXQgYmFsYW5jZSgpOiAoaXRlbUFjY291bnQ/OiBhbnkpID0+IG51bWJlciB8IHN0cmluZyB7XG4gICAgcmV0dXJuIChpdGVtQWNjb3VudD86IGFueSk6IG51bWJlciB8IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gaXRlbUFjY291bnQuc2hvd0JhbGFuY2VcbiAgICAgICAgPyBpdGVtQWNjb3VudC52YWx1ZUJhbGFuY2UudG9Mb2NhbGVTdHJpbmcoJ3B0LUJSJywge1xuICAgICAgICAgICAgY3VycmVuY3k6ICdCUkwnLFxuICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAyLFxuICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAyLFxuICAgICAgICAgIH0pXG4gICAgICAgIDogJy0sLS0nO1xuICAgIH07XG4gIH1cblxuICBnZXQgdGFicygpIHtcbiAgICByZXR1cm4gdGhpcy5fdGFicztcbiAgfVxuICBnZXQgaGVpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gIH1cbiAgZ2V0IHNlbGVjdGlvbk1vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGU7XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3Rpb25Nb2RlOiAnc2luZ2xlJyB8ICdtdWx0aXBsZScgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfaGVpZ2h0OiBzdHJpbmcgPSAnc21hbGwnO1xuICBwcml2YXRlIF90YWJzOiBMaXN0SXRlbVtdID0gW107XG4gIHByaXZhdGUgX2RyYXcgPSAxO1xuICBwcml2YXRlIF9maXJzdExhenlMb2FkZWREb25lID0gdGhpcy5maXJzdExhenlMb2FkO1xuICBwcml2YXRlIF9sYXN0TGF6eUxvYWRFdmVudDogRGF0YVRhYmxlTGF6eUxvYWRFdmVudCB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfdGFiU2VsZWN0ZWQ6IExpc3RJdGVtIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9maWx0ZXJTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGNkOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaGVpZ2h0KSB7XG4gICAgICB0aGlzLmhlaWdodCA9ICdzbWFsbCc7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnBhZ2luYXRpb24gfHwgdGhpcy52aXJ0dWFsUGFnaW5hdGlvbikge1xuICAgICAgdGhpcy5maWx0ZXJzQ29tcG9uZW50Py5zZWFyY2goKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9maWx0ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGdldENvbFN0eWxlKGNvbDogVGFibGVDb2x1bW4pIHtcbiAgICByZXR1cm4geyAnbWluLXdpZHRoJzogY29sLndpZHRoIH07XG4gIH1cblxuICBsYXp5TG9hZGVkKHBhcmFtczogeyBmaWx0ZXI6IGJvb2xlYW47IGRhdGE6IGFueSB9ID0geyBmaWx0ZXI6IGZhbHNlLCBkYXRhOiB7IHN0YXJ0OiAwLCByb3dzOiAxMCB9IH0pIHtcbiAgICBpZiAoIXBhcmFtcy5maWx0ZXIgJiYgIXRoaXMuc2hvdWxkTGF6eUxvYWRXaXRob3V0RmlsdGVyKSB7XG4gICAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcCgoY29sKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YTogY29sLmZpZWxkLFxuICAgICAgICAgIG5hbWU6IGAke2NvbC5maWVsZC5zdWJzdHJpbmcoMCwgMSkudG9VcHBlckNhc2UoKX0ke2NvbC5maWVsZC5zdWJzdHJpbmcoMSwgY29sLmZpZWxkLmxlbmd0aCl9YCxcbiAgICAgICAgICBvcmRlcmFibGU6IHRydWUsXG4gICAgICAgICAgc2VhcmNoOiB7IHZhbHVlOiAnJywgcmVnZXg6IGZhbHNlIH0sXG4gICAgICAgICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMuaGFzQWN0aW9ucykge1xuICAgICAgICBjb2x1bW5zLnVuc2hpZnQoe1xuICAgICAgICAgIGRhdGE6ICdhY3RpdmUnLFxuICAgICAgICAgIG5hbWU6ICdBY3RpdmUnLFxuICAgICAgICAgIG9yZGVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBzZWFyY2g6IHsgdmFsdWU6ICcnLCByZWdleDogZmFsc2UgfSxcbiAgICAgICAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2xhc3RMYXp5TG9hZEV2ZW50ID0ge1xuICAgICAgICAuLi4odGhpcy5fbGFzdExhenlMb2FkRXZlbnQgfHwgKHt9IGFzIGFueSkpLFxuICAgICAgICBwYWdlOiBwYXJhbXMuZGF0YS5maXJzdCAvIHBhcmFtcy5kYXRhLnJvd3MgKyAxLFxuICAgICAgICBzdGFydDogcGFyYW1zLmRhdGEuZmlyc3QsXG4gICAgICAgIGxlbmd0aDogcGFyYW1zLmRhdGEucm93cyxcbiAgICAgICAgZHJhdzogdGhpcy5fZHJhdysrLFxuICAgICAgICBvcmRlcjogcGFyYW1zLmRhdGEuc29ydEZpZWxkXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb2x1bW46XG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbnMuZmluZEluZGV4KChjb2wpID0+IGNvbC5maWVsZCA9PT0gcGFyYW1zLmRhdGEuc29ydEZpZWxkKSArICh0aGlzLmhhc0FjdGlvbnMgPyAxIDogMCksXG4gICAgICAgICAgICAgICAgZGlyOiBwYXJhbXMuZGF0YS5zb3J0T3JkZXIgPiAwID8gJ2FzYycgOiAnZGVzYycsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbeyBjb2x1bW46IDAsIGRpcjogJ2Rlc2MnIH1dLFxuICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgICB0YWI6IHRoaXMuX3RhYlNlbGVjdGVkLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGFzdExhenlMb2FkRXZlbnQgPSB7XG4gICAgICAgIC4uLnRoaXMuX2xhc3RMYXp5TG9hZEV2ZW50LFxuICAgICAgICAuLi5wYXJhbXMuZGF0YSxcbiAgICAgICAgc3RhcnQ6IDAsXG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMuX3RhYlNlbGVjdGVkKSB7XG4gICAgICAgIHRoaXMuX2xhc3RMYXp5TG9hZEV2ZW50ID0ge1xuICAgICAgICAgIC4uLih0aGlzLl9sYXN0TGF6eUxvYWRFdmVudCB8fCAoe30gYXMgYW55KSksXG4gICAgICAgICAgLi4ueyBTdGF0dXM6IHRoaXMuX3RhYlNlbGVjdGVkLmNvZGUgfSxcbiAgICAgICAgICB0YWI6IHRoaXMuX3RhYlNlbGVjdGVkLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9maXJzdExhenlMb2FkZWREb25lIHx8IHRoaXMuZmlyc3RMYXp5TG9hZCkge1xuICAgICAgdGhpcy5vbkxhenlMb2FkLmVtaXQodGhpcy5fbGFzdExhenlMb2FkRXZlbnQpO1xuICAgIH1cbiAgICB0aGlzLl9maXJzdExhenlMb2FkZWREb25lID0gdHJ1ZTtcbiAgfVxuXG4gIGdldENlbGxDb250ZW50KGl0ZW06IGFueSwgY29sOiBUYWJsZUNvbHVtbikge1xuICAgIGNvbnN0IGNlbGxUZXh0ID0gdGhpcy5nZXRDZWxsVGV4dChpdGVtLCBjb2wpO1xuICAgIGxldCBjb250ZW50ID0gYDxzcGFuIGNsYXNzPVwicC1jb2x1bW4tdGl0bGVcIj4ke2NvbC5oZWFkZXJ9PC9zcGFuPjxzcGFuIGNsYXNzPVwidy0xMDBcIj5gO1xuICAgIGlmIChcbiAgICAgICFjb2wudHlwZSB8fFxuICAgICAgW1RhYmxlQ29sdW1uVHlwZS5FTlVNLCBUYWJsZUNvbHVtblR5cGUuVEVYVCwgVGFibGVDb2x1bW5UeXBlLkRBVEVUSU1FLCBUYWJsZUNvbHVtblR5cGUuREFURV0uaW5jbHVkZXMoY29sLnR5cGUpXG4gICAgKSB7XG4gICAgICBjb250ZW50ICs9IGNlbGxUZXh0O1xuICAgIH1cbiAgICBzd2l0Y2ggKGNvbC50eXBlKSB7XG4gICAgICBjYXNlIFRhYmxlQ29sdW1uVHlwZS5DVVNUT01fU1RZTEU6XG4gICAgICAgIGNvbnRlbnQgKz0gYDxzcGFuIGNsYXNzPVwiJHtjb2wudGV4dEZpZWxkQ2xhc3MgPyBpdGVtW2NvbC50ZXh0RmllbGRDbGFzc10gOiAnJ31cIj4ke2NlbGxUZXh0fTwvc3Bhbj5gO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVGFibGVDb2x1bW5UeXBlLkJPT0xFQU46XG4gICAgICAgIGNvbnRlbnQgKz0gYDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlcmVkXCI+PGkgY2xhc3M9XCIgc3RhdHVzLXRhYmxlLWZpZWxkIGZhcyBmYS0ke1xuICAgICAgICAgIGNlbGxUZXh0ID8gJ2NoZWNrIGJvb2xlYW4tdmFsdWUtcG9zaXRpdmUnIDogJ3RpbWVzIGJvb2xlYW4tdmFsdWUtbmVnYXRpdmUnXG4gICAgICAgIH1cIj48L2k+PC9kaXY+YDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFRhYmxlQ29sdW1uVHlwZS5TVEFUVVNfQkFER0U6XG4gICAgICAgIGNvbnRlbnQgKz0gYDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlcmVkXCI+PGkgY2xhc3M9XCJmYXMgZmEtY2lyY2xlIHN0YXR1cy10YWJsZS1maWVsZCAke3RoaXMuZ2V0U3RhdHVzQ29sb3IoXG4gICAgICAgICAgY2VsbFRleHQsXG4gICAgICAgICl9XCI+PC9pPjwvZGl2PmA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUYWJsZUNvbHVtblR5cGUuQUNUSVZFX0JPT0xFQU5fQkFER0U6XG4gICAgICAgIGNvbnRlbnQgKz0gYDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlcmVkXCI+PGkgY2xhc3M9XCJmYXMgZmEtY2lyY2xlIHN0YXR1cy10YWJsZS1maWVsZCAke3RoaXMuZ2V0QWN0aXZlU3RhdHVzQ29sb3IoXG4gICAgICAgICAgY2VsbFRleHQsXG4gICAgICAgICl9XCI+PC9pPjwvZGl2PmA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUYWJsZUNvbHVtblR5cGUuQlVUVE9OOlxuICAgICAgICBsZXQgaWNvbkNsYXNzID0gJyc7XG4gICAgICAgIGlmICh0eXBlb2YgY29sLmljb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBpY29uQ2xhc3MgPSBjb2wuaWNvbihpdGVtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpY29uQ2xhc3MgPSBjb2wuaWNvbiB8fCAnZmFzIGZhLWNpcmNsZSc7XG4gICAgICAgIH1cbiAgICAgICAgY29udGVudCArPSBgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyZWRcIj48aSBjbGFzcz1cIiR7aWNvbkNsYXNzfSBzdGF0dXMtdGFibGUtZmllbGQgdGFibGUtYnV0dG9uXCI+PC9pPjwvZGl2PmA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUYWJsZUNvbHVtblR5cGUuTUFTSzpcbiAgICAgICAgaWYgKGNvbC5tYXNrID09PSAnZHluYW1pY0NwZkNucGonKSB7XG4gICAgICAgICAgY29udGVudCArPSBNYXNrVXRpbC5mb3JtYXREb2N1bWVudChjZWxsVGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGVudCArPSBNYXNrVXRpbC5kb01hc2tTdHJpbmcoY2VsbFRleHQsIGNvbC5tYXNrKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVGFibGVDb2x1bW5UeXBlLkNVUlJFTkNZOlxuICAgICAgICBjb250ZW50ICs9IE51bWJlcihjZWxsVGV4dCkudG9Mb2NhbGVTdHJpbmcoJ3B0LUJSJywge1xuICAgICAgICAgIGN1cnJlbmN5OiBjb2wuY3VycmVuY3lUeXBlIHx8ICdCUkwnLFxuICAgICAgICAgIGN1cnJlbmN5RGlzcGxheTogJ25hcnJvd1N5bWJvbCcsXG4gICAgICAgICAgc3R5bGU6ICdjdXJyZW5jeScsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnRlbnQgKz0gYDwvc3Bhbj5gO1xuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgcHVibGljIGdldENlbGxUZXh0KGl0ZW06IGFueSwgY29sOiBUYWJsZUNvbHVtbikge1xuICAgIGlmIChjb2wuZ2V0RW51bVRyYW5zbGF0ZWQpIHtcbiAgICAgIHJldHVybiBjb2wuZ2V0RW51bVRyYW5zbGF0ZWQoaXRlbVtjb2wuZmllbGRdKTtcbiAgICB9XG4gICAgaWYgKGNvbC50eXBlID09PSBUYWJsZUNvbHVtblR5cGUuREFURVRJTUUgJiYgaXRlbVtjb2wuZmllbGRdKSB7XG4gICAgICBjb25zdCBkYXRlVGltZSA9XG4gICAgICAgIGl0ZW1bY29sLmZpZWxkXSBpbnN0YW5jZW9mIERhdGUgPyBEYXRlVGltZS5mcm9tSlNEYXRlKGl0ZW1bY29sLmZpZWxkXSkgOiBEYXRlVGltZS5mcm9tSVNPKGl0ZW1bY29sLmZpZWxkXSk7XG4gICAgICByZXR1cm4gZGF0ZVRpbWUudG9VVEMoKS50b0Zvcm1hdCgnZGQvTU0veXl5eSBISDptbScpO1xuICAgIH1cbiAgICBpZiAoY29sLnR5cGUgPT09IFRhYmxlQ29sdW1uVHlwZS5EQVRFICYmIGl0ZW1bY29sLmZpZWxkXSkge1xuICAgICAgY29uc3QgZGF0ZVRpbWUgPVxuICAgICAgICBpdGVtW2NvbC5maWVsZF0gaW5zdGFuY2VvZiBEYXRlID8gRGF0ZVRpbWUuZnJvbUpTRGF0ZShpdGVtW2NvbC5maWVsZF0pIDogRGF0ZVRpbWUuZnJvbUlTTyhpdGVtW2NvbC5maWVsZF0pO1xuICAgICAgcmV0dXJuIGRhdGVUaW1lLnRvVVRDKCkudG9Gb3JtYXQoJ2RkL01NL3l5eXknKTtcbiAgICB9XG4gICAgaWYgKGNvbC50eXBlID09PSBUYWJsZUNvbHVtblR5cGUuU1RBQ0tfQkFER0UpIHtcbiAgICAgIGlmICghaXRlbVtjb2wuZmllbGRdLmxlbmd0aCB8fCBpdGVtW2NvbC5maWVsZF0ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBpdGVtW2NvbC5maWVsZF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYCske2l0ZW1bY29sLmZpZWxkXS5sZW5ndGh9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvbC50eXBlID09PSBUYWJsZUNvbHVtblR5cGUuU1RBVFVTX0JBREdFKSB7XG4gICAgICByZXR1cm4gaXRlbVtjb2wuZmllbGRdID09IDAgPyAwIDogaXRlbVtjb2wuZmllbGRdO1xuICAgIH1cblxuICAgIHJldHVybiBpdGVtW2NvbC5maWVsZCB8fCAnJ10gfHwgJyc7XG4gIH1cblxuICBwdWJsaWMgZ2V0VG9vbHRpcFRleHQoaXRlbTogYW55LCBjb2w6IFRhYmxlQ29sdW1uKSB7XG4gICAgaWYgKFxuICAgICAgIWNvbC50eXBlIHx8XG4gICAgICAhW1RhYmxlQ29sdW1uVHlwZS5TVEFDS19CQURHRV0uaW5jbHVkZXMoY29sLnR5cGUpIHx8XG4gICAgICAhQXJyYXkuaXNBcnJheShpdGVtW2NvbC5maWVsZF0pIHx8XG4gICAgICBpdGVtW2NvbC5maWVsZF0ubGVuZ3RoID09PSAxXG4gICAgKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaXRlbVtjb2wuZmllbGRdKSkge1xuICAgICAgcmV0dXJuIGl0ZW1bY29sLmZpZWxkXTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1bY29sLmZpZWxkXS5qb2luKCcgLSAnKTtcbiAgfVxuXG4gIG9uVGFiQ2hhbmdlKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5fdGFiU2VsZWN0ZWQgPSB0aGlzLnRhYnNbJGV2ZW50LmluZGV4XTtcbiAgICB0aGlzLmxhenlMb2FkZWQoeyBmaWx0ZXI6IHRydWUsIGRhdGE6IHt9IH0pO1xuICAgIHRoaXMub25UYWJTZWxlY3RlZC5lbWl0KHRoaXMuX3RhYlNlbGVjdGVkKTtcbiAgfVxuXG4gIHN1YnNjcmliZVRvRmlsdGVyQ2hhbmdlcygpIHtcbiAgICB0aGlzLl9maWx0ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9maWx0ZXJTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgT2JqZWN0LmtleXModGhpcy5maWx0ZXJzQ29tcG9uZW50Py5mb3JtR3JvdXAuY29udHJvbHMgfHwge30pLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgdGhpcy5fZmlsdGVyU3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgdGhpcy5maWx0ZXJzQ29tcG9uZW50Py5mb3JtR3JvdXBcbiAgICAgICAgICAuZ2V0KGtleSlcbiAgICAgICAgICA/LnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgzMDApKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uRmlsdGVyQ2hhbmdlZC5lbWl0KHsgZmllbGQ6IGtleSwgdmFsdWUgfSk7XG4gICAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgdGhpcy5vbkZpbHRlckNoYW5nZWQuZW1pdCh7IGZpZWxkOiBrZXksIHZhbHVlOiB0aGlzLmZpbHRlcnNDb21wb25lbnQ/LmZvcm1Hcm91cC5nZXQoa2V5KT8udmFsdWUgfSk7XG4gICAgfSk7XG4gIH1cblxuICBvblJvd0NsaWNrKGl0ZW06IGFueSkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcblxuICAgIHRoaXMub25FeHBhbmRSb3cuZW1pdChpdGVtKTtcbiAgfVxuXG4gIGdldCBsaXN0SGFzQWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLnNvbWUoKGl0ZW0pID0+IGl0ZW0uYWN0aW9ucz8ubGVuZ3RoKTtcbiAgfVxuXG4gIHB1YmxpYyBjaGFuZ2VTZWxlY3RlZEl0ZW1zKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLm9uU2VsZWN0ZWRSb3dzLmVtaXQodGhpcy5zZWxlY3RlZEl0ZW1zKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0h0bWxDZWxsKGNvbDogVGFibGVDb2x1bW4pIHtcbiAgICByZXR1cm4gIWNvbC50eXBlIHx8ICF0aGlzLmlzQmFkZ2VDZWxsKGNvbCk7XG4gIH1cblxuICBwdWJsaWMgaXNCYWRnZUNlbGwoY29sOiBUYWJsZUNvbHVtbikge1xuICAgIHJldHVybiBjb2wudHlwZSAmJiBbVGFibGVDb2x1bW5UeXBlLlRFWFRfQkFER0UsIFRhYmxlQ29sdW1uVHlwZS5TVEFDS19CQURHRV0uaW5jbHVkZXMoY29sLnR5cGUpO1xuICB9XG5cbiAgcHVibGljIGlzU2NvcmVDZWxsKGNvbDogVGFibGVDb2x1bW4pIHtcbiAgICByZXR1cm4gY29sLnR5cGUgPT09IFRhYmxlQ29sdW1uVHlwZS5TQ09SRTtcbiAgfVxuXG4gIHB1YmxpYyBvblNlbGVjdGlvbkNoYW5nZShzZWxlY3Rpb246IGFueSkge1xuICAgIGZvciAobGV0IGkgPSBzZWxlY3Rpb24ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGxldCBkYXRhID0gc2VsZWN0aW9uW2ldO1xuICAgICAgaWYgKGRhdGEuZGlzYWJsZWRDaGVja0JveCkge1xuICAgICAgICBzZWxlY3Rpb24uc3BsaWNlKGksIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBzZWxlY3Rpb247XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlU2hvd0JhbGFuY2UoaXRlbUFjY291bnQ/OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoaXRlbUFjY291bnQpIHtcbiAgICAgIGl0ZW1BY2NvdW50LnNob3dCYWxhbmNlID0gIWl0ZW1BY2NvdW50LnNob3dCYWxhbmNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RhdHVzQ29sb3Ioc3RhdHVzOiBTdGF0dXMpIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSBTdGF0dXMuUEVORElORzpcbiAgICAgICAgcmV0dXJuICd3YXJuaW5nJztcbiAgICAgIGNhc2UgU3RhdHVzLkFQUFJPVkVEOlxuICAgICAgICByZXR1cm4gJ3N1Y2Nlc3MnO1xuICAgICAgY2FzZSBTdGF0dXMuUkVKRUNURUQ6XG4gICAgICAgIHJldHVybiAnZXJyb3InO1xuICAgICAgY2FzZSBTdGF0dXMuSU5GTzpcbiAgICAgICAgcmV0dXJuICdpbmZvJztcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBY3RpdmVTdGF0dXNDb2xvcihhY3RpdmU6IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gYWN0aXZlID8gJ3N1Y2Nlc3MnIDogJ2Vycm9yJztcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImdyaWRcIj5cbiAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgIDx2ZWN0b3ItZmlsdGVyc1xuICAgICAgW2ZpZWxkc109XCJmaWx0ZXJzXCJcbiAgICAgIChvblNlYXJjaCk9XCJsYXp5TG9hZGVkKHsgZmlsdGVyOiB0cnVlLCBkYXRhOiAkZXZlbnQgfSlcIlxuICAgICAgKGZvcm1CdWlsZGVkKT1cInN1YnNjcmliZVRvRmlsdGVyQ2hhbmdlcygpXCJcbiAgICA+PC92ZWN0b3ItZmlsdGVycz5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICBjbGFzcz1cInRhYmxlLWhlYWRlci1hY3Rpb25zIGZpZWxkXCJcbiAgICAqbmdJZj1cImFkZEl0ZW1MYWJlbCB8fCBleHBvcnRFeGNlbCB8fCBleHBvcnRQREYgfHwgY3VzdG9tRnVuY3Rpb24gfHwgY3VzdG9tQnV0dG9uc1wiXG4gID5cbiAgICA8YnV0dG9uICpuZ0lmPVwiZXhwb3J0RXhjZWxcIiAoY2xpY2spPVwib25FeHBvcnRFeGNlbC5lbWl0KClcIiBjbGFzcz1cImV4cG9ydC1idXR0b24gZXhwb3J0LWV4Y2VsXCI+XG4gICAgICA8aSBjbGFzcz1cImZhcyBmYS1maWxlLWV4Y2VsXCI+PC9pPjxzcGFuPkV4Y2VsPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gKm5nSWY9XCJleHBvcnRQREZcIiAoY2xpY2spPVwib25FeHBvcnRQREYuZW1pdCgpXCIgY2xhc3M9XCJleHBvcnQtYnV0dG9uIGV4cG9ydC1wZGZcIj5cbiAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWZpbGUtcGRmXCI+PC9pPjxzcGFuPlBERjwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGN1c3RvbUZ1bmN0aW9uXCJcbiAgICAgIChjbGljayk9XCJidXR0b24uY2xpY2tGdW5jdGlvbigpXCJcbiAgICAgIGNsYXNzPVwiZXhwb3J0LWJ1dHRvbiBjdXN0b20tZnVuY3Rpb25cIlxuICAgID5cbiAgICAgIDxpICpuZ0lmPVwiYnV0dG9uPy5pY29uXCIgY2xhc3M9XCJ7eyBidXR0b24/Lmljb24gfX1cIj48L2k+PHNwYW4+e3sgYnV0dG9uPy5sYWJlbCB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDx2ZWN0b3ItYnV0dG9uXG4gICAgICAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGN1c3RvbUJ1dHRvbnNcIlxuICAgICAgY2xhc3M9XCJhZGQtaXRlbS1idXR0b25cIlxuICAgICAgW3JvdW5kXT1cInRydWVcIlxuICAgICAgW2xhYmVsXT1cImJ1dHRvbi5sYWJlbFwiXG4gICAgICAoY2xpY2spPVwiYnV0dG9uLmNsaWNrRnVuY3Rpb24oKVwiXG4gICAgICBbcmlnaHRJY29uXT1cImFkZEl0ZW1CdXR0b25QbHVzU2lnbiA/ICdwaSBwaS1wbHVzJyA6ICcnXCJcbiAgICAgIFtkaXNhYmxlZF09XCJidXR0b24uZGlzYWJsZWQgPT09IHRydWVcIlxuICAgID48L3ZlY3Rvci1idXR0b24+XG4gICAgPHZlY3Rvci1idXR0b25cbiAgICAgICpuZ0lmPVwiYWRkSXRlbUxhYmVsXCJcbiAgICAgIGNsYXNzPVwiYWRkLWl0ZW0tYnV0dG9uXCJcbiAgICAgIFtsYWJlbF09XCJhZGRJdGVtTGFiZWxcIlxuICAgICAgKGNsaWNrKT1cIm9uQWRkLmVtaXQoKVwiXG4gICAgICBbcmlnaHRJY29uXT1cImFkZEl0ZW1CdXR0b25QbHVzU2lnbiA/ICdwaSBwaS1wbHVzJyA6ICcnXCJcbiAgICAgIFtyb3VuZF09XCJ0cnVlXCJcbiAgICA+PC92ZWN0b3ItYnV0dG9uPlxuICA8L2Rpdj5cbiAgQGlmIChzaG93TGltaXRCYWxhbmNlKSB7XG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiBncmlkIG1sLTBcIj5cbiAgICAgIEBmb3IgKGl0ZW1BY2NvdW50IG9mIGRhdGFBY2NvdW50QmFsYW5jZTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgIEBpZiAoaXRlbUFjY291bnQudmlzaWJsZSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGJhbGFuY2UtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+e3sgaXRlbUFjY291bnQubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWNvbnRlbnQgdmFsdWUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgIDxzcGFuPlIkIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtQWNjb3VudC5zaG93QmFsYW5jZVwiIGNsYXNzPVwiYmFsYW5jZVwiPnt7IGJhbGFuY2UoaXRlbUFjY291bnQpIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGlkZGVuLWJhbGFuY2VcIiAqbmdJZj1cIiFpdGVtQWNjb3VudC5zaG93QmFsYW5jZVwiPjwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYXNcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZmEtZXllJzogIWl0ZW1BY2NvdW50LnNob3dCYWxhbmNlLCAnZmEtZXllLXNsYXNoJzogaXRlbUFjY291bnQuc2hvd0JhbGFuY2UgfVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlU2hvd0JhbGFuY2UoaXRlbUFjY291bnQpXCJcbiAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChzaG93RGF0YUJhbGFuY2UpIHtcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGdyaWQgbWwtMFwiPlxuICAgICAgQGZvciAoaXRlbUFjY291bnQgb2YgZGF0YUFjY291bnRCYWxhbmNlOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgYmFsYW5jZS1jb250YWluZXJcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+e3sgaXRlbUFjY291bnQubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1jb250ZW50IHZhbHVlLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWxhbmNlXCI+e3sgaXRlbUFjY291bnQudmFsdWVCYWxhbmNlIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICA8dmVjdG9yLXBhbmVsIGNsYXNzPVwiZGF0YS10YWJsZS1wYW5lbFwiPlxuICAgICAgPHAtdGFiVmlldyAob25DaGFuZ2UpPVwib25UYWJDaGFuZ2UoJGV2ZW50KVwiICpuZ0lmPVwidGFicz8ubGVuZ3RoXCI+XG4gICAgICAgIDxwLXRhYlBhbmVsICpuZ0Zvcj1cImxldCB0YWIgb2YgdGFic1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgICAgICAgIDxlbSAqbmdJZj1cInRhYi5pY29uXCIgW2NsYXNzXT1cInRhYi5pY29uXCI+Jm5ic3A7PC9lbT5cbiAgICAgICAgICAgIDxzcGFuPnt7IHRhYi5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvcC10YWJQYW5lbD5cbiAgICAgIDwvcC10YWJWaWV3PlxuICAgICAgPHAtdGFibGVcbiAgICAgICAgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cIk1vc3RyYW5kbyB7Zmlyc3R9IGF0w6kge2xhc3R9IGRlIHt0b3RhbFJlY29yZHN9IHJlZ2lzdHJvc1wiXG4gICAgICAgIHNvcnRNb2RlPVwic2luZ2xlXCJcbiAgICAgICAgW3Jvd3NdPVwiMTBcIlxuICAgICAgICBbbGF6eV09XCJwYWdpbmF0aW9uICYmICF2aXJ0dWFsUGFnaW5hdGlvblwiXG4gICAgICAgIFt2YWx1ZV09XCJkYXRhXCJcbiAgICAgICAgW3BhZ2luYXRvcl09XCJwYWdpbmF0aW9uXCJcbiAgICAgICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxuICAgICAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxuICAgICAgICBbcm93c1BlclBhZ2VPcHRpb25zXT1cIlsxMCwgMjUsIDUwLCAxMDBdXCJcbiAgICAgICAgW3Jlc3BvbnNpdmVdPVwidHJ1ZVwiXG4gICAgICAgIFtyZXNpemFibGVDb2x1bW5zXT1cInRydWVcIlxuICAgICAgICBbc2Nyb2xsYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgc2Nyb2xsRGlyZWN0aW9uPVwidmVydGljYWxcIlxuICAgICAgICByZXNwb25zaXZlTGF5b3V0PVwic2Nyb2xsXCJcbiAgICAgICAgZGF0YUtleT1cImlkXCJcbiAgICAgICAgW3Njcm9sbEhlaWdodF09XCJoZWlnaHRcIlxuICAgICAgICBbYXR0ci5zZWxlY3Rpb25Nb2RlXT1cInNlbGVjdGlvbk1vZGVcIlxuICAgICAgICBbKHNlbGVjdGlvbildPVwic2VsZWN0ZWRJdGVtc1wiXG4gICAgICAgIChvblJvd1NlbGVjdCk9XCJjaGFuZ2VTZWxlY3RlZEl0ZW1zKCRldmVudClcIlxuICAgICAgICAob25IZWFkZXJDaGVja2JveFRvZ2dsZSk9XCJjaGFuZ2VTZWxlY3RlZEl0ZW1zKCRldmVudClcIlxuICAgICAgICAob25Sb3dVbnNlbGVjdCk9XCJjaGFuZ2VTZWxlY3RlZEl0ZW1zKCRldmVudClcIlxuICAgICAgICAob25MYXp5TG9hZCk9XCJsYXp5TG9hZGVkKHsgZmlsdGVyOiBmYWxzZSwgZGF0YTogJGV2ZW50IH0pXCJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgW3Jlb3JkZXJhYmxlQ29sdW1uc109XCJyZW9yZGVyYWJsZUNvbHVtbnNcIlxuICAgICAgPlxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XG4gICAgICAgICAgPHRyIGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICAgICAgICA8dGggKm5nSWY9XCJyZW9yZGVyYWJsZUNvbHVtbnNcIiBzdHlsZT1cIndpZHRoOiA1cmVtXCI+PC90aD5cblxuICAgICAgICAgICAgPHRoICpuZ0lmPVwic2VsZWN0aW9uVHlwZSA9PT0gJ2NoZWNrYm94J1wiPlxuICAgICAgICAgICAgICA8cC10YWJsZUhlYWRlckNoZWNrYm94IFtkaXNhYmxlZF09XCJkaXNhYmxlZEhlYWRlcmNoZWNrYm94XCI+PC9wLXRhYmxlSGVhZGVyQ2hlY2tib3g+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1jZW50ZXJcIiAqbmdJZj1cImhhc0V4cGFuZGFibGVJY29uXCI+XG4gICAgICAgICAgICAgIHt7IGFkZE5hbWVDb2x1bW5FeHBhbmQgfX1cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8dGggKm5nSWY9XCJoYXNBY3Rpb25zXCI+e3sgJ2FwcC5sYWJlbC5hY3Rpb25zJyB8IHRyYW5zbGF0ZSB9fTwvdGg+XG4gICAgICAgICAgICA8dGggKm5nSWY9XCJzZWxlY3Rpb25UeXBlID09PSAncmFkaW9idXR0b24nXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgQGZvciAoY29sIG9mIGNvbHVtbnM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICBAaWYgKCFjb2wuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJnZXRDb2xTdHlsZShjb2wpXCJcbiAgICAgICAgICAgICAgICAgIFtwU29ydGFibGVDb2x1bW5dPVwiY29sLm5vdFNvcnRhYmxlID8gJycgOiBjb2wuZmllbGRcIlxuICAgICAgICAgICAgICAgICAgcFJlb3JkZXJhYmxlQ29sdW1uXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNvbC5oZWFkZXIgfX08L3NwYW4+IDxwLXNvcnRJY29uICpuZ0lmPVwiIWNvbC5ub3RTb3J0YWJsZVwiIFtmaWVsZF09XCJjb2wuZmllbGRcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtcm93RGF0YSBsZXQtaXRlbSBsZXQtZXhwYW5kZWQ9XCJleHBhbmRlZFwiIGxldC1pbmRleD1cInJvd0luZGV4XCI+XG4gICAgICAgICAgPHRyXG4gICAgICAgICAgICBjbGFzcz1cInJvd1wiXG4gICAgICAgICAgICBbcFNlbGVjdGFibGVSb3ddPVwicm93RGF0YVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7IGV4cGFuZGFibGU6IGV4cGFuZGFibGUgfVwiXG4gICAgICAgICAgICBbcFJvd1RvZ2dsZXJdPVwiZXhwYW5kYWJsZSA/IGl0ZW0gOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soaXRlbSlcIlxuICAgICAgICAgICAgW3BSZW9yZGVyYWJsZVJvd109XCJpbmRleFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlb3JkZXJhYmxlQ29sdW1uc1wiPlxuICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJtYXgtd2lkdGg6IDNyZW07IHBhZGRpbmctbGVmdDogMTBweFwiIGNsYXNzPVwianVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBpIHBpLWJhcnNcIiBwUmVvcmRlcmFibGVSb3dIYW5kbGU+PC9zcGFuPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uVHlwZSA9PT0gJ2NoZWNrYm94J1wiPlxuICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJtYXgtd2lkdGg6IDNyZW07IHBhZGRpbmctbGVmdDogMTBweFwiIGNsYXNzPVwianVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8cC10YWJsZUNoZWNrYm94IFt2YWx1ZV09XCJpdGVtXCIgW2Rpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRDaGVja0JveFwiPjwvcC10YWJsZUNoZWNrYm94PlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uVHlwZSA9PT0gJ3JhZGlvYnV0dG9uJ1wiPlxuICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJtYXgtd2lkdGg6IDNyZW07IHBhZGRpbmctbGVmdDogMTBweFwiIGNsYXNzPVwianVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8cC10YWJsZVJhZGlvQnV0dG9uIFt2YWx1ZV09XCJpdGVtXCI+PC9wLXRhYmxlUmFkaW9CdXR0b24+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cImhhc0V4cGFuZGFibGVJY29uXCIgc3R5bGU9XCJtYXgtd2lkdGg6IDE1MHB4XCIgY2xhc3M9XCJjZW50ZXJlZFwiPlxuICAgICAgICAgICAgICA8cC1tZW51ICNtZW51IFttb2RlbF09XCJpdGVtLmFjdGlvbnNcIiBbcG9wdXBdPVwidHJ1ZVwiIGFwcGVuZFRvPVwiYm9keVwiPjwvcC1tZW51PlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgZXhwYW5kZWQgPyAnYWN0aW9ucy1tZW51LWJ1dHRvbiBwaSBwaS1jaGV2cm9uLWRvd24nIDogJ2FjdGlvbnMtbWVudS1idXR0b24gcGkgcGktY2hldnJvbi1yaWdodCdcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cImhhc0FjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPHAtbWVudSAjbWVudSBbbW9kZWxdPVwiaXRlbS5hY3Rpb25zXCIgW3BvcHVwXT1cInRydWVcIiBhcHBlbmRUbz1cImJvZHlcIj48L3AtbWVudT5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJhY3Rpb25zLW1lbnUtYnV0dG9uIGZhcyBmYS1jb2dcIiAoY2xpY2spPVwibWVudS50b2dnbGUoJGV2ZW50KVwiPjwvaT5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICBAZm9yIChjb2wgb2YgY29sdW1uczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgIEBpZiAoIWNvbC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNIdG1sQ2VsbChjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRDZWxsQ29udGVudChpdGVtLCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbCAmJiBjb2wuY2xpY2tGdW5jdGlvbiAmJiBjb2wuY2xpY2tGdW5jdGlvbihpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImdldENvbFN0eWxlKGNvbClcIlxuICAgICAgICAgICAgICAgICAgPjwvdGQ+XG4gICAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIoIWlzSHRtbENlbGwoY29sKSAmJiAhIWNvbC5nZXRTdGF0dXMpIHx8IGlzU2NvcmVDZWxsKGNvbClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNlbGxcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29sICYmIGNvbC5jbGlja0Z1bmN0aW9uICYmIGNvbC5jbGlja0Z1bmN0aW9uKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0Q29sU3R5bGUoY29sKVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDx2ZWN0b3ItYmFkZ2VcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzQmFkZ2VDZWxsKGNvbClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJnZXRDZWxsVGV4dChpdGVtLCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJjb2wuZ2V0U3RhdHVzICYmIGNvbC5nZXRTdGF0dXMoaXRlbVtjb2wuZmllbGRdKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiZ2V0VG9vbHRpcFRleHQoaXRlbSwgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgID48L3ZlY3Rvci1iYWRnZT5cbiAgICAgICAgICAgICAgICAgICAgPHZlY3Rvci1zY29yZSAqbmdJZj1cImlzU2NvcmVDZWxsKGNvbClcIiBbc2NvcmVdPVwiaXRlbVtjb2wuZmllbGRdXCI+PC92ZWN0b3Itc2NvcmU+XG4gICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxuICAgICAgICAgIDx0ciBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwibm8tcmVzdWx0c1wiIFthdHRyLmNvbHNwYW5dPVwiY29sdW1ucy5sZW5ndGggKyAxXCI+TmVuaHVtIHJlc3VsdGFkbyBlbmNvbnRyYWRvPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicGFnaW5hdG9ycmlnaHRcIj4gPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1pdGVtIHBUZW1wbGF0ZT1cInBhZ2luYXRvcmRyb3Bkb3duaXRlbVwiPiB7eyBpdGVtLnZhbHVlIH19IDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJyb3dleHBhbnNpb25cIiBsZXQtaXRlbT5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW5zLmxlbmd0aCArIChoYXNBY3Rpb25zID8gMSA6IDApXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJleHBhbnNpb25UZW1wbGF0ZTsgY29udGV4dDogeyBpdGVtIH1cIj4gPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L3AtdGFibGU+XG4gICAgPC92ZWN0b3ItcGFuZWw+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
447
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmVjdG9yLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2ZpZWxkcy9kYXRhLXRhYmxlL2RhdGEtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZlY3Rvci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9maWVsZHMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFnQyxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEVBQXVDLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQWUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQU83RSxNQUFNLE9BQU8sa0JBQWtCO0lBRzdCLElBQ1csSUFBSSxDQUFDLEtBQVk7UUFDMUIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFD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VUFBVTtzQkFBbEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUssYUFBYTtzQkFEdkIsS0FBSztnQkFlQyxhQUFhO3NCQURuQixLQUFLO2dCQUdLLE1BQU07c0JBRGhCLEtBQUs7Z0JBb0JDLGdCQUFnQjtzQkFEdEIsS0FBSztnQkFHQyxlQUFlO3NCQURyQixLQUFLO2dCQUdDLGtCQUFrQjtzQkFEeEIsS0FBSztnQkFJQyxVQUFVO3NCQURoQixNQUFNO2dCQUdBLFFBQVE7c0JBRGQsTUFBTTtnQkFHQSxLQUFLO3NCQURYLE1BQU07Z0JBR0EsYUFBYTtzQkFEbkIsTUFBTTtnQkFHQSxXQUFXO3NCQURqQixNQUFNO2dCQUdBLGNBQWM7c0JBRHBCLE1BQU07Z0JBR0EsZUFBZTtzQkFEckIsTUFBTTtnQkFHQSxhQUFhO3NCQURuQixNQUFNO2dCQUdBLFdBQVc7c0JBRGpCLE1BQU07Z0JBR0EsVUFBVTtzQkFEaEIsTUFBTTtnQkFJQSxhQUFhO3NCQURuQixLQUFLO2dCQUdDLDJCQUEyQjtzQkFEakMsS0FBSztnQkFHQyxrQkFBa0I7c0JBRHhCLEtBQUs7Z0JBSUMsZ0JBQWdCO3NCQUR0QixTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tICdsdXhvbic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEZpbHRlckNoYW5nZWRFdmVudCwgTGlzdEl0ZW0sIFN0YXR1cyB9IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XG5pbXBvcnQgeyBEYXRhVGFibGVMYXp5TG9hZEV2ZW50LCBUYWJsZUNvbHVtbiwgVGFibGVDb2x1bW5UeXBlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2RhdGEtdGFibGUubW9kZWwnO1xuaW1wb3J0IHsgTWFza1V0aWwgfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5pbXBvcnQgeyBGaWx0ZXJGaWVsZCwgRmlsdGVyc0NvbXBvbmVudCB9IGZyb20gJy4uL2ZpbHRlcnMvZmlsdGVycy5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2ZWN0b3ItZGF0YS10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0YS10YWJsZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjb2x1bW5zOiBUYWJsZUNvbHVtbltdID0gW107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGF0YShfZGF0YTogYW55W10pIHtcbiAgICB0aGlzLl9kYXRhID0gX2RhdGE7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5fZGF0YT8uZmlsdGVyKChpdGVtKSA9PiBpdGVtLnNlbGVjdGVkKSB8fCBbXTtcbiAgfVxuICBwdWJsaWMgZ2V0IGRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cbiAgcHJpdmF0ZSBfZGF0YTogYW55W10gPSBbXTtcbiAgQElucHV0KClcbiAgcHVibGljIGV4cG9ydEV4Y2VsID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBleHBvcnRQREYgPSBmYWxzZTtcbiAgQElucHV0KClcbiAgcHVibGljIGN1c3RvbUZ1bmN0aW9uOiB7IGxhYmVsOiBzdHJpbmc7IGljb24/OiBzdHJpbmc7IGNsaWNrRnVuY3Rpb246IEZ1bmN0aW9uIH1bXSB8IHVuZGVmaW5lZDtcbiAgQElucHV0KClcbiAgcHVibGljIHRvdGFsUmVjb3JkcyA9IDA7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkaXNhYmxlZEhlYWRlcmNoZWNrYm94ID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBmaWx0ZXJzOiBGaWx0ZXJGaWVsZFtdID0gW107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhZGRJdGVtTGFiZWwgPSAnJztcbiAgQElucHV0KClcbiAgcHVibGljIHBhZ2luYXRpb24gPSB0cnVlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgdmlydHVhbFBhZ2luYXRpb24gPSBmYWxzZTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCB0YWJzKF90YWJzOiBMaXN0SXRlbVtdKSB7XG4gICAgdGhpcy5fdGFicyA9IF90YWJzO1xuICAgIHRoaXMuX3RhYlNlbGVjdGVkID0gX3RhYnNbMF07XG4gIH1cbiAgQElucHV0KClcbiAgcHVibGljIGN1c3RvbUJ1dHRvbnM6IHsgbGFiZWw6IHN0cmluZzsgY2xpY2tGdW5jdGlvbjogRnVuY3Rpb247IGRpc2FibGVkPzogYm9vbGVhbiB9W10gfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhZGRJdGVtQnV0dG9uUGx1c1NpZ24gPSBmYWxzZTtcbiAgQElucHV0KClcbiAgcHVibGljIGhhc0FjdGlvbnM6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGFzRXhwYW5kYWJsZUljb24gPSBmYWxzZTtcbiAgQElucHV0KClcbiAgcHVibGljIGFkZE5hbWVDb2x1bW5FeHBhbmQgPSAnJztcbiAgQElucHV0KCkgZXhwYW5kYWJsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBleHBhbnNpb25UZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNlbGVjdGlvbk1vZGUoX3NlbGVjdGlvbk1vZGUpIHtcbiAgICBzd2l0Y2ggKF9zZWxlY3Rpb25Nb2RlKSB7XG4gICAgICBjYXNlICdzaW5nbGUnOlxuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlID0gJ3NpbmdsZSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbXVsdGlwbGUnOlxuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlID0gJ211bHRpcGxlJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlID0gbnVsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZWxlY3Rpb25UeXBlOiAnY2hlY2tib3gnIHwgJ3JhZGlvYnV0dG9uJyB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGhlaWdodChfaGVpZ2h0OiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKF9oZWlnaHQpIHtcbiAgICAgIGNhc2UgJ3NtYWxsJzpcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gJzMwMHB4JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtZWRpdW0nOlxuICAgICAgICB0aGlzLl9oZWlnaHQgPSAnNTAwcHgnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xhcmdlJzpcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gJzcwMHB4JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdmdWxsJzpcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gJ2ZsZXgnO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuX2hlaWdodCA9ICczMDBweCc7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93TGltaXRCYWxhbmNlID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93RGF0YUJhbGFuY2UgPSBmYWxzZTtcbiAgQElucHV0KClcbiAgcHVibGljIGRhdGFBY2NvdW50QmFsYW5jZTogeyB2aXNpYmxlOiBib29sZWFuOyBuYW1lOiBzdHJpbmc7IHZhbHVlQmFsYW5jZTogbnVtYmVyOyBzaG93QmFsYW5jZTogYm9vbGVhbiB9W10gPSBbXTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIG9uTGF6eUxvYWQgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFUYWJsZUxhenlMb2FkRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb25GaWx0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBvbkFkZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBvbkV4cG9ydEV4Y2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KClcbiAgcHVibGljIG9uRXhwb3J0UERGID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KClcbiAgcHVibGljIG9uU2VsZWN0ZWRSb3dzID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb25GaWx0ZXJDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJDaGFuZ2VkRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb25UYWJTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TGlzdEl0ZW0+KCk7XG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb25FeHBhbmRSb3c6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KClcbiAgcHVibGljIG9uQ2VsbEVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgaXRlbTogYW55OyBmaWVsZDogc3RyaW5nOyB2YWx1ZTogYW55IH0+KCk7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGZpcnN0TGF6eUxvYWQgPSBmYWxzZTtcbiAgQElucHV0KClcbiAgcHVibGljIHNob3VsZExhenlMb2FkV2l0aG91dEZpbHRlciA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgcmVvcmRlcmFibGVDb2x1bW5zID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZChGaWx0ZXJzQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwdWJsaWMgZmlsdGVyc0NvbXBvbmVudDogRmlsdGVyc0NvbXBvbmVudCB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgc2VsZWN0ZWRJdGVtczogYW55ID0gW107XG5cbiAgZ2V0IGJhbGFuY2UoKTogKGl0ZW1BY2NvdW50PzogYW55KSA9PiBudW1iZXIgfCBzdHJpbmcge1xuICAgIHJldHVybiAoaXRlbUFjY291bnQ/OiBhbnkpOiBudW1iZXIgfCBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuIGl0ZW1BY2NvdW50LnNob3dCYWxhbmNlXG4gICAgICAgID8gaXRlbUFjY291bnQudmFsdWVCYWxhbmNlLnRvTG9jYWxlU3RyaW5nKCdwdC1CUicsIHtcbiAgICAgICAgICAgIGN1cnJlbmN5OiAnQlJMJyxcbiAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMixcbiAgICAgICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogMixcbiAgICAgICAgICB9KVxuICAgICAgICA6ICctLC0tJztcbiAgICB9O1xuICB9XG5cbiAgZ2V0IHRhYnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYnM7XG4gIH1cbiAgZ2V0IGhlaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xuICB9XG4gIGdldCBzZWxlY3Rpb25Nb2RlKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2VsZWN0aW9uTW9kZTogJ3NpbmdsZScgfCAnbXVsdGlwbGUnIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2hlaWdodDogc3RyaW5nID0gJ3NtYWxsJztcbiAgcHJpdmF0ZSBfdGFiczogTGlzdEl0ZW1bXSA9IFtdO1xuICBwcml2YXRlIF9kcmF3ID0gMTtcbiAgcHJpdmF0ZSBfZmlyc3RMYXp5TG9hZGVkRG9uZSA9IHRoaXMuZmlyc3RMYXp5TG9hZDtcbiAgcHJpdmF0ZSBfbGFzdExhenlMb2FkRXZlbnQ6IERhdGFUYWJsZUxhenlMb2FkRXZlbnQgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX3RhYlNlbGVjdGVkOiBMaXN0SXRlbSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfZmlsdGVyU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmhlaWdodCkge1xuICAgICAgdGhpcy5oZWlnaHQgPSAnc21hbGwnO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5wYWdpbmF0aW9uIHx8IHRoaXMudmlydHVhbFBhZ2luYXRpb24pIHtcbiAgICAgIHRoaXMuZmlsdGVyc0NvbXBvbmVudD8uc2VhcmNoKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZmlsdGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBnZXRDb2xTdHlsZShjb2w6IFRhYmxlQ29sdW1uKSB7XG4gICAgcmV0dXJuIHsgJ21pbi13aWR0aCc6IGNvbC53aWR0aCB9O1xuICB9XG5cbiAgbGF6eUxvYWRlZChwYXJhbXM6IHsgZmlsdGVyOiBib29sZWFuOyBkYXRhOiBhbnkgfSA9IHsgZmlsdGVyOiBmYWxzZSwgZGF0YTogeyBzdGFydDogMCwgcm93czogMTAgfSB9KSB7XG4gICAgaWYgKCFwYXJhbXMuZmlsdGVyICYmICF0aGlzLnNob3VsZExhenlMb2FkV2l0aG91dEZpbHRlcikge1xuICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoKGNvbCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IGNvbC5maWVsZCxcbiAgICAgICAgICBuYW1lOiBgJHtjb2wuZmllbGQuc3Vic3RyaW5nKDAsIDEpLnRvVXBwZXJDYXNlKCl9JHtjb2wuZmllbGQuc3Vic3RyaW5nKDEsIGNvbC5maWVsZC5sZW5ndGgpfWAsXG4gICAgICAgICAgb3JkZXJhYmxlOiB0cnVlLFxuICAgICAgICAgIHNlYXJjaDogeyB2YWx1ZTogJycsIHJlZ2V4OiBmYWxzZSB9LFxuICAgICAgICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLmhhc0FjdGlvbnMpIHtcbiAgICAgICAgY29sdW1ucy51bnNoaWZ0KHtcbiAgICAgICAgICBkYXRhOiAnYWN0aXZlJyxcbiAgICAgICAgICBuYW1lOiAnQWN0aXZlJyxcbiAgICAgICAgICBvcmRlcmFibGU6IHRydWUsXG4gICAgICAgICAgc2VhcmNoOiB7IHZhbHVlOiAnJywgcmVnZXg6IGZhbHNlIH0sXG4gICAgICAgICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLl9sYXN0TGF6eUxvYWRFdmVudCA9IHtcbiAgICAgICAgLi4uKHRoaXMuX2xhc3RMYXp5TG9hZEV2ZW50IHx8ICh7fSBhcyBhbnkpKSxcbiAgICAgICAgcGFnZTogcGFyYW1zLmRhdGEuZmlyc3QgLyBwYXJhbXMuZGF0YS5yb3dzICsgMSxcbiAgICAgICAgc3RhcnQ6IHBhcmFtcy5kYXRhLmZpcnN0LFxuICAgICAgICBsZW5ndGg6IHBhcmFtcy5kYXRhLnJvd3MsXG4gICAgICAgIGRyYXc6IHRoaXMuX2RyYXcrKyxcbiAgICAgICAgb3JkZXI6IHBhcmFtcy5kYXRhLnNvcnRGaWVsZFxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29sdW1uOlxuICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5zLmZpbmRJbmRleCgoY29sKSA9PiBjb2wuZmllbGQgPT09IHBhcmFtcy5kYXRhLnNvcnRGaWVsZCkgKyAodGhpcy5oYXNBY3Rpb25zID8gMSA6IDApLFxuICAgICAgICAgICAgICAgIGRpcjogcGFyYW1zLmRhdGEuc29ydE9yZGVyID4gMCA/ICdhc2MnIDogJ2Rlc2MnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW3sgY29sdW1uOiAwLCBkaXI6ICdkZXNjJyB9XSxcbiAgICAgICAgY29sdW1uczogY29sdW1ucyxcbiAgICAgICAgdGFiOiB0aGlzLl90YWJTZWxlY3RlZCxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xhc3RMYXp5TG9hZEV2ZW50ID0ge1xuICAgICAgICAuLi50aGlzLl9sYXN0TGF6eUxvYWRFdmVudCxcbiAgICAgICAgLi4ucGFyYW1zLmRhdGEsXG4gICAgICAgIHN0YXJ0OiAwLFxuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLl90YWJTZWxlY3RlZCkge1xuICAgICAgICB0aGlzLl9sYXN0TGF6eUxvYWRFdmVudCA9IHtcbiAgICAgICAgICAuLi4odGhpcy5fbGFzdExhenlMb2FkRXZlbnQgfHwgKHt9IGFzIGFueSkpLFxuICAgICAgICAgIC4uLnsgU3RhdHVzOiB0aGlzLl90YWJTZWxlY3RlZC5jb2RlIH0sXG4gICAgICAgICAgdGFiOiB0aGlzLl90YWJTZWxlY3RlZCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZmlyc3RMYXp5TG9hZGVkRG9uZSB8fCB0aGlzLmZpcnN0TGF6eUxvYWQpIHtcbiAgICAgIHRoaXMub25MYXp5TG9hZC5lbWl0KHRoaXMuX2xhc3RMYXp5TG9hZEV2ZW50KTtcbiAgICB9XG4gICAgdGhpcy5fZmlyc3RMYXp5TG9hZGVkRG9uZSA9IHRydWU7XG4gIH1cblxuICBnZXRDZWxsQ29udGVudChpdGVtOiBhbnksIGNvbDogVGFibGVDb2x1bW4pIHtcbiAgICBjb25zdCBjZWxsVGV4dCA9IHRoaXMuZ2V0Q2VsbFRleHQoaXRlbSwgY29sKTtcbiAgICBsZXQgY29udGVudCA9IGA8c3BhbiBjbGFzcz1cInAtY29sdW1uLXRpdGxlXCI+JHtjb2wuaGVhZGVyfTwvc3Bhbj48c3BhbiBjbGFzcz1cInctMTAwXCI+YDtcbiAgICBpZiAoXG4gICAgICAhY29sLnR5cGUgfHxcbiAgICAgIFtUYWJsZUNvbHVtblR5cGUuRU5VTSwgVGFibGVDb2x1bW5UeXBlLlRFWFQsIFRhYmxlQ29sdW1uVHlwZS5EQVRFVElNRSwgVGFibGVDb2x1bW5UeXBlLkRBVEVdLmluY2x1ZGVzKGNvbC50eXBlKVxuICAgICkge1xuICAgICAgY29udGVudCArPSBjZWxsVGV4dDtcbiAgICB9XG4gICAgc3dpdGNoIChjb2wudHlwZSkge1xuICAgICAgY2FzZSBUYWJsZUNvbHVtblR5cGUuQ1VTVE9NX1NUWUxFOlxuICAgICAgICBjb250ZW50ICs9IGA8c3BhbiBjbGFzcz1cIiR7Y29sLnRleHRGaWVsZENsYXNzID8gaXRlbVtjb2wudGV4dEZpZWxkQ2xhc3NdIDogJyd9XCI+JHtjZWxsVGV4dH08L3NwYW4+YDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFRhYmxlQ29sdW1uVHlwZS5CT09MRUFOOlxuICAgICAgICBjb250ZW50ICs9IGA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJlZFwiPjxpIGNsYXNzPVwiIHN0YXR1cy10YWJsZS1maWVsZCBmYXMgZmEtJHtcbiAgICAgICAgICBjZWxsVGV4dCA/ICdjaGVjayBib29sZWFuLXZhbHVlLXBvc2l0aXZlJyA6ICd0aW1lcyBib29sZWFuLXZhbHVlLW5lZ2F0aXZlJ1xuICAgICAgICB9XCI+PC9pPjwvZGl2PmA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUYWJsZUNvbHVtblR5cGUuU1RBVFVTX0JBREdFOlxuICAgICAgICBjb250ZW50ICs9IGA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJlZFwiPjxpIGNsYXNzPVwiZmFzIGZhLWNpcmNsZSBzdGF0dXMtdGFibGUtZmllbGQgJHt0aGlzLmdldFN0YXR1c0NvbG9yKFxuICAgICAgICAgIGNlbGxUZXh0LFxuICAgICAgICApfVwiPjwvaT48L2Rpdj5gO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVGFibGVDb2x1bW5UeXBlLkFDVElWRV9CT09MRUFOX0JBREdFOlxuICAgICAgICBjb250ZW50ICs9IGA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJlZFwiPjxpIGNsYXNzPVwiZmFzIGZhLWNpcmNsZSBzdGF0dXMtdGFibGUtZmllbGQgJHt0aGlzLmdldEFjdGl2ZVN0YXR1c0NvbG9yKFxuICAgICAgICAgIGNlbGxUZXh0LFxuICAgICAgICApfVwiPjwvaT48L2Rpdj5gO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVGFibGVDb2x1bW5UeXBlLkJVVFRPTjpcbiAgICAgICAgbGV0IGljb25DbGFzcyA9ICcnO1xuICAgICAgICBpZiAodHlwZW9mIGNvbC5pY29uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgaWNvbkNsYXNzID0gY29sLmljb24oaXRlbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWNvbkNsYXNzID0gY29sLmljb24gfHwgJ2ZhcyBmYS1jaXJjbGUnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRlbnQgKz0gYDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlcmVkXCI+PGkgY2xhc3M9XCIke2ljb25DbGFzc30gc3RhdHVzLXRhYmxlLWZpZWxkIHRhYmxlLWJ1dHRvblwiPjwvaT48L2Rpdj5gO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVGFibGVDb2x1bW5UeXBlLk1BU0s6XG4gICAgICAgIGlmIChjb2wubWFzayA9PT0gJ2R5bmFtaWNDcGZDbnBqJykge1xuICAgICAgICAgIGNvbnRlbnQgKz0gTWFza1V0aWwuZm9ybWF0RG9jdW1lbnQoY2VsbFRleHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRlbnQgKz0gTWFza1V0aWwuZG9NYXNrU3RyaW5nKGNlbGxUZXh0LCBjb2wubWFzayk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFRhYmxlQ29sdW1uVHlwZS5DVVJSRU5DWTpcbiAgICAgICAgY29udGVudCArPSBOdW1iZXIoY2VsbFRleHQpLnRvTG9jYWxlU3RyaW5nKCdwdC1CUicsIHtcbiAgICAgICAgICBjdXJyZW5jeTogY29sLmN1cnJlbmN5VHlwZSB8fCAnQlJMJyxcbiAgICAgICAgICBjdXJyZW5jeURpc3BsYXk6ICduYXJyb3dTeW1ib2wnLFxuICAgICAgICAgIHN0eWxlOiAnY3VycmVuY3knLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb250ZW50ICs9IGA8L3NwYW4+YDtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDZWxsVGV4dChpdGVtOiBhbnksIGNvbDogVGFibGVDb2x1bW4pIHtcbiAgICBpZiAoY29sLmdldEVudW1UcmFuc2xhdGVkKSB7XG4gICAgICByZXR1cm4gY29sLmdldEVudW1UcmFuc2xhdGVkKGl0ZW1bY29sLmZpZWxkXSk7XG4gICAgfVxuICAgIGlmIChjb2wudHlwZSA9PT0gVGFibGVDb2x1bW5UeXBlLkRBVEVUSU1FICYmIGl0ZW1bY29sLmZpZWxkXSkge1xuICAgICAgY29uc3QgZGF0ZVRpbWUgPVxuICAgICAgICBpdGVtW2NvbC5maWVsZF0gaW5zdGFuY2VvZiBEYXRlID8gRGF0ZVRpbWUuZnJvbUpTRGF0ZShpdGVtW2NvbC5maWVsZF0pIDogRGF0ZVRpbWUuZnJvbUlTTyhpdGVtW2NvbC5maWVsZF0pO1xuICAgICAgcmV0dXJuIGRhdGVUaW1lLnRvVVRDKCkudG9Gb3JtYXQoJ2RkL01NL3l5eXkgSEg6bW0nKTtcbiAgICB9XG4gICAgaWYgKGNvbC50eXBlID09PSBUYWJsZUNvbHVtblR5cGUuREFURSAmJiBpdGVtW2NvbC5maWVsZF0pIHtcbiAgICAgIGNvbnN0IGRhdGVUaW1lID1cbiAgICAgICAgaXRlbVtjb2wuZmllbGRdIGluc3RhbmNlb2YgRGF0ZSA/IERhdGVUaW1lLmZyb21KU0RhdGUoaXRlbVtjb2wuZmllbGRdKSA6IERhdGVUaW1lLmZyb21JU08oaXRlbVtjb2wuZmllbGRdKTtcbiAgICAgIHJldHVybiBkYXRlVGltZS50b1VUQygpLnRvRm9ybWF0KCdkZC9NTS95eXl5Jyk7XG4gICAgfVxuICAgIGlmIChjb2wudHlwZSA9PT0gVGFibGVDb2x1bW5UeXBlLlNUQUNLX0JBREdFKSB7XG4gICAgICBpZiAoIWl0ZW1bY29sLmZpZWxkXS5sZW5ndGggfHwgaXRlbVtjb2wuZmllbGRdLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gaXRlbVtjb2wuZmllbGRdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGArJHtpdGVtW2NvbC5maWVsZF0ubGVuZ3RofWA7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb2wudHlwZSA9PT0gVGFibGVDb2x1bW5UeXBlLlNUQVRVU19CQURHRSkge1xuICAgICAgcmV0dXJuIGl0ZW1bY29sLmZpZWxkXSA9PSAwID8gMCA6IGl0ZW1bY29sLmZpZWxkXTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbVtjb2wuZmllbGQgfHwgJyddIHx8ICcnO1xuICB9XG5cbiAgcHVibGljIGdldFRvb2x0aXBUZXh0KGl0ZW06IGFueSwgY29sOiBUYWJsZUNvbHVtbikge1xuICAgIGlmIChcbiAgICAgICFjb2wudHlwZSB8fFxuICAgICAgIVtUYWJsZUNvbHVtblR5cGUuU1RBQ0tfQkFER0VdLmluY2x1ZGVzKGNvbC50eXBlKSB8fFxuICAgICAgIUFycmF5LmlzQXJyYXkoaXRlbVtjb2wuZmllbGRdKSB8fFxuICAgICAgaXRlbVtjb2wuZmllbGRdLmxlbmd0aCA9PT0gMVxuICAgICkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGl0ZW1bY29sLmZpZWxkXSkpIHtcbiAgICAgIHJldHVybiBpdGVtW2NvbC5maWVsZF07XG4gICAgfVxuICAgIHJldHVybiBpdGVtW2NvbC5maWVsZF0uam9pbignIC0gJyk7XG4gIH1cblxuICBvblRhYkNoYW5nZSgkZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuX3RhYlNlbGVjdGVkID0gdGhpcy50YWJzWyRldmVudC5pbmRleF07XG4gICAgdGhpcy5sYXp5TG9hZGVkKHsgZmlsdGVyOiB0cnVlLCBkYXRhOiB7fSB9KTtcbiAgICB0aGlzLm9uVGFiU2VsZWN0ZWQuZW1pdCh0aGlzLl90YWJTZWxlY3RlZCk7XG4gIH1cblxuICBzdWJzY3JpYmVUb0ZpbHRlckNoYW5nZXMoKSB7XG4gICAgdGhpcy5fZmlsdGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fZmlsdGVyU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIE9iamVjdC5rZXlzKHRoaXMuZmlsdGVyc0NvbXBvbmVudD8uZm9ybUdyb3VwLmNvbnRyb2xzIHx8IHt9KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIHRoaXMuX2ZpbHRlclN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgIHRoaXMuZmlsdGVyc0NvbXBvbmVudD8uZm9ybUdyb3VwXG4gICAgICAgICAgLmdldChrZXkpXG4gICAgICAgICAgPy52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoMzAwKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkZpbHRlckNoYW5nZWQuZW1pdCh7IGZpZWxkOiBrZXksIHZhbHVlIH0pO1xuICAgICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIHRoaXMub25GaWx0ZXJDaGFuZ2VkLmVtaXQoeyBmaWVsZDoga2V5LCB2YWx1ZTogdGhpcy5maWx0ZXJzQ29tcG9uZW50Py5mb3JtR3JvdXAuZ2V0KGtleSk/LnZhbHVlIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgb25Sb3dDbGljayhpdGVtOiBhbnkpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLm9uRXhwYW5kUm93LmVtaXQoaXRlbSk7XG4gIH1cblxuICBnZXQgbGlzdEhhc0FjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5zb21lKChpdGVtKSA9PiBpdGVtLmFjdGlvbnM/Lmxlbmd0aCk7XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlU2VsZWN0ZWRJdGVtcyh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5vblNlbGVjdGVkUm93cy5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gIH1cblxuICBwdWJsaWMgaXNIdG1sQ2VsbChjb2w6IFRhYmxlQ29sdW1uKSB7XG4gICAgcmV0dXJuICFjb2wudHlwZSB8fCAhdGhpcy5pc0JhZGdlQ2VsbChjb2wpO1xuICB9XG5cbiAgcHVibGljIGlzRWRpdGFibGVDZWxsKGNvbDogVGFibGVDb2x1bW4pIHtcbiAgICByZXR1cm4gdGhpcy5pc0h0bWxDZWxsKGNvbCkgJiYgISFjb2wuY2VsbEVkaXQ7XG4gIH1cblxuICBwdWJsaWMgb25DZWxsRWRpdENvbXBsZXRlKGl0ZW06IGFueSwgY29sOiBUYWJsZUNvbHVtbiwgdmFsdWU6IGFueSkge1xuICAgIGl0ZW1bY29sLmZpZWxkXSA9IHZhbHVlO1xuICAgIHRoaXMub25DZWxsRWRpdC5lbWl0KHsgaXRlbSwgZmllbGQ6IGNvbC5maWVsZCwgdmFsdWUgfSk7XG4gIH1cblxuICBwdWJsaWMgaXNCYWRnZUNlbGwoY29sOiBUYWJsZUNvbHVtbikge1xuICAgIHJldHVybiBjb2wudHlwZSAmJiBbVGFibGVDb2x1bW5UeXBlLlRFWFRfQkFER0UsIFRhYmxlQ29sdW1uVHlwZS5TVEFDS19CQURHRV0uaW5jbHVkZXMoY29sLnR5cGUpO1xuICB9XG5cbiAgcHVibGljIGlzU2NvcmVDZWxsKGNvbDogVGFibGVDb2x1bW4pIHtcbiAgICByZXR1cm4gY29sLnR5cGUgPT09IFRhYmxlQ29sdW1uVHlwZS5TQ09SRTtcbiAgfVxuXG4gIHB1YmxpYyBvblNlbGVjdGlvbkNoYW5nZShzZWxlY3Rpb246IGFueSkge1xuICAgIGZvciAobGV0IGkgPSBzZWxlY3Rpb24ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGxldCBkYXRhID0gc2VsZWN0aW9uW2ldO1xuICAgICAgaWYgKGRhdGEuZGlzYWJsZWRDaGVja0JveCkge1xuICAgICAgICBzZWxlY3Rpb24uc3BsaWNlKGksIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBzZWxlY3Rpb247XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlU2hvd0JhbGFuY2UoaXRlbUFjY291bnQ/OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoaXRlbUFjY291bnQpIHtcbiAgICAgIGl0ZW1BY2NvdW50LnNob3dCYWxhbmNlID0gIWl0ZW1BY2NvdW50LnNob3dCYWxhbmNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RhdHVzQ29sb3Ioc3RhdHVzOiBTdGF0dXMpIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSBTdGF0dXMuUEVORElORzpcbiAgICAgICAgcmV0dXJuICd3YXJuaW5nJztcbiAgICAgIGNhc2UgU3RhdHVzLkFQUFJPVkVEOlxuICAgICAgICByZXR1cm4gJ3N1Y2Nlc3MnO1xuICAgICAgY2FzZSBTdGF0dXMuUkVKRUNURUQ6XG4gICAgICAgIHJldHVybiAnZXJyb3InO1xuICAgICAgY2FzZSBTdGF0dXMuSU5GTzpcbiAgICAgICAgcmV0dXJuICdpbmZvJztcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBY3RpdmVTdGF0dXNDb2xvcihhY3RpdmU6IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gYWN0aXZlID8gJ3N1Y2Nlc3MnIDogJ2Vycm9yJztcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImdyaWRcIj5cbiAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgIDx2ZWN0b3ItZmlsdGVyc1xuICAgICAgW2ZpZWxkc109XCJmaWx0ZXJzXCJcbiAgICAgIChvblNlYXJjaCk9XCJsYXp5TG9hZGVkKHsgZmlsdGVyOiB0cnVlLCBkYXRhOiAkZXZlbnQgfSlcIlxuICAgICAgKGZvcm1CdWlsZGVkKT1cInN1YnNjcmliZVRvRmlsdGVyQ2hhbmdlcygpXCJcbiAgICA+PC92ZWN0b3ItZmlsdGVycz5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICBjbGFzcz1cInRhYmxlLWhlYWRlci1hY3Rpb25zIGZpZWxkXCJcbiAgICAqbmdJZj1cImFkZEl0ZW1MYWJlbCB8fCBleHBvcnRFeGNlbCB8fCBleHBvcnRQREYgfHwgY3VzdG9tRnVuY3Rpb24gfHwgY3VzdG9tQnV0dG9uc1wiXG4gID5cbiAgICA8YnV0dG9uICpuZ0lmPVwiZXhwb3J0RXhjZWxcIiAoY2xpY2spPVwib25FeHBvcnRFeGNlbC5lbWl0KClcIiBjbGFzcz1cImV4cG9ydC1idXR0b24gZXhwb3J0LWV4Y2VsXCI+XG4gICAgICA8aSBjbGFzcz1cImZhcyBmYS1maWxlLWV4Y2VsXCI+PC9pPjxzcGFuPkV4Y2VsPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gKm5nSWY9XCJleHBvcnRQREZcIiAoY2xpY2spPVwib25FeHBvcnRQREYuZW1pdCgpXCIgY2xhc3M9XCJleHBvcnQtYnV0dG9uIGV4cG9ydC1wZGZcIj5cbiAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWZpbGUtcGRmXCI+PC9pPjxzcGFuPlBERjwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGN1c3RvbUZ1bmN0aW9uXCJcbiAgICAgIChjbGljayk9XCJidXR0b24uY2xpY2tGdW5jdGlvbigpXCJcbiAgICAgIGNsYXNzPVwiZXhwb3J0LWJ1dHRvbiBjdXN0b20tZnVuY3Rpb25cIlxuICAgID5cbiAgICAgIDxpICpuZ0lmPVwiYnV0dG9uPy5pY29uXCIgY2xhc3M9XCJ7eyBidXR0b24/Lmljb24gfX1cIj48L2k+PHNwYW4+e3sgYnV0dG9uPy5sYWJlbCB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDx2ZWN0b3ItYnV0dG9uXG4gICAgICAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGN1c3RvbUJ1dHRvbnNcIlxuICAgICAgY2xhc3M9XCJhZGQtaXRlbS1idXR0b25cIlxuICAgICAgW3JvdW5kXT1cInRydWVcIlxuICAgICAgW2xhYmVsXT1cImJ1dHRvbi5sYWJlbFwiXG4gICAgICAoY2xpY2spPVwiYnV0dG9uLmNsaWNrRnVuY3Rpb24oKVwiXG4gICAgICBbcmlnaHRJY29uXT1cImFkZEl0ZW1CdXR0b25QbHVzU2lnbiA/ICdwaSBwaS1wbHVzJyA6ICcnXCJcbiAgICAgIFtkaXNhYmxlZF09XCJidXR0b24uZGlzYWJsZWQgPT09IHRydWVcIlxuICAgID48L3ZlY3Rvci1idXR0b24+XG4gICAgPHZlY3Rvci1idXR0b25cbiAgICAgICpuZ0lmPVwiYWRkSXRlbUxhYmVsXCJcbiAgICAgIGNsYXNzPVwiYWRkLWl0ZW0tYnV0dG9uXCJcbiAgICAgIFtsYWJlbF09XCJhZGRJdGVtTGFiZWxcIlxuICAgICAgKGNsaWNrKT1cIm9uQWRkLmVtaXQoKVwiXG4gICAgICBbcmlnaHRJY29uXT1cImFkZEl0ZW1CdXR0b25QbHVzU2lnbiA/ICdwaSBwaS1wbHVzJyA6ICcnXCJcbiAgICAgIFtyb3VuZF09XCJ0cnVlXCJcbiAgICA+PC92ZWN0b3ItYnV0dG9uPlxuICA8L2Rpdj5cbiAgQGlmIChzaG93TGltaXRCYWxhbmNlKSB7XG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiBncmlkIG1sLTBcIj5cbiAgICAgIEBmb3IgKGl0ZW1BY2NvdW50IG9mIGRhdGFBY2NvdW50QmFsYW5jZTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgIEBpZiAoaXRlbUFjY291bnQudmlzaWJsZSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGJhbGFuY2UtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+e3sgaXRlbUFjY291bnQubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWNvbnRlbnQgdmFsdWUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgIDxzcGFuPlIkIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtQWNjb3VudC5zaG93QmFsYW5jZVwiIGNsYXNzPVwiYmFsYW5jZVwiPnt7IGJhbGFuY2UoaXRlbUFjY291bnQpIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGlkZGVuLWJhbGFuY2VcIiAqbmdJZj1cIiFpdGVtQWNjb3VudC5zaG93QmFsYW5jZVwiPjwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYXNcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZmEtZXllJzogIWl0ZW1BY2NvdW50LnNob3dCYWxhbmNlLCAnZmEtZXllLXNsYXNoJzogaXRlbUFjY291bnQuc2hvd0JhbGFuY2UgfVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlU2hvd0JhbGFuY2UoaXRlbUFjY291bnQpXCJcbiAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChzaG93RGF0YUJhbGFuY2UpIHtcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGdyaWQgbWwtMFwiPlxuICAgICAgQGZvciAoaXRlbUFjY291bnQgb2YgZGF0YUFjY291bnRCYWxhbmNlOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgYmFsYW5jZS1jb250YWluZXJcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+e3sgaXRlbUFjY291bnQubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1jb250ZW50IHZhbHVlLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWxhbmNlXCI+e3sgaXRlbUFjY291bnQudmFsdWVCYWxhbmNlIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICA8dmVjdG9yLXBhbmVsIGNsYXNzPVwiZGF0YS10YWJsZS1wYW5lbFwiPlxuICAgICAgPHAtdGFiVmlldyAob25DaGFuZ2UpPVwib25UYWJDaGFuZ2UoJGV2ZW50KVwiICpuZ0lmPVwidGFicz8ubGVuZ3RoXCI+XG4gICAgICAgIDxwLXRhYlBhbmVsICpuZ0Zvcj1cImxldCB0YWIgb2YgdGFic1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgICAgICAgIDxlbSAqbmdJZj1cInRhYi5pY29uXCIgW2NsYXNzXT1cInRhYi5pY29uXCI+Jm5ic3A7PC9lbT5cbiAgICAgICAgICAgIDxzcGFuPnt7IHRhYi5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvcC10YWJQYW5lbD5cbiAgICAgIDwvcC10YWJWaWV3PlxuICAgICAgPHAtdGFibGVcbiAgICAgICAgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cIk1vc3RyYW5kbyB7Zmlyc3R9IGF0w6kge2xhc3R9IGRlIHt0b3RhbFJlY29yZHN9IHJlZ2lzdHJvc1wiXG4gICAgICAgIHNvcnRNb2RlPVwic2luZ2xlXCJcbiAgICAgICAgW3Jvd3NdPVwiMTBcIlxuICAgICAgICBbbGF6eV09XCJwYWdpbmF0aW9uICYmICF2aXJ0dWFsUGFnaW5hdGlvblwiXG4gICAgICAgIFt2YWx1ZV09XCJkYXRhXCJcbiAgICAgICAgW3BhZ2luYXRvcl09XCJwYWdpbmF0aW9uXCJcbiAgICAgICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxuICAgICAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxuICAgICAgICBbcm93c1BlclBhZ2VPcHRpb25zXT1cIlsxMCwgMjUsIDUwLCAxMDBdXCJcbiAgICAgICAgW3Jlc3BvbnNpdmVdPVwidHJ1ZVwiXG4gICAgICAgIFtyZXNpemFibGVDb2x1bW5zXT1cInRydWVcIlxuICAgICAgICBbc2Nyb2xsYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgc2Nyb2xsRGlyZWN0aW9uPVwidmVydGljYWxcIlxuICAgICAgICByZXNwb25zaXZlTGF5b3V0PVwic2Nyb2xsXCJcbiAgICAgICAgZGF0YUtleT1cImlkXCJcbiAgICAgICAgW3Njcm9sbEhlaWdodF09XCJoZWlnaHRcIlxuICAgICAgICBbYXR0ci5zZWxlY3Rpb25Nb2RlXT1cInNlbGVjdGlvbk1vZGVcIlxuICAgICAgICBbKHNlbGVjdGlvbildPVwic2VsZWN0ZWRJdGVtc1wiXG4gICAgICAgIChvblJvd1NlbGVjdCk9XCJjaGFuZ2VTZWxlY3RlZEl0ZW1zKCRldmVudClcIlxuICAgICAgICAob25IZWFkZXJDaGVja2JveFRvZ2dsZSk9XCJjaGFuZ2VTZWxlY3RlZEl0ZW1zKCRldmVudClcIlxuICAgICAgICAob25Sb3dVbnNlbGVjdCk9XCJjaGFuZ2VTZWxlY3RlZEl0ZW1zKCRldmVudClcIlxuICAgICAgICAob25MYXp5TG9hZCk9XCJsYXp5TG9hZGVkKHsgZmlsdGVyOiBmYWxzZSwgZGF0YTogJGV2ZW50IH0pXCJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgW3Jlb3JkZXJhYmxlQ29sdW1uc109XCJyZW9yZGVyYWJsZUNvbHVtbnNcIlxuICAgICAgICBlZGl0TW9kZT1cImNlbGxcIlxuICAgICAgPlxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XG4gICAgICAgICAgPHRyIGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICAgICAgICA8dGggKm5nSWY9XCJyZW9yZGVyYWJsZUNvbHVtbnNcIiBzdHlsZT1cIndpZHRoOiA1cmVtXCI+PC90aD5cblxuICAgICAgICAgICAgPHRoICpuZ0lmPVwic2VsZWN0aW9uVHlwZSA9PT0gJ2NoZWNrYm94J1wiPlxuICAgICAgICAgICAgICA8cC10YWJsZUhlYWRlckNoZWNrYm94IFtkaXNhYmxlZF09XCJkaXNhYmxlZEhlYWRlcmNoZWNrYm94XCI+PC9wLXRhYmxlSGVhZGVyQ2hlY2tib3g+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1jZW50ZXJcIiAqbmdJZj1cImhhc0V4cGFuZGFibGVJY29uXCI+XG4gICAgICAgICAgICAgIHt7IGFkZE5hbWVDb2x1bW5FeHBhbmQgfX1cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8dGggKm5nSWY9XCJoYXNBY3Rpb25zXCI+e3sgJ2FwcC5sYWJlbC5hY3Rpb25zJyB8IHRyYW5zbGF0ZSB9fTwvdGg+XG4gICAgICAgICAgICA8dGggKm5nSWY9XCJzZWxlY3Rpb25UeXBlID09PSAncmFkaW9idXR0b24nXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgQGZvciAoY29sIG9mIGNvbHVtbnM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICBAaWYgKCFjb2wuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJnZXRDb2xTdHlsZShjb2wpXCJcbiAgICAgICAgICAgICAgICAgIFtwU29ydGFibGVDb2x1bW5dPVwiY29sLm5vdFNvcnRhYmxlID8gJycgOiBjb2wuZmllbGRcIlxuICAgICAgICAgICAgICAgICAgcFJlb3JkZXJhYmxlQ29sdW1uXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNvbC5oZWFkZXIgfX08L3NwYW4+IDxwLXNvcnRJY29uICpuZ0lmPVwiIWNvbC5ub3RTb3J0YWJsZVwiIFtmaWVsZF09XCJjb2wuZmllbGRcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtcm93RGF0YSBsZXQtaXRlbSBsZXQtZXhwYW5kZWQ9XCJleHBhbmRlZFwiIGxldC1pbmRleD1cInJvd0luZGV4XCI+XG4gICAgICAgICAgPHRyXG4gICAgICAgICAgICBjbGFzcz1cInJvd1wiXG4gICAgICAgICAgICBbcFNlbGVjdGFibGVSb3ddPVwicm93RGF0YVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7IGV4cGFuZGFibGU6IGV4cGFuZGFibGUgfVwiXG4gICAgICAgICAgICBbcFJvd1RvZ2dsZXJdPVwiZXhwYW5kYWJsZSA/IGl0ZW0gOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soaXRlbSlcIlxuICAgICAgICAgICAgW3BSZW9yZGVyYWJsZVJvd109XCJpbmRleFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlb3JkZXJhYmxlQ29sdW1uc1wiPlxuICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJtYXgtd2lkdGg6IDNyZW07IHBhZGRpbmctbGVmdDogMTBweFwiIGNsYXNzPVwianVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBpIHBpLWJhcnNcIiBwUmVvcmRlcmFibGVSb3dIYW5kbGU+PC9zcGFuPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uVHlwZSA9PT0gJ2NoZWNrYm94J1wiPlxuICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJtYXgtd2lkdGg6IDNyZW07IHBhZGRpbmctbGVmdDogMTBweFwiIGNsYXNzPVwianVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8cC10YWJsZUNoZWNrYm94IFt2YWx1ZV09XCJpdGVtXCIgW2Rpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRDaGVja0JveFwiPjwvcC10YWJsZUNoZWNrYm94PlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uVHlwZSA9PT0gJ3JhZGlvYnV0dG9uJ1wiPlxuICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJtYXgtd2lkdGg6IDNyZW07IHBhZGRpbmctbGVmdDogMTBweFwiIGNsYXNzPVwianVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8cC10YWJsZVJhZGlvQnV0dG9uIFt2YWx1ZV09XCJpdGVtXCI+PC9wLXRhYmxlUmFkaW9CdXR0b24+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cImhhc0V4cGFuZGFibGVJY29uXCIgc3R5bGU9XCJtYXgtd2lkdGg6IDE1MHB4XCIgY2xhc3M9XCJjZW50ZXJlZFwiPlxuICAgICAgICAgICAgICA8cC1tZW51ICNtZW51IFttb2RlbF09XCJpdGVtLmFjdGlvbnNcIiBbcG9wdXBdPVwidHJ1ZVwiIGFwcGVuZFRvPVwiYm9keVwiPjwvcC1tZW51PlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgZXhwYW5kZWQgPyAnYWN0aW9ucy1tZW51LWJ1dHRvbiBwaSBwaS1jaGV2cm9uLWRvd24nIDogJ2FjdGlvbnMtbWVudS1idXR0b24gcGkgcGktY2hldnJvbi1yaWdodCdcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cImhhc0FjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPHAtbWVudSAjbWVudSBbbW9kZWxdPVwiaXRlbS5hY3Rpb25zXCIgW3BvcHVwXT1cInRydWVcIiBhcHBlbmRUbz1cImJvZHlcIj48L3AtbWVudT5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJhY3Rpb25zLW1lbnUtYnV0dG9uIGZhcyBmYS1jb2dcIiAoY2xpY2spPVwibWVudS50b2dnbGUoJGV2ZW50KVwiPjwvaT5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICBAZm9yIChjb2wgb2YgY29sdW1uczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgIEBpZiAoIWNvbC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNFZGl0YWJsZUNlbGwoY29sKVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgIFtwRWRpdGFibGVDb2x1bW5dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIFtwRWRpdGFibGVDb2x1bW5GaWVsZF09XCJjb2wuZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJnZXRDb2xTdHlsZShjb2wpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbC5jZWxsRWRpdD8uZWRpdFR5cGUgfHwgY29sLmNlbGxFZGl0Py5lZGl0VHlwZSA9PT0gJ251bWJlcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW1bY29sLmZpZWxkXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtzdWZmaXhdPVwiY29sLmNlbGxFZGl0Py5lZGl0U3VmZml4IHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZT1cImRlY2ltYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4RnJhY3Rpb25EaWdpdHNdPVwiY29sLmNlbGxFZGl0Py5lZGl0TWF4RnJhY3Rpb25EaWdpdHMgPz8gMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttaW5dPVwiY29sLmNlbGxFZGl0Py5lZGl0TWluID8/IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4XT1cImNvbC5jZWxsRWRpdD8uZWRpdE1heFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChvbkJsdXIpPVwib25DZWxsRWRpdENvbXBsZXRlKGl0ZW0sIGNvbCwgaXRlbVtjb2wuZmllbGRdKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9wLWlucHV0TnVtYmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmNlbGxFZGl0Py5lZGl0VHlwZSA9PT0gJ3RleHQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcElucHV0VGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW1bY29sLmZpZWxkXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uQ2VsbEVkaXRDb21wbGV0ZShpdGVtLCBjb2wsIGl0ZW1bY29sLmZpZWxkXSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGl0ZW1bY29sLmZpZWxkXSB9fXt7IGNvbC5jZWxsRWRpdD8uZWRpdFN1ZmZpeCB8fCAnJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktcGVuY2lsIG1sLTIgdGV4dC1wcmltYXJ5XCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzSHRtbENlbGwoY29sKSAmJiAhY29sLmNlbGxFZGl0XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRDZWxsQ29udGVudChpdGVtLCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbCAmJiBjb2wuY2xpY2tGdW5jdGlvbiAmJiBjb2wuY2xpY2tGdW5jdGlvbihpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImdldENvbFN0eWxlKGNvbClcIlxuICAgICAgICAgICAgICAgICAgPjwvdGQ+XG4gICAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIoIWlzSHRtbENlbGwoY29sKSAmJiAhIWNvbC5nZXRTdGF0dXMpIHx8IGlzU2NvcmVDZWxsKGNvbClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNlbGxcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29sICYmIGNvbC5jbGlja0Z1bmN0aW9uICYmIGNvbC5jbGlja0Z1bmN0aW9uKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0Q29sU3R5bGUoY29sKVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDx2ZWN0b3ItYmFkZ2VcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzQmFkZ2VDZWxsKGNvbClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJnZXRDZWxsVGV4dChpdGVtLCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJjb2wuZ2V0U3RhdHVzICYmIGNvbC5nZXRTdGF0dXMoaXRlbVtjb2wuZmllbGRdKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiZ2V0VG9vbHRpcFRleHQoaXRlbSwgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgID48L3ZlY3Rvci1iYWRnZT5cbiAgICAgICAgICAgICAgICAgICAgPHZlY3Rvci1zY29yZSAqbmdJZj1cImlzU2NvcmVDZWxsKGNvbClcIiBbc2NvcmVdPVwiaXRlbVtjb2wuZmllbGRdXCI+PC92ZWN0b3Itc2NvcmU+XG4gICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxuICAgICAgICAgIDx0ciBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwibm8tcmVzdWx0c1wiIFthdHRyLmNvbHNwYW5dPVwiY29sdW1ucy5sZW5ndGggKyAxXCI+TmVuaHVtIHJlc3VsdGFkbyBlbmNvbnRyYWRvPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicGFnaW5hdG9ycmlnaHRcIj4gPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1pdGVtIHBUZW1wbGF0ZT1cInBhZ2luYXRvcmRyb3Bkb3duaXRlbVwiPiB7eyBpdGVtLnZhbHVlIH19IDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJyb3dleHBhbnNpb25cIiBsZXQtaXRlbT5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW5zLmxlbmd0aCArIChoYXNBY3Rpb25zID8gMSA6IDApXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJleHBhbnNpb25UZW1wbGF0ZTsgY29udGV4dDogeyBpdGVtIH1cIj4gPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L3AtdGFibGU+XG4gICAgPC92ZWN0b3ItcGFuZWw+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -20,4 +20,4 @@ export var SelectionType;
|
|
|
20
20
|
SelectionType["CHECKBOX"] = "checkbox";
|
|
21
21
|
SelectionType["RADIOBUTTON"] = "radiobutton";
|
|
22
22
|
})(SelectionType || (SelectionType = {}));
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12ZWN0b3ItY29tcG9uZW50cy9zcmMvbGliL21vZGVscy9kYXRhLXRhYmxlLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE1BQU0sQ0FBTixJQUFZLGVBZVg7QUFmRCxXQUFZLGVBQWU7SUFDekIsZ0NBQWEsQ0FBQTtJQUNiLHNDQUFtQixDQUFBO0lBQ25CLGdDQUFhLENBQUE7SUFDYix3Q0FBcUIsQ0FBQTtJQUNyQixnQ0FBYSxDQUFBO0lBQ2IsZ0RBQTZCLENBQUE7SUFDN0IsZ0VBQTZDLENBQUE7SUFDN0Msb0NBQWlCLENBQUE7SUFDakIsZ0RBQTZCLENBQUE7SUFDN0IsZ0NBQWEsQ0FBQTtJQUNiLDRDQUF5QixDQUFBO0lBQ3pCLDhDQUEyQixDQUFBO0lBQzNCLHdDQUFxQixDQUFBO0lBQ3JCLGtDQUFlLENBQUE7QUFDakIsQ0FBQyxFQWZXLGVBQWUsS0FBZixlQUFlLFFBZTFCO0FBNENELE1BQU0sQ0FBTixJQUFZLGFBR1g7QUFIRCxXQUFZLGFBQWE7SUFDdkIsc0NBQXFCLENBQUE7SUFDckIsNENBQTJCLENBQUE7QUFDN0IsQ0FBQyxFQUhXLGFBQWEsS0FBYixhQUFhLFFBR3hCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBMaXN0SXRlbSB9IGZyb20gJy4vbGlzdC1pdGVtLm1vZGVsJztcbmltcG9ydCB7IFN0YXR1cyB9IGZyb20gJy4vc3RhdHVzLmVudW0nO1xuXG5leHBvcnQgdHlwZSBEYXRhVGFibGVCYXNlSXRlbSA9IHtcbiAgYWN0aW9ucz86IE1lbnVJdGVtW107XG59O1xuXG5leHBvcnQgZW51bSBUYWJsZUNvbHVtblR5cGUge1xuICBURVhUID0gJ1RFWFQnLFxuICBCT09MRUFOID0gJ0JPT0xFQU4nLFxuICBEQVRFID0gJ0RBVEUnLFxuICBEQVRFVElNRSA9ICdEQVRFVElNRScsXG4gIEVOVU0gPSAnRU5VTScsXG4gIFNUQVRVU19CQURHRSA9ICdTVEFUVVNfQkFER0UnLFxuICBBQ1RJVkVfQk9PTEVBTl9CQURHRSA9ICdBQ1RJVkVfQk9PTEVBTl9CQURHRScsXG4gIEJVVFRPTiA9ICdCVVRUT04nLFxuICBDVVNUT01fU1RZTEUgPSAnQ1VTVE9NX1NUWUxFJyxcbiAgTUFTSyA9ICdNQVNLJyxcbiAgVEVYVF9CQURHRSA9ICdURVhUX0JBREdFJyxcbiAgU1RBQ0tfQkFER0UgPSAnU1RBQ0tfQkFER0UnLFxuICBDVVJSRU5DWSA9ICdDVVJSRU5DWScsXG4gIFNDT1JFID0gJ1NDT1JFJyxcbn1cblxuZXhwb3J0IHR5cGUgVGFibGVDb2x1bW4gPSB7XG4gIGhlYWRlcjogc3RyaW5nO1xuICBmaWVsZDogc3RyaW5nO1xuICB3aWR0aD86IHN0cmluZztcbiAgdHlwZT86IFRhYmxlQ29sdW1uVHlwZTtcbiAgdGV4dEZpZWxkQ2xhc3M/OiBzdHJpbmc7XG4gIGdldEVudW1UcmFuc2xhdGVkPzogKGVudW1WYWw6IGFueSkgPT4gc3RyaW5nO1xuICBnZXRTdGF0dXM/OiAodmFsdWU6IGFueSkgPT4gU3RhdHVzO1xuICBjbGlja0Z1bmN0aW9uPzogRnVuY3Rpb247XG4gIGljb24/OiBzdHJpbmcgfCAoKHJvd0RhdGE6IGFueSkgPT4gc3RyaW5nKTtcbiAgbm90U29ydGFibGU/OiBib29sZWFuO1xuICBtYXNrPzogc3RyaW5nO1xuICBjdXJyZW5jeVR5cGU/OiAnVVNEJyB8ICdCUkwnO1xuICBoaWRkZW4/OiBib29sZWFuO1xuICBjZWxsRWRpdD86IENlbGxFZGl0Q29uZmlnO1xufTtcblxuZXhwb3J0IHR5cGUgQ2VsbEVkaXRDb25maWcgPSB7XG4gIGVkaXRUeXBlPzogJ251bWJlcicgfCAndGV4dCc7XG4gIGVkaXRNaW4/OiBudW1iZXI7XG4gIGVkaXRNYXg/OiBudW1iZXI7XG4gIGVkaXRTdWZmaXg/OiBzdHJpbmc7XG4gIGVkaXRNYXhGcmFjdGlvbkRpZ2l0cz86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIERhdGFUYWJsZUxhenlMb2FkRXZlbnQgPSB7XG4gIHN0YXJ0OiBudW1iZXI7XG4gIGxlbmd0aDogbnVtYmVyO1xuICBkcmF3OiBudW1iZXI7XG4gIHBhZ2U6IG51bWJlcjtcbiAgb3JkZXI6IHsgY29sdW1uOiBudW1iZXI7IGRpcjogJ2FzYycgfCAnZGVzYycgfVtdO1xuICBjb2x1bW5zOiB7XG4gICAgZGF0YTogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBvcmRlcmFibGU6IGJvb2xlYW47XG4gICAgc2VhcmNoOiB7IHZhbHVlOiBzdHJpbmc7IHJlZ2V4OiBib29sZWFuIH07XG4gICAgc2VhcmNoYWJsZTogYm9vbGVhbjtcbiAgfVtdO1xuICBzZWFyY2g6IHsgdmFsdWU6IHN0cmluZzsgcmVnZXg6IGJvb2xlYW4gfTtcbiAgdGFiOiBMaXN0SXRlbTtcbn07XG5cbmV4cG9ydCBlbnVtIFNlbGVjdGlvblR5cGUge1xuICBDSEVDS0JPWCA9ICdjaGVja2JveCcsXG4gIFJBRElPQlVUVE9OID0gJ3JhZGlvYnV0dG9uJyxcbn1cbiJdfQ==
|