@bitgo-beta/abstract-utxo 1.6.1-alpha.239 → 1.6.1-alpha.240

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 (129) hide show
  1. package/.eslintrc.js +6 -0
  2. package/CHANGELOG.md +61 -0
  3. package/dist/src/abstractUtxoCoin.d.ts +36 -48
  4. package/dist/src/abstractUtxoCoin.d.ts.map +1 -1
  5. package/dist/src/abstractUtxoCoin.js +18 -159
  6. package/dist/src/core/descriptor/psbt/assertSatisfiable.js +2 -3
  7. package/dist/src/core/descriptor/psbt/createPsbt.js +4 -5
  8. package/dist/src/core/descriptor/psbt/findDescriptors.js +2 -3
  9. package/dist/src/core/descriptor/psbt/parse.d.ts.map +1 -1
  10. package/dist/src/core/descriptor/psbt/parse.js +1 -1
  11. package/dist/src/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
  12. package/dist/src/descriptor/assertDescriptorWalletAddress.js +1 -1
  13. package/dist/src/descriptor/builder/builder.d.ts +1 -1
  14. package/dist/src/descriptor/builder/builder.d.ts.map +1 -1
  15. package/dist/src/descriptor/builder/builder.js +4 -2
  16. package/dist/src/descriptor/builder/parse.d.ts.map +1 -1
  17. package/dist/src/descriptor/builder/parse.js +34 -23
  18. package/dist/src/descriptor/descriptorWallet.d.ts +8 -8
  19. package/dist/src/descriptor/descriptorWallet.d.ts.map +1 -1
  20. package/dist/src/descriptor/descriptorWallet.js +4 -8
  21. package/dist/src/descriptor/index.d.ts +2 -1
  22. package/dist/src/descriptor/index.d.ts.map +1 -1
  23. package/dist/src/descriptor/index.js +4 -4
  24. package/dist/src/descriptor/validatePolicy.d.ts +14 -0
  25. package/dist/src/descriptor/validatePolicy.d.ts.map +1 -0
  26. package/dist/src/descriptor/validatePolicy.js +48 -0
  27. package/dist/src/index.d.ts +1 -3
  28. package/dist/src/index.d.ts.map +1 -1
  29. package/dist/src/index.js +2 -6
  30. package/dist/src/keychains.d.ts +46 -8
  31. package/dist/src/keychains.d.ts.map +1 -1
  32. package/dist/src/keychains.js +89 -5
  33. package/dist/src/recovery/RecoveryProvider.d.ts.map +1 -1
  34. package/dist/src/recovery/RecoveryProvider.js +1 -1
  35. package/dist/src/recovery/backupKeyRecovery.d.ts +4 -4
  36. package/dist/src/recovery/backupKeyRecovery.d.ts.map +1 -1
  37. package/dist/src/recovery/backupKeyRecovery.js +6 -7
  38. package/dist/src/recovery/crossChainRecovery.d.ts +1 -1
  39. package/dist/src/recovery/crossChainRecovery.d.ts.map +1 -1
  40. package/dist/src/recovery/crossChainRecovery.js +4 -4
  41. package/dist/src/sign.d.ts.map +1 -1
  42. package/dist/src/sign.js +1 -1
  43. package/dist/src/transaction/common/verifyPayGoAmount.d.ts +1 -0
  44. package/dist/src/transaction/common/verifyPayGoAmount.d.ts.map +1 -0
  45. package/dist/src/transaction/common/verifyPayGoAmount.js +1 -0
  46. package/dist/src/transaction/descriptor/index.d.ts +4 -0
  47. package/dist/src/transaction/descriptor/index.d.ts.map +1 -1
  48. package/dist/src/transaction/descriptor/index.js +10 -2
  49. package/dist/src/transaction/descriptor/parse.d.ts +14 -0
  50. package/dist/src/transaction/descriptor/parse.d.ts.map +1 -0
  51. package/dist/src/transaction/descriptor/parse.js +115 -0
  52. package/dist/src/transaction/descriptor/parseToAmountType.d.ts +13 -0
  53. package/dist/src/transaction/descriptor/parseToAmountType.d.ts.map +1 -0
  54. package/dist/src/transaction/descriptor/parseToAmountType.js +60 -0
  55. package/dist/src/transaction/descriptor/recipient.d.ts +5 -0
  56. package/dist/src/transaction/descriptor/recipient.d.ts.map +1 -0
  57. package/dist/src/transaction/descriptor/recipient.js +3 -0
  58. package/dist/src/transaction/descriptor/signPsbt.d.ts +25 -0
  59. package/dist/src/transaction/descriptor/signPsbt.d.ts.map +1 -0
  60. package/dist/src/transaction/descriptor/signPsbt.js +43 -0
  61. package/dist/src/transaction/descriptor/verifyTransaction.d.ts +33 -0
  62. package/dist/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -0
  63. package/dist/src/transaction/descriptor/verifyTransaction.js +105 -0
  64. package/dist/src/transaction/explainTransaction.d.ts +1 -1
  65. package/dist/src/transaction/explainTransaction.d.ts.map +1 -1
  66. package/dist/src/transaction/explainTransaction.js +15 -3
  67. package/dist/src/transaction/fetchInputs.js +2 -3
  68. package/dist/src/transaction/fixedScript/explainTransaction.js +7 -11
  69. package/dist/src/transaction/fixedScript/index.d.ts +2 -1
  70. package/dist/src/transaction/fixedScript/index.d.ts.map +1 -1
  71. package/dist/src/transaction/fixedScript/index.js +4 -2
  72. package/dist/src/transaction/fixedScript/parseOutput.d.ts +8 -4
  73. package/dist/src/transaction/fixedScript/parseOutput.d.ts.map +1 -1
  74. package/dist/src/transaction/fixedScript/parseOutput.js +2 -3
  75. package/dist/src/transaction/fixedScript/parseTransaction.d.ts +5 -7
  76. package/dist/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
  77. package/dist/src/transaction/fixedScript/parseTransaction.js +34 -38
  78. package/dist/src/transaction/fixedScript/signTransaction.d.ts +17 -0
  79. package/dist/src/transaction/fixedScript/signTransaction.d.ts.map +1 -0
  80. package/dist/src/transaction/fixedScript/signTransaction.js +138 -0
  81. package/dist/src/transaction/fixedScript/verifyTransaction.js +2 -3
  82. package/dist/src/transaction/outputDifference.d.ts +40 -0
  83. package/dist/src/transaction/outputDifference.d.ts.map +1 -0
  84. package/dist/src/transaction/outputDifference.js +47 -0
  85. package/dist/src/transaction/parseTransaction.js +3 -2
  86. package/dist/src/transaction/recipient.d.ts +1 -0
  87. package/dist/src/transaction/recipient.d.ts.map +1 -1
  88. package/dist/src/transaction/recipient.js +9 -1
  89. package/dist/src/transaction/signTransaction.d.ts +6 -0
  90. package/dist/src/transaction/signTransaction.d.ts.map +1 -0
  91. package/dist/src/transaction/signTransaction.js +102 -0
  92. package/dist/src/transaction/verifyTransaction.d.ts.map +1 -1
  93. package/dist/src/transaction/verifyTransaction.js +5 -2
  94. package/dist/src/verifyKey.d.ts +3 -2
  95. package/dist/src/verifyKey.d.ts.map +1 -1
  96. package/dist/src/verifyKey.js +3 -7
  97. package/dist/src/wallet.d.ts +12 -0
  98. package/dist/src/wallet.d.ts.map +1 -0
  99. package/dist/src/wallet.js +3 -0
  100. package/dist/test/core/descriptor/descriptor.utils.d.ts +2 -1
  101. package/dist/test/core/descriptor/descriptor.utils.d.ts.map +1 -1
  102. package/dist/test/core/descriptor/descriptor.utils.js +1 -1
  103. package/dist/test/core/descriptor/psbt/mock.utils.js +4 -6
  104. package/dist/test/core/descriptor/psbt/parse.js +3 -3
  105. package/dist/test/core/key.utils.d.ts.map +1 -1
  106. package/dist/test/core/key.utils.js +1 -1
  107. package/dist/test/core/toPlainObject.utils.d.ts +1 -1
  108. package/dist/test/core/toPlainObject.utils.d.ts.map +1 -1
  109. package/dist/test/core/toPlainObject.utils.js +3 -4
  110. package/dist/test/descriptor/builder.js +3 -1
  111. package/dist/test/descriptor/descriptorWallet.js +12 -9
  112. package/dist/test/transaction/descriptor/explainPsbt.js +3 -6
  113. package/dist/test/transaction/descriptor/fixtures.utils.d.ts +2 -0
  114. package/dist/test/transaction/descriptor/fixtures.utils.d.ts.map +1 -0
  115. package/dist/test/transaction/descriptor/fixtures.utils.js +12 -0
  116. package/dist/test/transaction/descriptor/outputDifference.d.ts +2 -0
  117. package/dist/test/transaction/descriptor/outputDifference.d.ts.map +1 -0
  118. package/dist/test/transaction/descriptor/outputDifference.js +76 -0
  119. package/dist/test/transaction/descriptor/parse.d.ts +2 -0
  120. package/dist/test/transaction/descriptor/parse.d.ts.map +1 -0
  121. package/dist/test/transaction/descriptor/parse.js +78 -0
  122. package/dist/test/transaction/descriptor/sign.d.ts +2 -0
  123. package/dist/test/transaction/descriptor/sign.d.ts.map +1 -0
  124. package/dist/test/transaction/descriptor/sign.js +33 -0
  125. package/dist/tsconfig.tsbuildinfo +1 -1
  126. package/package.json +7 -7
  127. package/dist/test/outputDifference.d.ts +0 -2
  128. package/dist/test/outputDifference.d.ts.map +0 -1
  129. package/dist/test/outputDifference.js +0 -86
@@ -43,11 +43,11 @@ exports.recoverCrossChain = recoverCrossChain;
43
43
  const bluebird_1 = __importDefault(require("bluebird"));
44
44
  const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
45
45
  const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
46
- const { unspentSum, scriptTypeForChain, outputScripts } = utxolib.bitgo;
47
46
  const unspents_1 = require("@bitgo-beta/unspents");
48
47
  const sdk_core_1 = require("@bitgo-beta/sdk-core");
49
48
  const sdk_api_1 = require("@bitgo-beta/sdk-api");
50
49
  const sign_1 = require("../sign");
50
+ const { unspentSum, scriptTypeForChain, outputScripts } = utxolib.bitgo;
51
51
  async function getWallet(bitgo, coin, walletId) {
52
52
  try {
53
53
  return await coin.wallets().get({ id: walletId });
@@ -282,8 +282,8 @@ function getTxInfo(transaction, unspents, walletId, walletKeys, amountType = 'nu
282
282
  ...u,
283
283
  wallet: walletId,
284
284
  fromWallet: walletId,
285
- redeemScript: redeemScript === null || redeemScript === void 0 ? void 0 : redeemScript.toString('hex'),
286
- witnessScript: witnessScript === null || witnessScript === void 0 ? void 0 : witnessScript.toString('hex'),
285
+ redeemScript: redeemScript?.toString('hex'),
286
+ witnessScript: witnessScript?.toString('hex'),
287
287
  };
288
288
  });
289
289
  return {
@@ -362,4 +362,4 @@ async function recoverCrossChain(bitgo, params) {
362
362
  };
363
363
  }
364
364
  }
365
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvc3NDaGFpblJlY292ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JlY292ZXJ5L2Nyb3NzQ2hhaW5SZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlEQSw4QkFvQkM7QUFPRCxzQ0FpQkM7QUFFRCwwQ0FhQztBQXFURCw4Q0F5REM7QUFsZUQsd0RBQWdDO0FBQ2hDLDhEQUFnRDtBQUNoRCxtREFBNkQ7QUFFN0QsTUFBTSxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBTXhFLG1EQUFrRDtBQUVsRCxtREFBb0Y7QUFHcEYsaURBQThDO0FBQzlDLGtDQUF5RDtBQXlDbEQsS0FBSyxVQUFVLFNBQVMsQ0FDN0IsS0FBZ0IsRUFDaEIsSUFBc0IsRUFDdEIsUUFBZ0I7SUFFaEIsSUFBSSxDQUFDO1FBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLCtDQUErQztRQUMvQyxrSkFBa0o7UUFDbEosSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxDQUFDO1FBQ1YsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxPQUFPLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsUUFBUSxtQkFBbUIsQ0FBQyxDQUFDLFFBQVEsRUFBRSxF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cmQnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyBiaXAzMiwgQklQMzJJbnRlcmZhY2UgfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5cbmNvbnN0IHsgdW5zcGVudFN1bSwgc2NyaXB0VHlwZUZvckNoYWluLCBvdXRwdXRTY3JpcHRzIH0gPSB1dHhvbGliLmJpdGdvO1xuZXhwb3J0IHR5cGUgUm9vdFdhbGxldEtleXMgPSB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzO1xudHlwZSBVbnNwZW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+ID0gdXR4b2xpYi5iaXRnby5VbnNwZW50PFROdW1iZXI+O1xudHlwZSBXYWxsZXRVbnNwZW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+ID0gdXR4b2xpYi5iaXRnby5XYWxsZXRVbnNwZW50PFROdW1iZXI+O1xudHlwZSBXYWxsZXRVbnNwZW50TGVnYWN5PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+ID0gdXR4b2xpYi5iaXRnby5XYWxsZXRVbnNwZW50TGVnYWN5PFROdW1iZXI+O1xuXG5pbXBvcnQgeyBEaW1lbnNpb25zIH0gZnJvbSAnQGJpdGdvLWJldGEvdW5zcGVudHMnO1xuXG5pbXBvcnQgeyBCaXRHb0Jhc2UsIElXYWxsZXQsIEtleWNoYWluLCBUcmlwbGUsIFdhbGxldCB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0VXR4b0NvaW4sIFRyYW5zYWN0aW9uSW5mbyB9IGZyb20gJy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuXG5pbXBvcnQgeyBkZWNyeXB0IH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWFwaSc7XG5pbXBvcnQgeyBzaWduQW5kVmVyaWZ5V2FsbGV0VHJhbnNhY3Rpb24gfSBmcm9tICcuLi9zaWduJztcblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZFJlY292ZXJ5VHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgd2FsbGV0OiBzdHJpbmc7XG4gIGZhdWx0eVR4SWQ6IHN0cmluZztcbiAgcmVjb3ZlcnlBZGRyZXNzOiBzdHJpbmc7XG59XG5cbnR5cGUgRmVlSW5mbyA9IHtcbiAgc2l6ZTogbnVtYmVyO1xuICBmZWVSYXRlOiBudW1iZXI7XG4gIGZlZTogbnVtYmVyO1xuICBwYXlHb0ZlZTogbnVtYmVyO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBDcm9zc0NoYWluUmVjb3ZlcnlVbnNpZ25lZDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiB7XG4gIHR4SGV4OiBzdHJpbmc7XG4gIHR4SW5mbzogVHJhbnNhY3Rpb25JbmZvPFROdW1iZXI+O1xuICB3YWxsZXRJZDogc3RyaW5nO1xuICBmZWVJbmZvOiBGZWVJbmZvO1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNvaW46IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDcm9zc0NoYWluUmVjb3ZlcnlTaWduZWQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4ge1xuICB2ZXJzaW9uOiAxIHwgMjtcbiAgdHhIZXg6IHN0cmluZztcbiAgdHhJbmZvOiBUcmFuc2FjdGlvbkluZm88VE51bWJlcj47XG4gIHdhbGxldElkOiBzdHJpbmc7XG4gIHNvdXJjZUNvaW46IHN0cmluZztcbiAgcmVjb3ZlcnlDb2luOiBzdHJpbmc7XG4gIHJlY292ZXJ5QWRkcmVzcz86IHN0cmluZztcbiAgcmVjb3ZlcnlBbW91bnQ/OiBUTnVtYmVyO1xufVxuXG50eXBlIFdhbGxldFYxID0ge1xuICBrZXljaGFpbnM6IHsgeHB1Yjogc3RyaW5nIH1bXTtcbiAgYWRkcmVzcyh7IGFkZHJlc3MgfTogeyBhZGRyZXNzOiBzdHJpbmcgfSk6IFByb21pc2U8eyBjaGFpbjogbnVtYmVyOyBpbmRleDogbnVtYmVyIH0+O1xuICBnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4oKTogUHJvbWlzZTx7IGVuY3J5cHRlZFhwcnY6IHN0cmluZyB9Pjtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRXYWxsZXQoXG4gIGJpdGdvOiBCaXRHb0Jhc2UsXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHdhbGxldElkOiBzdHJpbmdcbik6IFByb21pc2U8SVdhbGxldCB8IFdhbGxldFYxPiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGNvaW4ud2FsbGV0cygpLmdldCh7IGlkOiB3YWxsZXRJZCB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIFRPRE86IEJHLTQ2MzY0IGhhbmRsZSBlcnJvcnMgbW9yZSBncmFjZWZ1bGx5XG4gICAgLy8gVGhlIHYyIGVuZHBvaW50IGNvaW4ud2FsbGV0cygpLmdldCgpIG1heSB0aHJvdyA0MDQgb3IgNDAwIGVycm9ycywgYnV0IHRoaXMgc2hvdWxkIG5vdCBwcmV2ZW50IHVzIGZyb20gc2VhcmNoaW5nIGZvciB0aGUgd2FsbGV0SWQgaW4gdjEgd2FsbGV0cy5cbiAgICBpZiAoZS5zdGF0dXMgPj0gNTAwKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGJpdGdvLndhbGxldHMoKS5nZXQoeyBpZDogd2FsbGV0SWQgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNvdWxkIG5vdCBnZXQgd2FsbGV0ICR7d2FsbGV0SWR9IGZyb20gdjEgb3IgdjI6ICR7ZS50b1N0cmluZygpfWApO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHJlY292ZXJ5Q29pblxuICogQHBhcmFtIHdhbGxldFxuICogQHJldHVybiB3YWxsZXQgcHVia2V5c1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0V2FsbGV0S2V5cyhcbiAgcmVjb3ZlcnlDb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICB3YWxsZXQ6IElXYWxsZXQgfCBXYWxsZXRWMVxuKTogUHJvbWlzZTxSb290V2FsbGV0S2V5cz4ge1xuICBsZXQgeHB1YnM6IFRyaXBsZTxzdHJpbmc+O1xuXG4gIGlmICh3YWxsZXQgaW5zdGFuY2VvZiBXYWxsZXQpIHtcbiAgICBjb25zdCBrZXljaGFpbnMgPSAoYXdhaXQgcmVjb3ZlcnlDb2luLmtleWNoYWlucygpLmdldEtleXNGb3JTaWduaW5nKHsgd2FsbGV0IH0pKSBhcyB1bmtub3duIGFzIEtleWNoYWluW107XG4gICAgaWYgKGtleWNoYWlucy5sZW5ndGggIT09IDMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgdHJpcGxlIGdvdCAke2tleWNoYWlucy5sZW5ndGh9YCk7XG4gICAgfVxuICAgIHhwdWJzID0ga2V5Y2hhaW5zLm1hcCgoaykgPT4gay5wdWIpIGFzIFRyaXBsZTxzdHJpbmc+O1xuICB9IGVsc2Uge1xuICAgIHhwdWJzID0gKHdhbGxldCBhcyBXYWxsZXRWMSkua2V5Y2hhaW5zLm1hcCgoaykgPT4gay54cHViKSBhcyBUcmlwbGU8c3RyaW5nPjtcbiAgfVxuXG4gIHJldHVybiBuZXcgdXR4b2xpYi5iaXRnby5Sb290V2FsbGV0S2V5cyh4cHVicy5tYXAoKGspID0+IGJpcDMyLmZyb21CYXNlNTgoaykpIGFzIFRyaXBsZTxCSVAzMkludGVyZmFjZT4pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNXYWxsZXRBZGRyZXNzKHdhbGxldDogSVdhbGxldCB8IFdhbGxldFYxLCBhZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBsZXQgYWRkcmVzc0RhdGE7XG4gICAgaWYgKHdhbGxldCBpbnN0YW5jZW9mIFdhbGxldCkge1xuICAgICAgYWRkcmVzc0RhdGEgPSBhd2FpdCB3YWxsZXQuZ2V0QWRkcmVzcyh7IGFkZHJlc3MgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZHJlc3NEYXRhID0gYXdhaXQgKHdhbGxldCBhcyBXYWxsZXRWMSkuYWRkcmVzcyh7IGFkZHJlc3MgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZHJlc3NEYXRhICE9PSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0gY29pblxuICogQHBhcmFtIHR4aWRcbiAqIEBwYXJhbSBhbW91bnRUeXBlXG4gKiBAcGFyYW0gd2FsbGV0XG4gKiBAcGFyYW0gYXBpS2V5IC0gYSBibG9ja2NoYWlyIGFwaSBrZXlcbiAqIEByZXR1cm4gYWxsIHVuc3BlbnRzIGZvciB0cmFuc2FjdGlvbiBvdXRwdXRzLCBpbmNsdWRpbmcgb3V0cHV0cyBmcm9tIG90aGVyIHRyYW5zYWN0aW9uc1xuICovXG5hc3luYyBmdW5jdGlvbiBnZXRBbGxSZWNvdmVyeU91dHB1dHM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHR4aWQ6IHN0cmluZyxcbiAgYW1vdW50VHlwZTogJ251bWJlcicgfCAnYmlnaW50JyA9ICdudW1iZXInLFxuICB3YWxsZXQ6IElXYWxsZXQgfCBXYWxsZXRWMSxcbiAgYXBpS2V5Pzogc3RyaW5nXG4pOiBQcm9taXNlPFVuc3BlbnQ8VE51bWJlcj5bXT4ge1xuICBjb25zdCBhcGkgPSBjb2luLmdldFJlY292ZXJ5UHJvdmlkZXIoYXBpS2V5KTtcbiAgY29uc3QgdHggPSBhd2FpdCBhcGkuZ2V0VHJhbnNhY3Rpb25JTyh0eGlkKTtcbiAgY29uc3Qgd2FsbGV0QWRkcmVzc2VzID0gKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgdHgub3V0cHV0cy5tYXAoYXN5bmMgKG91dHB1dCkgPT4ge1xuICAgICAgICAvLyBGb3Igc29tZSBjb2lucyAoYmNoKSB3ZSBuZWVkIHRvIGNvbnZlcnQgdGhlIGFkZHJlc3MgdG8gbGVnYWN5IGZvcm1hdCBzaW5jZSB0aGUgYXBpIHJldHVybnMgdGhlIGFkZHJlc3NcbiAgICAgICAgLy8gaW4gbm9uIGxlZ2FjeSBmb3JtYXQuIEhvd2V2ZXIsIHdlIHdhbnQgdG8ga2VlcCB0aGUgYWRkcmVzcyBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgdGhlIHJlc3BvbnNlIHNpbmNlIHdlXG4gICAgICAgIC8vIGFyZSBnb2luZyB0byBoaXQgdGhlIEFQSSBhZ2FpbiB0byBmZXRjaCBhZGRyZXNzIHVuc3BlbnRzLlxuICAgICAgICBjb25zdCBjYW5vbmljYWxBZGRyZXNzID0gY29pbi5jYW5vbmljYWxBZGRyZXNzKG91dHB1dC5hZGRyZXNzKTtcbiAgICAgICAgY29uc3QgaXNXYWxsZXRPd25lZCA9IGF3YWl0IGlzV2FsbGV0QWRkcmVzcyh3YWxsZXQsIGNhbm9uaWNhbEFkZHJlc3MpO1xuICAgICAgICByZXR1cm4gaXNXYWxsZXRPd25lZCA/IG91dHB1dC5hZGRyZXNzIDogbnVsbDtcbiAgICAgIH0pXG4gICAgKVxuICApLmZpbHRlcigoYWRkcmVzcykgPT4gYWRkcmVzcyAhPT0gbnVsbCk7XG5cbiAgY29uc3QgdW5zcGVudHMgPSBhd2FpdCBhcGkuZ2V0VW5zcGVudHNGb3JBZGRyZXNzZXMod2FsbGV0QWRkcmVzc2VzIGFzIHN0cmluZ1tdKTtcbiAgaWYgKHVuc3BlbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gcmVjb3ZlcnkgdW5zcGVudHMgZm91bmQuYCk7XG4gIH1cbiAgLy8gdGhlIGFwaSBtYXkgcmV0dXJuIGNhc2hhZGRyJ3MgaW5zdGVhZCBvZiBsZWdhY3kgZm9yIEJDSCBhbmQgQkNIQVxuICAvLyBkb3duc3RyZWFtIHByb2Nlc3NlcydzIG9ubHkgZXhwZWN0IGxlZ2FjeSBhZGRyZXNzZXNcbiAgcmV0dXJuIHVuc3BlbnRzLm1hcCgocmVjb3ZlcnlPdXRwdXQpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucmVjb3ZlcnlPdXRwdXQsXG4gICAgICBhZGRyZXNzOiBjb2luLmNhbm9uaWNhbEFkZHJlc3MocmVjb3ZlcnlPdXRwdXQuYWRkcmVzcyksXG4gICAgICB2YWx1ZTogdXR4b2xpYi5iaXRnby50b1ROdW1iZXI8VE51bWJlcj4oQmlnSW50KHJlY292ZXJ5T3V0cHV0LnZhbHVlKSwgYW1vdW50VHlwZSksXG4gICAgfTtcbiAgfSk7XG59XG5cbi8qKlxuICogRGF0YSByZXF1aXJlZCBmb3IgYWRkcmVzcyBhbmQgc2lnbmF0dXJlIGRlcml2YXRpb25cbiAqL1xudHlwZSBTY3JpcHRJZCA9IHtcbiAgY2hhaW46IG51bWJlcjtcbiAgaW5kZXg6IG51bWJlcjtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFNjcmlwdElkKGNvaW46IEFic3RyYWN0VXR4b0NvaW4sIHdhbGxldDogSVdhbGxldCB8IFdhbGxldFYxLCBzY3JpcHQ6IEJ1ZmZlcik6IFByb21pc2U8U2NyaXB0SWQ+IHtcbiAgY29uc3QgYWRkcmVzcyA9IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KHNjcmlwdCwgY29pbi5uZXR3b3JrKTtcbiAgbGV0IGFkZHJlc3NEYXRhOiB7IGNoYWluOiBudW1iZXI7IGluZGV4OiBudW1iZXIgfTtcbiAgaWYgKHdhbGxldCBpbnN0YW5jZW9mIFdhbGxldCkge1xuICAgIGFkZHJlc3NEYXRhID0gYXdhaXQgd2FsbGV0LmdldEFkZHJlc3MoeyBhZGRyZXNzIH0pO1xuICB9IGVsc2Uge1xuICAgIGFkZHJlc3NEYXRhID0gYXdhaXQgKHdhbGxldCBhcyBXYWxsZXRWMSkuYWRkcmVzcyh7IGFkZHJlc3MgfSk7XG4gIH1cbiAgaWYgKHR5cGVvZiBhZGRyZXNzRGF0YS5jaGFpbiA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGFkZHJlc3NEYXRhLmluZGV4ID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB7IGNoYWluOiBhZGRyZXNzRGF0YS5jaGFpbiwgaW5kZXg6IGFkZHJlc3NEYXRhLmluZGV4IH07XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgYWRkcmVzcyBkYXRhOiAke0pTT04uc3RyaW5naWZ5KGFkZHJlc3NEYXRhKX1gKTtcbn1cblxuLyoqXG4gKiBMb29rdXAgYWRkcmVzcyBkYXRhIGZyb20gdW5zcGVudHMgb24gc291cmNlQ29pbiBpbiBhZGRyZXNzIGRhdGFiYXNlIG9mIHJlY292ZXJ5Q29pbi5cbiAqIFJldHVybiBmdWxsIHdhbGxldFVuc3BlbnRzIGluY2x1ZGluZyBzY3JpcHRJZCBpbiBzb3VyY2VDb2luIGZvcm1hdC5cbiAqXG4gKiBAcGFyYW0gc291cmNlQ29pblxuICogQHBhcmFtIHJlY292ZXJ5Q29pblxuICogQHBhcmFtIHVuc3BlbnRzXG4gKiBAcGFyYW0gd2FsbGV0XG4gKiBAcmV0dXJuIHdhbGxldFVuc3BlbnRzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHRvV2FsbGV0VW5zcGVudHM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIHNvdXJjZUNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHJlY292ZXJ5Q29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgdW5zcGVudHM6IFVuc3BlbnQ8VE51bWJlcj5bXSxcbiAgd2FsbGV0OiBJV2FsbGV0IHwgV2FsbGV0VjFcbik6IFByb21pc2U8V2FsbGV0VW5zcGVudDxUTnVtYmVyPltdPiB7XG4gIGNvbnN0IGFkZHJlc3NlcyA9IG5ldyBTZXQodW5zcGVudHMubWFwKCh1KSA9PiB1LmFkZHJlc3MpKTtcbiAgcmV0dXJuIChcbiAgICBhd2FpdCBCbHVlYmlyZC5tYXBTZXJpZXMoYWRkcmVzc2VzLCBhc3luYyAoYWRkcmVzcyk6IFByb21pc2U8V2FsbGV0VW5zcGVudDxUTnVtYmVyPltdPiA9PiB7XG4gICAgICBsZXQgc2NyaXB0SWQ7XG4gICAgICB0cnkge1xuICAgICAgICBzY3JpcHRJZCA9IGF3YWl0IGdldFNjcmlwdElkKHJlY292ZXJ5Q29pbiwgd2FsbGV0LCB1dHhvbGliLmFkZHJlc3MudG9PdXRwdXRTY3JpcHQoYWRkcmVzcywgc291cmNlQ29pbi5uZXR3b3JrKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYGVycm9yIGdldHRpbmcgc2NyaXB0SWQgZm9yICR7YWRkcmVzc306YCwgZSk7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bnNwZW50c1xuICAgICAgICAuZmlsdGVyKCh1KSA9PiB1LmFkZHJlc3MgPT09IGFkZHJlc3MpXG4gICAgICAgIC5tYXAoKHUpID0+ICh7XG4gICAgICAgICAgLi4udSxcbiAgICAgICAgICAuLi5zY3JpcHRJZCxcbiAgICAgICAgfSkpO1xuICAgIH0pXG4gICkuZmxhdCgpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBjb2luXG4gKiBAcmV0dXJuIGZlZVJhdGUgZm9yIHRyYW5zYWN0aW9uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEZlZVJhdGVTYXRWQihjb2luOiBBYnN0cmFjdFV0eG9Db2luKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgLy8gVE9ETzogdXNlIGZlZVJhdGUgQVBJXG4gIGNvbnN0IGZlZVJhdGUgPSB7XG4gICAgYmNoOiAyMCxcbiAgICB0YmNoOiAyMCxcbiAgICBiY2hhOiAyMCxcbiAgICB0YmNoYTogMjAsXG4gICAgYnN2OiAyMCxcbiAgICB0YnN2OiAyMCxcbiAgICBidGM6IDgwLFxuICAgIHRidGM6IDgwLFxuICAgIHRidGNzaWc6IDgwLFxuICAgIHRidGM0OiA4MCxcbiAgICB0YnRjYmdzaWc6IDgwLFxuICAgIGx0YzogMTAwLFxuICAgIHRsdGM6IDEwMCxcbiAgICBkb2dlOiAxMDAwLFxuICAgIHRkb2dlOiAxMDAwLFxuICB9W2NvaW4uZ2V0Q2hhaW4oKV07XG5cbiAgaWYgKCFmZWVSYXRlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBubyBmZWVSYXRlIGZvciAke2NvaW4uZ2V0Q2hhaW4oKX1gKTtcbiAgfVxuXG4gIHJldHVybiBmZWVSYXRlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB4cHJ2XG4gKiBAcGFyYW0gcGFzc3BocmFzZVxuICogQHBhcmFtIHdhbGxldFxuICogQHJldHVybiBzaWduaW5nIGtleVxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRQcnYoeHBydj86IHN0cmluZywgcGFzc3BocmFzZT86IHN0cmluZywgd2FsbGV0PzogSVdhbGxldCB8IFdhbGxldFYxKTogUHJvbWlzZTxCSVAzMkludGVyZmFjZT4ge1xuICBpZiAoeHBydikge1xuICAgIGNvbnN0IGtleSA9IGJpcDMyLmZyb21CYXNlNTgoeHBydik7XG4gICAgaWYgKGtleS5pc05ldXRlcmVkKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbm90IGEgcHJpdmF0ZSBrZXlgKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleTtcbiAgfVxuXG4gIGlmICghd2FsbGV0IHx8ICFwYXNzcGhyYXNlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBubyB4cHJ2IGdpdmVuOiBuZWVkIHdhbGxldCBhbmQgcGFzc3BocmFzZSB0byBjb250aW51ZWApO1xuICB9XG5cbiAgbGV0IGVuY3J5cHRlZFBydjogc3RyaW5nO1xuICBpZiAod2FsbGV0IGluc3RhbmNlb2YgV2FsbGV0KSB7XG4gICAgZW5jcnlwdGVkUHJ2ID0gKGF3YWl0IHdhbGxldC5nZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4oKSkuZW5jcnlwdGVkUHJ2O1xuICB9IGVsc2Uge1xuICAgIGVuY3J5cHRlZFBydiA9IChhd2FpdCAod2FsbGV0IGFzIFdhbGxldFYxKS5nZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4oKSkuZW5jcnlwdGVkWHBydjtcbiAgfVxuXG4gIHJldHVybiBnZXRQcnYoZGVjcnlwdChwYXNzcGhyYXNlLCBlbmNyeXB0ZWRQcnYpKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gbmV0d29ya1xuICogQHBhcmFtIHVuc3BlbnRzXG4gKiBAcGFyYW0gdGFyZ2V0QWRkcmVzc1xuICogQHBhcmFtIGZlZVJhdGVTYXRWQlxuICogQHBhcmFtIHNpZ25lciAtIGlmIHNldCwgc2lnbiB0cmFuc2FjdGlvblxuICogQHBhcmFtIGFtb3VudFR5cGVcbiAqIEByZXR1cm4gdHJhbnNhY3Rpb24gc3BlbmRpbmcgZnVsbCBpbnB1dCBhbW91bnQgdG8gdGFyZ2V0QWRkcmVzc1xuICovXG5mdW5jdGlvbiBjcmVhdGVTd2VlcFRyYW5zYWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmssXG4gIHVuc3BlbnRzOiBXYWxsZXRVbnNwZW50PFROdW1iZXI+W10sXG4gIHRhcmdldEFkZHJlc3M6IHN0cmluZyxcbiAgZmVlUmF0ZVNhdFZCOiBudW1iZXIsXG4gIHNpZ25lcj86IHV0eG9saWIuYml0Z28uV2FsbGV0VW5zcGVudFNpZ25lcjxSb290V2FsbGV0S2V5cz4sXG4gIGFtb3VudFR5cGU6ICdudW1iZXInIHwgJ2JpZ2ludCcgPSAnbnVtYmVyJ1xuKTogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4ge1xuICBjb25zdCBpbnB1dFZhbHVlID0gdW5zcGVudFN1bTxUTnVtYmVyPih1bnNwZW50cywgYW1vdW50VHlwZSk7XG4gIGNvbnN0IHZzaXplID0gRGltZW5zaW9ucy5mcm9tVW5zcGVudHModW5zcGVudHMsIHtcbiAgICBwMnRyOiB7IHNjcmlwdFBhdGhMZXZlbDogMSB9LFxuICAgIHAydHJNdXNpZzI6IHsgc2NyaXB0UGF0aExldmVsOiB1bmRlZmluZWQgfSxcbiAgfSlcbiAgICAucGx1cyhEaW1lbnNpb25zLmZyb21PdXRwdXQoeyBzY3JpcHQ6IHV0eG9saWIuYWRkcmVzcy50b091dHB1dFNjcmlwdCh0YXJnZXRBZGRyZXNzLCBuZXR3b3JrKSB9KSlcbiAgICAuZ2V0VlNpemUoKTtcbiAgY29uc3QgZmVlID0gdnNpemUgKiBmZWVSYXRlU2F0VkI7XG5cbiAgY29uc3QgdHJhbnNhY3Rpb25CdWlsZGVyID0gdXR4b2xpYi5iaXRnby5jcmVhdGVUcmFuc2FjdGlvbkJ1aWxkZXJGb3JOZXR3b3JrPFROdW1iZXI+KG5ldHdvcmspO1xuICB0cmFuc2FjdGlvbkJ1aWxkZXIuYWRkT3V0cHV0KFxuICAgIHRhcmdldEFkZHJlc3MsXG4gICAgdXR4b2xpYi5iaXRnby50b1ROdW1iZXI8VE51bWJlcj4oQmlnSW50KGlucHV0VmFsdWUpIC0gQmlnSW50KGZlZSksIGFtb3VudFR5cGUpXG4gICk7XG4gIHVuc3BlbnRzLmZvckVhY2goKHVuc3BlbnQpID0+IHtcbiAgICB1dHhvbGliLmJpdGdvLmFkZFRvVHJhbnNhY3Rpb25CdWlsZGVyKHRyYW5zYWN0aW9uQnVpbGRlciwgdW5zcGVudCk7XG4gIH0pO1xuICBsZXQgdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbkJ1aWxkZXIuYnVpbGRJbmNvbXBsZXRlKCk7XG4gIGlmIChzaWduZXIpIHtcbiAgICB0cmFuc2FjdGlvbiA9IHNpZ25BbmRWZXJpZnlXYWxsZXRUcmFuc2FjdGlvbjxUTnVtYmVyPih0cmFuc2FjdGlvbkJ1aWxkZXIsIHVuc3BlbnRzLCBzaWduZXIsIHtcbiAgICAgIGlzTGFzdFNpZ25hdHVyZTogZmFsc2UsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHRyYW5zYWN0aW9uO1xufVxuXG5mdW5jdGlvbiBnZXRUeEluZm88VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIHRyYW5zYWN0aW9uOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8VE51bWJlcj5bXSxcbiAgd2FsbGV0SWQ6IHN0cmluZyxcbiAgd2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIGFtb3VudFR5cGU6ICdudW1iZXInIHwgJ2JpZ2ludCcgPSAnbnVtYmVyJ1xuKTogVHJhbnNhY3Rpb25JbmZvPFROdW1iZXI+IHtcbiAgY29uc3QgaW5wdXRBbW91bnQgPSB1dHhvbGliLmJpdGdvLnVuc3BlbnRTdW08VE51bWJlcj4odW5zcGVudHMsIGFtb3VudFR5cGUpO1xuICBjb25zdCBvdXRwdXRBbW91bnQgPSB1dHhvbGliLmJpdGdvLnRvVE51bWJlcjxUTnVtYmVyPihcbiAgICB0cmFuc2FjdGlvbi5vdXRzLnJlZHVjZSgoc3VtLCBvKSA9PiBzdW0gKyBCaWdJbnQoby52YWx1ZSksIEJpZ0ludCgwKSksXG4gICAgYW1vdW50VHlwZVxuICApO1xuICBjb25zdCBvdXRwdXRzID0gdHJhbnNhY3Rpb24ub3V0cy5tYXAoKG8pID0+ICh7XG4gICAgYWRkcmVzczogdXR4b2xpYi5hZGRyZXNzLmZyb21PdXRwdXRTY3JpcHQoby5zY3JpcHQsIHRyYW5zYWN0aW9uLm5ldHdvcmspLFxuICAgIHZhbHVlU3RyaW5nOiBvLnZhbHVlLnRvU3RyaW5nKCksXG4gICAgY2hhbmdlOiBmYWxzZSxcbiAgfSkpO1xuICBjb25zdCBpbnB1dHMgPSB1bnNwZW50cy5tYXAoKHUpID0+IHtcbiAgICAvLyBOT1RFOlxuICAgIC8vIFRoZSBgcmVkZWVtU2NyaXB0YCBhbmQgYHdhbGxldFNjcmlwdGAgcHJvcGVydGllcyBhcmUgcmVxdWlyZWQgZm9yIGxlZ2FjeSB2ZXJzaW9ucyBvZiBCaXRHb0pTXG4gICAgLy8gd2hpY2ggbWlnaHQgcmVxdWlyZSB0aGVzZSBzY3JpcHRzIGZvciBzaWduaW5nLiBUaGUgV2FsbGV0IFJlY292ZXJ5IFdpemFyZCAoV1JXKSBjYW4gY3JlYXRlXG4gICAgLy8gdW5zaWduZWQgcHJlYnVpbGRzIHRoYXQgYXJlIHN1Ym1pdHRlZCB0byBCaXRHb0pTIGluc3RhbmNlcyB3aGljaCBhcmUgbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lXG4gICAgLy8gdmVyc2lvbi5cbiAgICBjb25zdCBhZGRyZXNzS2V5cyA9IHdhbGxldEtleXMuZGVyaXZlRm9yQ2hhaW5BbmRJbmRleCh1LmNoYWluLCB1LmluZGV4KTtcbiAgICBjb25zdCBzY3JpcHRUeXBlID0gc2NyaXB0VHlwZUZvckNoYWluKHUuY2hhaW4pO1xuICAgIGNvbnN0IHsgcmVkZWVtU2NyaXB0LCB3aXRuZXNzU2NyaXB0IH0gPSBvdXRwdXRTY3JpcHRzLmNyZWF0ZU91dHB1dFNjcmlwdDJvZjMoYWRkcmVzc0tleXMucHVibGljS2V5cywgc2NyaXB0VHlwZSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udSxcbiAgICAgIHdhbGxldDogd2FsbGV0SWQsXG4gICAgICBmcm9tV2FsbGV0OiB3YWxsZXRJZCxcbiAgICAgIHJlZGVlbVNjcmlwdDogcmVkZWVtU2NyaXB0Py50b1N0cmluZygnaGV4JyksXG4gICAgICB3aXRuZXNzU2NyaXB0OiB3aXRuZXNzU2NyaXB0Py50b1N0cmluZygnaGV4JyksXG4gICAgfSBhcyBXYWxsZXRVbnNwZW50TGVnYWN5PFROdW1iZXI+O1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBpbnB1dEFtb3VudCxcbiAgICBvdXRwdXRBbW91bnQsXG4gICAgbWluZXJGZWU6IGlucHV0QW1vdW50IC0gb3V0cHV0QW1vdW50LFxuICAgIHNwZW5kQW1vdW50OiBvdXRwdXRBbW91bnQsXG4gICAgaW5wdXRzLFxuICAgIHVuc3BlbnRzOiBpbnB1dHMsXG4gICAgb3V0cHV0cyxcbiAgICBleHRlcm5hbE91dHB1dHM6IG91dHB1dHMsXG4gICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgcGF5R29GZWU6IDAsXG4gIH0gLyogY2FzdCB0byBUcmFuc2FjdGlvbkluZm8gdG8gYWxsb3cgZXh0cmEgZmllbGRzIG1heSBiZSByZXF1aXJlZCBieSBsZWdhY3kgY29uc3VtZXJzIG9mIHRoaXMgZGF0YSAqLyBhcyBUcmFuc2FjdGlvbkluZm88VE51bWJlcj47XG59XG5cbmZ1bmN0aW9uIGdldEZlZUluZm88VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIHRyYW5zYWN0aW9uOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8VE51bWJlcj5bXSxcbiAgYW1vdW50VHlwZTogJ251bWJlcicgfCAnYmlnaW50JyA9ICdudW1iZXInXG4pOiBGZWVJbmZvIHtcbiAgY29uc3QgdnNpemUgPSBEaW1lbnNpb25zLmZyb21VbnNwZW50cyh1bnNwZW50cywge1xuICAgIHAydHI6IHsgc2NyaXB0UGF0aExldmVsOiAxIH0sXG4gICAgcDJ0ck11c2lnMjogeyBzY3JpcHRQYXRoTGV2ZWw6IHVuZGVmaW5lZCB9LFxuICB9KVxuICAgIC5wbHVzKERpbWVuc2lvbnMuZnJvbU91dHB1dHModHJhbnNhY3Rpb24ub3V0cykpXG4gICAgLmdldFZTaXplKCk7XG4gIGNvbnN0IGlucHV0QW1vdW50ID0gdXR4b2xpYi5iaXRnby51bnNwZW50U3VtPFROdW1iZXI+KHVuc3BlbnRzLCBhbW91bnRUeXBlKTtcbiAgY29uc3Qgb3V0cHV0QW1vdW50ID0gdHJhbnNhY3Rpb24ub3V0cy5yZWR1Y2UoKHN1bSwgbykgPT4gc3VtICsgQmlnSW50KG8udmFsdWUpLCBCaWdJbnQoMCkpO1xuICBjb25zdCBmZWUgPSBOdW1iZXIoQmlnSW50KGlucHV0QW1vdW50KSAtIG91dHB1dEFtb3VudCk7XG4gIHJldHVybiB7XG4gICAgc2l6ZTogdnNpemUsXG4gICAgZmVlLFxuICAgIGZlZVJhdGU6IGZlZSAvIHZzaXplLFxuICAgIHBheUdvRmVlOiAwLFxuICB9O1xufVxuXG50eXBlIFJlY292ZXJQYXJhbXMgPSB7XG4gIC8qKiBXYWxsZXQgSUQgKGNhbiBiZSB2MSB3YWxsZXQgb3IgdjIgd2FsbGV0KSAqL1xuICB3YWxsZXRJZDogc3RyaW5nO1xuICAvKiogQ29pbiB0byBjcmVhdGUgdGhlIHRyYW5zYWN0aW9uIGZvciAqL1xuICBzb3VyY2VDb2luOiBBYnN0cmFjdFV0eG9Db2luO1xuICAvKiogQ29pbiB0aGF0IHdhbGxldCBrZXlzIHdlcmUgc2V0IHVwIGZvciAqL1xuICByZWNvdmVyeUNvaW46IEFic3RyYWN0VXR4b0NvaW47XG4gIC8qKiBTb3VyY2UgY29pbiB0cmFuc2FjdGlvbiB0byByZWNvdmVyIG91dHB1dHMgZnJvbSAoc291cmNlQ29pbikgKi9cbiAgdHhpZDogc3RyaW5nO1xuICAvKiogU291cmNlIGNvaW4gYWRkcmVzcyB0byBzZW5kIHRoZSBmdW5kcyB0byAqL1xuICByZWNvdmVyeUFkZHJlc3M6IHN0cmluZztcbiAgLyoqIElmIHNldCwgZGVjcnlwdHMgcHJpdmF0ZSBrZXkgYW5kIHNpZ25zIHRyYW5zYWN0aW9uICovXG4gIHdhbGxldFBhc3NwaHJhc2U/OiBzdHJpbmc7XG4gIC8qKiBJZiBzZXQsIHNpZ25zIHRyYW5zYWN0aW9uICovXG4gIHhwcnY/OiBzdHJpbmc7XG4gIC8qKiBmb3IgdXR4byBjb2lucyBvdGhlciB0aGFuIFtCVEMsVEJUQ10gdGhpcyBpcyBhIEJsb2NrIENoYWlyIGFwaSBrZXkgKiovXG4gIGFwaUtleT86IHN0cmluZztcbn07XG5cbi8qKlxuICogUmVjb3ZlciB3YWxsZXQgZGVwb3NpdHMgdGhhdCB3ZXJlIHJlY2VpdmVkIG9uIHRoZSB3cm9uZyBibG9ja2NoYWluXG4gKiAoZm9yIGluc3RhbmNlIGJpdGNvaW4gZGVwb3NpdHMgdGhhdCB3ZXJlIHJlY2VpdmVkIGZvciBhIGxpdGVjb2luIHdhbGxldCkuXG4gKlxuICogRmV0Y2hlcyB0aGUgdW5zcGVudCBkYXRhIGZyb20gQml0R28ncyBwdWJsaWMgYmxvY2tjaGFpbiBBUEkgYW5kIHRoZSBzY3JpcHQgZGF0YSBmcm9tIHRoZSB1c2VyJ3NcbiAqIHdhbGxldC5cbiAqXG4gKiBAcGFyYW0ge0JpdEdvQmFzZX0gYml0Z29cbiAqIEBwYXJhbSB7UmVjb3ZlclBhcmFtc30gcGFyYW1zXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWNvdmVyQ3Jvc3NDaGFpbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgYml0Z286IEJpdEdvQmFzZSxcbiAgcGFyYW1zOiBSZWNvdmVyUGFyYW1zXG4pOiBQcm9taXNlPENyb3NzQ2hhaW5SZWNvdmVyeVNpZ25lZDxUTnVtYmVyPiB8IENyb3NzQ2hhaW5SZWNvdmVyeVVuc2lnbmVkPFROdW1iZXI+PiB7XG4gIGNvbnN0IHdhbGxldCA9IGF3YWl0IGdldFdhbGxldChiaXRnbywgcGFyYW1zLnJlY292ZXJ5Q29pbiwgcGFyYW1zLndhbGxldElkKTtcbiAgY29uc3QgdW5zcGVudHMgPSBhd2FpdCBnZXRBbGxSZWNvdmVyeU91dHB1dHM8VE51bWJlcj4oXG4gICAgcGFyYW1zLnNvdXJjZUNvaW4sXG4gICAgcGFyYW1zLnR4aWQsXG4gICAgcGFyYW1zLnNvdXJjZUNvaW4uYW1vdW50VHlwZSxcbiAgICB3YWxsZXQsXG4gICAgcGFyYW1zLmFwaUtleVxuICApO1xuICBjb25zdCB3YWxsZXRVbnNwZW50cyA9IGF3YWl0IHRvV2FsbGV0VW5zcGVudHM8VE51bWJlcj4ocGFyYW1zLnNvdXJjZUNvaW4sIHBhcmFtcy5yZWNvdmVyeUNvaW4sIHVuc3BlbnRzLCB3YWxsZXQpO1xuICBjb25zdCB3YWxsZXRLZXlzID0gYXdhaXQgZ2V0V2FsbGV0S2V5cyhwYXJhbXMucmVjb3ZlcnlDb2luLCB3YWxsZXQpO1xuICBjb25zdCBwcnYgPVxuICAgIHBhcmFtcy54cHJ2IHx8IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlID8gYXdhaXQgZ2V0UHJ2KHBhcmFtcy54cHJ2LCBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSwgd2FsbGV0KSA6IHVuZGVmaW5lZDtcbiAgY29uc3Qgc2lnbmVyID0gcHJ2XG4gICAgPyBuZXcgdXR4b2xpYi5iaXRnby5XYWxsZXRVbnNwZW50U2lnbmVyPFJvb3RXYWxsZXRLZXlzPih3YWxsZXRLZXlzLCBwcnYsIHdhbGxldEtleXMuYml0Z28pXG4gICAgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGZlZVJhdGVTYXRWQiA9IGF3YWl0IGdldEZlZVJhdGVTYXRWQihwYXJhbXMuc291cmNlQ29pbik7XG4gIGNvbnN0IHRyYW5zYWN0aW9uID0gY3JlYXRlU3dlZXBUcmFuc2FjdGlvbjxUTnVtYmVyPihcbiAgICBwYXJhbXMuc291cmNlQ29pbi5uZXR3b3JrLFxuICAgIHdhbGxldFVuc3BlbnRzLFxuICAgIHBhcmFtcy5yZWNvdmVyeUFkZHJlc3MsXG4gICAgZmVlUmF0ZVNhdFZCLFxuICAgIHNpZ25lcixcbiAgICBwYXJhbXMuc291cmNlQ29pbi5hbW91bnRUeXBlXG4gICk7XG4gIGNvbnN0IHJlY292ZXJ5QW1vdW50ID0gdHJhbnNhY3Rpb24ub3V0c1swXS52YWx1ZTtcbiAgY29uc3QgdHhIZXggPSB0cmFuc2FjdGlvbi50b0J1ZmZlcigpLnRvU3RyaW5nKCdoZXgnKTtcbiAgY29uc3QgdHhJbmZvID0gZ2V0VHhJbmZvPFROdW1iZXI+KFxuICAgIHRyYW5zYWN0aW9uLFxuICAgIHdhbGxldFVuc3BlbnRzLFxuICAgIHBhcmFtcy53YWxsZXRJZCxcbiAgICB3YWxsZXRLZXlzLFxuICAgIHBhcmFtcy5zb3VyY2VDb2luLmFtb3VudFR5cGVcbiAgKTtcbiAgaWYgKHBydikge1xuICAgIHJldHVybiB7XG4gICAgICB2ZXJzaW9uOiB3YWxsZXQgaW5zdGFuY2VvZiBXYWxsZXQgPyAyIDogMSxcbiAgICAgIHdhbGxldElkOiBwYXJhbXMud2FsbGV0SWQsXG4gICAgICB0eEhleCxcbiAgICAgIHR4SW5mbyxcbiAgICAgIHNvdXJjZUNvaW46IHBhcmFtcy5zb3VyY2VDb2luLmdldENoYWluKCksXG4gICAgICByZWNvdmVyeUNvaW46IHBhcmFtcy5yZWNvdmVyeUNvaW4uZ2V0Q2hhaW4oKSxcbiAgICAgIHJlY292ZXJ5QW1vdW50LFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR4SGV4LFxuICAgICAgdHhJbmZvLFxuICAgICAgd2FsbGV0SWQ6IHBhcmFtcy53YWxsZXRJZCxcbiAgICAgIGZlZUluZm86IGdldEZlZUluZm8odHJhbnNhY3Rpb24sIHdhbGxldFVuc3BlbnRzLCBwYXJhbXMuc291cmNlQ29pbi5hbW91bnRUeXBlKSxcbiAgICAgIGFkZHJlc3M6IHBhcmFtcy5yZWNvdmVyeUFkZHJlc3MsXG4gICAgICBjb2luOiBwYXJhbXMuc291cmNlQ29pbi5nZXRDaGFpbigpLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
365
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvc3NDaGFpblJlY292ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JlY292ZXJ5L2Nyb3NzQ2hhaW5SZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVEQSw4QkFvQkM7QUFPRCxzQ0FpQkM7QUFFRCwwQ0FhQztBQXFURCw4Q0F5REM7QUFoZUQsd0RBQWdDO0FBQ2hDLDhEQUFnRDtBQUNoRCxtREFBNkQ7QUFDN0QsbURBQWtEO0FBQ2xELG1EQUFvRjtBQUNwRixpREFBOEM7QUFHOUMsa0NBQXlEO0FBRXpELE1BQU0sRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztBQTZDakUsS0FBSyxVQUFVLFNBQVMsQ0FDN0IsS0FBZ0IsRUFDaEIsSUFBc0IsRUFDdEIsUUFBZ0I7SUFFaEIsSUFBSSxDQUFDO1FBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLCtDQUErQztRQUMvQyxrSkFBa0o7UUFDbEosSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxDQUFDO1FBQ1YsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxPQUFPLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsUUFBUSxtQkFBbUIsQ0FBQyxDQUFDLFFBQVEsRUFBRSxF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LENBQUMsVUFBVSxDQUM3QixDQUFDO0lBQ0YsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDakQsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyRCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQ3RCLFdBQVcsRUFDWCxjQUFjLEVBQ2QsTUFBTSxDQUFDLFFBQVEsRUFDZixVQUFVLEVBQ1YsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQzdCLENBQUM7SUFDRixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1IsT0FBTztZQUNMLE9BQU8sRUFBRSxNQUFNLFlBQVksaUJBQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtZQUN6QixLQUFLO1lBQ0wsTUFBTTtZQUNOLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRTtZQUN4QyxZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUU7WUFDNUMsY0FBYztTQUNmLENBQUM7SUFDSixDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU87WUFDTCxLQUFLO1lBQ0wsTUFBTTtZQUNOLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtZQUN6QixPQUFPLEVBQUUsVUFBVSxDQUFDLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7WUFDOUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxlQUFlO1lBQy9CLElBQUksRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRTtTQUNuQyxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQmx1ZWJpcmQgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyBiaXAzMiwgQklQMzJJbnRlcmZhY2UgfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyBEaW1lbnNpb25zIH0gZnJvbSAnQGJpdGdvLWJldGEvdW5zcGVudHMnO1xuaW1wb3J0IHsgQml0R29CYXNlLCBJV2FsbGV0LCBLZXljaGFpbiwgVHJpcGxlLCBXYWxsZXQgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBkZWNyeXB0IH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWFwaSc7XG5cbmltcG9ydCB7IEFic3RyYWN0VXR4b0NvaW4sIFRyYW5zYWN0aW9uSW5mbyB9IGZyb20gJy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHsgc2lnbkFuZFZlcmlmeVdhbGxldFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vc2lnbic7XG5cbmNvbnN0IHsgdW5zcGVudFN1bSwgc2NyaXB0VHlwZUZvckNoYWluLCBvdXRwdXRTY3JpcHRzIH0gPSB1dHhvbGliLmJpdGdvO1xudHlwZSBSb290V2FsbGV0S2V5cyA9IHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXM7XG50eXBlIFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gPSB1dHhvbGliLmJpdGdvLlVuc3BlbnQ8VE51bWJlcj47XG50eXBlIFdhbGxldFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gPSB1dHhvbGliLmJpdGdvLldhbGxldFVuc3BlbnQ8VE51bWJlcj47XG50eXBlIFdhbGxldFVuc3BlbnRMZWdhY3k8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gPSB1dHhvbGliLmJpdGdvLldhbGxldFVuc3BlbnRMZWdhY3k8VE51bWJlcj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRSZWNvdmVyeVRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHdhbGxldDogc3RyaW5nO1xuICBmYXVsdHlUeElkOiBzdHJpbmc7XG4gIHJlY292ZXJ5QWRkcmVzczogc3RyaW5nO1xufVxuXG50eXBlIEZlZUluZm8gPSB7XG4gIHNpemU6IG51bWJlcjtcbiAgZmVlUmF0ZTogbnVtYmVyO1xuICBmZWU6IG51bWJlcjtcbiAgcGF5R29GZWU6IG51bWJlcjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3Jvc3NDaGFpblJlY292ZXJ5VW5zaWduZWQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4ge1xuICB0eEhleDogc3RyaW5nO1xuICB0eEluZm86IFRyYW5zYWN0aW9uSW5mbzxUTnVtYmVyPjtcbiAgd2FsbGV0SWQ6IHN0cmluZztcbiAgZmVlSW5mbzogRmVlSW5mbztcbiAgYWRkcmVzczogc3RyaW5nO1xuICBjb2luOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3Jvc3NDaGFpblJlY292ZXJ5U2lnbmVkPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgdmVyc2lvbjogMSB8IDI7XG4gIHR4SGV4OiBzdHJpbmc7XG4gIHR4SW5mbzogVHJhbnNhY3Rpb25JbmZvPFROdW1iZXI+O1xuICB3YWxsZXRJZDogc3RyaW5nO1xuICBzb3VyY2VDb2luOiBzdHJpbmc7XG4gIHJlY292ZXJ5Q29pbjogc3RyaW5nO1xuICByZWNvdmVyeUFkZHJlc3M/OiBzdHJpbmc7XG4gIHJlY292ZXJ5QW1vdW50PzogVE51bWJlcjtcbn1cblxudHlwZSBXYWxsZXRWMSA9IHtcbiAga2V5Y2hhaW5zOiB7IHhwdWI6IHN0cmluZyB9W107XG4gIGFkZHJlc3MoeyBhZGRyZXNzIH06IHsgYWRkcmVzczogc3RyaW5nIH0pOiBQcm9taXNlPHsgY2hhaW46IG51bWJlcjsgaW5kZXg6IG51bWJlciB9PjtcbiAgZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluKCk6IFByb21pc2U8eyBlbmNyeXB0ZWRYcHJ2OiBzdHJpbmcgfT47XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0V2FsbGV0KFxuICBiaXRnbzogQml0R29CYXNlLFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICB3YWxsZXRJZDogc3RyaW5nXG4pOiBQcm9taXNlPElXYWxsZXQgfCBXYWxsZXRWMT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBjb2luLndhbGxldHMoKS5nZXQoeyBpZDogd2FsbGV0SWQgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBUT0RPOiBCRy00NjM2NCBoYW5kbGUgZXJyb3JzIG1vcmUgZ3JhY2VmdWxseVxuICAgIC8vIFRoZSB2MiBlbmRwb2ludCBjb2luLndhbGxldHMoKS5nZXQoKSBtYXkgdGhyb3cgNDA0IG9yIDQwMCBlcnJvcnMsIGJ1dCB0aGlzIHNob3VsZCBub3QgcHJldmVudCB1cyBmcm9tIHNlYXJjaGluZyBmb3IgdGhlIHdhbGxldElkIGluIHYxIHdhbGxldHMuXG4gICAgaWYgKGUuc3RhdHVzID49IDUwMCkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBiaXRnby53YWxsZXRzKCkuZ2V0KHsgaWQ6IHdhbGxldElkIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBjb3VsZCBub3QgZ2V0IHdhbGxldCAke3dhbGxldElkfSBmcm9tIHYxIG9yIHYyOiAke2UudG9TdHJpbmcoKX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSByZWNvdmVyeUNvaW5cbiAqIEBwYXJhbSB3YWxsZXRcbiAqIEByZXR1cm4gd2FsbGV0IHB1YmtleXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFdhbGxldEtleXMoXG4gIHJlY292ZXJ5Q29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgd2FsbGV0OiBJV2FsbGV0IHwgV2FsbGV0VjFcbik6IFByb21pc2U8Um9vdFdhbGxldEtleXM+IHtcbiAgbGV0IHhwdWJzOiBUcmlwbGU8c3RyaW5nPjtcblxuICBpZiAod2FsbGV0IGluc3RhbmNlb2YgV2FsbGV0KSB7XG4gICAgY29uc3Qga2V5Y2hhaW5zID0gKGF3YWl0IHJlY292ZXJ5Q29pbi5rZXljaGFpbnMoKS5nZXRLZXlzRm9yU2lnbmluZyh7IHdhbGxldCB9KSkgYXMgdW5rbm93biBhcyBLZXljaGFpbltdO1xuICAgIGlmIChrZXljaGFpbnMubGVuZ3RoICE9PSAzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkIHRyaXBsZSBnb3QgJHtrZXljaGFpbnMubGVuZ3RofWApO1xuICAgIH1cbiAgICB4cHVicyA9IGtleWNoYWlucy5tYXAoKGspID0+IGsucHViKSBhcyBUcmlwbGU8c3RyaW5nPjtcbiAgfSBlbHNlIHtcbiAgICB4cHVicyA9ICh3YWxsZXQgYXMgV2FsbGV0VjEpLmtleWNoYWlucy5tYXAoKGspID0+IGsueHB1YikgYXMgVHJpcGxlPHN0cmluZz47XG4gIH1cblxuICByZXR1cm4gbmV3IHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXMoeHB1YnMubWFwKChrKSA9PiBiaXAzMi5mcm9tQmFzZTU4KGspKSBhcyBUcmlwbGU8QklQMzJJbnRlcmZhY2U+KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzV2FsbGV0QWRkcmVzcyh3YWxsZXQ6IElXYWxsZXQgfCBXYWxsZXRWMSwgYWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgbGV0IGFkZHJlc3NEYXRhO1xuICAgIGlmICh3YWxsZXQgaW5zdGFuY2VvZiBXYWxsZXQpIHtcbiAgICAgIGFkZHJlc3NEYXRhID0gYXdhaXQgd2FsbGV0LmdldEFkZHJlc3MoeyBhZGRyZXNzIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhZGRyZXNzRGF0YSA9IGF3YWl0ICh3YWxsZXQgYXMgV2FsbGV0VjEpLmFkZHJlc3MoeyBhZGRyZXNzIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRyZXNzRGF0YSAhPT0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIGNvaW5cbiAqIEBwYXJhbSB0eGlkXG4gKiBAcGFyYW0gYW1vdW50VHlwZVxuICogQHBhcmFtIHdhbGxldFxuICogQHBhcmFtIGFwaUtleSAtIGEgYmxvY2tjaGFpciBhcGkga2V5XG4gKiBAcmV0dXJuIGFsbCB1bnNwZW50cyBmb3IgdHJhbnNhY3Rpb24gb3V0cHV0cywgaW5jbHVkaW5nIG91dHB1dHMgZnJvbSBvdGhlciB0cmFuc2FjdGlvbnNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0QWxsUmVjb3ZlcnlPdXRwdXRzPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICB0eGlkOiBzdHJpbmcsXG4gIGFtb3VudFR5cGU6ICdudW1iZXInIHwgJ2JpZ2ludCcgPSAnbnVtYmVyJyxcbiAgd2FsbGV0OiBJV2FsbGV0IHwgV2FsbGV0VjEsXG4gIGFwaUtleT86IHN0cmluZ1xuKTogUHJvbWlzZTxVbnNwZW50PFROdW1iZXI+W10+IHtcbiAgY29uc3QgYXBpID0gY29pbi5nZXRSZWNvdmVyeVByb3ZpZGVyKGFwaUtleSk7XG4gIGNvbnN0IHR4ID0gYXdhaXQgYXBpLmdldFRyYW5zYWN0aW9uSU8odHhpZCk7XG4gIGNvbnN0IHdhbGxldEFkZHJlc3NlcyA9IChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHR4Lm91dHB1dHMubWFwKGFzeW5jIChvdXRwdXQpID0+IHtcbiAgICAgICAgLy8gRm9yIHNvbWUgY29pbnMgKGJjaCkgd2UgbmVlZCB0byBjb252ZXJ0IHRoZSBhZGRyZXNzIHRvIGxlZ2FjeSBmb3JtYXQgc2luY2UgdGhlIGFwaSByZXR1cm5zIHRoZSBhZGRyZXNzXG4gICAgICAgIC8vIGluIG5vbiBsZWdhY3kgZm9ybWF0LiBIb3dldmVyLCB3ZSB3YW50IHRvIGtlZXAgdGhlIGFkZHJlc3MgaW4gdGhlIHNhbWUgZm9ybWF0IGFzIHRoZSByZXNwb25zZSBzaW5jZSB3ZVxuICAgICAgICAvLyBhcmUgZ29pbmcgdG8gaGl0IHRoZSBBUEkgYWdhaW4gdG8gZmV0Y2ggYWRkcmVzcyB1bnNwZW50cy5cbiAgICAgICAgY29uc3QgY2Fub25pY2FsQWRkcmVzcyA9IGNvaW4uY2Fub25pY2FsQWRkcmVzcyhvdXRwdXQuYWRkcmVzcyk7XG4gICAgICAgIGNvbnN0IGlzV2FsbGV0T3duZWQgPSBhd2FpdCBpc1dhbGxldEFkZHJlc3Mod2FsbGV0LCBjYW5vbmljYWxBZGRyZXNzKTtcbiAgICAgICAgcmV0dXJuIGlzV2FsbGV0T3duZWQgPyBvdXRwdXQuYWRkcmVzcyA6IG51bGw7XG4gICAgICB9KVxuICAgIClcbiAgKS5maWx0ZXIoKGFkZHJlc3MpID0+IGFkZHJlc3MgIT09IG51bGwpO1xuXG4gIGNvbnN0IHVuc3BlbnRzID0gYXdhaXQgYXBpLmdldFVuc3BlbnRzRm9yQWRkcmVzc2VzKHdhbGxldEFkZHJlc3NlcyBhcyBzdHJpbmdbXSk7XG4gIGlmICh1bnNwZW50cy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHJlY292ZXJ5IHVuc3BlbnRzIGZvdW5kLmApO1xuICB9XG4gIC8vIHRoZSBhcGkgbWF5IHJldHVybiBjYXNoYWRkcidzIGluc3RlYWQgb2YgbGVnYWN5IGZvciBCQ0ggYW5kIEJDSEFcbiAgLy8gZG93bnN0cmVhbSBwcm9jZXNzZXMncyBvbmx5IGV4cGVjdCBsZWdhY3kgYWRkcmVzc2VzXG4gIHJldHVybiB1bnNwZW50cy5tYXAoKHJlY292ZXJ5T3V0cHV0KSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlY292ZXJ5T3V0cHV0LFxuICAgICAgYWRkcmVzczogY29pbi5jYW5vbmljYWxBZGRyZXNzKHJlY292ZXJ5T3V0cHV0LmFkZHJlc3MpLFxuICAgICAgdmFsdWU6IHV0eG9saWIuYml0Z28udG9UTnVtYmVyPFROdW1iZXI+KEJpZ0ludChyZWNvdmVyeU91dHB1dC52YWx1ZSksIGFtb3VudFR5cGUpLFxuICAgIH07XG4gIH0pO1xufVxuXG4vKipcbiAqIERhdGEgcmVxdWlyZWQgZm9yIGFkZHJlc3MgYW5kIHNpZ25hdHVyZSBkZXJpdmF0aW9uXG4gKi9cbnR5cGUgU2NyaXB0SWQgPSB7XG4gIGNoYWluOiBudW1iZXI7XG4gIGluZGV4OiBudW1iZXI7XG59O1xuXG5hc3luYyBmdW5jdGlvbiBnZXRTY3JpcHRJZChjb2luOiBBYnN0cmFjdFV0eG9Db2luLCB3YWxsZXQ6IElXYWxsZXQgfCBXYWxsZXRWMSwgc2NyaXB0OiBCdWZmZXIpOiBQcm9taXNlPFNjcmlwdElkPiB7XG4gIGNvbnN0IGFkZHJlc3MgPSB1dHhvbGliLmFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdChzY3JpcHQsIGNvaW4ubmV0d29yayk7XG4gIGxldCBhZGRyZXNzRGF0YTogeyBjaGFpbjogbnVtYmVyOyBpbmRleDogbnVtYmVyIH07XG4gIGlmICh3YWxsZXQgaW5zdGFuY2VvZiBXYWxsZXQpIHtcbiAgICBhZGRyZXNzRGF0YSA9IGF3YWl0IHdhbGxldC5nZXRBZGRyZXNzKHsgYWRkcmVzcyB9KTtcbiAgfSBlbHNlIHtcbiAgICBhZGRyZXNzRGF0YSA9IGF3YWl0ICh3YWxsZXQgYXMgV2FsbGV0VjEpLmFkZHJlc3MoeyBhZGRyZXNzIH0pO1xuICB9XG4gIGlmICh0eXBlb2YgYWRkcmVzc0RhdGEuY2hhaW4gPT09ICdudW1iZXInICYmIHR5cGVvZiBhZGRyZXNzRGF0YS5pbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4geyBjaGFpbjogYWRkcmVzc0RhdGEuY2hhaW4sIGluZGV4OiBhZGRyZXNzRGF0YS5pbmRleCB9O1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGFkZHJlc3MgZGF0YTogJHtKU09OLnN0cmluZ2lmeShhZGRyZXNzRGF0YSl9YCk7XG59XG5cbi8qKlxuICogTG9va3VwIGFkZHJlc3MgZGF0YSBmcm9tIHVuc3BlbnRzIG9uIHNvdXJjZUNvaW4gaW4gYWRkcmVzcyBkYXRhYmFzZSBvZiByZWNvdmVyeUNvaW4uXG4gKiBSZXR1cm4gZnVsbCB3YWxsZXRVbnNwZW50cyBpbmNsdWRpbmcgc2NyaXB0SWQgaW4gc291cmNlQ29pbiBmb3JtYXQuXG4gKlxuICogQHBhcmFtIHNvdXJjZUNvaW5cbiAqIEBwYXJhbSByZWNvdmVyeUNvaW5cbiAqIEBwYXJhbSB1bnNwZW50c1xuICogQHBhcmFtIHdhbGxldFxuICogQHJldHVybiB3YWxsZXRVbnNwZW50c1xuICovXG5hc3luYyBmdW5jdGlvbiB0b1dhbGxldFVuc3BlbnRzPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBzb3VyY2VDb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICByZWNvdmVyeUNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHVuc3BlbnRzOiBVbnNwZW50PFROdW1iZXI+W10sXG4gIHdhbGxldDogSVdhbGxldCB8IFdhbGxldFYxXG4pOiBQcm9taXNlPFdhbGxldFVuc3BlbnQ8VE51bWJlcj5bXT4ge1xuICBjb25zdCBhZGRyZXNzZXMgPSBuZXcgU2V0KHVuc3BlbnRzLm1hcCgodSkgPT4gdS5hZGRyZXNzKSk7XG4gIHJldHVybiAoXG4gICAgYXdhaXQgQmx1ZWJpcmQubWFwU2VyaWVzKGFkZHJlc3NlcywgYXN5bmMgKGFkZHJlc3MpOiBQcm9taXNlPFdhbGxldFVuc3BlbnQ8VE51bWJlcj5bXT4gPT4ge1xuICAgICAgbGV0IHNjcmlwdElkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2NyaXB0SWQgPSBhd2FpdCBnZXRTY3JpcHRJZChyZWNvdmVyeUNvaW4sIHdhbGxldCwgdXR4b2xpYi5hZGRyZXNzLnRvT3V0cHV0U2NyaXB0KGFkZHJlc3MsIHNvdXJjZUNvaW4ubmV0d29yaykpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBlcnJvciBnZXR0aW5nIHNjcmlwdElkIGZvciAke2FkZHJlc3N9OmAsIGUpO1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5zcGVudHNcbiAgICAgICAgLmZpbHRlcigodSkgPT4gdS5hZGRyZXNzID09PSBhZGRyZXNzKVxuICAgICAgICAubWFwKCh1KSA9PiAoe1xuICAgICAgICAgIC4uLnUsXG4gICAgICAgICAgLi4uc2NyaXB0SWQsXG4gICAgICAgIH0pKTtcbiAgICB9KVxuICApLmZsYXQoKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gY29pblxuICogQHJldHVybiBmZWVSYXRlIGZvciB0cmFuc2FjdGlvblxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRGZWVSYXRlU2F0VkIoY29pbjogQWJzdHJhY3RVdHhvQ29pbik6IFByb21pc2U8bnVtYmVyPiB7XG4gIC8vIFRPRE86IHVzZSBmZWVSYXRlIEFQSVxuICBjb25zdCBmZWVSYXRlID0ge1xuICAgIGJjaDogMjAsXG4gICAgdGJjaDogMjAsXG4gICAgYmNoYTogMjAsXG4gICAgdGJjaGE6IDIwLFxuICAgIGJzdjogMjAsXG4gICAgdGJzdjogMjAsXG4gICAgYnRjOiA4MCxcbiAgICB0YnRjOiA4MCxcbiAgICB0YnRjc2lnOiA4MCxcbiAgICB0YnRjNDogODAsXG4gICAgdGJ0Y2Jnc2lnOiA4MCxcbiAgICBsdGM6IDEwMCxcbiAgICB0bHRjOiAxMDAsXG4gICAgZG9nZTogMTAwMCxcbiAgICB0ZG9nZTogMTAwMCxcbiAgfVtjb2luLmdldENoYWluKCldO1xuXG4gIGlmICghZmVlUmF0ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgbm8gZmVlUmF0ZSBmb3IgJHtjb2luLmdldENoYWluKCl9YCk7XG4gIH1cblxuICByZXR1cm4gZmVlUmF0ZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0geHBydlxuICogQHBhcmFtIHBhc3NwaHJhc2VcbiAqIEBwYXJhbSB3YWxsZXRcbiAqIEByZXR1cm4gc2lnbmluZyBrZXlcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0UHJ2KHhwcnY/OiBzdHJpbmcsIHBhc3NwaHJhc2U/OiBzdHJpbmcsIHdhbGxldD86IElXYWxsZXQgfCBXYWxsZXRWMSk6IFByb21pc2U8QklQMzJJbnRlcmZhY2U+IHtcbiAgaWYgKHhwcnYpIHtcbiAgICBjb25zdCBrZXkgPSBiaXAzMi5mcm9tQmFzZTU4KHhwcnYpO1xuICAgIGlmIChrZXkuaXNOZXV0ZXJlZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vdCBhIHByaXZhdGUga2V5YCk7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH1cblxuICBpZiAoIXdhbGxldCB8fCAhcGFzc3BocmFzZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgbm8geHBydiBnaXZlbjogbmVlZCB3YWxsZXQgYW5kIHBhc3NwaHJhc2UgdG8gY29udGludWVgKTtcbiAgfVxuXG4gIGxldCBlbmNyeXB0ZWRQcnY6IHN0cmluZztcbiAgaWYgKHdhbGxldCBpbnN0YW5jZW9mIFdhbGxldCkge1xuICAgIGVuY3J5cHRlZFBydiA9IChhd2FpdCB3YWxsZXQuZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluKCkpLmVuY3J5cHRlZFBydjtcbiAgfSBlbHNlIHtcbiAgICBlbmNyeXB0ZWRQcnYgPSAoYXdhaXQgKHdhbGxldCBhcyBXYWxsZXRWMSkuZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluKCkpLmVuY3J5cHRlZFhwcnY7XG4gIH1cblxuICByZXR1cm4gZ2V0UHJ2KGRlY3J5cHQocGFzc3BocmFzZSwgZW5jcnlwdGVkUHJ2KSk7XG59XG5cbi8qKlxuICogQHBhcmFtIG5ldHdvcmtcbiAqIEBwYXJhbSB1bnNwZW50c1xuICogQHBhcmFtIHRhcmdldEFkZHJlc3NcbiAqIEBwYXJhbSBmZWVSYXRlU2F0VkJcbiAqIEBwYXJhbSBzaWduZXIgLSBpZiBzZXQsIHNpZ24gdHJhbnNhY3Rpb25cbiAqIEBwYXJhbSBhbW91bnRUeXBlXG4gKiBAcmV0dXJuIHRyYW5zYWN0aW9uIHNwZW5kaW5nIGZ1bGwgaW5wdXQgYW1vdW50IHRvIHRhcmdldEFkZHJlc3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlU3dlZXBUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrLFxuICB1bnNwZW50czogV2FsbGV0VW5zcGVudDxUTnVtYmVyPltdLFxuICB0YXJnZXRBZGRyZXNzOiBzdHJpbmcsXG4gIGZlZVJhdGVTYXRWQjogbnVtYmVyLFxuICBzaWduZXI/OiB1dHhvbGliLmJpdGdvLldhbGxldFVuc3BlbnRTaWduZXI8Um9vdFdhbGxldEtleXM+LFxuICBhbW91bnRUeXBlOiAnbnVtYmVyJyB8ICdiaWdpbnQnID0gJ251bWJlcidcbik6IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+IHtcbiAgY29uc3QgaW5wdXRWYWx1ZSA9IHVuc3BlbnRTdW08VE51bWJlcj4odW5zcGVudHMsIGFtb3VudFR5cGUpO1xuICBjb25zdCB2c2l6ZSA9IERpbWVuc2lvbnMuZnJvbVVuc3BlbnRzKHVuc3BlbnRzLCB7XG4gICAgcDJ0cjogeyBzY3JpcHRQYXRoTGV2ZWw6IDEgfSxcbiAgICBwMnRyTXVzaWcyOiB7IHNjcmlwdFBhdGhMZXZlbDogdW5kZWZpbmVkIH0sXG4gIH0pXG4gICAgLnBsdXMoRGltZW5zaW9ucy5mcm9tT3V0cHV0KHsgc2NyaXB0OiB1dHhvbGliLmFkZHJlc3MudG9PdXRwdXRTY3JpcHQodGFyZ2V0QWRkcmVzcywgbmV0d29yaykgfSkpXG4gICAgLmdldFZTaXplKCk7XG4gIGNvbnN0IGZlZSA9IHZzaXplICogZmVlUmF0ZVNhdFZCO1xuXG4gIGNvbnN0IHRyYW5zYWN0aW9uQnVpbGRlciA9IHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25CdWlsZGVyRm9yTmV0d29yazxUTnVtYmVyPihuZXR3b3JrKTtcbiAgdHJhbnNhY3Rpb25CdWlsZGVyLmFkZE91dHB1dChcbiAgICB0YXJnZXRBZGRyZXNzLFxuICAgIHV0eG9saWIuYml0Z28udG9UTnVtYmVyPFROdW1iZXI+KEJpZ0ludChpbnB1dFZhbHVlKSAtIEJpZ0ludChmZWUpLCBhbW91bnRUeXBlKVxuICApO1xuICB1bnNwZW50cy5mb3JFYWNoKCh1bnNwZW50KSA9PiB7XG4gICAgdXR4b2xpYi5iaXRnby5hZGRUb1RyYW5zYWN0aW9uQnVpbGRlcih0cmFuc2FjdGlvbkJ1aWxkZXIsIHVuc3BlbnQpO1xuICB9KTtcbiAgbGV0IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25CdWlsZGVyLmJ1aWxkSW5jb21wbGV0ZSgpO1xuICBpZiAoc2lnbmVyKSB7XG4gICAgdHJhbnNhY3Rpb24gPSBzaWduQW5kVmVyaWZ5V2FsbGV0VHJhbnNhY3Rpb248VE51bWJlcj4odHJhbnNhY3Rpb25CdWlsZGVyLCB1bnNwZW50cywgc2lnbmVyLCB7XG4gICAgICBpc0xhc3RTaWduYXR1cmU6IGZhbHNlLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiB0cmFuc2FjdGlvbjtcbn1cblxuZnVuY3Rpb24gZ2V0VHhJbmZvPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICB0cmFuc2FjdGlvbjogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gIHVuc3BlbnRzOiBXYWxsZXRVbnNwZW50PFROdW1iZXI+W10sXG4gIHdhbGxldElkOiBzdHJpbmcsXG4gIHdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzLFxuICBhbW91bnRUeXBlOiAnbnVtYmVyJyB8ICdiaWdpbnQnID0gJ251bWJlcidcbik6IFRyYW5zYWN0aW9uSW5mbzxUTnVtYmVyPiB7XG4gIGNvbnN0IGlucHV0QW1vdW50ID0gdXR4b2xpYi5iaXRnby51bnNwZW50U3VtPFROdW1iZXI+KHVuc3BlbnRzLCBhbW91bnRUeXBlKTtcbiAgY29uc3Qgb3V0cHV0QW1vdW50ID0gdXR4b2xpYi5iaXRnby50b1ROdW1iZXI8VE51bWJlcj4oXG4gICAgdHJhbnNhY3Rpb24ub3V0cy5yZWR1Y2UoKHN1bSwgbykgPT4gc3VtICsgQmlnSW50KG8udmFsdWUpLCBCaWdJbnQoMCkpLFxuICAgIGFtb3VudFR5cGVcbiAgKTtcbiAgY29uc3Qgb3V0cHV0cyA9IHRyYW5zYWN0aW9uLm91dHMubWFwKChvKSA9PiAoe1xuICAgIGFkZHJlc3M6IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KG8uc2NyaXB0LCB0cmFuc2FjdGlvbi5uZXR3b3JrKSxcbiAgICB2YWx1ZVN0cmluZzogby52YWx1ZS50b1N0cmluZygpLFxuICAgIGNoYW5nZTogZmFsc2UsXG4gIH0pKTtcbiAgY29uc3QgaW5wdXRzID0gdW5zcGVudHMubWFwKCh1KSA9PiB7XG4gICAgLy8gTk9URTpcbiAgICAvLyBUaGUgYHJlZGVlbVNjcmlwdGAgYW5kIGB3YWxsZXRTY3JpcHRgIHByb3BlcnRpZXMgYXJlIHJlcXVpcmVkIGZvciBsZWdhY3kgdmVyc2lvbnMgb2YgQml0R29KU1xuICAgIC8vIHdoaWNoIG1pZ2h0IHJlcXVpcmUgdGhlc2Ugc2NyaXB0cyBmb3Igc2lnbmluZy4gVGhlIFdhbGxldCBSZWNvdmVyeSBXaXphcmQgKFdSVykgY2FuIGNyZWF0ZVxuICAgIC8vIHVuc2lnbmVkIHByZWJ1aWxkcyB0aGF0IGFyZSBzdWJtaXR0ZWQgdG8gQml0R29KUyBpbnN0YW5jZXMgd2hpY2ggYXJlIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZVxuICAgIC8vIHZlcnNpb24uXG4gICAgY29uc3QgYWRkcmVzc0tleXMgPSB3YWxsZXRLZXlzLmRlcml2ZUZvckNoYWluQW5kSW5kZXgodS5jaGFpbiwgdS5pbmRleCk7XG4gICAgY29uc3Qgc2NyaXB0VHlwZSA9IHNjcmlwdFR5cGVGb3JDaGFpbih1LmNoYWluKTtcbiAgICBjb25zdCB7IHJlZGVlbVNjcmlwdCwgd2l0bmVzc1NjcmlwdCB9ID0gb3V0cHV0U2NyaXB0cy5jcmVhdGVPdXRwdXRTY3JpcHQyb2YzKGFkZHJlc3NLZXlzLnB1YmxpY0tleXMsIHNjcmlwdFR5cGUpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnUsXG4gICAgICB3YWxsZXQ6IHdhbGxldElkLFxuICAgICAgZnJvbVdhbGxldDogd2FsbGV0SWQsXG4gICAgICByZWRlZW1TY3JpcHQ6IHJlZGVlbVNjcmlwdD8udG9TdHJpbmcoJ2hleCcpLFxuICAgICAgd2l0bmVzc1NjcmlwdDogd2l0bmVzc1NjcmlwdD8udG9TdHJpbmcoJ2hleCcpLFxuICAgIH0gYXMgV2FsbGV0VW5zcGVudExlZ2FjeTxUTnVtYmVyPjtcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgaW5wdXRBbW91bnQsXG4gICAgb3V0cHV0QW1vdW50LFxuICAgIG1pbmVyRmVlOiBpbnB1dEFtb3VudCAtIG91dHB1dEFtb3VudCxcbiAgICBzcGVuZEFtb3VudDogb3V0cHV0QW1vdW50LFxuICAgIGlucHV0cyxcbiAgICB1bnNwZW50czogaW5wdXRzLFxuICAgIG91dHB1dHMsXG4gICAgZXh0ZXJuYWxPdXRwdXRzOiBvdXRwdXRzLFxuICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgIHBheUdvRmVlOiAwLFxuICB9IC8qIGNhc3QgdG8gVHJhbnNhY3Rpb25JbmZvIHRvIGFsbG93IGV4dHJhIGZpZWxkcyBtYXkgYmUgcmVxdWlyZWQgYnkgbGVnYWN5IGNvbnN1bWVycyBvZiB0aGlzIGRhdGEgKi8gYXMgVHJhbnNhY3Rpb25JbmZvPFROdW1iZXI+O1xufVxuXG5mdW5jdGlvbiBnZXRGZWVJbmZvPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICB0cmFuc2FjdGlvbjogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gIHVuc3BlbnRzOiBXYWxsZXRVbnNwZW50PFROdW1iZXI+W10sXG4gIGFtb3VudFR5cGU6ICdudW1iZXInIHwgJ2JpZ2ludCcgPSAnbnVtYmVyJ1xuKTogRmVlSW5mbyB7XG4gIGNvbnN0IHZzaXplID0gRGltZW5zaW9ucy5mcm9tVW5zcGVudHModW5zcGVudHMsIHtcbiAgICBwMnRyOiB7IHNjcmlwdFBhdGhMZXZlbDogMSB9LFxuICAgIHAydHJNdXNpZzI6IHsgc2NyaXB0UGF0aExldmVsOiB1bmRlZmluZWQgfSxcbiAgfSlcbiAgICAucGx1cyhEaW1lbnNpb25zLmZyb21PdXRwdXRzKHRyYW5zYWN0aW9uLm91dHMpKVxuICAgIC5nZXRWU2l6ZSgpO1xuICBjb25zdCBpbnB1dEFtb3VudCA9IHV0eG9saWIuYml0Z28udW5zcGVudFN1bTxUTnVtYmVyPih1bnNwZW50cywgYW1vdW50VHlwZSk7XG4gIGNvbnN0IG91dHB1dEFtb3VudCA9IHRyYW5zYWN0aW9uLm91dHMucmVkdWNlKChzdW0sIG8pID0+IHN1bSArIEJpZ0ludChvLnZhbHVlKSwgQmlnSW50KDApKTtcbiAgY29uc3QgZmVlID0gTnVtYmVyKEJpZ0ludChpbnB1dEFtb3VudCkgLSBvdXRwdXRBbW91bnQpO1xuICByZXR1cm4ge1xuICAgIHNpemU6IHZzaXplLFxuICAgIGZlZSxcbiAgICBmZWVSYXRlOiBmZWUgLyB2c2l6ZSxcbiAgICBwYXlHb0ZlZTogMCxcbiAgfTtcbn1cblxudHlwZSBSZWNvdmVyUGFyYW1zID0ge1xuICAvKiogV2FsbGV0IElEIChjYW4gYmUgdjEgd2FsbGV0IG9yIHYyIHdhbGxldCkgKi9cbiAgd2FsbGV0SWQ6IHN0cmluZztcbiAgLyoqIENvaW4gdG8gY3JlYXRlIHRoZSB0cmFuc2FjdGlvbiBmb3IgKi9cbiAgc291cmNlQ29pbjogQWJzdHJhY3RVdHhvQ29pbjtcbiAgLyoqIENvaW4gdGhhdCB3YWxsZXQga2V5cyB3ZXJlIHNldCB1cCBmb3IgKi9cbiAgcmVjb3ZlcnlDb2luOiBBYnN0cmFjdFV0eG9Db2luO1xuICAvKiogU291cmNlIGNvaW4gdHJhbnNhY3Rpb24gdG8gcmVjb3ZlciBvdXRwdXRzIGZyb20gKHNvdXJjZUNvaW4pICovXG4gIHR4aWQ6IHN0cmluZztcbiAgLyoqIFNvdXJjZSBjb2luIGFkZHJlc3MgdG8gc2VuZCB0aGUgZnVuZHMgdG8gKi9cbiAgcmVjb3ZlcnlBZGRyZXNzOiBzdHJpbmc7XG4gIC8qKiBJZiBzZXQsIGRlY3J5cHRzIHByaXZhdGUga2V5IGFuZCBzaWducyB0cmFuc2FjdGlvbiAqL1xuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nO1xuICAvKiogSWYgc2V0LCBzaWducyB0cmFuc2FjdGlvbiAqL1xuICB4cHJ2Pzogc3RyaW5nO1xuICAvKiogZm9yIHV0eG8gY29pbnMgb3RoZXIgdGhhbiBbQlRDLFRCVENdIHRoaXMgaXMgYSBCbG9jayBDaGFpciBhcGkga2V5ICoqL1xuICBhcGlLZXk/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFJlY292ZXIgd2FsbGV0IGRlcG9zaXRzIHRoYXQgd2VyZSByZWNlaXZlZCBvbiB0aGUgd3JvbmcgYmxvY2tjaGFpblxuICogKGZvciBpbnN0YW5jZSBiaXRjb2luIGRlcG9zaXRzIHRoYXQgd2VyZSByZWNlaXZlZCBmb3IgYSBsaXRlY29pbiB3YWxsZXQpLlxuICpcbiAqIEZldGNoZXMgdGhlIHVuc3BlbnQgZGF0YSBmcm9tIEJpdEdvJ3MgcHVibGljIGJsb2NrY2hhaW4gQVBJIGFuZCB0aGUgc2NyaXB0IGRhdGEgZnJvbSB0aGUgdXNlcidzXG4gKiB3YWxsZXQuXG4gKlxuICogQHBhcmFtIHtCaXRHb0Jhc2V9IGJpdGdvXG4gKiBAcGFyYW0ge1JlY292ZXJQYXJhbXN9IHBhcmFtc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVjb3ZlckNyb3NzQ2hhaW48VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIGJpdGdvOiBCaXRHb0Jhc2UsXG4gIHBhcmFtczogUmVjb3ZlclBhcmFtc1xuKTogUHJvbWlzZTxDcm9zc0NoYWluUmVjb3ZlcnlTaWduZWQ8VE51bWJlcj4gfCBDcm9zc0NoYWluUmVjb3ZlcnlVbnNpZ25lZDxUTnVtYmVyPj4ge1xuICBjb25zdCB3YWxsZXQgPSBhd2FpdCBnZXRXYWxsZXQoYml0Z28sIHBhcmFtcy5yZWNvdmVyeUNvaW4sIHBhcmFtcy53YWxsZXRJZCk7XG4gIGNvbnN0IHVuc3BlbnRzID0gYXdhaXQgZ2V0QWxsUmVjb3ZlcnlPdXRwdXRzPFROdW1iZXI+KFxuICAgIHBhcmFtcy5zb3VyY2VDb2luLFxuICAgIHBhcmFtcy50eGlkLFxuICAgIHBhcmFtcy5zb3VyY2VDb2luLmFtb3VudFR5cGUsXG4gICAgd2FsbGV0LFxuICAgIHBhcmFtcy5hcGlLZXlcbiAgKTtcbiAgY29uc3Qgd2FsbGV0VW5zcGVudHMgPSBhd2FpdCB0b1dhbGxldFVuc3BlbnRzPFROdW1iZXI+KHBhcmFtcy5zb3VyY2VDb2luLCBwYXJhbXMucmVjb3ZlcnlDb2luLCB1bnNwZW50cywgd2FsbGV0KTtcbiAgY29uc3Qgd2FsbGV0S2V5cyA9IGF3YWl0IGdldFdhbGxldEtleXMocGFyYW1zLnJlY292ZXJ5Q29pbiwgd2FsbGV0KTtcbiAgY29uc3QgcHJ2ID1cbiAgICBwYXJhbXMueHBydiB8fCBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSA/IGF3YWl0IGdldFBydihwYXJhbXMueHBydiwgcGFyYW1zLndhbGxldFBhc3NwaHJhc2UsIHdhbGxldCkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHNpZ25lciA9IHBydlxuICAgID8gbmV3IHV0eG9saWIuYml0Z28uV2FsbGV0VW5zcGVudFNpZ25lcjxSb290V2FsbGV0S2V5cz4od2FsbGV0S2V5cywgcHJ2LCB3YWxsZXRLZXlzLmJpdGdvKVxuICAgIDogdW5kZWZpbmVkO1xuICBjb25zdCBmZWVSYXRlU2F0VkIgPSBhd2FpdCBnZXRGZWVSYXRlU2F0VkIocGFyYW1zLnNvdXJjZUNvaW4pO1xuICBjb25zdCB0cmFuc2FjdGlvbiA9IGNyZWF0ZVN3ZWVwVHJhbnNhY3Rpb248VE51bWJlcj4oXG4gICAgcGFyYW1zLnNvdXJjZUNvaW4ubmV0d29yayxcbiAgICB3YWxsZXRVbnNwZW50cyxcbiAgICBwYXJhbXMucmVjb3ZlcnlBZGRyZXNzLFxuICAgIGZlZVJhdGVTYXRWQixcbiAgICBzaWduZXIsXG4gICAgcGFyYW1zLnNvdXJjZUNvaW4uYW1vdW50VHlwZVxuICApO1xuICBjb25zdCByZWNvdmVyeUFtb3VudCA9IHRyYW5zYWN0aW9uLm91dHNbMF0udmFsdWU7XG4gIGNvbnN0IHR4SGV4ID0gdHJhbnNhY3Rpb24udG9CdWZmZXIoKS50b1N0cmluZygnaGV4Jyk7XG4gIGNvbnN0IHR4SW5mbyA9IGdldFR4SW5mbzxUTnVtYmVyPihcbiAgICB0cmFuc2FjdGlvbixcbiAgICB3YWxsZXRVbnNwZW50cyxcbiAgICBwYXJhbXMud2FsbGV0SWQsXG4gICAgd2FsbGV0S2V5cyxcbiAgICBwYXJhbXMuc291cmNlQ29pbi5hbW91bnRUeXBlXG4gICk7XG4gIGlmIChwcnYpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmVyc2lvbjogd2FsbGV0IGluc3RhbmNlb2YgV2FsbGV0ID8gMiA6IDEsXG4gICAgICB3YWxsZXRJZDogcGFyYW1zLndhbGxldElkLFxuICAgICAgdHhIZXgsXG4gICAgICB0eEluZm8sXG4gICAgICBzb3VyY2VDb2luOiBwYXJhbXMuc291cmNlQ29pbi5nZXRDaGFpbigpLFxuICAgICAgcmVjb3ZlcnlDb2luOiBwYXJhbXMucmVjb3ZlcnlDb2luLmdldENoYWluKCksXG4gICAgICByZWNvdmVyeUFtb3VudCxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICB0eEhleCxcbiAgICAgIHR4SW5mbyxcbiAgICAgIHdhbGxldElkOiBwYXJhbXMud2FsbGV0SWQsXG4gICAgICBmZWVJbmZvOiBnZXRGZWVJbmZvKHRyYW5zYWN0aW9uLCB3YWxsZXRVbnNwZW50cywgcGFyYW1zLnNvdXJjZUNvaW4uYW1vdW50VHlwZSksXG4gICAgICBhZGRyZXNzOiBwYXJhbXMucmVjb3ZlcnlBZGRyZXNzLFxuICAgICAgY29pbjogcGFyYW1zLnNvdXJjZUNvaW4uZ2V0Q2hhaW4oKSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"sign.d.ts","sourceRoot":"","sources":["../../src/sign.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAUhD,KAAK,OAAO,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAExF,KAAK,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC;AAUnD,qBAAa,iBAAiB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE,SAAQ,KAAK;IAS3E,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE;IAC1C,MAAM,EAAE,KAAK,GAAG,MAAM;IAV/B,MAAM,CAAC,qBAAqB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC1D,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GACzC,iBAAiB,CAAC,OAAO,CAAC;gBAKpB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,EAC1C,MAAM,EAAE,KAAK,GAAG,MAAM;CAIhC;AAED,qBAAa,uBAAuB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE,SAAQ,KAAK;gBAC9E,UAAU,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAAE;CAMhG;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAC5B,cAAc,EAAE,OAAO,CAAC,cAAc,EACtC,EACE,eAAe,EACf,kCAAkC,GACnC,EAAE;IAAE,eAAe,EAAE,OAAO,CAAC;IAAC,kCAAkC,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5E,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAuEhE;AAED;;;;;;;;;GASG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC5E,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,OAAO,CAAC,EACnG,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,EAC5B,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,cAAc,CAAC,EAC/D,EAAE,eAAe,EAAE,EAAE;IAAE,eAAe,EAAE,OAAO,CAAA;CAAE,GAChD,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAqExC"}
1
+ {"version":3,"file":"sign.d.ts","sourceRoot":"","sources":["../../src/sign.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAShD,KAAK,OAAO,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAExF,KAAK,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC;AAUnD,qBAAa,iBAAiB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE,SAAQ,KAAK;IAS3E,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE;IAC1C,MAAM,EAAE,KAAK,GAAG,MAAM;IAV/B,MAAM,CAAC,qBAAqB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC1D,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GACzC,iBAAiB,CAAC,OAAO,CAAC;gBAKpB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,EAC1C,MAAM,EAAE,KAAK,GAAG,MAAM;CAIhC;AAED,qBAAa,uBAAuB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE,SAAQ,KAAK;gBAC9E,UAAU,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAAE;CAMhG;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAC5B,cAAc,EAAE,OAAO,CAAC,cAAc,EACtC,EACE,eAAe,EACf,kCAAkC,GACnC,EAAE;IAAE,eAAe,EAAE,OAAO,CAAC;IAAC,kCAAkC,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5E,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAuEhE;AAED;;;;;;;;;GASG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC5E,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,OAAO,CAAC,EACnG,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,EAC5B,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,cAAc,CAAC,EAC/D,EAAE,eAAe,EAAE,EAAE;IAAE,eAAe,EAAE,OAAO,CAAA;CAAE,GAChD,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAqExC"}
package/dist/src/sign.js CHANGED
@@ -200,4 +200,4 @@ function signAndVerifyWalletTransaction(transaction, unspents, walletSigner, { i
200
200
  }
201
201
  return signedTransaction;
202
202
  }
203
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zaWduLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQThEQSw4Q0E4RUM7QUFZRCx3RUEwRUM7QUFsT0QsOERBQWdEO0FBRWhELGtEQUE2QjtBQUU3Qix5REFBK0Q7QUFFL0QsTUFBTSxLQUFLLEdBQUcsSUFBQSxlQUFRLEVBQUMsZUFBZSxDQUFDLENBQUM7QUFFeEMsTUFBTSxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxRQUFRLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBYzFFLE1BQWEsaUJBQTRELFNBQVEsS0FBSztJQUNwRixNQUFNLENBQUMscUJBQXFCLENBQzFCLFVBQWtCLEVBQ2xCLE9BQTBDO1FBRTFDLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLHVEQUF1RCxDQUFDLENBQUM7SUFDN0csQ0FBQztJQUVELFlBQ1MsVUFBa0IsRUFDbEIsT0FBMEMsRUFDMUMsTUFBc0I7UUFFN0IsS0FBSyxDQUFDLDBCQUEwQixVQUFVLGVBQWUsT0FBTyxDQUFDLEVBQUUsS0FBSyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBSjNFLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDbEIsWUFBTyxHQUFQLE9BQU8sQ0FBbUM7UUFDMUMsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7SUFHL0IsQ0FBQztDQUNGO0FBZkQsOENBZUM7QUFFRCxNQUFhLHVCQUFrRSxTQUFRLEtBQUs7SUFDMUYsWUFBWSxVQUF3QyxFQUFFLFdBQXlDO1FBQzdGLEtBQUssQ0FDSCwyQkFBMkIsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSztZQUNsRCw2QkFBNkIsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQzdFLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFQRCwwREFPQztB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Q0FBQyxFQUFFLENBQUM7WUFDWCxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUMzQixPQUFPLElBQUksaUJBQWlCLENBQVUsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDO0lBQ0gsQ0FBQyxDQUFDO1NBQ0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFtQyxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDO0lBRW5FLElBQUksVUFBVSxDQUFDLE1BQU0sSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDN0MsTUFBTSxJQUFJLHVCQUF1QixDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsT0FBTyxpQkFBaUIsQ0FBQztBQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5cbmltcG9ydCBkZWJ1Z0xpYiBmcm9tICdkZWJ1Zyc7XG5cbmltcG9ydCB7IGlzUmVwbGF5UHJvdGVjdGlvblVuc3BlbnQgfSBmcm9tICcuL3JlcGxheVByb3RlY3Rpb24nO1xuXG5jb25zdCBkZWJ1ZyA9IGRlYnVnTGliKCdiaXRnbzp2Mjp1dHhvJyk7XG5cbmNvbnN0IHsgaXNXYWxsZXRVbnNwZW50LCBzaWduSW5wdXRXaXRoVW5zcGVudCwgdG9PdXRwdXQgfSA9IHV0eG9saWIuYml0Z287XG5cbnR5cGUgVW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiA9IHV0eG9saWIuYml0Z28uVW5zcGVudDxUTnVtYmVyPjtcblxudHlwZSBSb290V2FsbGV0S2V5cyA9IHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXM7XG5cbnR5cGUgUHNidFBhcnNlZFNjcmlwdFR5cGVzID1cbiAgfCAncDJzaCdcbiAgfCAncDJ3c2gnXG4gIHwgJ3Ayc2hQMndzaCdcbiAgfCAncDJzaFAycGsnXG4gIHwgJ3RhcHJvb3RLZXlQYXRoU3BlbmQnXG4gIHwgJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnO1xuXG5leHBvcnQgY2xhc3MgSW5wdXRTaWduaW5nRXJyb3I8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gZXh0ZW5kcyBFcnJvciB7XG4gIHN0YXRpYyBleHBlY3RlZFdhbGxldFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gICAgaW5wdXRJbmRleDogbnVtYmVyLFxuICAgIHVuc3BlbnQ6IFVuc3BlbnQ8VE51bWJlcj4gfCB7IGlkOiBzdHJpbmcgfVxuICApOiBJbnB1dFNpZ25pbmdFcnJvcjxUTnVtYmVyPiB7XG4gICAgcmV0dXJuIG5ldyBJbnB1dFNpZ25pbmdFcnJvcihpbnB1dEluZGV4LCB1bnNwZW50LCBgbm90IGEgd2FsbGV0IHVuc3BlbnQsIG5vdCBhIHJlcGxheSBwcm90ZWN0aW9uIHVuc3BlbnRgKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBpbnB1dEluZGV4OiBudW1iZXIsXG4gICAgcHVibGljIHVuc3BlbnQ6IFVuc3BlbnQ8VE51bWJlcj4gfCB7IGlkOiBzdHJpbmcgfSxcbiAgICBwdWJsaWMgcmVhc29uOiBFcnJvciB8IHN0cmluZ1xuICApIHtcbiAgICBzdXBlcihgc2lnbmluZyBlcnJvciBhdCBpbnB1dCAke2lucHV0SW5kZXh9OiB1bnNwZW50SWQ9JHt1bnNwZW50LmlkfTogJHtyZWFzb259YCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uU2lnbmluZ0Vycm9yPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihzaWduRXJyb3JzOiBJbnB1dFNpZ25pbmdFcnJvcjxUTnVtYmVyPltdLCB2ZXJpZnlFcnJvcjogSW5wdXRTaWduaW5nRXJyb3I8VE51bWJlcj5bXSkge1xuICAgIHN1cGVyKFxuICAgICAgYHNpZ24gZXJyb3JzIGF0IGlucHV0czogWyR7c2lnbkVycm9ycy5qb2luKCcsJyl9XSwgYCArXG4gICAgICAgIGB2ZXJpZnkgZXJyb3JzIGF0IGlucHV0czogWyR7dmVyaWZ5RXJyb3Iuam9pbignLCcpfV0sIHNlZSBsb2cgZm9yIGRldGFpbHNgXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFNpZ24gYWxsIGlucHV0cyBvZiBhIHBzYnQgYW5kIHZlcmlmeSBzaWduYXR1cmVzIGFmdGVyIHNpZ25pbmcuXG4gKiBDb2xsZWN0cyBhbmQgbG9ncyBzaWduaW5nIGVycm9ycyBhbmQgdmVyaWZpY2F0aW9uIGVycm9ycywgdGhyb3dzIGVycm9yIGluIHRoZSBlbmQgaWYgYW55IG9mIHRoZW1cbiAqIGZhaWxlZC5cbiAqXG4gKiBJZiBpdCBpcyB0aGUgbGFzdCBzaWduYXR1cmUsIGZpbmFsaXplIGFuZCBleHRyYWN0IHRoZSB0cmFuc2FjdGlvbiBmcm9tIHRoZSBwc2J0LlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gbWlycm9ycyBzaWduQW5kVmVyaWZ5V2FsbGV0VHJhbnNhY3Rpb24sIGJ1dCBpcyB1c2VkIGZvciBzaWduaW5nIFBTQlRzIGluc3RlYWQgb2ZcbiAqIHVzaW5nIFRyYW5zYWN0aW9uQnVpbGRlclxuICpcbiAqIEBwYXJhbSBwc2J0XG4gKiBAcGFyYW0gc2lnbmVyS2V5Y2hhaW5cbiAqIEBwYXJhbSBpc0xhc3RTaWduYXR1cmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpZ25BbmRWZXJpZnlQc2J0KFxuICBwc2J0OiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LFxuICBzaWduZXJLZXljaGFpbjogdXR4b2xpYi5CSVAzMkludGVyZmFjZSxcbiAge1xuICAgIGlzTGFzdFNpZ25hdHVyZSxcbiAgICBhbGxvd05vblNlZ3dpdFNpZ25pbmdXaXRob3V0UHJldlR4LFxuICB9OiB7IGlzTGFzdFNpZ25hdHVyZTogYm9vbGVhbjsgYWxsb3dOb25TZWd3aXRTaWduaW5nV2l0aG91dFByZXZUeD86IGJvb2xlYW4gfVxuKTogdXR4b2xpYi5iaXRnby5VdHhvUHNidCB8IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uPGJpZ2ludD4ge1xuICBjb25zdCB0eElucHV0cyA9IHBzYnQudHhJbnB1dHM7XG4gIGNvbnN0IG91dHB1dElkczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgc2NyaXB0VHlwZXM6IFBzYnRQYXJzZWRTY3JpcHRUeXBlc1tdID0gW107XG5cbiAgY29uc3Qgc2lnbkVycm9yczogSW5wdXRTaWduaW5nRXJyb3I8YmlnaW50PltdID0gcHNidC5kYXRhLmlucHV0c1xuICAgIC5tYXAoKGlucHV0LCBpbnB1dEluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dElkID0gdXR4b2xpYi5iaXRnby5mb3JtYXRPdXRwdXRJZCh1dHhvbGliLmJpdGdvLmdldE91dHB1dElkRm9ySW5wdXQodHhJbnB1dHNbaW5wdXRJbmRleF0pKTtcbiAgICAgIG91dHB1dElkcy5wdXNoKG91dHB1dElkKTtcblxuICAgICAgY29uc3QgeyBzY3JpcHRUeXBlIH0gPSB1dHhvbGliLmJpdGdvLnBhcnNlUHNidElucHV0KGlucHV0KTtcbiAgICAgIHNjcmlwdFR5cGVzLnB1c2goc2NyaXB0VHlwZSk7XG5cbiAgICAgIGlmIChzY3JpcHRUeXBlID09PSAncDJzaFAycGsnKSB7XG4gICAgICAgIGRlYnVnKCdTa2lwcGluZyBzaWduYXR1cmUgZm9yIGlucHV0ICVkIG9mICVkIChSUCBpbnB1dD8pJywgaW5wdXRJbmRleCArIDEsIHBzYnQuZGF0YS5pbnB1dHMubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICB1dHhvbGliLmJpdGdvLndpdGhVbnNhZmVOb25TZWd3aXQoXG4gICAgICAgICAgcHNidCxcbiAgICAgICAgICAoKSA9PiBwc2J0LnNpZ25JbnB1dEhEKGlucHV0SW5kZXgsIHNpZ25lcktleWNoYWluKSxcbiAgICAgICAgICAhIWFsbG93Tm9uU2Vnd2l0U2lnbmluZ1dpdGhvdXRQcmV2VHhcbiAgICAgICAgKTtcbiAgICAgICAgZGVidWcoJ1N1Y2Nlc3NmdWxseSBzaWduZWQgaW5wdXQgJWQgb2YgJWQnLCBpbnB1dEluZGV4ICsgMSwgcHNidC5kYXRhLmlucHV0cy5sZW5ndGgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gbmV3IElucHV0U2lnbmluZ0Vycm9yPGJpZ2ludD4oaW5wdXRJbmRleCwgeyBpZDogb3V0cHV0SWQgfSwgZSk7XG4gICAgICB9XG4gICAgfSlcbiAgICAuZmlsdGVyKChlKTogZSBpcyBJbnB1dFNpZ25pbmdFcnJvcjxiaWdpbnQ+ID0+IGUgIT09IHVuZGVmaW5lZCk7XG5cbiAgY29uc3QgdmVyaWZ5RXJyb3JzOiBJbnB1dFNpZ25pbmdFcnJvcjxiaWdpbnQ+W10gPSBwc2J0LmRhdGEuaW5wdXRzXG4gICAgLm1hcCgoaW5wdXQsIGlucHV0SW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHNjcmlwdFR5cGUgPSBzY3JpcHRUeXBlc1tpbnB1dEluZGV4XTtcbiAgICAgIGlmIChzY3JpcHRUeXBlID09PSAncDJzaFAycGsnKSB7XG4gICAgICAgIGRlYnVnKFxuICAgICAgICAgICdTa2lwcGluZyBpbnB1dCBzaWduYXR1cmUgJWQgb2YgJWQgKHVuc3BlbnQgZnJvbSByZXBsYXkgcHJvdGVjdGlvbiBhZGRyZXNzIHdoaWNoIGlzIHBsYXRmb3JtIHNpZ25lZCBvbmx5KScsXG4gICAgICAgICAgaW5wdXRJbmRleCArIDEsXG4gICAgICAgICAgcHNidC5kYXRhLmlucHV0cy5sZW5ndGhcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvdXRwdXRJZCA9IG91dHB1dElkc1tpbnB1dEluZGV4XTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhdXR4b2xpYi5iaXRnby53aXRoVW5zYWZlTm9uU2Vnd2l0KFxuICAgICAgICAgICAgcHNidCxcbiAgICAgICAgICAgICgpID0+IHBzYnQudmFsaWRhdGVTaWduYXR1cmVzT2ZJbnB1dEhEKGlucHV0SW5kZXgsIHNpZ25lcktleWNoYWluKSxcbiAgICAgICAgICAgICEhYWxsb3dOb25TZWd3aXRTaWduaW5nV2l0aG91dFByZXZUeFxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBJbnB1dFNpZ25pbmdFcnJvcihpbnB1dEluZGV4LCB7IGlkOiBvdXRwdXRJZCB9LCBuZXcgRXJyb3IoYGludmFsaWQgc2lnbmF0dXJlYCkpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGRlYnVnKCdJbnZhbGlkIHNpZ25hdHVyZScpO1xuICAgICAgICByZXR1cm4gbmV3IElucHV0U2lnbmluZ0Vycm9yPGJpZ2ludD4oaW5wdXRJbmRleCwgeyBpZDogb3V0cHV0SWQgfSwgZSk7XG4gICAgICB9XG4gICAgfSlcbiAgICAuZmlsdGVyKChlKTogZSBpcyBJbnB1dFNpZ25pbmdFcnJvcjxiaWdpbnQ+ID0+IGUgIT09IHVuZGVmaW5lZCk7XG5cbiAgaWYgKHNpZ25FcnJvcnMubGVuZ3RoIHx8IHZlcmlmeUVycm9ycy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgVHJhbnNhY3Rpb25TaWduaW5nRXJyb3Ioc2lnbkVycm9ycywgdmVyaWZ5RXJyb3JzKTtcbiAgfVxuXG4gIGlmIChpc0xhc3RTaWduYXR1cmUpIHtcbiAgICBwc2J0LmZpbmFsaXplQWxsSW5wdXRzKCk7XG4gICAgcmV0dXJuIHBzYnQuZXh0cmFjdFRyYW5zYWN0aW9uKCk7XG4gIH1cblxuICByZXR1cm4gcHNidDtcbn1cblxuLyoqXG4gKiBTaWduIGFsbCBpbnB1dHMgb2YgYSB3YWxsZXQgdHJhbnNhY3Rpb24gYW5kIHZlcmlmeSBzaWduYXR1cmVzIGFmdGVyIHNpZ25pbmcuXG4gKiBDb2xsZWN0cyBhbmQgbG9ncyBzaWduaW5nIGVycm9ycyBhbmQgdmVyaWZpY2F0aW9uIGVycm9ycywgdGhyb3dzIGVycm9yIGluIHRoZSBlbmQgaWYgYW55IG9mIHRoZW1cbiAqIGZhaWxlZC5cbiAqXG4gKiBAcGFyYW0gdHJhbnNhY3Rpb24gLSB3YWxsZXQgdHJhbnNhY3Rpb24gKGJ1aWxkZXIpIHRvIGJlIHNpZ25lZFxuICogQHBhcmFtIHVuc3BlbnRzIC0gdHJhbnNhY3Rpb24gdW5zcGVudHNcbiAqIEBwYXJhbSB3YWxsZXRTaWduZXIgLSBzaWduaW5nIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBpc0xhc3RTaWduYXR1cmUgLSBSZXR1cm5zIGZ1bGwtc2lnbmVkIHRyYW5zYWN0aW9uIHdoZW4gdHJ1ZS4gQnVpbGRzIGhhbGYtc2lnbmVkIHdoZW4gZmFsc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWduQW5kVmVyaWZ5V2FsbGV0VHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHRyYW5zYWN0aW9uOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPiB8IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uQnVpbGRlcjxUTnVtYmVyPixcbiAgdW5zcGVudHM6IFVuc3BlbnQ8VE51bWJlcj5bXSxcbiAgd2FsbGV0U2lnbmVyOiB1dHhvbGliLmJpdGdvLldhbGxldFVuc3BlbnRTaWduZXI8Um9vdFdhbGxldEtleXM+LFxuICB7IGlzTGFzdFNpZ25hdHVyZSB9OiB7IGlzTGFzdFNpZ25hdHVyZTogYm9vbGVhbiB9XG4pOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPiB7XG4gIGNvbnN0IG5ldHdvcmsgPSB0cmFuc2FjdGlvbi5uZXR3b3JrIGFzIHV0eG9saWIuTmV0d29yaztcbiAgY29uc3QgcHJldk91dHB1dHMgPSB1bnNwZW50cy5tYXAoKHUpID0+IHRvT3V0cHV0KHUsIG5ldHdvcmspKTtcblxuICBsZXQgdHhCdWlsZGVyOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbkJ1aWxkZXI8VE51bWJlcj47XG4gIGlmICh0cmFuc2FjdGlvbiBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uKSB7XG4gICAgdHhCdWlsZGVyID0gdXR4b2xpYi5iaXRnby5jcmVhdGVUcmFuc2FjdGlvbkJ1aWxkZXJGcm9tVHJhbnNhY3Rpb248VE51bWJlcj4odHJhbnNhY3Rpb24sIHByZXZPdXRwdXRzKTtcbiAgICBpZiAodHJhbnNhY3Rpb24uaW5zLmxlbmd0aCAhPT0gdW5zcGVudHMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHRyYW5zYWN0aW9uIGlucHV0cyBtdXN0IG1hdGNoIHVuc3BlbnRzYCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHRyYW5zYWN0aW9uIGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb25CdWlsZGVyKSB7XG4gICAgdHhCdWlsZGVyID0gdHJhbnNhY3Rpb247XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBtdXN0IHBhc3MgVXR4b1RyYW5zYWN0aW9uIG9yIFV0eG9UcmFuc2FjdGlvbkJ1aWxkZXJgKTtcbiAgfVxuXG4gIGNvbnN0IHNpZ25FcnJvcnM6IElucHV0U2lnbmluZ0Vycm9yPFROdW1iZXI+W10gPSB1bnNwZW50c1xuICAgIC5tYXAoKHVuc3BlbnQ6IFVuc3BlbnQ8VE51bWJlcj4sIGlucHV0SW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgaWYgKGlzUmVwbGF5UHJvdGVjdGlvblVuc3BlbnQ8VE51bWJlcj4odW5zcGVudCwgbmV0d29yaykpIHtcbiAgICAgICAgZGVidWcoJ1NraXBwaW5nIHNpZ25hdHVyZSBmb3IgaW5wdXQgJWQgb2YgJWQgKFJQIGlucHV0PyknLCBpbnB1dEluZGV4ICsgMSwgdW5zcGVudHMubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFpc1dhbGxldFVuc3BlbnQ8VE51bWJlcj4odW5zcGVudCkpIHtcbiAgICAgICAgcmV0dXJuIElucHV0U2lnbmluZ0Vycm9yLmV4cGVjdGVkV2FsbGV0VW5zcGVudDxUTnVtYmVyPihpbnB1dEluZGV4LCB1bnNwZW50KTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIHNpZ25JbnB1dFdpdGhVbnNwZW50PFROdW1iZXI+KHR4QnVpbGRlciwgaW5wdXRJbmRleCwgdW5zcGVudCwgd2FsbGV0U2lnbmVyKTtcbiAgICAgICAgZGVidWcoJ1N1Y2Nlc3NmdWxseSBzaWduZWQgaW5wdXQgJWQgb2YgJWQnLCBpbnB1dEluZGV4ICsgMSwgdW5zcGVudHMubGVuZ3RoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnB1dFNpZ25pbmdFcnJvcjxUTnVtYmVyPihpbnB1dEluZGV4LCB1bnNwZW50LCBlKTtcbiAgICAgIH1cbiAgICB9KVxuICAgIC5maWx0ZXIoKGUpOiBlIGlzIElucHV0U2lnbmluZ0Vycm9yPFROdW1iZXI+ID0+IGUgIT09IHVuZGVmaW5lZCk7XG5cbiAgY29uc3Qgc2lnbmVkVHJhbnNhY3Rpb24gPSBpc0xhc3RTaWduYXR1cmUgPyB0eEJ1aWxkZXIuYnVpbGQoKSA6IHR4QnVpbGRlci5idWlsZEluY29tcGxldGUoKTtcblxuICBjb25zdCB2ZXJpZnlFcnJvcnM6IElucHV0U2lnbmluZ0Vycm9yPFROdW1iZXI+W10gPSBzaWduZWRUcmFuc2FjdGlvbi5pbnNcbiAgICAubWFwKChpbnB1dCwgaW5wdXRJbmRleCkgPT4ge1xuICAgICAgY29uc3QgdW5zcGVudCA9IHVuc3BlbnRzW2lucHV0SW5kZXhdIGFzIFVuc3BlbnQ8VE51bWJlcj47XG4gICAgICBpZiAoaXNSZXBsYXlQcm90ZWN0aW9uVW5zcGVudDxUTnVtYmVyPih1bnNwZW50LCBuZXR3b3JrKSkge1xuICAgICAgICBkZWJ1ZyhcbiAgICAgICAgICAnU2tpcHBpbmcgaW5wdXQgc2lnbmF0dXJlICVkIG9mICVkICh1bnNwZW50IGZyb20gcmVwbGF5IHByb3RlY3Rpb24gYWRkcmVzcyB3aGljaCBpcyBwbGF0Zm9ybSBzaWduZWQgb25seSknLFxuICAgICAgICAgIGlucHV0SW5kZXggKyAxLFxuICAgICAgICAgIHVuc3BlbnRzLmxlbmd0aFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIWlzV2FsbGV0VW5zcGVudDxUTnVtYmVyPih1bnNwZW50KSkge1xuICAgICAgICByZXR1cm4gSW5wdXRTaWduaW5nRXJyb3IuZXhwZWN0ZWRXYWxsZXRVbnNwZW50PFROdW1iZXI+KGlucHV0SW5kZXgsIHVuc3BlbnQpO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcHVibGljS2V5ID0gd2FsbGV0U2lnbmVyLmRlcml2ZUZvckNoYWluQW5kSW5kZXgodW5zcGVudC5jaGFpbiwgdW5zcGVudC5pbmRleCkuc2lnbmVyLnB1YmxpY0tleTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICF1dHhvbGliLmJpdGdvLnZlcmlmeVNpZ25hdHVyZVdpdGhQdWJsaWNLZXk8VE51bWJlcj4oc2lnbmVkVHJhbnNhY3Rpb24sIGlucHV0SW5kZXgsIHByZXZPdXRwdXRzLCBwdWJsaWNLZXkpXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBuZXcgSW5wdXRTaWduaW5nRXJyb3IoaW5wdXRJbmRleCwgdW5zcGVudCwgbmV3IEVycm9yKGBpbnZhbGlkIHNpZ25hdHVyZWApKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBkZWJ1ZygnSW52YWxpZCBzaWduYXR1cmUnKTtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnB1dFNpZ25pbmdFcnJvcjxUTnVtYmVyPihpbnB1dEluZGV4LCB1bnNwZW50LCBlKTtcbiAgICAgIH1cbiAgICB9KVxuICAgIC5maWx0ZXIoKGUpOiBlIGlzIElucHV0U2lnbmluZ0Vycm9yPFROdW1iZXI+ID0+IGUgIT09IHVuZGVmaW5lZCk7XG5cbiAgaWYgKHNpZ25FcnJvcnMubGVuZ3RoIHx8IHZlcmlmeUVycm9ycy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgVHJhbnNhY3Rpb25TaWduaW5nRXJyb3Ioc2lnbkVycm9ycywgdmVyaWZ5RXJyb3JzKTtcbiAgfVxuXG4gIHJldHVybiBzaWduZWRUcmFuc2FjdGlvbjtcbn1cbiJdfQ==
203
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zaWduLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZEQSw4Q0E4RUM7QUFZRCx3RUEwRUM7QUFqT0QsOERBQWdEO0FBQ2hELGtEQUE2QjtBQUU3Qix5REFBK0Q7QUFFL0QsTUFBTSxLQUFLLEdBQUcsSUFBQSxlQUFRLEVBQUMsZUFBZSxDQUFDLENBQUM7QUFFeEMsTUFBTSxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxRQUFRLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBYzFFLE1BQWEsaUJBQTRELFNBQVEsS0FBSztJQUNwRixNQUFNLENBQUMscUJBQXFCLENBQzFCLFVBQWtCLEVBQ2xCLE9BQTBDO1FBRTFDLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLHVEQUF1RCxDQUFDLENBQUM7SUFDN0csQ0FBQztJQUVELFlBQ1MsVUFBa0IsRUFDbEIsT0FBMEMsRUFDMUMsTUFBc0I7UUFFN0IsS0FBSyxDQUFDLDBCQUEwQixVQUFVLGVBQWUsT0FBTyxDQUFDLEVBQUUsS0FBSyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBSjNFLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDbEIsWUFBTyxHQUFQLE9BQU8sQ0FBbUM7UUFDMUMsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7SUFHL0IsQ0FBQztDQUNGO0FBZkQsOENBZUM7QUFFRCxNQUFhLHVCQUFrRSxTQUFRLEtBQUs7SUFDMUYsWUFBWSxVQUF3QyxFQUFFLFdBQXlDO1FBQzdGLEtBQUssQ0FDSCwyQkFBMkIsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSztZQUNsRCw2QkFBNkIsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQzdFLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFQRCwwREFPQztB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Q0FBQyxFQUFFLENBQUM7WUFDWCxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUMzQixPQUFPLElBQUksaUJBQWlCLENBQVUsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDO0lBQ0gsQ0FBQyxDQUFDO1NBQ0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFtQyxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDO0lBRW5FLElBQUksVUFBVSxDQUFDLE1BQU0sSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDN0MsTUFBTSxJQUFJLHVCQUF1QixDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsT0FBTyxpQkFBaUIsQ0FBQztBQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgZGVidWdMaWIgZnJvbSAnZGVidWcnO1xuXG5pbXBvcnQgeyBpc1JlcGxheVByb3RlY3Rpb25VbnNwZW50IH0gZnJvbSAnLi9yZXBsYXlQcm90ZWN0aW9uJztcblxuY29uc3QgZGVidWcgPSBkZWJ1Z0xpYignYml0Z286djI6dXR4bycpO1xuXG5jb25zdCB7IGlzV2FsbGV0VW5zcGVudCwgc2lnbklucHV0V2l0aFVuc3BlbnQsIHRvT3V0cHV0IH0gPSB1dHhvbGliLmJpdGdvO1xuXG50eXBlIFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gPSB1dHhvbGliLmJpdGdvLlVuc3BlbnQ8VE51bWJlcj47XG5cbnR5cGUgUm9vdFdhbGxldEtleXMgPSB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzO1xuXG50eXBlIFBzYnRQYXJzZWRTY3JpcHRUeXBlcyA9XG4gIHwgJ3Ayc2gnXG4gIHwgJ3Ayd3NoJ1xuICB8ICdwMnNoUDJ3c2gnXG4gIHwgJ3Ayc2hQMnBrJ1xuICB8ICd0YXByb290S2V5UGF0aFNwZW5kJ1xuICB8ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJztcblxuZXhwb3J0IGNsYXNzIElucHV0U2lnbmluZ0Vycm9yPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IGV4dGVuZHMgRXJyb3Ige1xuICBzdGF0aWMgZXhwZWN0ZWRXYWxsZXRVbnNwZW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICAgIGlucHV0SW5kZXg6IG51bWJlcixcbiAgICB1bnNwZW50OiBVbnNwZW50PFROdW1iZXI+IHwgeyBpZDogc3RyaW5nIH1cbiAgKTogSW5wdXRTaWduaW5nRXJyb3I8VE51bWJlcj4ge1xuICAgIHJldHVybiBuZXcgSW5wdXRTaWduaW5nRXJyb3IoaW5wdXRJbmRleCwgdW5zcGVudCwgYG5vdCBhIHdhbGxldCB1bnNwZW50LCBub3QgYSByZXBsYXkgcHJvdGVjdGlvbiB1bnNwZW50YCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgaW5wdXRJbmRleDogbnVtYmVyLFxuICAgIHB1YmxpYyB1bnNwZW50OiBVbnNwZW50PFROdW1iZXI+IHwgeyBpZDogc3RyaW5nIH0sXG4gICAgcHVibGljIHJlYXNvbjogRXJyb3IgfCBzdHJpbmdcbiAgKSB7XG4gICAgc3VwZXIoYHNpZ25pbmcgZXJyb3IgYXQgaW5wdXQgJHtpbnB1dEluZGV4fTogdW5zcGVudElkPSR7dW5zcGVudC5pZH06ICR7cmVhc29ufWApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvblNpZ25pbmdFcnJvcjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3Ioc2lnbkVycm9yczogSW5wdXRTaWduaW5nRXJyb3I8VE51bWJlcj5bXSwgdmVyaWZ5RXJyb3I6IElucHV0U2lnbmluZ0Vycm9yPFROdW1iZXI+W10pIHtcbiAgICBzdXBlcihcbiAgICAgIGBzaWduIGVycm9ycyBhdCBpbnB1dHM6IFske3NpZ25FcnJvcnMuam9pbignLCcpfV0sIGAgK1xuICAgICAgICBgdmVyaWZ5IGVycm9ycyBhdCBpbnB1dHM6IFske3ZlcmlmeUVycm9yLmpvaW4oJywnKX1dLCBzZWUgbG9nIGZvciBkZXRhaWxzYFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBTaWduIGFsbCBpbnB1dHMgb2YgYSBwc2J0IGFuZCB2ZXJpZnkgc2lnbmF0dXJlcyBhZnRlciBzaWduaW5nLlxuICogQ29sbGVjdHMgYW5kIGxvZ3Mgc2lnbmluZyBlcnJvcnMgYW5kIHZlcmlmaWNhdGlvbiBlcnJvcnMsIHRocm93cyBlcnJvciBpbiB0aGUgZW5kIGlmIGFueSBvZiB0aGVtXG4gKiBmYWlsZWQuXG4gKlxuICogSWYgaXQgaXMgdGhlIGxhc3Qgc2lnbmF0dXJlLCBmaW5hbGl6ZSBhbmQgZXh0cmFjdCB0aGUgdHJhbnNhY3Rpb24gZnJvbSB0aGUgcHNidC5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIG1pcnJvcnMgc2lnbkFuZFZlcmlmeVdhbGxldFRyYW5zYWN0aW9uLCBidXQgaXMgdXNlZCBmb3Igc2lnbmluZyBQU0JUcyBpbnN0ZWFkIG9mXG4gKiB1c2luZyBUcmFuc2FjdGlvbkJ1aWxkZXJcbiAqXG4gKiBAcGFyYW0gcHNidFxuICogQHBhcmFtIHNpZ25lcktleWNoYWluXG4gKiBAcGFyYW0gaXNMYXN0U2lnbmF0dXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWduQW5kVmVyaWZ5UHNidChcbiAgcHNidDogdXR4b2xpYi5iaXRnby5VdHhvUHNidCxcbiAgc2lnbmVyS2V5Y2hhaW46IHV0eG9saWIuQklQMzJJbnRlcmZhY2UsXG4gIHtcbiAgICBpc0xhc3RTaWduYXR1cmUsXG4gICAgYWxsb3dOb25TZWd3aXRTaWduaW5nV2l0aG91dFByZXZUeCxcbiAgfTogeyBpc0xhc3RTaWduYXR1cmU6IGJvb2xlYW47IGFsbG93Tm9uU2Vnd2l0U2lnbmluZ1dpdGhvdXRQcmV2VHg/OiBib29sZWFuIH1cbik6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQgfCB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxiaWdpbnQ+IHtcbiAgY29uc3QgdHhJbnB1dHMgPSBwc2J0LnR4SW5wdXRzO1xuICBjb25zdCBvdXRwdXRJZHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHNjcmlwdFR5cGVzOiBQc2J0UGFyc2VkU2NyaXB0VHlwZXNbXSA9IFtdO1xuXG4gIGNvbnN0IHNpZ25FcnJvcnM6IElucHV0U2lnbmluZ0Vycm9yPGJpZ2ludD5bXSA9IHBzYnQuZGF0YS5pbnB1dHNcbiAgICAubWFwKChpbnB1dCwgaW5wdXRJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBvdXRwdXRJZCA9IHV0eG9saWIuYml0Z28uZm9ybWF0T3V0cHV0SWQodXR4b2xpYi5iaXRnby5nZXRPdXRwdXRJZEZvcklucHV0KHR4SW5wdXRzW2lucHV0SW5kZXhdKSk7XG4gICAgICBvdXRwdXRJZHMucHVzaChvdXRwdXRJZCk7XG5cbiAgICAgIGNvbnN0IHsgc2NyaXB0VHlwZSB9ID0gdXR4b2xpYi5iaXRnby5wYXJzZVBzYnRJbnB1dChpbnB1dCk7XG4gICAgICBzY3JpcHRUeXBlcy5wdXNoKHNjcmlwdFR5cGUpO1xuXG4gICAgICBpZiAoc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJykge1xuICAgICAgICBkZWJ1ZygnU2tpcHBpbmcgc2lnbmF0dXJlIGZvciBpbnB1dCAlZCBvZiAlZCAoUlAgaW5wdXQ/KScsIGlucHV0SW5kZXggKyAxLCBwc2J0LmRhdGEuaW5wdXRzLmxlbmd0aCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgdXR4b2xpYi5iaXRnby53aXRoVW5zYWZlTm9uU2Vnd2l0KFxuICAgICAgICAgIHBzYnQsXG4gICAgICAgICAgKCkgPT4gcHNidC5zaWduSW5wdXRIRChpbnB1dEluZGV4LCBzaWduZXJLZXljaGFpbiksXG4gICAgICAgICAgISFhbGxvd05vblNlZ3dpdFNpZ25pbmdXaXRob3V0UHJldlR4XG4gICAgICAgICk7XG4gICAgICAgIGRlYnVnKCdTdWNjZXNzZnVsbHkgc2lnbmVkIGlucHV0ICVkIG9mICVkJywgaW5wdXRJbmRleCArIDEsIHBzYnQuZGF0YS5pbnB1dHMubGVuZ3RoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnB1dFNpZ25pbmdFcnJvcjxiaWdpbnQ+KGlucHV0SW5kZXgsIHsgaWQ6IG91dHB1dElkIH0sIGUpO1xuICAgICAgfVxuICAgIH0pXG4gICAgLmZpbHRlcigoZSk6IGUgaXMgSW5wdXRTaWduaW5nRXJyb3I8YmlnaW50PiA9PiBlICE9PSB1bmRlZmluZWQpO1xuXG4gIGNvbnN0IHZlcmlmeUVycm9yczogSW5wdXRTaWduaW5nRXJyb3I8YmlnaW50PltdID0gcHNidC5kYXRhLmlucHV0c1xuICAgIC5tYXAoKGlucHV0LCBpbnB1dEluZGV4KSA9PiB7XG4gICAgICBjb25zdCBzY3JpcHRUeXBlID0gc2NyaXB0VHlwZXNbaW5wdXRJbmRleF07XG4gICAgICBpZiAoc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJykge1xuICAgICAgICBkZWJ1ZyhcbiAgICAgICAgICAnU2tpcHBpbmcgaW5wdXQgc2lnbmF0dXJlICVkIG9mICVkICh1bnNwZW50IGZyb20gcmVwbGF5IHByb3RlY3Rpb24gYWRkcmVzcyB3aGljaCBpcyBwbGF0Zm9ybSBzaWduZWQgb25seSknLFxuICAgICAgICAgIGlucHV0SW5kZXggKyAxLFxuICAgICAgICAgIHBzYnQuZGF0YS5pbnB1dHMubGVuZ3RoXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb3V0cHV0SWQgPSBvdXRwdXRJZHNbaW5wdXRJbmRleF07XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXV0eG9saWIuYml0Z28ud2l0aFVuc2FmZU5vblNlZ3dpdChcbiAgICAgICAgICAgIHBzYnQsXG4gICAgICAgICAgICAoKSA9PiBwc2J0LnZhbGlkYXRlU2lnbmF0dXJlc09mSW5wdXRIRChpbnB1dEluZGV4LCBzaWduZXJLZXljaGFpbiksXG4gICAgICAgICAgICAhIWFsbG93Tm9uU2Vnd2l0U2lnbmluZ1dpdGhvdXRQcmV2VHhcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBuZXcgSW5wdXRTaWduaW5nRXJyb3IoaW5wdXRJbmRleCwgeyBpZDogb3V0cHV0SWQgfSwgbmV3IEVycm9yKGBpbnZhbGlkIHNpZ25hdHVyZWApKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBkZWJ1ZygnSW52YWxpZCBzaWduYXR1cmUnKTtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnB1dFNpZ25pbmdFcnJvcjxiaWdpbnQ+KGlucHV0SW5kZXgsIHsgaWQ6IG91dHB1dElkIH0sIGUpO1xuICAgICAgfVxuICAgIH0pXG4gICAgLmZpbHRlcigoZSk6IGUgaXMgSW5wdXRTaWduaW5nRXJyb3I8YmlnaW50PiA9PiBlICE9PSB1bmRlZmluZWQpO1xuXG4gIGlmIChzaWduRXJyb3JzLmxlbmd0aCB8fCB2ZXJpZnlFcnJvcnMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFRyYW5zYWN0aW9uU2lnbmluZ0Vycm9yKHNpZ25FcnJvcnMsIHZlcmlmeUVycm9ycyk7XG4gIH1cblxuICBpZiAoaXNMYXN0U2lnbmF0dXJlKSB7XG4gICAgcHNidC5maW5hbGl6ZUFsbElucHV0cygpO1xuICAgIHJldHVybiBwc2J0LmV4dHJhY3RUcmFuc2FjdGlvbigpO1xuICB9XG5cbiAgcmV0dXJuIHBzYnQ7XG59XG5cbi8qKlxuICogU2lnbiBhbGwgaW5wdXRzIG9mIGEgd2FsbGV0IHRyYW5zYWN0aW9uIGFuZCB2ZXJpZnkgc2lnbmF0dXJlcyBhZnRlciBzaWduaW5nLlxuICogQ29sbGVjdHMgYW5kIGxvZ3Mgc2lnbmluZyBlcnJvcnMgYW5kIHZlcmlmaWNhdGlvbiBlcnJvcnMsIHRocm93cyBlcnJvciBpbiB0aGUgZW5kIGlmIGFueSBvZiB0aGVtXG4gKiBmYWlsZWQuXG4gKlxuICogQHBhcmFtIHRyYW5zYWN0aW9uIC0gd2FsbGV0IHRyYW5zYWN0aW9uIChidWlsZGVyKSB0byBiZSBzaWduZWRcbiAqIEBwYXJhbSB1bnNwZW50cyAtIHRyYW5zYWN0aW9uIHVuc3BlbnRzXG4gKiBAcGFyYW0gd2FsbGV0U2lnbmVyIC0gc2lnbmluZyBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gaXNMYXN0U2lnbmF0dXJlIC0gUmV0dXJucyBmdWxsLXNpZ25lZCB0cmFuc2FjdGlvbiB3aGVuIHRydWUuIEJ1aWxkcyBoYWxmLXNpZ25lZCB3aGVuIGZhbHNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnbkFuZFZlcmlmeVdhbGxldFRyYW5zYWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0cmFuc2FjdGlvbjogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4gfCB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbkJ1aWxkZXI8VE51bWJlcj4sXG4gIHVuc3BlbnRzOiBVbnNwZW50PFROdW1iZXI+W10sXG4gIHdhbGxldFNpZ25lcjogdXR4b2xpYi5iaXRnby5XYWxsZXRVbnNwZW50U2lnbmVyPFJvb3RXYWxsZXRLZXlzPixcbiAgeyBpc0xhc3RTaWduYXR1cmUgfTogeyBpc0xhc3RTaWduYXR1cmU6IGJvb2xlYW4gfVxuKTogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4ge1xuICBjb25zdCBuZXR3b3JrID0gdHJhbnNhY3Rpb24ubmV0d29yayBhcyB1dHhvbGliLk5ldHdvcms7XG4gIGNvbnN0IHByZXZPdXRwdXRzID0gdW5zcGVudHMubWFwKCh1KSA9PiB0b091dHB1dCh1LCBuZXR3b3JrKSk7XG5cbiAgbGV0IHR4QnVpbGRlcjogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb25CdWlsZGVyPFROdW1iZXI+O1xuICBpZiAodHJhbnNhY3Rpb24gaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbikge1xuICAgIHR4QnVpbGRlciA9IHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25CdWlsZGVyRnJvbVRyYW5zYWN0aW9uPFROdW1iZXI+KHRyYW5zYWN0aW9uLCBwcmV2T3V0cHV0cyk7XG4gICAgaWYgKHRyYW5zYWN0aW9uLmlucy5sZW5ndGggIT09IHVuc3BlbnRzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB0cmFuc2FjdGlvbiBpbnB1dHMgbXVzdCBtYXRjaCB1bnNwZW50c2ApO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0cmFuc2FjdGlvbiBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uQnVpbGRlcikge1xuICAgIHR4QnVpbGRlciA9IHRyYW5zYWN0aW9uO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgbXVzdCBwYXNzIFV0eG9UcmFuc2FjdGlvbiBvciBVdHhvVHJhbnNhY3Rpb25CdWlsZGVyYCk7XG4gIH1cblxuICBjb25zdCBzaWduRXJyb3JzOiBJbnB1dFNpZ25pbmdFcnJvcjxUTnVtYmVyPltdID0gdW5zcGVudHNcbiAgICAubWFwKCh1bnNwZW50OiBVbnNwZW50PFROdW1iZXI+LCBpbnB1dEluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGlmIChpc1JlcGxheVByb3RlY3Rpb25VbnNwZW50PFROdW1iZXI+KHVuc3BlbnQsIG5ldHdvcmspKSB7XG4gICAgICAgIGRlYnVnKCdTa2lwcGluZyBzaWduYXR1cmUgZm9yIGlucHV0ICVkIG9mICVkIChSUCBpbnB1dD8pJywgaW5wdXRJbmRleCArIDEsIHVuc3BlbnRzLmxlbmd0aCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghaXNXYWxsZXRVbnNwZW50PFROdW1iZXI+KHVuc3BlbnQpKSB7XG4gICAgICAgIHJldHVybiBJbnB1dFNpZ25pbmdFcnJvci5leHBlY3RlZFdhbGxldFVuc3BlbnQ8VE51bWJlcj4oaW5wdXRJbmRleCwgdW5zcGVudCk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBzaWduSW5wdXRXaXRoVW5zcGVudDxUTnVtYmVyPih0eEJ1aWxkZXIsIGlucHV0SW5kZXgsIHVuc3BlbnQsIHdhbGxldFNpZ25lcik7XG4gICAgICAgIGRlYnVnKCdTdWNjZXNzZnVsbHkgc2lnbmVkIGlucHV0ICVkIG9mICVkJywgaW5wdXRJbmRleCArIDEsIHVuc3BlbnRzLmxlbmd0aCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBuZXcgSW5wdXRTaWduaW5nRXJyb3I8VE51bWJlcj4oaW5wdXRJbmRleCwgdW5zcGVudCwgZSk7XG4gICAgICB9XG4gICAgfSlcbiAgICAuZmlsdGVyKChlKTogZSBpcyBJbnB1dFNpZ25pbmdFcnJvcjxUTnVtYmVyPiA9PiBlICE9PSB1bmRlZmluZWQpO1xuXG4gIGNvbnN0IHNpZ25lZFRyYW5zYWN0aW9uID0gaXNMYXN0U2lnbmF0dXJlID8gdHhCdWlsZGVyLmJ1aWxkKCkgOiB0eEJ1aWxkZXIuYnVpbGRJbmNvbXBsZXRlKCk7XG5cbiAgY29uc3QgdmVyaWZ5RXJyb3JzOiBJbnB1dFNpZ25pbmdFcnJvcjxUTnVtYmVyPltdID0gc2lnbmVkVHJhbnNhY3Rpb24uaW5zXG4gICAgLm1hcCgoaW5wdXQsIGlucHV0SW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHVuc3BlbnQgPSB1bnNwZW50c1tpbnB1dEluZGV4XSBhcyBVbnNwZW50PFROdW1iZXI+O1xuICAgICAgaWYgKGlzUmVwbGF5UHJvdGVjdGlvblVuc3BlbnQ8VE51bWJlcj4odW5zcGVudCwgbmV0d29yaykpIHtcbiAgICAgICAgZGVidWcoXG4gICAgICAgICAgJ1NraXBwaW5nIGlucHV0IHNpZ25hdHVyZSAlZCBvZiAlZCAodW5zcGVudCBmcm9tIHJlcGxheSBwcm90ZWN0aW9uIGFkZHJlc3Mgd2hpY2ggaXMgcGxhdGZvcm0gc2lnbmVkIG9ubHkpJyxcbiAgICAgICAgICBpbnB1dEluZGV4ICsgMSxcbiAgICAgICAgICB1bnNwZW50cy5sZW5ndGhcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFpc1dhbGxldFVuc3BlbnQ8VE51bWJlcj4odW5zcGVudCkpIHtcbiAgICAgICAgcmV0dXJuIElucHV0U2lnbmluZ0Vycm9yLmV4cGVjdGVkV2FsbGV0VW5zcGVudDxUTnVtYmVyPihpbnB1dEluZGV4LCB1bnNwZW50KTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHB1YmxpY0tleSA9IHdhbGxldFNpZ25lci5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KHVuc3BlbnQuY2hhaW4sIHVuc3BlbnQuaW5kZXgpLnNpZ25lci5wdWJsaWNLZXk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhdXR4b2xpYi5iaXRnby52ZXJpZnlTaWduYXR1cmVXaXRoUHVibGljS2V5PFROdW1iZXI+KHNpZ25lZFRyYW5zYWN0aW9uLCBpbnB1dEluZGV4LCBwcmV2T3V0cHV0cywgcHVibGljS2V5KVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gbmV3IElucHV0U2lnbmluZ0Vycm9yKGlucHV0SW5kZXgsIHVuc3BlbnQsIG5ldyBFcnJvcihgaW52YWxpZCBzaWduYXR1cmVgKSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZGVidWcoJ0ludmFsaWQgc2lnbmF0dXJlJyk7XG4gICAgICAgIHJldHVybiBuZXcgSW5wdXRTaWduaW5nRXJyb3I8VE51bWJlcj4oaW5wdXRJbmRleCwgdW5zcGVudCwgZSk7XG4gICAgICB9XG4gICAgfSlcbiAgICAuZmlsdGVyKChlKTogZSBpcyBJbnB1dFNpZ25pbmdFcnJvcjxUTnVtYmVyPiA9PiBlICE9PSB1bmRlZmluZWQpO1xuXG4gIGlmIChzaWduRXJyb3JzLmxlbmd0aCB8fCB2ZXJpZnlFcnJvcnMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFRyYW5zYWN0aW9uU2lnbmluZ0Vycm9yKHNpZ25FcnJvcnMsIHZlcmlmeUVycm9ycyk7XG4gIH1cblxuICByZXR1cm4gc2lnbmVkVHJhbnNhY3Rpb247XG59XG4iXX0=
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=verifyPayGoAmount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifyPayGoAmount.d.ts","sourceRoot":"","sources":["../../../../src/transaction/common/verifyPayGoAmount.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5UGF5R29BbW91bnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vY29tbW9uL3ZlcmlmeVBheUdvQW1vdW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIiXX0=
@@ -1,3 +1,7 @@
1
1
  export { DescriptorMap } from '../../core/descriptor';
2
2
  export { explainPsbt } from './explainPsbt';
3
+ export { parse } from './parse';
4
+ export { parseToAmountType } from './parseToAmountType';
5
+ export { verifyTransaction } from './verifyTransaction';
6
+ export { signPsbt } from './signPsbt';
3
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/transaction/descriptor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/transaction/descriptor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
@@ -1,6 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.explainPsbt = void 0;
3
+ exports.signPsbt = exports.verifyTransaction = exports.parseToAmountType = exports.parse = exports.explainPsbt = void 0;
4
4
  var explainPsbt_1 = require("./explainPsbt");
5
5
  Object.defineProperty(exports, "explainPsbt", { enumerable: true, get: function () { return explainPsbt_1.explainPsbt; } });
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZGVzY3JpcHRvci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSw2Q0FBNEM7QUFBbkMsMEdBQUEsV0FBVyxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgRGVzY3JpcHRvck1hcCB9IGZyb20gJy4uLy4uL2NvcmUvZGVzY3JpcHRvcic7XG5leHBvcnQgeyBleHBsYWluUHNidCB9IGZyb20gJy4vZXhwbGFpblBzYnQnO1xuIl19
6
+ var parse_1 = require("./parse");
7
+ Object.defineProperty(exports, "parse", { enumerable: true, get: function () { return parse_1.parse; } });
8
+ var parseToAmountType_1 = require("./parseToAmountType");
9
+ Object.defineProperty(exports, "parseToAmountType", { enumerable: true, get: function () { return parseToAmountType_1.parseToAmountType; } });
10
+ var verifyTransaction_1 = require("./verifyTransaction");
11
+ Object.defineProperty(exports, "verifyTransaction", { enumerable: true, get: function () { return verifyTransaction_1.verifyTransaction; } });
12
+ var signPsbt_1 = require("./signPsbt");
13
+ Object.defineProperty(exports, "signPsbt", { enumerable: true, get: function () { return signPsbt_1.signPsbt; } });
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZGVzY3JpcHRvci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSw2Q0FBNEM7QUFBbkMsMEdBQUEsV0FBVyxPQUFBO0FBQ3BCLGlDQUFnQztBQUF2Qiw4RkFBQSxLQUFLLE9BQUE7QUFDZCx5REFBd0Q7QUFBL0Msc0hBQUEsaUJBQWlCLE9BQUE7QUFDMUIseURBQXdEO0FBQS9DLHNIQUFBLGlCQUFpQixPQUFBO0FBQzFCLHVDQUFzQztBQUE3QixvR0FBQSxRQUFRLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBEZXNjcmlwdG9yTWFwIH0gZnJvbSAnLi4vLi4vY29yZS9kZXNjcmlwdG9yJztcbmV4cG9ydCB7IGV4cGxhaW5Qc2J0IH0gZnJvbSAnLi9leHBsYWluUHNidCc7XG5leHBvcnQgeyBwYXJzZSB9IGZyb20gJy4vcGFyc2UnO1xuZXhwb3J0IHsgcGFyc2VUb0Ftb3VudFR5cGUgfSBmcm9tICcuL3BhcnNlVG9BbW91bnRUeXBlJztcbmV4cG9ydCB7IHZlcmlmeVRyYW5zYWN0aW9uIH0gZnJvbSAnLi92ZXJpZnlUcmFuc2FjdGlvbic7XG5leHBvcnQgeyBzaWduUHNidCB9IGZyb20gJy4vc2lnblBzYnQnO1xuIl19
@@ -0,0 +1,14 @@
1
+ import * as utxolib from '@bitgo-beta/utxo-lib';
2
+ import { ITransactionRecipient } from '@bitgo-beta/sdk-core';
3
+ import { AbstractUtxoCoin, BaseOutput, BaseParsedTransaction, BaseParsedTransactionOutputs, ParseTransactionOptions } from '../../abstractUtxoCoin';
4
+ import { IDescriptorWallet } from '../../descriptor/descriptorWallet';
5
+ import * as coreDescriptors from '../../core/descriptor';
6
+ import { ParsedOutput } from '../../core/descriptor/psbt/parse';
7
+ export type RecipientOutput = Omit<ParsedOutput, 'value'> & {
8
+ value: bigint | 'max';
9
+ };
10
+ export type ParsedOutputsBigInt = BaseParsedTransactionOutputs<bigint, BaseOutput<bigint | 'max'>>;
11
+ export declare function toBaseParsedTransactionOutputsFromPsbt(psbt: utxolib.bitgo.UtxoPsbt, descriptorMap: coreDescriptors.DescriptorMap, recipients: ITransactionRecipient[], network: utxolib.Network): ParsedOutputsBigInt;
12
+ export type ParsedDescriptorTransaction<TAmount extends number | bigint> = BaseParsedTransaction<TAmount, BaseOutput<TAmount | 'max'>>;
13
+ export declare function parse(coin: AbstractUtxoCoin, wallet: IDescriptorWallet, params: ParseTransactionOptions<number | bigint>): ParsedDescriptorTransaction<bigint>;
14
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../../src/transaction/descriptor/parse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,qBAAqB,EACrB,4BAA4B,EAC5B,uBAAuB,EACxB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,KAAK,eAAe,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAIhE,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG;IAC1D,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC;CACvB,CAAC;AAmDF,MAAM,MAAM,mBAAmB,GAAG,4BAA4B,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;AAiBnG,wBAAgB,sCAAsC,CACpD,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAC5B,aAAa,EAAE,eAAe,CAAC,aAAa,EAC5C,UAAU,EAAE,qBAAqB,EAAE,EACnC,OAAO,EAAE,OAAO,CAAC,OAAO,GACvB,mBAAmB,CASrB;AAED,MAAM,MAAM,2BAA2B,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,IAAI,qBAAqB,CAC9F,OAAO,EACP,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC,CAC5B,CAAC;AAEF,wBAAgB,KAAK,CACnB,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,uBAAuB,CAAC,MAAM,GAAG,MAAM,CAAC,GAC/C,2BAA2B,CAAC,MAAM,CAAC,CA4BrC"}
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.toBaseParsedTransactionOutputsFromPsbt = toBaseParsedTransactionOutputsFromPsbt;
37
+ exports.parse = parse;
38
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
39
+ const keychains_1 = require("../../keychains");
40
+ const descriptor_1 = require("../../descriptor");
41
+ const coreDescriptors = __importStar(require("../../core/descriptor"));
42
+ const recipient_1 = require("../recipient");
43
+ const outputDifference_1 = require("../outputDifference");
44
+ function toRecipientOutput(recipient, network) {
45
+ return {
46
+ address: recipient.address,
47
+ value: recipient.amount === 'max' ? 'max' : BigInt(recipient.amount),
48
+ script: (0, recipient_1.fromExtendedAddressFormatToScript)(recipient.address, network),
49
+ };
50
+ }
51
+ function parseOutputsWithPsbt(psbt, descriptorMap, recipientOutputs) {
52
+ const parsed = coreDescriptors.parse(psbt, descriptorMap, psbt.network);
53
+ const externalOutputs = parsed.outputs.filter((o) => o.scriptId === undefined);
54
+ const changeOutputs = parsed.outputs.filter((o) => o.scriptId !== undefined);
55
+ const outputDiffs = (0, outputDifference_1.outputDifferencesWithExpected)(externalOutputs, recipientOutputs);
56
+ return {
57
+ outputs: parsed.outputs,
58
+ changeOutputs,
59
+ ...outputDiffs,
60
+ };
61
+ }
62
+ function sumValues(arr) {
63
+ return arr.reduce((sum, e) => sum + e.value, BigInt(0));
64
+ }
65
+ function toBaseOutputs(outputs, network) {
66
+ return outputs.map((o) => ({
67
+ address: (0, recipient_1.toExtendedAddressFormat)(o.script, network),
68
+ amount: o.value === 'max' ? 'max' : BigInt(o.value),
69
+ external: o.scriptId === undefined,
70
+ }));
71
+ }
72
+ function toBaseParsedTransactionOutputs({ outputs, changeOutputs, explicitExternalOutputs, implicitExternalOutputs, missingOutputs }, network) {
73
+ return {
74
+ outputs: toBaseOutputs(outputs, network),
75
+ changeOutputs: toBaseOutputs(changeOutputs, network),
76
+ explicitExternalOutputs: toBaseOutputs(explicitExternalOutputs, network),
77
+ explicitExternalSpendAmount: sumValues(explicitExternalOutputs),
78
+ implicitExternalOutputs: toBaseOutputs(implicitExternalOutputs, network),
79
+ implicitExternalSpendAmount: sumValues(implicitExternalOutputs),
80
+ missingOutputs: toBaseOutputs(missingOutputs, network),
81
+ };
82
+ }
83
+ function toBaseParsedTransactionOutputsFromPsbt(psbt, descriptorMap, recipients, network) {
84
+ return toBaseParsedTransactionOutputs(parseOutputsWithPsbt(psbt, descriptorMap, recipients.map((r) => toRecipientOutput(r, psbt.network))), network);
85
+ }
86
+ function parse(coin, wallet, params) {
87
+ if (params.txParams.allowExternalChangeAddress) {
88
+ throw new Error('allowExternalChangeAddress is not supported for descriptor wallets');
89
+ }
90
+ if (params.txParams.changeAddress) {
91
+ throw new Error('changeAddress is not supported for descriptor wallets');
92
+ }
93
+ const keychains = params.verification?.keychains;
94
+ if (!keychains || !keychains_1.UtxoNamedKeychains.is(keychains)) {
95
+ throw new Error('keychain is required for descriptor wallets');
96
+ }
97
+ const { recipients } = params.txParams;
98
+ if (!recipients) {
99
+ throw new Error('recipients is required');
100
+ }
101
+ const psbt = coin.decodeTransactionFromPrebuild(params.txPrebuild);
102
+ if (!(psbt instanceof utxolib.bitgo.UtxoPsbt)) {
103
+ throw new Error('expected psbt to be an instance of UtxoPsbt');
104
+ }
105
+ const walletKeys = (0, keychains_1.toBip32Triple)(keychains);
106
+ const descriptorMap = (0, descriptor_1.getDescriptorMapFromWallet)(wallet, walletKeys, (0, descriptor_1.getPolicyForEnv)(params.wallet.bitgo.env));
107
+ return {
108
+ ...toBaseParsedTransactionOutputsFromPsbt(psbt, descriptorMap, recipients, psbt.network),
109
+ keychains,
110
+ keySignatures: (0, keychains_1.getKeySignatures)(wallet) ?? {},
111
+ customChange: undefined,
112
+ needsCustomChangeKeySignatureVerification: false,
113
+ };
114
+ }
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZGVzY3JpcHRvci9wYXJzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdGQSx3RkFjQztBQU9ELHNCQWdDQztBQTdJRCw4REFBZ0Q7QUFVaEQsK0NBQXNGO0FBQ3RGLGlEQUErRTtBQUUvRSx1RUFBeUQ7QUFFekQsNENBQTBGO0FBQzFGLDBEQUFrRztBQU1sRyxTQUFTLGlCQUFpQixDQUFDLFNBQWdDLEVBQUUsT0FBd0I7SUFDbkYsT0FBTztRQUNMLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTztRQUMxQixLQUFLLEVBQUUsU0FBUyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDcEUsTUFBTSxFQUFFLElBQUEsNkNBQWlDLEVBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUM7S0FDdEUsQ0FBQztBQUNKLENBQUM7QUFRRCxTQUFTLG9CQUFvQixDQUMzQixJQUE0QixFQUM1QixhQUE0QyxFQUM1QyxnQkFBbUM7SUFFbkMsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4RSxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQztJQUMvRSxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQztJQUM3RSxNQUFNLFdBQVcsR0FBRyxJQUFBLGdEQUE2QixFQUFDLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3JGLE9BQU87UUFDTCxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87UUFDdkIsYUFBYTtRQUNiLEdBQUcsV0FBVztLQUNmLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsR0FBd0I7SUFDekMsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUlELFNBQVMsYUFBYSxDQUNwQixPQUEyQyxFQUMzQyxPQUF3QjtJQUV4QixPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQ2hCLENBQUMsQ0FBQyxFQUE4QixFQUFFLENBQUMsQ0FBQztRQUNsQyxPQUFPLEVBQUUsSUFBQSxtQ0FBdUIsRUFBQyxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztRQUNuRCxNQUFNLEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDbkQsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUztLQUNuQyxDQUFDLENBQ0gsQ0FBQztBQUNKLENBQUM7QUFJRCxTQUFTLDhCQUE4QixDQUNyQyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsY0FBYyxFQUFpQixFQUMzRyxPQUF3QjtJQUV4QixPQUFPO1FBQ0wsT0FBTyxFQUFFLGFBQWEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDO1FBQ3hDLGFBQWEsRUFBRSxhQUFhLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQztRQUNwRCx1QkFBdUIsRUFBRSxhQUFhLENBQUMsdUJBQXVCLEVBQUUsT0FBTyxDQUFDO1FBQ3hFLDJCQUEyQixFQUFFLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQztRQUMvRCx1QkFBdUIsRUFBRSxhQUFhLENBQUMsdUJBQXVCLEVBQUUsT0FBTyxDQUFDO1FBQ3hFLDJCQUEyQixFQUFFLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQztRQUMvRCxjQUFjLEVBQUUsYUFBYSxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUM7S0FDdkQsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFnQixzQ0FBc0MsQ0FDcEQsSUFBNEIsRUFDNUIsYUFBNEMsRUFDNUMsVUFBbUMsRUFDbkMsT0FBd0I7SUFFeEIsT0FBTyw4QkFBOEIsQ0FDbkMsb0JBQW9CLENBQ2xCLElBQUksRUFDSixhQUFhLEVBQ2IsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUMxRCxFQUNELE9BQU8sQ0FDUixDQUFDO0FBQ0osQ0FBQztBQU9ELFNBQWdCLEtBQUssQ0FDbkIsSUFBc0IsRUFDdEIsTUFBeUIsRUFDekIsTUFBZ0Q7SUFFaEQsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDL0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxvRUFBb0UsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFDRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFDRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQztJQUNqRCxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsOEJBQWtCLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDcEQsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFDRCxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztJQUN2QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ25FLElBQUksQ0FBQyxDQUFDLElBQUksWUFBWSxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDOUMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFBLHlCQUFhLEVBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUMsTUFBTSxhQUFhLEdBQUcsSUFBQSx1Q0FBMEIsRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUEsNEJBQWUsRUFBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9HLE9BQU87UUFDTCxHQUFHLHNDQUFzQyxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDeEYsU0FBUztRQUNULGFBQWEsRUFBRSxJQUFBLDRCQUFnQixFQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7UUFDN0MsWUFBWSxFQUFFLFNBQVM7UUFDdkIseUNBQXlDLEVBQUUsS0FBSztLQUNqRCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgSVRyYW5zYWN0aW9uUmVjaXBpZW50IH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuXG5pbXBvcnQge1xuICBBYnN0cmFjdFV0eG9Db2luLFxuICBCYXNlT3V0cHV0LFxuICBCYXNlUGFyc2VkVHJhbnNhY3Rpb24sXG4gIEJhc2VQYXJzZWRUcmFuc2FjdGlvbk91dHB1dHMsXG4gIFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zLFxufSBmcm9tICcuLi8uLi9hYnN0cmFjdFV0eG9Db2luJztcbmltcG9ydCB7IGdldEtleVNpZ25hdHVyZXMsIHRvQmlwMzJUcmlwbGUsIFV0eG9OYW1lZEtleWNoYWlucyB9IGZyb20gJy4uLy4uL2tleWNoYWlucyc7XG5pbXBvcnQgeyBnZXREZXNjcmlwdG9yTWFwRnJvbVdhbGxldCwgZ2V0UG9saWN5Rm9yRW52IH0gZnJvbSAnLi4vLi4vZGVzY3JpcHRvcic7XG5pbXBvcnQgeyBJRGVzY3JpcHRvcldhbGxldCB9IGZyb20gJy4uLy4uL2Rlc2NyaXB0b3IvZGVzY3JpcHRvcldhbGxldCc7XG5pbXBvcnQgKiBhcyBjb3JlRGVzY3JpcHRvcnMgZnJvbSAnLi4vLi4vY29yZS9kZXNjcmlwdG9yJztcbmltcG9ydCB7IFBhcnNlZE91dHB1dCB9IGZyb20gJy4uLy4uL2NvcmUvZGVzY3JpcHRvci9wc2J0L3BhcnNlJztcbmltcG9ydCB7IGZyb21FeHRlbmRlZEFkZHJlc3NGb3JtYXRUb1NjcmlwdCwgdG9FeHRlbmRlZEFkZHJlc3NGb3JtYXQgfSBmcm9tICcuLi9yZWNpcGllbnQnO1xuaW1wb3J0IHsgb3V0cHV0RGlmZmVyZW5jZXNXaXRoRXhwZWN0ZWQsIE91dHB1dERpZmZlcmVuY2VXaXRoRXhwZWN0ZWQgfSBmcm9tICcuLi9vdXRwdXREaWZmZXJlbmNlJztcblxuZXhwb3J0IHR5cGUgUmVjaXBpZW50T3V0cHV0ID0gT21pdDxQYXJzZWRPdXRwdXQsICd2YWx1ZSc+ICYge1xuICB2YWx1ZTogYmlnaW50IHwgJ21heCc7XG59O1xuXG5mdW5jdGlvbiB0b1JlY2lwaWVudE91dHB1dChyZWNpcGllbnQ6IElUcmFuc2FjdGlvblJlY2lwaWVudCwgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrKTogUmVjaXBpZW50T3V0cHV0IHtcbiAgcmV0dXJuIHtcbiAgICBhZGRyZXNzOiByZWNpcGllbnQuYWRkcmVzcyxcbiAgICB2YWx1ZTogcmVjaXBpZW50LmFtb3VudCA9PT0gJ21heCcgPyAnbWF4JyA6IEJpZ0ludChyZWNpcGllbnQuYW1vdW50KSxcbiAgICBzY3JpcHQ6IGZyb21FeHRlbmRlZEFkZHJlc3NGb3JtYXRUb1NjcmlwdChyZWNpcGllbnQuYWRkcmVzcywgbmV0d29yayksXG4gIH07XG59XG5cbi8vIFRPRE8oQlRDLTE2OTcpOiBhbGxvdyBvdXRwdXRzIHdpdGggYHZhbHVlOiAnbWF4J2AgaGVyZVxudHlwZSBQYXJzZWRPdXRwdXRzID0gT3V0cHV0RGlmZmVyZW5jZVdpdGhFeHBlY3RlZDxQYXJzZWRPdXRwdXQsIFJlY2lwaWVudE91dHB1dD4gJiB7XG4gIG91dHB1dHM6IFBhcnNlZE91dHB1dFtdO1xuICBjaGFuZ2VPdXRwdXRzOiBQYXJzZWRPdXRwdXRbXTtcbn07XG5cbmZ1bmN0aW9uIHBhcnNlT3V0cHV0c1dpdGhQc2J0KFxuICBwc2J0OiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LFxuICBkZXNjcmlwdG9yTWFwOiBjb3JlRGVzY3JpcHRvcnMuRGVzY3JpcHRvck1hcCxcbiAgcmVjaXBpZW50T3V0cHV0czogUmVjaXBpZW50T3V0cHV0W11cbik6IFBhcnNlZE91dHB1dHMge1xuICBjb25zdCBwYXJzZWQgPSBjb3JlRGVzY3JpcHRvcnMucGFyc2UocHNidCwgZGVzY3JpcHRvck1hcCwgcHNidC5uZXR3b3JrKTtcbiAgY29uc3QgZXh0ZXJuYWxPdXRwdXRzID0gcGFyc2VkLm91dHB1dHMuZmlsdGVyKChvKSA9PiBvLnNjcmlwdElkID09PSB1bmRlZmluZWQpO1xuICBjb25zdCBjaGFuZ2VPdXRwdXRzID0gcGFyc2VkLm91dHB1dHMuZmlsdGVyKChvKSA9PiBvLnNjcmlwdElkICE9PSB1bmRlZmluZWQpO1xuICBjb25zdCBvdXRwdXREaWZmcyA9IG91dHB1dERpZmZlcmVuY2VzV2l0aEV4cGVjdGVkKGV4dGVybmFsT3V0cHV0cywgcmVjaXBpZW50T3V0cHV0cyk7XG4gIHJldHVybiB7XG4gICAgb3V0cHV0czogcGFyc2VkLm91dHB1dHMsXG4gICAgY2hhbmdlT3V0cHV0cyxcbiAgICAuLi5vdXRwdXREaWZmcyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3VtVmFsdWVzKGFycjogeyB2YWx1ZTogYmlnaW50IH1bXSk6IGJpZ2ludCB7XG4gIHJldHVybiBhcnIucmVkdWNlKChzdW0sIGUpID0+IHN1bSArIGUudmFsdWUsIEJpZ0ludCgwKSk7XG59XG5cbmZ1bmN0aW9uIHRvQmFzZU91dHB1dHMob3V0cHV0czogUGFyc2VkT3V0cHV0W10sIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayk6IEJhc2VPdXRwdXQ8YmlnaW50PltdO1xuZnVuY3Rpb24gdG9CYXNlT3V0cHV0cyhvdXRwdXRzOiBSZWNpcGllbnRPdXRwdXRbXSwgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrKTogQmFzZU91dHB1dDxiaWdpbnQgfCAnbWF4Jz5bXTtcbmZ1bmN0aW9uIHRvQmFzZU91dHB1dHMoXG4gIG91dHB1dHM6IChQYXJzZWRPdXRwdXQgfCBSZWNpcGllbnRPdXRwdXQpW10sXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29ya1xuKTogQmFzZU91dHB1dDxiaWdpbnQgfCAnbWF4Jz5bXSB7XG4gIHJldHVybiBvdXRwdXRzLm1hcChcbiAgICAobyk6IEJhc2VPdXRwdXQ8YmlnaW50IHwgJ21heCc+ID0+ICh7XG4gICAgICBhZGRyZXNzOiB0b0V4dGVuZGVkQWRkcmVzc0Zvcm1hdChvLnNjcmlwdCwgbmV0d29yayksXG4gICAgICBhbW91bnQ6IG8udmFsdWUgPT09ICdtYXgnID8gJ21heCcgOiBCaWdJbnQoby52YWx1ZSksXG4gICAgICBleHRlcm5hbDogby5zY3JpcHRJZCA9PT0gdW5kZWZpbmVkLFxuICAgIH0pXG4gICk7XG59XG5cbmV4cG9ydCB0eXBlIFBhcnNlZE91dHB1dHNCaWdJbnQgPSBCYXNlUGFyc2VkVHJhbnNhY3Rpb25PdXRwdXRzPGJpZ2ludCwgQmFzZU91dHB1dDxiaWdpbnQgfCAnbWF4Jz4+O1xuXG5mdW5jdGlvbiB0b0Jhc2VQYXJzZWRUcmFuc2FjdGlvbk91dHB1dHMoXG4gIHsgb3V0cHV0cywgY2hhbmdlT3V0cHV0cywgZXhwbGljaXRFeHRlcm5hbE91dHB1dHMsIGltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzLCBtaXNzaW5nT3V0cHV0cyB9OiBQYXJzZWRPdXRwdXRzLFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmtcbik6IFBhcnNlZE91dHB1dHNCaWdJbnQge1xuICByZXR1cm4ge1xuICAgIG91dHB1dHM6IHRvQmFzZU91dHB1dHMob3V0cHV0cywgbmV0d29yayksXG4gICAgY2hhbmdlT3V0cHV0czogdG9CYXNlT3V0cHV0cyhjaGFuZ2VPdXRwdXRzLCBuZXR3b3JrKSxcbiAgICBleHBsaWNpdEV4dGVybmFsT3V0cHV0czogdG9CYXNlT3V0cHV0cyhleHBsaWNpdEV4dGVybmFsT3V0cHV0cywgbmV0d29yayksXG4gICAgZXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiBzdW1WYWx1ZXMoZXhwbGljaXRFeHRlcm5hbE91dHB1dHMpLFxuICAgIGltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiB0b0Jhc2VPdXRwdXRzKGltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzLCBuZXR3b3JrKSxcbiAgICBpbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IHN1bVZhbHVlcyhpbXBsaWNpdEV4dGVybmFsT3V0cHV0cyksXG4gICAgbWlzc2luZ091dHB1dHM6IHRvQmFzZU91dHB1dHMobWlzc2luZ091dHB1dHMsIG5ldHdvcmspLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9CYXNlUGFyc2VkVHJhbnNhY3Rpb25PdXRwdXRzRnJvbVBzYnQoXG4gIHBzYnQ6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQsXG4gIGRlc2NyaXB0b3JNYXA6IGNvcmVEZXNjcmlwdG9ycy5EZXNjcmlwdG9yTWFwLFxuICByZWNpcGllbnRzOiBJVHJhbnNhY3Rpb25SZWNpcGllbnRbXSxcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrXG4pOiBQYXJzZWRPdXRwdXRzQmlnSW50IHtcbiAgcmV0dXJuIHRvQmFzZVBhcnNlZFRyYW5zYWN0aW9uT3V0cHV0cyhcbiAgICBwYXJzZU91dHB1dHNXaXRoUHNidChcbiAgICAgIHBzYnQsXG4gICAgICBkZXNjcmlwdG9yTWFwLFxuICAgICAgcmVjaXBpZW50cy5tYXAoKHIpID0+IHRvUmVjaXBpZW50T3V0cHV0KHIsIHBzYnQubmV0d29yaykpXG4gICAgKSxcbiAgICBuZXR3b3JrXG4gICk7XG59XG5cbmV4cG9ydCB0eXBlIFBhcnNlZERlc2NyaXB0b3JUcmFuc2FjdGlvbjxUQW1vdW50IGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PiA9IEJhc2VQYXJzZWRUcmFuc2FjdGlvbjxcbiAgVEFtb3VudCxcbiAgQmFzZU91dHB1dDxUQW1vdW50IHwgJ21heCc+XG4+O1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UoXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHdhbGxldDogSURlc2NyaXB0b3JXYWxsZXQsXG4gIHBhcmFtczogUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnM8bnVtYmVyIHwgYmlnaW50PlxuKTogUGFyc2VkRGVzY3JpcHRvclRyYW5zYWN0aW9uPGJpZ2ludD4ge1xuICBpZiAocGFyYW1zLnR4UGFyYW1zLmFsbG93RXh0ZXJuYWxDaGFuZ2VBZGRyZXNzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdhbGxvd0V4dGVybmFsQ2hhbmdlQWRkcmVzcyBpcyBub3Qgc3VwcG9ydGVkIGZvciBkZXNjcmlwdG9yIHdhbGxldHMnKTtcbiAgfVxuICBpZiAocGFyYW1zLnR4UGFyYW1zLmNoYW5nZUFkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NoYW5nZUFkZHJlc3MgaXMgbm90IHN1cHBvcnRlZCBmb3IgZGVzY3JpcHRvciB3YWxsZXRzJyk7XG4gIH1cbiAgY29uc3Qga2V5Y2hhaW5zID0gcGFyYW1zLnZlcmlmaWNhdGlvbj8ua2V5Y2hhaW5zO1xuICBpZiAoIWtleWNoYWlucyB8fCAhVXR4b05hbWVkS2V5Y2hhaW5zLmlzKGtleWNoYWlucykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2tleWNoYWluIGlzIHJlcXVpcmVkIGZvciBkZXNjcmlwdG9yIHdhbGxldHMnKTtcbiAgfVxuICBjb25zdCB7IHJlY2lwaWVudHMgfSA9IHBhcmFtcy50eFBhcmFtcztcbiAgaWYgKCFyZWNpcGllbnRzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZWNpcGllbnRzIGlzIHJlcXVpcmVkJyk7XG4gIH1cbiAgY29uc3QgcHNidCA9IGNvaW4uZGVjb2RlVHJhbnNhY3Rpb25Gcm9tUHJlYnVpbGQocGFyYW1zLnR4UHJlYnVpbGQpO1xuICBpZiAoIShwc2J0IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIHBzYnQgdG8gYmUgYW4gaW5zdGFuY2Ugb2YgVXR4b1BzYnQnKTtcbiAgfVxuICBjb25zdCB3YWxsZXRLZXlzID0gdG9CaXAzMlRyaXBsZShrZXljaGFpbnMpO1xuICBjb25zdCBkZXNjcmlwdG9yTWFwID0gZ2V0RGVzY3JpcHRvck1hcEZyb21XYWxsZXQod2FsbGV0LCB3YWxsZXRLZXlzLCBnZXRQb2xpY3lGb3JFbnYocGFyYW1zLndhbGxldC5iaXRnby5lbnYpKTtcbiAgcmV0dXJuIHtcbiAgICAuLi50b0Jhc2VQYXJzZWRUcmFuc2FjdGlvbk91dHB1dHNGcm9tUHNidChwc2J0LCBkZXNjcmlwdG9yTWFwLCByZWNpcGllbnRzLCBwc2J0Lm5ldHdvcmspLFxuICAgIGtleWNoYWlucyxcbiAgICBrZXlTaWduYXR1cmVzOiBnZXRLZXlTaWduYXR1cmVzKHdhbGxldCkgPz8ge30sXG4gICAgY3VzdG9tQ2hhbmdlOiB1bmRlZmluZWQsXG4gICAgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb246IGZhbHNlLFxuICB9O1xufVxuIl19
@@ -0,0 +1,13 @@
1
+ import { AbstractUtxoCoin, BaseOutput, BaseParsedTransaction, ParseTransactionOptions } from '../../abstractUtxoCoin';
2
+ import { IDescriptorWallet } from '../../descriptor/descriptorWallet';
3
+ import { ParsedDescriptorTransaction } from './parse';
4
+ type AmountType = 'number' | 'bigint' | 'string';
5
+ export declare function toAmountType(v: number | bigint | string, t: AmountType): number | bigint | string;
6
+ type AmountTypeOptions = {
7
+ amountTypeBaseOutput: AmountType;
8
+ amountTypeAggregate: AmountType;
9
+ };
10
+ export declare function parsedDescriptorTransactionToTNumber<TAmount extends number | bigint, TOutput>(obj: ParsedDescriptorTransaction<bigint>, params: AmountTypeOptions): BaseParsedTransaction<TAmount, TOutput>;
11
+ export declare function parseToAmountType<TAmount extends number | bigint>(coin: AbstractUtxoCoin, wallet: IDescriptorWallet, params: ParseTransactionOptions<TAmount>): BaseParsedTransaction<TAmount, BaseOutput<string>>;
12
+ export {};
13
+ //# sourceMappingURL=parseToAmountType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseToAmountType.d.ts","sourceRoot":"","sources":["../../../../src/transaction/descriptor/parseToAmountType.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtH,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,EAAS,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAE7D,KAAK,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEjD,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAYjG;AAED,KAAK,iBAAiB,GAAG;IACvB,oBAAoB,EAAE,UAAU,CAAC;IACjC,mBAAmB,EAAE,UAAU,CAAC;CACjC,CAAC;AAyCF,wBAAgB,oCAAoC,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAAE,OAAO,EAC3F,GAAG,EAAE,2BAA2B,CAAC,MAAM,CAAC,EACxC,MAAM,EAAE,iBAAiB,GACxB,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,CAIzC;AAED,wBAAgB,iBAAiB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC/D,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,uBAAuB,CAAC,OAAO,CAAC,GACvC,qBAAqB,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAKpD"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toAmountType = toAmountType;
4
+ exports.parsedDescriptorTransactionToTNumber = parsedDescriptorTransactionToTNumber;
5
+ exports.parseToAmountType = parseToAmountType;
6
+ const parse_1 = require("./parse");
7
+ function toAmountType(v, t) {
8
+ if (v === 'max') {
9
+ return v;
10
+ }
11
+ switch (t) {
12
+ case 'number':
13
+ return Number(v);
14
+ case 'bigint':
15
+ return BigInt(v);
16
+ case 'string':
17
+ return String(v);
18
+ }
19
+ }
20
+ function baseOutputToTNumber(output, amountType) {
21
+ return {
22
+ address: output.address,
23
+ amount: toAmountType(output.amount, amountType),
24
+ external: output.external,
25
+ };
26
+ }
27
+ function entryToTNumber(k, v, params) {
28
+ switch (k) {
29
+ case 'outputs':
30
+ case 'changeOutputs':
31
+ case 'explicitExternalOutputs':
32
+ case 'implicitExternalOutputs':
33
+ case 'missingOutputs':
34
+ if (v === undefined) {
35
+ return [k, v];
36
+ }
37
+ if (Array.isArray(v)) {
38
+ return [k, v.map((o) => baseOutputToTNumber(o, params.amountTypeBaseOutput))];
39
+ }
40
+ throw new Error('expected array');
41
+ case 'explicitExternalSpendAmount':
42
+ case 'implicitExternalSpendAmount':
43
+ if (typeof v !== 'bigint') {
44
+ throw new Error('expected bigint');
45
+ }
46
+ return [k, toAmountType(v, params.amountTypeAggregate)];
47
+ default:
48
+ return [k, v];
49
+ }
50
+ }
51
+ function parsedDescriptorTransactionToTNumber(obj, params) {
52
+ return Object.fromEntries(Object.entries(obj).map(([k, v]) => entryToTNumber(k, v, params)));
53
+ }
54
+ function parseToAmountType(coin, wallet, params) {
55
+ return parsedDescriptorTransactionToTNumber((0, parse_1.parse)(coin, wallet, params), {
56
+ amountTypeAggregate: coin.amountType,
57
+ amountTypeBaseOutput: 'string',
58
+ });
59
+ }
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VUb0Ftb3VudFR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZGVzY3JpcHRvci9wYXJzZVRvQW1vdW50VHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU9BLG9DQVlDO0FBOENELG9GQU9DO0FBRUQsOENBU0M7QUFoRkQsbUNBQTZEO0FBSTdELFNBQWdCLFlBQVksQ0FBQyxDQUEyQixFQUFFLENBQWE7SUFDckUsSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDaEIsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBQ0QsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNWLEtBQUssUUFBUTtZQUNYLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25CLEtBQUssUUFBUTtZQUNYLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25CLEtBQUssUUFBUTtZQUNYLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7QUFDSCxDQUFDO0FBT0QsU0FBUyxtQkFBbUIsQ0FDMUIsTUFBa0MsRUFDbEMsVUFBc0I7SUFFdEIsT0FBTztRQUNMLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztRQUN2QixNQUFNLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFZO1FBQzFELFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtLQUMxQixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsY0FBYyxDQUdyQixDQUFJLEVBQUUsQ0FBSSxFQUFFLE1BQXlCO0lBQ3JDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDVixLQUFLLFNBQVMsQ0FBQztRQUNmLEtBQUssZUFBZSxDQUFDO1FBQ3JCLEtBQUsseUJBQXlCLENBQUM7UUFDL0IsS0FBSyx5QkFBeUIsQ0FBQztRQUMvQixLQUFLLGdCQUFnQjtZQUNuQixJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNoQixDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JCLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFNLENBQUMsQ0FBQztZQUNyRixDQUFDO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3BDLEtBQUssNkJBQTZCLENBQUM7UUFDbkMsS0FBSyw2QkFBNkI7WUFDaEMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7WUFDRCxPQUFPLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLG1CQUFtQixDQUFNLENBQUMsQ0FBQztRQUMvRDtZQUNFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFnQixvQ0FBb0MsQ0FDbEQsR0FBd0MsRUFDeEMsTUFBeUI7SUFFekIsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUN2QixNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBOEMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FDcEUsQ0FBQztBQUMvQyxDQUFDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQy9CLElBQXNCLEVBQ3RCLE1BQXlCLEVBQ3pCLE1BQXdDO0lBRXhDLE9BQU8sb0NBQW9DLENBQThCLElBQUEsYUFBSyxFQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUU7UUFDcEcsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLFVBQVU7UUFDcEMsb0JBQW9CLEVBQUUsUUFBUTtLQUMvQixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RVdHhvQ29pbiwgQmFzZU91dHB1dCwgQmFzZVBhcnNlZFRyYW5zYWN0aW9uLCBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyB9IGZyb20gJy4uLy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHsgSURlc2NyaXB0b3JXYWxsZXQgfSBmcm9tICcuLi8uLi9kZXNjcmlwdG9yL2Rlc2NyaXB0b3JXYWxsZXQnO1xuXG5pbXBvcnQgeyBwYXJzZSwgUGFyc2VkRGVzY3JpcHRvclRyYW5zYWN0aW9uIH0gZnJvbSAnLi9wYXJzZSc7XG5cbnR5cGUgQW1vdW50VHlwZSA9ICdudW1iZXInIHwgJ2JpZ2ludCcgfCAnc3RyaW5nJztcblxuZXhwb3J0IGZ1bmN0aW9uIHRvQW1vdW50VHlwZSh2OiBudW1iZXIgfCBiaWdpbnQgfCBzdHJpbmcsIHQ6IEFtb3VudFR5cGUpOiBudW1iZXIgfCBiaWdpbnQgfCBzdHJpbmcge1xuICBpZiAodiA9PT0gJ21heCcpIHtcbiAgICByZXR1cm4gdjtcbiAgfVxuICBzd2l0Y2ggKHQpIHtcbiAgICBjYXNlICdudW1iZXInOlxuICAgICAgcmV0dXJuIE51bWJlcih2KTtcbiAgICBjYXNlICdiaWdpbnQnOlxuICAgICAgcmV0dXJuIEJpZ0ludCh2KTtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIFN0cmluZyh2KTtcbiAgfVxufVxuXG50eXBlIEFtb3VudFR5cGVPcHRpb25zID0ge1xuICBhbW91bnRUeXBlQmFzZU91dHB1dDogQW1vdW50VHlwZTtcbiAgYW1vdW50VHlwZUFnZ3JlZ2F0ZTogQW1vdW50VHlwZTtcbn07XG5cbmZ1bmN0aW9uIGJhc2VPdXRwdXRUb1ROdW1iZXI8VEFtb3VudCBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIG91dHB1dDogQmFzZU91dHB1dDxiaWdpbnQgfCAnbWF4Jz4sXG4gIGFtb3VudFR5cGU6IEFtb3VudFR5cGVcbik6IEJhc2VPdXRwdXQ8VEFtb3VudD4ge1xuICByZXR1cm4ge1xuICAgIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzLFxuICAgIGFtb3VudDogdG9BbW91bnRUeXBlKG91dHB1dC5hbW91bnQsIGFtb3VudFR5cGUpIGFzIFRBbW91bnQsXG4gICAgZXh0ZXJuYWw6IG91dHB1dC5leHRlcm5hbCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZW50cnlUb1ROdW1iZXI8XG4gIEsgZXh0ZW5kcyBrZXlvZiBQYXJzZWREZXNjcmlwdG9yVHJhbnNhY3Rpb248YmlnaW50PixcbiAgViBleHRlbmRzIFBhcnNlZERlc2NyaXB0b3JUcmFuc2FjdGlvbjxiaWdpbnQ+W0tdXG4+KGs6IEssIHY6IFYsIHBhcmFtczogQW1vdW50VHlwZU9wdGlvbnMpOiBbSywgVl0ge1xuICBzd2l0Y2ggKGspIHtcbiAgICBjYXNlICdvdXRwdXRzJzpcbiAgICBjYXNlICdjaGFuZ2VPdXRwdXRzJzpcbiAgICBjYXNlICdleHBsaWNpdEV4dGVybmFsT3V0cHV0cyc6XG4gICAgY2FzZSAnaW1wbGljaXRFeHRlcm5hbE91dHB1dHMnOlxuICAgIGNhc2UgJ21pc3NpbmdPdXRwdXRzJzpcbiAgICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIFtrLCB2XTtcbiAgICAgIH1cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHYpKSB7XG4gICAgICAgIHJldHVybiBbaywgdi5tYXAoKG8pID0+IGJhc2VPdXRwdXRUb1ROdW1iZXIobywgcGFyYW1zLmFtb3VudFR5cGVCYXNlT3V0cHV0KSkgYXMgVl07XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIGFycmF5Jyk7XG4gICAgY2FzZSAnZXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50JzpcbiAgICBjYXNlICdpbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQnOlxuICAgICAgaWYgKHR5cGVvZiB2ICE9PSAnYmlnaW50Jykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIGJpZ2ludCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtrLCB0b0Ftb3VudFR5cGUodiwgcGFyYW1zLmFtb3VudFR5cGVBZ2dyZWdhdGUpIGFzIFZdO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gW2ssIHZdO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZWREZXNjcmlwdG9yVHJhbnNhY3Rpb25Ub1ROdW1iZXI8VEFtb3VudCBleHRlbmRzIG51bWJlciB8IGJpZ2ludCwgVE91dHB1dD4oXG4gIG9iajogUGFyc2VkRGVzY3JpcHRvclRyYW5zYWN0aW9uPGJpZ2ludD4sXG4gIHBhcmFtczogQW1vdW50VHlwZU9wdGlvbnNcbik6IEJhc2VQYXJzZWRUcmFuc2FjdGlvbjxUQW1vdW50LCBUT3V0cHV0PiB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMob2JqKS5tYXAoKFtrLCB2XSkgPT4gZW50cnlUb1ROdW1iZXIoayBhcyBrZXlvZiBQYXJzZWREZXNjcmlwdG9yVHJhbnNhY3Rpb248YmlnaW50PiwgdiwgcGFyYW1zKSlcbiAgKSBhcyBCYXNlUGFyc2VkVHJhbnNhY3Rpb248VEFtb3VudCwgVE91dHB1dD47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVRvQW1vdW50VHlwZTxUQW1vdW50IGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgd2FsbGV0OiBJRGVzY3JpcHRvcldhbGxldCxcbiAgcGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9uczxUQW1vdW50PlxuKTogQmFzZVBhcnNlZFRyYW5zYWN0aW9uPFRBbW91bnQsIEJhc2VPdXRwdXQ8c3RyaW5nPj4ge1xuICByZXR1cm4gcGFyc2VkRGVzY3JpcHRvclRyYW5zYWN0aW9uVG9UTnVtYmVyPFRBbW91bnQsIEJhc2VPdXRwdXQ8c3RyaW5nPj4ocGFyc2UoY29pbiwgd2FsbGV0LCBwYXJhbXMpLCB7XG4gICAgYW1vdW50VHlwZUFnZ3JlZ2F0ZTogY29pbi5hbW91bnRUeXBlLFxuICAgIGFtb3VudFR5cGVCYXNlT3V0cHV0OiAnc3RyaW5nJyxcbiAgfSk7XG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ export type Recipient = {
2
+ address: string;
3
+ amount: bigint;
4
+ };
5
+ //# sourceMappingURL=recipient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipient.d.ts","sourceRoot":"","sources":["../../../../src/transaction/descriptor/recipient.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC"}