@bitgo-beta/sdk-coin-avaxp 2.0.1-beta.21 → 2.0.1-beta.210

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/CHANGELOG.md +122 -0
  2. package/dist/src/avaxp.d.ts +26 -5
  3. package/dist/src/avaxp.d.ts.map +1 -1
  4. package/dist/src/avaxp.js +106 -18
  5. package/dist/src/iface.d.ts +10 -7
  6. package/dist/src/iface.d.ts.map +1 -1
  7. package/dist/src/iface.js +1 -1
  8. package/dist/src/index.d.ts +1 -0
  9. package/dist/src/index.d.ts.map +1 -1
  10. package/dist/src/index.js +2 -1
  11. package/dist/src/lib/atomicTransactionBuilder.js +2 -2
  12. package/dist/src/lib/delegatorTxBuilder.js +2 -2
  13. package/dist/src/lib/exportInCTxBuilder.d.ts +5 -0
  14. package/dist/src/lib/exportInCTxBuilder.d.ts.map +1 -1
  15. package/dist/src/lib/exportInCTxBuilder.js +20 -12
  16. package/dist/src/lib/iface.d.ts +5 -0
  17. package/dist/src/lib/iface.d.ts.map +1 -1
  18. package/dist/src/lib/iface.js +1 -1
  19. package/dist/src/lib/transaction.d.ts +20 -1
  20. package/dist/src/lib/transaction.d.ts.map +1 -1
  21. package/dist/src/lib/transaction.js +73 -12
  22. package/dist/src/lib/utils.d.ts +12 -0
  23. package/dist/src/lib/utils.d.ts.map +1 -1
  24. package/dist/src/lib/utils.js +17 -1
  25. package/dist/src/lib/utxoEngine.js +3 -3
  26. package/dist/src/register.d.ts +3 -0
  27. package/dist/src/register.d.ts.map +1 -0
  28. package/dist/src/register.js +11 -0
  29. package/dist/test/resources/avaxp.d.ts +7 -0
  30. package/dist/test/resources/avaxp.d.ts.map +1 -1
  31. package/dist/test/resources/avaxp.js +74 -67
  32. package/dist/test/resources/errors.d.ts +1 -0
  33. package/dist/test/resources/errors.d.ts.map +1 -1
  34. package/dist/test/resources/errors.js +3 -2
  35. package/dist/test/resources/tx/exportC.js +3 -3
  36. package/dist/test/resources/tx/importC.js +2 -2
  37. package/dist/test/resources/tx/importP.js +2 -2
  38. package/dist/test/unit/avaxp.js +186 -24
  39. package/dist/test/unit/lib/exportC2PTxBuilder.js +17 -2
  40. package/dist/test/unit/lib/transactionBuilderFactory.js +52 -1
  41. package/dist/test/unit/lib/utxoEngine.js +8 -8
  42. package/dist/tsconfig.tsbuildinfo +3372 -1954
  43. package/package.json +8 -7
@@ -18,6 +18,9 @@ var __importStar = (this && this.__importStar) || function (mod) {
18
18
  __setModuleDefault(result, mod);
19
19
  return result;
20
20
  };
21
+ var __importDefault = (this && this.__importDefault) || function (mod) {
22
+ return (mod && mod.__esModule) ? mod : { "default": mod };
23
+ };
21
24
  Object.defineProperty(exports, "__esModule", { value: true });
22
25
  const AvaxpLib = __importStar(require("../../src/lib"));
23
26
  const sdk_test_1 = require("@bitgo-beta/sdk-test");
@@ -37,6 +40,7 @@ const importP_1 = require("../resources/tx/importP");
37
40
  const avaxp_1 = require("../resources/avaxp");
38
41
  const importC_1 = require("../resources/tx/importC");
39
42
  const exportC_1 = require("../resources/tx/exportC");
43
+ const assert_1 = __importDefault(require("assert"));
40
44
  describe('Avaxp', function () {
41
45
  const coinName = 'avaxp';
42
46
  const tcoinName = 't' + coinName;
@@ -362,26 +366,24 @@ describe('Avaxp', function () {
362
366
  should.not.exist(txExplain.memo);
363
367
  });
364
368
  it('should explain a unsigned export in C transaction', async () => {
365
- const importInPFee = 1000000;
366
369
  const testData = exportC_1.EXPORT_C;
367
370
  const txExplain = await basecoin.explainTransaction({ txHex: testData.unsignedTxHex });
368
- txExplain.outputAmount.should.equal((Number(testData.amount) + importInPFee).toString());
371
+ txExplain.outputAmount.should.equal(Number(testData.amount).toString());
369
372
  txExplain.type.should.equal(sdk_core_1.TransactionType.Export);
370
373
  txExplain.inputs[0].address.should.equal(testData.cHexAddress);
371
374
  txExplain.outputs[0].address.should.equal(testData.pAddresses.slice().sort().join('~'));
372
- txExplain.fee.fee.should.equal(testData.fee);
375
+ txExplain.fee.feeRate.should.equal(Number(testData.fee));
373
376
  txExplain.changeOutputs.should.be.empty();
374
377
  should.not.exist(txExplain.memo);
375
378
  });
376
379
  it('should explain a signed export in C transaction', async () => {
377
- const importInPFee = 1000000;
378
380
  const testData = exportC_1.EXPORT_C;
379
381
  const txExplain = await basecoin.explainTransaction({ txHex: testData.fullsigntxHex });
380
- txExplain.outputAmount.should.equal((Number(testData.amount) + importInPFee).toString());
382
+ txExplain.outputAmount.should.equal(Number(testData.amount).toString());
381
383
  txExplain.type.should.equal(sdk_core_1.TransactionType.Export);
382
384
  txExplain.inputs[0].address.should.equal(testData.cHexAddress);
383
385
  txExplain.outputs[0].address.should.equal(testData.pAddresses.slice().sort().join('~'));
384
- txExplain.fee.fee.should.equal(testData.fee);
386
+ txExplain.fee.feeRate.should.equal(Number(testData.fee));
385
387
  txExplain.changeOutputs.should.be.empty();
386
388
  should.not.exist(txExplain.memo);
387
389
  });
@@ -390,7 +392,7 @@ describe('Avaxp', function () {
390
392
  });
391
393
  });
392
394
  describe('verify transaction', function () {
393
- it('should succeed to verify signed transaction', async () => {
395
+ it('should succeed to verify signed add validator transaction', async () => {
394
396
  const txPrebuild = {
395
397
  txHex: testData.ADDVALIDATOR_SAMPLES.fullsigntxHex,
396
398
  txInfo: {},
@@ -399,7 +401,7 @@ describe('Avaxp', function () {
399
401
  const isTransactionVerified = await basecoin.verifyTransaction({ txParams, txPrebuild });
400
402
  isTransactionVerified.should.equal(true);
401
403
  });
402
- it('should succeed to verify half signed transaction', async () => {
404
+ it('should succeed to verify half signed add validator transaction', async () => {
403
405
  const txPrebuild = {
404
406
  txHex: testData.ADDVALIDATOR_SAMPLES.halfsigntxHex,
405
407
  txInfo: {},
@@ -408,19 +410,177 @@ describe('Avaxp', function () {
408
410
  const isTransactionVerified = await basecoin.verifyTransaction({ txParams, txPrebuild });
409
411
  isTransactionVerified.should.equal(true);
410
412
  });
411
- it('should succeed to verify unsigned transaction', async () => {
413
+ it('should succeed to verify unsigned add validator transaction', async () => {
412
414
  const txPrebuild = newTxPrebuild();
413
415
  const txParams = newTxParams();
414
416
  const isTransactionVerified = await basecoin.verifyTransaction({ txParams, txPrebuild });
415
417
  isTransactionVerified.should.equal(true);
416
418
  });
417
- it('should succeed to verify transactions when recipients has extra data', async function () {
419
+ it('should succeed to verify add validator transactions when recipients has extra data ', async function () {
418
420
  const txPrebuild = newTxPrebuild();
419
421
  const txParams = newTxParams();
420
422
  txParams.data = 'data';
421
423
  const validTransaction = await basecoin.verifyTransaction({ txParams, txPrebuild });
422
424
  validTransaction.should.equal(true);
423
425
  });
426
+ it('should succeed to verify import in C transaction', async () => {
427
+ const txPrebuild = {
428
+ txHex: importC_1.IMPORT_C.fullsigntxHex,
429
+ txInfo: {},
430
+ };
431
+ const txParams = {
432
+ recipients: [],
433
+ type: 'Import',
434
+ locktime: 0,
435
+ memo: undefined,
436
+ };
437
+ const isTransactionVerified = await basecoin.verifyTransaction({ txParams, txPrebuild });
438
+ isTransactionVerified.should.equal(true);
439
+ });
440
+ it('should succeed to verify import to P transaction', async () => {
441
+ const txPrebuild = {
442
+ txHex: importP_1.IMPORT_P.fullsigntxHex,
443
+ txInfo: {},
444
+ };
445
+ const txParams = {
446
+ recipients: [],
447
+ type: 'Import',
448
+ locktime: 0,
449
+ memo: undefined,
450
+ unspents: ['e8ixKnba52yufXrTVKrTXVQTj5cd5e6o6Lc3rVkhahDGEs72L:0'],
451
+ };
452
+ const isTransactionVerified = await basecoin.verifyTransaction({ txParams, txPrebuild });
453
+ isTransactionVerified.should.equal(true);
454
+ });
455
+ it('should fail to verify import to P transaction with wrong unspents', async () => {
456
+ const txPrebuild = {
457
+ txHex: importP_1.IMPORT_P.fullsigntxHex,
458
+ txInfo: {},
459
+ };
460
+ const txParams = {
461
+ recipients: [],
462
+ type: 'Import',
463
+ locktime: 0,
464
+ memo: undefined,
465
+ unspents: ['test:1'],
466
+ };
467
+ await basecoin
468
+ .verifyTransaction({
469
+ txParams,
470
+ txPrebuild,
471
+ })
472
+ .should.be.rejectedWith('Transaction should not contain the UTXO: e8ixKnba52yufXrTVKrTXVQTj5cd5e6o6Lc3rVkhahDGEs72L:0');
473
+ });
474
+ it('should succeed to verify export transaction', async () => {
475
+ const txPrebuild = {
476
+ txHex: avaxp_1.EXPORT_P_2_C_VERIFY.txHex,
477
+ txInfo: {},
478
+ };
479
+ const txParams = {
480
+ recipients: [
481
+ {
482
+ address: avaxp_1.EXPORT_P_2_C_VERIFY.receiveAddress,
483
+ amount: avaxp_1.EXPORT_P_2_C_VERIFY.amount,
484
+ },
485
+ ],
486
+ type: 'Export',
487
+ locktime: 0,
488
+ memo: {
489
+ value: avaxp_1.EXPORT_P_2_C_VERIFY.memo,
490
+ type: 'text',
491
+ },
492
+ };
493
+ const isTransactionVerified = await basecoin.verifyTransaction({ txParams, txPrebuild });
494
+ isTransactionVerified.should.equal(true);
495
+ });
496
+ it('should fail verify export transaction with wrong amount', async () => {
497
+ const txPrebuild = {
498
+ txHex: avaxp_1.EXPORT_P_2_C_VERIFY.txHex,
499
+ txInfo: {},
500
+ };
501
+ const txParams = {
502
+ recipients: [
503
+ {
504
+ address: avaxp_1.EXPORT_P_2_C_VERIFY.receiveAddress,
505
+ amount: '9999999',
506
+ },
507
+ ],
508
+ type: 'Export',
509
+ locktime: 0,
510
+ memo: {
511
+ value: avaxp_1.EXPORT_P_2_C_VERIFY.memo,
512
+ type: 'text',
513
+ },
514
+ };
515
+ await basecoin
516
+ .verifyTransaction({ txParams, txPrebuild })
517
+ .should.be.rejectedWith(`Tx total amount ${avaxp_1.EXPORT_P_2_C_VERIFY.amount} does not match with expected total amount field 9999999 and fixed fee 1000000`);
518
+ });
519
+ it('should fail verify export transaction with wrong c-address in memo', async () => {
520
+ const txPrebuild = {
521
+ txHex: avaxp_1.EXPORT_P_2_C_VERIFY.txHex,
522
+ txInfo: {},
523
+ };
524
+ const txParams = {
525
+ recipients: [
526
+ {
527
+ address: avaxp_1.EXPORT_P_2_C_VERIFY.receiveAddress2,
528
+ amount: avaxp_1.EXPORT_P_2_C_VERIFY.amount,
529
+ },
530
+ ],
531
+ type: 'Export',
532
+ locktime: 0,
533
+ memo: {
534
+ value: avaxp_1.EXPORT_P_2_C_VERIFY.memo,
535
+ type: 'text',
536
+ },
537
+ };
538
+ await basecoin
539
+ .verifyTransaction({ txParams, txPrebuild })
540
+ .should.be.rejectedWith(`Invalid C-chain receive address ${avaxp_1.EXPORT_P_2_C_VERIFY.receiveAddress}, does not match expected params address ${avaxp_1.EXPORT_P_2_C_VERIFY.receiveAddress2}`);
541
+ });
542
+ it('should fail verify export transaction with no memo', async () => {
543
+ const txPrebuild = {
544
+ txHex: exportC_1.EXPORT_C.unsignedTxHex,
545
+ txInfo: {},
546
+ };
547
+ const txParams = {
548
+ recipients: [
549
+ {
550
+ address: avaxp_1.EXPORT_P_2_C_VERIFY.receiveAddress2,
551
+ amount: avaxp_1.EXPORT_P_2_C_VERIFY.amount,
552
+ },
553
+ ],
554
+ type: 'Export',
555
+ locktime: 0,
556
+ };
557
+ await basecoin
558
+ .verifyTransaction({ txParams, txPrebuild })
559
+ .should.be.rejectedWith(`Export Tx requires a memo with c-chain address`);
560
+ });
561
+ it('should fail verify export transaction with invalid C address in memo', async () => {
562
+ const txPrebuild = {
563
+ txHex: avaxp_1.EXPORT_P_2_C.unsignedTxHex,
564
+ txInfo: {},
565
+ };
566
+ const txParams = {
567
+ recipients: [
568
+ {
569
+ address: avaxp_1.EXPORT_P_2_C.pAddresses,
570
+ amount: avaxp_1.EXPORT_P_2_C.amount,
571
+ },
572
+ ],
573
+ type: 'Export',
574
+ locktime: 0,
575
+ memo: {
576
+ value: avaxp_1.EXPORT_P_2_C.memo,
577
+ type: 'text',
578
+ },
579
+ };
580
+ await basecoin
581
+ .verifyTransaction({ txParams, txPrebuild })
582
+ .should.be.rejectedWith(`Txn memo must contain valid C-chain address destination, received: Export AVAX from P-Chain to C-Chain and consume multisig output and create multisig atomic output`);
583
+ });
424
584
  it('should fail verify transactions when have different type', async function () {
425
585
  const txParams = newTxParams();
426
586
  const txPrebuild = newTxPrebuild();
@@ -523,7 +683,11 @@ describe('Avaxp', function () {
523
683
  const multiSigValidAddress = 'P-fuji1yzpfsdalhfwkq2ceewgs9wv7k0uft40ydpuj59~invalid-address~P-fuji1hdk7ntw0huhqmlhlheme9t7scsy9lhfhw3ywy4';
524
684
  basecoin.isValidAddress(multiSigValidAddress).should.be.false();
525
685
  });
526
- it('should throw when verifying address if address length doesnt match keychain length', function () {
686
+ it('should validate valid c-chain address', () => {
687
+ const address = '0x1374a2046661f914d1687d85dbbceb9ac7910a29';
688
+ basecoin.isValidAddress(address).should.be.true();
689
+ });
690
+ it('should throw when verifying address if address length doesnt match keychain length', async function () {
527
691
  const validAddresses = [
528
692
  {
529
693
  address: 'P-fuji15x3z4rvk8e7vwa6g9lkyg89v5dwknp44858uex',
@@ -535,10 +699,10 @@ describe('Avaxp', function () {
535
699
  },
536
700
  ];
537
701
  for (const addressParams of validAddresses) {
538
- should.throws(() => basecoin.verifyAddress(addressParams));
702
+ await assert_1.default.rejects(async () => basecoin.verifyAddress(addressParams));
539
703
  }
540
704
  });
541
- it('should fail to verify invalid address', function () {
705
+ it('should fail to verify invalid address', async function () {
542
706
  const invalidAddresses = [
543
707
  {
544
708
  address: 'P-fuji103cmntssp6qnucejahddy42wcy4qty0uj42822',
@@ -550,29 +714,27 @@ describe('Avaxp', function () {
550
714
  },
551
715
  ];
552
716
  for (const address of invalidAddresses) {
553
- should.throws(() => basecoin.verifyAddress(address));
717
+ await assert_1.default.rejects(async () => basecoin.verifyAddress(address));
554
718
  }
555
719
  });
556
- it('should successfully verify is wallet address', function () {
557
- basecoin
558
- .isWalletAddress({
720
+ it('should successfully verify is wallet address', async function () {
721
+ (await basecoin.isWalletAddress({
559
722
  address: 'P-fuji15x3z4rvk8e7vwa6g9lkyg89v5dwknp44858uex~P-fuji1wq0d56pu54sgc5xpevm3ur6sf3l6kke70dz0l4~P-fuji1cjk4cvdfy6ffd4fh8umpnnrmjt0xdap02tcep6',
560
723
  keychains: keychains_1.keychains,
561
- })
562
- .should.be.true();
724
+ })).should.be.true();
563
725
  });
564
- it('should throw when address length and keychain length dont match', function () {
565
- should.throws(() => basecoin.isWalletAddress({
726
+ it('should throw when address length and keychain length dont match', async function () {
727
+ await assert_1.default.rejects(async () => basecoin.isWalletAddress({
566
728
  address: 'P-fuji1wq0d56pu54sgc5xpevm3ur6sf3l6kke70dz0l4~P-fuji1cjk4cvdfy6ffd4fh8umpnnrmjt0xdap02tcep6',
567
729
  keychains: keychains_1.keychains,
568
730
  }));
569
731
  });
570
- it('should throw when keychain is not of length 3', function () {
571
- should.throws(() => basecoin.isWalletAddress({
732
+ it('should throw when keychain is not of length 3', async function () {
733
+ await assert_1.default.rejects(async () => basecoin.isWalletAddress({
572
734
  address: 'P-fuji1wq0d56pu54sgc5xpevm3ur6sf3l6kke70dz0l4',
573
735
  keychains: keychains_1.keychains[0],
574
736
  }));
575
737
  });
576
738
  });
577
739
  });
578
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZheHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvYXZheHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsd0RBQTBDO0FBQzFDLG1EQUErRDtBQUMvRCxvQ0FBMkM7QUFDM0MsbUNBQXFDO0FBQ3JDLCtDQUFpQztBQUNqQyxpREFBK0M7QUFDL0MsaURBQTRDO0FBQzVDLDZEQUErQztBQUMvQyxzREFBbUQ7QUFDbkQsK0NBQTREO0FBQzVELHVDQUF3QztBQUN4Qyx5Q0FBaUQ7QUFDakQsMENBQTRCO0FBRTVCLG1EQUFxRjtBQUNyRixxREFBbUQ7QUFDbkQsOENBQTJHO0FBQzNHLHFEQUFtRDtBQUNuRCxxREFBbUQ7QUFFbkQsUUFBUSxDQUFDLE9BQU8sRUFBRTtJQUNoQixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUM7SUFDekIsTUFBTSxTQUFTLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQztJQUNqQyxJQUFJLEtBQW1CLENBQUM7SUFDeEIsSUFBSSxRQUFRLENBQUM7SUFDYixJQUFJLGFBQWEsQ0FBQztJQUNsQixJQUFJLFdBQVcsQ0FBQztJQUVoQixNQUFNLFVBQVUsR0FBRztRQUNqQixLQUFLLEVBQUUsUUFBUSxDQUFDLG9CQUFvQixDQUFDLGFBQWE7UUFDbEQsTUFBTSxFQUFFLEVBQUU7S0FDWCxDQUFDO0lBRUYsTUFBTSxRQUFRLEdBQUc7UUFDZixVQUFVLEVBQUUsRUFBRTtRQUNkLElBQUksRUFBRSxjQUFjO1FBQ3BCLGNBQWMsRUFBRTtZQUNkLFNBQVMsRUFBRSxRQUFRLENBQUMsb0JBQW9CLENBQUMsU0FBUztZQUNsRCxPQUFPLEVBQUUsUUFBUSxDQUFDLG9CQUFvQixDQUFDLE9BQU87WUFDOUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNO1lBQzVDLE1BQU0sRUFBRSxRQUFRLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCO1lBQ3ZELGlC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QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgQXZheHBMaWIgZnJvbSAnLi4vLi4vc3JjL2xpYic7XG5pbXBvcnQgeyBUZXN0Qml0R28sIFRlc3RCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay10ZXN0JztcbmltcG9ydCB7IEF2YXhQLCBUYXZheFAgfSBmcm9tICcuLi8uLi9zcmMvJztcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCAqIGFzIHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgQml0R29BUEkgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstYXBpJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi9yZXNvdXJjZXMvYXZheHAnO1xuaW1wb3J0IHsga2V5Y2hhaW5zIH0gZnJvbSAnLi4vcmVzb3VyY2VzL2tleWNoYWlucyc7XG5pbXBvcnQgeyBVdGlscyBhcyBLZXlQYWlyVXRpbHMgfSBmcm9tICcuLi8uLi9zcmMvbGliL3V0aWxzJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuLi8uLi9zcmMvbGliJztcbmltcG9ydCB7IEJ1ZmZlciBhcyBCdWZmZXJBdmF4IH0gZnJvbSAnYXZhbGFuY2hlJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IHsgSGFsZlNpZ25lZEFjY291bnRUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgSU1QT1JUX1AgfSBmcm9tICcuLi9yZXNvdXJjZXMvdHgvaW1wb3J0UCc7XG5pbXBvcnQgeyBBRERWQUxJREFUT1JfU0FNUExFUywgRVhQT1JUX1BfMl9DLCBFWFBPUlRfUF8yX0NfV0lUSE9VVF9DSEFOR0VPVVRQVVQgfSBmcm9tICcuLi9yZXNvdXJjZXMvYXZheHAnO1xuaW1wb3J0IHsgSU1QT1JUX0MgfSBmcm9tICcuLi9yZXNvdXJjZXMvdHgvaW1wb3J0Qyc7XG5pbXBvcnQgeyBFWFBPUlRfQyB9IGZyb20gJy4uL3Jlc291cmNlcy90eC9leHBvcnRDJztcblxuZGVzY3JpYmUoJ0F2YXhwJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBjb2luTmFtZSA9ICdhdmF4cCc7XG4gIGNvbnN0IHRjb2luTmFtZSA9ICd0JyArIGNvaW5OYW1lO1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgbGV0IGJhc2Vjb2luO1xuICBsZXQgbmV3VHhQcmVidWlsZDtcbiAgbGV0IG5ld1R4UGFyYW1zO1xuXG4gIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgdHhIZXg6IHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLnVuc2lnbmVkVHhIZXgsXG4gICAgdHhJbmZvOiB7fSxcbiAgfTtcblxuICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICByZWNpcGllbnRzOiBbXSxcbiAgICB0eXBlOiAnQWRkVmFsaWRhdG9yJyxcbiAgICBzdGFraW5nT3B0aW9uczoge1xuICAgICAgc3RhcnRUaW1lOiB0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5zdGFydFRpbWUsXG4gICAgICBlbmRUaW1lOiB0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5lbmRUaW1lLFxuICAgICAgbm9kZUlEOiB0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5ub2RlSUQsXG4gICAgICBhbW91bnQ6IHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLm1pblZhbGlkYXRvclN0YWtlLFxuICAgICAgZGVsZWdhdGlvbkZlZVJhdGU6IHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLmRlbGVnYXRpb25GZWUsXG4gICAgfSxcbiAgICBsb2NrdGltZTogMCxcbiAgICBtZW1vOiB7XG4gICAgICB2YWx1ZTogdGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMubWVtbyxcbiAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICB9LFxuICB9O1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHtcbiAgICAgIGVudjogJ21vY2snLFxuICAgIH0pO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3Rlcihjb2luTmFtZSwgQXZheFAuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3Rlcih0Y29pbk5hbWUsIFRhdmF4UC5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYmFzZWNvaW4gPSBiaXRnby5jb2luKHRjb2luTmFtZSk7XG4gICAgbmV3VHhQcmVidWlsZCA9ICgpID0+IHtcbiAgICAgIHJldHVybiBfLmNsb25lRGVlcCh0eFByZWJ1aWxkKTtcbiAgICB9O1xuICAgIG5ld1R4UGFyYW1zID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIF8uY2xvbmVEZWVwKHR4UGFyYW1zKTtcbiAgICB9O1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGluc3RhbnRpYXRlIHRoZSBjb2luJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBsb2NhbEJhc2Vjb2luID0gYml0Z28uY29pbih0Y29pbk5hbWUpO1xuICAgIGxvY2FsQmFzZWNvaW4uc2hvdWxkLmJlLmFuLmluc3RhbmNlb2YoVGF2YXhQKTtcblxuICAgIGxvY2FsQmFzZWNvaW4gPSBiaXRnby5jb2luKGNvaW5OYW1lKTtcbiAgICBsb2NhbEJhc2Vjb2luLnNob3VsZC5iZS5hbi5pbnN0YW5jZW9mKEF2YXhQKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gJyArIHRjb2luTmFtZSwgZnVuY3Rpb24gKCkge1xuICAgIGJhc2Vjb2luLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKHRjb2luTmFtZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIGZ1bGwgbmFtZScsIGZ1bmN0aW9uICgpIHtcbiAgICBiYXNlY29pbi5nZXRGdWxsTmFtZSgpLnNob3VsZC5lcXVhbCgnVGVzdG5ldCBBdmFsYW5jaGUgUC1DaGFpbicpO1xuICB9KTtcblxuICBkZXNjcmliZSgnS2V5cGFpcnM6JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSBrZXlwYWlyIGZyb20gcmFuZG9tIHNlZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gYmFzZWNvaW4uZ2VuZXJhdGVLZXlQYWlyKCk7XG4gICAgICBrZXlQYWlyLnNob3VsZC5oYXZlLnByb3BlcnR5KCdwdWInKTtcbiAgICAgIGtleVBhaXIuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3BydicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBhIGtleXBhaXIgZnJvbSBhIHNlZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZWVkVGV4dCA9IHRlc3REYXRhLlNFRURfQUNDT1VOVC5zZWVkO1xuICAgICAgY29uc3Qgc2VlZCA9IEJ1ZmZlci5mcm9tKHNlZWRUZXh0LCAnaGV4Jyk7XG4gICAgICBjb25zdCBrZXlQYWlyID0gYmFzZWNvaW4uZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuICAgICAga2V5UGFpci5wdWIuc2hvdWxkLmVxdWFsKHRlc3REYXRhLlNFRURfQUNDT1VOVC5wdWJsaWNLZXkpO1xuICAgICAga2V5UGFpci5wcnYuc2hvdWxkLmVxdWFsKHRlc3REYXRhLlNFRURfQUNDT1VOVC5wcml2YXRlS2V5KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYSBwdWJsaWMga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga2V5UGFpciA9IGJhc2Vjb2luLmdlbmVyYXRlS2V5UGFpcigpO1xuICAgICAga2V5UGFpci5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncHViJyk7XG4gICAgICBrZXlQYWlyLnNob3VsZC5oYXZlLnByb3BlcnR5KCdwcnYnKTtcblxuICAgICAgYmFzZWNvaW4uaXNWYWxpZFB1YihrZXlQYWlyLnB1Yikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhIHByaXZhdGUga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga2V5UGFpciA9IGJhc2Vjb2luLmdlbmVyYXRlS2V5UGFpcigpO1xuICAgICAga2V5UGFpci5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncHViJyk7XG4gICAgICBrZXlQYWlyLnNob3VsZC5oYXZlLnByb3BlcnR5KCdwcnYnKTtcblxuICAgICAgYmFzZWNvaW4uaXNWYWxpZFBydihrZXlQYWlyLnBydikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnU2lnbiBUcmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBjb25zdCBmYWN0b3J5ID0gbmV3IEF2YXhwTGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KHRjb2luTmFtZSkpO1xuXG4gICAgaXQoJ2J1aWxkIGFuZCBzaWduIGEgdHJhbnNhY3Rpb24gaW4gcmVndWxhciBtb2RlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVjb3ZlcnlNb2RlID0gZmFsc2U7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQXZheHBMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQodGNvaW5OYW1lKSlcbiAgICAgICAgLmdldFZhbGlkYXRvckJ1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLnRocmVzaG9sZClcbiAgICAgICAgLmxvY2t0aW1lKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLmxvY2t0aW1lKVxuICAgICAgICAucmVjb3Zlck1vZGUocmVjb3ZlcnlNb2RlKVxuICAgICAgICAuZnJvbVB1YktleSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS5iaXRnb0FkZHJlc3NlcylcbiAgICAgICAgLnN0YXJ0VGltZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS5zdGFydFRpbWUpXG4gICAgICAgIC5lbmRUaW1lKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLmVuZFRpbWUpXG4gICAgICAgIC5zdGFrZUFtb3VudCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS5zdGFrZUFtb3VudClcbiAgICAgICAgLmRlbGVnYXRpb25GZWVSYXRlKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLmRlbGVnYXRpb25GZWVSYXRlKVxuICAgICAgICAubm9kZUlEKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLm5vZGVJZClcbiAgICAgICAgLm1lbW8odGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1ZBTElEQVRPUl9TQU1QTEUubWVtbylcbiAgICAgICAgLnV0eG9zKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLnV0eG9zKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIGxldCB0eEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICB0eEhleC5zaG91bGQuZXF1YWwodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1ZBTElEQVRPUl9TQU1QTEUudW5zaWduZWRSYXdUeE5vblJlY292ZXJ5KTtcblxuICAgICAgY29uc3QgcHJpdmF0ZUtleSA9IHJlY292ZXJ5TW9kZVxuICAgICAgICA/IHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLmJhY2t1cFByaXZhdGVLZXlcbiAgICAgICAgOiB0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS51c2VyUHJpdmF0ZUtleTtcblxuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgdHhIZXg6IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksXG4gICAgICAgIH0sXG4gICAgICAgIHBydjogcHJpdmF0ZUtleSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGhhbGZTaWduZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGJhc2Vjb2luLnNpZ25UcmFuc2FjdGlvbihwYXJhbXMpO1xuICAgICAgdHhIZXggPSAoaGFsZlNpZ25lZFRyYW5zYWN0aW9uIGFzIEhhbGZTaWduZWRBY2NvdW50VHJhbnNhY3Rpb24pPy5oYWxmU2lnbmVkPy50eEhleDtcbiAgICAgIHR4SGV4LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS5oYWxmU2lnbmVkUmF3VHhOb25SZWNvdmVyeSk7XG4gICAgfSk7XG4gICAgaXQoJ2J1aWxkIGFuZCBzaWduIGEgdHJhbnNhY3Rpb24gaW4gcmVjb3ZlcnkgbW9kZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlY292ZXJ5TW9kZSA9IHRydWU7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQXZheHBMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQodGNvaW5OYW1lKSlcbiAgICAgICAgLmdldFZhbGlkYXRvckJ1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLnRocmVzaG9sZClcbiAgICAgICAgLmxvY2t0aW1lKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLmxvY2t0aW1lKVxuICAgICAgICAucmVjb3Zlck1vZGUocmVjb3ZlcnlNb2RlKVxuICAgICAgICAuZnJvbVB1YktleSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS5iaXRnb0FkZHJlc3NlcylcbiAgICAgICAgLnN0YXJ0VGltZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS5zdGFydFRpbWUpXG4gICAgICAgIC5lbmRUaW1lKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLmVuZFRpbWUpXG4gICAgICAgIC5zdGFrZUFtb3VudCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS5zdGFrZUFtb3VudClcbiAgICAgICAgLmRlbGVnYXRpb25GZWVSYXRlKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLmRlbGVnYXRpb25GZWVSYXRlKVxuICAgICAgICAubm9kZUlEKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLm5vZGVJZClcbiAgICAgICAgLm1lbW8odGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1ZBTElEQVRPUl9TQU1QTEUubWVtbylcbiAgICAgICAgLnV0eG9zKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLnV0eG9zKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIGxldCB0eEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICB0eEhleC5zaG91bGQuZXF1YWwodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1ZBTElEQVRPUl9TQU1QTEUudW5zaWduZWRSYXd0eFJlY292ZXJ5KTtcblxuICAgICAgY29uc3QgcHJpdmF0ZUtleSA9IHJlY292ZXJ5TW9kZVxuICAgICAgICA/IHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLmJhY2t1cFByaXZhdGVLZXlcbiAgICAgICAgOiB0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS51c2VyUHJpdmF0ZUtleTtcblxuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgdHhIZXg6IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksXG4gICAgICAgIH0sXG4gICAgICAgIHBydjogcHJpdmF0ZUtleSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGhhbGZTaWduZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGJhc2Vjb2luLnNpZ25UcmFuc2FjdGlvbihwYXJhbXMpO1xuICAgICAgdHhIZXggPSAoaGFsZlNpZ25lZFRyYW5zYWN0aW9uIGFzIEhhbGZTaWduZWRBY2NvdW50VHJhbnNhY3Rpb24pPy5oYWxmU2lnbmVkPy50eEhleDtcbiAgICAgIHR4SGV4LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS5oYWxmU2lnbmVkUmF3VHhSZWNvdmVyeSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJlIHJlamVjdGVkIGlmIGludmFsaWQga2V5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaW52YWxpZFByaXZhdGVLZXkgPSAnQUFBQUEnO1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy51bnNpZ25lZFR4SGV4KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogdHgudG9Ccm9hZGNhc3RGb3JtYXQoKSxcbiAgICAgICAgfSxcbiAgICAgICAgcHJ2OiBpbnZhbGlkUHJpdmF0ZUtleSxcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IGJhc2Vjb2luLnNpZ25UcmFuc2FjdGlvbihwYXJhbXMpLnNob3VsZC5iZS5yZWplY3RlZCgpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIG1haW5uZXQgYWRkcmVzcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHV0aWxzID0gbmV3IEtleVBhaXJVdGlscygpO1xuICAgICAgY29uc3QgeHBydiA9IHRlc3REYXRhLlNFRURfQUNDT1VOVC54UHJpdmF0ZUtleTtcbiAgICAgIGNvbnN0IGtwMSA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB4cHJ2IH0pO1xuICAgICAgY29uc3QgYWRkcmVzc0J1ZmZlcjEgPSBrcDEuZ2V0QWRkcmVzc0J1ZmZlcigpO1xuICAgICAgY29uc3QgYWRkcmVzczEgPSB1dGlscy5hZGRyZXNzVG9TdHJpbmcoJ2F2YXgnLCAnUCcsIEJ1ZmZlckF2YXguZnJvbShhZGRyZXNzQnVmZmVyMSkpO1xuXG4gICAgICBjb25zdCBrcDIgPSBuZXcgS2V5UGFpcih7IHBydjogeHBydiB9KTtcbiAgICAgIGNvbnN0IGFkZHJlc3NCdWZmZXIyID0ga3AyLmdldEFkZHJlc3NTYWZlQnVmZmVyKCk7XG4gICAgICBjb25zdCBhZGRyZXNzMiA9IHV0aWxzLmFkZHJlc3NUb1N0cmluZygnYXZheCcsICdQJywgQnVmZmVyQXZheC5mcm9tKGFkZHJlc3NCdWZmZXIyKSk7XG5cbiAgICAgIGNvbnN0IGtwMyA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB4cHJ2IH0pO1xuICAgICAgY29uc3QgYWRkcmVzczMgPSBrcDMuZ2V0QXZheFBBZGRyZXNzKCdhdmF4Jyk7XG5cbiAgICAgIGFkZHJlc3MxLnNob3VsZC5lcXVhbChhZGRyZXNzMik7XG4gICAgICBhZGRyZXNzMS5zaG91bGQuZXF1YWwoYWRkcmVzczMpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIHRlc3RuZXQgYWRkcmVzcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHV0aWxzID0gbmV3IEtleVBhaXJVdGlscygpO1xuICAgICAgY29uc3QgeHBydiA9IHRlc3REYXRhLlNFRURfQUNDT1VOVC54UHJpdmF0ZUtleTtcbiAgICAgIGNvbnN0IGtwMSA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB4cHJ2IH0pO1xuICAgICAgY29uc3QgYWRkcmVzc0J1ZmZlcjEgPSBrcDEuZ2V0QWRkcmVzc0J1ZmZlcigpO1xuICAgICAgY29uc3QgYWRkcmVzczEgPSB1dGlscy5hZGRyZXNzVG9TdHJpbmcoJ2Z1amknLCAnUCcsIEJ1ZmZlckF2YXguZnJvbShhZGRyZXNzQnVmZmVyMSkpO1xuXG4gICAgICBjb25zdCBrcDIgPSBuZXcgS2V5UGFpcih7IHBydjogeHBydiB9KTtcbiAgICAgIGNvbnN0IGFkZHJlc3NCdWZmZXIyID0ga3AyLmdldEFkZHJlc3NTYWZlQnVmZmVyKCk7XG4gICAgICBjb25zdCBhZGRyZXNzMiA9IHV0aWxzLmFkZHJlc3NUb1N0cmluZygnZnVqaScsICdQJywgQnVmZmVyQXZheC5mcm9tKGFkZHJlc3NCdWZmZXIyKSk7XG5cbiAgICAgIGNvbnN0IGtwMyA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB4cHJ2IH0pO1xuICAgICAgY29uc3QgYWRkcmVzczMgPSBrcDMuZ2V0QXZheFBBZGRyZXNzKCdmdWppJyk7XG5cbiAgICAgIGFkZHJlc3MxLnNob3VsZC5lcXVhbChhZGRyZXNzMik7XG4gICAgICBhZGRyZXNzMS5zaG91bGQuZXF1YWwoYWRkcmVzczMpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgbm90IGJlIHRoZSBzYW1lIGFkZHJlc3MgZnJvbSBzYW1lIGtleScsICgpID0+IHtcbiAgICAgIGNvbnN0IHV0aWxzID0gbmV3IEtleVBhaXJVdGlscygpO1xuICAgICAgY29uc3Qga3AxID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLkFDQ09VTlRfMS5wcml2a2V5IH0pO1xuICAgICAgY29uc3QgYWRkcmVzc0J1ZmZlcjEgPSBrcDEuZ2V0QWRkcmVzc0J1ZmZlcigpO1xuICAgICAgY29uc3QgYWRkcmVzczEgPSB1dGlscy5hZGRyZXNzVG9TdHJpbmcoJ2F2YXgnLCAnUCcsIEJ1ZmZlckF2YXguZnJvbShhZGRyZXNzQnVmZmVyMSkpO1xuXG4gICAgICBjb25zdCBrcDIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuQUNDT1VOVF8xLnByaXZrZXkgfSk7XG4gICAgICBjb25zdCBhZGRyZXNzQnVmZmVyMiA9IGtwMi5nZXRBZGRyZXNzU2FmZUJ1ZmZlcigpO1xuICAgICAgY29uc3QgYWRkcmVzczIgPSB1dGlscy5hZGRyZXNzVG9TdHJpbmcoJ2Z1amknLCAnUCcsIEJ1ZmZlckF2YXguZnJvbShhZGRyZXNzQnVmZmVyMikpO1xuXG4gICAgICBhZGRyZXNzMS5zaG91bGQubm90LmVxdWFsKGFkZHJlc3MyKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIG5vdCBiZSB0aGUgc2FtZSBhZGRyZXNzIGZyb20gZGlmZmVyZW50IGtleXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1dGlscyA9IG5ldyBLZXlQYWlyVXRpbHMoKTtcbiAgICAgIGNvbnN0IGtwMSA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5BQ0NPVU5UXzEucHJpdmtleSB9KTtcbiAgICAgIGNvbnN0IGFkZHJlc3NCdWZmZXIxID0ga3AxLmdldEFkZHJlc3NCdWZmZXIoKTtcbiAgICAgIGNvbnN0IGFkZHJlc3MxID0gdXRpbHMuYWRkcmVzc1RvU3RyaW5nKCdhdmF4JywgJ1AnLCBCdWZmZXJBdmF4LmZyb20oYWRkcmVzc0J1ZmZlcjEpKTtcblxuICAgICAgY29uc3Qga3AyID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLkFDQ09VTlRfMy5wcml2a2V5IH0pO1xuICAgICAgY29uc3QgYWRkcmVzc0J1ZmZlcjIgPSBrcDIuZ2V0QWRkcmVzc1NhZmVCdWZmZXIoKTtcbiAgICAgIGNvbnN0IGFkZHJlc3MyID0gdXRpbHMuYWRkcmVzc1RvU3RyaW5nKCdhdmF4JywgJ1AnLCBCdWZmZXJBdmF4LmZyb20oYWRkcmVzc0J1ZmZlcjIpKTtcblxuICAgICAgYWRkcmVzczEuc2hvdWxkLm5vdC5lcXVhbChhZGRyZXNzMik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTaWduIE1lc3NhZ2UnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBiZSBwZXJmb3JtZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyVG9TaWduID0gbmV3IEF2YXhwTGliLktleVBhaXIoKTtcbiAgICAgIGNvbnN0IHBydktleSA9IGtleVBhaXJUb1NpZ24uZ2V0UHJpdmF0ZUtleSgpO1xuICAgICAgY29uc3Qga2V5UGFpciA9IGtleVBhaXJUb1NpZ24uZ2V0S2V5cygpO1xuICAgICAgY29uc3QgbWVzc2FnZVRvU2lnbiA9IEJ1ZmZlci5mcm9tKHJhbmRvbUJ5dGVzKDMyKSk7XG4gICAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBiYXNlY29pbi5zaWduTWVzc2FnZShrZXlQYWlyLCBtZXNzYWdlVG9TaWduLnRvU3RyaW5nKCdoZXgnKSk7XG5cbiAgICAgIGNvbnN0IHZlcmlmeSA9IEF2YXhwTGliLlV0aWxzLnZlcmlmeVNpZ25hdHVyZShiYXNlY29pbi5fc3RhdGljc0NvaW4ubmV0d29yaywgbWVzc2FnZVRvU2lnbiwgc2lnbmF0dXJlLCBwcnZLZXkhKTtcbiAgICAgIHZlcmlmeS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHdpdGggbWlzc2luZyBwcml2YXRlIGtleScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgQXZheHBMaWIuS2V5UGFpcih7XG4gICAgICAgIHB1YjogdGVzdERhdGEuU0VFRF9BQ0NPVU5ULnB1YmxpY0tleUNiNTgsXG4gICAgICB9KS5nZXRLZXlzKCk7XG4gICAgICBjb25zdCBtZXNzYWdlVG9TaWduID0gQnVmZmVyLmZyb20ocmFuZG9tQnl0ZXMoMzIpKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBhd2FpdCBiYXNlY29pbi5zaWduTWVzc2FnZShrZXlQYWlyLCBtZXNzYWdlVG9TaWduKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIGtleSBwYWlyIG9wdGlvbnMnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0V4cGxhaW4gVHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgaGFsZiBzaWduZWQgQWRkVmFsaWRhdG9yIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdERhdGEgPSBBRERWQUxJREFUT1JfU0FNUExFUztcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IGhhbGZTaWduZWQ6IHsgdHhIZXg6IHRlc3REYXRhLmhhbGZzaWdudHhIZXggfSB9KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLm1pblZhbGlkYXRvclN0YWtlKTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQWRkVmFsaWRhdG9yKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLm5vZGVJRCk7XG4gICAgICB0eEV4cGxhaW4uY2hhbmdlT3V0cHV0c1swXS5hZGRyZXNzLnNwbGl0KCd+JykubGVuZ3RoLnNob3VsZC5lcXVhbCgzKTtcbiAgICAgIHR4RXhwbGFpbi5tZW1vLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5tZW1vKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIHNpZ25lZCBBZGRWYWxpZGF0b3IgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YSA9IEFERFZBTElEQVRPUl9TQU1QTEVTO1xuICAgICAgY29uc3QgdHhFeHBsYWluID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHsgdHhIZXg6IHRlc3REYXRhLmZ1bGxzaWdudHhIZXggfSk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5taW5WYWxpZGF0b3JTdGFrZSk7XG4gICAgICB0eEV4cGxhaW4udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkFkZFZhbGlkYXRvcik7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5ub2RlSUQpO1xuICAgICAgdHhFeHBsYWluLmNoYW5nZU91dHB1dHNbMF0uYWRkcmVzcy5zcGxpdCgnficpLmxlbmd0aC5zaG91bGQuZXF1YWwoMyk7XG4gICAgICB0eEV4cGxhaW4ubWVtby5zaG91bGQuZXF1YWwodGVzdERhdGEubWVtbyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSBoYWxmIHNpZ25lZCBleHBvcnQgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YSA9IEVYUE9SVF9QXzJfQztcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IGhhbGZTaWduZWQ6IHsgdHhIZXg6IHRlc3REYXRhLmhhbGZzaWdudHhIZXggfSB9KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmFtb3VudCk7XG4gICAgICB0eEV4cGxhaW4udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkV4cG9ydCk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5wQWRkcmVzc2VzLnNvcnQoKS5qb2luKCd+JykpO1xuICAgICAgdHhFeHBsYWluLmNoYW5nZU91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEucEFkZHJlc3Nlcy5zb3J0KCkuam9pbignficpKTtcbiAgICAgIHR4RXhwbGFpbi5tZW1vLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5tZW1vKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIHNpZ25lZCBleHBvcnQgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YSA9IEVYUE9SVF9QXzJfQztcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4OiB0ZXN0RGF0YS5mdWxsc2lnbnR4SGV4IH0pO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEuYW1vdW50KTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuRXhwb3J0KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLnBBZGRyZXNzZXMuc29ydCgpLmpvaW4oJ34nKSk7XG4gICAgICB0eEV4cGxhaW4uY2hhbmdlT3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5wQWRkcmVzc2VzLnNvcnQoKS5qb2luKCd+JykpO1xuICAgICAgdHhFeHBsYWluLm1lbW8uc2hvdWxkLmVxdWFsKHRlc3REYXRhLm1lbW8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgaGFsZiBzaWduZWQgZXhwb3J0IHRyYW5zYWN0aW9uIHdpdGhvdXQgY2Fobmdlb3V0cHV0ICcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRlc3REYXRhID0gRVhQT1JUX1BfMl9DX1dJVEhPVVRfQ0hBTkdFT1VUUFVUO1xuICAgICAgY29uc3QgdHhFeHBsYWluID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgICAgaGFsZlNpZ25lZDogeyB0eEhleDogdGVzdERhdGEuaGFsZnNpZ250eEhleCB9LFxuICAgICAgfSk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5hbW91bnQpO1xuICAgICAgdHhFeHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5FeHBvcnQpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEucEFkZHJlc3Nlcy5zb3J0KCkuam9pbignficpKTtcbiAgICAgIHR4RXhwbGFpbi5jaGFuZ2VPdXRwdXRzLnNob3VsZC5iZS5lbXB0eSgpO1xuICAgICAgdHhFeHBsYWluLm1lbW8uc2hvdWxkLmVxdWFsKHRlc3REYXRhLm1lbW8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgc2lnbmVkIGV4cG9ydCB0cmFuc2FjdGlvbiB3aXRob3V0IGNhaG5nZW91dHB1dCAnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YSA9IEVYUE9SVF9QXzJfQ19XSVRIT1VUX0NIQU5HRU9VVFBVVDtcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4OiB0ZXN0RGF0YS5mdWxsc2lnbnR4SGV4IH0pO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEuYW1vdW50KTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuRXhwb3J0KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLnBBZGRyZXNzZXMuc29ydCgpLmpvaW4oJ34nKSk7XG4gICAgICB0eEV4cGxhaW4uY2hhbmdlT3V0cHV0cy5zaG91bGQuYmUuZW1wdHkoKTtcbiAgICAgIHR4RXhwbGFpbi5tZW1vLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5tZW1vKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIGhhbGYgc2lnbmVkIGltcG9ydCB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRlc3REYXRhID0gSU1QT1JUX1A7XG4gICAgICBjb25zdCB0eEV4cGxhaW4gPSBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgICBoYWxmU2lnbmVkOiB7IHR4SGV4OiB0ZXN0RGF0YS5oYWxmc2lnbnR4SGV4IH0sXG4gICAgICB9KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKChOdW1iZXIodGVzdERhdGEuYW1vdW50KSAtIHR4RXhwbGFpbi5mZWU/LmZlZSkudG9TdHJpbmcoKSk7XG4gICAgICB0eEV4cGxhaW4udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkltcG9ydCk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5wQWRkcmVzc2VzLnNvcnQoKS5qb2luKCd+JykpO1xuICAgICAgdHhFeHBsYWluLmNoYW5nZU91dHB1dHMuc2hvdWxkLmJlLmVtcHR5KCk7XG4gICAgICB0eEV4cGxhaW4ubWVtby5zaG91bGQuZXF1YWwodGVzdERhdGEubWVtbyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSBzaWduZWQgaW1wb3J0IHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdERhdGEgPSBJTVBPUlRfUDtcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4OiB0ZXN0RGF0YS5mdWxsc2lnbnR4SGV4IH0pO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwoKE51bWJlcih0ZXN0RGF0YS5hbW91bnQpIC0gdHhFeHBsYWluLmZlZT8uZmVlKS50b1N0cmluZygpKTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuSW1wb3J0KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLnBBZGRyZXNzZXMuc29ydCgpLmpvaW4oJ34nKSk7XG4gICAgICB0eEV4cGxhaW4uY2hhbmdlT3V0cHV0cy5zaG91bGQuYmUuZW1wdHkoKTtcbiAgICAgIHR4RXhwbGFpbi5tZW1vLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5tZW1vKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIGhhbGYgc2lnbmVkIGltcG9ydCBpbiBDIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdERhdGEgPSBJTVBPUlRfQztcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4OiB0ZXN0RGF0YS5oYWxmc2lnbnR4SGV4IH0pO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwoKE51bWJlcih0ZXN0RGF0YS5hbW91bnQpIC0gdHhFeHBsYWluLmZlZT8uZmVlKS50b1N0cmluZygpKTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuSW1wb3J0KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLnRvKTtcbiAgICAgIHR4RXhwbGFpbi5jaGFuZ2VPdXRwdXRzLnNob3VsZC5iZS5lbXB0eSgpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdCh0eEV4cGxhaW4ubWVtbyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSBzaWduZWQgaW1wb3J0IGluIEMgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YSA9IElNUE9SVF9DO1xuICAgICAgY29uc3QgdHhFeHBsYWluID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHsgdHhIZXg6IHRlc3REYXRhLmZ1bGxzaWdudHhIZXggfSk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCgoTnVtYmVyKHRlc3REYXRhLmFtb3VudCkgLSB0eEV4cGxhaW4uZmVlPy5mZWUpLnRvU3RyaW5nKCkpO1xuICAgICAgdHhFeHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5JbXBvcnQpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEudG8pO1xuICAgICAgdHhFeHBsYWluLmNoYW5nZU91dHB1dHMuc2hvdWxkLmJlLmVtcHR5KCk7XG4gICAgICBzaG91bGQubm90LmV4aXN0KHR4RXhwbGFpbi5tZW1vKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIHVuc2lnbmVkIGV4cG9ydCBpbiBDIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaW1wb3J0SW5QRmVlID0gMTAwMDAwMDtcbiAgICAgIGNvbnN0IHRlc3REYXRhID0gRVhQT1JUX0M7XG4gICAgICBjb25zdCB0eEV4cGxhaW4gPSBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oeyB0eEhleDogdGVzdERhdGEudW5zaWduZWRUeEhleCB9KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKChOdW1iZXIodGVzdERhdGEuYW1vdW50KSArIGltcG9ydEluUEZlZSkudG9TdHJpbmcoKSk7XG4gICAgICB0eEV4cGxhaW4udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkV4cG9ydCk7XG4gICAgICB0eEV4cGxhaW4uaW5wdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLmNIZXhBZGRyZXNzKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLnBBZGRyZXNzZXMuc2xpY2UoKS5zb3J0KCkuam9pbignficpKTtcbiAgICAgIHR4RXhwbGFpbi5mZWUuZmVlLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5mZWUpO1xuICAgICAgdHhFeHBsYWluLmNoYW5nZU91dHB1dHMuc2hvdWxkLmJlLmVtcHR5KCk7XG4gICAgICBzaG91bGQubm90LmV4aXN0KHR4RXhwbGFpbi5tZW1vKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIHNpZ25lZCBleHBvcnQgaW4gQyB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGltcG9ydEluUEZlZSA9IDEwMDAwMDA7XG4gICAgICBjb25zdCB0ZXN0RGF0YSA9IEVYUE9SVF9DO1xuICAgICAgY29uc3QgdHhFeHBsYWluID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHsgdHhIZXg6IHRlc3REYXRhLmZ1bGxzaWdudHhIZXggfSk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCgoTnVtYmVyKHRlc3REYXRhLmFtb3VudCkgKyBpbXBvcnRJblBGZWUpLnRvU3RyaW5nKCkpO1xuICAgICAgdHhFeHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5FeHBvcnQpO1xuICAgICAgdHhFeHBsYWluLmlucHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5jSGV4QWRkcmVzcyk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5wQWRkcmVzc2VzLnNsaWNlKCkuc29ydCgpLmpvaW4oJ34nKSk7XG4gICAgICB0eEV4cGxhaW4uZmVlLmZlZS5zaG91bGQuZXF1YWwodGVzdERhdGEuZmVlKTtcbiAgICAgIHR4RXhwbGFpbi5jaGFuZ2VPdXRwdXRzLnNob3VsZC5iZS5lbXB0eSgpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdCh0eEV4cGxhaW4ubWVtbyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgd2hlbiBhIHR4IGlzIG5vdCBwYXNzZWQgYXMgcGFyYW1ldGVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHt9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdtaXNzaW5nIHRyYW5zYWN0aW9uIGhleCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndmVyaWZ5IHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgc2lnbmVkIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgdHhIZXg6IHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLmZ1bGxzaWdudHhIZXgsXG4gICAgICAgIHR4SW5mbzoge30sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSBuZXdUeFBhcmFtcygpO1xuICAgICAgY29uc3QgaXNUcmFuc2FjdGlvblZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCB9KTtcbiAgICAgIGlzVHJhbnNhY3Rpb25WZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IGhhbGYgc2lnbmVkIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgdHhIZXg6IHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLmhhbGZzaWdudHhIZXgsXG4gICAgICAgIHR4SW5mbzoge30sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSBuZXdUeFBhcmFtcygpO1xuICAgICAgY29uc3QgaXNUcmFuc2FjdGlvblZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCB9KTtcbiAgICAgIGlzVHJhbnNhY3Rpb25WZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IHVuc2lnbmVkIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25WZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSk7XG4gICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSB0cmFuc2FjdGlvbnMgd2hlbiByZWNpcGllbnRzIGhhcyBleHRyYSBkYXRhJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIHR4UGFyYW1zLmRhdGEgPSAnZGF0YSc7XG5cbiAgICAgIGNvbnN0IHZhbGlkVHJhbnNhY3Rpb24gPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkIH0pO1xuICAgICAgdmFsaWRUcmFuc2FjdGlvbi5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdmVyaWZ5IHRyYW5zYWN0aW9ucyB3aGVuIGhhdmUgZGlmZmVyZW50IHR5cGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IG5ld1R4UGFyYW1zKCk7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuICAgICAgdHhQYXJhbXMudHlwZSA9ICdhZGREZWxlZ2F0b3InO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnVHggdHlwZSBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zIHR5cGUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB2ZXJpZnkgdHJhbnNhY3Rpb25zIHdoZW4gaGF2ZSBkaWZmZXJlbnQgbm9kZUlkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSBuZXdUeFBhcmFtcygpO1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIHR4UGFyYW1zLnN0YWtpbmdPcHRpb25zLm5vZGVJRCA9ICdOb2RlSUQtTWR0ZVM5VTk4N1BZN2l3QTVQY3ozc0tWcHJKQWJBdkU3JztcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXMsXG4gICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ1R4IG91dHB1dHMgZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcycpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgZmFpbCB2ZXJpZnkgd2hlbiBpbnB1dCBgbm9kZUlkYCBpcyBhYnNlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSBuZXdUeFBhcmFtcygpO1xuICAgICAgdHhQYXJhbXMuc3Rha2luZ09wdGlvbnMubm9kZUlEID0gdW5kZWZpbmVkO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnVHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdmVyaWZ5IHRyYW5zYWN0aW9ucyB3aGVuIGhhdmUgZGlmZmVyZW50IGFtb3VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBuZXdUeFByZWJ1aWxkKCk7XG4gICAgICB0eFBhcmFtcy5zdGFraW5nT3B0aW9ucy5hbW91bnQgPSAnMjAwMDAwMDAwMCc7XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UGFyYW1zLFxuICAgICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdUeCBvdXRwdXRzIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdHhQYXJhbXMnKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGZhaWwgdmVyaWZ5IHRyYW5zYWN0aW9ucyB3aGVuIGFtb3VudCBpcyBudW1iZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IG5ld1R4UGFyYW1zKCk7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuICAgICAgdHhQYXJhbXMuc3Rha2luZ09wdGlvbnMuYW1vdW50ID0gMTAwMDAwMDAwMDtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXMsXG4gICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ1R4IG91dHB1dHMgZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHZlcmlmeSB0cmFuc2FjdGlvbnMgd2hlbiBhbW91bnQgaXMgYWJzZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSBuZXdUeFBhcmFtcygpO1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIHR4UGFyYW1zLnN0YWtpbmdPcHRpb25zLmFtb3VudCA9IHVuZGVmaW5lZDtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXMsXG4gICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ1R4IG91dHB1dHMgZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcycpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVmFsaWRhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWxpZEFkZHJlc3MgPSAnUC1mdWppMTVqYW13dWtmcWt3aGU4ejI2dGpxeGVqdGpkM2prOXZqNGtteHdhJztcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKHZhbGlkQWRkcmVzcykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2YWxpZGF0ZSBpbnZhbGlkIGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbnZhbGlkQWRkcmVzc2VzID0gW3VuZGVmaW5lZCwgJycsICdhc2RhZHNhYWYnLCAnMTV4M3o0cnZrOGU3dndhNmc5bGt5Zzg5djVkd2tucDQ0ODU4dWV4J107XG4gICAgICBmb3IgKGNvbnN0IGFkZHJlc3Mgb2YgaW52YWxpZEFkZHJlc3Nlcykge1xuICAgICAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYW4gYXJyYXkgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbGlkQWRkcmVzc2VzID0gW1xuICAgICAgICAnUC1mdWppMTV4M3o0cnZrOGU3dndhNmc5bGt5Zzg5djVkd2tucDQ0ODU4dWV4JyxcbiAgICAgICAgJ1AtYXZheDE0M3E4bHN5M3k0a2U5ZDZ6ZWx0cmU4dTJhdGVlZDZ1azlrYTBudScsXG4gICAgICAgICdOb2RlSUQtMTQzcThsc3kzeTRrZTlkNnplbHRyZTh1MmF0ZWVkNnVrOWthMG51JyxcbiAgICAgIF07XG5cbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKHZhbGlkQWRkcmVzc2VzKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZhbGlkYXRlIGFuIGFycmF5IGFkZHJlc3Mgd2l0aCBpbnZhbGlkIGFkZHJlc3NzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsaWRBZGRyZXNzZXMgPSBbXG4gICAgICAgICdQLWZ1amkxNXgzejRydms4ZTd2d2E2Zzlsa3lnODl2NWR3a25wNDQ4NTh1ZXgnLFxuICAgICAgICAnUC1hdmF4MTQzcThsc3kzeTRrZTlkNnplbHRyZTh1MmF0ZWVkNnVrOWthMG51JyxcbiAgICAgICAgJ2ludmFsaWQtYWRkcmVzcycsXG4gICAgICBdO1xuXG4gICAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcyh2YWxpZEFkZHJlc3Nlcykuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGEgbXVsdHNpZyBhZGRyZXNzIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG11bHRpU2lnVmFsaWRBZGRyZXNzID1cbiAgICAgICAgJ1AtZnVqaTF5enBmc2RhbGhmd2txMmNlZXdnczl3djdrMHVmdDQweWRwdWo1OX5QLWZ1amkxMDNjbW50c3NwNnFudWNlamFoZGR5NDJ3Y3k0cXR5MHVqNDI4MjJ+UC1mdWppMWhkazdudHcwaHVocW1saGxoZW1lOXQ3c2NzeTlsaGZodzN5d3k0JztcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKG11bHRpU2lnVmFsaWRBZGRyZXNzKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZhbGlkYXRlIGEgbXVsdHNpZyBhZGRyZXNzIHN0cmluZyB3aXRoIGludmFsaWQgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG11bHRpU2lnVmFsaWRBZGRyZXNzID1cbiAgICAgICAgJ1AtZnVqaTF5enBmc2RhbGhmd2txMmNlZXdnczl3djdrMHVmdDQweWRwdWo1OX5pbnZhbGlkLWFkZHJlc3N+UC1mdWppMWhkazdudHcwaHVocW1saGxoZW1lOXQ3c2NzeTlsaGZodzN5d3k0JztcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKG11bHRpU2lnVmFsaWRBZGRyZXNzKS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiB2ZXJpZnlpbmcgYWRkcmVzcyBpZiBhZGRyZXNzIGxlbmd0aCBkb2VzbnQgbWF0Y2gga2V5Y2hhaW4gbGVuZ3RoJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsaWRBZGRyZXNzZXMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiAnUC1mdWppMTV4M3o0cnZrOGU3dndhNmc5bGt5Zzg5djVkd2tucDQ0ODU4dWV4JyxcbiAgICAgICAgICBrZXljaGFpbnMsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiAnUC1mdWppMXdxMGQ1NnB1NTRzZ2M1eHBldm0zdXI2c2YzbDZra2U3MGR6MGw0JyxcbiAgICAgICAgICBrZXljaGFpbnMsXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBmb3IgKGNvbnN0IGFkZHJlc3NQYXJhbXMgb2YgdmFsaWRBZGRyZXNzZXMpIHtcbiAgICAgICAgc2hvdWxkLnRocm93cygoKSA9PiBiYXNlY29pbi52ZXJpZnlBZGRyZXNzKGFkZHJlc3NQYXJhbXMpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgaW52YWxpZCBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaW52YWxpZEFkZHJlc3NlcyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdQLWZ1amkxMDNjbW50c3NwNnFudWNlamFoZGR5NDJ3Y3k0cXR5MHVqNDI4MjInLFxuICAgICAgICAgIGtleWNoYWlucyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdQLWF2YXgxNDNxOGxzeTN5NGtlOWQ2emVsdHJlOHUyYXRlZWQ2dWs5a2EwbnUnLFxuICAgICAgICAgIGtleWNoYWlucyxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGZvciAoY29uc3QgYWRkcmVzcyBvZiBpbnZhbGlkQWRkcmVzc2VzKSB7XG4gICAgICAgIHNob3VsZC50aHJvd3MoKCkgPT4gYmFzZWNvaW4udmVyaWZ5QWRkcmVzcyhhZGRyZXNzKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2Nlc3NmdWxseSB2ZXJpZnkgaXMgd2FsbGV0IGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiYXNlY29pblxuICAgICAgICAuaXNXYWxsZXRBZGRyZXNzKHtcbiAgICAgICAgICBhZGRyZXNzOlxuICAgICAgICAgICAgJ1AtZnVqaTE1eDN6NHJ2azhlN3Z3YTZnOWxreWc4OXY1ZHdrbnA0NDg1OHVleH5QLWZ1amkxd3EwZDU2cHU1NHNnYzV4cGV2bTN1cjZzZjNsNmtrZTcwZHowbDR+UC1mdWppMWNqazRjdmRmeTZmZmQ0Zmg4dW1wbm5ybWp0MHhkYXAwMnRjZXA2JyxcbiAgICAgICAgICBrZXljaGFpbnMsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGFkZHJlc3MgbGVuZ3RoIGFuZCBrZXljaGFpbiBsZW5ndGggZG9udCBtYXRjaCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNob3VsZC50aHJvd3MoKCkgPT5cbiAgICAgICAgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHtcbiAgICAgICAgICBhZGRyZXNzOiAnUC1mdWppMXdxMGQ1NnB1NTRzZ2M1eHBldm0zdXI2c2YzbDZra2U3MGR6MGw0flAtZnVqaTFjams0Y3ZkZnk2ZmZkNGZoOHVtcG5ucm1qdDB4ZGFwMDJ0Y2VwNicsXG4gICAgICAgICAga2V5Y2hhaW5zLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBrZXljaGFpbiBpcyBub3Qgb2YgbGVuZ3RoIDMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzaG91bGQudGhyb3dzKCgpID0+XG4gICAgICAgIGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgICAgYWRkcmVzczogJ1AtZnVqaTF3cTBkNTZwdTU0c2djNXhwZXZtM3VyNnNmM2w2a2tlNzBkejBsNCcsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnNbMF0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
740
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZheHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvYXZheHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsd0RBQTBDO0FBQzFDLG1EQUErRDtBQUMvRCxvQ0FBMkM7QUFDM0MsbUNBQXFDO0FBQ3JDLCtDQUFpQztBQUNqQyxpREFBK0M7QUFDL0MsaURBQTRDO0FBQzVDLDZEQUErQztBQUMvQyxzREFBbUQ7QUFDbkQsK0NBQTREO0FBQzVELHVDQUF3QztBQUN4Qyx5Q0FBaUQ7QUFDakQsMENBQTRCO0FBRTVCLG1EQUFxRjtBQUNyRixxREFBbUQ7QUFDbkQsOENBSzRCO0FBQzVCLHFEQUFtRDtBQUNuRCxxREFBbUQ7QUFDbkQsb0RBQTRCO0FBRTVCLFFBQVEsQ0FBQyxPQUFPLEVBQUU7SUFDaEIsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLE1BQU0sU0FBUyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7SUFDakMsSUFBSSxLQUFtQixDQUFDO0lBQ3hCLElBQUksUUFBUSxDQUFDO0lBQ2IsSUFBSSxhQUFhLENBQUM7SUFDbEIsSUFBSSxXQUFXLENBQUM7SUFFaEIsTUFBTSxVQUFVLEdBQUc7UUFDakIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhO1FBQ2xELE1BQU0sRUFBRSxFQUFFO0tBQ1gsQ0FBQztJQUVGLE1BQU0sUUFBUSxHQUFHO1FBQ2YsVUFBVSxFQUFFLEVBQUU7UUFDZCxJQUFJLEVBQUUsY0FBYztRQUNwQixjQUFjLEVBQUU7WUFDZCxTQUFTLEVBQUUsUUFBUSxDQUFDLG9CQUFvQixDQUFDLFNBQVM7WUFDbEQsT0FBTyxFQUFFLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPO1lBQzlDLE1BQU0sRUFBRSxRQUFRLENBQUMsb0JBQW9CLENBQUMsTUFBTTtZQUM1QyxNQUFNLEVBQUUsUUFBUSxDQUFDLG9CQUFvQixDQUFD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UUFFSCxFQUFFLENBQUMsaUVBQWlFLEVBQUUsS0FBSztZQUN6RSxNQUFNLGdCQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQzlCLFFBQVEsQ0FBQyxlQUFlLENBQUM7Z0JBQ3ZCLE9BQU8sRUFBRSw2RkFBNkY7Z0JBQ3RHLFNBQVMsRUFBVCxxQkFBUzthQUNWLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0NBQStDLEVBQUUsS0FBSztZQUN2RCxNQUFNLGdCQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQzlCLFFBQVEsQ0FBQyxlQUFlLENBQUM7Z0JBQ3ZCLE9BQU8sRUFBRSwrQ0FBK0M7Z0JBQ3hELFNBQVMsRUFBRSxxQkFBUyxDQUFDLENBQUMsQ0FBQzthQUN4QixDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIEF2YXhwTGliIGZyb20gJy4uLy4uL3NyYy9saWInO1xuaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstdGVzdCc7XG5pbXBvcnQgeyBBdmF4UCwgVGF2YXhQIH0gZnJvbSAnLi4vLi4vc3JjLyc7XG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWFwaSc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL2F2YXhwJztcbmltcG9ydCB7IGtleWNoYWlucyB9IGZyb20gJy4uL3Jlc291cmNlcy9rZXljaGFpbnMnO1xuaW1wb3J0IHsgVXRpbHMgYXMgS2V5UGFpclV0aWxzIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi91dGlscyc7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi4vLi4vc3JjL2xpYic7XG5pbXBvcnQgeyBCdWZmZXIgYXMgQnVmZmVyQXZheCB9IGZyb20gJ2F2YWxhbmNoZSc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IEhhbGZTaWduZWRBY2NvdW50VHJhbnNhY3Rpb24sIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IElNUE9SVF9QIH0gZnJvbSAnLi4vcmVzb3VyY2VzL3R4L2ltcG9ydFAnO1xuaW1wb3J0IHtcbiAgQUREVkFMSURBVE9SX1NBTVBMRVMsXG4gIEVYUE9SVF9QXzJfQyxcbiAgRVhQT1JUX1BfMl9DX1ZFUklGWSxcbiAgRVhQT1JUX1BfMl9DX1dJVEhPVVRfQ0hBTkdFT1VUUFVULFxufSBmcm9tICcuLi9yZXNvdXJjZXMvYXZheHAnO1xuaW1wb3J0IHsgSU1QT1JUX0MgfSBmcm9tICcuLi9yZXNvdXJjZXMvdHgvaW1wb3J0Qyc7XG5pbXBvcnQgeyBFWFBPUlRfQyB9IGZyb20gJy4uL3Jlc291cmNlcy90eC9leHBvcnRDJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuZGVzY3JpYmUoJ0F2YXhwJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBjb2luTmFtZSA9ICdhdmF4cCc7XG4gIGNvbnN0IHRjb2luTmFtZSA9ICd0JyArIGNvaW5OYW1lO1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgbGV0IGJhc2Vjb2luO1xuICBsZXQgbmV3VHhQcmVidWlsZDtcbiAgbGV0IG5ld1R4UGFyYW1zO1xuXG4gIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgdHhIZXg6IHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLnVuc2lnbmVkVHhIZXgsXG4gICAgdHhJbmZvOiB7fSxcbiAgfTtcblxuICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICByZWNpcGllbnRzOiBbXSxcbiAgICB0eXBlOiAnQWRkVmFsaWRhdG9yJyxcbiAgICBzdGFraW5nT3B0aW9uczoge1xuICAgICAgc3RhcnRUaW1lOiB0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5zdGFydFRpbWUsXG4gICAgICBlbmRUaW1lOiB0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5lbmRUaW1lLFxuICAgICAgbm9kZUlEOiB0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5ub2RlSUQsXG4gICAgICBhbW91bnQ6IHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLm1pblZhbGlkYXRvclN0YWtlLFxuICAgICAgZGVsZWdhdGlvbkZlZVJhdGU6IHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLmRlbGVnYXRpb25GZWUsXG4gICAgfSxcbiAgICBsb2NrdGltZTogMCxcbiAgICBtZW1vOiB7XG4gICAgICB2YWx1ZTogdGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMubWVtbyxcbiAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICB9LFxuICB9O1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHtcbiAgICAgIGVudjogJ21vY2snLFxuICAgIH0pO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3Rlcihjb2luTmFtZSwgQXZheFAuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3Rlcih0Y29pbk5hbWUsIFRhdmF4UC5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYmFzZWNvaW4gPSBiaXRnby5jb2luKHRjb2luTmFtZSk7XG4gICAgbmV3VHhQcmVidWlsZCA9ICgpID0+IHtcbiAgICAgIHJldHVybiBfLmNsb25lRGVlcCh0eFByZWJ1aWxkKTtcbiAgICB9O1xuICAgIG5ld1R4UGFyYW1zID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIF8uY2xvbmVEZWVwKHR4UGFyYW1zKTtcbiAgICB9O1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGluc3RhbnRpYXRlIHRoZSBjb2luJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBsb2NhbEJhc2Vjb2luID0gYml0Z28uY29pbih0Y29pbk5hbWUpO1xuICAgIGxvY2FsQmFzZWNvaW4uc2hvdWxkLmJlLmFuLmluc3RhbmNlb2YoVGF2YXhQKTtcblxuICAgIGxvY2FsQmFzZWNvaW4gPSBiaXRnby5jb2luKGNvaW5OYW1lKTtcbiAgICBsb2NhbEJhc2Vjb2luLnNob3VsZC5iZS5hbi5pbnN0YW5jZW9mKEF2YXhQKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gJyArIHRjb2luTmFtZSwgZnVuY3Rpb24gKCkge1xuICAgIGJhc2Vjb2luLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKHRjb2luTmFtZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIGZ1bGwgbmFtZScsIGZ1bmN0aW9uICgpIHtcbiAgICBiYXNlY29pbi5nZXRGdWxsTmFtZSgpLnNob3VsZC5lcXVhbCgnVGVzdG5ldCBBdmFsYW5jaGUgUC1DaGFpbicpO1xuICB9KTtcblxuICBkZXNjcmliZSgnS2V5cGFpcnM6JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSBrZXlwYWlyIGZyb20gcmFuZG9tIHNlZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gYmFzZWNvaW4uZ2VuZXJhdGVLZXlQYWlyKCk7XG4gICAgICBrZXlQYWlyLnNob3VsZC5oYXZlLnByb3BlcnR5KCdwdWInKTtcbiAgICAgIGtleVBhaXIuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3BydicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBhIGtleXBhaXIgZnJvbSBhIHNlZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZWVkVGV4dCA9IHRlc3REYXRhLlNFRURfQUNDT1VOVC5zZWVkO1xuICAgICAgY29uc3Qgc2VlZCA9IEJ1ZmZlci5mcm9tKHNlZWRUZXh0LCAnaGV4Jyk7XG4gICAgICBjb25zdCBrZXlQYWlyID0gYmFzZWNvaW4uZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuICAgICAga2V5UGFpci5wdWIuc2hvdWxkLmVxdWFsKHRlc3REYXRhLlNFRURfQUNDT1VOVC5wdWJsaWNLZXkpO1xuICAgICAga2V5UGFpci5wcnYuc2hvdWxkLmVxdWFsKHRlc3REYXRhLlNFRURfQUNDT1VOVC5wcml2YXRlS2V5KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYSBwdWJsaWMga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga2V5UGFpciA9IGJhc2Vjb2luLmdlbmVyYXRlS2V5UGFpcigpO1xuICAgICAga2V5UGFpci5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncHViJyk7XG4gICAgICBrZXlQYWlyLnNob3VsZC5oYXZlLnByb3BlcnR5KCdwcnYnKTtcblxuICAgICAgYmFzZWNvaW4uaXNWYWxpZFB1YihrZXlQYWlyLnB1Yikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhIHByaXZhdGUga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga2V5UGFpciA9IGJhc2Vjb2luLmdlbmVyYXRlS2V5UGFpcigpO1xuICAgICAga2V5UGFpci5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncHViJyk7XG4gICAgICBrZXlQYWlyLnNob3VsZC5oYXZlLnByb3BlcnR5KCdwcnYnKTtcblxuICAgICAgYmFzZWNvaW4uaXNWYWxpZFBydihrZXlQYWlyLnBydikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnU2lnbiBUcmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBjb25zdCBmYWN0b3J5ID0gbmV3IEF2YXhwTGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KHRjb2luTmFtZSkpO1xuXG4gICAgaXQoJ2J1aWxkIGFuZCBzaWduIGEgdHJhbnNhY3Rpb24gaW4gcmVndWxhciBtb2RlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVjb3ZlcnlNb2RlID0gZmFsc2U7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQXZheHBMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQodGNvaW5OYW1lKSlcbiAgICAgICAgLmdldFZhbGlkYXRvckJ1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLnRocmVzaG9sZClcbiAgICAgICAgLmxvY2t0aW1lKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLmxvY2t0aW1lKVxuICAgICAgICAucmVjb3Zlck1vZGUocmVjb3ZlcnlNb2RlKVxuICAgICAgICAuZnJvbVB1YktleSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS5iaXRnb0FkZHJlc3NlcylcbiAgICAgICAgLnN0YXJ0VGltZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS5zdGFydFRpbWUpXG4gICAgICAgIC5lbmRUaW1lKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLmVuZFRpbWUpXG4gICAgICAgIC5zdGFrZUFtb3VudCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS5zdGFrZUFtb3VudClcbiAgICAgICAgLmRlbGVnYXRpb25GZWVSYXRlKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLmRlbGVnYXRpb25GZWVSYXRlKVxuICAgICAgICAubm9kZUlEKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLm5vZGVJZClcbiAgICAgICAgLm1lbW8odGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1ZBTElEQVRPUl9TQU1QTEUubWVtbylcbiAgICAgICAgLnV0eG9zKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLnV0eG9zKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIGxldCB0eEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICB0eEhleC5zaG91bGQuZXF1YWwodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1ZBTElEQVRPUl9TQU1QTEUudW5zaWduZWRSYXdUeE5vblJlY292ZXJ5KTtcblxuICAgICAgY29uc3QgcHJpdmF0ZUtleSA9IHJlY292ZXJ5TW9kZVxuICAgICAgICA/IHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLmJhY2t1cFByaXZhdGVLZXlcbiAgICAgICAgOiB0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS51c2VyUHJpdmF0ZUtleTtcblxuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgdHhIZXg6IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksXG4gICAgICAgIH0sXG4gICAgICAgIHBydjogcHJpdmF0ZUtleSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGhhbGZTaWduZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGJhc2Vjb2luLnNpZ25UcmFuc2FjdGlvbihwYXJhbXMpO1xuICAgICAgdHhIZXggPSAoaGFsZlNpZ25lZFRyYW5zYWN0aW9uIGFzIEhhbGZTaWduZWRBY2NvdW50VHJhbnNhY3Rpb24pPy5oYWxmU2lnbmVkPy50eEhleDtcbiAgICAgIHR4SGV4LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS5oYWxmU2lnbmVkUmF3VHhOb25SZWNvdmVyeSk7XG4gICAgfSk7XG4gICAgaXQoJ2J1aWxkIGFuZCBzaWduIGEgdHJhbnNhY3Rpb24gaW4gcmVjb3ZlcnkgbW9kZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlY292ZXJ5TW9kZSA9IHRydWU7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQXZheHBMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQodGNvaW5OYW1lKSlcbiAgICAgICAgLmdldFZhbGlkYXRvckJ1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLnRocmVzaG9sZClcbiAgICAgICAgLmxvY2t0aW1lKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLmxvY2t0aW1lKVxuICAgICAgICAucmVjb3Zlck1vZGUocmVjb3ZlcnlNb2RlKVxuICAgICAgICAuZnJvbVB1YktleSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS5iaXRnb0FkZHJlc3NlcylcbiAgICAgICAgLnN0YXJ0VGltZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS5zdGFydFRpbWUpXG4gICAgICAgIC5lbmRUaW1lKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLmVuZFRpbWUpXG4gICAgICAgIC5zdGFrZUFtb3VudCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS5zdGFrZUFtb3VudClcbiAgICAgICAgLmRlbGVnYXRpb25GZWVSYXRlKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLmRlbGVnYXRpb25GZWVSYXRlKVxuICAgICAgICAubm9kZUlEKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLm5vZGVJZClcbiAgICAgICAgLm1lbW8odGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1ZBTElEQVRPUl9TQU1QTEUubWVtbylcbiAgICAgICAgLnV0eG9zKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLnV0eG9zKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIGxldCB0eEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICB0eEhleC5zaG91bGQuZXF1YWwodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1ZBTElEQVRPUl9TQU1QTEUudW5zaWduZWRSYXd0eFJlY292ZXJ5KTtcblxuICAgICAgY29uc3QgcHJpdmF0ZUtleSA9IHJlY292ZXJ5TW9kZVxuICAgICAgICA/IHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLmJhY2t1cFByaXZhdGVLZXlcbiAgICAgICAgOiB0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS51c2VyUHJpdmF0ZUtleTtcblxuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgdHhIZXg6IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksXG4gICAgICAgIH0sXG4gICAgICAgIHBydjogcHJpdmF0ZUtleSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGhhbGZTaWduZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGJhc2Vjb2luLnNpZ25UcmFuc2FjdGlvbihwYXJhbXMpO1xuICAgICAgdHhIZXggPSAoaGFsZlNpZ25lZFRyYW5zYWN0aW9uIGFzIEhhbGZTaWduZWRBY2NvdW50VHJhbnNhY3Rpb24pPy5oYWxmU2lnbmVkPy50eEhleDtcbiAgICAgIHR4SGV4LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS5oYWxmU2lnbmVkUmF3VHhSZWNvdmVyeSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJlIHJlamVjdGVkIGlmIGludmFsaWQga2V5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaW52YWxpZFByaXZhdGVLZXkgPSAnQUFBQUEnO1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy51bnNpZ25lZFR4SGV4KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogdHgudG9Ccm9hZGNhc3RGb3JtYXQoKSxcbiAgICAgICAgfSxcbiAgICAgICAgcHJ2OiBpbnZhbGlkUHJpdmF0ZUtleSxcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IGJhc2Vjb2luLnNpZ25UcmFuc2FjdGlvbihwYXJhbXMpLnNob3VsZC5iZS5yZWplY3RlZCgpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIG1haW5uZXQgYWRkcmVzcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHV0aWxzID0gbmV3IEtleVBhaXJVdGlscygpO1xuICAgICAgY29uc3QgeHBydiA9IHRlc3REYXRhLlNFRURfQUNDT1VOVC54UHJpdmF0ZUtleTtcbiAgICAgIGNvbnN0IGtwMSA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB4cHJ2IH0pO1xuICAgICAgY29uc3QgYWRkcmVzc0J1ZmZlcjEgPSBrcDEuZ2V0QWRkcmVzc0J1ZmZlcigpO1xuICAgICAgY29uc3QgYWRkcmVzczEgPSB1dGlscy5hZGRyZXNzVG9TdHJpbmcoJ2F2YXgnLCAnUCcsIEJ1ZmZlckF2YXguZnJvbShhZGRyZXNzQnVmZmVyMSkpO1xuXG4gICAgICBjb25zdCBrcDIgPSBuZXcgS2V5UGFpcih7IHBydjogeHBydiB9KTtcbiAgICAgIGNvbnN0IGFkZHJlc3NCdWZmZXIyID0ga3AyLmdldEFkZHJlc3NTYWZlQnVmZmVyKCk7XG4gICAgICBjb25zdCBhZGRyZXNzMiA9IHV0aWxzLmFkZHJlc3NUb1N0cmluZygnYXZheCcsICdQJywgQnVmZmVyQXZheC5mcm9tKGFkZHJlc3NCdWZmZXIyKSk7XG5cbiAgICAgIGNvbnN0IGtwMyA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB4cHJ2IH0pO1xuICAgICAgY29uc3QgYWRkcmVzczMgPSBrcDMuZ2V0QXZheFBBZGRyZXNzKCdhdmF4Jyk7XG5cbiAgICAgIGFkZHJlc3MxLnNob3VsZC5lcXVhbChhZGRyZXNzMik7XG4gICAgICBhZGRyZXNzMS5zaG91bGQuZXF1YWwoYWRkcmVzczMpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIHRlc3RuZXQgYWRkcmVzcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHV0aWxzID0gbmV3IEtleVBhaXJVdGlscygpO1xuICAgICAgY29uc3QgeHBydiA9IHRlc3REYXRhLlNFRURfQUNDT1VOVC54UHJpdmF0ZUtleTtcbiAgICAgIGNvbnN0IGtwMSA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB4cHJ2IH0pO1xuICAgICAgY29uc3QgYWRkcmVzc0J1ZmZlcjEgPSBrcDEuZ2V0QWRkcmVzc0J1ZmZlcigpO1xuICAgICAgY29uc3QgYWRkcmVzczEgPSB1dGlscy5hZGRyZXNzVG9TdHJpbmcoJ2Z1amknLCAnUCcsIEJ1ZmZlckF2YXguZnJvbShhZGRyZXNzQnVmZmVyMSkpO1xuXG4gICAgICBjb25zdCBrcDIgPSBuZXcgS2V5UGFpcih7IHBydjogeHBydiB9KTtcbiAgICAgIGNvbnN0IGFkZHJlc3NCdWZmZXIyID0ga3AyLmdldEFkZHJlc3NTYWZlQnVmZmVyKCk7XG4gICAgICBjb25zdCBhZGRyZXNzMiA9IHV0aWxzLmFkZHJlc3NUb1N0cmluZygnZnVqaScsICdQJywgQnVmZmVyQXZheC5mcm9tKGFkZHJlc3NCdWZmZXIyKSk7XG5cbiAgICAgIGNvbnN0IGtwMyA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB4cHJ2IH0pO1xuICAgICAgY29uc3QgYWRkcmVzczMgPSBrcDMuZ2V0QXZheFBBZGRyZXNzKCdmdWppJyk7XG5cbiAgICAgIGFkZHJlc3MxLnNob3VsZC5lcXVhbChhZGRyZXNzMik7XG4gICAgICBhZGRyZXNzMS5zaG91bGQuZXF1YWwoYWRkcmVzczMpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgbm90IGJlIHRoZSBzYW1lIGFkZHJlc3MgZnJvbSBzYW1lIGtleScsICgpID0+IHtcbiAgICAgIGNvbnN0IHV0aWxzID0gbmV3IEtleVBhaXJVdGlscygpO1xuICAgICAgY29uc3Qga3AxID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLkFDQ09VTlRfMS5wcml2a2V5IH0pO1xuICAgICAgY29uc3QgYWRkcmVzc0J1ZmZlcjEgPSBrcDEuZ2V0QWRkcmVzc0J1ZmZlcigpO1xuICAgICAgY29uc3QgYWRkcmVzczEgPSB1dGlscy5hZGRyZXNzVG9TdHJpbmcoJ2F2YXgnLCAnUCcsIEJ1ZmZlckF2YXguZnJvbShhZGRyZXNzQnVmZmVyMSkpO1xuXG4gICAgICBjb25zdCBrcDIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuQUNDT1VOVF8xLnByaXZrZXkgfSk7XG4gICAgICBjb25zdCBhZGRyZXNzQnVmZmVyMiA9IGtwMi5nZXRBZGRyZXNzU2FmZUJ1ZmZlcigpO1xuICAgICAgY29uc3QgYWRkcmVzczIgPSB1dGlscy5hZGRyZXNzVG9TdHJpbmcoJ2Z1amknLCAnUCcsIEJ1ZmZlckF2YXguZnJvbShhZGRyZXNzQnVmZmVyMikpO1xuXG4gICAgICBhZGRyZXNzMS5zaG91bGQubm90LmVxdWFsKGFkZHJlc3MyKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIG5vdCBiZSB0aGUgc2FtZSBhZGRyZXNzIGZyb20gZGlmZmVyZW50IGtleXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1dGlscyA9IG5ldyBLZXlQYWlyVXRpbHMoKTtcbiAgICAgIGNvbnN0IGtwMSA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5BQ0NPVU5UXzEucHJpdmtleSB9KTtcbiAgICAgIGNvbnN0IGFkZHJlc3NCdWZmZXIxID0ga3AxLmdldEFkZHJlc3NCdWZmZXIoKTtcbiAgICAgIGNvbnN0IGFkZHJlc3MxID0gdXRpbHMuYWRkcmVzc1RvU3RyaW5nKCdhdmF4JywgJ1AnLCBCdWZmZXJBdmF4LmZyb20oYWRkcmVzc0J1ZmZlcjEpKTtcblxuICAgICAgY29uc3Qga3AyID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLkFDQ09VTlRfMy5wcml2a2V5IH0pO1xuICAgICAgY29uc3QgYWRkcmVzc0J1ZmZlcjIgPSBrcDIuZ2V0QWRkcmVzc1NhZmVCdWZmZXIoKTtcbiAgICAgIGNvbnN0IGFkZHJlc3MyID0gdXRpbHMuYWRkcmVzc1RvU3RyaW5nKCdhdmF4JywgJ1AnLCBCdWZmZXJBdmF4LmZyb20oYWRkcmVzc0J1ZmZlcjIpKTtcblxuICAgICAgYWRkcmVzczEuc2hvdWxkLm5vdC5lcXVhbChhZGRyZXNzMik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTaWduIE1lc3NhZ2UnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBiZSBwZXJmb3JtZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyVG9TaWduID0gbmV3IEF2YXhwTGliLktleVBhaXIoKTtcbiAgICAgIGNvbnN0IHBydktleSA9IGtleVBhaXJUb1NpZ24uZ2V0UHJpdmF0ZUtleSgpO1xuICAgICAgY29uc3Qga2V5UGFpciA9IGtleVBhaXJUb1NpZ24uZ2V0S2V5cygpO1xuICAgICAgY29uc3QgbWVzc2FnZVRvU2lnbiA9IEJ1ZmZlci5mcm9tKHJhbmRvbUJ5dGVzKDMyKSk7XG4gICAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBiYXNlY29pbi5zaWduTWVzc2FnZShrZXlQYWlyLCBtZXNzYWdlVG9TaWduLnRvU3RyaW5nKCdoZXgnKSk7XG5cbiAgICAgIGNvbnN0IHZlcmlmeSA9IEF2YXhwTGliLlV0aWxzLnZlcmlmeVNpZ25hdHVyZShiYXNlY29pbi5fc3RhdGljc0NvaW4ubmV0d29yaywgbWVzc2FnZVRvU2lnbiwgc2lnbmF0dXJlLCBwcnZLZXkhKTtcbiAgICAgIHZlcmlmeS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHdpdGggbWlzc2luZyBwcml2YXRlIGtleScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgQXZheHBMaWIuS2V5UGFpcih7XG4gICAgICAgIHB1YjogdGVzdERhdGEuU0VFRF9BQ0NPVU5ULnB1YmxpY0tleUNiNTgsXG4gICAgICB9KS5nZXRLZXlzKCk7XG4gICAgICBjb25zdCBtZXNzYWdlVG9TaWduID0gQnVmZmVyLmZyb20ocmFuZG9tQnl0ZXMoMzIpKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBhd2FpdCBiYXNlY29pbi5zaWduTWVzc2FnZShrZXlQYWlyLCBtZXNzYWdlVG9TaWduKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIGtleSBwYWlyIG9wdGlvbnMnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0V4cGxhaW4gVHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgaGFsZiBzaWduZWQgQWRkVmFsaWRhdG9yIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdERhdGEgPSBBRERWQUxJREFUT1JfU0FNUExFUztcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IGhhbGZTaWduZWQ6IHsgdHhIZXg6IHRlc3REYXRhLmhhbGZzaWdudHhIZXggfSB9KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLm1pblZhbGlkYXRvclN0YWtlKTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQWRkVmFsaWRhdG9yKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLm5vZGVJRCk7XG4gICAgICB0eEV4cGxhaW4uY2hhbmdlT3V0cHV0c1swXS5hZGRyZXNzLnNwbGl0KCd+JykubGVuZ3RoLnNob3VsZC5lcXVhbCgzKTtcbiAgICAgIHR4RXhwbGFpbi5tZW1vLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5tZW1vKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIHNpZ25lZCBBZGRWYWxpZGF0b3IgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YSA9IEFERFZBTElEQVRPUl9TQU1QTEVTO1xuICAgICAgY29uc3QgdHhFeHBsYWluID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHsgdHhIZXg6IHRlc3REYXRhLmZ1bGxzaWdudHhIZXggfSk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5taW5WYWxpZGF0b3JTdGFrZSk7XG4gICAgICB0eEV4cGxhaW4udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkFkZFZhbGlkYXRvcik7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5ub2RlSUQpO1xuICAgICAgdHhFeHBsYWluLmNoYW5nZU91dHB1dHNbMF0uYWRkcmVzcy5zcGxpdCgnficpLmxlbmd0aC5zaG91bGQuZXF1YWwoMyk7XG4gICAgICB0eEV4cGxhaW4ubWVtby5zaG91bGQuZXF1YWwodGVzdERhdGEubWVtbyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSBoYWxmIHNpZ25lZCBleHBvcnQgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YSA9IEVYUE9SVF9QXzJfQztcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IGhhbGZTaWduZWQ6IHsgdHhIZXg6IHRlc3REYXRhLmhhbGZzaWdudHhIZXggfSB9KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmFtb3VudCk7XG4gICAgICB0eEV4cGxhaW4udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkV4cG9ydCk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5wQWRkcmVzc2VzLnNvcnQoKS5qb2luKCd+JykpO1xuICAgICAgdHhFeHBsYWluLmNoYW5nZU91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEucEFkZHJlc3Nlcy5zb3J0KCkuam9pbignficpKTtcbiAgICAgIHR4RXhwbGFpbi5tZW1vLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5tZW1vKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIHNpZ25lZCBleHBvcnQgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YSA9IEVYUE9SVF9QXzJfQztcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4OiB0ZXN0RGF0YS5mdWxsc2lnbnR4SGV4IH0pO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEuYW1vdW50KTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuRXhwb3J0KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLnBBZGRyZXNzZXMuc29ydCgpLmpvaW4oJ34nKSk7XG4gICAgICB0eEV4cGxhaW4uY2hhbmdlT3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5wQWRkcmVzc2VzLnNvcnQoKS5qb2luKCd+JykpO1xuICAgICAgdHhFeHBsYWluLm1lbW8uc2hvdWxkLmVxdWFsKHRlc3REYXRhLm1lbW8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgaGFsZiBzaWduZWQgZXhwb3J0IHRyYW5zYWN0aW9uIHdpdGhvdXQgY2Fobmdlb3V0cHV0ICcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRlc3REYXRhID0gRVhQT1JUX1BfMl9DX1dJVEhPVVRfQ0hBTkdFT1VUUFVUO1xuICAgICAgY29uc3QgdHhFeHBsYWluID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgICAgaGFsZlNpZ25lZDogeyB0eEhleDogdGVzdERhdGEuaGFsZnNpZ250eEhleCB9LFxuICAgICAgfSk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5hbW91bnQpO1xuICAgICAgdHhFeHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5FeHBvcnQpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEucEFkZHJlc3Nlcy5zb3J0KCkuam9pbignficpKTtcbiAgICAgIHR4RXhwbGFpbi5jaGFuZ2VPdXRwdXRzLnNob3VsZC5iZS5lbXB0eSgpO1xuICAgICAgdHhFeHBsYWluLm1lbW8uc2hvdWxkLmVxdWFsKHRlc3REYXRhLm1lbW8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgc2lnbmVkIGV4cG9ydCB0cmFuc2FjdGlvbiB3aXRob3V0IGNhaG5nZW91dHB1dCAnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YSA9IEVYUE9SVF9QXzJfQ19XSVRIT1VUX0NIQU5HRU9VVFBVVDtcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4OiB0ZXN0RGF0YS5mdWxsc2lnbnR4SGV4IH0pO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEuYW1vdW50KTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuRXhwb3J0KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLnBBZGRyZXNzZXMuc29ydCgpLmpvaW4oJ34nKSk7XG4gICAgICB0eEV4cGxhaW4uY2hhbmdlT3V0cHV0cy5zaG91bGQuYmUuZW1wdHkoKTtcbiAgICAgIHR4RXhwbGFpbi5tZW1vLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5tZW1vKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIGhhbGYgc2lnbmVkIGltcG9ydCB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRlc3REYXRhID0gSU1QT1JUX1A7XG4gICAgICBjb25zdCB0eEV4cGxhaW4gPSBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgICBoYWxmU2lnbmVkOiB7IHR4SGV4OiB0ZXN0RGF0YS5oYWxmc2lnbnR4SGV4IH0sXG4gICAgICB9KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKChOdW1iZXIodGVzdERhdGEuYW1vdW50KSAtIHR4RXhwbGFpbi5mZWU/LmZlZSkudG9TdHJpbmcoKSk7XG4gICAgICB0eEV4cGxhaW4udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkltcG9ydCk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5wQWRkcmVzc2VzLnNvcnQoKS5qb2luKCd+JykpO1xuICAgICAgdHhFeHBsYWluLmNoYW5nZU91dHB1dHMuc2hvdWxkLmJlLmVtcHR5KCk7XG4gICAgICB0eEV4cGxhaW4ubWVtby5zaG91bGQuZXF1YWwodGVzdERhdGEubWVtbyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSBzaWduZWQgaW1wb3J0IHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdERhdGEgPSBJTVBPUlRfUDtcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4OiB0ZXN0RGF0YS5mdWxsc2lnbnR4SGV4IH0pO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwoKE51bWJlcih0ZXN0RGF0YS5hbW91bnQpIC0gdHhFeHBsYWluLmZlZT8uZmVlKS50b1N0cmluZygpKTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuSW1wb3J0KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLnBBZGRyZXNzZXMuc29ydCgpLmpvaW4oJ34nKSk7XG4gICAgICB0eEV4cGxhaW4uY2hhbmdlT3V0cHV0cy5zaG91bGQuYmUuZW1wdHkoKTtcbiAgICAgIHR4RXhwbGFpbi5tZW1vLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5tZW1vKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIGhhbGYgc2lnbmVkIGltcG9ydCBpbiBDIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdERhdGEgPSBJTVBPUlRfQztcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4OiB0ZXN0RGF0YS5oYWxmc2lnbnR4SGV4IH0pO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwoKE51bWJlcih0ZXN0RGF0YS5hbW91bnQpIC0gdHhFeHBsYWluLmZlZT8uZmVlKS50b1N0cmluZygpKTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuSW1wb3J0KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLnRvKTtcbiAgICAgIHR4RXhwbGFpbi5jaGFuZ2VPdXRwdXRzLnNob3VsZC5iZS5lbXB0eSgpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdCh0eEV4cGxhaW4ubWVtbyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSBzaWduZWQgaW1wb3J0IGluIEMgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YSA9IElNUE9SVF9DO1xuICAgICAgY29uc3QgdHhFeHBsYWluID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHsgdHhIZXg6IHRlc3REYXRhLmZ1bGxzaWdudHhIZXggfSk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCgoTnVtYmVyKHRlc3REYXRhLmFtb3VudCkgLSB0eEV4cGxhaW4uZmVlPy5mZWUpLnRvU3RyaW5nKCkpO1xuICAgICAgdHhFeHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5JbXBvcnQpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEudG8pO1xuICAgICAgdHhFeHBsYWluLmNoYW5nZU91dHB1dHMuc2hvdWxkLmJlLmVtcHR5KCk7XG4gICAgICBzaG91bGQubm90LmV4aXN0KHR4RXhwbGFpbi5tZW1vKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIHVuc2lnbmVkIGV4cG9ydCBpbiBDIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdERhdGEgPSBFWFBPUlRfQztcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4OiB0ZXN0RGF0YS51bnNpZ25lZFR4SGV4IH0pO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwoTnVtYmVyKHRlc3REYXRhLmFtb3VudCkudG9TdHJpbmcoKSk7XG4gICAgICB0eEV4cGxhaW4udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkV4cG9ydCk7XG4gICAgICB0eEV4cGxhaW4uaW5wdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLmNIZXhBZGRyZXNzKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLnBBZGRyZXNzZXMuc2xpY2UoKS5zb3J0KCkuam9pbignficpKTtcbiAgICAgIHR4RXhwbGFpbi5mZWUuZmVlUmF0ZS5zaG91bGQuZXF1YWwoTnVtYmVyKHRlc3REYXRhLmZlZSkpO1xuICAgICAgdHhFeHBsYWluLmNoYW5nZU91dHB1dHMuc2hvdWxkLmJlLmVtcHR5KCk7XG4gICAgICBzaG91bGQubm90LmV4aXN0KHR4RXhwbGFpbi5tZW1vKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIHNpZ25lZCBleHBvcnQgaW4gQyB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRlc3REYXRhID0gRVhQT1JUX0M7XG4gICAgICBjb25zdCB0eEV4cGxhaW4gPSBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oeyB0eEhleDogdGVzdERhdGEuZnVsbHNpZ250eEhleCB9KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKE51bWJlcih0ZXN0RGF0YS5hbW91bnQpLnRvU3RyaW5nKCkpO1xuICAgICAgdHhFeHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5FeHBvcnQpO1xuICAgICAgdHhFeHBsYWluLmlucHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5jSGV4QWRkcmVzcyk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5wQWRkcmVzc2VzLnNsaWNlKCkuc29ydCgpLmpvaW4oJ34nKSk7XG4gICAgICB0eEV4cGxhaW4uZmVlLmZlZVJhdGUuc2hvdWxkLmVxdWFsKE51bWJlcih0ZXN0RGF0YS5mZWUpKTtcbiAgICAgIHR4RXhwbGFpbi5jaGFuZ2VPdXRwdXRzLnNob3VsZC5iZS5lbXB0eSgpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdCh0eEV4cGxhaW4ubWVtbyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgd2hlbiBhIHR4IGlzIG5vdCBwYXNzZWQgYXMgcGFyYW1ldGVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHt9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdtaXNzaW5nIHRyYW5zYWN0aW9uIGhleCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndmVyaWZ5IHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgc2lnbmVkIGFkZCB2YWxpZGF0b3IgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICB0eEhleDogdGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMuZnVsbHNpZ250eEhleCxcbiAgICAgICAgdHhJbmZvOiB7fSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IG5ld1R4UGFyYW1zKCk7XG4gICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkIH0pO1xuICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgaGFsZiBzaWduZWQgYWRkIHZhbGlkYXRvciB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiB0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5oYWxmc2lnbnR4SGV4LFxuICAgICAgICB0eEluZm86IHt9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25WZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSk7XG4gICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSB1bnNpZ25lZCBhZGQgdmFsaWRhdG9yIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25WZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSk7XG4gICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSBhZGQgdmFsaWRhdG9yIHRyYW5zYWN0aW9ucyB3aGVuIHJlY2lwaWVudHMgaGFzIGV4dHJhIGRhdGEgJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIHR4UGFyYW1zLmRhdGEgPSAnZGF0YSc7XG5cbiAgICAgIGNvbnN0IHZhbGlkVHJhbnNhY3Rpb24gPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkIH0pO1xuICAgICAgdmFsaWRUcmFuc2FjdGlvbi5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IGltcG9ydCBpbiBDIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgdHhIZXg6IElNUE9SVF9DLmZ1bGxzaWdudHhIZXgsXG4gICAgICAgIHR4SW5mbzoge30sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtdLFxuICAgICAgICB0eXBlOiAnSW1wb3J0JyxcbiAgICAgICAgbG9ja3RpbWU6IDAsXG4gICAgICAgIG1lbW86IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkIH0pO1xuICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgaW1wb3J0IHRvIFAgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICB0eEhleDogSU1QT1JUX1AuZnVsbHNpZ250eEhleCxcbiAgICAgICAgdHhJbmZvOiB7fSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW10sXG4gICAgICAgIHR5cGU6ICdJbXBvcnQnLFxuICAgICAgICBsb2NrdGltZTogMCxcbiAgICAgICAgbWVtbzogdW5kZWZpbmVkLFxuICAgICAgICB1bnNwZW50czogWydlOGl4S25iYTUyeXVmWHJUVktyVFhWUVRqNWNkNWU2bzZMYzNyVmtoYWhER0VzNzJMOjAnXSxcbiAgICAgIH07XG4gICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkIH0pO1xuICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgaW1wb3J0IHRvIFAgdHJhbnNhY3Rpb24gd2l0aCB3cm9uZyB1bnNwZW50cycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiBJTVBPUlRfUC5mdWxsc2lnbnR4SGV4LFxuICAgICAgICB0eEluZm86IHt9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXSxcbiAgICAgICAgdHlwZTogJ0ltcG9ydCcsXG4gICAgICAgIGxvY2t0aW1lOiAwLFxuICAgICAgICBtZW1vOiB1bmRlZmluZWQsXG4gICAgICAgIHVuc3BlbnRzOiBbJ3Rlc3Q6MSddLFxuICAgICAgfTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXMsXG4gICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgICAgJ1RyYW5zYWN0aW9uIHNob3VsZCBub3QgY29udGFpbiB0aGUgVVRYTzogZThpeEtuYmE1Mnl1ZlhyVFZLclRYVlFUajVjZDVlNm82TGMzclZraGFoREdFczcyTDowJ1xuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSBleHBvcnQgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICB0eEhleDogRVhQT1JUX1BfMl9DX1ZFUklGWS50eEhleCxcbiAgICAgICAgdHhJbmZvOiB7fSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IEVYUE9SVF9QXzJfQ19WRVJJRlkucmVjZWl2ZUFkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6IEVYUE9SVF9QXzJfQ19WRVJJRlkuYW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdFeHBvcnQnLFxuICAgICAgICBsb2NrdGltZTogMCxcbiAgICAgICAgbWVtbzoge1xuICAgICAgICAgIHZhbHVlOiBFWFBPUlRfUF8yX0NfVkVSSUZZLm1lbW8sXG4gICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgaXNUcmFuc2FjdGlvblZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCB9KTtcbiAgICAgIGlzVHJhbnNhY3Rpb25WZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdmVyaWZ5IGV4cG9ydCB0cmFuc2FjdGlvbiB3aXRoIHdyb25nIGFtb3VudCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiBFWFBPUlRfUF8yX0NfVkVSSUZZLnR4SGV4LFxuICAgICAgICB0eEluZm86IHt9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogRVhQT1JUX1BfMl9DX1ZFUklGWS5yZWNlaXZlQWRkcmVzcyxcbiAgICAgICAgICAgIGFtb3VudDogJzk5OTk5OTknLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdFeHBvcnQnLFxuICAgICAgICBsb2NrdGltZTogMCxcbiAgICAgICAgbWVtbzoge1xuICAgICAgICAgIHZhbHVlOiBFWFBPUlRfUF8yX0NfVkVSSUZZLm1lbW8sXG4gICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgICAgYFR4IHRvdGFsIGFtb3VudCAke0VYUE9SVF9QXzJfQ19WRVJJRlkuYW1vdW50fSBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHRvdGFsIGFtb3VudCBmaWVsZCA5OTk5OTk5IGFuZCBmaXhlZCBmZWUgMTAwMDAwMGBcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB2ZXJpZnkgZXhwb3J0IHRyYW5zYWN0aW9uIHdpdGggd3JvbmcgYy1hZGRyZXNzIGluIG1lbW8nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICB0eEhleDogRVhQT1JUX1BfMl9DX1ZFUklGWS50eEhleCxcbiAgICAgICAgdHhJbmZvOiB7fSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IEVYUE9SVF9QXzJfQ19WRVJJRlkucmVjZWl2ZUFkZHJlc3MyLFxuICAgICAgICAgICAgYW1vdW50OiBFWFBPUlRfUF8yX0NfVkVSSUZZLmFtb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnRXhwb3J0JyxcbiAgICAgICAgbG9ja3RpbWU6IDAsXG4gICAgICAgIG1lbW86IHtcbiAgICAgICAgICB2YWx1ZTogRVhQT1JUX1BfMl9DX1ZFUklGWS5tZW1vLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgIGBJbnZhbGlkIEMtY2hhaW4gcmVjZWl2ZSBhZGRyZXNzICR7RVhQT1JUX1BfMl9DX1ZFUklGWS5yZWNlaXZlQWRkcmVzc30sIGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIHBhcmFtcyBhZGRyZXNzICR7RVhQT1JUX1BfMl9DX1ZFUklGWS5yZWNlaXZlQWRkcmVzczJ9YFxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHZlcmlmeSBleHBvcnQgdHJhbnNhY3Rpb24gd2l0aCBubyBtZW1vJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgdHhIZXg6IEVYUE9SVF9DLnVuc2lnbmVkVHhIZXgsXG4gICAgICAgIHR4SW5mbzoge30sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiBFWFBPUlRfUF8yX0NfVkVSSUZZLnJlY2VpdmVBZGRyZXNzMixcbiAgICAgICAgICAgIGFtb3VudDogRVhQT1JUX1BfMl9DX1ZFUklGWS5hbW91bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0V4cG9ydCcsXG4gICAgICAgIGxvY2t0aW1lOiAwLFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoYEV4cG9ydCBUeCByZXF1aXJlcyBhIG1lbW8gd2l0aCBjLWNoYWluIGFkZHJlc3NgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB2ZXJpZnkgZXhwb3J0IHRyYW5zYWN0aW9uIHdpdGggaW52YWxpZCBDIGFkZHJlc3MgaW4gbWVtbycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiBFWFBPUlRfUF8yX0MudW5zaWduZWRUeEhleCxcbiAgICAgICAgdHhJbmZvOiB7fSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IEVYUE9SVF9QXzJfQy5wQWRkcmVzc2VzLFxuICAgICAgICAgICAgYW1vdW50OiBFWFBPUlRfUF8yX0MuYW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdFeHBvcnQnLFxuICAgICAgICBsb2NrdGltZTogMCxcbiAgICAgICAgbWVtbzoge1xuICAgICAgICAgIHZhbHVlOiBFWFBPUlRfUF8yX0MubWVtbyxcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcbiAgICAgICAgICBgVHhuIG1lbW8gbXVzdCBjb250YWluIHZhbGlkIEMtY2hhaW4gYWRkcmVzcyBkZXN0aW5hdGlvbiwgcmVjZWl2ZWQ6IEV4cG9ydCBBVkFYIGZyb20gUC1DaGFpbiB0byBDLUNoYWluIGFuZCBjb25zdW1lIG11bHRpc2lnIG91dHB1dCBhbmQgY3JlYXRlIG11bHRpc2lnIGF0b21pYyBvdXRwdXRgXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdmVyaWZ5IHRyYW5zYWN0aW9ucyB3aGVuIGhhdmUgZGlmZmVyZW50IHR5cGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IG5ld1R4UGFyYW1zKCk7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuICAgICAgdHhQYXJhbXMudHlwZSA9ICdhZGREZWxlZ2F0b3InO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnVHggdHlwZSBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zIHR5cGUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB2ZXJpZnkgdHJhbnNhY3Rpb25zIHdoZW4gaGF2ZSBkaWZmZXJlbnQgbm9kZUlkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSBuZXdUeFBhcmFtcygpO1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIHR4UGFyYW1zLnN0YWtpbmdPcHRpb25zLm5vZGVJRCA9ICdOb2RlSUQtTWR0ZVM5VTk4N1BZN2l3QTVQY3ozc0tWcHJKQWJBdkU3JztcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXMsXG4gICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ1R4IG91dHB1dHMgZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcycpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgZmFpbCB2ZXJpZnkgd2hlbiBpbnB1dCBgbm9kZUlkYCBpcyBhYnNlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSBuZXdUeFBhcmFtcygpO1xuICAgICAgdHhQYXJhbXMuc3Rha2luZ09wdGlvbnMubm9kZUlEID0gdW5kZWZpbmVkO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnVHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdmVyaWZ5IHRyYW5zYWN0aW9ucyB3aGVuIGhhdmUgZGlmZmVyZW50IGFtb3VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBuZXdUeFByZWJ1aWxkKCk7XG4gICAgICB0eFBhcmFtcy5zdGFraW5nT3B0aW9ucy5hbW91bnQgPSAnMjAwMDAwMDAwMCc7XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UGFyYW1zLFxuICAgICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdUeCBvdXRwdXRzIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdHhQYXJhbXMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB2ZXJpZnkgdHJhbnNhY3Rpb25zIHdoZW4gYW1vdW50IGlzIG51bWJlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBuZXdUeFByZWJ1aWxkKCk7XG4gICAgICB0eFBhcmFtcy5zdGFraW5nT3B0aW9ucy5hbW91bnQgPSAxMDAwMDAwMDAwO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnVHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdmVyaWZ5IHRyYW5zYWN0aW9ucyB3aGVuIGFtb3VudCBpcyBhYnNlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IG5ld1R4UGFyYW1zKCk7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuICAgICAgdHhQYXJhbXMuc3Rha2luZ09wdGlvbnMuYW1vdW50ID0gdW5kZWZpbmVkO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnVHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdWYWxpZGF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbGlkQWRkcmVzcyA9ICdQLWZ1amkxNWphbXd1a2Zxa3doZTh6MjZ0anF4ZWp0amQzams5dmo0a214d2EnO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3ModmFsaWRBZGRyZXNzKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZhbGlkYXRlIGludmFsaWQgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGludmFsaWRBZGRyZXNzZXMgPSBbdW5kZWZpbmVkLCAnJywgJ2FzZGFkc2FhZicsICcxNXgzejRydms4ZTd2d2E2Zzlsa3lnODl2NWR3a25wNDQ4NTh1ZXgnXTtcbiAgICAgIGZvciAoY29uc3QgYWRkcmVzcyBvZiBpbnZhbGlkQWRkcmVzc2VzKSB7XG4gICAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhbiBhcnJheSBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsaWRBZGRyZXNzZXMgPSBbXG4gICAgICAgICdQLWZ1amkxNXgzejRydms4ZTd2d2E2Zzlsa3lnODl2NWR3a25wNDQ4NTh1ZXgnLFxuICAgICAgICAnUC1hdmF4MTQzcThsc3kzeTRrZTlkNnplbHRyZTh1MmF0ZWVkNnVrOWthMG51JyxcbiAgICAgICAgJ05vZGVJRC0xNDNxOGxzeTN5NGtlOWQ2emVsdHJlOHUyYXRlZWQ2dWs5a2EwbnUnLFxuICAgICAgXTtcblxuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3ModmFsaWRBZGRyZXNzZXMpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmFsaWRhdGUgYW4gYXJyYXkgYWRkcmVzcyB3aXRoIGludmFsaWQgYWRkcmVzc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWxpZEFkZHJlc3NlcyA9IFtcbiAgICAgICAgJ1AtZnVqaTE1eDN6NHJ2azhlN3Z3YTZnOWxreWc4OXY1ZHdrbnA0NDg1OHVleCcsXG4gICAgICAgICdQLWF2YXgxNDNxOGxzeTN5NGtlOWQ2emVsdHJlOHUyYXRlZWQ2dWs5a2EwbnUnLFxuICAgICAgICAnaW52YWxpZC1hZGRyZXNzJyxcbiAgICAgIF07XG5cbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKHZhbGlkQWRkcmVzc2VzKS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYSBtdWx0c2lnIGFkZHJlc3Mgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbXVsdGlTaWdWYWxpZEFkZHJlc3MgPVxuICAgICAgICAnUC1mdWppMXl6cGZzZGFsaGZ3a3EyY2Vld2dzOXd2N2swdWZ0NDB5ZHB1ajU5flAtZnVqaTEwM2NtbnRzc3A2cW51Y2VqYWhkZHk0MndjeTRxdHkwdWo0MjgyMn5QLWZ1amkxaGRrN250dzBodWhxbWxobGhlbWU5dDdzY3N5OWxoZmh3M3l3eTQnO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MobXVsdGlTaWdWYWxpZEFkZHJlc3MpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmFsaWRhdGUgYSBtdWx0c2lnIGFkZHJlc3Mgc3RyaW5nIHdpdGggaW52YWxpZCBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbXVsdGlTaWdWYWxpZEFkZHJlc3MgPVxuICAgICAgICAnUC1mdWppMXl6cGZzZGFsaGZ3a3EyY2Vld2dzOXd2N2swdWZ0NDB5ZHB1ajU5fmludmFsaWQtYWRkcmVzc35QLWZ1amkxaGRrN250dzBodWhxbWxobGhlbWU5dDdzY3N5OWxoZmh3M3l3eTQnO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MobXVsdGlTaWdWYWxpZEFkZHJlc3MpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSB2YWxpZCBjLWNoYWluIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICBjb25zdCBhZGRyZXNzID0gJzB4MTM3NGEyMDQ2NjYxZjkxNGQxNjg3ZDg1ZGJiY2ViOWFjNzkxMGEyOSc7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHZlcmlmeWluZyBhZGRyZXNzIGlmIGFkZHJlc3MgbGVuZ3RoIGRvZXNudCBtYXRjaCBrZXljaGFpbiBsZW5ndGgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWxpZEFkZHJlc3NlcyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdQLWZ1amkxNXgzejRydms4ZTd2d2E2Zzlsa3lnODl2NWR3a25wNDQ4NTh1ZXgnLFxuICAgICAgICAgIGtleWNoYWlucyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdQLWZ1amkxd3EwZDU2cHU1NHNnYzV4cGV2bTN1cjZzZjNsNmtrZTcwZHowbDQnLFxuICAgICAgICAgIGtleWNoYWlucyxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGZvciAoY29uc3QgYWRkcmVzc1BhcmFtcyBvZiB2YWxpZEFkZHJlc3Nlcykge1xuICAgICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhhc3luYyAoKSA9PiBiYXNlY29pbi52ZXJpZnlBZGRyZXNzKGFkZHJlc3NQYXJhbXMpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgaW52YWxpZCBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaW52YWxpZEFkZHJlc3NlcyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdQLWZ1amkxMDNjbW50c3NwNnFudWNlamFoZGR5NDJ3Y3k0cXR5MHVqNDI4MjInLFxuICAgICAgICAgIGtleWNoYWlucyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdQLWF2YXgxNDNxOGxzeTN5NGtlOWQ2emVsdHJlOHUyYXRlZWQ2dWs5a2EwbnUnLFxuICAgICAgICAgIGtleWNoYWlucyxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGZvciAoY29uc3QgYWRkcmVzcyBvZiBpbnZhbGlkQWRkcmVzc2VzKSB7XG4gICAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKGFzeW5jICgpID0+IGJhc2Vjb2luLnZlcmlmeUFkZHJlc3MoYWRkcmVzcykpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgdmVyaWZ5IGlzIHdhbGxldCBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgKFxuICAgICAgICBhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3Moe1xuICAgICAgICAgIGFkZHJlc3M6XG4gICAgICAgICAgICAnUC1mdWppMTV4M3o0cnZrOGU3dndhNmc5bGt5Zzg5djVkd2tucDQ0ODU4dWV4flAtZnVqaTF3cTBkNTZwdTU0c2djNXhwZXZtM3VyNnNmM2w2a2tlNzBkejBsNH5QLWZ1amkxY2prNGN2ZGZ5NmZmZDRmaDh1bXBubnJtanQweGRhcDAydGNlcDYnLFxuICAgICAgICAgIGtleWNoYWlucyxcbiAgICAgICAgfSlcbiAgICAgICkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBhZGRyZXNzIGxlbmd0aCBhbmQga2V5Y2hhaW4gbGVuZ3RoIGRvbnQgbWF0Y2gnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhhc3luYyAoKSA9PlxuICAgICAgICBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3Moe1xuICAgICAgICAgIGFkZHJlc3M6ICdQLWZ1amkxd3EwZDU2cHU1NHNnYzV4cGV2bTN1cjZzZjNsNmtrZTcwZHowbDR+UC1mdWppMWNqazRjdmRmeTZmZmQ0Zmg4dW1wbm5ybWp0MHhkYXAwMnRjZXA2JyxcbiAgICAgICAgICBrZXljaGFpbnMsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGtleWNoYWluIGlzIG5vdCBvZiBsZW5ndGggMycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKGFzeW5jICgpID0+XG4gICAgICAgIGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgICAgYWRkcmVzczogJ1AtZnVqaTF3cTBkNTZwdTU0c2djNXhwZXZtM3VyNnNmM2w2a2tlNzBkejBsNCcsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnNbMF0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19