mapa-library-ui 0.25.3 → 0.27.0
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/esm2020/lib/core/js-brasil/index.mjs +16 -0
- package/esm2020/lib/core/js-brasil/src/create.mjs +455 -0
- package/esm2020/lib/core/js-brasil/src/createNumberMask.mjs +115 -0
- package/esm2020/lib/core/js-brasil/src/estados.mjs +34 -0
- package/esm2020/lib/core/js-brasil/src/index.mjs +34 -0
- package/esm2020/lib/core/js-brasil/src/inscricaoestadual.mjs +702 -0
- package/esm2020/lib/core/js-brasil/src/interfaces.mjs +2 -0
- package/esm2020/lib/core/js-brasil/src/iptu.mjs +25 -0
- package/esm2020/lib/core/js-brasil/src/iptu_create.mjs +60 -0
- package/esm2020/lib/core/js-brasil/src/iptu_mask.mjs +38 -0
- package/esm2020/lib/core/js-brasil/src/iptu_validate.mjs +67 -0
- package/esm2020/lib/core/js-brasil/src/mask.mjs +579 -0
- package/esm2020/lib/core/js-brasil/src/name.mjs +371 -0
- package/esm2020/lib/core/js-brasil/src/placa.mjs +162 -0
- package/esm2020/lib/core/js-brasil/src/rg.mjs +63 -0
- package/esm2020/lib/core/js-brasil/src/saude.mjs +62 -0
- package/esm2020/lib/core/js-brasil/src/utils.mjs +304 -0
- package/esm2020/lib/core/js-brasil/src/validate.mjs +627 -0
- package/esm2020/lib/core/pipes/cpf.mjs +17 -0
- package/esm2020/public-api.mjs +3 -1
- package/esm2020/src/lib/components/capability/lib/components/dropdown/src/dropdown.component.mjs +2 -2
- package/esm2020/src/lib/components/chart/lib/components/dropdown/src/dropdown.component.mjs +2 -2
- package/esm2020/src/lib/components/dropdown/lib/components/dropdown/src/dropdown.component.mjs +2 -2
- package/esm2020/src/lib/components/table/lib/components/table/public-api.mjs +2 -1
- package/esm2020/src/lib/components/table/lib/components/table/src/table.module.mjs +10 -3
- package/fesm2015/mapa-library-ui-src-lib-components-capability.mjs +1 -1
- package/fesm2015/mapa-library-ui-src-lib-components-capability.mjs.map +1 -1
- package/fesm2015/mapa-library-ui-src-lib-components-chart.mjs +1 -1
- package/fesm2015/mapa-library-ui-src-lib-components-chart.mjs.map +1 -1
- package/fesm2015/mapa-library-ui-src-lib-components-dropdown.mjs +1 -1
- package/fesm2015/mapa-library-ui-src-lib-components-dropdown.mjs.map +1 -1
- package/fesm2015/mapa-library-ui-src-lib-components-table.mjs +31 -24
- package/fesm2015/mapa-library-ui-src-lib-components-table.mjs.map +1 -1
- package/fesm2015/mapa-library-ui.mjs +3675 -2
- package/fesm2015/mapa-library-ui.mjs.map +1 -1
- package/fesm2020/mapa-library-ui-src-lib-components-capability.mjs +1 -1
- package/fesm2020/mapa-library-ui-src-lib-components-capability.mjs.map +1 -1
- package/fesm2020/mapa-library-ui-src-lib-components-chart.mjs +1 -1
- package/fesm2020/mapa-library-ui-src-lib-components-chart.mjs.map +1 -1
- package/fesm2020/mapa-library-ui-src-lib-components-dropdown.mjs +1 -1
- package/fesm2020/mapa-library-ui-src-lib-components-dropdown.mjs.map +1 -1
- package/fesm2020/mapa-library-ui-src-lib-components-table.mjs +31 -24
- package/fesm2020/mapa-library-ui-src-lib-components-table.mjs.map +1 -1
- package/fesm2020/mapa-library-ui.mjs +3682 -2
- package/fesm2020/mapa-library-ui.mjs.map +1 -1
- package/lib/core/js-brasil/index.d.ts +15 -0
- package/lib/core/js-brasil/src/create.d.ts +37 -0
- package/lib/core/js-brasil/src/createNumberMask.d.ts +13 -0
- package/lib/core/js-brasil/src/estados.d.ts +7 -0
- package/lib/core/js-brasil/src/index.d.ts +34 -0
- package/lib/core/js-brasil/src/inscricaoestadual.d.ts +7 -0
- package/lib/core/js-brasil/src/interfaces.d.ts +51 -0
- package/lib/core/js-brasil/src/iptu.d.ts +3 -0
- package/lib/core/js-brasil/src/iptu_create.d.ts +5 -0
- package/lib/core/js-brasil/src/iptu_mask.d.ts +2 -0
- package/lib/core/js-brasil/src/iptu_validate.d.ts +10 -0
- package/lib/core/js-brasil/src/mask.d.ts +53 -0
- package/lib/core/js-brasil/src/name.d.ts +9 -0
- package/lib/core/js-brasil/src/placa.d.ts +6 -0
- package/lib/core/js-brasil/src/rg.d.ts +5 -0
- package/lib/core/js-brasil/src/saude.d.ts +84 -0
- package/lib/core/js-brasil/src/utils.d.ts +71 -0
- package/lib/core/js-brasil/src/validate.d.ts +90 -0
- package/lib/core/pipes/cpf.d.ts +7 -0
- package/mapa-library-ui-0.27.0.tgz +0 -0
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
- package/src/lib/components/table/lib/components/table/public-api.d.ts +1 -0
- package/mapa-library-ui-0.25.3.tgz +0 -0
|
@@ -0,0 +1,702 @@
|
|
|
1
|
+
import { allNumbersAreSame } from './utils';
|
|
2
|
+
/**
|
|
3
|
+
* BASED ON https://github.com/gammasoft/ie/
|
|
4
|
+
*/
|
|
5
|
+
export const generateInscricaoEstadual = {
|
|
6
|
+
ac: function (valor) {
|
|
7
|
+
if (tamanhoNaoE(valor, 13)) {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
if (naoComecaCom(valor, '01')) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
const base = primeiros(valor, 11);
|
|
14
|
+
const primeiroDigito = substracaoPor11SeMaiorQue2CasoContrario0(mod(base));
|
|
15
|
+
const segundoDigito = substracaoPor11SeMaiorQue2CasoContrario0(mod(base + primeiroDigito));
|
|
16
|
+
return base + primeiroDigito + segundoDigito;
|
|
17
|
+
},
|
|
18
|
+
am: function (valor) {
|
|
19
|
+
if (tamanhoNaoE(valor)) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
return calculoTrivialGenerate(valor);
|
|
23
|
+
},
|
|
24
|
+
al: function (valor) {
|
|
25
|
+
if (tamanhoNaoE(valor)) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
if (naoComecaCom(valor, '24')) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
// FORMAÇÃO: 24XNNNNND, sendo:
|
|
32
|
+
// 24 – Código do Estado
|
|
33
|
+
// X – Tipo de empresa (0-Normal, 3-Produtor Rural, 5-Substituta, 7- Micro-Empresa Ambulante, 8-Micro-Empresa)
|
|
34
|
+
// NNNNN – Número da empresa
|
|
35
|
+
// D – Dígito de verificação calculado pelo Módulo11, pêsos 2 à 9 da direita para a esquerda, exceto D
|
|
36
|
+
// Exemplo: Número 2 4 0 0 0 0 0 4 D
|
|
37
|
+
// 2 4 X N N N N N D
|
|
38
|
+
// Fonte: http://www.sintegra.gov.br/Cad_Estados/cad_AL.html
|
|
39
|
+
const base = primeiros(valor);
|
|
40
|
+
// Pesos 9 8 7 6 5 4 3 2
|
|
41
|
+
// SOMA = (2 * 4) + (3 * 0) + (4 * 0) + (5 * 0) + (6 * 0) + (7 * 0) + (8 * 4) + (9 * 2) = 58
|
|
42
|
+
const soma = base.split('').reduce((acc, v, i) => {
|
|
43
|
+
return acc + (9 - i) * Number(v);
|
|
44
|
+
}, 0);
|
|
45
|
+
// PRODUTO = 58 * 10 = 580
|
|
46
|
+
const produto = soma * 10;
|
|
47
|
+
// RESTO = 580 – INTEIRO(580 / 11)*11 = 580 – (52*11) = 8
|
|
48
|
+
const resto = produto - Math.floor(produto / 11) * 11;
|
|
49
|
+
// DÍGITO = 8 - Caso RESTO seja igual a 10 o DÍGITO será 0 (zero)
|
|
50
|
+
const digito = resto === 10 ? 0 : resto;
|
|
51
|
+
return base + digito;
|
|
52
|
+
},
|
|
53
|
+
ap: function (valor) {
|
|
54
|
+
if (tamanhoNaoE(valor)) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
if (naoComecaCom(valor, '03')) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
const base = primeiros(valor);
|
|
61
|
+
let p, d;
|
|
62
|
+
if (entre(base, 3000001, 3017000)) {
|
|
63
|
+
p = 5;
|
|
64
|
+
d = 0;
|
|
65
|
+
}
|
|
66
|
+
else if (entre(base, 3017001, 3019022)) {
|
|
67
|
+
p = 9;
|
|
68
|
+
d = 1;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
p = 0;
|
|
72
|
+
d = 0;
|
|
73
|
+
}
|
|
74
|
+
const resto = mod(p + base, [2, 3, 4, 5, 6, 7, 8, 9, 1]);
|
|
75
|
+
let digito;
|
|
76
|
+
if (resto === 1) {
|
|
77
|
+
digito = 0;
|
|
78
|
+
}
|
|
79
|
+
else if (resto === 0) {
|
|
80
|
+
digito = d;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
digito = 11 - resto;
|
|
84
|
+
}
|
|
85
|
+
return base + digito;
|
|
86
|
+
},
|
|
87
|
+
ba: function (valor) {
|
|
88
|
+
if (tamanhoNaoE(valor, 8) && tamanhoNaoE(valor)) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
const base = primeiros(valor, valor.length - 2);
|
|
92
|
+
let primeiroDigito, segundoDigito;
|
|
93
|
+
const segundoMultiplicador = serie(2, 7);
|
|
94
|
+
const primeiroMultiplicador = serie(2, 8);
|
|
95
|
+
let primeiroResto, segundoResto;
|
|
96
|
+
let digitoComparacao = valor.substring(0, 1);
|
|
97
|
+
if (tamanhoE(valor, 9)) {
|
|
98
|
+
segundoMultiplicador.push(8);
|
|
99
|
+
primeiroMultiplicador.push(9);
|
|
100
|
+
digitoComparacao = valor.substring(1, 2);
|
|
101
|
+
}
|
|
102
|
+
if ('0123458'.split('').indexOf(digitoComparacao) !== -1) {
|
|
103
|
+
segundoResto = mod(base, segundoMultiplicador, 10);
|
|
104
|
+
segundoDigito = segundoResto === 0 ? 0 : 10 - segundoResto;
|
|
105
|
+
primeiroResto = mod(base + segundoDigito, primeiroMultiplicador, 10);
|
|
106
|
+
primeiroDigito = primeiroResto === 0 ? 0 : 10 - primeiroResto;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
segundoResto = mod(base, segundoMultiplicador);
|
|
110
|
+
segundoDigito = substracaoPor11SeMaiorQue2CasoContrario0(segundoResto);
|
|
111
|
+
primeiroResto = mod(base + segundoDigito, primeiroMultiplicador);
|
|
112
|
+
primeiroDigito = substracaoPor11SeMaiorQue2CasoContrario0(primeiroResto);
|
|
113
|
+
}
|
|
114
|
+
return base + primeiroDigito + segundoDigito;
|
|
115
|
+
},
|
|
116
|
+
ce: function (valor) {
|
|
117
|
+
if (tamanhoNaoE(valor)) {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
return calculoTrivialGenerate(valor);
|
|
121
|
+
},
|
|
122
|
+
df: function (valor) {
|
|
123
|
+
if (tamanhoNaoE(valor, 13)) {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
if (naoComecaCom(valor, '07') && naoComecaCom(valor, '08')) {
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
const base = primeiros(valor, 11);
|
|
130
|
+
const primeiro = substracaoPor11SeMaiorQue2CasoContrario0(mod(base));
|
|
131
|
+
const segundo = substracaoPor11SeMaiorQue2CasoContrario0(mod(base + primeiro));
|
|
132
|
+
return base + primeiro + segundo;
|
|
133
|
+
},
|
|
134
|
+
es: function (valor) {
|
|
135
|
+
return calculoTrivialGenerate(valor);
|
|
136
|
+
},
|
|
137
|
+
go: function (valor) {
|
|
138
|
+
if (tamanhoNaoE(valor)) {
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
// Verifica os digitos iniciais do estado
|
|
142
|
+
// Fonte: https://appasp.economia.go.gov.br/Legislacao/arquivos/Secretario/IN/IN_1535_2022.htm
|
|
143
|
+
if (['10', '11', '15', '20'].indexOf(valor.substring(0, 2)) === -1) {
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
const base = primeiros(valor);
|
|
147
|
+
if (base === '11094402') {
|
|
148
|
+
return valor.substr(8) === '1' || valor.substr(8) === '0';
|
|
149
|
+
}
|
|
150
|
+
const resto = mod(base);
|
|
151
|
+
let digito;
|
|
152
|
+
if (resto === 0) {
|
|
153
|
+
digito = 0;
|
|
154
|
+
}
|
|
155
|
+
else if (resto === 1) {
|
|
156
|
+
if (entre(base, 10103105, 10119997)) {
|
|
157
|
+
digito = 1;
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
digito = 0;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
digito = 11 - resto;
|
|
165
|
+
}
|
|
166
|
+
return base + digito;
|
|
167
|
+
},
|
|
168
|
+
ma: function (valor) {
|
|
169
|
+
if (tamanhoNaoE(valor)) {
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
if (naoComecaCom(valor, '12')) {
|
|
173
|
+
return false;
|
|
174
|
+
}
|
|
175
|
+
return calculoTrivialGenerate(valor);
|
|
176
|
+
},
|
|
177
|
+
mg: function (valor) {
|
|
178
|
+
if (tamanhoNaoE(valor, 13)) {
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
const base = primeiros(valor, 11);
|
|
182
|
+
const baseComZero = valor.substring(0, 3) + '0' + valor.substring(3, 11);
|
|
183
|
+
let i = 0;
|
|
184
|
+
const produtorioLiteral = baseComZero.split('').reduceRight(function (anterior, atual) {
|
|
185
|
+
if (i > [2, 1].length - 1) {
|
|
186
|
+
i = 0;
|
|
187
|
+
}
|
|
188
|
+
return ([2, 1][i++] * parseInt(atual, 10)).toString() + anterior.toString();
|
|
189
|
+
}, '').split('').reduce(function (anterior, atual) {
|
|
190
|
+
return anterior + parseInt(atual, 10);
|
|
191
|
+
}, 0);
|
|
192
|
+
let primeiro = ((Math.floor(produtorioLiteral / 10) + 1) * 10) - produtorioLiteral;
|
|
193
|
+
if (primeiro === 10) {
|
|
194
|
+
primeiro = 0;
|
|
195
|
+
}
|
|
196
|
+
const segundo = substracaoPor11SeMaiorQue2CasoContrario0(mod(base + primeiro, serie(2, 11)));
|
|
197
|
+
return base + primeiro + segundo;
|
|
198
|
+
},
|
|
199
|
+
ms: function (valor) {
|
|
200
|
+
if (naoComecaCom(valor, '28')) {
|
|
201
|
+
return false;
|
|
202
|
+
}
|
|
203
|
+
return calculoTrivialGenerate(valor);
|
|
204
|
+
},
|
|
205
|
+
mt: function (valor) {
|
|
206
|
+
if (tamanhoNaoE(valor, 11) && tamanhoNaoE(valor)) {
|
|
207
|
+
return false;
|
|
208
|
+
}
|
|
209
|
+
const base = tamanhoE(valor, 11) ? valor.substring(0, 10) : primeiros(valor);
|
|
210
|
+
return calculoTrivialGenerate(valor, base, true);
|
|
211
|
+
},
|
|
212
|
+
pa: function (valor) {
|
|
213
|
+
if (tamanhoNaoE(valor)) {
|
|
214
|
+
return false;
|
|
215
|
+
}
|
|
216
|
+
if (naoComecaCom(valor, '15') && naoComecaCom(valor, '75')) {
|
|
217
|
+
return false;
|
|
218
|
+
}
|
|
219
|
+
return calculoTrivialGenerate(valor);
|
|
220
|
+
},
|
|
221
|
+
pb: function (valor) {
|
|
222
|
+
if (tamanhoNaoE(valor)) {
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
return calculoTrivialGenerate(valor);
|
|
226
|
+
},
|
|
227
|
+
pe: function (valor) {
|
|
228
|
+
const base = valor.substring(0, valor.length - 2);
|
|
229
|
+
const restoPrimeiro = mod(base);
|
|
230
|
+
const primeiro = 11 - restoPrimeiro >= 10 ? 0 : 11 - restoPrimeiro;
|
|
231
|
+
const restoSegundo = mod(base + primeiro);
|
|
232
|
+
const segundo = 11 - restoSegundo >= 10 ? 0 : 11 - restoSegundo;
|
|
233
|
+
return base + primeiro + segundo;
|
|
234
|
+
},
|
|
235
|
+
pi: function (valor) {
|
|
236
|
+
return calculoTrivialGenerate(valor);
|
|
237
|
+
},
|
|
238
|
+
pr: function (valor) {
|
|
239
|
+
if (tamanhoNaoE(valor, 10)) {
|
|
240
|
+
return false;
|
|
241
|
+
}
|
|
242
|
+
const base = primeiros(valor);
|
|
243
|
+
const restoPrimeiro = mod(base, serie(2, 7));
|
|
244
|
+
const primeiro = 11 - restoPrimeiro >= 10 ? 0 : 11 - restoPrimeiro;
|
|
245
|
+
const restoSegundo = mod(base + primeiro, serie(2, 7));
|
|
246
|
+
const segundo = 11 - restoSegundo >= 10 ? 0 : 11 - restoSegundo;
|
|
247
|
+
return base + primeiro + segundo;
|
|
248
|
+
},
|
|
249
|
+
rj: function (valor) {
|
|
250
|
+
if (tamanhoNaoE(valor, 8)) {
|
|
251
|
+
return false;
|
|
252
|
+
}
|
|
253
|
+
const base = primeiros(valor, 7);
|
|
254
|
+
const digito = substracaoPor11SeMaiorQue2CasoContrario0(mod(base, serie(2, 7)));
|
|
255
|
+
return base + digito;
|
|
256
|
+
},
|
|
257
|
+
rn: function (valor) {
|
|
258
|
+
if (tamanhoNaoE(valor) && tamanhoNaoE(valor, 10)) {
|
|
259
|
+
return false;
|
|
260
|
+
}
|
|
261
|
+
if (naoComecaCom(valor, '20')) {
|
|
262
|
+
return false;
|
|
263
|
+
}
|
|
264
|
+
const base = valor.substring(0, valor.length - 1);
|
|
265
|
+
const multiplicadores = serie(2, 9);
|
|
266
|
+
if (tamanhoE(valor, 10)) {
|
|
267
|
+
multiplicadores.push(10);
|
|
268
|
+
}
|
|
269
|
+
const resto = (mod(base, multiplicadores) * 10) % 11;
|
|
270
|
+
const digito = resto === 10 ? 0 : resto;
|
|
271
|
+
return base + digito;
|
|
272
|
+
},
|
|
273
|
+
ro: function (valor) {
|
|
274
|
+
let base, digito, resultadoMod;
|
|
275
|
+
if (tamanhoE(valor, 9)) {
|
|
276
|
+
base = valor.substring(3, 8);
|
|
277
|
+
digito = substracaoPor11SeMaiorQue2CasoContrario0(mod(base));
|
|
278
|
+
return valor === valor.substring(0, 3) + base + digito;
|
|
279
|
+
}
|
|
280
|
+
else if (tamanhoE(valor, 14)) {
|
|
281
|
+
base = primeiros(valor, 13);
|
|
282
|
+
resultadoMod = mod(base);
|
|
283
|
+
digito = resultadoMod <= 1 ? 1 : 11 - resultadoMod;
|
|
284
|
+
return base + digito;
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
return false;
|
|
288
|
+
}
|
|
289
|
+
},
|
|
290
|
+
rr: function (valor) {
|
|
291
|
+
if (tamanhoNaoE(valor)) {
|
|
292
|
+
return false;
|
|
293
|
+
}
|
|
294
|
+
if (naoComecaCom(valor, '24')) {
|
|
295
|
+
return false;
|
|
296
|
+
}
|
|
297
|
+
const base = primeiros(valor);
|
|
298
|
+
const digito = mod(base, [8, 7, 6, 5, 4, 3, 2, 1], 9);
|
|
299
|
+
return base + digito;
|
|
300
|
+
},
|
|
301
|
+
rs: function (valor) {
|
|
302
|
+
if (tamanhoNaoE(valor, 10)) {
|
|
303
|
+
return false;
|
|
304
|
+
}
|
|
305
|
+
const base = primeiros(valor, 9);
|
|
306
|
+
return calculoTrivialGenerate(valor, base, true);
|
|
307
|
+
},
|
|
308
|
+
sc: function (valor) {
|
|
309
|
+
return calculoTrivialGenerate(valor);
|
|
310
|
+
},
|
|
311
|
+
se: function (valor) {
|
|
312
|
+
if (tamanhoNaoE(valor)) {
|
|
313
|
+
return false;
|
|
314
|
+
}
|
|
315
|
+
return calculoTrivialGenerate(valor);
|
|
316
|
+
},
|
|
317
|
+
sp: function (valor) {
|
|
318
|
+
valor = valor.toUpperCase();
|
|
319
|
+
let segundaBase;
|
|
320
|
+
if (valor.substr(0, 1) === 'P') {
|
|
321
|
+
if (tamanhoNaoE(valor, 13)) {
|
|
322
|
+
return false;
|
|
323
|
+
}
|
|
324
|
+
const base = valor.substring(1, 9);
|
|
325
|
+
segundaBase = valor.substring(10, 13);
|
|
326
|
+
const resto = mod(base, [10, 8, 7, 6, 5, 4, 3, 1]).toString();
|
|
327
|
+
const digito = resto.length > 1 ? resto[1] : resto[0];
|
|
328
|
+
return 'P' + base + digito + segundaBase;
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
if (tamanhoNaoE(valor, 12)) {
|
|
332
|
+
return false;
|
|
333
|
+
}
|
|
334
|
+
const primeiraBase = primeiros(valor);
|
|
335
|
+
segundaBase = valor.substring(9, 11);
|
|
336
|
+
const primeiroResto = mod(primeiraBase, [10, 8, 7, 6, 5, 4, 3, 1]).toString();
|
|
337
|
+
const primeiro = primeiroResto.length > 1 ? primeiroResto[1] : primeiroResto[0];
|
|
338
|
+
const segundoResto = mod(primeiraBase + primeiro + segundaBase, serie(2, 10)).toString();
|
|
339
|
+
const segundo = segundoResto.length > 1 ? segundoResto[1] : segundoResto[0];
|
|
340
|
+
return primeiraBase + primeiro + segundaBase + segundo;
|
|
341
|
+
}
|
|
342
|
+
},
|
|
343
|
+
to: function (valor) {
|
|
344
|
+
if (tamanhoNaoE(valor) && tamanhoNaoE(valor, 11)) {
|
|
345
|
+
return false;
|
|
346
|
+
}
|
|
347
|
+
let base;
|
|
348
|
+
if (tamanhoE(valor, 11)) {
|
|
349
|
+
if (['01', '02', '03', '99'].indexOf(valor.substring(2, 4)) === -1) {
|
|
350
|
+
return false;
|
|
351
|
+
}
|
|
352
|
+
base = valor.substring(0, 2) + valor.substring(4, 10);
|
|
353
|
+
}
|
|
354
|
+
else {
|
|
355
|
+
base = primeiros(valor);
|
|
356
|
+
}
|
|
357
|
+
const digito = substracaoPor11SeMaiorQue2CasoContrario0(mod(base));
|
|
358
|
+
return valor.substring(0, valor.length - 1) + digito;
|
|
359
|
+
},
|
|
360
|
+
};
|
|
361
|
+
const funcoes = {
|
|
362
|
+
ac: function (valor) {
|
|
363
|
+
return valor === generateInscricaoEstadual['ac'](valor);
|
|
364
|
+
},
|
|
365
|
+
am: function (valor) {
|
|
366
|
+
return valor === generateInscricaoEstadual['am'](valor);
|
|
367
|
+
},
|
|
368
|
+
al: function (valor) {
|
|
369
|
+
return valor === generateInscricaoEstadual['al'](valor);
|
|
370
|
+
},
|
|
371
|
+
ap: function (valor) {
|
|
372
|
+
return valor === generateInscricaoEstadual['ap'](valor);
|
|
373
|
+
},
|
|
374
|
+
ba: function (valor) {
|
|
375
|
+
return valor === generateInscricaoEstadual['ba'](valor);
|
|
376
|
+
},
|
|
377
|
+
ce: function (valor) {
|
|
378
|
+
return valor === generateInscricaoEstadual['ce'](valor);
|
|
379
|
+
},
|
|
380
|
+
df: function (valor) {
|
|
381
|
+
return valor === generateInscricaoEstadual['df'](valor);
|
|
382
|
+
},
|
|
383
|
+
es: function (valor) {
|
|
384
|
+
return valor === generateInscricaoEstadual['es'](valor);
|
|
385
|
+
},
|
|
386
|
+
go: function (valor) {
|
|
387
|
+
return valor === generateInscricaoEstadual['go'](valor);
|
|
388
|
+
},
|
|
389
|
+
ma: function (valor) {
|
|
390
|
+
return valor === generateInscricaoEstadual['ma'](valor);
|
|
391
|
+
},
|
|
392
|
+
mg: function (valor) {
|
|
393
|
+
return valor === generateInscricaoEstadual['mg'](valor);
|
|
394
|
+
},
|
|
395
|
+
ms: function (valor) {
|
|
396
|
+
return valor === generateInscricaoEstadual['ms'](valor);
|
|
397
|
+
},
|
|
398
|
+
mt: function (valor) {
|
|
399
|
+
return valor === generateInscricaoEstadual['mt'](valor);
|
|
400
|
+
},
|
|
401
|
+
pa: function (valor) {
|
|
402
|
+
return valor === generateInscricaoEstadual['pa'](valor);
|
|
403
|
+
},
|
|
404
|
+
pb: function (valor) {
|
|
405
|
+
return valor === generateInscricaoEstadual['pb'](valor);
|
|
406
|
+
},
|
|
407
|
+
pe: function (valor) {
|
|
408
|
+
return valor === generateInscricaoEstadual['pe'](valor);
|
|
409
|
+
},
|
|
410
|
+
pi: function (valor) {
|
|
411
|
+
return valor === generateInscricaoEstadual['pi'](valor);
|
|
412
|
+
},
|
|
413
|
+
pr: function (valor) {
|
|
414
|
+
return valor === generateInscricaoEstadual['pr'](valor);
|
|
415
|
+
},
|
|
416
|
+
rj: function (valor) {
|
|
417
|
+
return valor === generateInscricaoEstadual['rj'](valor);
|
|
418
|
+
},
|
|
419
|
+
rn: function (valor) {
|
|
420
|
+
return valor === generateInscricaoEstadual['rn'](valor);
|
|
421
|
+
},
|
|
422
|
+
ro: function (valor) {
|
|
423
|
+
return valor === generateInscricaoEstadual['ro'](valor);
|
|
424
|
+
},
|
|
425
|
+
rr: function (valor) {
|
|
426
|
+
return valor === generateInscricaoEstadual['rr'](valor);
|
|
427
|
+
},
|
|
428
|
+
rs: function (valor) {
|
|
429
|
+
return valor === generateInscricaoEstadual['rs'](valor);
|
|
430
|
+
},
|
|
431
|
+
sc: function (valor) {
|
|
432
|
+
return valor === generateInscricaoEstadual['sc'](valor);
|
|
433
|
+
},
|
|
434
|
+
se: function (valor) {
|
|
435
|
+
return valor === generateInscricaoEstadual['se'](valor);
|
|
436
|
+
},
|
|
437
|
+
sp: function (valor) {
|
|
438
|
+
return valor === generateInscricaoEstadual['sp'](valor);
|
|
439
|
+
},
|
|
440
|
+
to: function (valor) {
|
|
441
|
+
return valor === generateInscricaoEstadual['to'](valor);
|
|
442
|
+
},
|
|
443
|
+
};
|
|
444
|
+
export function validate_inscricaoestadual(ie, estado) {
|
|
445
|
+
if (eIndefinido(estado) || estado === null) {
|
|
446
|
+
estado = '';
|
|
447
|
+
}
|
|
448
|
+
estado = estado.toLowerCase();
|
|
449
|
+
if (estado !== '' && !(estado in funcoes)) {
|
|
450
|
+
return new Error('estado não é válido');
|
|
451
|
+
}
|
|
452
|
+
if (eIndefinido(ie)) {
|
|
453
|
+
return new Error('ie deve ser fornecida');
|
|
454
|
+
}
|
|
455
|
+
if (Array.isArray(ie)) {
|
|
456
|
+
let retorno = true;
|
|
457
|
+
ie.forEach(function (i) {
|
|
458
|
+
if (!validate_inscricaoestadual(i, estado)) {
|
|
459
|
+
retorno = false;
|
|
460
|
+
}
|
|
461
|
+
});
|
|
462
|
+
return retorno;
|
|
463
|
+
}
|
|
464
|
+
if (typeof ie !== 'string') {
|
|
465
|
+
return new Error('ie deve ser string ou array de strings');
|
|
466
|
+
}
|
|
467
|
+
if (!allNumbersAreSame(ie)) {
|
|
468
|
+
return new Error('ie com todos dígitos iguais');
|
|
469
|
+
}
|
|
470
|
+
if (ie.match(/^ISENTO$/i)) {
|
|
471
|
+
return true;
|
|
472
|
+
}
|
|
473
|
+
ie = ie.replace(/[\.|\-|\/|\s]/g, '');
|
|
474
|
+
if (estado === '') {
|
|
475
|
+
if (lookup(ie)) {
|
|
476
|
+
return true;
|
|
477
|
+
}
|
|
478
|
+
else {
|
|
479
|
+
return false;
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
if (/^\d+$/.test(ie) || estado === 'sp' || funcoes[estado]) {
|
|
483
|
+
return funcoes[estado](ie);
|
|
484
|
+
}
|
|
485
|
+
return false;
|
|
486
|
+
}
|
|
487
|
+
export const MASKSIE = {
|
|
488
|
+
ac: {
|
|
489
|
+
text: '01.004.823/001-12',
|
|
490
|
+
textMask: [/\d/, /\d/, '.', /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '/', /\d/, /\d/, /\d/, '-', /\d/, /\d/]
|
|
491
|
+
},
|
|
492
|
+
al: {
|
|
493
|
+
text: '240000048',
|
|
494
|
+
textMask: [/\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/]
|
|
495
|
+
},
|
|
496
|
+
am: {
|
|
497
|
+
text: '04.145.871-0',
|
|
498
|
+
textMask: [/\d/, /\d/, '.', /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '-', /\d/]
|
|
499
|
+
},
|
|
500
|
+
ap: {
|
|
501
|
+
text: '240000048',
|
|
502
|
+
textMask: [/\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/]
|
|
503
|
+
},
|
|
504
|
+
ba: {
|
|
505
|
+
text: '1234567-48',
|
|
506
|
+
textMask: [/\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, '-', /\d/, /\d/],
|
|
507
|
+
textMaskFunction: function mask(userInput) {
|
|
508
|
+
const numberLength = getSizeNumbers(userInput);
|
|
509
|
+
if (!userInput || numberLength > 8) {
|
|
510
|
+
return [/\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, '-', /\d/, /\d/];
|
|
511
|
+
}
|
|
512
|
+
else {
|
|
513
|
+
return [/\d/, /\d/, /\d/, /\d/, /\d/, /\d/, '-', /\d/, /\d/];
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
},
|
|
517
|
+
ce: {
|
|
518
|
+
text: '06.000001-5',
|
|
519
|
+
textMask: [/\d/, /\d/, '.', /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, '-', /\d/]
|
|
520
|
+
},
|
|
521
|
+
df: {
|
|
522
|
+
text: '06 000001 123-55',
|
|
523
|
+
textMask: [/\d/, /\d/, ' ', /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/]
|
|
524
|
+
},
|
|
525
|
+
es: {
|
|
526
|
+
text: '082.560.67-6',
|
|
527
|
+
textMask: [/\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '.', /\d/, /\d/, '-', /\d/]
|
|
528
|
+
},
|
|
529
|
+
go: {
|
|
530
|
+
text: '06.000.001-5',
|
|
531
|
+
textMask: [/\d/, /\d/, '.', /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '-', /\d/]
|
|
532
|
+
},
|
|
533
|
+
ma: {
|
|
534
|
+
text: '12.104.376-2',
|
|
535
|
+
textMask: [/\d/, /\d/, '.', /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '-', /\d/, /\d/]
|
|
536
|
+
},
|
|
537
|
+
mg: {
|
|
538
|
+
text: '001.819.263/0048',
|
|
539
|
+
textMask: [/\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/]
|
|
540
|
+
},
|
|
541
|
+
ms: {
|
|
542
|
+
text: '001819263',
|
|
543
|
+
textMask: [/\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/]
|
|
544
|
+
},
|
|
545
|
+
mt: {
|
|
546
|
+
text: '0018192630-1',
|
|
547
|
+
textMask: [/\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, '-', /\d/]
|
|
548
|
+
},
|
|
549
|
+
pa: {
|
|
550
|
+
text: '06-000001-5',
|
|
551
|
+
textMask: [/\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, '-', /\d/]
|
|
552
|
+
},
|
|
553
|
+
pb: {
|
|
554
|
+
text: '06000001-5',
|
|
555
|
+
textMask: [/\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, '-', /\d/]
|
|
556
|
+
},
|
|
557
|
+
pe: {
|
|
558
|
+
text: '0192310-24',
|
|
559
|
+
textMask: [/\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, '-', /\d/, /\d/]
|
|
560
|
+
},
|
|
561
|
+
pi: {
|
|
562
|
+
text: '19.301.656-7',
|
|
563
|
+
textMask: [/\d/, /\d/, '.', /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '-', /\d/]
|
|
564
|
+
},
|
|
565
|
+
pr: {
|
|
566
|
+
text: '19301656-78',
|
|
567
|
+
textMask: [/\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, '-', /\d/, /\d/]
|
|
568
|
+
},
|
|
569
|
+
rj: {
|
|
570
|
+
text: '20.040.04-1',
|
|
571
|
+
textMask: [/\d/, /\d/, '.', /\d/, /\d/, /\d/, '.', /\d/, /\d/, '-', /\d/]
|
|
572
|
+
},
|
|
573
|
+
rn: {
|
|
574
|
+
text: '20.040.040-1',
|
|
575
|
+
textMask: [/\d/, /\d/, '.', /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '-', /\d/],
|
|
576
|
+
textMaskFunction: function mask(userInput) {
|
|
577
|
+
const numberLength = getSizeNumbers(userInput);
|
|
578
|
+
if (!userInput || numberLength > 9) {
|
|
579
|
+
return [/\d/, /\d/, '.', /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '-', /\d/, /\d/];
|
|
580
|
+
}
|
|
581
|
+
else {
|
|
582
|
+
return [/\d/, /\d/, '.', /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '-', /\d/];
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
},
|
|
586
|
+
ro: {
|
|
587
|
+
text: '101.62521-3',
|
|
588
|
+
textMask: [/\d/, /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/]
|
|
589
|
+
},
|
|
590
|
+
rr: {
|
|
591
|
+
text: '24006628-1',
|
|
592
|
+
textMask: [/\d/, /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/]
|
|
593
|
+
},
|
|
594
|
+
rs: {
|
|
595
|
+
text: '024/0440013',
|
|
596
|
+
textMask: [/\d/, /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/]
|
|
597
|
+
},
|
|
598
|
+
sc: {
|
|
599
|
+
text: '271.234.563',
|
|
600
|
+
textMask: [/\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/]
|
|
601
|
+
},
|
|
602
|
+
se: {
|
|
603
|
+
text: '27123456-3',
|
|
604
|
+
textMask: [/\d/, /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/]
|
|
605
|
+
},
|
|
606
|
+
sp: {
|
|
607
|
+
text: '114.814.878.119',
|
|
608
|
+
textMask: [/\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/]
|
|
609
|
+
},
|
|
610
|
+
to: {
|
|
611
|
+
text: '11 81 4878119',
|
|
612
|
+
textMask: [/\d/, /\d/, ' ', /\d/, /\d/, ' ', /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/]
|
|
613
|
+
},
|
|
614
|
+
};
|
|
615
|
+
function getSizeNumbers(userInput) {
|
|
616
|
+
const numbers = userInput.match(/\d/g);
|
|
617
|
+
let numberLength = 0;
|
|
618
|
+
if (numbers) {
|
|
619
|
+
numberLength = numbers.join('').length;
|
|
620
|
+
}
|
|
621
|
+
return numberLength;
|
|
622
|
+
}
|
|
623
|
+
function eIndefinido(objeto) {
|
|
624
|
+
return typeof objeto === typeof undefined;
|
|
625
|
+
}
|
|
626
|
+
function tamanhoNaoE(string, tamanho = 9) {
|
|
627
|
+
if (eIndefinido(tamanho)) {
|
|
628
|
+
tamanho = 9;
|
|
629
|
+
}
|
|
630
|
+
return string.length !== tamanho;
|
|
631
|
+
}
|
|
632
|
+
function tamanhoE(string, tamanho) {
|
|
633
|
+
return !tamanhoNaoE(string, tamanho);
|
|
634
|
+
}
|
|
635
|
+
function serie(de, ate) {
|
|
636
|
+
const resultado = [];
|
|
637
|
+
while (de <= ate) {
|
|
638
|
+
resultado.push(de++);
|
|
639
|
+
}
|
|
640
|
+
return resultado;
|
|
641
|
+
}
|
|
642
|
+
function primeiros(string, quantidade = 8) {
|
|
643
|
+
if (eIndefinido(quantidade)) {
|
|
644
|
+
quantidade = 8;
|
|
645
|
+
}
|
|
646
|
+
return string.substring(0, quantidade);
|
|
647
|
+
}
|
|
648
|
+
function substracaoPor11SeMaiorQue2CasoContrario0(valor) {
|
|
649
|
+
return valor < 2 ? 0 : 11 - valor;
|
|
650
|
+
}
|
|
651
|
+
function mod(valor, multiplicadores = serie(2, 9), divisor = 11) {
|
|
652
|
+
if (eIndefinido(divisor)) {
|
|
653
|
+
divisor = 11;
|
|
654
|
+
}
|
|
655
|
+
if (eIndefinido(multiplicadores)) {
|
|
656
|
+
multiplicadores = serie(2, 9);
|
|
657
|
+
}
|
|
658
|
+
let i = 0;
|
|
659
|
+
return valor.split('').reduceRight(function (anterior, atual) {
|
|
660
|
+
if (i > multiplicadores.length - 1) {
|
|
661
|
+
i = 0;
|
|
662
|
+
}
|
|
663
|
+
return (multiplicadores[i++] * parseInt(atual, 10)) + anterior;
|
|
664
|
+
}, 0) % divisor;
|
|
665
|
+
}
|
|
666
|
+
function calculoTrivialGenerate(valor, base = null, validarTamanho = false) {
|
|
667
|
+
if (!validarTamanho && tamanhoNaoE(valor)) {
|
|
668
|
+
return false;
|
|
669
|
+
}
|
|
670
|
+
if (eIndefinido(base)) {
|
|
671
|
+
base = primeiros(valor);
|
|
672
|
+
}
|
|
673
|
+
if (!base) {
|
|
674
|
+
base = primeiros(valor);
|
|
675
|
+
}
|
|
676
|
+
const digito = substracaoPor11SeMaiorQue2CasoContrario0(mod(base));
|
|
677
|
+
return base + digito;
|
|
678
|
+
}
|
|
679
|
+
function naoComecaCom(string, valor) {
|
|
680
|
+
return string.substring(0, valor.length) !== valor;
|
|
681
|
+
}
|
|
682
|
+
function entre(valor, limiteInferior, limiteSuperior) {
|
|
683
|
+
if (typeof valor === 'string') {
|
|
684
|
+
valor = parseInt(valor, 10);
|
|
685
|
+
}
|
|
686
|
+
return valor >= limiteInferior && valor <= limiteSuperior;
|
|
687
|
+
}
|
|
688
|
+
function lookup(ie) {
|
|
689
|
+
const resultado = [];
|
|
690
|
+
for (const estado in funcoes) {
|
|
691
|
+
if (funcoes[estado](ie)) {
|
|
692
|
+
resultado.push(estado);
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
if (tamanhoE(resultado, 0)) {
|
|
696
|
+
return false;
|
|
697
|
+
}
|
|
698
|
+
else {
|
|
699
|
+
return resultado;
|
|
700
|
+
}
|
|
701
|
+
}
|
|
702
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zY3JpY2FvZXN0YWR1YWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXBhLWxpYnJhcnktdWkvc3JjL2xpYi9jb3JlL2pzLWJyYXNpbC9zcmMvaW5zY3JpY2FvZXN0YWR1YWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRzVDOztHQUVHO0FBR0gsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQXdCO0lBQzVELEVBQUUsRUFBRSxVQUFVLEtBQVU7UUFDdEIsSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQzFCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUFJLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDN0IsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFbEMsTUFBTSxjQUFjLEdBQUcsd0NBQXdDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDM0UsTUFBTSxhQUFhLEdBQUcsd0NBQXdDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBRTNGLE9BQU8sSUFBSSxHQUFHLGNBQWMsR0FBRyxhQUFhLENBQUM7SUFDL0MsQ0FBQztJQUVELEVBQUUsRUFBRSxVQUFVLEtBQVU7UUFDdEIsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdEIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE9BQU8sc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELEVBQUUsRUFBRSxVQUFVLEtBQVU7UUFDdEIsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdEIsT0FBTyxLQUFL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RUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsRUFBRSxFQUFFLFVBQVUsS0FB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RUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDO0tBQ2xGO0lBQ0QsRUFBRSxFQUFFO1FBQ0YsSUFBSSxFQUFFLGFBQWE7UUFDbkIsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQztLQUMzRTtJQUNELEVBQUUsRUFBRTtRQUNGLElBQUksRUFBRSxZQUFZO1FBQ2xCLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQztLQUN0RTtJQUNELEVBQUUsRUFBRTtRQUNGLElBQUksRUFBRSxZQUFZO1FBQ2xCLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztLQUN0RTtJQUNELEVBQUUsRUFBRTtRQUNGLElBQUksRUFBRSxjQUFjO1FBQ3BCLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDO0tBQ2hGO0lBQ0QsRUFBRSxFQUFFO1FBQ0YsSUFBSSxFQUFFLGFBQWE7UUFDbkIsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUks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QztBQUdELFNBQVMsTUFBTSxDQUFDLEVBQU87SUFDckIsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBRXJCLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO1FBQzVCLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ3ZCLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDeEI7S0FDRjtJQUVELElBQUksUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRTtRQUMxQixPQUFPLEtBQUssQ0FBQztLQUNkO1NBQU07UUFDTCxPQUFPLFNBQVMsQ0FBQztLQUNsQjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbGxOdW1iZXJzQXJlU2FtZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgQmlnT2JqZWN0LCBNYXNrVHlwZSB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbi8qKlxuICogQkFTRUQgT04gaHR0cHM6Ly9naXRodWIuY29tL2dhbW1hc29mdC9pZS9cbiAqL1xuXG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUluc2NyaWNhb0VzdGFkdWFsOiBCaWdPYmplY3Q8RnVuY3Rpb24+ID0ge1xuICBhYzogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICBpZiAodGFtYW5ob05hb0UodmFsb3IsIDEzKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChuYW9Db21lY2FDb20odmFsb3IsICcwMScpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZSA9IHByaW1laXJvcyh2YWxvciwgMTEpO1xuXG4gICAgY29uc3QgcHJpbWVpcm9EaWdpdG8gPSBzdWJzdHJhY2FvUG9yMTFTZU1haW9yUXVlMkNhc29Db250cmFyaW8wKG1vZChiYXNlKSk7XG4gICAgY29uc3Qgc2VndW5kb0RpZ2l0byA9IHN1YnN0cmFjYW9Qb3IxMVNlTWFpb3JRdWUyQ2Fzb0NvbnRyYXJpbzAobW9kKGJhc2UgKyBwcmltZWlyb0RpZ2l0bykpO1xuXG4gICAgcmV0dXJuIGJhc2UgKyBwcmltZWlyb0RpZ2l0byArIHNlZ3VuZG9EaWdpdG87XG4gIH0sXG5cbiAgYW06IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgaWYgKHRhbWFuaG9OYW9FKHZhbG9yKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBjYWxjdWxvVHJpdmlhbEdlbmVyYXRlKHZhbG9yKTtcbiAgfSxcblxuICBhbDogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICBpZiAodGFtYW5ob05hb0UodmFsb3IpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG5hb0NvbWVjYUNvbSh2YWxvciwgJzI0JykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQcOHw4NPOiAyNFhOTk5OTkQsICBzZW5kbzpcbiAgICAvLyAyNCDigJMgQ8OzZGlnbyBkbyBFc3RhZG9cbiAgICAvLyBYIOKAkyBUaXBvIGRlIGVtcHJlc2EgKDAtTm9ybWFsLCAzLVByb2R1dG9yIFJ1cmFsLCA1LVN1YnN0aXR1dGEsIDctIE1pY3JvLUVtcHJlc2EgQW1idWxhbnRlLCA4LU1pY3JvLUVtcHJlc2EpXG4gICAgLy8gTk5OTk4g4oCTIE7Dum1lcm8gZGEgZW1wcmVzYVxuICAgIC8vIEQg4oCTIETDrWdpdG8gZGUgdmVyaWZpY2HDp8OjbyBjYWxjdWxhZG8gcGVsbyBNw7NkdWxvMTEsIHDDqnNvcyAyIMOgIDkgZGEgZGlyZWl0YSBwYXJhIGEgZXNxdWVyZGEsIGV4Y2V0byBEXG4gICAgLy8gRXhlbXBsbzogTsO6bWVybyAyIDQgMCAwIDAgMCAwIDQgRFxuICAgIC8vICAgICAgICAgICAgICAgICAyIDQgWCBOIE4gTiBOIE4gRFxuICAgIC8vIEZvbnRlOiBodHRwOi8vd3d3LnNpbnRlZ3JhLmdvdi5ici9DYWRfRXN0YWRvcy9jYWRfQUwuaHRtbFxuXG4gICAgY29uc3QgYmFzZTogYW55ID0gcHJpbWVpcm9zKHZhbG9yKTtcblxuICAgIC8vIFBlc29zIDkgOCA3IDYgNSA0IDMgMlxuICAgIC8vIFNPTUEgPSAoMiAqIDQpICsgKDMgKiAwKSArICg0ICogMCkgKyAoNSAqIDApICsgKDYgKiAwKSArICg3ICogMCkgKyAoOCAqIDQpICsgKDkgKiAyKSA9IDU4XG4gICAgY29uc3Qgc29tYSA9IGJhc2Uuc3BsaXQoJycpLnJlZHVjZSgoYWNjOiBudW1iZXIsIHY6IHN0cmluZywgaTogbnVtYmVyKSA9PiB7XG4gICAgICByZXR1cm4gYWNjICsgKDkgLSBpKSAqIE51bWJlcih2KVxuICAgIH0sIDApXG4gICAgLy8gUFJPRFVUTyA9IDU4ICogMTAgPSA1ODBcbiAgICBjb25zdCBwcm9kdXRvID0gc29tYSAqIDEwXG4gICAgLy8gUkVTVE8gPSA1ODAg4oCTIElOVEVJUk8oNTgwIC8gMTEpKjExID0gNTgwIOKAkyAoNTIqMTEpID0gOFxuICAgIGNvbnN0IHJlc3RvID0gcHJvZHV0byAtIE1hdGguZmxvb3IocHJvZHV0byAvIDExKSAqIDExXG4gICAgLy8gRMONR0lUTyA9IDggLSBDYXNvIFJFU1RPIHNlamEgaWd1YWwgYSAxMCBvIETDjUdJVE8gc2Vyw6EgMCAoemVybylcbiAgICBjb25zdCBkaWdpdG8gPSByZXN0byA9PT0gMTAgPyAwIDogcmVzdG9cbiAgICByZXR1cm4gYmFzZSArIGRpZ2l0bztcbiAgfSxcblxuICBhcDogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICBpZiAodGFtYW5ob05hb0UodmFsb3IpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG5hb0NvbWVjYUNvbSh2YWxvciwgJzAzJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlOiBhbnkgPSBwcmltZWlyb3ModmFsb3IpO1xuXG4gICAgbGV0IHA6IG51bWJlciwgZDogbnVtYmVyO1xuXG4gICAgaWYgKGVudHJlKGJhc2UsIDMwMDAwMDEsIDMwMTcwMDApKSB7XG4gICAgICBwID0gNTtcbiAgICAgIGQgPSAwO1xuICAgIH0gZWxzZSBpZiAoZW50cmUoYmFzZSwgMzAxNzAwMSwgMzAxOTAyMikpIHtcbiAgICAgIHAgPSA5O1xuICAgICAgZCA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHAgPSAwO1xuICAgICAgZCA9IDA7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdG8gPSBtb2QocCArIGJhc2UsIFsyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxXSk7XG5cbiAgICBsZXQgZGlnaXRvOiBudW1iZXI7XG4gICAgaWYgKHJlc3RvID09PSAxKSB7XG4gICAgICBkaWdpdG8gPSAwO1xuICAgIH0gZWxzZSBpZiAocmVzdG8gPT09IDApIHtcbiAgICAgIGRpZ2l0byA9IGQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpZ2l0byA9IDExIC0gcmVzdG87XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2UgKyBkaWdpdG87XG4gIH0sXG5cbiAgYmE6IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgaWYgKHRhbWFuaG9OYW9FKHZhbG9yLCA4KSAmJiB0YW1hbmhvTmFvRSh2YWxvcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlOiBhbnkgPSBwcmltZWlyb3ModmFsb3IsIHZhbG9yLmxlbmd0aCAtIDIpO1xuICAgIGxldCBwcmltZWlyb0RpZ2l0bzogbnVtYmVyLCBzZWd1bmRvRGlnaXRvOiBudW1iZXI7XG5cbiAgICBjb25zdCBzZWd1bmRvTXVsdGlwbGljYWRvciA9IHNlcmllKDIsIDcpO1xuICAgIGNvbnN0IHByaW1laXJvTXVsdGlwbGljYWRvciA9IHNlcmllKDIsIDgpO1xuXG4gICAgbGV0IHByaW1laXJvUmVzdG86IG51bWJlciwgc2VndW5kb1Jlc3RvOiBudW1iZXI7XG4gICAgbGV0IGRpZ2l0b0NvbXBhcmFjYW8gPSB2YWxvci5zdWJzdHJpbmcoMCwgMSk7XG5cbiAgICBpZiAodGFtYW5ob0UodmFsb3IsIDkpKSB7XG4gICAgICBzZWd1bmRvTXVsdGlwbGljYWRvci5wdXNoKDgpO1xuICAgICAgcHJpbWVpcm9NdWx0aXBsaWNhZG9yLnB1c2goOSk7XG4gICAgICBkaWdpdG9Db21wYXJhY2FvID0gdmFsb3Iuc3Vic3RyaW5nKDEsIDIpO1xuICAgIH1cblxuICAgIGlmICgnMDEyMzQ1OCcuc3BsaXQoJycpLmluZGV4T2YoZGlnaXRvQ29tcGFyYWNhbykgIT09IC0xKSB7XG4gICAgICBzZWd1bmRvUmVzdG8gPSBtb2QoYmFzZSwgc2VndW5kb011bHRpcGxpY2Fkb3IsIDEwKTtcbiAgICAgIHNlZ3VuZG9EaWdpdG8gPSBzZWd1bmRvUmVzdG8gPT09IDAgPyAwIDogMTAgLSBzZWd1bmRvUmVzdG87XG5cbiAgICAgIHByaW1laXJvUmVzdG8gPSBtb2QoYmFzZSArIHNlZ3VuZG9EaWdpdG8sIHByaW1laXJvTXVsdGlwbGljYWRvciwgMTApO1xuICAgICAgcHJpbWVpcm9EaWdpdG8gPSBwcmltZWlyb1Jlc3RvID09PSAwID8gMCA6IDEwIC0gcHJpbWVpcm9SZXN0bztcbiAgICB9IGVsc2Uge1xuICAgICAgc2VndW5kb1Jlc3RvID0gbW9kKGJhc2UsIHNlZ3VuZG9NdWx0aXBsaWNhZG9yKTtcbiAgICAgIHNlZ3VuZG9EaWdpdG8gPSBzdWJzdHJhY2FvUG9yMTFTZU1haW9yUXVlMkNhc29Db250cmFyaW8wKHNlZ3VuZG9SZXN0byk7XG5cbiAgICAgIHByaW1laXJvUmVzdG8gPSBtb2QoYmFzZSArIHNlZ3VuZG9EaWdpdG8sIHByaW1laXJvTXVsdGlwbGljYWRvcik7XG4gICAgICBwcmltZWlyb0RpZ2l0byA9IHN1YnN0cmFjYW9Qb3IxMVNlTWFpb3JRdWUyQ2Fzb0NvbnRyYXJpbzAocHJpbWVpcm9SZXN0byk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2UgKyBwcmltZWlyb0RpZ2l0byArIHNlZ3VuZG9EaWdpdG87XG4gIH0sXG5cbiAgY2U6IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgaWYgKHRhbWFuaG9OYW9FKHZhbG9yKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gY2FsY3Vsb1RyaXZpYWxHZW5lcmF0ZSh2YWxvcik7XG4gIH0sXG5cbiAgZGY6IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgaWYgKHRhbWFuaG9OYW9FKHZhbG9yLCAxMykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAobmFvQ29tZWNhQ29tKHZhbG9yLCAnMDcnKSAmJiBuYW9Db21lY2FDb20odmFsb3IsICcwOCcpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGJhc2U6IGFueSA9IHByaW1laXJvcyh2YWxvciwgMTEpO1xuXG4gICAgY29uc3QgcHJpbWVpcm8gPSBzdWJzdHJhY2FvUG9yMTFTZU1haW9yUXVlMkNhc29Db250cmFyaW8wKG1vZChiYXNlKSk7XG4gICAgY29uc3Qgc2VndW5kbyA9IHN1YnN0cmFjYW9Qb3IxMVNlTWFpb3JRdWUyQ2Fzb0NvbnRyYXJpbzAobW9kKGJhc2UgKyBwcmltZWlybykpO1xuICAgIHJldHVybiBiYXNlICsgcHJpbWVpcm8gKyBzZWd1bmRvO1xuICB9LFxuXG4gIGVzOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIHJldHVybiBjYWxjdWxvVHJpdmlhbEdlbmVyYXRlKHZhbG9yKTtcbiAgfSxcbiAgZ286IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgaWYgKHRhbWFuaG9OYW9FKHZhbG9yKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFZlcmlmaWNhIG9zIGRpZ2l0b3MgaW5pY2lhaXMgZG8gZXN0YWRvXG4gICAgLy8gRm9udGU6IGh0dHBzOi8vYXBwYXNwLmVjb25vbWlhLmdvLmdvdi5ici9MZWdpc2xhY2FvL2FycXVpdm9zL1NlY3JldGFyaW8vSU4vSU5fMTUzNV8yMDIyLmh0bVxuXG4gICAgaWYgKFsnMTAnLCAnMTEnLCAnMTUnLCAnMjAnXS5pbmRleE9mKHZhbG9yLnN1YnN0cmluZygwLCAyKSkgPT09IC0xKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZTogYW55ID0gcHJpbWVpcm9zKHZhbG9yKTtcblxuICAgIGlmIChiYXNlID09PSAnMTEwOTQ0MDInKSB7XG4gICAgICByZXR1cm4gdmFsb3Iuc3Vic3RyKDgpID09PSAnMScgfHwgdmFsb3Iuc3Vic3RyKDgpID09PSAnMCc7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdG8gPSBtb2QoYmFzZSk7XG4gICAgbGV0IGRpZ2l0bzogbnVtYmVyO1xuXG4gICAgaWYgKHJlc3RvID09PSAwKSB7XG4gICAgICBkaWdpdG8gPSAwO1xuICAgIH0gZWxzZSBpZiAocmVzdG8gPT09IDEpIHtcbiAgICAgIGlmIChlbnRyZShiYXNlLCAxMDEwMzEwNSwgMTAxMTk5OTcpKSB7XG4gICAgICAgIGRpZ2l0byA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaWdpdG8gPSAwO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkaWdpdG8gPSAxMSAtIHJlc3RvO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlICsgZGlnaXRvO1xuICB9LFxuICBtYTogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICBpZiAodGFtYW5ob05hb0UodmFsb3IpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG5hb0NvbWVjYUNvbSh2YWxvciwgJzEyJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FsY3Vsb1RyaXZpYWxHZW5lcmF0ZSh2YWxvcik7XG4gIH0sXG5cbiAgbWc6IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgaWYgKHRhbWFuaG9OYW9FKHZhbG9yLCAxMykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlID0gcHJpbWVpcm9zKHZhbG9yLCAxMSk7XG5cbiAgICBjb25zdCBiYXNlQ29tWmVybyA9IHZhbG9yLnN1YnN0cmluZygwLCAzKSArICcwJyArIHZhbG9yLnN1YnN0cmluZygzLCAxMSk7XG5cbiAgICBsZXQgaSA9IDA7XG4gICAgY29uc3QgcHJvZHV0b3Jpb0xpdGVyYWwgPSBiYXNlQ29tWmVyby5zcGxpdCgnJykucmVkdWNlUmlnaHQoZnVuY3Rpb24gKGFudGVyaW9yLCBhdHVhbCkge1xuICAgICAgaWYgKGkgPiBbMiwgMV0ubGVuZ3RoIC0gMSkge1xuICAgICAgICBpID0gMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChbMiwgMV1baSsrXSAqIHBhcnNlSW50KGF0dWFsLCAxMCkpLnRvU3RyaW5nKCkgKyBhbnRlcmlvci50b1N0cmluZygpO1xuICAgIH0sICcnKS5zcGxpdCgnJykucmVkdWNlKGZ1bmN0aW9uIChhbnRlcmlvciwgYXR1YWwpIHtcbiAgICAgIHJldHVybiBhbnRlcmlvciArIHBhcnNlSW50KGF0dWFsLCAxMCk7XG4gICAgfSwgMCk7XG5cbiAgICBsZXQgcHJpbWVpcm86IGFueSA9ICgoTWF0aC5mbG9vcihwcm9kdXRvcmlvTGl0ZXJhbCAvIDEwKSArIDEpICogMTApIC0gcHJvZHV0b3Jpb0xpdGVyYWw7XG4gICAgaWYgKHByaW1laXJvID09PSAxMCkge1xuICAgICAgcHJpbWVpcm8gPSAwO1xuICAgIH1cblxuICAgIGNvbnN0IHNlZ3VuZG8gPSBzdWJzdHJhY2FvUG9yMTFTZU1haW9yUXVlMkNhc29Db250cmFyaW8wKG1vZChiYXNlICsgcHJpbWVpcm8sIHNlcmllKDIsIDExKSkpO1xuXG4gICAgcmV0dXJuIGJhc2UgKyBwcmltZWlybyArIHNlZ3VuZG87XG4gIH0sXG5cbiAgbXM6IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgaWYgKG5hb0NvbWVjYUNvbSh2YWxvciwgJzI4JykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FsY3Vsb1RyaXZpYWxHZW5lcmF0ZSh2YWxvcik7XG4gIH0sXG4gIG10OiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIGlmICh0YW1hbmhvTmFvRSh2YWxvciwgMTEpICYmIHRhbWFuaG9OYW9FKHZhbG9yKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGJhc2UgPSB0YW1hbmhvRSh2YWxvciwgMTEpID8gdmFsb3Iuc3Vic3RyaW5nKDAsIDEwKSA6IHByaW1laXJvcyh2YWxvcik7XG4gICAgcmV0dXJuIGNhbGN1bG9Ucml2aWFsR2VuZXJhdGUodmFsb3IsIGJhc2UsIHRydWUpO1xuICB9LFxuICBwYTogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICBpZiAodGFtYW5ob05hb0UodmFsb3IpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG5hb0NvbWVjYUNvbSh2YWxvciwgJzE1JykgJiYgbmFvQ29tZWNhQ29tKHZhbG9yLCAnNzUnKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBjYWxjdWxvVHJpdmlhbEdlbmVyYXRlKHZhbG9yKTtcbiAgfSxcblxuICBwYjogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICBpZiAodGFtYW5ob05hb0UodmFsb3IpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbGN1bG9Ucml2aWFsR2VuZXJhdGUodmFsb3IpO1xuICB9LFxuXG4gIHBlOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIGNvbnN0IGJhc2U6IGFueSA9IHZhbG9yLnN1YnN0cmluZygwLCB2YWxvci5sZW5ndGggLSAyKTtcblxuICAgIGNvbnN0IHJlc3RvUHJpbWVpcm8gPSBtb2QoYmFzZSk7XG4gICAgY29uc3QgcHJpbWVpcm8gPSAxMSAtIHJlc3RvUHJpbWVpcm8gPj0gMTAgPyAwIDogMTEgLSByZXN0b1ByaW1laXJvO1xuXG4gICAgY29uc3QgcmVzdG9TZWd1bmRvID0gbW9kKGJhc2UgKyBwcmltZWlybyk7XG4gICAgY29uc3Qgc2VndW5kbyA9IDExIC0gcmVzdG9TZWd1bmRvID49IDEwID8gMCA6IDExIC0gcmVzdG9TZWd1bmRvO1xuXG4gICAgcmV0dXJuIGJhc2UgKyBwcmltZWlybyArIHNlZ3VuZG87XG4gIH0sXG5cbiAgcGk6IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgcmV0dXJuIGNhbGN1bG9Ucml2aWFsR2VuZXJhdGUodmFsb3IpO1xuICB9LFxuXG4gIHByOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIGlmICh0YW1hbmhvTmFvRSh2YWxvciwgMTApKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZSA9IHByaW1laXJvcyh2YWxvcik7XG5cbiAgICBjb25zdCByZXN0b1ByaW1laXJvID0gbW9kKGJhc2UsIHNlcmllKDIsIDcpKTtcbiAgICBjb25zdCBwcmltZWlybyA9IDExIC0gcmVzdG9QcmltZWlybyA+PSAxMCA/IDAgOiAxMSAtIHJlc3RvUHJpbWVpcm87XG5cbiAgICBjb25zdCByZXN0b1NlZ3VuZG8gPSBtb2QoYmFzZSArIHByaW1laXJvLCBzZXJpZSgyLCA3KSk7XG4gICAgY29uc3Qgc2VndW5kbyA9IDExIC0gcmVzdG9TZWd1bmRvID49IDEwID8gMCA6IDExIC0gcmVzdG9TZWd1bmRvO1xuXG4gICAgcmV0dXJuIGJhc2UgKyBwcmltZWlybyArIHNlZ3VuZG87XG4gIH0sXG4gIHJqOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIGlmICh0YW1hbmhvTmFvRSh2YWxvciwgOCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlID0gcHJpbWVpcm9zKHZhbG9yLCA3KTtcbiAgICBjb25zdCBkaWdpdG8gPSBzdWJzdHJhY2FvUG9yMTFTZU1haW9yUXVlMkNhc29Db250cmFyaW8wKG1vZChiYXNlLCBzZXJpZSgyLCA3KSkpO1xuXG4gICAgcmV0dXJuIGJhc2UgKyBkaWdpdG87XG4gIH0sXG5cbiAgcm46IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgaWYgKHRhbWFuaG9OYW9FKHZhbG9yKSAmJiB0YW1hbmhvTmFvRSh2YWxvciwgMTApKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG5hb0NvbWVjYUNvbSh2YWxvciwgJzIwJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlID0gdmFsb3Iuc3Vic3RyaW5nKDAsIHZhbG9yLmxlbmd0aCAtIDEpO1xuXG4gICAgY29uc3QgbXVsdGlwbGljYWRvcmVzID0gc2VyaWUoMiwgOSk7XG4gICAgaWYgKHRhbWFuaG9FKHZhbG9yLCAxMCkpIHtcbiAgICAgIG11bHRpcGxpY2Fkb3Jlcy5wdXNoKDEwKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN0byA9IChtb2QoYmFzZSwgbXVsdGlwbGljYWRvcmVzKSAqIDEwKSAlIDExO1xuICAgIGNvbnN0IGRpZ2l0byA9IHJlc3RvID09PSAxMCA/IDAgOiByZXN0bztcblxuICAgIHJldHVybiBiYXNlICsgZGlnaXRvO1xuICB9LFxuICBybzogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICBsZXQgYmFzZTogYW55LCBkaWdpdG86IG51bWJlciwgcmVzdWx0YWRvTW9kOiBudW1iZXI7XG5cbiAgICBpZiAodGFtYW5ob0UodmFsb3IsIDkpKSB7XG4gICAgICBiYXNlID0gdmFsb3Iuc3Vic3RyaW5nKDMsIDgpO1xuICAgICAgZGlnaXRvID0gc3Vic3RyYWNhb1BvcjExU2VNYWlvclF1ZTJDYXNvQ29udHJhcmlvMChtb2QoYmFzZSkpO1xuXG4gICAgICByZXR1cm4gdmFsb3IgPT09IHZhbG9yLnN1YnN0cmluZygwLCAzKSArIGJhc2UgKyBkaWdpdG87XG4gICAgfSBlbHNlIGlmICh0YW1hbmhvRSh2YWxvciwgMTQpKSB7XG4gICAgICBiYXNlID0gcHJpbWVpcm9zKHZhbG9yLCAxMyk7XG4gICAgICByZXN1bHRhZG9Nb2QgPSBtb2QoYmFzZSk7XG4gICAgICBkaWdpdG8gPSByZXN1bHRhZG9Nb2QgPD0gMSA/IDEgOiAxMSAtIHJlc3VsdGFkb01vZDtcblxuICAgICAgcmV0dXJuIGJhc2UgKyBkaWdpdG87XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sXG4gIHJyOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIGlmICh0YW1hbmhvTmFvRSh2YWxvcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAobmFvQ29tZWNhQ29tKHZhbG9yLCAnMjQnKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGJhc2UgPSBwcmltZWlyb3ModmFsb3IpO1xuICAgIGNvbnN0IGRpZ2l0byA9IG1vZChiYXNlLCBbOCwgNywgNiwgNSwgNCwgMywgMiwgMV0sIDkpO1xuXG4gICAgcmV0dXJuIGJhc2UgKyBkaWdpdG87XG4gIH0sXG5cbiAgcnM6IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgaWYgKHRhbWFuaG9OYW9FKHZhbG9yLCAxMCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlID0gcHJpbWVpcm9zKHZhbG9yLCA5KTtcbiAgICByZXR1cm4gY2FsY3Vsb1RyaXZpYWxHZW5lcmF0ZSh2YWxvciwgYmFzZSwgdHJ1ZSk7XG4gIH0sXG5cbiAgc2M6IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgcmV0dXJuIGNhbGN1bG9Ucml2aWFsR2VuZXJhdGUodmFsb3IpO1xuICB9LFxuXG4gIHNlOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIGlmICh0YW1hbmhvTmFvRSh2YWxvcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FsY3Vsb1RyaXZpYWxHZW5lcmF0ZSh2YWxvcik7XG4gIH0sXG5cbiAgc3A6IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgdmFsb3IgPSB2YWxvci50b1VwcGVyQ2FzZSgpO1xuXG4gICAgbGV0IHNlZ3VuZGFCYXNlOiBzdHJpbmc7XG5cbiAgICBpZiAodmFsb3Iuc3Vic3RyKDAsIDEpID09PSAnUCcpIHtcbiAgICAgIGlmICh0YW1hbmhvTmFvRSh2YWxvciwgMTMpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmFzZSA9IHZhbG9yLnN1YnN0cmluZygxLCA5KTtcbiAgICAgIHNlZ3VuZGFCYXNlID0gdmFsb3Iuc3Vic3RyaW5nKDEwLCAxMyk7XG4gICAgICBjb25zdCByZXN0byA9IG1vZChiYXNlLCBbMTAsIDgsIDcsIDYsIDUsIDQsIDMsIDFdKS50b1N0cmluZygpO1xuICAgICAgY29uc3QgZGlnaXRvID0gcmVzdG8ubGVuZ3RoID4gMSA/IHJlc3RvWzFdIDogcmVzdG9bMF07XG5cbiAgICAgIHJldHVybiAnUCcgKyBiYXNlICsgZGlnaXRvICsgc2VndW5kYUJhc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0YW1hbmhvTmFvRSh2YWxvciwgMTIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJpbWVpcmFCYXNlID0gcHJpbWVpcm9zKHZhbG9yKTtcbiAgICAgIHNlZ3VuZGFCYXNlID0gdmFsb3Iuc3Vic3RyaW5nKDksIDExKTtcblxuICAgICAgY29uc3QgcHJpbWVpcm9SZXN0byA9IG1vZChwcmltZWlyYUJhc2UsIFsxMCwgOCwgNywgNiwgNSwgNCwgMywgMV0pLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBwcmltZWlybyA9IHByaW1laXJvUmVzdG8ubGVuZ3RoID4gMSA/IHByaW1laXJvUmVzdG9bMV0gOiBwcmltZWlyb1Jlc3RvWzBdO1xuXG4gICAgICBjb25zdCBzZWd1bmRvUmVzdG8gPSBtb2QocHJpbWVpcmFCYXNlICsgcHJpbWVpcm8gKyBzZWd1bmRhQmFzZSwgc2VyaWUoMiwgMTApKS50b1N0cmluZygpO1xuICAgICAgY29uc3Qgc2VndW5kbyA9IHNlZ3VuZG9SZXN0by5sZW5ndGggPiAxID8gc2VndW5kb1Jlc3RvWzFdIDogc2VndW5kb1Jlc3RvWzBdO1xuXG4gICAgICByZXR1cm4gcHJpbWVpcmFCYXNlICsgcHJpbWVpcm8gKyBzZWd1bmRhQmFzZSArIHNlZ3VuZG87XG4gICAgfVxuICB9LFxuXG4gIHRvOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIGlmICh0YW1hbmhvTmFvRSh2YWxvcikgJiYgdGFtYW5ob05hb0UodmFsb3IsIDExKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxldCBiYXNlOiBhbnk7XG5cbiAgICBpZiAodGFtYW5ob0UodmFsb3IsIDExKSkge1xuICAgICAgaWYgKFsnMDEnLCAnMDInLCAnMDMnLCAnOTknXS5pbmRleE9mKHZhbG9yLnN1YnN0cmluZygyLCA0KSkgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgYmFzZSA9IHZhbG9yLnN1YnN0cmluZygwLCAyKSArIHZhbG9yLnN1YnN0cmluZyg0LCAxMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhc2UgPSBwcmltZWlyb3ModmFsb3IpO1xuICAgIH1cblxuICAgIGNvbnN0IGRpZ2l0byA9IHN1YnN0cmFjYW9Qb3IxMVNlTWFpb3JRdWUyQ2Fzb0NvbnRyYXJpbzAobW9kKGJhc2UpKTtcblxuICAgIHJldHVybiB2YWxvci5zdWJzdHJpbmcoMCwgdmFsb3IubGVuZ3RoIC0gMSkgKyBkaWdpdG87XG4gIH0sXG59O1xuXG5cblxuXG5jb25zdCBmdW5jb2VzOiBCaWdPYmplY3Q8RnVuY3Rpb24+ID0ge1xuICBhYzogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICByZXR1cm4gdmFsb3IgPT09IGdlbmVyYXRlSW5zY3JpY2FvRXN0YWR1YWxbJ2FjJ10odmFsb3IpO1xuICB9LFxuXG4gIGFtOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIHJldHVybiB2YWxvciA9PT0gZ2VuZXJhdGVJbnNjcmljYW9Fc3RhZHVhbFsnYW0nXSh2YWxvcik7XG4gIH0sXG5cbiAgYWw6IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgcmV0dXJuIHZhbG9yID09PSBnZW5lcmF0ZUluc2NyaWNhb0VzdGFkdWFsWydhbCddKHZhbG9yKTtcbiAgfSxcblxuICBhcDogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICByZXR1cm4gdmFsb3IgPT09IGdlbmVyYXRlSW5zY3JpY2FvRXN0YWR1YWxbJ2FwJ10odmFsb3IpO1xuICB9LFxuXG4gIGJhOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIHJldHVybiB2YWxvciA9PT0gZ2VuZXJhdGVJbnNjcmljYW9Fc3RhZHVhbFsnYmEnXSh2YWxvcik7XG4gIH0sXG5cbiAgY2U6IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgcmV0dXJuIHZhbG9yID09PSBnZW5lcmF0ZUluc2NyaWNhb0VzdGFkdWFsWydjZSddKHZhbG9yKTtcbiAgfSxcblxuICBkZjogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICByZXR1cm4gdmFsb3IgPT09IGdlbmVyYXRlSW5zY3JpY2FvRXN0YWR1YWxbJ2RmJ10odmFsb3IpO1xuICB9LFxuXG4gIGVzOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIHJldHVybiB2YWxvciA9PT0gZ2VuZXJhdGVJbnNjcmljYW9Fc3RhZHVhbFsnZXMnXSh2YWxvcik7XG4gIH0sXG4gIGdvOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIHJldHVybiB2YWxvciA9PT0gZ2VuZXJhdGVJbnNjcmljYW9Fc3RhZHVhbFsnZ28nXSh2YWxvcik7XG4gIH0sXG4gIG1hOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIHJldHVybiB2YWxvciA9PT0gZ2VuZXJhdGVJbnNjcmljYW9Fc3RhZHVhbFsnbWEnXSh2YWxvcik7XG4gIH0sXG5cbiAgbWc6IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgcmV0dXJuIHZhbG9yID09PSBnZW5lcmF0ZUluc2NyaWNhb0VzdGFkdWFsWydtZyddKHZhbG9yKTtcbiAgfSxcblxuICBtczogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICByZXR1cm4gdmFsb3IgPT09IGdlbmVyYXRlSW5zY3JpY2FvRXN0YWR1YWxbJ21zJ10odmFsb3IpO1xuICB9LFxuICBtdDogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICByZXR1cm4gdmFsb3IgPT09IGdlbmVyYXRlSW5zY3JpY2FvRXN0YWR1YWxbJ210J10odmFsb3IpO1xuICB9LFxuICBwYTogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICByZXR1cm4gdmFsb3IgPT09IGdlbmVyYXRlSW5zY3JpY2FvRXN0YWR1YWxbJ3BhJ10odmFsb3IpO1xuICB9LFxuXG4gIHBiOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIHJldHVybiB2YWxvciA9PT0gZ2VuZXJhdGVJbnNjcmljYW9Fc3RhZHVhbFsncGInXSh2YWxvcik7XG4gIH0sXG5cbiAgcGU6IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgcmV0dXJuIHZhbG9yID09PSBnZW5lcmF0ZUluc2NyaWNhb0VzdGFkdWFsWydwZSddKHZhbG9yKTtcbiAgfSxcblxuICBwaTogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICByZXR1cm4gdmFsb3IgPT09IGdlbmVyYXRlSW5zY3JpY2FvRXN0YWR1YWxbJ3BpJ10odmFsb3IpO1xuICB9LFxuXG4gIHByOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIHJldHVybiB2YWxvciA9PT0gZ2VuZXJhdGVJbnNjcmljYW9Fc3RhZHVhbFsncHInXSh2YWxvcik7XG4gIH0sXG4gIHJqOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIHJldHVybiB2YWxvciA9PT0gZ2VuZXJhdGVJbnNjcmljYW9Fc3RhZHVhbFsncmonXSh2YWxvcik7XG4gIH0sXG5cbiAgcm46IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgcmV0dXJuIHZhbG9yID09PSBnZW5lcmF0ZUluc2NyaWNhb0VzdGFkdWFsWydybiddKHZhbG9yKTtcbiAgfSxcbiAgcm86IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgcmV0dXJuIHZhbG9yID09PSBnZW5lcmF0ZUluc2NyaWNhb0VzdGFkdWFsWydybyddKHZhbG9yKTtcbiAgfSxcbiAgcnI6IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgcmV0dXJuIHZhbG9yID09PSBnZW5lcmF0ZUluc2NyaWNhb0VzdGFkdWFsWydyciddKHZhbG9yKTtcbiAgfSxcblxuICByczogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICByZXR1cm4gdmFsb3IgPT09IGdlbmVyYXRlSW5zY3JpY2FvRXN0YWR1YWxbJ3JzJ10odmFsb3IpO1xuICB9LFxuXG4gIHNjOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIHJldHVybiB2YWxvciA9PT0gZ2VuZXJhdGVJbnNjcmljYW9Fc3RhZHVhbFsnc2MnXSh2YWxvcik7XG4gIH0sXG5cbiAgc2U6IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgcmV0dXJuIHZhbG9yID09PSBnZW5lcmF0ZUluc2NyaWNhb0VzdGFkdWFsWydzZSddKHZhbG9yKTtcbiAgfSxcblxuICBzcDogZnVuY3Rpb24gKHZhbG9yOiBzdHJpbmcgfCBib29sZWFuKSB7XG4gICAgcmV0dXJuIHZhbG9yID09PSBnZW5lcmF0ZUluc2NyaWNhb0VzdGFkdWFsWydzcCddKHZhbG9yKTtcbiAgfSxcblxuICB0bzogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICByZXR1cm4gdmFsb3IgPT09IGdlbmVyYXRlSW5zY3JpY2FvRXN0YWR1YWxbJ3RvJ10odmFsb3IpO1xuICB9LFxufTtcblxuXG5cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlX2luc2NyaWNhb2VzdGFkdWFsKGllOiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+LCBlc3RhZG86IGFueSkge1xuICBpZiAoZUluZGVmaW5pZG8oZXN0YWRvKSB8fCBlc3RhZG8gPT09IG51bGwpIHtcbiAgICBlc3RhZG8gPSAnJztcbiAgfVxuXG4gIGVzdGFkbyA9IGVzdGFkby50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmIChlc3RhZG8gIT09ICcnICYmICEoZXN0YWRvIGluIGZ1bmNvZXMpKSB7XG4gICAgcmV0dXJuIG5ldyBFcnJvcignZXN0YWRvIG7Do28gw6kgdsOhbGlkbycpO1xuICB9XG5cbiAgaWYgKGVJbmRlZmluaWRvKGllKSkge1xuICAgIHJldHVybiBuZXcgRXJyb3IoJ2llIGRldmUgc2VyIGZvcm5lY2lkYScpO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoaWUpKSB7XG4gICAgbGV0IHJldG9ybm8gPSB0cnVlO1xuICAgIGllLmZvckVhY2goZnVuY3Rpb24gKGkpIHtcbiAgICAgIGlmICghdmFsaWRhdGVfaW5zY3JpY2FvZXN0YWR1YWwoaSwgZXN0YWRvKSkge1xuICAgICAgICByZXRvcm5vID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJldG9ybm87XG4gIH1cblxuICBpZiAodHlwZW9mIGllICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBuZXcgRXJyb3IoJ2llIGRldmUgc2VyIHN0cmluZyBvdSBhcnJheSBkZSBzdHJpbmdzJyk7XG4gIH1cblxuICBpZiAoIWFsbE51bWJlcnNBcmVTYW1lKGllKSkge1xuICAgIHJldHVybiBuZXcgRXJyb3IoJ2llIGNvbSB0b2RvcyBkw61naXRvcyBpZ3VhaXMnKTtcbiAgfVxuXG4gIGlmIChpZS5tYXRjaCgvXklTRU5UTyQvaSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGllID0gaWUucmVwbGFjZSgvW1xcLnxcXC18XFwvfFxcc10vZywgJycpO1xuXG4gIGlmIChlc3RhZG8gPT09ICcnKSB7XG4gICAgaWYgKGxvb2t1cChpZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKC9eXFxkKyQvLnRlc3QoaWUpIHx8IGVzdGFkbyA9PT0gJ3NwJyB8fCBmdW5jb2VzW2VzdGFkb10pIHtcbiAgICByZXR1cm4gZnVuY29lc1tlc3RhZG9dKGllKTtcbiAgfVxuXG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgY29uc3QgTUFTS1NJRTogQmlnT2JqZWN0PE1hc2tUeXBlPiA9IHtcbiAgYWM6IHtcbiAgICB0ZXh0OiAnMDEuMDA0LjgyMy8wMDEtMTInLFxuICAgIHRleHRNYXNrOiBbL1xcZC8sIC9cXGQvLCAnLicsIC9cXGQvLCAvXFxkLywgL1xcZC8sICcuJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJy8nLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAnLScsIC9cXGQvLCAvXFxkL11cbiAgfSxcbiAgYWw6IHtcbiAgICB0ZXh0OiAnMjQwMDAwMDQ4JyxcbiAgICB0ZXh0TWFzazogWy9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC9dXG4gIH0sXG4gIGFtOiB7XG4gICAgdGV4dDogJzA0LjE0NS44NzEtMCcsXG4gICAgdGV4dE1hc2s6IFsvXFxkLywgL1xcZC8sICcuJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJy4nLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAnLScsIC9cXGQvXVxuICB9LFxuICBhcDoge1xuICAgIHRleHQ6ICcyNDAwMDAwNDgnLFxuICAgIHRleHRNYXNrOiBbL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkL11cbiAgfSxcbiAgYmE6IHtcbiAgICB0ZXh0OiAnMTIzNDU2Ny00OCcsXG4gICAgdGV4dE1hc2s6IFsvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJy0nLCAvXFxkLywgL1xcZC9dLFxuICAgIHRleHRNYXNrRnVuY3Rpb246IGZ1bmN0aW9uIG1hc2sodXNlcklucHV0OiBhbnkpIHtcbiAgICAgIGNvbnN0IG51bWJlckxlbmd0aCA9IGdldFNpemVOdW1iZXJzKHVzZXJJbnB1dCk7XG4gICAgICBpZiAoIXVzZXJJbnB1dCB8fCBudW1iZXJMZW5ndGggPiA4KSB7XG4gICAgICAgIHJldHVybiBbL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sICctJywgL1xcZC8sIC9cXGQvXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBbL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJy0nLCAvXFxkLywgL1xcZC9dO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgY2U6IHtcbiAgICB0ZXh0OiAnMDYuMDAwMDAxLTUnLFxuICAgIHRleHRNYXNrOiBbL1xcZC8sIC9cXGQvLCAnLicsIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sICctJywgL1xcZC9dXG4gIH0sXG4gIGRmOiB7XG4gICAgdGV4dDogJzA2IDAwMDAwMSAxMjMtNTUnLFxuICAgIHRleHRNYXNrOiBbL1xcZC8sIC9cXGQvLCAnICcsIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sICcgJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJy0nLCAvXFxkLywgL1xcZC9dXG4gIH0sXG4gIGVzOiB7XG4gICAgdGV4dDogJzA4Mi41NjAuNjctNicsXG4gICAgdGV4dE1hc2s6IFsvXFxkLywgL1xcZC8sIC9cXGQvLCAnLicsIC9cXGQvLCAvXFxkLywgL1xcZC8sICcuJywgL1xcZC8sIC9cXGQvLCAnLScsIC9cXGQvXVxuICB9LFxuICBnbzoge1xuICAgIHRleHQ6ICcwNi4wMDAuMDAxLTUnLFxuICAgIHRleHRNYXNrOiBbL1xcZC8sIC9cXGQvLCAnLicsIC9cXGQvLCAvXFxkLywgL1xcZC8sICcuJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJy0nLCAvXFxkL11cbiAgfSxcbiAgbWE6IHtcbiAgICB0ZXh0OiAnMTIuMTA0LjM3Ni0yJyxcbiAgICB0ZXh0TWFzazogWy9cXGQvLCAvXFxkLywgJy4nLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAnLicsIC9cXGQvLCAvXFxkLywgL1xcZC8sICctJywgL1xcZC8sIC9cXGQvXVxuICB9LFxuICBtZzoge1xuICAgIHRleHQ6ICcwMDEuODE5LjI2My8wMDQ4JyxcbiAgICB0ZXh0TWFzazogWy9cXGQvLCAvXFxkLywgL1xcZC8sICcuJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJy4nLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAnLycsIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvXVxuICB9LFxuICBtczoge1xuICAgIHRleHQ6ICcwMDE4MTkyNjMnLFxuICAgIHRleHRNYXNrOiBbL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkL11cbiAgfSxcbiAgbXQ6IHtcbiAgICB0ZXh0OiAnMDAxODE5MjYzMC0xJyxcbiAgICB0ZXh0TWFzazogWy9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAnLScsIC9cXGQvXVxuICB9LFxuICBwYToge1xuICAgIHRleHQ6ICcwNi0wMDAwMDEtNScsXG4gICAgdGV4dE1hc2s6IFsvXFxkLywgL1xcZC8sICctJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJy0nLCAvXFxkL11cbiAgfSxcbiAgcGI6IHtcbiAgICB0ZXh0OiAnMDYwMDAwMDEtNScsXG4gICAgdGV4dE1hc2s6IFsvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sICctJywgL1xcZC9dXG4gIH0sXG4gIHBlOiB7XG4gICAgdGV4dDogJzAxOTIzMTAtMjQnLFxuICAgIHRleHRNYXNrOiBbL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sICctJywgL1xcZC8sIC9cXGQvXVxuICB9LFxuICBwaToge1xuICAgIHRleHQ6ICcxOS4zMDEuNjU2LTcnLFxuICAgIHRleHRNYXNrOiBbL1xcZC8sIC9cXGQvLCAnLicsIC9cXGQvLCAvXFxkLywgL1xcZC8sICcuJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJy0nLCAvXFxkL11cbiAgfSxcbiAgcHI6IHtcbiAgICB0ZXh0OiAnMTkzMDE2NTYtNzgnLFxuICAgIHRleHRNYXNrOiBbL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAnLScsIC9cXGQvLCAvXFxkL11cbiAgfSxcbiAgcmo6IHtcbiAgICB0ZXh0OiAnMjAuMDQwLjA0LTEnLFxuICAgIHRleHRNYXNrOiBbL1xcZC8sIC9cXGQvLCAnLicsIC9cXGQvLCAvXFxkLywgL1xcZC8sICcuJywgL1xcZC8sIC9cXGQvLCAnLScsIC9cXGQvXVxuICB9LFxuICBybjoge1xuICAgIHRleHQ6ICcyMC4wNDAuMDQwLTEnLFxuICAgIHRleHRNYXNrOiBbL1xcZC8sIC9cXGQvLCAnLicsIC9cXGQvLCAvXFxkLywgL1xcZC8sICcuJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJy0nLCAvXFxkL10sXG4gICAgdGV4dE1hc2tGdW5jdGlvbjogZnVuY3Rpb24gbWFzayh1c2VySW5wdXQ6IGFueSkge1xuICAgICAgY29uc3QgbnVtYmVyTGVuZ3RoID0gZ2V0U2l6ZU51bWJlcnModXNlcklucHV0KTtcblxuICAgICAgaWYgKCF1c2VySW5wdXQgfHwgbnVtYmVyTGVuZ3RoID4gOSkge1xuICAgICAgICByZXR1cm4gWy9cXGQvLCAvXFxkLywgJy4nLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAnLicsIC9cXGQvLCAvXFxkLywgL1xcZC8sICctJywgL1xcZC8sIC9cXGQvXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBbL1xcZC8sIC9cXGQvLCAnLicsIC9cXGQvLCAvXFxkLywgL1xcZC8sICcuJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJy0nLCAvXFxkL107XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBybzoge1xuICAgIHRleHQ6ICcxMDEuNjI1MjEtMycsXG4gICAgdGV4dE1hc2s6IFsvXFxkLywgL1xcZC8sIC9cXGQvLCAnLycsIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvXVxuICB9LFxuICBycjoge1xuICAgIHRleHQ6ICcyNDAwNjYyOC0xJyxcbiAgICB0ZXh0TWFzazogWy9cXGQvLCAvXFxkLywgL1xcZC8sICcvJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC9dXG4gIH0sXG4gIHJzOiB7XG4gICAgdGV4dDogJzAyNC8wNDQwMDEzJyxcbiAgICB0ZXh0TWFzazogWy9cXGQvLCAvXFxkLywgL1xcZC8sICcvJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC9dXG4gIH0sXG4gIHNjOiB7XG4gICAgdGV4dDogJzI3MS4yMzQuNTYzJyxcbiAgICB0ZXh0TWFzazogWy9cXGQvLCAvXFxkLywgL1xcZC8sICcuJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJy4nLCAvXFxkLywgL1xcZC8sIC9cXGQvXVxuICB9LFxuICBzZToge1xuICAgIHRleHQ6ICcyNzEyMzQ1Ni0zJyxcbiAgICB0ZXh0TWFzazogWy9cXGQvLCAvXFxkLywgL1xcZC8sICcvJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC9dXG4gIH0sXG4gIHNwOiB7XG4gICAgdGV4dDogJzExNC44MTQuODc4LjExOScsXG4gICAgdGV4dE1hc2s6IFsvXFxkLywgL1xcZC8sIC9cXGQvLCAnLicsIC9cXGQvLCAvXFxkLywgL1xcZC8sICcuJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJy4nLCAvXFxkLywgL1xcZC8sIC9cXGQvXVxuICB9LFxuICB0bzoge1xuICAgIHRleHQ6ICcxMSA4MSA0ODc4MTE5JyxcbiAgICB0ZXh0TWFzazogWy9cXGQvLCAvXFxkLywgJyAnLCAvXFxkLywgL1xcZC8sICcgJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC9dXG4gIH0sXG59O1xuXG5mdW5jdGlvbiBnZXRTaXplTnVtYmVycyh1c2VySW5wdXQ6IHN0cmluZykge1xuICBjb25zdCBudW1iZXJzOiBhbnkgPSB1c2VySW5wdXQubWF0Y2goL1xcZC9nKTtcbiAgbGV0IG51bWJlckxlbmd0aCA9IDA7XG4gIGlmIChudW1iZXJzKSB7XG4gICAgbnVtYmVyTGVuZ3RoID0gbnVtYmVycy5qb2luKCcnKS5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIG51bWJlckxlbmd0aFxufVxuXG5mdW5jdGlvbiBlSW5kZWZpbmlkbyhvYmpldG86IGFueSkge1xuICByZXR1cm4gdHlwZW9mIG9iamV0byA9PT0gdHlwZW9mIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gdGFtYW5ob05hb0Uoc3RyaW5nOiB7IGxlbmd0aDogbnVtYmVyOyB9LCB0YW1hbmhvID0gOSkge1xuICBpZiAoZUluZGVmaW5pZG8odGFtYW5obykpIHtcbiAgICB0YW1hbmhvID0gOTtcbiAgfVxuXG4gIHJldHVybiBzdHJpbmcubGVuZ3RoICE9PSB0YW1hbmhvO1xufVxuXG5mdW5jdGlvbiB0YW1hbmhvRShzdHJpbmc6IGFueVtdLCB0YW1hbmhvOiBudW1iZXIpIHtcbiAgcmV0dXJuICF0YW1hbmhvTmFvRShzdHJpbmcsIHRhbWFuaG8pO1xufVxuXG5mdW5jdGlvbiBzZXJpZShkZTogbnVtYmVyLCBhdGU6IG51bWJlcikge1xuICBjb25zdCByZXN1bHRhZG8gPSBbXTtcblxuICB3aGlsZSAoZGUgPD0gYXRlKSB7XG4gICAgcmVzdWx0YWRvLnB1c2goZGUrKyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0YWRvO1xufVxuXG5mdW5jdGlvbiBwcmltZWlyb3Moc3RyaW5nOiBhbnksIHF1YW50aWRhZGUgPSA4KSB7XG4gIGlmIChlSW5kZWZpbmlkbyhxdWFudGlkYWRlKSkge1xuICAgIHF1YW50aWRhZGUgPSA4O1xuICB9XG5cbiAgcmV0dXJuIHN0cmluZy5zdWJzdHJpbmcoMCwgcXVhbnRpZGFkZSk7XG59XG5cbmZ1bmN0aW9uIHN1YnN0cmFjYW9Qb3IxMVNlTWFpb3JRdWUyQ2Fzb0NvbnRyYXJpbzAodmFsb3I6IG51bWJlcikge1xuICByZXR1cm4gdmFsb3IgPCAyID8gMCA6IDExIC0gdmFsb3I7XG59XG5cbmZ1bmN0aW9uIG1vZCh2YWxvcjogc3RyaW5nLCBtdWx0aXBsaWNhZG9yZXMgPSBzZXJpZSgyLCA5KSwgZGl2aXNvciA9IDExKSB7XG4gIGlmIChlSW5kZWZpbmlkbyhkaXZpc29yKSkge1xuICAgIGRpdmlzb3IgPSAxMTtcbiAgfVxuXG4gIGlmIChlSW5kZWZpbmlkbyhtdWx0aXBsaWNhZG9yZXMpKSB7XG4gICAgbXVsdGlwbGljYWRvcmVzID0gc2VyaWUoMiwgOSk7XG4gIH1cblxuICBsZXQgaSA9IDA7XG5cbiAgcmV0dXJuIHZhbG9yLnNwbGl0KCcnKS5yZWR1Y2VSaWdodChmdW5jdGlvbiAoYW50ZXJpb3I6IG51bWJlciwgYXR1YWw6IHN0cmluZykge1xuICAgIGlmIChpID4gbXVsdGlwbGljYWRvcmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgIGkgPSAwO1xuICAgIH1cblxuICAgIHJldHVybiAobXVsdGlwbGljYWRvcmVzW2krK10gKiBwYXJzZUludChhdHVhbCwgMTApKSArIGFudGVyaW9yO1xuICB9LCAwKSAlIGRpdmlzb3I7XG59XG5cbmZ1bmN0aW9uIGNhbGN1bG9Ucml2aWFsR2VuZXJhdGUodmFsb3I6IGFueSwgYmFzZTogYW55ID0gbnVsbCwgdmFsaWRhclRhbWFuaG8gPSBmYWxzZSkge1xuICBpZiAoIXZhbGlkYXJUYW1hbmhvICYmIHRhbWFuaG9OYW9FKHZhbG9yKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoZUluZGVmaW5pZG8oYmFzZSkpIHtcbiAgICBiYXNlID0gcHJpbWVpcm9zKHZhbG9yKTtcbiAgfVxuICBpZiAoIWJhc2UpIHtcbiAgICBiYXNlID0gcHJpbWVpcm9zKHZhbG9yKTtcbiAgfVxuXG4gIGNvbnN0IGRpZ2l0byA9IHN1YnN0cmFjYW9Qb3IxMVNlTWFpb3JRdWUyQ2Fzb0NvbnRyYXJpbzAobW9kKGJhc2UpKTtcblxuICByZXR1cm4gYmFzZSArIGRpZ2l0bztcbn1cblxuZnVuY3Rpb24gbmFvQ29tZWNhQ29tKHN0cmluZzogYW55LCB2YWxvcjogc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcuc3Vic3RyaW5nKDAsIHZhbG9yLmxlbmd0aCkgIT09IHZhbG9yO1xufVxuXG5mdW5jdGlvbiBlbnRyZSh2YWxvcjogc3RyaW5nIHwgbnVtYmVyLCBsaW1pdGVJbmZlcmlvcjogbnVtYmVyLCBsaW1pdGVTdXBlcmlvcjogbnVtYmVyKSB7XG4gIGlmICh0eXBlb2YgdmFsb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsb3IgPSBwYXJzZUludCh2YWxvciwgMTApO1xuICB9XG5cbiAgcmV0dXJuIHZhbG9yID49IGxpbWl0ZUluZmVyaW9yICYmIHZhbG9yIDw9IGxpbWl0ZVN1cGVyaW9yO1xufVxuXG5cbmZ1bmN0aW9uIGxvb2t1cChpZTogYW55KSB7XG4gIGNvbnN0IHJlc3VsdGFkbyA9IFtdO1xuXG4gIGZvciAoY29uc3QgZXN0YWRvIGluIGZ1bmNvZXMpIHtcbiAgICBpZiAoZnVuY29lc1tlc3RhZG9dKGllKSkge1xuICAgICAgcmVzdWx0YWRvLnB1c2goZXN0YWRvKTtcbiAgICB9XG4gIH1cblxuICBpZiAodGFtYW5ob0UocmVzdWx0YWRvLCAwKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVzdWx0YWRvO1xuICB9XG59XG5cbiJdfQ==
|