keevo-components 1.8.321 → 1.8.323
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/README.md +24 -24
- package/esm2022/lib/api/base-components/base-component-button.mjs +1 -1
- package/esm2022/lib/api/base-components/base-component-chart.mjs +1 -1
- package/esm2022/lib/api/base-components/base-component-crud-form.mjs +1 -1
- package/esm2022/lib/api/base-components/base-component-crud-list.mjs +1 -1
- package/esm2022/lib/api/base-components/base-component-crud.mjs +1 -1
- package/esm2022/lib/api/base-components/base-component-dropdown-external.mjs +1 -1
- package/esm2022/lib/api/base-components/base-component-dropdown.mjs +1 -1
- package/esm2022/lib/api/base-components/base-component-input.mjs +1 -1
- package/esm2022/lib/api/base-components/base-component-multi-select.mjs +1 -1
- package/esm2022/lib/api/base-components/base-component-table.mjs +1 -1
- package/esm2022/lib/api/base-components/base-component.mjs +1 -1
- package/esm2022/lib/api/components/chart/chart.config.mjs +1 -1
- package/esm2022/lib/api/components/chart/chart.model.mjs +1 -1
- package/esm2022/lib/api/components/chart/orchart.config.mjs +1 -1
- package/esm2022/lib/api/components/chart/orchart.item.mjs +1 -1
- package/esm2022/lib/api/components/dropdown/filtro.combo.mjs +1 -1
- package/esm2022/lib/api/components/stepper/kv-stepperpanel.mjs +1 -1
- package/esm2022/lib/api/components/table/action-item.mjs +1 -1
- package/esm2022/lib/api/components/table/kv-menuitem.mjs +1 -1
- package/esm2022/lib/api/components/table/table-dropdown-control.mjs +1 -1
- package/esm2022/lib/api/components/table/table.config.column.mjs +1 -1
- package/esm2022/lib/api/components/table/table.config.mjs +1 -1
- package/esm2022/lib/api/components/table/table.paginate.mjs +1 -1
- package/esm2022/lib/api/components/table/tabledit.config.mjs +1 -1
- package/esm2022/lib/api/components/table/tableedit.config.column.mjs +1 -1
- package/esm2022/lib/api/components/tree-table/tree-table.config.mjs +1 -1
- package/esm2022/lib/api/directives/directives.module.mjs +1 -1
- package/esm2022/lib/api/directives/drag/drag.directive.mjs +1 -1
- package/esm2022/lib/api/directives/stepper/dynamicinput.directive.mjs +1 -1
- package/esm2022/lib/api/directives/template/template.directive.mjs +1 -1
- package/esm2022/lib/api/helpers/component-providers.mjs +1 -1
- package/esm2022/lib/api/helpers/keevo-validators.mjs +1 -1
- package/esm2022/lib/api/helpers/translate-primeng.mjs +1 -1
- package/esm2022/lib/api/modules/primeng.module.mjs +1 -1
- package/esm2022/lib/api/pipes/capitalize.pipe.mjs +1 -1
- package/esm2022/lib/api/pipes/cpfcnpj.pipe.mjs +1 -1
- package/esm2022/lib/api/pipes/mask.pipe.mjs +1 -1
- package/esm2022/lib/api/pipes/pipes.module.mjs +1 -1
- package/esm2022/lib/api/pipes/telefone.pipe.mjs +1 -1
- package/esm2022/lib/api/services/base.api.service.mjs +1 -1
- package/esm2022/lib/api/services/breadcrumbs.service.mjs +1 -1
- package/esm2022/lib/api/services/component.service.mjs +1 -1
- package/esm2022/lib/api/services/docs.service.mjs +1 -1
- package/esm2022/lib/api/services/form.service.mjs +1 -1
- package/esm2022/lib/api/services/imagens.service.mjs +1 -1
- package/esm2022/lib/api/services/notification.service.mjs +1 -1
- package/esm2022/lib/api/services/object.service.mjs +1 -1
- package/esm2022/lib/api/types/breadcrumb.model.mjs +1 -1
- package/esm2022/lib/api/types/severity.mjs +1 -1
- package/esm2022/lib/components/keevo-components.module.mjs +1 -1
- package/esm2022/lib/components/kv-avatar/kv-avatar.component.mjs +3 -3
- package/esm2022/lib/components/kv-avatar/kv-avatar.module.mjs +1 -1
- package/esm2022/lib/components/kv-button/kv-button.component.mjs +3 -3
- package/esm2022/lib/components/kv-button/kv-button.module.mjs +1 -1
- package/esm2022/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.mjs +3 -3
- package/esm2022/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.mjs +3 -3
- package/esm2022/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.mjs +3 -3
- package/esm2022/lib/components/kv-buttons/kv-button-success/kv-button-success.component.mjs +3 -3
- package/esm2022/lib/components/kv-buttons/kv-button.module.mjs +1 -1
- package/esm2022/lib/components/kv-carousel/kv-carousel.component.mjs +3 -3
- package/esm2022/lib/components/kv-carousel/kv-carousel.module.mjs +1 -1
- package/esm2022/lib/components/kv-chart/kv-chart.component.mjs +3 -3
- package/esm2022/lib/components/kv-chart/kv-chart.module.mjs +1 -1
- package/esm2022/lib/components/kv-error/kv-error.component.mjs +3 -3
- package/esm2022/lib/components/kv-error/kv-error.module.mjs +1 -1
- package/esm2022/lib/components/kv-file-upload/kv-file-upload.component.mjs +3 -3
- package/esm2022/lib/components/kv-file-upload/kv-file-upload.module.mjs +1 -1
- package/esm2022/lib/components/kv-file-viewer/kv-file-viewer.component.mjs +9 -3
- package/esm2022/lib/components/kv-file-viewer/kv-file-viewer.module.mjs +1 -1
- package/esm2022/lib/components/kv-filter-card/kv-filter-card.component.mjs +3 -3
- package/esm2022/lib/components/kv-filter-card/kv-filter-card.module.mjs +1 -1
- package/esm2022/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.mjs +3 -3
- package/esm2022/lib/components/kv-filter-fieldset/kv-filter-fieldset.module.mjs +1 -1
- package/esm2022/lib/components/kv-g-icon/kv-g-icon.component.mjs +1 -1
- package/esm2022/lib/components/kv-g-icon/kv-g-icon.module.mjs +1 -1
- package/esm2022/lib/components/kv-home-card/kv-home-card.component.mjs +3 -3
- package/esm2022/lib/components/kv-home-card/kv-home-card.module.mjs +1 -1
- package/esm2022/lib/components/kv-image-upload/kv-image-upload.component.mjs +3 -3
- package/esm2022/lib/components/kv-image-upload/kv-image-upload.module.mjs +1 -1
- package/esm2022/lib/components/kv-inputs/kv-check/kv-check.component.mjs +3 -3
- package/esm2022/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.mjs +3 -3
- package/esm2022/lib/components/kv-inputs/kv-editor/kv-editor.component.mjs +3 -3
- package/esm2022/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.mjs +3 -3
- package/esm2022/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.mjs +3 -3
- package/esm2022/lib/components/kv-inputs/kv-input-number/kv-input-number.component.mjs +3 -3
- package/esm2022/lib/components/kv-inputs/kv-input-password/kv-input-password.component.mjs +3 -3
- package/esm2022/lib/components/kv-inputs/kv-input-text/kv-input-text.component.mjs +3 -3
- package/esm2022/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.mjs +3 -3
- package/esm2022/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.mjs +3 -3
- package/esm2022/lib/components/kv-inputs/kv-input-time/kv-input-time.component.mjs +3 -3
- package/esm2022/lib/components/kv-inputs/kv-inputs.module.mjs +1 -1
- package/esm2022/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.mjs +3 -3
- package/esm2022/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.mjs +3 -3
- package/esm2022/lib/components/kv-inputs/kv-select-button/kv-select-button.component.mjs +3 -3
- package/esm2022/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.mjs +3 -3
- package/esm2022/lib/components/kv-inputs/kv-switch/kv-switch.component.mjs +3 -3
- package/esm2022/lib/components/kv-label/kv-label.component.mjs +3 -3
- package/esm2022/lib/components/kv-label/kv-label.module.mjs +1 -1
- package/esm2022/lib/components/kv-layout/dropdown-master/dropdown-master.component.mjs +3 -3
- package/esm2022/lib/components/kv-layout/kv-layout.module.mjs +1 -1
- package/esm2022/lib/components/kv-layout/layout/kv-layout.component.mjs +3 -3
- package/esm2022/lib/components/kv-loader/kv-loader.component.mjs +3 -3
- package/esm2022/lib/components/kv-loader/kv-loader.module.mjs +1 -1
- package/esm2022/lib/components/kv-loader/kv-loader.service.mjs +1 -1
- package/esm2022/lib/components/kv-login/kv-login.component.mjs +3 -3
- package/esm2022/lib/components/kv-login/kv-login.module.mjs +1 -1
- package/esm2022/lib/components/kv-modal/kv-modal.component.mjs +3 -3
- package/esm2022/lib/components/kv-modal/kv-modal.module.mjs +1 -1
- package/esm2022/lib/components/kv-orgchart/kv-orgchart.component.mjs +3 -3
- package/esm2022/lib/components/kv-orgchart/kv-orgchart.module.mjs +1 -1
- package/esm2022/lib/components/kv-page-form/kv-page-form.component.mjs +3 -3
- package/esm2022/lib/components/kv-page-form/kv-page-form.module.mjs +1 -1
- package/esm2022/lib/components/kv-page-stepper/kv-page-stepper.component.mjs +3 -3
- package/esm2022/lib/components/kv-page-stepper/kv-page-stepper.module.mjs +1 -1
- package/esm2022/lib/components/kv-pick-list/kv-pick-list.component.mjs +3 -3
- package/esm2022/lib/components/kv-pick-list/kv-pick-list.module.mjs +1 -1
- package/esm2022/lib/components/kv-progress-bar/kv-progress-bar.component.mjs +3 -3
- package/esm2022/lib/components/kv-progress-bar/kv-progress-bar.module.mjs +1 -1
- package/esm2022/lib/components/kv-report/kv-report.component.mjs +3 -3
- package/esm2022/lib/components/kv-report/kv-report.module.mjs +1 -1
- package/esm2022/lib/components/kv-stepper/kv-stepper.component.mjs +3 -3
- package/esm2022/lib/components/kv-stepper/kv-stepper.module.mjs +1 -1
- package/esm2022/lib/components/kv-table/kv-table.component.mjs +3 -3
- package/esm2022/lib/components/kv-table/kv-table.module.mjs +1 -1
- package/esm2022/lib/components/kv-table-edit/kv-table-edit.component.mjs +5 -7
- package/esm2022/lib/components/kv-table-edit/kv-table-edit.module.mjs +8 -4
- package/esm2022/lib/components/kv-table-expandable/kv-table-expandable.component.mjs +3 -3
- package/esm2022/lib/components/kv-table-expandable/kv-table-expandable.module.mjs +1 -1
- package/esm2022/lib/components/kv-tree-table/kv-tree-table.component.mjs +3 -3
- package/esm2022/lib/components/kv-tree-table/kv-tree-table.module.mjs +1 -1
- package/esm2022/lib/components/kv-tree-view/kv-tree-view.component.mjs +3 -3
- package/esm2022/lib/components/kv-tree-view/kv-tree-view.module.mjs +1 -1
- package/esm2022/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.mjs +3 -3
- package/esm2022/lib/components/kv-workspace/kv-workspace.module.mjs +1 -1
- package/esm2022/lib/components/kv-workspace/logo/kv-workspace-logo.component.mjs +3 -3
- package/esm2022/lib/components/kv-workspace/master/kv-workspace-master.component.mjs +3 -3
- package/esm2022/lib/components/kv-workspace/workspace/kv-workspace.component.mjs +3 -3
- package/esm2022/public-api.mjs +1 -1
- package/fesm2022/keevo-components.mjs +118 -112
- package/fesm2022/keevo-components.mjs.map +1 -1
- package/lib/components/kv-file-viewer/kv-file-viewer.component.d.ts +3 -1
- package/lib/components/kv-table/kv-table.component.d.ts +1 -1
- package/lib/components/kv-table-edit/kv-table-edit.module.d.ts +2 -1
- package/lib/components/kv-table-expandable/kv-table-expandable.component.d.ts +1 -1
- package/package.json +1 -1
|
@@ -24,7 +24,8 @@ import * as i18 from "../kv-inputs/kv-input-mask/kv-input-mask.component";
|
|
|
24
24
|
import * as i19 from "../kv-inputs/kv-input-number/kv-input-number.component";
|
|
25
25
|
import * as i20 from "../kv-inputs/kv-input-text/kv-input-text.component";
|
|
26
26
|
import * as i21 from "../kv-inputs/kv-switch/kv-switch.component";
|
|
27
|
-
import * as i22 from "
|
|
27
|
+
import * as i22 from "../kv-button/kv-button.component";
|
|
28
|
+
import * as i23 from "../../api/pipes/mask.pipe";
|
|
28
29
|
export class KvTableEditComponent extends BasecomponentTable {
|
|
29
30
|
constructor(datePipe, decimalPipe, cpfCnpjPipe, telefonePipe, notificationService
|
|
30
31
|
// capitalizePipe: CapitalizePipe,
|
|
@@ -60,9 +61,6 @@ export class KvTableEditComponent extends BasecomponentTable {
|
|
|
60
61
|
this.selectedSize = { label: 'Large', class: 'p-datatable-lg', size: 1.17 };
|
|
61
62
|
}
|
|
62
63
|
},
|
|
63
|
-
// { name: 'Small', class: 'p-datatable-sm', size: 0.83 },
|
|
64
|
-
// { name: 'Normal', class: 'p-datatable-md', size: 1 },
|
|
65
|
-
// { name: 'Large', class: 'p-datatable-lg', size: 1.17 }
|
|
66
64
|
];
|
|
67
65
|
this.onSaveTimer$ = new Subject(); // Sujeito para controlar o temporizador
|
|
68
66
|
this.onDestroy$ = new Subject();
|
|
@@ -305,11 +303,11 @@ export class KvTableEditComponent extends BasecomponentTable {
|
|
|
305
303
|
}
|
|
306
304
|
}
|
|
307
305
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTableEditComponent, deps: [{ token: i1.DatePipe }, { token: i1.DecimalPipe }, { token: i2.CpfCnpjPipe }, { token: i2.TelefonePipe }, { token: i2.NotificationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
308
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.8", type: KvTableEditComponent, selector: "kv-table-edit", inputs: { enableSizes: "enableSizes", editMode: "editMode" }, outputs: { onSave: "onSave", filterField: "filterField" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"card\" id=\"tamanhotabela\" [style.font-size]=\"'1px'\">\n <p-toast></p-toast>\n\n <p-panel\n *ngIf=\"filtrosAvancados\"\n header=\"Filtros avan\u00E7ados\"\n [toggleable]=\"true\"\n [collapsed]=\"true\"\n (collapsedChange)=\"collapsed = !collapsed\"\n [style]=\"{ 'margin-bottom': '2px' }\"\n >\n <ng-template pTemplate=\"headericons\">\n <i *ngIf=\"!collapsed\" class=\"pi pi-filter\"></i>\n <!-- \u00CDcone quando o painel est\u00E1 aberto -->\n <i *ngIf=\"collapsed\" class=\"pi pi-minus\"></i>\n <!-- \u00CDcone quando o painel est\u00E1 fechado -->\n </ng-template>\n <ng-content></ng-content>\n </p-panel>\n\n <p-contextMenu #cm [model]=\"itemsContextMenu\"></p-contextMenu>\n <p-table\n #te\n [editMode]=\"editMode\"\n (onEditComplete)=\"onEditComplete($event)\"\n (onEditInit)=\"onEditInit($event)\"\n [reorderableColumns]=\"config.reorderableColumns || false\"\n *ngIf=\"config\"\n [value]=\"dataSource\"\n [dataKey]=\"config.dataKey\"\n [columns]=\"config.columns\"\n [scrollable]=\"true\"\n appendTo=\"body\"\n [styleClass]=\"selectedSize.class\"\n [(selection)]=\"selectedItems\"\n [rowSelectable]=\"isRowSelectable\"\n [globalFilterFields]=\"globalFilterFields\"\n [rows]=\"rows\"\n [paginator]=\"paginator\"\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"{first} - {last} de {totalRecords}\"\n (selectionChange)=\"selectionChange($event)\"\n [rowHover]=\"true\"\n [totalRecords]=\"totalRecords\"\n [lazy]=\"config.lazy\"\n (onLazyLoad)=\"paginate($event)\"\n [groupRowsBy]=\"config.fieldGroup\"\n paginatorDropdownAppendTo=\"body\"\n [showFirstLastIcon]=\"showFirstLastIcon\"\n [pageLinks]=\"pageLinksOptions\"\n [scrollable]=\"isTableScrollable\"\n [scrollHeight]=\"scrollHeight\"\n [rowTrackBy]=\"rowTrackBy\"\n [(contextMenuSelection)]=\"selectedProduct\"\n [contextMenu]=\"isEditableTable() ? cm : null\"\n >\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n\n <ng-template pTemplate=\"caption\" *ngIf=\"config.enableCation || enableSizes\">\n <div\n class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12\"\n >\n <div class=\"col-12 flex flex-column\">\n <div *ngIf=\"config.title\" class=\"text-md font-bold my-3\">\n {{ config.title }}\n </div>\n <div *ngIf=\"config.subtitle\" class=\"text-sm mb-4 font-medium\">\n {{ config.subtitle }}\n </div>\n </div>\n\n <div\n class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{\n tamanhoTela < 768 ? 'col-10' : 'col-12'\n }} mt-1 mb-2 \"\n >\n <span *ngIf=\"config.enableFilter\" class=\"p-input-icon-left\">\n <i class=\"pi pi-search\"></i>\n\n <input\n pInputText\n pAutoFocus\n [autofocus]=\"true\"\n type=\"text\"\n (input)=\"onGlobalFilter(te, $event)\"\n placeholder=\"Pesquisar...\"\n class=\"h-2rem\"\n />\n </span>\n\n <!-- FIXME: Op\u00E7\u00E3o 1 -->\n <!-- <div class=\"sizes-controls ml-2\" *ngIf=\"isShowSizes\">\n <p-selectButton\n [options]=\"sizes\"\n [(ngModel)]=\"selectedSize\"\n [style]=\"{'display': 'flex'}\"\n optionLabel=\"name\"\n />\n </div>\n <button\n id=\"btn-sizes\"\n pButton\n [pTooltip]=\"isShowSizes ? 'Esconder controles de tamanho' : 'Mostrar controles de tamanho'\"\n class=\"actionLoteBtns p-button-raised p-button-text\"\n (click)=\"isShowSizes = !isShowSizes\"\n >\n <span style=\"font-size: 0.8rem;\" class=\"flex align-items-end\">\n <span style=\"font-size: 0.7rem;\">\n A\n </span>\n A\n </span>\n </button> -->\n\n <!-- FIXME: Op\u00E7\u00E3o 2 -->\n <div *ngIf=\"enableSizes\" class=\"sizes-controls ml-2\">\n <!-- <p-splitButton\n label=\"aA\"\n [model]=\"sizes\"\n styleClass=\"teste\"\n [menuStyle]=\"{'font-size': '0.7rem'}\"\n\n ngModel\n >\n </p-splitButton> -->\n <!-- <p-button icon=\"pi pi-ellipsis-v\"/> -->\n\n <button\n id=\"actionLoteBtns\"\n pButton\n (click)=\"menu.toggle($event)\"\n class=\"actionLoteBtns p-button-raised p-button-text\"\n style=\"background-color: #1da750; color: #fff; display: flex\"\n >\n <span class=\"text-xs\">A</span>\n <span class=\"text-md\">A</span>\n </button>\n\n <p-tieredMenu\n [style]=\"{ 'font-size': '0.7rem' }\"\n styleClass=\"menuSizes\"\n appendTo=\"body\"\n #menu\n [model]=\"sizes\"\n [popup]=\"true\"\n >\n <ng-template let-item pTemplate=\"item\">\n <div\n class=\"cursor-pointer flex gap-2 align-items-center pl-1 m-2 menu-sizes\"\n (click)=\"item.command()\"\n >\n <div\n *ngIf=\"this.selectedSize.size != item.size\"\n class=\"tag\"\n [style.background-color]=\"'#EAEAEA'\"\n ></div>\n <div\n *ngIf=\"this.selectedSize.size == item.size\"\n class=\"tag\"\n [style.background-color]=\"'#1DA750'\"\n ></div>\n\n {{ item.label }}\n </div>\n </ng-template>\n </p-tieredMenu>\n </div>\n <!-- FIXME: Op\u00E7\u00E3o 3 -->\n <!-- <div class=\"sizes-controls ml-2\" style=\"transform: translate(0px, -15px);\" >\n <p-speedDial\n [model]=\"sizes\"\n showIcon=\"format_size\"\n [mask]=\"true\"\n direction=\"right\"\n buttonClassName=\"item-circle\"\n >\n\n\n\n\n <ng-template let-item pTemplate=\"item\" >\n <div class=\"item-circle cursor-pointer\n\n shadow-2 hover:shadow-8\n\n \" (click)=\"item.command()\">\n {{item.label}}\n </div>\n </ng-template>\n\n </p-speedDial>\n </div> -->\n </div>\n\n <span *ngIf=\"isEditing\" class=\"text-aviso\">\n Tabela em modo de edi\u00E7\u00E3o\n </span>\n\n <div class=\"flex flex-row col-1 justify-content-end\">\n <div\n *ngFor=\"let action of config.actionsLote\"\n class=\"btns-options flex flex-row\"\n >\n <button\n id=\"actionLoteBtns\"\n pButton\n *ngIf=\"\n !isEditing &&\n (selectedItems.length > 0 || action.showAcoesLote) &&\n exibirCampo(action, this.action)\n \"\n class=\"actionLoteBtns border-none\"\n style=\"background-color: #1da750\"\n (click)=\"action?.command(); activeItemLote(selectedItems)\"\n [pTooltip]=\"getOrExecute(action.tooltip, selectedItems)\"\n [tooltipPosition]=\"'bottom'\"\n [disabled]=\"getOrExecute(action.disabled, selectedItems)\"\n >\n <span\n class=\"material-symbols-outlined\"\n style=\"color: white\"\n >\n {{ getOrExecute(action.icon, selectedItems) }}\n </span>\n </button>\n </div>\n\n <div\n *ngIf=\"isEditableTable()\"\n class=\"btns-options\"\n [style]=\"{ 'margin-right': '7px' }\"\n >\n <button\n (click)=\"this.isEditing = !this.isEditing\"\n id=\"actionLoteBtns\"\n pButton\n [pTooltip]=\"!isEditing ? 'Habilitar Edi\u00E7\u00E3o' : 'Desabilitar Edi\u00E7\u00E3o'\"\n [tooltipPosition]=\"'left'\"\n style=\"background-color: #1da750; color: #fff\"\n class=\"actionLoteBtns p-button-raised p-button-text\"\n >\n <span class=\"material-symbols-outlined\"> edit_square </span>\n </button>\n </div>\n </div>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th\n style=\"width: 4rem; border-left: solid 4px transparent\"\n *ngIf=\"config.enableSelect && !isEditing\"\n [class]=\"selectedSize.class + 'th'\"\n >\n <p-tableHeaderCheckbox\n (click)=\"activeItemLote(selectedItems)\"\n ></p-tableHeaderCheckbox>\n </th>\n\n <th\n *ngFor=\"let col of columns\"\n [pSortableColumn]=\"col.field\"\n [pSortableColumnDisabled]=\"col.sortable === false\"\n [style.min-width]=\"col.width * selectedSize.size + 'px'\"\n pReorderableColumn\n [class]=\"selectedSize.class + 'th'\"\n >\n <div\n [class]=\"\n centralizarColunas(col) && alignColunasHeader(col) == ''\n ? 'flex flex-row justify-content-center'\n : 'flex flex-row'\n \"\n [style]=\"alignColunasHeader(col)\"\n >\n <span>{{ col.header }}</span>\n <p-sortIcon\n *ngIf=\"col.sortable === true\"\n [field]=\"col.field\"\n style=\"font-size: 10px\"\n ></p-sortIcon>\n\n <span\n *ngIf=\"col.headerTooltip\"\n class=\"material-symbols-outlined flex align-items-center\"\n [pTooltip]=\"col.headerTooltip\"\n >info</span\n >\n </div>\n </th>\n <th\n *ngIf=\"!isEditing && config.actions && config.actions.length > 0\"\n ></th>\n <th\n *ngIf=\"isEditableTable() && this.editMode == 'row'\"\n id=\"th-edit\"\n style=\"width: 20px\"\n >\n Editar\n </th>\n </tr>\n </ng-template>\n\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n\n <ng-template\n pTemplate=\"body\"\n let-rowData\n let-editing=\"editing\"\n let-ri=\"rowIndex\"\n let-columns=\"columns\"\n let-rowgroup=\"rowgroup\"\n let-rowspan=\"rowspan\"\n >\n <tr\n [pEditableRow]=\"rowData\"\n [pEditableRowDisabled]=\"false\"\n [pContextMenuRow]=\"{rowData, editing}\"\n [class]=\"selectedSize.class + '-tr'\"\n >\n <td\n *ngIf=\"config.enableSelect && !isEditing\"\n [style]=\"applyStyle(rowData, { field: 'check-box', header: '' })\"\n >\n <!--<p-tableCheckbox *ngIf=\"isVisibleCheckbox(rowData)\"-->\n <p-tableCheckbox\n class=\"check-edit-list\"\n [value]=\"rowData\"\n [disabled]=\"isDisabledCheckbox(rowData)\"\n (click)=\"activeItemLote(selectedItems)\"\n ></p-tableCheckbox>\n </td>\n\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <!-- FIXME: Testar a implementa\u00E7\u00E3o abaixo e mesaclar as duas formas -->\n\n <ng-template #templateInput let-rowData=\"rowData\" let-col=\"col\">\n <ng-container *ngIf=\"isEditing; else templatevisualedicao\">\n <ng-container [ngSwitch]=\"col.fieldControlType\">\n <ng-container *ngSwitchCase=\"'text'\">\n <div [style.width]=\"col.width\" class=\"grid formgrid p-fluid\">\n <kv-input-text\n [disabled]=\"isDisableEditRowCellFunction(rowData, col)\"\n class=\"cellControl col\"\n [(ngModel)]=\"rowData[col.field]\"\n [required]=\"col.required ?? true\"\n ></kv-input-text>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'number'\">\n <div [style.width]=\"col.width\" class=\"grid formgrid p-fluid\">\n <kv-input-number\n [disabled]=\"isDisableEditRowCellFunction(rowData, col)\"\n class=\"cellControl col\"\n [(ngModel)]=\"rowData[col.field]\"\n [required]=\"col.required ?? true\"\n ></kv-input-number>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'mask'\">\n <div [style.width]=\"col.width\" class=\"grid formgrid p-fluid\">\n <kv-input-mask\n [disabled]=\"isDisableEditRowCellFunction(rowData, col)\"\n class=\"cellControl col\"\n [mask]=\"col.mask\"\n [required]=\"col.required ?? true\"\n [(ngModel)]=\"rowData[col.field]\"\n ></kv-input-mask>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'switch'\">\n <div [style.width]=\"col.width\" class=\"grid formgrid p-fluid\">\n <kv-switch\n [disabled]=\"isDisableEditRowCellFunction(rowData, col)\"\n class=\"cellControl col\"\n [(ngModel)]=\"rowData[col.field]\"\n ></kv-switch>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'calendar'\">\n <div [style.width]=\"col.width\">\n <div\n [style.width]=\"col.width\"\n class=\"grid formgrid p-fluid\"\n >\n <kv-input-calendar\n class=\"cellControl col\"\n [(ngModel)]=\"rowData[col.field]\"\n ></kv-input-calendar>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'dropdown'\">\n <div [style.width]=\"col.width\" class=\"grid formgrid p-fluid\">\n <p-dropdown\n [disabled]=\"isDisableEditRowCellFunction(rowData, col)\"\n class=\"cellControl col\"\n appendTo=\"body\"\n [panelStyle]=\"{ 'font-size': '0.75rem' }\"\n [optionLabel]=\"col.fieldDropDownControl.descricaoobjeto\"\n [optionValue]=\"col.fieldDropDownControl.idobjeto\"\n [options]=\"\n col.fieldDropDownControl.fieldControlDropdownSource\n \"\n [(ngModel)]=\"rowData[col.field]\"\n >\n </p-dropdown>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-template #templatevisualedicao>\n <ng-container\n *ngTemplateOutlet=\"\n templateOutput;\n context: { rowData: rowData, col: col }\n \"\n ></ng-container>\n </ng-template>\n </ng-template>\n\n <ng-template #templateOutput let-rowData=\"rowData\" let-col=\"col\">\n <ng-container [ngSwitch]=\"col.fieldControlType\">\n <ng-container *ngSwitchCase=\"'dropdown'\">\n <ng-container *ngIf=\"rowData[col.field]\">\n {{ transformValueDrop(retornaDescricaoDrop(rowData, col), col) }}\n <!-- {{rowData[col.field]}} -->\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'switch'\">\n <kv-switch\n [(ngModel)]=\"rowData[col.field]\"\n [disabled]=\"true\"\n ></kv-switch>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'calendar'\">\n {{ rowData[col.field] | date }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'mask'\">\n {{ rowData[col.field] | mask : col.mask }}\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n {{ transformValue(rowData, col) }}\n </ng-container>\n </ng-container>\n </ng-template>\n\n <td\n *ngIf=\"editMode == 'cell' && col.fieldControlType\"\n [pEditableColumn]=\"rowData\"\n [pEditableColumnField]=\"col.field\"\n [pEditableColumnRowIndex]=\"rowData[config.dataKey]\"\n [id]=\"'rowTable' + rowData[config.dataKey]\"\n (click)=\"activeItem(rowData)\"\n (dblclick)=\"dbClickEdit()\"\n class=\"rowTable\"\n [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \"\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\n >\n <p-cellEditor>\n <ng-container>\n <ng-template pTemplate=\"input\">\n <ng-container\n *ngTemplateOutlet=\"\n templateInput;\n context: { rowData: rowData, col: col }\n \"\n ></ng-container>\n </ng-template>\n\n <ng-template pTemplate=\"output\">\n <ng-container\n *ngTemplateOutlet=\"\n templateOutput;\n context: { rowData: rowData, col: col }\n \"\n ></ng-container>\n </ng-template>\n </ng-container>\n\n <!-- <ng-template *ngIf=\"!isEditing\" pTemplate=\"input\">\n <ng-container *ngTemplateOutlet=\"templateInput; context: { rowData: rowData, col: col }\"></ng-container>\n </ng-template>\n\n <ng-template *ngIf=\"isEditing\" pTemplate=\"output\">\n <ng-container *ngTemplateOutlet=\"templateOutput; context: { rowData: rowData, col: col }\"></ng-container>\n </ng-template> -->\n </p-cellEditor>\n </td>\n\n <!-- NOTE: Edi\u00E7\u00E3o de linha -->\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n\n <!-- Celula que armazena os controles de edi\u00E7\u00E3o para os campos -->\n <td\n *ngIf=\"false && col.fieldControlType && editMode == 'row'\"\n [id]=\"'rowTable' + rowData[config.dataKey]\"\n (click)=\"activeItem(rowData)\"\n (dblclick)=\"dbClickEdit()\"\n class=\"rowTable\"\n [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \"\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\n >\n <p-cellEditor\n [ngClass]=\"{ switch: col.fieldControlType == 'switch' }\"\n >\n <ng-template pTemplate=\"input\">\n <ng-container\n *ngTemplateOutlet=\"\n templateInput;\n context: { rowData: rowData, col: col }\n \"\n ></ng-container>\n </ng-template>\n\n <ng-template pTemplate=\"output\">\n <ng-container\n *ngTemplateOutlet=\"\n templateOutput;\n context: { rowData: rowData, col: col }\n \"\n ></ng-container>\n </ng-template>\n </p-cellEditor>\n </td>\n\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n\n <td\n *ngIf=\"rowgroup && !col.template\"\n [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\n class=\"rowTable\"\n [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \"\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\n >\n <span class=\"p-column-title\">{{ col.header }}:</span>\n\n <span\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\n [class]=\"returnRowClass(rowData, col)\"\n >\n <span\n *ngIf=\"\n !isChipField(col) && !col.iconField && !isImageField(col)\n \"\n >\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\n {{ transformValue(rowData, col) }}\n </span>\n\n <div *ngIf=\"isChipField(col) && !col.iconField\">\n <span\n [class]=\"returnClassChip(rowData, col)\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >{{ transformValue(rowData, col) }}</span\n >\n </div>\n </span>\n\n <span *ngIf=\"isImageField(col)\">\n <span>\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\n </span>\n </span>\n\n <i\n *ngIf=\"col.iconField\"\n [ngClass]=\"{\n 'material-icons': col.indIconMaterial,\n 'material-symbols-outlined mr-2': !col.indIconMaterial\n }\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >\n {{ returnClassIcon(rowData, col) }}\n </i>\n\n <ng-template #booleanField>\n <i\n *ngIf=\"!col.iconField && !isSwitchField(col)\"\n [ngClass]=\"\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\n \"\n ><span class=\"material-symbols-outlined\">\n {{ rowData[col.field] ? \"check\" : \"close\" }}\n </span>\n </i>\n\n <span\n *ngIf=\"isSwitchField(col)\"\n [class]=\"returnRowClass(rowData, col)\"\n >\n <kv-switch\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\n [disabled]=\"col?.onlyReadField ?? true\"\n [switchValue]=\"transformValue(rowData, col)\"\n >\n </kv-switch>\n </span>\n </ng-template>\n </td>\n\n <td\n *ngIf=\"\n !rowgroup &&\n !col.grouped &&\n !col.template &&\n !col.fieldControlType\n \"\n [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \"\n class=\"rowTable\"\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\n >\n <span class=\"p-column-title\">{{ col.header }}:</span>\n\n <span\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\n [class]=\"returnRowClass(rowData, col)\"\n >\n <span\n *ngIf=\"\n !isChipField(col) && !col.iconField && !isImageField(col)\n \"\n >\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\n {{ transformValue(rowData, col) }}\n </span>\n\n <div *ngIf=\"isChipField(col) && !col.iconField\">\n <span\n [class]=\"returnClassChip(rowData, col)\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >\n {{ transformValue(rowData, col) }}</span\n >\n </div>\n </span>\n\n <span *ngIf=\"isImageField(col)\">\n <span>\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\n </span>\n </span>\n\n <i\n *ngIf=\"col.iconField\"\n [ngClass]=\"{\n 'material-icons': col.indIconMaterial,\n 'material-symbols-outlined mr-2': !col.indIconMaterial\n }\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >\n {{ returnClassIcon(rowData, col) }}\n </i>\n\n <ng-template #booleanField>\n <i\n *ngIf=\"!col.iconField && !isSwitchField(col)\"\n [ngClass]=\"\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\n \"\n ><span class=\"material-symbols-outlined\">\n {{ rowData[col.field] ? \"check\" : \"close\" }}\n </span>\n </i>\n\n <span\n *ngIf=\"isSwitchField(col)\"\n [class]=\"returnRowClass(rowData, col)\"\n >\n <kv-switch\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\n [disabled]=\"col?.onlyReadField ?? true\"\n [switchValue]=\"transformValue(rowData, col)\"\n >\n </kv-switch>\n </span>\n </ng-template>\n </td>\n\n <td\n *ngIf=\"col.template && !isEditableTable()\"\n [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \"\n class=\"rowTable\"\n >\n <span class=\"p-column-title\">{{ col.header }}:</span>\n <ng-container\n *ngIf=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\n >\n </ng-container>\n </td>\n </ng-container>\n\n <!-- ------------------------------------------------------------------------------------------------------------------------------------------- -->\n <!-- Controle de a\u00E7\u00E3o -->\n <td\n [ngClass]=\"{\n 'td-tools': isEditableTable() && this.editMode == 'row',\n 'td-tools-sticky': !isEditableTable() || this.editMode == 'cell'\n }\"\n *ngIf=\"!isEditing && config.actions && config.actions.length > 0\"\n [style]=\"\n applyStyle(rowData, { field: 'btns-options', header: '' }) +\n 'border-right: 1px solid #ddd !important; border-left: 1px solid #ddd !important;'\n \"\n >\n <div class=\"flex flex-row justify-content-end w-full\">\n <!-- <button\n id=\"moreVertBtn\"\n pButton\n class=\"actionBtns p-button-text p-button-raised\"\n (click)=\"menu.toggle($event); activeItem(rowData)\"\n > -->\n <span\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz\"\n style=\"font-size: 1rem; height: 10px; width: 20px\"\n (click)=\"menu.toggle($event); activeItem(rowData)\"\n >\n more_horiz\n </span>\n <!-- </button> -->\n\n <div *ngFor=\"let action of config.actions\">\n {{ criarMenusModal(rowData) }}\n </div>\n\n <!-- <div *ngFor=\"let action of config.actions\">\n {{ criarMenusModal(rowData) }}\n </div> -->\n\n <p-menu\n #menu\n [popup]=\"true\"\n [model]=\"menuItems\"\n appendTo=\"body\"\n ></p-menu>\n </div>\n </td>\n\n <!-- <td\n class=\"td-tools\"\n *ngIf=\"!isEditing && config.actions && config.actions.length > 0\"\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\"\n >\n </td> -->\n\n <!-- ------------------------------------------------------------------------------------------------------------------------------------------- -->\n <!-- Controle de edi\u00E7\u00E3o -->\n <td\n class=\"td-edit\"\n *ngIf=\"this.isEditableTable() && this.editMode == 'row'\"\n >\n <div class=\"flex align-items-center justify-content-center gap-2\">\n <button\n [style.height]=\"'28px'\"\n [id]=\"'rowEdit' + rowData[config.dataKey]\"\n [style.width]=\"'28px'\"\n [disabled]=\"isDisableEditRowFunction(rowData)\"\n *ngIf=\"!editing\"\n pButton\n pRipple\n type=\"button\"\n pInitEditableRow\n icon=\"pi pi-pencil\"\n (click)=\"onRowEditInit(rowData)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n <!-- <button [style.height]=\"'28px'\" [style.width]=\"'28px'\" [disabled]=\"isDisableEditRowFunction(rowData)\" *ngIf=\"editing\" pButton pRipple type=\"button\" pSaveEditableRow icon=\"pi pi-check\"\n (click)=\"onRowEditSave(rowData, ri)\" [id]=\"'rowSave' + rowData[config.dataKey] \" class=\"p-button-rounded p-button-text p-button-success mr-2\"></button> -->\n <button\n [style.height]=\"'28px'\"\n [style.width]=\"'28px'\"\n [disabled]=\"isDisableEditRowFunction(rowData)\"\n *ngIf=\"editing\"\n pButton\n pRipple\n type=\"button\"\n pCancelEditableRow\n icon=\"pi pi-times\"\n (click)=\"onRowEditCancel(rowData, ri)\"\n [id]=\"'rowCancel' + rowData[config.dataKey]\"\n class=\"p-button-rounded p-button-text p-button-danger\"\n ></button>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n</div>\n", styles: ["@charset \"UTF-8\";.td-edit{position:sticky;right:-1px;background-color:#fff;color:#5289b4}.td-tools{position:sticky;right:52px;border-right:1px solid #ddd!important;background-color:#fff;box-shadow:-5px 0 20px -10px #000000bf}.td-tools-sticky{position:sticky;right:0;border-right:3px solid #fff!important;background-color:#fff}#th-edit{position:sticky;right:0;background-color:#eaeaea}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td{text-align:center;border:1px solid #eaeaea;border-width:1px 1px;padding:0rem .5rem}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th{text-align:center;padding:0rem .5rem;border-left:none;border-right:none;border-width:1px 1px;font-weight:700;color:#343a40;background:#eaeaea;transition:box-shadow .2s}.error-show{background-color:red;width:5px;height:10px}.btns-options{position:relative;left:20px}.chip-style{border:solid 1px}:host::ng-deep .p-card .p-card-content{padding:0}.material-symbols-outlined.md-19{font-size:15px}.material-symbols-outlined.md-22{font-size:19px}.checkbox-container{display:flex;align-items:center;gap:2px;margin-top:5px}#botaoFiltro:hover{color:#a9a9a9}.actionLoteBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;font-size:16px;width:2rem;height:2rem;top:2px;margin-left:.5rem;justify-content:center;text-decoration:none;text-align:justify;padding:12px}:host ::ng-deep .center{display:flex;align-items:center;justify-content:center}#actionLoteBtns:hover,.actionLoteBtns:hover{background-color:#29b92d!important}.actionBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;width:.8rem;height:.8rem;margin-left:.22rem;justify-content:center;text-decoration:none;text-align:justify;padding:11px}:host::ng-deep .material-symbols-outlined{font-family:Material Symbols Outlined;font-weight:400;font-style:normal;line-height:.9;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}#actionBtns:hover{color:#a9a9a9}.image{border-style:solid;border-width:3.5px;border-color:#5289b4;border-radius:100%;height:55px;width:55px;padding:0;margin:0;vertical-align:middle}:host ::ng-deep .p-datatable-header{background-color:#eaeaea!important;padding:2px 13px 0!important;border-radius:5px!important}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th{background-color:#eaeaea!important}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th:first-of-type{border-radius:5px 0 0 5px}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th:last-child{border-radius:0 5px 5px 0}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td{border-left:none!important;border-right:none!important}:host ::ng-deep .actionBtns,:host ::ng-deep .actionLoteBtns{border-radius:20%;width:1.625rem!important;height:1.625rem!important;box-shadow:#0000003d 0 3px 8px}.icon-more-horiz:hover,.icon-more-horiz:focus{color:#5e5e5e;transform:scale(1.1);transition:color .3s,transform .3s}@media only screen and (min-width: 768px){.actionLoteBtns{top:-1px}}@media only screen and (max-width: 960px){:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:has(p-tablecheckbox){border-bottom:0px!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:has(img){justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:has(img) .p-column-title{display:none!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:last-child{border-bottom:1px solid #ddd!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:last-child div{justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td .p-column-title{font-weight:600}}::ng-deep .p-panel.p-panel-toggleable .p-panel-header{background-color:#eaeaea!important}::ng-deep .field.grid,.formgrid.grid{padding:0rem!important}@media screen and (min-width: 961px){.moreVertBtn{position:relative;right:3px}}::ng-deep .p-datatable .p-datatable-thead>tr>th:last-of-type{border-radius:0 0 5px!important;-webkit-border-radius:0px 0px 5px 0px!important;-moz-border-radius:0px 0px 5px 0px!important;-ms-border-radius:0px 0px 5px 0px!important;-o-border-radius:0px 0px 5px 0px!important}::ng-deep .p-datatable .p-datatable-thead>tr>th:first-of-type{border-radius:0 0 0 5px!important;-webkit-border-radius:0px 0px 0px 5px!important;-moz-border-radius:0px 0px 0px 5px!important;-ms-border-radius:0px 0px 0px 5px!important;-o-border-radius:0px 0px 0px 5px!important}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch.p-inputswitch-checked .p-inputswitch-slider:before{transform:translate(1.25rem);height:15px;margin-top:-8px;-webkit-transform:translateX(1.25rem);-moz-transform:translateX(1.25rem);-ms-transform:translateX(1.25rem);-o-transform:translateX(1.25rem)}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch.p-inputswitch-checked .p-inputswitch-slider{height:21px}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch{height:21px}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider:before{background:#fff;width:1rem;height:1.25rem;height:16px!important;left:.25rem;margin-top:-9px!important;margin-top:-.625rem;border-radius:50%;transition-duration:.2s}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch:not(.p-disabled) .p-inputswitch-slider{height:21px}:host ::ng-deep .p-cell-editing{padding-top:0!important;padding-bottom:0!important}:host ::ng-deep p-dropdown-item{font-size:.1rem}.text-aviso{color:red;font-size:.85rem;font-weight:400;width:500px}:host ::ng-deep .p-checkbox .p-checkbox-box{width:18px;height:18px}:host ::ng-deep .p-selectbutton .p-button{font-size:.75rem!important;height:24px;padding:11px}#btn-sizes{border-radius:50%;width:.5rem!important;height:.5rem!important;box-shadow:#0000003d 0 3px 8px}:host ::ng-deep .p-datatable.p-datatable-sm{font-size:.625rem!important}:host ::ng-deep .p-datatable.p-datatable-md{font-size:.75rem!important}:host ::ng-deep .p-datatable.p-datatable-lg{font-size:.875rem!important}:host ::ng-deep .p-datatable-sm-tr>td i>span.material-symbols-outlined{font-size:.9rem}:host ::ng-deep .p-datatable-sm-tr>td .check-edit-list>.p-checkbox .p-checkbox-box{width:15px;height:15px}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>div>.cellControl>.p-dropdown .p-dropdown-label{width:1%;padding-top:0;padding-bottom:0;font-size:.6rem}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>div>kv-input-text>span>.inputs{padding-top:0;padding-bottom:0;font-size:.6rem;height:1rem}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>div>.cellControl>span>p-inputmask>.inputs{height:1rem;padding-top:0;padding-bottom:0;font-size:.6rem}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>div>kv-switch>div>p-inputswitch>div,:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>kv-switch>div>p-inputswitch,:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider{height:.6rem!important;width:2.4rem}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider:before{background:#fff;width:.6rem!important;height:.6rem!important;left:.2rem;margin-top:-.35rem!important;border-radius:50%;transition-duration:.2s}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>div>kv-switch>div>p-inputswitch>div>span:before{background:#fff;width:.6rem!important;height:.6rem!important;left:.2rem;margin-top:-.35rem!important;border-radius:50%;transition-duration:.2s}:host ::ng-deep .p-datatable-md-tr>td i>span.material-symbols-outlined{font-size:1rem}:host ::ng-deep .p-datatable-md-tr>td .check-edit-list>.p-checkbox .p-checkbox-box{width:18px;height:18px}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>div>.cellControl>.p-dropdown .p-dropdown-label{width:1%;padding-top:0;padding-bottom:0;font-size:.7rem}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>div>kv-input-text>span>.inputs{padding-top:0;padding-bottom:0;font-size:.7rem;height:1rem}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>div>.cellControl>span>p-inputmask>.inputs{height:1rem;padding-top:0;padding-bottom:0;font-size:.7rem}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>div>kv-switch>div>p-inputswitch>div,:host ::ng-deep .p-datatable-md-tr>td p-celleditor>kv-switch>div>p-inputswitch,:host ::ng-deep .p-datatable-md-tr>td p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider{height:.83rem!important;width:2.7rem}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider:before{background:#fff;width:.7rem!important;height:.7rem!important;left:.25rem;margin-top:-.35rem!important;border-radius:50%;transition-duration:.2s}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>div>kv-switch>div>p-inputswitch>div>span:before{background:#fff;width:.7rem;height:.7rem;left:.25rem;margin-top:-.4rem;border-radius:50%;transition-duration:.2s}:host ::ng-deep .p-datatable-lg-tr>td i>span.material-symbols-outlined{font-size:1.1rem}:host ::ng-deep .p-datatable-lg-tr>td p-celleditor>div>kv-input-text>span>.inputs{padding-top:0;padding-bottom:0;font-size:.8rem;height:1rem}:host ::ng-deep .p-datatable-lg-tr>td p-celleditor>div>.cellControl>.p-dropdown .p-dropdown-label{padding-top:0;padding-bottom:0;font-size:.8rem}:host ::ng-deep .p-datatable-lg-tr>td p-celleditor>div>.cellControl>span>p-inputmask>.inputs{height:1rem;padding-top:0;padding-bottom:0;font-size:.8rem}:host ::ng-deep .p-datatable-sm-tr>td{padding-top:0!important;padding-top:.05rem!important;padding-bottom:.05rem!important}:host ::ng-deep .p-datatable-md-tr>td,:host ::ng-deep .p-datatable-lg-tr>td{padding:.15rem!important}.p-datatable.p-datatable-smth{font-size:.6rem!important}.p-datatable.p-datatable-dmth{font-size:.7rem!important}.p-datatable.p-datatable-lgth{font-size:.8rem!important}:host ::ng-deep .p-datatable.p-datatable-sm * p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options) p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options){height:15px!important}:host ::ng-deep .p-datatable.p-datatable-md * p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options) p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options){height:25px!important}:host ::ng-deep .p-datatable.p-datatable-lg * p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options) p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options){height:30px!important}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider{height:21px!important}:host ::ng-deep .teste>.p-button{background:#eaeaea!important;color:#a9a9a9;border:none;box-shadow:#0000003d 0 3px 8px;height:20px}::ng-deep .menuSizes>p-tieredmenusub>.p-tieredmenu-root-list>li:first-child{font-size:.6rem}::ng-deep .menuSizes>p-tieredmenusub>.p-tieredmenu-root-list>li:last-child{font-size:.8rem}.tag{width:5px;height:25px;border-radius:.25rem}:host ::ng-deep .p-speeddial-button.p-button.p-button-icon-only{width:2rem;height:2rem;font-size:1rem}.item-circle{width:4rem;height:2rem;padding:1rem;font-size:.8rem;border-radius:17%;display:flex;align-items:center;justify-content:center;background:#eaeaea!important;box-shadow:#0000003d 0 3px 13px}:host ::ng-deep p-speeddial>div>button>span.material-symbols-outlined.ng-star-inserted{font-size:1.1rem}:host ::ng-deep .check-edit-list>div.p-checkbox.p-component{height:1rem}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:first-child{border-left:1px solid #ddd!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:last-child{border-right:1px solid #ddd!important}:host ::ng-deep .p-datatable-wrapper::-webkit-scrollbar:hover{background-color:#dededebf}:host ::ng-deep .p-datatable-wrapper::-webkit-scrollbar{width:6px;height:3px}:host ::ng-deep .p-datatable-wrapper:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}:host ::ng-deep .p-datatable-wrapper::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}:host ::ng-deep .p-datatable-wrapper::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}:host ::ng-deep .p-datatable>.p-datatable-wrapper{overflow-y:hidden}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.AutoFocus, selector: "[pAutoFocus]", inputs: ["autofocus"] }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i6.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i7.ContextMenu, selector: "p-contextMenu", inputs: ["model", "triggerEvent", "target", "global", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "id", "ariaLabel", "ariaLabelledBy", "pressDelay"], outputs: ["onShow", "onHide"] }, { kind: "component", type: i8.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "directive", type: i9.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: i10.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "component", type: i11.Panel, selector: "p-panel", inputs: ["toggleable", "header", "collapsed", "style", "styleClass", "iconPos", "expandIcon", "collapseIcon", "showHeader", "toggler", "transitionOptions"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }, { kind: "directive", type: i12.Ripple, selector: "[pRipple]" }, { kind: "component", type: i13.TieredMenu, selector: "p-tieredMenu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "autoDisplay", "showTransitionOptions", "hideTransitionOptions", "id", "ariaLabel", "ariaLabelledBy", "disabled", "tabindex"], outputs: ["onShow", "onHide"] }, { kind: "component", type: i14.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: i14.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "directive", type: i14.ContextMenuRow, selector: "[pContextMenuRow]", inputs: ["pContextMenuRow", "pContextMenuRowIndex", "pContextMenuRowDisabled"] }, { kind: "directive", type: i14.ReorderableColumn, selector: "[pReorderableColumn]", inputs: ["pReorderableColumnDisabled"] }, { kind: "directive", type: i14.EditableColumn, selector: "[pEditableColumn]", inputs: ["pEditableColumn", "pEditableColumnField", "pEditableColumnRowIndex", "pEditableColumnDisabled", "pFocusCellSelector"] }, { kind: "component", type: i14.CellEditor, selector: "p-cellEditor" }, { kind: "component", type: i14.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i14.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i14.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "directive", type: i14.EditableRow, selector: "[pEditableRow]", inputs: ["pEditableRow", "pEditableRowDisabled"] }, { kind: "directive", type: i14.InitEditableRow, selector: "[pInitEditableRow]" }, { kind: "directive", type: i14.CancelEditableRow, selector: "[pCancelEditableRow]" }, { kind: "component", type: i15.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "directive", type: i16.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i16.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i16.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i17.KvInputCalendarComponent, selector: "kv-input-calendar", inputs: ["isYear", "isMonthYear", "minDate", "maxDate", "showButtonBar", "showIcon", "showTime", "selectionMode"], outputs: ["onSelectionChange", "onSelectionValue"] }, { kind: "component", type: i18.KvInputMaskComponent, selector: "kv-input-mask", inputs: ["mask"], outputs: ["onComplete"] }, { kind: "component", type: i19.KvInputNumberComponent, selector: "kv-input-number", inputs: ["mode", "digits", "min", "max", "suffix"] }, { kind: "component", type: i20.KvInputTextComponent, selector: "kv-input-text", inputs: ["textCaptalized"] }, { kind: "component", type: i21.KvSwitchComponent, selector: "kv-switch", inputs: ["readonly", "switchValue"], outputs: ["onSwitchChange"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }, { kind: "pipe", type: i22.MaskPipe, name: "mask" }] }); }
|
|
306
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvTableEditComponent, selector: "kv-table-edit", inputs: { enableSizes: "enableSizes", editMode: "editMode" }, outputs: { onSave: "onSave", filterField: "filterField" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"card\" id=\"tamanhotabela\" [style.font-size]=\"'1px'\">\r\n <p-toast></p-toast>\r\n\r\n @if(filtrosAvancados){\r\n <p-panel\r\n header=\"Filtros avan\u00E7ados\"\r\n [toggleable]=\"true\"\r\n [collapsed]=\"true\"\r\n (collapsedChange)=\"collapsed = !collapsed\"\r\n [style]=\"{ 'margin-bottom': '2px' }\"\r\n >\r\n <ng-template pTemplate=\"headericons\">\r\n @if (!collapsed) {\r\n <i class=\"pi pi-filter\"></i>\r\n }\r\n <!-- \u00CDcone quando o painel est\u00E1 aberto -->\r\n @if (collapsed) {\r\n <i class=\"pi pi-minus\"></i>\r\n }\r\n <!-- \u00CDcone quando o painel est\u00E1 fechado -->\r\n </ng-template>\r\n <ng-content></ng-content>\r\n </p-panel>\r\n }\r\n\r\n <p-contextMenu #cm [model]=\"itemsContextMenu\"></p-contextMenu>\r\n <p-table\r\n #te\r\n [editMode]=\"editMode\"\r\n (onEditComplete)=\"onEditComplete($event)\"\r\n (onEditInit)=\"onEditInit($event)\"\r\n [reorderableColumns]=\"config.reorderableColumns || false\"\r\n *ngIf=\"config\"\r\n [value]=\"dataSource\"\r\n [dataKey]=\"config.dataKey\"\r\n [columns]=\"config.columns\"\r\n [scrollable]=\"true\"\r\n appendTo=\"body\"\r\n [styleClass]=\"selectedSize.class\"\r\n [(selection)]=\"selectedItems\"\r\n [rowSelectable]=\"isRowSelectable\"\r\n [globalFilterFields]=\"globalFilterFields\"\r\n [rows]=\"rows\"\r\n [paginator]=\"paginator\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{first} - {last} de {totalRecords}\"\r\n (selectionChange)=\"selectionChange($event)\"\r\n [rowHover]=\"true\"\r\n [totalRecords]=\"totalRecords\"\r\n [lazy]=\"config.lazy\"\r\n (onLazyLoad)=\"paginate($event)\"\r\n [groupRowsBy]=\"config.fieldGroup\"\r\n paginatorDropdownAppendTo=\"body\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [pageLinks]=\"pageLinksOptions\"\r\n [scrollable]=\"isTableScrollable\"\r\n [scrollHeight]=\"scrollHeight\"\r\n [rowTrackBy]=\"rowTrackBy\"\r\n [(contextMenuSelection)]=\"selectedProduct\"\r\n [contextMenu]=\"isEditableTable() ? cm : null\"\r\n >\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n @if (config.enableCation || enableSizes){\r\n <ng-template pTemplate=\"caption\">\r\n <div\r\n class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12 pt-1 pb-1 m-0\"\r\n >\r\n <div class=\"col-12 flex flex-column\">\r\n @if (config.title) {\r\n <div class=\"text-md font-bold my-3\">\r\n {{ config.title }}\r\n </div>\r\n } @if (config.subtitle) {\r\n <div class=\"text-sm mb-4 font-medium\">\r\n {{ config.subtitle }}\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{\r\n tamanhoTela < 768 ? 'col-10' : 'col-12'\r\n }} mt-1 mb-2 gap-1\"\r\n >\r\n \r\n @if (config.enableFilter) {\r\n <span class=\"p-input-icon-left\">\r\n <i class=\"pi pi-search\"></i>\r\n \r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"true\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(te, $event)\"\r\n placeholder=\"Pesquisar...\"\r\n class=\"h-2rem\"\r\n autocomplete=\"off\"\r\n />\r\n </span>\r\n }\r\n\r\n @if(enableSizes){\r\n <div class=\"sizes-controls\">\r\n \r\n <kv-button (click)=\"menu.toggle($event)\"\r\n [severity]=\"'tertiary'\"\r\n [icon]=\"'match_case'\"\r\n [pTooltip]=\"'Tamanho da fonte'\"\r\n >\r\n </kv-button>\r\n \r\n <p-tieredMenu\r\n [style]=\"{ 'font-size': '0.7rem' }\"\r\n styleClass=\"menuSizes\"\r\n appendTo=\"body\"\r\n #menu\r\n [model]=\"sizes\"\r\n [popup]=\"true\"\r\n >\r\n <ng-template let-item pTemplate=\"item\">\r\n <div\r\n class=\"cursor-pointer flex gap-2 align-items-center pl-1 m-2 menu-sizes\"\r\n (click)=\"item.command()\"\r\n >\r\n @if(this.selectedSize.size != item.size){\r\n <div\r\n class=\"tag\"\r\n [style.background-color]=\"'#EAEAEA'\"\r\n ></div>\r\n }\r\n \r\n @if(this.selectedSize.size == item.size){\r\n <div\r\n class=\"tag\"\r\n [style.background-color]=\"'#1DA750'\"\r\n ></div>\r\n }\r\n \r\n {{ item.label }}\r\n </div>\r\n </ng-template>\r\n </p-tieredMenu>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if(isEditing){\r\n <span class=\"text-aviso\">\r\n Tabela em modo de edi\u00E7\u00E3o\r\n </span>\r\n }\r\n \r\n <div class=\"flex flex-row col-2 justify-content-end gap-2\">\r\n @for (action of config.actionsLote; track i; let i = $index) {\r\n @if(!isEditing){\r\n <div class=\"flex align-items-center justify-content-center\">\r\n @if ((selectedItems.length > 0 || action.showAcoesLote) &&\r\n (getOrExecute(action.visible, selectedItems) ?? true)) {\r\n <kv-button\r\n (onClick)=\"action?.command(); activeItemLote(selectedItems)\"\r\n [pTooltip]=\"getOrExecute(action.tooltip, selectedItems)\"\r\n [tooltipPosition]=\"\r\n (getOrExecute(action.tooltip, selectedItems)?.length ??\r\n 0 > 7) &&\r\n config.actionsLote &&\r\n i == config.actionsLote.length - 1\r\n ? 'left'\r\n : 'bottom'\r\n \"\r\n [disabled]=\"getOrExecute(action.disabled, selectedItems) || false\"\r\n [icon]=\"getOrExecute(action.icon, selectedItems)\"\r\n [severity]=\"action.severity || 'tertiary'\"\r\n />\r\n }\r\n </div>\r\n }\r\n }\r\n\r\n @if (isEditableTable()) {\r\n <div>\r\n <kv-button\r\n (click)=\"this.isEditing = !this.isEditing\"\r\n [pTooltip]=\"!isEditing ? 'Habilitar Edi\u00E7\u00E3o' : 'Desabilitar Edi\u00E7\u00E3o'\"\r\n [tooltipPosition]=\"'left'\"\r\n [severity]=\"'tertiary'\"\r\n [icon]=\"'edit_square'\"\r\n >\r\n </kv-button>\r\n </div>\r\n }\r\n </div>\r\n\r\n <!---------------->\r\n \r\n </div>\r\n </ng-template>\r\n }\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @if(config.enableSelect && !isEditing){\r\n <th\r\n [class]=\"selectedSize.class + 'th'\"\r\n >\r\n <p-tableHeaderCheckbox\r\n (click)=\"activeItemLote(selectedItems)\"\r\n ></p-tableHeaderCheckbox>\r\n </th>\r\n }\r\n @for(col of columns; track $index){\r\n <th\r\n [pSortableColumn]=\"col.field\"\r\n [pSortableColumnDisabled]=\"col.sortable === false\"\r\n [style.min-width]=\"col.width * selectedSize.size + 'px'\"\r\n pReorderableColumn\r\n [class]=\"selectedSize.class + 'th'\"\r\n \r\n >\r\n <div\r\n [class]=\"\r\n centralizarColunas(col) && alignColunasHeader(col) == ''\r\n ? 'flex flex-row justify-content-center'\r\n : 'flex flex-row'\r\n \"\r\n [style]=\"alignColunasHeader(col)\"\r\n >\r\n <span>{{ col.header }}</span>\r\n @if(col.sortable === true) {\r\n <p-sortIcon\r\n [field]=\"col.field\"\r\n style=\"font-size: 10px\"\r\n ></p-sortIcon>\r\n }\r\n @if(col.headerTooltip){\r\n <span\r\n class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\"\r\n >\r\n info\r\n </span>\r\n }\r\n \r\n </div>\r\n </th>\r\n }\r\n \r\n @if(!isEditing && config.actions && config.actions.length > 0){\r\n <th></th>\r\n }\r\n\r\n @if(isEditableTable() && this.editMode == 'row'){\r\n <th\r\n id=\"th-edit\"\r\n style=\"width: 20px\"\r\n >\r\n Editar\r\n </th>\r\n }\r\n \r\n </tr>\r\n </ng-template>\r\n\r\n\r\n \r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n <ng-template\r\n pTemplate=\"body\"\r\n let-rowData\r\n let-editing=\"editing\"\r\n let-ri=\"rowIndex\"\r\n let-columns=\"columns\"\r\n let-rowgroup=\"rowgroup\"\r\n let-rowspan=\"rowspan\"\r\n >\r\n <tr\r\n [pEditableRow]=\"rowData\"\r\n [pEditableRowDisabled]=\"false\"\r\n [pContextMenuRow]=\"{rowData, editing}\"\r\n [class]=\"selectedSize.class + '-tr'\"\r\n (dblclick)=\"doubleClick($event, rowData)\"\r\n >\r\n @if(config.enableSelect && !isEditing){\r\n <td\r\n [style]=\"applyStyle(rowData, { field: 'check-box', header: '' })\"\r\n >\r\n \r\n <p-tableCheckbox\r\n class=\"check-edit-list\"\r\n [value]=\"rowData\"\r\n [disabled]=\"isDisabledCheckbox(rowData)\"\r\n (click)=\"activeItemLote(selectedItems)\"\r\n ></p-tableCheckbox>\r\n </td>\r\n }\r\n @for (col of columns; track i; let i = $index){\r\n <ng-container>\r\n <!-- FIXME: Testar a implementa\u00E7\u00E3o abaixo e mesaclar as duas formas -->\r\n \r\n <ng-template #templateInput let-rowData=\"rowData\" let-col=\"col\">\r\n <ng-container *ngIf=\"isEditing; else templatevisualedicao\">\r\n <ng-container [ngSwitch]=\"col.fieldControlType\">\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div [style.width]=\"col.width\" class=\"grid formgrid p-fluid\">\r\n <kv-input-text\r\n [disabled]=\"isDisableEditRowCellFunction(rowData, col)\"\r\n class=\"cellControl col\"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n [required]=\"col.required ?? true\"\r\n ></kv-input-text>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <div [style.width]=\"col.width\" class=\"grid formgrid p-fluid\">\r\n <kv-input-number\r\n [disabled]=\"isDisableEditRowCellFunction(rowData, col)\"\r\n class=\"cellControl col\"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n [required]=\"col.required ?? true\"\r\n ></kv-input-number>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'mask'\">\r\n <div [style.width]=\"col.width\" class=\"grid formgrid p-fluid\">\r\n <kv-input-mask\r\n [disabled]=\"isDisableEditRowCellFunction(rowData, col)\"\r\n class=\"cellControl col\"\r\n [mask]=\"col.mask\"\r\n [required]=\"col.required ?? true\"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n ></kv-input-mask>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'switch'\">\r\n <div [style.width]=\"col.width\" class=\"grid formgrid p-fluid\">\r\n <kv-switch\r\n [disabled]=\"isDisableEditRowCellFunction(rowData, col)\"\r\n class=\"cellControl col\"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n ></kv-switch>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'calendar'\">\r\n <div [style.width]=\"col.width\">\r\n <div\r\n [style.width]=\"col.width\"\r\n class=\"grid formgrid p-fluid\"\r\n >\r\n <kv-input-calendar\r\n class=\"cellControl col\"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n ></kv-input-calendar>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <div [style.width]=\"col.width\" class=\"grid formgrid p-fluid\">\r\n <p-dropdown\r\n [disabled]=\"isDisableEditRowCellFunction(rowData, col)\"\r\n class=\"cellControl col\"\r\n appendTo=\"body\"\r\n [panelStyle]=\"{ 'font-size': '0.75rem' }\"\r\n [optionLabel]=\"col.fieldDropDownControl.descricaoobjeto\"\r\n [optionValue]=\"col.fieldDropDownControl.idobjeto\"\r\n [options]=\"\r\n col.fieldDropDownControl.fieldControlDropdownSource\r\n \"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n >\r\n </p-dropdown>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n \r\n <ng-template #templatevisualedicao>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n templateOutput;\r\n context: { rowData: rowData, col: col }\r\n \"\r\n ></ng-container>\r\n </ng-template>\r\n </ng-template>\r\n \r\n <ng-template #templateOutput let-rowData=\"rowData\" let-col=\"col\">\r\n <ng-container [ngSwitch]=\"col.fieldControlType\">\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <ng-container *ngIf=\"rowData[col.field]\">\r\n {{ transformValueDrop(retornaDescricaoDrop(rowData, col), col) }}\r\n </ng-container>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'switch'\">\r\n <kv-switch\r\n [(ngModel)]=\"rowData[col.field]\"\r\n [disabled]=\"true\"\r\n ></kv-switch>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'calendar'\">\r\n {{ rowData[col.field] | date }}\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'mask'\">\r\n {{ rowData[col.field] | mask : col.mask }}\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchDefault>\r\n {{ transformValue(rowData, col) }}\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n \r\n @if(editMode == 'cell' && col.fieldControlType){\r\n <td\r\n [pEditableColumn]=\"rowData\"\r\n [pEditableColumnField]=\"col.field\"\r\n [pEditableColumnRowIndex]=\"rowData[config.dataKey]\"\r\n [id]=\"'rowTable' + rowData[config.dataKey]\"\r\n (click)=\"activeItem(rowData)\"\r\n (dblclick)=\"dbClickEdit()\"\r\n class=\"rowTable\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <p-cellEditor>\r\n <ng-container>\r\n <ng-template pTemplate=\"input\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n templateInput;\r\n context: { rowData: rowData, col: col }\r\n \"\r\n ></ng-container>\r\n </ng-template>\r\n \r\n <ng-template pTemplate=\"output\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n templateOutput;\r\n context: { rowData: rowData, col: col }\r\n \"\r\n ></ng-container>\r\n </ng-template>\r\n </ng-container>\r\n \r\n </p-cellEditor>\r\n </td>\r\n }\r\n \r\n <!-- NOTE: Edi\u00E7\u00E3o de linha -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n \r\n <!-- Celula que armazena os controles de edi\u00E7\u00E3o para os campos -->\r\n @if(false && col.fieldControlType && editMode == 'row'){\r\n <td\r\n [id]=\"'rowTable' + rowData[config.dataKey]\"\r\n (click)=\"activeItem(rowData)\"\r\n (dblclick)=\"dbClickEdit()\"\r\n class=\"rowTable\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <p-cellEditor\r\n [ngClass]=\"{ switch: col.fieldControlType == 'switch' }\"\r\n >\r\n <ng-template pTemplate=\"input\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n templateInput;\r\n context: { rowData: rowData, col: col }\r\n \"\r\n ></ng-container>\r\n </ng-template>\r\n \r\n <ng-template pTemplate=\"output\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n templateOutput;\r\n context: { rowData: rowData, col: col }\r\n \"\r\n ></ng-container>\r\n </ng-template>\r\n </p-cellEditor>\r\n </td>\r\n }\r\n \r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n \r\n <td\r\n *ngIf=\"rowgroup && !col.template\"\r\n [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\r\n class=\"rowTable\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n \r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n <span\r\n *ngIf=\"\r\n !isChipField(col) && !col.iconField && !isImageField(col)\r\n \"\r\n >\r\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n \r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >{{ transformValue(rowData, col) }}</span\r\n >\r\n </div>\r\n </span>\r\n \r\n <span *ngIf=\"isImageField(col)\">\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n \r\n <i\r\n *ngIf=\"col.iconField\"\r\n [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n \r\n <ng-template #booleanField>\r\n <i\r\n *ngIf=\"!col.iconField && !isSwitchField(col)\"\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n \r\n <span\r\n *ngIf=\"isSwitchField(col)\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n </span>\r\n </ng-template>\r\n </td>\r\n \r\n <td\r\n *ngIf=\"\r\n !rowgroup &&\r\n !col.grouped &&\r\n !col.template &&\r\n !col.fieldControlType\r\n \"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n class=\"rowTable\"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n \r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n <span\r\n *ngIf=\"\r\n !isChipField(col) && !col.iconField && !isImageField(col)\r\n \"\r\n >\r\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n \r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ transformValue(rowData, col) }}</span\r\n >\r\n </div>\r\n </span>\r\n \r\n <span *ngIf=\"isImageField(col)\">\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n \r\n <i\r\n *ngIf=\"col.iconField\"\r\n [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n \r\n <ng-template #booleanField>\r\n <i\r\n *ngIf=\"!col.iconField && !isSwitchField(col)\"\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n \r\n <span\r\n *ngIf=\"isSwitchField(col)\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n </span>\r\n </ng-template>\r\n </td>\r\n \r\n <td\r\n *ngIf=\"col.template && !isEditableTable()\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n class=\"rowTable\"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n <ng-container\r\n *ngIf=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\r\n >\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n }\r\n \r\n\r\n <!-- ------------------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- Controle de a\u00E7\u00E3o -->\r\n @if(!isEditing && config.actions && config.actions.length > 0){\r\n <td\r\n [ngClass]=\"{\r\n 'td-tools': isEditableTable() && this.editMode == 'row',\r\n 'td-tools-sticky': !isEditableTable() || this.editMode == 'cell'\r\n }\"\r\n [style]=\"\r\n applyStyle(rowData, { field: 'btns-options', header: '' }) +\r\n 'border-right: 1px solid #ddd !important; border-left: 1px solid #ddd !important;'\r\n \"\r\n >\r\n <div class=\"flex flex-row justify-content-end w-full\">\r\n \r\n <span\r\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz\"\r\n style=\"font-size: 1rem; height: 10px; width: 20px\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n >\r\n more_horiz\r\n </span>\r\n <!-- </button> -->\r\n\r\n <div *ngFor=\"let action of config.actions\">\r\n {{ criarMenusModal(rowData) }}\r\n </div>\r\n\r\n\r\n <p-menu\r\n #menu\r\n [popup]=\"true\"\r\n [model]=\"menuItems\"\r\n appendTo=\"body\"\r\n ></p-menu>\r\n </div>\r\n </td>\r\n }\r\n \r\n <!-- ------------------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- Controle de edi\u00E7\u00E3o -->\r\n @if(this.isEditableTable() && this.editMode == 'row'){\r\n <td class=\"td-edit\">\r\n <div class=\"flex align-items-center justify-content-center gap-2\">\r\n @if(!editing){\r\n <button\r\n [style.height]=\"'28px'\"\r\n [id]=\"'rowEdit' + rowData[config.dataKey]\"\r\n [style.width]=\"'28px'\"\r\n [disabled]=\"isDisableEditRowFunction(rowData)\"\r\n pButton\r\n pRipple\r\n type=\"button\"\r\n pInitEditableRow\r\n icon=\"pi pi-pencil\"\r\n (click)=\"onRowEditInit(rowData)\"\r\n class=\"p-button-rounded p-button-text\"\r\n ></button>\r\n }\r\n \r\n @if(editing){\r\n <button\r\n [style.height]=\"'28px'\"\r\n [style.width]=\"'28px'\"\r\n [disabled]=\"isDisableEditRowFunction(rowData)\"\r\n pButton\r\n pRipple\r\n type=\"button\"\r\n pCancelEditableRow\r\n icon=\"pi pi-times\"\r\n (click)=\"onRowEditCancel(rowData, ri)\"\r\n [id]=\"'rowCancel' + rowData[config.dataKey]\"\r\n class=\"p-button-rounded p-button-text p-button-danger\"\r\n ></button>\r\n }\r\n \r\n </div>\r\n </td>\r\n }\r\n \r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.td-edit{position:sticky;right:-1px;background-color:#fff;color:#5289b4}.td-tools{position:sticky;right:52px;border-right:1px solid #ddd!important;background-color:#fff;box-shadow:-5px 0 20px -10px #000000bf}.td-tools-sticky{position:sticky;right:0;border-right:3px solid #fff!important;background-color:#fff}#th-edit{position:sticky;right:0;background-color:#eaeaea}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td{text-align:center;border:1px solid #eaeaea;border-width:1px 1px;padding:0rem .5rem}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th{text-align:center;padding:0rem .5rem;border-left:none;border-right:none;border-width:1px 1px;font-weight:700;color:#343a40;background:#eaeaea;transition:box-shadow .2s}.error-show{background-color:red;width:5px;height:10px}.btns-options{position:relative;left:20px}.chip-style{border:solid 1px}:host::ng-deep .p-card .p-card-content{padding:0}.material-symbols-outlined.md-19{font-size:15px}.material-symbols-outlined.md-22{font-size:19px}.checkbox-container{display:flex;align-items:center;gap:2px;margin-top:5px}#botaoFiltro:hover{color:#a9a9a9}.actionLoteBtns{align-items:center;background-color:#29b92d;color:#f2f3f5;display:flex;font-size:16px;width:2rem;height:2rem;top:2px;margin-left:.5rem;justify-content:center;text-decoration:none;text-align:center;padding:12px}:host ::ng-deep .center{display:flex;align-items:center;justify-content:center}#actionLoteBtns:hover,.actionLoteBtns:hover{background-color:#249a29!important}.actionBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;width:.8rem;height:.8rem;margin-left:.22rem;justify-content:center;text-decoration:none;text-align:justify;padding:11px}:host::ng-deep .material-symbols-outlined{font-family:Material Symbols Outlined;font-weight:400;font-style:normal;line-height:.9;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}#actionBtns:hover{color:#a9a9a9}.image{border-style:solid;border-width:3.5px;border-color:#5289b4;border-radius:100%;height:55px;width:55px;padding:0;margin:0;vertical-align:middle}:host ::ng-deep .p-datatable-header{background-color:#eaeaea!important;padding:0!important;border-radius:5px!important}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th{background-color:#eaeaea!important}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th:first-of-type{border-radius:5px 0 0 5px}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th:last-child{border-radius:0 5px 5px 0}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td{border-left:none!important;border-right:none!important}:host ::ng-deep .actionBtns,:host ::ng-deep .actionLoteBtns{border-radius:20%;box-shadow:#0000003d 0 3px 8px}.icon-more-horiz:hover,.icon-more-horiz:focus{color:#5e5e5e;transform:scale(1.1);transition:color .3s,transform .3s}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:#004172;background:#004172}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight:hover{background-color:#002542}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight:active{background-color:#002542}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight:disabled{background-color:#002542;opacity:.4;cursor:auto}@media only screen and (min-width: 768px){.actionLoteBtns{top:-1px}}@media only screen and (max-width: 960px){:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:has(p-tablecheckbox){border-bottom:0px!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:has(img){justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:has(img) .p-column-title{display:none!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:last-child{border-bottom:1px solid #ddd!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:last-child div{justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td .p-column-title{font-weight:600}}::ng-deep .p-panel.p-panel-toggleable .p-panel-header{background-color:#eaeaea!important}::ng-deep .field.grid,.formgrid.grid{padding:0rem!important}@media screen and (min-width: 961px){.moreVertBtn{position:relative;right:3px}}::ng-deep .p-datatable .p-datatable-thead>tr>th:last-of-type{border-radius:0 0 5px!important;-webkit-border-radius:0px 0px 5px 0px!important;-moz-border-radius:0px 0px 5px 0px!important;-ms-border-radius:0px 0px 5px 0px!important;-o-border-radius:0px 0px 5px 0px!important}::ng-deep .p-datatable .p-datatable-thead>tr>th:first-of-type{border-radius:0 0 0 5px!important;-webkit-border-radius:0px 0px 0px 5px!important;-moz-border-radius:0px 0px 0px 5px!important;-ms-border-radius:0px 0px 0px 5px!important;-o-border-radius:0px 0px 0px 5px!important}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch.p-inputswitch-checked .p-inputswitch-slider:before{transform:translate(1.25rem);height:15px;margin-top:-8px;-webkit-transform:translateX(1.25rem);-moz-transform:translateX(1.25rem);-ms-transform:translateX(1.25rem);-o-transform:translateX(1.25rem)}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch.p-inputswitch-checked .p-inputswitch-slider{height:21px}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch{height:21px}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider:before{background:#fff;width:1rem;height:1.25rem;height:16px!important;left:.25rem;margin-top:-9px!important;margin-top:-.625rem;border-radius:50%;transition-duration:.2s}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch:not(.p-disabled) .p-inputswitch-slider{height:21px}:host ::ng-deep .p-cell-editing{padding-top:0!important;padding-bottom:0!important}:host ::ng-deep p-dropdown-item{font-size:.1rem}.text-aviso{color:red;font-size:.85rem;font-weight:400;width:500px}:host ::ng-deep .p-checkbox .p-checkbox-box{width:18px;height:18px}:host ::ng-deep .p-selectbutton .p-button{font-size:.75rem!important;height:24px;padding:11px}#btn-sizes{border-radius:50%;width:.5rem!important;height:.5rem!important;box-shadow:#0000003d 0 3px 8px}:host ::ng-deep .p-datatable.p-datatable-sm{font-size:.625rem!important}:host ::ng-deep .p-datatable.p-datatable-md{font-size:.75rem!important}:host ::ng-deep .p-datatable.p-datatable-lg{font-size:.875rem!important}:host ::ng-deep .p-datatable-sm-tr>td i>span.material-symbols-outlined{font-size:.9rem}:host ::ng-deep .p-datatable-sm-tr>td .check-edit-list>.p-checkbox .p-checkbox-box{width:15px;height:15px}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>div>.cellControl>.p-dropdown .p-dropdown-label{width:1%;padding-top:0;padding-bottom:0;font-size:.6rem}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>div>kv-input-text>span>.inputs{padding-top:0;padding-bottom:0;font-size:.6rem;height:1rem}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>div>.cellControl>span>p-inputmask>.inputs{height:1rem;padding-top:0;padding-bottom:0;font-size:.6rem}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>div>kv-switch>div>p-inputswitch>div,:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>kv-switch>div>p-inputswitch,:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider{height:.6rem!important;width:2.4rem}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider:before{background:#fff;width:.6rem!important;height:.6rem!important;left:.2rem;margin-top:-.35rem!important;border-radius:50%;transition-duration:.2s}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>div>kv-switch>div>p-inputswitch>div>span:before{background:#fff;width:.6rem!important;height:.6rem!important;left:.2rem;margin-top:-.35rem!important;border-radius:50%;transition-duration:.2s}:host ::ng-deep .p-datatable-md-tr>td i>span.material-symbols-outlined{font-size:1rem}:host ::ng-deep .p-datatable-md-tr>td .check-edit-list>.p-checkbox .p-checkbox-box{width:18px;height:18px}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>div>.cellControl>.p-dropdown .p-dropdown-label{width:1%;padding-top:0;padding-bottom:0;font-size:.7rem}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>div>kv-input-text>span>.inputs{padding-top:0;padding-bottom:0;font-size:.7rem;height:1rem}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>div>.cellControl>span>p-inputmask>.inputs{height:1rem;padding-top:0;padding-bottom:0;font-size:.7rem}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>div>kv-switch>div>p-inputswitch>div,:host ::ng-deep .p-datatable-md-tr>td p-celleditor>kv-switch>div>p-inputswitch,:host ::ng-deep .p-datatable-md-tr>td p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider{height:.83rem!important;width:2.7rem}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider:before{background:#fff;width:.7rem!important;height:.7rem!important;left:.25rem;margin-top:-.35rem!important;border-radius:50%;transition-duration:.2s}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>div>kv-switch>div>p-inputswitch>div>span:before{background:#fff;width:.7rem;height:.7rem;left:.25rem;margin-top:-.4rem;border-radius:50%;transition-duration:.2s}:host ::ng-deep .p-datatable-lg-tr>td i>span.material-symbols-outlined{font-size:1.1rem}:host ::ng-deep .p-datatable-lg-tr>td p-celleditor>div>kv-input-text>span>.inputs{padding-top:0;padding-bottom:0;font-size:.8rem;height:1rem}:host ::ng-deep .p-datatable-lg-tr>td p-celleditor>div>.cellControl>.p-dropdown .p-dropdown-label{padding-top:0;padding-bottom:0;font-size:.8rem}:host ::ng-deep .p-datatable-lg-tr>td p-celleditor>div>.cellControl>span>p-inputmask>.inputs{height:1rem;padding-top:0;padding-bottom:0;font-size:.8rem}:host ::ng-deep .p-datatable-sm-tr>td{padding-top:0!important;padding-top:.05rem!important;padding-bottom:.05rem!important}:host ::ng-deep .p-datatable-md-tr>td,:host ::ng-deep .p-datatable-lg-tr>td{padding:.15rem!important}.p-datatable.p-datatable-smth{font-size:.6rem!important}.p-datatable.p-datatable-dmth{font-size:.7rem!important}.p-datatable.p-datatable-lgth{font-size:.8rem!important}:host ::ng-deep .p-datatable.p-datatable-sm * p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options) p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options){height:15px!important}:host ::ng-deep .p-datatable.p-datatable-md * p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options) p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options){height:25px!important}:host ::ng-deep .p-datatable.p-datatable-lg * p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options) p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options){height:30px!important}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider{height:21px!important}:host ::ng-deep .teste>.p-button{background:#eaeaea!important;color:#a9a9a9;border:none;box-shadow:#0000003d 0 3px 8px;height:20px}::ng-deep .menuSizes>p-tieredmenusub>.p-tieredmenu-root-list>li:first-child{font-size:.6rem}::ng-deep .menuSizes>p-tieredmenusub>.p-tieredmenu-root-list>li:last-child{font-size:.8rem}.tag{width:5px;height:25px;border-radius:.25rem}:host ::ng-deep .p-speeddial-button.p-button.p-button-icon-only{width:2rem;height:2rem;font-size:1rem}.item-circle{width:4rem;height:2rem;padding:1rem;font-size:.8rem;border-radius:17%;display:flex;align-items:center;justify-content:center;background:#eaeaea!important;box-shadow:#0000003d 0 3px 13px}:host ::ng-deep p-speeddial>div>button>span.material-symbols-outlined.ng-star-inserted{font-size:1.1rem}:host ::ng-deep .check-edit-list>div.p-checkbox.p-component{height:1rem}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:first-child{border-left:1px solid #ddd!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:last-child{border-right:1px solid #ddd!important}:host ::ng-deep .p-datatable-wrapper::-webkit-scrollbar:hover{background-color:#dededebf}:host ::ng-deep .p-datatable-wrapper::-webkit-scrollbar{width:6px;height:3px}:host ::ng-deep .p-datatable-wrapper:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}:host ::ng-deep .p-datatable-wrapper::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}:host ::ng-deep .p-datatable-wrapper::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}:host ::ng-deep .p-datatable>.p-datatable-wrapper{overflow-y:hidden}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.AutoFocus, selector: "[pAutoFocus]", inputs: ["autofocus"] }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i6.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i7.ContextMenu, selector: "p-contextMenu", inputs: ["model", "triggerEvent", "target", "global", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "id", "ariaLabel", "ariaLabelledBy", "pressDelay"], outputs: ["onShow", "onHide"] }, { kind: "component", type: i8.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "directive", type: i9.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: i10.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "component", type: i11.Panel, selector: "p-panel", inputs: ["toggleable", "header", "collapsed", "style", "styleClass", "iconPos", "expandIcon", "collapseIcon", "showHeader", "toggler", "transitionOptions"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }, { kind: "directive", type: i12.Ripple, selector: "[pRipple]" }, { kind: "component", type: i13.TieredMenu, selector: "p-tieredMenu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "autoDisplay", "showTransitionOptions", "hideTransitionOptions", "id", "ariaLabel", "ariaLabelledBy", "disabled", "tabindex"], outputs: ["onShow", "onHide"] }, { kind: "component", type: i14.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: i14.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "directive", type: i14.ContextMenuRow, selector: "[pContextMenuRow]", inputs: ["pContextMenuRow", "pContextMenuRowIndex", "pContextMenuRowDisabled"] }, { kind: "directive", type: i14.ReorderableColumn, selector: "[pReorderableColumn]", inputs: ["pReorderableColumnDisabled"] }, { kind: "directive", type: i14.EditableColumn, selector: "[pEditableColumn]", inputs: ["pEditableColumn", "pEditableColumnField", "pEditableColumnRowIndex", "pEditableColumnDisabled", "pFocusCellSelector"] }, { kind: "component", type: i14.CellEditor, selector: "p-cellEditor" }, { kind: "component", type: i14.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i14.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i14.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "directive", type: i14.EditableRow, selector: "[pEditableRow]", inputs: ["pEditableRow", "pEditableRowDisabled"] }, { kind: "directive", type: i14.InitEditableRow, selector: "[pInitEditableRow]" }, { kind: "directive", type: i14.CancelEditableRow, selector: "[pCancelEditableRow]" }, { kind: "component", type: i15.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "directive", type: i16.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i16.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i16.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i17.KvInputCalendarComponent, selector: "kv-input-calendar", inputs: ["isYear", "isMonthYear", "minDate", "maxDate", "showButtonBar", "showIcon", "showTime", "selectionMode"], outputs: ["onSelectionChange", "onSelectionValue"] }, { kind: "component", type: i18.KvInputMaskComponent, selector: "kv-input-mask", inputs: ["mask"], outputs: ["onComplete"] }, { kind: "component", type: i19.KvInputNumberComponent, selector: "kv-input-number", inputs: ["mode", "digits", "min", "max", "suffix"] }, { kind: "component", type: i20.KvInputTextComponent, selector: "kv-input-text", inputs: ["textCaptalized"] }, { kind: "component", type: i21.KvSwitchComponent, selector: "kv-switch", inputs: ["readonly", "switchValue"], outputs: ["onSwitchChange"] }, { kind: "component", type: i22.KvButtonComponent, selector: "kv-button", inputs: ["label", "icon", "loading", "disabled", "severity", "size", "fullWidth"], outputs: ["onClick"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }, { kind: "pipe", type: i23.MaskPipe, name: "mask" }] }); }
|
|
309
307
|
}
|
|
310
308
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTableEditComponent, decorators: [{
|
|
311
309
|
type: Component,
|
|
312
|
-
args: [{ selector: 'kv-table-edit', template: "<div class=\"card\" id=\"tamanhotabela\" [style.font-size]=\"'1px'\">\n <p-toast></p-toast>\n\n <p-panel\n *ngIf=\"filtrosAvancados\"\n header=\"Filtros avan\u00E7ados\"\n [toggleable]=\"true\"\n [collapsed]=\"true\"\n (collapsedChange)=\"collapsed = !collapsed\"\n [style]=\"{ 'margin-bottom': '2px' }\"\n >\n <ng-template pTemplate=\"headericons\">\n <i *ngIf=\"!collapsed\" class=\"pi pi-filter\"></i>\n <!-- \u00CDcone quando o painel est\u00E1 aberto -->\n <i *ngIf=\"collapsed\" class=\"pi pi-minus\"></i>\n <!-- \u00CDcone quando o painel est\u00E1 fechado -->\n </ng-template>\n <ng-content></ng-content>\n </p-panel>\n\n <p-contextMenu #cm [model]=\"itemsContextMenu\"></p-contextMenu>\n <p-table\n #te\n [editMode]=\"editMode\"\n (onEditComplete)=\"onEditComplete($event)\"\n (onEditInit)=\"onEditInit($event)\"\n [reorderableColumns]=\"config.reorderableColumns || false\"\n *ngIf=\"config\"\n [value]=\"dataSource\"\n [dataKey]=\"config.dataKey\"\n [columns]=\"config.columns\"\n [scrollable]=\"true\"\n appendTo=\"body\"\n [styleClass]=\"selectedSize.class\"\n [(selection)]=\"selectedItems\"\n [rowSelectable]=\"isRowSelectable\"\n [globalFilterFields]=\"globalFilterFields\"\n [rows]=\"rows\"\n [paginator]=\"paginator\"\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"{first} - {last} de {totalRecords}\"\n (selectionChange)=\"selectionChange($event)\"\n [rowHover]=\"true\"\n [totalRecords]=\"totalRecords\"\n [lazy]=\"config.lazy\"\n (onLazyLoad)=\"paginate($event)\"\n [groupRowsBy]=\"config.fieldGroup\"\n paginatorDropdownAppendTo=\"body\"\n [showFirstLastIcon]=\"showFirstLastIcon\"\n [pageLinks]=\"pageLinksOptions\"\n [scrollable]=\"isTableScrollable\"\n [scrollHeight]=\"scrollHeight\"\n [rowTrackBy]=\"rowTrackBy\"\n [(contextMenuSelection)]=\"selectedProduct\"\n [contextMenu]=\"isEditableTable() ? cm : null\"\n >\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n\n <ng-template pTemplate=\"caption\" *ngIf=\"config.enableCation || enableSizes\">\n <div\n class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12\"\n >\n <div class=\"col-12 flex flex-column\">\n <div *ngIf=\"config.title\" class=\"text-md font-bold my-3\">\n {{ config.title }}\n </div>\n <div *ngIf=\"config.subtitle\" class=\"text-sm mb-4 font-medium\">\n {{ config.subtitle }}\n </div>\n </div>\n\n <div\n class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{\n tamanhoTela < 768 ? 'col-10' : 'col-12'\n }} mt-1 mb-2 \"\n >\n <span *ngIf=\"config.enableFilter\" class=\"p-input-icon-left\">\n <i class=\"pi pi-search\"></i>\n\n <input\n pInputText\n pAutoFocus\n [autofocus]=\"true\"\n type=\"text\"\n (input)=\"onGlobalFilter(te, $event)\"\n placeholder=\"Pesquisar...\"\n class=\"h-2rem\"\n />\n </span>\n\n <!-- FIXME: Op\u00E7\u00E3o 1 -->\n <!-- <div class=\"sizes-controls ml-2\" *ngIf=\"isShowSizes\">\n <p-selectButton\n [options]=\"sizes\"\n [(ngModel)]=\"selectedSize\"\n [style]=\"{'display': 'flex'}\"\n optionLabel=\"name\"\n />\n </div>\n <button\n id=\"btn-sizes\"\n pButton\n [pTooltip]=\"isShowSizes ? 'Esconder controles de tamanho' : 'Mostrar controles de tamanho'\"\n class=\"actionLoteBtns p-button-raised p-button-text\"\n (click)=\"isShowSizes = !isShowSizes\"\n >\n <span style=\"font-size: 0.8rem;\" class=\"flex align-items-end\">\n <span style=\"font-size: 0.7rem;\">\n A\n </span>\n A\n </span>\n </button> -->\n\n <!-- FIXME: Op\u00E7\u00E3o 2 -->\n <div *ngIf=\"enableSizes\" class=\"sizes-controls ml-2\">\n <!-- <p-splitButton\n label=\"aA\"\n [model]=\"sizes\"\n styleClass=\"teste\"\n [menuStyle]=\"{'font-size': '0.7rem'}\"\n\n ngModel\n >\n </p-splitButton> -->\n <!-- <p-button icon=\"pi pi-ellipsis-v\"/> -->\n\n <button\n id=\"actionLoteBtns\"\n pButton\n (click)=\"menu.toggle($event)\"\n class=\"actionLoteBtns p-button-raised p-button-text\"\n style=\"background-color: #1da750; color: #fff; display: flex\"\n >\n <span class=\"text-xs\">A</span>\n <span class=\"text-md\">A</span>\n </button>\n\n <p-tieredMenu\n [style]=\"{ 'font-size': '0.7rem' }\"\n styleClass=\"menuSizes\"\n appendTo=\"body\"\n #menu\n [model]=\"sizes\"\n [popup]=\"true\"\n >\n <ng-template let-item pTemplate=\"item\">\n <div\n class=\"cursor-pointer flex gap-2 align-items-center pl-1 m-2 menu-sizes\"\n (click)=\"item.command()\"\n >\n <div\n *ngIf=\"this.selectedSize.size != item.size\"\n class=\"tag\"\n [style.background-color]=\"'#EAEAEA'\"\n ></div>\n <div\n *ngIf=\"this.selectedSize.size == item.size\"\n class=\"tag\"\n [style.background-color]=\"'#1DA750'\"\n ></div>\n\n {{ item.label }}\n </div>\n </ng-template>\n </p-tieredMenu>\n </div>\n <!-- FIXME: Op\u00E7\u00E3o 3 -->\n <!-- <div class=\"sizes-controls ml-2\" style=\"transform: translate(0px, -15px);\" >\n <p-speedDial\n [model]=\"sizes\"\n showIcon=\"format_size\"\n [mask]=\"true\"\n direction=\"right\"\n buttonClassName=\"item-circle\"\n >\n\n\n\n\n <ng-template let-item pTemplate=\"item\" >\n <div class=\"item-circle cursor-pointer\n\n shadow-2 hover:shadow-8\n\n \" (click)=\"item.command()\">\n {{item.label}}\n </div>\n </ng-template>\n\n </p-speedDial>\n </div> -->\n </div>\n\n <span *ngIf=\"isEditing\" class=\"text-aviso\">\n Tabela em modo de edi\u00E7\u00E3o\n </span>\n\n <div class=\"flex flex-row col-1 justify-content-end\">\n <div\n *ngFor=\"let action of config.actionsLote\"\n class=\"btns-options flex flex-row\"\n >\n <button\n id=\"actionLoteBtns\"\n pButton\n *ngIf=\"\n !isEditing &&\n (selectedItems.length > 0 || action.showAcoesLote) &&\n exibirCampo(action, this.action)\n \"\n class=\"actionLoteBtns border-none\"\n style=\"background-color: #1da750\"\n (click)=\"action?.command(); activeItemLote(selectedItems)\"\n [pTooltip]=\"getOrExecute(action.tooltip, selectedItems)\"\n [tooltipPosition]=\"'bottom'\"\n [disabled]=\"getOrExecute(action.disabled, selectedItems)\"\n >\n <span\n class=\"material-symbols-outlined\"\n style=\"color: white\"\n >\n {{ getOrExecute(action.icon, selectedItems) }}\n </span>\n </button>\n </div>\n\n <div\n *ngIf=\"isEditableTable()\"\n class=\"btns-options\"\n [style]=\"{ 'margin-right': '7px' }\"\n >\n <button\n (click)=\"this.isEditing = !this.isEditing\"\n id=\"actionLoteBtns\"\n pButton\n [pTooltip]=\"!isEditing ? 'Habilitar Edi\u00E7\u00E3o' : 'Desabilitar Edi\u00E7\u00E3o'\"\n [tooltipPosition]=\"'left'\"\n style=\"background-color: #1da750; color: #fff\"\n class=\"actionLoteBtns p-button-raised p-button-text\"\n >\n <span class=\"material-symbols-outlined\"> edit_square </span>\n </button>\n </div>\n </div>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th\n style=\"width: 4rem; border-left: solid 4px transparent\"\n *ngIf=\"config.enableSelect && !isEditing\"\n [class]=\"selectedSize.class + 'th'\"\n >\n <p-tableHeaderCheckbox\n (click)=\"activeItemLote(selectedItems)\"\n ></p-tableHeaderCheckbox>\n </th>\n\n <th\n *ngFor=\"let col of columns\"\n [pSortableColumn]=\"col.field\"\n [pSortableColumnDisabled]=\"col.sortable === false\"\n [style.min-width]=\"col.width * selectedSize.size + 'px'\"\n pReorderableColumn\n [class]=\"selectedSize.class + 'th'\"\n >\n <div\n [class]=\"\n centralizarColunas(col) && alignColunasHeader(col) == ''\n ? 'flex flex-row justify-content-center'\n : 'flex flex-row'\n \"\n [style]=\"alignColunasHeader(col)\"\n >\n <span>{{ col.header }}</span>\n <p-sortIcon\n *ngIf=\"col.sortable === true\"\n [field]=\"col.field\"\n style=\"font-size: 10px\"\n ></p-sortIcon>\n\n <span\n *ngIf=\"col.headerTooltip\"\n class=\"material-symbols-outlined flex align-items-center\"\n [pTooltip]=\"col.headerTooltip\"\n >info</span\n >\n </div>\n </th>\n <th\n *ngIf=\"!isEditing && config.actions && config.actions.length > 0\"\n ></th>\n <th\n *ngIf=\"isEditableTable() && this.editMode == 'row'\"\n id=\"th-edit\"\n style=\"width: 20px\"\n >\n Editar\n </th>\n </tr>\n </ng-template>\n\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n\n <ng-template\n pTemplate=\"body\"\n let-rowData\n let-editing=\"editing\"\n let-ri=\"rowIndex\"\n let-columns=\"columns\"\n let-rowgroup=\"rowgroup\"\n let-rowspan=\"rowspan\"\n >\n <tr\n [pEditableRow]=\"rowData\"\n [pEditableRowDisabled]=\"false\"\n [pContextMenuRow]=\"{rowData, editing}\"\n [class]=\"selectedSize.class + '-tr'\"\n >\n <td\n *ngIf=\"config.enableSelect && !isEditing\"\n [style]=\"applyStyle(rowData, { field: 'check-box', header: '' })\"\n >\n <!--<p-tableCheckbox *ngIf=\"isVisibleCheckbox(rowData)\"-->\n <p-tableCheckbox\n class=\"check-edit-list\"\n [value]=\"rowData\"\n [disabled]=\"isDisabledCheckbox(rowData)\"\n (click)=\"activeItemLote(selectedItems)\"\n ></p-tableCheckbox>\n </td>\n\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <!-- FIXME: Testar a implementa\u00E7\u00E3o abaixo e mesaclar as duas formas -->\n\n <ng-template #templateInput let-rowData=\"rowData\" let-col=\"col\">\n <ng-container *ngIf=\"isEditing; else templatevisualedicao\">\n <ng-container [ngSwitch]=\"col.fieldControlType\">\n <ng-container *ngSwitchCase=\"'text'\">\n <div [style.width]=\"col.width\" class=\"grid formgrid p-fluid\">\n <kv-input-text\n [disabled]=\"isDisableEditRowCellFunction(rowData, col)\"\n class=\"cellControl col\"\n [(ngModel)]=\"rowData[col.field]\"\n [required]=\"col.required ?? true\"\n ></kv-input-text>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'number'\">\n <div [style.width]=\"col.width\" class=\"grid formgrid p-fluid\">\n <kv-input-number\n [disabled]=\"isDisableEditRowCellFunction(rowData, col)\"\n class=\"cellControl col\"\n [(ngModel)]=\"rowData[col.field]\"\n [required]=\"col.required ?? true\"\n ></kv-input-number>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'mask'\">\n <div [style.width]=\"col.width\" class=\"grid formgrid p-fluid\">\n <kv-input-mask\n [disabled]=\"isDisableEditRowCellFunction(rowData, col)\"\n class=\"cellControl col\"\n [mask]=\"col.mask\"\n [required]=\"col.required ?? true\"\n [(ngModel)]=\"rowData[col.field]\"\n ></kv-input-mask>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'switch'\">\n <div [style.width]=\"col.width\" class=\"grid formgrid p-fluid\">\n <kv-switch\n [disabled]=\"isDisableEditRowCellFunction(rowData, col)\"\n class=\"cellControl col\"\n [(ngModel)]=\"rowData[col.field]\"\n ></kv-switch>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'calendar'\">\n <div [style.width]=\"col.width\">\n <div\n [style.width]=\"col.width\"\n class=\"grid formgrid p-fluid\"\n >\n <kv-input-calendar\n class=\"cellControl col\"\n [(ngModel)]=\"rowData[col.field]\"\n ></kv-input-calendar>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'dropdown'\">\n <div [style.width]=\"col.width\" class=\"grid formgrid p-fluid\">\n <p-dropdown\n [disabled]=\"isDisableEditRowCellFunction(rowData, col)\"\n class=\"cellControl col\"\n appendTo=\"body\"\n [panelStyle]=\"{ 'font-size': '0.75rem' }\"\n [optionLabel]=\"col.fieldDropDownControl.descricaoobjeto\"\n [optionValue]=\"col.fieldDropDownControl.idobjeto\"\n [options]=\"\n col.fieldDropDownControl.fieldControlDropdownSource\n \"\n [(ngModel)]=\"rowData[col.field]\"\n >\n </p-dropdown>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-template #templatevisualedicao>\n <ng-container\n *ngTemplateOutlet=\"\n templateOutput;\n context: { rowData: rowData, col: col }\n \"\n ></ng-container>\n </ng-template>\n </ng-template>\n\n <ng-template #templateOutput let-rowData=\"rowData\" let-col=\"col\">\n <ng-container [ngSwitch]=\"col.fieldControlType\">\n <ng-container *ngSwitchCase=\"'dropdown'\">\n <ng-container *ngIf=\"rowData[col.field]\">\n {{ transformValueDrop(retornaDescricaoDrop(rowData, col), col) }}\n <!-- {{rowData[col.field]}} -->\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'switch'\">\n <kv-switch\n [(ngModel)]=\"rowData[col.field]\"\n [disabled]=\"true\"\n ></kv-switch>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'calendar'\">\n {{ rowData[col.field] | date }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'mask'\">\n {{ rowData[col.field] | mask : col.mask }}\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n {{ transformValue(rowData, col) }}\n </ng-container>\n </ng-container>\n </ng-template>\n\n <td\n *ngIf=\"editMode == 'cell' && col.fieldControlType\"\n [pEditableColumn]=\"rowData\"\n [pEditableColumnField]=\"col.field\"\n [pEditableColumnRowIndex]=\"rowData[config.dataKey]\"\n [id]=\"'rowTable' + rowData[config.dataKey]\"\n (click)=\"activeItem(rowData)\"\n (dblclick)=\"dbClickEdit()\"\n class=\"rowTable\"\n [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \"\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\n >\n <p-cellEditor>\n <ng-container>\n <ng-template pTemplate=\"input\">\n <ng-container\n *ngTemplateOutlet=\"\n templateInput;\n context: { rowData: rowData, col: col }\n \"\n ></ng-container>\n </ng-template>\n\n <ng-template pTemplate=\"output\">\n <ng-container\n *ngTemplateOutlet=\"\n templateOutput;\n context: { rowData: rowData, col: col }\n \"\n ></ng-container>\n </ng-template>\n </ng-container>\n\n <!-- <ng-template *ngIf=\"!isEditing\" pTemplate=\"input\">\n <ng-container *ngTemplateOutlet=\"templateInput; context: { rowData: rowData, col: col }\"></ng-container>\n </ng-template>\n\n <ng-template *ngIf=\"isEditing\" pTemplate=\"output\">\n <ng-container *ngTemplateOutlet=\"templateOutput; context: { rowData: rowData, col: col }\"></ng-container>\n </ng-template> -->\n </p-cellEditor>\n </td>\n\n <!-- NOTE: Edi\u00E7\u00E3o de linha -->\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n\n <!-- Celula que armazena os controles de edi\u00E7\u00E3o para os campos -->\n <td\n *ngIf=\"false && col.fieldControlType && editMode == 'row'\"\n [id]=\"'rowTable' + rowData[config.dataKey]\"\n (click)=\"activeItem(rowData)\"\n (dblclick)=\"dbClickEdit()\"\n class=\"rowTable\"\n [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \"\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\n >\n <p-cellEditor\n [ngClass]=\"{ switch: col.fieldControlType == 'switch' }\"\n >\n <ng-template pTemplate=\"input\">\n <ng-container\n *ngTemplateOutlet=\"\n templateInput;\n context: { rowData: rowData, col: col }\n \"\n ></ng-container>\n </ng-template>\n\n <ng-template pTemplate=\"output\">\n <ng-container\n *ngTemplateOutlet=\"\n templateOutput;\n context: { rowData: rowData, col: col }\n \"\n ></ng-container>\n </ng-template>\n </p-cellEditor>\n </td>\n\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n\n <td\n *ngIf=\"rowgroup && !col.template\"\n [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\n class=\"rowTable\"\n [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \"\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\n >\n <span class=\"p-column-title\">{{ col.header }}:</span>\n\n <span\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\n [class]=\"returnRowClass(rowData, col)\"\n >\n <span\n *ngIf=\"\n !isChipField(col) && !col.iconField && !isImageField(col)\n \"\n >\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\n {{ transformValue(rowData, col) }}\n </span>\n\n <div *ngIf=\"isChipField(col) && !col.iconField\">\n <span\n [class]=\"returnClassChip(rowData, col)\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >{{ transformValue(rowData, col) }}</span\n >\n </div>\n </span>\n\n <span *ngIf=\"isImageField(col)\">\n <span>\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\n </span>\n </span>\n\n <i\n *ngIf=\"col.iconField\"\n [ngClass]=\"{\n 'material-icons': col.indIconMaterial,\n 'material-symbols-outlined mr-2': !col.indIconMaterial\n }\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >\n {{ returnClassIcon(rowData, col) }}\n </i>\n\n <ng-template #booleanField>\n <i\n *ngIf=\"!col.iconField && !isSwitchField(col)\"\n [ngClass]=\"\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\n \"\n ><span class=\"material-symbols-outlined\">\n {{ rowData[col.field] ? \"check\" : \"close\" }}\n </span>\n </i>\n\n <span\n *ngIf=\"isSwitchField(col)\"\n [class]=\"returnRowClass(rowData, col)\"\n >\n <kv-switch\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\n [disabled]=\"col?.onlyReadField ?? true\"\n [switchValue]=\"transformValue(rowData, col)\"\n >\n </kv-switch>\n </span>\n </ng-template>\n </td>\n\n <td\n *ngIf=\"\n !rowgroup &&\n !col.grouped &&\n !col.template &&\n !col.fieldControlType\n \"\n [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \"\n class=\"rowTable\"\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\n >\n <span class=\"p-column-title\">{{ col.header }}:</span>\n\n <span\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\n [class]=\"returnRowClass(rowData, col)\"\n >\n <span\n *ngIf=\"\n !isChipField(col) && !col.iconField && !isImageField(col)\n \"\n >\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\n {{ transformValue(rowData, col) }}\n </span>\n\n <div *ngIf=\"isChipField(col) && !col.iconField\">\n <span\n [class]=\"returnClassChip(rowData, col)\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >\n {{ transformValue(rowData, col) }}</span\n >\n </div>\n </span>\n\n <span *ngIf=\"isImageField(col)\">\n <span>\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\n </span>\n </span>\n\n <i\n *ngIf=\"col.iconField\"\n [ngClass]=\"{\n 'material-icons': col.indIconMaterial,\n 'material-symbols-outlined mr-2': !col.indIconMaterial\n }\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >\n {{ returnClassIcon(rowData, col) }}\n </i>\n\n <ng-template #booleanField>\n <i\n *ngIf=\"!col.iconField && !isSwitchField(col)\"\n [ngClass]=\"\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\n \"\n ><span class=\"material-symbols-outlined\">\n {{ rowData[col.field] ? \"check\" : \"close\" }}\n </span>\n </i>\n\n <span\n *ngIf=\"isSwitchField(col)\"\n [class]=\"returnRowClass(rowData, col)\"\n >\n <kv-switch\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\n [disabled]=\"col?.onlyReadField ?? true\"\n [switchValue]=\"transformValue(rowData, col)\"\n >\n </kv-switch>\n </span>\n </ng-template>\n </td>\n\n <td\n *ngIf=\"col.template && !isEditableTable()\"\n [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \"\n class=\"rowTable\"\n >\n <span class=\"p-column-title\">{{ col.header }}:</span>\n <ng-container\n *ngIf=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\n >\n </ng-container>\n </td>\n </ng-container>\n\n <!-- ------------------------------------------------------------------------------------------------------------------------------------------- -->\n <!-- Controle de a\u00E7\u00E3o -->\n <td\n [ngClass]=\"{\n 'td-tools': isEditableTable() && this.editMode == 'row',\n 'td-tools-sticky': !isEditableTable() || this.editMode == 'cell'\n }\"\n *ngIf=\"!isEditing && config.actions && config.actions.length > 0\"\n [style]=\"\n applyStyle(rowData, { field: 'btns-options', header: '' }) +\n 'border-right: 1px solid #ddd !important; border-left: 1px solid #ddd !important;'\n \"\n >\n <div class=\"flex flex-row justify-content-end w-full\">\n <!-- <button\n id=\"moreVertBtn\"\n pButton\n class=\"actionBtns p-button-text p-button-raised\"\n (click)=\"menu.toggle($event); activeItem(rowData)\"\n > -->\n <span\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz\"\n style=\"font-size: 1rem; height: 10px; width: 20px\"\n (click)=\"menu.toggle($event); activeItem(rowData)\"\n >\n more_horiz\n </span>\n <!-- </button> -->\n\n <div *ngFor=\"let action of config.actions\">\n {{ criarMenusModal(rowData) }}\n </div>\n\n <!-- <div *ngFor=\"let action of config.actions\">\n {{ criarMenusModal(rowData) }}\n </div> -->\n\n <p-menu\n #menu\n [popup]=\"true\"\n [model]=\"menuItems\"\n appendTo=\"body\"\n ></p-menu>\n </div>\n </td>\n\n <!-- <td\n class=\"td-tools\"\n *ngIf=\"!isEditing && config.actions && config.actions.length > 0\"\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\"\n >\n </td> -->\n\n <!-- ------------------------------------------------------------------------------------------------------------------------------------------- -->\n <!-- Controle de edi\u00E7\u00E3o -->\n <td\n class=\"td-edit\"\n *ngIf=\"this.isEditableTable() && this.editMode == 'row'\"\n >\n <div class=\"flex align-items-center justify-content-center gap-2\">\n <button\n [style.height]=\"'28px'\"\n [id]=\"'rowEdit' + rowData[config.dataKey]\"\n [style.width]=\"'28px'\"\n [disabled]=\"isDisableEditRowFunction(rowData)\"\n *ngIf=\"!editing\"\n pButton\n pRipple\n type=\"button\"\n pInitEditableRow\n icon=\"pi pi-pencil\"\n (click)=\"onRowEditInit(rowData)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n <!-- <button [style.height]=\"'28px'\" [style.width]=\"'28px'\" [disabled]=\"isDisableEditRowFunction(rowData)\" *ngIf=\"editing\" pButton pRipple type=\"button\" pSaveEditableRow icon=\"pi pi-check\"\n (click)=\"onRowEditSave(rowData, ri)\" [id]=\"'rowSave' + rowData[config.dataKey] \" class=\"p-button-rounded p-button-text p-button-success mr-2\"></button> -->\n <button\n [style.height]=\"'28px'\"\n [style.width]=\"'28px'\"\n [disabled]=\"isDisableEditRowFunction(rowData)\"\n *ngIf=\"editing\"\n pButton\n pRipple\n type=\"button\"\n pCancelEditableRow\n icon=\"pi pi-times\"\n (click)=\"onRowEditCancel(rowData, ri)\"\n [id]=\"'rowCancel' + rowData[config.dataKey]\"\n class=\"p-button-rounded p-button-text p-button-danger\"\n ></button>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n</div>\n", styles: ["@charset \"UTF-8\";.td-edit{position:sticky;right:-1px;background-color:#fff;color:#5289b4}.td-tools{position:sticky;right:52px;border-right:1px solid #ddd!important;background-color:#fff;box-shadow:-5px 0 20px -10px #000000bf}.td-tools-sticky{position:sticky;right:0;border-right:3px solid #fff!important;background-color:#fff}#th-edit{position:sticky;right:0;background-color:#eaeaea}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td{text-align:center;border:1px solid #eaeaea;border-width:1px 1px;padding:0rem .5rem}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th{text-align:center;padding:0rem .5rem;border-left:none;border-right:none;border-width:1px 1px;font-weight:700;color:#343a40;background:#eaeaea;transition:box-shadow .2s}.error-show{background-color:red;width:5px;height:10px}.btns-options{position:relative;left:20px}.chip-style{border:solid 1px}:host::ng-deep .p-card .p-card-content{padding:0}.material-symbols-outlined.md-19{font-size:15px}.material-symbols-outlined.md-22{font-size:19px}.checkbox-container{display:flex;align-items:center;gap:2px;margin-top:5px}#botaoFiltro:hover{color:#a9a9a9}.actionLoteBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;font-size:16px;width:2rem;height:2rem;top:2px;margin-left:.5rem;justify-content:center;text-decoration:none;text-align:justify;padding:12px}:host ::ng-deep .center{display:flex;align-items:center;justify-content:center}#actionLoteBtns:hover,.actionLoteBtns:hover{background-color:#29b92d!important}.actionBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;width:.8rem;height:.8rem;margin-left:.22rem;justify-content:center;text-decoration:none;text-align:justify;padding:11px}:host::ng-deep .material-symbols-outlined{font-family:Material Symbols Outlined;font-weight:400;font-style:normal;line-height:.9;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}#actionBtns:hover{color:#a9a9a9}.image{border-style:solid;border-width:3.5px;border-color:#5289b4;border-radius:100%;height:55px;width:55px;padding:0;margin:0;vertical-align:middle}:host ::ng-deep .p-datatable-header{background-color:#eaeaea!important;padding:2px 13px 0!important;border-radius:5px!important}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th{background-color:#eaeaea!important}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th:first-of-type{border-radius:5px 0 0 5px}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th:last-child{border-radius:0 5px 5px 0}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td{border-left:none!important;border-right:none!important}:host ::ng-deep .actionBtns,:host ::ng-deep .actionLoteBtns{border-radius:20%;width:1.625rem!important;height:1.625rem!important;box-shadow:#0000003d 0 3px 8px}.icon-more-horiz:hover,.icon-more-horiz:focus{color:#5e5e5e;transform:scale(1.1);transition:color .3s,transform .3s}@media only screen and (min-width: 768px){.actionLoteBtns{top:-1px}}@media only screen and (max-width: 960px){:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:has(p-tablecheckbox){border-bottom:0px!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:has(img){justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:has(img) .p-column-title{display:none!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:last-child{border-bottom:1px solid #ddd!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:last-child div{justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td .p-column-title{font-weight:600}}::ng-deep .p-panel.p-panel-toggleable .p-panel-header{background-color:#eaeaea!important}::ng-deep .field.grid,.formgrid.grid{padding:0rem!important}@media screen and (min-width: 961px){.moreVertBtn{position:relative;right:3px}}::ng-deep .p-datatable .p-datatable-thead>tr>th:last-of-type{border-radius:0 0 5px!important;-webkit-border-radius:0px 0px 5px 0px!important;-moz-border-radius:0px 0px 5px 0px!important;-ms-border-radius:0px 0px 5px 0px!important;-o-border-radius:0px 0px 5px 0px!important}::ng-deep .p-datatable .p-datatable-thead>tr>th:first-of-type{border-radius:0 0 0 5px!important;-webkit-border-radius:0px 0px 0px 5px!important;-moz-border-radius:0px 0px 0px 5px!important;-ms-border-radius:0px 0px 0px 5px!important;-o-border-radius:0px 0px 0px 5px!important}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch.p-inputswitch-checked .p-inputswitch-slider:before{transform:translate(1.25rem);height:15px;margin-top:-8px;-webkit-transform:translateX(1.25rem);-moz-transform:translateX(1.25rem);-ms-transform:translateX(1.25rem);-o-transform:translateX(1.25rem)}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch.p-inputswitch-checked .p-inputswitch-slider{height:21px}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch{height:21px}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider:before{background:#fff;width:1rem;height:1.25rem;height:16px!important;left:.25rem;margin-top:-9px!important;margin-top:-.625rem;border-radius:50%;transition-duration:.2s}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch:not(.p-disabled) .p-inputswitch-slider{height:21px}:host ::ng-deep .p-cell-editing{padding-top:0!important;padding-bottom:0!important}:host ::ng-deep p-dropdown-item{font-size:.1rem}.text-aviso{color:red;font-size:.85rem;font-weight:400;width:500px}:host ::ng-deep .p-checkbox .p-checkbox-box{width:18px;height:18px}:host ::ng-deep .p-selectbutton .p-button{font-size:.75rem!important;height:24px;padding:11px}#btn-sizes{border-radius:50%;width:.5rem!important;height:.5rem!important;box-shadow:#0000003d 0 3px 8px}:host ::ng-deep .p-datatable.p-datatable-sm{font-size:.625rem!important}:host ::ng-deep .p-datatable.p-datatable-md{font-size:.75rem!important}:host ::ng-deep .p-datatable.p-datatable-lg{font-size:.875rem!important}:host ::ng-deep .p-datatable-sm-tr>td i>span.material-symbols-outlined{font-size:.9rem}:host ::ng-deep .p-datatable-sm-tr>td .check-edit-list>.p-checkbox .p-checkbox-box{width:15px;height:15px}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>div>.cellControl>.p-dropdown .p-dropdown-label{width:1%;padding-top:0;padding-bottom:0;font-size:.6rem}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>div>kv-input-text>span>.inputs{padding-top:0;padding-bottom:0;font-size:.6rem;height:1rem}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>div>.cellControl>span>p-inputmask>.inputs{height:1rem;padding-top:0;padding-bottom:0;font-size:.6rem}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>div>kv-switch>div>p-inputswitch>div,:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>kv-switch>div>p-inputswitch,:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider{height:.6rem!important;width:2.4rem}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider:before{background:#fff;width:.6rem!important;height:.6rem!important;left:.2rem;margin-top:-.35rem!important;border-radius:50%;transition-duration:.2s}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>div>kv-switch>div>p-inputswitch>div>span:before{background:#fff;width:.6rem!important;height:.6rem!important;left:.2rem;margin-top:-.35rem!important;border-radius:50%;transition-duration:.2s}:host ::ng-deep .p-datatable-md-tr>td i>span.material-symbols-outlined{font-size:1rem}:host ::ng-deep .p-datatable-md-tr>td .check-edit-list>.p-checkbox .p-checkbox-box{width:18px;height:18px}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>div>.cellControl>.p-dropdown .p-dropdown-label{width:1%;padding-top:0;padding-bottom:0;font-size:.7rem}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>div>kv-input-text>span>.inputs{padding-top:0;padding-bottom:0;font-size:.7rem;height:1rem}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>div>.cellControl>span>p-inputmask>.inputs{height:1rem;padding-top:0;padding-bottom:0;font-size:.7rem}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>div>kv-switch>div>p-inputswitch>div,:host ::ng-deep .p-datatable-md-tr>td p-celleditor>kv-switch>div>p-inputswitch,:host ::ng-deep .p-datatable-md-tr>td p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider{height:.83rem!important;width:2.7rem}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider:before{background:#fff;width:.7rem!important;height:.7rem!important;left:.25rem;margin-top:-.35rem!important;border-radius:50%;transition-duration:.2s}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>div>kv-switch>div>p-inputswitch>div>span:before{background:#fff;width:.7rem;height:.7rem;left:.25rem;margin-top:-.4rem;border-radius:50%;transition-duration:.2s}:host ::ng-deep .p-datatable-lg-tr>td i>span.material-symbols-outlined{font-size:1.1rem}:host ::ng-deep .p-datatable-lg-tr>td p-celleditor>div>kv-input-text>span>.inputs{padding-top:0;padding-bottom:0;font-size:.8rem;height:1rem}:host ::ng-deep .p-datatable-lg-tr>td p-celleditor>div>.cellControl>.p-dropdown .p-dropdown-label{padding-top:0;padding-bottom:0;font-size:.8rem}:host ::ng-deep .p-datatable-lg-tr>td p-celleditor>div>.cellControl>span>p-inputmask>.inputs{height:1rem;padding-top:0;padding-bottom:0;font-size:.8rem}:host ::ng-deep .p-datatable-sm-tr>td{padding-top:0!important;padding-top:.05rem!important;padding-bottom:.05rem!important}:host ::ng-deep .p-datatable-md-tr>td,:host ::ng-deep .p-datatable-lg-tr>td{padding:.15rem!important}.p-datatable.p-datatable-smth{font-size:.6rem!important}.p-datatable.p-datatable-dmth{font-size:.7rem!important}.p-datatable.p-datatable-lgth{font-size:.8rem!important}:host ::ng-deep .p-datatable.p-datatable-sm * p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options) p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options){height:15px!important}:host ::ng-deep .p-datatable.p-datatable-md * p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options) p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options){height:25px!important}:host ::ng-deep .p-datatable.p-datatable-lg * p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options) p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options){height:30px!important}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider{height:21px!important}:host ::ng-deep .teste>.p-button{background:#eaeaea!important;color:#a9a9a9;border:none;box-shadow:#0000003d 0 3px 8px;height:20px}::ng-deep .menuSizes>p-tieredmenusub>.p-tieredmenu-root-list>li:first-child{font-size:.6rem}::ng-deep .menuSizes>p-tieredmenusub>.p-tieredmenu-root-list>li:last-child{font-size:.8rem}.tag{width:5px;height:25px;border-radius:.25rem}:host ::ng-deep .p-speeddial-button.p-button.p-button-icon-only{width:2rem;height:2rem;font-size:1rem}.item-circle{width:4rem;height:2rem;padding:1rem;font-size:.8rem;border-radius:17%;display:flex;align-items:center;justify-content:center;background:#eaeaea!important;box-shadow:#0000003d 0 3px 13px}:host ::ng-deep p-speeddial>div>button>span.material-symbols-outlined.ng-star-inserted{font-size:1.1rem}:host ::ng-deep .check-edit-list>div.p-checkbox.p-component{height:1rem}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:first-child{border-left:1px solid #ddd!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:last-child{border-right:1px solid #ddd!important}:host ::ng-deep .p-datatable-wrapper::-webkit-scrollbar:hover{background-color:#dededebf}:host ::ng-deep .p-datatable-wrapper::-webkit-scrollbar{width:6px;height:3px}:host ::ng-deep .p-datatable-wrapper:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}:host ::ng-deep .p-datatable-wrapper::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}:host ::ng-deep .p-datatable-wrapper::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}:host ::ng-deep .p-datatable>.p-datatable-wrapper{overflow-y:hidden}\n"] }]
|
|
310
|
+
args: [{ selector: 'kv-table-edit', template: "<div class=\"card\" id=\"tamanhotabela\" [style.font-size]=\"'1px'\">\r\n <p-toast></p-toast>\r\n\r\n @if(filtrosAvancados){\r\n <p-panel\r\n header=\"Filtros avan\u00E7ados\"\r\n [toggleable]=\"true\"\r\n [collapsed]=\"true\"\r\n (collapsedChange)=\"collapsed = !collapsed\"\r\n [style]=\"{ 'margin-bottom': '2px' }\"\r\n >\r\n <ng-template pTemplate=\"headericons\">\r\n @if (!collapsed) {\r\n <i class=\"pi pi-filter\"></i>\r\n }\r\n <!-- \u00CDcone quando o painel est\u00E1 aberto -->\r\n @if (collapsed) {\r\n <i class=\"pi pi-minus\"></i>\r\n }\r\n <!-- \u00CDcone quando o painel est\u00E1 fechado -->\r\n </ng-template>\r\n <ng-content></ng-content>\r\n </p-panel>\r\n }\r\n\r\n <p-contextMenu #cm [model]=\"itemsContextMenu\"></p-contextMenu>\r\n <p-table\r\n #te\r\n [editMode]=\"editMode\"\r\n (onEditComplete)=\"onEditComplete($event)\"\r\n (onEditInit)=\"onEditInit($event)\"\r\n [reorderableColumns]=\"config.reorderableColumns || false\"\r\n *ngIf=\"config\"\r\n [value]=\"dataSource\"\r\n [dataKey]=\"config.dataKey\"\r\n [columns]=\"config.columns\"\r\n [scrollable]=\"true\"\r\n appendTo=\"body\"\r\n [styleClass]=\"selectedSize.class\"\r\n [(selection)]=\"selectedItems\"\r\n [rowSelectable]=\"isRowSelectable\"\r\n [globalFilterFields]=\"globalFilterFields\"\r\n [rows]=\"rows\"\r\n [paginator]=\"paginator\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{first} - {last} de {totalRecords}\"\r\n (selectionChange)=\"selectionChange($event)\"\r\n [rowHover]=\"true\"\r\n [totalRecords]=\"totalRecords\"\r\n [lazy]=\"config.lazy\"\r\n (onLazyLoad)=\"paginate($event)\"\r\n [groupRowsBy]=\"config.fieldGroup\"\r\n paginatorDropdownAppendTo=\"body\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [pageLinks]=\"pageLinksOptions\"\r\n [scrollable]=\"isTableScrollable\"\r\n [scrollHeight]=\"scrollHeight\"\r\n [rowTrackBy]=\"rowTrackBy\"\r\n [(contextMenuSelection)]=\"selectedProduct\"\r\n [contextMenu]=\"isEditableTable() ? cm : null\"\r\n >\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n @if (config.enableCation || enableSizes){\r\n <ng-template pTemplate=\"caption\">\r\n <div\r\n class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12 pt-1 pb-1 m-0\"\r\n >\r\n <div class=\"col-12 flex flex-column\">\r\n @if (config.title) {\r\n <div class=\"text-md font-bold my-3\">\r\n {{ config.title }}\r\n </div>\r\n } @if (config.subtitle) {\r\n <div class=\"text-sm mb-4 font-medium\">\r\n {{ config.subtitle }}\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{\r\n tamanhoTela < 768 ? 'col-10' : 'col-12'\r\n }} mt-1 mb-2 gap-1\"\r\n >\r\n \r\n @if (config.enableFilter) {\r\n <span class=\"p-input-icon-left\">\r\n <i class=\"pi pi-search\"></i>\r\n \r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"true\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(te, $event)\"\r\n placeholder=\"Pesquisar...\"\r\n class=\"h-2rem\"\r\n autocomplete=\"off\"\r\n />\r\n </span>\r\n }\r\n\r\n @if(enableSizes){\r\n <div class=\"sizes-controls\">\r\n \r\n <kv-button (click)=\"menu.toggle($event)\"\r\n [severity]=\"'tertiary'\"\r\n [icon]=\"'match_case'\"\r\n [pTooltip]=\"'Tamanho da fonte'\"\r\n >\r\n </kv-button>\r\n \r\n <p-tieredMenu\r\n [style]=\"{ 'font-size': '0.7rem' }\"\r\n styleClass=\"menuSizes\"\r\n appendTo=\"body\"\r\n #menu\r\n [model]=\"sizes\"\r\n [popup]=\"true\"\r\n >\r\n <ng-template let-item pTemplate=\"item\">\r\n <div\r\n class=\"cursor-pointer flex gap-2 align-items-center pl-1 m-2 menu-sizes\"\r\n (click)=\"item.command()\"\r\n >\r\n @if(this.selectedSize.size != item.size){\r\n <div\r\n class=\"tag\"\r\n [style.background-color]=\"'#EAEAEA'\"\r\n ></div>\r\n }\r\n \r\n @if(this.selectedSize.size == item.size){\r\n <div\r\n class=\"tag\"\r\n [style.background-color]=\"'#1DA750'\"\r\n ></div>\r\n }\r\n \r\n {{ item.label }}\r\n </div>\r\n </ng-template>\r\n </p-tieredMenu>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if(isEditing){\r\n <span class=\"text-aviso\">\r\n Tabela em modo de edi\u00E7\u00E3o\r\n </span>\r\n }\r\n \r\n <div class=\"flex flex-row col-2 justify-content-end gap-2\">\r\n @for (action of config.actionsLote; track i; let i = $index) {\r\n @if(!isEditing){\r\n <div class=\"flex align-items-center justify-content-center\">\r\n @if ((selectedItems.length > 0 || action.showAcoesLote) &&\r\n (getOrExecute(action.visible, selectedItems) ?? true)) {\r\n <kv-button\r\n (onClick)=\"action?.command(); activeItemLote(selectedItems)\"\r\n [pTooltip]=\"getOrExecute(action.tooltip, selectedItems)\"\r\n [tooltipPosition]=\"\r\n (getOrExecute(action.tooltip, selectedItems)?.length ??\r\n 0 > 7) &&\r\n config.actionsLote &&\r\n i == config.actionsLote.length - 1\r\n ? 'left'\r\n : 'bottom'\r\n \"\r\n [disabled]=\"getOrExecute(action.disabled, selectedItems) || false\"\r\n [icon]=\"getOrExecute(action.icon, selectedItems)\"\r\n [severity]=\"action.severity || 'tertiary'\"\r\n />\r\n }\r\n </div>\r\n }\r\n }\r\n\r\n @if (isEditableTable()) {\r\n <div>\r\n <kv-button\r\n (click)=\"this.isEditing = !this.isEditing\"\r\n [pTooltip]=\"!isEditing ? 'Habilitar Edi\u00E7\u00E3o' : 'Desabilitar Edi\u00E7\u00E3o'\"\r\n [tooltipPosition]=\"'left'\"\r\n [severity]=\"'tertiary'\"\r\n [icon]=\"'edit_square'\"\r\n >\r\n </kv-button>\r\n </div>\r\n }\r\n </div>\r\n\r\n <!---------------->\r\n \r\n </div>\r\n </ng-template>\r\n }\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @if(config.enableSelect && !isEditing){\r\n <th\r\n [class]=\"selectedSize.class + 'th'\"\r\n >\r\n <p-tableHeaderCheckbox\r\n (click)=\"activeItemLote(selectedItems)\"\r\n ></p-tableHeaderCheckbox>\r\n </th>\r\n }\r\n @for(col of columns; track $index){\r\n <th\r\n [pSortableColumn]=\"col.field\"\r\n [pSortableColumnDisabled]=\"col.sortable === false\"\r\n [style.min-width]=\"col.width * selectedSize.size + 'px'\"\r\n pReorderableColumn\r\n [class]=\"selectedSize.class + 'th'\"\r\n \r\n >\r\n <div\r\n [class]=\"\r\n centralizarColunas(col) && alignColunasHeader(col) == ''\r\n ? 'flex flex-row justify-content-center'\r\n : 'flex flex-row'\r\n \"\r\n [style]=\"alignColunasHeader(col)\"\r\n >\r\n <span>{{ col.header }}</span>\r\n @if(col.sortable === true) {\r\n <p-sortIcon\r\n [field]=\"col.field\"\r\n style=\"font-size: 10px\"\r\n ></p-sortIcon>\r\n }\r\n @if(col.headerTooltip){\r\n <span\r\n class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\"\r\n >\r\n info\r\n </span>\r\n }\r\n \r\n </div>\r\n </th>\r\n }\r\n \r\n @if(!isEditing && config.actions && config.actions.length > 0){\r\n <th></th>\r\n }\r\n\r\n @if(isEditableTable() && this.editMode == 'row'){\r\n <th\r\n id=\"th-edit\"\r\n style=\"width: 20px\"\r\n >\r\n Editar\r\n </th>\r\n }\r\n \r\n </tr>\r\n </ng-template>\r\n\r\n\r\n \r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n <ng-template\r\n pTemplate=\"body\"\r\n let-rowData\r\n let-editing=\"editing\"\r\n let-ri=\"rowIndex\"\r\n let-columns=\"columns\"\r\n let-rowgroup=\"rowgroup\"\r\n let-rowspan=\"rowspan\"\r\n >\r\n <tr\r\n [pEditableRow]=\"rowData\"\r\n [pEditableRowDisabled]=\"false\"\r\n [pContextMenuRow]=\"{rowData, editing}\"\r\n [class]=\"selectedSize.class + '-tr'\"\r\n (dblclick)=\"doubleClick($event, rowData)\"\r\n >\r\n @if(config.enableSelect && !isEditing){\r\n <td\r\n [style]=\"applyStyle(rowData, { field: 'check-box', header: '' })\"\r\n >\r\n \r\n <p-tableCheckbox\r\n class=\"check-edit-list\"\r\n [value]=\"rowData\"\r\n [disabled]=\"isDisabledCheckbox(rowData)\"\r\n (click)=\"activeItemLote(selectedItems)\"\r\n ></p-tableCheckbox>\r\n </td>\r\n }\r\n @for (col of columns; track i; let i = $index){\r\n <ng-container>\r\n <!-- FIXME: Testar a implementa\u00E7\u00E3o abaixo e mesaclar as duas formas -->\r\n \r\n <ng-template #templateInput let-rowData=\"rowData\" let-col=\"col\">\r\n <ng-container *ngIf=\"isEditing; else templatevisualedicao\">\r\n <ng-container [ngSwitch]=\"col.fieldControlType\">\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div [style.width]=\"col.width\" class=\"grid formgrid p-fluid\">\r\n <kv-input-text\r\n [disabled]=\"isDisableEditRowCellFunction(rowData, col)\"\r\n class=\"cellControl col\"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n [required]=\"col.required ?? true\"\r\n ></kv-input-text>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <div [style.width]=\"col.width\" class=\"grid formgrid p-fluid\">\r\n <kv-input-number\r\n [disabled]=\"isDisableEditRowCellFunction(rowData, col)\"\r\n class=\"cellControl col\"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n [required]=\"col.required ?? true\"\r\n ></kv-input-number>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'mask'\">\r\n <div [style.width]=\"col.width\" class=\"grid formgrid p-fluid\">\r\n <kv-input-mask\r\n [disabled]=\"isDisableEditRowCellFunction(rowData, col)\"\r\n class=\"cellControl col\"\r\n [mask]=\"col.mask\"\r\n [required]=\"col.required ?? true\"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n ></kv-input-mask>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'switch'\">\r\n <div [style.width]=\"col.width\" class=\"grid formgrid p-fluid\">\r\n <kv-switch\r\n [disabled]=\"isDisableEditRowCellFunction(rowData, col)\"\r\n class=\"cellControl col\"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n ></kv-switch>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'calendar'\">\r\n <div [style.width]=\"col.width\">\r\n <div\r\n [style.width]=\"col.width\"\r\n class=\"grid formgrid p-fluid\"\r\n >\r\n <kv-input-calendar\r\n class=\"cellControl col\"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n ></kv-input-calendar>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <div [style.width]=\"col.width\" class=\"grid formgrid p-fluid\">\r\n <p-dropdown\r\n [disabled]=\"isDisableEditRowCellFunction(rowData, col)\"\r\n class=\"cellControl col\"\r\n appendTo=\"body\"\r\n [panelStyle]=\"{ 'font-size': '0.75rem' }\"\r\n [optionLabel]=\"col.fieldDropDownControl.descricaoobjeto\"\r\n [optionValue]=\"col.fieldDropDownControl.idobjeto\"\r\n [options]=\"\r\n col.fieldDropDownControl.fieldControlDropdownSource\r\n \"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n >\r\n </p-dropdown>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n \r\n <ng-template #templatevisualedicao>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n templateOutput;\r\n context: { rowData: rowData, col: col }\r\n \"\r\n ></ng-container>\r\n </ng-template>\r\n </ng-template>\r\n \r\n <ng-template #templateOutput let-rowData=\"rowData\" let-col=\"col\">\r\n <ng-container [ngSwitch]=\"col.fieldControlType\">\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <ng-container *ngIf=\"rowData[col.field]\">\r\n {{ transformValueDrop(retornaDescricaoDrop(rowData, col), col) }}\r\n </ng-container>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'switch'\">\r\n <kv-switch\r\n [(ngModel)]=\"rowData[col.field]\"\r\n [disabled]=\"true\"\r\n ></kv-switch>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'calendar'\">\r\n {{ rowData[col.field] | date }}\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'mask'\">\r\n {{ rowData[col.field] | mask : col.mask }}\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchDefault>\r\n {{ transformValue(rowData, col) }}\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n \r\n @if(editMode == 'cell' && col.fieldControlType){\r\n <td\r\n [pEditableColumn]=\"rowData\"\r\n [pEditableColumnField]=\"col.field\"\r\n [pEditableColumnRowIndex]=\"rowData[config.dataKey]\"\r\n [id]=\"'rowTable' + rowData[config.dataKey]\"\r\n (click)=\"activeItem(rowData)\"\r\n (dblclick)=\"dbClickEdit()\"\r\n class=\"rowTable\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <p-cellEditor>\r\n <ng-container>\r\n <ng-template pTemplate=\"input\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n templateInput;\r\n context: { rowData: rowData, col: col }\r\n \"\r\n ></ng-container>\r\n </ng-template>\r\n \r\n <ng-template pTemplate=\"output\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n templateOutput;\r\n context: { rowData: rowData, col: col }\r\n \"\r\n ></ng-container>\r\n </ng-template>\r\n </ng-container>\r\n \r\n </p-cellEditor>\r\n </td>\r\n }\r\n \r\n <!-- NOTE: Edi\u00E7\u00E3o de linha -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n \r\n <!-- Celula que armazena os controles de edi\u00E7\u00E3o para os campos -->\r\n @if(false && col.fieldControlType && editMode == 'row'){\r\n <td\r\n [id]=\"'rowTable' + rowData[config.dataKey]\"\r\n (click)=\"activeItem(rowData)\"\r\n (dblclick)=\"dbClickEdit()\"\r\n class=\"rowTable\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <p-cellEditor\r\n [ngClass]=\"{ switch: col.fieldControlType == 'switch' }\"\r\n >\r\n <ng-template pTemplate=\"input\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n templateInput;\r\n context: { rowData: rowData, col: col }\r\n \"\r\n ></ng-container>\r\n </ng-template>\r\n \r\n <ng-template pTemplate=\"output\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n templateOutput;\r\n context: { rowData: rowData, col: col }\r\n \"\r\n ></ng-container>\r\n </ng-template>\r\n </p-cellEditor>\r\n </td>\r\n }\r\n \r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n \r\n <td\r\n *ngIf=\"rowgroup && !col.template\"\r\n [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\r\n class=\"rowTable\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n \r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n <span\r\n *ngIf=\"\r\n !isChipField(col) && !col.iconField && !isImageField(col)\r\n \"\r\n >\r\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n \r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >{{ transformValue(rowData, col) }}</span\r\n >\r\n </div>\r\n </span>\r\n \r\n <span *ngIf=\"isImageField(col)\">\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n \r\n <i\r\n *ngIf=\"col.iconField\"\r\n [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n \r\n <ng-template #booleanField>\r\n <i\r\n *ngIf=\"!col.iconField && !isSwitchField(col)\"\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n \r\n <span\r\n *ngIf=\"isSwitchField(col)\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n </span>\r\n </ng-template>\r\n </td>\r\n \r\n <td\r\n *ngIf=\"\r\n !rowgroup &&\r\n !col.grouped &&\r\n !col.template &&\r\n !col.fieldControlType\r\n \"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n class=\"rowTable\"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n \r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n <span\r\n *ngIf=\"\r\n !isChipField(col) && !col.iconField && !isImageField(col)\r\n \"\r\n >\r\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n \r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ transformValue(rowData, col) }}</span\r\n >\r\n </div>\r\n </span>\r\n \r\n <span *ngIf=\"isImageField(col)\">\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n \r\n <i\r\n *ngIf=\"col.iconField\"\r\n [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n \r\n <ng-template #booleanField>\r\n <i\r\n *ngIf=\"!col.iconField && !isSwitchField(col)\"\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n \r\n <span\r\n *ngIf=\"isSwitchField(col)\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n </span>\r\n </ng-template>\r\n </td>\r\n \r\n <td\r\n *ngIf=\"col.template && !isEditableTable()\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n class=\"rowTable\"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n <ng-container\r\n *ngIf=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\r\n >\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n }\r\n \r\n\r\n <!-- ------------------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- Controle de a\u00E7\u00E3o -->\r\n @if(!isEditing && config.actions && config.actions.length > 0){\r\n <td\r\n [ngClass]=\"{\r\n 'td-tools': isEditableTable() && this.editMode == 'row',\r\n 'td-tools-sticky': !isEditableTable() || this.editMode == 'cell'\r\n }\"\r\n [style]=\"\r\n applyStyle(rowData, { field: 'btns-options', header: '' }) +\r\n 'border-right: 1px solid #ddd !important; border-left: 1px solid #ddd !important;'\r\n \"\r\n >\r\n <div class=\"flex flex-row justify-content-end w-full\">\r\n \r\n <span\r\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz\"\r\n style=\"font-size: 1rem; height: 10px; width: 20px\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n >\r\n more_horiz\r\n </span>\r\n <!-- </button> -->\r\n\r\n <div *ngFor=\"let action of config.actions\">\r\n {{ criarMenusModal(rowData) }}\r\n </div>\r\n\r\n\r\n <p-menu\r\n #menu\r\n [popup]=\"true\"\r\n [model]=\"menuItems\"\r\n appendTo=\"body\"\r\n ></p-menu>\r\n </div>\r\n </td>\r\n }\r\n \r\n <!-- ------------------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- Controle de edi\u00E7\u00E3o -->\r\n @if(this.isEditableTable() && this.editMode == 'row'){\r\n <td class=\"td-edit\">\r\n <div class=\"flex align-items-center justify-content-center gap-2\">\r\n @if(!editing){\r\n <button\r\n [style.height]=\"'28px'\"\r\n [id]=\"'rowEdit' + rowData[config.dataKey]\"\r\n [style.width]=\"'28px'\"\r\n [disabled]=\"isDisableEditRowFunction(rowData)\"\r\n pButton\r\n pRipple\r\n type=\"button\"\r\n pInitEditableRow\r\n icon=\"pi pi-pencil\"\r\n (click)=\"onRowEditInit(rowData)\"\r\n class=\"p-button-rounded p-button-text\"\r\n ></button>\r\n }\r\n \r\n @if(editing){\r\n <button\r\n [style.height]=\"'28px'\"\r\n [style.width]=\"'28px'\"\r\n [disabled]=\"isDisableEditRowFunction(rowData)\"\r\n pButton\r\n pRipple\r\n type=\"button\"\r\n pCancelEditableRow\r\n icon=\"pi pi-times\"\r\n (click)=\"onRowEditCancel(rowData, ri)\"\r\n [id]=\"'rowCancel' + rowData[config.dataKey]\"\r\n class=\"p-button-rounded p-button-text p-button-danger\"\r\n ></button>\r\n }\r\n \r\n </div>\r\n </td>\r\n }\r\n \r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.td-edit{position:sticky;right:-1px;background-color:#fff;color:#5289b4}.td-tools{position:sticky;right:52px;border-right:1px solid #ddd!important;background-color:#fff;box-shadow:-5px 0 20px -10px #000000bf}.td-tools-sticky{position:sticky;right:0;border-right:3px solid #fff!important;background-color:#fff}#th-edit{position:sticky;right:0;background-color:#eaeaea}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td{text-align:center;border:1px solid #eaeaea;border-width:1px 1px;padding:0rem .5rem}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th{text-align:center;padding:0rem .5rem;border-left:none;border-right:none;border-width:1px 1px;font-weight:700;color:#343a40;background:#eaeaea;transition:box-shadow .2s}.error-show{background-color:red;width:5px;height:10px}.btns-options{position:relative;left:20px}.chip-style{border:solid 1px}:host::ng-deep .p-card .p-card-content{padding:0}.material-symbols-outlined.md-19{font-size:15px}.material-symbols-outlined.md-22{font-size:19px}.checkbox-container{display:flex;align-items:center;gap:2px;margin-top:5px}#botaoFiltro:hover{color:#a9a9a9}.actionLoteBtns{align-items:center;background-color:#29b92d;color:#f2f3f5;display:flex;font-size:16px;width:2rem;height:2rem;top:2px;margin-left:.5rem;justify-content:center;text-decoration:none;text-align:center;padding:12px}:host ::ng-deep .center{display:flex;align-items:center;justify-content:center}#actionLoteBtns:hover,.actionLoteBtns:hover{background-color:#249a29!important}.actionBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;width:.8rem;height:.8rem;margin-left:.22rem;justify-content:center;text-decoration:none;text-align:justify;padding:11px}:host::ng-deep .material-symbols-outlined{font-family:Material Symbols Outlined;font-weight:400;font-style:normal;line-height:.9;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}#actionBtns:hover{color:#a9a9a9}.image{border-style:solid;border-width:3.5px;border-color:#5289b4;border-radius:100%;height:55px;width:55px;padding:0;margin:0;vertical-align:middle}:host ::ng-deep .p-datatable-header{background-color:#eaeaea!important;padding:0!important;border-radius:5px!important}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th{background-color:#eaeaea!important}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th:first-of-type{border-radius:5px 0 0 5px}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th:last-child{border-radius:0 5px 5px 0}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td{border-left:none!important;border-right:none!important}:host ::ng-deep .actionBtns,:host ::ng-deep .actionLoteBtns{border-radius:20%;box-shadow:#0000003d 0 3px 8px}.icon-more-horiz:hover,.icon-more-horiz:focus{color:#5e5e5e;transform:scale(1.1);transition:color .3s,transform .3s}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:#004172;background:#004172}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight:hover{background-color:#002542}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight:active{background-color:#002542}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight:disabled{background-color:#002542;opacity:.4;cursor:auto}@media only screen and (min-width: 768px){.actionLoteBtns{top:-1px}}@media only screen and (max-width: 960px){:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:has(p-tablecheckbox){border-bottom:0px!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:has(img){justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:has(img) .p-column-title{display:none!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:last-child{border-bottom:1px solid #ddd!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:last-child div{justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td .p-column-title{font-weight:600}}::ng-deep .p-panel.p-panel-toggleable .p-panel-header{background-color:#eaeaea!important}::ng-deep .field.grid,.formgrid.grid{padding:0rem!important}@media screen and (min-width: 961px){.moreVertBtn{position:relative;right:3px}}::ng-deep .p-datatable .p-datatable-thead>tr>th:last-of-type{border-radius:0 0 5px!important;-webkit-border-radius:0px 0px 5px 0px!important;-moz-border-radius:0px 0px 5px 0px!important;-ms-border-radius:0px 0px 5px 0px!important;-o-border-radius:0px 0px 5px 0px!important}::ng-deep .p-datatable .p-datatable-thead>tr>th:first-of-type{border-radius:0 0 0 5px!important;-webkit-border-radius:0px 0px 0px 5px!important;-moz-border-radius:0px 0px 0px 5px!important;-ms-border-radius:0px 0px 0px 5px!important;-o-border-radius:0px 0px 0px 5px!important}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch.p-inputswitch-checked .p-inputswitch-slider:before{transform:translate(1.25rem);height:15px;margin-top:-8px;-webkit-transform:translateX(1.25rem);-moz-transform:translateX(1.25rem);-ms-transform:translateX(1.25rem);-o-transform:translateX(1.25rem)}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch.p-inputswitch-checked .p-inputswitch-slider{height:21px}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch{height:21px}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider:before{background:#fff;width:1rem;height:1.25rem;height:16px!important;left:.25rem;margin-top:-9px!important;margin-top:-.625rem;border-radius:50%;transition-duration:.2s}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch:not(.p-disabled) .p-inputswitch-slider{height:21px}:host ::ng-deep .p-cell-editing{padding-top:0!important;padding-bottom:0!important}:host ::ng-deep p-dropdown-item{font-size:.1rem}.text-aviso{color:red;font-size:.85rem;font-weight:400;width:500px}:host ::ng-deep .p-checkbox .p-checkbox-box{width:18px;height:18px}:host ::ng-deep .p-selectbutton .p-button{font-size:.75rem!important;height:24px;padding:11px}#btn-sizes{border-radius:50%;width:.5rem!important;height:.5rem!important;box-shadow:#0000003d 0 3px 8px}:host ::ng-deep .p-datatable.p-datatable-sm{font-size:.625rem!important}:host ::ng-deep .p-datatable.p-datatable-md{font-size:.75rem!important}:host ::ng-deep .p-datatable.p-datatable-lg{font-size:.875rem!important}:host ::ng-deep .p-datatable-sm-tr>td i>span.material-symbols-outlined{font-size:.9rem}:host ::ng-deep .p-datatable-sm-tr>td .check-edit-list>.p-checkbox .p-checkbox-box{width:15px;height:15px}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>div>.cellControl>.p-dropdown .p-dropdown-label{width:1%;padding-top:0;padding-bottom:0;font-size:.6rem}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>div>kv-input-text>span>.inputs{padding-top:0;padding-bottom:0;font-size:.6rem;height:1rem}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>div>.cellControl>span>p-inputmask>.inputs{height:1rem;padding-top:0;padding-bottom:0;font-size:.6rem}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>div>kv-switch>div>p-inputswitch>div,:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>kv-switch>div>p-inputswitch,:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider{height:.6rem!important;width:2.4rem}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider:before{background:#fff;width:.6rem!important;height:.6rem!important;left:.2rem;margin-top:-.35rem!important;border-radius:50%;transition-duration:.2s}:host ::ng-deep .p-datatable-sm-tr>td p-celleditor>div>kv-switch>div>p-inputswitch>div>span:before{background:#fff;width:.6rem!important;height:.6rem!important;left:.2rem;margin-top:-.35rem!important;border-radius:50%;transition-duration:.2s}:host ::ng-deep .p-datatable-md-tr>td i>span.material-symbols-outlined{font-size:1rem}:host ::ng-deep .p-datatable-md-tr>td .check-edit-list>.p-checkbox .p-checkbox-box{width:18px;height:18px}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>div>.cellControl>.p-dropdown .p-dropdown-label{width:1%;padding-top:0;padding-bottom:0;font-size:.7rem}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>div>kv-input-text>span>.inputs{padding-top:0;padding-bottom:0;font-size:.7rem;height:1rem}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>div>.cellControl>span>p-inputmask>.inputs{height:1rem;padding-top:0;padding-bottom:0;font-size:.7rem}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>div>kv-switch>div>p-inputswitch>div,:host ::ng-deep .p-datatable-md-tr>td p-celleditor>kv-switch>div>p-inputswitch,:host ::ng-deep .p-datatable-md-tr>td p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider{height:.83rem!important;width:2.7rem}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider:before{background:#fff;width:.7rem!important;height:.7rem!important;left:.25rem;margin-top:-.35rem!important;border-radius:50%;transition-duration:.2s}:host ::ng-deep .p-datatable-md-tr>td p-celleditor>div>kv-switch>div>p-inputswitch>div>span:before{background:#fff;width:.7rem;height:.7rem;left:.25rem;margin-top:-.4rem;border-radius:50%;transition-duration:.2s}:host ::ng-deep .p-datatable-lg-tr>td i>span.material-symbols-outlined{font-size:1.1rem}:host ::ng-deep .p-datatable-lg-tr>td p-celleditor>div>kv-input-text>span>.inputs{padding-top:0;padding-bottom:0;font-size:.8rem;height:1rem}:host ::ng-deep .p-datatable-lg-tr>td p-celleditor>div>.cellControl>.p-dropdown .p-dropdown-label{padding-top:0;padding-bottom:0;font-size:.8rem}:host ::ng-deep .p-datatable-lg-tr>td p-celleditor>div>.cellControl>span>p-inputmask>.inputs{height:1rem;padding-top:0;padding-bottom:0;font-size:.8rem}:host ::ng-deep .p-datatable-sm-tr>td{padding-top:0!important;padding-top:.05rem!important;padding-bottom:.05rem!important}:host ::ng-deep .p-datatable-md-tr>td,:host ::ng-deep .p-datatable-lg-tr>td{padding:.15rem!important}.p-datatable.p-datatable-smth{font-size:.6rem!important}.p-datatable.p-datatable-dmth{font-size:.7rem!important}.p-datatable.p-datatable-lgth{font-size:.8rem!important}:host ::ng-deep .p-datatable.p-datatable-sm * p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options) p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options){height:15px!important}:host ::ng-deep .p-datatable.p-datatable-md * p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options) p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options){height:25px!important}:host ::ng-deep .p-datatable.p-datatable-lg * p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options) p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options){height:30px!important}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider{height:21px!important}:host ::ng-deep .teste>.p-button{background:#eaeaea!important;color:#a9a9a9;border:none;box-shadow:#0000003d 0 3px 8px;height:20px}::ng-deep .menuSizes>p-tieredmenusub>.p-tieredmenu-root-list>li:first-child{font-size:.6rem}::ng-deep .menuSizes>p-tieredmenusub>.p-tieredmenu-root-list>li:last-child{font-size:.8rem}.tag{width:5px;height:25px;border-radius:.25rem}:host ::ng-deep .p-speeddial-button.p-button.p-button-icon-only{width:2rem;height:2rem;font-size:1rem}.item-circle{width:4rem;height:2rem;padding:1rem;font-size:.8rem;border-radius:17%;display:flex;align-items:center;justify-content:center;background:#eaeaea!important;box-shadow:#0000003d 0 3px 13px}:host ::ng-deep p-speeddial>div>button>span.material-symbols-outlined.ng-star-inserted{font-size:1.1rem}:host ::ng-deep .check-edit-list>div.p-checkbox.p-component{height:1rem}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:first-child{border-left:1px solid #ddd!important}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:last-child{border-right:1px solid #ddd!important}:host ::ng-deep .p-datatable-wrapper::-webkit-scrollbar:hover{background-color:#dededebf}:host ::ng-deep .p-datatable-wrapper::-webkit-scrollbar{width:6px;height:3px}:host ::ng-deep .p-datatable-wrapper:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}:host ::ng-deep .p-datatable-wrapper::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}:host ::ng-deep .p-datatable-wrapper::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}:host ::ng-deep .p-datatable>.p-datatable-wrapper{overflow-y:hidden}\n"] }]
|
|
313
311
|
}], ctorParameters: () => [{ type: i1.DatePipe }, { type: i1.DecimalPipe }, { type: i2.CpfCnpjPipe }, { type: i2.TelefonePipe }, { type: i2.NotificationService }], propDecorators: { enableSizes: [{
|
|
314
312
|
type: Input
|
|
315
313
|
}], editMode: [{
|
|
@@ -319,4 +317,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
|
|
|
319
317
|
}], filterField: [{
|
|
320
318
|
type: Output
|
|
321
319
|
}] } });
|
|
322
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdGFibGUtZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9rdi10YWJsZS1lZGl0L2t2LXRhYmxlLWVkaXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtdGFibGUtZWRpdC9rdi10YWJsZS1lZGl0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ1EsTUFBTSxlQUFlLENBQUM7QUFXdEMsT0FBTyxFQU1MLFlBQVksRUFDWixhQUFhLEVBQ2QsTUFBTSxxQkFBcUIsQ0FBQztBQUk3QixPQUFPLEVBQUUsT0FBTyxFQUFnQixTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPcEYsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGtCQUFrQjtJQTBCMUQsWUFDRSxRQUFrQixFQUNsQixXQUF3QixFQUN4QixXQUF3QixFQUN4QixZQUEwQixFQUMxQixtQkFBd0M7SUFDeEMsa0NBQWtDOztRQUVsQyxLQUFLLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUE3QnRFLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzdCLGFBQVEsR0FBbUIsTUFBTSxDQUFDO1FBQ25DLHdCQUFtQixHQUFVLEVBQUUsQ0FBQTtRQUd2QyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzdCLHFC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QUFwQixvQkFBb0IsME5DdENqQyxpODlCQXl6QkE7OzJGRG54QmEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGVBQWU7OExBU2hCLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFpQkksTUFBTTtzQkFBZixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXN9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICBEYXRlUGlwZSxcbiAgRGVjaW1hbFBpcGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHtcbiAgTWVudUl0ZW19IGZyb20gJ3ByaW1lbmcvYXBpJztcblxuXG5pbXBvcnQge1xuICBDcGZDbnBqUGlwZSxcbiAgTm90aWZpY2F0aW9uU2VydmljZSxcbiAgVGFibGVDb25maWdDb2x1bW4sXG4gIFRlbGVmb25lUGlwZSxcbiAgVmFsdWVPckZuLFxuICBnZXRPckV4ZWN1dGUsXG4gIG1hcFRvTWVudUl0ZW1cbn0gZnJvbSAnLi4vLi4vLi4vcHVibGljLWFwaSc7XG5cbmltcG9ydCB7IFRhYmxlRWRpdENvbmZpZ0NvbHVtbiB9IGZyb20gJy4uLy4uL2FwaS9jb21wb25lbnRzL3RhYmxlL3RhYmxlZWRpdC5jb25maWcuY29sdW1uJztcbmltcG9ydCBUYWJsZUVkaXRDb25maWcgZnJvbSAnLi4vLi4vYXBpL2NvbXBvbmVudHMvdGFibGUvdGFibGVkaXQuY29uZmlnJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGFrZVVudGlsLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQmFzZWNvbXBvbmVudFRhYmxlIH0gZnJvbSAnLi4vLi4vYXBpL2Jhc2UtY29tcG9uZW50cy9iYXNlLWNvbXBvbmVudC10YWJsZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2t2LXRhYmxlLWVkaXQnLFxuICB0ZW1wbGF0ZVVybDogJy4va3YtdGFibGUtZWRpdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2t2LXRhYmxlLWVkaXQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBLdlRhYmxlRWRpdENvbXBvbmVudCBleHRlbmRzIEJhc2Vjb21wb25lbnRUYWJsZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcblxuXG4gIG92ZXJyaWRlIGNvbmZpZyE6IFRhYmxlRWRpdENvbmZpZztcblxuICBASW5wdXQoKSBlbmFibGVTaXplczogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBlZGl0TW9kZTogJ3JvdycgfCAnY2VsbCcgPSAnY2VsbCc7XG4gIHByaXZhdGUgaXRlbXNQYXJhU2FsdmFtZW50bzogYW55W10gPSBbXVxuICBwcm90ZWN0ZWQgaXRlbUluaXRpYWxTdGF0ZSE6IGFueTtcblxuICBpc0VkaXRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNTaG93U2l6ZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2xvbmVkRGF0YVNvdXJjZTogeyBbczogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgc2VsZWN0ZWRQcm9kdWN0OiBhbnkgPSB7XG4gICAgcm93RGF0YToge30sXG4gICAgZWRpdGluZzogZmFsc2VcbiAgfTtcblxuICBtZW51SXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcbiAgLy9cbiAgaXRlbXNDb250ZXh0TWVudSE6IE1lbnVJdGVtW107XG5cbiAgLyoqICBFbWl0ZSBldmVudG8gZGUgc2FsdmFtZW50byBkYSBsaW5oYSAqL1xuICBAT3V0cHV0KCkgb25TYXZlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGZpbHRlckZpZWxkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgZGVjaW1hbFBpcGU6IERlY2ltYWxQaXBlLFxuICAgIGNwZkNucGpQaXBlOiBDcGZDbnBqUGlwZSxcbiAgICB0ZWxlZm9uZVBpcGU6IFRlbGVmb25lUGlwZSxcbiAgICBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlXG4gICAgLy8gY2FwaXRhbGl6ZVBpcGU6IENhcGl0YWxpemVQaXBlLFxuICApIHtcbiAgICBzdXBlcihkYXRlUGlwZSwgZGVjaW1hbFBpcGUsIGNwZkNucGpQaXBlLCB0ZWxlZm9uZVBpcGUsIG5vdGlmaWNhdGlvblNlcnZpY2UpO1xuICAgIHRoaXMuaXNSb3dTZWxlY3RhYmxlID0gdGhpcy5pc1Jvd1NlbGVjdGFibGUuYmluZCh0aGlzKTtcbiAgfVxuXG5cbiAgZ2V0T3JFeGVjdXRlPFQ+KGFjdGlvbjogVmFsdWVPckZuPFQ+LCBkYXRhOiBhbnkpOiBUIHtcbiAgICByZXR1cm4gZ2V0T3JFeGVjdXRlKGFjdGlvbiwgZGF0YSk7XG4gIH1cblxuICBzaXplcyA9IFtcbiAgICB7XG4gICAgICBsYWJlbDogJ1BlcXVlbm8nLCBjbGFzczogJ3AtZGF0YXRhYmxlLXNtJywgc2l6ZTogMC44MywgY29tbWFuZDogKHg6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdGVkU2l6ZSA9IHsgbGFiZWw6ICdQZXF1ZW5vJywgY2xhc3M6ICdwLWRhdGF0YWJsZS1zbScsIHNpemU6IDAuODMgfVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6ICdNw6lkaW8nLCBjbGFzczogJ3AtZGF0YXRhYmxlLW1kJywgc2l6ZTogMSwgY29tbWFuZDogKHg6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdGVkU2l6ZSA9IHsgbGFiZWw6ICdNw6lkaW8nLCBjbGFzczogJ3AtZGF0YXRhYmxlLW1kJywgc2l6ZTogMSB9XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ0dyYW5kZScsIGNsYXNzOiAncC1kYXRhdGFibGUtbGcnLCBzaXplOiAxLjE3LCBjb21tYW5kOiAoeDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTaXplID0geyBsYWJlbDogJ0xhcmdlJywgY2xhc3M6ICdwLWRhdGF0YWJsZS1sZycsIHNpemU6IDEuMTcgfVxuXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIHsgbmFtZTogJ1NtYWxsJywgY2xhc3M6ICdwLWRhdGF0YWJsZS1zbScsIHNpemU6ICAwLjgzIH0sXG4gICAgLy8geyBuYW1lOiAnTm9ybWFsJywgY2xhc3M6ICdwLWRhdGF0YWJsZS1tZCcsIHNpemU6IDEgfSxcbiAgICAvLyB7IG5hbWU6ICdMYXJnZScsICBjbGFzczogJ3AtZGF0YXRhYmxlLWxnJywgc2l6ZTogMS4xNyB9XG4gIF07XG5cblxuICAvL0ZJWE1FOiBNb3ZlciBwYXJhIHVtIGxvY2FsIGFkZXF1YWRvXG4gIHRpbWVyU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uOyAvLyBBc3NpbmF0dXJhIGRvIHRlbXBvcml6YWRvclxuICBvblNhdmVUaW1lciQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpOyAvLyBTdWplaXRvIHBhcmEgY29udHJvbGFyIG8gdGVtcG9yaXphZG9yXG4gIHByaXZhdGUgb25EZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIHRoaXMub25TYXZlVGltZXIkLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKVxuICAgICkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIC8vIFF1YW5kbyBvIHRlbXBvcml6YWRvciB0ZXJtaW5hciwgZW1pdGEgbyBldmVudG8gb25TYXZlIGNvbSBvcyBkYWRvcyBhIHNlcmVtIHNhbHZvc1xuICAgICAgdGhpcy5vblJvd0VkaXRTYXZlKCk7XG4gICAgfSk7XG5cblxuICAgIHRoaXMudGFtYW5ob1RlbGEgPSB3aW5kb3cuaW5uZXJXaWR0aDtcblxuICAgIHRoaXMuaXRlbXNDb250ZXh0TWVudSA9IFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdFZGl0YXIgbGluaGEnLCBpY29uOiAncGkgcGktZncgcGktcGVuY2lsJywgY29tbWFuZDogKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm93RWRpdCcgKyB0aGlzLnNlbGVjdGVkUHJvZHVjdC5yb3dEYXRhW3RoaXMuY29uZmlnLmRhdGFLZXldKTtcbiAgICAgICAgICBpZiAoZWxlbWVudCAmJiAhdGhpcy5jb25maWcuZGlzYWJsZUVkaXRSb3dGdW5jdGlvbj8uKHRoaXMuc2VsZWN0ZWRQcm9kdWN0LnJvd0RhdGEpKSB7XG4gICAgICAgICAgICBlbGVtZW50LmNsaWNrKClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnRvYXN0V2FybihcIkEgZWRpw6fDo28gZGVzc2EgbGluaGEgZXN0YSBkZXNhYmlsaXRhZGFcIilcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5vblJvd0VkaXRJbml0KHRoaXMuc2VsZWN0ZWRQcm9kdWN0KVxuXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnQ2FuY2VsYXIgZWRpw6fDo28nLCBpY29uOiAncGkgcGktZncgcGktdGltZXMnLCBjb21tYW5kOiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyb3dDYW5jZWwnICsgdGhpcy5zZWxlY3RlZFByb2R1Y3Qucm93RGF0YVt0aGlzLmNvbmZpZy5kYXRhS2V5XSk7XG4gICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuY2xpY2soKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnRvYXN0V2FybihcIkEgZWRpw6fDo28gZGVzc2EgbGluaGEgZXN0YSBkZXNhYmlsaXRhZGFcIilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnU2FsdmFyIGVkacOnw6NvJywgaWNvbjogJ3BpIHBpLWZ3IHBpLXNhdmUnLCBjb21tYW5kOiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyb3dTYXZlJyArIHRoaXMuc2VsZWN0ZWRQcm9kdWN0LnJvd0RhdGFbdGhpcy5jb25maWcuZGF0YUtleV0pO1xuICAgICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICBlbGVtZW50LmNsaWNrKCk7IC8vIERpc3BhcmEgdW0gZXZlbnRvIGRlIGNsaXF1ZSBubyBlbGVtZW50byBjb20gSUQgJ3Rlc3RlJ1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UudG9hc3RXYXJuKFwiQSBlZGnDp8OjbyBkZXNzYSBsaW5oYSBlc3RhIGRlc2FiaWxpdGFkYVwiKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdFbnRyYXIgZW0gbW9kbyBkZSBlZGnDp8OjbycsIGljb246ICdwaSBwaS1mdyBwaS1wZW5jaWwnLCBjb21tYW5kOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0VkaXRpbmcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ1NhaXIgZG8gbW9kbyBkZSBlZGnDp8OjbycsIGljb246ICdwaSBwaS1mdyBwaS1wZW5jaWwnLCBjb21tYW5kOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0VkaXRpbmcgPSBmYWxzZTtcbiAgICAgICAgICBpZiAodGhpcy5pdGVtc1BhcmFTYWx2YW1lbnRvLmxlbmd0aCA+IDApXG4gICAgICAgICAgICB0aGlzLm9uUm93RWRpdFNhdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICBdO1xuXG5cbiAgICAvLyBTdWJzY3JldmUtc2UgYW8gc3VqZWl0byBvblNhdmVUaW1lciRcblxuXG4gIH1cbiAgb3ZlcnJpZGUgYWRqdXN0VGFibGVTaXplKCl7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAvLyBDb21wbGV0YSBvIHN1amVpdG8gb25EZXN0cm95JFxuICAgIHRoaXMub25EZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgLy8gU2UgaG91dmVyIHVtIHRlbXBvcml6YWRvciBlbSBleGVjdcOnw6NvLCBwYXJlLW9cbiAgICBpZiAodGhpcy50aW1lclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy50aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgLy8gQXDDs3MgcGFyYXIgbyB0ZW1wb3JpemFkb3IsIGNoYW1lIG9uU2F2ZSBkaXJldGFtZW50ZSBwYXJhIHNhbHZhciBvcyBkYWRvc1xuICAgICAgdGhpcy5vblJvd0VkaXRTYXZlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIHRoaXMuaXRlbXNDb250ZXh0TWVudVswXS52aXNpYmxlID0gdGhpcy5lZGl0TW9kZSA9PSAncm93JyAmJiAhdGhpcy5zZWxlY3RlZFByb2R1Y3QuZWRpdGluZyAmJiB0aGlzLmlzRWRpdGFibGVUYWJsZSgpICE9PSBmYWxzZTtcbiAgICB0aGlzLml0ZW1zQ29udGV4dE1lbnVbMV0udmlzaWJsZSA9IHRoaXMuZWRpdE1vZGUgPT0gJ3JvdycgJiYgdGhpcy5zZWxlY3RlZFByb2R1Y3QuZWRpdGluZyAmJiB0aGlzLmlzRWRpdGFibGVUYWJsZSgpICE9PSBmYWxzZTtcbiAgICB0aGlzLml0ZW1zQ29udGV4dE1lbnVbMl0udmlzaWJsZSA9IHRoaXMuZWRpdE1vZGUgPT0gJ3JvdycgJiYgdGhpcy5zZWxlY3RlZFByb2R1Y3QuZWRpdGluZyAmJiB0aGlzLmlzRWRpdGFibGVUYWJsZSgpICE9PSBmYWxzZTtcblxuICAgIHRoaXMuaXRlbXNDb250ZXh0TWVudVszXS52aXNpYmxlID0gdGhpcy5lZGl0TW9kZSA9PSAnY2VsbCcgJiYgIXRoaXMuaXNFZGl0aW5nO1xuICAgIHRoaXMuaXRlbXNDb250ZXh0TWVudVs0XS52aXNpYmxlID0gdGhpcy5lZGl0TW9kZSA9PSAnY2VsbCcgJiYgdGhpcy5pc0VkaXRpbmc7XG5cblxuICB9XG5cbiAgZGJDbGlja0VkaXQoKSB7XG5cbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jvd0VkaXQnICsgdGhpcy5zZWxlY3RlZEl0ZW1bdGhpcy5jb25maWcuZGF0YUtleV0pO1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICBlbGVtZW50LmNsaWNrKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmVkaXRNb2RlID09ICdyb3cnKVxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UudG9hc3RXYXJuKFwiQSBlZGnDp8OjbyBkZXNzYSBsaW5oYSBlc3RhIGRlc2FiaWxpdGFkYVwiKVxuICAgIH1cbiAgfVxuXG4gIGlzUm93U2VsZWN0YWJsZShldmVudDogYW55KSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGlzYWJsZWRDaGVja2JveChldmVudC5kYXRhKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAvL0NhbGxlZCBiZWZvcmUgYW55IG90aGVyIGxpZmVjeWNsZSBob29rLiBVc2UgaXQgdG8gaW5qZWN0IGRlcGVuZGVuY2llcywgYnV0IGF2b2lkIGFueSBzZXJpb3VzIHdvcmsgaGVyZS5cbiAgICAvL0FkZCAnJHtpbXBsZW1lbnRzIE9uQ2hhbmdlc30nIHRvIHRoZSBjbGFzcy5cbiAgICBpZiAoY2hhbmdlc1snc2V0Q29uZmlnJ10gJiYgdGhpcy5jb25maWcpIHtcblxuICAgICAgdGhpcy5jb25maWcuY29sdW1ucy5mb3JFYWNoKChlOiBUYWJsZUVkaXRDb25maWdDb2x1bW4pID0+IHtcbiAgICAgICAgaWYgKGUuZmllbGRDb250cm9sVHlwZSA9PSAnZHJvcGRvd24nKSB7XG4gICAgICAgICAgdGhpcy5saXN0YXJEcm9wKGUuZmllbGREcm9wRG93bkNvbnRyb2w/LmZpZWxkQ29udHJvbERyb3Bkb3duU2VydmljZSwgZSlcblxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuICBjcmlhck1lbnVzTW9kYWwoZGF0YTogYW55KSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLmFjdGlvbnMgJiYgZGF0YSkge1xuICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgdGhpcy5jb25maWcuYWN0aW9ucykge1xuICAgICAgICBjb25zdCBtZW51SW5zZXJ0ID0gbWFwVG9NZW51SXRlbShhY3Rpb24sIGRhdGEpO1xuXG4gICAgICAgIGxldCBpdGVtID0gdGhpcy5tZW51SXRlbXMuZmlsdGVyKFxuICAgICAgICAgIHggPT4geC5jb21tYW5kID09IG1lbnVJbnNlcnQuY29tbWFuZFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChpdGVtLmxlbmd0aCA9PSAwKSB0aGlzLm1lbnVJdGVtcy5wdXNoKG1lbnVJbnNlcnQpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAobWVudUluc2VydC5sYWJlbCAhPSBpdGVtWzBdLmxhYmVsKSB7XG4gICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLm1lbnVJdGVtcy5pbmRleE9mKGl0ZW1bMF0pO1xuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobWVudUluc2VydC52aXNpYmxlICE9IGl0ZW1bMF0udmlzaWJsZSkge1xuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5tZW51SXRlbXMuaW5kZXhPZihpdGVtWzBdKTtcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG1lbnVJbnNlcnQuZGlzYWJsZWQgIT0gaXRlbVswXS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5tZW51SXRlbXMuaW5kZXhPZihpdGVtWzBdKTtcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Sb3dFZGl0SW5pdChyb3dEYXRhOiBhbnkpIHtcbiAgICB0aGlzLmNsb25lZERhdGFTb3VyY2Vbcm93RGF0YS5pZCBhcyBzdHJpbmddID0geyAuLi5yb3dEYXRhIH07XG4gIH1cblxuICBvbkVkaXRJbml0KGV2ZW50MTogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNFZGl0aW5nKSB0aGlzLml0ZW1Jbml0aWFsU3RhdGUgPSB7IC4uLmV2ZW50MS5kYXRhIH1cbiAgfVxuXG4gIG9uRWRpdENvbXBsZXRlKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc0VkaXRpbmcpIHtcbiAgICAgIGlmICh0aGlzLml0ZW1zUGFyYVNhbHZhbWVudG8ubGVuZ3RoID09PSAwIHx8IFxuICAgICAgICB0aGlzLml0ZW1zUGFyYVNhbHZhbWVudG9bdGhpcy5pdGVtc1BhcmFTYWx2YW1lbnRvLmxlbmd0aCAtIDFdLmluZGV4ID09PSBldmVudC5pbmRleCkge1xuICAgICAgICBcbiAgICAgICAgaWYgKGV2ZW50LmRhdGEgJiYgdGhpcy5pdGVtSW5pdGlhbFN0YXRlICYmXG4gICAgICAgICAgZXZlbnQuZGF0YS5oYXNPd25Qcm9wZXJ0eShldmVudC5maWVsZCkgJiYgXG4gICAgICAgICAgdGhpcy5pdGVtSW5pdGlhbFN0YXRlLmhhc093blByb3BlcnR5KGV2ZW50LmZpZWxkKSAmJlxuICAgICAgICAgIGV2ZW50LmRhdGFbZXZlbnQuZmllbGRdICE9IHRoaXMuaXRlbUluaXRpYWxTdGF0ZVtldmVudC5maWVsZF0pIHtcbiAgICAgICAgICB0aGlzLmFkaWNpb25hckNlbHVsYVBhcmFTYWx2YXIoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9uUm93RWRpdFNhdmUoKTtcbiAgICAgICAgdGhpcy5hZGljaW9uYXJDZWx1bGFQYXJhU2FsdmFyKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhZGljaW9uYXJDZWx1bGFQYXJhU2FsdmFyKGl0ZW06IGFueSkge1xuICAgIC8vIEFkaWNpb25hIG9zIGRhZG9zIGVkaXRhZG9zIGFvIGFycmF5IHBhcmEgc2FsdmFtZW50b1xuICAgIHRoaXMuaXRlbXNQYXJhU2FsdmFtZW50by5wdXNoKGl0ZW0pO1xuXG4gICAgLy8gU2UgaG91dmVyIHVtIHRlbXBvcml6YWRvciBlbSBleGVjdcOnw6NvLCBsaW1wZS1vIGUgcmVpbmljaWVcbiAgICBpZiAodGhpcy50aW1lclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy50aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8vIEluaWNpYSBvIHRlbXBvcml6YWRvciBwYXJhIGVtaXRpciBvblNhdmUgYXDDs3MgNSBzZWd1bmRvc1xuICAgIHRoaXMudGltZXJTdWJzY3JpcHRpb24gPSB0aW1lcig1MDAwKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5vblNhdmVUaW1lciQubmV4dCgpOyAvLyBFbWl0YSBvblNhdmUgYXDDs3MgNSBzZWd1bmRvc1xuICAgIH0pO1xuICB9XG5cblxuICBvblJvd0VkaXRTYXZlKCkge1xuICAgIGlmICh0aGlzLml0ZW1zUGFyYVNhbHZhbWVudG8ubGVuZ3RoID09IDAgfHwgIXRoaXMuaXRlbXNQYXJhU2FsdmFtZW50b1swXS5kYXRhKVxuICAgICAgcmV0dXJuO1xuXG4gICAgY29uc3Qgb2JqZXRvUmVmbGV0aWRvOiBhbnkgPSB7IC4uLnRoaXMuaXRlbXNQYXJhU2FsdmFtZW50b1swXS5kYXRhIH07XG4gICAgLy8gUmVmbGV0ZSBhcyBhbHRlcmHDp8O1ZXMgZW0gdW0gb2JqZXRvXG4gICAgdGhpcy5pdGVtc1BhcmFTYWx2YW1lbnRvLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpZiAoIWl0ZW0uZGF0YSkgcmV0dXJuOyAvLyBWZXJpZmljYSBzZSBvIGl0ZW0gdGVtIGEgcHJvcHJpZWRhZGUgJ2RhdGEnXG4gICAgICBjb25zdCBjaGF2ZSA9IGl0ZW0uZmllbGRcbiAgICAgIGNvbnN0IHZhbG9yID0gaXRlbS5kYXRhW2NoYXZlXTtcbiAgICAgIG9iamV0b1JlZmxldGlkb1tjaGF2ZV0gPSB2YWxvcjtcbiAgICB9KTtcbiAgICB0aGlzLm9uU2F2ZS5lbWl0KG9iamV0b1JlZmxldGlkbylcbiAgICB0aGlzLml0ZW1zUGFyYVNhbHZhbWVudG8gPSBbXTtcbiAgfVxuXG5cbiAgb25Sb3dFZGl0Q2FuY2VsKHByb2R1Y3Q6IGFueSwgaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuZGF0YVNvdXJjZVtpbmRleF0gPSB0aGlzLmNsb25lZERhdGFTb3VyY2VbcHJvZHVjdC5pZCBhcyBzdHJpbmddO1xuICAgIGRlbGV0ZSB0aGlzLmNsb25lZERhdGFTb3VyY2VbcHJvZHVjdC5pZCBhcyBzdHJpbmddO1xuICB9XG5cbiAgbGlzdGFyRHJvcChzZXJ2aWNlOiBhbnksIGNvbDogYW55LCBpbmR0b2Rvcz86IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbmZpZy5jb2x1bW5zPy5pbmRleE9mKGNvbCk7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNvbHVtbnNbY29sdW1uXS5maWVsZERyb3BEb3duQ29udHJvbD8uZmllbGRDb250cm9sRHJvcGRvd25Tb3VyY2VcbiAgfVxuXG4gIHJldG9ybmFEZXNjcmljYW9Ecm9wKHJvd0RhdGE6IGFueVtdLCBjb2w6IFRhYmxlRWRpdENvbmZpZ0NvbHVtbikge1xuXG4gICAgY29uc3QgZGF0YSA9IGNvbC5maWVsZERyb3BEb3duQ29udHJvbD8uZmllbGRDb250cm9sRHJvcGRvd25Tb3VyY2VcbiAgICBjb25zdCBpZG9iamV0byA9IGNvbC5maWVsZERyb3BEb3duQ29udHJvbD8uaWRvYmpldG9cbiAgICBjb25zdCBkZXNjcmljYW9vYmpldG8gPSBjb2wuZmllbGREcm9wRG93bkNvbnRyb2w/LmRlc2NyaWNhb29iamV0b1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCB2YWxvckF0dWFsID0gcm93RGF0YVtjb2wuZmllbGRdXG5cbiAgICBpZiAoZGF0YSAmJiBpZG9iamV0byAmJiBkZXNjcmljYW9vYmpldG8pXG4gICAgICByZXR1cm4gZGF0YT8uZmluZCgoaXRlbTogYW55KSA9PiBpdGVtW2lkb2JqZXRvXSA9PSB2YWxvckF0dWFsKVtkZXNjcmljYW9vYmpldG9dXG4gICAgZWxzZSByZXR1cm4gJ0NhcnJlZ2FuZG8nXG4gIH1cblxuXG5cbiAgaXNEaXNhYmxlRWRpdFJvd0Z1bmN0aW9uKHJvd0RhdGE6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5kaXNhYmxlRWRpdFJvd0Z1bmN0aW9uID8gdGhpcy5jb25maWcuZGlzYWJsZUVkaXRSb3dGdW5jdGlvbihyb3dEYXRhKSA6IGZhbHNlO1xuICB9XG5cbiAgaXNEaXNhYmxlRWRpdFJvd0NlbGxGdW5jdGlvbihyb3dEYXRhOiBhbnksIGNvbDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNvbC5kaXNhYmxlRWRpdFJvd0NlbGxGdW5jdGlvbiA/IGNvbC5kaXNhYmxlRWRpdFJvd0NlbGxGdW5jdGlvbihyb3dEYXRhKSA6IGZhbHNlO1xuICB9XG5cbiAgaXNFZGl0YWJsZVRhYmxlKCk6IGJvb2xlYW4gfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmNvbHVtbnMpXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jb2x1bW5zLnNvbWUoKGNvbHVtbjogYW55KSA9PiAnZmllbGRDb250cm9sVHlwZScgaW4gY29sdW1uKTtcbiAgfVxuXG5cbiAgdHJhbnNmb3JtVmFsdWVEcm9wKHZhbHVlOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pIHtcbiAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgaWYgKCFjb2wucGlwZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoY29sLnBpcGUpIHtcbiAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCAnZGQvTU0veXl5eScpO1xuICAgICAgICBjYXNlICdkYXRldGltZSc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCAnZGQvTU0veXl5eSBoaDptbScpO1xuICAgICAgICBjYXNlICdkZWNpbWFsJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5kZWNpbWFsUGlwZS50cmFuc2Zvcm0odmFsdWUsICcxLjItMicsICdwdC1CUicpO1xuICAgICAgICBjYXNlICdjcGZjbnBqJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5jcGZDbnBqUGlwZS50cmFuc2Zvcm0odmFsdWUpO1xuICAgICAgICBjYXNlICd0ZWxlZm9uZSc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMudGVsZWZvbmVQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XG4gICAgICAgIGNhc2UgJ2NhcGl0YWxpemUnOlxuICAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybUNhcGl0YWxpemUodmFsdWUpO1xuICAgICAgICBjYXNlICdtb25leSc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0YXJWYWxvcih2YWx1ZSk7XG4gICAgICAgIGNhc2UgJ3BlcmNlbnRhZ2UnOlxuICAgICAgICAgIHJldHVybiBgJHsgdmFsdWUgfSAlYDtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG5cbiIsIjxkaXYgY2xhc3M9XCJjYXJkXCIgaWQ9XCJ0YW1hbmhvdGFiZWxhXCIgW3N0eWxlLmZvbnQtc2l6ZV09XCInMXB4J1wiPlxuICA8cC10b2FzdD48L3AtdG9hc3Q+XG5cbiAgPHAtcGFuZWxcbiAgICAqbmdJZj1cImZpbHRyb3NBdmFuY2Fkb3NcIlxuICAgIGhlYWRlcj1cIkZpbHRyb3MgYXZhbsOnYWRvc1wiXG4gICAgW3RvZ2dsZWFibGVdPVwidHJ1ZVwiXG4gICAgW2NvbGxhcHNlZF09XCJ0cnVlXCJcbiAgICAoY29sbGFwc2VkQ2hhbmdlKT1cImNvbGxhcHNlZCA9ICFjb2xsYXBzZWRcIlxuICAgIFtzdHlsZV09XCJ7ICdtYXJnaW4tYm90dG9tJzogJzJweCcgfVwiXG4gID5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyaWNvbnNcIj5cbiAgICAgIDxpICpuZ0lmPVwiIWNvbGxhcHNlZFwiIGNsYXNzPVwicGkgcGktZmlsdGVyXCI+PC9pPlxuICAgICAgPCEtLSDDjWNvbmUgcXVhbmRvIG8gcGFpbmVsIGVzdMOhIGFiZXJ0byAtLT5cbiAgICAgIDxpICpuZ0lmPVwiY29sbGFwc2VkXCIgY2xhc3M9XCJwaSBwaS1taW51c1wiPjwvaT5cbiAgICAgIDwhLS0gw41jb25lIHF1YW5kbyBvIHBhaW5lbCBlc3TDoSBmZWNoYWRvIC0tPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L3AtcGFuZWw+XG5cbiAgPHAtY29udGV4dE1lbnUgI2NtIFttb2RlbF09XCJpdGVtc0NvbnRleHRNZW51XCI+PC9wLWNvbnRleHRNZW51PlxuICA8cC10YWJsZVxuICAgICN0ZVxuICAgIFtlZGl0TW9kZV09XCJlZGl0TW9kZVwiXG4gICAgKG9uRWRpdENvbXBsZXRlKT1cIm9uRWRpdENvbXBsZXRlKCRldmVudClcIlxuICAgIChvbkVkaXRJbml0KT1cIm9uRWRpdEluaXQoJGV2ZW50KVwiXG4gICAgW3Jlb3JkZXJhYmxlQ29sdW1uc109XCJjb25maWcucmVvcmRlcmFibGVDb2x1bW5zIHx8IGZhbHNlXCJcbiAgICAqbmdJZj1cImNvbmZpZ1wiXG4gICAgW3ZhbHVlXT1cImRhdGFTb3VyY2VcIlxuICAgIFtkYXRhS2V5XT1cImNvbmZpZy5kYXRhS2V5XCJcbiAgICBbY29sdW1uc109XCJjb25maWcuY29sdW1uc1wiXG4gICAgW3Njcm9sbGFibGVdPVwidHJ1ZVwiXG4gICAgYXBwZW5kVG89XCJib2R5XCJcbiAgICBbc3R5bGVDbGFzc109XCJzZWxlY3RlZFNpemUuY2xhc3NcIlxuICAgIFsoc2VsZWN0aW9uKV09XCJzZWxlY3RlZEl0ZW1zXCJcbiAgICBbcm93U2VsZWN0YWJsZV09XCJpc1Jvd1NlbGVjdGFibGVcIlxuICAgIFtnbG9iYWxGaWx0ZXJGaWVsZHNdPVwiZ2xvYmFsRmlsdGVyRmllbGRzXCJcbiAgICBbcm93c109XCJyb3dzXCJcbiAgICBbcGFnaW5hdG9yXT1cInBhZ2luYXRvclwiXG4gICAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJyb3dzUGVyUGFnZU9wdGlvbnNcIlxuICAgIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiXG4gICAgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cIntmaXJzdH0gLSB7bGFzdH0gZGUge3RvdGFsUmVjb3Jkc31cIlxuICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwic2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgIFtyb3dIb3Zlcl09XCJ0cnVlXCJcbiAgICBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiXG4gICAgW2xhenldPVwiY29uZmlnLmxhenlcIlxuICAgIChvbkxhenlMb2FkKT1cInBhZ2luYXRlKCRldmVudClcIlxuICAgIFtncm91cFJvd3NCeV09XCJjb25maWcuZmllbGRHcm91cFwiXG4gICAgcGFnaW5hdG9yRHJvcGRvd25BcHBlbmRUbz1cImJvZHlcIlxuICAgIFtzaG93Rmlyc3RMYXN0SWNvbl09XCJzaG93Rmlyc3RMYXN0SWNvblwiXG4gICAgW3BhZ2VMaW5rc109XCJwYWdlTGlua3NPcHRpb25zXCJcbiAgICBbc2Nyb2xsYWJsZV09XCJpc1RhYmxlU2Nyb2xsYWJsZVwiXG4gICAgW3Njcm9sbEhlaWdodF09XCJzY3JvbGxIZWlnaHRcIlxuICAgIFtyb3dUcmFja0J5XT1cInJvd1RyYWNrQnlcIlxuICAgIFsoY29udGV4dE1lbnVTZWxlY3Rpb24pXT1cInNlbGVjdGVkUHJvZHVjdFwiXG4gICAgW2NvbnRleHRNZW51XT1cImlzRWRpdGFibGVUYWJsZSgpID8gY20gOiBudWxsXCJcbiAgPlxuICAgIDwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XG5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY2FwdGlvblwiICpuZ0lmPVwiY29uZmlnLmVuYWJsZUNhdGlvbiB8fCBlbmFibGVTaXplc1wiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgZmxleC13cmFwIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBncmlkIGZvcm1ncmlkIHAtZmx1aWQgY29sLTEyXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBmbGV4IGZsZXgtY29sdW1uXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImNvbmZpZy50aXRsZVwiIGNsYXNzPVwidGV4dC1tZCBmb250LWJvbGQgbXktM1wiPlxuICAgICAgICAgICAge3sgY29uZmlnLnRpdGxlIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImNvbmZpZy5zdWJ0aXRsZVwiIGNsYXNzPVwidGV4dC1zbSBtYi00IGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICB7eyBjb25maWcuc3VidGl0bGUgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgbWQ6Y29sLTYgbGc6Y29sLTQge3tcbiAgICAgICAgICAgIHRhbWFuaG9UZWxhIDwgNzY4ID8gJ2NvbC0xMCcgOiAnY29sLTEyJ1xuICAgICAgICAgIH19IG10LTEgbWItMiBcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb25maWcuZW5hYmxlRmlsdGVyXCIgY2xhc3M9XCJwLWlucHV0LWljb24tbGVmdFwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1zZWFyY2hcIj48L2k+XG5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgICAgICAgIHBBdXRvRm9jdXNcbiAgICAgICAgICAgICAgW2F1dG9mb2N1c109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAoaW5wdXQpPVwib25HbG9iYWxGaWx0ZXIodGUsICRldmVudClcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlBlc3F1aXNhci4uLlwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiaC0ycmVtXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgPCEtLSBGSVhNRTogT3DDp8OjbyAxICAtLT5cbiAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJzaXplcy1jb250cm9scyBtbC0yXCIgKm5nSWY9XCJpc1Nob3dTaXplc1wiPlxuICAgICAgICAgICAgPHAtc2VsZWN0QnV0dG9uXG4gICAgICAgICAgICAgICAgW29wdGlvbnNdPVwic2l6ZXNcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRTaXplXCJcbiAgICAgICAgICAgICAgICBbc3R5bGVdPVwieydkaXNwbGF5JzogJ2ZsZXgnfVwiXG4gICAgICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGlkPVwiYnRuLXNpemVzXCJcbiAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgW3BUb29sdGlwXT1cImlzU2hvd1NpemVzID8gJ0VzY29uZGVyIGNvbnRyb2xlcyBkZSB0YW1hbmhvJyA6ICdNb3N0cmFyIGNvbnRyb2xlcyBkZSB0YW1hbmhvJ1wiXG4gICAgICAgICAgY2xhc3M9XCJhY3Rpb25Mb3RlQnRucyBwLWJ1dHRvbi1yYWlzZWQgcC1idXR0b24tdGV4dFwiXG4gICAgICAgICAgKGNsaWNrKT1cImlzU2hvd1NpemVzID0gIWlzU2hvd1NpemVzXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuICBzdHlsZT1cImZvbnQtc2l6ZTogMC44cmVtO1wiIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1lbmRcIj5cbiAgICAgICAgICA8c3BhbiAgc3R5bGU9XCJmb250LXNpemU6IDAuN3JlbTtcIj5cbiAgICAgICAgICAgIEFcbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICBBXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj4gLS0+XG5cbiAgICAgICAgICA8IS0tIEZJWE1FOiBPcMOnw6NvIDIgIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJlbmFibGVTaXplc1wiIGNsYXNzPVwic2l6ZXMtY29udHJvbHMgbWwtMlwiPlxuICAgICAgICAgICAgPCEtLSA8cC1zcGxpdEJ1dHRvblxuICAgICAgICAgICAgICBsYWJlbD1cImFBXCJcbiAgICAgICAgICAgICAgW21vZGVsXT1cInNpemVzXCJcbiAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cInRlc3RlXCJcbiAgICAgICAgICAgICAgW21lbnVTdHlsZV09XCJ7J2ZvbnQtc2l6ZSc6ICcwLjdyZW0nfVwiXG5cbiAgICAgICAgICAgICAgbmdNb2RlbFxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9wLXNwbGl0QnV0dG9uPiAtLT5cbiAgICAgICAgICAgIDwhLS0gPHAtYnV0dG9uICBpY29uPVwicGkgcGktZWxsaXBzaXMtdlwiLz4gLS0+XG5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgaWQ9XCJhY3Rpb25Mb3RlQnRuc1wiXG4gICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm1lbnUudG9nZ2xlKCRldmVudClcIlxuICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbkxvdGVCdG5zIHAtYnV0dG9uLXJhaXNlZCBwLWJ1dHRvbi10ZXh0XCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjMWRhNzUwOyBjb2xvcjogI2ZmZjsgZGlzcGxheTogZmxleFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC14c1wiPkE8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tZFwiPkE8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPHAtdGllcmVkTWVudVxuICAgICAgICAgICAgICBbc3R5bGVdPVwieyAnZm9udC1zaXplJzogJzAuN3JlbScgfVwiXG4gICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJtZW51U2l6ZXNcIlxuICAgICAgICAgICAgICBhcHBlbmRUbz1cImJvZHlcIlxuICAgICAgICAgICAgICAjbWVudVxuICAgICAgICAgICAgICBbbW9kZWxdPVwic2l6ZXNcIlxuICAgICAgICAgICAgICBbcG9wdXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtaXRlbSBwVGVtcGxhdGU9XCJpdGVtXCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBmbGV4IGdhcC0yIGFsaWduLWl0ZW1zLWNlbnRlciBwbC0xIG0tMiBtZW51LXNpemVzXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpdGVtLmNvbW1hbmQoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRoaXMuc2VsZWN0ZWRTaXplLnNpemUgIT0gaXRlbS5zaXplXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0YWdcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCInI0VBRUFFQSdcIlxuICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRoaXMuc2VsZWN0ZWRTaXplLnNpemUgPT0gaXRlbS5zaXplXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0YWdcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCInIzFEQTc1MCdcIlxuICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3AtdGllcmVkTWVudT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIEZJWE1FOiBPcMOnw6NvIDMgIC0tPlxuICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInNpemVzLWNvbnRyb2xzIG1sLTJcIiBzdHlsZT1cInRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgLTE1cHgpO1wiID5cbiAgICAgICAgICAgIDxwLXNwZWVkRGlhbFxuICAgICAgICAgICAgICBbbW9kZWxdPVwic2l6ZXNcIlxuICAgICAgICAgICAgICBzaG93SWNvbj1cImZvcm1hdF9zaXplXCJcbiAgICAgICAgICAgICAgW21hc2tdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIGRpcmVjdGlvbj1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgYnV0dG9uQ2xhc3NOYW1lPVwiaXRlbS1jaXJjbGVcIlxuICAgICAgICAgICAgPlxuXG5cblxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWl0ZW0gcFRlbXBsYXRlPVwiaXRlbVwiID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tY2lyY2xlIGN1cnNvci1wb2ludGVyXG5cbiAgICAgICAgICAgICAgc2hhZG93LTIgaG92ZXI6c2hhZG93LThcblxuICAgICAgICAgICAgICBcIiAoY2xpY2spPVwiaXRlbS5jb21tYW5kKClcIj5cbiAgICAgICAgICAgICAgICB7e2l0ZW0ubGFiZWx9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICA8L3Atc3BlZWREaWFsPlxuICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJpc0VkaXRpbmdcIiBjbGFzcz1cInRleHQtYXZpc29cIj5cbiAgICAgICAgICBUYWJlbGEgZW0gbW9kbyBkZSBlZGnDp8Ojb1xuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgY29sLTEganVzdGlmeS1jb250ZW50LWVuZFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29uZmlnLmFjdGlvbnNMb3RlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRucy1vcHRpb25zIGZsZXggZmxleC1yb3dcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgaWQ9XCJhY3Rpb25Mb3RlQnRuc1wiXG4gICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAhaXNFZGl0aW5nICYmXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCB8fCBhY3Rpb24uc2hvd0Fjb2VzTG90ZSkgJiZcbiAgICAgICAgICAgICAgICBleGliaXJDYW1wbyhhY3Rpb24sIHRoaXMuYWN0aW9uKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbkxvdGVCdG5zIGJvcmRlci1ub25lXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjMWRhNzUwXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbj8uY29tbWFuZCgpOyBhY3RpdmVJdGVtTG90ZShzZWxlY3RlZEl0ZW1zKVwiXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJnZXRPckV4ZWN1dGUoYWN0aW9uLnRvb2x0aXAsIHNlbGVjdGVkSXRlbXMpXCJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInYm90dG9tJ1wiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJnZXRPckV4ZWN1dGUoYWN0aW9uLmRpc2FibGVkLCBzZWxlY3RlZEl0ZW1zKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImNvbG9yOiB3aGl0ZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBnZXRPckV4ZWN1dGUoYWN0aW9uLmljb24sIHNlbGVjdGVkSXRlbXMpIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJpc0VkaXRhYmxlVGFibGUoKVwiXG4gICAgICAgICAgICBjbGFzcz1cImJ0bnMtb3B0aW9uc1wiXG4gICAgICAgICAgICBbc3R5bGVdPVwieyAnbWFyZ2luLXJpZ2h0JzogJzdweCcgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPVwidGhpcy5pc0VkaXRpbmcgPSAhdGhpcy5pc0VkaXRpbmdcIlxuICAgICAgICAgICAgICBpZD1cImFjdGlvbkxvdGVCdG5zXCJcbiAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiIWlzRWRpdGluZyA/ICdIYWJpbGl0YXIgRWRpw6fDo28nIDogJ0Rlc2FiaWxpdGFyIEVkacOnw6NvJ1wiXG4gICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjMWRhNzUwOyBjb2xvcjogI2ZmZlwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uTG90ZUJ0bnMgcC1idXR0b24tcmFpc2VkIHAtYnV0dG9uLXRleHRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gZWRpdF9zcXVhcmUgPC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIiBsZXQtY29sdW1ucz5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRoXG4gICAgICAgICAgc3R5bGU9XCJ3aWR0aDogNHJlbTsgYm9yZGVyLWxlZnQ6IHNvbGlkIDRweCB0cmFuc3BhcmVudFwiXG4gICAgICAgICAgKm5nSWY9XCJjb25maWcuZW5hYmxlU2VsZWN0ICYmICFpc0VkaXRpbmdcIlxuICAgICAgICAgIFtjbGFzc109XCJzZWxlY3RlZFNpemUuY2xhc3MgKyAndGgnXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwLXRhYmxlSGVhZGVyQ2hlY2tib3hcbiAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmVJdGVtTG90ZShzZWxlY3RlZEl0ZW1zKVwiXG4gICAgICAgICAgPjwvcC10YWJsZUhlYWRlckNoZWNrYm94PlxuICAgICAgICA8L3RoPlxuXG4gICAgICAgIDx0aFxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiXG4gICAgICAgICAgW3BTb3J0YWJsZUNvbHVtbl09XCJjb2wuZmllbGRcIlxuICAgICAgICAgIFtwU29ydGFibGVDb2x1bW5EaXNhYmxlZF09XCJjb2wuc29ydGFibGUgPT09IGZhbHNlXCJcbiAgICAgICAgICBbc3R5bGUubWluLXdpZHRoXT1cImNvbC53aWR0aCAqIHNlbGVjdGVkU2l6ZS5zaXplICsgJ3B4J1wiXG4gICAgICAgICAgcFJlb3JkZXJhYmxlQ29sdW1uXG4gICAgICAgICAgW2NsYXNzXT1cInNlbGVjdGVkU2l6ZS5jbGFzcyArICd0aCdcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICBjZW50cmFsaXphckNvbHVuYXMoY29sKSAmJiBhbGlnbkNvbHVuYXNIZWFkZXIoY29sKSA9PSAnJ1xuICAgICAgICAgICAgICAgID8gJ2ZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWNlbnRlcidcbiAgICAgICAgICAgICAgICA6ICdmbGV4IGZsZXgtcm93J1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJhbGlnbkNvbHVuYXNIZWFkZXIoY29sKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4+e3sgY29sLmhlYWRlciB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxwLXNvcnRJY29uXG4gICAgICAgICAgICAgICpuZ0lmPVwiY29sLnNvcnRhYmxlID09PSB0cnVlXCJcbiAgICAgICAgICAgICAgW2ZpZWxkXT1cImNvbC5maWVsZFwiXG4gICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAxMHB4XCJcbiAgICAgICAgICAgID48L3Atc29ydEljb24+XG5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICpuZ0lmPVwiY29sLmhlYWRlclRvb2x0aXBcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiY29sLmhlYWRlclRvb2x0aXBcIlxuICAgICAgICAgICAgICA+aW5mbzwvc3BhblxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGhcbiAgICAgICAgICAqbmdJZj1cIiFpc0VkaXRpbmcgJiYgY29uZmlnLmFjdGlvbnMgJiYgY29uZmlnLmFjdGlvbnMubGVuZ3RoID4gMFwiXG4gICAgICAgID48L3RoPlxuICAgICAgICA8dGhcbiAgICAgICAgICAqbmdJZj1cImlzRWRpdGFibGVUYWJsZSgpICYmIHRoaXMuZWRpdE1vZGUgPT0gJ3JvdydcIlxuICAgICAgICAgIGlkPVwidGgtZWRpdFwiXG4gICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMjBweFwiXG4gICAgICAgID5cbiAgICAgICAgICBFZGl0YXJcbiAgICAgICAgPC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XG5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgIHBUZW1wbGF0ZT1cImJvZHlcIlxuICAgICAgbGV0LXJvd0RhdGFcbiAgICAgIGxldC1lZGl0aW5nPVwiZWRpdGluZ1wiXG4gICAgICBsZXQtcmk9XCJyb3dJbmRleFwiXG4gICAgICBsZXQtY29sdW1ucz1cImNvbHVtbnNcIlxuICAgICAgbGV0LXJvd2dyb3VwPVwicm93Z3JvdXBcIlxuICAgICAgbGV0LXJvd3NwYW49XCJyb3dzcGFuXCJcbiAgICA+XG4gICAgICA8dHJcbiAgICAgICAgW3BFZGl0YWJsZVJvd109XCJyb3dEYXRhXCJcbiAgICAgICAgW3BFZGl0YWJsZVJvd0Rpc2FibGVkXT1cImZhbHNlXCJcbiAgICAgICAgW3BDb250ZXh0TWVudVJvd109XCJ7cm93RGF0YSwgZWRpdGluZ31cIlxuICAgICAgICBbY2xhc3NdPVwic2VsZWN0ZWRTaXplLmNsYXNzICsgJy10cidcIlxuICAgICAgPlxuICAgICAgICA8dGRcbiAgICAgICAgICAqbmdJZj1cImNvbmZpZy5lbmFibGVTZWxlY3QgJiYgIWlzRWRpdGluZ1wiXG4gICAgICAgICAgW3N0eWxlXT1cImFwcGx5U3R5bGUocm93RGF0YSwgeyBmaWVsZDogJ2NoZWNrLWJveCcsIGhlYWRlcjogJycgfSlcIlxuICAgICAgICA+XG4gICAgICAgICAgPCEtLTxwLXRhYmxlQ2hlY2tib3ggKm5nSWY9XCJpc1Zpc2libGVDaGVja2JveChyb3dEYXRhKVwiLS0+XG4gICAgICAgICAgPHAtdGFibGVDaGVja2JveFxuICAgICAgICAgICAgY2xhc3M9XCJjaGVjay1lZGl0LWxpc3RcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInJvd0RhdGFcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRDaGVja2JveChyb3dEYXRhKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtcylcIlxuICAgICAgICAgID48L3AtdGFibGVDaGVja2JveD5cbiAgICAgICAgPC90ZD5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgIDwhLS0gRklYTUU6IFRlc3RhciBhIGltcGxlbWVudGHDp8OjbyBhYmFpeG8gZSBtZXNhY2xhciBhcyBkdWFzIGZvcm1hcyAtLT5cblxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVJbnB1dCBsZXQtcm93RGF0YT1cInJvd0RhdGFcIiBsZXQtY29sPVwiY29sXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFZGl0aW5nOyBlbHNlIHRlbXBsYXRldmlzdWFsZWRpY2FvXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbC5maWVsZENvbnRyb2xUeXBlXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RleHQnXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFtzdHlsZS53aWR0aF09XCJjb2wud2lkdGhcIiBjbGFzcz1cImdyaWQgZm9ybWdyaWQgcC1mbHVpZFwiPlxuICAgICAgICAgICAgICAgICAgICA8a3YtaW5wdXQtdGV4dFxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVFZGl0Um93Q2VsbEZ1bmN0aW9uKHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2VsbENvbnRyb2wgY29sXCJcbiAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd0RhdGFbY29sLmZpZWxkXVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImNvbC5yZXF1aXJlZCA/PyB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgPjwva3YtaW5wdXQtdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgW3N0eWxlLndpZHRoXT1cImNvbC53aWR0aFwiIGNsYXNzPVwiZ3JpZCBmb3JtZ3JpZCBwLWZsdWlkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxrdi1pbnB1dC1udW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlRWRpdFJvd0NlbGxGdW5jdGlvbihyb3dEYXRhLCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNlbGxDb250cm9sIGNvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dEYXRhW2NvbC5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJjb2wucmVxdWlyZWQgPz8gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgID48L2t2LWlucHV0LW51bWJlcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ21hc2snXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFtzdHlsZS53aWR0aF09XCJjb2wud2lkdGhcIiBjbGFzcz1cImdyaWQgZm9ybWdyaWQgcC1mbHVpZFwiPlxuICAgICAgICAgICAgICAgICAgICA8a3YtaW5wdXQtbWFza1xuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVFZGl0Um93Q2VsbEZ1bmN0aW9uKHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2VsbENvbnRyb2wgY29sXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbWFza109XCJjb2wubWFza1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImNvbC5yZXF1aXJlZCA/PyB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd0RhdGFbY29sLmZpZWxkXVwiXG4gICAgICAgICAgICAgICAgICAgID48L2t2LWlucHV0LW1hc2s+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzd2l0Y2gnXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFtzdHlsZS53aWR0aF09XCJjb2wud2lkdGhcIiBjbGFzcz1cImdyaWQgZm9ybWdyaWQgcC1mbHVpZFwiPlxuICAgICAgICAgICAgICAgICAgICA8a3Ytc3dpdGNoXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZUVkaXRSb3dDZWxsRnVuY3Rpb24ocm93RGF0YSwgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjZWxsQ29udHJvbCBjb2xcIlxuICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93RGF0YVtjb2wuZmllbGRdXCJcbiAgICAgICAgICAgICAgICAgICAgPjwva3Ytc3dpdGNoPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2FsZW5kYXInXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFtzdHlsZS53aWR0aF09XCJjb2wud2lkdGhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2wud2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JpZCBmb3JtZ3JpZCBwLWZsdWlkXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxrdi1pbnB1dC1jYWxlbmRhclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjZWxsQ29udHJvbCBjb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dEYXRhW2NvbC5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgICAgID48L2t2LWlucHV0LWNhbGVuZGFyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkcm9wZG93bidcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgW3N0eWxlLndpZHRoXT1cImNvbC53aWR0aFwiIGNsYXNzPVwiZ3JpZCBmb3JtZ3JpZCBwLWZsdWlkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZUVkaXRSb3dDZWxsRnVuY3Rpb24ocm93RGF0YSwgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjZWxsQ29udHJvbCBjb2xcIlxuICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3BhbmVsU3R5bGVdPVwieyAnZm9udC1zaXplJzogJzAuNzVyZW0nIH1cIlxuICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25MYWJlbF09XCJjb2wuZmllbGREcm9wRG93bkNvbnRyb2wuZGVzY3JpY2Fvb2JqZXRvXCJcbiAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdPVwiY29sLmZpZWxkRHJvcERvd25Db250cm9sLmlkb2JqZXRvXCJcbiAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbC5maWVsZERyb3BEb3duQ29udHJvbC5maWVsZENvbnRyb2xEcm9wZG93blNvdXJjZVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dEYXRhW2NvbC5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RlbXBsYXRldmlzdWFsZWRpY2FvPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlT3V0cHV0O1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogeyByb3dEYXRhOiByb3dEYXRhLCBjb2w6IGNvbCB9XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZU91dHB1dCBsZXQtcm93RGF0YT1cInJvd0RhdGFcIiBsZXQtY29sPVwiY29sXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb2wuZmllbGRDb250cm9sVHlwZVwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZHJvcGRvd24nXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvd0RhdGFbY29sLmZpZWxkXVwiPlxuICAgICAgICAgICAgICAgICAge3sgdHJhbnNmb3JtVmFsdWVEcm9wKHJldG9ybmFEZXNjcmljYW9Ecm9wKHJvd0RhdGEsIGNvbCksIGNvbCkgfX1cbiAgICAgICAgICAgICAgICAgIDwhLS0ge3tyb3dEYXRhW2NvbC5maWVsZF19fSAtLT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3N3aXRjaCdcIj5cbiAgICAgICAgICAgICAgICA8a3Ytc3dpdGNoXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd0RhdGFbY29sLmZpZWxkXVwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgPjwva3Ytc3dpdGNoPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2FsZW5kYXInXCI+XG4gICAgICAgICAgICAgICAge3sgcm93RGF0YVtjb2wuZmllbGRdIHwgZGF0ZSB9fVxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbWFzaydcIj5cbiAgICAgICAgICAgICAgICB7eyByb3dEYXRhW2NvbC5maWVsZF0gfCBtYXNrIDogY29sLm1hc2sgfX1cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgICAgICAgIHt7ICB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpIH19XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgKm5nSWY9XCJlZGl0TW9kZSA9PSAnY2VsbCcgJiYgY29sLmZpZWxkQ29udHJvbFR5cGVcIlxuICAgICAgICAgICAgW3BFZGl0YWJsZUNvbHVtbl09XCJyb3dEYXRhXCJcbiAgICAgICAgICAgIFtwRWRpdGFibGVDb2x1bW5GaWVsZF09XCJjb2wuZmllbGRcIlxuICAgICAgICAgICAgW3BFZGl0YWJsZUNvbHVtblJvd0luZGV4XT1cInJvd0RhdGFbY29uZmlnLmRhdGFLZXldXCJcbiAgICAgICAgICAgIFtpZF09XCIncm93VGFibGUnICsgcm93RGF0YVtjb25maWcuZGF0YUtleV1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZUl0ZW0ocm93RGF0YSlcIlxuICAgICAgICAgICAgKGRibGNsaWNrKT1cImRiQ2xpY2tFZGl0KClcIlxuICAgICAgICAgICAgY2xhc3M9XCJyb3dUYWJsZVwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiXG4gICAgICAgICAgICAgIGFwcGx5U3R5bGUocm93RGF0YSwgY29sKSArXG4gICAgICAgICAgICAgIGNlbnRyYWxpemFyQ29sdW5hcyhjb2wpICtcbiAgICAgICAgICAgICAgYWxpZ25Db2x1bmFzKGNvbClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcFJvdyhyb3dEYXRhLCBjb2wpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlSW5wdXQ7XG4gICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyByb3dEYXRhOiByb3dEYXRhLCBjb2w6IGNvbCB9XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZU91dHB1dDtcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7IHJvd0RhdGE6IHJvd0RhdGEsIGNvbDogY29sIH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8IS0tIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIiFpc0VkaXRpbmdcIiBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZUlucHV0OyBjb250ZXh0OiB7IHJvd0RhdGE6IHJvd0RhdGEsIGNvbDogY29sIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJpc0VkaXRpbmdcIiBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVPdXRwdXQ7IGNvbnRleHQ6IHsgcm93RGF0YTogcm93RGF0YSwgY29sOiBjb2wgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPiAtLT5cbiAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgIDwvdGQ+XG5cbiAgICAgICAgICA8IS0tIE5PVEU6IEVkacOnw6NvIGRlIGxpbmhhIC0tPlxuICAgICAgICAgIDwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XG4gICAgICAgICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cbiAgICAgICAgICA8IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxuXG4gICAgICAgICAgPCEtLSBDZWx1bGEgcXVlIGFybWF6ZW5hIG9zIGNvbnRyb2xlcyBkZSBlZGnDp8OjbyBwYXJhIG9zIGNhbXBvcyAtLT5cbiAgICAgICAgICA8dGRcbiAgICAgICAgICAgICpuZ0lmPVwiZmFsc2UgJiYgY29sLmZpZWxkQ29udHJvbFR5cGUgJiYgZWRpdE1vZGUgPT0gJ3JvdydcIlxuICAgICAgICAgICAgW2lkXT1cIidyb3dUYWJsZScgKyByb3dEYXRhW2NvbmZpZy5kYXRhS2V5XVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZlSXRlbShyb3dEYXRhKVwiXG4gICAgICAgICAgICAoZGJsY2xpY2spPVwiZGJDbGlja0VkaXQoKVwiXG4gICAgICAgICAgICBjbGFzcz1cInJvd1RhYmxlXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJcbiAgICAgICAgICAgICAgYXBwbHlTdHlsZShyb3dEYXRhLCBjb2wpICtcbiAgICAgICAgICAgICAgY2VudHJhbGl6YXJDb2x1bmFzKGNvbCkgK1xuICAgICAgICAgICAgICBhbGlnbkNvbHVuYXMoY29sKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwUm93KHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxwLWNlbGxFZGl0b3JcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBzd2l0Y2g6IGNvbC5maWVsZENvbnRyb2xUeXBlID09ICdzd2l0Y2gnIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUlucHV0O1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7IHJvd0RhdGE6IHJvd0RhdGEsIGNvbDogY29sIH1cbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZU91dHB1dDtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyByb3dEYXRhOiByb3dEYXRhLCBjb2w6IGNvbCB9XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgIDwvdGQ+XG5cbiAgICAgICAgICA8IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxuICAgICAgICAgIDwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XG4gICAgICAgICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cblxuICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgKm5nSWY9XCJyb3dncm91cCAmJiAhY29sLnRlbXBsYXRlXCJcbiAgICAgICAgICAgIFthdHRyLnJvd3NwYW5dPVwicm93Z3JvdXAgJiYgY29sLmdyb3VwZWQgPyByb3dzcGFuIDogbnVsbFwiXG4gICAgICAgICAgICBjbGFzcz1cInJvd1RhYmxlXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJcbiAgICAgICAgICAgICAgYXBwbHlTdHlsZShyb3dEYXRhLCBjb2wpICtcbiAgICAgICAgICAgICAgY2VudHJhbGl6YXJDb2x1bmFzKGNvbCkgK1xuICAgICAgICAgICAgICBhbGlnbkNvbHVuYXMoY29sKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwUm93KHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1jb2x1bW4tdGl0bGVcIj57eyBjb2wuaGVhZGVyIH19Ojwvc3Bhbj5cblxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgKm5nSWY9XCIhaXNCb29sZWFuRmllbGQocm93RGF0YSwgY29sKTsgZWxzZSBib29sZWFuRmllbGRcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwicmV0dXJuUm93Q2xhc3Mocm93RGF0YSwgY29sKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICFpc0NoaXBGaWVsZChjb2wpICYmICFjb2wuaWNvbkZpZWxkICYmICFpc0ltYWdlRmllbGQoY29sKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImNvbC5pY29uXCIgW2NsYXNzXT1cImNvbC5pY29uICsgJyBtci0yJ1wiPjwvaT5cbiAgICAgICAgICAgICAgICB7eyB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNDaGlwRmllbGQoY29sKSAmJiAhY29sLmljb25GaWVsZFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicmV0dXJuQ2xhc3NDaGlwKHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBJY29uKHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgICAgICAgPnt7IHRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbCkgfX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzSW1hZ2VGaWVsZChjb2wpXCI+XG4gICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWFnZVwiIFtzcmNdPVwibG9hZEltYWdlKHJvd0RhdGEsIGNvbClcIiAvPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICpuZ0lmPVwiY29sLmljb25GaWVsZFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAnbWF0ZXJpYWwtaWNvbnMnOiBjb2wuaW5kSWNvbk1hdGVyaWFsLFxuICAgICAgICAgICAgICAgICdtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIG1yLTInOiAhY29sLmluZEljb25NYXRlcmlhbFxuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBJY29uKHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyByZXR1cm5DbGFzc0ljb24ocm93RGF0YSwgY29sKSB9fVxuICAgICAgICAgICAgPC9pPlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Jvb2xlYW5GaWVsZD5cbiAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb2wuaWNvbkZpZWxkICYmICFpc1N3aXRjaEZpZWxkKGNvbClcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgcm93RGF0YVtjb2wuZmllbGRdID8gJ3RleHQtZ3JlZW4tNTAwJyA6ICd0ZXh0LXJlZC01MDAnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+XG4gICAgICAgICAgICAgICAgICB7eyByb3dEYXRhW2NvbC5maWVsZF0gPyBcImNoZWNrXCIgOiBcImNsb3NlXCIgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvaT5cblxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNTd2l0Y2hGaWVsZChjb2wpXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NdPVwicmV0dXJuUm93Q2xhc3Mocm93RGF0YSwgY29sKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8a3Ytc3dpdGNoXG4gICAgICAgICAgICAgICAgICAob25Td2l0Y2hDaGFuZ2UpPVwib25Td2l0Y2hDaGFuZ2UoJGV2ZW50LCByb3dEYXRhLCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb2w/Lm9ubHlSZWFkRmllbGQgPz8gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbc3dpdGNoVmFsdWVdPVwidHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwva3Ytc3dpdGNoPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvdGQ+XG5cbiAgICAgICAgICA8dGRcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICFyb3dncm91cCAmJlxuICAgICAgICAgICAgICAhY29sLmdyb3VwZWQgJiZcbiAgICAgICAgICAgICAgIWNvbC50ZW1wbGF0ZSAmJlxuICAgICAgICAgICAgICAhY29sLmZpZWxkQ29udHJvbFR5cGVcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiXG4gICAgICAgICAgICAgIGFwcGx5U3R5bGUocm93RGF0YSwgY29sKSArXG4gICAgICAgICAgICAgIGNlbnRyYWxpemFyQ29sdW5hcyhjb2wpICtcbiAgICAgICAgICAgICAgYWxpZ25Db2x1bmFzKGNvbClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cInJvd1RhYmxlXCJcbiAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwUm93KHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1jb2x1bW4tdGl0bGVcIj57eyBjb2wuaGVhZGVyIH19Ojwvc3Bhbj5cblxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgKm5nSWY9XCIhaXNCb29sZWFuRmllbGQocm93RGF0YSwgY29sKTsgZWxzZSBib29sZWFuRmllbGRcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwicmV0dXJuUm93Q2xhc3Mocm93RGF0YSwgY29sKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICFpc0NoaXBGaWVsZChjb2wpICYmICFjb2wuaWNvbkZpZWxkICYmICFpc0ltYWdlRmllbGQoY29sKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImNvbC5pY29uXCIgW2NsYXNzXT1cImNvbC5pY29uICsgJyBtci0yJ1wiPjwvaT5cbiAgICAgICAgICAgICAgICB7eyB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNDaGlwRmllbGQoY29sKSAmJiAhY29sLmljb25GaWVsZFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicmV0dXJuQ2xhc3NDaGlwKHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBJY29uKHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IHRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbCkgfX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzSW1hZ2VGaWVsZChjb2wpXCI+XG4gICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWFnZVwiIFtzcmNdPVwibG9hZEltYWdlKHJvd0RhdGEsIGNvbClcIiAvPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICpuZ0lmPVwiY29sLmljb25GaWVsZFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAnbWF0ZXJpYWwtaWNvbnMnOiBjb2wuaW5kSWNvbk1hdGVyaWFsLFxuICAgICAgICAgICAgICAgICdtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIG1yLTInOiAhY29sLmluZEljb25NYXRlcmlhbFxuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBJY29uKHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyByZXR1cm5DbGFzc0ljb24ocm93RGF0YSwgY29sKSB9fVxuICAgICAgICAgICAgPC9pPlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Jvb2xlYW5GaWVsZD5cbiAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb2wuaWNvbkZpZWxkICYmICFpc1N3aXRjaEZpZWxkKGNvbClcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgcm93RGF0YVtjb2wuZmllbGRdID8gJ3RleHQtZ3JlZW4tNTAwJyA6ICd0ZXh0LXJlZC01MDAnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+XG4gICAgICAgICAgICAgICAgICB7eyByb3dEYXRhW2NvbC5maWVsZF0gPyBcImNoZWNrXCIgOiBcImNsb3NlXCIgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvaT5cblxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNTd2l0Y2hGaWVsZChjb2wpXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NdPVwicmV0dXJuUm93Q2xhc3Mocm93RGF0YSwgY29sKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8a3Ytc3dpdGNoXG4gICAgICAgICAgICAgICAgICAob25Td2l0Y2hDaGFuZ2UpPVwib25Td2l0Y2hDaGFuZ2UoJGV2ZW50LCByb3dEYXRhLCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb2w/Lm9ubHlSZWFkRmllbGQgPz8gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbc3dpdGNoVmFsdWVdPVwidHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwva3Ytc3dpdGNoPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvdGQ+XG5cbiAgICAgICAgICA8dGRcbiAgICAgICAgICAgICpuZ0lmPVwiY29sLnRlbXBsYXRlICYmICFpc0VkaXRhYmxlVGFibGUoKVwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiXG4gICAgICAgICAgICAgIGFwcGx5U3R5bGUocm93RGF0YSwgY29sKSArXG4gICAgICAgICAgICAgIGNlbnRyYWxpemFyQ29sdW5hcyhjb2wpICtcbiAgICAgICAgICAgICAgYWxpZ25Db2x1bmFzKGNvbClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cInJvd1RhYmxlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtY29sdW1uLXRpdGxlXCI+e3sgY29sLmhlYWRlciB9fTo8L3NwYW4+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZ2V0Q3VzdG9tVGVtcGxhdGUoY29sLnRlbXBsYXRlLm5hbWUpXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ2V0Q3VzdG9tVGVtcGxhdGUoY29sLnRlbXBsYXRlLm5hbWUpXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiByb3dEYXRhIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxuICAgICAgICA8IS0tIENvbnRyb2xlIGRlIGHDp8OjbyAgLS0+XG4gICAgICAgIDx0ZFxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICd0ZC10b29scyc6IGlzRWRpdGFibGVUYWJsZSgpICYmIHRoaXMuZWRpdE1vZGUgPT0gJ3JvdycsXG4gICAgICAgICAgICAndGQtdG9vbHMtc3RpY2t5JzogIWlzRWRpdGFibGVUYWJsZSgpIHx8IHRoaXMuZWRpdE1vZGUgPT0gJ2NlbGwnXG4gICAgICAgICAgfVwiXG4gICAgICAgICAgKm5nSWY9XCIhaXNFZGl0aW5nICYmIGNvbmZpZy5hY3Rpb25zICYmIGNvbmZpZy5hY3Rpb25zLmxlbmd0aCA+IDBcIlxuICAgICAgICAgIFtzdHlsZV09XCJcbiAgICAgICAgICAgIGFwcGx5U3R5bGUocm93RGF0YSwgeyBmaWVsZDogJ2J0bnMtb3B0aW9ucycsIGhlYWRlcjogJycgfSkgK1xuICAgICAgICAgICAgJ2JvcmRlci1yaWdodDogMXB4IHNvbGlkICNkZGQgIWltcG9ydGFudDsgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjZGRkICFpbXBvcnRhbnQ7J1xuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtZW5kIHctZnVsbFwiPlxuICAgICAgICAgICAgPCEtLSA8YnV0dG9uXG4gICAgICAgICAgICBpZD1cIm1vcmVWZXJ0QnRuXCJcbiAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uQnRucyBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXJhaXNlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwibWVudS50b2dnbGUoJGV2ZW50KTsgYWN0aXZlSXRlbShyb3dEYXRhKVwiXG4gICAgICAgICAgPiAtLT5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBjdXJzb3ItcG9pbnRlciBpY29uLW1vcmUtaG9yaXpcIlxuICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMXJlbTsgaGVpZ2h0OiAxMHB4OyB3aWR0aDogMjBweFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJtZW51LnRvZ2dsZSgkZXZlbnQpOyBhY3RpdmVJdGVtKHJvd0RhdGEpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgbW9yZV9ob3JpelxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPCEtLSA8L2J1dHRvbj4gLS0+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb25maWcuYWN0aW9uc1wiPlxuICAgICAgICAgICAgICB7eyBjcmlhck1lbnVzTW9kYWwocm93RGF0YSkgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIDxkaXYgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb25maWcuYWN0aW9uc1wiPlxuICAgICAgICAgICAge3sgY3JpYXJNZW51c01vZGFsKHJvd0RhdGEpIH19XG4gICAgICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICAgICAgICA8cC1tZW51XG4gICAgICAgICAgICAgICNtZW51XG4gICAgICAgICAgICAgIFtwb3B1cF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW21vZGVsXT1cIm1lbnVJdGVtc1wiXG4gICAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiXG4gICAgICAgICAgICA+PC9wLW1lbnU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGQ+XG5cbiAgICAgICAgPCEtLSA8dGRcbiAgICAgIGNsYXNzPVwidGQtdG9vbHNcIlxuICAgICAgKm5nSWY9XCIhaXNFZGl0aW5nICYmIGNvbmZpZy5hY3Rpb25zICYmIGNvbmZpZy5hY3Rpb25zLmxlbmd0aCA+IDBcIlxuICAgICAgW3N0eWxlXT1cImFwcGx5U3R5bGUocm93RGF0YSwgeyBmaWVsZDogJ2J0bnMtb3B0aW9ucycsIGhlYWRlcjogJycgfSlcIlxuICAgID5cbiAgICAgIDwvdGQ+IC0tPlxuXG4gICAgICAgIDwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cbiAgICAgICAgPCEtLSBDb250cm9sZSBkZSBlZGnDp8OjbyAtLT5cbiAgICAgICAgPHRkXG4gICAgICAgICAgY2xhc3M9XCJ0ZC1lZGl0XCJcbiAgICAgICAgICAqbmdJZj1cInRoaXMuaXNFZGl0YWJsZVRhYmxlKCkgJiYgdGhpcy5lZGl0TW9kZSA9PSAncm93J1wiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cIicyOHB4J1wiXG4gICAgICAgICAgICAgIFtpZF09XCIncm93RWRpdCcgKyByb3dEYXRhW2NvbmZpZy5kYXRhS2V5XVwiXG4gICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCInMjhweCdcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlRWRpdFJvd0Z1bmN0aW9uKHJvd0RhdGEpXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhZWRpdGluZ1wiXG4gICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgcFJpcHBsZVxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgcEluaXRFZGl0YWJsZVJvd1xuICAgICAgICAgICAgICBpY29uPVwicGkgcGktcGVuY2lsXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93RWRpdEluaXQocm93RGF0YSlcIlxuICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dFwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICA8IS0tIDxidXR0b24gW3N0eWxlLmhlaWdodF09XCInMjhweCdcIiBbc3R5bGUud2lkdGhdPVwiJzI4cHgnXCIgW2Rpc2FibGVkXT1cImlzRGlzYWJsZUVkaXRSb3dGdW5jdGlvbihyb3dEYXRhKVwiICpuZ0lmPVwiZWRpdGluZ1wiIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgcFNhdmVFZGl0YWJsZVJvdyBpY29uPVwicGkgcGktY2hlY2tcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dFZGl0U2F2ZShyb3dEYXRhLCByaSlcIiBbaWRdPVwiJ3Jvd1NhdmUnICsgcm93RGF0YVtjb25maWcuZGF0YUtleV0gXCIgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgcC1idXR0b24tc3VjY2VzcyBtci0yXCI+PC9idXR0b24+IC0tPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cIicyOHB4J1wiXG4gICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCInMjhweCdcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlRWRpdFJvd0Z1bmN0aW9uKHJvd0RhdGEpXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJlZGl0aW5nXCJcbiAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICBwUmlwcGxlXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBwQ2FuY2VsRWRpdGFibGVSb3dcbiAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXRpbWVzXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93RWRpdENhbmNlbChyb3dEYXRhLCByaSlcIlxuICAgICAgICAgICAgICBbaWRdPVwiJ3Jvd0NhbmNlbCcgKyByb3dEYXRhW2NvbmZpZy5kYXRhS2V5XVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWRhbmdlclwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvcC10YWJsZT5cbjwvZGl2PlxuIl19
|
|
320
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdGFibGUtZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9rdi10YWJsZS1lZGl0L2t2LXRhYmxlLWVkaXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtdGFibGUtZWRpdC9rdi10YWJsZS1lZGl0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ1EsTUFBTSxlQUFlLENBQUM7QUFXdEMsT0FBTyxFQU1MLFlBQVksRUFDWixhQUFhLEVBQ2QsTUFBTSxxQkFBcUIsQ0FBQztBQUk3QixPQUFPLEVBQUUsT0FBTyxFQUFnQixTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT3BGLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxrQkFBa0I7SUEwQjFELFlBQ0UsUUFBa0IsRUFDbEIsV0FBd0IsRUFDeEIsV0FBd0IsRUFDeEIsWUFBMEIsRUFDMUIsbUJBQXdDO0lBQ3hDLGtDQUFrQzs7UUFFbEMsS0FBSyxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBN0J0RSxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixhQUFRLEdBQW1CLE1BQU0sQ0FBQztRQUNuQyx3QkFBbUIsR0FBVSxFQUFFLENBQUE7UUFHdkMsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3Qixx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LG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxlQUFlOzhMQVNoQixXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBaUJJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFNpbXBsZUNoYW5nZXN9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHtcclxuICBEYXRlUGlwZSxcclxuICBEZWNpbWFsUGlwZVxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5pbXBvcnQge1xyXG4gIE1lbnVJdGVtfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcblxyXG5cclxuaW1wb3J0IHtcclxuICBDcGZDbnBqUGlwZSxcclxuICBOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gIFRhYmxlQ29uZmlnQ29sdW1uLFxyXG4gIFRlbGVmb25lUGlwZSxcclxuICBWYWx1ZU9yRm4sXHJcbiAgZ2V0T3JFeGVjdXRlLFxyXG4gIG1hcFRvTWVudUl0ZW1cclxufSBmcm9tICcuLi8uLi8uLi9wdWJsaWMtYXBpJztcclxuXHJcbmltcG9ydCB7IFRhYmxlRWRpdENvbmZpZ0NvbHVtbiB9IGZyb20gJy4uLy4uL2FwaS9jb21wb25lbnRzL3RhYmxlL3RhYmxlZWRpdC5jb25maWcuY29sdW1uJztcclxuaW1wb3J0IFRhYmxlRWRpdENvbmZpZyBmcm9tICcuLi8uLi9hcGkvY29tcG9uZW50cy90YWJsZS90YWJsZWRpdC5jb25maWcnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRha2VVbnRpbCwgdGltZXIgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQmFzZWNvbXBvbmVudFRhYmxlIH0gZnJvbSAnLi4vLi4vYXBpL2Jhc2UtY29tcG9uZW50cy9iYXNlLWNvbXBvbmVudC10YWJsZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2t2LXRhYmxlLWVkaXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9rdi10YWJsZS1lZGl0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9rdi10YWJsZS1lZGl0LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEt2VGFibGVFZGl0Q29tcG9uZW50IGV4dGVuZHMgQmFzZWNvbXBvbmVudFRhYmxlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG5cclxuXHJcbiAgb3ZlcnJpZGUgY29uZmlnITogVGFibGVFZGl0Q29uZmlnO1xyXG5cclxuICBASW5wdXQoKSBlbmFibGVTaXplczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGVkaXRNb2RlOiAncm93JyB8ICdjZWxsJyA9ICdjZWxsJztcclxuICBwcml2YXRlIGl0ZW1zUGFyYVNhbHZhbWVudG86IGFueVtdID0gW11cclxuICBwcm90ZWN0ZWQgaXRlbUluaXRpYWxTdGF0ZSE6IGFueTtcclxuXHJcbiAgaXNFZGl0aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNTaG93U2l6ZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjbG9uZWREYXRhU291cmNlOiB7IFtzOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xyXG4gIHNlbGVjdGVkUHJvZHVjdDogYW55ID0ge1xyXG4gICAgcm93RGF0YToge30sXHJcbiAgICBlZGl0aW5nOiBmYWxzZVxyXG4gIH07XHJcblxyXG4gIG1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdO1xyXG4gIC8vXHJcbiAgaXRlbXNDb250ZXh0TWVudSE6IE1lbnVJdGVtW107XHJcblxyXG4gIC8qKiAgRW1pdGUgZXZlbnRvIGRlIHNhbHZhbWVudG8gZGEgbGluaGEgKi9cclxuICBAT3V0cHV0KCkgb25TYXZlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZmlsdGVyRmllbGQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGRhdGVQaXBlOiBEYXRlUGlwZSxcclxuICAgIGRlY2ltYWxQaXBlOiBEZWNpbWFsUGlwZSxcclxuICAgIGNwZkNucGpQaXBlOiBDcGZDbnBqUGlwZSxcclxuICAgIHRlbGVmb25lUGlwZTogVGVsZWZvbmVQaXBlLFxyXG4gICAgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZVxyXG4gICAgLy8gY2FwaXRhbGl6ZVBpcGU6IENhcGl0YWxpemVQaXBlLFxyXG4gICkge1xyXG4gICAgc3VwZXIoZGF0ZVBpcGUsIGRlY2ltYWxQaXBlLCBjcGZDbnBqUGlwZSwgdGVsZWZvbmVQaXBlLCBub3RpZmljYXRpb25TZXJ2aWNlKTtcclxuICAgIHRoaXMuaXNSb3dTZWxlY3RhYmxlID0gdGhpcy5pc1Jvd1NlbGVjdGFibGUuYmluZCh0aGlzKTtcclxuICB9XHJcblxyXG5cclxuICBnZXRPckV4ZWN1dGU8VD4oYWN0aW9uOiBWYWx1ZU9yRm48VD4sIGRhdGE6IGFueSk6IFQge1xyXG4gICAgcmV0dXJuIGdldE9yRXhlY3V0ZShhY3Rpb24sIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgc2l6ZXMgPSBbXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOiAnUGVxdWVubycsIGNsYXNzOiAncC1kYXRhdGFibGUtc20nLCBzaXplOiAwLjgzLCBjb21tYW5kOiAoeDogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNpemUgPSB7IGxhYmVsOiAnUGVxdWVubycsIGNsYXNzOiAncC1kYXRhdGFibGUtc20nLCBzaXplOiAwLjgzIH1cclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbGFiZWw6ICdNw6lkaW8nLCBjbGFzczogJ3AtZGF0YXRhYmxlLW1kJywgc2l6ZTogMSwgY29tbWFuZDogKHg6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTaXplID0geyBsYWJlbDogJ03DqWRpbycsIGNsYXNzOiAncC1kYXRhdGFibGUtbWQnLCBzaXplOiAxIH1cclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbGFiZWw6ICdHcmFuZGUnLCBjbGFzczogJ3AtZGF0YXRhYmxlLWxnJywgc2l6ZTogMS4xNywgY29tbWFuZDogKHg6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTaXplID0geyBsYWJlbDogJ0xhcmdlJywgY2xhc3M6ICdwLWRhdGF0YWJsZS1sZycsIHNpemU6IDEuMTcgfVxyXG5cclxuICAgICAgfVxyXG4gICAgfSxcclxuICBdO1xyXG5cclxuXHJcbiAgLy9GSVhNRTogTW92ZXIgcGFyYSB1bSBsb2NhbCBhZGVxdWFkb1xyXG4gIHRpbWVyU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uOyAvLyBBc3NpbmF0dXJhIGRvIHRlbXBvcml6YWRvclxyXG4gIG9uU2F2ZVRpbWVyJDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7IC8vIFN1amVpdG8gcGFyYSBjb250cm9sYXIgbyB0ZW1wb3JpemFkb3JcclxuICBwcml2YXRlIG9uRGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG4gICAgdGhpcy5vblNhdmVUaW1lciQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95JClcclxuICAgICkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgLy8gUXVhbmRvIG8gdGVtcG9yaXphZG9yIHRlcm1pbmFyLCBlbWl0YSBvIGV2ZW50byBvblNhdmUgY29tIG9zIGRhZG9zIGEgc2VyZW0gc2Fsdm9zXHJcbiAgICAgIHRoaXMub25Sb3dFZGl0U2F2ZSgpO1xyXG4gICAgfSk7XHJcblxyXG5cclxuICAgIHRoaXMudGFtYW5ob1RlbGEgPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuXHJcbiAgICB0aGlzLml0ZW1zQ29udGV4dE1lbnUgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBsYWJlbDogJ0VkaXRhciBsaW5oYScsIGljb246ICdwaSBwaS1mdyBwaS1wZW5jaWwnLCBjb21tYW5kOiAoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jvd0VkaXQnICsgdGhpcy5zZWxlY3RlZFByb2R1Y3Qucm93RGF0YVt0aGlzLmNvbmZpZy5kYXRhS2V5XSk7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudCAmJiAhdGhpcy5jb25maWcuZGlzYWJsZUVkaXRSb3dGdW5jdGlvbj8uKHRoaXMuc2VsZWN0ZWRQcm9kdWN0LnJvd0RhdGEpKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuY2xpY2soKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnRvYXN0V2FybihcIkEgZWRpw6fDo28gZGVzc2EgbGluaGEgZXN0YSBkZXNhYmlsaXRhZGFcIilcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMub25Sb3dFZGl0SW5pdCh0aGlzLnNlbGVjdGVkUHJvZHVjdClcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbGFiZWw6ICdDYW5jZWxhciBlZGnDp8OjbycsIGljb246ICdwaSBwaS1mdyBwaS10aW1lcycsIGNvbW1hbmQ6IChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm93Q2FuY2VsJyArIHRoaXMuc2VsZWN0ZWRQcm9kdWN0LnJvd0RhdGFbdGhpcy5jb25maWcuZGF0YUtleV0pO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZWxlbWVudC5jbGljaygpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnRvYXN0V2FybihcIkEgZWRpw6fDo28gZGVzc2EgbGluaGEgZXN0YSBkZXNhYmlsaXRhZGFcIilcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBsYWJlbDogJ1NhbHZhciBlZGnDp8OjbycsIGljb246ICdwaSBwaS1mdyBwaS1zYXZlJywgY29tbWFuZDogKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyb3dTYXZlJyArIHRoaXMuc2VsZWN0ZWRQcm9kdWN0LnJvd0RhdGFbdGhpcy5jb25maWcuZGF0YUtleV0pO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZWxlbWVudC5jbGljaygpOyAvLyBEaXNwYXJhIHVtIGV2ZW50byBkZSBjbGlxdWUgbm8gZWxlbWVudG8gY29tIElEICd0ZXN0ZSdcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS50b2FzdFdhcm4oXCJBIGVkacOnw6NvIGRlc3NhIGxpbmhhIGVzdGEgZGVzYWJpbGl0YWRhXCIpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbGFiZWw6ICdFbnRyYXIgZW0gbW9kbyBkZSBlZGnDp8OjbycsIGljb246ICdwaSBwaS1mdyBwaS1wZW5jaWwnLCBjb21tYW5kOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzRWRpdGluZyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbGFiZWw6ICdTYWlyIGRvIG1vZG8gZGUgZWRpw6fDo28nLCBpY29uOiAncGkgcGktZncgcGktcGVuY2lsJywgY29tbWFuZDogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc0VkaXRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGlmICh0aGlzLml0ZW1zUGFyYVNhbHZhbWVudG8ubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgdGhpcy5vblJvd0VkaXRTYXZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuXHJcbiAgICAvLyBTdWJzY3JldmUtc2UgYW8gc3VqZWl0byBvblNhdmVUaW1lciRcclxuXHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBhZGp1c3RUYWJsZVNpemUoKXtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgLy8gQ29tcGxldGEgbyBzdWplaXRvIG9uRGVzdHJveSRcclxuICAgIHRoaXMub25EZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLm9uRGVzdHJveSQuY29tcGxldGUoKTtcclxuICAgIC8vIFNlIGhvdXZlciB1bSB0ZW1wb3JpemFkb3IgZW0gZXhlY3XDp8OjbywgcGFyZS1vXHJcbiAgICBpZiAodGhpcy50aW1lclN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIC8vIEFww7NzIHBhcmFyIG8gdGVtcG9yaXphZG9yLCBjaGFtZSBvblNhdmUgZGlyZXRhbWVudGUgcGFyYSBzYWx2YXIgb3MgZGFkb3NcclxuICAgICAgdGhpcy5vblJvd0VkaXRTYXZlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0RvQ2hlY2soKTogdm9pZCB7XHJcbiAgICB0aGlzLml0ZW1zQ29udGV4dE1lbnVbMF0udmlzaWJsZSA9IHRoaXMuZWRpdE1vZGUgPT0gJ3JvdycgJiYgIXRoaXMuc2VsZWN0ZWRQcm9kdWN0LmVkaXRpbmcgJiYgdGhpcy5pc0VkaXRhYmxlVGFibGUoKSAhPT0gZmFsc2U7XHJcbiAgICB0aGlzLml0ZW1zQ29udGV4dE1lbnVbMV0udmlzaWJsZSA9IHRoaXMuZWRpdE1vZGUgPT0gJ3JvdycgJiYgdGhpcy5zZWxlY3RlZFByb2R1Y3QuZWRpdGluZyAmJiB0aGlzLmlzRWRpdGFibGVUYWJsZSgpICE9PSBmYWxzZTtcclxuICAgIHRoaXMuaXRlbXNDb250ZXh0TWVudVsyXS52aXNpYmxlID0gdGhpcy5lZGl0TW9kZSA9PSAncm93JyAmJiB0aGlzLnNlbGVjdGVkUHJvZHVjdC5lZGl0aW5nICYmIHRoaXMuaXNFZGl0YWJsZVRhYmxlKCkgIT09IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaXRlbXNDb250ZXh0TWVudVszXS52aXNpYmxlID0gdGhpcy5lZGl0TW9kZSA9PSAnY2VsbCcgJiYgIXRoaXMuaXNFZGl0aW5nO1xyXG4gICAgdGhpcy5pdGVtc0NvbnRleHRNZW51WzRdLnZpc2libGUgPSB0aGlzLmVkaXRNb2RlID09ICdjZWxsJyAmJiB0aGlzLmlzRWRpdGluZztcclxuXHJcblxyXG4gIH1cclxuXHJcblxyXG4gIGRiQ2xpY2tFZGl0KCkge1xyXG5cclxuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm93RWRpdCcgKyB0aGlzLnNlbGVjdGVkSXRlbVt0aGlzLmNvbmZpZy5kYXRhS2V5XSk7XHJcbiAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICBlbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgIFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuZWRpdE1vZGUgPT0gJ3JvdycpXHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnRvYXN0V2FybihcIkEgZWRpw6fDo28gZGVzc2EgbGluaGEgZXN0YSBkZXNhYmlsaXRhZGFcIilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzUm93U2VsZWN0YWJsZShldmVudDogYW55KSB7XHJcbiAgICByZXR1cm4gIXRoaXMuaXNEaXNhYmxlZENoZWNrYm94KGV2ZW50LmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgLy9DYWxsZWQgYmVmb3JlIGFueSBvdGhlciBsaWZlY3ljbGUgaG9vay4gVXNlIGl0IHRvIGluamVjdCBkZXBlbmRlbmNpZXMsIGJ1dCBhdm9pZCBhbnkgc2VyaW91cyB3b3JrIGhlcmUuXHJcbiAgICAvL0FkZCAnJHtpbXBsZW1lbnRzIE9uQ2hhbmdlc30nIHRvIHRoZSBjbGFzcy5cclxuICAgIGlmIChjaGFuZ2VzWydzZXRDb25maWcnXSAmJiB0aGlzLmNvbmZpZykge1xyXG5cclxuICAgICAgdGhpcy5jb25maWcuY29sdW1ucy5mb3JFYWNoKChlOiBUYWJsZUVkaXRDb25maWdDb2x1bW4pID0+IHtcclxuICAgICAgICBpZiAoZS5maWVsZENvbnRyb2xUeXBlID09ICdkcm9wZG93bicpIHtcclxuICAgICAgICAgIHRoaXMubGlzdGFyRHJvcChlLmZpZWxkRHJvcERvd25Db250cm9sPy5maWVsZENvbnRyb2xEcm9wZG93blNlcnZpY2UsIGUpXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcbiAgY3JpYXJNZW51c01vZGFsKGRhdGE6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmFjdGlvbnMgJiYgZGF0YSkge1xyXG4gICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiB0aGlzLmNvbmZpZy5hY3Rpb25zKSB7XHJcbiAgICAgICAgY29uc3QgbWVudUluc2VydCA9IG1hcFRvTWVudUl0ZW0oYWN0aW9uLCBkYXRhKTtcclxuXHJcbiAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLm1lbnVJdGVtcy5maWx0ZXIoXHJcbiAgICAgICAgICB4ID0+IHguY29tbWFuZCA9PSBtZW51SW5zZXJ0LmNvbW1hbmRcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAoaXRlbS5sZW5ndGggPT0gMCkgdGhpcy5tZW51SXRlbXMucHVzaChtZW51SW5zZXJ0KTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmIChtZW51SW5zZXJ0LmxhYmVsICE9IGl0ZW1bMF0ubGFiZWwpIHtcclxuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5tZW51SXRlbXMuaW5kZXhPZihpdGVtWzBdKTtcclxuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAobWVudUluc2VydC52aXNpYmxlICE9IGl0ZW1bMF0udmlzaWJsZSkge1xyXG4gICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLm1lbnVJdGVtcy5pbmRleE9mKGl0ZW1bMF0pO1xyXG4gICAgICAgICAgICB0aGlzLm1lbnVJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChtZW51SW5zZXJ0LmRpc2FibGVkICE9IGl0ZW1bMF0uZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5tZW51SXRlbXMuaW5kZXhPZihpdGVtWzBdKTtcclxuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uUm93RWRpdEluaXQocm93RGF0YTogYW55KSB7XHJcbiAgICB0aGlzLmNsb25lZERhdGFTb3VyY2Vbcm93RGF0YS5pZCBhcyBzdHJpbmddID0geyAuLi5yb3dEYXRhIH07XHJcbiAgfVxyXG5cclxuICBvbkVkaXRJbml0KGV2ZW50MTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5pc0VkaXRpbmcpIHRoaXMuaXRlbUluaXRpYWxTdGF0ZSA9IHsgLi4uZXZlbnQxLmRhdGEgfVxyXG4gIH1cclxuXHJcbiAgb25FZGl0Q29tcGxldGUoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0aW5nKSB7XHJcbiAgICAgIGlmICh0aGlzLml0ZW1zUGFyYVNhbHZhbWVudG8ubGVuZ3RoID09PSAwIHx8IFxyXG4gICAgICAgIHRoaXMuaXRlbXNQYXJhU2FsdmFtZW50b1t0aGlzLml0ZW1zUGFyYVNhbHZhbWVudG8ubGVuZ3RoIC0gMV0uaW5kZXggPT09IGV2ZW50LmluZGV4KSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGV2ZW50LmRhdGEgJiYgdGhpcy5pdGVtSW5pdGlhbFN0YXRlICYmXHJcbiAgICAgICAgICBldmVudC5kYXRhLmhhc093blByb3BlcnR5KGV2ZW50LmZpZWxkKSAmJiBcclxuICAgICAgICAgIHRoaXMuaXRlbUluaXRpYWxTdGF0ZS5oYXNPd25Qcm9wZXJ0eShldmVudC5maWVsZCkgJiZcclxuICAgICAgICAgIGV2ZW50LmRhdGFbZXZlbnQuZmllbGRdICE9IHRoaXMuaXRlbUluaXRpYWxTdGF0ZVtldmVudC5maWVsZF0pIHtcclxuICAgICAgICAgIHRoaXMuYWRpY2lvbmFyQ2VsdWxhUGFyYVNhbHZhcihldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMub25Sb3dFZGl0U2F2ZSgpO1xyXG4gICAgICAgIHRoaXMuYWRpY2lvbmFyQ2VsdWxhUGFyYVNhbHZhcihldmVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkaWNpb25hckNlbHVsYVBhcmFTYWx2YXIoaXRlbTogYW55KSB7XHJcbiAgICAvLyBBZGljaW9uYSBvcyBkYWRvcyBlZGl0YWRvcyBhbyBhcnJheSBwYXJhIHNhbHZhbWVudG9cclxuICAgIHRoaXMuaXRlbXNQYXJhU2FsdmFtZW50by5wdXNoKGl0ZW0pO1xyXG5cclxuICAgIC8vIFNlIGhvdXZlciB1bSB0ZW1wb3JpemFkb3IgZW0gZXhlY3XDp8OjbywgbGltcGUtbyBlIHJlaW5pY2llXHJcbiAgICBpZiAodGhpcy50aW1lclN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSW5pY2lhIG8gdGVtcG9yaXphZG9yIHBhcmEgZW1pdGlyIG9uU2F2ZSBhcMOzcyA1IHNlZ3VuZG9zXHJcbiAgICB0aGlzLnRpbWVyU3Vic2NyaXB0aW9uID0gdGltZXIoNTAwMCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5vblNhdmVUaW1lciQubmV4dCgpOyAvLyBFbWl0YSBvblNhdmUgYXDDs3MgNSBzZWd1bmRvc1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgb25Sb3dFZGl0U2F2ZSgpIHtcclxuICAgIGlmICh0aGlzLml0ZW1zUGFyYVNhbHZhbWVudG8ubGVuZ3RoID09IDAgfHwgIXRoaXMuaXRlbXNQYXJhU2FsdmFtZW50b1swXS5kYXRhKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgY29uc3Qgb2JqZXRvUmVmbGV0aWRvOiBhbnkgPSB7IC4uLnRoaXMuaXRlbXNQYXJhU2FsdmFtZW50b1swXS5kYXRhIH07XHJcbiAgICAvLyBSZWZsZXRlIGFzIGFsdGVyYcOnw7VlcyBlbSB1bSBvYmpldG9cclxuICAgIHRoaXMuaXRlbXNQYXJhU2FsdmFtZW50by5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBpZiAoIWl0ZW0uZGF0YSkgcmV0dXJuOyAvLyBWZXJpZmljYSBzZSBvIGl0ZW0gdGVtIGEgcHJvcHJpZWRhZGUgJ2RhdGEnXHJcbiAgICAgIGNvbnN0IGNoYXZlID0gaXRlbS5maWVsZFxyXG4gICAgICBjb25zdCB2YWxvciA9IGl0ZW0uZGF0YVtjaGF2ZV07XHJcbiAgICAgIG9iamV0b1JlZmxldGlkb1tjaGF2ZV0gPSB2YWxvcjtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5vblNhdmUuZW1pdChvYmpldG9SZWZsZXRpZG8pXHJcbiAgICB0aGlzLml0ZW1zUGFyYVNhbHZhbWVudG8gPSBbXTtcclxuICB9XHJcblxyXG5cclxuICBvblJvd0VkaXRDYW5jZWwocHJvZHVjdDogYW55LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2VbaW5kZXhdID0gdGhpcy5jbG9uZWREYXRhU291cmNlW3Byb2R1Y3QuaWQgYXMgc3RyaW5nXTtcclxuICAgIGRlbGV0ZSB0aGlzLmNsb25lZERhdGFTb3VyY2VbcHJvZHVjdC5pZCBhcyBzdHJpbmddO1xyXG4gIH1cclxuXHJcbiAgbGlzdGFyRHJvcChzZXJ2aWNlOiBhbnksIGNvbDogYW55LCBpbmR0b2Rvcz86IGJvb2xlYW4pIHtcclxuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29uZmlnLmNvbHVtbnM/LmluZGV4T2YoY29sKTtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jb2x1bW5zW2NvbHVtbl0uZmllbGREcm9wRG93bkNvbnRyb2w/LmZpZWxkQ29udHJvbERyb3Bkb3duU291cmNlXHJcbiAgfVxyXG5cclxuICByZXRvcm5hRGVzY3JpY2FvRHJvcChyb3dEYXRhOiBhbnlbXSwgY29sOiBUYWJsZUVkaXRDb25maWdDb2x1bW4pIHtcclxuXHJcbiAgICBjb25zdCBkYXRhID0gY29sLmZpZWxkRHJvcERvd25Db250cm9sPy5maWVsZENvbnRyb2xEcm9wZG93blNvdXJjZVxyXG4gICAgY29uc3QgaWRvYmpldG8gPSBjb2wuZmllbGREcm9wRG93bkNvbnRyb2w/Lmlkb2JqZXRvXHJcbiAgICBjb25zdCBkZXNjcmljYW9vYmpldG8gPSBjb2wuZmllbGREcm9wRG93bkNvbnRyb2w/LmRlc2NyaWNhb29iamV0b1xyXG4gICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgY29uc3QgdmFsb3JBdHVhbCA9IHJvd0RhdGFbY29sLmZpZWxkXVxyXG5cclxuICAgIGlmIChkYXRhICYmIGlkb2JqZXRvICYmIGRlc2NyaWNhb29iamV0bylcclxuICAgICAgcmV0dXJuIGRhdGE/LmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbVtpZG9iamV0b10gPT0gdmFsb3JBdHVhbClbZGVzY3JpY2Fvb2JqZXRvXVxyXG4gICAgZWxzZSByZXR1cm4gJ0NhcnJlZ2FuZG8nXHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGlzRGlzYWJsZUVkaXRSb3dGdW5jdGlvbihyb3dEYXRhOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5kaXNhYmxlRWRpdFJvd0Z1bmN0aW9uID8gdGhpcy5jb25maWcuZGlzYWJsZUVkaXRSb3dGdW5jdGlvbihyb3dEYXRhKSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaXNEaXNhYmxlRWRpdFJvd0NlbGxGdW5jdGlvbihyb3dEYXRhOiBhbnksIGNvbDogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gY29sLmRpc2FibGVFZGl0Um93Q2VsbEZ1bmN0aW9uID8gY29sLmRpc2FibGVFZGl0Um93Q2VsbEZ1bmN0aW9uKHJvd0RhdGEpIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBpc0VkaXRhYmxlVGFibGUoKTogYm9vbGVhbiB8IG51bGwge1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5jb2x1bW5zKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY29sdW1ucy5zb21lKChjb2x1bW46IGFueSkgPT4gJ2ZpZWxkQ29udHJvbFR5cGUnIGluIGNvbHVtbik7XHJcbiAgfVxyXG5cclxuXHJcbiAgdHJhbnNmb3JtVmFsdWVEcm9wKHZhbHVlOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pIHtcclxuICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgIGlmICghY29sLnBpcGUpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN3aXRjaCAoY29sLnBpcGUpIHtcclxuICAgICAgICBjYXNlICdkYXRlJzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh2YWx1ZSwgJ2RkL01NL3l5eXknKTtcclxuICAgICAgICBjYXNlICdkYXRldGltZSc6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsICdkZC9NTS95eXl5IGhoOm1tJyk7XHJcbiAgICAgICAgY2FzZSAnZGVjaW1hbCc6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5kZWNpbWFsUGlwZS50cmFuc2Zvcm0odmFsdWUsICcxLjItMicsICdwdC1CUicpO1xyXG4gICAgICAgIGNhc2UgJ2NwZmNucGonOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuY3BmQ25walBpcGUudHJhbnNmb3JtKHZhbHVlKTtcclxuICAgICAgICBjYXNlICd0ZWxlZm9uZSc6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy50ZWxlZm9uZVBpcGUudHJhbnNmb3JtKHZhbHVlKTtcclxuICAgICAgICBjYXNlICdjYXBpdGFsaXplJzpcclxuICAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybUNhcGl0YWxpemUodmFsdWUpO1xyXG4gICAgICAgIGNhc2UgJ21vbmV5JzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdGFyVmFsb3IodmFsdWUpO1xyXG4gICAgICAgIGNhc2UgJ3BlcmNlbnRhZ2UnOlxyXG4gICAgICAgICAgcmV0dXJuIGAkeyB2YWx1ZSB9ICVgO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcblxyXG4iLCI8ZGl2IGNsYXNzPVwiY2FyZFwiIGlkPVwidGFtYW5ob3RhYmVsYVwiIFtzdHlsZS5mb250LXNpemVdPVwiJzFweCdcIj5cclxuICA8cC10b2FzdD48L3AtdG9hc3Q+XHJcblxyXG4gIEBpZihmaWx0cm9zQXZhbmNhZG9zKXtcclxuICAgIDxwLXBhbmVsXHJcbiAgICAgIGhlYWRlcj1cIkZpbHRyb3MgYXZhbsOnYWRvc1wiXHJcbiAgICAgIFt0b2dnbGVhYmxlXT1cInRydWVcIlxyXG4gICAgICBbY29sbGFwc2VkXT1cInRydWVcIlxyXG4gICAgICAoY29sbGFwc2VkQ2hhbmdlKT1cImNvbGxhcHNlZCA9ICFjb2xsYXBzZWRcIlxyXG4gICAgICBbc3R5bGVdPVwieyAnbWFyZ2luLWJvdHRvbSc6ICcycHgnIH1cIlxyXG4gICAgPlxyXG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyaWNvbnNcIj5cclxuICAgICAgICBAaWYgKCFjb2xsYXBzZWQpIHtcclxuICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktZmlsdGVyXCI+PC9pPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgPCEtLSDDjWNvbmUgcXVhbmRvIG8gcGFpbmVsIGVzdMOhIGFiZXJ0byAtLT5cclxuICAgICAgICAgIEBpZiAoY29sbGFwc2VkKSB7XHJcbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLW1pbnVzXCI+PC9pPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgPCEtLSDDjWNvbmUgcXVhbmRvIG8gcGFpbmVsIGVzdMOhIGZlY2hhZG8gLS0+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICAgIDwvcC1wYW5lbD5cclxuICB9XHJcblxyXG4gIDxwLWNvbnRleHRNZW51ICNjbSBbbW9kZWxdPVwiaXRlbXNDb250ZXh0TWVudVwiPjwvcC1jb250ZXh0TWVudT5cclxuICA8cC10YWJsZVxyXG4gICAgI3RlXHJcbiAgICBbZWRpdE1vZGVdPVwiZWRpdE1vZGVcIlxyXG4gICAgKG9uRWRpdENvbXBsZXRlKT1cIm9uRWRpdENvbXBsZXRlKCRldmVudClcIlxyXG4gICAgKG9uRWRpdEluaXQpPVwib25FZGl0SW5pdCgkZXZlbnQpXCJcclxuICAgIFtyZW9yZGVyYWJsZUNvbHVtbnNdPVwiY29uZmlnLnJlb3JkZXJhYmxlQ29sdW1ucyB8fCBmYWxzZVwiXHJcbiAgICAqbmdJZj1cImNvbmZpZ1wiXHJcbiAgICBbdmFsdWVdPVwiZGF0YVNvdXJjZVwiXHJcbiAgICBbZGF0YUtleV09XCJjb25maWcuZGF0YUtleVwiXHJcbiAgICBbY29sdW1uc109XCJjb25maWcuY29sdW1uc1wiXHJcbiAgICBbc2Nyb2xsYWJsZV09XCJ0cnVlXCJcclxuICAgIGFwcGVuZFRvPVwiYm9keVwiXHJcbiAgICBbc3R5bGVDbGFzc109XCJzZWxlY3RlZFNpemUuY2xhc3NcIlxyXG4gICAgWyhzZWxlY3Rpb24pXT1cInNlbGVjdGVkSXRlbXNcIlxyXG4gICAgW3Jvd1NlbGVjdGFibGVdPVwiaXNSb3dTZWxlY3RhYmxlXCJcclxuICAgIFtnbG9iYWxGaWx0ZXJGaWVsZHNdPVwiZ2xvYmFsRmlsdGVyRmllbGRzXCJcclxuICAgIFtyb3dzXT1cInJvd3NcIlxyXG4gICAgW3BhZ2luYXRvcl09XCJwYWdpbmF0b3JcIlxyXG4gICAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJyb3dzUGVyUGFnZU9wdGlvbnNcIlxyXG4gICAgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJ0cnVlXCJcclxuICAgIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7Zmlyc3R9IC0ge2xhc3R9IGRlIHt0b3RhbFJlY29yZHN9XCJcclxuICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwic2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgW3Jvd0hvdmVyXT1cInRydWVcIlxyXG4gICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxyXG4gICAgW2xhenldPVwiY29uZmlnLmxhenlcIlxyXG4gICAgKG9uTGF6eUxvYWQpPVwicGFnaW5hdGUoJGV2ZW50KVwiXHJcbiAgICBbZ3JvdXBSb3dzQnldPVwiY29uZmlnLmZpZWxkR3JvdXBcIlxyXG4gICAgcGFnaW5hdG9yRHJvcGRvd25BcHBlbmRUbz1cImJvZHlcIlxyXG4gICAgW3Nob3dGaXJzdExhc3RJY29uXT1cInNob3dGaXJzdExhc3RJY29uXCJcclxuICAgIFtwYWdlTGlua3NdPVwicGFnZUxpbmtzT3B0aW9uc1wiXHJcbiAgICBbc2Nyb2xsYWJsZV09XCJpc1RhYmxlU2Nyb2xsYWJsZVwiXHJcbiAgICBbc2Nyb2xsSGVpZ2h0XT1cInNjcm9sbEhlaWdodFwiXHJcbiAgICBbcm93VHJhY2tCeV09XCJyb3dUcmFja0J5XCJcclxuICAgIFsoY29udGV4dE1lbnVTZWxlY3Rpb24pXT1cInNlbGVjdGVkUHJvZHVjdFwiXHJcbiAgICBbY29udGV4dE1lbnVdPVwiaXNFZGl0YWJsZVRhYmxlKCkgPyBjbSA6IG51bGxcIlxyXG4gID5cclxuICAgIDwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XHJcblxyXG4gICAgQGlmIChjb25maWcuZW5hYmxlQ2F0aW9uIHx8IGVuYWJsZVNpemVzKXtcclxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNhcHRpb25cIj5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgZmxleC13cmFwIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBncmlkIGZvcm1ncmlkIHAtZmx1aWQgY29sLTEyIHB0LTEgcGItMSBtLTBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICBAaWYgKGNvbmZpZy50aXRsZSkge1xyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBmb250LWJvbGQgbXktM1wiPlxyXG4gICAgICAgICAgICAgIHt7IGNvbmZpZy50aXRsZSB9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfSBAaWYgKGNvbmZpZy5zdWJ0aXRsZSkge1xyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zbSBtYi00IGZvbnQtbWVkaXVtXCI+XHJcbiAgICAgICAgICAgICAge3sgY29uZmlnLnN1YnRpdGxlIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgbWQ6Y29sLTYgbGc6Y29sLTQge3tcclxuICAgICAgICAgICAgICB0YW1hbmhvVGVsYSA8IDc2OCA/ICdjb2wtMTAnIDogJ2NvbC0xMidcclxuICAgICAgICAgICAgfX0gbXQtMSBtYi0yIGdhcC0xXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgIFxyXG4gICAgICAgICAgICBAaWYgKGNvbmZpZy5lbmFibGVGaWx0ZXIpIHtcclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtaW5wdXQtaWNvbi1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXNlYXJjaFwiPjwvaT5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgIHBJbnB1dFRleHRcclxuICAgICAgICAgICAgICAgICAgcEF1dG9Gb2N1c1xyXG4gICAgICAgICAgICAgICAgICBbYXV0b2ZvY3VzXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbkdsb2JhbEZpbHRlcih0ZSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGVzcXVpc2FyLi4uXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoLTJyZW1cIlxyXG4gICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBAaWYoZW5hYmxlU2l6ZXMpe1xyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpemVzLWNvbnRyb2xzXCI+XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIDxrdi1idXR0b24gKGNsaWNrKT1cIm1lbnUudG9nZ2xlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzZXZlcml0eV09XCIndGVydGlhcnknXCJcclxuICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCInbWF0Y2hfY2FzZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInVGFtYW5obyBkYSBmb250ZSdcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDwva3YtYnV0dG9uPlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgIDxwLXRpZXJlZE1lbnVcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwieyAnZm9udC1zaXplJzogJzAuN3JlbScgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cIm1lbnVTaXplc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAjbWVudVxyXG4gICAgICAgICAgICAgICAgICAgIFttb2RlbF09XCJzaXplc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BvcHVwXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1pdGVtIHBUZW1wbGF0ZT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBmbGV4IGdhcC0yIGFsaWduLWl0ZW1zLWNlbnRlciBwbC0xIG0tMiBtZW51LXNpemVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIml0ZW0uY29tbWFuZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmKHRoaXMuc2VsZWN0ZWRTaXplLnNpemUgIT0gaXRlbS5zaXplKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0YWdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIicjRUFFQUVBJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYodGhpcy5zZWxlY3RlZFNpemUuc2l6ZSA9PSBpdGVtLnNpemUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiJyMxREE3NTAnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8L3AtdGllcmVkTWVudT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIEBpZihpc0VkaXRpbmcpe1xyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtYXZpc29cIj5cclxuICAgICAgICAgICAgICBUYWJlbGEgZW0gbW9kbyBkZSBlZGnDp8Ojb1xyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgIFxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgY29sLTIganVzdGlmeS1jb250ZW50LWVuZCBnYXAtMlwiPlxyXG4gICAgICAgICAgICBAZm9yIChhY3Rpb24gb2YgY29uZmlnLmFjdGlvbnNMb3RlOyB0cmFjayBpOyBsZXQgaSA9ICRpbmRleCkge1xyXG4gICAgICAgICAgICAgIEBpZighaXNFZGl0aW5nKXtcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIEBpZiAoKHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCB8fCBhY3Rpb24uc2hvd0Fjb2VzTG90ZSkgJiZcclxuICAgICAgICAgICAgICAgICAgKGdldE9yRXhlY3V0ZShhY3Rpb24udmlzaWJsZSwgc2VsZWN0ZWRJdGVtcykgPz8gdHJ1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgPGt2LWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImFjdGlvbj8uY29tbWFuZCgpOyBhY3RpdmVJdGVtTG90ZShzZWxlY3RlZEl0ZW1zKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cImdldE9yRXhlY3V0ZShhY3Rpb24udG9vbHRpcCwgc2VsZWN0ZWRJdGVtcylcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoZ2V0T3JFeGVjdXRlKGFjdGlvbi50b29sdGlwLCBzZWxlY3RlZEl0ZW1zKT8ubGVuZ3RoID8/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDAgPiA3KSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmFjdGlvbnNMb3RlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICBpID09IGNvbmZpZy5hY3Rpb25zTG90ZS5sZW5ndGggLSAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ2JvdHRvbSdcclxuICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJnZXRPckV4ZWN1dGUoYWN0aW9uLmRpc2FibGVkLCBzZWxlY3RlZEl0ZW1zKSB8fCBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiZ2V0T3JFeGVjdXRlKGFjdGlvbi5pY29uLCBzZWxlY3RlZEl0ZW1zKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3NldmVyaXR5XT1cImFjdGlvbi5zZXZlcml0eSB8fCAndGVydGlhcnknXCJcclxuICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBAaWYgKGlzRWRpdGFibGVUYWJsZSgpKSB7XHJcbiAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxrdi1idXR0b25cclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRoaXMuaXNFZGl0aW5nID0gIXRoaXMuaXNFZGl0aW5nXCJcclxuICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIiFpc0VkaXRpbmcgPyAnSGFiaWxpdGFyIEVkacOnw6NvJyA6ICdEZXNhYmlsaXRhciBFZGnDp8OjbydcIlxyXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidsZWZ0J1wiXHJcbiAgICAgICAgICAgICAgICAgIFtzZXZlcml0eV09XCIndGVydGlhcnknXCJcclxuICAgICAgICAgICAgICAgICAgW2ljb25dPVwiJ2VkaXRfc3F1YXJlJ1wiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8L2t2LWJ1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tPlxyXG4gICAgICAgICAgXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICB9XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgbGV0LWNvbHVtbnM+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICBAaWYoY29uZmlnLmVuYWJsZVNlbGVjdCAmJiAhaXNFZGl0aW5nKXtcclxuICAgICAgICAgIDx0aFxyXG4gICAgICAgICAgW2NsYXNzXT1cInNlbGVjdGVkU2l6ZS5jbGFzcyArICd0aCdcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8cC10YWJsZUhlYWRlckNoZWNrYm94XHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZUl0ZW1Mb3RlKHNlbGVjdGVkSXRlbXMpXCJcclxuICAgICAgICAgICAgPjwvcC10YWJsZUhlYWRlckNoZWNrYm94PlxyXG4gICAgICAgICAgPC90aD5cclxuICAgICAgICB9XHJcbiAgICAgICAgQGZvcihjb2wgb2YgY29sdW1uczsgdHJhY2sgJGluZGV4KXtcclxuICAgICAgICAgIDx0aFxyXG4gICAgICAgICAgICBbcFNvcnRhYmxlQ29sdW1uXT1cImNvbC5maWVsZFwiXHJcbiAgICAgICAgICAgIFtwU29ydGFibGVDb2x1bW5EaXNhYmxlZF09XCJjb2wuc29ydGFibGUgPT09IGZhbHNlXCJcclxuICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aF09XCJjb2wud2lkdGggKiBzZWxlY3RlZFNpemUuc2l6ZSArICdweCdcIlxyXG4gICAgICAgICAgICBwUmVvcmRlcmFibGVDb2x1bW5cclxuICAgICAgICAgICAgW2NsYXNzXT1cInNlbGVjdGVkU2l6ZS5jbGFzcyArICd0aCdcIlxyXG4gICAgICAgIFxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBbY2xhc3NdPVwiXHJcbiAgICAgICAgICAgICAgY2VudHJhbGl6YXJDb2x1bmFzKGNvbCkgJiYgYWxpZ25Db2x1bmFzSGVhZGVyKGNvbCkgPT0gJydcclxuICAgICAgICAgICAgICAgID8gJ2ZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWNlbnRlcidcclxuICAgICAgICAgICAgICAgIDogJ2ZsZXggZmxleC1yb3cnXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIFtzdHlsZV09XCJhbGlnbkNvbHVuYXNIZWFkZXIoY29sKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IGNvbC5oZWFkZXIgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIEBpZihjb2wuc29ydGFibGUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICA8cC1zb3J0SWNvblxyXG4gICAgICAgICAgICAgIFtmaWVsZF09XCJjb2wuZmllbGRcIlxyXG4gICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAxMHB4XCJcclxuICAgICAgICAgICAgICA+PC9wLXNvcnRJY29uPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIEBpZihjb2wuaGVhZGVyVG9vbHRpcCl7XHJcbiAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiY29sLmhlYWRlclRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIGluZm9cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICBcclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgICAgfVxyXG4gICAgICBcclxuICAgICAgIEBpZighaXNFZGl0aW5nICYmIGNvbmZpZy5hY3Rpb25zICYmIGNvbmZpZy5hY3Rpb25zLmxlbmd0aCA+IDApe1xyXG4gICAgICAgIDx0aD48L3RoPlxyXG4gICAgICAgfVxyXG5cclxuICAgICAgIEBpZihpc0VkaXRhYmxlVGFibGUoKSAmJiB0aGlzLmVkaXRNb2RlID09ICdyb3cnKXtcclxuICAgICAgICA8dGhcclxuICAgICAgICAgIGlkPVwidGgtZWRpdFwiXHJcbiAgICAgICAgICBzdHlsZT1cIndpZHRoOiAyMHB4XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICBFZGl0YXJcclxuICAgICAgICA8L3RoPlxyXG4gICAgICAgfVxyXG4gICAgICAgXHJcbiAgICAgIDwvdHI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcbiAgICBcclxuICAgIDwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgIHBUZW1wbGF0ZT1cImJvZHlcIlxyXG4gICAgICBsZXQtcm93RGF0YVxyXG4gICAgICBsZXQtZWRpdGluZz1cImVkaXRpbmdcIlxyXG4gICAgICBsZXQtcmk9XCJyb3dJbmRleFwiXHJcbiAgICAgIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiXHJcbiAgICAgIGxldC1yb3dncm91cD1cInJvd2dyb3VwXCJcclxuICAgICAgbGV0LXJvd3NwYW49XCJyb3dzcGFuXCJcclxuICAgID5cclxuICAgICAgPHRyXHJcbiAgICAgICAgW3BFZGl0YWJsZVJvd109XCJyb3dEYXRhXCJcclxuICAgICAgICBbcEVkaXRhYmxlUm93RGlzYWJsZWRdPVwiZmFsc2VcIlxyXG4gICAgICAgIFtwQ29udGV4dE1lbnVSb3ddPVwie3Jvd0RhdGEsIGVkaXRpbmd9XCJcclxuICAgICAgICBbY2xhc3NdPVwic2VsZWN0ZWRTaXplLmNsYXNzICsgJy10cidcIlxyXG4gICAgICAgIChkYmxjbGljayk9XCJkb3VibGVDbGljaygkZXZlbnQsIHJvd0RhdGEpXCJcclxuICAgICAgPlxyXG4gICAgICBAaWYoY29uZmlnLmVuYWJsZVNlbGVjdCAmJiAhaXNFZGl0aW5nKXtcclxuICAgICAgICA8dGRcclxuICAgICAgICBbc3R5bGVdPVwiYXBwbHlTdHlsZShyb3dEYXRhLCB7IGZpZWxkOiAnY2hlY2stYm94JywgaGVhZGVyOiAnJyB9KVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIFxyXG4gICAgICAgICAgPHAtdGFibGVDaGVja2JveFxyXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrLWVkaXQtbGlzdFwiXHJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJyb3dEYXRhXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRDaGVja2JveChyb3dEYXRhKVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmVJdGVtTG90ZShzZWxlY3RlZEl0ZW1zKVwiXHJcbiAgICAgICAgICA+PC9wLXRhYmxlQ2hlY2tib3g+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgfVxyXG4gICAgICAgIEBmb3IgKGNvbCBvZiBjb2x1bW5zOyB0cmFjayBpOyBsZXQgaSA9ICRpbmRleCl7XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8IS0tIEZJWE1FOiBUZXN0YXIgYSBpbXBsZW1lbnRhw6fDo28gYWJhaXhvIGUgbWVzYWNsYXIgYXMgZHVhcyBmb3JtYXMgLS0+XHJcbiAgXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVJbnB1dCBsZXQtcm93RGF0YT1cInJvd0RhdGFcIiBsZXQtY29sPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRWRpdGluZzsgZWxzZSB0ZW1wbGF0ZXZpc3VhbGVkaWNhb1wiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29sLmZpZWxkQ29udHJvbFR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RleHQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbc3R5bGUud2lkdGhdPVwiY29sLndpZHRoXCIgY2xhc3M9XCJncmlkIGZvcm1ncmlkIHAtZmx1aWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxrdi1pbnB1dC10ZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVFZGl0Um93Q2VsbEZ1bmN0aW9uKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNlbGxDb250cm9sIGNvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93RGF0YVtjb2wuZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImNvbC5yZXF1aXJlZCA/PyB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgID48L2t2LWlucHV0LXRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gIFxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW3N0eWxlLndpZHRoXT1cImNvbC53aWR0aFwiIGNsYXNzPVwiZ3JpZCBmb3JtZ3JpZCBwLWZsdWlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8a3YtaW5wdXQtbnVtYmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVFZGl0Um93Q2VsbEZ1bmN0aW9uKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNlbGxDb250cm9sIGNvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93RGF0YVtjb2wuZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImNvbC5yZXF1aXJlZCA/PyB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgID48L2t2LWlucHV0LW51bWJlcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgXHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidtYXNrJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW3N0eWxlLndpZHRoXT1cImNvbC53aWR0aFwiIGNsYXNzPVwiZ3JpZCBmb3JtZ3JpZCBwLWZsdWlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8a3YtaW5wdXQtbWFza1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlRWRpdFJvd0NlbGxGdW5jdGlvbihyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjZWxsQ29udHJvbCBjb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWFza109XCJjb2wubWFza1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJjb2wucmVxdWlyZWQgPz8gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93RGF0YVtjb2wuZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgID48L2t2LWlucHV0LW1hc2s+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gIFxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc3dpdGNoJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW3N0eWxlLndpZHRoXT1cImNvbC53aWR0aFwiIGNsYXNzPVwiZ3JpZCBmb3JtZ3JpZCBwLWZsdWlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8a3Ytc3dpdGNoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVFZGl0Um93Q2VsbEZ1bmN0aW9uKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNlbGxDb250cm9sIGNvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93RGF0YVtjb2wuZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgID48L2t2LXN3aXRjaD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgXHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjYWxlbmRhcidcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtzdHlsZS53aWR0aF09XCJjb2wud2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbC53aWR0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JpZCBmb3JtZ3JpZCBwLWZsdWlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGt2LWlucHV0LWNhbGVuZGFyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjZWxsQ29udHJvbCBjb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93RGF0YVtjb2wuZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjwva3YtaW5wdXQtY2FsZW5kYXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkcm9wZG93bidcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtzdHlsZS53aWR0aF09XCJjb2wud2lkdGhcIiBjbGFzcz1cImdyaWQgZm9ybWdyaWQgcC1mbHVpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHAtZHJvcGRvd25cclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZUVkaXRSb3dDZWxsRnVuY3Rpb24ocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2VsbENvbnRyb2wgY29sXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BhbmVsU3R5bGVdPVwieyAnZm9udC1zaXplJzogJzAuNzVyZW0nIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uTGFiZWxdPVwiY29sLmZpZWxkRHJvcERvd25Db250cm9sLmRlc2NyaWNhb29iamV0b1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25WYWx1ZV09XCJjb2wuZmllbGREcm9wRG93bkNvbnRyb2wuaWRvYmpldG9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wuZmllbGREcm9wRG93bkNvbnRyb2wuZmllbGRDb250cm9sRHJvcGRvd25Tb3VyY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dEYXRhW2NvbC5maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9wLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gIFxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGV2aXN1YWxlZGljYW8+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVPdXRwdXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyByb3dEYXRhOiByb3dEYXRhLCBjb2w6IGNvbCB9XHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICBcclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZU91dHB1dCBsZXQtcm93RGF0YT1cInJvd0RhdGFcIiBsZXQtY29sPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29sLmZpZWxkQ29udHJvbFR5cGVcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkcm9wZG93bidcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvd0RhdGFbY29sLmZpZWxkXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHRyYW5zZm9ybVZhbHVlRHJvcChyZXRvcm5hRGVzY3JpY2FvRHJvcChyb3dEYXRhLCBjb2wpLCBjb2wpIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgXHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc3dpdGNoJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8a3Ytc3dpdGNoXHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dEYXRhW2NvbC5maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgPjwva3Ytc3dpdGNoPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgXHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2FsZW5kYXInXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sLmZpZWxkXSB8IGRhdGUgfX1cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gIFxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ21hc2snXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sLmZpZWxkXSB8IG1hc2sgOiBjb2wubWFzayB9fVxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgXHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICAgIHt7ICB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpIH19XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICBcclxuICAgICAgICAgICAgQGlmKGVkaXRNb2RlID09ICdjZWxsJyAmJiBjb2wuZmllbGRDb250cm9sVHlwZSl7XHJcbiAgICAgICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICAgW3BFZGl0YWJsZUNvbHVtbl09XCJyb3dEYXRhXCJcclxuICAgICAgICAgICAgICBbcEVkaXRhYmxlQ29sdW1uRmllbGRdPVwiY29sLmZpZWxkXCJcclxuICAgICAgICAgICAgICBbcEVkaXRhYmxlQ29sdW1uUm93SW5kZXhdPVwicm93RGF0YVtjb25maWcuZGF0YUtleV1cIlxyXG4gICAgICAgICAgICAgIFtpZF09XCIncm93VGFibGUnICsgcm93RGF0YVtjb25maWcuZGF0YUtleV1cIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmVJdGVtKHJvd0RhdGEpXCJcclxuICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiZGJDbGlja0VkaXQoKVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJyb3dUYWJsZVwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlXT1cIlxyXG4gICAgICAgICAgICAgICAgYXBwbHlTdHlsZShyb3dEYXRhLCBjb2wpICtcclxuICAgICAgICAgICAgICAgIGNlbnRyYWxpemFyQ29sdW5hcyhjb2wpICtcclxuICAgICAgICAgICAgICAgIGFsaWduQ29sdW5hcyhjb2wpXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcFJvdyhyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUlucHV0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7IHJvd0RhdGE6IHJvd0RhdGEsIGNvbDogY29sIH1cclxuICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gIFxyXG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVPdXRwdXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgcm93RGF0YTogcm93RGF0YSwgY29sOiBjb2wgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICBcclxuICAgICAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgICAgICA8IS0tIE5PVEU6IEVkacOnw6NvIGRlIGxpbmhhIC0tPlxyXG4gICAgICAgICAgICA8IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxyXG4gICAgICAgICAgICA8IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxyXG4gICAgICAgICAgICA8IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxyXG4gIFxyXG4gICAgICAgICAgICA8IS0tIENlbHVsYSBxdWUgYXJtYXplbmEgb3MgY29udHJvbGVzIGRlIGVkacOnw6NvIHBhcmEgb3MgY2FtcG9zIC0tPlxyXG4gICAgICAgICAgICBAaWYoZmFsc2UgJiYgY29sLmZpZWxkQ29udHJvbFR5cGUgJiYgZWRpdE1vZGUgPT0gJ3Jvdycpe1xyXG4gICAgICAgICAgICAgIDx0ZFxyXG4gICAgICAgICAgICAgIFtpZF09XCIncm93VGFibGUnICsgcm93RGF0YVtjb25maWcuZGF0YUtleV1cIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmVJdGVtKHJvd0RhdGEpXCJcclxuICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiZGJDbGlja0VkaXQoKVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJyb3dUYWJsZVwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlXT1cIlxyXG4gICAgICAgICAgICAgICAgYXBwbHlTdHlsZShyb3dEYXRhLCBjb2wpICtcclxuICAgICAgICAgICAgICAgIGNlbnRyYWxpemFyQ29sdW5hcyhjb2wpICtcclxuICAgICAgICAgICAgICAgIGFsaWduQ29sdW5hcyhjb2wpXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcFJvdyhyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxwLWNlbGxFZGl0b3JcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgc3dpdGNoOiBjb2wuZmllbGRDb250cm9sVHlwZSA9PSAnc3dpdGNoJyB9XCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUlucHV0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyByb3dEYXRhOiByb3dEYXRhLCBjb2w6IGNvbCB9XHJcbiAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICBcclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZU91dHB1dDtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgcm93RGF0YTogcm93RGF0YSwgY29sOiBjb2wgfVxyXG4gICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIH1cclxuICBcclxuICAgICAgICAgICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cclxuICAgICAgICAgICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cclxuICAgICAgICAgICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cclxuICBcclxuICAgICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJyb3dncm91cCAmJiAhY29sLnRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICBbYXR0ci5yb3dzcGFuXT1cInJvd2dyb3VwICYmIGNvbC5ncm91cGVkID8gcm93c3BhbiA6IG51bGxcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwicm93VGFibGVcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZV09XCJcclxuICAgICAgICAgICAgICAgIGFwcGx5U3R5bGUocm93RGF0YSwgY29sKSArXHJcbiAgICAgICAgICAgICAgICBjZW50cmFsaXphckNvbHVuYXMoY29sKSArXHJcbiAgICAgICAgICAgICAgICBhbGlnbkNvbHVuYXMoY29sKVxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBSb3cocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtY29sdW1uLXRpdGxlXCI+e3sgY29sLmhlYWRlciB9fTo8L3NwYW4+XHJcbiAgXHJcbiAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzQm9vbGVhbkZpZWxkKHJvd0RhdGEsIGNvbCk7IGVsc2UgYm9vbGVhbkZpZWxkXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJyZXR1cm5Sb3dDbGFzcyhyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICFpc0NoaXBGaWVsZChjb2wpICYmICFjb2wuaWNvbkZpZWxkICYmICFpc0ltYWdlRmllbGQoY29sKVxyXG4gICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImNvbC5pY29uXCIgW2NsYXNzXT1cImNvbC5pY29uICsgJyBtci0yJ1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAge3sgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gIFxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzQ2hpcEZpZWxkKGNvbCkgJiYgIWNvbC5pY29uRmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicmV0dXJuQ2xhc3NDaGlwKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgICA+e3sgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgXHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc0ltYWdlRmllbGQoY29sKVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWFnZVwiIFtzcmNdPVwibG9hZEltYWdlKHJvd0RhdGEsIGNvbClcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICBcclxuICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaWNvbkZpZWxkXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgJ21hdGVyaWFsLWljb25zJzogY29sLmluZEljb25NYXRlcmlhbCxcclxuICAgICAgICAgICAgICAgICAgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgbXItMic6ICFjb2wuaW5kSWNvbk1hdGVyaWFsXHJcbiAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyByZXR1cm5DbGFzc0ljb24ocm93RGF0YSwgY29sKSB9fVxyXG4gICAgICAgICAgICAgIDwvaT5cclxuICBcclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Jvb2xlYW5GaWVsZD5cclxuICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbC5pY29uRmllbGQgJiYgIWlzU3dpdGNoRmllbGQoY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHJvd0RhdGFbY29sLmZpZWxkXSA/ICd0ZXh0LWdyZWVuLTUwMCcgOiAndGV4dC1yZWQtNTAwJ1xyXG4gICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICA+PHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgcm93RGF0YVtjb2wuZmllbGRdID8gXCJjaGVja1wiIDogXCJjbG9zZVwiIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvaT5cclxuICBcclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNTd2l0Y2hGaWVsZChjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJldHVyblJvd0NsYXNzKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8a3Ytc3dpdGNoXHJcbiAgICAgICAgICAgICAgICAgICAgKG9uU3dpdGNoQ2hhbmdlKT1cIm9uU3dpdGNoQ2hhbmdlKCRldmVudCwgcm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbD8ub25seVJlYWRGaWVsZCA/PyB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbc3dpdGNoVmFsdWVdPVwidHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPC9rdi1zd2l0Y2g+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC90ZD5cclxuICBcclxuICAgICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICFyb3dncm91cCAmJlxyXG4gICAgICAgICAgICAgICAgIWNvbC5ncm91cGVkICYmXHJcbiAgICAgICAgICAgICAgICAhY29sLnRlbXBsYXRlICYmXHJcbiAgICAgICAgICAgICAgICAhY29sLmZpZWxkQ29udHJvbFR5cGVcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZV09XCJcclxuICAgICAgICAgICAgICAgIGFwcGx5U3R5bGUocm93RGF0YSwgY29sKSArXHJcbiAgICAgICAgICAgICAgICBjZW50cmFsaXphckNvbHVuYXMoY29sKSArXHJcbiAgICAgICAgICAgICAgICBhbGlnbkNvbHVuYXMoY29sKVxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJyb3dUYWJsZVwiXHJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBSb3cocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtY29sdW1uLXRpdGxlXCI+e3sgY29sLmhlYWRlciB9fTo8L3NwYW4+XHJcbiAgXHJcbiAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzQm9vbGVhbkZpZWxkKHJvd0RhdGEsIGNvbCk7IGVsc2UgYm9vbGVhbkZpZWxkXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJyZXR1cm5Sb3dDbGFzcyhyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICFpc0NoaXBGaWVsZChjb2wpICYmICFjb2wuaWNvbkZpZWxkICYmICFpc0ltYWdlRmllbGQoY29sKVxyXG4gICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImNvbC5pY29uXCIgW2NsYXNzXT1cImNvbC5pY29uICsgJyBtci0yJ1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAge3sgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gIFxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzQ2hpcEZpZWxkKGNvbCkgJiYgIWNvbC5pY29uRmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicmV0dXJuQ2xhc3NDaGlwKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbCkgfX08L3NwYW5cclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gIFxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNJbWFnZUZpZWxkKGNvbClcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1hZ2VcIiBbc3JjXT1cImxvYWRJbWFnZShyb3dEYXRhLCBjb2wpXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgXHJcbiAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmljb25GaWVsZFwiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICdtYXRlcmlhbC1pY29ucyc6IGNvbC5pbmRJY29uTWF0ZXJpYWwsXHJcbiAgICAgICAgICAgICAgICAgICdtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIG1yLTInOiAhY29sLmluZEljb25NYXRlcmlhbFxyXG4gICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcEljb24ocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgcmV0dXJuQ2xhc3NJY29uKHJvd0RhdGEsIGNvbCkgfX1cclxuICAgICAgICAgICAgICA8L2k+XHJcbiAgXHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNib29sZWFuRmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb2wuaWNvbkZpZWxkICYmICFpc1N3aXRjaEZpZWxkKGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgICAgICAgICByb3dEYXRhW2NvbC5maWVsZF0gPyAndGV4dC1ncmVlbi01MDAnIDogJ3RleHQtcmVkLTUwMCdcclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgPjxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sLmZpZWxkXSA/IFwiY2hlY2tcIiA6IFwiY2xvc2VcIiB9fVxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2k+XHJcbiAgXHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImlzU3dpdGNoRmllbGQoY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyZXR1cm5Sb3dDbGFzcyhyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGt2LXN3aXRjaFxyXG4gICAgICAgICAgICAgICAgICAgIChvblN3aXRjaENoYW5nZSk9XCJvblN3aXRjaENoYW5nZSgkZXZlbnQsIHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb2w/Lm9ubHlSZWFkRmllbGQgPz8gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N3aXRjaFZhbHVlXT1cInRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDwva3Ytc3dpdGNoPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgXHJcbiAgICAgICAgICAgIDx0ZFxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiY29sLnRlbXBsYXRlICYmICFpc0VkaXRhYmxlVGFibGUoKVwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlXT1cIlxyXG4gICAgICAgICAgICAgICAgYXBwbHlTdHlsZShyb3dEYXRhLCBjb2wpICtcclxuICAgICAgICAgICAgICAgIGNlbnRyYWxpemFyQ29sdW5hcyhjb2wpICtcclxuICAgICAgICAgICAgICAgIGFsaWduQ29sdW5hcyhjb2wpXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInJvd1RhYmxlXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1jb2x1bW4tdGl0bGVcIj57eyBjb2wuaGVhZGVyIH19Ojwvc3Bhbj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImdldEN1c3RvbVRlbXBsYXRlKGNvbC50ZW1wbGF0ZS5uYW1lKVwiXHJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJnZXRDdXN0b21UZW1wbGF0ZShjb2wudGVtcGxhdGUubmFtZSlcIlxyXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiByb3dEYXRhIH1cIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxyXG4gICAgICAgIDwhLS0gQ29udHJvbGUgZGUgYcOnw6NvICAtLT5cclxuICAgICAgICAgQGlmKCFpc0VkaXRpbmcgJiYgY29uZmlnLmFjdGlvbnMgJiYgY29uZmlnLmFjdGlvbnMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgIDx0ZFxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgJ3RkLXRvb2xzJzogaXNFZGl0YWJsZVRhYmxlKCkgJiYgdGhpcy5lZGl0TW9kZSA9PSAncm93JyxcclxuICAgICAgICAgICAgICAndGQtdG9vbHMtc3RpY2t5JzogIWlzRWRpdGFibGVUYWJsZSgpIHx8IHRoaXMuZWRpdE1vZGUgPT0gJ2NlbGwnXHJcbiAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICBbc3R5bGVdPVwiXHJcbiAgICAgICAgICAgICAgYXBwbHlTdHlsZShyb3dEYXRhLCB7IGZpZWxkOiAnYnRucy1vcHRpb25zJywgaGVhZGVyOiAnJyB9KSArXHJcbiAgICAgICAgICAgICAgJ2JvcmRlci1yaWdodDogMXB4IHNvbGlkICNkZGQgIWltcG9ydGFudDsgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjZGRkICFpbXBvcnRhbnQ7J1xyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWVuZCB3LWZ1bGxcIj5cclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBjdXJzb3ItcG9pbnRlciBpY29uLW1vcmUtaG9yaXpcIlxyXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMXJlbTsgaGVpZ2h0OiAxMHB4OyB3aWR0aDogMjBweFwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtZW51LnRvZ2dsZSgkZXZlbnQpOyBhY3RpdmVJdGVtKHJvd0RhdGEpXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgbW9yZV9ob3JpelxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8L2J1dHRvbj4gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbmZpZy5hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGNyaWFyTWVudXNNb2RhbChyb3dEYXRhKSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIDxwLW1lbnVcclxuICAgICAgICAgICAgICAgICAgI21lbnVcclxuICAgICAgICAgICAgICAgICAgW3BvcHVwXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbbW9kZWxdPVwibWVudUl0ZW1zXCJcclxuICAgICAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcclxuICAgICAgICAgICAgICAgID48L3AtbWVudT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgfVxyXG4gICAgICAgXHJcbiAgICAgICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxyXG4gICAgICAgIDwhLS0gQ29udHJvbGUgZGUgZWRpw6fDo28gLS0+XHJcbiAgICAgICAgIEBpZih0aGlzLmlzRWRpdGFibGVUYWJsZSgpICYmIHRoaXMuZWRpdE1vZGUgPT0gJ3Jvdycpe1xyXG4gICAgICAgICAgPHRkIGNsYXNzPVwidGQtZWRpdFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgIEBpZighZWRpdGluZyl7XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cIicyOHB4J1wiXHJcbiAgICAgICAgICAgICAgICBbaWRdPVwiJ3Jvd0VkaXQnICsgcm93RGF0YVtjb25maWcuZGF0YUtleV1cIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cIicyOHB4J1wiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlRWRpdFJvd0Z1bmN0aW9uKHJvd0RhdGEpXCJcclxuICAgICAgICAgICAgICAgIHBCdXR0b25cclxuICAgICAgICAgICAgICAgIHBSaXBwbGVcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgcEluaXRFZGl0YWJsZVJvd1xyXG4gICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXBlbmNpbFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dFZGl0SW5pdChyb3dEYXRhKVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dFwiXHJcbiAgICAgICAgICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgQGlmKGVkaXRpbmcpe1xyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodF09XCInMjhweCdcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cIicyOHB4J1wiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlRWRpdFJvd0Z1bmN0aW9uKHJvd0RhdGEpXCJcclxuICAgICAgICAgICAgICAgIHBCdXR0b25cclxuICAgICAgICAgICAgICAgIHBSaXBwbGVcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgcENhbmNlbEVkaXRhYmxlUm93XHJcbiAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktdGltZXNcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93RWRpdENhbmNlbChyb3dEYXRhLCByaSlcIlxyXG4gICAgICAgICAgICAgICAgW2lkXT1cIidyb3dDYW5jZWwnICsgcm93RGF0YVtjb25maWcuZGF0YUtleV1cIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgcC1idXR0b24tZGFuZ2VyXCJcclxuICAgICAgICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICB9XHJcbiAgICAgIFxyXG4gICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3AtdGFibGU+XHJcbjwvZGl2PlxyXG4iXX0=
|