@seniorsistemas/data-seniorx-core 2.0.1 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/config/dynamic-view-builder.config.d.ts +3 -0
- package/core/constants/dynamic-view-builder.const.d.ts +15 -0
- package/core/constants/picklist.const.d.ts +4 -0
- package/core/constants/timeline.const.d.ts +6 -0
- package/core/types/confirm.type.d.ts +1 -0
- package/core/types/dynamic-view-builder.type.d.ts +130 -0
- package/core/types/row-card.type.d.ts +10 -0
- package/core/types/timeline.type.d.ts +22 -0
- package/esm2022/core/config/dynamic-view-builder.config.mjs +396 -0
- package/esm2022/core/config/row-card.type.config.mjs +2 -1
- package/esm2022/core/constants/dynamic-view-builder.const.mjs +24 -0
- package/esm2022/core/constants/picklist.const.mjs +5 -1
- package/esm2022/core/constants/timeline.const.mjs +6 -0
- package/esm2022/core/handlers/sqlFormatter.mjs +3 -2
- package/esm2022/core/types/confirm.type.mjs +1 -1
- package/esm2022/core/types/dynamic-view-builder.type.mjs +2 -0
- package/esm2022/core/types/row-card.type.mjs +1 -1
- package/esm2022/core/types/timeline.type.mjs +2 -0
- package/esm2022/core/utils/layout.util.mjs +4 -4
- package/esm2022/core/utils/number-input.util.mjs +2 -2
- package/esm2022/features/breadcrumb/breadcrumb.component.mjs +21 -3
- package/esm2022/features/button/button.component.mjs +5 -5
- package/esm2022/features/card-list/card/card.component.mjs +4 -6
- package/esm2022/features/card-list/card-list.component.mjs +4 -7
- package/esm2022/features/code-editor/code-editor.component.mjs +5 -5
- package/esm2022/features/color-picker/color-picker.component.mjs +4 -4
- package/esm2022/features/combobox/combobox.component.mjs +8 -8
- package/esm2022/features/confirm/confirm.component.mjs +8 -4
- package/esm2022/features/country-phone-picker/country-phone-picker.component.mjs +6 -8
- package/esm2022/features/empty-state/empty-state.component.mjs +3 -3
- package/esm2022/features/hyperlink/hyperlink.component.mjs +10 -12
- package/esm2022/features/icon-picker/icon-picker.component.mjs +3 -3
- package/esm2022/features/info-sign/info-sign.component.mjs +3 -3
- package/esm2022/features/list/list.component.mjs +1 -1
- package/esm2022/features/loading-state/loading-state.component.mjs +20 -25
- package/esm2022/features/localized-number-input/localized-number-input.component.mjs +4 -4
- package/esm2022/features/mask/mask.component.mjs +4 -4
- package/esm2022/features/modal/modal.component.mjs +5 -5
- package/esm2022/features/modalc/modalc.component.mjs +1 -1
- package/esm2022/features/number-input/number-input.component.mjs +4 -4
- package/esm2022/features/numeric/numeric.component.mjs +4 -6
- package/esm2022/features/paginator/paginator.component.mjs +2 -2
- package/esm2022/features/password-strength/password-strength.component.mjs +3 -3
- package/esm2022/features/picklist/picklist.component.mjs +50 -9
- package/esm2022/features/radio/radio.component.mjs +12 -12
- package/esm2022/features/row-card-list/row-card/row-card.component.mjs +32 -9
- package/esm2022/features/row-card-list/row-card-list.component.mjs +3 -3
- package/esm2022/features/searchbox/searchbox.component.mjs +1 -1
- package/esm2022/features/sidebar/sidebar.component.mjs +7 -3
- package/esm2022/features/switch/switch.component.mjs +3 -3
- package/esm2022/features/table/table.component.mjs +3 -3
- package/esm2022/features/textarea/textarea.component.mjs +4 -4
- package/esm2022/features/textbox/textbox.component.mjs +4 -4
- package/esm2022/features/timeline/timeline.component.mjs +90 -0
- package/esm2022/features/toast/toast.component.mjs +4 -6
- package/esm2022/features/tooltip/tooltip.component.mjs +3 -3
- package/esm2022/features/visual-sql-editor/visual-sql-editor.component.mjs +2810 -0
- package/esm2022/locales/en.json +202 -1
- package/esm2022/locales/es-CO.json +202 -1
- package/esm2022/locales/pt.json +202 -1
- package/esm2022/public-api.mjs +6 -1
- package/features/breadcrumb/breadcrumb.component.d.ts +2 -0
- package/features/button/button.component.d.ts +2 -2
- package/features/code-editor/code-editor.component.d.ts +2 -2
- package/features/hyperlink/hyperlink.component.d.ts +3 -3
- package/features/loading-state/loading-state.component.d.ts +3 -4
- package/features/modal/modal.component.d.ts +2 -2
- package/features/picklist/picklist.component.d.ts +10 -1
- package/features/radio/radio.component.d.ts +4 -4
- package/features/row-card-list/row-card/row-card.component.d.ts +8 -1
- package/features/sidebar/sidebar.component.d.ts +2 -1
- package/features/timeline/timeline.component.d.ts +27 -0
- package/features/visual-sql-editor/visual-sql-editor.component.d.ts +560 -0
- package/fesm2022/seniorsistemas-data-seniorx-core.mjs +4161 -176
- package/fesm2022/seniorsistemas-data-seniorx-core.mjs.map +1 -1
- package/package.json +2 -2
- package/public-api.d.ts +7 -0
- package/src/locales/en.json +211 -1
- package/src/locales/es-CO.json +211 -1
- package/src/locales/pt.json +211 -1
- package/styles.css +1 -1
|
@@ -608,7 +608,7 @@ export class TableComponent {
|
|
|
608
608
|
};
|
|
609
609
|
}
|
|
610
610
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
611
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TableComponent, isStandalone: true, selector: "sdc-table", inputs: { cols: "cols", data: "data", loading: "loading", config: "config", ariaLabel: "ariaLabel" }, outputs: { action: "action", lazyLoad: "lazyLoad" }, host: { listeners: { "document:click": "onDocumentClick()", "document:keydown.escape": "onEscapeKey()", "window:resize": "onWindowResize()", "window:scroll": "onWindowScroll()" } }, ngImport: i0, template: "<section\n class=\"sdc-table\"\n [class.sdc-table-stack]=\"isMobile\"\n [class.sdc-table-filtered]=\"!!globalFilter().trim()\"\n [class.sdc-table--loading]=\"isLoading\"\n [class.sdc-table--initial-loading]=\"showInitialLoading()\"\n>\n <sdc-loading-state\n class=\"sdc-table-loading-wrap\"\n [loading]=\"isLoading\"\n [blockWindow]=\"false\"\n [blockDelayMs]=\"0\"\n [indicator]=\"'dots'\"\n >\n <div class=\"sdc-table-shell\" [style.--sdc-table-body-height.px]=\"bodyViewportHeightPx()\">\n <div class=\"sdc-table-caption\" *ngIf=\"showSearch()\">\n <div [style.width]=\"isMobile ? '100%' : '20%'\">\n <sdc-searchbox\n [disabled]=\"isLoading\"\n [placeholder]=\"searchPlaceholder()\"\n [triggerMode]=\"triggerMode()\"\n (onSearch)=\"onSearchTerm($event)\"\n (onClear)=\"onClearSearch()\"\n [attr.aria-label]=\"\n 'platform.datacore.accessibility.search_field' | translate\n \"\n />\n </div>\n </div>\n\n <table\n class=\"sdc-table-grid\"\n role=\"table\"\n [attr.aria-label]=\"tableAriaLabelKey() | translate\"\n [attr.aria-rowcount]=\"totalRecords()\"\n [attr.aria-busy]=\"isLoading\"\n >\n <thead>\n <tr role=\"row\">\n @for (col of cols; track $index) {\n <th\n scope=\"col\"\n role=\"columnheader\"\n [class.sdc-table-th-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-th-currency]=\"col.type === 'currency'\"\n [class.sdc-table-th-button]=\"col.type === 'button'\"\n [class.sdc-table-th-actions]=\"col.type === 'actions'\"\n (click)=\"col.field ? toggleSort(col.field, col.sortable !== false) : null\"\n (keydown.enter)=\"col.field ? toggleSort(col.field, col.sortable !== false) : null\"\n (keydown.space)=\"$event.preventDefault(); col.field ? toggleSort(col.field, col.sortable !== false) : null\"\n [class.sdc-table-sortable]=\"col.sortable !== false\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\"\n [attr.aria-sort]=\"getSortAriaAttribute(col)\"\n [attr.tabindex]=\"col.sortable !== false ? 0 : null\"\n [attr.aria-label]=\"\n col.sortable !== false\n ? (\n (col.header | translate)\n + ' - '\n + ('platform.datacore.accessibility.sortable_column' | translate)\n )\n : (col.header | translate)\n \"\n >\n <div class=\"sdc-table-th-inner\" [class.sdc-table-sortable]=\"col.sortable !== false\">\n @switch (col.type) {\n @case ('checkbox-selection') {\n <span class=\"sdc-table-th-label\" aria-hidden=\"true\">{{ col.header | translate }}</span>\n }\n @default {\n <span class=\"sdc-table-th-label\" aria-hidden=\"true\">{{ col.header | translate }}</span>\n <span\n class=\"sdc-table-sort-icons sdc-table-sort-overlay\"\n *ngIf=\"col.sortable !== false\"\n aria-hidden=\"true\"\n >\n <ng-container\n [ngTemplateOutlet]=\"sortIconsTpl\"\n [ngTemplateOutletContext]=\"{ col: col }\"\n ></ng-container>\n </span>\n }\n }\n </div>\n\n <span\n class=\"sdc-table-th-center\"\n *ngIf=\"col.type === 'checkbox-selection' && (cellCfg('checkbox').selectAll ?? true)\"\n >\n <input\n type=\"checkbox\"\n [id]=\"'select-all-checkbox'\"\n [checked]=\"isPageFullySelected()\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleSelectPage(getCheckedValue($event))\"\n (keydown.space)=\"$event.preventDefault(); toggleSelectPage(!isPageFullySelected())\"\n [attr.aria-label]=\"'platform.datacore.accessibility.select_all_rows' | translate\"\n [attr.aria-checked]=\"isPageFullySelected()\"\n />\n <label for=\"select-all-checkbox\" class=\"sr-only\">\n {{ 'platform.datacore.accessibility.select_all_rows' | translate }}\n </label>\n </span>\n </th>\n }\n </tr>\n </thead>\n\n <tbody>\n @if (showInitialLoading()) {\n @for (rowIndex of initialLoadingRows(); track rowIndex; let r = $index) {\n <tr class=\"sdc-table-initial-loading-row\" role=\"row\" [attr.aria-rowindex]=\"r + 1\" aria-hidden=\"true\">\n @for (col of cols; track $index) {\n <td\n class=\"sdc-table-td sdc-table-tdc sdc-table-td--initial-loading\"\n [class.sdc-table-td-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-td-currency]=\"col.type === 'currency'\"\n [class.sdc-table-td-button]=\"col.type === 'button'\"\n [class.sdc-table-td-actions]=\"col.type === 'actions'\"\n [ngClass]=\"columnAlignClass(col)\"\n [attr.data-title]=\"col.header | translate\"\n role=\"cell\"\n >\n <div class=\"sdc-table-td-val sdc-table-td-val--initial-loading\"></div>\n </td>\n }\n </tr>\n }\n } @else {\n @for (row of pageData(); track $index; let r = $index) {\n <tr role=\"row\" [attr.aria-rowindex]=\"r + 1\">\n @for (col of cols; track $index) {\n <ng-container *ngIf=\"isMobile; else desktopContent\">\n <div class=\"sdc-table-td-mobile\">\n <ng-container [ngTemplateOutlet]=\"sortIconsTpl\" [ngTemplateOutletContext]=\"{ col: col }\"></ng-container>\n <td\n class=\"sdc-table-td sdc-table-tdc sdc-table-mobile-td\"\n [class.sdc-table-td-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-td-currency]=\"col.type === 'currency'\"\n [class.sdc-table-td-button]=\"col.type === 'button'\"\n [class.sdc-table-td-actions]=\"col.type === 'actions'\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\"\n [ngClass]=\"columnAlignClass(col)\"\n [attr.data-title]=\"col.header | translate\"\n role=\"cell\"\n [attr.tabindex]=\"col.sortable !== false ? 0 : null\"\n (click)=\"col.field ? toggleSort(col.field, col.sortable !== false) : null\"\n (keydown.enter)=\"col.field ? toggleSort(col.field, col.sortable !== false) : null\"\n (keydown.space)=\"$event.preventDefault(); col.field ? toggleSort(col.field, col.sortable !== false) : null\"\n >\n <div class=\"sdc-table-td-val\">\n <ng-container\n [ngTemplateOutlet]=\"cellTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: row, col: col }\"\n ></ng-container>\n </div>\n </td>\n </div>\n </ng-container>\n\n <ng-template #desktopContent>\n <td\n class=\"sdc-table-td sdc-table-tdc\"\n [class.sdc-table-td-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-td-currency]=\"col.type === 'currency'\"\n [class.sdc-table-td-button]=\"col.type === 'button'\"\n [class.sdc-table-td-actions]=\"col.type === 'actions'\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\"\n [ngClass]=\"columnAlignClass(col)\"\n [attr.data-title]=\"col.header | translate\"\n role=\"cell\"\n >\n <div class=\"sdc-table-td-val\">\n <ng-container [ngTemplateOutlet]=\"cellTpl\" [ngTemplateOutletContext]=\"{ $implicit: row, col: col }\"></ng-container>\n </div>\n </td>\n </ng-template>\n }\n </tr>\n }\n }\n </tbody>\n </table>\n\n <sdc-empty-state\n *ngIf=\"!isLoading && options().empty?.show !== false && totalRecords() === 0\"\n id=\"my-empty-state\"\n iconClass=\"fa fa-inbox\"\n [title]=\"emptyTitle()\"\n [description]=\"emptyText()\"\n class=\"sdc-table-empty-state\"\n [style.min-height.px]=\"emptyBodyHeightPx()\"\n >\n </sdc-empty-state>\n\n <div class=\"sdc-table-paginator\" *ngIf=\"showPaginator()\">\n <sdc-paginator\n [first]=\"first()\"\n [rows]=\"rows()\"\n [totalRecords]=\"totalRecords()\"\n [rowsPerPageOptions]=\"isMobile ? [] : rowsPerPageOptions()\"\n [isMobile]=\"isMobile\"\n [totalRecordsLabel]=\"totalRecordsLabel()\"\n (pageChange)=\"onPageChange($event)\"\n ></sdc-paginator>\n </div>\n </div>\n </sdc-loading-state>\n\n <ng-template #cellTpl let-row let-col=\"col\">\n @switch (col.type) {\n @case ('checkbox-selection') {\n <ng-container *ngIf=\"cellCfg('checkbox') as checkboxOptions\">\n <div class=\"sdc-table-checkbox\">\n <input\n type=\"checkbox\"\n [id]=\"getRowCheckboxId(row)\"\n [checked]=\"isRowSelected(row)\"\n (change)=\"onToggleRow(row, getCheckedValue($event))\"\n [attr.aria-label]=\"\n 'platform.datacore.accessibility.select_row'\n | translate: { name: (getRowCheckboxLabel(row) | translate) }\n \"\n [attr.aria-checked]=\"isRowSelected(row)\"\n />\n <label [attr.for]=\"getRowCheckboxId(row)\" class=\"sr-only\">\n {{\n 'platform.datacore.accessibility.select_row'\n | translate: { name: (getRowCheckboxLabel(row) | translate) }\n }}\n </label>\n </div>\n </ng-container>\n }\n\n @case ('date') {\n {{ formatDate(_(row, col.field), col.format || 'shortDate') }}\n }\n\n @case ('strong') {\n <div class=\"sdc-table-strong-label\">{{ cellTextValue(row, col.field) | translate }}</div>\n }\n\n @case ('code') {\n <code class=\"sdc-table-code-label\">{{ _(row, col.field) }}</code>\n }\n\n @case ('currency') {\n {{ formatCurrency(_(row, col.field), col.format || 'BRL') }}\n }\n\n @case ('tag') {\n <ng-container *ngIf=\"cellCfg('tag') as tagOptions\">\n <div class=\"sdc-table-tags\">\n @for (tag of tagsOf(row, col); track $index) {\n <span\n class=\"sdc-table-tag\"\n [class.sdc-tag--enabled]=\"isEnabledTag(tag)\"\n [class.sdc-tag--disabled]=\"isDisabledTag(tag)\"\n [ngStyle]=\"getTagStyles(tag, tagOptions)\"\n [attr.title]=\"tagOptions.tooltip ? (tagOptions.tooltip | translate) : null\"\n >\n <i *ngIf=\"tagOptions.icon\" [class]=\"tagOptions.icon\"></i>\n {{ tag | translate }}\n </span>\n }\n </div>\n </ng-container>\n }\n\n @case ('button') {\n <ng-container *ngIf=\"cellCfg('button') as buttonOptions\">\n <div class=\"sdc-table-button\">\n <sdc-button\n class=\"sdc-table-action-button\"\n [size]=\"buttonOptions.size ?? 'default'\"\n [priority]=\"buttonOptions.priority || 'primary'\"\n [icon]=\"buttonOptions.icon\"\n [label]=\"buttonOptions.label ?? ''\"\n [disabled]=\"buttonOptions.disabled ?? false\"\n [title]=\"buttonOptions.tooltip\"\n [attr.size]=\"buttonOptions.size\"\n [attr.priority]=\"buttonOptions.priority || 'primary'\"\n [attr.severity]=\"buttonOptions.priority || 'primary'\"\n [attr.icon]=\"buttonOptions.icon\"\n [attr.label]=\"buttonOptions.label\"\n [attr.disabled]=\"buttonOptions.disabled ? '' : null\"\n [attr.title]=\"buttonOptions.tooltip || null\"\n [attr.aria-label]=\"\n (\n (buttonOptions.label || buttonOptions.tooltip || 'platform.datacore.accessibility.action_button')\n | translate\n )\n + ' - '\n + (getRowCheckboxLabel(row) | translate)\n \"\n [attr.data-key]=\"buttonKey(row, col, buttonOptions)\"\n (click)=\"buttonOptions.disabled ? null : onButtonClick(row, col)\"\n (keydown.enter)=\"buttonOptions.disabled ? null : onButtonClick(row, col)\"\n (keydown.space)=\"$event.preventDefault(); buttonOptions.disabled ? null : onButtonClick(row, col)\"\n >\n </sdc-button>\n </div>\n </ng-container>\n }\n\n @case ('actions') {\n <ng-container *ngIf=\"cellCfg('actions') as actionsOpt\">\n <div\n class=\"sdc-table-actions\"\n [class.sdc-table-actions--open]=\"isActionsMenuOpen(row, col)\"\n >\n <button\n #actionsTrigger\n type=\"button\"\n class=\"sdc-table-actions-trigger\"\n [class.sdc-table-actions-trigger--open]=\"isActionsMenuOpen(row, col)\"\n [attr.aria-label]=\"\n ((actionsOpt.buttonLabel || 'platform.datacore.accessibility.actions_menu') | translate)\n + ' - '\n + (getRowCheckboxLabel(row) | translate)\n \"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-expanded]=\"isActionsMenuOpen(row, col)\"\n (click)=\"toggleActionsMenu($event, row, col, actionsTrigger)\"\n >\n <span class=\"sdc-table-actions-trigger__label\">\n {{ (actionsOpt.buttonLabel || 'platform.datacore.accessibility.actions_menu') | translate }}\n </span>\n <i class=\"fas fa-chevron-down sdc-table-actions-trigger__icon\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </ng-container>\n }\n\n @case ('icon-title') {\n <ng-container *ngIf=\"cellCfg('icon-title') as iconTitleOptions\">\n <div class=\"sdc-table-icon-title\">\n <i [class]=\"_(row, iconTitleOptions.iconField)\" aria-hidden=\"true\"></i>\n <span>{{ cellTextValue(row, col.field) | translate }}</span>\n </div>\n </ng-container>\n }\n\n @default {\n {{ cellTextValue(row, col.field) | translate }}\n }\n }\n </ng-template>\n</section>\n<div\n *ngIf=\"openMenuState() as menu\"\n class=\"sdc-actions-menu sdc-actions-menu--portal\"\n [style.top.px]=\"menu.top\"\n [style.left.px]=\"menu.left\"\n [style.min-width.px]=\"menu.width\"\n role=\"menu\"\n (click)=\"$event.stopPropagation()\"\n>\n <button\n type=\"button\"\n class=\"sdc-actions-item\"\n *ngFor=\"let item of menu.items\"\n [disabled]=\"item.disabled\"\n [class.sdc-actions-item--disabled]=\"item.disabled\"\n [attr.aria-disabled]=\"item.disabled\"\n (click)=\"onPortalActionClick($event, item)\"\n >\n <span class=\"sdc-actions-item__content\">\n <i *ngIf=\"item.icon\" [class]=\"item.icon\" aria-hidden=\"true\"></i>\n <span>{{ item.label | translate }}</span>\n </span>\n </button>\n</div>\n\n<ng-template #sortIconsTpl let-col=\"col\">\n <span\n *ngIf=\"col.sortable !== false && col.type !== 'checkbox-selection'\"\n class=\"sdc-table-sort-indicator\"\n aria-hidden=\"true\"\n >\n <i *ngIf=\"sortField() !== col.field\" class=\"fas fa-sort-alt sdc-table-sort-neutral\" aria-hidden=\"true\"></i>\n <i *ngIf=\"sortField() === col.field && sortOrder() === 1\" class=\"fas fa-sort-amount-up-alt sdc-table-sort-active\" aria-hidden=\"true\"></i>\n <i *ngIf=\"sortField() === col.field && sortOrder() === -1\" class=\"fas fa-sort-amount-down sdc-table-sort-active\" aria-hidden=\"true\"></i>\n </span>\n\n <span\n *ngIf=\"col.sortable === false || col.type === 'checkbox-selection'\"\n class=\"sdc-table-sort-indicator sdc-table-sort-indicator-placeholder\"\n aria-hidden=\"true\"\n ></span>\n</ng-template>\n", styles: [":host{display:block;width:100%;box-sizing:border-box;--sdc-tag-width: 7.5rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}@media (max-width: 750px){.sdc-table-tag{font-size:.8125rem;padding:.35rem .75rem}.sdc-table-sort-indicator-placeholder{display:none!important;width:0!important;height:0!important;min-width:0!important}.sdc-table-paginator{justify-content:center!important;border-top:1px solid var(--sdc-table-border-gray)}.sdc-table-sort-indicator{gap:.15rem;min-width:1.2rem;position:absolute;left:21px}.sdc-table-sort-indicator i{font-size:.75rem;width:.65rem}.sdc-table-td-val{background:none!important;height:100%;padding:1rem;justify-content:end;border-left:1px solid var(--sdc-formfield-default-border);display:flex;overflow:visible;overflow-wrap:anywhere;word-break:break-word;white-space:normal;min-width:0}.sdc-table-strong-label,.sdc-table-code-label{white-space:normal;overflow:visible;text-overflow:clip;overflow-wrap:anywhere;word-break:break-word}.sdc-table-td-mobile{border-top:1px solid var(--sdc-formfield-default-border);display:flex;align-items:center;padding-left:10px}.sdc-table.sdc-table-stack thead{display:none}.sdc-table.sdc-table-stack .sdc-table-grid,.sdc-table.sdc-table-stack .sdc-table-grid tbody,.sdc-table.sdc-table-stack .sdc-table-grid tr,.sdc-table.sdc-table-stack .sdc-table-grid td{display:block;width:100%;box-sizing:border-box}.sdc-table.sdc-table-stack .sdc-table-grid tr{border-top:1px solid var(--sdc-formfield-default-border);background:var(--sdc-table-bg-card)}.sdc-table.sdc-table-stack .sdc-table-td{position:relative;padding:0;border-bottom:1px solid var(--sdc-table-border-gray);display:grid!important;grid-template-columns:45% 55%;align-items:center;gap:var(--sdc-table-gap-th-inner)}.sdc-table.sdc-table-stack .sdc-table-td:before{content:attr(data-title);font-weight:600;padding:var(--sdc-table-padding-cell) .5rem var(--sdc-table-padding-cell) var(--sdc-table-padding-cell);border-right:0 solid var(--sdc-formfield-default-border);word-break:break-word}.sdc-table.sdc-table-stack .sdc-table-td>*{grid-column:2;min-width:0;max-width:100%}.sdc-table.sdc-table-stack .sdc-table-grid tr .sdc-table-td:last-child{border-bottom:0}.sdc-table.sdc-table-stack .sdc-table-sort-icons{flex-direction:column;line-height:.8}.sdc-table.sdc-table-stack .sdc-table-td--initial-loading{grid-template-columns:100%;min-height:3.75rem}.sdc-table.sdc-table-stack .sdc-table-td--initial-loading:before{content:\"\";padding:0}.sdc-table.sdc-table-stack .sdc-table-td--initial-loading>*{grid-column:1}.sdc-table.sdc-table-stack .sdc-table-td--initial-loading .sdc-table-td-val--initial-loading{border-left:0;justify-content:flex-start;padding:0;min-height:3.75rem}.sdc-table.sdc-table-stack .sdc-actions-menu--portal{min-width:7.5rem!important}.sdc-table.sdc-table-stack .sdc-table-actions-trigger{min-width:4.375rem;height:1.75rem;padding:0 .625rem;font-size:.75rem}::ng-deep .p-paginator .p-paginator-next{border-width:1px 1px 1px 1px!important}}@media (min-width: 750px){.sdc-table-tag{font-size:.875rem;padding:.35rem .875rem}.sdc-table-sort-indicator-placeholder{width:1.4rem;height:1rem;display:inline-block}.sdc-table-grid thead th+th{border-left:1px solid var(--sdc-formfield-default-border)}thead th.sdc-table-th-checkbox,tbody td.sdc-table-td-checkbox{width:84px;min-width:84px;max-width:84px}thead th.sdc-table-th-currency,tbody td.sdc-table-td-currency{width:132px;min-width:132px}thead th.sdc-table-th-button,tbody td.sdc-table-td-button{width:154px;min-width:154px}thead th.sdc-table-th-actions,tbody td.sdc-table-td-actions{width:124px;min-width:124px}}.sdc-table{width:100%;box-sizing:border-box;overflow:visible;background:var(--sdc-table-bg-card)}.sdc-table .sdc-table-strong-label{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;max-width:100%;display:block}.sdc-table .sdc-table-code-label{color:var(--sdc-tab-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;display:block;max-width:100%}.sdc-table-shell{display:block;--sdc-table-body-height: 220px;overflow:visible}.sdc-table-loading-wrap{display:block;width:100%;overflow:visible}.sdc-table-caption{width:100%;justify-content:end;display:flex;padding:.75rem 0}.sdc-table-grid{width:100%;border-collapse:collapse;table-layout:fixed}thead th{padding:var(--sdc-table-padding-cell);background:var(--sdc-table-bg-card);border-bottom:1px solid var(--sdc-formfield-default-border);-webkit-user-select:none;user-select:none;transition:background var(--sdc-table-transition-fast),border var(--sdc-table-transition-fast);min-height:44px;position:relative;overflow:hidden}thead th.sdc-table-sortable{cursor:pointer}thead th.sdc-table-sortable:hover{background:var(--sdc-table-th-hover-bg)}thead th.sdc-table-sortable:focus{outline:2px solid var(--sdc-tab-primary, #007bff);outline-offset:-2px;box-shadow:inset 0 0 0 3px #007bff26;position:relative;z-index:1}thead th.sdc-table-sortable:focus-visible{outline:2px solid var(--sdc-tab-primary, #007bff);outline-offset:-2px;box-shadow:inset 0 0 0 3px #007bff40}thead th.sdc-table-is-selected{background:var(--sdc-table-th-selected-bg)!important}.sdc-table-sort-neutral{color:var(--sdc-table-sort-neutral)}.sdc-table-sort-active{color:var(--sdc-table-sort-active)}.sdc-table-th-inner{display:flex;align-items:center;gap:var(--sdc-table-gap-th-inner);width:100%;min-width:0;overflow:hidden}.sdc-table-sort-icons i{font-size:inherit;transition:color var(--sdc-table-transition-fast),transform var(--sdc-table-transition-fast),opacity var(--sdc-table-transition-fast)}tbody td{padding:.5rem var(--sdc-table-padding-cell);border-bottom:1px solid var(--sdc-table-border-gray);vertical-align:middle;overflow:visible}.sdc-table-initial-loading-row{background:var(--sdc-table-bg-card)}.sdc-table-td--initial-loading{height:3.625rem}.sdc-table-td-val--initial-loading{min-height:1.5rem}.sdc-table-tags{display:flex;flex-wrap:wrap;gap:.5rem}.sdc-table-tag{display:inline-flex;align-items:center;justify-content:center;gap:.35rem;width:fit-content;min-width:fit-content;max-width:100%;border-radius:9999px;font-weight:500;line-height:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid currentColor;box-sizing:border-box}.sdc-table-tag i{font-size:.75rem;color:inherit;flex:0 0 auto}.sdc-tag--enabled{background:#dcfce7;color:#16a34a;border-color:#16a34a}.sdc-tag--disabled{background:#fee2e2;color:#ef4444;border-color:#ef4444}.sdc-table-sort-indicator{display:inline-flex;align-items:center;justify-content:center;gap:.25rem;min-width:1.7rem;flex:0 0 auto}.sdc-table-sort-indicator i{width:.75rem;text-align:center}.sdc-table-sort-overlay{position:relative}.sdc-table-paginator{padding:.5rem 0;border-top:0}.sdc-table-button{display:flex;align-items:center;justify-content:center;min-height:44px;width:100%;min-width:0}.sdc-table-button ::ng-deep sdc-button,.sdc-table-button ::ng-deep button{min-height:unset;min-width:unset;max-width:100%}.sdc-table-action-button{width:100%;max-width:100%;min-width:0}.sdc-table-icon-title{display:flex;align-items:center;gap:8px;min-width:0}.sdc-table-icon-title i{flex-shrink:0}.sdc-table-icon-title span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.sdc-table-checkbox{display:flex;align-items:center;justify-content:center}.sdc-table-checkbox input[type=checkbox]{cursor:pointer}.sdc-table-empty-state{display:flex;align-items:center;justify-content:center;min-height:var(--sdc-table-body-height);padding:0}.sdc-table--loading .sdc-table-shell{pointer-events:none;-webkit-user-select:none;user-select:none}thead th.sdc-table-th-checkbox .sdc-table-th-center{position:absolute;inset:0;display:flex;align-items:center;justify-content:flex-end;padding-right:10px;pointer-events:none}thead th.sdc-table-th-checkbox .sdc-table-th-center input{pointer-events:auto}thead th.sdc-table-th-checkbox .sdc-table-th-inner{padding-right:28px}thead .sdc-table-th-label,thead th.sdc-table-th-checkbox .sdc-table-th-label{color:#333!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;display:block;flex:1 1 auto}.sdc-table-td-val{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.sdc-table-td-val>*{min-width:0;max-width:100%}.sdc-table-actions{position:relative;display:inline-flex;align-items:center;justify-content:center;width:100%;min-width:0}.sdc-table-actions-trigger{appearance:none;border:1px solid #c9ced6;background:#fff;border-radius:999px;min-width:4.875rem;height:2rem;padding:0 .75rem;display:inline-flex;align-items:center;justify-content:center;gap:.375rem;font:inherit;font-size:.8125rem;color:#374151;cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease,background-color .15s ease}.sdc-table-actions-trigger:hover{background:#f9fafb}.sdc-table-actions-trigger:focus-visible,.sdc-table-actions-trigger--open{outline:none;border-color:#9ca3af;box-shadow:0 0 0 2px #1118270a}.sdc-table-actions-trigger__label{line-height:1;white-space:nowrap}.sdc-table-actions-trigger__icon{font-size:.625rem;line-height:1;color:#6b7280}.sdc-actions-menu{background:#fff;border:1px solid #d1d5db;border-radius:0;box-shadow:0 1px 2px #0f172a14;padding:0}.sdc-actions-menu--portal{position:fixed;z-index:2147483647}.sdc-actions-item{width:100%;display:flex;align-items:stretch;justify-content:flex-start;border:0;border-bottom:1px solid #e5e7eb;background:#fff;padding:0;text-align:left;cursor:pointer;font:inherit;color:#374151;min-height:2.25rem;transition:background-color .15s ease,color .15s ease}.sdc-actions-item:last-child{border-bottom:0}.sdc-actions-item__content{display:inline-flex;align-items:center;gap:.5rem;padding:.625rem .875rem;width:100%;font-size:.8125rem;line-height:1.2}.sdc-actions-item:hover:not(:disabled),.sdc-actions-item:focus-visible:not(:disabled){background:#f9fafb;outline:none}.sdc-actions-item:disabled,.sdc-actions-item.sdc-actions-item--disabled,.sdc-actions-item[data-disabled=true]{color:#9ca3af;cursor:not-allowed;background:#fff;pointer-events:none}.sdc-actions-item:disabled .sdc-actions-item__content,.sdc-actions-item.sdc-actions-item--disabled .sdc-actions-item__content,.sdc-actions-item[data-disabled=true] .sdc-actions-item__content{opacity:.55}.sdc-actions-item i{width:.875rem;text-align:center;flex:0 0 .875rem;font-size:.8125rem}.sdc-table-td-align-left{text-align:left}.sdc-table-td-align-left .sdc-table-td-val,.sdc-table-td-align-left .sdc-table-tags,.sdc-table-td-align-left .sdc-table-button,.sdc-table-td-align-left .sdc-table-icon-title,.sdc-table-td-align-left .sdc-table-checkbox,.sdc-table-td-align-left .sdc-table-actions{justify-content:flex-start;text-align:left}.sdc-table-td-align-center{text-align:center}.sdc-table-td-align-center .sdc-table-td-val,.sdc-table-td-align-center .sdc-table-tags,.sdc-table-td-align-center .sdc-table-button,.sdc-table-td-align-center .sdc-table-icon-title,.sdc-table-td-align-center .sdc-table-checkbox,.sdc-table-td-align-center .sdc-table-actions{justify-content:center;text-align:center}.sdc-table-td-align-right{text-align:right}.sdc-table-td-align-right .sdc-table-td-val,.sdc-table-td-align-right .sdc-table-tags,.sdc-table-td-align-right .sdc-table-button,.sdc-table-td-align-right .sdc-table-icon-title,.sdc-table-td-align-right .sdc-table-checkbox,.sdc-table-td-align-right .sdc-table-actions{justify-content:flex-end;text-align:right}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: SearchboxComponent, selector: "sdc-searchbox", inputs: ["triggerMode", "debounceTimeMs", "ariaLabel", "inputRole", "inputAriaControls", "inputAriaDescribedBy", "inputAriaActiveDescendant", "inputAriaHaspopup", "inputAriaExpanded", "inputAutocomplete", "submitOnEnter", "clearOnEscape"], outputs: ["debouncedValueChange", "onSearch", "onClear"] }, { kind: "component", type: PaginatorComponent, selector: "sdc-paginator", inputs: ["first", "rows", "totalRecords", "rowsPerPageOptions", "showRowsPerPageSelector", "isMobile", "totalRecordsLabel"], outputs: ["pageChange"] }, { kind: "component", type: ButtonComponent, selector: "sdc-button", inputs: ["id", "label", "ariaLabel", "disabled", "width", "priority", "size", "type", "icon", "rightIcon", "auxiliary", "caret", "tooltip", "animation", "slide", "styleClass", "badge", "menuOptions", "menuContext", "model"], outputs: ["onClick"] }, { kind: "component", type: LoadingStateComponent, selector: "sdc-loading-state", inputs: ["indicator", "id", "blockWindow", "blockDelayMs", "unblockDelayMs", "loading"] }, { kind: "component", type: EmptyStateComponent, selector: "sdc-empty-state", inputs: ["id", "title", "variant", "titleParams", "iconClass", "description", "descriptionParams", "showPrimaryAction", "showSecondaryAction", "primaryActionLabel", "primaryActionLabelParams", "secondaryActionLabel", "secondaryActionLabelParams", "primaryModel"], outputs: ["primaryAction", "secondaryAction"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
611
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TableComponent, isStandalone: true, selector: "sdc-table", inputs: { cols: "cols", data: "data", loading: "loading", config: "config", ariaLabel: "ariaLabel" }, outputs: { action: "action", lazyLoad: "lazyLoad" }, host: { listeners: { "document:click": "onDocumentClick()", "document:keydown.escape": "onEscapeKey()", "window:resize": "onWindowResize()", "window:scroll": "onWindowScroll()" } }, ngImport: i0, template: "<section\n class=\"sdc-table\"\n [class.sdc-table-stack]=\"isMobile\"\n [class.sdc-table-filtered]=\"!!globalFilter().trim()\"\n [class.sdc-table--loading]=\"isLoading\"\n [class.sdc-table--initial-loading]=\"showInitialLoading()\"\n >\n <sdc-loading-state\n class=\"sdc-table-loading-wrap\"\n [loading]=\"isLoading\"\n [blockWindow]=\"false\"\n [blockDelayMs]=\"0\"\n [indicator]=\"'dots'\"\n >\n <div class=\"sdc-table-shell\" [style.--sdc-table-body-height.px]=\"bodyViewportHeightPx()\">\n @if (showSearch()) {\n <div class=\"sdc-table-caption\">\n <div [style.width]=\"isMobile ? '100%' : '20%'\">\n <sdc-searchbox\n [disabled]=\"isLoading\"\n [placeholder]=\"searchPlaceholder()\"\n [triggerMode]=\"triggerMode()\"\n (onSearch)=\"onSearchTerm($event)\"\n (onClear)=\"onClearSearch()\"\n [attr.aria-label]=\"\n 'platform.datacore.accessibility.search_field' | translate\n \"\n />\n </div>\n </div>\n }\n\n <table\n class=\"sdc-table-grid\"\n role=\"table\"\n [attr.aria-label]=\"tableAriaLabelKey() | translate\"\n [attr.aria-rowcount]=\"totalRecords()\"\n [attr.aria-busy]=\"isLoading\"\n >\n <thead>\n <tr role=\"row\">\n @for (col of cols; track $index) {\n <th\n scope=\"col\"\n role=\"columnheader\"\n [class.sdc-table-th-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-th-currency]=\"col.type === 'currency'\"\n [class.sdc-table-th-button]=\"col.type === 'button'\"\n [class.sdc-table-th-actions]=\"col.type === 'actions'\"\n (click)=\"col.field ? toggleSort(col.field, col.sortable !== false) : null\"\n (keydown.enter)=\"col.field ? toggleSort(col.field, col.sortable !== false) : null\"\n (keydown.space)=\"$event.preventDefault(); col.field ? toggleSort(col.field, col.sortable !== false) : null\"\n [class.sdc-table-sortable]=\"col.sortable !== false\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\"\n [attr.aria-sort]=\"getSortAriaAttribute(col)\"\n [attr.tabindex]=\"col.sortable !== false ? 0 : null\"\n [attr.aria-label]=\"\n col.sortable !== false\n ? (\n (col.header | translate)\n + ' - '\n + ('platform.datacore.accessibility.sortable_column' | translate)\n )\n : (col.header | translate)\n \"\n >\n <div class=\"sdc-table-th-inner\" [class.sdc-table-sortable]=\"col.sortable !== false\">\n @switch (col.type) {\n @case ('checkbox-selection') {\n <span class=\"sdc-table-th-label\" aria-hidden=\"true\">{{ col.header | translate }}</span>\n }\n @default {\n <span class=\"sdc-table-th-label\" aria-hidden=\"true\">{{ col.header | translate }}</span>\n @if (col.sortable !== false) {\n <span\n class=\"sdc-table-sort-icons sdc-table-sort-overlay\"\n aria-hidden=\"true\"\n >\n <ng-container\n [ngTemplateOutlet]=\"sortIconsTpl\"\n [ngTemplateOutletContext]=\"{ col: col }\"\n ></ng-container>\n </span>\n }\n }\n }\n </div>\n\n @if (col.type === 'checkbox-selection' && (cellCfg('checkbox').selectAll ?? true)) {\n <span\n class=\"sdc-table-th-center\"\n >\n <input\n type=\"checkbox\"\n [id]=\"'select-all-checkbox'\"\n [checked]=\"isPageFullySelected()\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleSelectPage(getCheckedValue($event))\"\n (keydown.space)=\"$event.preventDefault(); toggleSelectPage(!isPageFullySelected())\"\n [attr.aria-label]=\"'platform.datacore.accessibility.select_all_rows' | translate\"\n [attr.aria-checked]=\"isPageFullySelected()\"\n />\n <label for=\"select-all-checkbox\" class=\"sr-only\">\n {{ 'platform.datacore.accessibility.select_all_rows' | translate }}\n </label>\n </span>\n }\n </th>\n }\n </tr>\n </thead>\n\n <tbody>\n @if (showInitialLoading()) {\n @for (rowIndex of initialLoadingRows(); track rowIndex; let r = $index) {\n <tr class=\"sdc-table-initial-loading-row\" role=\"row\" [attr.aria-rowindex]=\"r + 1\" aria-hidden=\"true\">\n @for (col of cols; track $index) {\n <td\n class=\"sdc-table-td sdc-table-tdc sdc-table-td--initial-loading\"\n [class.sdc-table-td-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-td-currency]=\"col.type === 'currency'\"\n [class.sdc-table-td-button]=\"col.type === 'button'\"\n [class.sdc-table-td-actions]=\"col.type === 'actions'\"\n [ngClass]=\"columnAlignClass(col)\"\n [attr.data-title]=\"col.header | translate\"\n role=\"cell\"\n >\n <div class=\"sdc-table-td-val sdc-table-td-val--initial-loading\"></div>\n </td>\n }\n </tr>\n }\n } @else {\n @for (row of pageData(); track $index; let r = $index) {\n <tr role=\"row\" [attr.aria-rowindex]=\"r + 1\">\n @for (col of cols; track $index) {\n @if (isMobile) {\n <div class=\"sdc-table-td-mobile\">\n <ng-container [ngTemplateOutlet]=\"sortIconsTpl\" [ngTemplateOutletContext]=\"{ col: col }\"></ng-container>\n <td\n class=\"sdc-table-td sdc-table-tdc sdc-table-mobile-td\"\n [class.sdc-table-td-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-td-currency]=\"col.type === 'currency'\"\n [class.sdc-table-td-button]=\"col.type === 'button'\"\n [class.sdc-table-td-actions]=\"col.type === 'actions'\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\"\n [ngClass]=\"columnAlignClass(col)\"\n [attr.data-title]=\"col.header | translate\"\n role=\"cell\"\n [attr.tabindex]=\"col.sortable !== false ? 0 : null\"\n (click)=\"col.field ? toggleSort(col.field, col.sortable !== false) : null\"\n (keydown.enter)=\"col.field ? toggleSort(col.field, col.sortable !== false) : null\"\n (keydown.space)=\"$event.preventDefault(); col.field ? toggleSort(col.field, col.sortable !== false) : null\"\n >\n <div class=\"sdc-table-td-val\">\n <ng-container\n [ngTemplateOutlet]=\"cellTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: row, col: col }\"\n ></ng-container>\n </div>\n </td>\n </div>\n } @else {\n <td\n class=\"sdc-table-td sdc-table-tdc\"\n [class.sdc-table-td-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-td-currency]=\"col.type === 'currency'\"\n [class.sdc-table-td-button]=\"col.type === 'button'\"\n [class.sdc-table-td-actions]=\"col.type === 'actions'\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\"\n [ngClass]=\"columnAlignClass(col)\"\n [attr.data-title]=\"col.header | translate\"\n role=\"cell\"\n >\n <div class=\"sdc-table-td-val\">\n <ng-container [ngTemplateOutlet]=\"cellTpl\" [ngTemplateOutletContext]=\"{ $implicit: row, col: col }\"></ng-container>\n </div>\n </td>\n }\n\n }\n </tr>\n }\n }\n </tbody>\n </table>\n\n @if (!isLoading && options().empty?.show !== false && totalRecords() === 0) {\n <sdc-empty-state\n id=\"my-empty-state\"\n iconClass=\"fa fa-inbox\"\n [title]=\"emptyTitle()\"\n [description]=\"emptyText()\"\n class=\"sdc-table-empty-state\"\n [style.min-height.px]=\"emptyBodyHeightPx()\"\n >\n </sdc-empty-state>\n }\n\n @if (showPaginator()) {\n <div class=\"sdc-table-paginator\">\n <sdc-paginator\n [first]=\"first()\"\n [rows]=\"rows()\"\n [totalRecords]=\"totalRecords()\"\n [rowsPerPageOptions]=\"isMobile ? [] : rowsPerPageOptions()\"\n [isMobile]=\"isMobile\"\n [totalRecordsLabel]=\"totalRecordsLabel()\"\n (pageChange)=\"onPageChange($event)\"\n ></sdc-paginator>\n </div>\n }\n </div>\n </sdc-loading-state>\n\n <ng-template #cellTpl let-row let-col=\"col\">\n @switch (col.type) {\n @case ('checkbox-selection') {\n @if (cellCfg('checkbox'); as checkboxOptions) {\n <div class=\"sdc-table-checkbox\">\n <input\n type=\"checkbox\"\n [id]=\"getRowCheckboxId(row)\"\n [checked]=\"isRowSelected(row)\"\n (change)=\"onToggleRow(row, getCheckedValue($event))\"\n [attr.aria-label]=\"\n 'platform.datacore.accessibility.select_row'\n | translate: { name: (getRowCheckboxLabel(row) | translate) }\n \"\n [attr.aria-checked]=\"isRowSelected(row)\"\n />\n <label [attr.for]=\"getRowCheckboxId(row)\" class=\"sr-only\">\n {{\n 'platform.datacore.accessibility.select_row'\n | translate: { name: (getRowCheckboxLabel(row) | translate) }\n }}\n </label>\n </div>\n }\n }\n\n @case ('date') {\n {{ formatDate(_(row, col.field), col.format || 'shortDate') }}\n }\n\n @case ('strong') {\n <div class=\"sdc-table-strong-label\">{{ cellTextValue(row, col.field) | translate }}</div>\n }\n\n @case ('code') {\n <code class=\"sdc-table-code-label\">{{ _(row, col.field) }}</code>\n }\n\n @case ('currency') {\n {{ formatCurrency(_(row, col.field), col.format || 'BRL') }}\n }\n\n @case ('tag') {\n @if (cellCfg('tag'); as tagOptions) {\n <div class=\"sdc-table-tags\">\n @for (tag of tagsOf(row, col); track $index) {\n <span\n class=\"sdc-table-tag\"\n [class.sdc-tag--enabled]=\"isEnabledTag(tag)\"\n [class.sdc-tag--disabled]=\"isDisabledTag(tag)\"\n [ngStyle]=\"getTagStyles(tag, tagOptions)\"\n [attr.title]=\"tagOptions.tooltip ? (tagOptions.tooltip | translate) : null\"\n >\n @if (tagOptions.icon) {\n <i [class]=\"tagOptions.icon\"></i>\n }\n {{ tag | translate }}\n </span>\n }\n </div>\n }\n }\n\n @case ('button') {\n @if (cellCfg('button'); as buttonOptions) {\n <div class=\"sdc-table-button\">\n <sdc-button\n class=\"sdc-table-action-button\"\n [size]=\"buttonOptions.size ?? 'default'\"\n [priority]=\"buttonOptions.priority || 'primary'\"\n [icon]=\"buttonOptions.icon\"\n [label]=\"buttonOptions.label ?? ''\"\n [disabled]=\"buttonOptions.disabled ?? false\"\n [title]=\"buttonOptions.tooltip\"\n [attr.size]=\"buttonOptions.size\"\n [attr.priority]=\"buttonOptions.priority || 'primary'\"\n [attr.severity]=\"buttonOptions.priority || 'primary'\"\n [attr.icon]=\"buttonOptions.icon\"\n [attr.label]=\"buttonOptions.label\"\n [attr.disabled]=\"buttonOptions.disabled ? '' : null\"\n [attr.title]=\"buttonOptions.tooltip || null\"\n [attr.aria-label]=\"\n (\n (buttonOptions.label || buttonOptions.tooltip || 'platform.datacore.accessibility.action_button')\n | translate\n )\n + ' - '\n + (getRowCheckboxLabel(row) | translate)\n \"\n [attr.data-key]=\"buttonKey(row, col, buttonOptions)\"\n (click)=\"buttonOptions.disabled ? null : onButtonClick(row, col)\"\n (keydown.enter)=\"buttonOptions.disabled ? null : onButtonClick(row, col)\"\n (keydown.space)=\"$event.preventDefault(); buttonOptions.disabled ? null : onButtonClick(row, col)\"\n >\n </sdc-button>\n </div>\n }\n }\n\n @case ('actions') {\n @if (cellCfg('actions'); as actionsOpt) {\n <div\n class=\"sdc-table-actions\"\n [class.sdc-table-actions--open]=\"isActionsMenuOpen(row, col)\"\n >\n <button\n #actionsTrigger\n type=\"button\"\n class=\"sdc-table-actions-trigger\"\n [class.sdc-table-actions-trigger--open]=\"isActionsMenuOpen(row, col)\"\n [attr.aria-label]=\"\n ((actionsOpt.buttonLabel || 'platform.datacore.accessibility.actions_menu') | translate)\n + ' - '\n + (getRowCheckboxLabel(row) | translate)\n \"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-expanded]=\"isActionsMenuOpen(row, col)\"\n (click)=\"toggleActionsMenu($event, row, col, actionsTrigger)\"\n >\n <span class=\"sdc-table-actions-trigger__label\">\n {{ (actionsOpt.buttonLabel || 'platform.datacore.accessibility.actions_menu') | translate }}\n </span>\n <i class=\"fas fa-chevron-down sdc-table-actions-trigger__icon\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n }\n\n @case ('icon-title') {\n @if (cellCfg('icon-title'); as iconTitleOptions) {\n <div class=\"sdc-table-icon-title\">\n <i [class]=\"_(row, iconTitleOptions.iconField)\" aria-hidden=\"true\"></i>\n <span>{{ cellTextValue(row, col.field) | translate }}</span>\n </div>\n }\n }\n\n @default {\n {{ cellTextValue(row, col.field) | translate }}\n }\n }\n </ng-template>\n </section>\n @if (openMenuState(); as menu) {\n <div\n class=\"sdc-actions-menu sdc-actions-menu--portal\"\n [style.top.px]=\"menu.top\"\n [style.left.px]=\"menu.left\"\n [style.min-width.px]=\"menu.width\"\n role=\"menu\"\n (click)=\"$event.stopPropagation()\"\n >\n @for (item of menu.items; track item.key + '-' + $index) {\n <button\n type=\"button\"\n class=\"sdc-actions-item\"\n [disabled]=\"item.disabled\"\n [class.sdc-actions-item--disabled]=\"item.disabled\"\n [attr.aria-disabled]=\"item.disabled\"\n (click)=\"onPortalActionClick($event, item)\"\n >\n <span class=\"sdc-actions-item__content\">\n @if (item.icon) {\n <i [class]=\"item.icon\" aria-hidden=\"true\"></i>\n }\n <span>{{ item.label | translate }}</span>\n </span>\n </button>\n }\n </div>\n }\n\n <ng-template #sortIconsTpl let-col=\"col\">\n @if (col.sortable !== false && col.type !== 'checkbox-selection') {\n <span\n class=\"sdc-table-sort-indicator\"\n aria-hidden=\"true\"\n >\n @if (sortField() !== col.field) {\n <i class=\"fas fa-sort-alt sdc-table-sort-neutral\" aria-hidden=\"true\"></i>\n }\n @if (sortField() === col.field && sortOrder() === 1) {\n <i class=\"fas fa-sort-amount-up-alt sdc-table-sort-active\" aria-hidden=\"true\"></i>\n }\n @if (sortField() === col.field && sortOrder() === -1) {\n <i class=\"fas fa-sort-amount-down sdc-table-sort-active\" aria-hidden=\"true\"></i>\n }\n </span>\n }\n\n @if (col.sortable === false || col.type === 'checkbox-selection') {\n <span\n class=\"sdc-table-sort-indicator sdc-table-sort-indicator-placeholder\"\n aria-hidden=\"true\"\n ></span>\n }\n </ng-template>\n", styles: [":host{display:block;width:100%;box-sizing:border-box;--sdc-tag-width: 7.5rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}@media (max-width: 750px){.sdc-table-tag{font-size:.8125rem;padding:.35rem .75rem}.sdc-table-sort-indicator-placeholder{display:none!important;width:0!important;height:0!important;min-width:0!important}.sdc-table-paginator{justify-content:center!important;border-top:1px solid var(--sdc-table-border-gray)}.sdc-table-sort-indicator{gap:.15rem;min-width:1.2rem;position:absolute;left:21px}.sdc-table-sort-indicator i{font-size:.75rem;width:.65rem}.sdc-table-td-val{background:none!important;height:100%;padding:1rem;justify-content:end;border-left:1px solid var(--sdc-formfield-default-border);display:flex;overflow:visible;overflow-wrap:anywhere;word-break:break-word;white-space:normal;min-width:0}.sdc-table-strong-label,.sdc-table-code-label{white-space:normal;overflow:visible;text-overflow:clip;overflow-wrap:anywhere;word-break:break-word}.sdc-table-td-mobile{border-top:1px solid var(--sdc-formfield-default-border);display:flex;align-items:center;padding-left:10px}.sdc-table.sdc-table-stack thead{display:none}.sdc-table.sdc-table-stack .sdc-table-grid,.sdc-table.sdc-table-stack .sdc-table-grid tbody,.sdc-table.sdc-table-stack .sdc-table-grid tr,.sdc-table.sdc-table-stack .sdc-table-grid td{display:block;width:100%;box-sizing:border-box}.sdc-table.sdc-table-stack .sdc-table-grid tr{border-top:1px solid var(--sdc-formfield-default-border);background:var(--sdc-table-bg-card)}.sdc-table.sdc-table-stack .sdc-table-td{position:relative;padding:0;border-bottom:1px solid var(--sdc-table-border-gray);display:grid!important;grid-template-columns:45% 55%;align-items:center;gap:var(--sdc-table-gap-th-inner)}.sdc-table.sdc-table-stack .sdc-table-td:before{content:attr(data-title);font-weight:600;padding:var(--sdc-table-padding-cell) .5rem var(--sdc-table-padding-cell) var(--sdc-table-padding-cell);border-right:0 solid var(--sdc-formfield-default-border);word-break:break-word}.sdc-table.sdc-table-stack .sdc-table-td>*{grid-column:2;min-width:0;max-width:100%}.sdc-table.sdc-table-stack .sdc-table-grid tr .sdc-table-td:last-child{border-bottom:0}.sdc-table.sdc-table-stack .sdc-table-sort-icons{flex-direction:column;line-height:.8}.sdc-table.sdc-table-stack .sdc-table-td--initial-loading{grid-template-columns:100%;min-height:3.75rem}.sdc-table.sdc-table-stack .sdc-table-td--initial-loading:before{content:\"\";padding:0}.sdc-table.sdc-table-stack .sdc-table-td--initial-loading>*{grid-column:1}.sdc-table.sdc-table-stack .sdc-table-td--initial-loading .sdc-table-td-val--initial-loading{border-left:0;justify-content:flex-start;padding:0;min-height:3.75rem}.sdc-table.sdc-table-stack .sdc-actions-menu--portal{min-width:7.5rem!important}.sdc-table.sdc-table-stack .sdc-table-actions-trigger{min-width:4.375rem;height:1.75rem;padding:0 .625rem;font-size:.75rem}::ng-deep .p-paginator .p-paginator-next{border-width:1px 1px 1px 1px!important}}@media (min-width: 750px){.sdc-table-tag{font-size:.875rem;padding:.35rem .875rem}.sdc-table-sort-indicator-placeholder{width:1.4rem;height:1rem;display:inline-block}.sdc-table-grid thead th+th{border-left:1px solid var(--sdc-formfield-default-border)}thead th.sdc-table-th-checkbox,tbody td.sdc-table-td-checkbox{width:84px;min-width:84px;max-width:84px}thead th.sdc-table-th-currency,tbody td.sdc-table-td-currency{width:132px;min-width:132px}thead th.sdc-table-th-button,tbody td.sdc-table-td-button{width:154px;min-width:154px}thead th.sdc-table-th-actions,tbody td.sdc-table-td-actions{width:124px;min-width:124px}}.sdc-table{width:100%;box-sizing:border-box;overflow:visible;background:var(--sdc-table-bg-card)}.sdc-table .sdc-table-strong-label{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;max-width:100%;display:block}.sdc-table .sdc-table-code-label{color:var(--sdc-tab-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;display:block;max-width:100%}.sdc-table-shell{display:block;--sdc-table-body-height: 220px;overflow:visible}.sdc-table-loading-wrap{display:block;width:100%;overflow:visible}.sdc-table-caption{width:100%;justify-content:end;display:flex;padding:.75rem 0}.sdc-table-grid{width:100%;border-collapse:collapse;table-layout:fixed}thead th{padding:var(--sdc-table-padding-cell);background:var(--sdc-table-bg-card);border-bottom:1px solid var(--sdc-formfield-default-border);-webkit-user-select:none;user-select:none;transition:background var(--sdc-table-transition-fast),border var(--sdc-table-transition-fast);min-height:44px;position:relative;overflow:hidden;text-align:left}thead th.sdc-table-sortable{cursor:pointer}thead th.sdc-table-sortable:hover{background:var(--sdc-table-th-hover-bg)}thead th.sdc-table-sortable:focus{outline:2px solid var(--sdc-tab-primary, #007bff);outline-offset:-2px;box-shadow:inset 0 0 0 3px #007bff26;position:relative;z-index:1}thead th.sdc-table-sortable:focus-visible{outline:2px solid var(--sdc-tab-primary, #007bff);outline-offset:-2px;box-shadow:inset 0 0 0 3px #007bff40}thead th.sdc-table-is-selected{background:var(--sdc-table-th-selected-bg)!important}.sdc-table-sort-neutral{color:var(--sdc-table-sort-neutral)}.sdc-table-sort-active{color:var(--sdc-table-sort-active)}.sdc-table-th-inner{display:flex;align-items:center;gap:var(--sdc-table-gap-th-inner);width:100%;min-width:0;overflow:hidden}.sdc-table-sort-icons i{font-size:inherit;transition:color var(--sdc-table-transition-fast),transform var(--sdc-table-transition-fast),opacity var(--sdc-table-transition-fast)}tbody td{padding:.5rem var(--sdc-table-padding-cell);border-bottom:1px solid var(--sdc-table-border-gray);vertical-align:middle;overflow:visible}.sdc-table-initial-loading-row{background:var(--sdc-table-bg-card)}.sdc-table-td--initial-loading{height:3.625rem}.sdc-table-td-val--initial-loading{min-height:1.5rem}.sdc-table-tags{display:flex;flex-wrap:wrap;gap:.5rem}.sdc-table-tag{display:inline-flex;align-items:center;justify-content:center;gap:.35rem;width:fit-content;min-width:fit-content;max-width:100%;border-radius:9999px;font-weight:500;line-height:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid currentColor;box-sizing:border-box}.sdc-table-tag i{font-size:.75rem;color:inherit;flex:0 0 auto}.sdc-tag--enabled{background:#dcfce7;color:#16a34a;border-color:#16a34a}.sdc-tag--disabled{background:#fee2e2;color:#ef4444;border-color:#ef4444}.sdc-table-sort-indicator{display:inline-flex;align-items:center;justify-content:center;gap:.25rem;min-width:1.7rem;flex:0 0 auto}.sdc-table-sort-indicator i{width:.75rem;text-align:center}.sdc-table-sort-overlay{position:relative;margin-left:auto}.sdc-table-paginator{padding:.5rem 0;border-top:0}.sdc-table-button{display:flex;align-items:center;justify-content:center;min-height:44px;width:100%;min-width:0}.sdc-table-button ::ng-deep sdc-button,.sdc-table-button ::ng-deep button{min-height:unset;min-width:unset;max-width:100%}.sdc-table-action-button{width:100%;max-width:100%;min-width:0}.sdc-table-icon-title{display:flex;align-items:center;gap:8px;min-width:0}.sdc-table-icon-title i{flex-shrink:0}.sdc-table-icon-title span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.sdc-table-checkbox{display:flex;align-items:center;justify-content:center}.sdc-table-checkbox input[type=checkbox]{cursor:pointer}.sdc-table-empty-state{display:flex;align-items:center;justify-content:center;min-height:var(--sdc-table-body-height);padding:0}.sdc-table--loading .sdc-table-shell{pointer-events:none;-webkit-user-select:none;user-select:none}thead th.sdc-table-th-checkbox .sdc-table-th-center{position:absolute;inset:0;display:flex;align-items:center;justify-content:flex-end;padding-right:10px;pointer-events:none}thead th.sdc-table-th-checkbox .sdc-table-th-center input{pointer-events:auto}thead th.sdc-table-th-checkbox .sdc-table-th-inner{padding-right:28px}thead .sdc-table-th-label,thead th.sdc-table-th-checkbox .sdc-table-th-label{color:#333!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;display:block;flex:1 1 auto}.sdc-table-td-val{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.sdc-table-td-val>*{min-width:0;max-width:100%}.sdc-table-actions{position:relative;display:inline-flex;align-items:center;justify-content:center;width:100%;min-width:0}.sdc-table-actions-trigger{appearance:none;border:1px solid #c9ced6;background:#fff;border-radius:999px;min-width:4.875rem;height:2rem;padding:0 .75rem;display:inline-flex;align-items:center;justify-content:center;gap:.375rem;font:inherit;font-size:.8125rem;color:#374151;cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease,background-color .15s ease}.sdc-table-actions-trigger:hover{background:#f9fafb}.sdc-table-actions-trigger:focus-visible,.sdc-table-actions-trigger--open{outline:none;border-color:#9ca3af;box-shadow:0 0 0 2px #1118270a}.sdc-table-actions-trigger__label{line-height:1;white-space:nowrap}.sdc-table-actions-trigger__icon{font-size:.625rem;line-height:1;color:#6b7280}.sdc-actions-menu{background:#fff;border:1px solid #d1d5db;border-radius:0;box-shadow:0 1px 2px #0f172a14;padding:0}.sdc-actions-menu--portal{position:fixed;z-index:2147483647}.sdc-actions-item{width:100%;display:flex;align-items:stretch;justify-content:flex-start;border:0;border-bottom:1px solid #e5e7eb;background:#fff;padding:0;text-align:left;cursor:pointer;font:inherit;color:#374151;min-height:2.25rem;transition:background-color .15s ease,color .15s ease}.sdc-actions-item:last-child{border-bottom:0}.sdc-actions-item__content{display:inline-flex;align-items:center;gap:.5rem;padding:.625rem .875rem;width:100%;font-size:.8125rem;line-height:1.2}.sdc-actions-item:hover:not(:disabled),.sdc-actions-item:focus-visible:not(:disabled){background:#f9fafb;outline:none}.sdc-actions-item:disabled,.sdc-actions-item.sdc-actions-item--disabled,.sdc-actions-item[data-disabled=true]{color:#9ca3af;cursor:not-allowed;background:#fff;pointer-events:none}.sdc-actions-item:disabled .sdc-actions-item__content,.sdc-actions-item.sdc-actions-item--disabled .sdc-actions-item__content,.sdc-actions-item[data-disabled=true] .sdc-actions-item__content{opacity:.55}.sdc-actions-item i{width:.875rem;text-align:center;flex:0 0 .875rem;font-size:.8125rem}.sdc-table-td-align-left{text-align:left}.sdc-table-td-align-left .sdc-table-td-val,.sdc-table-td-align-left .sdc-table-tags,.sdc-table-td-align-left .sdc-table-button,.sdc-table-td-align-left .sdc-table-icon-title,.sdc-table-td-align-left .sdc-table-checkbox,.sdc-table-td-align-left .sdc-table-actions{justify-content:flex-start;text-align:left}.sdc-table-td-align-center{text-align:center}.sdc-table-td-align-center .sdc-table-td-val,.sdc-table-td-align-center .sdc-table-tags,.sdc-table-td-align-center .sdc-table-button,.sdc-table-td-align-center .sdc-table-icon-title,.sdc-table-td-align-center .sdc-table-checkbox,.sdc-table-td-align-center .sdc-table-actions{justify-content:center;text-align:center}.sdc-table-td-align-right{text-align:right}.sdc-table-td-align-right .sdc-table-td-val,.sdc-table-td-align-right .sdc-table-tags,.sdc-table-td-align-right .sdc-table-button,.sdc-table-td-align-right .sdc-table-icon-title,.sdc-table-td-align-right .sdc-table-checkbox,.sdc-table-td-align-right .sdc-table-actions{justify-content:flex-end;text-align:right}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: SearchboxComponent, selector: "sdc-searchbox", inputs: ["triggerMode", "debounceTimeMs", "ariaLabel", "inputRole", "inputAriaControls", "inputAriaDescribedBy", "inputAriaActiveDescendant", "inputAriaHaspopup", "inputAriaExpanded", "inputAutocomplete", "submitOnEnter", "clearOnEscape"], outputs: ["debouncedValueChange", "onSearch", "onClear"] }, { kind: "component", type: PaginatorComponent, selector: "sdc-paginator", inputs: ["first", "rows", "totalRecords", "rowsPerPageOptions", "showRowsPerPageSelector", "isMobile", "totalRecordsLabel"], outputs: ["pageChange"] }, { kind: "component", type: ButtonComponent, selector: "sdc-button", inputs: ["id", "label", "ariaLabel", "disabled", "width", "priority", "size", "type", "icon", "rightIcon", "auxiliary", "caret", "tooltip", "animation", "slide", "styleClass", "badge", "menuOptions", "menuContext", "model"], outputs: ["clicked"] }, { kind: "component", type: LoadingStateComponent, selector: "sdc-loading-state", inputs: ["indicator", "id", "blockWindow", "blockDelayMs", "unblockDelayMs", "loading"] }, { kind: "component", type: EmptyStateComponent, selector: "sdc-empty-state", inputs: ["id", "title", "variant", "titleParams", "iconClass", "description", "descriptionParams", "showPrimaryAction", "showSecondaryAction", "primaryActionLabel", "primaryActionLabelParams", "secondaryActionLabel", "secondaryActionLabelParams", "primaryModel"], outputs: ["primaryAction", "secondaryAction"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
612
612
|
}
|
|
613
613
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TableComponent, decorators: [{
|
|
614
614
|
type: Component,
|
|
@@ -620,7 +620,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
620
620
|
LoadingStateComponent,
|
|
621
621
|
EmptyStateComponent,
|
|
622
622
|
TranslateModule
|
|
623
|
-
], encapsulation: ViewEncapsulation.Emulated, changeDetection: ChangeDetectionStrategy.OnPush, template: "<section\n class=\"sdc-table\"\n [class.sdc-table-stack]=\"isMobile\"\n [class.sdc-table-filtered]=\"!!globalFilter().trim()\"\n [class.sdc-table--loading]=\"isLoading\"\n [class.sdc-table--initial-loading]=\"showInitialLoading()\"\n>\n <sdc-loading-state\n class=\"sdc-table-loading-wrap\"\n [loading]=\"isLoading\"\n [blockWindow]=\"false\"\n [blockDelayMs]=\"0\"\n [indicator]=\"'dots'\"\n >\n <div class=\"sdc-table-shell\" [style.--sdc-table-body-height.px]=\"bodyViewportHeightPx()\">\n <div class=\"sdc-table-caption\" *ngIf=\"showSearch()\">\n <div [style.width]=\"isMobile ? '100%' : '20%'\">\n <sdc-searchbox\n [disabled]=\"isLoading\"\n [placeholder]=\"searchPlaceholder()\"\n [triggerMode]=\"triggerMode()\"\n (onSearch)=\"onSearchTerm($event)\"\n (onClear)=\"onClearSearch()\"\n [attr.aria-label]=\"\n 'platform.datacore.accessibility.search_field' | translate\n \"\n />\n </div>\n </div>\n\n <table\n class=\"sdc-table-grid\"\n role=\"table\"\n [attr.aria-label]=\"tableAriaLabelKey() | translate\"\n [attr.aria-rowcount]=\"totalRecords()\"\n [attr.aria-busy]=\"isLoading\"\n >\n <thead>\n <tr role=\"row\">\n @for (col of cols; track $index) {\n <th\n scope=\"col\"\n role=\"columnheader\"\n [class.sdc-table-th-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-th-currency]=\"col.type === 'currency'\"\n [class.sdc-table-th-button]=\"col.type === 'button'\"\n [class.sdc-table-th-actions]=\"col.type === 'actions'\"\n (click)=\"col.field ? toggleSort(col.field, col.sortable !== false) : null\"\n (keydown.enter)=\"col.field ? toggleSort(col.field, col.sortable !== false) : null\"\n (keydown.space)=\"$event.preventDefault(); col.field ? toggleSort(col.field, col.sortable !== false) : null\"\n [class.sdc-table-sortable]=\"col.sortable !== false\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\"\n [attr.aria-sort]=\"getSortAriaAttribute(col)\"\n [attr.tabindex]=\"col.sortable !== false ? 0 : null\"\n [attr.aria-label]=\"\n col.sortable !== false\n ? (\n (col.header | translate)\n + ' - '\n + ('platform.datacore.accessibility.sortable_column' | translate)\n )\n : (col.header | translate)\n \"\n >\n <div class=\"sdc-table-th-inner\" [class.sdc-table-sortable]=\"col.sortable !== false\">\n @switch (col.type) {\n @case ('checkbox-selection') {\n <span class=\"sdc-table-th-label\" aria-hidden=\"true\">{{ col.header | translate }}</span>\n }\n @default {\n <span class=\"sdc-table-th-label\" aria-hidden=\"true\">{{ col.header | translate }}</span>\n <span\n class=\"sdc-table-sort-icons sdc-table-sort-overlay\"\n *ngIf=\"col.sortable !== false\"\n aria-hidden=\"true\"\n >\n <ng-container\n [ngTemplateOutlet]=\"sortIconsTpl\"\n [ngTemplateOutletContext]=\"{ col: col }\"\n ></ng-container>\n </span>\n }\n }\n </div>\n\n <span\n class=\"sdc-table-th-center\"\n *ngIf=\"col.type === 'checkbox-selection' && (cellCfg('checkbox').selectAll ?? true)\"\n >\n <input\n type=\"checkbox\"\n [id]=\"'select-all-checkbox'\"\n [checked]=\"isPageFullySelected()\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleSelectPage(getCheckedValue($event))\"\n (keydown.space)=\"$event.preventDefault(); toggleSelectPage(!isPageFullySelected())\"\n [attr.aria-label]=\"'platform.datacore.accessibility.select_all_rows' | translate\"\n [attr.aria-checked]=\"isPageFullySelected()\"\n />\n <label for=\"select-all-checkbox\" class=\"sr-only\">\n {{ 'platform.datacore.accessibility.select_all_rows' | translate }}\n </label>\n </span>\n </th>\n }\n </tr>\n </thead>\n\n <tbody>\n @if (showInitialLoading()) {\n @for (rowIndex of initialLoadingRows(); track rowIndex; let r = $index) {\n <tr class=\"sdc-table-initial-loading-row\" role=\"row\" [attr.aria-rowindex]=\"r + 1\" aria-hidden=\"true\">\n @for (col of cols; track $index) {\n <td\n class=\"sdc-table-td sdc-table-tdc sdc-table-td--initial-loading\"\n [class.sdc-table-td-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-td-currency]=\"col.type === 'currency'\"\n [class.sdc-table-td-button]=\"col.type === 'button'\"\n [class.sdc-table-td-actions]=\"col.type === 'actions'\"\n [ngClass]=\"columnAlignClass(col)\"\n [attr.data-title]=\"col.header | translate\"\n role=\"cell\"\n >\n <div class=\"sdc-table-td-val sdc-table-td-val--initial-loading\"></div>\n </td>\n }\n </tr>\n }\n } @else {\n @for (row of pageData(); track $index; let r = $index) {\n <tr role=\"row\" [attr.aria-rowindex]=\"r + 1\">\n @for (col of cols; track $index) {\n <ng-container *ngIf=\"isMobile; else desktopContent\">\n <div class=\"sdc-table-td-mobile\">\n <ng-container [ngTemplateOutlet]=\"sortIconsTpl\" [ngTemplateOutletContext]=\"{ col: col }\"></ng-container>\n <td\n class=\"sdc-table-td sdc-table-tdc sdc-table-mobile-td\"\n [class.sdc-table-td-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-td-currency]=\"col.type === 'currency'\"\n [class.sdc-table-td-button]=\"col.type === 'button'\"\n [class.sdc-table-td-actions]=\"col.type === 'actions'\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\"\n [ngClass]=\"columnAlignClass(col)\"\n [attr.data-title]=\"col.header | translate\"\n role=\"cell\"\n [attr.tabindex]=\"col.sortable !== false ? 0 : null\"\n (click)=\"col.field ? toggleSort(col.field, col.sortable !== false) : null\"\n (keydown.enter)=\"col.field ? toggleSort(col.field, col.sortable !== false) : null\"\n (keydown.space)=\"$event.preventDefault(); col.field ? toggleSort(col.field, col.sortable !== false) : null\"\n >\n <div class=\"sdc-table-td-val\">\n <ng-container\n [ngTemplateOutlet]=\"cellTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: row, col: col }\"\n ></ng-container>\n </div>\n </td>\n </div>\n </ng-container>\n\n <ng-template #desktopContent>\n <td\n class=\"sdc-table-td sdc-table-tdc\"\n [class.sdc-table-td-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-td-currency]=\"col.type === 'currency'\"\n [class.sdc-table-td-button]=\"col.type === 'button'\"\n [class.sdc-table-td-actions]=\"col.type === 'actions'\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\"\n [ngClass]=\"columnAlignClass(col)\"\n [attr.data-title]=\"col.header | translate\"\n role=\"cell\"\n >\n <div class=\"sdc-table-td-val\">\n <ng-container [ngTemplateOutlet]=\"cellTpl\" [ngTemplateOutletContext]=\"{ $implicit: row, col: col }\"></ng-container>\n </div>\n </td>\n </ng-template>\n }\n </tr>\n }\n }\n </tbody>\n </table>\n\n <sdc-empty-state\n *ngIf=\"!isLoading && options().empty?.show !== false && totalRecords() === 0\"\n id=\"my-empty-state\"\n iconClass=\"fa fa-inbox\"\n [title]=\"emptyTitle()\"\n [description]=\"emptyText()\"\n class=\"sdc-table-empty-state\"\n [style.min-height.px]=\"emptyBodyHeightPx()\"\n >\n </sdc-empty-state>\n\n <div class=\"sdc-table-paginator\" *ngIf=\"showPaginator()\">\n <sdc-paginator\n [first]=\"first()\"\n [rows]=\"rows()\"\n [totalRecords]=\"totalRecords()\"\n [rowsPerPageOptions]=\"isMobile ? [] : rowsPerPageOptions()\"\n [isMobile]=\"isMobile\"\n [totalRecordsLabel]=\"totalRecordsLabel()\"\n (pageChange)=\"onPageChange($event)\"\n ></sdc-paginator>\n </div>\n </div>\n </sdc-loading-state>\n\n <ng-template #cellTpl let-row let-col=\"col\">\n @switch (col.type) {\n @case ('checkbox-selection') {\n <ng-container *ngIf=\"cellCfg('checkbox') as checkboxOptions\">\n <div class=\"sdc-table-checkbox\">\n <input\n type=\"checkbox\"\n [id]=\"getRowCheckboxId(row)\"\n [checked]=\"isRowSelected(row)\"\n (change)=\"onToggleRow(row, getCheckedValue($event))\"\n [attr.aria-label]=\"\n 'platform.datacore.accessibility.select_row'\n | translate: { name: (getRowCheckboxLabel(row) | translate) }\n \"\n [attr.aria-checked]=\"isRowSelected(row)\"\n />\n <label [attr.for]=\"getRowCheckboxId(row)\" class=\"sr-only\">\n {{\n 'platform.datacore.accessibility.select_row'\n | translate: { name: (getRowCheckboxLabel(row) | translate) }\n }}\n </label>\n </div>\n </ng-container>\n }\n\n @case ('date') {\n {{ formatDate(_(row, col.field), col.format || 'shortDate') }}\n }\n\n @case ('strong') {\n <div class=\"sdc-table-strong-label\">{{ cellTextValue(row, col.field) | translate }}</div>\n }\n\n @case ('code') {\n <code class=\"sdc-table-code-label\">{{ _(row, col.field) }}</code>\n }\n\n @case ('currency') {\n {{ formatCurrency(_(row, col.field), col.format || 'BRL') }}\n }\n\n @case ('tag') {\n <ng-container *ngIf=\"cellCfg('tag') as tagOptions\">\n <div class=\"sdc-table-tags\">\n @for (tag of tagsOf(row, col); track $index) {\n <span\n class=\"sdc-table-tag\"\n [class.sdc-tag--enabled]=\"isEnabledTag(tag)\"\n [class.sdc-tag--disabled]=\"isDisabledTag(tag)\"\n [ngStyle]=\"getTagStyles(tag, tagOptions)\"\n [attr.title]=\"tagOptions.tooltip ? (tagOptions.tooltip | translate) : null\"\n >\n <i *ngIf=\"tagOptions.icon\" [class]=\"tagOptions.icon\"></i>\n {{ tag | translate }}\n </span>\n }\n </div>\n </ng-container>\n }\n\n @case ('button') {\n <ng-container *ngIf=\"cellCfg('button') as buttonOptions\">\n <div class=\"sdc-table-button\">\n <sdc-button\n class=\"sdc-table-action-button\"\n [size]=\"buttonOptions.size ?? 'default'\"\n [priority]=\"buttonOptions.priority || 'primary'\"\n [icon]=\"buttonOptions.icon\"\n [label]=\"buttonOptions.label ?? ''\"\n [disabled]=\"buttonOptions.disabled ?? false\"\n [title]=\"buttonOptions.tooltip\"\n [attr.size]=\"buttonOptions.size\"\n [attr.priority]=\"buttonOptions.priority || 'primary'\"\n [attr.severity]=\"buttonOptions.priority || 'primary'\"\n [attr.icon]=\"buttonOptions.icon\"\n [attr.label]=\"buttonOptions.label\"\n [attr.disabled]=\"buttonOptions.disabled ? '' : null\"\n [attr.title]=\"buttonOptions.tooltip || null\"\n [attr.aria-label]=\"\n (\n (buttonOptions.label || buttonOptions.tooltip || 'platform.datacore.accessibility.action_button')\n | translate\n )\n + ' - '\n + (getRowCheckboxLabel(row) | translate)\n \"\n [attr.data-key]=\"buttonKey(row, col, buttonOptions)\"\n (click)=\"buttonOptions.disabled ? null : onButtonClick(row, col)\"\n (keydown.enter)=\"buttonOptions.disabled ? null : onButtonClick(row, col)\"\n (keydown.space)=\"$event.preventDefault(); buttonOptions.disabled ? null : onButtonClick(row, col)\"\n >\n </sdc-button>\n </div>\n </ng-container>\n }\n\n @case ('actions') {\n <ng-container *ngIf=\"cellCfg('actions') as actionsOpt\">\n <div\n class=\"sdc-table-actions\"\n [class.sdc-table-actions--open]=\"isActionsMenuOpen(row, col)\"\n >\n <button\n #actionsTrigger\n type=\"button\"\n class=\"sdc-table-actions-trigger\"\n [class.sdc-table-actions-trigger--open]=\"isActionsMenuOpen(row, col)\"\n [attr.aria-label]=\"\n ((actionsOpt.buttonLabel || 'platform.datacore.accessibility.actions_menu') | translate)\n + ' - '\n + (getRowCheckboxLabel(row) | translate)\n \"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-expanded]=\"isActionsMenuOpen(row, col)\"\n (click)=\"toggleActionsMenu($event, row, col, actionsTrigger)\"\n >\n <span class=\"sdc-table-actions-trigger__label\">\n {{ (actionsOpt.buttonLabel || 'platform.datacore.accessibility.actions_menu') | translate }}\n </span>\n <i class=\"fas fa-chevron-down sdc-table-actions-trigger__icon\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </ng-container>\n }\n\n @case ('icon-title') {\n <ng-container *ngIf=\"cellCfg('icon-title') as iconTitleOptions\">\n <div class=\"sdc-table-icon-title\">\n <i [class]=\"_(row, iconTitleOptions.iconField)\" aria-hidden=\"true\"></i>\n <span>{{ cellTextValue(row, col.field) | translate }}</span>\n </div>\n </ng-container>\n }\n\n @default {\n {{ cellTextValue(row, col.field) | translate }}\n }\n }\n </ng-template>\n</section>\n<div\n *ngIf=\"openMenuState() as menu\"\n class=\"sdc-actions-menu sdc-actions-menu--portal\"\n [style.top.px]=\"menu.top\"\n [style.left.px]=\"menu.left\"\n [style.min-width.px]=\"menu.width\"\n role=\"menu\"\n (click)=\"$event.stopPropagation()\"\n>\n <button\n type=\"button\"\n class=\"sdc-actions-item\"\n *ngFor=\"let item of menu.items\"\n [disabled]=\"item.disabled\"\n [class.sdc-actions-item--disabled]=\"item.disabled\"\n [attr.aria-disabled]=\"item.disabled\"\n (click)=\"onPortalActionClick($event, item)\"\n >\n <span class=\"sdc-actions-item__content\">\n <i *ngIf=\"item.icon\" [class]=\"item.icon\" aria-hidden=\"true\"></i>\n <span>{{ item.label | translate }}</span>\n </span>\n </button>\n</div>\n\n<ng-template #sortIconsTpl let-col=\"col\">\n <span\n *ngIf=\"col.sortable !== false && col.type !== 'checkbox-selection'\"\n class=\"sdc-table-sort-indicator\"\n aria-hidden=\"true\"\n >\n <i *ngIf=\"sortField() !== col.field\" class=\"fas fa-sort-alt sdc-table-sort-neutral\" aria-hidden=\"true\"></i>\n <i *ngIf=\"sortField() === col.field && sortOrder() === 1\" class=\"fas fa-sort-amount-up-alt sdc-table-sort-active\" aria-hidden=\"true\"></i>\n <i *ngIf=\"sortField() === col.field && sortOrder() === -1\" class=\"fas fa-sort-amount-down sdc-table-sort-active\" aria-hidden=\"true\"></i>\n </span>\n\n <span\n *ngIf=\"col.sortable === false || col.type === 'checkbox-selection'\"\n class=\"sdc-table-sort-indicator sdc-table-sort-indicator-placeholder\"\n aria-hidden=\"true\"\n ></span>\n</ng-template>\n", styles: [":host{display:block;width:100%;box-sizing:border-box;--sdc-tag-width: 7.5rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}@media (max-width: 750px){.sdc-table-tag{font-size:.8125rem;padding:.35rem .75rem}.sdc-table-sort-indicator-placeholder{display:none!important;width:0!important;height:0!important;min-width:0!important}.sdc-table-paginator{justify-content:center!important;border-top:1px solid var(--sdc-table-border-gray)}.sdc-table-sort-indicator{gap:.15rem;min-width:1.2rem;position:absolute;left:21px}.sdc-table-sort-indicator i{font-size:.75rem;width:.65rem}.sdc-table-td-val{background:none!important;height:100%;padding:1rem;justify-content:end;border-left:1px solid var(--sdc-formfield-default-border);display:flex;overflow:visible;overflow-wrap:anywhere;word-break:break-word;white-space:normal;min-width:0}.sdc-table-strong-label,.sdc-table-code-label{white-space:normal;overflow:visible;text-overflow:clip;overflow-wrap:anywhere;word-break:break-word}.sdc-table-td-mobile{border-top:1px solid var(--sdc-formfield-default-border);display:flex;align-items:center;padding-left:10px}.sdc-table.sdc-table-stack thead{display:none}.sdc-table.sdc-table-stack .sdc-table-grid,.sdc-table.sdc-table-stack .sdc-table-grid tbody,.sdc-table.sdc-table-stack .sdc-table-grid tr,.sdc-table.sdc-table-stack .sdc-table-grid td{display:block;width:100%;box-sizing:border-box}.sdc-table.sdc-table-stack .sdc-table-grid tr{border-top:1px solid var(--sdc-formfield-default-border);background:var(--sdc-table-bg-card)}.sdc-table.sdc-table-stack .sdc-table-td{position:relative;padding:0;border-bottom:1px solid var(--sdc-table-border-gray);display:grid!important;grid-template-columns:45% 55%;align-items:center;gap:var(--sdc-table-gap-th-inner)}.sdc-table.sdc-table-stack .sdc-table-td:before{content:attr(data-title);font-weight:600;padding:var(--sdc-table-padding-cell) .5rem var(--sdc-table-padding-cell) var(--sdc-table-padding-cell);border-right:0 solid var(--sdc-formfield-default-border);word-break:break-word}.sdc-table.sdc-table-stack .sdc-table-td>*{grid-column:2;min-width:0;max-width:100%}.sdc-table.sdc-table-stack .sdc-table-grid tr .sdc-table-td:last-child{border-bottom:0}.sdc-table.sdc-table-stack .sdc-table-sort-icons{flex-direction:column;line-height:.8}.sdc-table.sdc-table-stack .sdc-table-td--initial-loading{grid-template-columns:100%;min-height:3.75rem}.sdc-table.sdc-table-stack .sdc-table-td--initial-loading:before{content:\"\";padding:0}.sdc-table.sdc-table-stack .sdc-table-td--initial-loading>*{grid-column:1}.sdc-table.sdc-table-stack .sdc-table-td--initial-loading .sdc-table-td-val--initial-loading{border-left:0;justify-content:flex-start;padding:0;min-height:3.75rem}.sdc-table.sdc-table-stack .sdc-actions-menu--portal{min-width:7.5rem!important}.sdc-table.sdc-table-stack .sdc-table-actions-trigger{min-width:4.375rem;height:1.75rem;padding:0 .625rem;font-size:.75rem}::ng-deep .p-paginator .p-paginator-next{border-width:1px 1px 1px 1px!important}}@media (min-width: 750px){.sdc-table-tag{font-size:.875rem;padding:.35rem .875rem}.sdc-table-sort-indicator-placeholder{width:1.4rem;height:1rem;display:inline-block}.sdc-table-grid thead th+th{border-left:1px solid var(--sdc-formfield-default-border)}thead th.sdc-table-th-checkbox,tbody td.sdc-table-td-checkbox{width:84px;min-width:84px;max-width:84px}thead th.sdc-table-th-currency,tbody td.sdc-table-td-currency{width:132px;min-width:132px}thead th.sdc-table-th-button,tbody td.sdc-table-td-button{width:154px;min-width:154px}thead th.sdc-table-th-actions,tbody td.sdc-table-td-actions{width:124px;min-width:124px}}.sdc-table{width:100%;box-sizing:border-box;overflow:visible;background:var(--sdc-table-bg-card)}.sdc-table .sdc-table-strong-label{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;max-width:100%;display:block}.sdc-table .sdc-table-code-label{color:var(--sdc-tab-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;display:block;max-width:100%}.sdc-table-shell{display:block;--sdc-table-body-height: 220px;overflow:visible}.sdc-table-loading-wrap{display:block;width:100%;overflow:visible}.sdc-table-caption{width:100%;justify-content:end;display:flex;padding:.75rem 0}.sdc-table-grid{width:100%;border-collapse:collapse;table-layout:fixed}thead th{padding:var(--sdc-table-padding-cell);background:var(--sdc-table-bg-card);border-bottom:1px solid var(--sdc-formfield-default-border);-webkit-user-select:none;user-select:none;transition:background var(--sdc-table-transition-fast),border var(--sdc-table-transition-fast);min-height:44px;position:relative;overflow:hidden}thead th.sdc-table-sortable{cursor:pointer}thead th.sdc-table-sortable:hover{background:var(--sdc-table-th-hover-bg)}thead th.sdc-table-sortable:focus{outline:2px solid var(--sdc-tab-primary, #007bff);outline-offset:-2px;box-shadow:inset 0 0 0 3px #007bff26;position:relative;z-index:1}thead th.sdc-table-sortable:focus-visible{outline:2px solid var(--sdc-tab-primary, #007bff);outline-offset:-2px;box-shadow:inset 0 0 0 3px #007bff40}thead th.sdc-table-is-selected{background:var(--sdc-table-th-selected-bg)!important}.sdc-table-sort-neutral{color:var(--sdc-table-sort-neutral)}.sdc-table-sort-active{color:var(--sdc-table-sort-active)}.sdc-table-th-inner{display:flex;align-items:center;gap:var(--sdc-table-gap-th-inner);width:100%;min-width:0;overflow:hidden}.sdc-table-sort-icons i{font-size:inherit;transition:color var(--sdc-table-transition-fast),transform var(--sdc-table-transition-fast),opacity var(--sdc-table-transition-fast)}tbody td{padding:.5rem var(--sdc-table-padding-cell);border-bottom:1px solid var(--sdc-table-border-gray);vertical-align:middle;overflow:visible}.sdc-table-initial-loading-row{background:var(--sdc-table-bg-card)}.sdc-table-td--initial-loading{height:3.625rem}.sdc-table-td-val--initial-loading{min-height:1.5rem}.sdc-table-tags{display:flex;flex-wrap:wrap;gap:.5rem}.sdc-table-tag{display:inline-flex;align-items:center;justify-content:center;gap:.35rem;width:fit-content;min-width:fit-content;max-width:100%;border-radius:9999px;font-weight:500;line-height:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid currentColor;box-sizing:border-box}.sdc-table-tag i{font-size:.75rem;color:inherit;flex:0 0 auto}.sdc-tag--enabled{background:#dcfce7;color:#16a34a;border-color:#16a34a}.sdc-tag--disabled{background:#fee2e2;color:#ef4444;border-color:#ef4444}.sdc-table-sort-indicator{display:inline-flex;align-items:center;justify-content:center;gap:.25rem;min-width:1.7rem;flex:0 0 auto}.sdc-table-sort-indicator i{width:.75rem;text-align:center}.sdc-table-sort-overlay{position:relative}.sdc-table-paginator{padding:.5rem 0;border-top:0}.sdc-table-button{display:flex;align-items:center;justify-content:center;min-height:44px;width:100%;min-width:0}.sdc-table-button ::ng-deep sdc-button,.sdc-table-button ::ng-deep button{min-height:unset;min-width:unset;max-width:100%}.sdc-table-action-button{width:100%;max-width:100%;min-width:0}.sdc-table-icon-title{display:flex;align-items:center;gap:8px;min-width:0}.sdc-table-icon-title i{flex-shrink:0}.sdc-table-icon-title span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.sdc-table-checkbox{display:flex;align-items:center;justify-content:center}.sdc-table-checkbox input[type=checkbox]{cursor:pointer}.sdc-table-empty-state{display:flex;align-items:center;justify-content:center;min-height:var(--sdc-table-body-height);padding:0}.sdc-table--loading .sdc-table-shell{pointer-events:none;-webkit-user-select:none;user-select:none}thead th.sdc-table-th-checkbox .sdc-table-th-center{position:absolute;inset:0;display:flex;align-items:center;justify-content:flex-end;padding-right:10px;pointer-events:none}thead th.sdc-table-th-checkbox .sdc-table-th-center input{pointer-events:auto}thead th.sdc-table-th-checkbox .sdc-table-th-inner{padding-right:28px}thead .sdc-table-th-label,thead th.sdc-table-th-checkbox .sdc-table-th-label{color:#333!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;display:block;flex:1 1 auto}.sdc-table-td-val{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.sdc-table-td-val>*{min-width:0;max-width:100%}.sdc-table-actions{position:relative;display:inline-flex;align-items:center;justify-content:center;width:100%;min-width:0}.sdc-table-actions-trigger{appearance:none;border:1px solid #c9ced6;background:#fff;border-radius:999px;min-width:4.875rem;height:2rem;padding:0 .75rem;display:inline-flex;align-items:center;justify-content:center;gap:.375rem;font:inherit;font-size:.8125rem;color:#374151;cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease,background-color .15s ease}.sdc-table-actions-trigger:hover{background:#f9fafb}.sdc-table-actions-trigger:focus-visible,.sdc-table-actions-trigger--open{outline:none;border-color:#9ca3af;box-shadow:0 0 0 2px #1118270a}.sdc-table-actions-trigger__label{line-height:1;white-space:nowrap}.sdc-table-actions-trigger__icon{font-size:.625rem;line-height:1;color:#6b7280}.sdc-actions-menu{background:#fff;border:1px solid #d1d5db;border-radius:0;box-shadow:0 1px 2px #0f172a14;padding:0}.sdc-actions-menu--portal{position:fixed;z-index:2147483647}.sdc-actions-item{width:100%;display:flex;align-items:stretch;justify-content:flex-start;border:0;border-bottom:1px solid #e5e7eb;background:#fff;padding:0;text-align:left;cursor:pointer;font:inherit;color:#374151;min-height:2.25rem;transition:background-color .15s ease,color .15s ease}.sdc-actions-item:last-child{border-bottom:0}.sdc-actions-item__content{display:inline-flex;align-items:center;gap:.5rem;padding:.625rem .875rem;width:100%;font-size:.8125rem;line-height:1.2}.sdc-actions-item:hover:not(:disabled),.sdc-actions-item:focus-visible:not(:disabled){background:#f9fafb;outline:none}.sdc-actions-item:disabled,.sdc-actions-item.sdc-actions-item--disabled,.sdc-actions-item[data-disabled=true]{color:#9ca3af;cursor:not-allowed;background:#fff;pointer-events:none}.sdc-actions-item:disabled .sdc-actions-item__content,.sdc-actions-item.sdc-actions-item--disabled .sdc-actions-item__content,.sdc-actions-item[data-disabled=true] .sdc-actions-item__content{opacity:.55}.sdc-actions-item i{width:.875rem;text-align:center;flex:0 0 .875rem;font-size:.8125rem}.sdc-table-td-align-left{text-align:left}.sdc-table-td-align-left .sdc-table-td-val,.sdc-table-td-align-left .sdc-table-tags,.sdc-table-td-align-left .sdc-table-button,.sdc-table-td-align-left .sdc-table-icon-title,.sdc-table-td-align-left .sdc-table-checkbox,.sdc-table-td-align-left .sdc-table-actions{justify-content:flex-start;text-align:left}.sdc-table-td-align-center{text-align:center}.sdc-table-td-align-center .sdc-table-td-val,.sdc-table-td-align-center .sdc-table-tags,.sdc-table-td-align-center .sdc-table-button,.sdc-table-td-align-center .sdc-table-icon-title,.sdc-table-td-align-center .sdc-table-checkbox,.sdc-table-td-align-center .sdc-table-actions{justify-content:center;text-align:center}.sdc-table-td-align-right{text-align:right}.sdc-table-td-align-right .sdc-table-td-val,.sdc-table-td-align-right .sdc-table-tags,.sdc-table-td-align-right .sdc-table-button,.sdc-table-td-align-right .sdc-table-icon-title,.sdc-table-td-align-right .sdc-table-checkbox,.sdc-table-td-align-right .sdc-table-actions{justify-content:flex-end;text-align:right}\n"] }]
|
|
623
|
+
], encapsulation: ViewEncapsulation.Emulated, changeDetection: ChangeDetectionStrategy.OnPush, template: "<section\n class=\"sdc-table\"\n [class.sdc-table-stack]=\"isMobile\"\n [class.sdc-table-filtered]=\"!!globalFilter().trim()\"\n [class.sdc-table--loading]=\"isLoading\"\n [class.sdc-table--initial-loading]=\"showInitialLoading()\"\n >\n <sdc-loading-state\n class=\"sdc-table-loading-wrap\"\n [loading]=\"isLoading\"\n [blockWindow]=\"false\"\n [blockDelayMs]=\"0\"\n [indicator]=\"'dots'\"\n >\n <div class=\"sdc-table-shell\" [style.--sdc-table-body-height.px]=\"bodyViewportHeightPx()\">\n @if (showSearch()) {\n <div class=\"sdc-table-caption\">\n <div [style.width]=\"isMobile ? '100%' : '20%'\">\n <sdc-searchbox\n [disabled]=\"isLoading\"\n [placeholder]=\"searchPlaceholder()\"\n [triggerMode]=\"triggerMode()\"\n (onSearch)=\"onSearchTerm($event)\"\n (onClear)=\"onClearSearch()\"\n [attr.aria-label]=\"\n 'platform.datacore.accessibility.search_field' | translate\n \"\n />\n </div>\n </div>\n }\n\n <table\n class=\"sdc-table-grid\"\n role=\"table\"\n [attr.aria-label]=\"tableAriaLabelKey() | translate\"\n [attr.aria-rowcount]=\"totalRecords()\"\n [attr.aria-busy]=\"isLoading\"\n >\n <thead>\n <tr role=\"row\">\n @for (col of cols; track $index) {\n <th\n scope=\"col\"\n role=\"columnheader\"\n [class.sdc-table-th-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-th-currency]=\"col.type === 'currency'\"\n [class.sdc-table-th-button]=\"col.type === 'button'\"\n [class.sdc-table-th-actions]=\"col.type === 'actions'\"\n (click)=\"col.field ? toggleSort(col.field, col.sortable !== false) : null\"\n (keydown.enter)=\"col.field ? toggleSort(col.field, col.sortable !== false) : null\"\n (keydown.space)=\"$event.preventDefault(); col.field ? toggleSort(col.field, col.sortable !== false) : null\"\n [class.sdc-table-sortable]=\"col.sortable !== false\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\"\n [attr.aria-sort]=\"getSortAriaAttribute(col)\"\n [attr.tabindex]=\"col.sortable !== false ? 0 : null\"\n [attr.aria-label]=\"\n col.sortable !== false\n ? (\n (col.header | translate)\n + ' - '\n + ('platform.datacore.accessibility.sortable_column' | translate)\n )\n : (col.header | translate)\n \"\n >\n <div class=\"sdc-table-th-inner\" [class.sdc-table-sortable]=\"col.sortable !== false\">\n @switch (col.type) {\n @case ('checkbox-selection') {\n <span class=\"sdc-table-th-label\" aria-hidden=\"true\">{{ col.header | translate }}</span>\n }\n @default {\n <span class=\"sdc-table-th-label\" aria-hidden=\"true\">{{ col.header | translate }}</span>\n @if (col.sortable !== false) {\n <span\n class=\"sdc-table-sort-icons sdc-table-sort-overlay\"\n aria-hidden=\"true\"\n >\n <ng-container\n [ngTemplateOutlet]=\"sortIconsTpl\"\n [ngTemplateOutletContext]=\"{ col: col }\"\n ></ng-container>\n </span>\n }\n }\n }\n </div>\n\n @if (col.type === 'checkbox-selection' && (cellCfg('checkbox').selectAll ?? true)) {\n <span\n class=\"sdc-table-th-center\"\n >\n <input\n type=\"checkbox\"\n [id]=\"'select-all-checkbox'\"\n [checked]=\"isPageFullySelected()\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleSelectPage(getCheckedValue($event))\"\n (keydown.space)=\"$event.preventDefault(); toggleSelectPage(!isPageFullySelected())\"\n [attr.aria-label]=\"'platform.datacore.accessibility.select_all_rows' | translate\"\n [attr.aria-checked]=\"isPageFullySelected()\"\n />\n <label for=\"select-all-checkbox\" class=\"sr-only\">\n {{ 'platform.datacore.accessibility.select_all_rows' | translate }}\n </label>\n </span>\n }\n </th>\n }\n </tr>\n </thead>\n\n <tbody>\n @if (showInitialLoading()) {\n @for (rowIndex of initialLoadingRows(); track rowIndex; let r = $index) {\n <tr class=\"sdc-table-initial-loading-row\" role=\"row\" [attr.aria-rowindex]=\"r + 1\" aria-hidden=\"true\">\n @for (col of cols; track $index) {\n <td\n class=\"sdc-table-td sdc-table-tdc sdc-table-td--initial-loading\"\n [class.sdc-table-td-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-td-currency]=\"col.type === 'currency'\"\n [class.sdc-table-td-button]=\"col.type === 'button'\"\n [class.sdc-table-td-actions]=\"col.type === 'actions'\"\n [ngClass]=\"columnAlignClass(col)\"\n [attr.data-title]=\"col.header | translate\"\n role=\"cell\"\n >\n <div class=\"sdc-table-td-val sdc-table-td-val--initial-loading\"></div>\n </td>\n }\n </tr>\n }\n } @else {\n @for (row of pageData(); track $index; let r = $index) {\n <tr role=\"row\" [attr.aria-rowindex]=\"r + 1\">\n @for (col of cols; track $index) {\n @if (isMobile) {\n <div class=\"sdc-table-td-mobile\">\n <ng-container [ngTemplateOutlet]=\"sortIconsTpl\" [ngTemplateOutletContext]=\"{ col: col }\"></ng-container>\n <td\n class=\"sdc-table-td sdc-table-tdc sdc-table-mobile-td\"\n [class.sdc-table-td-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-td-currency]=\"col.type === 'currency'\"\n [class.sdc-table-td-button]=\"col.type === 'button'\"\n [class.sdc-table-td-actions]=\"col.type === 'actions'\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\"\n [ngClass]=\"columnAlignClass(col)\"\n [attr.data-title]=\"col.header | translate\"\n role=\"cell\"\n [attr.tabindex]=\"col.sortable !== false ? 0 : null\"\n (click)=\"col.field ? toggleSort(col.field, col.sortable !== false) : null\"\n (keydown.enter)=\"col.field ? toggleSort(col.field, col.sortable !== false) : null\"\n (keydown.space)=\"$event.preventDefault(); col.field ? toggleSort(col.field, col.sortable !== false) : null\"\n >\n <div class=\"sdc-table-td-val\">\n <ng-container\n [ngTemplateOutlet]=\"cellTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: row, col: col }\"\n ></ng-container>\n </div>\n </td>\n </div>\n } @else {\n <td\n class=\"sdc-table-td sdc-table-tdc\"\n [class.sdc-table-td-checkbox]=\"col.type === 'checkbox-selection'\"\n [class.sdc-table-td-currency]=\"col.type === 'currency'\"\n [class.sdc-table-td-button]=\"col.type === 'button'\"\n [class.sdc-table-td-actions]=\"col.type === 'actions'\"\n [class.sdc-table-is-selected]=\"sortField() === col.field\"\n [ngClass]=\"columnAlignClass(col)\"\n [attr.data-title]=\"col.header | translate\"\n role=\"cell\"\n >\n <div class=\"sdc-table-td-val\">\n <ng-container [ngTemplateOutlet]=\"cellTpl\" [ngTemplateOutletContext]=\"{ $implicit: row, col: col }\"></ng-container>\n </div>\n </td>\n }\n\n }\n </tr>\n }\n }\n </tbody>\n </table>\n\n @if (!isLoading && options().empty?.show !== false && totalRecords() === 0) {\n <sdc-empty-state\n id=\"my-empty-state\"\n iconClass=\"fa fa-inbox\"\n [title]=\"emptyTitle()\"\n [description]=\"emptyText()\"\n class=\"sdc-table-empty-state\"\n [style.min-height.px]=\"emptyBodyHeightPx()\"\n >\n </sdc-empty-state>\n }\n\n @if (showPaginator()) {\n <div class=\"sdc-table-paginator\">\n <sdc-paginator\n [first]=\"first()\"\n [rows]=\"rows()\"\n [totalRecords]=\"totalRecords()\"\n [rowsPerPageOptions]=\"isMobile ? [] : rowsPerPageOptions()\"\n [isMobile]=\"isMobile\"\n [totalRecordsLabel]=\"totalRecordsLabel()\"\n (pageChange)=\"onPageChange($event)\"\n ></sdc-paginator>\n </div>\n }\n </div>\n </sdc-loading-state>\n\n <ng-template #cellTpl let-row let-col=\"col\">\n @switch (col.type) {\n @case ('checkbox-selection') {\n @if (cellCfg('checkbox'); as checkboxOptions) {\n <div class=\"sdc-table-checkbox\">\n <input\n type=\"checkbox\"\n [id]=\"getRowCheckboxId(row)\"\n [checked]=\"isRowSelected(row)\"\n (change)=\"onToggleRow(row, getCheckedValue($event))\"\n [attr.aria-label]=\"\n 'platform.datacore.accessibility.select_row'\n | translate: { name: (getRowCheckboxLabel(row) | translate) }\n \"\n [attr.aria-checked]=\"isRowSelected(row)\"\n />\n <label [attr.for]=\"getRowCheckboxId(row)\" class=\"sr-only\">\n {{\n 'platform.datacore.accessibility.select_row'\n | translate: { name: (getRowCheckboxLabel(row) | translate) }\n }}\n </label>\n </div>\n }\n }\n\n @case ('date') {\n {{ formatDate(_(row, col.field), col.format || 'shortDate') }}\n }\n\n @case ('strong') {\n <div class=\"sdc-table-strong-label\">{{ cellTextValue(row, col.field) | translate }}</div>\n }\n\n @case ('code') {\n <code class=\"sdc-table-code-label\">{{ _(row, col.field) }}</code>\n }\n\n @case ('currency') {\n {{ formatCurrency(_(row, col.field), col.format || 'BRL') }}\n }\n\n @case ('tag') {\n @if (cellCfg('tag'); as tagOptions) {\n <div class=\"sdc-table-tags\">\n @for (tag of tagsOf(row, col); track $index) {\n <span\n class=\"sdc-table-tag\"\n [class.sdc-tag--enabled]=\"isEnabledTag(tag)\"\n [class.sdc-tag--disabled]=\"isDisabledTag(tag)\"\n [ngStyle]=\"getTagStyles(tag, tagOptions)\"\n [attr.title]=\"tagOptions.tooltip ? (tagOptions.tooltip | translate) : null\"\n >\n @if (tagOptions.icon) {\n <i [class]=\"tagOptions.icon\"></i>\n }\n {{ tag | translate }}\n </span>\n }\n </div>\n }\n }\n\n @case ('button') {\n @if (cellCfg('button'); as buttonOptions) {\n <div class=\"sdc-table-button\">\n <sdc-button\n class=\"sdc-table-action-button\"\n [size]=\"buttonOptions.size ?? 'default'\"\n [priority]=\"buttonOptions.priority || 'primary'\"\n [icon]=\"buttonOptions.icon\"\n [label]=\"buttonOptions.label ?? ''\"\n [disabled]=\"buttonOptions.disabled ?? false\"\n [title]=\"buttonOptions.tooltip\"\n [attr.size]=\"buttonOptions.size\"\n [attr.priority]=\"buttonOptions.priority || 'primary'\"\n [attr.severity]=\"buttonOptions.priority || 'primary'\"\n [attr.icon]=\"buttonOptions.icon\"\n [attr.label]=\"buttonOptions.label\"\n [attr.disabled]=\"buttonOptions.disabled ? '' : null\"\n [attr.title]=\"buttonOptions.tooltip || null\"\n [attr.aria-label]=\"\n (\n (buttonOptions.label || buttonOptions.tooltip || 'platform.datacore.accessibility.action_button')\n | translate\n )\n + ' - '\n + (getRowCheckboxLabel(row) | translate)\n \"\n [attr.data-key]=\"buttonKey(row, col, buttonOptions)\"\n (click)=\"buttonOptions.disabled ? null : onButtonClick(row, col)\"\n (keydown.enter)=\"buttonOptions.disabled ? null : onButtonClick(row, col)\"\n (keydown.space)=\"$event.preventDefault(); buttonOptions.disabled ? null : onButtonClick(row, col)\"\n >\n </sdc-button>\n </div>\n }\n }\n\n @case ('actions') {\n @if (cellCfg('actions'); as actionsOpt) {\n <div\n class=\"sdc-table-actions\"\n [class.sdc-table-actions--open]=\"isActionsMenuOpen(row, col)\"\n >\n <button\n #actionsTrigger\n type=\"button\"\n class=\"sdc-table-actions-trigger\"\n [class.sdc-table-actions-trigger--open]=\"isActionsMenuOpen(row, col)\"\n [attr.aria-label]=\"\n ((actionsOpt.buttonLabel || 'platform.datacore.accessibility.actions_menu') | translate)\n + ' - '\n + (getRowCheckboxLabel(row) | translate)\n \"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-expanded]=\"isActionsMenuOpen(row, col)\"\n (click)=\"toggleActionsMenu($event, row, col, actionsTrigger)\"\n >\n <span class=\"sdc-table-actions-trigger__label\">\n {{ (actionsOpt.buttonLabel || 'platform.datacore.accessibility.actions_menu') | translate }}\n </span>\n <i class=\"fas fa-chevron-down sdc-table-actions-trigger__icon\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n }\n\n @case ('icon-title') {\n @if (cellCfg('icon-title'); as iconTitleOptions) {\n <div class=\"sdc-table-icon-title\">\n <i [class]=\"_(row, iconTitleOptions.iconField)\" aria-hidden=\"true\"></i>\n <span>{{ cellTextValue(row, col.field) | translate }}</span>\n </div>\n }\n }\n\n @default {\n {{ cellTextValue(row, col.field) | translate }}\n }\n }\n </ng-template>\n </section>\n @if (openMenuState(); as menu) {\n <div\n class=\"sdc-actions-menu sdc-actions-menu--portal\"\n [style.top.px]=\"menu.top\"\n [style.left.px]=\"menu.left\"\n [style.min-width.px]=\"menu.width\"\n role=\"menu\"\n (click)=\"$event.stopPropagation()\"\n >\n @for (item of menu.items; track item.key + '-' + $index) {\n <button\n type=\"button\"\n class=\"sdc-actions-item\"\n [disabled]=\"item.disabled\"\n [class.sdc-actions-item--disabled]=\"item.disabled\"\n [attr.aria-disabled]=\"item.disabled\"\n (click)=\"onPortalActionClick($event, item)\"\n >\n <span class=\"sdc-actions-item__content\">\n @if (item.icon) {\n <i [class]=\"item.icon\" aria-hidden=\"true\"></i>\n }\n <span>{{ item.label | translate }}</span>\n </span>\n </button>\n }\n </div>\n }\n\n <ng-template #sortIconsTpl let-col=\"col\">\n @if (col.sortable !== false && col.type !== 'checkbox-selection') {\n <span\n class=\"sdc-table-sort-indicator\"\n aria-hidden=\"true\"\n >\n @if (sortField() !== col.field) {\n <i class=\"fas fa-sort-alt sdc-table-sort-neutral\" aria-hidden=\"true\"></i>\n }\n @if (sortField() === col.field && sortOrder() === 1) {\n <i class=\"fas fa-sort-amount-up-alt sdc-table-sort-active\" aria-hidden=\"true\"></i>\n }\n @if (sortField() === col.field && sortOrder() === -1) {\n <i class=\"fas fa-sort-amount-down sdc-table-sort-active\" aria-hidden=\"true\"></i>\n }\n </span>\n }\n\n @if (col.sortable === false || col.type === 'checkbox-selection') {\n <span\n class=\"sdc-table-sort-indicator sdc-table-sort-indicator-placeholder\"\n aria-hidden=\"true\"\n ></span>\n }\n </ng-template>\n", styles: [":host{display:block;width:100%;box-sizing:border-box;--sdc-tag-width: 7.5rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}@media (max-width: 750px){.sdc-table-tag{font-size:.8125rem;padding:.35rem .75rem}.sdc-table-sort-indicator-placeholder{display:none!important;width:0!important;height:0!important;min-width:0!important}.sdc-table-paginator{justify-content:center!important;border-top:1px solid var(--sdc-table-border-gray)}.sdc-table-sort-indicator{gap:.15rem;min-width:1.2rem;position:absolute;left:21px}.sdc-table-sort-indicator i{font-size:.75rem;width:.65rem}.sdc-table-td-val{background:none!important;height:100%;padding:1rem;justify-content:end;border-left:1px solid var(--sdc-formfield-default-border);display:flex;overflow:visible;overflow-wrap:anywhere;word-break:break-word;white-space:normal;min-width:0}.sdc-table-strong-label,.sdc-table-code-label{white-space:normal;overflow:visible;text-overflow:clip;overflow-wrap:anywhere;word-break:break-word}.sdc-table-td-mobile{border-top:1px solid var(--sdc-formfield-default-border);display:flex;align-items:center;padding-left:10px}.sdc-table.sdc-table-stack thead{display:none}.sdc-table.sdc-table-stack .sdc-table-grid,.sdc-table.sdc-table-stack .sdc-table-grid tbody,.sdc-table.sdc-table-stack .sdc-table-grid tr,.sdc-table.sdc-table-stack .sdc-table-grid td{display:block;width:100%;box-sizing:border-box}.sdc-table.sdc-table-stack .sdc-table-grid tr{border-top:1px solid var(--sdc-formfield-default-border);background:var(--sdc-table-bg-card)}.sdc-table.sdc-table-stack .sdc-table-td{position:relative;padding:0;border-bottom:1px solid var(--sdc-table-border-gray);display:grid!important;grid-template-columns:45% 55%;align-items:center;gap:var(--sdc-table-gap-th-inner)}.sdc-table.sdc-table-stack .sdc-table-td:before{content:attr(data-title);font-weight:600;padding:var(--sdc-table-padding-cell) .5rem var(--sdc-table-padding-cell) var(--sdc-table-padding-cell);border-right:0 solid var(--sdc-formfield-default-border);word-break:break-word}.sdc-table.sdc-table-stack .sdc-table-td>*{grid-column:2;min-width:0;max-width:100%}.sdc-table.sdc-table-stack .sdc-table-grid tr .sdc-table-td:last-child{border-bottom:0}.sdc-table.sdc-table-stack .sdc-table-sort-icons{flex-direction:column;line-height:.8}.sdc-table.sdc-table-stack .sdc-table-td--initial-loading{grid-template-columns:100%;min-height:3.75rem}.sdc-table.sdc-table-stack .sdc-table-td--initial-loading:before{content:\"\";padding:0}.sdc-table.sdc-table-stack .sdc-table-td--initial-loading>*{grid-column:1}.sdc-table.sdc-table-stack .sdc-table-td--initial-loading .sdc-table-td-val--initial-loading{border-left:0;justify-content:flex-start;padding:0;min-height:3.75rem}.sdc-table.sdc-table-stack .sdc-actions-menu--portal{min-width:7.5rem!important}.sdc-table.sdc-table-stack .sdc-table-actions-trigger{min-width:4.375rem;height:1.75rem;padding:0 .625rem;font-size:.75rem}::ng-deep .p-paginator .p-paginator-next{border-width:1px 1px 1px 1px!important}}@media (min-width: 750px){.sdc-table-tag{font-size:.875rem;padding:.35rem .875rem}.sdc-table-sort-indicator-placeholder{width:1.4rem;height:1rem;display:inline-block}.sdc-table-grid thead th+th{border-left:1px solid var(--sdc-formfield-default-border)}thead th.sdc-table-th-checkbox,tbody td.sdc-table-td-checkbox{width:84px;min-width:84px;max-width:84px}thead th.sdc-table-th-currency,tbody td.sdc-table-td-currency{width:132px;min-width:132px}thead th.sdc-table-th-button,tbody td.sdc-table-td-button{width:154px;min-width:154px}thead th.sdc-table-th-actions,tbody td.sdc-table-td-actions{width:124px;min-width:124px}}.sdc-table{width:100%;box-sizing:border-box;overflow:visible;background:var(--sdc-table-bg-card)}.sdc-table .sdc-table-strong-label{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;max-width:100%;display:block}.sdc-table .sdc-table-code-label{color:var(--sdc-tab-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;display:block;max-width:100%}.sdc-table-shell{display:block;--sdc-table-body-height: 220px;overflow:visible}.sdc-table-loading-wrap{display:block;width:100%;overflow:visible}.sdc-table-caption{width:100%;justify-content:end;display:flex;padding:.75rem 0}.sdc-table-grid{width:100%;border-collapse:collapse;table-layout:fixed}thead th{padding:var(--sdc-table-padding-cell);background:var(--sdc-table-bg-card);border-bottom:1px solid var(--sdc-formfield-default-border);-webkit-user-select:none;user-select:none;transition:background var(--sdc-table-transition-fast),border var(--sdc-table-transition-fast);min-height:44px;position:relative;overflow:hidden;text-align:left}thead th.sdc-table-sortable{cursor:pointer}thead th.sdc-table-sortable:hover{background:var(--sdc-table-th-hover-bg)}thead th.sdc-table-sortable:focus{outline:2px solid var(--sdc-tab-primary, #007bff);outline-offset:-2px;box-shadow:inset 0 0 0 3px #007bff26;position:relative;z-index:1}thead th.sdc-table-sortable:focus-visible{outline:2px solid var(--sdc-tab-primary, #007bff);outline-offset:-2px;box-shadow:inset 0 0 0 3px #007bff40}thead th.sdc-table-is-selected{background:var(--sdc-table-th-selected-bg)!important}.sdc-table-sort-neutral{color:var(--sdc-table-sort-neutral)}.sdc-table-sort-active{color:var(--sdc-table-sort-active)}.sdc-table-th-inner{display:flex;align-items:center;gap:var(--sdc-table-gap-th-inner);width:100%;min-width:0;overflow:hidden}.sdc-table-sort-icons i{font-size:inherit;transition:color var(--sdc-table-transition-fast),transform var(--sdc-table-transition-fast),opacity var(--sdc-table-transition-fast)}tbody td{padding:.5rem var(--sdc-table-padding-cell);border-bottom:1px solid var(--sdc-table-border-gray);vertical-align:middle;overflow:visible}.sdc-table-initial-loading-row{background:var(--sdc-table-bg-card)}.sdc-table-td--initial-loading{height:3.625rem}.sdc-table-td-val--initial-loading{min-height:1.5rem}.sdc-table-tags{display:flex;flex-wrap:wrap;gap:.5rem}.sdc-table-tag{display:inline-flex;align-items:center;justify-content:center;gap:.35rem;width:fit-content;min-width:fit-content;max-width:100%;border-radius:9999px;font-weight:500;line-height:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid currentColor;box-sizing:border-box}.sdc-table-tag i{font-size:.75rem;color:inherit;flex:0 0 auto}.sdc-tag--enabled{background:#dcfce7;color:#16a34a;border-color:#16a34a}.sdc-tag--disabled{background:#fee2e2;color:#ef4444;border-color:#ef4444}.sdc-table-sort-indicator{display:inline-flex;align-items:center;justify-content:center;gap:.25rem;min-width:1.7rem;flex:0 0 auto}.sdc-table-sort-indicator i{width:.75rem;text-align:center}.sdc-table-sort-overlay{position:relative;margin-left:auto}.sdc-table-paginator{padding:.5rem 0;border-top:0}.sdc-table-button{display:flex;align-items:center;justify-content:center;min-height:44px;width:100%;min-width:0}.sdc-table-button ::ng-deep sdc-button,.sdc-table-button ::ng-deep button{min-height:unset;min-width:unset;max-width:100%}.sdc-table-action-button{width:100%;max-width:100%;min-width:0}.sdc-table-icon-title{display:flex;align-items:center;gap:8px;min-width:0}.sdc-table-icon-title i{flex-shrink:0}.sdc-table-icon-title span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.sdc-table-checkbox{display:flex;align-items:center;justify-content:center}.sdc-table-checkbox input[type=checkbox]{cursor:pointer}.sdc-table-empty-state{display:flex;align-items:center;justify-content:center;min-height:var(--sdc-table-body-height);padding:0}.sdc-table--loading .sdc-table-shell{pointer-events:none;-webkit-user-select:none;user-select:none}thead th.sdc-table-th-checkbox .sdc-table-th-center{position:absolute;inset:0;display:flex;align-items:center;justify-content:flex-end;padding-right:10px;pointer-events:none}thead th.sdc-table-th-checkbox .sdc-table-th-center input{pointer-events:auto}thead th.sdc-table-th-checkbox .sdc-table-th-inner{padding-right:28px}thead .sdc-table-th-label,thead th.sdc-table-th-checkbox .sdc-table-th-label{color:#333!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;display:block;flex:1 1 auto}.sdc-table-td-val{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.sdc-table-td-val>*{min-width:0;max-width:100%}.sdc-table-actions{position:relative;display:inline-flex;align-items:center;justify-content:center;width:100%;min-width:0}.sdc-table-actions-trigger{appearance:none;border:1px solid #c9ced6;background:#fff;border-radius:999px;min-width:4.875rem;height:2rem;padding:0 .75rem;display:inline-flex;align-items:center;justify-content:center;gap:.375rem;font:inherit;font-size:.8125rem;color:#374151;cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease,background-color .15s ease}.sdc-table-actions-trigger:hover{background:#f9fafb}.sdc-table-actions-trigger:focus-visible,.sdc-table-actions-trigger--open{outline:none;border-color:#9ca3af;box-shadow:0 0 0 2px #1118270a}.sdc-table-actions-trigger__label{line-height:1;white-space:nowrap}.sdc-table-actions-trigger__icon{font-size:.625rem;line-height:1;color:#6b7280}.sdc-actions-menu{background:#fff;border:1px solid #d1d5db;border-radius:0;box-shadow:0 1px 2px #0f172a14;padding:0}.sdc-actions-menu--portal{position:fixed;z-index:2147483647}.sdc-actions-item{width:100%;display:flex;align-items:stretch;justify-content:flex-start;border:0;border-bottom:1px solid #e5e7eb;background:#fff;padding:0;text-align:left;cursor:pointer;font:inherit;color:#374151;min-height:2.25rem;transition:background-color .15s ease,color .15s ease}.sdc-actions-item:last-child{border-bottom:0}.sdc-actions-item__content{display:inline-flex;align-items:center;gap:.5rem;padding:.625rem .875rem;width:100%;font-size:.8125rem;line-height:1.2}.sdc-actions-item:hover:not(:disabled),.sdc-actions-item:focus-visible:not(:disabled){background:#f9fafb;outline:none}.sdc-actions-item:disabled,.sdc-actions-item.sdc-actions-item--disabled,.sdc-actions-item[data-disabled=true]{color:#9ca3af;cursor:not-allowed;background:#fff;pointer-events:none}.sdc-actions-item:disabled .sdc-actions-item__content,.sdc-actions-item.sdc-actions-item--disabled .sdc-actions-item__content,.sdc-actions-item[data-disabled=true] .sdc-actions-item__content{opacity:.55}.sdc-actions-item i{width:.875rem;text-align:center;flex:0 0 .875rem;font-size:.8125rem}.sdc-table-td-align-left{text-align:left}.sdc-table-td-align-left .sdc-table-td-val,.sdc-table-td-align-left .sdc-table-tags,.sdc-table-td-align-left .sdc-table-button,.sdc-table-td-align-left .sdc-table-icon-title,.sdc-table-td-align-left .sdc-table-checkbox,.sdc-table-td-align-left .sdc-table-actions{justify-content:flex-start;text-align:left}.sdc-table-td-align-center{text-align:center}.sdc-table-td-align-center .sdc-table-td-val,.sdc-table-td-align-center .sdc-table-tags,.sdc-table-td-align-center .sdc-table-button,.sdc-table-td-align-center .sdc-table-icon-title,.sdc-table-td-align-center .sdc-table-checkbox,.sdc-table-td-align-center .sdc-table-actions{justify-content:center;text-align:center}.sdc-table-td-align-right{text-align:right}.sdc-table-td-align-right .sdc-table-td-val,.sdc-table-td-align-right .sdc-table-tags,.sdc-table-td-align-right .sdc-table-button,.sdc-table-td-align-right .sdc-table-icon-title,.sdc-table-td-align-right .sdc-table-checkbox,.sdc-table-td-align-right .sdc-table-actions{justify-content:flex-end;text-align:right}\n"] }]
|
|
624
624
|
}], propDecorators: { cols: [{
|
|
625
625
|
type: Input,
|
|
626
626
|
args: [{ required: true }]
|
|
@@ -652,4 +652,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
652
652
|
type: HostListener,
|
|
653
653
|
args: ['window:scroll']
|
|
654
654
|
}] } });
|
|
655
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3NyYy9mZWF0dXJlcy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNuRSxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHlDQUF5QyxJQUFJLG1DQUFtQyxFQUNoRixtQ0FBbUMsSUFBSSw2QkFBNkIsRUFDcEUsMkJBQTJCLElBQUkscUJBQXFCLEVBQ3BELG1DQUFtQyxJQUFJLDZCQUE2QixFQUNwRSwyQkFBMkIsSUFBSSxxQkFBcUIsRUFDcEQseUJBQXlCLElBQUksbUJBQW1CLEVBQ2hELHdCQUF3QixJQUFJLGtCQUFrQixFQUM5QyxlQUFlLElBQUksU0FBUyxFQUM1QixnQkFBZ0IsSUFBSSxVQUFVLEVBQzlCLGlCQUFpQixJQUFJLFdBQVcsRUFDaEMsYUFBYSxJQUFJLE9BQU8sRUFDeEIsMEJBQTBCLElBQUksb0JBQW9CLEVBQ2xELGtDQUFrQyxJQUFJLDRCQUE0QixFQUNuRSxNQUFNLGtDQUFrQyxDQUFDO0FBbUIxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1B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LGNBQWM7NEZBQWQsY0FBYyxzWkN6RTNCLG1saUJBd1lBLDZ3V0Q1VUksWUFBWSwwbEJBQ1osa0JBQWtCLG9XQUNsQixrQkFBa0IsZ05BQ2xCLGVBQWUsOFNBQ2YscUJBQXFCLHVKQUNyQixtQkFBbUIsa1hBQ25CLGVBQWU7OzRGQU9OLGNBQWM7a0JBakIxQixTQUFTOytCQUNFLFdBQVcsY0FDVCxJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixrQkFBa0I7d0JBQ2xCLGtCQUFrQjt3QkFDbEIsZUFBZTt3QkFDZixxQkFBcUI7d0JBQ3JCLG1CQUFtQjt3QkFDbkIsZUFBZTtxQkFDaEIsaUJBR2MsaUJBQWlCLENBQUMsUUFBUSxtQkFDeEIsdUJBQXVCLENBQUMsTUFBTTs4QkFhM0MsSUFBSTtzQkFEUCxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFVckIsSUFBSTtzQkFEUCxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFhckIsT0FBTztzQkFEVixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtnQkFjdEIsTUFBTTtzQkFEVCxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtnQkEwQnRCLFNBQVM7c0JBRFosS0FBSztnQkFLSSxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFxSkcsZUFBZTtzQkFEeEIsWUFBWTt1QkFBQyxnQkFBZ0I7Z0JBTXBCLFdBQVc7c0JBRHBCLFlBQVk7dUJBQUMseUJBQXlCO2dCQU03QixjQUFjO3NCQUR2QixZQUFZO3VCQUFDLGVBQWU7Z0JBTW5CLGNBQWM7c0JBRHZCLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGNvbXB1dGVkLFxuICBzaWduYWxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuaW1wb3J0IHsgaXNNb2JpbGUgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL2xheW91dC51dGlsJztcbmltcG9ydCB7IGZvcm1hdE51bWVyaWNWYWx1ZSB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvbnVtZXJpYy51dGlsJztcbmltcG9ydCB7XG4gIERFRkFVTFRfVEFCTEVfT1BUSU9OUyxcbiAgVEFCTEVfREVGQVVMVF9MT0FESU5HX1ZFUlRJQ0FMX1BBRERJTkdfUFggYXMgREVGQVVMVF9MT0FESU5HX1ZFUlRJQ0FMX1BBRERJTkdfUFgsXG4gIFRBQkxFX0RFRkFVTFRfTUlOX0xPQURJTkdfSEVJR0hUX1BYIGFzIERFRkFVTFRfTUlOX0xPQURJTkdfSEVJR0hUX1BYLFxuICBUQUJMRV9ERUZBVUxUX1JPV19IRUlHSFRfUFggYXMgREVGQVVMVF9ST1dfSEVJR0hUX1BYLFxuICBUQUJMRV9ERUZBVUxUX1JPV19JRF9QUkVWSUVXX0xFTkdUSCBhcyBERUZBVUxUX1JPV19JRF9QUkVWSUVXX0xFTkdUSCxcbiAgVEFCTEVfREVGQVVMVF9ST1dTX1BFUl9QQUdFIGFzIERFRkFVTFRfUk9XU19QRVJfUEFHRSxcbiAgVEFCTEVfRElTQUJMRURfVEFHX1ZBTFVFUyBhcyBESVNBQkxFRF9UQUdfVkFMVUVTLFxuICBUQUJMRV9FTkFCTEVEX1RBR19WQUxVRVMgYXMgRU5BQkxFRF9UQUdfVkFMVUVTLFxuICBUQUJMRV9IRVhfUkFESVggYXMgSEVYX1JBRElYLFxuICBUQUJMRV9JTkRFWF9aRVJPIGFzIElOREVYX1pFUk8sXG4gIFRBQkxFX01FTlVfR0FQX1BYIGFzIE1FTlVfR0FQX1BYLFxuICBUQUJMRV9SR0JfTUFYIGFzIFJHQl9NQVgsXG4gIFRBQkxFX1RBR19CQUNLR1JPVU5EX0FMUEhBIGFzIFRBR19CQUNLR1JPVU5EX0FMUEhBLFxuICBUQUJMRV9UQUdfRk9SRUdST1VORF9EQVJLRU5fQU1PVU5UIGFzIFRBR19GT1JFR1JPVU5EX0RBUktFTl9BTU9VTlRcbn0gZnJvbSAnLi4vLi4vY29yZS9jb25zdGFudHMvdGFibGUuY29uc3QnO1xuaW1wb3J0IHR5cGUgeyBQYWdpbmF0b3JTdGF0ZSB9IGZyb20gJy4uLy4uL2NvcmUvdHlwZXMvcGFnaW5hdG9yLnR5cGUnO1xuaW1wb3J0IHsgdHlwZSBTZWFyY2hUcmlnZ2VyTW9kZSB9IGZyb20gJy4uLy4uL2NvcmUvdHlwZXMvc2VhcmNoYm94LnR5cGUnO1xuaW1wb3J0IHtcbiAgdHlwZSBBY3Rpb25NZW51SXRlbSxcbiAgdHlwZSBSb3dCYXNlLFxuICB0eXBlIFNvcnRPcmRlcixcbiAgdHlwZSBUYWJsZUFjdGlvbk1lbnVJdGVtIGFzIE5hdGl2ZUFjdGlvbk1lbnVJdGVtLFxuICB0eXBlIFRhYmxlQ2VsbENvbmZpZyxcbiAgdHlwZSBUYWJsZUNlbGxDb25maWdLZXksXG4gIHR5cGUgVGFibGVDZWxsQ29uZmlnTWFwLFxuICB0eXBlIFRhYmxlQ29sdW1uQWxpZ25tZW50LFxuICB0eXBlIFRhYmxlQ29sdW1uLFxuICB0eXBlIFRhYmxlT3Blbk1lbnVTdGF0ZSBhcyBPcGVuTWVudVN0YXRlLFxuICB0eXBlIFRhYmxlT3B0aW9ucyxcbiAgdHlwZSBUYWJsZVJvd0lkZW50aXR5LFxuICB0eXBlIFRhYmxlU2VhcmNoRXZlbnRcbn0gZnJvbSAnLi4vLi4vY29yZS90eXBlcy90YWJsZS50eXBlJztcblxuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRW1wdHlTdGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uL2VtcHR5LXN0YXRlL2VtcHR5LXN0YXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYWdpbmF0b3JDb21wb25lbnQgfSBmcm9tICcuLi9wYWdpbmF0b3IvcGFnaW5hdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWFyY2hib3hDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2hib3gvc2VhcmNoYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMb2FkaW5nU3RhdGVDb21wb25lbnQgfSBmcm9tICcuLi9sb2FkaW5nLXN0YXRlL2xvYWRpbmctc3RhdGUuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2RjLXRhYmxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBTZWFyY2hib3hDb21wb25lbnQsXG4gICAgUGFnaW5hdG9yQ29tcG9uZW50LFxuICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICBMb2FkaW5nU3RhdGVDb21wb25lbnQsXG4gICAgRW1wdHlTdGF0ZUNvbXBvbmVudCxcbiAgICBUcmFuc2xhdGVNb2R1bGVcbiAgXSxcbiAgc3R5bGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5zY3NzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uRW11bGF0ZWQsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29tcG9uZW50PFQgZXh0ZW5kcyBSb3dCYXNlID0gUm93QmFzZT4ge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbHNTaWduYWwgPSBzaWduYWw8VGFibGVDb2x1bW48VD5bXT4oW10pO1xuICBwcml2YXRlIHJlYWRvbmx5IGRhdGFTaWduYWwgPSBzaWduYWw8VFtdPihbXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9hZGluZ1NpZ25hbCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWdTaWduYWwgPSBzaWduYWw8VGFibGVPcHRpb25zPFQ+Pih0aGlzLm1lcmdlT3B0aW9ucyhERUZBVUxUX1RBQkxFX09QVElPTlMgYXMgVGFibGVPcHRpb25zPFQ+KSk7XG4gIHByaXZhdGUgX2NvbmZpZzogVGFibGVPcHRpb25zPFQ+ID0gREVGQVVMVF9UQUJMRV9PUFRJT05TIGFzIFRhYmxlT3B0aW9uczxUPjtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3Blbk1lbnVTdGF0ZSA9IHNpZ25hbDxPcGVuTWVudVN0YXRlPFQ+IHwgbnVsbD4obnVsbCk7XG5cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgc2V0IGNvbHModmFsdWU6IFRhYmxlQ29sdW1uPFQ+W10gfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5jb2xzU2lnbmFsLnNldCh2YWx1ZSA/PyBbXSk7XG4gIH1cblxuICBnZXQgY29scygpOiBUYWJsZUNvbHVtbjxUPltdIHtcbiAgICByZXR1cm4gdGhpcy5jb2xzU2lnbmFsKCk7XG4gIH1cblxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBzZXQgZGF0YSh2YWx1ZTogVFtdIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuZGF0YVNpZ25hbC5zZXQodmFsdWUgPz8gW10pO1xuICAgIHRoaXMucmVjb25jaWxlU2VsZWN0aW9uV2l0aERhdGEoKTtcbiAgICB0aGlzLmNsYW1wUGFnZSgpO1xuICAgIHRoaXMuY2xvc2VBY3Rpb25zTWVudSgpO1xuICB9XG5cbiAgZ2V0IGRhdGEoKTogVFtdIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU2lnbmFsKCk7XG4gIH1cblxuICBASW5wdXQoeyByZXF1aXJlZDogZmFsc2UgfSlcbiAgc2V0IGxvYWRpbmcodmFsdWU6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5sb2FkaW5nU2lnbmFsLnNldCh2YWx1ZSA9PT0gdHJ1ZSk7XG5cbiAgICBpZiAodmFsdWUgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuY2xvc2VBY3Rpb25zTWVudSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxvYWRpbmdTaWduYWwoKTtcbiAgfVxuXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiBmYWxzZSB9KVxuICBzZXQgY29uZmlnKHZhbHVlOiBUYWJsZU9wdGlvbnM8VD4gfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgbmV4dCA9IHZhbHVlID8/IChERUZBVUxUX1RBQkxFX09QVElPTlMgYXMgVGFibGVPcHRpb25zPFQ+KTtcblxuICAgIGlmICh0aGlzLl9jb25maWcgPT09IG5leHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jb25maWcgPSBuZXh0O1xuICAgIGNvbnN0IG1lcmdlZCA9IHRoaXMubWVyZ2VPcHRpb25zKG5leHQpO1xuICAgIHRoaXMuY29uZmlnU2lnbmFsLnNldChtZXJnZWQpO1xuXG4gICAgY29uc3QgbmV4dFJvd3MgPSBtZXJnZWQucGFnaW5hdGlvbj8ucm93c1BlclBhZ2UgPz8gREVGQVVMVF9ST1dTX1BFUl9QQUdFO1xuICAgIHRoaXMucm93cy5zZXQobmV4dFJvd3MpO1xuICAgIHRoaXMuZmlyc3Quc2V0KElOREVYX1pFUk8pO1xuXG4gICAgdGhpcy5wYXRoUGFydHNDYWNoZS5jbGVhcigpO1xuICAgIHRoaXMucm93Q2hlY2tib3hJZENhY2hlID0gbmV3IFdlYWtNYXA8b2JqZWN0LCBzdHJpbmc+KCk7XG4gICAgdGhpcy5jbG9zZUFjdGlvbnNNZW51KCk7XG4gIH1cblxuICBnZXQgY29uZmlnKCk6IFRhYmxlT3B0aW9uczxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBhcmlhTGFiZWwodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuYXJpYUxhYmVsU2lnbmFsLnNldCh2YWx1ZSk7XG4gIH1cblxuICBAT3V0cHV0KCkgYWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IGNvbHVtbjogVGFibGVDb2x1bW48VD47IHJvdzogVDsgdmFsdWU6IHVua25vd24gfT4oKTtcbiAgQE91dHB1dCgpIGxhenlMb2FkID0gbmV3IEV2ZW50RW1pdHRlcjx7IGZpcnN0OiBudW1iZXI7IHJvd3M6IG51bWJlciB9PigpO1xuXG4gIGdldCBhcmlhTGFiZWwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5hcmlhTGFiZWxTaWduYWwoKTtcbiAgfVxuXG4gIGdldCBpc0xvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubG9hZGluZ1NpZ25hbCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzTW9iaWxlOiBib29sZWFuID0gaXNNb2JpbGUoKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFyaWFMYWJlbFNpZ25hbCA9IHNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG9wdGlvbnMgPSBjb21wdXRlZDxUYWJsZU9wdGlvbnM8VD4+KCgpID0+IHRoaXMuY29uZmlnU2lnbmFsKCkpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBzaG93U2VhcmNoID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4gdGhpcy5vcHRpb25zKCkuc2VhcmNoPy5zaG93ID8/IGZhbHNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNob3dQYWdpbmF0b3IgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB0aGlzLm9wdGlvbnMoKS5wYWdpbmF0aW9uPy5zaG93ID8/IGZhbHNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNob3dJbml0aWFsTG9hZGluZyA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHRoaXMubG9hZGluZ1NpZ25hbCgpICYmIHRoaXMuZGF0YVNpZ25hbCgpLmxlbmd0aCA9PT0gMCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJvd3NQZXJQYWdlT3B0aW9ucyA9IGNvbXB1dGVkPG51bWJlcltdPigoKSA9PiB0aGlzLm9wdGlvbnMoKS5wYWdpbmF0aW9uPy5yb3dzUGVyUGFnZU9wdGlvbnMgPz8gW10pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VhcmNoUGxhY2Vob2xkZXIgPSBjb21wdXRlZDxzdHJpbmc+KCgpID0+IHRoaXMub3B0aW9ucygpLnNlYXJjaD8ucGxhY2Vob2xkZXIgPz8gJycpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdHJpZ2dlck1vZGUgPSBjb21wdXRlZDxTZWFyY2hUcmlnZ2VyTW9kZT4oKCkgPT4gdGhpcy5vcHRpb25zKCkuc2VhcmNoPy50eXBlID8/ICdhdXRvJyk7XG4gIHByb3RlY3RlZCByZWFkb25seSB0b3RhbFJlY29yZHNMYWJlbCA9IGNvbXB1dGVkPHN0cmluZz4oKCkgPT4gdGhpcy5vcHRpb25zKCkudGFibGU/LnRvdGFsUmVjb3Jkc0xhYmVsID8/ICcnKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGVtcHR5VGl0bGUgPSBjb21wdXRlZDxzdHJpbmc+KCgpID0+IHRoaXMub3B0aW9ucygpLmVtcHR5Py50aXRsZSA/PyAnJyk7XG4gIHByb3RlY3RlZCByZWFkb25seSBlbXB0eVRleHQgPSBjb21wdXRlZDxzdHJpbmc+KCgpID0+IHRoaXMub3B0aW9ucygpLmVtcHR5Py50ZXh0ID8/ICcnKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZ2xvYmFsRmlsdGVyID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc29ydEZpZWxkID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc29ydE9yZGVyID0gc2lnbmFsPFNvcnRPcmRlcj4oMCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3Rpb24gPSBzaWduYWw8VFtdPihbXSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBmaXJzdCA9IHNpZ25hbDxudW1iZXI+KElOREVYX1pFUk8pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm93cyA9IHNpZ25hbDxudW1iZXI+KERFRkFVTFRfUk9XU19QRVJfUEFHRSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNlbGxzQ2ZnID0gY29tcHV0ZWQ8VGFibGVDZWxsQ29uZmlnTWFwPFQ+PigoKSA9PiB7XG4gICAgY29uc3QgY2VsbHMgPSB0aGlzLm9wdGlvbnMoKS5jZWxscztcbiAgICByZXR1cm4ge1xuICAgICAgY2hlY2tib3g6IGNlbGxzPy5jaGVja2JveCA/PyB7fSxcbiAgICAgIGJ1dHRvbjogY2VsbHM/LmJ1dHRvbiA/PyB7fSxcbiAgICAgIHRhZzogY2VsbHM/LnRhZyA/PyB7fSxcbiAgICAgIGFjdGlvbnM6IGNlbGxzPy5hY3Rpb25zID8/IHt9LFxuICAgICAgJ2ljb24tdGl0bGUnOiBjZWxscz8uWydpY29uLXRpdGxlJ10gPz8geyBpY29uRmllbGQ6ICdpY29uJyB9XG4gICAgfTtcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZpbHRlcmVkRGF0YSA9IGNvbXB1dGVkPFRbXT4oKCkgPT4ge1xuICAgIGNvbnN0IHEgPSB0aGlzLmdsb2JhbEZpbHRlcigpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGFTaWduYWwoKTtcbiAgICBjb25zdCBjb2xzID0gdGhpcy5jb2xzU2lnbmFsKCk7XG5cbiAgICBpZiAoIXEpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNvbnN0IGZpZWxkcyA9IGNvbHNcbiAgICAgIC5maWx0ZXIoKGMpID0+IGMuc2VhcmNoYWJsZSA/PyB0cnVlKVxuICAgICAgLmZpbHRlcigoYykgPT4gISFjLmZpZWxkKVxuICAgICAgLm1hcCgoYykgPT4gYy5maWVsZCEpIGFzIHN0cmluZ1tdO1xuXG4gICAgaWYgKGZpZWxkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhLmZpbHRlcigocm93KSA9PlxuICAgICAgZmllbGRzLnNvbWUoKGZpZWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IHYgPSB0aGlzLl8ocm93LCBmaWVsZCk7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodikpIHtcbiAgICAgICAgICByZXR1cm4gdi5qb2luKCcgJykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBTdHJpbmcodiA/PyAnJykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNvcnRlZERhdGEgPSBjb21wdXRlZDxUW10+KCgpID0+IHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuc29ydEZpZWxkKCk7XG4gICAgY29uc3Qgb3JkZXIgPSB0aGlzLnNvcnRPcmRlcigpO1xuICAgIGNvbnN0IGFyciA9IFsuLi50aGlzLmZpbHRlcmVkRGF0YSgpXTtcblxuICAgIGlmICghZmllbGQgfHwgb3JkZXIgPT09IDApIHtcbiAgICAgIHJldHVybiBhcnI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyci5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBjb25zdCB2YSA9IHRoaXMuXyhhLCBmaWVsZCk7XG4gICAgICBjb25zdCB2YiA9IHRoaXMuXyhiLCBmaWVsZCk7XG5cbiAgICAgIGlmICh2YSA9PSBudWxsICYmIHZiID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAtb3JkZXI7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YiA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBvcmRlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB2YSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHZiID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gKHZhIC0gdmIpICogb3JkZXI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBTdHJpbmcodmEpLmxvY2FsZUNvbXBhcmUoU3RyaW5nKHZiKSkgKiBvcmRlcjtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRvdGFsUmVjb3JkcyA9IGNvbXB1dGVkPG51bWJlcj4oKCkgPT4gdGhpcy5zb3J0ZWREYXRhKCkubGVuZ3RoKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGFnZURhdGEgPSBjb21wdXRlZDxUW10+KCgpID0+IHtcbiAgICBpZiAoIXRoaXMuc2hvd1BhZ2luYXRvcigpKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb3J0ZWREYXRhKCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLmZpcnN0KCk7XG4gICAgY29uc3QgZW5kID0gc3RhcnQgKyB0aGlzLnJvd3MoKTtcbiAgICByZXR1cm4gdGhpcy5zb3J0ZWREYXRhKCkuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBpbml0aWFsTG9hZGluZ1Jvd3MgPSBjb21wdXRlZDxudW1iZXJbXT4oKCkgPT4ge1xuICAgIGNvbnN0IHJvd3NGcm9tU3RhdGUgPSB0aGlzLnJvd3MoKTtcbiAgICBjb25zdCByb3dzRnJvbUNvbmZpZyA9IHRoaXMub3B0aW9ucygpLnBhZ2luYXRpb24/LnJvd3NQZXJQYWdlID8/IERFRkFVTFRfUk9XU19QRVJfUEFHRTtcbiAgICBjb25zdCBub3JtYWxpemVkUm93cyA9IE51bWJlcihyb3dzRnJvbVN0YXRlIHx8IHJvd3NGcm9tQ29uZmlnIHx8IERFRkFVTFRfUk9XU19QRVJfUEFHRSk7XG4gICAgY29uc3Qgc2FmZVJvd3MgPSBOdW1iZXIuaXNGaW5pdGUobm9ybWFsaXplZFJvd3MpICYmIG5vcm1hbGl6ZWRSb3dzID4gMCA/IG5vcm1hbGl6ZWRSb3dzIDogREVGQVVMVF9ST1dTX1BFUl9QQUdFO1xuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IHNhZmVSb3dzIH0sIChfLCBpbmRleCkgPT4gaW5kZXgpO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0aW9uU2V0ID0gY29tcHV0ZWQ8U2V0PFQ+PigoKSA9PiBuZXcgU2V0KHRoaXMuc2VsZWN0aW9uKCkpKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYm9keVZpZXdwb3J0SGVpZ2h0UHggPSBjb21wdXRlZDxudW1iZXI+KCgpID0+IHtcbiAgICBjb25zdCByb3dzRnJvbVN0YXRlID0gdGhpcy5yb3dzKCk7XG4gICAgY29uc3Qgcm93c0Zyb21Db25maWcgPSB0aGlzLm9wdGlvbnMoKS5wYWdpbmF0aW9uPy5yb3dzUGVyUGFnZSA/PyBERUZBVUxUX1JPV1NfUEVSX1BBR0U7XG4gICAgY29uc3Qgbm9ybWFsaXplZFJvd3MgPSBOdW1iZXIocm93c0Zyb21TdGF0ZSB8fCByb3dzRnJvbUNvbmZpZyB8fCBERUZBVUxUX1JPV1NfUEVSX1BBR0UpO1xuICAgIGNvbnN0IHNhZmVSb3dzID0gTnVtYmVyLmlzRmluaXRlKG5vcm1hbGl6ZWRSb3dzKSAmJiBub3JtYWxpemVkUm93cyA+IDAgPyBub3JtYWxpemVkUm93cyA6IERFRkFVTFRfUk9XU19QRVJfUEFHRTtcblxuICAgIGNvbnN0IHJvd0hlaWdodCA9IHRoaXMuaXNNb2JpbGUgPyA2NCA6IERFRkFVTFRfUk9XX0hFSUdIVF9QWDtcbiAgICBjb25zdCBlc3RpbWF0ZWRIZWlnaHQgPSBzYWZlUm93cyAqIHJvd0hlaWdodCArIERFRkFVTFRfTE9BRElOR19WRVJUSUNBTF9QQURESU5HX1BYO1xuXG4gICAgcmV0dXJuIE1hdGgubWF4KERFRkFVTFRfTUlOX0xPQURJTkdfSEVJR0hUX1BYLCBlc3RpbWF0ZWRIZWlnaHQpO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZW1wdHlCb2R5SGVpZ2h0UHggPSBjb21wdXRlZDxudW1iZXI+KCgpID0+IHRoaXMuYm9keVZpZXdwb3J0SGVpZ2h0UHgoKSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBwYXRoUGFydHNDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcbiAgcHJpdmF0ZSByb3dDaGVja2JveElkQ2FjaGUgPSBuZXcgV2Vha01hcDxvYmplY3QsIHN0cmluZz4oKTtcblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycpXG4gIHByb3RlY3RlZCBvbkRvY3VtZW50Q2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZUFjdGlvbnNNZW51KCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScpXG4gIHByb3RlY3RlZCBvbkVzY2FwZUtleSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlQWN0aW9uc01lbnUoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuICBwcm90ZWN0ZWQgb25XaW5kb3dSZXNpemUoKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZUFjdGlvbnNNZW51KCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJylcbiAgcHJvdGVjdGVkIG9uV2luZG93U2Nyb2xsKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VBY3Rpb25zTWVudSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uU2VhcmNoVGVybShldk9yVmFsOiBUYWJsZVNlYXJjaEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGVybSA9IHR5cGVvZiBldk9yVmFsID09PSAnc3RyaW5nJyA/IGV2T3JWYWwgOiBldk9yVmFsPy5kZXRhaWwgPz8gJyc7XG4gICAgdGhpcy5nbG9iYWxGaWx0ZXIuc2V0KFN0cmluZyh0ZXJtKSk7XG4gICAgdGhpcy5maXJzdC5zZXQoSU5ERVhfWkVSTyk7XG4gICAgdGhpcy5jbG9zZUFjdGlvbnNNZW51KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25DbGVhclNlYXJjaChfZXY/OiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5nbG9iYWxGaWx0ZXIuc2V0KCcnKTtcbiAgICB0aGlzLmZpcnN0LnNldChJTkRFWF9aRVJPKTtcbiAgICB0aGlzLmNsb3NlQWN0aW9uc01lbnUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVTb3J0KGZpZWxkOiBzdHJpbmcsIGVuYWJsZWQgPSB0cnVlKTogdm9pZCB7XG4gICAgaWYgKCFlbmFibGVkIHx8ICFmaWVsZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNvcnRGaWVsZCgpICE9PSBmaWVsZCkge1xuICAgICAgdGhpcy5zb3J0RmllbGQuc2V0KGZpZWxkKTtcbiAgICAgIHRoaXMuc29ydE9yZGVyLnNldCgxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY3VycmVudE9yZGVyID0gdGhpcy5zb3J0T3JkZXIoKTtcblxuICAgICAgaWYgKGN1cnJlbnRPcmRlciA9PT0gMSkge1xuICAgICAgICB0aGlzLnNvcnRPcmRlci5zZXQoLTEpO1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50T3JkZXIgPT09IC0xKSB7XG4gICAgICAgIHRoaXMuc29ydE9yZGVyLnNldCgwKTtcbiAgICAgICAgdGhpcy5zb3J0RmllbGQuc2V0KG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zb3J0T3JkZXIuc2V0KDEpO1xuICAgICAgICB0aGlzLnNvcnRGaWVsZC5zZXQoZmllbGQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZmlyc3Quc2V0KElOREVYX1pFUk8pO1xuICAgIHRoaXMuY2xvc2VBY3Rpb25zTWVudSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNvcnRBcmlhQXR0cmlidXRlKGNvbDogVGFibGVDb2x1bW48VD4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmIChjb2wuc29ydGFibGUgPT09IGZhbHNlIHx8ICFjb2wuZmllbGQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc29ydEZpZWxkKCkgIT09IGNvbC5maWVsZCkge1xuICAgICAgcmV0dXJuICdub25lJztcbiAgICB9XG5cbiAgICBjb25zdCBvcmRlciA9IHRoaXMuc29ydE9yZGVyKCk7XG5cbiAgICBpZiAob3JkZXIgPT09IDEpIHtcbiAgICAgIHJldHVybiAnYXNjZW5kaW5nJztcbiAgICB9XG5cbiAgICBpZiAob3JkZXIgPT09IC0xKSB7XG4gICAgICByZXR1cm4gJ2Rlc2NlbmRpbmcnO1xuICAgIH1cblxuICAgIHJldHVybiAnbm9uZSc7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29sdW1uQWxpZ25DbGFzcyhjb2w6IFRhYmxlQ29sdW1uPFQ+KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgYWxpZ24gPSB0aGlzLm5vcm1hbGl6ZUNvbHVtbkFsaWdubWVudChjb2wuYWxpZ24pO1xuICAgIHJldHVybiBhbGlnbiA/IGBzZGMtdGFibGUtdGQtYWxpZ24tJHthbGlnbn1gIDogbnVsbDtcbiAgfVxuXG4gIG9uUGFnZUNoYW5nZShlOiBQYWdpbmF0b3JTdGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IG5leHRGaXJzdCA9IGUuZmlyc3QgPz8gSU5ERVhfWkVSTztcbiAgICBjb25zdCBuZXh0Um93cyA9IGUucm93cyA/PyB0aGlzLm9wdGlvbnMoKS5wYWdpbmF0aW9uPy5yb3dzUGVyUGFnZSA/PyBERUZBVUxUX1JPV1NfUEVSX1BBR0U7XG5cbiAgICB0aGlzLmZpcnN0LnNldChuZXh0Rmlyc3QpO1xuICAgIHRoaXMucm93cy5zZXQobmV4dFJvd3MpO1xuICAgIHRoaXMubGF6eUxvYWQuZW1pdCh7IGZpcnN0OiBuZXh0Rmlyc3QsIHJvd3M6IG5leHRSb3dzIH0pO1xuICAgIHRoaXMuY2xvc2VBY3Rpb25zTWVudSgpO1xuICB9XG5cbiAgZ2V0Q2hlY2tlZFZhbHVlKGV2ZW50OiBFdmVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25Ub2dnbGVSb3cocm93OiBULCBjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dCA9IG5ldyBTZXQodGhpcy5zZWxlY3Rpb25TZXQoKSk7XG5cbiAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgbmV4dC5hZGQocm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dC5kZWxldGUocm93KTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGlvbi5zZXQoWy4uLm5leHRdKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpc1Jvd1NlbGVjdGVkKHJvdzogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvblNldCgpLmhhcyhyb3cpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRvZ2dsZVNlbGVjdFBhZ2UoY2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IG5leHQgPSBuZXcgU2V0KHRoaXMuc2VsZWN0aW9uU2V0KCkpO1xuXG4gICAgdGhpcy5wYWdlRGF0YSgpLmZvckVhY2goKHIpID0+IHtcbiAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgIG5leHQuYWRkKHIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dC5kZWxldGUocik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnNlbGVjdGlvbi5zZXQoWy4uLm5leHRdKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpc1BhZ2VGdWxseVNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZpc2libGVSb3dzID0gdGhpcy5wYWdlRGF0YSgpO1xuXG4gICAgaWYgKHZpc2libGVSb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3Rpb25TZXQoKTtcbiAgICByZXR1cm4gdmlzaWJsZVJvd3MuZXZlcnkoKHIpID0+IHNlbGVjdGVkLmhhcyhyKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Um93Q2hlY2tib3hJZChyb3c6IFQpOiBzdHJpbmcge1xuICAgIGlmIChyb3cgJiYgdHlwZW9mIHJvdyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMucm93Q2hlY2tib3hJZENhY2hlLmdldChyb3cgYXMgb2JqZWN0KTtcblxuICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByb3dJZGVudGl0eSA9IHJvdyBhcyBUYWJsZVJvd0lkZW50aXR5O1xuICAgICAgY29uc3Qgcm93SWQgPVxuICAgICAgICByb3dJZGVudGl0eS5pZCA/P1xuICAgICAgICByb3dJZGVudGl0eS5uYW1lID8/XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHJvdykuc3Vic3RyaW5nKElOREVYX1pFUk8sIERFRkFVTFRfUk9XX0lEX1BSRVZJRVdfTEVOR1RIKTtcblxuICAgICAgY29uc3QgbmV4dElkID0gYGNoZWNrYm94LXJvdy0ke1N0cmluZyhyb3dJZCkucmVwbGFjZSgvW15hLXpBLVowLTldL2csICctJyl9YDtcbiAgICAgIHRoaXMucm93Q2hlY2tib3hJZENhY2hlLnNldChyb3cgYXMgb2JqZWN0LCBuZXh0SWQpO1xuICAgICAgcmV0dXJuIG5leHRJZDtcbiAgICB9XG5cbiAgICByZXR1cm4gYGNoZWNrYm94LXJvdy0ke1N0cmluZyhyb3cpfWA7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Um93Q2hlY2tib3hMYWJlbChyb3c6IFQpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJvd0lkZW50aXR5ID0gcm93IGFzIFRhYmxlUm93SWRlbnRpdHk7XG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLnJlc29sdmVSb3dJZGVudGl0eUxhYmVsKHJvd0lkZW50aXR5KTtcblxuICAgIHJldHVybiBTdHJpbmcobGFiZWwpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRhYmxlQXJpYUxhYmVsS2V5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYXJpYUxhYmVsU2lnbmFsKCkgPz8gJ3BsYXRmb3JtLmRhdGFjb3JlLmFjY2Vzc2liaWxpdHkudGFibGVfZGVzY3JpcHRpb24nO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNlbGxUZXh0VmFsdWUocm93OiBULCBmaWVsZD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl8ocm93LCBmaWVsZCk7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IFN0cmluZyh2YWx1ZSA/PyAnJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2VsbENmZzxLIGV4dGVuZHMgVGFibGVDZWxsQ29uZmlnS2V5PihraW5kOiBLKTogVGFibGVDZWxsQ29uZmlnPFQsIEs+IHtcbiAgICByZXR1cm4gdGhpcy5jZWxsc0NmZygpW2tpbmRdO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRhZ3NPZihyb3c6IFQsIGNvbDogVGFibGVDb2x1bW48VD4pOiBzdHJpbmdbXSB7XG4gICAgaWYgKCFjb2wuZmllbGQpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCByYXcgPSB0aGlzLl8ocm93LCBjb2wuZmllbGQpO1xuICAgIGNvbnN0IGFyciA9IEFycmF5LmlzQXJyYXkocmF3KSA/IHJhdyA6IFtdO1xuICAgIGNvbnN0IG1heEl0ZW1zID0gdGhpcy5vcHRpb25zKCkuY2VsbHM/LnRhZz8ubWF4SXRlbXM7XG4gICAgY29uc3Qgc2xpY2VkID0gdHlwZW9mIG1heEl0ZW1zID09PSAnbnVtYmVyJyA/IGFyci5zbGljZShJTkRFWF9aRVJPLCBtYXhJdGVtcykgOiBhcnI7XG5cbiAgICByZXR1cm4gc2xpY2VkLm1hcCgodGFnKSA9PiBTdHJpbmcodGFnID8/ICcnKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNFbmFibGVkVGFnKHRhZzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEVOQUJMRURfVEFHX1ZBTFVFUy5oYXModGFnLnRyaW0oKS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpc0Rpc2FibGVkVGFnKHRhZzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIERJU0FCTEVEX1RBR19WQUxVRVMuaGFzKHRhZy50cmltKCkudG9Mb3dlckNhc2UoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0VGFnU3R5bGVzKHRhZzogc3RyaW5nLCB0YWdPcHRpb25zOiBUYWJsZUNlbGxDb25maWc8VCwgJ3RhZyc+KTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IG51bGwge1xuICAgIGlmICh0aGlzLmlzRW5hYmxlZFRhZyh0YWcpIHx8IHRoaXMuaXNEaXNhYmxlZFRhZyh0YWcpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjb2xvcnMgPSB0aGlzLnJlc29sdmVUYWdDb2xvcnModGFnT3B0aW9ucyk7XG4gICAgY29uc3Qgc3R5bGVzID0gdGhpcy5idWlsZFRhZ1N0eWxlcyhjb2xvcnMuYmFja2dyb3VuZCwgY29sb3JzLmJvcmRlcik7XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoc3R5bGVzKS5sZW5ndGggPiAwID8gc3R5bGVzIDogbnVsbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBfID0gKG9iajogVCwgcGF0aD86IHN0cmluZyk6IHVua25vd24gPT4ge1xuICAgIGlmICghcGF0aCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJ0cyA9IHRoaXMuZ2V0UGF0aFBhcnRzKHBhdGgpO1xuICAgIGxldCBhY2M6IHVua25vd24gPSBvYmo7XG5cbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcbiAgICAgIGNvbnN0IG5leHQgPSB0aGlzLmdldE9iamVjdFZhbHVlKGFjYywgcGFydCk7XG5cbiAgICAgIGlmICh0eXBlb2YgbmV4dCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgYWNjID0gbmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjO1xuICB9O1xuXG4gIHByb3RlY3RlZCBmb3JtYXREYXRlKHZhbHVlOiB1bmtub3duLCBfZm9ybWF0ID0gJ3Nob3J0RGF0ZScpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodW5kZWZpbmVkKS5mb3JtYXQobmV3IERhdGUodmFsdWUgYXMgc3RyaW5nKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gU3RyaW5nKHZhbHVlID8/ICcnKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZm9ybWF0Q3VycmVuY3kodmFsdWU6IHVua25vd24sIGN1cnJlbmN5ID0gJ0JSTCcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG51bWVyaWNWYWx1ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogbnVsbDtcblxuICAgIHJldHVybiBmb3JtYXROdW1lcmljVmFsdWUobnVtZXJpY1ZhbHVlLCB7XG4gICAgICBzdHlsZTogJ2N1cnJlbmN5JyxcbiAgICAgIGN1cnJlbmN5XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdG9nZ2xlQWN0aW9uc01lbnUoZXZlbnQ6IEV2ZW50LCByb3c6IFQsIGNvbDogVGFibGVDb2x1bW48VD4sIHRyaWdnZXJFbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaWYgKHRoaXMuaXNBY3Rpb25zTWVudU9wZW4ocm93LCBjb2wpKSB7XG4gICAgICB0aGlzLmNsb3NlQWN0aW9uc01lbnUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhY3Rpb25zT3B0ID0gdGhpcy5jZWxsQ2ZnKCdhY3Rpb25zJyk7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmFjdGlvbkl0ZW1zRm9yKHJvdywgYWN0aW9uc09wdCk7XG4gICAgY29uc3QgcmVjdCA9IHRyaWdnZXJFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgdGhpcy5vcGVuTWVudVN0YXRlLnNldCh7XG4gICAgICByb3csXG4gICAgICBjb2wsXG4gICAgICBpdGVtcyxcbiAgICAgIGNsb3NlT25DbGljazogYWN0aW9uc09wdD8uY2xvc2VPbkNsaWNrICE9PSBmYWxzZSxcbiAgICAgIHRvcDogcmVjdC5ib3R0b20gKyBNRU5VX0dBUF9QWCxcbiAgICAgIGxlZnQ6IHJlY3QubGVmdCxcbiAgICAgIHdpZHRoOiByZWN0LndpZHRoXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xvc2VBY3Rpb25zTWVudSgpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5NZW51U3RhdGUuc2V0KG51bGwpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzQWN0aW9uc01lbnVPcGVuKHJvdzogVCwgY29sOiBUYWJsZUNvbHVtbjxUPik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG1lbnUgPSB0aGlzLm9wZW5NZW51U3RhdGUoKTtcblxuICAgIGlmICghbWVudSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBtZW51LnJvdyA9PT0gcm93ICYmIG1lbnUuY29sID09PSBjb2w7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWN0aW9uSXRlbXNGb3Iocm93OiBULCBvcHQ6IFRhYmxlQ2VsbENvbmZpZzxULCAnYWN0aW9ucyc+KTogTmF0aXZlQWN0aW9uTWVudUl0ZW1bXSB7XG4gICAgY29uc3QgaXRlbXMgPSBvcHQuaXRlbXMgPz8gW107XG5cbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtOiBBY3Rpb25NZW51SXRlbTxUPikgPT4gKHtcbiAgICAgIGtleTogaXRlbS5rZXksXG4gICAgICBsYWJlbDogaXRlbS5sYWJlbCxcbiAgICAgIGljb246IGl0ZW0uaWNvbixcbiAgICAgIGRpc2FibGVkOiB0aGlzLnJlc29sdmVBY3Rpb25EaXNhYmxlZChpdGVtLCByb3cpXG4gICAgfSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uUG9ydGFsQWN0aW9uQ2xpY2soZXZlbnQ6IEV2ZW50LCBpdGVtOiBOYXRpdmVBY3Rpb25NZW51SXRlbSk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaWYgKGl0ZW0uZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZW51ID0gdGhpcy5vcGVuTWVudVN0YXRlKCk7XG5cbiAgICBpZiAoIW1lbnUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9uQWN0aW9uU2VsZWN0KG1lbnUucm93LCBtZW51LmNvbCwgaXRlbSk7XG5cbiAgICBpZiAobWVudS5jbG9zZU9uQ2xpY2spIHtcbiAgICAgIHRoaXMuY2xvc2VBY3Rpb25zTWVudSgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvbkFjdGlvblNlbGVjdChyb3c6IFQsIGNvbDogVGFibGVDb2x1bW48VD4sIGl0ZW06IHsga2V5OiBzdHJpbmc7IGxhYmVsOiBzdHJpbmc7IGljb24/OiBzdHJpbmc7IGRpc2FibGVkPzogYm9vbGVhbiB9KTogdm9pZCB7XG4gICAgaWYgKGl0ZW0uZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZEtleSA9IGNvbC5hY3Rpb25GaWVsZCA/PyBjb2wuZmllbGQ7XG4gICAgY29uc3Qgcm93VmFsID0gZmllbGRLZXkgPyB0aGlzLl8ocm93LCBmaWVsZEtleSkgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5hY3Rpb24uZW1pdCh7IHJvdywgY29sdW1uOiBjb2wsIHZhbHVlOiB7IGFjdGlvbjogaXRlbSwgcm93VmFsdWU6IHJvd1ZhbCB9IH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGJ1dHRvbktleShyb3c6IFQsIGNvbDogVGFibGVDb2x1bW48VD4sIG9wdDogVGFibGVDZWxsQ29uZmlnPFQsICdidXR0b24nPik6IHN0cmluZyB7XG4gICAgY29uc3QgYWN0aW9uS2V5ID0gKGNvbC5hY3Rpb25GaWVsZCA/PyBjb2wuZmllbGQgPz8gJycpIGFzIHN0cmluZztcbiAgICBjb25zdCBhY3Rpb25WYWx1ZSA9IGFjdGlvbktleSA/IFN0cmluZyh0aGlzLl8ocm93LCBhY3Rpb25LZXkpID8/ICcnKSA6ICcnO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIFN0cmluZyhvcHQ/LmxhYmVsID8/ICcnKSxcbiAgICAgIFN0cmluZyhvcHQ/Lmljb24gPz8gJycpLFxuICAgICAgU3RyaW5nKG9wdD8ucHJpb3JpdHkgPz8gJycpLFxuICAgICAgU3RyaW5nKG9wdD8uc2l6ZSA/PyAnJyksXG4gICAgICBTdHJpbmcob3B0Py50b29sdGlwID8/ICcnKSxcbiAgICAgIGFjdGlvblZhbHVlXG4gICAgXS5qb2luKCd8Jyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25CdXR0b25DbGljayhyb3c6IFQsIGNvbDogVGFibGVDb2x1bW48VD4pOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSBjb2wuYWN0aW9uRmllbGQgPz8gY29sLmZpZWxkO1xuICAgIGNvbnN0IHZhbHVlID0ga2V5ID8gdGhpcy5fKHJvdywga2V5KSA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFjdGlvbi5lbWl0KHsgcm93LCB2YWx1ZSwgY29sdW1uOiBjb2wgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVUYWdDb2xvcnModGFnT3B0aW9uczogVGFibGVDZWxsQ29uZmlnPFQsICd0YWcnPik6IHsgYmFja2dyb3VuZDogc3RyaW5nIHwgbnVsbDsgYm9yZGVyOiBzdHJpbmcgfCBudWxsIH0ge1xuICAgIGNvbnN0IGJhc2VDb2xvciA9IHRoaXMuZ2V0VGFnQmFzZUNvbG9yKHRhZ09wdGlvbnMpO1xuICAgIGNvbnN0IGV4cGxpY2l0Rm9yZWdyb3VuZCA9IHRoaXMubm9ybWFsaXplSGV4Q29sb3IodGFnT3B0aW9ucz8uY29sb3IpO1xuICAgIGNvbnN0IGRlcml2ZWRGb3JlZ3JvdW5kID0gdGhpcy5nZXREZXJpdmVkVGFnRm9yZWdyb3VuZChiYXNlQ29sb3IpO1xuICAgIGNvbnN0IGZvcmVncm91bmQgPSB0aGlzLmdldFRhZ0ZvcmVncm91bmQoZXhwbGljaXRGb3JlZ3JvdW5kLCBkZXJpdmVkRm9yZWdyb3VuZCk7XG4gICAgY29uc3QgYmFja2dyb3VuZCA9IHRoaXMuZ2V0VGFnQmFja2dyb3VuZChiYXNlQ29sb3IpO1xuICAgIGNvbnN0IGJvcmRlciA9IGZvcmVncm91bmQgPz8gZGVyaXZlZEZvcmVncm91bmQgPz8gYmFzZUNvbG9yO1xuXG4gICAgcmV0dXJuIHsgYmFja2dyb3VuZCwgYm9yZGVyIH07XG4gIH1cblxuICBwcml2YXRlIGdldFRhZ0Jhc2VDb2xvcih0YWdPcHRpb25zOiBUYWJsZUNlbGxDb25maWc8VCwgJ3RhZyc+KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMubm9ybWFsaXplSGV4Q29sb3IodGFnT3B0aW9ucz8uYmFja2dyb3VuZENvbG9yKSA/PyB0aGlzLm5vcm1hbGl6ZUhleENvbG9yKHRhZ09wdGlvbnM/LmNvbG9yKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVJvd0lkZW50aXR5TGFiZWwocm93SWRlbnRpdHk6IFRhYmxlUm93SWRlbnRpdHkpOiBzdHJpbmcge1xuICAgIGlmIChyb3dJZGVudGl0eS5uYW1lKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKHJvd0lkZW50aXR5Lm5hbWUpO1xuICAgIH1cblxuICAgIGlmIChyb3dJZGVudGl0eS50aXRsZSkge1xuICAgICAgcmV0dXJuIFN0cmluZyhyb3dJZGVudGl0eS50aXRsZSk7XG4gICAgfVxuXG4gICAgaWYgKHJvd0lkZW50aXR5LmxhYmVsKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKHJvd0lkZW50aXR5LmxhYmVsKTtcbiAgICB9XG5cbiAgICBpZiAocm93SWRlbnRpdHkuaWQpIHtcbiAgICAgIHJldHVybiBTdHJpbmcocm93SWRlbnRpdHkuaWQpO1xuICAgIH1cblxuICAgIHJldHVybiAnaXRlbSc7XG4gIH1cblxuICBwcml2YXRlIGdldERlcml2ZWRUYWdGb3JlZ3JvdW5kKGJhc2VDb2xvcjogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiBiYXNlQ29sb3IgPyB0aGlzLmRhcmtlbkhleENvbG9yKGJhc2VDb2xvciwgVEFHX0ZPUkVHUk9VTkRfREFSS0VOX0FNT1VOVCkgOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUYWdGb3JlZ3JvdW5kKGV4cGxpY2l0Rm9yZWdyb3VuZDogc3RyaW5nIHwgbnVsbCwgZGVyaXZlZEZvcmVncm91bmQ6IHN0cmluZyB8IG51bGwpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoZXhwbGljaXRGb3JlZ3JvdW5kICYmIGV4cGxpY2l0Rm9yZWdyb3VuZCAhPT0gJyNmZmZmZmYnKSB7XG4gICAgICByZXR1cm4gZXhwbGljaXRGb3JlZ3JvdW5kO1xuICAgIH1cblxuICAgIHJldHVybiBkZXJpdmVkRm9yZWdyb3VuZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGFnQmFja2dyb3VuZChiYXNlQ29sb3I6IHN0cmluZyB8IG51bGwpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gYmFzZUNvbG9yID8gdGhpcy50b1JnYmEoYmFzZUNvbG9yLCBUQUdfQkFDS0dST1VORF9BTFBIQSkgOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFRhZ1N0eWxlcyhiYWNrZ3JvdW5kOiBzdHJpbmcgfCBudWxsLCBib3JkZXI6IHN0cmluZyB8IG51bGwpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBzdHlsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAgIGlmIChiYWNrZ3JvdW5kKSB7XG4gICAgICBzdHlsZXNbJ2JhY2tncm91bmQtY29sb3InXSA9IGJhY2tncm91bmQ7XG4gICAgfVxuXG4gICAgaWYgKGJvcmRlcikge1xuICAgICAgc3R5bGVzWydib3JkZXItY29sb3InXSA9IGJvcmRlcjtcbiAgICAgIHN0eWxlc1snY29sb3InXSA9IGJvcmRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gc3R5bGVzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPYmplY3RWYWx1ZShzb3VyY2U6IHVua25vd24sIGtleTogc3RyaW5nKTogdW5rbm93biB7XG4gICAgaWYgKCFzb3VyY2UgfHwgdHlwZW9mIHNvdXJjZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIChzb3VyY2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV07XG4gIH1cblxuICBwcml2YXRlIGdldFBhdGhQYXJ0cyhwYXRoOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy5wYXRoUGFydHNDYWNoZS5nZXQocGF0aCk7XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgIHRoaXMucGF0aFBhcnRzQ2FjaGUuc2V0KHBhdGgsIHBhcnRzKTtcbiAgICByZXR1cm4gcGFydHM7XG4gIH1cblxuICBwcml2YXRlIGNsYW1wUGFnZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2hvd1BhZ2luYXRvcigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbWF4Rmlyc3QgPSBNYXRoLm1heChJTkRFWF9aRVJPLCB0aGlzLnRvdGFsUmVjb3JkcygpIC0gdGhpcy5yb3dzKCkpO1xuXG4gICAgaWYgKHRoaXMuZmlyc3QoKSA+IG1heEZpcnN0KSB7XG4gICAgICB0aGlzLmZpcnN0LnNldChJTkRFWF9aRVJPKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlY29uY2lsZVNlbGVjdGlvbldpdGhEYXRhKCk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGFTZXQgPSBuZXcgU2V0KHRoaXMuZGF0YVNpZ25hbCgpKTtcbiAgICBjb25zdCBuZXh0U2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb24oKS5maWx0ZXIoKHJvdykgPT4gZGF0YVNldC5oYXMocm93KSk7XG5cbiAgICBpZiAobmV4dFNlbGVjdGlvbi5sZW5ndGggIT09IHRoaXMuc2VsZWN0aW9uKCkubGVuZ3RoKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZXQobmV4dFNlbGVjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlQWN0aW9uRGlzYWJsZWQoaXRlbTogQWN0aW9uTWVudUl0ZW08VD4sIHJvdzogVCk6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgaXRlbS5kaXNhYmxlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGl0ZW0uZGlzYWJsZWQocm93KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbS5kaXNhYmxlZCA9PT0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplSGV4Q29sb3IodmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmF3ID0gdmFsdWUudHJpbSgpLnJlcGxhY2UoJyMnLCAnJyk7XG5cbiAgICBpZiAoL15bMC05YS1mQS1GXXszfSQvLnRlc3QocmF3KSkge1xuICAgICAgcmV0dXJuIGAjJHtyYXdcbiAgICAgICAgLnNwbGl0KCcnKVxuICAgICAgICAubWFwKChjaGFyKSA9PiBgJHtjaGFyfSR7Y2hhcn1gKVxuICAgICAgICAuam9pbignJylcbiAgICAgICAgLnRvTG93ZXJDYXNlKCl9YDtcbiAgICB9XG5cbiAgICBpZiAoL15bMC05YS1mQS1GXXs2fSQvLnRlc3QocmF3KSkge1xuICAgICAgcmV0dXJuIGAjJHtyYXcudG9Mb3dlckNhc2UoKX1gO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVDb2x1bW5BbGlnbm1lbnQodmFsdWU6IHVua25vd24pOiBUYWJsZUNvbHVtbkFsaWdubWVudCB8IG51bGwge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gJ2xlZnQnIHx8IHZhbHVlID09PSAnY2VudGVyJyB8fCB2YWx1ZSA9PT0gJ3JpZ2h0JyA/IHZhbHVlIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgaGV4VG9SZ2IoaGV4OiBzdHJpbmcpOiB7IHI6IG51bWJlcjsgZzogbnVtYmVyOyBiOiBudW1iZXIgfSB8IG51bGwge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0aGlzLm5vcm1hbGl6ZUhleENvbG9yKGhleCk7XG5cbiAgICBpZiAoIW5vcm1hbGl6ZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGNsZWFuID0gbm9ybWFsaXplZC5zbGljZSgxKTtcblxuICAgIHJldHVybiB7XG4gICAgICByOiBOdW1iZXIucGFyc2VJbnQoY2xlYW4uc2xpY2UoMCwgMiksIEhFWF9SQURJWCksXG4gICAgICBnOiBOdW1iZXIucGFyc2VJbnQoY2xlYW4uc2xpY2UoMiwgNCksIEhFWF9SQURJWCksXG4gICAgICBiOiBOdW1iZXIucGFyc2VJbnQoY2xlYW4uc2xpY2UoNCwgNiksIEhFWF9SQURJWClcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB0b1JnYmEoaGV4OiBzdHJpbmcsIGFscGhhOiBudW1iZXIpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCByZ2IgPSB0aGlzLmhleFRvUmdiKGhleCk7XG5cbiAgICBpZiAoIXJnYikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGByZ2JhKCR7cmdiLnJ9LCAke3JnYi5nfSwgJHtyZ2IuYn0sICR7YWxwaGF9KWA7XG4gIH1cblxuICBwcml2YXRlIGRhcmtlbkhleENvbG9yKGhleDogc3RyaW5nLCBhbW91bnQ6IG51bWJlcik6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IHJnYiA9IHRoaXMuaGV4VG9SZ2IoaGV4KTtcblxuICAgIGlmICghcmdiKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBmYWN0b3IgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCAxIC0gYW1vdW50KSk7XG4gICAgY29uc3QgciA9IE1hdGgucm91bmQocmdiLnIgKiBmYWN0b3IpO1xuICAgIGNvbnN0IGcgPSBNYXRoLnJvdW5kKHJnYi5nICogZmFjdG9yKTtcbiAgICBjb25zdCBiID0gTWF0aC5yb3VuZChyZ2IuYiAqIGZhY3Rvcik7XG5cbiAgICByZXR1cm4gYCMke1tyLCBnLCBiXVxuICAgICAgLm1hcCgodmFsdWUpID0+IE1hdGgubWF4KDAsIE1hdGgubWluKFJHQl9NQVgsIHZhbHVlKSkudG9TdHJpbmcoSEVYX1JBRElYKS5wYWRTdGFydCgyLCAnMCcpKVxuICAgICAgLmpvaW4oJycpfWA7XG4gIH1cblxuICBwcml2YXRlIG1lcmdlT3B0aW9ucyhjZmc6IFRhYmxlT3B0aW9uczxUPik6IFRhYmxlT3B0aW9uczxUPiB7XG4gICAgY29uc3QgYmFzZSA9IERFRkFVTFRfVEFCTEVfT1BUSU9OUyBhcyBUYWJsZU9wdGlvbnM8VD47XG4gICAgY29uc3QgbmV4dCA9IGNmZyA/PyAoREVGQVVMVF9UQUJMRV9PUFRJT05TIGFzIFRhYmxlT3B0aW9uczxUPik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYmFzZSxcbiAgICAgIC4uLm5leHQsXG4gICAgICBzZWFyY2g6IHsgLi4uYmFzZS5zZWFyY2gsIC4uLm5leHQuc2VhcmNoIH0sXG4gICAgICB0YWJsZTogeyAuLi5iYXNlLnRhYmxlLCAuLi5uZXh0LnRhYmxlIH0sXG4gICAgICBlbXB0eTogeyAuLi5iYXNlLmVtcHR5LCAuLi5uZXh0LmVtcHR5IH0sXG4gICAgICBwYWdpbmF0aW9uOiB7IC4uLmJhc2UucGFnaW5hdGlvbiwgLi4ubmV4dC5wYWdpbmF0aW9uIH0sXG4gICAgICBjZWxsczoge1xuICAgICAgICBjaGVja2JveDogeyAuLi4oYmFzZS5jZWxscz8uY2hlY2tib3ggPz8ge30pLCAuLi4obmV4dC5jZWxscz8uY2hlY2tib3ggPz8ge30pIH0sXG4gICAgICAgIGJ1dHRvbjogeyAuLi4oYmFzZS5jZWxscz8uYnV0dG9uID8/IHt9KSwgLi4uKG5leHQuY2VsbHM/LmJ1dHRvbiA/PyB7fSkgfSxcbiAgICAgICAgdGFnOiB7IC4uLihiYXNlLmNlbGxzPy50YWcgPz8ge30pLCAuLi4obmV4dC5jZWxscz8udGFnID8/IHt9KSB9LFxuICAgICAgICBhY3Rpb25zOiB7IC4uLihiYXNlLmNlbGxzPy5hY3Rpb25zID8/IHt9KSwgLi4uKG5leHQuY2VsbHM/LmFjdGlvbnMgPz8ge30pIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG4iLCI8c2VjdGlvblxuICBjbGFzcz1cInNkYy10YWJsZVwiXG4gIFtjbGFzcy5zZGMtdGFibGUtc3RhY2tdPVwiaXNNb2JpbGVcIlxuICBbY2xhc3Muc2RjLXRhYmxlLWZpbHRlcmVkXT1cIiEhZ2xvYmFsRmlsdGVyKCkudHJpbSgpXCJcbiAgW2NsYXNzLnNkYy10YWJsZS0tbG9hZGluZ109XCJpc0xvYWRpbmdcIlxuICBbY2xhc3Muc2RjLXRhYmxlLS1pbml0aWFsLWxvYWRpbmddPVwic2hvd0luaXRpYWxMb2FkaW5nKClcIlxuPlxuICA8c2RjLWxvYWRpbmctc3RhdGVcbiAgICBjbGFzcz1cInNkYy10YWJsZS1sb2FkaW5nLXdyYXBcIlxuICAgIFtsb2FkaW5nXT1cImlzTG9hZGluZ1wiXG4gICAgW2Jsb2NrV2luZG93XT1cImZhbHNlXCJcbiAgICBbYmxvY2tEZWxheU1zXT1cIjBcIlxuICAgIFtpbmRpY2F0b3JdPVwiJ2RvdHMnXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJzZGMtdGFibGUtc2hlbGxcIiBbc3R5bGUuLS1zZGMtdGFibGUtYm9keS1oZWlnaHQucHhdPVwiYm9keVZpZXdwb3J0SGVpZ2h0UHgoKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNkYy10YWJsZS1jYXB0aW9uXCIgKm5nSWY9XCJzaG93U2VhcmNoKClcIj5cbiAgICAgICAgPGRpdiBbc3R5bGUud2lkdGhdPVwiaXNNb2JpbGUgPyAnMTAwJScgOiAnMjAlJ1wiPlxuICAgICAgICAgIDxzZGMtc2VhcmNoYm94XG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzZWFyY2hQbGFjZWhvbGRlcigpXCJcbiAgICAgICAgICAgIFt0cmlnZ2VyTW9kZV09XCJ0cmlnZ2VyTW9kZSgpXCJcbiAgICAgICAgICAgIChvblNlYXJjaCk9XCJvblNlYXJjaFRlcm0oJGV2ZW50KVwiXG4gICAgICAgICAgICAob25DbGVhcik9XCJvbkNsZWFyU2VhcmNoKClcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAgICAgJ3BsYXRmb3JtLmRhdGFjb3JlLmFjY2Vzc2liaWxpdHkuc2VhcmNoX2ZpZWxkJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8dGFibGVcbiAgICAgICAgY2xhc3M9XCJzZGMtdGFibGUtZ3JpZFwiXG4gICAgICAgIHJvbGU9XCJ0YWJsZVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidGFibGVBcmlhTGFiZWxLZXkoKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFthdHRyLmFyaWEtcm93Y291bnRdPVwidG90YWxSZWNvcmRzKClcIlxuICAgICAgICBbYXR0ci5hcmlhLWJ1c3ldPVwiaXNMb2FkaW5nXCJcbiAgICAgID5cbiAgICAgICAgPHRoZWFkPlxuICAgICAgICAgIDx0ciByb2xlPVwicm93XCI+XG4gICAgICAgICAgICBAZm9yIChjb2wgb2YgY29sczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICAgIHNjb3BlPVwiY29sXCJcbiAgICAgICAgICAgICAgICByb2xlPVwiY29sdW1uaGVhZGVyXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Muc2RjLXRhYmxlLXRoLWNoZWNrYm94XT1cImNvbC50eXBlID09PSAnY2hlY2tib3gtc2VsZWN0aW9uJ1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnNkYy10YWJsZS10aC1jdXJyZW5jeV09XCJjb2wudHlwZSA9PT0gJ2N1cnJlbmN5J1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnNkYy10YWJsZS10aC1idXR0b25dPVwiY29sLnR5cGUgPT09ICdidXR0b24nXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Muc2RjLXRhYmxlLXRoLWFjdGlvbnNdPVwiY29sLnR5cGUgPT09ICdhY3Rpb25zJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbC5maWVsZCA/IHRvZ2dsZVNvcnQoY29sLmZpZWxkLCBjb2wuc29ydGFibGUgIT09IGZhbHNlKSA6IG51bGxcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImNvbC5maWVsZCA/IHRvZ2dsZVNvcnQoY29sLmZpZWxkLCBjb2wuc29ydGFibGUgIT09IGZhbHNlKSA6IG51bGxcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBjb2wuZmllbGQgPyB0b2dnbGVTb3J0KGNvbC5maWVsZCwgY29sLnNvcnRhYmxlICE9PSBmYWxzZSkgOiBudWxsXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Muc2RjLXRhYmxlLXNvcnRhYmxlXT1cImNvbC5zb3J0YWJsZSAhPT0gZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5zZGMtdGFibGUtaXMtc2VsZWN0ZWRdPVwic29ydEZpZWxkKCkgPT09IGNvbC5maWVsZFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zb3J0XT1cImdldFNvcnRBcmlhQXR0cmlidXRlKGNvbClcIlxuICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImNvbC5zb3J0YWJsZSAhPT0gZmFsc2UgPyAwIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAgICAgICAgIGNvbC5zb3J0YWJsZSAhPT0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAoY29sLmhlYWRlciB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICsgJyAtICdcbiAgICAgICAgICAgICAgICAgICAgICAgICsgKCdwbGF0Zm9ybS5kYXRhY29yZS5hY2Nlc3NpYmlsaXR5LnNvcnRhYmxlX2NvbHVtbicgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IChjb2wuaGVhZGVyIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLXRhYmxlLXRoLWlubmVyXCIgW2NsYXNzLnNkYy10YWJsZS1zb3J0YWJsZV09XCJjb2wuc29ydGFibGUgIT09IGZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICBAc3dpdGNoIChjb2wudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ2NoZWNrYm94LXNlbGVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNkYy10YWJsZS10aC1sYWJlbFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPnt7IGNvbC5oZWFkZXIgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQge1xuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2RjLXRhYmxlLXRoLWxhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+e3sgY29sLmhlYWRlciB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtdGFibGUtc29ydC1pY29ucyBzZGMtdGFibGUtc29ydC1vdmVybGF5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLnNvcnRhYmxlICE9PSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwic29ydEljb25zVHBsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgY29sOiBjb2wgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtdGFibGUtdGgtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLnR5cGUgPT09ICdjaGVja2JveC1zZWxlY3Rpb24nICYmIChjZWxsQ2ZnKCdjaGVja2JveCcpLnNlbGVjdEFsbCA/PyB0cnVlKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCInc2VsZWN0LWFsbC1jaGVja2JveCdcIlxuICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc1BhZ2VGdWxseVNlbGVjdGVkKClcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVTZWxlY3RQYWdlKGdldENoZWNrZWRWYWx1ZSgkZXZlbnQpKVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyB0b2dnbGVTZWxlY3RQYWdlKCFpc1BhZ2VGdWxseVNlbGVjdGVkKCkpXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIncGxhdGZvcm0uZGF0YWNvcmUuYWNjZXNzaWJpbGl0eS5zZWxlY3RfYWxsX3Jvd3MnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cImlzUGFnZUZ1bGx5U2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInNlbGVjdC1hbGwtY2hlY2tib3hcIiBjbGFzcz1cInNyLW9ubHlcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ3BsYXRmb3JtLmRhdGFjb3JlLmFjY2Vzc2liaWxpdHkuc2VsZWN0X2FsbF9yb3dzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90aGVhZD5cblxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgQGlmIChzaG93SW5pdGlhbExvYWRpbmcoKSkge1xuICAgICAgICAgICAgQGZvciAocm93SW5kZXggb2YgaW5pdGlhbExvYWRpbmdSb3dzKCk7IHRyYWNrIHJvd0luZGV4OyBsZXQgciA9ICRpbmRleCkge1xuICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJzZGMtdGFibGUtaW5pdGlhbC1sb2FkaW5nLXJvd1wiIHJvbGU9XCJyb3dcIiBbYXR0ci5hcmlhLXJvd2luZGV4XT1cInIgKyAxXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgQGZvciAoY29sIG9mIGNvbHM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2RjLXRhYmxlLXRkIHNkYy10YWJsZS10ZGMgc2RjLXRhYmxlLXRkLS1pbml0aWFsLWxvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2RjLXRhYmxlLXRkLWNoZWNrYm94XT1cImNvbC50eXBlID09PSAnY2hlY2tib3gtc2VsZWN0aW9uJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZGMtdGFibGUtdGQtY3VycmVuY3ldPVwiY29sLnR5cGUgPT09ICdjdXJyZW5jeSdcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2RjLXRhYmxlLXRkLWJ1dHRvbl09XCJjb2wudHlwZSA9PT0gJ2J1dHRvbidcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2RjLXRhYmxlLXRkLWFjdGlvbnNdPVwiY29sLnR5cGUgPT09ICdhY3Rpb25zJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbkFsaWduQ2xhc3MoY29sKVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdGl0bGVdPVwiY29sLmhlYWRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJjZWxsXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNkYy10YWJsZS10ZC12YWwgc2RjLXRhYmxlLXRkLXZhbC0taW5pdGlhbC1sb2FkaW5nXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIEBmb3IgKHJvdyBvZiBwYWdlRGF0YSgpOyB0cmFjayAkaW5kZXg7IGxldCByID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgIDx0ciByb2xlPVwicm93XCIgW2F0dHIuYXJpYS1yb3dpbmRleF09XCJyICsgMVwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiBjb2xzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc01vYmlsZTsgZWxzZSBkZXNrdG9wQ29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLXRhYmxlLXRkLW1vYmlsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwic29ydEljb25zVHBsXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgY29sOiBjb2wgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtdGFibGUtdGQgc2RjLXRhYmxlLXRkYyBzZGMtdGFibGUtbW9iaWxlLXRkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZGMtdGFibGUtdGQtY2hlY2tib3hdPVwiY29sLnR5cGUgPT09ICdjaGVja2JveC1zZWxlY3Rpb24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZGMtdGFibGUtdGQtY3VycmVuY3ldPVwiY29sLnR5cGUgPT09ICdjdXJyZW5jeSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNkYy10YWJsZS10ZC1idXR0b25dPVwiY29sLnR5cGUgPT09ICdidXR0b24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZGMtdGFibGUtdGQtYWN0aW9uc109XCJjb2wudHlwZSA9PT0gJ2FjdGlvbnMnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZGMtdGFibGUtaXMtc2VsZWN0ZWRdPVwic29ydEZpZWxkKCkgPT09IGNvbC5maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5BbGlnbkNsYXNzKGNvbClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10aXRsZV09XCJjb2wuaGVhZGVyIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJjZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImNvbC5zb3J0YWJsZSAhPT0gZmFsc2UgPyAwIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29sLmZpZWxkID8gdG9nZ2xlU29ydChjb2wuZmllbGQsIGNvbC5zb3J0YWJsZSAhPT0gZmFsc2UpIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJjb2wuZmllbGQgPyB0b2dnbGVTb3J0KGNvbC5maWVsZCwgY29sLnNvcnRhYmxlICE9PSBmYWxzZSkgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBjb2wuZmllbGQgPyB0b2dnbGVTb3J0KGNvbC5maWVsZCwgY29sLnNvcnRhYmxlICE9PSBmYWxzZSkgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLXRhYmxlLXRkLXZhbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2VsbFRwbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiByb3csIGNvbDogY29sIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rlc2t0b3BDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNkYy10YWJsZS10ZCBzZGMtdGFibGUtdGRjXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2RjLXRhYmxlLXRkLWNoZWNrYm94XT1cImNvbC50eXBlID09PSAnY2hlY2tib3gtc2VsZWN0aW9uJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNkYy10YWJsZS10ZC1jdXJyZW5jeV09XCJjb2wudHlwZSA9PT0gJ2N1cnJlbmN5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNkYy10YWJsZS10ZC1idXR0b25dPVwiY29sLnR5cGUgPT09ICdidXR0b24nXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2RjLXRhYmxlLXRkLWFjdGlvbnNdPVwiY29sLnR5cGUgPT09ICdhY3Rpb25zJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNkYy10YWJsZS1pcy1zZWxlY3RlZF09XCJzb3J0RmllbGQoKSA9PT0gY29sLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5BbGlnbkNsYXNzKGNvbClcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdGl0bGVdPVwiY29sLmhlYWRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImNlbGxcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNkYy10YWJsZS10ZC12YWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2VsbFRwbFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcm93LCBjb2w6IGNvbCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuXG4gICAgICA8c2RjLWVtcHR5LXN0YXRlXG4gICAgICAgICpuZ0lmPVwiIWlzTG9hZGluZyAmJiBvcHRpb25zKCkuZW1wdHk/LnNob3cgIT09IGZhbHNlICYmIHRvdGFsUmVjb3JkcygpID09PSAwXCJcbiAgICAgICAgaWQ9XCJteS1lbXB0eS1zdGF0ZVwiXG4gICAgICAgIGljb25DbGFzcz1cImZhIGZhLWluYm94XCJcbiAgICAgICAgW3RpdGxlXT1cImVtcHR5VGl0bGUoKVwiXG4gICAgICAgIFtkZXNjcmlwdGlvbl09XCJlbXB0eVRleHQoKVwiXG4gICAgICAgIGNsYXNzPVwic2RjLXRhYmxlLWVtcHR5LXN0YXRlXCJcbiAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiZW1wdHlCb2R5SGVpZ2h0UHgoKVwiXG4gICAgICA+XG4gICAgICA8L3NkYy1lbXB0eS1zdGF0ZT5cblxuICAgICAgPGRpdiBjbGFzcz1cInNkYy10YWJsZS1wYWdpbmF0b3JcIiAqbmdJZj1cInNob3dQYWdpbmF0b3IoKVwiPlxuICAgICAgICA8c2RjLXBhZ2luYXRvclxuICAgICAgICAgIFtmaXJzdF09XCJmaXJzdCgpXCJcbiAgICAgICAgICBbcm93c109XCJyb3dzKClcIlxuICAgICAgICAgIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzKClcIlxuICAgICAgICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwiaXNNb2JpbGUgPyBbXSA6IHJvd3NQZXJQYWdlT3B0aW9ucygpXCJcbiAgICAgICAgICBbaXNNb2JpbGVdPVwiaXNNb2JpbGVcIlxuICAgICAgICAgIFt0b3RhbFJlY29yZHNMYWJlbF09XCJ0b3RhbFJlY29yZHNMYWJlbCgpXCJcbiAgICAgICAgICAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID48L3NkYy1wYWdpbmF0b3I+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9zZGMtbG9hZGluZy1zdGF0ZT5cblxuICA8bmctdGVtcGxhdGUgI2NlbGxUcGwgbGV0LXJvdyBsZXQtY29sPVwiY29sXCI+XG4gICAgQHN3aXRjaCAoY29sLnR5cGUpIHtcbiAgICAgIEBjYXNlICgnY2hlY2tib3gtc2VsZWN0aW9uJykge1xuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2VsbENmZygnY2hlY2tib3gnKSBhcyBjaGVja2JveE9wdGlvbnNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLXRhYmxlLWNoZWNrYm94XCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgW2lkXT1cImdldFJvd0NoZWNrYm94SWQocm93KVwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzUm93U2VsZWN0ZWQocm93KVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Ub2dnbGVSb3cocm93LCBnZXRDaGVja2VkVmFsdWUoJGV2ZW50KSlcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgICAgICdwbGF0Zm9ybS5kYXRhY29yZS5hY2Nlc3NpYmlsaXR5LnNlbGVjdF9yb3cnXG4gICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZTogeyBuYW1lOiAoZ2V0Um93Q2hlY2tib3hMYWJlbChyb3cpIHwgdHJhbnNsYXRlKSB9XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxsYWJlbCBbYXR0ci5mb3JdPVwiZ2V0Um93Q2hlY2tib3hJZChyb3cpXCIgY2xhc3M9XCJzci1vbmx5XCI+XG4gICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgJ3BsYXRmb3JtLmRhdGFjb3JlLmFjY2Vzc2liaWxpdHkuc2VsZWN0X3JvdydcbiAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlOiB7IG5hbWU6IChnZXRSb3dDaGVja2JveExhYmVsKHJvdykgfCB0cmFuc2xhdGUpIH1cbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgfVxuXG4gICAgICBAY2FzZSAoJ2RhdGUnKSB7XG4gICAgICAgIHt7IGZvcm1hdERhdGUoXyhyb3csIGNvbC5maWVsZCksIGNvbC5mb3JtYXQgfHwgJ3Nob3J0RGF0ZScpIH19XG4gICAgICB9XG5cbiAgICAgIEBjYXNlICgnc3Ryb25nJykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLXRhYmxlLXN0cm9uZy1sYWJlbFwiPnt7IGNlbGxUZXh0VmFsdWUocm93LCBjb2wuZmllbGQpIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICB9XG5cbiAgICAgIEBjYXNlICgnY29kZScpIHtcbiAgICAgICAgPGNvZGUgY2xhc3M9XCJzZGMtdGFibGUtY29kZS1sYWJlbFwiPnt7IF8ocm93LCBjb2wuZmllbGQpIH19PC9jb2RlPlxuICAgICAgfVxuXG4gICAgICBAY2FzZSAoJ2N1cnJlbmN5Jykge1xuICAgICAgICB7eyBmb3JtYXRDdXJyZW5jeShfKHJvdywgY29sLmZpZWxkKSwgY29sLmZvcm1hdCB8fCAnQlJMJykgfX1cbiAgICAgIH1cblxuICAgICAgQGNhc2UgKCd0YWcnKSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjZWxsQ2ZnKCd0YWcnKSBhcyB0YWdPcHRpb25zXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNkYy10YWJsZS10YWdzXCI+XG4gICAgICAgICAgICBAZm9yICh0YWcgb2YgdGFnc09mKHJvdywgY29sKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtdGFibGUtdGFnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Muc2RjLXRhZy0tZW5hYmxlZF09XCJpc0VuYWJsZWRUYWcodGFnKVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnNkYy10YWctLWRpc2FibGVkXT1cImlzRGlzYWJsZWRUYWcodGFnKVwiXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0VGFnU3R5bGVzKHRhZywgdGFnT3B0aW9ucylcIlxuICAgICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cInRhZ09wdGlvbnMudG9vbHRpcCA/ICh0YWdPcHRpb25zLnRvb2x0aXAgfCB0cmFuc2xhdGUpIDogbnVsbFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSAqbmdJZj1cInRhZ09wdGlvbnMuaWNvblwiIFtjbGFzc109XCJ0YWdPcHRpb25zLmljb25cIj48L2k+XG4gICAgICAgICAgICAgICAge3sgdGFnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICB9XG5cbiAgICAgIEBjYXNlICgnYnV0dG9uJykge1xuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2VsbENmZygnYnV0dG9uJykgYXMgYnV0dG9uT3B0aW9uc1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZGMtdGFibGUtYnV0dG9uXCI+XG4gICAgICAgICAgICA8c2RjLWJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cInNkYy10YWJsZS1hY3Rpb24tYnV0dG9uXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwiYnV0dG9uT3B0aW9ucy5zaXplID8/ICdkZWZhdWx0J1wiXG4gICAgICAgICAgICAgIFtwcmlvcml0eV09XCJidXR0b25PcHRpb25zLnByaW9yaXR5IHx8ICdwcmltYXJ5J1wiXG4gICAgICAgICAgICAgIFtpY29uXT1cImJ1dHRvbk9wdGlvbnMuaWNvblwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJidXR0b25PcHRpb25zLmxhYmVsID8/ICcnXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ1dHRvbk9wdGlvbnMuZGlzYWJsZWQgPz8gZmFsc2VcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwiYnV0dG9uT3B0aW9ucy50b29sdGlwXCJcbiAgICAgICAgICAgICAgW2F0dHIuc2l6ZV09XCJidXR0b25PcHRpb25zLnNpemVcIlxuICAgICAgICAgICAgICBbYXR0ci5wcmlvcml0eV09XCJidXR0b25PcHRpb25zLnByaW9yaXR5IHx8ICdwcmltYXJ5J1wiXG4gICAgICAgICAgICAgIFthdHRyLnNldmVyaXR5XT1cImJ1dHRvbk9wdGlvbnMucHJpb3JpdHkgfHwgJ3ByaW1hcnknXCJcbiAgICAgICAgICAgICAgW2F0dHIuaWNvbl09XCJidXR0b25PcHRpb25zLmljb25cIlxuICAgICAgICAgICAgICBbYXR0ci5sYWJlbF09XCJidXR0b25PcHRpb25zLmxhYmVsXCJcbiAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiYnV0dG9uT3B0aW9ucy5kaXNhYmxlZCA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cImJ1dHRvbk9wdGlvbnMudG9vbHRpcCB8fCBudWxsXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAoYnV0dG9uT3B0aW9ucy5sYWJlbCB8fCBidXR0b25PcHRpb25zLnRvb2x0aXAgfHwgJ3BsYXRmb3JtLmRhdGFjb3JlLmFjY2Vzc2liaWxpdHkuYWN0aW9uX2J1dHRvbicpXG4gICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgKyAnIC0gJ1xuICAgICAgICAgICAgICAgICAgKyAoZ2V0Um93Q2hlY2tib3hMYWJlbChyb3cpIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLWtleV09XCJidXR0b25LZXkocm93LCBjb2wsIGJ1dHRvbk9wdGlvbnMpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImJ1dHRvbk9wdGlvbnMuZGlzYWJsZWQgPyBudWxsIDogb25CdXR0b25DbGljayhyb3csIGNvbClcIlxuICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJidXR0b25PcHRpb25zLmRpc2FibGVkID8gbnVsbCA6IG9uQnV0dG9uQ2xpY2socm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IGJ1dHRvbk9wdGlvbnMuZGlzYWJsZWQgPyBudWxsIDogb25CdXR0b25DbGljayhyb3csIGNvbClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9zZGMtYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIH1cblxuICAgICAgQGNhc2UgKCdhY3Rpb25zJykge1xuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2VsbENmZygnYWN0aW9ucycpIGFzIGFjdGlvbnNPcHRcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNkYy10YWJsZS1hY3Rpb25zXCJcbiAgICAgICAgICAgIFtjbGFzcy5zZGMtdGFibGUtYWN0aW9ucy0tb3Blbl09XCJpc0FjdGlvbnNNZW51T3Blbihyb3csIGNvbClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgI2FjdGlvbnNUcmlnZ2VyXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cInNkYy10YWJsZS1hY3Rpb25zLXRyaWdnZXJcIlxuICAgICAgICAgICAgICBbY2xhc3Muc2RjLXRhYmxlLWFjdGlvbnMtdHJpZ2dlci0tb3Blbl09XCJpc0FjdGlvbnNNZW51T3Blbihyb3csIGNvbClcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgICAgICgoYWN0aW9uc09wdC5idXR0b25MYWJlbCB8fCAncGxhdGZvcm0uZGF0YWNvcmUuYWNjZXNzaWJpbGl0eS5hY3Rpb25zX21lbnUnKSB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICAgICAgICAgICsgJyAtICdcbiAgICAgICAgICAgICAgICAgICsgKGdldFJvd0NoZWNrYm94TGFiZWwocm93KSB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc0FjdGlvbnNNZW51T3Blbihyb3csIGNvbClcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWN0aW9uc01lbnUoJGV2ZW50LCByb3csIGNvbCwgYWN0aW9uc1RyaWdnZXIpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZGMtdGFibGUtYWN0aW9ucy10cmlnZ2VyX19sYWJlbFwiPlxuICAgICAgICAgICAgICAgIHt7IChhY3Rpb25zT3B0LmJ1dHRvbkxhYmVsIHx8ICdwbGF0Zm9ybS5kYXRhY29yZS5hY2Nlc3NpYmlsaXR5LmFjdGlvbnNfbWVudScpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2hldnJvbi1kb3duIHNkYy10YWJsZS1hY3Rpb25zLXRyaWdnZXJfX2ljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICB9XG5cbiAgICAgIEBjYXNlICgnaWNvbi10aXRsZScpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNlbGxDZmcoJ2ljb24tdGl0bGUnKSBhcyBpY29uVGl0bGVPcHRpb25zXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNkYy10YWJsZS1pY29uLXRpdGxlXCI+XG4gICAgICAgICAgICA8aSBbY2xhc3NdPVwiXyhyb3csIGljb25UaXRsZU9wdGlvbnMuaWNvbkZpZWxkKVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuPnt7IGNlbGxUZXh0VmFsdWUocm93LCBjb2wuZmllbGQpIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIH1cblxuICAgICAgQGRlZmF1bHQge1xuICAgICAgICB7eyBjZWxsVGV4dFZhbHVlKHJvdywgY29sLmZpZWxkKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgfVxuICAgIH1cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvc2VjdGlvbj5cbjxkaXZcbiAgKm5nSWY9XCJvcGVuTWVudVN0YXRlKCkgYXMgbWVudVwiXG4gIGNsYXNzPVwic2RjLWFjdGlvbnMtbWVudSBzZGMtYWN0aW9ucy1tZW51LS1wb3J0YWxcIlxuICBbc3R5bGUudG9wLnB4XT1cIm1lbnUudG9wXCJcbiAgW3N0eWxlLmxlZnQucHhdPVwibWVudS5sZWZ0XCJcbiAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJtZW51LndpZHRoXCJcbiAgcm9sZT1cIm1lbnVcIlxuICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbj5cbiAgPGJ1dHRvblxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIGNsYXNzPVwic2RjLWFjdGlvbnMtaXRlbVwiXG4gICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbWVudS5pdGVtc1wiXG4gICAgW2Rpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgIFtjbGFzcy5zZGMtYWN0aW9ucy1pdGVtLS1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgIChjbGljayk9XCJvblBvcnRhbEFjdGlvbkNsaWNrKCRldmVudCwgaXRlbSlcIlxuICA+XG4gICAgPHNwYW4gY2xhc3M9XCJzZGMtYWN0aW9ucy1pdGVtX19jb250ZW50XCI+XG4gICAgICA8aSAqbmdJZj1cIml0ZW0uaWNvblwiIFtjbGFzc109XCJpdGVtLmljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICA8c3Bhbj57eyBpdGVtLmxhYmVsIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgIDwvc3Bhbj5cbiAgPC9idXR0b24+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNzb3J0SWNvbnNUcGwgbGV0LWNvbD1cImNvbFwiPlxuICA8c3BhblxuICAgICpuZ0lmPVwiY29sLnNvcnRhYmxlICE9PSBmYWxzZSAmJiBjb2wudHlwZSAhPT0gJ2NoZWNrYm94LXNlbGVjdGlvbidcIlxuICAgIGNsYXNzPVwic2RjLXRhYmxlLXNvcnQtaW5kaWNhdG9yXCJcbiAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICA+XG4gICAgPGkgKm5nSWY9XCJzb3J0RmllbGQoKSAhPT0gY29sLmZpZWxkXCIgY2xhc3M9XCJmYXMgZmEtc29ydC1hbHQgc2RjLXRhYmxlLXNvcnQtbmV1dHJhbFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICA8aSAqbmdJZj1cInNvcnRGaWVsZCgpID09PSBjb2wuZmllbGQgJiYgc29ydE9yZGVyKCkgPT09IDFcIiBjbGFzcz1cImZhcyBmYS1zb3J0LWFtb3VudC11cC1hbHQgc2RjLXRhYmxlLXNvcnQtYWN0aXZlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgIDxpICpuZ0lmPVwic29ydEZpZWxkKCkgPT09IGNvbC5maWVsZCAmJiBzb3J0T3JkZXIoKSA9PT0gLTFcIiBjbGFzcz1cImZhcyBmYS1zb3J0LWFtb3VudC1kb3duIHNkYy10YWJsZS1zb3J0LWFjdGl2ZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgPC9zcGFuPlxuXG4gIDxzcGFuXG4gICAgKm5nSWY9XCJjb2wuc29ydGFibGUgPT09IGZhbHNlIHx8IGNvbC50eXBlID09PSAnY2hlY2tib3gtc2VsZWN0aW9uJ1wiXG4gICAgY2xhc3M9XCJzZGMtdGFibGUtc29ydC1pbmRpY2F0b3Igc2RjLXRhYmxlLXNvcnQtaW5kaWNhdG9yLXBsYWNlaG9sZGVyXCJcbiAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICA+PC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
655
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3NyYy9mZWF0dXJlcy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNuRSxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHlDQUF5QyxJQUFJLG1DQUFtQyxFQUNoRixtQ0FBbUMsSUFBSSw2QkFBNkIsRUFDcEUsMkJBQTJCLElBQUkscUJBQXFCLEVBQ3BELG1DQUFtQyxJQUFJLDZCQUE2QixFQUNwRSwyQkFBMkIsSUFBSSxxQkFBcUIsRUFDcEQseUJBQXlCLElBQUksbUJBQW1CLEVBQ2hELHdCQUF3QixJQUFJLGtCQUFrQixFQUM5QyxlQUFlLElBQUksU0FBUyxFQUM1QixnQkFBZ0IsSUFBSSxVQUFVLEVBQzlCLGlCQUFpQixJQUFJLFdBQVcsRUFDaEMsYUFBYSxJQUFJLE9BQU8sRUFDeEIsMEJBQTBCLElBQUksb0JBQW9CLEVBQ2xELGtDQUFrQyxJQUFJLDRCQUE0QixFQUNuRSxNQUFNLGtDQUFrQyxDQUFDO0FBbUIxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1B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LGNBQWM7NEZBQWQsY0FBYyxzWkN6RTNCLG95bEJBNFpBLDh5V0RoV0ksWUFBWSx5WEFDWixrQkFBa0Isb1dBQ2xCLGtCQUFrQixnTkFDbEIsZUFBZSw4U0FDZixxQkFBcUIsdUpBQ3JCLG1CQUFtQixrWEFDbkIsZUFBZTs7NEZBT04sY0FBYztrQkFqQjFCLFNBQVM7K0JBQ0UsV0FBVyxjQUNULElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLGtCQUFrQjt3QkFDbEIsa0JBQWtCO3dCQUNsQixlQUFlO3dCQUNmLHFCQUFxQjt3QkFDckIsbUJBQW1CO3dCQUNuQixlQUFlO3FCQUNoQixpQkFHYyxpQkFBaUIsQ0FBQyxRQUFRLG1CQUN4Qix1QkFBdUIsQ0FBQyxNQUFNOzhCQWEzQyxJQUFJO3NCQURQLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQVVyQixJQUFJO3NCQURQLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQWFyQixPQUFPO3NCQURWLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFO2dCQWN0QixNQUFNO3NCQURULEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFO2dCQTBCdEIsU0FBUztzQkFEWixLQUFLO2dCQUtJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQXFKRyxlQUFlO3NCQUR4QixZQUFZO3VCQUFDLGdCQUFnQjtnQkFNcEIsV0FBVztzQkFEcEIsWUFBWTt1QkFBQyx5QkFBeUI7Z0JBTTdCLGNBQWM7c0JBRHZCLFlBQVk7dUJBQUMsZUFBZTtnQkFNbkIsY0FBYztzQkFEdkIsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgY29tcHV0ZWQsXG4gIHNpZ25hbFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5pbXBvcnQgeyBpc01vYmlsZSB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvbGF5b3V0LnV0aWwnO1xuaW1wb3J0IHsgZm9ybWF0TnVtZXJpY1ZhbHVlIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9udW1lcmljLnV0aWwnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9UQUJMRV9PUFRJT05TLFxuICBUQUJMRV9ERUZBVUxUX0xPQURJTkdfVkVSVElDQUxfUEFERElOR19QWCBhcyBERUZBVUxUX0xPQURJTkdfVkVSVElDQUxfUEFERElOR19QWCxcbiAgVEFCTEVfREVGQVVMVF9NSU5fTE9BRElOR19IRUlHSFRfUFggYXMgREVGQVVMVF9NSU5fTE9BRElOR19IRUlHSFRfUFgsXG4gIFRBQkxFX0RFRkFVTFRfUk9XX0hFSUdIVF9QWCBhcyBERUZBVUxUX1JPV19IRUlHSFRfUFgsXG4gIFRBQkxFX0RFRkFVTFRfUk9XX0lEX1BSRVZJRVdfTEVOR1RIIGFzIERFRkFVTFRfUk9XX0lEX1BSRVZJRVdfTEVOR1RILFxuICBUQUJMRV9ERUZBVUxUX1JPV1NfUEVSX1BBR0UgYXMgREVGQVVMVF9ST1dTX1BFUl9QQUdFLFxuICBUQUJMRV9ESVNBQkxFRF9UQUdfVkFMVUVTIGFzIERJU0FCTEVEX1RBR19WQUxVRVMsXG4gIFRBQkxFX0VOQUJMRURfVEFHX1ZBTFVFUyBhcyBFTkFCTEVEX1RBR19WQUxVRVMsXG4gIFRBQkxFX0hFWF9SQURJWCBhcyBIRVhfUkFESVgsXG4gIFRBQkxFX0lOREVYX1pFUk8gYXMgSU5ERVhfWkVSTyxcbiAgVEFCTEVfTUVOVV9HQVBfUFggYXMgTUVOVV9HQVBfUFgsXG4gIFRBQkxFX1JHQl9NQVggYXMgUkdCX01BWCxcbiAgVEFCTEVfVEFHX0JBQ0tHUk9VTkRfQUxQSEEgYXMgVEFHX0JBQ0tHUk9VTkRfQUxQSEEsXG4gIFRBQkxFX1RBR19GT1JFR1JPVU5EX0RBUktFTl9BTU9VTlQgYXMgVEFHX0ZPUkVHUk9VTkRfREFSS0VOX0FNT1VOVFxufSBmcm9tICcuLi8uLi9jb3JlL2NvbnN0YW50cy90YWJsZS5jb25zdCc7XG5pbXBvcnQgdHlwZSB7IFBhZ2luYXRvclN0YXRlIH0gZnJvbSAnLi4vLi4vY29yZS90eXBlcy9wYWdpbmF0b3IudHlwZSc7XG5pbXBvcnQgeyB0eXBlIFNlYXJjaFRyaWdnZXJNb2RlIH0gZnJvbSAnLi4vLi4vY29yZS90eXBlcy9zZWFyY2hib3gudHlwZSc7XG5pbXBvcnQge1xuICB0eXBlIEFjdGlvbk1lbnVJdGVtLFxuICB0eXBlIFJvd0Jhc2UsXG4gIHR5cGUgU29ydE9yZGVyLFxuICB0eXBlIFRhYmxlQWN0aW9uTWVudUl0ZW0gYXMgTmF0aXZlQWN0aW9uTWVudUl0ZW0sXG4gIHR5cGUgVGFibGVDZWxsQ29uZmlnLFxuICB0eXBlIFRhYmxlQ2VsbENvbmZpZ0tleSxcbiAgdHlwZSBUYWJsZUNlbGxDb25maWdNYXAsXG4gIHR5cGUgVGFibGVDb2x1bW5BbGlnbm1lbnQsXG4gIHR5cGUgVGFibGVDb2x1bW4sXG4gIHR5cGUgVGFibGVPcGVuTWVudVN0YXRlIGFzIE9wZW5NZW51U3RhdGUsXG4gIHR5cGUgVGFibGVPcHRpb25zLFxuICB0eXBlIFRhYmxlUm93SWRlbnRpdHksXG4gIHR5cGUgVGFibGVTZWFyY2hFdmVudFxufSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzL3RhYmxlLnR5cGUnO1xuXG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vZW1wdHktc3RhdGUvZW1wdHktc3RhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IFBhZ2luYXRvckNvbXBvbmVudCB9IGZyb20gJy4uL3BhZ2luYXRvci9wYWdpbmF0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IFNlYXJjaGJveENvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaGJveC9zZWFyY2hib3guY29tcG9uZW50JztcbmltcG9ydCB7IExvYWRpbmdTdGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uL2xvYWRpbmctc3RhdGUvbG9hZGluZy1zdGF0ZS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZGMtdGFibGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFNlYXJjaGJveENvbXBvbmVudCxcbiAgICBQYWdpbmF0b3JDb21wb25lbnQsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIExvYWRpbmdTdGF0ZUNvbXBvbmVudCxcbiAgICBFbXB0eVN0YXRlQ29tcG9uZW50LFxuICAgIFRyYW5zbGF0ZU1vZHVsZVxuICBdLFxuICBzdHlsZVVybDogJy4vdGFibGUuY29tcG9uZW50LnNjc3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQ8VCBleHRlbmRzIFJvd0Jhc2UgPSBSb3dCYXNlPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29sc1NpZ25hbCA9IHNpZ25hbDxUYWJsZUNvbHVtbjxUPltdPihbXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0YVNpZ25hbCA9IHNpZ25hbDxUW10+KFtdKTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2FkaW5nU2lnbmFsID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ1NpZ25hbCA9IHNpZ25hbDxUYWJsZU9wdGlvbnM8VD4+KHRoaXMubWVyZ2VPcHRpb25zKERFRkFVTFRfVEFCTEVfT1BUSU9OUyBhcyBUYWJsZU9wdGlvbnM8VD4pKTtcbiAgcHJpdmF0ZSBfY29uZmlnOiBUYWJsZU9wdGlvbnM8VD4gPSBERUZBVUxUX1RBQkxFX09QVElPTlMgYXMgVGFibGVPcHRpb25zPFQ+O1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBvcGVuTWVudVN0YXRlID0gc2lnbmFsPE9wZW5NZW51U3RhdGU8VD4gfCBudWxsPihudWxsKTtcblxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBzZXQgY29scyh2YWx1ZTogVGFibGVDb2x1bW48VD5bXSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmNvbHNTaWduYWwuc2V0KHZhbHVlID8/IFtdKTtcbiAgfVxuXG4gIGdldCBjb2xzKCk6IFRhYmxlQ29sdW1uPFQ+W10ge1xuICAgIHJldHVybiB0aGlzLmNvbHNTaWduYWwoKTtcbiAgfVxuXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIHNldCBkYXRhKHZhbHVlOiBUW10gfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5kYXRhU2lnbmFsLnNldCh2YWx1ZSA/PyBbXSk7XG4gICAgdGhpcy5yZWNvbmNpbGVTZWxlY3Rpb25XaXRoRGF0YSgpO1xuICAgIHRoaXMuY2xhbXBQYWdlKCk7XG4gICAgdGhpcy5jbG9zZUFjdGlvbnNNZW51KCk7XG4gIH1cblxuICBnZXQgZGF0YSgpOiBUW10ge1xuICAgIHJldHVybiB0aGlzLmRhdGFTaWduYWwoKTtcbiAgfVxuXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiBmYWxzZSB9KVxuICBzZXQgbG9hZGluZyh2YWx1ZTogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmxvYWRpbmdTaWduYWwuc2V0KHZhbHVlID09PSB0cnVlKTtcblxuICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5jbG9zZUFjdGlvbnNNZW51KCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubG9hZGluZ1NpZ25hbCgpO1xuICB9XG5cbiAgQElucHV0KHsgcmVxdWlyZWQ6IGZhbHNlIH0pXG4gIHNldCBjb25maWcodmFsdWU6IFRhYmxlT3B0aW9uczxUPiB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBuZXh0ID0gdmFsdWUgPz8gKERFRkFVTFRfVEFCTEVfT1BUSU9OUyBhcyBUYWJsZU9wdGlvbnM8VD4pO1xuXG4gICAgaWYgKHRoaXMuX2NvbmZpZyA9PT0gbmV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbmZpZyA9IG5leHQ7XG4gICAgY29uc3QgbWVyZ2VkID0gdGhpcy5tZXJnZU9wdGlvbnMobmV4dCk7XG4gICAgdGhpcy5jb25maWdTaWduYWwuc2V0KG1lcmdlZCk7XG5cbiAgICBjb25zdCBuZXh0Um93cyA9IG1lcmdlZC5wYWdpbmF0aW9uPy5yb3dzUGVyUGFnZSA/PyBERUZBVUxUX1JPV1NfUEVSX1BBR0U7XG4gICAgdGhpcy5yb3dzLnNldChuZXh0Um93cyk7XG4gICAgdGhpcy5maXJzdC5zZXQoSU5ERVhfWkVSTyk7XG5cbiAgICB0aGlzLnBhdGhQYXJ0c0NhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5yb3dDaGVja2JveElkQ2FjaGUgPSBuZXcgV2Vha01hcDxvYmplY3QsIHN0cmluZz4oKTtcbiAgICB0aGlzLmNsb3NlQWN0aW9uc01lbnUoKTtcbiAgfVxuXG4gIGdldCBjb25maWcoKTogVGFibGVPcHRpb25zPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGFyaWFMYWJlbCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5hcmlhTGFiZWxTaWduYWwuc2V0KHZhbHVlKTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBhY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgY29sdW1uOiBUYWJsZUNvbHVtbjxUPjsgcm93OiBUOyB2YWx1ZTogdW5rbm93biB9PigpO1xuICBAT3V0cHV0KCkgbGF6eUxvYWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZmlyc3Q6IG51bWJlcjsgcm93czogbnVtYmVyIH0+KCk7XG5cbiAgZ2V0IGFyaWFMYWJlbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmFyaWFMYWJlbFNpZ25hbCgpO1xuICB9XG5cbiAgZ2V0IGlzTG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nU2lnbmFsKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNNb2JpbGU6IGJvb2xlYW4gPSBpc01vYmlsZSgpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXJpYUxhYmVsU2lnbmFsID0gc2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3B0aW9ucyA9IGNvbXB1dGVkPFRhYmxlT3B0aW9uczxUPj4oKCkgPT4gdGhpcy5jb25maWdTaWduYWwoKSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNob3dTZWFyY2ggPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB0aGlzLm9wdGlvbnMoKS5zZWFyY2g/LnNob3cgPz8gZmFsc2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2hvd1BhZ2luYXRvciA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHRoaXMub3B0aW9ucygpLnBhZ2luYXRpb24/LnNob3cgPz8gZmFsc2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2hvd0luaXRpYWxMb2FkaW5nID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4gdGhpcy5sb2FkaW5nU2lnbmFsKCkgJiYgdGhpcy5kYXRhU2lnbmFsKCkubGVuZ3RoID09PSAwKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm93c1BlclBhZ2VPcHRpb25zID0gY29tcHV0ZWQ8bnVtYmVyW10+KCgpID0+IHRoaXMub3B0aW9ucygpLnBhZ2luYXRpb24/LnJvd3NQZXJQYWdlT3B0aW9ucyA/PyBbXSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZWFyY2hQbGFjZWhvbGRlciA9IGNvbXB1dGVkPHN0cmluZz4oKCkgPT4gdGhpcy5vcHRpb25zKCkuc2VhcmNoPy5wbGFjZWhvbGRlciA/PyAnJyk7XG4gIHByb3RlY3RlZCByZWFkb25seSB0cmlnZ2VyTW9kZSA9IGNvbXB1dGVkPFNlYXJjaFRyaWdnZXJNb2RlPigoKSA9PiB0aGlzLm9wdGlvbnMoKS5zZWFyY2g/LnR5cGUgPz8gJ2F1dG8nKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRvdGFsUmVjb3Jkc0xhYmVsID0gY29tcHV0ZWQ8c3RyaW5nPigoKSA9PiB0aGlzLm9wdGlvbnMoKS50YWJsZT8udG90YWxSZWNvcmRzTGFiZWwgPz8gJycpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZW1wdHlUaXRsZSA9IGNvbXB1dGVkPHN0cmluZz4oKCkgPT4gdGhpcy5vcHRpb25zKCkuZW1wdHk/LnRpdGxlID8/ICcnKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGVtcHR5VGV4dCA9IGNvbXB1dGVkPHN0cmluZz4oKCkgPT4gdGhpcy5vcHRpb25zKCkuZW1wdHk/LnRleHQgPz8gJycpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBnbG9iYWxGaWx0ZXIgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzb3J0RmllbGQgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzb3J0T3JkZXIgPSBzaWduYWw8U29ydE9yZGVyPigwKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGlvbiA9IHNpZ25hbDxUW10+KFtdKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZpcnN0ID0gc2lnbmFsPG51bWJlcj4oSU5ERVhfWkVSTyk7XG4gIHByb3RlY3RlZCByZWFkb25seSByb3dzID0gc2lnbmFsPG51bWJlcj4oREVGQVVMVF9ST1dTX1BFUl9QQUdFKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2VsbHNDZmcgPSBjb21wdXRlZDxUYWJsZUNlbGxDb25maWdNYXA8VD4+KCgpID0+IHtcbiAgICBjb25zdCBjZWxscyA9IHRoaXMub3B0aW9ucygpLmNlbGxzO1xuICAgIHJldHVybiB7XG4gICAgICBjaGVja2JveDogY2VsbHM/LmNoZWNrYm94ID8/IHt9LFxuICAgICAgYnV0dG9uOiBjZWxscz8uYnV0dG9uID8/IHt9LFxuICAgICAgdGFnOiBjZWxscz8udGFnID8/IHt9LFxuICAgICAgYWN0aW9uczogY2VsbHM/LmFjdGlvbnMgPz8ge30sXG4gICAgICAnaWNvbi10aXRsZSc6IGNlbGxzPy5bJ2ljb24tdGl0bGUnXSA/PyB7IGljb25GaWVsZDogJ2ljb24nIH1cbiAgICB9O1xuICB9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmlsdGVyZWREYXRhID0gY29tcHV0ZWQ8VFtdPigoKSA9PiB7XG4gICAgY29uc3QgcSA9IHRoaXMuZ2xvYmFsRmlsdGVyKCkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YVNpZ25hbCgpO1xuICAgIGNvbnN0IGNvbHMgPSB0aGlzLmNvbHNTaWduYWwoKTtcblxuICAgIGlmICghcSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY29uc3QgZmllbGRzID0gY29sc1xuICAgICAgLmZpbHRlcigoYykgPT4gYy5zZWFyY2hhYmxlID8/IHRydWUpXG4gICAgICAuZmlsdGVyKChjKSA9PiAhIWMuZmllbGQpXG4gICAgICAubWFwKChjKSA9PiBjLmZpZWxkISkgYXMgc3RyaW5nW107XG5cbiAgICBpZiAoZmllbGRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKChyb3cpID0+XG4gICAgICBmaWVsZHMuc29tZSgoZmllbGQpID0+IHtcbiAgICAgICAgY29uc3QgdiA9IHRoaXMuXyhyb3csIGZpZWxkKTtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2KSkge1xuICAgICAgICAgIHJldHVybiB2LmpvaW4oJyAnKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFN0cmluZyh2ID8/ICcnKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHEpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc29ydGVkRGF0YSA9IGNvbXB1dGVkPFRbXT4oKCkgPT4ge1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5zb3J0RmllbGQoKTtcbiAgICBjb25zdCBvcmRlciA9IHRoaXMuc29ydE9yZGVyKCk7XG4gICAgY29uc3QgYXJyID0gWy4uLnRoaXMuZmlsdGVyZWREYXRhKCldO1xuXG4gICAgaWYgKCFmaWVsZCB8fCBvcmRlciA9PT0gMCkge1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IHZhID0gdGhpcy5fKGEsIGZpZWxkKTtcbiAgICAgIGNvbnN0IHZiID0gdGhpcy5fKGIsIGZpZWxkKTtcblxuICAgICAgaWYgKHZhID09IG51bGwgJiYgdmIgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIC1vcmRlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKHZiID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG9yZGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHZhID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgdmIgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiAodmEgLSB2YikgKiBvcmRlcjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFN0cmluZyh2YSkubG9jYWxlQ29tcGFyZShTdHJpbmcodmIpKSAqIG9yZGVyO1xuICAgIH0pO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdG90YWxSZWNvcmRzID0gY29tcHV0ZWQ8bnVtYmVyPigoKSA9PiB0aGlzLnNvcnRlZERhdGEoKS5sZW5ndGgpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBwYWdlRGF0YSA9IGNvbXB1dGVkPFRbXT4oKCkgPT4ge1xuICAgIGlmICghdGhpcy5zaG93UGFnaW5hdG9yKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvcnRlZERhdGEoKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydCA9IHRoaXMuZmlyc3QoKTtcbiAgICBjb25zdCBlbmQgPSBzdGFydCArIHRoaXMucm93cygpO1xuICAgIHJldHVybiB0aGlzLnNvcnRlZERhdGEoKS5zbGljZShzdGFydCwgZW5kKTtcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGluaXRpYWxMb2FkaW5nUm93cyA9IGNvbXB1dGVkPG51bWJlcltdPigoKSA9PiB7XG4gICAgY29uc3Qgcm93c0Zyb21TdGF0ZSA9IHRoaXMucm93cygpO1xuICAgIGNvbnN0IHJvd3NGcm9tQ29uZmlnID0gdGhpcy5vcHRpb25zKCkucGFnaW5hdGlvbj8ucm93c1BlclBhZ2UgPz8gREVGQVVMVF9ST1dTX1BFUl9QQUdFO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRSb3dzID0gTnVtYmVyKHJvd3NGcm9tU3RhdGUgfHwgcm93c0Zyb21Db25maWcgfHwgREVGQVVMVF9ST1dTX1BFUl9QQUdFKTtcbiAgICBjb25zdCBzYWZlUm93cyA9IE51bWJlci5pc0Zpbml0ZShub3JtYWxpemVkUm93cykgJiYgbm9ybWFsaXplZFJvd3MgPiAwID8gbm9ybWFsaXplZFJvd3MgOiBERUZBVUxUX1JPV1NfUEVSX1BBR0U7XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogc2FmZVJvd3MgfSwgKF8sIGluZGV4KSA9PiBpbmRleCk7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3Rpb25TZXQgPSBjb21wdXRlZDxTZXQ8VD4+KCgpID0+IG5ldyBTZXQodGhpcy5zZWxlY3Rpb24oKSkpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBib2R5Vmlld3BvcnRIZWlnaHRQeCA9IGNvbXB1dGVkPG51bWJlcj4oKCkgPT4ge1xuICAgIGNvbnN0IHJvd3NGcm9tU3RhdGUgPSB0aGlzLnJvd3MoKTtcbiAgICBjb25zdCByb3dzRnJvbUNvbmZpZyA9IHRoaXMub3B0aW9ucygpLnBhZ2luYXRpb24/LnJvd3NQZXJQYWdlID8/IERFRkFVTFRfUk9XU19QRVJfUEFHRTtcbiAgICBjb25zdCBub3JtYWxpemVkUm93cyA9IE51bWJlcihyb3dzRnJvbVN0YXRlIHx8IHJvd3NGcm9tQ29uZmlnIHx8IERFRkFVTFRfUk9XU19QRVJfUEFHRSk7XG4gICAgY29uc3Qgc2FmZVJvd3MgPSBOdW1iZXIuaXNGaW5pdGUobm9ybWFsaXplZFJvd3MpICYmIG5vcm1hbGl6ZWRSb3dzID4gMCA/IG5vcm1hbGl6ZWRSb3dzIDogREVGQVVMVF9ST1dTX1BFUl9QQUdFO1xuXG4gICAgY29uc3Qgcm93SGVpZ2h0ID0gdGhpcy5pc01vYmlsZSA/IDY0IDogREVGQVVMVF9ST1dfSEVJR0hUX1BYO1xuICAgIGNvbnN0IGVzdGltYXRlZEhlaWdodCA9IHNhZmVSb3dzICogcm93SGVpZ2h0ICsgREVGQVVMVF9MT0FESU5HX1ZFUlRJQ0FMX1BBRERJTkdfUFg7XG5cbiAgICByZXR1cm4gTWF0aC5tYXgoREVGQVVMVF9NSU5fTE9BRElOR19IRUlHSFRfUFgsIGVzdGltYXRlZEhlaWdodCk7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBlbXB0eUJvZHlIZWlnaHRQeCA9IGNvbXB1dGVkPG51bWJlcj4oKCkgPT4gdGhpcy5ib2R5Vmlld3BvcnRIZWlnaHRQeCgpKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHBhdGhQYXJ0c0NhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZ1tdPigpO1xuICBwcml2YXRlIHJvd0NoZWNrYm94SWRDYWNoZSA9IG5ldyBXZWFrTWFwPG9iamVjdCwgc3RyaW5nPigpO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJylcbiAgcHJvdGVjdGVkIG9uRG9jdW1lbnRDbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlQWN0aW9uc01lbnUoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24uZXNjYXBlJylcbiAgcHJvdGVjdGVkIG9uRXNjYXBlS2V5KCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VBY3Rpb25zTWVudSgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gIHByb3RlY3RlZCBvbldpbmRvd1Jlc2l6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlQWN0aW9uc01lbnUoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzY3JvbGwnKVxuICBwcm90ZWN0ZWQgb25XaW5kb3dTY3JvbGwoKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZUFjdGlvbnNNZW51KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25TZWFyY2hUZXJtKGV2T3JWYWw6IFRhYmxlU2VhcmNoRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0ZXJtID0gdHlwZW9mIGV2T3JWYWwgPT09ICdzdHJpbmcnID8gZXZPclZhbCA6IGV2T3JWYWw/LmRldGFpbCA/PyAnJztcbiAgICB0aGlzLmdsb2JhbEZpbHRlci5zZXQoU3RyaW5nKHRlcm0pKTtcbiAgICB0aGlzLmZpcnN0LnNldChJTkRFWF9aRVJPKTtcbiAgICB0aGlzLmNsb3NlQWN0aW9uc01lbnUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkNsZWFyU2VhcmNoKF9ldj86IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLmdsb2JhbEZpbHRlci5zZXQoJycpO1xuICAgIHRoaXMuZmlyc3Quc2V0KElOREVYX1pFUk8pO1xuICAgIHRoaXMuY2xvc2VBY3Rpb25zTWVudSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRvZ2dsZVNvcnQoZmllbGQ6IHN0cmluZywgZW5hYmxlZCA9IHRydWUpOiB2b2lkIHtcbiAgICBpZiAoIWVuYWJsZWQgfHwgIWZpZWxkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc29ydEZpZWxkKCkgIT09IGZpZWxkKSB7XG4gICAgICB0aGlzLnNvcnRGaWVsZC5zZXQoZmllbGQpO1xuICAgICAgdGhpcy5zb3J0T3JkZXIuc2V0KDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjdXJyZW50T3JkZXIgPSB0aGlzLnNvcnRPcmRlcigpO1xuXG4gICAgICBpZiAoY3VycmVudE9yZGVyID09PSAxKSB7XG4gICAgICAgIHRoaXMuc29ydE9yZGVyLnNldCgtMSk7XG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRPcmRlciA9PT0gLTEpIHtcbiAgICAgICAgdGhpcy5zb3J0T3JkZXIuc2V0KDApO1xuICAgICAgICB0aGlzLnNvcnRGaWVsZC5zZXQobnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNvcnRPcmRlci5zZXQoMSk7XG4gICAgICAgIHRoaXMuc29ydEZpZWxkLnNldChmaWVsZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5maXJzdC5zZXQoSU5ERVhfWkVSTyk7XG4gICAgdGhpcy5jbG9zZUFjdGlvbnNNZW51KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U29ydEFyaWFBdHRyaWJ1dGUoY29sOiBUYWJsZUNvbHVtbjxUPik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGNvbC5zb3J0YWJsZSA9PT0gZmFsc2UgfHwgIWNvbC5maWVsZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zb3J0RmllbGQoKSAhPT0gY29sLmZpZWxkKSB7XG4gICAgICByZXR1cm4gJ25vbmUnO1xuICAgIH1cblxuICAgIGNvbnN0IG9yZGVyID0gdGhpcy5zb3J0T3JkZXIoKTtcblxuICAgIGlmIChvcmRlciA9PT0gMSkge1xuICAgICAgcmV0dXJuICdhc2NlbmRpbmcnO1xuICAgIH1cblxuICAgIGlmIChvcmRlciA9PT0gLTEpIHtcbiAgICAgIHJldHVybiAnZGVzY2VuZGluZyc7XG4gICAgfVxuXG4gICAgcmV0dXJuICdub25lJztcbiAgfVxuXG4gIHByb3RlY3RlZCBjb2x1bW5BbGlnbkNsYXNzKGNvbDogVGFibGVDb2x1bW48VD4pOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBhbGlnbiA9IHRoaXMubm9ybWFsaXplQ29sdW1uQWxpZ25tZW50KGNvbC5hbGlnbik7XG4gICAgcmV0dXJuIGFsaWduID8gYHNkYy10YWJsZS10ZC1hbGlnbi0ke2FsaWdufWAgOiBudWxsO1xuICB9XG5cbiAgb25QYWdlQ2hhbmdlKGU6IFBhZ2luYXRvclN0YXRlKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dEZpcnN0ID0gZS5maXJzdCA/PyBJTkRFWF9aRVJPO1xuICAgIGNvbnN0IG5leHRSb3dzID0gZS5yb3dzID8/IHRoaXMub3B0aW9ucygpLnBhZ2luYXRpb24/LnJvd3NQZXJQYWdlID8/IERFRkFVTFRfUk9XU19QRVJfUEFHRTtcblxuICAgIHRoaXMuZmlyc3Quc2V0KG5leHRGaXJzdCk7XG4gICAgdGhpcy5yb3dzLnNldChuZXh0Um93cyk7XG4gICAgdGhpcy5sYXp5TG9hZC5lbWl0KHsgZmlyc3Q6IG5leHRGaXJzdCwgcm93czogbmV4dFJvd3MgfSk7XG4gICAgdGhpcy5jbG9zZUFjdGlvbnNNZW51KCk7XG4gIH1cblxuICBnZXRDaGVja2VkVmFsdWUoZXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblRvZ2dsZVJvdyhyb3c6IFQsIGNoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0ID0gbmV3IFNldCh0aGlzLnNlbGVjdGlvblNldCgpKTtcblxuICAgIGlmIChjaGVja2VkKSB7XG4gICAgICBuZXh0LmFkZChyb3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0LmRlbGV0ZShyb3cpO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0aW9uLnNldChbLi4ubmV4dF0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzUm93U2VsZWN0ZWQocm93OiBUKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uU2V0KCkuaGFzKHJvdyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdG9nZ2xlU2VsZWN0UGFnZShjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dCA9IG5ldyBTZXQodGhpcy5zZWxlY3Rpb25TZXQoKSk7XG5cbiAgICB0aGlzLnBhZ2VEYXRhKCkuZm9yRWFjaCgocikgPT4ge1xuICAgICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgICAgbmV4dC5hZGQocik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0LmRlbGV0ZShyKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuc2VsZWN0aW9uLnNldChbLi4ubmV4dF0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzUGFnZUZ1bGx5U2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmlzaWJsZVJvd3MgPSB0aGlzLnBhZ2VEYXRhKCk7XG5cbiAgICBpZiAodmlzaWJsZVJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGlvblNldCgpO1xuICAgIHJldHVybiB2aXNpYmxlUm93cy5ldmVyeSgocikgPT4gc2VsZWN0ZWQuaGFzKHIpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRSb3dDaGVja2JveElkKHJvdzogVCk6IHN0cmluZyB7XG4gICAgaWYgKHJvdyAmJiB0eXBlb2Ygcm93ID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy5yb3dDaGVja2JveElkQ2FjaGUuZ2V0KHJvdyBhcyBvYmplY3QpO1xuXG4gICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJvd0lkZW50aXR5ID0gcm93IGFzIFRhYmxlUm93SWRlbnRpdHk7XG4gICAgICBjb25zdCByb3dJZCA9XG4gICAgICAgIHJvd0lkZW50aXR5LmlkID8/XG4gICAgICAgIHJvd0lkZW50aXR5Lm5hbWUgPz9cbiAgICAgICAgSlNPTi5zdHJpbmdpZnkocm93KS5zdWJzdHJpbmcoSU5ERVhfWkVSTywgREVGQVVMVF9ST1dfSURfUFJFVklFV19MRU5HVEgpO1xuXG4gICAgICBjb25zdCBuZXh0SWQgPSBgY2hlY2tib3gtcm93LSR7U3RyaW5nKHJvd0lkKS5yZXBsYWNlKC9bXmEtekEtWjAtOV0vZywgJy0nKX1gO1xuICAgICAgdGhpcy5yb3dDaGVja2JveElkQ2FjaGUuc2V0KHJvdyBhcyBvYmplY3QsIG5leHRJZCk7XG4gICAgICByZXR1cm4gbmV4dElkO1xuICAgIH1cblxuICAgIHJldHVybiBgY2hlY2tib3gtcm93LSR7U3RyaW5nKHJvdyl9YDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRSb3dDaGVja2JveExhYmVsKHJvdzogVCk6IHN0cmluZyB7XG4gICAgY29uc3Qgcm93SWRlbnRpdHkgPSByb3cgYXMgVGFibGVSb3dJZGVudGl0eTtcbiAgICBjb25zdCBsYWJlbCA9IHRoaXMucmVzb2x2ZVJvd0lkZW50aXR5TGFiZWwocm93SWRlbnRpdHkpO1xuXG4gICAgcmV0dXJuIFN0cmluZyhsYWJlbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdGFibGVBcmlhTGFiZWxLZXkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hcmlhTGFiZWxTaWduYWwoKSA/PyAncGxhdGZvcm0uZGF0YWNvcmUuYWNjZXNzaWJpbGl0eS50YWJsZV9kZXNjcmlwdGlvbic7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2VsbFRleHRWYWx1ZShyb3c6IFQsIGZpZWxkPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuXyhyb3csIGZpZWxkKTtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogU3RyaW5nKHZhbHVlID8/ICcnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjZWxsQ2ZnPEsgZXh0ZW5kcyBUYWJsZUNlbGxDb25maWdLZXk+KGtpbmQ6IEspOiBUYWJsZUNlbGxDb25maWc8VCwgSz4ge1xuICAgIHJldHVybiB0aGlzLmNlbGxzQ2ZnKClba2luZF07XG4gIH1cblxuICBwcm90ZWN0ZWQgdGFnc09mKHJvdzogVCwgY29sOiBUYWJsZUNvbHVtbjxUPik6IHN0cmluZ1tdIHtcbiAgICBpZiAoIWNvbC5maWVsZCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJhdyA9IHRoaXMuXyhyb3csIGNvbC5maWVsZCk7XG4gICAgY29uc3QgYXJyID0gQXJyYXkuaXNBcnJheShyYXcpID8gcmF3IDogW107XG4gICAgY29uc3QgbWF4SXRlbXMgPSB0aGlzLm9wdGlvbnMoKS5jZWxscz8udGFnPy5tYXhJdGVtcztcbiAgICBjb25zdCBzbGljZWQgPSB0eXBlb2YgbWF4SXRlbXMgPT09ICdudW1iZXInID8gYXJyLnNsaWNlKElOREVYX1pFUk8sIG1heEl0ZW1zKSA6IGFycjtcblxuICAgIHJldHVybiBzbGljZWQubWFwKCh0YWcpID0+IFN0cmluZyh0YWcgPz8gJycpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpc0VuYWJsZWRUYWcodGFnOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRU5BQkxFRF9UQUdfVkFMVUVTLmhhcyh0YWcudHJpbSgpLnRvTG93ZXJDYXNlKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzRGlzYWJsZWRUYWcodGFnOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRElTQUJMRURfVEFHX1ZBTFVFUy5oYXModGFnLnRyaW0oKS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRUYWdTdHlsZXModGFnOiBzdHJpbmcsIHRhZ09wdGlvbnM6IFRhYmxlQ2VsbENvbmZpZzxULCAndGFnJz4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuaXNFbmFibGVkVGFnKHRhZykgfHwgdGhpcy5pc0Rpc2FibGVkVGFnKHRhZykpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbG9ycyA9IHRoaXMucmVzb2x2ZVRhZ0NvbG9ycyh0YWdPcHRpb25zKTtcbiAgICBjb25zdCBzdHlsZXMgPSB0aGlzLmJ1aWxkVGFnU3R5bGVzKGNvbG9ycy5iYWNrZ3JvdW5kLCBjb2xvcnMuYm9yZGVyKTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhzdHlsZXMpLmxlbmd0aCA+IDAgPyBzdHlsZXMgOiBudWxsO1xuICB9XG5cbiAgcHJvdGVjdGVkIF8gPSAob2JqOiBULCBwYXRoPzogc3RyaW5nKTogdW5rbm93biA9PiB7XG4gICAgaWYgKCFwYXRoKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnRzID0gdGhpcy5nZXRQYXRoUGFydHMocGF0aCk7XG4gICAgbGV0IGFjYzogdW5rbm93biA9IG9iajtcblxuICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xuICAgICAgY29uc3QgbmV4dCA9IHRoaXMuZ2V0T2JqZWN0VmFsdWUoYWNjLCBwYXJ0KTtcblxuICAgICAgaWYgKHR5cGVvZiBuZXh0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBhY2MgPSBuZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBhY2M7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGZvcm1hdERhdGUodmFsdWU6IHVua25vd24sIF9mb3JtYXQgPSAnc2hvcnREYXRlJyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh1bmRlZmluZWQpLmZvcm1hdChuZXcgRGF0ZSh2YWx1ZSBhcyBzdHJpbmcpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBTdHJpbmcodmFsdWUgPz8gJycpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBmb3JtYXRDdXJyZW5jeSh2YWx1ZTogdW5rbm93biwgY3VycmVuY3kgPSAnQlJMJyk6IHN0cmluZyB7XG4gICAgY29uc3QgbnVtZXJpY1ZhbHVlID0gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBudWxsO1xuXG4gICAgcmV0dXJuIGZvcm1hdE51bWVyaWNWYWx1ZShudW1lcmljVmFsdWUsIHtcbiAgICAgIHN0eWxlOiAnY3VycmVuY3knLFxuICAgICAgY3VycmVuY3lcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVBY3Rpb25zTWVudShldmVudDogRXZlbnQsIHJvdzogVCwgY29sOiBUYWJsZUNvbHVtbjxUPiwgdHJpZ2dlckVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAodGhpcy5pc0FjdGlvbnNNZW51T3Blbihyb3csIGNvbCkpIHtcbiAgICAgIHRoaXMuY2xvc2VBY3Rpb25zTWVudSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdGlvbnNPcHQgPSB0aGlzLmNlbGxDZmcoJ2FjdGlvbnMnKTtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuYWN0aW9uSXRlbXNGb3Iocm93LCBhY3Rpb25zT3B0KTtcbiAgICBjb25zdCByZWN0ID0gdHJpZ2dlckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICB0aGlzLm9wZW5NZW51U3RhdGUuc2V0KHtcbiAgICAgIHJvdyxcbiAgICAgIGNvbCxcbiAgICAgIGl0ZW1zLFxuICAgICAgY2xvc2VPbkNsaWNrOiBhY3Rpb25zT3B0Py5jbG9zZU9uQ2xpY2sgIT09IGZhbHNlLFxuICAgICAgdG9wOiByZWN0LmJvdHRvbSArIE1FTlVfR0FQX1BYLFxuICAgICAgbGVmdDogcmVjdC5sZWZ0LFxuICAgICAgd2lkdGg6IHJlY3Qud2lkdGhcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbG9zZUFjdGlvbnNNZW51KCk6IHZvaWQge1xuICAgIHRoaXMub3Blbk1lbnVTdGF0ZS5zZXQobnVsbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNBY3Rpb25zTWVudU9wZW4ocm93OiBULCBjb2w6IFRhYmxlQ29sdW1uPFQ+KTogYm9vbGVhbiB7XG4gICAgY29uc3QgbWVudSA9IHRoaXMub3Blbk1lbnVTdGF0ZSgpO1xuXG4gICAgaWYgKCFtZW51KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lbnUucm93ID09PSByb3cgJiYgbWVudS5jb2wgPT09IGNvbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhY3Rpb25JdGVtc0Zvcihyb3c6IFQsIG9wdDogVGFibGVDZWxsQ29uZmlnPFQsICdhY3Rpb25zJz4pOiBOYXRpdmVBY3Rpb25NZW51SXRlbVtdIHtcbiAgICBjb25zdCBpdGVtcyA9IG9wdC5pdGVtcyA/PyBbXTtcblxuICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW06IEFjdGlvbk1lbnVJdGVtPFQ+KSA9PiAoe1xuICAgICAga2V5OiBpdGVtLmtleSxcbiAgICAgIGxhYmVsOiBpdGVtLmxhYmVsLFxuICAgICAgaWNvbjogaXRlbS5pY29uLFxuICAgICAgZGlzYWJsZWQ6IHRoaXMucmVzb2x2ZUFjdGlvbkRpc2FibGVkKGl0ZW0sIHJvdylcbiAgICB9KSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25Qb3J0YWxBY3Rpb25DbGljayhldmVudDogRXZlbnQsIGl0ZW06IE5hdGl2ZUFjdGlvbk1lbnVJdGVtKTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAoaXRlbS5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1lbnUgPSB0aGlzLm9wZW5NZW51U3RhdGUoKTtcblxuICAgIGlmICghbWVudSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub25BY3Rpb25TZWxlY3QobWVudS5yb3csIG1lbnUuY29sLCBpdGVtKTtcblxuICAgIGlmIChtZW51LmNsb3NlT25DbGljaykge1xuICAgICAgdGhpcy5jbG9zZUFjdGlvbnNNZW51KCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG9uQWN0aW9uU2VsZWN0KHJvdzogVCwgY29sOiBUYWJsZUNvbHVtbjxUPiwgaXRlbTogeyBrZXk6IHN0cmluZzsgbGFiZWw6IHN0cmluZzsgaWNvbj86IHN0cmluZzsgZGlzYWJsZWQ/OiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICBpZiAoaXRlbS5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpZWxkS2V5ID0gY29sLmFjdGlvbkZpZWxkID8/IGNvbC5maWVsZDtcbiAgICBjb25zdCByb3dWYWwgPSBmaWVsZEtleSA/IHRoaXMuXyhyb3csIGZpZWxkS2V5KSA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFjdGlvbi5lbWl0KHsgcm93LCBjb2x1bW46IGNvbCwgdmFsdWU6IHsgYWN0aW9uOiBpdGVtLCByb3dWYWx1ZTogcm93VmFsIH0gfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYnV0dG9uS2V5KHJvdzogVCwgY29sOiBUYWJsZUNvbHVtbjxUPiwgb3B0OiBUYWJsZUNlbGxDb25maWc8VCwgJ2J1dHRvbic+KTogc3RyaW5nIHtcbiAgICBjb25zdCBhY3Rpb25LZXkgPSAoY29sLmFjdGlvbkZpZWxkID8/IGNvbC5maWVsZCA/PyAnJykgYXMgc3RyaW5nO1xuICAgIGNvbnN0IGFjdGlvblZhbHVlID0gYWN0aW9uS2V5ID8gU3RyaW5nKHRoaXMuXyhyb3csIGFjdGlvbktleSkgPz8gJycpIDogJyc7XG5cbiAgICByZXR1cm4gW1xuICAgICAgU3RyaW5nKG9wdD8ubGFiZWwgPz8gJycpLFxuICAgICAgU3RyaW5nKG9wdD8uaWNvbiA/PyAnJyksXG4gICAgICBTdHJpbmcob3B0Py5wcmlvcml0eSA/PyAnJyksXG4gICAgICBTdHJpbmcob3B0Py5zaXplID8/ICcnKSxcbiAgICAgIFN0cmluZyhvcHQ/LnRvb2x0aXAgPz8gJycpLFxuICAgICAgYWN0aW9uVmFsdWVcbiAgICBdLmpvaW4oJ3wnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkJ1dHRvbkNsaWNrKHJvdzogVCwgY29sOiBUYWJsZUNvbHVtbjxUPik6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IGNvbC5hY3Rpb25GaWVsZCA/PyBjb2wuZmllbGQ7XG4gICAgY29uc3QgdmFsdWUgPSBrZXkgPyB0aGlzLl8ocm93LCBrZXkpIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuYWN0aW9uLmVtaXQoeyByb3csIHZhbHVlLCBjb2x1bW46IGNvbCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVRhZ0NvbG9ycyh0YWdPcHRpb25zOiBUYWJsZUNlbGxDb25maWc8VCwgJ3RhZyc+KTogeyBiYWNrZ3JvdW5kOiBzdHJpbmcgfCBudWxsOyBib3JkZXI6IHN0cmluZyB8IG51bGwgfSB7XG4gICAgY29uc3QgYmFzZUNvbG9yID0gdGhpcy5nZXRUYWdCYXNlQ29sb3IodGFnT3B0aW9ucyk7XG4gICAgY29uc3QgZXhwbGljaXRGb3JlZ3JvdW5kID0gdGhpcy5ub3JtYWxpemVIZXhDb2xvcih0YWdPcHRpb25zPy5jb2xvcik7XG4gICAgY29uc3QgZGVyaXZlZEZvcmVncm91bmQgPSB0aGlzLmdldERlcml2ZWRUYWdGb3JlZ3JvdW5kKGJhc2VDb2xvcik7XG4gICAgY29uc3QgZm9yZWdyb3VuZCA9IHRoaXMuZ2V0VGFnRm9yZWdyb3VuZChleHBsaWNpdEZvcmVncm91bmQsIGRlcml2ZWRGb3JlZ3JvdW5kKTtcbiAgICBjb25zdCBiYWNrZ3JvdW5kID0gdGhpcy5nZXRUYWdCYWNrZ3JvdW5kKGJhc2VDb2xvcik7XG4gICAgY29uc3QgYm9yZGVyID0gZm9yZWdyb3VuZCA/PyBkZXJpdmVkRm9yZWdyb3VuZCA/PyBiYXNlQ29sb3I7XG5cbiAgICByZXR1cm4geyBiYWNrZ3JvdW5kLCBib3JkZXIgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGFnQmFzZUNvbG9yKHRhZ09wdGlvbnM6IFRhYmxlQ2VsbENvbmZpZzxULCAndGFnJz4pOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5ub3JtYWxpemVIZXhDb2xvcih0YWdPcHRpb25zPy5iYWNrZ3JvdW5kQ29sb3IpID8/IHRoaXMubm9ybWFsaXplSGV4Q29sb3IodGFnT3B0aW9ucz8uY29sb3IpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlUm93SWRlbnRpdHlMYWJlbChyb3dJZGVudGl0eTogVGFibGVSb3dJZGVudGl0eSk6IHN0cmluZyB7XG4gICAgaWYgKHJvd0lkZW50aXR5Lm5hbWUpIHtcbiAgICAgIHJldHVybiBTdHJpbmcocm93SWRlbnRpdHkubmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHJvd0lkZW50aXR5LnRpdGxlKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKHJvd0lkZW50aXR5LnRpdGxlKTtcbiAgICB9XG5cbiAgICBpZiAocm93SWRlbnRpdHkubGFiZWwpIHtcbiAgICAgIHJldHVybiBTdHJpbmcocm93SWRlbnRpdHkubGFiZWwpO1xuICAgIH1cblxuICAgIGlmIChyb3dJZGVudGl0eS5pZCkge1xuICAgICAgcmV0dXJuIFN0cmluZyhyb3dJZGVudGl0eS5pZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICdpdGVtJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVyaXZlZFRhZ0ZvcmVncm91bmQoYmFzZUNvbG9yOiBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIGJhc2VDb2xvciA/IHRoaXMuZGFya2VuSGV4Q29sb3IoYmFzZUNvbG9yLCBUQUdfRk9SRUdST1VORF9EQVJLRU5fQU1PVU5UKSA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldFRhZ0ZvcmVncm91bmQoZXhwbGljaXRGb3JlZ3JvdW5kOiBzdHJpbmcgfCBudWxsLCBkZXJpdmVkRm9yZWdyb3VuZDogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmIChleHBsaWNpdEZvcmVncm91bmQgJiYgZXhwbGljaXRGb3JlZ3JvdW5kICE9PSAnI2ZmZmZmZicpIHtcbiAgICAgIHJldHVybiBleHBsaWNpdEZvcmVncm91bmQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlcml2ZWRGb3JlZ3JvdW5kO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUYWdCYWNrZ3JvdW5kKGJhc2VDb2xvcjogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiBiYXNlQ29sb3IgPyB0aGlzLnRvUmdiYShiYXNlQ29sb3IsIFRBR19CQUNLR1JPVU5EX0FMUEhBKSA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkVGFnU3R5bGVzKGJhY2tncm91bmQ6IHN0cmluZyB8IG51bGwsIGJvcmRlcjogc3RyaW5nIHwgbnVsbCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IHN0eWxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gICAgaWYgKGJhY2tncm91bmQpIHtcbiAgICAgIHN0eWxlc1snYmFja2dyb3VuZC1jb2xvciddID0gYmFja2dyb3VuZDtcbiAgICB9XG5cbiAgICBpZiAoYm9yZGVyKSB7XG4gICAgICBzdHlsZXNbJ2JvcmRlci1jb2xvciddID0gYm9yZGVyO1xuICAgICAgc3R5bGVzWydjb2xvciddID0gYm9yZGVyO1xuICAgIH1cblxuICAgIHJldHVybiBzdHlsZXM7XG4gIH1cblxuICBwcml2YXRlIGdldE9iamVjdFZhbHVlKHNvdXJjZTogdW5rbm93biwga2V5OiBzdHJpbmcpOiB1bmtub3duIHtcbiAgICBpZiAoIXNvdXJjZSB8fCB0eXBlb2Ygc291cmNlICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gKHNvdXJjZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGF0aFBhcnRzKHBhdGg6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLnBhdGhQYXJ0c0NhY2hlLmdldChwYXRoKTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgdGhpcy5wYXRoUGFydHNDYWNoZS5zZXQocGF0aCwgcGFydHMpO1xuICAgIHJldHVybiBwYXJ0cztcbiAgfVxuXG4gIHByaXZhdGUgY2xhbXBQYWdlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zaG93UGFnaW5hdG9yKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtYXhGaXJzdCA9IE1hdGgubWF4KElOREVYX1pFUk8sIHRoaXMudG90YWxSZWNvcmRzKCkgLSB0aGlzLnJvd3MoKSk7XG5cbiAgICBpZiAodGhpcy5maXJzdCgpID4gbWF4Rmlyc3QpIHtcbiAgICAgIHRoaXMuZmlyc3Quc2V0KElOREVYX1pFUk8pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVjb25jaWxlU2VsZWN0aW9uV2l0aERhdGEoKTogdm9pZCB7XG4gICAgY29uc3QgZGF0YVNldCA9IG5ldyBTZXQodGhpcy5kYXRhU2lnbmFsKCkpO1xuICAgIGNvbnN0IG5leHRTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbigpLmZpbHRlcigocm93KSA9PiBkYXRhU2V0Lmhhcyhyb3cpKTtcblxuICAgIGlmIChuZXh0U2VsZWN0aW9uLmxlbmd0aCAhPT0gdGhpcy5zZWxlY3Rpb24oKS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uLnNldChuZXh0U2VsZWN0aW9uKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVBY3Rpb25EaXNhYmxlZChpdGVtOiBBY3Rpb25NZW51SXRlbTxUPiwgcm93OiBUKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiBpdGVtLmRpc2FibGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gaXRlbS5kaXNhYmxlZChyb3cpO1xuICAgIH1cblxuICAgIHJldHVybiBpdGVtLmRpc2FibGVkID09PSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVIZXhDb2xvcih2YWx1ZTogdW5rbm93bik6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByYXcgPSB2YWx1ZS50cmltKCkucmVwbGFjZSgnIycsICcnKTtcblxuICAgIGlmICgvXlswLTlhLWZBLUZdezN9JC8udGVzdChyYXcpKSB7XG4gICAgICByZXR1cm4gYCMke3Jhd1xuICAgICAgICAuc3BsaXQoJycpXG4gICAgICAgIC5tYXAoKGNoYXIpID0+IGAke2NoYXJ9JHtjaGFyfWApXG4gICAgICAgIC5qb2luKCcnKVxuICAgICAgICAudG9Mb3dlckNhc2UoKX1gO1xuICAgIH1cblxuICAgIGlmICgvXlswLTlhLWZBLUZdezZ9JC8udGVzdChyYXcpKSB7XG4gICAgICByZXR1cm4gYCMke3Jhdy50b0xvd2VyQ2FzZSgpfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZUNvbHVtbkFsaWdubWVudCh2YWx1ZTogdW5rbm93bik6IFRhYmxlQ29sdW1uQWxpZ25tZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAnbGVmdCcgfHwgdmFsdWUgPT09ICdjZW50ZXInIHx8IHZhbHVlID09PSAncmlnaHQnID8gdmFsdWUgOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBoZXhUb1JnYihoZXg6IHN0cmluZyk6IHsgcjogbnVtYmVyOyBnOiBudW1iZXI7IGI6IG51bWJlciB9IHwgbnVsbCB7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHRoaXMubm9ybWFsaXplSGV4Q29sb3IoaGV4KTtcblxuICAgIGlmICghbm9ybWFsaXplZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY2xlYW4gPSBub3JtYWxpemVkLnNsaWNlKDEpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHI6IE51bWJlci5wYXJzZUludChjbGVhbi5zbGljZSgwLCAyKSwgSEVYX1JBRElYKSxcbiAgICAgIGc6IE51bWJlci5wYXJzZUludChjbGVhbi5zbGljZSgyLCA0KSwgSEVYX1JBRElYKSxcbiAgICAgIGI6IE51bWJlci5wYXJzZUludChjbGVhbi5zbGljZSg0LCA2KSwgSEVYX1JBRElYKVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHRvUmdiYShoZXg6IHN0cmluZywgYWxwaGE6IG51bWJlcik6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IHJnYiA9IHRoaXMuaGV4VG9SZ2IoaGV4KTtcblxuICAgIGlmICghcmdiKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gYHJnYmEoJHtyZ2Iucn0sICR7cmdiLmd9LCAke3JnYi5ifSwgJHthbHBoYX0pYDtcbiAgfVxuXG4gIHByaXZhdGUgZGFya2VuSGV4Q29sb3IoaGV4OiBzdHJpbmcsIGFtb3VudDogbnVtYmVyKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgcmdiID0gdGhpcy5oZXhUb1JnYihoZXgpO1xuXG4gICAgaWYgKCFyZ2IpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGZhY3RvciA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIDEgLSBhbW91bnQpKTtcbiAgICBjb25zdCByID0gTWF0aC5yb3VuZChyZ2IuciAqIGZhY3Rvcik7XG4gICAgY29uc3QgZyA9IE1hdGgucm91bmQocmdiLmcgKiBmYWN0b3IpO1xuICAgIGNvbnN0IGIgPSBNYXRoLnJvdW5kKHJnYi5iICogZmFjdG9yKTtcblxuICAgIHJldHVybiBgIyR7W3IsIGcsIGJdXG4gICAgICAubWFwKCh2YWx1ZSkgPT4gTWF0aC5tYXgoMCwgTWF0aC5taW4oUkdCX01BWCwgdmFsdWUpKS50b1N0cmluZyhIRVhfUkFESVgpLnBhZFN0YXJ0KDIsICcwJykpXG4gICAgICAuam9pbignJyl9YDtcbiAgfVxuXG4gIHByaXZhdGUgbWVyZ2VPcHRpb25zKGNmZzogVGFibGVPcHRpb25zPFQ+KTogVGFibGVPcHRpb25zPFQ+IHtcbiAgICBjb25zdCBiYXNlID0gREVGQVVMVF9UQUJMRV9PUFRJT05TIGFzIFRhYmxlT3B0aW9uczxUPjtcbiAgICBjb25zdCBuZXh0ID0gY2ZnID8/IChERUZBVUxUX1RBQkxFX09QVElPTlMgYXMgVGFibGVPcHRpb25zPFQ+KTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5iYXNlLFxuICAgICAgLi4ubmV4dCxcbiAgICAgIHNlYXJjaDogeyAuLi5iYXNlLnNlYXJjaCwgLi4ubmV4dC5zZWFyY2ggfSxcbiAgICAgIHRhYmxlOiB7IC4uLmJhc2UudGFibGUsIC4uLm5leHQudGFibGUgfSxcbiAgICAgIGVtcHR5OiB7IC4uLmJhc2UuZW1wdHksIC4uLm5leHQuZW1wdHkgfSxcbiAgICAgIHBhZ2luYXRpb246IHsgLi4uYmFzZS5wYWdpbmF0aW9uLCAuLi5uZXh0LnBhZ2luYXRpb24gfSxcbiAgICAgIGNlbGxzOiB7XG4gICAgICAgIGNoZWNrYm94OiB7IC4uLihiYXNlLmNlbGxzPy5jaGVja2JveCA/PyB7fSksIC4uLihuZXh0LmNlbGxzPy5jaGVja2JveCA/PyB7fSkgfSxcbiAgICAgICAgYnV0dG9uOiB7IC4uLihiYXNlLmNlbGxzPy5idXR0b24gPz8ge30pLCAuLi4obmV4dC5jZWxscz8uYnV0dG9uID8/IHt9KSB9LFxuICAgICAgICB0YWc6IHsgLi4uKGJhc2UuY2VsbHM/LnRhZyA/PyB7fSksIC4uLihuZXh0LmNlbGxzPy50YWcgPz8ge30pIH0sXG4gICAgICAgIGFjdGlvbnM6IHsgLi4uKGJhc2UuY2VsbHM/LmFjdGlvbnMgPz8ge30pLCAuLi4obmV4dC5jZWxscz8uYWN0aW9ucyA/PyB7fSkgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cbiIsIjxzZWN0aW9uXG4gIGNsYXNzPVwic2RjLXRhYmxlXCJcbiAgW2NsYXNzLnNkYy10YWJsZS1zdGFja109XCJpc01vYmlsZVwiXG4gIFtjbGFzcy5zZGMtdGFibGUtZmlsdGVyZWRdPVwiISFnbG9iYWxGaWx0ZXIoKS50cmltKClcIlxuICBbY2xhc3Muc2RjLXRhYmxlLS1sb2FkaW5nXT1cImlzTG9hZGluZ1wiXG4gIFtjbGFzcy5zZGMtdGFibGUtLWluaXRpYWwtbG9hZGluZ109XCJzaG93SW5pdGlhbExvYWRpbmcoKVwiXG4gID5cbiAgPHNkYy1sb2FkaW5nLXN0YXRlXG4gICAgY2xhc3M9XCJzZGMtdGFibGUtbG9hZGluZy13cmFwXCJcbiAgICBbbG9hZGluZ109XCJpc0xvYWRpbmdcIlxuICAgIFtibG9ja1dpbmRvd109XCJmYWxzZVwiXG4gICAgW2Jsb2NrRGVsYXlNc109XCIwXCJcbiAgICBbaW5kaWNhdG9yXT1cIidkb3RzJ1wiXG4gICAgPlxuICAgIDxkaXYgY2xhc3M9XCJzZGMtdGFibGUtc2hlbGxcIiBbc3R5bGUuLS1zZGMtdGFibGUtYm9keS1oZWlnaHQucHhdPVwiYm9keVZpZXdwb3J0SGVpZ2h0UHgoKVwiPlxuICAgICAgQGlmIChzaG93U2VhcmNoKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInNkYy10YWJsZS1jYXB0aW9uXCI+XG4gICAgICAgICAgPGRpdiBbc3R5bGUud2lkdGhdPVwiaXNNb2JpbGUgPyAnMTAwJScgOiAnMjAlJ1wiPlxuICAgICAgICAgICAgPHNkYy1zZWFyY2hib3hcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzTG9hZGluZ1wiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzZWFyY2hQbGFjZWhvbGRlcigpXCJcbiAgICAgICAgICAgICAgW3RyaWdnZXJNb2RlXT1cInRyaWdnZXJNb2RlKClcIlxuICAgICAgICAgICAgICAob25TZWFyY2gpPVwib25TZWFyY2hUZXJtKCRldmVudClcIlxuICAgICAgICAgICAgICAob25DbGVhcik9XCJvbkNsZWFyU2VhcmNoKClcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAgICAgJ3BsYXRmb3JtLmRhdGFjb3JlLmFjY2Vzc2liaWxpdHkuc2VhcmNoX2ZpZWxkJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgPHRhYmxlXG4gICAgICAgICAgY2xhc3M9XCJzZGMtdGFibGUtZ3JpZFwiXG4gICAgICAgICAgcm9sZT1cInRhYmxlXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInRhYmxlQXJpYUxhYmVsS2V5KCkgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFthdHRyLmFyaWEtcm93Y291bnRdPVwidG90YWxSZWNvcmRzKClcIlxuICAgICAgICAgIFthdHRyLmFyaWEtYnVzeV09XCJpc0xvYWRpbmdcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICA8dHIgcm9sZT1cInJvd1wiPlxuICAgICAgICAgICAgICBAZm9yIChjb2wgb2YgY29sczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgICBzY29wZT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICByb2xlPVwiY29sdW1uaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZGMtdGFibGUtdGgtY2hlY2tib3hdPVwiY29sLnR5cGUgPT09ICdjaGVja2JveC1zZWxlY3Rpb24nXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZGMtdGFibGUtdGgtY3VycmVuY3ldPVwiY29sLnR5cGUgPT09ICdjdXJyZW5jeSdcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnNkYy10YWJsZS10aC1idXR0b25dPVwiY29sLnR5cGUgPT09ICdidXR0b24nXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZGMtdGFibGUtdGgtYWN0aW9uc109XCJjb2wudHlwZSA9PT0gJ2FjdGlvbnMnXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb2wuZmllbGQgPyB0b2dnbGVTb3J0KGNvbC5maWVsZCwgY29sLnNvcnRhYmxlICE9PSBmYWxzZSkgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImNvbC5maWVsZCA/IHRvZ2dsZVNvcnQoY29sLmZpZWxkLCBjb2wuc29ydGFibGUgIT09IGZhbHNlKSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IGNvbC5maWVsZCA/IHRvZ2dsZVNvcnQoY29sLmZpZWxkLCBjb2wuc29ydGFibGUgIT09IGZhbHNlKSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnNkYy10YWJsZS1zb3J0YWJsZV09XCJjb2wuc29ydGFibGUgIT09IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZGMtdGFibGUtaXMtc2VsZWN0ZWRdPVwic29ydEZpZWxkKCkgPT09IGNvbC5maWVsZFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNvcnRdPVwiZ2V0U29ydEFyaWFBdHRyaWJ1dGUoY29sKVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJjb2wuc29ydGFibGUgIT09IGZhbHNlID8gMCA6IG51bGxcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgICBjb2wuc29ydGFibGUgIT09IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNvbC5oZWFkZXIgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICArICcgLSAnXG4gICAgICAgICAgICAgICAgICAgICAgICArICgncGxhdGZvcm0uZGF0YWNvcmUuYWNjZXNzaWJpbGl0eS5zb3J0YWJsZV9jb2x1bW4nIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiAoY29sLmhlYWRlciB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNkYy10YWJsZS10aC1pbm5lclwiIFtjbGFzcy5zZGMtdGFibGUtc29ydGFibGVdPVwiY29sLnNvcnRhYmxlICE9PSBmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICBAc3dpdGNoIChjb2wudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgIEBjYXNlICgnY2hlY2tib3gtc2VsZWN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZGMtdGFibGUtdGgtbGFiZWxcIiBhcmlhLWhpZGRlbj1cInRydWVcIj57eyBjb2wuaGVhZGVyIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNkYy10YWJsZS10aC1sYWJlbFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPnt7IGNvbC5oZWFkZXIgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbC5zb3J0YWJsZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNkYy10YWJsZS1zb3J0LWljb25zIHNkYy10YWJsZS1zb3J0LW92ZXJsYXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNvcnRJY29uc1RwbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBjb2w6IGNvbCB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICBAaWYgKGNvbC50eXBlID09PSAnY2hlY2tib3gtc2VsZWN0aW9uJyAmJiAoY2VsbENmZygnY2hlY2tib3gnKS5zZWxlY3RBbGwgPz8gdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNkYy10YWJsZS10aC1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ3NlbGVjdC1hbGwtY2hlY2tib3gnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzUGFnZUZ1bGx5U2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0UGFnZShnZXRDaGVja2VkVmFsdWUoJGV2ZW50KSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IHRvZ2dsZVNlbGVjdFBhZ2UoIWlzUGFnZUZ1bGx5U2VsZWN0ZWQoKSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIncGxhdGZvcm0uZGF0YWNvcmUuYWNjZXNzaWJpbGl0eS5zZWxlY3RfYWxsX3Jvd3MnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCJpc1BhZ2VGdWxseVNlbGVjdGVkKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzZWxlY3QtYWxsLWNoZWNrYm94XCIgY2xhc3M9XCJzci1vbmx5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybS5kYXRhY29yZS5hY2Nlc3NpYmlsaXR5LnNlbGVjdF9hbGxfcm93cycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGhlYWQ+XG5cbiAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgQGlmIChzaG93SW5pdGlhbExvYWRpbmcoKSkge1xuICAgICAgICAgICAgICAgIEBmb3IgKHJvd0luZGV4IG9mIGluaXRpYWxMb2FkaW5nUm93cygpOyB0cmFjayByb3dJbmRleDsgbGV0IHIgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInNkYy10YWJsZS1pbml0aWFsLWxvYWRpbmctcm93XCIgcm9sZT1cInJvd1wiIFthdHRyLmFyaWEtcm93aW5kZXhdPVwiciArIDFcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoY29sIG9mIGNvbHM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtdGFibGUtdGQgc2RjLXRhYmxlLXRkYyBzZGMtdGFibGUtdGQtLWluaXRpYWwtbG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2RjLXRhYmxlLXRkLWNoZWNrYm94XT1cImNvbC50eXBlID09PSAnY2hlY2tib3gtc2VsZWN0aW9uJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2RjLXRhYmxlLXRkLWN1cnJlbmN5XT1cImNvbC50eXBlID09PSAnY3VycmVuY3knXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZGMtdGFibGUtdGQtYnV0dG9uXT1cImNvbC50eXBlID09PSAnYnV0dG9uJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2RjLXRhYmxlLXRkLWFjdGlvbnNdPVwiY29sLnR5cGUgPT09ICdhY3Rpb25zJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5BbGlnbkNsYXNzKGNvbClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10aXRsZV09XCJjb2wuaGVhZGVyIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJjZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZGMtdGFibGUtdGQtdmFsIHNkYy10YWJsZS10ZC12YWwtLWluaXRpYWwtbG9hZGluZ1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICBAZm9yIChyb3cgb2YgcGFnZURhdGEoKTsgdHJhY2sgJGluZGV4OyBsZXQgciA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgPHRyIHJvbGU9XCJyb3dcIiBbYXR0ci5hcmlhLXJvd2luZGV4XT1cInIgKyAxXCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiBjb2xzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGlzTW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLXRhYmxlLXRkLW1vYmlsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNvcnRJY29uc1RwbFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGNvbDogY29sIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtdGFibGUtdGQgc2RjLXRhYmxlLXRkYyBzZGMtdGFibGUtbW9iaWxlLXRkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2RjLXRhYmxlLXRkLWNoZWNrYm94XT1cImNvbC50eXBlID09PSAnY2hlY2tib3gtc2VsZWN0aW9uJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNkYy10YWJsZS10ZC1jdXJyZW5jeV09XCJjb2wudHlwZSA9PT0gJ2N1cnJlbmN5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNkYy10YWJsZS10ZC1idXR0b25dPVwiY29sLnR5cGUgPT09ICdidXR0b24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2RjLXRhYmxlLXRkLWFjdGlvbnNdPVwiY29sLnR5cGUgPT09ICdhY3Rpb25zJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNkYy10YWJsZS1pcy1zZWxlY3RlZF09XCJzb3J0RmllbGQoKSA9PT0gY29sLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5BbGlnbkNsYXNzKGNvbClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdGl0bGVdPVwiY29sLmhlYWRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImNlbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImNvbC5zb3J0YWJsZSAhPT0gZmFsc2UgPyAwIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbC5maWVsZCA/IHRvZ2dsZVNvcnQoY29sLmZpZWxkLCBjb2wuc29ydGFibGUgIT09IGZhbHNlKSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImNvbC5maWVsZCA/IHRvZ2dsZVNvcnQoY29sLmZpZWxkLCBjb2wuc29ydGFibGUgIT09IGZhbHNlKSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBjb2wuZmllbGQgPyB0b2dnbGVTb3J0KGNvbC5maWVsZCwgY29sLnNvcnRhYmxlICE9PSBmYWxzZSkgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNkYy10YWJsZS10ZC12YWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2VsbFRwbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcm93LCBjb2w6IGNvbCB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2RjLXRhYmxlLXRkIHNkYy10YWJsZS10ZGNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2RjLXRhYmxlLXRkLWNoZWNrYm94XT1cImNvbC50eXBlID09PSAnY2hlY2tib3gtc2VsZWN0aW9uJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZGMtdGFibGUtdGQtY3VycmVuY3ldPVwiY29sLnR5cGUgPT09ICdjdXJyZW5jeSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2RjLXRhYmxlLXRkLWJ1dHRvbl09XCJjb2wudHlwZSA9PT0gJ2J1dHRvbidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2RjLXRhYmxlLXRkLWFjdGlvbnNdPVwiY29sLnR5cGUgPT09ICdhY3Rpb25zJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZGMtdGFibGUtaXMtc2VsZWN0ZWRdPVwic29ydEZpZWxkKCkgPT09IGNvbC5maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbkFsaWduQ2xhc3MoY29sKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdGl0bGVdPVwiY29sLmhlYWRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJjZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLXRhYmxlLXRkLXZhbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2VsbFRwbFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcm93LCBjb2w6IGNvbCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgPC90YWJsZT5cblxuICAgICAgICAgIEBpZiAoIWlzTG9hZGluZyAmJiBvcHRpb25zKCkuZW1wdHk/LnNob3cgIT09IGZhbHNlICYmIHRvdGFsUmVjb3JkcygpID09PSAwKSB7XG4gICAgICAgICAgICA8c2RjLWVtcHR5LXN0YXRlXG4gICAgICAgICAgICAgIGlkPVwibXktZW1wdHktc3RhdGVcIlxuICAgICAgICAgICAgICBpY29uQ2xhc3M9XCJmYSBmYS1pbmJveFwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCJlbXB0eVRpdGxlKClcIlxuICAgICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiZW1wdHlUZXh0KClcIlxuICAgICAgICAgICAgICBjbGFzcz1cInNkYy10YWJsZS1lbXB0eS1zdGF0ZVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cImVtcHR5Qm9keUhlaWdodFB4KClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3NkYy1lbXB0eS1zdGF0ZT5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBAaWYgKHNob3dQYWdpbmF0b3IoKSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNkYy10YWJsZS1wYWdpbmF0b3JcIj5cbiAgICAgICAgICAgICAgPHNkYy1wYWdpbmF0b3JcbiAgICAgICAgICAgICAgICBbZmlyc3RdPVwiZmlyc3QoKVwiXG4gICAgICAgICAgICAgICAgW3Jvd3NdPVwicm93cygpXCJcbiAgICAgICAgICAgICAgICBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3JkcygpXCJcbiAgICAgICAgICAgICAgICBbcm93c1BlclBhZ2VPcHRpb25zXT1cImlzTW9iaWxlID8gW10gOiByb3dzUGVyUGFnZU9wdGlvbnMoKVwiXG4gICAgICAgICAgICAgICAgW2lzTW9iaWxlXT1cImlzTW9iaWxlXCJcbiAgICAgICAgICAgICAgICBbdG90YWxSZWNvcmRzTGFiZWxdPVwidG90YWxSZWNvcmRzTGFiZWwoKVwiXG4gICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICA+PC9zZGMtcGFnaW5hdG9yPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc2RjLWxvYWRpbmctc3RhdGU+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbFRwbCBsZXQtcm93IGxldC1jb2w9XCJjb2xcIj5cbiAgICAgICAgQHN3aXRjaCAoY29sLnR5cGUpIHtcbiAgICAgICAgICBAY2FzZSAoJ2NoZWNrYm94LXNlbGVjdGlvbicpIHtcbiAgICAgICAgICAgIEBpZiAoY2VsbENmZygnY2hlY2tib3gnKTsgYXMgY2hlY2tib3hPcHRpb25zKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZGMtdGFibGUtY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0Um93Q2hlY2tib3hJZChyb3cpXCJcbiAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzUm93U2VsZWN0ZWQocm93KVwiXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uVG9nZ2xlUm93KHJvdywgZ2V0Q2hlY2tlZFZhbHVlKCRldmVudCkpXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAgICAgICAncGxhdGZvcm0uZGF0YWNvcmUuYWNjZXNzaWJpbGl0eS5zZWxlY3Rfcm93J1xuICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGU6IHsgbmFtZTogKGdldFJvd0NoZWNrYm94TGFiZWwocm93KSB8IHRyYW5zbGF0ZSkgfVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cImlzUm93U2VsZWN0ZWQocm93KVwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIFthdHRyLmZvcl09XCJnZXRSb3dDaGVja2JveElkKHJvdylcIiBjbGFzcz1cInNyLW9ubHlcIj5cbiAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtLmRhdGFjb3JlLmFjY2Vzc2liaWxpdHkuc2VsZWN0X3JvdydcbiAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGU6IHsgbmFtZTogKGdldFJvd0NoZWNrYm94TGFiZWwocm93KSB8IHRyYW5zbGF0ZSkgfVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAY2FzZSAoJ2RhdGUnKSB7XG4gICAgICAgICAgICAgIHt7IGZvcm1hdERhdGUoXyhyb3csIGNvbC5maWVsZCksIGNvbC5mb3JtYXQgfHwgJ3Nob3J0RGF0ZScpIH19XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBjYXNlICgnc3Ryb25nJykge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLXRhYmxlLXN0cm9uZy1sYWJlbFwiPnt7IGNlbGxUZXh0VmFsdWUocm93LCBjb2wuZmllbGQpIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBjYXNlICgnY29kZScpIHtcbiAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9XCJzZGMtdGFibGUtY29kZS1sYWJlbFwiPnt7IF8ocm93LCBjb2wuZmllbGQpIH19PC9jb2RlPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAY2FzZSAoJ2N1cnJlbmN5Jykge1xuICAgICAgICAgICAgICB7eyBmb3JtYXRDdXJyZW5jeShfKHJvdywgY29sLmZpZWxkKSwgY29sLmZvcm1hdCB8fCAnQlJMJykgfX1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGNhc2UgKCd0YWcnKSB7XG4gICAgICAgICAgICAgIEBpZiAoY2VsbENmZygndGFnJyk7IGFzIHRhZ09wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLXRhYmxlLXRhZ3NcIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKHRhZyBvZiB0YWdzT2Yocm93LCBjb2wpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNkYy10YWJsZS10YWdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZGMtdGFnLS1lbmFibGVkXT1cImlzRW5hYmxlZFRhZyh0YWcpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2RjLXRhZy0tZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFRhZyh0YWcpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJnZXRUYWdTdHlsZXModGFnLCB0YWdPcHRpb25zKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwidGFnT3B0aW9ucy50b29sdGlwID8gKHRhZ09wdGlvbnMudG9vbHRpcCB8IHRyYW5zbGF0ZSkgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgQGlmICh0YWdPcHRpb25zLmljb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJ0YWdPcHRpb25zLmljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIHt7IHRhZyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGNhc2UgKCdidXR0b24nKSB7XG4gICAgICAgICAgICAgIEBpZiAoY2VsbENmZygnYnV0dG9uJyk7IGFzIGJ1dHRvbk9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLXRhYmxlLWJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgPHNkYy1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtdGFibGUtYWN0aW9uLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIFtzaXplXT1cImJ1dHRvbk9wdGlvbnMuc2l6ZSA/PyAnZGVmYXVsdCdcIlxuICAgICAgICAgICAgICAgICAgICBbcHJpb3JpdHldPVwiYnV0dG9uT3B0aW9ucy5wcmlvcml0eSB8fCAncHJpbWFyeSdcIlxuICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJidXR0b25PcHRpb25zLmljb25cIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiYnV0dG9uT3B0aW9ucy5sYWJlbCA/PyAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidXR0b25PcHRpb25zLmRpc2FibGVkID8/IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImJ1dHRvbk9wdGlvbnMudG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnNpemVdPVwiYnV0dG9uT3B0aW9ucy5zaXplXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIucHJpb3JpdHldPVwiYnV0dG9uT3B0aW9ucy5wcmlvcml0eSB8fCAncHJpbWFyeSdcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5zZXZlcml0eV09XCJidXR0b25PcHRpb25zLnByaW9yaXR5IHx8ICdwcmltYXJ5J1wiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmljb25dPVwiYnV0dG9uT3B0aW9ucy5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIubGFiZWxdPVwiYnV0dG9uT3B0aW9ucy5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cImJ1dHRvbk9wdGlvbnMuZGlzYWJsZWQgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJidXR0b25PcHRpb25zLnRvb2x0aXAgfHwgbnVsbFwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgKGJ1dHRvbk9wdGlvbnMubGFiZWwgfHwgYnV0dG9uT3B0aW9ucy50b29sdGlwIHx8ICdwbGF0Zm9ybS5kYXRhY29yZS5hY2Nlc3NpYmlsaXR5LmFjdGlvbl9idXR0b24nKVxuICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICsgJyAtICdcbiAgICAgICAgICAgICAgICAgICsgKGdldFJvd0NoZWNrYm94TGFiZWwocm93KSB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1rZXldPVwiYnV0dG9uS2V5KHJvdywgY29sLCBidXR0b25PcHRpb25zKVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJidXR0b25PcHRpb25zLmRpc2FibGVkID8gbnVsbCA6IG9uQnV0dG9uQ2xpY2socm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiYnV0dG9uT3B0aW9ucy5kaXNhYmxlZCA/IG51bGwgOiBvbkJ1dHRvbkNsaWNrKHJvdywgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBidXR0b25PcHRpb25zLmRpc2FibGVkID8gbnVsbCA6IG9uQnV0dG9uQ2xpY2socm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPC9zZGMtYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBjYXNlICgnYWN0aW9ucycpIHtcbiAgICAgICAgICAgICAgQGlmIChjZWxsQ2ZnKCdhY3Rpb25zJyk7IGFzIGFjdGlvbnNPcHQpIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInNkYy10YWJsZS1hY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZGMtdGFibGUtYWN0aW9ucy0tb3Blbl09XCJpc0FjdGlvbnNNZW51T3Blbihyb3csIGNvbClcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAjYWN0aW9uc1RyaWdnZXJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2RjLXRhYmxlLWFjdGlvbnMtdHJpZ2dlclwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZGMtdGFibGUtYWN0aW9ucy10cmlnZ2VyLS1vcGVuXT1cImlzQWN0aW9uc01lbnVPcGVuKHJvdywgY29sKVwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgKChhY3Rpb25zT3B0LmJ1dHRvbkxhYmVsIHx8ICdwbGF0Zm9ybS5kYXRhY29yZS5hY2Nlc3NpYmlsaXR5LmFjdGlvbnNfbWVudScpIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgICAgICAgKyAnIC0gJ1xuICAgICAgICAgICAgICAgICAgKyAoZ2V0Um93Q2hlY2tib3hMYWJlbChyb3cpIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzQWN0aW9uc01lbnVPcGVuKHJvdywgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVBY3Rpb25zTWVudSgkZXZlbnQsIHJvdywgY29sLCBhY3Rpb25zVHJpZ2dlcilcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2RjLXRhYmxlLWFjdGlvbnMtdHJpZ2dlcl9fbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyAoYWN0aW9uc09wdC5idXR0b25MYWJlbCB8fCAncGxhdGZvcm0uZGF0YWNvcmUuYWNjZXNzaWJpbGl0eS5hY3Rpb25zX21lbnUnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNoZXZyb24tZG93biBzZGMtdGFibGUtYWN0aW9ucy10cmlnZ2VyX19pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGNhc2UgKCdpY29uLXRpdGxlJykge1xuICAgICAgICAgICAgICBAaWYgKGNlbGxDZmcoJ2ljb24tdGl0bGUnKTsgYXMgaWNvblRpdGxlT3B0aW9ucykge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZGMtdGFibGUtaWNvbi10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cIl8ocm93LCBpY29uVGl0bGVPcHRpb25zLmljb25GaWVsZClcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBjZWxsVGV4dFZhbHVlKHJvdywgY29sLmZpZWxkKSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAZGVmYXVsdCB7XG4gICAgICAgICAgICAgIHt7IGNlbGxUZXh0VmFsdWUocm93LCBjb2wuZmllbGQpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9zZWN0aW9uPlxuICAgICAgQGlmIChvcGVuTWVudVN0YXRlKCk7IGFzIG1lbnUpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwic2RjLWFjdGlvbnMtbWVudSBzZGMtYWN0aW9ucy1tZW51LS1wb3J0YWxcIlxuICAgICAgICAgIFtzdHlsZS50b3AucHhdPVwibWVudS50b3BcIlxuICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cIm1lbnUubGVmdFwiXG4gICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJtZW51LndpZHRoXCJcbiAgICAgICAgICByb2xlPVwibWVudVwiXG4gICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgbWVudS5pdGVtczsgdHJhY2sgaXRlbS5rZXkgKyAnLScgKyAkaW5kZXgpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwic2RjLWFjdGlvbnMtaXRlbVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnNkYy1hY3Rpb25zLWl0ZW0tLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25Qb3J0YWxBY3Rpb25DbGljaygkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNkYy1hY3Rpb25zLWl0ZW1fX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICBAaWYgKGl0ZW0uaWNvbikge1xuICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cIml0ZW0uaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbS5sYWJlbCB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cblxuICAgICAgPG5nLXRlbXBsYXRlICNzb3J0SWNvbnNUcGwgbGV0LWNvbD1cImNvbFwiPlxuICAgICAgICBAaWYgKGNvbC5zb3J0YWJsZSAhPT0gZmFsc2UgJiYgY29sLnR5cGUgIT09ICdjaGVja2JveC1zZWxlY3Rpb24nKSB7XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwic2RjLXRhYmxlLXNvcnQtaW5kaWNhdG9yXCJcbiAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKHNvcnRGaWVsZCgpICE9PSBjb2wuZmllbGQpIHtcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtc29ydC1hbHQgc2RjLXRhYmxlLXNvcnQtbmV1dHJhbFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoc29ydEZpZWxkKCkgPT09IGNvbC5maWVsZCAmJiBzb3J0T3JkZXIoKSA9PT0gMSkge1xuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1zb3J0LWFtb3VudC11cC1hbHQgc2RjLXRhYmxlLXNvcnQtYWN0aXZlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChzb3J0RmllbGQoKSA9PT0gY29sLmZpZWxkICYmIHNvcnRPcmRlcigpID09PSAtMSkge1xuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1zb3J0LWFtb3VudC1kb3duIHNkYy10YWJsZS1zb3J0LWFjdGl2ZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKGNvbC5zb3J0YWJsZSA9PT0gZmFsc2UgfHwgY29sLnR5cGUgPT09ICdjaGVja2JveC1zZWxlY3Rpb24nKSB7XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwic2RjLXRhYmxlLXNvcnQtaW5kaWNhdG9yIHNkYy10YWJsZS1zb3J0LWluZGljYXRvci1wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgIH1cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4iXX0=
|