ngx-st-sap-bp 17.0.13 → 17.0.15

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.
Files changed (25) hide show
  1. package/esm2022/lib/components/sap-bp-base-create-edit.mjs +114 -104
  2. package/esm2022/lib/components/sap-bp-create/sap-bp-create.component.mjs +37 -39
  3. package/esm2022/lib/components/sap-bp-create-address/sap-bp-create-address.component.mjs +67 -63
  4. package/esm2022/lib/components/sap-bp-create-contact-person/sap-bp-create-contact-person.component.mjs +16 -21
  5. package/esm2022/lib/components/sap-bp-details/sap-bp-details.component.mjs +117 -122
  6. package/esm2022/lib/components/sap-bp-details-address/sap-bp-details-address.component.mjs +8 -12
  7. package/esm2022/lib/components/sap-bp-details-contact-person/sap-bp-details-contact-person.component.mjs +8 -12
  8. package/esm2022/lib/components/sap-bp-edit/sap-bp-edit.component.mjs +60 -62
  9. package/esm2022/lib/components/sap-bp-list/sap-bp-list.component.mjs +50 -46
  10. package/esm2022/lib/components/sap-bp-list-address/sap-bp-list-address.component.mjs +45 -46
  11. package/esm2022/lib/components/sap-bp-list-contact-person/sap-bp-list-contact-person.component.mjs +44 -45
  12. package/fesm2022/ngx-st-sap-bp.mjs +446 -454
  13. package/fesm2022/ngx-st-sap-bp.mjs.map +1 -1
  14. package/lib/components/sap-bp-base-create-edit.d.ts +31 -32
  15. package/lib/components/sap-bp-create/sap-bp-create.component.d.ts +4 -12
  16. package/lib/components/sap-bp-create-address/sap-bp-create-address.component.d.ts +16 -28
  17. package/lib/components/sap-bp-create-contact-person/sap-bp-create-contact-person.component.d.ts +3 -8
  18. package/lib/components/sap-bp-details/sap-bp-details.component.d.ts +22 -31
  19. package/lib/components/sap-bp-details-address/sap-bp-details-address.component.d.ts +2 -7
  20. package/lib/components/sap-bp-details-contact-person/sap-bp-details-contact-person.component.d.ts +2 -7
  21. package/lib/components/sap-bp-edit/sap-bp-edit.component.d.ts +9 -18
  22. package/lib/components/sap-bp-list/sap-bp-list.component.d.ts +13 -19
  23. package/lib/components/sap-bp-list-address/sap-bp-list-address.component.d.ts +9 -12
  24. package/lib/components/sap-bp-list-contact-person/sap-bp-list-contact-person.component.d.ts +8 -11
  25. package/package.json +1 -1
@@ -1,22 +1,21 @@
1
- import { Validators } from '@angular/forms';
2
- import { Injectable, QueryList, ViewChildren, } from '@angular/core';
1
+ import { NonNullableFormBuilder, Validators } from '@angular/forms';
2
+ import { SapBpService } from '../services/sap-bp.service';
3
+ import { ChangeDetectorRef, Injectable, viewChildren, inject, signal, } from '@angular/core';
3
4
  import { SapBpTypeTranslateEnum } from '../models/sap-bp-type-translate.enum';
4
5
  import { SapBpTypeEnum } from '../models/sap-bp-type.enum';
6
+ import { SapBpHelperService } from '../services/sap-bp-helper.service';
5
7
  import { BpTaxTypeEnum } from '../models/bp-tax-type.enum';
6
8
  import { MatPaginator } from '@angular/material/paginator';
9
+ import { MatDialog } from '@angular/material/dialog';
7
10
  import * as i0 from "@angular/core";
8
- import * as i1 from "../services/sap-bp.service";
9
- import * as i2 from "@angular/material/dialog";
10
- import * as i3 from "../services/sap-bp-helper.service";
11
- import * as i4 from "@angular/forms";
12
11
  export class SapBpBaseCreateEdit {
13
- constructor(sapBpService, dialog, sapBpHelperService, changeDetector, fb) {
14
- this.sapBpService = sapBpService;
15
- this.dialog = dialog;
16
- this.sapBpHelperService = sapBpHelperService;
17
- this.changeDetector = changeDetector;
18
- this.fb = fb;
19
- this.paginator = new QueryList();
12
+ constructor() {
13
+ this.paginator = viewChildren(MatPaginator);
14
+ this.sapBpService = inject(SapBpService);
15
+ this.dialog = inject(MatDialog);
16
+ this.sapBpHelperService = inject(SapBpHelperService);
17
+ this.changeDetector = inject(ChangeDetectorRef);
18
+ this.fb = inject(NonNullableFormBuilder);
20
19
  this.form = this.fb.group({
21
20
  cardCode: ['', Validators.required],
22
21
  cardName: ['', Validators.required],
@@ -52,23 +51,36 @@ export class SapBpBaseCreateEdit {
52
51
  status: ['Active', Validators.required],
53
52
  taxCode: '',
54
53
  });
55
- this.initContactPersonList = [];
56
- this.contactPersonChanged = false;
57
- this.addressChanged = false;
58
- this.initBillToAddress = [];
59
- this.billToAddress = [];
60
- this.initShipToAddress = [];
61
- this.shipToAddress = [];
62
- this.showQryGroup = false;
63
- this.refreshingDataFromSap = false;
64
- this.submitted = false;
65
- this.salesPersonOnlyOnAddress = false;
54
+ this.groupCodeList = signal([]);
55
+ this.shipTypeList = signal([]);
56
+ this.industryList = signal([]);
57
+ this.technicianList = signal([]);
58
+ this.salesEmployeeList = signal([]);
59
+ this.territoryList = signal([]);
60
+ this.globalIdList = signal([]);
61
+ this.paymentTermsList = signal([]);
62
+ this.priceList = signal([]);
63
+ this.qryGroupList = signal([]);
64
+ this.currencyList = signal([]);
65
+ this.bpTypeAllowed = signal([]);
66
+ this.initContactPersonList = signal([]);
67
+ this.contactPersonChanged = signal(false);
68
+ this.contactPersons = signal([]);
69
+ this.addressChanged = signal(false);
70
+ this.initBillToAddress = signal([]);
71
+ this.billToAddress = signal([]);
72
+ this.initShipToAddress = signal([]);
73
+ this.shipToAddress = signal([]);
74
+ this.showQryGroup = signal(false);
75
+ this.refreshingDataFromSap = signal(false);
76
+ this.submitted = signal(false);
77
+ this.salesPersonOnlyOnAddress = signal(false);
66
78
  this.bpTaxType = BpTaxTypeEnum;
67
- this.taxesList = [];
68
- this.refreshingTax = false;
69
- this.phoneMaxLength = 20;
70
- this.phonePlaceholder = '';
71
- this.phoneMask = '';
79
+ this.taxesList = signal([]);
80
+ this.refreshingTax = signal(false);
81
+ this.phoneMaxLength = signal(20);
82
+ this.phonePlaceholder = signal('');
83
+ this.phoneMask = signal('');
72
84
  this.oldCardCode = '';
73
85
  this.editMode = false;
74
86
  this.convertNotUS = false;
@@ -78,12 +90,11 @@ export class SapBpBaseCreateEdit {
78
90
  this.editMode = true;
79
91
  }
80
92
  if (this.userSettings().phoneMask) {
81
- this.phonePlaceholder = '(999) 999 9999 ext. 9999999';
82
- this.phoneMask = '(000) 000 0000 ext. 0000000';
93
+ this.phonePlaceholder.set('(999) 999 9999 ext. 9999999');
94
+ this.phoneMask.set('(000) 000 0000 ext. 0000000');
83
95
  }
84
- this.salesPersonOnlyOnAddress =
85
- this.userSettings().bpEditSalesPersonOnAddress;
86
- if (!this.salesPersonOnlyOnAddress) {
96
+ this.salesPersonOnlyOnAddress.set(this.userSettings().bpEditSalesPersonOnAddress);
97
+ if (!this.salesPersonOnlyOnAddress()) {
87
98
  this.form.controls.salesEmployee.setValidators(Validators.required);
88
99
  }
89
100
  if (this.userSettings().bpTaxType === BpTaxTypeEnum.Eu) {
@@ -110,9 +121,9 @@ export class SapBpBaseCreateEdit {
110
121
  }
111
122
  this.setBpTypeAllowed();
112
123
  if (bpDetails) {
113
- this.initContactPersonList = bpDetails.contactPersonList;
114
- this.initBillToAddress = bpDetails.addressBillToList;
115
- this.initShipToAddress = bpDetails.addressShipToList;
124
+ this.initContactPersonList.set(bpDetails.contactPersonList);
125
+ this.initBillToAddress.set(bpDetails.addressBillToList);
126
+ this.initShipToAddress.set(bpDetails.addressShipToList);
116
127
  this.loadGroupCodeList();
117
128
  this.loadQryGroup(false, bpDetails.qryGroupList);
118
129
  if (this.userSettings().oracleBpEdit) {
@@ -190,77 +201,77 @@ export class SapBpBaseCreateEdit {
190
201
  this.changeDetector.markForCheck();
191
202
  }
192
203
  loadGroupCodeList(refresh = false) {
193
- this.refreshingDataFromSap = true;
204
+ this.refreshingDataFromSap.set(true);
194
205
  this.changeDetector.markForCheck();
195
206
  this.sapBpService
196
207
  .getGroupCode(this.form.controls.cardType.value, refresh)
197
208
  .subscribe(res => {
198
- this.groupCodeList = res;
209
+ this.groupCodeList.set(res);
199
210
  this.form.controls.groupCode.setValue(res ? res[0].id : null);
200
- this.refreshingDataFromSap = false;
211
+ this.refreshingDataFromSap.set(false);
201
212
  this.changeDetector.markForCheck();
202
213
  });
203
214
  }
204
215
  loadShipType(refresh = false) {
205
- this.refreshingDataFromSap = true;
216
+ this.refreshingDataFromSap.set(true);
206
217
  this.changeDetector.markForCheck();
207
218
  this.sapBpService.getShipType(refresh).subscribe(res => {
208
- this.shipTypeList = res;
209
- this.refreshingDataFromSap = false;
219
+ this.shipTypeList.set(res);
220
+ this.refreshingDataFromSap.set(false);
210
221
  this.changeDetector.markForCheck();
211
222
  });
212
223
  }
213
224
  loadIndustry(refresh = false) {
214
- this.refreshingDataFromSap = true;
225
+ this.refreshingDataFromSap.set(true);
215
226
  this.changeDetector.markForCheck();
216
227
  this.sapBpService.getIndustry(refresh).subscribe(res => {
217
- this.industryList = res;
218
- this.refreshingDataFromSap = false;
228
+ this.industryList.set(res);
229
+ this.refreshingDataFromSap.set(false);
219
230
  this.changeDetector.markForCheck();
220
231
  });
221
232
  }
222
233
  loadTechnician(refresh = false) {
223
- this.refreshingDataFromSap = true;
234
+ this.refreshingDataFromSap.set(true);
224
235
  this.changeDetector.markForCheck();
225
236
  this.sapBpService.getTechnician(refresh).subscribe(res => {
226
- this.technicianList = res;
227
- this.refreshingDataFromSap = false;
237
+ this.technicianList.set(res);
238
+ this.refreshingDataFromSap.set(false);
228
239
  this.changeDetector.markForCheck();
229
240
  });
230
241
  }
231
242
  loadSalesEmployee(refresh = false) {
232
- this.refreshingDataFromSap = true;
243
+ this.refreshingDataFromSap.set(true);
233
244
  this.changeDetector.markForCheck();
234
245
  this.sapBpService.getSalesEmployee(refresh).subscribe(res => {
235
- this.salesEmployeeList = res;
236
- this.refreshingDataFromSap = false;
246
+ this.salesEmployeeList.set(res);
247
+ this.refreshingDataFromSap.set(false);
237
248
  this.changeDetector.markForCheck();
238
249
  });
239
250
  }
240
251
  loadTerritory(refresh = false) {
241
- this.refreshingDataFromSap = true;
252
+ this.refreshingDataFromSap.set(true);
242
253
  this.changeDetector.markForCheck();
243
254
  this.sapBpService.getTerritory(refresh).subscribe(res => {
244
- this.territoryList = res;
245
- this.refreshingDataFromSap = false;
255
+ this.territoryList.set(res);
256
+ this.refreshingDataFromSap.set(false);
246
257
  this.changeDetector.markForCheck();
247
258
  });
248
259
  }
249
260
  loadGlobalId(refresh = false) {
250
- this.refreshingDataFromSap = true;
261
+ this.refreshingDataFromSap.set(true);
251
262
  this.changeDetector.markForCheck();
252
263
  this.sapBpService.getGlobalId(refresh).subscribe(res => {
253
- this.globalIdList = res;
254
- this.refreshingDataFromSap = false;
264
+ this.globalIdList.set(res);
265
+ this.refreshingDataFromSap.set(false);
255
266
  this.changeDetector.markForCheck();
256
267
  });
257
268
  }
258
269
  loadPaymentTerms(refresh = false) {
259
- this.refreshingDataFromSap = true;
270
+ this.refreshingDataFromSap.set(true);
260
271
  this.changeDetector.markForCheck();
261
272
  this.sapBpService.getPaymentTerms(refresh).subscribe(res => {
262
- this.paymentTermsList = res;
263
- this.refreshingDataFromSap = false;
273
+ this.paymentTermsList.set(res);
274
+ this.refreshingDataFromSap.set(false);
264
275
  if (!this.editMode) {
265
276
  const type = this.form.controls.cardType.value;
266
277
  if (type) {
@@ -271,13 +282,13 @@ export class SapBpBaseCreateEdit {
271
282
  });
272
283
  }
273
284
  loadPriceList(refresh = false) {
274
- this.refreshingDataFromSap = true;
285
+ this.refreshingDataFromSap.set(true);
275
286
  this.changeDetector.markForCheck();
276
287
  this.sapBpService.getPricelist(refresh).subscribe(res => {
277
- this.priceList = res;
278
- this.refreshingDataFromSap = false;
288
+ this.priceList.set(res);
289
+ this.refreshingDataFromSap.set(false);
279
290
  if (!this.editMode) {
280
- const defaultPL = this.priceList.find(pl => pl.isDefault);
291
+ const defaultPL = res.find(pl => pl.isDefault);
281
292
  if (defaultPL) {
282
293
  this.form.get('priceList').setValue(defaultPL.id);
283
294
  }
@@ -286,45 +297,46 @@ export class SapBpBaseCreateEdit {
286
297
  });
287
298
  }
288
299
  loadQryGroup(refresh = false, baseValues) {
289
- this.refreshingDataFromSap = true;
300
+ this.refreshingDataFromSap.set(true);
290
301
  this.changeDetector.markForCheck();
291
302
  this.sapBpService.getQryGroup(refresh).subscribe(res => {
292
- this.qryGroupList = res.map((group, index) => {
303
+ const updatedQryGroup = res.map((group, index) => {
293
304
  group.value = baseValues ? baseValues[index].value : 'N';
294
305
  return group;
295
306
  });
296
- this.refreshingDataFromSap = false;
307
+ this.qryGroupList.set(updatedQryGroup);
308
+ this.refreshingDataFromSap.set(false);
297
309
  this.changeDetector.markForCheck();
298
310
  });
299
311
  }
300
312
  loadCurrency(refresh = false) {
301
- this.refreshingDataFromSap = true;
313
+ this.refreshingDataFromSap.set(true);
302
314
  this.changeDetector.markForCheck();
303
315
  this.sapBpService.getCurrency(refresh).subscribe(res => {
304
- this.currencyList = res;
305
- this.refreshingDataFromSap = false;
316
+ this.currencyList.set(res);
317
+ this.refreshingDataFromSap.set(false);
306
318
  this.changeDetector.markForCheck();
307
319
  });
308
320
  }
309
321
  loadTaxes(refresh = false) {
310
- this.refreshingTax = true;
322
+ this.refreshingTax.set(true);
311
323
  this.changeDetector.markForCheck();
312
324
  this.sapBpService.getTaxes(refresh).subscribe(res => {
313
- this.taxesList = res;
314
- this.refreshingTax = false;
325
+ this.taxesList.set(res);
326
+ this.refreshingTax.set(false);
315
327
  this.changeDetector.markForCheck();
316
328
  });
317
329
  }
318
330
  setShipToAddress(event) {
319
- this.shipToAddress = event;
331
+ this.shipToAddress.set(event);
320
332
  this.changeDetector.markForCheck();
321
333
  }
322
334
  setBillToAddress(event) {
323
- this.billToAddress = event;
335
+ this.billToAddress.set(event);
324
336
  this.changeDetector.markForCheck();
325
337
  }
326
338
  setAddressChanged(event) {
327
- this.addressChanged = event;
339
+ this.addressChanged.set(event);
328
340
  this.changeDetector.markForCheck();
329
341
  }
330
342
  disableEditInformationData(bpDetails) {
@@ -422,22 +434,22 @@ export class SapBpBaseCreateEdit {
422
434
  }
423
435
  setPhonePlaceholder(countryCode) {
424
436
  // 20 sap length, -4 spaces, +10 extra char for visible
425
- this.phoneMaxLength = 20 - countryCode.length - 4 + 10;
426
- const extLength = this.phoneMaxLength - 20;
437
+ this.phoneMaxLength.set(20 - countryCode.length - 4 + 10);
438
+ const extLength = this.phoneMaxLength() - 20;
427
439
  let phonePlaceholder = '(999) 999 9999 ext. ';
428
440
  let phoneMask = '(000) 000 0000 ext. ';
429
441
  for (let i = 0; i < extLength; i++) {
430
442
  phonePlaceholder += '9';
431
443
  phoneMask += '9';
432
444
  }
433
- this.phonePlaceholder = phonePlaceholder;
434
- this.phoneMask = phoneMask;
445
+ this.phonePlaceholder.set(phonePlaceholder);
446
+ this.phoneMask.set(phoneMask);
435
447
  this.changeDetector.markForCheck();
436
448
  }
437
449
  prepareDataToSend() {
438
450
  const values = this.form.getRawValue();
439
451
  let phone1 = values.phone1;
440
- if (!this.editMode && this.phoneMask) {
452
+ if (!this.editMode && this.phoneMask()) {
441
453
  phone1 =
442
454
  values.countryCodePhone1 +
443
455
  '-' +
@@ -478,12 +490,12 @@ export class SapBpBaseCreateEdit {
478
490
  pricelistCode: values.priceList,
479
491
  deliveryInstructions: values.deliveryInstructions,
480
492
  freeText: values.freeText,
481
- contactPersonList: this.contactPersons || [],
482
- addressShipToList: this.shipToAddress || [],
483
- addressBillToList: this.billToAddress || [],
484
- qryGroupList: this.qryGroupList,
485
- addressChange: this.addressChanged,
486
- contactChange: this.contactPersonChanged,
493
+ contactPersonList: this.contactPersons() || [],
494
+ addressShipToList: this.shipToAddress() || [],
495
+ addressBillToList: this.billToAddress() || [],
496
+ qryGroupList: this.qryGroupList(),
497
+ addressChange: this.addressChanged(),
498
+ contactChange: this.contactPersonChanged(),
487
499
  cardCode: values.cardCode,
488
500
  cardName: values.cardName,
489
501
  cardType: this.convertToTranslateBpType(values.cardType),
@@ -501,15 +513,15 @@ export class SapBpBaseCreateEdit {
501
513
  });
502
514
  }
503
515
  setDefaultPaymentTerm(val) {
504
- if (this.paymentTermsList?.length > 0) {
516
+ if (this.paymentTermsList()?.length > 0) {
505
517
  if (val === SapBpTypeEnum.Supplier) {
506
- const paymentTermFound = this.paymentTermsList.find(paymentTerm => paymentTerm.isDefaultForSupplier);
518
+ const paymentTermFound = this.paymentTermsList().find(paymentTerm => paymentTerm.isDefaultForSupplier);
507
519
  if (paymentTermFound) {
508
520
  this.form.controls.paymentCode.setValue(paymentTermFound.id);
509
521
  }
510
522
  }
511
523
  else {
512
- const paymentTermFound = this.paymentTermsList.find(paymentTerm => paymentTerm.isDefaultForCustomer);
524
+ const paymentTermFound = this.paymentTermsList().find(paymentTerm => paymentTerm.isDefaultForCustomer);
513
525
  if (paymentTermFound) {
514
526
  this.form.controls.paymentCode.setValue(paymentTermFound.id);
515
527
  }
@@ -518,30 +530,31 @@ export class SapBpBaseCreateEdit {
518
530
  this.changeDetector.markForCheck();
519
531
  }
520
532
  setBpTypeAllowed() {
521
- this.bpTypeAllowed = [];
533
+ const bpTypeAllowedValues = [];
522
534
  const cardType = this.form.controls.cardType.value;
523
535
  if (this.editMode) {
524
536
  if (this.userSettings().oracleBpEdit) {
525
- this.bpTypeAllowed.push(cardType);
537
+ bpTypeAllowedValues.push(cardType);
526
538
  }
527
539
  else {
528
540
  if (cardType === SapBpTypeEnum.Lead) {
529
- this.bpTypeAllowed.push(SapBpTypeEnum.Lead);
530
- this.bpTypeAllowed.push(SapBpTypeEnum.Customer);
541
+ bpTypeAllowedValues.push(SapBpTypeEnum.Lead);
542
+ bpTypeAllowedValues.push(SapBpTypeEnum.Customer);
531
543
  }
532
544
  else if (cardType === SapBpTypeEnum.Supplier) {
533
- this.bpTypeAllowed.push(SapBpTypeEnum.Supplier);
545
+ bpTypeAllowedValues.push(SapBpTypeEnum.Supplier);
534
546
  }
535
547
  else {
536
- this.bpTypeAllowed.push(SapBpTypeEnum.Customer);
548
+ bpTypeAllowedValues.push(SapBpTypeEnum.Customer);
537
549
  }
538
550
  }
539
551
  }
540
552
  else {
541
553
  this.userSettings().bpEditTypeAllowed.forEach(bpType => {
542
- this.bpTypeAllowed.push(bpType);
554
+ bpTypeAllowedValues.push(bpType);
543
555
  });
544
556
  }
557
+ this.bpTypeAllowed.set(bpTypeAllowedValues);
545
558
  this.changeDetector.markForCheck();
546
559
  }
547
560
  convertBpType(type) {
@@ -564,13 +577,10 @@ export class SapBpBaseCreateEdit {
564
577
  return SapBpTypeTranslateEnum.Supplier;
565
578
  }
566
579
  }
567
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SapBpBaseCreateEdit, deps: [{ token: i1.SapBpService }, { token: i2.MatDialog }, { token: i3.SapBpHelperService }, { token: i0.ChangeDetectorRef }, { token: i4.NonNullableFormBuilder }], target: i0.ɵɵFactoryTarget.Injectable }); }
580
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SapBpBaseCreateEdit, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
568
581
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SapBpBaseCreateEdit }); }
569
582
  }
570
583
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SapBpBaseCreateEdit, decorators: [{
571
584
  type: Injectable
572
- }], ctorParameters: () => [{ type: i1.SapBpService }, { type: i2.MatDialog }, { type: i3.SapBpHelperService }, { type: i0.ChangeDetectorRef }, { type: i4.NonNullableFormBuilder }], propDecorators: { paginator: [{
573
- type: ViewChildren,
574
- args: [MatPaginator]
575
- }] } });
576
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FwLWJwLWJhc2UtY3JlYXRlLWVkaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3Qtc2FwLWJwL3NyYy9saWIvY29tcG9uZW50cy9zYXAtYnAtYmFzZS1jcmVhdGUtZWRpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTBCLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBVXBFLE9BQU8sRUFFTCxVQUFVLEVBRVYsU0FBUyxFQUNULFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQU92QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7O0FBSTNELE1BQU0sT0FBZ0IsbUJBQW1CO0lBc0Z2QyxZQUNZLFlBQTBCLEVBQzFCLE1BQWlCLEVBQ2pCLGtCQUFzQyxFQUN0QyxjQUFpQyxFQUNqQyxFQUEwQjtRQUoxQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBQ2pDLE9BQUUsR0FBRixFQUFFLENBQXdCO1FBMUZWLGNBQVMsR0FBRyxJQUFJLFNBQVMsRUFBZ0IsQ0FBQztRQUV0RSxTQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDbkIsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDbkMsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDbkMsUUFBUSxFQUFF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RTtnQkFDckQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRU8sYUFBYSxDQUFDLElBQTRCO1FBQ2hELFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDYixLQUFLLHNCQUFzQixDQUFDLFFBQVE7Z0JBQ2xDLE9BQU8sYUFBYSxDQUFDLFFBQVEsQ0FBQztZQUNoQyxLQUFLLHNCQUFzQixDQUFDLElBQUk7Z0JBQzlCLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQztZQUM1QixLQUFLLHNCQUFzQixDQUFDLFFBQVE7Z0JBQ2xDLE9BQU8sYUFBYSxDQUFDLFFBQVEsQ0FBQztRQUNsQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLHdCQUF3QixDQUM5QixJQUFtQjtRQUVuQixRQUFRLElBQUksRUFBRSxDQUFDO1lBQ2IsS0FBSyxhQUFhLENBQUMsUUFBUTtnQkFDekIsT0FBTyxzQkFBc0IsQ0FBQyxRQUFRLENBQUM7WUFDekMsS0FBSyxhQUFhLENBQUMsSUFBSTtnQkFDckIsT0FBTyxzQkFBc0IsQ0FBQyxJQUFJLENBQUM7WUFDckMsS0FBSyxhQUFhLENBQUMsUUFBUTtnQkFDekIsT0FBTyxzQkFBc0IsQ0FBQyxRQUFRLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUM7K0dBbHJCbUIsbUJBQW1CO21IQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBRHhDLFVBQVU7K01BRW1CLFNBQVM7c0JBQXBDLFlBQVk7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5vbk51bGxhYmxlRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFNhcEJwU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3NhcC1icC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2FwQnBHcm91cENvZGVNb2RlbCB9IGZyb20gJy4uL21vZGVscy9zYXAtYnAtZ3JvdXAtY29kZS5tb2RlbCc7XHJcbmltcG9ydCB7IFNhcEJwU2hpcFR5cGVNb2RlbCB9IGZyb20gJy4uL21vZGVscy9zYXAtYnAtc2hpcC10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgU2FwQnBJbmR1c3RyeU1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3NhcC1icC1pbmR1c3RyeS5tb2RlbCc7XHJcbmltcG9ydCB7IFNhcEJwVGVjaG5pY2lhbk1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3NhcC1icC10ZWNobmljaWFuLm1vZGVsJztcclxuaW1wb3J0IHsgU2FwQnBTYWxlc0VtcGxveWVlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvc2FwLWJwLXNhbGVzLWVtcGxveWVlLm1vZGVsJztcclxuaW1wb3J0IHsgU2FwQnBUZXJyaXRvcnlNb2RlbCB9IGZyb20gJy4uL21vZGVscy9zYXAtYnAtdGVycml0b3J5Lm1vZGVsJztcclxuaW1wb3J0IHsgU2FwQnBHbG9iYWxJZE1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3NhcC1icC1nbG9iYWwtaWQubW9kZWwnO1xyXG5pbXBvcnQgeyBTYXBCcENvbnRhY3RQZXJzb25Nb2RlbCB9IGZyb20gJy4uL21vZGVscy9zYXAtYnAtY29udGFjdC1wZXJzb24ubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIEluamVjdGFibGUsXHJcbiAgSW5wdXRTaWduYWwsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFZpZXdDaGlsZHJlbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU2FwQnBBZGRyZXNzTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvc2FwLWJwLWFkZHJlc3MubW9kZWwnO1xyXG5pbXBvcnQgeyBTYXBCcFBheW1lbnRUZXJtc01vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3NhcC1icC1wYXltZW50LXRlcm1zLm1vZGVsJztcclxuaW1wb3J0IHsgU2FwQnBQcmljZWxpc3RNb2RlbCB9IGZyb20gJy4uL21vZGVscy9zYXAtYnAtcHJpY2VsaXN0Lm1vZGVsJztcclxuaW1wb3J0IHsgU2FwQnBRcnlHcm91cE1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3NhcC1icC1xcnktZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQgeyBTYXBCcENyZWF0ZU1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3NhcC1icC1jcmVhdGUubW9kZWwnO1xyXG5pbXBvcnQgeyBTYXBCcE1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3NhcC1icC5tb2RlbCc7XHJcbmltcG9ydCB7IFNhcEJwVHlwZVRyYW5zbGF0ZUVudW0gfSBmcm9tICcuLi9tb2RlbHMvc2FwLWJwLXR5cGUtdHJhbnNsYXRlLmVudW0nO1xyXG5pbXBvcnQgeyBTYXBCcFR5cGVFbnVtIH0gZnJvbSAnLi4vbW9kZWxzL3NhcC1icC10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBTYXBCcEhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zYXAtYnAtaGVscGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTYXBCcFRheCB9IGZyb20gJy4uL21vZGVscy9zYXAtYnAtdGF4Lm1vZGVsJztcclxuaW1wb3J0IHsgQnBUYXhUeXBlRW51bSB9IGZyb20gJy4uL21vZGVscy9icC10YXgtdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgU2FwQnBFZGl0QXV0aEZsYWdzRW51bSB9IGZyb20gJy4uL21vZGVscy9zYXAtYnAtZWRpdC1hdXRoLWZsYWdzLmVudW0nO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2FwQnBCYXNlQ3JlYXRlRWRpdCB7XHJcbiAgQFZpZXdDaGlsZHJlbihNYXRQYWdpbmF0b3IpIHBhZ2luYXRvciA9IG5ldyBRdWVyeUxpc3Q8TWF0UGFnaW5hdG9yPigpO1xyXG5cclxuICBmb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICBjYXJkQ29kZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgIGNhcmROYW1lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgY2FyZFR5cGU6IFtTYXBCcFR5cGVFbnVtLkN1c3RvbWVyLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgIGNhcmRGb3JlaWduTmFtZTogJycsXHJcbiAgICBncm91cENvZGU6IFs8bnVtYmVyIHwgbnVsbD5udWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgIGN1cnJlbmN5OiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgY291bnRyeUNvZGVQaG9uZTE6ICcnLFxyXG4gICAgcGhvbmUxOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgc2FsZXNFbXBsb3llZTogPG51bWJlciB8IG51bGw+bnVsbCxcclxuICAgIGdsb2JhbEFjY291bnQ6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICB2YXRTdGF0dXM6ICcnLFxyXG4gICAgbGljVHJhZE51bTogJycsXHJcbiAgICBwaG9uZTI6ICcnLFxyXG4gICAgY2VsbHVsYXI6ICcnLFxyXG4gICAgZmF4OiAnJyxcclxuICAgIGVtYWlsOiAnJyxcclxuICAgIHdlYlNpdGU6ICcnLFxyXG4gICAgc2hpcFR5cGU6IDxudW1iZXIgfCBudWxsPm51bGwsXHJcbiAgICBpbmR1c3RyeUNvZGU6IDxudW1iZXIgfCBudWxsPm51bGwsXHJcbiAgICBhZGRJZDogJycsXHJcbiAgICB2YXRJZFVuaWZpZWQ6ICcnLFxyXG4gICAgcmVnaXN0ZXJObzogJycsXHJcbiAgICBub3RlczogJycsXHJcbiAgICB0ZWNobmljaWFuOiA8bnVtYmVyIHwgbnVsbD5udWxsLFxyXG4gICAgdGVycml0b3J5OiA8bnVtYmVyIHwgbnVsbD5udWxsLFxyXG4gICAgZ2xvYmFsSWQ6ICcnLFxyXG4gICAgcGF5bWVudENvZGU6IDxudW1iZXIgfCBudWxsPm51bGwsXHJcbiAgICBwcmljZUxpc3Q6IDxudW1iZXIgfCBudWxsPm51bGwsXHJcbiAgICBkZWxpdmVyeUluc3RydWN0aW9uczogJycsXHJcbiAgICBmcmVlVGV4dDogJycsXHJcbiAgICBpbmFjdGl2ZUNvbW1lbnQ6ICcnLFxyXG4gICAgc3RhdHVzOiBbJ0FjdGl2ZScsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgdGF4Q29kZTogJycsXHJcbiAgfSk7XHJcblxyXG4gIHVzZXJTZXR0aW5nczogSW5wdXRTaWduYWw8U2FwQnBVc2VyU2V0dGluZ3M+O1xyXG5cclxuICBncm91cENvZGVMaXN0OiBTYXBCcEdyb3VwQ29kZU1vZGVsW107XHJcbiAgc2hpcFR5cGVMaXN0OiBTYXBCcFNoaXBUeXBlTW9kZWxbXTtcclxuICBpbmR1c3RyeUxpc3Q6IFNhcEJwSW5kdXN0cnlNb2RlbFtdO1xyXG4gIHRlY2huaWNpYW5MaXN0OiBTYXBCcFRlY2huaWNpYW5Nb2RlbFtdO1xyXG4gIHNhbGVzRW1wbG95ZWVMaXN0OiBTYXBCcFNhbGVzRW1wbG95ZWVNb2RlbFtdO1xyXG4gIHRlcnJpdG9yeUxpc3Q6IFNhcEJwVGVycml0b3J5TW9kZWxbXTtcclxuICBnbG9iYWxJZExpc3Q6IFNhcEJwR2xvYmFsSWRNb2RlbFtdO1xyXG4gIHBheW1lbnRUZXJtc0xpc3Q6IFNhcEJwUGF5bWVudFRlcm1zTW9kZWxbXTtcclxuICBwcmljZUxpc3Q6IFNhcEJwUHJpY2VsaXN0TW9kZWxbXTtcclxuICBxcnlHcm91cExpc3Q6IFNhcEJwUXJ5R3JvdXBNb2RlbFtdO1xyXG4gIGN1cnJlbmN5TGlzdDogc3RyaW5nW107XHJcbiAgYnBUeXBlQWxsb3dlZDogU2FwQnBUeXBlRW51bVtdO1xyXG5cclxuICBpbml0Q29udGFjdFBlcnNvbkxpc3Q6IFNhcEJwQ29udGFjdFBlcnNvbk1vZGVsW10gPSBbXTtcclxuICBjb250YWN0UGVyc29uQ2hhbmdlZCA9IGZhbHNlO1xyXG4gIGNvbnRhY3RQZXJzb25zOiBTYXBCcENvbnRhY3RQZXJzb25Nb2RlbFtdO1xyXG5cclxuICBhZGRyZXNzQ2hhbmdlZCA9IGZhbHNlO1xyXG5cclxuICBpbml0QmlsbFRvQWRkcmVzczogU2FwQnBBZGRyZXNzTW9kZWxbXSA9IFtdO1xyXG4gIGJpbGxUb0FkZHJlc3M6IFNhcEJwQWRkcmVzc01vZGVsW10gPSBbXTtcclxuXHJcbiAgaW5pdFNoaXBUb0FkZHJlc3M6IFNhcEJwQWRkcmVzc01vZGVsW10gPSBbXTtcclxuICBzaGlwVG9BZGRyZXNzOiBTYXBCcEFkZHJlc3NNb2RlbFtdID0gW107XHJcblxyXG4gIHNob3dRcnlHcm91cCA9IGZhbHNlO1xyXG5cclxuICByZWZyZXNoaW5nRGF0YUZyb21TYXAgPSBmYWxzZTtcclxuXHJcbiAgc3VibWl0dGVkID0gZmFsc2U7XHJcblxyXG4gIHNhbGVzUGVyc29uT25seU9uQWRkcmVzcyA9IGZhbHNlO1xyXG4gIGJwVGF4VHlwZSA9IEJwVGF4VHlwZUVudW07XHJcblxyXG4gIHRheGVzTGlzdDogU2FwQnBUYXhbXSA9IFtdO1xyXG4gIHJlZnJlc2hpbmdUYXggPSBmYWxzZTtcclxuXHJcbiAgcGhvbmVNYXhMZW5ndGggPSAyMDtcclxuICBwaG9uZVBsYWNlaG9sZGVyID0gJyc7XHJcbiAgcGhvbmVNYXNrID0gJyc7XHJcblxyXG4gIHByb3RlY3RlZCBvbGRDYXJkQ29kZSA9ICcnO1xyXG4gIHByb3RlY3RlZCBlZGl0TW9kZSA9IGZhbHNlO1xyXG4gIHByb3RlY3RlZCBjb252ZXJ0Tm90VVMgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgc2FwQnBTZXJ2aWNlOiBTYXBCcFNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcm90ZWN0ZWQgc2FwQnBIZWxwZXJTZXJ2aWNlOiBTYXBCcEhlbHBlclNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJvdGVjdGVkIGZiOiBOb25OdWxsYWJsZUZvcm1CdWlsZGVyXHJcbiAgKSB7fVxyXG5cclxuICBpbml0Rm9ybShicERldGFpbHM/OiBTYXBCcE1vZGVsKSB7XHJcbiAgICBpZiAoYnBEZXRhaWxzKSB7XHJcbiAgICAgIHRoaXMuZWRpdE1vZGUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnVzZXJTZXR0aW5ncygpLnBob25lTWFzaykge1xyXG4gICAgICB0aGlzLnBob25lUGxhY2Vob2xkZXIgPSAnKDk5OSkgOTk5IDk5OTkgZXh0LiA5OTk5OTk5JztcclxuICAgICAgdGhpcy5waG9uZU1hc2sgPSAnKDAwMCkgMDAwIDAwMDAgZXh0LiAwMDAwMDAwJztcclxuICAgIH1cclxuICAgIHRoaXMuc2FsZXNQZXJzb25Pbmx5T25BZGRyZXNzID1cclxuICAgICAgdGhpcy51c2VyU2V0dGluZ3MoKS5icEVkaXRTYWxlc1BlcnNvbk9uQWRkcmVzcztcclxuXHJcbiAgICBpZiAoIXRoaXMuc2FsZXNQZXJzb25Pbmx5T25BZGRyZXNzKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5jb250cm9scy5zYWxlc0VtcGxveWVlLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudXNlclNldHRpbmdzKCkuYnBUYXhUeXBlID09PSBCcFRheFR5cGVFbnVtLkV1KSB7XHJcbiAgICAgIHRoaXMubG9hZFRheGVzKGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIGJwRGV0YWlscz8uY2FyZFR5cGUgPT09IFNhcEJwVHlwZVRyYW5zbGF0ZUVudW0uTGVhZCAmJlxyXG4gICAgICAhdGhpcy51c2VyU2V0dGluZ3MoKS5vcmFjbGVCcEVkaXRcclxuICAgICkge1xyXG4gICAgICB0aGlzLmNvbnZlcnROb3RVUyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmVkaXRNb2RlKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5jb250cm9scy5jb3VudHJ5Q29kZVBob25lMS5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICB0aGlzLmZvcm0uY29udHJvbHMucGhvbmUxLmRpc2FibGUoKTtcclxuXHJcbiAgICAgIHRoaXMuZm9ybS5jb250cm9scy5jb3VudHJ5Q29kZVBob25lMS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLnBob25lMS5lbmFibGUoKTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy51c2VyU2V0dGluZ3MoKS5waG9uZU1hc2spIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRQaG9uZVBsYWNlaG9sZGVyKHJlcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5waG9uZTEuZGlzYWJsZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRCcFR5cGVBbGxvd2VkKCk7XHJcblxyXG4gICAgaWYgKGJwRGV0YWlscykge1xyXG4gICAgICB0aGlzLmluaXRDb250YWN0UGVyc29uTGlzdCA9IGJwRGV0YWlscy5jb250YWN0UGVyc29uTGlzdDtcclxuICAgICAgdGhpcy5pbml0QmlsbFRvQWRkcmVzcyA9IGJwRGV0YWlscy5hZGRyZXNzQmlsbFRvTGlzdDtcclxuICAgICAgdGhpcy5pbml0U2hpcFRvQWRkcmVzcyA9IGJwRGV0YWlscy5hZGRyZXNzU2hpcFRvTGlzdDtcclxuXHJcbiAgICAgIHRoaXMubG9hZEdyb3VwQ29kZUxpc3QoKTtcclxuICAgICAgdGhpcy5sb2FkUXJ5R3JvdXAoZmFsc2UsIGJwRGV0YWlscy5xcnlHcm91cExpc3QpO1xyXG5cclxuICAgICAgaWYgKHRoaXMudXNlclNldHRpbmdzKCkub3JhY2xlQnBFZGl0KSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLmdldCgnY2FyZFR5cGUnKSEuZGlzYWJsZSgpO1xyXG4gICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5jYXJkQ29kZS5kaXNhYmxlKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmNhcmRDb2RlLmRpc2FibGUoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29udmVydE5vdFVTKSB7XHJcbiAgICAgICAgICB0aGlzLm9sZENhcmRDb2RlID0gYnBEZXRhaWxzLmNhcmRDb2RlO1xyXG5cclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgYnBEZXRhaWxzPy5jYXJkVHlwZSA9PT0gU2FwQnBUeXBlVHJhbnNsYXRlRW51bS5MZWFkICYmXHJcbiAgICAgICAgICAgICF0aGlzLnVzZXJTZXR0aW5ncygpLmJwRWRpdEFsbG93Q29udmVydExlYWRcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdjYXJkVHlwZScpIS5kaXNhYmxlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NhcmRUeXBlJykhLmRpc2FibGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsaWRhdG9yc0luRWRpdChicERldGFpbHMpO1xyXG4gICAgICB0aGlzLnNldEVkaXRGb3JtKGJwRGV0YWlscyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy51c2VyU2V0dGluZ3MoKS5vcmFjbGVCcEVkaXQpIHtcclxuICAgICAgICB0aGlzLmZvcm0uY29udHJvbHMuY2FyZFR5cGUuc2V0VmFsdWUoU2FwQnBUeXBlRW51bS5MZWFkKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmN1cnJlbmN5LnNldFZhbHVlKHRoaXMudXNlclNldHRpbmdzKCkuY3VycmVuY3kpO1xyXG5cclxuICAgICAgaWYgKHRoaXMudXNlclNldHRpbmdzKCkub3JhY2xlQnBFZGl0KSB7XHJcbiAgICAgICAgdGhpcy5zZXROZXdCcElkKFNhcEJwVHlwZUVudW0uTGVhZCk7XHJcbiAgICAgICAgdGhpcy5sb2FkR3JvdXBDb2RlTGlzdCgpO1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFBheW1lbnRUZXJtKFNhcEJwVHlwZUVudW0uTGVhZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy51c2VyU2V0dGluZ3MoKS5icFRheFR5cGUgIT09IEJwVGF4VHlwZUVudW0uTm9UYXgpIHtcclxuICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLnZhdFN0YXR1cy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZm9ybS5jb250cm9scy5jYXJkVHlwZS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWw6IFNhcEJwVHlwZUVudW0pID0+IHtcclxuICAgICAgaWYgKHRoaXMuY29udmVydE5vdFVTKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkR3JvdXBDb2RlTGlzdCgpO1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFBheW1lbnRUZXJtKHZhbCk7XHJcblxyXG4gICAgICAgIGlmICh2YWwgPT09IFNhcEJwVHlwZUVudW0uQ3VzdG9tZXIpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5jYXJkQ29kZS5lbmFibGUoKTtcclxuICAgICAgICAgIHRoaXMuc2V0TmV3QnBJZChTYXBCcFR5cGVFbnVtLkN1c3RvbWVyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmNhcmRDb2RlLnNldFZhbHVlKHRoaXMub2xkQ2FyZENvZGUpO1xyXG4gICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmNhcmRDb2RlLmRpc2FibGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHZhbCB8fCB2YWwgPj0gMCkge1xyXG4gICAgICAgICAgdGhpcy5zZXROZXdCcElkKHZhbCk7XHJcbiAgICAgICAgICB0aGlzLmxvYWRHcm91cENvZGVMaXN0KCk7XHJcbiAgICAgICAgICB0aGlzLnNldERlZmF1bHRQYXltZW50VGVybSh2YWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzLmdsb2JhbEFjY291bnQudmFsdWVDaGFuZ2VzLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICBpZiAocmVzID09PSAnWWVzJykge1xyXG4gICAgICAgIHRoaXMuZm9ybS5nZXQoJ2dsb2JhbElkJykhLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybS5nZXQoJ2dsb2JhbElkJykhLnNldFZhbGlkYXRvcnMobnVsbCk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5pbml0TG9hZGVycygpO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2hDYXJkQ29kZSgpIHtcclxuICAgIHRoaXMuc2V0TmV3QnBJZCh0aGlzLmZvcm0uY29udHJvbHMuY2FyZFR5cGUudmFsdWUpO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIGxvYWRHcm91cENvZGVMaXN0KHJlZnJlc2ggPSBmYWxzZSkge1xyXG4gICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAgPSB0cnVlO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuXHJcbiAgICB0aGlzLnNhcEJwU2VydmljZVxyXG4gICAgICAuZ2V0R3JvdXBDb2RlKHRoaXMuZm9ybS5jb250cm9scy5jYXJkVHlwZS52YWx1ZSwgcmVmcmVzaClcclxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBDb2RlTGlzdCA9IHJlcztcclxuICAgICAgICB0aGlzLmZvcm0uY29udHJvbHMuZ3JvdXBDb2RlLnNldFZhbHVlKHJlcyA/IHJlc1swXS5pZCA6IG51bGwpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBsb2FkU2hpcFR5cGUocmVmcmVzaCA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnJlZnJlc2hpbmdEYXRhRnJvbVNhcCA9IHRydWU7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG5cclxuICAgIHRoaXMuc2FwQnBTZXJ2aWNlLmdldFNoaXBUeXBlKHJlZnJlc2gpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLnNoaXBUeXBlTGlzdCA9IHJlcztcclxuICAgICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZEluZHVzdHJ5KHJlZnJlc2ggPSBmYWxzZSkge1xyXG4gICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAgPSB0cnVlO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuXHJcbiAgICB0aGlzLnNhcEJwU2VydmljZS5nZXRJbmR1c3RyeShyZWZyZXNoKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy5pbmR1c3RyeUxpc3QgPSByZXM7XHJcbiAgICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGxvYWRUZWNobmljaWFuKHJlZnJlc2ggPSBmYWxzZSkge1xyXG4gICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAgPSB0cnVlO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuXHJcbiAgICB0aGlzLnNhcEJwU2VydmljZS5nZXRUZWNobmljaWFuKHJlZnJlc2gpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLnRlY2huaWNpYW5MaXN0ID0gcmVzO1xyXG4gICAgICB0aGlzLnJlZnJlc2hpbmdEYXRhRnJvbVNhcCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBsb2FkU2FsZXNFbXBsb3llZShyZWZyZXNoID0gZmFsc2UpIHtcclxuICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwID0gdHJ1ZTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcblxyXG4gICAgdGhpcy5zYXBCcFNlcnZpY2UuZ2V0U2FsZXNFbXBsb3llZShyZWZyZXNoKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy5zYWxlc0VtcGxveWVlTGlzdCA9IHJlcztcclxuICAgICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZFRlcnJpdG9yeShyZWZyZXNoID0gZmFsc2UpIHtcclxuICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwID0gdHJ1ZTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcblxyXG4gICAgdGhpcy5zYXBCcFNlcnZpY2UuZ2V0VGVycml0b3J5KHJlZnJlc2gpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLnRlcnJpdG9yeUxpc3QgPSByZXM7XHJcbiAgICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGxvYWRHbG9iYWxJZChyZWZyZXNoID0gZmFsc2UpIHtcclxuICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwID0gdHJ1ZTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcblxyXG4gICAgdGhpcy5zYXBCcFNlcnZpY2UuZ2V0R2xvYmFsSWQocmVmcmVzaCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMuZ2xvYmFsSWRMaXN0ID0gcmVzO1xyXG4gICAgICB0aGlzLnJlZnJlc2hpbmdEYXRhRnJvbVNhcCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBsb2FkUGF5bWVudFRlcm1zKHJlZnJlc2ggPSBmYWxzZSkge1xyXG4gICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAgPSB0cnVlO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuXHJcbiAgICB0aGlzLnNhcEJwU2VydmljZS5nZXRQYXltZW50VGVybXMocmVmcmVzaCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMucGF5bWVudFRlcm1zTGlzdCA9IHJlcztcclxuICAgICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAgPSBmYWxzZTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5lZGl0TW9kZSkge1xyXG4gICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLmZvcm0uY29udHJvbHMuY2FyZFR5cGUudmFsdWU7XHJcbiAgICAgICAgaWYgKHR5cGUpIHtcclxuICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdFBheW1lbnRUZXJtKHR5cGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZFByaWNlTGlzdChyZWZyZXNoID0gZmFsc2UpIHtcclxuICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwID0gdHJ1ZTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcblxyXG4gICAgdGhpcy5zYXBCcFNlcnZpY2UuZ2V0UHJpY2VsaXN0KHJlZnJlc2gpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLnByaWNlTGlzdCA9IHJlcztcclxuICAgICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAgPSBmYWxzZTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5lZGl0TW9kZSkge1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRQTCA9IHRoaXMucHJpY2VMaXN0LmZpbmQocGwgPT4gcGwuaXNEZWZhdWx0KTtcclxuICAgICAgICBpZiAoZGVmYXVsdFBMKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdwcmljZUxpc3QnKSEuc2V0VmFsdWUoZGVmYXVsdFBMLmlkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGxvYWRRcnlHcm91cChyZWZyZXNoID0gZmFsc2UsIGJhc2VWYWx1ZXM/OiBTYXBCcFFyeUdyb3VwTW9kZWxbXSkge1xyXG4gICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAgPSB0cnVlO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuXHJcbiAgICB0aGlzLnNhcEJwU2VydmljZS5nZXRRcnlHcm91cChyZWZyZXNoKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy5xcnlHcm91cExpc3QgPSByZXMubWFwKChncm91cCwgaW5kZXgpID0+IHtcclxuICAgICAgICBncm91cC52YWx1ZSA9IGJhc2VWYWx1ZXMgPyBiYXNlVmFsdWVzW2luZGV4XS52YWx1ZSA6ICdOJztcclxuICAgICAgICByZXR1cm4gZ3JvdXA7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZEN1cnJlbmN5KHJlZnJlc2ggPSBmYWxzZSkge1xyXG4gICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAgPSB0cnVlO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuXHJcbiAgICB0aGlzLnNhcEJwU2VydmljZS5nZXRDdXJyZW5jeShyZWZyZXNoKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy5jdXJyZW5jeUxpc3QgPSByZXM7XHJcbiAgICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGxvYWRUYXhlcyhyZWZyZXNoID0gZmFsc2UpIHtcclxuICAgIHRoaXMucmVmcmVzaGluZ1RheCA9IHRydWU7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG5cclxuICAgIHRoaXMuc2FwQnBTZXJ2aWNlLmdldFRheGVzKHJlZnJlc2gpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLnRheGVzTGlzdCA9IHJlcztcclxuICAgICAgdGhpcy5yZWZyZXNoaW5nVGF4ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFNoaXBUb0FkZHJlc3MoZXZlbnQ6IFNhcEJwQWRkcmVzc01vZGVsW10pIHtcclxuICAgIHRoaXMuc2hpcFRvQWRkcmVzcyA9IGV2ZW50O1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHNldEJpbGxUb0FkZHJlc3MoZXZlbnQ6IFNhcEJwQWRkcmVzc01vZGVsW10pIHtcclxuICAgIHRoaXMuYmlsbFRvQWRkcmVzcyA9IGV2ZW50O1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHNldEFkZHJlc3NDaGFuZ2VkKGV2ZW50OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmFkZHJlc3NDaGFuZ2VkID0gZXZlbnQ7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgZGlzYWJsZUVkaXRJbmZvcm1hdGlvbkRhdGEoYnBEZXRhaWxzOiBTYXBCcE1vZGVsKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zYXBCcEhlbHBlclNlcnZpY2UuZGlzYWJsZUVkaXRJbmZvcm1hdGlvbkRhdGEoXHJcbiAgICAgIHRoaXMudXNlclNldHRpbmdzKCkuc2FwQnBFZGl0QXV0aCxcclxuICAgICAgdGhpcy5mb3JtLFxyXG4gICAgICBicERldGFpbHNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBkaXNhYmxlRWRpdENvbnRhY3RQZXJzb24oYnBEZXRhaWxzOiBTYXBCcE1vZGVsKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zYXBCcEhlbHBlclNlcnZpY2UuZGlzYWJsZUVkaXRDb250YWN0UGVyc29uKFxyXG4gICAgICB0aGlzLnVzZXJTZXR0aW5ncygpLnNhcEJwRWRpdEF1dGgsXHJcbiAgICAgIHRoaXMuZm9ybSxcclxuICAgICAgYnBEZXRhaWxzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZGlzYWJsZUVkaXRCaWxsVG9BZGRyZXNzKGJwRGV0YWlsczogU2FwQnBNb2RlbCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2FwQnBIZWxwZXJTZXJ2aWNlLmRpc2FibGVFZGl0QmlsbFRvQWRkcmVzcyhcclxuICAgICAgdGhpcy51c2VyU2V0dGluZ3MoKS5zYXBCcEVkaXRBdXRoLFxyXG4gICAgICB0aGlzLmZvcm0sXHJcbiAgICAgIGJwRGV0YWlsc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGRpc2FibGVFZGl0U2hpcFRvQWRkcmVzcyhicERldGFpbHM6IFNhcEJwTW9kZWwpIHtcclxuICAgIHJldHVybiB0aGlzLnNhcEJwSGVscGVyU2VydmljZS5kaXNhYmxlRWRpdFNoaXBUb0FkZHJlc3MoXHJcbiAgICAgIHRoaXMudXNlclNldHRpbmdzKCkuc2FwQnBFZGl0QXV0aCxcclxuICAgICAgdGhpcy5mb3JtLFxyXG4gICAgICBicERldGFpbHNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBkaXNhYmxlQWRkU2hpcFRvQWRkcmVzcyhicERldGFpbHM6IFNhcEJwTW9kZWwpIHtcclxuICAgIHJldHVybiB0aGlzLnNhcEJwSGVscGVyU2VydmljZS5kaXNhYmxlQWRkU2hpcFRvQWRkcmVzcyhcclxuICAgICAgdGhpcy51c2VyU2V0dGluZ3MoKS5zYXBCcEVkaXRBdXRoLFxyXG4gICAgICB0aGlzLmZvcm0sXHJcbiAgICAgIGJwRGV0YWlsc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGRpc2FibGVBZGRDb250YWN0UGVyc29uKGJwRGV0YWlsczogU2FwQnBNb2RlbCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2FwQnBIZWxwZXJTZXJ2aWNlLmRpc2FibGVBZGRDb250YWN0UGVyc29uKFxyXG4gICAgICB0aGlzLnVzZXJTZXR0aW5ncygpLnNhcEJwRWRpdEF1dGgsXHJcbiAgICAgIHRoaXMuZm9ybSxcclxuICAgICAgYnBEZXRhaWxzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZGlzYWJsZUFkZEJpbGxUb0FkZHJlc3MoYnBEZXRhaWxzOiBTYXBCcE1vZGVsKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zYXBCcEhlbHBlclNlcnZpY2UuZGlzYWJsZUFkZEJpbGxUb0FkZHJlc3MoXHJcbiAgICAgIHRoaXMudXNlclNldHRpbmdzKCkuc2FwQnBFZGl0QXV0aCxcclxuICAgICAgdGhpcy5mb3JtLFxyXG4gICAgICBicERldGFpbHNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgaW5pdExvYWRlcnMoKSB7XHJcbiAgICAvLyB0aGlzLmxvYWRHcm91cENvZGVMaXN0KCk7XHJcbiAgICB0aGlzLmxvYWRTaGlwVHlwZSgpO1xyXG4gICAgdGhpcy5sb2FkSW5kdXN0cnkoKTtcclxuICAgIHRoaXMubG9hZFRlY2huaWNpYW4oKTtcclxuICAgIHRoaXMubG9hZFNhbGVzRW1wbG95ZWUoKTtcclxuICAgIHRoaXMubG9hZFRlcnJpdG9yeSgpO1xyXG4gICAgdGhpcy5sb2FkUGF5bWVudFRlcm1zKCk7XHJcbiAgICB0aGlzLmxvYWRQcmljZUxpc3QoKTtcclxuICAgIHRoaXMubG9hZEN1cnJlbmN5KCk7XHJcbiAgICB0aGlzLmxvYWRHbG9iYWxJZCgpO1xyXG5cclxuICAgIGlmICghdGhpcy5lZGl0TW9kZSkge1xyXG4gICAgICB0aGlzLmxvYWRRcnlHcm91cCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRFZGl0Rm9ybShicERldGFpbHM6IFNhcEJwTW9kZWwpIHtcclxuICAgIHRoaXMuZm9ybS5zZXRWYWx1ZSh7XHJcbiAgICAgIGNvdW50cnlDb2RlUGhvbmUxOiAnJyxcclxuICAgICAgY2FyZENvZGU6IGJwRGV0YWlscy5jYXJkQ29kZSxcclxuICAgICAgY2FyZE5hbWU6IGJwRGV0YWlscy5jYXJkTmFtZSxcclxuICAgICAgY2FyZFR5cGU6IGJwRGV0YWlscy5jYXJkVHlwZVxyXG4gICAgICAgID8gdGhpcy5jb252ZXJ0QnBUeXBlKGJwRGV0YWlscy5jYXJkVHlwZSlcclxuICAgICAgICA6IHRoaXMudXNlclNldHRpbmdzKCkub3JhY2xlQnBFZGl0XHJcbiAgICAgICAgICA/IFNhcEJwVHlwZUVudW0uTGVhZFxyXG4gICAgICAgICAgOiBTYXBCcFR5cGVFbnVtLkN1c3RvbWVyLFxyXG4gICAgICBjYXJkRm9yZWlnbk5hbWU6IGJwRGV0YWlscy5jYXJkRm9yaWduTmFtZSxcclxuICAgICAgZ3JvdXBDb2RlOiBicERldGFpbHMuZ3JvdXBDb2RlIHx8IG51bGwsXHJcbiAgICAgIGN1cnJlbmN5OiBicERldGFpbHMuY3VycmVuY3lcclxuICAgICAgICA/IGJwRGV0YWlscy5jdXJyZW5jeVxyXG4gICAgICAgIDogdGhpcy51c2VyU2V0dGluZ3MoKS5jdXJyZW5jeSxcclxuICAgICAgbGljVHJhZE51bTogYnBEZXRhaWxzLmxpY1RyYWROdW0sXHJcbiAgICAgIHBob25lMTogYnBEZXRhaWxzLnBob25lMSxcclxuICAgICAgcGhvbmUyOiBicERldGFpbHMucGhvbmUyLFxyXG4gICAgICBjZWxsdWxhcjogYnBEZXRhaWxzLmNlbGx1bGFyLFxyXG4gICAgICBmYXg6IGJwRGV0YWlscy5mYXgsXHJcbiAgICAgIGVtYWlsOiBicERldGFpbHMuZW1haWwsXHJcbiAgICAgIHdlYlNpdGU6IGJwRGV0YWlscy53ZWJTaXRlLFxyXG4gICAgICBzaGlwVHlwZTogYnBEZXRhaWxzLnNoaXBUeXBlQ29kZSxcclxuICAgICAgaW5kdXN0cnlDb2RlOiBicERldGFpbHMuaW5kdXN0cnlDb2RlLFxyXG4gICAgICBhZGRJZDogYnBEZXRhaWxzLmFkZElkLFxyXG4gICAgICB2YXRJZFVuaWZpZWQ6IGJwRGV0YWlscy52YXRJZFVuaWZpZWQsXHJcbiAgICAgIHJlZ2lzdGVyTm86IGJwRGV0YWlscy5yZWdpc3Rlck5vLFxyXG4gICAgICBub3RlczogYnBEZXRhaWxzLm5vdGVzLFxyXG4gICAgICB0ZWNobmljaWFuOiBicERldGFpbHMudGVjaG5pY2lhbkNvZGUsXHJcbiAgICAgIHNhbGVzRW1wbG95ZWU6IGJwRGV0YWlscy5zYWxlc1BlcnNvbkNvZGUsXHJcbiAgICAgIHRlcnJpdG9yeTogYnBEZXRhaWxzLnRlcnJpdG9yeUNvZGUsXHJcbiAgICAgIGdsb2JhbEFjY291bnQ6IGJwRGV0YWlscy5nbG9iYWxBY2NvdW50LFxyXG4gICAgICBnbG9iYWxJZDogYnBEZXRhaWxzLmdsb2JhbElkLFxyXG4gICAgICBwYXltZW50Q29kZTogYnBEZXRhaWxzLnBheW1lbnRDb2RlLFxyXG4gICAgICBwcmljZUxpc3Q6IGJwRGV0YWlscy5wcmljZWxpc3RDb2RlLFxyXG4gICAgICBkZWxpdmVyeUluc3RydWN0aW9uczogYnBEZXRhaWxzLmRlbGl2ZXJ5SW5zdHJ1Y3Rpb25zLFxyXG4gICAgICBmcmVlVGV4dDogYnBEZXRhaWxzLmZyZWVUZXh0LFxyXG4gICAgICBpbmFjdGl2ZUNvbW1lbnQ6IGJwRGV0YWlscy5pbmFjdGl2ZUNvbW1lbnQsXHJcbiAgICAgIHN0YXR1czogYnBEZXRhaWxzLmluYWN0aXZlUmVhc29uLFxyXG4gICAgICB2YXRTdGF0dXM6IGJwRGV0YWlscy52YXRTdGF0dXMsXHJcbiAgICAgIHRheENvZGU6IGJwRGV0YWlscy50YXhDb2RlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VmFsaWRhdG9yc0luRWRpdChicERldGFpbHM6IFNhcEJwTW9kZWwpIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVFZGl0SW5mb3JtYXRpb25EYXRhKGJwRGV0YWlscykpIHtcclxuICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmNhcmRDb2RlLnNldFZhbGlkYXRvcnMobnVsbCk7XHJcbiAgICAgIHRoaXMuZm9ybS5jb250cm9scy5jYXJkTmFtZS5zZXRWYWxpZGF0b3JzKG51bGwpO1xyXG4gICAgICB0aGlzLmZvcm0uY29udHJvbHMuY2FyZFR5cGUuc2V0VmFsaWRhdG9ycyhudWxsKTtcclxuICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmdyb3VwQ29kZS5zZXRWYWxpZGF0b3JzKG51bGwpO1xyXG4gICAgICB0aGlzLmZvcm0uY29udHJvbHMuY3VycmVuY3kuc2V0VmFsaWRhdG9ycyhudWxsKTtcclxuICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLnBob25lMS5zZXRWYWxpZGF0b3JzKG51bGwpO1xyXG4gICAgICB0aGlzLmZvcm0uY29udHJvbHMuc2FsZXNFbXBsb3llZS5zZXRWYWxpZGF0b3JzKG51bGwpO1xyXG4gICAgICB0aGlzLmZvcm0uY29udHJvbHMuZ2xvYmFsQWNjb3VudC5zZXRWYWxpZGF0b3JzKG51bGwpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0UGhvbmVQbGFjZWhvbGRlcihjb3VudHJ5Q29kZTogc3RyaW5nKSB7XHJcbiAgICAvLyAyMCBzYXAgbGVuZ3RoLCAtNCBzcGFjZXMsICsxMCBleHRyYSBjaGFyIGZvciB2aXNpYmxlXHJcbiAgICB0aGlzLnBob25lTWF4TGVuZ3RoID0gMjAgLSBjb3VudHJ5Q29kZS5sZW5ndGggLSA0ICsgMTA7XHJcbiAgICBjb25zdCBleHRMZW5ndGggPSB0aGlzLnBob25lTWF4TGVuZ3RoIC0gMjA7XHJcblxyXG4gICAgbGV0IHBob25lUGxhY2Vob2xkZXIgPSAnKDk5OSkgOTk5IDk5OTkgZXh0LiAnO1xyXG4gICAgbGV0IHBob25lTWFzayA9ICcoMDAwKSAwMDAgMDAwMCBleHQuICc7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleHRMZW5ndGg7IGkrKykge1xyXG4gICAgICBwaG9uZVBsYWNlaG9sZGVyICs9ICc5JztcclxuICAgICAgcGhvbmVNYXNrICs9ICc5JztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBob25lUGxhY2Vob2xkZXIgPSBwaG9uZVBsYWNlaG9sZGVyO1xyXG4gICAgdGhpcy5waG9uZU1hc2sgPSBwaG9uZU1hc2s7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHByZXBhcmVEYXRhVG9TZW5kKCk6IFNhcEJwQ3JlYXRlTW9kZWwge1xyXG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy5mb3JtLmdldFJhd1ZhbHVlKCk7XHJcbiAgICBsZXQgcGhvbmUxID0gdmFsdWVzLnBob25lMTtcclxuXHJcbiAgICBpZiAoIXRoaXMuZWRpdE1vZGUgJiYgdGhpcy5waG9uZU1hc2spIHtcclxuICAgICAgcGhvbmUxID1cclxuICAgICAgICB2YWx1ZXMuY291bnRyeUNvZGVQaG9uZTEgK1xyXG4gICAgICAgICctJyArXHJcbiAgICAgICAgdmFsdWVzLnBob25lMS5zbGljZSgwLCAzKSArXHJcbiAgICAgICAgJy0nICtcclxuICAgICAgICB2YWx1ZXMucGhvbmUxLnNsaWNlKDMsIDYpICtcclxuICAgICAgICAnLScgK1xyXG4gICAgICAgIHZhbHVlcy5waG9uZTEuc2xpY2UoNiwgMTApICtcclxuICAgICAgICAodmFsdWVzLnBob25lMS5zcGxpdCgndCcpWzFdID8gJ3gnICsgdmFsdWVzLnBob25lMS5zcGxpdCgndCcpWzFdIDogJycpO1xyXG4gICAgfSBlbHNlIGlmICghdGhpcy5lZGl0TW9kZSkge1xyXG4gICAgICBwaG9uZTEgPSB2YWx1ZXMuY291bnRyeUNvZGVQaG9uZTEgKyAnICcgKyBwaG9uZTE7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY2FyZEZvcmlnbk5hbWU6IHZhbHVlcy5jYXJkRm9yZWlnbk5hbWUsXHJcbiAgICAgIGdyb3VwQ29kZTogdmFsdWVzLmdyb3VwQ29kZSBhcyBudW1iZXIsXHJcbiAgICAgIGN1cnJlbmN5OiB2YWx1ZXMuY3VycmVuY3ksXHJcbiAgICAgIGxpY1RyYWROdW06IHZhbHVlcy5saWNUcmFkTnVtLFxyXG4gICAgICBwaG9uZTE6IHBob25lMSxcclxuICAgICAgcGhvbmUyOiB2YWx1ZXMucGhvbmUyLFxyXG4gICAgICBjZWxsdWxhcjogdmFsdWVzLmNlbGx1bGFyLFxyXG4gICAgICBmYXg6IHZhbHVlcy5mYXgsXHJcbiAgICAgIGVtYWlsOiB2YWx1ZXMuZW1haWwsXHJcbiAgICAgIHdlYlNpdGU6IHZhbHVlcy53ZWJTaXRlLFxyXG4gICAgICBzaGlwVHlwZUNvZGU6IHZhbHVlcy5zaGlwVHlwZSBhcyBudW1iZXIsXHJcbiAgICAgIGluZHVzdHJ5Q29kZTogdmFsdWVzLmluZHVzdHJ5Q29kZSBhcyBudW1iZXIsXHJcbiAgICAgIGFkZElkOiB2YWx1ZXMuYWRkSWQsXHJcbiAgICAgIHZhdElkVW5pZmllZDogdmFsdWVzLnZhdElkVW5pZmllZCxcclxuICAgICAgcmVnaXN0ZXJObzogdmFsdWVzLnJlZ2lzdGVyTm8sXHJcbiAgICAgIG5vdGVzOiB2YWx1ZXMubm90ZXMsXHJcbiAgICAgIHRlY2huaWNpYW5Db2RlOiB2YWx1ZXMudGVjaG5pY2lhbiBhcyBudW1iZXIsXHJcbiAgICAgIHNhbGVzUGVyc29uQ29kZTogdmFsdWVzLnNhbGVzRW1wbG95ZWUgYXMgbnVtYmVyLFxyXG4gICAgICB0ZXJyaXRvcnlDb2RlOiB2YWx1ZXMudGVycml0b3J5IGFzIG51bWJlcixcclxuICAgICAgZ2xvYmFsQWNjb3VudDogdmFsdWVzLmdsb2JhbEFjY291bnQsXHJcbiAgICAgIGdsb2JhbElkOiB2YWx1ZXMuZ2xvYmFsSWQsXHJcbiAgICAgIHZhbGlkRm9yOiB2YWx1ZXMuc3RhdHVzID09PSAnQWN0aXZlJyA/ICdZJyA6ICdOJyxcclxuICAgICAgcGF5bWVudENvZGU6IHZhbHVlcy5wYXltZW50Q29kZSBhcyBudW1iZXIsXHJcbiAgICAgIHByaWNlbGlzdENvZGU6IHZhbHVlcy5wcmljZUxpc3QgYXMgbnVtYmVyLFxyXG4gICAgICBkZWxpdmVyeUluc3RydWN0aW9uczogdmFsdWVzLmRlbGl2ZXJ5SW5zdHJ1Y3Rpb25zLFxyXG4gICAgICBmcmVlVGV4dDogdmFsdWVzLmZyZWVUZXh0LFxyXG4gICAgICBjb250YWN0UGVyc29uTGlzdDogdGhpcy5jb250YWN0UGVyc29ucyB8fCBbXSxcclxuICAgICAgYWRkcmVzc1NoaXBUb0xpc3Q6IHRoaXMuc2hpcFRvQWRkcmVzcyB8fCBbXSxcclxuICAgICAgYWRkcmVzc0JpbGxUb0xpc3Q6IHRoaXMuYmlsbFRvQWRkcmVzcyB8fCBbXSxcclxuICAgICAgcXJ5R3JvdXBMaXN0OiB0aGlzLnFyeUdyb3VwTGlzdCxcclxuICAgICAgYWRkcmVzc0NoYW5nZTogdGhpcy5hZGRyZXNzQ2hhbmdlZCxcclxuICAgICAgY29udGFjdENoYW5nZTogdGhpcy5jb250YWN0UGVyc29uQ2hhbmdlZCxcclxuICAgICAgY2FyZENvZGU6IHZhbHVlcy5jYXJkQ29kZSxcclxuICAgICAgY2FyZE5hbWU6IHZhbHVlcy5jYXJkTmFtZSxcclxuICAgICAgY2FyZFR5cGU6IHRoaXMuY29udmVydFRvVHJhbnNsYXRlQnBUeXBlKHZhbHVlcy5jYXJkVHlwZSksXHJcbiAgICAgIG9sZENhcmRDb2RlOiB0aGlzLm9sZENhcmRDb2RlIHx8IG51bGwsXHJcbiAgICAgIGluYWN0aXZlUmVhc29uOiB2YWx1ZXMuc3RhdHVzLFxyXG4gICAgICBpbmFjdGl2ZUNvbW1lbnQ6IHZhbHVlcy5zdGF0dXMgPT09ICdBY3RpdmUnID8gJycgOiB2YWx1ZXMuaW5hY3RpdmVDb21tZW50LFxyXG4gICAgICB2YXRTdGF0dXM6IHZhbHVlcy52YXRTdGF0dXMsXHJcbiAgICAgIHRheENvZGU6IHZhbHVlcy50YXhDb2RlLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0TmV3QnBJZChicFR5cGU6IFNhcEJwVHlwZUVudW0pIHtcclxuICAgIHRoaXMuc2FwQnBTZXJ2aWNlLmdldE5leHRCcElkKGJwVHlwZSkuc3Vic2NyaWJlKG5ld0JwSWQgPT4ge1xyXG4gICAgICB0aGlzLmZvcm0uY29udHJvbHMuY2FyZENvZGUuc2V0VmFsdWUobmV3QnBJZCk7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RGVmYXVsdFBheW1lbnRUZXJtKHZhbDogU2FwQnBUeXBlRW51bSkge1xyXG4gICAgaWYgKHRoaXMucGF5bWVudFRlcm1zTGlzdD8ubGVuZ3RoID4gMCkge1xyXG4gICAgICBpZiAodmFsID09PSBTYXBCcFR5cGVFbnVtLlN1cHBsaWVyKSB7XHJcbiAgICAgICAgY29uc3QgcGF5bWVudFRlcm1Gb3VuZCA9IHRoaXMucGF5bWVudFRlcm1zTGlzdC5maW5kKFxyXG4gICAgICAgICAgcGF5bWVudFRlcm0gPT4gcGF5bWVudFRlcm0uaXNEZWZhdWx0Rm9yU3VwcGxpZXJcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChwYXltZW50VGVybUZvdW5kKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHMucGF5bWVudENvZGUuc2V0VmFsdWUocGF5bWVudFRlcm1Gb3VuZC5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHBheW1lbnRUZXJtRm91bmQgPSB0aGlzLnBheW1lbnRUZXJtc0xpc3QuZmluZChcclxuICAgICAgICAgIHBheW1lbnRUZXJtID0+IHBheW1lbnRUZXJtLmlzRGVmYXVsdEZvckN1c3RvbWVyXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAocGF5bWVudFRlcm1Gb3VuZCkge1xyXG4gICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLnBheW1lbnRDb2RlLnNldFZhbHVlKHBheW1lbnRUZXJtRm91bmQuaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEJwVHlwZUFsbG93ZWQoKSB7XHJcbiAgICB0aGlzLmJwVHlwZUFsbG93ZWQgPSBbXTtcclxuICAgIGNvbnN0IGNhcmRUeXBlID0gdGhpcy5mb3JtLmNvbnRyb2xzLmNhcmRUeXBlLnZhbHVlO1xyXG5cclxuICAgIGlmICh0aGlzLmVkaXRNb2RlKSB7XHJcbiAgICAgIGlmICh0aGlzLnVzZXJTZXR0aW5ncygpLm9yYWNsZUJwRWRpdCkge1xyXG4gICAgICAgIHRoaXMuYnBUeXBlQWxsb3dlZC5wdXNoKGNhcmRUeXBlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoY2FyZFR5cGUgPT09IFNhcEJwVHlwZUVudW0uTGVhZCkge1xyXG4gICAgICAgICAgdGhpcy5icFR5cGVBbGxvd2VkLnB1c2goU2FwQnBUeXBlRW51bS5MZWFkKTtcclxuICAgICAgICAgIHRoaXMuYnBUeXBlQWxsb3dlZC5wdXNoKFNhcEJwVHlwZUVudW0uQ3VzdG9tZXIpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY2FyZFR5cGUgPT09IFNhcEJwVHlwZUVudW0uU3VwcGxpZXIpIHtcclxuICAgICAgICAgIHRoaXMuYnBUeXBlQWxsb3dlZC5wdXNoKFNhcEJwVHlwZUVudW0uU3VwcGxpZXIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmJwVHlwZUFsbG93ZWQucHVzaChTYXBCcFR5cGVFbnVtLkN1c3RvbWVyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudXNlclNldHRpbmdzKCkuYnBFZGl0VHlwZUFsbG93ZWQuZm9yRWFjaChicFR5cGUgPT4ge1xyXG4gICAgICAgIHRoaXMuYnBUeXBlQWxsb3dlZC5wdXNoKGJwVHlwZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnZlcnRCcFR5cGUodHlwZTogU2FwQnBUeXBlVHJhbnNsYXRlRW51bSk6IFNhcEJwVHlwZUVudW0ge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgU2FwQnBUeXBlVHJhbnNsYXRlRW51bS5DdXN0b21lcjpcclxuICAgICAgICByZXR1cm4gU2FwQnBUeXBlRW51bS5DdXN0b21lcjtcclxuICAgICAgY2FzZSBTYXBCcFR5cGVUcmFuc2xhdGVFbnVtLkxlYWQ6XHJcbiAgICAgICAgcmV0dXJuIFNhcEJwVHlwZUVudW0uTGVhZDtcclxuICAgICAgY2FzZSBTYXBCcFR5cGVUcmFuc2xhdGVFbnVtLlN1cHBsaWVyOlxyXG4gICAgICAgIHJldHVybiBTYXBCcFR5cGVFbnVtLlN1cHBsaWVyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb252ZXJ0VG9UcmFuc2xhdGVCcFR5cGUoXHJcbiAgICB0eXBlOiBTYXBCcFR5cGVFbnVtXHJcbiAgKTogU2FwQnBUeXBlVHJhbnNsYXRlRW51bSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBTYXBCcFR5cGVFbnVtLkN1c3RvbWVyOlxyXG4gICAgICAgIHJldHVybiBTYXBCcFR5cGVUcmFuc2xhdGVFbnVtLkN1c3RvbWVyO1xyXG4gICAgICBjYXNlIFNhcEJwVHlwZUVudW0uTGVhZDpcclxuICAgICAgICByZXR1cm4gU2FwQnBUeXBlVHJhbnNsYXRlRW51bS5MZWFkO1xyXG4gICAgICBjYXNlIFNhcEJwVHlwZUVudW0uU3VwcGxpZXI6XHJcbiAgICAgICAgcmV0dXJuIFNhcEJwVHlwZVRyYW5zbGF0ZUVudW0uU3VwcGxpZXI7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNhcEJwVXNlclNldHRpbmdzIHtcclxuICBwaG9uZU1hc2s6IGJvb2xlYW47XHJcbiAgYnBFZGl0U2FsZXNQZXJzb25PbkFkZHJlc3M6IGJvb2xlYW47XHJcbiAgYnBUYXhUeXBlOiBCcFRheFR5cGVFbnVtO1xyXG4gIG9yYWNsZUJwRWRpdDogYm9vbGVhbjtcclxuICBjdXJyZW5jeTogc3RyaW5nO1xyXG4gIGJwRWRpdEFsbG93Q29udmVydExlYWQ6IGJvb2xlYW47XHJcbiAgc2FwQnBFZGl0QXV0aDogU2FwQnBFZGl0QXV0aEZsYWdzRW51bTtcclxuICBicEVkaXRUeXBlQWxsb3dlZDogU2FwQnBUeXBlRW51bVtdO1xyXG4gIGNvdW50cnk6IHN0cmluZztcclxufVxyXG4iXX0=
585
+ }] });
586
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FwLWJwLWJhc2UtY3JlYXRlLWVkaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3Qtc2FwLWJwL3NyYy9saWIvY29tcG9uZW50cy9zYXAtYnAtYmFzZS1jcmVhdGUtZWRpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBUzFELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsVUFBVSxFQUdWLFlBQVksRUFDWixNQUFNLEVBQ04sTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBT3ZCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUV2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFHckQsTUFBTSxPQUFnQixtQkFBbUI7SUFEekM7UUFFRSxjQUFTLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRTdCLGlCQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BDLFdBQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0IsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDaEQsbUJBQWMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMzQyxPQUFFLEdBQUcsTUFBTSxDQUFDLHNC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O1FBQ0wsQ0FBQztRQUVELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRU8sYUFBYSxDQUFDLElBQTRCO1FBQ2hELFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDYixLQUFLLHNCQUFzQixDQUFDLFFBQVE7Z0JBQ2xDLE9BQU8sYUFBYSxDQUFDLFFBQVEsQ0FBQztZQUNoQyxLQUFLLHNCQUFzQixDQUFDLElBQUk7Z0JBQzlCLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQztZQUM1QixLQUFLLHNCQUFzQixDQUFDLFFBQVE7Z0JBQ2xDLE9BQU8sYUFBYSxDQUFDLFFBQVEsQ0FBQztRQUNsQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLHdCQUF3QixDQUM5QixJQUFtQjtRQUVuQixRQUFRLElBQUksRUFBRSxDQUFDO1lBQ2IsS0FBSyxhQUFhLENBQUMsUUFBUTtnQkFDekIsT0FBTyxzQkFBc0IsQ0FBQyxRQUFRLENBQUM7WUFDekMsS0FBSyxhQUFhLENBQUMsSUFBSTtnQkFDckIsT0FBTyxzQkFBc0IsQ0FBQyxJQUFJLENBQUM7WUFDckMsS0FBSyxhQUFhLENBQUMsUUFBUTtnQkFDekIsT0FBTyxzQkFBc0IsQ0FBQyxRQUFRLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUM7K0dBbnJCbUIsbUJBQW1CO21IQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBRHhDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOb25OdWxsYWJsZUZvcm1CdWlsZGVyLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTYXBCcFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zYXAtYnAuc2VydmljZSc7XHJcbmltcG9ydCB7IFNhcEJwR3JvdXBDb2RlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvc2FwLWJwLWdyb3VwLWNvZGUubW9kZWwnO1xyXG5pbXBvcnQgeyBTYXBCcFNoaXBUeXBlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvc2FwLWJwLXNoaXAtdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IFNhcEJwSW5kdXN0cnlNb2RlbCB9IGZyb20gJy4uL21vZGVscy9zYXAtYnAtaW5kdXN0cnkubW9kZWwnO1xyXG5pbXBvcnQgeyBTYXBCcFRlY2huaWNpYW5Nb2RlbCB9IGZyb20gJy4uL21vZGVscy9zYXAtYnAtdGVjaG5pY2lhbi5tb2RlbCc7XHJcbmltcG9ydCB7IFNhcEJwU2FsZXNFbXBsb3llZU1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3NhcC1icC1zYWxlcy1lbXBsb3llZS5tb2RlbCc7XHJcbmltcG9ydCB7IFNhcEJwVGVycml0b3J5TW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvc2FwLWJwLXRlcnJpdG9yeS5tb2RlbCc7XHJcbmltcG9ydCB7IFNhcEJwR2xvYmFsSWRNb2RlbCB9IGZyb20gJy4uL21vZGVscy9zYXAtYnAtZ2xvYmFsLWlkLm1vZGVsJztcclxuaW1wb3J0IHsgU2FwQnBDb250YWN0UGVyc29uTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvc2FwLWJwLWNvbnRhY3QtcGVyc29uLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBJbmplY3RhYmxlLFxyXG4gIElucHV0U2lnbmFsLFxyXG4gIFF1ZXJ5TGlzdCxcclxuICB2aWV3Q2hpbGRyZW4sXHJcbiAgaW5qZWN0LFxyXG4gIHNpZ25hbCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU2FwQnBBZGRyZXNzTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvc2FwLWJwLWFkZHJlc3MubW9kZWwnO1xyXG5pbXBvcnQgeyBTYXBCcFBheW1lbnRUZXJtc01vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3NhcC1icC1wYXltZW50LXRlcm1zLm1vZGVsJztcclxuaW1wb3J0IHsgU2FwQnBQcmljZWxpc3RNb2RlbCB9IGZyb20gJy4uL21vZGVscy9zYXAtYnAtcHJpY2VsaXN0Lm1vZGVsJztcclxuaW1wb3J0IHsgU2FwQnBRcnlHcm91cE1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3NhcC1icC1xcnktZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQgeyBTYXBCcENyZWF0ZU1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3NhcC1icC1jcmVhdGUubW9kZWwnO1xyXG5pbXBvcnQgeyBTYXBCcE1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3NhcC1icC5tb2RlbCc7XHJcbmltcG9ydCB7IFNhcEJwVHlwZVRyYW5zbGF0ZUVudW0gfSBmcm9tICcuLi9tb2RlbHMvc2FwLWJwLXR5cGUtdHJhbnNsYXRlLmVudW0nO1xyXG5pbXBvcnQgeyBTYXBCcFR5cGVFbnVtIH0gZnJvbSAnLi4vbW9kZWxzL3NhcC1icC10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBTYXBCcEhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zYXAtYnAtaGVscGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTYXBCcFRheCB9IGZyb20gJy4uL21vZGVscy9zYXAtYnAtdGF4Lm1vZGVsJztcclxuaW1wb3J0IHsgQnBUYXhUeXBlRW51bSB9IGZyb20gJy4uL21vZGVscy9icC10YXgtdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgU2FwQnBFZGl0QXV0aEZsYWdzRW51bSB9IGZyb20gJy4uL21vZGVscy9zYXAtYnAtZWRpdC1hdXRoLWZsYWdzLmVudW0nO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2FwQnBCYXNlQ3JlYXRlRWRpdCB7XHJcbiAgcGFnaW5hdG9yID0gdmlld0NoaWxkcmVuKE1hdFBhZ2luYXRvcik7XHJcblxyXG4gIHByb3RlY3RlZCBzYXBCcFNlcnZpY2UgPSBpbmplY3QoU2FwQnBTZXJ2aWNlKTtcclxuICBwcm90ZWN0ZWQgZGlhbG9nID0gaW5qZWN0KE1hdERpYWxvZyk7XHJcbiAgcHJvdGVjdGVkIHNhcEJwSGVscGVyU2VydmljZSA9IGluamVjdChTYXBCcEhlbHBlclNlcnZpY2UpO1xyXG4gIHByb3RlY3RlZCBjaGFuZ2VEZXRlY3RvciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgcHJvdGVjdGVkIGZiID0gaW5qZWN0KE5vbk51bGxhYmxlRm9ybUJ1aWxkZXIpO1xyXG5cclxuICBmb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICBjYXJkQ29kZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgIGNhcmROYW1lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgY2FyZFR5cGU6IFtTYXBCcFR5cGVFbnVtLkN1c3RvbWVyLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgIGNhcmRGb3JlaWduTmFtZTogJycsXHJcbiAgICBncm91cENvZGU6IFs8bnVtYmVyIHwgbnVsbD5udWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgIGN1cnJlbmN5OiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgY291bnRyeUNvZGVQaG9uZTE6ICcnLFxyXG4gICAgcGhvbmUxOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgc2FsZXNFbXBsb3llZTogPG51bWJlciB8IG51bGw+bnVsbCxcclxuICAgIGdsb2JhbEFjY291bnQ6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICB2YXRTdGF0dXM6ICcnLFxyXG4gICAgbGljVHJhZE51bTogJycsXHJcbiAgICBwaG9uZTI6ICcnLFxyXG4gICAgY2VsbHVsYXI6ICcnLFxyXG4gICAgZmF4OiAnJyxcclxuICAgIGVtYWlsOiAnJyxcclxuICAgIHdlYlNpdGU6ICcnLFxyXG4gICAgc2hpcFR5cGU6IDxudW1iZXIgfCBudWxsPm51bGwsXHJcbiAgICBpbmR1c3RyeUNvZGU6IDxudW1iZXIgfCBudWxsPm51bGwsXHJcbiAgICBhZGRJZDogJycsXHJcbiAgICB2YXRJZFVuaWZpZWQ6ICcnLFxyXG4gICAgcmVnaXN0ZXJObzogJycsXHJcbiAgICBub3RlczogJycsXHJcbiAgICB0ZWNobmljaWFuOiA8bnVtYmVyIHwgbnVsbD5udWxsLFxyXG4gICAgdGVycml0b3J5OiA8bnVtYmVyIHwgbnVsbD5udWxsLFxyXG4gICAgZ2xvYmFsSWQ6ICcnLFxyXG4gICAgcGF5bWVudENvZGU6IDxudW1iZXIgfCBudWxsPm51bGwsXHJcbiAgICBwcmljZUxpc3Q6IDxudW1iZXIgfCBudWxsPm51bGwsXHJcbiAgICBkZWxpdmVyeUluc3RydWN0aW9uczogJycsXHJcbiAgICBmcmVlVGV4dDogJycsXHJcbiAgICBpbmFjdGl2ZUNvbW1lbnQ6ICcnLFxyXG4gICAgc3RhdHVzOiBbJ0FjdGl2ZScsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgdGF4Q29kZTogJycsXHJcbiAgfSk7XHJcblxyXG4gIHVzZXJTZXR0aW5nczogSW5wdXRTaWduYWw8U2FwQnBVc2VyU2V0dGluZ3M+O1xyXG5cclxuICBncm91cENvZGVMaXN0ID0gc2lnbmFsPFNhcEJwR3JvdXBDb2RlTW9kZWxbXT4oW10pO1xyXG4gIHNoaXBUeXBlTGlzdCA9IHNpZ25hbDxTYXBCcFNoaXBUeXBlTW9kZWxbXT4oW10pO1xyXG4gIGluZHVzdHJ5TGlzdCA9IHNpZ25hbDxTYXBCcEluZHVzdHJ5TW9kZWxbXT4oW10pO1xyXG4gIHRlY2huaWNpYW5MaXN0ID0gc2lnbmFsPFNhcEJwVGVjaG5pY2lhbk1vZGVsW10+KFtdKTtcclxuICBzYWxlc0VtcGxveWVlTGlzdCA9IHNpZ25hbDxTYXBCcFNhbGVzRW1wbG95ZWVNb2RlbFtdPihbXSk7XHJcbiAgdGVycml0b3J5TGlzdCA9IHNpZ25hbDxTYXBCcFRlcnJpdG9yeU1vZGVsW10+KFtdKTtcclxuICBnbG9iYWxJZExpc3QgPSBzaWduYWw8U2FwQnBHbG9iYWxJZE1vZGVsW10+KFtdKTtcclxuICBwYXltZW50VGVybXNMaXN0ID0gc2lnbmFsPFNhcEJwUGF5bWVudFRlcm1zTW9kZWxbXT4oW10pO1xyXG4gIHByaWNlTGlzdCA9IHNpZ25hbDxTYXBCcFByaWNlbGlzdE1vZGVsW10+KFtdKTtcclxuICBxcnlHcm91cExpc3QgPSBzaWduYWw8U2FwQnBRcnlHcm91cE1vZGVsW10+KFtdKTtcclxuICBjdXJyZW5jeUxpc3QgPSBzaWduYWw8c3RyaW5nW10+KFtdKTtcclxuICBicFR5cGVBbGxvd2VkID0gc2lnbmFsPFNhcEJwVHlwZUVudW1bXT4oW10pO1xyXG5cclxuICBpbml0Q29udGFjdFBlcnNvbkxpc3QgPSBzaWduYWw8U2FwQnBDb250YWN0UGVyc29uTW9kZWxbXT4oW10pO1xyXG4gIGNvbnRhY3RQZXJzb25DaGFuZ2VkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuICBjb250YWN0UGVyc29ucyA9IHNpZ25hbDxTYXBCcENvbnRhY3RQZXJzb25Nb2RlbFtdPihbXSk7XHJcblxyXG4gIGFkZHJlc3NDaGFuZ2VkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgaW5pdEJpbGxUb0FkZHJlc3MgPSBzaWduYWw8U2FwQnBBZGRyZXNzTW9kZWxbXT4oW10pO1xyXG4gIGJpbGxUb0FkZHJlc3MgPSBzaWduYWw8U2FwQnBBZGRyZXNzTW9kZWxbXT4oW10pO1xyXG5cclxuICBpbml0U2hpcFRvQWRkcmVzcyA9IHNpZ25hbDxTYXBCcEFkZHJlc3NNb2RlbFtdPihbXSk7XHJcbiAgc2hpcFRvQWRkcmVzcyA9IHNpZ25hbDxTYXBCcEFkZHJlc3NNb2RlbFtdPihbXSk7XHJcblxyXG4gIHNob3dRcnlHcm91cCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHJlZnJlc2hpbmdEYXRhRnJvbVNhcCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHN1Ym1pdHRlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHNhbGVzUGVyc29uT25seU9uQWRkcmVzcyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgYnBUYXhUeXBlID0gQnBUYXhUeXBlRW51bTtcclxuXHJcbiAgdGF4ZXNMaXN0ID0gc2lnbmFsPFNhcEJwVGF4W10+KFtdKTtcclxuICByZWZyZXNoaW5nVGF4ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgcGhvbmVNYXhMZW5ndGggPSBzaWduYWw8bnVtYmVyPigyMCk7XHJcbiAgcGhvbmVQbGFjZWhvbGRlciA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcclxuICBwaG9uZU1hc2sgPSBzaWduYWw8c3RyaW5nPignJyk7XHJcblxyXG4gIHByb3RlY3RlZCBvbGRDYXJkQ29kZSA9ICcnO1xyXG4gIHByb3RlY3RlZCBlZGl0TW9kZSA9IGZhbHNlO1xyXG4gIHByb3RlY3RlZCBjb252ZXJ0Tm90VVMgPSBmYWxzZTtcclxuXHJcbiAgaW5pdEZvcm0oYnBEZXRhaWxzPzogU2FwQnBNb2RlbCkge1xyXG4gICAgaWYgKGJwRGV0YWlscykge1xyXG4gICAgICB0aGlzLmVkaXRNb2RlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy51c2VyU2V0dGluZ3MoKS5waG9uZU1hc2spIHtcclxuICAgICAgdGhpcy5waG9uZVBsYWNlaG9sZGVyLnNldCgnKDk5OSkgOTk5IDk5OTkgZXh0LiA5OTk5OTk5Jyk7XHJcbiAgICAgIHRoaXMucGhvbmVNYXNrLnNldCgnKDAwMCkgMDAwIDAwMDAgZXh0LiAwMDAwMDAwJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNhbGVzUGVyc29uT25seU9uQWRkcmVzcy5zZXQoXHJcbiAgICAgIHRoaXMudXNlclNldHRpbmdzKCkuYnBFZGl0U2FsZXNQZXJzb25PbkFkZHJlc3NcclxuICAgICk7XHJcblxyXG4gICAgaWYgKCF0aGlzLnNhbGVzUGVyc29uT25seU9uQWRkcmVzcygpKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5jb250cm9scy5zYWxlc0VtcGxveWVlLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudXNlclNldHRpbmdzKCkuYnBUYXhUeXBlID09PSBCcFRheFR5cGVFbnVtLkV1KSB7XHJcbiAgICAgIHRoaXMubG9hZFRheGVzKGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIGJwRGV0YWlscz8uY2FyZFR5cGUgPT09IFNhcEJwVHlwZVRyYW5zbGF0ZUVudW0uTGVhZCAmJlxyXG4gICAgICAhdGhpcy51c2VyU2V0dGluZ3MoKS5vcmFjbGVCcEVkaXRcclxuICAgICkge1xyXG4gICAgICB0aGlzLmNvbnZlcnROb3RVUyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmVkaXRNb2RlKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5jb250cm9scy5jb3VudHJ5Q29kZVBob25lMS5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICB0aGlzLmZvcm0uY29udHJvbHMucGhvbmUxLmRpc2FibGUoKTtcclxuXHJcbiAgICAgIHRoaXMuZm9ybS5jb250cm9scy5jb3VudHJ5Q29kZVBob25lMS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLnBob25lMS5lbmFibGUoKTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy51c2VyU2V0dGluZ3MoKS5waG9uZU1hc2spIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRQaG9uZVBsYWNlaG9sZGVyKHJlcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5waG9uZTEuZGlzYWJsZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRCcFR5cGVBbGxvd2VkKCk7XHJcblxyXG4gICAgaWYgKGJwRGV0YWlscykge1xyXG4gICAgICB0aGlzLmluaXRDb250YWN0UGVyc29uTGlzdC5zZXQoYnBEZXRhaWxzLmNvbnRhY3RQZXJzb25MaXN0KTtcclxuICAgICAgdGhpcy5pbml0QmlsbFRvQWRkcmVzcy5zZXQoYnBEZXRhaWxzLmFkZHJlc3NCaWxsVG9MaXN0KTtcclxuICAgICAgdGhpcy5pbml0U2hpcFRvQWRkcmVzcy5zZXQoYnBEZXRhaWxzLmFkZHJlc3NTaGlwVG9MaXN0KTtcclxuXHJcbiAgICAgIHRoaXMubG9hZEdyb3VwQ29kZUxpc3QoKTtcclxuICAgICAgdGhpcy5sb2FkUXJ5R3JvdXAoZmFsc2UsIGJwRGV0YWlscy5xcnlHcm91cExpc3QpO1xyXG5cclxuICAgICAgaWYgKHRoaXMudXNlclNldHRpbmdzKCkub3JhY2xlQnBFZGl0KSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLmdldCgnY2FyZFR5cGUnKSEuZGlzYWJsZSgpO1xyXG4gICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5jYXJkQ29kZS5kaXNhYmxlKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmNhcmRDb2RlLmRpc2FibGUoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29udmVydE5vdFVTKSB7XHJcbiAgICAgICAgICB0aGlzLm9sZENhcmRDb2RlID0gYnBEZXRhaWxzLmNhcmRDb2RlO1xyXG5cclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgYnBEZXRhaWxzPy5jYXJkVHlwZSA9PT0gU2FwQnBUeXBlVHJhbnNsYXRlRW51bS5MZWFkICYmXHJcbiAgICAgICAgICAgICF0aGlzLnVzZXJTZXR0aW5ncygpLmJwRWRpdEFsbG93Q29udmVydExlYWRcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdjYXJkVHlwZScpIS5kaXNhYmxlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NhcmRUeXBlJykhLmRpc2FibGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsaWRhdG9yc0luRWRpdChicERldGFpbHMpO1xyXG4gICAgICB0aGlzLnNldEVkaXRGb3JtKGJwRGV0YWlscyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy51c2VyU2V0dGluZ3MoKS5vcmFjbGVCcEVkaXQpIHtcclxuICAgICAgICB0aGlzLmZvcm0uY29udHJvbHMuY2FyZFR5cGUuc2V0VmFsdWUoU2FwQnBUeXBlRW51bS5MZWFkKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmN1cnJlbmN5LnNldFZhbHVlKHRoaXMudXNlclNldHRpbmdzKCkuY3VycmVuY3kpO1xyXG5cclxuICAgICAgaWYgKHRoaXMudXNlclNldHRpbmdzKCkub3JhY2xlQnBFZGl0KSB7XHJcbiAgICAgICAgdGhpcy5zZXROZXdCcElkKFNhcEJwVHlwZUVudW0uTGVhZCk7XHJcbiAgICAgICAgdGhpcy5sb2FkR3JvdXBDb2RlTGlzdCgpO1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFBheW1lbnRUZXJtKFNhcEJwVHlwZUVudW0uTGVhZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy51c2VyU2V0dGluZ3MoKS5icFRheFR5cGUgIT09IEJwVGF4VHlwZUVudW0uTm9UYXgpIHtcclxuICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLnZhdFN0YXR1cy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZm9ybS5jb250cm9scy5jYXJkVHlwZS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWw6IFNhcEJwVHlwZUVudW0pID0+IHtcclxuICAgICAgaWYgKHRoaXMuY29udmVydE5vdFVTKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkR3JvdXBDb2RlTGlzdCgpO1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFBheW1lbnRUZXJtKHZhbCk7XHJcblxyXG4gICAgICAgIGlmICh2YWwgPT09IFNhcEJwVHlwZUVudW0uQ3VzdG9tZXIpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5jYXJkQ29kZS5lbmFibGUoKTtcclxuICAgICAgICAgIHRoaXMuc2V0TmV3QnBJZChTYXBCcFR5cGVFbnVtLkN1c3RvbWVyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmNhcmRDb2RlLnNldFZhbHVlKHRoaXMub2xkQ2FyZENvZGUpO1xyXG4gICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmNhcmRDb2RlLmRpc2FibGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHZhbCB8fCB2YWwgPj0gMCkge1xyXG4gICAgICAgICAgdGhpcy5zZXROZXdCcElkKHZhbCk7XHJcbiAgICAgICAgICB0aGlzLmxvYWRHcm91cENvZGVMaXN0KCk7XHJcbiAgICAgICAgICB0aGlzLnNldERlZmF1bHRQYXltZW50VGVybSh2YWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzLmdsb2JhbEFjY291bnQudmFsdWVDaGFuZ2VzLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICBpZiAocmVzID09PSAnWWVzJykge1xyXG4gICAgICAgIHRoaXMuZm9ybS5nZXQoJ2dsb2JhbElkJykhLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybS5nZXQoJ2dsb2JhbElkJykhLnNldFZhbGlkYXRvcnMobnVsbCk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5pbml0TG9hZGVycygpO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2hDYXJkQ29kZSgpIHtcclxuICAgIHRoaXMuc2V0TmV3QnBJZCh0aGlzLmZvcm0uY29udHJvbHMuY2FyZFR5cGUudmFsdWUpO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIGxvYWRHcm91cENvZGVMaXN0KHJlZnJlc2ggPSBmYWxzZSkge1xyXG4gICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAuc2V0KHRydWUpO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuXHJcbiAgICB0aGlzLnNhcEJwU2VydmljZVxyXG4gICAgICAuZ2V0R3JvdXBDb2RlKHRoaXMuZm9ybS5jb250cm9scy5jYXJkVHlwZS52YWx1ZSwgcmVmcmVzaClcclxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBDb2RlTGlzdC5zZXQocmVzKTtcclxuICAgICAgICB0aGlzLmZvcm0uY29udHJvbHMuZ3JvdXBDb2RlLnNldFZhbHVlKHJlcyA/IHJlc1swXS5pZCA6IG51bGwpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwLnNldChmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBsb2FkU2hpcFR5cGUocmVmcmVzaCA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnJlZnJlc2hpbmdEYXRhRnJvbVNhcC5zZXQodHJ1ZSk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG5cclxuICAgIHRoaXMuc2FwQnBTZXJ2aWNlLmdldFNoaXBUeXBlKHJlZnJlc2gpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLnNoaXBUeXBlTGlzdC5zZXQocmVzKTtcclxuICAgICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAuc2V0KGZhbHNlKTtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZEluZHVzdHJ5KHJlZnJlc2ggPSBmYWxzZSkge1xyXG4gICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAuc2V0KHRydWUpO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuXHJcbiAgICB0aGlzLnNhcEJwU2VydmljZS5nZXRJbmR1c3RyeShyZWZyZXNoKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy5pbmR1c3RyeUxpc3Quc2V0KHJlcyk7XHJcbiAgICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwLnNldChmYWxzZSk7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGxvYWRUZWNobmljaWFuKHJlZnJlc2ggPSBmYWxzZSkge1xyXG4gICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAuc2V0KHRydWUpO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuXHJcbiAgICB0aGlzLnNhcEJwU2VydmljZS5nZXRUZWNobmljaWFuKHJlZnJlc2gpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLnRlY2huaWNpYW5MaXN0LnNldChyZXMpO1xyXG4gICAgICB0aGlzLnJlZnJlc2hpbmdEYXRhRnJvbVNhcC5zZXQoZmFsc2UpO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBsb2FkU2FsZXNFbXBsb3llZShyZWZyZXNoID0gZmFsc2UpIHtcclxuICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwLnNldCh0cnVlKTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcblxyXG4gICAgdGhpcy5zYXBCcFNlcnZpY2UuZ2V0U2FsZXNFbXBsb3llZShyZWZyZXNoKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy5zYWxlc0VtcGxveWVlTGlzdC5zZXQocmVzKTtcclxuICAgICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAuc2V0KGZhbHNlKTtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZFRlcnJpdG9yeShyZWZyZXNoID0gZmFsc2UpIHtcclxuICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwLnNldCh0cnVlKTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcblxyXG4gICAgdGhpcy5zYXBCcFNlcnZpY2UuZ2V0VGVycml0b3J5KHJlZnJlc2gpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLnRlcnJpdG9yeUxpc3Quc2V0KHJlcyk7XHJcbiAgICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwLnNldChmYWxzZSk7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGxvYWRHbG9iYWxJZChyZWZyZXNoID0gZmFsc2UpIHtcclxuICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwLnNldCh0cnVlKTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcblxyXG4gICAgdGhpcy5zYXBCcFNlcnZpY2UuZ2V0R2xvYmFsSWQocmVmcmVzaCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMuZ2xvYmFsSWRMaXN0LnNldChyZXMpO1xyXG4gICAgICB0aGlzLnJlZnJlc2hpbmdEYXRhRnJvbVNhcC5zZXQoZmFsc2UpO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBsb2FkUGF5bWVudFRlcm1zKHJlZnJlc2ggPSBmYWxzZSkge1xyXG4gICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAuc2V0KHRydWUpO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuXHJcbiAgICB0aGlzLnNhcEJwU2VydmljZS5nZXRQYXltZW50VGVybXMocmVmcmVzaCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMucGF5bWVudFRlcm1zTGlzdC5zZXQocmVzKTtcclxuICAgICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAuc2V0KGZhbHNlKTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5lZGl0TW9kZSkge1xyXG4gICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLmZvcm0uY29udHJvbHMuY2FyZFR5cGUudmFsdWU7XHJcbiAgICAgICAgaWYgKHR5cGUpIHtcclxuICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdFBheW1lbnRUZXJtKHR5cGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZFByaWNlTGlzdChyZWZyZXNoID0gZmFsc2UpIHtcclxuICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwLnNldCh0cnVlKTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcblxyXG4gICAgdGhpcy5zYXBCcFNlcnZpY2UuZ2V0UHJpY2VsaXN0KHJlZnJlc2gpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLnByaWNlTGlzdC5zZXQocmVzKTtcclxuICAgICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAuc2V0KGZhbHNlKTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5lZGl0TW9kZSkge1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRQTCA9IHJlcy5maW5kKHBsID0+IHBsLmlzRGVmYXVsdCk7XHJcbiAgICAgICAgaWYgKGRlZmF1bHRQTCkge1xyXG4gICAgICAgICAgdGhpcy5mb3JtLmdldCgncHJpY2VMaXN0JykhLnNldFZhbHVlKGRlZmF1bHRQTC5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBsb2FkUXJ5R3JvdXAocmVmcmVzaCA9IGZhbHNlLCBiYXNlVmFsdWVzPzogU2FwQnBRcnlHcm91cE1vZGVsW10pIHtcclxuICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwLnNldCh0cnVlKTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcblxyXG4gICAgdGhpcy5zYXBCcFNlcnZpY2UuZ2V0UXJ5R3JvdXAocmVmcmVzaCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIGNvbnN0IHVwZGF0ZWRRcnlHcm91cCA9IHJlcy5tYXAoKGdyb3VwLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGdyb3VwLnZhbHVlID0gYmFzZVZhbHVlcyA/IGJhc2VWYWx1ZXNbaW5kZXhdLnZhbHVlIDogJ04nO1xyXG4gICAgICAgIHJldHVybiBncm91cDtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMucXJ5R3JvdXBMaXN0LnNldCh1cGRhdGVkUXJ5R3JvdXApO1xyXG5cclxuICAgICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAuc2V0KGZhbHNlKTtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZEN1cnJlbmN5KHJlZnJlc2ggPSBmYWxzZSkge1xyXG4gICAgdGhpcy5yZWZyZXNoaW5nRGF0YUZyb21TYXAuc2V0KHRydWUpO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuXHJcbiAgICB0aGlzLnNhcEJwU2VydmljZS5nZXRDdXJyZW5jeShyZWZyZXNoKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy5jdXJyZW5jeUxpc3Quc2V0KHJlcyk7XHJcbiAgICAgIHRoaXMucmVmcmVzaGluZ0RhdGFGcm9tU2FwLnNldChmYWxzZSk7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGxvYWRUYXhlcyhyZWZyZXNoID0gZmFsc2UpIHtcclxuICAgIHRoaXMucmVmcmVzaGluZ1RheC5zZXQodHJ1ZSk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG5cclxuICAgIHRoaXMuc2FwQnBTZXJ2aWNlLmdldFRheGVzKHJlZnJlc2gpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLnRheGVzTGlzdC5zZXQocmVzKTtcclxuICAgICAgdGhpcy5yZWZyZXNoaW5nVGF4LnNldChmYWxzZSk7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFNoaXBUb0FkZHJlc3MoZXZlbnQ6IFNhcEJwQWRkcmVzc01vZGVsW10pIHtcclxuICAgIHRoaXMuc2hpcFRvQWRkcmVzcy5zZXQoZXZlbnQpO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHNldEJpbGxUb0FkZHJlc3MoZXZlbnQ6IFNhcEJwQWRkcmVzc01vZGVsW10pIHtcclxuICAgIHRoaXMuYmlsbFRvQWRkcmVzcy5zZXQoZXZlbnQpO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHNldEFkZHJlc3NDaGFuZ2VkKGV2ZW50OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmFkZHJlc3NDaGFuZ2VkLnNldChldmVudCk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgZGlzYWJsZUVkaXRJbmZvcm1hdGlvbkRhdGEoYnBEZXRhaWxzOiBTYXBCcE1vZGVsKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zYXBCcEhlbHBlclNlcnZpY2UuZGlzYWJsZUVkaXRJbmZvcm1hdGlvbkRhdGEoXHJcbiAgICAgIHRoaXMudXNlclNldHRpbmdzKCkuc2FwQnBFZGl0QXV0aCxcclxuICAgICAgdGhpcy5mb3JtLFxyXG4gICAgICBicERldGFpbHNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBkaXNhYmxlRWRpdENvbnRhY3RQZXJzb24oYnBEZXRhaWxzOiBTYXBCcE1vZGVsKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zYXBCcEhlbHBlclNlcnZpY2UuZGlzYWJsZUVkaXRDb250YWN0UGVyc29uKFxyXG4gICAgICB0aGlzLnVzZXJTZXR0aW5ncygpLnNhcEJwRWRpdEF1dGgsXHJcbiAgICAgIHRoaXMuZm9ybSxcclxuICAgICAgYnBEZXRhaWxzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZGlzYWJsZUVkaXRCaWxsVG9BZGRyZXNzKGJwRGV0YWlsczogU2FwQnBNb2RlbCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2FwQnBIZWxwZXJTZXJ2aWNlLmRpc2FibGVFZGl0QmlsbFRvQWRkcmVzcyhcclxuICAgICAgdGhpcy51c2VyU2V0dGluZ3MoKS5zYXBCcEVkaXRBdXRoLFxyXG4gICAgICB0aGlzLmZvcm0sXHJcbiAgICAgIGJwRGV0YWlsc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGRpc2FibGVFZGl0U2hpcFRvQWRkcmVzcyhicERldGFpbHM6IFNhcEJwTW9kZWwpIHtcclxuICAgIHJldHVybiB0aGlzLnNhcEJwSGVscGVyU2VydmljZS5kaXNhYmxlRWRpdFNoaXBUb0FkZHJlc3MoXHJcbiAgICAgIHRoaXMudXNlclNldHRpbmdzKCkuc2FwQnBFZGl0QXV0aCxcclxuICAgICAgdGhpcy5mb3JtLFxyXG4gICAgICBicERldGFpbHNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBkaXNhYmxlQWRkU2hpcFRvQWRkcmVzcyhicERldGFpbHM6IFNhcEJwTW9kZWwpIHtcclxuICAgIHJldHVybiB0aGlzLnNhcEJwSGVscGVyU2VydmljZS5kaXNhYmxlQWRkU2hpcFRvQWRkcmVzcyhcclxuICAgICAgdGhpcy51c2VyU2V0dGluZ3MoKS5zYXBCcEVkaXRBdXRoLFxyXG4gICAgICB0aGlzLmZvcm0sXHJcbiAgICAgIGJwRGV0YWlsc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGRpc2FibGVBZGRDb250YWN0UGVyc29uKGJwRGV0YWlsczogU2FwQnBNb2RlbCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2FwQnBIZWxwZXJTZXJ2aWNlLmRpc2FibGVBZGRDb250YWN0UGVyc29uKFxyXG4gICAgICB0aGlzLnVzZXJTZXR0aW5ncygpLnNhcEJwRWRpdEF1dGgsXHJcbiAgICAgIHRoaXMuZm9ybSxcclxuICAgICAgYnBEZXRhaWxzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZGlzYWJsZUFkZEJpbGxUb0FkZHJlc3MoYnBEZXRhaWxzOiBTYXBCcE1vZGVsKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zYXBCcEhlbHBlclNlcnZpY2UuZGlzYWJsZUFkZEJpbGxUb0FkZHJlc3MoXHJcbiAgICAgIHRoaXMudXNlclNldHRpbmdzKCkuc2FwQnBFZGl0QXV0aCxcclxuICAgICAgdGhpcy5mb3JtLFxyXG4gICAgICBicERldGFpbHNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgaW5pdExvYWRlcnMoKSB7XHJcbiAgICAvLyB0aGlzLmxvYWRHcm91cENvZGVMaXN0KCk7XHJcbiAgICB0aGlzLmxvYWRTaGlwVHlwZSgpO1xyXG4gICAgdGhpcy5sb2FkSW5kdXN0cnkoKTtcclxuICAgIHRoaXMubG9hZFRlY2huaWNpYW4oKTtcclxuICAgIHRoaXMubG9hZFNhbGVzRW1wbG95ZWUoKTtcclxuICAgIHRoaXMubG9hZFRlcnJpdG9yeSgpO1xyXG4gICAgdGhpcy5sb2FkUGF5bWVudFRlcm1zKCk7XHJcbiAgICB0aGlzLmxvYWRQcmljZUxpc3QoKTtcclxuICAgIHRoaXMubG9hZEN1cnJlbmN5KCk7XHJcbiAgICB0aGlzLmxvYWRHbG9iYWxJZCgpO1xyXG5cclxuICAgIGlmICghdGhpcy5lZGl0TW9kZSkge1xyXG4gICAgICB0aGlzLmxvYWRRcnlHcm91cCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRFZGl0Rm9ybShicERldGFpbHM6IFNhcEJwTW9kZWwpIHtcclxuICAgIHRoaXMuZm9ybS5zZXRWYWx1ZSh7XHJcbiAgICAgIGNvdW50cnlDb2RlUGhvbmUxOiAnJyxcclxuICAgICAgY2FyZENvZGU6IGJwRGV0YWlscy5jYXJkQ29kZSxcclxuICAgICAgY2FyZE5hbWU6IGJwRGV0YWlscy5jYXJkTmFtZSxcclxuICAgICAgY2FyZFR5cGU6IGJwRGV0YWlscy5jYXJkVHlwZVxyXG4gICAgICAgID8gdGhpcy5jb252ZXJ0QnBUeXBlKGJwRGV0YWlscy5jYXJkVHlwZSlcclxuICAgICAgICA6IHRoaXMudXNlclNldHRpbmdzKCkub3JhY2xlQnBFZGl0XHJcbiAgICAgICAgICA/IFNhcEJwVHlwZUVudW0uTGVhZFxyXG4gICAgICAgICAgOiBTYXBCcFR5cGVFbnVtLkN1c3RvbWVyLFxyXG4gICAgICBjYXJkRm9yZWlnbk5hbWU6IGJwRGV0YWlscy5jYXJkRm9yaWduTmFtZSxcclxuICAgICAgZ3JvdXBDb2RlOiBicERldGFpbHMuZ3JvdXBDb2RlIHx8IG51bGwsXHJcbiAgICAgIGN1cnJlbmN5OiBicERldGFpbHMuY3VycmVuY3lcclxuICAgICAgICA/IGJwRGV0YWlscy5jdXJyZW5jeVxyXG4gICAgICAgIDogdGhpcy51c2VyU2V0dGluZ3MoKS5jdXJyZW5jeSxcclxuICAgICAgbGljVHJhZE51bTogYnBEZXRhaWxzLmxpY1RyYWROdW0sXHJcbiAgICAgIHBob25lMTogYnBEZXRhaWxzLnBob25lMSxcclxuICAgICAgcGhvbmUyOiBicERldGFpbHMucGhvbmUyLFxyXG4gICAgICBjZWxsdWxhcjogYnBEZXRhaWxzLmNlbGx1bGFyLFxyXG4gICAgICBmYXg6IGJwRGV0YWlscy5mYXgsXHJcbiAgICAgIGVtYWlsOiBicERldGFpbHMuZW1haWwsXHJcbiAgICAgIHdlYlNpdGU6IGJwRGV0YWlscy53ZWJTaXRlLFxyXG4gICAgICBzaGlwVHlwZTogYnBEZXRhaWxzLnNoaXBUeXBlQ29kZSxcclxuICAgICAgaW5kdXN0cnlDb2RlOiBicERldGFpbHMuaW5kdXN0cnlDb2RlLFxyXG4gICAgICBhZGRJZDogYnBEZXRhaWxzLmFkZElkLFxyXG4gICAgICB2YXRJZFVuaWZpZWQ6IGJwRGV0YWlscy52YXRJZFVuaWZpZWQsXHJcbiAgICAgIHJlZ2lzdGVyTm86IGJwRGV0YWlscy5yZWdpc3Rlck5vLFxyXG4gICAgICBub3RlczogYnBEZXRhaWxzLm5vdGVzLFxyXG4gICAgICB0ZWNobmljaWFuOiBicERldGFpbHMudGVjaG5pY2lhbkNvZGUsXHJcbiAgICAgIHNhbGVzRW1wbG95ZWU6IGJwRGV0YWlscy5zYWxlc1BlcnNvbkNvZGUsXHJcbiAgICAgIHRlcnJpdG9yeTogYnBEZXRhaWxzLnRlcnJpdG9yeUNvZGUsXHJcbiAgICAgIGdsb2JhbEFjY291bnQ6IGJwRGV0YWlscy5nbG9iYWxBY2NvdW50LFxyXG4gICAgICBnbG9iYWxJZDogYnBEZXRhaWxzLmdsb2JhbElkLFxyXG4gICAgICBwYXltZW50Q29kZTogYnBEZXRhaWxzLnBheW1lbnRDb2RlLFxyXG4gICAgICBwcmljZUxpc3Q6IGJwRGV0YWlscy5wcmljZWxpc3RDb2RlLFxyXG4gICAgICBkZWxpdmVyeUluc3RydWN0aW9uczogYnBEZXRhaWxzLmRlbGl2ZXJ5SW5zdHJ1Y3Rpb25zLFxyXG4gICAgICBmcmVlVGV4dDogYnBEZXRhaWxzLmZyZWVUZXh0LFxyXG4gICAgICBpbmFjdGl2ZUNvbW1lbnQ6IGJwRGV0YWlscy5pbmFjdGl2ZUNvbW1lbnQsXHJcbiAgICAgIHN0YXR1czogYnBEZXRhaWxzLmluYWN0aXZlUmVhc29uLFxyXG4gICAgICB2YXRTdGF0dXM6IGJwRGV0YWlscy52YXRTdGF0dXMsXHJcbiAgICAgIHRheENvZGU6IGJwRGV0YWlscy50YXhDb2RlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VmFsaWRhdG9yc0luRWRpdChicERldGFpbHM6IFNhcEJwTW9kZWwpIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVFZGl0SW5mb3JtYXRpb25EYXRhKGJwRGV0YWlscykpIHtcclxuICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmNhcmRDb2RlLnNldFZhbGlkYXRvcnMobnVsbCk7XHJcbiAgICAgIHRoaXMuZm9ybS5jb250cm9scy5jYXJkTmFtZS5zZXRWYWxpZGF0b3JzKG51bGwpO1xyXG4gICAgICB0aGlzLmZvcm0uY29udHJvbHMuY2FyZFR5cGUuc2V0VmFsaWRhdG9ycyhudWxsKTtcclxuICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmdyb3VwQ29kZS5zZXRWYWxpZGF0b3JzKG51bGwpO1xyXG4gICAgICB0aGlzLmZvcm0uY29udHJvbHMuY3VycmVuY3kuc2V0VmFsaWRhdG9ycyhudWxsKTtcclxuICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLnBob25lMS5zZXRWYWxpZGF0b3JzKG51bGwpO1xyXG4gICAgICB0aGlzLmZvcm0uY29udHJvbHMuc2FsZXNFbXBsb3llZS5zZXRWYWxpZGF0b3JzKG51bGwpO1xyXG4gICAgICB0aGlzLmZvcm0uY29udHJvbHMuZ2xvYmFsQWNjb3VudC5zZXRWYWxpZGF0b3JzKG51bGwpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0UGhvbmVQbGFjZWhvbGRlcihjb3VudHJ5Q29kZTogc3RyaW5nKSB7XHJcbiAgICAvLyAyMCBzYXAgbGVuZ3RoLCAtNCBzcGFjZXMsICsxMCBleHRyYSBjaGFyIGZvciB2aXNpYmxlXHJcbiAgICB0aGlzLnBob25lTWF4TGVuZ3RoLnNldCgyMCAtIGNvdW50cnlDb2RlLmxlbmd0aCAtIDQgKyAxMCk7XHJcbiAgICBjb25zdCBleHRMZW5ndGggPSB0aGlzLnBob25lTWF4TGVuZ3RoKCkgLSAyMDtcclxuXHJcbiAgICBsZXQgcGhvbmVQbGFjZWhvbGRlciA9ICcoOTk5KSA5OTkgOTk5OSBleHQuICc7XHJcbiAgICBsZXQgcGhvbmVNYXNrID0gJygwMDApIDAwMCAwMDAwIGV4dC4gJztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4dExlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHBob25lUGxhY2Vob2xkZXIgKz0gJzknO1xyXG4gICAgICBwaG9uZU1hc2sgKz0gJzknO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGhvbmVQbGFjZWhvbGRlci5zZXQocGhvbmVQbGFjZWhvbGRlcik7XHJcbiAgICB0aGlzLnBob25lTWFzay5zZXQocGhvbmVNYXNrKTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcHJlcGFyZURhdGFUb1NlbmQoKTogU2FwQnBDcmVhdGVNb2RlbCB7XHJcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKTtcclxuICAgIGxldCBwaG9uZTEgPSB2YWx1ZXMucGhvbmUxO1xyXG5cclxuICAgIGlmICghdGhpcy5lZGl0TW9kZSAmJiB0aGlzLnBob25lTWFzaygpKSB7XHJcbiAgICAgIHBob25lMSA9XHJcbiAgICAgICAgdmFsdWVzLmNvdW50cnlDb2RlUGhvbmUxICtcclxuICAgICAgICAnLScgK1xyXG4gICAgICAgIHZhbHVlcy5waG9uZTEuc2xpY2UoMCwgMykgK1xyXG4gICAgICAgICctJyArXHJcbiAgICAgICAgdmFsdWVzLnBob25lMS5zbGljZSgzLCA2KSArXHJcbiAgICAgICAgJy0nICtcclxuICAgICAgICB2YWx1ZXMucGhvbmUxLnNsaWNlKDYsIDEwKSArXHJcbiAgICAgICAgKHZhbHVlcy5waG9uZTEuc3BsaXQoJ3QnKVsxXSA/ICd4JyArIHZhbHVlcy5waG9uZTEuc3BsaXQoJ3QnKVsxXSA6ICcnKTtcclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuZWRpdE1vZGUpIHtcclxuICAgICAgcGhvbmUxID0gdmFsdWVzLmNvdW50cnlDb2RlUGhvbmUxICsgJyAnICsgcGhvbmUxO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGNhcmRGb3JpZ25OYW1lOiB2YWx1ZXMuY2FyZEZvcmVpZ25OYW1lLFxyXG4gICAgICBncm91cENvZGU6IHZhbHVlcy5ncm91cENvZGUgYXMgbnVtYmVyLFxyXG4gICAgICBjdXJyZW5jeTogdmFsdWVzLmN1cnJlbmN5LFxyXG4gICAgICBsaWNUcmFkTnVtOiB2YWx1ZXMubGljVHJhZE51bSxcclxuICAgICAgcGhvbmUxOiBwaG9uZTEsXHJcbiAgICAgIHBob25lMjogdmFsdWVzLnBob25lMixcclxuICAgICAgY2VsbHVsYXI6IHZhbHVlcy5jZWxsdWxhcixcclxuICAgICAgZmF4OiB2YWx1ZXMuZmF4LFxyXG4gICAgICBlbWFpbDogdmFsdWVzLmVtYWlsLFxyXG4gICAgICB3ZWJTaXRlOiB2YWx1ZXMud2ViU2l0ZSxcclxuICAgICAgc2hpcFR5cGVDb2RlOiB2YWx1ZXMuc2hpcFR5cGUgYXMgbnVtYmVyLFxyXG4gICAgICBpbmR1c3RyeUNvZGU6IHZhbHVlcy5pbmR1c3RyeUNvZGUgYXMgbnVtYmVyLFxyXG4gICAgICBhZGRJZDogdmFsdWVzLmFkZElkLFxyXG4gICAgICB2YXRJZFVuaWZpZWQ6IHZhbHVlcy52YXRJZFVuaWZpZWQsXHJcbiAgICAgIHJlZ2lzdGVyTm86IHZhbHVlcy5yZWdpc3Rlck5vLFxyXG4gICAgICBub3RlczogdmFsdWVzLm5vdGVzLFxyXG4gICAgICB0ZWNobmljaWFuQ29kZTogdmFsdWVzLnRlY2huaWNpYW4gYXMgbnVtYmVyLFxyXG4gICAgICBzYWxlc1BlcnNvbkNvZGU6IHZhbHVlcy5zYWxlc0VtcGxveWVlIGFzIG51bWJlcixcclxuICAgICAgdGVycml0b3J5Q29kZTogdmFsdWVzLnRlcnJpdG9yeSBhcyBudW1iZXIsXHJcbiAgICAgIGdsb2JhbEFjY291bnQ6IHZhbHVlcy5nbG9iYWxBY2NvdW50LFxyXG4gICAgICBnbG9iYWxJZDogdmFsdWVzLmdsb2JhbElkLFxyXG4gICAgICB2YWxpZEZvcjogdmFsdWVzLnN0YXR1cyA9PT0gJ0FjdGl2ZScgPyAnWScgOiAnTicsXHJcbiAgICAgIHBheW1lbnRDb2RlOiB2YWx1ZXMucGF5bWVudENvZGUgYXMgbnVtYmVyLFxyXG4gICAgICBwcmljZWxpc3RDb2RlOiB2YWx1ZXMucHJpY2VMaXN0IGFzIG51bWJlcixcclxuICAgICAgZGVsaXZlcnlJbnN0cnVjdGlvbnM6IHZhbHVlcy5kZWxpdmVyeUluc3RydWN0aW9ucyxcclxuICAgICAgZnJlZVRleHQ6IHZhbHVlcy5mcmVlVGV4dCxcclxuICAgICAgY29udGFjdFBlcnNvbkxpc3Q6IHRoaXMuY29udGFjdFBlcnNvbnMoKSB8fCBbXSxcclxuICAgICAgYWRkcmVzc1NoaXBUb0xpc3Q6IHRoaXMuc2hpcFRvQWRkcmVzcygpIHx8IFtdLFxyXG4gICAgICBhZGRyZXNzQmlsbFRvTGlzdDogdGhpcy5iaWxsVG9BZGRyZXNzKCkgfHwgW10sXHJcbiAgICAgIHFyeUdyb3VwTGlzdDogdGhpcy5xcnlHcm91cExpc3QoKSxcclxuICAgICAgYWRkcmVzc0NoYW5nZTogdGhpcy5hZGRyZXNzQ2hhbmdlZCgpLFxyXG4gICAgICBjb250YWN0Q2hhbmdlOiB0aGlzLmNvbnRhY3RQZXJzb25DaGFuZ2VkKCksXHJcbiAgICAgIGNhcmRDb2RlOiB2YWx1ZXMuY2FyZENvZGUsXHJcbiAgICAgIGNhcmROYW1lOiB2YWx1ZXMuY2FyZE5hbWUsXHJcbiAgICAgIGNhcmRUeXBlOiB0aGlzLmNvbnZlcnRUb1RyYW5zbGF0ZUJwVHlwZSh2YWx1ZXMuY2FyZFR5cGUpLFxyXG4gICAgICBvbGRDYXJkQ29kZTogdGhpcy5vbGRDYXJkQ29kZSB8fCBudWxsLFxyXG4gICAgICBpbmFjdGl2ZVJlYXNvbjogdmFsdWVzLnN0YXR1cyxcclxuICAgICAgaW5hY3RpdmVDb21tZW50OiB2YWx1ZXMuc3RhdHVzID09PSAnQWN0aXZlJyA/ICcnIDogdmFsdWVzLmluYWN0aXZlQ29tbWVudCxcclxuICAgICAgdmF0U3RhdHVzOiB2YWx1ZXMudmF0U3RhdHVzLFxyXG4gICAgICB0YXhDb2RlOiB2YWx1ZXMudGF4Q29kZSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldE5ld0JwSWQoYnBUeXBlOiBTYXBCcFR5cGVFbnVtKSB7XHJcbiAgICB0aGlzLnNhcEJwU2VydmljZS5nZXROZXh0QnBJZChicFR5cGUpLnN1YnNjcmliZShuZXdCcElkID0+IHtcclxuICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmNhcmRDb2RlLnNldFZhbHVlKG5ld0JwSWQpO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldERlZmF1bHRQYXltZW50VGVybSh2YWw6IFNhcEJwVHlwZUVudW0pIHtcclxuICAgIGlmICh0aGlzLnBheW1lbnRUZXJtc0xpc3QoKT8ubGVuZ3RoID4gMCkge1xyXG4gICAgICBpZiAodmFsID09PSBTYXBCcFR5cGVFbnVtLlN1cHBsaWVyKSB7XHJcbiAgICAgICAgY29uc3QgcGF5bWVudFRlcm1Gb3VuZCA9IHRoaXMucGF5bWVudFRlcm1zTGlzdCgpLmZpbmQoXHJcbiAgICAgICAgICBwYXltZW50VGVybSA9PiBwYXltZW50VGVybS5pc0RlZmF1bHRGb3JTdXBwbGllclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHBheW1lbnRUZXJtRm91bmQpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5wYXltZW50Q29kZS5zZXRWYWx1ZShwYXltZW50VGVybUZvdW5kLmlkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgcGF5bWVudFRlcm1Gb3VuZCA9IHRoaXMucGF5bWVudFRlcm1zTGlzdCgpLmZpbmQoXHJcbiAgICAgICAgICBwYXltZW50VGVybSA9PiBwYXltZW50VGVybS5pc0RlZmF1bHRGb3JDdXN0b21lclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHBheW1lbnRUZXJtRm91bmQpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5wYXltZW50Q29kZS5zZXRWYWx1ZShwYXltZW50VGVybUZvdW5kLmlkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRCcFR5cGVBbGxvd2VkKCkge1xyXG4gICAgY29uc3QgYnBUeXBlQWxsb3dlZFZhbHVlcyA9IFtdO1xyXG4gICAgY29uc3QgY2FyZFR5cGUgPSB0aGlzLmZvcm0uY29udHJvbHMuY2FyZFR5cGUudmFsdWU7XHJcblxyXG4gICAgaWYgKHRoaXMuZWRpdE1vZGUpIHtcclxuICAgICAgaWYgKHRoaXMudXNlclNldHRpbmdzKCkub3JhY2xlQnBFZGl0KSB7XHJcbiAgICAgICAgYnBUeXBlQWxsb3dlZFZhbHVlcy5wdXNoKGNhcmRUeXBlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoY2FyZFR5cGUgPT09IFNhcEJwVHlwZUVudW0uTGVhZCkge1xyXG4gICAgICAgICAgYnBUeXBlQWxsb3dlZFZhbHVlcy5wdXNoKFNhcEJwVHlwZUVudW0uTGVhZCk7XHJcbiAgICAgICAgICBicFR5cGVBbGxvd2VkVmFsdWVzLnB1c2goU2FwQnBUeXBlRW51bS5DdXN0b21lcik7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjYXJkVHlwZSA9PT0gU2FwQnBUeXBlRW51bS5TdXBwbGllcikge1xyXG4gICAgICAgICAgYnBUeXBlQWxsb3dlZFZhbHVlcy5wdXNoKFNhcEJwVHlwZUVudW0uU3VwcGxpZXIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBicFR5cGVBbGxvd2VkVmFsdWVzLnB1c2goU2FwQnBUeXBlRW51bS5DdXN0b21lcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnVzZXJTZXR0aW5ncygpLmJwRWRpdFR5cGVBbGxvd2VkLmZvckVhY2goYnBUeXBlID0+IHtcclxuICAgICAgICBicFR5cGVBbGxvd2VkVmFsdWVzLnB1c2goYnBUeXBlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5icFR5cGVBbGxvd2VkLnNldChicFR5cGVBbGxvd2VkVmFsdWVzKTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnZlcnRCcFR5cGUodHlwZTogU2FwQnBUeXBlVHJhbnNsYXRlRW51bSk6IFNhcEJwVHlwZUVudW0ge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgU2FwQnBUeXBlVHJhbnNsYXRlRW51bS5DdXN0b21lcjpcclxuICAgICAgICByZXR1cm4gU2FwQnBUeXBlRW51bS5DdXN0b21lcjtcclxuICAgICAgY2FzZSBTYXBCcFR5cGVUcmFuc2xhdGVFbnVtLkxlYWQ6XHJcbiAgICAgICAgcmV0dXJuIFNhcEJwVHlwZUVudW0uTGVhZDtcclxuICAgICAgY2FzZSBTYXBCcFR5cGVUcmFuc2xhdGVFbnVtLlN1cHBsaWVyOlxyXG4gICAgICAgIHJldHVybiBTYXBCcFR5cGVFbnVtLlN1cHBsaWVyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb252ZXJ0VG9UcmFuc2xhdGVCcFR5cGUoXHJcbiAgICB0eXBlOiBTYXBCcFR5cGVFbnVtXHJcbiAgKTogU2FwQnBUeXBlVHJhbnNsYXRlRW51bSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBTYXBCcFR5cGVFbnVtLkN1c3RvbWVyOlxyXG4gICAgICAgIHJldHVybiBTYXBCcFR5cGVUcmFuc2xhdGVFbnVtLkN1c3RvbWVyO1xyXG4gICAgICBjYXNlIFNhcEJwVHlwZUVudW0uTGVhZDpcclxuICAgICAgICByZXR1cm4gU2FwQnBUeXBlVHJhbnNsYXRlRW51bS5MZWFkO1xyXG4gICAgICBjYXNlIFNhcEJwVHlwZUVudW0uU3VwcGxpZXI6XHJcbiAgICAgICAgcmV0dXJuIFNhcEJwVHlwZVRyYW5zbGF0ZUVudW0uU3VwcGxpZXI7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNhcEJwVXNlclNldHRpbmdzIHtcclxuICBwaG9uZU1hc2s6IGJvb2xlYW47XHJcbiAgYnBFZGl0U2FsZXNQZXJzb25PbkFkZHJlc3M6IGJvb2xlYW47XHJcbiAgYnBUYXhUeXBlOiBCcFRheFR5cGVFbnVtO1xyXG4gIG9yYWNsZUJwRWRpdDogYm9vbGVhbjtcclxuICBjdXJyZW5jeTogc3RyaW5nO1xyXG4gIGJwRWRpdEFsbG93Q29udmVydExlYWQ6IGJvb2xlYW47XHJcbiAgc2FwQnBFZGl0QXV0aDogU2FwQnBFZGl0QXV0aEZsYWdzRW51bTtcclxuICBicEVkaXRUeXBlQWxsb3dlZDogU2FwQnBUeXBlRW51bVtdO1xyXG4gIGNvdW50cnk6IHN0cmluZztcclxufVxyXG4iXX0=