keevo-components 1.5.141 → 1.5.142

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.
Files changed (164) hide show
  1. package/README.md +24 -24
  2. package/esm2020/keevo-components.mjs +4 -4
  3. package/esm2020/lib/api/base-components/base-component-button.mjs +36 -36
  4. package/esm2020/lib/api/base-components/base-component-chart.mjs +92 -92
  5. package/esm2020/lib/api/base-components/base-component-crud-form.mjs +278 -278
  6. package/esm2020/lib/api/base-components/base-component-crud-list.mjs +67 -67
  7. package/esm2020/lib/api/base-components/base-component-crud.mjs +65 -65
  8. package/esm2020/lib/api/base-components/base-component-dropdown.mjs +161 -161
  9. package/esm2020/lib/api/base-components/base-component-input.mjs +93 -93
  10. package/esm2020/lib/api/base-components/base-component-multi-select.mjs +128 -128
  11. package/esm2020/lib/api/base-components/base-component.mjs +49 -49
  12. package/esm2020/lib/api/components/chart/chart.config.mjs +2 -2
  13. package/esm2020/lib/api/components/chart/chart.model.mjs +2 -2
  14. package/esm2020/lib/api/components/chart/orchart.config.mjs +2 -2
  15. package/esm2020/lib/api/components/chart/orchart.item.mjs +2 -2
  16. package/esm2020/lib/api/components/dropdown/filtro.combo.mjs +2 -2
  17. package/esm2020/lib/api/components/error/error.component.mjs +26 -26
  18. package/esm2020/lib/api/components/error/kverror.module.mjs +35 -35
  19. package/esm2020/lib/api/components/table/action-item.mjs +2 -2
  20. package/esm2020/lib/api/components/table/kv-menuitem.mjs +3 -3
  21. package/esm2020/lib/api/components/table/table.config.column.mjs +2 -2
  22. package/esm2020/lib/api/components/table/table.config.mjs +2 -2
  23. package/esm2020/lib/api/components/table/table.paginate.mjs +9 -9
  24. package/esm2020/lib/api/helpers/component-providers.mjs +16 -16
  25. package/esm2020/lib/api/helpers/translate-primeng.mjs +23 -23
  26. package/esm2020/lib/api/models/menu/master.model.mjs +2 -2
  27. package/esm2020/lib/api/models/menu/menu.model.mjs +2 -2
  28. package/esm2020/lib/api/models/menu/menucompleto.model.mjs +2 -2
  29. package/esm2020/lib/api/models/menu/sistemamenu.model.mjs +2 -2
  30. package/esm2020/lib/api/modules/primeng.module.mjs +247 -247
  31. package/esm2020/lib/api/services/base.api.service.mjs +74 -0
  32. package/esm2020/lib/api/services/component.service.mjs +27 -27
  33. package/esm2020/lib/api/services/form.service.mjs +102 -102
  34. package/esm2020/lib/api/services/imagens.service.mjs +22 -22
  35. package/esm2020/lib/api/services/notification.service.mjs +67 -67
  36. package/esm2020/lib/api/services/object.service.mjs +26 -26
  37. package/esm2020/lib/buttons/button-personalize/button-personalize.component.mjs +17 -17
  38. package/esm2020/lib/buttons/button-popup/button-popup.component.mjs +30 -0
  39. package/esm2020/lib/buttons/button-secondary/button-secondary.component.mjs +17 -17
  40. package/esm2020/lib/buttons/button-success/button-success.component.mjs +17 -17
  41. package/esm2020/lib/buttons/kvbutton.module.mjs +39 -34
  42. package/esm2020/lib/chart/chart.component.mjs +145 -145
  43. package/esm2020/lib/chart/kvchart.module.mjs +32 -32
  44. package/esm2020/lib/directives/template.directive.mjs +24 -24
  45. package/esm2020/lib/inputs/check/check.component.mjs +26 -26
  46. package/esm2020/lib/inputs/dropdown/dropdown.component.mjs +36 -36
  47. package/esm2020/lib/inputs/input-calendar/input-calendar.component.mjs +88 -88
  48. package/esm2020/lib/inputs/input-mask/input-mask.component.mjs +22 -22
  49. package/esm2020/lib/inputs/input-number/input-number.component.mjs +56 -56
  50. package/esm2020/lib/inputs/input-password/input-password.component.mjs +32 -32
  51. package/esm2020/lib/inputs/input-text/input-text.component.mjs +20 -20
  52. package/esm2020/lib/inputs/input-text-checkbox/input-text-checkbox.component.mjs +36 -36
  53. package/esm2020/lib/inputs/input-textarea/input-textarea.component.mjs +42 -42
  54. package/esm2020/lib/inputs/input-time/input-time.component.mjs +23 -23
  55. package/esm2020/lib/inputs/kvinputs.module.mjs +99 -99
  56. package/esm2020/lib/inputs/multi-select/multi-select.component.mjs +37 -37
  57. package/esm2020/lib/inputs/radio-group/radio-group.component.mjs +49 -49
  58. package/esm2020/lib/inputs/switch/switch.component.mjs +32 -32
  59. package/esm2020/lib/keevo-components.module.mjs +91 -91
  60. package/esm2020/lib/login/kvlogin.module.mjs +47 -47
  61. package/esm2020/lib/login/login.component.mjs +38 -38
  62. package/esm2020/lib/menu/kvmenu.module.mjs +43 -43
  63. package/esm2020/lib/menu/menu.component.mjs +212 -212
  64. package/esm2020/lib/orgchart/orgchart.component.mjs +100 -100
  65. package/esm2020/lib/orgchart/orgchart.module.mjs +24 -24
  66. package/esm2020/lib/picklist/kvpicklist.module.mjs +32 -32
  67. package/esm2020/lib/picklist/picklist.component.mjs +48 -48
  68. package/esm2020/lib/pipes/codigofile.pipe.mjs +19 -19
  69. package/esm2020/lib/pipes/cpfcnpj.pipe.mjs +25 -25
  70. package/esm2020/lib/pipes/pipes.module.mjs +34 -34
  71. package/esm2020/lib/pipes/telefone.pipe.mjs +45 -45
  72. package/esm2020/lib/table/kvtable.module.mjs +32 -32
  73. package/esm2020/lib/table/table.component.mjs +476 -476
  74. package/esm2020/lib/tree-table/kv-treetable.component.mjs +290 -290
  75. package/esm2020/lib/tree-table/kv-treetable.module.mjs +32 -32
  76. package/esm2020/lib/tree-view/kvtree-view.module.mjs +28 -28
  77. package/esm2020/lib/tree-view/tree-view.component.mjs +29 -29
  78. package/esm2020/lib/workspace/kvworkspace.module.mjs +47 -47
  79. package/esm2020/lib/workspace/workspace.component.mjs +77 -77
  80. package/esm2020/public-api.mjs +124 -70
  81. package/fesm2015/keevo-components.mjs +3838 -3737
  82. package/fesm2015/keevo-components.mjs.map +1 -1
  83. package/fesm2020/keevo-components.mjs +3829 -3728
  84. package/fesm2020/keevo-components.mjs.map +1 -1
  85. package/index.d.ts +5 -5
  86. package/lib/api/base-components/base-component-button.d.ts +14 -14
  87. package/lib/api/base-components/base-component-chart.d.ts +40 -40
  88. package/lib/api/base-components/base-component-crud-form.d.ts +134 -134
  89. package/lib/api/base-components/base-component-crud-list.d.ts +63 -63
  90. package/lib/api/base-components/base-component-crud.d.ts +36 -36
  91. package/lib/api/base-components/base-component-dropdown.d.ts +42 -42
  92. package/lib/api/base-components/base-component-input.d.ts +31 -31
  93. package/lib/api/base-components/base-component-multi-select.d.ts +35 -35
  94. package/lib/api/base-components/base-component.d.ts +21 -21
  95. package/lib/api/components/chart/chart.config.d.ts +11 -11
  96. package/lib/api/components/chart/chart.model.d.ts +9 -9
  97. package/lib/api/components/chart/orchart.config.d.ts +35 -35
  98. package/lib/api/components/chart/orchart.item.d.ts +26 -26
  99. package/lib/api/components/dropdown/filtro.combo.d.ts +4 -4
  100. package/lib/api/components/error/error.component.d.ts +12 -12
  101. package/lib/api/components/error/kverror.module.d.ts +10 -10
  102. package/lib/api/components/table/action-item.d.ts +5 -5
  103. package/lib/api/components/table/kv-menuitem.d.ts +9 -9
  104. package/lib/api/components/table/table.config.column.d.ts +21 -21
  105. package/lib/api/components/table/table.config.d.ts +17 -17
  106. package/lib/api/components/table/table.paginate.d.ts +6 -6
  107. package/lib/api/helpers/component-providers.d.ts +2 -2
  108. package/lib/api/helpers/translate-primeng.d.ts +4 -4
  109. package/lib/api/models/menu/master.model.d.ts +6 -6
  110. package/lib/api/models/menu/menu.model.d.ts +10 -10
  111. package/lib/api/models/menu/menucompleto.model.d.ts +6 -6
  112. package/lib/api/models/menu/sistemamenu.model.d.ts +8 -8
  113. package/lib/api/modules/primeng.module.d.ts +60 -60
  114. package/lib/api/services/base.api.service.d.ts +25 -0
  115. package/lib/api/services/component.service.d.ts +11 -11
  116. package/lib/api/services/form.service.d.ts +27 -27
  117. package/lib/api/services/imagens.service.d.ts +8 -8
  118. package/lib/api/services/notification.service.d.ts +25 -25
  119. package/lib/api/services/object.service.d.ts +8 -8
  120. package/lib/buttons/button-personalize/button-personalize.component.d.ts +7 -7
  121. package/lib/buttons/button-popup/button-popup.component.d.ts +13 -0
  122. package/lib/buttons/button-secondary/button-secondary.component.d.ts +7 -7
  123. package/lib/buttons/button-success/button-success.component.d.ts +7 -7
  124. package/lib/buttons/kvbutton.module.d.ts +11 -10
  125. package/lib/chart/chart.component.d.ts +56 -56
  126. package/lib/chart/kvchart.module.d.ts +10 -10
  127. package/lib/directives/template.directive.d.ts +11 -11
  128. package/lib/inputs/check/check.component.d.ts +11 -11
  129. package/lib/inputs/dropdown/dropdown.component.d.ts +14 -14
  130. package/lib/inputs/input-calendar/input-calendar.component.d.ts +27 -27
  131. package/lib/inputs/input-mask/input-mask.component.d.ts +10 -10
  132. package/lib/inputs/input-number/input-number.component.d.ts +18 -18
  133. package/lib/inputs/input-password/input-password.component.d.ts +13 -13
  134. package/lib/inputs/input-text/input-text.component.d.ts +9 -9
  135. package/lib/inputs/input-text-checkbox/input-text-checkbox.component.d.ts +15 -15
  136. package/lib/inputs/input-textarea/input-textarea.component.d.ts +16 -16
  137. package/lib/inputs/input-time/input-time.component.d.ts +10 -10
  138. package/lib/inputs/kvinputs.module.d.ts +23 -23
  139. package/lib/inputs/multi-select/multi-select.component.d.ts +12 -12
  140. package/lib/inputs/radio-group/radio-group.component.d.ts +17 -17
  141. package/lib/inputs/switch/switch.component.d.ts +13 -13
  142. package/lib/keevo-components.module.d.ts +17 -17
  143. package/lib/login/kvlogin.module.d.ts +13 -13
  144. package/lib/login/login.component.d.ts +17 -17
  145. package/lib/menu/kvmenu.module.d.ts +12 -12
  146. package/lib/menu/menu.component.d.ts +67 -67
  147. package/lib/orgchart/orgchart.component.d.ts +27 -27
  148. package/lib/orgchart/orgchart.module.d.ts +9 -9
  149. package/lib/picklist/kvpicklist.module.d.ts +10 -10
  150. package/lib/picklist/picklist.component.d.ts +20 -20
  151. package/lib/pipes/codigofile.pipe.d.ts +7 -7
  152. package/lib/pipes/cpfcnpj.pipe.d.ts +7 -7
  153. package/lib/pipes/pipes.module.d.ts +10 -10
  154. package/lib/pipes/telefone.pipe.d.ts +7 -7
  155. package/lib/table/kvtable.module.d.ts +10 -10
  156. package/lib/table/table.component.d.ts +103 -103
  157. package/lib/tree-table/kv-treetable.component.d.ts +69 -69
  158. package/lib/tree-table/kv-treetable.module.d.ts +11 -11
  159. package/lib/tree-view/kvtree-view.module.d.ts +9 -9
  160. package/lib/tree-view/tree-view.component.d.ts +14 -14
  161. package/lib/workspace/kvworkspace.module.d.ts +13 -13
  162. package/lib/workspace/workspace.component.d.ts +28 -28
  163. package/package.json +1 -1
  164. package/public-api.d.ts +120 -66
@@ -1,212 +1,212 @@
1
- import { Component, EventEmitter, HostListener, Input, Output, ViewChild } from '@angular/core';
2
- import { NavigationEnd } from '@angular/router';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/router";
5
- import * as i2 from "@angular/common";
6
- import * as i3 from "primeng/api";
7
- import * as i4 from "primeng/button";
8
- import * as i5 from "primeng/card";
9
- import * as i6 from "primeng/tooltip";
10
- import * as i7 from "primeng/dialog";
11
- import * as i8 from "primeng/divider";
12
- import * as i9 from "primeng/dropdown";
13
- import * as i10 from "primeng/overlaypanel";
14
- import * as i11 from "primeng/ripple";
15
- import * as i12 from "primeng/sidebar";
16
- import * as i13 from "primeng/styleclass";
17
- import * as i14 from "primeng/breadcrumb";
18
- import * as i15 from "@angular/forms";
19
- import * as i16 from "../buttons/button-success/button-success.component";
20
- export class MenuComponent {
21
- onWindowResize() {
22
- this.heigthCard = Number(document.getElementById('page-content')?.offsetHeight);
23
- this.widthCard = Number(window.innerWidth) - (this.expandMenu ? 333 : 93);
24
- this.cdr.detectChanges();
25
- }
26
- constructor(cdr, router, route) {
27
- this.cdr = cdr;
28
- this.router = router;
29
- this.route = route;
30
- this.menuCompleto = [];
31
- this.licencas = [];
32
- this.breadCrumbs = false;
33
- this.licencaChange = new EventEmitter();
34
- this.gerenciarKeePassEvent = new EventEmitter();
35
- this.sairEvent = new EventEmitter();
36
- this.expandMenuEmit = new EventEmitter();
37
- this.licencasOptions = [];
38
- this.menusFiltrados = [];
39
- this.menus = [];
40
- this.breadCrumbItems = [];
41
- this.expandMenu = true;
42
- this.visibleDialogLicenca = false;
43
- }
44
- ngOnInit() {
45
- this.configurarLicencas();
46
- if (this.breadCrumbs) {
47
- this.router.events.subscribe(event => {
48
- if (event instanceof NavigationEnd) {
49
- this.configurarBreadCrumbs();
50
- }
51
- });
52
- }
53
- this.heigthCard = Number(document.getElementById('page-content')?.offsetHeight);
54
- this.widthCard = Number(window.innerWidth) - (this.expandMenu ? 333 : 93);
55
- }
56
- configurarLicencas() {
57
- setTimeout(() => this.setLicenca(), 1500);
58
- this.licencas.forEach((x, i) => {
59
- this.licencasOptions.push({
60
- id: i,
61
- descricao: x.razaosocial,
62
- cnpj: x.cnpj
63
- });
64
- });
65
- var licenca = this.licencasOptions.find((x) => x.cnpj == this.licencaSelecionada.cnpj);
66
- if (licenca != undefined)
67
- this.licencaSelected = licenca;
68
- }
69
- configurarBreadCrumbs() {
70
- const rootRoute = this.route.root;
71
- this.breadCrumbItems = this.getBreadcrumbs(rootRoute);
72
- }
73
- getBreadcrumbs(route, url = '', breadcrumbs = []) {
74
- const childrenRoutes = route.children;
75
- if (childrenRoutes.length === 0) {
76
- return breadcrumbs;
77
- }
78
- for (const childRoute of childrenRoutes) {
79
- const routeUrl = childRoute.snapshot.url.map(segment => segment.path).join('/');
80
- if (routeUrl !== '') {
81
- url += `/${routeUrl}`;
82
- }
83
- const breadcrumbLabel = childRoute.snapshot.data['breadcrumb'];
84
- if (breadcrumbLabel) {
85
- breadcrumbs.push({ label: breadcrumbLabel, routerLink: url });
86
- }
87
- return this.getBreadcrumbs(childRoute, url, breadcrumbs);
88
- }
89
- return breadcrumbs;
90
- }
91
- closeCallback(e) {
92
- this.sidebarRef.close(e);
93
- }
94
- MascaraNomeLicenca(nomeLicenca) {
95
- if (nomeLicenca) {
96
- if (nomeLicenca.length > 24)
97
- return nomeLicenca.substring(0, 24) + '...';
98
- else
99
- return nomeLicenca;
100
- }
101
- else
102
- return '';
103
- }
104
- MascaraCnpj(cnpj) {
105
- const cnpjLimpo = cnpj.replace(/\D/g, '');
106
- return cnpjLimpo.replace(/^(\d{2})(\d{3})(\d{3})(\d{4})(\d{2})$/, '$1.$2.$3/$4-$5');
107
- }
108
- definirMenusPorSistema(idsistema) {
109
- this.menus =
110
- this.menuCompleto.find((x) => x.sistema.idsistema == idsistema)?.menus ||
111
- [];
112
- console.log(this.menus, 'menus');
113
- console.log(this.menuCompleto, 'menuCompleto');
114
- console.log(this.menus[0].menupai, 'menupai');
115
- if (this.menus[0].menupai) {
116
- var filhos = this.retornarMenuFilhos(this.menus[0].idsistema, this.menus[0].idmenu);
117
- if (filhos != undefined)
118
- this.callRoute(filhos[0].link, true);
119
- }
120
- else
121
- this.callRoute(this.menus[0].link, true);
122
- this.sistemasPanel.hide();
123
- }
124
- retornarMenuFilhos(idsistema, idmenu) {
125
- return this.menuCompleto
126
- .find((x) => x.sistema.idsistema == idsistema)
127
- ?.menus.filter((x) => x.idmenupai == idmenu);
128
- }
129
- callRoute(e, expand) {
130
- if (!expand)
131
- !this.expandMenu ? this.expandMenu = !this.expandMenu : '';
132
- this.router.navigateByUrl(e);
133
- }
134
- toggleMenu() {
135
- this.expandMenu = !this.expandMenu;
136
- this.expandMenuEvent();
137
- }
138
- setLicenca() {
139
- var licenca = this.licencas.find((licenca) => licenca.cnpj == this.licencaSelected.cnpj);
140
- if (licenca)
141
- this.licencaSelecionada = licenca;
142
- this.visibleDialogLicenca = false;
143
- this.licencaChange.emit(this.licencaSelecionada);
144
- this.definirMenusPorSistema(this.menuCompleto[0]?.sistema.idsistema);
145
- }
146
- gerenciarKeePass(event) {
147
- this.sistemasPanel.hide();
148
- this.gerenciarKeePassEvent.emit(event);
149
- }
150
- sair(event) {
151
- this.sistemasPanel.hide();
152
- this.sairEvent.emit(event);
153
- }
154
- expandMenuEvent() {
155
- this.expandMenuEmit.emit(this.expandMenu);
156
- }
157
- ajustarHeigthCard() {
158
- if (this.widthCard > 400) {
159
- if (this.breadCrumbs)
160
- return 105;
161
- else
162
- return 85;
163
- }
164
- else
165
- return 83;
166
- }
167
- verificarPaginaSelecionada(link) {
168
- if (this.router.url.includes(link))
169
- return 'bg-green-600';
170
- else
171
- return '';
172
- }
173
- }
174
- MenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: MenuComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
175
- MenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: MenuComponent, selector: "kv-menu", inputs: { menuCompleto: "menuCompleto", licencas: "licencas", licencaSelecionada: "licencaSelecionada", logoImage: "logoImage", nomeUsuario: "nomeUsuario", breadCrumbs: "breadCrumbs" }, outputs: { licencaChange: "licencaChange", gerenciarKeePassEvent: "gerenciarKeePassEvent", sairEvent: "sairEvent", expandMenuEmit: "expandMenuEmit" }, host: { listeners: { "window:resize": "onWindowResize($event)" } }, viewQueries: [{ propertyName: "sidebarRef", first: true, predicate: ["sidebarRef"], descendants: true }, { propertyName: "sistemasPanel", first: true, predicate: ["sistemasPanel"], descendants: true }, { propertyName: "meusDadosPanel", first: true, predicate: ["meusDadosPanel"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-row overflow-y-hidden w- full-container\">\r\n\r\n <div [style]=\"{minWidth: expandMenu ? '300px' : '60px'}\"></div>\r\n\r\n <p-sidebar\r\n #sidebarRef\r\n [visible]=\"true\"\r\n [showCloseIcon]=\"false\"\r\n [modal]=\"false\"\r\n [style]=\"{width: expandMenu ? '300px' : '60px'}\"\r\n >\r\n <ng-template pTemplate=\"headless\">\r\n <div class=\"flex flex-column {{expandMenu ? 'mx-1' : 'mx-1'}}\">\r\n <div class=\"flex flex-column gap-2 justify-content-between flex-shrink-0 mx-2\">\r\n <div\r\n class=\"flex flex-row align-items-center {{expandMenu ? 'justify-content-between' : 'justify-content-center'}} py-3\"\r\n >\r\n <img\r\n *ngIf=\"expandMenu\"\r\n alt=\"Card\"\r\n [src]=\"logoImage\"\r\n width=\"150\"\r\n />\r\n\r\n <button\r\n pButton\r\n class=\"p-button-rounded p-button-text padding-style h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu\"\r\n (click)=\"toggleMenu()\"\r\n [pTooltip]=\"expandMenu ? 'Ocutar Menu' : 'Expandir Menu'\"\r\n [tooltipPosition]=\"'right'\"\r\n >\r\n <i class=\"material-symbols-outlined\">\r\n menu\r\n </i>\r\n </button>\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center {{expandMenu ? 'justify-content-between' : 'justify-content-center'}}\"\r\n >\r\n <div\r\n class=\"flex flex-column cursor-pointer\"\r\n *ngIf=\"expandMenu\"\r\n (click)=\"visibleDialogLicenca = !visibleDialogLicenca\"\r\n >\r\n <span\r\n class=\"text-sm font-semibold mr-2\"\r\n [pTooltip]=\"this.licencaSelecionada.razaosocial\"\r\n [tooltipPosition]=\"'right'\"\r\n >\r\n {{MascaraNomeLicenca(this.licencaSelecionada.razaosocial)}}\r\n </span>\r\n <span class=\"text-sm mt-1\">{{MascaraCnpj(this.licencaSelecionada.cnpj)}}</span>\r\n </div>\r\n\r\n <button\r\n pButton\r\n class=\"p-button-rounded p-button-text padding-style h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu\"\r\n (click)=\"visibleDialogLicenca = !visibleDialogLicenca\"\r\n [pTooltip]=\"'Alterar Licen\u00E7a'\"\r\n [tooltipPosition]=\"'right'\"\r\n >\r\n <i class=\"material-symbols-outlined\">\r\n sync_alt\r\n </i>\r\n </button>\r\n\r\n </div>\r\n <p-divider type=\"solid\"></p-divider>\r\n </div>\r\n\r\n <div\r\n class=\"list-none m-0 card-container {{expandMenu ? 'mx-1' : ''}}\"\r\n [style.max-height]=\"(heigthCard - 220) + 'px'\"\r\n style=\"overflow-y: auto;\"\r\n >\r\n <!-- menus -->\r\n <li *ngFor=\"let menu of menus\">\r\n <!-- menu que n\u00E3o tem filho -->\r\n <a\r\n (click)=\"callRoute(menu.link)\"\r\n *ngIf=\"!menu.menupai && menu.idmenupai == 0\"\r\n pRipple\r\n [pTooltip]=\"!expandMenu ? menu.descricaomenu : ''\"\r\n [tooltipPosition]=\"'right'\"\r\n class=\"{{verificarPaginaSelecionada(menu.link)}} menu-option flex align-items-center no-underline {{!expandMenu ? 'justify-content-center' : ''}} cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple\"\r\n >\r\n\r\n <i\r\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}}\"\r\n *ngIf=\"menu.icone && menu.icone !== ''\"\r\n >\r\n {{ menu.icone }}\r\n </i>\r\n <span\r\n class=\"text-base text-blue-900 font-medium\"\r\n *ngIf=\"expandMenu\"\r\n >{{ menu.descricaomenu }}</span>\r\n </a>\r\n\r\n <!-- menu com filho -->\r\n <div *ngIf=\"menu.menupai\">\r\n <a\r\n pRipple\r\n pStyleClass=\"@next\"\r\n enterClass=\"hidden\"\r\n enterActiveClass=\"slidedown\"\r\n leaveToClass=\"hidden\"\r\n leaveActiveClass=\"slideup\"\r\n class=\"menu-option flex align-items-center {{!expandMenu ? 'justify-content-center' : 'justify-content-between'}} cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple\"\r\n [tooltipPosition]=\"'right'\"\r\n [pTooltip]=\"!expandMenu ? menu.descricaomenu : ''\"\r\n (click)=\"!expandMenu ? expandMenu = !expandMenu : ''\"\r\n >\r\n <div class=\"flex flex-row align-items-center\">\r\n\r\n <i\r\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}}\"\r\n *ngIf=\"menu.icone && menu.icone !== ''\"\r\n >\r\n {{ menu.icone }}\r\n </i>\r\n <span\r\n class=\"text-base text-blue-900 font-medium\"\r\n *ngIf=\"expandMenu\"\r\n >{{ menu.descricaomenu }}</span>\r\n </div>\r\n <i\r\n class=\"pi pi-chevron-down text-blue-900 mr-1\"\r\n *ngIf=\"expandMenu\"\r\n ></i>\r\n </a>\r\n\r\n <!-- filhos -->\r\n <div\r\n class=\"list-none py-0 pl-3 pr-0 m-0 hidden overflow-y-hidden transition-all transition-duration-400 transition-ease-in-out\"\r\n >\r\n <li *ngFor=\"\r\n let filho of retornarMenuFilhos(menu.idsistema, menu.idmenu)\r\n \">\r\n <a\r\n *ngIf=\"expandMenu\"\r\n (click)=\"callRoute(filho.link)\"\r\n pRipple\r\n class=\"{{verificarPaginaSelecionada(filho.link)}} menu-option flex align-items-center no-underline cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple p-2\"\r\n >\r\n <i\r\n class=\"pi pi-chart-line mr-2 ml-1 adjust-icon-menu\"\r\n *ngIf=\"filho.icone && filho.icone !== ''\"\r\n ></i>\r\n <span\r\n class=\"text-base text-blue-900\"\r\n *ngIf=\"expandMenu\"\r\n >{{ filho.descricaomenu }}</span>\r\n </a>\r\n </li>\r\n </div>\r\n </div>\r\n</div>\r\n</div>\r\n</ng-template>\r\n</p-sidebar>\r\n\r\n\r\n<div\r\n class=\"w-auto h-screen page-content overflow-y-hidden\"\r\n id=\"page-content\"\r\n>\r\n\r\n <div class=\"flex flex-row align-items-center justify-content-between m-3\">\r\n <div *ngIf=\"breadCrumbs\">\r\n <p class=\"text-xl font-semibold text-blue-900 breadcrumb-title\">{{breadCrumbItems[breadCrumbItems.length -\r\n 1]?.label}}</p>\r\n <p-breadcrumb\r\n *ngIf=\"widthCard > 400\"\r\n styleClass=\"border-none p-0 flex align-items-center h-2rem\"\r\n [model]=\"breadCrumbItems\"\r\n [style]=\"{backgroundColor: '#d4d3d3'}\"\r\n (onItemClick)=\"callRoute($event.item.routerLink, true)\"\r\n ></p-breadcrumb>\r\n </div>\r\n\r\n <div *ngIf=\"!breadCrumbs\"></div>\r\n\r\n <div class=\"w-auto flex flex-row align-items-center gap-2\">\r\n <button\r\n pButton\r\n class=\"p-button-rounded p-button-text h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu padding-style\"\r\n (click)=\"sistemasPanel.toggle($event)\"\r\n [pTooltip]=\"'Sistemas'\"\r\n [tooltipPosition]=\"'left'\"\r\n >\r\n <i class=\"material-symbols-outlined\">\r\n apps\r\n </i>\r\n </button>\r\n <button\r\n pButton\r\n class=\"p-button-rounded p-button-text h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu padding-style\"\r\n (click)=\"meusDadosPanel.toggle($event)\"\r\n [pTooltip]=\"'Menu do Usu\u00E1rio'\"\r\n [tooltipPosition]=\"'left'\"\r\n >\r\n <i class=\"material-symbols-outlined\">\r\n person\r\n </i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n\r\n <p-card\r\n class=\"card-container\"\r\n styleClass=\"m-3 border-noround overflow-y-auto card-container\"\r\n [style]=\"{height: heigthCard - ajustarHeigthCard() + 'px'}\"\r\n >\r\n <div class=\"card-container w-full\">\r\n <ng-content></ng-content>\r\n </div>\r\n </p-card>\r\n\r\n</div>\r\n\r\n\r\n</div>\r\n\r\n<p-overlayPanel\r\n #sistemasPanel\r\n [showTransitionOptions]=\"'350ms ease-out'\"\r\n [hideTransitionOptions]=\"'250ms ease-in'\"\r\n>\r\n\r\n <ng-template pTemplate=\"container\">\r\n\r\n <p class=\"title-style mt-3\">Sistemas</p>\r\n <div\r\n class=\"flex flex-row flex-wrap gap-2 align-items-center justify-content-center mt-5 mb-3\"\r\n style=\"width: 250px; height: 100%;\"\r\n >\r\n <button\r\n *ngFor=\"let menu of menuCompleto\"\r\n pButton\r\n pRipple\r\n class=\"btn-sistema-2 btn-sistema hover-btn-cor-padrao remove-focus h-4rem w-4rem\"\r\n (click)=\"definirMenusPorSistema(menu.sistema.idsistema)\"\r\n [pTooltip]=\"menu.sistema.descricaosistema\"\r\n [tooltipPosition]=\"'left'\"\r\n >\r\n <!-- <img\r\n alt=\"logo\"\r\n style=\"width: 2rem; height: 2rem;\"\r\n /> -->\r\n {{ menu.sistema.nomesistema.charAt(0).toUpperCase() }}\r\n\r\n </button>\r\n\r\n\r\n <!-- <p-button styleClass=\"p-button-outlined\">\r\n <img alt=\"logo\" src=\"https://primefaces.org/cdn/primeng/images/primeng-icon.svg\" style=\"width: 1.5rem\" />\r\n <span class=\"ml-2 font-bold\">PrimeNG</span>\r\n </p-button> -->\r\n\r\n </div>\r\n </ng-template>\r\n</p-overlayPanel>\r\n\r\n<p-overlayPanel\r\n #meusDadosPanel\r\n [showTransitionOptions]=\"'350ms ease-out'\"\r\n [hideTransitionOptions]=\"'250ms ease-in'\"\r\n>\r\n\r\n <ng-template pTemplate=\"container\">\r\n\r\n <p class=\"title-style mt-3\">Ol\u00E1, {{nomeUsuario ? nomeUsuario.split(' ')[0] : 'Usu\u00E1rio'}} !</p>\r\n <div class=\"mt-5 mb-3\">\r\n\r\n </div>\r\n\r\n <p-button\r\n icon=\"pi pi-lock\"\r\n label=\"Ger\u00EAnciar KeevoPass\"\r\n (onClick)=\"gerenciarKeePass($event)\"\r\n styleClass=\"border-noround w-full p-button-text text-blue-900\"\r\n [disabled]=\"true\"\r\n ></p-button>\r\n <p-button\r\n icon=\"pi pi-sign-out\"\r\n label=\"Sair\"\r\n (onClick)=\"sair($event)\"\r\n styleClass=\"border-noround w-full p-button-text text-blue-900\"\r\n ></p-button>\r\n </ng-template>\r\n\r\n</p-overlayPanel>\r\n\r\n<p-dialog\r\n [(visible)]=\"visibleDialogLicenca\"\r\n [modal]=\"true\"\r\n [draggable]=\"false\"\r\n header=\"Trocar Licen\u00E7a\"\r\n [style]=\"{width: '50vh' }\"\r\n>\r\n <div class=\"flex flex-column align-items-end\">\r\n\r\n <div class=\"w-full\">\r\n <p-dropdown\r\n styleClass=\"w-full\"\r\n [options]=\"licencasOptions\"\r\n [(ngModel)]=\"licencaSelected\"\r\n optionLabel=\"descricao\"\r\n ></p-dropdown>\r\n </div>\r\n\r\n <kv-button-success\r\n [label]=\"'Salvar'\"\r\n class=\"mt-2\"\r\n (onClick)=\"setLicenca()\"\r\n ></kv-button-success>\r\n\r\n </div>\r\n\r\n</p-dialog>", styles: [".material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:1em;display:inline-block;width:1em;height:1em;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}::ng-deep .p-button:focus{box-shadow:none;-webkit-box-shadow:none;-moz-box-shadow:none}::ng-deep .p-overlaypanel .p-overlaypanel-content{padding:0}::ng-deep .hover-btn-cor-padrao.p-button:enabled:hover{background:#0c3e66;border-color:#002542}.p-button.p-button-icon-only.p-button-rounded{background:#0c3e66;border-color:#002542}::ng-deep .remove-focus:focus{border:none}::ng-deep .p-sidebar .p-sidebar-content{padding:0}::ng-deep .sidebar-header-sistema.p-sidebar .p-sidebar-header{padding-top:.5rem;padding-right:0;padding-bottom:0;padding-left:0;display:block}.btn-sistema{display:flex;align-items:center;justify-content:center;background-color:#0c3e66;font-size:20px}::ng-deep .p-sidebar .p-sidebar-header{padding:0rem!important}::ng-deep body{margin:0!important}::ng-deep .p-breadcrumb ul li.p-breadcrumb-chevron{position:relative;top:3px}.page-content{background:linear-gradient(to bottom,#d4d3d3 20%,#ffffff 30%)}*{margin:0}p .item-menu{color:#0c3e66;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol}::ng-deep .p-breadcrumb ul li:last-child .p-menuitem-text{font-weight:700}::ng-deep .p-breadcrumb ul li .p-menuitem-link .p-menuitem-text{color:#0c3e66!important;font-weight:500}span,.breadcrumb-title{font-size:15px!important;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol}::ng-deep .card-container{overflow-x:hidden}::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}.title-style{position:relative;top:10px;margin-left:20px;font-size:25px;color:#002542;border-bottom:2px solid green;font-weight:600;display:inline}::ng-deep p-sidebar .p-sidebar-content{overflow-y:hidden}::ng-deep p-dialog .p-dialog-content{overflow-y:unset}.icon-menu{color:#002542;display:flex;justify-content:center;align-items:center}::ng-deep .padding-style{padding:15px!important}::ng-deep .menu-option{padding:15px 5px!important}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i4.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass", "ariaLabel"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i5.Card, selector: "p-card", inputs: ["header", "subheader", "style", "styleClass"] }, { kind: "directive", type: i6.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: i7.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "component", type: i8.Divider, selector: "p-divider", inputs: ["styleClass", "style", "layout", "type", "align"] }, { kind: "component", type: i9.Dropdown, selector: "p-dropdown", inputs: ["scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "filterPlaceholder", "filterLocale", "inputId", "selectId", "dataKey", "filterBy", "autofocus", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "overlayDirection", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "options", "filterValue"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i10.OverlayPanel, selector: "p-overlayPanel", inputs: ["dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i11.Ripple, selector: "[pRipple]" }, { kind: "component", type: i12.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: i13.StyleClass, selector: "[pStyleClass]", inputs: ["pStyleClass", "enterClass", "enterActiveClass", "enterToClass", "leaveClass", "leaveActiveClass", "leaveToClass", "hideOnOutsideClick", "toggleClass", "hideOnEscape"] }, { kind: "component", type: i14.Breadcrumb, selector: "p-breadcrumb", inputs: ["model", "style", "styleClass", "home", "homeAriaLabel"], outputs: ["onItemClick"] }, { kind: "directive", type: i15.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i15.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i16.ButtonSuccessComponent, selector: "kv-button-success" }] });
176
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: MenuComponent, decorators: [{
177
- type: Component,
178
- args: [{ selector: 'kv-menu', template: "<div class=\"flex flex-row overflow-y-hidden w- full-container\">\r\n\r\n <div [style]=\"{minWidth: expandMenu ? '300px' : '60px'}\"></div>\r\n\r\n <p-sidebar\r\n #sidebarRef\r\n [visible]=\"true\"\r\n [showCloseIcon]=\"false\"\r\n [modal]=\"false\"\r\n [style]=\"{width: expandMenu ? '300px' : '60px'}\"\r\n >\r\n <ng-template pTemplate=\"headless\">\r\n <div class=\"flex flex-column {{expandMenu ? 'mx-1' : 'mx-1'}}\">\r\n <div class=\"flex flex-column gap-2 justify-content-between flex-shrink-0 mx-2\">\r\n <div\r\n class=\"flex flex-row align-items-center {{expandMenu ? 'justify-content-between' : 'justify-content-center'}} py-3\"\r\n >\r\n <img\r\n *ngIf=\"expandMenu\"\r\n alt=\"Card\"\r\n [src]=\"logoImage\"\r\n width=\"150\"\r\n />\r\n\r\n <button\r\n pButton\r\n class=\"p-button-rounded p-button-text padding-style h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu\"\r\n (click)=\"toggleMenu()\"\r\n [pTooltip]=\"expandMenu ? 'Ocutar Menu' : 'Expandir Menu'\"\r\n [tooltipPosition]=\"'right'\"\r\n >\r\n <i class=\"material-symbols-outlined\">\r\n menu\r\n </i>\r\n </button>\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center {{expandMenu ? 'justify-content-between' : 'justify-content-center'}}\"\r\n >\r\n <div\r\n class=\"flex flex-column cursor-pointer\"\r\n *ngIf=\"expandMenu\"\r\n (click)=\"visibleDialogLicenca = !visibleDialogLicenca\"\r\n >\r\n <span\r\n class=\"text-sm font-semibold mr-2\"\r\n [pTooltip]=\"this.licencaSelecionada.razaosocial\"\r\n [tooltipPosition]=\"'right'\"\r\n >\r\n {{MascaraNomeLicenca(this.licencaSelecionada.razaosocial)}}\r\n </span>\r\n <span class=\"text-sm mt-1\">{{MascaraCnpj(this.licencaSelecionada.cnpj)}}</span>\r\n </div>\r\n\r\n <button\r\n pButton\r\n class=\"p-button-rounded p-button-text padding-style h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu\"\r\n (click)=\"visibleDialogLicenca = !visibleDialogLicenca\"\r\n [pTooltip]=\"'Alterar Licen\u00E7a'\"\r\n [tooltipPosition]=\"'right'\"\r\n >\r\n <i class=\"material-symbols-outlined\">\r\n sync_alt\r\n </i>\r\n </button>\r\n\r\n </div>\r\n <p-divider type=\"solid\"></p-divider>\r\n </div>\r\n\r\n <div\r\n class=\"list-none m-0 card-container {{expandMenu ? 'mx-1' : ''}}\"\r\n [style.max-height]=\"(heigthCard - 220) + 'px'\"\r\n style=\"overflow-y: auto;\"\r\n >\r\n <!-- menus -->\r\n <li *ngFor=\"let menu of menus\">\r\n <!-- menu que n\u00E3o tem filho -->\r\n <a\r\n (click)=\"callRoute(menu.link)\"\r\n *ngIf=\"!menu.menupai && menu.idmenupai == 0\"\r\n pRipple\r\n [pTooltip]=\"!expandMenu ? menu.descricaomenu : ''\"\r\n [tooltipPosition]=\"'right'\"\r\n class=\"{{verificarPaginaSelecionada(menu.link)}} menu-option flex align-items-center no-underline {{!expandMenu ? 'justify-content-center' : ''}} cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple\"\r\n >\r\n\r\n <i\r\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}}\"\r\n *ngIf=\"menu.icone && menu.icone !== ''\"\r\n >\r\n {{ menu.icone }}\r\n </i>\r\n <span\r\n class=\"text-base text-blue-900 font-medium\"\r\n *ngIf=\"expandMenu\"\r\n >{{ menu.descricaomenu }}</span>\r\n </a>\r\n\r\n <!-- menu com filho -->\r\n <div *ngIf=\"menu.menupai\">\r\n <a\r\n pRipple\r\n pStyleClass=\"@next\"\r\n enterClass=\"hidden\"\r\n enterActiveClass=\"slidedown\"\r\n leaveToClass=\"hidden\"\r\n leaveActiveClass=\"slideup\"\r\n class=\"menu-option flex align-items-center {{!expandMenu ? 'justify-content-center' : 'justify-content-between'}} cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple\"\r\n [tooltipPosition]=\"'right'\"\r\n [pTooltip]=\"!expandMenu ? menu.descricaomenu : ''\"\r\n (click)=\"!expandMenu ? expandMenu = !expandMenu : ''\"\r\n >\r\n <div class=\"flex flex-row align-items-center\">\r\n\r\n <i\r\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}}\"\r\n *ngIf=\"menu.icone && menu.icone !== ''\"\r\n >\r\n {{ menu.icone }}\r\n </i>\r\n <span\r\n class=\"text-base text-blue-900 font-medium\"\r\n *ngIf=\"expandMenu\"\r\n >{{ menu.descricaomenu }}</span>\r\n </div>\r\n <i\r\n class=\"pi pi-chevron-down text-blue-900 mr-1\"\r\n *ngIf=\"expandMenu\"\r\n ></i>\r\n </a>\r\n\r\n <!-- filhos -->\r\n <div\r\n class=\"list-none py-0 pl-3 pr-0 m-0 hidden overflow-y-hidden transition-all transition-duration-400 transition-ease-in-out\"\r\n >\r\n <li *ngFor=\"\r\n let filho of retornarMenuFilhos(menu.idsistema, menu.idmenu)\r\n \">\r\n <a\r\n *ngIf=\"expandMenu\"\r\n (click)=\"callRoute(filho.link)\"\r\n pRipple\r\n class=\"{{verificarPaginaSelecionada(filho.link)}} menu-option flex align-items-center no-underline cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple p-2\"\r\n >\r\n <i\r\n class=\"pi pi-chart-line mr-2 ml-1 adjust-icon-menu\"\r\n *ngIf=\"filho.icone && filho.icone !== ''\"\r\n ></i>\r\n <span\r\n class=\"text-base text-blue-900\"\r\n *ngIf=\"expandMenu\"\r\n >{{ filho.descricaomenu }}</span>\r\n </a>\r\n </li>\r\n </div>\r\n </div>\r\n</div>\r\n</div>\r\n</ng-template>\r\n</p-sidebar>\r\n\r\n\r\n<div\r\n class=\"w-auto h-screen page-content overflow-y-hidden\"\r\n id=\"page-content\"\r\n>\r\n\r\n <div class=\"flex flex-row align-items-center justify-content-between m-3\">\r\n <div *ngIf=\"breadCrumbs\">\r\n <p class=\"text-xl font-semibold text-blue-900 breadcrumb-title\">{{breadCrumbItems[breadCrumbItems.length -\r\n 1]?.label}}</p>\r\n <p-breadcrumb\r\n *ngIf=\"widthCard > 400\"\r\n styleClass=\"border-none p-0 flex align-items-center h-2rem\"\r\n [model]=\"breadCrumbItems\"\r\n [style]=\"{backgroundColor: '#d4d3d3'}\"\r\n (onItemClick)=\"callRoute($event.item.routerLink, true)\"\r\n ></p-breadcrumb>\r\n </div>\r\n\r\n <div *ngIf=\"!breadCrumbs\"></div>\r\n\r\n <div class=\"w-auto flex flex-row align-items-center gap-2\">\r\n <button\r\n pButton\r\n class=\"p-button-rounded p-button-text h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu padding-style\"\r\n (click)=\"sistemasPanel.toggle($event)\"\r\n [pTooltip]=\"'Sistemas'\"\r\n [tooltipPosition]=\"'left'\"\r\n >\r\n <i class=\"material-symbols-outlined\">\r\n apps\r\n </i>\r\n </button>\r\n <button\r\n pButton\r\n class=\"p-button-rounded p-button-text h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu padding-style\"\r\n (click)=\"meusDadosPanel.toggle($event)\"\r\n [pTooltip]=\"'Menu do Usu\u00E1rio'\"\r\n [tooltipPosition]=\"'left'\"\r\n >\r\n <i class=\"material-symbols-outlined\">\r\n person\r\n </i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n\r\n <p-card\r\n class=\"card-container\"\r\n styleClass=\"m-3 border-noround overflow-y-auto card-container\"\r\n [style]=\"{height: heigthCard - ajustarHeigthCard() + 'px'}\"\r\n >\r\n <div class=\"card-container w-full\">\r\n <ng-content></ng-content>\r\n </div>\r\n </p-card>\r\n\r\n</div>\r\n\r\n\r\n</div>\r\n\r\n<p-overlayPanel\r\n #sistemasPanel\r\n [showTransitionOptions]=\"'350ms ease-out'\"\r\n [hideTransitionOptions]=\"'250ms ease-in'\"\r\n>\r\n\r\n <ng-template pTemplate=\"container\">\r\n\r\n <p class=\"title-style mt-3\">Sistemas</p>\r\n <div\r\n class=\"flex flex-row flex-wrap gap-2 align-items-center justify-content-center mt-5 mb-3\"\r\n style=\"width: 250px; height: 100%;\"\r\n >\r\n <button\r\n *ngFor=\"let menu of menuCompleto\"\r\n pButton\r\n pRipple\r\n class=\"btn-sistema-2 btn-sistema hover-btn-cor-padrao remove-focus h-4rem w-4rem\"\r\n (click)=\"definirMenusPorSistema(menu.sistema.idsistema)\"\r\n [pTooltip]=\"menu.sistema.descricaosistema\"\r\n [tooltipPosition]=\"'left'\"\r\n >\r\n <!-- <img\r\n alt=\"logo\"\r\n style=\"width: 2rem; height: 2rem;\"\r\n /> -->\r\n {{ menu.sistema.nomesistema.charAt(0).toUpperCase() }}\r\n\r\n </button>\r\n\r\n\r\n <!-- <p-button styleClass=\"p-button-outlined\">\r\n <img alt=\"logo\" src=\"https://primefaces.org/cdn/primeng/images/primeng-icon.svg\" style=\"width: 1.5rem\" />\r\n <span class=\"ml-2 font-bold\">PrimeNG</span>\r\n </p-button> -->\r\n\r\n </div>\r\n </ng-template>\r\n</p-overlayPanel>\r\n\r\n<p-overlayPanel\r\n #meusDadosPanel\r\n [showTransitionOptions]=\"'350ms ease-out'\"\r\n [hideTransitionOptions]=\"'250ms ease-in'\"\r\n>\r\n\r\n <ng-template pTemplate=\"container\">\r\n\r\n <p class=\"title-style mt-3\">Ol\u00E1, {{nomeUsuario ? nomeUsuario.split(' ')[0] : 'Usu\u00E1rio'}} !</p>\r\n <div class=\"mt-5 mb-3\">\r\n\r\n </div>\r\n\r\n <p-button\r\n icon=\"pi pi-lock\"\r\n label=\"Ger\u00EAnciar KeevoPass\"\r\n (onClick)=\"gerenciarKeePass($event)\"\r\n styleClass=\"border-noround w-full p-button-text text-blue-900\"\r\n [disabled]=\"true\"\r\n ></p-button>\r\n <p-button\r\n icon=\"pi pi-sign-out\"\r\n label=\"Sair\"\r\n (onClick)=\"sair($event)\"\r\n styleClass=\"border-noround w-full p-button-text text-blue-900\"\r\n ></p-button>\r\n </ng-template>\r\n\r\n</p-overlayPanel>\r\n\r\n<p-dialog\r\n [(visible)]=\"visibleDialogLicenca\"\r\n [modal]=\"true\"\r\n [draggable]=\"false\"\r\n header=\"Trocar Licen\u00E7a\"\r\n [style]=\"{width: '50vh' }\"\r\n>\r\n <div class=\"flex flex-column align-items-end\">\r\n\r\n <div class=\"w-full\">\r\n <p-dropdown\r\n styleClass=\"w-full\"\r\n [options]=\"licencasOptions\"\r\n [(ngModel)]=\"licencaSelected\"\r\n optionLabel=\"descricao\"\r\n ></p-dropdown>\r\n </div>\r\n\r\n <kv-button-success\r\n [label]=\"'Salvar'\"\r\n class=\"mt-2\"\r\n (onClick)=\"setLicenca()\"\r\n ></kv-button-success>\r\n\r\n </div>\r\n\r\n</p-dialog>", styles: [".material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:1em;display:inline-block;width:1em;height:1em;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}::ng-deep .p-button:focus{box-shadow:none;-webkit-box-shadow:none;-moz-box-shadow:none}::ng-deep .p-overlaypanel .p-overlaypanel-content{padding:0}::ng-deep .hover-btn-cor-padrao.p-button:enabled:hover{background:#0c3e66;border-color:#002542}.p-button.p-button-icon-only.p-button-rounded{background:#0c3e66;border-color:#002542}::ng-deep .remove-focus:focus{border:none}::ng-deep .p-sidebar .p-sidebar-content{padding:0}::ng-deep .sidebar-header-sistema.p-sidebar .p-sidebar-header{padding-top:.5rem;padding-right:0;padding-bottom:0;padding-left:0;display:block}.btn-sistema{display:flex;align-items:center;justify-content:center;background-color:#0c3e66;font-size:20px}::ng-deep .p-sidebar .p-sidebar-header{padding:0rem!important}::ng-deep body{margin:0!important}::ng-deep .p-breadcrumb ul li.p-breadcrumb-chevron{position:relative;top:3px}.page-content{background:linear-gradient(to bottom,#d4d3d3 20%,#ffffff 30%)}*{margin:0}p .item-menu{color:#0c3e66;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol}::ng-deep .p-breadcrumb ul li:last-child .p-menuitem-text{font-weight:700}::ng-deep .p-breadcrumb ul li .p-menuitem-link .p-menuitem-text{color:#0c3e66!important;font-weight:500}span,.breadcrumb-title{font-size:15px!important;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol}::ng-deep .card-container{overflow-x:hidden}::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}.title-style{position:relative;top:10px;margin-left:20px;font-size:25px;color:#002542;border-bottom:2px solid green;font-weight:600;display:inline}::ng-deep p-sidebar .p-sidebar-content{overflow-y:hidden}::ng-deep p-dialog .p-dialog-content{overflow-y:unset}.icon-menu{color:#002542;display:flex;justify-content:center;align-items:center}::ng-deep .padding-style{padding:15px!important}::ng-deep .menu-option{padding:15px 5px!important}\n"] }]
179
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.Router }, { type: i1.ActivatedRoute }]; }, propDecorators: { menuCompleto: [{
180
- type: Input
181
- }], licencas: [{
182
- type: Input
183
- }], licencaSelecionada: [{
184
- type: Input
185
- }], logoImage: [{
186
- type: Input
187
- }], nomeUsuario: [{
188
- type: Input
189
- }], breadCrumbs: [{
190
- type: Input
191
- }], licencaChange: [{
192
- type: Output
193
- }], gerenciarKeePassEvent: [{
194
- type: Output
195
- }], sairEvent: [{
196
- type: Output
197
- }], expandMenuEmit: [{
198
- type: Output
199
- }], sidebarRef: [{
200
- type: ViewChild,
201
- args: ['sidebarRef']
202
- }], sistemasPanel: [{
203
- type: ViewChild,
204
- args: ['sistemasPanel']
205
- }], meusDadosPanel: [{
206
- type: ViewChild,
207
- args: ['meusDadosPanel']
208
- }], onWindowResize: [{
209
- type: HostListener,
210
- args: ['window:resize', ['$event']]
211
- }] } });
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvbWVudS9tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9tZW51L21lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFPOUksT0FBTyxFQUFrQixhQUFhLEVBQXNCLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFwRixNQUFNLE9BQU8sYUFBYTtJQWlDeEIsY0FBYztRQUNaLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxZQUFvQixHQUFzQixFQUFZLE1BQWMsRUFBVSxLQUFxQjtRQUEvRSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUFZLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQXJDMUYsaUJBQVksR0FBd0IsRUFBRSxDQUFDO1FBQ3ZDLGFBQVEsR0FBa0IsRUFBRSxDQUFBO1FBSTVCLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBRTVC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ZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBtZW51Q29tcGxldG9Nb2RlbCB9IGZyb20gJy4uL2FwaS9tb2RlbHMvbWVudS9tZW51Y29tcGxldG8ubW9kZWwnO1xyXG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgU2lkZWJhciB9IGZyb20gJ3ByaW1lbmcvc2lkZWJhcic7XHJcbmltcG9ydCB7IG1lbnVNb2RlbCB9IGZyb20gJy4uL2FwaS9tb2RlbHMvbWVudS9tZW51Lm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgbWFzdGVyTW9kZWwgfSBmcm9tICcuLi9hcGkvbW9kZWxzL21lbnUvbWFzdGVyLm1vZGVsJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FbmQsIFJvdXRlciwgVXJsU2VnbWVudCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE92ZXJsYXlQYW5lbCB9IGZyb20gJ3ByaW1lbmcvb3ZlcmxheXBhbmVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAna3YtbWVudScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL21lbnUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL21lbnUuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBASW5wdXQoKSBtZW51Q29tcGxldG86IG1lbnVDb21wbGV0b01vZGVsW10gPSBbXTtcclxuICBASW5wdXQoKSBsaWNlbmNhczogbWFzdGVyTW9kZWxbXSA9IFtdXHJcbiAgQElucHV0KCkgbGljZW5jYVNlbGVjaW9uYWRhITogbWFzdGVyTW9kZWw7XHJcbiAgQElucHV0KCkgbG9nb0ltYWdlITogYW55O1xyXG4gIEBJbnB1dCgpIG5vbWVVc3VhcmlvITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGJyZWFkQ3J1bWJzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSBsaWNlbmNhQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZ2VyZW5jaWFyS2VlUGFzc0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgc2FpckV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZXhwYW5kTWVudUVtaXQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc2lkZWJhclJlZicpIHNpZGViYXJSZWYhOiBTaWRlYmFyO1xyXG4gIEBWaWV3Q2hpbGQoJ3Npc3RlbWFzUGFuZWwnKSBzaXN0ZW1hc1BhbmVsITogT3ZlcmxheVBhbmVsO1xyXG4gIEBWaWV3Q2hpbGQoJ21ldXNEYWRvc1BhbmVsJykgbWV1c0RhZG9zUGFuZWwhOiBPdmVybGF5UGFuZWw7XHJcblxyXG4gIGxpY2VuY2FzT3B0aW9uczogeyBpZDogbnVtYmVyLCBkZXNjcmljYW86IHN0cmluZywgY25wajogc3RyaW5nIH1bXSA9IFtdXHJcbiAgbGljZW5jYVNlbGVjdGVkITogeyBpZDogbnVtYmVyLCBkZXNjcmljYW86IHN0cmluZywgY25wajogc3RyaW5nIH07XHJcblxyXG4gIG1lbnVzRmlsdHJhZG9zOiBtZW51Q29tcGxldG9Nb2RlbFtdID0gW107XHJcbiAgbWVudXM6IG1lbnVNb2RlbFtdID0gW107XHJcblxyXG4gIGJyZWFkQ3J1bWJJdGVtczogeyBsYWJlbDogc3RyaW5nLCByb3V0ZXJMaW5rOiBzdHJpbmcgfVtdID0gW107XHJcblxyXG4gIGhlaWd0aENhcmQhOiBudW1iZXI7XHJcbiAgd2lkdGhDYXJkITogbnVtYmVyO1xyXG4gIGV4cGFuZE1lbnU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICB2aXNpYmxlRGlhbG9nTGljZW5jYTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcclxuICBvbldpbmRvd1Jlc2l6ZSgpIHtcclxuICAgIHRoaXMuaGVpZ3RoQ2FyZCA9IE51bWJlcihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFnZS1jb250ZW50Jyk/Lm9mZnNldEhlaWdodCk7XHJcbiAgICB0aGlzLndpZHRoQ2FyZCA9IE51bWJlcih3aW5kb3cuaW5uZXJXaWR0aCkgLSAodGhpcy5leHBhbmRNZW51ID8gMzMzIDogOTMpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbmZpZ3VyYXJMaWNlbmNhcygpO1xyXG5cclxuICAgIGlmICh0aGlzLmJyZWFkQ3J1bWJzKSB7XHJcbiAgICAgIHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcclxuICAgICAgICAgIHRoaXMuY29uZmlndXJhckJyZWFkQ3J1bWJzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmhlaWd0aENhcmQgPSBOdW1iZXIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhZ2UtY29udGVudCcpPy5vZmZzZXRIZWlnaHQpO1xyXG4gICAgdGhpcy53aWR0aENhcmQgPSBOdW1iZXIod2luZG93LmlubmVyV2lkdGgpIC0gKHRoaXMuZXhwYW5kTWVudSA/IDMzMyA6IDkzKTtcclxuICB9XHJcblxyXG4gIGNvbmZpZ3VyYXJMaWNlbmNhcygpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXRMaWNlbmNhKCksIDE1MDApXHJcblxyXG4gICAgdGhpcy5saWNlbmNhcy5mb3JFYWNoKCh4LCBpKSA9PiB7XHJcbiAgICAgIHRoaXMubGljZW5jYXNPcHRpb25zLnB1c2goe1xyXG4gICAgICAgIGlkOiBpLFxyXG4gICAgICAgIGRlc2NyaWNhbzogeC5yYXphb3NvY2lhbCxcclxuICAgICAgICBjbnBqOiB4LmNucGpcclxuICAgICAgfSlcclxuICAgIH0pXHJcblxyXG4gICAgdmFyIGxpY2VuY2EgPSB0aGlzLmxpY2VuY2FzT3B0aW9ucy5maW5kKCh4KSA9PiB4LmNucGogPT0gdGhpcy5saWNlbmNhU2VsZWNpb25hZGEuY25waik7XHJcblxyXG4gICAgaWYgKGxpY2VuY2EgIT0gdW5kZWZpbmVkKVxyXG4gICAgICB0aGlzLmxpY2VuY2FTZWxlY3RlZCA9IGxpY2VuY2E7XHJcbiAgfVxyXG5cclxuXHJcbiAgY29uZmlndXJhckJyZWFkQ3J1bWJzKCkge1xyXG4gICAgY29uc3Qgcm9vdFJvdXRlID0gdGhpcy5yb3V0ZS5yb290O1xyXG4gICAgdGhpcy5icmVhZENydW1iSXRlbXMgPSB0aGlzLmdldEJyZWFkY3J1bWJzKHJvb3RSb3V0ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEJyZWFkY3J1bWJzKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSwgdXJsOiBzdHJpbmcgPSAnJywgYnJlYWRjcnVtYnM6IHsgbGFiZWw6IHN0cmluZywgcm91dGVyTGluazogc3RyaW5nIH1bXSA9IFtdKTogeyBsYWJlbDogc3RyaW5nLCByb3V0ZXJMaW5rOiBzdHJpbmcgfVtdIHtcclxuICAgIGNvbnN0IGNoaWxkcmVuUm91dGVzID0gcm91dGUuY2hpbGRyZW47XHJcblxyXG4gICAgaWYgKGNoaWxkcmVuUm91dGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gYnJlYWRjcnVtYnM7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChjb25zdCBjaGlsZFJvdXRlIG9mIGNoaWxkcmVuUm91dGVzKSB7XHJcbiAgICAgIGNvbnN0IHJvdXRlVXJsID0gY2hpbGRSb3V0ZS5zbmFwc2hvdC51cmwubWFwKHNlZ21lbnQgPT4gc2VnbWVudC5wYXRoKS5qb2luKCcvJyk7XHJcbiAgICAgIGlmIChyb3V0ZVVybCAhPT0gJycpIHtcclxuICAgICAgICB1cmwgKz0gYC8ke3JvdXRlVXJsfWA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGJyZWFkY3J1bWJMYWJlbCA9IGNoaWxkUm91dGUuc25hcHNob3QuZGF0YVsnYnJlYWRjcnVtYiddO1xyXG4gICAgICBpZiAoYnJlYWRjcnVtYkxhYmVsKSB7XHJcbiAgICAgICAgYnJlYWRjcnVtYnMucHVzaCh7IGxhYmVsOiBicmVhZGNydW1iTGFiZWwsIHJvdXRlckxpbms6IHVybCB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnJlYWRjcnVtYnMoY2hpbGRSb3V0ZSwgdXJsLCBicmVhZGNydW1icyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGJyZWFkY3J1bWJzO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VDYWxsYmFjayhlOiBFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5zaWRlYmFyUmVmLmNsb3NlKGUpO1xyXG4gIH1cclxuXHJcbiAgTWFzY2FyYU5vbWVMaWNlbmNhKG5vbWVMaWNlbmNhOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKG5vbWVMaWNlbmNhKSB7XHJcbiAgICAgIGlmIChub21lTGljZW5jYS5sZW5ndGggPiAyNClcclxuICAgICAgICByZXR1cm4gbm9tZUxpY2VuY2Euc3Vic3RyaW5nKDAsIDI0KSArICcuLi4nO1xyXG4gICAgICBlbHNlIHJldHVybiBub21lTGljZW5jYTtcclxuICAgIH0gZWxzZSByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBNYXNjYXJhQ25waihjbnBqOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY25wakxpbXBvID0gY25wai5yZXBsYWNlKC9cXEQvZywgJycpO1xyXG5cclxuICAgIHJldHVybiBjbnBqTGltcG8ucmVwbGFjZShcclxuICAgICAgL14oXFxkezJ9KShcXGR7M30pKFxcZHszfSkoXFxkezR9KShcXGR7Mn0pJC8sXHJcbiAgICAgICckMS4kMi4kMy8kNC0kNSdcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBkZWZpbmlyTWVudXNQb3JTaXN0ZW1hKGlkc2lzdGVtYTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLm1lbnVzID1cclxuICAgICAgdGhpcy5tZW51Q29tcGxldG8uZmluZCgoeCkgPT4geC5zaXN0ZW1hLmlkc2lzdGVtYSA9PSBpZHNpc3RlbWEpPy5tZW51cyB8fFxyXG4gICAgICBbXTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLm1lbnVzLCAnbWVudXMnKVxyXG4gICAgY29uc29sZS5sb2codGhpcy5tZW51Q29tcGxldG8sICdtZW51Q29tcGxldG8nKVxyXG4gICAgY29uc29sZS5sb2codGhpcy5tZW51c1swXS5tZW51cGFpLCAnbWVudXBhaScpXHJcblxyXG4gICAgaWYgKHRoaXMubWVudXNbMF0ubWVudXBhaSkge1xyXG4gICAgICB2YXIgZmlsaG9zID0gdGhpcy5yZXRvcm5hck1lbnVGaWxob3ModGhpcy5tZW51c1swXS5pZHNpc3RlbWEsIHRoaXMubWVudXNbMF0uaWRtZW51KTtcclxuICAgICAgaWYgKGZpbGhvcyAhPSB1bmRlZmluZWQpXHJcbiAgICAgICAgdGhpcy5jYWxsUm91dGUoZmlsaG9zWzBdLmxpbmssIHRydWUpXHJcbiAgICB9IGVsc2UgdGhpcy5jYWxsUm91dGUodGhpcy5tZW51c1swXS5saW5rLCB0cnVlKVxyXG5cclxuICAgIHRoaXMuc2lzdGVtYXNQYW5lbC5oaWRlKCk7XHJcbiAgfVxyXG5cclxuICByZXRvcm5hck1lbnVGaWxob3MoaWRzaXN0ZW1hOiBudW1iZXIsIGlkbWVudTogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5tZW51Q29tcGxldG9cclxuICAgICAgLmZpbmQoKHgpID0+IHguc2lzdGVtYS5pZHNpc3RlbWEgPT0gaWRzaXN0ZW1hKVxyXG4gICAgICA/Lm1lbnVzLmZpbHRlcigoeCkgPT4geC5pZG1lbnVwYWkgPT0gaWRtZW51KTtcclxuICB9XHJcblxyXG4gIGNhbGxSb3V0ZShlOiBhbnksIGV4cGFuZD86IGJvb2xlYW4pIHtcclxuICAgIGlmICghZXhwYW5kKVxyXG4gICAgICAhdGhpcy5leHBhbmRNZW51ID8gdGhpcy5leHBhbmRNZW51ID0gIXRoaXMuZXhwYW5kTWVudSA6ICcnXHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGUpXHJcbiAgfVxyXG5cclxuICB0b2dnbGVNZW51KCkge1xyXG4gICAgdGhpcy5leHBhbmRNZW51ID0gIXRoaXMuZXhwYW5kTWVudTtcclxuICAgIHRoaXMuZXhwYW5kTWVudUV2ZW50KClcclxuICB9XHJcblxyXG4gIHNldExpY2VuY2EoKSB7XHJcbiAgICB2YXIgbGljZW5jYSA9IHRoaXMubGljZW5jYXMuZmluZCgobGljZW5jYSkgPT4gbGljZW5jYS5jbnBqID09IHRoaXMubGljZW5jYVNlbGVjdGVkLmNucGopO1xyXG4gICAgaWYgKGxpY2VuY2EpIHRoaXMubGljZW5jYVNlbGVjaW9uYWRhID0gbGljZW5jYTtcclxuXHJcbiAgICB0aGlzLnZpc2libGVEaWFsb2dMaWNlbmNhID0gZmFsc2VcclxuXHJcbiAgICB0aGlzLmxpY2VuY2FDaGFuZ2UuZW1pdCh0aGlzLmxpY2VuY2FTZWxlY2lvbmFkYSk7XHJcblxyXG4gICAgdGhpcy5kZWZpbmlyTWVudXNQb3JTaXN0ZW1hKHRoaXMubWVudUNvbXBsZXRvWzBdPy5zaXN0ZW1hLmlkc2lzdGVtYSlcclxuICB9XHJcblxyXG4gIGdlcmVuY2lhcktlZVBhc3MoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5zaXN0ZW1hc1BhbmVsLmhpZGUoKTtcclxuICAgIHRoaXMuZ2VyZW5jaWFyS2VlUGFzc0V2ZW50LmVtaXQoZXZlbnQpXHJcbiAgfVxyXG5cclxuICBzYWlyKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuc2lzdGVtYXNQYW5lbC5oaWRlKCk7XHJcbiAgICB0aGlzLnNhaXJFdmVudC5lbWl0KGV2ZW50KVxyXG4gIH1cclxuXHJcbiAgZXhwYW5kTWVudUV2ZW50KCkge1xyXG4gICAgdGhpcy5leHBhbmRNZW51RW1pdC5lbWl0KHRoaXMuZXhwYW5kTWVudSk7XHJcbiAgfVxyXG5cclxuICBhanVzdGFySGVpZ3RoQ2FyZCgpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMud2lkdGhDYXJkID4gNDAwKSB7XHJcbiAgICAgIGlmICh0aGlzLmJyZWFkQ3J1bWJzKSByZXR1cm4gMTA1XHJcbiAgICAgIGVsc2UgcmV0dXJuIDg1XHJcbiAgICB9IGVsc2UgcmV0dXJuIDgzXHJcbiAgfVxyXG5cclxuICB2ZXJpZmljYXJQYWdpbmFTZWxlY2lvbmFkYShsaW5rOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMucm91dGVyLnVybC5pbmNsdWRlcyhsaW5rKSkgcmV0dXJuICdiZy1ncmVlbi02MDAnXHJcbiAgICBlbHNlIHJldHVybiAnJztcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgb3ZlcmZsb3cteS1oaWRkZW4gdy0gZnVsbC1jb250YWluZXJcIj5cclxuXHJcbiAgPGRpdiBbc3R5bGVdPVwie21pbldpZHRoOiBleHBhbmRNZW51ID8gJzMwMHB4JyA6ICc2MHB4J31cIj48L2Rpdj5cclxuXHJcbiAgPHAtc2lkZWJhclxyXG4gICAgI3NpZGViYXJSZWZcclxuICAgIFt2aXNpYmxlXT1cInRydWVcIlxyXG4gICAgW3Nob3dDbG9zZUljb25dPVwiZmFsc2VcIlxyXG4gICAgW21vZGFsXT1cImZhbHNlXCJcclxuICAgIFtzdHlsZV09XCJ7d2lkdGg6IGV4cGFuZE1lbnUgPyAnMzAwcHgnIDogJzYwcHgnfVwiXHJcbiAgPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRsZXNzXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIHt7ZXhwYW5kTWVudSA/ICdteC0xJyA6ICdteC0xJ319XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gZ2FwLTIganVzdGlmeS1jb250ZW50LWJldHdlZW4gZmxleC1zaHJpbmstMCBteC0yXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIge3tleHBhbmRNZW51ID8gJ2p1c3RpZnktY29udGVudC1iZXR3ZWVuJyA6ICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJ319IHB5LTNcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJleHBhbmRNZW51XCJcclxuICAgICAgICAgICAgICBhbHQ9XCJDYXJkXCJcclxuICAgICAgICAgICAgICBbc3JjXT1cImxvZ29JbWFnZVwiXHJcbiAgICAgICAgICAgICAgd2lkdGg9XCIxNTBcIlxyXG4gICAgICAgICAgICAvPlxyXG5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIHBCdXR0b25cclxuICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dCBwYWRkaW5nLXN0eWxlIGgtMnJlbSB3LTJyZW0gaG92ZXI6YmctZ3JlZW4tNjAwIGhvdmVyOnRleHQtd2hpdGUgaWNvbi1tZW51XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlTWVudSgpXCJcclxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiZXhwYW5kTWVudSA/ICdPY3V0YXIgTWVudScgOiAnRXhwYW5kaXIgTWVudSdcIlxyXG4gICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ3JpZ2h0J1wiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5cclxuICAgICAgICAgICAgICAgIG1lbnVcclxuICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIHt7ZXhwYW5kTWVudSA/ICdqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbicgOiAnanVzdGlmeS1jb250ZW50LWNlbnRlcid9fVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZXhwYW5kTWVudVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInZpc2libGVEaWFsb2dMaWNlbmNhID0gIXZpc2libGVEaWFsb2dMaWNlbmNhXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtc20gZm9udC1zZW1pYm9sZCBtci0yXCJcclxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJ0aGlzLmxpY2VuY2FTZWxlY2lvbmFkYS5yYXphb3NvY2lhbFwiXHJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidyaWdodCdcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7TWFzY2FyYU5vbWVMaWNlbmNhKHRoaXMubGljZW5jYVNlbGVjaW9uYWRhLnJhemFvc29jaWFsKX19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbSBtdC0xXCI+e3tNYXNjYXJhQ25waih0aGlzLmxpY2VuY2FTZWxlY2lvbmFkYS5jbnBqKX19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICBwQnV0dG9uXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgcGFkZGluZy1zdHlsZSBoLTJyZW0gdy0ycmVtIGhvdmVyOmJnLWdyZWVuLTYwMCBob3Zlcjp0ZXh0LXdoaXRlIGljb24tbWVudVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInZpc2libGVEaWFsb2dMaWNlbmNhID0gIXZpc2libGVEaWFsb2dMaWNlbmNhXCJcclxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ0FsdGVyYXIgTGljZW7Dp2EnXCJcclxuICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidyaWdodCdcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+XHJcbiAgICAgICAgICAgICAgICBzeW5jX2FsdFxyXG4gICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8cC1kaXZpZGVyIHR5cGU9XCJzb2xpZFwiPjwvcC1kaXZpZGVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImxpc3Qtbm9uZSBtLTAgIGNhcmQtY29udGFpbmVyIHt7ZXhwYW5kTWVudSA/ICdteC0xJyA6ICcnfX1cIlxyXG4gICAgICAgICAgW3N0eWxlLm1heC1oZWlnaHRdPVwiKGhlaWd0aENhcmQgLSAyMjApICsgJ3B4J1wiXHJcbiAgICAgICAgICBzdHlsZT1cIm92ZXJmbG93LXk6IGF1dG87XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8IS0tIG1lbnVzIC0tPlxyXG4gICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBtZW51IG9mIG1lbnVzXCI+XHJcbiAgICAgICAgICAgIDwhLS0gbWVudSBxdWUgbsOjbyB0ZW0gZmlsaG8gLS0+XHJcbiAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbGxSb3V0ZShtZW51LmxpbmspXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cIiFtZW51Lm1lbnVwYWkgJiYgbWVudS5pZG1lbnVwYWkgPT0gMFwiXHJcbiAgICAgICAgICAgICAgcFJpcHBsZVxyXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCIhZXhwYW5kTWVudSA/IG1lbnUuZGVzY3JpY2FvbWVudSA6ICcnXCJcclxuICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidyaWdodCdcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwie3t2ZXJpZmljYXJQYWdpbmFTZWxlY2lvbmFkYShtZW51LmxpbmspfX0gbWVudS1vcHRpb24gZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbm8tdW5kZXJsaW5lIHt7IWV4cGFuZE1lbnUgPyAnanVzdGlmeS1jb250ZW50LWNlbnRlcicgOiAnJ319IGN1cnNvci1wb2ludGVyIGJvcmRlci1yb3VuZCB0ZXh0LTcwMCBob3ZlcjpiZy1ncmVlbi02MDAgaG92ZXI6dGV4dC13aGl0ZSB0cmFuc2l0aW9uLWR1cmF0aW9uLTE1MCB0cmFuc2l0aW9uLWNvbG9ycyBwLXJpcHBsZVwiXHJcbiAgICAgICAgICAgID5cclxuXHJcbiAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpY29uLW1lbnUge3tleHBhbmRNZW51ID8gJ21sLTEgbXItMicgOiAnJ319XCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwibWVudS5pY29uZSAmJiBtZW51Lmljb25lICE9PSAnJ1wiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgbWVudS5pY29uZSB9fVxyXG4gICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWJhc2UgdGV4dC1ibHVlLTkwMCBmb250LW1lZGl1bVwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImV4cGFuZE1lbnVcIlxyXG4gICAgICAgICAgICAgID57eyBtZW51LmRlc2NyaWNhb21lbnUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYT5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gbWVudSBjb20gZmlsaG8gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJtZW51Lm1lbnVwYWlcIj5cclxuICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgcFJpcHBsZVxyXG4gICAgICAgICAgICAgICAgcFN0eWxlQ2xhc3M9XCJAbmV4dFwiXHJcbiAgICAgICAgICAgICAgICBlbnRlckNsYXNzPVwiaGlkZGVuXCJcclxuICAgICAgICAgICAgICAgIGVudGVyQWN0aXZlQ2xhc3M9XCJzbGlkZWRvd25cIlxyXG4gICAgICAgICAgICAgICAgbGVhdmVUb0NsYXNzPVwiaGlkZGVuXCJcclxuICAgICAgICAgICAgICAgIGxlYXZlQWN0aXZlQ2xhc3M9XCJzbGlkZXVwXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWVudS1vcHRpb24gZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIge3shZXhwYW5kTWVudSA/ICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJyA6ICdqdXN0aWZ5LWNvbnRlbnQtYmV0d2Vlbid9fSBjdXJzb3ItcG9pbnRlciBib3JkZXItcm91bmQgdGV4dC03MDAgaG92ZXI6YmctZ3JlZW4tNjAwIGhvdmVyOnRleHQtd2hpdGUgdHJhbnNpdGlvbi1kdXJhdGlvbi0xNTAgdHJhbnNpdGlvbi1jb2xvcnMgcC1yaXBwbGVcIlxyXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCIncmlnaHQnXCJcclxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCIhZXhwYW5kTWVudSA/IG1lbnUuZGVzY3JpY2FvbWVudSA6ICcnXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCIhZXhwYW5kTWVudSA/IGV4cGFuZE1lbnUgPSAhZXhwYW5kTWVudSA6ICcnXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb24tbWVudSB7e2V4cGFuZE1lbnUgPyAnbWwtMSBtci0yJyA6ICcnfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibWVudS5pY29uZSAmJiBtZW51Lmljb25lICE9PSAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICB7eyBtZW51Lmljb25lIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtYmFzZSB0ZXh0LWJsdWUtOTAwIGZvbnQtbWVkaXVtXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImV4cGFuZE1lbnVcIlxyXG4gICAgICAgICAgICAgICAgICA+e3sgbWVudS5kZXNjcmljYW9tZW51IH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInBpIHBpLWNoZXZyb24tZG93biB0ZXh0LWJsdWUtOTAwIG1yLTFcIlxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImV4cGFuZE1lbnVcIlxyXG4gICAgICAgICAgICAgICAgPjwvaT5cclxuICAgICAgICAgICAgICA8L2E+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gZmlsaG9zIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibGlzdC1ub25lIHB5LTAgcGwtMyBwci0wIG0tMCBoaWRkZW4gb3ZlcmZsb3cteS1oaWRkZW4gdHJhbnNpdGlvbi1hbGwgdHJhbnNpdGlvbi1kdXJhdGlvbi00MDAgdHJhbnNpdGlvbi1lYXNlLWluLW91dFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgPGxpICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgIGxldCBmaWxobyBvZiByZXRvcm5hck1lbnVGaWxob3MobWVudS5pZHNpc3RlbWEsIG1lbnUuaWRtZW51KVxyXG4gICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAqbmdJZj1cImV4cGFuZE1lbnVcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJjYWxsUm91dGUoZmlsaG8ubGluaylcIlxyXG4gICAgICAgICAgICAgIHBSaXBwbGVcclxuICAgICAgICAgICAgICBjbGFzcz1cInt7dmVyaWZpY2FyUGFnaW5hU2VsZWNpb25hZGEoZmlsaG8ubGluayl9fSBtZW51LW9wdGlvbiBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBuby11bmRlcmxpbmUgY3Vyc29yLXBvaW50ZXIgYm9yZGVyLXJvdW5kIHRleHQtNzAwIGhvdmVyOmJnLWdyZWVuLTYwMCBob3Zlcjp0ZXh0LXdoaXRlIHRyYW5zaXRpb24tZHVyYXRpb24tMTUwIHRyYW5zaXRpb24tY29sb3JzIHAtcmlwcGxlIHAtMlwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwaSBwaS1jaGFydC1saW5lIG1yLTIgbWwtMSBhZGp1c3QtaWNvbi1tZW51XCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZmlsaG8uaWNvbmUgJiYgZmlsaG8uaWNvbmUgIT09ICcnXCJcclxuICAgICAgICAgICAgICA+PC9pPlxyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtYmFzZSB0ZXh0LWJsdWUtOTAwXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZXhwYW5kTWVudVwiXHJcbiAgICAgICAgICAgICAgPnt7IGZpbGhvLmRlc2NyaWNhb21lbnUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwvcC1zaWRlYmFyPlxyXG5cclxuXHJcbjxkaXZcclxuICBjbGFzcz1cInctYXV0byBoLXNjcmVlbiBwYWdlLWNvbnRlbnQgb3ZlcmZsb3cteS1oaWRkZW5cIlxyXG4gIGlkPVwicGFnZS1jb250ZW50XCJcclxuPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gbS0zXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiYnJlYWRDcnVtYnNcIj5cclxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXhsIGZvbnQtc2VtaWJvbGQgdGV4dC1ibHVlLTkwMCBicmVhZGNydW1iLXRpdGxlXCI+e3ticmVhZENydW1iSXRlbXNbYnJlYWRDcnVtYkl0ZW1zLmxlbmd0aCAtXHJcbiAgICAgICAgMV0/LmxhYmVsfX08L3A+XHJcbiAgICAgIDxwLWJyZWFkY3J1bWJcclxuICAgICAgICAqbmdJZj1cIndpZHRoQ2FyZCA+IDQwMFwiXHJcbiAgICAgICAgc3R5bGVDbGFzcz1cImJvcmRlci1ub25lIHAtMCBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBoLTJyZW1cIlxyXG4gICAgICAgIFttb2RlbF09XCJicmVhZENydW1iSXRlbXNcIlxyXG4gICAgICAgIFtzdHlsZV09XCJ7YmFja2dyb3VuZENvbG9yOiAnI2Q0ZDNkMyd9XCJcclxuICAgICAgICAob25JdGVtQ2xpY2spPVwiY2FsbFJvdXRlKCRldmVudC5pdGVtLnJvdXRlckxpbmssIHRydWUpXCJcclxuICAgICAgPjwvcC1icmVhZGNydW1iPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cIiFicmVhZENydW1ic1wiPjwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJ3LWF1dG8gZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIHBCdXR0b25cclxuICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dCBoLTJyZW0gdy0ycmVtIGhvdmVyOmJnLWdyZWVuLTYwMCBob3Zlcjp0ZXh0LXdoaXRlIGljb24tbWVudSBwYWRkaW5nLXN0eWxlXCJcclxuICAgICAgICAoY2xpY2spPVwic2lzdGVtYXNQYW5lbC50b2dnbGUoJGV2ZW50KVwiXHJcbiAgICAgICAgW3BUb29sdGlwXT1cIidTaXN0ZW1hcydcIlxyXG4gICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPlxyXG4gICAgICAgICAgYXBwc1xyXG4gICAgICAgIDwvaT5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBwQnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgaC0ycmVtIHctMnJlbSBob3ZlcjpiZy1ncmVlbi02MDAgaG92ZXI6dGV4dC13aGl0ZSBpY29uLW1lbnUgcGFkZGluZy1zdHlsZVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm1ldXNEYWRvc1BhbmVsLnRvZ2dsZSgkZXZlbnQpXCJcclxuICAgICAgICBbcFRvb2x0aXBdPVwiJ01lbnUgZG8gVXN1w6FyaW8nXCJcclxuICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidsZWZ0J1wiXHJcbiAgICAgID5cclxuICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5cclxuICAgICAgICAgIHBlcnNvblxyXG4gICAgICAgIDwvaT5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcblxyXG4gIDxwLWNhcmRcclxuICAgIGNsYXNzPVwiY2FyZC1jb250YWluZXJcIlxyXG4gICAgc3R5bGVDbGFzcz1cIm0tMyBib3JkZXItbm9yb3VuZCBvdmVyZmxvdy15LWF1dG8gY2FyZC1jb250YWluZXJcIlxyXG4gICAgW3N0eWxlXT1cIntoZWlnaHQ6IGhlaWd0aENhcmQgLSBhanVzdGFySGVpZ3RoQ2FyZCgpICsgJ3B4J31cIlxyXG4gID5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWNvbnRhaW5lciB3LWZ1bGxcIj5cclxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9wLWNhcmQ+XHJcblxyXG48L2Rpdj5cclxuXHJcblxyXG48L2Rpdj5cclxuXHJcbjxwLW92ZXJsYXlQYW5lbFxyXG4gICNzaXN0ZW1hc1BhbmVsXHJcbiAgW3Nob3dUcmFuc2l0aW9uT3B0aW9uc109XCInMzUwbXMgZWFzZS1vdXQnXCJcclxuICBbaGlkZVRyYW5zaXRpb25PcHRpb25zXT1cIicyNTBtcyBlYXNlLWluJ1wiXHJcbj5cclxuXHJcbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNvbnRhaW5lclwiPlxyXG5cclxuICAgIDxwIGNsYXNzPVwidGl0bGUtc3R5bGUgbXQtM1wiPlNpc3RlbWFzPC9wPlxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgZmxleC13cmFwIGdhcC0yIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG10LTUgbWItM1wiXHJcbiAgICAgIHN0eWxlPVwid2lkdGg6IDI1MHB4OyBoZWlnaHQ6IDEwMCU7XCJcclxuICAgID5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBtZW51IG9mIG1lbnVDb21wbGV0b1wiXHJcbiAgICAgICAgcEJ1dHRvblxyXG4gICAgICAgIHBSaXBwbGVcclxuICAgICAgICBjbGFzcz1cImJ0bi1zaXN0ZW1hLTIgYnRuLXNpc3RlbWEgaG92ZXItYnRuLWNvci1wYWRyYW8gcmVtb3ZlLWZvY3VzIGgtNHJlbSB3LTRyZW1cIlxyXG4gICAgICAgIChjbGljayk9XCJkZWZpbmlyTWVudXNQb3JTaXN0ZW1hKG1lbnUuc2lzdGVtYS5pZHNpc3RlbWEpXCJcclxuICAgICAgICBbcFRvb2x0aXBdPVwibWVudS5zaXN0ZW1hLmRlc2NyaWNhb3Npc3RlbWFcIlxyXG4gICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcclxuICAgICAgPlxyXG4gICAgICAgIDwhLS0gPGltZ1xyXG4gICAgICAgICAgYWx0PVwibG9nb1wiXHJcbiAgICAgICAgICBzdHlsZT1cIndpZHRoOiAycmVtOyBoZWlnaHQ6IDJyZW07XCJcclxuICAgICAgICAvPiAtLT5cclxuICAgICAgICB7eyBtZW51LnNpc3RlbWEubm9tZXNpc3RlbWEuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgfX1cclxuXHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuXHJcbiAgICAgIDwhLS0gPHAtYnV0dG9uIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1vdXRsaW5lZFwiPlxyXG4gICAgICAgIDxpbWcgYWx0PVwibG9nb1wiIHNyYz1cImh0dHBzOi8vcHJpbWVmYWNlcy5vcmcvY2RuL3ByaW1lbmcvaW1hZ2VzL3ByaW1lbmctaWNvbi5zdmdcIiBzdHlsZT1cIndpZHRoOiAxLjVyZW1cIiAvPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWwtMiBmb250LWJvbGRcIj5QcmltZU5HPC9zcGFuPlxyXG4gICAgPC9wLWJ1dHRvbj4gLS0+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9wLW92ZXJsYXlQYW5lbD5cclxuXHJcbjxwLW92ZXJsYXlQYW5lbFxyXG4gICNtZXVzRGFkb3NQYW5lbFxyXG4gIFtzaG93VHJhbnNpdGlvbk9wdGlvbnNdPVwiJzM1MG1zIGVhc2Utb3V0J1wiXHJcbiAgW2hpZGVUcmFuc2l0aW9uT3B0aW9uc109XCInMjUwbXMgZWFzZS1pbidcIlxyXG4+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjb250YWluZXJcIj5cclxuXHJcbiAgICA8cCBjbGFzcz1cInRpdGxlLXN0eWxlIG10LTNcIj5PbMOhLCB7e25vbWVVc3VhcmlvID8gbm9tZVVzdWFyaW8uc3BsaXQoJyAnKVswXSA6ICdVc3XDoXJpbyd9fSAhPC9wPlxyXG4gICAgPGRpdiBjbGFzcz1cIm10LTUgbWItM1wiPlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxwLWJ1dHRvblxyXG4gICAgICBpY29uPVwicGkgcGktbG9ja1wiXHJcbiAgICAgIGxhYmVsPVwiR2Vyw6puY2lhciBLZWV2b1Bhc3NcIlxyXG4gICAgICAob25DbGljayk9XCJnZXJlbmNpYXJLZWVQYXNzKCRldmVudClcIlxyXG4gICAgICBzdHlsZUNsYXNzPVwiYm9yZGVyLW5vcm91bmQgdy1mdWxsIHAtYnV0dG9uLXRleHQgdGV4dC1ibHVlLTkwMFwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCJcclxuICAgID48L3AtYnV0dG9uPlxyXG4gICAgPHAtYnV0dG9uXHJcbiAgICAgIGljb249XCJwaSBwaS1zaWduLW91dFwiXHJcbiAgICAgIGxhYmVsPVwiU2FpclwiXHJcbiAgICAgIChvbkNsaWNrKT1cInNhaXIoJGV2ZW50KVwiXHJcbiAgICAgIHN0eWxlQ2xhc3M9XCJib3JkZXItbm9yb3VuZCB3LWZ1bGwgcC1idXR0b24tdGV4dCB0ZXh0LWJsdWUtOTAwXCJcclxuICAgID48L3AtYnV0dG9uPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG48L3Atb3ZlcmxheVBhbmVsPlxyXG5cclxuPHAtZGlhbG9nXHJcbiAgWyh2aXNpYmxlKV09XCJ2aXNpYmxlRGlhbG9nTGljZW5jYVwiXHJcbiAgW21vZGFsXT1cInRydWVcIlxyXG4gIFtkcmFnZ2FibGVdPVwiZmFsc2VcIlxyXG4gIGhlYWRlcj1cIlRyb2NhciBMaWNlbsOnYVwiXHJcbiAgW3N0eWxlXT1cInt3aWR0aDogJzUwdmgnIH1cIlxyXG4+XHJcbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtZW5kXCI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInctZnVsbFwiPlxyXG4gICAgICA8cC1kcm9wZG93blxyXG4gICAgICAgIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIlxyXG4gICAgICAgIFtvcHRpb25zXT1cImxpY2VuY2FzT3B0aW9uc1wiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJsaWNlbmNhU2VsZWN0ZWRcIlxyXG4gICAgICAgIG9wdGlvbkxhYmVsPVwiZGVzY3JpY2FvXCJcclxuICAgICAgPjwvcC1kcm9wZG93bj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxrdi1idXR0b24tc3VjY2Vzc1xyXG4gICAgICBbbGFiZWxdPVwiJ1NhbHZhcidcIlxyXG4gICAgICBjbGFzcz1cIm10LTJcIlxyXG4gICAgICAob25DbGljayk9XCJzZXRMaWNlbmNhKClcIlxyXG4gICAgPjwva3YtYnV0dG9uLXN1Y2Nlc3M+XHJcblxyXG4gIDwvZGl2PlxyXG5cclxuPC9wLWRpYWxvZz4iXX0=
1
+ import { Component, EventEmitter, HostListener, Input, Output, ViewChild } from '@angular/core';
2
+ import { NavigationEnd } from '@angular/router';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/router";
5
+ import * as i2 from "@angular/common";
6
+ import * as i3 from "primeng/api";
7
+ import * as i4 from "primeng/button";
8
+ import * as i5 from "primeng/card";
9
+ import * as i6 from "primeng/tooltip";
10
+ import * as i7 from "primeng/dialog";
11
+ import * as i8 from "primeng/divider";
12
+ import * as i9 from "primeng/dropdown";
13
+ import * as i10 from "primeng/overlaypanel";
14
+ import * as i11 from "primeng/ripple";
15
+ import * as i12 from "primeng/sidebar";
16
+ import * as i13 from "primeng/styleclass";
17
+ import * as i14 from "primeng/breadcrumb";
18
+ import * as i15 from "@angular/forms";
19
+ import * as i16 from "../buttons/button-success/button-success.component";
20
+ export class MenuComponent {
21
+ onWindowResize() {
22
+ this.heigthCard = Number(document.getElementById('page-content')?.offsetHeight);
23
+ this.widthCard = Number(window.innerWidth) - (this.expandMenu ? 333 : 93);
24
+ this.cdr.detectChanges();
25
+ }
26
+ constructor(cdr, router, route) {
27
+ this.cdr = cdr;
28
+ this.router = router;
29
+ this.route = route;
30
+ this.menuCompleto = [];
31
+ this.licencas = [];
32
+ this.breadCrumbs = false;
33
+ this.licencaChange = new EventEmitter();
34
+ this.gerenciarKeePassEvent = new EventEmitter();
35
+ this.sairEvent = new EventEmitter();
36
+ this.expandMenuEmit = new EventEmitter();
37
+ this.licencasOptions = [];
38
+ this.menusFiltrados = [];
39
+ this.menus = [];
40
+ this.breadCrumbItems = [];
41
+ this.expandMenu = true;
42
+ this.visibleDialogLicenca = false;
43
+ }
44
+ ngOnInit() {
45
+ this.configurarLicencas();
46
+ if (this.breadCrumbs) {
47
+ this.router.events.subscribe(event => {
48
+ if (event instanceof NavigationEnd) {
49
+ this.configurarBreadCrumbs();
50
+ }
51
+ });
52
+ }
53
+ this.heigthCard = Number(document.getElementById('page-content')?.offsetHeight);
54
+ this.widthCard = Number(window.innerWidth) - (this.expandMenu ? 333 : 93);
55
+ }
56
+ configurarLicencas() {
57
+ setTimeout(() => this.setLicenca(), 1500);
58
+ this.licencas.forEach((x, i) => {
59
+ this.licencasOptions.push({
60
+ id: i,
61
+ descricao: x.razaosocial,
62
+ cnpj: x.cnpj
63
+ });
64
+ });
65
+ var licenca = this.licencasOptions.find((x) => x.cnpj == this.licencaSelecionada.cnpj);
66
+ if (licenca != undefined)
67
+ this.licencaSelected = licenca;
68
+ }
69
+ configurarBreadCrumbs() {
70
+ const rootRoute = this.route.root;
71
+ this.breadCrumbItems = this.getBreadcrumbs(rootRoute);
72
+ }
73
+ getBreadcrumbs(route, url = '', breadcrumbs = []) {
74
+ const childrenRoutes = route.children;
75
+ if (childrenRoutes.length === 0) {
76
+ return breadcrumbs;
77
+ }
78
+ for (const childRoute of childrenRoutes) {
79
+ const routeUrl = childRoute.snapshot.url.map(segment => segment.path).join('/');
80
+ if (routeUrl !== '') {
81
+ url += `/${routeUrl}`;
82
+ }
83
+ const breadcrumbLabel = childRoute.snapshot.data['breadcrumb'];
84
+ if (breadcrumbLabel) {
85
+ breadcrumbs.push({ label: breadcrumbLabel, routerLink: url });
86
+ }
87
+ return this.getBreadcrumbs(childRoute, url, breadcrumbs);
88
+ }
89
+ return breadcrumbs;
90
+ }
91
+ closeCallback(e) {
92
+ this.sidebarRef.close(e);
93
+ }
94
+ MascaraNomeLicenca(nomeLicenca) {
95
+ if (nomeLicenca) {
96
+ if (nomeLicenca.length > 24)
97
+ return nomeLicenca.substring(0, 24) + '...';
98
+ else
99
+ return nomeLicenca;
100
+ }
101
+ else
102
+ return '';
103
+ }
104
+ MascaraCnpj(cnpj) {
105
+ const cnpjLimpo = cnpj.replace(/\D/g, '');
106
+ return cnpjLimpo.replace(/^(\d{2})(\d{3})(\d{3})(\d{4})(\d{2})$/, '$1.$2.$3/$4-$5');
107
+ }
108
+ definirMenusPorSistema(idsistema) {
109
+ this.menus =
110
+ this.menuCompleto.find((x) => x.sistema.idsistema == idsistema)?.menus ||
111
+ [];
112
+ console.log(this.menus, 'menus');
113
+ console.log(this.menuCompleto, 'menuCompleto');
114
+ console.log(this.menus[0].menupai, 'menupai');
115
+ if (this.menus[0].menupai) {
116
+ var filhos = this.retornarMenuFilhos(this.menus[0].idsistema, this.menus[0].idmenu);
117
+ if (filhos != undefined)
118
+ this.callRoute(filhos[0].link, true);
119
+ }
120
+ else
121
+ this.callRoute(this.menus[0].link, true);
122
+ this.sistemasPanel.hide();
123
+ }
124
+ retornarMenuFilhos(idsistema, idmenu) {
125
+ return this.menuCompleto
126
+ .find((x) => x.sistema.idsistema == idsistema)
127
+ ?.menus.filter((x) => x.idmenupai == idmenu);
128
+ }
129
+ callRoute(e, expand) {
130
+ if (!expand)
131
+ !this.expandMenu ? this.expandMenu = !this.expandMenu : '';
132
+ this.router.navigateByUrl(e);
133
+ }
134
+ toggleMenu() {
135
+ this.expandMenu = !this.expandMenu;
136
+ this.expandMenuEvent();
137
+ }
138
+ setLicenca() {
139
+ var licenca = this.licencas.find((licenca) => licenca.cnpj == this.licencaSelected.cnpj);
140
+ if (licenca)
141
+ this.licencaSelecionada = licenca;
142
+ this.visibleDialogLicenca = false;
143
+ this.licencaChange.emit(this.licencaSelecionada);
144
+ this.definirMenusPorSistema(this.menuCompleto[0]?.sistema.idsistema);
145
+ }
146
+ gerenciarKeePass(event) {
147
+ this.sistemasPanel.hide();
148
+ this.gerenciarKeePassEvent.emit(event);
149
+ }
150
+ sair(event) {
151
+ this.sistemasPanel.hide();
152
+ this.sairEvent.emit(event);
153
+ }
154
+ expandMenuEvent() {
155
+ this.expandMenuEmit.emit(this.expandMenu);
156
+ }
157
+ ajustarHeigthCard() {
158
+ if (this.widthCard > 400) {
159
+ if (this.breadCrumbs)
160
+ return 105;
161
+ else
162
+ return 85;
163
+ }
164
+ else
165
+ return 83;
166
+ }
167
+ verificarPaginaSelecionada(link) {
168
+ if (this.router.url.includes(link))
169
+ return 'bg-green-600';
170
+ else
171
+ return '';
172
+ }
173
+ }
174
+ MenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: MenuComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
175
+ MenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: MenuComponent, selector: "kv-menu", inputs: { menuCompleto: "menuCompleto", licencas: "licencas", licencaSelecionada: "licencaSelecionada", logoImage: "logoImage", nomeUsuario: "nomeUsuario", breadCrumbs: "breadCrumbs" }, outputs: { licencaChange: "licencaChange", gerenciarKeePassEvent: "gerenciarKeePassEvent", sairEvent: "sairEvent", expandMenuEmit: "expandMenuEmit" }, host: { listeners: { "window:resize": "onWindowResize($event)" } }, viewQueries: [{ propertyName: "sidebarRef", first: true, predicate: ["sidebarRef"], descendants: true }, { propertyName: "sistemasPanel", first: true, predicate: ["sistemasPanel"], descendants: true }, { propertyName: "meusDadosPanel", first: true, predicate: ["meusDadosPanel"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-row overflow-y-hidden w- full-container\">\n\n <div [style]=\"{minWidth: expandMenu ? '300px' : '60px'}\"></div>\n\n <p-sidebar\n #sidebarRef\n [visible]=\"true\"\n [showCloseIcon]=\"false\"\n [modal]=\"false\"\n [style]=\"{width: expandMenu ? '300px' : '60px'}\"\n >\n <ng-template pTemplate=\"headless\">\n <div class=\"flex flex-column {{expandMenu ? 'mx-1' : 'mx-1'}}\">\n <div class=\"flex flex-column gap-2 justify-content-between flex-shrink-0 mx-2\">\n <div\n class=\"flex flex-row align-items-center {{expandMenu ? 'justify-content-between' : 'justify-content-center'}} py-3\"\n >\n <img\n *ngIf=\"expandMenu\"\n alt=\"Card\"\n [src]=\"logoImage\"\n width=\"150\"\n />\n\n <button\n pButton\n class=\"p-button-rounded p-button-text padding-style h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu\"\n (click)=\"toggleMenu()\"\n [pTooltip]=\"expandMenu ? 'Ocutar Menu' : 'Expandir Menu'\"\n [tooltipPosition]=\"'right'\"\n >\n <i class=\"material-symbols-outlined\">\n menu\n </i>\n </button>\n </div>\n\n <div\n class=\"flex flex-row align-items-center {{expandMenu ? 'justify-content-between' : 'justify-content-center'}}\"\n >\n <div\n class=\"flex flex-column cursor-pointer\"\n *ngIf=\"expandMenu\"\n (click)=\"visibleDialogLicenca = !visibleDialogLicenca\"\n >\n <span\n class=\"text-sm font-semibold mr-2\"\n [pTooltip]=\"this.licencaSelecionada.razaosocial\"\n [tooltipPosition]=\"'right'\"\n >\n {{MascaraNomeLicenca(this.licencaSelecionada.razaosocial)}}\n </span>\n <span class=\"text-sm mt-1\">{{MascaraCnpj(this.licencaSelecionada.cnpj)}}</span>\n </div>\n\n <button\n pButton\n class=\"p-button-rounded p-button-text padding-style h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu\"\n (click)=\"visibleDialogLicenca = !visibleDialogLicenca\"\n [pTooltip]=\"'Alterar Licen\u00E7a'\"\n [tooltipPosition]=\"'right'\"\n >\n <i class=\"material-symbols-outlined\">\n sync_alt\n </i>\n </button>\n\n </div>\n <p-divider type=\"solid\"></p-divider>\n </div>\n\n <div\n class=\"list-none m-0 card-container {{expandMenu ? 'mx-1' : ''}}\"\n [style.max-height]=\"(heigthCard - 220) + 'px'\"\n style=\"overflow-y: auto;\"\n >\n <!-- menus -->\n <li *ngFor=\"let menu of menus\">\n <!-- menu que n\u00E3o tem filho -->\n <a\n (click)=\"callRoute(menu.link)\"\n *ngIf=\"!menu.menupai && menu.idmenupai == 0\"\n pRipple\n [pTooltip]=\"!expandMenu ? menu.descricaomenu : ''\"\n [tooltipPosition]=\"'right'\"\n class=\"{{verificarPaginaSelecionada(menu.link)}} menu-option flex align-items-center no-underline {{!expandMenu ? 'justify-content-center' : ''}} cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple\"\n >\n\n <i\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}}\"\n *ngIf=\"menu.icone && menu.icone !== ''\"\n >\n {{ menu.icone }}\n </i>\n <span\n class=\"text-base text-blue-900 font-medium\"\n *ngIf=\"expandMenu\"\n >{{ menu.descricaomenu }}</span>\n </a>\n\n <!-- menu com filho -->\n <div *ngIf=\"menu.menupai\">\n <a\n pRipple\n pStyleClass=\"@next\"\n enterClass=\"hidden\"\n enterActiveClass=\"slidedown\"\n leaveToClass=\"hidden\"\n leaveActiveClass=\"slideup\"\n class=\"menu-option flex align-items-center {{!expandMenu ? 'justify-content-center' : 'justify-content-between'}} cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple\"\n [tooltipPosition]=\"'right'\"\n [pTooltip]=\"!expandMenu ? menu.descricaomenu : ''\"\n (click)=\"!expandMenu ? expandMenu = !expandMenu : ''\"\n >\n <div class=\"flex flex-row align-items-center\">\n\n <i\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}}\"\n *ngIf=\"menu.icone && menu.icone !== ''\"\n >\n {{ menu.icone }}\n </i>\n <span\n class=\"text-base text-blue-900 font-medium\"\n *ngIf=\"expandMenu\"\n >{{ menu.descricaomenu }}</span>\n </div>\n <i\n class=\"pi pi-chevron-down text-blue-900 mr-1\"\n *ngIf=\"expandMenu\"\n ></i>\n </a>\n\n <!-- filhos -->\n <div\n class=\"list-none py-0 pl-3 pr-0 m-0 hidden overflow-y-hidden transition-all transition-duration-400 transition-ease-in-out\"\n >\n <li *ngFor=\"\n let filho of retornarMenuFilhos(menu.idsistema, menu.idmenu)\n \">\n <a\n *ngIf=\"expandMenu\"\n (click)=\"callRoute(filho.link)\"\n pRipple\n class=\"{{verificarPaginaSelecionada(filho.link)}} menu-option flex align-items-center no-underline cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple p-2\"\n >\n <i\n class=\"pi pi-chart-line mr-2 ml-1 adjust-icon-menu\"\n *ngIf=\"filho.icone && filho.icone !== ''\"\n ></i>\n <span\n class=\"text-base text-blue-900\"\n *ngIf=\"expandMenu\"\n >{{ filho.descricaomenu }}</span>\n </a>\n </li>\n </div>\n </div>\n</div>\n</div>\n</ng-template>\n</p-sidebar>\n\n\n<div\n class=\"w-auto h-screen page-content overflow-y-hidden\"\n id=\"page-content\"\n>\n\n <div class=\"flex flex-row align-items-center justify-content-between m-3\">\n <div *ngIf=\"breadCrumbs\">\n <p class=\"text-xl font-semibold text-blue-900 breadcrumb-title\">{{breadCrumbItems[breadCrumbItems.length -\n 1]?.label}}</p>\n <p-breadcrumb\n *ngIf=\"widthCard > 400\"\n styleClass=\"border-none p-0 flex align-items-center h-2rem\"\n [model]=\"breadCrumbItems\"\n [style]=\"{backgroundColor: '#d4d3d3'}\"\n (onItemClick)=\"callRoute($event.item.routerLink, true)\"\n ></p-breadcrumb>\n </div>\n\n <div *ngIf=\"!breadCrumbs\"></div>\n\n <div class=\"w-auto flex flex-row align-items-center gap-2\">\n <button\n pButton\n class=\"p-button-rounded p-button-text h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu padding-style\"\n (click)=\"sistemasPanel.toggle($event)\"\n [pTooltip]=\"'Sistemas'\"\n [tooltipPosition]=\"'left'\"\n >\n <i class=\"material-symbols-outlined\">\n apps\n </i>\n </button>\n <button\n pButton\n class=\"p-button-rounded p-button-text h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu padding-style\"\n (click)=\"meusDadosPanel.toggle($event)\"\n [pTooltip]=\"'Menu do Usu\u00E1rio'\"\n [tooltipPosition]=\"'left'\"\n >\n <i class=\"material-symbols-outlined\">\n person\n </i>\n </button>\n </div>\n </div>\n\n\n <p-card\n class=\"card-container\"\n styleClass=\"m-3 border-noround overflow-y-auto card-container\"\n [style]=\"{height: heigthCard - ajustarHeigthCard() + 'px'}\"\n >\n <div class=\"card-container w-full\">\n <ng-content></ng-content>\n </div>\n </p-card>\n\n</div>\n\n\n</div>\n\n<p-overlayPanel\n #sistemasPanel\n [showTransitionOptions]=\"'350ms ease-out'\"\n [hideTransitionOptions]=\"'250ms ease-in'\"\n>\n\n <ng-template pTemplate=\"container\">\n\n <p class=\"title-style mt-3\">Sistemas</p>\n <div\n class=\"flex flex-row flex-wrap gap-2 align-items-center justify-content-center mt-5 mb-3\"\n style=\"width: 250px; height: 100%;\"\n >\n <button\n *ngFor=\"let menu of menuCompleto\"\n pButton\n pRipple\n class=\"btn-sistema-2 btn-sistema hover-btn-cor-padrao remove-focus h-4rem w-4rem\"\n (click)=\"definirMenusPorSistema(menu.sistema.idsistema)\"\n [pTooltip]=\"menu.sistema.descricaosistema\"\n [tooltipPosition]=\"'left'\"\n >\n <!-- <img\n alt=\"logo\"\n style=\"width: 2rem; height: 2rem;\"\n /> -->\n {{ menu.sistema.nomesistema.charAt(0).toUpperCase() }}\n\n </button>\n\n\n <!-- <p-button styleClass=\"p-button-outlined\">\n <img alt=\"logo\" src=\"https://primefaces.org/cdn/primeng/images/primeng-icon.svg\" style=\"width: 1.5rem\" />\n <span class=\"ml-2 font-bold\">PrimeNG</span>\n </p-button> -->\n\n </div>\n </ng-template>\n</p-overlayPanel>\n\n<p-overlayPanel\n #meusDadosPanel\n [showTransitionOptions]=\"'350ms ease-out'\"\n [hideTransitionOptions]=\"'250ms ease-in'\"\n>\n\n <ng-template pTemplate=\"container\">\n\n <p class=\"title-style mt-3\">Ol\u00E1, {{nomeUsuario ? nomeUsuario.split(' ')[0] : 'Usu\u00E1rio'}} !</p>\n <div class=\"mt-5 mb-3\">\n\n </div>\n\n <p-button\n icon=\"pi pi-lock\"\n label=\"Ger\u00EAnciar KeevoPass\"\n (onClick)=\"gerenciarKeePass($event)\"\n styleClass=\"border-noround w-full p-button-text text-blue-900\"\n [disabled]=\"true\"\n ></p-button>\n <p-button\n icon=\"pi pi-sign-out\"\n label=\"Sair\"\n (onClick)=\"sair($event)\"\n styleClass=\"border-noround w-full p-button-text text-blue-900\"\n ></p-button>\n </ng-template>\n\n</p-overlayPanel>\n\n<p-dialog\n [(visible)]=\"visibleDialogLicenca\"\n [modal]=\"true\"\n [draggable]=\"false\"\n header=\"Trocar Licen\u00E7a\"\n [style]=\"{width: '50vh' }\"\n>\n <div class=\"flex flex-column align-items-end\">\n\n <div class=\"w-full\">\n <p-dropdown\n styleClass=\"w-full\"\n [options]=\"licencasOptions\"\n [(ngModel)]=\"licencaSelected\"\n optionLabel=\"descricao\"\n ></p-dropdown>\n </div>\n\n <kv-button-success\n [label]=\"'Salvar'\"\n class=\"mt-2\"\n (onClick)=\"setLicenca()\"\n ></kv-button-success>\n\n </div>\n\n</p-dialog>", styles: [".material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:1em;display:inline-block;width:1em;height:1em;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}::ng-deep .p-button:focus{box-shadow:none;-webkit-box-shadow:none;-moz-box-shadow:none}::ng-deep .p-overlaypanel .p-overlaypanel-content{padding:0}::ng-deep .hover-btn-cor-padrao.p-button:enabled:hover{background:#0c3e66;border-color:#002542}.p-button.p-button-icon-only.p-button-rounded{background:#0c3e66;border-color:#002542}::ng-deep .remove-focus:focus{border:none}::ng-deep .p-sidebar .p-sidebar-content{padding:0}::ng-deep .sidebar-header-sistema.p-sidebar .p-sidebar-header{padding-top:.5rem;padding-right:0;padding-bottom:0;padding-left:0;display:block}.btn-sistema{display:flex;align-items:center;justify-content:center;background-color:#0c3e66;font-size:20px}::ng-deep .p-sidebar .p-sidebar-header{padding:0rem!important}::ng-deep body{margin:0!important}::ng-deep .p-breadcrumb ul li.p-breadcrumb-chevron{position:relative;top:3px}.page-content{background:linear-gradient(to bottom,#d4d3d3 20%,#ffffff 30%)}*{margin:0}p .item-menu{color:#0c3e66;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol}::ng-deep .p-breadcrumb ul li:last-child .p-menuitem-text{font-weight:700}::ng-deep .p-breadcrumb ul li .p-menuitem-link .p-menuitem-text{color:#0c3e66!important;font-weight:500}span,.breadcrumb-title{font-size:15px!important;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol}::ng-deep .card-container{overflow-x:hidden}::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}.title-style{position:relative;top:10px;margin-left:20px;font-size:25px;color:#002542;border-bottom:2px solid green;font-weight:600;display:inline}::ng-deep p-sidebar .p-sidebar-content{overflow-y:hidden}::ng-deep p-dialog .p-dialog-content{overflow-y:unset}.icon-menu{color:#002542;display:flex;justify-content:center;align-items:center}::ng-deep .padding-style{padding:15px!important}::ng-deep .menu-option{padding:15px 5px!important}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i4.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass", "ariaLabel"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i5.Card, selector: "p-card", inputs: ["header", "subheader", "style", "styleClass"] }, { kind: "directive", type: i6.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: i7.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "component", type: i8.Divider, selector: "p-divider", inputs: ["styleClass", "style", "layout", "type", "align"] }, { kind: "component", type: i9.Dropdown, selector: "p-dropdown", inputs: ["scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "filterPlaceholder", "filterLocale", "inputId", "selectId", "dataKey", "filterBy", "autofocus", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "overlayDirection", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "options", "filterValue"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i10.OverlayPanel, selector: "p-overlayPanel", inputs: ["dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i11.Ripple, selector: "[pRipple]" }, { kind: "component", type: i12.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: i13.StyleClass, selector: "[pStyleClass]", inputs: ["pStyleClass", "enterClass", "enterActiveClass", "enterToClass", "leaveClass", "leaveActiveClass", "leaveToClass", "hideOnOutsideClick", "toggleClass", "hideOnEscape"] }, { kind: "component", type: i14.Breadcrumb, selector: "p-breadcrumb", inputs: ["model", "style", "styleClass", "home", "homeAriaLabel"], outputs: ["onItemClick"] }, { kind: "directive", type: i15.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i15.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i16.ButtonSuccessComponent, selector: "kv-button-success" }] });
176
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: MenuComponent, decorators: [{
177
+ type: Component,
178
+ args: [{ selector: 'kv-menu', template: "<div class=\"flex flex-row overflow-y-hidden w- full-container\">\n\n <div [style]=\"{minWidth: expandMenu ? '300px' : '60px'}\"></div>\n\n <p-sidebar\n #sidebarRef\n [visible]=\"true\"\n [showCloseIcon]=\"false\"\n [modal]=\"false\"\n [style]=\"{width: expandMenu ? '300px' : '60px'}\"\n >\n <ng-template pTemplate=\"headless\">\n <div class=\"flex flex-column {{expandMenu ? 'mx-1' : 'mx-1'}}\">\n <div class=\"flex flex-column gap-2 justify-content-between flex-shrink-0 mx-2\">\n <div\n class=\"flex flex-row align-items-center {{expandMenu ? 'justify-content-between' : 'justify-content-center'}} py-3\"\n >\n <img\n *ngIf=\"expandMenu\"\n alt=\"Card\"\n [src]=\"logoImage\"\n width=\"150\"\n />\n\n <button\n pButton\n class=\"p-button-rounded p-button-text padding-style h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu\"\n (click)=\"toggleMenu()\"\n [pTooltip]=\"expandMenu ? 'Ocutar Menu' : 'Expandir Menu'\"\n [tooltipPosition]=\"'right'\"\n >\n <i class=\"material-symbols-outlined\">\n menu\n </i>\n </button>\n </div>\n\n <div\n class=\"flex flex-row align-items-center {{expandMenu ? 'justify-content-between' : 'justify-content-center'}}\"\n >\n <div\n class=\"flex flex-column cursor-pointer\"\n *ngIf=\"expandMenu\"\n (click)=\"visibleDialogLicenca = !visibleDialogLicenca\"\n >\n <span\n class=\"text-sm font-semibold mr-2\"\n [pTooltip]=\"this.licencaSelecionada.razaosocial\"\n [tooltipPosition]=\"'right'\"\n >\n {{MascaraNomeLicenca(this.licencaSelecionada.razaosocial)}}\n </span>\n <span class=\"text-sm mt-1\">{{MascaraCnpj(this.licencaSelecionada.cnpj)}}</span>\n </div>\n\n <button\n pButton\n class=\"p-button-rounded p-button-text padding-style h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu\"\n (click)=\"visibleDialogLicenca = !visibleDialogLicenca\"\n [pTooltip]=\"'Alterar Licen\u00E7a'\"\n [tooltipPosition]=\"'right'\"\n >\n <i class=\"material-symbols-outlined\">\n sync_alt\n </i>\n </button>\n\n </div>\n <p-divider type=\"solid\"></p-divider>\n </div>\n\n <div\n class=\"list-none m-0 card-container {{expandMenu ? 'mx-1' : ''}}\"\n [style.max-height]=\"(heigthCard - 220) + 'px'\"\n style=\"overflow-y: auto;\"\n >\n <!-- menus -->\n <li *ngFor=\"let menu of menus\">\n <!-- menu que n\u00E3o tem filho -->\n <a\n (click)=\"callRoute(menu.link)\"\n *ngIf=\"!menu.menupai && menu.idmenupai == 0\"\n pRipple\n [pTooltip]=\"!expandMenu ? menu.descricaomenu : ''\"\n [tooltipPosition]=\"'right'\"\n class=\"{{verificarPaginaSelecionada(menu.link)}} menu-option flex align-items-center no-underline {{!expandMenu ? 'justify-content-center' : ''}} cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple\"\n >\n\n <i\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}}\"\n *ngIf=\"menu.icone && menu.icone !== ''\"\n >\n {{ menu.icone }}\n </i>\n <span\n class=\"text-base text-blue-900 font-medium\"\n *ngIf=\"expandMenu\"\n >{{ menu.descricaomenu }}</span>\n </a>\n\n <!-- menu com filho -->\n <div *ngIf=\"menu.menupai\">\n <a\n pRipple\n pStyleClass=\"@next\"\n enterClass=\"hidden\"\n enterActiveClass=\"slidedown\"\n leaveToClass=\"hidden\"\n leaveActiveClass=\"slideup\"\n class=\"menu-option flex align-items-center {{!expandMenu ? 'justify-content-center' : 'justify-content-between'}} cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple\"\n [tooltipPosition]=\"'right'\"\n [pTooltip]=\"!expandMenu ? menu.descricaomenu : ''\"\n (click)=\"!expandMenu ? expandMenu = !expandMenu : ''\"\n >\n <div class=\"flex flex-row align-items-center\">\n\n <i\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}}\"\n *ngIf=\"menu.icone && menu.icone !== ''\"\n >\n {{ menu.icone }}\n </i>\n <span\n class=\"text-base text-blue-900 font-medium\"\n *ngIf=\"expandMenu\"\n >{{ menu.descricaomenu }}</span>\n </div>\n <i\n class=\"pi pi-chevron-down text-blue-900 mr-1\"\n *ngIf=\"expandMenu\"\n ></i>\n </a>\n\n <!-- filhos -->\n <div\n class=\"list-none py-0 pl-3 pr-0 m-0 hidden overflow-y-hidden transition-all transition-duration-400 transition-ease-in-out\"\n >\n <li *ngFor=\"\n let filho of retornarMenuFilhos(menu.idsistema, menu.idmenu)\n \">\n <a\n *ngIf=\"expandMenu\"\n (click)=\"callRoute(filho.link)\"\n pRipple\n class=\"{{verificarPaginaSelecionada(filho.link)}} menu-option flex align-items-center no-underline cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple p-2\"\n >\n <i\n class=\"pi pi-chart-line mr-2 ml-1 adjust-icon-menu\"\n *ngIf=\"filho.icone && filho.icone !== ''\"\n ></i>\n <span\n class=\"text-base text-blue-900\"\n *ngIf=\"expandMenu\"\n >{{ filho.descricaomenu }}</span>\n </a>\n </li>\n </div>\n </div>\n</div>\n</div>\n</ng-template>\n</p-sidebar>\n\n\n<div\n class=\"w-auto h-screen page-content overflow-y-hidden\"\n id=\"page-content\"\n>\n\n <div class=\"flex flex-row align-items-center justify-content-between m-3\">\n <div *ngIf=\"breadCrumbs\">\n <p class=\"text-xl font-semibold text-blue-900 breadcrumb-title\">{{breadCrumbItems[breadCrumbItems.length -\n 1]?.label}}</p>\n <p-breadcrumb\n *ngIf=\"widthCard > 400\"\n styleClass=\"border-none p-0 flex align-items-center h-2rem\"\n [model]=\"breadCrumbItems\"\n [style]=\"{backgroundColor: '#d4d3d3'}\"\n (onItemClick)=\"callRoute($event.item.routerLink, true)\"\n ></p-breadcrumb>\n </div>\n\n <div *ngIf=\"!breadCrumbs\"></div>\n\n <div class=\"w-auto flex flex-row align-items-center gap-2\">\n <button\n pButton\n class=\"p-button-rounded p-button-text h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu padding-style\"\n (click)=\"sistemasPanel.toggle($event)\"\n [pTooltip]=\"'Sistemas'\"\n [tooltipPosition]=\"'left'\"\n >\n <i class=\"material-symbols-outlined\">\n apps\n </i>\n </button>\n <button\n pButton\n class=\"p-button-rounded p-button-text h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu padding-style\"\n (click)=\"meusDadosPanel.toggle($event)\"\n [pTooltip]=\"'Menu do Usu\u00E1rio'\"\n [tooltipPosition]=\"'left'\"\n >\n <i class=\"material-symbols-outlined\">\n person\n </i>\n </button>\n </div>\n </div>\n\n\n <p-card\n class=\"card-container\"\n styleClass=\"m-3 border-noround overflow-y-auto card-container\"\n [style]=\"{height: heigthCard - ajustarHeigthCard() + 'px'}\"\n >\n <div class=\"card-container w-full\">\n <ng-content></ng-content>\n </div>\n </p-card>\n\n</div>\n\n\n</div>\n\n<p-overlayPanel\n #sistemasPanel\n [showTransitionOptions]=\"'350ms ease-out'\"\n [hideTransitionOptions]=\"'250ms ease-in'\"\n>\n\n <ng-template pTemplate=\"container\">\n\n <p class=\"title-style mt-3\">Sistemas</p>\n <div\n class=\"flex flex-row flex-wrap gap-2 align-items-center justify-content-center mt-5 mb-3\"\n style=\"width: 250px; height: 100%;\"\n >\n <button\n *ngFor=\"let menu of menuCompleto\"\n pButton\n pRipple\n class=\"btn-sistema-2 btn-sistema hover-btn-cor-padrao remove-focus h-4rem w-4rem\"\n (click)=\"definirMenusPorSistema(menu.sistema.idsistema)\"\n [pTooltip]=\"menu.sistema.descricaosistema\"\n [tooltipPosition]=\"'left'\"\n >\n <!-- <img\n alt=\"logo\"\n style=\"width: 2rem; height: 2rem;\"\n /> -->\n {{ menu.sistema.nomesistema.charAt(0).toUpperCase() }}\n\n </button>\n\n\n <!-- <p-button styleClass=\"p-button-outlined\">\n <img alt=\"logo\" src=\"https://primefaces.org/cdn/primeng/images/primeng-icon.svg\" style=\"width: 1.5rem\" />\n <span class=\"ml-2 font-bold\">PrimeNG</span>\n </p-button> -->\n\n </div>\n </ng-template>\n</p-overlayPanel>\n\n<p-overlayPanel\n #meusDadosPanel\n [showTransitionOptions]=\"'350ms ease-out'\"\n [hideTransitionOptions]=\"'250ms ease-in'\"\n>\n\n <ng-template pTemplate=\"container\">\n\n <p class=\"title-style mt-3\">Ol\u00E1, {{nomeUsuario ? nomeUsuario.split(' ')[0] : 'Usu\u00E1rio'}} !</p>\n <div class=\"mt-5 mb-3\">\n\n </div>\n\n <p-button\n icon=\"pi pi-lock\"\n label=\"Ger\u00EAnciar KeevoPass\"\n (onClick)=\"gerenciarKeePass($event)\"\n styleClass=\"border-noround w-full p-button-text text-blue-900\"\n [disabled]=\"true\"\n ></p-button>\n <p-button\n icon=\"pi pi-sign-out\"\n label=\"Sair\"\n (onClick)=\"sair($event)\"\n styleClass=\"border-noround w-full p-button-text text-blue-900\"\n ></p-button>\n </ng-template>\n\n</p-overlayPanel>\n\n<p-dialog\n [(visible)]=\"visibleDialogLicenca\"\n [modal]=\"true\"\n [draggable]=\"false\"\n header=\"Trocar Licen\u00E7a\"\n [style]=\"{width: '50vh' }\"\n>\n <div class=\"flex flex-column align-items-end\">\n\n <div class=\"w-full\">\n <p-dropdown\n styleClass=\"w-full\"\n [options]=\"licencasOptions\"\n [(ngModel)]=\"licencaSelected\"\n optionLabel=\"descricao\"\n ></p-dropdown>\n </div>\n\n <kv-button-success\n [label]=\"'Salvar'\"\n class=\"mt-2\"\n (onClick)=\"setLicenca()\"\n ></kv-button-success>\n\n </div>\n\n</p-dialog>", styles: [".material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:1em;display:inline-block;width:1em;height:1em;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}::ng-deep .p-button:focus{box-shadow:none;-webkit-box-shadow:none;-moz-box-shadow:none}::ng-deep .p-overlaypanel .p-overlaypanel-content{padding:0}::ng-deep .hover-btn-cor-padrao.p-button:enabled:hover{background:#0c3e66;border-color:#002542}.p-button.p-button-icon-only.p-button-rounded{background:#0c3e66;border-color:#002542}::ng-deep .remove-focus:focus{border:none}::ng-deep .p-sidebar .p-sidebar-content{padding:0}::ng-deep .sidebar-header-sistema.p-sidebar .p-sidebar-header{padding-top:.5rem;padding-right:0;padding-bottom:0;padding-left:0;display:block}.btn-sistema{display:flex;align-items:center;justify-content:center;background-color:#0c3e66;font-size:20px}::ng-deep .p-sidebar .p-sidebar-header{padding:0rem!important}::ng-deep body{margin:0!important}::ng-deep .p-breadcrumb ul li.p-breadcrumb-chevron{position:relative;top:3px}.page-content{background:linear-gradient(to bottom,#d4d3d3 20%,#ffffff 30%)}*{margin:0}p .item-menu{color:#0c3e66;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol}::ng-deep .p-breadcrumb ul li:last-child .p-menuitem-text{font-weight:700}::ng-deep .p-breadcrumb ul li .p-menuitem-link .p-menuitem-text{color:#0c3e66!important;font-weight:500}span,.breadcrumb-title{font-size:15px!important;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol}::ng-deep .card-container{overflow-x:hidden}::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}.title-style{position:relative;top:10px;margin-left:20px;font-size:25px;color:#002542;border-bottom:2px solid green;font-weight:600;display:inline}::ng-deep p-sidebar .p-sidebar-content{overflow-y:hidden}::ng-deep p-dialog .p-dialog-content{overflow-y:unset}.icon-menu{color:#002542;display:flex;justify-content:center;align-items:center}::ng-deep .padding-style{padding:15px!important}::ng-deep .menu-option{padding:15px 5px!important}\n"] }]
179
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.Router }, { type: i1.ActivatedRoute }]; }, propDecorators: { menuCompleto: [{
180
+ type: Input
181
+ }], licencas: [{
182
+ type: Input
183
+ }], licencaSelecionada: [{
184
+ type: Input
185
+ }], logoImage: [{
186
+ type: Input
187
+ }], nomeUsuario: [{
188
+ type: Input
189
+ }], breadCrumbs: [{
190
+ type: Input
191
+ }], licencaChange: [{
192
+ type: Output
193
+ }], gerenciarKeePassEvent: [{
194
+ type: Output
195
+ }], sairEvent: [{
196
+ type: Output
197
+ }], expandMenuEmit: [{
198
+ type: Output
199
+ }], sidebarRef: [{
200
+ type: ViewChild,
201
+ args: ['sidebarRef']
202
+ }], sistemasPanel: [{
203
+ type: ViewChild,
204
+ args: ['sistemasPanel']
205
+ }], meusDadosPanel: [{
206
+ type: ViewChild,
207
+ args: ['meusDadosPanel']
208
+ }], onWindowResize: [{
209
+ type: HostListener,
210
+ args: ['window:resize', ['$event']]
211
+ }] } });
212
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvbWVudS9tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9tZW51L21lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFPOUksT0FBTyxFQUFrQixhQUFhLEVBQXNCLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFwRixNQUFNLE9BQU8sYUFBYTtJQWlDeEIsY0FBYztRQUNaLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxZQUFvQixHQUFzQixFQUFZLE1BQWMsRUFBVSxLQUFxQjtRQUEvRSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUFZLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQXJDMUYsaUJBQVksR0FBd0IsRUFBRSxDQUFDO1FBQ3ZDLGFBQVEsR0FBa0IsRUFBRSxDQUFBO1FBSTVCLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBRTVC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ZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWVudUNvbXBsZXRvTW9kZWwgfSBmcm9tICcuLi9hcGkvbW9kZWxzL21lbnUvbWVudWNvbXBsZXRvLm1vZGVsJztcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgU2lkZWJhciB9IGZyb20gJ3ByaW1lbmcvc2lkZWJhcic7XG5pbXBvcnQgeyBtZW51TW9kZWwgfSBmcm9tICcuLi9hcGkvbW9kZWxzL21lbnUvbWVudS5tb2RlbCc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgbWFzdGVyTW9kZWwgfSBmcm9tICcuLi9hcGkvbW9kZWxzL21lbnUvbWFzdGVyLm1vZGVsJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIsIFVybFNlZ21lbnQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgT3ZlcmxheVBhbmVsIH0gZnJvbSAncHJpbWVuZy9vdmVybGF5cGFuZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdrdi1tZW51JyxcbiAgdGVtcGxhdGVVcmw6ICcuL21lbnUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tZW51LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIE1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIG1lbnVDb21wbGV0bzogbWVudUNvbXBsZXRvTW9kZWxbXSA9IFtdO1xuICBASW5wdXQoKSBsaWNlbmNhczogbWFzdGVyTW9kZWxbXSA9IFtdXG4gIEBJbnB1dCgpIGxpY2VuY2FTZWxlY2lvbmFkYSE6IG1hc3Rlck1vZGVsO1xuICBASW5wdXQoKSBsb2dvSW1hZ2UhOiBhbnk7XG4gIEBJbnB1dCgpIG5vbWVVc3VhcmlvITogc3RyaW5nO1xuICBASW5wdXQoKSBicmVhZENydW1iczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBsaWNlbmNhQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGdlcmVuY2lhcktlZVBhc3NFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBzYWlyRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZXhwYW5kTWVudUVtaXQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAVmlld0NoaWxkKCdzaWRlYmFyUmVmJykgc2lkZWJhclJlZiE6IFNpZGViYXI7XG4gIEBWaWV3Q2hpbGQoJ3Npc3RlbWFzUGFuZWwnKSBzaXN0ZW1hc1BhbmVsITogT3ZlcmxheVBhbmVsO1xuICBAVmlld0NoaWxkKCdtZXVzRGFkb3NQYW5lbCcpIG1ldXNEYWRvc1BhbmVsITogT3ZlcmxheVBhbmVsO1xuXG4gIGxpY2VuY2FzT3B0aW9uczogeyBpZDogbnVtYmVyLCBkZXNjcmljYW86IHN0cmluZywgY25wajogc3RyaW5nIH1bXSA9IFtdXG4gIGxpY2VuY2FTZWxlY3RlZCE6IHsgaWQ6IG51bWJlciwgZGVzY3JpY2FvOiBzdHJpbmcsIGNucGo6IHN0cmluZyB9O1xuXG4gIG1lbnVzRmlsdHJhZG9zOiBtZW51Q29tcGxldG9Nb2RlbFtdID0gW107XG4gIG1lbnVzOiBtZW51TW9kZWxbXSA9IFtdO1xuXG4gIGJyZWFkQ3J1bWJJdGVtczogeyBsYWJlbDogc3RyaW5nLCByb3V0ZXJMaW5rOiBzdHJpbmcgfVtdID0gW107XG5cbiAgaGVpZ3RoQ2FyZCE6IG51bWJlcjtcbiAgd2lkdGhDYXJkITogbnVtYmVyO1xuICBleHBhbmRNZW51OiBib29sZWFuID0gdHJ1ZTtcblxuICB2aXNpYmxlRGlhbG9nTGljZW5jYTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxuICBvbldpbmRvd1Jlc2l6ZSgpIHtcbiAgICB0aGlzLmhlaWd0aENhcmQgPSBOdW1iZXIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhZ2UtY29udGVudCcpPy5vZmZzZXRIZWlnaHQpO1xuICAgIHRoaXMud2lkdGhDYXJkID0gTnVtYmVyKHdpbmRvdy5pbm5lcldpZHRoKSAtICh0aGlzLmV4cGFuZE1lbnUgPyAzMzMgOiA5Myk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ3VyYXJMaWNlbmNhcygpO1xuXG4gICAgaWYgKHRoaXMuYnJlYWRDcnVtYnMpIHtcbiAgICAgIHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSB7XG4gICAgICAgICAgdGhpcy5jb25maWd1cmFyQnJlYWRDcnVtYnMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5oZWlndGhDYXJkID0gTnVtYmVyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYWdlLWNvbnRlbnQnKT8ub2Zmc2V0SGVpZ2h0KTtcbiAgICB0aGlzLndpZHRoQ2FyZCA9IE51bWJlcih3aW5kb3cuaW5uZXJXaWR0aCkgLSAodGhpcy5leHBhbmRNZW51ID8gMzMzIDogOTMpO1xuICB9XG5cbiAgY29uZmlndXJhckxpY2VuY2FzKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXRMaWNlbmNhKCksIDE1MDApXG5cbiAgICB0aGlzLmxpY2VuY2FzLmZvckVhY2goKHgsIGkpID0+IHtcbiAgICAgIHRoaXMubGljZW5jYXNPcHRpb25zLnB1c2goe1xuICAgICAgICBpZDogaSxcbiAgICAgICAgZGVzY3JpY2FvOiB4LnJhemFvc29jaWFsLFxuICAgICAgICBjbnBqOiB4LmNucGpcbiAgICAgIH0pXG4gICAgfSlcblxuICAgIHZhciBsaWNlbmNhID0gdGhpcy5saWNlbmNhc09wdGlvbnMuZmluZCgoeCkgPT4geC5jbnBqID09IHRoaXMubGljZW5jYVNlbGVjaW9uYWRhLmNucGopO1xuXG4gICAgaWYgKGxpY2VuY2EgIT0gdW5kZWZpbmVkKVxuICAgICAgdGhpcy5saWNlbmNhU2VsZWN0ZWQgPSBsaWNlbmNhO1xuICB9XG5cblxuICBjb25maWd1cmFyQnJlYWRDcnVtYnMoKSB7XG4gICAgY29uc3Qgcm9vdFJvdXRlID0gdGhpcy5yb3V0ZS5yb290O1xuICAgIHRoaXMuYnJlYWRDcnVtYkl0ZW1zID0gdGhpcy5nZXRCcmVhZGNydW1icyhyb290Um91dGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRCcmVhZGNydW1icyhyb3V0ZTogQWN0aXZhdGVkUm91dGUsIHVybDogc3RyaW5nID0gJycsIGJyZWFkY3J1bWJzOiB7IGxhYmVsOiBzdHJpbmcsIHJvdXRlckxpbms6IHN0cmluZyB9W10gPSBbXSk6IHsgbGFiZWw6IHN0cmluZywgcm91dGVyTGluazogc3RyaW5nIH1bXSB7XG4gICAgY29uc3QgY2hpbGRyZW5Sb3V0ZXMgPSByb3V0ZS5jaGlsZHJlbjtcblxuICAgIGlmIChjaGlsZHJlblJvdXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBicmVhZGNydW1icztcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkUm91dGUgb2YgY2hpbGRyZW5Sb3V0ZXMpIHtcbiAgICAgIGNvbnN0IHJvdXRlVXJsID0gY2hpbGRSb3V0ZS5zbmFwc2hvdC51cmwubWFwKHNlZ21lbnQgPT4gc2VnbWVudC5wYXRoKS5qb2luKCcvJyk7XG4gICAgICBpZiAocm91dGVVcmwgIT09ICcnKSB7XG4gICAgICAgIHVybCArPSBgLyR7cm91dGVVcmx9YDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYnJlYWRjcnVtYkxhYmVsID0gY2hpbGRSb3V0ZS5zbmFwc2hvdC5kYXRhWydicmVhZGNydW1iJ107XG4gICAgICBpZiAoYnJlYWRjcnVtYkxhYmVsKSB7XG4gICAgICAgIGJyZWFkY3J1bWJzLnB1c2goeyBsYWJlbDogYnJlYWRjcnVtYkxhYmVsLCByb3V0ZXJMaW5rOiB1cmwgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmdldEJyZWFkY3J1bWJzKGNoaWxkUm91dGUsIHVybCwgYnJlYWRjcnVtYnMpO1xuICAgIH1cblxuICAgIHJldHVybiBicmVhZGNydW1icztcbiAgfVxuXG4gIGNsb3NlQ2FsbGJhY2soZTogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNpZGViYXJSZWYuY2xvc2UoZSk7XG4gIH1cblxuICBNYXNjYXJhTm9tZUxpY2VuY2Eobm9tZUxpY2VuY2E6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKG5vbWVMaWNlbmNhKSB7XG4gICAgICBpZiAobm9tZUxpY2VuY2EubGVuZ3RoID4gMjQpXG4gICAgICAgIHJldHVybiBub21lTGljZW5jYS5zdWJzdHJpbmcoMCwgMjQpICsgJy4uLic7XG4gICAgICBlbHNlIHJldHVybiBub21lTGljZW5jYTtcbiAgICB9IGVsc2UgcmV0dXJuICcnO1xuICB9XG5cbiAgTWFzY2FyYUNucGooY25wajogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBjbnBqTGltcG8gPSBjbnBqLnJlcGxhY2UoL1xcRC9nLCAnJyk7XG5cbiAgICByZXR1cm4gY25wakxpbXBvLnJlcGxhY2UoXG4gICAgICAvXihcXGR7Mn0pKFxcZHszfSkoXFxkezN9KShcXGR7NH0pKFxcZHsyfSkkLyxcbiAgICAgICckMS4kMi4kMy8kNC0kNSdcbiAgICApO1xuICB9XG5cbiAgZGVmaW5pck1lbnVzUG9yU2lzdGVtYShpZHNpc3RlbWE6IG51bWJlcikge1xuICAgIHRoaXMubWVudXMgPVxuICAgICAgdGhpcy5tZW51Q29tcGxldG8uZmluZCgoeCkgPT4geC5zaXN0ZW1hLmlkc2lzdGVtYSA9PSBpZHNpc3RlbWEpPy5tZW51cyB8fFxuICAgICAgW107XG5cbiAgICBjb25zb2xlLmxvZyh0aGlzLm1lbnVzLCAnbWVudXMnKVxuICAgIGNvbnNvbGUubG9nKHRoaXMubWVudUNvbXBsZXRvLCAnbWVudUNvbXBsZXRvJylcbiAgICBjb25zb2xlLmxvZyh0aGlzLm1lbnVzWzBdLm1lbnVwYWksICdtZW51cGFpJylcblxuICAgIGlmICh0aGlzLm1lbnVzWzBdLm1lbnVwYWkpIHtcbiAgICAgIHZhciBmaWxob3MgPSB0aGlzLnJldG9ybmFyTWVudUZpbGhvcyh0aGlzLm1lbnVzWzBdLmlkc2lzdGVtYSwgdGhpcy5tZW51c1swXS5pZG1lbnUpO1xuICAgICAgaWYgKGZpbGhvcyAhPSB1bmRlZmluZWQpXG4gICAgICAgIHRoaXMuY2FsbFJvdXRlKGZpbGhvc1swXS5saW5rLCB0cnVlKVxuICAgIH0gZWxzZSB0aGlzLmNhbGxSb3V0ZSh0aGlzLm1lbnVzWzBdLmxpbmssIHRydWUpXG5cbiAgICB0aGlzLnNpc3RlbWFzUGFuZWwuaGlkZSgpO1xuICB9XG5cbiAgcmV0b3JuYXJNZW51RmlsaG9zKGlkc2lzdGVtYTogbnVtYmVyLCBpZG1lbnU6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLm1lbnVDb21wbGV0b1xuICAgICAgLmZpbmQoKHgpID0+IHguc2lzdGVtYS5pZHNpc3RlbWEgPT0gaWRzaXN0ZW1hKVxuICAgICAgPy5tZW51cy5maWx0ZXIoKHgpID0+IHguaWRtZW51cGFpID09IGlkbWVudSk7XG4gIH1cblxuICBjYWxsUm91dGUoZTogYW55LCBleHBhbmQ/OiBib29sZWFuKSB7XG4gICAgaWYgKCFleHBhbmQpXG4gICAgICAhdGhpcy5leHBhbmRNZW51ID8gdGhpcy5leHBhbmRNZW51ID0gIXRoaXMuZXhwYW5kTWVudSA6ICcnXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChlKVxuICB9XG5cbiAgdG9nZ2xlTWVudSgpIHtcbiAgICB0aGlzLmV4cGFuZE1lbnUgPSAhdGhpcy5leHBhbmRNZW51O1xuICAgIHRoaXMuZXhwYW5kTWVudUV2ZW50KClcbiAgfVxuXG4gIHNldExpY2VuY2EoKSB7XG4gICAgdmFyIGxpY2VuY2EgPSB0aGlzLmxpY2VuY2FzLmZpbmQoKGxpY2VuY2EpID0+IGxpY2VuY2EuY25waiA9PSB0aGlzLmxpY2VuY2FTZWxlY3RlZC5jbnBqKTtcbiAgICBpZiAobGljZW5jYSkgdGhpcy5saWNlbmNhU2VsZWNpb25hZGEgPSBsaWNlbmNhO1xuXG4gICAgdGhpcy52aXNpYmxlRGlhbG9nTGljZW5jYSA9IGZhbHNlXG5cbiAgICB0aGlzLmxpY2VuY2FDaGFuZ2UuZW1pdCh0aGlzLmxpY2VuY2FTZWxlY2lvbmFkYSk7XG5cbiAgICB0aGlzLmRlZmluaXJNZW51c1BvclNpc3RlbWEodGhpcy5tZW51Q29tcGxldG9bMF0/LnNpc3RlbWEuaWRzaXN0ZW1hKVxuICB9XG5cbiAgZ2VyZW5jaWFyS2VlUGFzcyhldmVudDogYW55KSB7XG4gICAgdGhpcy5zaXN0ZW1hc1BhbmVsLmhpZGUoKTtcbiAgICB0aGlzLmdlcmVuY2lhcktlZVBhc3NFdmVudC5lbWl0KGV2ZW50KVxuICB9XG5cbiAgc2FpcihldmVudDogYW55KSB7XG4gICAgdGhpcy5zaXN0ZW1hc1BhbmVsLmhpZGUoKTtcbiAgICB0aGlzLnNhaXJFdmVudC5lbWl0KGV2ZW50KVxuICB9XG5cbiAgZXhwYW5kTWVudUV2ZW50KCkge1xuICAgIHRoaXMuZXhwYW5kTWVudUVtaXQuZW1pdCh0aGlzLmV4cGFuZE1lbnUpO1xuICB9XG5cbiAgYWp1c3RhckhlaWd0aENhcmQoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy53aWR0aENhcmQgPiA0MDApIHtcbiAgICAgIGlmICh0aGlzLmJyZWFkQ3J1bWJzKSByZXR1cm4gMTA1XG4gICAgICBlbHNlIHJldHVybiA4NVxuICAgIH0gZWxzZSByZXR1cm4gODNcbiAgfVxuXG4gIHZlcmlmaWNhclBhZ2luYVNlbGVjaW9uYWRhKGxpbms6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMucm91dGVyLnVybC5pbmNsdWRlcyhsaW5rKSkgcmV0dXJuICdiZy1ncmVlbi02MDAnXG4gICAgZWxzZSByZXR1cm4gJyc7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IG92ZXJmbG93LXktaGlkZGVuIHctIGZ1bGwtY29udGFpbmVyXCI+XG5cbiAgPGRpdiBbc3R5bGVdPVwie21pbldpZHRoOiBleHBhbmRNZW51ID8gJzMwMHB4JyA6ICc2MHB4J31cIj48L2Rpdj5cblxuICA8cC1zaWRlYmFyXG4gICAgI3NpZGViYXJSZWZcbiAgICBbdmlzaWJsZV09XCJ0cnVlXCJcbiAgICBbc2hvd0Nsb3NlSWNvbl09XCJmYWxzZVwiXG4gICAgW21vZGFsXT1cImZhbHNlXCJcbiAgICBbc3R5bGVdPVwie3dpZHRoOiBleHBhbmRNZW51ID8gJzMwMHB4JyA6ICc2MHB4J31cIlxuICA+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRsZXNzXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiB7e2V4cGFuZE1lbnUgPyAnbXgtMScgOiAnbXgtMSd9fVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiBnYXAtMiBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBmbGV4LXNocmluay0wIG14LTJcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIHt7ZXhwYW5kTWVudSA/ICdqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbicgOiAnanVzdGlmeS1jb250ZW50LWNlbnRlcid9fSBweS0zXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICpuZ0lmPVwiZXhwYW5kTWVudVwiXG4gICAgICAgICAgICAgIGFsdD1cIkNhcmRcIlxuICAgICAgICAgICAgICBbc3JjXT1cImxvZ29JbWFnZVwiXG4gICAgICAgICAgICAgIHdpZHRoPVwiMTUwXCJcbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dCBwYWRkaW5nLXN0eWxlIGgtMnJlbSB3LTJyZW0gaG92ZXI6YmctZ3JlZW4tNjAwIGhvdmVyOnRleHQtd2hpdGUgaWNvbi1tZW51XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU1lbnUoKVwiXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJleHBhbmRNZW51ID8gJ09jdXRhciBNZW51JyA6ICdFeHBhbmRpciBNZW51J1wiXG4gICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ3JpZ2h0J1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPlxuICAgICAgICAgICAgICAgIG1lbnVcbiAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIHt7ZXhwYW5kTWVudSA/ICdqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbicgOiAnanVzdGlmeS1jb250ZW50LWNlbnRlcid9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAqbmdJZj1cImV4cGFuZE1lbnVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidmlzaWJsZURpYWxvZ0xpY2VuY2EgPSAhdmlzaWJsZURpYWxvZ0xpY2VuY2FcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1zbSBmb250LXNlbWlib2xkIG1yLTJcIlxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJ0aGlzLmxpY2VuY2FTZWxlY2lvbmFkYS5yYXphb3NvY2lhbFwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCIncmlnaHQnXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7TWFzY2FyYU5vbWVMaWNlbmNhKHRoaXMubGljZW5jYVNlbGVjaW9uYWRhLnJhemFvc29jaWFsKX19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIG10LTFcIj57e01hc2NhcmFDbnBqKHRoaXMubGljZW5jYVNlbGVjaW9uYWRhLmNucGopfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IHBhZGRpbmctc3R5bGUgaC0ycmVtIHctMnJlbSBob3ZlcjpiZy1ncmVlbi02MDAgaG92ZXI6dGV4dC13aGl0ZSBpY29uLW1lbnVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidmlzaWJsZURpYWxvZ0xpY2VuY2EgPSAhdmlzaWJsZURpYWxvZ0xpY2VuY2FcIlxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ0FsdGVyYXIgTGljZW7Dp2EnXCJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCIncmlnaHQnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+XG4gICAgICAgICAgICAgICAgc3luY19hbHRcbiAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8cC1kaXZpZGVyIHR5cGU9XCJzb2xpZFwiPjwvcC1kaXZpZGVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJsaXN0LW5vbmUgbS0wICBjYXJkLWNvbnRhaW5lciB7e2V4cGFuZE1lbnUgPyAnbXgtMScgOiAnJ319XCJcbiAgICAgICAgICBbc3R5bGUubWF4LWhlaWdodF09XCIoaGVpZ3RoQ2FyZCAtIDIyMCkgKyAncHgnXCJcbiAgICAgICAgICBzdHlsZT1cIm92ZXJmbG93LXk6IGF1dG87XCJcbiAgICAgICAgPlxuICAgICAgICAgIDwhLS0gbWVudXMgLS0+XG4gICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBtZW51IG9mIG1lbnVzXCI+XG4gICAgICAgICAgICA8IS0tIG1lbnUgcXVlIG7Do28gdGVtIGZpbGhvIC0tPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbGxSb3V0ZShtZW51LmxpbmspXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhbWVudS5tZW51cGFpICYmIG1lbnUuaWRtZW51cGFpID09IDBcIlxuICAgICAgICAgICAgICBwUmlwcGxlXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCIhZXhwYW5kTWVudSA/IG1lbnUuZGVzY3JpY2FvbWVudSA6ICcnXCJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCIncmlnaHQnXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ7e3ZlcmlmaWNhclBhZ2luYVNlbGVjaW9uYWRhKG1lbnUubGluayl9fSBtZW51LW9wdGlvbiBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBuby11bmRlcmxpbmUge3shZXhwYW5kTWVudSA/ICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJyA6ICcnfX0gY3Vyc29yLXBvaW50ZXIgYm9yZGVyLXJvdW5kIHRleHQtNzAwIGhvdmVyOmJnLWdyZWVuLTYwMCBob3Zlcjp0ZXh0LXdoaXRlIHRyYW5zaXRpb24tZHVyYXRpb24tMTUwIHRyYW5zaXRpb24tY29sb3JzIHAtcmlwcGxlXCJcbiAgICAgICAgICAgID5cblxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpY29uLW1lbnUge3tleHBhbmRNZW51ID8gJ21sLTEgbXItMicgOiAnJ319XCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm1lbnUuaWNvbmUgJiYgbWVudS5pY29uZSAhPT0gJydcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgbWVudS5pY29uZSB9fVxuICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWJhc2UgdGV4dC1ibHVlLTkwMCBmb250LW1lZGl1bVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJleHBhbmRNZW51XCJcbiAgICAgICAgICAgICAgPnt7IG1lbnUuZGVzY3JpY2FvbWVudSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgPCEtLSBtZW51IGNvbSBmaWxobyAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJtZW51Lm1lbnVwYWlcIj5cbiAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICBwUmlwcGxlXG4gICAgICAgICAgICAgICAgcFN0eWxlQ2xhc3M9XCJAbmV4dFwiXG4gICAgICAgICAgICAgICAgZW50ZXJDbGFzcz1cImhpZGRlblwiXG4gICAgICAgICAgICAgICAgZW50ZXJBY3RpdmVDbGFzcz1cInNsaWRlZG93blwiXG4gICAgICAgICAgICAgICAgbGVhdmVUb0NsYXNzPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICBsZWF2ZUFjdGl2ZUNsYXNzPVwic2xpZGV1cFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtZW51LW9wdGlvbiBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciB7eyFleHBhbmRNZW51ID8gJ2p1c3RpZnktY29udGVudC1jZW50ZXInIDogJ2p1c3RpZnktY29udGVudC1iZXR3ZWVuJ319IGN1cnNvci1wb2ludGVyIGJvcmRlci1yb3VuZCB0ZXh0LTcwMCBob3ZlcjpiZy1ncmVlbi02MDAgaG92ZXI6dGV4dC13aGl0ZSB0cmFuc2l0aW9uLWR1cmF0aW9uLTE1MCB0cmFuc2l0aW9uLWNvbG9ycyBwLXJpcHBsZVwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCIncmlnaHQnXCJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiIWV4cGFuZE1lbnUgPyBtZW51LmRlc2NyaWNhb21lbnUgOiAnJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIiFleHBhbmRNZW51ID8gZXhwYW5kTWVudSA9ICFleHBhbmRNZW51IDogJydcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XG5cbiAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpY29uLW1lbnUge3tleHBhbmRNZW51ID8gJ21sLTEgbXItMicgOiAnJ319XCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJtZW51Lmljb25lICYmIG1lbnUuaWNvbmUgIT09ICcnXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgbWVudS5pY29uZSB9fVxuICAgICAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWJhc2UgdGV4dC1ibHVlLTkwMCBmb250LW1lZGl1bVwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZXhwYW5kTWVudVwiXG4gICAgICAgICAgICAgICAgICA+e3sgbWVudS5kZXNjcmljYW9tZW51IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInBpIHBpLWNoZXZyb24tZG93biB0ZXh0LWJsdWUtOTAwIG1yLTFcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJleHBhbmRNZW51XCJcbiAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICA8L2E+XG5cbiAgICAgICAgICAgICAgPCEtLSBmaWxob3MgLS0+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImxpc3Qtbm9uZSBweS0wIHBsLTMgcHItMCBtLTAgaGlkZGVuIG92ZXJmbG93LXktaGlkZGVuIHRyYW5zaXRpb24tYWxsIHRyYW5zaXRpb24tZHVyYXRpb24tNDAwIHRyYW5zaXRpb24tZWFzZS1pbi1vdXRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgPGxpICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICBsZXQgZmlsaG8gb2YgcmV0b3JuYXJNZW51RmlsaG9zKG1lbnUuaWRzaXN0ZW1hLCBtZW51LmlkbWVudSlcbiAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgKm5nSWY9XCJleHBhbmRNZW51XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbGxSb3V0ZShmaWxoby5saW5rKVwiXG4gICAgICAgICAgICAgIHBSaXBwbGVcbiAgICAgICAgICAgICAgY2xhc3M9XCJ7e3ZlcmlmaWNhclBhZ2luYVNlbGVjaW9uYWRhKGZpbGhvLmxpbmspfX0gbWVudS1vcHRpb24gZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbm8tdW5kZXJsaW5lIGN1cnNvci1wb2ludGVyIGJvcmRlci1yb3VuZCB0ZXh0LTcwMCBob3ZlcjpiZy1ncmVlbi02MDAgaG92ZXI6dGV4dC13aGl0ZSB0cmFuc2l0aW9uLWR1cmF0aW9uLTE1MCB0cmFuc2l0aW9uLWNvbG9ycyBwLXJpcHBsZSBwLTJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIGNsYXNzPVwicGkgcGktY2hhcnQtbGluZSBtci0yIG1sLTEgYWRqdXN0LWljb24tbWVudVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJmaWxoby5pY29uZSAmJiBmaWxoby5pY29uZSAhPT0gJydcIlxuICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1iYXNlIHRleHQtYmx1ZS05MDBcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZXhwYW5kTWVudVwiXG4gICAgICAgICAgICAgID57eyBmaWxoby5kZXNjcmljYW9tZW51IH19PC9zcGFuPlxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG48L2Rpdj5cbjwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjwvcC1zaWRlYmFyPlxuXG5cbjxkaXZcbiAgY2xhc3M9XCJ3LWF1dG8gaC1zY3JlZW4gcGFnZS1jb250ZW50IG92ZXJmbG93LXktaGlkZGVuXCJcbiAgaWQ9XCJwYWdlLWNvbnRlbnRcIlxuPlxuXG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtLTNcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiYnJlYWRDcnVtYnNcIj5cbiAgICAgIDxwIGNsYXNzPVwidGV4dC14bCBmb250LXNlbWlib2xkIHRleHQtYmx1ZS05MDAgYnJlYWRjcnVtYi10aXRsZVwiPnt7YnJlYWRDcnVtYkl0ZW1zW2JyZWFkQ3J1bWJJdGVtcy5sZW5ndGggLVxuICAgICAgICAxXT8ubGFiZWx9fTwvcD5cbiAgICAgIDxwLWJyZWFkY3J1bWJcbiAgICAgICAgKm5nSWY9XCJ3aWR0aENhcmQgPiA0MDBcIlxuICAgICAgICBzdHlsZUNsYXNzPVwiYm9yZGVyLW5vbmUgcC0wIGZsZXggYWxpZ24taXRlbXMtY2VudGVyIGgtMnJlbVwiXG4gICAgICAgIFttb2RlbF09XCJicmVhZENydW1iSXRlbXNcIlxuICAgICAgICBbc3R5bGVdPVwie2JhY2tncm91bmRDb2xvcjogJyNkNGQzZDMnfVwiXG4gICAgICAgIChvbkl0ZW1DbGljayk9XCJjYWxsUm91dGUoJGV2ZW50Lml0ZW0ucm91dGVyTGluaywgdHJ1ZSlcIlxuICAgICAgPjwvcC1icmVhZGNydW1iPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cIiFicmVhZENydW1ic1wiPjwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInctYXV0byBmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBwQnV0dG9uXG4gICAgICAgIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IGgtMnJlbSB3LTJyZW0gaG92ZXI6YmctZ3JlZW4tNjAwIGhvdmVyOnRleHQtd2hpdGUgaWNvbi1tZW51IHBhZGRpbmctc3R5bGVcIlxuICAgICAgICAoY2xpY2spPVwic2lzdGVtYXNQYW5lbC50b2dnbGUoJGV2ZW50KVwiXG4gICAgICAgIFtwVG9vbHRpcF09XCInU2lzdGVtYXMnXCJcbiAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInbGVmdCdcIlxuICAgICAgPlxuICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5cbiAgICAgICAgICBhcHBzXG4gICAgICAgIDwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBwQnV0dG9uXG4gICAgICAgIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IGgtMnJlbSB3LTJyZW0gaG92ZXI6YmctZ3JlZW4tNjAwIGhvdmVyOnRleHQtd2hpdGUgaWNvbi1tZW51IHBhZGRpbmctc3R5bGVcIlxuICAgICAgICAoY2xpY2spPVwibWV1c0RhZG9zUGFuZWwudG9nZ2xlKCRldmVudClcIlxuICAgICAgICBbcFRvb2x0aXBdPVwiJ01lbnUgZG8gVXN1w6FyaW8nXCJcbiAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInbGVmdCdcIlxuICAgICAgPlxuICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5cbiAgICAgICAgICBwZXJzb25cbiAgICAgICAgPC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG5cbiAgPHAtY2FyZFxuICAgIGNsYXNzPVwiY2FyZC1jb250YWluZXJcIlxuICAgIHN0eWxlQ2xhc3M9XCJtLTMgYm9yZGVyLW5vcm91bmQgb3ZlcmZsb3cteS1hdXRvIGNhcmQtY29udGFpbmVyXCJcbiAgICBbc3R5bGVdPVwie2hlaWdodDogaGVpZ3RoQ2FyZCAtIGFqdXN0YXJIZWlndGhDYXJkKCkgKyAncHgnfVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1jb250YWluZXIgdy1mdWxsXCI+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvcC1jYXJkPlxuXG48L2Rpdj5cblxuXG48L2Rpdj5cblxuPHAtb3ZlcmxheVBhbmVsXG4gICNzaXN0ZW1hc1BhbmVsXG4gIFtzaG93VHJhbnNpdGlvbk9wdGlvbnNdPVwiJzM1MG1zIGVhc2Utb3V0J1wiXG4gIFtoaWRlVHJhbnNpdGlvbk9wdGlvbnNdPVwiJzI1MG1zIGVhc2UtaW4nXCJcbj5cblxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY29udGFpbmVyXCI+XG5cbiAgICA8cCBjbGFzcz1cInRpdGxlLXN0eWxlIG10LTNcIj5TaXN0ZW1hczwvcD5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgZmxleC13cmFwIGdhcC0yIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG10LTUgbWItM1wiXG4gICAgICBzdHlsZT1cIndpZHRoOiAyNTBweDsgaGVpZ2h0OiAxMDAlO1wiXG4gICAgPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdGb3I9XCJsZXQgbWVudSBvZiBtZW51Q29tcGxldG9cIlxuICAgICAgICBwQnV0dG9uXG4gICAgICAgIHBSaXBwbGVcbiAgICAgICAgY2xhc3M9XCJidG4tc2lzdGVtYS0yIGJ0bi1zaXN0ZW1hIGhvdmVyLWJ0bi1jb3ItcGFkcmFvIHJlbW92ZS1mb2N1cyBoLTRyZW0gdy00cmVtXCJcbiAgICAgICAgKGNsaWNrKT1cImRlZmluaXJNZW51c1BvclNpc3RlbWEobWVudS5zaXN0ZW1hLmlkc2lzdGVtYSlcIlxuICAgICAgICBbcFRvb2x0aXBdPVwibWVudS5zaXN0ZW1hLmRlc2NyaWNhb3Npc3RlbWFcIlxuICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidsZWZ0J1wiXG4gICAgICA+XG4gICAgICAgIDwhLS0gPGltZ1xuICAgICAgICAgIGFsdD1cImxvZ29cIlxuICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDJyZW07IGhlaWdodDogMnJlbTtcIlxuICAgICAgICAvPiAtLT5cbiAgICAgICAge3sgbWVudS5zaXN0ZW1hLm5vbWVzaXN0ZW1hLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpIH19XG5cbiAgICAgIDwvYnV0dG9uPlxuXG5cbiAgICAgIDwhLS0gPHAtYnV0dG9uIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1vdXRsaW5lZFwiPlxuICAgICAgICA8aW1nIGFsdD1cImxvZ29cIiBzcmM9XCJodHRwczovL3ByaW1lZmFjZXMub3JnL2Nkbi9wcmltZW5nL2ltYWdlcy9wcmltZW5nLWljb24uc3ZnXCIgc3R5bGU9XCJ3aWR0aDogMS41cmVtXCIgLz5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yIGZvbnQtYm9sZFwiPlByaW1lTkc8L3NwYW4+XG4gICAgPC9wLWJ1dHRvbj4gLS0+XG5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvcC1vdmVybGF5UGFuZWw+XG5cbjxwLW92ZXJsYXlQYW5lbFxuICAjbWV1c0RhZG9zUGFuZWxcbiAgW3Nob3dUcmFuc2l0aW9uT3B0aW9uc109XCInMzUwbXMgZWFzZS1vdXQnXCJcbiAgW2hpZGVUcmFuc2l0aW9uT3B0aW9uc109XCInMjUwbXMgZWFzZS1pbidcIlxuPlxuXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjb250YWluZXJcIj5cblxuICAgIDxwIGNsYXNzPVwidGl0bGUtc3R5bGUgbXQtM1wiPk9sw6EsIHt7bm9tZVVzdWFyaW8gPyBub21lVXN1YXJpby5zcGxpdCgnICcpWzBdIDogJ1VzdcOhcmlvJ319ICE8L3A+XG4gICAgPGRpdiBjbGFzcz1cIm10LTUgbWItM1wiPlxuXG4gICAgPC9kaXY+XG5cbiAgICA8cC1idXR0b25cbiAgICAgIGljb249XCJwaSBwaS1sb2NrXCJcbiAgICAgIGxhYmVsPVwiR2Vyw6puY2lhciBLZWV2b1Bhc3NcIlxuICAgICAgKG9uQ2xpY2spPVwiZ2VyZW5jaWFyS2VlUGFzcygkZXZlbnQpXCJcbiAgICAgIHN0eWxlQ2xhc3M9XCJib3JkZXItbm9yb3VuZCB3LWZ1bGwgcC1idXR0b24tdGV4dCB0ZXh0LWJsdWUtOTAwXCJcbiAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCJcbiAgICA+PC9wLWJ1dHRvbj5cbiAgICA8cC1idXR0b25cbiAgICAgIGljb249XCJwaSBwaS1zaWduLW91dFwiXG4gICAgICBsYWJlbD1cIlNhaXJcIlxuICAgICAgKG9uQ2xpY2spPVwic2FpcigkZXZlbnQpXCJcbiAgICAgIHN0eWxlQ2xhc3M9XCJib3JkZXItbm9yb3VuZCB3LWZ1bGwgcC1idXR0b24tdGV4dCB0ZXh0LWJsdWUtOTAwXCJcbiAgICA+PC9wLWJ1dHRvbj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuPC9wLW92ZXJsYXlQYW5lbD5cblxuPHAtZGlhbG9nXG4gIFsodmlzaWJsZSldPVwidmlzaWJsZURpYWxvZ0xpY2VuY2FcIlxuICBbbW9kYWxdPVwidHJ1ZVwiXG4gIFtkcmFnZ2FibGVdPVwiZmFsc2VcIlxuICBoZWFkZXI9XCJUcm9jYXIgTGljZW7Dp2FcIlxuICBbc3R5bGVdPVwie3dpZHRoOiAnNTB2aCcgfVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWVuZFwiPlxuXG4gICAgPGRpdiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgPHAtZHJvcGRvd25cbiAgICAgICAgc3R5bGVDbGFzcz1cInctZnVsbFwiXG4gICAgICAgIFtvcHRpb25zXT1cImxpY2VuY2FzT3B0aW9uc1wiXG4gICAgICAgIFsobmdNb2RlbCldPVwibGljZW5jYVNlbGVjdGVkXCJcbiAgICAgICAgb3B0aW9uTGFiZWw9XCJkZXNjcmljYW9cIlxuICAgICAgPjwvcC1kcm9wZG93bj5cbiAgICA8L2Rpdj5cblxuICAgIDxrdi1idXR0b24tc3VjY2Vzc1xuICAgICAgW2xhYmVsXT1cIidTYWx2YXInXCJcbiAgICAgIGNsYXNzPVwibXQtMlwiXG4gICAgICAob25DbGljayk9XCJzZXRMaWNlbmNhKClcIlxuICAgID48L2t2LWJ1dHRvbi1zdWNjZXNzPlxuXG4gIDwvZGl2PlxuXG48L3AtZGlhbG9nPiJdfQ==