@wizco/fenixds-ngx
Version:
Componentes fenix design system para Angular.
124 lines • 41.9 kB
JavaScript
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
import { CommonModule } from '@angular/common';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
export class TableComponent {
data = [];
sortedItem;
headers = [];
loading = false;
templates = {};
handlerSortedBy = new EventEmitter();
tableRef;
hasExpandableRows = false;
constructor() { }
ngOnInit() {
this.checkExpandableRows();
}
ngAfterViewInit() {
this.alignChildHeaders();
}
ngOnChanges() {
this.checkExpandableRows();
if (this.tableRef) {
setTimeout(() => this.alignChildHeaders());
}
}
/**
* Verifica se há linhas expandíveis na tabela
*/
checkExpandableRows() {
this.hasExpandableRows = this.data.some(row => row.children);
}
/**
* Alinha os headers filhos com os headers pai
*/
alignChildHeaders() {
const table = this.tableRef?.nativeElement;
if (!table)
return;
// Fazer um loop para pegar os headers pai
const parentHeaders = table.querySelector('thead:first-child')?.querySelectorAll('th:not(.wco-table-expand-column)');
const parentWidths = Array.from(parentHeaders).map(th => th.offsetWidth);
const childTables = table.querySelectorAll('.wco-table-children table');
childTables.forEach((childTable) => {
const childHeaders = childTable.querySelectorAll('th:not(.wco-table-expand-column)');
// Verifica se os headers são iguais
const hasSameHeaders = this.hasSameHeaders(Array.from(parentHeaders).map(th => th.textContent?.trim()), Array.from(childHeaders).map(th => th.textContent?.trim()));
if (hasSameHeaders) {
// Aplica as larguras dos headers pai nos headers filhos
childHeaders.forEach((th, index) => {
if (parentWidths[index]) {
th.style.width = `${parentWidths[index]}px`;
}
});
}
});
}
hasSameHeaders(parentHeaders, childHeaders) {
if (parentHeaders.length !== childHeaders.length)
return false;
return parentHeaders.every((header, index) => header === childHeaders[index]);
}
/**
* Obtém o template para uma determinada coluna
* @param templateName - Nome do template
* @returns TemplateRef ou undefined
*/
getTemplate(templateName) {
return this.templates[templateName];
}
/**
* Ordena a tabela por um determinado cabeçalho
* @param header - Cabeçalho a ser ordenado
*/
onSortedBy(header) {
this.sortedItem = {
key: header.key,
order: header.key == this.sortedItem?.key && this.sortedItem.order === 'ASC' ? 'DESC' : 'ASC'
};
this.handlerSortedBy.emit(this.sortedItem);
}
/**
* Alterna o estado de expansão de uma linha
* @param row - Linha a ser expandida/contraída
*/
toggleRow(row) {
if (row.children) {
row.isExpanded = !row.isExpanded;
if (row.isExpanded) {
setTimeout(() => this.alignChildHeaders());
}
}
}
/**
* Verifica se uma linha tem filhos
* @param row - Linha a ser verificada
* @returns true se a linha tem filhos, false caso contrário
*/
hasChildren(row) {
return !!row.children;
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TableComponent, isStandalone: true, selector: "wco-table", inputs: { data: "data", sortedItem: "sortedItem", headers: "headers", loading: "loading", templates: "templates" }, outputs: { handlerSortedBy: "handlerSortedBy" }, viewQueries: [{ propertyName: "tableRef", first: true, predicate: ["table"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"wco-table-area\">\n <table class=\"wco-table\" role=\"table\" #table>\n <thead *ngIf=\"data && data.length > 0\">\n <tr>\n <th *ngIf=\"hasExpandableRows\" class=\"wco-table-expand-column\"></th>\n <ng-container *ngFor=\"let header of headers\">\n <th *ngIf=\"!header.sortedBy\">\n {{ header.label }}\n </th>\n <th *ngIf=\"header.sortedBy\" (click)=\"onSortedBy(header)\">\n <div class=\"flex items-center cPointer\">\n <span>{{ header.label }}</span>\n <span class=\"material-icons-round text-primary-600 wco-order-icon\" [class.f-20]=\"!sortedItem || sortedItem && header.key != sortedItem.key\">\n {{\n sortedItem && header.key == sortedItem.key\n ? sortedItem.order === \"ASC\"\n ? \"north\"\n : sortedItem.order === \"DESC\"\n ? \"south\"\n : \"swap_vert\"\n : \"swap_vert\"\n }}\n </span>\n </div>\n </th>\n </ng-container>\n </tr>\n </thead>\n <ng-container *ngIf=\"!loading\">\n <tbody>\n <ng-container *ngFor=\"let row of data\">\n <tr [class.wco-table__row--empty]=\"!row\">\n <td *ngIf=\"hasExpandableRows\" class=\"wco-table-expand-column\">\n <button class=\"wco-table-expand-button\" (click)=\"toggleRow(row)\" *ngIf=\"hasChildren(row)\">\n <span class=\"material-icons cPointer\">\n {{ row.isExpanded ? 'expand_less' : 'expand_more' }}\n </span>\n </button>\n </td>\n <td *ngFor=\"let header of headers\" [attr.data-label]=\"header.label\">\n <ng-container *ngIf=\"header.template\">\n <ng-container *ngTemplateOutlet=\"getTemplate(header.template); context: { $implicit: row[header.key], row: row }\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!header.template\">\n {{ row[header.key] }}\n </ng-container>\n </td>\n </tr>\n <tr *ngIf=\"row.children && row.isExpanded\" class=\"wco-table-children\">\n <td [attr.colspan]=\"headers.length + (hasExpandableRows ? 1 : 0)\">\n <div class=\"wco-table-children-content\">\n <table class=\"wco-table\">\n <thead class=\"wco-table-children-header\" [ngClass]=\"{'wco-table-children-header-hide': !row.children.showHeader}\">\n <tr>\n <th class=\"wco-table-expand-column\"></th>\n <th *ngFor=\"let header of row.children.header\">\n {{ header.label }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let childRow of row.children.data\">\n <td class=\"wco-table-expand-column\"></td>\n <td *ngFor=\"let header of row.children.header\" [attr.data-label]=\"header.label\">\n <ng-container *ngIf=\"header.template\">\n <ng-container *ngTemplateOutlet=\"getTemplate(header.template); context: { $implicit: childRow[header.key], row: childRow }\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!header.template\">\n {{ childRow[header.key] }}\n </ng-container>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </ng-container>\n <ng-container *ngIf=\"loading\">\n <tbody>\n <tr *ngFor=\"let row of [1, 2, 3, 4, 5]\">\n <td *ngIf=\"hasExpandableRows\" class=\"wco-table-expand-column\"></td>\n <td *ngFor=\"let header of headers\" role=\"cell\">\n <div class=\"wco-skeleton mt-0\" style=\"width: 100%\">\n <span class=\"block p-xxs\"></span>\n </div>\n </td>\n </tr>\n </tbody>\n </ng-container>\n\n <ng-container *ngIf=\"!loading && !data.length\">\n <tbody>\n <tr class=\"wco-table__row--empty\">\n <td\n [attr.colspan]=\"headers.length + (hasExpandableRows ? 1 : 0)\"\n class=\"wco-table__cell--empty\"\n role=\"cell\"\n >\n <ng-content select=\".empty\"></ng-content>\n </td>\n </tr>\n </tbody>\n </ng-container>\n </table>\n</div>\n", styles: [":host{display:block;width:100%}.wco-table-area{--wco-table-margin: var(--wco-spacing-xxs);--wco-table-padding: var(--wco-spacing-xxxs);--wco-table-color-header-label: var(--wco-color-neutral-900);--wco-table-color-header-cell: var(--wco-color-neutral-700);--wco-table-color-header-line: var(--wco-color-neutral-500);--wco-table-color-bg-cell: var(--wco-color-neutral-50);--wco-table-font-size-header: var(--wco-font-size-xxs);--wco-table-font-size-cell: var(--wco-font-size-xxs);--wco-table-collapse-bg: var(--wco-color-neutral-100);--wco-table-collapse-border: var(--wco-color-neutral-200);--wco-table-collapse-icon-size-width: calc(var(--wco-font-size-xxxl) * 1.167);--wco-table-collapse-icon-size: var(--wco-font-size-lg);--wco-table-collapse-icon-color: var(--wco-color-primary-600);display:block;width:100%;max-width:var(--wco-table-max-size, 100%);overflow-x:auto;-webkit-overflow-scrolling:touch}.wco-table-area table.wco-table{width:100%;border-spacing:0}@media (min-width: 800px) and (max-width: 1400px){.wco-table-area table.wco-table{min-width:900px}}@media (min-width: 800px){.wco-table-area table.wco-table ::ng-deep tr:not(.wco-table__row--empty,.wco-table-children):hover{--wco-table-color-header-line: var(--wco-color-primary-500);--wco-table-color-header-cell: var(--wco-color-neutral-700);--wco-table-color-bg-cell: var(--wco-color-neutral-100)}}.wco-table-area table.wco-table ::ng-deep td{text-align:left;padding:var(--wco-table-padding);font-size:var(--wco-table-font-size-cell);line-height:var(--wco-font-lineheight-500);color:var(--wco-table-color-header-cell);border-bottom:1px solid var(--wco-table-color-header-line);background-color:var(--wco-table-color-bg-cell)}.wco-table-area table.wco-table ::ng-deep td.wco-table__cell--empty{--wco-table-color-header-line: transparent}.wco-table-area table.wco-table ::ng-deep thead tr{margin-bottom:var(--wco-table-margin)}.wco-table-area table.wco-table ::ng-deep thead tr th{text-align:left;font-size:var(--wco-table-font-size-header, 16px);color:var(--wco-table-color-header-label, var(--wco-color-neutral-900));padding:var(--wco-table-padding);font-weight:600}.wco-table-area table.wco-table .wco-table-expand-column{width:var(--wco-table-collapse-icon-size-width);color:var(--wco-color-primary-600);min-width:var(--wco-table-collapse-icon-size-width);max-width:var(--wco-table-collapse-icon-size-width);text-align:center;vertical-align:middle}.wco-table-area table.wco-table .wco-table-expand-column button.wco-table-expand-button{width:100%;height:100%;background:none;border:none;padding:0;margin:0;cursor:pointer;display:flex;align-items:center;justify-content:center}.wco-table-area table.wco-table .wco-table-expand-column button.wco-table-expand-button span{font-size:calc(var(--wco-table-collapse-icon-size));color:var(--wco-table-collapse-icon-color)}.wco-table-area table.wco-table .wco-table-children{padding:0;background-color:var(--wco-color-neutral-50);border-radius:var(--wco-border-radius-sm);margin:var(--wco-spacing-xxs) 0;--wco-table-color-bg-cell: var(--wco-table-collapse-bg);transition:all .3s ease-in-out}.wco-table-area table.wco-table .wco-table-children .wco-table-children-content{transform:translateY(0);transition:all .3s ease-in-out}@starting-style{.wco-table-area table.wco-table .wco-table-children .wco-table-children-content{transform:translateY(-5px);transform-origin:top;opacity:0}}.wco-table-area table.wco-table .wco-table-children .wco-table-children-header.wco-table-children-header-hide{background-color:transparent!important;opacity:0;height:0;overflow:hidden;transition:all .3s ease-in-out}.wco-table-area table.wco-table .wco-table-children .wco-table-children-header.wco-table-children-header-hide tr{margin:0}.wco-table-area table.wco-table .wco-table-children .wco-table-children-header.wco-table-children-header-hide tr th{padding-top:0;padding-bottom:0;background-color:transparent;border:none;border-bottom:1px solid var(--wco-color-neutral-200);line-height:0}.wco-table-area table.wco-table .wco-table-children:hover{--wco-table-collapse-border: var(--wco-color-neutral-200)}.wco-table-area table.wco-table .wco-table-children>td{padding:0}.wco-table-area table.wco-table .wco-table-children table td,.wco-table-area table.wco-table .wco-table-children table th{background-color:#fff6}@media (max-width: 800px){.wco-table-area{--wco-table-padding: var(--wco-spacing-xxxs)}.wco-table-area table{background-color:transparent}.wco-table-area table th{display:none}.wco-table-area table tr{display:block;margin-bottom:12px;height:fit-content;border:1px solid var(--wco-color-bg)}.wco-table-area table tr>td{display:block;width:100%;border:1px solid var(--wco-color-neutral-100)}.wco-table-area table tr>td:first-child{background-color:var(--wco-color-bg)}.wco-table-area table tr>td:last-child{border:none}.wco-table-area table tr>td:not([data-label=\"\"]):before{content:attr(data-label) \": \";font-weight:700;margin-right:.5em;color:var(--wco-color-neutral-700)}.wco-table-area table tr>td:not([data-label]):before{content:\"\"}}.wco-table-area .wco-order-icon{display:flex;align-items:center;width:20px;height:20px;font-size:var(--wco-font-size-xxs)}.wco-table-area .cPointer{cursor:pointer;-webkit-user-select:none;user-select:none}.wco-table-area .f-20{font-size:var(--wco-font-size-md)}\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"] }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableComponent, decorators: [{
type: Component,
args: [{ selector: 'wco-table', standalone: true, imports: [CommonModule], template: "<div class=\"wco-table-area\">\n <table class=\"wco-table\" role=\"table\" #table>\n <thead *ngIf=\"data && data.length > 0\">\n <tr>\n <th *ngIf=\"hasExpandableRows\" class=\"wco-table-expand-column\"></th>\n <ng-container *ngFor=\"let header of headers\">\n <th *ngIf=\"!header.sortedBy\">\n {{ header.label }}\n </th>\n <th *ngIf=\"header.sortedBy\" (click)=\"onSortedBy(header)\">\n <div class=\"flex items-center cPointer\">\n <span>{{ header.label }}</span>\n <span class=\"material-icons-round text-primary-600 wco-order-icon\" [class.f-20]=\"!sortedItem || sortedItem && header.key != sortedItem.key\">\n {{\n sortedItem && header.key == sortedItem.key\n ? sortedItem.order === \"ASC\"\n ? \"north\"\n : sortedItem.order === \"DESC\"\n ? \"south\"\n : \"swap_vert\"\n : \"swap_vert\"\n }}\n </span>\n </div>\n </th>\n </ng-container>\n </tr>\n </thead>\n <ng-container *ngIf=\"!loading\">\n <tbody>\n <ng-container *ngFor=\"let row of data\">\n <tr [class.wco-table__row--empty]=\"!row\">\n <td *ngIf=\"hasExpandableRows\" class=\"wco-table-expand-column\">\n <button class=\"wco-table-expand-button\" (click)=\"toggleRow(row)\" *ngIf=\"hasChildren(row)\">\n <span class=\"material-icons cPointer\">\n {{ row.isExpanded ? 'expand_less' : 'expand_more' }}\n </span>\n </button>\n </td>\n <td *ngFor=\"let header of headers\" [attr.data-label]=\"header.label\">\n <ng-container *ngIf=\"header.template\">\n <ng-container *ngTemplateOutlet=\"getTemplate(header.template); context: { $implicit: row[header.key], row: row }\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!header.template\">\n {{ row[header.key] }}\n </ng-container>\n </td>\n </tr>\n <tr *ngIf=\"row.children && row.isExpanded\" class=\"wco-table-children\">\n <td [attr.colspan]=\"headers.length + (hasExpandableRows ? 1 : 0)\">\n <div class=\"wco-table-children-content\">\n <table class=\"wco-table\">\n <thead class=\"wco-table-children-header\" [ngClass]=\"{'wco-table-children-header-hide': !row.children.showHeader}\">\n <tr>\n <th class=\"wco-table-expand-column\"></th>\n <th *ngFor=\"let header of row.children.header\">\n {{ header.label }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let childRow of row.children.data\">\n <td class=\"wco-table-expand-column\"></td>\n <td *ngFor=\"let header of row.children.header\" [attr.data-label]=\"header.label\">\n <ng-container *ngIf=\"header.template\">\n <ng-container *ngTemplateOutlet=\"getTemplate(header.template); context: { $implicit: childRow[header.key], row: childRow }\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!header.template\">\n {{ childRow[header.key] }}\n </ng-container>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </ng-container>\n <ng-container *ngIf=\"loading\">\n <tbody>\n <tr *ngFor=\"let row of [1, 2, 3, 4, 5]\">\n <td *ngIf=\"hasExpandableRows\" class=\"wco-table-expand-column\"></td>\n <td *ngFor=\"let header of headers\" role=\"cell\">\n <div class=\"wco-skeleton mt-0\" style=\"width: 100%\">\n <span class=\"block p-xxs\"></span>\n </div>\n </td>\n </tr>\n </tbody>\n </ng-container>\n\n <ng-container *ngIf=\"!loading && !data.length\">\n <tbody>\n <tr class=\"wco-table__row--empty\">\n <td\n [attr.colspan]=\"headers.length + (hasExpandableRows ? 1 : 0)\"\n class=\"wco-table__cell--empty\"\n role=\"cell\"\n >\n <ng-content select=\".empty\"></ng-content>\n </td>\n </tr>\n </tbody>\n </ng-container>\n </table>\n</div>\n", styles: [":host{display:block;width:100%}.wco-table-area{--wco-table-margin: var(--wco-spacing-xxs);--wco-table-padding: var(--wco-spacing-xxxs);--wco-table-color-header-label: var(--wco-color-neutral-900);--wco-table-color-header-cell: var(--wco-color-neutral-700);--wco-table-color-header-line: var(--wco-color-neutral-500);--wco-table-color-bg-cell: var(--wco-color-neutral-50);--wco-table-font-size-header: var(--wco-font-size-xxs);--wco-table-font-size-cell: var(--wco-font-size-xxs);--wco-table-collapse-bg: var(--wco-color-neutral-100);--wco-table-collapse-border: var(--wco-color-neutral-200);--wco-table-collapse-icon-size-width: calc(var(--wco-font-size-xxxl) * 1.167);--wco-table-collapse-icon-size: var(--wco-font-size-lg);--wco-table-collapse-icon-color: var(--wco-color-primary-600);display:block;width:100%;max-width:var(--wco-table-max-size, 100%);overflow-x:auto;-webkit-overflow-scrolling:touch}.wco-table-area table.wco-table{width:100%;border-spacing:0}@media (min-width: 800px) and (max-width: 1400px){.wco-table-area table.wco-table{min-width:900px}}@media (min-width: 800px){.wco-table-area table.wco-table ::ng-deep tr:not(.wco-table__row--empty,.wco-table-children):hover{--wco-table-color-header-line: var(--wco-color-primary-500);--wco-table-color-header-cell: var(--wco-color-neutral-700);--wco-table-color-bg-cell: var(--wco-color-neutral-100)}}.wco-table-area table.wco-table ::ng-deep td{text-align:left;padding:var(--wco-table-padding);font-size:var(--wco-table-font-size-cell);line-height:var(--wco-font-lineheight-500);color:var(--wco-table-color-header-cell);border-bottom:1px solid var(--wco-table-color-header-line);background-color:var(--wco-table-color-bg-cell)}.wco-table-area table.wco-table ::ng-deep td.wco-table__cell--empty{--wco-table-color-header-line: transparent}.wco-table-area table.wco-table ::ng-deep thead tr{margin-bottom:var(--wco-table-margin)}.wco-table-area table.wco-table ::ng-deep thead tr th{text-align:left;font-size:var(--wco-table-font-size-header, 16px);color:var(--wco-table-color-header-label, var(--wco-color-neutral-900));padding:var(--wco-table-padding);font-weight:600}.wco-table-area table.wco-table .wco-table-expand-column{width:var(--wco-table-collapse-icon-size-width);color:var(--wco-color-primary-600);min-width:var(--wco-table-collapse-icon-size-width);max-width:var(--wco-table-collapse-icon-size-width);text-align:center;vertical-align:middle}.wco-table-area table.wco-table .wco-table-expand-column button.wco-table-expand-button{width:100%;height:100%;background:none;border:none;padding:0;margin:0;cursor:pointer;display:flex;align-items:center;justify-content:center}.wco-table-area table.wco-table .wco-table-expand-column button.wco-table-expand-button span{font-size:calc(var(--wco-table-collapse-icon-size));color:var(--wco-table-collapse-icon-color)}.wco-table-area table.wco-table .wco-table-children{padding:0;background-color:var(--wco-color-neutral-50);border-radius:var(--wco-border-radius-sm);margin:var(--wco-spacing-xxs) 0;--wco-table-color-bg-cell: var(--wco-table-collapse-bg);transition:all .3s ease-in-out}.wco-table-area table.wco-table .wco-table-children .wco-table-children-content{transform:translateY(0);transition:all .3s ease-in-out}@starting-style{.wco-table-area table.wco-table .wco-table-children .wco-table-children-content{transform:translateY(-5px);transform-origin:top;opacity:0}}.wco-table-area table.wco-table .wco-table-children .wco-table-children-header.wco-table-children-header-hide{background-color:transparent!important;opacity:0;height:0;overflow:hidden;transition:all .3s ease-in-out}.wco-table-area table.wco-table .wco-table-children .wco-table-children-header.wco-table-children-header-hide tr{margin:0}.wco-table-area table.wco-table .wco-table-children .wco-table-children-header.wco-table-children-header-hide tr th{padding-top:0;padding-bottom:0;background-color:transparent;border:none;border-bottom:1px solid var(--wco-color-neutral-200);line-height:0}.wco-table-area table.wco-table .wco-table-children:hover{--wco-table-collapse-border: var(--wco-color-neutral-200)}.wco-table-area table.wco-table .wco-table-children>td{padding:0}.wco-table-area table.wco-table .wco-table-children table td,.wco-table-area table.wco-table .wco-table-children table th{background-color:#fff6}@media (max-width: 800px){.wco-table-area{--wco-table-padding: var(--wco-spacing-xxxs)}.wco-table-area table{background-color:transparent}.wco-table-area table th{display:none}.wco-table-area table tr{display:block;margin-bottom:12px;height:fit-content;border:1px solid var(--wco-color-bg)}.wco-table-area table tr>td{display:block;width:100%;border:1px solid var(--wco-color-neutral-100)}.wco-table-area table tr>td:first-child{background-color:var(--wco-color-bg)}.wco-table-area table tr>td:last-child{border:none}.wco-table-area table tr>td:not([data-label=\"\"]):before{content:attr(data-label) \": \";font-weight:700;margin-right:.5em;color:var(--wco-color-neutral-700)}.wco-table-area table tr>td:not([data-label]):before{content:\"\"}}.wco-table-area .wco-order-icon{display:flex;align-items:center;width:20px;height:20px;font-size:var(--wco-font-size-xxs)}.wco-table-area .cPointer{cursor:pointer;-webkit-user-select:none;user-select:none}.wco-table-area .f-20{font-size:var(--wco-font-size-md)}\n"] }]
}], ctorParameters: () => [], propDecorators: { data: [{
type: Input
}], sortedItem: [{
type: Input
}], headers: [{
type: Input
}], loading: [{
type: Input
}], templates: [{
type: Input
}], handlerSortedBy: [{
type: Output
}], tableRef: [{
type: ViewChild,
args: ['table']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbXBvbmVudHMvc3JjL2xpYi90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tcG9uZW50cy9zcmMvbGliL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQTBDLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQVMvQyxNQUFNLE9BQU8sY0FBYztJQUNoQixJQUFJLEdBQWUsRUFBRSxDQUFDO0lBQ3RCLFVBQVUsQ0FBYztJQUN4QixPQUFPLEdBQWtCLEVBQUUsQ0FBQztJQUM1QixPQUFPLEdBQWEsS0FBSyxDQUFDO0lBQzFCLFNBQVMsR0FBd0MsRUFBRSxDQUFDO0lBQ25ELGVBQWUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBRTNCLFFBQVEsQ0FBYztJQUUxQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFFMUIsZ0JBQWUsQ0FBQztJQUVoQixRQUFRO1FBQ04sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxtQkFBbUI7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LEdBQWE7UUFDckIsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDakIsR0FBRyxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7WUFDakMsSUFBSSxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ25CLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxXQUFXLENBQUMsR0FBYTtRQUN2QixPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO0lBQ3hCLENBQUM7d0dBbkhVLGNBQWM7NEZBQWQsY0FBYyxrV0NYM0IsMnFKQTZHQSwydktEcEdZLFlBQVk7OzRGQUVYLGNBQWM7a0JBUDFCLFNBQVM7K0JBQ0UsV0FBVyxjQUdULElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQzt3REFHZCxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0ksZUFBZTtzQkFBeEIsTUFBTTtnQkFFYSxRQUFRO3NCQUEzQixTQUFTO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVGVtcGxhdGVSZWYsIEFmdGVyVmlld0luaXQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU29ydGVkSXRlbSwgVGFibGVIZWFkZXIsIFRhYmxlUm93IH0gZnJvbSAnLi90YWJsZS50eXBlcyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd3Y28tdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgZGF0YTogVGFibGVSb3dbXSA9IFtdO1xuICBASW5wdXQoKSBzb3J0ZWRJdGVtITogU29ydGVkSXRlbTtcbiAgQElucHV0KCkgaGVhZGVyczogVGFibGVIZWFkZXJbXSA9IFtdO1xuICBASW5wdXQoKSBsb2FkaW5nPzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSB0ZW1wbGF0ZXM6IHsgW2tleTogc3RyaW5nXTogVGVtcGxhdGVSZWY8YW55PiB9ID0ge307XG4gIEBPdXRwdXQoKSBoYW5kbGVyU29ydGVkQnkgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQFZpZXdDaGlsZCgndGFibGUnKSB0YWJsZVJlZiE6IEVsZW1lbnRSZWY7XG5cbiAgaGFzRXhwYW5kYWJsZVJvd3MgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jaGVja0V4cGFuZGFibGVSb3dzKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5hbGlnbkNoaWxkSGVhZGVycygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgdGhpcy5jaGVja0V4cGFuZGFibGVSb3dzKCk7XG4gICAgaWYgKHRoaXMudGFibGVSZWYpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hbGlnbkNoaWxkSGVhZGVycygpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2UgaMOhIGxpbmhhcyBleHBhbmTDrXZlaXMgbmEgdGFiZWxhXG4gICAqL1xuICBwcml2YXRlIGNoZWNrRXhwYW5kYWJsZVJvd3MoKSB7XG4gICAgdGhpcy5oYXNFeHBhbmRhYmxlUm93cyA9IHRoaXMuZGF0YS5zb21lKHJvdyA9PiByb3cuY2hpbGRyZW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsaW5oYSBvcyBoZWFkZXJzIGZpbGhvcyBjb20gb3MgaGVhZGVycyBwYWlcbiAgICovXG4gIHByaXZhdGUgYWxpZ25DaGlsZEhlYWRlcnMoKSB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghdGFibGUpIHJldHVybjtcbiAgICAvLyBGYXplciB1bSBsb29wIHBhcmEgcGVnYXIgb3MgaGVhZGVycyBwYWlcbiAgICBjb25zdCBwYXJlbnRIZWFkZXJzID0gdGFibGUucXVlcnlTZWxlY3RvcigndGhlYWQ6Zmlyc3QtY2hpbGQnKT8ucXVlcnlTZWxlY3RvckFsbCgndGg6bm90KC53Y28tdGFibGUtZXhwYW5kLWNvbHVtbiknKTtcbiAgICBjb25zdCBwYXJlbnRXaWR0aHMgPSBBcnJheS5mcm9tKHBhcmVudEhlYWRlcnMpLm1hcCh0aCA9PiAodGggYXMgSFRNTEVsZW1lbnQpLm9mZnNldFdpZHRoKTtcbiAgICBcbiAgXG4gICAgY29uc3QgY2hpbGRUYWJsZXMgPSB0YWJsZS5xdWVyeVNlbGVjdG9yQWxsKCcud2NvLXRhYmxlLWNoaWxkcmVuIHRhYmxlJyk7XG4gICAgY2hpbGRUYWJsZXMuZm9yRWFjaCgoY2hpbGRUYWJsZTogSFRNTEVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IGNoaWxkSGVhZGVycyA9IGNoaWxkVGFibGUucXVlcnlTZWxlY3RvckFsbCgndGg6bm90KC53Y28tdGFibGUtZXhwYW5kLWNvbHVtbiknKTtcbiAgICAgIFxuICAgICAgLy8gVmVyaWZpY2Egc2Ugb3MgaGVhZGVycyBzw6NvIGlndWFpc1xuICAgICAgY29uc3QgaGFzU2FtZUhlYWRlcnMgPSB0aGlzLmhhc1NhbWVIZWFkZXJzKFxuICAgICAgICBBcnJheS5mcm9tKHBhcmVudEhlYWRlcnMpLm1hcCh0aCA9PiAodGggYXMgSFRNTEVsZW1lbnQpLnRleHRDb250ZW50Py50cmltKCkpLFxuICAgICAgICBBcnJheS5mcm9tKGNoaWxkSGVhZGVycykubWFwKHRoID0+ICh0aCBhcyBIVE1MRWxlbWVudCkudGV4dENvbnRlbnQ/LnRyaW0oKSlcbiAgICAgICk7XG5cbiAgICAgIGlmIChoYXNTYW1lSGVhZGVycykge1xuICAgICAgICAvLyBBcGxpY2EgYXMgbGFyZ3VyYXMgZG9zIGhlYWRlcnMgcGFpIG5vcyBoZWFkZXJzIGZpbGhvc1xuICAgICAgICBjaGlsZEhlYWRlcnMuZm9yRWFjaCgodGgsIGluZGV4KSA9PiB7XG4gICAgICAgICAgaWYgKHBhcmVudFdpZHRoc1tpbmRleF0pIHtcbiAgICAgICAgICAgICh0aCBhcyBIVE1MRWxlbWVudCkuc3R5bGUud2lkdGggPSBgJHtwYXJlbnRXaWR0aHNbaW5kZXhdfXB4YDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNTYW1lSGVhZGVycyhwYXJlbnRIZWFkZXJzOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdLCBjaGlsZEhlYWRlcnM6IChzdHJpbmcgfCB1bmRlZmluZWQpW10pOiBib29sZWFuIHtcbiAgICBpZiAocGFyZW50SGVhZGVycy5sZW5ndGggIT09IGNoaWxkSGVhZGVycy5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gcGFyZW50SGVhZGVycy5ldmVyeSgoaGVhZGVyLCBpbmRleCkgPT4gaGVhZGVyID09PSBjaGlsZEhlYWRlcnNbaW5kZXhdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnTDqW0gbyB0ZW1wbGF0ZSBwYXJhIHVtYSBkZXRlcm1pbmFkYSBjb2x1bmFcbiAgICogQHBhcmFtIHRlbXBsYXRlTmFtZSAtIE5vbWUgZG8gdGVtcGxhdGVcbiAgICogQHJldHVybnMgVGVtcGxhdGVSZWYgb3UgdW5kZWZpbmVkXG4gICAqL1xuICBnZXRUZW1wbGF0ZSh0ZW1wbGF0ZU5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlc1t0ZW1wbGF0ZU5hbWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIE9yZGVuYSBhIHRhYmVsYSBwb3IgdW0gZGV0ZXJtaW5hZG8gY2FiZcOnYWxob1xuICAgKiBAcGFyYW0gaGVhZGVyIC0gQ2FiZcOnYWxobyBhIHNlciBvcmRlbmFkb1xuICAgKi9cbiAgb25Tb3J0ZWRCeShoZWFkZXI6IFRhYmxlSGVhZGVyKSB7XG4gICAgdGhpcy5zb3J0ZWRJdGVtID0ge1xuICAgICAga2V5OiBoZWFkZXIua2V5LFxuICAgICAgb3JkZXI6IGhlYWRlci5rZXkgPT0gdGhpcy5zb3J0ZWRJdGVtPy5rZXkgJiYgdGhpcy5zb3J0ZWRJdGVtLm9yZGVyID09PSAnQVNDJyA/ICdERVNDJyA6ICdBU0MnXG4gICAgfVxuXG4gICAgdGhpcy5oYW5kbGVyU29ydGVkQnkuZW1pdCh0aGlzLnNvcnRlZEl0ZW0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsdGVybmEgbyBlc3RhZG8gZGUgZXhwYW5zw6NvIGRlIHVtYSBsaW5oYVxuICAgKiBAcGFyYW0gcm93IC0gTGluaGEgYSBzZXIgZXhwYW5kaWRhL2NvbnRyYcOtZGFcbiAgICovXG4gIHRvZ2dsZVJvdyhyb3c6IFRhYmxlUm93KSB7XG4gICAgaWYgKHJvdy5jaGlsZHJlbikge1xuICAgICAgcm93LmlzRXhwYW5kZWQgPSAhcm93LmlzRXhwYW5kZWQ7XG4gICAgICBpZiAocm93LmlzRXhwYW5kZWQpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmFsaWduQ2hpbGRIZWFkZXJzKCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzZSB1bWEgbGluaGEgdGVtIGZpbGhvc1xuICAgKiBAcGFyYW0gcm93IC0gTGluaGEgYSBzZXIgdmVyaWZpY2FkYVxuICAgKiBAcmV0dXJucyB0cnVlIHNlIGEgbGluaGEgdGVtIGZpbGhvcywgZmFsc2UgY2FzbyBjb250csOhcmlvXG4gICAqL1xuICBoYXNDaGlsZHJlbihyb3c6IFRhYmxlUm93KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhcm93LmNoaWxkcmVuO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwid2NvLXRhYmxlLWFyZWFcIj5cbiAgPHRhYmxlIGNsYXNzPVwid2NvLXRhYmxlXCIgcm9sZT1cInRhYmxlXCIgI3RhYmxlPlxuICAgIDx0aGVhZCAqbmdJZj1cImRhdGEgJiYgZGF0YS5sZW5ndGggPiAwXCI+XG4gICAgICA8dHI+XG4gICAgICAgIDx0aCAqbmdJZj1cImhhc0V4cGFuZGFibGVSb3dzXCIgY2xhc3M9XCJ3Y28tdGFibGUtZXhwYW5kLWNvbHVtblwiPjwvdGg+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGhlYWRlciBvZiBoZWFkZXJzXCI+XG4gICAgICAgICAgPHRoICpuZ0lmPVwiIWhlYWRlci5zb3J0ZWRCeVwiPlxuICAgICAgICAgICAge3sgaGVhZGVyLmxhYmVsIH19XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGggKm5nSWY9XCJoZWFkZXIuc29ydGVkQnlcIiAoY2xpY2spPVwib25Tb3J0ZWRCeShoZWFkZXIpXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgY1BvaW50ZXJcIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgaGVhZGVyLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLXJvdW5kIHRleHQtcHJpbWFyeS02MDAgd2NvLW9yZGVyLWljb25cIiBbY2xhc3MuZi0yMF09XCIhc29ydGVkSXRlbSB8fCBzb3J0ZWRJdGVtICYmIGhlYWRlci5rZXkgIT0gc29ydGVkSXRlbS5rZXlcIj5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgc29ydGVkSXRlbSAmJiBoZWFkZXIua2V5ID09IHNvcnRlZEl0ZW0ua2V5XG4gICAgICAgICAgICAgICAgICAgID8gc29ydGVkSXRlbS5vcmRlciA9PT0gXCJBU0NcIlxuICAgICAgICAgICAgICAgICAgICAgID8gXCJub3J0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgOiBzb3J0ZWRJdGVtLm9yZGVyID09PSBcIkRFU0NcIlxuICAgICAgICAgICAgICAgICAgICAgID8gXCJzb3V0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgOiBcInN3YXBfdmVydFwiXG4gICAgICAgICAgICAgICAgICAgIDogXCJzd2FwX3ZlcnRcIlxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC90cj5cbiAgICA8L3RoZWFkPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZ1wiPlxuICAgICAgPHRib2R5PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3cgb2YgZGF0YVwiPlxuICAgICAgICAgIDx0ciBbY2xhc3Mud2NvLXRhYmxlX19yb3ctLWVtcHR5XT1cIiFyb3dcIj5cbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cImhhc0V4cGFuZGFibGVSb3dzXCIgY2xhc3M9XCJ3Y28tdGFibGUtZXhwYW5kLWNvbHVtblwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwid2NvLXRhYmxlLWV4cGFuZC1idXR0b25cIiAoY2xpY2spPVwidG9nZ2xlUm93KHJvdylcIiAqbmdJZj1cImhhc0NoaWxkcmVuKHJvdylcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGNQb2ludGVyXCI+XG4gICAgICAgICAgICAgICAgICB7eyByb3cuaXNFeHBhbmRlZCA/ICdleHBhbmRfbGVzcycgOiAnZXhwYW5kX21vcmUnIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGhlYWRlciBvZiBoZWFkZXJzXCIgW2F0dHIuZGF0YS1sYWJlbF09XCJoZWFkZXIubGFiZWxcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlci50ZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZXRUZW1wbGF0ZShoZWFkZXIudGVtcGxhdGUpOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93W2hlYWRlci5rZXldLCByb3c6IHJvdyB9XCI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWhlYWRlci50ZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgIHt7IHJvd1toZWFkZXIua2V5XSB9fVxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHIgKm5nSWY9XCJyb3cuY2hpbGRyZW4gJiYgcm93LmlzRXhwYW5kZWRcIiBjbGFzcz1cIndjby10YWJsZS1jaGlsZHJlblwiPlxuICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwiaGVhZGVycy5sZW5ndGggKyAoaGFzRXhwYW5kYWJsZVJvd3MgPyAxIDogMClcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndjby10YWJsZS1jaGlsZHJlbi1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwid2NvLXRhYmxlXCI+XG4gICAgICAgICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJ3Y28tdGFibGUtY2hpbGRyZW4taGVhZGVyXCIgW25nQ2xhc3NdPVwieyd3Y28tdGFibGUtY2hpbGRyZW4taGVhZGVyLWhpZGUnOiAhcm93LmNoaWxkcmVuLnNob3dIZWFkZXJ9XCI+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ3Y28tdGFibGUtZXhwYW5kLWNvbHVtblwiPjwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBoZWFkZXIgb2Ygcm93LmNoaWxkcmVuLmhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgaGVhZGVyLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgY2hpbGRSb3cgb2Ygcm93LmNoaWxkcmVuLmRhdGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ3Y28tdGFibGUtZXhwYW5kLWNvbHVtblwiPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBoZWFkZXIgb2Ygcm93LmNoaWxkcmVuLmhlYWRlclwiIFthdHRyLmRhdGEtbGFiZWxdPVwiaGVhZGVyLmxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLnRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZXRUZW1wbGF0ZShoZWFkZXIudGVtcGxhdGUpOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogY2hpbGRSb3dbaGVhZGVyLmtleV0sIHJvdzogY2hpbGRSb3cgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWhlYWRlci50ZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjaGlsZFJvd1toZWFkZXIua2V5XSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC90Ym9keT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgICAgPHRib2R5PlxuICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHJvdyBvZiBbMSwgMiwgMywgNCwgNV1cIj5cbiAgICAgICAgICA8dGQgKm5nSWY9XCJoYXNFeHBhbmRhYmxlUm93c1wiIGNsYXNzPVwid2NvLXRhYmxlLWV4cGFuZC1jb2x1bW5cIj48L3RkPlxuICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgaGVhZGVyIG9mIGhlYWRlcnNcIiByb2xlPVwiY2VsbFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndjby1za2VsZXRvbiBtdC0wXCIgc3R5bGU9XCJ3aWR0aDogMTAwJVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJsb2NrIHAteHhzXCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGJvZHk+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxvYWRpbmcgJiYgIWRhdGEubGVuZ3RoXCI+XG4gICAgICA8dGJvZHk+XG4gICAgICAgIDx0ciBjbGFzcz1cIndjby10YWJsZV9fcm93LS1lbXB0eVwiPlxuICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgW2F0dHIuY29sc3Bhbl09XCJoZWFkZXJzLmxlbmd0aCArIChoYXNFeHBhbmRhYmxlUm93cyA/IDEgOiAwKVwiXG4gICAgICAgICAgICBjbGFzcz1cIndjby10YWJsZV9fY2VsbC0tZW1wdHlcIlxuICAgICAgICAgICAgcm9sZT1cImNlbGxcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIi5lbXB0eVwiPjwvbmctY29udGVudD5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90Ym9keT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC90YWJsZT5cbjwvZGl2PlxuIl19