keevo-components 2.0.179 → 2.0.181
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/kv-icon/kv-icon.component.mjs +3 -3
- package/esm2022/lib/components/kv-table-draggable/kv-table-draggable.component.mjs +35 -35
- package/esm2022/lib/components/kv-tree-environment/components/kv-tree-environment/kv-tree-environment.component.mjs +134 -174
- package/esm2022/lib/components/kv-tree-environment/components/no-arvore/no-arvore.component.mjs +30 -46
- package/esm2022/lib/components/kv-tree-environment/models/no-arvore.model.mjs +1 -1
- package/esm2022/lib/components/kv-widget-card/kv-widget-card.component.mjs +3 -3
- package/fesm2022/keevo-components.mjs +231 -294
- package/fesm2022/keevo-components.mjs.map +1 -1
- package/lib/api/base-components/base-component-dropdown.d.ts +1 -1
- package/lib/components/kv-button/kv-button.component.d.ts +1 -1
- package/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.d.ts +1 -1
- package/lib/components/kv-stepper/kv-stepper.component.d.ts +2 -2
- package/lib/components/kv-table/kv-table.component.d.ts +1 -1
- package/lib/components/kv-table-draggable/kv-table-draggable.component.d.ts +1 -1
- package/lib/components/kv-table-expandable/kv-table-expandable.component.d.ts +1 -1
- package/lib/components/kv-table-viewer/kv-table-viewer.component.d.ts +1 -1
- package/lib/components/kv-tag/kv-tag.component.d.ts +1 -1
- package/lib/components/kv-tree-environment/components/kv-tree-environment/kv-tree-environment.component.d.ts +28 -31
- package/lib/components/kv-tree-environment/components/no-arvore/no-arvore.component.d.ts +14 -15
- package/lib/components/kv-tree-environment/models/no-arvore.model.d.ts +6 -4
- package/package.json +1 -1
|
@@ -1,13 +1,24 @@
|
|
|
1
1
|
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { Component, input, signal, Output, EventEmitter,
|
|
2
|
+
import { ChangeDetectionStrategy, Component, input, signal, Output, EventEmitter, computed, ContentChild, effect } from '@angular/core';
|
|
3
3
|
import { NoArvoreComponent } from '../no-arvore/no-arvore.component';
|
|
4
4
|
import { ScrollingModule } from '@angular/cdk/scrolling';
|
|
5
5
|
import { PrimeNgModule } from '../../../../api/modules/primeng.module';
|
|
6
|
+
import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from "@angular/forms";
|
|
7
|
+
import { toSignal } from '@angular/core/rxjs-interop';
|
|
8
|
+
import { KeevoComponentsModule } from '../../../keevo-components.module';
|
|
6
9
|
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "@angular/
|
|
8
|
-
import * as i2 from "
|
|
10
|
+
import * as i1 from "@angular/common";
|
|
11
|
+
import * as i2 from "@angular/cdk/scrolling";
|
|
12
|
+
import * as i3 from "primeng/api";
|
|
13
|
+
import * as i4 from "primeng/sidebar";
|
|
14
|
+
import * as i5 from "../../../kv-button/kv-button.component";
|
|
15
|
+
import * as i6 from "../../../kv-inputs/kv-input-text/kv-input-text.component";
|
|
16
|
+
import * as i7 from "@angular/forms";
|
|
9
17
|
export class KvTreeEnvironmentComponent {
|
|
10
18
|
constructor() {
|
|
19
|
+
this.onAddClick = new EventEmitter();
|
|
20
|
+
this.onSelectedItem = new EventEmitter();
|
|
21
|
+
this.onSidebarNodeClick = new EventEmitter();
|
|
11
22
|
this.arvoreDeDados = input([]);
|
|
12
23
|
this.nosSimples = input([]);
|
|
13
24
|
this.estruturaArvore = input([]);
|
|
@@ -15,128 +26,74 @@ export class KvTreeEnvironmentComponent {
|
|
|
15
26
|
this.configuracao = input({});
|
|
16
27
|
this.showButtonCollapsed = input(true);
|
|
17
28
|
this.showAddButton = input(true);
|
|
18
|
-
this.
|
|
19
|
-
this.
|
|
20
|
-
this.
|
|
21
|
-
this.mapaDeExpansao = new Map();
|
|
22
|
-
this._cachedDados = null;
|
|
23
|
-
this._dadosHash = null;
|
|
24
|
-
this._cachedListaPlana = null;
|
|
25
|
-
this._listaPlanaHash = null;
|
|
26
|
-
this.listaPlana = signal([]);
|
|
27
|
-
this.iconCollapsed = signal('collapse_all');
|
|
28
|
-
this.collapsedAll = signal(true);
|
|
29
|
+
this.showSearchField = input(false);
|
|
30
|
+
this.enableSidebar = input(false);
|
|
31
|
+
this.sidebarVisible = signal(false);
|
|
29
32
|
this.selectedItem = signal(null);
|
|
30
|
-
|
|
33
|
+
this.currentSidebarNode = signal(null);
|
|
34
|
+
this.expansaoState = signal(new Map());
|
|
35
|
+
this.formFiltro = new FormGroup({
|
|
36
|
+
search: new FormControl('')
|
|
37
|
+
});
|
|
38
|
+
this.searchValue = toSignal(this.formFiltro.get('search').valueChanges, { initialValue: '' });
|
|
39
|
+
this.dadosProcessados = computed(() => {
|
|
31
40
|
const estrutura = this.estruturaArvore();
|
|
32
41
|
const dados = this.dadosArvore();
|
|
33
42
|
const simples = this.nosSimples();
|
|
34
43
|
const arvore = this.arvoreDeDados();
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
this._dadosHash = dadosHash;
|
|
38
|
-
this.invalidarCache();
|
|
39
|
-
const temDados = estrutura.length > 0 || dados.length > 0 || simples.length > 0 || arvore.length > 0;
|
|
40
|
-
if (temDados) {
|
|
41
|
-
this.gerarListaPlanaOtimizada();
|
|
42
|
-
this.atualizarEstadoCollapseButton();
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
this.listaPlana.set([]);
|
|
46
|
-
}
|
|
44
|
+
if (estrutura && estrutura.length > 0) {
|
|
45
|
+
return this.combinarEstruturaComDados(estrutura, dados || []);
|
|
47
46
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
47
|
+
else if (simples && simples.length > 0) {
|
|
48
|
+
return this.converterSimplesParaCompleto(simples);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
return arvore;
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
this.dadosFiltrados = computed(() => {
|
|
55
|
+
const search = this.searchValue()?.trim().toLowerCase() || '';
|
|
56
|
+
const dados = this.dadosProcessados();
|
|
57
|
+
if (!search) {
|
|
58
|
+
return dados;
|
|
59
|
+
}
|
|
60
|
+
return this.filtrarArvoreComHierarquia(dados, search);
|
|
61
|
+
});
|
|
62
|
+
this.listaPlana = computed(() => {
|
|
63
|
+
const dados = this.dadosFiltrados();
|
|
64
|
+
const expansaoMap = this.expansaoState();
|
|
65
|
+
return this.transformarParaListaPlana(dados, expansaoMap, 0);
|
|
66
|
+
});
|
|
67
|
+
this.iconCollapsed = computed(() => {
|
|
68
|
+
const nosExpandiveis = this.obterTodosNosExpandiveis(this.dadosProcessados());
|
|
69
|
+
const expansaoMap = this.expansaoState();
|
|
70
|
+
const algumExpandido = nosExpandiveis.some(node => expansaoMap.get(node.rotulo) ?? (node.expanded ?? false));
|
|
71
|
+
return algumExpandido ? 'collapse_all' : 'expand_content';
|
|
72
|
+
});
|
|
73
|
+
this.collapsedAll = computed(() => {
|
|
74
|
+
return this.iconCollapsed() === 'expand_content';
|
|
75
|
+
});
|
|
76
|
+
effect(() => {
|
|
77
|
+
const search = this.searchValue()?.trim().toLowerCase();
|
|
78
|
+
const dados = this.dadosFiltrados();
|
|
79
|
+
if (search) {
|
|
80
|
+
this.expandirTodosNos(dados);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
53
83
|
}
|
|
54
84
|
alternarNo(noPlano) {
|
|
55
85
|
if (!noPlano.expansivel)
|
|
56
86
|
return;
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
forcarAtualizacaoLista() {
|
|
62
|
-
this._cachedListaPlana = null;
|
|
63
|
-
this._listaPlanaHash = null;
|
|
64
|
-
const dados = this.obterDadosOtimizado();
|
|
65
|
-
const novaListaPlana = this.transformarParaListaPlanaOtimizada(dados);
|
|
66
|
-
this.listaPlana.set(novaListaPlana);
|
|
67
|
-
this.cdr.detectChanges();
|
|
68
|
-
setTimeout(() => {
|
|
69
|
-
const expansaoHash = Array.from(this.mapaDeExpansao.entries())
|
|
70
|
-
.sort(([a], [b]) => a.localeCompare(b))
|
|
71
|
-
.map(([k, v]) => `${k}:${v}`)
|
|
72
|
-
.join(',');
|
|
73
|
-
this._listaPlanaHash = `${this._dadosHash}:${expansaoHash}`;
|
|
74
|
-
this._cachedListaPlana = novaListaPlana;
|
|
75
|
-
this.cdr.detectChanges();
|
|
76
|
-
this.atualizarEstadoCollapseButton();
|
|
77
|
-
}, 0);
|
|
78
|
-
}
|
|
79
|
-
criarHashDados(estrutura, dados, simples, arvore) {
|
|
80
|
-
const estruturaHash = `e:${estrutura.length}:${estrutura.map(e => `${e.id}:${e.label}`).join(',')}`;
|
|
81
|
-
const dadosHash = `d:${dados.length}:${dados.map(d => `${d.id}`).join(',')}`;
|
|
82
|
-
const simplesHash = `s:${simples.length}:${simples.map(s => s.key).join(',')}`;
|
|
83
|
-
const arvoreHash = `a:${arvore.length}:${arvore.map(a => a.rotulo).join(',')}`;
|
|
84
|
-
return `${estruturaHash}|${dadosHash}|${simplesHash}|${arvoreHash}`;
|
|
85
|
-
}
|
|
86
|
-
invalidarCache() {
|
|
87
|
-
this._cachedDados = null;
|
|
88
|
-
this._cachedListaPlana = null;
|
|
89
|
-
this._listaPlanaHash = null;
|
|
90
|
-
}
|
|
91
|
-
gerarListaPlanaOtimizada() {
|
|
92
|
-
const dados = this.obterDadosOtimizado();
|
|
93
|
-
const expansaoHash = Array.from(this.mapaDeExpansao.entries())
|
|
94
|
-
.sort(([a], [b]) => a.localeCompare(b))
|
|
95
|
-
.map(([k, v]) => `${k}:${v}`)
|
|
96
|
-
.join(',');
|
|
97
|
-
const listaPlanaHash = `${this._dadosHash}:${expansaoHash}`;
|
|
98
|
-
if (this._listaPlanaHash === listaPlanaHash && this._cachedListaPlana) {
|
|
99
|
-
this.listaPlana.set(this._cachedListaPlana);
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
const novaListaPlana = this.transformarParaListaPlanaOtimizada(dados);
|
|
103
|
-
this._cachedListaPlana = novaListaPlana;
|
|
104
|
-
this._listaPlanaHash = listaPlanaHash;
|
|
105
|
-
this.listaPlana.set(novaListaPlana);
|
|
87
|
+
const novoMapa = new Map(this.expansaoState());
|
|
88
|
+
const estadoAtual = novoMapa.get(noPlano.dadosOriginais.rotulo) ?? (noPlano.dadosOriginais.expanded ?? false);
|
|
89
|
+
novoMapa.set(noPlano.dadosOriginais.rotulo, !estadoAtual);
|
|
90
|
+
this.expansaoState.set(novoMapa);
|
|
106
91
|
}
|
|
107
92
|
onActionExecuted(noPlano) {
|
|
108
93
|
const dados = noPlano.dadosOriginais;
|
|
109
94
|
this.selectedItem.set(dados);
|
|
110
95
|
this.onSelectedItem.emit(dados);
|
|
111
96
|
}
|
|
112
|
-
gerarListaPlana() {
|
|
113
|
-
this.gerarListaPlanaOtimizada();
|
|
114
|
-
}
|
|
115
|
-
obterDadosOtimizado() {
|
|
116
|
-
if (this._cachedDados && this._dadosHash) {
|
|
117
|
-
return this._cachedDados;
|
|
118
|
-
}
|
|
119
|
-
const estrutura = this.estruturaArvore();
|
|
120
|
-
const dados = this.dadosArvore();
|
|
121
|
-
let resultado;
|
|
122
|
-
if (estrutura && estrutura.length > 0) {
|
|
123
|
-
resultado = this.combinarEstruturaComDados(estrutura, dados || []);
|
|
124
|
-
}
|
|
125
|
-
else {
|
|
126
|
-
const nosSimples = this.nosSimples();
|
|
127
|
-
if (nosSimples && nosSimples.length > 0) {
|
|
128
|
-
resultado = this.converterSimplesParaCompleto(nosSimples);
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
resultado = this.arvoreDeDados();
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
this._cachedDados = resultado;
|
|
135
|
-
return resultado;
|
|
136
|
-
}
|
|
137
|
-
obterDados() {
|
|
138
|
-
return this.obterDadosOtimizado();
|
|
139
|
-
}
|
|
140
97
|
converterSimplesParaCompleto(nosSimples) {
|
|
141
98
|
const mapa = new Map();
|
|
142
99
|
const raiz = [];
|
|
@@ -146,7 +103,7 @@ export class KvTreeEnvironmentComponent {
|
|
|
146
103
|
icone: simples.icone,
|
|
147
104
|
cor: simples.cor,
|
|
148
105
|
ativo: simples.ativo,
|
|
149
|
-
|
|
106
|
+
expanded: simples.expanded,
|
|
150
107
|
filhos: []
|
|
151
108
|
};
|
|
152
109
|
mapa.set(simples.key, no);
|
|
@@ -168,26 +125,23 @@ export class KvTreeEnvironmentComponent {
|
|
|
168
125
|
});
|
|
169
126
|
return raiz;
|
|
170
127
|
}
|
|
171
|
-
transformarParaListaPlana(nodes, nivel = 0) {
|
|
172
|
-
return this.transformarParaListaPlanaOtimizada(nodes, nivel);
|
|
173
|
-
}
|
|
174
|
-
transformarParaListaPlanaOtimizada(nodes, nivel = 0) {
|
|
128
|
+
transformarParaListaPlana(nodes, expansaoMap, nivel = 0) {
|
|
175
129
|
const lista = [];
|
|
176
130
|
nodes.forEach((node, index) => {
|
|
177
131
|
const rotulo = node.rotulo;
|
|
178
|
-
const
|
|
132
|
+
const expanded = expansaoMap.get(rotulo) ?? (node.expanded ?? false);
|
|
179
133
|
const temFilhos = !!(node.filhos && node.filhos.length > 0);
|
|
180
134
|
const noPlano = {
|
|
181
135
|
id: rotulo,
|
|
182
136
|
nivel: nivel,
|
|
183
137
|
expansivel: temFilhos,
|
|
184
|
-
|
|
138
|
+
expanded: expanded,
|
|
185
139
|
isLast: index === nodes.length - 1,
|
|
186
140
|
dadosOriginais: node
|
|
187
141
|
};
|
|
188
142
|
lista.push(noPlano);
|
|
189
|
-
if (
|
|
190
|
-
const filhosPlanos = this.
|
|
143
|
+
if (expanded && temFilhos) {
|
|
144
|
+
const filhosPlanos = this.transformarParaListaPlana(node.filhos, expansaoMap, nivel + 1);
|
|
191
145
|
lista.push(...filhosPlanos);
|
|
192
146
|
}
|
|
193
147
|
});
|
|
@@ -196,72 +150,50 @@ export class KvTreeEnvironmentComponent {
|
|
|
196
150
|
trackByNode(index, noPlano) {
|
|
197
151
|
return noPlano.id;
|
|
198
152
|
}
|
|
199
|
-
executeCollapsed() {
|
|
200
|
-
const todosColapsados = this.collapsedAll();
|
|
201
|
-
if (todosColapsados) {
|
|
202
|
-
this.expandirTodosOtimizado();
|
|
203
|
-
}
|
|
204
|
-
else {
|
|
205
|
-
this.colapsarTodosOtimizado();
|
|
206
|
-
}
|
|
207
|
-
this.forcarAtualizacaoLista();
|
|
208
|
-
}
|
|
209
153
|
expandirTodos() {
|
|
210
|
-
this.
|
|
154
|
+
const novoMapa = new Map(this.expansaoState());
|
|
155
|
+
this.expandirTodosNos(this.dadosProcessados(), novoMapa);
|
|
156
|
+
this.expansaoState.set(novoMapa);
|
|
211
157
|
}
|
|
212
158
|
colapsarTodos() {
|
|
213
|
-
this.
|
|
159
|
+
const novoMapa = new Map(this.expansaoState());
|
|
160
|
+
this.colapsarTodosNos(this.dadosProcessados(), novoMapa);
|
|
161
|
+
this.expansaoState.set(novoMapa);
|
|
214
162
|
}
|
|
215
|
-
|
|
216
|
-
const
|
|
217
|
-
const stack = [...
|
|
163
|
+
expandirTodosNos(nodes, mapa) {
|
|
164
|
+
const mapaDeExpansao = mapa || new Map(this.expansaoState());
|
|
165
|
+
const stack = [...nodes];
|
|
218
166
|
while (stack.length > 0) {
|
|
219
167
|
const node = stack.pop();
|
|
220
168
|
if (node.filhos && node.filhos.length > 0) {
|
|
221
|
-
|
|
169
|
+
mapaDeExpansao.set(node.rotulo, true);
|
|
222
170
|
stack.push(...node.filhos);
|
|
223
171
|
}
|
|
224
172
|
}
|
|
173
|
+
if (!mapa) {
|
|
174
|
+
this.expansaoState.set(mapaDeExpansao);
|
|
175
|
+
}
|
|
225
176
|
}
|
|
226
|
-
|
|
227
|
-
const
|
|
228
|
-
const stack = [...dados];
|
|
177
|
+
colapsarTodosNos(nodes, mapa) {
|
|
178
|
+
const stack = [...nodes];
|
|
229
179
|
while (stack.length > 0) {
|
|
230
180
|
const node = stack.pop();
|
|
231
181
|
if (node.filhos && node.filhos.length > 0) {
|
|
232
|
-
|
|
182
|
+
mapa.set(node.rotulo, false);
|
|
233
183
|
stack.push(...node.filhos);
|
|
234
184
|
}
|
|
235
185
|
}
|
|
236
186
|
}
|
|
237
|
-
|
|
238
|
-
nodes.forEach(node => {
|
|
239
|
-
callback(node);
|
|
240
|
-
if (node.filhos && node.filhos.length > 0) {
|
|
241
|
-
this.percorrerTodosNos(node.filhos, callback);
|
|
242
|
-
}
|
|
243
|
-
});
|
|
244
|
-
}
|
|
245
|
-
atualizarEstadoCollapseButton() {
|
|
246
|
-
const nosExpandiveis = this.obterTodosNosExpandiveis();
|
|
247
|
-
const nosExpandidos = nosExpandiveis.filter(node => this.mapaDeExpansao.get(node.rotulo) ?? (node.estaExpandido ?? false));
|
|
248
|
-
const todosFechados = nosExpandidos.length === 0;
|
|
249
|
-
if (todosFechados) {
|
|
250
|
-
this.collapsedAll.set(true);
|
|
251
|
-
this.iconCollapsed.set('expand_content');
|
|
252
|
-
}
|
|
253
|
-
else {
|
|
254
|
-
this.collapsedAll.set(false);
|
|
255
|
-
this.iconCollapsed.set('collapse_all');
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
obterTodosNosExpandiveis() {
|
|
187
|
+
obterTodosNosExpandiveis(nodes) {
|
|
259
188
|
const nosExpandiveis = [];
|
|
260
|
-
|
|
189
|
+
const stack = [...nodes];
|
|
190
|
+
while (stack.length > 0) {
|
|
191
|
+
const node = stack.pop();
|
|
261
192
|
if (node.filhos && node.filhos.length > 0) {
|
|
262
193
|
nosExpandiveis.push(node);
|
|
194
|
+
stack.push(...node.filhos);
|
|
263
195
|
}
|
|
264
|
-
}
|
|
196
|
+
}
|
|
265
197
|
return nosExpandiveis;
|
|
266
198
|
}
|
|
267
199
|
combinarEstruturaComDados(estrutura, dados) {
|
|
@@ -277,10 +209,11 @@ export class KvTreeEnvironmentComponent {
|
|
|
277
209
|
icone: est.icone,
|
|
278
210
|
cor: est.cor,
|
|
279
211
|
ativo: dado?.ativo ?? true,
|
|
280
|
-
|
|
212
|
+
expanded: est.expanded,
|
|
281
213
|
filhos: [],
|
|
282
214
|
actions: est.actions,
|
|
283
|
-
data: est.data
|
|
215
|
+
data: est.data,
|
|
216
|
+
showSidebarAction: est.showSidebarAction
|
|
284
217
|
};
|
|
285
218
|
mapaEstrutura.set(est.id, no);
|
|
286
219
|
});
|
|
@@ -301,26 +234,53 @@ export class KvTreeEnvironmentComponent {
|
|
|
301
234
|
executeAdd() {
|
|
302
235
|
this.onAddClick.emit();
|
|
303
236
|
}
|
|
304
|
-
|
|
305
|
-
this.
|
|
306
|
-
this.
|
|
307
|
-
this.
|
|
308
|
-
|
|
237
|
+
abrirSidebarParaNo(no) {
|
|
238
|
+
this.currentSidebarNode.set(no);
|
|
239
|
+
this.sidebarVisible.set(true);
|
|
240
|
+
this.onSidebarNodeClick.emit(no);
|
|
241
|
+
}
|
|
242
|
+
filtrarArvoreComHierarquia(nodes, textoBusca) {
|
|
243
|
+
const resultado = [];
|
|
244
|
+
for (const node of nodes) {
|
|
245
|
+
const rotuloLower = node.rotulo.toLowerCase();
|
|
246
|
+
const corresponde = rotuloLower.includes(textoBusca);
|
|
247
|
+
let filhosFiltrados = [];
|
|
248
|
+
if (node.filhos && node.filhos.length > 0) {
|
|
249
|
+
filhosFiltrados = this.filtrarArvoreComHierarquia(node.filhos, textoBusca);
|
|
250
|
+
}
|
|
251
|
+
if (corresponde || filhosFiltrados.length > 0) {
|
|
252
|
+
const noClonado = {
|
|
253
|
+
...node,
|
|
254
|
+
filhos: filhosFiltrados.length > 0 ? filhosFiltrados : node.filhos,
|
|
255
|
+
expanded: true
|
|
256
|
+
};
|
|
257
|
+
resultado.push(noClonado);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return resultado;
|
|
309
261
|
}
|
|
310
262
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTreeEnvironmentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
311
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.
|
|
263
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvTreeEnvironmentComponent, isStandalone: true, selector: "kv-tree-environment", inputs: { arvoreDeDados: { classPropertyName: "arvoreDeDados", publicName: "arvoreDeDados", isSignal: true, isRequired: false, transformFunction: null }, nosSimples: { classPropertyName: "nosSimples", publicName: "nosSimples", isSignal: true, isRequired: false, transformFunction: null }, estruturaArvore: { classPropertyName: "estruturaArvore", publicName: "estruturaArvore", isSignal: true, isRequired: false, transformFunction: null }, dadosArvore: { classPropertyName: "dadosArvore", publicName: "dadosArvore", isSignal: true, isRequired: false, transformFunction: null }, configuracao: { classPropertyName: "configuracao", publicName: "configuracao", isSignal: true, isRequired: false, transformFunction: null }, showButtonCollapsed: { classPropertyName: "showButtonCollapsed", publicName: "showButtonCollapsed", isSignal: true, isRequired: false, transformFunction: null }, showAddButton: { classPropertyName: "showAddButton", publicName: "showAddButton", isSignal: true, isRequired: false, transformFunction: null }, showSearchField: { classPropertyName: "showSearchField", publicName: "showSearchField", isSignal: true, isRequired: false, transformFunction: null }, enableSidebar: { classPropertyName: "enableSidebar", publicName: "enableSidebar", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onAddClick: "onAddClick", onSelectedItem: "onSelectedItem", onSidebarNodeClick: "onSidebarNodeClick" }, queries: [{ propertyName: "sidebarTemplate", first: true, predicate: ["sidebar"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-column h-full\">\n <div class=\"flex flex-row gap-2 p-2\" [formGroup]=\"formFiltro\">\n @if(showSearchField()) {\n <kv-input-text\n placeholder=\"Pesquisar...\"\n icon=\"search\"\n formControlName=\"search\"\n ></kv-input-text>\n }\n\n <kv-button\n severity=\"tertiary\"\n class=\"w-auto\"\n label=\"Expandir\"\n icon=\"expand_content\"\n (click)=\"expandirTodos()\"\n ></kv-button>\n\n <kv-button\n severity=\"tertiary\"\n class=\"w-auto\"\n label=\"Recolher\"\n icon=\"collapse_all\"\n (click)=\"colapsarTodos()\"\n ></kv-button>\n </div>\n\n <div class=\"pl-2 pb-2 flex-1 w-full flex flex-row items-center gap-2\" style=\"min-height: 0; position: relative;\">\n <cdk-virtual-scroll-viewport class=\"h-full flex-1\" itemSize=\"40\">\n <ul class=\"lista-arvore-virtual pr-2 py-2\">\n <no-arvore \n *cdkVirtualFor=\"let no of listaPlana(); trackBy: trackByNode\" \n [noPlano]=\"no\"\n [enableSidebar]=\"enableSidebar()\"\n (noAlternado)=\"alternarNo($event)\"\n (actionExecuted)=\"onActionExecuted($event)\"\n (sidebarClick)=\"abrirSidebarParaNo($event)\" />\n </ul>\n </cdk-virtual-scroll-viewport>\n\n @if (sidebarVisible() && enableSidebar()) {\n <kv-button\n severity=\"tertiary\"\n icon=\"menu\"\n (click)=\"sidebarVisible.set(false)\"\n ></kv-button>\n }\n\n <p-sidebar [visible]=\"sidebarVisible()\" (visibleChange)=\"sidebarVisible.set($event)\" position=\"right\" class=\"pr-2\" [ngStyle]=\"{'flex': '0.6 1 0%'}\" styleClass=\"w-full\">\n <ng-template pTemplate=\"headless\">\n @if (sidebarTemplate && currentSidebarNode()) {\n <ng-container [ngTemplateOutlet]=\"sidebarTemplate\" [ngTemplateOutletContext]=\"{ $implicit: currentSidebarNode() }\"></ng-container>\n }\n </ng-template>\n </p-sidebar>\n </div>\n</div>\n", styles: [".grid-container{display:grid;grid-template-columns:auto 1fr;align-items:start}.lista-arvore-virtual{list-style:none;padding:0;margin:0}::ng-deep .p-component-overlay{display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: NoArvoreComponent, selector: "no-arvore", inputs: ["noPlano", "enableSidebar"], outputs: ["noAlternado", "actionExecuted", "sidebarClick"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i2.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i2.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i2.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "ngmodule", type: PrimeNgModule }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i4.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: "ngmodule", type: KeevoComponentsModule }, { kind: "component", type: i5.KvButtonComponent, selector: "kv-button", inputs: ["fullWidth", "type", "loading", "severity", "size", "icon", "iconPosition", "label", "disabled", "items", "popup", "popupIcon"], outputs: ["iconChange", "onClick"] }, { kind: "component", type: i6.KvInputTextComponent, selector: "kv-input-text", inputs: ["textCaptalized"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
312
264
|
}
|
|
313
265
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTreeEnvironmentComponent, decorators: [{
|
|
314
266
|
type: Component,
|
|
315
|
-
args: [{ standalone: true, selector: 'kv-tree-environment', imports: [
|
|
267
|
+
args: [{ standalone: true, selector: 'kv-tree-environment', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
316
268
|
CommonModule,
|
|
317
269
|
NoArvoreComponent,
|
|
318
270
|
ScrollingModule,
|
|
319
|
-
PrimeNgModule
|
|
320
|
-
|
|
271
|
+
PrimeNgModule,
|
|
272
|
+
KeevoComponentsModule,
|
|
273
|
+
FormsModule,
|
|
274
|
+
ReactiveFormsModule
|
|
275
|
+
], template: "<div class=\"flex flex-column h-full\">\n <div class=\"flex flex-row gap-2 p-2\" [formGroup]=\"formFiltro\">\n @if(showSearchField()) {\n <kv-input-text\n placeholder=\"Pesquisar...\"\n icon=\"search\"\n formControlName=\"search\"\n ></kv-input-text>\n }\n\n <kv-button\n severity=\"tertiary\"\n class=\"w-auto\"\n label=\"Expandir\"\n icon=\"expand_content\"\n (click)=\"expandirTodos()\"\n ></kv-button>\n\n <kv-button\n severity=\"tertiary\"\n class=\"w-auto\"\n label=\"Recolher\"\n icon=\"collapse_all\"\n (click)=\"colapsarTodos()\"\n ></kv-button>\n </div>\n\n <div class=\"pl-2 pb-2 flex-1 w-full flex flex-row items-center gap-2\" style=\"min-height: 0; position: relative;\">\n <cdk-virtual-scroll-viewport class=\"h-full flex-1\" itemSize=\"40\">\n <ul class=\"lista-arvore-virtual pr-2 py-2\">\n <no-arvore \n *cdkVirtualFor=\"let no of listaPlana(); trackBy: trackByNode\" \n [noPlano]=\"no\"\n [enableSidebar]=\"enableSidebar()\"\n (noAlternado)=\"alternarNo($event)\"\n (actionExecuted)=\"onActionExecuted($event)\"\n (sidebarClick)=\"abrirSidebarParaNo($event)\" />\n </ul>\n </cdk-virtual-scroll-viewport>\n\n @if (sidebarVisible() && enableSidebar()) {\n <kv-button\n severity=\"tertiary\"\n icon=\"menu\"\n (click)=\"sidebarVisible.set(false)\"\n ></kv-button>\n }\n\n <p-sidebar [visible]=\"sidebarVisible()\" (visibleChange)=\"sidebarVisible.set($event)\" position=\"right\" class=\"pr-2\" [ngStyle]=\"{'flex': '0.6 1 0%'}\" styleClass=\"w-full\">\n <ng-template pTemplate=\"headless\">\n @if (sidebarTemplate && currentSidebarNode()) {\n <ng-container [ngTemplateOutlet]=\"sidebarTemplate\" [ngTemplateOutletContext]=\"{ $implicit: currentSidebarNode() }\"></ng-container>\n }\n </ng-template>\n </p-sidebar>\n </div>\n</div>\n", styles: [".grid-container{display:grid;grid-template-columns:auto 1fr;align-items:start}.lista-arvore-virtual{list-style:none;padding:0;margin:0}::ng-deep .p-component-overlay{display:none}\n"] }]
|
|
321
276
|
}], ctorParameters: () => [], propDecorators: { onAddClick: [{
|
|
322
277
|
type: Output
|
|
323
278
|
}], onSelectedItem: [{
|
|
324
279
|
type: Output
|
|
280
|
+
}], onSidebarNodeClick: [{
|
|
281
|
+
type: Output
|
|
282
|
+
}], sidebarTemplate: [{
|
|
283
|
+
type: ContentChild,
|
|
284
|
+
args: ['sidebar']
|
|
325
285
|
}] } });
|
|
326
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdHJlZS1lbnZpcm9ubWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9rdi10cmVlLWVudmlyb25tZW50L2NvbXBvbmVudHMva3YtdHJlZS1lbnZpcm9ubWVudC9rdi10cmVlLWVudmlyb25tZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LXRyZWUtZW52aXJvbm1lbnQvY29tcG9uZW50cy9rdi10cmVlLWVudmlyb25tZW50L2t2LXRyZWUtZW52aXJvbm1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBYSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0gsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7OztBQWN2RSxNQUFNLE9BQU8sMEJBQTBCO0lBNEJyQztRQTFCQSxrQkFBYSxHQUFHLEtBQUssQ0FBYSxFQUFFLENBQUMsQ0FBQztRQUN0QyxlQUFVLEdBQUcsS0FBSyxDQUFvQixFQUFFLENBQUMsQ0FBQztRQUMxQyxvQkFBZSxHQUFHLEtBQUssQ0FFckIsRUFBRSxDQUFDLENBQUM7UUFDTixnQkFBVyxHQUFHLEtBQUssQ0FBZ0IsRUFBRSxDQUFD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LEVBQUUsQ0FBQyxDQUFDO2dCQUN2QixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO0lBQzVCLENBQUM7OEdBdlhVLDBCQUEwQjtrR0FBMUIsMEJBQTBCLDBwQ0NuQnZDLGl5QkFvQk0sa01EUEYsWUFBWSwrQkFDWixpQkFBaUIsc0hBQ2pCLGVBQWUsMmpCQUNmLGFBQWE7OzJGQUdKLDBCQUEwQjtrQkFadEMsU0FBUztpQ0FDSSxJQUFJLFlBQ04scUJBQXFCLFdBR3RCO3dCQUNQLFlBQVk7d0JBQ1osaUJBQWlCO3dCQUNqQixlQUFlO3dCQUNmLGFBQWE7cUJBQ2Q7d0RBY1MsVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBpbnB1dCwgc2lnbmFsLCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgZWZmZWN0LCBPbkRlc3Ryb3ksIENoYW5nZURldGVjdG9yUmVmLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTm9BcnZvcmVDb21wb25lbnQgfSBmcm9tICcuLi9uby1hcnZvcmUvbm8tYXJ2b3JlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE5vQXJ2b3JlLCBOb0Fydm9yZVNpbXBsZXMsIENvbmZpZ0Fydm9yZVNpbXBsZXMsIEVzdHJ1dHVyYUFydm9yZSwgRGFkb3NBcnZvcmUsIE5vUGxhbm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvbm8tYXJ2b3JlLm1vZGVsJztcclxuaW1wb3J0IHsgU2Nyb2xsaW5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XHJcbmltcG9ydCB7IFByaW1lTmdNb2R1bGUgfSBmcm9tICcuLi8uLi8uLi8uLi9hcGkvbW9kdWxlcy9wcmltZW5nLm1vZHVsZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIHNlbGVjdG9yOiAna3YtdHJlZS1lbnZpcm9ubWVudCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2t2LXRyZWUtZW52aXJvbm1lbnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2t2LXRyZWUtZW52aXJvbm1lbnQuY29tcG9uZW50LnNjc3MnXSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsIFxyXG4gICAgTm9BcnZvcmVDb21wb25lbnQsXHJcbiAgICBTY3JvbGxpbmdNb2R1bGUsXHJcbiAgICBQcmltZU5nTW9kdWxlXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEt2VHJlZUVudmlyb25tZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHJcbiAgYXJ2b3JlRGVEYWRvcyA9IGlucHV0PE5vQXJ2b3JlW10+KFtdKTtcclxuICBub3NTaW1wbGVzID0gaW5wdXQ8Tm9BcnZvcmVTaW1wbGVzW10+KFtdKTtcclxuICBlc3RydXR1cmFBcnZvcmUgPSBpbnB1dDxcclxuICAgIEVzdHJ1dHVyYUFydm9yZVtdXHJcbiAgPihbXSk7XHJcbiAgZGFkb3NBcnZvcmUgPSBpbnB1dDxEYWRvc0Fydm9yZVtdPihbXSk7XHJcbiAgY29uZmlndXJhY2FvID0gaW5wdXQ8Q29uZmlnQXJ2b3JlU2ltcGxlcz4oe30pO1xyXG4gIHNob3dCdXR0b25Db2xsYXBzZWQgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcclxuICBzaG93QWRkQnV0dG9uID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcblxyXG4gIEBPdXRwdXQoKSBvbkFkZENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBvblNlbGVjdGVkSXRlbSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBwcml2YXRlIGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgcHJpdmF0ZSBtYXBhRGVFeHBhbnNhbyA9IG5ldyBNYXA8c3RyaW5nLCBib29sZWFuPigpO1xyXG4gIFxyXG4gIHByaXZhdGUgX2NhY2hlZERhZG9zOiBOb0Fydm9yZVtdIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfZGFkb3NIYXNoOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIF9jYWNoZWRMaXN0YVBsYW5hOiBOb1BsYW5vW10gfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIF9saXN0YVBsYW5hSGFzaDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGxpc3RhUGxhbmEgPSBzaWduYWw8Tm9QbGFub1tdPihbXSk7XHJcbiAgaWNvbkNvbGxhcHNlZCA9IHNpZ25hbDxzdHJpbmc+KCdjb2xsYXBzZV9hbGwnKTtcclxuICBjb2xsYXBzZWRBbGwgPSBzaWduYWw8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgc2VsZWN0ZWRJdGVtID0gc2lnbmFsPGFueT4obnVsbCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgZWZmZWN0KCgpID0+IHtcclxuICAgICAgY29uc3QgZXN0cnV0dXJhID0gdGhpcy5lc3RydXR1cmFBcnZvcmUoKTtcclxuICAgICAgY29uc3QgZGFkb3MgPSB0aGlzLmRhZG9zQXJ2b3JlKCk7XHJcbiAgICAgIGNvbnN0IHNpbXBsZXMgPSB0aGlzLm5vc1NpbXBsZXMoKTtcclxuICAgICAgY29uc3QgYXJ2b3JlID0gdGhpcy5hcnZvcmVEZURhZG9zKCk7XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBkYWRvc0hhc2ggPSB0aGlzLmNyaWFySGFzaERhZG9zKGVzdHJ1dHVyYSwgZGFkb3MsIHNpbXBsZXMsIGFydm9yZSk7XHJcbiAgICAgIFxyXG4gICAgICBpZiAodGhpcy5fZGFkb3NIYXNoICE9PSBkYWRvc0hhc2gpIHtcclxuICAgICAgICB0aGlzLl9kYWRvc0hhc2ggPSBkYWRvc0hhc2g7XHJcbiAgICAgICAgdGhpcy5pbnZhbGlkYXJDYWNoZSgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IHRlbURhZG9zID0gZXN0cnV0dXJhLmxlbmd0aCA+IDAgfHwgZGFkb3MubGVuZ3RoID4gMCB8fCBzaW1wbGVzLmxlbmd0aCA+IDAgfHwgYXJ2b3JlLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHRlbURhZG9zKSB7XHJcbiAgICAgICAgICB0aGlzLmdlcmFyTGlzdGFQbGFuYU90aW1pemFkYSgpO1xyXG4gICAgICAgICAgdGhpcy5hdHVhbGl6YXJFc3RhZG9Db2xsYXBzZUJ1dHRvbigpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmxpc3RhUGxhbmEuc2V0KFtdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2VyYXJMaXN0YVBsYW5hKCk7XHJcbiAgICB0aGlzLmF0dWFsaXphckVzdGFkb0NvbGxhcHNlQnV0dG9uKCk7XHJcbiAgfVxyXG5cclxuICBhbHRlcm5hck5vKG5vUGxhbm86IE5vUGxhbm8pOiB2b2lkIHtcclxuICAgIGlmICghbm9QbGFuby5leHBhbnNpdmVsKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgZXN0YWRvQXR1YWwgPSB0aGlzLm1hcGFEZUV4cGFuc2FvLmdldChub1BsYW5vLmRhZG9zT3JpZ2luYWlzLnJvdHVsbykgPz8gZmFsc2U7XHJcbiAgICB0aGlzLm1hcGFEZUV4cGFuc2FvLnNldChub1BsYW5vLmRhZG9zT3JpZ2luYWlzLnJvdHVsbywgIWVzdGFkb0F0dWFsKTtcclxuXHJcbiAgICB0aGlzLmZvcmNhckF0dWFsaXphY2FvTGlzdGEoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9yY2FyQXR1YWxpemFjYW9MaXN0YSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NhY2hlZExpc3RhUGxhbmEgPSBudWxsO1xyXG4gICAgdGhpcy5fbGlzdGFQbGFuYUhhc2ggPSBudWxsO1xyXG4gICAgXHJcbiAgICBjb25zdCBkYWRvcyA9IHRoaXMub2J0ZXJEYWRvc090aW1pemFkbygpO1xyXG4gICAgY29uc3Qgbm92YUxpc3RhUGxhbmEgPSB0aGlzLnRyYW5zZm9ybWFyUGFyYUxpc3RhUGxhbmFPdGltaXphZGEoZGFkb3MpO1xyXG4gICAgXHJcbiAgICB0aGlzLmxpc3RhUGxhbmEuc2V0KG5vdmFMaXN0YVBsYW5hKTtcclxuICAgIFxyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgY29uc3QgZXhwYW5zYW9IYXNoID0gQXJyYXkuZnJvbSh0aGlzLm1hcGFEZUV4cGFuc2FvLmVudHJpZXMoKSlcclxuICAgICAgICAuc29ydCgoW2FdLCBbYl0pID0+IGEubG9jYWxlQ29tcGFyZShiKSlcclxuICAgICAgICAubWFwKChbaywgdl0pID0+IGAke2t9OiR7dn1gKVxyXG4gICAgICAgIC5qb2luKCcsJyk7XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLl9saXN0YVBsYW5hSGFzaCA9IGAke3RoaXMuX2RhZG9zSGFzaH06JHtleHBhbnNhb0hhc2h9YDtcclxuICAgICAgdGhpcy5fY2FjaGVkTGlzdGFQbGFuYSA9IG5vdmFMaXN0YVBsYW5hO1xyXG4gICAgICBcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB0aGlzLmF0dWFsaXphckVzdGFkb0NvbGxhcHNlQnV0dG9uKCk7XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JpYXJIYXNoRGFkb3MoZXN0cnV0dXJhOiBFc3RydXR1cmFBcnZvcmVbXSwgZGFkb3M6IERhZG9zQXJ2b3JlW10sIHNpbXBsZXM6IE5vQXJ2b3JlU2ltcGxlc1tdLCBhcnZvcmU6IE5vQXJ2b3JlW10pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZXN0cnV0dXJhSGFzaCA9IGBlOiR7ZXN0cnV0dXJhLmxlbmd0aH06JHtlc3RydXR1cmEubWFwKGUgPT4gYCR7ZS5pZH06JHtlLmxhYmVsfWApLmpvaW4oJywnKX1gO1xyXG4gICAgY29uc3QgZGFkb3NIYXNoID0gYGQ6JHtkYWRvcy5sZW5ndGh9OiR7ZGFkb3MubWFwKGQgPT4gYCR7ZC5pZH1gKS5qb2luKCcsJyl9YDtcclxuICAgIGNvbnN0IHNpbXBsZXNIYXNoID0gYHM6JHtzaW1wbGVzLmxlbmd0aH06JHtzaW1wbGVzLm1hcChzID0+IHMua2V5KS5qb2luKCcsJyl9YDtcclxuICAgIGNvbnN0IGFydm9yZUhhc2ggPSBgYToke2Fydm9yZS5sZW5ndGh9OiR7YXJ2b3JlLm1hcChhID0+IGEucm90dWxvKS5qb2luKCcsJyl9YDtcclxuICAgIFxyXG4gICAgcmV0dXJuIGAke2VzdHJ1dHVyYUhhc2h9fCR7ZGFkb3NIYXNofXwke3NpbXBsZXNIYXNofXwke2Fydm9yZUhhc2h9YDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW52YWxpZGFyQ2FjaGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jYWNoZWREYWRvcyA9IG51bGw7XHJcbiAgICB0aGlzLl9jYWNoZWRMaXN0YVBsYW5hID0gbnVsbDtcclxuICAgIHRoaXMuX2xpc3RhUGxhbmFIYXNoID0gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2VyYXJMaXN0YVBsYW5hT3RpbWl6YWRhKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZGFkb3MgPSB0aGlzLm9idGVyRGFkb3NPdGltaXphZG8oKTtcclxuICAgIFxyXG4gICAgY29uc3QgZXhwYW5zYW9IYXNoID0gQXJyYXkuZnJvbSh0aGlzLm1hcGFEZUV4cGFuc2FvLmVudHJpZXMoKSlcclxuICAgICAgLnNvcnQoKFthXSwgW2JdKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpXHJcbiAgICAgIC5tYXAoKFtrLCB2XSkgPT4gYCR7a306JHt2fWApXHJcbiAgICAgIC5qb2luKCcsJyk7XHJcbiAgICBcclxuICAgIGNvbnN0IGxpc3RhUGxhbmFIYXNoID0gYCR7dGhpcy5fZGFkb3NIYXNofToke2V4cGFuc2FvSGFzaH1gO1xyXG4gICAgXHJcbiAgICBpZiAodGhpcy5fbGlzdGFQbGFuYUhhc2ggPT09IGxpc3RhUGxhbmFIYXNoICYmIHRoaXMuX2NhY2hlZExpc3RhUGxhbmEpIHtcclxuICAgICAgdGhpcy5saXN0YVBsYW5hLnNldCh0aGlzLl9jYWNoZWRMaXN0YVBsYW5hKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBjb25zdCBub3ZhTGlzdGFQbGFuYSA9IHRoaXMudHJhbnNmb3JtYXJQYXJhTGlzdGFQbGFuYU90aW1pemFkYShkYWRvcyk7XHJcbiAgICBcclxuICAgIHRoaXMuX2NhY2hlZExpc3RhUGxhbmEgPSBub3ZhTGlzdGFQbGFuYTtcclxuICAgIHRoaXMuX2xpc3RhUGxhbmFIYXNoID0gbGlzdGFQbGFuYUhhc2g7XHJcbiAgICBcclxuICAgIHRoaXMubGlzdGFQbGFuYS5zZXQobm92YUxpc3RhUGxhbmEpO1xyXG4gIH1cclxuXHJcbiAgb25BY3Rpb25FeGVjdXRlZChub1BsYW5vOiBOb1BsYW5vKTogdm9pZCB7XHJcbiAgICBjb25zdCBkYWRvcyA9IG5vUGxhbm8uZGFkb3NPcmlnaW5haXM7XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbS5zZXQoZGFkb3MpO1xyXG4gICAgdGhpcy5vblNlbGVjdGVkSXRlbS5lbWl0KGRhZG9zKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2VyYXJMaXN0YVBsYW5hKCk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXJhckxpc3RhUGxhbmFPdGltaXphZGEoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb2J0ZXJEYWRvc090aW1pemFkbygpOiBOb0Fydm9yZVtdIHtcclxuICAgIGlmICh0aGlzLl9jYWNoZWREYWRvcyAmJiB0aGlzLl9kYWRvc0hhc2gpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZERhZG9zO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVzdHJ1dHVyYSA9IHRoaXMuZXN0cnV0dXJhQXJ2b3JlKCk7XHJcbiAgICBjb25zdCBkYWRvcyA9IHRoaXMuZGFkb3NBcnZvcmUoKTtcclxuICAgIFxyXG4gICAgbGV0IHJlc3VsdGFkbzogTm9BcnZvcmVbXTtcclxuICAgIFxyXG4gICAgaWYgKGVzdHJ1dHVyYSAmJiBlc3RydXR1cmEubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXN1bHRhZG8gPSB0aGlzLmNvbWJpbmFyRXN0cnV0dXJhQ29tRGFkb3MoZXN0cnV0dXJhLCBkYWRvcyB8fCBbXSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBub3NTaW1wbGVzID0gdGhpcy5ub3NTaW1wbGVzKCk7XHJcbiAgICAgIGlmIChub3NTaW1wbGVzICYmIG5vc1NpbXBsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHJlc3VsdGFkbyA9IHRoaXMuY29udmVydGVyU2ltcGxlc1BhcmFDb21wbGV0byhub3NTaW1wbGVzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXN1bHRhZG8gPSB0aGlzLmFydm9yZURlRGFkb3MoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0aGlzLl9jYWNoZWREYWRvcyA9IHJlc3VsdGFkbztcclxuICAgIHJldHVybiByZXN1bHRhZG87XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9idGVyRGFkb3MoKTogTm9BcnZvcmVbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5vYnRlckRhZG9zT3RpbWl6YWRvKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnZlcnRlclNpbXBsZXNQYXJhQ29tcGxldG8obm9zU2ltcGxlczogTm9BcnZvcmVTaW1wbGVzW10pOiBOb0Fydm9yZVtdIHtcclxuICAgIGNvbnN0IG1hcGEgPSBuZXcgTWFwPHN0cmluZywgTm9BcnZvcmU+KCk7XHJcbiAgICBjb25zdCByYWl6OiBOb0Fydm9yZVtdID0gW107XHJcblxyXG4gICAgbm9zU2ltcGxlcy5mb3JFYWNoKHNpbXBsZXMgPT4ge1xyXG4gICAgICBjb25zdCBubzogTm9BcnZvcmUgPSB7XHJcbiAgICAgICAgcm90dWxvOiBzaW1wbGVzLnJvdHVsbyxcclxuICAgICAgICBpY29uZTogc2ltcGxlcy5pY29uZSxcclxuICAgICAgICBjb3I6IHNpbXBsZXMuY29yLFxyXG4gICAgICAgIGF0aXZvOiBzaW1wbGVzLmF0aXZvLFxyXG4gICAgICAgIGVzdGFFeHBhbmRpZG86IHNpbXBsZXMuZXN0YUV4cGFuZGlkbyxcclxuICAgICAgICBmaWxob3M6IFtdXHJcbiAgICAgIH07XHJcbiAgICAgIG1hcGEuc2V0KHNpbXBsZXMua2V5LCBubyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBub3NTaW1wbGVzLmZvckVhY2goc2ltcGxlcyA9PiB7XHJcbiAgICAgIGNvbnN0IG5vID0gbWFwYS5nZXQoc2ltcGxlcy5rZXkpITtcclxuICAgICAgY29uc3QgcGFydGVzID0gc2ltcGxlcy5rZXkuc3BsaXQoJy0nKTtcclxuICAgICAgXHJcbiAgICAgIGlmIChwYXJ0ZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgcmFpei5wdXNoKG5vKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBrZXlQYWkgPSBwYXJ0ZXMuc2xpY2UoMCwgLTEpLmpvaW4oJy0nKTtcclxuICAgICAgICBjb25zdCBwYWkgPSBtYXBhLmdldChrZXlQYWkpO1xyXG4gICAgICAgIGlmIChwYWkpIHtcclxuICAgICAgICAgIHBhaS5maWxob3MgPSBwYWkuZmlsaG9zIHx8IFtdO1xyXG4gICAgICAgICAgcGFpLmZpbGhvcy5wdXNoKG5vKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiByYWl6O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0cmFuc2Zvcm1hclBhcmFMaXN0YVBsYW5hKG5vZGVzOiBOb0Fydm9yZVtdLCBuaXZlbCA9IDApOiBOb1BsYW5vW10ge1xyXG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtYXJQYXJhTGlzdGFQbGFuYU90aW1pemFkYShub2Rlcywgbml2ZWwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0cmFuc2Zvcm1hclBhcmFMaXN0YVBsYW5hT3RpbWl6YWRhKG5vZGVzOiBOb0Fydm9yZVtdLCBuaXZlbCA9IDApOiBOb1BsYW5vW10ge1xyXG4gICAgY29uc3QgbGlzdGE6IE5vUGxhbm9bXSA9IFtdO1xyXG4gICAgXHJcbiAgICBub2Rlcy5mb3JFYWNoKChub2RlLCBpbmRleCkgPT4ge1xyXG4gICAgICBjb25zdCByb3R1bG8gPSBub2RlLnJvdHVsbztcclxuICAgICAgY29uc3QgZXN0YUV4cGFuZGlkbyA9IHRoaXMubWFwYURlRXhwYW5zYW8uZ2V0KHJvdHVsbykgPz8gKG5vZGUuZXN0YUV4cGFuZGlkbyA/PyBmYWxzZSk7XHJcbiAgICAgIGNvbnN0IHRlbUZpbGhvcyA9ICEhKG5vZGUuZmlsaG9zICYmIG5vZGUuZmlsaG9zLmxlbmd0aCA+IDApO1xyXG4gICAgICBcclxuICAgICAgY29uc3Qgbm9QbGFubzogTm9QbGFubyA9IHtcclxuICAgICAgICBpZDogcm90dWxvLFxyXG4gICAgICAgIG5pdmVsOiBuaXZlbCxcclxuICAgICAgICBleHBhbnNpdmVsOiB0ZW1GaWxob3MsXHJcbiAgICAgICAgZXN0YUV4cGFuZGlkbzogZXN0YUV4cGFuZGlkbyxcclxuICAgICAgICBpc0xhc3Q6IGluZGV4ID09PSBub2Rlcy5sZW5ndGggLSAxLFxyXG4gICAgICAgIGRhZG9zT3JpZ2luYWlzOiBub2RlXHJcbiAgICAgIH07XHJcbiAgICAgIFxyXG4gICAgICBsaXN0YS5wdXNoKG5vUGxhbm8pO1xyXG5cclxuICAgICAgaWYgKGVzdGFFeHBhbmRpZG8gJiYgdGVtRmlsaG9zKSB7XHJcbiAgICAgICAgY29uc3QgZmlsaG9zUGxhbm9zID0gdGhpcy50cmFuc2Zvcm1hclBhcmFMaXN0YVBsYW5hT3RpbWl6YWRhKG5vZGUuZmlsaG9zISwgbml2ZWwgKyAxKTtcclxuICAgICAgICBsaXN0YS5wdXNoKC4uLmZpbGhvc1BsYW5vcyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgXHJcbiAgICByZXR1cm4gbGlzdGE7XHJcbiAgfVxyXG5cclxuICB0cmFja0J5Tm9kZShpbmRleDogbnVtYmVyLCBub1BsYW5vOiBOb1BsYW5vKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBub1BsYW5vLmlkO1xyXG4gIH1cclxuXHJcbiAgZXhlY3V0ZUNvbGxhcHNlZCgpIHtcclxuICAgIGNvbnN0IHRvZG9zQ29sYXBzYWRvcyA9IHRoaXMuY29sbGFwc2VkQWxsKCk7XHJcbiAgICBcclxuICAgIGlmICh0b2Rvc0NvbGFwc2Fkb3MpIHtcclxuICAgICAgdGhpcy5leHBhbmRpclRvZG9zT3RpbWl6YWRvKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbGFwc2FyVG9kb3NPdGltaXphZG8oKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdGhpcy5mb3JjYXJBdHVhbGl6YWNhb0xpc3RhKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cGFuZGlyVG9kb3MoKTogdm9pZCB7XHJcbiAgICB0aGlzLmV4cGFuZGlyVG9kb3NPdGltaXphZG8oKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29sYXBzYXJUb2RvcygpOiB2b2lkIHtcclxuICAgIHRoaXMuY29sYXBzYXJUb2Rvc090aW1pemFkbygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHBhbmRpclRvZG9zT3RpbWl6YWRvKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZGFkb3MgPSB0aGlzLm9idGVyRGFkb3NPdGltaXphZG8oKTtcclxuICAgIGNvbnN0IHN0YWNrOiBOb0Fydm9yZVtdID0gWy4uLmRhZG9zXTtcclxuICAgIFxyXG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3Qgbm9kZSA9IHN0YWNrLnBvcCgpITtcclxuICAgICAgXHJcbiAgICAgIGlmIChub2RlLmZpbGhvcyAmJiBub2RlLmZpbGhvcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5tYXBhRGVFeHBhbnNhby5zZXQobm9kZS5yb3R1bG8sIHRydWUpO1xyXG4gICAgICAgIHN0YWNrLnB1c2goLi4ubm9kZS5maWxob3MpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbGFwc2FyVG9kb3NPdGltaXphZG8oKTogdm9pZCB7XHJcbiAgICBjb25zdCBkYWRvcyA9IHRoaXMub2J0ZXJEYWRvc090aW1pemFkbygpO1xyXG4gICAgY29uc3Qgc3RhY2s6IE5vQXJ2b3JlW10gPSBbLi4uZGFkb3NdO1xyXG4gICAgXHJcbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBub2RlID0gc3RhY2sucG9wKCkhO1xyXG4gICAgICBcclxuICAgICAgaWYgKG5vZGUuZmlsaG9zICYmIG5vZGUuZmlsaG9zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLm1hcGFEZUV4cGFuc2FvLnNldChub2RlLnJvdHVsbywgZmFsc2UpO1xyXG4gICAgICAgIHN0YWNrLnB1c2goLi4ubm9kZS5maWxob3MpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBlcmNvcnJlclRvZG9zTm9zKG5vZGVzOiBOb0Fydm9yZVtdLCBjYWxsYmFjazogKG5vZGU6IE5vQXJ2b3JlKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICBub2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xyXG4gICAgICBjYWxsYmFjayhub2RlKTtcclxuICAgICAgaWYgKG5vZGUuZmlsaG9zICYmIG5vZGUuZmlsaG9zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnBlcmNvcnJlclRvZG9zTm9zKG5vZGUuZmlsaG9zLCBjYWxsYmFjayk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhdHVhbGl6YXJFc3RhZG9Db2xsYXBzZUJ1dHRvbigpOiB2b2lkIHtcclxuICAgIGNvbnN0IG5vc0V4cGFuZGl2ZWlzID0gdGhpcy5vYnRlclRvZG9zTm9zRXhwYW5kaXZlaXMoKTtcclxuICAgIGNvbnN0IG5vc0V4cGFuZGlkb3MgPSBub3NFeHBhbmRpdmVpcy5maWx0ZXIobm9kZSA9PiBcclxuICAgICAgdGhpcy5tYXBhRGVFeHBhbnNhby5nZXQobm9kZS5yb3R1bG8pID8/IChub2RlLmVzdGFFeHBhbmRpZG8gPz8gZmFsc2UpXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHRvZG9zRmVjaGFkb3MgPSBub3NFeHBhbmRpZG9zLmxlbmd0aCA9PT0gMDtcclxuXHJcbiAgICBpZiAodG9kb3NGZWNoYWRvcykge1xyXG4gICAgICB0aGlzLmNvbGxhcHNlZEFsbC5zZXQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuaWNvbkNvbGxhcHNlZC5zZXQoJ2V4cGFuZF9jb250ZW50Jyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbGxhcHNlZEFsbC5zZXQoZmFsc2UpO1xyXG4gICAgICB0aGlzLmljb25Db2xsYXBzZWQuc2V0KCdjb2xsYXBzZV9hbGwnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgb2J0ZXJUb2Rvc05vc0V4cGFuZGl2ZWlzKCk6IE5vQXJ2b3JlW10ge1xyXG4gICAgY29uc3Qgbm9zRXhwYW5kaXZlaXM6IE5vQXJ2b3JlW10gPSBbXTtcclxuICAgIFxyXG4gICAgdGhpcy5wZXJjb3JyZXJUb2Rvc05vcyh0aGlzLm9idGVyRGFkb3MoKSwgKG5vZGUpID0+IHtcclxuICAgICAgaWYgKG5vZGUuZmlsaG9zICYmIG5vZGUuZmlsaG9zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBub3NFeHBhbmRpdmVpcy5wdXNoKG5vZGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIFxyXG4gICAgcmV0dXJuIG5vc0V4cGFuZGl2ZWlzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21iaW5hckVzdHJ1dHVyYUNvbURhZG9zKGVzdHJ1dHVyYTogRXN0cnV0dXJhQXJ2b3JlW10sIGRhZG9zOiBEYWRvc0Fydm9yZVtdKTogTm9BcnZvcmVbXSB7XHJcbiAgICBjb25zdCBtYXBhRGFkb3MgPSBuZXcgTWFwKGRhZG9zLm1hcChkID0+IFtkLmlkLCBkXSkpO1xyXG4gICAgY29uc3QgbWFwYUVzdHJ1dHVyYSA9IG5ldyBNYXA8bnVtYmVyLCBOb0Fydm9yZT4oKTtcclxuICAgIGNvbnN0IHJhaXo6IE5vQXJ2b3JlW10gPSBbXTtcclxuXHJcbiAgICBlc3RydXR1cmFcclxuICAgICAgLnNvcnQoKGEsIGIpID0+IChhLm9yZGVtIHx8IDApIC0gKGIub3JkZW0gfHwgMCkpIFxyXG4gICAgICAuZm9yRWFjaChlc3QgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRhZG8gPSBtYXBhRGFkb3MuZ2V0KGVzdC5pZCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3Qgbm86IE5vQXJ2b3JlID0ge1xyXG4gICAgICAgICAgcm90dWxvOiBkYWRvPy5yb3R1bG8gfHwgZXN0LmxhYmVsLFxyXG4gICAgICAgICAgaWNvbmU6IGVzdC5pY29uZSxcclxuICAgICAgICAgIGNvcjogZXN0LmNvcixcclxuICAgICAgICAgIGF0aXZvOiBkYWRvPy5hdGl2byA/PyB0cnVlLFxyXG4gICAgICAgICAgZXN0YUV4cGFuZGlkbzogZXN0LmVzdGFFeHBhbmRpZG8sXHJcbiAgICAgICAgICBmaWxob3M6IFtdLFxyXG4gICAgICAgICAgYWN0aW9uczogZXN0LmFjdGlvbnMsXHJcbiAgICAgICAgICBkYXRhOiBlc3QuZGF0YVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgXHJcbiAgICAgICAgbWFwYUVzdHJ1dHVyYS5zZXQoZXN0LmlkLCBubyk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIGVzdHJ1dHVyYS5mb3JFYWNoKGVzdCA9PiB7XHJcbiAgICAgIGNvbnN0IG5vID0gbWFwYUVzdHJ1dHVyYS5nZXQoZXN0LmlkKSE7XHJcbiAgICAgIFxyXG4gICAgICBpZiAoIWVzdC5wYXJlbnRJZCkge1xyXG4gICAgICAgIHJhaXoucHVzaChubyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgcGFpID0gbWFwYUVzdHJ1dHVyYS5nZXQoZXN0LnBhcmVudElkKTtcclxuICAgICAgICBpZiAocGFpKSB7XHJcbiAgICAgICAgICBwYWkuZmlsaG9zIS5wdXNoKG5vKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiByYWl6O1xyXG4gIH1cclxuXHJcbiAgZXhlY3V0ZUFkZCgpIHtcclxuICAgIHRoaXMub25BZGRDbGljay5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NhY2hlZERhZG9zID0gbnVsbDtcclxuICAgIHRoaXMuX2NhY2hlZExpc3RhUGxhbmEgPSBudWxsO1xyXG4gICAgdGhpcy5fZGFkb3NIYXNoID0gJyc7XHJcbiAgICB0aGlzLl9saXN0YVBsYW5hSGFzaCA9ICcnOyBcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJncmlkLWNvbnRhaW5lciBoLWZ1bGxcIj5cclxuICA8c3BhbiBcclxuICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCB0ZXh0LXNtIHRleHQtNTAwIG14LTEgcC0xIGN1cnNvci1wb2ludGVyIGhvdmVyOnN1cmZhY2UtMzAwXCJcclxuICAgIHN0eWxlPVwiYm9yZGVyLXJhZGl1czogNHB4OyBtYXJnaW4tdG9wOiAxMnB4O1wiIFxyXG4gICAgKGNsaWNrKT1cImV4ZWN1dGVDb2xsYXBzZWQoKVwiXHJcbiAgICBbcFRvb2x0aXBdPVwiY29sbGFwc2VkQWxsKCkgPyAnRXhwYW5kaXIgdHVkbycgOiAnUmVjb2xoZXIgdHVkbydcIlxyXG4gID5cclxuICAgIHt7IGljb25Db2xsYXBzZWQoKSB9fVxyXG4gIDwvc3Bhbj5cclxuICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IGNsYXNzPVwiaC1mdWxsIHctZnVsbFwiIGl0ZW1TaXplPVwiNDBcIj5cclxuICAgIFxyXG4gICAgPHVsIGNsYXNzPVwibGlzdGEtYXJ2b3JlLXZpcnR1YWwgcHItMiBweS0yXCI+XHJcbiAgICAgIDxuby1hcnZvcmUgXHJcbiAgICAgICAgKmNka1ZpcnR1YWxGb3I9XCJsZXQgbm8gb2YgbGlzdGFQbGFuYSgpOyB0cmFja0J5OiB0cmFja0J5Tm9kZVwiIFxyXG4gICAgICAgIFtub1BsYW5vXT1cIm5vXCJcclxuICAgICAgICAobm9BbHRlcm5hZG8pPVwiYWx0ZXJuYXJObygkZXZlbnQpXCJcclxuICAgICAgICAoYWN0aW9uRXhlY3V0ZWQpPVwib25BY3Rpb25FeGVjdXRlZCgkZXZlbnQpXCIgLz5cclxuICAgIDwvdWw+XHJcblxyXG4gIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxyXG48L2Rpdj4iXX0=
|
|
286
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdHJlZS1lbnZpcm9ubWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9rdi10cmVlLWVudmlyb25tZW50L2NvbXBvbmVudHMva3YtdHJlZS1lbnZpcm9ubWVudC9rdi10cmVlLWVudmlyb25tZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LXRyZWUtZW52aXJvbm1lbnQvY29tcG9uZW50cy9rdi10cmVlLWVudmlyb25tZW50L2t2LXRyZWUtZW52aXJvbm1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBVSxZQUFZLEVBQWUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdKLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7Ozs7QUFrQnpFLE1BQU0sT0FB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QywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzdFLENBQUM7WUFFRCxJQUFJLFdBQVcsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM5QyxNQUFNLFNBQVMsR0FBYTtvQkFDMUIsR0FBRyxJQUFJO29CQUNQLE1BQU0sRUFBRSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTTtvQkFDbEUsUUFBUSxFQUFFLElBQUk7aUJBQ2YsQ0FBQztnQkFDRixTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzVCLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQzs4R0FyVFUsMEJBQTBCO2tHQUExQiwwQkFBMEIsa2xEQzFCdkMsMitEQXlEQSw4T0R4Q0ksWUFBWSwyUkFDWixpQkFBaUIsdUpBQ2pCLGVBQWUsMmpCQUNmLGFBQWEsbWRBQ2IscUJBQXFCLG1ZQUNyQixXQUFXLGtTQUNYLG1CQUFtQjs7MkZBR1YsMEJBQTBCO2tCQWhCdEMsU0FBUztpQ0FDSSxJQUFJLFlBQ04scUJBQXFCLG1CQUdkLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1AsWUFBWTt3QkFDWixpQkFBaUI7d0JBQ2pCLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixxQkFBcUI7d0JBQ3JCLFdBQVc7d0JBQ1gsbUJBQW1CO3FCQUN0Qjt3REFJVyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUVrQixlQUFlO3NCQUF2QyxZQUFZO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5wdXQsIHNpZ25hbCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIGNvbXB1dGVkLCBpbmplY3QsIENvbnRlbnRDaGlsZCwgVGVtcGxhdGVSZWYsIGVmZmVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTm9BcnZvcmVDb21wb25lbnQgfSBmcm9tICcuLi9uby1hcnZvcmUvbm8tYXJ2b3JlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOb0Fydm9yZSwgTm9BcnZvcmVTaW1wbGVzLCBDb25maWdBcnZvcmVTaW1wbGVzLCBFc3RydXR1cmFBcnZvcmUsIERhZG9zQXJ2b3JlLCBOb1BsYW5vIH0gZnJvbSAnLi4vLi4vbW9kZWxzL25vLWFydm9yZS5tb2RlbCc7XG5pbXBvcnQgeyBTY3JvbGxpbmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7IFByaW1lTmdNb2R1bGUgfSBmcm9tICcuLi8uLi8uLi8uLi9hcGkvbW9kdWxlcy9wcmltZW5nLm1vZHVsZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBLZWV2b0NvbXBvbmVudHNNb2R1bGUgfSBmcm9tICcuLi8uLi8uLi9rZWV2by1jb21wb25lbnRzLm1vZHVsZSc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ2t2LXRyZWUtZW52aXJvbm1lbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4va3YtdHJlZS1lbnZpcm9ubWVudC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2t2LXRyZWUtZW52aXJvbm1lbnQuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgTm9BcnZvcmVDb21wb25lbnQsXG4gICAgU2Nyb2xsaW5nTW9kdWxlLFxuICAgIFByaW1lTmdNb2R1bGUsXG4gICAgS2Vldm9Db21wb25lbnRzTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGVcbl0sXG59KVxuZXhwb3J0IGNsYXNzIEt2VHJlZUVudmlyb25tZW50Q29tcG9uZW50IHtcblxuICBAT3V0cHV0KCkgb25BZGRDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIG9uU2VsZWN0ZWRJdGVtID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvblNpZGViYXJOb2RlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPE5vQXJ2b3JlPigpO1xuXG4gIEBDb250ZW50Q2hpbGQoJ3NpZGViYXInKSBzaWRlYmFyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIGFydm9yZURlRGFkb3MgPSBpbnB1dDxOb0Fydm9yZVtdPihbXSk7XG4gIG5vc1NpbXBsZXMgPSBpbnB1dDxOb0Fydm9yZVNpbXBsZXNbXT4oW10pO1xuICBlc3RydXR1cmFBcnZvcmUgPSBpbnB1dDxFc3RydXR1cmFBcnZvcmVbXT4oW10pO1xuICBkYWRvc0Fydm9yZSA9IGlucHV0PERhZG9zQXJ2b3JlW10+KFtdKTtcbiAgY29uZmlndXJhY2FvID0gaW5wdXQ8Q29uZmlnQXJ2b3JlU2ltcGxlcz4oe30pO1xuICBzaG93QnV0dG9uQ29sbGFwc2VkID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gIHNob3dBZGRCdXR0b24gPSBpbnB1dDxib29sZWFuPih0cnVlKTtcbiAgc2hvd1NlYXJjaEZpZWxkID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICBlbmFibGVTaWRlYmFyID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHNpZGViYXJWaXNpYmxlID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgc2VsZWN0ZWRJdGVtID0gc2lnbmFsPGFueT4obnVsbCk7XG4gIGN1cnJlbnRTaWRlYmFyTm9kZSA9IHNpZ25hbDxOb0Fydm9yZSB8IG51bGw+KG51bGwpO1xuICBcbiAgcHJpdmF0ZSBleHBhbnNhb1N0YXRlID0gc2lnbmFsPE1hcDxzdHJpbmcsIGJvb2xlYW4+PihuZXcgTWFwKCkpO1xuICBcbiAgZm9ybUZpbHRybyA9IG5ldyBGb3JtR3JvdXAoe1xuICAgIHNlYXJjaDogbmV3IEZvcm1Db250cm9sKCcnKVxuICB9KTtcblxuICBwcml2YXRlIHNlYXJjaFZhbHVlID0gdG9TaWduYWwodGhpcy5mb3JtRmlsdHJvLmdldCgnc2VhcmNoJykhLnZhbHVlQ2hhbmdlcywgeyBpbml0aWFsVmFsdWU6ICcnIH0pO1xuXG4gIHByaXZhdGUgZGFkb3NQcm9jZXNzYWRvcyA9IGNvbXB1dGVkPE5vQXJ2b3JlW10+KCgpID0+IHtcbiAgICBjb25zdCBlc3RydXR1cmEgPSB0aGlzLmVzdHJ1dHVyYUFydm9yZSgpO1xuICAgIGNvbnN0IGRhZG9zID0gdGhpcy5kYWRvc0Fydm9yZSgpO1xuICAgIGNvbnN0IHNpbXBsZXMgPSB0aGlzLm5vc1NpbXBsZXMoKTtcbiAgICBjb25zdCBhcnZvcmUgPSB0aGlzLmFydm9yZURlRGFkb3MoKTtcblxuICAgIGlmIChlc3RydXR1cmEgJiYgZXN0cnV0dXJhLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbWJpbmFyRXN0cnV0dXJhQ29tRGFkb3MoZXN0cnV0dXJhLCBkYWRvcyB8fCBbXSk7XG4gICAgfSBlbHNlIGlmIChzaW1wbGVzICYmIHNpbXBsZXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udmVydGVyU2ltcGxlc1BhcmFDb21wbGV0byhzaW1wbGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFydm9yZTtcbiAgICB9XG4gIH0pO1xuXG4gIHByaXZhdGUgZGFkb3NGaWx0cmFkb3MgPSBjb21wdXRlZDxOb0Fydm9yZVtdPigoKSA9PiB7XG4gICAgY29uc3Qgc2VhcmNoID0gdGhpcy5zZWFyY2hWYWx1ZSgpPy50cmltKCkudG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICBjb25zdCBkYWRvcyA9IHRoaXMuZGFkb3NQcm9jZXNzYWRvcygpO1xuXG4gICAgaWYgKCFzZWFyY2gpIHtcbiAgICAgIHJldHVybiBkYWRvcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5maWx0cmFyQXJ2b3JlQ29tSGllcmFycXVpYShkYWRvcywgc2VhcmNoKTtcbiAgfSk7XG5cbiAgbGlzdGFQbGFuYSA9IGNvbXB1dGVkPE5vUGxhbm9bXT4oKCkgPT4ge1xuICAgIGNvbnN0IGRhZG9zID0gdGhpcy5kYWRvc0ZpbHRyYWRvcygpO1xuICAgIGNvbnN0IGV4cGFuc2FvTWFwID0gdGhpcy5leHBhbnNhb1N0YXRlKCk7XG4gICAgXG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtYXJQYXJhTGlzdGFQbGFuYShkYWRvcywgZXhwYW5zYW9NYXAsIDApO1xuICB9KTtcblxuICBpY29uQ29sbGFwc2VkID0gY29tcHV0ZWQ8c3RyaW5nPigoKSA9PiB7XG4gICAgY29uc3Qgbm9zRXhwYW5kaXZlaXMgPSB0aGlzLm9idGVyVG9kb3NOb3NFeHBhbmRpdmVpcyh0aGlzLmRhZG9zUHJvY2Vzc2Fkb3MoKSk7XG4gICAgY29uc3QgZXhwYW5zYW9NYXAgPSB0aGlzLmV4cGFuc2FvU3RhdGUoKTtcbiAgICBcbiAgICBjb25zdCBhbGd1bUV4cGFuZGlkbyA9IG5vc0V4cGFuZGl2ZWlzLnNvbWUobm9kZSA9PiBcbiAgICAgIGV4cGFuc2FvTWFwLmdldChub2RlLnJvdHVsbykgPz8gKG5vZGUuZXhwYW5kZWQgPz8gZmFsc2UpXG4gICAgKTtcblxuICAgIHJldHVybiBhbGd1bUV4cGFuZGlkbyA/ICdjb2xsYXBzZV9hbGwnIDogJ2V4cGFuZF9jb250ZW50JztcbiAgfSk7XG5cbiAgY29sbGFwc2VkQWxsID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmljb25Db2xsYXBzZWQoKSA9PT0gJ2V4cGFuZF9jb250ZW50JztcbiAgfSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHNlYXJjaCA9IHRoaXMuc2VhcmNoVmFsdWUoKT8udHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBkYWRvcyA9IHRoaXMuZGFkb3NGaWx0cmFkb3MoKTtcbiAgICAgIFxuICAgICAgaWYgKHNlYXJjaCkge1xuICAgICAgICB0aGlzLmV4cGFuZGlyVG9kb3NOb3MoZGFkb3MpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYWx0ZXJuYXJObyhub1BsYW5vOiBOb1BsYW5vKTogdm9pZCB7XG4gICAgaWYgKCFub1BsYW5vLmV4cGFuc2l2ZWwpIHJldHVybjtcblxuICAgIGNvbnN0IG5vdm9NYXBhID0gbmV3IE1hcCh0aGlzLmV4cGFuc2FvU3RhdGUoKSk7XG4gICAgY29uc3QgZXN0YWRvQXR1YWwgPSBub3ZvTWFwYS5nZXQobm9QbGFuby5kYWRvc09yaWdpbmFpcy5yb3R1bG8pID8/IChub1BsYW5vLmRhZG9zT3JpZ2luYWlzLmV4cGFuZGVkID8/IGZhbHNlKTtcbiAgICBub3ZvTWFwYS5zZXQobm9QbGFuby5kYWRvc09yaWdpbmFpcy5yb3R1bG8sICFlc3RhZG9BdHVhbCk7XG4gICAgXG4gICAgdGhpcy5leHBhbnNhb1N0YXRlLnNldChub3ZvTWFwYSk7XG4gIH1cblxuICBvbkFjdGlvbkV4ZWN1dGVkKG5vUGxhbm86IE5vUGxhbm8pOiB2b2lkIHtcbiAgICBjb25zdCBkYWRvcyA9IG5vUGxhbm8uZGFkb3NPcmlnaW5haXM7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0uc2V0KGRhZG9zKTtcbiAgICB0aGlzLm9uU2VsZWN0ZWRJdGVtLmVtaXQoZGFkb3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0ZXJTaW1wbGVzUGFyYUNvbXBsZXRvKG5vc1NpbXBsZXM6IE5vQXJ2b3JlU2ltcGxlc1tdKTogTm9BcnZvcmVbXSB7XG4gICAgY29uc3QgbWFwYSA9IG5ldyBNYXA8c3RyaW5nLCBOb0Fydm9yZT4oKTtcbiAgICBjb25zdCByYWl6OiBOb0Fydm9yZVtdID0gW107XG5cbiAgICBub3NTaW1wbGVzLmZvckVhY2goc2ltcGxlcyA9PiB7XG4gICAgICBjb25zdCBubzogTm9BcnZvcmUgPSB7XG4gICAgICAgIHJvdHVsbzogc2ltcGxlcy5yb3R1bG8sXG4gICAgICAgIGljb25lOiBzaW1wbGVzLmljb25lLFxuICAgICAgICBjb3I6IHNpbXBsZXMuY29yLFxuICAgICAgICBhdGl2bzogc2ltcGxlcy5hdGl2byxcbiAgICAgICAgZXhwYW5kZWQ6IHNpbXBsZXMuZXhwYW5kZWQsXG4gICAgICAgIGZpbGhvczogW11cbiAgICAgIH07XG4gICAgICBtYXBhLnNldChzaW1wbGVzLmtleSwgbm8pO1xuICAgIH0pO1xuXG4gICAgbm9zU2ltcGxlcy5mb3JFYWNoKHNpbXBsZXMgPT4ge1xuICAgICAgY29uc3Qgbm8gPSBtYXBhLmdldChzaW1wbGVzLmtleSkhO1xuICAgICAgY29uc3QgcGFydGVzID0gc2ltcGxlcy5rZXkuc3BsaXQoJy0nKTtcbiAgICAgIFxuICAgICAgaWYgKHBhcnRlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmFpei5wdXNoKG5vKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGtleVBhaSA9IHBhcnRlcy5zbGljZSgwLCAtMSkuam9pbignLScpO1xuICAgICAgICBjb25zdCBwYWkgPSBtYXBhLmdldChrZXlQYWkpO1xuICAgICAgICBpZiAocGFpKSB7XG4gICAgICAgICAgcGFpLmZpbGhvcyA9IHBhaS5maWxob3MgfHwgW107XG4gICAgICAgICAgcGFpLmZpbGhvcy5wdXNoKG5vKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJhaXo7XG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybWFyUGFyYUxpc3RhUGxhbmEoXG4gICAgbm9kZXM6IE5vQXJ2b3JlW10sIFxuICAgIGV4cGFuc2FvTWFwOiBNYXA8c3RyaW5nLCBib29sZWFuPiwgXG4gICAgbml2ZWwgPSAwXG4gICk6IE5vUGxhbm9bXSB7XG4gICAgY29uc3QgbGlzdGE6IE5vUGxhbm9bXSA9IFtdO1xuICAgIFxuICAgIG5vZGVzLmZvckVhY2goKG5vZGUsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCByb3R1bG8gPSBub2RlLnJvdHVsbztcbiAgICAgIGNvbnN0IGV4cGFuZGVkID0gZXhwYW5zYW9NYXAuZ2V0KHJvdHVsbykgPz8gKG5vZGUuZXhwYW5kZWQgPz8gZmFsc2UpO1xuICAgICAgY29uc3QgdGVtRmlsaG9zID0gISEobm9kZS5maWxob3MgJiYgbm9kZS5maWxob3MubGVuZ3RoID4gMCk7XG4gICAgICBcbiAgICAgIGNvbnN0IG5vUGxhbm86IE5vUGxhbm8gPSB7XG4gICAgICAgIGlkOiByb3R1bG8sXG4gICAgICAgIG5pdmVsOiBuaXZlbCxcbiAgICAgICAgZXhwYW5zaXZlbDogdGVtRmlsaG9zLFxuICAgICAgICBleHBhbmRlZDogZXhwYW5kZWQsXG4gICAgICAgIGlzTGFzdDogaW5kZXggPT09IG5vZGVzLmxlbmd0aCAtIDEsXG4gICAgICAgIGRhZG9zT3JpZ2luYWlzOiBub2RlXG4gICAgICB9O1xuICAgICAgXG4gICAgICBsaXN0YS5wdXNoKG5vUGxhbm8pO1xuXG4gICAgICBpZiAoZXhwYW5kZWQgJiYgdGVtRmlsaG9zKSB7XG4gICAgICAgIGNvbnN0IGZpbGhvc1BsYW5vcyA9IHRoaXMudHJhbnNmb3JtYXJQYXJhTGlzdGFQbGFuYShub2RlLmZpbGhvcyEsIGV4cGFuc2FvTWFwLCBuaXZlbCArIDEpO1xuICAgICAgICBsaXN0YS5wdXNoKC4uLmZpbGhvc1BsYW5vcyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgcmV0dXJuIGxpc3RhO1xuICB9XG5cbiAgdHJhY2tCeU5vZGUoaW5kZXg6IG51bWJlciwgbm9QbGFubzogTm9QbGFubyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5vUGxhbm8uaWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZXhwYW5kaXJUb2RvcygpOiB2b2lkIHtcbiAgICBjb25zdCBub3ZvTWFwYSA9IG5ldyBNYXAodGhpcy5leHBhbnNhb1N0YXRlKCkpO1xuICAgIHRoaXMuZXhwYW5kaXJUb2Rvc05vcyh0aGlzLmRhZG9zUHJvY2Vzc2Fkb3MoKSwgbm92b01hcGEpO1xuICAgIHRoaXMuZXhwYW5zYW9TdGF0ZS5zZXQobm92b01hcGEpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbGFwc2FyVG9kb3MoKTogdm9pZCB7XG4gICAgY29uc3Qgbm92b01hcGEgPSBuZXcgTWFwKHRoaXMuZXhwYW5zYW9TdGF0ZSgpKTtcbiAgICB0aGlzLmNvbGFwc2FyVG9kb3NOb3ModGhpcy5kYWRvc1Byb2Nlc3NhZG9zKCksIG5vdm9NYXBhKTtcbiAgICB0aGlzLmV4cGFuc2FvU3RhdGUuc2V0KG5vdm9NYXBhKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhwYW5kaXJUb2Rvc05vcyhub2RlczogTm9BcnZvcmVbXSwgbWFwYT86IE1hcDxzdHJpbmcsIGJvb2xlYW4+KTogdm9pZCB7XG4gICAgY29uc3QgbWFwYURlRXhwYW5zYW8gPSBtYXBhIHx8IG5ldyBNYXAodGhpcy5leHBhbnNhb1N0YXRlKCkpO1xuICAgIGNvbnN0IHN0YWNrOiBOb0Fydm9yZVtdID0gWy4uLm5vZGVzXTtcbiAgICBcbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgbm9kZSA9IHN0YWNrLnBvcCgpITtcbiAgICAgIFxuICAgICAgaWYgKG5vZGUuZmlsaG9zICYmIG5vZGUuZmlsaG9zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbWFwYURlRXhwYW5zYW8uc2V0KG5vZGUucm90dWxvLCB0cnVlKTtcbiAgICAgICAgc3RhY2sucHVzaCguLi5ub2RlLmZpbGhvcyk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIGlmICghbWFwYSkge1xuICAgICAgdGhpcy5leHBhbnNhb1N0YXRlLnNldChtYXBhRGVFeHBhbnNhbyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb2xhcHNhclRvZG9zTm9zKG5vZGVzOiBOb0Fydm9yZVtdLCBtYXBhOiBNYXA8c3RyaW5nLCBib29sZWFuPik6IHZvaWQge1xuICAgIGNvbnN0IHN0YWNrOiBOb0Fydm9yZVtdID0gWy4uLm5vZGVzXTtcbiAgICBcbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgbm9kZSA9IHN0YWNrLnBvcCgpITtcbiAgICAgIFxuICAgICAgaWYgKG5vZGUuZmlsaG9zICYmIG5vZGUuZmlsaG9zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbWFwYS5zZXQobm9kZS5yb3R1bG8sIGZhbHNlKTtcbiAgICAgICAgc3RhY2sucHVzaCguLi5ub2RlLmZpbGhvcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvYnRlclRvZG9zTm9zRXhwYW5kaXZlaXMobm9kZXM6IE5vQXJ2b3JlW10pOiBOb0Fydm9yZVtdIHtcbiAgICBjb25zdCBub3NFeHBhbmRpdmVpczogTm9BcnZvcmVbXSA9IFtdO1xuICAgIGNvbnN0IHN0YWNrOiBOb0Fydm9yZVtdID0gWy4uLm5vZGVzXTtcbiAgICBcbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgbm9kZSA9IHN0YWNrLnBvcCgpITtcbiAgICAgIFxuICAgICAgaWYgKG5vZGUuZmlsaG9zICYmIG5vZGUuZmlsaG9zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbm9zRXhwYW5kaXZlaXMucHVzaChub2RlKTtcbiAgICAgICAgc3RhY2sucHVzaCguLi5ub2RlLmZpbGhvcyk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBub3NFeHBhbmRpdmVpcztcbiAgfVxuXG4gIHByaXZhdGUgY29tYmluYXJFc3RydXR1cmFDb21EYWRvcyhlc3RydXR1cmE6IEVzdHJ1dHVyYUFydm9yZVtdLCBkYWRvczogRGFkb3NBcnZvcmVbXSk6IE5vQXJ2b3JlW10ge1xuICAgIGNvbnN0IG1hcGFEYWRvcyA9IG5ldyBNYXAoZGFkb3MubWFwKGQgPT4gW2QuaWQsIGRdKSk7XG4gICAgY29uc3QgbWFwYUVzdHJ1dHVyYSA9IG5ldyBNYXA8bnVtYmVyLCBOb0Fydm9yZT4oKTtcbiAgICBjb25zdCByYWl6OiBOb0Fydm9yZVtdID0gW107XG5cbiAgICBlc3RydXR1cmFcbiAgICAgIC5zb3J0KChhLCBiKSA9PiAoYS5vcmRlbSB8fCAwKSAtIChiLm9yZGVtIHx8IDApKSBcbiAgICAgIC5mb3JFYWNoKGVzdCA9PiB7XG4gICAgICAgIGNvbnN0IGRhZG8gPSBtYXBhRGFkb3MuZ2V0KGVzdC5pZCk7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBubzogTm9BcnZvcmUgPSB7XG4gICAgICAgICAgcm90dWxvOiBkYWRvPy5yb3R1bG8gfHwgZXN0LmxhYmVsLFxuICAgICAgICAgIGljb25lOiBlc3QuaWNvbmUsXG4gICAgICAgICAgY29yOiBlc3QuY29yLFxuICAgICAgICAgIGF0aXZvOiBkYWRvPy5hdGl2byA/PyB0cnVlLFxuICAgICAgICAgIGV4cGFuZGVkOiBlc3QuZXhwYW5kZWQsXG4gICAgICAgICAgZmlsaG9zOiBbXSxcbiAgICAgICAgICBhY3Rpb25zOiBlc3QuYWN0aW9ucyxcbiAgICAgICAgICBkYXRhOiBlc3QuZGF0YSxcbiAgICAgICAgICBzaG93U2lkZWJhckFjdGlvbjogZXN0LnNob3dTaWRlYmFyQWN0aW9uXG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICBtYXBhRXN0cnV0dXJhLnNldChlc3QuaWQsIG5vKTtcbiAgICAgIH0pO1xuXG4gICAgZXN0cnV0dXJhLmZvckVhY2goZXN0ID0+IHtcbiAgICAgIGNvbnN0IG5vID0gbWFwYUVzdHJ1dHVyYS5nZXQoZXN0LmlkKSE7XG4gICAgICBcbiAgICAgIGlmICghZXN0LnBhcmVudElkKSB7XG4gICAgICAgIHJhaXoucHVzaChubyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwYWkgPSBtYXBhRXN0cnV0dXJhLmdldChlc3QucGFyZW50SWQpO1xuICAgICAgICBpZiAocGFpKSB7XG4gICAgICAgICAgcGFpLmZpbGhvcyEucHVzaChubyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByYWl6O1xuICB9XG5cbiAgZXhlY3V0ZUFkZCgpIHtcbiAgICB0aGlzLm9uQWRkQ2xpY2suZW1pdCgpO1xuICB9XG5cbiAgYWJyaXJTaWRlYmFyUGFyYU5vKG5vOiBOb0Fydm9yZSk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudFNpZGViYXJOb2RlLnNldChubyk7XG4gICAgdGhpcy5zaWRlYmFyVmlzaWJsZS5zZXQodHJ1ZSk7XG4gICAgdGhpcy5vblNpZGViYXJOb2RlQ2xpY2suZW1pdChubyk7XG4gIH1cblxuICBwcml2YXRlIGZpbHRyYXJBcnZvcmVDb21IaWVyYXJxdWlhKG5vZGVzOiBOb0Fydm9yZVtdLCB0ZXh0b0J1c2NhOiBzdHJpbmcpOiBOb0Fydm9yZVtdIHtcbiAgICBjb25zdCByZXN1bHRhZG86IE5vQXJ2b3JlW10gPSBbXTtcblxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgY29uc3Qgcm90dWxvTG93ZXIgPSBub2RlLnJvdHVsby50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgY29ycmVzcG9uZGUgPSByb3R1bG9Mb3dlci5pbmNsdWRlcyh0ZXh0b0J1c2NhKTtcblxuICAgICAgbGV0IGZpbGhvc0ZpbHRyYWRvczogTm9BcnZvcmVbXSA9IFtdO1xuICAgICAgaWYgKG5vZGUuZmlsaG9zICYmIG5vZGUuZmlsaG9zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZmlsaG9zRmlsdHJhZG9zID0gdGhpcy5maWx0cmFyQXJ2b3JlQ29tSGllcmFycXVpYShub2RlLmZpbGhvcywgdGV4dG9CdXNjYSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb3JyZXNwb25kZSB8fCBmaWxob3NGaWx0cmFkb3MubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBub0Nsb25hZG86IE5vQXJ2b3JlID0ge1xuICAgICAgICAgIC4uLm5vZGUsXG4gICAgICAgICAgZmlsaG9zOiBmaWxob3NGaWx0cmFkb3MubGVuZ3RoID4gMCA/IGZpbGhvc0ZpbHRyYWRvcyA6IG5vZGUuZmlsaG9zLFxuICAgICAgICAgIGV4cGFuZGVkOiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIHJlc3VsdGFkby5wdXNoKG5vQ2xvbmFkbyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdGFkbztcbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiBoLWZ1bGxcIj5cbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTIgcC0yXCIgW2Zvcm1Hcm91cF09XCJmb3JtRmlsdHJvXCI+XG4gICAgQGlmKHNob3dTZWFyY2hGaWVsZCgpKSB7XG4gICAgICA8a3YtaW5wdXQtdGV4dFxuICAgICAgICBwbGFjZWhvbGRlcj1cIlBlc3F1aXNhci4uLlwiXG4gICAgICAgIGljb249XCJzZWFyY2hcIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWFyY2hcIlxuICAgICAgPjwva3YtaW5wdXQtdGV4dD5cbiAgICB9XG5cbiAgICA8a3YtYnV0dG9uXG4gICAgICBzZXZlcml0eT1cInRlcnRpYXJ5XCJcbiAgICAgIGNsYXNzPVwidy1hdXRvXCJcbiAgICAgIGxhYmVsPVwiRXhwYW5kaXJcIlxuICAgICAgaWNvbj1cImV4cGFuZF9jb250ZW50XCJcbiAgICAgIChjbGljayk9XCJleHBhbmRpclRvZG9zKClcIlxuICAgID48L2t2LWJ1dHRvbj5cblxuICAgIDxrdi1idXR0b25cbiAgICAgIHNldmVyaXR5PVwidGVydGlhcnlcIlxuICAgICAgY2xhc3M9XCJ3LWF1dG9cIlxuICAgICAgbGFiZWw9XCJSZWNvbGhlclwiXG4gICAgICBpY29uPVwiY29sbGFwc2VfYWxsXCJcbiAgICAgIChjbGljayk9XCJjb2xhcHNhclRvZG9zKClcIlxuICAgID48L2t2LWJ1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInBsLTIgcGItMiBmbGV4LTEgdy1mdWxsIGZsZXggZmxleC1yb3cgaXRlbXMtY2VudGVyIGdhcC0yXCIgc3R5bGU9XCJtaW4taGVpZ2h0OiAwOyBwb3NpdGlvbjogcmVsYXRpdmU7XCI+XG4gICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCBjbGFzcz1cImgtZnVsbCBmbGV4LTFcIiBpdGVtU2l6ZT1cIjQwXCI+XG4gICAgICAgIDx1bCBjbGFzcz1cImxpc3RhLWFydm9yZS12aXJ0dWFsIHByLTIgcHktMlwiPlxuICAgICAgICAgIDxuby1hcnZvcmUgXG4gICAgICAgICAgICAqY2RrVmlydHVhbEZvcj1cImxldCBubyBvZiBsaXN0YVBsYW5hKCk7IHRyYWNrQnk6IHRyYWNrQnlOb2RlXCIgXG4gICAgICAgICAgICBbbm9QbGFub109XCJub1wiXG4gICAgICAgICAgICBbZW5hYmxlU2lkZWJhcl09XCJlbmFibGVTaWRlYmFyKClcIlxuICAgICAgICAgICAgKG5vQWx0ZXJuYWRvKT1cImFsdGVybmFyTm8oJGV2ZW50KVwiXG4gICAgICAgICAgICAoYWN0aW9uRXhlY3V0ZWQpPVwib25BY3Rpb25FeGVjdXRlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChzaWRlYmFyQ2xpY2spPVwiYWJyaXJTaWRlYmFyUGFyYU5vKCRldmVudClcIiAvPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG5cbiAgICBAaWYgKHNpZGViYXJWaXNpYmxlKCkgJiYgZW5hYmxlU2lkZWJhcigpKSB7XG4gICAgICA8a3YtYnV0dG9uXG4gICAgICAgIHNldmVyaXR5PVwidGVydGlhcnlcIlxuICAgICAgICBpY29uPVwibWVudVwiXG4gICAgICAgIChjbGljayk9XCJzaWRlYmFyVmlzaWJsZS5zZXQoZmFsc2UpXCJcbiAgICAgID48L2t2LWJ1dHRvbj5cbiAgICB9XG5cbiAgICA8cC1zaWRlYmFyIFt2aXNpYmxlXT1cInNpZGViYXJWaXNpYmxlKClcIiAodmlzaWJsZUNoYW5nZSk9XCJzaWRlYmFyVmlzaWJsZS5zZXQoJGV2ZW50KVwiIHBvc2l0aW9uPVwicmlnaHRcIiBjbGFzcz1cInByLTJcIiBbbmdTdHlsZV09XCJ7J2ZsZXgnOiAnMC42IDEgMCUnfVwiIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkbGVzc1wiPlxuICAgICAgICBAaWYgKHNpZGViYXJUZW1wbGF0ZSAmJiBjdXJyZW50U2lkZWJhck5vZGUoKSkge1xuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwic2lkZWJhclRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjdXJyZW50U2lkZWJhck5vZGUoKSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9wLXNpZGViYXI+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|