@tsi-developpement/tsi-shared-ui 1.9.13 → 1.10.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/esm2022/lib/functions/currency-state.functions.mjs +203 -0
- package/esm2022/lib/pipes/tsi-currency.pipe.mjs +17 -19
- package/esm2022/lib/tsi-components/input-components/editable-grid/editable-grid.component.mjs +3 -3
- package/esm2022/lib/tsi-components/input-components/tsi-currency-other-input/tsi-currency-other-input.component.mjs +49 -28
- package/esm2022/lib/tsi-components/input-components/tsi-currency-societe-input/tsi-currency-societe-input.component.mjs +46 -28
- package/esm2022/lib/tsi-components/output-components/tsi-currency-other-display/tsi-currency-other-display.component.mjs +37 -10
- package/esm2022/lib/tsi-components/output-components/tsi-currency-societe-display/tsi-currency-societe-display.component.mjs +33 -40
- package/esm2022/lib/tsi-components/output-components/tsi-display-grid/tsi-display-grid.component.mjs +3 -3
- package/esm2022/lib/tsi-components/output-components/tsi-generic-grid/tsi-generic-grid.component.mjs +3 -3
- package/esm2022/lib/tsi-components/poc/locale-poc/locale-poc.component.mjs +68 -36
- package/esm2022/lib/tsi-components/tsi-generic-form/tsi-generic-form.component.mjs +1 -1
- package/esm2022/lib/tsi-components/tsi-kanban/tsi-kanban.component.mjs +1 -1
- package/esm2022/lib/tsi-components/tsi-search-box/tsi-search-box.component.mjs +1 -1
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs +595 -319
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs.map +1 -1
- package/lib/consts/app-providers.d.ts +1 -1
- package/lib/functions/currency-state.functions.d.ts +80 -0
- package/lib/pipes/tsi-currency.pipe.d.ts +6 -4
- package/lib/providers/shared-ui-tsi.provider.d.ts +1 -1
- package/lib/tsi-components/input-components/tsi-currency-other-input/tsi-currency-other-input.component.d.ts +15 -10
- package/lib/tsi-components/input-components/tsi-currency-societe-input/tsi-currency-societe-input.component.d.ts +13 -10
- package/lib/tsi-components/output-components/tsi-currency-other-display/tsi-currency-other-display.component.d.ts +16 -6
- package/lib/tsi-components/output-components/tsi-currency-societe-display/tsi-currency-societe-display.component.d.ts +12 -13
- package/lib/tsi-components/poc/locale-poc/locale-poc.component.d.ts +39 -21
- package/package.json +1 -1
package/esm2022/lib/tsi-components/output-components/tsi-display-grid/tsi-display-grid.component.mjs
CHANGED
|
@@ -88,11 +88,11 @@ export class TsiDisplayGridComponent {
|
|
|
88
88
|
this.buttonColumnClicked.emit({ field: field, key: key, selectKeyOnly: this.selectKeyOnly });
|
|
89
89
|
}
|
|
90
90
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiDisplayGridComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
91
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiDisplayGridComponent, selector: "Tsi-Display-Grid", inputs: { columns: "columns", showHeader: "showHeader", header: "header", key: "key", gridData: "gridData", gridSummaryData: "gridSummaryData", isTableLoading: "isTableLoading", showHaveSumary: "showHaveSumary", selectKeyOnly: "selectKeyOnly", selectionMode: "selectionMode", parent: "parent", selectedItems: "selectedItems", showFilters: "showFilters", showSort: "showSort", paginator: "paginator", showSummaryFooter: "showSummaryFooter", globalFilterFields: "globalFilterFields" }, outputs: { rowClick: "rowClick", rowDoubleClick: "rowDoubleClick", selectedItemsChange: "selectedItemsChange", buttonColumnClicked: "buttonColumnClicked" }, ngImport: i0, template: "<p-table #dt1 dataKey=\"{{key}}\" [(selectAll)]=\"selectAll\" [selectionMode]=\"selectionMode\" [(selection)]=\"selectedFullItems\"\r\n(onRowUnselect)=\"onSelectedItemsChanged()\" (selectAllChange)=\"onSelectAllChange($event)\" (onRowSelect)=\"onSelectedItemsChanged()\"\r\n [totalRecords]=\"totalCount()\" [reorderableColumns]=\"true\" [columns]=\"columns\" [paginator]=\"paginator\" [rows]=\"10\"\r\n [value]=\"getData()\" [globalFilterFields]=\"globalFilterFields ?? []\" [resizableColumns]=\"true\" [scrollable]=\"true\" appendTo=\"body\" styleClass=\"p-datatable-sm p-datatable-gridlines\"\r\n columnResizeMode=\"expand\" scrollHeight=\"600px\">\r\n <!-- <ng-template *ngIf=\"showHeader\" pTemplate=\"caption\">\r\n {{header | localize}}\r\n </ng-template> -->\r\n <ng-template pTemplate=\"caption\">\r\n <div class=\"flex\">\r\n <div *ngIf=\"showHeader\">\r\n {{header | localize}}\r\n </div>\r\n <span class=\"p-input-icon-left ml-auto\">\r\n <i class=\"pi pi-search\"></i>\r\n <input pInputText style=\"padding-left: 2.5rem!important; \" class=\"p-inputtext p-component p-element p-filled\" type=\"text\" #filterGlobalInput (input)=\"dt1.filterGlobal(filterGlobalInput.value, 'contains')\" placeholder=\"{{'' | localize}}\" />\r\n </span>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <th *ngIf=\"selectionMode == multipleGridSelectionMode\" style=\"width: 4rem\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n <th pFrozenColumn *ngIf=\"showHaveSumary\" scope=\"col\" style=\"width:3rem\"></th>\r\n <th pFrozenColumn [frozen]=\"col.isFrozen\" scope=\"col\" [style.width]=\"col.isButton ? '4rem' : (col.width? col.width.getCSSValue() : '')\" [style]=\"col.style\" pTooltip=\"{{col.toolTipText | localize }}\" tooltipPosition=\"top\"\r\n *ngFor=\"let col of columns\" pReorderableColumn pSortableColumn=\"{{col.field}}\">\r\n <span *ngIf=\"!col.isButton\">\r\n <table class=\"p-0 m-0\">\r\n <tr>\r\n <td class=\"col p-0 m-0\">{{ col.header | localize }}\r\n\r\n </td>\r\n <td class=\"col-fixed p-0 m-0\" style=\"width: 1rem\"><p-sortIcon class=\"w-1rem m-0 p-0\"\r\n field=\"{{col.field}}\"></p-sortIcon>\r\n\r\n </td>\r\n </tr>\r\n </table>\r\n\r\n </span>\r\n </th>\r\n </tr>\r\n <tr *ngIf=\"showFilters; else notShowFilters\">\r\n <th *ngIf=\"selectionMode == multipleGridSelectionMode\" style=\"width: 4rem\">\r\n\r\n </th>\r\n <th pFrozenColumn class=\"stick\" *ngIf=\"showHaveSumary\" style=\"width:3rem\"></th>\r\n <th pFrozenColumn [frozen]=\"col.isFrozen\" scope=\"col\" *ngFor=\"let col of columns\">\r\n <p-columnFilter *ngIf=\"!col.isButton\" type=\"text\" field=\"{{col.field}}\"></p-columnFilter>\r\n </th>\r\n </tr>\r\n\r\n <ng-template #notShowFilters>\r\n <ng-container>\r\n <th pFrozenColumn class=\"stick\" *ngIf=\"showHaveSumary\" style=\"width:3rem\"></th>\r\n </ng-container>\r\n </ng-template>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-item let-columns=\"columns\" let-index=\"rowIndex\">\r\n <tr [pReorderableRow]=\"index\">\r\n <td *ngIf=\"selectionMode == multipleGridSelectionMode\">\r\n <p-tableCheckbox [value]=\"item\"></p-tableCheckbox>\r\n </td>\r\n <td pFrozenColumn *ngIf=\"showHaveSumary\" scope=\"col\" style=\"width:3rem\"></td>\r\n <td pTooltip=\"{{col.toolTipText | localize }}\" tooltipPosition=\"top\" pFrozenColumn [frozen]=\"col.isFrozen\" style=\"width: max-content\" *ngFor=\"let col of columns\">\r\n\r\n <!-- Tsi-Currency-Societe-Input -->\r\n\r\n <div *ngIf=\"col.type == displayTypes.CURRENCY_SOCIETE_DISPLAY; else currencyOtherOutputBlock\">\r\n <Tsi-Currency-Societe-Display [inputData]=\"item[col.field]\">\r\n </Tsi-Currency-Societe-Display>\r\n </div>\r\n\r\n\r\n <!-- Tsi-Currency-Other-Input -->\r\n <ng-template #currencyOtherOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.CURRENCY_OTHER_DISPLAY; else datePickerOutputBlock\">\r\n <Tsi-Currency-Other-Display [currency]=\"col.currencyCode\" [inputData]=\"item[col.field]\">\r\n </Tsi-Currency-Other-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Date-Picker -->\r\n <ng-template #datePickerOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.DATE_DISPLAY; else checkBoxOutputBlock\">\r\n <Tsi-Date-Display [inputData]=\"item[col.field]\">\r\n </Tsi-Date-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-CheckBox -->\r\n <ng-template #checkBoxOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.CHECKBOX_DISPLAY; else decimalOutputBlock\">\r\n <Tsi-Checkbox-Display [inputData]=\"item[col.field]\">\r\n </Tsi-Checkbox-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Decimal-Input -->\r\n <ng-template #decimalOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.DECIMAL_DISPLAY; else integerOutputBlock\">\r\n <Tsi-Decimal-Display [formatDecimal]=\"col.formatDecimal\" [inputData]=\"item[col.field]\" [numOfDecimal]=\"col.numOfDecimal\">\r\n </Tsi-Decimal-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Integer -->\r\n <ng-template #integerOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.INTEGER_DISPLAY; else rateOutputBlock\">\r\n <Tsi-Integer-Display [inputData]=\"item[col.field]\">\r\n </Tsi-Integer-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Rate-Input -->\r\n <ng-template #rateOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.RATE_DISPLAY; else displayButtonBlock\">\r\n <Tsi-Rate-Display [isFraction]=\"col.isFraction\" [inputData]=\"item[col.field]\" [numOfDecimal]=\"col.numOfDecimal\">\r\n </Tsi-Rate-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Button -->\r\n <ng-template #displayButtonBlock>\r\n <ng-container *ngIf=\"col.isButton; else defaultTextOutputBlock\">\r\n\r\n <div class=\"flex align-items-center justify-content-center p-0\">\r\n <button class=\"p-0\" pButton pRipple type=\"button\" icon=\"{{col.buttonIcon}}\" class=\"{{col.styleClass}}\"\r\n (click)=\"buttonClicked(item[key], col.field)\">{{col.buttonLabel | localize}}</button>\r\n </div>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Text-Box -->\r\n <ng-template #defaultTextOutputBlock>\r\n <ng-container>\r\n <span>\r\n {{item[col.field]}}\r\n </span>\r\n </ng-container>\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template *ngIf=\"showHaveSumary\" pTemplate=\"footer\" let-columns>\r\n <tr class=\"tfooter\">\r\n <td pFrozenColumn scope=\"col\" style=\"width:3rem\">Totals</td>\r\n <td pFrozenColumn [frozen]=\"col.isFrozen\" [style]=\"col.style\" scope=\"col\"\r\n *ngFor=\"let col of columns\">\r\n <div *ngIf=\"col.haveSummary\">\r\n <!-- Tsi-Currency-Societe-Display -->\r\n <div *ngIf=\"col.type == displayTypes.CURRENCY_SOCIETE_DISPLAY; else currencyOtherOutputBlock\">\r\n <Tsi-Currency-Societe-Display [inputData]=\"getSummary(col)\">\r\n </Tsi-Currency-Societe-Display>\r\n </div>\r\n\r\n <!-- Tsi-Currency-Other-Display -->\r\n <ng-template #currencyOtherOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.CURRENCY_OTHER_DISPLAY; else decimalOutputBlock\">\r\n <Tsi-Currency-Other-Display [currency]=\"col.currencyCode\" [inputData]=\"getSummary(col)\">\r\n </Tsi-Currency-Other-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Decimal-Display -->\r\n <ng-template #decimalOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.DECIMAL_DISPLAY; else integerOutputBlock\">\r\n <Tsi-Decimal-Display [formatDecimal]=\"col.formatDecimal\" [inputData]=\"getSummary(col)\" [numOfDecimal]=\"col.numOfDecimal\">\r\n </Tsi-Decimal-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Integer-Display -->\r\n <ng-template #integerOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.INTEGER_DISPLAY; else rateOutputBlock\">\r\n <Tsi-Integer-Display [inputData]=\"getSummary(col)\">\r\n </Tsi-Integer-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Rate-Display -->\r\n <ng-template #rateOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.RATE_DISPLAY; else defaultTextOutputBlock\">\r\n <Tsi-Rate-Display [isFraction]=\"col.isFraction\" [inputData]=\"getSummary(col)\" [numOfDecimal]=\"col.numOfDecimal\">\r\n </Tsi-Rate-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Default -->\r\n <ng-template #defaultTextOutputBlock>\r\n <ng-container>\r\n <span>\r\n {{getSummary(col)}}\r\n </span>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template *ngIf=\"showSummaryFooter\" pTemplate=\"summary\">\r\n There are {{totalCount()}}\r\n <span>\r\n </span>\r\n </ng-template>\r\n</p-table>\r\n", styles: [":host ::ng-deep .p-datatable .p-datatable-thead>tr>th{position:-webkit-sticky;position:sticky;top:0rem}.layout-news-active :host ::ng-deep .p-datatable tr>th{top:3rem}.tfooter{position:sticky;bottom:0;width:100%;z-index:10}.p-button.p-button-icon-only.p-button-rounded{height:2rem!important}\n"], dependencies: [{ 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: i2.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: i5.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: i5.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "directive", type: i5.FrozenColumn, selector: "[pFrozenColumn]", inputs: ["frozen", "alignFrozen"] }, { kind: "directive", type: i5.ReorderableColumn, selector: "[pReorderableColumn]", inputs: ["pReorderableColumnDisabled"] }, { kind: "component", type: i5.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i5.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i5.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "directive", type: i5.ReorderableRow, selector: "[pReorderableRow]", inputs: ["pReorderableRow", "pReorderableRowDisabled"] }, { kind: "component", type: i5.ColumnFilter, selector: "p-columnFilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping", "showButtons", "ariaLabel"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i7.TsiCheckboxDisplayComponent, selector: "Tsi-Checkbox-Display", inputs: ["inputData"] }, { kind: "component", type: i8.TsiCurrencyOtherDisplayComponent, selector: "Tsi-Currency-Other-Display", inputs: ["inputData", "currency"] }, { kind: "component", type: i9.TsiCurrencySocieteDisplayComponent, selector: "Tsi-Currency-Societe-Display", inputs: ["inputData"] }, { kind: "component", type: i10.TsiDateDisplayComponent, selector: "Tsi-Date-Display", inputs: ["inputData", "showTime"] }, { kind: "component", type: i11.TsiDecimalDisplayComponent, selector: "Tsi-Decimal-Display", inputs: ["inputData", "formatDecimal", "numOfDecimal"] }, { kind: "component", type: i12.TsiIntegerDisplayComponent, selector: "Tsi-Integer-Display", inputs: ["inputData"] }, { kind: "component", type: i13.TsiRateDisplayComponent, selector: "Tsi-Rate-Display", inputs: ["isFraction", "inputData", "numOfDecimal"] }, { kind: "pipe", type: i14.LocalizePipe, name: "localize" }] }); }
|
|
91
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiDisplayGridComponent, selector: "Tsi-Display-Grid", inputs: { columns: "columns", showHeader: "showHeader", header: "header", key: "key", gridData: "gridData", gridSummaryData: "gridSummaryData", isTableLoading: "isTableLoading", showHaveSumary: "showHaveSumary", selectKeyOnly: "selectKeyOnly", selectionMode: "selectionMode", parent: "parent", selectedItems: "selectedItems", showFilters: "showFilters", showSort: "showSort", paginator: "paginator", showSummaryFooter: "showSummaryFooter", globalFilterFields: "globalFilterFields" }, outputs: { rowClick: "rowClick", rowDoubleClick: "rowDoubleClick", selectedItemsChange: "selectedItemsChange", buttonColumnClicked: "buttonColumnClicked" }, ngImport: i0, template: "<p-table #dt1 dataKey=\"{{key}}\" [(selectAll)]=\"selectAll\" [selectionMode]=\"selectionMode\" [(selection)]=\"selectedFullItems\"\r\n(onRowUnselect)=\"onSelectedItemsChanged()\" (selectAllChange)=\"onSelectAllChange($event)\" (onRowSelect)=\"onSelectedItemsChanged()\"\r\n [totalRecords]=\"totalCount()\" [reorderableColumns]=\"true\" [columns]=\"columns\" [paginator]=\"paginator\" [rows]=\"10\"\r\n [value]=\"getData()\" [globalFilterFields]=\"globalFilterFields ?? []\" [resizableColumns]=\"true\" [scrollable]=\"true\" appendTo=\"body\" styleClass=\"p-datatable-sm p-datatable-gridlines\"\r\n columnResizeMode=\"expand\" scrollHeight=\"600px\">\r\n <!-- <ng-template *ngIf=\"showHeader\" pTemplate=\"caption\">\r\n {{header | localize}}\r\n </ng-template> -->\r\n <ng-template pTemplate=\"caption\">\r\n <div class=\"flex\">\r\n <div *ngIf=\"showHeader\">\r\n {{header | localize}}\r\n </div>\r\n <span class=\"p-input-icon-left ml-auto\">\r\n <i class=\"pi pi-search\"></i>\r\n <input pInputText style=\"padding-left: 2.5rem!important; \" class=\"p-inputtext p-component p-element p-filled\" type=\"text\" #filterGlobalInput (input)=\"dt1.filterGlobal(filterGlobalInput.value, 'contains')\" placeholder=\"{{'' | localize}}\" />\r\n </span>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <th *ngIf=\"selectionMode == multipleGridSelectionMode\" style=\"width: 4rem\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n <th pFrozenColumn *ngIf=\"showHaveSumary\" scope=\"col\" style=\"width:3rem\"></th>\r\n <th pFrozenColumn [frozen]=\"col.isFrozen\" scope=\"col\" [style.width]=\"col.isButton ? '4rem' : (col.width? col.width.getCSSValue() : '')\" [style]=\"col.style\" pTooltip=\"{{col.toolTipText | localize }}\" tooltipPosition=\"top\"\r\n *ngFor=\"let col of columns\" pReorderableColumn pSortableColumn=\"{{col.field}}\">\r\n <span *ngIf=\"!col.isButton\">\r\n <table class=\"p-0 m-0\">\r\n <tr>\r\n <td class=\"col p-0 m-0\">{{ col.header | localize }}\r\n\r\n </td>\r\n <td class=\"col-fixed p-0 m-0\" style=\"width: 1rem\"><p-sortIcon class=\"w-1rem m-0 p-0\"\r\n field=\"{{col.field}}\"></p-sortIcon>\r\n\r\n </td>\r\n </tr>\r\n </table>\r\n\r\n </span>\r\n </th>\r\n </tr>\r\n <tr *ngIf=\"showFilters; else notShowFilters\">\r\n <th *ngIf=\"selectionMode == multipleGridSelectionMode\" style=\"width: 4rem\">\r\n\r\n </th>\r\n <th pFrozenColumn class=\"stick\" *ngIf=\"showHaveSumary\" style=\"width:3rem\"></th>\r\n <th pFrozenColumn [frozen]=\"col.isFrozen\" scope=\"col\" *ngFor=\"let col of columns\">\r\n <p-columnFilter *ngIf=\"!col.isButton\" type=\"text\" field=\"{{col.field}}\"></p-columnFilter>\r\n </th>\r\n </tr>\r\n\r\n <ng-template #notShowFilters>\r\n <ng-container>\r\n <th pFrozenColumn class=\"stick\" *ngIf=\"showHaveSumary\" style=\"width:3rem\"></th>\r\n </ng-container>\r\n </ng-template>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-item let-columns=\"columns\" let-index=\"rowIndex\">\r\n <tr [pReorderableRow]=\"index\">\r\n <td *ngIf=\"selectionMode == multipleGridSelectionMode\">\r\n <p-tableCheckbox [value]=\"item\"></p-tableCheckbox>\r\n </td>\r\n <td pFrozenColumn *ngIf=\"showHaveSumary\" scope=\"col\" style=\"width:3rem\"></td>\r\n <td pTooltip=\"{{col.toolTipText | localize }}\" tooltipPosition=\"top\" pFrozenColumn [frozen]=\"col.isFrozen\" style=\"width: max-content\" *ngFor=\"let col of columns\">\r\n\r\n <!-- Tsi-Currency-Societe-Input -->\r\n\r\n <div *ngIf=\"col.type == displayTypes.CURRENCY_SOCIETE_DISPLAY; else currencyOtherOutputBlock\">\r\n <Tsi-Currency-Societe-Display [inputData]=\"item[col.field]\">\r\n </Tsi-Currency-Societe-Display>\r\n </div>\r\n\r\n\r\n <!-- Tsi-Currency-Other-Input -->\r\n <ng-template #currencyOtherOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.CURRENCY_OTHER_DISPLAY; else datePickerOutputBlock\">\r\n <Tsi-Currency-Other-Display [currency]=\"col.currencyOtherCode\" [inputData]=\"item[col.field]\">\r\n </Tsi-Currency-Other-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Date-Picker -->\r\n <ng-template #datePickerOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.DATE_DISPLAY; else checkBoxOutputBlock\">\r\n <Tsi-Date-Display [inputData]=\"item[col.field]\">\r\n </Tsi-Date-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-CheckBox -->\r\n <ng-template #checkBoxOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.CHECKBOX_DISPLAY; else decimalOutputBlock\">\r\n <Tsi-Checkbox-Display [inputData]=\"item[col.field]\">\r\n </Tsi-Checkbox-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Decimal-Input -->\r\n <ng-template #decimalOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.DECIMAL_DISPLAY; else integerOutputBlock\">\r\n <Tsi-Decimal-Display [formatDecimal]=\"col.formatDecimal\" [inputData]=\"item[col.field]\" [numOfDecimal]=\"col.numOfDecimal\">\r\n </Tsi-Decimal-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Integer -->\r\n <ng-template #integerOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.INTEGER_DISPLAY; else rateOutputBlock\">\r\n <Tsi-Integer-Display [inputData]=\"item[col.field]\">\r\n </Tsi-Integer-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Rate-Input -->\r\n <ng-template #rateOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.RATE_DISPLAY; else displayButtonBlock\">\r\n <Tsi-Rate-Display [isFraction]=\"col.isFraction\" [inputData]=\"item[col.field]\" [numOfDecimal]=\"col.numOfDecimal\">\r\n </Tsi-Rate-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Button -->\r\n <ng-template #displayButtonBlock>\r\n <ng-container *ngIf=\"col.isButton; else defaultTextOutputBlock\">\r\n\r\n <div class=\"flex align-items-center justify-content-center p-0\">\r\n <button class=\"p-0\" pButton pRipple type=\"button\" icon=\"{{col.buttonIcon}}\" class=\"{{col.styleClass}}\"\r\n (click)=\"buttonClicked(item[key], col.field)\">{{col.buttonLabel | localize}}</button>\r\n </div>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Text-Box -->\r\n <ng-template #defaultTextOutputBlock>\r\n <ng-container>\r\n <span>\r\n {{item[col.field]}}\r\n </span>\r\n </ng-container>\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template *ngIf=\"showHaveSumary\" pTemplate=\"footer\" let-columns>\r\n <tr class=\"tfooter\">\r\n <td pFrozenColumn scope=\"col\" style=\"width:3rem\">Totals</td>\r\n <td pFrozenColumn [frozen]=\"col.isFrozen\" [style]=\"col.style\" scope=\"col\"\r\n *ngFor=\"let col of columns\">\r\n <div *ngIf=\"col.haveSummary\">\r\n <!-- Tsi-Currency-Societe-Display -->\r\n <div *ngIf=\"col.type == displayTypes.CURRENCY_SOCIETE_DISPLAY; else currencyOtherOutputBlock\">\r\n <Tsi-Currency-Societe-Display [inputData]=\"getSummary(col)\">\r\n </Tsi-Currency-Societe-Display>\r\n </div>\r\n\r\n <!-- Tsi-Currency-Other-Display -->\r\n <ng-template #currencyOtherOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.CURRENCY_OTHER_DISPLAY; else decimalOutputBlock\">\r\n <Tsi-Currency-Other-Display [currency]=\"col.currencyOtherCode\" [inputData]=\"getSummary(col)\">\r\n </Tsi-Currency-Other-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Decimal-Display -->\r\n <ng-template #decimalOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.DECIMAL_DISPLAY; else integerOutputBlock\">\r\n <Tsi-Decimal-Display [formatDecimal]=\"col.formatDecimal\" [inputData]=\"getSummary(col)\" [numOfDecimal]=\"col.numOfDecimal\">\r\n </Tsi-Decimal-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Integer-Display -->\r\n <ng-template #integerOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.INTEGER_DISPLAY; else rateOutputBlock\">\r\n <Tsi-Integer-Display [inputData]=\"getSummary(col)\">\r\n </Tsi-Integer-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Rate-Display -->\r\n <ng-template #rateOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.RATE_DISPLAY; else defaultTextOutputBlock\">\r\n <Tsi-Rate-Display [isFraction]=\"col.isFraction\" [inputData]=\"getSummary(col)\" [numOfDecimal]=\"col.numOfDecimal\">\r\n </Tsi-Rate-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Default -->\r\n <ng-template #defaultTextOutputBlock>\r\n <ng-container>\r\n <span>\r\n {{getSummary(col)}}\r\n </span>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template *ngIf=\"showSummaryFooter\" pTemplate=\"summary\">\r\n There are {{totalCount()}}\r\n <span>\r\n </span>\r\n </ng-template>\r\n</p-table>\r\n", styles: [":host ::ng-deep .p-datatable .p-datatable-thead>tr>th{position:-webkit-sticky;position:sticky;top:0rem}.layout-news-active :host ::ng-deep .p-datatable tr>th{top:3rem}.tfooter{position:sticky;bottom:0;width:100%;z-index:10}.p-button.p-button-icon-only.p-button-rounded{height:2rem!important}\n"], dependencies: [{ 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: i2.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: i5.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: i5.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "directive", type: i5.FrozenColumn, selector: "[pFrozenColumn]", inputs: ["frozen", "alignFrozen"] }, { kind: "directive", type: i5.ReorderableColumn, selector: "[pReorderableColumn]", inputs: ["pReorderableColumnDisabled"] }, { kind: "component", type: i5.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i5.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i5.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "directive", type: i5.ReorderableRow, selector: "[pReorderableRow]", inputs: ["pReorderableRow", "pReorderableRowDisabled"] }, { kind: "component", type: i5.ColumnFilter, selector: "p-columnFilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping", "showButtons", "ariaLabel"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i7.TsiCheckboxDisplayComponent, selector: "Tsi-Checkbox-Display", inputs: ["inputData"] }, { kind: "component", type: i8.TsiCurrencyOtherDisplayComponent, selector: "Tsi-Currency-Other-Display", inputs: ["currency", "inputData"] }, { kind: "component", type: i9.TsiCurrencySocieteDisplayComponent, selector: "Tsi-Currency-Societe-Display", inputs: ["inputData"] }, { kind: "component", type: i10.TsiDateDisplayComponent, selector: "Tsi-Date-Display", inputs: ["inputData", "showTime"] }, { kind: "component", type: i11.TsiDecimalDisplayComponent, selector: "Tsi-Decimal-Display", inputs: ["inputData", "formatDecimal", "numOfDecimal"] }, { kind: "component", type: i12.TsiIntegerDisplayComponent, selector: "Tsi-Integer-Display", inputs: ["inputData"] }, { kind: "component", type: i13.TsiRateDisplayComponent, selector: "Tsi-Rate-Display", inputs: ["isFraction", "inputData", "numOfDecimal"] }, { kind: "pipe", type: i14.LocalizePipe, name: "localize" }] }); }
|
|
92
92
|
}
|
|
93
93
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiDisplayGridComponent, decorators: [{
|
|
94
94
|
type: Component,
|
|
95
|
-
args: [{ selector: 'Tsi-Display-Grid', template: "<p-table #dt1 dataKey=\"{{key}}\" [(selectAll)]=\"selectAll\" [selectionMode]=\"selectionMode\" [(selection)]=\"selectedFullItems\"\r\n(onRowUnselect)=\"onSelectedItemsChanged()\" (selectAllChange)=\"onSelectAllChange($event)\" (onRowSelect)=\"onSelectedItemsChanged()\"\r\n [totalRecords]=\"totalCount()\" [reorderableColumns]=\"true\" [columns]=\"columns\" [paginator]=\"paginator\" [rows]=\"10\"\r\n [value]=\"getData()\" [globalFilterFields]=\"globalFilterFields ?? []\" [resizableColumns]=\"true\" [scrollable]=\"true\" appendTo=\"body\" styleClass=\"p-datatable-sm p-datatable-gridlines\"\r\n columnResizeMode=\"expand\" scrollHeight=\"600px\">\r\n <!-- <ng-template *ngIf=\"showHeader\" pTemplate=\"caption\">\r\n {{header | localize}}\r\n </ng-template> -->\r\n <ng-template pTemplate=\"caption\">\r\n <div class=\"flex\">\r\n <div *ngIf=\"showHeader\">\r\n {{header | localize}}\r\n </div>\r\n <span class=\"p-input-icon-left ml-auto\">\r\n <i class=\"pi pi-search\"></i>\r\n <input pInputText style=\"padding-left: 2.5rem!important; \" class=\"p-inputtext p-component p-element p-filled\" type=\"text\" #filterGlobalInput (input)=\"dt1.filterGlobal(filterGlobalInput.value, 'contains')\" placeholder=\"{{'' | localize}}\" />\r\n </span>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <th *ngIf=\"selectionMode == multipleGridSelectionMode\" style=\"width: 4rem\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n <th pFrozenColumn *ngIf=\"showHaveSumary\" scope=\"col\" style=\"width:3rem\"></th>\r\n <th pFrozenColumn [frozen]=\"col.isFrozen\" scope=\"col\" [style.width]=\"col.isButton ? '4rem' : (col.width? col.width.getCSSValue() : '')\" [style]=\"col.style\" pTooltip=\"{{col.toolTipText | localize }}\" tooltipPosition=\"top\"\r\n *ngFor=\"let col of columns\" pReorderableColumn pSortableColumn=\"{{col.field}}\">\r\n <span *ngIf=\"!col.isButton\">\r\n <table class=\"p-0 m-0\">\r\n <tr>\r\n <td class=\"col p-0 m-0\">{{ col.header | localize }}\r\n\r\n </td>\r\n <td class=\"col-fixed p-0 m-0\" style=\"width: 1rem\"><p-sortIcon class=\"w-1rem m-0 p-0\"\r\n field=\"{{col.field}}\"></p-sortIcon>\r\n\r\n </td>\r\n </tr>\r\n </table>\r\n\r\n </span>\r\n </th>\r\n </tr>\r\n <tr *ngIf=\"showFilters; else notShowFilters\">\r\n <th *ngIf=\"selectionMode == multipleGridSelectionMode\" style=\"width: 4rem\">\r\n\r\n </th>\r\n <th pFrozenColumn class=\"stick\" *ngIf=\"showHaveSumary\" style=\"width:3rem\"></th>\r\n <th pFrozenColumn [frozen]=\"col.isFrozen\" scope=\"col\" *ngFor=\"let col of columns\">\r\n <p-columnFilter *ngIf=\"!col.isButton\" type=\"text\" field=\"{{col.field}}\"></p-columnFilter>\r\n </th>\r\n </tr>\r\n\r\n <ng-template #notShowFilters>\r\n <ng-container>\r\n <th pFrozenColumn class=\"stick\" *ngIf=\"showHaveSumary\" style=\"width:3rem\"></th>\r\n </ng-container>\r\n </ng-template>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-item let-columns=\"columns\" let-index=\"rowIndex\">\r\n <tr [pReorderableRow]=\"index\">\r\n <td *ngIf=\"selectionMode == multipleGridSelectionMode\">\r\n <p-tableCheckbox [value]=\"item\"></p-tableCheckbox>\r\n </td>\r\n <td pFrozenColumn *ngIf=\"showHaveSumary\" scope=\"col\" style=\"width:3rem\"></td>\r\n <td pTooltip=\"{{col.toolTipText | localize }}\" tooltipPosition=\"top\" pFrozenColumn [frozen]=\"col.isFrozen\" style=\"width: max-content\" *ngFor=\"let col of columns\">\r\n\r\n <!-- Tsi-Currency-Societe-Input -->\r\n\r\n <div *ngIf=\"col.type == displayTypes.CURRENCY_SOCIETE_DISPLAY; else currencyOtherOutputBlock\">\r\n <Tsi-Currency-Societe-Display [inputData]=\"item[col.field]\">\r\n </Tsi-Currency-Societe-Display>\r\n </div>\r\n\r\n\r\n <!-- Tsi-Currency-Other-Input -->\r\n <ng-template #currencyOtherOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.CURRENCY_OTHER_DISPLAY; else datePickerOutputBlock\">\r\n <Tsi-Currency-Other-Display [currency]=\"col.currencyCode\" [inputData]=\"item[col.field]\">\r\n </Tsi-Currency-Other-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Date-Picker -->\r\n <ng-template #datePickerOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.DATE_DISPLAY; else checkBoxOutputBlock\">\r\n <Tsi-Date-Display [inputData]=\"item[col.field]\">\r\n </Tsi-Date-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-CheckBox -->\r\n <ng-template #checkBoxOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.CHECKBOX_DISPLAY; else decimalOutputBlock\">\r\n <Tsi-Checkbox-Display [inputData]=\"item[col.field]\">\r\n </Tsi-Checkbox-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Decimal-Input -->\r\n <ng-template #decimalOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.DECIMAL_DISPLAY; else integerOutputBlock\">\r\n <Tsi-Decimal-Display [formatDecimal]=\"col.formatDecimal\" [inputData]=\"item[col.field]\" [numOfDecimal]=\"col.numOfDecimal\">\r\n </Tsi-Decimal-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Integer -->\r\n <ng-template #integerOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.INTEGER_DISPLAY; else rateOutputBlock\">\r\n <Tsi-Integer-Display [inputData]=\"item[col.field]\">\r\n </Tsi-Integer-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Rate-Input -->\r\n <ng-template #rateOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.RATE_DISPLAY; else displayButtonBlock\">\r\n <Tsi-Rate-Display [isFraction]=\"col.isFraction\" [inputData]=\"item[col.field]\" [numOfDecimal]=\"col.numOfDecimal\">\r\n </Tsi-Rate-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Button -->\r\n <ng-template #displayButtonBlock>\r\n <ng-container *ngIf=\"col.isButton; else defaultTextOutputBlock\">\r\n\r\n <div class=\"flex align-items-center justify-content-center p-0\">\r\n <button class=\"p-0\" pButton pRipple type=\"button\" icon=\"{{col.buttonIcon}}\" class=\"{{col.styleClass}}\"\r\n (click)=\"buttonClicked(item[key], col.field)\">{{col.buttonLabel | localize}}</button>\r\n </div>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Text-Box -->\r\n <ng-template #defaultTextOutputBlock>\r\n <ng-container>\r\n <span>\r\n {{item[col.field]}}\r\n </span>\r\n </ng-container>\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template *ngIf=\"showHaveSumary\" pTemplate=\"footer\" let-columns>\r\n <tr class=\"tfooter\">\r\n <td pFrozenColumn scope=\"col\" style=\"width:3rem\">Totals</td>\r\n <td pFrozenColumn [frozen]=\"col.isFrozen\" [style]=\"col.style\" scope=\"col\"\r\n *ngFor=\"let col of columns\">\r\n <div *ngIf=\"col.haveSummary\">\r\n <!-- Tsi-Currency-Societe-Display -->\r\n <div *ngIf=\"col.type == displayTypes.CURRENCY_SOCIETE_DISPLAY; else currencyOtherOutputBlock\">\r\n <Tsi-Currency-Societe-Display [inputData]=\"getSummary(col)\">\r\n </Tsi-Currency-Societe-Display>\r\n </div>\r\n\r\n <!-- Tsi-Currency-Other-Display -->\r\n <ng-template #currencyOtherOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.CURRENCY_OTHER_DISPLAY; else decimalOutputBlock\">\r\n <Tsi-Currency-Other-Display [currency]=\"col.currencyCode\" [inputData]=\"getSummary(col)\">\r\n </Tsi-Currency-Other-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Decimal-Display -->\r\n <ng-template #decimalOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.DECIMAL_DISPLAY; else integerOutputBlock\">\r\n <Tsi-Decimal-Display [formatDecimal]=\"col.formatDecimal\" [inputData]=\"getSummary(col)\" [numOfDecimal]=\"col.numOfDecimal\">\r\n </Tsi-Decimal-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Integer-Display -->\r\n <ng-template #integerOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.INTEGER_DISPLAY; else rateOutputBlock\">\r\n <Tsi-Integer-Display [inputData]=\"getSummary(col)\">\r\n </Tsi-Integer-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Rate-Display -->\r\n <ng-template #rateOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.RATE_DISPLAY; else defaultTextOutputBlock\">\r\n <Tsi-Rate-Display [isFraction]=\"col.isFraction\" [inputData]=\"getSummary(col)\" [numOfDecimal]=\"col.numOfDecimal\">\r\n </Tsi-Rate-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Default -->\r\n <ng-template #defaultTextOutputBlock>\r\n <ng-container>\r\n <span>\r\n {{getSummary(col)}}\r\n </span>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template *ngIf=\"showSummaryFooter\" pTemplate=\"summary\">\r\n There are {{totalCount()}}\r\n <span>\r\n </span>\r\n </ng-template>\r\n</p-table>\r\n", styles: [":host ::ng-deep .p-datatable .p-datatable-thead>tr>th{position:-webkit-sticky;position:sticky;top:0rem}.layout-news-active :host ::ng-deep .p-datatable tr>th{top:3rem}.tfooter{position:sticky;bottom:0;width:100%;z-index:10}.p-button.p-button-icon-only.p-button-rounded{height:2rem!important}\n"] }]
|
|
95
|
+
args: [{ selector: 'Tsi-Display-Grid', template: "<p-table #dt1 dataKey=\"{{key}}\" [(selectAll)]=\"selectAll\" [selectionMode]=\"selectionMode\" [(selection)]=\"selectedFullItems\"\r\n(onRowUnselect)=\"onSelectedItemsChanged()\" (selectAllChange)=\"onSelectAllChange($event)\" (onRowSelect)=\"onSelectedItemsChanged()\"\r\n [totalRecords]=\"totalCount()\" [reorderableColumns]=\"true\" [columns]=\"columns\" [paginator]=\"paginator\" [rows]=\"10\"\r\n [value]=\"getData()\" [globalFilterFields]=\"globalFilterFields ?? []\" [resizableColumns]=\"true\" [scrollable]=\"true\" appendTo=\"body\" styleClass=\"p-datatable-sm p-datatable-gridlines\"\r\n columnResizeMode=\"expand\" scrollHeight=\"600px\">\r\n <!-- <ng-template *ngIf=\"showHeader\" pTemplate=\"caption\">\r\n {{header | localize}}\r\n </ng-template> -->\r\n <ng-template pTemplate=\"caption\">\r\n <div class=\"flex\">\r\n <div *ngIf=\"showHeader\">\r\n {{header | localize}}\r\n </div>\r\n <span class=\"p-input-icon-left ml-auto\">\r\n <i class=\"pi pi-search\"></i>\r\n <input pInputText style=\"padding-left: 2.5rem!important; \" class=\"p-inputtext p-component p-element p-filled\" type=\"text\" #filterGlobalInput (input)=\"dt1.filterGlobal(filterGlobalInput.value, 'contains')\" placeholder=\"{{'' | localize}}\" />\r\n </span>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <th *ngIf=\"selectionMode == multipleGridSelectionMode\" style=\"width: 4rem\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n <th pFrozenColumn *ngIf=\"showHaveSumary\" scope=\"col\" style=\"width:3rem\"></th>\r\n <th pFrozenColumn [frozen]=\"col.isFrozen\" scope=\"col\" [style.width]=\"col.isButton ? '4rem' : (col.width? col.width.getCSSValue() : '')\" [style]=\"col.style\" pTooltip=\"{{col.toolTipText | localize }}\" tooltipPosition=\"top\"\r\n *ngFor=\"let col of columns\" pReorderableColumn pSortableColumn=\"{{col.field}}\">\r\n <span *ngIf=\"!col.isButton\">\r\n <table class=\"p-0 m-0\">\r\n <tr>\r\n <td class=\"col p-0 m-0\">{{ col.header | localize }}\r\n\r\n </td>\r\n <td class=\"col-fixed p-0 m-0\" style=\"width: 1rem\"><p-sortIcon class=\"w-1rem m-0 p-0\"\r\n field=\"{{col.field}}\"></p-sortIcon>\r\n\r\n </td>\r\n </tr>\r\n </table>\r\n\r\n </span>\r\n </th>\r\n </tr>\r\n <tr *ngIf=\"showFilters; else notShowFilters\">\r\n <th *ngIf=\"selectionMode == multipleGridSelectionMode\" style=\"width: 4rem\">\r\n\r\n </th>\r\n <th pFrozenColumn class=\"stick\" *ngIf=\"showHaveSumary\" style=\"width:3rem\"></th>\r\n <th pFrozenColumn [frozen]=\"col.isFrozen\" scope=\"col\" *ngFor=\"let col of columns\">\r\n <p-columnFilter *ngIf=\"!col.isButton\" type=\"text\" field=\"{{col.field}}\"></p-columnFilter>\r\n </th>\r\n </tr>\r\n\r\n <ng-template #notShowFilters>\r\n <ng-container>\r\n <th pFrozenColumn class=\"stick\" *ngIf=\"showHaveSumary\" style=\"width:3rem\"></th>\r\n </ng-container>\r\n </ng-template>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-item let-columns=\"columns\" let-index=\"rowIndex\">\r\n <tr [pReorderableRow]=\"index\">\r\n <td *ngIf=\"selectionMode == multipleGridSelectionMode\">\r\n <p-tableCheckbox [value]=\"item\"></p-tableCheckbox>\r\n </td>\r\n <td pFrozenColumn *ngIf=\"showHaveSumary\" scope=\"col\" style=\"width:3rem\"></td>\r\n <td pTooltip=\"{{col.toolTipText | localize }}\" tooltipPosition=\"top\" pFrozenColumn [frozen]=\"col.isFrozen\" style=\"width: max-content\" *ngFor=\"let col of columns\">\r\n\r\n <!-- Tsi-Currency-Societe-Input -->\r\n\r\n <div *ngIf=\"col.type == displayTypes.CURRENCY_SOCIETE_DISPLAY; else currencyOtherOutputBlock\">\r\n <Tsi-Currency-Societe-Display [inputData]=\"item[col.field]\">\r\n </Tsi-Currency-Societe-Display>\r\n </div>\r\n\r\n\r\n <!-- Tsi-Currency-Other-Input -->\r\n <ng-template #currencyOtherOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.CURRENCY_OTHER_DISPLAY; else datePickerOutputBlock\">\r\n <Tsi-Currency-Other-Display [currency]=\"col.currencyOtherCode\" [inputData]=\"item[col.field]\">\r\n </Tsi-Currency-Other-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Date-Picker -->\r\n <ng-template #datePickerOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.DATE_DISPLAY; else checkBoxOutputBlock\">\r\n <Tsi-Date-Display [inputData]=\"item[col.field]\">\r\n </Tsi-Date-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-CheckBox -->\r\n <ng-template #checkBoxOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.CHECKBOX_DISPLAY; else decimalOutputBlock\">\r\n <Tsi-Checkbox-Display [inputData]=\"item[col.field]\">\r\n </Tsi-Checkbox-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Decimal-Input -->\r\n <ng-template #decimalOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.DECIMAL_DISPLAY; else integerOutputBlock\">\r\n <Tsi-Decimal-Display [formatDecimal]=\"col.formatDecimal\" [inputData]=\"item[col.field]\" [numOfDecimal]=\"col.numOfDecimal\">\r\n </Tsi-Decimal-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Integer -->\r\n <ng-template #integerOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.INTEGER_DISPLAY; else rateOutputBlock\">\r\n <Tsi-Integer-Display [inputData]=\"item[col.field]\">\r\n </Tsi-Integer-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Rate-Input -->\r\n <ng-template #rateOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.RATE_DISPLAY; else displayButtonBlock\">\r\n <Tsi-Rate-Display [isFraction]=\"col.isFraction\" [inputData]=\"item[col.field]\" [numOfDecimal]=\"col.numOfDecimal\">\r\n </Tsi-Rate-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Button -->\r\n <ng-template #displayButtonBlock>\r\n <ng-container *ngIf=\"col.isButton; else defaultTextOutputBlock\">\r\n\r\n <div class=\"flex align-items-center justify-content-center p-0\">\r\n <button class=\"p-0\" pButton pRipple type=\"button\" icon=\"{{col.buttonIcon}}\" class=\"{{col.styleClass}}\"\r\n (click)=\"buttonClicked(item[key], col.field)\">{{col.buttonLabel | localize}}</button>\r\n </div>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Text-Box -->\r\n <ng-template #defaultTextOutputBlock>\r\n <ng-container>\r\n <span>\r\n {{item[col.field]}}\r\n </span>\r\n </ng-container>\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template *ngIf=\"showHaveSumary\" pTemplate=\"footer\" let-columns>\r\n <tr class=\"tfooter\">\r\n <td pFrozenColumn scope=\"col\" style=\"width:3rem\">Totals</td>\r\n <td pFrozenColumn [frozen]=\"col.isFrozen\" [style]=\"col.style\" scope=\"col\"\r\n *ngFor=\"let col of columns\">\r\n <div *ngIf=\"col.haveSummary\">\r\n <!-- Tsi-Currency-Societe-Display -->\r\n <div *ngIf=\"col.type == displayTypes.CURRENCY_SOCIETE_DISPLAY; else currencyOtherOutputBlock\">\r\n <Tsi-Currency-Societe-Display [inputData]=\"getSummary(col)\">\r\n </Tsi-Currency-Societe-Display>\r\n </div>\r\n\r\n <!-- Tsi-Currency-Other-Display -->\r\n <ng-template #currencyOtherOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.CURRENCY_OTHER_DISPLAY; else decimalOutputBlock\">\r\n <Tsi-Currency-Other-Display [currency]=\"col.currencyOtherCode\" [inputData]=\"getSummary(col)\">\r\n </Tsi-Currency-Other-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Decimal-Display -->\r\n <ng-template #decimalOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.DECIMAL_DISPLAY; else integerOutputBlock\">\r\n <Tsi-Decimal-Display [formatDecimal]=\"col.formatDecimal\" [inputData]=\"getSummary(col)\" [numOfDecimal]=\"col.numOfDecimal\">\r\n </Tsi-Decimal-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Integer-Display -->\r\n <ng-template #integerOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.INTEGER_DISPLAY; else rateOutputBlock\">\r\n <Tsi-Integer-Display [inputData]=\"getSummary(col)\">\r\n </Tsi-Integer-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Rate-Display -->\r\n <ng-template #rateOutputBlock>\r\n <ng-container *ngIf=\"col.type == displayTypes.RATE_DISPLAY; else defaultTextOutputBlock\">\r\n <Tsi-Rate-Display [isFraction]=\"col.isFraction\" [inputData]=\"getSummary(col)\" [numOfDecimal]=\"col.numOfDecimal\">\r\n </Tsi-Rate-Display>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Default -->\r\n <ng-template #defaultTextOutputBlock>\r\n <ng-container>\r\n <span>\r\n {{getSummary(col)}}\r\n </span>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template *ngIf=\"showSummaryFooter\" pTemplate=\"summary\">\r\n There are {{totalCount()}}\r\n <span>\r\n </span>\r\n </ng-template>\r\n</p-table>\r\n", styles: [":host ::ng-deep .p-datatable .p-datatable-thead>tr>th{position:-webkit-sticky;position:sticky;top:0rem}.layout-news-active :host ::ng-deep .p-datatable tr>th{top:3rem}.tfooter{position:sticky;bottom:0;width:100%;z-index:10}.p-button.p-button-icon-only.p-button-rounded{height:2rem!important}\n"] }]
|
|
96
96
|
}], propDecorators: { columns: [{
|
|
97
97
|
type: Input
|
|
98
98
|
}], showHeader: [{
|
|
@@ -136,4 +136,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
136
136
|
}], buttonColumnClicked: [{
|
|
137
137
|
type: Output
|
|
138
138
|
}] } });
|
|
139
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWRpc3BsYXktZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvb3V0cHV0LWNvbXBvbmVudHMvdHNpLWRpc3BsYXktZ3JpZC90c2ktZGlzcGxheS1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9vdXRwdXQtY29tcG9uZW50cy90c2ktZGlzcGxheS1ncmlkL3RzaS1kaXNwbGF5LWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRakUsTUFBTSxPQUFPLHVCQUF1QjtJQUxwQztRQVNFLGlCQUFZLEdBQUcsWUFBWSxDQUFDO1FBQzVCLHNCQUFpQixHQUFlLEVBQUUsQ0FBQztRQUNuQyxjQUFTLEdBQVEsS0FBSyxDQUFDO1FBRXZCLDhCQUF5QixHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztRQUV2RCxZQUFZO1FBRVosZ0JBQWdCO1FBRVAsWUFBTyxHQUFzQixFQUFFLENBQUM7UUFDaEMsZUFBVSxHQUFXLElBQUksQ0FBQztRQUMxQixXQUFNLEdBQVEsbUJBQW1CLENBQUM7UUFDbEMsUUFBRyxHQUFXLEtBQUssQ0FBQztRQUNwQixhQUFRLEdBQWdCLEVBQUUsQ0FBQztRQUkzQixtQkFBYyxHQUFhLEtBQUssQ0FBQztRQUNqQyxrQkFBYSxHQUFZLElBQUksQ0FBQztRQUM5QixrQkFBYSxHQUE0QixpQkFBaUIsQ0FBQyxJQUFJLENBQUM7UUFJaEUsa0JBQWEsR0FBZSxFQUFFLENBQUM7UUFDL0IsZ0JBQVcsR0FBWSxJQUFJLENBQUM7UUFDNUIsYUFBUSxHQUFZLElBQUksQ0FBQztRQUN6QixjQUFTLEdBQVksSUFBSSxDQUFDO1FBQzFCLHNCQUFpQixHQUFZLElBQUksQ0FBQztRQUUzQyxZQUFZO1FBRVosaUJBQWlCO1FBQ1AsYUFBUSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pELG1CQUFjLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdkQsd0JBQW1CLEdBQTZCLElBQUksWUFBWSxFQUFjLENBQUM7UUFDL0Usd0JBQW1CLEdBQW9DLElBQUksWUFBWSxFQUFxQixDQUFDO0tBOEN4RztJQTdDQyxZQUFZO0lBQ1osVUFBVTtRQUNSLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUN4RCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQzlCLENBQUM7YUFDSSxDQUFDO1lBQ0osT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU87UUFDTCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsVUFBVSxDQUFDLEdBQWU7UUFDeEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ1osSUFBSSxHQUFHLENBQUMsV0FBVyxJQUFJLElBQUksRUFBRSxDQUFDO1lBRTVCLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2xDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUNELHNCQUFzQjtRQUNwQixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixJQUFJLElBQUksR0FBZSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxDQUFDO2FBQ0ksQ0FBQztZQUNKLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDeEQsQ0FBQztJQUNILENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxLQUFVO1FBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUMvQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzFDLENBQUM7YUFDSSxDQUFDO1lBQ0osSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUM5QixDQUFDO1FBQ0QsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUNELGFBQWEsQ0FBQyxHQUFXLEVBQUUsS0FBYTtRQUN0QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFHLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFDLENBQUMsQ0FBQztJQUMvRixDQUFDOytHQXJGVSx1QkFBdUI7bUdBQXZCLHVCQUF1Qix5ckJDVHBDLHFyV0FnTkE7OzRGRHZNYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0Usa0JBQWtCOzhCQWtCbkIsT0FBTztzQkFBZixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUlJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGlzcGxheVR5cGVzLCBHcmlkU2VsZWN0aW9uTW9kZSB9IGZyb20gJy4uLy4uLy4uL2VudW1zJztcclxuaW1wb3J0IHsgR3JpZENvbHVtbiwgQnV0dG9uQ2xpY2tSZXN1bHQgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnVHNpLURpc3BsYXktR3JpZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RzaS1kaXNwbGF5LWdyaWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RzaS1kaXNwbGF5LWdyaWQuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRzaURpc3BsYXlHcmlkQ29tcG9uZW50IHtcclxuXHJcbiAgLy8jcmVnaW9uIGxvY2FsIHZhcnNcclxuICBmaWVsZHM/OiBzdHJpbmdbXTtcclxuICBkaXNwbGF5VHlwZXMgPSBEaXNwbGF5VHlwZXM7XHJcbiAgc2VsZWN0ZWRGdWxsSXRlbXM6IEFycmF5PGFueT4gPSBbXTtcclxuICBzZWxlY3RBbGw6IGFueSA9IGZhbHNlO1xyXG4gIGtleXdvcmQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBtdWx0aXBsZUdyaWRTZWxlY3Rpb25Nb2RlID0gR3JpZFNlbGVjdGlvbk1vZGUuTXVsdGlwbGU7XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gaW5wdXRzXHJcblxyXG4gIEBJbnB1dCgpIGNvbHVtbnM6IEFycmF5PEdyaWRDb2x1bW4+ID0gW107XHJcbiAgQElucHV0KCkgc2hvd0hlYWRlcjpib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBoZWFkZXI6c3RyaW5nPVwiTGlzdF9kZXNfZWxlbWVudHNcIjtcclxuICBASW5wdXQoKSBrZXk6IHN0cmluZyA9ICd1aWQnO1xyXG4gIEBJbnB1dCgpIGdyaWREYXRhPzogQXJyYXk8YW55PiA9IFtdO1xyXG4gIEBJbnB1dCgpIGdyaWRTdW1tYXJ5RGF0YTogYW55O1xyXG5cclxuICBASW5wdXQoKSBpc1RhYmxlTG9hZGluZz86IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2hvd0hhdmVTdW1hcnk/OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2VsZWN0S2V5T25seTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2VsZWN0aW9uTW9kZTogR3JpZFNlbGVjdGlvbk1vZGUgfCBhbnkgPSBHcmlkU2VsZWN0aW9uTW9kZS5Ob25lO1xyXG5cclxuICBASW5wdXQoKSBwYXJlbnQ6IGFueTtcclxuXHJcbiAgQElucHV0KCkgc2VsZWN0ZWRJdGVtczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIEBJbnB1dCgpIHNob3dGaWx0ZXJzOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93U29ydDogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgcGFnaW5hdG9yOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93U3VtbWFyeUZvb3RlcjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgZ2xvYmFsRmlsdGVyRmllbGRzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIG91dHB1dHNcclxuICBAT3V0cHV0KCkgcm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSByb3dEb3VibGVDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkSXRlbXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxBcnJheTxhbnk+PiA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8YW55Pj4oKTtcclxuICBAT3V0cHV0KCkgYnV0dG9uQ29sdW1uQ2xpY2tlZDogRXZlbnRFbWl0dGVyPEJ1dHRvbkNsaWNrUmVzdWx0PiA9IG5ldyBFdmVudEVtaXR0ZXI8QnV0dG9uQ2xpY2tSZXN1bHQ+KCk7XHJcbiAgLy8jZW5kcmVnaW9uXHJcbiAgdG90YWxDb3VudCgpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMuZ3JpZERhdGEgIT0gbnVsbCAmJiB0aGlzLmdyaWREYXRhICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5ncmlkRGF0YS5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldERhdGEoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLmdyaWREYXRhID8gdGhpcy5ncmlkRGF0YSA6IFtdO1xyXG4gIH1cclxuICBnZXRTdW1tYXJ5KGNvbDogR3JpZENvbHVtbik6IG51bWJlciB7XHJcbiAgICBsZXQgc3VtID0gMDtcclxuICAgIGlmIChjb2wuaGF2ZVN1bW1hcnkgPT0gdHJ1ZSkge1xyXG5cclxuICAgICAgdGhpcy5ncmlkRGF0YT8uZm9yRWFjaCgocm93OiBhbnkpID0+IHtcclxuICAgICAgICBzdW0gKz0gcm93W2NvbC5maWVsZF07XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3VtO1xyXG4gIH1cclxuICBvblNlbGVjdGVkSXRlbXNDaGFuZ2VkKCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0S2V5T25seSkge1xyXG4gICAgICBsZXQga2V5czogQXJyYXk8YW55PiA9IFtdO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRnVsbEl0ZW1zLmZvckVhY2godiA9PiB7IGtleXMucHVzaCh2W3RoaXMua2V5XSkgfSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KGtleXMpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRGdWxsSXRlbXMpO1xyXG4gICAgfVxyXG4gIH1cclxuICBvblNlbGVjdEFsbENoYW5nZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdEFsbCA9IGV2ZW50LmNoZWNrZWQ7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RBbGwpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZ1bGxJdGVtcyA9IHRoaXMuZ2V0RGF0YSgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGdWxsSXRlbXMgPSBbXTtcclxuICAgIH1cclxuICAgIHRoaXMub25TZWxlY3RlZEl0ZW1zQ2hhbmdlZCgpO1xyXG4gIH1cclxuICBidXR0b25DbGlja2VkKGtleTogc3RyaW5nLCBmaWVsZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmJ1dHRvbkNvbHVtbkNsaWNrZWQuZW1pdCh7IGZpZWxkOiBmaWVsZCwga2V5OiBrZXkgLCBzZWxlY3RLZXlPbmx5OiB0aGlzLnNlbGVjdEtleU9ubHl9KTtcclxuICB9XHJcbn1cclxuIiwiPHAtdGFibGUgI2R0MSBkYXRhS2V5PVwie3trZXl9fVwiIFsoc2VsZWN0QWxsKV09XCJzZWxlY3RBbGxcIiBbc2VsZWN0aW9uTW9kZV09XCJzZWxlY3Rpb25Nb2RlXCIgWyhzZWxlY3Rpb24pXT1cInNlbGVjdGVkRnVsbEl0ZW1zXCJcclxuKG9uUm93VW5zZWxlY3QpPVwib25TZWxlY3RlZEl0ZW1zQ2hhbmdlZCgpXCIgKHNlbGVjdEFsbENoYW5nZSk9XCJvblNlbGVjdEFsbENoYW5nZSgkZXZlbnQpXCIgKG9uUm93U2VsZWN0KT1cIm9uU2VsZWN0ZWRJdGVtc0NoYW5nZWQoKVwiXHJcbiBbdG90YWxSZWNvcmRzXT1cInRvdGFsQ291bnQoKVwiIFtyZW9yZGVyYWJsZUNvbHVtbnNdPVwidHJ1ZVwiIFtjb2x1bW5zXT1cImNvbHVtbnNcIiBbcGFnaW5hdG9yXT1cInBhZ2luYXRvclwiIFtyb3dzXT1cIjEwXCJcclxuICAgIFt2YWx1ZV09XCJnZXREYXRhKClcIiBbZ2xvYmFsRmlsdGVyRmllbGRzXT1cImdsb2JhbEZpbHRlckZpZWxkcyA/PyBbXVwiIFtyZXNpemFibGVDb2x1bW5zXT1cInRydWVcIiBbc2Nyb2xsYWJsZV09XCJ0cnVlXCIgYXBwZW5kVG89XCJib2R5XCIgc3R5bGVDbGFzcz1cInAtZGF0YXRhYmxlLXNtIHAtZGF0YXRhYmxlLWdyaWRsaW5lc1wiXHJcbiAgICBjb2x1bW5SZXNpemVNb2RlPVwiZXhwYW5kXCIgc2Nyb2xsSGVpZ2h0PVwiNjAwcHhcIj5cclxuICAgIDwhLS0gPG5nLXRlbXBsYXRlICpuZ0lmPVwic2hvd0hlYWRlclwiIHBUZW1wbGF0ZT1cImNhcHRpb25cIj5cclxuICAgICAgICB7e2hlYWRlciB8IGxvY2FsaXplfX1cclxuICAgIDwvbmctdGVtcGxhdGU+IC0tPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNhcHRpb25cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0hlYWRlclwiPlxyXG4gICAgICAgICAgICB7e2hlYWRlciB8IGxvY2FsaXplfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInAtaW5wdXQtaWNvbi1sZWZ0IG1sLWF1dG9cIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXNlYXJjaFwiPjwvaT5cclxuICAgICAgICAgICAgICA8aW5wdXQgcElucHV0VGV4dCBzdHlsZT1cInBhZGRpbmctbGVmdDogMi41cmVtIWltcG9ydGFudDsgXCIgY2xhc3M9XCJwLWlucHV0dGV4dCBwLWNvbXBvbmVudCBwLWVsZW1lbnQgcC1maWxsZWRcIiB0eXBlPVwidGV4dFwiICNmaWx0ZXJHbG9iYWxJbnB1dCAoaW5wdXQpPVwiZHQxLmZpbHRlckdsb2JhbChmaWx0ZXJHbG9iYWxJbnB1dC52YWx1ZSwgJ2NvbnRhaW5zJylcIiBwbGFjZWhvbGRlcj1cInt7JycgfCBsb2NhbGl6ZX19XCIgLz5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIiBsZXQtY29sdW1ucz5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgIDx0aCAqbmdJZj1cInNlbGVjdGlvbk1vZGUgPT0gbXVsdGlwbGVHcmlkU2VsZWN0aW9uTW9kZVwiIHN0eWxlPVwid2lkdGg6IDRyZW1cIj5cclxuICAgICAgICAgICAgICAgIDxwLXRhYmxlSGVhZGVyQ2hlY2tib3g+PC9wLXRhYmxlSGVhZGVyQ2hlY2tib3g+XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgIDx0aCBwRnJvemVuQ29sdW1uICpuZ0lmPVwic2hvd0hhdmVTdW1hcnlcIiBzY29wZT1cImNvbFwiIHN0eWxlPVwid2lkdGg6M3JlbVwiPjwvdGg+XHJcbiAgICAgICAgICAgIDx0aCBwRnJvemVuQ29sdW1uIFtmcm96ZW5dPVwiY29sLmlzRnJvemVuXCIgc2NvcGU9XCJjb2xcIiBbc3R5bGUud2lkdGhdPVwiY29sLmlzQnV0dG9uID8gJzRyZW0nIDogKGNvbC53aWR0aD8gY29sLndpZHRoLmdldENTU1ZhbHVlKCkgOiAnJylcIiBbc3R5bGVdPVwiY29sLnN0eWxlXCIgcFRvb2x0aXA9XCJ7e2NvbC50b29sVGlwVGV4dCB8IGxvY2FsaXplIH19XCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCIgcFJlb3JkZXJhYmxlQ29sdW1uIHBTb3J0YWJsZUNvbHVtbj1cInt7Y29sLmZpZWxkfX1cIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhY29sLmlzQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwicC0wIG0tMFwiPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjb2wgcC0wIG0tMFwiPnt7IGNvbC5oZWFkZXIgfCBsb2NhbGl6ZSB9fVxyXG5cclxuICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY29sLWZpeGVkIHAtMCBtLTBcIiBzdHlsZT1cIndpZHRoOiAxcmVtXCI+PHAtc29ydEljb24gY2xhc3M9XCJ3LTFyZW0gbS0wIHAtMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBmaWVsZD1cInt7Y29sLmZpZWxkfX1cIj48L3Atc29ydEljb24+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICA8L3RhYmxlPlxyXG5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC90aD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgICAgIDx0ciAgKm5nSWY9XCJzaG93RmlsdGVyczsgZWxzZSBub3RTaG93RmlsdGVyc1wiPlxyXG4gICAgICAgICAgPHRoICpuZ0lmPVwic2VsZWN0aW9uTW9kZSA9PSBtdWx0aXBsZUdyaWRTZWxlY3Rpb25Nb2RlXCIgc3R5bGU9XCJ3aWR0aDogNHJlbVwiPlxyXG5cclxuICAgICAgPC90aD5cclxuICAgICAgICAgICAgPHRoIHBGcm96ZW5Db2x1bW4gY2xhc3M9XCJzdGlja1wiICpuZ0lmPVwic2hvd0hhdmVTdW1hcnlcIiBzdHlsZT1cIndpZHRoOjNyZW1cIj48L3RoPlxyXG4gICAgICAgICAgICA8dGggcEZyb3plbkNvbHVtbiBbZnJvemVuXT1cImNvbC5pc0Zyb3plblwiIHNjb3BlPVwiY29sXCIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyICpuZ0lmPVwiIWNvbC5pc0J1dHRvblwiIHR5cGU9XCJ0ZXh0XCIgZmllbGQ9XCJ7e2NvbC5maWVsZH19XCI+PC9wLWNvbHVtbkZpbHRlcj5cclxuICAgICAgICAgICAgPC90aD5cclxuICAgICAgICA8L3RyPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI25vdFNob3dGaWx0ZXJzPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPHRoIHBGcm96ZW5Db2x1bW4gY2xhc3M9XCJzdGlja1wiICpuZ0lmPVwic2hvd0hhdmVTdW1hcnlcIiBzdHlsZT1cIndpZHRoOjNyZW1cIj48L3RoPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1pdGVtIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiIGxldC1pbmRleD1cInJvd0luZGV4XCI+XHJcbiAgICAgICAgPHRyIFtwUmVvcmRlcmFibGVSb3ddPVwiaW5kZXhcIj5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwic2VsZWN0aW9uTW9kZSA9PSBtdWx0aXBsZUdyaWRTZWxlY3Rpb25Nb2RlXCI+XHJcbiAgICAgICAgICAgICAgICA8cC10YWJsZUNoZWNrYm94IFt2YWx1ZV09XCJpdGVtXCI+PC9wLXRhYmxlQ2hlY2tib3g+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZCBwRnJvemVuQ29sdW1uICpuZ0lmPVwic2hvd0hhdmVTdW1hcnlcIiBzY29wZT1cImNvbFwiIHN0eWxlPVwid2lkdGg6M3JlbVwiPjwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZCBwVG9vbHRpcD1cInt7Y29sLnRvb2xUaXBUZXh0IHwgbG9jYWxpemUgfX1cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiBwRnJvemVuQ29sdW1uIFtmcm96ZW5dPVwiY29sLmlzRnJvemVuXCIgc3R5bGU9XCJ3aWR0aDogbWF4LWNvbnRlbnRcIiAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRzaS1DdXJyZW5jeS1Tb2NpZXRlLUlucHV0IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuQ1VSUkVOQ1lfU09DSUVURV9ESVNQTEFZOyBlbHNlIGN1cnJlbmN5T3RoZXJPdXRwdXRCbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUc2ktQ3VycmVuY3ktU29jaWV0ZS1EaXNwbGF5IFtpbnB1dERhdGFdPVwiaXRlbVtjb2wuZmllbGRdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9Uc2ktQ3VycmVuY3ktU29jaWV0ZS1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gVHNpLUN1cnJlbmN5LU90aGVyLUlucHV0IC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjdXJyZW5jeU90aGVyT3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5DVVJSRU5DWV9PVEhFUl9ESVNQTEFZOyBlbHNlIGRhdGVQaWNrZXJPdXRwdXRCbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VHNpLUN1cnJlbmN5LU90aGVyLURpc3BsYXkgW2N1cnJlbmN5XT1cImNvbC5jdXJyZW5jeUNvZGVcIiBbaW5wdXREYXRhXT1cIml0ZW1bY29sLmZpZWxkXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RzaS1DdXJyZW5jeS1PdGhlci1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRzaS1EYXRlLVBpY2tlciAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGF0ZVBpY2tlck91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuREFURV9ESVNQTEFZOyBlbHNlIGNoZWNrQm94T3V0cHV0QmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFRzaS1EYXRlLURpc3BsYXkgW2lucHV0RGF0YV09XCJpdGVtW2NvbC5maWVsZF1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Uc2ktRGF0ZS1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRzaS1DaGVja0JveCAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2hlY2tCb3hPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLkNIRUNLQk9YX0RJU1BMQVk7IGVsc2UgZGVjaW1hbE91dHB1dEJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUc2ktQ2hlY2tib3gtRGlzcGxheSBbaW5wdXREYXRhXT1cIml0ZW1bY29sLmZpZWxkXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RzaS1DaGVja2JveC1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRzaS1EZWNpbWFsLUlucHV0IC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWNpbWFsT3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5ERUNJTUFMX0RJU1BMQVk7IGVsc2UgaW50ZWdlck91dHB1dEJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUc2ktRGVjaW1hbC1EaXNwbGF5IFtmb3JtYXREZWNpbWFsXT1cImNvbC5mb3JtYXREZWNpbWFsXCIgW2lucHV0RGF0YV09XCJpdGVtW2NvbC5maWVsZF1cIiBbbnVtT2ZEZWNpbWFsXT1cImNvbC5udW1PZkRlY2ltYWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Uc2ktRGVjaW1hbC1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRzaS1JbnRlZ2VyIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpbnRlZ2VyT3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5JTlRFR0VSX0RJU1BMQVk7IGVsc2UgcmF0ZU91dHB1dEJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUc2ktSW50ZWdlci1EaXNwbGF5IFtpbnB1dERhdGFdPVwiaXRlbVtjb2wuZmllbGRdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVHNpLUludGVnZXItRGlzcGxheT5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBUc2ktUmF0ZS1JbnB1dCAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmF0ZU91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuUkFURV9ESVNQTEFZOyBlbHNlIGRpc3BsYXlCdXR0b25CbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VHNpLVJhdGUtRGlzcGxheSBbaXNGcmFjdGlvbl09XCJjb2wuaXNGcmFjdGlvblwiIFtpbnB1dERhdGFdPVwiaXRlbVtjb2wuZmllbGRdXCIgW251bU9mRGVjaW1hbF09XCJjb2wubnVtT2ZEZWNpbWFsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVHNpLVJhdGUtRGlzcGxheT5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBCdXR0b24gLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc3BsYXlCdXR0b25CbG9jaz5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5pc0J1dHRvbjsgZWxzZSBkZWZhdWx0VGV4dE91dHB1dEJsb2NrXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHAtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInAtMFwiIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInt7Y29sLmJ1dHRvbkljb259fVwiIGNsYXNzPVwie3tjb2wuc3R5bGVDbGFzc319XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImJ1dHRvbkNsaWNrZWQoaXRlbVtrZXldLCBjb2wuZmllbGQpXCI+e3tjb2wuYnV0dG9uTGFiZWwgfCBsb2NhbGl6ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRzaS1UZXh0LUJveCAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRleHRPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbVtjb2wuZmllbGRdfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJzaG93SGF2ZVN1bWFyeVwiIHBUZW1wbGF0ZT1cImZvb3RlclwiIGxldC1jb2x1bW5zPlxyXG4gICAgICAgIDx0ciBjbGFzcz1cInRmb290ZXJcIj5cclxuICAgICAgICAgICAgPHRkIHBGcm96ZW5Db2x1bW4gc2NvcGU9XCJjb2xcIiBzdHlsZT1cIndpZHRoOjNyZW1cIj5Ub3RhbHM8L3RkPlxyXG4gICAgICAgICAgICA8dGQgcEZyb3plbkNvbHVtbiBbZnJvemVuXT1cImNvbC5pc0Zyb3plblwiIFtzdHlsZV09XCJjb2wuc3R5bGVcIiBzY29wZT1cImNvbFwiXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2wuaGF2ZVN1bW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIFRzaS1DdXJyZW5jeS1Tb2NpZXRlLURpc3BsYXkgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5DVVJSRU5DWV9TT0NJRVRFX0RJU1BMQVk7IGVsc2UgY3VycmVuY3lPdGhlck91dHB1dEJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUc2ktQ3VycmVuY3ktU29jaWV0ZS1EaXNwbGF5IFtpbnB1dERhdGFdPVwiZ2V0U3VtbWFyeShjb2wpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVHNpLUN1cnJlbmN5LVNvY2lldGUtRGlzcGxheT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBUc2ktQ3VycmVuY3ktT3RoZXItRGlzcGxheSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2N1cnJlbmN5T3RoZXJPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5DVVJSRU5DWV9PVEhFUl9ESVNQTEFZOyBlbHNlIGRlY2ltYWxPdXRwdXRCbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRzaS1DdXJyZW5jeS1PdGhlci1EaXNwbGF5IFtjdXJyZW5jeV09XCJjb2wuY3VycmVuY3lDb2RlXCIgW2lucHV0RGF0YV09XCJnZXRTdW1tYXJ5KGNvbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHNpLUN1cnJlbmN5LU90aGVyLURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gVHNpLURlY2ltYWwtRGlzcGxheSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlY2ltYWxPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5ERUNJTUFMX0RJU1BMQVk7IGVsc2UgaW50ZWdlck91dHB1dEJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHNpLURlY2ltYWwtRGlzcGxheSBbZm9ybWF0RGVjaW1hbF09XCJjb2wuZm9ybWF0RGVjaW1hbFwiIFtpbnB1dERhdGFdPVwiZ2V0U3VtbWFyeShjb2wpXCIgW251bU9mRGVjaW1hbF09XCJjb2wubnVtT2ZEZWNpbWFsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RzaS1EZWNpbWFsLURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gVHNpLUludGVnZXItRGlzcGxheSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2ludGVnZXJPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5JTlRFR0VSX0RJU1BMQVk7IGVsc2UgcmF0ZU91dHB1dEJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHNpLUludGVnZXItRGlzcGxheSBbaW5wdXREYXRhXT1cImdldFN1bW1hcnkoY29sKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Uc2ktSW50ZWdlci1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIFRzaS1SYXRlLURpc3BsYXkgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyYXRlT3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuUkFURV9ESVNQTEFZOyBlbHNlIGRlZmF1bHRUZXh0T3V0cHV0QmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUc2ktUmF0ZS1EaXNwbGF5IFtpc0ZyYWN0aW9uXT1cImNvbC5pc0ZyYWN0aW9uXCIgW2lucHV0RGF0YV09XCJnZXRTdW1tYXJ5KGNvbClcIiBbbnVtT2ZEZWNpbWFsXT1cImNvbC5udW1PZkRlY2ltYWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHNpLVJhdGUtRGlzcGxheT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBEZWZhdWx0IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRleHRPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Z2V0U3VtbWFyeShjb2wpfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwic2hvd1N1bW1hcnlGb290ZXJcIiBwVGVtcGxhdGU9XCJzdW1tYXJ5XCI+XHJcbiAgICAgICAgVGhlcmUgYXJlIHt7dG90YWxDb3VudCgpfX1cclxuICAgICAgICA8c3Bhbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG48L3AtdGFibGU+XHJcbiJdfQ==
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWRpc3BsYXktZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvb3V0cHV0LWNvbXBvbmVudHMvdHNpLWRpc3BsYXktZ3JpZC90c2ktZGlzcGxheS1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9vdXRwdXQtY29tcG9uZW50cy90c2ktZGlzcGxheS1ncmlkL3RzaS1kaXNwbGF5LWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRakUsTUFBTSxPQUFPLHVCQUF1QjtJQUxwQztRQVNFLGlCQUFZLEdBQUcsWUFBWSxDQUFDO1FBQzVCLHNCQUFpQixHQUFlLEVBQUUsQ0FBQztRQUNuQyxjQUFTLEdBQVEsS0FBSyxDQUFDO1FBRXZCLDhCQUF5QixHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztRQUV2RCxZQUFZO1FBRVosZ0JBQWdCO1FBRVAsWUFBTyxHQUFzQixFQUFFLENBQUM7UUFDaEMsZUFBVSxHQUFXLElBQUksQ0FBQztRQUMxQixXQUFNLEdBQVEsbUJBQW1CLENBQUM7UUFDbEMsUUFBRyxHQUFXLEtBQUssQ0FBQztRQUNwQixhQUFRLEdBQWdCLEVBQUUsQ0FBQztRQUkzQixtQkFBYyxHQUFhLEtBQUssQ0FBQztRQUNqQyxrQkFBYSxHQUFZLElBQUksQ0FBQztRQUM5QixrQkFBYSxHQUE0QixpQkFBaUIsQ0FB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QkFBZixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUlJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGlzcGxheVR5cGVzLCBHcmlkU2VsZWN0aW9uTW9kZSB9IGZyb20gJy4uLy4uLy4uL2VudW1zJztcclxuaW1wb3J0IHsgR3JpZENvbHVtbiwgQnV0dG9uQ2xpY2tSZXN1bHQgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnVHNpLURpc3BsYXktR3JpZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RzaS1kaXNwbGF5LWdyaWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RzaS1kaXNwbGF5LWdyaWQuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRzaURpc3BsYXlHcmlkQ29tcG9uZW50IHtcclxuXHJcbiAgLy8jcmVnaW9uIGxvY2FsIHZhcnNcclxuICBmaWVsZHM/OiBzdHJpbmdbXTtcclxuICBkaXNwbGF5VHlwZXMgPSBEaXNwbGF5VHlwZXM7XHJcbiAgc2VsZWN0ZWRGdWxsSXRlbXM6IEFycmF5PGFueT4gPSBbXTtcclxuICBzZWxlY3RBbGw6IGFueSA9IGZhbHNlO1xyXG4gIGtleXdvcmQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBtdWx0aXBsZUdyaWRTZWxlY3Rpb25Nb2RlID0gR3JpZFNlbGVjdGlvbk1vZGUuTXVsdGlwbGU7XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gaW5wdXRzXHJcblxyXG4gIEBJbnB1dCgpIGNvbHVtbnM6IEFycmF5PEdyaWRDb2x1bW4+ID0gW107XHJcbiAgQElucHV0KCkgc2hvd0hlYWRlcjpib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBoZWFkZXI6c3RyaW5nPVwiTGlzdF9kZXNfZWxlbWVudHNcIjtcclxuICBASW5wdXQoKSBrZXk6IHN0cmluZyA9ICd1aWQnO1xyXG4gIEBJbnB1dCgpIGdyaWREYXRhPzogQXJyYXk8YW55PiA9IFtdO1xyXG4gIEBJbnB1dCgpIGdyaWRTdW1tYXJ5RGF0YTogYW55O1xyXG5cclxuICBASW5wdXQoKSBpc1RhYmxlTG9hZGluZz86IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2hvd0hhdmVTdW1hcnk/OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2VsZWN0S2V5T25seTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2VsZWN0aW9uTW9kZTogR3JpZFNlbGVjdGlvbk1vZGUgfCBhbnkgPSBHcmlkU2VsZWN0aW9uTW9kZS5Ob25lO1xyXG5cclxuICBASW5wdXQoKSBwYXJlbnQ6IGFueTtcclxuXHJcbiAgQElucHV0KCkgc2VsZWN0ZWRJdGVtczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIEBJbnB1dCgpIHNob3dGaWx0ZXJzOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93U29ydDogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgcGFnaW5hdG9yOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93U3VtbWFyeUZvb3RlcjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgZ2xvYmFsRmlsdGVyRmllbGRzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIG91dHB1dHNcclxuICBAT3V0cHV0KCkgcm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSByb3dEb3VibGVDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkSXRlbXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxBcnJheTxhbnk+PiA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8YW55Pj4oKTtcclxuICBAT3V0cHV0KCkgYnV0dG9uQ29sdW1uQ2xpY2tlZDogRXZlbnRFbWl0dGVyPEJ1dHRvbkNsaWNrUmVzdWx0PiA9IG5ldyBFdmVudEVtaXR0ZXI8QnV0dG9uQ2xpY2tSZXN1bHQ+KCk7XHJcbiAgLy8jZW5kcmVnaW9uXHJcbiAgdG90YWxDb3VudCgpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMuZ3JpZERhdGEgIT0gbnVsbCAmJiB0aGlzLmdyaWREYXRhICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5ncmlkRGF0YS5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldERhdGEoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLmdyaWREYXRhID8gdGhpcy5ncmlkRGF0YSA6IFtdO1xyXG4gIH1cclxuICBnZXRTdW1tYXJ5KGNvbDogR3JpZENvbHVtbik6IG51bWJlciB7XHJcbiAgICBsZXQgc3VtID0gMDtcclxuICAgIGlmIChjb2wuaGF2ZVN1bW1hcnkgPT0gdHJ1ZSkge1xyXG5cclxuICAgICAgdGhpcy5ncmlkRGF0YT8uZm9yRWFjaCgocm93OiBhbnkpID0+IHtcclxuICAgICAgICBzdW0gKz0gcm93W2NvbC5maWVsZF07XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3VtO1xyXG4gIH1cclxuICBvblNlbGVjdGVkSXRlbXNDaGFuZ2VkKCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0S2V5T25seSkge1xyXG4gICAgICBsZXQga2V5czogQXJyYXk8YW55PiA9IFtdO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRnVsbEl0ZW1zLmZvckVhY2godiA9PiB7IGtleXMucHVzaCh2W3RoaXMua2V5XSkgfSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KGtleXMpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRGdWxsSXRlbXMpO1xyXG4gICAgfVxyXG4gIH1cclxuICBvblNlbGVjdEFsbENoYW5nZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdEFsbCA9IGV2ZW50LmNoZWNrZWQ7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RBbGwpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZ1bGxJdGVtcyA9IHRoaXMuZ2V0RGF0YSgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGdWxsSXRlbXMgPSBbXTtcclxuICAgIH1cclxuICAgIHRoaXMub25TZWxlY3RlZEl0ZW1zQ2hhbmdlZCgpO1xyXG4gIH1cclxuICBidXR0b25DbGlja2VkKGtleTogc3RyaW5nLCBmaWVsZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmJ1dHRvbkNvbHVtbkNsaWNrZWQuZW1pdCh7IGZpZWxkOiBmaWVsZCwga2V5OiBrZXkgLCBzZWxlY3RLZXlPbmx5OiB0aGlzLnNlbGVjdEtleU9ubHl9KTtcclxuICB9XHJcbn1cclxuIiwiPHAtdGFibGUgI2R0MSBkYXRhS2V5PVwie3trZXl9fVwiIFsoc2VsZWN0QWxsKV09XCJzZWxlY3RBbGxcIiBbc2VsZWN0aW9uTW9kZV09XCJzZWxlY3Rpb25Nb2RlXCIgWyhzZWxlY3Rpb24pXT1cInNlbGVjdGVkRnVsbEl0ZW1zXCJcclxuKG9uUm93VW5zZWxlY3QpPVwib25TZWxlY3RlZEl0ZW1zQ2hhbmdlZCgpXCIgKHNlbGVjdEFsbENoYW5nZSk9XCJvblNlbGVjdEFsbENoYW5nZSgkZXZlbnQpXCIgKG9uUm93U2VsZWN0KT1cIm9uU2VsZWN0ZWRJdGVtc0NoYW5nZWQoKVwiXHJcbiBbdG90YWxSZWNvcmRzXT1cInRvdGFsQ291bnQoKVwiIFtyZW9yZGVyYWJsZUNvbHVtbnNdPVwidHJ1ZVwiIFtjb2x1bW5zXT1cImNvbHVtbnNcIiBbcGFnaW5hdG9yXT1cInBhZ2luYXRvclwiIFtyb3dzXT1cIjEwXCJcclxuICAgIFt2YWx1ZV09XCJnZXREYXRhKClcIiBbZ2xvYmFsRmlsdGVyRmllbGRzXT1cImdsb2JhbEZpbHRlckZpZWxkcyA/PyBbXVwiIFtyZXNpemFibGVDb2x1bW5zXT1cInRydWVcIiBbc2Nyb2xsYWJsZV09XCJ0cnVlXCIgYXBwZW5kVG89XCJib2R5XCIgc3R5bGVDbGFzcz1cInAtZGF0YXRhYmxlLXNtIHAtZGF0YXRhYmxlLWdyaWRsaW5lc1wiXHJcbiAgICBjb2x1bW5SZXNpemVNb2RlPVwiZXhwYW5kXCIgc2Nyb2xsSGVpZ2h0PVwiNjAwcHhcIj5cclxuICAgIDwhLS0gPG5nLXRlbXBsYXRlICpuZ0lmPVwic2hvd0hlYWRlclwiIHBUZW1wbGF0ZT1cImNhcHRpb25cIj5cclxuICAgICAgICB7e2hlYWRlciB8IGxvY2FsaXplfX1cclxuICAgIDwvbmctdGVtcGxhdGU+IC0tPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNhcHRpb25cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0hlYWRlclwiPlxyXG4gICAgICAgICAgICB7e2hlYWRlciB8IGxvY2FsaXplfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInAtaW5wdXQtaWNvbi1sZWZ0IG1sLWF1dG9cIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXNlYXJjaFwiPjwvaT5cclxuICAgICAgICAgICAgICA8aW5wdXQgcElucHV0VGV4dCBzdHlsZT1cInBhZGRpbmctbGVmdDogMi41cmVtIWltcG9ydGFudDsgXCIgY2xhc3M9XCJwLWlucHV0dGV4dCBwLWNvbXBvbmVudCBwLWVsZW1lbnQgcC1maWxsZWRcIiB0eXBlPVwidGV4dFwiICNmaWx0ZXJHbG9iYWxJbnB1dCAoaW5wdXQpPVwiZHQxLmZpbHRlckdsb2JhbChmaWx0ZXJHbG9iYWxJbnB1dC52YWx1ZSwgJ2NvbnRhaW5zJylcIiBwbGFjZWhvbGRlcj1cInt7JycgfCBsb2NhbGl6ZX19XCIgLz5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIiBsZXQtY29sdW1ucz5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgIDx0aCAqbmdJZj1cInNlbGVjdGlvbk1vZGUgPT0gbXVsdGlwbGVHcmlkU2VsZWN0aW9uTW9kZVwiIHN0eWxlPVwid2lkdGg6IDRyZW1cIj5cclxuICAgICAgICAgICAgICAgIDxwLXRhYmxlSGVhZGVyQ2hlY2tib3g+PC9wLXRhYmxlSGVhZGVyQ2hlY2tib3g+XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgIDx0aCBwRnJvemVuQ29sdW1uICpuZ0lmPVwic2hvd0hhdmVTdW1hcnlcIiBzY29wZT1cImNvbFwiIHN0eWxlPVwid2lkdGg6M3JlbVwiPjwvdGg+XHJcbiAgICAgICAgICAgIDx0aCBwRnJvemVuQ29sdW1uIFtmcm96ZW5dPVwiY29sLmlzRnJvemVuXCIgc2NvcGU9XCJjb2xcIiBbc3R5bGUud2lkdGhdPVwiY29sLmlzQnV0dG9uID8gJzRyZW0nIDogKGNvbC53aWR0aD8gY29sLndpZHRoLmdldENTU1ZhbHVlKCkgOiAnJylcIiBbc3R5bGVdPVwiY29sLnN0eWxlXCIgcFRvb2x0aXA9XCJ7e2NvbC50b29sVGlwVGV4dCB8IGxvY2FsaXplIH19XCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCIgcFJlb3JkZXJhYmxlQ29sdW1uIHBTb3J0YWJsZUNvbHVtbj1cInt7Y29sLmZpZWxkfX1cIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhY29sLmlzQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwicC0wIG0tMFwiPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjb2wgcC0wIG0tMFwiPnt7IGNvbC5oZWFkZXIgfCBsb2NhbGl6ZSB9fVxyXG5cclxuICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY29sLWZpeGVkIHAtMCBtLTBcIiBzdHlsZT1cIndpZHRoOiAxcmVtXCI+PHAtc29ydEljb24gY2xhc3M9XCJ3LTFyZW0gbS0wIHAtMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBmaWVsZD1cInt7Y29sLmZpZWxkfX1cIj48L3Atc29ydEljb24+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICA8L3RhYmxlPlxyXG5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC90aD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgICAgIDx0ciAgKm5nSWY9XCJzaG93RmlsdGVyczsgZWxzZSBub3RTaG93RmlsdGVyc1wiPlxyXG4gICAgICAgICAgPHRoICpuZ0lmPVwic2VsZWN0aW9uTW9kZSA9PSBtdWx0aXBsZUdyaWRTZWxlY3Rpb25Nb2RlXCIgc3R5bGU9XCJ3aWR0aDogNHJlbVwiPlxyXG5cclxuICAgICAgPC90aD5cclxuICAgICAgICAgICAgPHRoIHBGcm96ZW5Db2x1bW4gY2xhc3M9XCJzdGlja1wiICpuZ0lmPVwic2hvd0hhdmVTdW1hcnlcIiBzdHlsZT1cIndpZHRoOjNyZW1cIj48L3RoPlxyXG4gICAgICAgICAgICA8dGggcEZyb3plbkNvbHVtbiBbZnJvemVuXT1cImNvbC5pc0Zyb3plblwiIHNjb3BlPVwiY29sXCIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyICpuZ0lmPVwiIWNvbC5pc0J1dHRvblwiIHR5cGU9XCJ0ZXh0XCIgZmllbGQ9XCJ7e2NvbC5maWVsZH19XCI+PC9wLWNvbHVtbkZpbHRlcj5cclxuICAgICAgICAgICAgPC90aD5cclxuICAgICAgICA8L3RyPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI25vdFNob3dGaWx0ZXJzPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPHRoIHBGcm96ZW5Db2x1bW4gY2xhc3M9XCJzdGlja1wiICpuZ0lmPVwic2hvd0hhdmVTdW1hcnlcIiBzdHlsZT1cIndpZHRoOjNyZW1cIj48L3RoPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1pdGVtIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiIGxldC1pbmRleD1cInJvd0luZGV4XCI+XHJcbiAgICAgICAgPHRyIFtwUmVvcmRlcmFibGVSb3ddPVwiaW5kZXhcIj5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwic2VsZWN0aW9uTW9kZSA9PSBtdWx0aXBsZUdyaWRTZWxlY3Rpb25Nb2RlXCI+XHJcbiAgICAgICAgICAgICAgICA8cC10YWJsZUNoZWNrYm94IFt2YWx1ZV09XCJpdGVtXCI+PC9wLXRhYmxlQ2hlY2tib3g+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZCBwRnJvemVuQ29sdW1uICpuZ0lmPVwic2hvd0hhdmVTdW1hcnlcIiBzY29wZT1cImNvbFwiIHN0eWxlPVwid2lkdGg6M3JlbVwiPjwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZCBwVG9vbHRpcD1cInt7Y29sLnRvb2xUaXBUZXh0IHwgbG9jYWxpemUgfX1cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiBwRnJvemVuQ29sdW1uIFtmcm96ZW5dPVwiY29sLmlzRnJvemVuXCIgc3R5bGU9XCJ3aWR0aDogbWF4LWNvbnRlbnRcIiAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRzaS1DdXJyZW5jeS1Tb2NpZXRlLUlucHV0IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuQ1VSUkVOQ1lfU09DSUVURV9ESVNQTEFZOyBlbHNlIGN1cnJlbmN5T3RoZXJPdXRwdXRCbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUc2ktQ3VycmVuY3ktU29jaWV0ZS1EaXNwbGF5IFtpbnB1dERhdGFdPVwiaXRlbVtjb2wuZmllbGRdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9Uc2ktQ3VycmVuY3ktU29jaWV0ZS1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gVHNpLUN1cnJlbmN5LU90aGVyLUlucHV0IC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjdXJyZW5jeU90aGVyT3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5DVVJSRU5DWV9PVEhFUl9ESVNQTEFZOyBlbHNlIGRhdGVQaWNrZXJPdXRwdXRCbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VHNpLUN1cnJlbmN5LU90aGVyLURpc3BsYXkgW2N1cnJlbmN5XT1cImNvbC5jdXJyZW5jeU90aGVyQ29kZVwiIFtpbnB1dERhdGFdPVwiaXRlbVtjb2wuZmllbGRdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVHNpLUN1cnJlbmN5LU90aGVyLURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gVHNpLURhdGUtUGlja2VyIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkYXRlUGlja2VyT3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5EQVRFX0RJU1BMQVk7IGVsc2UgY2hlY2tCb3hPdXRwdXRCbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VHNpLURhdGUtRGlzcGxheSBbaW5wdXREYXRhXT1cIml0ZW1bY29sLmZpZWxkXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RzaS1EYXRlLURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gVHNpLUNoZWNrQm94IC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjaGVja0JveE91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuQ0hFQ0tCT1hfRElTUExBWTsgZWxzZSBkZWNpbWFsT3V0cHV0QmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFRzaS1DaGVja2JveC1EaXNwbGF5IFtpbnB1dERhdGFdPVwiaXRlbVtjb2wuZmllbGRdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVHNpLUNoZWNrYm94LURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gVHNpLURlY2ltYWwtSW5wdXQgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlY2ltYWxPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLkRFQ0lNQUxfRElTUExBWTsgZWxzZSBpbnRlZ2VyT3V0cHV0QmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFRzaS1EZWNpbWFsLURpc3BsYXkgW2Zvcm1hdERlY2ltYWxdPVwiY29sLmZvcm1hdERlY2ltYWxcIiBbaW5wdXREYXRhXT1cIml0ZW1bY29sLmZpZWxkXVwiIFtudW1PZkRlY2ltYWxdPVwiY29sLm51bU9mRGVjaW1hbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RzaS1EZWNpbWFsLURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gVHNpLUludGVnZXIgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2ludGVnZXJPdXRwdXRCbG9jaz5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLklOVEVHRVJfRElTUExBWTsgZWxzZSByYXRlT3V0cHV0QmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFRzaS1JbnRlZ2VyLURpc3BsYXkgW2lucHV0RGF0YV09XCJpdGVtW2NvbC5maWVsZF1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Uc2ktSW50ZWdlci1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRzaS1SYXRlLUlucHV0IC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyYXRlT3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC50eXBlID09IGRpc3BsYXlUeXBlcy5SQVRFX0RJU1BMQVk7IGVsc2UgZGlzcGxheUJ1dHRvbkJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUc2ktUmF0ZS1EaXNwbGF5IFtpc0ZyYWN0aW9uXT1cImNvbC5pc0ZyYWN0aW9uXCIgW2lucHV0RGF0YV09XCJpdGVtW2NvbC5maWVsZF1cIiBbbnVtT2ZEZWNpbWFsXT1cImNvbC5udW1PZkRlY2ltYWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Uc2ktUmF0ZS1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIEJ1dHRvbiAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheUJ1dHRvbkJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmlzQnV0dG9uOyBlbHNlIGRlZmF1bHRUZXh0T3V0cHV0QmxvY2tcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgcC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicC0wXCIgcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBpY29uPVwie3tjb2wuYnV0dG9uSWNvbn19XCIgY2xhc3M9XCJ7e2NvbC5zdHlsZUNsYXNzfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYnV0dG9uQ2xpY2tlZChpdGVtW2tleV0sIGNvbC5maWVsZClcIj57e2NvbC5idXR0b25MYWJlbCB8IGxvY2FsaXplfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gVHNpLVRleHQtQm94IC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0VGV4dE91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtW2NvbC5maWVsZF19fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cInNob3dIYXZlU3VtYXJ5XCIgcFRlbXBsYXRlPVwiZm9vdGVyXCIgbGV0LWNvbHVtbnM+XHJcbiAgICAgICAgPHRyIGNsYXNzPVwidGZvb3RlclwiPlxyXG4gICAgICAgICAgICA8dGQgcEZyb3plbkNvbHVtbiBzY29wZT1cImNvbFwiIHN0eWxlPVwid2lkdGg6M3JlbVwiPlRvdGFsczwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZCBwRnJvemVuQ29sdW1uIFtmcm96ZW5dPVwiY29sLmlzRnJvemVuXCIgW3N0eWxlXT1cImNvbC5zdHlsZVwiIHNjb3BlPVwiY29sXCJcclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC5oYXZlU3VtbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gVHNpLUN1cnJlbmN5LVNvY2lldGUtRGlzcGxheSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLkNVUlJFTkNZX1NPQ0lFVEVfRElTUExBWTsgZWxzZSBjdXJyZW5jeU90aGVyT3V0cHV0QmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFRzaS1DdXJyZW5jeS1Tb2NpZXRlLURpc3BsYXkgW2lucHV0RGF0YV09XCJnZXRTdW1tYXJ5KGNvbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Uc2ktQ3VycmVuY3ktU29jaWV0ZS1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIFRzaS1DdXJyZW5jeS1PdGhlci1EaXNwbGF5IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY3VycmVuY3lPdGhlck91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLkNVUlJFTkNZX09USEVSX0RJU1BMQVk7IGVsc2UgZGVjaW1hbE91dHB1dEJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHNpLUN1cnJlbmN5LU90aGVyLURpc3BsYXkgW2N1cnJlbmN5XT1cImNvbC5jdXJyZW5jeU90aGVyQ29kZVwiIFtpbnB1dERhdGFdPVwiZ2V0U3VtbWFyeShjb2wpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RzaS1DdXJyZW5jeS1PdGhlci1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIFRzaS1EZWNpbWFsLURpc3BsYXkgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWNpbWFsT3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuREVDSU1BTF9ESVNQTEFZOyBlbHNlIGludGVnZXJPdXRwdXRCbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRzaS1EZWNpbWFsLURpc3BsYXkgW2Zvcm1hdERlY2ltYWxdPVwiY29sLmZvcm1hdERlY2ltYWxcIiBbaW5wdXREYXRhXT1cImdldFN1bW1hcnkoY29sKVwiIFtudW1PZkRlY2ltYWxdPVwiY29sLm51bU9mRGVjaW1hbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Uc2ktRGVjaW1hbC1EaXNwbGF5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIFRzaS1JbnRlZ2VyLURpc3BsYXkgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpbnRlZ2VyT3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wudHlwZSA9PSBkaXNwbGF5VHlwZXMuSU5URUdFUl9ESVNQTEFZOyBlbHNlIHJhdGVPdXRwdXRCbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRzaS1JbnRlZ2VyLURpc3BsYXkgW2lucHV0RGF0YV09XCJnZXRTdW1tYXJ5KGNvbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHNpLUludGVnZXItRGlzcGxheT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBUc2ktUmF0ZS1EaXNwbGF5IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmF0ZU91dHB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLnR5cGUgPT0gZGlzcGxheVR5cGVzLlJBVEVfRElTUExBWTsgZWxzZSBkZWZhdWx0VGV4dE91dHB1dEJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHNpLVJhdGUtRGlzcGxheSBbaXNGcmFjdGlvbl09XCJjb2wuaXNGcmFjdGlvblwiIFtpbnB1dERhdGFdPVwiZ2V0U3VtbWFyeShjb2wpXCIgW251bU9mRGVjaW1hbF09XCJjb2wubnVtT2ZEZWNpbWFsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RzaS1SYXRlLURpc3BsYXk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gRGVmYXVsdCAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRUZXh0T3V0cHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2dldFN1bW1hcnkoY29sKX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cInNob3dTdW1tYXJ5Rm9vdGVyXCIgcFRlbXBsYXRlPVwic3VtbWFyeVwiPlxyXG4gICAgICAgIFRoZXJlIGFyZSB7e3RvdGFsQ291bnQoKX19XHJcbiAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuPC9wLXRhYmxlPlxyXG4iXX0=
|