@stiunb/unb-lib-components 18.0.28 → 18.0.29
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/services/unb-auth.service.mjs +4 -4
- package/esm2022/lib/unb-mensagem/unb-mensagem.component.mjs +4 -4
- package/esm2022/lib/unb-mensagem/unb-mensagem.module.mjs +5 -5
- package/esm2022/lib/unb-mensagem/unb-mensagem.service.mjs +4 -4
- package/esm2022/lib/unb-nav-bar/unb-nav-bar.component.mjs +4 -4
- package/esm2022/lib/unb-nav-bar/unb-nav-bar.module.mjs +5 -5
- package/esm2022/lib/unb-pessoa/unb-pessoa-crud/unb-pessoa-crud.component.mjs +100 -0
- package/esm2022/lib/unb-pessoa/unb-pessoa-crud-modal/unb-pessoa-crud-modal.component.mjs +144 -0
- package/esm2022/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-form.mjs +4 -4
- package/esm2022/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-list.mjs +4 -4
- package/esm2022/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-form.mjs +24 -7
- package/esm2022/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-list.mjs +4 -4
- package/esm2022/lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component.mjs +54 -178
- package/esm2022/lib/unb-pessoa/unb-pessoa-form-dialog/unb-pessoa-form-dialog.component.mjs +60 -0
- package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-config.model.mjs +35 -0
- package/esm2022/lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component.mjs +32 -191
- package/esm2022/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-form.mjs +4 -4
- package/esm2022/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-list.mjs +4 -4
- package/esm2022/lib/unb-pessoa/unb-pessoa.module.mjs +61 -11
- package/esm2022/lib/unb-pessoa/unb-pessoa.service.mjs +278 -26
- package/esm2022/lib/unb-usuario/oidc-decoded-token.mjs +1 -1
- package/esm2022/lib/unb-usuario/oidc-user-data.mjs +1 -1
- package/esm2022/lib/unb-usuario/unb-usuario.component.mjs +4 -4
- package/esm2022/lib/unb-usuario/unb-usuario.module.mjs +5 -5
- package/esm2022/public-api.mjs +6 -2
- package/fesm2022/stiunb-unb-lib-components.mjs +1102 -767
- package/fesm2022/stiunb-unb-lib-components.mjs.map +1 -1
- package/lib/unb-pessoa/unb-pessoa-crud/unb-pessoa-crud.component.d.ts +33 -0
- package/lib/unb-pessoa/unb-pessoa-crud-modal/unb-pessoa-crud-modal.component.d.ts +39 -0
- package/lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component.d.ts +13 -29
- package/lib/unb-pessoa/unb-pessoa-form-dialog/unb-pessoa-form-dialog.component.d.ts +21 -0
- package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-config.model.d.ts +26 -0
- package/lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component.d.ts +3 -23
- package/lib/unb-pessoa/unb-pessoa.module.d.ts +51 -32
- package/lib/unb-pessoa/unb-pessoa.service.d.ts +23 -3
- package/package.json +1 -1
- package/public-api.d.ts +5 -1
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
2
|
import { forkJoin } from 'rxjs';
|
|
3
3
|
import { UnbTipoMensagemEnum } from '../../unb-mensagem/unb-mensagem.service';
|
|
4
4
|
import { UnbUtils } from '../../utils/unb-utils';
|
|
5
5
|
import { UnbPessoaModel } from '../unb-pessoa-models/unb-pessoa.model';
|
|
6
6
|
import { UnbTipoPessoaEnum } from '../unb-tipo-pessoa.enum';
|
|
7
|
+
import { UnbPessoaPesquisaConfig } from '../unb-pessoa-models/unb-pessoa-config.model';
|
|
7
8
|
import * as i0 from "@angular/core";
|
|
8
9
|
import * as i1 from "../unb-pessoa.service";
|
|
9
10
|
import * as i2 from "@angular/material/snack-bar";
|
|
@@ -23,23 +24,9 @@ export class UnbPessoaPesquisarComponent {
|
|
|
23
24
|
this.snackBar = snackBar;
|
|
24
25
|
this.alertService = alertService;
|
|
25
26
|
this.isLoading = false;
|
|
26
|
-
// Configuração da API. Exemplo SGI.unb.br/pessoa-api
|
|
27
|
-
this.backendURL = "";
|
|
28
|
-
// Flags de Pesquisa (com conversão automática de string para boolean)
|
|
29
|
-
this.pesquisarPorCPF = true;
|
|
30
|
-
this.pesquisarPorCNPJ = true;
|
|
31
|
-
this.pesquisarPorEstrangeiro = false;
|
|
32
|
-
// Configurações de UI e Comportamento
|
|
33
|
-
this.defaultTipoPessoa = UnbTipoPessoaEnum.FISICA;
|
|
34
|
-
this.campoPesquisaMaxWidth = '400px';
|
|
35
|
-
this.mostrarPesquisa = true;
|
|
36
|
-
this.limparAposPesquisa = false;
|
|
37
|
-
// Textos e Labels
|
|
38
|
-
this.label = "Digite o CPF/CNPJ ou Passaporte";
|
|
39
|
-
this.placeholder = "";
|
|
40
|
-
this.hint = "";
|
|
41
|
-
// Dados e Eventos
|
|
42
27
|
this.pessoa = new UnbPessoaModel();
|
|
28
|
+
// Configuração do componente
|
|
29
|
+
this.config = new UnbPessoaPesquisaConfig();
|
|
43
30
|
this.pessoaEmitted = new EventEmitter();
|
|
44
31
|
this.isLoadingChange = new EventEmitter();
|
|
45
32
|
this.pessoaEncontrado = false;
|
|
@@ -50,11 +37,14 @@ export class UnbPessoaPesquisarComponent {
|
|
|
50
37
|
}
|
|
51
38
|
ngOnInit() {
|
|
52
39
|
// 1. Validação de Inicialização da API
|
|
53
|
-
if (!this.backendURL) {
|
|
40
|
+
if (!this.config.backendURL) {
|
|
54
41
|
this.handleErrorPrintConsole("[UnbPessoaPesquisarComponent] ERROR: backendURL está null.");
|
|
55
42
|
return;
|
|
56
43
|
}
|
|
57
|
-
this.pessoaService.setBackendUrl(this.backendURL);
|
|
44
|
+
this.pessoaService.setBackendUrl(this.config.backendURL);
|
|
45
|
+
if (this.config.token) {
|
|
46
|
+
this.pessoaService.setToken(this.config.token);
|
|
47
|
+
}
|
|
58
48
|
// 2. Carregamento de Dados de Apoio
|
|
59
49
|
forkJoin({
|
|
60
50
|
tiposEnd: this.pessoaService.getTipoEndereco(),
|
|
@@ -72,7 +62,7 @@ export class UnbPessoaPesquisarComponent {
|
|
|
72
62
|
}
|
|
73
63
|
});
|
|
74
64
|
// 3. Definição da Lógica de Exibição e Tipo Padrão
|
|
75
|
-
const opcoesAtivas = [this.pesquisarPorCPF, this.pesquisarPorCNPJ, this.pesquisarPorEstrangeiro].filter(v => v).length;
|
|
65
|
+
const opcoesAtivas = [this.config.pesquisarPorCPF, this.config.pesquisarPorCNPJ, this.config.pesquisarPorEstrangeiro].filter(v => v).length;
|
|
76
66
|
// Só mostra o rádio se houver escolha real (mais de uma opção ativa)
|
|
77
67
|
this.mostrarTipoPessoa = opcoesAtivas > 1;
|
|
78
68
|
if (opcoesAtivas === 0) {
|
|
@@ -87,25 +77,25 @@ export class UnbPessoaPesquisarComponent {
|
|
|
87
77
|
*/
|
|
88
78
|
definirTipoPessoaInicial() {
|
|
89
79
|
// Verifica se o padrão passado é permitido pelas flags de pesquisa
|
|
90
|
-
const padraoEhValido = (this.defaultTipoPessoa === UnbTipoPessoaEnum.FISICA && this.pesquisarPorCPF) ||
|
|
91
|
-
(this.defaultTipoPessoa === UnbTipoPessoaEnum.JURIDICA && this.pesquisarPorCNPJ) ||
|
|
92
|
-
(this.defaultTipoPessoa === UnbTipoPessoaEnum.ESTRANGEIRA && this.pesquisarPorEstrangeiro);
|
|
80
|
+
const padraoEhValido = (this.config.defaultTipoPessoa === UnbTipoPessoaEnum.FISICA && this.config.pesquisarPorCPF) ||
|
|
81
|
+
(this.config.defaultTipoPessoa === UnbTipoPessoaEnum.JURIDICA && this.config.pesquisarPorCNPJ) ||
|
|
82
|
+
(this.config.defaultTipoPessoa === UnbTipoPessoaEnum.ESTRANGEIRA && this.config.pesquisarPorEstrangeiro);
|
|
93
83
|
if (padraoEhValido) {
|
|
94
84
|
// Como o valor da string é igual ao valor do Enum, a atribuição é direta
|
|
95
|
-
this.pessoa.tipoPessoa = this.defaultTipoPessoa;
|
|
85
|
+
this.pessoa.tipoPessoa = this.config.defaultTipoPessoa;
|
|
96
86
|
}
|
|
97
87
|
else {
|
|
98
|
-
if (this.defaultTipoPessoa) {
|
|
99
|
-
console.warn(`[UnbPessoaPesquisar] O valor defaultTipoPessoa='${this.defaultTipoPessoa}' é incompatível com as opções de pesquisa ativas. Selecionando a primeira disponível.`);
|
|
88
|
+
if (this.config.defaultTipoPessoa) {
|
|
89
|
+
console.warn(`[UnbPessoaPesquisar] O valor defaultTipoPessoa='${this.config.defaultTipoPessoa}' é incompatível com as opções de pesquisa ativas. Selecionando a primeira disponível.`);
|
|
100
90
|
}
|
|
101
91
|
// Fallback para a primeira opção ativa
|
|
102
|
-
if (this.pesquisarPorCPF) {
|
|
92
|
+
if (this.config.pesquisarPorCPF) {
|
|
103
93
|
this.pessoa.tipoPessoa = UnbTipoPessoaEnum.FISICA;
|
|
104
94
|
}
|
|
105
|
-
else if (this.pesquisarPorCNPJ) {
|
|
95
|
+
else if (this.config.pesquisarPorCNPJ) {
|
|
106
96
|
this.pessoa.tipoPessoa = UnbTipoPessoaEnum.JURIDICA;
|
|
107
97
|
}
|
|
108
|
-
else if (this.pesquisarPorEstrangeiro) {
|
|
98
|
+
else if (this.config.pesquisarPorEstrangeiro) {
|
|
109
99
|
this.pessoa.tipoPessoa = UnbTipoPessoaEnum.ESTRANGEIRA;
|
|
110
100
|
}
|
|
111
101
|
}
|
|
@@ -148,7 +138,7 @@ export class UnbPessoaPesquisarComponent {
|
|
|
148
138
|
}
|
|
149
139
|
}
|
|
150
140
|
validar() {
|
|
151
|
-
if (this.backendURL == "") {
|
|
141
|
+
if (this.config.backendURL == "") {
|
|
152
142
|
this.handleErrorPrintConsole("[UnbPessoaPesquisarComponent] ERROR: backendURL.url está null. Insira o parâmetro (backendURL) com o valor da URL do seu Backend!");
|
|
153
143
|
return false;
|
|
154
144
|
}
|
|
@@ -188,103 +178,18 @@ export class UnbPessoaPesquisarComponent {
|
|
|
188
178
|
hadleResult(resultado) {
|
|
189
179
|
this.isLoading = false;
|
|
190
180
|
this.isLoadingChange.emit(false);
|
|
191
|
-
if (resultado) {
|
|
192
|
-
|
|
181
|
+
if (resultado && resultado.codigoPessoa) {
|
|
182
|
+
// Resultado já vem normalizado pelo service (tipoPessoa, arrays, datas, códigos, CPF/CNPJ formatados)
|
|
193
183
|
this.pessoa = resultado;
|
|
194
|
-
this.pessoa.enderecos = this.pessoa.enderecos || [];
|
|
195
|
-
this.pessoa.telefones = this.pessoa.telefones || [];
|
|
196
|
-
this.pessoa.emails = this.pessoa.emails || [];
|
|
197
|
-
// --- SEÇÃO DE LIMPEZA DE DADOS PRINCIPAIS (VOCÊ JÁ TINHA) ---
|
|
198
|
-
if (this.pessoa.sexo) {
|
|
199
|
-
if (this.pessoa.sexo.toUpperCase().trim() === 'FEMININO') {
|
|
200
|
-
this.pessoa.codigoSexo = 2;
|
|
201
|
-
}
|
|
202
|
-
else if (this.pessoa.sexo.toUpperCase().trim() === 'MASCULINO') {
|
|
203
|
-
this.pessoa.codigoSexo = 1;
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
if (this.pessoa.dataNascimento) {
|
|
207
|
-
this.pessoa.dataNascimento = this.parseData(this.pessoa.dataNascimento);
|
|
208
|
-
}
|
|
209
|
-
if (this.pessoa.estadoCivil) {
|
|
210
|
-
this.pessoa.codigoEstadoCivil = this.parseCodigo(this.pessoa.estadoCivil);
|
|
211
|
-
}
|
|
212
|
-
if (this.pessoa.paisNascimento) {
|
|
213
|
-
this.pessoa.codigoPaisNascimento = this.parseCodigo(this.pessoa.paisNascimento);
|
|
214
|
-
}
|
|
215
|
-
if (this.pessoa.escolaridade) {
|
|
216
|
-
this.pessoa.escolaridade = this.parseCodigo(this.pessoa.escolaridade);
|
|
217
|
-
}
|
|
218
|
-
// 1. Processa Endereços
|
|
219
|
-
// O payload 'salvar' espera: ordemEndereco, tipoEnderecoCodigo, paisEnderecoCodigo, ufEndereco
|
|
220
|
-
// 1. Processa Endereços
|
|
221
|
-
if (this.pessoa.enderecos && this.listaTipoEndereco.length > 0) {
|
|
222
|
-
// --- CORREÇÃO: Adicionado 'i' ao forEach ---
|
|
223
|
-
this.pessoa.enderecos.forEach((end, i) => {
|
|
224
|
-
// Traduz o 'tipo' (string) para 'tipoEnderecoCodigo' (number)
|
|
225
|
-
if (!end.tipoEnderecoCodigo && end.tipo) {
|
|
226
|
-
const tipoEncontrado = this.listaTipoEndereco.find(t => t.denominacao?.toLowerCase() === end.tipo?.toLowerCase());
|
|
227
|
-
if (tipoEncontrado)
|
|
228
|
-
end.tipoEnderecoCodigo = tipoEncontrado.codigo;
|
|
229
|
-
}
|
|
230
|
-
// Traduz 'pais' (string '22 - BRASIL') para 'paisEnderecoCodigo' (number)
|
|
231
|
-
if (!end.paisEnderecoCodigo && end.pais) {
|
|
232
|
-
end.paisEnderecoCodigo = this.parseCodigo(end.pais);
|
|
233
|
-
}
|
|
234
|
-
// Mapeia 'ordem' -> 'ordemEndereco' ou usa o índice (i + 1)
|
|
235
|
-
// O payload de salvar (no form) espera 'ordemEndereco'
|
|
236
|
-
end.ordemEndereco = end.ordemEndereco || end.ordem || (i + 1);
|
|
237
|
-
// Mapeia 'uf' -> 'ufEndereco'
|
|
238
|
-
if (!end.ufEndereco && end.uf) {
|
|
239
|
-
end.ufEndereco = end.uf;
|
|
240
|
-
}
|
|
241
|
-
});
|
|
242
|
-
}
|
|
243
|
-
// 2. Processa Telefones
|
|
244
|
-
if (this.pessoa.telefones && this.listaTipoTelefone.length > 0) {
|
|
245
|
-
// --- CORREÇÃO: Adicionado 'i' ao forEach ---
|
|
246
|
-
this.pessoa.telefones.forEach((tel, i) => {
|
|
247
|
-
if (!tel.tipoTelefoneCodigo && tel.tipo) {
|
|
248
|
-
const tipoEncontrado = this.listaTipoTelefone.find(t => t.denominacao?.toLowerCase() === tel.tipo?.toLowerCase());
|
|
249
|
-
if (tipoEncontrado)
|
|
250
|
-
tel.tipoTelefoneCodigo = tipoEncontrado.codigo;
|
|
251
|
-
}
|
|
252
|
-
// --- CORREÇÃO: Lógica da Ordem ---
|
|
253
|
-
// O payload de salvar (no form) lê 'tel.ordem'
|
|
254
|
-
tel.ordem = tel.ordem || (i + 1);
|
|
255
|
-
});
|
|
256
|
-
}
|
|
257
|
-
// 3. Processa Emails
|
|
258
|
-
if (this.pessoa.emails && this.listaTipoEmail.length > 0) {
|
|
259
|
-
// --- CORREÇÃO: Adicionado 'i' ao forEach ---
|
|
260
|
-
this.pessoa.emails.forEach((email, i) => {
|
|
261
|
-
if (!email.tipoEmailCodigo && email.tipo) {
|
|
262
|
-
const tipoEncontrado = this.listaTipoEmail.find(t => t.denominacao?.toLowerCase() === email.tipo?.toLowerCase());
|
|
263
|
-
if (tipoEncontrado)
|
|
264
|
-
email.tipoEmailCodigo = tipoEncontrado.codigo;
|
|
265
|
-
}
|
|
266
|
-
// --- CORREÇÃO: Lógica da Ordem ---
|
|
267
|
-
// O payload de salvar (no form) lê 'email.ordem'
|
|
268
|
-
email.ordem = email.ordem || (i + 1);
|
|
269
|
-
});
|
|
270
|
-
}
|
|
271
|
-
if (this.pessoa.tipoPessoa == UnbTipoPessoaEnum.FISICA) {
|
|
272
|
-
this.pessoa.cpf = UnbUtils.formataCpf(resultado.cpf);
|
|
273
|
-
}
|
|
274
|
-
else if (this.pessoa.tipoPessoa == UnbTipoPessoaEnum.JURIDICA) {
|
|
275
|
-
this.pessoa.cnpj = UnbUtils.formataCnpj(resultado.cnpj);
|
|
276
|
-
}
|
|
277
|
-
else if (this.pessoa.tipoPessoa == UnbTipoPessoaEnum.ESTRANGEIRA) {
|
|
278
|
-
}
|
|
279
184
|
}
|
|
280
185
|
else {
|
|
281
|
-
//
|
|
282
|
-
|
|
186
|
+
// Não encontrado: mantém documento e tipo selecionados
|
|
187
|
+
const novaPessoa = new UnbPessoaModel();
|
|
283
188
|
novaPessoa.tipoPessoa = this.pessoa.tipoPessoa;
|
|
284
|
-
if (this.pessoa.tipoPessoa
|
|
189
|
+
if (this.pessoa.tipoPessoa === UnbTipoPessoaEnum.FISICA) {
|
|
285
190
|
novaPessoa.cpf = this.pessoa.cpf;
|
|
286
191
|
}
|
|
287
|
-
else if (this.pessoa.tipoPessoa
|
|
192
|
+
else if (this.pessoa.tipoPessoa === UnbTipoPessoaEnum.JURIDICA) {
|
|
288
193
|
novaPessoa.cnpj = this.pessoa.cnpj;
|
|
289
194
|
}
|
|
290
195
|
else {
|
|
@@ -294,43 +199,6 @@ export class UnbPessoaPesquisarComponent {
|
|
|
294
199
|
}
|
|
295
200
|
this.pessoaEmitted.emit(this.pessoa);
|
|
296
201
|
}
|
|
297
|
-
parseCodigo(valorString) {
|
|
298
|
-
if (typeof valorString === 'number') {
|
|
299
|
-
return valorString; // Já é um número
|
|
300
|
-
}
|
|
301
|
-
if (typeof valorString !== 'string' || !valorString.includes(' - ')) {
|
|
302
|
-
// Tenta converter direto, caso o backend mande só o número como string
|
|
303
|
-
const num = parseInt(valorString, 10);
|
|
304
|
-
return isNaN(num) ? null : num;
|
|
305
|
-
}
|
|
306
|
-
const partes = valorString.split(' - ');
|
|
307
|
-
const codigo = parseInt(partes[0].trim(), 10);
|
|
308
|
-
return isNaN(codigo) ? null : codigo;
|
|
309
|
-
}
|
|
310
|
-
/**
|
|
311
|
-
* Converte uma string no formato 'dd/MM/yyyy' para um objeto Date.
|
|
312
|
-
* Retorna null se o formato for inválido.
|
|
313
|
-
*/
|
|
314
|
-
parseData(dataString) {
|
|
315
|
-
if (dataString instanceof Date) {
|
|
316
|
-
return dataString; // Já é um objeto Date
|
|
317
|
-
}
|
|
318
|
-
if (typeof dataString !== 'string' || !dataString.includes('/')) {
|
|
319
|
-
return null;
|
|
320
|
-
}
|
|
321
|
-
const partes = dataString.split('/'); // [dd, MM, yyyy]
|
|
322
|
-
if (partes.length === 3) {
|
|
323
|
-
const dia = parseInt(partes[0], 10);
|
|
324
|
-
const mes = parseInt(partes[1], 10) - 1; // Mês no JS é 0-indexado
|
|
325
|
-
const ano = parseInt(partes[2], 10);
|
|
326
|
-
// Verifica se a data é válida
|
|
327
|
-
const dataObj = new Date(ano, mes, dia);
|
|
328
|
-
if (dataObj.getFullYear() === ano && dataObj.getMonth() === mes && dataObj.getDate() === dia) {
|
|
329
|
-
return dataObj;
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
return null; // Formato inválido
|
|
333
|
-
}
|
|
334
202
|
handleError(erro) {
|
|
335
203
|
this.isLoading = false;
|
|
336
204
|
this.isLoadingChange.emit(false);
|
|
@@ -398,45 +266,18 @@ export class UnbPessoaPesquisarComponent {
|
|
|
398
266
|
this.pessoa.cnpj = valor;
|
|
399
267
|
}
|
|
400
268
|
}
|
|
401
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2
|
|
402
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
269
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: UnbPessoaPesquisarComponent, deps: [{ token: i1.UnBPessoaService }, { token: i2.MatSnackBar }, { token: i3.UnbMensagemService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
270
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: UnbPessoaPesquisarComponent, selector: "lib-unb-pessoa-pesquisar", inputs: { config: "config" }, outputs: { pessoaEmitted: "pessoaEmitted", isLoadingChange: "isLoadingChange" }, ngImport: i0, template: "<form #pessoaForm=\"ngForm\" class=\"pesquisa-container\" (ngSubmit)=\"pesquisar()\">\r\n \r\n <div class=\"mensagem-container\">\r\n <unb-mensagem [identificador]=\"idMensagemService\" class=\"mensagem-form\"></unb-mensagem>\r\n </div>\r\n\r\n <div class=\"form-wrapper\">\r\n <div *ngIf=\"mostrarTipoPessoa\" class=\"radio-container\">\r\n <mat-radio-group aria-label=\"Tipo de Pessoa\" [(ngModel)]=\"pessoa.tipoPessoa\" #tipoPessoa=\"ngModel\" name=\"tipoPessoa\" (change)=\"onTipoPessoaChange()\">\r\n <mat-radio-button *ngIf=\"config.pesquisarPorCPF\" [value]=\"tipoPessoaEnum().FISICA\">Pessoa F\u00EDsica</mat-radio-button>\r\n <mat-radio-button *ngIf=\"config.pesquisarPorCNPJ\" [value]=\"tipoPessoaEnum().JURIDICA\">Pessoa Jur\u00EDdica</mat-radio-button>\r\n <mat-radio-button *ngIf=\"config.pesquisarPorEstrangeiro\" [value]=\"tipoPessoaEnum().ESTRANGEIRA\">Estrangeiro</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().FISICA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>CPF</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.cpf\" name=\"cpf\" #cpf=\"ngModel\" [required]=\"true\"\r\n (input)=\"formatarCpf($event)\" maxlength=\"14\" placeholder=\"000.000.000-00\" />\r\n \r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" [disabled]=\"isLoading\" (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner [diameter]=\"20\" mode=\"indeterminate\" color=\"primary\"></mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().JURIDICA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>CNPJ</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.cnpj\" name=\"cnpj\" [required]=\"true\"\r\n (input)=\"formatarCnpj($event)\" maxlength=\"18\" placeholder=\"00.000.000/0000-00\" />\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n \r\n </div>\r\n</form>", styles: [":host{display:block;width:100%}.pesquisa-container{display:flex;flex-direction:column;width:100%}.form-wrapper{display:flex;flex-direction:column;width:100%;gap:8px}mat-form-field{width:100%}.mensagem-container{width:100%;margin-bottom:10px}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i8.UnbMensagemComponent, selector: "unb-mensagem", inputs: ["mensagem", "tipo", "identificador"] }, { kind: "component", type: i9.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i9.MatLabel, selector: "mat-label" }, { kind: "directive", type: i9.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i10.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i11.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i12.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i12.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color"], outputs: ["change"], exportAs: ["matRadioButton"] }] }); }
|
|
403
271
|
}
|
|
404
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2
|
|
272
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: UnbPessoaPesquisarComponent, decorators: [{
|
|
405
273
|
type: Component,
|
|
406
|
-
args: [{ selector: 'lib-unb-pessoa-pesquisar', standalone: false, template: "<form #pessoaForm=\"ngForm\" class=\"pesquisa-container\"
|
|
407
|
-
}], ctorParameters: () => [{ type: i1.UnBPessoaService }, { type: i2.MatSnackBar }, { type: i3.UnbMensagemService }], propDecorators: {
|
|
274
|
+
args: [{ selector: 'lib-unb-pessoa-pesquisar', standalone: false, template: "<form #pessoaForm=\"ngForm\" class=\"pesquisa-container\" (ngSubmit)=\"pesquisar()\">\r\n \r\n <div class=\"mensagem-container\">\r\n <unb-mensagem [identificador]=\"idMensagemService\" class=\"mensagem-form\"></unb-mensagem>\r\n </div>\r\n\r\n <div class=\"form-wrapper\">\r\n <div *ngIf=\"mostrarTipoPessoa\" class=\"radio-container\">\r\n <mat-radio-group aria-label=\"Tipo de Pessoa\" [(ngModel)]=\"pessoa.tipoPessoa\" #tipoPessoa=\"ngModel\" name=\"tipoPessoa\" (change)=\"onTipoPessoaChange()\">\r\n <mat-radio-button *ngIf=\"config.pesquisarPorCPF\" [value]=\"tipoPessoaEnum().FISICA\">Pessoa F\u00EDsica</mat-radio-button>\r\n <mat-radio-button *ngIf=\"config.pesquisarPorCNPJ\" [value]=\"tipoPessoaEnum().JURIDICA\">Pessoa Jur\u00EDdica</mat-radio-button>\r\n <mat-radio-button *ngIf=\"config.pesquisarPorEstrangeiro\" [value]=\"tipoPessoaEnum().ESTRANGEIRA\">Estrangeiro</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().FISICA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>CPF</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.cpf\" name=\"cpf\" #cpf=\"ngModel\" [required]=\"true\"\r\n (input)=\"formatarCpf($event)\" maxlength=\"14\" placeholder=\"000.000.000-00\" />\r\n \r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" [disabled]=\"isLoading\" (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner [diameter]=\"20\" mode=\"indeterminate\" color=\"primary\"></mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().JURIDICA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>CNPJ</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.cnpj\" name=\"cnpj\" [required]=\"true\"\r\n (input)=\"formatarCnpj($event)\" maxlength=\"18\" placeholder=\"00.000.000/0000-00\" />\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n \r\n </div>\r\n</form>", styles: [":host{display:block;width:100%}.pesquisa-container{display:flex;flex-direction:column;width:100%}.form-wrapper{display:flex;flex-direction:column;width:100%;gap:8px}mat-form-field{width:100%}.mensagem-container{width:100%;margin-bottom:10px}\n"] }]
|
|
275
|
+
}], ctorParameters: () => [{ type: i1.UnBPessoaService }, { type: i2.MatSnackBar }, { type: i3.UnbMensagemService }], propDecorators: { config: [{
|
|
408
276
|
type: Input,
|
|
409
277
|
args: [{ required: true }]
|
|
410
|
-
}], pesquisarPorCPF: [{
|
|
411
|
-
type: Input,
|
|
412
|
-
args: [{ transform: booleanAttribute }]
|
|
413
|
-
}], pesquisarPorCNPJ: [{
|
|
414
|
-
type: Input,
|
|
415
|
-
args: [{ transform: booleanAttribute }]
|
|
416
|
-
}], pesquisarPorEstrangeiro: [{
|
|
417
|
-
type: Input,
|
|
418
|
-
args: [{ transform: booleanAttribute }]
|
|
419
|
-
}], defaultTipoPessoa: [{
|
|
420
|
-
type: Input
|
|
421
|
-
}], campoPesquisaMaxWidth: [{
|
|
422
|
-
type: Input
|
|
423
|
-
}], mostrarPesquisa: [{
|
|
424
|
-
type: Input,
|
|
425
|
-
args: [{ transform: booleanAttribute }]
|
|
426
|
-
}], limparAposPesquisa: [{
|
|
427
|
-
type: Input,
|
|
428
|
-
args: [{ transform: booleanAttribute }]
|
|
429
|
-
}], label: [{
|
|
430
|
-
type: Input
|
|
431
|
-
}], placeholder: [{
|
|
432
|
-
type: Input
|
|
433
|
-
}], hint: [{
|
|
434
|
-
type: Input
|
|
435
|
-
}], pessoa: [{
|
|
436
|
-
type: Input
|
|
437
278
|
}], pessoaEmitted: [{
|
|
438
279
|
type: Output
|
|
439
280
|
}], isLoadingChange: [{
|
|
440
281
|
type: Output
|
|
441
282
|
}] } });
|
|
442
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iLXBlc3NvYS1wZXNxdWlzYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5iLWxpYi1jb21wb25lbnRzL3NyYy9saWIvdW5iLXBlc3NvYS91bmItcGVzc29hLXBlc3F1aXNhci91bmItcGVzc29hLXBlc3F1aXNhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmItbGliLWNvbXBvbmVudHMvc3JjL2xpYi91bmItcGVzc29hL3VuYi1wZXNzb2EtcGVzcXVpc2FyL3VuYi1wZXNzb2EtcGVzcXVpc2FyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUUzSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sRUFBc0IsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNsRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFJakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRXZFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7Ozs7OztBQVE1RCxNQUFNLE9BQU8sMkJBQTJCO0lBMkJ0QyxZQUFvQixhQUErQixFQUFVLFFBQXFCLEVBQVUsWUFBZ0M7UUFBeEcsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUFVLGlCQUFZLEdBQVosWUFBWSxDQUFvQjtRQTFCNUgsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVsQixxREFBcUQ7UUFDMUIsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUVuRCxzRUFBc0U7UUFDOUIsb0JB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aEIsZ0JBQWdCLG1KQUtoQixnQkFBZ0Isb0VBQ2hCLGdCQUFnQiwwTENqQ3RDLDZ5SEF1RU87OzRGRHJETSwyQkFBMkI7a0JBTnZDLFNBQVM7K0JBQ0UsMEJBQTBCLGNBQ3hCLEtBQUs7Z0pBUVUsVUFBVTtzQkFBcEMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBR2UsZUFBZTtzQkFBdEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxnQkFBZ0I7c0JBQXZELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsdUJBQXVCO3NCQUE5RCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUc3QixpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNrQyxlQUFlO3NCQUF0RCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLGtCQUFrQjtzQkFBekQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFHN0IsS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUdHLE1BQU07c0JBQWQsS0FBSztnQkFDSSxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBib29sZWFuQXR0cmlidXRlLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBVbmJNZW5zYWdlbVNlcnZpY2UsIFVuYlRpcG9NZW5zYWdlbUVudW0gfSBmcm9tICcuLi8uLi91bmItbWVuc2FnZW0vdW5iLW1lbnNhZ2VtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVbmJVdGlscyB9IGZyb20gJy4uLy4uL3V0aWxzL3VuYi11dGlscyc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYUVtYWlsVGlwbyB9IGZyb20gJy4uL3VuYi1wZXNzb2EtbW9kZWxzL3VuYi1wZXNzb2EtZW1haWwubW9kZWwnO1xyXG5pbXBvcnQgeyBVbmJQZXNzb2FFbmRlcmVjb1RpcG8gfSBmcm9tICcuLi91bmItcGVzc29hLW1vZGVscy91bmItcGVzc29hLWVuZGVyZWNvLm1vZGVsJztcclxuaW1wb3J0IHsgVW5iUGVzc29hVGVsZWZvbmVUaXBvIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS10ZWxlZm9uZS5tb2RlbCc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYU1vZGVsIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS5tb2RlbCc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYUVycm9QYWRyYW8sIFVuQlBlc3NvYVNlcnZpY2UgfSBmcm9tICcuLi91bmItcGVzc29hLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVbmJUaXBvUGVzc29hRW51bSB9IGZyb20gJy4uL3VuYi10aXBvLXBlc3NvYS5lbnVtJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXVuYi1wZXNzb2EtcGVzcXVpc2FyJyxcclxuICBzdGFuZGFsb25lOiBmYWxzZSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdW5iLXBlc3NvYS1wZXNxdWlzYXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi91bmItcGVzc29hLXBlc3F1aXNhci5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVW5iUGVzc29hUGVzcXVpc2FyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBpc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgLy8gQ29uZmlndXJhw6fDo28gZGEgQVBJLiBFeGVtcGxvIFNHSS51bmIuYnIvcGVzc29hLWFwaVxyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGJhY2tlbmRVUkw6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIC8vIEZsYWdzIGRlIFBlc3F1aXNhIChjb20gY29udmVyc8OjbyBhdXRvbcOhdGljYSBkZSBzdHJpbmcgcGFyYSBib29sZWFuKVxyXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBwZXNxdWlzYXJQb3JDUEYgPSB0cnVlO1xyXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBwZXNxdWlzYXJQb3JDTlBKID0gdHJ1ZTtcclxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgcGVzcXVpc2FyUG9yRXN0cmFuZ2Vpcm8gPSBmYWxzZTtcclxuXHJcbiAgLy8gQ29uZmlndXJhw6fDtWVzIGRlIFVJIGUgQ29tcG9ydGFtZW50b1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRUaXBvUGVzc29hOiBVbmJUaXBvUGVzc29hRW51bSB8ICdGSVNJQ0EnIHwgJ0pVUklESUNBJyB8ICdFU1RSQU5HRUlSQScgPSBVbmJUaXBvUGVzc29hRW51bS5GSVNJQ0E7XHJcbiAgQElucHV0KCkgY2FtcG9QZXNxdWlzYU1heFdpZHRoOiBzdHJpbmcgPSAnNDAwcHgnO1xyXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBtb3N0cmFyUGVzcXVpc2EgPSB0cnVlO1xyXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBsaW1wYXJBcG9zUGVzcXVpc2EgPSBmYWxzZTtcclxuXHJcbiAgLy8gVGV4dG9zIGUgTGFiZWxzXHJcbiAgQElucHV0KCkgbGFiZWwgPSBcIkRpZ2l0ZSBvIENQRi9DTlBKIG91IFBhc3NhcG9ydGVcIjtcclxuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9IFwiXCI7XHJcbiAgQElucHV0KCkgaGludCA9IFwiXCI7XHJcblxyXG4gIC8vIERhZG9zIGUgRXZlbnRvc1xyXG4gIEBJbnB1dCgpIHBlc3NvYSA9IG5ldyBVbmJQZXNzb2FNb2RlbCgpO1xyXG4gIEBPdXRwdXQoKSBwZXNzb2FFbWl0dGVkID0gbmV3IEV2ZW50RW1pdHRlcjxVbmJQZXNzb2FNb2RlbD4oKTtcclxuICBAT3V0cHV0KCkgaXNMb2FkaW5nQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBlc3NvYVNlcnZpY2U6IFVuQlBlc3NvYVNlcnZpY2UsIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLCBwcml2YXRlIGFsZXJ0U2VydmljZTogVW5iTWVuc2FnZW1TZXJ2aWNlKSB7IH1cclxuXHJcbiAgcGVzc29hRW5jb250cmFkbzogQm9vbGVhbiB8IG51bGwgPSBmYWxzZTtcclxuICBtb3N0cmFyVGlwb1Blc3NvYSE6IGJvb2xlYW47XHJcbiAgbGlzdGFUaXBvRW5kZXJlY286IFVuYlBlc3NvYUVuZGVyZWNvVGlwb1tdID0gW107XHJcbiAgbGlzdGFUaXBvVGVsZWZvbmU6IFVuYlBlc3NvYVRlbGVmb25lVGlwb1tdID0gW107XHJcbiAgbGlzdGFUaXBvRW1haWw6IFVuYlBlc3NvYUVtYWlsVGlwb1tdID0gW107XHJcblxyXG4gIGlkTWVuc2FnZW1TZXJ2aWNlID0gXCJVbmJQZXNzb2FQZXNxdWlzYXJcIjtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAvLyAxLiBWYWxpZGHDp8OjbyBkZSBJbmljaWFsaXphw6fDo28gZGEgQVBJXHJcbiAgICBpZiAoIXRoaXMuYmFja2VuZFVSTCkge1xyXG4gICAgICB0aGlzLmhhbmRsZUVycm9yUHJpbnRDb25zb2xlKFwiW1VuYlBlc3NvYVBlc3F1aXNhckNvbXBvbmVudF0gRVJST1I6IGJhY2tlbmRVUkwgZXN0w6EgbnVsbC5cIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMucGVzc29hU2VydmljZS5zZXRCYWNrZW5kVXJsKHRoaXMuYmFja2VuZFVSTCk7XHJcblxyXG4gICAgLy8gMi4gQ2FycmVnYW1lbnRvIGRlIERhZG9zIGRlIEFwb2lvXHJcbiAgICBmb3JrSm9pbih7XHJcbiAgICAgIHRpcG9zRW5kOiB0aGlzLnBlc3NvYVNlcnZpY2UuZ2V0VGlwb0VuZGVyZWNvKCksXHJcbiAgICAgIHRpcG9zVGVsOiB0aGlzLnBlc3NvYVNlcnZpY2UuZ2V0VGlwb1RlbGVmb25lKCksXHJcbiAgICAgIHRpcG9zRW1haWw6IHRoaXMucGVzc29hU2VydmljZS5nZXRUaXBvRW1haWwoKVxyXG4gICAgfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHsgdGlwb3NFbmQsIHRpcG9zVGVsLCB0aXBvc0VtYWlsIH0pID0+IHtcclxuICAgICAgICB0aGlzLmxpc3RhVGlwb0VuZGVyZWNvID0gdGlwb3NFbmQ7XHJcbiAgICAgICAgdGhpcy5saXN0YVRpcG9UZWxlZm9uZSA9IHRpcG9zVGVsO1xyXG4gICAgICAgIHRoaXMubGlzdGFUaXBvRW1haWwgPSB0aXBvc0VtYWlsO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXCJGYWxoYSBhbyBjYXJyZWdhciBkYWRvcyBkZSBhcG9pby4gUmVjYXJyZWd1ZSBhIHDDoWdpbmEuXCIpO1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvIG5vIGZvcmtKb2luOlwiLCBlcnIpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyAzLiBEZWZpbmnDp8OjbyBkYSBMw7NnaWNhIGRlIEV4aWJpw6fDo28gZSBUaXBvIFBhZHLDo29cclxuICAgIGNvbnN0IG9wY29lc0F0aXZhcyA9IFt0aGlzLnBlc3F1aXNhclBvckNQRiwgdGhpcy5wZXNxdWlzYXJQb3JDTlBKLCB0aGlzLnBlc3F1aXNhclBvckVzdHJhbmdlaXJvXS5maWx0ZXIodiA9PiB2KS5sZW5ndGg7XHJcblxyXG4gICAgLy8gU8OzIG1vc3RyYSBvIHLDoWRpbyBzZSBob3V2ZXIgZXNjb2xoYSByZWFsIChtYWlzIGRlIHVtYSBvcMOnw6NvIGF0aXZhKVxyXG4gICAgdGhpcy5tb3N0cmFyVGlwb1Blc3NvYSA9IG9wY29lc0F0aXZhcyA+IDE7XHJcblxyXG4gICAgaWYgKG9wY29lc0F0aXZhcyA9PT0gMCkge1xyXG4gICAgICB0aGlzLmhhbmRsZUVycm9yUHJpbnRDb25zb2xlKFwiW1VuYlBlc3NvYVBlc3F1aXNhckNvbXBvbmVudF0gRVJST1I6IE5lbmh1bWEgb3DDp8OjbyBkZSBwZXNxdWlzYSAoQ1BGL0NOUEovRXN0cmFuZ2Vpcm8pIGVzdMOhIGF0aXZhLlwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIDQuIEF0cmlidWnDp8OjbyBkbyBUaXBvIEluaWNpYWwgKE9yZGVtIGRlIHByaW9yaWRhZGU6IFZhbG9yIHBhZHLDo28gLT4gT3DDp8OjbyDDmm5pY2EgLT4gQ1BGKVxyXG4gICAgdGhpcy5kZWZpbmlyVGlwb1Blc3NvYUluaWNpYWwoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluZSBxdWFsIHRpcG8gZGUgcGVzc29hIGVzdGFyw6Egc2VsZWNpb25hZG8gYW8gY2FycmVnYXIgbyBjb21wb25lbnRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkZWZpbmlyVGlwb1Blc3NvYUluaWNpYWwoKTogdm9pZCB7XHJcbiAgICAvLyBWZXJpZmljYSBzZSBvIHBhZHLDo28gcGFzc2FkbyDDqSBwZXJtaXRpZG8gcGVsYXMgZmxhZ3MgZGUgcGVzcXVpc2FcclxuICAgIGNvbnN0IHBhZHJhb0VoVmFsaWRvID1cclxuICAgICAgICAodGhpcy5kZWZhdWx0VGlwb1Blc3NvYSA9PT0gVW5iVGlwb1Blc3NvYUVudW0uRklTSUNBICYmIHRoaXMucGVzcXVpc2FyUG9yQ1BGKSB8fFxyXG4gICAgICAgICh0aGlzLmRlZmF1bHRUaXBvUGVzc29hID09PSBVbmJUaXBvUGVzc29hRW51bS5KVVJJRElDQSAmJiB0aGlzLnBlc3F1aXNhclBvckNOUEopIHx8XHJcbiAgICAgICAgKHRoaXMuZGVmYXVsdFRpcG9QZXNzb2EgPT09IFVuYlRpcG9QZXNzb2FFbnVtLkVTVFJBTkdFSVJBICYmIHRoaXMucGVzcXVpc2FyUG9yRXN0cmFuZ2Vpcm8pO1xyXG5cclxuICAgIGlmIChwYWRyYW9FaFZhbGlkbykge1xyXG4gICAgICAgIC8vIENvbW8gbyB2YWxvciBkYSBzdHJpbmcgw6kgaWd1YWwgYW8gdmFsb3IgZG8gRW51bSwgYSBhdHJpYnVpw6fDo28gw6kgZGlyZXRhXHJcbiAgICAgICAgdGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9IHRoaXMuZGVmYXVsdFRpcG9QZXNzb2EgYXMgVW5iVGlwb1Blc3NvYUVudW07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRUaXBvUGVzc29hKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgICAgICAgIGBbVW5iUGVzc29hUGVzcXVpc2FyXSBPIHZhbG9yIGRlZmF1bHRUaXBvUGVzc29hPScke3RoaXMuZGVmYXVsdFRpcG9QZXNzb2F9JyDDqSBpbmNvbXBhdMOtdmVsIGNvbSBhcyBvcMOnw7VlcyBkZSBwZXNxdWlzYSBhdGl2YXMuIFNlbGVjaW9uYW5kbyBhIHByaW1laXJhIGRpc3BvbsOtdmVsLmBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEZhbGxiYWNrIHBhcmEgYSBwcmltZWlyYSBvcMOnw6NvIGF0aXZhXHJcbiAgICAgICAgaWYgKHRoaXMucGVzcXVpc2FyUG9yQ1BGKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPSBVbmJUaXBvUGVzc29hRW51bS5GSVNJQ0E7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBlc3F1aXNhclBvckNOUEopIHtcclxuICAgICAgICAgICAgdGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9IFVuYlRpcG9QZXNzb2FFbnVtLkpVUklESUNBO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wZXNxdWlzYXJQb3JFc3RyYW5nZWlybykge1xyXG4gICAgICAgICAgICB0aGlzLnBlc3NvYS50aXBvUGVzc29hID0gVW5iVGlwb1Blc3NvYUVudW0uRVNUUkFOR0VJUkE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25UaXBvUGVzc29hQ2hhbmdlKCkge1xyXG4gICAgLy8gQ3JpYSB1bWEgbm92YSBwZXNzb2EgbGltcGEgY29tIG8gdGlwbyBzZWxlY2lvbmFkb1xyXG4gICAgY29uc3Qgbm92YVBlc3NvYSA9IG5ldyBVbmJQZXNzb2FNb2RlbCgpO1xyXG4gICAgbm92YVBlc3NvYS50aXBvUGVzc29hID0gdGhpcy5wZXNzb2EudGlwb1Blc3NvYTtcclxuXHJcbiAgICAvLyBJbmljaWFsaXphIGFycmF5cyB2YXppb3NcclxuICAgIG5vdmFQZXNzb2EudGVsZWZvbmVzID0gW107XHJcbiAgICBub3ZhUGVzc29hLmVuZGVyZWNvcyA9IFtdO1xyXG4gICAgbm92YVBlc3NvYS5lbWFpbHMgPSBbXTtcclxuXHJcbiAgICAvLyBTdWJzdGl0dWkgYSBwZXNzb2EgYXR1YWxcclxuICAgIHRoaXMucGVzc29hID0gbm92YVBlc3NvYTtcclxuXHJcbiAgICAvLyBFbWl0ZSBhIG5vdmEgcGVzc29hIGxpbXBhIHBhcmEgbyBjb21wb25lbnRlIHBhaSAoZm9ybSlcclxuICAgIHRoaXMucGVzc29hRW1pdHRlZC5lbWl0KHRoaXMucGVzc29hKTtcclxuICB9XHJcblxyXG4gIHBlc3F1aXNhcigpIHtcclxuICAgIGlmICh0aGlzLnZhbGlkYXIoKSA9PSBmYWxzZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5pc0xvYWRpbmdDaGFuZ2UuZW1pdCh0cnVlKTtcclxuICAgIGxldCByZXN1bHQ7XHJcbiAgICBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBVbmJUaXBvUGVzc29hRW51bS5GSVNJQ0EpIHtcclxuICAgICAgbGV0IGNwZiA9IHRoaXMucGVzc29hLmNwZi5tYXRjaCgvXFxkL2cpPy5qb2luKFwiXCIpOyAvLyByZW1vdmUgY2FyYWN0ZXJlcyBcclxuICAgICAgcmVzdWx0ID0gdGhpcy5wZXNzb2FTZXJ2aWNlLmZpbmRCeUNwZihjcGYpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFVuYlRpcG9QZXNzb2FFbnVtLkpVUklESUNBKSB7XHJcbiAgICAgIGxldCBjbnBqID0gdGhpcy5wZXNzb2EuY25wai5tYXRjaCgvXFxkL2cpPy5qb2luKFwiXCIpOyAvLyByZW1vdmUgY2FyYWN0ZXJlcyBcclxuICAgICAgcmVzdWx0ID0gdGhpcy5wZXNzb2FTZXJ2aWNlLmZpbmRCeUNucGooY25waik7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVW5iVGlwb1Blc3NvYUVudW0uRVNUUkFOR0VJUkEpIHtcclxuICAgICAgcmVzdWx0ID0gdGhpcy5wZXNzb2FTZXJ2aWNlLmZpbmRCeVBhc3NhcG9ydGUodGhpcy5wZXNzb2EucGFzc2Fwb3J0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICByZXN1bHQuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiB0aGlzLmhhZGxlUmVzdWx0LmJpbmQodGhpcyksXHJcbiAgICAgICAgZXJyb3I6IHRoaXMuaGFuZGxlRXJyb3IuYmluZCh0aGlzKVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICB2YWxpZGFyKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuYmFja2VuZFVSTCA9PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3JQcmludENvbnNvbGUoXCJbVW5iUGVzc29hUGVzcXVpc2FyQ29tcG9uZW50XSBFUlJPUjogYmFja2VuZFVSTC51cmwgZXN0w6EgbnVsbC4gSW5zaXJhIG8gcGFyw6JtZXRybyAoYmFja2VuZFVSTCkgY29tIG8gdmFsb3IgZGEgVVJMIGRvIHNldSBCYWNrZW5kIVwiKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVW5iVGlwb1Blc3NvYUVudW0uRklTSUNBKSB7XHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS5jcGYgPT0gbnVsbCB8fCAodGhpcy5wZXNzb2EuY3BmICE9IG51bGwgJiYgdGhpcy5wZXNzb2EuY3BmID09IFwiXCIpKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihcIkNQRiDDqSB1bSBjYW1wbyBvYnJpZ2F0w7NyaW8uXCIpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9IGVsc2UgaWYgKCFVbmJVdGlscy52YWxpZGFyQ1BGKHRoaXMucGVzc29hLmNwZikpIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKFwiRGlnaXRlIHVtIHZhbG9yIHbDoWxpZG8gcGFyYSBvIENQRlwiKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFVuYlRpcG9QZXNzb2FFbnVtLkpVUklESUNBKSB7XHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS5jbnBqID09IG51bGwgfHwgKHRoaXMucGVzc29hLmNucGogIT0gbnVsbCAmJiB0aGlzLnBlc3NvYS5jbnBqID09IFwiXCIpKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihcIkNOUEogw6kgdW0gY2FtcG8gb2JyaWdhdMOzcmlvXCIpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9IGVsc2UgaWYgKCFVbmJVdGlscy52YWxpZGFyQ05QSih0aGlzLnBlc3NvYS5jbnBqKSkge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXCJEaWdpdGUgdW0gdmFsb3IgdsOhbGlkbyBwYXJhIG8gQ05QSiFcIilcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBVbmJUaXBvUGVzc29hRW51bS5FU1RSQU5HRUlSQSkge1xyXG4gICAgICBpZiAodGhpcy5wZXNzb2EucGFzc2Fwb3J0ZSA9PSBudWxsIHx8ICh0aGlzLnBlc3NvYS5wYXNzYXBvcnRlICE9IG51bGwgJiYgdGhpcy5wZXNzb2EucGFzc2Fwb3J0ZSA9PSBcIlwiKSkge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXCJQYXNzYXBvcnRlIMOpIHVtIGNhbXBvIG9icmlnYXTDs3Jpb1wiKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5oYW5kbGVFcnJvcihcIlNlbGVjaW9uZSB1bSB0aXBvIGRlIHBlc3NvYSFcIilcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gRW0gdW5iLXBlc3NvYS1wZXNxdWlzYXIuY29tcG9uZW50LnRzXHJcbiAgaGFkbGVSZXN1bHQocmVzdWx0YWRvOiBVbmJQZXNzb2FNb2RlbCkge1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNMb2FkaW5nQ2hhbmdlLmVtaXQoZmFsc2UpO1xyXG5cclxuICAgIGlmIChyZXN1bHRhZG8pIHtcclxuICAgICAgcmVzdWx0YWRvLnRpcG9QZXNzb2EgPSB0aGlzLnBlc3NvYS50aXBvUGVzc29hOyAvLyBvIGJhY2tlbmQgbmFvIHJldG9ybmEgbyB0aXBvIHBlc3NvYS4gZW50YW8gdGVuaG8gcXVlIGF0cmlidWlyIGFudGVzXHJcbiAgICAgIHRoaXMucGVzc29hID0gcmVzdWx0YWRvO1xyXG5cclxuICAgICAgdGhpcy5wZXNzb2EuZW5kZXJlY29zID0gdGhpcy5wZXNzb2EuZW5kZXJlY29zIHx8IFtdO1xyXG4gICAgICB0aGlzLnBlc3NvYS50ZWxlZm9uZXMgPSB0aGlzLnBlc3NvYS50ZWxlZm9uZXMgfHwgW107XHJcbiAgICAgIHRoaXMucGVzc29hLmVtYWlscyA9IHRoaXMucGVzc29hLmVtYWlscyB8fCBbXTtcclxuXHJcbiAgICAgIC8vIC0tLSBTRcOHw4NPIERFIExJTVBFWkEgREUgREFET1MgUFJJTkNJUEFJUyAoVk9Dw4ogSsOBIFRJTkhBKSAtLS1cclxuICAgICAgaWYgKHRoaXMucGVzc29hLnNleG8pIHtcclxuICAgICAgICBpZiAodGhpcy5wZXNzb2Euc2V4by50b1VwcGVyQ2FzZSgpLnRyaW0oKSA9PT0gJ0ZFTUlOSU5PJykge1xyXG4gICAgICAgICAgdGhpcy5wZXNzb2EuY29kaWdvU2V4byA9IDI7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBlc3NvYS5zZXhvLnRvVXBwZXJDYXNlKCkudHJpbSgpID09PSAnTUFTQ1VMSU5PJykge1xyXG4gICAgICAgICAgdGhpcy5wZXNzb2EuY29kaWdvU2V4byA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5wZXNzb2EuZGF0YU5hc2NpbWVudG8pIHtcclxuICAgICAgICB0aGlzLnBlc3NvYS5kYXRhTmFzY2ltZW50byA9IHRoaXMucGFyc2VEYXRhKHRoaXMucGVzc29hLmRhdGFOYXNjaW1lbnRvKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMucGVzc29hLmVzdGFkb0NpdmlsKSB7XHJcbiAgICAgICAgdGhpcy5wZXNzb2EuY29kaWdvRXN0YWRvQ2l2aWwgPSB0aGlzLnBhcnNlQ29kaWdvKHRoaXMucGVzc29hLmVzdGFkb0NpdmlsKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMucGVzc29hLnBhaXNOYXNjaW1lbnRvKSB7XHJcbiAgICAgICAgdGhpcy5wZXNzb2EuY29kaWdvUGFpc05hc2NpbWVudG8gPSB0aGlzLnBhcnNlQ29kaWdvKHRoaXMucGVzc29hLnBhaXNOYXNjaW1lbnRvKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMucGVzc29hLmVzY29sYXJpZGFkZSkge1xyXG4gICAgICAgIHRoaXMucGVzc29hLmVzY29sYXJpZGFkZSA9IHRoaXMucGFyc2VDb2RpZ28odGhpcy5wZXNzb2EuZXNjb2xhcmlkYWRlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gMS4gUHJvY2Vzc2EgRW5kZXJlw6dvc1xyXG4gICAgICAvLyBPIHBheWxvYWQgJ3NhbHZhcicgZXNwZXJhOiBvcmRlbUVuZGVyZWNvLCB0aXBvRW5kZXJlY29Db2RpZ28sIHBhaXNFbmRlcmVjb0NvZGlnbywgdWZFbmRlcmVjb1xyXG4gICAgICAvLyAxLiBQcm9jZXNzYSBFbmRlcmXDp29zXHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS5lbmRlcmVjb3MgJiYgdGhpcy5saXN0YVRpcG9FbmRlcmVjby5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgLy8gLS0tIENPUlJFw4fDg086IEFkaWNpb25hZG8gJ2knIGFvIGZvckVhY2ggLS0tXHJcbiAgICAgICAgdGhpcy5wZXNzb2EuZW5kZXJlY29zLmZvckVhY2goKGVuZCwgaSkgPT4ge1xyXG4gICAgICAgICAgLy8gVHJhZHV6IG8gJ3RpcG8nIChzdHJpbmcpIHBhcmEgJ3RpcG9FbmRlcmVjb0NvZGlnbycgKG51bWJlcilcclxuICAgICAgICAgIGlmICghZW5kLnRpcG9FbmRlcmVjb0NvZGlnbyAmJiBlbmQudGlwbykge1xyXG4gICAgICAgICAgICBjb25zdCB0aXBvRW5jb250cmFkbyA9IHRoaXMubGlzdGFUaXBvRW5kZXJlY28uZmluZCh0ID0+IHQuZGVub21pbmFjYW8/LnRvTG93ZXJDYXNlKCkgPT09IGVuZC50aXBvPy50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgaWYgKHRpcG9FbmNvbnRyYWRvKSBlbmQudGlwb0VuZGVyZWNvQ29kaWdvID0gdGlwb0VuY29udHJhZG8uY29kaWdvO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gVHJhZHV6ICdwYWlzJyAoc3RyaW5nICcyMiAtIEJSQVNJTCcpIHBhcmEgJ3BhaXNFbmRlcmVjb0NvZGlnbycgKG51bWJlcilcclxuICAgICAgICAgIGlmICghZW5kLnBhaXNFbmRlcmVjb0NvZGlnbyAmJiBlbmQucGFpcykge1xyXG4gICAgICAgICAgICBlbmQucGFpc0VuZGVyZWNvQ29kaWdvID0gdGhpcy5wYXJzZUNvZGlnbyhlbmQucGFpcyk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gTWFwZWlhICdvcmRlbScgLT4gJ29yZGVtRW5kZXJlY28nIG91IHVzYSBvIMOtbmRpY2UgKGkgKyAxKVxyXG4gICAgICAgICAgLy8gTyBwYXlsb2FkIGRlIHNhbHZhciAobm8gZm9ybSkgZXNwZXJhICdvcmRlbUVuZGVyZWNvJ1xyXG4gICAgICAgICAgZW5kLm9yZGVtRW5kZXJlY28gPSBlbmQub3JkZW1FbmRlcmVjbyB8fCBlbmQub3JkZW0gfHwgKGkgKyAxKTtcclxuXHJcbiAgICAgICAgICAvLyBNYXBlaWEgJ3VmJyAtPiAndWZFbmRlcmVjbydcclxuICAgICAgICAgIGlmICghZW5kLnVmRW5kZXJlY28gJiYgZW5kLnVmKSB7XHJcbiAgICAgICAgICAgIGVuZC51ZkVuZGVyZWNvID0gZW5kLnVmO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyAyLiBQcm9jZXNzYSBUZWxlZm9uZXNcclxuICAgICAgaWYgKHRoaXMucGVzc29hLnRlbGVmb25lcyAmJiB0aGlzLmxpc3RhVGlwb1RlbGVmb25lLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAvLyAtLS0gQ09SUkXDh8ODTzogQWRpY2lvbmFkbyAnaScgYW8gZm9yRWFjaCAtLS1cclxuICAgICAgICB0aGlzLnBlc3NvYS50ZWxlZm9uZXMuZm9yRWFjaCgodGVsLCBpKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXRlbC50aXBvVGVsZWZvbmVDb2RpZ28gJiYgdGVsLnRpcG8pIHtcclxuICAgICAgICAgICAgY29uc3QgdGlwb0VuY29udHJhZG8gPSB0aGlzLmxpc3RhVGlwb1RlbGVmb25lLmZpbmQodCA9PiB0LmRlbm9taW5hY2FvPy50b0xvd2VyQ2FzZSgpID09PSB0ZWwudGlwbz8udG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgIGlmICh0aXBvRW5jb250cmFkbykgdGVsLnRpcG9UZWxlZm9uZUNvZGlnbyA9IHRpcG9FbmNvbnRyYWRvLmNvZGlnbztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyAtLS0gQ09SUkXDh8ODTzogTMOzZ2ljYSBkYSBPcmRlbSAtLS1cclxuICAgICAgICAgIC8vIE8gcGF5bG9hZCBkZSBzYWx2YXIgKG5vIGZvcm0pIGzDqiAndGVsLm9yZGVtJ1xyXG4gICAgICAgICAgdGVsLm9yZGVtID0gdGVsLm9yZGVtIHx8IChpICsgMSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIDMuIFByb2Nlc3NhIEVtYWlsc1xyXG4gICAgICBpZiAodGhpcy5wZXNzb2EuZW1haWxzICYmIHRoaXMubGlzdGFUaXBvRW1haWwubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIC8vIC0tLSBDT1JSRcOHw4NPOiBBZGljaW9uYWRvICdpJyBhbyBmb3JFYWNoIC0tLVxyXG4gICAgICAgIHRoaXMucGVzc29hLmVtYWlscy5mb3JFYWNoKChlbWFpbCwgaSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFlbWFpbC50aXBvRW1haWxDb2RpZ28gJiYgZW1haWwudGlwbykge1xyXG4gICAgICAgICAgICBjb25zdCB0aXBvRW5jb250cmFkbyA9IHRoaXMubGlzdGFUaXBvRW1haWwuZmluZCh0ID0+IHQuZGVub21pbmFjYW8/LnRvTG93ZXJDYXNlKCkgPT09IGVtYWlsLnRpcG8/LnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICBpZiAodGlwb0VuY29udHJhZG8pIGVtYWlsLnRpcG9FbWFpbENvZGlnbyA9IHRpcG9FbmNvbnRyYWRvLmNvZGlnbztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyAtLS0gQ09SUkXDh8ODTzogTMOzZ2ljYSBkYSBPcmRlbSAtLS1cclxuICAgICAgICAgIC8vIE8gcGF5bG9hZCBkZSBzYWx2YXIgKG5vIGZvcm0pIGzDqiAnZW1haWwub3JkZW0nXHJcbiAgICAgICAgICBlbWFpbC5vcmRlbSA9IGVtYWlsLm9yZGVtIHx8IChpICsgMSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFVuYlRpcG9QZXNzb2FFbnVtLkZJU0lDQSkge1xyXG4gICAgICAgIHRoaXMucGVzc29hLmNwZiA9IFVuYlV0aWxzLmZvcm1hdGFDcGYocmVzdWx0YWRvLmNwZik7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBVbmJUaXBvUGVzc29hRW51bS5KVVJJRElDQSkge1xyXG4gICAgICAgIHRoaXMucGVzc29hLmNucGogPSBVbmJVdGlscy5mb3JtYXRhQ25waihyZXN1bHRhZG8uY25waik7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBVbmJUaXBvUGVzc29hRW51bS5FU1RSQU5HRUlSQSkge1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBzZSBjaGVnYXIgYWtpIGVoIHBxIG5hbyBlbmNvbnRyb3UuLi4gKGzDs2dpY2EgcXVlIGrDoSBleGlzdGUpXHJcbiAgICAgIGxldCBub3ZhUGVzc29hID0gbmV3IFVuYlBlc3NvYU1vZGVsKCk7XHJcbiAgICAgIG5vdmFQZXNzb2EudGlwb1Blc3NvYSA9IHRoaXMucGVzc29hLnRpcG9QZXNzb2E7XHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFVuYlRpcG9QZXNzb2FFbnVtLkZJU0lDQSkge1xyXG4gICAgICAgIG5vdmFQZXNzb2EuY3BmID0gdGhpcy5wZXNzb2EuY3BmO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVW5iVGlwb1Blc3NvYUVudW0uSlVSSURJQ0EpIHtcclxuICAgICAgICBub3ZhUGVzc29hLmNucGogPSB0aGlzLnBlc3NvYS5jbnBqO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5vdmFQZXNzb2EucGFzc2Fwb3J0ZSA9IHRoaXMucGVzc29hLnBhc3NhcG9ydGU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wZXNzb2EgPSBub3ZhUGVzc29hO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGVzc29hRW1pdHRlZC5lbWl0KHRoaXMucGVzc29hKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcGFyc2VDb2RpZ28odmFsb3JTdHJpbmc6IGFueSk6IG51bWJlciB8IG51bGwge1xyXG4gICAgaWYgKHR5cGVvZiB2YWxvclN0cmluZyA9PT0gJ251bWJlcicpIHtcclxuICAgICAgcmV0dXJuIHZhbG9yU3RyaW5nOyAvLyBKw6Egw6kgdW0gbsO6bWVyb1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiB2YWxvclN0cmluZyAhPT0gJ3N0cmluZycgfHwgIXZhbG9yU3RyaW5nLmluY2x1ZGVzKCcgLSAnKSkge1xyXG4gICAgICAvLyBUZW50YSBjb252ZXJ0ZXIgZGlyZXRvLCBjYXNvIG8gYmFja2VuZCBtYW5kZSBzw7MgbyBuw7ptZXJvIGNvbW8gc3RyaW5nXHJcbiAgICAgIGNvbnN0IG51bSA9IHBhcnNlSW50KHZhbG9yU3RyaW5nLCAxMCk7XHJcbiAgICAgIHJldHVybiBpc05hTihudW0pID8gbnVsbCA6IG51bTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXJ0ZXMgPSB2YWxvclN0cmluZy5zcGxpdCgnIC0gJyk7XHJcbiAgICBjb25zdCBjb2RpZ28gPSBwYXJzZUludChwYXJ0ZXNbMF0udHJpbSgpLCAxMCk7XHJcbiAgICByZXR1cm4gaXNOYU4oY29kaWdvKSA/IG51bGwgOiBjb2RpZ287XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb252ZXJ0ZSB1bWEgc3RyaW5nIG5vIGZvcm1hdG8gJ2RkL01NL3l5eXknIHBhcmEgdW0gb2JqZXRvIERhdGUuXHJcbiAgICogUmV0b3JuYSBudWxsIHNlIG8gZm9ybWF0byBmb3IgaW52w6FsaWRvLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGFyc2VEYXRhKGRhdGFTdHJpbmc6IGFueSk6IERhdGUgfCBudWxsIHtcclxuICAgIGlmIChkYXRhU3RyaW5nIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICByZXR1cm4gZGF0YVN0cmluZzsgLy8gSsOhIMOpIHVtIG9iamV0byBEYXRlXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGRhdGFTdHJpbmcgIT09ICdzdHJpbmcnIHx8ICFkYXRhU3RyaW5nLmluY2x1ZGVzKCcvJykpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcGFydGVzID0gZGF0YVN0cmluZy5zcGxpdCgnLycpOyAvLyBbZGQsIE1NLCB5eXl5XVxyXG4gICAgaWYgKHBhcnRlcy5sZW5ndGggPT09IDMpIHtcclxuICAgICAgY29uc3QgZGlhID0gcGFyc2VJbnQocGFydGVzWzBdLCAxMCk7XHJcbiAgICAgIGNvbnN0IG1lcyA9IHBhcnNlSW50KHBhcnRlc1sxXSwgMTApIC0gMTsgLy8gTcOqcyBubyBKUyDDqSAwLWluZGV4YWRvXHJcbiAgICAgIGNvbnN0IGFubyA9IHBhcnNlSW50KHBhcnRlc1syXSwgMTApO1xyXG5cclxuICAgICAgLy8gVmVyaWZpY2Egc2UgYSBkYXRhIMOpIHbDoWxpZGFcclxuICAgICAgY29uc3QgZGF0YU9iaiA9IG5ldyBEYXRlKGFubywgbWVzLCBkaWEpO1xyXG4gICAgICBpZiAoZGF0YU9iai5nZXRGdWxsWWVhcigpID09PSBhbm8gJiYgZGF0YU9iai5nZXRNb250aCgpID09PSBtZXMgJiYgZGF0YU9iai5nZXREYXRlKCkgPT09IGRpYSkge1xyXG4gICAgICAgIHJldHVybiBkYXRhT2JqO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDsgLy8gRm9ybWF0byBpbnbDoWxpZG9cclxuICB9XHJcblxyXG4gIGhhbmRsZUVycm9yKGVycm86IFVuYlBlc3NvYUVycm9QYWRyYW8gfCBzdHJpbmcpIHtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzTG9hZGluZ0NoYW5nZS5lbWl0KGZhbHNlKTtcclxuICAgIHRoaXMucGVzc29hRW5jb250cmFkbyA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBlcnJvVHJhdGFkbzogVW5iUGVzc29hRXJyb1BhZHJhbztcclxuXHJcbiAgICAvLyAtLS0gQURBUFRFUjogQ29udmVydGUgc3RyaW5nIHBhcmEgbyBPYmpldG8gUGFkcsOjbyAtLS1cclxuICAgIGlmICh0eXBlb2YgZXJybyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgZXJyb1RyYXRhZG8gPSB7XHJcbiAgICAgICAgc3RhdHVzOiA0MDAsIC8vIEVycm8gZGUgdmFsaWRhw6fDo28gbG9jYWwgZ2VyYWxtZW50ZSDDqSA0MDBcclxuICAgICAgICBtZW5zYWdlbVNpbXBsZXM6IGVycm8sXHJcbiAgICAgICAgbWVuc2FnZW1IdG1sOiBgPHN0cm9uZz4ke2Vycm99PC9zdHJvbmc+YFxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gU2UgasOhIHZlaW8gZG8gU2VydmljZSAob3Ugw6kgdW0gb2JqZXRvIG1hbnVhbCksIHVzYSBkaXJldG9cclxuICAgICAgZXJyb1RyYXRhZG8gPSBlcnJvO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLSBMw5NHSUNBIERFIEVYSUJJw4fDg08gLS0tXHJcblxyXG4gICAgLy8gMS4gU25hY2tCYXIgKE1lbnNhZ2VtIGN1cnRhKVxyXG4gICAgaWYgKGVycm9UcmF0YWRvLm1lbnNhZ2VtU2ltcGxlcykge1xyXG4gICAgICB0aGlzLm9wZW5TbmFja0JhcihlcnJvVHJhdGFkby5tZW5zYWdlbVNpbXBsZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIDIuIENvbXBvbmVudGUgZGUgTWVuc2FnZW0gKE1lbnNhZ2VtIEhUTUwpXHJcbiAgICBpZiAodGhpcy5hbGVydFNlcnZpY2UgJiYgZXJyb1RyYXRhZG8ubWVuc2FnZW1IdG1sKSB7XHJcbiAgICAgIC8vIFNlIHZvY8OqIHRpdmVyIGEgdmFyacOhdmVsIGlkTWVuc2FnZW1TZXJ2aWNlIGRlZmluaWRhIG5hIGNsYXNzZTpcclxuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd01lc3NhZ2UoZXJyb1RyYXRhZG8ubWVuc2FnZW1IdG1sLCBVbmJUaXBvTWVuc2FnZW1FbnVtLkRBTkdFUiwgdGhpcy5pZE1lbnNhZ2VtU2VydmljZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFcnJvclByaW50Q29uc29sZShlcnJvOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKGVycm8pO1xyXG4gICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvKTtcclxuICB9XHJcblxyXG4gIG9wZW5TbmFja0JhcihtZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc25hY2tCYXIub3BlbihtZXNzYWdlLCAneCcsIHtcclxuICAgICAgZHVyYXRpb246IDUwMDAsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRpcG9QZXNzb2FFbnVtKCkge1xyXG4gICAgcmV0dXJuIFVuYlRpcG9QZXNzb2FFbnVtO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybWF0YSBvIENQRiBlbnF1YW50byBvIHVzdcOhcmlvIGRpZ2l0YVxyXG4gICAqL1xyXG4gIGZvcm1hdGFyQ3BmKGV2ZW50OiBhbnkpIHtcclxuICAgIGxldCB2YWxvciA9IGV2ZW50LnRhcmdldC52YWx1ZS5yZXBsYWNlKC9cXEQvZywgJycpOyAvLyBSZW1vdmUgdHVkbyBxdWUgbsOjbyDDqSBkw61naXRvXHJcblxyXG4gICAgaWYgKHZhbG9yLmxlbmd0aCA8PSAxMSkge1xyXG4gICAgICAvLyBBcGxpY2EgbcOhc2NhcmE6IDAwMC4wMDAuMDAwLTAwXHJcbiAgICAgIHZhbG9yID0gdmFsb3IucmVwbGFjZSgvKFxcZHszfSkoXFxkKS8sICckMS4kMicpO1xyXG4gICAgICB2YWxvciA9IHZhbG9yLnJlcGxhY2UoLyhcXGR7M30pKFxcZCkvLCAnJDEuJDInKTtcclxuICAgICAgdmFsb3IgPSB2YWxvci5yZXBsYWNlKC8oXFxkezN9KShcXGR7MSwyfSkkLywgJyQxLSQyJyk7XHJcbiAgICAgIHRoaXMucGVzc29hLmNwZiA9IHZhbG9yO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybWF0YSBvIENOUEogZW5xdWFudG8gbyB1c3XDoXJpbyBkaWdpdGFcclxuICAgKi9cclxuICBmb3JtYXRhckNucGooZXZlbnQ6IGFueSkge1xyXG4gICAgbGV0IHZhbG9yID0gZXZlbnQudGFyZ2V0LnZhbHVlLnJlcGxhY2UoL1xcRC9nLCAnJyk7IC8vIFJlbW92ZSB0dWRvIHF1ZSBuw6NvIMOpIGTDrWdpdG9cclxuXHJcbiAgICBpZiAodmFsb3IubGVuZ3RoIDw9IDE0KSB7XHJcbiAgICAgIC8vIEFwbGljYSBtw6FzY2FyYTogMDAuMDAwLjAwMC8wMDAwLTAwXHJcbiAgICAgIHZhbG9yID0gdmFsb3IucmVwbGFjZSgvKFxcZHsyfSkoXFxkKS8sICckMS4kMicpO1xyXG4gICAgICB2YWxvciA9IHZhbG9yLnJlcGxhY2UoLyhcXGR7M30pKFxcZCkvLCAnJDEuJDInKTtcclxuICAgICAgdmFsb3IgPSB2YWxvci5yZXBsYWNlKC8oXFxkezN9KShcXGQpLywgJyQxLyQyJyk7XHJcbiAgICAgIHZhbG9yID0gdmFsb3IucmVwbGFjZSgvKFxcZHs0fSkoXFxkezEsMn0pJC8sICckMS0kMicpO1xyXG4gICAgICB0aGlzLnBlc3NvYS5jbnBqID0gdmFsb3I7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIiwiPGZvcm0gI3Blc3NvYUZvcm09XCJuZ0Zvcm1cIiBjbGFzcz1cInBlc3F1aXNhLWNvbnRhaW5lclwiIFtuZ1N0eWxlXT1cInsnLS10YW1hbmhvLW1heGltbyc6IGNhbXBvUGVzcXVpc2FNYXhXaWR0aH1cIlxyXG4gIChuZ1N1Ym1pdCk9XCJwZXNxdWlzYXIoKVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJtZW5zYWdlbS1jb250YWluZXJcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiPlxyXG4gICAgPHVuYi1tZW5zYWdlbSBbaWRlbnRpZmljYWRvcl09XCJpZE1lbnNhZ2VtU2VydmljZVwiIGNsYXNzPVwibWVuc2FnZW0tZm9ybVwiPjwvdW5iLW1lbnNhZ2VtPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZm9ybS13cmFwcGVyXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwibW9zdHJhclRpcG9QZXNzb2FcIiBjbGFzcz1cInJhZGlvLWNvbnRhaW5lclwiPlxyXG4gICAgICA8bWF0LXJhZGlvLWdyb3VwIGFyaWEtbGFiZWw9XCJUaXBvIGRlIFBlc3NvYVwiIFsobmdNb2RlbCldPVwicGVzc29hLnRpcG9QZXNzb2FcIiAjdGlwb1Blc3NvYT1cIm5nTW9kZWxcIlxyXG4gICAgICAgIG5hbWU9XCJ0aXBvUGVzc29hXCIgKGNoYW5nZSk9XCJvblRpcG9QZXNzb2FDaGFuZ2UoKVwiPlxyXG4gICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uICpuZ0lmPVwicGVzcXVpc2FyUG9yQ1BGXCIgdmFsdWU9XCJ7eyB0aXBvUGVzc29hRW51bSgpLkZJU0lDQX19XCI+UGVzc29hIEbDrXNpY2E8L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgICAgPG1hdC1yYWRpby1idXR0b24gKm5nSWY9XCJwZXNxdWlzYXJQb3JDTlBKXCIgdmFsdWU9XCJ7e3RpcG9QZXNzb2FFbnVtKCkuSlVSSURJQ0F9fVwiPiBQZXNzb2FcclxuICAgICAgICAgIEp1csOtZGljYTwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiAqbmdJZj1cInBlc3F1aXNhclBvckVzdHJhbmdlaXJvXCJcclxuICAgICAgICAgIHZhbHVlPVwie3t0aXBvUGVzc29hRW51bSgpLkVTVFJBTkdFSVJBfX1cIj5Fc3RyYW5nZWlybzwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiYnJlYWtcIj48L2Rpdj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGVzc29hLnRpcG9QZXNzb2EgPT09IHRpcG9QZXNzb2FFbnVtKCkuRklTSUNBXCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+Q1BGPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJwZXNzb2EuY3BmXCIgbmFtZT1cImNwZlwiICNjcGY9XCJuZ01vZGVsXCIgcmVxdWlyZWQ9e3t0cnVlfX1cclxuICAgICAgICAgIChpbnB1dCk9XCJmb3JtYXRhckNwZigkZXZlbnQpXCIgbWF4bGVuZ3RoPVwiMTRcIiBwbGFjZWhvbGRlcj1cIjAwMC4wMDAuMDAwLTAwXCIgLz5cclxuICAgICAgICA8YnV0dG9uIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJQZXNxdWlzYXJcIiBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nXCJcclxuICAgICAgICAgIChjbGljayk9XCJwZXNxdWlzYXIoKVwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmc7IGVsc2UgbG9hZGluZ0ljb25cIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9hZGluZ0ljb24+XHJcbiAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBbZGlhbWV0ZXJdPVwiMjBcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwic3Bpbm5lci1idXR0b25cIj5cclxuICAgICAgICAgICAgPC9tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGVzc29hLnRpcG9QZXNzb2EgPT09IHRpcG9QZXNzb2FFbnVtKCkuRVNUUkFOR0VJUkFcIj5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5QYXNzYXBvcnRlPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJwZXNzb2EucGFzc2Fwb3J0ZVwiIG5hbWU9XCJwYXNzYXBvcnRlXCIgcmVxdWlyZWQ9XCJ0cnVlXCIgLz5cclxuICAgICAgICA8YnV0dG9uIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJQZXNxdWlzYXJcIiAoY2xpY2spPVwicGVzcXVpc2FyKClcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNMb2FkaW5nOyBlbHNlIGxvYWRpbmdJY29uXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2xvYWRpbmdJY29uPlxyXG4gICAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXIgW2RpYW1ldGVyXT1cIjIwXCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cInNwaW5uZXItYnV0dG9uXCI+XHJcbiAgICAgICAgICAgIDwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBlc3NvYS50aXBvUGVzc29hID09PSB0aXBvUGVzc29hRW51bSgpLkpVUklESUNBXCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+Q05QSjwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG1hdElucHV0IFsobmdNb2RlbCldPVwicGVzc29hLmNucGpcIiBuYW1lPVwiY25walwiIHJlcXVpcmVkPVwidHJ1ZVwiXHJcbiAgICAgICAgICAoaW5wdXQpPVwiZm9ybWF0YXJDbnBqKCRldmVudClcIiBtYXhsZW5ndGg9XCIxOFwiIHBsYWNlaG9sZGVyPVwiMDAuMDAwLjAwMC8wMDAwLTAwXCIgLz5cclxuICAgICAgICA8YnV0dG9uIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJQZXNxdWlzYXJcIiAoY2xpY2spPVwicGVzcXVpc2FyKClcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNMb2FkaW5nOyBlbHNlIGxvYWRpbmdJY29uXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2xvYWRpbmdJY29uPlxyXG4gICAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXIgW2RpYW1ldGVyXT1cIjIwXCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cInNwaW5uZXItYnV0dG9uXCI+XHJcbiAgICAgICAgICAgIDwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbjwvZm9ybT4iXX0=
|
|
283
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iLXBlc3NvYS1wZXNxdWlzYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5iLWxpYi1jb21wb25lbnRzL3NyYy9saWIvdW5iLXBlc3NvYS91bmItcGVzc29hLXBlc3F1aXNhci91bmItcGVzc29hLXBlc3F1aXNhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmItbGliLWNvbXBvbmVudHMvc3JjL2xpYi91bmItcGVzc29hL3VuYi1wZXNzb2EtcGVzcXVpc2FyL3VuYi1wZXNzb2EtcGVzcXVpc2FyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0IsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFM0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQXNCLG1CQUFtQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDbEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSWpELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUV2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFRdkYsTUFBTSxPQUFPLDJCQUEyQjtJQVV0QyxZQUFvQixhQUErQixFQUFVLFFBQXFCLEVBQVUsWUFBZ0M7UUFBeEcsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUFVLGlCQUFZLEdBQVosWUFBWSxDQUFvQjtRQVQ1SCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLFdBQU0sR0FBRyxJQUFJLGNBQWMsRUFB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LE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7OEdBL1FVLDJCQUEyQjtrR0FBM0IsMkJBQTJCLCtLQ25CeEMsd2dGQTRDTzs7MkZEekJNLDJCQUEyQjtrQkFOdkMsU0FBUzsrQkFDRSwwQkFBMEIsY0FDeEIsS0FBSztnSkFTVSxNQUFNO3NCQUFoQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFFZixhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBib29sZWFuQXR0cmlidXRlLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBVbmJNZW5zYWdlbVNlcnZpY2UsIFVuYlRpcG9NZW5zYWdlbUVudW0gfSBmcm9tICcuLi8uLi91bmItbWVuc2FnZW0vdW5iLW1lbnNhZ2VtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVbmJVdGlscyB9IGZyb20gJy4uLy4uL3V0aWxzL3VuYi11dGlscyc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYUVtYWlsVGlwbyB9IGZyb20gJy4uL3VuYi1wZXNzb2EtbW9kZWxzL3VuYi1wZXNzb2EtZW1haWwubW9kZWwnO1xyXG5pbXBvcnQgeyBVbmJQZXNzb2FFbmRlcmVjb1RpcG8gfSBmcm9tICcuLi91bmItcGVzc29hLW1vZGVscy91bmItcGVzc29hLWVuZGVyZWNvLm1vZGVsJztcclxuaW1wb3J0IHsgVW5iUGVzc29hVGVsZWZvbmVUaXBvIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS10ZWxlZm9uZS5tb2RlbCc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYU1vZGVsIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS5tb2RlbCc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYUVycm9QYWRyYW8sIFVuQlBlc3NvYVNlcnZpY2UgfSBmcm9tICcuLi91bmItcGVzc29hLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVbmJUaXBvUGVzc29hRW51bSB9IGZyb20gJy4uL3VuYi10aXBvLXBlc3NvYS5lbnVtJztcclxuaW1wb3J0IHsgVW5iUGVzc29hUGVzcXVpc2FDb25maWcgfSBmcm9tICcuLi91bmItcGVzc29hLW1vZGVscy91bmItcGVzc29hLWNvbmZpZy5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi11bmItcGVzc29hLXBlc3F1aXNhcicsXHJcbiAgc3RhbmRhbG9uZTogZmFsc2UsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VuYi1wZXNzb2EtcGVzcXVpc2FyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vdW5iLXBlc3NvYS1wZXNxdWlzYXIuY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFVuYlBlc3NvYVBlc3F1aXNhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgcGVzc29hID0gbmV3IFVuYlBlc3NvYU1vZGVsKCk7XHJcblxyXG4gIC8vIENvbmZpZ3VyYcOnw6NvIGRvIGNvbXBvbmVudGVcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBjb25maWc6IFVuYlBlc3NvYVBlc3F1aXNhQ29uZmlnID0gbmV3IFVuYlBlc3NvYVBlc3F1aXNhQ29uZmlnKCk7XHJcblxyXG4gIEBPdXRwdXQoKSBwZXNzb2FFbWl0dGVkID0gbmV3IEV2ZW50RW1pdHRlcjxVbmJQZXNzb2FNb2RlbD4oKTtcclxuICBAT3V0cHV0KCkgaXNMb2FkaW5nQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBlc3NvYVNlcnZpY2U6IFVuQlBlc3NvYVNlcnZpY2UsIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLCBwcml2YXRlIGFsZXJ0U2VydmljZTogVW5iTWVuc2FnZW1TZXJ2aWNlKSB7IH1cclxuXHJcbiAgcGVzc29hRW5jb250cmFkbzogQm9vbGVhbiB8IG51bGwgPSBmYWxzZTtcclxuICBtb3N0cmFyVGlwb1Blc3NvYSE6IGJvb2xlYW47XHJcbiAgbGlzdGFUaXBvRW5kZXJlY286IFVuYlBlc3NvYUVuZGVyZWNvVGlwb1tdID0gW107XHJcbiAgbGlzdGFUaXBvVGVsZWZvbmU6IFVuYlBlc3NvYVRlbGVmb25lVGlwb1tdID0gW107XHJcbiAgbGlzdGFUaXBvRW1haWw6IFVuYlBlc3NvYUVtYWlsVGlwb1tdID0gW107XHJcblxyXG4gIGlkTWVuc2FnZW1TZXJ2aWNlID0gXCJVbmJQZXNzb2FQZXNxdWlzYXJcIjtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAvLyAxLiBWYWxpZGHDp8OjbyBkZSBJbmljaWFsaXphw6fDo28gZGEgQVBJXHJcbiAgICBpZiAoIXRoaXMuY29uZmlnLmJhY2tlbmRVUkwpIHtcclxuICAgICAgdGhpcy5oYW5kbGVFcnJvclByaW50Q29uc29sZShcIltVbmJQZXNzb2FQZXNxdWlzYXJDb21wb25lbnRdIEVSUk9SOiBiYWNrZW5kVVJMIGVzdMOhIG51bGwuXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnBlc3NvYVNlcnZpY2Uuc2V0QmFja2VuZFVybCh0aGlzLmNvbmZpZy5iYWNrZW5kVVJMKTtcclxuICAgIGlmICh0aGlzLmNvbmZpZy50b2tlbikge1xyXG4gICAgICB0aGlzLnBlc3NvYVNlcnZpY2Uuc2V0VG9rZW4odGhpcy5jb25maWcudG9rZW4pO1xyXG4gICAgfVxyXG4gICAgLy8gMi4gQ2FycmVnYW1lbnRvIGRlIERhZG9zIGRlIEFwb2lvXHJcbiAgICBmb3JrSm9pbih7XHJcbiAgICAgIHRpcG9zRW5kOiB0aGlzLnBlc3NvYVNlcnZpY2UuZ2V0VGlwb0VuZGVyZWNvKCksXHJcbiAgICAgIHRpcG9zVGVsOiB0aGlzLnBlc3NvYVNlcnZpY2UuZ2V0VGlwb1RlbGVmb25lKCksXHJcbiAgICAgIHRpcG9zRW1haWw6IHRoaXMucGVzc29hU2VydmljZS5nZXRUaXBvRW1haWwoKVxyXG4gICAgfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHsgdGlwb3NFbmQsIHRpcG9zVGVsLCB0aXBvc0VtYWlsIH0pID0+IHtcclxuICAgICAgICB0aGlzLmxpc3RhVGlwb0VuZGVyZWNvID0gdGlwb3NFbmQ7XHJcbiAgICAgICAgdGhpcy5saXN0YVRpcG9UZWxlZm9uZSA9IHRpcG9zVGVsO1xyXG4gICAgICAgIHRoaXMubGlzdGFUaXBvRW1haWwgPSB0aXBvc0VtYWlsO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXCJGYWxoYSBhbyBjYXJyZWdhciBkYWRvcyBkZSBhcG9pby4gUmVjYXJyZWd1ZSBhIHDDoWdpbmEuXCIpO1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvIG5vIGZvcmtKb2luOlwiLCBlcnIpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyAzLiBEZWZpbmnDp8OjbyBkYSBMw7NnaWNhIGRlIEV4aWJpw6fDo28gZSBUaXBvIFBhZHLDo29cclxuICAgIGNvbnN0IG9wY29lc0F0aXZhcyA9IFt0aGlzLmNvbmZpZy5wZXNxdWlzYXJQb3JDUEYsIHRoaXMuY29uZmlnLnBlc3F1aXNhclBvckNOUEosIHRoaXMuY29uZmlnLnBlc3F1aXNhclBvckVzdHJhbmdlaXJvXS5maWx0ZXIodiA9PiB2KS5sZW5ndGg7XHJcblxyXG4gICAgLy8gU8OzIG1vc3RyYSBvIHLDoWRpbyBzZSBob3V2ZXIgZXNjb2xoYSByZWFsIChtYWlzIGRlIHVtYSBvcMOnw6NvIGF0aXZhKVxyXG4gICAgdGhpcy5tb3N0cmFyVGlwb1Blc3NvYSA9IG9wY29lc0F0aXZhcyA+IDE7XHJcblxyXG4gICAgaWYgKG9wY29lc0F0aXZhcyA9PT0gMCkge1xyXG4gICAgICB0aGlzLmhhbmRsZUVycm9yUHJpbnRDb25zb2xlKFwiW1VuYlBlc3NvYVBlc3F1aXNhckNvbXBvbmVudF0gRVJST1I6IE5lbmh1bWEgb3DDp8OjbyBkZSBwZXNxdWlzYSAoQ1BGL0NOUEovRXN0cmFuZ2Vpcm8pIGVzdMOhIGF0aXZhLlwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIDQuIEF0cmlidWnDp8OjbyBkbyBUaXBvIEluaWNpYWwgKE9yZGVtIGRlIHByaW9yaWRhZGU6IFZhbG9yIHBhZHLDo28gLT4gT3DDp8OjbyDDmm5pY2EgLT4gQ1BGKVxyXG4gICAgdGhpcy5kZWZpbmlyVGlwb1Blc3NvYUluaWNpYWwoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluZSBxdWFsIHRpcG8gZGUgcGVzc29hIGVzdGFyw6Egc2VsZWNpb25hZG8gYW8gY2FycmVnYXIgbyBjb21wb25lbnRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkZWZpbmlyVGlwb1Blc3NvYUluaWNpYWwoKTogdm9pZCB7XHJcbiAgICAvLyBWZXJpZmljYSBzZSBvIHBhZHLDo28gcGFzc2FkbyDDqSBwZXJtaXRpZG8gcGVsYXMgZmxhZ3MgZGUgcGVzcXVpc2FcclxuICAgIGNvbnN0IHBhZHJhb0VoVmFsaWRvID1cclxuICAgICAgICAodGhpcy5jb25maWcuZGVmYXVsdFRpcG9QZXNzb2EgPT09IFVuYlRpcG9QZXNzb2FFbnVtLkZJU0lDQSAmJiB0aGlzLmNvbmZpZy5wZXNxdWlzYXJQb3JDUEYpIHx8XHJcbiAgICAgICAgKHRoaXMuY29uZmlnLmRlZmF1bHRUaXBvUGVzc29hID09PSBVbmJUaXBvUGVzc29hRW51bS5KVVJJRElDQSAmJiB0aGlzLmNvbmZpZy5wZXNxdWlzYXJQb3JDTlBKKSB8fFxyXG4gICAgICAgICh0aGlzLmNvbmZpZy5kZWZhdWx0VGlwb1Blc3NvYSA9PT0gVW5iVGlwb1Blc3NvYUVudW0uRVNUUkFOR0VJUkEgJiYgdGhpcy5jb25maWcucGVzcXVpc2FyUG9yRXN0cmFuZ2Vpcm8pO1xyXG5cclxuICAgIGlmIChwYWRyYW9FaFZhbGlkbykge1xyXG4gICAgICAgIC8vIENvbW8gbyB2YWxvciBkYSBzdHJpbmcgw6kgaWd1YWwgYW8gdmFsb3IgZG8gRW51bSwgYSBhdHJpYnVpw6fDo28gw6kgZGlyZXRhXHJcbiAgICAgICAgdGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9IHRoaXMuY29uZmlnLmRlZmF1bHRUaXBvUGVzc29hIGFzIFVuYlRpcG9QZXNzb2FFbnVtO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5jb25maWcuZGVmYXVsdFRpcG9QZXNzb2EpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgICAgICAgYFtVbmJQZXNzb2FQZXNxdWlzYXJdIE8gdmFsb3IgZGVmYXVsdFRpcG9QZXNzb2E9JyR7dGhpcy5jb25maWcuZGVmYXVsdFRpcG9QZXNzb2F9JyDDqSBpbmNvbXBhdMOtdmVsIGNvbSBhcyBvcMOnw7VlcyBkZSBwZXNxdWlzYSBhdGl2YXMuIFNlbGVjaW9uYW5kbyBhIHByaW1laXJhIGRpc3BvbsOtdmVsLmBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEZhbGxiYWNrIHBhcmEgYSBwcmltZWlyYSBvcMOnw6NvIGF0aXZhXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLnBlc3F1aXNhclBvckNQRikge1xyXG4gICAgICAgICAgICB0aGlzLnBlc3NvYS50aXBvUGVzc29hID0gVW5iVGlwb1Blc3NvYUVudW0uRklTSUNBO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcucGVzcXVpc2FyUG9yQ05QSikge1xyXG4gICAgICAgICAgICB0aGlzLnBlc3NvYS50aXBvUGVzc29hID0gVW5iVGlwb1Blc3NvYUVudW0uSlVSSURJQ0E7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy5wZXNxdWlzYXJQb3JFc3RyYW5nZWlybykge1xyXG4gICAgICAgICAgICB0aGlzLnBlc3NvYS50aXBvUGVzc29hID0gVW5iVGlwb1Blc3NvYUVudW0uRVNUUkFOR0VJUkE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25UaXBvUGVzc29hQ2hhbmdlKCkge1xyXG4gICAgLy8gQ3JpYSB1bWEgbm92YSBwZXNzb2EgbGltcGEgY29tIG8gdGlwbyBzZWxlY2lvbmFkb1xyXG4gICAgY29uc3Qgbm92YVBlc3NvYSA9IG5ldyBVbmJQZXNzb2FNb2RlbCgpO1xyXG4gICAgbm92YVBlc3NvYS50aXBvUGVzc29hID0gdGhpcy5wZXNzb2EudGlwb1Blc3NvYTtcclxuXHJcbiAgICAvLyBJbmljaWFsaXphIGFycmF5cyB2YXppb3NcclxuICAgIG5vdmFQZXNzb2EudGVsZWZvbmVzID0gW107XHJcbiAgICBub3ZhUGVzc29hLmVuZGVyZWNvcyA9IFtdO1xyXG4gICAgbm92YVBlc3NvYS5lbWFpbHMgPSBbXTtcclxuXHJcbiAgICAvLyBTdWJzdGl0dWkgYSBwZXNzb2EgYXR1YWxcclxuICAgIHRoaXMucGVzc29hID0gbm92YVBlc3NvYTtcclxuXHJcbiAgICAvLyBFbWl0ZSBhIG5vdmEgcGVzc29hIGxpbXBhIHBhcmEgbyBjb21wb25lbnRlIHBhaSAoZm9ybSlcclxuICAgIHRoaXMucGVzc29hRW1pdHRlZC5lbWl0KHRoaXMucGVzc29hKTtcclxuICB9XHJcblxyXG4gIHBlc3F1aXNhcigpIHtcclxuICAgIGlmICh0aGlzLnZhbGlkYXIoKSA9PSBmYWxzZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5pc0xvYWRpbmdDaGFuZ2UuZW1pdCh0cnVlKTtcclxuICAgIGxldCByZXN1bHQ7XHJcbiAgICBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBVbmJUaXBvUGVzc29hRW51bS5GSVNJQ0EpIHtcclxuICAgICAgbGV0IGNwZiA9IHRoaXMucGVzc29hLmNwZi5tYXRjaCgvXFxkL2cpPy5qb2luKFwiXCIpOyAvLyByZW1vdmUgY2FyYWN0ZXJlcyBcclxuICAgICAgcmVzdWx0ID0gdGhpcy5wZXNzb2FTZXJ2aWNlLmZpbmRCeUNwZihjcGYpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFVuYlRpcG9QZXNzb2FFbnVtLkpVUklESUNBKSB7XHJcbiAgICAgIGxldCBjbnBqID0gdGhpcy5wZXNzb2EuY25wai5tYXRjaCgvXFxkL2cpPy5qb2luKFwiXCIpOyAvLyByZW1vdmUgY2FyYWN0ZXJlcyBcclxuICAgICAgcmVzdWx0ID0gdGhpcy5wZXNzb2FTZXJ2aWNlLmZpbmRCeUNucGooY25waik7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVW5iVGlwb1Blc3NvYUVudW0uRVNUUkFOR0VJUkEpIHtcclxuICAgICAgcmVzdWx0ID0gdGhpcy5wZXNzb2FTZXJ2aWNlLmZpbmRCeVBhc3NhcG9ydGUodGhpcy5wZXNzb2EucGFzc2Fwb3J0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICByZXN1bHQuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiB0aGlzLmhhZGxlUmVzdWx0LmJpbmQodGhpcyksXHJcbiAgICAgICAgZXJyb3I6IHRoaXMuaGFuZGxlRXJyb3IuYmluZCh0aGlzKVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICB2YWxpZGFyKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmJhY2tlbmRVUkwgPT0gXCJcIikge1xyXG4gICAgICB0aGlzLmhhbmRsZUVycm9yUHJpbnRDb25zb2xlKFwiW1VuYlBlc3NvYVBlc3F1aXNhckNvbXBvbmVudF0gRVJST1I6IGJhY2tlbmRVUkwudXJsIGVzdMOhIG51bGwuIEluc2lyYSBvIHBhcsOibWV0cm8gKGJhY2tlbmRVUkwpIGNvbSBvIHZhbG9yIGRhIFVSTCBkbyBzZXUgQmFja2VuZCFcIilcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFVuYlRpcG9QZXNzb2FFbnVtLkZJU0lDQSkge1xyXG4gICAgICBpZiAodGhpcy5wZXNzb2EuY3BmID09IG51bGwgfHwgKHRoaXMucGVzc29hLmNwZiAhPSBudWxsICYmIHRoaXMucGVzc29hLmNwZiA9PSBcIlwiKSkge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXCJDUEYgw6kgdW0gY2FtcG8gb2JyaWdhdMOzcmlvLlwiKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmICghVW5iVXRpbHMudmFsaWRhckNQRih0aGlzLnBlc3NvYS5jcGYpKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihcIkRpZ2l0ZSB1bSB2YWxvciB2w6FsaWRvIHBhcmEgbyBDUEZcIilcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBVbmJUaXBvUGVzc29hRW51bS5KVVJJRElDQSkge1xyXG4gICAgICBpZiAodGhpcy5wZXNzb2EuY25waiA9PSBudWxsIHx8ICh0aGlzLnBlc3NvYS5jbnBqICE9IG51bGwgJiYgdGhpcy5wZXNzb2EuY25waiA9PSBcIlwiKSkge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXCJDTlBKIMOpIHVtIGNhbXBvIG9icmlnYXTDs3Jpb1wiKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmICghVW5iVXRpbHMudmFsaWRhckNOUEoodGhpcy5wZXNzb2EuY25waikpIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKFwiRGlnaXRlIHVtIHZhbG9yIHbDoWxpZG8gcGFyYSBvIENOUEohXCIpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVW5iVGlwb1Blc3NvYUVudW0uRVNUUkFOR0VJUkEpIHtcclxuICAgICAgaWYgKHRoaXMucGVzc29hLnBhc3NhcG9ydGUgPT0gbnVsbCB8fCAodGhpcy5wZXNzb2EucGFzc2Fwb3J0ZSAhPSBudWxsICYmIHRoaXMucGVzc29hLnBhc3NhcG9ydGUgPT0gXCJcIikpIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKFwiUGFzc2Fwb3J0ZSDDqSB1bSBjYW1wbyBvYnJpZ2F0w7NyaW9cIilcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXCJTZWxlY2lvbmUgdW0gdGlwbyBkZSBwZXNzb2EhXCIpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIEVtIHVuYi1wZXNzb2EtcGVzcXVpc2FyLmNvbXBvbmVudC50c1xyXG4gIGhhZGxlUmVzdWx0KHJlc3VsdGFkbzogVW5iUGVzc29hTW9kZWwpIHtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzTG9hZGluZ0NoYW5nZS5lbWl0KGZhbHNlKTtcclxuXHJcbiAgICBpZiAocmVzdWx0YWRvICYmIHJlc3VsdGFkby5jb2RpZ29QZXNzb2EpIHtcclxuICAgICAgLy8gUmVzdWx0YWRvIGrDoSB2ZW0gbm9ybWFsaXphZG8gcGVsbyBzZXJ2aWNlICh0aXBvUGVzc29hLCBhcnJheXMsIGRhdGFzLCBjw7NkaWdvcywgQ1BGL0NOUEogZm9ybWF0YWRvcylcclxuICAgICAgdGhpcy5wZXNzb2EgPSByZXN1bHRhZG87XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBOw6NvIGVuY29udHJhZG86IG1hbnTDqW0gZG9jdW1lbnRvIGUgdGlwbyBzZWxlY2lvbmFkb3NcclxuICAgICAgY29uc3Qgbm92YVBlc3NvYSA9IG5ldyBVbmJQZXNzb2FNb2RlbCgpO1xyXG4gICAgICBub3ZhUGVzc29hLnRpcG9QZXNzb2EgPSB0aGlzLnBlc3NvYS50aXBvUGVzc29hO1xyXG4gICAgICBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PT0gVW5iVGlwb1Blc3NvYUVudW0uRklTSUNBKSB7XHJcbiAgICAgICAgbm92YVBlc3NvYS5jcGYgPSB0aGlzLnBlc3NvYS5jcGY7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PT0gVW5iVGlwb1Blc3NvYUVudW0uSlVSSURJQ0EpIHtcclxuICAgICAgICBub3ZhUGVzc29hLmNucGogPSB0aGlzLnBlc3NvYS5jbnBqO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5vdmFQZXNzb2EucGFzc2Fwb3J0ZSA9IHRoaXMucGVzc29hLnBhc3NhcG9ydGU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wZXNzb2EgPSBub3ZhUGVzc29hO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGVzc29hRW1pdHRlZC5lbWl0KHRoaXMucGVzc29hKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUVycm9yKGVycm86IFVuYlBlc3NvYUVycm9QYWRyYW8gfCBzdHJpbmcpIHtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzTG9hZGluZ0NoYW5nZS5lbWl0KGZhbHNlKTtcclxuICAgIHRoaXMucGVzc29hRW5jb250cmFkbyA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBlcnJvVHJhdGFkbzogVW5iUGVzc29hRXJyb1BhZHJhbztcclxuXHJcbiAgICAvLyAtLS0gQURBUFRFUjogQ29udmVydGUgc3RyaW5nIHBhcmEgbyBPYmpldG8gUGFkcsOjbyAtLS1cclxuICAgIGlmICh0eXBlb2YgZXJybyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgZXJyb1RyYXRhZG8gPSB7XHJcbiAgICAgICAgc3RhdHVzOiA0MDAsIC8vIEVycm8gZGUgdmFsaWRhw6fDo28gbG9jYWwgZ2VyYWxtZW50ZSDDqSA0MDBcclxuICAgICAgICBtZW5zYWdlbVNpbXBsZXM6IGVycm8sXHJcbiAgICAgICAgbWVuc2FnZW1IdG1sOiBgPHN0cm9uZz4ke2Vycm99PC9zdHJvbmc+YFxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gU2UgasOhIHZlaW8gZG8gU2VydmljZSAob3Ugw6kgdW0gb2JqZXRvIG1hbnVhbCksIHVzYSBkaXJldG9cclxuICAgICAgZXJyb1RyYXRhZG8gPSBlcnJvO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLSBMw5NHSUNBIERFIEVYSUJJw4fDg08gLS0tXHJcblxyXG4gICAgLy8gMS4gU25hY2tCYXIgKE1lbnNhZ2VtIGN1cnRhKVxyXG4gICAgaWYgKGVycm9UcmF0YWRvLm1lbnNhZ2VtU2ltcGxlcykge1xyXG4gICAgICB0aGlzLm9wZW5TbmFja0JhcihlcnJvVHJhdGFkby5tZW5zYWdlbVNpbXBsZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIDIuIENvbXBvbmVudGUgZGUgTWVuc2FnZW0gKE1lbnNhZ2VtIEhUTUwpXHJcbiAgICBpZiAodGhpcy5hbGVydFNlcnZpY2UgJiYgZXJyb1RyYXRhZG8ubWVuc2FnZW1IdG1sKSB7XHJcbiAgICAgIC8vIFNlIHZvY8OqIHRpdmVyIGEgdmFyacOhdmVsIGlkTWVuc2FnZW1TZXJ2aWNlIGRlZmluaWRhIG5hIGNsYXNzZTpcclxuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd01lc3NhZ2UoZXJyb1RyYXRhZG8ubWVuc2FnZW1IdG1sLCBVbmJUaXBvTWVuc2FnZW1FbnVtLkRBTkdFUiwgdGhpcy5pZE1lbnNhZ2VtU2VydmljZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFcnJvclByaW50Q29uc29sZShlcnJvOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKGVycm8pO1xyXG4gICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvKTtcclxuICB9XHJcblxyXG4gIG9wZW5TbmFja0JhcihtZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc25hY2tCYXIub3BlbihtZXNzYWdlLCAneCcsIHtcclxuICAgICAgZHVyYXRpb246IDUwMDAsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRpcG9QZXNzb2FFbnVtKCkge1xyXG4gICAgcmV0dXJuIFVuYlRpcG9QZXNzb2FFbnVtO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybWF0YSBvIENQRiBlbnF1YW50byBvIHVzdcOhcmlvIGRpZ2l0YVxyXG4gICAqL1xyXG4gIGZvcm1hdGFyQ3BmKGV2ZW50OiBhbnkpIHtcclxuICAgIGxldCB2YWxvciA9IGV2ZW50LnRhcmdldC52YWx1ZS5yZXBsYWNlKC9cXEQvZywgJycpOyAvLyBSZW1vdmUgdHVkbyBxdWUgbsOjbyDDqSBkw61naXRvXHJcblxyXG4gICAgaWYgKHZhbG9yLmxlbmd0aCA8PSAxMSkge1xyXG4gICAgICAvLyBBcGxpY2EgbcOhc2NhcmE6IDAwMC4wMDAuMDAwLTAwXHJcbiAgICAgIHZhbG9yID0gdmFsb3IucmVwbGFjZSgvKFxcZHszfSkoXFxkKS8sICckMS4kMicpO1xyXG4gICAgICB2YWxvciA9IHZhbG9yLnJlcGxhY2UoLyhcXGR7M30pKFxcZCkvLCAnJDEuJDInKTtcclxuICAgICAgdmFsb3IgPSB2YWxvci5yZXBsYWNlKC8oXFxkezN9KShcXGR7MSwyfSkkLywgJyQxLSQyJyk7XHJcbiAgICAgIHRoaXMucGVzc29hLmNwZiA9IHZhbG9yO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybWF0YSBvIENOUEogZW5xdWFudG8gbyB1c3XDoXJpbyBkaWdpdGFcclxuICAgKi9cclxuICBmb3JtYXRhckNucGooZXZlbnQ6IGFueSkge1xyXG4gICAgbGV0IHZhbG9yID0gZXZlbnQudGFyZ2V0LnZhbHVlLnJlcGxhY2UoL1xcRC9nLCAnJyk7IC8vIFJlbW92ZSB0dWRvIHF1ZSBuw6NvIMOpIGTDrWdpdG9cclxuXHJcbiAgICBpZiAodmFsb3IubGVuZ3RoIDw9IDE0KSB7XHJcbiAgICAgIC8vIEFwbGljYSBtw6FzY2FyYTogMDAuMDAwLjAwMC8wMDAwLTAwXHJcbiAgICAgIHZhbG9yID0gdmFsb3IucmVwbGFjZSgvKFxcZHsyfSkoXFxkKS8sICckMS4kMicpO1xyXG4gICAgICB2YWxvciA9IHZhbG9yLnJlcGxhY2UoLyhcXGR7M30pKFxcZCkvLCAnJDEuJDInKTtcclxuICAgICAgdmFsb3IgPSB2YWxvci5yZXBsYWNlKC8oXFxkezN9KShcXGQpLywgJyQxLyQyJyk7XHJcbiAgICAgIHZhbG9yID0gdmFsb3IucmVwbGFjZSgvKFxcZHs0fSkoXFxkezEsMn0pJC8sICckMS0kMicpO1xyXG4gICAgICB0aGlzLnBlc3NvYS5jbnBqID0gdmFsb3I7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxmb3JtICNwZXNzb2FGb3JtPVwibmdGb3JtXCIgY2xhc3M9XCJwZXNxdWlzYS1jb250YWluZXJcIiAobmdTdWJtaXQpPVwicGVzcXVpc2FyKClcIj5cclxuICBcclxuICA8ZGl2IGNsYXNzPVwibWVuc2FnZW0tY29udGFpbmVyXCI+XHJcbiAgICA8dW5iLW1lbnNhZ2VtIFtpZGVudGlmaWNhZG9yXT1cImlkTWVuc2FnZW1TZXJ2aWNlXCIgY2xhc3M9XCJtZW5zYWdlbS1mb3JtXCI+PC91bmItbWVuc2FnZW0+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJmb3JtLXdyYXBwZXJcIj5cclxuICAgIDxkaXYgKm5nSWY9XCJtb3N0cmFyVGlwb1Blc3NvYVwiIGNsYXNzPVwicmFkaW8tY29udGFpbmVyXCI+XHJcbiAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgYXJpYS1sYWJlbD1cIlRpcG8gZGUgUGVzc29hXCIgWyhuZ01vZGVsKV09XCJwZXNzb2EudGlwb1Blc3NvYVwiICN0aXBvUGVzc29hPVwibmdNb2RlbFwiIG5hbWU9XCJ0aXBvUGVzc29hXCIgKGNoYW5nZSk9XCJvblRpcG9QZXNzb2FDaGFuZ2UoKVwiPlxyXG4gICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uICpuZ0lmPVwiY29uZmlnLnBlc3F1aXNhclBvckNQRlwiIFt2YWx1ZV09XCJ0aXBvUGVzc29hRW51bSgpLkZJU0lDQVwiPlBlc3NvYSBGw61zaWNhPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uICpuZ0lmPVwiY29uZmlnLnBlc3F1aXNhclBvckNOUEpcIiBbdmFsdWVdPVwidGlwb1Blc3NvYUVudW0oKS5KVVJJRElDQVwiPlBlc3NvYSBKdXLDrWRpY2E8L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgICAgPG1hdC1yYWRpby1idXR0b24gKm5nSWY9XCJjb25maWcucGVzcXVpc2FyUG9yRXN0cmFuZ2Vpcm9cIiBbdmFsdWVdPVwidGlwb1Blc3NvYUVudW0oKS5FU1RSQU5HRUlSQVwiPkVzdHJhbmdlaXJvPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICA8L21hdC1yYWRpby1ncm91cD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwZXNzb2EudGlwb1Blc3NvYSA9PT0gdGlwb1Blc3NvYUVudW0oKS5GSVNJQ0FcIj5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5DUEY8L21hdC1sYWJlbD5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBlc3NvYS5jcGZcIiBuYW1lPVwiY3BmXCIgI2NwZj1cIm5nTW9kZWxcIiBbcmVxdWlyZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAoaW5wdXQpPVwiZm9ybWF0YXJDcGYoJGV2ZW50KVwiIG1heGxlbmd0aD1cIjE0XCIgcGxhY2Vob2xkZXI9XCIwMDAuMDAwLjAwMC0wMFwiIC8+XHJcbiAgICAgICAgXHJcbiAgICAgICAgPGJ1dHRvbiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiUGVzcXVpc2FyXCIgW2Rpc2FibGVkXT1cImlzTG9hZGluZ1wiIChjbGljayk9XCJwZXNxdWlzYXIoKVwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmc7IGVsc2UgbG9hZGluZ0ljb25cIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9hZGluZ0ljb24+XHJcbiAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBbZGlhbWV0ZXJdPVwiMjBcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiIGNvbG9yPVwicHJpbWFyeVwiPjwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBlc3NvYS50aXBvUGVzc29hID09PSB0aXBvUGVzc29hRW51bSgpLkpVUklESUNBXCI+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+Q05QSjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBlc3NvYS5jbnBqXCIgbmFtZT1cImNucGpcIiBbcmVxdWlyZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIChpbnB1dCk9XCJmb3JtYXRhckNucGooJGV2ZW50KVwiIG1heGxlbmd0aD1cIjE4XCIgcGxhY2Vob2xkZXI9XCIwMC4wMDAuMDAwLzAwMDAtMDBcIiAvPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJQZXNxdWlzYXJcIiAoY2xpY2spPVwicGVzcXVpc2FyKClcIj5cclxuICAgICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgIFxyXG4gICAgIDwvZGl2PlxyXG48L2Zvcm0+Il19
|