ctt-babylon 0.22.114 → 0.22.115
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/external/core/lis-c4-txt-des-cta/lis-c4-txt-des-cta.component.mjs +126 -102
- package/fesm2022/ctt-babylon.mjs +125 -101
- package/fesm2022/ctt-babylon.mjs.map +1 -1
- package/lib/components/external/core/lis-c4-txt-des-cta/lis-c4-txt-des-cta.component.d.ts +17 -3
- package/package.json +1 -1
package/esm2022/lib/components/external/core/lis-c4-txt-des-cta/lis-c4-txt-des-cta.component.mjs
CHANGED
|
@@ -15,46 +15,15 @@
|
|
|
15
15
|
* - filter -> tipo principal (ej: hoteles, apartamentos, villas, etc.)
|
|
16
16
|
* - destination -> destino (por nombre)
|
|
17
17
|
* - brand -> marca / grupo
|
|
18
|
+
* - experience -> experiencia asociada
|
|
19
|
+
* - services -> servicios disponibles
|
|
18
20
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* 3. Al navegar con query params:
|
|
26
|
-
* - Se leen los slugs de la URL
|
|
27
|
-
* - Se resuelven a labels reales cuando los items están disponibles
|
|
28
|
-
* 4. El filtrado interno SIEMPRE compara por slug (no por texto crudo).
|
|
29
|
-
*
|
|
30
|
-
* NORMALIZACIÓN
|
|
31
|
-
* -------------
|
|
32
|
-
* - Se usa `Utils.toSlug()` para normalizar textos (tildes, espacios, símbolos).
|
|
33
|
-
* - Para el filtro principal (`filter`) se aplica además una singularización genérica
|
|
34
|
-
* (hoteles -> hotel, apartamentos -> apartamento), SIN traducciones ni diccionarios.
|
|
35
|
-
*
|
|
36
|
-
* EXTENDER CON NUEVOS FILTROS
|
|
37
|
-
* --------------------------
|
|
38
|
-
* Para añadir un nuevo filtro (ej: category, experience, rating):
|
|
39
|
-
*
|
|
40
|
-
* 1. Añadir un nuevo queryParam (ej: `category`)
|
|
41
|
-
* 2. Crear:
|
|
42
|
-
* - selectedCategory
|
|
43
|
-
* - categoryOptions
|
|
44
|
-
* - categorySlugToLabel / categoryLabelToSlug
|
|
45
|
-
* 3. Construir opciones en `buildFilterOptions()`
|
|
46
|
-
* 4. Resolver desde URL en `resolvePendingFromMaps()`
|
|
47
|
-
* 5. Aplicar condición en `filteredItems`
|
|
48
|
-
* 6. Sincronizar en `syncQueryParams()`
|
|
49
|
-
*
|
|
50
|
-
* IMPORTANTE
|
|
51
|
-
* ----------
|
|
52
|
-
* - NUNCA comparar por texto directo.
|
|
53
|
-
* - NUNCA meter valores crudos en la URL.
|
|
54
|
-
* - Todo filtro nuevo debe pasar por slug.
|
|
55
|
-
*
|
|
56
|
-
* Con esto el componente es reutilizable entre proyectos,
|
|
57
|
-
* idiomas y configuraciones distintas sin cambios estructurales.
|
|
21
|
+
* ACTUALIZACIÓN: BÚSQUEDA FACETADA (Faceted Search)
|
|
22
|
+
* -------------------------------------------------
|
|
23
|
+
* Ahora el componente actualiza dinámicamente las opciones de los desplegables.
|
|
24
|
+
* Al seleccionar un filtro, los demás ocultan las opciones que no tendrían resultados
|
|
25
|
+
* cruzados con la selección actual. Para evitar bloqueos, siempre se mantiene visible
|
|
26
|
+
* la opción que esté actualmente seleccionada.
|
|
58
27
|
*/
|
|
59
28
|
import { CommonModule } from '@angular/common';
|
|
60
29
|
import { ChangeDetectorRef, Component, inject, Input, ViewEncapsulation, } from '@angular/core';
|
|
@@ -77,15 +46,22 @@ export class LisC4TxtDesCtaComponent {
|
|
|
77
46
|
this.hideServicesFilter = false;
|
|
78
47
|
this.tagName = 'LisC4TxtDesCta';
|
|
79
48
|
// UI labels seleccionados (lo que se muestra en los selects)
|
|
80
|
-
|
|
81
|
-
this.
|
|
82
|
-
this.
|
|
83
|
-
this.selectedBrand = ''; // => queryParam "brand"
|
|
49
|
+
this.selectedHotelType = '';
|
|
50
|
+
this.selectedDestination = '';
|
|
51
|
+
this.selectedBrand = '';
|
|
84
52
|
this.selectedExperience = '';
|
|
53
|
+
// Opciones Dinámicas (Las que se muestran en el HTML y se actualizan al filtrar)
|
|
85
54
|
this.hotelTypeOptions = [];
|
|
86
55
|
this.destinationOptions = [];
|
|
87
56
|
this.brandOptions = [];
|
|
88
57
|
this.experienceOptions = [];
|
|
58
|
+
this.availableServices = [];
|
|
59
|
+
// Opciones Base (Listas maestras generadas al cargar, nunca se reducen)
|
|
60
|
+
this.baseHotelTypeOptions = [];
|
|
61
|
+
this.baseDestinationOptions = [];
|
|
62
|
+
this.baseBrandOptions = [];
|
|
63
|
+
this.baseExperienceOptions = [];
|
|
64
|
+
this.baseAvailableServices = [];
|
|
89
65
|
this.pendingFilterSlug = null;
|
|
90
66
|
this.pendingDestinationSlug = null;
|
|
91
67
|
this.pendingBrandSlug = null;
|
|
@@ -104,7 +80,6 @@ export class LisC4TxtDesCtaComponent {
|
|
|
104
80
|
this.router = inject(Router);
|
|
105
81
|
this.cdr = inject(ChangeDetectorRef);
|
|
106
82
|
this.isSyncingFromUrl = false;
|
|
107
|
-
this.availableServices = [];
|
|
108
83
|
this.selectedServices = new Set();
|
|
109
84
|
this.isServicesMenuOpen = false;
|
|
110
85
|
}
|
|
@@ -121,8 +96,6 @@ export class LisC4TxtDesCtaComponent {
|
|
|
121
96
|
this.pendingBrandSlug = params.get('brand');
|
|
122
97
|
this.pendingExperienceSlug = params.get('experience');
|
|
123
98
|
this.resolvePendingFromMaps();
|
|
124
|
-
// Si aún no hay maps (items no llegó), intenta fallback (mantener algo decente)
|
|
125
|
-
// Nota: no navegamos aquí.
|
|
126
99
|
if (!this.selectedHotelType && filterSlug)
|
|
127
100
|
this.selectedHotelType = filterSlug;
|
|
128
101
|
if (!this.selectedDestination && destinationSlug)
|
|
@@ -131,6 +104,7 @@ export class LisC4TxtDesCtaComponent {
|
|
|
131
104
|
this.selectedBrand = brandSlug;
|
|
132
105
|
if (!this.selectedExperience && experienceSlug)
|
|
133
106
|
this.selectedExperience = experienceSlug;
|
|
107
|
+
this.updateDynamicOptions(); // Actualiza los listados dinámicos con la hidratación
|
|
134
108
|
this.cdr.markForCheck();
|
|
135
109
|
queueMicrotask(() => (this.isSyncingFromUrl = false));
|
|
136
110
|
});
|
|
@@ -138,7 +112,6 @@ export class LisC4TxtDesCtaComponent {
|
|
|
138
112
|
ngOnChanges(changes) {
|
|
139
113
|
if (changes['items']) {
|
|
140
114
|
this.buildFilterOptions();
|
|
141
|
-
// rehidrata desde URL ya con maps listos (sin navegar)
|
|
142
115
|
const qp = this.route.snapshot.queryParamMap;
|
|
143
116
|
const filterSlug = qp.get('filter') ?? '';
|
|
144
117
|
const destinationSlug = qp.get('destination') ?? '';
|
|
@@ -153,6 +126,7 @@ export class LisC4TxtDesCtaComponent {
|
|
|
153
126
|
this.selectedExperience =
|
|
154
127
|
this.experienceSlugToLabel.get(experienceSlug) ?? '';
|
|
155
128
|
this.forceOptionMatch();
|
|
129
|
+
this.updateDynamicOptions(); // Vuelve a filtrar las opciones según la nueva hidratación
|
|
156
130
|
this.cdr.markForCheck();
|
|
157
131
|
this.cdr.detectChanges();
|
|
158
132
|
queueMicrotask(() => (this.isSyncingFromUrl = false));
|
|
@@ -164,16 +138,17 @@ export class LisC4TxtDesCtaComponent {
|
|
|
164
138
|
buildFilterOptions() {
|
|
165
139
|
const items = this.items ?? [];
|
|
166
140
|
const experiences = this.experiences ?? [];
|
|
167
|
-
|
|
141
|
+
// Llenamos las listas MAESTRAS
|
|
142
|
+
this.baseHotelTypeOptions = Array.from(new Set(items
|
|
168
143
|
.map((i) => i?.hoteltype)
|
|
169
144
|
.filter(Boolean)
|
|
170
145
|
.map((v) => v.trim()))).sort((a, b) => a.localeCompare(b));
|
|
171
|
-
this.
|
|
146
|
+
this.baseDestinationOptions = Array.from(new Set(items
|
|
172
147
|
.flatMap((i) => (i?.destinations ?? []).map((d) => d?.name))
|
|
173
148
|
.filter(Boolean)
|
|
174
149
|
.map((v) => v.trim()))).sort((a, b) => a.localeCompare(b));
|
|
175
|
-
this.
|
|
176
|
-
this.
|
|
150
|
+
this.baseBrandOptions = Array.from(new Set(items.map((i) => this.getItemBrand(i)).filter(Boolean))).sort((a, b) => a.localeCompare(b));
|
|
151
|
+
this.baseExperienceOptions = Array.from(new Set(experiences.map((e) => e.nameIdentifier)?.filter(Boolean))).sort((a, b) => a.localeCompare(b));
|
|
177
152
|
// Reset maps
|
|
178
153
|
this.filterSlugToLabel.clear();
|
|
179
154
|
this.destinationSlugToLabel.clear();
|
|
@@ -183,39 +158,34 @@ export class LisC4TxtDesCtaComponent {
|
|
|
183
158
|
this.destinationLabelToSlug.clear();
|
|
184
159
|
this.brandLabelToSlug.clear();
|
|
185
160
|
this.experienceLabelToSlug.clear();
|
|
186
|
-
// used sets para sufijos -2 -3...
|
|
187
161
|
const usedFilter = new Set();
|
|
188
162
|
const usedDest = new Set();
|
|
189
163
|
const usedBrand = new Set();
|
|
190
164
|
const usedExperience = new Set();
|
|
191
|
-
|
|
192
|
-
for (const label of this.hotelTypeOptions) {
|
|
165
|
+
for (const label of this.baseHotelTypeOptions) {
|
|
193
166
|
const base = this.canonicalSlug(label);
|
|
194
167
|
const slug = Utils.uniqueSlug(base, usedFilter);
|
|
195
168
|
this.filterSlugToLabel.set(slug, label);
|
|
196
169
|
this.filterLabelToSlug.set(label, slug);
|
|
197
170
|
}
|
|
198
|
-
|
|
199
|
-
for (const label of this.destinationOptions) {
|
|
171
|
+
for (const label of this.baseDestinationOptions) {
|
|
200
172
|
const base = Utils.toSlug(label) || 'destination';
|
|
201
173
|
const slug = Utils.uniqueSlug(base, usedDest);
|
|
202
174
|
this.destinationSlugToLabel.set(slug, label);
|
|
203
175
|
this.destinationLabelToSlug.set(label, slug);
|
|
204
176
|
}
|
|
205
|
-
|
|
206
|
-
for (const label of this.brandOptions) {
|
|
177
|
+
for (const label of this.baseBrandOptions) {
|
|
207
178
|
const base = Utils.toSlug(label) || 'brand';
|
|
208
179
|
const slug = Utils.uniqueSlug(base, usedBrand);
|
|
209
180
|
this.brandSlugToLabel.set(slug, label);
|
|
210
181
|
this.brandLabelToSlug.set(label, slug);
|
|
211
182
|
}
|
|
212
|
-
for (const label of this.
|
|
183
|
+
for (const label of this.baseExperienceOptions) {
|
|
213
184
|
const base = Utils.toSlug(label) || 'experience';
|
|
214
185
|
const slug = Utils.uniqueSlug(base, usedExperience);
|
|
215
186
|
this.experienceSlugToLabel.set(slug, label);
|
|
216
187
|
this.experienceLabelToSlug.set(label, slug);
|
|
217
188
|
}
|
|
218
|
-
const allServices = new Set();
|
|
219
189
|
const allServicesNames = new Set();
|
|
220
190
|
const filteredServicesNames = new Set();
|
|
221
191
|
let requestedClasses = [];
|
|
@@ -226,14 +196,12 @@ export class LisC4TxtDesCtaComponent {
|
|
|
226
196
|
.filter(Boolean);
|
|
227
197
|
}
|
|
228
198
|
items.forEach((it) => {
|
|
229
|
-
// Soportamos camelCase o snake_case según como llegue de la API
|
|
230
199
|
const services = it?.servicesService || it?.services_service;
|
|
231
200
|
if (Array.isArray(services)) {
|
|
232
201
|
services.forEach((s) => {
|
|
233
202
|
if (s?.name) {
|
|
234
203
|
const name = s.name.trim();
|
|
235
204
|
allServicesNames.add(name);
|
|
236
|
-
// Si hay clases solicitadas, validamos contra el atributo 'class'
|
|
237
205
|
if (requestedClasses.length > 0 && s.class) {
|
|
238
206
|
if (requestedClasses.includes(s.class.trim().toLowerCase())) {
|
|
239
207
|
filteredServicesNames.add(name);
|
|
@@ -243,13 +211,18 @@ export class LisC4TxtDesCtaComponent {
|
|
|
243
211
|
});
|
|
244
212
|
}
|
|
245
213
|
});
|
|
246
|
-
// 3. Decidimos qué lista mostrar
|
|
247
214
|
let finalServices = Array.from(filteredServicesNames);
|
|
248
|
-
// Si no se pasaron clases por Input, o si lo que se pasó NO hizo match con nada, mostramos TODOS
|
|
249
215
|
if (requestedClasses.length === 0 || finalServices.length === 0) {
|
|
250
216
|
finalServices = Array.from(allServicesNames);
|
|
251
217
|
}
|
|
252
|
-
this.
|
|
218
|
+
this.baseAvailableServices = finalServices.sort((a, b) => a.localeCompare(b));
|
|
219
|
+
// Inicializamos las opciones de UI con las maestras y luego filtramos
|
|
220
|
+
this.hotelTypeOptions = [...this.baseHotelTypeOptions];
|
|
221
|
+
this.destinationOptions = [...this.baseDestinationOptions];
|
|
222
|
+
this.brandOptions = [...this.baseBrandOptions];
|
|
223
|
+
this.experienceOptions = [...this.baseExperienceOptions];
|
|
224
|
+
this.availableServices = [...this.baseAvailableServices];
|
|
225
|
+
this.updateDynamicOptions();
|
|
253
226
|
}
|
|
254
227
|
getItemBrand(it) {
|
|
255
228
|
if (this.additional1LikeMarca)
|
|
@@ -257,13 +230,17 @@ export class LisC4TxtDesCtaComponent {
|
|
|
257
230
|
return (it?.marca ?? it?.brand ?? it?.group ?? '').trim();
|
|
258
231
|
}
|
|
259
232
|
// ----------------------
|
|
260
|
-
// FILTRADO
|
|
233
|
+
// LÓGICA DE FILTRADO BASE (FACETED SEARCH)
|
|
261
234
|
// ----------------------
|
|
262
|
-
|
|
235
|
+
/**
|
|
236
|
+
* Obtiene los items coincidentes excluyendo uno de los filtros.
|
|
237
|
+
* Es clave para calcular qué opciones deben quedar disponibles en un desplegable
|
|
238
|
+
* sin que su propia selección previa las borre por completo.
|
|
239
|
+
*/
|
|
240
|
+
getItemsMatching(excludeFilter) {
|
|
263
241
|
const items = this.items ?? [];
|
|
264
|
-
if (!this.showFilters)
|
|
242
|
+
if (!this.showFilters)
|
|
265
243
|
return items;
|
|
266
|
-
}
|
|
267
244
|
let validHotelIdsForExperience = [];
|
|
268
245
|
if (this.selectedExperience && this.experiences) {
|
|
269
246
|
const targetExp = this.experiences.find((e) => e.nameIdentifier === this.selectedExperience);
|
|
@@ -275,25 +252,29 @@ export class LisC4TxtDesCtaComponent {
|
|
|
275
252
|
const itemHotelType = it?.hoteltype ?? '';
|
|
276
253
|
const itemBrand = this.getItemBrand(it);
|
|
277
254
|
const itemId = it?.id;
|
|
278
|
-
const hotelTypeOk =
|
|
255
|
+
const hotelTypeOk = excludeFilter === 'hotelType' ||
|
|
256
|
+
!this.selectedHotelType ||
|
|
279
257
|
this.canonicalSlug(itemHotelType) ===
|
|
280
258
|
this.canonicalSlug(this.selectedHotelType);
|
|
281
|
-
const destinationOk =
|
|
259
|
+
const destinationOk = excludeFilter === 'destination' ||
|
|
260
|
+
!this.selectedDestination ||
|
|
282
261
|
(it?.destinations ?? []).some((d) => Utils.toSlug(d?.name ?? '') ===
|
|
283
262
|
Utils.toSlug(this.selectedDestination));
|
|
284
|
-
const brandOk =
|
|
263
|
+
const brandOk = excludeFilter === 'brand' ||
|
|
264
|
+
!this.selectedBrand ||
|
|
285
265
|
Utils.toSlug(itemBrand) === Utils.toSlug(this.selectedBrand);
|
|
286
|
-
const experienceOk =
|
|
266
|
+
const experienceOk = excludeFilter === 'experience' ||
|
|
267
|
+
!this.selectedExperience ||
|
|
287
268
|
validHotelIdsForExperience.includes(itemId);
|
|
288
|
-
|
|
289
|
-
|
|
269
|
+
const servicesOk = excludeFilter === 'services' ||
|
|
270
|
+
this.selectedServices.size === 0 ||
|
|
290
271
|
Array.from(this.selectedServices).every((selectedSrv) => {
|
|
291
|
-
const itemServices = it?.servicesService
|
|
272
|
+
const itemServices = it?.servicesService ||
|
|
273
|
+
it?.services_service;
|
|
292
274
|
if (!Array.isArray(itemServices))
|
|
293
275
|
return false;
|
|
294
276
|
return itemServices.some((s) => s?.name?.trim() === selectedSrv);
|
|
295
277
|
});
|
|
296
|
-
// Retorna validando también servicesOk
|
|
297
278
|
return (hotelTypeOk &&
|
|
298
279
|
destinationOk &&
|
|
299
280
|
brandOk &&
|
|
@@ -301,35 +282,93 @@ export class LisC4TxtDesCtaComponent {
|
|
|
301
282
|
servicesOk);
|
|
302
283
|
});
|
|
303
284
|
}
|
|
285
|
+
get filteredItems() {
|
|
286
|
+
return this.getItemsMatching('none');
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Actualiza los arrays de opciones para ocultar aquellas que devolverían 0 resultados.
|
|
290
|
+
*/
|
|
291
|
+
updateDynamicOptions() {
|
|
292
|
+
if (!this.items || this.items.length === 0)
|
|
293
|
+
return;
|
|
294
|
+
// -- Destinos --
|
|
295
|
+
const itemsForDest = this.getItemsMatching('destination');
|
|
296
|
+
const validDests = new Set(itemsForDest
|
|
297
|
+
.flatMap((i) => (i?.destinations ?? []).map((d) => d?.name))
|
|
298
|
+
.filter(Boolean)
|
|
299
|
+
.map((v) => v.trim()));
|
|
300
|
+
this.destinationOptions = this.baseDestinationOptions.filter((opt) => validDests.has(opt) || this.selectedDestination === opt);
|
|
301
|
+
// -- Marcas --
|
|
302
|
+
const itemsForBrand = this.getItemsMatching('brand');
|
|
303
|
+
const validBrands = new Set(itemsForBrand.map((i) => this.getItemBrand(i)).filter(Boolean));
|
|
304
|
+
this.brandOptions = this.baseBrandOptions.filter((opt) => validBrands.has(opt) || this.selectedBrand === opt);
|
|
305
|
+
// -- Tipos de Hotel --
|
|
306
|
+
const itemsForHotelType = this.getItemsMatching('hotelType');
|
|
307
|
+
const validHotelTypes = new Set(itemsForHotelType
|
|
308
|
+
.map((i) => i?.hoteltype)
|
|
309
|
+
.filter(Boolean)
|
|
310
|
+
.map((v) => v.trim()));
|
|
311
|
+
this.hotelTypeOptions = this.baseHotelTypeOptions.filter((opt) => validHotelTypes.has(opt) || this.selectedHotelType === opt);
|
|
312
|
+
// -- Experiencias --
|
|
313
|
+
const itemsForExp = this.getItemsMatching('experience');
|
|
314
|
+
const validExpIds = new Set(itemsForExp.map((i) => i?.id));
|
|
315
|
+
this.experienceOptions = this.baseExperienceOptions.filter((opt) => {
|
|
316
|
+
if (this.selectedExperience === opt)
|
|
317
|
+
return true;
|
|
318
|
+
const targetExp = this.experiences?.find((e) => e.nameIdentifier === opt);
|
|
319
|
+
if (!targetExp?.hotels)
|
|
320
|
+
return false;
|
|
321
|
+
return targetExp.hotels.some((h) => validExpIds.has(h.id));
|
|
322
|
+
});
|
|
323
|
+
// -- Servicios --
|
|
324
|
+
const itemsForServices = this.getItemsMatching('services');
|
|
325
|
+
const validServices = new Set();
|
|
326
|
+
itemsForServices.forEach((it) => {
|
|
327
|
+
const services = it?.servicesService || it?.services_service;
|
|
328
|
+
if (Array.isArray(services)) {
|
|
329
|
+
services.forEach((s) => {
|
|
330
|
+
if (s?.name) {
|
|
331
|
+
validServices.add(s.name.trim());
|
|
332
|
+
}
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
});
|
|
336
|
+
this.availableServices = this.baseAvailableServices.filter((opt) => validServices.has(opt) || this.selectedServices.has(opt));
|
|
337
|
+
}
|
|
304
338
|
get hasActiveFilters() {
|
|
305
339
|
return !!(this.selectedHotelType ||
|
|
306
340
|
this.selectedDestination ||
|
|
307
341
|
this.selectedBrand ||
|
|
308
|
-
this.selectedExperience
|
|
342
|
+
this.selectedExperience ||
|
|
343
|
+
this.selectedServices.size > 0);
|
|
309
344
|
}
|
|
310
345
|
// ----------------------
|
|
311
346
|
// HANDLERS UI
|
|
312
347
|
// ----------------------
|
|
313
348
|
onHotelTypeChange(value) {
|
|
314
349
|
this.selectedHotelType = value ?? '';
|
|
350
|
+
this.updateDynamicOptions();
|
|
315
351
|
if (this.isSyncingFromUrl)
|
|
316
352
|
return;
|
|
317
353
|
this.syncQueryParams();
|
|
318
354
|
}
|
|
319
355
|
onDestinationChange(value) {
|
|
320
356
|
this.selectedDestination = value ?? '';
|
|
357
|
+
this.updateDynamicOptions();
|
|
321
358
|
if (this.isSyncingFromUrl)
|
|
322
359
|
return;
|
|
323
360
|
this.syncQueryParams();
|
|
324
361
|
}
|
|
325
362
|
onBrandChange(value) {
|
|
326
363
|
this.selectedBrand = value ?? '';
|
|
364
|
+
this.updateDynamicOptions();
|
|
327
365
|
if (this.isSyncingFromUrl)
|
|
328
366
|
return;
|
|
329
367
|
this.syncQueryParams();
|
|
330
368
|
}
|
|
331
369
|
onExperienceChange(value) {
|
|
332
370
|
this.selectedExperience = value ?? '';
|
|
371
|
+
this.updateDynamicOptions();
|
|
333
372
|
if (this.isSyncingFromUrl)
|
|
334
373
|
return;
|
|
335
374
|
this.syncQueryParams();
|
|
@@ -340,6 +379,7 @@ export class LisC4TxtDesCtaComponent {
|
|
|
340
379
|
this.selectedBrand = '';
|
|
341
380
|
this.selectedExperience = '';
|
|
342
381
|
this.selectedServices.clear();
|
|
382
|
+
this.updateDynamicOptions();
|
|
343
383
|
this.syncQueryParams(true);
|
|
344
384
|
}
|
|
345
385
|
toggleService(service) {
|
|
@@ -351,6 +391,8 @@ export class LisC4TxtDesCtaComponent {
|
|
|
351
391
|
newSelected.add(service);
|
|
352
392
|
}
|
|
353
393
|
this.selectedServices = newSelected;
|
|
394
|
+
this.updateDynamicOptions();
|
|
395
|
+
// Nota: Servicios no se sincan con URL históricamente, pero re-evaluamos dinámicamente.
|
|
354
396
|
}
|
|
355
397
|
toggleServicesMenu() {
|
|
356
398
|
this.isServicesMenuOpen = !this.isServicesMenuOpen;
|
|
@@ -360,7 +402,7 @@ export class LisC4TxtDesCtaComponent {
|
|
|
360
402
|
// ----------------------
|
|
361
403
|
syncQueryParams(clearAll = false) {
|
|
362
404
|
const qp = clearAll
|
|
363
|
-
? { filter: null, destination: null, brand: null }
|
|
405
|
+
? { filter: null, destination: null, brand: null, experience: null }
|
|
364
406
|
: {
|
|
365
407
|
filter: this.selectedHotelType
|
|
366
408
|
? (this.filterLabelToSlug.get(this.selectedHotelType) ??
|
|
@@ -384,29 +426,20 @@ export class LisC4TxtDesCtaComponent {
|
|
|
384
426
|
});
|
|
385
427
|
this.cdr.markForCheck();
|
|
386
428
|
}
|
|
387
|
-
// ----------------------
|
|
388
|
-
// CANONICAL SLUG (sin traductor)
|
|
389
|
-
// - Garantiza singular/plural genérico
|
|
390
|
-
// ----------------------
|
|
391
429
|
canonicalSlug(value) {
|
|
392
430
|
let s = Utils.toSlug(value);
|
|
393
431
|
if (!s)
|
|
394
432
|
return '';
|
|
395
|
-
// Regla -es (hoteles -> hotel, luces -> luz, peces -> pez)
|
|
396
433
|
if (s.length > 3 && s.endsWith('es')) {
|
|
397
434
|
const base = s.slice(0, -2);
|
|
398
435
|
if (base.endsWith('c'))
|
|
399
436
|
return base.slice(0, -1) + 'z';
|
|
400
437
|
return base;
|
|
401
438
|
}
|
|
402
|
-
// Regla -s (apartamentos -> apartamento)
|
|
403
439
|
if (s.length > 3 && s.endsWith('s'))
|
|
404
440
|
return s.slice(0, -1);
|
|
405
441
|
return s;
|
|
406
442
|
}
|
|
407
|
-
// ----------------------
|
|
408
|
-
// UI utils
|
|
409
|
-
// ----------------------
|
|
410
443
|
getKeysArray(count) {
|
|
411
444
|
return count ? Array.from({ length: count }) : [];
|
|
412
445
|
}
|
|
@@ -432,7 +465,6 @@ export class LisC4TxtDesCtaComponent {
|
|
|
432
465
|
this.pendingFilterSlug = null;
|
|
433
466
|
}
|
|
434
467
|
}
|
|
435
|
-
// DESTINATION
|
|
436
468
|
if (this.pendingDestinationSlug != null) {
|
|
437
469
|
const slug = Utils.toSlug(this.pendingDestinationSlug);
|
|
438
470
|
const label = this.destinationSlugToLabel.get(slug);
|
|
@@ -441,7 +473,6 @@ export class LisC4TxtDesCtaComponent {
|
|
|
441
473
|
this.pendingDestinationSlug = null;
|
|
442
474
|
}
|
|
443
475
|
}
|
|
444
|
-
// BRAND
|
|
445
476
|
if (this.pendingBrandSlug != null) {
|
|
446
477
|
const slug = Utils.toSlug(this.pendingBrandSlug);
|
|
447
478
|
const label = this.brandSlugToLabel.get(slug);
|
|
@@ -450,7 +481,6 @@ export class LisC4TxtDesCtaComponent {
|
|
|
450
481
|
this.pendingBrandSlug = null;
|
|
451
482
|
}
|
|
452
483
|
}
|
|
453
|
-
//EXPERIENCES
|
|
454
484
|
if (this.pendingExperienceSlug != null) {
|
|
455
485
|
const slug = Utils.toSlug(this.pendingExperienceSlug);
|
|
456
486
|
const label = this.experienceSlugToLabel.get(slug);
|
|
@@ -463,46 +493,40 @@ export class LisC4TxtDesCtaComponent {
|
|
|
463
493
|
forceOptionMatch() {
|
|
464
494
|
if (this.selectedHotelType) {
|
|
465
495
|
const wanted = this.canonicalSlug(this.selectedHotelType);
|
|
466
|
-
const match = this.
|
|
496
|
+
const match = this.baseHotelTypeOptions.find((o) => this.canonicalSlug(o) === wanted);
|
|
467
497
|
this.selectedHotelType = match ?? '';
|
|
468
498
|
}
|
|
469
499
|
if (this.selectedBrand) {
|
|
470
500
|
const wanted = Utils.toSlug(this.selectedBrand);
|
|
471
|
-
const match = this.
|
|
501
|
+
const match = this.baseBrandOptions.find((o) => Utils.toSlug(o) === wanted);
|
|
472
502
|
this.selectedBrand = match ?? '';
|
|
473
503
|
}
|
|
474
504
|
if (this.selectedDestination) {
|
|
475
505
|
const wanted = Utils.toSlug(this.selectedDestination);
|
|
476
|
-
const match = this.
|
|
506
|
+
const match = this.baseDestinationOptions.find((o) => Utils.toSlug(o) === wanted);
|
|
477
507
|
this.selectedDestination = match ?? '';
|
|
478
508
|
}
|
|
479
509
|
if (this.selectedExperience) {
|
|
480
510
|
const wanted = Utils.toSlug(this.selectedExperience);
|
|
481
|
-
const match = this.
|
|
511
|
+
const match = this.baseExperienceOptions.find((o) => Utils.toSlug(o) === wanted);
|
|
482
512
|
this.selectedExperience = match ?? '';
|
|
483
513
|
}
|
|
484
514
|
}
|
|
485
515
|
getButtonUrl(btn, item, index) {
|
|
486
516
|
const urlBase = btn.url || '';
|
|
487
|
-
// Si no es el primer botón, devolvemos la URL base sin alterar
|
|
488
517
|
if (index !== 0) {
|
|
489
518
|
return urlBase;
|
|
490
519
|
}
|
|
491
|
-
// Buscamos el identificador (priorizamos nameIdentifier, luego name para destinos)
|
|
492
520
|
const identifier = item?.nameIdentifier ?? item?.name_identifier ?? item?.name;
|
|
493
521
|
if (!identifier) {
|
|
494
522
|
return urlBase;
|
|
495
523
|
}
|
|
496
524
|
const separator = urlBase.includes('?') ? '&' : '?';
|
|
497
|
-
// 1. Lógica para EXPERIENCIAS
|
|
498
|
-
// Entra si el type es 'experience' o si tiene un nameIdentifier pero no tiene type (fallback)
|
|
499
525
|
if (item?.type === 'experience' ||
|
|
500
526
|
(!item?.type && (item?.nameIdentifier || item?.name_identifier))) {
|
|
501
527
|
return `${urlBase}${separator}experience=${identifier}`;
|
|
502
528
|
}
|
|
503
|
-
// 2. Lógica para DESTINOS
|
|
504
529
|
if (item?.type === 'destination') {
|
|
505
|
-
// Usamos tu Utils para normalizar espacios y mayúsculas (ej: "Andorra la Vella" -> "andorra-la-vella")
|
|
506
530
|
const destinationSlug = Utils.toSlug(identifier);
|
|
507
531
|
return `${urlBase}${separator}destination=${destinationSlug}`;
|
|
508
532
|
}
|
|
@@ -546,4 +570,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
546
570
|
}], textColors: [{
|
|
547
571
|
type: Input
|
|
548
572
|
}] } });
|
|
549
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzLWM0LXR4dC1kZXMtY3RhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhYnlsb24vc3JjL2xpYi9jb21wb25lbnRzL2V4dGVybmFsL2NvcmUvbGlzLWM0LXR4dC1kZXMtY3RhL2xpcy1jNC10eHQtZGVzLWN0YS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYWJ5bG9uL3NyYy9saWIvY29tcG9uZW50cy9leHRlcm5hbC9jb3JlL2xpcy1jNC10eHQtZGVzLWN0YS9saXMtYzQtdHh0LWRlcy1jdGEuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlERztBQUVILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxNQUFNLEVBQ04sS0FBSyxFQUtMLGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQVNoRyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDMUMsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDakYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0seUNBQXlDLENBQUM7Ozs7QUFpQnpGLE1BQU0sT0FBTyx1QkFBdUI7SUFicEM7UUFpQmEseUJBQW9CLEdBQWEsS0FBSyxDQUFDO1FBQ3ZDLHFC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LElBQUksV0FDNUI7d0JBQ0wsWUFBWTt3QkFDWix3QkFBd0I7d0JBQ3hCLFdBQVc7d0JBQ1gsOEJBQThCO3FCQUNqQzs4QkFLUSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGlzQzRUeHREZXNDdGFDb21wb25lbnRcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqXG4gKiBDb21wb25lbnRlIGRlIGxpc3RhZG8gY29uIHNpc3RlbWEgZGUgZmlsdHJvcyBzaW5jcm9uaXphZG8gY29uIGxhIFVSTC5cbiAqXG4gKiBGSUxPU09Gw41BXG4gKiAtLS0tLS0tLS0tXG4gKiAtIEVsIGNvbXBvbmVudGUgZXMgQUdOw5NTVElDTyBhbCBkb21pbmlvIChubyBoYXJkY29kZWEgXCJob3RlbFwiLCBcImFwYXJ0YW1lbnRvXCIsIG1hcmNhcywgZXRjLikuXG4gKiAtIFRvZG8gbG8gcXVlIHNlIGZpbHRyYSBwcm92aWVuZSBkZSBTVFJJTkdTIGVudmlhZG9zIHBvciBiYWNrZW5kICh5YSB0cmFkdWNpZG9zKS5cbiAqIC0gTGEgVVJMIHNpZW1wcmUgdHJhYmFqYSBjb24gU0xVR1Mgbm9ybWFsaXphZG9zIChzaW4gdGlsZGVzLCBlc3BhY2lvcyBuaSBjYXJhY3RlcmVzIHJhcm9zKS5cbiAqXG4gKiBGSUxUUk9TIFNPUE9SVEFET1MgKGFjdHVhbGVzKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIC0gZmlsdGVyICAgICAgIC0+IHRpcG8gcHJpbmNpcGFsIChlajogaG90ZWxlcywgYXBhcnRhbWVudG9zLCB2aWxsYXMsIGV0Yy4pXG4gKiAtIGRlc3RpbmF0aW9uICAtPiBkZXN0aW5vIChwb3Igbm9tYnJlKVxuICogLSBicmFuZCAgICAgICAgLT4gbWFyY2EgLyBncnVwb1xuICpcbiAqIEPDk01PIEZVTkNJT05BXG4gKiAtLS0tLS0tLS0tLS0tXG4gKiAxLiBMYXMgb3BjaW9uZXMgZGUgZmlsdHJvcyBzZSBjb25zdHJ1eWVuIGRpbsOhbWljYW1lbnRlIGEgcGFydGlyIGRlIGBpdGVtc2AuXG4gKiAyLiBDYWRhIG9wY2nDs24gdGllbmU6XG4gKiAgICAtIGxhYmVsOiB0ZXh0byByZWFsIG1vc3RyYWRvIGFsIHVzdWFyaW9cbiAqICAgIC0gc2x1ZyA6IHZlcnNpw7NuIG5vcm1hbGl6YWRhIHVzYWRhIGVuIGxhIFVSTFxuICogMy4gQWwgbmF2ZWdhciBjb24gcXVlcnkgcGFyYW1zOlxuICogICAgLSBTZSBsZWVuIGxvcyBzbHVncyBkZSBsYSBVUkxcbiAqICAgIC0gU2UgcmVzdWVsdmVuIGEgbGFiZWxzIHJlYWxlcyBjdWFuZG8gbG9zIGl0ZW1zIGVzdMOhbiBkaXNwb25pYmxlc1xuICogNC4gRWwgZmlsdHJhZG8gaW50ZXJubyBTSUVNUFJFIGNvbXBhcmEgcG9yIHNsdWcgKG5vIHBvciB0ZXh0byBjcnVkbykuXG4gKlxuICogTk9STUFMSVpBQ0nDk05cbiAqIC0tLS0tLS0tLS0tLS1cbiAqIC0gU2UgdXNhIGBVdGlscy50b1NsdWcoKWAgcGFyYSBub3JtYWxpemFyIHRleHRvcyAodGlsZGVzLCBlc3BhY2lvcywgc8OtbWJvbG9zKS5cbiAqIC0gUGFyYSBlbCBmaWx0cm8gcHJpbmNpcGFsIChgZmlsdGVyYCkgc2UgYXBsaWNhIGFkZW3DoXMgdW5hIHNpbmd1bGFyaXphY2nDs24gZ2Vuw6lyaWNhXG4gKiAgIChob3RlbGVzIC0+IGhvdGVsLCBhcGFydGFtZW50b3MgLT4gYXBhcnRhbWVudG8pLCBTSU4gdHJhZHVjY2lvbmVzIG5pIGRpY2Npb25hcmlvcy5cbiAqXG4gKiBFWFRFTkRFUiBDT04gTlVFVk9TIEZJTFRST1NcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBQYXJhIGHDsWFkaXIgdW4gbnVldm8gZmlsdHJvIChlajogY2F0ZWdvcnksIGV4cGVyaWVuY2UsIHJhdGluZyk6XG4gKlxuICogMS4gQcOxYWRpciB1biBudWV2byBxdWVyeVBhcmFtIChlajogYGNhdGVnb3J5YClcbiAqIDIuIENyZWFyOlxuICogICAgLSBzZWxlY3RlZENhdGVnb3J5XG4gKiAgICAtIGNhdGVnb3J5T3B0aW9uc1xuICogICAgLSBjYXRlZ29yeVNsdWdUb0xhYmVsIC8gY2F0ZWdvcnlMYWJlbFRvU2x1Z1xuICogMy4gQ29uc3RydWlyIG9wY2lvbmVzIGVuIGBidWlsZEZpbHRlck9wdGlvbnMoKWBcbiAqIDQuIFJlc29sdmVyIGRlc2RlIFVSTCBlbiBgcmVzb2x2ZVBlbmRpbmdGcm9tTWFwcygpYFxuICogNS4gQXBsaWNhciBjb25kaWNpw7NuIGVuIGBmaWx0ZXJlZEl0ZW1zYFxuICogNi4gU2luY3Jvbml6YXIgZW4gYHN5bmNRdWVyeVBhcmFtcygpYFxuICpcbiAqIElNUE9SVEFOVEVcbiAqIC0tLS0tLS0tLS1cbiAqIC0gTlVOQ0EgY29tcGFyYXIgcG9yIHRleHRvIGRpcmVjdG8uXG4gKiAtIE5VTkNBIG1ldGVyIHZhbG9yZXMgY3J1ZG9zIGVuIGxhIFVSTC5cbiAqIC0gVG9kbyBmaWx0cm8gbnVldm8gZGViZSBwYXNhciBwb3Igc2x1Zy5cbiAqXG4gKiBDb24gZXN0byBlbCBjb21wb25lbnRlIGVzIHJldXRpbGl6YWJsZSBlbnRyZSBwcm95ZWN0b3MsXG4gKiBpZGlvbWFzIHkgY29uZmlndXJhY2lvbmVzIGRpc3RpbnRhcyBzaW4gY2FtYmlvcyBlc3RydWN0dXJhbGVzLlxuICovXG5cbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCYWJ5bG9uTGlua1R5cGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi8uLi9kaXJlY3RpdmVzL2xpbmstdHlwZS9saW5rLXR5cGUuZGlyZWN0aXZlJztcbmltcG9ydCB7XG4gICAgQmFieWxvbkJ1dHRvbkksXG4gICAgQmFieWxvbkltYWdlSSxcbiAgICBCYWJ5bG9uVGV4dEluZm9JLFxufSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEJhYnlsb25EZXN0aW5hdGlvbkkgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcmZhY2VzL2JhYnlsb24tZGVzdGluYXRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IEJhYnlsb25HbG9iYWxFeHBlcmllbmNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJmYWNlcy9iYWJ5bG9uLWdsb2JhbC1leHBlcmllbmNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBCYWJ5bG9uSG90ZWxHbG9iYWxJdGVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJmYWNlcy9iYWJ5bG9uLWhvdGVsLmludGVyZmFjZSc7XG5pbXBvcnQgeyBVdGlscyB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IGdldEZpcnN0SW1hZ2VCeVRhZ0Zyb21JbWFnZXMgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlscy9tdXRpbWVkaWEudXRpbHMnO1xuaW1wb3J0IHsgQmFieWxvbkR5bmFtaWNIZWFkaW5nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2JhYnlsb24tZHluYW1pYy1oZWFkaW5nJztcbmltcG9ydCB7IEJhYnlsb25UYWdzSSB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvYmFieWxvbi10YWdzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBCYWJ5bG9uVGV4dHNDb2xvcnNJIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJmYWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbGlzLWM0LXR4dC1kZXMtY3RhJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIEJhYnlsb25MaW5rVHlwZURpcmVjdGl2ZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIEJhYnlsb25EeW5hbWljSGVhZGluZ0NvbXBvbmVudCxcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9saXMtYzQtdHh0LWRlcy1jdGEuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9saXMtYzQtdHh0LWRlcy1jdGEuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBMaXNDNFR4dERlc0N0YUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpIHRleHRzPzogQmFieWxvblRleHRJbmZvSTtcbiAgICBASW5wdXQoKSBpdGVtcz86IEJhYnlsb25Ib3RlbEdsb2JhbEl0ZW1bXTtcbiAgICBASW5wdXQoKSBsaW5rcz86IEJhYnlsb25CdXR0b25JW107XG4gICAgQElucHV0KCkgYWRkaXRpb25hbDFMaWtlTWFyY2E/OiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgc2hvd0NsZWFuRmlsdGVyczogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBASW5wdXQoKSBleHBlcmllbmNlcz86IEJhYnlsb25HbG9iYWxFeHBlcmllbmNlW107XG4gICAgQElucHV0KCkgZGVzdGluYXRpb25zPzogQmFieWxvbkRlc3RpbmF0aW9uSVtdO1xuICAgIEBJbnB1dCgpIHNob3dEZXN0aW5hdGlvbnM/OiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgc2hvd0ZpbHRlcnM/OiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBtYXhDb2x1bW5zPzogbnVtYmVyID0gNDtcbiAgICBASW5wdXQoKSBoaWRlU2VydmljZXNGaWx0ZXI/OiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgdGFncz86IEJhYnlsb25UYWdzSTtcbiAgICBASW5wdXQoKSB0ZXh0Q29sb3JzPzogQmFieWxvblRleHRzQ29sb3JzSTtcblxuICAgIHRhZ05hbWU6IHN0cmluZyA9ICdMaXNDNFR4dERlc0N0YSc7XG5cbiAgICAvLyBVSSBsYWJlbHMgc2VsZWNjaW9uYWRvcyAobG8gcXVlIHNlIG11ZXN0cmEgZW4gbG9zIHNlbGVjdHMpXG4gICAgLy8gRW4gVVJMIHNlIGd1YXJkYW4gc2x1Z3MuXG4gICAgc2VsZWN0ZWRIb3RlbFR5cGU6IHN0cmluZyA9ICcnOyAvLyA9PiBxdWVyeVBhcmFtIFwiZmlsdGVyXCJcbiAgICBzZWxlY3RlZERlc3RpbmF0aW9uOiBzdHJpbmcgPSAnJzsgLy8gPT4gcXVlcnlQYXJhbSBcImRlc3RpbmF0aW9uXCJcbiAgICBzZWxlY3RlZEJyYW5kOiBzdHJpbmcgPSAnJzsgLy8gPT4gcXVlcnlQYXJhbSBcImJyYW5kXCJcbiAgICBzZWxlY3RlZEV4cGVyaWVuY2U6IHN0cmluZyA9ICcnO1xuXG4gICAgaG90ZWxUeXBlT3B0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgICBkZXN0aW5hdGlvbk9wdGlvbnM6IHN0cmluZ1tdID0gW107XG4gICAgYnJhbmRPcHRpb25zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGV4cGVyaWVuY2VPcHRpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBwZW5kaW5nRmlsdGVyU2x1Zzogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBwZW5kaW5nRGVzdGluYXRpb25TbHVnOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIHBlbmRpbmdCcmFuZFNsdWc6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgcGVuZGluZ0V4cGVyaWVuY2VTbHVnOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIC8vIHNsdWcgLT4gbGFiZWwgKGhpZHJhdGFyIHNlbGVjdHMgZGVzZGUgVVJMKVxuICAgIHByaXZhdGUgZmlsdGVyU2x1Z1RvTGFiZWwgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgIHByaXZhdGUgZGVzdGluYXRpb25TbHVnVG9MYWJlbCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgcHJpdmF0ZSBicmFuZFNsdWdUb0xhYmVsID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICBwcml2YXRlIGV4cGVyaWVuY2VTbHVnVG9MYWJlbCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgICAvLyBsYWJlbCAtPiBzbHVnIChlc2NyaXR1cmEgZXN0YWJsZSlcbiAgICBwcml2YXRlIGZpbHRlckxhYmVsVG9TbHVnID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICBwcml2YXRlIGRlc3RpbmF0aW9uTGFiZWxUb1NsdWcgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgIHByaXZhdGUgYnJhbmRMYWJlbFRvU2x1ZyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgcHJpdmF0ZSBleHBlcmllbmNlTGFiZWxUb1NsdWcgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgICBwcml2YXRlIHFwU3ViPzogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAgIHByaXZhdGUgaXNTeW5jaW5nRnJvbVVybCA9IGZhbHNlO1xuXG4gICAgYXZhaWxhYmxlU2VydmljZXM6IHN0cmluZ1tdID0gW107XG4gICAgc2VsZWN0ZWRTZXJ2aWNlczogU2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBpc1NlcnZpY2VzTWVudU9wZW46IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnFwU3ViID0gdGhpcy5yb3V0ZS5xdWVyeVBhcmFtTWFwLnN1YnNjcmliZSgocGFyYW1zKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzU3luY2luZ0Zyb21VcmwgPSB0cnVlO1xuXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJTbHVnID0gcGFyYW1zLmdldCgnZmlsdGVyJykgPz8gJyc7XG4gICAgICAgICAgICBjb25zdCBkZXN0aW5hdGlvblNsdWcgPSBwYXJhbXMuZ2V0KCdkZXN0aW5hdGlvbicpID8/ICcnO1xuICAgICAgICAgICAgY29uc3QgYnJhbmRTbHVnID0gcGFyYW1zLmdldCgnYnJhbmQnKSA/PyAnJztcbiAgICAgICAgICAgIGNvbnN0IGV4cGVyaWVuY2VTbHVnID0gcGFyYW1zLmdldCgnZXhwZXJpZW5jZScpID8/ICcnO1xuXG4gICAgICAgICAgICB0aGlzLnJlc29sdmVQZW5kaW5nRnJvbU1hcHMoKTtcblxuICAgICAgICAgICAgdGhpcy5wZW5kaW5nRmlsdGVyU2x1ZyA9IHBhcmFtcy5nZXQoJ2ZpbHRlcicpO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nRGVzdGluYXRpb25TbHVnID0gcGFyYW1zLmdldCgnZGVzdGluYXRpb24nKTtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0JyYW5kU2x1ZyA9IHBhcmFtcy5nZXQoJ2JyYW5kJyk7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdFeHBlcmllbmNlU2x1ZyA9IHBhcmFtcy5nZXQoJ2V4cGVyaWVuY2UnKTtcblxuICAgICAgICAgICAgdGhpcy5yZXNvbHZlUGVuZGluZ0Zyb21NYXBzKCk7XG5cbiAgICAgICAgICAgIC8vIFNpIGHDum4gbm8gaGF5IG1hcHMgKGl0ZW1zIG5vIGxsZWfDsyksIGludGVudGEgZmFsbGJhY2sgKG1hbnRlbmVyIGFsZ28gZGVjZW50ZSlcbiAgICAgICAgICAgIC8vIE5vdGE6IG5vIG5hdmVnYW1vcyBhcXXDrS5cbiAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEhvdGVsVHlwZSAmJiBmaWx0ZXJTbHVnKVxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3RlbFR5cGUgPSBmaWx0ZXJTbHVnO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkRGVzdGluYXRpb24gJiYgZGVzdGluYXRpb25TbHVnKVxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uU2x1ZztcbiAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEJyYW5kICYmIGJyYW5kU2x1ZylcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQnJhbmQgPSBicmFuZFNsdWc7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRFeHBlcmllbmNlICYmIGV4cGVyaWVuY2VTbHVnKVxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRFeHBlcmllbmNlID0gZXhwZXJpZW5jZVNsdWc7XG5cbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gKHRoaXMuaXNTeW5jaW5nRnJvbVVybCA9IGZhbHNlKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ2l0ZW1zJ10pIHtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRGaWx0ZXJPcHRpb25zKCk7XG5cbiAgICAgICAgICAgIC8vIHJlaGlkcmF0YSBkZXNkZSBVUkwgeWEgY29uIG1hcHMgbGlzdG9zIChzaW4gbmF2ZWdhcilcbiAgICAgICAgICAgIGNvbnN0IHFwID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyU2x1ZyA9IHFwLmdldCgnZmlsdGVyJykgPz8gJyc7XG4gICAgICAgICAgICBjb25zdCBkZXN0aW5hdGlvblNsdWcgPSBxcC5nZXQoJ2Rlc3RpbmF0aW9uJykgPz8gJyc7XG4gICAgICAgICAgICBjb25zdCBicmFuZFNsdWcgPSBxcC5nZXQoJ2JyYW5kJykgPz8gJyc7XG4gICAgICAgICAgICBjb25zdCBleHBlcmllbmNlU2x1ZyA9IHFwLmdldCgnZXhwZXJpZW5jZScpID8/ICcnO1xuXG4gICAgICAgICAgICB0aGlzLmlzU3luY2luZ0Zyb21VcmwgPSB0cnVlO1xuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSG90ZWxUeXBlID1cbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclNsdWdUb0xhYmVsLmdldChmaWx0ZXJTbHVnKSA/PyAnJztcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREZXN0aW5hdGlvbiA9XG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvblNsdWdUb0xhYmVsLmdldChkZXN0aW5hdGlvblNsdWcpID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEJyYW5kID0gdGhpcy5icmFuZFNsdWdUb0xhYmVsLmdldChicmFuZFNsdWcpID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEV4cGVyaWVuY2UgPVxuICAgICAgICAgICAgICAgIHRoaXMuZXhwZXJpZW5jZVNsdWdUb0xhYmVsLmdldChleHBlcmllbmNlU2x1ZykgPz8gJyc7XG5cbiAgICAgICAgICAgIHRoaXMuZm9yY2VPcHRpb25NYXRjaCgpO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiAodGhpcy5pc1N5bmNpbmdGcm9tVXJsID0gZmFsc2UpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnFwU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRGaWx0ZXJPcHRpb25zKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuaXRlbXMgPz8gW107XG4gICAgICAgIGNvbnN0IGV4cGVyaWVuY2VzID0gdGhpcy5leHBlcmllbmNlcyA/PyBbXTtcblxuICAgICAgICB0aGlzLmhvdGVsVHlwZU9wdGlvbnMgPSBBcnJheS5mcm9tKFxuICAgICAgICAgICAgbmV3IFNldChcbiAgICAgICAgICAgICAgICBpdGVtc1xuICAgICAgICAgICAgICAgICAgICAubWFwKChpKSA9PiAoaSBhcyBhbnkpPy5ob3RlbHR5cGUpXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgodjogc3RyaW5nKSA9PiB2LnRyaW0oKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKS5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuXG4gICAgICAgIHRoaXMuZGVzdGluYXRpb25PcHRpb25zID0gQXJyYXkuZnJvbShcbiAgICAgICAgICAgIG5ldyBTZXQoXG4gICAgICAgICAgICAgICAgaXRlbXNcbiAgICAgICAgICAgICAgICAgICAgLmZsYXRNYXAoKGkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAoKGkgYXMgYW55KT8uZGVzdGluYXRpb25zID8/IFtdKS5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGQ6IGFueSkgPT4gZD8ubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgodjogc3RyaW5nKSA9PiB2LnRyaW0oKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKS5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuXG4gICAgICAgIHRoaXMuYnJhbmRPcHRpb25zID0gQXJyYXkuZnJvbShcbiAgICAgICAgICAgIG5ldyBTZXQoaXRlbXMubWFwKChpKSA9PiB0aGlzLmdldEl0ZW1CcmFuZChpKSkuZmlsdGVyKEJvb2xlYW4pKVxuICAgICAgICApLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG5cbiAgICAgICAgdGhpcy5leHBlcmllbmNlT3B0aW9ucyA9IEFycmF5LmZyb20oXG4gICAgICAgICAgICBuZXcgU2V0KGV4cGVyaWVuY2VzLm1hcCgoZSkgPT4gZS5uYW1lSWRlbnRpZmllcik/LmZpbHRlcihCb29sZWFuKSlcbiAgICAgICAgKS5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuXG4gICAgICAgIC8vIFJlc2V0IG1hcHNcbiAgICAgICAgdGhpcy5maWx0ZXJTbHVnVG9MYWJlbC5jbGVhcigpO1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uU2x1Z1RvTGFiZWwuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5icmFuZFNsdWdUb0xhYmVsLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuZXhwZXJpZW5jZVNsdWdUb0xhYmVsLmNsZWFyKCk7XG5cbiAgICAgICAgdGhpcy5maWx0ZXJMYWJlbFRvU2x1Zy5jbGVhcigpO1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uTGFiZWxUb1NsdWcuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5icmFuZExhYmVsVG9TbHVnLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuZXhwZXJpZW5jZUxhYmVsVG9TbHVnLmNsZWFyKCk7XG5cbiAgICAgICAgLy8gdXNlZCBzZXRzIHBhcmEgc3VmaWpvcyAtMiAtMy4uLlxuICAgICAgICBjb25zdCB1c2VkRmlsdGVyID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIGNvbnN0IHVzZWREZXN0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIGNvbnN0IHVzZWRCcmFuZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBjb25zdCB1c2VkRXhwZXJpZW5jZSA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgICAgIC8vIEZJTFRFUiAocXVlcnkgcGFyYW0gXCJmaWx0ZXJcIikgPT4gc2x1ZyBDQU7Dk05JQ08gKHNpbmd1bGFyIGdlbsOpcmljbylcbiAgICAgICAgZm9yIChjb25zdCBsYWJlbCBvZiB0aGlzLmhvdGVsVHlwZU9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2UgPSB0aGlzLmNhbm9uaWNhbFNsdWcobGFiZWwpO1xuICAgICAgICAgICAgY29uc3Qgc2x1ZyA9IFV0aWxzLnVuaXF1ZVNsdWcoYmFzZSwgdXNlZEZpbHRlcik7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclNsdWdUb0xhYmVsLnNldChzbHVnLCBsYWJlbCk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckxhYmVsVG9TbHVnLnNldChsYWJlbCwgc2x1Zyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBERVNUSU5BVElPTlNcbiAgICAgICAgZm9yIChjb25zdCBsYWJlbCBvZiB0aGlzLmRlc3RpbmF0aW9uT3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgYmFzZSA9IFV0aWxzLnRvU2x1ZyhsYWJlbCkgfHwgJ2Rlc3RpbmF0aW9uJztcbiAgICAgICAgICAgIGNvbnN0IHNsdWcgPSBVdGlscy51bmlxdWVTbHVnKGJhc2UsIHVzZWREZXN0KTtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb25TbHVnVG9MYWJlbC5zZXQoc2x1ZywgbGFiZWwpO1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbkxhYmVsVG9TbHVnLnNldChsYWJlbCwgc2x1Zyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCUkFORFNcbiAgICAgICAgZm9yIChjb25zdCBsYWJlbCBvZiB0aGlzLmJyYW5kT3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgYmFzZSA9IFV0aWxzLnRvU2x1ZyhsYWJlbCkgfHwgJ2JyYW5kJztcbiAgICAgICAgICAgIGNvbnN0IHNsdWcgPSBVdGlscy51bmlxdWVTbHVnKGJhc2UsIHVzZWRCcmFuZCk7XG4gICAgICAgICAgICB0aGlzLmJyYW5kU2x1Z1RvTGFiZWwuc2V0KHNsdWcsIGxhYmVsKTtcbiAgICAgICAgICAgIHRoaXMuYnJhbmRMYWJlbFRvU2x1Zy5zZXQobGFiZWwsIHNsdWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBsYWJlbCBvZiB0aGlzLmV4cGVyaWVuY2VPcHRpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlID0gVXRpbHMudG9TbHVnKGxhYmVsKSB8fCAnZXhwZXJpZW5jZSc7XG4gICAgICAgICAgICBjb25zdCBzbHVnID0gVXRpbHMudW5pcXVlU2x1ZyhiYXNlLCB1c2VkRXhwZXJpZW5jZSk7XG4gICAgICAgICAgICB0aGlzLmV4cGVyaWVuY2VTbHVnVG9MYWJlbC5zZXQoc2x1ZywgbGFiZWwpO1xuICAgICAgICAgICAgdGhpcy5leHBlcmllbmNlTGFiZWxUb1NsdWcuc2V0KGxhYmVsLCBzbHVnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFsbFNlcnZpY2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAgICAgY29uc3QgYWxsU2VydmljZXNOYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZFNlcnZpY2VzTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgICAgICBsZXQgcmVxdWVzdGVkQ2xhc3Nlczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMudGV4dHM/LnNlcnZpY2VzT25GaWx0ZXIpIHtcbiAgICAgICAgICAgIHJlcXVlc3RlZENsYXNzZXMgPSB0aGlzLnRleHRzPy5zZXJ2aWNlc09uRmlsdGVyXG4gICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgICAgICAgICAubWFwKChzKSA9PiBzLnRyaW0oKS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gICAgICAgIH1cblxuICAgICAgICBpdGVtcy5mb3JFYWNoKChpdCkgPT4ge1xuICAgICAgICAgICAgLy8gU29wb3J0YW1vcyBjYW1lbENhc2UgbyBzbmFrZV9jYXNlIHNlZ8O6biBjb21vIGxsZWd1ZSBkZSBsYSBBUElcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VzID1cbiAgICAgICAgICAgICAgICAoaXQgYXMgYW55KT8uc2VydmljZXNTZXJ2aWNlIHx8IChpdCBhcyBhbnkpPy5zZXJ2aWNlc19zZXJ2aWNlO1xuXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzZXJ2aWNlcykpIHtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlcy5mb3JFYWNoKChzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzPy5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gcy5uYW1lLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbFNlcnZpY2VzTmFtZXMuYWRkKG5hbWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTaSBoYXkgY2xhc2VzIHNvbGljaXRhZGFzLCB2YWxpZGFtb3MgY29udHJhIGVsIGF0cmlidXRvICdjbGFzcydcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0ZWRDbGFzc2VzLmxlbmd0aCA+IDAgJiYgcy5jbGFzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGVkQ2xhc3Nlcy5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuY2xhc3MudHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZFNlcnZpY2VzTmFtZXMuYWRkKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyAzLiBEZWNpZGltb3MgcXXDqSBsaXN0YSBtb3N0cmFyXG4gICAgICAgIGxldCBmaW5hbFNlcnZpY2VzID0gQXJyYXkuZnJvbShmaWx0ZXJlZFNlcnZpY2VzTmFtZXMpO1xuXG4gICAgICAgIC8vIFNpIG5vIHNlIHBhc2Fyb24gY2xhc2VzIHBvciBJbnB1dCwgbyBzaSBsbyBxdWUgc2UgcGFzw7MgTk8gaGl6byBtYXRjaCBjb24gbmFkYSwgbW9zdHJhbW9zIFRPRE9TXG4gICAgICAgIGlmIChyZXF1ZXN0ZWRDbGFzc2VzLmxlbmd0aCA9PT0gMCB8fCBmaW5hbFNlcnZpY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZmluYWxTZXJ2aWNlcyA9IEFycmF5LmZyb20oYWxsU2VydmljZXNOYW1lcyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmF2YWlsYWJsZVNlcnZpY2VzID0gZmluYWxTZXJ2aWNlcy5zb3J0KChhLCBiKSA9PlxuICAgICAgICAgICAgYS5sb2NhbGVDb21wYXJlKGIpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRJdGVtQnJhbmQoaXQ6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmFkZGl0aW9uYWwxTGlrZU1hcmNhKVxuICAgICAgICAgICAgcmV0dXJuIChpdD8udGV4dHM/LmFkZGl0aW9uYWwxID8/ICcnKS50cmltKCk7XG4gICAgICAgIHJldHVybiAoaXQ/Lm1hcmNhID8/IGl0Py5icmFuZCA/PyBpdD8uZ3JvdXAgPz8gJycpLnRyaW0oKTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gRklMVFJBRE9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBnZXQgZmlsdGVyZWRJdGVtcygpOiBCYWJ5bG9uSG90ZWxHbG9iYWxJdGVtW10ge1xuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuaXRlbXMgPz8gW107XG4gICAgICAgIGlmICghdGhpcy5zaG93RmlsdGVycykge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHZhbGlkSG90ZWxJZHNGb3JFeHBlcmllbmNlOiBudW1iZXJbXSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEV4cGVyaWVuY2UgJiYgdGhpcy5leHBlcmllbmNlcykge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0RXhwID0gdGhpcy5leHBlcmllbmNlcy5maW5kKFxuICAgICAgICAgICAgICAgIChlKSA9PiBlLm5hbWVJZGVudGlmaWVyID09PSB0aGlzLnNlbGVjdGVkRXhwZXJpZW5jZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICh0YXJnZXRFeHAgJiYgdGFyZ2V0RXhwLmhvdGVscykge1xuICAgICAgICAgICAgICAgIHZhbGlkSG90ZWxJZHNGb3JFeHBlcmllbmNlID0gdGFyZ2V0RXhwLmhvdGVscy5tYXAoXG4gICAgICAgICAgICAgICAgICAgIChoOiBhbnkpID0+IGguaWRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGl0ZW1zLmZpbHRlcigoaXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1Ib3RlbFR5cGUgPSAoaXQgYXMgYW55KT8uaG90ZWx0eXBlID8/ICcnO1xuICAgICAgICAgICAgY29uc3QgaXRlbUJyYW5kID0gdGhpcy5nZXRJdGVtQnJhbmQoaXQpO1xuICAgICAgICAgICAgY29uc3QgaXRlbUlkID0gKGl0IGFzIGFueSk/LmlkO1xuXG4gICAgICAgICAgICBjb25zdCBob3RlbFR5cGVPayA9XG4gICAgICAgICAgICAgICAgIXRoaXMuc2VsZWN0ZWRIb3RlbFR5cGUgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmNhbm9uaWNhbFNsdWcoaXRlbUhvdGVsVHlwZSkgPT09XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2Fub25pY2FsU2x1Zyh0aGlzLnNlbGVjdGVkSG90ZWxUeXBlKTtcblxuICAgICAgICAgICAgY29uc3QgZGVzdGluYXRpb25PayA9XG4gICAgICAgICAgICAgICAgIXRoaXMuc2VsZWN0ZWREZXN0aW5hdGlvbiB8fFxuICAgICAgICAgICAgICAgICgoKGl0IGFzIGFueSk/LmRlc3RpbmF0aW9ucyA/PyBbXSkgYXMgYW55W10pLnNvbWUoXG4gICAgICAgICAgICAgICAgICAgIChkKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMudG9TbHVnKGQ/Lm5hbWUgPz8gJycpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMudG9TbHVnKHRoaXMuc2VsZWN0ZWREZXN0aW5hdGlvbilcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBicmFuZE9rID1cbiAgICAgICAgICAgICAgICAhdGhpcy5zZWxlY3RlZEJyYW5kIHx8XG4gICAgICAgICAgICAgICAgVXRpbHMudG9TbHVnKGl0ZW1CcmFuZCkgPT09IFV0aWxzLnRvU2x1Zyh0aGlzLnNlbGVjdGVkQnJhbmQpO1xuXG4gICAgICAgICAgICBjb25zdCBleHBlcmllbmNlT2sgPVxuICAgICAgICAgICAgICAgICF0aGlzLnNlbGVjdGVkRXhwZXJpZW5jZSB8fFxuICAgICAgICAgICAgICAgIHZhbGlkSG90ZWxJZHNGb3JFeHBlcmllbmNlLmluY2x1ZGVzKGl0ZW1JZCk7XG5cbiAgICAgICAgICAgIC8vIE5VRVZBIFZBTElEQUNJw5NOOiBWZXJpZmljYSBxdWUgZWwgaXRlbSB0ZW5nYSBUT0RPUyBsb3Mgc2VydmljaW9zIHNlbGVjY2lvbmFkb3MgKEFORClcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VzT2sgPVxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlcy5zaXplID09PSAwIHx8XG4gICAgICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkU2VydmljZXMpLmV2ZXJ5KChzZWxlY3RlZFNydikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtU2VydmljZXMgPSAoaXQgYXMgYW55KT8uc2VydmljZXNTZXJ2aWNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaXRlbVNlcnZpY2VzKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVNlcnZpY2VzLnNvbWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAoczogYW55KSA9PiBzPy5uYW1lPy50cmltKCkgPT09IHNlbGVjdGVkU3J2XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIFJldG9ybmEgdmFsaWRhbmRvIHRhbWJpw6luIHNlcnZpY2VzT2tcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgaG90ZWxUeXBlT2sgJiZcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9rICYmXG4gICAgICAgICAgICAgICAgYnJhbmRPayAmJlxuICAgICAgICAgICAgICAgIGV4cGVyaWVuY2VPayAmJlxuICAgICAgICAgICAgICAgIHNlcnZpY2VzT2tcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldCBoYXNBY3RpdmVGaWx0ZXJzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISEoXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSG90ZWxUeXBlIHx8XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGVzdGluYXRpb24gfHxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCcmFuZCB8fFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEV4cGVyaWVuY2VcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gSEFORExFUlMgVUlcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBvbkhvdGVsVHlwZUNoYW5nZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIb3RlbFR5cGUgPSB2YWx1ZSA/PyAnJztcbiAgICAgICAgaWYgKHRoaXMuaXNTeW5jaW5nRnJvbVVybCkgcmV0dXJuO1xuICAgICAgICB0aGlzLnN5bmNRdWVyeVBhcmFtcygpO1xuICAgIH1cblxuICAgIG9uRGVzdGluYXRpb25DaGFuZ2UodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGVzdGluYXRpb24gPSB2YWx1ZSA/PyAnJztcbiAgICAgICAgaWYgKHRoaXMuaXNTeW5jaW5nRnJvbVVybCkgcmV0dXJuO1xuICAgICAgICB0aGlzLnN5bmNRdWVyeVBhcmFtcygpO1xuICAgIH1cblxuICAgIG9uQnJhbmRDaGFuZ2UodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkQnJhbmQgPSB2YWx1ZSA/PyAnJztcbiAgICAgICAgaWYgKHRoaXMuaXNTeW5jaW5nRnJvbVVybCkgcmV0dXJuO1xuICAgICAgICB0aGlzLnN5bmNRdWVyeVBhcmFtcygpO1xuICAgIH1cblxuICAgIG9uRXhwZXJpZW5jZUNoYW5nZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRFeHBlcmllbmNlID0gdmFsdWUgPz8gJyc7XG4gICAgICAgIGlmICh0aGlzLmlzU3luY2luZ0Zyb21VcmwpIHJldHVybjtcbiAgICAgICAgdGhpcy5zeW5jUXVlcnlQYXJhbXMoKTtcbiAgICB9XG5cbiAgICBjbGVhckZpbHRlcnMoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIb3RlbFR5cGUgPSAnJztcbiAgICAgICAgdGhpcy5zZWxlY3RlZERlc3RpbmF0aW9uID0gJyc7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRCcmFuZCA9ICcnO1xuICAgICAgICB0aGlzLnNlbGVjdGVkRXhwZXJpZW5jZSA9ICcnO1xuICAgICAgICB0aGlzLnNlbGVjdGVkU2VydmljZXMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5zeW5jUXVlcnlQYXJhbXModHJ1ZSk7XG4gICAgfVxuXG4gICAgdG9nZ2xlU2VydmljZShzZXJ2aWNlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0ZWQgPSBuZXcgU2V0KHRoaXMuc2VsZWN0ZWRTZXJ2aWNlcyk7XG5cbiAgICAgICAgaWYgKG5ld1NlbGVjdGVkLmhhcyhzZXJ2aWNlKSkge1xuICAgICAgICAgICAgbmV3U2VsZWN0ZWQuZGVsZXRlKHNlcnZpY2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3U2VsZWN0ZWQuYWRkKHNlcnZpY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZFNlcnZpY2VzID0gbmV3U2VsZWN0ZWQ7XG4gICAgfVxuXG4gICAgdG9nZ2xlU2VydmljZXNNZW51KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzU2VydmljZXNNZW51T3BlbiA9ICF0aGlzLmlzU2VydmljZXNNZW51T3BlbjtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gVVJMIFNZTkMgKFNJRU1QUkUgU0xVRylcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBwcml2YXRlIHN5bmNRdWVyeVBhcmFtcyhjbGVhckFsbCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHFwID0gY2xlYXJBbGxcbiAgICAgICAgICAgID8geyBmaWx0ZXI6IG51bGwsIGRlc3RpbmF0aW9uOiBudWxsLCBicmFuZDogbnVsbCB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgIGZpbHRlcjogdGhpcy5zZWxlY3RlZEhvdGVsVHlwZVxuICAgICAgICAgICAgICAgICAgICAgID8gKHRoaXMuZmlsdGVyTGFiZWxUb1NsdWcuZ2V0KHRoaXMuc2VsZWN0ZWRIb3RlbFR5cGUpID8/XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbm9uaWNhbFNsdWcodGhpcy5zZWxlY3RlZEhvdGVsVHlwZSkpXG4gICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuXG4gICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbjogdGhpcy5zZWxlY3RlZERlc3RpbmF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgPyAodGhpcy5kZXN0aW5hdGlvbkxhYmVsVG9TbHVnLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGVzdGluYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICkgPz8gVXRpbHMudG9TbHVnKHRoaXMuc2VsZWN0ZWREZXN0aW5hdGlvbikpXG4gICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuXG4gICAgICAgICAgICAgICAgICBicmFuZDogdGhpcy5zZWxlY3RlZEJyYW5kXG4gICAgICAgICAgICAgICAgICAgICAgPyAodGhpcy5icmFuZExhYmVsVG9TbHVnLmdldCh0aGlzLnNlbGVjdGVkQnJhbmQpID8/XG4gICAgICAgICAgICAgICAgICAgICAgICBVdGlscy50b1NsdWcodGhpcy5zZWxlY3RlZEJyYW5kKSlcbiAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG5cbiAgICAgICAgICAgICAgICAgIGV4cGVyaWVuY2U6IHRoaXMuc2VsZWN0ZWRFeHBlcmllbmNlXG4gICAgICAgICAgICAgICAgICAgICAgPyAodGhpcy5leHBlcmllbmNlTGFiZWxUb1NsdWcuZ2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRFeHBlcmllbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICApID8/IFV0aWxzLnRvU2x1Zyh0aGlzLnNlbGVjdGVkRXhwZXJpZW5jZSkpXG4gICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHFwLFxuICAgICAgICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIENBTk9OSUNBTCBTTFVHIChzaW4gdHJhZHVjdG9yKVxuICAgIC8vIC0gR2FyYW50aXphIHNpbmd1bGFyL3BsdXJhbCBnZW7DqXJpY29cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBwcml2YXRlIGNhbm9uaWNhbFNsdWcodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGxldCBzID0gVXRpbHMudG9TbHVnKHZhbHVlKTtcbiAgICAgICAgaWYgKCFzKSByZXR1cm4gJyc7XG5cbiAgICAgICAgLy8gUmVnbGEgLWVzIChob3RlbGVzIC0+IGhvdGVsLCBsdWNlcyAtPiBsdXosIHBlY2VzIC0+IHBleilcbiAgICAgICAgaWYgKHMubGVuZ3RoID4gMyAmJiBzLmVuZHNXaXRoKCdlcycpKSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlID0gcy5zbGljZSgwLCAtMik7XG4gICAgICAgICAgICBpZiAoYmFzZS5lbmRzV2l0aCgnYycpKSByZXR1cm4gYmFzZS5zbGljZSgwLCAtMSkgKyAneic7XG4gICAgICAgICAgICByZXR1cm4gYmFzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlZ2xhIC1zIChhcGFydGFtZW50b3MgLT4gYXBhcnRhbWVudG8pXG4gICAgICAgIGlmIChzLmxlbmd0aCA+IDMgJiYgcy5lbmRzV2l0aCgncycpKSByZXR1cm4gcy5zbGljZSgwLCAtMSk7XG5cbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFVJIHV0aWxzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgZ2V0S2V5c0FycmF5KGNvdW50OiBudW1iZXIgfCB1bmRlZmluZWQpOiBudW1iZXJbXSB7XG4gICAgICAgIHJldHVybiBjb3VudCA/IEFycmF5LmZyb20oeyBsZW5ndGg6IGNvdW50IH0pIDogW107XG4gICAgfVxuXG4gICAgdHJhY2tCeUluZGV4KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuXG4gICAgZ2V0Rmlyc3RJbWFnZUJ5VGFnKHRhZ05hbWU6IHN0cmluZywgaW1hZ2VuZXM6IEJhYnlsb25JbWFnZUlbXSkge1xuICAgICAgICByZXR1cm4gZ2V0Rmlyc3RJbWFnZUJ5VGFnRnJvbUltYWdlcyhpbWFnZW5lcywgdGFnTmFtZSkgPz8gaW1hZ2VuZXM/LlswXTtcbiAgICB9XG5cbiAgICBnZXROdW1iZXIodGV4dDogc3RyaW5nKTogbnVtYmVyW10ge1xuICAgICAgICByZXR1cm4gVXRpbHMuZXh0cmFjdE51bWJlclJhbmdlKHRleHQpO1xuICAgIH1cblxuICAgIHNob3dJZlN1cCh2YWx1ZT86IHN0cmluZyB8IG51bGwpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCByZWdleCA9IC9cXGIoU1VQfHN1cGVyaW9yKVxcYi9pO1xuXG4gICAgICAgIHJldHVybiByZWdleC50ZXN0KHZhbHVlID8/ICcnKSA/ICdTVVAnIDogJyc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNvbHZlUGVuZGluZ0Zyb21NYXBzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wZW5kaW5nRmlsdGVyU2x1ZyAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBzbHVnID0gdGhpcy5jYW5vbmljYWxTbHVnKHRoaXMucGVuZGluZ0ZpbHRlclNsdWcpO1xuXG4gICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuZmlsdGVyU2x1Z1RvTGFiZWwuZ2V0KHNsdWcpO1xuICAgICAgICAgICAgaWYgKGxhYmVsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEhvdGVsVHlwZSA9IGxhYmVsO1xuICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0ZpbHRlclNsdWcgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gREVTVElOQVRJT05cbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0Rlc3RpbmF0aW9uU2x1ZyAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBzbHVnID0gVXRpbHMudG9TbHVnKHRoaXMucGVuZGluZ0Rlc3RpbmF0aW9uU2x1Zyk7XG4gICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuZGVzdGluYXRpb25TbHVnVG9MYWJlbC5nZXQoc2x1Zyk7XG4gICAgICAgICAgICBpZiAobGFiZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGVzdGluYXRpb24gPSBsYWJlbDtcbiAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdEZXN0aW5hdGlvblNsdWcgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQlJBTkRcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0JyYW5kU2x1ZyAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBzbHVnID0gVXRpbHMudG9TbHVnKHRoaXMucGVuZGluZ0JyYW5kU2x1Zyk7XG4gICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuYnJhbmRTbHVnVG9MYWJlbC5nZXQoc2x1Zyk7XG4gICAgICAgICAgICBpZiAobGFiZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQnJhbmQgPSBsYWJlbDtcbiAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdCcmFuZFNsdWcgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy9FWFBFUklFTkNFU1xuICAgICAgICBpZiAodGhpcy5wZW5kaW5nRXhwZXJpZW5jZVNsdWcgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3Qgc2x1ZyA9IFV0aWxzLnRvU2x1Zyh0aGlzLnBlbmRpbmdFeHBlcmllbmNlU2x1Zyk7XG4gICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuZXhwZXJpZW5jZVNsdWdUb0xhYmVsLmdldChzbHVnKTtcbiAgICAgICAgICAgIGlmIChsYWJlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRFeHBlcmllbmNlID0gbGFiZWw7XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nRXhwZXJpZW5jZVNsdWcgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb3JjZU9wdGlvbk1hdGNoKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEhvdGVsVHlwZSkge1xuICAgICAgICAgICAgY29uc3Qgd2FudGVkID0gdGhpcy5jYW5vbmljYWxTbHVnKHRoaXMuc2VsZWN0ZWRIb3RlbFR5cGUpO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSB0aGlzLmhvdGVsVHlwZU9wdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgICAobykgPT4gdGhpcy5jYW5vbmljYWxTbHVnKG8pID09PSB3YW50ZWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSG90ZWxUeXBlID0gbWF0Y2ggPz8gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEJyYW5kKSB7XG4gICAgICAgICAgICBjb25zdCB3YW50ZWQgPSBVdGlscy50b1NsdWcodGhpcy5zZWxlY3RlZEJyYW5kKTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gdGhpcy5icmFuZE9wdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgICAobykgPT4gVXRpbHMudG9TbHVnKG8pID09PSB3YW50ZWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQnJhbmQgPSBtYXRjaCA/PyAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRGVzdGluYXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHdhbnRlZCA9IFV0aWxzLnRvU2x1Zyh0aGlzLnNlbGVjdGVkRGVzdGluYXRpb24pO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSB0aGlzLmRlc3RpbmF0aW9uT3B0aW9ucy5maW5kKFxuICAgICAgICAgICAgICAgIChvKSA9PiBVdGlscy50b1NsdWcobykgPT09IHdhbnRlZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREZXN0aW5hdGlvbiA9IG1hdGNoID8/ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRFeHBlcmllbmNlKSB7XG4gICAgICAgICAgICBjb25zdCB3YW50ZWQgPSBVdGlscy50b1NsdWcodGhpcy5zZWxlY3RlZEV4cGVyaWVuY2UpO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSB0aGlzLmV4cGVyaWVuY2VPcHRpb25zLmZpbmQoXG4gICAgICAgICAgICAgICAgKG8pID0+IFV0aWxzLnRvU2x1ZyhvKSA9PT0gd2FudGVkXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEV4cGVyaWVuY2UgPSBtYXRjaCA/PyAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEJ1dHRvblVybChidG46IEJhYnlsb25CdXR0b25JLCBpdGVtOiBhbnksIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB1cmxCYXNlID0gYnRuLnVybCB8fCAnJztcblxuICAgICAgICAvLyBTaSBubyBlcyBlbCBwcmltZXIgYm90w7NuLCBkZXZvbHZlbW9zIGxhIFVSTCBiYXNlIHNpbiBhbHRlcmFyXG4gICAgICAgIGlmIChpbmRleCAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHVybEJhc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCdXNjYW1vcyBlbCBpZGVudGlmaWNhZG9yIChwcmlvcml6YW1vcyBuYW1lSWRlbnRpZmllciwgbHVlZ28gbmFtZSBwYXJhIGRlc3Rpbm9zKVxuICAgICAgICBjb25zdCBpZGVudGlmaWVyID1cbiAgICAgICAgICAgIGl0ZW0/Lm5hbWVJZGVudGlmaWVyID8/IGl0ZW0/Lm5hbWVfaWRlbnRpZmllciA/PyBpdGVtPy5uYW1lO1xuXG4gICAgICAgIGlmICghaWRlbnRpZmllcikge1xuICAgICAgICAgICAgcmV0dXJuIHVybEJhc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZXBhcmF0b3IgPSB1cmxCYXNlLmluY2x1ZGVzKCc/JykgPyAnJicgOiAnPyc7XG5cbiAgICAgICAgLy8gMS4gTMOzZ2ljYSBwYXJhIEVYUEVSSUVOQ0lBU1xuICAgICAgICAvLyBFbnRyYSBzaSBlbCB0eXBlIGVzICdleHBlcmllbmNlJyBvIHNpIHRpZW5lIHVuIG5hbWVJZGVudGlmaWVyIHBlcm8gbm8gdGllbmUgdHlwZSAoZmFsbGJhY2spXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGl0ZW0/LnR5cGUgPT09ICdleHBlcmllbmNlJyB8fFxuICAgICAgICAgICAgKCFpdGVtPy50eXBlICYmIChpdGVtPy5uYW1lSWRlbnRpZmllciB8fCBpdGVtPy5uYW1lX2lkZW50aWZpZXIpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBgJHt1cmxCYXNlfSR7c2VwYXJhdG9yfWV4cGVyaWVuY2U9JHtpZGVudGlmaWVyfWA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBMw7NnaWNhIHBhcmEgREVTVElOT1NcbiAgICAgICAgaWYgKGl0ZW0/LnR5cGUgPT09ICdkZXN0aW5hdGlvbicpIHtcbiAgICAgICAgICAgIC8vIFVzYW1vcyB0dSBVdGlscyBwYXJhIG5vcm1hbGl6YXIgZXNwYWNpb3MgeSBtYXnDunNjdWxhcyAoZWo6IFwiQW5kb3JyYSBsYSBWZWxsYVwiIC0+IFwiYW5kb3JyYS1sYS12ZWxsYVwiKVxuICAgICAgICAgICAgY29uc3QgZGVzdGluYXRpb25TbHVnID0gVXRpbHMudG9TbHVnKGlkZW50aWZpZXIpO1xuICAgICAgICAgICAgcmV0dXJuIGAke3VybEJhc2V9JHtzZXBhcmF0b3J9ZGVzdGluYXRpb249JHtkZXN0aW5hdGlvblNsdWd9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cmxCYXNlO1xuICAgIH1cbn1cbiIsIkBpZiAoaXRlbXM/Lmxlbmd0aCkge1xuICAgIDxzZWN0aW9uIGNsYXNzPVwibWRsLW1kMDAyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtZGwtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1jb250ZW50LXRvcFwiPlxuICAgICAgICAgICAgICAgIEBpZiAodGV4dHM/LnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxsaWItYmFieWxvbi1keW5hbWljLWhlYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0YWddPVwidGFncz8udGl0bGUgfHwgJ2gyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBjc3NDbGFzcz1cIm0tdGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRlbnRdPVwidGV4dHM/LnRpdGxlID8/ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJ0ZXh0Q29sb3JzPy50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgID48L2xpYi1iYWJ5bG9uLWR5bmFtaWMtaGVhZGluZz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChzaG93RmlsdGVycykge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1zZWxlY3RzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGhhc0FjdGl2ZUZpbHRlcnMgJiYgc2hvd0NsZWFuRmlsdGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibS1jbGVhclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhckZpbHRlcnMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0ZXh0cz8uY2xlYW5GaWx0ZXJzID8/ICdMaW1waWFyIGZpbHRyb3MnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFoaWRlU2VydmljZXNGaWx0ZXIgJiYgYXZhaWxhYmxlU2VydmljZXMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChhdmFpbGFibGVTZXJ2aWNlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtLXNlcnZpY2VzLXNpbmdsZSBzZXJ2aWNlcy1maWx0ZXIgc2VydmljZXMtZmlsdGVyX19zaW5nbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1jaGVja2JveC1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInNpbmdsZS1zcnYtMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRTZXJ2aWNlcy5oYXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlU2VydmljZXNbMF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZVNlcnZpY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlU2VydmljZXNbMF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzaW5nbGUtc3J2LTBcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGVTZXJ2aWNlc1swXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtLXNlcnZpY2VzLWZpbHRlciBtLXNlbGVjdCBzZXJ2aWNlcy1maWx0ZXIgc2VydmljZXMtZmlsdGVyX19tdWx0aVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm0tc2VydmljZXMtYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2VydmljZXNNZW51KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk00IDZIMjBNNyAxMkgxN00xMCAxOEgxNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0cz8uc2VydmljZXN0aXRsZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFNlcnZpY2VzLnNpemUgPiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICh0ZXh0cz8uc2VydmljZXN0aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRleHRzPy5zZXJ2aWNlc3RpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkU2VydmljZXMuc2l6ZSA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFNlcnZpY2VzLnNpemVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGlzU2VydmljZXNNZW51T3Blbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtLXNlcnZpY2VzLW92ZXJsYXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2VydmljZXNNZW51KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLXNlcnZpY2VzLWRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWRyb3Bkb3duLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm0tY2xvc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlU2VydmljZXNNZW51KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID7inJU8L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWRyb3Bkb3duLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNydiBvZiBhdmFpbGFibGVTZXJ2aWNlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjayAkaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtLWNoZWNrYm94LWdyb3VwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3J2LScgKyAkaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFNlcnZpY2VzLmhhcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlU2VydmljZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9yXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcnYtJyArICRpbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyBzcnYgfX08L2xhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLXNlbGVjdCBicmFuZC1maWx0ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNCcmFuZFNlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInRleHRzPy5tYXJjYSA/PyAnbWFyY2EnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEJyYW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25CcmFuZENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRleHRzPy5tYXJjYSA/PyAnQWxsJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAob3B0IG9mIGJyYW5kT3B0aW9uczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJvcHRcIj57eyBvcHQgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGV4cGVyaWVuY2VPcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1zZWxlY3QgZXhwZXJpZW5jZS1maWx0ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI0V4cGVyaWVuY2VTZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJFeHBlcmllbmNpYXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEV4cGVyaWVuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25FeHBlcmllbmNlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+RXhwZXJpZW5jaWFzPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHQgb2YgZXhwZXJpZW5jZU9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2sgJGluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJvcHRcIj57eyBvcHQgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHRleHRzPy5ob3RlbFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1zZWxlY3QgaG90ZWx0eXBlLWZpbHRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjaG90ZWxUeXBlU2VsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRzPy5ob3RlbFR5cGUgPz8gJ2hvdGVsZXMnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEhvdGVsVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkhvdGVsVHlwZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRleHRzPy5ob3RlbFR5cGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0IG9mIGhvdGVsVHlwZU9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2sgJGluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJvcHRcIj57eyBvcHQgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLXNlbGVjdCBkZXN0aW5hdGlvbi1maWx0ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNEZXN0aW5hdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHM/LmRlc3RpbmF0aW9ucyA/PyAnZGVzdGlub3MnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWREZXN0aW5hdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRGVzdGluYXRpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0ZXh0cz8uZGVzdGluYXRpb25zIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChvcHQgb2YgZGVzdGluYXRpb25PcHRpb25zOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIm9wdFwiPnt7IG9wdCB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm0tY2FyZHMtY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuLS1tYXhDb2x1bW5zXT1cIm1heENvbHVtbnMgPz8gNFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQGlmIChmaWx0ZXJlZEl0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBmaWx0ZXJlZEl0ZW1zOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm0tY2FyZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkZW1wdHk6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZ2V0Rmlyc3RJbWFnZUJ5VGFnKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ05hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uaW1hZ2VzID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/Lm11bHRpbWVkaWE/LmltYWdlbmVzID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uaW1hZ2VzPy5bMF0gPz9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5tdWx0aW1lZGlhPy5pbWFnZW5lcz8uWzBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZpcnN0SW1hZ2VCeVRhZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ05hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmltYWdlcyA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/Lm11bHRpbWVkaWE/LmltYWdlbmVzID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5pbWFnZXM/LlswXSA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8ubXVsdGltZWRpYT8uaW1hZ2VuZXM/LlswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgaW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxpbmstY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cIml0ZW0ubGlua3M/LlswXT8udXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaW5rVHlwZV09XCJpdGVtLmxpbmtzPy5bMF0/LmxpbmtUeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlUG9pbnRlck5vbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm0tY2FyZC10b3BcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWltYWdlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKCcgKyBpbWcuaW1nPy5zcmMgKyAnKSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLXRhZy1sZWZ0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5ob3RlbHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uaG90ZWx0eXBlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0ta2V5c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXRlbT8uaG90ZWx0eXBlID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSG90ZWwnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LmhvdGVsdHlwZSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdIw7R0ZWwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LmhvdGVsY2F0ZWdvcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gb2YgZ2V0TnVtYmVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LmhvdGVsY2F0ZWdvcnkgPz9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjayAkaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtMTQwNC4wMDAwMDAsIC01OTIyLjAwMDAwMCkgdHJhbnNsYXRlKDE5MS4wMDAwMDAsIDU4NjUuMDAwMDAwKSB0cmFuc2xhdGUoMTEwOS4wMDAwMDAsIDU3LjAwMDAwMClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjZmZmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsLW9wYWNpdHk9XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsLXJ1bGU9XCJub256ZXJvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEwIDBsMi4yOTQgNy4xMDRjLjAzNC4xMDYuMTMzLjE3OC4yNDUuMTc4TDIwIDcuMjY3bC02LjA0NiA0LjM3NHYuMDAxYy0uMDkuMDY2LS4xMjguMTgyLS4wOTMuMjg5bDIuMzIyIDcuMDk1LTYuMDMyLTQuNGMtLjA5LS4wNjUtLjIxMy0uMDY1LS4zMDMgMGwtNi4wMjkgNC40IDIuMzIyLTcuMDk1SDYuMTRjLjAzNS0uMTA3LS4wMDMtLjIyMy0uMDk0LS4yODlMMCA3LjI2OGw3LjQ2MS4wMTUuMDAxLS4wMDFjLjExMiAwIC4yMTEtLjA3Mi4yNDUtLjE3OEwxMCAwelwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDEwNC4wMDAwMDAsIDAuMDAwMDAwKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXRlbT8uaG90ZWx0eXBlID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXBhcnRhbWVudG8nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LmhvdGVsdHlwZSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBcHBhcnRlbWVudCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uaG90ZWxjYXRlZ29yeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVnb3J5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSBvZiBnZXROdW1iZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uaG90ZWxjYXRlZ29yeSA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrICRpbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxMyAxM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMC4xNDYyOTYgNC4yNjQ3OUwxLjE0MDE1IDIuMDE2OTJDMS4zMTI4OSAxLjYyNTU5IDEuNjI1NTkgMS4zMTI4OSAyLjAxNjkyIDEuMTQwMTVMNC4yNjQ3OSAwLjE0NjI5N0M0LjU4MTc0IDAuMDA2NDE4MjYgNC45MzM1NiAtMC4wMzQzOTQ0IDUuMjc0MTIgMC4wMjkyMTI3QzUuNjE0NjcgMC4wOTI4MTk4IDUuOTI4MDUgMC4yNTc4NzYgNi4xNzMxNCAwLjUwMjczTDcuOTQ3NSAyLjI3ODM5QzguMTYwNiAyLjQ5MTU1IDguMzEzODggMi43NTcwMSA4LjM5MTk3IDMuMDQ4MTNDOC40NzAwNiAzLjMzOTI1IDguNDcwMiAzLjY0NTc4IDguMzkyMzkgMy45MzY5OEw3LjkzNTc5IDUuNjQxMDlMMTIuODY2IDEwLjU3MTNDMTIuOTA4NSAxMC42MTM2IDEyLjk0MjIgMTAuNjYzOSAxMi45NjUyIDEwLjcxOTNDMTIuOTg4MiAxMC43NzQ2IDEzIDEwLjgzNCAxMyAxMC44OTM5VjEyLjU0NDdDMTIuOTk5MyAxMi42NjUyIDEyLjk1MTEgMTIuNzgwNyAxMi44NjU5IDEyLjg2NTlDMTIuNzgwNyAxMi45NTExIDEyLjY2NTIgMTIuOTk5MyAxMi41NDQ3IDEzSDEwLjg5MzlDMTAuNzkyNiAxMi45OTk4IDEwLjY5NDIgMTIuOTY1OSAxMC42MTQyIDEyLjkwMzhDMTAuNTM0MSAxMi44NDE2IDEwLjQ3NyAxMi43NTQ3IDEwLjQ1MTYgMTIuNjU2NkwxMC4yMDQ1IDExLjY3OTZMOS4zMzAzIDExLjUxMzFDOS4yNDMyMiAxMS40OTY4IDkuMTYyODIgMTEuNDU1MyA5LjA5OTAzIDExLjM5MzhDOS4wMzUyMyAxMS4zMzIzIDguOTkwODIgMTEuMjUzNSA4Ljk3MTI3IDExLjE2NzFMOC43MzMyMSAxMC4xMTczTDcuODkwMjYgMTAuMDM2N0M3Ljc4NDc5IDEwLjAyNzQgNy42ODYwOCA5Ljk4MDggNy42MTE4OCA5LjkwNTI4TDUuNjQxMDkgNy45MzU3OUwzLjkzNjk3IDguMzkyMzlDMy42NDU4IDguNDcwNDcgMy4zMzkxOSA4LjQ3MDQ2IDMuMDQ4MDIgOC4zOTIzNkMyLjc1Njg1IDguMzE0MjYgMi40OTE0IDguMTYwODIgMi4yNzgzOSA3Ljk0NzVMMC41MDI3MjkgNi4xNzMxNEMwLjI1Nzg3NSA1LjkyODA1IDAuMDkyODIwMiA1LjYxNDY3IDAuMDI5MjEzIDUuMjc0MTJDLTAuMDM0Mzk0MyA0LjkzMzU3IDAuMDA2NDE3MjcgNC41ODE3NCAwLjE0NjI5NiA0LjI2NDc5Wk0zLjY3MDMgNS4wODk1M0MzLjgxMDYxIDUuMjI5NjggMy45ODkzMiA1LjMyNTA4IDQuMTgzODUgNS4zNjM2OUM0LjM3ODM3IDUuNDAyMjkgNC41Nzk5NyA1LjM4MjM2IDQuNzYzMTcgNS4zMDY0MUM0Ljk0NjM2IDUuMjMwNDcgNS4xMDI5NCA1LjEwMTkxIDUuMjEzMDkgNC45MzdDNS4zMjMyNCA0Ljc3MjEgNS4zODIwMyA0LjU3ODIzIDUuMzgyMDMgNC4zNzk5MUM1LjM4MjAzIDQuMTgxNiA1LjMyMzI0IDMuOTg3NzMgNS4yMTMwOSAzLjgyMjgzQzUuMTAyOTQgMy42NTc5MiA0Ljk0NjM2IDMuNTI5MzYgNC43NjMxNyAzLjQ1MzQyQzQuNTc5OTcgMy4zNzc0NyA0LjM3ODM3IDMuMzU3NTQgNC4xODM4NSAzLjM5NjE0QzMuOTg5MzIgMy40MzQ3NSAzLjgxMDYxIDMuNTMwMTUgMy42NzAzIDMuNjcwM0MzLjU3Njg5IDMuNzYzMzYgMy41MDI3NyAzLjg3Mzk1IDMuNDUyMTkgMy45OTU3MkMzLjQwMTYyIDQuMTE3NSAzLjM3NTU4IDQuMjQ4MDYgMy4zNzU1OCA0LjM3OTkxQzMuMzc1NTggNC41MTE3NyAzLjQwMTYyIDQuNjQyMzMgMy40NTIxOSA0Ljc2NDExQzMuNTAyNzcgNC44ODU4OCAzLjU3Njg5IDQuOTk2NDcgMy42NzAzIDUuMDg5NTNaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNmZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsLW9wYWNpdHk9XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNob3dJZlN1cChpdGVtPy5ob3RlbGNhdGVnb3J5KSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbT8udGV4dHM/LmFkZGl0aW9uYWwyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibS10YWctcmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsZWZ0LW1vZGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaXRlbS5ob3RlbHR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uc3R5bGVzPy5wcmltYXJ5ID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNmZjQzMzgnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtPy50ZXh0cz8uYWRkaXRpb25hbDIgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnRleHRzPy50aXRsZSB8fCBpdGVtLnRleHRzPy5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS50ZXh0cz8udGl0bGUgPz9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnRleHRzPy5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLXN1YnRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLmxvY2FsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubG9jYWxpdHkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLmxvY2FsaXR5ICYmIGl0ZW0ucHJvdmluY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0ucHJvdmluY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5wcm92aW5jZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0uYnV0dG9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ0biBvZiBpdGVtLmJ1dHRvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrICRpbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtLWJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ20tYnV0dG9uLXNtJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGluZGV4ICUgMiA9PT0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbS1idXQgbS11bmRlcmxpbmUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW5kZXggJSAyICE9PSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuLS1idG4tcHJpbWFyeS1keW5hbWljXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGVzPy5wcmltYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLi0tYnRuLWhvdmVyLWR5bmFtaWNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5zdHlsZXM/LnByaW1hcnlIb3ZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEJ1dHRvblVybChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnRuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFyZ2V0XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ0bi50YXJnZXQgfHwgJ19zZWxmJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaW5rVHlwZV09XCJidG4ubGlua1R5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJidG4ubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBidG4ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWVtcHR5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRzPy5ub3RGb3VuZCA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTm8gc2UgZW5jb250cmFyb24gcmVzdWx0YWRvcyBjb24gZXNvcyBmaWx0cm9zLidcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG59XG4iXX0=
|
|
573
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzLWM0LXR4dC1kZXMtY3RhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhYnlsb24vc3JjL2xpYi9jb21wb25lbnRzL2V4dGVybmFsL2NvcmUvbGlzLWM0LXR4dC1kZXMtY3RhL2xpcy1jNC10eHQtZGVzLWN0YS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYWJ5bG9uL3NyYy9saWIvY29tcG9uZW50cy9leHRlcm5hbC9jb3JlL2xpcy1jNC10eHQtZGVzLWN0YS9saXMtYzQtdHh0LWRlcy1jdGEuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHO0FBRUgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBS0wsaUJBQWlCLEdBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBV2hHLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7OztBQWV6RixNQUFNLE9BQU8sdUJBQXVCO0lBYnBDO1FBaUJhLHlCQUFvQixHQUFhLEtBQUssQ0FBQztRQUN2QyxxQkFBZ0IsR0FBWSxJQUFJLENBQUM7UUFJakMscUJBQWdC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QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBMaXNDNFR4dERlc0N0YUNvbXBvbmVudFxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICpcbiAqIENvbXBvbmVudGUgZGUgbGlzdGFkbyBjb24gc2lzdGVtYSBkZSBmaWx0cm9zIHNpbmNyb25pemFkbyBjb24gbGEgVVJMLlxuICpcbiAqIEZJTE9TT0bDjUFcbiAqIC0tLS0tLS0tLS1cbiAqIC0gRWwgY29tcG9uZW50ZSBlcyBBR07Dk1NUSUNPIGFsIGRvbWluaW8gKG5vIGhhcmRjb2RlYSBcImhvdGVsXCIsIFwiYXBhcnRhbWVudG9cIiwgbWFyY2FzLCBldGMuKS5cbiAqIC0gVG9kbyBsbyBxdWUgc2UgZmlsdHJhIHByb3ZpZW5lIGRlIFNUUklOR1MgZW52aWFkb3MgcG9yIGJhY2tlbmQgKHlhIHRyYWR1Y2lkb3MpLlxuICogLSBMYSBVUkwgc2llbXByZSB0cmFiYWphIGNvbiBTTFVHUyBub3JtYWxpemFkb3MgKHNpbiB0aWxkZXMsIGVzcGFjaW9zIG5pIGNhcmFjdGVyZXMgcmFyb3MpLlxuICpcbiAqIEZJTFRST1MgU09QT1JUQURPUyAoYWN0dWFsZXMpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogLSBmaWx0ZXIgICAgICAgLT4gdGlwbyBwcmluY2lwYWwgKGVqOiBob3RlbGVzLCBhcGFydGFtZW50b3MsIHZpbGxhcywgZXRjLilcbiAqIC0gZGVzdGluYXRpb24gIC0+IGRlc3Rpbm8gKHBvciBub21icmUpXG4gKiAtIGJyYW5kICAgICAgICAtPiBtYXJjYSAvIGdydXBvXG4gKiAtIGV4cGVyaWVuY2UgICAtPiBleHBlcmllbmNpYSBhc29jaWFkYVxuICogLSBzZXJ2aWNlcyAgICAgLT4gc2VydmljaW9zIGRpc3BvbmlibGVzXG4gKlxuICogQUNUVUFMSVpBQ0nDk046IELDmlNRVUVEQSBGQUNFVEFEQSAoRmFjZXRlZCBTZWFyY2gpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBBaG9yYSBlbCBjb21wb25lbnRlIGFjdHVhbGl6YSBkaW7DoW1pY2FtZW50ZSBsYXMgb3BjaW9uZXMgZGUgbG9zIGRlc3BsZWdhYmxlcy5cbiAqIEFsIHNlbGVjY2lvbmFyIHVuIGZpbHRybywgbG9zIGRlbcOhcyBvY3VsdGFuIGxhcyBvcGNpb25lcyBxdWUgbm8gdGVuZHLDrWFuIHJlc3VsdGFkb3NcbiAqIGNydXphZG9zIGNvbiBsYSBzZWxlY2Npw7NuIGFjdHVhbC4gUGFyYSBldml0YXIgYmxvcXVlb3MsIHNpZW1wcmUgc2UgbWFudGllbmUgdmlzaWJsZVxuICogbGEgb3BjacOzbiBxdWUgZXN0w6kgYWN0dWFsbWVudGUgc2VsZWNjaW9uYWRhLlxuICovXG5cbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCYWJ5bG9uTGlua1R5cGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi8uLi9kaXJlY3RpdmVzL2xpbmstdHlwZS9saW5rLXR5cGUuZGlyZWN0aXZlJztcbmltcG9ydCB7XG4gICAgQmFieWxvbkJ1dHRvbkksXG4gICAgQmFieWxvbkltYWdlSSxcbiAgICBCYWJ5bG9uVGV4dEluZm9JLFxuICAgIEJhYnlsb25UZXh0c0NvbG9yc0ksXG59IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQmFieWxvbkRlc3RpbmF0aW9uSSB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvYmFieWxvbi1kZXN0aW5hdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQmFieWxvbkdsb2JhbEV4cGVyaWVuY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcmZhY2VzL2JhYnlsb24tZ2xvYmFsLWV4cGVyaWVuY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IEJhYnlsb25Ib3RlbEdsb2JhbEl0ZW0gfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcmZhY2VzL2JhYnlsb24taG90ZWwuaW50ZXJmYWNlJztcbmltcG9ydCB7IEJhYnlsb25UYWdzSSB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvYmFieWxvbi10YWdzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBVdGlscyB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IGdldEZpcnN0SW1hZ2VCeVRhZ0Zyb21JbWFnZXMgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlscy9tdXRpbWVkaWEudXRpbHMnO1xuaW1wb3J0IHsgQmFieWxvbkR5bmFtaWNIZWFkaW5nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2JhYnlsb24tZHluYW1pYy1oZWFkaW5nJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdsaXMtYzQtdHh0LWRlcy1jdGEnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgQmFieWxvbkxpbmtUeXBlRGlyZWN0aXZlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgQmFieWxvbkR5bmFtaWNIZWFkaW5nQ29tcG9uZW50LFxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xpcy1jNC10eHQtZGVzLWN0YS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2xpcy1jNC10eHQtZGVzLWN0YS5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIExpc0M0VHh0RGVzQ3RhQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgQElucHV0KCkgdGV4dHM/OiBCYWJ5bG9uVGV4dEluZm9JO1xuICAgIEBJbnB1dCgpIGl0ZW1zPzogQmFieWxvbkhvdGVsR2xvYmFsSXRlbVtdO1xuICAgIEBJbnB1dCgpIGxpbmtzPzogQmFieWxvbkJ1dHRvbklbXTtcbiAgICBASW5wdXQoKSBhZGRpdGlvbmFsMUxpa2VNYXJjYT86IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBzaG93Q2xlYW5GaWx0ZXJzOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpIGV4cGVyaWVuY2VzPzogQmFieWxvbkdsb2JhbEV4cGVyaWVuY2VbXTtcbiAgICBASW5wdXQoKSBkZXN0aW5hdGlvbnM/OiBCYWJ5bG9uRGVzdGluYXRpb25JW107XG4gICAgQElucHV0KCkgc2hvd0Rlc3RpbmF0aW9ucz86IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBzaG93RmlsdGVycz86IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIG1heENvbHVtbnM/OiBudW1iZXIgPSA0O1xuICAgIEBJbnB1dCgpIGhpZGVTZXJ2aWNlc0ZpbHRlcj86IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSB0YWdzPzogQmFieWxvblRhZ3NJO1xuICAgIEBJbnB1dCgpIHRleHRDb2xvcnM/OiBCYWJ5bG9uVGV4dHNDb2xvcnNJO1xuXG4gICAgdGFnTmFtZTogc3RyaW5nID0gJ0xpc0M0VHh0RGVzQ3RhJztcblxuICAgIC8vIFVJIGxhYmVscyBzZWxlY2Npb25hZG9zIChsbyBxdWUgc2UgbXVlc3RyYSBlbiBsb3Mgc2VsZWN0cylcbiAgICBzZWxlY3RlZEhvdGVsVHlwZTogc3RyaW5nID0gJyc7XG4gICAgc2VsZWN0ZWREZXN0aW5hdGlvbjogc3RyaW5nID0gJyc7XG4gICAgc2VsZWN0ZWRCcmFuZDogc3RyaW5nID0gJyc7XG4gICAgc2VsZWN0ZWRFeHBlcmllbmNlOiBzdHJpbmcgPSAnJztcblxuICAgIC8vIE9wY2lvbmVzIERpbsOhbWljYXMgKExhcyBxdWUgc2UgbXVlc3RyYW4gZW4gZWwgSFRNTCB5IHNlIGFjdHVhbGl6YW4gYWwgZmlsdHJhcilcbiAgICBob3RlbFR5cGVPcHRpb25zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGRlc3RpbmF0aW9uT3B0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgICBicmFuZE9wdGlvbnM6IHN0cmluZ1tdID0gW107XG4gICAgZXhwZXJpZW5jZU9wdGlvbnM6IHN0cmluZ1tdID0gW107XG4gICAgYXZhaWxhYmxlU2VydmljZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBPcGNpb25lcyBCYXNlIChMaXN0YXMgbWFlc3RyYXMgZ2VuZXJhZGFzIGFsIGNhcmdhciwgbnVuY2Egc2UgcmVkdWNlbilcbiAgICBwcml2YXRlIGJhc2VIb3RlbFR5cGVPcHRpb25zOiBzdHJpbmdbXSA9IFtdO1xuICAgIHByaXZhdGUgYmFzZURlc3RpbmF0aW9uT3B0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgICBwcml2YXRlIGJhc2VCcmFuZE9wdGlvbnM6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBiYXNlRXhwZXJpZW5jZU9wdGlvbnM6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBiYXNlQXZhaWxhYmxlU2VydmljZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBwcml2YXRlIHBlbmRpbmdGaWx0ZXJTbHVnOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIHBlbmRpbmdEZXN0aW5hdGlvblNsdWc6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgcGVuZGluZ0JyYW5kU2x1Zzogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBwZW5kaW5nRXhwZXJpZW5jZVNsdWc6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gc2x1ZyAtPiBsYWJlbCAoaGlkcmF0YXIgc2VsZWN0cyBkZXNkZSBVUkwpXG4gICAgcHJpdmF0ZSBmaWx0ZXJTbHVnVG9MYWJlbCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgcHJpdmF0ZSBkZXN0aW5hdGlvblNsdWdUb0xhYmVsID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICBwcml2YXRlIGJyYW5kU2x1Z1RvTGFiZWwgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgIHByaXZhdGUgZXhwZXJpZW5jZVNsdWdUb0xhYmVsID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblxuICAgIC8vIGxhYmVsIC0+IHNsdWcgKGVzY3JpdHVyYSBlc3RhYmxlKVxuICAgIHByaXZhdGUgZmlsdGVyTGFiZWxUb1NsdWcgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgIHByaXZhdGUgZGVzdGluYXRpb25MYWJlbFRvU2x1ZyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgcHJpdmF0ZSBicmFuZExhYmVsVG9TbHVnID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICBwcml2YXRlIGV4cGVyaWVuY2VMYWJlbFRvU2x1ZyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICAgIHByaXZhdGUgcXBTdWI/OiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gICAgcHJpdmF0ZSBpc1N5bmNpbmdGcm9tVXJsID0gZmFsc2U7XG5cbiAgICBzZWxlY3RlZFNlcnZpY2VzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGlzU2VydmljZXNNZW51T3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucXBTdWIgPSB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1NYXAuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNTeW5jaW5nRnJvbVVybCA9IHRydWU7XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlclNsdWcgPSBwYXJhbXMuZ2V0KCdmaWx0ZXInKSA/PyAnJztcbiAgICAgICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uU2x1ZyA9IHBhcmFtcy5nZXQoJ2Rlc3RpbmF0aW9uJykgPz8gJyc7XG4gICAgICAgICAgICBjb25zdCBicmFuZFNsdWcgPSBwYXJhbXMuZ2V0KCdicmFuZCcpID8/ICcnO1xuICAgICAgICAgICAgY29uc3QgZXhwZXJpZW5jZVNsdWcgPSBwYXJhbXMuZ2V0KCdleHBlcmllbmNlJykgPz8gJyc7XG5cbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZVBlbmRpbmdGcm9tTWFwcygpO1xuXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdGaWx0ZXJTbHVnID0gcGFyYW1zLmdldCgnZmlsdGVyJyk7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdEZXN0aW5hdGlvblNsdWcgPSBwYXJhbXMuZ2V0KCdkZXN0aW5hdGlvbicpO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nQnJhbmRTbHVnID0gcGFyYW1zLmdldCgnYnJhbmQnKTtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0V4cGVyaWVuY2VTbHVnID0gcGFyYW1zLmdldCgnZXhwZXJpZW5jZScpO1xuXG4gICAgICAgICAgICB0aGlzLnJlc29sdmVQZW5kaW5nRnJvbU1hcHMoKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkSG90ZWxUeXBlICYmIGZpbHRlclNsdWcpXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEhvdGVsVHlwZSA9IGZpbHRlclNsdWc7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWREZXN0aW5hdGlvbiAmJiBkZXN0aW5hdGlvblNsdWcpXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERlc3RpbmF0aW9uID0gZGVzdGluYXRpb25TbHVnO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQnJhbmQgJiYgYnJhbmRTbHVnKVxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCcmFuZCA9IGJyYW5kU2x1ZztcbiAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEV4cGVyaWVuY2UgJiYgZXhwZXJpZW5jZVNsdWcpXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEV4cGVyaWVuY2UgPSBleHBlcmllbmNlU2x1ZztcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVEeW5hbWljT3B0aW9ucygpOyAvLyBBY3R1YWxpemEgbG9zIGxpc3RhZG9zIGRpbsOhbWljb3MgY29uIGxhIGhpZHJhdGFjacOzblxuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiAodGhpcy5pc1N5bmNpbmdGcm9tVXJsID0gZmFsc2UpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlc1snaXRlbXMnXSkge1xuICAgICAgICAgICAgdGhpcy5idWlsZEZpbHRlck9wdGlvbnMoKTtcblxuICAgICAgICAgICAgY29uc3QgcXAgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1NYXA7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJTbHVnID0gcXAuZ2V0KCdmaWx0ZXInKSA/PyAnJztcbiAgICAgICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uU2x1ZyA9IHFwLmdldCgnZGVzdGluYXRpb24nKSA/PyAnJztcbiAgICAgICAgICAgIGNvbnN0IGJyYW5kU2x1ZyA9IHFwLmdldCgnYnJhbmQnKSA/PyAnJztcbiAgICAgICAgICAgIGNvbnN0IGV4cGVyaWVuY2VTbHVnID0gcXAuZ2V0KCdleHBlcmllbmNlJykgPz8gJyc7XG5cbiAgICAgICAgICAgIHRoaXMuaXNTeW5jaW5nRnJvbVVybCA9IHRydWU7XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3RlbFR5cGUgPVxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyU2x1Z1RvTGFiZWwuZ2V0KGZpbHRlclNsdWcpID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERlc3RpbmF0aW9uID1cbiAgICAgICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uU2x1Z1RvTGFiZWwuZ2V0KGRlc3RpbmF0aW9uU2x1ZykgPz8gJyc7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQnJhbmQgPSB0aGlzLmJyYW5kU2x1Z1RvTGFiZWwuZ2V0KGJyYW5kU2x1ZykgPz8gJyc7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRXhwZXJpZW5jZSA9XG4gICAgICAgICAgICAgICAgdGhpcy5leHBlcmllbmNlU2x1Z1RvTGFiZWwuZ2V0KGV4cGVyaWVuY2VTbHVnKSA/PyAnJztcblxuICAgICAgICAgICAgdGhpcy5mb3JjZU9wdGlvbk1hdGNoKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUR5bmFtaWNPcHRpb25zKCk7IC8vIFZ1ZWx2ZSBhIGZpbHRyYXIgbGFzIG9wY2lvbmVzIHNlZ8O6biBsYSBudWV2YSBoaWRyYXRhY2nDs25cbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gKHRoaXMuaXNTeW5jaW5nRnJvbVVybCA9IGZhbHNlKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5xcFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkRmlsdGVyT3B0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zID8/IFtdO1xuICAgICAgICBjb25zdCBleHBlcmllbmNlcyA9IHRoaXMuZXhwZXJpZW5jZXMgPz8gW107XG5cbiAgICAgICAgLy8gTGxlbmFtb3MgbGFzIGxpc3RhcyBNQUVTVFJBU1xuICAgICAgICB0aGlzLmJhc2VIb3RlbFR5cGVPcHRpb25zID0gQXJyYXkuZnJvbShcbiAgICAgICAgICAgIG5ldyBTZXQoXG4gICAgICAgICAgICAgICAgaXRlbXNcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoaSkgPT4gKGkgYXMgYW55KT8uaG90ZWx0eXBlKVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKHY6IHN0cmluZykgPT4gdi50cmltKCkpXG4gICAgICAgICAgICApXG4gICAgICAgICkuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKTtcblxuICAgICAgICB0aGlzLmJhc2VEZXN0aW5hdGlvbk9wdGlvbnMgPSBBcnJheS5mcm9tKFxuICAgICAgICAgICAgbmV3IFNldChcbiAgICAgICAgICAgICAgICBpdGVtc1xuICAgICAgICAgICAgICAgICAgICAuZmxhdE1hcCgoaSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICgoaSBhcyBhbnkpPy5kZXN0aW5hdGlvbnMgPz8gW10pLm1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZDogYW55KSA9PiBkPy5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgICAgICAgICAubWFwKCh2OiBzdHJpbmcpID0+IHYudHJpbSgpKVxuICAgICAgICAgICAgKVxuICAgICAgICApLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG5cbiAgICAgICAgdGhpcy5iYXNlQnJhbmRPcHRpb25zID0gQXJyYXkuZnJvbShcbiAgICAgICAgICAgIG5ldyBTZXQoaXRlbXMubWFwKChpKSA9PiB0aGlzLmdldEl0ZW1CcmFuZChpKSkuZmlsdGVyKEJvb2xlYW4pKVxuICAgICAgICApLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG5cbiAgICAgICAgdGhpcy5iYXNlRXhwZXJpZW5jZU9wdGlvbnMgPSBBcnJheS5mcm9tKFxuICAgICAgICAgICAgbmV3IFNldChleHBlcmllbmNlcy5tYXAoKGUpID0+IGUubmFtZUlkZW50aWZpZXIpPy5maWx0ZXIoQm9vbGVhbikpXG4gICAgICAgICkuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKTtcblxuICAgICAgICAvLyBSZXNldCBtYXBzXG4gICAgICAgIHRoaXMuZmlsdGVyU2x1Z1RvTGFiZWwuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvblNsdWdUb0xhYmVsLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuYnJhbmRTbHVnVG9MYWJlbC5jbGVhcigpO1xuICAgICAgICB0aGlzLmV4cGVyaWVuY2VTbHVnVG9MYWJlbC5jbGVhcigpO1xuXG4gICAgICAgIHRoaXMuZmlsdGVyTGFiZWxUb1NsdWcuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbkxhYmVsVG9TbHVnLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuYnJhbmRMYWJlbFRvU2x1Zy5jbGVhcigpO1xuICAgICAgICB0aGlzLmV4cGVyaWVuY2VMYWJlbFRvU2x1Zy5jbGVhcigpO1xuXG4gICAgICAgIGNvbnN0IHVzZWRGaWx0ZXIgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgY29uc3QgdXNlZERlc3QgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgY29uc3QgdXNlZEJyYW5kID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIGNvbnN0IHVzZWRFeHBlcmllbmNlID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBsYWJlbCBvZiB0aGlzLmJhc2VIb3RlbFR5cGVPcHRpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlID0gdGhpcy5jYW5vbmljYWxTbHVnKGxhYmVsKTtcbiAgICAgICAgICAgIGNvbnN0IHNsdWcgPSBVdGlscy51bmlxdWVTbHVnKGJhc2UsIHVzZWRGaWx0ZXIpO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJTbHVnVG9MYWJlbC5zZXQoc2x1ZywgbGFiZWwpO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJMYWJlbFRvU2x1Zy5zZXQobGFiZWwsIHNsdWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBsYWJlbCBvZiB0aGlzLmJhc2VEZXN0aW5hdGlvbk9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2UgPSBVdGlscy50b1NsdWcobGFiZWwpIHx8ICdkZXN0aW5hdGlvbic7XG4gICAgICAgICAgICBjb25zdCBzbHVnID0gVXRpbHMudW5pcXVlU2x1ZyhiYXNlLCB1c2VkRGVzdCk7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uU2x1Z1RvTGFiZWwuc2V0KHNsdWcsIGxhYmVsKTtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb25MYWJlbFRvU2x1Zy5zZXQobGFiZWwsIHNsdWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBsYWJlbCBvZiB0aGlzLmJhc2VCcmFuZE9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2UgPSBVdGlscy50b1NsdWcobGFiZWwpIHx8ICdicmFuZCc7XG4gICAgICAgICAgICBjb25zdCBzbHVnID0gVXRpbHMudW5pcXVlU2x1ZyhiYXNlLCB1c2VkQnJhbmQpO1xuICAgICAgICAgICAgdGhpcy5icmFuZFNsdWdUb0xhYmVsLnNldChzbHVnLCBsYWJlbCk7XG4gICAgICAgICAgICB0aGlzLmJyYW5kTGFiZWxUb1NsdWcuc2V0KGxhYmVsLCBzbHVnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgbGFiZWwgb2YgdGhpcy5iYXNlRXhwZXJpZW5jZU9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2UgPSBVdGlscy50b1NsdWcobGFiZWwpIHx8ICdleHBlcmllbmNlJztcbiAgICAgICAgICAgIGNvbnN0IHNsdWcgPSBVdGlscy51bmlxdWVTbHVnKGJhc2UsIHVzZWRFeHBlcmllbmNlKTtcbiAgICAgICAgICAgIHRoaXMuZXhwZXJpZW5jZVNsdWdUb0xhYmVsLnNldChzbHVnLCBsYWJlbCk7XG4gICAgICAgICAgICB0aGlzLmV4cGVyaWVuY2VMYWJlbFRvU2x1Zy5zZXQobGFiZWwsIHNsdWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWxsU2VydmljZXNOYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZFNlcnZpY2VzTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgICAgICBsZXQgcmVxdWVzdGVkQ2xhc3Nlczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMudGV4dHM/LnNlcnZpY2VzT25GaWx0ZXIpIHtcbiAgICAgICAgICAgIHJlcXVlc3RlZENsYXNzZXMgPSB0aGlzLnRleHRzPy5zZXJ2aWNlc09uRmlsdGVyXG4gICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgICAgICAgICAubWFwKChzKSA9PiBzLnRyaW0oKS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gICAgICAgIH1cblxuICAgICAgICBpdGVtcy5mb3JFYWNoKChpdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2VydmljZXMgPVxuICAgICAgICAgICAgICAgIChpdCBhcyBhbnkpPy5zZXJ2aWNlc1NlcnZpY2UgfHwgKGl0IGFzIGFueSk/LnNlcnZpY2VzX3NlcnZpY2U7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzZXJ2aWNlcykpIHtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlcy5mb3JFYWNoKChzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzPy5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gcy5uYW1lLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbFNlcnZpY2VzTmFtZXMuYWRkKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RlZENsYXNzZXMubGVuZ3RoID4gMCAmJiBzLmNsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ZWRDbGFzc2VzLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5jbGFzcy50cmltKCkudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkU2VydmljZXNOYW1lcy5hZGQobmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCBmaW5hbFNlcnZpY2VzID0gQXJyYXkuZnJvbShmaWx0ZXJlZFNlcnZpY2VzTmFtZXMpO1xuICAgICAgICBpZiAocmVxdWVzdGVkQ2xhc3Nlcy5sZW5ndGggPT09IDAgfHwgZmluYWxTZXJ2aWNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGZpbmFsU2VydmljZXMgPSBBcnJheS5mcm9tKGFsbFNlcnZpY2VzTmFtZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5iYXNlQXZhaWxhYmxlU2VydmljZXMgPSBmaW5hbFNlcnZpY2VzLnNvcnQoKGEsIGIpID0+XG4gICAgICAgICAgICBhLmxvY2FsZUNvbXBhcmUoYilcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBJbmljaWFsaXphbW9zIGxhcyBvcGNpb25lcyBkZSBVSSBjb24gbGFzIG1hZXN0cmFzIHkgbHVlZ28gZmlsdHJhbW9zXG4gICAgICAgIHRoaXMuaG90ZWxUeXBlT3B0aW9ucyA9IFsuLi50aGlzLmJhc2VIb3RlbFR5cGVPcHRpb25zXTtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbk9wdGlvbnMgPSBbLi4udGhpcy5iYXNlRGVzdGluYXRpb25PcHRpb25zXTtcbiAgICAgICAgdGhpcy5icmFuZE9wdGlvbnMgPSBbLi4udGhpcy5iYXNlQnJhbmRPcHRpb25zXTtcbiAgICAgICAgdGhpcy5leHBlcmllbmNlT3B0aW9ucyA9IFsuLi50aGlzLmJhc2VFeHBlcmllbmNlT3B0aW9uc107XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlU2VydmljZXMgPSBbLi4udGhpcy5iYXNlQXZhaWxhYmxlU2VydmljZXNdO1xuXG4gICAgICAgIHRoaXMudXBkYXRlRHluYW1pY09wdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEl0ZW1CcmFuZChpdDogYW55KTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuYWRkaXRpb25hbDFMaWtlTWFyY2EpXG4gICAgICAgICAgICByZXR1cm4gKGl0Py50ZXh0cz8uYWRkaXRpb25hbDEgPz8gJycpLnRyaW0oKTtcbiAgICAgICAgcmV0dXJuIChpdD8ubWFyY2EgPz8gaXQ/LmJyYW5kID8/IGl0Py5ncm91cCA/PyAnJykudHJpbSgpO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBMw5NHSUNBIERFIEZJTFRSQURPIEJBU0UgKEZBQ0VURUQgU0VBUkNIKVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIC8qKlxuICAgICAqIE9idGllbmUgbG9zIGl0ZW1zIGNvaW5jaWRlbnRlcyBleGNsdXllbmRvIHVubyBkZSBsb3MgZmlsdHJvcy5cbiAgICAgKiBFcyBjbGF2ZSBwYXJhIGNhbGN1bGFyIHF1w6kgb3BjaW9uZXMgZGViZW4gcXVlZGFyIGRpc3BvbmlibGVzIGVuIHVuIGRlc3BsZWdhYmxlXG4gICAgICogc2luIHF1ZSBzdSBwcm9waWEgc2VsZWNjacOzbiBwcmV2aWEgbGFzIGJvcnJlIHBvciBjb21wbGV0by5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldEl0ZW1zTWF0Y2hpbmcoXG4gICAgICAgIGV4Y2x1ZGVGaWx0ZXI6XG4gICAgICAgICAgICB8ICdob3RlbFR5cGUnXG4gICAgICAgICAgICB8ICdkZXN0aW5hdGlvbidcbiAgICAgICAgICAgIHwgJ2JyYW5kJ1xuICAgICAgICAgICAgfCAnZXhwZXJpZW5jZSdcbiAgICAgICAgICAgIHwgJ3NlcnZpY2VzJ1xuICAgICAgICAgICAgfCAnbm9uZSdcbiAgICApOiBCYWJ5bG9uSG90ZWxHbG9iYWxJdGVtW10ge1xuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuaXRlbXMgPz8gW107XG4gICAgICAgIGlmICghdGhpcy5zaG93RmlsdGVycykgcmV0dXJuIGl0ZW1zO1xuXG4gICAgICAgIGxldCB2YWxpZEhvdGVsSWRzRm9yRXhwZXJpZW5jZTogbnVtYmVyW10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRFeHBlcmllbmNlICYmIHRoaXMuZXhwZXJpZW5jZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldEV4cCA9IHRoaXMuZXhwZXJpZW5jZXMuZmluZChcbiAgICAgICAgICAgICAgICAoZSkgPT4gZS5uYW1lSWRlbnRpZmllciA9PT0gdGhpcy5zZWxlY3RlZEV4cGVyaWVuY2VcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAodGFyZ2V0RXhwICYmIHRhcmdldEV4cC5ob3RlbHMpIHtcbiAgICAgICAgICAgICAgICB2YWxpZEhvdGVsSWRzRm9yRXhwZXJpZW5jZSA9IHRhcmdldEV4cC5ob3RlbHMubWFwKFxuICAgICAgICAgICAgICAgICAgICAoaDogYW55KSA9PiBoLmlkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpdGVtcy5maWx0ZXIoKGl0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpdGVtSG90ZWxUeXBlID0gKGl0IGFzIGFueSk/LmhvdGVsdHlwZSA/PyAnJztcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1CcmFuZCA9IHRoaXMuZ2V0SXRlbUJyYW5kKGl0KTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1JZCA9IChpdCBhcyBhbnkpPy5pZDtcblxuICAgICAgICAgICAgY29uc3QgaG90ZWxUeXBlT2sgPVxuICAgICAgICAgICAgICAgIGV4Y2x1ZGVGaWx0ZXIgPT09ICdob3RlbFR5cGUnIHx8XG4gICAgICAgICAgICAgICAgIXRoaXMuc2VsZWN0ZWRIb3RlbFR5cGUgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmNhbm9uaWNhbFNsdWcoaXRlbUhvdGVsVHlwZSkgPT09XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2Fub25pY2FsU2x1Zyh0aGlzLnNlbGVjdGVkSG90ZWxUeXBlKTtcblxuICAgICAgICAgICAgY29uc3QgZGVzdGluYXRpb25PayA9XG4gICAgICAgICAgICAgICAgZXhjbHVkZUZpbHRlciA9PT0gJ2Rlc3RpbmF0aW9uJyB8fFxuICAgICAgICAgICAgICAgICF0aGlzLnNlbGVjdGVkRGVzdGluYXRpb24gfHxcbiAgICAgICAgICAgICAgICAoKChpdCBhcyBhbnkpPy5kZXN0aW5hdGlvbnMgPz8gW10pIGFzIGFueVtdKS5zb21lKFxuICAgICAgICAgICAgICAgICAgICAoZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnRvU2x1ZyhkPy5uYW1lID8/ICcnKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnRvU2x1Zyh0aGlzLnNlbGVjdGVkRGVzdGluYXRpb24pXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgYnJhbmRPayA9XG4gICAgICAgICAgICAgICAgZXhjbHVkZUZpbHRlciA9PT0gJ2JyYW5kJyB8fFxuICAgICAgICAgICAgICAgICF0aGlzLnNlbGVjdGVkQnJhbmQgfHxcbiAgICAgICAgICAgICAgICBVdGlscy50b1NsdWcoaXRlbUJyYW5kKSA9PT0gVXRpbHMudG9TbHVnKHRoaXMuc2VsZWN0ZWRCcmFuZCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGV4cGVyaWVuY2VPayA9XG4gICAgICAgICAgICAgICAgZXhjbHVkZUZpbHRlciA9PT0gJ2V4cGVyaWVuY2UnIHx8XG4gICAgICAgICAgICAgICAgIXRoaXMuc2VsZWN0ZWRFeHBlcmllbmNlIHx8XG4gICAgICAgICAgICAgICAgdmFsaWRIb3RlbElkc0ZvckV4cGVyaWVuY2UuaW5jbHVkZXMoaXRlbUlkKTtcblxuICAgICAgICAgICAgY29uc3Qgc2VydmljZXNPayA9XG4gICAgICAgICAgICAgICAgZXhjbHVkZUZpbHRlciA9PT0gJ3NlcnZpY2VzJyB8fFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlcy5zaXplID09PSAwIHx8XG4gICAgICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkU2VydmljZXMpLmV2ZXJ5KChzZWxlY3RlZFNydikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtU2VydmljZXMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgKGl0IGFzIGFueSk/LnNlcnZpY2VzU2VydmljZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKGl0IGFzIGFueSk/LnNlcnZpY2VzX3NlcnZpY2U7XG4gICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpdGVtU2VydmljZXMpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtU2VydmljZXMuc29tZShcbiAgICAgICAgICAgICAgICAgICAgICAgIChzOiBhbnkpID0+IHM/Lm5hbWU/LnRyaW0oKSA9PT0gc2VsZWN0ZWRTcnZcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBob3RlbFR5cGVPayAmJlxuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uT2sgJiZcbiAgICAgICAgICAgICAgICBicmFuZE9rICYmXG4gICAgICAgICAgICAgICAgZXhwZXJpZW5jZU9rICYmXG4gICAgICAgICAgICAgICAgc2VydmljZXNPa1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0IGZpbHRlcmVkSXRlbXMoKTogQmFieWxvbkhvdGVsR2xvYmFsSXRlbVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SXRlbXNNYXRjaGluZygnbm9uZScpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFjdHVhbGl6YSBsb3MgYXJyYXlzIGRlIG9wY2lvbmVzIHBhcmEgb2N1bHRhciBhcXVlbGxhcyBxdWUgZGV2b2x2ZXLDrWFuIDAgcmVzdWx0YWRvcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZUR5bmFtaWNPcHRpb25zKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXRlbXMgfHwgdGhpcy5pdGVtcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgICAgICAvLyAtLSBEZXN0aW5vcyAtLVxuICAgICAgICBjb25zdCBpdGVtc0ZvckRlc3QgPSB0aGlzLmdldEl0ZW1zTWF0Y2hpbmcoJ2Rlc3RpbmF0aW9uJyk7XG4gICAgICAgIGNvbnN0IHZhbGlkRGVzdHMgPSBuZXcgU2V0KFxuICAgICAgICAgICAgaXRlbXNGb3JEZXN0XG4gICAgICAgICAgICAgICAgLmZsYXRNYXAoKGkpID0+XG4gICAgICAgICAgICAgICAgICAgICgoaSBhcyBhbnkpPy5kZXN0aW5hdGlvbnMgPz8gW10pLm1hcCgoZDogYW55KSA9PiBkPy5uYW1lKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAgICAgLm1hcCgodjogc3RyaW5nKSA9PiB2LnRyaW0oKSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbk9wdGlvbnMgPSB0aGlzLmJhc2VEZXN0aW5hdGlvbk9wdGlvbnMuZmlsdGVyKFxuICAgICAgICAgICAgKG9wdCkgPT4gdmFsaWREZXN0cy5oYXMob3B0KSB8fCB0aGlzLnNlbGVjdGVkRGVzdGluYXRpb24gPT09IG9wdFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIC0tIE1hcmNhcyAtLVxuICAgICAgICBjb25zdCBpdGVtc0ZvckJyYW5kID0gdGhpcy5nZXRJdGVtc01hdGNoaW5nKCdicmFuZCcpO1xuICAgICAgICBjb25zdCB2YWxpZEJyYW5kcyA9IG5ldyBTZXQoXG4gICAgICAgICAgICBpdGVtc0ZvckJyYW5kLm1hcCgoaSkgPT4gdGhpcy5nZXRJdGVtQnJhbmQoaSkpLmZpbHRlcihCb29sZWFuKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmJyYW5kT3B0aW9ucyA9IHRoaXMuYmFzZUJyYW5kT3B0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgICAob3B0KSA9PiB2YWxpZEJyYW5kcy5oYXMob3B0KSB8fCB0aGlzLnNlbGVjdGVkQnJhbmQgPT09IG9wdFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIC0tIFRpcG9zIGRlIEhvdGVsIC0tXG4gICAgICAgIGNvbnN0IGl0ZW1zRm9ySG90ZWxUeXBlID0gdGhpcy5nZXRJdGVtc01hdGNoaW5nKCdob3RlbFR5cGUnKTtcbiAgICAgICAgY29uc3QgdmFsaWRIb3RlbFR5cGVzID0gbmV3IFNldChcbiAgICAgICAgICAgIGl0ZW1zRm9ySG90ZWxUeXBlXG4gICAgICAgICAgICAgICAgLm1hcCgoaSkgPT4gKGkgYXMgYW55KT8uaG90ZWx0eXBlKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAubWFwKCh2OiBzdHJpbmcpID0+IHYudHJpbSgpKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmhvdGVsVHlwZU9wdGlvbnMgPSB0aGlzLmJhc2VIb3RlbFR5cGVPcHRpb25zLmZpbHRlcihcbiAgICAgICAgICAgIChvcHQpID0+IHZhbGlkSG90ZWxUeXBlcy5oYXMob3B0KSB8fCB0aGlzLnNlbGVjdGVkSG90ZWxUeXBlID09PSBvcHRcbiAgICAgICAgKTtcblxuICAgICAgICAvLyAtLSBFeHBlcmllbmNpYXMgLS1cbiAgICAgICAgY29uc3QgaXRlbXNGb3JFeHAgPSB0aGlzLmdldEl0ZW1zTWF0Y2hpbmcoJ2V4cGVyaWVuY2UnKTtcbiAgICAgICAgY29uc3QgdmFsaWRFeHBJZHMgPSBuZXcgU2V0KGl0ZW1zRm9yRXhwLm1hcCgoaSkgPT4gKGkgYXMgYW55KT8uaWQpKTtcbiAgICAgICAgdGhpcy5leHBlcmllbmNlT3B0aW9ucyA9IHRoaXMuYmFzZUV4cGVyaWVuY2VPcHRpb25zLmZpbHRlcigob3B0KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEV4cGVyaWVuY2UgPT09IG9wdCkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRFeHAgPSB0aGlzLmV4cGVyaWVuY2VzPy5maW5kKFxuICAgICAgICAgICAgICAgIChlKSA9PiBlLm5hbWVJZGVudGlmaWVyID09PSBvcHRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoIXRhcmdldEV4cD8uaG90ZWxzKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0RXhwLmhvdGVscy5zb21lKChoOiBhbnkpID0+IHZhbGlkRXhwSWRzLmhhcyhoLmlkKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIC0tIFNlcnZpY2lvcyAtLVxuICAgICAgICBjb25zdCBpdGVtc0ZvclNlcnZpY2VzID0gdGhpcy5nZXRJdGVtc01hdGNoaW5nKCdzZXJ2aWNlcycpO1xuICAgICAgICBjb25zdCB2YWxpZFNlcnZpY2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIGl0ZW1zRm9yU2VydmljZXMuZm9yRWFjaCgoaXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VzID1cbiAgICAgICAgICAgICAgICAoaXQgYXMgYW55KT8uc2VydmljZXNTZXJ2aWNlIHx8IChpdCBhcyBhbnkpPy5zZXJ2aWNlc19zZXJ2aWNlO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2VydmljZXMpKSB7XG4gICAgICAgICAgICAgICAgc2VydmljZXMuZm9yRWFjaCgocykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocz8ubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRTZXJ2aWNlcy5hZGQocy5uYW1lLnRyaW0oKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlU2VydmljZXMgPSB0aGlzLmJhc2VBdmFpbGFibGVTZXJ2aWNlcy5maWx0ZXIoXG4gICAgICAgICAgICAob3B0KSA9PiB2YWxpZFNlcnZpY2VzLmhhcyhvcHQpIHx8IHRoaXMuc2VsZWN0ZWRTZXJ2aWNlcy5oYXMob3B0KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCBoYXNBY3RpdmVGaWx0ZXJzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISEoXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSG90ZWxUeXBlIHx8XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGVzdGluYXRpb24gfHxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCcmFuZCB8fFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEV4cGVyaWVuY2UgfHxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlcy5zaXplID4gMFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBIQU5ETEVSUyBVSVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIG9uSG90ZWxUeXBlQ2hhbmdlKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEhvdGVsVHlwZSA9IHZhbHVlID8/ICcnO1xuICAgICAgICB0aGlzLnVwZGF0ZUR5bmFtaWNPcHRpb25zKCk7XG4gICAgICAgIGlmICh0aGlzLmlzU3luY2luZ0Zyb21VcmwpIHJldHVybjtcbiAgICAgICAgdGhpcy5zeW5jUXVlcnlQYXJhbXMoKTtcbiAgICB9XG5cbiAgICBvbkRlc3RpbmF0aW9uQ2hhbmdlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZERlc3RpbmF0aW9uID0gdmFsdWUgPz8gJyc7XG4gICAgICAgIHRoaXMudXBkYXRlRHluYW1pY09wdGlvbnMoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNTeW5jaW5nRnJvbVVybCkgcmV0dXJuO1xuICAgICAgICB0aGlzLnN5bmNRdWVyeVBhcmFtcygpO1xuICAgIH1cblxuICAgIG9uQnJhbmRDaGFuZ2UodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkQnJhbmQgPSB2YWx1ZSA/PyAnJztcbiAgICAgICAgdGhpcy51cGRhdGVEeW5hbWljT3B0aW9ucygpO1xuICAgICAgICBpZiAodGhpcy5pc1N5bmNpbmdGcm9tVXJsKSByZXR1cm47XG4gICAgICAgIHRoaXMuc3luY1F1ZXJ5UGFyYW1zKCk7XG4gICAgfVxuXG4gICAgb25FeHBlcmllbmNlQ2hhbmdlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEV4cGVyaWVuY2UgPSB2YWx1ZSA/PyAnJztcbiAgICAgICAgdGhpcy51cGRhdGVEeW5hbWljT3B0aW9ucygpO1xuICAgICAgICBpZiAodGhpcy5pc1N5bmNpbmdGcm9tVXJsKSByZXR1cm47XG4gICAgICAgIHRoaXMuc3luY1F1ZXJ5UGFyYW1zKCk7XG4gICAgfVxuXG4gICAgY2xlYXJGaWx0ZXJzKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSG90ZWxUeXBlID0gJyc7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREZXN0aW5hdGlvbiA9ICcnO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQnJhbmQgPSAnJztcbiAgICAgICAgdGhpcy5zZWxlY3RlZEV4cGVyaWVuY2UgPSAnJztcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNlcnZpY2VzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMudXBkYXRlRHluYW1pY09wdGlvbnMoKTtcbiAgICAgICAgdGhpcy5zeW5jUXVlcnlQYXJhbXModHJ1ZSk7XG4gICAgfVxuXG4gICAgdG9nZ2xlU2VydmljZShzZXJ2aWNlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0ZWQgPSBuZXcgU2V0KHRoaXMuc2VsZWN0ZWRTZXJ2aWNlcyk7XG5cbiAgICAgICAgaWYgKG5ld1NlbGVjdGVkLmhhcyhzZXJ2aWNlKSkge1xuICAgICAgICAgICAgbmV3U2VsZWN0ZWQuZGVsZXRlKHNlcnZpY2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3U2VsZWN0ZWQuYWRkKHNlcnZpY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZFNlcnZpY2VzID0gbmV3U2VsZWN0ZWQ7XG4gICAgICAgIHRoaXMudXBkYXRlRHluYW1pY09wdGlvbnMoKTtcbiAgICAgICAgLy8gTm90YTogU2VydmljaW9zIG5vIHNlIHNpbmNhbiBjb24gVVJMIGhpc3TDs3JpY2FtZW50ZSwgcGVybyByZS1ldmFsdWFtb3MgZGluw6FtaWNhbWVudGUuXG4gICAgfVxuXG4gICAgdG9nZ2xlU2VydmljZXNNZW51KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzU2VydmljZXNNZW51T3BlbiA9ICF0aGlzLmlzU2VydmljZXNNZW51T3BlbjtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gVVJMIFNZTkMgKFNJRU1QUkUgU0xVRylcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBwcml2YXRlIHN5bmNRdWVyeVBhcmFtcyhjbGVhckFsbCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHFwID0gY2xlYXJBbGxcbiAgICAgICAgICAgID8geyBmaWx0ZXI6IG51bGwsIGRlc3RpbmF0aW9uOiBudWxsLCBicmFuZDogbnVsbCwgZXhwZXJpZW5jZTogbnVsbCB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgIGZpbHRlcjogdGhpcy5zZWxlY3RlZEhvdGVsVHlwZVxuICAgICAgICAgICAgICAgICAgICAgID8gKHRoaXMuZmlsdGVyTGFiZWxUb1NsdWcuZ2V0KHRoaXMuc2VsZWN0ZWRIb3RlbFR5cGUpID8/XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbm9uaWNhbFNsdWcodGhpcy5zZWxlY3RlZEhvdGVsVHlwZSkpXG4gICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuXG4gICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbjogdGhpcy5zZWxlY3RlZERlc3RpbmF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgPyAodGhpcy5kZXN0aW5hdGlvbkxhYmVsVG9TbHVnLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGVzdGluYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICkgPz8gVXRpbHMudG9TbHVnKHRoaXMuc2VsZWN0ZWREZXN0aW5hdGlvbikpXG4gICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuXG4gICAgICAgICAgICAgICAgICBicmFuZDogdGhpcy5zZWxlY3RlZEJyYW5kXG4gICAgICAgICAgICAgICAgICAgICAgPyAodGhpcy5icmFuZExhYmVsVG9TbHVnLmdldCh0aGlzLnNlbGVjdGVkQnJhbmQpID8/XG4gICAgICAgICAgICAgICAgICAgICAgICBVdGlscy50b1NsdWcodGhpcy5zZWxlY3RlZEJyYW5kKSlcbiAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG5cbiAgICAgICAgICAgICAgICAgIGV4cGVyaWVuY2U6IHRoaXMuc2VsZWN0ZWRFeHBlcmllbmNlXG4gICAgICAgICAgICAgICAgICAgICAgPyAodGhpcy5leHBlcmllbmNlTGFiZWxUb1NsdWcuZ2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRFeHBlcmllbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICApID8/IFV0aWxzLnRvU2x1Zyh0aGlzLnNlbGVjdGVkRXhwZXJpZW5jZSkpXG4gICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHFwLFxuICAgICAgICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYW5vbmljYWxTbHVnKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBsZXQgcyA9IFV0aWxzLnRvU2x1Zyh2YWx1ZSk7XG4gICAgICAgIGlmICghcykgcmV0dXJuICcnO1xuXG4gICAgICAgIGlmIChzLmxlbmd0aCA+IDMgJiYgcy5lbmRzV2l0aCgnZXMnKSkge1xuICAgICAgICAgICAgY29uc3QgYmFzZSA9IHMuc2xpY2UoMCwgLTIpO1xuICAgICAgICAgICAgaWYgKGJhc2UuZW5kc1dpdGgoJ2MnKSkgcmV0dXJuIGJhc2Uuc2xpY2UoMCwgLTEpICsgJ3onO1xuICAgICAgICAgICAgcmV0dXJuIGJhc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocy5sZW5ndGggPiAzICYmIHMuZW5kc1dpdGgoJ3MnKSkgcmV0dXJuIHMuc2xpY2UoMCwgLTEpO1xuXG4gICAgICAgIHJldHVybiBzO1xuICAgIH1cblxuICAgIGdldEtleXNBcnJheShjb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkKTogbnVtYmVyW10ge1xuICAgICAgICByZXR1cm4gY291bnQgPyBBcnJheS5mcm9tKHsgbGVuZ3RoOiBjb3VudCB9KSA6IFtdO1xuICAgIH1cblxuICAgIHRyYWNrQnlJbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIGdldEZpcnN0SW1hZ2VCeVRhZyh0YWdOYW1lOiBzdHJpbmcsIGltYWdlbmVzOiBCYWJ5bG9uSW1hZ2VJW10pIHtcbiAgICAgICAgcmV0dXJuIGdldEZpcnN0SW1hZ2VCeVRhZ0Zyb21JbWFnZXMoaW1hZ2VuZXMsIHRhZ05hbWUpID8/IGltYWdlbmVzPy5bMF07XG4gICAgfVxuXG4gICAgZ2V0TnVtYmVyKHRleHQ6IHN0cmluZyk6IG51bWJlcltdIHtcbiAgICAgICAgcmV0dXJuIFV0aWxzLmV4dHJhY3ROdW1iZXJSYW5nZSh0ZXh0KTtcbiAgICB9XG5cbiAgICBzaG93SWZTdXAodmFsdWU/OiBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgcmVnZXggPSAvXFxiKFNVUHxzdXBlcmlvcilcXGIvaTtcbiAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsdWUgPz8gJycpID8gJ1NVUCcgOiAnJztcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc29sdmVQZW5kaW5nRnJvbU1hcHMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdGaWx0ZXJTbHVnICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHNsdWcgPSB0aGlzLmNhbm9uaWNhbFNsdWcodGhpcy5wZW5kaW5nRmlsdGVyU2x1Zyk7XG4gICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuZmlsdGVyU2x1Z1RvTGFiZWwuZ2V0KHNsdWcpO1xuICAgICAgICAgICAgaWYgKGxhYmVsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEhvdGVsVHlwZSA9IGxhYmVsO1xuICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0ZpbHRlclNsdWcgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0Rlc3RpbmF0aW9uU2x1ZyAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBzbHVnID0gVXRpbHMudG9TbHVnKHRoaXMucGVuZGluZ0Rlc3RpbmF0aW9uU2x1Zyk7XG4gICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuZGVzdGluYXRpb25TbHVnVG9MYWJlbC5nZXQoc2x1Zyk7XG4gICAgICAgICAgICBpZiAobGFiZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGVzdGluYXRpb24gPSBsYWJlbDtcbiAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdEZXN0aW5hdGlvblNsdWcgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0JyYW5kU2x1ZyAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBzbHVnID0gVXRpbHMudG9TbHVnKHRoaXMucGVuZGluZ0JyYW5kU2x1Zyk7XG4gICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuYnJhbmRTbHVnVG9MYWJlbC5nZXQoc2x1Zyk7XG4gICAgICAgICAgICBpZiAobGFiZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQnJhbmQgPSBsYWJlbDtcbiAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdCcmFuZFNsdWcgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0V4cGVyaWVuY2VTbHVnICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHNsdWcgPSBVdGlscy50b1NsdWcodGhpcy5wZW5kaW5nRXhwZXJpZW5jZVNsdWcpO1xuICAgICAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmV4cGVyaWVuY2VTbHVnVG9MYWJlbC5nZXQoc2x1Zyk7XG4gICAgICAgICAgICBpZiAobGFiZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRXhwZXJpZW5jZSA9IGxhYmVsO1xuICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0V4cGVyaWVuY2VTbHVnID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZm9yY2VPcHRpb25NYXRjaCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRIb3RlbFR5cGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHdhbnRlZCA9IHRoaXMuY2Fub25pY2FsU2x1Zyh0aGlzLnNlbGVjdGVkSG90ZWxUeXBlKTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gdGhpcy5iYXNlSG90ZWxUeXBlT3B0aW9ucy5maW5kKFxuICAgICAgICAgICAgICAgIChvKSA9PiB0aGlzLmNhbm9uaWNhbFNsdWcobykgPT09IHdhbnRlZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3RlbFR5cGUgPSBtYXRjaCA/PyAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQnJhbmQpIHtcbiAgICAgICAgICAgIGNvbnN0IHdhbnRlZCA9IFV0aWxzLnRvU2x1Zyh0aGlzLnNlbGVjdGVkQnJhbmQpO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSB0aGlzLmJhc2VCcmFuZE9wdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgICAobykgPT4gVXRpbHMudG9TbHVnKG8pID09PSB3YW50ZWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQnJhbmQgPSBtYXRjaCA/PyAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRGVzdGluYXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHdhbnRlZCA9IFV0aWxzLnRvU2x1Zyh0aGlzLnNlbGVjdGVkRGVzdGluYXRpb24pO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSB0aGlzLmJhc2VEZXN0aW5hdGlvbk9wdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgICAobykgPT4gVXRpbHMudG9TbHVnKG8pID09PSB3YW50ZWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGVzdGluYXRpb24gPSBtYXRjaCA/PyAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRXhwZXJpZW5jZSkge1xuICAgICAgICAgICAgY29uc3Qgd2FudGVkID0gVXRpbHMudG9TbHVnKHRoaXMuc2VsZWN0ZWRFeHBlcmllbmNlKTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gdGhpcy5iYXNlRXhwZXJpZW5jZU9wdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgICAobykgPT4gVXRpbHMudG9TbHVnKG8pID09PSB3YW50ZWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRXhwZXJpZW5jZSA9IG1hdGNoID8/ICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0QnV0dG9uVXJsKGJ0bjogQmFieWxvbkJ1dHRvbkksIGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHVybEJhc2UgPSBidG4udXJsIHx8ICcnO1xuXG4gICAgICAgIGlmIChpbmRleCAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHVybEJhc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpZGVudGlmaWVyID1cbiAgICAgICAgICAgIGl0ZW0/Lm5hbWVJZGVudGlmaWVyID8/IGl0ZW0/Lm5hbWVfaWRlbnRpZmllciA/PyBpdGVtPy5uYW1lO1xuXG4gICAgICAgIGlmICghaWRlbnRpZmllcikge1xuICAgICAgICAgICAgcmV0dXJuIHVybEJhc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZXBhcmF0b3IgPSB1cmxCYXNlLmluY2x1ZGVzKCc/JykgPyAnJicgOiAnPyc7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXRlbT8udHlwZSA9PT0gJ2V4cGVyaWVuY2UnIHx8XG4gICAgICAgICAgICAoIWl0ZW0/LnR5cGUgJiYgKGl0ZW0/Lm5hbWVJZGVudGlmaWVyIHx8IGl0ZW0/Lm5hbWVfaWRlbnRpZmllcikpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGAke3VybEJhc2V9JHtzZXBhcmF0b3J9ZXhwZXJpZW5jZT0ke2lkZW50aWZpZXJ9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpdGVtPy50eXBlID09PSAnZGVzdGluYXRpb24nKSB7XG4gICAgICAgICAgICBjb25zdCBkZXN0aW5hdGlvblNsdWcgPSBVdGlscy50b1NsdWcoaWRlbnRpZmllcik7XG4gICAgICAgICAgICByZXR1cm4gYCR7dXJsQmFzZX0ke3NlcGFyYXRvcn1kZXN0aW5hdGlvbj0ke2Rlc3RpbmF0aW9uU2x1Z31gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVybEJhc2U7XG4gICAgfVxufVxuIiwiQGlmIChpdGVtcz8ubGVuZ3RoKSB7XG4gICAgPHNlY3Rpb24gY2xhc3M9XCJtZGwtbWQwMDJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1kbC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWNvbnRlbnQtdG9wXCI+XG4gICAgICAgICAgICAgICAgQGlmICh0ZXh0cz8udGl0bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGxpYi1iYWJ5bG9uLWR5bmFtaWMtaGVhZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgW3RhZ109XCJ0YWdzPy50aXRsZSB8fCAnaDInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzPVwibS10aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29udGVudF09XCJ0ZXh0cz8udGl0bGUgPz8gJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cInRleHRDb2xvcnM/LnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbGliLWJhYnlsb24tZHluYW1pYy1oZWFkaW5nPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKHNob3dGaWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLXNlbGVjdHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaGFzQWN0aXZlRmlsdGVycyAmJiBzaG93Q2xlYW5GaWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtLWNsZWFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyRmlsdGVycygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRleHRzPy5jbGVhbkZpbHRlcnMgPz8gJ0xpbXBpYXIgZmlsdHJvcycgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWhpZGVTZXJ2aWNlc0ZpbHRlciAmJiBhdmFpbGFibGVTZXJ2aWNlcy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGF2YWlsYWJsZVNlcnZpY2VzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm0tc2VydmljZXMtc2luZ2xlIHNlcnZpY2VzLWZpbHRlciBzZXJ2aWNlcy1maWx0ZXJfX3NpbmdsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWNoZWNrYm94LWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwic2luZ2xlLXNydi0wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFNlcnZpY2VzLmhhcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGVTZXJ2aWNlc1swXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlU2VydmljZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGVTZXJ2aWNlc1swXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInNpbmdsZS1zcnYtMFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZVNlcnZpY2VzWzBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm0tc2VydmljZXMtZmlsdGVyIG0tc2VsZWN0IHNlcnZpY2VzLWZpbHRlciBzZXJ2aWNlcy1maWx0ZXJfX211bHRpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibS1zZXJ2aWNlcy1idG5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTZXJ2aWNlc01lbnUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTQgNkgyME03IDEySDE3TTEwIDE4SDE0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRzPy5zZXJ2aWNlc3RpdGxlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkU2VydmljZXMuc2l6ZSA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHRleHRzPy5zZXJ2aWNlc3RpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdGV4dHM/LnNlcnZpY2VzdGl0bGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRTZXJ2aWNlcy5zaXplID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkU2VydmljZXMuc2l6ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXNTZXJ2aWNlc01lbnVPcGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm0tc2VydmljZXMtb3ZlcmxheVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTZXJ2aWNlc01lbnUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tc2VydmljZXMtZHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZHJvcGRvd24taGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibS1jbG9zZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVTZXJ2aWNlc01lbnUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPuKclTwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZHJvcGRvd24tY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3J2IG9mIGF2YWlsYWJsZVNlcnZpY2VzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrICRpbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm0tY2hlY2tib3gtZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcnYtJyArICRpbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkU2VydmljZXMuaGFzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVTZXJ2aWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcnZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Nydi0nICsgJGluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IHNydiB9fTwvbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tc2VsZWN0IGJyYW5kLWZpbHRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI0JyYW5kU2VsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidGV4dHM/Lm1hcmNhID8/ICdtYXJjYSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkQnJhbmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkJyYW5kQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdGV4dHM/Lm1hcmNhID8/ICdBbGwnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChvcHQgb2YgYnJhbmRPcHRpb25zOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIm9wdFwiPnt7IG9wdCB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZXhwZXJpZW5jZU9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLXNlbGVjdCBleHBlcmllbmNlLWZpbHRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjRXhwZXJpZW5jZVNlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkV4cGVyaWVuY2lhc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRXhwZXJpZW5jZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkV4cGVyaWVuY2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5FeHBlcmllbmNpYXM8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdCBvZiBleHBlcmllbmNlT3B0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjayAkaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIm9wdFwiPnt7IG9wdCB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAodGV4dHM/LmhvdGVsVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLXNlbGVjdCBob3RlbHR5cGUtZmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNob3RlbFR5cGVTZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHM/LmhvdGVsVHlwZSA/PyAnaG90ZWxlcydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkSG90ZWxUeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uSG90ZWxUeXBlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdGV4dHM/LmhvdGVsVHlwZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHQgb2YgaG90ZWxUeXBlT3B0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjayAkaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIm9wdFwiPnt7IG9wdCB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tc2VsZWN0IGRlc3RpbmF0aW9uLWZpbHRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI0Rlc3RpbmF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0cz8uZGVzdGluYXRpb25zID8/ICdkZXN0aW5vcydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZERlc3RpbmF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25EZXN0aW5hdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRleHRzPy5kZXN0aW5hdGlvbnMgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKG9wdCBvZiBkZXN0aW5hdGlvbk9wdGlvbnM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwib3B0XCI+e3sgb3B0IH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibS1jYXJkcy1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS4tLW1heENvbHVtbnNdPVwibWF4Q29sdW1ucyA/PyA0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAaWYgKGZpbHRlcmVkSXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGZpbHRlcmVkSXRlbXM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibS1jYXJkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmRlbXB0eTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFnZXRGaXJzdEltYWdlQnlUYWcoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5pbWFnZXMgPz9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8ubXVsdGltZWRpYT8uaW1hZ2VuZXMgPz9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5pbWFnZXM/LlswXSA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/Lm11bHRpbWVkaWE/LmltYWdlbmVzPy5bMF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Rmlyc3RJbWFnZUJ5VGFnKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uaW1hZ2VzID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8ubXVsdGltZWRpYT8uaW1hZ2VuZXMgPz9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmltYWdlcz8uWzBdID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5tdWx0aW1lZGlhPy5pbWFnZW5lcz8uWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGluay1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwiaXRlbS5saW5rcz8uWzBdPy51cmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpbmtUeXBlXT1cIml0ZW0ubGlua3M/LlswXT8ubGlua1R5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVQb2ludGVyTm9uZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibS1jYXJkLXRvcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtaW1hZ2VdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoJyArIGltZy5pbWc/LnNyYyArICcpJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tdGFnLWxlZnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLmhvdGVsdHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5ob3RlbHR5cGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1rZXlzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtPy5ob3RlbHR5cGUgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdIb3RlbCcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uaG90ZWx0eXBlID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0jDtHRlbCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uaG90ZWxjYXRlZ29yeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVnb3J5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSBvZiBnZXROdW1iZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uaG90ZWxjYXRlZ29yeSA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrICRpbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMCAyMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC0xNDA0LjAwMDAwMCwgLTU5MjIuMDAwMDAwKSB0cmFuc2xhdGUoMTkxLjAwMDAwMCwgNTg2NS4wMDAwMDApIHRyYW5zbGF0ZSgxMTA5LjAwMDAwMCwgNTcuMDAwMDAwKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNmZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGwtb3BhY2l0eT1cIjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGwtcnVsZT1cIm5vbnplcm9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTAgMGwyLjI5NCA3LjEwNGMuMDM0LjEwNi4xMzMuMTc4LjI0NS4xNzhMMjAgNy4yNjdsLTYuMDQ2IDQuMzc0di4wMDFjLS4wOS4wNjYtLjEyOC4xODItLjA5My4yODlsMi4zMjIgNy4wOTUtNi4wMzItNC40Yy0uMDktLjA2NS0uMjEzLS4wNjUtLjMwMyAwbC02LjAyOSA0LjQgMi4zMjItNy4wOTVINi4xNGMuMDM1LS4xMDctLjAwMy0uMjIzLS4wOTQtLjI4OUwwIDcuMjY4bDcuNDYxLjAxNS4wMDEtLjAwMWMuMTEyIDAgLjIxMS0uMDcyLjI0NS0uMTc4TDEwIDB6XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMTA0LjAwMDAwMCwgMC4wMDAwMDApXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtPy5ob3RlbHR5cGUgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBcGFydGFtZW50bycgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uaG90ZWx0eXBlID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FwcGFydGVtZW50JykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5ob3RlbGNhdGVnb3J5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F0ZWdvcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtIG9mIGdldE51bWJlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5ob3RlbGNhdGVnb3J5ID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2sgJGluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjEzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDEzIDEzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0wLjE0NjI5NiA0LjI2NDc5TDEuMTQwMTUgMi4wMTY5MkMxLjMxMjg5IDEuNjI1NTkgMS42MjU1OSAxLjMxMjg5IDIuMDE2OTIgMS4xNDAxNUw0LjI2NDc5IDAuMTQ2Mjk3QzQuNTgxNzQgMC4wMDY0MTgyNiA0LjkzMzU2IC0wLjAzNDM5NDQgNS4yNzQxMiAwLjAyOTIxMjdDNS42MTQ2NyAwLjA5MjgxOTggNS45MjgwNSAwLjI1Nzg3NiA2LjE3MzE0IDAuNTAyNzNMNy45NDc1IDIuMjc4MzlDOC4xNjA2IDIuNDkxNTUgOC4zMTM4OCAyLjc1NzAxIDguMzkxOTcgMy4wNDgxM0M4LjQ3MDA2IDMuMzM5MjUgOC40NzAyIDMuNjQ1NzggOC4zOTIzOSAzLjkzNjk4TDcuOTM1NzkgNS42NDEwOUwxMi44NjYgMTAuNTcxM0MxMi45MDg1IDEwLjYxMzYgMTIuOTQyMiAxMC42NjM5IDEyLjk2NTIgMTAuNzE5M0MxMi45ODgyIDEwLjc3NDYgMTMgMTAuODM0IDEzIDEwLjg5MzlWMTIuNTQ0N0MxMi45OTkzIDEyLjY2NTIgMTIuOTUxMSAxMi43ODA3IDEyLjg2NTkgMTIuODY1OUMxMi43ODA3IDEyLjk1MTEgMTIuNjY1MiAxMi45OTkzIDEyLjU0NDcgMTNIMTAuODkzOUMxMC43OTI2IDEyLjk5OTggMTAuNjk0MiAxMi45NjU5IDEwLjYxNDIgMTIuOTAzOEMxMC41MzQxIDEyLjg0MTYgMTAuNDc3IDEyLjc1NDcgMTAuNDUxNiAxMi42NTY2TDEwLjIwNDUgMTEuNjc5Nkw5LjMzMDMgMTEuNTEzMUM5LjI0MzIyIDExLjQ5NjggOS4xNjI4MiAxMS40NTUzIDkuMDk5MDMgMTEuMzkzOEM5LjAzNTIzIDExLjMzMjMgOC45OTA4MiAxMS4yNTM1IDguOTcxMjcgMTEuMTY3MUw4LjczMzIxIDEwLjExNzNMNy44OTAyNiAxMC4wMzY3QzcuNzg0NzkgMTAuMDI3NCA3LjY4NjA4IDkuOTgwOCA3LjYxMTg4IDkuOTA1MjhMNS42NDEwOSA3LjkzNTc5TDMuOTM2OTcgOC4zOTIzOUMzLjY0NTggOC40NzA0NyAzLjMzOTE5IDguNDcwNDYgMy4wNDgwMiA4LjM5MjM2QzIuNzU2ODUgOC4zMTQyNiAyLjQ5MTQgOC4xNjA4MiAyLjI3ODM5IDcuOTQ3NUwwLjUwMjcyOSA2LjE3MzE0QzAuMjU3ODc1IDUuOTI4MDUgMC4wOTI4MjAyIDUuNjE0NjcgMC4wMjkyMTMgNS4yNzQxMkMtMC4wMzQzOTQzIDQuOTMzNTcgMC4wMDY0MTcyNyA0LjU4MTc0IDAuMTQ2Mjk2IDQuMjY0NzlaTTMuNjcwMyA1LjA4OTUzQzMuODEwNjEgNS4yMjk2OCAzLjk4OTMyIDUuMzI1MDggNC4xODM4NSA1LjM2MzY5QzQuMzc4MzcgNS40MDIyOSA0LjU3OTk3IDUuMzgyMzYgNC43NjMxNyA1LjMwNjQxQzQuOTQ2MzYgNS4yMzA0NyA1LjEwMjk0IDUuMTAxOTEgNS4yMTMwOSA0LjkzN0M1LjMyMzI0IDQuNzcyMSA1LjM4MjAzIDQuNTc4MjMgNS4zODIwMyA0LjM3OTkxQzUuMzgyMDMgNC4xODE2IDUuMzIzMjQgMy45ODc3MyA1LjIxMzA5IDMuODIyODNDNS4xMDI5NCAzLjY1NzkyIDQuOTQ2MzYgMy41MjkzNiA0Ljc2MzE3IDMuNDUzNDJDNC41Nzk5NyAzLjM3NzQ3IDQuMzc4MzcgMy4zNTc1NCA0LjE4Mzg1IDMuMzk2MTRDMy45ODkzMiAzLjQzNDc1IDMuODEwNjEgMy41MzAxNSAzLjY3MDMgMy42NzAzQzMuNTc2ODkgMy43NjMzNiAzLjUwMjc3IDMuODczOTUgMy40NTIxOSAzLjk5NTcyQzMuNDAxNjIgNC4xMTc1IDMuMzc1NTggNC4yNDgwNiAzLjM3NTU4IDQuMzc5OTFDMy4zNzU1OCA0LjUxMTc3IDMuNDAxNjIgNC42NDIzMyAzLjQ1MjE5IDQuNzY0MTFDMy41MDI3NyA0Ljg4NTg4IDMuNTc2ODkgNC45OTY0NyAzLjY3MDMgNS4wODk1M1pcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI2ZmZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGwtb3BhY2l0eT1cIjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc2hvd0lmU3VwKGl0ZW0/LmhvdGVsY2F0ZWdvcnkpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtPy50ZXh0cz8uYWRkaXRpb25hbDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtLXRhZy1yaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xlZnQtbW9kZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpdGVtLmhvdGVsdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5zdHlsZXM/LnByaW1hcnkgPz9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2ZmNDMzOCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0/LnRleHRzPy5hZGRpdGlvbmFsMiB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0udGV4dHM/LnRpdGxlIHx8IGl0ZW0udGV4dHM/Lm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnRleHRzPy50aXRsZSA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0udGV4dHM/Lm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tc3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0ubG9jYWxpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5sb2NhbGl0eSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0ubG9jYWxpdHkgJiYgaXRlbS5wcm92aW5jZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5wcm92aW5jZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnByb3ZpbmNlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5idXR0b25zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnRuIG9mIGl0ZW0uYnV0dG9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2sgJGluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm0tYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbS1idXR0b24tc20nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW5kZXggJSAyID09PSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtLWJ1dCBtLXVuZGVybGluZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbmRleCAlIDIgIT09IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS4tLWJ0bi1wcmltYXJ5LWR5bmFtaWNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5zdHlsZXM/LnByaW1hcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuLS1idG4taG92ZXItZHluYW1pY109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnN0eWxlcz8ucHJpbWFyeUhvdmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0QnV0dG9uVXJsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidG4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50YXJnZXRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnRuLnRhcmdldCB8fCAnX3NlbGYnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpbmtUeXBlXT1cImJ0bi5saW5rVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImJ0bi5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGJ0bi5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZW1wdHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHM/Lm5vdEZvdW5kID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdObyBzZSBlbmNvbnRyYXJvbiByZXN1bHRhZG9zIGNvbiBlc29zIGZpbHRyb3MuJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvc2VjdGlvbj5cbn1cbiJdfQ==
|