@bpost/bp-address-auto-complete-by-component 1.1.29 → 1.1.31

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.
@@ -480,6 +480,11 @@ export class LibAddressAutocompleteByComponentComponent {
480
480
  this.boxNumberAutofillData = this.autofillData;
481
481
  }
482
482
  }
483
+ if (this.minLevel == ADDRESSLEVEL.BOX_NUMBER) {
484
+ if (this.selectedAddress.boxNumber) {
485
+ this.boxNumberAutofillData = this.autofillData;
486
+ }
487
+ }
483
488
  }
484
489
  this.addressCompleteEventEmitter.emit(this.selectedAddress);
485
490
  this.emittedAddress = this.selectedAddress;
@@ -929,9 +934,15 @@ export class LibAddressAutocompleteByComponentComponent {
929
934
  this.autocompleteBoxNb.clearWidget();
930
935
  this.autocompleteBoxNb.searchText = '';
931
936
  */
932
- this.autocompleteStreetNb.searchText = '';
933
- this.autocompleteBoxNb.searchText = '';
934
- this.autocompleteBoxNb.streetNumber = '';
937
+ // Guard: only clear when street-number is not already validated.
938
+ // resetStreet() always sets addressIsComplete=false before calling setAddress(null,3),
939
+ // so user-initiated street changes are unaffected. Without this guard the post-prefill
940
+ // autofill CD cycle clears searchText causing a inputText mismatch -> clearWidget().
941
+ if (!this.autocompleteStreetNb.addressIsComplete) {
942
+ this.autocompleteStreetNb.searchText = '';
943
+ this.autocompleteBoxNb.searchText = '';
944
+ this.autocompleteBoxNb.streetNumber = '';
945
+ }
935
946
  break;
936
947
  // STREET Number
937
948
  case 2:
@@ -1012,8 +1023,31 @@ export class LibAddressAutocompleteByComponentComponent {
1012
1023
  console.log('lib::setAddressStreetNumber - streetnumber: ', streetNumber);
1013
1024
  console.log('lib::setAddressStreetNumber - streetAddress: ', this.streetAddress);
1014
1025
  }
1015
- this.streetNumberAddress = this.streetAddress;
1016
- this.selectedAddress = this.streetAddress;
1026
+ if (this.suggestionLevel === SuggestionLevelType.None && this.streetAddress.streetNumber !== streetNumber) {
1027
+ const combined = { ...this.streetAddress };
1028
+ delete combined.pdpId;
1029
+ delete combined.mailBoxid; // mixed-case variant
1030
+ delete combined.mailBoxId; // camelCase variant (internal API field name)
1031
+ delete combined.suffixId;
1032
+ delete combined.isComplete;
1033
+ delete combined.latitude;
1034
+ delete combined.longitude;
1035
+ delete combined.perspectiveCode;
1036
+ delete combined.coordinateSystem;
1037
+ delete combined.reliability;
1038
+ delete combined.businessName;
1039
+ delete combined.listOfBoxes;
1040
+ delete combined.nis9;
1041
+ if (combined.geoSanction) {
1042
+ combined.geoSanction = combined.geoSanction.substring(0, 25);
1043
+ }
1044
+ this.streetNumberAddress = combined;
1045
+ this.selectedAddress = combined;
1046
+ }
1047
+ else {
1048
+ this.streetNumberAddress = this.streetAddress;
1049
+ this.selectedAddress = this.streetAddress;
1050
+ }
1017
1051
  this.selectedAddress.houseNumber = streetNumber;
1018
1052
  this.selectedAddress.streetNumber = streetNumber;
1019
1053
  /*
@@ -1032,7 +1066,22 @@ export class LibAddressAutocompleteByComponentComponent {
1032
1066
  setAddressBoxNumber(boxNumber) {
1033
1067
  console.log('set box number value:', boxNumber);
1034
1068
  //this.streetNumberAddress = this.streetAddress;
1035
- this.selectedAddress = this.streetNumberAddress;
1069
+ if ((this.suggestionLevel === SuggestionLevelType.None || this.suggestionLevel === SuggestionLevelType.StreetNumber) && this.streetNumberAddress.boxNumber !== boxNumber) {
1070
+ const combined = { ...this.streetNumberAddress };
1071
+ delete combined.mailBoxid; // mixed-case variant
1072
+ delete combined.mailBoxId; // camelCase variant (internal API field name)
1073
+ delete combined.suffixId;
1074
+ delete combined.isComplete;
1075
+ delete combined.businessName;
1076
+ delete combined.listOfBoxes;
1077
+ if (combined.geoSanction) {
1078
+ combined.geoSanction = combined.geoSanction.substring(0, 35);
1079
+ }
1080
+ this.selectedAddress = combined;
1081
+ }
1082
+ else {
1083
+ this.selectedAddress = this.streetNumberAddress;
1084
+ }
1036
1085
  this.selectedAddress.boxNumber = boxNumber;
1037
1086
  this.boxNumber = boxNumber;
1038
1087
  this.notifyAddressComplete();
@@ -1148,7 +1197,23 @@ export class LibAddressAutocompleteByComponentComponent {
1148
1197
  this.minLevel = ADDRESSLEVEL.STREET;
1149
1198
  const streetNumber = this.prefillData.parameters.streetNumber;
1150
1199
  const boxNumber = this.prefillData.parameters.boxNumber;
1151
- if (boxNumber && !address.boxNumber) {
1200
+ if (streetNumber) {
1201
+ // User has a streetNumber to prefill - trigger street-number prefill flow.
1202
+ // onStreetNumberPrefillEvent will handle the box number prefill if needed.
1203
+ this.prefillData.prefillStreetPerfectMatchFound = true;
1204
+ this.prefillData.prefillStreetPerfectMatchSuggestion = { address: { ...address } };
1205
+ this.prefillData.parameters.minLevel = ADDRESSLEVEL.STREET_NUMBER;
1206
+ this.prefillData.parameters.streetName = address.streetName;
1207
+ this.prefillData.parameters.postalCode = address.postalCode;
1208
+ this.prefillData.parameters.municipalityName = address.localityName || address.municipalityName;
1209
+ this.streetNumberPrefillData = this.prefillData;
1210
+ // Do NOT set boxNumberPrefillData here: it shares the same prefillData reference,
1211
+ // which would immediately overwrite minLevel to BOX_NUMBER (1) before Angular
1212
+ // change detection runs, causing the street-number component to see minLevel=1
1213
+ // and skip its prefill. Let onStreetNumberPrefillEvent set up box number prefill.
1214
+ }
1215
+ else if (boxNumber && !address.boxNumber) {
1216
+ // No streetNumber to prefill: jump directly to box number prefill.
1152
1217
  this.prefillData.parameters.minLevel = ADDRESSLEVEL.BOX_NUMBER;
1153
1218
  this.boxNumberPrefillData = this.prefillData;
1154
1219
  }
@@ -1238,11 +1303,13 @@ export class LibAddressAutocompleteByComponentComponent {
1238
1303
  if (this.showDebugMessageToConsole) {
1239
1304
  console.warn('lib::street: prefill - transmitting prefill data for streetNumber :', this.prefillData);
1240
1305
  }
1241
- if (address.houseNumber) {
1306
+ if (address.houseNumber && !streetNumber) {
1307
+ // No street number in prefill params: use the street suggestion's houseNumber via autofill
1242
1308
  this.setAddress(address, ADDRESSLEVEL.STREET);
1243
1309
  this.minLevel = ADDRESSLEVEL.STREET_NUMBER;
1244
1310
  }
1245
1311
  else {
1312
+ // Street number given in prefill params (or no houseNumber in suggestion): trigger street-number prefill
1246
1313
  this.streetNumberPrefillData = this.prefillData;
1247
1314
  }
1248
1315
  }
@@ -1278,10 +1345,35 @@ export class LibAddressAutocompleteByComponentComponent {
1278
1345
  const addressIsComplete = address && address.hasOwnProperty('isComplete') && address.isComplete === true ? true : false;
1279
1346
  const addressIsNotInList = address && address.hasOwnProperty('not-in-list') && address['not-in-list'] === true ? true : false;
1280
1347
  if (addressIsComplete && !addressIsNotInList) {
1281
- // found address - perfect matchat street number level
1282
- // Nothing to do anymore
1283
- this.autocompleteStreetNb.addressIsComplete = true;
1284
- this.quitPrefillMode();
1348
+ // found address - perfect match at street number level
1349
+ const boxNumber = this.prefillData ? this.prefillData.parameters.boxNumber : null;
1350
+ if (this.notInListAllowed && boxNumber) {
1351
+ // User prefilled a box number and notInListAllowed - continue to box number prefill
1352
+ this.autocompleteStreetNb.addressIsComplete = true;
1353
+ this.addressParams.minLevel = ADDRESSLEVEL.BOX_NUMBER;
1354
+ this.prefillData = event.prefillData;
1355
+ this.prefillData.ts = new Date();
1356
+ this.prefillData.parameters.minLevel = ADDRESSLEVEL.BOX_NUMBER;
1357
+ const suggestionAddress = this.prefillData.prefillStreetNumberPerfectMatchSuggestion.address;
1358
+ this.prefillData.parameters.postalCode = suggestionAddress.postalCode;
1359
+ this.prefillData.parameters.streetName = suggestionAddress.streetName;
1360
+ this.prefillData.parameters.streetNumber = suggestionAddress.houseNumber;
1361
+ this.prefillData.parameters.municipalityName = suggestionAddress.localityName;
1362
+ this.updatePostalCodeLocality(address);
1363
+ this.updateStreetName(address);
1364
+ this.updateStreetNumber(address);
1365
+ this.streetAddress = address;
1366
+ this.streetNumberAddress = address;
1367
+ this.autocompleteBoxNb.streetNumber = address.houseNumber;
1368
+ this.autocompleteBoxNb.searchText = '';
1369
+ this.boxNumberPrefillData = this.prefillData;
1370
+ }
1371
+ else {
1372
+ // Nothing to do anymore
1373
+ this.autocompleteStreetNb.addressIsComplete = true;
1374
+ this.setAddress(address, ADDRESSLEVEL.STREET_NUMBER);
1375
+ this.quitPrefillMode();
1376
+ }
1285
1377
  }
1286
1378
  else {
1287
1379
  this.addressParams.minLevel = ADDRESSLEVEL.BOX_NUMBER;
@@ -1375,13 +1467,52 @@ export class LibAddressAutocompleteByComponentComponent {
1375
1467
  const address = suggestion.address;
1376
1468
  this.updateStreetNumber(address);
1377
1469
  this.autocompleteStreetNb.selectedAddress = address;
1470
+ // Directly set the child input field to the API-returned house number.
1471
+ // This is critical when the prefilled number was invalid (e.g. 145896 → 56):
1472
+ // it ensures searchText='56' before quitPrefillMode() clears the prefilling flag,
1473
+ // so that Angular CD's ngOnChanges(inputText:'145896'→'56') sees matching values
1474
+ // and does NOT trigger clearWidget().
1475
+ if (address.houseNumber) {
1476
+ this.autocompleteStreetNb.searchText = address.houseNumber;
1477
+ }
1378
1478
  const addressIsComplete = address && address.hasOwnProperty('isComplete') && !address.hasOwnProperty('boxNumber') && address.isComplete === true ? true : false;
1379
1479
  const addressIsNotInList = address && address.hasOwnProperty('not-in-list') && address['not-in-list'] === true ? true : false;
1380
1480
  if (addressIsComplete && !addressIsNotInList) {
1381
- // found address - perfect matchat street number level
1382
- // Nothing to do anymore
1383
- this.autocompleteStreetNb.addressIsComplete = true;
1384
- this.quitPrefillMode();
1481
+ // found address - perfect match at street number level
1482
+ const boxNumber = this.prefillData ? this.prefillData.parameters.boxNumber : null;
1483
+ if (boxNumber && this.notInListAllowed) {
1484
+ // A boxNumber is present in prefill params AND notInListAllowed - continue to box number prefill.
1485
+ // When notInListAllowed=false, the address is already complete without a box number;
1486
+ // any prefilled box number is invalid and the API call must be skipped.
1487
+ this.autocompleteStreetNb.addressIsComplete = true;
1488
+ this.addressParams.minLevel = ADDRESSLEVEL.BOX_NUMBER;
1489
+ this.prefillData = event.prefillData;
1490
+ this.prefillData.ts = new Date();
1491
+ this.prefillData.parameters.minLevel = ADDRESSLEVEL.BOX_NUMBER;
1492
+ const suggestionAddress = this.prefillData.prefillStreetNumberPerfectMatchSuggestion.address;
1493
+ this.prefillData.parameters.municipalityName = suggestionAddress.localityName;
1494
+ this.prefillData.parameters.postalCode = suggestionAddress.postalCode;
1495
+ this.prefillData.parameters.streetName = suggestionAddress.streetName;
1496
+ this.prefillData.parameters.streetNumber = suggestionAddress.houseNumber;
1497
+ this.updatePostalCodeLocality(address);
1498
+ this.updateStreetName(address);
1499
+ this.updateStreetNumber(address);
1500
+ this.streetAddress = address;
1501
+ this.streetNumberAddress = address;
1502
+ this.autocompleteBoxNb.streetNumber = address.houseNumber;
1503
+ this.autocompleteBoxNb.searchText = '';
1504
+ this.boxNumberPrefillData = this.prefillData;
1505
+ }
1506
+ else {
1507
+ this.setAddress(address, ADDRESSLEVEL.STREET_NUMBER);
1508
+ // address.isComplete===true, so setAddress() correctly sets addressIsComplete=true
1509
+ // and the check mark should be visible. Do NOT suppress it here.
1510
+ // Null out autofill data so Angular CD does not re-trigger ngOnChanges(autofillData)
1511
+ // on the street-number child, which would call setSelectedAddress and set
1512
+ // addressIsComplete=true again via the autofill chain.
1513
+ this.streetNumberAutofillData = null;
1514
+ this.quitPrefillMode();
1515
+ }
1385
1516
  }
1386
1517
  else {
1387
1518
  this.addressParams.minLevel = ADDRESSLEVEL.BOX_NUMBER;
@@ -1401,8 +1532,16 @@ export class LibAddressAutocompleteByComponentComponent {
1401
1532
  // this.updatePostalCodeLocality(suggestionAddress);
1402
1533
  const boxNumber = this.prefillData.parameters.boxNumber;
1403
1534
  if (!addressIsNotInList && (boxNumber === null || boxNumber === undefined || boxNumber === '')) {
1535
+ // No box number in prefill params and the API reports isComplete=false (box number required).
1536
+ // Do NOT start box-number prefill: when boxNumber param is empty, the box-number
1537
+ // component receives searchText='' and never fires its prefill event, so
1538
+ // quitPrefillMode() would never be called, leaving prefilling=true forever.
1539
+ // Since isComplete=false the address is not complete — do NOT force addressIsComplete=true;
1540
+ // setAddress() will correctly leave the street-number checkmark unset, and the user
1541
+ // must enter the box number manually.
1404
1542
  this.setAddress(address, ADDRESSLEVEL.STREET_NUMBER);
1405
- // this.quitPrefillMode();
1543
+ this.quitPrefillMode();
1544
+ return;
1406
1545
  }
1407
1546
  else {
1408
1547
  this.updatePostalCodeLocality(address);
@@ -1424,33 +1563,32 @@ export class LibAddressAutocompleteByComponentComponent {
1424
1563
  }
1425
1564
  this.autocompleteBoxNb.searchText = '';
1426
1565
  }
1427
- /*
1428
- const boxNumber = this.prefillData.parameters.boxNumber;
1429
- if ( ! addressIsNotInList && (boxNumber === null || boxNumber === undefined || boxNumber === '') )
1430
- {
1431
- this.setAddress(address, ADDRESSLEVEL.STREET_NUMBER);
1432
- this.quitPrefillMode();
1433
- }
1434
- else
1435
- {
1436
- if (this.showDebugMessageToConsole) { console.log('lib::prefill: trigger checking box number match... ', this.prefillData); }
1437
- this.boxNumberPrefillData = this.prefillData;
1438
- }
1439
- */
1440
1566
  this.boxNumberPrefillData = this.prefillData;
1441
1567
  }
1442
1568
  }
1443
1569
  else {
1444
1570
  const prefillStreetNumber = this.prefillData.parameters.streetNumber;
1445
- const address = this.prefillData.prefillStreetPerfectMatchSuggestion.address;
1571
+ const address = this.prefillData.prefillStreetPerfectMatchSuggestion
1572
+ ? this.prefillData.prefillStreetPerfectMatchSuggestion.address
1573
+ : null;
1446
1574
  this.autocompleteBoxNb.streetNumber = '';
1447
1575
  if (prefillStreetNumber === null || prefillStreetNumber === undefined || prefillStreetNumber.length === 0) {
1448
1576
  this.setAddress(address, ADDRESSLEVEL.STREET);
1449
1577
  }
1450
1578
  else {
1451
- // address.houseNumber = prefillStreetNumber;
1452
- address.searchBarString = prefillStreetNumber;
1453
- this.setAddress(address, ADDRESSLEVEL.STREET_NUMBER);
1579
+ // The prefilled street number doesn't exist in the API (notInListAllowed=false).
1580
+ // Show the prefilled value in the input and leave the dropdown open so the
1581
+ // user can pick the correct house number from the suggestions.
1582
+ this.autocompleteStreetNb.searchText = prefillStreetNumber;
1583
+ // Keep streetNumberInput in sync with searchText so the child's inputText
1584
+ // ngOnChanges guard (notEqualIgnoreCase) does not trigger clearWidget()
1585
+ // once prefilling becomes false after quitPrefillMode().
1586
+ this.streetNumberInput = prefillStreetNumber;
1587
+ this.autocompleteStreetNb.isPrefillWithNoMatch = false;
1588
+ this.autocompleteStreetNb.addressIsComplete = false;
1589
+ this.autocompleteBoxNb.streetNumber = '';
1590
+ // Prevent the autofill Angular-CD chain from re-setting addressIsComplete=true.
1591
+ this.streetNumberAutofillData = null;
1454
1592
  }
1455
1593
  this.quitPrefillMode();
1456
1594
  }
@@ -1463,18 +1601,48 @@ export class LibAddressAutocompleteByComponentComponent {
1463
1601
  if (data.prefillBoxNumberPerfectMatchFound === true) {
1464
1602
  const suggestion = data.prefillBoxNumberPerfectMatchSuggestion;
1465
1603
  const address = suggestion.address;
1604
+ // When notInListAllowed, ensure user's prefilled values are used
1605
+ if (this.notInListAllowed) {
1606
+ if (this.prefillData.parameters.streetNumber) {
1607
+ address.houseNumber = this.prefillData.parameters.streetNumber;
1608
+ }
1609
+ if (this.prefillData.parameters.boxNumber) {
1610
+ address.boxNumber = this.prefillData.parameters.boxNumber;
1611
+ }
1612
+ }
1466
1613
  this.autocompleteBoxNb.selectedAddress = address;
1467
1614
  this.setAddress(address, ADDRESSLEVEL.BOX_NUMBER);
1468
1615
  }
1469
1616
  else {
1470
1617
  const prefillBoxNumber = this.prefillData.parameters.boxNumber;
1471
- const address = this.prefillData.prefillStreetNumberPerfectMatchSuggestion.address;
1618
+ const address = this.prefillData.prefillStreetNumberPerfectMatchSuggestion
1619
+ ? this.prefillData.prefillStreetNumberPerfectMatchSuggestion.address
1620
+ : null;
1472
1621
  if (prefillBoxNumber === null || prefillBoxNumber === undefined || prefillBoxNumber.length === 0) {
1473
1622
  this.setAddress(address, ADDRESSLEVEL.STREET_NUMBER);
1474
1623
  }
1475
- else {
1476
- // address.boxNumber = prefillBoxNumber;
1624
+ else if (address) {
1625
+ address.boxNumber = prefillBoxNumber;
1626
+ if (this.notInListAllowed && this.prefillData.parameters.streetNumber) {
1627
+ address.houseNumber = this.prefillData.parameters.streetNumber;
1628
+ }
1477
1629
  address.searchBarString = prefillBoxNumber;
1630
+ // For internal endpoint: clear IDs that are no longer valid when box number is not in the list.
1631
+ // - mailBoxId and suffixId are always cleared (valid street number + invalid box number).
1632
+ // - pdpId is also cleared when street number was also not-in-list (both invalid).
1633
+ const streetNumberWasNotInList = address.hasOwnProperty('not-in-list') && address['not-in-list'] === true;
1634
+ address.mailBoxId = null;
1635
+ address.mailBoxid = null;
1636
+ address.suffixId = null;
1637
+ if (address.geoSanction) {
1638
+ address.geoSanction = address.geoSanction.substring(0, 35);
1639
+ }
1640
+ if (streetNumberWasNotInList) {
1641
+ address.pdpId = null;
1642
+ if (address.geoSanction) {
1643
+ address.geoSanction = address.geoSanction.substring(0, 25);
1644
+ }
1645
+ }
1478
1646
  this.setAddress(address, ADDRESSLEVEL.BOX_NUMBER);
1479
1647
  }
1480
1648
  }
@@ -1488,29 +1656,68 @@ export class LibAddressAutocompleteByComponentComponent {
1488
1656
  if (data.prefillBoxNumberPerfectMatchFound === true) {
1489
1657
  const suggestion = data.prefillBoxNumberPerfectMatchSuggestion;
1490
1658
  const address = suggestion.address;
1659
+ // When notInListAllowed, ensure user's prefilled values are used
1660
+ if (this.notInListAllowed) {
1661
+ if (this.prefillData.parameters.streetNumber) {
1662
+ address.houseNumber = this.prefillData.parameters.streetNumber;
1663
+ }
1664
+ if (this.prefillData.parameters.boxNumber) {
1665
+ address.boxNumber = this.prefillData.parameters.boxNumber;
1666
+ }
1667
+ }
1491
1668
  this.autocompleteBoxNb.selectedAddress = address;
1492
1669
  this.setAddress(address, ADDRESSLEVEL.BOX_NUMBER);
1493
1670
  }
1494
1671
  else {
1495
1672
  const prefillBoxNumber = this.prefillData.parameters.boxNumber;
1496
- const address = this.prefillData.prefillStreetNumberPerfectMatchSuggestion.address;
1673
+ const address = this.prefillData.prefillStreetNumberPerfectMatchSuggestion
1674
+ ? this.prefillData.prefillStreetNumberPerfectMatchSuggestion.address
1675
+ : null;
1497
1676
  if (prefillBoxNumber === null || prefillBoxNumber === undefined || prefillBoxNumber.length === 0) {
1498
1677
  this.setAddress(address, ADDRESSLEVEL.STREET_NUMBER);
1499
1678
  }
1500
- else {
1501
- // address.boxNumber = prefillBoxNumber;
1502
- address.searchBarString = prefillBoxNumber;
1503
- this.setAddress(address, ADDRESSLEVEL.BOX_NUMBER);
1679
+ else if (address) {
1680
+ if (!this.notInListAllowed) {
1681
+ // notInListAllowed=false: the box number is invalid and must not appear in the
1682
+ // selected address or address component. Complete the address at street-number
1683
+ // level so the emitted address contains only the valid street number.
1684
+ this.setAddress(address, ADDRESSLEVEL.STREET_NUMBER);
1685
+ }
1686
+ else {
1687
+ // notInListAllowed=true: include the prefilled box number as-is (not-in-list)
1688
+ address.boxNumber = prefillBoxNumber;
1689
+ if (this.prefillData.parameters.streetNumber) {
1690
+ address.houseNumber = this.prefillData.parameters.streetNumber;
1691
+ }
1692
+ address.searchBarString = prefillBoxNumber;
1693
+ // For internal endpoint: clear IDs that are no longer valid when box number is not in the list.
1694
+ // - mailBoxId and suffixId are always cleared (valid street number + invalid box number).
1695
+ // - pdpId is also cleared when street number was also not-in-list (both invalid).
1696
+ const streetNumberWasNotInList = address.hasOwnProperty('not-in-list') && address['not-in-list'] === true;
1697
+ address.mailBoxId = null;
1698
+ address.mailBoxid = null;
1699
+ address.suffixId = null;
1700
+ if (address.geoSanction) {
1701
+ address.geoSanction = address.geoSanction.substring(0, 35);
1702
+ }
1703
+ if (streetNumberWasNotInList) {
1704
+ address.pdpId = null;
1705
+ if (address.geoSanction) {
1706
+ address.geoSanction = address.geoSanction.substring(0, 25);
1707
+ }
1708
+ }
1709
+ this.setAddress(address, ADDRESSLEVEL.BOX_NUMBER);
1710
+ }
1504
1711
  }
1505
1712
  }
1506
1713
  this.quitPrefillMode();
1507
1714
  }
1508
1715
  }
1509
1716
  LibAddressAutocompleteByComponentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: LibAddressAutocompleteByComponentComponent, deps: [{ token: i1.HttpService }], target: i0.ɵɵFactoryTarget.Component });
1510
- LibAddressAutocompleteByComponentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: LibAddressAutocompleteByComponentComponent, selector: "bp-lib-address-autocomplete-by-component", inputs: { inputLang: "inputLang", clearInput: "clearInput", validationMessageOption: "validationMessageOption", defaultLang: "defaultLang", showDebugMessageToConsole: "showDebugMessageToConsole", minLevel: "minLevel", notInListAllowed: "notInListAllowed", addressParams: "addressParams", messageOption: "messageOption", localityUrl: "localityUrl", maxSuggestionLocality: "maxSuggestionLocality", visibleSuggestionLocalityCount: "visibleSuggestionLocalityCount", sortCriteriaLocality: "sortCriteriaLocality", streetUrl: "streetUrl", maxSuggestionStreet: "maxSuggestionStreet", visibleSuggestionStreetCount: "visibleSuggestionStreetCount", sortCriteriaStreet: "sortCriteriaStreet", streetNumberUrl: "streetNumberUrl", maxSuggestionStreetNb: "maxSuggestionStreetNb", visibleSuggestionStreetNbCount: "visibleSuggestionStreetNbCount", sortCriteriaStreetNb: "sortCriteriaStreetNb", boxNumberUrl: "boxNumberUrl", maxSuggestionBoxNb: "maxSuggestionBoxNb", visibleSuggestionBoxNbCount: "visibleSuggestionBoxNbCount", sortCriteriaBoxNb: "sortCriteriaBoxNb", allowNoValidation: "allowNoValidation", validatedByBackend: "validatedByBackend", numberOfExceptions: "numberOfExceptions", suggestionLevel: "suggestionLevel", apiKey: "apiKey", isReadonly: "isReadonly", nis9InResponse: "nis9InResponse", businessNameInResponse: "businessNameInResponse", includeListOfBoxes: "includeListOfBoxes", includeListOfBusinessNameWithBoxes: "includeListOfBusinessNameWithBoxes" }, outputs: { addressCompleteEventEmitter: "addressCompleteEventEmitter", validationMessageEventEmitter: "validationMessageEventEmitter", clearInputEventEmitter: "clearInputEventEmitter", validatedByBackendEventEmitter: "validatedByBackendEventEmitter", numberOfExceptionsEventEmitter: "numberOfExceptionsEventEmitter" }, viewQueries: [{ propertyName: "autocompleteLocality", first: true, predicate: LocalityComponent, descendants: true }, { propertyName: "autocompleteStreet", first: true, predicate: StreetComponent, descendants: true }, { propertyName: "autocompleteStreetNb", first: true, predicate: StreetNumberComponent, descendants: true }, { propertyName: "autocompleteBoxNb", first: true, predicate: BoxNumberComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "\r\n<div class=\"aacwidget-address-container\">\r\n\r\n <div class=\"bpaac-dropdown-validation\" *ngIf=\"validationMessageOptionType === 'SHOW' \">\r\n <div class=\"bpaac-validated-icon\" *ngIf=\"selectedAddress && validationMessage!==null && validationMessage.messageType!==null\"></div>\r\n <!-- {{ validationMessage | translate }} -->\r\n {{ validationMessage.translatedMessage }}\r\n </div>\r\n\r\n <!-- bp-aacwidget-autocomplete-locality -->\r\n <bp-locality class=\"aacwidget-address-locality\" *ngIf=\"isComponentReady\"\r\n [isReadonly]=\"isReadonly\"\r\n [includeListOfBoxes]=\"includeListOfBoxes\"\r\n [includeListOfBusinessNameWithBoxes]=\"includeListOfBusinessNameWithBoxes\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedLocalityUrl\"\r\n [prefillData]=\"localityPrefillData\"\r\n [labelResourceKey]=\"'common.label.postalCode'\"\r\n [inputText]=\"postalCodeLocality\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [sortCriteria]=\"sortCriteriaLocality\"\r\n [maxSuggesionCount]=\"maxSuggestionLocality\" \r\n [visibleSuggestionCount]=\"visibleSuggestionLocalityCount\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n [nis9InResponse]=\"nis9InResponse\"\r\n [businessNameInResponse]=\"businessNameInResponse\"\r\n (addressChanged)=\"setAddress($event, 4)\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\" \r\n (textChangeEvent)=\"resetLocality($event)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onLocalityPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-locality>\r\n\r\n <bp-street class=\"aacwidget-address-street\"\r\n [isReadonly]=\"isReadonly\"\r\n [includeListOfBoxes]=\"includeListOfBoxes\"\r\n [includeListOfBusinessNameWithBoxes]=\"includeListOfBusinessNameWithBoxes\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedStreetUrl\"\r\n [prefillData]=\"streetPrefillData\"\r\n [autofillData]=\"streetNameAutofillData\"\r\n [labelResourceKey]=\"'common.label.streetName'\"\r\n [inputText]=\"streetNameInput\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [postalCode]=\"postalCode\"\r\n [locality]=\"locality\"\r\n [sortCriteria]=\"sortCriteriaStreet\" \r\n [maxSuggesionCount]=\"maxSuggestionStreet\"\r\n [visibleSuggesionCount]=\"visibleSuggestionStreetCount\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n (addressChanged)=\"setAddress($event, 3)\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\"\r\n (textChangeEvent)=\"resetStreet($event)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onStreetPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-street>\r\n\r\n <bp-street-number class=\"aacwidget-address-streetnumber\"\r\n [isReadonly]=\"isReadonly\"\r\n [includeListOfBoxes]=\"includeListOfBoxes\"\r\n [includeListOfBusinessNameWithBoxes]=\"includeListOfBusinessNameWithBoxes\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedStreetNumberUrl\"\r\n [selectedAddress]=\"streetAddress\"\r\n [prefillData]=\"streetNumberPrefillData\"\r\n [autofillData]=\"streetNumberAutofillData\"\r\n [labelResourceKey]=\"'common.label.streetNumber'\"\r\n [inputText]=\"streetNumberInput\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [postalCode]=\"postalCode\" \r\n [locality]=\"locality\" \r\n [streetName]=\"street\"\r\n [sortCriteria]=\"sortCriteriaStreetNb\"\r\n [maxSuggesionCount]=\"maxSuggestionStreetNb\" \r\n [visibleSuggesionCount]=\"visibleSuggestionStreetNbCount\"\r\n [notInListAllowed]=\"notInListAllowed\"\r\n [suggestionLevel]=\"suggestionLevel\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n [nis9InResponse]=\"nis9InResponse\"\r\n [businessNameInResponse]=\"businessNameInResponse\"\r\n (addressChanged)=\"setAddress($event, 2)\"\r\n (streetNumberChanged)=\"setAddressStreetNumber($event)\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\"\r\n (textChangeEvent)=\"resetStreetNumber($event, false)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onStreetNumberPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-street-number>\r\n\r\n <bp-box-number class=\"aacwidget-address-boxnumber\"\r\n [isReadonly]=\"isReadonly\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedBoxNumberUrl\"\r\n [selectedAddress]=\"streetNumberAddress\"\r\n [prefillData]=\"boxNumberPrefillData\"\r\n [autofillData]=\"boxNumberAutofillData\"\r\n [labelResourceKey]=\"'common.label.boxNumber'\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [postalCode]=\"postalCode\" \r\n [locality]=\"locality\" \r\n [streetName]=\"street\" \r\n [streetNumber]=\"streetNumber\"\r\n [sortCriteria]=\"sortCriteriaBoxNb\" \r\n [nis9InResponse]=\"nis9InResponse\"\r\n [businessNameInResponse]=\"businessNameInResponse\"\r\n [maxSuggesionCount]=\"maxSuggestionBoxNb\"\r\n [visibleSuggesionCount]=\"visibleSuggestionBoxNbCount\"\r\n [notInListAllowed]=\"notInListAllowed\"\r\n [suggestionLevel]=\"suggestionLevel\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (addressChanged)=\"setAddress($event, 1)\" \r\n (boxNumberChanged)=\"setAddressBoxNumber($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\"\r\n (textChangeEvent)=\"resetBoxNumber($event, false)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onBoxNumberPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-box-number>\r\n</div>", styles: [""], components: [{ type: i2.LocalityComponent, selector: "bp-locality", inputs: ["labelResourceKey", "messageOption", "maxSuggesionCount", "visibleSuggestionCount", "sortCriteria", "baseUrl", "inputText", "prefillData", "showDebugMessageToConsole", "includeListOfBoxes", "includeListOfBusinessNameWithBoxes", "nis9InResponse", "businessNameInResponse", "inputLang", "isReadonly", "allowNoValidation", "validatedByBackend", "numberOfExceptions"], outputs: ["messageChanged", "addressChanged", "focusEvent", "blurEvent", "textChangeEvent", "clearInputEventEmitter", "prefillEventEmitter", "numberOfExceptionsEmitter"] }, { type: i3.StreetComponent, selector: "bp-street", inputs: ["labelResourceKey", "maxSuggesionCount", "visibleSuggesionCount", "sortCriteria", "baseUrl", "addressParams", "prefillData", "autofillData", "showDebugMessageToConsole", "postalCode", "locality", "inputText", "messageOption", "allowNoValidation", "validatedByBackend", "numberOfExceptions", "includeListOfBoxes", "includeListOfBusinessNameWithBoxes", "inputLang", "isReadonly"], outputs: ["messageChanged", "addressChanged", "focusEvent", "blurEvent", "textChangeEvent", "clearInputEventEmitter", "prefillEventEmitter", "numberOfExceptionsEmitter"] }, { type: i4.StreetNumberComponent, selector: "bp-street-number", inputs: ["prefillData", "autofillData", "showDebugMessageToConsole", "labelResourceKey", "maxSuggesionCount", "visibleSuggesionCount", "sortCriteria", "baseUrl", "addressParams", "postalCode", "locality", "streetName", "notInListAllowed", "selectedAddress", "allowNoValidation", "validatedByBackend", "numberOfExceptions", "nis9InResponse", "businessNameInResponse", "includeListOfBoxes", "includeListOfBusinessNameWithBoxes", "inputLang", "messageOption", "inputText", "isReadonly", "suggestionLevel"], outputs: ["messageChanged", "addressChanged", "focusEvent", "blurEvent", "textChangeEvent", "emptyResponseEvent", "clearInputEventEmitter", "prefillEventEmitter", "streetNumberChanged", "numberOfExceptionsEmitter"] }, { type: i5.BoxNumberComponent, selector: "bp-box-number", inputs: ["prefillData", "autofillData", "showDebugMessageToConsole", "labelResourceKey", "maxSuggesionCount", "visibleSuggesionCount", "sortCriteria", "baseUrl", "addressParams", "postalCode", "locality", "streetName", "streetNumber", "selectedAddress", "notInListAllowed", "allowNoValidation", "validatedByBackend", "numberOfExceptions", "inputLang", "messageOption", "isReadonly", "suggestionLevel", "nis9InResponse", "businessNameInResponse"], outputs: ["messageChanged", "addressChanged", "focusEvent", "blurEvent", "textChangeEvent", "emptyResponseEvent", "clearInputEventEmitter", "prefillEventEmitter", "boxNumberChanged", "numberOfExceptionsEmitter"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
1717
+ LibAddressAutocompleteByComponentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: LibAddressAutocompleteByComponentComponent, selector: "bp-lib-address-autocomplete-by-component", inputs: { inputLang: "inputLang", clearInput: "clearInput", validationMessageOption: "validationMessageOption", defaultLang: "defaultLang", showDebugMessageToConsole: "showDebugMessageToConsole", minLevel: "minLevel", notInListAllowed: "notInListAllowed", addressParams: "addressParams", messageOption: "messageOption", localityUrl: "localityUrl", maxSuggestionLocality: "maxSuggestionLocality", visibleSuggestionLocalityCount: "visibleSuggestionLocalityCount", sortCriteriaLocality: "sortCriteriaLocality", streetUrl: "streetUrl", maxSuggestionStreet: "maxSuggestionStreet", visibleSuggestionStreetCount: "visibleSuggestionStreetCount", sortCriteriaStreet: "sortCriteriaStreet", streetNumberUrl: "streetNumberUrl", maxSuggestionStreetNb: "maxSuggestionStreetNb", visibleSuggestionStreetNbCount: "visibleSuggestionStreetNbCount", sortCriteriaStreetNb: "sortCriteriaStreetNb", boxNumberUrl: "boxNumberUrl", maxSuggestionBoxNb: "maxSuggestionBoxNb", visibleSuggestionBoxNbCount: "visibleSuggestionBoxNbCount", sortCriteriaBoxNb: "sortCriteriaBoxNb", allowNoValidation: "allowNoValidation", validatedByBackend: "validatedByBackend", numberOfExceptions: "numberOfExceptions", suggestionLevel: "suggestionLevel", apiKey: "apiKey", isReadonly: "isReadonly", nis9InResponse: "nis9InResponse", businessNameInResponse: "businessNameInResponse", includeListOfBoxes: "includeListOfBoxes", includeListOfBusinessNameWithBoxes: "includeListOfBusinessNameWithBoxes" }, outputs: { addressCompleteEventEmitter: "addressCompleteEventEmitter", validationMessageEventEmitter: "validationMessageEventEmitter", clearInputEventEmitter: "clearInputEventEmitter", validatedByBackendEventEmitter: "validatedByBackendEventEmitter", numberOfExceptionsEventEmitter: "numberOfExceptionsEventEmitter" }, viewQueries: [{ propertyName: "autocompleteLocality", first: true, predicate: LocalityComponent, descendants: true }, { propertyName: "autocompleteStreet", first: true, predicate: StreetComponent, descendants: true }, { propertyName: "autocompleteStreetNb", first: true, predicate: StreetNumberComponent, descendants: true }, { propertyName: "autocompleteBoxNb", first: true, predicate: BoxNumberComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "\r\n<div class=\"aacwidget-address-container\">\r\n\r\n <div class=\"bpaac-dropdown-validation\" *ngIf=\"validationMessageOptionType === 'SHOW' \">\r\n <div class=\"bpaac-validated-icon\" *ngIf=\"selectedAddress && validationMessage!==null && validationMessage.messageType!==null\"></div>\r\n <!-- {{ validationMessage | translate }} -->\r\n {{ validationMessage.translatedMessage }}\r\n </div>\r\n\r\n <!-- bp-aacwidget-autocomplete-locality -->\r\n <bp-locality class=\"aacwidget-address-locality\" *ngIf=\"isComponentReady\"\r\n [isReadonly]=\"isReadonly\"\r\n [includeListOfBoxes]=\"includeListOfBoxes\"\r\n [includeListOfBusinessNameWithBoxes]=\"includeListOfBusinessNameWithBoxes\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedLocalityUrl\"\r\n [prefillData]=\"localityPrefillData\"\r\n [labelResourceKey]=\"'common.label.postalCode'\"\r\n [inputText]=\"postalCodeLocality\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [sortCriteria]=\"sortCriteriaLocality\"\r\n [maxSuggesionCount]=\"maxSuggestionLocality\" \r\n [visibleSuggestionCount]=\"visibleSuggestionLocalityCount\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n\t\t[nis9InResponse]=\"nis9InResponse\"\r\n [businessNameInResponse]=\"businessNameInResponse\"\r\n (addressChanged)=\"setAddress($event, 4)\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\" \r\n (textChangeEvent)=\"resetLocality($event)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onLocalityPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-locality>\r\n\r\n <bp-street class=\"aacwidget-address-street\"\r\n [isReadonly]=\"isReadonly\"\r\n [includeListOfBoxes]=\"includeListOfBoxes\"\r\n [includeListOfBusinessNameWithBoxes]=\"includeListOfBusinessNameWithBoxes\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedStreetUrl\"\r\n [prefillData]=\"streetPrefillData\"\r\n [autofillData]=\"streetNameAutofillData\"\r\n [labelResourceKey]=\"'common.label.streetName'\"\r\n [inputText]=\"streetNameInput\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [postalCode]=\"postalCode\"\r\n [locality]=\"locality\"\r\n [sortCriteria]=\"sortCriteriaStreet\" \r\n [maxSuggesionCount]=\"maxSuggestionStreet\"\r\n [visibleSuggesionCount]=\"visibleSuggestionStreetCount\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n (addressChanged)=\"setAddress($event, 3)\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\"\r\n (textChangeEvent)=\"resetStreet($event)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onStreetPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-street>\r\n\r\n <bp-street-number class=\"aacwidget-address-streetnumber\"\r\n [isReadonly]=\"isReadonly\"\r\n [includeListOfBoxes]=\"includeListOfBoxes\"\r\n [includeListOfBusinessNameWithBoxes]=\"includeListOfBusinessNameWithBoxes\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedStreetNumberUrl\"\r\n [selectedAddress]=\"streetAddress\"\r\n [prefillData]=\"streetNumberPrefillData\"\r\n [autofillData]=\"streetNumberAutofillData\"\r\n [labelResourceKey]=\"'common.label.streetNumber'\"\r\n [inputText]=\"streetNumberInput\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [postalCode]=\"postalCode\" \r\n [locality]=\"locality\" \r\n [streetName]=\"street\"\r\n [sortCriteria]=\"sortCriteriaStreetNb\"\r\n [maxSuggesionCount]=\"maxSuggestionStreetNb\" \r\n [visibleSuggesionCount]=\"visibleSuggestionStreetNbCount\"\r\n [notInListAllowed]=\"notInListAllowed\"\r\n [suggestionLevel]=\"suggestionLevel\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n [nis9InResponse]=\"nis9InResponse\"\r\n [businessNameInResponse]=\"businessNameInResponse\"\r\n (addressChanged)=\"setAddress($event, 2)\"\r\n (streetNumberChanged)=\"setAddressStreetNumber($event)\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\"\r\n (textChangeEvent)=\"resetStreetNumber($event, false)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onStreetNumberPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-street-number>\r\n\r\n <bp-box-number class=\"aacwidget-address-boxnumber\"\r\n [isReadonly]=\"isReadonly\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedBoxNumberUrl\"\r\n [selectedAddress]=\"streetNumberAddress\"\r\n [prefillData]=\"boxNumberPrefillData\"\r\n [autofillData]=\"boxNumberAutofillData\"\r\n [labelResourceKey]=\"'common.label.boxNumber'\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [postalCode]=\"postalCode\" \r\n [locality]=\"locality\" \r\n [streetName]=\"street\" \r\n [streetNumber]=\"streetNumber\"\r\n [sortCriteria]=\"sortCriteriaBoxNb\" \r\n [nis9InResponse]=\"nis9InResponse\"\r\n [businessNameInResponse]=\"businessNameInResponse\"\r\n [maxSuggesionCount]=\"maxSuggestionBoxNb\"\r\n [visibleSuggesionCount]=\"visibleSuggestionBoxNbCount\"\r\n [notInListAllowed]=\"notInListAllowed\"\r\n [suggestionLevel]=\"suggestionLevel\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (addressChanged)=\"setAddress($event, 1)\" \r\n (boxNumberChanged)=\"setAddressBoxNumber($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\"\r\n (textChangeEvent)=\"resetBoxNumber($event, false)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onBoxNumberPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-box-number>\r\n</div>", styles: [""], components: [{ type: i2.LocalityComponent, selector: "bp-locality", inputs: ["labelResourceKey", "messageOption", "maxSuggesionCount", "visibleSuggestionCount", "sortCriteria", "baseUrl", "inputText", "prefillData", "showDebugMessageToConsole", "includeListOfBoxes", "includeListOfBusinessNameWithBoxes", "nis9InResponse", "businessNameInResponse", "inputLang", "isReadonly", "allowNoValidation", "validatedByBackend", "numberOfExceptions"], outputs: ["messageChanged", "addressChanged", "focusEvent", "blurEvent", "textChangeEvent", "clearInputEventEmitter", "prefillEventEmitter", "numberOfExceptionsEmitter"] }, { type: i3.StreetComponent, selector: "bp-street", inputs: ["labelResourceKey", "maxSuggesionCount", "visibleSuggesionCount", "sortCriteria", "baseUrl", "addressParams", "prefillData", "autofillData", "showDebugMessageToConsole", "postalCode", "locality", "inputText", "messageOption", "allowNoValidation", "validatedByBackend", "numberOfExceptions", "includeListOfBoxes", "includeListOfBusinessNameWithBoxes", "inputLang", "isReadonly"], outputs: ["messageChanged", "addressChanged", "focusEvent", "blurEvent", "textChangeEvent", "clearInputEventEmitter", "prefillEventEmitter", "numberOfExceptionsEmitter"] }, { type: i4.StreetNumberComponent, selector: "bp-street-number", inputs: ["prefillData", "autofillData", "showDebugMessageToConsole", "labelResourceKey", "maxSuggesionCount", "visibleSuggesionCount", "sortCriteria", "baseUrl", "addressParams", "postalCode", "locality", "streetName", "notInListAllowed", "selectedAddress", "allowNoValidation", "validatedByBackend", "numberOfExceptions", "nis9InResponse", "businessNameInResponse", "includeListOfBoxes", "includeListOfBusinessNameWithBoxes", "inputLang", "messageOption", "inputText", "isReadonly", "suggestionLevel"], outputs: ["messageChanged", "addressChanged", "focusEvent", "blurEvent", "textChangeEvent", "emptyResponseEvent", "clearInputEventEmitter", "prefillEventEmitter", "streetNumberChanged", "numberOfExceptionsEmitter"] }, { type: i5.BoxNumberComponent, selector: "bp-box-number", inputs: ["prefillData", "autofillData", "showDebugMessageToConsole", "labelResourceKey", "maxSuggesionCount", "visibleSuggesionCount", "sortCriteria", "baseUrl", "addressParams", "postalCode", "locality", "streetName", "streetNumber", "selectedAddress", "notInListAllowed", "allowNoValidation", "validatedByBackend", "numberOfExceptions", "inputLang", "messageOption", "isReadonly", "suggestionLevel", "nis9InResponse", "businessNameInResponse"], outputs: ["messageChanged", "addressChanged", "focusEvent", "blurEvent", "textChangeEvent", "emptyResponseEvent", "clearInputEventEmitter", "prefillEventEmitter", "boxNumberChanged", "numberOfExceptionsEmitter"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
1511
1718
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: LibAddressAutocompleteByComponentComponent, decorators: [{
1512
1719
  type: Component,
1513
- args: [{ selector: 'bp-lib-address-autocomplete-by-component', template: "\r\n<div class=\"aacwidget-address-container\">\r\n\r\n <div class=\"bpaac-dropdown-validation\" *ngIf=\"validationMessageOptionType === 'SHOW' \">\r\n <div class=\"bpaac-validated-icon\" *ngIf=\"selectedAddress && validationMessage!==null && validationMessage.messageType!==null\"></div>\r\n <!-- {{ validationMessage | translate }} -->\r\n {{ validationMessage.translatedMessage }}\r\n </div>\r\n\r\n <!-- bp-aacwidget-autocomplete-locality -->\r\n <bp-locality class=\"aacwidget-address-locality\" *ngIf=\"isComponentReady\"\r\n [isReadonly]=\"isReadonly\"\r\n [includeListOfBoxes]=\"includeListOfBoxes\"\r\n [includeListOfBusinessNameWithBoxes]=\"includeListOfBusinessNameWithBoxes\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedLocalityUrl\"\r\n [prefillData]=\"localityPrefillData\"\r\n [labelResourceKey]=\"'common.label.postalCode'\"\r\n [inputText]=\"postalCodeLocality\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [sortCriteria]=\"sortCriteriaLocality\"\r\n [maxSuggesionCount]=\"maxSuggestionLocality\" \r\n [visibleSuggestionCount]=\"visibleSuggestionLocalityCount\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n [nis9InResponse]=\"nis9InResponse\"\r\n [businessNameInResponse]=\"businessNameInResponse\"\r\n (addressChanged)=\"setAddress($event, 4)\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\" \r\n (textChangeEvent)=\"resetLocality($event)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onLocalityPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-locality>\r\n\r\n <bp-street class=\"aacwidget-address-street\"\r\n [isReadonly]=\"isReadonly\"\r\n [includeListOfBoxes]=\"includeListOfBoxes\"\r\n [includeListOfBusinessNameWithBoxes]=\"includeListOfBusinessNameWithBoxes\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedStreetUrl\"\r\n [prefillData]=\"streetPrefillData\"\r\n [autofillData]=\"streetNameAutofillData\"\r\n [labelResourceKey]=\"'common.label.streetName'\"\r\n [inputText]=\"streetNameInput\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [postalCode]=\"postalCode\"\r\n [locality]=\"locality\"\r\n [sortCriteria]=\"sortCriteriaStreet\" \r\n [maxSuggesionCount]=\"maxSuggestionStreet\"\r\n [visibleSuggesionCount]=\"visibleSuggestionStreetCount\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n (addressChanged)=\"setAddress($event, 3)\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\"\r\n (textChangeEvent)=\"resetStreet($event)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onStreetPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-street>\r\n\r\n <bp-street-number class=\"aacwidget-address-streetnumber\"\r\n [isReadonly]=\"isReadonly\"\r\n [includeListOfBoxes]=\"includeListOfBoxes\"\r\n [includeListOfBusinessNameWithBoxes]=\"includeListOfBusinessNameWithBoxes\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedStreetNumberUrl\"\r\n [selectedAddress]=\"streetAddress\"\r\n [prefillData]=\"streetNumberPrefillData\"\r\n [autofillData]=\"streetNumberAutofillData\"\r\n [labelResourceKey]=\"'common.label.streetNumber'\"\r\n [inputText]=\"streetNumberInput\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [postalCode]=\"postalCode\" \r\n [locality]=\"locality\" \r\n [streetName]=\"street\"\r\n [sortCriteria]=\"sortCriteriaStreetNb\"\r\n [maxSuggesionCount]=\"maxSuggestionStreetNb\" \r\n [visibleSuggesionCount]=\"visibleSuggestionStreetNbCount\"\r\n [notInListAllowed]=\"notInListAllowed\"\r\n [suggestionLevel]=\"suggestionLevel\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n [nis9InResponse]=\"nis9InResponse\"\r\n [businessNameInResponse]=\"businessNameInResponse\"\r\n (addressChanged)=\"setAddress($event, 2)\"\r\n (streetNumberChanged)=\"setAddressStreetNumber($event)\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\"\r\n (textChangeEvent)=\"resetStreetNumber($event, false)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onStreetNumberPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-street-number>\r\n\r\n <bp-box-number class=\"aacwidget-address-boxnumber\"\r\n [isReadonly]=\"isReadonly\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedBoxNumberUrl\"\r\n [selectedAddress]=\"streetNumberAddress\"\r\n [prefillData]=\"boxNumberPrefillData\"\r\n [autofillData]=\"boxNumberAutofillData\"\r\n [labelResourceKey]=\"'common.label.boxNumber'\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [postalCode]=\"postalCode\" \r\n [locality]=\"locality\" \r\n [streetName]=\"street\" \r\n [streetNumber]=\"streetNumber\"\r\n [sortCriteria]=\"sortCriteriaBoxNb\" \r\n [nis9InResponse]=\"nis9InResponse\"\r\n [businessNameInResponse]=\"businessNameInResponse\"\r\n [maxSuggesionCount]=\"maxSuggestionBoxNb\"\r\n [visibleSuggesionCount]=\"visibleSuggestionBoxNbCount\"\r\n [notInListAllowed]=\"notInListAllowed\"\r\n [suggestionLevel]=\"suggestionLevel\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (addressChanged)=\"setAddress($event, 1)\" \r\n (boxNumberChanged)=\"setAddressBoxNumber($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\"\r\n (textChangeEvent)=\"resetBoxNumber($event, false)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onBoxNumberPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-box-number>\r\n</div>", styles: [""] }]
1720
+ args: [{ selector: 'bp-lib-address-autocomplete-by-component', template: "\r\n<div class=\"aacwidget-address-container\">\r\n\r\n <div class=\"bpaac-dropdown-validation\" *ngIf=\"validationMessageOptionType === 'SHOW' \">\r\n <div class=\"bpaac-validated-icon\" *ngIf=\"selectedAddress && validationMessage!==null && validationMessage.messageType!==null\"></div>\r\n <!-- {{ validationMessage | translate }} -->\r\n {{ validationMessage.translatedMessage }}\r\n </div>\r\n\r\n <!-- bp-aacwidget-autocomplete-locality -->\r\n <bp-locality class=\"aacwidget-address-locality\" *ngIf=\"isComponentReady\"\r\n [isReadonly]=\"isReadonly\"\r\n [includeListOfBoxes]=\"includeListOfBoxes\"\r\n [includeListOfBusinessNameWithBoxes]=\"includeListOfBusinessNameWithBoxes\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedLocalityUrl\"\r\n [prefillData]=\"localityPrefillData\"\r\n [labelResourceKey]=\"'common.label.postalCode'\"\r\n [inputText]=\"postalCodeLocality\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [sortCriteria]=\"sortCriteriaLocality\"\r\n [maxSuggesionCount]=\"maxSuggestionLocality\" \r\n [visibleSuggestionCount]=\"visibleSuggestionLocalityCount\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n\t\t[nis9InResponse]=\"nis9InResponse\"\r\n [businessNameInResponse]=\"businessNameInResponse\"\r\n (addressChanged)=\"setAddress($event, 4)\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\" \r\n (textChangeEvent)=\"resetLocality($event)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onLocalityPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-locality>\r\n\r\n <bp-street class=\"aacwidget-address-street\"\r\n [isReadonly]=\"isReadonly\"\r\n [includeListOfBoxes]=\"includeListOfBoxes\"\r\n [includeListOfBusinessNameWithBoxes]=\"includeListOfBusinessNameWithBoxes\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedStreetUrl\"\r\n [prefillData]=\"streetPrefillData\"\r\n [autofillData]=\"streetNameAutofillData\"\r\n [labelResourceKey]=\"'common.label.streetName'\"\r\n [inputText]=\"streetNameInput\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [postalCode]=\"postalCode\"\r\n [locality]=\"locality\"\r\n [sortCriteria]=\"sortCriteriaStreet\" \r\n [maxSuggesionCount]=\"maxSuggestionStreet\"\r\n [visibleSuggesionCount]=\"visibleSuggestionStreetCount\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n (addressChanged)=\"setAddress($event, 3)\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\"\r\n (textChangeEvent)=\"resetStreet($event)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onStreetPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-street>\r\n\r\n <bp-street-number class=\"aacwidget-address-streetnumber\"\r\n [isReadonly]=\"isReadonly\"\r\n [includeListOfBoxes]=\"includeListOfBoxes\"\r\n [includeListOfBusinessNameWithBoxes]=\"includeListOfBusinessNameWithBoxes\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedStreetNumberUrl\"\r\n [selectedAddress]=\"streetAddress\"\r\n [prefillData]=\"streetNumberPrefillData\"\r\n [autofillData]=\"streetNumberAutofillData\"\r\n [labelResourceKey]=\"'common.label.streetNumber'\"\r\n [inputText]=\"streetNumberInput\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [postalCode]=\"postalCode\" \r\n [locality]=\"locality\" \r\n [streetName]=\"street\"\r\n [sortCriteria]=\"sortCriteriaStreetNb\"\r\n [maxSuggesionCount]=\"maxSuggestionStreetNb\" \r\n [visibleSuggesionCount]=\"visibleSuggestionStreetNbCount\"\r\n [notInListAllowed]=\"notInListAllowed\"\r\n [suggestionLevel]=\"suggestionLevel\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n [nis9InResponse]=\"nis9InResponse\"\r\n [businessNameInResponse]=\"businessNameInResponse\"\r\n (addressChanged)=\"setAddress($event, 2)\"\r\n (streetNumberChanged)=\"setAddressStreetNumber($event)\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\"\r\n (textChangeEvent)=\"resetStreetNumber($event, false)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onStreetNumberPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-street-number>\r\n\r\n <bp-box-number class=\"aacwidget-address-boxnumber\"\r\n [isReadonly]=\"isReadonly\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"usedBoxNumberUrl\"\r\n [selectedAddress]=\"streetNumberAddress\"\r\n [prefillData]=\"boxNumberPrefillData\"\r\n [autofillData]=\"boxNumberAutofillData\"\r\n [labelResourceKey]=\"'common.label.boxNumber'\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [postalCode]=\"postalCode\" \r\n [locality]=\"locality\" \r\n [streetName]=\"street\" \r\n [streetNumber]=\"streetNumber\"\r\n [sortCriteria]=\"sortCriteriaBoxNb\" \r\n [nis9InResponse]=\"nis9InResponse\"\r\n [businessNameInResponse]=\"businessNameInResponse\"\r\n [maxSuggesionCount]=\"maxSuggestionBoxNb\"\r\n [visibleSuggesionCount]=\"visibleSuggestionBoxNbCount\"\r\n [notInListAllowed]=\"notInListAllowed\"\r\n [suggestionLevel]=\"suggestionLevel\"\r\n [allowNoValidation]=\"allowNoValidation\"\r\n [validatedByBackend]=\"validatedByBackend\"\r\n [numberOfExceptions]=\"numberOfExceptions\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (addressChanged)=\"setAddress($event, 1)\" \r\n (boxNumberChanged)=\"setAddressBoxNumber($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\"\r\n (textChangeEvent)=\"resetBoxNumber($event, false)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onBoxNumberPrefillEvent($event)\"\r\n (numberOfExceptionsEmitter)=\"setNumberOfExceptions($event)\"></bp-box-number>\r\n</div>", styles: [""] }]
1514
1721
  }], ctorParameters: function () { return [{ type: i1.HttpService }]; }, propDecorators: { autocompleteLocality: [{
1515
1722
  type: ViewChild,
1516
1723
  args: [LocalityComponent, { static: false }]
@@ -1604,4 +1811,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
1604
1811
  }], includeListOfBusinessNameWithBoxes: [{
1605
1812
  type: Input
1606
1813
  }] } });
1607
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLWFkZHJlc3MtYXV0b2NvbXBsZXRlLWJ5LWNvbXBvbmVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9saWItYWRkcmVzcy1hdXRvY29tcGxldGUtYnktY29tcG9uZW50L3NyYy9saWIvbGliLWFkZHJlc3MtYXV0b2NvbXBsZXRlLWJ5LWNvbXBvbmVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9saWItYWRkcmVzcy1hdXRvY29tcGxldGUtYnktY29tcG9uZW50L3NyYy9saWIvbGliLWFkZHJlc3MtYXV0b2NvbXBsZXRlLWJ5LWNvbXBvbmVudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFhLFNBQVMsRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFHL0gsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFekYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDdEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDeEUsT0FBTyxFQUFF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O3NCQUF0QyxNQUFNO2dCQUNHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFDRyw4QkFBOEI7c0JBQXZDLE1BQU07Z0JBQ0csOEJBQThCO3NCQUF2QyxNQUFNO2dCQVNQLE1BQU07c0JBREwsS0FBSztnQkFNTixVQUFVO3NCQURULEtBQUs7Z0JBSU4sY0FBYztzQkFEYixLQUFLO2dCQUlOLHNCQUFzQjtzQkFEckIsS0FBSztnQkFJTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBSU4sa0NBQWtDO3NCQURqQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25EZXN0cm95LCBWaWV3Q2hpbGQsIFNpbXBsZUNoYW5nZXMsIE9uQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQcmVmaWxsZWRQYXJhbWV0ZXJzIH0gZnJvbSAnLi91dGlscy9wcmVmaWxsZWQtcGFyYW1ldGVycyc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uTWVzc2FnZU9wdGlvblR5cGUgfSBmcm9tICcuL2VudW0vdmFsaWRhdGlvbi1tZXNzYWdlLW9wdGlvbi10eXBlLmVudW0nO1xuaW1wb3J0IHsgVmFsaWRhdGlvbk1lc3NhZ2VUeXBlIH0gZnJvbSAnLi9lbnVtL3ZhbGlkYXRpb24tbWVzc2FnZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgTG9jYWxpdHlDb21wb25lbnQgfSBmcm9tICcuL2xvY2FsaXR5L2xvY2FsaXR5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdHJlZXRDb21wb25lbnQgfSBmcm9tICcuL3N0cmVldC9zdHJlZXQuY29tcG9uZW50JztcbmltcG9ydCB7IFN0cmVldE51bWJlckNvbXBvbmVudCB9IGZyb20gJy4vc3RyZWV0LW51bWJlci9zdHJlZXQtbnVtYmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCb3hOdW1iZXJDb21wb25lbnQgfSBmcm9tICcuL2JveC1udW1iZXIvYm94LW51bWJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQUREUkVTU0xFVkVMIH0gZnJvbSAnLi9lbnVtJztcbmltcG9ydCB7IFByZWZpbGxEYXRhIH0gZnJvbSAnLi91dGlscy9wcmVmaWxsLWRhdGEnO1xuaW1wb3J0IHsgUHJlZmlsbEV2ZW50IH0gZnJvbSAnLi91dGlscy9wcmVmbGxsLmV2ZW50JztcbmltcG9ydCB7IElucHV0TmFtZVR5cGUgfSBmcm9tICcuL2VudW0vaW5wdXQtbmFtZS5lbnVtJztcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9odHRwLnNlcnZpY2UnO1xuaW1wb3J0IHsgTElCX1ZFUlNJT04gfSBmcm9tICcuL3V0aWxzL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBTdWdnZXN0aW9uTGV2ZWxUeXBlIH0gZnJvbSAnLi9lbnVtL3N1Z2dlc3Rpb24tbGV2ZWwtdHlwZS5lbnVtJztcbmltcG9ydCB7IEF1dG9maWxsRGF0YSB9IGZyb20gJy4vdXRpbHMvYXV0b2ZpbGwtZGF0YSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2JwLWxpYi1hZGRyZXNzLWF1dG9jb21wbGV0ZS1ieS1jb21wb25lbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbGliLWFkZHJlc3MtYXV0b2NvbXBsZXRlLWJ5LWNvbXBvbmVudC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWyAnLi9saWItYWRkcmVzcy1hdXRvY29tcGxldGUtYnktY29tcG9uZW50LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTGliQWRkcmVzc0F1dG9jb21wbGV0ZUJ5Q29tcG9uZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG5cbiAgQFZpZXdDaGlsZChMb2NhbGl0eUNvbXBvbmVudCwge3N0YXRpYzogZmFsc2V9ICkgYXV0b2NvbXBsZXRlTG9jYWxpdHk7XG4gIEBWaWV3Q2hpbGQoU3RyZWV0Q29tcG9uZW50LCB7c3RhdGljOiBmYWxzZX0gKSBhdXRvY29tcGxldGVTdHJlZXQ7XG4gIEBWaWV3Q2hpbGQoU3RyZWV0TnVtYmVyQ29tcG9uZW50LCB7c3RhdGljOiBmYWxzZX0gKSBhdXRvY29tcGxldGVTdHJlZXROYjtcbiAgQFZpZXdDaGlsZChCb3hOdW1iZXJDb21wb25lbnQsIHtzdGF0aWM6IGZhbHNlfSApIGF1dG9jb21wbGV0ZUJveE5iO1xuXG4gIHNlbGVjdGVkTGFuZ3VhZ2U6IHN0cmluZyA9IG51bGw7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSBiYXNlVXJsID0gXCJodHRwczovL2FwaS5tYWlsb3BzLmJwb3N0LmNsb3VkL3JvYS1pbmZvL2V4dGVybmFsTWFpbGluZ0FkZHJlc3NQcm9vZmluZ1Jlc3QvYXV0b2NvbXBsZXRlL1wiO1xuICBwcml2YXRlIGRlZmF1bHRBcGlLZXk9Jyc7XG5cbiAgdXNlZExvY2FsaXR5VXJsID0gdGhpcy5iYXNlVXJsICsgJ2xvY2FsaXR5JztcbiAgdXNlZFN0cmVldFVybCA9IHRoaXMuYmFzZVVybCArICdzdHJlZXQnO1xuICB1c2VkU3RyZWV0TnVtYmVyVXJsID0gdGhpcy5iYXNlVXJsICsgJ3N0cmVldE51bWJlcic7XG4gIHVzZWRCb3hOdW1iZXJVcmwgPSB0aGlzLmJhc2VVcmwgKyAnYm94TnVtYmVyJztcblxuICAvLyBAdHMtaWdub3JlXG4gIEBJbnB1dCgpIHNldCBpbnB1dExhbmcodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExhbmd1YWdlKHZhbCk7XG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIEBJbnB1dCgpIHNldCBjbGVhcklucHV0KGZvY3VzOiB7c2V0Rm9jdXM6IGJvb2xlYW4sIHRpbWVzdGFtcDogRGF0ZX0pIHtcbiAgICB0aGlzLm9uQ2xlYXJJbnB1dChmb2N1cyk7XG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIEBJbnB1dCgpIHNldCB2YWxpZGF0aW9uTWVzc2FnZU9wdGlvbihvcHRpb246IHt2YWxpZGF0aW9uVHlwZTogVmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25UeXBlLCB0aW1lc3RhbXA6IERhdGV9KSB7XG4gICAgdGhpcy5zZXRWYWxpZGF0aW9uTWVzc2FnZU9wdGlvbkZyb21JbnB1dChvcHRpb24pO1xuICB9XG5cbiAgQElucHV0KClcbiAgZGVmYXVsdExhbmc6IHN0cmluZztcblxuICBASW5wdXQoKSBzaG93RGVidWdNZXNzYWdlVG9Db25zb2xlID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1pbkxldmVsOiBudW1iZXI7XG4gIEBJbnB1dCgpIG5vdEluTGlzdEFsbG93ZWQgPSB0cnVlO1xuICBASW5wdXQoKSBhZGRyZXNzUGFyYW1zOiBQcmVmaWxsZWRQYXJhbWV0ZXJzO1xuICBASW5wdXQoKSBtZXNzYWdlT3B0aW9uID0gJ1knO1xuXG4gIC8vIExPQ0FMSVRZXG4gIEBJbnB1dCgpIGxvY2FsaXR5VXJsID0gdGhpcy5iYXNlVXJsICsgJ2xvY2FsaXR5JztcbiAgQElucHV0KCkgbWF4U3VnZ2VzdGlvbkxvY2FsaXR5ID0gNTtcbiAgQElucHV0KCkgdmlzaWJsZVN1Z2dlc3Rpb25Mb2NhbGl0eUNvdW50ID0gNTtcbiAgQElucHV0KCkgc29ydENyaXRlcmlhTG9jYWxpdHk6IHN0cmluZztcbiAgcG9zdGFsQ29kZUxvY2FsaXR5OiBzdHJpbmc7XG4gIC8vIGxvY2FsaXR5UGFyYW1zOiBQcmVmaWxsZWRQYXJhbWV0ZXJzO1xuICBsb2NhbGl0eVByZWZpbGxEYXRhOiBQcmVmaWxsRGF0YSA9IG51bGw7XG5cbiAgLy8gU1RSRUVUXG4gIEBJbnB1dCgpIHN0cmVldFVybCA9IHRoaXMuYmFzZVVybCArICdzdHJlZXQnO1xuICBASW5wdXQoKSBtYXhTdWdnZXN0aW9uU3RyZWV0ID0gNTtcbiAgQElucHV0KCkgdmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXRDb3VudCA9IDU7XG4gIEBJbnB1dCgpIHNvcnRDcml0ZXJpYVN0cmVldDogc3RyaW5nO1xuICAvLyBzdHJlZXRQYXJhbXM6IFByZWZpbGxlZFBhcmFtZXRlcnM7XG4gIHN0cmVldFByZWZpbGxEYXRhOiBQcmVmaWxsRGF0YSA9IG51bGw7XG5cbiAgLy8gU1RSRUVUIE5VTUJFUlxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gIEBJbnB1dCgpIHN0cmVldE51bWJlclVybCA9IHRoaXMuYmFzZVVybCArICdzdHJlZXROdW1iZXInO1xuICBASW5wdXQoKSBtYXhTdWdnZXN0aW9uU3RyZWV0TmIgPSA1O1xuICBASW5wdXQoKSB2aXNpYmxlU3VnZ2VzdGlvblN0cmVldE5iQ291bnQgPSA1O1xuICBASW5wdXQoKSBzb3J0Q3JpdGVyaWFTdHJlZXROYjogc3RyaW5nO1xuICAvLyBzdHJlZXROdW1iZXJQYXJhbXM6IFByZWZpbGxlZFBhcmFtZXRlcnM7XG4gIHN0cmVldE51bWJlclByZWZpbGxEYXRhOiBQcmVmaWxsRGF0YSA9IG51bGw7XG5cbiAgLy8gQk9YIE5VTUJFUlxuICBASW5wdXQoKSBib3hOdW1iZXJVcmwgPSB0aGlzLmJhc2VVcmwgKyAnYm94TnVtYmVyJztcbiAgQElucHV0KCkgbWF4U3VnZ2VzdGlvbkJveE5iID0gNTtcbiAgQElucHV0KCkgdmlzaWJsZVN1Z2dlc3Rpb25Cb3hOYkNvdW50ID0gNTtcbiAgQElucHV0KCkgc29ydENyaXRlcmlhQm94TmI6IHN0cmluZztcbiAgQElucHV0KCkgYWxsb3dOb1ZhbGlkYXRpb246IGJvb2xlYW47XG4gIEBJbnB1dCgpIHZhbGlkYXRlZEJ5QmFja2VuZDogdHJ1ZTtcbiAgQElucHV0KCkgbnVtYmVyT2ZFeGNlcHRpb25zOiBudW1iZXI7XG4gIC8vIGJveFBhcmFtczogUHJlZmlsbGVkUGFyYW1ldGVycztcbiAgYm94TnVtYmVyUHJlZmlsbERhdGE6IFByZWZpbGxEYXRhID0gbnVsbDtcblxuICBASW5wdXQoKSBzdWdnZXN0aW9uTGV2ZWw6IFN1Z2dlc3Rpb25MZXZlbFR5cGUgPSBTdWdnZXN0aW9uTGV2ZWxUeXBlLlN0cmVldEFuZEJveE51bWJlcjtcblxuICBib3hOdW1iZXI6IHN0cmluZztcbiAgY29tcGxldGVBZGRyZXNzOiBzdHJpbmc7XG4gIGVtaXR0ZWRBZGRyZXNzOiBhbnkgPSBudWxsO1xuICBsb2NhbGl0eTogc3RyaW5nO1xuICBwb3N0YWxDb2RlOiBzdHJpbmc7XG4gIHNlbGVjdGVkQWRkcmVzczogYW55O1xuICBzdHJlZXQ6IHN0cmluZztcbiAgc3RyZWV0QWRkcmVzczogYW55O1xuICBzdHJlZXROYW1lSW5wdXQ6IHN0cmluZztcbiAgc3RyZWV0TnVtYmVyOiBzdHJpbmc7XG4gIHN0cmVldE51bWJlckFkZHJlc3M6IGFueTtcbiAgc3RyZWV0TnVtYmVySW5wdXQ6IHN0cmluZztcbiAgYm94TnVtYmVySW5wdXQ6IHN0cmluZztcbiAgdmFsaWRhdGlvbk1lc3NhZ2U6IHttZXNzYWdlVHlwZTogVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLCB0cmFuc2xhdGVkTWVzc2FnZTogc3RyaW5nfSA9IHttZXNzYWdlVHlwZTogbnVsbCwgdHJhbnNsYXRlZE1lc3NhZ2U6ICcnfTtcbiAgdmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25UeXBlOiBWYWxpZGF0aW9uTWVzc2FnZU9wdGlvblR5cGU7XG4gIGF1dG9maWxsRGF0YTogQXV0b2ZpbGxEYXRhO1xuICBzdHJlZXROYW1lQXV0b2ZpbGxEYXRhOiBBdXRvZmlsbERhdGE7XG4gIHN0cmVldE51bWJlckF1dG9maWxsRGF0YTogQXV0b2ZpbGxEYXRhO1xuICBib3hOdW1iZXJBdXRvZmlsbERhdGE6IEF1dG9maWxsRGF0YTtcblxuXG4gIEBPdXRwdXQoKSBhZGRyZXNzQ29tcGxldGVFdmVudEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgdmFsaWRhdGlvbk1lc3NhZ2VFdmVudEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgY2xlYXJJbnB1dEV2ZW50RW1pdHRlcjogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSB2YWxpZGF0ZWRCeUJhY2tlbmRFdmVudEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG51bWJlck9mRXhjZXB0aW9uc0V2ZW50RW1pdHRlcjogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblxuICBwcmVmaWxsRGF0YTogUHJlZmlsbERhdGE7XG4gIHByb2Nlc3NpbmdQcmVmaWxsRGF0YSA9IGZhbHNlO1xuXG5cbiAgLy8gUGFzcyB0aGUgQVBJIGtleSBhcyBhIHByb3BlcnR5IG9mIHRoZSBsaWJyYXJ5ICFcbiAgQElucHV0KClcbiAgYXBpS2V5PXRoaXMuZGVmYXVsdEFwaUtleTtcblxuXG4gIC8vIHNldCB0aGUgd2lkZ2V0IGFzIHJlYWRvbmx5IGFuZCBhZGQgTklTOSBxdWVyeSBwYXJhbWV0ZXJcbiAgQElucHV0KClcbiAgaXNSZWFkb25seT1mYWxzZTtcblxuICBASW5wdXQoKVxuICBuaXM5SW5SZXNwb25zZT1mYWxzZTtcblxuICBASW5wdXQoKVxuICBidXNpbmVzc05hbWVJblJlc3BvbnNlPWZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGluY2x1ZGVMaXN0T2ZCb3hlcz1mYWxzZTtcblxuICBASW5wdXQoKVxuICBpbmNsdWRlTGlzdE9mQnVzaW5lc3NOYW1lV2l0aEJveGVzPWZhbHNlO1xuXG4gIGlzQ29tcG9uZW50UmVhZHkgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHBTZXJ2aWNlOiBIdHRwU2VydmljZVxuICApIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWRcbiAge1xuICAgIGNvbnNvbGUuaW5mbygnbGliIHZlcnNpb24gaXM6JywgTElCX1ZFUlNJT04pO1xuICAgIC8vY29uc29sZS53YXJuKCdsaWIgLSBuZ09uSW5pdCcpO1xuXG4gICAgY29uc3QgYXBpS2V5ID0gdGhpcy5pc1ZhbGlkRGF0YSh0aGlzLmFwaUtleSkgPyB0aGlzLmFwaUtleSA6IHRoaXMuZGVmYXVsdEFwaUtleTtcbiAgICB0aGlzLmh0dHBTZXJ2aWNlLnNldEFwaUtleSggYXBpS2V5ICk7XG4gICAgdGhpcy5odHRwU2VydmljZS5zZXRTaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSk7XG5cbiAgICBpZiggdGhpcy5pc1ZhbGlkRGF0YSh0aGlzLmxvY2FsaXR5VXJsKSApIHRoaXMudXNlZExvY2FsaXR5VXJsPXRoaXMubG9jYWxpdHlVcmw7XG4gICAgaWYoIHRoaXMuaXNWYWxpZERhdGEodGhpcy5zdHJlZXRVcmwpICkgdGhpcy51c2VkU3RyZWV0VXJsPXRoaXMuc3RyZWV0VXJsO1xuICAgIGlmKCB0aGlzLmlzVmFsaWREYXRhKHRoaXMuc3RyZWV0TnVtYmVyVXJsKSApIHRoaXMudXNlZFN0cmVldE51bWJlclVybD10aGlzLnN0cmVldE51bWJlclVybDtcbiAgICBpZiggdGhpcy5pc1ZhbGlkRGF0YSh0aGlzLmJveE51bWJlclVybCkgKSB0aGlzLnVzZWRCb3hOdW1iZXJVcmw9dGhpcy5ib3hOdW1iZXJVcmw7XG5cbiAgICBpZiAodGhpcy5hZGRyZXNzUGFyYW1zKVxuICAgIHtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEgPSB0aGlzLmFkZHJlc3NQYXJhbXMgYXMgYW55IGFzIFByZWZpbGxEYXRhO1xuICAgIH1cblxuICAgIHRoaXMuaXNDb21wb25lbnRSZWFkeSA9IHRydWU7XG4gIH1cblxuICBpc1ZhbGlkRGF0YSggc3RyOiBzdHJpbmcpOiBib29sZWFuXG4gIHtcbiAgICByZXR1cm4gc3RyIT09dW5kZWZpbmVkICYmIHN0ciE9PW51bGwgJiYgc3RyLmxlbmd0aD4wO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKVxuICB7XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKVxuICAgIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcylcbiAge1xuICAgIGlmIChjaGFuZ2VzKVxuICAgIHtcbiAgICAgIC8vIGNvZGUgZm9yIHRyYWNpbmdcbiAgICAgIC8vIHZpc2libGVTdWdnZXN0aW9uU3RyZWV0TmJDb3VudFxuICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgICB0aGlzLmRpc3BsYXlQYXJhbWV0ZXJzQ2hhbmdlc1RvQ29uc29sZShjaGFuZ2VzKTtcbiAgICAgIH1cblxuXG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnYXBpS2V5JykgJiYgIWNoYW5nZXNbJ2FwaUtleSddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgIGNvbnN0IGFwaUtleSA9IHRoaXMuYXBpS2V5IT09bnVsbCAmJiB0aGlzLmFwaUtleSE9PXVuZGVmaW5lZCAmJiB0aGlzLmFwaUtleS5sZW5ndGg+MFxuICAgICAgICAgICAgPyB0aGlzLmFwaUtleVxuICAgICAgICAgICAgOiB0aGlzLmRlZmF1bHRBcGlLZXk7XG4gICAgICAgIHRoaXMuaHR0cFNlcnZpY2Uuc2V0QXBpS2V5KCBhcGlLZXkgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ2xvY2FsaXR5VXJsJykgJiYgIWNoYW5nZXNbJ2xvY2FsaXR5VXJsJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgY29uc3QgbG9jYWxpdHlVcmwgPSB0aGlzLmxvY2FsaXR5VXJsIT09bnVsbCAmJiB0aGlzLmxvY2FsaXR5VXJsIT09dW5kZWZpbmVkICYmIHRoaXMubG9jYWxpdHlVcmwubGVuZ3RoPjBcbiAgICAgICAgICAgID8gdGhpcy5sb2NhbGl0eVVybFxuICAgICAgICAgICAgOiB0aGlzLmJhc2VVcmwgKyAnbG9jYWxpdHknO1xuICAgICAgICB0aGlzLnVzZWRMb2NhbGl0eVVybD1sb2NhbGl0eVVybDtcbiAgICAgICAgY29uc29sZS5sb2coJ25nT25DaGFuZ2VzIC0gbG9jYWxpdHlVcmw6ICcsIGxvY2FsaXR5VXJsKTtcbiAgICAgICAgdGhpcy5zZXROdW1iZXJPZkV4Y2VwdGlvbnMoMCk7XG4gICAgICAgIHRoaXMuc2V0VmFsaWRhdGVkQnlCYWNrZW5kKHRydWUpO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3N0cmVldFVybCcpICYmICFjaGFuZ2VzWydzdHJlZXRVcmwnXS5maXJzdENoYW5nZSkge1xuICAgICAgICBjb25zdCBzdHJlZXRVcmwgPSB0aGlzLnN0cmVldFVybCE9PW51bGwgJiYgdGhpcy5zdHJlZXRVcmwhPT11bmRlZmluZWQgJiYgdGhpcy5zdHJlZXRVcmwubGVuZ3RoPjBcbiAgICAgICAgICAgID8gdGhpcy5zdHJlZXRVcmxcbiAgICAgICAgICAgIDogdGhpcy5iYXNlVXJsICsgJ3N0cmVldCc7XG4gICAgICAgIHRoaXMudXNlZFN0cmVldFVybD1zdHJlZXRVcmw7XG4gICAgICAgIHRoaXMuc2V0TnVtYmVyT2ZFeGNlcHRpb25zKDApO1xuICAgICAgICB0aGlzLnNldFZhbGlkYXRlZEJ5QmFja2VuZCh0cnVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzdHJlZXROdW1iZXJVcmwnKSAmJiAhY2hhbmdlcy5zdHJlZXROdW1iZXJVcmwuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgY29uc3Qgc3RyZWV0TnVtYmVyVXJsID0gdGhpcy5zdHJlZXROdW1iZXJVcmwhPT1udWxsICYmIHRoaXMuc3RyZWV0TnVtYmVyVXJsIT09dW5kZWZpbmVkICYmIHRoaXMuc3RyZWV0TnVtYmVyVXJsLmxlbmd0aD4wXG4gICAgICAgICAgICA/IHRoaXMuc3RyZWV0TnVtYmVyVXJsXG4gICAgICAgICAgICA6IHRoaXMuYmFzZVVybCArICdzdHJlZXROdW1iZXInO1xuICAgICAgICB0aGlzLnVzZWRTdHJlZXROdW1iZXJVcmw9c3RyZWV0TnVtYmVyVXJsO1xuICAgICAgICB0aGlzLnNldE51bWJlck9mRXhjZXB0aW9ucygwKTtcbiAgICAgICAgdGhpcy5zZXRWYWxpZGF0ZWRCeUJhY2tlbmQodHJ1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnYm94TnVtYmVyVXJsJykgJiYgIWNoYW5nZXMuYm94TnVtYmVyVXJsLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgIGNvbnN0IGJveE51bWJlclVybCA9IHRoaXMuYm94TnVtYmVyVXJsIT09bnVsbCAmJiB0aGlzLmJveE51bWJlclVybCE9PXVuZGVmaW5lZCAmJiB0aGlzLmJveE51bWJlclVybC5sZW5ndGg+MFxuICAgICAgICAgICAgPyB0aGlzLmJveE51bWJlclVybFxuICAgICAgICAgICAgOiB0aGlzLmJhc2VVcmwgKyAnYm94TnVtYmVyJztcbiAgICAgICAgdGhpcy51c2VkQm94TnVtYmVyVXJsPWJveE51bWJlclVybDtcbiAgICAgICAgdGhpcy5zZXROdW1iZXJPZkV4Y2VwdGlvbnMoMCk7XG4gICAgICAgIHRoaXMuc2V0VmFsaWRhdGVkQnlCYWNrZW5kKHRydWUpO1xuICAgICAgfVxuXG5cblxuICAgICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ2FkZHJlc3NQYXJhbXMnKSAmJiAhY2hhbmdlc1snYWRkcmVzc1BhcmFtcyddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAvLyBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnYWRkcmVzc1BhcmFtcycpKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc2luZ1ByZWZpbGxEYXRhID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lbnRlclByZWZpbGxNb2RlKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzID0gbnVsbDtcbiAgICAgICAgdGhpcy5ub3RpZnlBZGRyZXNzQ29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5jbGVhcldpZGdldCgpO1xuICAgICAgICAvKlxuICAgICAgICBpZiAodGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhICE9PSBudWxsICYmIHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gdGhpcy5vbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoSW5wdXROYW1lVHlwZS5MT0NBTElUWSk7XG4gICAgICAgICAgdGhpcy5jbGVhcldpZGdldCgpO1xuICAgICAgICB9XG4gICAgICAgICovXG4gICAgICAgIHRoaXMuYm94TnVtYmVyUHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgICB0aGlzLnN0cmVldE51bWJlclByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdHJlZXRQcmVmaWxsRGF0YSA9IG51bGw7XG5cbiAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge2NvbnNvbGUubG9nKCdsaWI6OndpZGdldCBkZXRlY3RlZCBwcmVmaWxsaW5nJywgdGhpcy5hZGRyZXNzUGFyYW1zKTsgfVxuICAgICAgICB0aGlzLmFkZHJlc3NQYXJhbXMubWluTGV2ZWwgPSAvKjQqLyBBRERSRVNTTEVWRUwuTE9DQUxJVFk7XG4gICAgICAgIHRoaXMubWluTGV2ZWwgPSB0aGlzLmFkZHJlc3NQYXJhbXMubWluTGV2ZWw7XG4gICAgICAgIC8vIHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSA9IHRoaXMuYWRkcmVzc1BhcmFtczsgLy8gYXMgYW55IGFzIFByZWZpbGxEYXRhO1xuICAgICAgICB0aGlzLmxvY2FsaXR5UHJlZmlsbERhdGEgPSBuZXcgUHJlZmlsbERhdGEodGhpcy5hZGRyZXNzUGFyYW1zKTtcbiAgICAgICAgLy8gT2JqZWN0LmFzc2lnbih0aGlzLmxvY2FsaXR5UHJlZmlsbERhdGEsIHRoaXMuYWRkcmVzc1BhcmFtcyk7XG4gICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtjb25zb2xlLmxvZygnbGliOjpjaGVja2luZyBsb2NhbGl0eSBtYXRjaC4uLiAnLCB0aGlzLmxvY2FsaXR5UHJlZmlsbERhdGEpOyB9XG4gICAgICB9XG5cbiAgICAgIC8vIHN1Z2dlc3Rpb24gbGV2ZWxcbiAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzdWdnZXN0aW9uTGV2ZWwnKVxuICAgICAgICAgIC8qJiYgIWNoYW5nZXMuc3VnZ2VzdGlvbkxldmVsLmZpcnN0Q2hhbmdlXG4gICAgICAgICAgJiYgIWNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3ByZWZpbGxEYXRhJykgJiYgISB0aGlzLnByZWZpbGxpbmcqLyApIHtcbiAgICAgICAgICAgIC8qXG4gICAgICAgIHRoaXMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuU1RSRUVUX05VTUJFUjtcbiAgICAgICAgLy8gdGhpcy5hZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdzdHJlZXQgbnVtYmVyIC0gbmdPbmNoYW5nZXMgLSBzdHJlZXROYW1lIGNoYW5nZXMgZGV0ZWN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMuc3RyZWV0TmFtZS5jdXJyZW50VmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgdGhpcy5jbGVhcldpZGdldCgpO1xuICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICAgICAgKi9cblxuICAgICAgICBjb25zdCBzbCA9IE51bWJlcihjaGFuZ2VzWydzdWdnZXN0aW9uTGV2ZWwnXS5jdXJyZW50VmFsdWUpO1xuICAgICAgICBzd2l0Y2goc2wpXG4gICAgICAgIHtcbiAgICAgICAgICBjYXNlIDA6IHRoaXMuc3VnZ2VzdGlvbkxldmVsID0gU3VnZ2VzdGlvbkxldmVsVHlwZS5Ob25lOyBicmVhaztcbiAgICAgICAgICBjYXNlIDE6IHRoaXMuc3VnZ2VzdGlvbkxldmVsID0gU3VnZ2VzdGlvbkxldmVsVHlwZS5TdHJlZXROdW1iZXI7IGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjogdGhpcy5zdWdnZXN0aW9uTGV2ZWwgPSBTdWdnZXN0aW9uTGV2ZWxUeXBlLlN0cmVldEFuZEJveE51bWJlcjsgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZVxuICAgICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3Nob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUnKVxuICAgICAgICAgICYmICFjaGFuZ2VzWydzaG93RGVidWdNZXNzYWdlVG9Db25zb2xlJ10uZmlyc3RDaGFuZ2UgICkge1xuXG4gICAgICAgIGNvbnN0IHNkbTJjID0gY2hhbmdlc1snc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSddLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgaWYoc2RtMmMpXG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLmh0dHBTZXJ2aWNlLnNldFNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUoc2RtMmMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdudW1iZXJPZkV4Y2VwdGlvbnMnKSApIHtcbiAgICAgICAgdGhpcy5udW1iZXJPZkV4Y2VwdGlvbnMgPSBjaGFuZ2VzWydudW1iZXJPZkV4Y2VwdGlvbnMnXS5jdXJyZW50VmFsdWU7XG5cbiAgICAgIH1cbiAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCd2YWxpZGF0ZWRCeUJhY2tlbmQnKSApIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmQgPSBjaGFuZ2VzWyd2YWxpZGF0ZWRCeUJhY2tlbmQnXS5jdXJyZW50VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZGlzcGxheVBhcmFtZXRlcnNDaGFuZ2VzVG9Db25zb2xlKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpXG4gIHtcbiAgICAvLyBtZXNzYWdlT3B0aW9uXG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ21lc3NhZ2VPcHRpb24nKSAmJiAhY2hhbmdlc1snbWVzc2FnZU9wdGlvbiddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzWydtZXNzYWdlT3B0aW9uJ10uY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gbWVzc2FnZU9wdGlvbicsIHdjQ2hhbmdlcyk7XG4gICAgfVxuXG4gICAgLy8gbWF4U3VnZ2VzdGlvbkxvY2FsaXR5XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ21heFN1Z2dlc3Rpb25Mb2NhbGl0eScpICYmICFjaGFuZ2VzWydtYXhTdWdnZXN0aW9uTG9jYWxpdHknXS5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlc1snbWF4U3VnZ2VzdGlvbkxvY2FsaXR5J10uY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gbWF4U3VnZ2VzdGlvbkxvY2FsaXR5Jywgd2NDaGFuZ2VzKTtcbiAgICB9XG5cbiAgICAvLyB2aXNpYmxlU3VnZ2VzdGlvbkxvY2FsaXR5Q291bnRcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgndmlzaWJsZVN1Z2dlc3Rpb25Mb2NhbGl0eUNvdW50JykgJiYgIWNoYW5nZXNbJ3Zpc2libGVTdWdnZXN0aW9uTG9jYWxpdHlDb3VudCddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzWyd2aXNpYmxlU3VnZ2VzdGlvbkxvY2FsaXR5Q291bnQnXS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSB2aXNpYmxlU3VnZ2VzdGlvbkxvY2FsaXR5Q291bnQnLCB3Y0NoYW5nZXMpO1xuICAgIH1cblxuICAgIC8vIHNvcnRDcml0ZXJpYUxvY2FsaXR5XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3NvcnRDcml0ZXJpYUxvY2FsaXR5JykgJiYgIWNoYW5nZXNbJ3NvcnRDcml0ZXJpYUxvY2FsaXR5J10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXNbJ3NvcnRDcml0ZXJpYUxvY2FsaXR5J10uY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gc29ydENyaXRlcmlhTG9jYWxpdHknLCB3Y0NoYW5nZXMpO1xuICAgIH1cblxuICAgIC8vIG1heFN1Z2dlc3Rpb25TdHJlZXRcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnbWF4U3VnZ2VzdGlvblN0cmVldCcpICYmICFjaGFuZ2VzWydtYXhTdWdnZXN0aW9uU3RyZWV0J10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXNbJ21heFN1Z2dlc3Rpb25TdHJlZXQnXS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBtYXhTdWdnZXN0aW9uU3RyZWV0Jywgd2NDaGFuZ2VzKTtcbiAgICB9XG4gICAgLy8gdmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXRDb3VudFxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCd2aXNpYmxlU3VnZ2VzdGlvblN0cmVldENvdW50JykgJiYgIWNoYW5nZXNbJ3Zpc2libGVTdWdnZXN0aW9uU3RyZWV0Q291bnQnXS5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlc1sndmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXRDb3VudCddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIHZpc2libGVTdWdnZXN0aW9uU3RyZWV0Q291bnQnLCB3Y0NoYW5nZXMpO1xuICAgIH1cbiAgICAvLyBzb3J0Q3JpdGVyaWFTdHJlZXRcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnc29ydENyaXRlcmlhU3RyZWV0JykgJiYgIWNoYW5nZXNbJ3NvcnRDcml0ZXJpYVN0cmVldCddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzWydzb3J0Q3JpdGVyaWFTdHJlZXQnXS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBzb3J0Q3JpdGVyaWFTdHJlZXQnLCB3Y0NoYW5nZXMpO1xuICAgIH1cblxuICAgIC8vIG1heFN1Z2dlc3Rpb25TdHJlZXROYlxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdtYXhTdWdnZXN0aW9uU3RyZWV0TmInKSAmJiAhY2hhbmdlc1snbWF4U3VnZ2VzdGlvblN0cmVldE5iJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXNbJ21heFN1Z2dlc3Rpb25TdHJlZXROYiddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIG1heFN1Z2dlc3Rpb25TdHJlZXROYicsIHdjQ2hhbmdlcyk7XG4gICAgfVxuICAgIC8vIHZpc2libGVTdWdnZXN0aW9uU3RyZWV0TmJDb3VudFxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCd2aXNpYmxlU3VnZ2VzdGlvblN0cmVldE5iQ291bnQnKSAmJiAhY2hhbmdlc1sndmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXROYkNvdW50J10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXNbJ3Zpc2libGVTdWdnZXN0aW9uU3RyZWV0TmJDb3VudCddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIHZpc2libGVTdWdnZXN0aW9uU3RyZWV0TmJDb3VudCcsIHdjQ2hhbmdlcyk7XG4gICAgfVxuICAgIC8vIHNvcnRDcml0ZXJpYVN0cmVldE5iXG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3NvcnRDcml0ZXJpYVN0cmVldE5iJykgJiYgIWNoYW5nZXNbJ3NvcnRDcml0ZXJpYVN0cmVldE5iJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXNbJ3NvcnRDcml0ZXJpYVN0cmVldE5iJ10uY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gc29ydENyaXRlcmlhU3RyZWV0TmInLCB3Y0NoYW5nZXMpO1xuICAgIH1cblxuICAgIC8vIG1heFN1Z2dlc3Rpb25Cb3hOYlxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdtYXhTdWdnZXN0aW9uQm94TmInKSAmJiAhY2hhbmdlc1snbWF4U3VnZ2VzdGlvbkJveE5iJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXNbJ21heFN1Z2dlc3Rpb25Cb3hOYiddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIG1heFN1Z2dlc3Rpb25Cb3hOYicsIHdjQ2hhbmdlcyk7XG4gICAgfVxuICAgIC8vIHZpc2libGVTdWdnZXN0aW9uQm94TmJDb3VudFxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCd2aXNpYmxlU3VnZ2VzdGlvbkJveE5iQ291bnQnKSAmJiAhY2hhbmdlc1sndmlzaWJsZVN1Z2dlc3Rpb25Cb3hOYkNvdW50J10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXNbJ3Zpc2libGVTdWdnZXN0aW9uQm94TmJDb3VudCddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIHZpc2libGVTdWdnZXN0aW9uQm94TmJDb3VudCcsIHdjQ2hhbmdlcyk7XG4gICAgfVxuICAgIC8vIHNvcnRDcml0ZXJpYUJveE5iXG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3NvcnRDcml0ZXJpYUJveE5iJykgJiYgIWNoYW5nZXNbJ3NvcnRDcml0ZXJpYUJveE5iJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXNbJ3NvcnRDcml0ZXJpYUJveE5iJ10uY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gc29ydENyaXRlcmlhQm94TmInLCB3Y0NoYW5nZXMpO1xuICAgIH1cblxuICAgIC8vIGFwaUtleVxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdhcGlLZXknKSAmJiAhY2hhbmdlc1snYXBpS2V5J10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXNbJ2FwaUtleSddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIGFwaUtleScsIHdjQ2hhbmdlcyk7XG4gICAgfVxuXG4gICAgLy8gbG9jYWxpdHlVcmxcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnbG9jYWxpdHlVcmwnKSAmJiAhY2hhbmdlc1snbG9jYWxpdHlVcmwnXS5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlc1snbG9jYWxpdHlVcmwnXS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBsb2NhbGl0eVVybCcsIHdjQ2hhbmdlcyk7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBjdXJyZW50IGxvY2FsaXR5VXJsJywgdGhpcy5sb2NhbGl0eVVybCk7XG4gICAgfVxuXG4gICAgLy8gc3RyZWV0VXJsXG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3N0cmVldFVybCcpICYmICFjaGFuZ2VzWydzdHJlZXRVcmwnXS5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlc1snc3RyZWV0VXJsJ10uY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gc3RyZWV0VXJsJywgd2NDaGFuZ2VzKTtcbiAgICB9XG5cbiAgICAvLyBzdHJlZXROdW1iZXJVcmxcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnc3RyZWV0TnVtYmVyVXJsJykgJiYgIWNoYW5nZXNbJ3N0cmVldE51bWJlclVybCddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzWydzdHJlZXROdW1iZXJVcmwnXS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBzdHJlZXROdW1iZXJVcmwnLCB3Y0NoYW5nZXMpO1xuICAgIH1cblxuICAgIC8vIGJveE51bWJlclVybFxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdib3hOdW1iZXJVcmwnKSAmJiAhY2hhbmdlc1snYm94TnVtYmVyVXJsJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXNbJ2JveE51bWJlclVybCddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIGJveE51bWJlclVybCcsIHdjQ2hhbmdlcyk7XG4gICAgfVxuXG4gICAgLy8gc3VnZ2VzdGlvbkxldmVsXG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3N1Z2dlc3Rpb25MZXZlbCcpICYmICFjaGFuZ2VzWydzdWdnZXN0aW9uTGV2ZWwnXS5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlc1snc3VnZ2VzdGlvbkxldmVsJ10uY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gc3VnZ2VzdGlvbkxldmVsJywgd2NDaGFuZ2VzKTtcbiAgICB9XG4gIH1cblxuICBjbGVhcldpZGdldCgpIHtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFyV2lkZ2V0KCk7XG4gICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5jbGVhcldpZGdldCgpO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFyV2lkZ2V0KCk7XG4gICAgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5jbGVhcldpZGdldCgpO1xuICB9XG5cbiAgY2hhbmdlTWluTGV2ZWwobWluTGV2ZWw6IG51bWJlcikge1xuICAgIHRoaXMubWluTGV2ZWwgPSBtaW5MZXZlbDtcbiAgfVxuXG4gIC8vIENhbGxlZCBieSB0aGUgc3BlY2lmaWMgYnV0dG9ucyBpbiB0aGUgYXBwXG4gIG9uQ2xlYXJJbnB1dChmb2N1czoge3NldEZvY3VzOiBib29sZWFuLCB0aW1lc3RhbXA6IERhdGV9KSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnbGliOjpvbkNsZWFySW5wdXQnLCBmb2N1cyk7IH1cblxuICAgIC8qXG4gICAgaWYgKGZvY3VzID09PSBudWxsIHx8IGZvY3VzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9Ki9cblxuICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG5cbiAgICBjb25zdCBzZXRGb2N1cyA9IChmb2N1cyA9PT0gbnVsbCB8fCBmb2N1cyA9PT0gdW5kZWZpbmVkKSA/IGZhbHNlIDogZm9jdXMuc2V0Rm9jdXM7XG5cbiAgICBzd2l0Y2ggKHRoaXMubWluTGV2ZWwpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHRoaXMuYm94TnVtYmVyID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KHNldEZvY3VzLCBmYWxzZSk7XG4gICAgICAgICAgdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoJ0JPWF9OVU1CRVInKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHRoaXMuYm94TnVtYmVyID0gJyc7XG4gICAgICAgICAgdGhpcy5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIub25DbGVhclN0cmVldE51bWJlcklucHV0KHNldEZvY3VzLCBmYWxzZSk7XG4gICAgICAgICAgdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoJ1NUUkVFVF9OVU1CRVInKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHRoaXMuYm94TnVtYmVyID0gJyc7XG4gICAgICAgICAgdGhpcy5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgICB0aGlzLnN0cmVldCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KHNldEZvY3VzLCBmYWxzZSk7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcldpZGdldCgpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIub25DbGVhclN0cmVldE51bWJlcklucHV0KHNldEZvY3VzLCBmYWxzZSk7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuY2xlYXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KCdTVFJFRVQnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyBCb3ggbnVtYmVyXG4gICAgICAgICAgdGhpcy5ib3hOdW1iZXIgPSAnJztcbiAgICAgICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVCb3hOYilcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFySW5wdXQoc2V0Rm9jdXMsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gU3RyZWV0IG51bWJlclxuICAgICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIpXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIub25DbGVhclN0cmVldE51bWJlcklucHV0KHNldEZvY3VzLCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFN0cmVldCBuYW1lXG4gICAgICAgICAgdGhpcy5zdHJlZXQgPSAnJztcbiAgICAgICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVTdHJlZXQpXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuY2xlYXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBMb2NhbGl0eVxuICAgICAgICAgIHRoaXMubG9jYWxpdHkgPSAnJztcbiAgICAgICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eSlcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5LnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuY2xlYXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KCdMT0NBTElUWScpO1xuICAgICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGdldEJveFByZWZpeCgpOiBzdHJpbmcge1xuICAgIGxldCBwcmVmaXggPSAnJztcbiAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0ZWRMYW5ndWFnZSkge1xuICAgICAgY2FzZSAnZnInOlxuICAgICAgICBwcmVmaXggPSAnQlRFJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdubCc6XG4gICAgICAgICAgcHJlZml4ID0gJ0JVUyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBwcmVmaXggPSAnQk9YJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBwcmVmaXg7XG4gIH1cblxuICBub3RpZnlBZGRyZXNzQ29tcGxldGUoKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ25vdGlmeSBmb3IgYWRkcmVzcyBjb21wbGV0ZScpO1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpXG4gICAge1xuICAgICAgY29uc29sZS5sb2coJ25vdGlmeUFkZHJlc3NDb21wbGV0ZScsIHRoaXMuc2VsZWN0ZWRBZGRyZXNzLCAnbmlzOUluUmVzcG9uc2U6Jyt0aGlzLm5pczlJblJlc3BvbnNlLCB0eXBlb2YgdGhpcy5uaXM5SW5SZXNwb25zZSk7XG4gICAgfVxuXG4gICAgICBpZih0aGlzLnNlbGVjdGVkQWRkcmVzcyl7XG4gICAgICBsZXQgaXNDb21wbGV0ZVN0cmVldE51bWJlciA9IGZhbHNlO1xuICAgICAgbGV0IGlzQ29tcGxldGVCb3hOdW1iZXIgPSBmYWxzZTtcbiAgICAgIGlmKHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmhhc093blByb3BlcnR5KCdpc0NvbXBsZXRlJykgJiYgdGhpcy5zZWxlY3RlZEFkZHJlc3MuaXNDb21wbGV0ZSl7XG4gICAgICAgIGlmKHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmJveE51bWJlcil7XG4gICAgICAgICAgaXNDb21wbGV0ZUJveE51bWJlciA9IHRydWU7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIGlzQ29tcGxldGVTdHJlZXROdW1iZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmF1dG9maWxsRGF0YSA9IG5ldyBBdXRvZmlsbERhdGEoe1xuICAgICAgc3RyZWV0TmFtZTogdGhpcy5zZWxlY3RlZEFkZHJlc3Muc3RyZWV0TmFtZSA/IHRoaXMuc2VsZWN0ZWRBZGRyZXNzLnN0cmVldE5hbWUgOiAnJyxcbiAgICAgIHN0cmVldE51bWJlcjogdGhpcy5zZWxlY3RlZEFkZHJlc3MuaG91c2VOdW1iZXIgPyB0aGlzLnNlbGVjdGVkQWRkcmVzcy5ob3VzZU51bWJlciA6ICcnLFxuICAgICAgYm94TnVtYmVyOiB0aGlzLnNlbGVjdGVkQWRkcmVzcy5ib3hOdW1iZXIgPyB0aGlzLnNlbGVjdGVkQWRkcmVzcy5ib3hOdW1iZXIgOiAnJyxcbiAgICAgIHBvc3RhbENvZGU6IHRoaXMuc2VsZWN0ZWRBZGRyZXNzLnBvc3RhbENvZGUgPyB0aGlzLnNlbGVjdGVkQWRkcmVzcy5wb3N0YWxDb2RlIDogJycsXG4gICAgICBtdW5pY2lwYWxpdHlOYW1lOiB0aGlzLnNlbGVjdGVkQWRkcmVzcy5tdW5pY2lwYWxpdHlOYW1lID8gdGhpcy5zZWxlY3RlZEFkZHJlc3MubXVuaWNpcGFsaXR5TmFtZSA6ICcnLFxuICAgICAgaXNDb21wbGV0ZVN0cmVldE51bWJlcjogaXNDb21wbGV0ZVN0cmVldE51bWJlcixcbiAgICAgIGlzQ29tcGxldGVCb3hOdW1iZXI6IGlzQ29tcGxldGVCb3hOdW1iZXIsXG4gICAgICBzZWxlY3RlZEFkZHJlc3M6IHRoaXMuc2VsZWN0ZWRBZGRyZXNzXG4gICAgICB9KVxuICAgICAgaWYodGhpcy5taW5MZXZlbD09QUREUkVTU0xFVkVMLkxPQ0FMSVRZKXtcbiAgICAgICAgaWYodGhpcy5zZWxlY3RlZEFkZHJlc3Muc3RyZWV0TmFtZSl7XG4gICAgICAgICAgdGhpcy5taW5MZXZlbD1BRERSRVNTTEVWRUwuU1RSRUVUXG4gICAgICAgICAgdGhpcy5zdHJlZXROYW1lQXV0b2ZpbGxEYXRhPXRoaXMuYXV0b2ZpbGxEYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmhvdXNlTnVtYmVyKXtcbiAgICAgICAgICB0aGlzLm1pbkxldmVsPUFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSXG5cbiAgICAgICAgICB0aGlzLnN0cmVldE51bWJlckF1dG9maWxsRGF0YT10aGlzLmF1dG9maWxsRGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZih0aGlzLnNlbGVjdGVkQWRkcmVzcy5ib3hOdW1iZXIpe1xuICAgICAgICAgIHRoaXMubWluTGV2ZWw9QUREUkVTU0xFVkVMLkJPWF9OVU1CRVJcbiAgICAgICAgICB0aGlzLmJveE51bWJlckF1dG9maWxsRGF0YT10aGlzLmF1dG9maWxsRGF0YTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYodGhpcy5taW5MZXZlbD09QUREUkVTU0xFVkVMLlNUUkVFVCl7XG4gICAgICAgIGlmKHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmhvdXNlTnVtYmVyKXtcbiAgICAgICAgICB0aGlzLm1pbkxldmVsPUFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSXG5cbiAgICAgICAgICB0aGlzLnN0cmVldE51bWJlckF1dG9maWxsRGF0YT10aGlzLmF1dG9maWxsRGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZih0aGlzLnNlbGVjdGVkQWRkcmVzcy5ib3hOdW1iZXIpe1xuICAgICAgICAgIHRoaXMubWluTGV2ZWw9QUREUkVTU0xFVkVMLkJPWF9OVU1CRVJcbiAgICAgICAgICB0aGlzLmJveE51bWJlckF1dG9maWxsRGF0YT10aGlzLmF1dG9maWxsRGF0YTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYodGhpcy5taW5MZXZlbD09QUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVIpe1xuICAgICAgICBpZih0aGlzLnNlbGVjdGVkQWRkcmVzcy5ib3hOdW1iZXIpe1xuICAgICAgICAgICB0aGlzLm1pbkxldmVsPUFERFJFU1NMRVZFTC5CT1hfTlVNQkVSXG4gICAgICAgICAgdGhpcy5ib3hOdW1iZXJBdXRvZmlsbERhdGE9dGhpcy5hdXRvZmlsbERhdGE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgIH1cbiAgICAgIHRoaXMuYWRkcmVzc0NvbXBsZXRlRXZlbnRFbWl0dGVyLmVtaXQodGhpcy5zZWxlY3RlZEFkZHJlc3MpO1xuICAgICAgdGhpcy5lbWl0dGVkQWRkcmVzcyA9IHRoaXMuc2VsZWN0ZWRBZGRyZXNzO1xuICAgICAgdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkodGhpcy5lbWl0dGVkQWRkcmVzcyk7XG5cbiAgfVxuXG4gIG9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcihldmVudCkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xpYjo6b25DbGVhcklucHV0RXZlbnRFbWl0dGVyJywgZXZlbnQpOyB9XG5cbiAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgIGxldCBuZXh0QWRkcmVzcyA9IHRoaXMuc2VsZWN0ZWRBZGRyZXNzOyAvLyB0aGlzLmVtaXR0ZWRBZGRyZXNzO1xuICAgIGlmIChldmVudCA9PT0gSW5wdXROYW1lVHlwZS5MT0NBTElUWSlcbiAgICB7XG4gICAgICAvLyBCb3ggbnVtYmVyXG4gICAgICAgdGhpcy5ib3hOdW1iZXIgPSAnJztcbiAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZUJveE5iKVxuICAgICAge1xuICAgICAgICBpZih0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQhPScnKVxuICAgICAgICB7XG4gICAgICAgICB0aGlzLm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcihJbnB1dE5hbWVUeXBlLkJPWF9OVU1CRVIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5ib3hOdW1iZXJBdXRvZmlsbERhdGE9bnVsbDtcbiAgICAgICAgIFxuICAgICAgfVxuICAgICAgLy8gU3RyZWV0IG51bWJlclxuICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVTdHJlZXROYilcbiAgICAgIHtcbiAgICAgICAgaWYodGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0IT0nJylcbiAgICAgICAge1xuICAgICAgICAgdGhpcy5vbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoSW5wdXROYW1lVHlwZS5TVFJFRVRfTlVNQkVSKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zdHJlZXROYW1lID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIub25DbGVhclN0cmVldE51bWJlcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyQXV0b2ZpbGxEYXRhPW51bGw7XG4gICAgICB9XG4gICAgICAvLyBTdHJlZXQgbmFtZVxuICAgICAgIHRoaXMuc3RyZWV0ID0gJyc7XG4gICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVTdHJlZXQpXG4gICAgICB7XG4gICAgICAgIGlmKHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LnNlYXJjaFRleHQhPScnKVxuICAgICAgICB7XG4gICAgICAgICB0aGlzLm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcihJbnB1dE5hbWVUeXBlLlNUUkVFVCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgICB0aGlzLnN0cmVldE5hbWVBdXRvZmlsbERhdGE9bnVsbDtcbiAgICAgIH1cbiAgICAgIC8vIExvY2FsaXR5XG4gICAgICAgdGhpcy5sb2NhbGl0eSA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkpXG4gICAgICB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5hdXRvZmlsbERhdGE9bnVsbDtcbiAgICAgIH1cblxuICAgICAgIG5leHRBZGRyZXNzID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZSBpZiAoZXZlbnQgPT09IElucHV0TmFtZVR5cGUuU1RSRUVUKVxuICAgIHtcbiAgICAgIC8vIEJveCBudW1iZXJcbiAgICAgIHRoaXMuYm94TnVtYmVyID0gJyc7XG4gICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVCb3hOYilcbiAgICAgIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgICB0aGlzLmJveE51bWJlckF1dG9maWxsRGF0YT1udWxsXG4gICAgICB9XG4gICAgICAvLyBTdHJlZXQgbnVtYmVyXG4gICAgICB0aGlzLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIpXG4gICAgICB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5vbkNsZWFyU3RyZWV0TnVtYmVySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJBdXRvZmlsbERhdGE9bnVsbDtcbiAgICAgIH1cbiAgICAgIC8vIFN0cmVldCBuYW1lXG4gICAgICB0aGlzLnN0cmVldCA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0KVxuICAgICAge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5zdHJlZXROYW1lQXV0b2ZpbGxEYXRhPW51bGw7XG4gICAgICB9XG5cbiAgICAgIG5leHRBZGRyZXNzID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZSBpZiAoZXZlbnQgPT09IElucHV0TmFtZVR5cGUuU1RSRUVUX05VTUJFUilcbiAgICB7XG4gICAgICAvLyBCb3ggbnVtYmVyXG4gICAgICB0aGlzLmJveE51bWJlciA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlQm94TmIpXG4gICAgICB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5ib3hOdW1iZXJBdXRvZmlsbERhdGE9bnVsbDtcbiAgICAgIH1cbiAgICAgIC8vIFN0cmVldCBudW1iZXJcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVTdHJlZXROYilcbiAgICAgIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIC8vIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgICB0aGlzLnN0cmVldE51bWJlckF1dG9maWxsRGF0YT1udWxsO1xuICAgICAgfVxuXG4gICAgICBuZXh0QWRkcmVzcyA9IG51bGw7XG4gICAgfVxuICAgIGVsc2UgaWYgKGV2ZW50ID09PSBJbnB1dE5hbWVUeXBlLkJPWF9OVU1CRVIpXG4gICAge1xuICAgICAgLy8gQm94IG51bWJlclxuICAgICAgdGhpcy5ib3hOdW1iZXIgPSAnJztcbiAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZUJveE5iKVxuICAgICAge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgLy8gdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmJveE51bWJlckF1dG9maWxsRGF0YT1udWxsXG5cbiAgICAgIC8vIEF0dGVudGlvbjogaWYgbm90LWluLWxpc3QgZG9uJ3QgcmVzZXQgdGhlIGFkZHJlc3MsIGp1c3QgbW9kaWZ5IGl0XG4gICAgICBjb25zdCBhZGRyZXNzSXNOb3RJbkxpc3RcbiAgICAgICAgPSBuZXh0QWRkcmVzcyAhPT0gdW5kZWZpbmVkICYmICBuZXh0QWRkcmVzcyAhPT0gbnVsbFxuICAgICAgICAgICYmIG5leHRBZGRyZXNzLmhhc093blByb3BlcnR5KCdub3QtaW4tbGlzdCcpICYmIG5leHRBZGRyZXNzWydub3QtaW4tbGlzdCddID09PSB0cnVlXG4gICAgICAgID8gdHJ1ZSA6IGZhbHNlO1xuXG4gICAgICAgIC8qXG4gICAgICBpZiAoYWRkcmVzc0lzTm90SW5MaXN0KVxuICAgICAge1xuICAgICAgICBkZWxldGUgbmV4dEFkZHJlc3MuYm94TnVtYmVyO1xuICAgICAgICBuZXh0QWRkcmVzcy5pc0NvbXBsZXRlTm90aWZpY2F0aW9uRG9uZSA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzICE9PSBudWxsIClcbiAgICAgICAge1xuICAgICAgICAgIGNvbnNvbGUud2FybigncmVzZXQgYm94IG9uIG5vdC1pbi1saXN0JywgdGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzKTtcblxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlXG4gICAgICB7XG4gICAgICAgIG5leHRBZGRyZXNzID0gbnVsbDtcbiAgICAgIH1cbiAgICAgICovXG5cbiAgICAgIG5leHRBZGRyZXNzID0gdGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzICE9PSBudWxsID8gdGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzIDogbnVsbDtcbiAgICAgIC8qXG4gICAgICBjb25zdCBhZGRyZXNzSXNOb3RJbkxpc3RcbiAgICAgICAgPSBuZXh0QWRkcmVzcyAhPT0gbnVsbCAmJiBuZXh0QWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnbm90LWluLWxpc3QnKSAmJiBuZXh0QWRkcmVzc1snbm90LWluLWxpc3QnXSA9PT0gdHJ1ZVxuICAgICAgICA/IHRydWUgOiBmYWxzZTtcbiAgICAgICovXG4gICAgICBjb25zdCBhZGRyZXNzSXNDb21wbGV0ZVxuICAgICAgICA9IG5leHRBZGRyZXNzICE9PSB1bmRlZmluZWQgJiYgbmV4dEFkZHJlc3MgIT09IG51bGwgJiYgIW5leHRBZGRyZXNzLmhhc093blByb3BlcnR5KCdib3hOdW1iZXInKVxuICAgICAgICAgICYmIG5leHRBZGRyZXNzLmhhc093blByb3BlcnR5KCdpc0NvbXBsZXRlJykgJiYgbmV4dEFkZHJlc3MuaXNDb21wbGV0ZSA9PT0gdHJ1ZSA/IHRydWUgOiBmYWxzZTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuYWRkcmVzc0lzQ29tcGxldGUgPSBhZGRyZXNzSXNDb21wbGV0ZTtcbiAgICB9XG5cbiAgICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdChldmVudCk7XG5cbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsaWI6Om9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcicsXG4gICAgICAnZW1pdHRlZCBhZGRyZXNzOicrSlNPTi5zdHJpbmdpZnkodGhpcy5lbWl0dGVkQWRkcmVzcyksICduZXh0QWRkcmVzczonK0pTT04uc3RyaW5naWZ5KG5leHRBZGRyZXNzKSApOyB9XG5cbiAgICBpZiAodGhpcy5lbWl0dGVkQWRkcmVzcyAhPT0gbnVsbCApIHtcbiAgICAgIGlmKG5leHRBZGRyZXNzICE9PSB1bmRlZmluZWQgJiYgbmV4dEFkZHJlc3MgIT09IG51bGwgJiYgbmV4dEFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2xhdGl0dWRlJykgJiYgbmV4dEFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2xvbmdpdHVkZScpKVxuICAgICAge1xuICAgICAgICBjb25zdCBsYXRpdHVkZSA9IG5leHRBZGRyZXNzLmxhdGl0dWRlO1xuICAgICAgICBjb25zdCBsb25naXR1ZGUgPSBuZXh0QWRkcmVzcy5sb25naXR1ZGU7XG4gICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIGNvbnNvbGUubG9nKCdjYWxsaW5nIG5pczkgc2VydmljZSB0byBnZXQgbmlzOSBkYXRhICgyKScsIGxvbmdpdHVkZSwgbGF0aXR1ZGUpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSBjb25zb2xlLmxvZygnTk9UIGNhbGxpbmcgbmlzOSBzZXJ2aWNlIHRvIGdldCBuaXM5IGRhdGEgKDIpJyk7XG4gICAgICB9XG4gICAgICB0aGlzLmFkZHJlc3NDb21wbGV0ZUV2ZW50RW1pdHRlci5lbWl0KG5leHRBZGRyZXNzKTtcbiAgICAgIHRoaXMuZW1pdHRlZEFkZHJlc3MgPSBuZXh0QWRkcmVzcztcbiAgICB9XG5cblxuICAgIC8vIGdrYVxuICAgIC8qXG4gICAgaWYgKGV2ZW50ID09PSBJbnB1dE5hbWVUeXBlLkxPQ0FMSVRZKVxuICAgIHtcbiAgICAgIHRoaXMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuTE9DQUxJVFk7XG4gICAgICB0aGlzLmJveE51bWJlclByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyUHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5zdHJlZXRQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICB0aGlzLmxvY2FsaXR5UHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgLy8gdGhpcy5jbGVhcklucHV0KGZvY3VzOiB7c2V0Rm9jdXM6IGJvb2xlYW4sIHRpbWVzdGFtcDogRGF0ZX0pO1xuICAgICAgdGhpcy5sb2NhbGl0eSA9ICcnO1xuICAgICAgdGhpcy5wb3N0YWxDb2RlID0gJyc7XG4gICAgICB0aGlzLnN0cmVldCA9IG51bGw7XG4gICAgICB0aGlzLnN0cmVldE51bWJlciA9IG51bGw7XG4gICAgICB0aGlzLmJveE51bWJlciA9IG51bGw7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5vbkNsZWFyU3RyZWV0TnVtYmVySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQubG9jYWxpdHkgPSAnJztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgIH1cbiAgICBpZiAoZXZlbnQgPT09IElucHV0TmFtZVR5cGUuU1RSRUVUKVxuICAgIHtcbiAgICAgIHRoaXMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuU1RSRUVUO1xuICAgICAgdGhpcy5ib3hOdW1iZXJQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICB0aGlzLnN0cmVldE51bWJlclByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgIHRoaXMuc3RyZWV0UHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgLy8gdGhpcy5jbGVhcklucHV0KGZvY3VzOiB7c2V0Rm9jdXM6IGJvb2xlYW4sIHRpbWVzdGFtcDogRGF0ZX0pO1xuICAgICAgdGhpcy5zdHJlZXQgPSBudWxsO1xuICAgICAgdGhpcy5zdHJlZXROdW1iZXIgPSBudWxsO1xuICAgICAgdGhpcy5ib3hOdW1iZXIgPSBudWxsO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIub25DbGVhclN0cmVldE51bWJlcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIC8vIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgIH1cbiAgICBpZiAoZXZlbnQgPT09IElucHV0TmFtZVR5cGUuU1RSRUVUX05VTUJFUilcbiAgICB7XG4gICAgICB0aGlzLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVI7XG4gICAgICB0aGlzLmJveE51bWJlclByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyUHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgLy8gdGhpcy5jbGVhcklucHV0KGZvY3VzOiB7c2V0Rm9jdXM6IGJvb2xlYW4sIHRpbWVzdGFtcDogRGF0ZX0pO1xuICAgICAgdGhpcy5zdHJlZXROdW1iZXIgPSBudWxsO1xuICAgICAgdGhpcy5ib3hOdW1iZXIgPSBudWxsO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIub25DbGVhclN0cmVldE51bWJlcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICAvLyB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICAvLyB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICB9XG4gICAgaWYgKGV2ZW50ID09PSBJbnB1dE5hbWVUeXBlLkJPWF9OVU1CRVIpXG4gICAge1xuICAgICAgdGhpcy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSO1xuICAgICAgdGhpcy5ib3hOdW1iZXJQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICB0aGlzLmJveE51bWJlciA9IG51bGw7XG4gICAgICAvLyB0aGlzLmNsZWFySW5wdXQoZm9jdXM6IHtzZXRGb2N1czogYm9vbGVhbiwgdGltZXN0YW1wOiBEYXRlfSk7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIC8vIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIub25DbGVhclN0cmVldE51bWJlcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICAvLyB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICAvLyB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICB9XG4gICAgKi9cbiAgfVxuXG4gIHJlc2V0TG9jYWxpdHkoZXZlbnQpIHsgXG4gICAgdGhpcy5wb3N0YWxDb2RlID0gJyc7XG4gICAgdGhpcy5sb2NhbGl0eSA9ICcnO1xuICAgIGNvbnN0IHN0cmVldCA9IHRoaXMuc2VsZWN0ZWRBZGRyZXNzPy5oYXNPd25Qcm9wZXJ0eSgnc3RyZWV0TmFtZScpO1xuICAgIGNvbnN0IGhvdXNlID0gdGhpcy5zZWxlY3RlZEFkZHJlc3M/Lmhhc093blByb3BlcnR5KCdob3VzZU51bWJlcicpO1xuICAgIGNvbnN0IGJveCA9IHRoaXMuc2VsZWN0ZWRBZGRyZXNzPy5oYXNPd25Qcm9wZXJ0eSgnYm94TnVtYmVyJyk7XG4gICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICBpZihldmVudClcbiAgICB7IFxuICAgIGlmKHN0cmVldCA9PSB0cnVlIHx8IHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LnNlYXJjaFRleHQubGVuZ3RoPjApXG4gICAgICB7XG4gICAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KElucHV0TmFtZVR5cGUuU1RSRUVUKTsgICAgICAgICBcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgfVxuICAgIGlmKGhvdXNlID09IHRydWUgfHwgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0Lmxlbmd0aD4wKVxuICAgICAge1xuICAgICAgICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdChJbnB1dE5hbWVUeXBlLlNUUkVFVF9OVU1CRVIpO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7ICAgICAgXG4gICAgICB9XG4gICAgaWYoYm94ID09IHRydWUgfHwgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0Lmxlbmd0aD4wKVxuICAgICAge1xuICAgICAgICB0aGlzLm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcihJbnB1dE5hbWVUeXBlLkJPWF9OVU1CRVIpO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYoIWV2ZW50KVxuICAgIHsgXG4gICAgIGlmKHN0cmVldCA9PSB0cnVlIHx8IHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LnNlYXJjaFRleHQubGVuZ3RoPjApXG4gICAgICB7XG4gICAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KElucHV0TmFtZVR5cGUuU1RSRUVUKTsgICAgICAgICBcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgfVxuICAgIGlmKGhvdXNlID09IHRydWUgfHwgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0Lmxlbmd0aD4wKVxuICAgICAge1xuICAgICAgICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdChJbnB1dE5hbWVUeXBlLlNUUkVFVF9OVU1CRVIpO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7ICAgICAgICAgXG4gICAgICB9XG4gICAgaWYoYm94ID09IHRydWUgfHwgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0Lmxlbmd0aD4wKVxuICAgICAge1xuICAgICAgICB0aGlzLm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcihJbnB1dE5hbWVUeXBlLkJPWF9OVU1CRVIpO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZXRBZGRyZXNzKG51bGwsIDQpO1xuICB9XG5cbiAgcmVzZXRTdHJlZXQoZXZlbnQpIHtcbiAgICB0aGlzLnN0cmVldCA9ICcnO1xuICAgIGNvbnN0IGhvdXNlID0gdGhpcy5zZWxlY3RlZEFkZHJlc3M/Lmhhc093blByb3BlcnR5KCdob3VzZU51bWJlcicpO1xuICAgIGNvbnN0IGJveCA9IHRoaXMuc2VsZWN0ZWRBZGRyZXNzPy5oYXNPd25Qcm9wZXJ0eSgnYm94TnVtYmVyJyk7XG4gICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICBpZihldmVudClcbiAgICAgIHtcbiAgICAgICAgaWYoaG91c2UgPT0gdHJ1ZSB8fCB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQubGVuZ3RoPjApXG4gICAgICAgIHtcbiAgICAgICAgdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoSW5wdXROYW1lVHlwZS5TVFJFRVRfTlVNQkVSKTtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnOyAgICAgICAgIFxuICAgICAgICB9XG4gICAgICAgIGlmKGJveCA9PSB0cnVlIHx8IHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dC5sZW5ndGg+MClcbiAgICAgICAge1xuICAgICAgICB0aGlzLm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcihJbnB1dE5hbWVUeXBlLkJPWF9OVU1CRVIpO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJzsgXG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7ICAgICAgICAgICAgICAgIFxuICAgICAgICB9XG4gICAgICB9XG4gICAgaWYoIWV2ZW50KVxuICAgICAge1xuICAgICAgICAgaWYoaG91c2UgPT0gdHJ1ZSB8fCB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQubGVuZ3RoPjApXG4gICAgICAgIHtcbiAgICAgICAgdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoSW5wdXROYW1lVHlwZS5TVFJFRVRfTlVNQkVSKTtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnOyAgICAgICAgIFxuICAgICAgICB9XG4gICAgICAgIGlmKGJveCA9PSB0cnVlIHx8IHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dC5sZW5ndGg+MClcbiAgICAgICAge1xuICAgICAgICB0aGlzLm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcihJbnB1dE5hbWVUeXBlLkJPWF9OVU1CRVIpO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJzsgICAgICAgIFxuICAgICAgICB9XG4gICAgICB9XG4gICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5hZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgIHRoaXMuc2V0QWRkcmVzcyhudWxsLCAzKTtcbiAgfVxuXG4gIHJlc2V0U3RyZWV0TnVtYmVyKGV2ZW50LCByZXNldEFkZHJlc3M6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAvLyAgY29uc29sZS5sb2coJ3Jlc2V0IHN0cmVldCBudW1uZXIhJywgZXZlbnQpO1xuICBjb25zdCBib3ggPSB0aGlzLnNlbGVjdGVkQWRkcmVzcz8uaGFzT3duUHJvcGVydHkoJ2JveE51bWJlcicpO1xuICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICBpZihldmVudCAmJiAoYm94ID09IHRydWUgfHwgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0Lmxlbmd0aD4wKSlcbiAgICAgIHtcbiAgICAgICAgdGhpcy5vbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoSW5wdXROYW1lVHlwZS5CT1hfTlVNQkVSKTtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7ICAgICAgICAgXG4gICAgICB9XG4gICAgaWYoIWV2ZW50ICYmIChib3ggPT0gdHJ1ZSB8fCB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQubGVuZ3RoPjApKVxuICAgICAge1xuICAgICAgICB0aGlzLm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcihJbnB1dE5hbWVUeXBlLkJPWF9OVU1CRVIpO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQ9Jyc7ICAgICAgICAgXG4gICAgICB9XG4gICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5hZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgdGhpcy5zZXRBZGRyZXNzKG51bGwsIDIpO1xuICAgIC8vICQkIDcgdGhpcy5zZXRBZGRyZXNzKG51bGwsIDIpOyAvLyAkJCA/Pz8/P1xuICAgIC8qXG4gICAgaWYgKHJlc2V0QWRkcmVzcyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5zZXRBZGRyZXNzKC8gKm51bGwqIC8gdGhpcy5zZWxlY3RlZEFkZHJlc3MpO1xuICAgIH0qL1xuICB9XG5cbiAgcmVzZXRCb3hOdW1iZXIoZXZlbnQsIHJlc2V0QWRkcmVzczogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZygncmVzZXQgc3RyZWV0IG51bW5lciEnLCBldmVudCwgcmVzZXRBZGRyZXNzKTtcbiAgICB0aGlzLmJveE51bWJlciA9ICcnO1xuICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgLy8gdGhpcy5vbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoSW5wdXROYW1lVHlwZS5CT1hfTlVNQkVSKTtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmFkZHJlc3NJc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5ib3hOdW1iZXIgPSAnJ1xuICAgIHRoaXMuc2V0QWRkcmVzcyhudWxsLCAxKTtcbiAgICAvLyBpZighZXZlbnQpe1xuICAgIC8vICAgdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoJ0NMRUFSX0JPWF9OVU1CRVInKVxuICAgIC8vIH1cbiAgIFxuICAgIC8vICQkIDcgdGhpcy5zZXRBZGRyZXNzKG51bGwsIDEpOyAvLyAkJCA/Pz8/P1xuICAgIC8qXG4gICAgaWYgKHJlc2V0QWRkcmVzcyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5zZXRBZGRyZXNzKC8gKm51bGwqIC8gdGhpcy5zZWxlY3RlZEFkZHJlc3MpO1xuICAgIH0qL1xuICB9XG5cbiAgZW50ZXJQcmVmaWxsTW9kZSgpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7Y29uc29sZS5sb2coJ2xpYjo6ZW50ZXJQcmVmaWxsTW9kZSgpJyk7IH1cbiAgICBpZiAodGhpcy5hdXRvY29tcGxldGVCb3hOYiAmJiB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iICYmIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0ICYmIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkgKVxuICAgIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIucHJlZmlsbGluZyA9IHRydWU7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnByZWZpbGxpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQucHJlZmlsbGluZyA9IHRydWU7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5LnByZWZpbGxpbmcgPSB0cnVlO1xuXG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5sb2NhbGl0eSA9ICcnO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zdHJlZXROYW1lID0gJyc7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgdGhpcy5hdXRvZmlsbERhdGE9bnVsbDtcbiAgICAgIHRoaXMuc3RyZWV0TmFtZUF1dG9maWxsRGF0YT1udWxsO1xuICAgICAgdGhpcy5zdHJlZXROdW1iZXJBdXRvZmlsbERhdGE9bnVsbDtcbiAgICAgIHRoaXMuYm94TnVtYmVyQXV0b2ZpbGxEYXRhPW51bGw7XG4gICAgfVxuXG4gIH1cblxuICBxdWl0UHJlZmlsbE1vZGUoKSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge2NvbnNvbGUubG9nKCdsaWI6OnF1aXRQcmVmaWxsTW9kZSgpJyk7IH1cbiAgICBpZiAodGhpcy5hdXRvY29tcGxldGVCb3hOYiAmJiB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iICYmIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0ICYmIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkgKVxuICAgIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIucHJlZmlsbGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5wcmVmaWxsaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5wcmVmaWxsaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5LnByZWZpbGxpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NpbmdQcmVmaWxsRGF0YSA9IGZhbHNlO1xuICB9XG5cbiAgc2V0QWRkcmVzcyhhZGRyZXNzOiBhbnksIGxldmVsPzogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge2NvbnNvbGUubG9nKCdsaWI6OnNldEFkZHJlc3MgLSBhZGRyZXNzIHBhcnQsIGxldmVsJywgYWRkcmVzcywgbGV2ZWwpOyB9XG5cbiAgICAvKiAkJCAkJFxuICAgIGlmICh0aGlzLnNlbGVjdGVkQWRkcmVzcyAmJiAhYWRkcmVzcykge1xuICAgICAgLy8gY29uc29sZS5sb2coJ3Jlc2V0IGFkZHJlc3MhJyk7XG4gICAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcyA9IG51bGw7XG4gICAgICB0aGlzLnN0cmVldEFkZHJlc3MgPSBudWxsO1xuICAgICAgdGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzID0gbnVsbDtcbiAgICAgIHRoaXMubm90aWZ5QWRkcmVzc0NvbXBsZXRlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgICovXG4gICAgaWYgKGFkZHJlc3MgPT09IG51bGwgfHwgYWRkcmVzcyA9PT0gdW5kZWZpbmVkIClcbiAgICB7XG4gICAgICBjb25zdCBkb05vdGlmeSA9ICh0aGlzLnNlbGVjdGVkQWRkcmVzcyAhPT0gbnVsbCAmJiB0aGlzLnNlbGVjdGVkQWRkcmVzcyAhPT0gdW5kZWZpbmVkKSA/IHRydWUgOiBmYWxzZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzID0gbnVsbDtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuYWRkcmVzc0lzQ29tcGxldGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuYWRkcmVzc0lzQ29tcGxldGUgPSBmYWxzZTtcbiAgICAgIGlmIChkb05vdGlmeSkge1xuICAgICAgICB0aGlzLm5vdGlmeUFkZHJlc3NDb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhZGRyZXNzKSB7XG4gICAgICBkZWxldGUgYWRkcmVzcy5tZXNzYWdlcztcbiAgICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgIHRoaXMudXBkYXRlQ29tcGxldGVBZGRyZXNzKCk7XG4gICAgICB0aGlzLnBvc3RhbENvZGUgPSBhZGRyZXNzLnBvc3RhbENvZGUgPyBhZGRyZXNzLnBvc3RhbENvZGUgOiAnJztcbiAgICAgIHRoaXMubG9jYWxpdHkgPSBhZGRyZXNzLmxvY2FsaXR5TmFtZSA/IGFkZHJlc3MubG9jYWxpdHlOYW1lIDogJyc7XG4gICAgICB0aGlzLnN0cmVldCA9IGFkZHJlc3Muc3RyZWV0TmFtZSA/IGFkZHJlc3Muc3RyZWV0TmFtZSA6ICcnO1xuICAgICAgLy8gY29uc3Qgbm90SW5MaXN0ID0gYWRkcmVzc1snbm90LWluLWxpc3QnXTtcbiAgICAgIC8vIGNvbnN0IGlzTm90SW5MaXN0ID0gbm90SW5MaXN0ICE9PSBudWxsICYmIG5vdEluTGlzdCAhPT0gdW5kZWZpbmVkICYmIG5vdEluTGlzdCA9PT0gdHJ1ZTtcbiAgICAgIC8qXG4gICAgICBpZiAoYWRkcmVzcy5ob3VzZU51bWJlcikge1xuICAgICAgICBpZiAoIWFkZHJlc3MuaXNDb21wbGV0ZSB8fCBpc05vdEluTGlzdCkge1xuICAgICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gYWRkcmVzcy5ob3VzZU51bWJlciA/IGFkZHJlc3MuaG91c2VOdW1iZXIgOiAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIWFkZHJlc3MuYm94TnVtYmVyKSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnY2FsbGluZyByZXNldCBzdHJlZXQgbnVtYmVyICEnKTtcbiAgICAgICAgICAgIGlmICggIXRoaXMucHJvY2Vzc2luZ1ByZWZpbGxEYXRhICkge1xuICAgICAgICAgICAgICB0aGlzLnJlc2V0U3RyZWV0TnVtYmVyKG51bGwsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRoaXMuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAqL1xuXG4gICAgICBjb25zdCBhZGRyZXNzSXNDb21wbGV0ZSA9IGFkZHJlc3MgIT09IG51bGwgJiYgYWRkcmVzcyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICYmIGFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSAmJiBhZGRyZXNzLmlzQ29tcGxldGUgPT09IHRydWUgPyB0cnVlIDogZmFsc2U7XG4gICAgICBjb25zdCBhZGRyZXNzSXNOb3RJbkxpc3QgPSBhZGRyZXNzICE9PSBudWxsICYmIGFkZHJlc3MgIT09IHVuZGVmaW5lZFxuICAgICAgICAmJiBhZGRyZXNzLmhhc093blByb3BlcnR5KCdub3QtaW4tbGlzdCcpICYmIGFkZHJlc3NbJ25vdC1pbi1saXN0J10gPT09IHRydWUgPyB0cnVlIDogZmFsc2U7XG5cbiAgICAgIHN3aXRjaCAobGV2ZWwpIHtcblxuICAgICAgICAvLyBMb2NhbGl0eSAvIE11bmljaXBhbGl0eSBhbmQgUE9zdGFsQ29kZVxuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoYWRkcmVzcyk7XG4gICAgICAgICAgLypcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5jbGVhcldpZGdldCgpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFyV2lkZ2V0KCk7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgKi9cbiAgICAgICAgICB0aGlzLnN0cmVldEFkZHJlc3MgPSBudWxsO1xuICAgICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyA9IG51bGw7XG4gICAgICAgICAgLy9cbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zdHJlZXROYW1lID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBTdHJlZXQgTmFtZVxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoYWRkcmVzcyk7XG4gICAgICAgICAgdGhpcy51cGRhdGVTdHJlZXROYW1lKGFkZHJlc3MpO1xuICAgICAgICAgIHRoaXMuc3RyZWV0QWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzID0gbnVsbDtcbiAgICAgICAgICAvKlxuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFyV2lkZ2V0KCk7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgKi9cbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIFNUUkVFVCBOdW1iZXJcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KGFkZHJlc3MpO1xuICAgICAgICAgIHRoaXMudXBkYXRlU3RyZWV0TmFtZShhZGRyZXNzKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0cmVldE51bWJlcihhZGRyZXNzKTsgLy8gJCRcbiAgICAgICAgICB0aGlzLnN0cmVldEFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICAgICAgaWYgKGFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSAmJiBhZGRyZXNzLmlzQ29tcGxldGUgPT09IHRydWUgJiYgIWFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2JveE51bWJlcicpKVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuYWRkcmVzc0lzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGFkZHJlc3NJc05vdEluTGlzdClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSBhZGRyZXNzLmhvdXNlTnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSBhZGRyZXNzLmhvdXNlTnVtYmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvKlxuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICAqL1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEJPWCBOdW1iZXJcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChhZGRyZXNzSXNOb3RJbkxpc3QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuYWRkcmVzc0lzQ29tcGxldGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKCB0aGlzLnNlbGVjdGVkQWRkcmVzcyAmJiB0aGlzLnNlbGVjdGVkQWRkcmVzcy5pc0NvbXBsZXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MuaXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvKlxuICAgICAgaWYgKGFkZHJlc3MuaXNDb21wbGV0ZSA9PT0gdHJ1ZSApIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQWRkcmVzcy5pc0NvbXBsZXRlTm90aWZpY2F0aW9uRG9uZSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmlzQ29tcGxldGVOb3RpZmljYXRpb25Eb25lID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLm5vdGlmeUFkZHJlc3NDb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm5vdGlmeUFkZHJlc3NDb21wbGV0ZSgpO1xuICAgICAgfVxuICAgICAgKi9cblxuICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MuaXNDb21wbGV0ZU5vdGlmaWNhdGlvbkRvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5ub3RpZnlBZGRyZXNzQ29tcGxldGUoKTtcbiAgICB9XG4gICAgaWYgKGFkZHJlc3MgJiYgbGV2ZWwpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGxldmVsKSB7XG4gICAgICAgICAgY2FzZSA0OiAvLyBMb2NhbGl0eSBmaWxsZWQgLT4gZm9jdXMgc3RyZWV0XG4gICAgICAgICAgICBpZiAoYWRkcmVzcy5zdHJlZXROYW1lICYmIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0ICYmIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LnN0cmVldFNlYXJjaElucHV0KSB7XG4gICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LnN0cmVldFNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzogLy8gU3RyZWV0IGZpbGxlZCAtPiBmb2N1cyBzdHJlZXQgbnVtYmVyXG4gICAgICAgICAgICBpZiAoYWRkcmVzcy5ob3VzZU51bWJlciAmJiB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iICYmIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TnVtYmVyU2VhcmNoSW5wdXQpIHtcbiAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zdHJlZXROdW1iZXJTZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6IC8vIFN0cmVldCBudW1iZXIgZmlsbGVkIC0+IGZvY3VzIGJveCBudW1iZXJcbiAgICAgICAgICAgIGlmICgoYWRkcmVzcy5ib3hOdW1iZXJ8fHRoaXMuc3RyZWV0TnVtYmVyQXV0b2ZpbGxEYXRhKSAmJiB0aGlzLmF1dG9jb21wbGV0ZUJveE5iICYmIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuYm94TnVtYmVyU2VhcmNoSW5wdXQpIHtcbiAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5ib3hOdW1iZXJTZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgc2V0QWRkcmVzc1N0cmVldE51bWJlcihzdHJlZXROdW1iZXI6IHN0cmluZykge1xuXG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSlcbiAgICB7XG4gICAgICBjb25zb2xlLmxvZygnbGliOjpzZXRBZGRyZXNzU3RyZWV0TnVtYmVyIC0gc3RyZWV0bnVtYmVyOiAnLCBzdHJlZXROdW1iZXIpO1xuICAgICAgY29uc29sZS5sb2coJ2xpYjo6c2V0QWRkcmVzc1N0cmVldE51bWJlciAtIHN0cmVldEFkZHJlc3M6ICcsIHRoaXMuc3RyZWV0QWRkcmVzcyk7XG4gICAgfVxuICAgIHRoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyA9IHRoaXMuc3RyZWV0QWRkcmVzcztcbiAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcyA9IHRoaXMuc3RyZWV0QWRkcmVzcztcbiAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcy5ob3VzZU51bWJlciA9IHN0cmVldE51bWJlcjtcbiAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcy5zdHJlZXROdW1iZXIgPSBzdHJlZXROdW1iZXI7XG4gICAgLypcbiAgICB0aGlzLnN0cmVldE51bWJlciA9IHN0cmVldE51bWJlcjtcbiAgICAqL1xuICAgIC8vdGhpcy5ub3RpZnlBZGRyZXNzQ29tcGxldGUoKTtcbiAgICB0aGlzLnN0cmVldE51bWJlciA9IHN0cmVldE51bWJlcjtcbiAgICB0aGlzLmJveE51bWJlcj0nJztcbiAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcy5ib3hOdW1iZXI9Jyc7XG4gICAgdGhpcy5hZGRyZXNzQ29tcGxldGVFdmVudEVtaXR0ZXIuZW1pdCh0aGlzLnNlbGVjdGVkQWRkcmVzcyk7XG4gICAgdGhpcy5lbWl0dGVkQWRkcmVzcyA9IHRoaXMuc2VsZWN0ZWRBZGRyZXNzO1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpXG4gICAge1xuICAgICAgY29uc29sZS5sb2coJ3NldCBzdHJlZXQgbnVtYmVyIHZhbHVlOicsIHN0cmVldE51bWJlcixcbiAgICAgICAgJ3RoaXMuc3RyZWV0TnVtYmVyOicrdGhpcy5zdHJlZXROdW1iZXIsXG4gICAgICAgICd0aGlzLm1pbkxldmVsOicrdGhpcy5taW5MZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgc2V0QWRkcmVzc0JveE51bWJlcihib3hOdW1iZXI6IHN0cmluZykge1xuICAgIGNvbnNvbGUubG9nKCdzZXQgYm94IG51bWJlciB2YWx1ZTonLCBib3hOdW1iZXIpO1xuICAgIC8vdGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzID0gdGhpcy5zdHJlZXRBZGRyZXNzO1xuICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzID0gdGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzO1xuICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmJveE51bWJlciA9IGJveE51bWJlcjtcbiAgICB0aGlzLmJveE51bWJlciA9IGJveE51bWJlcjtcbiAgICB0aGlzLm5vdGlmeUFkZHJlc3NDb21wbGV0ZSgpO1xuICB9XG5cbiAgc2V0TGFuZ3VhZ2UobGFuZzogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWxlY3RlZExhbmd1YWdlID0gbGFuZztcbiAgfVxuXG4gIHNldFZhbGlkYXRpb25NZXNzYWdlKC8qbWVzc2FnZTogc3RyaW5nKi9tZXNzYWdlOiB7bWVzc2FnZVR5cGU6IFZhbGlkYXRpb25NZXNzYWdlVHlwZSwgdHJhbnNsYXRlZE1lc3NhZ2U6IHN0cmluZ30pIHtcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gbWVzc2FnZTtcbiAgICBpZiAodGhpcy52YWxpZGF0aW9uTWVzc2FnZU9wdGlvblR5cGUgPT09IFZhbGlkYXRpb25NZXNzYWdlT3B0aW9uVHlwZS5FTUlUKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlRXZlbnRFbWl0dGVyLmVtaXQobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgc2V0TnVtYmVyT2ZFeGNlcHRpb25zKGV2ZW50KXtcbiAgICB0aGlzLm51bWJlck9mRXhjZXB0aW9ucz1ldmVudDtcbiAgICBpZih0aGlzLm51bWJlck9mRXhjZXB0aW9ucz49Myl7XG4gICAgICB0aGlzLm51bWJlck9mRXhjZXB0aW9uc0V2ZW50RW1pdHRlci5lbWl0KHRoaXMubnVtYmVyT2ZFeGNlcHRpb25zKTtcbiAgICAgIHRoaXMuc2V0VmFsaWRhdGVkQnlCYWNrZW5kKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIHNldFZhbGlkYXRlZEJ5QmFja2VuZChldmVudCl7XG4gICAgdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmQ9ZXZlbnQ7XG4gICAgdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmRFdmVudEVtaXR0ZXIuZW1pdCh0aGlzLnZhbGlkYXRlZEJ5QmFja2VuZCk7XG4gIH1cblxuICB1cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoYWRkcmVzcykge1xuICAgIGlmIChhZGRyZXNzICYmIGFkZHJlc3MucG9zdGFsQ29kZSAmJiBhZGRyZXNzLmxvY2FsaXR5TmFtZSkge1xuICAgICAgdGhpcy5wb3N0YWxDb2RlTG9jYWxpdHkgPSAgYWRkcmVzcy5wb3N0YWxDb2RlICArICcgJyArIGFkZHJlc3MubG9jYWxpdHlOYW1lO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5zZWFyY2hUZXh0ID0gdGhpcy5wb3N0YWxDb2RlTG9jYWxpdHk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlU3RyZWV0TmFtZShhZGRyZXNzKSB7XG4gICAgaWYgKGFkZHJlc3MgJiYgYWRkcmVzcy5zdHJlZXROYW1lKSB7XG4gICAgICB0aGlzLnN0cmVldE5hbWVJbnB1dCA9IGFkZHJlc3Muc3RyZWV0TmFtZTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVTdHJlZXROdW1iZXIoYWRkcmVzcykge1xuICAgIGlmIChhZGRyZXNzICYmIGFkZHJlc3MuaG91c2VOdW1iZXIpIHtcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVySW5wdXQgPSBhZGRyZXNzLmhvdXNlTnVtYmVyO1xuICAgIH1cbiAgfVxudXBkYXRlYm94TnVtYmVyKGFkZHJlc3MpIHtcbiAgICBpZiAoYWRkcmVzcyAmJiBhZGRyZXNzLmJveE51bWJlcikge1xuICAgICAgdGhpcy5ib3hOdW1iZXIgPSBhZGRyZXNzLmJveE51bWJlcjtcbiAgICB9XG4gIH1cbiAgdXBkYXRlQ29tcGxldGVBZGRyZXNzKCkge1xuICAgIGxldCBjb25jYXRTdHIgPSAnJztcbiAgICBjb25jYXRTdHIgKz0gdGhpcy5zZWxlY3RlZEFkZHJlc3Muc3RyZWV0TmFtZSA/IGAke3RoaXMuc2VsZWN0ZWRBZGRyZXNzLnN0cmVldE5hbWV9IGAgOiAnJztcbiAgICBjb25jYXRTdHIgKz0gdGhpcy5zZWxlY3RlZEFkZHJlc3MuaG91c2VOdW1iZXIgPyBgJHt0aGlzLnNlbGVjdGVkQWRkcmVzcy5ob3VzZU51bWJlcn0gYCA6ICcnO1xuICAgIGNvbmNhdFN0ciArPSB0aGlzLnNlbGVjdGVkQWRkcmVzcy5ib3hOdW1iZXIgPyBgJHt0aGlzLmdldEJveFByZWZpeCgpfSAke3RoaXMuc2VsZWN0ZWRBZGRyZXNzLmJveE51bWJlcn0gYCA6ICcnO1xuICAgIGNvbmNhdFN0ciArPSB0aGlzLnNlbGVjdGVkQWRkcmVzcy5wb3N0YWxDb2RlID8gYCR7dGhpcy5zZWxlY3RlZEFkZHJlc3MucG9zdGFsQ29kZX0gYCA6ICcnO1xuICAgIGNvbmNhdFN0ciArPSB0aGlzLnNlbGVjdGVkQWRkcmVzcy5tdW5pY2lwYWxpdHlOYW1lID8gYCR7dGhpcy5zZWxlY3RlZEFkZHJlc3MubXVuaWNpcGFsaXR5TmFtZX0gYCA6ICcnO1xuICAgIHRoaXMuY29tcGxldGVBZGRyZXNzID0gY29uY2F0U3RyO1xuICB9XG5cbiAgc2V0VmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25Gcm9tSW5wdXQob3B0aW9uOiB7dmFsaWRhdGlvblR5cGU6IFZhbGlkYXRpb25NZXNzYWdlT3B0aW9uVHlwZSwgdGltZXN0YW1wOiBEYXRlfSkge1xuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25UeXBlID0gb3B0aW9uLnZhbGlkYXRpb25UeXBlO1xuICAgIC8vIGNvbnNvbGUubG9nKCdhZGRyZXNzZSBhdXRvY29tcGxldGUgLSB2YWxpZGF0aW9uIG1lc3NhZ2Ugb3B0aW9uJywgdGhpcy52YWxpZGF0aW9uTWVzc2FnZU9wdGlvblR5cGUpO1xuICB9XG5cbiAgb25Mb2NhbGl0eVByZWZpbGxFdmVudChldmVudDogUHJlZmlsbEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge2NvbnNvbGUubG9nKCdsaWI6OmxvY2FsaXR5IHByZWZpbGwgZXZlbnQgcmVjZWl2ZWQ6JywgZXZlbnQpOyB9XG4gICAgLypcbiAgICBpZiAoZXZlbnQucGVyZmVjdE1hdGNoKVxuICAgIHtcbiAgICAgIHRoaXMuYWRkcmVzc1BhcmFtcy5taW5MZXZlbCA9IC8gKjMqIC8gQUREUkVTU0xFVkVMLlNUUkVFVDtcbiAgICAgIHRoaXMuc3RyZWV0UGFyYW1zID0gdGhpcy5hZGRyZXNzUGFyYW1zO1xuICAgIH1cbiAgICAqL1xuICAgIHRoaXMuc3RyZWV0TmFtZUF1dG9maWxsRGF0YT1udWxsO1xuICAgIHRoaXMuc3RyZWV0TnVtYmVyQXV0b2ZpbGxEYXRhPW51bGw7XG4gICAgdGhpcy5ib3hOdW1iZXJBdXRvZmlsbERhdGE9bnVsbDtcbiAgICBjb25zdCBkYXRhID0gZXZlbnQucHJlZmlsbERhdGE7XG4gICAgaWYgKGV2ZW50LnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlQZXJmZWN0TWF0Y2hGb3VuZCA9PT0gdHJ1ZSApXG4gICAge1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbiA9IGRhdGEucHJlZmlsbE11bmljaXBhbGl0eVBlcmZlY3RNYXRjaFN1Z2dlc3Rpb247XG4gICAgICBjb25zdCBhZGRyZXNzID0gc3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoYWRkcmVzcyk7XG4gICAgICB0aGlzLmFkZHJlc3NQYXJhbXMubWluTGV2ZWwgPSAvKjQqLyBBRERSRVNTTEVWRUwuU1RSRUVUO1xuICAgICAgLy8gdGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhID0gdGhpcy5hZGRyZXNzUGFyYW1zOyAvLyBhcyBhbnkgYXMgUHJlZmlsbERhdGE7XG4gICAgICAvLyB0aGlzLmxvY2FsaXR5UHJlZmlsbERhdGEgPSBuZXcgUHJlZmlsbERhdGEodGhpcy5hZGRyZXNzUGFyYW1zKTtcbiAgICAgIC8vIE9iamVjdC5hc3NpZ24odGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhLCB0aGlzLmFkZHJlc3NQYXJhbXMpO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YSA9IGV2ZW50LnByZWZpbGxEYXRhO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YS50cyA9IG5ldyBEYXRlKCk7XG4gICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuU1RSRUVUO1xuICAgICAgLy8gQmUgc3VyZSB0byBwcm9wYWdhdGUgdGhlIGxvY2FsaXR5TmFtZSBpbiBwbGFjZSBvZiB0aGUgbXVuaWNpcGFsaXR5TmFtZSAhXG4gICAgICBjb25zdCBzdWdnZXN0aW9uQWRkcmVzcyA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eVBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25BZGRyZXNzTG9jYWxpdHlOYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3MubG9jYWxpdHlOYW1lO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5wb3N0YWxDb2RlID0gc3VnZ2VzdGlvbkFkZHJlc3MucG9zdGFsQ29kZTtcbiAgICAgIC8vIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KHN1Z2dlc3Rpb25BZGRyZXNzKTtcblxuICAgICAgY29uc3Qgc3RyZWV0TmFtZSA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROYW1lO1xuICAgICAgaWYgKHN0cmVldE5hbWUgPT09IG51bGwgfHwgc3RyZWV0TmFtZSA9PT0gdW5kZWZpbmVkIHx8IHN0cmVldE5hbWUgPT09ICcnKVxuICAgICAge1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLkxPQ0FMSVRZKTtcbiAgICAgICAgLy8gdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICAgICAgLy8gdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoc3VnZ2VzdGlvbkFkZHJlc3MpO1xuICAgICAgfVxuXG4gICAgICAvKlxuICAgICAgY29uc3Qgc3RyZWV0TmFtZSA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROYW1lO1xuICAgICAgaWYgKHN0cmVldE5hbWUgPT09IG51bGwgfHwgc3RyZWV0TmFtZSA9PT0gdW5kZWZpbmVkIHx8IHN0cmVldE5hbWUgPT09ICcnKVxuICAgICAge1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLkxPQ0FMSVRZKTtcbiAgICAgICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICAgICAgLy8gdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoc3VnZ2VzdGlvbkFkZHJlc3MpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsaWI6OnByZWZpbGw6IHRyaWdnZXIgY2hlY2tpbmcgc3RyZWV0IG1hdGNoLi4uICcsIHRoaXMucHJlZmlsbERhdGEpOyB9XG4gICAgICAgIHRoaXMuc3RyZWV0UHJlZmlsbERhdGEgPSB0aGlzLnByZWZpbGxEYXRhO1xuICAgICAgfVxuICAgICAgKi9cbiAgICAgIGlmIChhZGRyZXNzLnN0cmVldE5hbWUpe1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLkxPQ0FMSVRZKTtcbiAgICAgICAgdGhpcy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5TVFJFRVQ7XG4gICAgICAgIGNvbnN0IHN0cmVldE51bWJlciA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROdW1iZXI7XG4gICAgICAgIGNvbnN0IGJveE51bWJlciA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5ib3hOdW1iZXI7XG4gICAgICAgIFxuICAgICAgICBpZihib3hOdW1iZXIgJiYgIWFkZHJlc3MuYm94TnVtYmVyKXtcbiAgICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubWluTGV2ZWw9QUREUkVTU0xFVkVMLkJPWF9OVU1CRVI7XG4gICAgICAgICAgdGhpcy5ib3hOdW1iZXJQcmVmaWxsRGF0YT10aGlzLnByZWZpbGxEYXRhO1xuICAgICAgICB9XG4gICAgICB9ZWxzZXtcbiAgICAgICAgdGhpcy5zdHJlZXRQcmVmaWxsRGF0YSA9IHRoaXMucHJlZmlsbERhdGE7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAvLyBjb25zdCBjcEFuZExvY2FsaXR5ID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnBvc3RhbENvZGUgKyB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZTtcbiAgICAgIGNvbnN0IGNwQW5kTG9jYWxpdHkgPSBkYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZSArIGRhdGEucGFyYW1ldGVycy5tdW5pY2lwYWxpdHlOYW1lO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQubG9jYWxpdHkgPSAnJztcbiAgICAgIGlmICggY3BBbmRMb2NhbGl0eSA9PT0gbnVsbCB8fCBjcEFuZExvY2FsaXR5ID09PSB1bmRlZmluZWQgfHwgY3BBbmRMb2NhbGl0eS5sZW5ndGggPT09IDAgKVxuICAgICAge1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MobnVsbCwgQUREUkVTU0xFVkVMLkxPQ0FMSVRZKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgfVxuICB9XG5cbiAgb25TdHJlZXRQcmVmaWxsRXZlbnQoZXZlbnQ6IFByZWZpbGxFdmVudCkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtjb25zb2xlLmxvZygnbGliOjpzdHJlZXQ6IHByZWZpbGwgZXZlbnQgcmVjZWl2ZWQnLCBldmVudCk7IH1cbiAgICAvKlxuICAgIGNvbnN0IGRhdGE6IFByZWZpbGxEYXRhID0gZXZlbnQucHJlZmlsbERhdGE7XG4gICAgaWYgKGRhdGEucHJlZmlsbFN0cmVldFBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlIClcbiAgICB7XG4gICAgICBjb25zb2xlLmxvZygnbGliOjpvblN0cmVldFByZWZpbGxFdmVudDogTUFUQ0ggRk9VTkQnLCBkYXRhKTtcbiAgICAgIHRoaXMucG9zdGFsQ29kZUxvY2FsaXR5ID0gJ1RSVUMtTVVDSEUnO1xuICAgICAgdGhpcy5wb3N0YWxDb2RlTG9jYWxpdHkgPSAnVFJVQy1NVUNIRSAyJztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuc2VhcmNoVGV4dCA9IHRoaXMucG9zdGFsQ29kZUxvY2FsaXR5O1xuICAgIH1cbiAgICAqL1xuICAgIGNvbnN0IGRhdGEgPSBldmVudC5wcmVmaWxsRGF0YTtcbiAgICBpZiAoZXZlbnQucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldFBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlIClcbiAgICB7XG4gICAgICAvLyBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsaWI6Om9uU3RyZWV0UHJlZmlsbEV2ZW50OiBNQVRDSCBGT1VORCcsIGRhdGEpOyB9XG4gICAgICBjb25zdCBzdWdnZXN0aW9uID0gZGF0YS5wcmVmaWxsU3RyZWV0UGVyZmVjdE1hdGNoU3VnZ2VzdGlvbjtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBzdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICB0aGlzLnVwZGF0ZVN0cmVldE5hbWUoYWRkcmVzcyk7XG4gICAgICB0aGlzLmFkZHJlc3NQYXJhbXMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuU1RSRUVUX05VTUJFUjtcbiAgICAgIC8vIHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSA9IHRoaXMuYWRkcmVzc1BhcmFtczsgLy8gYXMgYW55IGFzIFByZWZpbGxEYXRhO1xuICAgICAgLy8gdGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhID0gbmV3IFByZWZpbGxEYXRhKHRoaXMuYWRkcmVzc1BhcmFtcyk7XG4gICAgICAvLyBPYmplY3QuYXNzaWduKHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSwgdGhpcy5hZGRyZXNzUGFyYW1zKTsgICAgICBcbiAgICAgIHRoaXMucHJlZmlsbERhdGEgPSBldmVudC5wcmVmaWxsRGF0YTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEudHMgPSBuZXcgRGF0ZSgpO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVI7XG4gICAgICBjb25zdCBzdWdnZXN0aW9uQWRkcmVzcyA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldFBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25BZGRyZXNzTG9jYWxpdHlOYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3MubG9jYWxpdHlOYW1lO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5wb3N0YWxDb2RlID0gc3VnZ2VzdGlvbkFkZHJlc3MucG9zdGFsQ29kZTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3Muc3RyZWV0TmFtZTtcbiAgICAgIC8vIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KHN1Z2dlc3Rpb25BZGRyZXNzKTtcbiAgICAgIC8vIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KHN1Z2dlc3Rpb25BZGRyZXNzKTtcblxuICAgICAgY29uc3Qgc3RyZWV0TnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlcjtcbiAgICAgIGlmIChzdHJlZXROdW1iZXIgPT09IG51bGwgfHwgc3RyZWV0TnVtYmVyID09PSB1bmRlZmluZWQgfHwgc3RyZWV0TnVtYmVyID09PSAnJylcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVQpO1xuICAgICAgICAvLyB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICAvL3RoaXMuc2VsZWN0ZWRBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgICAgdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoYWRkcmVzcyk7XG4gICAgICAgIHRoaXMudXBkYXRlU3RyZWV0TmFtZShhZGRyZXNzKTtcbiAgICAgICAgdGhpcy5zdHJlZXRBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzID0gbnVsbDtcbiAgICAgICAgLypcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5jbGVhcldpZGdldCgpO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcldpZGdldCgpO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgfVxuXG4gICAgICAvKlxuICAgICAgY29uc3Qgc3RyZWV0TnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlcjtcbiAgICAgIGlmIChzdHJlZXROdW1iZXIgPT09IG51bGwgfHwgc3RyZWV0TnVtYmVyID09PSB1bmRlZmluZWQgfHwgc3RyZWV0TnVtYmVyID09PSAnJylcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVQpO1xuICAgICAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7Y29uc29sZS5sb2coJ2xpYjo6cHJlZmlsbDogdHJpZ2dlciBjaGVja2luZyBzdHJlZXQgbnVtYmVyIG1hdGNoLi4uICcsIHRoaXMucHJlZmlsbERhdGEpO31cbiAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJQcmVmaWxsRGF0YSA9IHRoaXMucHJlZmlsbERhdGE7XG4gICAgICB9XG4gICAgICAqL1xuXG4gICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKVxuICAgICAge1xuICAgICAgICBjb25zb2xlLndhcm4oJ2xpYjo6c3RyZWV0OiBwcmVmaWxsIC0gdHJhbnNtaXR0aW5nIHByZWZpbGwgZGF0YSBmb3Igc3RyZWV0TnVtYmVyIDonLCB0aGlzLnByZWZpbGxEYXRhKTtcbiAgICAgIH1cbiAgICAgIGlmIChhZGRyZXNzLmhvdXNlTnVtYmVyKXtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVQpO1xuICAgICAgICB0aGlzLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVI7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJQcmVmaWxsRGF0YSA9IHRoaXMucHJlZmlsbERhdGE7XG4gICAgICB9XG4gICAgICBcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIGNvbnN0IHByZWZpbGxTdHJlZXROYW1lID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE5hbWU7XG4gICAgICBjb25zdCBhZGRyZXNzID0gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsTXVuaWNpcGFsaXR5UGVyZmVjdE1hdGNoU3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zdHJlZXROYW1lID0gJyc7XG5cbiAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignbGliOjpvblN0cmVldFByZWZpbGxFdmVudCAtIE5PIE1BVENIIEFUIFNUUkVFVCBMRVZFTCcsIHByZWZpbGxTdHJlZXROYW1lICk7XG4gICAgICB9XG5cbiAgICAgIGlmICggcHJlZmlsbFN0cmVldE5hbWUgPT09IG51bGwgfHwgcHJlZmlsbFN0cmVldE5hbWUgPT09IHVuZGVmaW5lZCB8fCBwcmVmaWxsU3RyZWV0TmFtZS5sZW5ndGggPT09IDAgKVxuICAgICAge1xuICAgICAgICAvLyBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7Y29uc29sZS5sb2coJ2xpYjo6b25TdHJlZXRQcmVmaWxsRXZlbnQ6IE5PIE1BVENIIEZPVU5EIC0gc2V0IGFkZHJlc3MnLCBkYXRhLCBhZGRyZXNzKTsgfVxuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLkxPQ0FMSVRZKTtcbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgLy8gYWRkcmVzcy5zdHJlZXROYW1lID0gcHJlZmlsbFN0cmVldE5hbWU7XG4gICAgICAgIGFkZHJlc3Muc2VhcmNoQmFyU3RyaW5nID0gcHJlZmlsbFN0cmVldE5hbWU7XG4gICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuU1RSRUVUKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgfVxuICB9XG5cbiAgb25TdHJlZXROdW1iZXJQcmVmaWxsRXZlbnRfbmV3KGV2ZW50OiBQcmVmaWxsRXZlbnQpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsaWI6OnN0cmVldC1udW1iZXIgcHJlZmlsbCBldmVudCByZWNlaXZlZDonLCBldmVudCk7IH1cbiAgICBjb25zdCBkYXRhID0gZXZlbnQucHJlZmlsbERhdGE7XG4gICAgaWYgKGRhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlKVxuICAgIHtcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSBkYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIHRoaXMudXBkYXRlU3RyZWV0TnVtYmVyKGFkZHJlc3MpO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWxlY3RlZEFkZHJlc3MgPSBhZGRyZXNzO1xuXG4gICAgICBjb25zdCBhZGRyZXNzSXNDb21wbGV0ZSA9IGFkZHJlc3MgJiYgYWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnaXNDb21wbGV0ZScpICYmIGFkZHJlc3MuaXNDb21wbGV0ZSA9PT0gdHJ1ZSA/IHRydWUgOiBmYWxzZTtcbiAgICAgIGNvbnN0IGFkZHJlc3NJc05vdEluTGlzdCA9IGFkZHJlc3MgJiYgYWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnbm90LWluLWxpc3QnKSAmJiBhZGRyZXNzWydub3QtaW4tbGlzdCddID09PSB0cnVlID8gdHJ1ZSA6IGZhbHNlO1xuXG4gICAgICBpZiAoYWRkcmVzc0lzQ29tcGxldGUgJiYgISBhZGRyZXNzSXNOb3RJbkxpc3QgKVxuICAgICAge1xuICAgICAgICAvLyBmb3VuZCBhZGRyZXNzIC0gcGVyZmVjdCBtYXRjaGF0IHN0cmVldCBudW1iZXIgbGV2ZWxcbiAgICAgICAgLy8gTm90aGluZyB0byBkbyBhbnltb3JlXG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuYWRkcmVzc0lzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICB0aGlzLmFkZHJlc3NQYXJhbXMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuQk9YX05VTUJFUjtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YSA9IGV2ZW50LnByZWZpbGxEYXRhO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnRzID0gbmV3IERhdGUoKTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLkJPWF9OVU1CRVI7XG4gICAgICAgIC8vIGNvbnN0IHN1Z2dlc3Rpb25BZGRyZXNzTG9jYWxpdHlOYW1lXG4gICAgICAgIC8vICA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24uYWRkcmVzcy5sb2NhbGl0eU5hbWU7XG5cbiAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbkFkZHJlc3MgPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25BZGRyZXNzTG9jYWxpdHlOYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3MubG9jYWxpdHlOYW1lO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZSA9IHN1Z2dlc3Rpb25BZGRyZXNzTG9jYWxpdHlOYW1lO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZSA9IHN1Z2dlc3Rpb25BZGRyZXNzTG9jYWxpdHlOYW1lO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZSA9IHN1Z2dlc3Rpb25BZGRyZXNzLnBvc3RhbENvZGU7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3Muc3RyZWV0TmFtZTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlciA9IHN1Z2dlc3Rpb25BZGRyZXNzLmhvdXNlTnVtYmVyO1xuICAgICAgICAvLyB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShzdWdnZXN0aW9uQWRkcmVzcyk7XG4gICAgICAgIC8vIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KHN1Z2dlc3Rpb25BZGRyZXNzKTtcblxuICAgICAgICBjb25zdCBib3hOdW1iZXIgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuYm94TnVtYmVyO1xuICAgICAgICBpZiAoICEgYWRkcmVzc0lzTm90SW5MaXN0ICYmIChib3hOdW1iZXIgPT09IG51bGwgfHwgYm94TnVtYmVyID09PSB1bmRlZmluZWQgfHwgYm94TnVtYmVyID09PSAnJykgKVxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSKTtcbiAgICAgICAgICAvLyB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KGFkZHJlc3MpO1xuICAgICAgICAgIHRoaXMudXBkYXRlU3RyZWV0TmFtZShhZGRyZXNzKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0cmVldE51bWJlcihhZGRyZXNzKTsgLy8gJCRcbiAgICAgICAgICB0aGlzLnN0cmVldEFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICAgICAgaWYgKGFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSAmJiBhZGRyZXNzLmlzQ29tcGxldGUgPT09IHRydWUgKVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuYWRkcmVzc0lzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGFkZHJlc3NJc05vdEluTGlzdClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSBhZGRyZXNzLmhvdXNlTnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSBhZGRyZXNzLmhvdXNlTnVtYmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvKlxuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICAqL1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgLypcbiAgICAgICAgY29uc3QgYm94TnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmJveE51bWJlcjtcbiAgICAgICAgaWYgKCAhIGFkZHJlc3NJc05vdEluTGlzdCAmJiAoYm94TnVtYmVyID09PSBudWxsIHx8IGJveE51bWJlciA9PT0gdW5kZWZpbmVkIHx8IGJveE51bWJlciA9PT0gJycpIClcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuU1RSRUVUX05VTUJFUik7XG4gICAgICAgICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsaWI6OnByZWZpbGw6IHRyaWdnZXIgY2hlY2tpbmcgYm94IG51bWJlciBtYXRjaC4uLiAnLCB0aGlzLnByZWZpbGxEYXRhKTsgfVxuICAgICAgICAgIHRoaXMuYm94TnVtYmVyUHJlZmlsbERhdGEgPSB0aGlzLnByZWZpbGxEYXRhO1xuICAgICAgICB9XG4gICAgICAgICovXG5cbiAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSlcbiAgICAgICAge1xuICAgICAgICAgIGNvbnNvbGUud2FybignbGliOjpzdHJlZXRudW1iZXI6IHByZWZpbGwgLSB0cmFuc21pdHRpbmcgcHJlZmlsbCBkYXRhIGZvciBib3ggOicsIHRoaXMucHJlZmlsbERhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYm94TnVtYmVyUHJlZmlsbERhdGEgPSB0aGlzLnByZWZpbGxEYXRhO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgY29uc3QgcHJlZmlsbFN0cmVldE51bWJlciA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROdW1iZXI7XG4gICAgICBjb25zdCBhZGRyZXNzID0gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0UGVyZmVjdE1hdGNoU3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcblxuICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdsaWI6Om9uU3RyZWV0TnVtYmVyUHJlZmlsbEV2ZW50IC0gTk8gTUFUQ0ggQVQgU1RSRUVULU5VTUJFUiBMRVZFTCcsIHByZWZpbGxTdHJlZXROdW1iZXIgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCBwcmVmaWxsU3RyZWV0TnVtYmVyID09PSBudWxsIHx8IHByZWZpbGxTdHJlZXROdW1iZXIgPT09IHVuZGVmaW5lZCB8fCBwcmVmaWxsU3RyZWV0TnVtYmVyLmxlbmd0aCA9PT0gMCApXG4gICAgICB7XG4gICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuU1RSRUVUKTtcbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgLy8gYWRkcmVzcy5ob3VzZU51bWJlciA9IHByZWZpbGxTdHJlZXROdW1iZXI7XG4gICAgICAgIGFkZHJlc3Muc2VhcmNoQmFyU3RyaW5nID0gcHJlZmlsbFN0cmVldE51bWJlcjtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgfVxuICB9XG5cbiAgb25TdHJlZXROdW1iZXJQcmVmaWxsRXZlbnQoZXZlbnQ6IFByZWZpbGxFdmVudCkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xpYjo6c3RyZWV0IG51bWJlciBwcmVmaWxsIGV2ZW50IHJlY2VpdmVkOicsIGV2ZW50KTsgfVxuICAgIGNvbnN0IGRhdGEgPSBldmVudC5wcmVmaWxsRGF0YTtcbiAgICBpZiAoZGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoRm91bmQgPT09IHRydWUpXG4gICAge1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbiA9IGRhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb247XG4gICAgICBjb25zdCBhZGRyZXNzID0gc3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgdGhpcy51cGRhdGVTdHJlZXROdW1iZXIoYWRkcmVzcyk7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlbGVjdGVkQWRkcmVzcyA9IGFkZHJlc3M7XG5cbiAgICAgIGNvbnN0IGFkZHJlc3NJc0NvbXBsZXRlID0gYWRkcmVzcyAmJiBhZGRyZXNzLmhhc093blByb3BlcnR5KCdpc0NvbXBsZXRlJykgJiYgIWFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2JveE51bWJlcicpICYmIGFkZHJlc3MuaXNDb21wbGV0ZSA9PT0gdHJ1ZSA/IHRydWUgOiBmYWxzZTtcbiAgICAgIGNvbnN0IGFkZHJlc3NJc05vdEluTGlzdCA9IGFkZHJlc3MgJiYgYWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnbm90LWluLWxpc3QnKSAmJiBhZGRyZXNzWydub3QtaW4tbGlzdCddID09PSB0cnVlID8gdHJ1ZSA6IGZhbHNlO1xuXG4gICAgICBpZiAoYWRkcmVzc0lzQ29tcGxldGUgJiYgISBhZGRyZXNzSXNOb3RJbkxpc3QgKVxuICAgICAge1xuICAgICAgICAvLyBmb3VuZCBhZGRyZXNzIC0gcGVyZmVjdCBtYXRjaGF0IHN0cmVldCBudW1iZXIgbGV2ZWxcbiAgICAgICAgLy8gTm90aGluZyB0byBkbyBhbnltb3JlXG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuYWRkcmVzc0lzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICB0aGlzLmFkZHJlc3NQYXJhbXMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuQk9YX05VTUJFUjtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YSA9IGV2ZW50LnByZWZpbGxEYXRhO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnRzID0gbmV3IERhdGUoKTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLkJPWF9OVU1CRVI7XG4gICAgICAgIC8vIGNvbnN0IHN1Z2dlc3Rpb25BZGRyZXNzTG9jYWxpdHlOYW1lXG4gICAgICAgIC8vICA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24uYWRkcmVzcy5sb2NhbGl0eU5hbWU7XG5cbiAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbkFkZHJlc3MgPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25BZGRyZXNzTG9jYWxpdHlOYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3MubG9jYWxpdHlOYW1lO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZSA9IHN1Z2dlc3Rpb25BZGRyZXNzTG9jYWxpdHlOYW1lO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZSA9IHN1Z2dlc3Rpb25BZGRyZXNzTG9jYWxpdHlOYW1lO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZSA9IHN1Z2dlc3Rpb25BZGRyZXNzLnBvc3RhbENvZGU7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3Muc3RyZWV0TmFtZTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlciA9IHN1Z2dlc3Rpb25BZGRyZXNzLmhvdXNlTnVtYmVyO1xuICAgICAgICAvLyB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShzdWdnZXN0aW9uQWRkcmVzcyk7XG4gICAgICAgIC8vIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KHN1Z2dlc3Rpb25BZGRyZXNzKTtcblxuICAgICAgICBjb25zdCBib3hOdW1iZXIgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuYm94TnVtYmVyO1xuICAgICAgICBpZiAoICEgYWRkcmVzc0lzTm90SW5MaXN0ICYmIChib3hOdW1iZXIgPT09IG51bGwgfHwgYm94TnVtYmVyID09PSB1bmRlZmluZWQgfHwgYm94TnVtYmVyID09PSAnJykgKVxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSKTtcbiAgICAgICAgICAvLyB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgICAgICB9ZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoYWRkcmVzcyk7XG4gICAgICAgICAgdGhpcy51cGRhdGVTdHJlZXROYW1lKGFkZHJlc3MpO1xuICAgICAgICAgIHRoaXMudXBkYXRlU3RyZWV0TnVtYmVyKGFkZHJlc3MpOyBcbiAgICAgICAgICB0aGlzLnN0cmVldEFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICAgICAgaWYgKGFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSAmJiBhZGRyZXNzLmlzQ29tcGxldGUgPT09IHRydWUgKVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuYWRkcmVzc0lzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGFkZHJlc3NJc05vdEluTGlzdClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSBhZGRyZXNzLmhvdXNlTnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSBhZGRyZXNzLmhvdXNlTnVtYmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8qXG4gICAgICAgIGNvbnN0IGJveE51bWJlciA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5ib3hOdW1iZXI7XG4gICAgICAgIGlmICggISBhZGRyZXNzSXNOb3RJbkxpc3QgJiYgKGJveE51bWJlciA9PT0gbnVsbCB8fCBib3hOdW1iZXIgPT09IHVuZGVmaW5lZCB8fCBib3hOdW1iZXIgPT09ICcnKSApXG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVIpO1xuICAgICAgICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnbGliOjpwcmVmaWxsOiB0cmlnZ2VyIGNoZWNraW5nIGJveCBudW1iZXIgbWF0Y2guLi4gJywgdGhpcy5wcmVmaWxsRGF0YSk7IH1cbiAgICAgICAgICB0aGlzLmJveE51bWJlclByZWZpbGxEYXRhID0gdGhpcy5wcmVmaWxsRGF0YTtcbiAgICAgICAgfVxuICAgICAgICAqL1xuXG4gICAgICAgIHRoaXMuYm94TnVtYmVyUHJlZmlsbERhdGEgPSB0aGlzLnByZWZpbGxEYXRhO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgY29uc3QgcHJlZmlsbFN0cmVldE51bWJlciA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROdW1iZXI7XG4gICAgICBjb25zdCBhZGRyZXNzID0gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0UGVyZmVjdE1hdGNoU3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgIGlmICggcHJlZmlsbFN0cmVldE51bWJlciA9PT0gbnVsbCB8fCBwcmVmaWxsU3RyZWV0TnVtYmVyID09PSB1bmRlZmluZWQgfHwgcHJlZmlsbFN0cmVldE51bWJlci5sZW5ndGggPT09IDAgKVxuICAgICAge1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLlNUUkVFVCk7XG4gICAgICB9XG4gICAgICBlbHNlXG4gICAgICB7XG4gICAgICAgIC8vIGFkZHJlc3MuaG91c2VOdW1iZXIgPSBwcmVmaWxsU3RyZWV0TnVtYmVyO1xuICAgICAgICBhZGRyZXNzLnNlYXJjaEJhclN0cmluZyA9IHByZWZpbGxTdHJlZXROdW1iZXI7XG4gICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuU1RSRUVUX05VTUJFUik7XG4gICAgICB9XG4gICAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgIH1cbiAgfVxuXG4gIG9uQm94TnVtYmVyUHJlZmlsbEV2ZW50X25ldyhldmVudDogUHJlZmlsbEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnbGliOjpwcmVmaWxsOiBib3ggbnVtYmVyIGV2ZW50IHJlY2VpdmVkOicsIGV2ZW50KTsgfVxuICAgIGNvbnN0IGRhdGEgPSBldmVudC5wcmVmaWxsRGF0YTtcbiAgICBpZiAoZGF0YS5wcmVmaWxsQm94TnVtYmVyUGVyZmVjdE1hdGNoRm91bmQgPT09IHRydWUpXG4gICAge1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbiA9IGRhdGEucHJlZmlsbEJveE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb247XG4gICAgICBjb25zdCBhZGRyZXNzID0gc3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWxlY3RlZEFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIGNvbnN0IHByZWZpbGxCb3hOdW1iZXIgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuYm94TnVtYmVyO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIGlmICggcHJlZmlsbEJveE51bWJlciA9PT0gbnVsbCB8fCBwcmVmaWxsQm94TnVtYmVyID09PSB1bmRlZmluZWQgfHwgcHJlZmlsbEJveE51bWJlci5sZW5ndGggPT09IDAgKVxuICAgICAge1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVIpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICAvLyBhZGRyZXNzLmJveE51bWJlciA9IHByZWZpbGxCb3hOdW1iZXI7XG4gICAgICAgIGFkZHJlc3Muc2VhcmNoQmFyU3RyaW5nID0gcHJlZmlsbEJveE51bWJlcjtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgfVxuXG4gIG9uQm94TnVtYmVyUHJlZmlsbEV2ZW50KGV2ZW50OiBQcmVmaWxsRXZlbnQpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsaWI6OnByZWZpbGw6IGJveCBudW1iZXIgZXZlbnQgcmVjZWl2ZWQ6JywgZXZlbnQpOyB9XG4gICAgY29uc3QgZGF0YSA9IGV2ZW50LnByZWZpbGxEYXRhO1xuICAgIGlmIChkYXRhLnByZWZpbGxCb3hOdW1iZXJQZXJmZWN0TWF0Y2hGb3VuZCA9PT0gdHJ1ZSlcbiAgICB7XG4gICAgICBjb25zdCBzdWdnZXN0aW9uID0gZGF0YS5wcmVmaWxsQm94TnVtYmVyUGVyZmVjdE1hdGNoU3VnZ2VzdGlvbjtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBzdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlbGVjdGVkQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLkJPWF9OVU1CRVIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgY29uc3QgcHJlZmlsbEJveE51bWJlciA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5ib3hOdW1iZXI7XG4gICAgICBjb25zdCBhZGRyZXNzID0gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoU3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgaWYgKCBwcmVmaWxsQm94TnVtYmVyID09PSBudWxsIHx8IHByZWZpbGxCb3hOdW1iZXIgPT09IHVuZGVmaW5lZCB8fCBwcmVmaWxsQm94TnVtYmVyLmxlbmd0aCA9PT0gMCApXG4gICAgICB7XG4gICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuU1RSRUVUX05VTUJFUik7XG4gICAgICB9XG4gICAgICBlbHNlXG4gICAgICB7XG4gICAgICAgIC8vIGFkZHJlc3MuYm94TnVtYmVyID0gcHJlZmlsbEJveE51bWJlcjtcbiAgICAgICAgYWRkcmVzcy5zZWFyY2hCYXJTdHJpbmcgPSBwcmVmaWxsQm94TnVtYmVyO1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLkJPWF9OVU1CRVIpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICB9XG59XG4iLCJcclxuPGRpdiBjbGFzcz1cImFhY3dpZGdldC1hZGRyZXNzLWNvbnRhaW5lclwiPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJicGFhYy1kcm9wZG93bi12YWxpZGF0aW9uXCIgKm5nSWY9XCJ2YWxpZGF0aW9uTWVzc2FnZU9wdGlvblR5cGUgPT09ICdTSE9XJyBcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnBhYWMtdmFsaWRhdGVkLWljb25cIiAqbmdJZj1cInNlbGVjdGVkQWRkcmVzcyAmJiB2YWxpZGF0aW9uTWVzc2FnZSE9PW51bGwgJiYgdmFsaWRhdGlvbk1lc3NhZ2UubWVzc2FnZVR5cGUhPT1udWxsXCI+PC9kaXY+XHJcbiAgICAgICAgPCEtLSB7eyB2YWxpZGF0aW9uTWVzc2FnZSB8IHRyYW5zbGF0ZSB9fSAtLT5cclxuICAgICAgICB7eyB2YWxpZGF0aW9uTWVzc2FnZS50cmFuc2xhdGVkTWVzc2FnZSB9fVxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gYnAtYWFjd2lkZ2V0LWF1dG9jb21wbGV0ZS1sb2NhbGl0eSAtLT5cclxuICAgICAgICA8YnAtbG9jYWxpdHkgY2xhc3M9XCJhYWN3aWRnZXQtYWRkcmVzcy1sb2NhbGl0eVwiICpuZ0lmPVwiaXNDb21wb25lbnRSZWFkeVwiXHJcbiAgICAgICAgW2lzUmVhZG9ubHldPVwiaXNSZWFkb25seVwiXHJcbiAgICAgICAgW2luY2x1ZGVMaXN0T2ZCb3hlc109XCJpbmNsdWRlTGlzdE9mQm94ZXNcIlxyXG4gICAgICAgIFtpbmNsdWRlTGlzdE9mQnVzaW5lc3NOYW1lV2l0aEJveGVzXT1cImluY2x1ZGVMaXN0T2ZCdXNpbmVzc05hbWVXaXRoQm94ZXNcIlxyXG4gICAgICAgIFtzaG93RGVidWdNZXNzYWdlVG9Db25zb2xlXT1cInNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGVcIlxyXG4gICAgICAgIFtiYXNlVXJsXT1cInVzZWRMb2NhbGl0eVVybFwiXHJcbiAgICAgICAgW3ByZWZpbGxEYXRhXT1cImxvY2FsaXR5UHJlZmlsbERhdGFcIlxyXG4gICAgICAgIFtsYWJlbFJlc291cmNlS2V5XT1cIidjb21tb24ubGFiZWwucG9zdGFsQ29kZSdcIlxyXG4gICAgICAgIFtpbnB1dFRleHRdPVwicG9zdGFsQ29kZUxvY2FsaXR5XCJcclxuICAgICAgICBbaW5wdXRMYW5nXT1cInNlbGVjdGVkTGFuZ3VhZ2VcIlxyXG4gICAgICAgIFttZXNzYWdlT3B0aW9uXT1cIm1lc3NhZ2VPcHRpb25cIlxyXG4gICAgICAgIFtzb3J0Q3JpdGVyaWFdPVwic29ydENyaXRlcmlhTG9jYWxpdHlcIlxyXG4gICAgICAgIFttYXhTdWdnZXNpb25Db3VudF09XCJtYXhTdWdnZXN0aW9uTG9jYWxpdHlcIiBcclxuICAgICAgICBbdmlzaWJsZVN1Z2dlc3Rpb25Db3VudF09XCJ2aXNpYmxlU3VnZ2VzdGlvbkxvY2FsaXR5Q291bnRcIlxyXG4gICAgICAgIFthbGxvd05vVmFsaWRhdGlvbl09XCJhbGxvd05vVmFsaWRhdGlvblwiXHJcbiAgICAgICAgW3ZhbGlkYXRlZEJ5QmFja2VuZF09XCJ2YWxpZGF0ZWRCeUJhY2tlbmRcIlxyXG4gICAgICAgIFtudW1iZXJPZkV4Y2VwdGlvbnNdPVwibnVtYmVyT2ZFeGNlcHRpb25zXCJcclxuICAgICAgICBbbmlzOUluUmVzcG9uc2VdPVwibmlzOUluUmVzcG9uc2VcIlxyXG4gICAgICAgIFtidXNpbmVzc05hbWVJblJlc3BvbnNlXT1cImJ1c2luZXNzTmFtZUluUmVzcG9uc2VcIlxyXG4gICAgICAgIChhZGRyZXNzQ2hhbmdlZCk9XCJzZXRBZGRyZXNzKCRldmVudCwgNClcIlxyXG4gICAgICAgIChtZXNzYWdlQ2hhbmdlZCk9XCJzZXRWYWxpZGF0aW9uTWVzc2FnZSgkZXZlbnQpXCJcclxuICAgICAgICAoZm9jdXNFdmVudCk9XCJjaGFuZ2VNaW5MZXZlbCgkZXZlbnQpXCIgXHJcbiAgICAgICAgKHRleHRDaGFuZ2VFdmVudCk9XCJyZXNldExvY2FsaXR5KCRldmVudClcIlxyXG4gICAgICAgIChjbGVhcklucHV0RXZlbnRFbWl0dGVyKT1cIm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcigkZXZlbnQpXCJcclxuICAgICAgICAocHJlZmlsbEV2ZW50RW1pdHRlcik9XCJvbkxvY2FsaXR5UHJlZmlsbEV2ZW50KCRldmVudClcIlxyXG4gICAgICAgIChudW1iZXJPZkV4Y2VwdGlvbnNFbWl0dGVyKT1cInNldE51bWJlck9mRXhjZXB0aW9ucygkZXZlbnQpXCI+PC9icC1sb2NhbGl0eT5cclxuXHJcbiAgICAgICAgPGJwLXN0cmVldCBjbGFzcz1cImFhY3dpZGdldC1hZGRyZXNzLXN0cmVldFwiXHJcbiAgICAgICAgW2lzUmVhZG9ubHldPVwiaXNSZWFkb25seVwiXHJcbiAgICAgICAgW2luY2x1ZGVMaXN0T2ZCb3hlc109XCJpbmNsdWRlTGlzdE9mQm94ZXNcIlxyXG4gICAgICAgIFtpbmNsdWRlTGlzdE9mQnVzaW5lc3NOYW1lV2l0aEJveGVzXT1cImluY2x1ZGVMaXN0T2ZCdXNpbmVzc05hbWVXaXRoQm94ZXNcIlxyXG4gICAgICAgIFtzaG93RGVidWdNZXNzYWdlVG9Db25zb2xlXT1cInNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGVcIlxyXG4gICAgICAgIFtiYXNlVXJsXT1cInVzZWRTdHJlZXRVcmxcIlxyXG4gICAgICAgIFtwcmVmaWxsRGF0YV09XCJzdHJlZXRQcmVmaWxsRGF0YVwiXHJcbiAgICAgICAgW2F1dG9maWxsRGF0YV09XCJzdHJlZXROYW1lQXV0b2ZpbGxEYXRhXCJcclxuICAgICAgICBbbGFiZWxSZXNvdXJjZUtleV09XCInY29tbW9uLmxhYmVsLnN0cmVldE5hbWUnXCJcclxuICAgICAgICBbaW5wdXRUZXh0XT1cInN0cmVldE5hbWVJbnB1dFwiXHJcbiAgICAgICAgW2lucHV0TGFuZ109XCJzZWxlY3RlZExhbmd1YWdlXCJcclxuICAgICAgICBbbWVzc2FnZU9wdGlvbl09XCJtZXNzYWdlT3B0aW9uXCJcclxuICAgICAgICBbcG9zdGFsQ29kZV09XCJwb3N0YWxDb2RlXCJcclxuICAgICAgICBbbG9jYWxpdHldPVwibG9jYWxpdHlcIlxyXG4gICAgICAgIFtzb3J0Q3JpdGVyaWFdPVwic29ydENyaXRlcmlhU3RyZWV0XCIgXHJcbiAgICAgICAgW21heFN1Z2dlc2lvbkNvdW50XT1cIm1heFN1Z2dlc3Rpb25TdHJlZXRcIlxyXG4gICAgICAgIFt2aXNpYmxlU3VnZ2VzaW9uQ291bnRdPVwidmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXRDb3VudFwiXHJcbiAgICAgICAgW2FsbG93Tm9WYWxpZGF0aW9uXT1cImFsbG93Tm9WYWxpZGF0aW9uXCJcclxuICAgICAgICBbdmFsaWRhdGVkQnlCYWNrZW5kXT1cInZhbGlkYXRlZEJ5QmFja2VuZFwiXHJcbiAgICAgICAgW251bWJlck9mRXhjZXB0aW9uc109XCJudW1iZXJPZkV4Y2VwdGlvbnNcIlxyXG4gICAgICAgIChhZGRyZXNzQ2hhbmdlZCk9XCJzZXRBZGRyZXNzKCRldmVudCwgMylcIlxyXG4gICAgICAgIChtZXNzYWdlQ2hhbmdlZCk9XCJzZXRWYWxpZGF0aW9uTWVzc2FnZSgkZXZlbnQpXCJcclxuICAgICAgICAoZm9jdXNFdmVudCk9XCJjaGFuZ2VNaW5MZXZlbCgkZXZlbnQpXCJcclxuICAgICAgICAodGV4dENoYW5nZUV2ZW50KT1cInJlc2V0U3RyZWV0KCRldmVudClcIlxyXG4gICAgICAgIChjbGVhcklucHV0RXZlbnRFbWl0dGVyKT1cIm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcigkZXZlbnQpXCJcclxuICAgICAgICAocHJlZmlsbEV2ZW50RW1pdHRlcik9XCJvblN0cmVldFByZWZpbGxFdmVudCgkZXZlbnQpXCJcclxuICAgICAgICAobnVtYmVyT2ZFeGNlcHRpb25zRW1pdHRlcik9XCJzZXROdW1iZXJPZkV4Y2VwdGlvbnMoJGV2ZW50KVwiPjwvYnAtc3RyZWV0PlxyXG5cclxuICAgICAgICA8YnAtc3RyZWV0LW51bWJlciBjbGFzcz1cImFhY3dpZGdldC1hZGRyZXNzLXN0cmVldG51bWJlclwiXHJcbiAgICAgICAgW2lzUmVhZG9ubHldPVwiaXNSZWFkb25seVwiXHJcbiAgICAgICAgW2luY2x1ZGVMaXN0T2ZCb3hlc109XCJpbmNsdWRlTGlzdE9mQm94ZXNcIlxyXG4gICAgICAgIFtpbmNsdWRlTGlzdE9mQnVzaW5lc3NOYW1lV2l0aEJveGVzXT1cImluY2x1ZGVMaXN0T2ZCdXNpbmVzc05hbWVXaXRoQm94ZXNcIlxyXG4gICAgICAgIFtzaG93RGVidWdNZXNzYWdlVG9Db25zb2xlXT1cInNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGVcIlxyXG4gICAgICAgIFtiYXNlVXJsXT1cInVzZWRTdHJlZXROdW1iZXJVcmxcIlxyXG4gICAgICAgIFtzZWxlY3RlZEFkZHJlc3NdPVwic3RyZWV0QWRkcmVzc1wiXHJcbiAgICAgICAgW3ByZWZpbGxEYXRhXT1cInN0cmVldE51bWJlclByZWZpbGxEYXRhXCJcclxuICAgICAgICBbYXV0b2ZpbGxEYXRhXT1cInN0cmVldE51bWJlckF1dG9maWxsRGF0YVwiXHJcbiAgICAgICAgW2xhYmVsUmVzb3VyY2VLZXldPVwiJ2NvbW1vbi5sYWJlbC5zdHJlZXROdW1iZXInXCJcclxuICAgICAgICBbaW5wdXRUZXh0XT1cInN0cmVldE51bWJlcklucHV0XCJcclxuICAgICAgICBbaW5wdXRMYW5nXT1cInNlbGVjdGVkTGFuZ3VhZ2VcIlxyXG4gICAgICAgIFttZXNzYWdlT3B0aW9uXT1cIm1lc3NhZ2VPcHRpb25cIlxyXG4gICAgICAgIFtwb3N0YWxDb2RlXT1cInBvc3RhbENvZGVcIiBcclxuICAgICAgICBbbG9jYWxpdHldPVwibG9jYWxpdHlcIiBcclxuICAgICAgICBbc3RyZWV0TmFtZV09XCJzdHJlZXRcIlxyXG4gICAgICAgIFtzb3J0Q3JpdGVyaWFdPVwic29ydENyaXRlcmlhU3RyZWV0TmJcIlxyXG4gICAgICAgIFttYXhTdWdnZXNpb25Db3VudF09XCJtYXhTdWdnZXN0aW9uU3RyZWV0TmJcIiBcclxuICAgICAgICBbdmlzaWJsZVN1Z2dlc2lvbkNvdW50XT1cInZpc2libGVTdWdnZXN0aW9uU3RyZWV0TmJDb3VudFwiXHJcbiAgICAgICAgW25vdEluTGlzdEFsbG93ZWRdPVwibm90SW5MaXN0QWxsb3dlZFwiXHJcbiAgICAgICAgW3N1Z2dlc3Rpb25MZXZlbF09XCJzdWdnZXN0aW9uTGV2ZWxcIlxyXG4gICAgICAgIFthbGxvd05vVmFsaWRhdGlvbl09XCJhbGxvd05vVmFsaWRhdGlvblwiXHJcbiAgICAgICAgW3ZhbGlkYXRlZEJ5QmFja2VuZF09XCJ2YWxpZGF0ZWRCeUJhY2tlbmRcIlxyXG4gICAgICAgIFtudW1iZXJPZkV4Y2VwdGlvbnNdPVwibnVtYmVyT2ZFeGNlcHRpb25zXCJcclxuICAgICAgICBbbmlzOUluUmVzcG9uc2VdPVwibmlzOUluUmVzcG9uc2VcIlxyXG4gICAgICAgIFtidXNpbmVzc05hbWVJblJlc3BvbnNlXT1cImJ1c2luZXNzTmFtZUluUmVzcG9uc2VcIlxyXG4gICAgICAgIChhZGRyZXNzQ2hhbmdlZCk9XCJzZXRBZGRyZXNzKCRldmVudCwgMilcIlxyXG4gICAgICAgIChzdHJlZXROdW1iZXJDaGFuZ2VkKT1cInNldEFkZHJlc3NTdHJlZXROdW1iZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgKG1lc3NhZ2VDaGFuZ2VkKT1cInNldFZhbGlkYXRpb25NZXNzYWdlKCRldmVudClcIlxyXG4gICAgICAgIChmb2N1c0V2ZW50KT1cImNoYW5nZU1pbkxldmVsKCRldmVudClcIlxyXG4gICAgICAgICh0ZXh0Q2hhbmdlRXZlbnQpPVwicmVzZXRTdHJlZXROdW1iZXIoJGV2ZW50LCBmYWxzZSlcIlxyXG4gICAgICAgIChjbGVhcklucHV0RXZlbnRFbWl0dGVyKT1cIm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcigkZXZlbnQpXCJcclxuICAgICAgICAocHJlZmlsbEV2ZW50RW1pdHRlcik9XCJvblN0cmVldE51bWJlclByZWZpbGxFdmVudCgkZXZlbnQpXCJcclxuICAgICAgICAobnVtYmVyT2ZFeGNlcHRpb25zRW1pdHRlcik9XCJzZXROdW1iZXJPZkV4Y2VwdGlvbnMoJGV2ZW50KVwiPjwvYnAtc3RyZWV0LW51bWJlcj5cclxuXHJcbiAgICAgICAgPGJwLWJveC1udW1iZXIgY2xhc3M9XCJhYWN3aWRnZXQtYWRkcmVzcy1ib3hudW1iZXJcIlxyXG4gICAgICAgIFtpc1JlYWRvbmx5XT1cImlzUmVhZG9ubHlcIlxyXG4gICAgICAgIFtzaG93RGVidWdNZXNzYWdlVG9Db25zb2xlXT1cInNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGVcIlxyXG4gICAgICAgIFtiYXNlVXJsXT1cInVzZWRCb3hOdW1iZXJVcmxcIlxyXG4gICAgICAgIFtzZWxlY3RlZEFkZHJlc3NdPVwic3RyZWV0TnVtYmVyQWRkcmVzc1wiXHJcbiAgICAgICAgW3ByZWZpbGxEYXRhXT1cImJveE51bWJlclByZWZpbGxEYXRhXCJcclxuICAgICAgICBbYXV0b2ZpbGxEYXRhXT1cImJveE51bWJlckF1dG9maWxsRGF0YVwiXHJcbiAgICAgICAgW2xhYmVsUmVzb3VyY2VLZXldPVwiJ2NvbW1vbi5sYWJlbC5ib3hOdW1iZXInXCJcclxuICAgICAgICBbaW5wdXRMYW5nXT1cInNlbGVjdGVkTGFuZ3VhZ2VcIlxyXG4gICAgICAgIFttZXNzYWdlT3B0aW9uXT1cIm1lc3NhZ2VPcHRpb25cIlxyXG4gICAgICAgIFtwb3N0YWxDb2RlXT1cInBvc3RhbENvZGVcIiBcclxuICAgICAgICBbbG9jYWxpdHldPVwibG9jYWxpdHlcIiBcclxuICAgICAgICBbc3RyZWV0TmFtZV09XCJzdHJlZXRcIiBcclxuICAgICAgICBbc3RyZWV0TnVtYmVyXT1cInN0cmVldE51bWJlclwiXHJcbiAgICAgICAgW3NvcnRDcml0ZXJpYV09XCJzb3J0Q3JpdGVyaWFCb3hOYlwiIFxyXG4gICAgICAgIFtuaXM5SW5SZXNwb25zZV09XCJuaXM5SW5SZXNwb25zZVwiXHJcbiAgICAgICAgW2J1c2luZXNzTmFtZUluUmVzcG9uc2VdPVwiYnVzaW5lc3NOYW1lSW5SZXNwb25zZVwiXHJcbiAgICAgICAgW21heFN1Z2dlc2lvbkNvdW50XT1cIm1heFN1Z2dlc3Rpb25Cb3hOYlwiXHJcbiAgICAgICAgW3Zpc2libGVTdWdnZXNpb25Db3VudF09XCJ2aXNpYmxlU3VnZ2VzdGlvbkJveE5iQ291bnRcIlxyXG4gICAgICAgIFtub3RJbkxpc3RBbGxvd2VkXT1cIm5vdEluTGlzdEFsbG93ZWRcIlxyXG4gICAgICAgIFtzdWdnZXN0aW9uTGV2ZWxdPVwic3VnZ2VzdGlvbkxldmVsXCJcclxuICAgICAgICBbYWxsb3dOb1ZhbGlkYXRpb25dPVwiYWxsb3dOb1ZhbGlkYXRpb25cIlxyXG4gICAgICAgIFt2YWxpZGF0ZWRCeUJhY2tlbmRdPVwidmFsaWRhdGVkQnlCYWNrZW5kXCJcclxuICAgICAgICBbbnVtYmVyT2ZFeGNlcHRpb25zXT1cIm51bWJlck9mRXhjZXB0aW9uc1wiXHJcbiAgICAgICAgKG1lc3NhZ2VDaGFuZ2VkKT1cInNldFZhbGlkYXRpb25NZXNzYWdlKCRldmVudClcIlxyXG4gICAgICAgIChhZGRyZXNzQ2hhbmdlZCk9XCJzZXRBZGRyZXNzKCRldmVudCwgMSlcIiBcclxuICAgICAgICAoYm94TnVtYmVyQ2hhbmdlZCk9XCJzZXRBZGRyZXNzQm94TnVtYmVyKCRldmVudClcIlxyXG4gICAgICAgIChmb2N1c0V2ZW50KT1cImNoYW5nZU1pbkxldmVsKCRldmVudClcIlxyXG4gICAgICAgICh0ZXh0Q2hhbmdlRXZlbnQpPVwicmVzZXRCb3hOdW1iZXIoJGV2ZW50LCBmYWxzZSlcIlxyXG4gICAgICAgIChjbGVhcklucHV0RXZlbnRFbWl0dGVyKT1cIm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcigkZXZlbnQpXCJcclxuICAgICAgICAocHJlZmlsbEV2ZW50RW1pdHRlcik9XCJvbkJveE51bWJlclByZWZpbGxFdmVudCgkZXZlbnQpXCJcclxuICAgICAgICAobnVtYmVyT2ZFeGNlcHRpb25zRW1pdHRlcik9XCJzZXROdW1iZXJPZkV4Y2VwdGlvbnMoJGV2ZW50KVwiPjwvYnAtYm94LW51bWJlcj5cclxuPC9kaXY+Il19
1814
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLWFkZHJlc3MtYXV0b2NvbXBsZXRlLWJ5LWNvbXBvbmVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9saWItYWRkcmVzcy1hdXRvY29tcGxldGUtYnktY29tcG9uZW50L3NyYy9saWIvbGliLWFkZHJlc3MtYXV0b2NvbXBsZXRlLWJ5LWNvbXBvbmVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9saWItYWRkcmVzcy1hdXRvY29tcGxldGUtYnktY29tcG9uZW50L3NyYy9saWIvbGliLWFkZHJlc3MtYXV0b2NvbXBsZXRlLWJ5LWNvbXBvbmVudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFhLFNBQVMsRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFHL0gsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFekYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDdEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDeEUsT0FBTyxFQUFF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Z0I7c0JBQXhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLDhCQUE4QjtzQkFBdEMsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBTUcsU0FBUztzQkFBakIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csNEJBQTRCO3NCQUFwQyxLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFNRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyw4QkFBOEI7c0JBQXRDLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUtHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLDJCQUEyQjtzQkFBbkMsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBSUcsZUFBZTtzQkFBdkIsS0FBSztnQkF1QkksMkJBQTJCO3NCQUFwQyxNQUFNO2dCQUNHLDZCQUE2QjtzQkFBdEMsTUFBTTtnQkFDRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBQ0csOEJBQThCO3NCQUF2QyxNQUFNO2dCQUNHLDhCQUE4QjtzQkFBdkMsTUFBTTtnQkFTUCxNQUFNO3NCQURMLEtBQUs7Z0JBTU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLGNBQWM7c0JBRGIsS0FBSztnQkFJTixzQkFBc0I7c0JBRHJCLEtBQUs7Z0JBSU4sa0JBQWtCO3NCQURqQixLQUFLO2dCQUlOLGtDQUFrQztzQkFEakMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uRGVzdHJveSwgVmlld0NoaWxkLCBTaW1wbGVDaGFuZ2VzLCBPbkNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUHJlZmlsbGVkUGFyYW1ldGVycyB9IGZyb20gJy4vdXRpbHMvcHJlZmlsbGVkLXBhcmFtZXRlcnMnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25UeXBlIH0gZnJvbSAnLi9lbnVtL3ZhbGlkYXRpb24tbWVzc2FnZS1vcHRpb24tdHlwZS5lbnVtJztcbmltcG9ydCB7IFZhbGlkYXRpb25NZXNzYWdlVHlwZSB9IGZyb20gJy4vZW51bS92YWxpZGF0aW9uLW1lc3NhZ2UtdHlwZS5lbnVtJztcbmltcG9ydCB7IExvY2FsaXR5Q29tcG9uZW50IH0gZnJvbSAnLi9sb2NhbGl0eS9sb2NhbGl0eS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3RyZWV0Q29tcG9uZW50IH0gZnJvbSAnLi9zdHJlZXQvc3RyZWV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdHJlZXROdW1iZXJDb21wb25lbnQgfSBmcm9tICcuL3N0cmVldC1udW1iZXIvc3RyZWV0LW51bWJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQm94TnVtYmVyQ29tcG9uZW50IH0gZnJvbSAnLi9ib3gtbnVtYmVyL2JveC1udW1iZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFERFJFU1NMRVZFTCB9IGZyb20gJy4vZW51bSc7XG5pbXBvcnQgeyBQcmVmaWxsRGF0YSB9IGZyb20gJy4vdXRpbHMvcHJlZmlsbC1kYXRhJztcbmltcG9ydCB7IFByZWZpbGxFdmVudCB9IGZyb20gJy4vdXRpbHMvcHJlZmxsbC5ldmVudCc7XG5pbXBvcnQgeyBJbnB1dE5hbWVUeXBlIH0gZnJvbSAnLi9lbnVtL2lucHV0LW5hbWUuZW51bSc7XG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvaHR0cC5zZXJ2aWNlJztcbmltcG9ydCB7IExJQl9WRVJTSU9OIH0gZnJvbSAnLi91dGlscy9jb25zdGFudHMnO1xuaW1wb3J0IHsgU3VnZ2VzdGlvbkxldmVsVHlwZSB9IGZyb20gJy4vZW51bS9zdWdnZXN0aW9uLWxldmVsLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBBdXRvZmlsbERhdGEgfSBmcm9tICcuL3V0aWxzL2F1dG9maWxsLWRhdGEnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdicC1saWItYWRkcmVzcy1hdXRvY29tcGxldGUtYnktY29tcG9uZW50JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xpYi1hZGRyZXNzLWF1dG9jb21wbGV0ZS1ieS1jb21wb25lbnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsgJy4vbGliLWFkZHJlc3MtYXV0b2NvbXBsZXRlLWJ5LWNvbXBvbmVudC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIExpYkFkZHJlc3NBdXRvY29tcGxldGVCeUNvbXBvbmVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuXG4gIEBWaWV3Q2hpbGQoTG9jYWxpdHlDb21wb25lbnQsIHtzdGF0aWM6IGZhbHNlfSApIGF1dG9jb21wbGV0ZUxvY2FsaXR5O1xuICBAVmlld0NoaWxkKFN0cmVldENvbXBvbmVudCwge3N0YXRpYzogZmFsc2V9ICkgYXV0b2NvbXBsZXRlU3RyZWV0O1xuICBAVmlld0NoaWxkKFN0cmVldE51bWJlckNvbXBvbmVudCwge3N0YXRpYzogZmFsc2V9ICkgYXV0b2NvbXBsZXRlU3RyZWV0TmI7XG4gIEBWaWV3Q2hpbGQoQm94TnVtYmVyQ29tcG9uZW50LCB7c3RhdGljOiBmYWxzZX0gKSBhdXRvY29tcGxldGVCb3hOYjtcblxuICBzZWxlY3RlZExhbmd1YWdlOiBzdHJpbmcgPSBudWxsO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgYmFzZVVybCA9IFwiaHR0cHM6Ly9hcGkubWFpbG9wcy5icG9zdC5jbG91ZC9yb2EtaW5mby9leHRlcm5hbE1haWxpbmdBZGRyZXNzUHJvb2ZpbmdSZXN0L2F1dG9jb21wbGV0ZS9cIjtcbiAgcHJpdmF0ZSBkZWZhdWx0QXBpS2V5PScnO1xuXG4gIHVzZWRMb2NhbGl0eVVybCA9IHRoaXMuYmFzZVVybCArICdsb2NhbGl0eSc7XG4gIHVzZWRTdHJlZXRVcmwgPSB0aGlzLmJhc2VVcmwgKyAnc3RyZWV0JztcbiAgdXNlZFN0cmVldE51bWJlclVybCA9IHRoaXMuYmFzZVVybCArICdzdHJlZXROdW1iZXInO1xuICB1c2VkQm94TnVtYmVyVXJsID0gdGhpcy5iYXNlVXJsICsgJ2JveE51bWJlcic7XG5cbiAgLy8gQHRzLWlnbm9yZVxuICBASW5wdXQoKSBzZXQgaW5wdXRMYW5nKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMYW5ndWFnZSh2YWwpO1xuICB9XG5cbiAgLy8gQHRzLWlnbm9yZVxuICBASW5wdXQoKSBzZXQgY2xlYXJJbnB1dChmb2N1czoge3NldEZvY3VzOiBib29sZWFuLCB0aW1lc3RhbXA6IERhdGV9KSB7XG4gICAgdGhpcy5vbkNsZWFySW5wdXQoZm9jdXMpO1xuICB9XG5cbiAgLy8gQHRzLWlnbm9yZVxuICBASW5wdXQoKSBzZXQgdmFsaWRhdGlvbk1lc3NhZ2VPcHRpb24ob3B0aW9uOiB7dmFsaWRhdGlvblR5cGU6IFZhbGlkYXRpb25NZXNzYWdlT3B0aW9uVHlwZSwgdGltZXN0YW1wOiBEYXRlfSkge1xuICAgIHRoaXMuc2V0VmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25Gcm9tSW5wdXQob3B0aW9uKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGRlZmF1bHRMYW5nOiBzdHJpbmc7XG5cbiAgQElucHV0KCkgc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSA9IGZhbHNlO1xuICBASW5wdXQoKSBtaW5MZXZlbDogbnVtYmVyO1xuICBASW5wdXQoKSBub3RJbkxpc3RBbGxvd2VkID0gdHJ1ZTtcbiAgQElucHV0KCkgYWRkcmVzc1BhcmFtczogUHJlZmlsbGVkUGFyYW1ldGVycztcbiAgQElucHV0KCkgbWVzc2FnZU9wdGlvbiA9ICdZJztcblxuICAvLyBMT0NBTElUWVxuICBASW5wdXQoKSBsb2NhbGl0eVVybCA9IHRoaXMuYmFzZVVybCArICdsb2NhbGl0eSc7XG4gIEBJbnB1dCgpIG1heFN1Z2dlc3Rpb25Mb2NhbGl0eSA9IDU7XG4gIEBJbnB1dCgpIHZpc2libGVTdWdnZXN0aW9uTG9jYWxpdHlDb3VudCA9IDU7XG4gIEBJbnB1dCgpIHNvcnRDcml0ZXJpYUxvY2FsaXR5OiBzdHJpbmc7XG4gIHBvc3RhbENvZGVMb2NhbGl0eTogc3RyaW5nO1xuICAvLyBsb2NhbGl0eVBhcmFtczogUHJlZmlsbGVkUGFyYW1ldGVycztcbiAgbG9jYWxpdHlQcmVmaWxsRGF0YTogUHJlZmlsbERhdGEgPSBudWxsO1xuXG4gIC8vIFNUUkVFVFxuICBASW5wdXQoKSBzdHJlZXRVcmwgPSB0aGlzLmJhc2VVcmwgKyAnc3RyZWV0JztcbiAgQElucHV0KCkgbWF4U3VnZ2VzdGlvblN0cmVldCA9IDU7XG4gIEBJbnB1dCgpIHZpc2libGVTdWdnZXN0aW9uU3RyZWV0Q291bnQgPSA1O1xuICBASW5wdXQoKSBzb3J0Q3JpdGVyaWFTdHJlZXQ6IHN0cmluZztcbiAgLy8gc3RyZWV0UGFyYW1zOiBQcmVmaWxsZWRQYXJhbWV0ZXJzO1xuICBzdHJlZXRQcmVmaWxsRGF0YTogUHJlZmlsbERhdGEgPSBudWxsO1xuXG4gIC8vIFNUUkVFVCBOVU1CRVJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICBASW5wdXQoKSBzdHJlZXROdW1iZXJVcmwgPSB0aGlzLmJhc2VVcmwgKyAnc3RyZWV0TnVtYmVyJztcbiAgQElucHV0KCkgbWF4U3VnZ2VzdGlvblN0cmVldE5iID0gNTtcbiAgQElucHV0KCkgdmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXROYkNvdW50ID0gNTtcbiAgQElucHV0KCkgc29ydENyaXRlcmlhU3RyZWV0TmI6IHN0cmluZztcbiAgLy8gc3RyZWV0TnVtYmVyUGFyYW1zOiBQcmVmaWxsZWRQYXJhbWV0ZXJzO1xuICBzdHJlZXROdW1iZXJQcmVmaWxsRGF0YTogUHJlZmlsbERhdGEgPSBudWxsO1xuXG4gIC8vIEJPWCBOVU1CRVJcbiAgQElucHV0KCkgYm94TnVtYmVyVXJsID0gdGhpcy5iYXNlVXJsICsgJ2JveE51bWJlcic7XG4gIEBJbnB1dCgpIG1heFN1Z2dlc3Rpb25Cb3hOYiA9IDU7XG4gIEBJbnB1dCgpIHZpc2libGVTdWdnZXN0aW9uQm94TmJDb3VudCA9IDU7XG4gIEBJbnB1dCgpIHNvcnRDcml0ZXJpYUJveE5iOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFsbG93Tm9WYWxpZGF0aW9uOiBib29sZWFuO1xuICBASW5wdXQoKSB2YWxpZGF0ZWRCeUJhY2tlbmQ6IHRydWU7XG4gIEBJbnB1dCgpIG51bWJlck9mRXhjZXB0aW9uczogbnVtYmVyO1xuICAvLyBib3hQYXJhbXM6IFByZWZpbGxlZFBhcmFtZXRlcnM7XG4gIGJveE51bWJlclByZWZpbGxEYXRhOiBQcmVmaWxsRGF0YSA9IG51bGw7XG5cbiAgQElucHV0KCkgc3VnZ2VzdGlvbkxldmVsOiBTdWdnZXN0aW9uTGV2ZWxUeXBlID0gU3VnZ2VzdGlvbkxldmVsVHlwZS5TdHJlZXRBbmRCb3hOdW1iZXI7XG5cbiAgYm94TnVtYmVyOiBzdHJpbmc7XG4gIGNvbXBsZXRlQWRkcmVzczogc3RyaW5nO1xuICBlbWl0dGVkQWRkcmVzczogYW55ID0gbnVsbDtcbiAgbG9jYWxpdHk6IHN0cmluZztcbiAgcG9zdGFsQ29kZTogc3RyaW5nO1xuICBzZWxlY3RlZEFkZHJlc3M6IGFueTtcbiAgc3RyZWV0OiBzdHJpbmc7XG4gIHN0cmVldEFkZHJlc3M6IGFueTtcbiAgc3RyZWV0TmFtZUlucHV0OiBzdHJpbmc7XG4gIHN0cmVldE51bWJlcjogc3RyaW5nO1xuICBzdHJlZXROdW1iZXJBZGRyZXNzOiBhbnk7XG4gIHN0cmVldE51bWJlcklucHV0OiBzdHJpbmc7XG4gIGJveE51bWJlcklucHV0OiBzdHJpbmc7XG4gIHZhbGlkYXRpb25NZXNzYWdlOiB7bWVzc2FnZVR5cGU6IFZhbGlkYXRpb25NZXNzYWdlVHlwZSwgdHJhbnNsYXRlZE1lc3NhZ2U6IHN0cmluZ30gPSB7bWVzc2FnZVR5cGU6IG51bGwsIHRyYW5zbGF0ZWRNZXNzYWdlOiAnJ307XG4gIHZhbGlkYXRpb25NZXNzYWdlT3B0aW9uVHlwZTogVmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25UeXBlO1xuICBhdXRvZmlsbERhdGE6IEF1dG9maWxsRGF0YTtcbiAgc3RyZWV0TmFtZUF1dG9maWxsRGF0YTogQXV0b2ZpbGxEYXRhO1xuICBzdHJlZXROdW1iZXJBdXRvZmlsbERhdGE6IEF1dG9maWxsRGF0YTtcbiAgYm94TnVtYmVyQXV0b2ZpbGxEYXRhOiBBdXRvZmlsbERhdGE7XG5cblxuICBAT3V0cHV0KCkgYWRkcmVzc0NvbXBsZXRlRXZlbnRFbWl0dGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHZhbGlkYXRpb25NZXNzYWdlRXZlbnRFbWl0dGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGNsZWFySW5wdXRFdmVudEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgdmFsaWRhdGVkQnlCYWNrZW5kRXZlbnRFbWl0dGVyOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBudW1iZXJPZkV4Y2VwdGlvbnNFdmVudEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cbiAgcHJlZmlsbERhdGE6IFByZWZpbGxEYXRhO1xuICBwcm9jZXNzaW5nUHJlZmlsbERhdGEgPSBmYWxzZTtcblxuXG4gIC8vIFBhc3MgdGhlIEFQSSBrZXkgYXMgYSBwcm9wZXJ0eSBvZiB0aGUgbGlicmFyeSAhXG4gIEBJbnB1dCgpXG4gIGFwaUtleT10aGlzLmRlZmF1bHRBcGlLZXk7XG5cblxuICAvLyBzZXQgdGhlIHdpZGdldCBhcyByZWFkb25seSBhbmQgYWRkIE5JUzkgcXVlcnkgcGFyYW1ldGVyXG4gIEBJbnB1dCgpXG4gIGlzUmVhZG9ubHk9ZmFsc2U7XG5cbiAgQElucHV0KClcbiAgbmlzOUluUmVzcG9uc2U9ZmFsc2U7XG5cbiAgQElucHV0KClcbiAgYnVzaW5lc3NOYW1lSW5SZXNwb25zZT1mYWxzZTtcblxuICBASW5wdXQoKVxuICBpbmNsdWRlTGlzdE9mQm94ZXM9ZmFsc2U7XG5cbiAgQElucHV0KClcbiAgaW5jbHVkZUxpc3RPZkJ1c2luZXNzTmFtZVdpdGhCb3hlcz1mYWxzZTtcblxuXG4gIGlzQ29tcG9uZW50UmVhZHkgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHBTZXJ2aWNlOiBIdHRwU2VydmljZVxuICApIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWRcbiAge1xuICAgIGNvbnNvbGUuaW5mbygnbGliIHZlcnNpb24gaXM6JywgTElCX1ZFUlNJT04pO1xuICAgIC8vY29uc29sZS53YXJuKCdsaWIgLSBuZ09uSW5pdCcpO1xuXG4gICAgY29uc3QgYXBpS2V5ID0gdGhpcy5pc1ZhbGlkRGF0YSh0aGlzLmFwaUtleSkgPyB0aGlzLmFwaUtleSA6IHRoaXMuZGVmYXVsdEFwaUtleTtcbiAgICB0aGlzLmh0dHBTZXJ2aWNlLnNldEFwaUtleSggYXBpS2V5ICk7XG4gICAgdGhpcy5odHRwU2VydmljZS5zZXRTaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSk7XG5cbiAgICBpZiggdGhpcy5pc1ZhbGlkRGF0YSh0aGlzLmxvY2FsaXR5VXJsKSApIHRoaXMudXNlZExvY2FsaXR5VXJsPXRoaXMubG9jYWxpdHlVcmw7XG4gICAgaWYoIHRoaXMuaXNWYWxpZERhdGEodGhpcy5zdHJlZXRVcmwpICkgdGhpcy51c2VkU3RyZWV0VXJsPXRoaXMuc3RyZWV0VXJsO1xuICAgIGlmKCB0aGlzLmlzVmFsaWREYXRhKHRoaXMuc3RyZWV0TnVtYmVyVXJsKSApIHRoaXMudXNlZFN0cmVldE51bWJlclVybD10aGlzLnN0cmVldE51bWJlclVybDtcbiAgICBpZiggdGhpcy5pc1ZhbGlkRGF0YSh0aGlzLmJveE51bWJlclVybCkgKSB0aGlzLnVzZWRCb3hOdW1iZXJVcmw9dGhpcy5ib3hOdW1iZXJVcmw7XG5cbiAgICBpZiAodGhpcy5hZGRyZXNzUGFyYW1zKVxuICAgIHtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEgPSB0aGlzLmFkZHJlc3NQYXJhbXMgYXMgYW55IGFzIFByZWZpbGxEYXRhO1xuICAgIH1cblxuICAgIHRoaXMuaXNDb21wb25lbnRSZWFkeSA9IHRydWU7XG4gIH1cblxuICBpc1ZhbGlkRGF0YSggc3RyOiBzdHJpbmcpOiBib29sZWFuXG4gIHtcbiAgICByZXR1cm4gc3RyIT09dW5kZWZpbmVkICYmIHN0ciE9PW51bGwgJiYgc3RyLmxlbmd0aD4wO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKVxuICB7XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKVxuICAgIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcylcbiAge1xuICAgIGlmIChjaGFuZ2VzKVxuICAgIHtcbiAgICAgIC8vIGNvZGUgZm9yIHRyYWNpbmdcbiAgICAgIC8vIHZpc2libGVTdWdnZXN0aW9uU3RyZWV0TmJDb3VudFxuICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgICB0aGlzLmRpc3BsYXlQYXJhbWV0ZXJzQ2hhbmdlc1RvQ29uc29sZShjaGFuZ2VzKTtcbiAgICAgIH1cblxuXG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnYXBpS2V5JykgJiYgIWNoYW5nZXNbJ2FwaUtleSddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgIGNvbnN0IGFwaUtleSA9IHRoaXMuYXBpS2V5IT09bnVsbCAmJiB0aGlzLmFwaUtleSE9PXVuZGVmaW5lZCAmJiB0aGlzLmFwaUtleS5sZW5ndGg+MFxuICAgICAgICAgICAgPyB0aGlzLmFwaUtleVxuICAgICAgICAgICAgOiB0aGlzLmRlZmF1bHRBcGlLZXk7XG4gICAgICAgIHRoaXMuaHR0cFNlcnZpY2Uuc2V0QXBpS2V5KCBhcGlLZXkgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ2xvY2FsaXR5VXJsJykgJiYgIWNoYW5nZXNbJ2xvY2FsaXR5VXJsJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgY29uc3QgbG9jYWxpdHlVcmwgPSB0aGlzLmxvY2FsaXR5VXJsIT09bnVsbCAmJiB0aGlzLmxvY2FsaXR5VXJsIT09dW5kZWZpbmVkICYmIHRoaXMubG9jYWxpdHlVcmwubGVuZ3RoPjBcbiAgICAgICAgICAgID8gdGhpcy5sb2NhbGl0eVVybFxuICAgICAgICAgICAgOiB0aGlzLmJhc2VVcmwgKyAnbG9jYWxpdHknO1xuICAgICAgICB0aGlzLnVzZWRMb2NhbGl0eVVybD1sb2NhbGl0eVVybDtcbiAgICAgICAgY29uc29sZS5sb2coJ25nT25DaGFuZ2VzIC0gbG9jYWxpdHlVcmw6ICcsIGxvY2FsaXR5VXJsKTtcbiAgICAgICAgdGhpcy5zZXROdW1iZXJPZkV4Y2VwdGlvbnMoMCk7XG4gICAgICAgIHRoaXMuc2V0VmFsaWRhdGVkQnlCYWNrZW5kKHRydWUpO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3N0cmVldFVybCcpICYmICFjaGFuZ2VzWydzdHJlZXRVcmwnXS5maXJzdENoYW5nZSkge1xuICAgICAgICBjb25zdCBzdHJlZXRVcmwgPSB0aGlzLnN0cmVldFVybCE9PW51bGwgJiYgdGhpcy5zdHJlZXRVcmwhPT11bmRlZmluZWQgJiYgdGhpcy5zdHJlZXRVcmwubGVuZ3RoPjBcbiAgICAgICAgICAgID8gdGhpcy5zdHJlZXRVcmxcbiAgICAgICAgICAgIDogdGhpcy5iYXNlVXJsICsgJ3N0cmVldCc7XG4gICAgICAgIHRoaXMudXNlZFN0cmVldFVybD1zdHJlZXRVcmw7XG4gICAgICAgIHRoaXMuc2V0TnVtYmVyT2ZFeGNlcHRpb25zKDApO1xuICAgICAgICB0aGlzLnNldFZhbGlkYXRlZEJ5QmFja2VuZCh0cnVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzdHJlZXROdW1iZXJVcmwnKSAmJiAhY2hhbmdlcy5zdHJlZXROdW1iZXJVcmwuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgY29uc3Qgc3RyZWV0TnVtYmVyVXJsID0gdGhpcy5zdHJlZXROdW1iZXJVcmwhPT1udWxsICYmIHRoaXMuc3RyZWV0TnVtYmVyVXJsIT09dW5kZWZpbmVkICYmIHRoaXMuc3RyZWV0TnVtYmVyVXJsLmxlbmd0aD4wXG4gICAgICAgICAgICA/IHRoaXMuc3RyZWV0TnVtYmVyVXJsXG4gICAgICAgICAgICA6IHRoaXMuYmFzZVVybCArICdzdHJlZXROdW1iZXInO1xuICAgICAgICB0aGlzLnVzZWRTdHJlZXROdW1iZXJVcmw9c3RyZWV0TnVtYmVyVXJsO1xuICAgICAgICB0aGlzLnNldE51bWJlck9mRXhjZXB0aW9ucygwKTtcbiAgICAgICAgdGhpcy5zZXRWYWxpZGF0ZWRCeUJhY2tlbmQodHJ1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnYm94TnVtYmVyVXJsJykgJiYgIWNoYW5nZXMuYm94TnVtYmVyVXJsLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgIGNvbnN0IGJveE51bWJlclVybCA9IHRoaXMuYm94TnVtYmVyVXJsIT09bnVsbCAmJiB0aGlzLmJveE51bWJlclVybCE9PXVuZGVmaW5lZCAmJiB0aGlzLmJveE51bWJlclVybC5sZW5ndGg+MFxuICAgICAgICAgICAgPyB0aGlzLmJveE51bWJlclVybFxuICAgICAgICAgICAgOiB0aGlzLmJhc2VVcmwgKyAnYm94TnVtYmVyJztcbiAgICAgICAgdGhpcy51c2VkQm94TnVtYmVyVXJsPWJveE51bWJlclVybDtcbiAgICAgICAgdGhpcy5zZXROdW1iZXJPZkV4Y2VwdGlvbnMoMCk7XG4gICAgICAgIHRoaXMuc2V0VmFsaWRhdGVkQnlCYWNrZW5kKHRydWUpO1xuICAgICAgfVxuXG5cblxuICAgICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ2FkZHJlc3NQYXJhbXMnKSAmJiAhY2hhbmdlc1snYWRkcmVzc1BhcmFtcyddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAvLyBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnYWRkcmVzc1BhcmFtcycpKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc2luZ1ByZWZpbGxEYXRhID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lbnRlclByZWZpbGxNb2RlKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzID0gbnVsbDtcbiAgICAgICAgdGhpcy5ub3RpZnlBZGRyZXNzQ29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5jbGVhcldpZGdldCgpO1xuICAgICAgICAvKlxuICAgICAgICBpZiAodGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhICE9PSBudWxsICYmIHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gdGhpcy5vbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoSW5wdXROYW1lVHlwZS5MT0NBTElUWSk7XG4gICAgICAgICAgdGhpcy5jbGVhcldpZGdldCgpO1xuICAgICAgICB9XG4gICAgICAgICovXG4gICAgICAgIHRoaXMuYm94TnVtYmVyUHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgICB0aGlzLnN0cmVldE51bWJlclByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdHJlZXRQcmVmaWxsRGF0YSA9IG51bGw7XG5cbiAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge2NvbnNvbGUubG9nKCdsaWI6OndpZGdldCBkZXRlY3RlZCBwcmVmaWxsaW5nJywgdGhpcy5hZGRyZXNzUGFyYW1zKTsgfVxuICAgICAgICB0aGlzLmFkZHJlc3NQYXJhbXMubWluTGV2ZWwgPSAvKjQqLyBBRERSRVNTTEVWRUwuTE9DQUxJVFk7XG4gICAgICAgIHRoaXMubWluTGV2ZWwgPSB0aGlzLmFkZHJlc3NQYXJhbXMubWluTGV2ZWw7XG4gICAgICAgIC8vIHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSA9IHRoaXMuYWRkcmVzc1BhcmFtczsgLy8gYXMgYW55IGFzIFByZWZpbGxEYXRhO1xuICAgICAgICB0aGlzLmxvY2FsaXR5UHJlZmlsbERhdGEgPSBuZXcgUHJlZmlsbERhdGEodGhpcy5hZGRyZXNzUGFyYW1zKTtcbiAgICAgICAgLy8gT2JqZWN0LmFzc2lnbih0aGlzLmxvY2FsaXR5UHJlZmlsbERhdGEsIHRoaXMuYWRkcmVzc1BhcmFtcyk7XG4gICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtjb25zb2xlLmxvZygnbGliOjpjaGVja2luZyBsb2NhbGl0eSBtYXRjaC4uLiAnLCB0aGlzLmxvY2FsaXR5UHJlZmlsbERhdGEpOyB9XG4gICAgICB9XG5cbiAgICAgIC8vIHN1Z2dlc3Rpb24gbGV2ZWxcbiAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzdWdnZXN0aW9uTGV2ZWwnKVxuICAgICAgICAgIC8qJiYgIWNoYW5nZXMuc3VnZ2VzdGlvbkxldmVsLmZpcnN0Q2hhbmdlXG4gICAgICAgICAgJiYgIWNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3ByZWZpbGxEYXRhJykgJiYgISB0aGlzLnByZWZpbGxpbmcqLyApIHtcbiAgICAgICAgICAgIC8qXG4gICAgICAgIHRoaXMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuU1RSRUVUX05VTUJFUjtcbiAgICAgICAgLy8gdGhpcy5hZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdzdHJlZXQgbnVtYmVyIC0gbmdPbmNoYW5nZXMgLSBzdHJlZXROYW1lIGNoYW5nZXMgZGV0ZWN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMuc3RyZWV0TmFtZS5jdXJyZW50VmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgdGhpcy5jbGVhcldpZGdldCgpO1xuICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICAgICAgKi9cblxuICAgICAgICBjb25zdCBzbCA9IE51bWJlcihjaGFuZ2VzWydzdWdnZXN0aW9uTGV2ZWwnXS5jdXJyZW50VmFsdWUpO1xuICAgICAgICBzd2l0Y2goc2wpXG4gICAgICAgIHtcbiAgICAgICAgICBjYXNlIDA6IHRoaXMuc3VnZ2VzdGlvbkxldmVsID0gU3VnZ2VzdGlvbkxldmVsVHlwZS5Ob25lOyBicmVhaztcbiAgICAgICAgICBjYXNlIDE6IHRoaXMuc3VnZ2VzdGlvbkxldmVsID0gU3VnZ2VzdGlvbkxldmVsVHlwZS5TdHJlZXROdW1iZXI7IGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjogdGhpcy5zdWdnZXN0aW9uTGV2ZWwgPSBTdWdnZXN0aW9uTGV2ZWxUeXBlLlN0cmVldEFuZEJveE51bWJlcjsgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZVxuICAgICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3Nob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUnKVxuICAgICAgICAgICYmICFjaGFuZ2VzWydzaG93RGVidWdNZXNzYWdlVG9Db25zb2xlJ10uZmlyc3RDaGFuZ2UgICkge1xuXG4gICAgICAgIGNvbnN0IHNkbTJjID0gY2hhbmdlc1snc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSddLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgaWYoc2RtMmMpXG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLmh0dHBTZXJ2aWNlLnNldFNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUoc2RtMmMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdudW1iZXJPZkV4Y2VwdGlvbnMnKSApIHtcbiAgICAgICAgdGhpcy5udW1iZXJPZkV4Y2VwdGlvbnMgPSBjaGFuZ2VzWydudW1iZXJPZkV4Y2VwdGlvbnMnXS5jdXJyZW50VmFsdWU7XG5cbiAgICAgIH1cbiAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCd2YWxpZGF0ZWRCeUJhY2tlbmQnKSApIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmQgPSBjaGFuZ2VzWyd2YWxpZGF0ZWRCeUJhY2tlbmQnXS5jdXJyZW50VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZGlzcGxheVBhcmFtZXRlcnNDaGFuZ2VzVG9Db25zb2xlKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpXG4gIHtcbiAgICAvLyBtZXNzYWdlT3B0aW9uXG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ21lc3NhZ2VPcHRpb24nKSAmJiAhY2hhbmdlc1snbWVzc2FnZU9wdGlvbiddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzWydtZXNzYWdlT3B0aW9uJ10uY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gbWVzc2FnZU9wdGlvbicsIHdjQ2hhbmdlcyk7XG4gICAgfVxuXG4gICAgLy8gbWF4U3VnZ2VzdGlvbkxvY2FsaXR5XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ21heFN1Z2dlc3Rpb25Mb2NhbGl0eScpICYmICFjaGFuZ2VzWydtYXhTdWdnZXN0aW9uTG9jYWxpdHknXS5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlc1snbWF4U3VnZ2VzdGlvbkxvY2FsaXR5J10uY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gbWF4U3VnZ2VzdGlvbkxvY2FsaXR5Jywgd2NDaGFuZ2VzKTtcbiAgICB9XG5cbiAgICAvLyB2aXNpYmxlU3VnZ2VzdGlvbkxvY2FsaXR5Q291bnRcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgndmlzaWJsZVN1Z2dlc3Rpb25Mb2NhbGl0eUNvdW50JykgJiYgIWNoYW5nZXNbJ3Zpc2libGVTdWdnZXN0aW9uTG9jYWxpdHlDb3VudCddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzWyd2aXNpYmxlU3VnZ2VzdGlvbkxvY2FsaXR5Q291bnQnXS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSB2aXNpYmxlU3VnZ2VzdGlvbkxvY2FsaXR5Q291bnQnLCB3Y0NoYW5nZXMpO1xuICAgIH1cblxuICAgIC8vIHNvcnRDcml0ZXJpYUxvY2FsaXR5XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3NvcnRDcml0ZXJpYUxvY2FsaXR5JykgJiYgIWNoYW5nZXNbJ3NvcnRDcml0ZXJpYUxvY2FsaXR5J10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXNbJ3NvcnRDcml0ZXJpYUxvY2FsaXR5J10uY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gc29ydENyaXRlcmlhTG9jYWxpdHknLCB3Y0NoYW5nZXMpO1xuICAgIH1cblxuICAgIC8vIG1heFN1Z2dlc3Rpb25TdHJlZXRcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnbWF4U3VnZ2VzdGlvblN0cmVldCcpICYmICFjaGFuZ2VzWydtYXhTdWdnZXN0aW9uU3RyZWV0J10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXNbJ21heFN1Z2dlc3Rpb25TdHJlZXQnXS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBtYXhTdWdnZXN0aW9uU3RyZWV0Jywgd2NDaGFuZ2VzKTtcbiAgICB9XG4gICAgLy8gdmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXRDb3VudFxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCd2aXNpYmxlU3VnZ2VzdGlvblN0cmVldENvdW50JykgJiYgIWNoYW5nZXNbJ3Zpc2libGVTdWdnZXN0aW9uU3RyZWV0Q291bnQnXS5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlc1sndmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXRDb3VudCddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIHZpc2libGVTdWdnZXN0aW9uU3RyZWV0Q291bnQnLCB3Y0NoYW5nZXMpO1xuICAgIH1cbiAgICAvLyBzb3J0Q3JpdGVyaWFTdHJlZXRcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnc29ydENyaXRlcmlhU3RyZWV0JykgJiYgIWNoYW5nZXNbJ3NvcnRDcml0ZXJpYVN0cmVldCddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzWydzb3J0Q3JpdGVyaWFTdHJlZXQnXS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBzb3J0Q3JpdGVyaWFTdHJlZXQnLCB3Y0NoYW5nZXMpO1xuICAgIH1cblxuICAgIC8vIG1heFN1Z2dlc3Rpb25TdHJlZXROYlxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdtYXhTdWdnZXN0aW9uU3RyZWV0TmInKSAmJiAhY2hhbmdlc1snbWF4U3VnZ2VzdGlvblN0cmVldE5iJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXNbJ21heFN1Z2dlc3Rpb25TdHJlZXROYiddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIG1heFN1Z2dlc3Rpb25TdHJlZXROYicsIHdjQ2hhbmdlcyk7XG4gICAgfVxuICAgIC8vIHZpc2libGVTdWdnZXN0aW9uU3RyZWV0TmJDb3VudFxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCd2aXNpYmxlU3VnZ2VzdGlvblN0cmVldE5iQ291bnQnKSAmJiAhY2hhbmdlc1sndmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXROYkNvdW50J10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXNbJ3Zpc2libGVTdWdnZXN0aW9uU3RyZWV0TmJDb3VudCddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIHZpc2libGVTdWdnZXN0aW9uU3RyZWV0TmJDb3VudCcsIHdjQ2hhbmdlcyk7XG4gICAgfVxuICAgIC8vIHNvcnRDcml0ZXJpYVN0cmVldE5iXG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3NvcnRDcml0ZXJpYVN0cmVldE5iJykgJiYgIWNoYW5nZXNbJ3NvcnRDcml0ZXJpYVN0cmVldE5iJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXNbJ3NvcnRDcml0ZXJpYVN0cmVldE5iJ10uY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gc29ydENyaXRlcmlhU3RyZWV0TmInLCB3Y0NoYW5nZXMpO1xuICAgIH1cblxuICAgIC8vIG1heFN1Z2dlc3Rpb25Cb3hOYlxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdtYXhTdWdnZXN0aW9uQm94TmInKSAmJiAhY2hhbmdlc1snbWF4U3VnZ2VzdGlvbkJveE5iJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXNbJ21heFN1Z2dlc3Rpb25Cb3hOYiddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIG1heFN1Z2dlc3Rpb25Cb3hOYicsIHdjQ2hhbmdlcyk7XG4gICAgfVxuICAgIC8vIHZpc2libGVTdWdnZXN0aW9uQm94TmJDb3VudFxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCd2aXNpYmxlU3VnZ2VzdGlvbkJveE5iQ291bnQnKSAmJiAhY2hhbmdlc1sndmlzaWJsZVN1Z2dlc3Rpb25Cb3hOYkNvdW50J10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXNbJ3Zpc2libGVTdWdnZXN0aW9uQm94TmJDb3VudCddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIHZpc2libGVTdWdnZXN0aW9uQm94TmJDb3VudCcsIHdjQ2hhbmdlcyk7XG4gICAgfVxuICAgIC8vIHNvcnRDcml0ZXJpYUJveE5iXG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3NvcnRDcml0ZXJpYUJveE5iJykgJiYgIWNoYW5nZXNbJ3NvcnRDcml0ZXJpYUJveE5iJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXNbJ3NvcnRDcml0ZXJpYUJveE5iJ10uY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gc29ydENyaXRlcmlhQm94TmInLCB3Y0NoYW5nZXMpO1xuICAgIH1cblxuICAgIC8vIGFwaUtleVxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdhcGlLZXknKSAmJiAhY2hhbmdlc1snYXBpS2V5J10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXNbJ2FwaUtleSddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIGFwaUtleScsIHdjQ2hhbmdlcyk7XG4gICAgfVxuXG4gICAgLy8gbG9jYWxpdHlVcmxcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnbG9jYWxpdHlVcmwnKSAmJiAhY2hhbmdlc1snbG9jYWxpdHlVcmwnXS5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlc1snbG9jYWxpdHlVcmwnXS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBsb2NhbGl0eVVybCcsIHdjQ2hhbmdlcyk7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBjdXJyZW50IGxvY2FsaXR5VXJsJywgdGhpcy5sb2NhbGl0eVVybCk7XG4gICAgfVxuXG4gICAgLy8gc3RyZWV0VXJsXG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3N0cmVldFVybCcpICYmICFjaGFuZ2VzWydzdHJlZXRVcmwnXS5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlc1snc3RyZWV0VXJsJ10uY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gc3RyZWV0VXJsJywgd2NDaGFuZ2VzKTtcbiAgICB9XG5cbiAgICAvLyBzdHJlZXROdW1iZXJVcmxcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnc3RyZWV0TnVtYmVyVXJsJykgJiYgIWNoYW5nZXNbJ3N0cmVldE51bWJlclVybCddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzWydzdHJlZXROdW1iZXJVcmwnXS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBzdHJlZXROdW1iZXJVcmwnLCB3Y0NoYW5nZXMpO1xuICAgIH1cblxuICAgIC8vIGJveE51bWJlclVybFxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdib3hOdW1iZXJVcmwnKSAmJiAhY2hhbmdlc1snYm94TnVtYmVyVXJsJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXNbJ2JveE51bWJlclVybCddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIGJveE51bWJlclVybCcsIHdjQ2hhbmdlcyk7XG4gICAgfVxuXG4gICAgLy8gc3VnZ2VzdGlvbkxldmVsXG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3N1Z2dlc3Rpb25MZXZlbCcpICYmICFjaGFuZ2VzWydzdWdnZXN0aW9uTGV2ZWwnXS5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlc1snc3VnZ2VzdGlvbkxldmVsJ10uY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gc3VnZ2VzdGlvbkxldmVsJywgd2NDaGFuZ2VzKTtcbiAgICB9XG4gIH1cblxuICBjbGVhcldpZGdldCgpIHtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFyV2lkZ2V0KCk7XG4gICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5jbGVhcldpZGdldCgpO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFyV2lkZ2V0KCk7XG4gICAgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5jbGVhcldpZGdldCgpO1xuICB9XG5cbiAgY2hhbmdlTWluTGV2ZWwobWluTGV2ZWw6IG51bWJlcikge1xuICAgIHRoaXMubWluTGV2ZWwgPSBtaW5MZXZlbDtcbiAgfVxuXG4gIC8vIENhbGxlZCBieSB0aGUgc3BlY2lmaWMgYnV0dG9ucyBpbiB0aGUgYXBwXG4gIG9uQ2xlYXJJbnB1dChmb2N1czoge3NldEZvY3VzOiBib29sZWFuLCB0aW1lc3RhbXA6IERhdGV9KSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnbGliOjpvbkNsZWFySW5wdXQnLCBmb2N1cyk7IH1cblxuICAgIC8qXG4gICAgaWYgKGZvY3VzID09PSBudWxsIHx8IGZvY3VzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9Ki9cblxuICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG5cbiAgICBjb25zdCBzZXRGb2N1cyA9IChmb2N1cyA9PT0gbnVsbCB8fCBmb2N1cyA9PT0gdW5kZWZpbmVkKSA/IGZhbHNlIDogZm9jdXMuc2V0Rm9jdXM7XG5cbiAgICBzd2l0Y2ggKHRoaXMubWluTGV2ZWwpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHRoaXMuYm94TnVtYmVyID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KHNldEZvY3VzLCBmYWxzZSk7XG4gICAgICAgICAgdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoJ0JPWF9OVU1CRVInKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHRoaXMuYm94TnVtYmVyID0gJyc7XG4gICAgICAgICAgdGhpcy5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIub25DbGVhclN0cmVldE51bWJlcklucHV0KHNldEZvY3VzLCBmYWxzZSk7XG4gICAgICAgICAgdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoJ1NUUkVFVF9OVU1CRVInKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHRoaXMuYm94TnVtYmVyID0gJyc7XG4gICAgICAgICAgdGhpcy5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgICB0aGlzLnN0cmVldCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KHNldEZvY3VzLCBmYWxzZSk7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcldpZGdldCgpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIub25DbGVhclN0cmVldE51bWJlcklucHV0KHNldEZvY3VzLCBmYWxzZSk7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuY2xlYXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KCdTVFJFRVQnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyBCb3ggbnVtYmVyXG4gICAgICAgICAgdGhpcy5ib3hOdW1iZXIgPSAnJztcbiAgICAgICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVCb3hOYilcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFySW5wdXQoc2V0Rm9jdXMsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gU3RyZWV0IG51bWJlclxuICAgICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIpXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIub25DbGVhclN0cmVldE51bWJlcklucHV0KHNldEZvY3VzLCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFN0cmVldCBuYW1lXG4gICAgICAgICAgdGhpcy5zdHJlZXQgPSAnJztcbiAgICAgICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVTdHJlZXQpXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuY2xlYXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBMb2NhbGl0eVxuICAgICAgICAgIHRoaXMubG9jYWxpdHkgPSAnJztcbiAgICAgICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eSlcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5LnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuY2xlYXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KCdMT0NBTElUWScpO1xuICAgICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGdldEJveFByZWZpeCgpOiBzdHJpbmcge1xuICAgIGxldCBwcmVmaXggPSAnJztcbiAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0ZWRMYW5ndWFnZSkge1xuICAgICAgY2FzZSAnZnInOlxuICAgICAgICBwcmVmaXggPSAnQlRFJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdubCc6XG4gICAgICAgICAgcHJlZml4ID0gJ0JVUyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBwcmVmaXggPSAnQk9YJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBwcmVmaXg7XG4gIH1cblxuICBub3RpZnlBZGRyZXNzQ29tcGxldGUoKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ25vdGlmeSBmb3IgYWRkcmVzcyBjb21wbGV0ZScpO1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpXG4gICAge1xuICAgICAgY29uc29sZS5sb2coJ25vdGlmeUFkZHJlc3NDb21wbGV0ZScsIHRoaXMuc2VsZWN0ZWRBZGRyZXNzLCAnbmlzOUluUmVzcG9uc2U6Jyt0aGlzLm5pczlJblJlc3BvbnNlLCB0eXBlb2YgdGhpcy5uaXM5SW5SZXNwb25zZSk7XG4gICAgfVxuICAgICAgXG4gICAgICBpZih0aGlzLnNlbGVjdGVkQWRkcmVzcyl7XG4gICAgICBsZXQgaXNDb21wbGV0ZVN0cmVldE51bWJlciA9IGZhbHNlO1xuICAgICAgbGV0IGlzQ29tcGxldGVCb3hOdW1iZXIgPSBmYWxzZTtcbiAgICAgIGlmKHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmhhc093blByb3BlcnR5KCdpc0NvbXBsZXRlJykgJiYgdGhpcy5zZWxlY3RlZEFkZHJlc3MuaXNDb21wbGV0ZSl7XG4gICAgICAgIGlmKHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmJveE51bWJlcil7XG4gICAgICAgICAgaXNDb21wbGV0ZUJveE51bWJlciA9IHRydWU7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIGlzQ29tcGxldGVTdHJlZXROdW1iZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmF1dG9maWxsRGF0YSA9IG5ldyBBdXRvZmlsbERhdGEoe1xuICAgICAgc3RyZWV0TmFtZTogdGhpcy5zZWxlY3RlZEFkZHJlc3Muc3RyZWV0TmFtZSA/IHRoaXMuc2VsZWN0ZWRBZGRyZXNzLnN0cmVldE5hbWUgOiAnJyxcbiAgICAgIHN0cmVldE51bWJlcjogdGhpcy5zZWxlY3RlZEFkZHJlc3MuaG91c2VOdW1iZXIgPyB0aGlzLnNlbGVjdGVkQWRkcmVzcy5ob3VzZU51bWJlciA6ICcnLFxuICAgICAgYm94TnVtYmVyOiB0aGlzLnNlbGVjdGVkQWRkcmVzcy5ib3hOdW1iZXIgPyB0aGlzLnNlbGVjdGVkQWRkcmVzcy5ib3hOdW1iZXIgOiAnJyxcbiAgICAgIHBvc3RhbENvZGU6IHRoaXMuc2VsZWN0ZWRBZGRyZXNzLnBvc3RhbENvZGUgPyB0aGlzLnNlbGVjdGVkQWRkcmVzcy5wb3N0YWxDb2RlIDogJycsXG4gICAgICBtdW5pY2lwYWxpdHlOYW1lOiB0aGlzLnNlbGVjdGVkQWRkcmVzcy5tdW5pY2lwYWxpdHlOYW1lID8gdGhpcy5zZWxlY3RlZEFkZHJlc3MubXVuaWNpcGFsaXR5TmFtZSA6ICcnLFxuICAgICAgaXNDb21wbGV0ZVN0cmVldE51bWJlcjogaXNDb21wbGV0ZVN0cmVldE51bWJlcixcbiAgICAgIGlzQ29tcGxldGVCb3hOdW1iZXI6IGlzQ29tcGxldGVCb3hOdW1iZXIsXG4gICAgICBzZWxlY3RlZEFkZHJlc3M6IHRoaXMuc2VsZWN0ZWRBZGRyZXNzXG4gICAgICB9KVxuICAgICAgaWYodGhpcy5taW5MZXZlbD09QUREUkVTU0xFVkVMLkxPQ0FMSVRZKXtcbiAgICAgICAgaWYodGhpcy5zZWxlY3RlZEFkZHJlc3Muc3RyZWV0TmFtZSl7XG4gICAgICAgICAgdGhpcy5taW5MZXZlbD1BRERSRVNTTEVWRUwuU1RSRUVUXG4gICAgICAgICAgdGhpcy5zdHJlZXROYW1lQXV0b2ZpbGxEYXRhPXRoaXMuYXV0b2ZpbGxEYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmhvdXNlTnVtYmVyKXtcbiAgICAgICAgICB0aGlzLm1pbkxldmVsPUFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSXG5cbiAgICAgICAgICB0aGlzLnN0cmVldE51bWJlckF1dG9maWxsRGF0YT10aGlzLmF1dG9maWxsRGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZih0aGlzLnNlbGVjdGVkQWRkcmVzcy5ib3hOdW1iZXIpe1xuICAgICAgICAgIHRoaXMubWluTGV2ZWw9QUREUkVTU0xFVkVMLkJPWF9OVU1CRVJcbiAgICAgICAgICB0aGlzLmJveE51bWJlckF1dG9maWxsRGF0YT10aGlzLmF1dG9maWxsRGF0YTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYodGhpcy5taW5MZXZlbD09QUREUkVTU0xFVkVMLlNUUkVFVCl7XG4gICAgICAgIGlmKHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmhvdXNlTnVtYmVyKXtcbiAgICAgICAgICB0aGlzLm1pbkxldmVsPUFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSXG5cbiAgICAgICAgICB0aGlzLnN0cmVldE51bWJlckF1dG9maWxsRGF0YT10aGlzLmF1dG9maWxsRGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZih0aGlzLnNlbGVjdGVkQWRkcmVzcy5ib3hOdW1iZXIpe1xuICAgICAgICAgIHRoaXMubWluTGV2ZWw9QUREUkVTU0xFVkVMLkJPWF9OVU1CRVJcbiAgICAgICAgICB0aGlzLmJveE51bWJlckF1dG9maWxsRGF0YT10aGlzLmF1dG9maWxsRGF0YTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYodGhpcy5taW5MZXZlbD09QUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVIpe1xuICAgICAgICBpZih0aGlzLnNlbGVjdGVkQWRkcmVzcy5ib3hOdW1iZXIpe1xuICAgICAgICAgICB0aGlzLm1pbkxldmVsPUFERFJFU1NMRVZFTC5CT1hfTlVNQkVSXG4gICAgICAgICAgdGhpcy5ib3hOdW1iZXJBdXRvZmlsbERhdGE9dGhpcy5hdXRvZmlsbERhdGE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmKHRoaXMubWluTGV2ZWw9PUFERFJFU1NMRVZFTC5CT1hfTlVNQkVSKXtcbiAgICAgICAgaWYodGhpcy5zZWxlY3RlZEFkZHJlc3MuYm94TnVtYmVyKXtcbiAgICAgICAgICB0aGlzLmJveE51bWJlckF1dG9maWxsRGF0YT10aGlzLmF1dG9maWxsRGF0YTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgfVxuICAgICAgdGhpcy5hZGRyZXNzQ29tcGxldGVFdmVudEVtaXR0ZXIuZW1pdCh0aGlzLnNlbGVjdGVkQWRkcmVzcyk7XG4gICAgICB0aGlzLmVtaXR0ZWRBZGRyZXNzID0gdGhpcy5zZWxlY3RlZEFkZHJlc3M7XG4gICAgICB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eSh0aGlzLmVtaXR0ZWRBZGRyZXNzKTtcblxuICB9XG5cbiAgb25DbGVhcklucHV0RXZlbnRFbWl0dGVyKGV2ZW50KSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnbGliOjpvbkNsZWFySW5wdXRFdmVudEVtaXR0ZXInLCBldmVudCk7IH1cblxuICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgbGV0IG5leHRBZGRyZXNzID0gdGhpcy5zZWxlY3RlZEFkZHJlc3M7IC8vIHRoaXMuZW1pdHRlZEFkZHJlc3M7XG4gICAgaWYgKGV2ZW50ID09PSBJbnB1dE5hbWVUeXBlLkxPQ0FMSVRZKVxuICAgIHtcbiAgICAgIC8vIEJveCBudW1iZXJcbiAgICAgICB0aGlzLmJveE51bWJlciA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlQm94TmIpXG4gICAgICB7XG4gICAgICAgIGlmKHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCE9JycpXG4gICAgICAgIHtcbiAgICAgICAgIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuQk9YX05VTUJFUik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgICB0aGlzLmJveE51bWJlckF1dG9maWxsRGF0YT1udWxsO1xuICAgICAgICAgXG4gICAgICB9XG4gICAgICAvLyBTdHJlZXQgbnVtYmVyXG4gICAgICAgdGhpcy5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iKVxuICAgICAge1xuICAgICAgICBpZih0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQhPScnKVxuICAgICAgICB7XG4gICAgICAgICB0aGlzLm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcihJbnB1dE5hbWVUeXBlLlNUUkVFVF9OVU1CRVIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5vbkNsZWFyU3RyZWV0TnVtYmVySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJBdXRvZmlsbERhdGE9bnVsbDtcbiAgICAgIH1cbiAgICAgIC8vIFN0cmVldCBuYW1lXG4gICAgICAgdGhpcy5zdHJlZXQgPSAnJztcbiAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZVN0cmVldClcbiAgICAgIHtcbiAgICAgICAgaWYodGhpcy5hdXRvY29tcGxldGVTdHJlZXQuc2VhcmNoVGV4dCE9JycpXG4gICAgICAgIHtcbiAgICAgICAgIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuU1RSRUVUKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuc3RyZWV0TmFtZUF1dG9maWxsRGF0YT1udWxsO1xuICAgICAgfVxuICAgICAgLy8gTG9jYWxpdHlcbiAgICAgICB0aGlzLmxvY2FsaXR5ID0gJyc7XG4gICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eSlcbiAgICAgIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgICB0aGlzLmF1dG9maWxsRGF0YT1udWxsO1xuICAgICAgfVxuXG4gICAgICAgbmV4dEFkZHJlc3MgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlIGlmIChldmVudCA9PT0gSW5wdXROYW1lVHlwZS5TVFJFRVQpXG4gICAge1xuICAgICAgLy8gQm94IG51bWJlclxuICAgICAgdGhpcy5ib3hOdW1iZXIgPSAnJztcbiAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZUJveE5iKVxuICAgICAge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuYm94TnVtYmVyQXV0b2ZpbGxEYXRhPW51bGxcbiAgICAgIH1cbiAgICAgIC8vIFN0cmVldCBudW1iZXJcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVTdHJlZXROYilcbiAgICAgIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgICB0aGlzLnN0cmVldE51bWJlckF1dG9maWxsRGF0YT1udWxsO1xuICAgICAgfVxuICAgICAgLy8gU3RyZWV0IG5hbWVcbiAgICAgIHRoaXMuc3RyZWV0ID0gJyc7XG4gICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVTdHJlZXQpXG4gICAgICB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgICB0aGlzLnN0cmVldE5hbWVBdXRvZmlsbERhdGE9bnVsbDtcbiAgICAgIH1cblxuICAgICAgbmV4dEFkZHJlc3MgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlIGlmIChldmVudCA9PT0gSW5wdXROYW1lVHlwZS5TVFJFRVRfTlVNQkVSKVxuICAgIHtcbiAgICAgIC8vIEJveCBudW1iZXJcbiAgICAgIHRoaXMuYm94TnVtYmVyID0gJyc7XG4gICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVCb3hOYilcbiAgICAgIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgICB0aGlzLmJveE51bWJlckF1dG9maWxsRGF0YT1udWxsO1xuICAgICAgfVxuICAgICAgLy8gU3RyZWV0IG51bWJlclxuICAgICAgdGhpcy5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iKVxuICAgICAge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgLy8gdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zdHJlZXROYW1lID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIub25DbGVhclN0cmVldE51bWJlcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyQXV0b2ZpbGxEYXRhPW51bGw7XG4gICAgICB9XG5cbiAgICAgIG5leHRBZGRyZXNzID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZSBpZiAoZXZlbnQgPT09IElucHV0TmFtZVR5cGUuQk9YX05VTUJFUilcbiAgICB7XG4gICAgICAvLyBCb3ggbnVtYmVyXG4gICAgICB0aGlzLmJveE51bWJlciA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlQm94TmIpXG4gICAgICB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAvLyB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYm94TnVtYmVyQXV0b2ZpbGxEYXRhPW51bGxcblxuICAgICAgLy8gQXR0ZW50aW9uOiBpZiBub3QtaW4tbGlzdCBkb24ndCByZXNldCB0aGUgYWRkcmVzcywganVzdCBtb2RpZnkgaXRcbiAgICAgIGNvbnN0IGFkZHJlc3NJc05vdEluTGlzdFxuICAgICAgICA9IG5leHRBZGRyZXNzICE9PSB1bmRlZmluZWQgJiYgIG5leHRBZGRyZXNzICE9PSBudWxsXG4gICAgICAgICAgJiYgbmV4dEFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ25vdC1pbi1saXN0JykgJiYgbmV4dEFkZHJlc3NbJ25vdC1pbi1saXN0J10gPT09IHRydWVcbiAgICAgICAgPyB0cnVlIDogZmFsc2U7XG5cbiAgICAgICAgLypcbiAgICAgIGlmIChhZGRyZXNzSXNOb3RJbkxpc3QpXG4gICAgICB7XG4gICAgICAgIGRlbGV0ZSBuZXh0QWRkcmVzcy5ib3hOdW1iZXI7XG4gICAgICAgIG5leHRBZGRyZXNzLmlzQ29tcGxldGVOb3RpZmljYXRpb25Eb25lID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLnN0cmVldE51bWJlckFkZHJlc3MgIT09IG51bGwgKVxuICAgICAgICB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdyZXNldCBib3ggb24gbm90LWluLWxpc3QnLCB0aGlzLnN0cmVldE51bWJlckFkZHJlc3MpO1xuXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgbmV4dEFkZHJlc3MgPSBudWxsO1xuICAgICAgfVxuICAgICAgKi9cblxuICAgICAgbmV4dEFkZHJlc3MgPSB0aGlzLnN0cmVldE51bWJlckFkZHJlc3MgIT09IG51bGwgPyB0aGlzLnN0cmVldE51bWJlckFkZHJlc3MgOiBudWxsO1xuICAgICAgLypcbiAgICAgIGNvbnN0IGFkZHJlc3NJc05vdEluTGlzdFxuICAgICAgICA9IG5leHRBZGRyZXNzICE9PSBudWxsICYmIG5leHRBZGRyZXNzLmhhc093blByb3BlcnR5KCdub3QtaW4tbGlzdCcpICYmIG5leHRBZGRyZXNzWydub3QtaW4tbGlzdCddID09PSB0cnVlXG4gICAgICAgID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgKi9cbiAgICAgIGNvbnN0IGFkZHJlc3NJc0NvbXBsZXRlXG4gICAgICAgID0gbmV4dEFkZHJlc3MgIT09IHVuZGVmaW5lZCAmJiBuZXh0QWRkcmVzcyAhPT0gbnVsbCAmJiAhbmV4dEFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2JveE51bWJlcicpXG4gICAgICAgICAgJiYgbmV4dEFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSAmJiBuZXh0QWRkcmVzcy5pc0NvbXBsZXRlID09PSB0cnVlID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5hZGRyZXNzSXNDb21wbGV0ZSA9IGFkZHJlc3NJc0NvbXBsZXRlO1xuICAgIH1cblxuICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KGV2ZW50KTtcblxuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xpYjo6b25DbGVhcklucHV0RXZlbnRFbWl0dGVyJyxcbiAgICAgICdlbWl0dGVkIGFkZHJlc3M6JytKU09OLnN0cmluZ2lmeSh0aGlzLmVtaXR0ZWRBZGRyZXNzKSwgJ25leHRBZGRyZXNzOicrSlNPTi5zdHJpbmdpZnkobmV4dEFkZHJlc3MpICk7IH1cblxuICAgIGlmICh0aGlzLmVtaXR0ZWRBZGRyZXNzICE9PSBudWxsICkge1xuICAgICAgaWYobmV4dEFkZHJlc3MgIT09IHVuZGVmaW5lZCAmJiBuZXh0QWRkcmVzcyAhPT0gbnVsbCAmJiBuZXh0QWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnbGF0aXR1ZGUnKSAmJiBuZXh0QWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnbG9uZ2l0dWRlJykpXG4gICAgICB7XG4gICAgICAgIGNvbnN0IGxhdGl0dWRlID0gbmV4dEFkZHJlc3MubGF0aXR1ZGU7XG4gICAgICAgIGNvbnN0IGxvbmdpdHVkZSA9IG5leHRBZGRyZXNzLmxvbmdpdHVkZTtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgY29uc29sZS5sb2coJ2NhbGxpbmcgbmlzOSBzZXJ2aWNlIHRvIGdldCBuaXM5IGRhdGEgKDIpJywgbG9uZ2l0dWRlLCBsYXRpdHVkZSk7XG4gICAgICB9XG4gICAgICBlbHNlXG4gICAgICB7XG4gICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIGNvbnNvbGUubG9nKCdOT1QgY2FsbGluZyBuaXM5IHNlcnZpY2UgdG8gZ2V0IG5pczkgZGF0YSAoMiknKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWRkcmVzc0NvbXBsZXRlRXZlbnRFbWl0dGVyLmVtaXQobmV4dEFkZHJlc3MpO1xuICAgICAgdGhpcy5lbWl0dGVkQWRkcmVzcyA9IG5leHRBZGRyZXNzO1xuICAgIH1cblxuXG4gICAgLy8gZ2thXG4gICAgLypcbiAgICBpZiAoZXZlbnQgPT09IElucHV0TmFtZVR5cGUuTE9DQUxJVFkpXG4gICAge1xuICAgICAgdGhpcy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5MT0NBTElUWTtcbiAgICAgIHRoaXMuYm94TnVtYmVyUHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5zdHJlZXROdW1iZXJQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICB0aGlzLnN0cmVldFByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgIHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICAvLyB0aGlzLmNsZWFySW5wdXQoZm9jdXM6IHtzZXRGb2N1czogYm9vbGVhbiwgdGltZXN0YW1wOiBEYXRlfSk7XG4gICAgICB0aGlzLmxvY2FsaXR5ID0gJyc7XG4gICAgICB0aGlzLnBvc3RhbENvZGUgPSAnJztcbiAgICAgIHRoaXMuc3RyZWV0ID0gbnVsbDtcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gbnVsbDtcbiAgICAgIHRoaXMuYm94TnVtYmVyID0gbnVsbDtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROYW1lID0gJyc7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zdHJlZXROYW1lID0gJyc7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5sb2NhbGl0eSA9ICcnO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgfVxuICAgIGlmIChldmVudCA9PT0gSW5wdXROYW1lVHlwZS5TVFJFRVQpXG4gICAge1xuICAgICAgdGhpcy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5TVFJFRVQ7XG4gICAgICB0aGlzLmJveE51bWJlclByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyUHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5zdHJlZXRQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICAvLyB0aGlzLmNsZWFySW5wdXQoZm9jdXM6IHtzZXRGb2N1czogYm9vbGVhbiwgdGltZXN0YW1wOiBEYXRlfSk7XG4gICAgICB0aGlzLnN0cmVldCA9IG51bGw7XG4gICAgICB0aGlzLnN0cmVldE51bWJlciA9IG51bGw7XG4gICAgICB0aGlzLmJveE51bWJlciA9IG51bGw7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5vbkNsZWFyU3RyZWV0TnVtYmVySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgLy8gdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgfVxuICAgIGlmIChldmVudCA9PT0gSW5wdXROYW1lVHlwZS5TVFJFRVRfTlVNQkVSKVxuICAgIHtcbiAgICAgIHRoaXMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuU1RSRUVUX05VTUJFUjtcbiAgICAgIHRoaXMuYm94TnVtYmVyUHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5zdHJlZXROdW1iZXJQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICAvLyB0aGlzLmNsZWFySW5wdXQoZm9jdXM6IHtzZXRGb2N1czogYm9vbGVhbiwgdGltZXN0YW1wOiBEYXRlfSk7XG4gICAgICB0aGlzLnN0cmVldE51bWJlciA9IG51bGw7XG4gICAgICB0aGlzLmJveE51bWJlciA9IG51bGw7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5vbkNsZWFyU3RyZWV0TnVtYmVySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIC8vIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIC8vIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgIH1cbiAgICBpZiAoZXZlbnQgPT09IElucHV0TmFtZVR5cGUuQk9YX05VTUJFUilcbiAgICB7XG4gICAgICB0aGlzLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLkJPWF9OVU1CRVI7XG4gICAgICB0aGlzLmJveE51bWJlclByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgIHRoaXMuYm94TnVtYmVyID0gbnVsbDtcbiAgICAgIC8vIHRoaXMuY2xlYXJJbnB1dChmb2N1czoge3NldEZvY3VzOiBib29sZWFuLCB0aW1lc3RhbXA6IERhdGV9KTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgLy8gdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5vbkNsZWFyU3RyZWV0TnVtYmVySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIC8vIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIC8vIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgIH1cbiAgICAqL1xuICB9XG5cbiAgcmVzZXRMb2NhbGl0eShldmVudCkgeyBcbiAgICB0aGlzLnBvc3RhbENvZGUgPSAnJztcbiAgICB0aGlzLmxvY2FsaXR5ID0gJyc7XG4gICAgY29uc3Qgc3RyZWV0ID0gdGhpcy5zZWxlY3RlZEFkZHJlc3M/Lmhhc093blByb3BlcnR5KCdzdHJlZXROYW1lJyk7XG4gICAgY29uc3QgaG91c2UgPSB0aGlzLnNlbGVjdGVkQWRkcmVzcz8uaGFzT3duUHJvcGVydHkoJ2hvdXNlTnVtYmVyJyk7XG4gICAgY29uc3QgYm94ID0gdGhpcy5zZWxlY3RlZEFkZHJlc3M/Lmhhc093blByb3BlcnR5KCdib3hOdW1iZXInKTtcbiAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgIGlmKGV2ZW50KVxuICAgIHsgXG4gICAgaWYoc3RyZWV0ID09IHRydWUgfHwgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuc2VhcmNoVGV4dC5sZW5ndGg+MClcbiAgICAgIHtcbiAgICAgICAgdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoSW5wdXROYW1lVHlwZS5TVFJFRVQpOyAgICAgICAgIFxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICB9XG4gICAgaWYoaG91c2UgPT0gdHJ1ZSB8fCB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQubGVuZ3RoPjApXG4gICAgICB7XG4gICAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KElucHV0TmFtZVR5cGUuU1RSRUVUX05VTUJFUik7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSAnJzsgICAgICBcbiAgICAgIH1cbiAgICBpZihib3ggPT0gdHJ1ZSB8fCB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQubGVuZ3RoPjApXG4gICAgICB7XG4gICAgICAgIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuQk9YX05VTUJFUik7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgfVxuICAgIH1cbiAgICBpZighZXZlbnQpXG4gICAgeyBcbiAgICAgaWYoc3RyZWV0ID09IHRydWUgfHwgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuc2VhcmNoVGV4dC5sZW5ndGg+MClcbiAgICAgIHtcbiAgICAgICAgdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoSW5wdXROYW1lVHlwZS5TVFJFRVQpOyAgICAgICAgIFxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICB9XG4gICAgaWYoaG91c2UgPT0gdHJ1ZSB8fCB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQubGVuZ3RoPjApXG4gICAgICB7XG4gICAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KElucHV0TmFtZVR5cGUuU1RSRUVUX05VTUJFUik7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSAnJzsgICAgICAgICBcbiAgICAgIH1cbiAgICBpZihib3ggPT0gdHJ1ZSB8fCB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQubGVuZ3RoPjApXG4gICAgICB7XG4gICAgICAgIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuQk9YX05VTUJFUik7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNldEFkZHJlc3MobnVsbCwgNCk7XG4gIH1cblxuICByZXNldFN0cmVldChldmVudCkge1xuICAgIHRoaXMuc3RyZWV0ID0gJyc7XG4gICAgY29uc3QgaG91c2UgPSB0aGlzLnNlbGVjdGVkQWRkcmVzcz8uaGFzT3duUHJvcGVydHkoJ2hvdXNlTnVtYmVyJyk7XG4gICAgY29uc3QgYm94ID0gdGhpcy5zZWxlY3RlZEFkZHJlc3M/Lmhhc093blByb3BlcnR5KCdib3hOdW1iZXInKTtcbiAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgIGlmKGV2ZW50KVxuICAgICAge1xuICAgICAgICBpZihob3VzZSA9PSB0cnVlIHx8IHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dC5sZW5ndGg+MClcbiAgICAgICAge1xuICAgICAgICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdChJbnB1dE5hbWVUeXBlLlNUUkVFVF9OVU1CRVIpO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7ICAgICAgICAgXG4gICAgICAgIH1cbiAgICAgICAgaWYoYm94ID09IHRydWUgfHwgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0Lmxlbmd0aD4wKVxuICAgICAgICB7XG4gICAgICAgIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuQk9YX05VTUJFUik7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnOyBcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJzsgICAgICAgICAgICAgICAgXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBpZighZXZlbnQpXG4gICAgICB7XG4gICAgICAgICBpZihob3VzZSA9PSB0cnVlIHx8IHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dC5sZW5ndGg+MClcbiAgICAgICAge1xuICAgICAgICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdChJbnB1dE5hbWVUeXBlLlNUUkVFVF9OVU1CRVIpO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7ICAgICAgICAgXG4gICAgICAgIH1cbiAgICAgICAgaWYoYm94ID09IHRydWUgfHwgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0Lmxlbmd0aD4wKVxuICAgICAgICB7XG4gICAgICAgIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuQk9YX05VTUJFUik7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnOyAgICAgICAgXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLmFkZHJlc3NJc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zdHJlZXROYW1lID0gJyc7XG4gICAgdGhpcy5zZXRBZGRyZXNzKG51bGwsIDMpO1xuICB9XG5cbiAgcmVzZXRTdHJlZXROdW1iZXIoZXZlbnQsIHJlc2V0QWRkcmVzczogYm9vbGVhbiA9IGZhbHNlKSB7XG4gIC8vICBjb25zb2xlLmxvZygncmVzZXQgc3RyZWV0IG51bW5lciEnLCBldmVudCk7XG4gIGNvbnN0IGJveCA9IHRoaXMuc2VsZWN0ZWRBZGRyZXNzPy5oYXNPd25Qcm9wZXJ0eSgnYm94TnVtYmVyJyk7XG4gICAgdGhpcy5zdHJlZXROdW1iZXIgPSAnJztcbiAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgIGlmKGV2ZW50ICYmIChib3ggPT0gdHJ1ZSB8fCB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQubGVuZ3RoPjApKVxuICAgICAge1xuICAgICAgICB0aGlzLm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcihJbnB1dE5hbWVUeXBlLkJPWF9OVU1CRVIpO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJzsgICAgICAgICBcbiAgICAgIH1cbiAgICBpZighZXZlbnQgJiYgKGJveCA9PSB0cnVlIHx8IHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dC5sZW5ndGg+MCkpXG4gICAgICB7XG4gICAgICAgIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuQk9YX05VTUJFUik7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dD0nJzsgICAgICAgICBcbiAgICAgIH1cbiAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmFkZHJlc3NJc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICB0aGlzLnNldEFkZHJlc3MobnVsbCwgMik7XG4gICAgLy8gJCQgNyB0aGlzLnNldEFkZHJlc3MobnVsbCwgMik7IC8vICQkID8/Pz8/XG4gICAgLypcbiAgICBpZiAocmVzZXRBZGRyZXNzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnNldEFkZHJlc3MoLyAqbnVsbCogLyB0aGlzLnNlbGVjdGVkQWRkcmVzcyk7XG4gICAgfSovXG4gIH1cblxuICByZXNldEJveE51bWJlcihldmVudCwgcmVzZXRBZGRyZXNzOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdyZXNldCBzdHJlZXQgbnVtbmVyIScsIGV2ZW50LCByZXNldEFkZHJlc3MpO1xuICAgIHRoaXMuYm94TnVtYmVyID0gJyc7XG4gICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICAvLyB0aGlzLm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcihJbnB1dE5hbWVUeXBlLkJPWF9OVU1CRVIpO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuYWRkcmVzc0lzQ29tcGxldGUgPSBmYWxzZTtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmJveE51bWJlciA9ICcnXG4gICAgdGhpcy5zZXRBZGRyZXNzKG51bGwsIDEpO1xuICAgIC8vIGlmKCFldmVudCl7XG4gICAgLy8gICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgnQ0xFQVJfQk9YX05VTUJFUicpXG4gICAgLy8gfVxuICAgXG4gICAgLy8gJCQgNyB0aGlzLnNldEFkZHJlc3MobnVsbCwgMSk7IC8vICQkID8/Pz8/XG4gICAgLypcbiAgICBpZiAocmVzZXRBZGRyZXNzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnNldEFkZHJlc3MoLyAqbnVsbCogLyB0aGlzLnNlbGVjdGVkQWRkcmVzcyk7XG4gICAgfSovXG4gIH1cblxuICBlbnRlclByZWZpbGxNb2RlKCkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtjb25zb2xlLmxvZygnbGliOjplbnRlclByZWZpbGxNb2RlKCknKTsgfVxuICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZUJveE5iICYmIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIgJiYgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQgJiYgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eSApXG4gICAge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5wcmVmaWxsaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIucHJlZmlsbGluZyA9IHRydWU7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5wcmVmaWxsaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkucHJlZmlsbGluZyA9IHRydWU7XG5cbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmxvY2FsaXR5ID0gJyc7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICB0aGlzLmF1dG9maWxsRGF0YT1udWxsO1xuICAgICAgdGhpcy5zdHJlZXROYW1lQXV0b2ZpbGxEYXRhPW51bGw7XG4gICAgICB0aGlzLnN0cmVldE51bWJlckF1dG9maWxsRGF0YT1udWxsO1xuICAgICAgdGhpcy5ib3hOdW1iZXJBdXRvZmlsbERhdGE9bnVsbDtcbiAgICB9XG5cbiAgfVxuXG4gIHF1aXRQcmVmaWxsTW9kZSgpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7Y29uc29sZS5sb2coJ2xpYjo6cXVpdFByZWZpbGxNb2RlKCknKTsgfVxuICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZUJveE5iICYmIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIgJiYgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQgJiYgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eSApXG4gICAge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5wcmVmaWxsaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnByZWZpbGxpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LnByZWZpbGxpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkucHJlZmlsbGluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMucHJvY2Vzc2luZ1ByZWZpbGxEYXRhID0gZmFsc2U7XG4gIH1cblxuICBzZXRBZGRyZXNzKGFkZHJlc3M6IGFueSwgbGV2ZWw/OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7Y29uc29sZS5sb2coJ2xpYjo6c2V0QWRkcmVzcyAtIGFkZHJlc3MgcGFydCwgbGV2ZWwnLCBhZGRyZXNzLCBsZXZlbCk7IH1cblxuICAgIC8qICQkICQkXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRBZGRyZXNzICYmICFhZGRyZXNzKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZygncmVzZXQgYWRkcmVzcyEnKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzID0gbnVsbDtcbiAgICAgIHRoaXMuc3RyZWV0QWRkcmVzcyA9IG51bGw7XG4gICAgICB0aGlzLnN0cmVldE51bWJlckFkZHJlc3MgPSBudWxsO1xuICAgICAgdGhpcy5ub3RpZnlBZGRyZXNzQ29tcGxldGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKi9cbiAgICBpZiAoYWRkcmVzcyA9PT0gbnVsbCB8fCBhZGRyZXNzID09PSB1bmRlZmluZWQgKVxuICAgIHtcbiAgICAgIGNvbnN0IGRvTm90aWZ5ID0gKHRoaXMuc2VsZWN0ZWRBZGRyZXNzICE9PSBudWxsICYmIHRoaXMuc2VsZWN0ZWRBZGRyZXNzICE9PSB1bmRlZmluZWQpID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MgPSBudWxsO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5hZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5hZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgaWYgKGRvTm90aWZ5KSB7XG4gICAgICAgIHRoaXMubm90aWZ5QWRkcmVzc0NvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFkZHJlc3MpIHtcbiAgICAgIGRlbGV0ZSBhZGRyZXNzLm1lc3NhZ2VzO1xuICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZUFkZHJlc3MoKTtcbiAgICAgIHRoaXMucG9zdGFsQ29kZSA9IGFkZHJlc3MucG9zdGFsQ29kZSA/IGFkZHJlc3MucG9zdGFsQ29kZSA6ICcnO1xuICAgICAgdGhpcy5sb2NhbGl0eSA9IGFkZHJlc3MubG9jYWxpdHlOYW1lID8gYWRkcmVzcy5sb2NhbGl0eU5hbWUgOiAnJztcbiAgICAgIHRoaXMuc3RyZWV0ID0gYWRkcmVzcy5zdHJlZXROYW1lID8gYWRkcmVzcy5zdHJlZXROYW1lIDogJyc7XG4gICAgICAvLyBjb25zdCBub3RJbkxpc3QgPSBhZGRyZXNzWydub3QtaW4tbGlzdCddO1xuICAgICAgLy8gY29uc3QgaXNOb3RJbkxpc3QgPSBub3RJbkxpc3QgIT09IG51bGwgJiYgbm90SW5MaXN0ICE9PSB1bmRlZmluZWQgJiYgbm90SW5MaXN0ID09PSB0cnVlO1xuICAgICAgLypcbiAgICAgIGlmIChhZGRyZXNzLmhvdXNlTnVtYmVyKSB7XG4gICAgICAgIGlmICghYWRkcmVzcy5pc0NvbXBsZXRlIHx8IGlzTm90SW5MaXN0KSB7XG4gICAgICAgICAgdGhpcy5zdHJlZXROdW1iZXIgPSBhZGRyZXNzLmhvdXNlTnVtYmVyID8gYWRkcmVzcy5ob3VzZU51bWJlciA6ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghYWRkcmVzcy5ib3hOdW1iZXIpIHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nIHJlc2V0IHN0cmVldCBudW1iZXIgIScpO1xuICAgICAgICAgICAgaWYgKCAhdGhpcy5wcm9jZXNzaW5nUHJlZmlsbERhdGEgKSB7XG4gICAgICAgICAgICAgIHRoaXMucmVzZXRTdHJlZXROdW1iZXIobnVsbCwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGhpcy5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICovXG5cbiAgICAgIGNvbnN0IGFkZHJlc3NJc0NvbXBsZXRlID0gYWRkcmVzcyAhPT0gbnVsbCAmJiBhZGRyZXNzICE9PSB1bmRlZmluZWRcbiAgICAgICAgJiYgYWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnaXNDb21wbGV0ZScpICYmIGFkZHJlc3MuaXNDb21wbGV0ZSA9PT0gdHJ1ZSA/IHRydWUgOiBmYWxzZTtcbiAgICAgIGNvbnN0IGFkZHJlc3NJc05vdEluTGlzdCA9IGFkZHJlc3MgIT09IG51bGwgJiYgYWRkcmVzcyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICYmIGFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ25vdC1pbi1saXN0JykgJiYgYWRkcmVzc1snbm90LWluLWxpc3QnXSA9PT0gdHJ1ZSA/IHRydWUgOiBmYWxzZTtcblxuICAgICAgc3dpdGNoIChsZXZlbCkge1xuXG4gICAgICAgIC8vIExvY2FsaXR5IC8gTXVuaWNpcGFsaXR5IGFuZCBQT3N0YWxDb2RlXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShhZGRyZXNzKTtcbiAgICAgICAgICAvKlxuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFyV2lkZ2V0KCk7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5jbGVhcldpZGdldCgpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICAqL1xuICAgICAgICAgIHRoaXMuc3RyZWV0QWRkcmVzcyA9IG51bGw7XG4gICAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzID0gbnVsbDtcbiAgICAgICAgICAvL1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIFN0cmVldCBOYW1lXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShhZGRyZXNzKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0cmVldE5hbWUoYWRkcmVzcyk7XG4gICAgICAgICAgdGhpcy5zdHJlZXRBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgICAgICB0aGlzLnN0cmVldE51bWJlckFkZHJlc3MgPSBudWxsO1xuICAgICAgICAgIC8qXG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5jbGVhcldpZGdldCgpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICAqL1xuICAgICAgICAgIC8vIEd1YXJkOiBvbmx5IGNsZWFyIHdoZW4gc3RyZWV0LW51bWJlciBpcyBub3QgYWxyZWFkeSB2YWxpZGF0ZWQuXG4gICAgICAgICAgLy8gcmVzZXRTdHJlZXQoKSBhbHdheXMgc2V0cyBhZGRyZXNzSXNDb21wbGV0ZT1mYWxzZSBiZWZvcmUgY2FsbGluZyBzZXRBZGRyZXNzKG51bGwsMyksXG4gICAgICAgICAgLy8gc28gdXNlci1pbml0aWF0ZWQgc3RyZWV0IGNoYW5nZXMgYXJlIHVuYWZmZWN0ZWQuIFdpdGhvdXQgdGhpcyBndWFyZCB0aGUgcG9zdC1wcmVmaWxsXG4gICAgICAgICAgLy8gYXV0b2ZpbGwgQ0QgY3ljbGUgY2xlYXJzIHNlYXJjaFRleHQgY2F1c2luZyBhIGlucHV0VGV4dCBtaXNtYXRjaCAtPiBjbGVhcldpZGdldCgpLlxuICAgICAgICAgIGlmICghdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5hZGRyZXNzSXNDb21wbGV0ZSkge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIFNUUkVFVCBOdW1iZXJcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KGFkZHJlc3MpO1xuICAgICAgICAgIHRoaXMudXBkYXRlU3RyZWV0TmFtZShhZGRyZXNzKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0cmVldE51bWJlcihhZGRyZXNzKTsgLy8gJCRcbiAgICAgICAgICB0aGlzLnN0cmVldEFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICAgICAgaWYgKGFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSAmJiBhZGRyZXNzLmlzQ29tcGxldGUgPT09IHRydWUgJiYgIWFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2JveE51bWJlcicpKVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuYWRkcmVzc0lzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGFkZHJlc3NJc05vdEluTGlzdClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSBhZGRyZXNzLmhvdXNlTnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSBhZGRyZXNzLmhvdXNlTnVtYmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvKlxuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICAqL1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEJPWCBOdW1iZXJcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChhZGRyZXNzSXNOb3RJbkxpc3QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuYWRkcmVzc0lzQ29tcGxldGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKCB0aGlzLnNlbGVjdGVkQWRkcmVzcyAmJiB0aGlzLnNlbGVjdGVkQWRkcmVzcy5pc0NvbXBsZXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MuaXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvKlxuICAgICAgaWYgKGFkZHJlc3MuaXNDb21wbGV0ZSA9PT0gdHJ1ZSApIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQWRkcmVzcy5pc0NvbXBsZXRlTm90aWZpY2F0aW9uRG9uZSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmlzQ29tcGxldGVOb3RpZmljYXRpb25Eb25lID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLm5vdGlmeUFkZHJlc3NDb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm5vdGlmeUFkZHJlc3NDb21wbGV0ZSgpO1xuICAgICAgfVxuICAgICAgKi9cblxuICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MuaXNDb21wbGV0ZU5vdGlmaWNhdGlvbkRvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5ub3RpZnlBZGRyZXNzQ29tcGxldGUoKTtcbiAgICB9XG4gICAgaWYgKGFkZHJlc3MgJiYgbGV2ZWwpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGxldmVsKSB7XG4gICAgICAgICAgY2FzZSA0OiAvLyBMb2NhbGl0eSBmaWxsZWQgLT4gZm9jdXMgc3RyZWV0XG4gICAgICAgICAgICBpZiAoYWRkcmVzcy5zdHJlZXROYW1lICYmIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0ICYmIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LnN0cmVldFNlYXJjaElucHV0KSB7XG4gICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LnN0cmVldFNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzogLy8gU3RyZWV0IGZpbGxlZCAtPiBmb2N1cyBzdHJlZXQgbnVtYmVyXG4gICAgICAgICAgICBpZiAoYWRkcmVzcy5ob3VzZU51bWJlciAmJiB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iICYmIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TnVtYmVyU2VhcmNoSW5wdXQpIHtcbiAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zdHJlZXROdW1iZXJTZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6IC8vIFN0cmVldCBudW1iZXIgZmlsbGVkIC0+IGZvY3VzIGJveCBudW1iZXJcbiAgICAgICAgICAgIGlmICgoYWRkcmVzcy5ib3hOdW1iZXJ8fHRoaXMuc3RyZWV0TnVtYmVyQXV0b2ZpbGxEYXRhKSAmJiB0aGlzLmF1dG9jb21wbGV0ZUJveE5iICYmIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuYm94TnVtYmVyU2VhcmNoSW5wdXQpIHtcbiAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5ib3hOdW1iZXJTZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgc2V0QWRkcmVzc1N0cmVldE51bWJlcihzdHJlZXROdW1iZXI6IHN0cmluZykge1xuXG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSlcbiAgICB7XG4gICAgICBjb25zb2xlLmxvZygnbGliOjpzZXRBZGRyZXNzU3RyZWV0TnVtYmVyIC0gc3RyZWV0bnVtYmVyOiAnLCBzdHJlZXROdW1iZXIpO1xuICAgICAgY29uc29sZS5sb2coJ2xpYjo6c2V0QWRkcmVzc1N0cmVldE51bWJlciAtIHN0cmVldEFkZHJlc3M6ICcsIHRoaXMuc3RyZWV0QWRkcmVzcyk7XG4gICAgfVxuXG4gICAgaWYodGhpcy5zdWdnZXN0aW9uTGV2ZWw9PT1TdWdnZXN0aW9uTGV2ZWxUeXBlLk5vbmUgJiYgdGhpcy5zdHJlZXRBZGRyZXNzLnN0cmVldE51bWJlciE9PXN0cmVldE51bWJlcil7XG4gICAgICBcbiAgICAgICAgY29uc3QgY29tYmluZWQgPSB7Li4udGhpcy5zdHJlZXRBZGRyZXNzfTtcbiAgICAgICAgICBkZWxldGUgY29tYmluZWQucGRwSWQ7IFxuICAgICAgICAgIGRlbGV0ZSBjb21iaW5lZC5tYWlsQm94aWQ7ICAvLyBtaXhlZC1jYXNlIHZhcmlhbnRcbiAgICAgICAgICBkZWxldGUgY29tYmluZWQubWFpbEJveElkOyAgLy8gY2FtZWxDYXNlIHZhcmlhbnQgKGludGVybmFsIEFQSSBmaWVsZCBuYW1lKVxuICAgICAgICAgIGRlbGV0ZSBjb21iaW5lZC5zdWZmaXhJZDtcbiAgICAgICAgICBkZWxldGUgY29tYmluZWQuaXNDb21wbGV0ZTtcbiAgICAgICAgICBcbiAgICAgICAgICBkZWxldGUgY29tYmluZWQubGF0aXR1ZGU7XG4gICAgICAgICAgZGVsZXRlIGNvbWJpbmVkLmxvbmdpdHVkZTtcbiAgICAgICAgICBkZWxldGUgY29tYmluZWQucGVyc3BlY3RpdmVDb2RlO1xuICAgICAgICAgIGRlbGV0ZSBjb21iaW5lZC5jb29yZGluYXRlU3lzdGVtO1xuICAgICAgICAgIGRlbGV0ZSBjb21iaW5lZC5yZWxpYWJpbGl0eTtcbiAgICAgICAgICBkZWxldGUgY29tYmluZWQuYnVzaW5lc3NOYW1lO1xuICAgICAgICAgIGRlbGV0ZSBjb21iaW5lZC5saXN0T2ZCb3hlcztcbiAgICAgICAgICBkZWxldGUgY29tYmluZWQubmlzOTtcbiAgICAgICAgaWYoY29tYmluZWQuZ2VvU2FuY3Rpb24pe1xuICAgICAgICAgICAgY29tYmluZWQuZ2VvU2FuY3Rpb249Y29tYmluZWQuZ2VvU2FuY3Rpb24uc3Vic3RyaW5nKDAsMjUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnN0cmVldE51bWJlckFkZHJlc3MgPSBjb21iaW5lZDtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcyA9IGNvbWJpbmVkO1xuICAgIH1lbHNle1xuICAgICAgdGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzID0gdGhpcy5zdHJlZXRBZGRyZXNzO1xuICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MgPSB0aGlzLnN0cmVldEFkZHJlc3M7XG4gICAgICB9ICAgXG4gICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MuaG91c2VOdW1iZXIgPSBzdHJlZXROdW1iZXI7XG4gICAgdGhpcy5zZWxlY3RlZEFkZHJlc3Muc3RyZWV0TnVtYmVyID0gc3RyZWV0TnVtYmVyO1xuICAgIC8qXG4gICAgdGhpcy5zdHJlZXROdW1iZXIgPSBzdHJlZXROdW1iZXI7XG4gICAgKi9cbiAgICAvL3RoaXMubm90aWZ5QWRkcmVzc0NvbXBsZXRlKCk7XG4gICAgXG4gICAgdGhpcy5zdHJlZXROdW1iZXIgPSBzdHJlZXROdW1iZXI7XG4gICAgdGhpcy5ib3hOdW1iZXI9Jyc7XG4gICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MuYm94TnVtYmVyPScnO1xuICAgIHRoaXMuYWRkcmVzc0NvbXBsZXRlRXZlbnRFbWl0dGVyLmVtaXQodGhpcy5zZWxlY3RlZEFkZHJlc3MpO1xuICAgIHRoaXMuZW1pdHRlZEFkZHJlc3MgPSB0aGlzLnNlbGVjdGVkQWRkcmVzcztcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKVxuICAgIHtcbiAgICAgIGNvbnNvbGUubG9nKCdzZXQgc3RyZWV0IG51bWJlciB2YWx1ZTonLCBzdHJlZXROdW1iZXIsXG4gICAgICAgICd0aGlzLnN0cmVldE51bWJlcjonK3RoaXMuc3RyZWV0TnVtYmVyLFxuICAgICAgICAndGhpcy5taW5MZXZlbDonK3RoaXMubWluTGV2ZWwpO1xuICAgIH1cbiAgfVxuXG4gIHNldEFkZHJlc3NCb3hOdW1iZXIoYm94TnVtYmVyOiBzdHJpbmcpIHtcbiAgICBjb25zb2xlLmxvZygnc2V0IGJveCBudW1iZXIgdmFsdWU6JywgYm94TnVtYmVyKTtcbiAgICAvL3RoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyA9IHRoaXMuc3RyZWV0QWRkcmVzcztcbiAgICBpZigodGhpcy5zdWdnZXN0aW9uTGV2ZWw9PT1TdWdnZXN0aW9uTGV2ZWxUeXBlLk5vbmUgfHwgdGhpcy5zdWdnZXN0aW9uTGV2ZWw9PT1TdWdnZXN0aW9uTGV2ZWxUeXBlLlN0cmVldE51bWJlcikgJiYgdGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzLmJveE51bWJlciE9PWJveE51bWJlcil7XG4gICAgICBjb25zdCBjb21iaW5lZCA9IHsuLi50aGlzLnN0cmVldE51bWJlckFkZHJlc3N9O1xuICAgICAgICAgIGRlbGV0ZSBjb21iaW5lZC5tYWlsQm94aWQ7ICAvLyBtaXhlZC1jYXNlIHZhcmlhbnRcbiAgICAgICAgICBkZWxldGUgY29tYmluZWQubWFpbEJveElkOyAgLy8gY2FtZWxDYXNlIHZhcmlhbnQgKGludGVybmFsIEFQSSBmaWVsZCBuYW1lKVxuICAgICAgICAgIGRlbGV0ZSBjb21iaW5lZC5zdWZmaXhJZDtcbiAgICAgICAgICBkZWxldGUgY29tYmluZWQuaXNDb21wbGV0ZTtcbiAgICAgICAgICBkZWxldGUgY29tYmluZWQuYnVzaW5lc3NOYW1lO1xuICAgICAgICAgIGRlbGV0ZSBjb21iaW5lZC5saXN0T2ZCb3hlcztcbiAgICAgICAgaWYoY29tYmluZWQuZ2VvU2FuY3Rpb24pe1xuICAgICAgICAgICAgY29tYmluZWQuZ2VvU2FuY3Rpb249Y29tYmluZWQuZ2VvU2FuY3Rpb24uc3Vic3RyaW5nKDAsMzUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcyA9IGNvbWJpbmVkO1xuICAgICAgfVxuICBcbiAgICBlbHNle1xuICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MgPSB0aGlzLnN0cmVldE51bWJlckFkZHJlc3M7XG4gICAgfVxuICAgIFxuICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmJveE51bWJlciA9IGJveE51bWJlcjtcbiAgICB0aGlzLmJveE51bWJlciA9IGJveE51bWJlcjtcbiAgICB0aGlzLm5vdGlmeUFkZHJlc3NDb21wbGV0ZSgpO1xuICB9XG5cbiAgc2V0TGFuZ3VhZ2UobGFuZzogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWxlY3RlZExhbmd1YWdlID0gbGFuZztcbiAgfVxuXG4gIHNldFZhbGlkYXRpb25NZXNzYWdlKC8qbWVzc2FnZTogc3RyaW5nKi9tZXNzYWdlOiB7bWVzc2FnZVR5cGU6IFZhbGlkYXRpb25NZXNzYWdlVHlwZSwgdHJhbnNsYXRlZE1lc3NhZ2U6IHN0cmluZ30pIHtcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gbWVzc2FnZTtcbiAgICBpZiAodGhpcy52YWxpZGF0aW9uTWVzc2FnZU9wdGlvblR5cGUgPT09IFZhbGlkYXRpb25NZXNzYWdlT3B0aW9uVHlwZS5FTUlUKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlRXZlbnRFbWl0dGVyLmVtaXQobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgc2V0TnVtYmVyT2ZFeGNlcHRpb25zKGV2ZW50KXtcbiAgICB0aGlzLm51bWJlck9mRXhjZXB0aW9ucz1ldmVudDtcbiAgICBpZih0aGlzLm51bWJlck9mRXhjZXB0aW9ucz49Myl7XG4gICAgICB0aGlzLm51bWJlck9mRXhjZXB0aW9uc0V2ZW50RW1pdHRlci5lbWl0KHRoaXMubnVtYmVyT2ZFeGNlcHRpb25zKTtcbiAgICAgIHRoaXMuc2V0VmFsaWRhdGVkQnlCYWNrZW5kKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIHNldFZhbGlkYXRlZEJ5QmFja2VuZChldmVudCl7XG4gICAgdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmQ9ZXZlbnQ7XG4gICAgdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmRFdmVudEVtaXR0ZXIuZW1pdCh0aGlzLnZhbGlkYXRlZEJ5QmFja2VuZCk7XG4gIH1cblxuICB1cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoYWRkcmVzcykge1xuICAgIGlmIChhZGRyZXNzICYmIGFkZHJlc3MucG9zdGFsQ29kZSAmJiBhZGRyZXNzLmxvY2FsaXR5TmFtZSkge1xuICAgICAgdGhpcy5wb3N0YWxDb2RlTG9jYWxpdHkgPSAgYWRkcmVzcy5wb3N0YWxDb2RlICArICcgJyArIGFkZHJlc3MubG9jYWxpdHlOYW1lO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5zZWFyY2hUZXh0ID0gdGhpcy5wb3N0YWxDb2RlTG9jYWxpdHk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlU3RyZWV0TmFtZShhZGRyZXNzKSB7XG4gICAgaWYgKGFkZHJlc3MgJiYgYWRkcmVzcy5zdHJlZXROYW1lKSB7XG4gICAgICB0aGlzLnN0cmVldE5hbWVJbnB1dCA9IGFkZHJlc3Muc3RyZWV0TmFtZTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVTdHJlZXROdW1iZXIoYWRkcmVzcykge1xuICAgIGlmIChhZGRyZXNzICYmIGFkZHJlc3MuaG91c2VOdW1iZXIpIHtcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVySW5wdXQgPSBhZGRyZXNzLmhvdXNlTnVtYmVyO1xuICAgIH1cbiAgfVxudXBkYXRlYm94TnVtYmVyKGFkZHJlc3MpIHtcbiAgICBpZiAoYWRkcmVzcyAmJiBhZGRyZXNzLmJveE51bWJlcikge1xuICAgICAgdGhpcy5ib3hOdW1iZXIgPSBhZGRyZXNzLmJveE51bWJlcjtcbiAgICB9XG4gIH1cbiAgdXBkYXRlQ29tcGxldGVBZGRyZXNzKCkge1xuICAgIGxldCBjb25jYXRTdHIgPSAnJztcbiAgICBjb25jYXRTdHIgKz0gdGhpcy5zZWxlY3RlZEFkZHJlc3Muc3RyZWV0TmFtZSA/IGAke3RoaXMuc2VsZWN0ZWRBZGRyZXNzLnN0cmVldE5hbWV9IGAgOiAnJztcbiAgICBjb25jYXRTdHIgKz0gdGhpcy5zZWxlY3RlZEFkZHJlc3MuaG91c2VOdW1iZXIgPyBgJHt0aGlzLnNlbGVjdGVkQWRkcmVzcy5ob3VzZU51bWJlcn0gYCA6ICcnO1xuICAgIGNvbmNhdFN0ciArPSB0aGlzLnNlbGVjdGVkQWRkcmVzcy5ib3hOdW1iZXIgPyBgJHt0aGlzLmdldEJveFByZWZpeCgpfSAke3RoaXMuc2VsZWN0ZWRBZGRyZXNzLmJveE51bWJlcn0gYCA6ICcnO1xuICAgIGNvbmNhdFN0ciArPSB0aGlzLnNlbGVjdGVkQWRkcmVzcy5wb3N0YWxDb2RlID8gYCR7dGhpcy5zZWxlY3RlZEFkZHJlc3MucG9zdGFsQ29kZX0gYCA6ICcnO1xuICAgIGNvbmNhdFN0ciArPSB0aGlzLnNlbGVjdGVkQWRkcmVzcy5tdW5pY2lwYWxpdHlOYW1lID8gYCR7dGhpcy5zZWxlY3RlZEFkZHJlc3MubXVuaWNpcGFsaXR5TmFtZX0gYCA6ICcnO1xuICAgIHRoaXMuY29tcGxldGVBZGRyZXNzID0gY29uY2F0U3RyO1xuICB9XG5cbiAgc2V0VmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25Gcm9tSW5wdXQob3B0aW9uOiB7dmFsaWRhdGlvblR5cGU6IFZhbGlkYXRpb25NZXNzYWdlT3B0aW9uVHlwZSwgdGltZXN0YW1wOiBEYXRlfSkge1xuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25UeXBlID0gb3B0aW9uLnZhbGlkYXRpb25UeXBlO1xuICAgIC8vIGNvbnNvbGUubG9nKCdhZGRyZXNzZSBhdXRvY29tcGxldGUgLSB2YWxpZGF0aW9uIG1lc3NhZ2Ugb3B0aW9uJywgdGhpcy52YWxpZGF0aW9uTWVzc2FnZU9wdGlvblR5cGUpO1xuICB9XG5cbiAgb25Mb2NhbGl0eVByZWZpbGxFdmVudChldmVudDogUHJlZmlsbEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge2NvbnNvbGUubG9nKCdsaWI6OmxvY2FsaXR5IHByZWZpbGwgZXZlbnQgcmVjZWl2ZWQ6JywgZXZlbnQpOyB9XG4gICAgLypcbiAgICBpZiAoZXZlbnQucGVyZmVjdE1hdGNoKVxuICAgIHtcbiAgICAgIHRoaXMuYWRkcmVzc1BhcmFtcy5taW5MZXZlbCA9IC8gKjMqIC8gQUREUkVTU0xFVkVMLlNUUkVFVDtcbiAgICAgIHRoaXMuc3RyZWV0UGFyYW1zID0gdGhpcy5hZGRyZXNzUGFyYW1zO1xuICAgIH1cbiAgICAqL1xuICAgIHRoaXMuc3RyZWV0TmFtZUF1dG9maWxsRGF0YT1udWxsO1xuICAgIHRoaXMuc3RyZWV0TnVtYmVyQXV0b2ZpbGxEYXRhPW51bGw7XG4gICAgdGhpcy5ib3hOdW1iZXJBdXRvZmlsbERhdGE9bnVsbDtcbiAgICBjb25zdCBkYXRhID0gZXZlbnQucHJlZmlsbERhdGE7XG4gICAgaWYgKGV2ZW50LnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlQZXJmZWN0TWF0Y2hGb3VuZCA9PT0gdHJ1ZSApXG4gICAge1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbiA9IGRhdGEucHJlZmlsbE11bmljaXBhbGl0eVBlcmZlY3RNYXRjaFN1Z2dlc3Rpb247XG4gICAgICBjb25zdCBhZGRyZXNzID0gc3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoYWRkcmVzcyk7XG4gICAgICB0aGlzLmFkZHJlc3NQYXJhbXMubWluTGV2ZWwgPSAvKjQqLyBBRERSRVNTTEVWRUwuU1RSRUVUO1xuICAgICAgLy8gdGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhID0gdGhpcy5hZGRyZXNzUGFyYW1zOyAvLyBhcyBhbnkgYXMgUHJlZmlsbERhdGE7XG4gICAgICAvLyB0aGlzLmxvY2FsaXR5UHJlZmlsbERhdGEgPSBuZXcgUHJlZmlsbERhdGEodGhpcy5hZGRyZXNzUGFyYW1zKTtcbiAgICAgIC8vIE9iamVjdC5hc3NpZ24odGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhLCB0aGlzLmFkZHJlc3NQYXJhbXMpO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YSA9IGV2ZW50LnByZWZpbGxEYXRhO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YS50cyA9IG5ldyBEYXRlKCk7XG4gICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuU1RSRUVUO1xuICAgICAgLy8gQmUgc3VyZSB0byBwcm9wYWdhdGUgdGhlIGxvY2FsaXR5TmFtZSBpbiBwbGFjZSBvZiB0aGUgbXVuaWNpcGFsaXR5TmFtZSAhXG4gICAgICBjb25zdCBzdWdnZXN0aW9uQWRkcmVzcyA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eVBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25BZGRyZXNzTG9jYWxpdHlOYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3MubG9jYWxpdHlOYW1lO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5wb3N0YWxDb2RlID0gc3VnZ2VzdGlvbkFkZHJlc3MucG9zdGFsQ29kZTtcbiAgICAgIC8vIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KHN1Z2dlc3Rpb25BZGRyZXNzKTtcblxuICAgICAgY29uc3Qgc3RyZWV0TmFtZSA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROYW1lO1xuICAgICAgaWYgKHN0cmVldE5hbWUgPT09IG51bGwgfHwgc3RyZWV0TmFtZSA9PT0gdW5kZWZpbmVkIHx8IHN0cmVldE5hbWUgPT09ICcnKVxuICAgICAge1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLkxPQ0FMSVRZKTtcbiAgICAgICAgLy8gdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICAgICAgLy8gdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoc3VnZ2VzdGlvbkFkZHJlc3MpO1xuICAgICAgfVxuXG4gICAgICAvKlxuICAgICAgY29uc3Qgc3RyZWV0TmFtZSA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROYW1lO1xuICAgICAgaWYgKHN0cmVldE5hbWUgPT09IG51bGwgfHwgc3RyZWV0TmFtZSA9PT0gdW5kZWZpbmVkIHx8IHN0cmVldE5hbWUgPT09ICcnKVxuICAgICAge1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLkxPQ0FMSVRZKTtcbiAgICAgICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICAgICAgLy8gdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoc3VnZ2VzdGlvbkFkZHJlc3MpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsaWI6OnByZWZpbGw6IHRyaWdnZXIgY2hlY2tpbmcgc3RyZWV0IG1hdGNoLi4uICcsIHRoaXMucHJlZmlsbERhdGEpOyB9XG4gICAgICAgIHRoaXMuc3RyZWV0UHJlZmlsbERhdGEgPSB0aGlzLnByZWZpbGxEYXRhO1xuICAgICAgfVxuICAgICAgKi9cbiAgICAgIGlmIChhZGRyZXNzLnN0cmVldE5hbWUpe1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLkxPQ0FMSVRZKTtcbiAgICAgICAgdGhpcy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5TVFJFRVQ7XG4gICAgICAgIGNvbnN0IHN0cmVldE51bWJlciA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROdW1iZXI7XG4gICAgICAgIGNvbnN0IGJveE51bWJlciA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5ib3hOdW1iZXI7XG5cbiAgICAgICAgaWYgKHN0cmVldE51bWJlcikge1xuICAgICAgICAgIC8vIFVzZXIgaGFzIGEgc3RyZWV0TnVtYmVyIHRvIHByZWZpbGwgLSB0cmlnZ2VyIHN0cmVldC1udW1iZXIgcHJlZmlsbCBmbG93LlxuICAgICAgICAgIC8vIG9uU3RyZWV0TnVtYmVyUHJlZmlsbEV2ZW50IHdpbGwgaGFuZGxlIHRoZSBib3ggbnVtYmVyIHByZWZpbGwgaWYgbmVlZGVkLlxuICAgICAgICAgIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldFBlcmZlY3RNYXRjaEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXRQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uID0geyBhZGRyZXNzOiB7Li4uYWRkcmVzc30gfTtcbiAgICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuU1RSRUVUX05VTUJFUjtcbiAgICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TmFtZSA9IGFkZHJlc3Muc3RyZWV0TmFtZTtcbiAgICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZSA9IGFkZHJlc3MucG9zdGFsQ29kZTtcbiAgICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZSA9IGFkZHJlc3MubG9jYWxpdHlOYW1lIHx8IGFkZHJlc3MubXVuaWNpcGFsaXR5TmFtZTtcbiAgICAgICAgICB0aGlzLnN0cmVldE51bWJlclByZWZpbGxEYXRhID0gdGhpcy5wcmVmaWxsRGF0YTtcbiAgICAgICAgICAvLyBEbyBOT1Qgc2V0IGJveE51bWJlclByZWZpbGxEYXRhIGhlcmU6IGl0IHNoYXJlcyB0aGUgc2FtZSBwcmVmaWxsRGF0YSByZWZlcmVuY2UsXG4gICAgICAgICAgLy8gd2hpY2ggd291bGQgaW1tZWRpYXRlbHkgb3ZlcndyaXRlIG1pbkxldmVsIHRvIEJPWF9OVU1CRVIgKDEpIGJlZm9yZSBBbmd1bGFyXG4gICAgICAgICAgLy8gY2hhbmdlIGRldGVjdGlvbiBydW5zLCBjYXVzaW5nIHRoZSBzdHJlZXQtbnVtYmVyIGNvbXBvbmVudCB0byBzZWUgbWluTGV2ZWw9MVxuICAgICAgICAgIC8vIGFuZCBza2lwIGl0cyBwcmVmaWxsLiBMZXQgb25TdHJlZXROdW1iZXJQcmVmaWxsRXZlbnQgc2V0IHVwIGJveCBudW1iZXIgcHJlZmlsbC5cbiAgICAgICAgfSBlbHNlIGlmIChib3hOdW1iZXIgJiYgIWFkZHJlc3MuYm94TnVtYmVyKSB7XG4gICAgICAgICAgLy8gTm8gc3RyZWV0TnVtYmVyIHRvIHByZWZpbGw6IGp1bXAgZGlyZWN0bHkgdG8gYm94IG51bWJlciBwcmVmaWxsLlxuICAgICAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSO1xuICAgICAgICAgIHRoaXMuYm94TnVtYmVyUHJlZmlsbERhdGEgPSB0aGlzLnByZWZpbGxEYXRhO1xuICAgICAgICB9XG4gICAgICB9ZWxzZXtcbiAgICAgICAgdGhpcy5zdHJlZXRQcmVmaWxsRGF0YSA9IHRoaXMucHJlZmlsbERhdGE7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAvLyBjb25zdCBjcEFuZExvY2FsaXR5ID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnBvc3RhbENvZGUgKyB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZTtcbiAgICAgIGNvbnN0IGNwQW5kTG9jYWxpdHkgPSBkYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZSArIGRhdGEucGFyYW1ldGVycy5tdW5pY2lwYWxpdHlOYW1lO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQubG9jYWxpdHkgPSAnJztcbiAgICAgIGlmICggY3BBbmRMb2NhbGl0eSA9PT0gbnVsbCB8fCBjcEFuZExvY2FsaXR5ID09PSB1bmRlZmluZWQgfHwgY3BBbmRMb2NhbGl0eS5sZW5ndGggPT09IDAgKVxuICAgICAge1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MobnVsbCwgQUREUkVTU0xFVkVMLkxPQ0FMSVRZKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgfVxuICB9XG5cbiAgb25TdHJlZXRQcmVmaWxsRXZlbnQoZXZlbnQ6IFByZWZpbGxFdmVudCkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtjb25zb2xlLmxvZygnbGliOjpzdHJlZXQ6IHByZWZpbGwgZXZlbnQgcmVjZWl2ZWQnLCBldmVudCk7IH1cbiAgICAvKlxuICAgIGNvbnN0IGRhdGE6IFByZWZpbGxEYXRhID0gZXZlbnQucHJlZmlsbERhdGE7XG4gICAgaWYgKGRhdGEucHJlZmlsbFN0cmVldFBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlIClcbiAgICB7XG4gICAgICBjb25zb2xlLmxvZygnbGliOjpvblN0cmVldFByZWZpbGxFdmVudDogTUFUQ0ggRk9VTkQnLCBkYXRhKTtcbiAgICAgIHRoaXMucG9zdGFsQ29kZUxvY2FsaXR5ID0gJ1RSVUMtTVVDSEUnO1xuICAgICAgdGhpcy5wb3N0YWxDb2RlTG9jYWxpdHkgPSAnVFJVQy1NVUNIRSAyJztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuc2VhcmNoVGV4dCA9IHRoaXMucG9zdGFsQ29kZUxvY2FsaXR5O1xuICAgIH1cbiAgICAqL1xuICAgIGNvbnN0IGRhdGEgPSBldmVudC5wcmVmaWxsRGF0YTtcbiAgICBpZiAoZXZlbnQucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldFBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlIClcbiAgICB7XG4gICAgICAvLyBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsaWI6Om9uU3RyZWV0UHJlZmlsbEV2ZW50OiBNQVRDSCBGT1VORCcsIGRhdGEpOyB9XG4gICAgICBjb25zdCBzdWdnZXN0aW9uID0gZGF0YS5wcmVmaWxsU3RyZWV0UGVyZmVjdE1hdGNoU3VnZ2VzdGlvbjtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBzdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICB0aGlzLnVwZGF0ZVN0cmVldE5hbWUoYWRkcmVzcyk7XG4gICAgICB0aGlzLmFkZHJlc3NQYXJhbXMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuU1RSRUVUX05VTUJFUjtcbiAgICAgIC8vIHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSA9IHRoaXMuYWRkcmVzc1BhcmFtczsgLy8gYXMgYW55IGFzIFByZWZpbGxEYXRhO1xuICAgICAgLy8gdGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhID0gbmV3IFByZWZpbGxEYXRhKHRoaXMuYWRkcmVzc1BhcmFtcyk7XG4gICAgICAvLyBPYmplY3QuYXNzaWduKHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSwgdGhpcy5hZGRyZXNzUGFyYW1zKTsgICAgICBcbiAgICAgIHRoaXMucHJlZmlsbERhdGEgPSBldmVudC5wcmVmaWxsRGF0YTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEudHMgPSBuZXcgRGF0ZSgpO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVI7XG4gICAgICBjb25zdCBzdWdnZXN0aW9uQWRkcmVzcyA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldFBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25BZGRyZXNzTG9jYWxpdHlOYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3MubG9jYWxpdHlOYW1lO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5wb3N0YWxDb2RlID0gc3VnZ2VzdGlvbkFkZHJlc3MucG9zdGFsQ29kZTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3Muc3RyZWV0TmFtZTtcbiAgICAgIC8vIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KHN1Z2dlc3Rpb25BZGRyZXNzKTtcbiAgICAgIC8vIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KHN1Z2dlc3Rpb25BZGRyZXNzKTtcblxuICAgICAgY29uc3Qgc3RyZWV0TnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlcjtcbiAgICAgIGlmIChzdHJlZXROdW1iZXIgPT09IG51bGwgfHwgc3RyZWV0TnVtYmVyID09PSB1bmRlZmluZWQgfHwgc3RyZWV0TnVtYmVyID09PSAnJylcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVQpO1xuICAgICAgICAvLyB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICAvL3RoaXMuc2VsZWN0ZWRBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgICAgdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoYWRkcmVzcyk7XG4gICAgICAgIHRoaXMudXBkYXRlU3RyZWV0TmFtZShhZGRyZXNzKTtcbiAgICAgICAgdGhpcy5zdHJlZXRBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzID0gbnVsbDtcbiAgICAgICAgLypcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5jbGVhcldpZGdldCgpO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcldpZGdldCgpO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgfVxuXG4gICAgICAvKlxuICAgICAgY29uc3Qgc3RyZWV0TnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlcjtcbiAgICAgIGlmIChzdHJlZXROdW1iZXIgPT09IG51bGwgfHwgc3RyZWV0TnVtYmVyID09PSB1bmRlZmluZWQgfHwgc3RyZWV0TnVtYmVyID09PSAnJylcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVQpO1xuICAgICAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7Y29uc29sZS5sb2coJ2xpYjo6cHJlZmlsbDogdHJpZ2dlciBjaGVja2luZyBzdHJlZXQgbnVtYmVyIG1hdGNoLi4uICcsIHRoaXMucHJlZmlsbERhdGEpO31cbiAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJQcmVmaWxsRGF0YSA9IHRoaXMucHJlZmlsbERhdGE7XG4gICAgICB9XG4gICAgICAqL1xuXG4gICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKVxuICAgICAge1xuICAgICAgICBjb25zb2xlLndhcm4oJ2xpYjo6c3RyZWV0OiBwcmVmaWxsIC0gdHJhbnNtaXR0aW5nIHByZWZpbGwgZGF0YSBmb3Igc3RyZWV0TnVtYmVyIDonLCB0aGlzLnByZWZpbGxEYXRhKTtcbiAgICAgIH1cbiAgICAgIGlmIChhZGRyZXNzLmhvdXNlTnVtYmVyICYmICFzdHJlZXROdW1iZXIpe1xuICAgICAgICAvLyBObyBzdHJlZXQgbnVtYmVyIGluIHByZWZpbGwgcGFyYW1zOiB1c2UgdGhlIHN0cmVldCBzdWdnZXN0aW9uJ3MgaG91c2VOdW1iZXIgdmlhIGF1dG9maWxsXG4gICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuU1RSRUVUKTtcbiAgICAgICAgdGhpcy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSO1xuICAgICAgfWVsc2V7XG4gICAgICAgIC8vIFN0cmVldCBudW1iZXIgZ2l2ZW4gaW4gcHJlZmlsbCBwYXJhbXMgKG9yIG5vIGhvdXNlTnVtYmVyIGluIHN1Z2dlc3Rpb24pOiB0cmlnZ2VyIHN0cmVldC1udW1iZXIgcHJlZmlsbFxuICAgICAgICB0aGlzLnN0cmVldE51bWJlclByZWZpbGxEYXRhID0gdGhpcy5wcmVmaWxsRGF0YTtcbiAgICAgIH1cbiAgICAgIFxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgY29uc3QgcHJlZmlsbFN0cmVldE5hbWUgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TmFtZTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcblxuICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdsaWI6Om9uU3RyZWV0UHJlZmlsbEV2ZW50IC0gTk8gTUFUQ0ggQVQgU1RSRUVUIExFVkVMJywgcHJlZmlsbFN0cmVldE5hbWUgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCBwcmVmaWxsU3RyZWV0TmFtZSA9PT0gbnVsbCB8fCBwcmVmaWxsU3RyZWV0TmFtZSA9PT0gdW5kZWZpbmVkIHx8IHByZWZpbGxTdHJlZXROYW1lLmxlbmd0aCA9PT0gMCApXG4gICAgICB7XG4gICAgICAgIC8vIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtjb25zb2xlLmxvZygnbGliOjpvblN0cmVldFByZWZpbGxFdmVudDogTk8gTUFUQ0ggRk9VTkQgLSBzZXQgYWRkcmVzcycsIGRhdGEsIGFkZHJlc3MpOyB9XG4gICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuTE9DQUxJVFkpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICAvLyBhZGRyZXNzLnN0cmVldE5hbWUgPSBwcmVmaWxsU3RyZWV0TmFtZTtcbiAgICAgICAgYWRkcmVzcy5zZWFyY2hCYXJTdHJpbmcgPSBwcmVmaWxsU3RyZWV0TmFtZTtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVQpO1xuICAgICAgfVxuICAgICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICB9XG4gIH1cblxuICBvblN0cmVldE51bWJlclByZWZpbGxFdmVudF9uZXcoZXZlbnQ6IFByZWZpbGxFdmVudCkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xpYjo6c3RyZWV0LW51bWJlciBwcmVmaWxsIGV2ZW50IHJlY2VpdmVkOicsIGV2ZW50KTsgfVxuICAgIGNvbnN0IGRhdGEgPSBldmVudC5wcmVmaWxsRGF0YTtcbiAgICBpZiAoZGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoRm91bmQgPT09IHRydWUpXG4gICAge1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbiA9IGRhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb247XG4gICAgICBjb25zdCBhZGRyZXNzID0gc3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgdGhpcy51cGRhdGVTdHJlZXROdW1iZXIoYWRkcmVzcyk7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlbGVjdGVkQWRkcmVzcyA9IGFkZHJlc3M7XG5cbiAgICAgIGNvbnN0IGFkZHJlc3NJc0NvbXBsZXRlID0gYWRkcmVzcyAmJiBhZGRyZXNzLmhhc093blByb3BlcnR5KCdpc0NvbXBsZXRlJykgJiYgYWRkcmVzcy5pc0NvbXBsZXRlID09PSB0cnVlID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgY29uc3QgYWRkcmVzc0lzTm90SW5MaXN0ID0gYWRkcmVzcyAmJiBhZGRyZXNzLmhhc093blByb3BlcnR5KCdub3QtaW4tbGlzdCcpICYmIGFkZHJlc3NbJ25vdC1pbi1saXN0J10gPT09IHRydWUgPyB0cnVlIDogZmFsc2U7XG5cbiAgICAgIGlmIChhZGRyZXNzSXNDb21wbGV0ZSAmJiAhIGFkZHJlc3NJc05vdEluTGlzdCApXG4gICAgICB7XG4gICAgICAgIC8vIGZvdW5kIGFkZHJlc3MgLSBwZXJmZWN0IG1hdGNoIGF0IHN0cmVldCBudW1iZXIgbGV2ZWxcbiAgICAgICAgY29uc3QgYm94TnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YSA/IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5ib3hOdW1iZXIgOiBudWxsO1xuICAgICAgICBpZiAodGhpcy5ub3RJbkxpc3RBbGxvd2VkICYmIGJveE51bWJlcikge1xuICAgICAgICAgIC8vIFVzZXIgcHJlZmlsbGVkIGEgYm94IG51bWJlciBhbmQgbm90SW5MaXN0QWxsb3dlZCAtIGNvbnRpbnVlIHRvIGJveCBudW1iZXIgcHJlZmlsbFxuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuYWRkcmVzc0lzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuYWRkcmVzc1BhcmFtcy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSO1xuICAgICAgICAgIHRoaXMucHJlZmlsbERhdGEgPSBldmVudC5wcmVmaWxsRGF0YTtcbiAgICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnRzID0gbmV3IERhdGUoKTtcbiAgICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuQk9YX05VTUJFUjtcbiAgICAgICAgICBjb25zdCBzdWdnZXN0aW9uQWRkcmVzcyA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZSA9IHN1Z2dlc3Rpb25BZGRyZXNzLnBvc3RhbENvZGU7XG4gICAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzcy5zdHJlZXROYW1lO1xuICAgICAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROdW1iZXIgPSBzdWdnZXN0aW9uQWRkcmVzcy5ob3VzZU51bWJlcjtcbiAgICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZSA9IHN1Z2dlc3Rpb25BZGRyZXNzLmxvY2FsaXR5TmFtZTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShhZGRyZXNzKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0cmVldE5hbWUoYWRkcmVzcyk7XG4gICAgICAgICAgdGhpcy51cGRhdGVTdHJlZXROdW1iZXIoYWRkcmVzcyk7XG4gICAgICAgICAgdGhpcy5zdHJlZXRBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgICAgICB0aGlzLnN0cmVldE51bWJlckFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gYWRkcmVzcy5ob3VzZU51bWJlcjtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmJveE51bWJlclByZWZpbGxEYXRhID0gdGhpcy5wcmVmaWxsRGF0YTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGFueW1vcmVcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLmFkZHJlc3NJc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVIpO1xuICAgICAgICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgdGhpcy5hZGRyZXNzUGFyYW1zLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLkJPWF9OVU1CRVI7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEgPSBldmVudC5wcmVmaWxsRGF0YTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS50cyA9IG5ldyBEYXRlKCk7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSO1xuICAgICAgICAvLyBjb25zdCBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZVxuICAgICAgICAvLyAgPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uLmFkZHJlc3MubG9jYWxpdHlOYW1lO1xuXG4gICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25BZGRyZXNzID0gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoU3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgICBjb25zdCBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZSA9IHN1Z2dlc3Rpb25BZGRyZXNzLmxvY2FsaXR5TmFtZTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnBvc3RhbENvZGUgPSBzdWdnZXN0aW9uQWRkcmVzcy5wb3N0YWxDb2RlO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TmFtZSA9IHN1Z2dlc3Rpb25BZGRyZXNzLnN0cmVldE5hbWU7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROdW1iZXIgPSBzdWdnZXN0aW9uQWRkcmVzcy5ob3VzZU51bWJlcjtcbiAgICAgICAgLy8gdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoc3VnZ2VzdGlvbkFkZHJlc3MpO1xuICAgICAgICAvLyB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShzdWdnZXN0aW9uQWRkcmVzcyk7XG5cbiAgICAgICAgY29uc3QgYm94TnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmJveE51bWJlcjtcbiAgICAgICAgaWYgKCAhIGFkZHJlc3NJc05vdEluTGlzdCAmJiAoYm94TnVtYmVyID09PSBudWxsIHx8IGJveE51bWJlciA9PT0gdW5kZWZpbmVkIHx8IGJveE51bWJlciA9PT0gJycpIClcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuU1RSRUVUX05VTUJFUik7XG4gICAgICAgICAgLy8gdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShhZGRyZXNzKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0cmVldE5hbWUoYWRkcmVzcyk7XG4gICAgICAgICAgdGhpcy51cGRhdGVTdHJlZXROdW1iZXIoYWRkcmVzcyk7IC8vICQkXG4gICAgICAgICAgdGhpcy5zdHJlZXRBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgICAgICB0aGlzLnN0cmVldE51bWJlckFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgICAgIGlmIChhZGRyZXNzLmhhc093blByb3BlcnR5KCdpc0NvbXBsZXRlJykgJiYgYWRkcmVzcy5pc0NvbXBsZXRlID09PSB0cnVlIClcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLmFkZHJlc3NJc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChhZGRyZXNzSXNOb3RJbkxpc3QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gYWRkcmVzcy5ob3VzZU51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gYWRkcmVzcy5ob3VzZU51bWJlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgLypcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFyV2lkZ2V0KCk7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgKi9cbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8qXG4gICAgICAgIGNvbnN0IGJveE51bWJlciA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5ib3hOdW1iZXI7XG4gICAgICAgIGlmICggISBhZGRyZXNzSXNOb3RJbkxpc3QgJiYgKGJveE51bWJlciA9PT0gbnVsbCB8fCBib3hOdW1iZXIgPT09IHVuZGVmaW5lZCB8fCBib3hOdW1iZXIgPT09ICcnKSApXG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVIpO1xuICAgICAgICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnbGliOjpwcmVmaWxsOiB0cmlnZ2VyIGNoZWNraW5nIGJveCBudW1iZXIgbWF0Y2guLi4gJywgdGhpcy5wcmVmaWxsRGF0YSk7IH1cbiAgICAgICAgICB0aGlzLmJveE51bWJlclByZWZpbGxEYXRhID0gdGhpcy5wcmVmaWxsRGF0YTtcbiAgICAgICAgfVxuICAgICAgICAqL1xuXG4gICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpXG4gICAgICAgIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ2xpYjo6c3RyZWV0bnVtYmVyOiBwcmVmaWxsIC0gdHJhbnNtaXR0aW5nIHByZWZpbGwgZGF0YSBmb3IgYm94IDonLCB0aGlzLnByZWZpbGxEYXRhKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJveE51bWJlclByZWZpbGxEYXRhID0gdGhpcy5wcmVmaWxsRGF0YTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIGNvbnN0IHByZWZpbGxTdHJlZXROdW1iZXIgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TnVtYmVyO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldFBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG5cbiAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignbGliOjpvblN0cmVldE51bWJlclByZWZpbGxFdmVudCAtIE5PIE1BVENIIEFUIFNUUkVFVC1OVU1CRVIgTEVWRUwnLCBwcmVmaWxsU3RyZWV0TnVtYmVyICk7XG4gICAgICB9XG5cbiAgICAgIGlmICggcHJlZmlsbFN0cmVldE51bWJlciA9PT0gbnVsbCB8fCBwcmVmaWxsU3RyZWV0TnVtYmVyID09PSB1bmRlZmluZWQgfHwgcHJlZmlsbFN0cmVldE51bWJlci5sZW5ndGggPT09IDAgKVxuICAgICAge1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLlNUUkVFVCk7XG4gICAgICB9XG4gICAgICBlbHNlXG4gICAgICB7XG4gICAgICAgIC8vIGFkZHJlc3MuaG91c2VOdW1iZXIgPSBwcmVmaWxsU3RyZWV0TnVtYmVyO1xuICAgICAgICBhZGRyZXNzLnNlYXJjaEJhclN0cmluZyA9IHByZWZpbGxTdHJlZXROdW1iZXI7XG4gICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuU1RSRUVUX05VTUJFUik7XG4gICAgICB9XG4gICAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgIH1cbiAgfVxuXG4gIG9uU3RyZWV0TnVtYmVyUHJlZmlsbEV2ZW50KGV2ZW50OiBQcmVmaWxsRXZlbnQpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsaWI6OnN0cmVldCBudW1iZXIgcHJlZmlsbCBldmVudCByZWNlaXZlZDonLCBldmVudCk7IH1cbiAgICBjb25zdCBkYXRhID0gZXZlbnQucHJlZmlsbERhdGE7XG4gICAgaWYgKGRhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlKVxuICAgIHtcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSBkYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIHRoaXMudXBkYXRlU3RyZWV0TnVtYmVyKGFkZHJlc3MpO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWxlY3RlZEFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgLy8gRGlyZWN0bHkgc2V0IHRoZSBjaGlsZCBpbnB1dCBmaWVsZCB0byB0aGUgQVBJLXJldHVybmVkIGhvdXNlIG51bWJlci5cbiAgICAgIC8vIFRoaXMgaXMgY3JpdGljYWwgd2hlbiB0aGUgcHJlZmlsbGVkIG51bWJlciB3YXMgaW52YWxpZCAoZS5nLiAxNDU4OTYg4oaSIDU2KTpcbiAgICAgIC8vIGl0IGVuc3VyZXMgc2VhcmNoVGV4dD0nNTYnIGJlZm9yZSBxdWl0UHJlZmlsbE1vZGUoKSBjbGVhcnMgdGhlIHByZWZpbGxpbmcgZmxhZyxcbiAgICAgIC8vIHNvIHRoYXQgQW5ndWxhciBDRCdzIG5nT25DaGFuZ2VzKGlucHV0VGV4dDonMTQ1ODk2J+KGkic1NicpIHNlZXMgbWF0Y2hpbmcgdmFsdWVzXG4gICAgICAvLyBhbmQgZG9lcyBOT1QgdHJpZ2dlciBjbGVhcldpZGdldCgpLlxuICAgICAgaWYgKGFkZHJlc3MuaG91c2VOdW1iZXIpIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gYWRkcmVzcy5ob3VzZU51bWJlcjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWRkcmVzc0lzQ29tcGxldGUgPSBhZGRyZXNzICYmIGFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSAmJiAhYWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnYm94TnVtYmVyJykgJiYgYWRkcmVzcy5pc0NvbXBsZXRlID09PSB0cnVlID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgY29uc3QgYWRkcmVzc0lzTm90SW5MaXN0ID0gYWRkcmVzcyAmJiBhZGRyZXNzLmhhc093blByb3BlcnR5KCdub3QtaW4tbGlzdCcpICYmIGFkZHJlc3NbJ25vdC1pbi1saXN0J10gPT09IHRydWUgPyB0cnVlIDogZmFsc2U7XG5cbiAgICAgIGlmIChhZGRyZXNzSXNDb21wbGV0ZSAmJiAhIGFkZHJlc3NJc05vdEluTGlzdCApXG4gICAgICB7XG4gICAgICAgIC8vIGZvdW5kIGFkZHJlc3MgLSBwZXJmZWN0IG1hdGNoIGF0IHN0cmVldCBudW1iZXIgbGV2ZWxcbiAgICAgICAgY29uc3QgYm94TnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YSA/IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5ib3hOdW1iZXIgOiBudWxsO1xuICAgICAgICBpZiAoYm94TnVtYmVyICYmIHRoaXMubm90SW5MaXN0QWxsb3dlZCkge1xuICAgICAgICAgIC8vIEEgYm94TnVtYmVyIGlzIHByZXNlbnQgaW4gcHJlZmlsbCBwYXJhbXMgQU5EIG5vdEluTGlzdEFsbG93ZWQgLSBjb250aW51ZSB0byBib3ggbnVtYmVyIHByZWZpbGwuXG4gICAgICAgICAgLy8gV2hlbiBub3RJbkxpc3RBbGxvd2VkPWZhbHNlLCB0aGUgYWRkcmVzcyBpcyBhbHJlYWR5IGNvbXBsZXRlIHdpdGhvdXQgYSBib3ggbnVtYmVyO1xuICAgICAgICAgIC8vIGFueSBwcmVmaWxsZWQgYm94IG51bWJlciBpcyBpbnZhbGlkIGFuZCB0aGUgQVBJIGNhbGwgbXVzdCBiZSBza2lwcGVkLlxuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuYWRkcmVzc0lzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuYWRkcmVzc1BhcmFtcy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSO1xuICAgICAgICAgIHRoaXMucHJlZmlsbERhdGEgPSBldmVudC5wcmVmaWxsRGF0YTtcbiAgICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnRzID0gbmV3IERhdGUoKTtcbiAgICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuQk9YX05VTUJFUjtcbiAgICAgICAgICBjb25zdCBzdWdnZXN0aW9uQWRkcmVzcyA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZSA9IHN1Z2dlc3Rpb25BZGRyZXNzLmxvY2FsaXR5TmFtZTtcbiAgICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZSA9IHN1Z2dlc3Rpb25BZGRyZXNzLnBvc3RhbENvZGU7XG4gICAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzcy5zdHJlZXROYW1lO1xuICAgICAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROdW1iZXIgPSBzdWdnZXN0aW9uQWRkcmVzcy5ob3VzZU51bWJlcjtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShhZGRyZXNzKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0cmVldE5hbWUoYWRkcmVzcyk7XG4gICAgICAgICAgdGhpcy51cGRhdGVTdHJlZXROdW1iZXIoYWRkcmVzcyk7XG4gICAgICAgICAgdGhpcy5zdHJlZXRBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgICAgICB0aGlzLnN0cmVldE51bWJlckFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gYWRkcmVzcy5ob3VzZU51bWJlcjtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmJveE51bWJlclByZWZpbGxEYXRhID0gdGhpcy5wcmVmaWxsRGF0YTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVIpO1xuICAgICAgICAgIC8vIGFkZHJlc3MuaXNDb21wbGV0ZT09PXRydWUsIHNvIHNldEFkZHJlc3MoKSBjb3JyZWN0bHkgc2V0cyBhZGRyZXNzSXNDb21wbGV0ZT10cnVlXG4gICAgICAgICAgLy8gYW5kIHRoZSBjaGVjayBtYXJrIHNob3VsZCBiZSB2aXNpYmxlLiBEbyBOT1Qgc3VwcHJlc3MgaXQgaGVyZS5cbiAgICAgICAgICAvLyBOdWxsIG91dCBhdXRvZmlsbCBkYXRhIHNvIEFuZ3VsYXIgQ0QgZG9lcyBub3QgcmUtdHJpZ2dlciBuZ09uQ2hhbmdlcyhhdXRvZmlsbERhdGEpXG4gICAgICAgICAgLy8gb24gdGhlIHN0cmVldC1udW1iZXIgY2hpbGQsIHdoaWNoIHdvdWxkIGNhbGwgc2V0U2VsZWN0ZWRBZGRyZXNzIGFuZCBzZXRcbiAgICAgICAgICAvLyBhZGRyZXNzSXNDb21wbGV0ZT10cnVlIGFnYWluIHZpYSB0aGUgYXV0b2ZpbGwgY2hhaW4uXG4gICAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJBdXRvZmlsbERhdGEgPSBudWxsO1xuICAgICAgICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgdGhpcy5hZGRyZXNzUGFyYW1zLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLkJPWF9OVU1CRVI7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEgPSBldmVudC5wcmVmaWxsRGF0YTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS50cyA9IG5ldyBEYXRlKCk7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSO1xuICAgICAgICAvLyBjb25zdCBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZVxuICAgICAgICAvLyAgPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uLmFkZHJlc3MubG9jYWxpdHlOYW1lO1xuXG4gICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25BZGRyZXNzID0gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoU3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgICBjb25zdCBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZSA9IHN1Z2dlc3Rpb25BZGRyZXNzLmxvY2FsaXR5TmFtZTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnBvc3RhbENvZGUgPSBzdWdnZXN0aW9uQWRkcmVzcy5wb3N0YWxDb2RlO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TmFtZSA9IHN1Z2dlc3Rpb25BZGRyZXNzLnN0cmVldE5hbWU7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROdW1iZXIgPSBzdWdnZXN0aW9uQWRkcmVzcy5ob3VzZU51bWJlcjtcbiAgICAgICAgLy8gdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoc3VnZ2VzdGlvbkFkZHJlc3MpO1xuICAgICAgICAvLyB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShzdWdnZXN0aW9uQWRkcmVzcyk7XG5cbiAgICAgICAgY29uc3QgYm94TnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmJveE51bWJlcjtcbiAgICAgICAgaWYgKCAhIGFkZHJlc3NJc05vdEluTGlzdCAmJiAoYm94TnVtYmVyID09PSBudWxsIHx8IGJveE51bWJlciA9PT0gdW5kZWZpbmVkIHx8IGJveE51bWJlciA9PT0gJycpIClcbiAgICAgICAge1xuICAgICAgICAgIC8vIE5vIGJveCBudW1iZXIgaW4gcHJlZmlsbCBwYXJhbXMgYW5kIHRoZSBBUEkgcmVwb3J0cyBpc0NvbXBsZXRlPWZhbHNlIChib3ggbnVtYmVyIHJlcXVpcmVkKS5cbiAgICAgICAgICAvLyBEbyBOT1Qgc3RhcnQgYm94LW51bWJlciBwcmVmaWxsOiB3aGVuIGJveE51bWJlciBwYXJhbSBpcyBlbXB0eSwgdGhlIGJveC1udW1iZXJcbiAgICAgICAgICAvLyBjb21wb25lbnQgcmVjZWl2ZXMgc2VhcmNoVGV4dD0nJyBhbmQgbmV2ZXIgZmlyZXMgaXRzIHByZWZpbGwgZXZlbnQsIHNvXG4gICAgICAgICAgLy8gcXVpdFByZWZpbGxNb2RlKCkgd291bGQgbmV2ZXIgYmUgY2FsbGVkLCBsZWF2aW5nIHByZWZpbGxpbmc9dHJ1ZSBmb3JldmVyLlxuICAgICAgICAgIC8vIFNpbmNlIGlzQ29tcGxldGU9ZmFsc2UgdGhlIGFkZHJlc3MgaXMgbm90IGNvbXBsZXRlIOKAlCBkbyBOT1QgZm9yY2UgYWRkcmVzc0lzQ29tcGxldGU9dHJ1ZTtcbiAgICAgICAgICAvLyBzZXRBZGRyZXNzKCkgd2lsbCBjb3JyZWN0bHkgbGVhdmUgdGhlIHN0cmVldC1udW1iZXIgY2hlY2ttYXJrIHVuc2V0LCBhbmQgdGhlIHVzZXJcbiAgICAgICAgICAvLyBtdXN0IGVudGVyIHRoZSBib3ggbnVtYmVyIG1hbnVhbGx5LlxuICAgICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuU1RSRUVUX05VTUJFUik7XG4gICAgICAgICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1lbHNlXG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShhZGRyZXNzKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0cmVldE5hbWUoYWRkcmVzcyk7XG4gICAgICAgICAgdGhpcy51cGRhdGVTdHJlZXROdW1iZXIoYWRkcmVzcyk7IFxuICAgICAgICAgIHRoaXMuc3RyZWV0QWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgICAgICBpZiAoYWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnaXNDb21wbGV0ZScpICYmIGFkZHJlc3MuaXNDb21wbGV0ZSA9PT0gdHJ1ZSApXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5hZGRyZXNzSXNDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAoYWRkcmVzc0lzTm90SW5MaXN0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9IGFkZHJlc3MuaG91c2VOdW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9IGFkZHJlc3MuaG91c2VOdW1iZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ib3hOdW1iZXJQcmVmaWxsRGF0YSA9IHRoaXMucHJlZmlsbERhdGE7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBjb25zdCBwcmVmaWxsU3RyZWV0TnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlcjtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXRQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uXG4gICAgICAgID8gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0UGVyZmVjdE1hdGNoU3VnZ2VzdGlvbi5hZGRyZXNzXG4gICAgICAgIDogbnVsbDtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICBpZiAoIHByZWZpbGxTdHJlZXROdW1iZXIgPT09IG51bGwgfHwgcHJlZmlsbFN0cmVldE51bWJlciA9PT0gdW5kZWZpbmVkIHx8IHByZWZpbGxTdHJlZXROdW1iZXIubGVuZ3RoID09PSAwIClcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVQpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICAvLyBUaGUgcHJlZmlsbGVkIHN0cmVldCBudW1iZXIgZG9lc24ndCBleGlzdCBpbiB0aGUgQVBJIChub3RJbkxpc3RBbGxvd2VkPWZhbHNlKS5cbiAgICAgICAgLy8gU2hvdyB0aGUgcHJlZmlsbGVkIHZhbHVlIGluIHRoZSBpbnB1dCBhbmQgbGVhdmUgdGhlIGRyb3Bkb3duIG9wZW4gc28gdGhlXG4gICAgICAgIC8vIHVzZXIgY2FuIHBpY2sgdGhlIGNvcnJlY3QgaG91c2UgbnVtYmVyIGZyb20gdGhlIHN1Z2dlc3Rpb25zLlxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSBwcmVmaWxsU3RyZWV0TnVtYmVyO1xuICAgICAgICAvLyBLZWVwIHN0cmVldE51bWJlcklucHV0IGluIHN5bmMgd2l0aCBzZWFyY2hUZXh0IHNvIHRoZSBjaGlsZCdzIGlucHV0VGV4dFxuICAgICAgICAvLyBuZ09uQ2hhbmdlcyBndWFyZCAobm90RXF1YWxJZ25vcmVDYXNlKSBkb2VzIG5vdCB0cmlnZ2VyIGNsZWFyV2lkZ2V0KClcbiAgICAgICAgLy8gb25jZSBwcmVmaWxsaW5nIGJlY29tZXMgZmFsc2UgYWZ0ZXIgcXVpdFByZWZpbGxNb2RlKCkuXG4gICAgICAgIHRoaXMuc3RyZWV0TnVtYmVySW5wdXQgPSBwcmVmaWxsU3RyZWV0TnVtYmVyO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLmlzUHJlZmlsbFdpdGhOb01hdGNoID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuYWRkcmVzc0lzQ29tcGxldGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgLy8gUHJldmVudCB0aGUgYXV0b2ZpbGwgQW5ndWxhci1DRCBjaGFpbiBmcm9tIHJlLXNldHRpbmcgYWRkcmVzc0lzQ29tcGxldGU9dHJ1ZS5cbiAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJBdXRvZmlsbERhdGEgPSBudWxsO1xuICAgICAgfVxuICAgICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICB9XG4gIH1cblxuICBvbkJveE51bWJlclByZWZpbGxFdmVudF9uZXcoZXZlbnQ6IFByZWZpbGxFdmVudCkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xpYjo6cHJlZmlsbDogYm94IG51bWJlciBldmVudCByZWNlaXZlZDonLCBldmVudCk7IH1cbiAgICBjb25zdCBkYXRhID0gZXZlbnQucHJlZmlsbERhdGE7XG4gICAgaWYgKGRhdGEucHJlZmlsbEJveE51bWJlclBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlKVxuICAgIHtcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSBkYXRhLnByZWZpbGxCb3hOdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIC8vIFdoZW4gbm90SW5MaXN0QWxsb3dlZCwgZW5zdXJlIHVzZXIncyBwcmVmaWxsZWQgdmFsdWVzIGFyZSB1c2VkXG4gICAgICBpZiAodGhpcy5ub3RJbkxpc3RBbGxvd2VkKSB7XG4gICAgICAgIGlmICh0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TnVtYmVyKSB7XG4gICAgICAgICAgYWRkcmVzcy5ob3VzZU51bWJlciA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROdW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5ib3hOdW1iZXIpIHtcbiAgICAgICAgICBhZGRyZXNzLmJveE51bWJlciA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5ib3hOdW1iZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VsZWN0ZWRBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuQk9YX05VTUJFUik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBjb25zdCBwcmVmaWxsQm94TnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmJveE51bWJlcjtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uXG4gICAgICAgID8gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoU3VnZ2VzdGlvbi5hZGRyZXNzXG4gICAgICAgIDogbnVsbDtcbiAgICAgIGlmICggcHJlZmlsbEJveE51bWJlciA9PT0gbnVsbCB8fCBwcmVmaWxsQm94TnVtYmVyID09PSB1bmRlZmluZWQgfHwgcHJlZmlsbEJveE51bWJlci5sZW5ndGggPT09IDAgKVxuICAgICAge1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVIpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoYWRkcmVzcylcbiAgICAgIHtcbiAgICAgICAgYWRkcmVzcy5ib3hOdW1iZXIgPSBwcmVmaWxsQm94TnVtYmVyO1xuICAgICAgICBpZiAodGhpcy5ub3RJbkxpc3RBbGxvd2VkICYmIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROdW1iZXIpIHtcbiAgICAgICAgICBhZGRyZXNzLmhvdXNlTnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBhZGRyZXNzLnNlYXJjaEJhclN0cmluZyA9IHByZWZpbGxCb3hOdW1iZXI7XG4gICAgICAgIC8vIEZvciBpbnRlcm5hbCBlbmRwb2ludDogY2xlYXIgSURzIHRoYXQgYXJlIG5vIGxvbmdlciB2YWxpZCB3aGVuIGJveCBudW1iZXIgaXMgbm90IGluIHRoZSBsaXN0LlxuICAgICAgICAvLyAtIG1haWxCb3hJZCBhbmQgc3VmZml4SWQgYXJlIGFsd2F5cyBjbGVhcmVkICh2YWxpZCBzdHJlZXQgbnVtYmVyICsgaW52YWxpZCBib3ggbnVtYmVyKS5cbiAgICAgICAgLy8gLSBwZHBJZCBpcyBhbHNvIGNsZWFyZWQgd2hlbiBzdHJlZXQgbnVtYmVyIHdhcyBhbHNvIG5vdC1pbi1saXN0IChib3RoIGludmFsaWQpLlxuICAgICAgICBcbiAgICAgICAgICBjb25zdCBzdHJlZXROdW1iZXJXYXNOb3RJbkxpc3QgPSBhZGRyZXNzLmhhc093blByb3BlcnR5KCdub3QtaW4tbGlzdCcpICYmIGFkZHJlc3NbJ25vdC1pbi1saXN0J10gPT09IHRydWU7XG4gICAgICAgICAgYWRkcmVzcy5tYWlsQm94SWQgPSBudWxsO1xuICAgICAgICAgIGFkZHJlc3MubWFpbEJveGlkID0gbnVsbDtcbiAgICAgICAgICBhZGRyZXNzLnN1ZmZpeElkID0gbnVsbDtcbiAgICAgICAgICBpZihhZGRyZXNzLmdlb1NhbmN0aW9uKXtcbiAgICAgICAgICAgIGFkZHJlc3MuZ2VvU2FuY3Rpb249YWRkcmVzcy5nZW9TYW5jdGlvbi5zdWJzdHJpbmcoMCwzNSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdHJlZXROdW1iZXJXYXNOb3RJbkxpc3QpIHtcbiAgICAgICAgICAgIGFkZHJlc3MucGRwSWQgPSBudWxsO1xuICAgICAgICAgICAgaWYoYWRkcmVzcy5nZW9TYW5jdGlvbil7XG4gICAgICAgICAgICAgIGFkZHJlc3MuZ2VvU2FuY3Rpb249YWRkcmVzcy5nZW9TYW5jdGlvbi5zdWJzdHJpbmcoMCwyNSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgfVxuXG4gIG9uQm94TnVtYmVyUHJlZmlsbEV2ZW50KGV2ZW50OiBQcmVmaWxsRXZlbnQpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsaWI6OnByZWZpbGw6IGJveCBudW1iZXIgZXZlbnQgcmVjZWl2ZWQ6JywgZXZlbnQpOyB9XG4gICAgY29uc3QgZGF0YSA9IGV2ZW50LnByZWZpbGxEYXRhO1xuICAgIGlmIChkYXRhLnByZWZpbGxCb3hOdW1iZXJQZXJmZWN0TWF0Y2hGb3VuZCA9PT0gdHJ1ZSlcbiAgICB7XG4gICAgICBjb25zdCBzdWdnZXN0aW9uID0gZGF0YS5wcmVmaWxsQm94TnVtYmVyUGVyZmVjdE1hdGNoU3VnZ2VzdGlvbjtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBzdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICAvLyBXaGVuIG5vdEluTGlzdEFsbG93ZWQsIGVuc3VyZSB1c2VyJ3MgcHJlZmlsbGVkIHZhbHVlcyBhcmUgdXNlZFxuICAgICAgaWYgKHRoaXMubm90SW5MaXN0QWxsb3dlZCkge1xuICAgICAgICBpZiAodGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlcikge1xuICAgICAgICAgIGFkZHJlc3MuaG91c2VOdW1iZXIgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuYm94TnVtYmVyKSB7XG4gICAgICAgICAgYWRkcmVzcy5ib3hOdW1iZXIgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuYm94TnVtYmVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlbGVjdGVkQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLkJPWF9OVU1CRVIpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgY29uc3QgcHJlZmlsbEJveE51bWJlciA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5ib3hOdW1iZXI7XG4gICAgICBjb25zdCBhZGRyZXNzID0gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoU3VnZ2VzdGlvblxuICAgICAgICA/IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24uYWRkcmVzc1xuICAgICAgICA6IG51bGw7XG4gICAgICBpZiAoIHByZWZpbGxCb3hOdW1iZXIgPT09IG51bGwgfHwgcHJlZmlsbEJveE51bWJlciA9PT0gdW5kZWZpbmVkIHx8IHByZWZpbGxCb3hOdW1iZXIubGVuZ3RoID09PSAwIClcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGFkZHJlc3MpXG4gICAgICB7XG4gICAgICAgIGlmICghdGhpcy5ub3RJbkxpc3RBbGxvd2VkKSB7XG4gICAgICAgICAgLy8gbm90SW5MaXN0QWxsb3dlZD1mYWxzZTogdGhlIGJveCBudW1iZXIgaXMgaW52YWxpZCBhbmQgbXVzdCBub3QgYXBwZWFyIGluIHRoZVxuICAgICAgICAgIC8vIHNlbGVjdGVkIGFkZHJlc3Mgb3IgYWRkcmVzcyBjb21wb25lbnQuIENvbXBsZXRlIHRoZSBhZGRyZXNzIGF0IHN0cmVldC1udW1iZXJcbiAgICAgICAgICAvLyBsZXZlbCBzbyB0aGUgZW1pdHRlZCBhZGRyZXNzIGNvbnRhaW5zIG9ubHkgdGhlIHZhbGlkIHN0cmVldCBudW1iZXIuXG4gICAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBub3RJbkxpc3RBbGxvd2VkPXRydWU6IGluY2x1ZGUgdGhlIHByZWZpbGxlZCBib3ggbnVtYmVyIGFzLWlzIChub3QtaW4tbGlzdClcbiAgICAgICAgICBhZGRyZXNzLmJveE51bWJlciA9IHByZWZpbGxCb3hOdW1iZXI7XG4gICAgICAgICAgaWYgKHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROdW1iZXIpIHtcbiAgICAgICAgICAgIGFkZHJlc3MuaG91c2VOdW1iZXIgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TnVtYmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhZGRyZXNzLnNlYXJjaEJhclN0cmluZyA9IHByZWZpbGxCb3hOdW1iZXI7XG4gICAgICAgICAgLy8gRm9yIGludGVybmFsIGVuZHBvaW50OiBjbGVhciBJRHMgdGhhdCBhcmUgbm8gbG9uZ2VyIHZhbGlkIHdoZW4gYm94IG51bWJlciBpcyBub3QgaW4gdGhlIGxpc3QuXG4gICAgICAgICAgLy8gLSBtYWlsQm94SWQgYW5kIHN1ZmZpeElkIGFyZSBhbHdheXMgY2xlYXJlZCAodmFsaWQgc3RyZWV0IG51bWJlciArIGludmFsaWQgYm94IG51bWJlcikuXG4gICAgICAgICAgLy8gLSBwZHBJZCBpcyBhbHNvIGNsZWFyZWQgd2hlbiBzdHJlZXQgbnVtYmVyIHdhcyBhbHNvIG5vdC1pbi1saXN0IChib3RoIGludmFsaWQpLlxuICAgICAgICAgIGNvbnN0IHN0cmVldE51bWJlcldhc05vdEluTGlzdCA9IGFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ25vdC1pbi1saXN0JykgJiYgYWRkcmVzc1snbm90LWluLWxpc3QnXSA9PT0gdHJ1ZTtcbiAgICAgICAgICBhZGRyZXNzLm1haWxCb3hJZCA9IG51bGw7XG4gICAgICAgICAgYWRkcmVzcy5tYWlsQm94aWQgPSBudWxsO1xuICAgICAgICAgIGFkZHJlc3Muc3VmZml4SWQgPSBudWxsO1xuICAgICAgICAgIGlmKGFkZHJlc3MuZ2VvU2FuY3Rpb24pe1xuICAgICAgICAgICAgYWRkcmVzcy5nZW9TYW5jdGlvbj1hZGRyZXNzLmdlb1NhbmN0aW9uLnN1YnN0cmluZygwLDM1KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN0cmVldE51bWJlcldhc05vdEluTGlzdCkge1xuICAgICAgICAgICAgYWRkcmVzcy5wZHBJZCA9IG51bGw7XG4gICAgICAgICAgICBpZihhZGRyZXNzLmdlb1NhbmN0aW9uKXtcbiAgICAgICAgICAgICAgYWRkcmVzcy5nZW9TYW5jdGlvbj1hZGRyZXNzLmdlb1NhbmN0aW9uLnN1YnN0cmluZygwLDI1KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICB9XG59IiwiXHJcbjxkaXYgY2xhc3M9XCJhYWN3aWRnZXQtYWRkcmVzcy1jb250YWluZXJcIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiYnBhYWMtZHJvcGRvd24tdmFsaWRhdGlvblwiICpuZ0lmPVwidmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25UeXBlID09PSAnU0hPVycgXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJwYWFjLXZhbGlkYXRlZC1pY29uXCIgKm5nSWY9XCJzZWxlY3RlZEFkZHJlc3MgJiYgdmFsaWRhdGlvbk1lc3NhZ2UhPT1udWxsICYmIHZhbGlkYXRpb25NZXNzYWdlLm1lc3NhZ2VUeXBlIT09bnVsbFwiPjwvZGl2PlxyXG4gICAgICAgIDwhLS0ge3sgdmFsaWRhdGlvbk1lc3NhZ2UgfCB0cmFuc2xhdGUgfX0gLS0+XHJcbiAgICAgICAge3sgdmFsaWRhdGlvbk1lc3NhZ2UudHJhbnNsYXRlZE1lc3NhZ2UgfX1cclxuICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIGJwLWFhY3dpZGdldC1hdXRvY29tcGxldGUtbG9jYWxpdHkgLS0+XHJcbiAgICAgICAgPGJwLWxvY2FsaXR5IGNsYXNzPVwiYWFjd2lkZ2V0LWFkZHJlc3MtbG9jYWxpdHlcIiAqbmdJZj1cImlzQ29tcG9uZW50UmVhZHlcIlxyXG4gICAgICAgIFtpc1JlYWRvbmx5XT1cImlzUmVhZG9ubHlcIlxyXG4gICAgICAgIFtpbmNsdWRlTGlzdE9mQm94ZXNdPVwiaW5jbHVkZUxpc3RPZkJveGVzXCJcclxuICAgICAgICBbaW5jbHVkZUxpc3RPZkJ1c2luZXNzTmFtZVdpdGhCb3hlc109XCJpbmNsdWRlTGlzdE9mQnVzaW5lc3NOYW1lV2l0aEJveGVzXCJcclxuICAgICAgICBbc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZV09XCJzaG93RGVidWdNZXNzYWdlVG9Db25zb2xlXCJcclxuICAgICAgICBbYmFzZVVybF09XCJ1c2VkTG9jYWxpdHlVcmxcIlxyXG4gICAgICAgIFtwcmVmaWxsRGF0YV09XCJsb2NhbGl0eVByZWZpbGxEYXRhXCJcclxuICAgICAgICBbbGFiZWxSZXNvdXJjZUtleV09XCInY29tbW9uLmxhYmVsLnBvc3RhbENvZGUnXCJcclxuICAgICAgICBbaW5wdXRUZXh0XT1cInBvc3RhbENvZGVMb2NhbGl0eVwiXHJcbiAgICAgICAgW2lucHV0TGFuZ109XCJzZWxlY3RlZExhbmd1YWdlXCJcclxuICAgICAgICBbbWVzc2FnZU9wdGlvbl09XCJtZXNzYWdlT3B0aW9uXCJcclxuICAgICAgICBbc29ydENyaXRlcmlhXT1cInNvcnRDcml0ZXJpYUxvY2FsaXR5XCJcclxuICAgICAgICBbbWF4U3VnZ2VzaW9uQ291bnRdPVwibWF4U3VnZ2VzdGlvbkxvY2FsaXR5XCIgXHJcbiAgICAgICAgW3Zpc2libGVTdWdnZXN0aW9uQ291bnRdPVwidmlzaWJsZVN1Z2dlc3Rpb25Mb2NhbGl0eUNvdW50XCJcclxuICAgICAgICBbYWxsb3dOb1ZhbGlkYXRpb25dPVwiYWxsb3dOb1ZhbGlkYXRpb25cIlxyXG4gICAgICAgIFt2YWxpZGF0ZWRCeUJhY2tlbmRdPVwidmFsaWRhdGVkQnlCYWNrZW5kXCJcclxuICAgICAgICBbbnVtYmVyT2ZFeGNlcHRpb25zXT1cIm51bWJlck9mRXhjZXB0aW9uc1wiXHJcblx0XHRbbmlzOUluUmVzcG9uc2VdPVwibmlzOUluUmVzcG9uc2VcIlxyXG4gICAgICAgIFtidXNpbmVzc05hbWVJblJlc3BvbnNlXT1cImJ1c2luZXNzTmFtZUluUmVzcG9uc2VcIlxyXG4gICAgICAgIChhZGRyZXNzQ2hhbmdlZCk9XCJzZXRBZGRyZXNzKCRldmVudCwgNClcIlxyXG4gICAgICAgIChtZXNzYWdlQ2hhbmdlZCk9XCJzZXRWYWxpZGF0aW9uTWVzc2FnZSgkZXZlbnQpXCJcclxuICAgICAgICAoZm9jdXNFdmVudCk9XCJjaGFuZ2VNaW5MZXZlbCgkZXZlbnQpXCIgXHJcbiAgICAgICAgKHRleHRDaGFuZ2VFdmVudCk9XCJyZXNldExvY2FsaXR5KCRldmVudClcIlxyXG4gICAgICAgIChjbGVhcklucHV0RXZlbnRFbWl0dGVyKT1cIm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcigkZXZlbnQpXCJcclxuICAgICAgICAocHJlZmlsbEV2ZW50RW1pdHRlcik9XCJvbkxvY2FsaXR5UHJlZmlsbEV2ZW50KCRldmVudClcIlxyXG4gICAgICAgIChudW1iZXJPZkV4Y2VwdGlvbnNFbWl0dGVyKT1cInNldE51bWJlck9mRXhjZXB0aW9ucygkZXZlbnQpXCI+PC9icC1sb2NhbGl0eT5cclxuXHJcbiAgICAgICAgPGJwLXN0cmVldCBjbGFzcz1cImFhY3dpZGdldC1hZGRyZXNzLXN0cmVldFwiXHJcbiAgICAgICAgW2lzUmVhZG9ubHldPVwiaXNSZWFkb25seVwiXHJcbiAgICAgICAgW2luY2x1ZGVMaXN0T2ZCb3hlc109XCJpbmNsdWRlTGlzdE9mQm94ZXNcIlxyXG4gICAgICAgIFtpbmNsdWRlTGlzdE9mQnVzaW5lc3NOYW1lV2l0aEJveGVzXT1cImluY2x1ZGVMaXN0T2ZCdXNpbmVzc05hbWVXaXRoQm94ZXNcIlxyXG4gICAgICAgIFtzaG93RGVidWdNZXNzYWdlVG9Db25zb2xlXT1cInNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGVcIlxyXG4gICAgICAgIFtiYXNlVXJsXT1cInVzZWRTdHJlZXRVcmxcIlxyXG4gICAgICAgIFtwcmVmaWxsRGF0YV09XCJzdHJlZXRQcmVmaWxsRGF0YVwiXHJcbiAgICAgICAgW2F1dG9maWxsRGF0YV09XCJzdHJlZXROYW1lQXV0b2ZpbGxEYXRhXCJcclxuICAgICAgICBbbGFiZWxSZXNvdXJjZUtleV09XCInY29tbW9uLmxhYmVsLnN0cmVldE5hbWUnXCJcclxuICAgICAgICBbaW5wdXRUZXh0XT1cInN0cmVldE5hbWVJbnB1dFwiXHJcbiAgICAgICAgW2lucHV0TGFuZ109XCJzZWxlY3RlZExhbmd1YWdlXCJcclxuICAgICAgICBbbWVzc2FnZU9wdGlvbl09XCJtZXNzYWdlT3B0aW9uXCJcclxuICAgICAgICBbcG9zdGFsQ29kZV09XCJwb3N0YWxDb2RlXCJcclxuICAgICAgICBbbG9jYWxpdHldPVwibG9jYWxpdHlcIlxyXG4gICAgICAgIFtzb3J0Q3JpdGVyaWFdPVwic29ydENyaXRlcmlhU3RyZWV0XCIgXHJcbiAgICAgICAgW21heFN1Z2dlc2lvbkNvdW50XT1cIm1heFN1Z2dlc3Rpb25TdHJlZXRcIlxyXG4gICAgICAgIFt2aXNpYmxlU3VnZ2VzaW9uQ291bnRdPVwidmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXRDb3VudFwiXHJcbiAgICAgICAgW2FsbG93Tm9WYWxpZGF0aW9uXT1cImFsbG93Tm9WYWxpZGF0aW9uXCJcclxuICAgICAgICBbdmFsaWRhdGVkQnlCYWNrZW5kXT1cInZhbGlkYXRlZEJ5QmFja2VuZFwiXHJcbiAgICAgICAgW251bWJlck9mRXhjZXB0aW9uc109XCJudW1iZXJPZkV4Y2VwdGlvbnNcIlxyXG4gICAgICAgIChhZGRyZXNzQ2hhbmdlZCk9XCJzZXRBZGRyZXNzKCRldmVudCwgMylcIlxyXG4gICAgICAgIChtZXNzYWdlQ2hhbmdlZCk9XCJzZXRWYWxpZGF0aW9uTWVzc2FnZSgkZXZlbnQpXCJcclxuICAgICAgICAoZm9jdXNFdmVudCk9XCJjaGFuZ2VNaW5MZXZlbCgkZXZlbnQpXCJcclxuICAgICAgICAodGV4dENoYW5nZUV2ZW50KT1cInJlc2V0U3RyZWV0KCRldmVudClcIlxyXG4gICAgICAgIChjbGVhcklucHV0RXZlbnRFbWl0dGVyKT1cIm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcigkZXZlbnQpXCJcclxuICAgICAgICAocHJlZmlsbEV2ZW50RW1pdHRlcik9XCJvblN0cmVldFByZWZpbGxFdmVudCgkZXZlbnQpXCJcclxuICAgICAgICAobnVtYmVyT2ZFeGNlcHRpb25zRW1pdHRlcik9XCJzZXROdW1iZXJPZkV4Y2VwdGlvbnMoJGV2ZW50KVwiPjwvYnAtc3RyZWV0PlxyXG5cclxuICAgICAgICA8YnAtc3RyZWV0LW51bWJlciBjbGFzcz1cImFhY3dpZGdldC1hZGRyZXNzLXN0cmVldG51bWJlclwiXHJcbiAgICAgICAgW2lzUmVhZG9ubHldPVwiaXNSZWFkb25seVwiXHJcbiAgICAgICAgW2luY2x1ZGVMaXN0T2ZCb3hlc109XCJpbmNsdWRlTGlzdE9mQm94ZXNcIlxyXG4gICAgICAgIFtpbmNsdWRlTGlzdE9mQnVzaW5lc3NOYW1lV2l0aEJveGVzXT1cImluY2x1ZGVMaXN0T2ZCdXNpbmVzc05hbWVXaXRoQm94ZXNcIlxyXG4gICAgICAgIFtzaG93RGVidWdNZXNzYWdlVG9Db25zb2xlXT1cInNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGVcIlxyXG4gICAgICAgIFtiYXNlVXJsXT1cInVzZWRTdHJlZXROdW1iZXJVcmxcIlxyXG4gICAgICAgIFtzZWxlY3RlZEFkZHJlc3NdPVwic3RyZWV0QWRkcmVzc1wiXHJcbiAgICAgICAgW3ByZWZpbGxEYXRhXT1cInN0cmVldE51bWJlclByZWZpbGxEYXRhXCJcclxuICAgICAgICBbYXV0b2ZpbGxEYXRhXT1cInN0cmVldE51bWJlckF1dG9maWxsRGF0YVwiXHJcbiAgICAgICAgW2xhYmVsUmVzb3VyY2VLZXldPVwiJ2NvbW1vbi5sYWJlbC5zdHJlZXROdW1iZXInXCJcclxuICAgICAgICBbaW5wdXRUZXh0XT1cInN0cmVldE51bWJlcklucHV0XCJcclxuICAgICAgICBbaW5wdXRMYW5nXT1cInNlbGVjdGVkTGFuZ3VhZ2VcIlxyXG4gICAgICAgIFttZXNzYWdlT3B0aW9uXT1cIm1lc3NhZ2VPcHRpb25cIlxyXG4gICAgICAgIFtwb3N0YWxDb2RlXT1cInBvc3RhbENvZGVcIiBcclxuICAgICAgICBbbG9jYWxpdHldPVwibG9jYWxpdHlcIiBcclxuICAgICAgICBbc3RyZWV0TmFtZV09XCJzdHJlZXRcIlxyXG4gICAgICAgIFtzb3J0Q3JpdGVyaWFdPVwic29ydENyaXRlcmlhU3RyZWV0TmJcIlxyXG4gICAgICAgIFttYXhTdWdnZXNpb25Db3VudF09XCJtYXhTdWdnZXN0aW9uU3RyZWV0TmJcIiBcclxuICAgICAgICBbdmlzaWJsZVN1Z2dlc2lvbkNvdW50XT1cInZpc2libGVTdWdnZXN0aW9uU3RyZWV0TmJDb3VudFwiXHJcbiAgICAgICAgW25vdEluTGlzdEFsbG93ZWRdPVwibm90SW5MaXN0QWxsb3dlZFwiXHJcbiAgICAgICAgW3N1Z2dlc3Rpb25MZXZlbF09XCJzdWdnZXN0aW9uTGV2ZWxcIlxyXG4gICAgICAgIFthbGxvd05vVmFsaWRhdGlvbl09XCJhbGxvd05vVmFsaWRhdGlvblwiXHJcbiAgICAgICAgW3ZhbGlkYXRlZEJ5QmFja2VuZF09XCJ2YWxpZGF0ZWRCeUJhY2tlbmRcIlxyXG4gICAgICAgIFtudW1iZXJPZkV4Y2VwdGlvbnNdPVwibnVtYmVyT2ZFeGNlcHRpb25zXCJcclxuICAgICAgICBbbmlzOUluUmVzcG9uc2VdPVwibmlzOUluUmVzcG9uc2VcIlxyXG4gICAgICAgIFtidXNpbmVzc05hbWVJblJlc3BvbnNlXT1cImJ1c2luZXNzTmFtZUluUmVzcG9uc2VcIlxyXG4gICAgICAgIChhZGRyZXNzQ2hhbmdlZCk9XCJzZXRBZGRyZXNzKCRldmVudCwgMilcIlxyXG4gICAgICAgIChzdHJlZXROdW1iZXJDaGFuZ2VkKT1cInNldEFkZHJlc3NTdHJlZXROdW1iZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgKG1lc3NhZ2VDaGFuZ2VkKT1cInNldFZhbGlkYXRpb25NZXNzYWdlKCRldmVudClcIlxyXG4gICAgICAgIChmb2N1c0V2ZW50KT1cImNoYW5nZU1pbkxldmVsKCRldmVudClcIlxyXG4gICAgICAgICh0ZXh0Q2hhbmdlRXZlbnQpPVwicmVzZXRTdHJlZXROdW1iZXIoJGV2ZW50LCBmYWxzZSlcIlxyXG4gICAgICAgIChjbGVhcklucHV0RXZlbnRFbWl0dGVyKT1cIm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcigkZXZlbnQpXCJcclxuICAgICAgICAocHJlZmlsbEV2ZW50RW1pdHRlcik9XCJvblN0cmVldE51bWJlclByZWZpbGxFdmVudCgkZXZlbnQpXCJcclxuICAgICAgICAobnVtYmVyT2ZFeGNlcHRpb25zRW1pdHRlcik9XCJzZXROdW1iZXJPZkV4Y2VwdGlvbnMoJGV2ZW50KVwiPjwvYnAtc3RyZWV0LW51bWJlcj5cclxuXHJcbiAgICAgICAgPGJwLWJveC1udW1iZXIgY2xhc3M9XCJhYWN3aWRnZXQtYWRkcmVzcy1ib3hudW1iZXJcIlxyXG4gICAgICAgIFtpc1JlYWRvbmx5XT1cImlzUmVhZG9ubHlcIlxyXG4gICAgICAgIFtzaG93RGVidWdNZXNzYWdlVG9Db25zb2xlXT1cInNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGVcIlxyXG4gICAgICAgIFtiYXNlVXJsXT1cInVzZWRCb3hOdW1iZXJVcmxcIlxyXG4gICAgICAgIFtzZWxlY3RlZEFkZHJlc3NdPVwic3RyZWV0TnVtYmVyQWRkcmVzc1wiXHJcbiAgICAgICAgW3ByZWZpbGxEYXRhXT1cImJveE51bWJlclByZWZpbGxEYXRhXCJcclxuICAgICAgICBbYXV0b2ZpbGxEYXRhXT1cImJveE51bWJlckF1dG9maWxsRGF0YVwiXHJcbiAgICAgICAgW2xhYmVsUmVzb3VyY2VLZXldPVwiJ2NvbW1vbi5sYWJlbC5ib3hOdW1iZXInXCJcclxuICAgICAgICBbaW5wdXRMYW5nXT1cInNlbGVjdGVkTGFuZ3VhZ2VcIlxyXG4gICAgICAgIFttZXNzYWdlT3B0aW9uXT1cIm1lc3NhZ2VPcHRpb25cIlxyXG4gICAgICAgIFtwb3N0YWxDb2RlXT1cInBvc3RhbENvZGVcIiBcclxuICAgICAgICBbbG9jYWxpdHldPVwibG9jYWxpdHlcIiBcclxuICAgICAgICBbc3RyZWV0TmFtZV09XCJzdHJlZXRcIiBcclxuICAgICAgICBbc3RyZWV0TnVtYmVyXT1cInN0cmVldE51bWJlclwiXHJcbiAgICAgICAgW3NvcnRDcml0ZXJpYV09XCJzb3J0Q3JpdGVyaWFCb3hOYlwiIFxyXG4gICAgICAgIFtuaXM5SW5SZXNwb25zZV09XCJuaXM5SW5SZXNwb25zZVwiXHJcbiAgICAgICAgW2J1c2luZXNzTmFtZUluUmVzcG9uc2VdPVwiYnVzaW5lc3NOYW1lSW5SZXNwb25zZVwiXHJcbiAgICAgICAgW21heFN1Z2dlc2lvbkNvdW50XT1cIm1heFN1Z2dlc3Rpb25Cb3hOYlwiXHJcbiAgICAgICAgW3Zpc2libGVTdWdnZXNpb25Db3VudF09XCJ2aXNpYmxlU3VnZ2VzdGlvbkJveE5iQ291bnRcIlxyXG4gICAgICAgIFtub3RJbkxpc3RBbGxvd2VkXT1cIm5vdEluTGlzdEFsbG93ZWRcIlxyXG4gICAgICAgIFtzdWdnZXN0aW9uTGV2ZWxdPVwic3VnZ2VzdGlvbkxldmVsXCJcclxuICAgICAgICBbYWxsb3dOb1ZhbGlkYXRpb25dPVwiYWxsb3dOb1ZhbGlkYXRpb25cIlxyXG4gICAgICAgIFt2YWxpZGF0ZWRCeUJhY2tlbmRdPVwidmFsaWRhdGVkQnlCYWNrZW5kXCJcclxuICAgICAgICBbbnVtYmVyT2ZFeGNlcHRpb25zXT1cIm51bWJlck9mRXhjZXB0aW9uc1wiXHJcbiAgICAgICAgKG1lc3NhZ2VDaGFuZ2VkKT1cInNldFZhbGlkYXRpb25NZXNzYWdlKCRldmVudClcIlxyXG4gICAgICAgIChhZGRyZXNzQ2hhbmdlZCk9XCJzZXRBZGRyZXNzKCRldmVudCwgMSlcIiBcclxuICAgICAgICAoYm94TnVtYmVyQ2hhbmdlZCk9XCJzZXRBZGRyZXNzQm94TnVtYmVyKCRldmVudClcIlxyXG4gICAgICAgIChmb2N1c0V2ZW50KT1cImNoYW5nZU1pbkxldmVsKCRldmVudClcIlxyXG4gICAgICAgICh0ZXh0Q2hhbmdlRXZlbnQpPVwicmVzZXRCb3hOdW1iZXIoJGV2ZW50LCBmYWxzZSlcIlxyXG4gICAgICAgIChjbGVhcklucHV0RXZlbnRFbWl0dGVyKT1cIm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcigkZXZlbnQpXCJcclxuICAgICAgICAocHJlZmlsbEV2ZW50RW1pdHRlcik9XCJvbkJveE51bWJlclByZWZpbGxFdmVudCgkZXZlbnQpXCJcclxuICAgICAgICAobnVtYmVyT2ZFeGNlcHRpb25zRW1pdHRlcik9XCJzZXROdW1iZXJPZkV4Y2VwdGlvbnMoJGV2ZW50KVwiPjwvYnAtYm94LW51bWJlcj5cclxuPC9kaXY+Il19