keevo-components 2.0.3 → 2.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/kv-layout/layout/kv-layout.component.mjs +62 -3
- package/fesm2022/keevo-components.mjs +61 -2
- package/fesm2022/keevo-components.mjs.map +1 -1
- package/lib/components/kv-layout/layout/kv-layout.component.d.ts +13 -1
- package/lib/components/kv-table/kv-table.component.d.ts +1 -1
- package/lib/components/kv-table-expandable/kv-table-expandable.component.d.ts +1 -1
- package/package.json +1 -1
|
@@ -65,6 +65,7 @@ export class KvLayoutComponent {
|
|
|
65
65
|
this.userEmail = '';
|
|
66
66
|
this.idsAplicativosMenuHide = [];
|
|
67
67
|
this.useSelectionApps = true;
|
|
68
|
+
this.showTrilhaConhecimento = false;
|
|
68
69
|
this.accessKeePassEmit = new EventEmitter();
|
|
69
70
|
this.changeEmpresaEmit = new EventEmitter();
|
|
70
71
|
this.changeLicenseEmit = new EventEmitter();
|
|
@@ -72,7 +73,53 @@ export class KvLayoutComponent {
|
|
|
72
73
|
this.logoutEmit = new EventEmitter();
|
|
73
74
|
this.selectAppEmit = new EventEmitter();
|
|
74
75
|
this.navigateToDefaultRouteEmit = new EventEmitter();
|
|
76
|
+
this.downloadDocEmit = new EventEmitter();
|
|
77
|
+
this.showVideoDocEmit = new EventEmitter();
|
|
75
78
|
this.widthPage = signal(0);
|
|
79
|
+
this.trilhaConhecimento = [
|
|
80
|
+
{
|
|
81
|
+
title: 'Cadastre as suas empresas',
|
|
82
|
+
icon: 'business',
|
|
83
|
+
subtitle: 'Saiba como cadastrar informações essenciais das empresas.',
|
|
84
|
+
doc: 'https://work-assets.keevo.com.br/keevo-center/1+-+Cadastro+de+Empresas.pdf',
|
|
85
|
+
video: 'https://work-assets.keevo.com.br/keevo-center/1+-+Cadastro+de+Empresas+no+Keevo+Center.mp4'
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
title: 'Cadastro de Certificados e Procuração',
|
|
89
|
+
icon: 'verified_user',
|
|
90
|
+
subtitle: 'Veja como cadastrar um certificado e procuração necessários para as empresas.',
|
|
91
|
+
doc: 'https://work-assets.keevo.com.br/keevo-center/2+-+Cadastro+de+Certificados+e+Procura%C3%A7%C3%B5es.pdf',
|
|
92
|
+
video: 'https://work-assets.keevo.com.br/keevo-center/2+-+Cadastro+de+Certificados+e+Procura%C3%A7%C3%B5es.mp4',
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
title: 'Configuração da Gestão de Licença',
|
|
96
|
+
icon: 'fact_check',
|
|
97
|
+
subtitle: 'Aprenda a vincular as licenças para cada empresa aqui.',
|
|
98
|
+
doc: 'https://work-assets.keevo.com.br/keevo-center/3+-+Configura%C3%A7%C3%A3o+da+Gest%C3%A3o+de+Licen%C3%A7a.pdf',
|
|
99
|
+
video: 'https://work-assets.keevo.com.br/keevo-center/3+-+Configura%C3%A7%C3%A3o+de+Gest%C3%A3o+de+Licen%C3%A7as.mp4',
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
title: 'Cadastro de Usuário',
|
|
103
|
+
icon: 'person_add',
|
|
104
|
+
subtitle: 'Saiba como cadastrar usuários que terão acesso aos sistemas da Keevo.',
|
|
105
|
+
doc: 'https://work-assets.keevo.com.br/keevo-center/4+-+Cadastro+de+Usu%C3%A1rio.pdf',
|
|
106
|
+
video: 'https://work-assets.keevo.com.br/keevo-center/4+-+Cadastro+de+Usu%C3%A1rio.mp4',
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
title: 'Papéis e Permissões',
|
|
110
|
+
icon: 'manage_accounts',
|
|
111
|
+
subtitle: 'Descubra como configurar papéis e permissões dos seus usuários registrados.',
|
|
112
|
+
doc: 'https://work-assets.keevo.com.br/keevo-center/5+-+Pap%C3%A9is+e+Permiss%C3%B5es.pdf',
|
|
113
|
+
video: 'https://work-assets.keevo.com.br/keevo-center/5+-+Pap%C3%A9is+e+Permiss%C3%B5es.mp4',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
title: 'Cadastro de Contadores',
|
|
117
|
+
icon: 'badge',
|
|
118
|
+
subtitle: 'Aprenda como cadastrar seus contadores.',
|
|
119
|
+
doc: 'https://work-assets.keevo.com.br/keevo-center/6+-+Cadastro+de+Contadores.pdf',
|
|
120
|
+
video: 'https://work-assets.keevo.com.br/keevo-center/6+-+Cadastro+de+Contadores.mp4',
|
|
121
|
+
},
|
|
122
|
+
];
|
|
76
123
|
this.topMenuOptionsReversed = false;
|
|
77
124
|
this.processar_menus = effect(() => {
|
|
78
125
|
if (this.profileImage()) {
|
|
@@ -291,12 +338,18 @@ export class KvLayoutComponent {
|
|
|
291
338
|
}
|
|
292
339
|
}
|
|
293
340
|
}
|
|
341
|
+
downloadDoc(trilha) {
|
|
342
|
+
this.downloadDocEmit.emit(trilha);
|
|
343
|
+
}
|
|
344
|
+
showVideoDoc(trilha) {
|
|
345
|
+
this.showVideoDocEmit.emit(trilha);
|
|
346
|
+
}
|
|
294
347
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvLayoutComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.FormBuilder }, { token: i2.Router }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
295
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvLayoutComponent, selector: "kv-layout", inputs: { apps: { classPropertyName: "apps", publicName: "apps", isSignal: false, isRequired: false, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: false, isRequired: false, transformFunction: null }, useCard: { classPropertyName: "useCard", publicName: "useCard", isSignal: false, isRequired: false, transformFunction: null }, topMenusVisible: { classPropertyName: "topMenusVisible", publicName: "topMenusVisible", isSignal: true, isRequired: false, transformFunction: null }, profileImage: { classPropertyName: "profileImage", publicName: "profileImage", isSignal: true, isRequired: false, transformFunction: null }, breadCrumbItems: { classPropertyName: "breadCrumbItems", publicName: "breadCrumbItems", isSignal: false, isRequired: false, transformFunction: null }, masters: { classPropertyName: "masters", publicName: "masters", isSignal: false, isRequired: false, transformFunction: null }, menus: { classPropertyName: "menus", publicName: "menus", isSignal: true, isRequired: false, transformFunction: null }, expandMenu: { classPropertyName: "expandMenu", publicName: "expandMenu", isSignal: true, isRequired: false, transformFunction: null }, logoMenuExpand: { classPropertyName: "logoMenuExpand", publicName: "logoMenuExpand", isSignal: false, isRequired: false, transformFunction: null }, logoMenuHide: { classPropertyName: "logoMenuHide", publicName: "logoMenuHide", isSignal: false, isRequired: false, transformFunction: null }, selectedApp: { classPropertyName: "selectedApp", publicName: "selectedApp", isSignal: false, isRequired: false, transformFunction: null }, selectedEmpresa: { classPropertyName: "selectedEmpresa", publicName: "selectedEmpresa", isSignal: false, isRequired: false, transformFunction: null }, selectedMaster: { classPropertyName: "selectedMaster", publicName: "selectedMaster", isSignal: false, isRequired: false, transformFunction: null }, showButtonApps: { classPropertyName: "showButtonApps", publicName: "showButtonApps", isSignal: false, isRequired: false, transformFunction: null }, showButtonUser: { classPropertyName: "showButtonUser", publicName: "showButtonUser", isSignal: false, isRequired: false, transformFunction: null }, showExpandMenu: { classPropertyName: "showExpandMenu", publicName: "showExpandMenu", isSignal: false, isRequired: false, transformFunction: null }, showDropdownLicenca: { classPropertyName: "showDropdownLicenca", publicName: "showDropdownLicenca", isSignal: false, isRequired: false, transformFunction: null }, showMenu: { classPropertyName: "showMenu", publicName: "showMenu", isSignal: false, isRequired: false, transformFunction: null }, showTrocaEmpresa: { classPropertyName: "showTrocaEmpresa", publicName: "showTrocaEmpresa", isSignal: false, isRequired: false, transformFunction: null }, showBreadcrumb: { classPropertyName: "showBreadcrumb", publicName: "showBreadcrumb", isSignal: false, isRequired: false, transformFunction: null }, userName: { classPropertyName: "userName", publicName: "userName", isSignal: false, isRequired: false, transformFunction: null }, userEmail: { classPropertyName: "userEmail", publicName: "userEmail", isSignal: false, isRequired: false, transformFunction: null }, masterName: { classPropertyName: "masterName", publicName: "masterName", isSignal: false, isRequired: false, transformFunction: null }, empresaName: { classPropertyName: "empresaName", publicName: "empresaName", isSignal: false, isRequired: false, transformFunction: null }, idsAplicativosMenuHide: { classPropertyName: "idsAplicativosMenuHide", publicName: "idsAplicativosMenuHide", isSignal: false, isRequired: false, transformFunction: null }, useSelectionApps: { classPropertyName: "useSelectionApps", publicName: "useSelectionApps", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { menus: "menusChange", expandMenu: "expandMenuChange", accessKeePassEmit: "accessKeePassEmit", changeEmpresaEmit: "changeEmpresaEmit", changeLicenseEmit: "changeLicenseEmit", expandMenuEmit: "expandMenuEmit", logoutEmit: "logoutEmit", selectAppEmit: "selectAppEmit", navigateToDefaultRouteEmit: "navigateToDefaultRouteEmit" }, host: { listeners: { "window:resize": "onWindowResize($event)" } }, viewQueries: [{ propertyName: "meusDadosPanel", first: true, predicate: ["meusDadosPanel"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-row full-container\">\r\n @if(showMenu) {\r\n <p-sidebar\r\n #sidebarRef\r\n [visible]=\"true\"\r\n [showCloseIcon]=\"false\"\r\n [modal]=\"false\"\r\n [style]=\"{ width: expandMenu() ? '17rem' : '3.65rem' }\"\r\n styleClass=\"transition-all\"\r\n >\r\n <ng-template pTemplate=\"headless\">\r\n <div class=\"h-full flex flex-column overflow-hidden p-2\">\r\n <div\r\n class=\"flex-none flex flex-column gap-3 justify-content-between flex-shrink-0 overflow-hidden\"\r\n >\r\n <!-- LOGO -->\r\n <div\r\n class=\"flex {{\r\n expandMenu() ? 'flex-row' : 'flex-column'\r\n }} align-items-center {{\r\n expandMenu()\r\n ? 'justify-content-between'\r\n : 'justify-content-center'\r\n }} p-2\"\r\n >\r\n <!-- Logo para o menu expandido -->\r\n @if(expandMenu() && logoMenuExpand){\r\n <img\r\n alt=\"Card\"\r\n [src]=\"logoMenuExpand\"\r\n [style.height]=\"'2.4rem'\"\r\n width=\"auto\"\r\n class=\"cursor-pointer p-0\"\r\n (click)=\"navigateToDefaultRoute()\"\r\n />\r\n }\r\n\r\n <!-- Logo para o menu minimizado-->\r\n @if(!expandMenu() && logoMenuHide){\r\n <img\r\n alt=\"Card\"\r\n [src]=\"logoMenuHide\"\r\n [style.height]=\"'2.4rem'\"\r\n width=\"auto\"\r\n class=\"cursor-pointer p-1\"\r\n (click)=\"navigateToDefaultRoute()\"\r\n />\r\n }\r\n\r\n <!-- Toggle menu -->\r\n @if(showExpandMenu){\r\n <!-- <span class=\"material-symbols-outlined side-menu-item\" (click)=\"expandMenu.set(!expandMenu())\">menu</span> -->\r\n }\r\n </div>\r\n\r\n @if(showTrocaEmpresa){\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item troca-empresa-container mb-3 py-2\"\r\n [pTooltip]=\"'Trocar de empresa'\"\r\n [tooltipPosition]=\"'right'\"\r\n (click)=\"changeEmpresa($event)\"\r\n >\r\n @if(expandMenu() && selectedEmpresa){\r\n <div\r\n class=\"flex flex-column w-full\"\r\n (click)=\"changeEmpresa($event)\"\r\n >\r\n @if(this.selectedEmpresa.razaosocial){\r\n <span\r\n class=\"text-xs font-semibold mr-2 color-system\"\r\n [style.fontSuze]=\"'.5rem'\"\r\n >\r\n {{ nameEmpresa(this.selectedEmpresa.razaosocial) }}\r\n </span>\r\n } @if(this.selectedEmpresa.cpfcnpj){\r\n <span\r\n class=\"text-xs mt-1 color-system\"\r\n [style.fontSuze]=\"'.5rem'\"\r\n >{{ this.selectedEmpresa.cpfcnpj | cpfCnpj }}</span\r\n >\r\n }\r\n </div>\r\n\r\n }\r\n\r\n <span class=\"material-symbols-outlined\">swap_horiz</span>\r\n </div>\r\n }\r\n </div>\r\n <!-- MENUS -->\r\n <div\r\n class=\"flex-1 list-none m-0 overflow-y-auto max-h-full menus-container\"\r\n >\r\n <!-- menus -->\r\n @for (menu of menus(); track $index) {\r\n @if(!idsAplicativosMenuHide.includes(menu.idaplicativo)){\r\n <li>\r\n <!-- menu que n\u00E3o tem filho -->\r\n @if( !menu.indmenupai && (!menu.idmenupai || menu.idmenupai == 0)){\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n (click)=\"callRoute(menu.link)\"\r\n >\r\n <span class=\"material-symbols-outlined\">{{\r\n menu.icone || \"lens_blur\"\r\n }}</span>\r\n @if(expandMenu()){\r\n <label>{{ menu.descricaomenu }}</label>\r\n }\r\n </div>\r\n }\r\n <!-- menu com filho -->\r\n @if(menu.indmenupai){\r\n <div\r\n class=\"menu-parent\"\r\n id=\"menu-parent-{{ $index }}\"\r\n (mouseenter)=\"exibirMenuChild($event, $index)\"\r\n (mouseleave)=\"menuVisivel.set(undefined)\"\r\n >\r\n <div\r\n class=\" flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n >\r\n <span class=\"material-symbols-outlined\">{{\r\n menu.icone || \"lens_blur\"\r\n }}</span>\r\n @if(expandMenu()){\r\n <label>{{ menu.descricaomenu }}</label>\r\n <span class=\"material-symbols-outlined\">chevron_right</span>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"menu-childs\"\r\n id=\"menu-child-{{ $index }}\"\r\n [style.opacity]=\"menuVisivel() === $index ? '1' : '0'\"\r\n [style.pointerEvents]=\"\r\n menuVisivel() === $index ? 'auto' : 'none'\r\n \"\r\n >\r\n <div class=\"flex align-items-center\">\r\n <p class=\"p-0 m-0 font-bold pt-2 px-2 text-xs\">\r\n {{ menu.descricaomenu }}\r\n </p>\r\n </div>\r\n <p-divider\r\n class=\"p-0 m-0\"\r\n [style.opacity]=\"1\"\r\n type=\"solid\"\r\n ></p-divider>\r\n <div class=\"menu-childs-content p-0 m-0\">\r\n @for (item of returnMenuChild(menu.idmenu); track $index) {\r\n\r\n <div\r\n class=\"side-menu-item py-2 px-2 text-sm\"\r\n (click)=\"callRoute(item.link)\"\r\n >\r\n {{ item.descricaomenu }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </li>\r\n } }\r\n </div>\r\n\r\n @if(useSelectionApps) {\r\n <!-- APPS E SAIR -->\r\n <p-divider class=\"px-2\" [style.opacity]=\"1\" type=\"solid\"></p-divider>\r\n\r\n <div class=\"flex-none list-none m-0 overflow-y-auto max-h-full\">\r\n <li>\r\n <div\r\n class=\"menu-parent\"\r\n id=\"menu-sistemas-parent\"\r\n (mouseenter)=\"exibirMenuChild($event, -1)\"\r\n (mouseleave)=\"menuVisivel.set(undefined)\"\r\n >\r\n <!-- <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n [pTooltip]=\"!expandMenu() ? 'Sistemas' : ''\"\r\n >\r\n <span class=\"material-symbols-outlined\">grid_view</span>\r\n \r\n @if(expandMenu()){\r\n <label>Sistemas</label>\r\n <span class=\"material-symbols-outlined\">chevron_right</span>\r\n }\r\n </div> -->\r\n\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item-system troca-sistema-container py-2\"\r\n (click)=\"changeEmpresa($event)\"\r\n >\r\n <!-- <p-avatar\r\n icon=\"pi pi-th-large\"\r\n styleClass=\"mr-2\"\r\n size=\"normal\"\r\n [style]=\"{\r\n 'background-color': 'rgb(var(--kv-color-system), 1)',\r\n color: 'white'\r\n }\"\r\n /> -->\r\n <div\r\n [style]=\"{\r\n 'background-color': 'rgb(var(--kv-color-system), .2)',\r\n color: 'rgb(var(--kv-color-system), 1)',\r\n 'border-radius': '.5rem',\r\n padding: '.25rem'\r\n }\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <span class=\"material-symbols-outlined\">\r\n dashboard_customize\r\n </span>\r\n </div>\r\n\r\n @if(expandMenu()) {\r\n <div class=\"flex flex-column w-full\">\r\n <span class=\"text-sm font-semibold mr-2 color-system\">\r\n Meus Sistemas\r\n </span>\r\n </div>\r\n\r\n \r\n <span\r\n class=\"material-symbols-outlined\"\r\n [style.color]=\"'rgb(var(--kv-color-system), 1)'\"\r\n >unfold_more</span\r\n >\r\n }\r\n\r\n </div>\r\n\r\n <div\r\n class=\"menu-childs\"\r\n id=\"menu-sistemas-child\"\r\n [style.opacity]=\"menuVisivel() === -1 ? '1' : '0'\"\r\n [style.pointerEvents]=\"menuVisivel() === -1 ? 'auto' : 'none'\"\r\n >\r\n <p class=\"p-0 m-0 font-bold pt-2 pl-3 text-xs\">Sistemas</p>\r\n @for (item of apps; track $index) {\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 side-menu-item py-2 pl-3 pr-1\"\r\n (click)=\"\r\n callRoute(item.rotapadrao); selectApp(item.idaplicativo)\r\n \"\r\n >\r\n <img\r\n [src]=\"item.urlicone\"\r\n class=\"h-2rem w-2rem border-round-lg\"\r\n />\r\n <div class=\"text-sm\">\r\n {{ item.nomeaplicativo }}\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </li>\r\n <!-- <li>\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n [pTooltip]=\"!expandMenu() ? 'Sair' : ''\"\r\n [style.color]=\"'rgba(252, 3, 3, 0.6)'\"\r\n (click)=\"logout($event)\"\r\n >\r\n <span class=\"material-symbols-outlined\">exit_to_app</span>\r\n @if(expandMenu()){\r\n <label>Sair</label>\r\n }\r\n </div>\r\n </li> -->\r\n </div>\r\n }\r\n </div>\r\n </ng-template>\r\n </p-sidebar>\r\n }\r\n\r\n <!-- SE\u00C7\u00C3O CONTE\u00DADO -->\r\n <div\r\n class=\"w-auto h-screen page-content overflow-y-hidden flex flex-column\"\r\n id=\"page-content\"\r\n style=\"width: 100vw !important\"\r\n >\r\n <!-- TOPO -->\r\n <div\r\n class=\"flex flex-row flex-wrap align-items-center justify-content-between my-2 mx-3 mb-0\"\r\n >\r\n @if(!showMenu) {\r\n <!-- Logo home -->\r\n <div>\r\n <img [src]=\"logoMenuExpand\" width=\"150\" />\r\n </div>\r\n } @else {\r\n <!-- Breadcrumbs -->\r\n @if(showBreadcrumb) {\r\n <div class=\"h-full\">\r\n <p-breadcrumb\r\n *ngIf=\"widthCard > 400\"\r\n styleClass=\"border-none p-0 flex align-items-center h-2rem bg-transparent\"\r\n [model]=\"breadCrumbItems\"\r\n (onItemClick)=\"callRoute($event.item.routerLink, true)\"\r\n >\r\n <ng-template pTemplate=\"item\" let-item let-i=\"index\">\r\n @if(breadCrumbItems.indexOf(item) < breadCrumbItems.length - 1){\r\n <span class=\"font-normal\">{{ item.label }}</span>\r\n } @else {\r\n <span class=\"font-bold\">{{ item.label }}</span>\r\n }\r\n </ng-template>\r\n </p-breadcrumb>\r\n </div>\r\n } @else {\r\n <!-- GHOST DIV PARA OCPUAR ESPA\u00C7O NO SPACE BETWEEN -->\r\n <div></div>\r\n } } @if (exibirNomes) { @if(widthCard >= 517) {\r\n <div\r\n class=\"w-auto flex flex-column justify-content-center align-items-center gap-2\"\r\n >\r\n @if (masterName) {\r\n <span class=\"font-semibold system-color\">{{ masterName }}</span> } @if\r\n (empresaName) {<span class=\"empresa-name\"\r\n >Organiza\u00E7\u00E3o: {{ empresaName }}</span\r\n >\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"w-auto flex flex-row justify-content-center align-items-center gap-2\"\r\n >\r\n <!-- Navega\u00E7\u00E3o de sistemas e usu\u00E1rios -->\r\n <!-- @for (topAction of topMenuActions(); track $index) {\r\n <ng-container *ngTemplateOutlet=\"topAction\" />\r\n } -->\r\n <kv-top-icons [topActions]=\"topMenuOptions\" />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"w-auto flex flex-row justify-content-center align-items-center gap-2\"\r\n >\r\n <!-- Navega\u00E7\u00E3o de sistemas e usu\u00E1rios -->\r\n <!-- @for (topAction of topMenuActions(); track $index) {\r\n <ng-container *ngTemplateOutlet=\"topAction\" />\r\n } -->\r\n <kv-top-icons [topActions]=\"topMenuOptions\" />\r\n </div>\r\n\r\n <div\r\n class=\"w-auto flex flex-column justify-content-center align-items-center gap-2\"\r\n >\r\n @if (masterName) { <span class=\"master-name\">{{ masterName }}</span> }\r\n @if (empresaName) {<span class=\"empresa-name\">{{ empresaName }}</span> }\r\n </div>\r\n } } @else { @if(widthPage() > 992){\r\n <!-- dropdown para sele\u00E7\u00E3o de empresa/licenca -->\r\n <dropdown-master\r\n *ngIf=\"showLicencas()\"\r\n class=\"max-w-25rem flex-1\"\r\n formControlName=\"idmaster\"\r\n [formGroup]=\"formGroup\"\r\n [masters]=\"masters\"\r\n (onSelectionChange)=\"changeLicense($event)\"\r\n (onSelectionValue)=\"changeLicense($event)\"\r\n >\r\n </dropdown-master>\r\n }\r\n\r\n <!-- Navega\u00E7\u00E3o de sistemas e usu\u00E1rios -->\r\n <div class=\"w-auto flex flex-row align-items-center gap-2\">\r\n <kv-top-icons [topActions]=\"topMenuOptions\" />\r\n </div>\r\n }\r\n </div>\r\n\r\n @if(widthPage() <= 992){\r\n <!-- dropdown para sele\u00E7\u00E3o de empresa/licenca -->\r\n <div class=\"h-2rem mx-3\">\r\n <dropdown-master\r\n *ngIf=\"showLicencas()\"\r\n formControlName=\"idmaster\"\r\n [formGroup]=\"formGroup\"\r\n [masters]=\"masters\"\r\n (onSelectionChange)=\"changeLicense($event)\"\r\n (onSelectionValue)=\"changeLicense($event)\"\r\n />\r\n </div>\r\n\r\n }\r\n\r\n <!-- Container -->\r\n <div class=\"overflow-hidden flex-1 p-0 m-0 mb-2 h-full\">\r\n <div\r\n class=\"overflow-y-auto h-full max-h-full {{\r\n !showMenu && 'sm:overflow-y-hidden'\r\n }} card-container\r\n \r\n {{ useCard ? 'use-card' : '' }}\r\n \"\r\n >\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Painel do usu\u00E1rio -->\r\n <p-overlayPanel\r\n #meusDadosPanel\r\n [showTransitionOptions]=\"'350ms ease-out'\"\r\n [hideTransitionOptions]=\"'250ms ease-in'\"\r\n >\r\n <ng-template pTemplate=\"container\">\r\n <div class=\"p-3 flex flex-column gap-2\">\r\n <div class=\"flex flex-row align-items-center gap-2\">\r\n <p-avatar\r\n icon=\"pi pi-user\"\r\n class=\"mr-2\"\r\n size=\"xlarge\"\r\n shape=\"circle\"\r\n [style]=\"{ width: '4.5rem', height: '4.5rem' }\"\r\n />\r\n\r\n <div\r\n class=\"flex flex-column w-10rem justify-content-between\"\r\n [style]=\"{ height: '4.5rem' }\"\r\n >\r\n <span\r\n class=\"text-medium text-md overflow-hidden white-space-nowrap text-overflow-ellipsis\"\r\n >Ol\u00E1, {{ userName.split(\" \")[0] }}!</span\r\n >\r\n <span\r\n class=\"text-medium text-xs text-gray-500 overflow-hidden white-space-nowrap text-overflow-ellipsis\"\r\n >{{ userEmail }}</span\r\n >\r\n <kv-button\r\n severity=\"secondary\"\r\n size=\"small\"\r\n label=\"Gerenciar KeePass\"\r\n (onClick)=\"accessKeePass($event)\"\r\n ></kv-button>\r\n </div>\r\n </div>\r\n\r\n @if(actions.length > 0) {\r\n <p-divider></p-divider>\r\n\r\n <div class=\"flex flex-column text-sm\">\r\n @for (action of actions; track $index) {\r\n <ng-container>\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 side-menu-item p-2\"\r\n (click)=\"action.action()\"\r\n >\r\n <span class=\"material-symbols-outlined\">{{ action.icon }}</span>\r\n <span>{{ action.label }}</span>\r\n </div>\r\n </ng-container>\r\n }\r\n </div>\r\n }\r\n\r\n <p-divider></p-divider>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-between gap-2 side-menu-item p-2\"\r\n [style.color]=\"'rgba(252, 3, 3, 0.6)'\"\r\n (click)=\"logout($event)\"\r\n >\r\n <span class=\"material-symbols-outlined\">exit_to_app</span>\r\n <label>Sair</label>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-overlayPanel>\r\n</div>\r\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0\";::ng-deep :root{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255;--kv-primary-color: 41, 185, 45;--kv-secondary-color: 0, 37, 66;--kv-tertiary-color: 165, 165, 165}::ng-deep .padrao{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-keevocenter{--kv-color-system: 88,25,153;--kv-color-system-cta: 0, 116, 217;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-holos{--kv-color-system: 241,90,36;--kv-color-system-cta: 224, 168, 35;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 240,240,240;--kv-background-card: 2255,255,255}.system-color{color:rgb(var(--kv-color-system),1)}.bg-system-100{background:rgb(var(--kv-color-system),1)}.bg-system-75{background:rgb(var(--kv-color-system),.75)}.bg-system-50{background:rgb(var(--kv-color-system),.5)}.bg-system-25{background:rgb(var(--kv-color-system),.25)}.material-symbols-outlined{font-family:Material Symbols Outlined!important}*{font-family:Inter,Inter var,sans-serif!important}::ng-deep .p-accordion,::ng-deep .p-accordion-header,::ng-deep .p-accordion-content,::ng-deep .p-badge,::ng-deep .p-overlay-badge,::ng-deep .p-breadcrumb,::ng-deep .p-breadcrumb-item,::ng-deep .p-breadcrumb-link,::ng-deep .p-button,::ng-deep .p-calendar,::ng-deep .p-card,::ng-deep .p-card-title,::ng-deep .p-card-subtitle,::ng-deep .p-card-content,::ng-deep .p-checkbox,::ng-deep .p-chip,::ng-deep .p-confirm-dialog,::ng-deep .p-confirm-dialog-message,::ng-deep .p-contextmenu,::ng-deep .p-contextmenu-item,::ng-deep .p-dataview,::ng-deep .p-dataview-content,::ng-deep .p-dialog,::ng-deep .p-dialog-title,::ng-deep .p-dialog-content,::ng-deep .p-dropdown,::ng-deep .p-dropdown-label,::ng-deep .p-dropdown-item,::ng-deep .p-dynamic-dialog,::ng-deep .p-dynamic-dialog-title,::ng-deep .p-dynamic-dialog-content,::ng-deep .p-editor,::ng-deep .p-fieldset,::ng-deep .p-fieldset-legend,::ng-deep .p-fieldset-content,::ng-deep .p-fileupload,::ng-deep .p-inputmask,::ng-deep .p-inputnumber,::ng-deep .p-inputtextarea,::ng-deep .p-inputtext,::ng-deep .p-menu,::ng-deep .p-menuitem,::ng-deep .p-menuitem-text,::ng-deep .p-message,::ng-deep .p-messages,::ng-deep .p-multiselect,::ng-deep .p-multiselect-label,::ng-deep .p-multiselect-item,::ng-deep .p-panelmenu,::ng-deep .p-panelmenu-header,::ng-deep .p-panelmenu-content,::ng-deep .p-panel,::ng-deep .p-panel-header,::ng-deep .p-panel-content,::ng-deep .p-password,::ng-deep .p-picklist,::ng-deep .p-progressbar,::ng-deep .p-radiobutton,::ng-deep .p-rating,::ng-deep .p-sidebar,::ng-deep .p-splitbutton,::ng-deep .p-steps,::ng-deep .p-step,::ng-deep .p-table,::ng-deep .p-datatable,::ng-deep .p-tabview,::ng-deep .p-tabpanel,::ng-deep .p-tag,::ng-deep .p-toast,::ng-deep .p-toolbar,::ng-deep .p-tooltip,::ng-deep .p-tree,::ng-deep .p-treetable,::ng-deep .p-selectbutton,::ng-deep .p-stepper,::ng-deep .p-inputgroup,::ng-deep .p-inputgroup-addon,::ng-deep .p-text{font-family:Inter,Inter var,sans-serif!important}:host ::ng-deep .inputs{height:1.875rem}:host ::ng-deep .inputs,.p-inputtext,.p-inputtextarea{font-size:.875rem}::ng-deep .p-dialog .p-dialog-header{color:rgb(var(--kv-color-text))!important;background:linear-gradient(0deg,#00000005 .44%,#0000 49.5%),#fff!important;display:flex!important;flex-wrap:wrap;word-wrap:break-word;border-bottom:1px solid rgb(var(--kv-color-text),.15)}::ng-deep .p-dialog .p-dialog-content{padding-top:1rem}::ng-deep .p-dialog{min-width:320px}::ng-deep .p-dialog-content{overflow-x:hidden}::ng-deep .p-dialog-content::-webkit-scrollbar{width:8px}::ng-deep .p-dialog-content::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-dialog-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-dialog-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-dialog-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-dialog-footer{display:flex;justify-content:flex-end;padding:10px;gap:10px}::ng-deep .p-dialog .p-dialog-header .p-dialog-header-icon{display:none}::ng-deep .p-tooltip{font-size:.825rem!important}.material-symbols-outlined{font-size:1.3rem}::ng-deep body{margin:0!important}.full-container{background:rgb(var(--kv-background-system),1);width:100vw;height:100vh;overflow-x:hidden;overflow-y:hidden}::ng-deep p-sidebar .p-sidebar{position:relative!important;background:rgb(var(--kv-background-card),1);box-shadow:0 0 .8rem #0000001a;border:1px solid rgb(var(--kv-color-system),.1);margin-left:.5rem;margin-top:.5rem;border-radius:.5rem;height:calc(100vh - 1rem);z-index:1100!important}.page-content{background:none}.use-card{background-color:rgb(var(--kv-background-card),1);box-shadow:0 0 .8rem #0000001a;border:1px solid rgb(var(--kv-color-system),.1);border-radius:.5rem}::ng-deep .card-container{margin:0rem .5rem;background-color:rgb(var(--kv-background-system),1);overflow-x:hidden}::ng-deep .card-container .p-card-body{padding:.5rem .5rem 0;margin:0;height:100%}::ng-deep .card-container .p-card-content{margin:0;padding:0;height:100%}::ng-deep .card-container::-webkit-scrollbar{width:6px}::ng-deep .card-container::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .card-container::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .card-container:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .card-container::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.side-menu-item{transition:all .2s ease-in-out;cursor:pointer;border-radius:.5rem;padding-left:.5rem;padding-right:.5rem}.side-menu-item:hover{background-color:rgb(var(--kv-color-system),.25);color:rgb(var(--kv-color-system),1)}.side-menu-item label{width:100%;cursor:pointer}.side-menu-item-system{transition:all .2s ease-in-out;cursor:pointer;border-radius:.5rem;padding-left:.5rem;padding-right:.5rem}.side-menu-item-system:hover{background-color:rgb(var(--kv-color-system),.08);color:rgb(var(--kv-color-system),1)}.side-menu-item-system label{width:100%;cursor:pointer}::ng-deep .p-divider{margin:0;padding:0;margin-top:.5rem;margin-bottom:.5rem}::ng-deep .p-overlaypanel-content{padding:0}.menu-parent{display:inline-block;width:100%}.menu-childs{position:absolute;left:-500px;min-width:17rem;max-width:50rem;overflow:hidden;padding:.5rem;background:rgb(var(--kv-background-card),1);border:1px solid rgb(var(--kv-color-system),.1);border-radius:.5rem;z-index:9999;box-shadow:0 0 .8rem #0000001a;gap:0}.menu-childs p{color:rgb(var(--kv-color-system),1)!important;opacity:.7}.menu-childs .menu-childs-content{max-height:25rem;overflow:auto}.menu-childs .menu-childs-content::-webkit-scrollbar{width:8px}.menu-childs .menu-childs-content::-webkit-scrollbar:hover{background-color:#dededebf}.menu-childs .menu-childs-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}.menu-childs .menu-childs-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}.menu-childs .menu-childs-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-breadcrumb .p-breadcrumb-list span{color:rgba(var(--kv-color-text),.75)!important;font-size:.75rem}::ng-deep .p-breadcrumb .p-breadcrumb-list li.p-menuitem-separator{color:rgba(var(--kv-color-text),.7)!important;margin:0;margin-left:.1rem;margin-right:.1rem}::ng-deep .p-breadcrumb .p-breadcrumb-list li.p-menuitem-separator svg{height:.5rem}.troca-empresa-container{font-size:.75rem;opacity:.8;border:1px solid #c1cfe1;color:#0a3a78;background-color:rgb(var(--kv-color-system),.05)}.troca-empresa-container:hover{opacity:1;border:1px solid rgb(var(--kv-color-system),1)}.menus-container label{font-size:.875rem}.meus-sistemas{background-color:rgb(var(--kv-color-system),.05)}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i4.KvButtonComponent, selector: "kv-button", inputs: ["fullWidth", "type", "loading", "severity", "size", "icon", "iconPosition", "label", "disabled"], outputs: ["onClick"] }, { kind: "directive", type: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i6.Breadcrumb, selector: "p-breadcrumb", inputs: ["model", "style", "styleClass", "home", "homeAriaLabel"], outputs: ["onItemClick"] }, { kind: "directive", type: i7.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i8.Divider, selector: "p-divider", inputs: ["style", "styleClass", "layout", "type", "align"] }, { kind: "component", type: i9.OverlayPanel, selector: "p-overlayPanel", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "component", type: i10.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i11.TopIconsComponent, selector: "kv-top-icons", inputs: ["topActions"] }, { kind: "component", type: i12.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "style", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "component", type: i13.DropdownMasterComponent, selector: "dropdown-master", inputs: ["formControlName", "masters"] }, { kind: "pipe", type: i14.CpfCnpjPipe, name: "cpfCnpj" }] }); }
|
|
348
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvLayoutComponent, selector: "kv-layout", inputs: { apps: { classPropertyName: "apps", publicName: "apps", isSignal: false, isRequired: false, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: false, isRequired: false, transformFunction: null }, useCard: { classPropertyName: "useCard", publicName: "useCard", isSignal: false, isRequired: false, transformFunction: null }, topMenusVisible: { classPropertyName: "topMenusVisible", publicName: "topMenusVisible", isSignal: true, isRequired: false, transformFunction: null }, profileImage: { classPropertyName: "profileImage", publicName: "profileImage", isSignal: true, isRequired: false, transformFunction: null }, breadCrumbItems: { classPropertyName: "breadCrumbItems", publicName: "breadCrumbItems", isSignal: false, isRequired: false, transformFunction: null }, masters: { classPropertyName: "masters", publicName: "masters", isSignal: false, isRequired: false, transformFunction: null }, menus: { classPropertyName: "menus", publicName: "menus", isSignal: true, isRequired: false, transformFunction: null }, expandMenu: { classPropertyName: "expandMenu", publicName: "expandMenu", isSignal: true, isRequired: false, transformFunction: null }, logoMenuExpand: { classPropertyName: "logoMenuExpand", publicName: "logoMenuExpand", isSignal: false, isRequired: false, transformFunction: null }, logoMenuHide: { classPropertyName: "logoMenuHide", publicName: "logoMenuHide", isSignal: false, isRequired: false, transformFunction: null }, selectedApp: { classPropertyName: "selectedApp", publicName: "selectedApp", isSignal: false, isRequired: false, transformFunction: null }, selectedEmpresa: { classPropertyName: "selectedEmpresa", publicName: "selectedEmpresa", isSignal: false, isRequired: false, transformFunction: null }, selectedMaster: { classPropertyName: "selectedMaster", publicName: "selectedMaster", isSignal: false, isRequired: false, transformFunction: null }, showButtonApps: { classPropertyName: "showButtonApps", publicName: "showButtonApps", isSignal: false, isRequired: false, transformFunction: null }, showButtonUser: { classPropertyName: "showButtonUser", publicName: "showButtonUser", isSignal: false, isRequired: false, transformFunction: null }, showExpandMenu: { classPropertyName: "showExpandMenu", publicName: "showExpandMenu", isSignal: false, isRequired: false, transformFunction: null }, showDropdownLicenca: { classPropertyName: "showDropdownLicenca", publicName: "showDropdownLicenca", isSignal: false, isRequired: false, transformFunction: null }, showMenu: { classPropertyName: "showMenu", publicName: "showMenu", isSignal: false, isRequired: false, transformFunction: null }, showTrocaEmpresa: { classPropertyName: "showTrocaEmpresa", publicName: "showTrocaEmpresa", isSignal: false, isRequired: false, transformFunction: null }, showBreadcrumb: { classPropertyName: "showBreadcrumb", publicName: "showBreadcrumb", isSignal: false, isRequired: false, transformFunction: null }, userName: { classPropertyName: "userName", publicName: "userName", isSignal: false, isRequired: false, transformFunction: null }, userEmail: { classPropertyName: "userEmail", publicName: "userEmail", isSignal: false, isRequired: false, transformFunction: null }, masterName: { classPropertyName: "masterName", publicName: "masterName", isSignal: false, isRequired: false, transformFunction: null }, empresaName: { classPropertyName: "empresaName", publicName: "empresaName", isSignal: false, isRequired: false, transformFunction: null }, idsAplicativosMenuHide: { classPropertyName: "idsAplicativosMenuHide", publicName: "idsAplicativosMenuHide", isSignal: false, isRequired: false, transformFunction: null }, useSelectionApps: { classPropertyName: "useSelectionApps", publicName: "useSelectionApps", isSignal: false, isRequired: false, transformFunction: null }, showTrilhaConhecimento: { classPropertyName: "showTrilhaConhecimento", publicName: "showTrilhaConhecimento", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { menus: "menusChange", expandMenu: "expandMenuChange", accessKeePassEmit: "accessKeePassEmit", changeEmpresaEmit: "changeEmpresaEmit", changeLicenseEmit: "changeLicenseEmit", expandMenuEmit: "expandMenuEmit", logoutEmit: "logoutEmit", selectAppEmit: "selectAppEmit", navigateToDefaultRouteEmit: "navigateToDefaultRouteEmit", downloadDocEmit: "downloadDocEmit", showVideoDocEmit: "showVideoDocEmit" }, host: { listeners: { "window:resize": "onWindowResize($event)" } }, viewQueries: [{ propertyName: "meusDadosPanel", first: true, predicate: ["meusDadosPanel"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-row full-container\">\r\n @if(showMenu) {\r\n <p-sidebar\r\n #sidebarRef\r\n [visible]=\"true\"\r\n [showCloseIcon]=\"false\"\r\n [modal]=\"false\"\r\n [style]=\"{ width: expandMenu() ? '17rem' : '3.65rem' }\"\r\n styleClass=\"transition-all\"\r\n >\r\n <ng-template pTemplate=\"headless\">\r\n <div class=\"h-full flex flex-column overflow-hidden p-2\">\r\n <div\r\n class=\"flex-none flex flex-column gap-3 justify-content-between flex-shrink-0 overflow-hidden\"\r\n >\r\n <!-- LOGO -->\r\n <div\r\n class=\"flex {{\r\n expandMenu() ? 'flex-row' : 'flex-column'\r\n }} align-items-center {{\r\n expandMenu()\r\n ? 'justify-content-between'\r\n : 'justify-content-center'\r\n }} p-2\"\r\n >\r\n <!-- Logo para o menu expandido -->\r\n @if(expandMenu() && logoMenuExpand){\r\n <img\r\n alt=\"Card\"\r\n [src]=\"logoMenuExpand\"\r\n [style.height]=\"'2.4rem'\"\r\n width=\"auto\"\r\n class=\"cursor-pointer p-0\"\r\n (click)=\"navigateToDefaultRoute()\"\r\n />\r\n }\r\n\r\n <!-- Logo para o menu minimizado-->\r\n @if(!expandMenu() && logoMenuHide){\r\n <img\r\n alt=\"Card\"\r\n [src]=\"logoMenuHide\"\r\n [style.height]=\"'2.4rem'\"\r\n width=\"auto\"\r\n class=\"cursor-pointer p-1\"\r\n (click)=\"navigateToDefaultRoute()\"\r\n />\r\n }\r\n\r\n <!-- Toggle menu -->\r\n @if(showExpandMenu){\r\n <!-- <span class=\"material-symbols-outlined side-menu-item\" (click)=\"expandMenu.set(!expandMenu())\">menu</span> -->\r\n }\r\n </div>\r\n\r\n @if(showTrocaEmpresa){\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item troca-empresa-container mb-3 py-2\"\r\n [pTooltip]=\"'Trocar de empresa'\"\r\n [tooltipPosition]=\"'right'\"\r\n (click)=\"changeEmpresa($event)\"\r\n >\r\n @if(expandMenu() && selectedEmpresa){\r\n <div\r\n class=\"flex flex-column w-full\"\r\n (click)=\"changeEmpresa($event)\"\r\n >\r\n @if(this.selectedEmpresa.razaosocial){\r\n <span\r\n class=\"text-xs font-semibold mr-2 color-system\"\r\n [style.fontSuze]=\"'.5rem'\"\r\n >\r\n {{ nameEmpresa(this.selectedEmpresa.razaosocial) }}\r\n </span>\r\n } @if(this.selectedEmpresa.cpfcnpj){\r\n <span\r\n class=\"text-xs mt-1 color-system\"\r\n [style.fontSuze]=\"'.5rem'\"\r\n >{{ this.selectedEmpresa.cpfcnpj | cpfCnpj }}</span\r\n >\r\n }\r\n </div>\r\n\r\n }\r\n\r\n <span class=\"material-symbols-outlined\">swap_horiz</span>\r\n </div>\r\n }\r\n </div>\r\n <!-- MENUS -->\r\n <div\r\n class=\"flex-1 list-none m-0 overflow-y-auto max-h-full menus-container\"\r\n >\r\n <!-- menus -->\r\n @for (menu of menus(); track $index) {\r\n @if(!idsAplicativosMenuHide.includes(menu.idaplicativo)){\r\n <li>\r\n <!-- menu que n\u00E3o tem filho -->\r\n @if( !menu.indmenupai && (!menu.idmenupai || menu.idmenupai == 0)){\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n (click)=\"callRoute(menu.link)\"\r\n >\r\n <span class=\"material-symbols-outlined\">{{\r\n menu.icone || \"lens_blur\"\r\n }}</span>\r\n @if(expandMenu()){\r\n <label>{{ menu.descricaomenu }}</label>\r\n }\r\n </div>\r\n }\r\n <!-- menu com filho -->\r\n @if(menu.indmenupai){\r\n <div\r\n class=\"menu-parent\"\r\n id=\"menu-parent-{{ $index }}\"\r\n (mouseenter)=\"exibirMenuChild($event, $index)\"\r\n (mouseleave)=\"menuVisivel.set(undefined)\"\r\n >\r\n <div\r\n class=\" flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n >\r\n <span class=\"material-symbols-outlined\">{{\r\n menu.icone || \"lens_blur\"\r\n }}</span>\r\n @if(expandMenu()){\r\n <label>{{ menu.descricaomenu }}</label>\r\n <span class=\"material-symbols-outlined\">chevron_right</span>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"menu-childs\"\r\n id=\"menu-child-{{ $index }}\"\r\n [style.opacity]=\"menuVisivel() === $index ? '1' : '0'\"\r\n [style.pointerEvents]=\"\r\n menuVisivel() === $index ? 'auto' : 'none'\r\n \"\r\n >\r\n <div class=\"flex align-items-center\">\r\n <p class=\"p-0 m-0 font-bold pt-2 px-2 text-xs\">\r\n {{ menu.descricaomenu }}\r\n </p>\r\n </div>\r\n <p-divider\r\n class=\"p-0 m-0\"\r\n [style.opacity]=\"1\"\r\n type=\"solid\"\r\n ></p-divider>\r\n <div class=\"menu-childs-content p-0 m-0\">\r\n @for (item of returnMenuChild(menu.idmenu); track $index) {\r\n\r\n <div\r\n class=\"side-menu-item py-2 px-2 text-sm\"\r\n (click)=\"callRoute(item.link)\"\r\n >\r\n {{ item.descricaomenu }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </li>\r\n } }\r\n </div>\r\n\r\n @if(useSelectionApps) {\r\n <!-- APPS E SAIR -->\r\n <p-divider class=\"px-2\" [style.opacity]=\"1\" type=\"solid\"></p-divider>\r\n\r\n <div class=\"flex-none list-none m-0 overflow-y-auto max-h-full\">\r\n <li>\r\n <div\r\n class=\"menu-parent\"\r\n id=\"menu-sistemas-parent\"\r\n (mouseenter)=\"exibirMenuChild($event, -1)\"\r\n (mouseleave)=\"menuVisivel.set(undefined)\"\r\n >\r\n <!-- <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n [pTooltip]=\"!expandMenu() ? 'Sistemas' : ''\"\r\n >\r\n <span class=\"material-symbols-outlined\">grid_view</span>\r\n \r\n @if(expandMenu()){\r\n <label>Sistemas</label>\r\n <span class=\"material-symbols-outlined\">chevron_right</span>\r\n }\r\n </div> -->\r\n\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item-system troca-sistema-container py-2\"\r\n (click)=\"changeEmpresa($event)\"\r\n >\r\n <!-- <p-avatar\r\n icon=\"pi pi-th-large\"\r\n styleClass=\"mr-2\"\r\n size=\"normal\"\r\n [style]=\"{\r\n 'background-color': 'rgb(var(--kv-color-system), 1)',\r\n color: 'white'\r\n }\"\r\n /> -->\r\n <div\r\n [style]=\"{\r\n 'background-color': 'rgb(var(--kv-color-system), .2)',\r\n color: 'rgb(var(--kv-color-system), 1)',\r\n 'border-radius': '.5rem',\r\n padding: '.25rem'\r\n }\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <span class=\"material-symbols-outlined\">\r\n dashboard_customize\r\n </span>\r\n </div>\r\n\r\n @if(expandMenu()) {\r\n <div class=\"flex flex-column w-full\">\r\n <span class=\"text-sm font-semibold mr-2 color-system\">\r\n Meus Sistemas\r\n </span>\r\n </div>\r\n\r\n <span\r\n class=\"material-symbols-outlined\"\r\n [style.color]=\"'rgb(var(--kv-color-system), 1)'\"\r\n >unfold_more</span\r\n >\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"menu-childs\"\r\n id=\"menu-sistemas-child\"\r\n [style.opacity]=\"menuVisivel() === -1 ? '1' : '0'\"\r\n [style.pointerEvents]=\"menuVisivel() === -1 ? 'auto' : 'none'\"\r\n >\r\n <p class=\"p-0 m-0 font-bold pt-2 pl-3 text-xs\">Sistemas</p>\r\n @for (item of apps; track $index) {\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 side-menu-item py-2 pl-3 pr-1\"\r\n (click)=\"\r\n callRoute(item.rotapadrao); selectApp(item.idaplicativo)\r\n \"\r\n >\r\n <img\r\n [src]=\"item.urlicone\"\r\n class=\"h-2rem w-2rem border-round-lg\"\r\n />\r\n <div class=\"text-sm\">\r\n {{ item.nomeaplicativo }}\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </li>\r\n <!-- <li>\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n [pTooltip]=\"!expandMenu() ? 'Sair' : ''\"\r\n [style.color]=\"'rgba(252, 3, 3, 0.6)'\"\r\n (click)=\"logout($event)\"\r\n >\r\n <span class=\"material-symbols-outlined\">exit_to_app</span>\r\n @if(expandMenu()){\r\n <label>Sair</label>\r\n }\r\n </div>\r\n </li> -->\r\n </div>\r\n }\r\n </div>\r\n </ng-template>\r\n </p-sidebar>\r\n }\r\n\r\n <!-- SE\u00C7\u00C3O CONTE\u00DADO -->\r\n <div\r\n class=\"w-auto h-screen page-content overflow-y-hidden flex flex-column\"\r\n id=\"page-content\"\r\n style=\"width: 100vw !important\"\r\n >\r\n <!-- TOPO -->\r\n <div\r\n class=\"flex flex-row flex-wrap align-items-center justify-content-between my-2 mx-3 mb-0\"\r\n >\r\n @if(!showMenu) {\r\n <!-- Logo home -->\r\n <div>\r\n <img [src]=\"logoMenuExpand\" width=\"150\" />\r\n </div>\r\n } @else {\r\n <!-- Breadcrumbs -->\r\n @if(showBreadcrumb) {\r\n <div class=\"h-full\">\r\n <p-breadcrumb\r\n *ngIf=\"widthCard > 400\"\r\n styleClass=\"border-none p-0 flex align-items-center h-2rem bg-transparent\"\r\n [model]=\"breadCrumbItems\"\r\n (onItemClick)=\"callRoute($event.item.routerLink, true)\"\r\n >\r\n <ng-template pTemplate=\"item\" let-item let-i=\"index\">\r\n @if(breadCrumbItems.indexOf(item) < breadCrumbItems.length - 1){\r\n <span class=\"font-normal\">{{ item.label }}</span>\r\n } @else {\r\n <span class=\"font-bold\">{{ item.label }}</span>\r\n }\r\n </ng-template>\r\n </p-breadcrumb>\r\n </div>\r\n } @else {\r\n <!-- GHOST DIV PARA OCPUAR ESPA\u00C7O NO SPACE BETWEEN -->\r\n <div></div>\r\n } } @if (exibirNomes) { @if(widthCard >= 517) {\r\n <div\r\n class=\"w-auto flex flex-column justify-content-center align-items-center gap-2\"\r\n >\r\n @if (masterName) {\r\n <span class=\"font-semibold system-color\">{{ masterName }}</span> } @if\r\n (empresaName) {<span class=\"empresa-name\"\r\n >Organiza\u00E7\u00E3o: {{ empresaName }}</span\r\n >\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"w-auto flex flex-row justify-content-center align-items-center gap-2\"\r\n >\r\n <!-- Navega\u00E7\u00E3o de sistemas e usu\u00E1rios -->\r\n <!-- @for (topAction of topMenuActions(); track $index) {\r\n <ng-container *ngTemplateOutlet=\"topAction\" />\r\n } -->\r\n <kv-top-icons [topActions]=\"topMenuOptions\" />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"w-auto flex flex-row justify-content-center align-items-center gap-2\"\r\n >\r\n <!-- Navega\u00E7\u00E3o de sistemas e usu\u00E1rios -->\r\n <!-- @for (topAction of topMenuActions(); track $index) {\r\n <ng-container *ngTemplateOutlet=\"topAction\" />\r\n } -->\r\n <kv-top-icons [topActions]=\"topMenuOptions\" />\r\n </div>\r\n\r\n <div\r\n class=\"w-auto flex flex-column justify-content-center align-items-center gap-2\"\r\n >\r\n @if (masterName) { <span class=\"master-name\">{{ masterName }}</span> }\r\n @if (empresaName) {<span class=\"empresa-name\">{{ empresaName }}</span> }\r\n </div>\r\n } } @else { @if(widthPage() > 992){\r\n <!-- dropdown para sele\u00E7\u00E3o de empresa/licenca -->\r\n <dropdown-master\r\n *ngIf=\"showLicencas()\"\r\n class=\"max-w-25rem flex-1\"\r\n formControlName=\"idmaster\"\r\n [formGroup]=\"formGroup\"\r\n [masters]=\"masters\"\r\n (onSelectionChange)=\"changeLicense($event)\"\r\n (onSelectionValue)=\"changeLicense($event)\"\r\n >\r\n </dropdown-master>\r\n }\r\n\r\n <!-- Navega\u00E7\u00E3o de sistemas e usu\u00E1rios -->\r\n <div class=\"w-auto flex flex-row align-items-center gap-2\">\r\n <kv-top-icons [topActions]=\"topMenuOptions\" />\r\n </div>\r\n }\r\n </div>\r\n\r\n @if(widthPage() <= 992){\r\n <!-- dropdown para sele\u00E7\u00E3o de empresa/licenca -->\r\n <div class=\"h-2rem mx-3\">\r\n <dropdown-master\r\n *ngIf=\"showLicencas()\"\r\n formControlName=\"idmaster\"\r\n [formGroup]=\"formGroup\"\r\n [masters]=\"masters\"\r\n (onSelectionChange)=\"changeLicense($event)\"\r\n (onSelectionValue)=\"changeLicense($event)\"\r\n />\r\n </div>\r\n\r\n }\r\n\r\n <!-- Container -->\r\n <div class=\"overflow-hidden flex-1 p-0 m-0 mb-2 h-full\">\r\n <div\r\n class=\"overflow-y-auto h-full max-h-full {{\r\n !showMenu && 'sm:overflow-y-hidden'\r\n }} card-container\r\n \r\n {{ useCard ? 'use-card' : '' }}\r\n \"\r\n >\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Painel do usu\u00E1rio -->\r\n <p-overlayPanel\r\n #meusDadosPanel\r\n [showTransitionOptions]=\"'350ms ease-out'\"\r\n [hideTransitionOptions]=\"'250ms ease-in'\"\r\n >\r\n <ng-template pTemplate=\"container\">\r\n <div class=\"p-3 flex flex-column gap-2\">\r\n <div class=\"flex flex-row align-items-center gap-2\">\r\n <p-avatar\r\n icon=\"pi pi-user\"\r\n class=\"mr-2\"\r\n size=\"xlarge\"\r\n shape=\"circle\"\r\n [style]=\"{ width: '4.5rem', height: '4.5rem' }\"\r\n />\r\n\r\n <div\r\n class=\"flex flex-column w-10rem justify-content-between\"\r\n [style]=\"{ height: '4.5rem' }\"\r\n >\r\n <span\r\n class=\"text-medium text-md overflow-hidden white-space-nowrap text-overflow-ellipsis\"\r\n >Ol\u00E1, {{ userName.split(\" \")[0] }}!</span\r\n >\r\n <span\r\n class=\"text-medium text-xs text-gray-500 overflow-hidden white-space-nowrap text-overflow-ellipsis\"\r\n >{{ userEmail }}</span\r\n >\r\n <kv-button\r\n severity=\"secondary\"\r\n size=\"small\"\r\n label=\"Gerenciar KeePass\"\r\n (onClick)=\"accessKeePass($event)\"\r\n ></kv-button>\r\n </div>\r\n </div>\r\n\r\n @if(actions.length > 0) {\r\n <p-divider></p-divider>\r\n\r\n <div class=\"flex flex-column text-sm\">\r\n @for (action of actions; track $index) {\r\n <ng-container>\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 side-menu-item p-2\"\r\n (click)=\"action.action()\"\r\n >\r\n <span class=\"material-symbols-outlined\">{{ action.icon }}</span>\r\n <span>{{ action.label }}</span>\r\n </div>\r\n </ng-container>\r\n }\r\n </div>\r\n } \r\n \r\n @if(showTrilhaConhecimento) {\r\n <p-divider></p-divider>\r\n\r\n <div class=\"flex flex-column gap-3\">\r\n <span class=\"text-sm font-semibold text-gray-500\">Trilha do Conhecimento</span>\r\n @for(trilha of trilhaConhecimento; track $index) {\r\n\r\n <div class=\"flex flex-row gap-2 max-w-25rem\">\r\n <div class=\"flex align-items-center justify-content-center border-round-md trilha-icon\">\r\n <span class=\"material-symbols-outlined text-2xl\">{{ trilha.icon }}</span>\r\n </div>\r\n <div class=\" flex flex-column justify-content-between w-20rem\">\r\n <span class=\"text-sm font-medium overflow-hidden white-space-nowrap text-overflow-ellipsis text-gray-500\">{{trilha.title}}</span>\r\n <span class=\"text-xs text-gray-400 overflow-hidden white-space-nowrap text-overflow-ellipsis\" [pTooltip]=\"trilha.subtitle\" [tooltipPosition]=\"'left'\">{{trilha.subtitle}}</span>\r\n <div class=\"flex flex-row gap-2\">\r\n <span class=\"material-symbols-outlined button-icon\" [pTooltip]=\"'Baixar Documento'\" (click)=\"downloadDoc(trilha)\">download</span>\r\n <span class=\"material-symbols-outlined button-icon\" [pTooltip]=\"'Assistir V\u00EDdeo'\" (click)=\"showVideoDoc(trilha)\">videocam</span>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <p-divider></p-divider>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-between gap-2 side-menu-item p-2\"\r\n [style.color]=\"'rgba(252, 3, 3, 0.6)'\"\r\n (click)=\"logout($event)\"\r\n >\r\n <span class=\"material-symbols-outlined\">exit_to_app</span>\r\n <label>Sair</label>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-overlayPanel>\r\n</div>\r\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0\";::ng-deep :root{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255;--kv-primary-color: 41, 185, 45;--kv-secondary-color: 0, 37, 66;--kv-tertiary-color: 165, 165, 165}::ng-deep .padrao{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-keevocenter{--kv-color-system: 88,25,153;--kv-color-system-cta: 0, 116, 217;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-holos{--kv-color-system: 241,90,36;--kv-color-system-cta: 224, 168, 35;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 240,240,240;--kv-background-card: 2255,255,255}.system-color{color:rgb(var(--kv-color-system),1)}.bg-system-100{background:rgb(var(--kv-color-system),1)}.bg-system-75{background:rgb(var(--kv-color-system),.75)}.bg-system-50{background:rgb(var(--kv-color-system),.5)}.bg-system-25{background:rgb(var(--kv-color-system),.25)}.material-symbols-outlined{font-family:Material Symbols Outlined!important}*{font-family:Inter,Inter var,sans-serif!important}::ng-deep .p-accordion,::ng-deep .p-accordion-header,::ng-deep .p-accordion-content,::ng-deep .p-badge,::ng-deep .p-overlay-badge,::ng-deep .p-breadcrumb,::ng-deep .p-breadcrumb-item,::ng-deep .p-breadcrumb-link,::ng-deep .p-button,::ng-deep .p-calendar,::ng-deep .p-card,::ng-deep .p-card-title,::ng-deep .p-card-subtitle,::ng-deep .p-card-content,::ng-deep .p-checkbox,::ng-deep .p-chip,::ng-deep .p-confirm-dialog,::ng-deep .p-confirm-dialog-message,::ng-deep .p-contextmenu,::ng-deep .p-contextmenu-item,::ng-deep .p-dataview,::ng-deep .p-dataview-content,::ng-deep .p-dialog,::ng-deep .p-dialog-title,::ng-deep .p-dialog-content,::ng-deep .p-dropdown,::ng-deep .p-dropdown-label,::ng-deep .p-dropdown-item,::ng-deep .p-dynamic-dialog,::ng-deep .p-dynamic-dialog-title,::ng-deep .p-dynamic-dialog-content,::ng-deep .p-editor,::ng-deep .p-fieldset,::ng-deep .p-fieldset-legend,::ng-deep .p-fieldset-content,::ng-deep .p-fileupload,::ng-deep .p-inputmask,::ng-deep .p-inputnumber,::ng-deep .p-inputtextarea,::ng-deep .p-inputtext,::ng-deep .p-menu,::ng-deep .p-menuitem,::ng-deep .p-menuitem-text,::ng-deep .p-message,::ng-deep .p-messages,::ng-deep .p-multiselect,::ng-deep .p-multiselect-label,::ng-deep .p-multiselect-item,::ng-deep .p-panelmenu,::ng-deep .p-panelmenu-header,::ng-deep .p-panelmenu-content,::ng-deep .p-panel,::ng-deep .p-panel-header,::ng-deep .p-panel-content,::ng-deep .p-password,::ng-deep .p-picklist,::ng-deep .p-progressbar,::ng-deep .p-radiobutton,::ng-deep .p-rating,::ng-deep .p-sidebar,::ng-deep .p-splitbutton,::ng-deep .p-steps,::ng-deep .p-step,::ng-deep .p-table,::ng-deep .p-datatable,::ng-deep .p-tabview,::ng-deep .p-tabpanel,::ng-deep .p-tag,::ng-deep .p-toast,::ng-deep .p-toolbar,::ng-deep .p-tooltip,::ng-deep .p-tree,::ng-deep .p-treetable,::ng-deep .p-selectbutton,::ng-deep .p-stepper,::ng-deep .p-inputgroup,::ng-deep .p-inputgroup-addon,::ng-deep .p-text{font-family:Inter,Inter var,sans-serif!important}:host ::ng-deep .inputs{height:1.875rem}:host ::ng-deep .inputs,.p-inputtext,.p-inputtextarea{font-size:.875rem}::ng-deep .p-dialog .p-dialog-header{color:rgb(var(--kv-color-text))!important;background:linear-gradient(0deg,#00000005 .44%,#0000 49.5%),#fff!important;display:flex!important;flex-wrap:wrap;word-wrap:break-word;border-bottom:1px solid rgb(var(--kv-color-text),.15)}::ng-deep .p-dialog .p-dialog-content{padding-top:1rem}::ng-deep .p-dialog{min-width:320px}::ng-deep .p-dialog-content{overflow-x:hidden}::ng-deep .p-dialog-content::-webkit-scrollbar{width:8px}::ng-deep .p-dialog-content::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-dialog-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-dialog-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-dialog-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-dialog-footer{display:flex;justify-content:flex-end;padding:10px;gap:10px}::ng-deep .p-dialog .p-dialog-header .p-dialog-header-icon{display:none}::ng-deep .p-tooltip{font-size:.825rem!important}.material-symbols-outlined{font-size:1.3rem}::ng-deep body{margin:0!important}.full-container{background:rgb(var(--kv-background-system),1);width:100vw;height:100vh;overflow-x:hidden;overflow-y:hidden}::ng-deep p-sidebar .p-sidebar{position:relative!important;background:rgb(var(--kv-background-card),1);box-shadow:0 0 .8rem #0000001a;border:1px solid rgb(var(--kv-color-system),.1);margin-left:.5rem;margin-top:.5rem;border-radius:.5rem;height:calc(100vh - 1rem);z-index:1100!important}.page-content{background:none}.use-card{background-color:rgb(var(--kv-background-card),1);box-shadow:0 0 .8rem #0000001a;border:1px solid rgb(var(--kv-color-system),.1);border-radius:.5rem}::ng-deep .card-container{margin:0rem .5rem;background-color:rgb(var(--kv-background-system),1);overflow-x:hidden}::ng-deep .card-container .p-card-body{padding:.5rem .5rem 0;margin:0;height:100%}::ng-deep .card-container .p-card-content{margin:0;padding:0;height:100%}::ng-deep .card-container::-webkit-scrollbar{width:6px}::ng-deep .card-container::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .card-container::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .card-container:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .card-container::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.side-menu-item{transition:all .2s ease-in-out;cursor:pointer;border-radius:.5rem;padding-left:.5rem;padding-right:.5rem}.side-menu-item:hover{background-color:rgb(var(--kv-color-system),.25);color:rgb(var(--kv-color-system),1)}.side-menu-item label{width:100%;cursor:pointer}.side-menu-item-system{transition:all .2s ease-in-out;cursor:pointer;border-radius:.5rem;padding-left:.5rem;padding-right:.5rem}.side-menu-item-system:hover{background-color:rgb(var(--kv-color-system),.08);color:rgb(var(--kv-color-system),1)}.side-menu-item-system label{width:100%;cursor:pointer}::ng-deep .p-divider{margin:0;padding:0;margin-top:.5rem;margin-bottom:.5rem}::ng-deep .p-overlaypanel-content{padding:0}.menu-parent{display:inline-block;width:100%}.menu-childs{position:absolute;left:-500px;min-width:17rem;max-width:50rem;overflow:hidden;padding:.5rem;background:rgb(var(--kv-background-card),1);border:1px solid rgb(var(--kv-color-system),.1);border-radius:.5rem;z-index:9999;box-shadow:0 0 .8rem #0000001a;gap:0}.menu-childs p{color:rgb(var(--kv-color-system),1)!important;opacity:.7}.menu-childs .menu-childs-content{max-height:25rem;overflow:auto}.menu-childs .menu-childs-content::-webkit-scrollbar{width:8px}.menu-childs .menu-childs-content::-webkit-scrollbar:hover{background-color:#dededebf}.menu-childs .menu-childs-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}.menu-childs .menu-childs-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}.menu-childs .menu-childs-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-breadcrumb .p-breadcrumb-list span{color:rgba(var(--kv-color-text),.75)!important;font-size:.75rem}::ng-deep .p-breadcrumb .p-breadcrumb-list li.p-menuitem-separator{color:rgba(var(--kv-color-text),.7)!important;margin:0;margin-left:.1rem;margin-right:.1rem}::ng-deep .p-breadcrumb .p-breadcrumb-list li.p-menuitem-separator svg{height:.5rem}.troca-empresa-container{font-size:.75rem;opacity:.8;border:1px solid #c1cfe1;color:#0a3a78;background-color:rgb(var(--kv-color-system),.05)}.troca-empresa-container:hover{opacity:1;border:1px solid rgb(var(--kv-color-system),1)}.menus-container label{font-size:.875rem}.meus-sistemas{background-color:rgb(var(--kv-color-system),.05)}.button-icon{color:rgb(var(--kv-color-system),.75)}.button-icon:hover{color:rgb(var(--kv-color-system),.9);cursor:pointer}.button-icon:active{color:rgb(var(--kv-color-system),1)}.trilha-icon{width:3.5rem;height:3.5rem;background-color:rgb(var(--kv-color-system),.2);color:rgb(var(--kv-color-system),1)}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i4.KvButtonComponent, selector: "kv-button", inputs: ["fullWidth", "type", "loading", "severity", "size", "icon", "iconPosition", "label", "disabled"], outputs: ["onClick"] }, { kind: "directive", type: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i6.Breadcrumb, selector: "p-breadcrumb", inputs: ["model", "style", "styleClass", "home", "homeAriaLabel"], outputs: ["onItemClick"] }, { kind: "directive", type: i7.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i8.Divider, selector: "p-divider", inputs: ["style", "styleClass", "layout", "type", "align"] }, { kind: "component", type: i9.OverlayPanel, selector: "p-overlayPanel", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "component", type: i10.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i11.TopIconsComponent, selector: "kv-top-icons", inputs: ["topActions"] }, { kind: "component", type: i12.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "style", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "component", type: i13.DropdownMasterComponent, selector: "dropdown-master", inputs: ["formControlName", "masters"] }, { kind: "pipe", type: i14.CpfCnpjPipe, name: "cpfCnpj" }] }); }
|
|
296
349
|
}
|
|
297
350
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvLayoutComponent, decorators: [{
|
|
298
351
|
type: Component,
|
|
299
|
-
args: [{ selector: 'kv-layout', template: "<div class=\"flex flex-row full-container\">\r\n @if(showMenu) {\r\n <p-sidebar\r\n #sidebarRef\r\n [visible]=\"true\"\r\n [showCloseIcon]=\"false\"\r\n [modal]=\"false\"\r\n [style]=\"{ width: expandMenu() ? '17rem' : '3.65rem' }\"\r\n styleClass=\"transition-all\"\r\n >\r\n <ng-template pTemplate=\"headless\">\r\n <div class=\"h-full flex flex-column overflow-hidden p-2\">\r\n <div\r\n class=\"flex-none flex flex-column gap-3 justify-content-between flex-shrink-0 overflow-hidden\"\r\n >\r\n <!-- LOGO -->\r\n <div\r\n class=\"flex {{\r\n expandMenu() ? 'flex-row' : 'flex-column'\r\n }} align-items-center {{\r\n expandMenu()\r\n ? 'justify-content-between'\r\n : 'justify-content-center'\r\n }} p-2\"\r\n >\r\n <!-- Logo para o menu expandido -->\r\n @if(expandMenu() && logoMenuExpand){\r\n <img\r\n alt=\"Card\"\r\n [src]=\"logoMenuExpand\"\r\n [style.height]=\"'2.4rem'\"\r\n width=\"auto\"\r\n class=\"cursor-pointer p-0\"\r\n (click)=\"navigateToDefaultRoute()\"\r\n />\r\n }\r\n\r\n <!-- Logo para o menu minimizado-->\r\n @if(!expandMenu() && logoMenuHide){\r\n <img\r\n alt=\"Card\"\r\n [src]=\"logoMenuHide\"\r\n [style.height]=\"'2.4rem'\"\r\n width=\"auto\"\r\n class=\"cursor-pointer p-1\"\r\n (click)=\"navigateToDefaultRoute()\"\r\n />\r\n }\r\n\r\n <!-- Toggle menu -->\r\n @if(showExpandMenu){\r\n <!-- <span class=\"material-symbols-outlined side-menu-item\" (click)=\"expandMenu.set(!expandMenu())\">menu</span> -->\r\n }\r\n </div>\r\n\r\n @if(showTrocaEmpresa){\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item troca-empresa-container mb-3 py-2\"\r\n [pTooltip]=\"'Trocar de empresa'\"\r\n [tooltipPosition]=\"'right'\"\r\n (click)=\"changeEmpresa($event)\"\r\n >\r\n @if(expandMenu() && selectedEmpresa){\r\n <div\r\n class=\"flex flex-column w-full\"\r\n (click)=\"changeEmpresa($event)\"\r\n >\r\n @if(this.selectedEmpresa.razaosocial){\r\n <span\r\n class=\"text-xs font-semibold mr-2 color-system\"\r\n [style.fontSuze]=\"'.5rem'\"\r\n >\r\n {{ nameEmpresa(this.selectedEmpresa.razaosocial) }}\r\n </span>\r\n } @if(this.selectedEmpresa.cpfcnpj){\r\n <span\r\n class=\"text-xs mt-1 color-system\"\r\n [style.fontSuze]=\"'.5rem'\"\r\n >{{ this.selectedEmpresa.cpfcnpj | cpfCnpj }}</span\r\n >\r\n }\r\n </div>\r\n\r\n }\r\n\r\n <span class=\"material-symbols-outlined\">swap_horiz</span>\r\n </div>\r\n }\r\n </div>\r\n <!-- MENUS -->\r\n <div\r\n class=\"flex-1 list-none m-0 overflow-y-auto max-h-full menus-container\"\r\n >\r\n <!-- menus -->\r\n @for (menu of menus(); track $index) {\r\n @if(!idsAplicativosMenuHide.includes(menu.idaplicativo)){\r\n <li>\r\n <!-- menu que n\u00E3o tem filho -->\r\n @if( !menu.indmenupai && (!menu.idmenupai || menu.idmenupai == 0)){\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n (click)=\"callRoute(menu.link)\"\r\n >\r\n <span class=\"material-symbols-outlined\">{{\r\n menu.icone || \"lens_blur\"\r\n }}</span>\r\n @if(expandMenu()){\r\n <label>{{ menu.descricaomenu }}</label>\r\n }\r\n </div>\r\n }\r\n <!-- menu com filho -->\r\n @if(menu.indmenupai){\r\n <div\r\n class=\"menu-parent\"\r\n id=\"menu-parent-{{ $index }}\"\r\n (mouseenter)=\"exibirMenuChild($event, $index)\"\r\n (mouseleave)=\"menuVisivel.set(undefined)\"\r\n >\r\n <div\r\n class=\" flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n >\r\n <span class=\"material-symbols-outlined\">{{\r\n menu.icone || \"lens_blur\"\r\n }}</span>\r\n @if(expandMenu()){\r\n <label>{{ menu.descricaomenu }}</label>\r\n <span class=\"material-symbols-outlined\">chevron_right</span>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"menu-childs\"\r\n id=\"menu-child-{{ $index }}\"\r\n [style.opacity]=\"menuVisivel() === $index ? '1' : '0'\"\r\n [style.pointerEvents]=\"\r\n menuVisivel() === $index ? 'auto' : 'none'\r\n \"\r\n >\r\n <div class=\"flex align-items-center\">\r\n <p class=\"p-0 m-0 font-bold pt-2 px-2 text-xs\">\r\n {{ menu.descricaomenu }}\r\n </p>\r\n </div>\r\n <p-divider\r\n class=\"p-0 m-0\"\r\n [style.opacity]=\"1\"\r\n type=\"solid\"\r\n ></p-divider>\r\n <div class=\"menu-childs-content p-0 m-0\">\r\n @for (item of returnMenuChild(menu.idmenu); track $index) {\r\n\r\n <div\r\n class=\"side-menu-item py-2 px-2 text-sm\"\r\n (click)=\"callRoute(item.link)\"\r\n >\r\n {{ item.descricaomenu }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </li>\r\n } }\r\n </div>\r\n\r\n @if(useSelectionApps) {\r\n <!-- APPS E SAIR -->\r\n <p-divider class=\"px-2\" [style.opacity]=\"1\" type=\"solid\"></p-divider>\r\n\r\n <div class=\"flex-none list-none m-0 overflow-y-auto max-h-full\">\r\n <li>\r\n <div\r\n class=\"menu-parent\"\r\n id=\"menu-sistemas-parent\"\r\n (mouseenter)=\"exibirMenuChild($event, -1)\"\r\n (mouseleave)=\"menuVisivel.set(undefined)\"\r\n >\r\n <!-- <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n [pTooltip]=\"!expandMenu() ? 'Sistemas' : ''\"\r\n >\r\n <span class=\"material-symbols-outlined\">grid_view</span>\r\n \r\n @if(expandMenu()){\r\n <label>Sistemas</label>\r\n <span class=\"material-symbols-outlined\">chevron_right</span>\r\n }\r\n </div> -->\r\n\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item-system troca-sistema-container py-2\"\r\n (click)=\"changeEmpresa($event)\"\r\n >\r\n <!-- <p-avatar\r\n icon=\"pi pi-th-large\"\r\n styleClass=\"mr-2\"\r\n size=\"normal\"\r\n [style]=\"{\r\n 'background-color': 'rgb(var(--kv-color-system), 1)',\r\n color: 'white'\r\n }\"\r\n /> -->\r\n <div\r\n [style]=\"{\r\n 'background-color': 'rgb(var(--kv-color-system), .2)',\r\n color: 'rgb(var(--kv-color-system), 1)',\r\n 'border-radius': '.5rem',\r\n padding: '.25rem'\r\n }\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <span class=\"material-symbols-outlined\">\r\n dashboard_customize\r\n </span>\r\n </div>\r\n\r\n @if(expandMenu()) {\r\n <div class=\"flex flex-column w-full\">\r\n <span class=\"text-sm font-semibold mr-2 color-system\">\r\n Meus Sistemas\r\n </span>\r\n </div>\r\n\r\n \r\n <span\r\n class=\"material-symbols-outlined\"\r\n [style.color]=\"'rgb(var(--kv-color-system), 1)'\"\r\n >unfold_more</span\r\n >\r\n }\r\n\r\n </div>\r\n\r\n <div\r\n class=\"menu-childs\"\r\n id=\"menu-sistemas-child\"\r\n [style.opacity]=\"menuVisivel() === -1 ? '1' : '0'\"\r\n [style.pointerEvents]=\"menuVisivel() === -1 ? 'auto' : 'none'\"\r\n >\r\n <p class=\"p-0 m-0 font-bold pt-2 pl-3 text-xs\">Sistemas</p>\r\n @for (item of apps; track $index) {\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 side-menu-item py-2 pl-3 pr-1\"\r\n (click)=\"\r\n callRoute(item.rotapadrao); selectApp(item.idaplicativo)\r\n \"\r\n >\r\n <img\r\n [src]=\"item.urlicone\"\r\n class=\"h-2rem w-2rem border-round-lg\"\r\n />\r\n <div class=\"text-sm\">\r\n {{ item.nomeaplicativo }}\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </li>\r\n <!-- <li>\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n [pTooltip]=\"!expandMenu() ? 'Sair' : ''\"\r\n [style.color]=\"'rgba(252, 3, 3, 0.6)'\"\r\n (click)=\"logout($event)\"\r\n >\r\n <span class=\"material-symbols-outlined\">exit_to_app</span>\r\n @if(expandMenu()){\r\n <label>Sair</label>\r\n }\r\n </div>\r\n </li> -->\r\n </div>\r\n }\r\n </div>\r\n </ng-template>\r\n </p-sidebar>\r\n }\r\n\r\n <!-- SE\u00C7\u00C3O CONTE\u00DADO -->\r\n <div\r\n class=\"w-auto h-screen page-content overflow-y-hidden flex flex-column\"\r\n id=\"page-content\"\r\n style=\"width: 100vw !important\"\r\n >\r\n <!-- TOPO -->\r\n <div\r\n class=\"flex flex-row flex-wrap align-items-center justify-content-between my-2 mx-3 mb-0\"\r\n >\r\n @if(!showMenu) {\r\n <!-- Logo home -->\r\n <div>\r\n <img [src]=\"logoMenuExpand\" width=\"150\" />\r\n </div>\r\n } @else {\r\n <!-- Breadcrumbs -->\r\n @if(showBreadcrumb) {\r\n <div class=\"h-full\">\r\n <p-breadcrumb\r\n *ngIf=\"widthCard > 400\"\r\n styleClass=\"border-none p-0 flex align-items-center h-2rem bg-transparent\"\r\n [model]=\"breadCrumbItems\"\r\n (onItemClick)=\"callRoute($event.item.routerLink, true)\"\r\n >\r\n <ng-template pTemplate=\"item\" let-item let-i=\"index\">\r\n @if(breadCrumbItems.indexOf(item) < breadCrumbItems.length - 1){\r\n <span class=\"font-normal\">{{ item.label }}</span>\r\n } @else {\r\n <span class=\"font-bold\">{{ item.label }}</span>\r\n }\r\n </ng-template>\r\n </p-breadcrumb>\r\n </div>\r\n } @else {\r\n <!-- GHOST DIV PARA OCPUAR ESPA\u00C7O NO SPACE BETWEEN -->\r\n <div></div>\r\n } } @if (exibirNomes) { @if(widthCard >= 517) {\r\n <div\r\n class=\"w-auto flex flex-column justify-content-center align-items-center gap-2\"\r\n >\r\n @if (masterName) {\r\n <span class=\"font-semibold system-color\">{{ masterName }}</span> } @if\r\n (empresaName) {<span class=\"empresa-name\"\r\n >Organiza\u00E7\u00E3o: {{ empresaName }}</span\r\n >\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"w-auto flex flex-row justify-content-center align-items-center gap-2\"\r\n >\r\n <!-- Navega\u00E7\u00E3o de sistemas e usu\u00E1rios -->\r\n <!-- @for (topAction of topMenuActions(); track $index) {\r\n <ng-container *ngTemplateOutlet=\"topAction\" />\r\n } -->\r\n <kv-top-icons [topActions]=\"topMenuOptions\" />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"w-auto flex flex-row justify-content-center align-items-center gap-2\"\r\n >\r\n <!-- Navega\u00E7\u00E3o de sistemas e usu\u00E1rios -->\r\n <!-- @for (topAction of topMenuActions(); track $index) {\r\n <ng-container *ngTemplateOutlet=\"topAction\" />\r\n } -->\r\n <kv-top-icons [topActions]=\"topMenuOptions\" />\r\n </div>\r\n\r\n <div\r\n class=\"w-auto flex flex-column justify-content-center align-items-center gap-2\"\r\n >\r\n @if (masterName) { <span class=\"master-name\">{{ masterName }}</span> }\r\n @if (empresaName) {<span class=\"empresa-name\">{{ empresaName }}</span> }\r\n </div>\r\n } } @else { @if(widthPage() > 992){\r\n <!-- dropdown para sele\u00E7\u00E3o de empresa/licenca -->\r\n <dropdown-master\r\n *ngIf=\"showLicencas()\"\r\n class=\"max-w-25rem flex-1\"\r\n formControlName=\"idmaster\"\r\n [formGroup]=\"formGroup\"\r\n [masters]=\"masters\"\r\n (onSelectionChange)=\"changeLicense($event)\"\r\n (onSelectionValue)=\"changeLicense($event)\"\r\n >\r\n </dropdown-master>\r\n }\r\n\r\n <!-- Navega\u00E7\u00E3o de sistemas e usu\u00E1rios -->\r\n <div class=\"w-auto flex flex-row align-items-center gap-2\">\r\n <kv-top-icons [topActions]=\"topMenuOptions\" />\r\n </div>\r\n }\r\n </div>\r\n\r\n @if(widthPage() <= 992){\r\n <!-- dropdown para sele\u00E7\u00E3o de empresa/licenca -->\r\n <div class=\"h-2rem mx-3\">\r\n <dropdown-master\r\n *ngIf=\"showLicencas()\"\r\n formControlName=\"idmaster\"\r\n [formGroup]=\"formGroup\"\r\n [masters]=\"masters\"\r\n (onSelectionChange)=\"changeLicense($event)\"\r\n (onSelectionValue)=\"changeLicense($event)\"\r\n />\r\n </div>\r\n\r\n }\r\n\r\n <!-- Container -->\r\n <div class=\"overflow-hidden flex-1 p-0 m-0 mb-2 h-full\">\r\n <div\r\n class=\"overflow-y-auto h-full max-h-full {{\r\n !showMenu && 'sm:overflow-y-hidden'\r\n }} card-container\r\n \r\n {{ useCard ? 'use-card' : '' }}\r\n \"\r\n >\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Painel do usu\u00E1rio -->\r\n <p-overlayPanel\r\n #meusDadosPanel\r\n [showTransitionOptions]=\"'350ms ease-out'\"\r\n [hideTransitionOptions]=\"'250ms ease-in'\"\r\n >\r\n <ng-template pTemplate=\"container\">\r\n <div class=\"p-3 flex flex-column gap-2\">\r\n <div class=\"flex flex-row align-items-center gap-2\">\r\n <p-avatar\r\n icon=\"pi pi-user\"\r\n class=\"mr-2\"\r\n size=\"xlarge\"\r\n shape=\"circle\"\r\n [style]=\"{ width: '4.5rem', height: '4.5rem' }\"\r\n />\r\n\r\n <div\r\n class=\"flex flex-column w-10rem justify-content-between\"\r\n [style]=\"{ height: '4.5rem' }\"\r\n >\r\n <span\r\n class=\"text-medium text-md overflow-hidden white-space-nowrap text-overflow-ellipsis\"\r\n >Ol\u00E1, {{ userName.split(\" \")[0] }}!</span\r\n >\r\n <span\r\n class=\"text-medium text-xs text-gray-500 overflow-hidden white-space-nowrap text-overflow-ellipsis\"\r\n >{{ userEmail }}</span\r\n >\r\n <kv-button\r\n severity=\"secondary\"\r\n size=\"small\"\r\n label=\"Gerenciar KeePass\"\r\n (onClick)=\"accessKeePass($event)\"\r\n ></kv-button>\r\n </div>\r\n </div>\r\n\r\n @if(actions.length > 0) {\r\n <p-divider></p-divider>\r\n\r\n <div class=\"flex flex-column text-sm\">\r\n @for (action of actions; track $index) {\r\n <ng-container>\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 side-menu-item p-2\"\r\n (click)=\"action.action()\"\r\n >\r\n <span class=\"material-symbols-outlined\">{{ action.icon }}</span>\r\n <span>{{ action.label }}</span>\r\n </div>\r\n </ng-container>\r\n }\r\n </div>\r\n }\r\n\r\n <p-divider></p-divider>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-between gap-2 side-menu-item p-2\"\r\n [style.color]=\"'rgba(252, 3, 3, 0.6)'\"\r\n (click)=\"logout($event)\"\r\n >\r\n <span class=\"material-symbols-outlined\">exit_to_app</span>\r\n <label>Sair</label>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-overlayPanel>\r\n</div>\r\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0\";::ng-deep :root{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255;--kv-primary-color: 41, 185, 45;--kv-secondary-color: 0, 37, 66;--kv-tertiary-color: 165, 165, 165}::ng-deep .padrao{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-keevocenter{--kv-color-system: 88,25,153;--kv-color-system-cta: 0, 116, 217;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-holos{--kv-color-system: 241,90,36;--kv-color-system-cta: 224, 168, 35;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 240,240,240;--kv-background-card: 2255,255,255}.system-color{color:rgb(var(--kv-color-system),1)}.bg-system-100{background:rgb(var(--kv-color-system),1)}.bg-system-75{background:rgb(var(--kv-color-system),.75)}.bg-system-50{background:rgb(var(--kv-color-system),.5)}.bg-system-25{background:rgb(var(--kv-color-system),.25)}.material-symbols-outlined{font-family:Material Symbols Outlined!important}*{font-family:Inter,Inter var,sans-serif!important}::ng-deep .p-accordion,::ng-deep .p-accordion-header,::ng-deep .p-accordion-content,::ng-deep .p-badge,::ng-deep .p-overlay-badge,::ng-deep .p-breadcrumb,::ng-deep .p-breadcrumb-item,::ng-deep .p-breadcrumb-link,::ng-deep .p-button,::ng-deep .p-calendar,::ng-deep .p-card,::ng-deep .p-card-title,::ng-deep .p-card-subtitle,::ng-deep .p-card-content,::ng-deep .p-checkbox,::ng-deep .p-chip,::ng-deep .p-confirm-dialog,::ng-deep .p-confirm-dialog-message,::ng-deep .p-contextmenu,::ng-deep .p-contextmenu-item,::ng-deep .p-dataview,::ng-deep .p-dataview-content,::ng-deep .p-dialog,::ng-deep .p-dialog-title,::ng-deep .p-dialog-content,::ng-deep .p-dropdown,::ng-deep .p-dropdown-label,::ng-deep .p-dropdown-item,::ng-deep .p-dynamic-dialog,::ng-deep .p-dynamic-dialog-title,::ng-deep .p-dynamic-dialog-content,::ng-deep .p-editor,::ng-deep .p-fieldset,::ng-deep .p-fieldset-legend,::ng-deep .p-fieldset-content,::ng-deep .p-fileupload,::ng-deep .p-inputmask,::ng-deep .p-inputnumber,::ng-deep .p-inputtextarea,::ng-deep .p-inputtext,::ng-deep .p-menu,::ng-deep .p-menuitem,::ng-deep .p-menuitem-text,::ng-deep .p-message,::ng-deep .p-messages,::ng-deep .p-multiselect,::ng-deep .p-multiselect-label,::ng-deep .p-multiselect-item,::ng-deep .p-panelmenu,::ng-deep .p-panelmenu-header,::ng-deep .p-panelmenu-content,::ng-deep .p-panel,::ng-deep .p-panel-header,::ng-deep .p-panel-content,::ng-deep .p-password,::ng-deep .p-picklist,::ng-deep .p-progressbar,::ng-deep .p-radiobutton,::ng-deep .p-rating,::ng-deep .p-sidebar,::ng-deep .p-splitbutton,::ng-deep .p-steps,::ng-deep .p-step,::ng-deep .p-table,::ng-deep .p-datatable,::ng-deep .p-tabview,::ng-deep .p-tabpanel,::ng-deep .p-tag,::ng-deep .p-toast,::ng-deep .p-toolbar,::ng-deep .p-tooltip,::ng-deep .p-tree,::ng-deep .p-treetable,::ng-deep .p-selectbutton,::ng-deep .p-stepper,::ng-deep .p-inputgroup,::ng-deep .p-inputgroup-addon,::ng-deep .p-text{font-family:Inter,Inter var,sans-serif!important}:host ::ng-deep .inputs{height:1.875rem}:host ::ng-deep .inputs,.p-inputtext,.p-inputtextarea{font-size:.875rem}::ng-deep .p-dialog .p-dialog-header{color:rgb(var(--kv-color-text))!important;background:linear-gradient(0deg,#00000005 .44%,#0000 49.5%),#fff!important;display:flex!important;flex-wrap:wrap;word-wrap:break-word;border-bottom:1px solid rgb(var(--kv-color-text),.15)}::ng-deep .p-dialog .p-dialog-content{padding-top:1rem}::ng-deep .p-dialog{min-width:320px}::ng-deep .p-dialog-content{overflow-x:hidden}::ng-deep .p-dialog-content::-webkit-scrollbar{width:8px}::ng-deep .p-dialog-content::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-dialog-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-dialog-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-dialog-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-dialog-footer{display:flex;justify-content:flex-end;padding:10px;gap:10px}::ng-deep .p-dialog .p-dialog-header .p-dialog-header-icon{display:none}::ng-deep .p-tooltip{font-size:.825rem!important}.material-symbols-outlined{font-size:1.3rem}::ng-deep body{margin:0!important}.full-container{background:rgb(var(--kv-background-system),1);width:100vw;height:100vh;overflow-x:hidden;overflow-y:hidden}::ng-deep p-sidebar .p-sidebar{position:relative!important;background:rgb(var(--kv-background-card),1);box-shadow:0 0 .8rem #0000001a;border:1px solid rgb(var(--kv-color-system),.1);margin-left:.5rem;margin-top:.5rem;border-radius:.5rem;height:calc(100vh - 1rem);z-index:1100!important}.page-content{background:none}.use-card{background-color:rgb(var(--kv-background-card),1);box-shadow:0 0 .8rem #0000001a;border:1px solid rgb(var(--kv-color-system),.1);border-radius:.5rem}::ng-deep .card-container{margin:0rem .5rem;background-color:rgb(var(--kv-background-system),1);overflow-x:hidden}::ng-deep .card-container .p-card-body{padding:.5rem .5rem 0;margin:0;height:100%}::ng-deep .card-container .p-card-content{margin:0;padding:0;height:100%}::ng-deep .card-container::-webkit-scrollbar{width:6px}::ng-deep .card-container::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .card-container::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .card-container:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .card-container::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.side-menu-item{transition:all .2s ease-in-out;cursor:pointer;border-radius:.5rem;padding-left:.5rem;padding-right:.5rem}.side-menu-item:hover{background-color:rgb(var(--kv-color-system),.25);color:rgb(var(--kv-color-system),1)}.side-menu-item label{width:100%;cursor:pointer}.side-menu-item-system{transition:all .2s ease-in-out;cursor:pointer;border-radius:.5rem;padding-left:.5rem;padding-right:.5rem}.side-menu-item-system:hover{background-color:rgb(var(--kv-color-system),.08);color:rgb(var(--kv-color-system),1)}.side-menu-item-system label{width:100%;cursor:pointer}::ng-deep .p-divider{margin:0;padding:0;margin-top:.5rem;margin-bottom:.5rem}::ng-deep .p-overlaypanel-content{padding:0}.menu-parent{display:inline-block;width:100%}.menu-childs{position:absolute;left:-500px;min-width:17rem;max-width:50rem;overflow:hidden;padding:.5rem;background:rgb(var(--kv-background-card),1);border:1px solid rgb(var(--kv-color-system),.1);border-radius:.5rem;z-index:9999;box-shadow:0 0 .8rem #0000001a;gap:0}.menu-childs p{color:rgb(var(--kv-color-system),1)!important;opacity:.7}.menu-childs .menu-childs-content{max-height:25rem;overflow:auto}.menu-childs .menu-childs-content::-webkit-scrollbar{width:8px}.menu-childs .menu-childs-content::-webkit-scrollbar:hover{background-color:#dededebf}.menu-childs .menu-childs-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}.menu-childs .menu-childs-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}.menu-childs .menu-childs-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-breadcrumb .p-breadcrumb-list span{color:rgba(var(--kv-color-text),.75)!important;font-size:.75rem}::ng-deep .p-breadcrumb .p-breadcrumb-list li.p-menuitem-separator{color:rgba(var(--kv-color-text),.7)!important;margin:0;margin-left:.1rem;margin-right:.1rem}::ng-deep .p-breadcrumb .p-breadcrumb-list li.p-menuitem-separator svg{height:.5rem}.troca-empresa-container{font-size:.75rem;opacity:.8;border:1px solid #c1cfe1;color:#0a3a78;background-color:rgb(var(--kv-color-system),.05)}.troca-empresa-container:hover{opacity:1;border:1px solid rgb(var(--kv-color-system),1)}.menus-container label{font-size:.875rem}.meus-sistemas{background-color:rgb(var(--kv-color-system),.05)}\n"] }]
|
|
352
|
+
args: [{ selector: 'kv-layout', template: "<div class=\"flex flex-row full-container\">\r\n @if(showMenu) {\r\n <p-sidebar\r\n #sidebarRef\r\n [visible]=\"true\"\r\n [showCloseIcon]=\"false\"\r\n [modal]=\"false\"\r\n [style]=\"{ width: expandMenu() ? '17rem' : '3.65rem' }\"\r\n styleClass=\"transition-all\"\r\n >\r\n <ng-template pTemplate=\"headless\">\r\n <div class=\"h-full flex flex-column overflow-hidden p-2\">\r\n <div\r\n class=\"flex-none flex flex-column gap-3 justify-content-between flex-shrink-0 overflow-hidden\"\r\n >\r\n <!-- LOGO -->\r\n <div\r\n class=\"flex {{\r\n expandMenu() ? 'flex-row' : 'flex-column'\r\n }} align-items-center {{\r\n expandMenu()\r\n ? 'justify-content-between'\r\n : 'justify-content-center'\r\n }} p-2\"\r\n >\r\n <!-- Logo para o menu expandido -->\r\n @if(expandMenu() && logoMenuExpand){\r\n <img\r\n alt=\"Card\"\r\n [src]=\"logoMenuExpand\"\r\n [style.height]=\"'2.4rem'\"\r\n width=\"auto\"\r\n class=\"cursor-pointer p-0\"\r\n (click)=\"navigateToDefaultRoute()\"\r\n />\r\n }\r\n\r\n <!-- Logo para o menu minimizado-->\r\n @if(!expandMenu() && logoMenuHide){\r\n <img\r\n alt=\"Card\"\r\n [src]=\"logoMenuHide\"\r\n [style.height]=\"'2.4rem'\"\r\n width=\"auto\"\r\n class=\"cursor-pointer p-1\"\r\n (click)=\"navigateToDefaultRoute()\"\r\n />\r\n }\r\n\r\n <!-- Toggle menu -->\r\n @if(showExpandMenu){\r\n <!-- <span class=\"material-symbols-outlined side-menu-item\" (click)=\"expandMenu.set(!expandMenu())\">menu</span> -->\r\n }\r\n </div>\r\n\r\n @if(showTrocaEmpresa){\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item troca-empresa-container mb-3 py-2\"\r\n [pTooltip]=\"'Trocar de empresa'\"\r\n [tooltipPosition]=\"'right'\"\r\n (click)=\"changeEmpresa($event)\"\r\n >\r\n @if(expandMenu() && selectedEmpresa){\r\n <div\r\n class=\"flex flex-column w-full\"\r\n (click)=\"changeEmpresa($event)\"\r\n >\r\n @if(this.selectedEmpresa.razaosocial){\r\n <span\r\n class=\"text-xs font-semibold mr-2 color-system\"\r\n [style.fontSuze]=\"'.5rem'\"\r\n >\r\n {{ nameEmpresa(this.selectedEmpresa.razaosocial) }}\r\n </span>\r\n } @if(this.selectedEmpresa.cpfcnpj){\r\n <span\r\n class=\"text-xs mt-1 color-system\"\r\n [style.fontSuze]=\"'.5rem'\"\r\n >{{ this.selectedEmpresa.cpfcnpj | cpfCnpj }}</span\r\n >\r\n }\r\n </div>\r\n\r\n }\r\n\r\n <span class=\"material-symbols-outlined\">swap_horiz</span>\r\n </div>\r\n }\r\n </div>\r\n <!-- MENUS -->\r\n <div\r\n class=\"flex-1 list-none m-0 overflow-y-auto max-h-full menus-container\"\r\n >\r\n <!-- menus -->\r\n @for (menu of menus(); track $index) {\r\n @if(!idsAplicativosMenuHide.includes(menu.idaplicativo)){\r\n <li>\r\n <!-- menu que n\u00E3o tem filho -->\r\n @if( !menu.indmenupai && (!menu.idmenupai || menu.idmenupai == 0)){\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n (click)=\"callRoute(menu.link)\"\r\n >\r\n <span class=\"material-symbols-outlined\">{{\r\n menu.icone || \"lens_blur\"\r\n }}</span>\r\n @if(expandMenu()){\r\n <label>{{ menu.descricaomenu }}</label>\r\n }\r\n </div>\r\n }\r\n <!-- menu com filho -->\r\n @if(menu.indmenupai){\r\n <div\r\n class=\"menu-parent\"\r\n id=\"menu-parent-{{ $index }}\"\r\n (mouseenter)=\"exibirMenuChild($event, $index)\"\r\n (mouseleave)=\"menuVisivel.set(undefined)\"\r\n >\r\n <div\r\n class=\" flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n >\r\n <span class=\"material-symbols-outlined\">{{\r\n menu.icone || \"lens_blur\"\r\n }}</span>\r\n @if(expandMenu()){\r\n <label>{{ menu.descricaomenu }}</label>\r\n <span class=\"material-symbols-outlined\">chevron_right</span>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"menu-childs\"\r\n id=\"menu-child-{{ $index }}\"\r\n [style.opacity]=\"menuVisivel() === $index ? '1' : '0'\"\r\n [style.pointerEvents]=\"\r\n menuVisivel() === $index ? 'auto' : 'none'\r\n \"\r\n >\r\n <div class=\"flex align-items-center\">\r\n <p class=\"p-0 m-0 font-bold pt-2 px-2 text-xs\">\r\n {{ menu.descricaomenu }}\r\n </p>\r\n </div>\r\n <p-divider\r\n class=\"p-0 m-0\"\r\n [style.opacity]=\"1\"\r\n type=\"solid\"\r\n ></p-divider>\r\n <div class=\"menu-childs-content p-0 m-0\">\r\n @for (item of returnMenuChild(menu.idmenu); track $index) {\r\n\r\n <div\r\n class=\"side-menu-item py-2 px-2 text-sm\"\r\n (click)=\"callRoute(item.link)\"\r\n >\r\n {{ item.descricaomenu }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </li>\r\n } }\r\n </div>\r\n\r\n @if(useSelectionApps) {\r\n <!-- APPS E SAIR -->\r\n <p-divider class=\"px-2\" [style.opacity]=\"1\" type=\"solid\"></p-divider>\r\n\r\n <div class=\"flex-none list-none m-0 overflow-y-auto max-h-full\">\r\n <li>\r\n <div\r\n class=\"menu-parent\"\r\n id=\"menu-sistemas-parent\"\r\n (mouseenter)=\"exibirMenuChild($event, -1)\"\r\n (mouseleave)=\"menuVisivel.set(undefined)\"\r\n >\r\n <!-- <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n [pTooltip]=\"!expandMenu() ? 'Sistemas' : ''\"\r\n >\r\n <span class=\"material-symbols-outlined\">grid_view</span>\r\n \r\n @if(expandMenu()){\r\n <label>Sistemas</label>\r\n <span class=\"material-symbols-outlined\">chevron_right</span>\r\n }\r\n </div> -->\r\n\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item-system troca-sistema-container py-2\"\r\n (click)=\"changeEmpresa($event)\"\r\n >\r\n <!-- <p-avatar\r\n icon=\"pi pi-th-large\"\r\n styleClass=\"mr-2\"\r\n size=\"normal\"\r\n [style]=\"{\r\n 'background-color': 'rgb(var(--kv-color-system), 1)',\r\n color: 'white'\r\n }\"\r\n /> -->\r\n <div\r\n [style]=\"{\r\n 'background-color': 'rgb(var(--kv-color-system), .2)',\r\n color: 'rgb(var(--kv-color-system), 1)',\r\n 'border-radius': '.5rem',\r\n padding: '.25rem'\r\n }\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <span class=\"material-symbols-outlined\">\r\n dashboard_customize\r\n </span>\r\n </div>\r\n\r\n @if(expandMenu()) {\r\n <div class=\"flex flex-column w-full\">\r\n <span class=\"text-sm font-semibold mr-2 color-system\">\r\n Meus Sistemas\r\n </span>\r\n </div>\r\n\r\n <span\r\n class=\"material-symbols-outlined\"\r\n [style.color]=\"'rgb(var(--kv-color-system), 1)'\"\r\n >unfold_more</span\r\n >\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"menu-childs\"\r\n id=\"menu-sistemas-child\"\r\n [style.opacity]=\"menuVisivel() === -1 ? '1' : '0'\"\r\n [style.pointerEvents]=\"menuVisivel() === -1 ? 'auto' : 'none'\"\r\n >\r\n <p class=\"p-0 m-0 font-bold pt-2 pl-3 text-xs\">Sistemas</p>\r\n @for (item of apps; track $index) {\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 side-menu-item py-2 pl-3 pr-1\"\r\n (click)=\"\r\n callRoute(item.rotapadrao); selectApp(item.idaplicativo)\r\n \"\r\n >\r\n <img\r\n [src]=\"item.urlicone\"\r\n class=\"h-2rem w-2rem border-round-lg\"\r\n />\r\n <div class=\"text-sm\">\r\n {{ item.nomeaplicativo }}\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </li>\r\n <!-- <li>\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n [pTooltip]=\"!expandMenu() ? 'Sair' : ''\"\r\n [style.color]=\"'rgba(252, 3, 3, 0.6)'\"\r\n (click)=\"logout($event)\"\r\n >\r\n <span class=\"material-symbols-outlined\">exit_to_app</span>\r\n @if(expandMenu()){\r\n <label>Sair</label>\r\n }\r\n </div>\r\n </li> -->\r\n </div>\r\n }\r\n </div>\r\n </ng-template>\r\n </p-sidebar>\r\n }\r\n\r\n <!-- SE\u00C7\u00C3O CONTE\u00DADO -->\r\n <div\r\n class=\"w-auto h-screen page-content overflow-y-hidden flex flex-column\"\r\n id=\"page-content\"\r\n style=\"width: 100vw !important\"\r\n >\r\n <!-- TOPO -->\r\n <div\r\n class=\"flex flex-row flex-wrap align-items-center justify-content-between my-2 mx-3 mb-0\"\r\n >\r\n @if(!showMenu) {\r\n <!-- Logo home -->\r\n <div>\r\n <img [src]=\"logoMenuExpand\" width=\"150\" />\r\n </div>\r\n } @else {\r\n <!-- Breadcrumbs -->\r\n @if(showBreadcrumb) {\r\n <div class=\"h-full\">\r\n <p-breadcrumb\r\n *ngIf=\"widthCard > 400\"\r\n styleClass=\"border-none p-0 flex align-items-center h-2rem bg-transparent\"\r\n [model]=\"breadCrumbItems\"\r\n (onItemClick)=\"callRoute($event.item.routerLink, true)\"\r\n >\r\n <ng-template pTemplate=\"item\" let-item let-i=\"index\">\r\n @if(breadCrumbItems.indexOf(item) < breadCrumbItems.length - 1){\r\n <span class=\"font-normal\">{{ item.label }}</span>\r\n } @else {\r\n <span class=\"font-bold\">{{ item.label }}</span>\r\n }\r\n </ng-template>\r\n </p-breadcrumb>\r\n </div>\r\n } @else {\r\n <!-- GHOST DIV PARA OCPUAR ESPA\u00C7O NO SPACE BETWEEN -->\r\n <div></div>\r\n } } @if (exibirNomes) { @if(widthCard >= 517) {\r\n <div\r\n class=\"w-auto flex flex-column justify-content-center align-items-center gap-2\"\r\n >\r\n @if (masterName) {\r\n <span class=\"font-semibold system-color\">{{ masterName }}</span> } @if\r\n (empresaName) {<span class=\"empresa-name\"\r\n >Organiza\u00E7\u00E3o: {{ empresaName }}</span\r\n >\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"w-auto flex flex-row justify-content-center align-items-center gap-2\"\r\n >\r\n <!-- Navega\u00E7\u00E3o de sistemas e usu\u00E1rios -->\r\n <!-- @for (topAction of topMenuActions(); track $index) {\r\n <ng-container *ngTemplateOutlet=\"topAction\" />\r\n } -->\r\n <kv-top-icons [topActions]=\"topMenuOptions\" />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"w-auto flex flex-row justify-content-center align-items-center gap-2\"\r\n >\r\n <!-- Navega\u00E7\u00E3o de sistemas e usu\u00E1rios -->\r\n <!-- @for (topAction of topMenuActions(); track $index) {\r\n <ng-container *ngTemplateOutlet=\"topAction\" />\r\n } -->\r\n <kv-top-icons [topActions]=\"topMenuOptions\" />\r\n </div>\r\n\r\n <div\r\n class=\"w-auto flex flex-column justify-content-center align-items-center gap-2\"\r\n >\r\n @if (masterName) { <span class=\"master-name\">{{ masterName }}</span> }\r\n @if (empresaName) {<span class=\"empresa-name\">{{ empresaName }}</span> }\r\n </div>\r\n } } @else { @if(widthPage() > 992){\r\n <!-- dropdown para sele\u00E7\u00E3o de empresa/licenca -->\r\n <dropdown-master\r\n *ngIf=\"showLicencas()\"\r\n class=\"max-w-25rem flex-1\"\r\n formControlName=\"idmaster\"\r\n [formGroup]=\"formGroup\"\r\n [masters]=\"masters\"\r\n (onSelectionChange)=\"changeLicense($event)\"\r\n (onSelectionValue)=\"changeLicense($event)\"\r\n >\r\n </dropdown-master>\r\n }\r\n\r\n <!-- Navega\u00E7\u00E3o de sistemas e usu\u00E1rios -->\r\n <div class=\"w-auto flex flex-row align-items-center gap-2\">\r\n <kv-top-icons [topActions]=\"topMenuOptions\" />\r\n </div>\r\n }\r\n </div>\r\n\r\n @if(widthPage() <= 992){\r\n <!-- dropdown para sele\u00E7\u00E3o de empresa/licenca -->\r\n <div class=\"h-2rem mx-3\">\r\n <dropdown-master\r\n *ngIf=\"showLicencas()\"\r\n formControlName=\"idmaster\"\r\n [formGroup]=\"formGroup\"\r\n [masters]=\"masters\"\r\n (onSelectionChange)=\"changeLicense($event)\"\r\n (onSelectionValue)=\"changeLicense($event)\"\r\n />\r\n </div>\r\n\r\n }\r\n\r\n <!-- Container -->\r\n <div class=\"overflow-hidden flex-1 p-0 m-0 mb-2 h-full\">\r\n <div\r\n class=\"overflow-y-auto h-full max-h-full {{\r\n !showMenu && 'sm:overflow-y-hidden'\r\n }} card-container\r\n \r\n {{ useCard ? 'use-card' : '' }}\r\n \"\r\n >\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Painel do usu\u00E1rio -->\r\n <p-overlayPanel\r\n #meusDadosPanel\r\n [showTransitionOptions]=\"'350ms ease-out'\"\r\n [hideTransitionOptions]=\"'250ms ease-in'\"\r\n >\r\n <ng-template pTemplate=\"container\">\r\n <div class=\"p-3 flex flex-column gap-2\">\r\n <div class=\"flex flex-row align-items-center gap-2\">\r\n <p-avatar\r\n icon=\"pi pi-user\"\r\n class=\"mr-2\"\r\n size=\"xlarge\"\r\n shape=\"circle\"\r\n [style]=\"{ width: '4.5rem', height: '4.5rem' }\"\r\n />\r\n\r\n <div\r\n class=\"flex flex-column w-10rem justify-content-between\"\r\n [style]=\"{ height: '4.5rem' }\"\r\n >\r\n <span\r\n class=\"text-medium text-md overflow-hidden white-space-nowrap text-overflow-ellipsis\"\r\n >Ol\u00E1, {{ userName.split(\" \")[0] }}!</span\r\n >\r\n <span\r\n class=\"text-medium text-xs text-gray-500 overflow-hidden white-space-nowrap text-overflow-ellipsis\"\r\n >{{ userEmail }}</span\r\n >\r\n <kv-button\r\n severity=\"secondary\"\r\n size=\"small\"\r\n label=\"Gerenciar KeePass\"\r\n (onClick)=\"accessKeePass($event)\"\r\n ></kv-button>\r\n </div>\r\n </div>\r\n\r\n @if(actions.length > 0) {\r\n <p-divider></p-divider>\r\n\r\n <div class=\"flex flex-column text-sm\">\r\n @for (action of actions; track $index) {\r\n <ng-container>\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 side-menu-item p-2\"\r\n (click)=\"action.action()\"\r\n >\r\n <span class=\"material-symbols-outlined\">{{ action.icon }}</span>\r\n <span>{{ action.label }}</span>\r\n </div>\r\n </ng-container>\r\n }\r\n </div>\r\n } \r\n \r\n @if(showTrilhaConhecimento) {\r\n <p-divider></p-divider>\r\n\r\n <div class=\"flex flex-column gap-3\">\r\n <span class=\"text-sm font-semibold text-gray-500\">Trilha do Conhecimento</span>\r\n @for(trilha of trilhaConhecimento; track $index) {\r\n\r\n <div class=\"flex flex-row gap-2 max-w-25rem\">\r\n <div class=\"flex align-items-center justify-content-center border-round-md trilha-icon\">\r\n <span class=\"material-symbols-outlined text-2xl\">{{ trilha.icon }}</span>\r\n </div>\r\n <div class=\" flex flex-column justify-content-between w-20rem\">\r\n <span class=\"text-sm font-medium overflow-hidden white-space-nowrap text-overflow-ellipsis text-gray-500\">{{trilha.title}}</span>\r\n <span class=\"text-xs text-gray-400 overflow-hidden white-space-nowrap text-overflow-ellipsis\" [pTooltip]=\"trilha.subtitle\" [tooltipPosition]=\"'left'\">{{trilha.subtitle}}</span>\r\n <div class=\"flex flex-row gap-2\">\r\n <span class=\"material-symbols-outlined button-icon\" [pTooltip]=\"'Baixar Documento'\" (click)=\"downloadDoc(trilha)\">download</span>\r\n <span class=\"material-symbols-outlined button-icon\" [pTooltip]=\"'Assistir V\u00EDdeo'\" (click)=\"showVideoDoc(trilha)\">videocam</span>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <p-divider></p-divider>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-between gap-2 side-menu-item p-2\"\r\n [style.color]=\"'rgba(252, 3, 3, 0.6)'\"\r\n (click)=\"logout($event)\"\r\n >\r\n <span class=\"material-symbols-outlined\">exit_to_app</span>\r\n <label>Sair</label>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-overlayPanel>\r\n</div>\r\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0\";::ng-deep :root{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255;--kv-primary-color: 41, 185, 45;--kv-secondary-color: 0, 37, 66;--kv-tertiary-color: 165, 165, 165}::ng-deep .padrao{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-keevocenter{--kv-color-system: 88,25,153;--kv-color-system-cta: 0, 116, 217;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-holos{--kv-color-system: 241,90,36;--kv-color-system-cta: 224, 168, 35;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 240,240,240;--kv-background-card: 2255,255,255}.system-color{color:rgb(var(--kv-color-system),1)}.bg-system-100{background:rgb(var(--kv-color-system),1)}.bg-system-75{background:rgb(var(--kv-color-system),.75)}.bg-system-50{background:rgb(var(--kv-color-system),.5)}.bg-system-25{background:rgb(var(--kv-color-system),.25)}.material-symbols-outlined{font-family:Material Symbols Outlined!important}*{font-family:Inter,Inter var,sans-serif!important}::ng-deep .p-accordion,::ng-deep .p-accordion-header,::ng-deep .p-accordion-content,::ng-deep .p-badge,::ng-deep .p-overlay-badge,::ng-deep .p-breadcrumb,::ng-deep .p-breadcrumb-item,::ng-deep .p-breadcrumb-link,::ng-deep .p-button,::ng-deep .p-calendar,::ng-deep .p-card,::ng-deep .p-card-title,::ng-deep .p-card-subtitle,::ng-deep .p-card-content,::ng-deep .p-checkbox,::ng-deep .p-chip,::ng-deep .p-confirm-dialog,::ng-deep .p-confirm-dialog-message,::ng-deep .p-contextmenu,::ng-deep .p-contextmenu-item,::ng-deep .p-dataview,::ng-deep .p-dataview-content,::ng-deep .p-dialog,::ng-deep .p-dialog-title,::ng-deep .p-dialog-content,::ng-deep .p-dropdown,::ng-deep .p-dropdown-label,::ng-deep .p-dropdown-item,::ng-deep .p-dynamic-dialog,::ng-deep .p-dynamic-dialog-title,::ng-deep .p-dynamic-dialog-content,::ng-deep .p-editor,::ng-deep .p-fieldset,::ng-deep .p-fieldset-legend,::ng-deep .p-fieldset-content,::ng-deep .p-fileupload,::ng-deep .p-inputmask,::ng-deep .p-inputnumber,::ng-deep .p-inputtextarea,::ng-deep .p-inputtext,::ng-deep .p-menu,::ng-deep .p-menuitem,::ng-deep .p-menuitem-text,::ng-deep .p-message,::ng-deep .p-messages,::ng-deep .p-multiselect,::ng-deep .p-multiselect-label,::ng-deep .p-multiselect-item,::ng-deep .p-panelmenu,::ng-deep .p-panelmenu-header,::ng-deep .p-panelmenu-content,::ng-deep .p-panel,::ng-deep .p-panel-header,::ng-deep .p-panel-content,::ng-deep .p-password,::ng-deep .p-picklist,::ng-deep .p-progressbar,::ng-deep .p-radiobutton,::ng-deep .p-rating,::ng-deep .p-sidebar,::ng-deep .p-splitbutton,::ng-deep .p-steps,::ng-deep .p-step,::ng-deep .p-table,::ng-deep .p-datatable,::ng-deep .p-tabview,::ng-deep .p-tabpanel,::ng-deep .p-tag,::ng-deep .p-toast,::ng-deep .p-toolbar,::ng-deep .p-tooltip,::ng-deep .p-tree,::ng-deep .p-treetable,::ng-deep .p-selectbutton,::ng-deep .p-stepper,::ng-deep .p-inputgroup,::ng-deep .p-inputgroup-addon,::ng-deep .p-text{font-family:Inter,Inter var,sans-serif!important}:host ::ng-deep .inputs{height:1.875rem}:host ::ng-deep .inputs,.p-inputtext,.p-inputtextarea{font-size:.875rem}::ng-deep .p-dialog .p-dialog-header{color:rgb(var(--kv-color-text))!important;background:linear-gradient(0deg,#00000005 .44%,#0000 49.5%),#fff!important;display:flex!important;flex-wrap:wrap;word-wrap:break-word;border-bottom:1px solid rgb(var(--kv-color-text),.15)}::ng-deep .p-dialog .p-dialog-content{padding-top:1rem}::ng-deep .p-dialog{min-width:320px}::ng-deep .p-dialog-content{overflow-x:hidden}::ng-deep .p-dialog-content::-webkit-scrollbar{width:8px}::ng-deep .p-dialog-content::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-dialog-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-dialog-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-dialog-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-dialog-footer{display:flex;justify-content:flex-end;padding:10px;gap:10px}::ng-deep .p-dialog .p-dialog-header .p-dialog-header-icon{display:none}::ng-deep .p-tooltip{font-size:.825rem!important}.material-symbols-outlined{font-size:1.3rem}::ng-deep body{margin:0!important}.full-container{background:rgb(var(--kv-background-system),1);width:100vw;height:100vh;overflow-x:hidden;overflow-y:hidden}::ng-deep p-sidebar .p-sidebar{position:relative!important;background:rgb(var(--kv-background-card),1);box-shadow:0 0 .8rem #0000001a;border:1px solid rgb(var(--kv-color-system),.1);margin-left:.5rem;margin-top:.5rem;border-radius:.5rem;height:calc(100vh - 1rem);z-index:1100!important}.page-content{background:none}.use-card{background-color:rgb(var(--kv-background-card),1);box-shadow:0 0 .8rem #0000001a;border:1px solid rgb(var(--kv-color-system),.1);border-radius:.5rem}::ng-deep .card-container{margin:0rem .5rem;background-color:rgb(var(--kv-background-system),1);overflow-x:hidden}::ng-deep .card-container .p-card-body{padding:.5rem .5rem 0;margin:0;height:100%}::ng-deep .card-container .p-card-content{margin:0;padding:0;height:100%}::ng-deep .card-container::-webkit-scrollbar{width:6px}::ng-deep .card-container::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .card-container::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .card-container:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .card-container::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.side-menu-item{transition:all .2s ease-in-out;cursor:pointer;border-radius:.5rem;padding-left:.5rem;padding-right:.5rem}.side-menu-item:hover{background-color:rgb(var(--kv-color-system),.25);color:rgb(var(--kv-color-system),1)}.side-menu-item label{width:100%;cursor:pointer}.side-menu-item-system{transition:all .2s ease-in-out;cursor:pointer;border-radius:.5rem;padding-left:.5rem;padding-right:.5rem}.side-menu-item-system:hover{background-color:rgb(var(--kv-color-system),.08);color:rgb(var(--kv-color-system),1)}.side-menu-item-system label{width:100%;cursor:pointer}::ng-deep .p-divider{margin:0;padding:0;margin-top:.5rem;margin-bottom:.5rem}::ng-deep .p-overlaypanel-content{padding:0}.menu-parent{display:inline-block;width:100%}.menu-childs{position:absolute;left:-500px;min-width:17rem;max-width:50rem;overflow:hidden;padding:.5rem;background:rgb(var(--kv-background-card),1);border:1px solid rgb(var(--kv-color-system),.1);border-radius:.5rem;z-index:9999;box-shadow:0 0 .8rem #0000001a;gap:0}.menu-childs p{color:rgb(var(--kv-color-system),1)!important;opacity:.7}.menu-childs .menu-childs-content{max-height:25rem;overflow:auto}.menu-childs .menu-childs-content::-webkit-scrollbar{width:8px}.menu-childs .menu-childs-content::-webkit-scrollbar:hover{background-color:#dededebf}.menu-childs .menu-childs-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}.menu-childs .menu-childs-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}.menu-childs .menu-childs-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-breadcrumb .p-breadcrumb-list span{color:rgba(var(--kv-color-text),.75)!important;font-size:.75rem}::ng-deep .p-breadcrumb .p-breadcrumb-list li.p-menuitem-separator{color:rgba(var(--kv-color-text),.7)!important;margin:0;margin-left:.1rem;margin-right:.1rem}::ng-deep .p-breadcrumb .p-breadcrumb-list li.p-menuitem-separator svg{height:.5rem}.troca-empresa-container{font-size:.75rem;opacity:.8;border:1px solid #c1cfe1;color:#0a3a78;background-color:rgb(var(--kv-color-system),.05)}.troca-empresa-container:hover{opacity:1;border:1px solid rgb(var(--kv-color-system),1)}.menus-container label{font-size:.875rem}.meus-sistemas{background-color:rgb(var(--kv-color-system),.05)}.button-icon{color:rgb(var(--kv-color-system),.75)}.button-icon:hover{color:rgb(var(--kv-color-system),.9);cursor:pointer}.button-icon:active{color:rgb(var(--kv-color-system),1)}.trilha-icon{width:3.5rem;height:3.5rem;background-color:rgb(var(--kv-color-system),.2);color:rgb(var(--kv-color-system),1)}\n"] }]
|
|
300
353
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.FormBuilder }, { type: i2.Router }, { type: i2.ActivatedRoute }], propDecorators: { apps: [{
|
|
301
354
|
type: Input
|
|
302
355
|
}], actions: [{
|
|
@@ -343,6 +396,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
|
|
|
343
396
|
type: Input
|
|
344
397
|
}], useSelectionApps: [{
|
|
345
398
|
type: Input
|
|
399
|
+
}], showTrilhaConhecimento: [{
|
|
400
|
+
type: Input
|
|
346
401
|
}], accessKeePassEmit: [{
|
|
347
402
|
type: Output
|
|
348
403
|
}], changeEmpresaEmit: [{
|
|
@@ -357,6 +412,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
|
|
|
357
412
|
type: Output
|
|
358
413
|
}], navigateToDefaultRouteEmit: [{
|
|
359
414
|
type: Output
|
|
415
|
+
}], downloadDocEmit: [{
|
|
416
|
+
type: Output
|
|
417
|
+
}], showVideoDocEmit: [{
|
|
418
|
+
type: Output
|
|
360
419
|
}], meusDadosPanel: [{
|
|
361
420
|
type: ViewChild,
|
|
362
421
|
args: ['meusDadosPanel']
|
|
@@ -364,4 +423,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
|
|
|
364
423
|
type: HostListener,
|
|
365
424
|
args: ['window:resize', ['$event']]
|
|
366
425
|
}] } });
|
|
367
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtbGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWxheW91dC9sYXlvdXQva3YtbGF5b3V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWxheW91dC9sYXlvdXQva3YtbGF5b3V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFFTCxTQUFTLEVBR1QsTUFBTSxFQUNOLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLEtBQUssRUFDTCxLQUFLLEVBR0wsTUFBTSxFQUNOLE1BQU0sRUFHTixTQUFTLEdBRVYsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtQ3ZCLE1BQU0sT0FBTyxpQkFBaUI7SUF3RzVCLFlBQ1UsR0FBc0IsRUFDdEIsRUFBZSxFQUNiLE1BQWMsRUFDZCxjQUE4QjtRQUhoQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQTNHakMsU0FBSSxHQVVQLEVBQUUsQ0FBQztRQUVBLFlBQU8sR0FBMEQsRUFBRSxDQUFDO1FBRXBFLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFFeEI7Ozs7Ozs7Ozs7Ozs7OztXQWVHO1FBQ0gsb0JBQWUsR0FBRyxLQUFLLENBQW1FLEVBQUUsQ0FBQyxDQUFDO1FBRTlGLG1CQUFjLEdBQW9CO1lBQ2hDLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxnQkFBZ0Is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QUFTO3VCQUFDLGdCQUFnQjtnQkFnTHBCLGNBQWM7c0JBRHBCLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBjb21wdXRlZCxcclxuICBjb250ZW50Q2hpbGRyZW4sXHJcbiAgZWZmZWN0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgaW5wdXQsXHJcbiAgSW5wdXQsXHJcbiAgbW9kZWwsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgc2lnbmFsLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFdyaXRhYmxlU2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgT3ZlcmxheVBhbmVsIH0gZnJvbSAncHJpbWVuZy9vdmVybGF5cGFuZWwnO1xyXG5pbXBvcnQgeyBTaWRlYmFyIH0gZnJvbSAncHJpbWVuZy9zaWRlYmFyJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtcclxuICBhbmltYXRlLFxyXG4gIHN0YXRlLFxyXG4gIHN0eWxlLFxyXG4gIHRyYW5zaXRpb24sXHJcbiAgdHJpZ2dlcixcclxufSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgVG9wQWN0aW9uc01vZGVsIH0gZnJvbSAnLi4vdG9wLWljb25zL3RvcC1pY29ucy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBsaW5rIH0gZnJvbSAnZDMnO1xyXG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTGF5b3V0TWVudUl0ZW0ge1xyXG4gIGlkbWVudTogbnVtYmVyO1xyXG4gIGlkbWVudXBhaTogbnVtYmVyIHwgbnVsbDtcclxuICBpZGFwbGljYXRpdm86IG51bWJlcjtcclxuICBkZXNjcmljYW9tZW51OiBzdHJpbmc7XHJcbiAgbGluazogc3RyaW5nIHwgbnVsbDtcclxuICBpY29uZTogc3RyaW5nIHwgbnVsbDtcclxuICBpbmRwdWJsaWNhZG86IGJvb2xlYW47XHJcbiAgaW5kbWVudXBhaTogYm9vbGVhbjtcclxuICBsaXN0YWlkdmlzYW9tZW51OiBudW1iZXJbXTtcclxuICBiZ0NvbG9yPzogc3RyaW5nO1xyXG4gIHRleHRDb2xvcj86IHN0cmluZztcclxufSBcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAna3YtbGF5b3V0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4va3YtbGF5b3V0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9rdi1sYXlvdXQuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEt2TGF5b3V0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIGFwcHM6IHtcclxuICAgIGlkYXBsaWNhdGl2bzogbnVtYmVyO1xyXG4gICAgaWRzaXN0ZW1hOiBudW1iZXI7XHJcbiAgICBub21lYXBsaWNhdGl2bzogc3RyaW5nO1xyXG4gICAgZGVzY3JpY2FvYXBsaWNhdGl2bzogc3RyaW5nO1xyXG4gICAgcm90YXBhZHJhbzogc3RyaW5nO1xyXG4gICAgaW5kcHVibGljYWRvOiBib29sZWFuO1xyXG4gICAgaW5kcHVibGljYWNhb2dyYWRhdGl2YTogYm9vbGVhbjtcclxuICAgIGluZGV4aWdlZW1wcmVzYWVudHJhZGE6IGJvb2xlYW47XHJcbiAgICB1cmxpY29uZT86IHN0cmluZztcclxuICB9W10gPSBbXTtcclxuXHJcbiAgQElucHV0KCkgYWN0aW9uczogeyBpY29uOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmc7IGFjdGlvbjogKCkgPT4gdm9pZCB9W10gPSBbXTtcclxuXHJcbiAgQElucHV0KCkgdXNlQ2FyZCA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljYSBxdWFpcyBtZW51cyBzw6NvIHZpc8OtdmVpcyBubyB0b3BvLlxyXG4gICAqIFxyXG4gICAqIEB0eXBlIHtBcnJheTx7aWQ6IG51bWJlciwgbnVtTm90aWZpY2F0aW9ucz86IG51bWJlciwgYWN0aW9uPzogKGU6IGFueSkgPT4gdm9pZH0+fVxyXG4gICAqIFxyXG4gICAqIE9ww6fDtWVzIGRpc3BvbsOtdmVpczpcclxuICAgKiAtIDIgLSBLaWFyYSBcclxuICAgKiAtIDMgLSBOb3RpZmljYcOnw7Vlc1xyXG4gICAqIC0gNCAtIFRhcmVmYXNcclxuICAgKiAtIDUgLSBDb211bmljYWRvclxyXG4gICAqIFxyXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpZCAtIGlkZW50aWZpY2Fkb3IgZG8gbWVudS5cclxuICAgKiBAcHJvcGVydHkge251bWJlcn0gW251bU5vdGlmaWNhdGlvbnNdIC0gTsO6bWVybyBkZSBub3RpZmljYcOnw7VlcyAob3BjaW9uYWwpLlxyXG4gICAqIEBwcm9wZXJ0eSB7KGU6IGFueSkgPT4gdm9pZH0gW2FjdGlvbl0gLSBBw6fDo28gZG8gY2xpcXVlLCBxdWUgcmV0b3JuYSBvIGV2ZW50byBkbyBjbGlxdWUgKG9wdGlvbmFsKS5cclxuICAgKiBcclxuICAgKi9cclxuICB0b3BNZW51c1Zpc2libGUgPSBpbnB1dDx7aWQ6bnVtYmVyLCBudW1Ob3RpZmljYXRpb25zPzpudW1iZXIsIGFjdGlvbj86KGU6YW55KSA9PiB2b2lkfVtdPihbXSk7XHJcblxyXG4gIHRvcE1lbnVPcHRpb25zOiBUb3BBY3Rpb25zTW9kZWxbXT1bXHJcbiAgICB7aWQ6IDEsIHZpc2libGU6IHRydWUsIGljb246ICdwZXJzb24nLCB0b29sdGlwOiAnTWV1cyBEYWRvcycsIG51bU5vdGlmaWNhdGlvbnM6IDAsIGFjdGlvbjogKGU6YW55KSA9PiB7dGhpcy5tZXVzRGFkb3NQYW5lbC50b2dnbGUoZSl9fSxcclxuICAgIHtpZDogMiwgdmlzaWJsZTogZmFsc2UsIGljb246ICdraWFyYScsIHRvb2x0aXA6ICdLaWFyYScsIG51bU5vdGlmaWNhdGlvbnM6IDAsIGFjdGlvbjogKCkgPT4ge319LFxyXG4gICAge2lkOiAzLCB2aXNpYmxlOiBmYWxzZSwgaWNvbjogJ25vdGlmaWNhdGlvbnMnLCB0b29sdGlwOiAnTm90aWZpY2HDp8O1ZXMnLCBudW1Ob3RpZmljYXRpb25zOiAwLCBhY3Rpb246ICgpID0+IHt9fSxcclxuICAgIHtpZDogNCwgdmlzaWJsZTogZmFsc2UsIGljb246ICdjaGVja2xpc3QnLCB0b29sdGlwOiAnVGFyZWZhcycsIG51bU5vdGlmaWNhdGlvbnM6IDAsIGFjdGlvbjogKCkgPT4ge319LFxyXG4gICAge2lkOiA1LCB2aXNpYmxlOiBmYWxzZSwgaWNvbjogJ2NoYXQnLCB0b29sdGlwOiAnQ29tdW5pY2Fkb3InLCBudW1Ob3RpZmljYXRpb25zOiAwLCBhY3Rpb246ICgpID0+IHt9fSxcclxuICBdO1xyXG4gIFxyXG4gIHByb2ZpbGVJbWFnZSA9IGlucHV0PHN0cmluZz4oJycpO1xyXG5cclxuICBASW5wdXQoKSBicmVhZENydW1iSXRlbXM6IHtcclxuICAgIGxhYmVsOiBzdHJpbmc7XHJcbiAgICByb3V0ZXJMaW5rOiBzdHJpbmc7XHJcbiAgfVtdID0gW107XHJcblxyXG4gIEBJbnB1dCgpIG1hc3RlcnM6IHtcclxuICAgIGlkbWFzdGVyOiBudW1iZXI7XHJcbiAgICBjcGZjbnBqOiBzdHJpbmc7XHJcbiAgICBub21lOiBzdHJpbmc7XHJcbiAgICBpZG1hc3Rlcm5vbWU6IHN0cmluZztcclxuICB9W10gPSBbXTtcclxuXHJcbiAgbWVudXMgPSBtb2RlbDxMYXlvdXRNZW51SXRlbVtdPihbXSk7XHJcbiAgbWVudVZpc2l2ZWwgPSBzaWduYWw8bnVtYmVyfHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICBzaG93TWVudVNpc3RlbWFzID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgZXhwYW5kTWVudSA9IG1vZGVsPGJvb2xlYW4+KHRydWUpO1xyXG5cclxuICBASW5wdXQoKSBsb2dvTWVudUV4cGFuZCE6IGFueTtcclxuICBASW5wdXQoKSBsb2dvTWVudUhpZGUhOiBhbnk7XHJcblxyXG4gIEBJbnB1dCgpIHNlbGVjdGVkQXBwITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkRW1wcmVzYSE6IGFueTtcclxuICBASW5wdXQoKSBzZWxlY3RlZE1hc3RlciE6IG51bWJlcjtcclxuXHJcbiAgQElucHV0KCkgc2hvd0J1dHRvbkFwcHM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dCdXR0b25Vc2VyOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93RXhwYW5kTWVudTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0Ryb3Bkb3duTGljZW5jYTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd01lbnU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dUcm9jYUVtcHJlc2E6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93QnJlYWRjcnVtYjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgdXNlck5hbWU6IHN0cmluZyA9ICdVc3XDoXJpbyc7XHJcbiAgQElucHV0KCkgdXNlckVtYWlsOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBtYXN0ZXJOYW1lITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGVtcHJlc2FOYW1lITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGlkc0FwbGljYXRpdm9zTWVudUhpZGU6IG51bWJlcltdID0gW107XHJcbiAgQElucHV0KCkgdXNlU2VsZWN0aW9uQXBwcyA9IHRydWU7XHJcblxyXG4gIEBPdXRwdXQoKSBhY2Nlc3NLZWVQYXNzRW1pdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNoYW5nZUVtcHJlc2FFbWl0OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNoYW5nZUxpY2Vuc2VFbWl0OiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZXhwYW5kTWVudUVtaXQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgbG9nb3V0RW1pdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdEFwcEVtaXQ6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBuYXZpZ2F0ZVRvRGVmYXVsdFJvdXRlRW1pdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ21ldXNEYWRvc1BhbmVsJykgbWV1c0RhZG9zUGFuZWwhOiBPdmVybGF5UGFuZWw7XHJcblxyXG4gIC8vIHRvcE1lbnVBY3Rpb25zID0gY29udGVudENoaWxkcmVuPFRlbXBsYXRlUmVmPGFueT4+KCd0b3BNZW51QWN0aW9uJyk7XHJcblxyXG4gIGZvcm1Hcm91cCE6IEZvcm1Hcm91cDtcclxuICBoZWlnaHRDYXJkITogbnVtYmVyO1xyXG4gIG1vdXNlT3ZlckZpbGhvSW5kZXg6IGFueTtcclxuICBtb3VzZU92ZXJJbmRleDogYW55O1xyXG4gIHdpZHRoQ2FyZCE6IG51bWJlcjtcclxuXHJcbiAgd2lkdGhQYWdlID0gc2lnbmFsPG51bWJlcj4oMCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcm90ZWN0ZWQgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBpZG1hc3RlcjogW3RoaXMuc2VsZWN0ZWRNYXN0ZXIsIFtdXSxcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIHRoaXMucHJvY2Vzc2FyTWVudXMoKTtcclxuICAgIHRoaXMuYWRqdXN0V2lkdGhDYXJkKCk7XHJcbiAgICB0aGlzLnZlcmlmeU1lbnVCZWhhdmlvcigpO1xyXG4gICAgdGhpcy5leHBhbmRNZW51RXZlbnQoKTtcclxuICB9XHJcblxyXG4gIHRvcE1lbnVPcHRpb25zUmV2ZXJzZWQgPSBmYWxzZTtcclxuXHJcbiAgcHJvY2Vzc2FyX21lbnVzID0gZWZmZWN0KCgpID0+IHtcclxuICAgIGlmKHRoaXMucHJvZmlsZUltYWdlKCkpe1xyXG4gICAgICB0aGlzLnRvcE1lbnVPcHRpb25zWzBdLmltZyA9IHRoaXMucHJvZmlsZUltYWdlKCk7XHJcbiAgICB9XHJcbiAgICAvL2ludmVydGVyIG8gdG9wTWVudU9wdGlvbnNcclxuICAgIGlmICghdGhpcy50b3BNZW51T3B0aW9uc1JldmVyc2VkKSB7XHJcbiAgICAgIHRoaXMudG9wTWVudU9wdGlvbnMucmV2ZXJzZSgpO1xyXG4gICAgICB0aGlzLnRvcE1lbnVPcHRpb25zUmV2ZXJzZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgdGhpcy50b3BNZW51c1Zpc2libGUoKS5mb3JFYWNoKChpdGVtOmFueSkgPT4ge1xyXG4gICAgICBsZXQgbWVudSA9IHRoaXMudG9wTWVudU9wdGlvbnMuZmluZCgoeCkgPT4geC5pZCA9PT0gaXRlbS5pZCk7XHJcbiAgICAgIGlmKG1lbnUpe1xyXG4gICAgICAgIG1lbnUudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgaWYoaXRlbS5hY3Rpb24pe1xyXG4gICAgICAgICAgbWVudS5hY3Rpb24gPSBpdGVtLmFjdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoaXRlbS5udW1Ob3RpZmljYXRpb25zKXtcclxuICAgICAgICAgIG1lbnUubnVtTm90aWZpY2F0aW9ucyA9IGl0ZW0ubnVtTm90aWZpY2F0aW9ucztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH0pO1xyXG5cclxuICAvLyBwcm9jZXNzYXJNZW51cygpIHtcclxuICAvLyB9XHJcblxyXG4gIHB1YmxpYyBhY2Nlc3NLZWVQYXNzKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuYWNjZXNzS2VlUGFzc0VtaXQuZW1pdChldmVudCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRqdXN0SGVpZ2h0Q2FyZCgpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMud2lkdGhDYXJkID4gNDAwKSB7XHJcbiAgICAgIGlmICh0aGlzLndpZHRoUGFnZSgpIDwgOTkyICYmIHRoaXMuc2hvd0xpY2VuY2FzKCkpIHJldHVybiAxNDU7XHJcblxyXG4gICAgICBpZiAodGhpcy5icmVhZENydW1iSXRlbXMubGVuZ3RoID4gMCkgcmV0dXJuIDk1O1xyXG4gICAgICBlbHNlIHJldHVybiA4NTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gMTI1O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGp1c3RXaWR0aENhcmQoKSB7XHJcbiAgICB0aGlzLndpZHRoUGFnZS5zZXQod2luZG93LmlubmVyV2lkdGgpO1xyXG5cclxuICAgIHRoaXMuaGVpZ2h0Q2FyZCA9IE51bWJlcihcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhZ2UtY29udGVudCcpPy5vZmZzZXRIZWlnaHRcclxuICAgICk7XHJcbiAgICBpZiAodGhpcy5zaG93TWVudSlcclxuICAgICAgdGhpcy53aWR0aENhcmQgPVxyXG4gICAgICAgIE51bWJlcih3aW5kb3cuaW5uZXJXaWR0aCkgLSAodGhpcy5leHBhbmRNZW51KCkgPyAzMzMgOiA5Myk7XHJcbiAgICBlbHNlIHRoaXMud2lkdGhDYXJkID0gTnVtYmVyKHdpbmRvdy5pbm5lcldpZHRoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYWxsUm91dGUocm90YTogYW55LCBleHBhbmQ/OiBib29sZWFuKSB7XHJcbiAgICBpZiAoIWV4cGFuZCAmJiAhdGhpcy5leHBhbmRNZW51KCkgJiYgdGhpcy5zaG93RXhwYW5kTWVudSlcclxuICAgICAgdGhpcy5leHBhbmRNZW51LnVwZGF0ZSgoY3VycmVudFZhbHVlOiBib29sZWFuKSA9PiAhY3VycmVudFZhbHVlKTtcclxuXHJcbiAgICBpZiAodGhpcy53aWR0aFBhZ2UoKSAhPSAwICYmIHRoaXMud2lkdGhQYWdlKCkgPCA4MDAgJiYgdGhpcy5leHBhbmRNZW51KCkgJiYgdGhpcy5zaG93RXhwYW5kTWVudSlcclxuICAgICAgdGhpcy5leHBhbmRNZW51LnNldChmYWxzZSk7XHJcblxyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChyb3RhKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjaGFuZ2VFbXByZXNhKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuY2hhbmdlRW1wcmVzYUVtaXQuZW1pdChldmVudCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2hhbmdlTGljZW5zZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmNoYW5nZUxpY2Vuc2VFbWl0LmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2ZXJpZnlNZW51QmVoYXZpb3IoKSB7XHJcbiAgICBpZiAodGhpcy53aWR0aFBhZ2UoKSA8IDgwMClcclxuICAgICAgdGhpcy5leHBhbmRNZW51LnNldChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cGFuZE1lbnVFdmVudCgpIHtcclxuICAgIHRoaXMuZXhwYW5kTWVudUVtaXQuZW1pdCh0aGlzLmV4cGFuZE1lbnUoKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9nb3V0KGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMubG9nb3V0RW1pdC5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWVudXNQZXJBcHAoKSB7XHJcbiAgICBpZiAodGhpcy5yb3V0ZXIudXJsICYmIHRoaXMubWVudXMoKSAmJiB0aGlzLm1lbnVzKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICBpZiAodGhpcy5yb3V0ZXIudXJsID09PSAnLycpIHtcclxuICAgICAgICAvLyB0aGlzLm5hdmlnYXRlVG9GaXJzdE1lbnUoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBtZW51U2VsZWNpb25hZG8gPSB0aGlzLm1lbnVzKCkuZmluZChcclxuICAgICAgICAgIChtZW51OiBhbnkpID0+XHJcbiAgICAgICAgICAgIG1lbnUubGluayAmJiBtZW51LmxpbmsuaW5jbHVkZXModGhpcy5yb3V0ZXIudXJsLnNsaWNlKDEpKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKG1lbnVTZWxlY2lvbmFkbykge1xyXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvTWVudShtZW51U2VsZWNpb25hZG8pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG5hbWVFbXByZXNhKG5vbWVMaWNlbmNhOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKG5vbWVMaWNlbmNhKSB7XHJcbiAgICAgIGlmIChub21lTGljZW5jYS5sZW5ndGggPiAyMykgcmV0dXJuIG5vbWVMaWNlbmNhLnN1YnN0cmluZygwLCAyMykgKyAnLi4uJztcclxuICAgICAgZWxzZSByZXR1cm4gbm9tZUxpY2VuY2E7XHJcbiAgICB9IGVsc2UgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBuYXZpZ2F0ZVRvRmlyc3RNZW51KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZmlyc3RNZW51ID0gdGhpcy5tZW51cygpWzBdO1xyXG4gICAgaWYgKGZpcnN0TWVudS5pbmRtZW51cGFpKSB7XHJcbiAgICAgIGNvbnN0IGZpbGhvcyA9IHRoaXMucmV0dXJuTWVudUNoaWxkKGZpcnN0TWVudS5pZG1lbnUpO1xyXG4gICAgICBpZiAoZmlsaG9zKSB7XHJcbiAgICAgICAgdGhpcy5jYWxsUm91dGUoZmlsaG9zWzBdLmxpbmssIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNhbGxSb3V0ZShmaXJzdE1lbnUubGluaywgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5hdmlnYXRlVG9NZW51KG1lbnU6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKG1lbnUubWVudXBhaSkge1xyXG4gICAgICBjb25zdCBmaWxob3MgPSB0aGlzLnJldHVybk1lbnVDaGlsZChtZW51LmlkbWVudSk7XHJcbiAgICAgIGlmIChmaWxob3MpIHtcclxuICAgICAgICB0aGlzLmNhbGxSb3V0ZShmaWxob3NbMF0ubGluaywgdHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2FsbFJvdXRlKG1lbnUubGluaywgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtZW51U2VsZWNpb25hZG8gPSBzaWduYWw8YW55PihudWxsKTtcclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgY29uc3QgbGF0ZXN0UmVxdWVzdCA9IGNoYW5nZXNbJ21lbnVzJ107XHJcbiAgICBpZiAobGF0ZXN0UmVxdWVzdD8uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIHRoaXMubWVudXNQZXJBcHAoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjaW9uYXJNZW51KCk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcclxuICBwdWJsaWMgb25XaW5kb3dSZXNpemUoKSB7XHJcbiAgICB0aGlzLmFkanVzdFdpZHRoQ2FyZCgpO1xyXG4gICAgLy8gdGhpcy52ZXJpZnlNZW51QmVoYXZpb3IoKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGlzU2VsZWN0ZWRNZW51UGFpKG1lbnU6IGFueSkge1xyXG4gICAgaWYgKCF0aGlzLmV4cGFuZE1lbnUoKSAmJiBtZW51LmluZG1lbnVwYWkpXHJcbiAgICAgIHJldHVybiBtZW51LmlkbWVudSA9PT0gdGhpcy5tZW51U2VsZWNpb25hZG8oKT8uaWRtZW51cGFpO1xyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbGVjaW9uYXJNZW51KCkge1xyXG4gICAgY29uc3QgdXJsID0gbmV3IFVSTCh0aGlzLnJvdXRlci51cmwsIHdpbmRvdy5vcmlnaW4pO1xyXG5cclxuICAgIGNvbnN0IGN1cnJlbnRQYXRoID0gdXJsLnBhdGhuYW1lO1xyXG4gICAgY29uc3QgcHVyZVBhdGggPSBjdXJyZW50UGF0aC5tYXRjaCgvXlteO10qL2kpO1xyXG5cclxuICAgIGNvbnN0IHBhdGhzID0gcHVyZVBhdGghWzBdO1xyXG5cclxuICAgIHRoaXMubWVudXMuc2V0KFxyXG4gICAgICB0aGlzLm1lbnVzKCkubWFwKChtZW51KSA9PiB7XHJcbiAgICAgICAgaWYgKG1lbnUubGluaykge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4ubWVudSxcclxuICAgICAgICAgICAgYmdDb2xvcjogcGF0aHMuaW5jbHVkZXMobWVudS5saW5rISkgPyAncmdiKDQxLCAxODUsIDQ1KScgOiAnJyxcclxuICAgICAgICAgICAgdGV4dENvbG9yOiBwYXRocy5pbmNsdWRlcyhtZW51LmxpbmshKSA/ICd0ZXh0LXdoaXRlJyA6ICcnLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1lbnU7XHJcbiAgICAgIH0pXHJcbiAgICApXHJcblxyXG4gICAgY29uc3QgbWVudSA9IHRoaXMubWVudXMoKS5maW5kKChtZW51OiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIG1lbnUubGluayAmJiBwYXRocy5pbmNsdWRlcyhtZW51LmxpbmshKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMubWVudVNlbGVjaW9uYWRvLnNldChtZW51KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXR1cm5NZW51Q2hpbGQoaWRtZW51OiBudW1iZXIpIHtcclxuICAgIHJldHVybiB0aGlzLm1lbnVzKCkuZmlsdGVyKCh4OiBhbnkpID0+IHguaWRtZW51cGFpID09IGlkbWVudSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIHNlbGVjdEFwcChpZGFwbGljYXRpdm86IG51bWJlcikge1xyXG4gICAgdGhpcy5zZWxlY3RBcHBFbWl0LmVtaXQoaWRhcGxpY2F0aXZvKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzaG93TGljZW5jYXMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zaG93RHJvcGRvd25MaWNlbmNhICYmICh0aGlzLm1hc3RlcnMgfHwgW10pLmxlbmd0aCA+IDE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG9nZ2xlTWVudSgpIHtcclxuICAgIHRoaXMuZXhwYW5kTWVudS51cGRhdGUoKGN1cnJlbnRWYWx1ZTogYm9vbGVhbikgPT4gIWN1cnJlbnRWYWx1ZSk7XHJcbiAgICB0aGlzLmV4cGFuZE1lbnVFdmVudCgpO1xyXG4gIH1cclxuXHJcbiAgbmF2aWdhdGVUb0RlZmF1bHRSb3V0ZSgpIHtcclxuICAgIGlmICh0aGlzLndpZHRoUGFnZSgpIDwgODAwICYmIHRoaXMuZXhwYW5kTWVudSgpKVxyXG4gICAgICB0aGlzLmV4cGFuZE1lbnUuc2V0KGZhbHNlKTtcclxuXHJcbiAgICB0aGlzLm5hdmlnYXRlVG9EZWZhdWx0Um91dGVFbWl0LmVtaXQoKTtcclxuICB9XHJcblxyXG4gIGdldCBleGliaXJOb21lcygpIHtcclxuICAgIHJldHVybiAhdGhpcy5zaG93TGljZW5jYXMoKSAmJiAodGhpcy5tYXN0ZXJOYW1lIHx8IHRoaXMuZW1wcmVzYU5hbWUpO1xyXG4gIH1cclxuXHJcbiAgZXhpYmlyTWVudUNoaWxkKGV2ZW50OmFueSwgaW5kZXg6bnVtYmVyKXtcclxuICAgIHRoaXMubWVudVZpc2l2ZWwuc2V0KGluZGV4KTtcclxuICAgICAgbGV0IG1lbnVQYXJlbnQgO1xyXG4gICAgICBsZXQgbWVudUNoaWxkIDtcclxuICAgICAgaWYoaW5kZXggPT09IC0xKXtcclxuICAgICAgICBtZW51UGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYG1lbnUtc2lzdGVtYXMtcGFyZW50YCk7XHJcbiAgICAgICAgbWVudUNoaWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYG1lbnUtc2lzdGVtYXMtY2hpbGRgKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNle1xyXG4gICAgICAgIG1lbnVQYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgbWVudS1wYXJlbnQtJHtpbmRleH1gKTtcclxuICAgICAgICBtZW51Q2hpbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgbWVudS1jaGlsZC0ke2luZGV4fWApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAobWVudVBhcmVudCkge1xyXG4gICAgICAgIGNvbnN0IHJlY3RfcGFyZW50ID0gbWVudVBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICBsZXQgeCA9IHJlY3RfcGFyZW50LnJpZ2h0IC0gMTA7XHJcbiAgICAgICAgbGV0IHkgPSByZWN0X3BhcmVudC50b3AgLTU7XHJcbiAgXHJcbiAgICAgICAgaWYgKG1lbnVDaGlsZCkge1xyXG4gICAgICAgICAgY29uc3QgcmVjdF9jaGlsZCA9IG1lbnVDaGlsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgIGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xyXG4gIFxyXG4gICAgICAgICAgLy9WZXJpZmljYSBzZSBvIG1lbnUgZmlsaG8gdmFpIHV0cmFwYXNzYXIgbyBmaW5hbCBkbyB2aWV3cG9ydCBwcmEgYmFpeG9cclxuICAgICAgICAgIGlmIChyZWN0X3BhcmVudC5ib3R0b20gKyByZWN0X2NoaWxkLmhlaWdodCA+IHZpZXdwb3J0SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgIHkgPSByZWN0X3BhcmVudC5ib3R0b20gLSByZWN0X2NoaWxkLmhlaWdodCAtIDEwO1xyXG4gICAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgICAgLy8gVmVyaWZpY2Egc2UgbyBtZW51IHBhaSBlc3TDoSBtdWl0byBlbSBjaW1hXHJcbiAgICAgICAgICBpZiAocmVjdF9wYXJlbnQudG9wIDw9IDApIHtcclxuICAgICAgICAgICAgeSA9IHJlY3RfcGFyZW50LmJvdHRvbSArIDU7XHJcbiAgICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgICBtZW51Q2hpbGQuc3R5bGUudG9wID0gYCR7eX1weGA7XHJcbiAgICAgICAgICBtZW51Q2hpbGQuc3R5bGUubGVmdCA9IGAke3h9cHhgO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZnVsbC1jb250YWluZXJcIj5cclxuICBAaWYoc2hvd01lbnUpIHtcclxuICA8cC1zaWRlYmFyXHJcbiAgICAjc2lkZWJhclJlZlxyXG4gICAgW3Zpc2libGVdPVwidHJ1ZVwiXHJcbiAgICBbc2hvd0Nsb3NlSWNvbl09XCJmYWxzZVwiXHJcbiAgICBbbW9kYWxdPVwiZmFsc2VcIlxyXG4gICAgW3N0eWxlXT1cInsgd2lkdGg6IGV4cGFuZE1lbnUoKSA/ICcxN3JlbScgOiAnMy42NXJlbScgfVwiXHJcbiAgICBzdHlsZUNsYXNzPVwidHJhbnNpdGlvbi1hbGxcIlxyXG4gID5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkbGVzc1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaC1mdWxsIGZsZXggZmxleC1jb2x1bW4gb3ZlcmZsb3ctaGlkZGVuIHAtMlwiPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiZmxleC1ub25lIGZsZXggZmxleC1jb2x1bW4gZ2FwLTMganVzdGlmeS1jb250ZW50LWJldHdlZW4gZmxleC1zaHJpbmstMCBvdmVyZmxvdy1oaWRkZW5cIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDwhLS0gTE9HTyAtLT5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IHt7XHJcbiAgICAgICAgICAgICAgZXhwYW5kTWVudSgpID8gJ2ZsZXgtcm93JyA6ICdmbGV4LWNvbHVtbidcclxuICAgICAgICAgICAgfX0gYWxpZ24taXRlbXMtY2VudGVyIHt7XHJcbiAgICAgICAgICAgICAgZXhwYW5kTWVudSgpXHJcbiAgICAgICAgICAgICAgICA/ICdqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbidcclxuICAgICAgICAgICAgICAgIDogJ2p1c3RpZnktY29udGVudC1jZW50ZXInXHJcbiAgICAgICAgICAgIH19IHAtMlwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwhLS0gTG9nbyBwYXJhIG8gbWVudSBleHBhbmRpZG8gLS0+XHJcbiAgICAgICAgICAgIEBpZihleHBhbmRNZW51KCkgJiYgbG9nb01lbnVFeHBhbmQpe1xyXG4gICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgYWx0PVwiQ2FyZFwiXHJcbiAgICAgICAgICAgICAgW3NyY109XCJsb2dvTWVudUV4cGFuZFwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodF09XCInMi40cmVtJ1wiXHJcbiAgICAgICAgICAgICAgd2lkdGg9XCJhdXRvXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIHAtMFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm5hdmlnYXRlVG9EZWZhdWx0Um91dGUoKVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIDwhLS0gTG9nbyBwYXJhIG8gbWVudSBtaW5pbWl6YWRvLS0+XHJcbiAgICAgICAgICAgIEBpZighZXhwYW5kTWVudSgpICYmIGxvZ29NZW51SGlkZSl7XHJcbiAgICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgICBhbHQ9XCJDYXJkXCJcclxuICAgICAgICAgICAgICBbc3JjXT1cImxvZ29NZW51SGlkZVwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodF09XCInMi40cmVtJ1wiXHJcbiAgICAgICAgICAgICAgd2lkdGg9XCJhdXRvXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIHAtMVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm5hdmlnYXRlVG9EZWZhdWx0Um91dGUoKVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIDwhLS0gVG9nZ2xlIG1lbnUgLS0+XHJcbiAgICAgICAgICAgIEBpZihzaG93RXhwYW5kTWVudSl7XHJcbiAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIHNpZGUtbWVudS1pdGVtXCIgKGNsaWNrKT1cImV4cGFuZE1lbnUuc2V0KCFleHBhbmRNZW51KCkpXCI+bWVudTwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIEBpZihzaG93VHJvY2FFbXByZXNhKXtcclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQte3tcclxuICAgICAgICAgICAgICBleHBhbmRNZW51KCkgPyAnYmV0d2VlbicgOiAnY2VudGVyJ1xyXG4gICAgICAgICAgICB9fSBnYXAtMiBzaWRlLW1lbnUtaXRlbSB0cm9jYS1lbXByZXNhLWNvbnRhaW5lciBtYi0zIHB5LTJcIlxyXG4gICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ1Ryb2NhciBkZSBlbXByZXNhJ1wiXHJcbiAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ3JpZ2h0J1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VFbXByZXNhKCRldmVudClcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBAaWYoZXhwYW5kTWVudSgpICYmIHNlbGVjdGVkRW1wcmVzYSl7XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gdy1mdWxsXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlRW1wcmVzYSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIEBpZih0aGlzLnNlbGVjdGVkRW1wcmVzYS5yYXphb3NvY2lhbCl7XHJcbiAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC14cyBmb250LXNlbWlib2xkIG1yLTIgY29sb3Itc3lzdGVtXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5mb250U3V6ZV09XCInLjVyZW0nXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyBuYW1lRW1wcmVzYSh0aGlzLnNlbGVjdGVkRW1wcmVzYS5yYXphb3NvY2lhbCkgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgfSBAaWYodGhpcy5zZWxlY3RlZEVtcHJlc2EuY3BmY25wail7XHJcbiAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC14cyBtdC0xIGNvbG9yLXN5c3RlbVwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFN1emVdPVwiJy41cmVtJ1wiXHJcbiAgICAgICAgICAgICAgICA+e3sgdGhpcy5zZWxlY3RlZEVtcHJlc2EuY3BmY25waiB8IGNwZkNucGogfX08L3NwYW5cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPnN3YXBfaG9yaXo8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIE1FTlVTIC0tPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiZmxleC0xIGxpc3Qtbm9uZSBtLTAgb3ZlcmZsb3cteS1hdXRvIG1heC1oLWZ1bGwgbWVudXMtY29udGFpbmVyXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8IS0tIG1lbnVzIC0tPlxyXG4gICAgICAgICAgQGZvciAobWVudSBvZiBtZW51cygpOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgIEBpZighaWRzQXBsaWNhdGl2b3NNZW51SGlkZS5pbmNsdWRlcyhtZW51LmlkYXBsaWNhdGl2bykpe1xyXG4gICAgICAgICAgPGxpPlxyXG4gICAgICAgICAgICA8IS0tIG1lbnUgcXVlIG7Do28gdGVtIGZpbGhvIC0tPlxyXG4gICAgICAgICAgICBAaWYoICFtZW51LmluZG1lbnVwYWkgJiYgKCFtZW51LmlkbWVudXBhaSB8fCBtZW51LmlkbWVudXBhaSA9PSAwKSl7XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC17e1xyXG4gICAgICAgICAgICAgICAgZXhwYW5kTWVudSgpID8gJ2JldHdlZW4nIDogJ2NlbnRlcidcclxuICAgICAgICAgICAgICB9fSBnYXAtMiBzaWRlLW1lbnUtaXRlbVwiXHJcbiAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLXRvcDogMC43NXJlbTsgcGFkZGluZy1ib3R0b206IDAuNzVyZW1cIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJjYWxsUm91dGUobWVudS5saW5rKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj57e1xyXG4gICAgICAgICAgICAgICAgbWVudS5pY29uZSB8fCBcImxlbnNfYmx1clwiXHJcbiAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgQGlmKGV4cGFuZE1lbnUoKSl7XHJcbiAgICAgICAgICAgICAgPGxhYmVsPnt7IG1lbnUuZGVzY3JpY2FvbWVudSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8IS0tIG1lbnUgY29tIGZpbGhvIC0tPlxyXG4gICAgICAgICAgICBAaWYobWVudS5pbmRtZW51cGFpKXtcclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwibWVudS1wYXJlbnRcIlxyXG4gICAgICAgICAgICAgIGlkPVwibWVudS1wYXJlbnQte3sgJGluZGV4IH19XCJcclxuICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJleGliaXJNZW51Q2hpbGQoJGV2ZW50LCAkaW5kZXgpXCJcclxuICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJtZW51VmlzaXZlbC5zZXQodW5kZWZpbmVkKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIiBmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQte3tcclxuICAgICAgICAgICAgICAgICAgZXhwYW5kTWVudSgpID8gJ2JldHdlZW4nIDogJ2NlbnRlcidcclxuICAgICAgICAgICAgICAgIH19IGdhcC0yIHNpZGUtbWVudS1pdGVtXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZy10b3A6IDAuNzVyZW07IHBhZGRpbmctYm90dG9tOiAwLjc1cmVtXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj57e1xyXG4gICAgICAgICAgICAgICAgICBtZW51Lmljb25lIHx8IFwibGVuc19ibHVyXCJcclxuICAgICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgQGlmKGV4cGFuZE1lbnUoKSl7XHJcbiAgICAgICAgICAgICAgICA8bGFiZWw+e3sgbWVudS5kZXNjcmljYW9tZW51IH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPmNoZXZyb25fcmlnaHQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWVudS1jaGlsZHNcIlxyXG4gICAgICAgICAgICAgICAgaWQ9XCJtZW51LWNoaWxkLXt7ICRpbmRleCB9fVwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUub3BhY2l0eV09XCJtZW51VmlzaXZlbCgpID09PSAkaW5kZXggPyAnMScgOiAnMCdcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLnBvaW50ZXJFdmVudHNdPVwiXHJcbiAgICAgICAgICAgICAgICAgIG1lbnVWaXNpdmVsKCkgPT09ICRpbmRleCA/ICdhdXRvJyA6ICdub25lJ1xyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwLTAgbS0wIGZvbnQtYm9sZCBwdC0yIHB4LTIgdGV4dC14c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IG1lbnUuZGVzY3JpY2FvbWVudSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxwLWRpdmlkZXJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLTAgbS0wXCJcclxuICAgICAgICAgICAgICAgICAgW3N0eWxlLm9wYWNpdHldPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJzb2xpZFwiXHJcbiAgICAgICAgICAgICAgICA+PC9wLWRpdmlkZXI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVudS1jaGlsZHMtY29udGVudCBwLTAgbS0wXCI+XHJcbiAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgcmV0dXJuTWVudUNoaWxkKG1lbnUuaWRtZW51KTsgdHJhY2sgJGluZGV4KSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzaWRlLW1lbnUtaXRlbSBweS0yIHB4LTIgdGV4dC1zbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbGxSb3V0ZShpdGVtLmxpbmspXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZGVzY3JpY2FvbWVudSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgfSB9XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIEBpZih1c2VTZWxlY3Rpb25BcHBzKSB7XHJcbiAgICAgICAgPCEtLSBBUFBTIEUgU0FJUiAtLT5cclxuICAgICAgICA8cC1kaXZpZGVyIGNsYXNzPVwicHgtMlwiIFtzdHlsZS5vcGFjaXR5XT1cIjFcIiB0eXBlPVwic29saWRcIj48L3AtZGl2aWRlcj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtbm9uZSBsaXN0LW5vbmUgbS0wIG92ZXJmbG93LXktYXV0byBtYXgtaC1mdWxsXCI+XHJcbiAgICAgICAgICA8bGk+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzcz1cIm1lbnUtcGFyZW50XCJcclxuICAgICAgICAgICAgICBpZD1cIm1lbnUtc2lzdGVtYXMtcGFyZW50XCJcclxuICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJleGliaXJNZW51Q2hpbGQoJGV2ZW50LCAtMSlcIlxyXG4gICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIm1lbnVWaXNpdmVsLnNldCh1bmRlZmluZWQpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDwhLS0gPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQte3tcclxuICAgICAgICAgICAgICAgICAgZXhwYW5kTWVudSgpID8gJ2JldHdlZW4nIDogJ2NlbnRlcidcclxuICAgICAgICAgICAgICAgIH19IGdhcC0yIHNpZGUtbWVudS1pdGVtXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZy10b3A6IDAuNzVyZW07IHBhZGRpbmctYm90dG9tOiAwLjc1cmVtXCJcclxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCIhZXhwYW5kTWVudSgpID8gJ1Npc3RlbWFzJyA6ICcnXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5ncmlkX3ZpZXc8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIEBpZihleHBhbmRNZW51KCkpe1xyXG4gICAgICAgICAgICAgICAgPGxhYmVsPlNpc3RlbWFzPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPmNoZXZyb25fcmlnaHQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC17e1xyXG4gICAgICAgICAgICAgICAgICBleHBhbmRNZW51KCkgPyAnYmV0d2VlbicgOiAnY2VudGVyJ1xyXG4gICAgICAgICAgICAgICAgfX0gZ2FwLTIgc2lkZS1tZW51LWl0ZW0tc3lzdGVtIHRyb2NhLXNpc3RlbWEtY29udGFpbmVyIHB5LTJcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZUVtcHJlc2EoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8cC1hdmF0YXJcclxuICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXRoLWxhcmdlXCJcclxuICAgICAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cIm1yLTJcIlxyXG4gICAgICAgICAgICAgICAgICBzaXplPVwibm9ybWFsXCJcclxuICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6ICdyZ2IodmFyKC0ta3YtY29sb3Itc3lzdGVtKSwgMSknLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnd2hpdGUnXHJcbiAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgLz4gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiAncmdiKHZhcigtLWt2LWNvbG9yLXN5c3RlbSksIC4yKScsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZ2IodmFyKC0ta3YtY29sb3Itc3lzdGVtKSwgMSknLFxyXG4gICAgICAgICAgICAgICAgICAgICdib3JkZXItcmFkaXVzJzogJy41cmVtJyxcclxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnLjI1cmVtJ1xyXG4gICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgZGFzaGJvYXJkX2N1c3RvbWl6ZVxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICBAaWYoZXhwYW5kTWVudSgpKSB7XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiB3LWZ1bGxcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgbXItMiBjb2xvci1zeXN0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICBNZXVzIFNpc3RlbWFzXHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIidyZ2IodmFyKC0ta3YtY29sb3Itc3lzdGVtKSwgMSknXCJcclxuICAgICAgICAgICAgICAgICAgPnVuZm9sZF9tb3JlPC9zcGFuXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1lbnUtY2hpbGRzXCJcclxuICAgICAgICAgICAgICAgIGlkPVwibWVudS1zaXN0ZW1hcy1jaGlsZFwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUub3BhY2l0eV09XCJtZW51VmlzaXZlbCgpID09PSAtMSA/ICcxJyA6ICcwJ1wiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUucG9pbnRlckV2ZW50c109XCJtZW51VmlzaXZlbCgpID09PSAtMSA/ICdhdXRvJyA6ICdub25lJ1wiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwLTAgbS0wIGZvbnQtYm9sZCBwdC0yIHBsLTMgdGV4dC14c1wiPlNpc3RlbWFzPC9wPlxyXG4gICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBhcHBzOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBzaWRlLW1lbnUtaXRlbSBweS0yIHBsLTMgcHItMVwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICBjYWxsUm91dGUoaXRlbS5yb3RhcGFkcmFvKTsgc2VsZWN0QXBwKGl0ZW0uaWRhcGxpY2F0aXZvKVxyXG4gICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgICAgICAgW3NyY109XCJpdGVtLnVybGljb25lXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImgtMnJlbSB3LTJyZW0gYm9yZGVyLXJvdW5kLWxnXCJcclxuICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc21cIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLm5vbWVhcGxpY2F0aXZvIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICAgIDwhLS0gPGxpPlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQte3tcclxuICAgICAgICAgICAgICAgIGV4cGFuZE1lbnUoKSA/ICdiZXR3ZWVuJyA6ICdjZW50ZXInXHJcbiAgICAgICAgICAgICAgfX0gZ2FwLTIgc2lkZS1tZW51LWl0ZW1cIlxyXG4gICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZy10b3A6IDAuNzVyZW07IHBhZGRpbmctYm90dG9tOiAwLjc1cmVtXCJcclxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiIWV4cGFuZE1lbnUoKSA/ICdTYWlyJyA6ICcnXCJcclxuICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiJ3JnYmEoMjUyLCAzLCAzLCAwLjYpJ1wiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImxvZ291dCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPmV4aXRfdG9fYXBwPC9zcGFuPlxyXG4gICAgICAgICAgICAgIEBpZihleHBhbmRNZW51KCkpe1xyXG4gICAgICAgICAgICAgIDxsYWJlbD5TYWlyPC9sYWJlbD5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9saT4gLS0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9wLXNpZGViYXI+XHJcbiAgfVxyXG5cclxuICA8IS0tIFNFw4fDg08gQ09OVEXDmkRPICAtLT5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cInctYXV0byBoLXNjcmVlbiBwYWdlLWNvbnRlbnQgb3ZlcmZsb3cteS1oaWRkZW4gZmxleCBmbGV4LWNvbHVtblwiXHJcbiAgICBpZD1cInBhZ2UtY29udGVudFwiXHJcbiAgICBzdHlsZT1cIndpZHRoOiAxMDB2dyAhaW1wb3J0YW50XCJcclxuICA+XHJcbiAgICA8IS0tIFRPUE8gLS0+XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBmbGV4LXdyYXAgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG15LTIgbXgtMyBtYi0wXCJcclxuICAgID5cclxuICAgICAgQGlmKCFzaG93TWVudSkge1xyXG4gICAgICA8IS0tIExvZ28gaG9tZSAtLT5cclxuICAgICAgPGRpdj5cclxuICAgICAgICA8aW1nIFtzcmNdPVwibG9nb01lbnVFeHBhbmRcIiB3aWR0aD1cIjE1MFwiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICB9IEBlbHNlIHtcclxuICAgICAgPCEtLSBCcmVhZGNydW1icyAtLT5cclxuICAgICAgQGlmKHNob3dCcmVhZGNydW1iKSB7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJoLWZ1bGxcIj5cclxuICAgICAgICA8cC1icmVhZGNydW1iXHJcbiAgICAgICAgICAqbmdJZj1cIndpZHRoQ2FyZCA+IDQwMFwiXHJcbiAgICAgICAgICBzdHlsZUNsYXNzPVwiYm9yZGVyLW5vbmUgcC0wIGZsZXggYWxpZ24taXRlbXMtY2VudGVyIGgtMnJlbSBiZy10cmFuc3BhcmVudFwiXHJcbiAgICAgICAgICBbbW9kZWxdPVwiYnJlYWRDcnVtYkl0ZW1zXCJcclxuICAgICAgICAgIChvbkl0ZW1DbGljayk9XCJjYWxsUm91dGUoJGV2ZW50Lml0ZW0ucm91dGVyTGluaywgdHJ1ZSlcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpdGVtXCIgbGV0LWl0ZW0gbGV0LWk9XCJpbmRleFwiPlxyXG4gICAgICAgICAgICBAaWYoYnJlYWRDcnVtYkl0ZW1zLmluZGV4T2YoaXRlbSkgPCBicmVhZENydW1iSXRlbXMubGVuZ3RoIC0gMSl7XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ub3JtYWxcIj57eyBpdGVtLmxhYmVsIH19PC9zcGFuPlxyXG4gICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LWJvbGRcIj57eyBpdGVtLmxhYmVsIH19PC9zcGFuPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvcC1icmVhZGNydW1iPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgfSBAZWxzZSB7XHJcbiAgICAgIDwhLS0gR0hPU1QgRElWIFBBUkEgT0NQVUFSIEVTUEHDh08gTk8gU1BBQ0UgQkVUV0VFTiAtLT5cclxuICAgICAgPGRpdj48L2Rpdj5cclxuICAgICAgfSB9IEBpZiAoZXhpYmlyTm9tZXMpIHsgQGlmKHdpZHRoQ2FyZCA+PSA1MTcpIHtcclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwidy1hdXRvIGZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIlxyXG4gICAgICA+XHJcbiAgICAgICAgQGlmIChtYXN0ZXJOYW1lKSB7XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXNlbWlib2xkIHN5c3RlbS1jb2xvclwiPnt7IG1hc3Rlck5hbWUgfX08L3NwYW4+IH0gQGlmXHJcbiAgICAgICAgKGVtcHJlc2FOYW1lKSB7PHNwYW4gY2xhc3M9XCJlbXByZXNhLW5hbWVcIlxyXG4gICAgICAgICAgPk9yZ2FuaXphw6fDo286IHt7IGVtcHJlc2FOYW1lIH19PC9zcGFuXHJcbiAgICAgICAgPlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJ3LWF1dG8gZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiXHJcbiAgICAgID5cclxuICAgICAgICA8IS0tIE5hdmVnYcOnw6NvIGRlIHNpc3RlbWFzIGUgdXN1w6FyaW9zIC0tPlxyXG4gICAgICAgIDwhLS0gQGZvciAodG9wQWN0aW9uIG9mIHRvcE1lbnVBY3Rpb25zKCk7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidG9wQWN0aW9uXCIgLz5cclxuICAgICAgICAgICAgfSAtLT5cclxuICAgICAgICA8a3YtdG9wLWljb25zIFt0b3BBY3Rpb25zXT1cInRvcE1lbnVPcHRpb25zXCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIH0gQGVsc2Uge1xyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJ3LWF1dG8gZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiXHJcbiAgICAgID5cclxuICAgICAgICA8IS0tIE5hdmVnYcOnw6NvIGRlIHNpc3RlbWFzIGUgdXN1w6FyaW9zIC0tPlxyXG4gICAgICAgIDwhLS0gQGZvciAodG9wQWN0aW9uIG9mIHRvcE1lbnVBY3Rpb25zKCk7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidG9wQWN0aW9uXCIgLz5cclxuICAgICAgICAgICAgfSAtLT5cclxuICAgICAgICA8a3YtdG9wLWljb25zIFt0b3BBY3Rpb25zXT1cInRvcE1lbnVPcHRpb25zXCIgLz5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJ3LWF1dG8gZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiXHJcbiAgICAgID5cclxuICAgICAgICBAaWYgKG1hc3Rlck5hbWUpIHsgPHNwYW4gY2xhc3M9XCJtYXN0ZXItbmFtZVwiPnt7IG1hc3Rlck5hbWUgfX08L3NwYW4+IH1cclxuICAgICAgICBAaWYgKGVtcHJlc2FOYW1lKSB7PHNwYW4gY2xhc3M9XCJlbXByZXNhLW5hbWVcIj57eyBlbXByZXNhTmFtZSB9fTwvc3Bhbj4gfVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgfSB9IEBlbHNlIHsgQGlmKHdpZHRoUGFnZSgpID4gOTkyKXtcclxuICAgICAgPCEtLSBkcm9wZG93biBwYXJhIHNlbGXDp8OjbyBkZSBlbXByZXNhL2xpY2VuY2EgLS0+XHJcbiAgICAgIDxkcm9wZG93bi1tYXN0ZXJcclxuICAgICAgICAqbmdJZj1cInNob3dMaWNlbmNhcygpXCJcclxuICAgICAgICBjbGFzcz1cIm1heC13LTI1cmVtIGZsZXgtMVwiXHJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiaWRtYXN0ZXJcIlxyXG4gICAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcclxuICAgICAgICBbbWFzdGVyc109XCJtYXN0ZXJzXCJcclxuICAgICAgICAob25TZWxlY3Rpb25DaGFuZ2UpPVwiY2hhbmdlTGljZW5zZSgkZXZlbnQpXCJcclxuICAgICAgICAob25TZWxlY3Rpb25WYWx1ZSk9XCJjaGFuZ2VMaWNlbnNlKCRldmVudClcIlxyXG4gICAgICA+XHJcbiAgICAgIDwvZHJvcGRvd24tbWFzdGVyPlxyXG4gICAgICB9XHJcblxyXG4gICAgICA8IS0tIE5hdmVnYcOnw6NvIGRlIHNpc3RlbWFzIGUgdXN1w6FyaW9zIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidy1hdXRvIGZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgPGt2LXRvcC1pY29ucyBbdG9wQWN0aW9uc109XCJ0b3BNZW51T3B0aW9uc1wiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICBAaWYod2lkdGhQYWdlKCkgPD0gOTkyKXtcclxuICAgIDwhLS0gZHJvcGRvd24gcGFyYSBzZWxlw6fDo28gZGUgZW1wcmVzYS9saWNlbmNhIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImgtMnJlbSBteC0zXCI+XHJcbiAgICAgIDxkcm9wZG93bi1tYXN0ZXJcclxuICAgICAgICAqbmdJZj1cInNob3dMaWNlbmNhcygpXCJcclxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpZG1hc3RlclwiXHJcbiAgICAgICAgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIlxyXG4gICAgICAgIFttYXN0ZXJzXT1cIm1hc3RlcnNcIlxyXG4gICAgICAgIChvblNlbGVjdGlvbkNoYW5nZSk9XCJjaGFuZ2VMaWNlbnNlKCRldmVudClcIlxyXG4gICAgICAgIChvblNlbGVjdGlvblZhbHVlKT1cImNoYW5nZUxpY2Vuc2UoJGV2ZW50KVwiXHJcbiAgICAgIC8+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgPCEtLSBDb250YWluZXIgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwib3ZlcmZsb3ctaGlkZGVuIGZsZXgtMSBwLTAgbS0wIG1iLTIgaC1mdWxsXCI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cIm92ZXJmbG93LXktYXV0byBoLWZ1bGwgbWF4LWgtZnVsbCB7e1xyXG4gICAgICAgICAgIXNob3dNZW51ICYmICdzbTpvdmVyZmxvdy15LWhpZGRlbidcclxuICAgICAgICB9fSBjYXJkLWNvbnRhaW5lclxyXG4gICAgICAgIFxyXG4gICAgICAgIHt7IHVzZUNhcmQgPyAndXNlLWNhcmQnIDogJycgfX1cclxuICAgICAgICBcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIFBhaW5lbCBkbyB1c3XDoXJpbyAtLT5cclxuICA8cC1vdmVybGF5UGFuZWxcclxuICAgICNtZXVzRGFkb3NQYW5lbFxyXG4gICAgW3Nob3dUcmFuc2l0aW9uT3B0aW9uc109XCInMzUwbXMgZWFzZS1vdXQnXCJcclxuICAgIFtoaWRlVHJhbnNpdGlvbk9wdGlvbnNdPVwiJzI1MG1zIGVhc2UtaW4nXCJcclxuICA+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY29udGFpbmVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwLTMgZmxleCBmbGV4LWNvbHVtbiBnYXAtMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgPHAtYXZhdGFyXHJcbiAgICAgICAgICAgIGljb249XCJwaSBwaS11c2VyXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJtci0yXCJcclxuICAgICAgICAgICAgc2l6ZT1cInhsYXJnZVwiXHJcbiAgICAgICAgICAgIHNoYXBlPVwiY2lyY2xlXCJcclxuICAgICAgICAgICAgW3N0eWxlXT1cInsgd2lkdGg6ICc0LjVyZW0nLCBoZWlnaHQ6ICc0LjVyZW0nIH1cIlxyXG4gICAgICAgICAgLz5cclxuXHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiB3LTEwcmVtIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCJcclxuICAgICAgICAgICAgW3N0eWxlXT1cInsgaGVpZ2h0OiAnNC41cmVtJyB9XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICBjbGFzcz1cInRleHQtbWVkaXVtIHRleHQtbWQgb3ZlcmZsb3ctaGlkZGVuIHdoaXRlLXNwYWNlLW5vd3JhcCB0ZXh0LW92ZXJmbG93LWVsbGlwc2lzXCJcclxuICAgICAgICAgICAgICA+T2zDoSwge3sgdXNlck5hbWUuc3BsaXQoXCIgXCIpWzBdIH19ITwvc3BhblxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LW1lZGl1bSB0ZXh0LXhzIHRleHQtZ3JheS01MDAgb3ZlcmZsb3ctaGlkZGVuIHdoaXRlLXNwYWNlLW5vd3JhcCB0ZXh0LW92ZXJmbG93LWVsbGlwc2lzXCJcclxuICAgICAgICAgICAgICA+e3sgdXNlckVtYWlsIH19PC9zcGFuXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPGt2LWJ1dHRvblxyXG4gICAgICAgICAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICAgICAgICAgIGxhYmVsPVwiR2VyZW5jaWFyIEtlZVBhc3NcIlxyXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImFjY2Vzc0tlZVBhc3MoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID48L2t2LWJ1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICBAaWYoYWN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgPHAtZGl2aWRlcj48L3AtZGl2aWRlcj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gdGV4dC1zbVwiPlxyXG4gICAgICAgICAgQGZvciAoYWN0aW9uIG9mIGFjdGlvbnM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgc2lkZS1tZW51LWl0ZW0gcC0yXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uLmFjdGlvbigpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPnt7IGFjdGlvbi5pY29uIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuPnt7IGFjdGlvbi5sYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDxwLWRpdmlkZXI+PC9wLWRpdmlkZXI+XHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gZ2FwLTIgc2lkZS1tZW51LWl0ZW0gcC0yXCJcclxuICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCIncmdiYSgyNTIsIDMsIDMsIDAuNiknXCJcclxuICAgICAgICAgIChjbGljayk9XCJsb2dvdXQoJGV2ZW50KVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+ZXhpdF90b19hcHA8L3NwYW4+XHJcbiAgICAgICAgICA8bGFiZWw+U2FpcjwvbGFiZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3Atb3ZlcmxheVBhbmVsPlxyXG48L2Rpdj5cclxuIl19
|
|
426
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtbGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWxheW91dC9sYXlvdXQva3YtbGF5b3V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWxheW91dC9sYXlvdXQva3YtbGF5b3V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFFTCxTQUFTLEVBR1QsTUFBTSxFQUNOLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLEtBQUssRUFDTCxLQUFLLEVBR0wsTUFBTSxFQUNOLE1BQU0sRUFHTixTQUFTLEdBRVYsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtQ3ZCLE1BQU0sT0FBTyxpQkFBaUI7SUE2SjVCLFlBQ1UsR0FBc0IsRUFDdEIsRUFBZSxFQUNiLE1BQWMsRUFDZCxjQUE4QjtRQUhoQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQWhLakMsU0FBSSxHQVVQLEVBQUUsQ0FBQztRQUVBLFlBQU8sR0FBMEQsRUFBRSxDQUFDO1FBRXBFLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFFeEI7Ozs7Ozs7Ozs7Ozs7OztXQWVHO1FBQ0gsb0JBQWUsR0FBRyxLQUFLLENBQXlFLEVBQUUsQ0FBQyxDQUFDO1FBRXBHLG1CQUFjLEdBQXNCO1lBQ2xDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxnQkFBZ0Is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LEtBQUs7Z0JBRUksaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csMEJBQTBCO3NCQUFuQyxNQUFNO2dCQUVHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUdzQixjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFnT3BCLGNBQWM7c0JBRHBCLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBjb21wdXRlZCxcclxuICBjb250ZW50Q2hpbGRyZW4sXHJcbiAgZWZmZWN0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgaW5wdXQsXHJcbiAgSW5wdXQsXHJcbiAgbW9kZWwsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgc2lnbmFsLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFdyaXRhYmxlU2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgT3ZlcmxheVBhbmVsIH0gZnJvbSAncHJpbWVuZy9vdmVybGF5cGFuZWwnO1xyXG5pbXBvcnQgeyBTaWRlYmFyIH0gZnJvbSAncHJpbWVuZy9zaWRlYmFyJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtcclxuICBhbmltYXRlLFxyXG4gIHN0YXRlLFxyXG4gIHN0eWxlLFxyXG4gIHRyYW5zaXRpb24sXHJcbiAgdHJpZ2dlcixcclxufSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgVG9wQWN0aW9uc01vZGVsIH0gZnJvbSAnLi4vdG9wLWljb25zL3RvcC1pY29ucy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBsaW5rIH0gZnJvbSAnZDMnO1xyXG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTGF5b3V0TWVudUl0ZW0ge1xyXG4gIGlkbWVudTogbnVtYmVyO1xyXG4gIGlkbWVudXBhaTogbnVtYmVyIHwgbnVsbDtcclxuICBpZGFwbGljYXRpdm86IG51bWJlcjtcclxuICBkZXNjcmljYW9tZW51OiBzdHJpbmc7XHJcbiAgbGluazogc3RyaW5nIHwgbnVsbDtcclxuICBpY29uZTogc3RyaW5nIHwgbnVsbDtcclxuICBpbmRwdWJsaWNhZG86IGJvb2xlYW47XHJcbiAgaW5kbWVudXBhaTogYm9vbGVhbjtcclxuICBsaXN0YWlkdmlzYW9tZW51OiBudW1iZXJbXTtcclxuICBiZ0NvbG9yPzogc3RyaW5nO1xyXG4gIHRleHRDb2xvcj86IHN0cmluZztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdrdi1sYXlvdXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9rdi1sYXlvdXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2t2LWxheW91dC5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgS3ZMYXlvdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCkgYXBwczoge1xyXG4gICAgaWRhcGxpY2F0aXZvOiBudW1iZXI7XHJcbiAgICBpZHNpc3RlbWE6IG51bWJlcjtcclxuICAgIG5vbWVhcGxpY2F0aXZvOiBzdHJpbmc7XHJcbiAgICBkZXNjcmljYW9hcGxpY2F0aXZvOiBzdHJpbmc7XHJcbiAgICByb3RhcGFkcmFvOiBzdHJpbmc7XHJcbiAgICBpbmRwdWJsaWNhZG86IGJvb2xlYW47XHJcbiAgICBpbmRwdWJsaWNhY2FvZ3JhZGF0aXZhOiBib29sZWFuO1xyXG4gICAgaW5kZXhpZ2VlbXByZXNhZW50cmFkYTogYm9vbGVhbjtcclxuICAgIHVybGljb25lPzogc3RyaW5nO1xyXG4gIH1bXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBhY3Rpb25zOiB7IGljb246IHN0cmluZzsgbGFiZWw6IHN0cmluZzsgYWN0aW9uOiAoKSA9PiB2b2lkIH1bXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSB1c2VDYXJkID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhIHF1YWlzIG1lbnVzIHPDo28gdmlzw612ZWlzIG5vIHRvcG8uXHJcbiAgICogXHJcbiAgICogQHR5cGUge0FycmF5PHtpZDogbnVtYmVyLCBudW1Ob3RpZmljYXRpb25zPzogbnVtYmVyLCBhY3Rpb24/OiAoZTogYW55KSA9PiB2b2lkfT59XHJcbiAgICogXHJcbiAgICogT3DDp8O1ZXMgZGlzcG9uw612ZWlzOlxyXG4gICAqIC0gMiAtIEtpYXJhIFxyXG4gICAqIC0gMyAtIE5vdGlmaWNhw6fDtWVzXHJcbiAgICogLSA0IC0gVGFyZWZhc1xyXG4gICAqIC0gNSAtIENvbXVuaWNhZG9yXHJcbiAgICogXHJcbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IGlkIC0gaWRlbnRpZmljYWRvciBkbyBtZW51LlxyXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbnVtTm90aWZpY2F0aW9uc10gLSBOw7ptZXJvIGRlIG5vdGlmaWNhw6fDtWVzIChvcGNpb25hbCkuXHJcbiAgICogQHByb3BlcnR5IHsoZTogYW55KSA9PiB2b2lkfSBbYWN0aW9uXSAtIEHDp8OjbyBkbyBjbGlxdWUsIHF1ZSByZXRvcm5hIG8gZXZlbnRvIGRvIGNsaXF1ZSAob3B0aW9uYWwpLlxyXG4gICAqIFxyXG4gICAqL1xyXG4gIHRvcE1lbnVzVmlzaWJsZSA9IGlucHV0PHsgaWQ6IG51bWJlciwgbnVtTm90aWZpY2F0aW9ucz86IG51bWJlciwgYWN0aW9uPzogKGU6IGFueSkgPT4gdm9pZCB9W10+KFtdKTtcclxuXHJcbiAgdG9wTWVudU9wdGlvbnM6IFRvcEFjdGlvbnNNb2RlbFtdID0gW1xyXG4gICAgeyBpZDogMSwgdmlzaWJsZTogdHJ1ZSwgaWNvbjogJ3BlcnNvbicsIHRvb2x0aXA6ICdNZXVzIERhZG9zJywgbnVtTm90aWZpY2F0aW9uczogMCwgYWN0aW9uOiAoZTogYW55KSA9PiB7IHRoaXMubWV1c0RhZG9zUGFuZWwudG9nZ2xlKGUpIH0gfSxcclxuICAgIHsgaWQ6IDIsIHZpc2libGU6IGZhbHNlLCBpY29uOiAna2lhcmEnLCB0b29sdGlwOiAnS2lhcmEnLCBudW1Ob3RpZmljYXRpb25zOiAwLCBhY3Rpb246ICgpID0+IHsgfSB9LFxyXG4gICAgeyBpZDogMywgdmlzaWJsZTogZmFsc2UsIGljb246ICdub3RpZmljYXRpb25zJywgdG9vbHRpcDogJ05vdGlmaWNhw6fDtWVzJywgbnVtTm90aWZpY2F0aW9uczogMCwgYWN0aW9uOiAoKSA9PiB7IH0gfSxcclxuICAgIHsgaWQ6IDQsIHZpc2libGU6IGZhbHNlLCBpY29uOiAnY2hlY2tsaXN0JywgdG9vbHRpcDogJ1RhcmVmYXMnLCBudW1Ob3RpZmljYXRpb25zOiAwLCBhY3Rpb246ICgpID0+IHsgfSB9LFxyXG4gICAgeyBpZDogNSwgdmlzaWJsZTogZmFsc2UsIGljb246ICdjaGF0JywgdG9vbHRpcDogJ0NvbXVuaWNhZG9yJywgbnVtTm90aWZpY2F0aW9uczogMCwgYWN0aW9uOiAoKSA9PiB7IH0gfSxcclxuICBdO1xyXG5cclxuICBwcm9maWxlSW1hZ2UgPSBpbnB1dDxzdHJpbmc+KCcnKTtcclxuXHJcbiAgQElucHV0KCkgYnJlYWRDcnVtYkl0ZW1zOiB7XHJcbiAgICBsYWJlbDogc3RyaW5nO1xyXG4gICAgcm91dGVyTGluazogc3RyaW5nO1xyXG4gIH1bXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBtYXN0ZXJzOiB7XHJcbiAgICBpZG1hc3RlcjogbnVtYmVyO1xyXG4gICAgY3BmY25wajogc3RyaW5nO1xyXG4gICAgbm9tZTogc3RyaW5nO1xyXG4gICAgaWRtYXN0ZXJub21lOiBzdHJpbmc7XHJcbiAgfVtdID0gW107XHJcblxyXG4gIG1lbnVzID0gbW9kZWw8TGF5b3V0TWVudUl0ZW1bXT4oW10pO1xyXG4gIG1lbnVWaXNpdmVsID0gc2lnbmFsPG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICBzaG93TWVudVNpc3RlbWFzID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgZXhwYW5kTWVudSA9IG1vZGVsPGJvb2xlYW4+KHRydWUpO1xyXG5cclxuICBASW5wdXQoKSBsb2dvTWVudUV4cGFuZCE6IGFueTtcclxuICBASW5wdXQoKSBsb2dvTWVudUhpZGUhOiBhbnk7XHJcblxyXG4gIEBJbnB1dCgpIHNlbGVjdGVkQXBwITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkRW1wcmVzYSE6IGFueTtcclxuICBASW5wdXQoKSBzZWxlY3RlZE1hc3RlciE6IG51bWJlcjtcclxuXHJcbiAgQElucHV0KCkgc2hvd0J1dHRvbkFwcHM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dCdXR0b25Vc2VyOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93RXhwYW5kTWVudTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0Ryb3Bkb3duTGljZW5jYTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd01lbnU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dUcm9jYUVtcHJlc2E6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93QnJlYWRjcnVtYjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgdXNlck5hbWU6IHN0cmluZyA9ICdVc3XDoXJpbyc7XHJcbiAgQElucHV0KCkgdXNlckVtYWlsOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBtYXN0ZXJOYW1lITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGVtcHJlc2FOYW1lITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGlkc0FwbGljYXRpdm9zTWVudUhpZGU6IG51bWJlcltdID0gW107XHJcbiAgQElucHV0KCkgdXNlU2VsZWN0aW9uQXBwcyA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd1RyaWxoYUNvbmhlY2ltZW50byA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgYWNjZXNzS2VlUGFzc0VtaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjaGFuZ2VFbXByZXNhRW1pdDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjaGFuZ2VMaWNlbnNlRW1pdDogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGV4cGFuZE1lbnVFbWl0OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGxvZ291dEVtaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RBcHBFbWl0OiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgbmF2aWdhdGVUb0RlZmF1bHRSb3V0ZUVtaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBAT3V0cHV0KCkgZG93bmxvYWREb2NFbWl0OiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgc2hvd1ZpZGVvRG9jRW1pdDogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG5cclxuICBAVmlld0NoaWxkKCdtZXVzRGFkb3NQYW5lbCcpIG1ldXNEYWRvc1BhbmVsITogT3ZlcmxheVBhbmVsO1xyXG5cclxuICAvLyB0b3BNZW51QWN0aW9ucyA9IGNvbnRlbnRDaGlsZHJlbjxUZW1wbGF0ZVJlZjxhbnk+PigndG9wTWVudUFjdGlvbicpO1xyXG5cclxuICBmb3JtR3JvdXAhOiBGb3JtR3JvdXA7XHJcbiAgaGVpZ2h0Q2FyZCE6IG51bWJlcjtcclxuICBtb3VzZU92ZXJGaWxob0luZGV4OiBhbnk7XHJcbiAgbW91c2VPdmVySW5kZXg6IGFueTtcclxuICB3aWR0aENhcmQhOiBudW1iZXI7XHJcblxyXG4gIHdpZHRoUGFnZSA9IHNpZ25hbDxudW1iZXI+KDApO1xyXG5cclxuICB0cmlsaGFDb25oZWNpbWVudG8gPSBbXHJcbiAgICB7XHJcbiAgICAgIHRpdGxlOiAnQ2FkYXN0cmUgYXMgc3VhcyBlbXByZXNhcycsXHJcbiAgICAgIGljb246ICdidXNpbmVzcycsXHJcbiAgICAgIHN1YnRpdGxlOiAnU2FpYmEgY29tbyBjYWRhc3RyYXIgaW5mb3JtYcOnw7VlcyBlc3NlbmNpYWlzIGRhcyBlbXByZXNhcy4nLFxyXG4gICAgICBkb2M6ICdodHRwczovL3dvcmstYXNzZXRzLmtlZXZvLmNvbS5ici9rZWV2by1jZW50ZXIvMSstK0NhZGFzdHJvK2RlK0VtcHJlc2FzLnBkZicsXHJcbiAgICAgIHZpZGVvOiAnaHR0cHM6Ly93b3JrLWFzc2V0cy5rZWV2by5jb20uYnIva2Vldm8tY2VudGVyLzErLStDYWRhc3RybytkZStFbXByZXNhcytubytLZWV2bytDZW50ZXIubXA0J1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGl0bGU6ICdDYWRhc3RybyBkZSBDZXJ0aWZpY2Fkb3MgZSBQcm9jdXJhw6fDo28nLFxyXG4gICAgICBpY29uOiAndmVyaWZpZWRfdXNlcicsXHJcbiAgICAgIHN1YnRpdGxlOlxyXG4gICAgICAgICdWZWphIGNvbW8gY2FkYXN0cmFyIHVtIGNlcnRpZmljYWRvIGUgcHJvY3VyYcOnw6NvIG5lY2Vzc8OhcmlvcyBwYXJhIGFzIGVtcHJlc2FzLicsXHJcbiAgICAgIGRvYzogJ2h0dHBzOi8vd29yay1hc3NldHMua2Vldm8uY29tLmJyL2tlZXZvLWNlbnRlci8yKy0rQ2FkYXN0cm8rZGUrQ2VydGlmaWNhZG9zK2UrUHJvY3VyYSVDMyVBNyVDMyVCNWVzLnBkZicsXHJcbiAgICAgIHZpZGVvOiAnaHR0cHM6Ly93b3JrLWFzc2V0cy5rZWV2by5jb20uYnIva2Vldm8tY2VudGVyLzIrLStDYWRhc3RybytkZStDZXJ0aWZpY2Fkb3MrZStQcm9jdXJhJUMzJUE3JUMzJUI1ZXMubXA0JyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRpdGxlOiAnQ29uZmlndXJhw6fDo28gZGEgR2VzdMOjbyBkZSBMaWNlbsOnYScsXHJcbiAgICAgIGljb246ICdmYWN0X2NoZWNrJyxcclxuICAgICAgc3VidGl0bGU6ICdBcHJlbmRhIGEgdmluY3VsYXIgYXMgbGljZW7Dp2FzIHBhcmEgY2FkYSBlbXByZXNhIGFxdWkuJyxcclxuICAgICAgZG9jOiAnaHR0cHM6Ly93b3JrLWFzc2V0cy5rZWV2by5jb20uYnIva2Vldm8tY2VudGVyLzMrLStDb25maWd1cmElQzMlQTclQzMlQTNvK2RhK0dlc3QlQzMlQTNvK2RlK0xpY2VuJUMzJUE3YS5wZGYnLFxyXG4gICAgICB2aWRlbzogJ2h0dHBzOi8vd29yay1hc3NldHMua2Vldm8uY29tLmJyL2tlZXZvLWNlbnRlci8zKy0rQ29uZmlndXJhJUMzJUE3JUMzJUEzbytkZStHZXN0JUMzJUEzbytkZStMaWNlbiVDMyVBN2FzLm1wNCcsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0aXRsZTogJ0NhZGFzdHJvIGRlIFVzdcOhcmlvJyxcclxuICAgICAgaWNvbjogJ3BlcnNvbl9hZGQnLFxyXG4gICAgICBzdWJ0aXRsZTpcclxuICAgICAgICAnU2FpYmEgY29tbyBjYWRhc3RyYXIgdXN1w6FyaW9zIHF1ZSB0ZXLDo28gYWNlc3NvIGFvcyBzaXN0ZW1hcyBkYSBLZWV2by4nLFxyXG4gICAgICBkb2M6ICdodHRwczovL3dvcmstYXNzZXRzLmtlZXZvLmNvbS5ici9rZWV2by1jZW50ZXIvNCstK0NhZGFzdHJvK2RlK1VzdSVDMyVBMXJpby5wZGYnLFxyXG4gICAgICB2aWRlbzogJ2h0dHBzOi8vd29yay1hc3NldHMua2Vldm8uY29tLmJyL2tlZXZvLWNlbnRlci80Ky0rQ2FkYXN0cm8rZGUrVXN1JUMzJUExcmlvLm1wNCcsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0aXRsZTogJ1BhcMOpaXMgZSBQZXJtaXNzw7VlcycsXHJcbiAgICAgIGljb246ICdtYW5hZ2VfYWNjb3VudHMnLFxyXG4gICAgICBzdWJ0aXRsZTpcclxuICAgICAgICAnRGVzY3VicmEgY29tbyBjb25maWd1cmFyIHBhcMOpaXMgZSBwZXJtaXNzw7VlcyBkb3Mgc2V1cyB1c3XDoXJpb3MgcmVnaXN0cmFkb3MuJyxcclxuICAgICAgZG9jOiAnaHR0cHM6Ly93b3JrLWFzc2V0cy5rZWV2by5jb20uYnIva2Vldm8tY2VudGVyLzUrLStQYXAlQzMlQTlpcytlK1Blcm1pc3MlQzMlQjVlcy5wZGYnLFxyXG4gICAgICB2aWRlbzogJ2h0dHBzOi8vd29yay1hc3NldHMua2Vldm8uY29tLmJyL2tlZXZvLWNlbnRlci81Ky0rUGFwJUMzJUE5aXMrZStQZXJtaXNzJUMzJUI1ZXMubXA0JyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRpdGxlOiAnQ2FkYXN0cm8gZGUgQ29udGFkb3JlcycsXHJcbiAgICAgIGljb246ICdiYWRnZScsXHJcbiAgICAgIHN1YnRpdGxlOiAnQXByZW5kYSBjb21vIGNhZGFzdHJhciBzZXVzIGNvbnRhZG9yZXMuJyxcclxuICAgICAgZG9jOiAnaHR0cHM6Ly93b3JrLWFzc2V0cy5rZWV2by5jb20uYnIva2Vldm8tY2VudGVyLzYrLStDYWRhc3RybytkZStDb250YWRvcmVzLnBkZicsXHJcbiAgICAgIHZpZGVvOiAnaHR0cHM6Ly93b3JrLWFzc2V0cy5rZWV2by5jb20uYnIva2Vldm8tY2VudGVyLzYrLStDYWRhc3RybytkZStDb250YWRvcmVzLm1wNCcsXHJcbiAgICB9LFxyXG4gIF07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcm90ZWN0ZWQgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBpZG1hc3RlcjogW3RoaXMuc2VsZWN0ZWRNYXN0ZXIsIFtdXSxcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIHRoaXMucHJvY2Vzc2FyTWVudXMoKTtcclxuICAgIHRoaXMuYWRqdXN0V2lkdGhDYXJkKCk7XHJcbiAgICB0aGlzLnZlcmlmeU1lbnVCZWhhdmlvcigpO1xyXG4gICAgdGhpcy5leHBhbmRNZW51RXZlbnQoKTtcclxuICB9XHJcblxyXG4gIHRvcE1lbnVPcHRpb25zUmV2ZXJzZWQgPSBmYWxzZTtcclxuXHJcbiAgcHJvY2Vzc2FyX21lbnVzID0gZWZmZWN0KCgpID0+IHtcclxuICAgIGlmICh0aGlzLnByb2ZpbGVJbWFnZSgpKSB7XHJcbiAgICAgIHRoaXMudG9wTWVudU9wdGlvbnNbMF0uaW1nID0gdGhpcy5wcm9maWxlSW1hZ2UoKTtcclxuICAgIH1cclxuICAgIC8vaW52ZXJ0ZXIgbyB0b3BNZW51T3B0aW9uc1xyXG4gICAgaWYgKCF0aGlzLnRvcE1lbnVPcHRpb25zUmV2ZXJzZWQpIHtcclxuICAgICAgdGhpcy50b3BNZW51T3B0aW9ucy5yZXZlcnNlKCk7XHJcbiAgICAgIHRoaXMudG9wTWVudU9wdGlvbnNSZXZlcnNlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50b3BNZW51c1Zpc2libGUoKS5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgbGV0IG1lbnUgPSB0aGlzLnRvcE1lbnVPcHRpb25zLmZpbmQoKHgpID0+IHguaWQgPT09IGl0ZW0uaWQpO1xyXG4gICAgICBpZiAobWVudSkge1xyXG4gICAgICAgIG1lbnUudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgaWYgKGl0ZW0uYWN0aW9uKSB7XHJcbiAgICAgICAgICBtZW51LmFjdGlvbiA9IGl0ZW0uYWN0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXRlbS5udW1Ob3RpZmljYXRpb25zKSB7XHJcbiAgICAgICAgICBtZW51Lm51bU5vdGlmaWNhdGlvbnMgPSBpdGVtLm51bU5vdGlmaWNhdGlvbnM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9KTtcclxuXHJcbiAgLy8gcHJvY2Vzc2FyTWVudXMoKSB7XHJcbiAgLy8gfVxyXG5cclxuICBwdWJsaWMgYWNjZXNzS2VlUGFzcyhldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmFjY2Vzc0tlZVBhc3NFbWl0LmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkanVzdEhlaWdodENhcmQoKTogbnVtYmVyIHtcclxuICAgIGlmICh0aGlzLndpZHRoQ2FyZCA+IDQwMCkge1xyXG4gICAgICBpZiAodGhpcy53aWR0aFBhZ2UoKSA8IDk5MiAmJiB0aGlzLnNob3dMaWNlbmNhcygpKSByZXR1cm4gMTQ1O1xyXG5cclxuICAgICAgaWYgKHRoaXMuYnJlYWRDcnVtYkl0ZW1zLmxlbmd0aCA+IDApIHJldHVybiA5NTtcclxuICAgICAgZWxzZSByZXR1cm4gODU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIDEyNTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRqdXN0V2lkdGhDYXJkKCkge1xyXG4gICAgdGhpcy53aWR0aFBhZ2Uuc2V0KHdpbmRvdy5pbm5lcldpZHRoKTtcclxuXHJcbiAgICB0aGlzLmhlaWdodENhcmQgPSBOdW1iZXIoXHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYWdlLWNvbnRlbnQnKT8ub2Zmc2V0SGVpZ2h0XHJcbiAgICApO1xyXG4gICAgaWYgKHRoaXMuc2hvd01lbnUpXHJcbiAgICAgIHRoaXMud2lkdGhDYXJkID1cclxuICAgICAgICBOdW1iZXIod2luZG93LmlubmVyV2lkdGgpIC0gKHRoaXMuZXhwYW5kTWVudSgpID8gMzMzIDogOTMpO1xyXG4gICAgZWxzZSB0aGlzLndpZHRoQ2FyZCA9IE51bWJlcih3aW5kb3cuaW5uZXJXaWR0aCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FsbFJvdXRlKHJvdGE6IGFueSwgZXhwYW5kPzogYm9vbGVhbikge1xyXG4gICAgaWYgKCFleHBhbmQgJiYgIXRoaXMuZXhwYW5kTWVudSgpICYmIHRoaXMuc2hvd0V4cGFuZE1lbnUpXHJcbiAgICAgIHRoaXMuZXhwYW5kTWVudS51cGRhdGUoKGN1cnJlbnRWYWx1ZTogYm9vbGVhbikgPT4gIWN1cnJlbnRWYWx1ZSk7XHJcblxyXG4gICAgaWYgKHRoaXMud2lkdGhQYWdlKCkgIT0gMCAmJiB0aGlzLndpZHRoUGFnZSgpIDwgODAwICYmIHRoaXMuZXhwYW5kTWVudSgpICYmIHRoaXMuc2hvd0V4cGFuZE1lbnUpXHJcbiAgICAgIHRoaXMuZXhwYW5kTWVudS5zZXQoZmFsc2UpO1xyXG5cclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwocm90YSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2hhbmdlRW1wcmVzYShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmNoYW5nZUVtcHJlc2FFbWl0LmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNoYW5nZUxpY2Vuc2UoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5jaGFuZ2VMaWNlbnNlRW1pdC5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmVyaWZ5TWVudUJlaGF2aW9yKCkge1xyXG4gICAgaWYgKHRoaXMud2lkdGhQYWdlKCkgPCA4MDApXHJcbiAgICAgIHRoaXMuZXhwYW5kTWVudS5zZXQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHBhbmRNZW51RXZlbnQoKSB7XHJcbiAgICB0aGlzLmV4cGFuZE1lbnVFbWl0LmVtaXQodGhpcy5leHBhbmRNZW51KCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvZ291dChldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmxvZ291dEVtaXQuZW1pdChldmVudCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1lbnVzUGVyQXBwKCkge1xyXG4gICAgaWYgKHRoaXMucm91dGVyLnVybCAmJiB0aGlzLm1lbnVzKCkgJiYgdGhpcy5tZW51cygpLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKHRoaXMucm91dGVyLnVybCA9PT0gJy8nKSB7XHJcbiAgICAgICAgLy8gdGhpcy5uYXZpZ2F0ZVRvRmlyc3RNZW51KCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgbWVudVNlbGVjaW9uYWRvID0gdGhpcy5tZW51cygpLmZpbmQoXHJcbiAgICAgICAgICAobWVudTogYW55KSA9PlxyXG4gICAgICAgICAgICBtZW51LmxpbmsgJiYgbWVudS5saW5rLmluY2x1ZGVzKHRoaXMucm91dGVyLnVybC5zbGljZSgxKSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChtZW51U2VsZWNpb25hZG8pIHtcclxuICAgICAgICAgIHRoaXMubmF2aWdhdGVUb01lbnUobWVudVNlbGVjaW9uYWRvKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBuYW1lRW1wcmVzYShub21lTGljZW5jYTogYW55KTogc3RyaW5nIHtcclxuICAgIGlmIChub21lTGljZW5jYSkge1xyXG4gICAgICBpZiAobm9tZUxpY2VuY2EubGVuZ3RoID4gMjMpIHJldHVybiBub21lTGljZW5jYS5zdWJzdHJpbmcoMCwgMjMpICsgJy4uLic7XHJcbiAgICAgIGVsc2UgcmV0dXJuIG5vbWVMaWNlbmNhO1xyXG4gICAgfSBlbHNlIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbmF2aWdhdGVUb0ZpcnN0TWVudSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpcnN0TWVudSA9IHRoaXMubWVudXMoKVswXTtcclxuICAgIGlmIChmaXJzdE1lbnUuaW5kbWVudXBhaSkge1xyXG4gICAgICBjb25zdCBmaWxob3MgPSB0aGlzLnJldHVybk1lbnVDaGlsZChmaXJzdE1lbnUuaWRtZW51KTtcclxuICAgICAgaWYgKGZpbGhvcykge1xyXG4gICAgICAgIHRoaXMuY2FsbFJvdXRlKGZpbGhvc1swXS5saW5rLCB0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jYWxsUm91dGUoZmlyc3RNZW51LmxpbmssIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBuYXZpZ2F0ZVRvTWVudShtZW51OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChtZW51Lm1lbnVwYWkpIHtcclxuICAgICAgY29uc3QgZmlsaG9zID0gdGhpcy5yZXR1cm5NZW51Q2hpbGQobWVudS5pZG1lbnUpO1xyXG4gICAgICBpZiAoZmlsaG9zKSB7XHJcbiAgICAgICAgdGhpcy5jYWxsUm91dGUoZmlsaG9zWzBdLmxpbmssIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNhbGxSb3V0ZShtZW51LmxpbmssIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWVudVNlbGVjaW9uYWRvID0gc2lnbmFsPGFueT4obnVsbCk7XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGNvbnN0IGxhdGVzdFJlcXVlc3QgPSBjaGFuZ2VzWydtZW51cyddO1xyXG4gICAgaWYgKGxhdGVzdFJlcXVlc3Q/LmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICB0aGlzLm1lbnVzUGVyQXBwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWxlY2lvbmFyTWVudSgpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXHJcbiAgcHVibGljIG9uV2luZG93UmVzaXplKCkge1xyXG4gICAgdGhpcy5hZGp1c3RXaWR0aENhcmQoKTtcclxuICAgIC8vIHRoaXMudmVyaWZ5TWVudUJlaGF2aW9yKCk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBpc1NlbGVjdGVkTWVudVBhaShtZW51OiBhbnkpIHtcclxuICAgIGlmICghdGhpcy5leHBhbmRNZW51KCkgJiYgbWVudS5pbmRtZW51cGFpKVxyXG4gICAgICByZXR1cm4gbWVudS5pZG1lbnUgPT09IHRoaXMubWVudVNlbGVjaW9uYWRvKCk/LmlkbWVudXBhaTtcclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzZWxlY2lvbmFyTWVudSgpIHtcclxuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodGhpcy5yb3V0ZXIudXJsLCB3aW5kb3cub3JpZ2luKTtcclxuXHJcbiAgICBjb25zdCBjdXJyZW50UGF0aCA9IHVybC5wYXRobmFtZTtcclxuICAgIGNvbnN0IHB1cmVQYXRoID0gY3VycmVudFBhdGgubWF0Y2goL15bXjtdKi9pKTtcclxuXHJcbiAgICBjb25zdCBwYXRocyA9IHB1cmVQYXRoIVswXTtcclxuXHJcbiAgICB0aGlzLm1lbnVzLnNldChcclxuICAgICAgdGhpcy5tZW51cygpLm1hcCgobWVudSkgPT4ge1xyXG4gICAgICAgIGlmIChtZW51LmxpbmspIHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLm1lbnUsXHJcbiAgICAgICAgICAgIGJnQ29sb3I6IHBhdGhzLmluY2x1ZGVzKG1lbnUubGluayEpID8gJ3JnYig0MSwgMTg1LCA0NSknIDogJycsXHJcbiAgICAgICAgICAgIHRleHRDb2xvcjogcGF0aHMuaW5jbHVkZXMobWVudS5saW5rISkgPyAndGV4dC13aGl0ZScgOiAnJyxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtZW51O1xyXG4gICAgICB9KVxyXG4gICAgKVxyXG5cclxuICAgIGNvbnN0IG1lbnUgPSB0aGlzLm1lbnVzKCkuZmluZCgobWVudTogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiBtZW51LmxpbmsgJiYgcGF0aHMuaW5jbHVkZXMobWVudS5saW5rISk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLm1lbnVTZWxlY2lvbmFkby5zZXQobWVudSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmV0dXJuTWVudUNoaWxkKGlkbWVudTogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5tZW51cygpLmZpbHRlcigoeDogYW55KSA9PiB4LmlkbWVudXBhaSA9PSBpZG1lbnUpO1xyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBzZWxlY3RBcHAoaWRhcGxpY2F0aXZvOiBudW1iZXIpIHtcclxuICAgIHRoaXMuc2VsZWN0QXBwRW1pdC5lbWl0KGlkYXBsaWNhdGl2byk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd0xpY2VuY2FzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2hvd0Ryb3Bkb3duTGljZW5jYSAmJiAodGhpcy5tYXN0ZXJzIHx8IFtdKS5sZW5ndGggPiAxO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvZ2dsZU1lbnUoKSB7XHJcbiAgICB0aGlzLmV4cGFuZE1lbnUudXBkYXRlKChjdXJyZW50VmFsdWU6IGJvb2xlYW4pID0+ICFjdXJyZW50VmFsdWUpO1xyXG4gICAgdGhpcy5leHBhbmRNZW51RXZlbnQoKTtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlVG9EZWZhdWx0Um91dGUoKSB7XHJcbiAgICBpZiAodGhpcy53aWR0aFBhZ2UoKSA8IDgwMCAmJiB0aGlzLmV4cGFuZE1lbnUoKSlcclxuICAgICAgdGhpcy5leHBhbmRNZW51LnNldChmYWxzZSk7XHJcblxyXG4gICAgdGhpcy5uYXZpZ2F0ZVRvRGVmYXVsdFJvdXRlRW1pdC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBnZXQgZXhpYmlyTm9tZXMoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMuc2hvd0xpY2VuY2FzKCkgJiYgKHRoaXMubWFzdGVyTmFtZSB8fCB0aGlzLmVtcHJlc2FOYW1lKTtcclxuICB9XHJcblxyXG4gIGV4aWJpck1lbnVDaGlsZChldmVudDogYW55LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLm1lbnVWaXNpdmVsLnNldChpbmRleCk7XHJcbiAgICBsZXQgbWVudVBhcmVudDtcclxuICAgIGxldCBtZW51Q2hpbGQ7XHJcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XHJcbiAgICAgIG1lbnVQYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgbWVudS1zaXN0ZW1hcy1wYXJlbnRgKTtcclxuICAgICAgbWVudUNoaWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYG1lbnUtc2lzdGVtYXMtY2hpbGRgKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBtZW51UGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYG1lbnUtcGFyZW50LSR7aW5kZXh9YCk7XHJcbiAgICAgIG1lbnVDaGlsZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBtZW51LWNoaWxkLSR7aW5kZXh9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG1lbnVQYXJlbnQpIHtcclxuICAgICAgY29uc3QgcmVjdF9wYXJlbnQgPSBtZW51UGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICBsZXQgeCA9IHJlY3RfcGFyZW50LnJpZ2h0IC0gMTA7XHJcbiAgICAgIGxldCB5ID0gcmVjdF9wYXJlbnQudG9wIC0gNTtcclxuXHJcbiAgICAgIGlmIChtZW51Q2hpbGQpIHtcclxuICAgICAgICBjb25zdCByZWN0X2NoaWxkID0gbWVudUNoaWxkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgIGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xyXG5cclxuICAgICAgICAvL1ZlcmlmaWNhIHNlIG8gbWVudSBmaWxobyB2YWkgdXRyYXBhc3NhciBvIGZpbmFsIGRvIHZpZXdwb3J0IHByYSBiYWl4b1xyXG4gICAgICAgIGlmIChyZWN0X3BhcmVudC5ib3R0b20gKyByZWN0X2NoaWxkLmhlaWdodCA+IHZpZXdwb3J0SGVpZ2h0KSB7XHJcbiAgICAgICAgICB5ID0gcmVjdF9wYXJlbnQuYm90dG9tIC0gcmVjdF9jaGlsZC5oZWlnaHQgLSAxMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFZlcmlmaWNhIHNlIG8gbWVudSBwYWkgZXN0w6EgbXVpdG8gZW0gY2ltYVxyXG4gICAgICAgIGlmIChyZWN0X3BhcmVudC50b3AgPD0gMCkge1xyXG4gICAgICAgICAgeSA9IHJlY3RfcGFyZW50LmJvdHRvbSArIDU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtZW51Q2hpbGQuc3R5bGUudG9wID0gYCR7eX1weGA7XHJcbiAgICAgICAgbWVudUNoaWxkLnN0eWxlLmxlZnQgPSBgJHt4fXB4YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZG93bmxvYWREb2ModHJpbGhhOiBhbnkpIHtcclxuICAgIHRoaXMuZG93bmxvYWREb2NFbWl0LmVtaXQodHJpbGhhKTtcclxuICB9XHJcblxyXG4gIHNob3dWaWRlb0RvYyh0cmlsaGE6IGFueSkge1xyXG4gICAgdGhpcy5zaG93VmlkZW9Eb2NFbWl0LmVtaXQodHJpbGhhKTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGZ1bGwtY29udGFpbmVyXCI+XHJcbiAgQGlmKHNob3dNZW51KSB7XHJcbiAgPHAtc2lkZWJhclxyXG4gICAgI3NpZGViYXJSZWZcclxuICAgIFt2aXNpYmxlXT1cInRydWVcIlxyXG4gICAgW3Nob3dDbG9zZUljb25dPVwiZmFsc2VcIlxyXG4gICAgW21vZGFsXT1cImZhbHNlXCJcclxuICAgIFtzdHlsZV09XCJ7IHdpZHRoOiBleHBhbmRNZW51KCkgPyAnMTdyZW0nIDogJzMuNjVyZW0nIH1cIlxyXG4gICAgc3R5bGVDbGFzcz1cInRyYW5zaXRpb24tYWxsXCJcclxuICA+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGxlc3NcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImgtZnVsbCBmbGV4IGZsZXgtY29sdW1uIG92ZXJmbG93LWhpZGRlbiBwLTJcIj5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImZsZXgtbm9uZSBmbGV4IGZsZXgtY29sdW1uIGdhcC0zIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGZsZXgtc2hyaW5rLTAgb3ZlcmZsb3ctaGlkZGVuXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8IS0tIExPR08gLS0+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCB7e1xyXG4gICAgICAgICAgICAgIGV4cGFuZE1lbnUoKSA/ICdmbGV4LXJvdycgOiAnZmxleC1jb2x1bW4nXHJcbiAgICAgICAgICAgIH19IGFsaWduLWl0ZW1zLWNlbnRlciB7e1xyXG4gICAgICAgICAgICAgIGV4cGFuZE1lbnUoKVxyXG4gICAgICAgICAgICAgICAgPyAnanVzdGlmeS1jb250ZW50LWJldHdlZW4nXHJcbiAgICAgICAgICAgICAgICA6ICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJ1xyXG4gICAgICAgICAgICB9fSBwLTJcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8IS0tIExvZ28gcGFyYSBvIG1lbnUgZXhwYW5kaWRvIC0tPlxyXG4gICAgICAgICAgICBAaWYoZXhwYW5kTWVudSgpICYmIGxvZ29NZW51RXhwYW5kKXtcclxuICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgIGFsdD1cIkNhcmRcIlxyXG4gICAgICAgICAgICAgIFtzcmNdPVwibG9nb01lbnVFeHBhbmRcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiJzIuNHJlbSdcIlxyXG4gICAgICAgICAgICAgIHdpZHRoPVwiYXV0b1wiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBwLTBcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVRvRGVmYXVsdFJvdXRlKClcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA8IS0tIExvZ28gcGFyYSBvIG1lbnUgbWluaW1pemFkby0tPlxyXG4gICAgICAgICAgICBAaWYoIWV4cGFuZE1lbnUoKSAmJiBsb2dvTWVudUhpZGUpe1xyXG4gICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgYWx0PVwiQ2FyZFwiXHJcbiAgICAgICAgICAgICAgW3NyY109XCJsb2dvTWVudUhpZGVcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiJzIuNHJlbSdcIlxyXG4gICAgICAgICAgICAgIHdpZHRoPVwiYXV0b1wiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBwLTFcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVRvRGVmYXVsdFJvdXRlKClcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA8IS0tIFRvZ2dsZSBtZW51IC0tPlxyXG4gICAgICAgICAgICBAaWYoc2hvd0V4cGFuZE1lbnUpe1xyXG4gICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBzaWRlLW1lbnUtaXRlbVwiIChjbGljayk9XCJleHBhbmRNZW51LnNldCghZXhwYW5kTWVudSgpKVwiPm1lbnU8L3NwYW4+IC0tPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICBAaWYoc2hvd1Ryb2NhRW1wcmVzYSl7XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LXt7XHJcbiAgICAgICAgICAgICAgZXhwYW5kTWVudSgpID8gJ2JldHdlZW4nIDogJ2NlbnRlcidcclxuICAgICAgICAgICAgfX0gZ2FwLTIgc2lkZS1tZW51LWl0ZW0gdHJvY2EtZW1wcmVzYS1jb250YWluZXIgbWItMyBweS0yXCJcclxuICAgICAgICAgICAgW3BUb29sdGlwXT1cIidUcm9jYXIgZGUgZW1wcmVzYSdcIlxyXG4gICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidyaWdodCdcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlRW1wcmVzYSgkZXZlbnQpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgQGlmKGV4cGFuZE1lbnUoKSAmJiBzZWxlY3RlZEVtcHJlc2Epe1xyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIHctZnVsbFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZUVtcHJlc2EoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICBAaWYodGhpcy5zZWxlY3RlZEVtcHJlc2EucmF6YW9zb2NpYWwpe1xyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQteHMgZm9udC1zZW1pYm9sZCBtci0yIGNvbG9yLXN5c3RlbVwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFN1emVdPVwiJy41cmVtJ1wiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgbmFtZUVtcHJlc2EodGhpcy5zZWxlY3RlZEVtcHJlc2EucmF6YW9zb2NpYWwpIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIH0gQGlmKHRoaXMuc2VsZWN0ZWRFbXByZXNhLmNwZmNucGope1xyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQteHMgbXQtMSBjb2xvci1zeXN0ZW1cIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmZvbnRTdXplXT1cIicuNXJlbSdcIlxyXG4gICAgICAgICAgICAgICAgPnt7IHRoaXMuc2VsZWN0ZWRFbXByZXNhLmNwZmNucGogfCBjcGZDbnBqIH19PC9zcGFuXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5zd2FwX2hvcml6PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSBNRU5VUyAtLT5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImZsZXgtMSBsaXN0LW5vbmUgbS0wIG92ZXJmbG93LXktYXV0byBtYXgtaC1mdWxsIG1lbnVzLWNvbnRhaW5lclwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPCEtLSBtZW51cyAtLT5cclxuICAgICAgICAgIEBmb3IgKG1lbnUgb2YgbWVudXMoKTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICBAaWYoIWlkc0FwbGljYXRpdm9zTWVudUhpZGUuaW5jbHVkZXMobWVudS5pZGFwbGljYXRpdm8pKXtcclxuICAgICAgICAgIDxsaT5cclxuICAgICAgICAgICAgPCEtLSBtZW51IHF1ZSBuw6NvIHRlbSBmaWxobyAtLT5cclxuICAgICAgICAgICAgQGlmKCAhbWVudS5pbmRtZW51cGFpICYmICghbWVudS5pZG1lbnVwYWkgfHwgbWVudS5pZG1lbnVwYWkgPT0gMCkpe1xyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQte3tcclxuICAgICAgICAgICAgICAgIGV4cGFuZE1lbnUoKSA/ICdiZXR3ZWVuJyA6ICdjZW50ZXInXHJcbiAgICAgICAgICAgICAgfX0gZ2FwLTIgc2lkZS1tZW51LWl0ZW1cIlxyXG4gICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZy10b3A6IDAuNzVyZW07IHBhZGRpbmctYm90dG9tOiAwLjc1cmVtXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiY2FsbFJvdXRlKG1lbnUubGluaylcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+e3tcclxuICAgICAgICAgICAgICAgIG1lbnUuaWNvbmUgfHwgXCJsZW5zX2JsdXJcIlxyXG4gICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIEBpZihleHBhbmRNZW51KCkpe1xyXG4gICAgICAgICAgICAgIDxsYWJlbD57eyBtZW51LmRlc2NyaWNhb21lbnUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPCEtLSBtZW51IGNvbSBmaWxobyAtLT5cclxuICAgICAgICAgICAgQGlmKG1lbnUuaW5kbWVudXBhaSl7XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzcz1cIm1lbnUtcGFyZW50XCJcclxuICAgICAgICAgICAgICBpZD1cIm1lbnUtcGFyZW50LXt7ICRpbmRleCB9fVwiXHJcbiAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiZXhpYmlyTWVudUNoaWxkKCRldmVudCwgJGluZGV4KVwiXHJcbiAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwibWVudVZpc2l2ZWwuc2V0KHVuZGVmaW5lZClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCIgZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LXt7XHJcbiAgICAgICAgICAgICAgICAgIGV4cGFuZE1lbnUoKSA/ICdiZXR3ZWVuJyA6ICdjZW50ZXInXHJcbiAgICAgICAgICAgICAgICB9fSBnYXAtMiBzaWRlLW1lbnUtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctdG9wOiAwLjc1cmVtOyBwYWRkaW5nLWJvdHRvbTogMC43NXJlbVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+e3tcclxuICAgICAgICAgICAgICAgICAgbWVudS5pY29uZSB8fCBcImxlbnNfYmx1clwiXHJcbiAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIEBpZihleHBhbmRNZW51KCkpe1xyXG4gICAgICAgICAgICAgICAgPGxhYmVsPnt7IG1lbnUuZGVzY3JpY2FvbWVudSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5jaGV2cm9uX3JpZ2h0PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1lbnUtY2hpbGRzXCJcclxuICAgICAgICAgICAgICAgIGlkPVwibWVudS1jaGlsZC17eyAkaW5kZXggfX1cIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLm9wYWNpdHldPVwibWVudVZpc2l2ZWwoKSA9PT0gJGluZGV4ID8gJzEnIDogJzAnXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5wb2ludGVyRXZlbnRzXT1cIlxyXG4gICAgICAgICAgICAgICAgICBtZW51VmlzaXZlbCgpID09PSAkaW5kZXggPyAnYXV0bycgOiAnbm9uZSdcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwicC0wIG0tMCBmb250LWJvbGQgcHQtMiBweC0yIHRleHQteHNcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBtZW51LmRlc2NyaWNhb21lbnUgfX1cclxuICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8cC1kaXZpZGVyXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC0wIG0tMFwiXHJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5vcGFjaXR5XT1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICB0eXBlPVwic29saWRcIlxyXG4gICAgICAgICAgICAgICAgPjwvcC1kaXZpZGVyPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtY2hpbGRzLWNvbnRlbnQgcC0wIG0tMFwiPlxyXG4gICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIHJldHVybk1lbnVDaGlsZChtZW51LmlkbWVudSk7IHRyYWNrICRpbmRleCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2lkZS1tZW51LWl0ZW0gcHktMiBweC0yIHRleHQtc21cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYWxsUm91dGUoaXRlbS5saW5rKVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmRlc2NyaWNhb21lbnUgfX1cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICAgIH0gfVxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICBAaWYodXNlU2VsZWN0aW9uQXBwcykge1xyXG4gICAgICAgIDwhLS0gQVBQUyBFIFNBSVIgLS0+XHJcbiAgICAgICAgPHAtZGl2aWRlciBjbGFzcz1cInB4LTJcIiBbc3R5bGUub3BhY2l0eV09XCIxXCIgdHlwZT1cInNvbGlkXCI+PC9wLWRpdmlkZXI+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LW5vbmUgbGlzdC1ub25lIG0tMCBvdmVyZmxvdy15LWF1dG8gbWF4LWgtZnVsbFwiPlxyXG4gICAgICAgICAgPGxpPlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtZW51LXBhcmVudFwiXHJcbiAgICAgICAgICAgICAgaWQ9XCJtZW51LXNpc3RlbWFzLXBhcmVudFwiXHJcbiAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiZXhpYmlyTWVudUNoaWxkKCRldmVudCwgLTEpXCJcclxuICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJtZW51VmlzaXZlbC5zZXQodW5kZWZpbmVkKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8IS0tIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LXt7XHJcbiAgICAgICAgICAgICAgICAgIGV4cGFuZE1lbnUoKSA/ICdiZXR3ZWVuJyA6ICdjZW50ZXInXHJcbiAgICAgICAgICAgICAgICB9fSBnYXAtMiBzaWRlLW1lbnUtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctdG9wOiAwLjc1cmVtOyBwYWRkaW5nLWJvdHRvbTogMC43NXJlbVwiXHJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiIWV4cGFuZE1lbnUoKSA/ICdTaXN0ZW1hcycgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+Z3JpZF92aWV3PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBAaWYoZXhwYW5kTWVudSgpKXtcclxuICAgICAgICAgICAgICAgIDxsYWJlbD5TaXN0ZW1hczwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5jaGV2cm9uX3JpZ2h0PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQte3tcclxuICAgICAgICAgICAgICAgICAgZXhwYW5kTWVudSgpID8gJ2JldHdlZW4nIDogJ2NlbnRlcidcclxuICAgICAgICAgICAgICAgIH19IGdhcC0yIHNpZGUtbWVudS1pdGVtLXN5c3RlbSB0cm9jYS1zaXN0ZW1hLWNvbnRhaW5lciBweS0yXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VFbXByZXNhKCRldmVudClcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDwhLS0gPHAtYXZhdGFyXHJcbiAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS10aC1sYXJnZVwiXHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJtci0yXCJcclxuICAgICAgICAgICAgICAgICAgc2l6ZT1cIm5vcm1hbFwiXHJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiAncmdiKHZhcigtLWt2LWNvbG9yLXN5c3RlbSksIDEpJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3doaXRlJ1xyXG4gICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgIC8+IC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBbc3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJ3JnYih2YXIoLS1rdi1jb2xvci1zeXN0ZW0pLCAuMiknLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmdiKHZhcigtLWt2LWNvbG9yLXN5c3RlbSksIDEpJyxcclxuICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXJhZGl1cyc6ICcuNXJlbScsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogJy4yNXJlbSdcclxuICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIGRhc2hib2FyZF9jdXN0b21pemVcclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgQGlmKGV4cGFuZE1lbnUoKSkge1xyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gdy1mdWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbSBmb250LXNlbWlib2xkIG1yLTIgY29sb3Itc3lzdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgTWV1cyBTaXN0ZW1hc1xyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiJ3JnYih2YXIoLS1rdi1jb2xvci1zeXN0ZW0pLCAxKSdcIlxyXG4gICAgICAgICAgICAgICAgICA+dW5mb2xkX21vcmU8L3NwYW5cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtZW51LWNoaWxkc1wiXHJcbiAgICAgICAgICAgICAgICBpZD1cIm1lbnUtc2lzdGVtYXMtY2hpbGRcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLm9wYWNpdHldPVwibWVudVZpc2l2ZWwoKSA9PT0gLTEgPyAnMScgOiAnMCdcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLnBvaW50ZXJFdmVudHNdPVwibWVudVZpc2l2ZWwoKSA9PT0gLTEgPyAnYXV0bycgOiAnbm9uZSdcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwicC0wIG0tMCBmb250LWJvbGQgcHQtMiBwbC0zIHRleHQteHNcIj5TaXN0ZW1hczwvcD5cclxuICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgYXBwczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgc2lkZS1tZW51LWl0ZW0gcHktMiBwbC0zIHByLTFcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbFJvdXRlKGl0ZW0ucm90YXBhZHJhbyk7IHNlbGVjdEFwcChpdGVtLmlkYXBsaWNhdGl2bylcclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiaXRlbS51cmxpY29uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoLTJyZW0gdy0ycmVtIGJvcmRlci1yb3VuZC1sZ1wiXHJcbiAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXNtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5ub21lYXBsaWNhdGl2byB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8IS0tIDxsaT5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LXt7XHJcbiAgICAgICAgICAgICAgICBleHBhbmRNZW51KCkgPyAnYmV0d2VlbicgOiAnY2VudGVyJ1xyXG4gICAgICAgICAgICAgIH19IGdhcC0yIHNpZGUtbWVudS1pdGVtXCJcclxuICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctdG9wOiAwLjc1cmVtOyBwYWRkaW5nLWJvdHRvbTogMC43NXJlbVwiXHJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIiFleHBhbmRNZW51KCkgPyAnU2FpcicgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIidyZ2JhKDI1MiwgMywgMywgMC42KSdcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJsb2dvdXQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5leGl0X3RvX2FwcDwvc3Bhbj5cclxuICAgICAgICAgICAgICBAaWYoZXhwYW5kTWVudSgpKXtcclxuICAgICAgICAgICAgICA8bGFiZWw+U2FpcjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbGk+IC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvcC1zaWRlYmFyPlxyXG4gIH1cclxuXHJcbiAgPCEtLSBTRcOHw4NPIENPTlRFw5pETyAgLS0+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJ3LWF1dG8gaC1zY3JlZW4gcGFnZS1jb250ZW50IG92ZXJmbG93LXktaGlkZGVuIGZsZXggZmxleC1jb2x1bW5cIlxyXG4gICAgaWQ9XCJwYWdlLWNvbnRlbnRcIlxyXG4gICAgc3R5bGU9XCJ3aWR0aDogMTAwdncgIWltcG9ydGFudFwiXHJcbiAgPlxyXG4gICAgPCEtLSBUT1BPIC0tPlxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgZmxleC13cmFwIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBteS0yIG14LTMgbWItMFwiXHJcbiAgICA+XHJcbiAgICAgIEBpZighc2hvd01lbnUpIHtcclxuICAgICAgPCEtLSBMb2dvIGhvbWUgLS0+XHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgPGltZyBbc3JjXT1cImxvZ29NZW51RXhwYW5kXCIgd2lkdGg9XCIxNTBcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgfSBAZWxzZSB7XHJcbiAgICAgIDwhLS0gQnJlYWRjcnVtYnMgLS0+XHJcbiAgICAgIEBpZihzaG93QnJlYWRjcnVtYikge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwiaC1mdWxsXCI+XHJcbiAgICAgICAgPHAtYnJlYWRjcnVtYlxyXG4gICAgICAgICAgKm5nSWY9XCJ3aWR0aENhcmQgPiA0MDBcIlxyXG4gICAgICAgICAgc3R5bGVDbGFzcz1cImJvcmRlci1ub25lIHAtMCBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBoLTJyZW0gYmctdHJhbnNwYXJlbnRcIlxyXG4gICAgICAgICAgW21vZGVsXT1cImJyZWFkQ3J1bWJJdGVtc1wiXHJcbiAgICAgICAgICAob25JdGVtQ2xpY2spPVwiY2FsbFJvdXRlKCRldmVudC5pdGVtLnJvdXRlckxpbmssIHRydWUpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaXRlbVwiIGxldC1pdGVtIGxldC1pPVwiaW5kZXhcIj5cclxuICAgICAgICAgICAgQGlmKGJyZWFkQ3J1bWJJdGVtcy5pbmRleE9mKGl0ZW0pIDwgYnJlYWRDcnVtYkl0ZW1zLmxlbmd0aCAtIDEpe1xyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtbm9ybWFsXCI+e3sgaXRlbS5sYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ib2xkXCI+e3sgaXRlbS5sYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L3AtYnJlYWRjcnVtYj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIH0gQGVsc2Uge1xyXG4gICAgICA8IS0tIEdIT1NUIERJViBQQVJBIE9DUFVBUiBFU1BBw4dPIE5PIFNQQUNFIEJFVFdFRU4gLS0+XHJcbiAgICAgIDxkaXY+PC9kaXY+XHJcbiAgICAgIH0gfSBAaWYgKGV4aWJpck5vbWVzKSB7IEBpZih3aWR0aENhcmQgPj0gNTE3KSB7XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cInctYXV0byBmbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCJcclxuICAgICAgPlxyXG4gICAgICAgIEBpZiAobWFzdGVyTmFtZSkge1xyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZCBzeXN0ZW0tY29sb3JcIj57eyBtYXN0ZXJOYW1lIH19PC9zcGFuPiB9IEBpZlxyXG4gICAgICAgIChlbXByZXNhTmFtZSkgezxzcGFuIGNsYXNzPVwiZW1wcmVzYS1uYW1lXCJcclxuICAgICAgICAgID5Pcmdhbml6YcOnw6NvOiB7eyBlbXByZXNhTmFtZSB9fTwvc3BhblxyXG4gICAgICAgID5cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwidy1hdXRvIGZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPCEtLSBOYXZlZ2HDp8OjbyBkZSBzaXN0ZW1hcyBlIHVzdcOhcmlvcyAtLT5cclxuICAgICAgICA8IS0tIEBmb3IgKHRvcEFjdGlvbiBvZiB0b3BNZW51QWN0aW9ucygpOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvcEFjdGlvblwiIC8+XHJcbiAgICAgICAgICAgIH0gLS0+XHJcbiAgICAgICAgPGt2LXRvcC1pY29ucyBbdG9wQWN0aW9uc109XCJ0b3BNZW51T3B0aW9uc1wiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICB9IEBlbHNlIHtcclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwidy1hdXRvIGZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPCEtLSBOYXZlZ2HDp8OjbyBkZSBzaXN0ZW1hcyBlIHVzdcOhcmlvcyAtLT5cclxuICAgICAgICA8IS0tIEBmb3IgKHRvcEFjdGlvbiBvZiB0b3BNZW51QWN0aW9ucygpOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvcEFjdGlvblwiIC8+XHJcbiAgICAgICAgICAgIH0gLS0+XHJcbiAgICAgICAgPGt2LXRvcC1pY29ucyBbdG9wQWN0aW9uc109XCJ0b3BNZW51T3B0aW9uc1wiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwidy1hdXRvIGZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIlxyXG4gICAgICA+XHJcbiAgICAgICAgQGlmIChtYXN0ZXJOYW1lKSB7IDxzcGFuIGNsYXNzPVwibWFzdGVyLW5hbWVcIj57eyBtYXN0ZXJOYW1lIH19PC9zcGFuPiB9XHJcbiAgICAgICAgQGlmIChlbXByZXNhTmFtZSkgezxzcGFuIGNsYXNzPVwiZW1wcmVzYS1uYW1lXCI+e3sgZW1wcmVzYU5hbWUgfX08L3NwYW4+IH1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIH0gfSBAZWxzZSB7IEBpZih3aWR0aFBhZ2UoKSA+IDk5Mil7XHJcbiAgICAgIDwhLS0gZHJvcGRvd24gcGFyYSBzZWxlw6fDo28gZGUgZW1wcmVzYS9saWNlbmNhIC0tPlxyXG4gICAgICA8ZHJvcGRvd24tbWFzdGVyXHJcbiAgICAgICAgKm5nSWY9XCJzaG93TGljZW5jYXMoKVwiXHJcbiAgICAgICAgY2xhc3M9XCJtYXgtdy0yNXJlbSBmbGV4LTFcIlxyXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImlkbWFzdGVyXCJcclxuICAgICAgICBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXHJcbiAgICAgICAgW21hc3RlcnNdPVwibWFzdGVyc1wiXHJcbiAgICAgICAgKG9uU2VsZWN0aW9uQ2hhbmdlKT1cImNoYW5nZUxpY2Vuc2UoJGV2ZW50KVwiXHJcbiAgICAgICAgKG9uU2VsZWN0aW9uVmFsdWUpPVwiY2hhbmdlTGljZW5zZSgkZXZlbnQpXCJcclxuICAgICAgPlxyXG4gICAgICA8L2Ryb3Bkb3duLW1hc3Rlcj5cclxuICAgICAgfVxyXG5cclxuICAgICAgPCEtLSBOYXZlZ2HDp8OjbyBkZSBzaXN0ZW1hcyBlIHVzdcOhcmlvcyAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cInctYXV0byBmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgIDxrdi10b3AtaWNvbnMgW3RvcEFjdGlvbnNdPVwidG9wTWVudU9wdGlvbnNcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgQGlmKHdpZHRoUGFnZSgpIDw9IDk5Mil7XHJcbiAgICA8IS0tIGRyb3Bkb3duIHBhcmEgc2VsZcOnw6NvIGRlIGVtcHJlc2EvbGljZW5jYSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJoLTJyZW0gbXgtM1wiPlxyXG4gICAgICA8ZHJvcGRvd24tbWFzdGVyXHJcbiAgICAgICAgKm5nSWY9XCJzaG93TGljZW5jYXMoKVwiXHJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiaWRtYXN0ZXJcIlxyXG4gICAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcclxuICAgICAgICBbbWFzdGVyc109XCJtYXN0ZXJzXCJcclxuICAgICAgICAob25TZWxlY3Rpb25DaGFuZ2UpPVwiY2hhbmdlTGljZW5zZSgkZXZlbnQpXCJcclxuICAgICAgICAob25TZWxlY3Rpb25WYWx1ZSk9XCJjaGFuZ2VMaWNlbnNlKCRldmVudClcIlxyXG4gICAgICAvPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgfVxyXG5cclxuICAgIDwhLS0gQ29udGFpbmVyIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cIm92ZXJmbG93LWhpZGRlbiBmbGV4LTEgcC0wIG0tMCBtYi0yIGgtZnVsbFwiPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJvdmVyZmxvdy15LWF1dG8gaC1mdWxsIG1heC1oLWZ1bGwge3tcclxuICAgICAgICAgICFzaG93TWVudSAmJiAnc206b3ZlcmZsb3cteS1oaWRkZW4nXHJcbiAgICAgICAgfX0gY2FyZC1jb250YWluZXJcclxuICAgICAgICBcclxuICAgICAgICB7eyB1c2VDYXJkID8gJ3VzZS1jYXJkJyA6ICcnIH19XHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBQYWluZWwgZG8gdXN1w6FyaW8gLS0+XHJcbiAgPHAtb3ZlcmxheVBhbmVsXHJcbiAgICAjbWV1c0RhZG9zUGFuZWxcclxuICAgIFtzaG93VHJhbnNpdGlvbk9wdGlvbnNdPVwiJzM1MG1zIGVhc2Utb3V0J1wiXHJcbiAgICBbaGlkZVRyYW5zaXRpb25PcHRpb25zXT1cIicyNTBtcyBlYXNlLWluJ1wiXHJcbiAgPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNvbnRhaW5lclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicC0zIGZsZXggZmxleC1jb2x1bW4gZ2FwLTJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgIDxwLWF2YXRhclxyXG4gICAgICAgICAgICBpY29uPVwicGkgcGktdXNlclwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibXItMlwiXHJcbiAgICAgICAgICAgIHNpemU9XCJ4bGFyZ2VcIlxyXG4gICAgICAgICAgICBzaGFwZT1cImNpcmNsZVwiXHJcbiAgICAgICAgICAgIFtzdHlsZV09XCJ7IHdpZHRoOiAnNC41cmVtJywgaGVpZ2h0OiAnNC41cmVtJyB9XCJcclxuICAgICAgICAgIC8+XHJcblxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gdy0xMHJlbSBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiXHJcbiAgICAgICAgICAgIFtzdHlsZV09XCJ7IGhlaWdodDogJzQuNXJlbScgfVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LW1lZGl1bSB0ZXh0LW1kIG92ZXJmbG93LWhpZGRlbiB3aGl0ZS1zcGFjZS1ub3dyYXAgdGV4dC1vdmVyZmxvdy1lbGxpcHNpc1wiXHJcbiAgICAgICAgICAgICAgPk9sw6EsIHt7IHVzZXJOYW1lLnNwbGl0KFwiIFwiKVswXSB9fSE8L3NwYW5cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1tZWRpdW0gdGV4dC14cyB0ZXh0LWdyYXktNTAwIG92ZXJmbG93LWhpZGRlbiB3aGl0ZS1zcGFjZS1ub3dyYXAgdGV4dC1vdmVyZmxvdy1lbGxpcHNpc1wiXHJcbiAgICAgICAgICAgICAgPnt7IHVzZXJFbWFpbCB9fTwvc3BhblxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxrdi1idXR0b25cclxuICAgICAgICAgICAgICBzZXZlcml0eT1cInNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgICBsYWJlbD1cIkdlcmVuY2lhciBLZWVQYXNzXCJcclxuICAgICAgICAgICAgICAob25DbGljayk9XCJhY2Nlc3NLZWVQYXNzKCRldmVudClcIlxyXG4gICAgICAgICAgICA+PC9rdi1idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgQGlmKGFjdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIDxwLWRpdmlkZXI+PC9wLWRpdmlkZXI+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIHRleHQtc21cIj5cclxuICAgICAgICAgIEBmb3IgKGFjdGlvbiBvZiBhY3Rpb25zOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHNpZGUtbWVudS1pdGVtIHAtMlwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbi5hY3Rpb24oKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj57eyBhY3Rpb24uaWNvbiB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3Bhbj57eyBhY3Rpb24ubGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfSBcclxuICAgICAgICBcclxuICAgICAgICBAaWYoc2hvd1RyaWxoYUNvbmhlY2ltZW50bykge1xyXG4gICAgICAgIDxwLWRpdmlkZXI+PC9wLWRpdmlkZXI+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIGdhcC0zXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNTAwXCI+VHJpbGhhIGRvIENvbmhlY2ltZW50bzwvc3Bhbj5cclxuICAgICAgICAgIEBmb3IodHJpbGhhIG9mIHRyaWxoYUNvbmhlY2ltZW50bzsgdHJhY2sgJGluZGV4KSB7XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMiBtYXgtdy0yNXJlbVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGJvcmRlci1yb3VuZC1tZCB0cmlsaGEtaWNvblwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIHRleHQtMnhsXCI+e3sgdHJpbGhhLmljb24gfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiBmbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHctMjByZW1cIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbSBmb250LW1lZGl1bSBvdmVyZmxvdy1oaWRkZW4gd2hpdGUtc3BhY2Utbm93cmFwIHRleHQtb3ZlcmZsb3ctZWxsaXBzaXMgdGV4dC1ncmF5LTUwMFwiPnt7dHJpbGhhLnRpdGxlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQteHMgdGV4dC1ncmF5LTQwMCBvdmVyZmxvdy1oaWRkZW4gd2hpdGUtc3BhY2Utbm93cmFwIHRleHQtb3ZlcmZsb3ctZWxsaXBzaXNcIiBbcFRvb2x0aXBdPVwidHJpbGhhLnN1YnRpdGxlXCIgW3Rvb2x0aXBQb3NpdGlvbl09XCInbGVmdCdcIj57e3RyaWxoYS5zdWJ0aXRsZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGJ1dHRvbi1pY29uXCIgW3BUb29sdGlwXT1cIidCYWl4YXIgRG9jdW1lbnRvJ1wiIChjbGljayk9XCJkb3dubG9hZERvYyh0cmlsaGEpXCI+ZG93bmxvYWQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBidXR0b24taWNvblwiIFtwVG9vbHRpcF09XCInQXNzaXN0aXIgVsOtZGVvJ1wiIChjbGljayk9XCJzaG93VmlkZW9Eb2ModHJpbGhhKVwiPnZpZGVvY2FtPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgPHAtZGl2aWRlcj48L3AtZGl2aWRlcj5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBnYXAtMiBzaWRlLW1lbnUtaXRlbSBwLTJcIlxyXG4gICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIidyZ2JhKDI1MiwgMywgMywgMC42KSdcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImxvZ291dCgkZXZlbnQpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5leGl0X3RvX2FwcDwvc3Bhbj5cclxuICAgICAgICAgIDxsYWJlbD5TYWlyPC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvcC1vdmVybGF5UGFuZWw+XHJcbjwvZGl2PlxyXG4iXX0=
|