ngx-wapp-components 1.32.0 → 1.32.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/misc/w-cron-expressions/w-cron-expressions.component.mjs +131 -29
- package/esm2020/lib/shared/enums/cron-expressions/enum.model.mjs +3 -3
- package/esm2020/lib/shared/models/cron-expressions/cron-component-translations.model.mjs +1 -1
- package/fesm2015/ngx-wapp-components.mjs +124 -23
- package/fesm2015/ngx-wapp-components.mjs.map +1 -1
- package/fesm2020/ngx-wapp-components.mjs +123 -23
- package/fesm2020/ngx-wapp-components.mjs.map +1 -1
- package/lib/misc/w-cron-expressions/w-cron-expressions.component.d.ts +15 -3
- package/lib/shared/enums/cron-expressions/enum.model.d.ts +2 -2
- package/lib/shared/models/cron-expressions/cron-component-translations.model.d.ts +1 -0
- package/package.json +3 -2
|
@@ -1,27 +1,33 @@
|
|
|
1
1
|
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
-
import { FormControl } from '@angular/forms';
|
|
2
|
+
import { FormControl, Validators } from '@angular/forms';
|
|
3
3
|
import { CronFieldType, CronPeriodicityType } from '../../shared/enums/cron-expressions/enum.model';
|
|
4
4
|
import cronstrue from 'cronstrue/i18n';
|
|
5
|
+
import { CronExpressionParser } from 'cron-parser';
|
|
6
|
+
import { WDatePipeFormatType } from '../../shared/models/enums.model';
|
|
5
7
|
import * as i0 from "@angular/core";
|
|
6
8
|
import * as i1 from "@angular/forms";
|
|
7
9
|
import * as i2 from "../../shared/services/form-control.service";
|
|
8
|
-
import * as i3 from "
|
|
9
|
-
import * as i4 from "
|
|
10
|
-
import * as i5 from "../../edit/w-edit-
|
|
11
|
-
import * as i6 from "../../edit/w-edit-
|
|
12
|
-
import * as i7 from "../../
|
|
13
|
-
import * as i8 from "../../layout/w-panel
|
|
14
|
-
import * as i9 from "../../
|
|
10
|
+
import * as i3 from "../../shared/pipes/w-date.pipe";
|
|
11
|
+
import * as i4 from "@angular/common";
|
|
12
|
+
import * as i5 from "../../edit/w-edit-input-number/w-edit-input-number.component";
|
|
13
|
+
import * as i6 from "../../edit/w-edit-select/w-edit-select.component";
|
|
14
|
+
import * as i7 from "../../edit/w-edit-multiselect/w-edit-multiselect.component";
|
|
15
|
+
import * as i8 from "../../layout/w-panel/w-panel.component";
|
|
16
|
+
import * as i9 from "../../layout/w-panel-grid/w-panel-grid.component";
|
|
17
|
+
import * as i10 from "../../view/w-view-text/w-view-text.component";
|
|
15
18
|
export class WCronExpressionsComponent {
|
|
16
|
-
constructor(formBuilder, formControlService) {
|
|
19
|
+
constructor(formBuilder, formControlService, wappDate) {
|
|
17
20
|
this.formBuilder = formBuilder;
|
|
18
21
|
this.formControlService = formControlService;
|
|
22
|
+
this.wappDate = wappDate;
|
|
19
23
|
this.monthDays = Array.from({ length: 31 }, (_, i) => ({ value: i + 1 }));
|
|
20
24
|
this.minutes = Array.from({ length: 60 }, (_, i) => i);
|
|
21
25
|
this.hours = Array.from({ length: 24 }, (_, i) => i);
|
|
22
26
|
this.expression = ['*', '*', '*', '*', '*', '*'];
|
|
23
27
|
this.description = '';
|
|
28
|
+
this.occurrences = '';
|
|
24
29
|
this.hasContainer = true;
|
|
30
|
+
this.occurrencesNumber = 5;
|
|
25
31
|
this.translationsObject = {
|
|
26
32
|
periodicities: {
|
|
27
33
|
everyXMinutes: "Repetir cada X minutos",
|
|
@@ -62,7 +68,8 @@ export class WCronExpressionsComponent {
|
|
|
62
68
|
daysLabel: "Día",
|
|
63
69
|
weekDaysLabel: "Días de la semana",
|
|
64
70
|
monthsLabel: "Meses",
|
|
65
|
-
descriptionLabel: "Descripción"
|
|
71
|
+
descriptionLabel: "Descripción",
|
|
72
|
+
occurrencesLabel: "Las siguientes 5 ocurrencias serán: "
|
|
66
73
|
};
|
|
67
74
|
this.cronExpression = new EventEmitter();
|
|
68
75
|
}
|
|
@@ -89,8 +96,11 @@ export class WCronExpressionsComponent {
|
|
|
89
96
|
weekDays: new FormControl(this.hasInitialValue(parts[CronFieldType.WeekDay]) ?
|
|
90
97
|
parts[CronFieldType.WeekDay].replace(/\//g, '').split(',').map(Number)
|
|
91
98
|
: []),
|
|
99
|
+
monthDay: new FormControl(this.hasInitialValue(parts[CronFieldType.MonthDay]) ?
|
|
100
|
+
this.formatCronNumber(parts[CronFieldType.MonthDay])
|
|
101
|
+
: 1),
|
|
92
102
|
monthDays: new FormControl(this.hasInitialValue(parts[CronFieldType.MonthDay]) ?
|
|
93
|
-
parts[CronFieldType.MonthDay].replace(
|
|
103
|
+
parts[CronFieldType.MonthDay].replace(/[/*]/g, '').split(',').map(Number)
|
|
94
104
|
: []),
|
|
95
105
|
months: new FormControl(this.hasInitialValue(parts[CronFieldType.Month]) ?
|
|
96
106
|
parts[CronFieldType.Month].replace(/\//g, '').split(',').map(Number)
|
|
@@ -103,6 +113,7 @@ export class WCronExpressionsComponent {
|
|
|
103
113
|
minutes: new FormControl(0),
|
|
104
114
|
hours: new FormControl(0),
|
|
105
115
|
weekDays: new FormControl([]),
|
|
116
|
+
monthDay: new FormControl(1),
|
|
106
117
|
monthDays: new FormControl([]),
|
|
107
118
|
months: new FormControl(0),
|
|
108
119
|
});
|
|
@@ -149,6 +160,7 @@ export class WCronExpressionsComponent {
|
|
|
149
160
|
initParsedValues() {
|
|
150
161
|
this.expression = this.parseCronExpression(this.initialValue);
|
|
151
162
|
this.periodicitySelected = this.getCronPeriodicityType(this.initialValue);
|
|
163
|
+
this.handleZeroHoursArray();
|
|
152
164
|
this.cronToHuman();
|
|
153
165
|
}
|
|
154
166
|
parseCronExpression(cron) {
|
|
@@ -224,9 +236,16 @@ export class WCronExpressionsComponent {
|
|
|
224
236
|
return false;
|
|
225
237
|
}
|
|
226
238
|
}
|
|
227
|
-
|
|
239
|
+
allowMonthDay() {
|
|
228
240
|
switch (this.periodicitySelected) {
|
|
229
241
|
case CronPeriodicityType.EveryXDays:
|
|
242
|
+
return true;
|
|
243
|
+
default:
|
|
244
|
+
return false;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
allowMonthDays() {
|
|
248
|
+
switch (this.periodicitySelected) {
|
|
230
249
|
case CronPeriodicityType.EveryXMonths:
|
|
231
250
|
case CronPeriodicityType.EveryMonth:
|
|
232
251
|
return true;
|
|
@@ -242,30 +261,54 @@ export class WCronExpressionsComponent {
|
|
|
242
261
|
return false;
|
|
243
262
|
}
|
|
244
263
|
}
|
|
264
|
+
isMonthDaysRequired() {
|
|
265
|
+
if (this.periodicitySelected == CronPeriodicityType.EveryXMonths) {
|
|
266
|
+
return false;
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
return true;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
245
272
|
onPeriodicitySelected() {
|
|
246
273
|
this.restartExpression();
|
|
247
|
-
this.
|
|
274
|
+
this.handleZeroHoursArray();
|
|
275
|
+
this.updateMonthDaysRequirement();
|
|
248
276
|
this.onHoursSelected(this.hourSelected);
|
|
249
277
|
this.onWeekDaysSelected(this.weekDaySelected);
|
|
250
278
|
this.onMonthsSelected(this.monthSelected);
|
|
251
|
-
this.onMonthDaysSelected(this.
|
|
279
|
+
this.onMonthDaysSelected(this.monthDaysSelected);
|
|
280
|
+
this.onMonthDaySelected(this.monthDaySelected);
|
|
281
|
+
this.onMinuteSelected(this.minuteSelected);
|
|
282
|
+
}
|
|
283
|
+
handleZeroHoursArray() {
|
|
284
|
+
if (this.periodicitySelected == CronPeriodicityType.EveryXHours) {
|
|
285
|
+
this.hours = Array.from({ length: 23 }, (_, i) => i + 1);
|
|
286
|
+
if (this.hourSelected == 0) {
|
|
287
|
+
this.hourSelected = 1;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
this.hours = Array.from({ length: 24 }, (_, i) => i);
|
|
292
|
+
}
|
|
252
293
|
}
|
|
253
294
|
onMinuteSelected(minuteSelected) {
|
|
254
295
|
switch (this.periodicitySelected) {
|
|
255
|
-
case CronPeriodicityType.EveryXMinutes:
|
|
296
|
+
case CronPeriodicityType.EveryXMinutes: {
|
|
256
297
|
this.expression[CronFieldType.Second] = `0`;
|
|
257
|
-
this.expression[CronFieldType.Minute] =
|
|
298
|
+
this.expression[CronFieldType.Minute] = `*/${minuteSelected}`;
|
|
258
299
|
break;
|
|
300
|
+
}
|
|
259
301
|
case CronPeriodicityType.EveryMinute:
|
|
260
302
|
case CronPeriodicityType.EveryHourOfDay:
|
|
261
303
|
case CronPeriodicityType.EveryXHours:
|
|
262
304
|
case CronPeriodicityType.EveryXDays:
|
|
263
305
|
case CronPeriodicityType.EveryWeek:
|
|
264
306
|
case CronPeriodicityType.EveryMonth:
|
|
265
|
-
case CronPeriodicityType.EveryXMonths:
|
|
307
|
+
case CronPeriodicityType.EveryXMonths: {
|
|
266
308
|
this.expression[CronFieldType.Second] = `0`;
|
|
267
309
|
this.expression[CronFieldType.Minute] = `${minuteSelected}`;
|
|
268
310
|
break;
|
|
311
|
+
}
|
|
269
312
|
}
|
|
270
313
|
this.cronToHuman();
|
|
271
314
|
}
|
|
@@ -296,12 +339,24 @@ export class WCronExpressionsComponent {
|
|
|
296
339
|
onMonthDaysSelected(monthDaysSelected) {
|
|
297
340
|
switch (this.periodicitySelected) {
|
|
298
341
|
case CronPeriodicityType.EveryXDays:
|
|
299
|
-
|
|
300
|
-
this.expression[CronFieldType.MonthDay] = `/${monthDaysSelected}`;
|
|
342
|
+
this.expression[CronFieldType.MonthDay] = `*/${this.monthDaySelected}`;
|
|
301
343
|
break;
|
|
302
344
|
case CronPeriodicityType.EveryMonth:
|
|
303
345
|
case CronPeriodicityType.EveryXMonths:
|
|
304
|
-
|
|
346
|
+
if (monthDaysSelected instanceof Array && monthDaysSelected.length == 0) {
|
|
347
|
+
this.expression[CronFieldType.MonthDay] = `*`;
|
|
348
|
+
}
|
|
349
|
+
else {
|
|
350
|
+
this.expression[CronFieldType.MonthDay] = `${monthDaysSelected}`;
|
|
351
|
+
}
|
|
352
|
+
break;
|
|
353
|
+
}
|
|
354
|
+
this.cronToHuman();
|
|
355
|
+
}
|
|
356
|
+
onMonthDaySelected(monthDaysSelected) {
|
|
357
|
+
switch (this.periodicitySelected) {
|
|
358
|
+
case CronPeriodicityType.EveryXDays:
|
|
359
|
+
this.expression[CronFieldType.MonthDay] = `*/${monthDaysSelected}`;
|
|
305
360
|
break;
|
|
306
361
|
}
|
|
307
362
|
this.cronToHuman();
|
|
@@ -309,6 +364,7 @@ export class WCronExpressionsComponent {
|
|
|
309
364
|
onMonthsSelected(monthsSelected) {
|
|
310
365
|
switch (this.periodicitySelected) {
|
|
311
366
|
case CronPeriodicityType.EveryXMonths: {
|
|
367
|
+
this.expression[CronFieldType.Second] = `0`;
|
|
312
368
|
this.expression[CronFieldType.Month] = `${monthsSelected}`;
|
|
313
369
|
}
|
|
314
370
|
}
|
|
@@ -316,7 +372,34 @@ export class WCronExpressionsComponent {
|
|
|
316
372
|
}
|
|
317
373
|
cronToHuman() {
|
|
318
374
|
this.description = cronstrue.toString(this.expression.join(' '), { locale: window.navigator.language.slice(0, 2) });
|
|
319
|
-
|
|
375
|
+
const options = {
|
|
376
|
+
currentDate: new Date(),
|
|
377
|
+
};
|
|
378
|
+
const interval = CronExpressionParser.parse(this.expression.join(' '), options);
|
|
379
|
+
let dates = interval.take(this.occurrencesNumber).map((date) => new Date(date.toString()));
|
|
380
|
+
this.occurrences = dates.map(d => this.wappDate.transform(d, WDatePipeFormatType.G)).join(", ");
|
|
381
|
+
let cronExpression = this.expression.join(' ');
|
|
382
|
+
if (![CronPeriodicityType.EveryXMinutes, CronPeriodicityType.EveryMinute, CronPeriodicityType.EveryXHours].includes(this.periodicitySelected)) {
|
|
383
|
+
cronExpression = this.localUserCronToUTCCron(this.expression.join(' '));
|
|
384
|
+
}
|
|
385
|
+
this.cronExpression.emit(cronExpression);
|
|
386
|
+
}
|
|
387
|
+
localUserCronToUTCCron(cronExpression) {
|
|
388
|
+
const cronParts = cronExpression.trim().split(' ');
|
|
389
|
+
const userOffset = -(new Date().getTimezoneOffset() / 60);
|
|
390
|
+
const localHour = parseInt(cronParts[2], 10);
|
|
391
|
+
let utcHour = localHour - userOffset;
|
|
392
|
+
let dayAdjustment = 0;
|
|
393
|
+
if (utcHour >= 24) {
|
|
394
|
+
utcHour -= 24;
|
|
395
|
+
dayAdjustment = 1;
|
|
396
|
+
}
|
|
397
|
+
else if (utcHour < 0) {
|
|
398
|
+
utcHour += 24;
|
|
399
|
+
dayAdjustment = -1;
|
|
400
|
+
}
|
|
401
|
+
cronParts[2] = utcHour.toString();
|
|
402
|
+
return cronParts.join(' ');
|
|
320
403
|
}
|
|
321
404
|
formatArrayValues(array) {
|
|
322
405
|
return array?.map(a => a.value).join(',');
|
|
@@ -330,7 +413,7 @@ export class WCronExpressionsComponent {
|
|
|
330
413
|
return null;
|
|
331
414
|
}
|
|
332
415
|
const [second, minute, hour, dayOfMonth, month, dayOfWeek] = parts;
|
|
333
|
-
if (minute.startsWith("
|
|
416
|
+
if (minute.startsWith("*/") && hour === "*" && dayOfMonth === "*" && month === "*" && dayOfWeek === "*") {
|
|
334
417
|
return CronPeriodicityType.EveryXMinutes;
|
|
335
418
|
}
|
|
336
419
|
if (minute !== "*" && hour === "*" && dayOfMonth === "*" && month === "*" && dayOfWeek === "*") {
|
|
@@ -342,7 +425,7 @@ export class WCronExpressionsComponent {
|
|
|
342
425
|
if (minute !== "*" && hour !== "*" && dayOfMonth === "*" && month === "*" && dayOfWeek === "*") {
|
|
343
426
|
return CronPeriodicityType.EveryHourOfDay;
|
|
344
427
|
}
|
|
345
|
-
if (dayOfMonth.startsWith("
|
|
428
|
+
if (dayOfMonth.startsWith("*/") && month === "*" && dayOfWeek === "*") {
|
|
346
429
|
return CronPeriodicityType.EveryXDays;
|
|
347
430
|
}
|
|
348
431
|
if (dayOfWeek !== "*" && dayOfMonth === "*" && month === "*") {
|
|
@@ -351,11 +434,21 @@ export class WCronExpressionsComponent {
|
|
|
351
434
|
if (dayOfMonth !== "*" && month == "*") {
|
|
352
435
|
return CronPeriodicityType.EveryMonth;
|
|
353
436
|
}
|
|
354
|
-
if (
|
|
437
|
+
if (month !== "*") {
|
|
355
438
|
return CronPeriodicityType.EveryXMonths;
|
|
356
439
|
}
|
|
357
440
|
return null;
|
|
358
441
|
}
|
|
442
|
+
updateMonthDaysRequirement() {
|
|
443
|
+
if (this.periodicitySelected == CronPeriodicityType.EveryXMonths) {
|
|
444
|
+
this.formGroup.controls['monthDays'].removeValidators([Validators.required]);
|
|
445
|
+
this.formGroup.controls['monthDays'].updateValueAndValidity();
|
|
446
|
+
}
|
|
447
|
+
else {
|
|
448
|
+
this.formGroup.controls['monthDays'].addValidators([Validators.required]);
|
|
449
|
+
this.formGroup.controls['monthDays'].updateValueAndValidity();
|
|
450
|
+
}
|
|
451
|
+
}
|
|
359
452
|
set periodicitySelected(value) {
|
|
360
453
|
this.formGroup?.patchValue({ periodicity: value });
|
|
361
454
|
}
|
|
@@ -365,6 +458,9 @@ export class WCronExpressionsComponent {
|
|
|
365
458
|
get minuteSelected() {
|
|
366
459
|
return this.formGroup.get('minutes').value;
|
|
367
460
|
}
|
|
461
|
+
set hourSelected(value) {
|
|
462
|
+
this.formGroup?.patchValue({ hours: value });
|
|
463
|
+
}
|
|
368
464
|
get hourSelected() {
|
|
369
465
|
return this.formGroup.get('hours').value;
|
|
370
466
|
}
|
|
@@ -372,18 +468,21 @@ export class WCronExpressionsComponent {
|
|
|
372
468
|
return this.formGroup.get('weekDays').value;
|
|
373
469
|
}
|
|
374
470
|
get monthDaySelected() {
|
|
471
|
+
return this.formGroup.get('monthDay').value;
|
|
472
|
+
}
|
|
473
|
+
get monthDaysSelected() {
|
|
375
474
|
return this.formGroup.get('monthDays').value;
|
|
376
475
|
}
|
|
377
476
|
get monthSelected() {
|
|
378
477
|
return this.formGroup.get('months').value;
|
|
379
478
|
}
|
|
380
479
|
}
|
|
381
|
-
WCronExpressionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: WCronExpressionsComponent, deps: [{ token: i1.FormBuilder }, { token: i2.FormControlService }], target: i0.ɵɵFactoryTarget.Component });
|
|
382
|
-
WCronExpressionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: WCronExpressionsComponent, selector: "w-cron-expressions", inputs: { initialValue: "initialValue", periodicitiesDisplayed: "periodicitiesDisplayed", hasContainer: "hasContainer", translationsObject: "translationsObject" }, outputs: { cronExpression: "cronExpression" }, ngImport: i0, template: "<w-panel *ngIf=\"hasContainer; else cronComponent\">\r\n <ng-container *ngTemplateOutlet=\"cronComponent\"></ng-container>\r\n</w-panel>\r\n\r\n<ng-template #cronComponent>\r\n <form [formGroup]=\"formGroup\" class=\"col-12\">\r\n <w-panel-grid class=\"col-12\">\r\n <w-edit-select class=\"col-12\"\r\n [label]=\"translationsObject.periodicityLabel\"\r\n [required]=\"true\"\r\n [options]=\"periodicities\"\r\n [optionValue]=\"'value'\"\r\n [optionLabel]=\"'name'\"\r\n [formControl]=\"formControlService.convertToFormControl(formGroup.get('periodicity'))\"\r\n (onChange)=\"onPeriodicitySelected()\">\r\n </w-edit-select>\r\n <w-edit-multiselect *ngIf=\"allowMonths()\"\r\n class=\"col-12\"\r\n [label]=\"translationsObject.monthsLabel\"\r\n [required]=\"true\"\r\n [options]=\"months\"\r\n [optionValue]=\"'value'\"\r\n [optionLabel]=\"'name'\"\r\n [formControl]=\"formControlService.convertToFormControl(formGroup.get('months'))\"\r\n (onChange)=\"onMonthsSelected($event)\">\r\n </w-edit-multiselect>\r\n <w-edit-multiselect *ngIf=\"allowMonthDays()\"\r\n class=\"col-12\"\r\n [label]=\"translationsObject.daysLabel\"\r\n [required]=\"
|
|
480
|
+
WCronExpressionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: WCronExpressionsComponent, deps: [{ token: i1.FormBuilder }, { token: i2.FormControlService }, { token: i3.WDatePipe }], target: i0.ɵɵFactoryTarget.Component });
|
|
481
|
+
WCronExpressionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: WCronExpressionsComponent, selector: "w-cron-expressions", inputs: { initialValue: "initialValue", periodicitiesDisplayed: "periodicitiesDisplayed", hasContainer: "hasContainer", occurrencesNumber: "occurrencesNumber", translationsObject: "translationsObject" }, outputs: { cronExpression: "cronExpression" }, ngImport: i0, template: "<w-panel *ngIf=\"hasContainer; else cronComponent\">\r\n <ng-container *ngTemplateOutlet=\"cronComponent\"></ng-container>\r\n</w-panel>\r\n\r\n<ng-template #cronComponent>\r\n <form [formGroup]=\"formGroup\" class=\"col-12\">\r\n <w-panel-grid class=\"col-12\">\r\n <w-edit-select class=\"col-12\"\r\n [label]=\"translationsObject.periodicityLabel\"\r\n [required]=\"true\"\r\n [options]=\"periodicities\"\r\n [optionValue]=\"'value'\"\r\n [optionLabel]=\"'name'\"\r\n [formControl]=\"formControlService.convertToFormControl(formGroup.get('periodicity'))\"\r\n (onChange)=\"onPeriodicitySelected()\">\r\n </w-edit-select>\r\n <w-edit-multiselect *ngIf=\"allowMonths()\"\r\n class=\"col-12\"\r\n [label]=\"translationsObject.monthsLabel\"\r\n [required]=\"true\"\r\n [options]=\"months\"\r\n [optionValue]=\"'value'\"\r\n [optionLabel]=\"'name'\"\r\n [formControl]=\"formControlService.convertToFormControl(formGroup.get('months'))\"\r\n (onChange)=\"onMonthsSelected($event)\">\r\n </w-edit-multiselect>\r\n <w-edit-multiselect *ngIf=\"allowMonthDays()\"\r\n class=\"col-12\"\r\n [label]=\"translationsObject.daysLabel\"\r\n [required]=\"isMonthDaysRequired()\"\r\n [options]=\"monthDays\"\r\n [optionValue]=\"'value'\"\r\n [optionLabel]=\"'value'\"\r\n [formControl]=\"formControlService.convertToFormControl(formGroup.get('monthDays'))\"\r\n (onChange)=\"onMonthDaysSelected($event)\">\r\n </w-edit-multiselect>\r\n <w-edit-select *ngIf=\"allowMonthDay()\"\r\n class=\"col-12\"\r\n [label]=\"translationsObject.daysLabel\"\r\n [required]=\"true\"\r\n [options]=\"monthDays\"\r\n [optionValue]=\"'value'\"\r\n [optionLabel]=\"'value'\"\r\n [formControl]=\"formControlService.convertToFormControl(formGroup.get('monthDay'))\"\r\n (onChange)=\"onMonthDaysSelected($event)\">\r\n </w-edit-select>\r\n <w-edit-multiselect *ngIf=\"allowWeekDays()\"\r\n class=\"col-12\"\r\n [label]=\"translationsObject.weekDaysLabel\"\r\n [required]=\"true\"\r\n [options]=\"weekDays\"\r\n [optionValue]=\"'value'\"\r\n [optionLabel]=\"'name'\"\r\n [formControl]=\"formControlService.convertToFormControl(formGroup.get('weekDays'))\"\r\n (onChange)=\"onWeekDaysSelected($event)\">\r\n </w-edit-multiselect>\r\n <w-edit-select *ngIf=\"allowHours()\"\r\n class=\"col-6\" \r\n [label]=\"translationsObject.hourLabel\"\r\n [required]=\"true\"\r\n [options]=\"hours\"\r\n [formControl]=\"formControlService.convertToFormControl(formGroup.get('hours'))\"\r\n (onChange)=\"onHoursSelected($event)\">\r\n </w-edit-select>\r\n <w-edit-select *ngIf=\"allowMinutes()\"\r\n [ngClass]=\"{'col-6': allowHours(), 'col-12': !allowHours()}\" \r\n [label]=\"translationsObject.minuteLabel\"\r\n [required]=\"true\"\r\n [options]=\"minutes\"\r\n [formControl]=\"formControlService.convertToFormControl(formGroup.get('minutes'))\"\r\n (onChange)=\"onMinuteSelected($event)\">\r\n </w-edit-select>\r\n <w-edit-input-number *ngIf=\"allowSeconds()\"\r\n class=\"col-6\"\r\n [label]=\"'Segundos'\"\r\n [required]=\"true\"\r\n [min]=\"0\"\r\n [max]=\"59\">\r\n </w-edit-input-number>\r\n <w-view-text class=\"col-12\"\r\n [label]=\"translationsObject.descriptionLabel\"\r\n [value]=\"description\"\r\n [layout]=\"'vertical'\">\r\n </w-view-text>\r\n <w-view-text class=\"col-12\"\r\n [label]=\"translationsObject.occurrencesLabel\"\r\n [value]=\"occurrences\"\r\n [layout]=\"'vertical'\">\r\n </w-view-text>\r\n </w-panel-grid>\r\n </form>\r\n</ng-template>", styles: [""], dependencies: [{ kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.WEditInputNumberComponent, selector: "w-edit-input-number", inputs: ["label", "showLabel", "placeholder", "successMessage", "mode", "minFractionDigits", "maxFractionDigits", "required", "requiredErrorDescription", "disabled", "pattern", "patternErrorDescription", "min", "minErrorDescription", "max", "maxErrorDescription", "prefix", "suffix", "autofocus", "size", "formControl", "removePaddingTop", "tooltip", "tooltipPosition"] }, { kind: "component", type: i6.WEditSelectComponent, selector: "w-edit-select", inputs: ["label", "showLabel", "placeholder", "disabled", "loading", "required", "size", "options", "filter", "optionLabel", "optionValue", "appendTo", "showClear", "formControl", "requiredErrorDescription", "removePaddingTop", "tooltip", "tooltipPosition"], outputs: ["onChange", "onClear"] }, { kind: "component", type: i7.WEditMultiselectComponent, selector: "w-edit-multiselect", inputs: ["label", "showLabel", "placeholder", "filter", "filterPlaceholder", "disabled", "optionDisabled", "showPanelDisabled", "readonly", "required", "size", "options", "optionLabel", "optionValue", "appendTo", "showClear", "showToggleAll", "formControl", "requiredErrorDescription", "removePaddingTop", "tooltip", "tooltipPosition"], outputs: ["onChange"] }, { kind: "component", type: i8.WPanelComponent, selector: "w-panel", inputs: ["width", "title", "subtitle", "activeGrid", "reduced", "justifyContent", "activeOverflow", "heightOverflow", "maxHeightOverflow", "backgroundColor", "activeMaxHeight", "activeMenu", "menuOptions", "wPanelStyleClass", "wPanelContentStyleClass"] }, { kind: "component", type: i9.WPanelGridComponent, selector: "w-panel-grid" }, { kind: "component", type: i10.WViewTextComponent, selector: "w-view-text", inputs: ["label", "value", "tooltip", "tooltipPosition", "layout", "displayAsList"] }] });
|
|
383
482
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: WCronExpressionsComponent, decorators: [{
|
|
384
483
|
type: Component,
|
|
385
|
-
args: [{ selector: 'w-cron-expressions', template: "<w-panel *ngIf=\"hasContainer; else cronComponent\">\r\n <ng-container *ngTemplateOutlet=\"cronComponent\"></ng-container>\r\n</w-panel>\r\n\r\n<ng-template #cronComponent>\r\n <form [formGroup]=\"formGroup\" class=\"col-12\">\r\n <w-panel-grid class=\"col-12\">\r\n <w-edit-select class=\"col-12\"\r\n [label]=\"translationsObject.periodicityLabel\"\r\n [required]=\"true\"\r\n [options]=\"periodicities\"\r\n [optionValue]=\"'value'\"\r\n [optionLabel]=\"'name'\"\r\n [formControl]=\"formControlService.convertToFormControl(formGroup.get('periodicity'))\"\r\n (onChange)=\"onPeriodicitySelected()\">\r\n </w-edit-select>\r\n <w-edit-multiselect *ngIf=\"allowMonths()\"\r\n class=\"col-12\"\r\n [label]=\"translationsObject.monthsLabel\"\r\n [required]=\"true\"\r\n [options]=\"months\"\r\n [optionValue]=\"'value'\"\r\n [optionLabel]=\"'name'\"\r\n [formControl]=\"formControlService.convertToFormControl(formGroup.get('months'))\"\r\n (onChange)=\"onMonthsSelected($event)\">\r\n </w-edit-multiselect>\r\n <w-edit-multiselect *ngIf=\"allowMonthDays()\"\r\n class=\"col-12\"\r\n [label]=\"translationsObject.daysLabel\"\r\n [required]=\"
|
|
386
|
-
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.FormControlService }]; }, propDecorators: { initialValue: [{
|
|
484
|
+
args: [{ selector: 'w-cron-expressions', template: "<w-panel *ngIf=\"hasContainer; else cronComponent\">\r\n <ng-container *ngTemplateOutlet=\"cronComponent\"></ng-container>\r\n</w-panel>\r\n\r\n<ng-template #cronComponent>\r\n <form [formGroup]=\"formGroup\" class=\"col-12\">\r\n <w-panel-grid class=\"col-12\">\r\n <w-edit-select class=\"col-12\"\r\n [label]=\"translationsObject.periodicityLabel\"\r\n [required]=\"true\"\r\n [options]=\"periodicities\"\r\n [optionValue]=\"'value'\"\r\n [optionLabel]=\"'name'\"\r\n [formControl]=\"formControlService.convertToFormControl(formGroup.get('periodicity'))\"\r\n (onChange)=\"onPeriodicitySelected()\">\r\n </w-edit-select>\r\n <w-edit-multiselect *ngIf=\"allowMonths()\"\r\n class=\"col-12\"\r\n [label]=\"translationsObject.monthsLabel\"\r\n [required]=\"true\"\r\n [options]=\"months\"\r\n [optionValue]=\"'value'\"\r\n [optionLabel]=\"'name'\"\r\n [formControl]=\"formControlService.convertToFormControl(formGroup.get('months'))\"\r\n (onChange)=\"onMonthsSelected($event)\">\r\n </w-edit-multiselect>\r\n <w-edit-multiselect *ngIf=\"allowMonthDays()\"\r\n class=\"col-12\"\r\n [label]=\"translationsObject.daysLabel\"\r\n [required]=\"isMonthDaysRequired()\"\r\n [options]=\"monthDays\"\r\n [optionValue]=\"'value'\"\r\n [optionLabel]=\"'value'\"\r\n [formControl]=\"formControlService.convertToFormControl(formGroup.get('monthDays'))\"\r\n (onChange)=\"onMonthDaysSelected($event)\">\r\n </w-edit-multiselect>\r\n <w-edit-select *ngIf=\"allowMonthDay()\"\r\n class=\"col-12\"\r\n [label]=\"translationsObject.daysLabel\"\r\n [required]=\"true\"\r\n [options]=\"monthDays\"\r\n [optionValue]=\"'value'\"\r\n [optionLabel]=\"'value'\"\r\n [formControl]=\"formControlService.convertToFormControl(formGroup.get('monthDay'))\"\r\n (onChange)=\"onMonthDaysSelected($event)\">\r\n </w-edit-select>\r\n <w-edit-multiselect *ngIf=\"allowWeekDays()\"\r\n class=\"col-12\"\r\n [label]=\"translationsObject.weekDaysLabel\"\r\n [required]=\"true\"\r\n [options]=\"weekDays\"\r\n [optionValue]=\"'value'\"\r\n [optionLabel]=\"'name'\"\r\n [formControl]=\"formControlService.convertToFormControl(formGroup.get('weekDays'))\"\r\n (onChange)=\"onWeekDaysSelected($event)\">\r\n </w-edit-multiselect>\r\n <w-edit-select *ngIf=\"allowHours()\"\r\n class=\"col-6\" \r\n [label]=\"translationsObject.hourLabel\"\r\n [required]=\"true\"\r\n [options]=\"hours\"\r\n [formControl]=\"formControlService.convertToFormControl(formGroup.get('hours'))\"\r\n (onChange)=\"onHoursSelected($event)\">\r\n </w-edit-select>\r\n <w-edit-select *ngIf=\"allowMinutes()\"\r\n [ngClass]=\"{'col-6': allowHours(), 'col-12': !allowHours()}\" \r\n [label]=\"translationsObject.minuteLabel\"\r\n [required]=\"true\"\r\n [options]=\"minutes\"\r\n [formControl]=\"formControlService.convertToFormControl(formGroup.get('minutes'))\"\r\n (onChange)=\"onMinuteSelected($event)\">\r\n </w-edit-select>\r\n <w-edit-input-number *ngIf=\"allowSeconds()\"\r\n class=\"col-6\"\r\n [label]=\"'Segundos'\"\r\n [required]=\"true\"\r\n [min]=\"0\"\r\n [max]=\"59\">\r\n </w-edit-input-number>\r\n <w-view-text class=\"col-12\"\r\n [label]=\"translationsObject.descriptionLabel\"\r\n [value]=\"description\"\r\n [layout]=\"'vertical'\">\r\n </w-view-text>\r\n <w-view-text class=\"col-12\"\r\n [label]=\"translationsObject.occurrencesLabel\"\r\n [value]=\"occurrences\"\r\n [layout]=\"'vertical'\">\r\n </w-view-text>\r\n </w-panel-grid>\r\n </form>\r\n</ng-template>" }]
|
|
485
|
+
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.FormControlService }, { type: i3.WDatePipe }]; }, propDecorators: { initialValue: [{
|
|
387
486
|
type: Input,
|
|
388
487
|
args: ['initialValue']
|
|
389
488
|
}], periodicitiesDisplayed: [{
|
|
@@ -392,6 +491,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
|
|
|
392
491
|
}], hasContainer: [{
|
|
393
492
|
type: Input,
|
|
394
493
|
args: ['hasContainer']
|
|
494
|
+
}], occurrencesNumber: [{
|
|
495
|
+
type: Input,
|
|
496
|
+
args: ['occurrencesNumber']
|
|
395
497
|
}], translationsObject: [{
|
|
396
498
|
type: Input,
|
|
397
499
|
args: ['translationsObject']
|
|
@@ -399,4 +501,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
|
|
|
399
501
|
type: Output,
|
|
400
502
|
args: ['cronExpression']
|
|
401
503
|
}] } });
|
|
402
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidy1jcm9uLWV4cHJlc3Npb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dhcHAtY29tcG9uZW50cy9zcmMvbGliL21pc2Mvdy1jcm9uLWV4cHJlc3Npb25zL3ctY3Jvbi1leHByZXNzaW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93YXBwLWNvbXBvbmVudHMvc3JjL2xpYi9taXNjL3ctY3Jvbi1leHByZXNzaW9ucy93LWNyb24tZXhwcmVzc2lvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQWUsV0FBVyxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFFckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBR3BHLE9BQVEsU0FBUyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7OztBQU94QyxNQUFNLE9BQU8seUJBQXlCO0lBOERwQyxZQUNVLFdBQXdCLEVBQ3pCLGtCQUFzQztRQURyQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN6Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBekQvQyxjQUFTLEdBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0RSxZQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFB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bS9JQTRFYzsyRkQvREQseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNFLG9CQUFvQjttSUFrQlAsWUFBWTtzQkFBbEMsS0FBSzt1QkFBQyxjQUFjO2dCQUNZLHNCQUFzQjtzQkFBdEQsS0FBSzt1QkFBQyx3QkFBd0I7Z0JBQ1IsWUFBWTtzQkFBbEMsS0FBSzt1QkFBQyxjQUFjO2dCQUNRLGtCQUFrQjtzQkFBOUMsS0FBSzt1QkFBQyxvQkFBb0I7Z0JBMkNELGNBQWM7c0JBQXZDLE1BQU07dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE11bHRpU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9tdWx0aXNlbGVjdC1vcHRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBDcm9uRmllbGRUeXBlLCBDcm9uUGVyaW9kaWNpdHlUeXBlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2VudW1zL2Nyb24tZXhwcmVzc2lvbnMvZW51bS5tb2RlbCc7XHJcbmltcG9ydCB7IENyb25Db21wb25lbnRUcmFuc2xhdGlvbnMgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL2Nyb24tZXhwcmVzc2lvbnMvY3Jvbi1jb21wb25lbnQtdHJhbnNsYXRpb25zLm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2xTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2Zvcm0tY29udHJvbC5zZXJ2aWNlJztcclxuaW1wb3J0ICBjcm9uc3RydWUgZnJvbSAnY3JvbnN0cnVlL2kxOG4nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd3LWNyb24tZXhwcmVzc2lvbnMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi93LWNyb24tZXhwcmVzc2lvbnMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3ctY3Jvbi1leHByZXNzaW9ucy5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFdDcm9uRXhwcmVzc2lvbnNDb21wb25lbnQge1xyXG4gIGZvcm1Hcm91cCE6IEZvcm1Hcm91cDtcclxuXHJcbiAgcGVyaW9kaWNpdGllcyE6IE11bHRpU2VsZWN0T3B0aW9uW107XHJcbiAgbW9udGhzITogTXVsdGlTZWxlY3RPcHRpb25bXTtcclxuICB3ZWVrRGF5cyE6IE11bHRpU2VsZWN0T3B0aW9uW107XHJcblxyXG4gIG1vbnRoRGF5cyA9ICBBcnJheS5mcm9tKHsgbGVuZ3RoOiAzMSB9LCAoXywgaSkgPT4gKHsgdmFsdWU6IGkgKyAxIH0pKTtcclxuICBtaW51dGVzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogNjAgfSwgKF8sIGkpID0+IGkpO1xyXG4gIGhvdXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMjQgfSwgKF8sIGkpID0+IGkpO1xyXG5cclxuICBleHByZXNzaW9uOiBhbnlbXSA9IFsnKicsJyonLCcqJywnKicsJyonLCcqJ107XHJcbiAgZGVzY3JpcHRpb246IHN0cmluZyA9ICcnO1xyXG5cclxuICBASW5wdXQoJ2luaXRpYWxWYWx1ZScpIGluaXRpYWxWYWx1ZSE6IHN0cmluZztcclxuICBASW5wdXQoJ3BlcmlvZGljaXRpZXNEaXNwbGF5ZWQnKSBwZXJpb2RpY2l0aWVzRGlzcGxheWVkITogQ3JvblBlcmlvZGljaXR5VHlwZVtdO1xyXG4gIEBJbnB1dCgnaGFzQ29udGFpbmVyJykgaGFzQ29udGFpbmVyOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoJ3RyYW5zbGF0aW9uc09iamVjdCcpIHRyYW5zbGF0aW9uc09iamVjdDogQ3JvbkNvbXBvbmVudFRyYW5zbGF0aW9ucyA9IHtcclxuICAgIHBlcmlvZGljaXRpZXM6IHtcclxuICAgICAgZXZlcnlYTWludXRlczogXCJSZXBldGlyIGNhZGEgWCBtaW51dG9zXCIsXHJcbiAgICAgIGV2ZXJ5TWludXRlOiBcIlJlcGV0aXIgY2FkYSBtaW51dG9cIixcclxuICAgICAgZXZlcnlYSG91cnM6IFwiUmVwZXRpciBjYWRhIFggaG9yYXNcIixcclxuICAgICAgZXZlcnlIb3VyT2ZEYXk6IFwiUmVwZXRpciBjYWRhIGhvcmEgZGVsIGTDrWFcIixcclxuICAgICAgZXZlcnlYRGF5czogXCJSZXBldGlyIGNhZGEgWCBkw61hc1wiLFxyXG4gICAgICBldmVyeVdlZWs6IFwiUmVwZXRpciBjYWRhIHNlbWFuYVwiLFxyXG4gICAgICBldmVyeU1vbnRoOiBcIlJlcGV0aXIgY2FkYSBtZXNcIixcclxuICAgICAgZXZlcnlYTW9udGhzOiBcIlJlcGV0aXIgWCBtZXNlc1wiLFxyXG4gICAgfSxcclxuICAgIG1vbnRoczoge1xyXG4gICAgICBqYW51YXJ5OiBcIkVuZXJvICgxKVwiLFxyXG4gICAgICBmZWJydWFyeTogXCJGZWJyZXJvICgyKVwiLFxyXG4gICAgICBtYXJjaDogXCJNYXJ6byAoMylcIixcclxuICAgICAgYXByaWw6IFwiQWJyaWwgKDQpXCIsXHJcbiAgICAgIG1heTogXCJNYXlvICg1KVwiLFxyXG4gICAgICBqdW5lOiBcIkp1bmlvICg2KVwiLFxyXG4gICAgICBqdWx5OiBcIkp1bGlvICg3KVwiLFxyXG4gICAgICBhdWd1c3Q6IFwiQWdvc3RvICg4KVwiLFxyXG4gICAgICBzZXB0ZW1iZXI6IFwiU2VwdGllbWJyZSAoOSlcIixcclxuICAgICAgb2N0b2JlcjogXCJPY3R1YnJlICgxMClcIixcclxuICAgICAgbm92ZW1iZXI6IFwiTm92aWVtYnJlICgxMSlcIixcclxuICAgICAgZGVjZW1iZXI6IFwiRGljaWVtYnJlICgxMilcIlxyXG4gICAgfSxcclxuICAgIHdlZWtEYXlzOiB7XHJcbiAgICAgIHN1bmRheTogXCJEb21pbmdvICgwKVwiLFxyXG4gICAgICBtb25kYXk6IFwiTHVuZXMgKDEpXCIsXHJcbiAgICAgIHR1ZXNkYXk6IFwiTWFydGVzICgyKVwiLFxyXG4gICAgICB3ZWRuZXNkYXk6IFwiTWllcmNvbGVzICgzKVwiLFxyXG4gICAgICB0aHVyc2RheTogXCJKdWV2ZXMgKDQpXCIsXHJcbiAgICAgIGZyaWRheTogXCJWaWVybmVzICg1KVwiLFxyXG4gICAgICBzYXR1cmRheTogXCJTYWJhZG8gKDYpXCJcclxuICAgIH0sXHJcbiAgICBwZXJpb2RpY2l0eUxhYmVsOiBcIlBlcmlvZGljaWRhZFwiLFxyXG4gICAgbWludXRlTGFiZWw6IFwiTWludXRvXCIsXHJcbiAgICBob3VyTGFiZWw6IFwiSG9yYVwiLFxyXG4gICAgZGF5c0xhYmVsOiBcIkTDrWFcIixcclxuICAgIHdlZWtEYXlzTGFiZWw6IFwiRMOtYXMgZGUgbGEgc2VtYW5hXCIsXHJcbiAgICBtb250aHNMYWJlbDogXCJNZXNlc1wiLFxyXG4gICAgZGVzY3JpcHRpb25MYWJlbDogXCJEZXNjcmlwY2nDs25cIlxyXG4gIH07XHJcblxyXG4gIEBPdXRwdXQoJ2Nyb25FeHByZXNzaW9uJykgY3JvbkV4cHJlc3Npb246IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIFxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwdWJsaWMgZm9ybUNvbnRyb2xTZXJ2aWNlOiBGb3JtQ29udHJvbFNlcnZpY2UsXHJcbiAgKSB7IH1cclxuICBcclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdEZvcm1Hcm91cCgpO1xyXG4gICAgdGhpcy5pbml0UGVyaW9kaWNpdGllcygpO1xyXG4gICAgdGhpcy5pbml0TW9udGhzKCk7XHJcbiAgICB0aGlzLmluaXRXZWVrRGF5cygpO1xyXG5cclxuICAgIGlmKHRoaXMuaW5pdGlhbFZhbHVlKSB7XHJcbiAgICAgIHRoaXMuaW5pdFBhcnNlZFZhbHVlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdEZvcm1Hcm91cCgpIHtcclxuICAgIGlmKHRoaXMuaW5pdGlhbFZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IHBhcnRzID0gdGhpcy5pbml0aWFsVmFsdWUuc3BsaXQoXCIgXCIpO1xyXG5cclxuICAgICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICBwZXJpb2RpY2l0eTogbmV3IEZvcm1Db250cm9sKCksXHJcbiAgICAgICAgbWludXRlczogbmV3IEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgdGhpcy5oYXNJbml0aWFsVmFsdWUoXHJcbiAgICAgICAgICAgIHBhcnRzW0Nyb25GaWVsZFR5cGUuTWludXRlXSkgPyBcclxuICAgICAgICAgICAgdGhpcy5mb3JtYXRDcm9uTnVtYmVyKHBhcnRzW0Nyb25GaWVsZFR5cGUuTWludXRlXSlcclxuICAgICAgICAgICAgOiAwKSxcclxuICAgICAgICBob3VyczogbmV3IEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgdGhpcy5oYXNJbml0aWFsVmFsdWUoXHJcbiAgICAgICAgICAgIHBhcnRzW0Nyb25GaWVsZFR5cGUuSG91cl0pID8gXHJcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0Q3Jvbk51bWJlcihwYXJ0c1tDcm9uRmllbGRUeXBlLkhvdXJdKVxyXG4gICAgICAgICAgICA6IDApLFxyXG4gICAgICAgIHdlZWtEYXlzOiBuZXcgRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICB0aGlzLmhhc0luaXRpYWxWYWx1ZShcclxuICAgICAgICAgICAgcGFydHNbQ3JvbkZpZWxkVHlwZS5XZWVrRGF5XSkgPyBcclxuICAgICAgICAgICAgcGFydHNbQ3JvbkZpZWxkVHlwZS5XZWVrRGF5XS5yZXBsYWNlKC9cXC8vZywgJycpLnNwbGl0KCcsJykubWFwKE51bWJlcilcclxuICAgICAgICAgICAgOiBbXSksXHJcbiAgICAgICAgbW9udGhEYXlzOiBuZXcgRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICB0aGlzLmhhc0luaXRpYWxWYWx1ZShcclxuICAgICAgICAgICAgcGFydHNbQ3JvbkZpZWxkVHlwZS5Nb250aERheV0pID8gXHJcbiAgICAgICAgICAgIHBhcnRzW0Nyb25GaWVsZFR5cGUuTW9udGhEYXldLnJlcGxhY2UoL1xcLy9nLCAnJykuc3BsaXQoJywnKS5tYXAoTnVtYmVyKVxyXG4gICAgICAgICAgICA6IFtdKSxcclxuICAgICAgICBtb250aHM6IG5ldyBGb3JtQ29udHJvbChcclxuICAgICAgICAgIHRoaXMuaGFzSW5pdGlhbFZhbHVlKFxyXG4gICAgICAgICAgICBwYXJ0c1tDcm9uRmllbGRUeXBlLk1vbnRoXSkgPyBcclxuICAgICAgICAgICAgcGFydHNbQ3JvbkZpZWxkVHlwZS5Nb250aF0ucmVwbGFjZSgvXFwvL2csICcnKS5zcGxpdCgnLCcpLm1hcChOdW1iZXIpXHJcbiAgICAgICAgICAgIDogMCksXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICBwZXJpb2RpY2l0eTogbmV3IEZvcm1Db250cm9sKDApLFxyXG4gICAgICAgIG1pbnV0ZXM6IG5ldyBGb3JtQ29udHJvbCgwKSxcclxuICAgICAgICBob3VyczogbmV3IEZvcm1Db250cm9sKDApLFxyXG4gICAgICAgIHdlZWtEYXlzOiBuZXcgRm9ybUNvbnRyb2woW10pLFxyXG4gICAgICAgIG1vbnRoRGF5czogbmV3IEZvcm1Db250cm9sKFtdKSxcclxuICAgICAgICBtb250aHM6IG5ldyBGb3JtQ29udHJvbCgwKSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYXNJbml0aWFsVmFsdWUocGFydDogc3RyaW5nKSB7XHJcbiAgICBpZihwYXJ0ID09ICcqJyB8fCBwYXJ0ID09ICcwJykge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZvcm1hdENyb25OdW1iZXIoY3JvblZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiArY3JvblZhbHVlLnJlcGxhY2UoL1svKl0vZywgJycpO1xyXG4gIH1cclxuXHJcbiAgaW5pdFBlcmlvZGljaXRpZXMoKSB7XHJcbiAgICBjb25zdCB0cmFuc2xhdGlvbnNNYXAgPSB7XHJcbiAgICAgIFtDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5WE1pbnV0ZXNdOiB0aGlzLnRyYW5zbGF0aW9uc09iamVjdC5wZXJpb2RpY2l0aWVzLmV2ZXJ5WE1pbnV0ZXMsXHJcbiAgICAgIFtDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5TWludXRlXTogdGhpcy50cmFuc2xhdGlvbnNPYmplY3QucGVyaW9kaWNpdGllcy5ldmVyeU1pbnV0ZSxcclxuICAgICAgW0Nyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlYSG91cnNdOiB0aGlzLnRyYW5zbGF0aW9uc09iamVjdC5wZXJpb2RpY2l0aWVzLmV2ZXJ5WEhvdXJzLFxyXG4gICAgICBbQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeUhvdXJPZkRheV06IHRoaXMudHJhbnNsYXRpb25zT2JqZWN0LnBlcmlvZGljaXRpZXMuZXZlcnlIb3VyT2ZEYXksXHJcbiAgICAgIFtDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5WERheXNdOiB0aGlzLnRyYW5zbGF0aW9uc09iamVjdC5wZXJpb2RpY2l0aWVzLmV2ZXJ5WERheXMsXHJcbiAgICAgIFtDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5V2Vla106IHRoaXMudHJhbnNsYXRpb25zT2JqZWN0LnBlcmlvZGljaXRpZXMuZXZlcnlXZWVrLFxyXG4gICAgICBbQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeU1vbnRoXTogdGhpcy50cmFuc2xhdGlvbnNPYmplY3QucGVyaW9kaWNpdGllcy5ldmVyeU1vbnRoLFxyXG4gICAgICBbQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeVhNb250aHNdOiB0aGlzLnRyYW5zbGF0aW9uc09iamVjdC5wZXJpb2RpY2l0aWVzLmV2ZXJ5WE1vbnRocyxcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMucGVyaW9kaWNpdGllc0Rpc3BsYXllZCkge1xyXG4gICAgICB0aGlzLnBlcmlvZGljaXRpZXMgPSB0aGlzLnBlcmlvZGljaXRpZXNEaXNwbGF5ZWQubWFwKHBlcmlvZGljaXR5ID0+ICh7XHJcbiAgICAgICAgdmFsdWU6IHBlcmlvZGljaXR5LFxyXG4gICAgICAgIG5hbWU6IHRyYW5zbGF0aW9uc01hcFtwZXJpb2RpY2l0eV1cclxuICAgICAgfSkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wZXJpb2RpY2l0aWVzID0gT2JqZWN0LmVudHJpZXModHJhbnNsYXRpb25zTWFwKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gKHtcclxuICAgICAgICB2YWx1ZTogTnVtYmVyKGtleSksIFxyXG4gICAgICAgIG5hbWU6IHZhbHVlXHJcbiAgICAgIH0pKTtcclxuICAgIH1cclxuICAgIGlmKCF0aGlzLmluaXRpYWxWYWx1ZSkge1xyXG4gICAgICB0aGlzLnBlcmlvZGljaXR5U2VsZWN0ZWQgPSB0aGlzLnBlcmlvZGljaXRpZXNbMF0/LnZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdFBhcnNlZFZhbHVlcygpIHtcclxuICAgIHRoaXMuZXhwcmVzc2lvbiA9IHRoaXMucGFyc2VDcm9uRXhwcmVzc2lvbih0aGlzLmluaXRpYWxWYWx1ZSk7XHJcbiAgICBcclxuICAgIHRoaXMucGVyaW9kaWNpdHlTZWxlY3RlZCA9IHRoaXMuZ2V0Q3JvblBlcmlvZGljaXR5VHlwZSh0aGlzLmluaXRpYWxWYWx1ZSkhO1xyXG4gICAgdGhpcy5jcm9uVG9IdW1hbigpO1xyXG4gIH1cclxuXHJcbiAgcGFyc2VDcm9uRXhwcmVzc2lvbihjcm9uOiBzdHJpbmcpOiBhbnlbXSB7XHJcbiAgICBjb25zdCBwYXJ0cyA9IGNyb24uc3BsaXQoXCIgXCIpO1xyXG4gICAgXHJcbiAgICB3aGlsZSAocGFydHMubGVuZ3RoIDwgNikge1xyXG4gICAgICBwYXJ0cy5wdXNoKCcqJyk7XHJcbiAgICB9XHJcbiAgXHJcbiAgICByZXR1cm4gcGFydHM7XHJcbiAgfVxyXG5cclxuICBpbml0TW9udGhzKCkge1xyXG4gICAgdGhpcy5tb250aHMgPSBbXHJcbiAgICAgIHsgdmFsdWU6IDEsIG5hbWU6IHRoaXMudHJhbnNsYXRpb25zT2JqZWN0Lm1vbnRocy5qYW51YXJ5IH0sIFxyXG4gICAgICB7IHZhbHVlOiAyLCBuYW1lOiB0aGlzLnRyYW5zbGF0aW9uc09iamVjdC5tb250aHMuZmVicnVhcnkgfSwgXHJcbiAgICAgIHsgdmFsdWU6IDMsIG5hbWU6IHRoaXMudHJhbnNsYXRpb25zT2JqZWN0Lm1vbnRocy5tYXJjaCB9LCBcclxuICAgICAgeyB2YWx1ZTogNCwgbmFtZTogdGhpcy50cmFuc2xhdGlvbnNPYmplY3QubW9udGhzLmFwcmlsIH0sIFxyXG4gICAgICB7IHZhbHVlOiA1LCBuYW1lOiB0aGlzLnRyYW5zbGF0aW9uc09iamVjdC5tb250aHMubWF5IH0sIFxyXG4gICAgICB7IHZhbHVlOiA2LCBuYW1lOiB0aGlzLnRyYW5zbGF0aW9uc09iamVjdC5tb250aHMuanVuZSB9LCBcclxuICAgICAgeyB2YWx1ZTogNywgbmFtZTogdGhpcy50cmFuc2xhdGlvbnNPYmplY3QubW9udGhzLmp1bHkgfSwgXHJcbiAgICAgIHsgdmFsdWU6IDgsIG5hbWU6IHRoaXMudHJhbnNsYXRpb25zT2JqZWN0Lm1vbnRocy5hdWd1c3QgfSwgXHJcbiAgICAgIHsgdmFsdWU6IDksIG5hbWU6IHRoaXMudHJhbnNsYXRpb25zT2JqZWN0Lm1vbnRocy5zZXB0ZW1iZXIgfSwgXHJcbiAgICAgIHsgdmFsdWU6IDEwLCBuYW1lOnRoaXMudHJhbnNsYXRpb25zT2JqZWN0Lm1vbnRocy5vY3RvYmVyIH0sIFxyXG4gICAgICB7IHZhbHVlOiAxMSwgbmFtZTp0aGlzLnRyYW5zbGF0aW9uc09iamVjdC5tb250aHMubm92ZW1iZXIgfSwgXHJcbiAgICAgIHsgdmFsdWU6IDEyLCBuYW1lOnRoaXMudHJhbnNsYXRpb25zT2JqZWN0Lm1vbnRocy5kZWNlbWJlciB9LCBcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBpbml0V2Vla0RheXMoKSB7XHJcbiAgICB0aGlzLndlZWtEYXlzID0gW1xyXG4gICAgICB7IHZhbHVlOiAwLCBuYW1lOiB0aGlzLnRyYW5zbGF0aW9uc09iamVjdC53ZWVrRGF5cy5zdW5kYXkgfSwgXHJcbiAgICAgIHsgdmFsdWU6IDEsIG5hbWU6IHRoaXMudHJhbnNsYXRpb25zT2JqZWN0LndlZWtEYXlzLm1vbmRheSB9LCBcclxuICAgICAgeyB2YWx1ZTogMiwgbmFtZTogdGhpcy50cmFuc2xhdGlvbnNPYmplY3Qud2Vla0RheXMudHVlc2RheSB9LCBcclxuICAgICAgeyB2YWx1ZTogMywgbmFtZTogdGhpcy50cmFuc2xhdGlvbnNPYmplY3Qud2Vla0RheXMud2VkbmVzZGF5IH0sIFxyXG4gICAgICB7IHZhbHVlOiA0LCBuYW1lOiB0aGlzLnRyYW5zbGF0aW9uc09iamVjdC53ZWVrRGF5cy50aHVyc2RheSB9LCBcclxuICAgICAgeyB2YWx1ZTogNSwgbmFtZTogdGhpcy50cmFuc2xhdGlvbnNPYmplY3Qud2Vla0RheXMuZnJpZGF5IH0sIFxyXG4gICAgICB7IHZhbHVlOiA2LCBuYW1lOiB0aGlzLnRyYW5zbGF0aW9uc09iamVjdC53ZWVrRGF5cy5zYXR1cmRheSB9LCBcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBhbGxvd1NlY29uZHMoKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7IFxyXG4gIH1cclxuXHJcbiAgYWxsb3dNaW51dGVzKCkge1xyXG4gICAgc3dpdGNoKHRoaXMucGVyaW9kaWNpdHlTZWxlY3RlZCl7XHJcbiAgICAgIGNhc2UgQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeVhNaW51dGVzOlxyXG4gICAgICBjYXNlIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlNaW51dGU6XHJcbiAgICAgIGNhc2UgQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeVhIb3VyczpcclxuICAgICAgY2FzZSBDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5SG91ck9mRGF5OlxyXG4gICAgICBjYXNlIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlYRGF5czpcclxuICAgICAgY2FzZSBDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5V2VlazpcclxuICAgICAgY2FzZSBDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5TW9udGg6XHJcbiAgICAgIGNhc2UgQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeVhNb250aHM6IFxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICBkZWZhdWx0OiBcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhbGxvd0hvdXJzKCkge1xyXG4gICAgc3dpdGNoKHRoaXMucGVyaW9kaWNpdHlTZWxlY3RlZCl7XHJcbiAgICAgIGNhc2UgQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeVhIb3VyczpcclxuICAgICAgY2FzZSBDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5SG91ck9mRGF5OlxyXG4gICAgICBjYXNlIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlYRGF5czpcclxuICAgICAgY2FzZSBDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5V2VlazpcclxuICAgICAgY2FzZSBDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5TW9udGg6XHJcbiAgICAgIGNhc2UgQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeVhNb250aHM6IFxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICBkZWZhdWx0OiBcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhbGxvd1dlZWtEYXlzKCkge1xyXG4gICAgc3dpdGNoKHRoaXMucGVyaW9kaWNpdHlTZWxlY3RlZCl7XHJcbiAgICAgIGNhc2UgQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeVdlZWs6XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIGRlZmF1bHQ6IFxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFsbG93TW9udGhEYXlzKCkge1xyXG4gICAgc3dpdGNoKHRoaXMucGVyaW9kaWNpdHlTZWxlY3RlZCl7XHJcbiAgICAgIGNhc2UgQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeVhEYXlzOlxyXG4gICAgICBjYXNlIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlYTW9udGhzOiBcclxuICAgICAgY2FzZSBDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5TW9udGg6XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIGRlZmF1bHQ6IFxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFsbG93TW9udGhzKCkge1xyXG4gICAgc3dpdGNoKHRoaXMucGVyaW9kaWNpdHlTZWxlY3RlZCl7XHJcbiAgICAgIGNhc2UgQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeVhNb250aHM6IFxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICBkZWZhdWx0OiBcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblBlcmlvZGljaXR5U2VsZWN0ZWQoKSB7XHJcbiAgICB0aGlzLnJlc3RhcnRFeHByZXNzaW9uKCk7XHJcbiAgICB0aGlzLm9uTWludXRlU2VsZWN0ZWQodGhpcy5taW51dGVTZWxlY3RlZCk7XHJcbiAgICB0aGlzLm9uSG91cnNTZWxlY3RlZCh0aGlzLmhvdXJTZWxlY3RlZCk7XHJcbiAgICB0aGlzLm9uV2Vla0RheXNTZWxlY3RlZCh0aGlzLndlZWtEYXlTZWxlY3RlZCk7XHJcbiAgICB0aGlzLm9uTW9udGhzU2VsZWN0ZWQodGhpcy5tb250aFNlbGVjdGVkKTtcclxuICAgIHRoaXMub25Nb250aERheXNTZWxlY3RlZCh0aGlzLm1vbnRoRGF5U2VsZWN0ZWQpO1xyXG4gIH1cclxuXHJcbiAgb25NaW51dGVTZWxlY3RlZChtaW51dGVTZWxlY3RlZDogbnVtYmVyKSB7XHJcbiAgICBzd2l0Y2godGhpcy5wZXJpb2RpY2l0eVNlbGVjdGVkKXtcclxuICAgICAgY2FzZSBDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5WE1pbnV0ZXM6IFxyXG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbltDcm9uRmllbGRUeXBlLlNlY29uZF0gPSBgMGA7XHJcbiAgICAgICAgdGhpcy5leHByZXNzaW9uW0Nyb25GaWVsZFR5cGUuTWludXRlXSA9IGAvJHttaW51dGVTZWxlY3RlZH1gO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlNaW51dGU6XHJcbiAgICAgIGNhc2UgQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeUhvdXJPZkRheTpcclxuICAgICAgY2FzZSBDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5WEhvdXJzOlxyXG4gICAgICBjYXNlIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlYRGF5czpcclxuICAgICAgY2FzZSBDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5V2VlazpcclxuICAgICAgY2FzZSBDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5TW9udGg6XHJcbiAgICAgIGNhc2UgQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeVhNb250aHM6IFxyXG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbltDcm9uRmllbGRUeXBlLlNlY29uZF0gPSBgMGA7XHJcbiAgICAgICAgdGhpcy5leHByZXNzaW9uW0Nyb25GaWVsZFR5cGUuTWludXRlXSA9IGAke21pbnV0ZVNlbGVjdGVkfWA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNyb25Ub0h1bWFuKCk7XHJcbiAgfVxyXG5cclxuICBvbkhvdXJzU2VsZWN0ZWQoaG91cnNTZWxlY3RlZDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmV4cHJlc3Npb25bQ3JvbkZpZWxkVHlwZS5NaW51dGVdID0gYCR7dGhpcy5taW51dGVTZWxlY3RlZH1gO1xyXG4gICAgc3dpdGNoKHRoaXMucGVyaW9kaWNpdHlTZWxlY3RlZCl7XHJcbiAgICAgIGNhc2UgQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeVhIb3VyczpcclxuICAgICAgICB0aGlzLmV4cHJlc3Npb25bQ3JvbkZpZWxkVHlwZS5Ib3VyXSA9IGAqLyR7aG91cnNTZWxlY3RlZH1gO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlIb3VyT2ZEYXk6XHJcbiAgICAgIGNhc2UgQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeVhEYXlzOlxyXG4gICAgICBjYXNlIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlXZWVrOlxyXG4gICAgICBjYXNlIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlNb250aDpcclxuICAgICAgY2FzZSBDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5WE1vbnRoczogXHJcbiAgICAgICAgdGhpcy5leHByZXNzaW9uW0Nyb25GaWVsZFR5cGUuSG91cl0gPSBgJHtob3Vyc1NlbGVjdGVkfWA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNyb25Ub0h1bWFuKCk7XHJcbiAgfVxyXG5cclxuICBvbldlZWtEYXlzU2VsZWN0ZWQod2Vla0RheXNTZWxlY3RlZDogbnVtYmVyW10pIHtcclxuICAgIHN3aXRjaCh0aGlzLnBlcmlvZGljaXR5U2VsZWN0ZWQpe1xyXG4gICAgICBjYXNlIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlXZWVrOiB7XHJcbiAgICAgICAgdGhpcy5leHByZXNzaW9uW0Nyb25GaWVsZFR5cGUuV2Vla0RheV0gPSBgJHt3ZWVrRGF5c1NlbGVjdGVkfWA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuY3JvblRvSHVtYW4oKTtcclxuICB9XHJcblxyXG4gIG9uTW9udGhEYXlzU2VsZWN0ZWQobW9udGhEYXlzU2VsZWN0ZWQ6IGFueSkge1xyXG4gICAgc3dpdGNoKHRoaXMucGVyaW9kaWNpdHlTZWxlY3RlZCl7XHJcbiAgICAgIGNhc2UgQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeVhEYXlzOlxyXG4gICAgICBjYXNlIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlYRGF5czpcclxuICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbltDcm9uRmllbGRUeXBlLk1vbnRoRGF5XSA9IGAvJHttb250aERheXNTZWxlY3RlZH1gO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeU1vbnRoOlxyXG4gICAgICBjYXNlIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlYTW9udGhzOiBcclxuICAgICAgICB0aGlzLmV4cHJlc3Npb25bQ3JvbkZpZWxkVHlwZS5Nb250aERheV0gPSBgJHttb250aERheXNTZWxlY3RlZH1gO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jcm9uVG9IdW1hbigpO1xyXG4gIH1cclxuXHJcbiAgb25Nb250aHNTZWxlY3RlZChtb250aHNTZWxlY3RlZDogbnVtYmVyW10pIHtcclxuICAgIHN3aXRjaCh0aGlzLnBlcmlvZGljaXR5U2VsZWN0ZWQpe1xyXG4gICAgICBjYXNlIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlYTW9udGhzOiB7XHJcbiAgICAgICAgdGhpcy5leHByZXNzaW9uW0Nyb25GaWVsZFR5cGUuTW9udGhdID0gYCR7bW9udGhzU2VsZWN0ZWR9YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5jcm9uVG9IdW1hbigpO1xyXG4gIH1cclxuXHJcbiAgY3JvblRvSHVtYW4oKSB7XHJcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gY3JvbnN0cnVlLnRvU3RyaW5nKHRoaXMuZXhwcmVzc2lvbi5qb2luKCcgJyksIHtsb2NhbGU6IHdpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2Uuc2xpY2UoMCwyKSB9KTtcclxuICAgIHRoaXMuY3JvbkV4cHJlc3Npb24uZW1pdCh0aGlzLmV4cHJlc3Npb24uam9pbignICcpKTtcclxuICB9XHJcblxyXG4gIGZvcm1hdEFycmF5VmFsdWVzKGFycmF5OiBhbnlbXSkge1xyXG4gICAgcmV0dXJuIGFycmF5Py5tYXAoYSA9PiBhLnZhbHVlKS5qb2luKCcsJyk7XHJcbiAgfVxyXG5cclxuICByZXN0YXJ0RXhwcmVzc2lvbigpIHtcclxuICAgIHRoaXMuZXhwcmVzc2lvbiA9IFsnKicsJyonLCcqJywnKicsJyonLCcqJ107XHJcbiAgfVxyXG5cclxuICBnZXRDcm9uUGVyaW9kaWNpdHlUeXBlKGNyb246IHN0cmluZyk6IENyb25QZXJpb2RpY2l0eVR5cGUgfCBudWxsIHtcclxuICAgIGNvbnN0IHBhcnRzID0gY3Jvbi5zcGxpdChcIiBcIik7XHJcbiAgXHJcbiAgICBpZiAocGFydHMubGVuZ3RoICE9PSA2KSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgY29uc3QgW3NlY29uZCwgbWludXRlLCBob3VyLCBkYXlPZk1vbnRoLCBtb250aCwgZGF5T2ZXZWVrXSA9IHBhcnRzO1xyXG5cclxuICAgIGlmIChtaW51dGUuc3RhcnRzV2l0aChcIi9cIikgJiYgaG91ciA9PT0gXCIqXCIgJiYgZGF5T2ZNb250aCA9PT0gXCIqXCIgJiYgbW9udGggPT09IFwiKlwiICYmIGRheU9mV2VlayA9PT0gXCIqXCIpIHtcclxuICAgICAgcmV0dXJuIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlYTWludXRlcztcclxuICAgIH1cclxuXHJcbiAgICBpZiAobWludXRlICE9PSBcIipcIiAmJiBob3VyID09PSBcIipcIiAmJiBkYXlPZk1vbnRoID09PSBcIipcIiAmJiBtb250aCA9PT0gXCIqXCIgJiYgZGF5T2ZXZWVrID09PSBcIipcIikge1xyXG4gICAgICByZXR1cm4gQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeU1pbnV0ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaG91ci5zdGFydHNXaXRoKFwiKi9cIikgJiYgZGF5T2ZNb250aCA9PT0gXCIqXCIgJiYgbW9udGggPT09IFwiKlwiICYmIGRheU9mV2VlayA9PT0gXCIqXCIpIHtcclxuICAgICAgcmV0dXJuIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlYSG91cnM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG1pbnV0ZSAhPT0gXCIqXCIgJiYgaG91ciAhPT0gXCIqXCIgJiYgZGF5T2ZNb250aCA9PT0gXCIqXCIgJiYgbW9udGggPT09IFwiKlwiICYmIGRheU9mV2VlayA9PT0gXCIqXCIpIHtcclxuICAgICAgcmV0dXJuIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlIb3VyT2ZEYXk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRheU9mTW9udGguc3RhcnRzV2l0aChcIi9cIikgJiYgbW9udGggPT09IFwiKlwiICYmIGRheU9mV2VlayA9PT0gXCIqXCIpIHtcclxuICAgICAgcmV0dXJuIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlYRGF5cztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGF5T2ZXZWVrICE9PSBcIipcIiAmJiBkYXlPZk1vbnRoID09PSBcIipcIiAmJiBtb250aCA9PT0gXCIqXCIpIHtcclxuICAgICAgcmV0dXJuIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlXZWVrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkYXlPZk1vbnRoICE9PSBcIipcIiAmJiBtb250aCA9PSBcIipcIikge1xyXG4gICAgICByZXR1cm4gQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeU1vbnRoO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZiAoZGF5T2ZNb250aCAhPT0gXCIqXCIgJiYgbW9udGggIT09IFwiKlwiKSB7XHJcbiAgICAgIHJldHVybiBDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5WE1vbnRocztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHNldCBwZXJpb2RpY2l0eVNlbGVjdGVkKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMuZm9ybUdyb3VwPy5wYXRjaFZhbHVlKHtwZXJpb2RpY2l0eTogdmFsdWV9KTtcclxuICB9XHJcblxyXG4gIGdldCBwZXJpb2RpY2l0eVNlbGVjdGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmdldCgncGVyaW9kaWNpdHknKSEudmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgbWludXRlU2VsZWN0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuZ2V0KCdtaW51dGVzJykhLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhvdXJTZWxlY3RlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5nZXQoJ2hvdXJzJykhLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHdlZWtEYXlTZWxlY3RlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5nZXQoJ3dlZWtEYXlzJykhLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG1vbnRoRGF5U2VsZWN0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuZ2V0KCdtb250aERheXMnKSEudmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgbW9udGhTZWxlY3RlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5nZXQoJ21vbnRocycpIS52YWx1ZTtcclxuICB9XHJcbn1cclxuIiwiPHctcGFuZWwgKm5nSWY9XCJoYXNDb250YWluZXI7IGVsc2UgY3JvbkNvbXBvbmVudFwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNyb25Db21wb25lbnRcIj48L25nLWNvbnRhaW5lcj5cclxuPC93LXBhbmVsPlxyXG5cclxuPG5nLXRlbXBsYXRlICNjcm9uQ29tcG9uZW50PlxyXG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgICAgIDx3LXBhbmVsLWdyaWQgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgICAgICAgPHctZWRpdC1zZWxlY3QgY2xhc3M9XCJjb2wtMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3QucGVyaW9kaWNpdHlMYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInBlcmlvZGljaXRpZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25WYWx1ZV09XCIndmFsdWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uTGFiZWxdPVwiJ25hbWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xTZXJ2aWNlLmNvbnZlcnRUb0Zvcm1Db250cm9sKGZvcm1Hcm91cC5nZXQoJ3BlcmlvZGljaXR5JykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25QZXJpb2RpY2l0eVNlbGVjdGVkKClcIj5cclxuICAgICAgICAgICAgPC93LWVkaXQtc2VsZWN0PlxyXG4gICAgICAgICAgICA8dy1lZGl0LW11bHRpc2VsZWN0ICpuZ0lmPVwiYWxsb3dNb250aHMoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3QubW9udGhzTGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJtb250aHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25WYWx1ZV09XCIndmFsdWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uTGFiZWxdPVwiJ25hbWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xTZXJ2aWNlLmNvbnZlcnRUb0Zvcm1Db250cm9sKGZvcm1Hcm91cC5nZXQoJ21vbnRocycpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uTW9udGhzU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8L3ctZWRpdC1tdWx0aXNlbGVjdD5cclxuICAgICAgICAgICAgPHctZWRpdC1tdWx0aXNlbGVjdCAqbmdJZj1cImFsbG93TW9udGhEYXlzKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwidHJhbnNsYXRpb25zT2JqZWN0LmRheXNMYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIm1vbnRoRGF5c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvblZhbHVlXT1cIid2YWx1ZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25MYWJlbF09XCIndmFsdWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xTZXJ2aWNlLmNvbnZlcnRUb0Zvcm1Db250cm9sKGZvcm1Hcm91cC5nZXQoJ21vbnRoRGF5cycpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uTW9udGhEYXlzU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8L3ctZWRpdC1tdWx0aXNlbGVjdD5cclxuICAgICAgICAgICAgPHctZWRpdC1tdWx0aXNlbGVjdCAqbmdJZj1cImFsbG93V2Vla0RheXMoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3Qud2Vla0RheXNMYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIndlZWtEYXlzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdPVwiJ3ZhbHVlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbkxhYmVsXT1cIiduYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sU2VydmljZS5jb252ZXJ0VG9Gb3JtQ29udHJvbChmb3JtR3JvdXAuZ2V0KCd3ZWVrRGF5cycpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uV2Vla0RheXNTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgIDwvdy1lZGl0LW11bHRpc2VsZWN0PlxyXG4gICAgICAgICAgICA8dy1lZGl0LXNlbGVjdCAqbmdJZj1cImFsbG93SG91cnMoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC02XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwidHJhbnNsYXRpb25zT2JqZWN0LmhvdXJMYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJob3Vyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xTZXJ2aWNlLmNvbnZlcnRUb0Zvcm1Db250cm9sKGZvcm1Hcm91cC5nZXQoJ2hvdXJzJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbkhvdXJzU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8L3ctZWRpdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDx3LWVkaXQtc2VsZWN0ICpuZ0lmPVwiYWxsb3dNaW51dGVzKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydjb2wtNic6IGFsbG93SG91cnMoKSwgJ2NvbC0xMic6ICFhbGxvd0hvdXJzKCl9XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwidHJhbnNsYXRpb25zT2JqZWN0Lm1pbnV0ZUxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIm1pbnV0ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sU2VydmljZS5jb252ZXJ0VG9Gb3JtQ29udHJvbChmb3JtR3JvdXAuZ2V0KCdtaW51dGVzJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbk1pbnV0ZVNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgICAgPC93LWVkaXQtc2VsZWN0PlxyXG4gICAgICAgICAgICA8dy1lZGl0LWlucHV0LW51bWJlciAqbmdJZj1cImFsbG93U2Vjb25kcygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInU2VndW5kb3MnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWluXT1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4XT1cIjU5XCI+XHJcbiAgICAgICAgICAgIDwvdy1lZGl0LWlucHV0LW51bWJlcj5cclxuICAgICAgICAgICAgPHctdmlldy10ZXh0IGNsYXNzPVwiY29sLTEyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3QuZGVzY3JpcHRpb25MYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xheW91dF09XCIndmVydGljYWwnXCI+XHJcbiAgICAgICAgICAgIDwvdy12aWV3LXRleHQ+XHJcbiAgICAgICAgPC93LXBhbmVsLWdyaWQ+XHJcbiAgICA8L2Zvcm0+XHJcbjwvbmctdGVtcGxhdGU+Il19
|
|
504
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidy1jcm9uLWV4cHJlc3Npb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dhcHAtY29tcG9uZW50cy9zcmMvbGliL21pc2Mvdy1jcm9uLWV4cHJlc3Npb25zL3ctY3Jvbi1leHByZXNzaW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93YXBwLWNvbXBvbmVudHMvc3JjL2xpYi9taXNjL3ctY3Jvbi1leHByZXNzaW9ucy93LWNyb24tZXhwcmVzc2lvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQWUsV0FBVyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpGLE9BQU8sRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUdwRyxPQUFRLFNBQVMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7Ozs7Ozs7Ozs7OztBQU90RSxNQUFNLE9BQU8seUJBQXlCO0lBaUVwQyxZQUNVLFdBQXdCLEVBQ3pCLGtCQUFzQyxFQUNyQyxRQUFtQjtRQUZuQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN6Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3JDLGFBQVEsR0FBUixRQUFRLENBQVc7UUE3RDdCLGNBQVMsR0FBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtB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USxFQUFFO1lBQzNELEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7U0FDNUQsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFFBQVEsR0FBRztZQUNkLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7WUFDM0QsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUMzRCxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFO1lBQzVELEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUU7WUFDOUQsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtZQUM3RCxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO1lBQzNELEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUU7U0FDOUQsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsWUFBWTtRQUNWLFFBQU8sSUFBSSxDQUFDLG1CQUFtQixFQUFDO1lBQzlCLEtBQUssbUJBQW1CLENBQUMsYUFBYSxDQUFDO1lBQ3ZDLEtBQUssbUJBQW1CLENBQUMsV0FBVyxDQUFDO1lBQ3JDLEtBQUssbUJBQW1CLENBQUMsV0FBVyxDQUFDO1lBQ3JDLEtBQUssbUJBQW1CLENBQUMsY0FBYyxDQUFDO1lBQ3hDLEtBQUssbUJBQW1CLENBQUMsVUFBVSxDQUFDO1lBQ3BDLEtBQUssbUJBQW1CLENBQUMsU0FBUyxDQUFDO1lBQ25DLEtBQUssbUJBQW1CLENBQUMsVUFBVSxDQUFDO1lBQ3BDLEtBQUssbUJBQW1CLENBQUMsWUFBWTtnQkFDbkMsT0FBTyxJQUFJLENBQUM7WUFDZDtnQkFDRSxPQUFPLEtBQUssQ0FBQztTQUNoQjtJQUNILENBQUM7SUFFRCxVQUFVO1FBQ1IsUUFBTyxJQUFJLENBQUMsbUJBQW1CLEVBQUM7WUFDOUIsS0FBSyxtQkFBbUIsQ0FBQyxXQUFXLENBQUM7WUFDckMsS0FBSyxtQkFBbUIsQ0FBQyxjQUFjLENBQUM7WUFDeEMsS0FBSyxtQkFBbUIsQ0FBQyxVQUFVLENBQUM7WUFDcEMsS0FBSyxtQkFBbUIsQ0FBQyxTQUFTLENBQUM7WUFDbkMsS0FBSyxtQkFBbUIsQ0FBQyxVQUFVLENBQUM7WUFDcEMsS0FBSyxtQkFBbUIsQ0FBQyxZQUFZO2dCQUNuQyxPQUFPLElBQUksQ0FBQztZQUNkO2dCQUNFLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO0lBQ0gsQ0FBQztJQUVELGFBQWE7UUFDWCxRQUFPLElBQUksQ0FBQyxtQkFBbUIsRUFBQztZQUM5QixLQUFLLG1CQUFtQixDQUFDLFNBQVM7Z0JBQ2hDLE9BQU8sSUFBSSxDQUFDO1lBQ2Q7Z0JBQ0UsT0FBTyxLQUFLLENBQUM7U0FDaEI7SUFDSCxDQUFDO0lBRUQsYUFBYTtRQUNYLFFBQU8sSUFBSSxDQUFDLG1CQUFtQixFQUFDO1lBQzlCLEtBQUssbUJBQW1CLENBQUMsVUFBVTtnQkFDakMsT0FBTyxJQUFJLENBQUM7WUFDZDtnQkFDRSxPQUFPLEtBQUssQ0FBQztTQUNoQjtJQUNILENBQUM7SUFFRCxjQUFjO1FBQ1osUUFBTyxJQUFJLENBQUMsbUJBQW1CLEVBQUM7WUFDOUIsS0FBSyxtQkFBbUIsQ0FBQyxZQUFZLENBQUM7WUFDdEMsS0FBSyxtQkFBbUIsQ0FBQyxVQUFVO2dCQUNqQyxPQUFPLElBQUksQ0FBQztZQUNkO2dCQUNFLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxRQUFPLElBQUksQ0FBQyxtQkFBbUIsRUFBQztZQUM5QixLQUFLLG1CQUFtQixDQUFDLFlBQVk7Z0JBQ25DLE9BQU8sSUFBSSxDQUFDO1lBQ2Q7Z0JBQ0UsT0FBTyxLQUFLLENBQUM7U0FDaEI7SUFDSCxDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLElBQUcsSUFBSSxDQUFDLG1CQUFtQixJQUFJLG1CQUFtQixDQUFDLFlBQVksRUFBRTtZQUMvRCxPQUFPLEtBQUssQ0FBQztTQUNkO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQztTQUNiO0lBQ0gsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksbUJBQW1CLENBQUMsV0FBVyxFQUFFO1lBQy9ELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN6RCxJQUFHLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxFQUFFO2dCQUN6QixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQzthQUN2QjtTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0RDtJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxjQUFzQjtRQUNyQyxRQUFPLElBQUksQ0FBQyxtQkFBbUIsRUFBQztZQUM5QixLQUFLLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssY0FBYyxFQUFFLENBQUM7Z0JBQzlELE1BQU07YUFDUDtZQUNELEtBQUssbUJBQW1CLENBQUMsV0FBVyxDQUFDO1lBQ3JDLEtBQUssbUJBQW1CLENBQUMsY0FBYyxDQUFDO1lBQ3hDLEtBQUssbUJBQW1CLENBQUMsV0FBVyxDQUFDO1lBQ3JDLEtBQUssbUJBQW1CLENBQUMsVUFBVSxDQUFDO1lBQ3BDLEtBQUssbUJBQW1CLENBQUMsU0FBUyxDQUFDO1lBQ25DLEtBQUssbUJBQW1CLENBQUMsVUFBVSxDQUFDO1lBQ3BDLEtBQUssbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxjQUFjLEVBQUUsQ0FBQztnQkFDNUQsTUFBTTthQUNQO1NBQ0Y7UUFDRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELGVBQWUsQ0FBQyxhQUFxQjtRQUNuQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNqRSxRQUFPLElBQUksQ0FBQyxtQkFBbUIsRUFBQztZQUM5QixLQUFLLG1CQUFtQixDQUFDLFdBQVc7Z0JBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssYUFBYSxFQUFFLENBQUM7Z0JBQzNELE1BQU07WUFDUixLQUFLLG1CQUFtQixDQUFDLGNBQWMsQ0FBQztZQUN4QyxLQUFLLG1CQUFtQixDQUFDLFVBQVUsQ0FBQztZQUNwQyxLQUFLLG1CQUFtQixDQUFDLFNBQVMsQ0FBQztZQUNuQyxLQUFLLG1CQUFtQixDQUFDLFVBQVUsQ0FBQztZQUNwQyxLQUFLLG1CQUFtQixDQUFDLFlBQVk7Z0JBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsYUFBYSxFQUFFLENBQUM7Z0JBQ3pELE1BQU07U0FDVDtRQUNELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsa0JBQWtCLENBQUMsZ0JBQTBCO1FBQzNDLFFBQU8sSUFBSSxDQUFDLG1CQUFtQixFQUFDO1lBQzlCLEtBQUssbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQzthQUNoRTtTQUNGO1FBQ0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxpQkFBc0I7UUFDeEMsUUFBTyxJQUFJLENBQUMsbUJBQW1CLEVBQUM7WUFDOUIsS0FBSyxtQkFBbUIsQ0FBQyxVQUFVO2dCQUMvQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUN2RSxNQUFNO1lBQ1YsS0FBSyxtQkFBbUIsQ0FBQyxVQUFVLENBQUM7WUFDcEMsS0FBSyxtQkFBbUIsQ0FBQyxZQUFZO2dCQUNuQyxJQUFHLGlCQUFpQixZQUFZLEtBQUssSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO29CQUN0RSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7aUJBQy9DO3FCQUFNO29CQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsaUJBQWlCLEVBQUUsQ0FBQztpQkFDbEU7Z0JBQ0QsTUFBTTtTQUNUO1FBQ0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxpQkFBc0I7UUFDdkMsUUFBTyxJQUFJLENBQUMsbUJBQW1CLEVBQUM7WUFDOUIsS0FBSyxtQkFBbUIsQ0FBQyxVQUFVO2dCQUMvQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxLQUFLLGlCQUFpQixFQUFFLENBQUM7Z0JBQ25FLE1BQU07U0FDWDtRQUNELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsY0FBd0I7UUFDdkMsUUFBTyxJQUFJLENBQUMsbUJBQW1CLEVBQUM7WUFDOUIsS0FBSyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDckMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO2dCQUM1QyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLGNBQWMsRUFBRSxDQUFDO2FBQzVEO1NBQ0Y7UUFDRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFbEgsTUFBTSxPQUFPLEdBQUc7WUFDZCxXQUFXLEVBQUUsSUFBSSxJQUFJLEVBQUU7U0FDeEIsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVoRixJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFaEcsSUFBSSxjQUFjLEdBQVcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFdkQsSUFBRyxDQUFDLENBQUMsbUJBQW1CLENBQUMsYUFBYSxFQUFFLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEVBQUU7WUFDNUksY0FBYyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3pFO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELHNCQUFzQixDQUFDLGNBQXNCO1FBRTNDLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMxRCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTdDLElBQUksT0FBTyxHQUFHLFNBQVMsR0FBRyxVQUFVLENBQUM7UUFDckMsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBRXRCLElBQUksT0FBTyxJQUFJLEVBQUUsRUFBRTtZQUNqQixPQUFPLElBQUksRUFBRSxDQUFDO1lBQ2QsYUFBYSxHQUFHLENBQUMsQ0FBQztTQUNuQjthQUFNLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRTtZQUN0QixPQUFPLElBQUksRUFBRSxDQUFDO1lBQ2QsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3BCO1FBRUQsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVsQyxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQVk7UUFDNUIsT0FBTyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELHNCQUFzQixDQUFDLElBQVk7UUFDakMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU5QixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUM7UUFFbkUsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksVUFBVSxLQUFLLEdBQUcsSUFBSSxLQUFLLEtBQUssR0FBRyxJQUFJLFNBQVMsS0FBSyxHQUFHLEVBQUU7WUFDdkcsT0FBTyxtQkFBbUIsQ0FBQyxhQUFhLENBQUM7U0FDMUM7UUFFRCxJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxVQUFVLEtBQUssR0FBRyxJQUFJLEtBQUssS0FBSyxHQUFHLElBQUksU0FBUyxLQUFLLEdBQUcsRUFBRTtZQUM5RixPQUFPLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztTQUN4QztRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLEtBQUssR0FBRyxJQUFJLEtBQUssS0FBSyxHQUFHLElBQUksU0FBUyxLQUFLLEdBQUcsRUFBRTtZQUNyRixPQUFPLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztTQUN4QztRQUVELElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLFVBQVUsS0FBSyxHQUFHLElBQUksS0FBSyxLQUFLLEdBQUcsSUFBSSxTQUFTLEtBQUssR0FBRyxFQUFFO1lBQzlGLE9BQU8sbUJBQW1CLENBQUMsY0FBYyxDQUFDO1NBQzNDO1FBRUQsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxHQUFHLElBQUksU0FBUyxLQUFLLEdBQUcsRUFBRTtZQUNyRSxPQUFPLG1CQUFtQixDQUFDLFVBQVUsQ0FBQztTQUN2QztRQUVELElBQUksU0FBUyxLQUFLLEdBQUcsSUFBSSxVQUFVLEtBQUssR0FBRyxJQUFJLEtBQUssS0FBSyxHQUFHLEVBQUU7WUFDNUQsT0FBTyxtQkFBbUIsQ0FBQyxTQUFTLENBQUM7U0FDdEM7UUFFRCxJQUFJLFVBQVUsS0FBSyxHQUFHLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRTtZQUN0QyxPQUFPLG1CQUFtQixDQUFDLFVBQVUsQ0FBQztTQUN2QztRQUVELElBQUksS0FBSyxLQUFLLEdBQUcsRUFBRTtZQUNqQixPQUFPLG1CQUFtQixDQUFDLFlBQVksQ0FBQztTQUN6QztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELDBCQUEwQjtRQUN4QixJQUFHLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxtQkFBbUIsQ0FBQyxZQUFZLEVBQUU7WUFDL0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUM3RSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1NBQy9EO2FBQU07WUFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUMxRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1NBQy9EO0lBQ0gsQ0FBQztJQUVELElBQUksbUJBQW1CLENBQUMsS0FBYTtRQUNuQyxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxFQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxJQUFJLG1CQUFtQjtRQUNyQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBRSxDQUFDLEtBQUssQ0FBQztJQUNsRCxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFFLENBQUMsS0FBSyxDQUFDO0lBQzlDLENBQUM7SUFFRCxJQUFJLFlBQVksQ0FBQyxLQUFhO1FBQzVCLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFFLENBQUMsS0FBSyxDQUFDO0lBQzVDLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUUsQ0FBQyxLQUFLLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFFLENBQUMsS0FBSyxDQUFDO0lBQy9DLENBQUM7SUFFRCxJQUFJLGlCQUFpQjtRQUNuQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBRSxDQUFDLEtBQUssQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUUsQ0FBQyxLQUFLLENBQUM7SUFDN0MsQ0FBQzs7c0hBOWhCVSx5QkFBeUI7MEdBQXpCLHlCQUF5QixxVENoQnRDLHc1S0EyRmM7MkZEM0VELHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSxvQkFBb0I7MkpBbUJQLFlBQVk7c0JBQWxDLEtBQUs7dUJBQUMsY0FBYztnQkFDWSxzQkFBc0I7c0JBQXRELEtBQUs7dUJBQUMsd0JBQXdCO2dCQUNSLFlBQVk7c0JBQWxDLEtBQUs7dUJBQUMsY0FBYztnQkFDTyxpQkFBaUI7c0JBQTVDLEtBQUs7dUJBQUMsbUJBQW1CO2dCQUNHLGtCQUFrQjtzQkFBOUMsS0FBSzt1QkFBQyxvQkFBb0I7Z0JBNENELGNBQWM7c0JBQXZDLE1BQU07dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE11bHRpU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9tdWx0aXNlbGVjdC1vcHRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBDcm9uRmllbGRUeXBlLCBDcm9uUGVyaW9kaWNpdHlUeXBlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2VudW1zL2Nyb24tZXhwcmVzc2lvbnMvZW51bS5tb2RlbCc7XHJcbmltcG9ydCB7IENyb25Db21wb25lbnRUcmFuc2xhdGlvbnMgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL2Nyb24tZXhwcmVzc2lvbnMvY3Jvbi1jb21wb25lbnQtdHJhbnNsYXRpb25zLm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2xTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2Zvcm0tY29udHJvbC5zZXJ2aWNlJztcclxuaW1wb3J0ICBjcm9uc3RydWUgZnJvbSAnY3JvbnN0cnVlL2kxOG4nO1xyXG5pbXBvcnQgeyBDcm9uRXhwcmVzc2lvblBhcnNlciB9IGZyb20gJ2Nyb24tcGFyc2VyJztcclxuaW1wb3J0IHsgV0RhdGVQaXBlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3BpcGVzL3ctZGF0ZS5waXBlJztcclxuaW1wb3J0IHsgV0RhdGVQaXBlRm9ybWF0VHlwZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvZW51bXMubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd3LWNyb24tZXhwcmVzc2lvbnMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi93LWNyb24tZXhwcmVzc2lvbnMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3ctY3Jvbi1leHByZXNzaW9ucy5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFdDcm9uRXhwcmVzc2lvbnNDb21wb25lbnQge1xyXG4gIGZvcm1Hcm91cCE6IEZvcm1Hcm91cDtcclxuXHJcbiAgcGVyaW9kaWNpdGllcyE6IE11bHRpU2VsZWN0T3B0aW9uW107XHJcbiAgbW9udGhzITogTXVsdGlTZWxlY3RPcHRpb25bXTtcclxuICB3ZWVrRGF5cyE6IE11bHRpU2VsZWN0T3B0aW9uW107XHJcblxyXG4gIG1vbnRoRGF5cyA9ICBBcnJheS5mcm9tKHsgbGVuZ3RoOiAzMSB9LCAoXywgaSkgPT4gKHsgdmFsdWU6IGkgKyAxIH0pKTtcclxuICBtaW51dGVzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogNjAgfSwgKF8sIGkpID0+IGkpO1xyXG4gIGhvdXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMjQgfSwgKF8sIGkpID0+IGkpO1xyXG5cclxuICBleHByZXNzaW9uOiBhbnlbXSA9IFsnKicsJyonLCcqJywnKicsJyonLCcqJ107XHJcbiAgZGVzY3JpcHRpb246IHN0cmluZyA9ICcnO1xyXG4gIG9jY3VycmVuY2VzOiBzdHJpbmc9ICcnO1xyXG5cclxuICBASW5wdXQoJ2luaXRpYWxWYWx1ZScpIGluaXRpYWxWYWx1ZSE6IHN0cmluZztcclxuICBASW5wdXQoJ3BlcmlvZGljaXRpZXNEaXNwbGF5ZWQnKSBwZXJpb2RpY2l0aWVzRGlzcGxheWVkITogQ3JvblBlcmlvZGljaXR5VHlwZVtdO1xyXG4gIEBJbnB1dCgnaGFzQ29udGFpbmVyJykgaGFzQ29udGFpbmVyOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoJ29jY3VycmVuY2VzTnVtYmVyJykgb2NjdXJyZW5jZXNOdW1iZXI6IG51bWJlciA9IDU7XHJcbiAgQElucHV0KCd0cmFuc2xhdGlvbnNPYmplY3QnKSB0cmFuc2xhdGlvbnNPYmplY3Q6IENyb25Db21wb25lbnRUcmFuc2xhdGlvbnMgPSB7XHJcbiAgICBwZXJpb2RpY2l0aWVzOiB7XHJcbiAgICAgIGV2ZXJ5WE1pbnV0ZXM6IFwiUmVwZXRpciBjYWRhIFggbWludXRvc1wiLFxyXG4gICAgICBldmVyeU1pbnV0ZTogXCJSZXBldGlyIGNhZGEgbWludXRvXCIsXHJcbiAgICAgIGV2ZXJ5WEhvdXJzOiBcIlJlcGV0aXIgY2FkYSBYIGhvcmFzXCIsXHJcbiAgICAgIGV2ZXJ5SG91ck9mRGF5OiBcIlJlcGV0aXIgY2FkYSBob3JhIGRlbCBkw61hXCIsXHJcbiAgICAgIGV2ZXJ5WERheXM6IFwiUmVwZXRpciBjYWRhIFggZMOtYXNcIixcclxuICAgICAgZXZlcnlXZWVrOiBcIlJlcGV0aXIgY2FkYSBzZW1hbmFcIixcclxuICAgICAgZXZlcnlNb250aDogXCJSZXBldGlyIGNhZGEgbWVzXCIsXHJcbiAgICAgIGV2ZXJ5WE1vbnRoczogXCJSZXBldGlyIFggbWVzZXNcIixcclxuICAgIH0sXHJcbiAgICBtb250aHM6IHtcclxuICAgICAgamFudWFyeTogXCJFbmVybyAoMSlcIixcclxuICAgICAgZmVicnVhcnk6IFwiRmVicmVybyAoMilcIixcclxuICAgICAgbWFyY2g6IFwiTWFyem8gKDMpXCIsXHJcbiAgICAgIGFwcmlsOiBcIkFicmlsICg0KVwiLFxyXG4gICAgICBtYXk6IFwiTWF5byAoNSlcIixcclxuICAgICAganVuZTogXCJKdW5pbyAoNilcIixcclxuICAgICAganVseTogXCJKdWxpbyAoNylcIixcclxuICAgICAgYXVndXN0OiBcIkFnb3N0byAoOClcIixcclxuICAgICAgc2VwdGVtYmVyOiBcIlNlcHRpZW1icmUgKDkpXCIsXHJcbiAgICAgIG9jdG9iZXI6IFwiT2N0dWJyZSAoMTApXCIsXHJcbiAgICAgIG5vdmVtYmVyOiBcIk5vdmllbWJyZSAoMTEpXCIsXHJcbiAgICAgIGRlY2VtYmVyOiBcIkRpY2llbWJyZSAoMTIpXCJcclxuICAgIH0sXHJcbiAgICB3ZWVrRGF5czoge1xyXG4gICAgICBzdW5kYXk6IFwiRG9taW5nbyAoMClcIixcclxuICAgICAgbW9uZGF5OiBcIkx1bmVzICgxKVwiLFxyXG4gICAgICB0dWVzZGF5OiBcIk1hcnRlcyAoMilcIixcclxuICAgICAgd2VkbmVzZGF5OiBcIk1pZXJjb2xlcyAoMylcIixcclxuICAgICAgdGh1cnNkYXk6IFwiSnVldmVzICg0KVwiLFxyXG4gICAgICBmcmlkYXk6IFwiVmllcm5lcyAoNSlcIixcclxuICAgICAgc2F0dXJkYXk6IFwiU2FiYWRvICg2KVwiXHJcbiAgICB9LFxyXG4gICAgcGVyaW9kaWNpdHlMYWJlbDogXCJQZXJpb2RpY2lkYWRcIixcclxuICAgIG1pbnV0ZUxhYmVsOiBcIk1pbnV0b1wiLFxyXG4gICAgaG91ckxhYmVsOiBcIkhvcmFcIixcclxuICAgIGRheXNMYWJlbDogXCJEw61hXCIsXHJcbiAgICB3ZWVrRGF5c0xhYmVsOiBcIkTDrWFzIGRlIGxhIHNlbWFuYVwiLFxyXG4gICAgbW9udGhzTGFiZWw6IFwiTWVzZXNcIixcclxuICAgIGRlc2NyaXB0aW9uTGFiZWw6IFwiRGVzY3JpcGNpw7NuXCIsXHJcbiAgICBvY2N1cnJlbmNlc0xhYmVsOiBcIkxhcyBzaWd1aWVudGVzIDUgb2N1cnJlbmNpYXMgc2Vyw6FuOiBcIlxyXG4gIH07XHJcblxyXG4gIEBPdXRwdXQoJ2Nyb25FeHByZXNzaW9uJykgY3JvbkV4cHJlc3Npb246IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIFxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwdWJsaWMgZm9ybUNvbnRyb2xTZXJ2aWNlOiBGb3JtQ29udHJvbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHdhcHBEYXRlOiBXRGF0ZVBpcGVcclxuICApIHsgfVxyXG4gIFxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0Rm9ybUdyb3VwKCk7XHJcbiAgICB0aGlzLmluaXRQZXJpb2RpY2l0aWVzKCk7XHJcbiAgICB0aGlzLmluaXRNb250aHMoKTtcclxuICAgIHRoaXMuaW5pdFdlZWtEYXlzKCk7XHJcblxyXG4gICAgaWYodGhpcy5pbml0aWFsVmFsdWUpIHtcclxuICAgICAgdGhpcy5pbml0UGFyc2VkVmFsdWVzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0Rm9ybUdyb3VwKCkge1xyXG4gICAgaWYodGhpcy5pbml0aWFsVmFsdWUpIHtcclxuICAgICAgY29uc3QgcGFydHMgPSB0aGlzLmluaXRpYWxWYWx1ZS5zcGxpdChcIiBcIik7XHJcblxyXG4gICAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgIHBlcmlvZGljaXR5OiBuZXcgRm9ybUNvbnRyb2woKSxcclxuICAgICAgICBtaW51dGVzOiBuZXcgRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICB0aGlzLmhhc0luaXRpYWxWYWx1ZShcclxuICAgICAgICAgICAgcGFydHNbQ3JvbkZpZWxkVHlwZS5NaW51dGVdKSA/IFxyXG4gICAgICAgICAgICB0aGlzLmZvcm1hdENyb25OdW1iZXIocGFydHNbQ3JvbkZpZWxkVHlwZS5NaW51dGVdKVxyXG4gICAgICAgICAgICA6IDApLFxyXG4gICAgICAgIGhvdXJzOiBuZXcgRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICB0aGlzLmhhc0luaXRpYWxWYWx1ZShcclxuICAgICAgICAgICAgcGFydHNbQ3JvbkZpZWxkVHlwZS5Ib3VyXSkgPyBcclxuICAgICAgICAgICAgdGhpcy5mb3JtYXRDcm9uTnVtYmVyKHBhcnRzW0Nyb25GaWVsZFR5cGUuSG91cl0pXHJcbiAgICAgICAgICAgIDogMCksXHJcbiAgICAgICAgd2Vla0RheXM6IG5ldyBGb3JtQ29udHJvbChcclxuICAgICAgICAgIHRoaXMuaGFzSW5pdGlhbFZhbHVlKFxyXG4gICAgICAgICAgICBwYXJ0c1tDcm9uRmllbGRUeXBlLldlZWtEYXldKSA/IFxyXG4gICAgICAgICAgICBwYXJ0c1tDcm9uRmllbGRUeXBlLldlZWtEYXldLnJlcGxhY2UoL1xcLy9nLCAnJykuc3BsaXQoJywnKS5tYXAoTnVtYmVyKVxyXG4gICAgICAgICAgICA6IFtdKSxcclxuICAgICAgICBtb250aERheTogbmV3IEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgdGhpcy5oYXNJbml0aWFsVmFsdWUoXHJcbiAgICAgICAgICAgIHBhcnRzW0Nyb25GaWVsZFR5cGUuTW9udGhEYXldKSA/IFxyXG4gICAgICAgICAgICB0aGlzLmZvcm1hdENyb25OdW1iZXIocGFydHNbQ3JvbkZpZWxkVHlwZS5Nb250aERheV0pXHJcbiAgICAgICAgICAgIDogMSksXHJcbiAgICAgICAgbW9udGhEYXlzOiBuZXcgRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICB0aGlzLmhhc0luaXRpYWxWYWx1ZShwYXJ0c1tDcm9uRmllbGRUeXBlLk1vbnRoRGF5XSkgPyBcclxuICAgICAgICAgICAgcGFydHNbQ3JvbkZpZWxkVHlwZS5Nb250aERheV0ucmVwbGFjZSgvWy8qXS9nLCAnJykuc3BsaXQoJywnKS5tYXAoTnVtYmVyKVxyXG4gICAgICAgICAgICA6IFtdKSxcclxuICAgICAgICBtb250aHM6IG5ldyBGb3JtQ29udHJvbChcclxuICAgICAgICAgIHRoaXMuaGFzSW5pdGlhbFZhbHVlKHBhcnRzW0Nyb25GaWVsZFR5cGUuTW9udGhdKSA/IFxyXG4gICAgICAgICAgICBwYXJ0c1tDcm9uRmllbGRUeXBlLk1vbnRoXS5yZXBsYWNlKC9cXC8vZywgJycpLnNwbGl0KCcsJykubWFwKE51bWJlcilcclxuICAgICAgICAgICAgOiAwKSxcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgIHBlcmlvZGljaXR5OiBuZXcgRm9ybUNvbnRyb2woMCksXHJcbiAgICAgICAgbWludXRlczogbmV3IEZvcm1Db250cm9sKDApLFxyXG4gICAgICAgIGhvdXJzOiBuZXcgRm9ybUNvbnRyb2woMCksXHJcbiAgICAgICAgd2Vla0RheXM6IG5ldyBGb3JtQ29udHJvbChbXSksXHJcbiAgICAgICAgbW9udGhEYXk6IG5ldyBGb3JtQ29udHJvbCgxKSxcclxuICAgICAgICBtb250aERheXM6IG5ldyBGb3JtQ29udHJvbChbXSksXHJcbiAgICAgICAgbW9udGhzOiBuZXcgRm9ybUNvbnRyb2woMCksXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFzSW5pdGlhbFZhbHVlKHBhcnQ6IHN0cmluZykge1xyXG4gICAgaWYocGFydCA9PSAnKicgfHwgcGFydCA9PSAnMCcpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb3JtYXRDcm9uTnVtYmVyKGNyb25WYWx1ZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gK2Nyb25WYWx1ZS5yZXBsYWNlKC9bLypdL2csICcnKTtcclxuICB9XHJcblxyXG4gIGluaXRQZXJpb2RpY2l0aWVzKCkge1xyXG4gICAgY29uc3QgdHJhbnNsYXRpb25zTWFwID0ge1xyXG4gICAgICBbQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeVhNaW51dGVzXTogdGhpcy50cmFuc2xhdGlvbnNPYmplY3QucGVyaW9kaWNpdGllcy5ldmVyeVhNaW51dGVzLFxyXG4gICAgICBbQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeU1pbnV0ZV06IHRoaXMudHJhbnNsYXRpb25zT2JqZWN0LnBlcmlvZGljaXRpZXMuZXZlcnlNaW51dGUsXHJcbiAgICAgIFtDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5WEhvdXJzXTogdGhpcy50cmFuc2xhdGlvbnNPYmplY3QucGVyaW9kaWNpdGllcy5ldmVyeVhIb3VycyxcclxuICAgICAgW0Nyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlIb3VyT2ZEYXldOiB0aGlzLnRyYW5zbGF0aW9uc09iamVjdC5wZXJpb2RpY2l0aWVzLmV2ZXJ5SG91ck9mRGF5LFxyXG4gICAgICBbQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeVhEYXlzXTogdGhpcy50cmFuc2xhdGlvbnNPYmplY3QucGVyaW9kaWNpdGllcy5ldmVyeVhEYXlzLFxyXG4gICAgICBbQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeVdlZWtdOiB0aGlzLnRyYW5zbGF0aW9uc09iamVjdC5wZXJpb2RpY2l0aWVzLmV2ZXJ5V2VlayxcclxuICAgICAgW0Nyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlNb250aF06IHRoaXMudHJhbnNsYXRpb25zT2JqZWN0LnBlcmlvZGljaXRpZXMuZXZlcnlNb250aCxcclxuICAgICAgW0Nyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlYTW9udGhzXTogdGhpcy50cmFuc2xhdGlvbnNPYmplY3QucGVyaW9kaWNpdGllcy5ldmVyeVhNb250aHMsXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLnBlcmlvZGljaXRpZXNEaXNwbGF5ZWQpIHtcclxuICAgICAgdGhpcy5wZXJpb2RpY2l0aWVzID0gdGhpcy5wZXJpb2RpY2l0aWVzRGlzcGxheWVkLm1hcChwZXJpb2RpY2l0eSA9PiAoe1xyXG4gICAgICAgIHZhbHVlOiBwZXJpb2RpY2l0eSxcclxuICAgICAgICBuYW1lOiB0cmFuc2xhdGlvbnNNYXBbcGVyaW9kaWNpdHldXHJcbiAgICAgIH0pKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGVyaW9kaWNpdGllcyA9IE9iamVjdC5lbnRyaWVzKHRyYW5zbGF0aW9uc01hcCkubWFwKChba2V5LCB2YWx1ZV0pID0+ICh7XHJcbiAgICAgICAgdmFsdWU6IE51bWJlcihrZXkpLCBcclxuICAgICAgICBuYW1lOiB2YWx1ZVxyXG4gICAgICB9KSk7XHJcbiAgICB9XHJcbiAgICBpZighdGhpcy5pbml0aWFsVmFsdWUpIHtcclxuICAgICAgdGhpcy5wZXJpb2RpY2l0eVNlbGVjdGVkID0gdGhpcy5wZXJpb2RpY2l0aWVzWzBdPy52YWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluaXRQYXJzZWRWYWx1ZXMoKSB7XHJcbiAgICB0aGlzLmV4cHJlc3Npb24gPSB0aGlzLnBhcnNlQ3JvbkV4cHJlc3Npb24odGhpcy5pbml0aWFsVmFsdWUpO1xyXG4gICAgXHJcbiAgICB0aGlzLnBlcmlvZGljaXR5U2VsZWN0ZWQgPSB0aGlzLmdldENyb25QZXJpb2RpY2l0eVR5cGUodGhpcy5pbml0aWFsVmFsdWUpITtcclxuICAgIHRoaXMuaGFuZGxlWmVyb0hvdXJzQXJyYXkoKTtcclxuICAgIHRoaXMuY3JvblRvSHVtYW4oKTtcclxuICB9XHJcblxyXG4gIHBhcnNlQ3JvbkV4cHJlc3Npb24oY3Jvbjogc3RyaW5nKTogYW55W10ge1xyXG4gICAgY29uc3QgcGFydHMgPSBjcm9uLnNwbGl0KFwiIFwiKTtcclxuICAgIFxyXG4gICAgd2hpbGUgKHBhcnRzLmxlbmd0aCA8IDYpIHtcclxuICAgICAgcGFydHMucHVzaCgnKicpO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgcmV0dXJuIHBhcnRzO1xyXG4gIH1cclxuXHJcbiAgaW5pdE1vbnRocygpIHtcclxuICAgIHRoaXMubW9udGhzID0gW1xyXG4gICAgICB7IHZhbHVlOiAxLCBuYW1lOiB0aGlzLnRyYW5zbGF0aW9uc09iamVjdC5tb250aHMuamFudWFyeSB9LCBcclxuICAgICAgeyB2YWx1ZTogMiwgbmFtZTogdGhpcy50cmFuc2xhdGlvbnNPYmplY3QubW9udGhzLmZlYnJ1YXJ5IH0sIFxyXG4gICAgICB7IHZhbHVlOiAzLCBuYW1lOiB0aGlzLnRyYW5zbGF0aW9uc09iamVjdC5tb250aHMubWFyY2ggfSwgXHJcbiAgICAgIHsgdmFsdWU6IDQsIG5hbWU6IHRoaXMudHJhbnNsYXRpb25zT2JqZWN0Lm1vbnRocy5hcHJpbCB9LCBcclxuICAgICAgeyB2YWx1ZTogNSwgbmFtZTogdGhpcy50cmFuc2xhdGlvbnNPYmplY3QubW9udGhzLm1heSB9LCBcclxuICAgICAgeyB2YWx1ZTogNiwgbmFtZTogdGhpcy50cmFuc2xhdGlvbnNPYmplY3QubW9udGhzLmp1bmUgfSwgXHJcbiAgICAgIHsgdmFsdWU6IDcsIG5hbWU6IHRoaXMudHJhbnNsYXRpb25zT2JqZWN0Lm1vbnRocy5qdWx5IH0sIFxyXG4gICAgICB7IHZhbHVlOiA4LCBuYW1lOiB0aGlzLnRyYW5zbGF0aW9uc09iamVjdC5tb250aHMuYXVndXN0IH0sIFxyXG4gICAgICB7IHZhbHVlOiA5LCBuYW1lOiB0aGlzLnRyYW5zbGF0aW9uc09iamVjdC5tb250aHMuc2VwdGVtYmVyIH0sIFxyXG4gICAgICB7IHZhbHVlOiAxMCwgbmFtZTp0aGlzLnRyYW5zbGF0aW9uc09iamVjdC5tb250aHMub2N0b2JlciB9LCBcclxuICAgICAgeyB2YWx1ZTogMTEsIG5hbWU6dGhpcy50cmFuc2xhdGlvbnNPYmplY3QubW9udGhzLm5vdmVtYmVyIH0sIFxyXG4gICAgICB7IHZhbHVlOiAxMiwgbmFtZTp0aGlzLnRyYW5zbGF0aW9uc09iamVjdC5tb250aHMuZGVjZW1iZXIgfSwgXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgaW5pdFdlZWtEYXlzKCkge1xyXG4gICAgdGhpcy53ZWVrRGF5cyA9IFtcclxuICAgICAgeyB2YWx1ZTogMCwgbmFtZTogdGhpcy50cmFuc2xhdGlvbnNPYmplY3Qud2Vla0RheXMuc3VuZGF5IH0sIFxyXG4gICAgICB7IHZhbHVlOiAxLCBuYW1lOiB0aGlzLnRyYW5zbGF0aW9uc09iamVjdC53ZWVrRGF5cy5tb25kYXkgfSwgXHJcbiAgICAgIHsgdmFsdWU6IDIsIG5hbWU6IHRoaXMudHJhbnNsYXRpb25zT2JqZWN0LndlZWtEYXlzLnR1ZXNkYXkgfSwgXHJcbiAgICAgIHsgdmFsdWU6IDMsIG5hbWU6IHRoaXMudHJhbnNsYXRpb25zT2JqZWN0LndlZWtEYXlzLndlZG5lc2RheSB9LCBcclxuICAgICAgeyB2YWx1ZTogNCwgbmFtZTogdGhpcy50cmFuc2xhdGlvbnNPYmplY3Qud2Vla0RheXMudGh1cnNkYXkgfSwgXHJcbiAgICAgIHsgdmFsdWU6IDUsIG5hbWU6IHRoaXMudHJhbnNsYXRpb25zT2JqZWN0LndlZWtEYXlzLmZyaWRheSB9LCBcclxuICAgICAgeyB2YWx1ZTogNiwgbmFtZTogdGhpcy50cmFuc2xhdGlvbnNPYmplY3Qud2Vla0RheXMuc2F0dXJkYXkgfSwgXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgYWxsb3dTZWNvbmRzKCkge1xyXG4gICAgcmV0dXJuIGZhbHNlOyBcclxuICB9XHJcblxyXG4gIGFsbG93TWludXRlcygpIHtcclxuICAgIHN3aXRjaCh0aGlzLnBlcmlvZGljaXR5U2VsZWN0ZWQpe1xyXG4gICAgICBjYXNlIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlYTWludXRlczpcclxuICAgICAgY2FzZSBDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5TWludXRlOlxyXG4gICAgICBjYXNlIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlYSG91cnM6XHJcbiAgICAgIGNhc2UgQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeUhvdXJPZkRheTpcclxuICAgICAgY2FzZSBDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5WERheXM6XHJcbiAgICAgIGNhc2UgQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeVdlZWs6XHJcbiAgICAgIGNhc2UgQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeU1vbnRoOlxyXG4gICAgICBjYXNlIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlYTW9udGhzOiBcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgZGVmYXVsdDogXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWxsb3dIb3VycygpIHtcclxuICAgIHN3aXRjaCh0aGlzLnBlcmlvZGljaXR5U2VsZWN0ZWQpe1xyXG4gICAgICBjYXNlIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlYSG91cnM6XHJcbiAgICAgIGNhc2UgQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeUhvdXJPZkRheTpcclxuICAgICAgY2FzZSBDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5WERheXM6XHJcbiAgICAgIGNhc2UgQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeVdlZWs6XHJcbiAgICAgIGNhc2UgQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeU1vbnRoOlxyXG4gICAgICBjYXNlIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlYTW9udGhzOiBcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgZGVmYXVsdDogXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWxsb3dXZWVrRGF5cygpIHtcclxuICAgIHN3aXRjaCh0aGlzLnBlcmlvZGljaXR5U2VsZWN0ZWQpe1xyXG4gICAgICBjYXNlIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlXZWVrOlxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICBkZWZhdWx0OiBcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhbGxvd01vbnRoRGF5KCkge1xyXG4gICAgc3dpdGNoKHRoaXMucGVyaW9kaWNpdHlTZWxlY3RlZCl7XHJcbiAgICAgIGNhc2UgQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeVhEYXlzOiBcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgZGVmYXVsdDogXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWxsb3dNb250aERheXMoKSB7XHJcbiAgICBzd2l0Y2godGhpcy5wZXJpb2RpY2l0eVNlbGVjdGVkKXtcclxuICAgICAgY2FzZSBDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5WE1vbnRoczogXHJcbiAgICAgIGNhc2UgQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeU1vbnRoOlxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICBkZWZhdWx0OiBcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhbGxvd01vbnRocygpIHtcclxuICAgIHN3aXRjaCh0aGlzLnBlcmlvZGljaXR5U2VsZWN0ZWQpe1xyXG4gICAgICBjYXNlIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlYTW9udGhzOiBcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgZGVmYXVsdDogXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNNb250aERheXNSZXF1aXJlZCgpIHtcclxuICAgIGlmKHRoaXMucGVyaW9kaWNpdHlTZWxlY3RlZCA9PSBDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5WE1vbnRocykge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2UgeyBcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblBlcmlvZGljaXR5U2VsZWN0ZWQoKSB7XHJcbiAgICB0aGlzLnJlc3RhcnRFeHByZXNzaW9uKCk7XHJcbiAgICB0aGlzLmhhbmRsZVplcm9Ib3Vyc0FycmF5KCk7XHJcbiAgICB0aGlzLnVwZGF0ZU1vbnRoRGF5c1JlcXVpcmVtZW50KCk7XHJcbiAgICB0aGlzLm9uSG91cnNTZWxlY3RlZCh0aGlzLmhvdXJTZWxlY3RlZCk7XHJcbiAgICB0aGlzLm9uV2Vla0RheXNTZWxlY3RlZCh0aGlzLndlZWtEYXlTZWxlY3RlZCk7XHJcbiAgICB0aGlzLm9uTW9udGhzU2VsZWN0ZWQodGhpcy5tb250aFNlbGVjdGVkKTtcclxuICAgIHRoaXMub25Nb250aERheXNTZWxlY3RlZCh0aGlzLm1vbnRoRGF5c1NlbGVjdGVkKTtcclxuICAgIHRoaXMub25Nb250aERheVNlbGVjdGVkKHRoaXMubW9udGhEYXlTZWxlY3RlZCk7XHJcbiAgICB0aGlzLm9uTWludXRlU2VsZWN0ZWQodGhpcy5taW51dGVTZWxlY3RlZCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVaZXJvSG91cnNBcnJheSgpIHtcclxuICAgIGlmICh0aGlzLnBlcmlvZGljaXR5U2VsZWN0ZWQgPT0gQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeVhIb3Vycykge1xyXG4gICAgICB0aGlzLmhvdXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMjMgfSwgKF8sIGkpID0+IGkgKyAxKTtcclxuICAgICAgaWYodGhpcy5ob3VyU2VsZWN0ZWQgPT0gMCkge1xyXG4gICAgICAgIHRoaXMuaG91clNlbGVjdGVkID0gMTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5ob3VycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDI0IH0sIChfLCBpKSA9PiBpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uTWludXRlU2VsZWN0ZWQobWludXRlU2VsZWN0ZWQ6IG51bWJlcikge1xyXG4gICAgc3dpdGNoKHRoaXMucGVyaW9kaWNpdHlTZWxlY3RlZCl7XHJcbiAgICAgIGNhc2UgQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeVhNaW51dGVzOiB7XHJcbiAgICAgICAgdGhpcy5leHByZXNzaW9uW0Nyb25GaWVsZFR5cGUuU2Vjb25kXSA9IGAwYDtcclxuICAgICAgICB0aGlzLmV4cHJlc3Npb25bQ3JvbkZpZWxkVHlwZS5NaW51dGVdID0gYCovJHttaW51dGVTZWxlY3RlZH1gO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeU1pbnV0ZTpcclxuICAgICAgY2FzZSBDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5SG91ck9mRGF5OlxyXG4gICAgICBjYXNlIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlYSG91cnM6XHJcbiAgICAgIGNhc2UgQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeVhEYXlzOlxyXG4gICAgICBjYXNlIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlXZWVrOlxyXG4gICAgICBjYXNlIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlNb250aDpcclxuICAgICAgY2FzZSBDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5WE1vbnRoczoge1xyXG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbltDcm9uRmllbGRUeXBlLlNlY29uZF0gPSBgMGA7XHJcbiAgICAgICAgdGhpcy5leHByZXNzaW9uW0Nyb25GaWVsZFR5cGUuTWludXRlXSA9IGAke21pbnV0ZVNlbGVjdGVkfWA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuY3JvblRvSHVtYW4oKTtcclxuICB9XHJcblxyXG4gIG9uSG91cnNTZWxlY3RlZChob3Vyc1NlbGVjdGVkOiBudW1iZXIpIHtcclxuICAgIHRoaXMuZXhwcmVzc2lvbltDcm9uRmllbGRUeXBlLk1pbnV0ZV0gPSBgJHt0aGlzLm1pbnV0ZVNlbGVjdGVkfWA7XHJcbiAgICBzd2l0Y2godGhpcy5wZXJpb2RpY2l0eVNlbGVjdGVkKXtcclxuICAgICAgY2FzZSBDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5WEhvdXJzOlxyXG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbltDcm9uRmllbGRUeXBlLkhvdXJdID0gYCovJHtob3Vyc1NlbGVjdGVkfWA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeUhvdXJPZkRheTpcclxuICAgICAgY2FzZSBDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5WERheXM6XHJcbiAgICAgIGNhc2UgQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeVdlZWs6XHJcbiAgICAgIGNhc2UgQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeU1vbnRoOlxyXG4gICAgICBjYXNlIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlYTW9udGhzOiBcclxuICAgICAgICB0aGlzLmV4cHJlc3Npb25bQ3JvbkZpZWxkVHlwZS5Ib3VyXSA9IGAke2hvdXJzU2VsZWN0ZWR9YDtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoaXMuY3JvblRvSHVtYW4oKTtcclxuICB9XHJcblxyXG4gIG9uV2Vla0RheXNTZWxlY3RlZCh3ZWVrRGF5c1NlbGVjdGVkOiBudW1iZXJbXSkge1xyXG4gICAgc3dpdGNoKHRoaXMucGVyaW9kaWNpdHlTZWxlY3RlZCl7XHJcbiAgICAgIGNhc2UgQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeVdlZWs6IHtcclxuICAgICAgICB0aGlzLmV4cHJlc3Npb25bQ3JvbkZpZWxkVHlwZS5XZWVrRGF5XSA9IGAke3dlZWtEYXlzU2VsZWN0ZWR9YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5jcm9uVG9IdW1hbigpO1xyXG4gIH1cclxuXHJcbiAgb25Nb250aERheXNTZWxlY3RlZChtb250aERheXNTZWxlY3RlZDogYW55KSB7XHJcbiAgICBzd2l0Y2godGhpcy5wZXJpb2RpY2l0eVNlbGVjdGVkKXtcclxuICAgICAgY2FzZSBDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5WERheXM6XHJcbiAgICAgICAgICB0aGlzLmV4cHJlc3Npb25bQ3JvbkZpZWxkVHlwZS5Nb250aERheV0gPSBgKi8ke3RoaXMubW9udGhEYXlTZWxlY3RlZH1gO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeU1vbnRoOlxyXG4gICAgICBjYXNlIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlYTW9udGhzOiBcclxuICAgICAgICBpZihtb250aERheXNTZWxlY3RlZCBpbnN0YW5jZW9mIEFycmF5ICYmIG1vbnRoRGF5c1NlbGVjdGVkLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLmV4cHJlc3Npb25bQ3JvbkZpZWxkVHlwZS5Nb250aERheV0gPSBgKmA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbltDcm9uRmllbGRUeXBlLk1vbnRoRGF5XSA9IGAke21vbnRoRGF5c1NlbGVjdGVkfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jcm9uVG9IdW1hbigpO1xyXG4gIH1cclxuXHJcbiAgb25Nb250aERheVNlbGVjdGVkKG1vbnRoRGF5c1NlbGVjdGVkOiBhbnkpIHtcclxuICAgIHN3aXRjaCh0aGlzLnBlcmlvZGljaXR5U2VsZWN0ZWQpe1xyXG4gICAgICBjYXNlIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlYRGF5czpcclxuICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbltDcm9uRmllbGRUeXBlLk1vbnRoRGF5XSA9IGAqLyR7bW9udGhEYXlzU2VsZWN0ZWR9YDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jcm9uVG9IdW1hbigpO1xyXG4gIH1cclxuXHJcbiAgb25Nb250aHNTZWxlY3RlZChtb250aHNTZWxlY3RlZDogbnVtYmVyW10pIHtcclxuICAgIHN3aXRjaCh0aGlzLnBlcmlvZGljaXR5U2VsZWN0ZWQpe1xyXG4gICAgICBjYXNlIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlYTW9udGhzOiB7XHJcbiAgICAgICAgdGhpcy5leHByZXNzaW9uW0Nyb25GaWVsZFR5cGUuU2Vjb25kXSA9IGAwYDtcclxuICAgICAgICB0aGlzLmV4cHJlc3Npb25bQ3JvbkZpZWxkVHlwZS5Nb250aF0gPSBgJHttb250aHNTZWxlY3RlZH1gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmNyb25Ub0h1bWFuKCk7XHJcbiAgfVxyXG5cclxuICBjcm9uVG9IdW1hbigpIHtcclxuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBjcm9uc3RydWUudG9TdHJpbmcodGhpcy5leHByZXNzaW9uLmpvaW4oJyAnKSwge2xvY2FsZTogd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZS5zbGljZSgwLDIpIH0pO1xyXG4gICAgXHJcbiAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICBjdXJyZW50RGF0ZTogbmV3IERhdGUoKSxcclxuICAgIH07XHJcbiAgICBcclxuICAgIGNvbnN0IGludGVydmFsID0gQ3JvbkV4cHJlc3Npb25QYXJzZXIucGFyc2UodGhpcy5leHByZXNzaW9uLmpvaW4oJyAnKSwgb3B0aW9ucyk7XHJcblxyXG4gICAgbGV0IGRhdGVzID0gaW50ZXJ2YWwudGFrZSh0aGlzLm9jY3VycmVuY2VzTnVtYmVyKS5tYXAoKGRhdGUpID0+IG5ldyBEYXRlKGRhdGUudG9TdHJpbmcoKSkpO1xyXG4gICAgdGhpcy5vY2N1cnJlbmNlcyA9IGRhdGVzLm1hcChkID0+IHRoaXMud2FwcERhdGUudHJhbnNmb3JtKGQsIFdEYXRlUGlwZUZvcm1hdFR5cGUuRykpLmpvaW4oXCIsIFwiKTtcclxuXHJcbiAgICBsZXQgY3JvbkV4cHJlc3Npb246IHN0cmluZyA9IHRoaXMuZXhwcmVzc2lvbi5qb2luKCcgJyk7XHJcblxyXG4gICAgaWYoIVtDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5WE1pbnV0ZXMsIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlNaW51dGUsIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlYSG91cnNdLmluY2x1ZGVzKHRoaXMucGVyaW9kaWNpdHlTZWxlY3RlZCkpIHtcclxuICAgICAgY3JvbkV4cHJlc3Npb24gPSB0aGlzLmxvY2FsVXNlckNyb25Ub1VUQ0Nyb24odGhpcy5leHByZXNzaW9uLmpvaW4oJyAnKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jcm9uRXhwcmVzc2lvbi5lbWl0KGNyb25FeHByZXNzaW9uKTtcclxuICB9XHJcblxyXG4gIGxvY2FsVXNlckNyb25Ub1VUQ0Nyb24oY3JvbkV4cHJlc3Npb246IHN0cmluZykge1xyXG4gICAgXHJcbiAgICBjb25zdCBjcm9uUGFydHMgPSBjcm9uRXhwcmVzc2lvbi50cmltKCkuc3BsaXQoJyAnKTtcclxuICAgIGNvbnN0IHVzZXJPZmZzZXQgPSAtKG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSAvIDYwKTtcclxuICAgIGNvbnN0IGxvY2FsSG91ciA9IHBhcnNlSW50KGNyb25QYXJ0c1syXSwgMTApO1xyXG5cclxuICAgIGxldCB1dGNIb3VyID0gbG9jYWxIb3VyIC0gdXNlck9mZnNldDtcclxuICAgIGxldCBkYXlBZGp1c3RtZW50ID0gMDtcclxuICBcclxuICAgIGlmICh1dGNIb3VyID49IDI0KSB7XHJcbiAgICAgIHV0Y0hvdXIgLT0gMjQ7XHJcbiAgICAgIGRheUFkanVzdG1lbnQgPSAxO1xyXG4gICAgfSBlbHNlIGlmICh1dGNIb3VyIDwgMCkge1xyXG4gICAgICB1dGNIb3VyICs9IDI0O1xyXG4gICAgICBkYXlBZGp1c3RtZW50ID0gLTE7XHJcbiAgICB9XHJcbiAgXHJcbiAgICBjcm9uUGFydHNbMl0gPSB1dGNIb3VyLnRvU3RyaW5nKCk7XHJcbiAgXHJcbiAgICByZXR1cm4gY3JvblBhcnRzLmpvaW4oJyAnKTtcclxuICB9XHJcblxyXG4gIGZvcm1hdEFycmF5VmFsdWVzKGFycmF5OiBhbnlbXSkge1xyXG4gICAgcmV0dXJuIGFycmF5Py5tYXAoYSA9PiBhLnZhbHVlKS5qb2luKCcsJyk7XHJcbiAgfVxyXG5cclxuICByZXN0YXJ0RXhwcmVzc2lvbigpIHtcclxuICAgIHRoaXMuZXhwcmVzc2lvbiA9IFsnKicsJyonLCcqJywnKicsJyonLCcqJ107XHJcbiAgfVxyXG5cclxuICBnZXRDcm9uUGVyaW9kaWNpdHlUeXBlKGNyb246IHN0cmluZyk6IENyb25QZXJpb2RpY2l0eVR5cGUgfCBudWxsIHtcclxuICAgIGNvbnN0IHBhcnRzID0gY3Jvbi5zcGxpdChcIiBcIik7XHJcbiAgXHJcbiAgICBpZiAocGFydHMubGVuZ3RoICE9PSA2KSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgY29uc3QgW3NlY29uZCwgbWludXRlLCBob3VyLCBkYXlPZk1vbnRoLCBtb250aCwgZGF5T2ZXZWVrXSA9IHBhcnRzO1xyXG5cclxuICAgIGlmIChtaW51dGUuc3RhcnRzV2l0aChcIiovXCIpICYmIGhvdXIgPT09IFwiKlwiICYmIGRheU9mTW9udGggPT09IFwiKlwiICYmIG1vbnRoID09PSBcIipcIiAmJiBkYXlPZldlZWsgPT09IFwiKlwiKSB7XHJcbiAgICAgIHJldHVybiBDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5WE1pbnV0ZXM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG1pbnV0ZSAhPT0gXCIqXCIgJiYgaG91ciA9PT0gXCIqXCIgJiYgZGF5T2ZNb250aCA9PT0gXCIqXCIgJiYgbW9udGggPT09IFwiKlwiICYmIGRheU9mV2VlayA9PT0gXCIqXCIpIHtcclxuICAgICAgcmV0dXJuIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlNaW51dGU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhvdXIuc3RhcnRzV2l0aChcIiovXCIpICYmIGRheU9mTW9udGggPT09IFwiKlwiICYmIG1vbnRoID09PSBcIipcIiAmJiBkYXlPZldlZWsgPT09IFwiKlwiKSB7XHJcbiAgICAgIHJldHVybiBDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5WEhvdXJzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtaW51dGUgIT09IFwiKlwiICYmIGhvdXIgIT09IFwiKlwiICYmIGRheU9mTW9udGggPT09IFwiKlwiICYmIG1vbnRoID09PSBcIipcIiAmJiBkYXlPZldlZWsgPT09IFwiKlwiKSB7XHJcbiAgICAgIHJldHVybiBDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5SG91ck9mRGF5O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkYXlPZk1vbnRoLnN0YXJ0c1dpdGgoXCIqL1wiKSAmJiBtb250aCA9PT0gXCIqXCIgJiYgZGF5T2ZXZWVrID09PSBcIipcIikge1xyXG4gICAgICByZXR1cm4gQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeVhEYXlzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkYXlPZldlZWsgIT09IFwiKlwiICYmIGRheU9mTW9udGggPT09IFwiKlwiICYmIG1vbnRoID09PSBcIipcIikge1xyXG4gICAgICByZXR1cm4gQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeVdlZWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRheU9mTW9udGggIT09IFwiKlwiICYmIG1vbnRoID09IFwiKlwiKSB7XHJcbiAgICAgIHJldHVybiBDcm9uUGVyaW9kaWNpdHlUeXBlLkV2ZXJ5TW9udGg7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmIChtb250aCAhPT0gXCIqXCIpIHtcclxuICAgICAgcmV0dXJuIENyb25QZXJpb2RpY2l0eVR5cGUuRXZlcnlYTW9udGhzO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTW9udGhEYXlzUmVxdWlyZW1lbnQoKSB7XHJcbiAgICBpZih0aGlzLnBlcmlvZGljaXR5U2VsZWN0ZWQgPT0gQ3JvblBlcmlvZGljaXR5VHlwZS5FdmVyeVhNb250aHMpIHtcclxuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbJ21vbnRoRGF5cyddLnJlbW92ZVZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcclxuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbJ21vbnRoRGF5cyddLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIH0gZWxzZSB7IFxyXG4gICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1snbW9udGhEYXlzJ10uYWRkVmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xyXG4gICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1snbW9udGhEYXlzJ10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0IHBlcmlvZGljaXR5U2VsZWN0ZWQodmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5mb3JtR3JvdXA/LnBhdGNoVmFsdWUoe3BlcmlvZGljaXR5OiB2YWx1ZX0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBlcmlvZGljaXR5U2VsZWN0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuZ2V0KCdwZXJpb2RpY2l0eScpIS52YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBtaW51dGVTZWxlY3RlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5nZXQoJ21pbnV0ZXMnKSEudmFsdWU7XHJcbiAgfVxyXG5cclxuICBzZXQgaG91clNlbGVjdGVkKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMuZm9ybUdyb3VwPy5wYXRjaFZhbHVlKHtob3VyczogdmFsdWV9KTtcclxuICB9XHJcblxyXG4gIGdldCBob3VyU2VsZWN0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuZ2V0KCdob3VycycpIS52YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCB3ZWVrRGF5U2VsZWN0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuZ2V0KCd3ZWVrRGF5cycpIS52YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBtb250aERheVNlbGVjdGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmdldCgnbW9udGhEYXknKSEudmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgbW9udGhEYXlzU2VsZWN0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuZ2V0KCdtb250aERheXMnKSEudmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgbW9udGhTZWxlY3RlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5nZXQoJ21vbnRocycpIS52YWx1ZTtcclxuICB9XHJcbn1cclxuIiwiPHctcGFuZWwgKm5nSWY9XCJoYXNDb250YWluZXI7IGVsc2UgY3JvbkNvbXBvbmVudFwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNyb25Db21wb25lbnRcIj48L25nLWNvbnRhaW5lcj5cclxuPC93LXBhbmVsPlxyXG5cclxuPG5nLXRlbXBsYXRlICNjcm9uQ29tcG9uZW50PlxyXG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgICAgIDx3LXBhbmVsLWdyaWQgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgICAgICAgPHctZWRpdC1zZWxlY3QgY2xhc3M9XCJjb2wtMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3QucGVyaW9kaWNpdHlMYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInBlcmlvZGljaXRpZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25WYWx1ZV09XCIndmFsdWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uTGFiZWxdPVwiJ25hbWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xTZXJ2aWNlLmNvbnZlcnRUb0Zvcm1Db250cm9sKGZvcm1Hcm91cC5nZXQoJ3BlcmlvZGljaXR5JykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25QZXJpb2RpY2l0eVNlbGVjdGVkKClcIj5cclxuICAgICAgICAgICAgPC93LWVkaXQtc2VsZWN0PlxyXG4gICAgICAgICAgICA8dy1lZGl0LW11bHRpc2VsZWN0ICpuZ0lmPVwiYWxsb3dNb250aHMoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3QubW9udGhzTGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJtb250aHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25WYWx1ZV09XCIndmFsdWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uTGFiZWxdPVwiJ25hbWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xTZXJ2aWNlLmNvbnZlcnRUb0Zvcm1Db250cm9sKGZvcm1Hcm91cC5nZXQoJ21vbnRocycpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uTW9udGhzU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8L3ctZWRpdC1tdWx0aXNlbGVjdD5cclxuICAgICAgICAgICAgPHctZWRpdC1tdWx0aXNlbGVjdCAqbmdJZj1cImFsbG93TW9udGhEYXlzKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwidHJhbnNsYXRpb25zT2JqZWN0LmRheXNMYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImlzTW9udGhEYXlzUmVxdWlyZWQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwibW9udGhEYXlzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdPVwiJ3ZhbHVlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbkxhYmVsXT1cIid2YWx1ZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFNlcnZpY2UuY29udmVydFRvRm9ybUNvbnRyb2woZm9ybUdyb3VwLmdldCgnbW9udGhEYXlzJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25Nb250aERheXNTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgIDwvdy1lZGl0LW11bHRpc2VsZWN0PlxyXG4gICAgICAgICAgICA8dy1lZGl0LXNlbGVjdCAqbmdJZj1cImFsbG93TW9udGhEYXkoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3QuZGF5c0xhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwibW9udGhEYXlzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdPVwiJ3ZhbHVlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbkxhYmVsXT1cIid2YWx1ZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFNlcnZpY2UuY29udmVydFRvRm9ybUNvbnRyb2woZm9ybUdyb3VwLmdldCgnbW9udGhEYXknKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbk1vbnRoRGF5c1NlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgICAgPC93LWVkaXQtc2VsZWN0PlxyXG4gICAgICAgICAgICA8dy1lZGl0LW11bHRpc2VsZWN0ICpuZ0lmPVwiYWxsb3dXZWVrRGF5cygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cInRyYW5zbGF0aW9uc09iamVjdC53ZWVrRGF5c0xhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwid2Vla0RheXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25WYWx1ZV09XCIndmFsdWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uTGFiZWxdPVwiJ25hbWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xTZXJ2aWNlLmNvbnZlcnRUb0Zvcm1Db250cm9sKGZvcm1Hcm91cC5nZXQoJ3dlZWtEYXlzJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25XZWVrRGF5c1NlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgICAgPC93LWVkaXQtbXVsdGlzZWxlY3Q+XHJcbiAgICAgICAgICAgIDx3LWVkaXQtc2VsZWN0ICpuZ0lmPVwiYWxsb3dIb3VycygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTZcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3QuaG91ckxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImhvdXJzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFNlcnZpY2UuY29udmVydFRvRm9ybUNvbnRyb2woZm9ybUdyb3VwLmdldCgnaG91cnMnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uSG91cnNTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgIDwvdy1lZGl0LXNlbGVjdD5cclxuICAgICAgICAgICAgPHctZWRpdC1zZWxlY3QgKm5nSWY9XCJhbGxvd01pbnV0ZXMoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2NvbC02JzogYWxsb3dIb3VycygpLCAnY29sLTEyJzogIWFsbG93SG91cnMoKX1cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3QubWludXRlTGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwibWludXRlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xTZXJ2aWNlLmNvbnZlcnRUb0Zvcm1Db250cm9sKGZvcm1Hcm91cC5nZXQoJ21pbnV0ZXMnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uTWludXRlU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8L3ctZWRpdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDx3LWVkaXQtaW5wdXQtbnVtYmVyICpuZ0lmPVwiYWxsb3dTZWNvbmRzKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC02XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidTZWd1bmRvcydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttaW5dPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhdPVwiNTlcIj5cclxuICAgICAgICAgICAgPC93LWVkaXQtaW5wdXQtbnVtYmVyPlxyXG4gICAgICAgICAgICA8dy12aWV3LXRleHQgY2xhc3M9XCJjb2wtMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cInRyYW5zbGF0aW9uc09iamVjdC5kZXNjcmlwdGlvbkxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJkZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGF5b3V0XT1cIid2ZXJ0aWNhbCdcIj5cclxuICAgICAgICAgICAgPC93LXZpZXctdGV4dD5cclxuICAgICAgICAgICAgPHctdmlldy10ZXh0IGNsYXNzPVwiY29sLTEyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJ0cmFuc2xhdGlvbnNPYmplY3Qub2NjdXJyZW5jZXNMYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwib2NjdXJyZW5jZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xheW91dF09XCIndmVydGljYWwnXCI+XHJcbiAgICAgICAgICAgIDwvdy12aWV3LXRleHQ+XHJcbiAgICAgICAgPC93LXBhbmVsLWdyaWQ+XHJcbiAgICA8L2Zvcm0+XHJcbjwvbmctdGVtcGxhdGU+Il19
|