@bitgo/abstract-utxo 12.7.0 → 13.1.0

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 (103) hide show
  1. package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
  2. package/dist/cjs/src/abstractUtxoCoin.js +3 -3
  3. package/dist/cjs/src/impl/zec/address.d.ts +6 -0
  4. package/dist/cjs/src/impl/zec/address.d.ts.map +1 -1
  5. package/dist/cjs/src/impl/zec/address.js +38 -1
  6. package/dist/cjs/src/impl/zec/index.d.ts +1 -0
  7. package/dist/cjs/src/impl/zec/index.d.ts.map +1 -1
  8. package/dist/cjs/src/impl/zec/index.js +2 -1
  9. package/dist/cjs/src/impl/zec/recipients.d.ts +2 -1
  10. package/dist/cjs/src/impl/zec/recipients.d.ts.map +1 -1
  11. package/dist/cjs/src/impl/zec/recipients.js +7 -3
  12. package/dist/cjs/src/impl/zec/shieldedAddress.d.ts +36 -0
  13. package/dist/cjs/src/impl/zec/shieldedAddress.d.ts.map +1 -0
  14. package/dist/cjs/src/impl/zec/shieldedAddress.js +51 -0
  15. package/dist/cjs/src/impl/zec/signIronwoodTransaction.d.ts +29 -0
  16. package/dist/cjs/src/impl/zec/signIronwoodTransaction.d.ts.map +1 -0
  17. package/dist/cjs/src/impl/zec/signIronwoodTransaction.js +57 -0
  18. package/dist/cjs/src/impl/zec/types.d.ts +5 -0
  19. package/dist/cjs/src/impl/zec/types.d.ts.map +1 -1
  20. package/dist/cjs/src/impl/zec/types.js +1 -1
  21. package/dist/cjs/src/impl/zec/zec.d.ts +35 -2
  22. package/dist/cjs/src/impl/zec/zec.d.ts.map +1 -1
  23. package/dist/cjs/src/impl/zec/zec.js +94 -1
  24. package/dist/cjs/src/transaction/explainTransaction.d.ts +2 -1
  25. package/dist/cjs/src/transaction/explainTransaction.d.ts.map +1 -1
  26. package/dist/cjs/src/transaction/explainTransaction.js +3 -2
  27. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts +2 -0
  28. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -1
  29. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.js +4 -1
  30. package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
  31. package/dist/cjs/src/transaction/fixedScript/parseTransaction.js +9 -3
  32. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts +7 -0
  33. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -1
  34. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.js +32 -20
  35. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +9 -0
  36. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  37. package/dist/cjs/src/transaction/fixedScript/signTransaction.js +18 -9
  38. package/dist/cjs/src/transaction/recipient.d.ts +24 -1
  39. package/dist/cjs/src/transaction/recipient.d.ts.map +1 -1
  40. package/dist/cjs/src/transaction/recipient.js +32 -4
  41. package/dist/cjs/src/transaction/signTransaction.d.ts +12 -0
  42. package/dist/cjs/src/transaction/signTransaction.d.ts.map +1 -1
  43. package/dist/cjs/src/transaction/signTransaction.js +16 -7
  44. package/dist/cjs/test/unit/bip322.js +14 -4
  45. package/dist/cjs/test/unit/customChangeWallet.js +3 -1
  46. package/dist/cjs/test/unit/impl/zec/psbtDecode.d.ts +2 -0
  47. package/dist/cjs/test/unit/impl/zec/psbtDecode.d.ts.map +1 -0
  48. package/dist/cjs/test/unit/impl/zec/psbtDecode.js +69 -0
  49. package/dist/cjs/test/unit/impl/zec/shieldedPrebuildAndSign.d.ts +2 -0
  50. package/dist/cjs/test/unit/impl/zec/shieldedPrebuildAndSign.d.ts.map +1 -0
  51. package/dist/cjs/test/unit/impl/zec/shieldedPrebuildAndSign.js +470 -0
  52. package/dist/cjs/test/unit/impl/zec/unit/address.js +23 -1
  53. package/dist/cjs/test/unit/impl/zec/unit/resolvePsbtRecipients.js +7 -5
  54. package/dist/cjs/test/unit/impl/zec/unit/shieldedAddress.d.ts +2 -0
  55. package/dist/cjs/test/unit/impl/zec/unit/shieldedAddress.d.ts.map +1 -0
  56. package/dist/cjs/test/unit/impl/zec/unit/shieldedAddress.js +57 -0
  57. package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.js +9 -1
  58. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.js +2 -1
  59. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  60. package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
  61. package/dist/esm/abstractUtxoCoin.js +3 -3
  62. package/dist/esm/impl/zec/address.d.ts +6 -0
  63. package/dist/esm/impl/zec/address.d.ts.map +1 -1
  64. package/dist/esm/impl/zec/address.js +38 -1
  65. package/dist/esm/impl/zec/index.d.ts +1 -0
  66. package/dist/esm/impl/zec/index.d.ts.map +1 -1
  67. package/dist/esm/impl/zec/index.js +2 -1
  68. package/dist/esm/impl/zec/recipients.d.ts +2 -1
  69. package/dist/esm/impl/zec/recipients.d.ts.map +1 -1
  70. package/dist/esm/impl/zec/recipients.js +7 -3
  71. package/dist/esm/impl/zec/shieldedAddress.d.ts +36 -0
  72. package/dist/esm/impl/zec/shieldedAddress.d.ts.map +1 -0
  73. package/dist/esm/impl/zec/shieldedAddress.js +48 -0
  74. package/dist/esm/impl/zec/signIronwoodTransaction.d.ts +29 -0
  75. package/dist/esm/impl/zec/signIronwoodTransaction.d.ts.map +1 -0
  76. package/dist/esm/impl/zec/signIronwoodTransaction.js +50 -0
  77. package/dist/esm/impl/zec/types.d.ts +5 -0
  78. package/dist/esm/impl/zec/types.d.ts.map +1 -1
  79. package/dist/esm/impl/zec/types.js +1 -1
  80. package/dist/esm/impl/zec/zec.d.ts +35 -2
  81. package/dist/esm/impl/zec/zec.d.ts.map +1 -1
  82. package/dist/esm/impl/zec/zec.js +92 -2
  83. package/dist/esm/transaction/explainTransaction.d.ts +2 -1
  84. package/dist/esm/transaction/explainTransaction.d.ts.map +1 -1
  85. package/dist/esm/transaction/explainTransaction.js +3 -2
  86. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts +2 -0
  87. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -1
  88. package/dist/esm/transaction/fixedScript/explainPsbtWasm.js +4 -1
  89. package/dist/esm/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
  90. package/dist/esm/transaction/fixedScript/parseTransaction.js +9 -3
  91. package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts +7 -0
  92. package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -1
  93. package/dist/esm/transaction/fixedScript/signPsbtWasm.js +30 -20
  94. package/dist/esm/transaction/fixedScript/signTransaction.d.ts +9 -0
  95. package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  96. package/dist/esm/transaction/fixedScript/signTransaction.js +17 -9
  97. package/dist/esm/transaction/recipient.d.ts +24 -1
  98. package/dist/esm/transaction/recipient.d.ts.map +1 -1
  99. package/dist/esm/transaction/recipient.js +32 -4
  100. package/dist/esm/transaction/signTransaction.d.ts +12 -0
  101. package/dist/esm/transaction/signTransaction.d.ts.map +1 -1
  102. package/dist/esm/transaction/signTransaction.js +15 -8
  103. package/package.json +6 -6
@@ -176,6 +176,28 @@ describe('ZecAddressCodec', function () {
176
176
  const codec = new zec_1.ZecAddressCodec('tzec', 'tzec');
177
177
  strict_1.default.throws(() => codec.decode('not-a-real-address'));
178
178
  });
179
+ it('isMatchingScript validates the receiver represented by parsed output metadata', function () {
180
+ const codec = new zec_1.ZecAddressCodec('tzec', 'tzec');
181
+ const transparentScript = codec.decode(testnetWallet.unified);
182
+ const shieldedScript = wasm_utxo_1.zcashAddress.toShieldedReceiverWithCoin(testnetWallet.unified, 'tzec');
183
+ const transparentOutput = {
184
+ address: testnetWallet.unified,
185
+ script: transparentScript,
186
+ isShielded: false,
187
+ };
188
+ const shieldedOutput = {
189
+ address: testnetWallet.unified,
190
+ script: shieldedScript,
191
+ isShielded: true,
192
+ };
193
+ const transparentMetadataForShieldedOutput = { ...transparentOutput, isShielded: true };
194
+ const shieldedMetadataForTransparentOutput = { ...shieldedOutput, isShielded: false };
195
+ strict_1.default.strictEqual(codec.isMatchingScript(transparentMetadataForShieldedOutput), false);
196
+ strict_1.default.strictEqual(codec.isMatchingScript(shieldedMetadataForTransparentOutput), false);
197
+ strict_1.default.strictEqual(codec.isMatchingScript({ address: testnetWallet.unified, script: Buffer.from('00', 'hex') }), false);
198
+ strict_1.default.strictEqual(codec.toExtendedAddressFormat(Buffer.from(shieldedScript), testnetWallet.unified), testnetWallet.unified);
199
+ strict_1.default.throws(() => codec.toExtendedAddressFormat(Buffer.from(transparentScript), 'not-a-real-address'));
200
+ });
179
201
  // -- encode (inherited) ----------------------------------------------------
180
202
  it('encode: round-trips a transparent script to address', function () {
181
203
  const codec = new zec_1.ZecAddressCodec('tzec', 'tzec');
@@ -202,4 +224,4 @@ describe('ZecAddressCodec', function () {
202
224
  strict_1.default.strictEqual(zec.addressCodec.isValidAddress('not-a-real-address'), zec.isValidAddress('not-a-real-address'));
203
225
  });
204
226
  });
205
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9pbXBsL3plYy91bml0L2FkZHJlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnRUFBd0M7QUFFeEMsNENBQTBDO0FBQzFDLGdEQUFxRDtBQUVyRCxxREFPcUM7QUFFckMsb0RBQW9EO0FBQ3BELDJFQUEyRTtBQUMzRSxvREFBb0Q7QUFDcEQsTUFBTSxhQUFhLEdBQUc7SUFDcEIsT0FBTyxFQUNMLHVOQUF1TjtDQUMxTixDQUFDO0FBQ0YsTUFBTSxhQUFhLEdBQUc7SUFDcEIsT0FBTyxFQUNMLDJOQUEyTjtJQUM3TixrQkFBa0IsRUFBRSxxQ0FBcUM7Q0FDMUQsQ0FBQztBQUVGLFFBQVEsQ0FBQywwQkFBMEIsRUFBRTtJQUNuQyxJQUFJLEtBQWUsQ0FBQztJQUNwQixJQUFJLEdBQUcsQ0FBQztJQUNSLElBQUksSUFBSSxDQUFDO0lBRVQsTUFBTSxDQUFDO1FBQ0wsS0FBSyxHQUFHLElBQUksa0JBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFNBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMxQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxVQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDNUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsa0RBQWtELEVBQUU7UUFDckQsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7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QkFBTSxDQUFDLFdBQVcsQ0FDaEIsR0FBRyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUN0RCxHQUFHLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FDMUMsQ0FBQztRQUNGLGdCQUFNLENBQUMsV0FBVyxDQUNoQixHQUFHLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxxQ0FBcUMsQ0FBQyxFQUN0RSxHQUFHLENBQUMsY0FBYyxDQUFDLHFDQUFxQyxDQUFDLENBQzFELENBQUM7UUFDRixnQkFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0lBQ3RILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0L3N0cmljdCc7XG5cbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuaW1wb3J0IHsgZml4ZWRTY3JpcHRXYWxsZXQgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHtcbiAgWmVjLFxuICBUemVjLFxuICBaZWNBZGRyZXNzQ29kZWMsXG4gIGdldFpjYXNoQWRkcmVzc0tpbmQsXG4gIGlzU2hpZWxkZWRaY2FzaEFkZHJlc3MsXG4gIGlzVmFsaWRaY2FzaEFkZHJlc3MsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NyYy9pbXBsL3plYyc7XG5cbi8vIFpJUC0zMTYgdW5pZmllZC1hZGRyZXNzIHRlc3QgdmVjdG9ycywgY29waWVkIGZyb21cbi8vIEJpdEdvV0FTTS9wYWNrYWdlcy93YXNtLXV0eG8vdGVzdC9maXh0dXJlcy96Y2FzaC91bmlmaWVkX2FkZHJlc3MuanNvbiBzb1xuLy8gYm90aCByZXBvcyB0ZXN0IGFnYWluc3QgdGhlIHNhbWUga25vd24tZ29vZCBkYXRhLlxuY29uc3QgemlwMzE2TWFpbm5ldCA9IHtcbiAgdW5pZmllZDpcbiAgICAndTFwZzJhYXBoN2pwOHJwZjZ5aHN6YTI1NzIyc2c1ZmNuM3ZhY2E2emUyN2hxanc3anZ2aGh1eGtwY2cwZ2U5eGg2ZHJzZ2RrZGE4cWpxNWNocGVoa2NweGY4N3JuanJ5anF3eW1kaGVwdHB2bmxqcXFyanF6andrYzJtYTZoY3E2NjZrZ3dmeXR4d2FjOGV5ZXg2bmRncjZlenRlNjY3MDZlM3ZhcXJkMjVkenZ6a2M2OWt3MGpneXd0ZDBjbXE1MnE1bGt3NnVoN2h5dnpqc2U4a3N4Jyxcbn07XG5jb25zdCB0ZXN0bmV0V2FsbGV0ID0ge1xuICB1bmlmaWVkOlxuICAgICd1dGVzdDF3NW0wcWNucDhlZ2w4cWEyOTZuNzBuOG52ajB0cW56azkwcDdmNDh2N21qaGhkcmRxczh2Z3F5ZHNsZzVwbG16ZWZhd2VmbnBtZ21sbTZoY3kzOG05NzJlcnd4czA0czAyY3EycHJoZ3V6OGtxbHk3NW02emp5NTZtMDhkNWpueWNndHBxdGplcHJ0ZTU3NmdrbXJ4eXN6ZXBneDc2eXp1d2hoN200bGZ6OWphcTd1bmprMHg1YW50NDZqdXh6NzNoc2M2cTR2M2RxdHp3dzAwdnBzJyxcbiAgdHJhbnNwYXJlbnRBZGRyZXNzOiAndG1NNER2TFZKS1hadDV5ZG4xdHFZVEh2YWhwS1N3Z2p1UmsnLFxufTtcblxuZGVzY3JpYmUoJ1pjYXNoIGFkZHJlc3MgdmFsaWRhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJpdGdvOiBCaXRHb0FQSTtcbiAgbGV0IHplYztcbiAgbGV0IHR6ZWM7XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7IGVudjogJ21vY2snIH0pO1xuICAgIGJpdGdvLnJlZ2lzdGVyKCd6ZWMnLCBaZWMuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLnJlZ2lzdGVyKCd0emVjJywgVHplYy5jcmVhdGVJbnN0YW5jZSk7XG4gICAgemVjID0gYml0Z28uY29pbignemVjJyk7XG4gICAgdHplYyA9IGJpdGdvLmNvaW4oJ3R6ZWMnKTtcbiAgfSk7XG5cbiAgaXQoJ3JlY29nbml6ZXMgYSBtYWlubmV0IHVuaWZpZWQgYWRkcmVzcyBhcyBzaGllbGRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoemVjLmlzVmFsaWRBZGRyZXNzKHppcDMxNk1haW5uZXQudW5pZmllZCksIHRydWUpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChnZXRaY2FzaEFkZHJlc3NLaW5kKHppcDMxNk1haW5uZXQudW5pZmllZCwgJ3plYycpLCAnc2hpZWxkZWQnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNTaGllbGRlZFpjYXNoQWRkcmVzcyh6aXAzMTZNYWlubmV0LnVuaWZpZWQsICd6ZWMnKSwgdHJ1ZSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzVmFsaWRaY2FzaEFkZHJlc3MoemlwMzE2TWFpbm5ldC51bmlmaWVkLCAnemVjJyksIHRydWUpO1xuICB9KTtcblxuICBpdCgncmVjb2duaXplcyBhIHRlc3RuZXQgdW5pZmllZCBhZGRyZXNzIGFzIHNoaWVsZGVkJywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0emVjLmlzVmFsaWRBZGRyZXNzKHRlc3RuZXRXYWxsZXQudW5pZmllZCksIHRydWUpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChnZXRaY2FzaEFkZHJlc3NLaW5kKHRlc3RuZXRXYWxsZXQudW5pZmllZCwgJ3R6ZWMnKSwgJ3NoaWVsZGVkJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzU2hpZWxkZWRaY2FzaEFkZHJlc3ModGVzdG5ldFdhbGxldC51bmlmaWVkLCAndHplYycpLCB0cnVlKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNWYWxpZFpjYXNoQWRkcmVzcyh0ZXN0bmV0V2FsbGV0LnVuaWZpZWQsICd0emVjJyksIHRydWUpO1xuICB9KTtcblxuICBpdCgncmVjb2duaXplcyBhIHRlc3RuZXQgdHJhbnNwYXJlbnQgYWRkcmVzcyBhcyB0cmFuc3BhcmVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHplYy5pc1ZhbGlkQWRkcmVzcyh0ZXN0bmV0V2FsbGV0LnRyYW5zcGFyZW50QWRkcmVzcyksIHRydWUpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChnZXRaY2FzaEFkZHJlc3NLaW5kKHRlc3RuZXRXYWxsZXQudHJhbnNwYXJlbnRBZGRyZXNzLCAndHplYycpLCAndHJhbnNwYXJlbnQnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNWYWxpZFpjYXNoQWRkcmVzcyh0ZXN0bmV0V2FsbGV0LnRyYW5zcGFyZW50QWRkcmVzcywgJ3R6ZWMnKSwgdHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdyZWNvZ25pemVzIGEgbWFpbm5ldCB0cmFuc3BhcmVudCAoUDJQS0gpIGFkZHJlc3MgYXMgdHJhbnNwYXJlbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYWRkcmVzcyA9ICd0MWNOMlpWV3pXY1ZScm5mZVF6bWtwTGh6UTRkWVJ2OHlSWSc7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHplYy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSwgdHJ1ZSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGdldFpjYXNoQWRkcmVzc0tpbmQoYWRkcmVzcywgJ3plYycpLCAndHJhbnNwYXJlbnQnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNWYWxpZFpjYXNoQWRkcmVzcyhhZGRyZXNzLCAnemVjJyksIHRydWUpO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyBhIGdhcmJhZ2Ugc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGdhcmJhZ2UgPSAnbm90LWEtcmVhbC1hZGRyZXNzJztcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoemVjLmlzVmFsaWRBZGRyZXNzKGdhcmJhZ2UpLCBmYWxzZSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGdldFpjYXNoQWRkcmVzc0tpbmQoZ2FyYmFnZSwgJ3plYycpLCB1bmRlZmluZWQpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1ZhbGlkWmNhc2hBZGRyZXNzKGdhcmJhZ2UsICd6ZWMnKSwgZmFsc2UpO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyBhIHVuaWZpZWQgYWRkcmVzcyBjaGVja2VkIGFnYWluc3QgdGhlIHdyb25nIG5ldHdvcmsnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR6ZWMuaXNWYWxpZEFkZHJlc3MoemlwMzE2TWFpbm5ldC51bmlmaWVkKSwgZmFsc2UpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChnZXRaY2FzaEFkZHJlc3NLaW5kKHppcDMxNk1haW5uZXQudW5pZmllZCwgJ3R6ZWMnKSwgdW5kZWZpbmVkKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNTaGllbGRlZFpjYXNoQWRkcmVzcyh6aXAzMTZNYWlubmV0LnVuaWZpZWQsICd0emVjJyksIGZhbHNlKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNWYWxpZFpjYXNoQWRkcmVzcyh6aXAzMTZNYWlubmV0LnVuaWZpZWQsICd0emVjJyksIGZhbHNlKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ1plY0FkZHJlc3NDb2RlYycsIGZ1bmN0aW9uICgpIHtcbiAgLy8gLS0gaW5zdGFudGlhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgbGV0IGJpdGdvOiBCaXRHb0FQSTtcbiAgbGV0IHplYztcbiAgbGV0IHR6ZWM7XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7IGVudjogJ21vY2snIH0pO1xuICAgIGJpdGdvLnJlZ2lzdGVyKCd6ZWMnLCBaZWMuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLnJlZ2lzdGVyKCd0emVjJywgVHplYy5jcmVhdGVJbnN0YW5jZSk7XG4gICAgemVjID0gYml0Z28uY29pbignemVjJyk7XG4gICAgdHplYyA9IGJpdGdvLmNvaW4oJ3R6ZWMnKTtcbiAgfSk7XG5cbiAgaXQoJ2NvbnN0cnVjdHMgZm9yIHplYyBhbmQgdHplYycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBtYWlubmV0ID0gbmV3IFplY0FkZHJlc3NDb2RlYygnemVjJywgJ3plYycpO1xuICAgIGNvbnN0IHRlc3RuZXQgPSBuZXcgWmVjQWRkcmVzc0NvZGVjKCd0emVjJywgJ3R6ZWMnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwobWFpbm5ldC5jb2luTmFtZSwgJ3plYycpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0ZXN0bmV0LmNvaW5OYW1lLCAndHplYycpO1xuICB9KTtcblxuICAvLyAtLSBpc1ZhbGlkQWRkcmVzcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGl0KCdpc1ZhbGlkQWRkcmVzczogYWNjZXB0cyBtYWlubmV0IFVBJywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChuZXcgWmVjQWRkcmVzc0NvZGVjKCd6ZWMnLCAnemVjJykuaXNWYWxpZEFkZHJlc3MoemlwMzE2TWFpbm5ldC51bmlmaWVkKSwgdHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdpc1ZhbGlkQWRkcmVzczogYWNjZXB0cyB0ZXN0bmV0IFVBJywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChuZXcgWmVjQWRkcmVzc0NvZGVjKCd0emVjJywgJ3R6ZWMnKS5pc1ZhbGlkQWRkcmVzcyh0ZXN0bmV0V2FsbGV0LnVuaWZpZWQpLCB0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ2lzVmFsaWRBZGRyZXNzOiBhY2NlcHRzIG1haW5uZXQgUDJQS0gnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG5ldyBaZWNBZGRyZXNzQ29kZWMoJ3plYycsICd6ZWMnKS5pc1ZhbGlkQWRkcmVzcygndDFjTjJaVld6V2NWUnJuZmVRem1rcExoelE0ZFlSdjh5UlknKSwgdHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdpc1ZhbGlkQWRkcmVzczogYWNjZXB0cyB0ZXN0bmV0IHRyYW5zcGFyZW50IGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG5ldyBaZWNBZGRyZXNzQ29kZWMoJ3R6ZWMnLCAndHplYycpLmlzVmFsaWRBZGRyZXNzKHRlc3RuZXRXYWxsZXQudHJhbnNwYXJlbnRBZGRyZXNzKSwgdHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdpc1ZhbGlkQWRkcmVzczogcmVqZWN0cyB3cm9uZy1uZXR3b3JrIFVBJywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChuZXcgWmVjQWRkcmVzc0NvZGVjKCd0emVjJywgJ3R6ZWMnKS5pc1ZhbGlkQWRkcmVzcyh6aXAzMTZNYWlubmV0LnVuaWZpZWQpLCBmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdpc1ZhbGlkQWRkcmVzczogcmVqZWN0cyBnYXJiYWdlJywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChuZXcgWmVjQWRkcmVzc0NvZGVjKCd0emVjJywgJ3R6ZWMnKS5pc1ZhbGlkQWRkcmVzcygnbm90LWEtcmVhbC1hZGRyZXNzJyksIGZhbHNlKTtcbiAgfSk7XG5cbiAgLy8gLS0gZGVjb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBpdCgnZGVjb2RlOiBwbGFpbiB0cmFuc3BhcmVudCBhZGRyZXNzIGRlY29kZXMgdG8gUDJQS0ggc2NyaXB0JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGNvZGVjID0gbmV3IFplY0FkZHJlc3NDb2RlYygndHplYycsICd0emVjJyk7XG4gICAgY29uc3Qgc2NyaXB0ID0gQnVmZmVyLmZyb20oY29kZWMuZGVjb2RlKHRlc3RuZXRXYWxsZXQudHJhbnNwYXJlbnRBZGRyZXNzKSk7XG4gICAgLy8gUDJQS0g6IE9QX0RVUCBPUF9IQVNIMTYwIDwyMC1ieXRlIGhhc2g+IE9QX0VRVUFMVkVSSUZZIE9QX0NIRUNLU0lHXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNjcmlwdFswXSwgMHg3Nik7IC8vIE9QX0RVUFxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzY3JpcHRbMV0sIDB4YTkpOyAvLyBPUF9IQVNIMTYwXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNjcmlwdFsyXSwgMHgxNCk7IC8vIHB1c2ggMjAgYnl0ZXNcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2NyaXB0Lmxlbmd0aCwgMjUpOyAvLyB0b3RhbCBQMlBLSCBsZW5ndGhcbiAgfSk7XG5cbiAgaXQoJ2RlY29kZTogVUEgd2l0aCB0cmFuc3BhcmVudCByZWNlaXZlciBkZWNvZGVzIHRvIHRoZSBzYW1lIHRyYW5zcGFyZW50IHNjcmlwdCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjb2RlYyA9IG5ldyBaZWNBZGRyZXNzQ29kZWMoJ3R6ZWMnLCAndHplYycpO1xuICAgIC8vIFRoZSB0ZXN0bmV0IFVBIGNhcnJpZXMgYSB0cmFuc3BhcmVudCByZWNlaXZlcjsgaXQgc2hvdWxkIGRlY29kZSB0byB0aGVcbiAgICAvLyBzYW1lIHNjcmlwdFB1YktleSBhcyB0aGUgc3RhbmRhbG9uZSB0cmFuc3BhcmVudCBhZGRyZXNzLlxuICAgIGNvbnN0IHVhU2NyaXB0ID0gQnVmZmVyLmZyb20oY29kZWMuZGVjb2RlKHRlc3RuZXRXYWxsZXQudW5pZmllZCkpO1xuICAgIGNvbnN0IHRBZGRyU2NyaXB0ID0gQnVmZmVyLmZyb20oY29kZWMuZGVjb2RlKHRlc3RuZXRXYWxsZXQudHJhbnNwYXJlbnRBZGRyZXNzKSk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCh1YVNjcmlwdCwgdEFkZHJTY3JpcHQpO1xuICB9KTtcblxuICBpdCgnZGVjb2RlOiBVQSB3aXRoIHRyYW5zcGFyZW50IHJlY2VpdmVyIGRlY29kZXMgb24gbWFpbm5ldCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjb2RlYyA9IG5ldyBaZWNBZGRyZXNzQ29kZWMoJ3plYycsICd6ZWMnKTtcbiAgICBjb25zdCBzY3JpcHQgPSBCdWZmZXIuZnJvbShjb2RlYy5kZWNvZGUoemlwMzE2TWFpbm5ldC51bmlmaWVkKSk7XG4gICAgLy8gUDJQS0ggc3RydWN0dXJlIHRlc3RcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2NyaXB0WzBdLCAweDc2KTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2NyaXB0WzFdLCAweGE5KTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2NyaXB0WzJdLCAweDE0KTtcbiAgfSk7XG5cbiAgaXQoJ2RlY29kZTogdGhyb3dzIGZvciBhIFVBIHdpdGhvdXQgYSB0cmFuc3BhcmVudCByZWNlaXZlciAob3JjaGFyZC1vbmx5KScsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBDb25zdHJ1Y3QgYW4gT3JjaGFyZC1vbmx5IFVBIGJ5IGVuY29kaW5nIGEgZHVtbXkgcmVjZWl2ZXJcbiAgICBjb25zdCBvcmNoYXJkT25seSA9IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoVW5pZmllZEFkZHJlc3MuZW5jb2RlT3JjaGFyZFJlY2VpdmVyKFxuICAgICAgbmV3IFVpbnQ4QXJyYXkoNDMpLmZpbGwoMHg0MiksXG4gICAgICAndHplYydcbiAgICApO1xuICAgIGNvbnN0IGNvZGVjID0gbmV3IFplY0FkZHJlc3NDb2RlYygndHplYycsICd0emVjJyk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBjb2RlYy5kZWNvZGUob3JjaGFyZE9ubHkpKTtcbiAgfSk7XG5cbiAgaXQoJ2RlY29kZTogZXhwbGljaXQgdHJhbnNwYXJlbnQtYm91bmQgY29kZWMgcmV0dXJucyB0aGUgdHJhbnNwYXJlbnQgc2NyaXB0JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGNvZGVjID0gbmV3IFplY0FkZHJlc3NDb2RlYygndHplYycsICd0emVjJywgJ3RyYW5zcGFyZW50Jyk7XG4gICAgY29uc3Qgc2NyaXB0ID0gQnVmZmVyLmZyb20oY29kZWMuZGVjb2RlKHRlc3RuZXRXYWxsZXQudW5pZmllZCkpO1xuICAgIGNvbnN0IHRBZGRyU2NyaXB0ID0gQnVmZmVyLmZyb20oY29kZWMuZGVjb2RlKHRlc3RuZXRXYWxsZXQudHJhbnNwYXJlbnRBZGRyZXNzKSk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChzY3JpcHQsIHRBZGRyU2NyaXB0KTtcbiAgfSk7XG5cbiAgaXQoJ2RlY29kZTogc2hpZWxkZWQtYm91bmQgY29kZWMgcmV0dXJucyB0aGUgcmF3IDQzLWJ5dGUgT3JjaGFyZCByZWNlaXZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjb2RlYyA9IG5ldyBaZWNBZGRyZXNzQ29kZWMoJ3R6ZWMnLCAndHplYycsICdzaGllbGRlZCcpO1xuICAgIGNvbnN0IHJlY2VpdmVyID0gQnVmZmVyLmZyb20oY29kZWMuZGVjb2RlKHRlc3RuZXRXYWxsZXQudW5pZmllZCkpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNlaXZlci5sZW5ndGgsIDQzKTtcbiAgICBjb25zdCBwYXJzZWQgPSBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaFVuaWZpZWRBZGRyZXNzLnBhcnNlKHRlc3RuZXRXYWxsZXQudW5pZmllZCwgJ3R6ZWMnKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHJlY2VpdmVyLCBCdWZmZXIuZnJvbShwYXJzZWQub3JjaGFyZFJlY2VpdmVyIGFzIFVpbnQ4QXJyYXkpKTtcbiAgfSk7XG5cbiAgaXQoJ2RlY29kZTogc2hpZWxkZWQtYm91bmQgY29kZWMgb24gbWFpbm5ldCByZXR1cm5zIHRoZSByYXcgNDMtYnl0ZSBPcmNoYXJkIHJlY2VpdmVyJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGNvZGVjID0gbmV3IFplY0FkZHJlc3NDb2RlYygnemVjJywgJ3plYycsICdzaGllbGRlZCcpO1xuICAgIGNvbnN0IHJlY2VpdmVyID0gQnVmZmVyLmZyb20oY29kZWMuZGVjb2RlKHppcDMxNk1haW5uZXQudW5pZmllZCkpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNlaXZlci5sZW5ndGgsIDQzKTtcbiAgICBjb25zdCBwYXJzZWQgPSBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaFVuaWZpZWRBZGRyZXNzLnBhcnNlKHppcDMxNk1haW5uZXQudW5pZmllZCwgJ3plYycpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocmVjZWl2ZXIsIEJ1ZmZlci5mcm9tKHBhcnNlZC5vcmNoYXJkUmVjZWl2ZXIgYXMgVWludDhBcnJheSkpO1xuICB9KTtcblxuICBpdCgnZGVjb2RlOiBzaGllbGRlZC1ib3VuZCBjb2RlYyByZXNvbHZlcyBhbiBPcmNoYXJkLW9ubHkgVUEgdG8gaXRzIHJlY2VpdmVyJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG9yY2hhcmRPbmx5ID0gZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hVbmlmaWVkQWRkcmVzcy5lbmNvZGVPcmNoYXJkUmVjZWl2ZXIoXG4gICAgICBuZXcgVWludDhBcnJheSg0MykuZmlsbCgweDQyKSxcbiAgICAgICd0emVjJ1xuICAgICk7XG4gICAgY29uc3QgY29kZWMgPSBuZXcgWmVjQWRkcmVzc0NvZGVjKCd0emVjJywgJ3R6ZWMnLCAnc2hpZWxkZWQnKTtcbiAgICBjb25zdCByZWNlaXZlciA9IEJ1ZmZlci5mcm9tKGNvZGVjLmRlY29kZShvcmNoYXJkT25seSkpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNlaXZlci5sZW5ndGgsIDQzKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHJlY2VpdmVyLCBCdWZmZXIuZnJvbShuZXcgVWludDhBcnJheSg0MykuZmlsbCgweDQyKSkpO1xuICB9KTtcblxuICBpdCgnZGVjb2RlOiBzaGllbGRlZC1ib3VuZCBjb2RlYyB0aHJvd3MgaW52YWxpZC1hZGRyZXNzIGVycm9yIGZvciBhIHBsYWluIHRyYW5zcGFyZW50IGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgY29kZWMgPSBuZXcgWmVjQWRkcmVzc0NvZGVjKCd0emVjJywgJ3R6ZWMnLCAnc2hpZWxkZWQnKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGNvZGVjLmRlY29kZSh0ZXN0bmV0V2FsbGV0LnRyYW5zcGFyZW50QWRkcmVzcyksIC9pcyBub3QgYSB2YWxpZCBhZGRyZXNzIGZvciBuZXR3b3JrLyk7XG4gIH0pO1xuXG4gIGl0KCdkZWNvZGU6IHNoaWVsZGVkLWJvdW5kIGNvZGVjIHRocm93cyBpbnZhbGlkLWFkZHJlc3MgZXJyb3IgZm9yIGEgd3JvbmctbmV0d29yayBVQScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjb2RlYyA9IG5ldyBaZWNBZGRyZXNzQ29kZWMoJ3R6ZWMnLCAndHplYycsICdzaGllbGRlZCcpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gY29kZWMuZGVjb2RlKHppcDMxNk1haW5uZXQudW5pZmllZCksIC9pcyBub3QgYSB2YWxpZCBhZGRyZXNzIGZvciBuZXR3b3JrLyk7XG4gIH0pO1xuXG4gIGl0KCdkZWNvZGU6IHNoaWVsZGVkLWJvdW5kIGNvZGVjIHRocm93cyBpbnZhbGlkLWFkZHJlc3MgZXJyb3IgZm9yIGdhcmJhZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgY29kZWMgPSBuZXcgWmVjQWRkcmVzc0NvZGVjKCd0emVjJywgJ3R6ZWMnLCAnc2hpZWxkZWQnKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGNvZGVjLmRlY29kZSgnbm90LWEtcmVhbC1hZGRyZXNzJyksIC9pcyBub3QgYSB2YWxpZCBhZGRyZXNzIGZvciBuZXR3b3JrLyk7XG4gIH0pO1xuXG4gIGl0KCdkZWNvZGU6IHRocm93cyBmb3IgZ2FyYmFnZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjb2RlYyA9IG5ldyBaZWNBZGRyZXNzQ29kZWMoJ3R6ZWMnLCAndHplYycpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gY29kZWMuZGVjb2RlKCdub3QtYS1yZWFsLWFkZHJlc3MnKSk7XG4gIH0pO1xuXG4gIC8vIC0tIGVuY29kZSAoaW5oZXJpdGVkKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgaXQoJ2VuY29kZTogcm91bmQtdHJpcHMgYSB0cmFuc3BhcmVudCBzY3JpcHQgdG8gYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjb2RlYyA9IG5ldyBaZWNBZGRyZXNzQ29kZWMoJ3R6ZWMnLCAndHplYycpO1xuICAgIGNvbnN0IHNjcmlwdCA9IGNvZGVjLmRlY29kZSh0ZXN0bmV0V2FsbGV0LnRyYW5zcGFyZW50QWRkcmVzcyk7XG4gICAgY29uc3QgYWRkcmVzcyA9IGNvZGVjLmVuY29kZShzY3JpcHQpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZGRyZXNzLCB0ZXN0bmV0V2FsbGV0LnRyYW5zcGFyZW50QWRkcmVzcyk7XG4gIH0pO1xuXG4gIGl0KCdlbmNvZGU6IHJvdW5kLXRyaXBzIG9uIG1haW5uZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgY29kZWMgPSBuZXcgWmVjQWRkcmVzc0NvZGVjKCd6ZWMnLCAnemVjJyk7XG4gICAgY29uc3QgYWRkcmVzcyA9ICd0MWNOMlpWV3pXY1ZScm5mZVF6bWtwTGh6UTRkWVJ2OHlSWSc7XG4gICAgY29uc3Qgc2NyaXB0ID0gY29kZWMuZGVjb2RlKGFkZHJlc3MpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChjb2RlYy5lbmNvZGUoc2NyaXB0KSwgYWRkcmVzcyk7XG4gIH0pO1xuXG4gIC8vIC0tIGludGVncmF0aW9uOiBjb2luLmFkZHJlc3NDb2RlYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgaXQoJ2NvaW4uYWRkcmVzc0NvZGVjOiB6ZWMgcmV0dXJucyBaZWNBZGRyZXNzQ29kZWMnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0Lm9rKHplYy5hZGRyZXNzQ29kZWMgaW5zdGFuY2VvZiBaZWNBZGRyZXNzQ29kZWMpO1xuICB9KTtcblxuICBpdCgnY29pbi5hZGRyZXNzQ29kZWM6IHR6ZWMgcmV0dXJucyBaZWNBZGRyZXNzQ29kZWMnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0Lm9rKHR6ZWMuYWRkcmVzc0NvZGVjIGluc3RhbmNlb2YgWmVjQWRkcmVzc0NvZGVjKTtcbiAgfSk7XG5cbiAgaXQoJ2NvaW4uYWRkcmVzc0NvZGVjLmlzVmFsaWRBZGRyZXNzIG1hdGNoZXMgWmVjLmlzVmFsaWRBZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgIHplYy5hZGRyZXNzQ29kZWMuaXNWYWxpZEFkZHJlc3MoemlwMzE2TWFpbm5ldC51bmlmaWVkKSxcbiAgICAgIHplYy5pc1ZhbGlkQWRkcmVzcyh6aXAzMTZNYWlubmV0LnVuaWZpZWQpXG4gICAgKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICB6ZWMuYWRkcmVzc0NvZGVjLmlzVmFsaWRBZGRyZXNzKCd0MWNOMlpWV3pXY1ZScm5mZVF6bWtwTGh6UTRkWVJ2OHlSWScpLFxuICAgICAgemVjLmlzVmFsaWRBZGRyZXNzKCd0MWNOMlpWV3pXY1ZScm5mZVF6bWtwTGh6UTRkWVJ2OHlSWScpXG4gICAgKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoemVjLmFkZHJlc3NDb2RlYy5pc1ZhbGlkQWRkcmVzcygnbm90LWEtcmVhbC1hZGRyZXNzJyksIHplYy5pc1ZhbGlkQWRkcmVzcygnbm90LWEtcmVhbC1hZGRyZXNzJykpO1xuICB9KTtcbn0pO1xuIl19
227
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9pbXBsL3plYy91bml0L2FkZHJlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnRUFBd0M7QUFFeEMsNENBQTBDO0FBQzFDLGdEQUFtRTtBQUVuRSxxREFPcUM7QUFHckMsb0RBQW9EO0FBQ3BELDJFQUEyRTtBQUMzRSxvREFBb0Q7QUFDcEQsTUFBTSxhQUFhLEdBQUc7SUFDcEIsT0FBTyxFQUNMLHVOQUF1TjtDQUMxTixDQUFDO0FBQ0YsTUFBTSxhQUFhLEdBQUc7SUFDcEIsT0FBTyxFQUNMLDJOQUEyTjtJQUM3TixrQkFBa0IsRUFBRSxxQ0FBcUM7Q0FDMUQsQ0FBQztBQUVGLFFBQVEsQ0FBQywwQkFBMEIsRUFBRTtJQUNuQyxJQUFJLEtBQWUsQ0FBQztJQUNwQixJQUFJLEdBQUcsQ0FBQztJQUNSLElBQUksSUFBSSxDQUFDO0lBRVQsTUFBTSxDQUFDO1FBQ0wsS0FBSyxHQUFHLElBQUksa0JBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFNBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMxQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxVQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDNUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsa0RBQWtELEVBQUU7UUFDckQsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7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QyxDQUFDO0lBQ3BELENBQUMsQ0FBQyxDQUFDO0lBRUgsNkVBQTZFO0lBRTdFLEVBQUUsQ0FBQyxnREFBZ0QsRUFBRTtRQUNuRCxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxZQUFZLHFCQUFlLENBQUMsQ0FBQztJQUN6RCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxpREFBaUQsRUFBRTtRQUNwRCxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxZQUFZLHFCQUFlLENBQUMsQ0FBQztJQUMxRCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw2REFBNkQsRUFBRTtRQUNoRSxnQkFBTSxDQUFDLFdBQVcsQ0FDaEIsR0FBRyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUN0RCxHQUFHLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FDMUMsQ0FBQztRQUNGLGdCQUFNLENBQUMsV0FBVyxDQUNoQixHQUFHLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxxQ0FBcUMsQ0FBQyxFQUN0RSxHQUFHLENBQUMsY0FBYyxDQUFDLHFDQUFxQyxDQUFDLENBQzFELENBQUM7UUFDRixnQkFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0lBQ3RILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0L3N0cmljdCc7XG5cbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuaW1wb3J0IHsgZml4ZWRTY3JpcHRXYWxsZXQsIHpjYXNoQWRkcmVzcyB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQge1xuICBaZWMsXG4gIFR6ZWMsXG4gIFplY0FkZHJlc3NDb2RlYyxcbiAgZ2V0WmNhc2hBZGRyZXNzS2luZCxcbiAgaXNTaGllbGRlZFpjYXNoQWRkcmVzcyxcbiAgaXNWYWxpZFpjYXNoQWRkcmVzcyxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjL2ltcGwvemVjJztcbmltcG9ydCB0eXBlIHsgWmVjQWRkcmVzc0NvZGVjT3V0cHV0IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjL2ltcGwvemVjL3R5cGVzJztcblxuLy8gWklQLTMxNiB1bmlmaWVkLWFkZHJlc3MgdGVzdCB2ZWN0b3JzLCBjb3BpZWQgZnJvbVxuLy8gQml0R29XQVNNL3BhY2thZ2VzL3dhc20tdXR4by90ZXN0L2ZpeHR1cmVzL3pjYXNoL3VuaWZpZWRfYWRkcmVzcy5qc29uIHNvXG4vLyBib3RoIHJlcG9zIHRlc3QgYWdhaW5zdCB0aGUgc2FtZSBrbm93bi1nb29kIGRhdGEuXG5jb25zdCB6aXAzMTZNYWlubmV0ID0ge1xuICB1bmlmaWVkOlxuICAgICd1MXBnMmFhcGg3anA4cnBmNnloc3phMjU3MjJzZzVmY24zdmFjYTZ6ZTI3aHFqdzdqdnZoaHV4a3BjZzBnZTl4aDZkcnNnZGtkYThxanE1Y2hwZWhrY3B4Zjg3cm5qcnlqcXd5bWRoZXB0cHZubGpxcXJqcXpqd2tjMm1hNmhjcTY2Nmtnd2Z5dHh3YWM4ZXlleDZuZGdyNmV6dGU2NjcwNmUzdmFxcmQyNWR6dnprYzY5a3cwamd5d3RkMGNtcTUycTVsa3c2dWg3aHl2empzZThrc3gnLFxufTtcbmNvbnN0IHRlc3RuZXRXYWxsZXQgPSB7XG4gIHVuaWZpZWQ6XG4gICAgJ3V0ZXN0MXc1bTBxY25wOGVnbDhxYTI5Nm43MG44bnZqMHRxbnprOTBwN2Y0OHY3bWpoaGRyZHFzOHZncXlkc2xnNXBsbXplZmF3ZWZucG1nbWxtNmhjeTM4bTk3MmVyd3hzMDRzMDJjcTJwcmhndXo4a3FseTc1bTZ6ank1Nm0wOGQ1am55Y2d0cHF0amVwcnRlNTc2Z2ttcnh5c3plcGd4NzZ5enV3aGg3bTRsZno5amFxN3VuamsweDVhbnQ0Nmp1eHo3M2hzYzZxNHYzZHF0end3MDB2cHMnLFxuICB0cmFuc3BhcmVudEFkZHJlc3M6ICd0bU00RHZMVkpLWFp0NXlkbjF0cVlUSHZhaHBLU3dnanVSaycsXG59O1xuXG5kZXNjcmliZSgnWmNhc2ggYWRkcmVzcyB2YWxpZGF0aW9uJywgZnVuY3Rpb24gKCkge1xuICBsZXQgYml0Z286IEJpdEdvQVBJO1xuICBsZXQgemVjO1xuICBsZXQgdHplYztcblxuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGJpdGdvID0gbmV3IEJpdEdvQVBJKHsgZW52OiAnbW9jaycgfSk7XG4gICAgYml0Z28ucmVnaXN0ZXIoJ3plYycsIFplYy5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYml0Z28ucmVnaXN0ZXIoJ3R6ZWMnLCBUemVjLmNyZWF0ZUluc3RhbmNlKTtcbiAgICB6ZWMgPSBiaXRnby5jb2luKCd6ZWMnKTtcbiAgICB0emVjID0gYml0Z28uY29pbigndHplYycpO1xuICB9KTtcblxuICBpdCgncmVjb2duaXplcyBhIG1haW5uZXQgdW5pZmllZCBhZGRyZXNzIGFzIHNoaWVsZGVkJywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh6ZWMuaXNWYWxpZEFkZHJlc3MoemlwMzE2TWFpbm5ldC51bmlmaWVkKSwgdHJ1ZSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGdldFpjYXNoQWRkcmVzc0tpbmQoemlwMzE2TWFpbm5ldC51bmlmaWVkLCAnemVjJyksICdzaGllbGRlZCcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1NoaWVsZGVkWmNhc2hBZGRyZXNzKHppcDMxNk1haW5uZXQudW5pZmllZCwgJ3plYycpLCB0cnVlKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNWYWxpZFpjYXNoQWRkcmVzcyh6aXAzMTZNYWlubmV0LnVuaWZpZWQsICd6ZWMnKSwgdHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdyZWNvZ25pemVzIGEgdGVzdG5ldCB1bmlmaWVkIGFkZHJlc3MgYXMgc2hpZWxkZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR6ZWMuaXNWYWxpZEFkZHJlc3ModGVzdG5ldFdhbGxldC51bmlmaWVkKSwgdHJ1ZSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGdldFpjYXNoQWRkcmVzc0tpbmQodGVzdG5ldFdhbGxldC51bmlmaWVkLCAndHplYycpLCAnc2hpZWxkZWQnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNTaGllbGRlZFpjYXNoQWRkcmVzcyh0ZXN0bmV0V2FsbGV0LnVuaWZpZWQsICd0emVjJyksIHRydWUpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1ZhbGlkWmNhc2hBZGRyZXNzKHRlc3RuZXRXYWxsZXQudW5pZmllZCwgJ3R6ZWMnKSwgdHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdyZWNvZ25pemVzIGEgdGVzdG5ldCB0cmFuc3BhcmVudCBhZGRyZXNzIGFzIHRyYW5zcGFyZW50JywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0emVjLmlzVmFsaWRBZGRyZXNzKHRlc3RuZXRXYWxsZXQudHJhbnNwYXJlbnRBZGRyZXNzKSwgdHJ1ZSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGdldFpjYXNoQWRkcmVzc0tpbmQodGVzdG5ldFdhbGxldC50cmFuc3BhcmVudEFkZHJlc3MsICd0emVjJyksICd0cmFuc3BhcmVudCcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1ZhbGlkWmNhc2hBZGRyZXNzKHRlc3RuZXRXYWxsZXQudHJhbnNwYXJlbnRBZGRyZXNzLCAndHplYycpLCB0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ3JlY29nbml6ZXMgYSBtYWlubmV0IHRyYW5zcGFyZW50IChQMlBLSCkgYWRkcmVzcyBhcyB0cmFuc3BhcmVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBhZGRyZXNzID0gJ3QxY04yWlZXeldjVlJybmZlUXpta3BMaHpRNGRZUnY4eVJZJztcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoemVjLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpLCB0cnVlKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZ2V0WmNhc2hBZGRyZXNzS2luZChhZGRyZXNzLCAnemVjJyksICd0cmFuc3BhcmVudCcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1ZhbGlkWmNhc2hBZGRyZXNzKGFkZHJlc3MsICd6ZWMnKSwgdHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIGEgZ2FyYmFnZSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZ2FyYmFnZSA9ICdub3QtYS1yZWFsLWFkZHJlc3MnO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh6ZWMuaXNWYWxpZEFkZHJlc3MoZ2FyYmFnZSksIGZhbHNlKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZ2V0WmNhc2hBZGRyZXNzS2luZChnYXJiYWdlLCAnemVjJyksIHVuZGVmaW5lZCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzVmFsaWRaY2FzaEFkZHJlc3MoZ2FyYmFnZSwgJ3plYycpLCBmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIGEgdW5pZmllZCBhZGRyZXNzIGNoZWNrZWQgYWdhaW5zdCB0aGUgd3JvbmcgbmV0d29yaycsIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHplYy5pc1ZhbGlkQWRkcmVzcyh6aXAzMTZNYWlubmV0LnVuaWZpZWQpLCBmYWxzZSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGdldFpjYXNoQWRkcmVzc0tpbmQoemlwMzE2TWFpbm5ldC51bmlmaWVkLCAndHplYycpLCB1bmRlZmluZWQpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1NoaWVsZGVkWmNhc2hBZGRyZXNzKHppcDMxNk1haW5uZXQudW5pZmllZCwgJ3R6ZWMnKSwgZmFsc2UpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1ZhbGlkWmNhc2hBZGRyZXNzKHppcDMxNk1haW5uZXQudW5pZmllZCwgJ3R6ZWMnKSwgZmFsc2UpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnWmVjQWRkcmVzc0NvZGVjJywgZnVuY3Rpb24gKCkge1xuICAvLyAtLSBpbnN0YW50aWF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBsZXQgYml0Z286IEJpdEdvQVBJO1xuICBsZXQgemVjO1xuICBsZXQgdHplYztcblxuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGJpdGdvID0gbmV3IEJpdEdvQVBJKHsgZW52OiAnbW9jaycgfSk7XG4gICAgYml0Z28ucmVnaXN0ZXIoJ3plYycsIFplYy5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYml0Z28ucmVnaXN0ZXIoJ3R6ZWMnLCBUemVjLmNyZWF0ZUluc3RhbmNlKTtcbiAgICB6ZWMgPSBiaXRnby5jb2luKCd6ZWMnKTtcbiAgICB0emVjID0gYml0Z28uY29pbigndHplYycpO1xuICB9KTtcblxuICBpdCgnY29uc3RydWN0cyBmb3IgemVjIGFuZCB0emVjJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG1haW5uZXQgPSBuZXcgWmVjQWRkcmVzc0NvZGVjKCd6ZWMnLCAnemVjJyk7XG4gICAgY29uc3QgdGVzdG5ldCA9IG5ldyBaZWNBZGRyZXNzQ29kZWMoJ3R6ZWMnLCAndHplYycpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChtYWlubmV0LmNvaW5OYW1lLCAnemVjJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRlc3RuZXQuY29pbk5hbWUsICd0emVjJyk7XG4gIH0pO1xuXG4gIC8vIC0tIGlzVmFsaWRBZGRyZXNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgaXQoJ2lzVmFsaWRBZGRyZXNzOiBhY2NlcHRzIG1haW5uZXQgVUEnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG5ldyBaZWNBZGRyZXNzQ29kZWMoJ3plYycsICd6ZWMnKS5pc1ZhbGlkQWRkcmVzcyh6aXAzMTZNYWlubmV0LnVuaWZpZWQpLCB0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ2lzVmFsaWRBZGRyZXNzOiBhY2NlcHRzIHRlc3RuZXQgVUEnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG5ldyBaZWNBZGRyZXNzQ29kZWMoJ3R6ZWMnLCAndHplYycpLmlzVmFsaWRBZGRyZXNzKHRlc3RuZXRXYWxsZXQudW5pZmllZCksIHRydWUpO1xuICB9KTtcblxuICBpdCgnaXNWYWxpZEFkZHJlc3M6IGFjY2VwdHMgbWFpbm5ldCBQMlBLSCcsIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwobmV3IFplY0FkZHJlc3NDb2RlYygnemVjJywgJ3plYycpLmlzVmFsaWRBZGRyZXNzKCd0MWNOMlpWV3pXY1ZScm5mZVF6bWtwTGh6UTRkWVJ2OHlSWScpLCB0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ2lzVmFsaWRBZGRyZXNzOiBhY2NlcHRzIHRlc3RuZXQgdHJhbnNwYXJlbnQgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwobmV3IFplY0FkZHJlc3NDb2RlYygndHplYycsICd0emVjJykuaXNWYWxpZEFkZHJlc3ModGVzdG5ldFdhbGxldC50cmFuc3BhcmVudEFkZHJlc3MpLCB0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ2lzVmFsaWRBZGRyZXNzOiByZWplY3RzIHdyb25nLW5ldHdvcmsgVUEnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG5ldyBaZWNBZGRyZXNzQ29kZWMoJ3R6ZWMnLCAndHplYycpLmlzVmFsaWRBZGRyZXNzKHppcDMxNk1haW5uZXQudW5pZmllZCksIGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoJ2lzVmFsaWRBZGRyZXNzOiByZWplY3RzIGdhcmJhZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG5ldyBaZWNBZGRyZXNzQ29kZWMoJ3R6ZWMnLCAndHplYycpLmlzVmFsaWRBZGRyZXNzKCdub3QtYS1yZWFsLWFkZHJlc3MnKSwgZmFsc2UpO1xuICB9KTtcblxuICAvLyAtLSBkZWNvZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGl0KCdkZWNvZGU6IHBsYWluIHRyYW5zcGFyZW50IGFkZHJlc3MgZGVjb2RlcyB0byBQMlBLSCBzY3JpcHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgY29kZWMgPSBuZXcgWmVjQWRkcmVzc0NvZGVjKCd0emVjJywgJ3R6ZWMnKTtcbiAgICBjb25zdCBzY3JpcHQgPSBCdWZmZXIuZnJvbShjb2RlYy5kZWNvZGUodGVzdG5ldFdhbGxldC50cmFuc3BhcmVudEFkZHJlc3MpKTtcbiAgICAvLyBQMlBLSDogT1BfRFVQIE9QX0hBU0gxNjAgPDIwLWJ5dGUgaGFzaD4gT1BfRVFVQUxWRVJJRlkgT1BfQ0hFQ0tTSUdcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2NyaXB0WzBdLCAweDc2KTsgLy8gT1BfRFVQXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNjcmlwdFsxXSwgMHhhOSk7IC8vIE9QX0hBU0gxNjBcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2NyaXB0WzJdLCAweDE0KTsgLy8gcHVzaCAyMCBieXRlc1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzY3JpcHQubGVuZ3RoLCAyNSk7IC8vIHRvdGFsIFAyUEtIIGxlbmd0aFxuICB9KTtcblxuICBpdCgnZGVjb2RlOiBVQSB3aXRoIHRyYW5zcGFyZW50IHJlY2VpdmVyIGRlY29kZXMgdG8gdGhlIHNhbWUgdHJhbnNwYXJlbnQgc2NyaXB0JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGNvZGVjID0gbmV3IFplY0FkZHJlc3NDb2RlYygndHplYycsICd0emVjJyk7XG4gICAgLy8gVGhlIHRlc3RuZXQgVUEgY2FycmllcyBhIHRyYW5zcGFyZW50IHJlY2VpdmVyOyBpdCBzaG91bGQgZGVjb2RlIHRvIHRoZVxuICAgIC8vIHNhbWUgc2NyaXB0UHViS2V5IGFzIHRoZSBzdGFuZGFsb25lIHRyYW5zcGFyZW50IGFkZHJlc3MuXG4gICAgY29uc3QgdWFTY3JpcHQgPSBCdWZmZXIuZnJvbShjb2RlYy5kZWNvZGUodGVzdG5ldFdhbGxldC51bmlmaWVkKSk7XG4gICAgY29uc3QgdEFkZHJTY3JpcHQgPSBCdWZmZXIuZnJvbShjb2RlYy5kZWNvZGUodGVzdG5ldFdhbGxldC50cmFuc3BhcmVudEFkZHJlc3MpKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHVhU2NyaXB0LCB0QWRkclNjcmlwdCk7XG4gIH0pO1xuXG4gIGl0KCdkZWNvZGU6IFVBIHdpdGggdHJhbnNwYXJlbnQgcmVjZWl2ZXIgZGVjb2RlcyBvbiBtYWlubmV0JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGNvZGVjID0gbmV3IFplY0FkZHJlc3NDb2RlYygnemVjJywgJ3plYycpO1xuICAgIGNvbnN0IHNjcmlwdCA9IEJ1ZmZlci5mcm9tKGNvZGVjLmRlY29kZSh6aXAzMTZNYWlubmV0LnVuaWZpZWQpKTtcbiAgICAvLyBQMlBLSCBzdHJ1Y3R1cmUgdGVzdFxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzY3JpcHRbMF0sIDB4NzYpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzY3JpcHRbMV0sIDB4YTkpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzY3JpcHRbMl0sIDB4MTQpO1xuICB9KTtcblxuICBpdCgnZGVjb2RlOiB0aHJvd3MgZm9yIGEgVUEgd2l0aG91dCBhIHRyYW5zcGFyZW50IHJlY2VpdmVyIChvcmNoYXJkLW9ubHkpJywgZnVuY3Rpb24gKCkge1xuICAgIC8vIENvbnN0cnVjdCBhbiBPcmNoYXJkLW9ubHkgVUEgYnkgZW5jb2RpbmcgYSBkdW1teSByZWNlaXZlclxuICAgIGNvbnN0IG9yY2hhcmRPbmx5ID0gZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hVbmlmaWVkQWRkcmVzcy5lbmNvZGVPcmNoYXJkUmVjZWl2ZXIoXG4gICAgICBuZXcgVWludDhBcnJheSg0MykuZmlsbCgweDQyKSxcbiAgICAgICd0emVjJ1xuICAgICk7XG4gICAgY29uc3QgY29kZWMgPSBuZXcgWmVjQWRkcmVzc0NvZGVjKCd0emVjJywgJ3R6ZWMnKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGNvZGVjLmRlY29kZShvcmNoYXJkT25seSkpO1xuICB9KTtcblxuICBpdCgnZGVjb2RlOiBleHBsaWNpdCB0cmFuc3BhcmVudC1ib3VuZCBjb2RlYyByZXR1cm5zIHRoZSB0cmFuc3BhcmVudCBzY3JpcHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgY29kZWMgPSBuZXcgWmVjQWRkcmVzc0NvZGVjKCd0emVjJywgJ3R6ZWMnLCAndHJhbnNwYXJlbnQnKTtcbiAgICBjb25zdCBzY3JpcHQgPSBCdWZmZXIuZnJvbShjb2RlYy5kZWNvZGUodGVzdG5ldFdhbGxldC51bmlmaWVkKSk7XG4gICAgY29uc3QgdEFkZHJTY3JpcHQgPSBCdWZmZXIuZnJvbShjb2RlYy5kZWNvZGUodGVzdG5ldFdhbGxldC50cmFuc3BhcmVudEFkZHJlc3MpKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHNjcmlwdCwgdEFkZHJTY3JpcHQpO1xuICB9KTtcblxuICBpdCgnZGVjb2RlOiBzaGllbGRlZC1ib3VuZCBjb2RlYyByZXR1cm5zIHRoZSByYXcgNDMtYnl0ZSBPcmNoYXJkIHJlY2VpdmVyJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGNvZGVjID0gbmV3IFplY0FkZHJlc3NDb2RlYygndHplYycsICd0emVjJywgJ3NoaWVsZGVkJyk7XG4gICAgY29uc3QgcmVjZWl2ZXIgPSBCdWZmZXIuZnJvbShjb2RlYy5kZWNvZGUodGVzdG5ldFdhbGxldC51bmlmaWVkKSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2VpdmVyLmxlbmd0aCwgNDMpO1xuICAgIGNvbnN0IHBhcnNlZCA9IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoVW5pZmllZEFkZHJlc3MucGFyc2UodGVzdG5ldFdhbGxldC51bmlmaWVkLCAndHplYycpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocmVjZWl2ZXIsIEJ1ZmZlci5mcm9tKHBhcnNlZC5vcmNoYXJkUmVjZWl2ZXIgYXMgVWludDhBcnJheSkpO1xuICB9KTtcblxuICBpdCgnZGVjb2RlOiBzaGllbGRlZC1ib3VuZCBjb2RlYyBvbiBtYWlubmV0IHJldHVybnMgdGhlIHJhdyA0My1ieXRlIE9yY2hhcmQgcmVjZWl2ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgY29kZWMgPSBuZXcgWmVjQWRkcmVzc0NvZGVjKCd6ZWMnLCAnemVjJywgJ3NoaWVsZGVkJyk7XG4gICAgY29uc3QgcmVjZWl2ZXIgPSBCdWZmZXIuZnJvbShjb2RlYy5kZWNvZGUoemlwMzE2TWFpbm5ldC51bmlmaWVkKSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2VpdmVyLmxlbmd0aCwgNDMpO1xuICAgIGNvbnN0IHBhcnNlZCA9IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoVW5pZmllZEFkZHJlc3MucGFyc2UoemlwMzE2TWFpbm5ldC51bmlmaWVkLCAnemVjJyk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyZWNlaXZlciwgQnVmZmVyLmZyb20ocGFyc2VkLm9yY2hhcmRSZWNlaXZlciBhcyBVaW50OEFycmF5KSk7XG4gIH0pO1xuXG4gIGl0KCdkZWNvZGU6IHNoaWVsZGVkLWJvdW5kIGNvZGVjIHJlc29sdmVzIGFuIE9yY2hhcmQtb25seSBVQSB0byBpdHMgcmVjZWl2ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgb3JjaGFyZE9ubHkgPSBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaFVuaWZpZWRBZGRyZXNzLmVuY29kZU9yY2hhcmRSZWNlaXZlcihcbiAgICAgIG5ldyBVaW50OEFycmF5KDQzKS5maWxsKDB4NDIpLFxuICAgICAgJ3R6ZWMnXG4gICAgKTtcbiAgICBjb25zdCBjb2RlYyA9IG5ldyBaZWNBZGRyZXNzQ29kZWMoJ3R6ZWMnLCAndHplYycsICdzaGllbGRlZCcpO1xuICAgIGNvbnN0IHJlY2VpdmVyID0gQnVmZmVyLmZyb20oY29kZWMuZGVjb2RlKG9yY2hhcmRPbmx5KSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2VpdmVyLmxlbmd0aCwgNDMpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocmVjZWl2ZXIsIEJ1ZmZlci5mcm9tKG5ldyBVaW50OEFycmF5KDQzKS5maWxsKDB4NDIpKSk7XG4gIH0pO1xuXG4gIGl0KCdkZWNvZGU6IHNoaWVsZGVkLWJvdW5kIGNvZGVjIHRocm93cyBpbnZhbGlkLWFkZHJlc3MgZXJyb3IgZm9yIGEgcGxhaW4gdHJhbnNwYXJlbnQgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjb2RlYyA9IG5ldyBaZWNBZGRyZXNzQ29kZWMoJ3R6ZWMnLCAndHplYycsICdzaGllbGRlZCcpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gY29kZWMuZGVjb2RlKHRlc3RuZXRXYWxsZXQudHJhbnNwYXJlbnRBZGRyZXNzKSwgL2lzIG5vdCBhIHZhbGlkIGFkZHJlc3MgZm9yIG5ldHdvcmsvKTtcbiAgfSk7XG5cbiAgaXQoJ2RlY29kZTogc2hpZWxkZWQtYm91bmQgY29kZWMgdGhyb3dzIGludmFsaWQtYWRkcmVzcyBlcnJvciBmb3IgYSB3cm9uZy1uZXR3b3JrIFVBJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGNvZGVjID0gbmV3IFplY0FkZHJlc3NDb2RlYygndHplYycsICd0emVjJywgJ3NoaWVsZGVkJyk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBjb2RlYy5kZWNvZGUoemlwMzE2TWFpbm5ldC51bmlmaWVkKSwgL2lzIG5vdCBhIHZhbGlkIGFkZHJlc3MgZm9yIG5ldHdvcmsvKTtcbiAgfSk7XG5cbiAgaXQoJ2RlY29kZTogc2hpZWxkZWQtYm91bmQgY29kZWMgdGhyb3dzIGludmFsaWQtYWRkcmVzcyBlcnJvciBmb3IgZ2FyYmFnZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjb2RlYyA9IG5ldyBaZWNBZGRyZXNzQ29kZWMoJ3R6ZWMnLCAndHplYycsICdzaGllbGRlZCcpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gY29kZWMuZGVjb2RlKCdub3QtYS1yZWFsLWFkZHJlc3MnKSwgL2lzIG5vdCBhIHZhbGlkIGFkZHJlc3MgZm9yIG5ldHdvcmsvKTtcbiAgfSk7XG5cbiAgaXQoJ2RlY29kZTogdGhyb3dzIGZvciBnYXJiYWdlJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGNvZGVjID0gbmV3IFplY0FkZHJlc3NDb2RlYygndHplYycsICd0emVjJyk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBjb2RlYy5kZWNvZGUoJ25vdC1hLXJlYWwtYWRkcmVzcycpKTtcbiAgfSk7XG5cbiAgaXQoJ2lzTWF0Y2hpbmdTY3JpcHQgdmFsaWRhdGVzIHRoZSByZWNlaXZlciByZXByZXNlbnRlZCBieSBwYXJzZWQgb3V0cHV0IG1ldGFkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGNvZGVjID0gbmV3IFplY0FkZHJlc3NDb2RlYygndHplYycsICd0emVjJyk7XG4gICAgY29uc3QgdHJhbnNwYXJlbnRTY3JpcHQgPSBjb2RlYy5kZWNvZGUodGVzdG5ldFdhbGxldC51bmlmaWVkKTtcbiAgICBjb25zdCBzaGllbGRlZFNjcmlwdCA9IHpjYXNoQWRkcmVzcy50b1NoaWVsZGVkUmVjZWl2ZXJXaXRoQ29pbih0ZXN0bmV0V2FsbGV0LnVuaWZpZWQsICd0emVjJyk7XG4gICAgY29uc3QgdHJhbnNwYXJlbnRPdXRwdXQ6IFplY0FkZHJlc3NDb2RlY091dHB1dCA9IHtcbiAgICAgIGFkZHJlc3M6IHRlc3RuZXRXYWxsZXQudW5pZmllZCxcbiAgICAgIHNjcmlwdDogdHJhbnNwYXJlbnRTY3JpcHQsXG4gICAgICBpc1NoaWVsZGVkOiBmYWxzZSxcbiAgICB9O1xuICAgIGNvbnN0IHNoaWVsZGVkT3V0cHV0OiBaZWNBZGRyZXNzQ29kZWNPdXRwdXQgPSB7XG4gICAgICBhZGRyZXNzOiB0ZXN0bmV0V2FsbGV0LnVuaWZpZWQsXG4gICAgICBzY3JpcHQ6IHNoaWVsZGVkU2NyaXB0LFxuICAgICAgaXNTaGllbGRlZDogdHJ1ZSxcbiAgICB9O1xuICAgIGNvbnN0IHRyYW5zcGFyZW50TWV0YWRhdGFGb3JTaGllbGRlZE91dHB1dDogWmVjQWRkcmVzc0NvZGVjT3V0cHV0ID0geyAuLi50cmFuc3BhcmVudE91dHB1dCwgaXNTaGllbGRlZDogdHJ1ZSB9O1xuICAgIGNvbnN0IHNoaWVsZGVkTWV0YWRhdGFGb3JUcmFuc3BhcmVudE91dHB1dDogWmVjQWRkcmVzc0NvZGVjT3V0cHV0ID0geyAuLi5zaGllbGRlZE91dHB1dCwgaXNTaGllbGRlZDogZmFsc2UgfTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY29kZWMuaXNNYXRjaGluZ1NjcmlwdCh0cmFuc3BhcmVudE1ldGFkYXRhRm9yU2hpZWxkZWRPdXRwdXQpLCBmYWxzZSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNvZGVjLmlzTWF0Y2hpbmdTY3JpcHQoc2hpZWxkZWRNZXRhZGF0YUZvclRyYW5zcGFyZW50T3V0cHV0KSwgZmFsc2UpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgIGNvZGVjLmlzTWF0Y2hpbmdTY3JpcHQoeyBhZGRyZXNzOiB0ZXN0bmV0V2FsbGV0LnVuaWZpZWQsIHNjcmlwdDogQnVmZmVyLmZyb20oJzAwJywgJ2hleCcpIH0pLFxuICAgICAgZmFsc2VcbiAgICApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgIGNvZGVjLnRvRXh0ZW5kZWRBZGRyZXNzRm9ybWF0KEJ1ZmZlci5mcm9tKHNoaWVsZGVkU2NyaXB0KSwgdGVzdG5ldFdhbGxldC51bmlmaWVkKSxcbiAgICAgIHRlc3RuZXRXYWxsZXQudW5pZmllZFxuICAgICk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBjb2RlYy50b0V4dGVuZGVkQWRkcmVzc0Zvcm1hdChCdWZmZXIuZnJvbSh0cmFuc3BhcmVudFNjcmlwdCksICdub3QtYS1yZWFsLWFkZHJlc3MnKSk7XG4gIH0pO1xuXG4gIC8vIC0tIGVuY29kZSAoaW5oZXJpdGVkKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgaXQoJ2VuY29kZTogcm91bmQtdHJpcHMgYSB0cmFuc3BhcmVudCBzY3JpcHQgdG8gYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjb2RlYyA9IG5ldyBaZWNBZGRyZXNzQ29kZWMoJ3R6ZWMnLCAndHplYycpO1xuICAgIGNvbnN0IHNjcmlwdCA9IGNvZGVjLmRlY29kZSh0ZXN0bmV0V2FsbGV0LnRyYW5zcGFyZW50QWRkcmVzcyk7XG4gICAgY29uc3QgYWRkcmVzcyA9IGNvZGVjLmVuY29kZShzY3JpcHQpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZGRyZXNzLCB0ZXN0bmV0V2FsbGV0LnRyYW5zcGFyZW50QWRkcmVzcyk7XG4gIH0pO1xuXG4gIGl0KCdlbmNvZGU6IHJvdW5kLXRyaXBzIG9uIG1haW5uZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgY29kZWMgPSBuZXcgWmVjQWRkcmVzc0NvZGVjKCd6ZWMnLCAnemVjJyk7XG4gICAgY29uc3QgYWRkcmVzcyA9ICd0MWNOMlpWV3pXY1ZScm5mZVF6bWtwTGh6UTRkWVJ2OHlSWSc7XG4gICAgY29uc3Qgc2NyaXB0ID0gY29kZWMuZGVjb2RlKGFkZHJlc3MpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChjb2RlYy5lbmNvZGUoc2NyaXB0KSwgYWRkcmVzcyk7XG4gIH0pO1xuXG4gIC8vIC0tIGludGVncmF0aW9uOiBjb2luLmFkZHJlc3NDb2RlYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgaXQoJ2NvaW4uYWRkcmVzc0NvZGVjOiB6ZWMgcmV0dXJucyBaZWNBZGRyZXNzQ29kZWMnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0Lm9rKHplYy5hZGRyZXNzQ29kZWMgaW5zdGFuY2VvZiBaZWNBZGRyZXNzQ29kZWMpO1xuICB9KTtcblxuICBpdCgnY29pbi5hZGRyZXNzQ29kZWM6IHR6ZWMgcmV0dXJucyBaZWNBZGRyZXNzQ29kZWMnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0Lm9rKHR6ZWMuYWRkcmVzc0NvZGVjIGluc3RhbmNlb2YgWmVjQWRkcmVzc0NvZGVjKTtcbiAgfSk7XG5cbiAgaXQoJ2NvaW4uYWRkcmVzc0NvZGVjLmlzVmFsaWRBZGRyZXNzIG1hdGNoZXMgWmVjLmlzVmFsaWRBZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgIHplYy5hZGRyZXNzQ29kZWMuaXNWYWxpZEFkZHJlc3MoemlwMzE2TWFpbm5ldC51bmlmaWVkKSxcbiAgICAgIHplYy5pc1ZhbGlkQWRkcmVzcyh6aXAzMTZNYWlubmV0LnVuaWZpZWQpXG4gICAgKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICB6ZWMuYWRkcmVzc0NvZGVjLmlzVmFsaWRBZGRyZXNzKCd0MWNOMlpWV3pXY1ZScm5mZVF6bWtwTGh6UTRkWVJ2OHlSWScpLFxuICAgICAgemVjLmlzVmFsaWRBZGRyZXNzKCd0MWNOMlpWV3pXY1ZScm5mZVF6bWtwTGh6UTRkWVJ2OHlSWScpXG4gICAgKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoemVjLmFkZHJlc3NDb2RlYy5pc1ZhbGlkQWRkcmVzcygnbm90LWEtcmVhbC1hZGRyZXNzJyksIHplYy5pc1ZhbGlkQWRkcmVzcygnbm90LWEtcmVhbC1hZGRyZXNzJykpO1xuICB9KTtcbn0pO1xuIl19
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const strict_1 = __importDefault(require("node:assert/strict"));
7
7
  const wasm_utxo_1 = require("@bitgo/wasm-utxo");
8
+ const zec_1 = require("../../../../../src/impl/zec");
8
9
  const recipients_1 = require("../../../../../src/impl/zec/recipients");
9
10
  const util_1 = require("../../../util");
10
11
  // ZIP-316 unified-address test vector, copied from
@@ -18,6 +19,7 @@ const IRONWOOD_HEIGHT = 4200000; // after the NU6.3 testnet activation (4134000)
18
19
  const IRONWOOD_RECEIVER = Buffer.from('d632c28aa0831d671be17709a42c9627e2eb687a1b2a55768ea470c9bae7499cd0bd3d0eb0484e307236b5', 'hex');
19
20
  describe('resolvePsbtRecipients', function () {
20
21
  const { walletKeys } = (0, util_1.getDefaultWasmWalletKeys)();
22
+ const addressCodec = new zec_1.ZecAddressCodec('tzec', 'tzec');
21
23
  function buildV4Psbt(unifiedAddress) {
22
24
  const psbt = wasm_utxo_1.fixedScriptWallet.ZcashBitGoPsbt.createEmpty('tzec', walletKeys, { blockHeight: 3146400 });
23
25
  psbt.addWalletInput({ txid: '22'.repeat(32), vout: 0, value: 200000n }, walletKeys, {
@@ -41,7 +43,7 @@ describe('resolvePsbtRecipients', function () {
41
43
  return psbt;
42
44
  }
43
45
  it('resolves external transparent outputs and excludes wallet change (v4)', function () {
44
- const recipients = (0, recipients_1.resolvePsbtRecipients)(buildV4Psbt(), walletKeys);
46
+ const recipients = (0, recipients_1.resolvePsbtRecipients)(buildV4Psbt(), walletKeys, addressCodec);
45
47
  strict_1.default.strictEqual(recipients.length, 1);
46
48
  const recipient = recipients[0];
47
49
  strict_1.default.strictEqual(recipient.destination.kind, 'transparent');
@@ -51,7 +53,7 @@ describe('resolvePsbtRecipients', function () {
51
53
  strict_1.default.deepStrictEqual(Buffer.from(recipient.script), Buffer.from(wasm_utxo_1.address.toOutputScriptWithCoin(testnetWallet.transparentAddress, 'tzec')));
52
54
  });
53
55
  it('reports the original UA verbatim for a transparent output built from a Unified Address (v4)', function () {
54
- const recipients = (0, recipients_1.resolvePsbtRecipients)(buildV4Psbt(testnetWallet.unified), walletKeys);
56
+ const recipients = (0, recipients_1.resolvePsbtRecipients)(buildV4Psbt(testnetWallet.unified), walletKeys, addressCodec);
55
57
  strict_1.default.strictEqual(recipients.length, 1);
56
58
  const recipient = recipients[0];
57
59
  strict_1.default.deepStrictEqual(recipient.destination, {
@@ -64,7 +66,7 @@ describe('resolvePsbtRecipients', function () {
64
66
  strict_1.default.strictEqual(recipient.address, testnetWallet.unified);
65
67
  });
66
68
  it('resolves a shielded v6 output to its (re-encoded) Orchard Unified Address recipient', function () {
67
- const recipients = (0, recipients_1.resolvePsbtRecipients)(buildV6Psbt(), walletKeys);
69
+ const recipients = (0, recipients_1.resolvePsbtRecipients)(buildV6Psbt(), walletKeys, addressCodec);
68
70
  strict_1.default.strictEqual(recipients.length, 1);
69
71
  const recipient = recipients[0];
70
72
  const expectedAddress = wasm_utxo_1.fixedScriptWallet.ZcashUnifiedAddress.encodeOrchardReceiver(new Uint8Array(IRONWOOD_RECEIVER), 'tzec');
@@ -78,7 +80,7 @@ describe('resolvePsbtRecipients', function () {
78
80
  });
79
81
  it('reports the original UA verbatim for a shielded output built from a Unified Address (v6)', function () {
80
82
  const orchardOnlyUa = wasm_utxo_1.fixedScriptWallet.ZcashUnifiedAddress.encodeOrchardReceiver(new Uint8Array(IRONWOOD_RECEIVER), 'tzec');
81
- const recipients = (0, recipients_1.resolvePsbtRecipients)(buildV6Psbt(orchardOnlyUa), walletKeys);
83
+ const recipients = (0, recipients_1.resolvePsbtRecipients)(buildV6Psbt(orchardOnlyUa), walletKeys, addressCodec);
82
84
  strict_1.default.strictEqual(recipients.length, 1);
83
85
  const recipient = recipients[0];
84
86
  strict_1.default.deepStrictEqual(recipient.destination, { kind: 'zcashShielded', unifiedAddress: orchardOnlyUa });
@@ -86,4 +88,4 @@ describe('resolvePsbtRecipients', function () {
86
88
  strict_1.default.strictEqual(recipient.address, orchardOnlyUa);
87
89
  });
88
90
  });
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZVBzYnRSZWNpcGllbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2ltcGwvemVjL3VuaXQvcmVzb2x2ZVBzYnRSZWNpcGllbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsZ0VBQXdDO0FBRXhDLGdEQUE2RTtBQUU3RSx1RUFBK0U7QUFDL0Usd0NBQXlEO0FBRXpELG1EQUFtRDtBQUNuRCwyRkFBMkY7QUFDM0Ysb0NBQW9DO0FBQ3BDLE1BQU0sYUFBYSxHQUFHO0lBQ3BCLE9BQU8sRUFDTCwyTkFBMk47SUFDN04sa0JBQWtCLEVBQUUscUNBQXFDO0NBQzFELENBQUM7QUFDRixNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsQ0FBQywrQ0FBK0M7QUFDaEYsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUNuQyx3RkFBd0YsRUFDeEYsS0FBSyxDQUNOLENBQUM7QUFFRixRQUFRLENBQUMsdUJBQXVCLEVBQUU7SUFDaEMsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUEsK0JBQXdCLEdBQUUsQ0FBQztJQUVsRCxTQUFTLFdBQVcsQ0FBQyxjQUF1QjtRQUMxQyxNQUFNLElBQUksR0FBRyw2QkFBaUIsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN4RyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFO1lBQ2xGLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtTQUNqQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZUFB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QUMsTUFBTSxDQUFDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUMzRSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywwRkFBMEYsRUFBRTtRQUM3RixNQUFNLGFBQWEsR0FBRyw2QkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FDL0UsSUFBSSxVQUFVLENBQUMsaUJBQWlCLENBQUMsRUFDakMsTUFBTSxDQUNQLENBQUM7UUFDRixNQUFNLFVBQVUsR0FBRyxJQUFBLGtDQUFxQixFQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNqRixnQkFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxnQkFBTSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUN4RyxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzVELGdCQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDdkQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnbm9kZTphc3NlcnQvc3RyaWN0JztcblxuaW1wb3J0IHsgYWRkcmVzcyBhcyB3YXNtQWRkcmVzcywgZml4ZWRTY3JpcHRXYWxsZXQgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHsgcmVzb2x2ZVBzYnRSZWNpcGllbnRzIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjL2ltcGwvemVjL3JlY2lwaWVudHMnO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdFdhc21XYWxsZXRLZXlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbCc7XG5cbi8vIFpJUC0zMTYgdW5pZmllZC1hZGRyZXNzIHRlc3QgdmVjdG9yLCBjb3BpZWQgZnJvbVxuLy8gQml0R29XQVNNL3BhY2thZ2VzL3dhc20tdXR4by90ZXN0L2ZpeHR1cmVzL3pjYXNoL3VuaWZpZWRfYWRkcmVzcy5qc29uIHNvIGJvdGggcmVwb3MgdGVzdFxuLy8gYWdhaW5zdCB0aGUgc2FtZSBrbm93bi1nb29kIGRhdGEuXG5jb25zdCB0ZXN0bmV0V2FsbGV0ID0ge1xuICB1bmlmaWVkOlxuICAgICd1dGVzdDF3NW0wcWNucDhlZ2w4cWEyOTZuNzBuOG52ajB0cW56azkwcDdmNDh2N21qaGhkcmRxczh2Z3F5ZHNsZzVwbG16ZWZhd2VmbnBtZ21sbTZoY3kzOG05NzJlcnd4czA0czAyY3EycHJoZ3V6OGtxbHk3NW02emp5NTZtMDhkNWpueWNndHBxdGplcHJ0ZTU3NmdrbXJ4eXN6ZXBneDc2eXp1d2hoN200bGZ6OWphcTd1bmprMHg1YW50NDZqdXh6NzNoc2M2cTR2M2RxdHp3dzAwdnBzJyxcbiAgdHJhbnNwYXJlbnRBZGRyZXNzOiAndG1NNER2TFZKS1hadDV5ZG4xdHFZVEh2YWhwS1N3Z2p1UmsnLFxufTtcbmNvbnN0IElST05XT09EX0hFSUdIVCA9IDQyMDAwMDA7IC8vIGFmdGVyIHRoZSBOVTYuMyB0ZXN0bmV0IGFjdGl2YXRpb24gKDQxMzQwMDApXG5jb25zdCBJUk9OV09PRF9SRUNFSVZFUiA9IEJ1ZmZlci5mcm9tKFxuICAnZDYzMmMyOGFhMDgzMWQ2NzFiZTE3NzA5YTQyYzk2MjdlMmViNjg3YTFiMmE1NTc2OGVhNDcwYzliYWU3NDk5Y2QwYmQzZDBlYjA0ODRlMzA3MjM2YjUnLFxuICAnaGV4J1xuKTtcblxuZGVzY3JpYmUoJ3Jlc29sdmVQc2J0UmVjaXBpZW50cycsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgeyB3YWxsZXRLZXlzIH0gPSBnZXREZWZhdWx0V2FzbVdhbGxldEtleXMoKTtcblxuICBmdW5jdGlvbiBidWlsZFY0UHNidCh1bmlmaWVkQWRkcmVzcz86IHN0cmluZyk6IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoQml0R29Qc2J0IHtcbiAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hCaXRHb1BzYnQuY3JlYXRlRW1wdHkoJ3R6ZWMnLCB3YWxsZXRLZXlzLCB7IGJsb2NrSGVpZ2h0OiAzMTQ2NDAwIH0pO1xuICAgIHBzYnQuYWRkV2FsbGV0SW5wdXQoeyB0eGlkOiAnMjInLnJlcGVhdCgzMiksIHZvdXQ6IDAsIHZhbHVlOiAyMDAwMDBuIH0sIHdhbGxldEtleXMsIHtcbiAgICAgIHNjcmlwdElkOiB7IGNoYWluOiAwLCBpbmRleDogMSB9LFxuICAgIH0pO1xuICAgIHBzYnQuYWRkV2FsbGV0T3V0cHV0KHdhbGxldEtleXMsIHsgY2hhaW46IDEsIGluZGV4OiAwLCB2YWx1ZTogMTAwMDAwbiB9KTtcbiAgICBjb25zdCBleHRlcm5hbFNjcmlwdCA9IHdhc21BZGRyZXNzLnRvT3V0cHV0U2NyaXB0V2l0aENvaW4odGVzdG5ldFdhbGxldC50cmFuc3BhcmVudEFkZHJlc3MsICd0emVjJyk7XG4gICAgcHNidC5hZGRUcmFuc3BhcmVudE91dHB1dChleHRlcm5hbFNjcmlwdCwgMTIzNDVuLCB1bmlmaWVkQWRkcmVzcyk7XG4gICAgcmV0dXJuIHBzYnQ7XG4gIH1cblxuICBmdW5jdGlvbiBidWlsZFY2UHNidCh1bmlmaWVkQWRkcmVzcz86IHN0cmluZyk6IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoSXJvbndvb2RCaXRHb1BzYnQge1xuICAgIGNvbnN0IHBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaElyb253b29kQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCd0emVjJywgd2FsbGV0S2V5cywge1xuICAgICAgYmxvY2tIZWlnaHQ6IElST05XT09EX0hFSUdIVCxcbiAgICB9KTtcbiAgICBwc2J0LmFkZFdhbGxldElucHV0KHsgdHhpZDogJzExJy5yZXBlYXQoMzIpLCB2b3V0OiAwLCB2YWx1ZTogMTAwMDAwbiB9LCB3YWxsZXRLZXlzLCB7XG4gICAgICBzY3JpcHRJZDogeyBjaGFpbjogMCwgaW5kZXg6IDAgfSxcbiAgICB9KTtcbiAgICBwc2J0LmFkZFdhbGxldE91dHB1dCh3YWxsZXRLZXlzLCB7IGNoYWluOiAxLCBpbmRleDogMCwgdmFsdWU6IDkwMDAwbiB9KTtcbiAgICBwc2J0LmFkZFNoaWVsZGVkT3V0cHV0cyhcbiAgICAgIFt7IHJlY2lwaWVudDogbmV3IFVpbnQ4QXJyYXkoSVJPTldPT0RfUkVDRUlWRVIpLCBhbW91bnQ6IDUwMDBuLCB1bmlmaWVkQWRkcmVzcyB9XSxcbiAgICAgIG5ldyBVaW50OEFycmF5KDMyKSAvLyBhbGwtemVybyBhbmNob3IsIGFzIGluIHRoZSB1dHhvLWNvcmUgc2hpZWxkZWQgYnVpbGQgdGVzdHNcbiAgICApO1xuICAgIHJldHVybiBwc2J0O1xuICB9XG5cbiAgaXQoJ3Jlc29sdmVzIGV4dGVybmFsIHRyYW5zcGFyZW50IG91dHB1dHMgYW5kIGV4Y2x1ZGVzIHdhbGxldCBjaGFuZ2UgKHY0KScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZWNpcGllbnRzID0gcmVzb2x2ZVBzYnRSZWNpcGllbnRzKGJ1aWxkVjRQc2J0KCksIHdhbGxldEtleXMpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnRzLmxlbmd0aCwgMSk7XG4gICAgY29uc3QgcmVjaXBpZW50ID0gcmVjaXBpZW50c1swXTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50LmRlc3RpbmF0aW9uLmtpbmQsICd0cmFuc3BhcmVudCcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnQuYWRkcmVzcywgdGVzdG5ldFdhbGxldC50cmFuc3BhcmVudEFkZHJlc3MpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnQuYW1vdW50LCAxMjM0NW4pO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnQudW5pZmllZEFkZHJlc3MsIHVuZGVmaW5lZCk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChcbiAgICAgIEJ1ZmZlci5mcm9tKHJlY2lwaWVudC5zY3JpcHQpLFxuICAgICAgQnVmZmVyLmZyb20od2FzbUFkZHJlc3MudG9PdXRwdXRTY3JpcHRXaXRoQ29pbih0ZXN0bmV0V2FsbGV0LnRyYW5zcGFyZW50QWRkcmVzcywgJ3R6ZWMnKSlcbiAgICApO1xuICB9KTtcblxuICBpdCgncmVwb3J0cyB0aGUgb3JpZ2luYWwgVUEgdmVyYmF0aW0gZm9yIGEgdHJhbnNwYXJlbnQgb3V0cHV0IGJ1aWx0IGZyb20gYSBVbmlmaWVkIEFkZHJlc3MgKHY0KScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZWNpcGllbnRzID0gcmVzb2x2ZVBzYnRSZWNpcGllbnRzKGJ1aWxkVjRQc2J0KHRlc3RuZXRXYWxsZXQudW5pZmllZCksIHdhbGxldEtleXMpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnRzLmxlbmd0aCwgMSk7XG4gICAgY29uc3QgcmVjaXBpZW50ID0gcmVjaXBpZW50c1swXTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHJlY2lwaWVudC5kZXN0aW5hdGlvbiwge1xuICAgICAga2luZDogJ3pjYXNoVW5pZmllZFRyYW5zcGFyZW50JyxcbiAgICAgIHVuaWZpZWRBZGRyZXNzOiB0ZXN0bmV0V2FsbGV0LnVuaWZpZWQsXG4gICAgfSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudC51bmlmaWVkQWRkcmVzcywgdGVzdG5ldFdhbGxldC51bmlmaWVkKTtcbiAgICAvLyBGb3IgYSB0cmFuc3BhcmVudCBvdXRwdXQgYnVpbHQgZnJvbSBhIFVuaWZpZWQgQWRkcmVzcywgdGhlIHBhcnNlZCBhZGRyZXNzIGlzIHRoZSBVQVxuICAgIC8vIGl0c2VsZiAodmVyYmF0aW0pLCBub3QganVzdCB0aGUgdHJhbnNwYXJlbnQgcmVjZWl2ZXIuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudC5hZGRyZXNzLCB0ZXN0bmV0V2FsbGV0LnVuaWZpZWQpO1xuICB9KTtcblxuICBpdCgncmVzb2x2ZXMgYSBzaGllbGRlZCB2NiBvdXRwdXQgdG8gaXRzIChyZS1lbmNvZGVkKSBPcmNoYXJkIFVuaWZpZWQgQWRkcmVzcyByZWNpcGllbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcmVjaXBpZW50cyA9IHJlc29sdmVQc2J0UmVjaXBpZW50cyhidWlsZFY2UHNidCgpLCB3YWxsZXRLZXlzKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50cy5sZW5ndGgsIDEpO1xuICAgIGNvbnN0IHJlY2lwaWVudCA9IHJlY2lwaWVudHNbMF07XG4gICAgY29uc3QgZXhwZWN0ZWRBZGRyZXNzID0gZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hVbmlmaWVkQWRkcmVzcy5lbmNvZGVPcmNoYXJkUmVjZWl2ZXIoXG4gICAgICBuZXcgVWludDhBcnJheShJUk9OV09PRF9SRUNFSVZFUiksXG4gICAgICAndHplYydcbiAgICApO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocmVjaXBpZW50LmRlc3RpbmF0aW9uLCB7XG4gICAgICBraW5kOiAnemNhc2hTaGllbGRlZCcsXG4gICAgICB1bmlmaWVkQWRkcmVzczogZXhwZWN0ZWRBZGRyZXNzLFxuICAgIH0pO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnQuYWRkcmVzcywgZXhwZWN0ZWRBZGRyZXNzKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50LmFtb3VudCwgNTAwMG4pO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoQnVmZmVyLmZyb20ocmVjaXBpZW50LnNjcmlwdCksIElST05XT09EX1JFQ0VJVkVSKTtcbiAgfSk7XG5cbiAgaXQoJ3JlcG9ydHMgdGhlIG9yaWdpbmFsIFVBIHZlcmJhdGltIGZvciBhIHNoaWVsZGVkIG91dHB1dCBidWlsdCBmcm9tIGEgVW5pZmllZCBBZGRyZXNzICh2NiknLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgb3JjaGFyZE9ubHlVYSA9IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoVW5pZmllZEFkZHJlc3MuZW5jb2RlT3JjaGFyZFJlY2VpdmVyKFxuICAgICAgbmV3IFVpbnQ4QXJyYXkoSVJPTldPT0RfUkVDRUlWRVIpLFxuICAgICAgJ3R6ZWMnXG4gICAgKTtcbiAgICBjb25zdCByZWNpcGllbnRzID0gcmVzb2x2ZVBzYnRSZWNpcGllbnRzKGJ1aWxkVjZQc2J0KG9yY2hhcmRPbmx5VWEpLCB3YWxsZXRLZXlzKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50cy5sZW5ndGgsIDEpO1xuICAgIGNvbnN0IHJlY2lwaWVudCA9IHJlY2lwaWVudHNbMF07XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyZWNpcGllbnQuZGVzdGluYXRpb24sIHsga2luZDogJ3pjYXNoU2hpZWxkZWQnLCB1bmlmaWVkQWRkcmVzczogb3JjaGFyZE9ubHlVYSB9KTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50LnVuaWZpZWRBZGRyZXNzLCBvcmNoYXJkT25seVVhKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50LmFkZHJlc3MsIG9yY2hhcmRPbmx5VWEpO1xuICB9KTtcbn0pO1xuIl19
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZVBzYnRSZWNpcGllbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2ltcGwvemVjL3VuaXQvcmVzb2x2ZVBzYnRSZWNpcGllbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsZ0VBQXdDO0FBRXhDLGdEQUE2RTtBQUU3RSxxREFBOEQ7QUFDOUQsdUVBQStFO0FBQy9FLHdDQUF5RDtBQUV6RCxtREFBbUQ7QUFDbkQsMkZBQTJGO0FBQzNGLG9DQUFvQztBQUNwQyxNQUFNLGFBQWEsR0FBRztJQUNwQixPQUFPLEVBQ0wsMk5BQTJOO0lBQzdOLGtCQUFrQixFQUFFLHFDQUFxQztDQUMxRCxDQUFDO0FBQ0YsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLENBQUMsK0NBQStDO0FBQ2hGLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FDbkMsd0ZBQXdGLEVBQ3hGLEtBQUssQ0FDTixDQUFDO0FBRUYsUUFBUSxDQUFDLHVCQUF1QixFQUFFO0lBQ2hDLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFBLCtCQUF3QixHQUFFLENBQUM7SUFDbEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxxQkFBZSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUV6RCxTQUFTLFdBQVcsQ0FBQyxjQUF1QjtRQUMxQyxNQUFNLElBQUksR0FBRyw2QkFBaUIsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN4RyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFO1lBQ2xGLFFBQVEsRUFBRSxFQUFF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LENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUMsZ0JBQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUMzRSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywwRkFBMEYsRUFBRTtRQUM3RixNQUFNLGFBQWEsR0FBRyw2QkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FDL0UsSUFBSSxVQUFVLENBQUMsaUJBQWlCLENBQUMsRUFDakMsTUFBTSxDQUNQLENBQUM7UUFDRixNQUFNLFVBQVUsR0FBRyxJQUFBLGtDQUFxQixFQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsRUFBRSxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDL0YsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6QyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsZ0JBQU0sQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDeEcsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUM1RCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ3ZELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0L3N0cmljdCc7XG5cbmltcG9ydCB7IGFkZHJlc3MgYXMgd2FzbUFkZHJlc3MsIGZpeGVkU2NyaXB0V2FsbGV0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5cbmltcG9ydCB7IFplY0FkZHJlc3NDb2RlYyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NyYy9pbXBsL3plYyc7XG5pbXBvcnQgeyByZXNvbHZlUHNidFJlY2lwaWVudHMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zcmMvaW1wbC96ZWMvcmVjaXBpZW50cyc7XG5pbXBvcnQgeyBnZXREZWZhdWx0V2FzbVdhbGxldEtleXMgfSBmcm9tICcuLi8uLi8uLi91dGlsJztcblxuLy8gWklQLTMxNiB1bmlmaWVkLWFkZHJlc3MgdGVzdCB2ZWN0b3IsIGNvcGllZCBmcm9tXG4vLyBCaXRHb1dBU00vcGFja2FnZXMvd2FzbS11dHhvL3Rlc3QvZml4dHVyZXMvemNhc2gvdW5pZmllZF9hZGRyZXNzLmpzb24gc28gYm90aCByZXBvcyB0ZXN0XG4vLyBhZ2FpbnN0IHRoZSBzYW1lIGtub3duLWdvb2QgZGF0YS5cbmNvbnN0IHRlc3RuZXRXYWxsZXQgPSB7XG4gIHVuaWZpZWQ6XG4gICAgJ3V0ZXN0MXc1bTBxY25wOGVnbDhxYTI5Nm43MG44bnZqMHRxbnprOTBwN2Y0OHY3bWpoaGRyZHFzOHZncXlkc2xnNXBsbXplZmF3ZWZucG1nbWxtNmhjeTM4bTk3MmVyd3hzMDRzMDJjcTJwcmhndXo4a3FseTc1bTZ6ank1Nm0wOGQ1am55Y2d0cHF0amVwcnRlNTc2Z2ttcnh5c3plcGd4NzZ5enV3aGg3bTRsZno5amFxN3VuamsweDVhbnQ0Nmp1eHo3M2hzYzZxNHYzZHF0end3MDB2cHMnLFxuICB0cmFuc3BhcmVudEFkZHJlc3M6ICd0bU00RHZMVkpLWFp0NXlkbjF0cVlUSHZhaHBLU3dnanVSaycsXG59O1xuY29uc3QgSVJPTldPT0RfSEVJR0hUID0gNDIwMDAwMDsgLy8gYWZ0ZXIgdGhlIE5VNi4zIHRlc3RuZXQgYWN0aXZhdGlvbiAoNDEzNDAwMClcbmNvbnN0IElST05XT09EX1JFQ0VJVkVSID0gQnVmZmVyLmZyb20oXG4gICdkNjMyYzI4YWEwODMxZDY3MWJlMTc3MDlhNDJjOTYyN2UyZWI2ODdhMWIyYTU1NzY4ZWE0NzBjOWJhZTc0OTljZDBiZDNkMGViMDQ4NGUzMDcyMzZiNScsXG4gICdoZXgnXG4pO1xuXG5kZXNjcmliZSgncmVzb2x2ZVBzYnRSZWNpcGllbnRzJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCB7IHdhbGxldEtleXMgfSA9IGdldERlZmF1bHRXYXNtV2FsbGV0S2V5cygpO1xuICBjb25zdCBhZGRyZXNzQ29kZWMgPSBuZXcgWmVjQWRkcmVzc0NvZGVjKCd0emVjJywgJ3R6ZWMnKTtcblxuICBmdW5jdGlvbiBidWlsZFY0UHNidCh1bmlmaWVkQWRkcmVzcz86IHN0cmluZyk6IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoQml0R29Qc2J0IHtcbiAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hCaXRHb1BzYnQuY3JlYXRlRW1wdHkoJ3R6ZWMnLCB3YWxsZXRLZXlzLCB7IGJsb2NrSGVpZ2h0OiAzMTQ2NDAwIH0pO1xuICAgIHBzYnQuYWRkV2FsbGV0SW5wdXQoeyB0eGlkOiAnMjInLnJlcGVhdCgzMiksIHZvdXQ6IDAsIHZhbHVlOiAyMDAwMDBuIH0sIHdhbGxldEtleXMsIHtcbiAgICAgIHNjcmlwdElkOiB7IGNoYWluOiAwLCBpbmRleDogMSB9LFxuICAgIH0pO1xuICAgIHBzYnQuYWRkV2FsbGV0T3V0cHV0KHdhbGxldEtleXMsIHsgY2hhaW46IDEsIGluZGV4OiAwLCB2YWx1ZTogMTAwMDAwbiB9KTtcbiAgICBjb25zdCBleHRlcm5hbFNjcmlwdCA9IHdhc21BZGRyZXNzLnRvT3V0cHV0U2NyaXB0V2l0aENvaW4odGVzdG5ldFdhbGxldC50cmFuc3BhcmVudEFkZHJlc3MsICd0emVjJyk7XG4gICAgcHNidC5hZGRUcmFuc3BhcmVudE91dHB1dChleHRlcm5hbFNjcmlwdCwgMTIzNDVuLCB1bmlmaWVkQWRkcmVzcyk7XG4gICAgcmV0dXJuIHBzYnQ7XG4gIH1cblxuICBmdW5jdGlvbiBidWlsZFY2UHNidCh1bmlmaWVkQWRkcmVzcz86IHN0cmluZyk6IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoSXJvbndvb2RCaXRHb1BzYnQge1xuICAgIGNvbnN0IHBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaElyb253b29kQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCd0emVjJywgd2FsbGV0S2V5cywge1xuICAgICAgYmxvY2tIZWlnaHQ6IElST05XT09EX0hFSUdIVCxcbiAgICB9KTtcbiAgICBwc2J0LmFkZFdhbGxldElucHV0KHsgdHhpZDogJzExJy5yZXBlYXQoMzIpLCB2b3V0OiAwLCB2YWx1ZTogMTAwMDAwbiB9LCB3YWxsZXRLZXlzLCB7XG4gICAgICBzY3JpcHRJZDogeyBjaGFpbjogMCwgaW5kZXg6IDAgfSxcbiAgICB9KTtcbiAgICBwc2J0LmFkZFdhbGxldE91dHB1dCh3YWxsZXRLZXlzLCB7IGNoYWluOiAxLCBpbmRleDogMCwgdmFsdWU6IDkwMDAwbiB9KTtcbiAgICBwc2J0LmFkZFNoaWVsZGVkT3V0cHV0cyhcbiAgICAgIFt7IHJlY2lwaWVudDogbmV3IFVpbnQ4QXJyYXkoSVJPTldPT0RfUkVDRUlWRVIpLCBhbW91bnQ6IDUwMDBuLCB1bmlmaWVkQWRkcmVzcyB9XSxcbiAgICAgIG5ldyBVaW50OEFycmF5KDMyKSAvLyBhbGwtemVybyBhbmNob3IsIGFzIGluIHRoZSB1dHhvLWNvcmUgc2hpZWxkZWQgYnVpbGQgdGVzdHNcbiAgICApO1xuICAgIHJldHVybiBwc2J0O1xuICB9XG5cbiAgaXQoJ3Jlc29sdmVzIGV4dGVybmFsIHRyYW5zcGFyZW50IG91dHB1dHMgYW5kIGV4Y2x1ZGVzIHdhbGxldCBjaGFuZ2UgKHY0KScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZWNpcGllbnRzID0gcmVzb2x2ZVBzYnRSZWNpcGllbnRzKGJ1aWxkVjRQc2J0KCksIHdhbGxldEtleXMsIGFkZHJlc3NDb2RlYyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudHMubGVuZ3RoLCAxKTtcbiAgICBjb25zdCByZWNpcGllbnQgPSByZWNpcGllbnRzWzBdO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnQuZGVzdGluYXRpb24ua2luZCwgJ3RyYW5zcGFyZW50Jyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudC5hZGRyZXNzLCB0ZXN0bmV0V2FsbGV0LnRyYW5zcGFyZW50QWRkcmVzcyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudC5hbW91bnQsIDEyMzQ1bik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudC51bmlmaWVkQWRkcmVzcywgdW5kZWZpbmVkKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKFxuICAgICAgQnVmZmVyLmZyb20ocmVjaXBpZW50LnNjcmlwdCksXG4gICAgICBCdWZmZXIuZnJvbSh3YXNtQWRkcmVzcy50b091dHB1dFNjcmlwdFdpdGhDb2luKHRlc3RuZXRXYWxsZXQudHJhbnNwYXJlbnRBZGRyZXNzLCAndHplYycpKVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdyZXBvcnRzIHRoZSBvcmlnaW5hbCBVQSB2ZXJiYXRpbSBmb3IgYSB0cmFuc3BhcmVudCBvdXRwdXQgYnVpbHQgZnJvbSBhIFVuaWZpZWQgQWRkcmVzcyAodjQpJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJlY2lwaWVudHMgPSByZXNvbHZlUHNidFJlY2lwaWVudHMoYnVpbGRWNFBzYnQodGVzdG5ldFdhbGxldC51bmlmaWVkKSwgd2FsbGV0S2V5cywgYWRkcmVzc0NvZGVjKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50cy5sZW5ndGgsIDEpO1xuICAgIGNvbnN0IHJlY2lwaWVudCA9IHJlY2lwaWVudHNbMF07XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyZWNpcGllbnQuZGVzdGluYXRpb24sIHtcbiAgICAgIGtpbmQ6ICd6Y2FzaFVuaWZpZWRUcmFuc3BhcmVudCcsXG4gICAgICB1bmlmaWVkQWRkcmVzczogdGVzdG5ldFdhbGxldC51bmlmaWVkLFxuICAgIH0pO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnQudW5pZmllZEFkZHJlc3MsIHRlc3RuZXRXYWxsZXQudW5pZmllZCk7XG4gICAgLy8gRm9yIGEgdHJhbnNwYXJlbnQgb3V0cHV0IGJ1aWx0IGZyb20gYSBVbmlmaWVkIEFkZHJlc3MsIHRoZSBwYXJzZWQgYWRkcmVzcyBpcyB0aGUgVUFcbiAgICAvLyBpdHNlbGYgKHZlcmJhdGltKSwgbm90IGp1c3QgdGhlIHRyYW5zcGFyZW50IHJlY2VpdmVyLlxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnQuYWRkcmVzcywgdGVzdG5ldFdhbGxldC51bmlmaWVkKTtcbiAgfSk7XG5cbiAgaXQoJ3Jlc29sdmVzIGEgc2hpZWxkZWQgdjYgb3V0cHV0IHRvIGl0cyAocmUtZW5jb2RlZCkgT3JjaGFyZCBVbmlmaWVkIEFkZHJlc3MgcmVjaXBpZW50JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJlY2lwaWVudHMgPSByZXNvbHZlUHNidFJlY2lwaWVudHMoYnVpbGRWNlBzYnQoKSwgd2FsbGV0S2V5cywgYWRkcmVzc0NvZGVjKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50cy5sZW5ndGgsIDEpO1xuICAgIGNvbnN0IHJlY2lwaWVudCA9IHJlY2lwaWVudHNbMF07XG4gICAgY29uc3QgZXhwZWN0ZWRBZGRyZXNzID0gZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hVbmlmaWVkQWRkcmVzcy5lbmNvZGVPcmNoYXJkUmVjZWl2ZXIoXG4gICAgICBuZXcgVWludDhBcnJheShJUk9OV09PRF9SRUNFSVZFUiksXG4gICAgICAndHplYydcbiAgICApO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocmVjaXBpZW50LmRlc3RpbmF0aW9uLCB7XG4gICAgICBraW5kOiAnemNhc2hTaGllbGRlZCcsXG4gICAgICB1bmlmaWVkQWRkcmVzczogZXhwZWN0ZWRBZGRyZXNzLFxuICAgIH0pO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnQuYWRkcmVzcywgZXhwZWN0ZWRBZGRyZXNzKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50LmFtb3VudCwgNTAwMG4pO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoQnVmZmVyLmZyb20ocmVjaXBpZW50LnNjcmlwdCksIElST05XT09EX1JFQ0VJVkVSKTtcbiAgfSk7XG5cbiAgaXQoJ3JlcG9ydHMgdGhlIG9yaWdpbmFsIFVBIHZlcmJhdGltIGZvciBhIHNoaWVsZGVkIG91dHB1dCBidWlsdCBmcm9tIGEgVW5pZmllZCBBZGRyZXNzICh2NiknLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgb3JjaGFyZE9ubHlVYSA9IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoVW5pZmllZEFkZHJlc3MuZW5jb2RlT3JjaGFyZFJlY2VpdmVyKFxuICAgICAgbmV3IFVpbnQ4QXJyYXkoSVJPTldPT0RfUkVDRUlWRVIpLFxuICAgICAgJ3R6ZWMnXG4gICAgKTtcbiAgICBjb25zdCByZWNpcGllbnRzID0gcmVzb2x2ZVBzYnRSZWNpcGllbnRzKGJ1aWxkVjZQc2J0KG9yY2hhcmRPbmx5VWEpLCB3YWxsZXRLZXlzLCBhZGRyZXNzQ29kZWMpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnRzLmxlbmd0aCwgMSk7XG4gICAgY29uc3QgcmVjaXBpZW50ID0gcmVjaXBpZW50c1swXTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHJlY2lwaWVudC5kZXN0aW5hdGlvbiwgeyBraW5kOiAnemNhc2hTaGllbGRlZCcsIHVuaWZpZWRBZGRyZXNzOiBvcmNoYXJkT25seVVhIH0pO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnQudW5pZmllZEFkZHJlc3MsIG9yY2hhcmRPbmx5VWEpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnQuYWRkcmVzcywgb3JjaGFyZE9ubHlVYSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=shieldedAddress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shieldedAddress.d.ts","sourceRoot":"","sources":["../../../../../../../test/unit/impl/zec/unit/shieldedAddress.ts"],"names":[],"mappings":""}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const strict_1 = __importDefault(require("node:assert/strict"));
7
+ const wasm_utxo_1 = require("@bitgo/wasm-utxo");
8
+ const zec_1 = require("../../../../../src/impl/zec");
9
+ // ZIP-316 unified-address test vector, copied from
10
+ // BitGoWASM/packages/wasm-utxo/test/fixtures/zcash/unified_address.json so
11
+ // both repos test against the same known-good data.
12
+ const testnetWallet = {
13
+ unified: 'utest1w5m0qcnp8egl8qa296n70n8nvj0tqnzk90p7f48v7mjhhdrdqs8vgqydslg5plmzefawefnpmgmlm6hcy38m972erwxs04s02cq2prhguz8kqly75m6zjy56m08d5jnycgtpqtjeprte576gkmrxyszepgx76yzuwhh7m4lfz9jaq7unjk0x5ant46juxz73hsc6q4v3dqtzww00vps',
14
+ transparentAddress: 'tmM4DvLVJKXZt5ydn1tqYTHvahpKSwgjuRk',
15
+ };
16
+ const toHex = (bytes) => Buffer.from(bytes).toString('hex');
17
+ /** Wallet-platform style `coinSpecific.shielded` derived from the UA itself. */
18
+ function shieldedCoinSpecificFor(address, network) {
19
+ const orchard = wasm_utxo_1.fixedScriptWallet.ZcashUnifiedAddress.parse(address, network).orchardReceiver;
20
+ return {
21
+ shielded: {
22
+ type: 'ironwood',
23
+ diversifier: toHex(orchard.slice(0, 11)),
24
+ pkD: toHex(orchard.slice(11)),
25
+ diversifierIndex: 0,
26
+ },
27
+ };
28
+ }
29
+ describe('assertShieldedWalletAddress', function () {
30
+ const coinSpecific = shieldedCoinSpecificFor(testnetWallet.unified, 'tzec');
31
+ it('accepts a unified address whose Orchard receiver matches the reported diversifier/pkD', function () {
32
+ (0, zec_1.assertShieldedWalletAddress)('tzec', { address: testnetWallet.unified, coinSpecific });
33
+ });
34
+ it('rejects a unified address whose Orchard receiver does not match the reported pkD', function () {
35
+ strict_1.default.throws(() => (0, zec_1.assertShieldedWalletAddress)('tzec', {
36
+ address: testnetWallet.unified,
37
+ coinSpecific: { shielded: { ...coinSpecific.shielded, pkD: '00'.repeat(32) } },
38
+ }), /Orchard receiver does not match/);
39
+ });
40
+ it('rejects when shielded coinSpecific is missing', function () {
41
+ strict_1.default.throws(() => (0, zec_1.assertShieldedWalletAddress)('tzec', { address: testnetWallet.unified }), /missing diversifier/);
42
+ });
43
+ it('rejects malformed diversifier/pkD lengths', function () {
44
+ strict_1.default.throws(() => (0, zec_1.assertShieldedWalletAddress)('tzec', {
45
+ address: testnetWallet.unified,
46
+ coinSpecific: { shielded: { ...coinSpecific.shielded, diversifier: '00' } },
47
+ }), /invalid diversifier length/);
48
+ strict_1.default.throws(() => (0, zec_1.assertShieldedWalletAddress)('tzec', {
49
+ address: testnetWallet.unified,
50
+ coinSpecific: { shielded: { ...coinSpecific.shielded, pkD: '00' } },
51
+ }), /invalid pkD length/);
52
+ });
53
+ it('rejects an address that is not a unified address', function () {
54
+ strict_1.default.throws(() => (0, zec_1.assertShieldedWalletAddress)('tzec', { address: testnetWallet.transparentAddress, coinSpecific }), /not a valid unified address/);
55
+ });
56
+ });
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hpZWxkZWRBZGRyZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2ltcGwvemVjL3VuaXQvc2hpZWxkZWRBZGRyZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsZ0VBQXdDO0FBRXhDLGdEQUFxRDtBQUVyRCxxREFBMEU7QUFFMUUsbURBQW1EO0FBQ25ELDJFQUEyRTtBQUMzRSxvREFBb0Q7QUFDcEQsTUFBTSxhQUFhLEdBQUc7SUFDcEIsT0FBTyxFQUNMLDJOQUEyTjtJQUM3TixrQkFBa0IsRUFBRSxxQ0FBcUM7Q0FDMUQsQ0FBQztBQUVGLE1BQU0sS0FBSyxHQUFHLENBQUMsS0FBaUIsRUFBVSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFaEYsZ0ZBQWdGO0FBQ2hGLFNBQVMsdUJBQXVCLENBQUMsT0FBZSxFQUFFLE9BQTJDO0lBQzNGLE1BQU0sT0FBTyxHQUFHLDZCQUFpQixDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsZUFBZ0IsQ0FBQztJQUMvRixPQUFPO1FBQ0wsUUFBUSxFQUFFO1lBQ1IsSUFBSSxFQUFFLFVBQVU7WUFDaEIsV0FBVyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN4QyxHQUFHLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0IsZ0JBQWdCLEVBQUUsQ0FBQztTQUNwQjtLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsUUFBUSxDQUFDLDZCQUE2QixFQUFFO0lBQ3RDLE1BQU0sWUFBWSxHQUFHLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFNUUsRUFBRSxDQUFDLHVGQUF1RixFQUFFO1FBQzFGLElBQUEsaUNBQTJCLEVBQUMsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUN4RixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxrRkFBa0YsRUFBRTtRQUNyRixnQkFBTSxDQUFDLE1BQU0sQ0FDWCxHQUFHLEVBQUUsQ0FDSCxJQUFBLGlDQUEyQixFQUFDLE1BQU0sRUFBRTtZQUNsQyxPQUFPLEVBQUUsYUFBYSxDQUFDLE9BQU87WUFDOUIsWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxZQUFZLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7U0FDL0UsQ0FBQyxFQUNKLGlDQUFpQyxDQUNsQyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsK0NBQStDLEVBQUU7UUFDbEQsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSxpQ0FBMkIsRUFBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUscUJBQXFCLENBQUMsQ0FBQztJQUN0SCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywyQ0FBMkMsRUFBRTtRQUM5QyxnQkFBTSxDQUFDLE1BQU0sQ0FDWCxHQUFHLEVBQUUsQ0FDSCxJQUFBLGlDQUEyQixFQUFDLE1BQU0sRUFBRTtZQUNsQyxPQUFPLEVBQUUsYUFBYSxDQUFDLE9BQU87WUFDOUIsWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxZQUFZLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFBRTtTQUM1RSxDQUFDLEVBQ0osNEJBQTRCLENBQzdCLENBQUM7UUFDRixnQkFBTSxDQUFDLE1BQU0sQ0FDWCxHQUFHLEVBQUUsQ0FDSCxJQUFBLGlDQUEyQixFQUFDLE1BQU0sRUFBRTtZQUNsQyxPQUFPLEVBQUUsYUFBYSxDQUFDLE9BQU87WUFDOUIsWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxZQUFZLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtTQUNwRSxDQUFDLEVBQ0osb0JBQW9CLENBQ3JCLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxrREFBa0QsRUFBRTtRQUNyRCxnQkFBTSxDQUFDLE1BQU0sQ0FDWCxHQUFHLEVBQUUsQ0FBQyxJQUFBLGlDQUEyQixFQUFDLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFDdEcsNkJBQTZCLENBQzlCLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdub2RlOmFzc2VydC9zdHJpY3QnO1xuXG5pbXBvcnQgeyBmaXhlZFNjcmlwdFdhbGxldCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQgeyBhc3NlcnRTaGllbGRlZFdhbGxldEFkZHJlc3MgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zcmMvaW1wbC96ZWMnO1xuXG4vLyBaSVAtMzE2IHVuaWZpZWQtYWRkcmVzcyB0ZXN0IHZlY3RvciwgY29waWVkIGZyb21cbi8vIEJpdEdvV0FTTS9wYWNrYWdlcy93YXNtLXV0eG8vdGVzdC9maXh0dXJlcy96Y2FzaC91bmlmaWVkX2FkZHJlc3MuanNvbiBzb1xuLy8gYm90aCByZXBvcyB0ZXN0IGFnYWluc3QgdGhlIHNhbWUga25vd24tZ29vZCBkYXRhLlxuY29uc3QgdGVzdG5ldFdhbGxldCA9IHtcbiAgdW5pZmllZDpcbiAgICAndXRlc3QxdzVtMHFjbnA4ZWdsOHFhMjk2bjcwbjhudmowdHFuems5MHA3ZjQ4djdtamhoZHJkcXM4dmdxeWRzbGc1cGxtemVmYXdlZm5wbWdtbG02aGN5MzhtOTcyZXJ3eHMwNHMwMmNxMnByaGd1ejhrcWx5NzVtNnpqeTU2bTA4ZDVqbnljZ3RwcXRqZXBydGU1NzZna21yeHlzemVwZ3g3Nnl6dXdoaDdtNGxmejlqYXE3dW5qazB4NWFudDQ2anV4ejczaHNjNnE0djNkcXR6d3cwMHZwcycsXG4gIHRyYW5zcGFyZW50QWRkcmVzczogJ3RtTTREdkxWSktYWnQ1eWRuMXRxWVRIdmFocEtTd2dqdVJrJyxcbn07XG5cbmNvbnN0IHRvSGV4ID0gKGJ5dGVzOiBVaW50OEFycmF5KTogc3RyaW5nID0+IEJ1ZmZlci5mcm9tKGJ5dGVzKS50b1N0cmluZygnaGV4Jyk7XG5cbi8qKiBXYWxsZXQtcGxhdGZvcm0gc3R5bGUgYGNvaW5TcGVjaWZpYy5zaGllbGRlZGAgZGVyaXZlZCBmcm9tIHRoZSBVQSBpdHNlbGYuICovXG5mdW5jdGlvbiBzaGllbGRlZENvaW5TcGVjaWZpY0ZvcihhZGRyZXNzOiBzdHJpbmcsIG5ldHdvcms6IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoTmV0d29ya05hbWUpIHtcbiAgY29uc3Qgb3JjaGFyZCA9IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoVW5pZmllZEFkZHJlc3MucGFyc2UoYWRkcmVzcywgbmV0d29yaykub3JjaGFyZFJlY2VpdmVyITtcbiAgcmV0dXJuIHtcbiAgICBzaGllbGRlZDoge1xuICAgICAgdHlwZTogJ2lyb253b29kJyxcbiAgICAgIGRpdmVyc2lmaWVyOiB0b0hleChvcmNoYXJkLnNsaWNlKDAsIDExKSksXG4gICAgICBwa0Q6IHRvSGV4KG9yY2hhcmQuc2xpY2UoMTEpKSxcbiAgICAgIGRpdmVyc2lmaWVySW5kZXg6IDAsXG4gICAgfSxcbiAgfTtcbn1cblxuZGVzY3JpYmUoJ2Fzc2VydFNoaWVsZGVkV2FsbGV0QWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgY29pblNwZWNpZmljID0gc2hpZWxkZWRDb2luU3BlY2lmaWNGb3IodGVzdG5ldFdhbGxldC51bmlmaWVkLCAndHplYycpO1xuXG4gIGl0KCdhY2NlcHRzIGEgdW5pZmllZCBhZGRyZXNzIHdob3NlIE9yY2hhcmQgcmVjZWl2ZXIgbWF0Y2hlcyB0aGUgcmVwb3J0ZWQgZGl2ZXJzaWZpZXIvcGtEJywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydFNoaWVsZGVkV2FsbGV0QWRkcmVzcygndHplYycsIHsgYWRkcmVzczogdGVzdG5ldFdhbGxldC51bmlmaWVkLCBjb2luU3BlY2lmaWMgfSk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIGEgdW5pZmllZCBhZGRyZXNzIHdob3NlIE9yY2hhcmQgcmVjZWl2ZXIgZG9lcyBub3QgbWF0Y2ggdGhlIHJlcG9ydGVkIHBrRCcsIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgKCkgPT5cbiAgICAgICAgYXNzZXJ0U2hpZWxkZWRXYWxsZXRBZGRyZXNzKCd0emVjJywge1xuICAgICAgICAgIGFkZHJlc3M6IHRlc3RuZXRXYWxsZXQudW5pZmllZCxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHsgc2hpZWxkZWQ6IHsgLi4uY29pblNwZWNpZmljLnNoaWVsZGVkLCBwa0Q6ICcwMCcucmVwZWF0KDMyKSB9IH0sXG4gICAgICAgIH0pLFxuICAgICAgL09yY2hhcmQgcmVjZWl2ZXIgZG9lcyBub3QgbWF0Y2gvXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgd2hlbiBzaGllbGRlZCBjb2luU3BlY2lmaWMgaXMgbWlzc2luZycsIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGFzc2VydFNoaWVsZGVkV2FsbGV0QWRkcmVzcygndHplYycsIHsgYWRkcmVzczogdGVzdG5ldFdhbGxldC51bmlmaWVkIH0pLCAvbWlzc2luZyBkaXZlcnNpZmllci8pO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyBtYWxmb3JtZWQgZGl2ZXJzaWZpZXIvcGtEIGxlbmd0aHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICgpID0+XG4gICAgICAgIGFzc2VydFNoaWVsZGVkV2FsbGV0QWRkcmVzcygndHplYycsIHtcbiAgICAgICAgICBhZGRyZXNzOiB0ZXN0bmV0V2FsbGV0LnVuaWZpZWQsXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7IHNoaWVsZGVkOiB7IC4uLmNvaW5TcGVjaWZpYy5zaGllbGRlZCwgZGl2ZXJzaWZpZXI6ICcwMCcgfSB9LFxuICAgICAgICB9KSxcbiAgICAgIC9pbnZhbGlkIGRpdmVyc2lmaWVyIGxlbmd0aC9cbiAgICApO1xuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PlxuICAgICAgICBhc3NlcnRTaGllbGRlZFdhbGxldEFkZHJlc3MoJ3R6ZWMnLCB7XG4gICAgICAgICAgYWRkcmVzczogdGVzdG5ldFdhbGxldC51bmlmaWVkLFxuICAgICAgICAgIGNvaW5TcGVjaWZpYzogeyBzaGllbGRlZDogeyAuLi5jb2luU3BlY2lmaWMuc2hpZWxkZWQsIHBrRDogJzAwJyB9IH0sXG4gICAgICAgIH0pLFxuICAgICAgL2ludmFsaWQgcGtEIGxlbmd0aC9cbiAgICApO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyBhbiBhZGRyZXNzIHRoYXQgaXMgbm90IGEgdW5pZmllZCBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PiBhc3NlcnRTaGllbGRlZFdhbGxldEFkZHJlc3MoJ3R6ZWMnLCB7IGFkZHJlc3M6IHRlc3RuZXRXYWxsZXQudHJhbnNwYXJlbnRBZGRyZXNzLCBjb2luU3BlY2lmaWMgfSksXG4gICAgICAvbm90IGEgdmFsaWQgdW5pZmllZCBhZGRyZXNzL1xuICAgICk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -41,8 +41,11 @@ const utxolib = __importStar(require("@bitgo/utxo-lib"));
41
41
  const utxo_lib_1 = require("@bitgo/utxo-lib");
42
42
  const wasm_utxo_1 = require("@bitgo/wasm-utxo");
43
43
  const fixedScript_1 = require("../../../../src/transaction/fixedScript");
44
+ const recipient_1 = require("../../../../src/transaction/recipient");
45
+ const util_1 = require("../../util");
44
46
  function describeTransactionWith(acidTest) {
45
47
  describe(`${acidTest.name}`, function () {
48
+ const addressCodec = new recipient_1.AddressCodec((0, util_1.getCoinNameForNetwork)(acidTest.network));
46
49
  let walletXpubs;
47
50
  let customChangeWalletXpubs;
48
51
  let wasmPsbt;
@@ -57,6 +60,7 @@ function describeTransactionWith(acidTest) {
57
60
  });
58
61
  it('should return expected outputs from explainPsbtWasm', function () {
59
62
  const wasmExplanation = (0, fixedScript_1.explainPsbtWasm)(wasmPsbt, walletXpubs, {
63
+ addressCodec,
60
64
  replayProtection: {
61
65
  publicKeys: [acidTest.getReplayProtectionPublicKey()],
62
66
  },
@@ -82,6 +86,7 @@ function describeTransactionWith(acidTest) {
82
86
  }
83
87
  it('explainPsbtWasmBigInt returns bigint amounts and inputs array', function () {
84
88
  const result = (0, fixedScript_1.explainPsbtWasmBigInt)(wasmPsbt, walletXpubs, {
89
+ addressCodec,
85
90
  replayProtection: { publicKeys: [acidTest.getReplayProtectionPublicKey()] },
86
91
  });
87
92
  strict_1.default.strictEqual(typeof result.fee, 'bigint');
@@ -100,6 +105,7 @@ function describeTransactionWith(acidTest) {
100
105
  // extended test suite for bitcoin
101
106
  it('returns custom change outputs when parameter is set', function () {
102
107
  const wasmExplanation = (0, fixedScript_1.explainPsbtWasm)(wasmPsbt, walletXpubs, {
108
+ addressCodec,
103
109
  replayProtection: {
104
110
  publicKeys: [acidTest.getReplayProtectionPublicKey()],
105
111
  },
@@ -125,6 +131,7 @@ describe('explainPsbt(Wasm)', function () {
125
131
  const wasmPsbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(psbt.toBuffer(), 'bitcoin');
126
132
  const walletXpubs = wasm_utxo_1.fixedScriptWallet.RootWalletKeys.from(rootWalletKeys);
127
133
  strict_1.default.throws(() => (0, fixedScript_1.explainPsbtWasmBigInt)(wasmPsbt, walletXpubs, {
134
+ addressCodec: new recipient_1.AddressCodec('btc'),
128
135
  replayProtection: { publicKeys: [] },
129
136
  }), /Fee calculation error: outputs exceed inputs/);
130
137
  });
@@ -142,6 +149,7 @@ describe('aggregateTransactionExplanations', function () {
142
149
  const wasmPsbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(psbtBytes, networkName);
143
150
  const walletXpubs = wasm_utxo_1.fixedScriptWallet.RootWalletKeys.from(acidTest.rootWalletKeys);
144
151
  exp = (0, fixedScript_1.explainPsbtWasmBigInt)(wasmPsbt, walletXpubs, {
152
+ addressCodec: new recipient_1.AddressCodec('btc'),
145
153
  replayProtection: { publicKeys: [acidTest.getReplayProtectionPublicKey()] },
146
154
  });
147
155
  });
@@ -168,4 +176,4 @@ describe('aggregateTransactionExplanations', function () {
168
176
  });
169
177
  });
170
178
  });
171
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpblBzYnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvZXhwbGFpblBzYnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnRUFBd0M7QUFFeEMseURBQTJDO0FBQzNDLDhDQUEyQztBQUMzQyxnREFBcUQ7QUFFckQseUVBS2lEO0FBRWpELFNBQVMsdUJBQXVCLENBQUMsUUFBMkI7SUFDMUQsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFO1FBQzNCLElBQUksV0FBNkMsQ0FBQztRQUNsRCxJQUFJLHVCQUFxRSxDQUFDO1FBQzFFLElBQUksUUFBcUMsQ0FBQztRQUMxQyxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNuQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0QsSUFBQSxnQkFBTSxFQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3BCLFdBQVcsR0FBRyw2QkFBaUIsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM3RSx1QkFBdUIsR0FBRyw2QkFBaUIsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUMxRixRQUFRLEdBQUcsNkJBQWlCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDM0UsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscURBQXFELEVBQUU7WUFDeEQsTUFB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QUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDeEUsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUMxRCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQzVELGdCQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDNUQsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdub2RlOmFzc2VydC9zdHJpY3QnO1xuXG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyB0ZXN0dXRpbCB9IGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBmaXhlZFNjcmlwdFdhbGxldCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQge1xuICBleHBsYWluUHNidFdhc20sXG4gIGV4cGxhaW5Qc2J0V2FzbUJpZ0ludCxcbiAgYWdncmVnYXRlVHJhbnNhY3Rpb25FeHBsYW5hdGlvbnMsXG4gIHR5cGUgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbkJpZ0ludCxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0JztcblxuZnVuY3Rpb24gZGVzY3JpYmVUcmFuc2FjdGlvbldpdGgoYWNpZFRlc3Q6IHRlc3R1dGlsLkFjaWRUZXN0KSB7XG4gIGRlc2NyaWJlKGAke2FjaWRUZXN0Lm5hbWV9YCwgZnVuY3Rpb24gKCkge1xuICAgIGxldCB3YWxsZXRYcHViczogZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXM7XG4gICAgbGV0IGN1c3RvbUNoYW5nZVdhbGxldFhwdWJzOiBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgd2FzbVBzYnQ6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidDtcbiAgICBiZWZvcmUoJ3ByZXBhcmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwc2J0ID0gYWNpZFRlc3QuY3JlYXRlUHNidCgpO1xuICAgICAgY29uc3QgcHNidEJ5dGVzID0gcHNidC50b0J1ZmZlcigpO1xuICAgICAgY29uc3QgbmV0d29ya05hbWUgPSB1dHhvbGliLmdldE5ldHdvcmtOYW1lKGFjaWRUZXN0Lm5ldHdvcmspO1xuICAgICAgYXNzZXJ0KG5ldHdvcmtOYW1lKTtcbiAgICAgIHdhbGxldFhwdWJzID0gZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMuZnJvbShhY2lkVGVzdC5yb290V2FsbGV0S2V5cyk7XG4gICAgICBjdXN0b21DaGFuZ2VXYWxsZXRYcHVicyA9IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLmZyb20oYWNpZFRlc3Qub3RoZXJXYWxsZXRLZXlzKTtcbiAgICAgIHdhc21Qc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmZyb21CeXRlcyhwc2J0Qnl0ZXMsIG5ldHdvcmtOYW1lKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGV4cGVjdGVkIG91dHB1dHMgZnJvbSBleHBsYWluUHNidFdhc20nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YXNtRXhwbGFuYXRpb24gPSBleHBsYWluUHNidFdhc20od2FzbVBzYnQsIHdhbGxldFhwdWJzLCB7XG4gICAgICAgIHJlcGxheVByb3RlY3Rpb246IHtcbiAgICAgICAgICBwdWJsaWNLZXlzOiBbYWNpZFRlc3QuZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmxpY0tleSgpXSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHdhc21FeHBsYW5hdGlvbi5vdXRwdXRzLmxlbmd0aCwgMyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwod2FzbUV4cGxhbmF0aW9uLmNoYW5nZU91dHB1dHMubGVuZ3RoLCBhY2lkVGVzdC5vdXRwdXRzLmxlbmd0aCAtIDMpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHdhc21FeHBsYW5hdGlvbi5vdXRwdXRBbW91bnQsICcxODAwJyk7XG4gICAgICB3YXNtRXhwbGFuYXRpb24uY2hhbmdlT3V0cHV0cy5mb3JFYWNoKChjaGFuZ2UpID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNoYW5nZS5hbW91bnQsICc5MDAnKTtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBjaGFuZ2UuYWRkcmVzcywgJ3N0cmluZycpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIHZlcmlmeSBuZXcgZmllbGRzIGFyZSBwcmVzZW50IGFuZCBzdHJpbmdpZmllZFxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiB3YXNtRXhwbGFuYXRpb24uaW5wdXRBbW91bnQsICdzdHJpbmcnKTtcbiAgICAgIGFzc2VydC5vayhBcnJheS5pc0FycmF5KHdhc21FeHBsYW5hdGlvbi5pbnB1dHMpKTtcbiAgICAgIGFzc2VydC5vayh3YXNtRXhwbGFuYXRpb24uaW5wdXRzLmxlbmd0aCA+IDApO1xuICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiB3YXNtRXhwbGFuYXRpb24uaW5wdXRzKSB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgaW5wdXQuYWRkcmVzcywgJ3N0cmluZycpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGlucHV0LnZhbHVlLCAnc3RyaW5nJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoYWNpZFRlc3QubmV0d29yayAhPT0gdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaXQoJ2V4cGxhaW5Qc2J0V2FzbUJpZ0ludCByZXR1cm5zIGJpZ2ludCBhbW91bnRzIGFuZCBpbnB1dHMgYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBleHBsYWluUHNidFdhc21CaWdJbnQod2FzbVBzYnQsIHdhbGxldFhwdWJzLCB7XG4gICAgICAgIHJlcGxheVByb3RlY3Rpb246IHsgcHVibGljS2V5czogW2FjaWRUZXN0LmdldFJlcGxheVByb3RlY3Rpb25QdWJsaWNLZXkoKV0gfSxcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiByZXN1bHQuZmVlLCAnYmlnaW50Jyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIHJlc3VsdC5vdXRwdXRBbW91bnQsICdiaWdpbnQnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgcmVzdWx0LmNoYW5nZUFtb3VudCwgJ2JpZ2ludCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiByZXN1bHQuaW5wdXRBbW91bnQsICdiaWdpbnQnKTtcbiAgICAgIGFzc2VydC5vayhyZXN1bHQuaW5wdXRzLmxlbmd0aCA+IDApO1xuICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiByZXN1bHQuaW5wdXRzKSB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgaW5wdXQuYWRkcmVzcywgJ3N0cmluZycpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGlucHV0LnZhbHVlLCAnYmlnaW50Jyk7XG4gICAgICB9XG4gICAgICBjb25zdCBzdW1JbnB1dHMgPSByZXN1bHQuaW5wdXRzLnJlZHVjZSgocywgaSkgPT4gcyArIGkudmFsdWUsIDBuKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuaW5wdXRBbW91bnQsIHN1bUlucHV0cyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICAgIHJlc3VsdC5mZWUsXG4gICAgICAgIHJlc3VsdC5pbnB1dEFtb3VudCAtIHJlc3VsdC5vdXRwdXRBbW91bnQgLSByZXN1bHQuY2hhbmdlQW1vdW50IC0gcmVzdWx0LmN1c3RvbUNoYW5nZUFtb3VudFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIC8vIGV4dGVuZGVkIHRlc3Qgc3VpdGUgZm9yIGJpdGNvaW5cblxuICAgIGl0KCdyZXR1cm5zIGN1c3RvbSBjaGFuZ2Ugb3V0cHV0cyB3aGVuIHBhcmFtZXRlciBpcyBzZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YXNtRXhwbGFuYXRpb24gPSBleHBsYWluUHNidFdhc20od2FzbVBzYnQsIHdhbGxldFhwdWJzLCB7XG4gICAgICAgIHJlcGxheVByb3RlY3Rpb246IHtcbiAgICAgICAgICBwdWJsaWNLZXlzOiBbYWNpZFRlc3QuZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmxpY0tleSgpXSxcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tQ2hhbmdlV2FsbGV0WHB1YnMsXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5vayh3YXNtRXhwbGFuYXRpb24uY3VzdG9tQ2hhbmdlT3V0cHV0cyk7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHdhc21FeHBsYW5hdGlvbi5vdXRwdXRzLmxlbmd0aCwgMik7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHdhc21FeHBsYW5hdGlvbi5jdXN0b21DaGFuZ2VPdXRwdXRzLmxlbmd0aCwgMSk7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHdhc21FeHBsYW5hdGlvbi5jdXN0b21DaGFuZ2VPdXRwdXRzWzBdLmFtb3VudCwgJzkwMCcpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZGVzY3JpYmUoJ2V4cGxhaW5Qc2J0KFdhc20pJywgZnVuY3Rpb24gKCkge1xuICB0ZXN0dXRpbC5BY2lkVGVzdC5zdWl0ZSgpLmZvckVhY2goKHRlc3QpID0+IGRlc2NyaWJlVHJhbnNhY3Rpb25XaXRoKHRlc3QpKTtcblxuICBpdCgnZXhwbGFpblBzYnRXYXNtQmlnSW50IHRocm93cyB3aGVuIHRvdGFsIG91dHB1dCB2YWx1ZSBleGNlZWRzIHRvdGFsIGlucHV0IHZhbHVlJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG5ldHdvcmsgPSB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW47XG4gICAgY29uc3Qgcm9vdFdhbGxldEtleXMgPSB0ZXN0dXRpbC5nZXREZWZhdWx0V2FsbGV0S2V5cygpO1xuICAgIC8vIFZhbGlkIFBTQlQ6IG9uZSBwMndzaCBpbnB1dCAoNTAwMCBzYXQpLCBvbmUgaW50ZXJuYWwgcDJ3c2ggb3V0cHV0ICgzMDAwIHNhdCksIGZlZSA9IDIwMDBcbiAgICBjb25zdCBwc2J0ID0gdGVzdHV0aWwuY29uc3RydWN0UHNidChcbiAgICAgIFt7IHNjcmlwdFR5cGU6ICdwMndzaCcsIHZhbHVlOiA1MDAwbiB9XSxcbiAgICAgIFt7IHNjcmlwdFR5cGU6ICdwMndzaCcsIHZhbHVlOiAzMDAwbiwgaXNJbnRlcm5hbEFkZHJlc3M6IHRydWUgfV0sXG4gICAgICBuZXR3b3JrLFxuICAgICAgcm9vdFdhbGxldEtleXMsXG4gICAgICAndW5zaWduZWQnXG4gICAgKTtcbiAgICAvLyBUYW1wZXI6IHJlZHVjZSB0aGUgd2l0bmVzc1V0eG8udmFsdWUgc28gdGhhdCBpbnB1dHMgKDEwMDApIDwgb3V0cHV0cyAoMzAwMCkuXG4gICAgLy8gRGlyZWN0IG11dGF0aW9uIGF2b2lkcyBiaXAxNzQncyBcImR1cGxpY2F0ZSBkYXRhXCIgZ3VhcmQgb24gdXBkYXRlSW5wdXQuXG4gICAgcHNidC5kYXRhLmlucHV0c1swXS53aXRuZXNzVXR4byEudmFsdWUgPSAxMDAwbjtcblxuICAgIGNvbnN0IHdhc21Qc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmZyb21CeXRlcyhwc2J0LnRvQnVmZmVyKCksICdiaXRjb2luJyk7XG4gICAgY29uc3Qgd2FsbGV0WHB1YnMgPSBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cy5mcm9tKHJvb3RXYWxsZXRLZXlzKTtcblxuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PlxuICAgICAgICBleHBsYWluUHNidFdhc21CaWdJbnQod2FzbVBzYnQsIHdhbGxldFhwdWJzLCB7XG4gICAgICAgICAgcmVwbGF5UHJvdGVjdGlvbjogeyBwdWJsaWNLZXlzOiBbXSB9LFxuICAgICAgICB9KSxcbiAgICAgIC9GZWUgY2FsY3VsYXRpb24gZXJyb3I6IG91dHB1dHMgZXhjZWVkIGlucHV0cy9cbiAgICApO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnYWdncmVnYXRlVHJhbnNhY3Rpb25FeHBsYW5hdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gIHRlc3R1dGlsLkFjaWRUZXN0LnN1aXRlKClcbiAgICAuZmlsdGVyKCh0KSA9PiB0Lm5ldHdvcmsgPT09IHV0eG9saWIubmV0d29ya3MuYml0Y29pbilcbiAgICAuZm9yRWFjaCgoYWNpZFRlc3QpID0+IHtcbiAgICAgIGRlc2NyaWJlKGFjaWRUZXN0Lm5hbWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGV4cDogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbkJpZ0ludDtcblxuICAgICAgICBiZWZvcmUoJ3ByZXBhcmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgcHNidEJ5dGVzID0gYWNpZFRlc3QuY3JlYXRlUHNidCgpLnRvQnVmZmVyKCk7XG4gICAgICAgICAgY29uc3QgbmV0d29ya05hbWUgPSB1dHhvbGliLmdldE5ldHdvcmtOYW1lKGFjaWRUZXN0Lm5ldHdvcmspO1xuICAgICAgICAgIGFzc2VydChuZXR3b3JrTmFtZSk7XG4gICAgICAgICAgY29uc3Qgd2FzbVBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuZnJvbUJ5dGVzKHBzYnRCeXRlcywgbmV0d29ya05hbWUpO1xuICAgICAgICAgIGNvbnN0IHdhbGxldFhwdWJzID0gZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMuZnJvbShhY2lkVGVzdC5yb290V2FsbGV0S2V5cyk7XG4gICAgICAgICAgZXhwID0gZXhwbGFpblBzYnRXYXNtQmlnSW50KHdhc21Qc2J0LCB3YWxsZXRYcHVicywge1xuICAgICAgICAgICAgcmVwbGF5UHJvdGVjdGlvbjogeyBwdWJsaWNLZXlzOiBbYWNpZFRlc3QuZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmxpY0tleSgpXSB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnYWdncmVnYXRpbmcgYSBzaW5nbGUgZXhwbGFuYXRpb24gaXMgaWRlbnRpdHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYWdnID0gYWdncmVnYXRlVHJhbnNhY3Rpb25FeHBsYW5hdGlvbnMoW2V4cF0pO1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZ2cuaW5wdXRDb3VudCwgZXhwLmlucHV0cy5sZW5ndGgpO1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZ2cub3V0cHV0Q291bnQsIGV4cC5vdXRwdXRzLmxlbmd0aCk7XG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFnZy5jaGFuZ2VPdXRwdXRDb3VudCwgZXhwLmNoYW5nZU91dHB1dHMubGVuZ3RoKTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWdnLmlucHV0QW1vdW50LCBleHAuaW5wdXRBbW91bnQpO1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZ2cub3V0cHV0QW1vdW50LCBleHAub3V0cHV0QW1vdW50KTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWdnLmNoYW5nZUFtb3VudCwgZXhwLmNoYW5nZUFtb3VudCk7XG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFnZy5mZWUsIGV4cC5mZWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnYWdncmVnYXRpbmcgdHdvIGlkZW50aWNhbCBleHBsYW5hdGlvbnMgZG91YmxlcyBhbGwgY291bnRzIGFuZCBhbW91bnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGFnZyA9IGFnZ3JlZ2F0ZVRyYW5zYWN0aW9uRXhwbGFuYXRpb25zKFtleHAsIGV4cF0pO1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZ2cuaW5wdXRDb3VudCwgZXhwLmlucHV0cy5sZW5ndGggKiAyKTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWdnLm91dHB1dENvdW50LCBleHAub3V0cHV0cy5sZW5ndGggKiAyKTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWdnLmNoYW5nZU91dHB1dENvdW50LCBleHAuY2hhbmdlT3V0cHV0cy5sZW5ndGggKiAyKTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWdnLmlucHV0QW1vdW50LCBleHAuaW5wdXRBbW91bnQgKiAybik7XG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFnZy5vdXRwdXRBbW91bnQsIGV4cC5vdXRwdXRBbW91bnQgKiAybik7XG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFnZy5jaGFuZ2VBbW91bnQsIGV4cC5jaGFuZ2VBbW91bnQgKiAybik7XG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFnZy5mZWUsIGV4cC5mZWUgKiAybik7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG59KTtcbiJdfQ==
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpblBzYnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvZXhwbGFpblBzYnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnRUFBd0M7QUFFeEMseURBQTJDO0FBQzNDLDhDQUEyQztBQUMzQyxnREFBcUQ7QUFFckQseUVBS2lEO0FBQ2pELHFFQUFxRTtBQUNyRSxxQ0FBbUQ7QUFDbkQsU0FBUyx1QkFBdUIsQ0FBQyxRQUEyQjtJQUMxRCxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDM0IsTUFBTSxZQUFZLEdBQUcsSUFBSSx3QkFBWSxDQUFDLElBQUEsNEJBQXFCLEVBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDL0UsSUFBSSxXQUE2QyxDQUFDO1FBQ2xELElBQUksdUJBQXFFLENBQUM7UUFDMUUsSUFBSSxRQUFxQyxDQUFDO1FBQzFDLE1BQU0sQ0FBQyxTQUFTLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ25DLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3RCxJQUFBLGdCQUFNLEVBQUMsV0FBVyxDQUFDLENBQUM7WUFDcEIsV0FBVyxHQUFHLDZCQUFpQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzdFLHVCQUF1QixHQUFHLDZCQUFpQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzFGLFFBQVEsR0FBRyw2QkFB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QUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pELGdCQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzFELGdCQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzVELGdCQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDeEUsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUMxRCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQzVELGdCQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDNUQsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdub2RlOmFzc2VydC9zdHJpY3QnO1xuXG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyB0ZXN0dXRpbCB9IGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBmaXhlZFNjcmlwdFdhbGxldCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQge1xuICBleHBsYWluUHNidFdhc20sXG4gIGV4cGxhaW5Qc2J0V2FzbUJpZ0ludCxcbiAgYWdncmVnYXRlVHJhbnNhY3Rpb25FeHBsYW5hdGlvbnMsXG4gIHR5cGUgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbkJpZ0ludCxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0JztcbmltcG9ydCB7IEFkZHJlc3NDb2RlYyB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9yZWNpcGllbnQnO1xuaW1wb3J0IHsgZ2V0Q29pbk5hbWVGb3JOZXR3b3JrIH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5mdW5jdGlvbiBkZXNjcmliZVRyYW5zYWN0aW9uV2l0aChhY2lkVGVzdDogdGVzdHV0aWwuQWNpZFRlc3QpIHtcbiAgZGVzY3JpYmUoYCR7YWNpZFRlc3QubmFtZX1gLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYWRkcmVzc0NvZGVjID0gbmV3IEFkZHJlc3NDb2RlYyhnZXRDb2luTmFtZUZvck5ldHdvcmsoYWNpZFRlc3QubmV0d29yaykpO1xuICAgIGxldCB3YWxsZXRYcHViczogZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXM7XG4gICAgbGV0IGN1c3RvbUNoYW5nZVdhbGxldFhwdWJzOiBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgd2FzbVBzYnQ6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidDtcbiAgICBiZWZvcmUoJ3ByZXBhcmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwc2J0ID0gYWNpZFRlc3QuY3JlYXRlUHNidCgpO1xuICAgICAgY29uc3QgcHNidEJ5dGVzID0gcHNidC50b0J1ZmZlcigpO1xuICAgICAgY29uc3QgbmV0d29ya05hbWUgPSB1dHhvbGliLmdldE5ldHdvcmtOYW1lKGFjaWRUZXN0Lm5ldHdvcmspO1xuICAgICAgYXNzZXJ0KG5ldHdvcmtOYW1lKTtcbiAgICAgIHdhbGxldFhwdWJzID0gZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMuZnJvbShhY2lkVGVzdC5yb290V2FsbGV0S2V5cyk7XG4gICAgICBjdXN0b21DaGFuZ2VXYWxsZXRYcHVicyA9IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLmZyb20oYWNpZFRlc3Qub3RoZXJXYWxsZXRLZXlzKTtcbiAgICAgIHdhc21Qc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmZyb21CeXRlcyhwc2J0Qnl0ZXMsIG5ldHdvcmtOYW1lKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGV4cGVjdGVkIG91dHB1dHMgZnJvbSBleHBsYWluUHNidFdhc20nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YXNtRXhwbGFuYXRpb24gPSBleHBsYWluUHNidFdhc20od2FzbVBzYnQsIHdhbGxldFhwdWJzLCB7XG4gICAgICAgIGFkZHJlc3NDb2RlYyxcbiAgICAgICAgcmVwbGF5UHJvdGVjdGlvbjoge1xuICAgICAgICAgIHB1YmxpY0tleXM6IFthY2lkVGVzdC5nZXRSZXBsYXlQcm90ZWN0aW9uUHVibGljS2V5KCldLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwod2FzbUV4cGxhbmF0aW9uLm91dHB1dHMubGVuZ3RoLCAzKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh3YXNtRXhwbGFuYXRpb24uY2hhbmdlT3V0cHV0cy5sZW5ndGgsIGFjaWRUZXN0Lm91dHB1dHMubGVuZ3RoIC0gMyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwod2FzbUV4cGxhbmF0aW9uLm91dHB1dEFtb3VudCwgJzE4MDAnKTtcbiAgICAgIHdhc21FeHBsYW5hdGlvbi5jaGFuZ2VPdXRwdXRzLmZvckVhY2goKGNoYW5nZSkgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY2hhbmdlLmFtb3VudCwgJzkwMCcpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGNoYW5nZS5hZGRyZXNzLCAnc3RyaW5nJyk7XG4gICAgICB9KTtcblxuICAgICAgLy8gdmVyaWZ5IG5ldyBmaWVsZHMgYXJlIHByZXNlbnQgYW5kIHN0cmluZ2lmaWVkXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIHdhc21FeHBsYW5hdGlvbi5pbnB1dEFtb3VudCwgJ3N0cmluZycpO1xuICAgICAgYXNzZXJ0Lm9rKEFycmF5LmlzQXJyYXkod2FzbUV4cGxhbmF0aW9uLmlucHV0cykpO1xuICAgICAgYXNzZXJ0Lm9rKHdhc21FeHBsYW5hdGlvbi5pbnB1dHMubGVuZ3RoID4gMCk7XG4gICAgICBmb3IgKGNvbnN0IGlucHV0IG9mIHdhc21FeHBsYW5hdGlvbi5pbnB1dHMpIHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBpbnB1dC5hZGRyZXNzLCAnc3RyaW5nJyk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgaW5wdXQudmFsdWUsICdzdHJpbmcnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChhY2lkVGVzdC5uZXR3b3JrICE9PSB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpdCgnZXhwbGFpblBzYnRXYXNtQmlnSW50IHJldHVybnMgYmlnaW50IGFtb3VudHMgYW5kIGlucHV0cyBhcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGV4cGxhaW5Qc2J0V2FzbUJpZ0ludCh3YXNtUHNidCwgd2FsbGV0WHB1YnMsIHtcbiAgICAgICAgYWRkcmVzc0NvZGVjLFxuICAgICAgICByZXBsYXlQcm90ZWN0aW9uOiB7IHB1YmxpY0tleXM6IFthY2lkVGVzdC5nZXRSZXBsYXlQcm90ZWN0aW9uUHVibGljS2V5KCldIH0sXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgcmVzdWx0LmZlZSwgJ2JpZ2ludCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiByZXN1bHQub3V0cHV0QW1vdW50LCAnYmlnaW50Jyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIHJlc3VsdC5jaGFuZ2VBbW91bnQsICdiaWdpbnQnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgcmVzdWx0LmlucHV0QW1vdW50LCAnYmlnaW50Jyk7XG4gICAgICBhc3NlcnQub2socmVzdWx0LmlucHV0cy5sZW5ndGggPiAwKTtcbiAgICAgIGZvciAoY29uc3QgaW5wdXQgb2YgcmVzdWx0LmlucHV0cykge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGlucHV0LmFkZHJlc3MsICdzdHJpbmcnKTtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBpbnB1dC52YWx1ZSwgJ2JpZ2ludCcpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3VtSW5wdXRzID0gcmVzdWx0LmlucHV0cy5yZWR1Y2UoKHMsIGkpID0+IHMgKyBpLnZhbHVlLCAwbik7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LmlucHV0QW1vdW50LCBzdW1JbnB1dHMpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgICByZXN1bHQuZmVlLFxuICAgICAgICByZXN1bHQuaW5wdXRBbW91bnQgLSByZXN1bHQub3V0cHV0QW1vdW50IC0gcmVzdWx0LmNoYW5nZUFtb3VudCAtIHJlc3VsdC5jdXN0b21DaGFuZ2VBbW91bnRcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvLyBleHRlbmRlZCB0ZXN0IHN1aXRlIGZvciBiaXRjb2luXG5cbiAgICBpdCgncmV0dXJucyBjdXN0b20gY2hhbmdlIG91dHB1dHMgd2hlbiBwYXJhbWV0ZXIgaXMgc2V0JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FzbUV4cGxhbmF0aW9uID0gZXhwbGFpblBzYnRXYXNtKHdhc21Qc2J0LCB3YWxsZXRYcHVicywge1xuICAgICAgICBhZGRyZXNzQ29kZWMsXG4gICAgICAgIHJlcGxheVByb3RlY3Rpb246IHtcbiAgICAgICAgICBwdWJsaWNLZXlzOiBbYWNpZFRlc3QuZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmxpY0tleSgpXSxcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tQ2hhbmdlV2FsbGV0WHB1YnMsXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5vayh3YXNtRXhwbGFuYXRpb24uY3VzdG9tQ2hhbmdlT3V0cHV0cyk7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHdhc21FeHBsYW5hdGlvbi5vdXRwdXRzLmxlbmd0aCwgMik7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHdhc21FeHBsYW5hdGlvbi5jdXN0b21DaGFuZ2VPdXRwdXRzLmxlbmd0aCwgMSk7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHdhc21FeHBsYW5hdGlvbi5jdXN0b21DaGFuZ2VPdXRwdXRzWzBdLmFtb3VudCwgJzkwMCcpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZGVzY3JpYmUoJ2V4cGxhaW5Qc2J0KFdhc20pJywgZnVuY3Rpb24gKCkge1xuICB0ZXN0dXRpbC5BY2lkVGVzdC5zdWl0ZSgpLmZvckVhY2goKHRlc3QpID0+IGRlc2NyaWJlVHJhbnNhY3Rpb25XaXRoKHRlc3QpKTtcblxuICBpdCgnZXhwbGFpblBzYnRXYXNtQmlnSW50IHRocm93cyB3aGVuIHRvdGFsIG91dHB1dCB2YWx1ZSBleGNlZWRzIHRvdGFsIGlucHV0IHZhbHVlJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG5ldHdvcmsgPSB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW47XG4gICAgY29uc3Qgcm9vdFdhbGxldEtleXMgPSB0ZXN0dXRpbC5nZXREZWZhdWx0V2FsbGV0S2V5cygpO1xuICAgIC8vIFZhbGlkIFBTQlQ6IG9uZSBwMndzaCBpbnB1dCAoNTAwMCBzYXQpLCBvbmUgaW50ZXJuYWwgcDJ3c2ggb3V0cHV0ICgzMDAwIHNhdCksIGZlZSA9IDIwMDBcbiAgICBjb25zdCBwc2J0ID0gdGVzdHV0aWwuY29uc3RydWN0UHNidChcbiAgICAgIFt7IHNjcmlwdFR5cGU6ICdwMndzaCcsIHZhbHVlOiA1MDAwbiB9XSxcbiAgICAgIFt7IHNjcmlwdFR5cGU6ICdwMndzaCcsIHZhbHVlOiAzMDAwbiwgaXNJbnRlcm5hbEFkZHJlc3M6IHRydWUgfV0sXG4gICAgICBuZXR3b3JrLFxuICAgICAgcm9vdFdhbGxldEtleXMsXG4gICAgICAndW5zaWduZWQnXG4gICAgKTtcbiAgICAvLyBUYW1wZXI6IHJlZHVjZSB0aGUgd2l0bmVzc1V0eG8udmFsdWUgc28gdGhhdCBpbnB1dHMgKDEwMDApIDwgb3V0cHV0cyAoMzAwMCkuXG4gICAgLy8gRGlyZWN0IG11dGF0aW9uIGF2b2lkcyBiaXAxNzQncyBcImR1cGxpY2F0ZSBkYXRhXCIgZ3VhcmQgb24gdXBkYXRlSW5wdXQuXG4gICAgcHNidC5kYXRhLmlucHV0c1swXS53aXRuZXNzVXR4byEudmFsdWUgPSAxMDAwbjtcblxuICAgIGNvbnN0IHdhc21Qc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmZyb21CeXRlcyhwc2J0LnRvQnVmZmVyKCksICdiaXRjb2luJyk7XG4gICAgY29uc3Qgd2FsbGV0WHB1YnMgPSBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cy5mcm9tKHJvb3RXYWxsZXRLZXlzKTtcblxuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PlxuICAgICAgICBleHBsYWluUHNidFdhc21CaWdJbnQod2FzbVBzYnQsIHdhbGxldFhwdWJzLCB7XG4gICAgICAgICAgYWRkcmVzc0NvZGVjOiBuZXcgQWRkcmVzc0NvZGVjKCdidGMnKSxcbiAgICAgICAgICByZXBsYXlQcm90ZWN0aW9uOiB7IHB1YmxpY0tleXM6IFtdIH0sXG4gICAgICAgIH0pLFxuICAgICAgL0ZlZSBjYWxjdWxhdGlvbiBlcnJvcjogb3V0cHV0cyBleGNlZWQgaW5wdXRzL1xuICAgICk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdhZ2dyZWdhdGVUcmFuc2FjdGlvbkV4cGxhbmF0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgdGVzdHV0aWwuQWNpZFRlc3Quc3VpdGUoKVxuICAgIC5maWx0ZXIoKHQpID0+IHQubmV0d29yayA9PT0gdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luKVxuICAgIC5mb3JFYWNoKChhY2lkVGVzdCkgPT4ge1xuICAgICAgZGVzY3JpYmUoYWNpZFRlc3QubmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgZXhwOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uQmlnSW50O1xuXG4gICAgICAgIGJlZm9yZSgncHJlcGFyZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBwc2J0Qnl0ZXMgPSBhY2lkVGVzdC5jcmVhdGVQc2J0KCkudG9CdWZmZXIoKTtcbiAgICAgICAgICBjb25zdCBuZXR3b3JrTmFtZSA9IHV0eG9saWIuZ2V0TmV0d29ya05hbWUoYWNpZFRlc3QubmV0d29yayk7XG4gICAgICAgICAgYXNzZXJ0KG5ldHdvcmtOYW1lKTtcbiAgICAgICAgICBjb25zdCB3YXNtUHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5mcm9tQnl0ZXMocHNidEJ5dGVzLCBuZXR3b3JrTmFtZSk7XG4gICAgICAgICAgY29uc3Qgd2FsbGV0WHB1YnMgPSBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cy5mcm9tKGFjaWRUZXN0LnJvb3RXYWxsZXRLZXlzKTtcbiAgICAgICAgICBleHAgPSBleHBsYWluUHNidFdhc21CaWdJbnQod2FzbVBzYnQsIHdhbGxldFhwdWJzLCB7XG4gICAgICAgICAgICBhZGRyZXNzQ29kZWM6IG5ldyBBZGRyZXNzQ29kZWMoJ2J0YycpLFxuICAgICAgICAgICAgcmVwbGF5UHJvdGVjdGlvbjogeyBwdWJsaWNLZXlzOiBbYWNpZFRlc3QuZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmxpY0tleSgpXSB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnYWdncmVnYXRpbmcgYSBzaW5nbGUgZXhwbGFuYXRpb24gaXMgaWRlbnRpdHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYWdnID0gYWdncmVnYXRlVHJhbnNhY3Rpb25FeHBsYW5hdGlvbnMoW2V4cF0pO1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZ2cuaW5wdXRDb3VudCwgZXhwLmlucHV0cy5sZW5ndGgpO1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZ2cub3V0cHV0Q291bnQsIGV4cC5vdXRwdXRzLmxlbmd0aCk7XG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFnZy5jaGFuZ2VPdXRwdXRDb3VudCwgZXhwLmNoYW5nZU91dHB1dHMubGVuZ3RoKTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWdnLmlucHV0QW1vdW50LCBleHAuaW5wdXRBbW91bnQpO1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZ2cub3V0cHV0QW1vdW50LCBleHAub3V0cHV0QW1vdW50KTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWdnLmNoYW5nZUFtb3VudCwgZXhwLmNoYW5nZUFtb3VudCk7XG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFnZy5mZWUsIGV4cC5mZWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnYWdncmVnYXRpbmcgdHdvIGlkZW50aWNhbCBleHBsYW5hdGlvbnMgZG91YmxlcyBhbGwgY291bnRzIGFuZCBhbW91bnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGFnZyA9IGFnZ3JlZ2F0ZVRyYW5zYWN0aW9uRXhwbGFuYXRpb25zKFtleHAsIGV4cF0pO1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZ2cuaW5wdXRDb3VudCwgZXhwLmlucHV0cy5sZW5ndGggKiAyKTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWdnLm91dHB1dENvdW50LCBleHAub3V0cHV0cy5sZW5ndGggKiAyKTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWdnLmNoYW5nZU91dHB1dENvdW50LCBleHAuY2hhbmdlT3V0cHV0cy5sZW5ndGggKiAyKTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWdnLmlucHV0QW1vdW50LCBleHAuaW5wdXRBbW91bnQgKiAybik7XG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFnZy5vdXRwdXRBbW91bnQsIGV4cC5vdXRwdXRBbW91bnQgKiAybik7XG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFnZy5jaGFuZ2VBbW91bnQsIGV4cC5jaGFuZ2VBbW91bnQgKiAybik7XG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFnZy5mZWUsIGV4cC5mZWUgKiAybik7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG59KTtcbiJdfQ==