cfc-ds
Version:
Design System do Conselho Federal de Contabilidade baseado no govbr-ds
112 lines • 24.8 kB
JavaScript
import { Component, EventEmitter, Input, Output, } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "../illustration-state/illustration-state.component";
export class TableComponent {
columns;
lines;
customTable;
pagination = { totalElements: 0 };
hasCheckbox = true;
selectedLines = new EventEmitter();
selectLines = [];
ngOnInit() {
}
ngAfterViewInit() {
this.initializeTable();
}
initializeTable() {
const tableList = [];
const tables = Array.from(window.document.querySelectorAll('.br-table'));
for (const [index, brTable] of tables.entries()) {
tableList.push(new window.core.BRTable('br-table', brTable, index));
}
}
getNestedValue(obj, path) {
return path.split('.').reduce((acc, part) => acc && acc[part], obj);
}
selectAllCheckbox() {
const mainCheckbox = document.querySelector('.checked-all');
const checkboxes = document.querySelectorAll('.checkbox-item');
const bar = document.querySelector('.selected-bar');
const countElement = document.querySelector('.count');
const textElement = document.querySelector('.text');
if (mainCheckbox.checked) {
if (countElement) {
countElement.innerHTML = String(checkboxes.length);
}
if (textElement) {
textElement.innerHTML = String('itens selecionados');
}
if (bar) {
bar.classList.add('show');
}
}
else {
if (countElement) {
countElement.innerHTML = String(0);
}
if (bar) {
bar.classList.remove('show');
}
}
checkboxes.forEach((checkbox) => {
if (checkbox instanceof HTMLInputElement) {
checkbox.checked = mainCheckbox.checked;
const tr = checkbox.closest('tr');
if (tr) {
tr.classList.toggle('is-selected', checkbox.checked);
}
}
});
if (this.selectLines.length > 0) {
this.selectLines = [];
}
this.lines.forEach((line) => {
if (mainCheckbox.checked) {
this.selectLines.push(line);
}
else {
const itemIndex = this.selectLines.indexOf(line);
this.selectLines.splice(itemIndex, 1);
}
});
console.log(this.selectLines);
}
selectCheckbox(line) {
const mainCheckbox = document.querySelector('.checked-all');
const bar = document.querySelector('.selected-bar');
if (bar) {
bar.classList.add('show');
}
mainCheckbox.checked = false;
const itemIndex = this.selectLines.indexOf(line);
if (itemIndex > -1) {
this.selectLines.splice(itemIndex, 1);
}
else {
this.selectLines.push(line);
}
this.selectedLines.emit(this.selectLines);
console.log(this.selectLines);
}
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: "17.0.0", version: "18.2.13", type: TableComponent, selector: "cfc-table", inputs: { columns: "columns", lines: "lines", customTable: "customTable", pagination: "pagination", hasCheckbox: "hasCheckbox" }, outputs: { selectedLines: "selectedLines" }, ngImport: i0, template: "\r\n<div class=\"br-table\" data-selection=\"data-selection\">\r\n <div class=\"table-header\">\r\n <div class=\"selected-bar\">\r\n <div class=\"info\">\r\n <span class=\"count\">0</span><span class=\"text\">item selecionado</span>\r\n </div>\r\n </div>\r\n </div>\r\n @if (lines.length > 0) {\r\n <table>\r\n <thead>\r\n <tr>\r\n @if(hasCheckbox){\r\n <th class=\"column-checkbox\" scope=\"col\">\r\n <div class=\"br-checkbox hidden-label\">\r\n <input\r\n id=\"check-all-90050\"\r\n name=\"check-all-90050\"\r\n type=\"checkbox\"\r\n aria-label=\"Selecionar tudo\"\r\n data-parent=\"check-01-90050\"\r\n class=\"checked-all\"\r\n (change)=\"selectAllCheckbox()\"\r\n />\r\n <label for=\"check-all-90050\">Selecionar todas as linhas</label>\r\n </div>\r\n </th>\r\n } @for (column of columns; track $index) {\r\n <th scope=\"col\">{{ column.label }}</th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (line of lines; track $index) {\r\n <tr>\r\n @if(hasCheckbox){\r\n <td>\r\n <div class=\"br-checkbox hidden-label\">\r\n <input\r\n [attr.id]=\"'check-line-' + $index + '-90050'\"\r\n [attr.name]=\"'check-line-' + $index + '-90050'\"\r\n type=\"checkbox\"\r\n [attr.aria-label]=\"'Selecionar linha' + $index\"\r\n data-child=\"check-01-90050\"\r\n class=\"checkbox-item\"\r\n (change)=\"selectCheckbox(line)\"\r\n />\r\n <label [attr.for]=\"'check-line-' + $index + '-90050'\"\r\n >Selecionar linha {{ $index }}</label\r\n >\r\n </div>\r\n </td>\r\n } @for (column of columns; track $index) {\r\n <td [attr.data-th]=\"'T\u00EDtulo coluna ' + $index\">\r\n @if(!column.customCell){\r\n <ng-container>\r\n {{ getNestedValue(line, column.key) }}\r\n </ng-container>\r\n\r\n } @if(column.customCell) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n customTable;\r\n context: {\r\n $implicit: line,\r\n column: column,\r\n }\r\n \"\r\n >\r\n </ng-container>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n</div>\r\n@if (lines.length === 0) {\r\n<cfc-illustration-state\r\n illustrationUrl=\"https://cdngovbr-ds.estaleiro.serpro.gov.br/design-system/images/logo-positive.png\"\r\n primaryText=\"N\u00E3o foram encontrados registros para essa consulta.\"\r\n secondaryText=\"Nenhum resultado encontrado.\"\r\n suportText=\"N\u00E3o h\u00E1 informa\u00E7\u00F5es para exibir no momento.\"\r\n></cfc-illustration-state>\r\n}\r\n", styles: [".message{display:flex;flex-direction:column;justify-content:center;align-items:center}.message i{font-size:32px}thead th{background-color:#f0f0f0!important;color:#1351b4}tbody tr{cursor:pointer}.row-selected{background-color:#1351b4}.row-selected td{color:#fff}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.IllustrationStateComponent, selector: "cfc-illustration-state", inputs: ["illustrationUrl", "primaryText", "secondaryText", "suportText"] }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableComponent, decorators: [{
type: Component,
args: [{ selector: 'cfc-table', template: "\r\n<div class=\"br-table\" data-selection=\"data-selection\">\r\n <div class=\"table-header\">\r\n <div class=\"selected-bar\">\r\n <div class=\"info\">\r\n <span class=\"count\">0</span><span class=\"text\">item selecionado</span>\r\n </div>\r\n </div>\r\n </div>\r\n @if (lines.length > 0) {\r\n <table>\r\n <thead>\r\n <tr>\r\n @if(hasCheckbox){\r\n <th class=\"column-checkbox\" scope=\"col\">\r\n <div class=\"br-checkbox hidden-label\">\r\n <input\r\n id=\"check-all-90050\"\r\n name=\"check-all-90050\"\r\n type=\"checkbox\"\r\n aria-label=\"Selecionar tudo\"\r\n data-parent=\"check-01-90050\"\r\n class=\"checked-all\"\r\n (change)=\"selectAllCheckbox()\"\r\n />\r\n <label for=\"check-all-90050\">Selecionar todas as linhas</label>\r\n </div>\r\n </th>\r\n } @for (column of columns; track $index) {\r\n <th scope=\"col\">{{ column.label }}</th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (line of lines; track $index) {\r\n <tr>\r\n @if(hasCheckbox){\r\n <td>\r\n <div class=\"br-checkbox hidden-label\">\r\n <input\r\n [attr.id]=\"'check-line-' + $index + '-90050'\"\r\n [attr.name]=\"'check-line-' + $index + '-90050'\"\r\n type=\"checkbox\"\r\n [attr.aria-label]=\"'Selecionar linha' + $index\"\r\n data-child=\"check-01-90050\"\r\n class=\"checkbox-item\"\r\n (change)=\"selectCheckbox(line)\"\r\n />\r\n <label [attr.for]=\"'check-line-' + $index + '-90050'\"\r\n >Selecionar linha {{ $index }}</label\r\n >\r\n </div>\r\n </td>\r\n } @for (column of columns; track $index) {\r\n <td [attr.data-th]=\"'T\u00EDtulo coluna ' + $index\">\r\n @if(!column.customCell){\r\n <ng-container>\r\n {{ getNestedValue(line, column.key) }}\r\n </ng-container>\r\n\r\n } @if(column.customCell) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n customTable;\r\n context: {\r\n $implicit: line,\r\n column: column,\r\n }\r\n \"\r\n >\r\n </ng-container>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n</div>\r\n@if (lines.length === 0) {\r\n<cfc-illustration-state\r\n illustrationUrl=\"https://cdngovbr-ds.estaleiro.serpro.gov.br/design-system/images/logo-positive.png\"\r\n primaryText=\"N\u00E3o foram encontrados registros para essa consulta.\"\r\n secondaryText=\"Nenhum resultado encontrado.\"\r\n suportText=\"N\u00E3o h\u00E1 informa\u00E7\u00F5es para exibir no momento.\"\r\n></cfc-illustration-state>\r\n}\r\n", styles: [".message{display:flex;flex-direction:column;justify-content:center;align-items:center}.message i{font-size:32px}thead th{background-color:#f0f0f0!important;color:#1351b4}tbody tr{cursor:pointer}.row-selected{background-color:#1351b4}.row-selected td{color:#fff}\n"] }]
}], propDecorators: { columns: [{
type: Input
}], lines: [{
type: Input
}], customTable: [{
type: Input
}], pagination: [{
type: Input
}], hasCheckbox: [{
type: Input
}], selectedLines: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2ZjLWRzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZmMtZHMvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7Ozs7QUFTdkIsTUFBTSxPQUFPLGNBQWM7SUFDaEIsT0FBTyxDQUFhO0lBQ3BCLEtBQUssQ0FBTztJQUNaLFdBQVcsQ0FBb0I7SUFDL0IsVUFBVSxHQUFRLEVBQUUsYUFBYSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3ZDLFdBQVcsR0FBWSxJQUFJLENBQUM7SUFDM0IsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFFN0MsV0FBVyxHQUFVLEVBQUUsQ0FBQztJQUV4QixRQUFRO0lBQ1IsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELGVBQWU7UUFDYixNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDckIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFFekUsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ2hELFNBQVMsQ0FBQyxJQUFJLENBQ1osSUFBSyxNQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FB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aW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBUZW1wbGF0ZVJlZixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQ29sdW1ucyB9IGZyb20gJy4uLy4uL21vZGVscy90YWJsZS5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NmYy10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vdGFibGUuY29tcG9uZW50LnNjc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG4gIEBJbnB1dCgpIGNvbHVtbnMhOiBDb2x1bW5zW107XHJcbiAgQElucHV0KCkgbGluZXMhOiBhbnk7XHJcbiAgQElucHV0KCkgY3VzdG9tVGFibGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBJbnB1dCgpIHBhZ2luYXRpb246IGFueSA9IHsgdG90YWxFbGVtZW50czogMCB9O1xyXG4gIEBJbnB1dCgpIGhhc0NoZWNrYm94OiBib29sZWFuID0gdHJ1ZTtcclxuICBAT3V0cHV0KCkgc2VsZWN0ZWRMaW5lcyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgc2VsZWN0TGluZXM6IGFueVtdID0gW107XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0aWFsaXplVGFibGUoKTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVUYWJsZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHRhYmxlTGlzdCA9IFtdO1xyXG4gICAgY29uc3QgdGFibGVzID0gQXJyYXkuZnJvbSh3aW5kb3cuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmJyLXRhYmxlJykpO1xyXG5cclxuICAgIGZvciAoY29uc3QgW2luZGV4LCBiclRhYmxlXSBvZiB0YWJsZXMuZW50cmllcygpKSB7XHJcbiAgICAgIHRhYmxlTGlzdC5wdXNoKFxyXG4gICAgICAgIG5ldyAod2luZG93IGFzIGFueSkuY29yZS5CUlRhYmxlKCdici10YWJsZScsIGJyVGFibGUsIGluZGV4KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0TmVzdGVkVmFsdWUob2JqOiBhbnksIHBhdGg6IHN0cmluZyk6IGFueSB7XHJcbiAgICByZXR1cm4gcGF0aC5zcGxpdCgnLicpLnJlZHVjZSgoYWNjLCBwYXJ0KSA9PiBhY2MgJiYgYWNjW3BhcnRdLCBvYmopO1xyXG4gIH1cclxuXHJcblxyXG4gIHNlbGVjdEFsbENoZWNrYm94KCkge1xyXG4gICAgY29uc3QgbWFpbkNoZWNrYm94ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgJy5jaGVja2VkLWFsbCdcclxuICAgICkgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgIGNvbnN0IGNoZWNrYm94ZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY2hlY2tib3gtaXRlbScpO1xyXG4gICAgY29uc3QgYmFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNlbGVjdGVkLWJhcicpO1xyXG4gICAgY29uc3QgY291bnRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNvdW50Jyk7XHJcbiAgICBjb25zdCB0ZXh0RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy50ZXh0Jyk7XHJcbiAgICBpZiAobWFpbkNoZWNrYm94LmNoZWNrZWQpIHtcclxuICAgICAgaWYgKGNvdW50RWxlbWVudCkge1xyXG4gICAgICAgIGNvdW50RWxlbWVudC5pbm5lckhUTUwgPSBTdHJpbmcoY2hlY2tib3hlcy5sZW5ndGgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0ZXh0RWxlbWVudCkge1xyXG4gICAgICAgIHRleHRFbGVtZW50LmlubmVySFRNTCA9IFN0cmluZygnaXRlbnMgc2VsZWNpb25hZG9zJyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGJhcikge1xyXG4gICAgICAgIGJhci5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChjb3VudEVsZW1lbnQpIHtcclxuICAgICAgICBjb3VudEVsZW1lbnQuaW5uZXJIVE1MID0gU3RyaW5nKDApO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChiYXIpIHtcclxuICAgICAgICBiYXIuY2xhc3NMaXN0LnJlbW92ZSgnc2hvdycpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tib3hlcy5mb3JFYWNoKChjaGVja2JveCkgPT4ge1xyXG4gICAgICBpZiAoY2hlY2tib3ggaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XHJcbiAgICAgICAgY2hlY2tib3guY2hlY2tlZCA9IG1haW5DaGVja2JveC5jaGVja2VkO1xyXG4gICAgICAgIGNvbnN0IHRyID0gY2hlY2tib3guY2xvc2VzdCgndHInKTtcclxuICAgICAgICBpZiAodHIpIHtcclxuICAgICAgICAgIHRyLmNsYXNzTGlzdC50b2dnbGUoJ2lzLXNlbGVjdGVkJywgY2hlY2tib3guY2hlY2tlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5zZWxlY3RMaW5lcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0TGluZXMgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxpbmVzLmZvckVhY2goKGxpbmU6IGFueSkgPT4ge1xyXG4gICAgICBpZiAobWFpbkNoZWNrYm94LmNoZWNrZWQpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdExpbmVzLnB1c2gobGluZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gdGhpcy5zZWxlY3RMaW5lcy5pbmRleE9mKGxpbmUpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0TGluZXMuc3BsaWNlKGl0ZW1JbmRleCwgMSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5zZWxlY3RMaW5lcyk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RDaGVja2JveChsaW5lOiBhbnkpIHtcclxuICAgIGNvbnN0IG1haW5DaGVja2JveCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICcuY2hlY2tlZC1hbGwnXHJcbiAgICApIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICBjb25zdCBiYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc2VsZWN0ZWQtYmFyJyk7XHJcbiAgICBpZiAoYmFyKSB7XHJcbiAgICAgIGJhci5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7XHJcbiAgICB9XHJcbiAgICBtYWluQ2hlY2tib3guY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgY29uc3QgaXRlbUluZGV4ID0gdGhpcy5zZWxlY3RMaW5lcy5pbmRleE9mKGxpbmUpO1xyXG4gICAgaWYgKGl0ZW1JbmRleCA+IC0xKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0TGluZXMuc3BsaWNlKGl0ZW1JbmRleCwgMSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdExpbmVzLnB1c2gobGluZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkTGluZXMuZW1pdCh0aGlzLnNlbGVjdExpbmVzKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMuc2VsZWN0TGluZXMpO1xyXG4gIH1cclxufVxyXG4iLCJcclxuPGRpdiBjbGFzcz1cImJyLXRhYmxlXCIgZGF0YS1zZWxlY3Rpb249XCJkYXRhLXNlbGVjdGlvblwiPlxyXG4gIDxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZC1iYXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImluZm9cIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImNvdW50XCI+MDwvc3Bhbj48c3BhbiBjbGFzcz1cInRleHRcIj5pdGVtIHNlbGVjaW9uYWRvPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIEBpZiAobGluZXMubGVuZ3RoID4gMCkge1xyXG4gIDx0YWJsZT5cclxuICAgIDx0aGVhZD5cclxuICAgICAgPHRyPlxyXG4gICAgICAgIEBpZihoYXNDaGVja2JveCl7XHJcbiAgICAgICAgPHRoIGNsYXNzPVwiY29sdW1uLWNoZWNrYm94XCIgc2NvcGU9XCJjb2xcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJici1jaGVja2JveCBoaWRkZW4tbGFiZWxcIj5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgaWQ9XCJjaGVjay1hbGwtOTAwNTBcIlxyXG4gICAgICAgICAgICAgIG5hbWU9XCJjaGVjay1hbGwtOTAwNTBcIlxyXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlNlbGVjaW9uYXIgdHVkb1wiXHJcbiAgICAgICAgICAgICAgZGF0YS1wYXJlbnQ9XCJjaGVjay0wMS05MDA1MFwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjaGVja2VkLWFsbFwiXHJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZWxlY3RBbGxDaGVja2JveCgpXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cImNoZWNrLWFsbC05MDA1MFwiPlNlbGVjaW9uYXIgdG9kYXMgYXMgbGluaGFzPC9sYWJlbD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgICAgfSBAZm9yIChjb2x1bW4gb2YgY29sdW1uczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+e3sgY29sdW1uLmxhYmVsIH19PC90aD5cclxuICAgICAgICB9XHJcbiAgICAgIDwvdHI+XHJcbiAgICA8L3RoZWFkPlxyXG4gICAgPHRib2R5PlxyXG4gICAgICBAZm9yIChsaW5lIG9mIGxpbmVzOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgPHRyPlxyXG4gICAgICAgIEBpZihoYXNDaGVja2JveCl7XHJcbiAgICAgICAgPHRkPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJyLWNoZWNrYm94IGhpZGRlbi1sYWJlbFwiPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICBbYXR0ci5pZF09XCInY2hlY2stbGluZS0nICsgJGluZGV4ICsgJy05MDA1MCdcIlxyXG4gICAgICAgICAgICAgIFthdHRyLm5hbWVdPVwiJ2NoZWNrLWxpbmUtJyArICRpbmRleCArICctOTAwNTAnXCJcclxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1NlbGVjaW9uYXIgbGluaGEnICsgJGluZGV4XCJcclxuICAgICAgICAgICAgICBkYXRhLWNoaWxkPVwiY2hlY2stMDEtOTAwNTBcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tib3gtaXRlbVwiXHJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZWxlY3RDaGVja2JveChsaW5lKVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxsYWJlbCBbYXR0ci5mb3JdPVwiJ2NoZWNrLWxpbmUtJyArICRpbmRleCArICctOTAwNTAnXCJcclxuICAgICAgICAgICAgICA+U2VsZWNpb25hciBsaW5oYSB7eyAkaW5kZXggfX08L2xhYmVsXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgfSBAZm9yIChjb2x1bW4gb2YgY29sdW1uczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgPHRkIFthdHRyLmRhdGEtdGhdPVwiJ1TDrXR1bG8gY29sdW5hICcgKyAkaW5kZXhcIj5cclxuICAgICAgICAgIEBpZighY29sdW1uLmN1c3RvbUNlbGwpe1xyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAge3sgZ2V0TmVzdGVkVmFsdWUobGluZSwgY29sdW1uLmtleSkgfX1cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIH0gQGlmKGNvbHVtbi5jdXN0b21DZWxsKSB7XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgICAgY3VzdG9tVGFibGU7XHJcbiAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgJGltcGxpY2l0OiBsaW5lLFxyXG4gICAgICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4sXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgICB9XHJcbiAgICAgIDwvdHI+XHJcbiAgICAgIH1cclxuICAgIDwvdGJvZHk+XHJcbiAgPC90YWJsZT5cclxuIH1cclxuPC9kaXY+XHJcbkBpZiAobGluZXMubGVuZ3RoID09PSAwKSB7XHJcbjxjZmMtaWxsdXN0cmF0aW9uLXN0YXRlXHJcbiAgaWxsdXN0cmF0aW9uVXJsPVwiaHR0cHM6Ly9jZG5nb3Zici1kcy5lc3RhbGVpcm8uc2VycHJvLmdvdi5ici9kZXNpZ24tc3lzdGVtL2ltYWdlcy9sb2dvLXBvc2l0aXZlLnBuZ1wiXHJcbiAgcHJpbWFyeVRleHQ9XCJOw6NvIGZvcmFtIGVuY29udHJhZG9zIHJlZ2lzdHJvcyBwYXJhIGVzc2EgY29uc3VsdGEuXCJcclxuICBzZWNvbmRhcnlUZXh0PVwiTmVuaHVtIHJlc3VsdGFkbyBlbmNvbnRyYWRvLlwiXHJcbiAgc3Vwb3J0VGV4dD1cIk7Do28gaMOhIGluZm9ybWHDp8O1ZXMgcGFyYSBleGliaXIgbm8gbW9tZW50by5cIlxyXG4+PC9jZmMtaWxsdXN0cmF0aW9uLXN0YXRlPlxyXG59XHJcbiJdfQ==