@bitgo-beta/utxo-lib 8.0.3-beta.49 → 8.0.3-beta.490

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 (110) hide show
  1. package/README.md +19 -16
  2. package/dist/src/address.js +5 -5
  3. package/dist/src/addressFormat.d.ts +1 -1
  4. package/dist/src/addressFormat.d.ts.map +1 -1
  5. package/dist/src/addressFormat.js +9 -9
  6. package/dist/src/bitgo/Musig2.js +19 -19
  7. package/dist/src/bitgo/PsbtUtil.d.ts +5 -0
  8. package/dist/src/bitgo/PsbtUtil.d.ts.map +1 -1
  9. package/dist/src/bitgo/PsbtUtil.js +18 -3
  10. package/dist/src/bitgo/Unspent.d.ts +2 -2
  11. package/dist/src/bitgo/Unspent.d.ts.map +1 -1
  12. package/dist/src/bitgo/Unspent.js +3 -3
  13. package/dist/src/bitgo/UtxoPsbt.d.ts +16 -4
  14. package/dist/src/bitgo/UtxoPsbt.d.ts.map +1 -1
  15. package/dist/src/bitgo/UtxoPsbt.js +118 -76
  16. package/dist/src/bitgo/UtxoTransaction.d.ts.map +1 -1
  17. package/dist/src/bitgo/UtxoTransaction.js +9 -9
  18. package/dist/src/bitgo/bitcoincash/address.js +6 -6
  19. package/dist/src/bitgo/bitcoincash/index.js +6 -2
  20. package/dist/src/bitgo/dash/DashTransaction.js +3 -3
  21. package/dist/src/bitgo/dash/index.js +6 -2
  22. package/dist/src/bitgo/index.d.ts +3 -1
  23. package/dist/src/bitgo/index.d.ts.map +1 -1
  24. package/dist/src/bitgo/index.js +9 -3
  25. package/dist/src/bitgo/keyutil.d.ts +9 -0
  26. package/dist/src/bitgo/keyutil.d.ts.map +1 -1
  27. package/dist/src/bitgo/keyutil.js +24 -2
  28. package/dist/src/bitgo/legacysafe/index.d.ts +15 -0
  29. package/dist/src/bitgo/legacysafe/index.d.ts.map +1 -0
  30. package/dist/src/bitgo/legacysafe/index.js +61 -0
  31. package/dist/src/bitgo/litecoin/LitecoinTransaction.d.ts +1 -1
  32. package/dist/src/bitgo/litecoin/LitecoinTransaction.d.ts.map +1 -1
  33. package/dist/src/bitgo/litecoin/LitecoinTransaction.js +2 -2
  34. package/dist/src/bitgo/litecoin/index.js +6 -2
  35. package/dist/src/bitgo/outputScripts.d.ts +7 -6
  36. package/dist/src/bitgo/outputScripts.d.ts.map +1 -1
  37. package/dist/src/bitgo/outputScripts.js +29 -14
  38. package/dist/src/bitgo/parseInput.d.ts +11 -7
  39. package/dist/src/bitgo/parseInput.d.ts.map +1 -1
  40. package/dist/src/bitgo/parseInput.js +23 -7
  41. package/dist/src/bitgo/psbt/fromHalfSigned.js +5 -5
  42. package/dist/src/bitgo/signature.d.ts +2 -2
  43. package/dist/src/bitgo/signature.d.ts.map +1 -1
  44. package/dist/src/bitgo/signature.js +17 -8
  45. package/dist/src/bitgo/transaction.js +10 -10
  46. package/dist/src/bitgo/transactionAmounts.d.ts +9 -0
  47. package/dist/src/bitgo/transactionAmounts.d.ts.map +1 -0
  48. package/dist/src/bitgo/transactionAmounts.js +33 -0
  49. package/dist/src/bitgo/types.d.ts +9 -2
  50. package/dist/src/bitgo/types.d.ts.map +1 -1
  51. package/dist/src/bitgo/types.js +11 -2
  52. package/dist/src/bitgo/wallet/Psbt.d.ts +48 -18
  53. package/dist/src/bitgo/wallet/Psbt.d.ts.map +1 -1
  54. package/dist/src/bitgo/wallet/Psbt.js +129 -29
  55. package/dist/src/bitgo/wallet/Unspent.d.ts +23 -15
  56. package/dist/src/bitgo/wallet/Unspent.d.ts.map +1 -1
  57. package/dist/src/bitgo/wallet/Unspent.js +59 -54
  58. package/dist/src/bitgo/wallet/WalletKeys.d.ts +1 -1
  59. package/dist/src/bitgo/wallet/WalletKeys.d.ts.map +1 -1
  60. package/dist/src/bitgo/wallet/WalletOutput.d.ts +17 -1
  61. package/dist/src/bitgo/wallet/WalletOutput.d.ts.map +1 -1
  62. package/dist/src/bitgo/wallet/WalletOutput.js +68 -27
  63. package/dist/src/bitgo/wallet/WalletScripts.js +2 -2
  64. package/dist/src/bitgo/wallet/WalletUnspentSigner.js +7 -7
  65. package/dist/src/bitgo/wallet/chains.d.ts +2 -2
  66. package/dist/src/bitgo/wallet/chains.d.ts.map +1 -1
  67. package/dist/src/bitgo/wallet/index.d.ts +2 -0
  68. package/dist/src/bitgo/wallet/index.d.ts.map +1 -1
  69. package/dist/src/bitgo/wallet/index.js +8 -2
  70. package/dist/src/bitgo/wallet/psbt/PsbtOutputs.d.ts +50 -0
  71. package/dist/src/bitgo/wallet/psbt/PsbtOutputs.d.ts.map +1 -0
  72. package/dist/src/bitgo/wallet/psbt/PsbtOutputs.js +87 -0
  73. package/dist/src/bitgo/wallet/psbt/RootNodes.d.ts +32 -0
  74. package/dist/src/bitgo/wallet/psbt/RootNodes.d.ts.map +1 -0
  75. package/dist/src/bitgo/wallet/psbt/RootNodes.js +125 -0
  76. package/dist/src/bitgo/zcash/ZcashPsbt.d.ts +0 -1
  77. package/dist/src/bitgo/zcash/ZcashPsbt.d.ts.map +1 -1
  78. package/dist/src/bitgo/zcash/ZcashPsbt.js +5 -14
  79. package/dist/src/bitgo/zcash/ZcashTransaction.d.ts +1 -1
  80. package/dist/src/bitgo/zcash/ZcashTransaction.d.ts.map +1 -1
  81. package/dist/src/bitgo/zcash/ZcashTransaction.js +15 -15
  82. package/dist/src/bitgo/zcash/ZcashTransactionBuilder.js +4 -4
  83. package/dist/src/bitgo/zcash/address.js +3 -3
  84. package/dist/src/bitgo/zcash/hashZip0244.d.ts +1 -1
  85. package/dist/src/bitgo/zcash/hashZip0244.d.ts.map +1 -1
  86. package/dist/src/bitgo/zcash/hashZip0244.js +3 -3
  87. package/dist/src/bitgo/zcash/index.js +6 -2
  88. package/dist/src/index.js +6 -2
  89. package/dist/src/networks.d.ts +2 -2
  90. package/dist/src/networks.d.ts.map +1 -1
  91. package/dist/src/networks.js +47 -1
  92. package/dist/src/noble_ecc.d.ts +7 -7
  93. package/dist/src/noble_ecc.d.ts.map +1 -1
  94. package/dist/src/noble_ecc.js +4 -4
  95. package/dist/src/testutil/index.js +6 -2
  96. package/dist/src/testutil/keys.d.ts +4 -1
  97. package/dist/src/testutil/keys.d.ts.map +1 -1
  98. package/dist/src/testutil/keys.js +18 -3
  99. package/dist/src/testutil/mock.d.ts +1 -1
  100. package/dist/src/testutil/mock.d.ts.map +1 -1
  101. package/dist/src/testutil/mock.js +15 -15
  102. package/dist/src/testutil/psbt.d.ts +37 -15
  103. package/dist/src/testutil/psbt.d.ts.map +1 -1
  104. package/dist/src/testutil/psbt.js +41 -31
  105. package/dist/src/testutil/transaction.d.ts +15 -6
  106. package/dist/src/testutil/transaction.d.ts.map +1 -1
  107. package/dist/src/testutil/transaction.js +20 -20
  108. package/dist/src/transaction_builder.d.ts.map +1 -1
  109. package/dist/src/transaction_builder.js +12 -17
  110. package/package.json +7 -7
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parsePubScript = exports.parsePubScript2Of3 = exports.parseSignatureScript2Of3 = exports.parseSignatureScript = exports.getLeafVersion = exports.calculateScriptPathLevel = exports.isValidControlBock = exports.isPlaceholderSignature = void 0;
3
+ exports.getChainAndIndexFromPath = exports.parsePubScript = exports.parsePubScript2Of3 = exports.parseSignatureScript2Of3 = exports.parseSignatureScript = exports.getLeafVersion = exports.calculateScriptPathLevel = exports.isValidControlBock = exports.isPlaceholderSignature = void 0;
4
4
  /* eslint no-redeclare: 0 */
5
5
  const opcodes = require("bitcoin-ops");
6
6
  const bitcoinjs_lib_1 = require("bitcoinjs-lib");
@@ -90,7 +90,7 @@ function matchScript(script, pattern) {
90
90
  case 'OP_CHECKSIGVERIFY':
91
91
  return e === opcodes[p];
92
92
  case ':pubkey':
93
- return Buffer.isBuffer(e) && e.length === 33;
93
+ return Buffer.isBuffer(e) && (e.length === 33 || e.length === 65);
94
94
  case ':pubkey-xonly':
95
95
  return Buffer.isBuffer(e) && e.length === 32;
96
96
  case ':signature':
@@ -198,7 +198,7 @@ function parseP2ms(decScript, scriptType) {
198
198
  return match;
199
199
  }
200
200
  const [redeemScript] = match[':script'];
201
- if (!types_1.isTriple(redeemScript.match[':pubkey'])) {
201
+ if (!(0, types_1.isTriple)(redeemScript.match[':pubkey'])) {
202
202
  throw new Error(`invalid pubkey count`);
203
203
  }
204
204
  return {
@@ -306,7 +306,7 @@ function parseSignatureScript(input) {
306
306
  exports.parseSignatureScript = parseSignatureScript;
307
307
  function parseSignatureScript2Of3(input) {
308
308
  const result = parseSignatureScript(input);
309
- if (!outputScripts_1.isScriptType2Of3(result.scriptType) &&
309
+ if (!(0, outputScripts_1.isScriptType2Of3)(result.scriptType) &&
310
310
  result.scriptType !== 'taprootKeyPathSpend' &&
311
311
  result.scriptType !== 'taprootScriptPathSpend') {
312
312
  throw new Error(`invalid script type`);
@@ -347,7 +347,7 @@ const parseP2msPubScript = (pubScript, scriptType) => {
347
347
  return match;
348
348
  }
349
349
  const [redeemScript] = match[':script'];
350
- if (!types_1.isTriple(redeemScript.match[':pubkey'])) {
350
+ if (!(0, types_1.isTriple)(redeemScript.match[':pubkey'])) {
351
351
  throw new Error('invalid pubkey count');
352
352
  }
353
353
  return {
@@ -406,7 +406,7 @@ function parsePubScript2Of3(inputPubScript, scriptType) {
406
406
  }
407
407
  if ((result.scriptType === 'taprootKeyPathSpend' && result.publicKeys.length !== 1) ||
408
408
  (result.scriptType === 'taprootScriptPathSpend' && result.publicKeys.length !== 2) ||
409
- (outputScripts_1.isScriptType2Of3(result.scriptType) && result.publicKeys.length !== 3)) {
409
+ ((0, outputScripts_1.isScriptType2Of3)(result.scriptType) && result.publicKeys.length !== 3)) {
410
410
  throw new Error('unexpected pubkey count');
411
411
  }
412
412
  return result;
@@ -425,4 +425,20 @@ function parsePubScript(inputPubScript, scriptType) {
425
425
  return result;
426
426
  }
427
427
  exports.parsePubScript = parsePubScript;
428
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VJbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iaXRnby9wYXJzZUlucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDRCQUE0QjtBQUM1Qix1Q0FBdUM7QUFDdkMsaURBQTJEO0FBRTNELG1DQUFtQztBQUNuQyxtREFBbUQ7QUFFbkQsU0FBZ0Isc0JBQXNCLENBQUMsQ0FBa0I7SUFDdkQsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3RCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7S0FDdkI7SUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakIsQ0FBQztBQUxELHdEQUtDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxZQUFvQjtJQUNyRCxzRkFBc0Y7SUFDdEYsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxZQUFZLENBQUMsTUFBTSxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN0RyxDQUFDO0FBSEQsZ0RBR0M7QUFFRDs7R0FFRztBQUNILFNBQWdCLHdCQUF3QixDQUFDLFlBQW9CO0lBQzNELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFO1FBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztLQUNoRDtJQUNELElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUU7UUFDOUIsT0FBTyxDQUFDLENBQUM7S0FDVjtJQUNELElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUU7UUFDOUIsT0FBTyxDQUFDLENBQUM7S0FDVjtJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBWEQsNERBV0M7QUFFRDs7R0FF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QUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0tBQzVDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQWxCRCx3Q0FrQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQgbm8tcmVkZWNsYXJlOiAwICovXG5pbXBvcnQgKiBhcyBvcGNvZGVzIGZyb20gJ2JpdGNvaW4tb3BzJztcbmltcG9ydCB7IFR4SW5wdXQsIHNjcmlwdCBhcyBic2NyaXB0IH0gZnJvbSAnYml0Y29pbmpzLWxpYic7XG5cbmltcG9ydCB7IGlzVHJpcGxlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBpc1NjcmlwdFR5cGUyT2YzIH0gZnJvbSAnLi9vdXRwdXRTY3JpcHRzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGxhY2Vob2xkZXJTaWduYXR1cmUodjogbnVtYmVyIHwgQnVmZmVyKTogYm9vbGVhbiB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIodikpIHtcbiAgICByZXR1cm4gdi5sZW5ndGggPT09IDA7XG4gIH1cbiAgcmV0dXJuIHYgPT09IDA7XG59XG5cbi8qKlxuICogQHJldHVybiB0cnVlIGlmZiBQMlRSIHNjcmlwdCBwYXRoJ3MgY29udHJvbCBibG9jayBtYXRjaGVzIEJpdEdvJ3MgbmVlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZENvbnRyb2xCb2NrKGNvbnRyb2xCbG9jazogQnVmZmVyKTogYm9vbGVhbiB7XG4gIC8vIFRoZSBsYXN0IHN0YWNrIGVsZW1lbnQgaXMgY2FsbGVkIHRoZSBjb250cm9sIGJsb2NrIGMsIGFuZCBtdXN0IGhhdmUgbGVuZ3RoIDMzICsgMzJtXG4gIHJldHVybiBCdWZmZXIuaXNCdWZmZXIoY29udHJvbEJsb2NrKSAmJiAzMyA8PSBjb250cm9sQmxvY2subGVuZ3RoICYmIGNvbnRyb2xCbG9jay5sZW5ndGggJSAzMiA9PT0gMTtcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHNjcmlwdCBwYXRoIGxldmVsIGZvciBQMlRSIGNvbnRyb2wgYmxvY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZVNjcmlwdFBhdGhMZXZlbChjb250cm9sQmxvY2s6IEJ1ZmZlcik6IG51bWJlciB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGNvbnRyb2xCbG9jaykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29udHJvbCBibG9jayB0eXBlLicpO1xuICB9XG4gIGlmIChjb250cm9sQmxvY2subGVuZ3RoID09PSA2NSkge1xuICAgIHJldHVybiAxO1xuICB9XG4gIGlmIChjb250cm9sQmxvY2subGVuZ3RoID09PSA5Nykge1xuICAgIHJldHVybiAyO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCBjb250cm9sIGJsb2NrIGxlbmd0aC4nKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJuIGxlYWYgdmVyc2lvbiBmb3IgUDJUUiBjb250cm9sIGJsb2NrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGVhZlZlcnNpb24oY29udHJvbEJsb2NrOiBCdWZmZXIpOiBudW1iZXIge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGNvbnRyb2xCbG9jaykgJiYgY29udHJvbEJsb2NrLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gY29udHJvbEJsb2NrWzBdICYgMHhmZTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgbGVhZlZlcnNpb24uJyk7XG59XG5cbmV4cG9ydCB0eXBlIFBhcnNlZFNjcmlwdFR5cGUyT2YzID1cbiAgfCAncDJzaCdcbiAgfCAncDJzaFAyd3NoJ1xuICB8ICdwMndzaCdcbiAgfCAndGFwcm9vdEtleVBhdGhTcGVuZCcgLy8gb25seSBpbXBsZW1lbnRlZCBmb3IgcDJ0ck11c2lnMlxuICB8ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJzsgLy8gY2FuIGJlIGZvciBlaXRoZXIgcDJ0ciBvciBwMnRyTXVzaWcyIG91dHB1dCBzY3JpcHRcblxuZXhwb3J0IHR5cGUgUGFyc2VkU2NyaXB0VHlwZSA9IFBhcnNlZFNjcmlwdFR5cGUyT2YzIHwgJ3Ayc2hQMnBrJztcblxuZXhwb3J0IHR5cGUgUGFyc2VkUHViU2NyaXB0ID0ge1xuICBzY3JpcHRUeXBlOiBQYXJzZWRTY3JpcHRUeXBlO1xufTtcblxuZXhwb3J0IHR5cGUgUGFyc2VkU2lnbmF0dXJlU2NyaXB0ID0ge1xuICBzY3JpcHRUeXBlOiBQYXJzZWRTY3JpcHRUeXBlO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRTaWduYXR1cmVTY3JpcHRQMnNoUDJwayBleHRlbmRzIFBhcnNlZFNpZ25hdHVyZVNjcmlwdCB7XG4gIHNjcmlwdFR5cGU6ICdwMnNoUDJwayc7XG4gIHB1YmxpY0tleXM6IFtCdWZmZXJdO1xuICBzaWduYXR1cmVzOiBbQnVmZmVyXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRQdWJTY3JpcHRUYXByb290S2V5UGF0aCBleHRlbmRzIFBhcnNlZFB1YlNjcmlwdCB7XG4gIHNjcmlwdFR5cGU6ICd0YXByb290S2V5UGF0aFNwZW5kJztcbiAgLy8geC1vbmx5IHRhcE91dHB1dEtleVxuICBwdWJsaWNLZXlzOiBbQnVmZmVyXTtcbiAgcHViU2NyaXB0OiBCdWZmZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkUHViU2NyaXB0VGFwcm9vdFNjcmlwdFBhdGggZXh0ZW5kcyBQYXJzZWRQdWJTY3JpcHQge1xuICBzY3JpcHRUeXBlOiAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCc7XG4gIHB1YmxpY0tleXM6IFtCdWZmZXIsIEJ1ZmZlcl07XG4gIHB1YlNjcmlwdDogQnVmZmVyO1xufVxuXG5leHBvcnQgdHlwZSBQYXJzZWRQdWJTY3JpcHRUYXByb290ID0gUGFyc2VkUHViU2NyaXB0VGFwcm9vdEtleVBhdGggfCBQYXJzZWRQdWJTY3JpcHRUYXByb290U2NyaXB0UGF0aDtcblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRQdWJTY3JpcHRQMm1zIGV4dGVuZHMgUGFyc2VkUHViU2NyaXB0IHtcbiAgc2NyaXB0VHlwZTogJ3Ayc2gnIHwgJ3Ayc2hQMndzaCcgfCAncDJ3c2gnO1xuICBwdWJsaWNLZXlzOiBbQnVmZmVyLCBCdWZmZXIsIEJ1ZmZlcl07XG4gIHB1YlNjcmlwdDogQnVmZmVyO1xuICByZWRlZW1TY3JpcHQ6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbiAgd2l0bmVzc1NjcmlwdDogQnVmZmVyIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFB1YlNjcmlwdFAyc2hQMnBrIGV4dGVuZHMgUGFyc2VkUHViU2NyaXB0IHtcbiAgc2NyaXB0VHlwZTogJ3Ayc2hQMnBrJztcbiAgcHVibGljS2V5czogW0J1ZmZlcl07XG4gIHB1YlNjcmlwdDogQnVmZmVyO1xuICByZWRlZW1TY3JpcHQ6IEJ1ZmZlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRTaWduYXR1cmVTY3JpcHRQMm1zIGV4dGVuZHMgUGFyc2VkU2lnbmF0dXJlU2NyaXB0IHtcbiAgc2NyaXB0VHlwZTogJ3Ayc2gnIHwgJ3Ayc2hQMndzaCcgfCAncDJ3c2gnO1xuICBwdWJsaWNLZXlzOiBbQnVmZmVyLCBCdWZmZXIsIEJ1ZmZlcl07XG4gIHNpZ25hdHVyZXM6XG4gICAgfCBbQnVmZmVyLCBCdWZmZXJdIC8vIGZ1bGx5LXNpZ25lZCB0cmFuc2FjdGlvbnMgd2l0aCBzaWduYXR1cmVzXG4gICAgLyogUGFydGlhbGx5IHNpZ25lZCB0cmFuc2FjdGlvbnMgd2l0aCBwbGFjZWhvbGRlciBzaWduYXR1cmVzLlxuICAgICAgIEZvciBwMnNoLCB0aGUgcGxhY2Vob2xkZXIgaXMgT1BfMCAobnVtYmVyIDApICovXG4gICAgfCBbQnVmZmVyIHwgMCwgQnVmZmVyIHwgMCwgQnVmZmVyIHwgMF07XG4gIHB1YlNjcmlwdDogQnVmZmVyO1xuICByZWRlZW1TY3JpcHQ6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbiAgd2l0bmVzc1NjcmlwdDogQnVmZmVyIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEtleXBhdGggc3BlbmRzIG9ubHkgaGF2ZSBhIHNpbmdsZSBzaWduYXR1cmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290S2V5UGF0aCBleHRlbmRzIFBhcnNlZFNpZ25hdHVyZVNjcmlwdCB7XG4gIHNjcmlwdFR5cGU6ICd0YXByb290S2V5UGF0aFNwZW5kJztcbiAgc2lnbmF0dXJlczogW0J1ZmZlcl07XG59XG5cbi8qKlxuICogVGFwcm9vdCBTY3JpcHRwYXRoIHNwZW5kcyBhcmUgbW9yZSBzaW1pbGFyIHRvIHJlZ3VsYXIgcDJtcyBzcGVuZHMgYW5kIGhhdmUgdHdvIHB1YmxpYyBrZXlzIGFuZFxuICogdHdvIHNpZ25hdHVyZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290U2NyaXB0UGF0aCBleHRlbmRzIFBhcnNlZFNpZ25hdHVyZVNjcmlwdCB7XG4gIHNjcmlwdFR5cGU6ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJztcbiAgcHVibGljS2V5czogW0J1ZmZlciwgQnVmZmVyXTtcbiAgc2lnbmF0dXJlczogW0J1ZmZlciwgQnVmZmVyXTtcbiAgY29udHJvbEJsb2NrOiBCdWZmZXI7XG4gIGxlYWZWZXJzaW9uOiBudW1iZXI7XG4gIC8qKiBJbmRpY2F0ZXMgdGhlIGxldmVsIGluc2lkZSB0aGUgdGFwdHJlZS4gKi9cbiAgc2NyaXB0UGF0aExldmVsOiBudW1iZXI7XG4gIHB1YlNjcmlwdDogQnVmZmVyO1xufVxuXG5leHBvcnQgdHlwZSBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290ID0gUGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdEtleVBhdGggfCBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290U2NyaXB0UGF0aDtcblxudHlwZSBEZWNvbXBpbGVkU2NyaXB0ID0gQXJyYXk8QnVmZmVyIHwgbnVtYmVyPjtcblxuLyoqXG4gKiBTdGF0aWMgc2NyaXB0IGVsZW1lbnRzXG4gKi9cbnR5cGUgU2NyaXB0UGF0dGVybkNvbnN0YW50ID1cbiAgfCAnT1BfMCdcbiAgfCAnT1BfMSdcbiAgfCAnT1BfMidcbiAgfCAnT1BfMydcbiAgfCAnT1BfQ0hFQ0tNVUxUSVNJRydcbiAgfCAnT1BfQ0hFQ0tTSUcnXG4gIHwgJ09QX0NIRUNLU0lHVkVSSUZZJztcblxuLyoqXG4gKiBTY3JpcHQgZWxlbWVudHMgdGhhdCBjYW4gYmUgY2FwdHVyZWRcbiAqL1xudHlwZSBTY3JpcHRQYXR0ZXJuQ2FwdHVyZSA9XG4gIHwgJzpwdWJrZXknXG4gIHwgJzpwdWJrZXkteG9ubHknXG4gIHwgJzpzaWduYXR1cmUnXG4gIHwgJzpjb250cm9sLWJsb2NrJ1xuICB8IHsgJzpzY3JpcHQnOiBTY3JpcHRQYXR0ZXJuRWxlbWVudFtdIH07XG5cbnR5cGUgU2NyaXB0UGF0dGVybkVsZW1lbnQgPSBTY3JpcHRQYXR0ZXJuQ29uc3RhbnQgfCBTY3JpcHRQYXR0ZXJuQ2FwdHVyZTtcblxuLyoqXG4gKiBSZXN1bHQgZm9yIGEgc3VjY2Vzc2Z1bCBzY3JpcHQgbWF0Y2hcbiAqL1xudHlwZSBNYXRjaFJlc3VsdCA9IHtcbiAgJzpwdWJrZXknOiBCdWZmZXJbXTtcbiAgJzpwdWJrZXkteG9ubHknOiBCdWZmZXJbXTtcbiAgJzpjb250cm9sLWJsb2NrJzogQnVmZmVyW107XG4gICc6c2lnbmF0dXJlJzogKEJ1ZmZlciB8IDApW107XG4gICc6c2NyaXB0JzogeyBidWZmZXI6IEJ1ZmZlcjsgbWF0Y2g6IE1hdGNoUmVzdWx0IH1bXTtcbn07XG5cbmZ1bmN0aW9uIGVtcHR5TWF0Y2hSZXN1bHQoKTogTWF0Y2hSZXN1bHQge1xuICByZXR1cm4ge1xuICAgICc6cHVia2V5JzogW10sXG4gICAgJzpwdWJrZXkteG9ubHknOiBbXSxcbiAgICAnOmNvbnRyb2wtYmxvY2snOiBbXSxcbiAgICAnOnNpZ25hdHVyZSc6IFtdLFxuICAgICc6c2NyaXB0JzogW10sXG4gIH07XG59XG5cbmNsYXNzIE1hdGNoRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8vIHRoaXMgcHJvcGVydHkgaXMgcmVxdWlyZWQgdG8gcHJvaGliaXQgYHJldHVybiBuZXcgRXJyb3IoKWAgd2hlbiB0aGUgcmV0dXJuIHR5cGUgZGVtYW5kcyBgTWF0Y2hFcnJvcmBcbiAgX190eXBlID0gJ01hdGNoRXJyb3InO1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgfVxuXG4gIHN0YXRpYyBmb3JQYXR0ZXJuRWxlbWVudChwOiBTY3JpcHRQYXR0ZXJuRWxlbWVudCk6IE1hdGNoRXJyb3Ige1xuICAgIGlmICh0eXBlb2YgcCA9PT0gJ29iamVjdCcgJiYgJzpzY3JpcHQnIGluIHApIHtcbiAgICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgZXJyb3IgbWF0Y2hpbmcgbmVzdGVkIHNjcmlwdGApO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYGVycm9yIG1hdGNoaW5nICR7cH1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSBzY3JpcHRcbiAqIEBwYXJhbSBwYXR0ZXJuXG4gKiBAcmV0dXJuIE1hdGNoUmVzdWx0IGlmIHNjcmlwdCBtYXRjaGVzIHBhdHRlcm4uIFRoZSByZXN1bHQgd2lsbCBjb250YWluIHRoZSBtYXRjaGVkIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hTY3JpcHQoc2NyaXB0OiBEZWNvbXBpbGVkU2NyaXB0LCBwYXR0ZXJuOiBTY3JpcHRQYXR0ZXJuRWxlbWVudFtdKTogTWF0Y2hSZXN1bHQgfCBNYXRjaEVycm9yIHtcbiAgLyoqXG4gICAqIE1hdGNoIGEgc2luZ2xlIHNjcmlwdCBlbGVtZW50IHdpdGggYSBTY3JpcHRQYXR0ZXJuRWxlbWVudFxuICAgKi9cbiAgZnVuY3Rpb24gbWF0Y2hFbGVtZW50KGU6IEJ1ZmZlciB8IG51bWJlciwgcDogU2NyaXB0UGF0dGVybkVsZW1lbnQpOiBNYXRjaFJlc3VsdCB8IGJvb2xlYW4ge1xuICAgIHN3aXRjaCAocCkge1xuICAgICAgY2FzZSAnT1BfMCc6XG4gICAgICAgIHJldHVybiBlID09PSBvcGNvZGVzLk9QXzAgfHwgKEJ1ZmZlci5pc0J1ZmZlcihlKSAmJiBlLmxlbmd0aCA9PT0gMCk7XG4gICAgICBjYXNlICdPUF8xJzpcbiAgICAgIGNhc2UgJ09QXzInOlxuICAgICAgY2FzZSAnT1BfMyc6XG4gICAgICBjYXNlICdPUF9DSEVDS01VTFRJU0lHJzpcbiAgICAgIGNhc2UgJ09QX0NIRUNLU0lHJzpcbiAgICAgIGNhc2UgJ09QX0NIRUNLU0lHVkVSSUZZJzpcbiAgICAgICAgcmV0dXJuIGUgPT09IG9wY29kZXNbcF07XG4gICAgICBjYXNlICc6cHVia2V5JzpcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihlKSAmJiBlLmxlbmd0aCA9PT0gMzM7XG4gICAgICBjYXNlICc6cHVia2V5LXhvbmx5JzpcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihlKSAmJiBlLmxlbmd0aCA9PT0gMzI7XG4gICAgICBjYXNlICc6c2lnbmF0dXJlJzpcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihlKSB8fCBpc1BsYWNlaG9sZGVyU2lnbmF0dXJlKGUpO1xuICAgICAgY2FzZSAnOmNvbnRyb2wtYmxvY2snOlxuICAgICAgICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGUpICYmIGlzVmFsaWRDb250cm9sQm9jayhlKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBwYXR0ZXJuIGVsZW1lbnQgJHtwfWApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzY3JpcHQubGVuZ3RoICE9PSBwYXR0ZXJuLmxlbmd0aCkge1xuICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgbGVuZ3RoIG1pc21hdGNoYCk7XG4gIH1cblxuICAvLyBHbyBvdmVyIGVhY2ggcGF0dGVybiBlbGVtZW50LlxuICAvLyBDb2xsZWN0IGNhcHR1cmVzIGludG8gYSByZXN1bHQgb2JqZWN0LlxuICByZXR1cm4gcGF0dGVybi5yZWR1Y2UoKG9iajogTWF0Y2hSZXN1bHQgfCBNYXRjaEVycm9yLCBwLCBpKTogTWF0Y2hSZXN1bHQgfCBNYXRjaEVycm9yID0+IHtcbiAgICAvLyBpZiB3ZSBoYWQgYSBwcmV2aW91cyBtaXNtYXRjaCwgc2hvcnQtY2lyY3VpdFxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIGNvbnN0IGUgPSBzY3JpcHRbaV07XG5cbiAgICAvLyBmb3IgJzpzY3JpcHQnIHBhdHRlcm4gZWxlbWVudHMsIGRlY29tcGlsZSBzY3JpcHQgZWxlbWVudCBhbmQgcmVjdXJzZVxuICAgIGlmICh0eXBlb2YgcCA9PT0gJ29iamVjdCcgJiYgJzpzY3JpcHQnIGluIHApIHtcbiAgICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGUpKSB7XG4gICAgICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgZXhwZWN0ZWQgYnVmZmVyIGZvciA6c2NyaXB0YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBkZWMgPSBic2NyaXB0LmRlY29tcGlsZShlKTtcbiAgICAgIGlmICghZGVjKSB7XG4gICAgICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgZXJyb3IgZGVjb21waWxpbmcgbmVzdGVkIHNjcmlwdGApO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF0Y2ggPSBtYXRjaFNjcmlwdChkZWMsIHBbJzpzY3JpcHQnXSk7XG4gICAgICBpZiAobWF0Y2ggaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgIH1cbiAgICAgIG9ialsnOnNjcmlwdCddLnB1c2goe1xuICAgICAgICBidWZmZXI6IGUsXG4gICAgICAgIG1hdGNoLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoID0gbWF0Y2hFbGVtZW50KGUsIHApO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHJldHVybiBNYXRjaEVycm9yLmZvclBhdHRlcm5FbGVtZW50KHApO1xuICAgIH1cblxuICAgIC8vIGlmIHBhdHRlcm4gZWxlbWVudCBpcyBhIGNhcHR1cmUsIGFkZCBpdCB0byB0aGUgcmVzdWx0IG9ialxuICAgIGlmIChwID09PSAnOnNpZ25hdHVyZScgJiYgZSA9PT0gMCkge1xuICAgICAgb2JqW3BdLnB1c2goZSk7XG4gICAgfSBlbHNlIGlmIChwIGluIG9iaikge1xuICAgICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGNhcHR1cmUgdmFsdWVgKTtcbiAgICAgIH1cbiAgICAgIG9ialtwXS5wdXNoKGUpO1xuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG4gIH0sIGVtcHR5TWF0Y2hSZXN1bHQoKSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHNjcmlwdFxuICogQHBhcmFtIHBhdHRlcm5zXG4gKiBAcmV0dXJuIGZpcnN0IG1hdGNoXG4gKi9cbmZ1bmN0aW9uIG1hdGNoU2NyaXB0U29tZShzY3JpcHQ6IERlY29tcGlsZWRTY3JpcHQsIHBhdHRlcm5zOiBTY3JpcHRQYXR0ZXJuRWxlbWVudFtdW10pOiBNYXRjaFJlc3VsdCB8IE1hdGNoRXJyb3Ige1xuICBmb3IgKGNvbnN0IHAgb2YgcGF0dGVybnMpIHtcbiAgICBjb25zdCBtID0gbWF0Y2hTY3JpcHQoc2NyaXB0LCBwKTtcbiAgICBpZiAobSBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICByZXR1cm4gbTtcbiAgfVxuICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYG5vIG1hdGNoIGZvciBzY3JpcHRgKTtcbn1cblxudHlwZSBJbnB1dFNjcmlwdHM8VFNjcmlwdCwgVFdpdG5lc3M+ID0ge1xuICBzY3JpcHQ6IFRTY3JpcHQ7XG4gIHdpdG5lc3M6IFRXaXRuZXNzO1xufTtcblxudHlwZSBJbnB1dFNjcmlwdHNMZWdhY3kgPSBJbnB1dFNjcmlwdHM8RGVjb21waWxlZFNjcmlwdCwgbnVsbD47XG50eXBlIElucHV0U2NyaXB0c1dyYXBwZWRTZWd3aXQgPSBJbnB1dFNjcmlwdHM8RGVjb21waWxlZFNjcmlwdCwgQnVmZmVyW10+O1xudHlwZSBJbnB1dFNjcmlwdHNOYXRpdmVTZWd3aXQgPSBJbnB1dFNjcmlwdHM8bnVsbCwgQnVmZmVyW10+O1xuXG50eXBlIElucHV0U2NyaXB0c1Vua25vd24gPSBJbnB1dFNjcmlwdHM8RGVjb21waWxlZFNjcmlwdCB8IG51bGwsIEJ1ZmZlcltdIHwgbnVsbD47XG5cbnR5cGUgSW5wdXRQYXJzZXI8VCBleHRlbmRzIFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAyc2hQMnBrIHwgUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJtcyB8IFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3Q+ID0gKFxuICBwOiBJbnB1dFNjcmlwdHNVbmtub3duXG4pID0+IFQgfCBNYXRjaEVycm9yO1xuXG5leHBvcnQgdHlwZSBJbnB1dFB1YlNjcmlwdCA9IEJ1ZmZlcjtcblxudHlwZSBQdWJTY3JpcHRQYXJzZXI8VCBleHRlbmRzIFBhcnNlZFB1YlNjcmlwdFRhcHJvb3QgfCBQYXJzZWRQdWJTY3JpcHRQMm1zIHwgUGFyc2VkUHViU2NyaXB0UDJzaFAycGs+ID0gKFxuICBwOiBJbnB1dFB1YlNjcmlwdCxcbiAgdDogUGFyc2VkU2NyaXB0VHlwZVxuKSA9PiBUIHwgTWF0Y2hFcnJvcjtcblxuZnVuY3Rpb24gaXNMZWdhY3kocDogSW5wdXRTY3JpcHRzVW5rbm93bik6IHAgaXMgSW5wdXRTY3JpcHRzTGVnYWN5IHtcbiAgcmV0dXJuIEJvb2xlYW4ocC5zY3JpcHQgJiYgIXAud2l0bmVzcyk7XG59XG5cbmZ1bmN0aW9uIGlzV3JhcHBlZFNlZ3dpdChwOiBJbnB1dFNjcmlwdHNVbmtub3duKTogcCBpcyBJbnB1dFNjcmlwdHNXcmFwcGVkU2Vnd2l0IHtcbiAgcmV0dXJuIEJvb2xlYW4ocC5zY3JpcHQgJiYgcC53aXRuZXNzKTtcbn1cblxuZnVuY3Rpb24gaXNOYXRpdmVTZWd3aXQocDogSW5wdXRTY3JpcHRzVW5rbm93bik6IHAgaXMgSW5wdXRTY3JpcHRzTmF0aXZlU2Vnd2l0IHtcbiAgcmV0dXJuIEJvb2xlYW4oIXAuc2NyaXB0ICYmIHAud2l0bmVzcyk7XG59XG5cbmNvbnN0IHBhcnNlUDJzaFAycGs6IElucHV0UGFyc2VyPFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAyc2hQMnBrPiA9IChwKSA9PiB7XG4gIGlmICghaXNMZWdhY3kocCkpIHtcbiAgICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYGV4cGVjdGVkIGxlZ2FjeSBpbnB1dGApO1xuICB9XG4gIGNvbnN0IG1hdGNoID0gbWF0Y2hTY3JpcHQocC5zY3JpcHQsIFsnOnNpZ25hdHVyZScsIHsgJzpzY3JpcHQnOiBbJzpwdWJrZXknLCAnT1BfQ0hFQ0tTSUcnXSB9XSk7XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICByZXR1cm4gbWF0Y2g7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzY3JpcHRUeXBlOiAncDJzaFAycGsnLFxuICAgIHB1YmxpY0tleXM6IG1hdGNoWyc6c2NyaXB0J11bMF0ubWF0Y2hbJzpwdWJrZXknXSBhcyBbQnVmZmVyXSxcbiAgICBzaWduYXR1cmVzOiBtYXRjaFsnOnNpZ25hdHVyZSddIGFzIFtCdWZmZXJdLFxuICB9O1xufTtcblxuZnVuY3Rpb24gcGFyc2VQMm1zKFxuICBkZWNTY3JpcHQ6IERlY29tcGlsZWRTY3JpcHQsXG4gIHNjcmlwdFR5cGU6ICdwMnNoJyB8ICdwMnNoUDJ3c2gnIHwgJ3Ayd3NoJ1xuKTogUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJtcyB8IE1hdGNoRXJyb3Ige1xuICBjb25zdCBwYXR0ZXJuMk9mMzogU2NyaXB0UGF0dGVybkVsZW1lbnRbXSA9IFsnT1BfMicsICc6cHVia2V5JywgJzpwdWJrZXknLCAnOnB1YmtleScsICdPUF8zJywgJ09QX0NIRUNLTVVMVElTSUcnXTtcblxuICBjb25zdCBtYXRjaCA9IG1hdGNoU2NyaXB0U29tZShkZWNTY3JpcHQsIFtcbiAgICAvKiBmdWxsLXNpZ25lZCwgbm8gcGxhY2Vob2xkZXIgc2lnbmF0dXJlICovXG4gICAgWydPUF8wJywgJzpzaWduYXR1cmUnLCAnOnNpZ25hdHVyZScsIHsgJzpzY3JpcHQnOiBwYXR0ZXJuMk9mMyB9XSxcbiAgICAvKiBoYWxmLXNpZ25lZCwgcGxhY2Vob2xkZXIgc2lnbmF0dXJlcyAqL1xuICAgIFsnT1BfMCcsICc6c2lnbmF0dXJlJywgJzpzaWduYXR1cmUnLCAnOnNpZ25hdHVyZScsIHsgJzpzY3JpcHQnOiBwYXR0ZXJuMk9mMyB9XSxcbiAgXSk7XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICByZXR1cm4gbWF0Y2g7XG4gIH1cblxuICBjb25zdCBbcmVkZWVtU2NyaXB0XSA9IG1hdGNoWyc6c2NyaXB0J107XG5cbiAgaWYgKCFpc1RyaXBsZShyZWRlZW1TY3JpcHQubWF0Y2hbJzpwdWJrZXknXSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgcHVia2V5IGNvdW50YCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNjcmlwdFR5cGUsXG4gICAgcHVibGljS2V5czogcmVkZWVtU2NyaXB0Lm1hdGNoWyc6cHVia2V5J10sXG4gICAgcHViU2NyaXB0OiByZWRlZW1TY3JpcHQuYnVmZmVyLFxuICAgIHNpZ25hdHVyZXM6IG1hdGNoWyc6c2lnbmF0dXJlJ10gYXMgUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJtc1snc2lnbmF0dXJlcyddLFxuICAgIHJlZGVlbVNjcmlwdDogc2NyaXB0VHlwZSA9PT0gJ3Ayc2gnID8gcmVkZWVtU2NyaXB0LmJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgICB3aXRuZXNzU2NyaXB0OiBzY3JpcHRUeXBlID09PSAncDJzaFAyd3NoJyB8fCBzY3JpcHRUeXBlID09PSAncDJ3c2gnID8gcmVkZWVtU2NyaXB0LmJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgfTtcbn1cblxuY29uc3QgcGFyc2VQMnNoMk9mMzogSW5wdXRQYXJzZXI8UGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJtcz4gPSAocCkgPT4ge1xuICBpZiAoIWlzTGVnYWN5KHApKSB7XG4gICAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBleHBlY3RlZCBsZWdhY3kgaW5wdXRgKTtcbiAgfVxuICByZXR1cm4gcGFyc2VQMm1zKHAuc2NyaXB0LCAncDJzaCcpO1xufTtcblxuY29uc3QgcGFyc2VQMnNoUDJ3c2gyT2YzOiBJbnB1dFBhcnNlcjxQYXJzZWRTaWduYXR1cmVTY3JpcHRQMm1zPiA9IChwKSA9PiB7XG4gIGlmICghaXNXcmFwcGVkU2Vnd2l0KHApKSB7XG4gICAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBleHBlY3RlZCB3cmFwcGVkIHNlZ3dpdCBpbnB1dGApO1xuICB9XG4gIHJldHVybiB7IC4uLnBhcnNlUDJtcyhwLndpdG5lc3MsICdwMnNoUDJ3c2gnKSwgcmVkZWVtU2NyaXB0OiBwLnNjcmlwdFswXSBhcyBCdWZmZXIgfTtcbn07XG5cbmNvbnN0IHBhcnNlUDJ3c2gyT2YzOiBJbnB1dFBhcnNlcjxQYXJzZWRTaWduYXR1cmVTY3JpcHRQMm1zPiA9IChwKSA9PiB7XG4gIGlmICghaXNOYXRpdmVTZWd3aXQocCkpIHtcbiAgICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYGV4cGVjdGVkIG5hdGl2ZSBzZWd3aXRgKTtcbiAgfVxuICByZXR1cm4gcGFyc2VQMm1zKHAud2l0bmVzcywgJ3Ayd3NoJyk7XG59O1xuXG5jb25zdCBwYXJzZVRhcHJvb3RLZXlQYXRoMk9mMzogSW5wdXRQYXJzZXI8UGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdEtleVBhdGg+ID0gKHApID0+IHtcbiAgaWYgKCFpc05hdGl2ZVNlZ3dpdChwKSkge1xuICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgZXhwZWN0ZWQgbmF0aXZlIHNlZ3dpdGApO1xuICB9XG4gIGNvbnN0IG1hdGNoID0gbWF0Y2hTY3JpcHQocC53aXRuZXNzLCBbJzpzaWduYXR1cmUnXSk7XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICByZXR1cm4gbWF0Y2g7XG4gIH1cbiAgY29uc3Qgc2lnbmF0dXJlcyA9IG1hdGNoWyc6c2lnbmF0dXJlJ10gYXMgW0J1ZmZlcl07XG4gIGlmIChpc1BsYWNlaG9sZGVyU2lnbmF0dXJlKHNpZ25hdHVyZXNbMF0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHRhcHJvb3Qga2V5IHBhdGggc2lnbmF0dXJlYCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzY3JpcHRUeXBlOiAndGFwcm9vdEtleVBhdGhTcGVuZCcsXG4gICAgc2lnbmF0dXJlcyxcbiAgfTtcbn07XG5cbmNvbnN0IHBhcnNlVGFwcm9vdFNjcmlwdFBhdGgyT2YzOiBJbnB1dFBhcnNlcjxQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290PiA9IChwKSA9PiB7XG4gIGlmICghaXNOYXRpdmVTZWd3aXQocCkpIHtcbiAgICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYGV4cGVjdGVkIG5hdGl2ZSBzZWd3aXRgKTtcbiAgfVxuICAvLyBhc3N1bWVzIG5vIGFubmV4XG4gIGNvbnN0IG1hdGNoID0gbWF0Y2hTY3JpcHQocC53aXRuZXNzLCBbXG4gICAgJzpzaWduYXR1cmUnLFxuICAgICc6c2lnbmF0dXJlJyxcbiAgICB7ICc6c2NyaXB0JzogWyc6cHVia2V5LXhvbmx5JywgJ09QX0NIRUNLU0lHVkVSSUZZJywgJzpwdWJrZXkteG9ubHknLCAnT1BfQ0hFQ0tTSUcnXSB9LFxuICAgICc6Y29udHJvbC1ibG9jaycsXG4gIF0pO1xuICBpZiAobWF0Y2ggaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgcmV0dXJuIG1hdGNoO1xuICB9XG4gIGNvbnN0IFtjb250cm9sQmxvY2tdID0gbWF0Y2hbJzpjb250cm9sLWJsb2NrJ107XG4gIGNvbnN0IHNjcmlwdFBhdGhMZXZlbCA9IGNhbGN1bGF0ZVNjcmlwdFBhdGhMZXZlbChjb250cm9sQmxvY2spO1xuXG4gIGNvbnN0IGxlYWZWZXJzaW9uID0gZ2V0TGVhZlZlcnNpb24oY29udHJvbEJsb2NrKTtcblxuICByZXR1cm4ge1xuICAgIHNjcmlwdFR5cGU6ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJyxcbiAgICBwdWJTY3JpcHQ6IG1hdGNoWyc6c2NyaXB0J11bMF0uYnVmZmVyLFxuICAgIHB1YmxpY0tleXM6IG1hdGNoWyc6c2NyaXB0J11bMF0ubWF0Y2hbJzpwdWJrZXkteG9ubHknXSBhcyBbQnVmZmVyLCBCdWZmZXJdLFxuICAgIHNpZ25hdHVyZXM6IG1hdGNoWyc6c2lnbmF0dXJlJ10gYXMgW0J1ZmZlciwgQnVmZmVyXSxcbiAgICBjb250cm9sQmxvY2ssXG4gICAgc2NyaXB0UGF0aExldmVsLFxuICAgIGxlYWZWZXJzaW9uLFxuICB9O1xufTtcblxuLyoqXG4gKiBQYXJzZSBhIHRyYW5zYWN0aW9uJ3Mgc2lnbmF0dXJlIHNjcmlwdCB0byBvYnRhaW4gcHVibGljIGtleXMsIHNpZ25hdHVyZXMsIHRoZSBzaWcgc2NyaXB0LFxuICogYW5kIG90aGVyIHByb3BlcnRpZXMuXG4gKlxuICogT25seSBzdXBwb3J0cyBzY3JpcHQgdHlwZXMgdXNlZCBpbiBCaXRHbyB0cmFuc2FjdGlvbnMuXG4gKlxuICogQHBhcmFtIGlucHV0XG4gKiBAcmV0dXJucyBQYXJzZWRTaWduYXR1cmVTY3JpcHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2lnbmF0dXJlU2NyaXB0KFxuICBpbnB1dDogVHhJbnB1dFxuKTogUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJzaFAycGsgfCBQYXJzZWRTaWduYXR1cmVTY3JpcHRQMm1zIHwgUGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdCB7XG4gIGNvbnN0IGRlY1NjcmlwdCA9IGJzY3JpcHQuZGVjb21waWxlKGlucHV0LnNjcmlwdCk7XG4gIGNvbnN0IHBhcnNlcnMgPSBbXG4gICAgcGFyc2VQMnNoMk9mMyxcbiAgICBwYXJzZVAyc2hQMndzaDJPZjMsXG4gICAgcGFyc2VQMndzaDJPZjMsXG4gICAgcGFyc2VUYXByb290S2V5UGF0aDJPZjMsXG4gICAgcGFyc2VUYXByb290U2NyaXB0UGF0aDJPZjMsXG4gICAgcGFyc2VQMnNoUDJwayxcbiAgXSBhcyBjb25zdDtcbiAgZm9yIChjb25zdCBmIG9mIHBhcnNlcnMpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBmKHtcbiAgICAgIHNjcmlwdDogZGVjU2NyaXB0Py5sZW5ndGggPT09IDAgPyBudWxsIDogZGVjU2NyaXB0LFxuICAgICAgd2l0bmVzczogaW5wdXQud2l0bmVzcy5sZW5ndGggPT09IDAgPyBudWxsIDogaW5wdXQud2l0bmVzcyxcbiAgICB9KTtcbiAgICBpZiAocGFyc2VkIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBjb3VsZCBub3QgcGFyc2UgaW5wdXRgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2lnbmF0dXJlU2NyaXB0Mk9mMyhpbnB1dDogVHhJbnB1dCk6IFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAybXMgfCBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290IHtcbiAgY29uc3QgcmVzdWx0ID0gcGFyc2VTaWduYXR1cmVTY3JpcHQoaW5wdXQpO1xuXG4gIGlmIChcbiAgICAhaXNTY3JpcHRUeXBlMk9mMyhyZXN1bHQuc2NyaXB0VHlwZSkgJiZcbiAgICByZXN1bHQuc2NyaXB0VHlwZSAhPT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnICYmXG4gICAgcmVzdWx0LnNjcmlwdFR5cGUgIT09ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgc2NyaXB0IHR5cGVgKTtcbiAgfVxuXG4gIGlmICghcmVzdWx0LnNpZ25hdHVyZXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG1pc3Npbmcgc2lnbmF0dXJlc2ApO1xuICB9XG4gIGlmIChcbiAgICByZXN1bHQuc2NyaXB0VHlwZSAhPT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnICYmXG4gICAgcmVzdWx0LnB1YmxpY0tleXMubGVuZ3RoICE9PSAzICYmXG4gICAgKHJlc3VsdC5wdWJsaWNLZXlzLmxlbmd0aCAhPT0gMiB8fCByZXN1bHQuc2NyaXB0VHlwZSAhPT0gJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnKVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQgcHVia2V5IGNvdW50YCk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0IGFzIFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAybXMgfCBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290O1xufVxuXG5jb25zdCBwYXJzZVAyc2hQMnBrUHViU2NyaXB0OiBQdWJTY3JpcHRQYXJzZXI8UGFyc2VkUHViU2NyaXB0UDJzaFAycGs+ID0gKHB1YlNjcmlwdCwgc2NyaXB0VHlwZSkgPT4ge1xuICBpZiAoc2NyaXB0VHlwZSAhPT0gJ3Ayc2hQMnBrJykge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzY3JpcHQgdHlwZScpO1xuICB9XG4gIGNvbnN0IG1hdGNoID0gbWF0Y2hTY3JpcHQoW3B1YlNjcmlwdF0sIFt7ICc6c2NyaXB0JzogWyc6cHVia2V5JywgJ09QX0NIRUNLU0lHJ10gfV0pO1xuICBpZiAobWF0Y2ggaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgcmV0dXJuIG1hdGNoO1xuICB9XG4gIGNvbnN0IFtzY3JpcHRdID0gbWF0Y2hbJzpzY3JpcHQnXTtcbiAgcmV0dXJuIHtcbiAgICBzY3JpcHRUeXBlLFxuICAgIHB1YmxpY0tleXM6IHNjcmlwdC5tYXRjaFsnOnB1YmtleSddIGFzIFtCdWZmZXJdLFxuICAgIHB1YlNjcmlwdDogcHViU2NyaXB0LFxuICAgIHJlZGVlbVNjcmlwdDogcHViU2NyaXB0LFxuICB9O1xufTtcblxuY29uc3QgcGFyc2VQMm1zUHViU2NyaXB0OiBQdWJTY3JpcHRQYXJzZXI8UGFyc2VkUHViU2NyaXB0UDJtcz4gPSAocHViU2NyaXB0LCBzY3JpcHRUeXBlKSA9PiB7XG4gIGlmIChzY3JpcHRUeXBlID09PSAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCcgfHwgc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnIHx8IHNjcmlwdFR5cGUgPT09ICdwMnNoUDJwaycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc2NyaXB0IHR5cGUnKTtcbiAgfVxuICBjb25zdCBtYXRjaCA9IG1hdGNoU2NyaXB0KFxuICAgIFtwdWJTY3JpcHRdLFxuICAgIFt7ICc6c2NyaXB0JzogWydPUF8yJywgJzpwdWJrZXknLCAnOnB1YmtleScsICc6cHVia2V5JywgJ09QXzMnLCAnT1BfQ0hFQ0tNVUxUSVNJRyddIH1dXG4gICk7XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICByZXR1cm4gbWF0Y2g7XG4gIH1cblxuICBjb25zdCBbcmVkZWVtU2NyaXB0XSA9IG1hdGNoWyc6c2NyaXB0J107XG5cbiAgaWYgKCFpc1RyaXBsZShyZWRlZW1TY3JpcHQubWF0Y2hbJzpwdWJrZXknXSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcHVia2V5IGNvdW50Jyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNjcmlwdFR5cGUsXG4gICAgcHVibGljS2V5czogcmVkZWVtU2NyaXB0Lm1hdGNoWyc6cHVia2V5J10sXG4gICAgcHViU2NyaXB0OiByZWRlZW1TY3JpcHQuYnVmZmVyLFxuICAgIHJlZGVlbVNjcmlwdDogc2NyaXB0VHlwZSA9PT0gJ3Ayc2gnID8gcmVkZWVtU2NyaXB0LmJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgICB3aXRuZXNzU2NyaXB0OiBzY3JpcHRUeXBlID09PSAncDJzaFAyd3NoJyB8fCBzY3JpcHRUeXBlID09PSAncDJ3c2gnID8gcmVkZWVtU2NyaXB0LmJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgfTtcbn07XG5cbmNvbnN0IHBhcnNlVGFwcm9vdEtleVBhdGhQdWJTY3JpcHQ6IFB1YlNjcmlwdFBhcnNlcjxQYXJzZWRQdWJTY3JpcHRUYXByb290S2V5UGF0aD4gPSAocHViU2NyaXB0LCBzY3JpcHRUeXBlKSA9PiB7XG4gIGlmIChcbiAgICBzY3JpcHRUeXBlID09PSAncDJzaCcgfHxcbiAgICBzY3JpcHRUeXBlID09PSAncDJ3c2gnIHx8XG4gICAgc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMndzaCcgfHxcbiAgICBzY3JpcHRUeXBlID09PSAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCcgfHxcbiAgICBzY3JpcHRUeXBlID09PSAncDJzaFAycGsnXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzY3JpcHQgdHlwZScpO1xuICB9XG4gIGNvbnN0IG1hdGNoID0gbWF0Y2hTY3JpcHQoW3B1YlNjcmlwdF0sIFt7ICc6c2NyaXB0JzogWydPUF8xJywgJzpwdWJrZXkteG9ubHknXSB9XSk7XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICByZXR1cm4gbWF0Y2g7XG4gIH1cblxuICBjb25zdCBbc2NyaXB0XSA9IG1hdGNoWyc6c2NyaXB0J107XG5cbiAgcmV0dXJuIHtcbiAgICBzY3JpcHRUeXBlOiAndGFwcm9vdEtleVBhdGhTcGVuZCcsXG4gICAgcHVibGljS2V5czogc2NyaXB0Lm1hdGNoWyc6cHVia2V5LXhvbmx5J10gYXMgW0J1ZmZlcl0sXG4gICAgcHViU2NyaXB0OiBwdWJTY3JpcHQsXG4gIH07XG59O1xuXG5jb25zdCBwYXJzZVRhcHJvb3RTY3JpcHRQYXRoUHViU2NyaXB0OiBQdWJTY3JpcHRQYXJzZXI8UGFyc2VkUHViU2NyaXB0VGFwcm9vdFNjcmlwdFBhdGg+ID0gKHB1YlNjcmlwdCwgc2NyaXB0VHlwZSkgPT4ge1xuICBpZiAoXG4gICAgc2NyaXB0VHlwZSA9PT0gJ3Ayc2gnIHx8XG4gICAgc2NyaXB0VHlwZSA9PT0gJ3Ayd3NoJyB8fFxuICAgIHNjcmlwdFR5cGUgPT09ICdwMnNoUDJ3c2gnIHx8XG4gICAgc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnIHx8XG4gICAgc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc2NyaXB0IHR5cGUnKTtcbiAgfVxuICBjb25zdCBtYXRjaCA9IG1hdGNoU2NyaXB0KFxuICAgIFtwdWJTY3JpcHRdLFxuICAgIFt7ICc6c2NyaXB0JzogWyc6cHVia2V5LXhvbmx5JywgJ09QX0NIRUNLU0lHVkVSSUZZJywgJzpwdWJrZXkteG9ubHknLCAnT1BfQ0hFQ0tTSUcnXSB9XVxuICApO1xuICBpZiAobWF0Y2ggaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgcmV0dXJuIG1hdGNoO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzY3JpcHRUeXBlLFxuICAgIHB1YlNjcmlwdDogbWF0Y2hbJzpzY3JpcHQnXVswXS5idWZmZXIsXG4gICAgcHVibGljS2V5czogbWF0Y2hbJzpzY3JpcHQnXVswXS5tYXRjaFsnOnB1YmtleS14b25seSddIGFzIFtCdWZmZXIsIEJ1ZmZlcl0sXG4gIH07XG59O1xuXG4vKipcbiAqIEByZXR1cm4gcHViU2NyaXB0IChzY3JpcHRQdWJLZXkvcmVkZWVtU2NyaXB0L3dpdG5lc3NTY3JpcHQpIGlzIHBhcnNlZC5cbiAqIFAyU0ggPT4gc2NyaXB0VHlwZSwgcHViU2NyaXB0IChyZWRlZW1TY3JpcHQpLCByZWRlZW1TY3JpcHQsIHB1YmxpYyBrZXlzXG4gKiBQVzJTSCA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQgKHdpdG5lc3NTY3JpcHQpLCB3aXRuZXNzU2NyaXB0LCBwdWJsaWMga2V5cy5cbiAqIFAyU0gtUFcyU0ggPT4gc2NyaXB0VHlwZSwgcHViU2NyaXB0ICh3aXRuZXNzU2NyaXB0KSwgd2l0bmVzc1NjcmlwdCwgcHVibGljIGtleXMuXG4gKiB0YXByb290U2NyaXB0UGF0aFNwZW5kIChQMlRSIGFuZCBQMlRSTVVJU0cyIHNjcmlwdCBwYXRoKSA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQsIHB1YiBrZXlzLlxuICogdGFwcm9vdEtleVBhdGhTcGVuZCAoUDJUUk1VSVNHMiBrZXkgcGF0aCkgPT4gc2NyaXB0VHlwZSwgcHViU2NyaXB0ICgzNC1ieXRlIG91dHB1dCBzY3JpcHQpLCBwdWIga2V5ICh0YXBPdXRwdXRLZXkpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQdWJTY3JpcHQyT2YzKFxuICBpbnB1dFB1YlNjcmlwdDogSW5wdXRQdWJTY3JpcHQsXG4gIHNjcmlwdFR5cGU6ICd0YXByb290S2V5UGF0aFNwZW5kJ1xuKTogUGFyc2VkUHViU2NyaXB0VGFwcm9vdEtleVBhdGg7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQdWJTY3JpcHQyT2YzKFxuICBpbnB1dFB1YlNjcmlwdDogSW5wdXRQdWJTY3JpcHQsXG4gIHNjcmlwdFR5cGU6ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJ1xuKTogUGFyc2VkUHViU2NyaXB0VGFwcm9vdFNjcmlwdFBhdGg7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQdWJTY3JpcHQyT2YzKFxuICBpbnB1dFB1YlNjcmlwdDogSW5wdXRQdWJTY3JpcHQsXG4gIHNjcmlwdFR5cGU6ICdwMnNoJyB8ICdwMnNoUDJ3c2gnIHwgJ3Ayd3NoJ1xuKTogUGFyc2VkUHViU2NyaXB0UDJtcztcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVB1YlNjcmlwdDJPZjMoXG4gIGlucHV0UHViU2NyaXB0OiBJbnB1dFB1YlNjcmlwdCxcbiAgc2NyaXB0VHlwZTogUGFyc2VkU2NyaXB0VHlwZTJPZjNcbik6IFBhcnNlZFB1YlNjcmlwdFAybXMgfCBQYXJzZWRQdWJTY3JpcHRUYXByb290O1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHViU2NyaXB0Mk9mMyhcbiAgaW5wdXRQdWJTY3JpcHQ6IElucHV0UHViU2NyaXB0LFxuICBzY3JpcHRUeXBlOiBQYXJzZWRTY3JpcHRUeXBlMk9mM1xuKTogUGFyc2VkUHViU2NyaXB0UDJtcyB8IFBhcnNlZFB1YlNjcmlwdFRhcHJvb3Qge1xuICBjb25zdCByZXN1bHQgPVxuICAgIHNjcmlwdFR5cGUgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJ1xuICAgICAgPyBwYXJzZVRhcHJvb3RLZXlQYXRoUHViU2NyaXB0KGlucHV0UHViU2NyaXB0LCBzY3JpcHRUeXBlKVxuICAgICAgOiBzY3JpcHRUeXBlID09PSAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCdcbiAgICAgID8gcGFyc2VUYXByb290U2NyaXB0UGF0aFB1YlNjcmlwdChpbnB1dFB1YlNjcmlwdCwgc2NyaXB0VHlwZSlcbiAgICAgIDogcGFyc2VQMm1zUHViU2NyaXB0KGlucHV0UHViU2NyaXB0LCBzY3JpcHRUeXBlKTtcblxuICBpZiAocmVzdWx0IGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihyZXN1bHQubWVzc2FnZSk7XG4gIH1cblxuICBpZiAoXG4gICAgKHJlc3VsdC5zY3JpcHRUeXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgJiYgcmVzdWx0LnB1YmxpY0tleXMubGVuZ3RoICE9PSAxKSB8fFxuICAgIChyZXN1bHQuc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnICYmIHJlc3VsdC5wdWJsaWNLZXlzLmxlbmd0aCAhPT0gMikgfHxcbiAgICAoaXNTY3JpcHRUeXBlMk9mMyhyZXN1bHQuc2NyaXB0VHlwZSkgJiYgcmVzdWx0LnB1YmxpY0tleXMubGVuZ3RoICE9PSAzKVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgcHVia2V5IGNvdW50Jyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEByZXR1cm4gcHViU2NyaXB0IChzY3JpcHRQdWJLZXkvcmVkZWVtU2NyaXB0L3dpdG5lc3NTY3JpcHQpIGlzIHBhcnNlZC5cbiAqIFAyU0ggPT4gc2NyaXB0VHlwZSwgcHViU2NyaXB0IChyZWRlZW1TY3JpcHQpLCByZWRlZW1TY3JpcHQsIHB1YmxpYyBrZXlzXG4gKiBQVzJTSCA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQgKHdpdG5lc3NTY3JpcHQpLCB3aXRuZXNzU2NyaXB0LCBwdWJsaWMga2V5cy5cbiAqIFAyU0gtUFcyU0ggPT4gc2NyaXB0VHlwZSwgcHViU2NyaXB0ICh3aXRuZXNzU2NyaXB0KSwgd2l0bmVzc1NjcmlwdCwgcHVibGljIGtleXMuXG4gKiB0YXByb290U2NyaXB0UGF0aFNwZW5kIChQMlRSIGFuZCBQMlRSTVVJU0cyIHNjcmlwdCBwYXRoKSA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQsIHB1YiBrZXlzLlxuICogdGFwcm9vdEtleVBhdGhTcGVuZCAoUDJUUk1VSVNHMiBrZXkgcGF0aCkgPT4gc2NyaXB0VHlwZSwgcHViU2NyaXB0ICgzNC1ieXRlIG91dHB1dCBzY3JpcHQpLCBwdWIga2V5ICh0YXBPdXRwdXRLZXkpLlxuICogUDJTSC1QMlBLID0+IHNjcmlwdFR5cGUsIHB1YlNjcmlwdCwgcHViIGtleSwgcmVkZWVtU2NyaXB0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQdWJTY3JpcHQoXG4gIGlucHV0UHViU2NyaXB0OiBJbnB1dFB1YlNjcmlwdCxcbiAgc2NyaXB0VHlwZTogJ3RhcHJvb3RLZXlQYXRoU3BlbmQnXG4pOiBQYXJzZWRQdWJTY3JpcHRUYXByb290S2V5UGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVB1YlNjcmlwdChcbiAgaW5wdXRQdWJTY3JpcHQ6IElucHV0UHViU2NyaXB0LFxuICBzY3JpcHRUeXBlOiAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCdcbik6IFBhcnNlZFB1YlNjcmlwdFRhcHJvb3RTY3JpcHRQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHViU2NyaXB0KGlucHV0UHViU2NyaXB0OiBJbnB1dFB1YlNjcmlwdCwgc2NyaXB0VHlwZTogJ3Ayc2hQMnBrJyk6IFBhcnNlZFB1YlNjcmlwdFAyc2hQMnBrO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHViU2NyaXB0KFxuICBpbnB1dFB1YlNjcmlwdDogSW5wdXRQdWJTY3JpcHQsXG4gIHNjcmlwdFR5cGU6ICdwMnNoJyB8ICdwMnNoUDJ3c2gnIHwgJ3Ayd3NoJ1xuKTogUGFyc2VkUHViU2NyaXB0UDJtcztcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVB1YlNjcmlwdChcbiAgaW5wdXRQdWJTY3JpcHQ6IElucHV0UHViU2NyaXB0LFxuICBzY3JpcHRUeXBlOiBQYXJzZWRTY3JpcHRUeXBlXG4pOiBQYXJzZWRQdWJTY3JpcHRQMm1zIHwgUGFyc2VkUHViU2NyaXB0VGFwcm9vdCB8IFBhcnNlZFB1YlNjcmlwdFAyc2hQMnBrO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHViU2NyaXB0KFxuICBpbnB1dFB1YlNjcmlwdDogSW5wdXRQdWJTY3JpcHQsXG4gIHNjcmlwdFR5cGU6IFBhcnNlZFNjcmlwdFR5cGVcbik6IFBhcnNlZFB1YlNjcmlwdFAybXMgfCBQYXJzZWRQdWJTY3JpcHRUYXByb290IHwgUGFyc2VkUHViU2NyaXB0UDJzaFAycGsge1xuICBjb25zdCByZXN1bHQgPVxuICAgIHNjcmlwdFR5cGUgPT09ICdwMnNoUDJwaydcbiAgICAgID8gcGFyc2VQMnNoUDJwa1B1YlNjcmlwdChpbnB1dFB1YlNjcmlwdCwgc2NyaXB0VHlwZSlcbiAgICAgIDogcGFyc2VQdWJTY3JpcHQyT2YzKGlucHV0UHViU2NyaXB0LCBzY3JpcHRUeXBlKTtcblxuICBpZiAocmVzdWx0IGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihyZXN1bHQubWVzc2FnZSk7XG4gIH1cblxuICBpZiAocmVzdWx0LnNjcmlwdFR5cGUgPT09ICdwMnNoUDJwaycgJiYgcmVzdWx0LnB1YmxpY0tleXMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHB1YmtleSBjb3VudCcpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdfQ==
428
+ function getChainAndIndexFromPath(path) {
429
+ const parts = path.split('/');
430
+ if (parts.length <= 2) {
431
+ throw new Error(`invalid path "${path}"`);
432
+ }
433
+ const chain = Number(parts[parts.length - 2]);
434
+ const index = Number(parts[parts.length - 1]);
435
+ if (isNaN(chain) || isNaN(index)) {
436
+ throw new Error(`Could not parse chain and index into numbers from path ${path}`);
437
+ }
438
+ if (chain < 0 || index < 0) {
439
+ throw new Error(`chain and index must be non-negative`);
440
+ }
441
+ return { chain, index };
442
+ }
443
+ exports.getChainAndIndexFromPath = getChainAndIndexFromPath;
444
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VJbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iaXRnby9wYXJzZUlucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDRCQUE0QjtBQUM1Qix1Q0FBdUM7QUFDdkMsaURBQTJEO0FBRTNELG1DQUFtQztBQUNuQyxtREFBbUQ7QUFFbkQsU0FBZ0Isc0JBQXNCLENBQUMsQ0FBa0I7SUFDdkQsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3RCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7S0FDdkI7SUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakIsQ0FBQztBQUxELHdEQUtDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxZQUFvQjtJQUNyRCxzRkFBc0Y7SUFDdEYsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxZQUFZLENBQUMsTUFBTSxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN0RyxDQUFDO0FBSEQsZ0RBR0M7QUFFRDs7R0FFRztBQUNILFNBQWdCLHdCQUF3QixDQUFDLFlBQW9CO0lBQzNELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFO1FBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztLQUNoRDtJQUNELElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUU7UUFDOUIsT0FBTyxDQUFDLENBQUM7S0FDVjtJQUNELElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUU7UUFDOUIsT0FBTyxDQUFDLENBQUM7S0FDVjtJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBWEQsNERBV0M7QUFFRDs7R0FF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SSxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDdEUsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0tBQzVDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQWxCRCx3Q0FrQkM7QUFFRCxTQUFnQix3QkFBd0IsQ0FBQyxJQUFZO0lBQ25ELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUIsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtRQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixJQUFJLEdBQUcsQ0FBQyxDQUFDO0tBQzNDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsMERBQTBELElBQUksRUFBRSxDQUFDLENBQUM7S0FDbkY7SUFDRCxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7S0FDekQ7SUFFRCxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQzFCLENBQUM7QUFmRCw0REFlQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBuby1yZWRlY2xhcmU6IDAgKi9cbmltcG9ydCAqIGFzIG9wY29kZXMgZnJvbSAnYml0Y29pbi1vcHMnO1xuaW1wb3J0IHsgVHhJbnB1dCwgc2NyaXB0IGFzIGJzY3JpcHQgfSBmcm9tICdiaXRjb2luanMtbGliJztcblxuaW1wb3J0IHsgaXNUcmlwbGUgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGlzU2NyaXB0VHlwZTJPZjMgfSBmcm9tICcuL291dHB1dFNjcmlwdHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQbGFjZWhvbGRlclNpZ25hdHVyZSh2OiBudW1iZXIgfCBCdWZmZXIpOiBib29sZWFuIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2KSkge1xuICAgIHJldHVybiB2Lmxlbmd0aCA9PT0gMDtcbiAgfVxuICByZXR1cm4gdiA9PT0gMDtcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHRydWUgaWZmIFAyVFIgc2NyaXB0IHBhdGgncyBjb250cm9sIGJsb2NrIG1hdGNoZXMgQml0R28ncyBuZWVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkQ29udHJvbEJvY2soY29udHJvbEJsb2NrOiBCdWZmZXIpOiBib29sZWFuIHtcbiAgLy8gVGhlIGxhc3Qgc3RhY2sgZWxlbWVudCBpcyBjYWxsZWQgdGhlIGNvbnRyb2wgYmxvY2sgYywgYW5kIG11c3QgaGF2ZSBsZW5ndGggMzMgKyAzMm1cbiAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihjb250cm9sQmxvY2spICYmIDMzIDw9IGNvbnRyb2xCbG9jay5sZW5ndGggJiYgY29udHJvbEJsb2NrLmxlbmd0aCAlIDMyID09PSAxO1xufVxuXG4vKipcbiAqIEByZXR1cm4gc2NyaXB0IHBhdGggbGV2ZWwgZm9yIFAyVFIgY29udHJvbCBibG9ja1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlU2NyaXB0UGF0aExldmVsKGNvbnRyb2xCbG9jazogQnVmZmVyKTogbnVtYmVyIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoY29udHJvbEJsb2NrKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb250cm9sIGJsb2NrIHR5cGUuJyk7XG4gIH1cbiAgaWYgKGNvbnRyb2xCbG9jay5sZW5ndGggPT09IDY1KSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgaWYgKGNvbnRyb2xCbG9jay5sZW5ndGggPT09IDk3KSB7XG4gICAgcmV0dXJuIDI7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIGNvbnRyb2wgYmxvY2sgbGVuZ3RoLicpO1xufVxuXG4vKipcbiAqIEByZXR1cm4gbGVhZiB2ZXJzaW9uIGZvciBQMlRSIGNvbnRyb2wgYmxvY2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMZWFmVmVyc2lvbihjb250cm9sQmxvY2s6IEJ1ZmZlcik6IG51bWJlciB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoY29udHJvbEJsb2NrKSAmJiBjb250cm9sQmxvY2subGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBjb250cm9sQmxvY2tbMF0gJiAweGZlO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCBsZWFmVmVyc2lvbi4nKTtcbn1cblxuZXhwb3J0IHR5cGUgUGFyc2VkU2NyaXB0VHlwZTJPZjMgPVxuICB8ICdwMnNoJ1xuICB8ICdwMnNoUDJ3c2gnXG4gIHwgJ3Ayd3NoJ1xuICB8ICd0YXByb290S2V5UGF0aFNwZW5kJyAvLyBvbmx5IGltcGxlbWVudGVkIGZvciBwMnRyTXVzaWcyXG4gIHwgJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnOyAvLyBjYW4gYmUgZm9yIGVpdGhlciBwMnRyIG9yIHAydHJNdXNpZzIgb3V0cHV0IHNjcmlwdFxuXG5leHBvcnQgdHlwZSBQYXJzZWRTY3JpcHRUeXBlID0gUGFyc2VkU2NyaXB0VHlwZTJPZjMgfCAncDJzaFAycGsnO1xuXG5leHBvcnQgdHlwZSBQYXJzZWRQdWJTY3JpcHQgPSB7XG4gIHNjcmlwdFR5cGU6IFBhcnNlZFNjcmlwdFR5cGU7XG59O1xuXG5leHBvcnQgdHlwZSBQYXJzZWRTaWduYXR1cmVTY3JpcHQgPSB7XG4gIHNjcmlwdFR5cGU6IFBhcnNlZFNjcmlwdFR5cGU7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAyc2hQMnBrIGV4dGVuZHMgUGFyc2VkU2lnbmF0dXJlU2NyaXB0IHtcbiAgc2NyaXB0VHlwZTogJ3Ayc2hQMnBrJztcbiAgcHVibGljS2V5czogW0J1ZmZlcl07XG4gIHNpZ25hdHVyZXM6IFtCdWZmZXJdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFB1YlNjcmlwdFRhcHJvb3RLZXlQYXRoIGV4dGVuZHMgUGFyc2VkUHViU2NyaXB0IHtcbiAgc2NyaXB0VHlwZTogJ3RhcHJvb3RLZXlQYXRoU3BlbmQnO1xuICAvLyB4LW9ubHkgdGFwT3V0cHV0S2V5XG4gIHB1YmxpY0tleXM6IFtCdWZmZXJdO1xuICBwdWJTY3JpcHQ6IEJ1ZmZlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRQdWJTY3JpcHRUYXByb290U2NyaXB0UGF0aCBleHRlbmRzIFBhcnNlZFB1YlNjcmlwdCB7XG4gIHNjcmlwdFR5cGU6ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJztcbiAgcHVibGljS2V5czogW0J1ZmZlciwgQnVmZmVyXTtcbiAgcHViU2NyaXB0OiBCdWZmZXI7XG59XG5cbmV4cG9ydCB0eXBlIFBhcnNlZFB1YlNjcmlwdFRhcHJvb3QgPSBQYXJzZWRQdWJTY3JpcHRUYXByb290S2V5UGF0aCB8IFBhcnNlZFB1YlNjcmlwdFRhcHJvb3RTY3JpcHRQYXRoO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFB1YlNjcmlwdFAybXMgZXh0ZW5kcyBQYXJzZWRQdWJTY3JpcHQge1xuICBzY3JpcHRUeXBlOiAncDJzaCcgfCAncDJzaFAyd3NoJyB8ICdwMndzaCc7XG4gIHB1YmxpY0tleXM6IFtCdWZmZXIsIEJ1ZmZlciwgQnVmZmVyXTtcbiAgcHViU2NyaXB0OiBCdWZmZXI7XG4gIHJlZGVlbVNjcmlwdDogQnVmZmVyIHwgdW5kZWZpbmVkO1xuICB3aXRuZXNzU2NyaXB0OiBCdWZmZXIgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkUHViU2NyaXB0UDJzaFAycGsgZXh0ZW5kcyBQYXJzZWRQdWJTY3JpcHQge1xuICBzY3JpcHRUeXBlOiAncDJzaFAycGsnO1xuICBwdWJsaWNLZXlzOiBbQnVmZmVyXTtcbiAgcHViU2NyaXB0OiBCdWZmZXI7XG4gIHJlZGVlbVNjcmlwdDogQnVmZmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAybXMgZXh0ZW5kcyBQYXJzZWRTaWduYXR1cmVTY3JpcHQge1xuICBzY3JpcHRUeXBlOiAncDJzaCcgfCAncDJzaFAyd3NoJyB8ICdwMndzaCc7XG4gIHB1YmxpY0tleXM6IFtCdWZmZXIsIEJ1ZmZlciwgQnVmZmVyXTtcbiAgc2lnbmF0dXJlczpcbiAgICB8IFtCdWZmZXIsIEJ1ZmZlcl0gLy8gZnVsbHktc2lnbmVkIHRyYW5zYWN0aW9ucyB3aXRoIHNpZ25hdHVyZXNcbiAgICAvKiBQYXJ0aWFsbHkgc2lnbmVkIHRyYW5zYWN0aW9ucyB3aXRoIHBsYWNlaG9sZGVyIHNpZ25hdHVyZXMuXG4gICAgICAgRm9yIHAyc2gsIHRoZSBwbGFjZWhvbGRlciBpcyBPUF8wIChudW1iZXIgMCkgKi9cbiAgICB8IFtCdWZmZXIgfCAwLCBCdWZmZXIgfCAwLCBCdWZmZXIgfCAwXTtcbiAgcHViU2NyaXB0OiBCdWZmZXI7XG4gIHJlZGVlbVNjcmlwdDogQnVmZmVyIHwgdW5kZWZpbmVkO1xuICB3aXRuZXNzU2NyaXB0OiBCdWZmZXIgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogS2V5cGF0aCBzcGVuZHMgb25seSBoYXZlIGEgc2luZ2xlIHNpZ25hdHVyZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3RLZXlQYXRoIGV4dGVuZHMgUGFyc2VkU2lnbmF0dXJlU2NyaXB0IHtcbiAgc2NyaXB0VHlwZTogJ3RhcHJvb3RLZXlQYXRoU3BlbmQnO1xuICBzaWduYXR1cmVzOiBbQnVmZmVyXTtcbn1cblxuLyoqXG4gKiBUYXByb290IFNjcmlwdHBhdGggc3BlbmRzIGFyZSBtb3JlIHNpbWlsYXIgdG8gcmVndWxhciBwMm1zIHNwZW5kcyBhbmQgaGF2ZSB0d28gcHVibGljIGtleXMgYW5kXG4gKiB0d28gc2lnbmF0dXJlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3RTY3JpcHRQYXRoIGV4dGVuZHMgUGFyc2VkU2lnbmF0dXJlU2NyaXB0IHtcbiAgc2NyaXB0VHlwZTogJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnO1xuICBwdWJsaWNLZXlzOiBbQnVmZmVyLCBCdWZmZXJdO1xuICBzaWduYXR1cmVzOiBbQnVmZmVyLCBCdWZmZXJdO1xuICBjb250cm9sQmxvY2s6IEJ1ZmZlcjtcbiAgbGVhZlZlcnNpb246IG51bWJlcjtcbiAgLyoqIEluZGljYXRlcyB0aGUgbGV2ZWwgaW5zaWRlIHRoZSB0YXB0cmVlLiAqL1xuICBzY3JpcHRQYXRoTGV2ZWw6IG51bWJlcjtcbiAgcHViU2NyaXB0OiBCdWZmZXI7XG59XG5cbmV4cG9ydCB0eXBlIFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3QgPSBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290S2V5UGF0aCB8IFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3RTY3JpcHRQYXRoO1xuXG50eXBlIERlY29tcGlsZWRTY3JpcHQgPSBBcnJheTxCdWZmZXIgfCBudW1iZXI+O1xuXG4vKipcbiAqIFN0YXRpYyBzY3JpcHQgZWxlbWVudHNcbiAqL1xudHlwZSBTY3JpcHRQYXR0ZXJuQ29uc3RhbnQgPVxuICB8ICdPUF8wJ1xuICB8ICdPUF8xJ1xuICB8ICdPUF8yJ1xuICB8ICdPUF8zJ1xuICB8ICdPUF9DSEVDS01VTFRJU0lHJ1xuICB8ICdPUF9DSEVDS1NJRydcbiAgfCAnT1BfQ0hFQ0tTSUdWRVJJRlknO1xuXG4vKipcbiAqIFNjcmlwdCBlbGVtZW50cyB0aGF0IGNhbiBiZSBjYXB0dXJlZFxuICovXG50eXBlIFNjcmlwdFBhdHRlcm5DYXB0dXJlID1cbiAgfCAnOnB1YmtleSdcbiAgfCAnOnB1YmtleS14b25seSdcbiAgfCAnOnNpZ25hdHVyZSdcbiAgfCAnOmNvbnRyb2wtYmxvY2snXG4gIHwgeyAnOnNjcmlwdCc6IFNjcmlwdFBhdHRlcm5FbGVtZW50W10gfTtcblxudHlwZSBTY3JpcHRQYXR0ZXJuRWxlbWVudCA9IFNjcmlwdFBhdHRlcm5Db25zdGFudCB8IFNjcmlwdFBhdHRlcm5DYXB0dXJlO1xuXG4vKipcbiAqIFJlc3VsdCBmb3IgYSBzdWNjZXNzZnVsIHNjcmlwdCBtYXRjaFxuICovXG50eXBlIE1hdGNoUmVzdWx0ID0ge1xuICAnOnB1YmtleSc6IEJ1ZmZlcltdO1xuICAnOnB1YmtleS14b25seSc6IEJ1ZmZlcltdO1xuICAnOmNvbnRyb2wtYmxvY2snOiBCdWZmZXJbXTtcbiAgJzpzaWduYXR1cmUnOiAoQnVmZmVyIHwgMClbXTtcbiAgJzpzY3JpcHQnOiB7IGJ1ZmZlcjogQnVmZmVyOyBtYXRjaDogTWF0Y2hSZXN1bHQgfVtdO1xufTtcblxuZnVuY3Rpb24gZW1wdHlNYXRjaFJlc3VsdCgpOiBNYXRjaFJlc3VsdCB7XG4gIHJldHVybiB7XG4gICAgJzpwdWJrZXknOiBbXSxcbiAgICAnOnB1YmtleS14b25seSc6IFtdLFxuICAgICc6Y29udHJvbC1ibG9jayc6IFtdLFxuICAgICc6c2lnbmF0dXJlJzogW10sXG4gICAgJzpzY3JpcHQnOiBbXSxcbiAgfTtcbn1cblxuY2xhc3MgTWF0Y2hFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLy8gdGhpcyBwcm9wZXJ0eSBpcyByZXF1aXJlZCB0byBwcm9oaWJpdCBgcmV0dXJuIG5ldyBFcnJvcigpYCB3aGVuIHRoZSByZXR1cm4gdHlwZSBkZW1hbmRzIGBNYXRjaEVycm9yYFxuICBfX3R5cGUgPSAnTWF0Y2hFcnJvcic7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICB9XG5cbiAgc3RhdGljIGZvclBhdHRlcm5FbGVtZW50KHA6IFNjcmlwdFBhdHRlcm5FbGVtZW50KTogTWF0Y2hFcnJvciB7XG4gICAgaWYgKHR5cGVvZiBwID09PSAnb2JqZWN0JyAmJiAnOnNjcmlwdCcgaW4gcCkge1xuICAgICAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBlcnJvciBtYXRjaGluZyBuZXN0ZWQgc2NyaXB0YCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgZXJyb3IgbWF0Y2hpbmcgJHtwfWApO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHNjcmlwdFxuICogQHBhcmFtIHBhdHRlcm5cbiAqIEByZXR1cm4gTWF0Y2hSZXN1bHQgaWYgc2NyaXB0IG1hdGNoZXMgcGF0dGVybi4gVGhlIHJlc3VsdCB3aWxsIGNvbnRhaW4gdGhlIG1hdGNoZWQgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBtYXRjaFNjcmlwdChzY3JpcHQ6IERlY29tcGlsZWRTY3JpcHQsIHBhdHRlcm46IFNjcmlwdFBhdHRlcm5FbGVtZW50W10pOiBNYXRjaFJlc3VsdCB8IE1hdGNoRXJyb3Ige1xuICAvKipcbiAgICogTWF0Y2ggYSBzaW5nbGUgc2NyaXB0IGVsZW1lbnQgd2l0aCBhIFNjcmlwdFBhdHRlcm5FbGVtZW50XG4gICAqL1xuICBmdW5jdGlvbiBtYXRjaEVsZW1lbnQoZTogQnVmZmVyIHwgbnVtYmVyLCBwOiBTY3JpcHRQYXR0ZXJuRWxlbWVudCk6IE1hdGNoUmVzdWx0IHwgYm9vbGVhbiB7XG4gICAgc3dpdGNoIChwKSB7XG4gICAgICBjYXNlICdPUF8wJzpcbiAgICAgICAgcmV0dXJuIGUgPT09IG9wY29kZXMuT1BfMCB8fCAoQnVmZmVyLmlzQnVmZmVyKGUpICYmIGUubGVuZ3RoID09PSAwKTtcbiAgICAgIGNhc2UgJ09QXzEnOlxuICAgICAgY2FzZSAnT1BfMic6XG4gICAgICBjYXNlICdPUF8zJzpcbiAgICAgIGNhc2UgJ09QX0NIRUNLTVVMVElTSUcnOlxuICAgICAgY2FzZSAnT1BfQ0hFQ0tTSUcnOlxuICAgICAgY2FzZSAnT1BfQ0hFQ0tTSUdWRVJJRlknOlxuICAgICAgICByZXR1cm4gZSA9PT0gb3Bjb2Rlc1twXTtcbiAgICAgIGNhc2UgJzpwdWJrZXknOlxuICAgICAgICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGUpICYmIChlLmxlbmd0aCA9PT0gMzMgfHwgZS5sZW5ndGggPT09IDY1KTtcbiAgICAgIGNhc2UgJzpwdWJrZXkteG9ubHknOlxuICAgICAgICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGUpICYmIGUubGVuZ3RoID09PSAzMjtcbiAgICAgIGNhc2UgJzpzaWduYXR1cmUnOlxuICAgICAgICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGUpIHx8IGlzUGxhY2Vob2xkZXJTaWduYXR1cmUoZSk7XG4gICAgICBjYXNlICc6Y29udHJvbC1ibG9jayc6XG4gICAgICAgIHJldHVybiBCdWZmZXIuaXNCdWZmZXIoZSkgJiYgaXNWYWxpZENvbnRyb2xCb2NrKGUpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIHBhdHRlcm4gZWxlbWVudCAke3B9YCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHNjcmlwdC5sZW5ndGggIT09IHBhdHRlcm4ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBsZW5ndGggbWlzbWF0Y2hgKTtcbiAgfVxuXG4gIC8vIEdvIG92ZXIgZWFjaCBwYXR0ZXJuIGVsZW1lbnQuXG4gIC8vIENvbGxlY3QgY2FwdHVyZXMgaW50byBhIHJlc3VsdCBvYmplY3QuXG4gIHJldHVybiBwYXR0ZXJuLnJlZHVjZSgob2JqOiBNYXRjaFJlc3VsdCB8IE1hdGNoRXJyb3IsIHAsIGkpOiBNYXRjaFJlc3VsdCB8IE1hdGNoRXJyb3IgPT4ge1xuICAgIC8vIGlmIHdlIGhhZCBhIHByZXZpb3VzIG1pc21hdGNoLCBzaG9ydC1jaXJjdWl0XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgY29uc3QgZSA9IHNjcmlwdFtpXTtcblxuICAgIC8vIGZvciAnOnNjcmlwdCcgcGF0dGVybiBlbGVtZW50cywgZGVjb21waWxlIHNjcmlwdCBlbGVtZW50IGFuZCByZWN1cnNlXG4gICAgaWYgKHR5cGVvZiBwID09PSAnb2JqZWN0JyAmJiAnOnNjcmlwdCcgaW4gcCkge1xuICAgICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoZSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBleHBlY3RlZCBidWZmZXIgZm9yIDpzY3JpcHRgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRlYyA9IGJzY3JpcHQuZGVjb21waWxlKGUpO1xuICAgICAgaWYgKCFkZWMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBlcnJvciBkZWNvbXBpbGluZyBuZXN0ZWQgc2NyaXB0YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXRjaCA9IG1hdGNoU2NyaXB0KGRlYywgcFsnOnNjcmlwdCddKTtcbiAgICAgIGlmIChtYXRjaCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgfVxuICAgICAgb2JqWyc6c2NyaXB0J10ucHVzaCh7XG4gICAgICAgIGJ1ZmZlcjogZSxcbiAgICAgICAgbWF0Y2gsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2ggPSBtYXRjaEVsZW1lbnQoZSwgcCk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgcmV0dXJuIE1hdGNoRXJyb3IuZm9yUGF0dGVybkVsZW1lbnQocCk7XG4gICAgfVxuXG4gICAgLy8gaWYgcGF0dGVybiBlbGVtZW50IGlzIGEgY2FwdHVyZSwgYWRkIGl0IHRvIHRoZSByZXN1bHQgb2JqXG4gICAgaWYgKHAgPT09ICc6c2lnbmF0dXJlJyAmJiBlID09PSAwKSB7XG4gICAgICBvYmpbcF0ucHVzaChlKTtcbiAgICB9IGVsc2UgaWYgKHAgaW4gb2JqKSB7XG4gICAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgY2FwdHVyZSB2YWx1ZWApO1xuICAgICAgfVxuICAgICAgb2JqW3BdLnB1c2goZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbiAgfSwgZW1wdHlNYXRjaFJlc3VsdCgpKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gc2NyaXB0XG4gKiBAcGFyYW0gcGF0dGVybnNcbiAqIEByZXR1cm4gZmlyc3QgbWF0Y2hcbiAqL1xuZnVuY3Rpb24gbWF0Y2hTY3JpcHRTb21lKHNjcmlwdDogRGVjb21waWxlZFNjcmlwdCwgcGF0dGVybnM6IFNjcmlwdFBhdHRlcm5FbGVtZW50W11bXSk6IE1hdGNoUmVzdWx0IHwgTWF0Y2hFcnJvciB7XG4gIGZvciAoY29uc3QgcCBvZiBwYXR0ZXJucykge1xuICAgIGNvbnN0IG0gPSBtYXRjaFNjcmlwdChzY3JpcHQsIHApO1xuICAgIGlmIChtIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHJldHVybiBtO1xuICB9XG4gIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgbm8gbWF0Y2ggZm9yIHNjcmlwdGApO1xufVxuXG50eXBlIElucHV0U2NyaXB0czxUU2NyaXB0LCBUV2l0bmVzcz4gPSB7XG4gIHNjcmlwdDogVFNjcmlwdDtcbiAgd2l0bmVzczogVFdpdG5lc3M7XG59O1xuXG50eXBlIElucHV0U2NyaXB0c0xlZ2FjeSA9IElucHV0U2NyaXB0czxEZWNvbXBpbGVkU2NyaXB0LCBudWxsPjtcbnR5cGUgSW5wdXRTY3JpcHRzV3JhcHBlZFNlZ3dpdCA9IElucHV0U2NyaXB0czxEZWNvbXBpbGVkU2NyaXB0LCBCdWZmZXJbXT47XG50eXBlIElucHV0U2NyaXB0c05hdGl2ZVNlZ3dpdCA9IElucHV0U2NyaXB0czxudWxsLCBCdWZmZXJbXT47XG5cbnR5cGUgSW5wdXRTY3JpcHRzVW5rbm93biA9IElucHV0U2NyaXB0czxEZWNvbXBpbGVkU2NyaXB0IHwgbnVsbCwgQnVmZmVyW10gfCBudWxsPjtcblxudHlwZSBJbnB1dFBhcnNlcjxUIGV4dGVuZHMgUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJzaFAycGsgfCBQYXJzZWRTaWduYXR1cmVTY3JpcHRQMm1zIHwgUGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdD4gPSAoXG4gIHA6IElucHV0U2NyaXB0c1Vua25vd25cbikgPT4gVCB8IE1hdGNoRXJyb3I7XG5cbmV4cG9ydCB0eXBlIElucHV0UHViU2NyaXB0ID0gQnVmZmVyO1xuXG50eXBlIFB1YlNjcmlwdFBhcnNlcjxUIGV4dGVuZHMgUGFyc2VkUHViU2NyaXB0VGFwcm9vdCB8IFBhcnNlZFB1YlNjcmlwdFAybXMgfCBQYXJzZWRQdWJTY3JpcHRQMnNoUDJwaz4gPSAoXG4gIHA6IElucHV0UHViU2NyaXB0LFxuICB0OiBQYXJzZWRTY3JpcHRUeXBlXG4pID0+IFQgfCBNYXRjaEVycm9yO1xuXG5mdW5jdGlvbiBpc0xlZ2FjeShwOiBJbnB1dFNjcmlwdHNVbmtub3duKTogcCBpcyBJbnB1dFNjcmlwdHNMZWdhY3kge1xuICByZXR1cm4gQm9vbGVhbihwLnNjcmlwdCAmJiAhcC53aXRuZXNzKTtcbn1cblxuZnVuY3Rpb24gaXNXcmFwcGVkU2Vnd2l0KHA6IElucHV0U2NyaXB0c1Vua25vd24pOiBwIGlzIElucHV0U2NyaXB0c1dyYXBwZWRTZWd3aXQge1xuICByZXR1cm4gQm9vbGVhbihwLnNjcmlwdCAmJiBwLndpdG5lc3MpO1xufVxuXG5mdW5jdGlvbiBpc05hdGl2ZVNlZ3dpdChwOiBJbnB1dFNjcmlwdHNVbmtub3duKTogcCBpcyBJbnB1dFNjcmlwdHNOYXRpdmVTZWd3aXQge1xuICByZXR1cm4gQm9vbGVhbighcC5zY3JpcHQgJiYgcC53aXRuZXNzKTtcbn1cblxuY29uc3QgcGFyc2VQMnNoUDJwazogSW5wdXRQYXJzZXI8UGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJzaFAycGs+ID0gKHApID0+IHtcbiAgaWYgKCFpc0xlZ2FjeShwKSkge1xuICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgZXhwZWN0ZWQgbGVnYWN5IGlucHV0YCk7XG4gIH1cbiAgY29uc3QgbWF0Y2ggPSBtYXRjaFNjcmlwdChwLnNjcmlwdCwgWyc6c2lnbmF0dXJlJywgeyAnOnNjcmlwdCc6IFsnOnB1YmtleScsICdPUF9DSEVDS1NJRyddIH1dKTtcbiAgaWYgKG1hdGNoIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgIHJldHVybiBtYXRjaDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHNjcmlwdFR5cGU6ICdwMnNoUDJwaycsXG4gICAgcHVibGljS2V5czogbWF0Y2hbJzpzY3JpcHQnXVswXS5tYXRjaFsnOnB1YmtleSddIGFzIFtCdWZmZXJdLFxuICAgIHNpZ25hdHVyZXM6IG1hdGNoWyc6c2lnbmF0dXJlJ10gYXMgW0J1ZmZlcl0sXG4gIH07XG59O1xuXG5mdW5jdGlvbiBwYXJzZVAybXMoXG4gIGRlY1NjcmlwdDogRGVjb21waWxlZFNjcmlwdCxcbiAgc2NyaXB0VHlwZTogJ3Ayc2gnIHwgJ3Ayc2hQMndzaCcgfCAncDJ3c2gnXG4pOiBQYXJzZWRTaWduYXR1cmVTY3JpcHRQMm1zIHwgTWF0Y2hFcnJvciB7XG4gIGNvbnN0IHBhdHRlcm4yT2YzOiBTY3JpcHRQYXR0ZXJuRWxlbWVudFtdID0gWydPUF8yJywgJzpwdWJrZXknLCAnOnB1YmtleScsICc6cHVia2V5JywgJ09QXzMnLCAnT1BfQ0hFQ0tNVUxUSVNJRyddO1xuXG4gIGNvbnN0IG1hdGNoID0gbWF0Y2hTY3JpcHRTb21lKGRlY1NjcmlwdCwgW1xuICAgIC8qIGZ1bGwtc2lnbmVkLCBubyBwbGFjZWhvbGRlciBzaWduYXR1cmUgKi9cbiAgICBbJ09QXzAnLCAnOnNpZ25hdHVyZScsICc6c2lnbmF0dXJlJywgeyAnOnNjcmlwdCc6IHBhdHRlcm4yT2YzIH1dLFxuICAgIC8qIGhhbGYtc2lnbmVkLCBwbGFjZWhvbGRlciBzaWduYXR1cmVzICovXG4gICAgWydPUF8wJywgJzpzaWduYXR1cmUnLCAnOnNpZ25hdHVyZScsICc6c2lnbmF0dXJlJywgeyAnOnNjcmlwdCc6IHBhdHRlcm4yT2YzIH1dLFxuICBdKTtcbiAgaWYgKG1hdGNoIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgIHJldHVybiBtYXRjaDtcbiAgfVxuXG4gIGNvbnN0IFtyZWRlZW1TY3JpcHRdID0gbWF0Y2hbJzpzY3JpcHQnXTtcblxuICBpZiAoIWlzVHJpcGxlKHJlZGVlbVNjcmlwdC5tYXRjaFsnOnB1YmtleSddKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBwdWJrZXkgY291bnRgKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2NyaXB0VHlwZSxcbiAgICBwdWJsaWNLZXlzOiByZWRlZW1TY3JpcHQubWF0Y2hbJzpwdWJrZXknXSxcbiAgICBwdWJTY3JpcHQ6IHJlZGVlbVNjcmlwdC5idWZmZXIsXG4gICAgc2lnbmF0dXJlczogbWF0Y2hbJzpzaWduYXR1cmUnXSBhcyBQYXJzZWRTaWduYXR1cmVTY3JpcHRQMm1zWydzaWduYXR1cmVzJ10sXG4gICAgcmVkZWVtU2NyaXB0OiBzY3JpcHRUeXBlID09PSAncDJzaCcgPyByZWRlZW1TY3JpcHQuYnVmZmVyIDogdW5kZWZpbmVkLFxuICAgIHdpdG5lc3NTY3JpcHQ6IHNjcmlwdFR5cGUgPT09ICdwMnNoUDJ3c2gnIHx8IHNjcmlwdFR5cGUgPT09ICdwMndzaCcgPyByZWRlZW1TY3JpcHQuYnVmZmVyIDogdW5kZWZpbmVkLFxuICB9O1xufVxuXG5jb25zdCBwYXJzZVAyc2gyT2YzOiBJbnB1dFBhcnNlcjxQYXJzZWRTaWduYXR1cmVTY3JpcHRQMm1zPiA9IChwKSA9PiB7XG4gIGlmICghaXNMZWdhY3kocCkpIHtcbiAgICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYGV4cGVjdGVkIGxlZ2FjeSBpbnB1dGApO1xuICB9XG4gIHJldHVybiBwYXJzZVAybXMocC5zY3JpcHQsICdwMnNoJyk7XG59O1xuXG5jb25zdCBwYXJzZVAyc2hQMndzaDJPZjM6IElucHV0UGFyc2VyPFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAybXM+ID0gKHApID0+IHtcbiAgaWYgKCFpc1dyYXBwZWRTZWd3aXQocCkpIHtcbiAgICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYGV4cGVjdGVkIHdyYXBwZWQgc2Vnd2l0IGlucHV0YCk7XG4gIH1cbiAgcmV0dXJuIHsgLi4ucGFyc2VQMm1zKHAud2l0bmVzcywgJ3Ayc2hQMndzaCcpLCByZWRlZW1TY3JpcHQ6IHAuc2NyaXB0WzBdIGFzIEJ1ZmZlciB9O1xufTtcblxuY29uc3QgcGFyc2VQMndzaDJPZjM6IElucHV0UGFyc2VyPFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAybXM+ID0gKHApID0+IHtcbiAgaWYgKCFpc05hdGl2ZVNlZ3dpdChwKSkge1xuICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgZXhwZWN0ZWQgbmF0aXZlIHNlZ3dpdGApO1xuICB9XG4gIHJldHVybiBwYXJzZVAybXMocC53aXRuZXNzLCAncDJ3c2gnKTtcbn07XG5cbmNvbnN0IHBhcnNlVGFwcm9vdEtleVBhdGgyT2YzOiBJbnB1dFBhcnNlcjxQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290S2V5UGF0aD4gPSAocCkgPT4ge1xuICBpZiAoIWlzTmF0aXZlU2Vnd2l0KHApKSB7XG4gICAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBleHBlY3RlZCBuYXRpdmUgc2Vnd2l0YCk7XG4gIH1cbiAgY29uc3QgbWF0Y2ggPSBtYXRjaFNjcmlwdChwLndpdG5lc3MsIFsnOnNpZ25hdHVyZSddKTtcbiAgaWYgKG1hdGNoIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgIHJldHVybiBtYXRjaDtcbiAgfVxuICBjb25zdCBzaWduYXR1cmVzID0gbWF0Y2hbJzpzaWduYXR1cmUnXSBhcyBbQnVmZmVyXTtcbiAgaWYgKGlzUGxhY2Vob2xkZXJTaWduYXR1cmUoc2lnbmF0dXJlc1swXSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgdGFwcm9vdCBrZXkgcGF0aCBzaWduYXR1cmVgKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHNjcmlwdFR5cGU6ICd0YXByb290S2V5UGF0aFNwZW5kJyxcbiAgICBzaWduYXR1cmVzLFxuICB9O1xufTtcblxuY29uc3QgcGFyc2VUYXByb290U2NyaXB0UGF0aDJPZjM6IElucHV0UGFyc2VyPFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3Q+ID0gKHApID0+IHtcbiAgaWYgKCFpc05hdGl2ZVNlZ3dpdChwKSkge1xuICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgZXhwZWN0ZWQgbmF0aXZlIHNlZ3dpdGApO1xuICB9XG4gIC8vIGFzc3VtZXMgbm8gYW5uZXhcbiAgY29uc3QgbWF0Y2ggPSBtYXRjaFNjcmlwdChwLndpdG5lc3MsIFtcbiAgICAnOnNpZ25hdHVyZScsXG4gICAgJzpzaWduYXR1cmUnLFxuICAgIHsgJzpzY3JpcHQnOiBbJzpwdWJrZXkteG9ubHknLCAnT1BfQ0hFQ0tTSUdWRVJJRlknLCAnOnB1YmtleS14b25seScsICdPUF9DSEVDS1NJRyddIH0sXG4gICAgJzpjb250cm9sLWJsb2NrJyxcbiAgXSk7XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICByZXR1cm4gbWF0Y2g7XG4gIH1cbiAgY29uc3QgW2NvbnRyb2xCbG9ja10gPSBtYXRjaFsnOmNvbnRyb2wtYmxvY2snXTtcbiAgY29uc3Qgc2NyaXB0UGF0aExldmVsID0gY2FsY3VsYXRlU2NyaXB0UGF0aExldmVsKGNvbnRyb2xCbG9jayk7XG5cbiAgY29uc3QgbGVhZlZlcnNpb24gPSBnZXRMZWFmVmVyc2lvbihjb250cm9sQmxvY2spO1xuXG4gIHJldHVybiB7XG4gICAgc2NyaXB0VHlwZTogJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnLFxuICAgIHB1YlNjcmlwdDogbWF0Y2hbJzpzY3JpcHQnXVswXS5idWZmZXIsXG4gICAgcHVibGljS2V5czogbWF0Y2hbJzpzY3JpcHQnXVswXS5tYXRjaFsnOnB1YmtleS14b25seSddIGFzIFtCdWZmZXIsIEJ1ZmZlcl0sXG4gICAgc2lnbmF0dXJlczogbWF0Y2hbJzpzaWduYXR1cmUnXSBhcyBbQnVmZmVyLCBCdWZmZXJdLFxuICAgIGNvbnRyb2xCbG9jayxcbiAgICBzY3JpcHRQYXRoTGV2ZWwsXG4gICAgbGVhZlZlcnNpb24sXG4gIH07XG59O1xuXG4vKipcbiAqIFBhcnNlIGEgdHJhbnNhY3Rpb24ncyBzaWduYXR1cmUgc2NyaXB0IHRvIG9idGFpbiBwdWJsaWMga2V5cywgc2lnbmF0dXJlcywgdGhlIHNpZyBzY3JpcHQsXG4gKiBhbmQgb3RoZXIgcHJvcGVydGllcy5cbiAqXG4gKiBPbmx5IHN1cHBvcnRzIHNjcmlwdCB0eXBlcyB1c2VkIGluIEJpdEdvIHRyYW5zYWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0gaW5wdXRcbiAqIEByZXR1cm5zIFBhcnNlZFNpZ25hdHVyZVNjcmlwdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTaWduYXR1cmVTY3JpcHQoXG4gIGlucHV0OiBUeElucHV0XG4pOiBQYXJzZWRTaWduYXR1cmVTY3JpcHRQMnNoUDJwayB8IFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAybXMgfCBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290IHtcbiAgY29uc3QgZGVjU2NyaXB0ID0gYnNjcmlwdC5kZWNvbXBpbGUoaW5wdXQuc2NyaXB0KTtcbiAgY29uc3QgcGFyc2VycyA9IFtcbiAgICBwYXJzZVAyc2gyT2YzLFxuICAgIHBhcnNlUDJzaFAyd3NoMk9mMyxcbiAgICBwYXJzZVAyd3NoMk9mMyxcbiAgICBwYXJzZVRhcHJvb3RLZXlQYXRoMk9mMyxcbiAgICBwYXJzZVRhcHJvb3RTY3JpcHRQYXRoMk9mMyxcbiAgICBwYXJzZVAyc2hQMnBrLFxuICBdIGFzIGNvbnN0O1xuICBmb3IgKGNvbnN0IGYgb2YgcGFyc2Vycykge1xuICAgIGNvbnN0IHBhcnNlZCA9IGYoe1xuICAgICAgc2NyaXB0OiBkZWNTY3JpcHQ/Lmxlbmd0aCA9PT0gMCA/IG51bGwgOiBkZWNTY3JpcHQsXG4gICAgICB3aXRuZXNzOiBpbnB1dC53aXRuZXNzLmxlbmd0aCA9PT0gMCA/IG51bGwgOiBpbnB1dC53aXRuZXNzLFxuICAgIH0pO1xuICAgIGlmIChwYXJzZWQgaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYGNvdWxkIG5vdCBwYXJzZSBpbnB1dGApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTaWduYXR1cmVTY3JpcHQyT2YzKGlucHV0OiBUeElucHV0KTogUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJtcyB8IFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3Qge1xuICBjb25zdCByZXN1bHQgPSBwYXJzZVNpZ25hdHVyZVNjcmlwdChpbnB1dCk7XG5cbiAgaWYgKFxuICAgICFpc1NjcmlwdFR5cGUyT2YzKHJlc3VsdC5zY3JpcHRUeXBlKSAmJlxuICAgIHJlc3VsdC5zY3JpcHRUeXBlICE9PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgJiZcbiAgICByZXN1bHQuc2NyaXB0VHlwZSAhPT0gJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBzY3JpcHQgdHlwZWApO1xuICB9XG5cbiAgaWYgKCFyZXN1bHQuc2lnbmF0dXJlcykge1xuICAgIHRocm93IG5ldyBFcnJvcihgbWlzc2luZyBzaWduYXR1cmVzYCk7XG4gIH1cbiAgaWYgKFxuICAgIHJlc3VsdC5zY3JpcHRUeXBlICE9PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgJiZcbiAgICByZXN1bHQucHVibGljS2V5cy5sZW5ndGggIT09IDMgJiZcbiAgICAocmVzdWx0LnB1YmxpY0tleXMubGVuZ3RoICE9PSAyIHx8IHJlc3VsdC5zY3JpcHRUeXBlICE9PSAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCcpXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCBwdWJrZXkgY291bnRgKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQgYXMgUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJtcyB8IFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3Q7XG59XG5cbmNvbnN0IHBhcnNlUDJzaFAycGtQdWJTY3JpcHQ6IFB1YlNjcmlwdFBhcnNlcjxQYXJzZWRQdWJTY3JpcHRQMnNoUDJwaz4gPSAocHViU2NyaXB0LCBzY3JpcHRUeXBlKSA9PiB7XG4gIGlmIChzY3JpcHRUeXBlICE9PSAncDJzaFAycGsnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHNjcmlwdCB0eXBlJyk7XG4gIH1cbiAgY29uc3QgbWF0Y2ggPSBtYXRjaFNjcmlwdChbcHViU2NyaXB0XSwgW3sgJzpzY3JpcHQnOiBbJzpwdWJrZXknLCAnT1BfQ0hFQ0tTSUcnXSB9XSk7XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICByZXR1cm4gbWF0Y2g7XG4gIH1cbiAgY29uc3QgW3NjcmlwdF0gPSBtYXRjaFsnOnNjcmlwdCddO1xuICByZXR1cm4ge1xuICAgIHNjcmlwdFR5cGUsXG4gICAgcHVibGljS2V5czogc2NyaXB0Lm1hdGNoWyc6cHVia2V5J10gYXMgW0J1ZmZlcl0sXG4gICAgcHViU2NyaXB0OiBwdWJTY3JpcHQsXG4gICAgcmVkZWVtU2NyaXB0OiBwdWJTY3JpcHQsXG4gIH07XG59O1xuXG5jb25zdCBwYXJzZVAybXNQdWJTY3JpcHQ6IFB1YlNjcmlwdFBhcnNlcjxQYXJzZWRQdWJTY3JpcHRQMm1zPiA9IChwdWJTY3JpcHQsIHNjcmlwdFR5cGUpID0+IHtcbiAgaWYgKHNjcmlwdFR5cGUgPT09ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJyB8fCBzY3JpcHRUeXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgfHwgc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJykge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzY3JpcHQgdHlwZScpO1xuICB9XG4gIGNvbnN0IG1hdGNoID0gbWF0Y2hTY3JpcHQoXG4gICAgW3B1YlNjcmlwdF0sXG4gICAgW3sgJzpzY3JpcHQnOiBbJ09QXzInLCAnOnB1YmtleScsICc6cHVia2V5JywgJzpwdWJrZXknLCAnT1BfMycsICdPUF9DSEVDS01VTFRJU0lHJ10gfV1cbiAgKTtcbiAgaWYgKG1hdGNoIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgIHJldHVybiBtYXRjaDtcbiAgfVxuXG4gIGNvbnN0IFtyZWRlZW1TY3JpcHRdID0gbWF0Y2hbJzpzY3JpcHQnXTtcblxuICBpZiAoIWlzVHJpcGxlKHJlZGVlbVNjcmlwdC5tYXRjaFsnOnB1YmtleSddKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwdWJrZXkgY291bnQnKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2NyaXB0VHlwZSxcbiAgICBwdWJsaWNLZXlzOiByZWRlZW1TY3JpcHQubWF0Y2hbJzpwdWJrZXknXSxcbiAgICBwdWJTY3JpcHQ6IHJlZGVlbVNjcmlwdC5idWZmZXIsXG4gICAgcmVkZWVtU2NyaXB0OiBzY3JpcHRUeXBlID09PSAncDJzaCcgPyByZWRlZW1TY3JpcHQuYnVmZmVyIDogdW5kZWZpbmVkLFxuICAgIHdpdG5lc3NTY3JpcHQ6IHNjcmlwdFR5cGUgPT09ICdwMnNoUDJ3c2gnIHx8IHNjcmlwdFR5cGUgPT09ICdwMndzaCcgPyByZWRlZW1TY3JpcHQuYnVmZmVyIDogdW5kZWZpbmVkLFxuICB9O1xufTtcblxuY29uc3QgcGFyc2VUYXByb290S2V5UGF0aFB1YlNjcmlwdDogUHViU2NyaXB0UGFyc2VyPFBhcnNlZFB1YlNjcmlwdFRhcHJvb3RLZXlQYXRoPiA9IChwdWJTY3JpcHQsIHNjcmlwdFR5cGUpID0+IHtcbiAgaWYgKFxuICAgIHNjcmlwdFR5cGUgPT09ICdwMnNoJyB8fFxuICAgIHNjcmlwdFR5cGUgPT09ICdwMndzaCcgfHxcbiAgICBzY3JpcHRUeXBlID09PSAncDJzaFAyd3NoJyB8fFxuICAgIHNjcmlwdFR5cGUgPT09ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJyB8fFxuICAgIHNjcmlwdFR5cGUgPT09ICdwMnNoUDJwaydcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHNjcmlwdCB0eXBlJyk7XG4gIH1cbiAgY29uc3QgbWF0Y2ggPSBtYXRjaFNjcmlwdChbcHViU2NyaXB0XSwgW3sgJzpzY3JpcHQnOiBbJ09QXzEnLCAnOnB1YmtleS14b25seSddIH1dKTtcbiAgaWYgKG1hdGNoIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgIHJldHVybiBtYXRjaDtcbiAgfVxuXG4gIGNvbnN0IFtzY3JpcHRdID0gbWF0Y2hbJzpzY3JpcHQnXTtcblxuICByZXR1cm4ge1xuICAgIHNjcmlwdFR5cGU6ICd0YXByb290S2V5UGF0aFNwZW5kJyxcbiAgICBwdWJsaWNLZXlzOiBzY3JpcHQubWF0Y2hbJzpwdWJrZXkteG9ubHknXSBhcyBbQnVmZmVyXSxcbiAgICBwdWJTY3JpcHQ6IHB1YlNjcmlwdCxcbiAgfTtcbn07XG5cbmNvbnN0IHBhcnNlVGFwcm9vdFNjcmlwdFBhdGhQdWJTY3JpcHQ6IFB1YlNjcmlwdFBhcnNlcjxQYXJzZWRQdWJTY3JpcHRUYXByb290U2NyaXB0UGF0aD4gPSAocHViU2NyaXB0LCBzY3JpcHRUeXBlKSA9PiB7XG4gIGlmIChcbiAgICBzY3JpcHRUeXBlID09PSAncDJzaCcgfHxcbiAgICBzY3JpcHRUeXBlID09PSAncDJ3c2gnIHx8XG4gICAgc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMndzaCcgfHxcbiAgICBzY3JpcHRUeXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgfHxcbiAgICBzY3JpcHRUeXBlID09PSAncDJzaFAycGsnXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzY3JpcHQgdHlwZScpO1xuICB9XG4gIGNvbnN0IG1hdGNoID0gbWF0Y2hTY3JpcHQoXG4gICAgW3B1YlNjcmlwdF0sXG4gICAgW3sgJzpzY3JpcHQnOiBbJzpwdWJrZXkteG9ubHknLCAnT1BfQ0hFQ0tTSUdWRVJJRlknLCAnOnB1YmtleS14b25seScsICdPUF9DSEVDS1NJRyddIH1dXG4gICk7XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICByZXR1cm4gbWF0Y2g7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNjcmlwdFR5cGUsXG4gICAgcHViU2NyaXB0OiBtYXRjaFsnOnNjcmlwdCddWzBdLmJ1ZmZlcixcbiAgICBwdWJsaWNLZXlzOiBtYXRjaFsnOnNjcmlwdCddWzBdLm1hdGNoWyc6cHVia2V5LXhvbmx5J10gYXMgW0J1ZmZlciwgQnVmZmVyXSxcbiAgfTtcbn07XG5cbi8qKlxuICogQHJldHVybiBwdWJTY3JpcHQgKHNjcmlwdFB1YktleS9yZWRlZW1TY3JpcHQvd2l0bmVzc1NjcmlwdCkgaXMgcGFyc2VkLlxuICogUDJTSCA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQgKHJlZGVlbVNjcmlwdCksIHJlZGVlbVNjcmlwdCwgcHVibGljIGtleXNcbiAqIFBXMlNIID0+IHNjcmlwdFR5cGUsIHB1YlNjcmlwdCAod2l0bmVzc1NjcmlwdCksIHdpdG5lc3NTY3JpcHQsIHB1YmxpYyBrZXlzLlxuICogUDJTSC1QVzJTSCA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQgKHdpdG5lc3NTY3JpcHQpLCB3aXRuZXNzU2NyaXB0LCBwdWJsaWMga2V5cy5cbiAqIHRhcHJvb3RTY3JpcHRQYXRoU3BlbmQgKFAyVFIgYW5kIFAyVFJNVUlTRzIgc2NyaXB0IHBhdGgpID0+IHNjcmlwdFR5cGUsIHB1YlNjcmlwdCwgcHViIGtleXMuXG4gKiB0YXByb290S2V5UGF0aFNwZW5kIChQMlRSTVVJU0cyIGtleSBwYXRoKSA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQgKDM0LWJ5dGUgb3V0cHV0IHNjcmlwdCksIHB1YiBrZXkgKHRhcE91dHB1dEtleSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVB1YlNjcmlwdDJPZjMoXG4gIGlucHV0UHViU2NyaXB0OiBJbnB1dFB1YlNjcmlwdCxcbiAgc2NyaXB0VHlwZTogJ3RhcHJvb3RLZXlQYXRoU3BlbmQnXG4pOiBQYXJzZWRQdWJTY3JpcHRUYXByb290S2V5UGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVB1YlNjcmlwdDJPZjMoXG4gIGlucHV0UHViU2NyaXB0OiBJbnB1dFB1YlNjcmlwdCxcbiAgc2NyaXB0VHlwZTogJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnXG4pOiBQYXJzZWRQdWJTY3JpcHRUYXByb290U2NyaXB0UGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVB1YlNjcmlwdDJPZjMoXG4gIGlucHV0UHViU2NyaXB0OiBJbnB1dFB1YlNjcmlwdCxcbiAgc2NyaXB0VHlwZTogJ3Ayc2gnIHwgJ3Ayc2hQMndzaCcgfCAncDJ3c2gnXG4pOiBQYXJzZWRQdWJTY3JpcHRQMm1zO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHViU2NyaXB0Mk9mMyhcbiAgaW5wdXRQdWJTY3JpcHQ6IElucHV0UHViU2NyaXB0LFxuICBzY3JpcHRUeXBlOiBQYXJzZWRTY3JpcHRUeXBlMk9mM1xuKTogUGFyc2VkUHViU2NyaXB0UDJtcyB8IFBhcnNlZFB1YlNjcmlwdFRhcHJvb3Q7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQdWJTY3JpcHQyT2YzKFxuICBpbnB1dFB1YlNjcmlwdDogSW5wdXRQdWJTY3JpcHQsXG4gIHNjcmlwdFR5cGU6IFBhcnNlZFNjcmlwdFR5cGUyT2YzXG4pOiBQYXJzZWRQdWJTY3JpcHRQMm1zIHwgUGFyc2VkUHViU2NyaXB0VGFwcm9vdCB7XG4gIGNvbnN0IHJlc3VsdCA9XG4gICAgc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnXG4gICAgICA/IHBhcnNlVGFwcm9vdEtleVBhdGhQdWJTY3JpcHQoaW5wdXRQdWJTY3JpcHQsIHNjcmlwdFR5cGUpXG4gICAgICA6IHNjcmlwdFR5cGUgPT09ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJ1xuICAgICAgPyBwYXJzZVRhcHJvb3RTY3JpcHRQYXRoUHViU2NyaXB0KGlucHV0UHViU2NyaXB0LCBzY3JpcHRUeXBlKVxuICAgICAgOiBwYXJzZVAybXNQdWJTY3JpcHQoaW5wdXRQdWJTY3JpcHQsIHNjcmlwdFR5cGUpO1xuXG4gIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5tZXNzYWdlKTtcbiAgfVxuXG4gIGlmIChcbiAgICAocmVzdWx0LnNjcmlwdFR5cGUgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJyAmJiByZXN1bHQucHVibGljS2V5cy5sZW5ndGggIT09IDEpIHx8XG4gICAgKHJlc3VsdC5zY3JpcHRUeXBlID09PSAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCcgJiYgcmVzdWx0LnB1YmxpY0tleXMubGVuZ3RoICE9PSAyKSB8fFxuICAgIChpc1NjcmlwdFR5cGUyT2YzKHJlc3VsdC5zY3JpcHRUeXBlKSAmJiByZXN1bHQucHVibGljS2V5cy5sZW5ndGggIT09IDMpXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCBwdWJrZXkgY291bnQnKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHJldHVybiBwdWJTY3JpcHQgKHNjcmlwdFB1YktleS9yZWRlZW1TY3JpcHQvd2l0bmVzc1NjcmlwdCkgaXMgcGFyc2VkLlxuICogUDJTSCA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQgKHJlZGVlbVNjcmlwdCksIHJlZGVlbVNjcmlwdCwgcHVibGljIGtleXNcbiAqIFBXMlNIID0+IHNjcmlwdFR5cGUsIHB1YlNjcmlwdCAod2l0bmVzc1NjcmlwdCksIHdpdG5lc3NTY3JpcHQsIHB1YmxpYyBrZXlzLlxuICogUDJTSC1QVzJTSCA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQgKHdpdG5lc3NTY3JpcHQpLCB3aXRuZXNzU2NyaXB0LCBwdWJsaWMga2V5cy5cbiAqIHRhcHJvb3RTY3JpcHRQYXRoU3BlbmQgKFAyVFIgYW5kIFAyVFJNVUlTRzIgc2NyaXB0IHBhdGgpID0+IHNjcmlwdFR5cGUsIHB1YlNjcmlwdCwgcHViIGtleXMuXG4gKiB0YXByb290S2V5UGF0aFNwZW5kIChQMlRSTVVJU0cyIGtleSBwYXRoKSA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQgKDM0LWJ5dGUgb3V0cHV0IHNjcmlwdCksIHB1YiBrZXkgKHRhcE91dHB1dEtleSkuXG4gKiBQMlNILVAyUEsgPT4gc2NyaXB0VHlwZSwgcHViU2NyaXB0LCBwdWIga2V5LCByZWRlZW1TY3JpcHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVB1YlNjcmlwdChcbiAgaW5wdXRQdWJTY3JpcHQ6IElucHV0UHViU2NyaXB0LFxuICBzY3JpcHRUeXBlOiAndGFwcm9vdEtleVBhdGhTcGVuZCdcbik6IFBhcnNlZFB1YlNjcmlwdFRhcHJvb3RLZXlQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHViU2NyaXB0KFxuICBpbnB1dFB1YlNjcmlwdDogSW5wdXRQdWJTY3JpcHQsXG4gIHNjcmlwdFR5cGU6ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJ1xuKTogUGFyc2VkUHViU2NyaXB0VGFwcm9vdFNjcmlwdFBhdGg7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQdWJTY3JpcHQoaW5wdXRQdWJTY3JpcHQ6IElucHV0UHViU2NyaXB0LCBzY3JpcHRUeXBlOiAncDJzaFAycGsnKTogUGFyc2VkUHViU2NyaXB0UDJzaFAycGs7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQdWJTY3JpcHQoXG4gIGlucHV0UHViU2NyaXB0OiBJbnB1dFB1YlNjcmlwdCxcbiAgc2NyaXB0VHlwZTogJ3Ayc2gnIHwgJ3Ayc2hQMndzaCcgfCAncDJ3c2gnXG4pOiBQYXJzZWRQdWJTY3JpcHRQMm1zO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHViU2NyaXB0KFxuICBpbnB1dFB1YlNjcmlwdDogSW5wdXRQdWJTY3JpcHQsXG4gIHNjcmlwdFR5cGU6IFBhcnNlZFNjcmlwdFR5cGVcbik6IFBhcnNlZFB1YlNjcmlwdFAybXMgfCBQYXJzZWRQdWJTY3JpcHRUYXByb290IHwgUGFyc2VkUHViU2NyaXB0UDJzaFAycGs7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQdWJTY3JpcHQoXG4gIGlucHV0UHViU2NyaXB0OiBJbnB1dFB1YlNjcmlwdCxcbiAgc2NyaXB0VHlwZTogUGFyc2VkU2NyaXB0VHlwZVxuKTogUGFyc2VkUHViU2NyaXB0UDJtcyB8IFBhcnNlZFB1YlNjcmlwdFRhcHJvb3QgfCBQYXJzZWRQdWJTY3JpcHRQMnNoUDJwayB7XG4gIGNvbnN0IHJlc3VsdCA9XG4gICAgc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJ1xuICAgICAgPyBwYXJzZVAyc2hQMnBrUHViU2NyaXB0KGlucHV0UHViU2NyaXB0LCBzY3JpcHRUeXBlKVxuICAgICAgOiBwYXJzZVB1YlNjcmlwdDJPZjMoaW5wdXRQdWJTY3JpcHQsIHNjcmlwdFR5cGUpO1xuXG4gIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5tZXNzYWdlKTtcbiAgfVxuXG4gIGlmIChyZXN1bHQuc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJyAmJiByZXN1bHQucHVibGljS2V5cy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgcHVia2V5IGNvdW50Jyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhaW5BbmRJbmRleEZyb21QYXRoKHBhdGg6IHN0cmluZyk6IHsgY2hhaW46IG51bWJlcjsgaW5kZXg6IG51bWJlciB9IHtcbiAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KCcvJyk7XG4gIGlmIChwYXJ0cy5sZW5ndGggPD0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBwYXRoIFwiJHtwYXRofVwiYCk7XG4gIH1cbiAgY29uc3QgY2hhaW4gPSBOdW1iZXIocGFydHNbcGFydHMubGVuZ3RoIC0gMl0pO1xuICBjb25zdCBpbmRleCA9IE51bWJlcihwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSk7XG4gIGlmIChpc05hTihjaGFpbikgfHwgaXNOYU4oaW5kZXgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgcGFyc2UgY2hhaW4gYW5kIGluZGV4IGludG8gbnVtYmVycyBmcm9tIHBhdGggJHtwYXRofWApO1xuICB9XG4gIGlmIChjaGFpbiA8IDAgfHwgaW5kZXggPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBjaGFpbiBhbmQgaW5kZXggbXVzdCBiZSBub24tbmVnYXRpdmVgKTtcbiAgfVxuXG4gIHJldHVybiB7IGNoYWluLCBpbmRleCB9O1xufVxuIl19
@@ -15,11 +15,11 @@ function getInputUpdate(tx, vin, prevOuts) {
15
15
  if (script.length === 0 && witness.length === 0) {
16
16
  return nonWitnessUtxo ? { nonWitnessUtxo } : {};
17
17
  }
18
- const parsedInput = parseInput_1.parseSignatureScript(tx.ins[vin]);
18
+ const parsedInput = (0, parseInput_1.parseSignatureScript)(tx.ins[vin]);
19
19
  assert.ok(parsedInput.scriptType !== 'taprootKeyPathSpend');
20
20
  function getPartialSigs() {
21
21
  assert.ok(parsedInput.scriptType !== 'taprootKeyPathSpend');
22
- return signature_1.getSignaturesWithPublicKeys(tx, vin, prevOuts, parsedInput.publicKeys).flatMap((signature, i) => signature
22
+ return (0, signature_1.getSignaturesWithPublicKeys)(tx, vin, prevOuts, parsedInput.publicKeys).flatMap((signature, i) => signature
23
23
  ? [
24
24
  {
25
25
  pubkey: parsedInput.publicKeys[i],
@@ -32,9 +32,9 @@ function getInputUpdate(tx, vin, prevOuts) {
32
32
  // with the previous transaction. Therefore, we can treat Zcash non-segwit transactions as Bitcoin
33
33
  // segwit transactions
34
34
  if (parsedInput.scriptType !== 'taprootScriptPathSpend' &&
35
- !outputScripts_1.hasWitnessData(parsedInput.scriptType) &&
35
+ !(0, outputScripts_1.hasWitnessData)(parsedInput.scriptType) &&
36
36
  !nonWitnessUtxo &&
37
- __1.getMainnet(tx.network) !== __1.networks.zcash) {
37
+ (0, __1.getMainnet)(tx.network) !== __1.networks.zcash) {
38
38
  throw new Error(`scriptType ${parsedInput.scriptType} requires prevTx Buffer`);
39
39
  }
40
40
  switch (parsedInput.scriptType) {
@@ -91,4 +91,4 @@ function unsign(tx, prevOuts) {
91
91
  });
92
92
  }
93
93
  exports.unsign = unsign;
94
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbUhhbGZTaWduZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vcHNidC9mcm9tSGFsZlNpZ25lZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpQ0FBaUM7QUFFakMsNkJBQStFO0FBRS9FLDhDQUFxRDtBQUNyRCw0Q0FBMkQ7QUFDM0Qsb0RBQWtEO0FBRWxELFNBQVMsYUFBYSxDQUFvQyxDQUEwQjtJQUNsRixPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFNLENBQUM7QUFDeEYsQ0FBQztBQUVELFNBQWdCLGNBQWMsQ0FDNUIsRUFBMkIsRUFDM0IsR0FBVyxFQUNYLFFBQW9EO0lBRXBELE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDNUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDL0MsT0FBTyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNqRDtJQUVELE1BQU0sV0FBVyxHQUFHLGlDQUFvQixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RCxNQUFNLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEtBQUsscUJBQXFCLENBQUMsQ0FBQztJQUU1RCxTQUFTLGNBQWM7UUFDckIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsVUFBVSxLQUFLLHFCQUFxQixDQUFDLENBQUM7UUFDNUQsT0FBTyx1Q0FBMkIsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQ3JHLFNBQVM7WUFDUCxDQUFDLENBQUM7Z0JBQ0U7b0JBQ0UsTUFBTSxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO29CQUNqQyxTQUFTO2lCQUNWO2FBQ0Y7WUFDSCxDQUFDLENBQUMsRUFBRSxDQUNQLENBQUM7SUFDSixDQUFDO0lBQ0QsMEdBQTBHO0lBQzFHLGtHQUFrRztJQUNsRyxzQkFBc0I7SUFDdEIsSUFDRSxXQUFXLENBQUMsVUFBVSxLQUFLLHdCQUF3QjtRQUNuRCxDQUFDLDhCQUFjLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztRQUN2QyxDQUFDLGNBQWM7UUFDZixjQUFVLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFlBQVEsQ0FBQyxLQUFLLEVBQ3pDO1FBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQyxjQUFjLFdBQVcsQ0FBQyxVQUFVLHlCQUF5QixDQUFDLENBQUM7S0FDaEY7SUFFRCxRQUFRLFdBQVcsQ0FBQyxVQUFVLEVBQUU7UUFDOUIsS0FBSyxVQUFVO1lBQ2IsT0FBTztnQkFDTCxjQUFjO2dCQUNkLFVBQVUsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUMxRixDQUFDO1FBQ0osS0FBSyxNQUFNLENBQUM7UUFDWixLQUFLLE9BQU8sQ0FBQztRQUNiLEtBQUssV0FBVztZQUNkLE9BQU8sYUFBYSxDQUFDO2dCQUNuQixjQUFjO2dCQUNkLFVBQVUsRUFBRSxjQUFjLEVBQUU7Z0JBQzVCLFlBQVksRUFBRSxXQUFXLENBQUMsWUFBWTtnQkFDdEMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxhQUFhO2FBQ3pDLENBQUMsQ0FBQztRQUNMLEtBQUssd0JBQXdCO1lBQzNCLE1BQU0sUUFBUSxHQUFHLFdBQU8sQ0FBQyxjQUFjLENBQUMsT0FBTSxFQUFFLFdBQVcsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2pHLE9BQU87Z0JBQ0wsYUFBYSxFQUFFO29CQUNiO3dCQUNFLFlBQVksRUFBRSxXQUFXLENBQUMsWUFBWTt3QkFDdEMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxTQUFTO3dCQUM3QixXQUFXLEVBQUUsV0FBVyxDQUFDLFdBQVc7cUJBQ3JDO2lCQUNGO2dCQUNELFlBQVksRUFBRSxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO2FBQ3BFLENBQUM7S0FDTDtBQUNILENBQUM7QUFuRUQsd0NBbUVDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxTQUFnQixNQUFNLENBQUMsRUFBMkIsRUFBRSxRQUE0QjtJQUM5RSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQy9CLE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2pELEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ25CLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFQRCx3QkFPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgUHNidElucHV0VXBkYXRlLCBQYXJ0aWFsU2lnIH0gZnJvbSAnYmlwMTc0L3NyYy9saWIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBlY2MgYXMgZWNjTGliLCBUeE91dHB1dCwgdGFwcm9vdCwgZ2V0TWFpbm5ldCwgbmV0d29ya3MgfSBmcm9tICcuLi8uLic7XG5pbXBvcnQgeyBVdHhvVHJhbnNhY3Rpb24gfSBmcm9tICcuLi9VdHhvVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgcGFyc2VTaWduYXR1cmVTY3JpcHQgfSBmcm9tICcuLi9wYXJzZUlucHV0JztcbmltcG9ydCB7IGdldFNpZ25hdHVyZXNXaXRoUHVibGljS2V5cyB9IGZyb20gJy4uL3NpZ25hdHVyZSc7XG5pbXBvcnQgeyBoYXNXaXRuZXNzRGF0YSB9IGZyb20gJy4uL291dHB1dFNjcmlwdHMnO1xuXG5mdW5jdGlvbiBvbWl0VW5kZWZpbmVkPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBUIHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyh2KS5maWx0ZXIoKFtrLCB2XSkgPT4gdiAhPT0gdW5kZWZpbmVkKSkgYXMgVDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldElucHV0VXBkYXRlKFxuICB0eDogVXR4b1RyYW5zYWN0aW9uPGJpZ2ludD4sXG4gIHZpbjogbnVtYmVyLFxuICBwcmV2T3V0czogKFR4T3V0cHV0PGJpZ2ludD4gJiB7IHByZXZUeD86IEJ1ZmZlciB9KVtdXG4pOiBQc2J0SW5wdXRVcGRhdGUge1xuICBjb25zdCBub25XaXRuZXNzVXR4byA9IHByZXZPdXRzW3Zpbl0ucHJldlR4O1xuICBjb25zdCB7IHNjcmlwdCwgd2l0bmVzcyB9ID0gdHguaW5zW3Zpbl07XG4gIGlmIChzY3JpcHQubGVuZ3RoID09PSAwICYmIHdpdG5lc3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG5vbldpdG5lc3NVdHhvID8geyBub25XaXRuZXNzVXR4byB9IDoge307XG4gIH1cblxuICBjb25zdCBwYXJzZWRJbnB1dCA9IHBhcnNlU2lnbmF0dXJlU2NyaXB0KHR4Lmluc1t2aW5dKTtcbiAgYXNzZXJ0Lm9rKHBhcnNlZElucHV0LnNjcmlwdFR5cGUgIT09ICd0YXByb290S2V5UGF0aFNwZW5kJyk7XG5cbiAgZnVuY3Rpb24gZ2V0UGFydGlhbFNpZ3MoKTogUGFydGlhbFNpZ1tdIHtcbiAgICBhc3NlcnQub2socGFyc2VkSW5wdXQuc2NyaXB0VHlwZSAhPT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnKTtcbiAgICByZXR1cm4gZ2V0U2lnbmF0dXJlc1dpdGhQdWJsaWNLZXlzKHR4LCB2aW4sIHByZXZPdXRzLCBwYXJzZWRJbnB1dC5wdWJsaWNLZXlzKS5mbGF0TWFwKChzaWduYXR1cmUsIGkpID0+XG4gICAgICBzaWduYXR1cmVcbiAgICAgICAgPyBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHB1YmtleTogcGFyc2VkSW5wdXQucHVibGljS2V5c1tpXSxcbiAgICAgICAgICAgICAgc2lnbmF0dXJlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdXG4gICAgICAgIDogW11cbiAgICApO1xuICB9XG4gIC8vIEJlY2F1c2UgWmNhc2ggZGlyZWN0bHkgaGFzaGVzIHRoZSB2YWx1ZSBmb3Igbm9uLXNlZ3dpdCB0cmFuc2FjdGlvbnMsIHdlIGRvIG5vdCBuZWVkIHRvIGNoZWNrIGluZGlyZWN0bHlcbiAgLy8gd2l0aCB0aGUgcHJldmlvdXMgdHJhbnNhY3Rpb24uIFRoZXJlZm9yZSwgd2UgY2FuIHRyZWF0IFpjYXNoIG5vbi1zZWd3aXQgdHJhbnNhY3Rpb25zIGFzIEJpdGNvaW5cbiAgLy8gc2Vnd2l0IHRyYW5zYWN0aW9uc1xuICBpZiAoXG4gICAgcGFyc2VkSW5wdXQuc2NyaXB0VHlwZSAhPT0gJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnICYmXG4gICAgIWhhc1dpdG5lc3NEYXRhKHBhcnNlZElucHV0LnNjcmlwdFR5cGUpICYmXG4gICAgIW5vbldpdG5lc3NVdHhvICYmXG4gICAgZ2V0TWFpbm5ldCh0eC5uZXR3b3JrKSAhPT0gbmV0d29ya3MuemNhc2hcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBzY3JpcHRUeXBlICR7cGFyc2VkSW5wdXQuc2NyaXB0VHlwZX0gcmVxdWlyZXMgcHJldlR4IEJ1ZmZlcmApO1xuICB9XG5cbiAgc3dpdGNoIChwYXJzZWRJbnB1dC5zY3JpcHRUeXBlKSB7XG4gICAgY2FzZSAncDJzaFAycGsnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbm9uV2l0bmVzc1V0eG8sXG4gICAgICAgIHBhcnRpYWxTaWc6IFt7IHB1YmtleTogcGFyc2VkSW5wdXQucHVibGljS2V5c1swXSwgc2lnbmF0dXJlOiBwYXJzZWRJbnB1dC5zaWduYXR1cmVzWzBdIH1dLFxuICAgICAgfTtcbiAgICBjYXNlICdwMnNoJzpcbiAgICBjYXNlICdwMndzaCc6XG4gICAgY2FzZSAncDJzaFAyd3NoJzpcbiAgICAgIHJldHVybiBvbWl0VW5kZWZpbmVkKHtcbiAgICAgICAgbm9uV2l0bmVzc1V0eG8sXG4gICAgICAgIHBhcnRpYWxTaWc6IGdldFBhcnRpYWxTaWdzKCksXG4gICAgICAgIHJlZGVlbVNjcmlwdDogcGFyc2VkSW5wdXQucmVkZWVtU2NyaXB0LFxuICAgICAgICB3aXRuZXNzU2NyaXB0OiBwYXJzZWRJbnB1dC53aXRuZXNzU2NyaXB0LFxuICAgICAgfSk7XG4gICAgY2FzZSAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCc6XG4gICAgICBjb25zdCBsZWFmSGFzaCA9IHRhcHJvb3QuZ2V0VGFwbGVhZkhhc2goZWNjTGliLCBwYXJzZWRJbnB1dC5jb250cm9sQmxvY2ssIHBhcnNlZElucHV0LnB1YlNjcmlwdCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0YXBMZWFmU2NyaXB0OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29udHJvbEJsb2NrOiBwYXJzZWRJbnB1dC5jb250cm9sQmxvY2ssXG4gICAgICAgICAgICBzY3JpcHQ6IHBhcnNlZElucHV0LnB1YlNjcmlwdCxcbiAgICAgICAgICAgIGxlYWZWZXJzaW9uOiBwYXJzZWRJbnB1dC5sZWFmVmVyc2lvbixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICB0YXBTY3JpcHRTaWc6IGdldFBhcnRpYWxTaWdzKCkubWFwKChvYmopID0+ICh7IC4uLm9iaiwgbGVhZkhhc2ggfSkpLFxuICAgICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFRha2VzIGEgcGFydGlhbGx5IHNpZ25lZCB0cmFuc2FjdGlvbiBhbmQgcmVtb3ZlcyB0aGUgc2NyaXB0cyBhbmQgc2lnbmF0dXJlcy5cbiAqXG4gKiBJbnB1dHMgbXVzdCBiZSBvbmUgb2Y6XG4gKiAgLSBwMnNoUDJwa1xuICogIC0gcDJzaCAyLW9mLTNcbiAqICAtIHAyc2hQMndzaCAyLW9mLTNcbiAqICAtIHAyd3NoIDItb2YtM1xuICogIC0gcDJ0ciBzY3JpcHQgcGF0aCAyLW9mLTJcbiAqXG4gKiBAcGFyYW0gdHggdGhlIHBhcnRpYWxseSBzaWduZWQgdHJhbnNhY3Rpb25cbiAqIEBwYXJhbSBwcmV2T3V0c1xuICpcbiAqIEByZXR1cm4gdGhlIHJlbW92ZWQgc2NyaXB0cyBhbmQgc2lnbmF0dXJlcywgcmVhZHkgdG8gYmUgYWRkZWQgdG8gYSBQU0JUXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bnNpZ24odHg6IFV0eG9UcmFuc2FjdGlvbjxiaWdpbnQ+LCBwcmV2T3V0czogVHhPdXRwdXQ8YmlnaW50PltdKTogUHNidElucHV0VXBkYXRlW10ge1xuICByZXR1cm4gdHguaW5zLm1hcCgoaW5wdXQsIHZpbikgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZSA9IGdldElucHV0VXBkYXRlKHR4LCB2aW4sIHByZXZPdXRzKTtcbiAgICBpbnB1dC53aXRuZXNzID0gW107XG4gICAgaW5wdXQuc2NyaXB0ID0gQnVmZmVyLmFsbG9jKDApO1xuICAgIHJldHVybiB1cGRhdGU7XG4gIH0pO1xufVxuIl19
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbUhhbGZTaWduZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vcHNidC9mcm9tSGFsZlNpZ25lZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpQ0FBaUM7QUFFakMsNkJBQStFO0FBRS9FLDhDQUFxRDtBQUNyRCw0Q0FBMkQ7QUFDM0Qsb0RBQWtEO0FBRWxELFNBQVMsYUFBYSxDQUFvQyxDQUEwQjtJQUNsRixPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFNLENBQUM7QUFDeEYsQ0FBQztBQUVELFNBQWdCLGNBQWMsQ0FDNUIsRUFBMkIsRUFDM0IsR0FBVyxFQUNYLFFBQW9EO0lBRXBELE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDNUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDL0MsT0FBTyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNqRDtJQUVELE1BQU0sV0FBVyxHQUFHLElBQUEsaUNBQW9CLEVBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsS0FBSyxxQkFBcUIsQ0FBQyxDQUFDO0lBRTVELFNBQVMsY0FBYztRQUNyQixNQUFNLENBQUMsRUFB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c2J0SW5wdXRVcGRhdGUsIFBhcnRpYWxTaWcgfSBmcm9tICdiaXAxNzQvc3JjL2xpYi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGVjYyBhcyBlY2NMaWIsIFR4T3V0cHV0LCB0YXByb290LCBnZXRNYWlubmV0LCBuZXR3b3JrcyB9IGZyb20gJy4uLy4uJztcbmltcG9ydCB7IFV0eG9UcmFuc2FjdGlvbiB9IGZyb20gJy4uL1V0eG9UcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBwYXJzZVNpZ25hdHVyZVNjcmlwdCB9IGZyb20gJy4uL3BhcnNlSW5wdXQnO1xuaW1wb3J0IHsgZ2V0U2lnbmF0dXJlc1dpdGhQdWJsaWNLZXlzIH0gZnJvbSAnLi4vc2lnbmF0dXJlJztcbmltcG9ydCB7IGhhc1dpdG5lc3NEYXRhIH0gZnJvbSAnLi4vb3V0cHV0U2NyaXB0cyc7XG5cbmZ1bmN0aW9uIG9taXRVbmRlZmluZWQ8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih2OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFQge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHYpLmZpbHRlcigoW2ssIHZdKSA9PiB2ICE9PSB1bmRlZmluZWQpKSBhcyBUO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5wdXRVcGRhdGUoXG4gIHR4OiBVdHhvVHJhbnNhY3Rpb248YmlnaW50PixcbiAgdmluOiBudW1iZXIsXG4gIHByZXZPdXRzOiAoVHhPdXRwdXQ8YmlnaW50PiAmIHsgcHJldlR4PzogQnVmZmVyIH0pW11cbik6IFBzYnRJbnB1dFVwZGF0ZSB7XG4gIGNvbnN0IG5vbldpdG5lc3NVdHhvID0gcHJldk91dHNbdmluXS5wcmV2VHg7XG4gIGNvbnN0IHsgc2NyaXB0LCB3aXRuZXNzIH0gPSB0eC5pbnNbdmluXTtcbiAgaWYgKHNjcmlwdC5sZW5ndGggPT09IDAgJiYgd2l0bmVzcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbm9uV2l0bmVzc1V0eG8gPyB7IG5vbldpdG5lc3NVdHhvIH0gOiB7fTtcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZElucHV0ID0gcGFyc2VTaWduYXR1cmVTY3JpcHQodHguaW5zW3Zpbl0pO1xuICBhc3NlcnQub2socGFyc2VkSW5wdXQuc2NyaXB0VHlwZSAhPT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnKTtcblxuICBmdW5jdGlvbiBnZXRQYXJ0aWFsU2lncygpOiBQYXJ0aWFsU2lnW10ge1xuICAgIGFzc2VydC5vayhwYXJzZWRJbnB1dC5zY3JpcHRUeXBlICE9PSAndGFwcm9vdEtleVBhdGhTcGVuZCcpO1xuICAgIHJldHVybiBnZXRTaWduYXR1cmVzV2l0aFB1YmxpY0tleXModHgsIHZpbiwgcHJldk91dHMsIHBhcnNlZElucHV0LnB1YmxpY0tleXMpLmZsYXRNYXAoKHNpZ25hdHVyZSwgaSkgPT5cbiAgICAgIHNpZ25hdHVyZVxuICAgICAgICA/IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcHVia2V5OiBwYXJzZWRJbnB1dC5wdWJsaWNLZXlzW2ldLFxuICAgICAgICAgICAgICBzaWduYXR1cmUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXVxuICAgICk7XG4gIH1cbiAgLy8gQmVjYXVzZSBaY2FzaCBkaXJlY3RseSBoYXNoZXMgdGhlIHZhbHVlIGZvciBub24tc2Vnd2l0IHRyYW5zYWN0aW9ucywgd2UgZG8gbm90IG5lZWQgdG8gY2hlY2sgaW5kaXJlY3RseVxuICAvLyB3aXRoIHRoZSBwcmV2aW91cyB0cmFuc2FjdGlvbi4gVGhlcmVmb3JlLCB3ZSBjYW4gdHJlYXQgWmNhc2ggbm9uLXNlZ3dpdCB0cmFuc2FjdGlvbnMgYXMgQml0Y29pblxuICAvLyBzZWd3aXQgdHJhbnNhY3Rpb25zXG4gIGlmIChcbiAgICBwYXJzZWRJbnB1dC5zY3JpcHRUeXBlICE9PSAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCcgJiZcbiAgICAhaGFzV2l0bmVzc0RhdGEocGFyc2VkSW5wdXQuc2NyaXB0VHlwZSkgJiZcbiAgICAhbm9uV2l0bmVzc1V0eG8gJiZcbiAgICBnZXRNYWlubmV0KHR4Lm5ldHdvcmspICE9PSBuZXR3b3Jrcy56Y2FzaFxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHNjcmlwdFR5cGUgJHtwYXJzZWRJbnB1dC5zY3JpcHRUeXBlfSByZXF1aXJlcyBwcmV2VHggQnVmZmVyYCk7XG4gIH1cblxuICBzd2l0Y2ggKHBhcnNlZElucHV0LnNjcmlwdFR5cGUpIHtcbiAgICBjYXNlICdwMnNoUDJwayc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBub25XaXRuZXNzVXR4byxcbiAgICAgICAgcGFydGlhbFNpZzogW3sgcHVia2V5OiBwYXJzZWRJbnB1dC5wdWJsaWNLZXlzWzBdLCBzaWduYXR1cmU6IHBhcnNlZElucHV0LnNpZ25hdHVyZXNbMF0gfV0sXG4gICAgICB9O1xuICAgIGNhc2UgJ3Ayc2gnOlxuICAgIGNhc2UgJ3Ayd3NoJzpcbiAgICBjYXNlICdwMnNoUDJ3c2gnOlxuICAgICAgcmV0dXJuIG9taXRVbmRlZmluZWQoe1xuICAgICAgICBub25XaXRuZXNzVXR4byxcbiAgICAgICAgcGFydGlhbFNpZzogZ2V0UGFydGlhbFNpZ3MoKSxcbiAgICAgICAgcmVkZWVtU2NyaXB0OiBwYXJzZWRJbnB1dC5yZWRlZW1TY3JpcHQsXG4gICAgICAgIHdpdG5lc3NTY3JpcHQ6IHBhcnNlZElucHV0LndpdG5lc3NTY3JpcHQsXG4gICAgICB9KTtcbiAgICBjYXNlICd0YXByb290U2NyaXB0UGF0aFNwZW5kJzpcbiAgICAgIGNvbnN0IGxlYWZIYXNoID0gdGFwcm9vdC5nZXRUYXBsZWFmSGFzaChlY2NMaWIsIHBhcnNlZElucHV0LmNvbnRyb2xCbG9jaywgcGFyc2VkSW5wdXQucHViU2NyaXB0KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRhcExlYWZTY3JpcHQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb250cm9sQmxvY2s6IHBhcnNlZElucHV0LmNvbnRyb2xCbG9jayxcbiAgICAgICAgICAgIHNjcmlwdDogcGFyc2VkSW5wdXQucHViU2NyaXB0LFxuICAgICAgICAgICAgbGVhZlZlcnNpb246IHBhcnNlZElucHV0LmxlYWZWZXJzaW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHRhcFNjcmlwdFNpZzogZ2V0UGFydGlhbFNpZ3MoKS5tYXAoKG9iaikgPT4gKHsgLi4ub2JqLCBsZWFmSGFzaCB9KSksXG4gICAgICB9O1xuICB9XG59XG5cbi8qKlxuICogVGFrZXMgYSBwYXJ0aWFsbHkgc2lnbmVkIHRyYW5zYWN0aW9uIGFuZCByZW1vdmVzIHRoZSBzY3JpcHRzIGFuZCBzaWduYXR1cmVzLlxuICpcbiAqIElucHV0cyBtdXN0IGJlIG9uZSBvZjpcbiAqICAtIHAyc2hQMnBrXG4gKiAgLSBwMnNoIDItb2YtM1xuICogIC0gcDJzaFAyd3NoIDItb2YtM1xuICogIC0gcDJ3c2ggMi1vZi0zXG4gKiAgLSBwMnRyIHNjcmlwdCBwYXRoIDItb2YtMlxuICpcbiAqIEBwYXJhbSB0eCB0aGUgcGFydGlhbGx5IHNpZ25lZCB0cmFuc2FjdGlvblxuICogQHBhcmFtIHByZXZPdXRzXG4gKlxuICogQHJldHVybiB0aGUgcmVtb3ZlZCBzY3JpcHRzIGFuZCBzaWduYXR1cmVzLCByZWFkeSB0byBiZSBhZGRlZCB0byBhIFBTQlRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuc2lnbih0eDogVXR4b1RyYW5zYWN0aW9uPGJpZ2ludD4sIHByZXZPdXRzOiBUeE91dHB1dDxiaWdpbnQ+W10pOiBQc2J0SW5wdXRVcGRhdGVbXSB7XG4gIHJldHVybiB0eC5pbnMubWFwKChpbnB1dCwgdmluKSA9PiB7XG4gICAgY29uc3QgdXBkYXRlID0gZ2V0SW5wdXRVcGRhdGUodHgsIHZpbiwgcHJldk91dHMpO1xuICAgIGlucHV0LndpdG5lc3MgPSBbXTtcbiAgICBpbnB1dC5zY3JpcHQgPSBCdWZmZXIuYWxsb2MoMCk7XG4gICAgcmV0dXJuIHVwZGF0ZTtcbiAgfSk7XG59XG4iXX0=
@@ -11,7 +11,7 @@ import { Network } from '../networks';
11
11
  * Parameters are conjunctive: if multiple parameters are set, a verification for an individual
12
12
  * signature must satisfy all of them.
13
13
  */
14
- export declare type VerificationSettings = {
14
+ export type VerificationSettings = {
15
15
  /**
16
16
  * The index of the signature to verify. Only iterates over non-empty signatures.
17
17
  */
@@ -24,7 +24,7 @@ export declare type VerificationSettings = {
24
24
  /**
25
25
  * Result for a individual signature verification
26
26
  */
27
- export declare type SignatureVerification = {
27
+ export type SignatureVerification = {
28
28
  /** Set to the public key that signed for the signature */
29
29
  signedBy: Buffer;
30
30
  /** Set to the signature buffer */
@@ -1 +1 @@
1
- {"version":3,"file":"signature.d.ts","sourceRoot":"","sources":["../../../src/bitgo/signature.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signature.d.ts","sourceRoot":"","sources":["../../../src/bitgo/signature.ts"],"names":[],"mappings":"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"}
@@ -32,7 +32,7 @@ function getSignatureVerifications(transaction, inputIndex, amount, verification
32
32
  // Unsigned input: no signatures.
33
33
  return [];
34
34
  }
35
- const parsedScript = parseInput_1.parseSignatureScript2Of3(input);
35
+ const parsedScript = (0, parseInput_1.parseSignatureScript2Of3)(input);
36
36
  if (parsedScript.scriptType === 'taprootKeyPathSpend' || parsedScript.scriptType === 'taprootScriptPathSpend') {
37
37
  if (parsedScript.scriptType === 'taprootKeyPathSpend' &&
38
38
  (verificationSettings.signatureIndex || verificationSettings.publicKey)) {
@@ -48,12 +48,21 @@ function getSignatureVerifications(transaction, inputIndex, amount, verification
48
48
  throw new Error(`prevOutputs length ${prevOutputs.length}, expected ${transaction.ins.length}`);
49
49
  }
50
50
  }
51
+ if (parsedScript.scriptType !== 'taprootKeyPathSpend' &&
52
+ parsedScript.scriptType !== 'taprootScriptPathSpend' &&
53
+ prevOutputs) {
54
+ const prevOutScript = prevOutputs[inputIndex].script;
55
+ const output = (0, outputScripts_1.getOutputScript)(parsedScript.scriptType, parsedScript.pubScript);
56
+ if (!prevOutScript.equals(output)) {
57
+ throw new Error(`prevout script ${prevOutScript.toString('hex')} does not match computed script ${output.toString('hex')}`);
58
+ }
59
+ }
51
60
  let publicKeys;
52
61
  if (parsedScript.scriptType === 'taprootKeyPathSpend') {
53
62
  if (!prevOutputs) {
54
63
  throw new Error(`prevOutputs not set`);
55
64
  }
56
- publicKeys = [taproot_1.getTaprootOutputKey(prevOutputs[inputIndex].script)];
65
+ publicKeys = [(0, taproot_1.getTaprootOutputKey)(prevOutputs[inputIndex].script)];
57
66
  }
58
67
  else {
59
68
  publicKeys = parsedScript.publicKeys.filter((buf) => verificationSettings.publicKey === undefined ||
@@ -195,7 +204,7 @@ function verifySignatureWithPublicKey(transaction, inputIndex, prevOutputs, publ
195
204
  }
196
205
  exports.verifySignatureWithPublicKey = verifySignatureWithPublicKey;
197
206
  function getDefaultSigHash(network, scriptType) {
198
- switch (networks_1.getMainnet(network)) {
207
+ switch ((0, networks_1.getMainnet)(network)) {
199
208
  case networks_1.networks.bitcoincash:
200
209
  case networks_1.networks.bitcoinsv:
201
210
  case networks_1.networks.bitcoingold:
@@ -214,7 +223,7 @@ function getDefaultSigHash(network, scriptType) {
214
223
  exports.getDefaultSigHash = getDefaultSigHash;
215
224
  function signInputP2shP2pk(txBuilder, vin, keyPair) {
216
225
  const prevOutScriptType = 'p2sh-p2pk';
217
- const { redeemScript, witnessScript } = outputScripts_1.createOutputScriptP2shP2pk(keyPair.publicKey);
226
+ const { redeemScript, witnessScript } = (0, outputScripts_1.createOutputScriptP2shP2pk)(keyPair.publicKey);
218
227
  keyPair.network = txBuilder.network;
219
228
  txBuilder.sign({
220
229
  vin,
@@ -231,12 +240,12 @@ function signInput2Of3(txBuilder, vin, scriptType, pubkeys, keyPair, cosigner, a
231
240
  let controlBlock;
232
241
  let redeemScript;
233
242
  let witnessScript;
234
- const prevOutScriptType = outputScripts_1.scriptType2Of3AsPrevOutType(scriptType);
243
+ const prevOutScriptType = (0, outputScripts_1.scriptType2Of3AsPrevOutType)(scriptType);
235
244
  if (scriptType === 'p2tr') {
236
- ({ witnessScript, controlBlock } = outputScripts_1.createSpendScriptP2tr(pubkeys, [keyPair.publicKey, cosigner]));
245
+ ({ witnessScript, controlBlock } = (0, outputScripts_1.createSpendScriptP2tr)(pubkeys, [keyPair.publicKey, cosigner]));
237
246
  }
238
247
  else {
239
- ({ redeemScript, witnessScript } = outputScripts_1.createOutputScript2of3(pubkeys, scriptType));
248
+ ({ redeemScript, witnessScript } = (0, outputScripts_1.createOutputScript2of3)(pubkeys, scriptType));
240
249
  }
241
250
  keyPair.network = txBuilder.network;
242
251
  txBuilder.sign({
@@ -251,4 +260,4 @@ function signInput2Of3(txBuilder, vin, scriptType, pubkeys, keyPair, cosigner, a
251
260
  });
252
261
  }
253
262
  exports.signInput2Of3 = signInput2Of3;
254
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmF0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JpdGdvL3NpZ25hdHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxpREFBZ0Y7QUFFaEYsdURBQW9EO0FBRXBELG1EQU95QjtBQUV6QiwwQ0FBNEQ7QUFDNUQsNENBQTZDO0FBQzdDLDZDQUF3RDtBQUN4RCx3Q0FBaUQ7QUE4QmpEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLHlCQUF5QixDQUN2QyxXQUFxQyxFQUNyQyxVQUFrQixFQUNsQixNQUFlLEVBQ2YsdUJBQTZDLEVBQUUsRUFDL0MsV0FBaUM7SUFFakMsMEJBQTBCO0lBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFO1FBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztLQUN4QztJQUVELE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUMsMEJBQTBCO0lBQzFCLElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDVixNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixVQUFVLEVBQUUsQ0FBQyxDQUFDO0tBQ3BEO0lBRUQsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDOUUsaUNBQWlDO1FBQ2pDLE9BQU8sRUFBRSxDQUFDO0tBQ1g7SUFFRCxNQUFNLFlBQVksR0FBRyxxQ0FBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVyRCxJQUFJLFlBQVksQ0FBQyxVQUFVLEtBQUsscUJBQXFCLElBQUksWUFBWSxDQUFDLFVBQVUsS0FBSyx3QkFBd0IsRUFBRTtRQUM3RyxJQUNFLFlBQVksQ0FBQyxVQUFVLEtBQUsscUJBQXFCO1lBQ2pELENBQUMs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YUFBYTtRQUNiLFlBQVksRUFBRSxNQUFNO1FBQ3BCLFlBQVk7S0FDYixDQUFDLENBQUM7QUFDTCxDQUFDO0FBaENELHNDQWdDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJJUDMySW50ZXJmYWNlIH0gZnJvbSAnYmlwMzInO1xuXG5pbXBvcnQgeyBUcmFuc2FjdGlvbiwgdGFwcm9vdCwgVHhPdXRwdXQsIFNjcmlwdFNpZ25hdHVyZSB9IGZyb20gJ2JpdGNvaW5qcy1saWInO1xuXG5pbXBvcnQgeyBVdHhvVHJhbnNhY3Rpb24gfSBmcm9tICcuL1V0eG9UcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBVdHhvVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi9VdHhvVHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7XG4gIGNyZWF0ZU91dHB1dFNjcmlwdDJvZjMsXG4gIGNyZWF0ZU91dHB1dFNjcmlwdFAyc2hQMnBrLFxuICBjcmVhdGVTcGVuZFNjcmlwdFAydHIsXG4gIFNjcmlwdFR5cGUsXG4gIFNjcmlwdFR5cGUyT2YzLFxuICBzY3JpcHRUeXBlMk9mM0FzUHJldk91dFR5cGUsXG59IGZyb20gJy4vb3V0cHV0U2NyaXB0cyc7XG5pbXBvcnQgeyBUcmlwbGUgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGdldE1haW5uZXQsIE5ldHdvcmssIG5ldHdvcmtzIH0gZnJvbSAnLi4vbmV0d29ya3MnO1xuaW1wb3J0IHsgZWNjIGFzIGVjY0xpYiB9IGZyb20gJy4uL25vYmxlX2VjYyc7XG5pbXBvcnQgeyBwYXJzZVNpZ25hdHVyZVNjcmlwdDJPZjMgfSBmcm9tICcuL3BhcnNlSW5wdXQnO1xuaW1wb3J0IHsgZ2V0VGFwcm9vdE91dHB1dEtleSB9IGZyb20gJy4uL3RhcHJvb3QnO1xuXG4vKipcbiAqIENvbnN0cmFpbnRzIGZvciBzaWduYXR1cmUgdmVyaWZpY2F0aW9ucy5cbiAqIFBhcmFtZXRlcnMgYXJlIGNvbmp1bmN0aXZlOiBpZiBtdWx0aXBsZSBwYXJhbWV0ZXJzIGFyZSBzZXQsIGEgdmVyaWZpY2F0aW9uIGZvciBhbiBpbmRpdmlkdWFsXG4gKiBzaWduYXR1cmUgbXVzdCBzYXRpc2Z5IGFsbCBvZiB0aGVtLlxuICovXG5leHBvcnQgdHlwZSBWZXJpZmljYXRpb25TZXR0aW5ncyA9IHtcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgc2lnbmF0dXJlIHRvIHZlcmlmeS4gT25seSBpdGVyYXRlcyBvdmVyIG5vbi1lbXB0eSBzaWduYXR1cmVzLlxuICAgKi9cbiAgc2lnbmF0dXJlSW5kZXg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgcHVibGljIGtleSB0byB2ZXJpZnkuXG4gICAqL1xuICBwdWJsaWNLZXk/OiBCdWZmZXI7XG59O1xuXG4vKipcbiAqIFJlc3VsdCBmb3IgYSBpbmRpdmlkdWFsIHNpZ25hdHVyZSB2ZXJpZmljYXRpb25cbiAqL1xuZXhwb3J0IHR5cGUgU2lnbmF0dXJlVmVyaWZpY2F0aW9uID1cbiAgfCB7XG4gICAgICAvKiogU2V0IHRvIHRoZSBwdWJsaWMga2V5IHRoYXQgc2lnbmVkIGZvciB0aGUgc2lnbmF0dXJlICovXG4gICAgICBzaWduZWRCeTogQnVmZmVyO1xuICAgICAgLyoqIFNldCB0byB0aGUgc2lnbmF0dXJlIGJ1ZmZlciAqL1xuICAgICAgc2lnbmF0dXJlOiBCdWZmZXI7XG4gICAgfVxuICB8IHsgc2lnbmVkQnk6IHVuZGVmaW5lZDsgc2lnbmF0dXJlOiB1bmRlZmluZWQgfTtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCAtIHVzZSB7QHNlZSB2ZXJpZnlTaWduYXR1cmVzV2l0aFB1YmxpY0tleXN9IGluc3RlYWRcbiAqIEdldCBzaWduYXR1cmUgdmVyaWZpY2F0aW9ucyBmb3IgbXVsdHNpZyB0cmFuc2FjdGlvblxuICogQHBhcmFtIHRyYW5zYWN0aW9uXG4gKiBAcGFyYW0gaW5wdXRJbmRleFxuICogQHBhcmFtIGFtb3VudCAtIG11c3QgYmUgc2V0IGZvciBzZWd3aXQgdHJhbnNhY3Rpb25zIGFuZCBCSVAxNDMgdHJhbnNhY3Rpb25zXG4gKiBAcGFyYW0gdmVyaWZpY2F0aW9uU2V0dGluZ3NcbiAqIEBwYXJhbSBwcmV2T3V0cHV0cyAtIG11c3QgYmUgc2V0IGZvciBwMnRyIGFuZCBwMnRyTXVzaWcyIHRyYW5zYWN0aW9uc1xuICogQHJldHVybnMgU2lnbmF0dXJlVmVyaWZpY2F0aW9uW10gLSBpbiBvcmRlciBvZiBwYXJzZWQgbm9uLWVtcHR5IHNpZ25hdHVyZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNpZ25hdHVyZVZlcmlmaWNhdGlvbnM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHRyYW5zYWN0aW9uOiBVdHhvVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gIGlucHV0SW5kZXg6IG51bWJlcixcbiAgYW1vdW50OiBUTnVtYmVyLFxuICB2ZXJpZmljYXRpb25TZXR0aW5nczogVmVyaWZpY2F0aW9uU2V0dGluZ3MgPSB7fSxcbiAgcHJldk91dHB1dHM/OiBUeE91dHB1dDxUTnVtYmVyPltdXG4pOiBTaWduYXR1cmVWZXJpZmljYXRpb25bXSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmICghdHJhbnNhY3Rpb24uaW5zKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHRyYW5zYWN0aW9uYCk7XG4gIH1cblxuICBjb25zdCBpbnB1dCA9IHRyYW5zYWN0aW9uLmluc1tpbnB1dEluZGV4XTtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKCFpbnB1dCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgbm8gaW5wdXQgYXQgaW5kZXggJHtpbnB1dEluZGV4fWApO1xuICB9XG5cbiAgaWYgKCghaW5wdXQuc2NyaXB0IHx8IGlucHV0LnNjcmlwdC5sZW5ndGggPT09IDApICYmIGlucHV0LndpdG5lc3MubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gVW5zaWduZWQgaW5wdXQ6IG5vIHNpZ25hdHVyZXMuXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgcGFyc2VkU2NyaXB0ID0gcGFyc2VTaWduYXR1cmVTY3JpcHQyT2YzKGlucHV0KTtcblxuICBpZiAocGFyc2VkU2NyaXB0LnNjcmlwdFR5cGUgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJyB8fCBwYXJzZWRTY3JpcHQuc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnKSB7XG4gICAgaWYgKFxuICAgICAgcGFyc2VkU2NyaXB0LnNjcmlwdFR5cGUgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJyAmJlxuICAgICAgKHZlcmlmaWNhdGlvblNldHRpbmdzLnNpZ25hdHVyZUluZGV4IHx8IHZlcmlmaWNhdGlvblNldHRpbmdzLnB1YmxpY0tleSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgc2lnbmF0dXJlSW5kZXggYW5kIHB1YmxpY0tleSBwYXJhbWV0ZXJzIG5vdCBzdXBwb3J0ZWQgZm9yIHRhcHJvb3RLZXlQYXRoU3BlbmRgKTtcbiAgICB9XG5cbiAgICBpZiAodmVyaWZpY2F0aW9uU2V0dGluZ3Muc2lnbmF0dXJlSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBzaWduYXR1cmVJbmRleCBwYXJhbWV0ZXIgbm90IHN1cHBvcnRlZCBmb3IgdGFwcm9vdFNjcmlwdFBhdGhTcGVuZGApO1xuICAgIH1cblxuICAgIGlmICghcHJldk91dHB1dHMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcHJldk91dHB1dHMgbm90IHNldGApO1xuICAgIH1cblxuICAgIGlmIChwcmV2T3V0cHV0cy5sZW5ndGggIT09IHRyYW5zYWN0aW9uLmlucy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcHJldk91dHB1dHMgbGVuZ3RoICR7cHJldk91dHB1dHMubGVuZ3RofSwgZXhwZWN0ZWQgJHt0cmFuc2FjdGlvbi5pbnMubGVuZ3RofWApO1xuICAgIH1cbiAgfVxuXG4gIGxldCBwdWJsaWNLZXlzOiBCdWZmZXJbXTtcbiAgaWYgKHBhcnNlZFNjcmlwdC5zY3JpcHRUeXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcpIHtcbiAgICBpZiAoIXByZXZPdXRwdXRzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHByZXZPdXRwdXRzIG5vdCBzZXRgKTtcbiAgICB9XG4gICAgcHVibGljS2V5cyA9IFtnZXRUYXByb290T3V0cHV0S2V5KHByZXZPdXRwdXRzW2lucHV0SW5kZXhdLnNjcmlwdCldO1xuICB9IGVsc2Uge1xuICAgIHB1YmxpY0tleXMgPSBwYXJzZWRTY3JpcHQucHVibGljS2V5cy5maWx0ZXIoXG4gICAgICAoYnVmKSA9PlxuICAgICAgICB2ZXJpZmljYXRpb25TZXR0aW5ncy5wdWJsaWNLZXkgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICB2ZXJpZmljYXRpb25TZXR0aW5ncy5wdWJsaWNLZXkuZXF1YWxzKGJ1ZikgfHxcbiAgICAgICAgdmVyaWZpY2F0aW9uU2V0dGluZ3MucHVibGljS2V5LnNsaWNlKDEpLmVxdWFscyhidWYpXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHNpZ25hdHVyZXMgPSBwYXJzZWRTY3JpcHQuc2lnbmF0dXJlc1xuICAgIC5maWx0ZXIoKHMpID0+IHMgJiYgcy5sZW5ndGgpXG4gICAgLmZpbHRlcigocywgaSkgPT4gdmVyaWZpY2F0aW9uU2V0dGluZ3Muc2lnbmF0dXJlSW5kZXggPT09IHVuZGVmaW5lZCB8fCB2ZXJpZmljYXRpb25TZXR0aW5ncy5zaWduYXR1cmVJbmRleCA9PT0gaSk7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZXMubWFwKChzaWduYXR1cmVCdWZmZXIpOiBTaWduYXR1cmVWZXJpZmljYXRpb24gPT4ge1xuICAgIGlmIChzaWduYXR1cmVCdWZmZXIgPT09IDAgfHwgc2lnbmF0dXJlQnVmZmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHsgc2lnbmVkQnk6IHVuZGVmaW5lZCwgc2lnbmF0dXJlOiB1bmRlZmluZWQgfTtcbiAgICB9XG5cbiAgICBsZXQgaGFzaFR5cGUgPSBUcmFuc2FjdGlvbi5TSUdIQVNIX0RFRkFVTFQ7XG5cbiAgICBpZiAoc2lnbmF0dXJlQnVmZmVyLmxlbmd0aCA9PT0gNjUpIHtcbiAgICAgIGhhc2hUeXBlID0gc2lnbmF0dXJlQnVmZmVyW3NpZ25hdHVyZUJ1ZmZlci5sZW5ndGggLSAxXTtcbiAgICAgIHNpZ25hdHVyZUJ1ZmZlciA9IHNpZ25hdHVyZUJ1ZmZlci5zbGljZSgwLCAtMSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcnNlZFNjcmlwdC5zY3JpcHRUeXBlID09PSAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCcpIHtcbiAgICAgIGlmICghcHJldk91dHB1dHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcmV2T3V0cHV0cyBub3Qgc2V0YCk7XG4gICAgICB9XG4gICAgICBjb25zdCB7IGNvbnRyb2xCbG9jaywgcHViU2NyaXB0IH0gPSBwYXJzZWRTY3JpcHQ7XG4gICAgICBjb25zdCBsZWFmSGFzaCA9IHRhcHJvb3QuZ2V0VGFwbGVhZkhhc2goZWNjTGliLCBjb250cm9sQmxvY2ssIHB1YlNjcmlwdCk7XG4gICAgICBjb25zdCBzaWduYXR1cmVIYXNoID0gdHJhbnNhY3Rpb24uaGFzaEZvcldpdG5lc3NWMShcbiAgICAgICAgaW5wdXRJbmRleCxcbiAgICAgICAgcHJldk91dHB1dHMubWFwKCh7IHNjcmlwdCB9KSA9PiBzY3JpcHQpLFxuICAgICAgICBwcmV2T3V0cHV0cy5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpLFxuICAgICAgICBoYXNoVHlwZSxcbiAgICAgICAgbGVhZkhhc2hcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHNpZ25lZEJ5ID0gcHVibGljS2V5cy5maWx0ZXIoXG4gICAgICAgIChrKSA9PiBCdWZmZXIuaXNCdWZmZXIoc2lnbmF0dXJlQnVmZmVyKSAmJiBlY2NMaWIudmVyaWZ5U2Nobm9ycihzaWduYXR1cmVIYXNoLCBrLCBzaWduYXR1cmVCdWZmZXIpXG4gICAgICApO1xuXG4gICAgICBpZiAoc2lnbmVkQnkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB7IHNpZ25lZEJ5OiB1bmRlZmluZWQsIHNpZ25hdHVyZTogdW5kZWZpbmVkIH07XG4gICAgICB9XG4gICAgICBpZiAoc2lnbmVkQnkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiB7IHNpZ25lZEJ5OiBzaWduZWRCeVswXSwgc2lnbmF0dXJlOiBzaWduYXR1cmVCdWZmZXIgfTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihgaWxsZWdhbCBzdGF0ZTogc2lnbmVkIGJ5IG11bHRpcGxlIHB1YmxpYyBrZXlzYCk7XG4gICAgfSBlbHNlIGlmIChwYXJzZWRTY3JpcHQuc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnKSB7XG4gICAgICBpZiAoIXByZXZPdXRwdXRzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgcHJldk91dHB1dHMgbm90IHNldGApO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2lnbmF0dXJlSGFzaCA9IHRyYW5zYWN0aW9uLmhhc2hGb3JXaXRuZXNzVjEoXG4gICAgICAgIGlucHV0SW5kZXgsXG4gICAgICAgIHByZXZPdXRwdXRzLm1hcCgoeyBzY3JpcHQgfSkgPT4gc2NyaXB0KSxcbiAgICAgICAgcHJldk91dHB1dHMubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKSxcbiAgICAgICAgaGFzaFR5cGVcbiAgICAgICk7XG4gICAgICBjb25zdCByZXN1bHQgPSBlY2NMaWIudmVyaWZ5U2Nobm9ycihzaWduYXR1cmVIYXNoLCBwdWJsaWNLZXlzWzBdLCBzaWduYXR1cmVCdWZmZXIpO1xuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICA/IHsgc2lnbmVkQnk6IHB1YmxpY0tleXNbMF0sIHNpZ25hdHVyZTogc2lnbmF0dXJlQnVmZmVyIH1cbiAgICAgICAgOiB7IHNpZ25lZEJ5OiB1bmRlZmluZWQsIHNpZ25hdHVyZTogdW5kZWZpbmVkIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNsaWNlIHRoZSBsYXN0IGJ5dGUgZnJvbSB0aGUgc2lnbmF0dXJlIGhhc2ggaW5wdXQgYmVjYXVzZSBpdCdzIHRoZSBoYXNoIHR5cGVcbiAgICAgIGNvbnN0IHsgc2lnbmF0dXJlLCBoYXNoVHlwZSB9ID0gU2NyaXB0U2lnbmF0dXJlLmRlY29kZShzaWduYXR1cmVCdWZmZXIpO1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb25IYXNoID1cbiAgICAgICAgcGFyc2VkU2NyaXB0LnNjcmlwdFR5cGUgPT09ICdwMnNoUDJ3c2gnIHx8IHBhcnNlZFNjcmlwdC5zY3JpcHRUeXBlID09PSAncDJ3c2gnXG4gICAgICAgICAgPyB0cmFuc2FjdGlvbi5oYXNoRm9yV2l0bmVzc1YwKGlucHV0SW5kZXgsIHBhcnNlZFNjcmlwdC5wdWJTY3JpcHQsIGFtb3VudCwgaGFzaFR5cGUpXG4gICAgICAgICAgOiB0cmFuc2FjdGlvbi5oYXNoRm9yU2lnbmF0dXJlQnlOZXR3b3JrKGlucHV0SW5kZXgsIHBhcnNlZFNjcmlwdC5wdWJTY3JpcHQsIGFtb3VudCwgaGFzaFR5cGUpO1xuICAgICAgY29uc3Qgc2lnbmVkQnkgPSBwdWJsaWNLZXlzLmZpbHRlcigocHVibGljS2V5KSA9PlxuICAgICAgICBlY2NMaWIudmVyaWZ5KFxuICAgICAgICAgIHRyYW5zYWN0aW9uSGFzaCxcbiAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgICAgc2lnbmF0dXJlLFxuICAgICAgICAgIC8qXG4gICAgICAgICAgICBTdHJpY3QgdmVyaWZpY2F0aW9uIChyZXF1aXJlIGxvd2VyLVMgdmFsdWUpLCBhcyByZXF1aXJlZCBieSBCSVAtMDE0NlxuICAgICAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4vYmlwcy9ibG9iL21hc3Rlci9iaXAtMDE0Ni5tZWRpYXdpa2lcbiAgICAgICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRjb2luLWNvcmUvc2VjcDI1NmsxL2Jsb2IvYWM4M2JlMzMvaW5jbHVkZS9zZWNwMjU2azEuaCNMNDc4LUw1MDhcbiAgICAgICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRjb2luanMvdGlueS1zZWNwMjU2azEvYmxvYi92MS4xLjYvanMuanMjTDIzMS1MMjMzXG4gICAgICAgICAgKi9cbiAgICAgICAgICB0cnVlXG4gICAgICAgIClcbiAgICAgICk7XG5cbiAgICAgIGlmIChzaWduZWRCeS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHsgc2lnbmVkQnk6IHVuZGVmaW5lZCwgc2lnbmF0dXJlOiB1bmRlZmluZWQgfTtcbiAgICAgIH1cbiAgICAgIGlmIChzaWduZWRCeS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHsgc2lnbmVkQnk6IHNpZ25lZEJ5WzBdLCBzaWduYXR1cmU6IHNpZ25hdHVyZUJ1ZmZlciB9O1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbGxlZ2FsIHN0YXRlOiBzaWduZWQgYnkgbXVsdGlwbGUgcHVibGljIGtleXNgKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIHVzZSB7QHNlZSB2ZXJpZnlTaWduYXR1cmVXaXRoUHVibGljS2V5c30gaW5zdGVhZFxuICogQHBhcmFtIHRyYW5zYWN0aW9uXG4gKiBAcGFyYW0gaW5wdXRJbmRleFxuICogQHBhcmFtIGFtb3VudFxuICogQHBhcmFtIHZlcmlmaWNhdGlvblNldHRpbmdzIC0gaWYgcHVibGljS2V5IGlzIHNwZWNpZmllZCwgcmV0dXJucyB0cnVlIGlmZiBhbnkgc2lnbmF0dXJlIGlzIHNpZ25lZCBieSBwdWJsaWNLZXkuXG4gKiBAcGFyYW0gcHJldk91dHB1dHMgLSBtdXN0IGJlIHNldCBmb3IgcDJ0ciB0cmFuc2FjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeVNpZ25hdHVyZTxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdHJhbnNhY3Rpb246IFV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgaW5wdXRJbmRleDogbnVtYmVyLFxuICBhbW91bnQ6IFROdW1iZXIsXG4gIHZlcmlmaWNhdGlvblNldHRpbmdzOiBWZXJpZmljYXRpb25TZXR0aW5ncyA9IHt9LFxuICBwcmV2T3V0cHV0cz86IFR4T3V0cHV0PFROdW1iZXI+W11cbik6IGJvb2xlYW4ge1xuICBjb25zdCBzaWduYXR1cmVWZXJpZmljYXRpb25zID0gZ2V0U2lnbmF0dXJlVmVyaWZpY2F0aW9ucyhcbiAgICB0cmFuc2FjdGlvbixcbiAgICBpbnB1dEluZGV4LFxuICAgIGFtb3VudCxcbiAgICB2ZXJpZmljYXRpb25TZXR0aW5ncyxcbiAgICBwcmV2T3V0cHV0c1xuICApLmZpbHRlcihcbiAgICAodikgPT5cbiAgICAgIC8vIElmIG5vIHB1YmxpY0tleSBpcyBzZXQgaW4gdmVyaWZpY2F0aW9uU2V0dGluZ3MsIGFsbCBzaWduYXR1cmVzIG11c3QgYmUgdmFsaWQuXG4gICAgICAvLyBPdGhlcndpc2UsIGEgc2luZ2xlIHZhbGlkIHNpZ25hdHVyZSBieSB0aGUgc3BlY2lmaWVkIHB1YmtleSBpcyBzdWZmaWNpZW50LlxuICAgICAgdmVyaWZpY2F0aW9uU2V0dGluZ3MucHVibGljS2V5ID09PSB1bmRlZmluZWQgfHxcbiAgICAgICh2LnNpZ25lZEJ5ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgKHZlcmlmaWNhdGlvblNldHRpbmdzLnB1YmxpY0tleS5lcXVhbHModi5zaWduZWRCeSkgfHxcbiAgICAgICAgICB2ZXJpZmljYXRpb25TZXR0aW5ncy5wdWJsaWNLZXkuc2xpY2UoMSkuZXF1YWxzKHYuc2lnbmVkQnkpKSlcbiAgKTtcblxuICByZXR1cm4gc2lnbmF0dXJlVmVyaWZpY2F0aW9ucy5sZW5ndGggPiAwICYmIHNpZ25hdHVyZVZlcmlmaWNhdGlvbnMuZXZlcnkoKHYpID0+IHYuc2lnbmVkQnkgIT09IHVuZGVmaW5lZCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHZcbiAqIEBwYXJhbSBwdWJsaWNLZXlcbiAqIEByZXR1cm4gdHJ1ZSBpZmYgc2lnbmF0dXJlIGlzIGJ5IHB1YmxpY0tleSAob3IgeG9ubHkgdmFyaWFudCBvZiBwdWJsaWNLZXkpXG4gKi9cbmZ1bmN0aW9uIGlzU2lnbmF0dXJlQnlQdWJsaWNLZXkodjogU2lnbmF0dXJlVmVyaWZpY2F0aW9uLCBwdWJsaWNLZXk6IEJ1ZmZlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgICEhdi5zaWduZWRCeSAmJlxuICAgICh2LnNpZ25lZEJ5LmVxdWFscyhwdWJsaWNLZXkpIHx8XG4gICAgICAvKiBmb3IgcDJ0ciBzaWduYXR1cmVzLCB3ZSBwYXNzIHRoZSBwdWJrZXkgaW4gMzMtYnl0ZSBmb3JtYXQgcmVjb3ZlciBpdCBmcm9tIHRoZSBzaWduYXR1cmUgaW4gMzItYnl0ZSBmb3JtYXQgKi9cbiAgICAgIChwdWJsaWNLZXkubGVuZ3RoID09PSAzMyAmJiBpc1NpZ25hdHVyZUJ5UHVibGljS2V5KHYsIHB1YmxpY0tleS5zbGljZSgxKSkpKVxuICApO1xufVxuXG4vKipcbiAqIEBwYXJhbSB0cmFuc2FjdGlvblxuICogQHBhcmFtIGlucHV0SW5kZXhcbiAqIEBwYXJhbSBwcmV2T3V0cHV0c1xuICogQHBhcmFtIHB1YmxpY0tleXNcbiAqIEByZXR1cm4gYXJyYXkgd2l0aCBzaWduYXR1cmUgY29ycmVzcG9uZGluZyB0byBuLXRoIGtleSwgdW5kZWZpbmVkIGlmIG5vIG1hdGNoIGZvdW5kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaWduYXR1cmVzV2l0aFB1YmxpY0tleXM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHRyYW5zYWN0aW9uOiBVdHhvVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gIGlucHV0SW5kZXg6IG51bWJlcixcbiAgcHJldk91dHB1dHM6IFR4T3V0cHV0PFROdW1iZXI+W10sXG4gIHB1YmxpY0tleXM6IEJ1ZmZlcltdXG4pOiBBcnJheTxCdWZmZXIgfCB1bmRlZmluZWQ+IHtcbiAgaWYgKHRyYW5zYWN0aW9uLmlucy5sZW5ndGggIT09IHByZXZPdXRwdXRzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW5wdXQgbGVuZ3RoIG11c3QgbWF0Y2ggcHJldk91dHB1dHMgbGVuZ3RoYCk7XG4gIH1cblxuICBjb25zdCBzaWduYXR1cmVWZXJpZmljYXRpb25zID0gZ2V0U2lnbmF0dXJlVmVyaWZpY2F0aW9ucyhcbiAgICB0cmFuc2FjdGlvbixcbiAgICBpbnB1dEluZGV4LFxuICAgIHByZXZPdXRwdXRzW2lucHV0SW5kZXhdLnZhbHVlLFxuICAgIHt9LFxuICAgIHByZXZPdXRwdXRzXG4gICk7XG5cbiAgcmV0dXJuIHB1YmxpY0tleXMubWFwKChwdWJsaWNLZXkpID0+IHtcbiAgICBjb25zdCB2ID0gc2lnbmF0dXJlVmVyaWZpY2F0aW9ucy5maW5kKCh2KSA9PiBpc1NpZ25hdHVyZUJ5UHVibGljS2V5KHYsIHB1YmxpY0tleSkpO1xuICAgIHJldHVybiB2ID8gdi5zaWduYXR1cmUgOiB1bmRlZmluZWQ7XG4gIH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB0cmFuc2FjdGlvblxuICogQHBhcmFtIGlucHV0SW5kZXhcbiAqIEBwYXJhbSBwcmV2T3V0cHV0cyAtIHRyYW5zYWN0aW9uIG91dHB1dHMgZm9yIGlucHV0c1xuICogQHBhcmFtIHB1YmxpY0tleXMgLSBwdWJsaWMga2V5cyB0byBjaGVjayBzaWduYXR1cmVzIGZvclxuICogQHJldHVybiBhcnJheSBvZiBib29sZWFucyBpbmRpY2F0aW5nIGEgdmFsaWQgc2lnbmF0dXJlIGZvciBldmVyeSBwdWJrZXkgaW4gX3B1YmxpY0tleXNfXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlTaWduYXR1cmVXaXRoUHVibGljS2V5czxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdHJhbnNhY3Rpb246IFV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgaW5wdXRJbmRleDogbnVtYmVyLFxuICBwcmV2T3V0cHV0czogVHhPdXRwdXQ8VE51bWJlcj5bXSxcbiAgcHVibGljS2V5czogQnVmZmVyW11cbik6IGJvb2xlYW5bXSB7XG4gIHJldHVybiBnZXRTaWduYXR1cmVzV2l0aFB1YmxpY0tleXModHJhbnNhY3Rpb24sIGlucHV0SW5kZXgsIHByZXZPdXRwdXRzLCBwdWJsaWNLZXlzKS5tYXAoKHMpID0+IHMgIT09IHVuZGVmaW5lZCk7XG59XG5cbi8qKlxuICogV3JhcHBlciBmb3Ige0BzZWUgdmVyaWZ5U2lnbmF0dXJlV2l0aFB1YmxpY0tleXN9IGZvciBzaW5nbGUgcHVia2V5XG4gKiBAcGFyYW0gdHJhbnNhY3Rpb25cbiAqIEBwYXJhbSBpbnB1dEluZGV4XG4gKiBAcGFyYW0gcHJldk91dHB1dHNcbiAqIEBwYXJhbSBwdWJsaWNLZXlcbiAqIEByZXR1cm4gdHJ1ZSBpZmYgc2lnbmF0dXJlIGlzIHZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlTaWduYXR1cmVXaXRoUHVibGljS2V5PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0cmFuc2FjdGlvbjogVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+LFxuICBpbnB1dEluZGV4OiBudW1iZXIsXG4gIHByZXZPdXRwdXRzOiBUeE91dHB1dDxUTnVtYmVyPltdLFxuICBwdWJsaWNLZXk6IEJ1ZmZlclxuKTogYm9vbGVhbiB7XG4gIHJldHVybiB2ZXJpZnlTaWduYXR1cmVXaXRoUHVibGljS2V5cyh0cmFuc2FjdGlvbiwgaW5wdXRJbmRleCwgcHJldk91dHB1dHMsIFtwdWJsaWNLZXldKVswXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRTaWdIYXNoKG5ldHdvcms6IE5ldHdvcmssIHNjcmlwdFR5cGU/OiBTY3JpcHRUeXBlKTogbnVtYmVyIHtcbiAgc3dpdGNoIChnZXRNYWlubmV0KG5ldHdvcmspKSB7XG4gICAgY2FzZSBuZXR3b3Jrcy5iaXRjb2luY2FzaDpcbiAgICBjYXNlIG5ldHdvcmtzLmJpdGNvaW5zdjpcbiAgICBjYXNlIG5ldHdvcmtzLmJpdGNvaW5nb2xkOlxuICAgIGNhc2UgbmV0d29ya3MuZWNhc2g6XG4gICAgICByZXR1cm4gVHJhbnNhY3Rpb24uU0lHSEFTSF9BTEwgfCBVdHhvVHJhbnNhY3Rpb24uU0lHSEFTSF9GT1JLSUQ7XG4gICAgZGVmYXVsdDpcbiAgICAgIHN3aXRjaCAoc2NyaXB0VHlwZSkge1xuICAgICAgICBjYXNlICdwMnRyJzpcbiAgICAgICAgY2FzZSAncDJ0ck11c2lnMic6XG4gICAgICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uLlNJR0hBU0hfREVGQVVMVDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gVHJhbnNhY3Rpb24uU0lHSEFTSF9BTEw7XG4gICAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25JbnB1dFAyc2hQMnBrPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0eEJ1aWxkZXI6IFV0eG9UcmFuc2FjdGlvbkJ1aWxkZXI8VE51bWJlcj4sXG4gIHZpbjogbnVtYmVyLFxuICBrZXlQYWlyOiBCSVAzMkludGVyZmFjZVxuKTogdm9pZCB7XG4gIGNvbnN0IHByZXZPdXRTY3JpcHRUeXBlID0gJ3Ayc2gtcDJwayc7XG4gIGNvbnN0IHsgcmVkZWVtU2NyaXB0LCB3aXRuZXNzU2NyaXB0IH0gPSBjcmVhdGVPdXRwdXRTY3JpcHRQMnNoUDJwayhrZXlQYWlyLnB1YmxpY0tleSk7XG4gIGtleVBhaXIubmV0d29yayA9IHR4QnVpbGRlci5uZXR3b3JrO1xuXG4gIHR4QnVpbGRlci5zaWduKHtcbiAgICB2aW4sXG4gICAgcHJldk91dFNjcmlwdFR5cGUsXG4gICAga2V5UGFpcixcbiAgICBoYXNoVHlwZTogZ2V0RGVmYXVsdFNpZ0hhc2godHhCdWlsZGVyLm5ldHdvcmsgYXMgTmV0d29yayksXG4gICAgcmVkZWVtU2NyaXB0LFxuICAgIHdpdG5lc3NTY3JpcHQsXG4gICAgd2l0bmVzc1ZhbHVlOiB1bmRlZmluZWQsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbklucHV0Mk9mMzxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdHhCdWlsZGVyOiBVdHhvVHJhbnNhY3Rpb25CdWlsZGVyPFROdW1iZXI+LFxuICB2aW46IG51bWJlcixcbiAgc2NyaXB0VHlwZTogU2NyaXB0VHlwZTJPZjMsXG4gIHB1YmtleXM6IFRyaXBsZTxCdWZmZXI+LFxuICBrZXlQYWlyOiBCSVAzMkludGVyZmFjZSxcbiAgY29zaWduZXI6IEJ1ZmZlcixcbiAgYW1vdW50OiBUTnVtYmVyXG4pOiB2b2lkIHtcbiAgbGV0IGNvbnRyb2xCbG9jaztcbiAgbGV0IHJlZGVlbVNjcmlwdDtcbiAgbGV0IHdpdG5lc3NTY3JpcHQ7XG5cbiAgY29uc3QgcHJldk91dFNjcmlwdFR5cGUgPSBzY3JpcHRUeXBlMk9mM0FzUHJldk91dFR5cGUoc2NyaXB0VHlwZSk7XG4gIGlmIChzY3JpcHRUeXBlID09PSAncDJ0cicpIHtcbiAgICAoeyB3aXRuZXNzU2NyaXB0LCBjb250cm9sQmxvY2sgfSA9IGNyZWF0ZVNwZW5kU2NyaXB0UDJ0cihwdWJrZXlzLCBba2V5UGFpci5wdWJsaWNLZXksIGNvc2lnbmVyXSkpO1xuICB9IGVsc2Uge1xuICAgICh7IHJlZGVlbVNjcmlwdCwgd2l0bmVzc1NjcmlwdCB9ID0gY3JlYXRlT3V0cHV0U2NyaXB0Mm9mMyhwdWJrZXlzLCBzY3JpcHRUeXBlKSk7XG4gIH1cblxuICBrZXlQYWlyLm5ldHdvcmsgPSB0eEJ1aWxkZXIubmV0d29yaztcblxuICB0eEJ1aWxkZXIuc2lnbih7XG4gICAgdmluLFxuICAgIHByZXZPdXRTY3JpcHRUeXBlLFxuICAgIGtleVBhaXIsXG4gICAgaGFzaFR5cGU6IGdldERlZmF1bHRTaWdIYXNoKHR4QnVpbGRlci5uZXR3b3JrIGFzIE5ldHdvcmssIHNjcmlwdFR5cGUpLFxuICAgIHJlZGVlbVNjcmlwdCxcbiAgICB3aXRuZXNzU2NyaXB0LFxuICAgIHdpdG5lc3NWYWx1ZTogYW1vdW50LFxuICAgIGNvbnRyb2xCbG9jayxcbiAgfSk7XG59XG4iXX0=
263
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmF0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JpdGdvL3NpZ25hdHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxpREFBZ0Y7QUFFaEYsdURBQW9EO0FBRXBELG1EQVF5QjtBQUV6QiwwQ0FBNEQ7QUFDNUQsNENBQTZDO0FBQzdDLDZDQUF3RDtBQUN4RCx3Q0FBaUQ7QUE4QmpEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLHlCQUF5QixDQUN2QyxXQUFxQyxFQUNyQyxVQUFrQixFQUNsQixNQUFlLEVBQ2YsdUJBQTZDLEVBQUUsRUFDL0MsV0FBaUM7SUFFakMsMEJBQTBCO0lBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFO1FBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztLQUN4QztJQUVELE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUMsMEJBQTBCO0lBQzFCLElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDVixNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixVQUFVLEVBQUUsQ0FBQyxDQUFDO0tBQ3BEO0lBRUQsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDOUUsaUNBQWlDO1FBQ2pDLE9BQU8sRUFBRSxDQUFDO0tBQ1g7SUFFRCxNQUFNLFlBQVksR0FBRyxJQUFBLHFDQUF3QixFQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXJELElBQUksWUFBWSxDQUFDLFVBQVUsS0FBSyxxQkFBcUIsSUFBSSxZQUFZLENBQUMsVUFBVSxLQUFLLHdCQUF3QixFQUFFO1FBQzdHLElBQ0UsWUFBWSxDQUFDLFVBQVUsS0FBSyxxQkFBcUI7WUFDakQs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QUFDO0lBQ2xFLElBQUksVUFBVSxLQUFLLE1BQU0sRUFBRTtRQUN6QixDQUFDLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxHQUFHLElBQUEscUNBQXFCLEVBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbkc7U0FBTTtRQUNMLENBQUMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLEdBQUcsSUFBQSxzQ0FBc0IsRUFBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztLQUNqRjtJQUVELE9BQU8sQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQztJQUVwQyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ2IsR0FBRztRQUNILGlCQUFpQjtRQUNqQixPQUFPO1FBQ1AsUUFBUSxFQUFFLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxPQUFrQixFQUFFLFVBQVUsQ0FBQztRQUNyRSxZQUFZO1FBQ1osYUFBYTtRQUNiLFlBQVksRUFBRSxNQUFNO1FBQ3BCLFlBQVk7S0FDYixDQUFDLENBQUM7QUFDTCxDQUFDO0FBaENELHNDQWdDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJJUDMySW50ZXJmYWNlIH0gZnJvbSAnYmlwMzInO1xuXG5pbXBvcnQgeyBUcmFuc2FjdGlvbiwgdGFwcm9vdCwgVHhPdXRwdXQsIFNjcmlwdFNpZ25hdHVyZSB9IGZyb20gJ2JpdGNvaW5qcy1saWInO1xuXG5pbXBvcnQgeyBVdHhvVHJhbnNhY3Rpb24gfSBmcm9tICcuL1V0eG9UcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBVdHhvVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi9VdHhvVHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7XG4gIGNyZWF0ZU91dHB1dFNjcmlwdDJvZjMsXG4gIGNyZWF0ZU91dHB1dFNjcmlwdFAyc2hQMnBrLFxuICBjcmVhdGVTcGVuZFNjcmlwdFAydHIsXG4gIGdldE91dHB1dFNjcmlwdCxcbiAgU2NyaXB0VHlwZSxcbiAgU2NyaXB0VHlwZTJPZjMsXG4gIHNjcmlwdFR5cGUyT2YzQXNQcmV2T3V0VHlwZSxcbn0gZnJvbSAnLi9vdXRwdXRTY3JpcHRzJztcbmltcG9ydCB7IFRyaXBsZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0TWFpbm5ldCwgTmV0d29yaywgbmV0d29ya3MgfSBmcm9tICcuLi9uZXR3b3Jrcyc7XG5pbXBvcnQgeyBlY2MgYXMgZWNjTGliIH0gZnJvbSAnLi4vbm9ibGVfZWNjJztcbmltcG9ydCB7IHBhcnNlU2lnbmF0dXJlU2NyaXB0Mk9mMyB9IGZyb20gJy4vcGFyc2VJbnB1dCc7XG5pbXBvcnQgeyBnZXRUYXByb290T3V0cHV0S2V5IH0gZnJvbSAnLi4vdGFwcm9vdCc7XG5cbi8qKlxuICogQ29uc3RyYWludHMgZm9yIHNpZ25hdHVyZSB2ZXJpZmljYXRpb25zLlxuICogUGFyYW1ldGVycyBhcmUgY29uanVuY3RpdmU6IGlmIG11bHRpcGxlIHBhcmFtZXRlcnMgYXJlIHNldCwgYSB2ZXJpZmljYXRpb24gZm9yIGFuIGluZGl2aWR1YWxcbiAqIHNpZ25hdHVyZSBtdXN0IHNhdGlzZnkgYWxsIG9mIHRoZW0uXG4gKi9cbmV4cG9ydCB0eXBlIFZlcmlmaWNhdGlvblNldHRpbmdzID0ge1xuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBzaWduYXR1cmUgdG8gdmVyaWZ5LiBPbmx5IGl0ZXJhdGVzIG92ZXIgbm9uLWVtcHR5IHNpZ25hdHVyZXMuXG4gICAqL1xuICBzaWduYXR1cmVJbmRleD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBwdWJsaWMga2V5IHRvIHZlcmlmeS5cbiAgICovXG4gIHB1YmxpY0tleT86IEJ1ZmZlcjtcbn07XG5cbi8qKlxuICogUmVzdWx0IGZvciBhIGluZGl2aWR1YWwgc2lnbmF0dXJlIHZlcmlmaWNhdGlvblxuICovXG5leHBvcnQgdHlwZSBTaWduYXR1cmVWZXJpZmljYXRpb24gPVxuICB8IHtcbiAgICAgIC8qKiBTZXQgdG8gdGhlIHB1YmxpYyBrZXkgdGhhdCBzaWduZWQgZm9yIHRoZSBzaWduYXR1cmUgKi9cbiAgICAgIHNpZ25lZEJ5OiBCdWZmZXI7XG4gICAgICAvKiogU2V0IHRvIHRoZSBzaWduYXR1cmUgYnVmZmVyICovXG4gICAgICBzaWduYXR1cmU6IEJ1ZmZlcjtcbiAgICB9XG4gIHwgeyBzaWduZWRCeTogdW5kZWZpbmVkOyBzaWduYXR1cmU6IHVuZGVmaW5lZCB9O1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIC0gdXNlIHtAc2VlIHZlcmlmeVNpZ25hdHVyZXNXaXRoUHVibGljS2V5c30gaW5zdGVhZFxuICogR2V0IHNpZ25hdHVyZSB2ZXJpZmljYXRpb25zIGZvciBtdWx0c2lnIHRyYW5zYWN0aW9uXG4gKiBAcGFyYW0gdHJhbnNhY3Rpb25cbiAqIEBwYXJhbSBpbnB1dEluZGV4XG4gKiBAcGFyYW0gYW1vdW50IC0gbXVzdCBiZSBzZXQgZm9yIHNlZ3dpdCB0cmFuc2FjdGlvbnMgYW5kIEJJUDE0MyB0cmFuc2FjdGlvbnNcbiAqIEBwYXJhbSB2ZXJpZmljYXRpb25TZXR0aW5nc1xuICogQHBhcmFtIHByZXZPdXRwdXRzIC0gbXVzdCBiZSBzZXQgZm9yIHAydHIgYW5kIHAydHJNdXNpZzIgdHJhbnNhY3Rpb25zXG4gKiBAcmV0dXJucyBTaWduYXR1cmVWZXJpZmljYXRpb25bXSAtIGluIG9yZGVyIG9mIHBhcnNlZCBub24tZW1wdHkgc2lnbmF0dXJlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2lnbmF0dXJlVmVyaWZpY2F0aW9uczxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdHJhbnNhY3Rpb246IFV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgaW5wdXRJbmRleDogbnVtYmVyLFxuICBhbW91bnQ6IFROdW1iZXIsXG4gIHZlcmlmaWNhdGlvblNldHRpbmdzOiBWZXJpZmljYXRpb25TZXR0aW5ncyA9IHt9LFxuICBwcmV2T3V0cHV0cz86IFR4T3V0cHV0PFROdW1iZXI+W11cbik6IFNpZ25hdHVyZVZlcmlmaWNhdGlvbltdIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKCF0cmFuc2FjdGlvbi5pbnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgdHJhbnNhY3Rpb25gKTtcbiAgfVxuXG4gIGNvbnN0IGlucHV0ID0gdHJhbnNhY3Rpb24uaW5zW2lucHV0SW5kZXhdO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAoIWlucHV0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBubyBpbnB1dCBhdCBpbmRleCAke2lucHV0SW5kZXh9YCk7XG4gIH1cblxuICBpZiAoKCFpbnB1dC5zY3JpcHQgfHwgaW5wdXQuc2NyaXB0Lmxlbmd0aCA9PT0gMCkgJiYgaW5wdXQud2l0bmVzcy5sZW5ndGggPT09IDApIHtcbiAgICAvLyBVbnNpZ25lZCBpbnB1dDogbm8gc2lnbmF0dXJlcy5cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBwYXJzZWRTY3JpcHQgPSBwYXJzZVNpZ25hdHVyZVNjcmlwdDJPZjMoaW5wdXQpO1xuXG4gIGlmIChwYXJzZWRTY3JpcHQuc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnIHx8IHBhcnNlZFNjcmlwdC5zY3JpcHRUeXBlID09PSAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCcpIHtcbiAgICBpZiAoXG4gICAgICBwYXJzZWRTY3JpcHQuc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnICYmXG4gICAgICAodmVyaWZpY2F0aW9uU2V0dGluZ3Muc2lnbmF0dXJlSW5kZXggfHwgdmVyaWZpY2F0aW9uU2V0dGluZ3MucHVibGljS2V5KVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBzaWduYXR1cmVJbmRleCBhbmQgcHVibGljS2V5IHBhcmFtZXRlcnMgbm90IHN1cHBvcnRlZCBmb3IgdGFwcm9vdEtleVBhdGhTcGVuZGApO1xuICAgIH1cblxuICAgIGlmICh2ZXJpZmljYXRpb25TZXR0aW5ncy5zaWduYXR1cmVJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHNpZ25hdHVyZUluZGV4IHBhcmFtZXRlciBub3Qgc3VwcG9ydGVkIGZvciB0YXByb290U2NyaXB0UGF0aFNwZW5kYCk7XG4gICAgfVxuXG4gICAgaWYgKCFwcmV2T3V0cHV0cykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcmV2T3V0cHV0cyBub3Qgc2V0YCk7XG4gICAgfVxuXG4gICAgaWYgKHByZXZPdXRwdXRzLmxlbmd0aCAhPT0gdHJhbnNhY3Rpb24uaW5zLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcmV2T3V0cHV0cyBsZW5ndGggJHtwcmV2T3V0cHV0cy5sZW5ndGh9LCBleHBlY3RlZCAke3RyYW5zYWN0aW9uLmlucy5sZW5ndGh9YCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKFxuICAgIHBhcnNlZFNjcmlwdC5zY3JpcHRUeXBlICE9PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgJiZcbiAgICBwYXJzZWRTY3JpcHQuc2NyaXB0VHlwZSAhPT0gJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnICYmXG4gICAgcHJldk91dHB1dHNcbiAgKSB7XG4gICAgY29uc3QgcHJldk91dFNjcmlwdCA9IHByZXZPdXRwdXRzW2lucHV0SW5kZXhdLnNjcmlwdDtcblxuICAgIGNvbnN0IG91dHB1dCA9IGdldE91dHB1dFNjcmlwdChwYXJzZWRTY3JpcHQuc2NyaXB0VHlwZSwgcGFyc2VkU2NyaXB0LnB1YlNjcmlwdCk7XG4gICAgaWYgKCFwcmV2T3V0U2NyaXB0LmVxdWFscyhvdXRwdXQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBwcmV2b3V0IHNjcmlwdCAke3ByZXZPdXRTY3JpcHQudG9TdHJpbmcoJ2hleCcpfSBkb2VzIG5vdCBtYXRjaCBjb21wdXRlZCBzY3JpcHQgJHtvdXRwdXQudG9TdHJpbmcoJ2hleCcpfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgbGV0IHB1YmxpY0tleXM6IEJ1ZmZlcltdO1xuICBpZiAocGFyc2VkU2NyaXB0LnNjcmlwdFR5cGUgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJykge1xuICAgIGlmICghcHJldk91dHB1dHMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcHJldk91dHB1dHMgbm90IHNldGApO1xuICAgIH1cbiAgICBwdWJsaWNLZXlzID0gW2dldFRhcHJvb3RPdXRwdXRLZXkocHJldk91dHB1dHNbaW5wdXRJbmRleF0uc2NyaXB0KV07XG4gIH0gZWxzZSB7XG4gICAgcHVibGljS2V5cyA9IHBhcnNlZFNjcmlwdC5wdWJsaWNLZXlzLmZpbHRlcihcbiAgICAgIChidWYpID0+XG4gICAgICAgIHZlcmlmaWNhdGlvblNldHRpbmdzLnB1YmxpY0tleSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIHZlcmlmaWNhdGlvblNldHRpbmdzLnB1YmxpY0tleS5lcXVhbHMoYnVmKSB8fFxuICAgICAgICB2ZXJpZmljYXRpb25TZXR0aW5ncy5wdWJsaWNLZXkuc2xpY2UoMSkuZXF1YWxzKGJ1ZilcbiAgICApO1xuICB9XG5cbiAgY29uc3Qgc2lnbmF0dXJlcyA9IHBhcnNlZFNjcmlwdC5zaWduYXR1cmVzXG4gICAgLmZpbHRlcigocykgPT4gcyAmJiBzLmxlbmd0aClcbiAgICAuZmlsdGVyKChzLCBpKSA9PiB2ZXJpZmljYXRpb25TZXR0aW5ncy5zaWduYXR1cmVJbmRleCA9PT0gdW5kZWZpbmVkIHx8IHZlcmlmaWNhdGlvblNldHRpbmdzLnNpZ25hdHVyZUluZGV4ID09PSBpKTtcblxuICByZXR1cm4gc2lnbmF0dXJlcy5tYXAoKHNpZ25hdHVyZUJ1ZmZlcik6IFNpZ25hdHVyZVZlcmlmaWNhdGlvbiA9PiB7XG4gICAgaWYgKHNpZ25hdHVyZUJ1ZmZlciA9PT0gMCB8fCBzaWduYXR1cmVCdWZmZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4geyBzaWduZWRCeTogdW5kZWZpbmVkLCBzaWduYXR1cmU6IHVuZGVmaW5lZCB9O1xuICAgIH1cblxuICAgIGxldCBoYXNoVHlwZSA9IFRyYW5zYWN0aW9uLlNJR0hBU0hfREVGQVVMVDtcblxuICAgIGlmIChzaWduYXR1cmVCdWZmZXIubGVuZ3RoID09PSA2NSkge1xuICAgICAgaGFzaFR5cGUgPSBzaWduYXR1cmVCdWZmZXJbc2lnbmF0dXJlQnVmZmVyLmxlbmd0aCAtIDFdO1xuICAgICAgc2lnbmF0dXJlQnVmZmVyID0gc2lnbmF0dXJlQnVmZmVyLnNsaWNlKDAsIC0xKTtcbiAgICB9XG5cbiAgICBpZiAocGFyc2VkU2NyaXB0LnNjcmlwdFR5cGUgPT09ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJykge1xuICAgICAgaWYgKCFwcmV2T3V0cHV0cykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHByZXZPdXRwdXRzIG5vdCBzZXRgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgY29udHJvbEJsb2NrLCBwdWJTY3JpcHQgfSA9IHBhcnNlZFNjcmlwdDtcbiAgICAgIGNvbnN0IGxlYWZIYXNoID0gdGFwcm9vdC5nZXRUYXBsZWFmSGFzaChlY2NMaWIsIGNvbnRyb2xCbG9jaywgcHViU2NyaXB0KTtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZUhhc2ggPSB0cmFuc2FjdGlvbi5oYXNoRm9yV2l0bmVzc1YxKFxuICAgICAgICBpbnB1dEluZGV4LFxuICAgICAgICBwcmV2T3V0cHV0cy5tYXAoKHsgc2NyaXB0IH0pID0+IHNjcmlwdCksXG4gICAgICAgIHByZXZPdXRwdXRzLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSksXG4gICAgICAgIGhhc2hUeXBlLFxuICAgICAgICBsZWFmSGFzaFxuICAgICAgKTtcblxuICAgICAgY29uc3Qgc2lnbmVkQnkgPSBwdWJsaWNLZXlzLmZpbHRlcihcbiAgICAgICAgKGspID0+IEJ1ZmZlci5pc0J1ZmZlcihzaWduYXR1cmVCdWZmZXIpICYmIGVjY0xpYi52ZXJpZnlTY2hub3JyKHNpZ25hdHVyZUhhc2gsIGssIHNpZ25hdHVyZUJ1ZmZlcilcbiAgICAgICk7XG5cbiAgICAgIGlmIChzaWduZWRCeS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHsgc2lnbmVkQnk6IHVuZGVmaW5lZCwgc2lnbmF0dXJlOiB1bmRlZmluZWQgfTtcbiAgICAgIH1cbiAgICAgIGlmIChzaWduZWRCeS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHsgc2lnbmVkQnk6IHNpZ25lZEJ5WzBdLCBzaWduYXR1cmU6IHNpZ25hdHVyZUJ1ZmZlciB9O1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbGxlZ2FsIHN0YXRlOiBzaWduZWQgYnkgbXVsdGlwbGUgcHVibGljIGtleXNgKTtcbiAgICB9IGVsc2UgaWYgKHBhcnNlZFNjcmlwdC5zY3JpcHRUeXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcpIHtcbiAgICAgIGlmICghcHJldk91dHB1dHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcmV2T3V0cHV0cyBub3Qgc2V0YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzaWduYXR1cmVIYXNoID0gdHJhbnNhY3Rpb24uaGFzaEZvcldpdG5lc3NWMShcbiAgICAgICAgaW5wdXRJbmRleCxcbiAgICAgICAgcHJldk91dHB1dHMubWFwKCh7IHNjcmlwdCB9KSA9PiBzY3JpcHQpLFxuICAgICAgICBwcmV2T3V0cHV0cy5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpLFxuICAgICAgICBoYXNoVHlwZVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGVjY0xpYi52ZXJpZnlTY2hub3JyKHNpZ25hdHVyZUhhc2gsIHB1YmxpY0tleXNbMF0sIHNpZ25hdHVyZUJ1ZmZlcik7XG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgID8geyBzaWduZWRCeTogcHVibGljS2V5c1swXSwgc2lnbmF0dXJlOiBzaWduYXR1cmVCdWZmZXIgfVxuICAgICAgICA6IHsgc2lnbmVkQnk6IHVuZGVmaW5lZCwgc2lnbmF0dXJlOiB1bmRlZmluZWQgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc2xpY2UgdGhlIGxhc3QgYnl0ZSBmcm9tIHRoZSBzaWduYXR1cmUgaGFzaCBpbnB1dCBiZWNhdXNlIGl0J3MgdGhlIGhhc2ggdHlwZVxuICAgICAgY29uc3QgeyBzaWduYXR1cmUsIGhhc2hUeXBlIH0gPSBTY3JpcHRTaWduYXR1cmUuZGVjb2RlKHNpZ25hdHVyZUJ1ZmZlcik7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbkhhc2ggPVxuICAgICAgICBwYXJzZWRTY3JpcHQuc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMndzaCcgfHwgcGFyc2VkU2NyaXB0LnNjcmlwdFR5cGUgPT09ICdwMndzaCdcbiAgICAgICAgICA/IHRyYW5zYWN0aW9uLmhhc2hGb3JXaXRuZXNzVjAoaW5wdXRJbmRleCwgcGFyc2VkU2NyaXB0LnB1YlNjcmlwdCwgYW1vdW50LCBoYXNoVHlwZSlcbiAgICAgICAgICA6IHRyYW5zYWN0aW9uLmhhc2hGb3JTaWduYXR1cmVCeU5ldHdvcmsoaW5wdXRJbmRleCwgcGFyc2VkU2NyaXB0LnB1YlNjcmlwdCwgYW1vdW50LCBoYXNoVHlwZSk7XG4gICAgICBjb25zdCBzaWduZWRCeSA9IHB1YmxpY0tleXMuZmlsdGVyKChwdWJsaWNLZXkpID0+XG4gICAgICAgIGVjY0xpYi52ZXJpZnkoXG4gICAgICAgICAgdHJhbnNhY3Rpb25IYXNoLFxuICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgICBzaWduYXR1cmUsXG4gICAgICAgICAgLypcbiAgICAgICAgICAgIFN0cmljdCB2ZXJpZmljYXRpb24gKHJlcXVpcmUgbG93ZXItUyB2YWx1ZSksIGFzIHJlcXVpcmVkIGJ5IEJJUC0wMTQ2XG4gICAgICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbi9iaXBzL2Jsb2IvbWFzdGVyL2JpcC0wMTQ2Lm1lZGlhd2lraVxuICAgICAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4tY29yZS9zZWNwMjU2azEvYmxvYi9hYzgzYmUzMy9pbmNsdWRlL3NlY3AyNTZrMS5oI0w0NzgtTDUwOFxuICAgICAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW5qcy90aW55LXNlY3AyNTZrMS9ibG9iL3YxLjEuNi9qcy5qcyNMMjMxLUwyMzNcbiAgICAgICAgICAqL1xuICAgICAgICAgIHRydWVcbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgICAgaWYgKHNpZ25lZEJ5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4geyBzaWduZWRCeTogdW5kZWZpbmVkLCBzaWduYXR1cmU6IHVuZGVmaW5lZCB9O1xuICAgICAgfVxuICAgICAgaWYgKHNpZ25lZEJ5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4geyBzaWduZWRCeTogc2lnbmVkQnlbMF0sIHNpZ25hdHVyZTogc2lnbmF0dXJlQnVmZmVyIH07XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGlsbGVnYWwgc3RhdGU6IHNpZ25lZCBieSBtdWx0aXBsZSBwdWJsaWMga2V5c2ApO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgdXNlIHtAc2VlIHZlcmlmeVNpZ25hdHVyZVdpdGhQdWJsaWNLZXlzfSBpbnN0ZWFkXG4gKiBAcGFyYW0gdHJhbnNhY3Rpb25cbiAqIEBwYXJhbSBpbnB1dEluZGV4XG4gKiBAcGFyYW0gYW1vdW50XG4gKiBAcGFyYW0gdmVyaWZpY2F0aW9uU2V0dGluZ3MgLSBpZiBwdWJsaWNLZXkgaXMgc3BlY2lmaWVkLCByZXR1cm5zIHRydWUgaWZmIGFueSBzaWduYXR1cmUgaXMgc2lnbmVkIGJ5IHB1YmxpY0tleS5cbiAqIEBwYXJhbSBwcmV2T3V0cHV0cyAtIG11c3QgYmUgc2V0IGZvciBwMnRyIHRyYW5zYWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5U2lnbmF0dXJlPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0cmFuc2FjdGlvbjogVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+LFxuICBpbnB1dEluZGV4OiBudW1iZXIsXG4gIGFtb3VudDogVE51bWJlcixcbiAgdmVyaWZpY2F0aW9uU2V0dGluZ3M6IFZlcmlmaWNhdGlvblNldHRpbmdzID0ge30sXG4gIHByZXZPdXRwdXRzPzogVHhPdXRwdXQ8VE51bWJlcj5bXVxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHNpZ25hdHVyZVZlcmlmaWNhdGlvbnMgPSBnZXRTaWduYXR1cmVWZXJpZmljYXRpb25zKFxuICAgIHRyYW5zYWN0aW9uLFxuICAgIGlucHV0SW5kZXgsXG4gICAgYW1vdW50LFxuICAgIHZlcmlmaWNhdGlvblNldHRpbmdzLFxuICAgIHByZXZPdXRwdXRzXG4gICkuZmlsdGVyKFxuICAgICh2KSA9PlxuICAgICAgLy8gSWYgbm8gcHVibGljS2V5IGlzIHNldCBpbiB2ZXJpZmljYXRpb25TZXR0aW5ncywgYWxsIHNpZ25hdHVyZXMgbXVzdCBiZSB2YWxpZC5cbiAgICAgIC8vIE90aGVyd2lzZSwgYSBzaW5nbGUgdmFsaWQgc2lnbmF0dXJlIGJ5IHRoZSBzcGVjaWZpZWQgcHVia2V5IGlzIHN1ZmZpY2llbnQuXG4gICAgICB2ZXJpZmljYXRpb25TZXR0aW5ncy5wdWJsaWNLZXkgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgKHYuc2lnbmVkQnkgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAodmVyaWZpY2F0aW9uU2V0dGluZ3MucHVibGljS2V5LmVxdWFscyh2LnNpZ25lZEJ5KSB8fFxuICAgICAgICAgIHZlcmlmaWNhdGlvblNldHRpbmdzLnB1YmxpY0tleS5zbGljZSgxKS5lcXVhbHModi5zaWduZWRCeSkpKVxuICApO1xuXG4gIHJldHVybiBzaWduYXR1cmVWZXJpZmljYXRpb25zLmxlbmd0aCA+IDAgJiYgc2lnbmF0dXJlVmVyaWZpY2F0aW9ucy5ldmVyeSgodikgPT4gdi5zaWduZWRCeSAhPT0gdW5kZWZpbmVkKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gdlxuICogQHBhcmFtIHB1YmxpY0tleVxuICogQHJldHVybiB0cnVlIGlmZiBzaWduYXR1cmUgaXMgYnkgcHVibGljS2V5IChvciB4b25seSB2YXJpYW50IG9mIHB1YmxpY0tleSlcbiAqL1xuZnVuY3Rpb24gaXNTaWduYXR1cmVCeVB1YmxpY0tleSh2OiBTaWduYXR1cmVWZXJpZmljYXRpb24sIHB1YmxpY0tleTogQnVmZmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgISF2LnNpZ25lZEJ5ICYmXG4gICAgKHYuc2lnbmVkQnkuZXF1YWxzKHB1YmxpY0tleSkgfHxcbiAgICAgIC8qIGZvciBwMnRyIHNpZ25hdHVyZXMsIHdlIHBhc3MgdGhlIHB1YmtleSBpbiAzMy1ieXRlIGZvcm1hdCByZWNvdmVyIGl0IGZyb20gdGhlIHNpZ25hdHVyZSBpbiAzMi1ieXRlIGZvcm1hdCAqL1xuICAgICAgKHB1YmxpY0tleS5sZW5ndGggPT09IDMzICYmIGlzU2lnbmF0dXJlQnlQdWJsaWNLZXkodiwgcHVibGljS2V5LnNsaWNlKDEpKSkpXG4gICk7XG59XG5cbi8qKlxuICogQHBhcmFtIHRyYW5zYWN0aW9uXG4gKiBAcGFyYW0gaW5wdXRJbmRleFxuICogQHBhcmFtIHByZXZPdXRwdXRzXG4gKiBAcGFyYW0gcHVibGljS2V5c1xuICogQHJldHVybiBhcnJheSB3aXRoIHNpZ25hdHVyZSBjb3JyZXNwb25kaW5nIHRvIG4tdGgga2V5LCB1bmRlZmluZWQgaWYgbm8gbWF0Y2ggZm91bmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNpZ25hdHVyZXNXaXRoUHVibGljS2V5czxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdHJhbnNhY3Rpb246IFV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgaW5wdXRJbmRleDogbnVtYmVyLFxuICBwcmV2T3V0cHV0czogVHhPdXRwdXQ8VE51bWJlcj5bXSxcbiAgcHVibGljS2V5czogQnVmZmVyW11cbik6IEFycmF5PEJ1ZmZlciB8IHVuZGVmaW5lZD4ge1xuICBpZiAodHJhbnNhY3Rpb24uaW5zLmxlbmd0aCAhPT0gcHJldk91dHB1dHMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnB1dCBsZW5ndGggbXVzdCBtYXRjaCBwcmV2T3V0cHV0cyBsZW5ndGhgKTtcbiAgfVxuXG4gIGNvbnN0IHNpZ25hdHVyZVZlcmlmaWNhdGlvbnMgPSBnZXRTaWduYXR1cmVWZXJpZmljYXRpb25zKFxuICAgIHRyYW5zYWN0aW9uLFxuICAgIGlucHV0SW5kZXgsXG4gICAgcHJldk91dHB1dHNbaW5wdXRJbmRleF0udmFsdWUsXG4gICAge30sXG4gICAgcHJldk91dHB1dHNcbiAgKTtcblxuICByZXR1cm4gcHVibGljS2V5cy5tYXAoKHB1YmxpY0tleSkgPT4ge1xuICAgIGNvbnN0IHYgPSBzaWduYXR1cmVWZXJpZmljYXRpb25zLmZpbmQoKHYpID0+IGlzU2lnbmF0dXJlQnlQdWJsaWNLZXkodiwgcHVibGljS2V5KSk7XG4gICAgcmV0dXJuIHYgPyB2LnNpZ25hdHVyZSA6IHVuZGVmaW5lZDtcbiAgfSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHRyYW5zYWN0aW9uXG4gKiBAcGFyYW0gaW5wdXRJbmRleFxuICogQHBhcmFtIHByZXZPdXRwdXRzIC0gdHJhbnNhY3Rpb24gb3V0cHV0cyBmb3IgaW5wdXRzXG4gKiBAcGFyYW0gcHVibGljS2V5cyAtIHB1YmxpYyBrZXlzIHRvIGNoZWNrIHNpZ25hdHVyZXMgZm9yXG4gKiBAcmV0dXJuIGFycmF5IG9mIGJvb2xlYW5zIGluZGljYXRpbmcgYSB2YWxpZCBzaWduYXR1cmUgZm9yIGV2ZXJ5IHB1YmtleSBpbiBfcHVibGljS2V5c19cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeVNpZ25hdHVyZVdpdGhQdWJsaWNLZXlzPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0cmFuc2FjdGlvbjogVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+LFxuICBpbnB1dEluZGV4OiBudW1iZXIsXG4gIHByZXZPdXRwdXRzOiBUeE91dHB1dDxUTnVtYmVyPltdLFxuICBwdWJsaWNLZXlzOiBCdWZmZXJbXVxuKTogYm9vbGVhbltdIHtcbiAgcmV0dXJuIGdldFNpZ25hdHVyZXNXaXRoUHVibGljS2V5cyh0cmFuc2FjdGlvbiwgaW5wdXRJbmRleCwgcHJldk91dHB1dHMsIHB1YmxpY0tleXMpLm1hcCgocykgPT4gcyAhPT0gdW5kZWZpbmVkKTtcbn1cblxuLyoqXG4gKiBXcmFwcGVyIGZvciB7QHNlZSB2ZXJpZnlTaWduYXR1cmVXaXRoUHVibGljS2V5c30gZm9yIHNpbmdsZSBwdWJrZXlcbiAqIEBwYXJhbSB0cmFuc2FjdGlvblxuICogQHBhcmFtIGlucHV0SW5kZXhcbiAqIEBwYXJhbSBwcmV2T3V0cHV0c1xuICogQHBhcmFtIHB1YmxpY0tleVxuICogQHJldHVybiB0cnVlIGlmZiBzaWduYXR1cmUgaXMgdmFsaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeVNpZ25hdHVyZVdpdGhQdWJsaWNLZXk8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHRyYW5zYWN0aW9uOiBVdHhvVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gIGlucHV0SW5kZXg6IG51bWJlcixcbiAgcHJldk91dHB1dHM6IFR4T3V0cHV0PFROdW1iZXI+W10sXG4gIHB1YmxpY0tleTogQnVmZmVyXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIHZlcmlmeVNpZ25hdHVyZVdpdGhQdWJsaWNLZXlzKHRyYW5zYWN0aW9uLCBpbnB1dEluZGV4LCBwcmV2T3V0cHV0cywgW3B1YmxpY0tleV0pWzBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFNpZ0hhc2gobmV0d29yazogTmV0d29yaywgc2NyaXB0VHlwZT86IFNjcmlwdFR5cGUpOiBudW1iZXIge1xuICBzd2l0Y2ggKGdldE1haW5uZXQobmV0d29yaykpIHtcbiAgICBjYXNlIG5ldHdvcmtzLmJpdGNvaW5jYXNoOlxuICAgIGNhc2UgbmV0d29ya3MuYml0Y29pbnN2OlxuICAgIGNhc2UgbmV0d29ya3MuYml0Y29pbmdvbGQ6XG4gICAgY2FzZSBuZXR3b3Jrcy5lY2FzaDpcbiAgICAgIHJldHVybiBUcmFuc2FjdGlvbi5TSUdIQVNIX0FMTCB8IFV0eG9UcmFuc2FjdGlvbi5TSUdIQVNIX0ZPUktJRDtcbiAgICBkZWZhdWx0OlxuICAgICAgc3dpdGNoIChzY3JpcHRUeXBlKSB7XG4gICAgICAgIGNhc2UgJ3AydHInOlxuICAgICAgICBjYXNlICdwMnRyTXVzaWcyJzpcbiAgICAgICAgICByZXR1cm4gVHJhbnNhY3Rpb24uU0lHSEFTSF9ERUZBVUxUO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBUcmFuc2FjdGlvbi5TSUdIQVNIX0FMTDtcbiAgICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbklucHV0UDJzaFAycGs8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHR4QnVpbGRlcjogVXR4b1RyYW5zYWN0aW9uQnVpbGRlcjxUTnVtYmVyPixcbiAgdmluOiBudW1iZXIsXG4gIGtleVBhaXI6IEJJUDMySW50ZXJmYWNlXG4pOiB2b2lkIHtcbiAgY29uc3QgcHJldk91dFNjcmlwdFR5cGUgPSAncDJzaC1wMnBrJztcbiAgY29uc3QgeyByZWRlZW1TY3JpcHQsIHdpdG5lc3NTY3JpcHQgfSA9IGNyZWF0ZU91dHB1dFNjcmlwdFAyc2hQMnBrKGtleVBhaXIucHVibGljS2V5KTtcbiAga2V5UGFpci5uZXR3b3JrID0gdHhCdWlsZGVyLm5ldHdvcms7XG5cbiAgdHhCdWlsZGVyLnNpZ24oe1xuICAgIHZpbixcbiAgICBwcmV2T3V0U2NyaXB0VHlwZSxcbiAgICBrZXlQYWlyLFxuICAgIGhhc2hUeXBlOiBnZXREZWZhdWx0U2lnSGFzaCh0eEJ1aWxkZXIubmV0d29yayBhcyBOZXR3b3JrKSxcbiAgICByZWRlZW1TY3JpcHQsXG4gICAgd2l0bmVzc1NjcmlwdCxcbiAgICB3aXRuZXNzVmFsdWU6IHVuZGVmaW5lZCxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduSW5wdXQyT2YzPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0eEJ1aWxkZXI6IFV0eG9UcmFuc2FjdGlvbkJ1aWxkZXI8VE51bWJlcj4sXG4gIHZpbjogbnVtYmVyLFxuICBzY3JpcHRUeXBlOiBTY3JpcHRUeXBlMk9mMyxcbiAgcHVia2V5czogVHJpcGxlPEJ1ZmZlcj4sXG4gIGtleVBhaXI6IEJJUDMySW50ZXJmYWNlLFxuICBjb3NpZ25lcjogQnVmZmVyLFxuICBhbW91bnQ6IFROdW1iZXJcbik6IHZvaWQge1xuICBsZXQgY29udHJvbEJsb2NrO1xuICBsZXQgcmVkZWVtU2NyaXB0O1xuICBsZXQgd2l0bmVzc1NjcmlwdDtcblxuICBjb25zdCBwcmV2T3V0U2NyaXB0VHlwZSA9IHNjcmlwdFR5cGUyT2YzQXNQcmV2T3V0VHlwZShzY3JpcHRUeXBlKTtcbiAgaWYgKHNjcmlwdFR5cGUgPT09ICdwMnRyJykge1xuICAgICh7IHdpdG5lc3NTY3JpcHQsIGNvbnRyb2xCbG9jayB9ID0gY3JlYXRlU3BlbmRTY3JpcHRQMnRyKHB1YmtleXMsIFtrZXlQYWlyLnB1YmxpY0tleSwgY29zaWduZXJdKSk7XG4gIH0gZWxzZSB7XG4gICAgKHsgcmVkZWVtU2NyaXB0LCB3aXRuZXNzU2NyaXB0IH0gPSBjcmVhdGVPdXRwdXRTY3JpcHQyb2YzKHB1YmtleXMsIHNjcmlwdFR5cGUpKTtcbiAgfVxuXG4gIGtleVBhaXIubmV0d29yayA9IHR4QnVpbGRlci5uZXR3b3JrO1xuXG4gIHR4QnVpbGRlci5zaWduKHtcbiAgICB2aW4sXG4gICAgcHJldk91dFNjcmlwdFR5cGUsXG4gICAga2V5UGFpcixcbiAgICBoYXNoVHlwZTogZ2V0RGVmYXVsdFNpZ0hhc2godHhCdWlsZGVyLm5ldHdvcmsgYXMgTmV0d29yaywgc2NyaXB0VHlwZSksXG4gICAgcmVkZWVtU2NyaXB0LFxuICAgIHdpdG5lc3NTY3JpcHQsXG4gICAgd2l0bmVzc1ZhbHVlOiBhbW91bnQsXG4gICAgY29udHJvbEJsb2NrLFxuICB9KTtcbn1cbiJdfQ==