@bitgo/abstract-utxo 10.13.0 → 10.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (308) hide show
  1. package/dist/cjs/src/abstractUtxoCoin.d.ts +13 -8
  2. package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
  3. package/dist/cjs/src/abstractUtxoCoin.js +20 -21
  4. package/dist/cjs/src/address/fixedScript.d.ts +4 -4
  5. package/dist/cjs/src/address/fixedScript.d.ts.map +1 -1
  6. package/dist/cjs/src/address/fixedScript.js +17 -35
  7. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
  8. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
  9. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.js +4 -2
  10. package/dist/cjs/src/impl/bch/bch.d.ts +4 -2
  11. package/dist/cjs/src/impl/bch/bch.d.ts.map +1 -1
  12. package/dist/cjs/src/impl/bch/bch.js +4 -3
  13. package/dist/cjs/src/impl/bch/tbch.d.ts +2 -0
  14. package/dist/cjs/src/impl/bch/tbch.d.ts.map +1 -1
  15. package/dist/cjs/src/impl/bch/tbch.js +3 -36
  16. package/dist/cjs/src/impl/bcha/bcha.d.ts +3 -2
  17. package/dist/cjs/src/impl/bcha/bcha.d.ts.map +1 -1
  18. package/dist/cjs/src/impl/bcha/bcha.js +4 -37
  19. package/dist/cjs/src/impl/bcha/tbcha.d.ts +2 -0
  20. package/dist/cjs/src/impl/bcha/tbcha.d.ts.map +1 -1
  21. package/dist/cjs/src/impl/bcha/tbcha.js +3 -36
  22. package/dist/cjs/src/impl/bsv/bsv.d.ts +3 -2
  23. package/dist/cjs/src/impl/bsv/bsv.d.ts.map +1 -1
  24. package/dist/cjs/src/impl/bsv/bsv.js +4 -37
  25. package/dist/cjs/src/impl/bsv/tbsv.d.ts +2 -0
  26. package/dist/cjs/src/impl/bsv/tbsv.d.ts.map +1 -1
  27. package/dist/cjs/src/impl/bsv/tbsv.js +3 -36
  28. package/dist/cjs/src/impl/btc/btc.d.ts +4 -2
  29. package/dist/cjs/src/impl/btc/btc.d.ts.map +1 -1
  30. package/dist/cjs/src/impl/btc/btc.js +4 -37
  31. package/dist/cjs/src/impl/btc/tbtc.d.ts +2 -0
  32. package/dist/cjs/src/impl/btc/tbtc.d.ts.map +1 -1
  33. package/dist/cjs/src/impl/btc/tbtc.js +3 -36
  34. package/dist/cjs/src/impl/btc/tbtc4.d.ts +2 -0
  35. package/dist/cjs/src/impl/btc/tbtc4.d.ts.map +1 -1
  36. package/dist/cjs/src/impl/btc/tbtc4.js +3 -36
  37. package/dist/cjs/src/impl/btc/tbtcbgsig.d.ts +2 -0
  38. package/dist/cjs/src/impl/btc/tbtcbgsig.d.ts.map +1 -1
  39. package/dist/cjs/src/impl/btc/tbtcbgsig.js +3 -36
  40. package/dist/cjs/src/impl/btc/tbtcsig.d.ts +2 -0
  41. package/dist/cjs/src/impl/btc/tbtcsig.d.ts.map +1 -1
  42. package/dist/cjs/src/impl/btc/tbtcsig.js +3 -36
  43. package/dist/cjs/src/impl/btg/btg.d.ts +4 -2
  44. package/dist/cjs/src/impl/btg/btg.d.ts.map +1 -1
  45. package/dist/cjs/src/impl/btg/btg.js +4 -37
  46. package/dist/cjs/src/impl/dash/dash.d.ts +4 -2
  47. package/dist/cjs/src/impl/dash/dash.d.ts.map +1 -1
  48. package/dist/cjs/src/impl/dash/dash.js +4 -37
  49. package/dist/cjs/src/impl/dash/tdash.d.ts +2 -0
  50. package/dist/cjs/src/impl/dash/tdash.d.ts.map +1 -1
  51. package/dist/cjs/src/impl/dash/tdash.js +3 -36
  52. package/dist/cjs/src/impl/doge/doge.d.ts +4 -2
  53. package/dist/cjs/src/impl/doge/doge.d.ts.map +1 -1
  54. package/dist/cjs/src/impl/doge/doge.js +4 -4
  55. package/dist/cjs/src/impl/doge/tdoge.d.ts +2 -0
  56. package/dist/cjs/src/impl/doge/tdoge.d.ts.map +1 -1
  57. package/dist/cjs/src/impl/doge/tdoge.js +3 -36
  58. package/dist/cjs/src/impl/ltc/ltc.d.ts +4 -2
  59. package/dist/cjs/src/impl/ltc/ltc.d.ts.map +1 -1
  60. package/dist/cjs/src/impl/ltc/ltc.js +4 -3
  61. package/dist/cjs/src/impl/ltc/tltc.d.ts +2 -0
  62. package/dist/cjs/src/impl/ltc/tltc.d.ts.map +1 -1
  63. package/dist/cjs/src/impl/ltc/tltc.js +3 -2
  64. package/dist/cjs/src/impl/zec/tzec.d.ts +2 -0
  65. package/dist/cjs/src/impl/zec/tzec.d.ts.map +1 -1
  66. package/dist/cjs/src/impl/zec/tzec.js +3 -36
  67. package/dist/cjs/src/impl/zec/zec.d.ts +4 -2
  68. package/dist/cjs/src/impl/zec/zec.d.ts.map +1 -1
  69. package/dist/cjs/src/impl/zec/zec.js +4 -37
  70. package/dist/cjs/src/names.d.ts +14 -4
  71. package/dist/cjs/src/names.d.ts.map +1 -1
  72. package/dist/cjs/src/names.js +74 -57
  73. package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.d.ts +2 -1
  74. package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.d.ts.map +1 -1
  75. package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.js +3 -5
  76. package/dist/cjs/src/offlineVault/TransactionExplanation.d.ts +2 -1
  77. package/dist/cjs/src/offlineVault/TransactionExplanation.d.ts.map +1 -1
  78. package/dist/cjs/src/offlineVault/TransactionExplanation.js +3 -4
  79. package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts +3 -2
  80. package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts.map +1 -1
  81. package/dist/cjs/src/offlineVault/descriptor/transaction.js +6 -3
  82. package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -1
  83. package/dist/cjs/src/recovery/backupKeyRecovery.js +40 -22
  84. package/dist/cjs/src/recovery/crossChainRecovery.d.ts +3 -2
  85. package/dist/cjs/src/recovery/crossChainRecovery.d.ts.map +1 -1
  86. package/dist/cjs/src/recovery/crossChainRecovery.js +33 -24
  87. package/dist/cjs/src/recovery/psbt.d.ts +9 -8
  88. package/dist/cjs/src/recovery/psbt.d.ts.map +1 -1
  89. package/dist/cjs/src/recovery/psbt.js +55 -41
  90. package/dist/cjs/src/tnumber.d.ts +4 -0
  91. package/dist/cjs/src/tnumber.d.ts.map +1 -0
  92. package/dist/cjs/src/tnumber.js +12 -0
  93. package/dist/cjs/src/transaction/bip322.d.ts.map +1 -1
  94. package/dist/cjs/src/transaction/bip322.js +26 -11
  95. package/dist/cjs/src/transaction/decode.d.ts +4 -3
  96. package/dist/cjs/src/transaction/decode.d.ts.map +1 -1
  97. package/dist/cjs/src/transaction/decode.js +8 -5
  98. package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts.map +1 -1
  99. package/dist/cjs/src/transaction/descriptor/explainPsbt.js +7 -5
  100. package/dist/cjs/src/transaction/descriptor/parse.d.ts +2 -1
  101. package/dist/cjs/src/transaction/descriptor/parse.d.ts.map +1 -1
  102. package/dist/cjs/src/transaction/descriptor/parse.js +14 -14
  103. package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts +2 -1
  104. package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  105. package/dist/cjs/src/transaction/descriptor/verifyTransaction.js +4 -4
  106. package/dist/cjs/src/transaction/explainTransaction.d.ts +2 -1
  107. package/dist/cjs/src/transaction/explainTransaction.d.ts.map +1 -1
  108. package/dist/cjs/src/transaction/explainTransaction.js +5 -5
  109. package/dist/cjs/src/transaction/fetchInputs.d.ts +2 -1
  110. package/dist/cjs/src/transaction/fetchInputs.d.ts.map +1 -1
  111. package/dist/cjs/src/transaction/fetchInputs.js +4 -2
  112. package/dist/cjs/src/transaction/fixedScript/SigningError.d.ts +1 -1
  113. package/dist/cjs/src/transaction/fixedScript/SigningError.d.ts.map +1 -1
  114. package/dist/cjs/src/transaction/fixedScript/SigningError.js +1 -1
  115. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts +4 -4
  116. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
  117. package/dist/cjs/src/transaction/fixedScript/explainTransaction.js +24 -19
  118. package/dist/cjs/src/transaction/fixedScript/parseTransaction.js +3 -3
  119. package/dist/cjs/src/transaction/fixedScript/replayProtection.d.ts +6 -4
  120. package/dist/cjs/src/transaction/fixedScript/replayProtection.d.ts.map +1 -1
  121. package/dist/cjs/src/transaction/fixedScript/replayProtection.js +17 -49
  122. package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts +4 -2
  123. package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -1
  124. package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.js +6 -5
  125. package/dist/cjs/src/transaction/fixedScript/{signPsbt.d.ts → signPsbtUtxolib.d.ts} +4 -13
  126. package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.d.ts.map +1 -0
  127. package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.js +157 -0
  128. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts +2 -7
  129. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -1
  130. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.js +3 -17
  131. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +9 -1
  132. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  133. package/dist/cjs/src/transaction/fixedScript/signTransaction.js +28 -9
  134. package/dist/cjs/src/transaction/fixedScript/verifyTransaction.js +2 -2
  135. package/dist/cjs/src/transaction/getPayGoVerificationPubkey.d.ts +3 -3
  136. package/dist/cjs/src/transaction/getPayGoVerificationPubkey.d.ts.map +1 -1
  137. package/dist/cjs/src/transaction/getPayGoVerificationPubkey.js +6 -39
  138. package/dist/cjs/src/transaction/recipient.d.ts +4 -4
  139. package/dist/cjs/src/transaction/recipient.d.ts.map +1 -1
  140. package/dist/cjs/src/transaction/recipient.js +7 -4
  141. package/dist/cjs/src/transaction/signTransaction.js +2 -2
  142. package/dist/cjs/src/wallet.js +2 -2
  143. package/dist/cjs/test/unit/address.js +9 -9
  144. package/dist/cjs/test/unit/bip322.js +319 -3
  145. package/dist/cjs/test/unit/coins.js +18 -1
  146. package/dist/cjs/test/unit/customChangeWallet.js +2 -2
  147. package/dist/cjs/test/unit/prebuildAndSign.js +2 -2
  148. package/dist/cjs/test/unit/recovery/backupKeyRecovery.js +15 -2
  149. package/dist/cjs/test/unit/recovery/crossChainRecovery.js +6 -7
  150. package/dist/cjs/test/unit/transaction/descriptor/parse.js +2 -2
  151. package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.js +7 -10
  152. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.js +5 -6
  153. package/dist/cjs/test/unit/transaction/fixedScript/replayProtection.js +3 -2
  154. package/dist/cjs/test/unit/transaction/fixedScript/signPsbt.js +8 -11
  155. package/dist/cjs/test/unit/transaction.js +23 -24
  156. package/dist/cjs/test/unit/util/unspents.d.ts.map +1 -1
  157. package/dist/cjs/test/unit/util/unspents.js +4 -2
  158. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  159. package/dist/esm/abstractUtxoCoin.d.ts +13 -8
  160. package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
  161. package/dist/esm/abstractUtxoCoin.js +22 -23
  162. package/dist/esm/address/fixedScript.d.ts +4 -4
  163. package/dist/esm/address/fixedScript.d.ts.map +1 -1
  164. package/dist/esm/address/fixedScript.js +17 -35
  165. package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
  166. package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
  167. package/dist/esm/descriptor/assertDescriptorWalletAddress.js +4 -2
  168. package/dist/esm/impl/bch/bch.d.ts +4 -2
  169. package/dist/esm/impl/bch/bch.d.ts.map +1 -1
  170. package/dist/esm/impl/bch/bch.js +4 -3
  171. package/dist/esm/impl/bch/tbch.d.ts +2 -0
  172. package/dist/esm/impl/bch/tbch.d.ts.map +1 -1
  173. package/dist/esm/impl/bch/tbch.js +3 -3
  174. package/dist/esm/impl/bcha/bcha.d.ts +3 -2
  175. package/dist/esm/impl/bcha/bcha.d.ts.map +1 -1
  176. package/dist/esm/impl/bcha/bcha.js +4 -4
  177. package/dist/esm/impl/bcha/tbcha.d.ts +2 -0
  178. package/dist/esm/impl/bcha/tbcha.d.ts.map +1 -1
  179. package/dist/esm/impl/bcha/tbcha.js +3 -3
  180. package/dist/esm/impl/bsv/bsv.d.ts +3 -2
  181. package/dist/esm/impl/bsv/bsv.d.ts.map +1 -1
  182. package/dist/esm/impl/bsv/bsv.js +4 -4
  183. package/dist/esm/impl/bsv/tbsv.d.ts +2 -0
  184. package/dist/esm/impl/bsv/tbsv.d.ts.map +1 -1
  185. package/dist/esm/impl/bsv/tbsv.js +3 -3
  186. package/dist/esm/impl/btc/btc.d.ts +4 -2
  187. package/dist/esm/impl/btc/btc.d.ts.map +1 -1
  188. package/dist/esm/impl/btc/btc.js +4 -4
  189. package/dist/esm/impl/btc/tbtc.d.ts +2 -0
  190. package/dist/esm/impl/btc/tbtc.d.ts.map +1 -1
  191. package/dist/esm/impl/btc/tbtc.js +3 -3
  192. package/dist/esm/impl/btc/tbtc4.d.ts +2 -0
  193. package/dist/esm/impl/btc/tbtc4.d.ts.map +1 -1
  194. package/dist/esm/impl/btc/tbtc4.js +3 -3
  195. package/dist/esm/impl/btc/tbtcbgsig.d.ts +2 -0
  196. package/dist/esm/impl/btc/tbtcbgsig.d.ts.map +1 -1
  197. package/dist/esm/impl/btc/tbtcbgsig.js +3 -3
  198. package/dist/esm/impl/btc/tbtcsig.d.ts +2 -0
  199. package/dist/esm/impl/btc/tbtcsig.d.ts.map +1 -1
  200. package/dist/esm/impl/btc/tbtcsig.js +3 -3
  201. package/dist/esm/impl/btg/btg.d.ts +4 -2
  202. package/dist/esm/impl/btg/btg.d.ts.map +1 -1
  203. package/dist/esm/impl/btg/btg.js +4 -4
  204. package/dist/esm/impl/dash/dash.d.ts +4 -2
  205. package/dist/esm/impl/dash/dash.d.ts.map +1 -1
  206. package/dist/esm/impl/dash/dash.js +4 -4
  207. package/dist/esm/impl/dash/tdash.d.ts +2 -0
  208. package/dist/esm/impl/dash/tdash.d.ts.map +1 -1
  209. package/dist/esm/impl/dash/tdash.js +3 -3
  210. package/dist/esm/impl/doge/doge.d.ts +4 -2
  211. package/dist/esm/impl/doge/doge.d.ts.map +1 -1
  212. package/dist/esm/impl/doge/doge.js +4 -4
  213. package/dist/esm/impl/doge/tdoge.d.ts +2 -0
  214. package/dist/esm/impl/doge/tdoge.d.ts.map +1 -1
  215. package/dist/esm/impl/doge/tdoge.js +3 -3
  216. package/dist/esm/impl/ltc/ltc.d.ts +4 -2
  217. package/dist/esm/impl/ltc/ltc.d.ts.map +1 -1
  218. package/dist/esm/impl/ltc/ltc.js +4 -3
  219. package/dist/esm/impl/ltc/tltc.d.ts +2 -0
  220. package/dist/esm/impl/ltc/tltc.d.ts.map +1 -1
  221. package/dist/esm/impl/ltc/tltc.js +3 -2
  222. package/dist/esm/impl/zec/tzec.d.ts +2 -0
  223. package/dist/esm/impl/zec/tzec.d.ts.map +1 -1
  224. package/dist/esm/impl/zec/tzec.js +3 -3
  225. package/dist/esm/impl/zec/zec.d.ts +4 -2
  226. package/dist/esm/impl/zec/zec.d.ts.map +1 -1
  227. package/dist/esm/impl/zec/zec.js +4 -4
  228. package/dist/esm/names.d.ts +14 -4
  229. package/dist/esm/names.d.ts.map +1 -1
  230. package/dist/esm/names.js +67 -54
  231. package/dist/esm/offlineVault/OfflineVaultHalfSigned.d.ts +2 -1
  232. package/dist/esm/offlineVault/OfflineVaultHalfSigned.d.ts.map +1 -1
  233. package/dist/esm/offlineVault/OfflineVaultHalfSigned.js +3 -5
  234. package/dist/esm/offlineVault/TransactionExplanation.d.ts +2 -1
  235. package/dist/esm/offlineVault/TransactionExplanation.d.ts.map +1 -1
  236. package/dist/esm/offlineVault/TransactionExplanation.js +3 -4
  237. package/dist/esm/offlineVault/descriptor/transaction.d.ts +3 -2
  238. package/dist/esm/offlineVault/descriptor/transaction.d.ts.map +1 -1
  239. package/dist/esm/offlineVault/descriptor/transaction.js +6 -3
  240. package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -1
  241. package/dist/esm/recovery/backupKeyRecovery.js +41 -23
  242. package/dist/esm/recovery/crossChainRecovery.d.ts +3 -2
  243. package/dist/esm/recovery/crossChainRecovery.d.ts.map +1 -1
  244. package/dist/esm/recovery/crossChainRecovery.js +34 -25
  245. package/dist/esm/recovery/psbt.d.ts +9 -8
  246. package/dist/esm/recovery/psbt.d.ts.map +1 -1
  247. package/dist/esm/recovery/psbt.js +55 -41
  248. package/dist/esm/tnumber.d.ts +4 -0
  249. package/dist/esm/tnumber.d.ts.map +1 -0
  250. package/dist/esm/tnumber.js +9 -0
  251. package/dist/esm/transaction/bip322.d.ts.map +1 -1
  252. package/dist/esm/transaction/bip322.js +27 -12
  253. package/dist/esm/transaction/decode.d.ts +4 -3
  254. package/dist/esm/transaction/decode.d.ts.map +1 -1
  255. package/dist/esm/transaction/decode.js +8 -5
  256. package/dist/esm/transaction/descriptor/explainPsbt.d.ts.map +1 -1
  257. package/dist/esm/transaction/descriptor/explainPsbt.js +7 -5
  258. package/dist/esm/transaction/descriptor/parse.d.ts +2 -1
  259. package/dist/esm/transaction/descriptor/parse.d.ts.map +1 -1
  260. package/dist/esm/transaction/descriptor/parse.js +14 -14
  261. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts +2 -1
  262. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  263. package/dist/esm/transaction/descriptor/verifyTransaction.js +4 -4
  264. package/dist/esm/transaction/explainTransaction.d.ts +2 -1
  265. package/dist/esm/transaction/explainTransaction.d.ts.map +1 -1
  266. package/dist/esm/transaction/explainTransaction.js +5 -5
  267. package/dist/esm/transaction/fetchInputs.d.ts +2 -1
  268. package/dist/esm/transaction/fetchInputs.d.ts.map +1 -1
  269. package/dist/esm/transaction/fetchInputs.js +4 -2
  270. package/dist/esm/transaction/fixedScript/SigningError.d.ts +1 -1
  271. package/dist/esm/transaction/fixedScript/SigningError.d.ts.map +1 -1
  272. package/dist/esm/transaction/fixedScript/SigningError.js +1 -1
  273. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts +4 -4
  274. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
  275. package/dist/esm/transaction/fixedScript/explainTransaction.js +24 -19
  276. package/dist/esm/transaction/fixedScript/parseTransaction.js +3 -3
  277. package/dist/esm/transaction/fixedScript/replayProtection.d.ts +6 -4
  278. package/dist/esm/transaction/fixedScript/replayProtection.d.ts.map +1 -1
  279. package/dist/esm/transaction/fixedScript/replayProtection.js +17 -16
  280. package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts +4 -2
  281. package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -1
  282. package/dist/esm/transaction/fixedScript/signLegacyTransaction.js +6 -5
  283. package/dist/esm/transaction/fixedScript/{signPsbt.d.ts → signPsbtUtxolib.d.ts} +4 -13
  284. package/dist/esm/transaction/fixedScript/signPsbtUtxolib.d.ts.map +1 -0
  285. package/dist/esm/transaction/fixedScript/signPsbtUtxolib.js +117 -0
  286. package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts +2 -7
  287. package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -1
  288. package/dist/esm/transaction/fixedScript/signPsbtWasm.js +3 -17
  289. package/dist/esm/transaction/fixedScript/signTransaction.d.ts +9 -1
  290. package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  291. package/dist/esm/transaction/fixedScript/signTransaction.js +28 -10
  292. package/dist/esm/transaction/fixedScript/verifyTransaction.js +2 -2
  293. package/dist/esm/transaction/getPayGoVerificationPubkey.d.ts +3 -3
  294. package/dist/esm/transaction/getPayGoVerificationPubkey.d.ts.map +1 -1
  295. package/dist/esm/transaction/getPayGoVerificationPubkey.js +6 -6
  296. package/dist/esm/transaction/recipient.d.ts +4 -4
  297. package/dist/esm/transaction/recipient.d.ts.map +1 -1
  298. package/dist/esm/transaction/recipient.js +7 -4
  299. package/dist/esm/transaction/signTransaction.js +2 -2
  300. package/dist/esm/wallet.js +2 -2
  301. package/package.json +12 -12
  302. package/dist/cjs/src/transaction/fixedScript/signPsbt.d.ts.map +0 -1
  303. package/dist/cjs/src/transaction/fixedScript/signPsbt.js +0 -174
  304. package/dist/cjs/test/unit/transaction/fixedScript/util.d.ts +0 -3
  305. package/dist/cjs/test/unit/transaction/fixedScript/util.d.ts.map +0 -1
  306. package/dist/cjs/test/unit/transaction/fixedScript/util.js +0 -41
  307. package/dist/esm/transaction/fixedScript/signPsbt.d.ts.map +0 -1
  308. package/dist/esm/transaction/fixedScript/signPsbt.js +0 -134
@@ -38,12 +38,13 @@ exports.toNetworkName = toNetworkName;
38
38
  exports.createEmptyWasmPsbt = createEmptyWasmPsbt;
39
39
  exports.addWalletInputsToWasmPsbt = addWalletInputsToWasmPsbt;
40
40
  exports.addOutputToWasmPsbt = addOutputToWasmPsbt;
41
- exports.wasmPsbtToUtxolibPsbt = wasmPsbtToUtxolibPsbt;
41
+ exports.toPsbtToUtxolibPsbt = toPsbtToUtxolibPsbt;
42
42
  exports.createBackupKeyRecoveryPsbt = createBackupKeyRecoveryPsbt;
43
43
  exports.getRecoveryAmount = getRecoveryAmount;
44
44
  const utxolib = __importStar(require("@bitgo/utxo-lib"));
45
45
  const unspents_1 = require("@bitgo/unspents");
46
46
  const wasm_utxo_1 = require("@bitgo/wasm-utxo");
47
+ const names_1 = require("../names");
47
48
  const { chainCodesP2tr, chainCodesP2trMusig2 } = utxolib.bitgo;
48
49
  /**
49
50
  * Check if a chain code is for a taproot script type
@@ -52,12 +53,13 @@ function isTaprootChain(chain) {
52
53
  return (chainCodesP2tr.includes(chain) || chainCodesP2trMusig2.includes(chain));
53
54
  }
54
55
  /**
55
- * Convert utxolib Network to wasm-utxo network name
56
+ * Convert coin name to wasm-utxo network name
56
57
  */
57
- function toNetworkName(network) {
58
+ function toNetworkName(coinName) {
59
+ const network = (0, names_1.getNetworkFromCoinName)(coinName);
58
60
  const networkName = utxolib.getNetworkName(network);
59
61
  if (!networkName) {
60
- throw new Error(`Invalid network`);
62
+ throw new Error(`Invalid coinName: ${coinName}`);
61
63
  }
62
64
  return networkName;
63
65
  }
@@ -77,7 +79,8 @@ class InsufficientFundsError extends Error {
77
79
  /**
78
80
  * Create a backup key recovery PSBT using utxolib (legacy implementation)
79
81
  */
80
- function createBackupKeyRecoveryPsbtUtxolib(network, rootWalletKeys, unspents, options) {
82
+ function createBackupKeyRecoveryPsbtUtxolib(coinName, rootWalletKeys, unspents, options) {
83
+ const network = (0, names_1.getNetworkFromCoinName)(coinName);
81
84
  const { feeRateSatVB, recoveryDestination, keyRecoveryServiceFee, keyRecoveryServiceFeeAddress } = options;
82
85
  const psbt = utxolib.bitgo.createPsbtForNetwork({ network });
83
86
  utxolib.bitgo.addXpubsToPsbt(psbt, rootWalletKeys);
@@ -108,8 +111,8 @@ function createBackupKeyRecoveryPsbtUtxolib(network, rootWalletKeys, unspents, o
108
111
  /**
109
112
  * Check if the network is a Zcash network
110
113
  */
111
- function isZcashNetwork(networkName) {
112
- return networkName === 'zcash' || networkName === 'zcashTest';
114
+ function isZcash(coinName) {
115
+ return coinName === 'zec' || coinName === 'tzec';
113
116
  }
114
117
  /**
115
118
  * Default block heights for Zcash networks if not provided.
@@ -117,8 +120,8 @@ function isZcashNetwork(networkName) {
117
120
  * TODO(BTC-2901): get the height from blockchair API instead of hardcoding.
118
121
  */
119
122
  const ZCASH_DEFAULT_BLOCK_HEIGHTS = {
120
- zcash: 3146400,
121
- zcashTest: 3536500,
123
+ zec: 3146400,
124
+ tzec: 3536500,
122
125
  };
123
126
  /**
124
127
  * Create an empty wasm-utxo BitGoPsbt for a given network.
@@ -129,16 +132,15 @@ const ZCASH_DEFAULT_BLOCK_HEIGHTS = {
129
132
  * @param options - Optional settings (e.g., blockHeight for Zcash)
130
133
  * @returns A wasm-utxo BitGoPsbt instance
131
134
  */
132
- function createEmptyWasmPsbt(network, rootWalletKeys, options) {
133
- const networkName = toNetworkName(network);
134
- if (isZcashNetwork(networkName)) {
135
+ function createEmptyWasmPsbt(coinName, rootWalletKeys, options) {
136
+ if (isZcash(coinName)) {
135
137
  // For Zcash, use ZcashBitGoPsbt which requires block height to determine consensus branch ID
136
- const blockHeight = options?.blockHeight ?? ZCASH_DEFAULT_BLOCK_HEIGHTS[networkName];
137
- return wasm_utxo_1.fixedScriptWallet.ZcashBitGoPsbt.createEmpty(networkName, rootWalletKeys, {
138
+ const blockHeight = options?.blockHeight ?? ZCASH_DEFAULT_BLOCK_HEIGHTS[coinName];
139
+ return wasm_utxo_1.fixedScriptWallet.ZcashBitGoPsbt.createEmpty(coinName, rootWalletKeys, {
138
140
  blockHeight,
139
141
  });
140
142
  }
141
- return wasm_utxo_1.fixedScriptWallet.BitGoPsbt.createEmpty(networkName, rootWalletKeys);
143
+ return wasm_utxo_1.fixedScriptWallet.BitGoPsbt.createEmpty(coinName, rootWalletKeys);
142
144
  }
143
145
  /**
144
146
  * Add wallet inputs from unspents to a wasm-utxo BitGoPsbt.
@@ -176,9 +178,9 @@ function addWalletInputsToWasmPsbt(wasmPsbt, unspents, rootWalletKeys) {
176
178
  * @param network - The network (used to convert address to script)
177
179
  * @returns The output index
178
180
  */
179
- function addOutputToWasmPsbt(wasmPsbt, address, value, network) {
180
- const script = utxolib.address.toOutputScript(address, network);
181
- return wasmPsbt.addOutput({ script: new Uint8Array(script), value });
181
+ function addOutputToWasmPsbt(wasmPsbt, address, value, coinName) {
182
+ const script = wasm_utxo_1.address.toOutputScriptWithCoin(address, coinName);
183
+ return wasmPsbt.addOutput({ script, value });
182
184
  }
183
185
  /**
184
186
  * Convert a wasm-utxo BitGoPsbt to a utxolib UtxoPsbt.
@@ -187,24 +189,25 @@ function addOutputToWasmPsbt(wasmPsbt, address, value, network) {
187
189
  * @param network - The network
188
190
  * @returns A utxolib UtxoPsbt
189
191
  */
190
- function wasmPsbtToUtxolibPsbt(wasmPsbt, network) {
191
- return utxolib.bitgo.createPsbtFromBuffer(Buffer.from(wasmPsbt.serialize()), network);
192
+ function toPsbtToUtxolibPsbt(wasmPsbt, coinName) {
193
+ if (wasmPsbt instanceof wasm_utxo_1.fixedScriptWallet.BitGoPsbt) {
194
+ const network = (0, names_1.getNetworkFromCoinName)(coinName);
195
+ return utxolib.bitgo.createPsbtFromBuffer(Buffer.from(wasmPsbt.serialize()), network);
196
+ }
197
+ return wasmPsbt;
192
198
  }
193
199
  /**
194
200
  * Create a backup key recovery PSBT using wasm-utxo
195
201
  */
196
- function createBackupKeyRecoveryPsbtWasm(network, rootWalletKeys, unspents, options) {
202
+ function createBackupKeyRecoveryPsbtWasm(coinName, rootWalletKeys, unspents, options) {
197
203
  const { feeRateSatVB, recoveryDestination, keyRecoveryServiceFee, keyRecoveryServiceFeeAddress } = options;
198
204
  // Create PSBT with wasm-utxo and add wallet inputs using shared utilities
199
- const wasmPsbt = createEmptyWasmPsbt(network, rootWalletKeys, { blockHeight: options.blockHeight });
205
+ const wasmPsbt = createEmptyWasmPsbt(coinName, rootWalletKeys, { blockHeight: options.blockHeight });
200
206
  addWalletInputsToWasmPsbt(wasmPsbt, unspents, rootWalletKeys);
201
- // Convert to utxolib PSBT temporarily for dimension calculation
202
- const tempPsbt = wasmPsbtToUtxolibPsbt(wasmPsbt, network);
203
- let dimensions = unspents_1.Dimensions.fromPsbt(tempPsbt).plus(unspents_1.Dimensions.fromOutput({ script: utxolib.address.toOutputScript(recoveryDestination, network) }));
207
+ // Calculate dimensions using wasm-utxo Dimensions
208
+ let dimensions = wasm_utxo_1.fixedScriptWallet.Dimensions.fromPsbt(wasmPsbt).plus(wasm_utxo_1.fixedScriptWallet.Dimensions.fromOutput(recoveryDestination, coinName));
204
209
  if (keyRecoveryServiceFeeAddress) {
205
- dimensions = dimensions.plus(unspents_1.Dimensions.fromOutput({
206
- script: utxolib.address.toOutputScript(keyRecoveryServiceFeeAddress, network),
207
- }));
210
+ dimensions = dimensions.plus(wasm_utxo_1.fixedScriptWallet.Dimensions.fromOutput(keyRecoveryServiceFeeAddress, coinName));
208
211
  }
209
212
  const approximateFee = BigInt(dimensions.getVSize() * feeRateSatVB);
210
213
  const totalInputAmount = utxolib.bitgo.unspentSum(unspents, 'bigint');
@@ -213,12 +216,12 @@ function createBackupKeyRecoveryPsbtWasm(network, rootWalletKeys, unspents, opti
213
216
  throw new InsufficientFundsError(totalInputAmount, approximateFee, keyRecoveryServiceFee, recoveryAmount);
214
217
  }
215
218
  // Add outputs to wasm PSBT
216
- addOutputToWasmPsbt(wasmPsbt, recoveryDestination, recoveryAmount, network);
219
+ addOutputToWasmPsbt(wasmPsbt, recoveryDestination, recoveryAmount, coinName);
217
220
  if (keyRecoveryServiceFeeAddress) {
218
- addOutputToWasmPsbt(wasmPsbt, keyRecoveryServiceFeeAddress, keyRecoveryServiceFee, network);
221
+ addOutputToWasmPsbt(wasmPsbt, keyRecoveryServiceFeeAddress, keyRecoveryServiceFee, coinName);
219
222
  }
220
223
  // Convert to utxolib PSBT for signing and return
221
- return wasmPsbtToUtxolibPsbt(wasmPsbt, network);
224
+ return wasmPsbt;
222
225
  }
223
226
  /**
224
227
  * Create a backup key recovery PSBT.
@@ -229,23 +232,34 @@ function createBackupKeyRecoveryPsbtWasm(network, rootWalletKeys, unspents, opti
229
232
  * @param options - Options for creating the PSBT
230
233
  * @param backend - Which backend to use for PSBT creation (default: 'wasm-utxo')
231
234
  */
232
- function createBackupKeyRecoveryPsbt(network, rootWalletKeys, unspents, options, backend = 'wasm-utxo') {
235
+ function createBackupKeyRecoveryPsbt(coinName, rootWalletKeys, unspents, options, backend = 'wasm-utxo') {
233
236
  if (options.keyRecoveryServiceFee > 0 && !options.keyRecoveryServiceFeeAddress) {
234
237
  throw new Error('keyRecoveryServiceFeeAddress is required when keyRecoveryServiceFee is provided');
235
238
  }
236
239
  if (backend === 'wasm-utxo') {
237
- return createBackupKeyRecoveryPsbtWasm(network, rootWalletKeys, unspents, options);
240
+ return createBackupKeyRecoveryPsbtWasm(coinName, rootWalletKeys, unspents, options);
238
241
  }
239
242
  else {
240
- return createBackupKeyRecoveryPsbtUtxolib(network, rootWalletKeys, unspents, options);
243
+ return createBackupKeyRecoveryPsbtUtxolib(coinName, rootWalletKeys, unspents, options);
241
244
  }
242
245
  }
243
- function getRecoveryAmount(psbt, address) {
244
- const recoveryOutputScript = utxolib.address.toOutputScript(address, psbt.network);
245
- const output = psbt.txOutputs.find((o) => o.script.equals(recoveryOutputScript));
246
- if (!output) {
247
- throw new Error(`Recovery destination output not found in PSBT: ${address}`);
246
+ function getRecoveryAmount(psbt, walletKeys, address) {
247
+ if (psbt instanceof utxolib.bitgo.UtxoPsbt) {
248
+ const recoveryOutputScript = utxolib.address.toOutputScript(address, psbt.network);
249
+ const output = psbt.txOutputs.find((o) => o.script.equals(recoveryOutputScript));
250
+ if (!output) {
251
+ throw new Error(`Recovery destination output not found in PSBT: ${address}`);
252
+ }
253
+ return output.value;
254
+ }
255
+ if (psbt instanceof wasm_utxo_1.fixedScriptWallet.BitGoPsbt) {
256
+ const parsedOutputs = psbt.parseOutputsWithWalletKeys(walletKeys);
257
+ const recoveryOutput = parsedOutputs.find((o) => o.address === address);
258
+ if (!recoveryOutput) {
259
+ throw new Error(`Recovery destination output not found in PSBT: ${address}`);
260
+ }
261
+ return recoveryOutput.value;
248
262
  }
249
- return output.value;
263
+ throw new Error('Invalid PSBT type');
250
264
  }
251
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHNidC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9yZWNvdmVyeS9wc2J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBcUJBLHdDQUlDO0FBS0Qsc0NBTUM7QUErR0Qsa0RBZ0JDO0FBVUQsOERBNEJDO0FBV0Qsa0RBUUM7QUFTRCxzREFLQztBQTJERCxrRUFnQkM7QUFFRCw4Q0FPQztBQTlURCx5REFBMkM7QUFDM0MsOENBQTZDO0FBQzdDLGdEQUFvRTtBQUtwRSxNQUFNLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztBQVcvRDs7R0FFRztBQUNILFNBQWdCLGNBQWMsQ0FBQyxLQUFnQjtJQUM3QyxPQUFPLENBQ0osY0FBb0MsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUssb0JBQTBDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUNySCxDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsYUFBYSxDQUFDLE9BQXdCO0lBQ3BELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVELE1BQU0sc0JBQXVCLFNBQVEsS0FBSztJQUN4QyxZQUNTLGdCQUF3QixFQUN4QixjQUFzQixFQUN0QixNQUFjLEVBQ2QsY0FBc0I7UUFFN0IsS0FBSyxDQUNILGlGQUFpRjtZQUMvRSwrQkFBK0IsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUk7WUFDOUQsdURBQXVELGNBQWMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNsRixtQkFBbUIsTUFBTSxD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LENBQUMsQ0FBQyxDQUFDO0lBQ2pGLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQztBQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgRGltZW5zaW9ucyB9IGZyb20gJ0BiaXRnby91bnNwZW50cyc7XG5pbXBvcnQgeyBmaXhlZFNjcmlwdFdhbGxldCwgdXR4b2xpYkNvbXBhdCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG50eXBlIFJvb3RXYWxsZXRLZXlzID0gdXR4b2xpYi5iaXRnby5Sb290V2FsbGV0S2V5cztcbnR5cGUgV2FsbGV0VW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PiA9IHV0eG9saWIuYml0Z28uV2FsbGV0VW5zcGVudDxUTnVtYmVyPjtcblxuY29uc3QgeyBjaGFpbkNvZGVzUDJ0ciwgY2hhaW5Db2Rlc1AydHJNdXNpZzIgfSA9IHV0eG9saWIuYml0Z287XG5cbnR5cGUgQ2hhaW5Db2RlID0gdXR4b2xpYi5iaXRnby5DaGFpbkNvZGU7XG5cbi8qKlxuICogQmFja2VuZCB0byB1c2UgZm9yIFBTQlQgY3JlYXRpb24uXG4gKiAtICd3YXNtLXV0eG8nOiBVc2Ugd2FzbS11dHhvIGZvciBQU0JUIGNyZWF0aW9uIChkZWZhdWx0KVxuICogLSAndXR4b2xpYic6IFVzZSB1dHhvbGliIGZvciBQU0JUIGNyZWF0aW9uIChsZWdhY3kpXG4gKi9cbmV4cG9ydCB0eXBlIFBzYnRCYWNrZW5kID0gJ3dhc20tdXR4bycgfCAndXR4b2xpYic7XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBjaGFpbiBjb2RlIGlzIGZvciBhIHRhcHJvb3Qgc2NyaXB0IHR5cGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVGFwcm9vdENoYWluKGNoYWluOiBDaGFpbkNvZGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICAoY2hhaW5Db2Rlc1AydHIgYXMgcmVhZG9ubHkgbnVtYmVyW10pLmluY2x1ZGVzKGNoYWluKSB8fCAoY2hhaW5Db2Rlc1AydHJNdXNpZzIgYXMgcmVhZG9ubHkgbnVtYmVyW10pLmluY2x1ZGVzKGNoYWluKVxuICApO1xufVxuXG4vKipcbiAqIENvbnZlcnQgdXR4b2xpYiBOZXR3b3JrIHRvIHdhc20tdXR4byBuZXR3b3JrIG5hbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvTmV0d29ya05hbWUobmV0d29yazogdXR4b2xpYi5OZXR3b3JrKTogdXR4b2xpYkNvbXBhdC5VdHhvbGliTmFtZSB7XG4gIGNvbnN0IG5ldHdvcmtOYW1lID0gdXR4b2xpYi5nZXROZXR3b3JrTmFtZShuZXR3b3JrKTtcbiAgaWYgKCFuZXR3b3JrTmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuZXR3b3JrYCk7XG4gIH1cbiAgcmV0dXJuIG5ldHdvcmtOYW1lO1xufVxuXG5jbGFzcyBJbnN1ZmZpY2llbnRGdW5kc0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgdG90YWxJbnB1dEFtb3VudDogYmlnaW50LFxuICAgIHB1YmxpYyBhcHByb3hpbWF0ZUZlZTogYmlnaW50LFxuICAgIHB1YmxpYyBrcnNGZWU6IGJpZ2ludCxcbiAgICBwdWJsaWMgcmVjb3ZlcnlBbW91bnQ6IGJpZ2ludFxuICApIHtcbiAgICBzdXBlcihcbiAgICAgIGBUaGlzIHdhbGxldCdzIGJhbGFuY2UgaXMgdG9vIGxvdyB0byBwYXkgdGhlIGZlZXMgc3BlY2lmaWVkIGJ5IHRoZSBLUlMgcHJvdmlkZXIuYCArXG4gICAgICAgIGBFeGlzdGluZyBiYWxhbmNlIG9uIHdhbGxldDogJHt0b3RhbElucHV0QW1vdW50LnRvU3RyaW5nKCl9LiBgICtcbiAgICAgICAgYEVzdGltYXRlZCBuZXR3b3JrIGZlZSBmb3IgdGhlIHJlY292ZXJ5IHRyYW5zYWN0aW9uOiAke2FwcHJveGltYXRlRmVlLnRvU3RyaW5nKCl9YCArXG4gICAgICAgIGBLUlMgZmVlIHRvIHBheTogJHtrcnNGZWUudG9TdHJpbmcoKX0uIGAgK1xuICAgICAgICBgQWZ0ZXIgZGVkdWN0aW5nIGZlZXMsIHlvdXIgdG90YWwgcmVjb3ZlcmFibGUgYmFsYW5jZSBpcyAke3JlY292ZXJ5QW1vdW50LnRvU3RyaW5nKCl9YFxuICAgICk7XG4gIH1cbn1cblxuaW50ZXJmYWNlIENyZWF0ZUJhY2t1cEtleVJlY292ZXJ5UHNidE9wdGlvbnMge1xuICBmZWVSYXRlU2F0VkI6IG51bWJlcjtcbiAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogc3RyaW5nO1xuICBrZXlSZWNvdmVyeVNlcnZpY2VGZWU6IGJpZ2ludDtcbiAga2V5UmVjb3ZlcnlTZXJ2aWNlRmVlQWRkcmVzczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAvKiogQmxvY2sgaGVpZ2h0IGZvciBaY2FzaCBuZXR3b3JrcyAocmVxdWlyZWQgdG8gZGV0ZXJtaW5lIGNvbnNlbnN1cyBicmFuY2ggSUQpICovXG4gIGJsb2NrSGVpZ2h0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGJhY2t1cCBrZXkgcmVjb3ZlcnkgUFNCVCB1c2luZyB1dHhvbGliIChsZWdhY3kgaW1wbGVtZW50YXRpb24pXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJhY2t1cEtleVJlY292ZXJ5UHNidFV0eG9saWIoXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayxcbiAgcm9vdFdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzLFxuICB1bnNwZW50czogV2FsbGV0VW5zcGVudDxiaWdpbnQ+W10sXG4gIG9wdGlvbnM6IENyZWF0ZUJhY2t1cEtleVJlY292ZXJ5UHNidE9wdGlvbnNcbik6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQge1xuICBjb25zdCB7IGZlZVJhdGVTYXRWQiwgcmVjb3ZlcnlEZXN0aW5hdGlvbiwga2V5UmVjb3ZlcnlTZXJ2aWNlRmVlLCBrZXlSZWNvdmVyeVNlcnZpY2VGZWVBZGRyZXNzIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IHBzYnQgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGb3JOZXR3b3JrKHsgbmV0d29yayB9KTtcbiAgdXR4b2xpYi5iaXRnby5hZGRYcHVic1RvUHNidChwc2J0LCByb290V2FsbGV0S2V5cyk7XG4gIHVuc3BlbnRzLmZvckVhY2goKHVuc3BlbnQpID0+IHtcbiAgICB1dHhvbGliLmJpdGdvLmFkZFdhbGxldFVuc3BlbnRUb1BzYnQocHNidCwgdW5zcGVudCwgcm9vdFdhbGxldEtleXMsICd1c2VyJywgJ2JhY2t1cCcpO1xuICB9KTtcblxuICBsZXQgZGltZW5zaW9ucyA9IERpbWVuc2lvbnMuZnJvbVBzYnQocHNidCkucGx1cyhcbiAgICBEaW1lbnNpb25zLmZyb21PdXRwdXQoeyBzY3JpcHQ6IHV0eG9saWIuYWRkcmVzcy50b091dHB1dFNjcmlwdChyZWNvdmVyeURlc3RpbmF0aW9uLCBuZXR3b3JrKSB9KVxuICApO1xuXG4gIGlmIChrZXlSZWNvdmVyeVNlcnZpY2VGZWVBZGRyZXNzKSB7XG4gICAgZGltZW5zaW9ucyA9IGRpbWVuc2lvbnMucGx1cyhcbiAgICAgIERpbWVuc2lvbnMuZnJvbU91dHB1dCh7XG4gICAgICAgIHNjcmlwdDogdXR4b2xpYi5hZGRyZXNzLnRvT3V0cHV0U2NyaXB0KGtleVJlY292ZXJ5U2VydmljZUZlZUFkZHJlc3MsIG5ldHdvcmspLFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgY29uc3QgYXBwcm94aW1hdGVGZWUgPSBCaWdJbnQoZGltZW5zaW9ucy5nZXRWU2l6ZSgpICogZmVlUmF0ZVNhdFZCKTtcbiAgY29uc3QgdG90YWxJbnB1dEFtb3VudCA9IHV0eG9saWIuYml0Z28udW5zcGVudFN1bSh1bnNwZW50cywgJ2JpZ2ludCcpO1xuICBjb25zdCByZWNvdmVyeUFtb3VudCA9IHRvdGFsSW5wdXRBbW91bnQgLSBhcHByb3hpbWF0ZUZlZSAtIGtleVJlY292ZXJ5U2VydmljZUZlZTtcblxuICBpZiAocmVjb3ZlcnlBbW91bnQgPCBCaWdJbnQoMCkpIHtcbiAgICB0aHJvdyBuZXcgSW5zdWZmaWNpZW50RnVuZHNFcnJvcih0b3RhbElucHV0QW1vdW50LCBhcHByb3hpbWF0ZUZlZSwga2V5UmVjb3ZlcnlTZXJ2aWNlRmVlLCByZWNvdmVyeUFtb3VudCk7XG4gIH1cblxuICBwc2J0LmFkZE91dHB1dCh7IHNjcmlwdDogdXR4b2xpYi5hZGRyZXNzLnRvT3V0cHV0U2NyaXB0KHJlY292ZXJ5RGVzdGluYXRpb24sIG5ldHdvcmspLCB2YWx1ZTogcmVjb3ZlcnlBbW91bnQgfSk7XG5cbiAgaWYgKGtleVJlY292ZXJ5U2VydmljZUZlZUFkZHJlc3MpIHtcbiAgICBwc2J0LmFkZE91dHB1dCh7XG4gICAgICBzY3JpcHQ6IHV0eG9saWIuYWRkcmVzcy50b091dHB1dFNjcmlwdChrZXlSZWNvdmVyeVNlcnZpY2VGZWVBZGRyZXNzLCBuZXR3b3JrKSxcbiAgICAgIHZhbHVlOiBrZXlSZWNvdmVyeVNlcnZpY2VGZWUsXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcHNidDtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgbmV0d29yayBpcyBhIFpjYXNoIG5ldHdvcmtcbiAqL1xuZnVuY3Rpb24gaXNaY2FzaE5ldHdvcmsobmV0d29ya05hbWU6IHV0eG9saWJDb21wYXQuVXR4b2xpYk5hbWUpOiBib29sZWFuIHtcbiAgcmV0dXJuIG5ldHdvcmtOYW1lID09PSAnemNhc2gnIHx8IG5ldHdvcmtOYW1lID09PSAnemNhc2hUZXN0Jztcbn1cblxuLyoqXG4gKiBEZWZhdWx0IGJsb2NrIGhlaWdodHMgZm9yIFpjYXNoIG5ldHdvcmtzIGlmIG5vdCBwcm92aWRlZC5cbiAqIFRoZXNlIHNob3VsZCBiZSBzZXQgdG8gYSBoZWlnaHQgYWZ0ZXIgdGhlIGxhdGVzdCBuZXR3b3JrIHVwZ3JhZGUuXG4gKiBUT0RPKEJUQy0yOTAxKTogZ2V0IHRoZSBoZWlnaHQgZnJvbSBibG9ja2NoYWlyIEFQSSBpbnN0ZWFkIG9mIGhhcmRjb2RpbmcuXG4gKi9cbmNvbnN0IFpDQVNIX0RFRkFVTFRfQkxPQ0tfSEVJR0hUUzogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHtcbiAgemNhc2g6IDMxNDY0MDAsXG4gIHpjYXNoVGVzdDogMzUzNjUwMCxcbn07XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY3JlYXRpbmcgYW4gZW1wdHkgd2FzbS11dHhvIFBTQlRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVFbXB0eVdhc21Qc2J0T3B0aW9ucyB7XG4gIC8qKiBCbG9jayBoZWlnaHQgZm9yIFpjYXNoIG5ldHdvcmtzIChyZXF1aXJlZCB0byBkZXRlcm1pbmUgY29uc2Vuc3VzIGJyYW5jaCBJRCkgKi9cbiAgYmxvY2tIZWlnaHQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGVtcHR5IHdhc20tdXR4byBCaXRHb1BzYnQgZm9yIGEgZ2l2ZW4gbmV0d29yay5cbiAqIEhhbmRsZXMgWmNhc2ggbmV0d29ya3Mgc3BlY2lhbGx5IGJ5IHVzaW5nIFpjYXNoQml0R29Qc2J0LlxuICpcbiAqIEBwYXJhbSBuZXR3b3JrIC0gVGhlIG5ldHdvcmsgZm9yIHRoZSBQU0JUXG4gKiBAcGFyYW0gcm9vdFdhbGxldEtleXMgLSBUaGUgd2FsbGV0IGtleXNcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgc2V0dGluZ3MgKGUuZy4sIGJsb2NrSGVpZ2h0IGZvciBaY2FzaClcbiAqIEByZXR1cm5zIEEgd2FzbS11dHhvIEJpdEdvUHNidCBpbnN0YW5jZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRW1wdHlXYXNtUHNidChcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrLFxuICByb290V2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIG9wdGlvbnM/OiBDcmVhdGVFbXB0eVdhc21Qc2J0T3B0aW9uc1xuKTogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0IHtcbiAgY29uc3QgbmV0d29ya05hbWUgPSB0b05ldHdvcmtOYW1lKG5ldHdvcmspO1xuXG4gIGlmIChpc1pjYXNoTmV0d29yayhuZXR3b3JrTmFtZSkpIHtcbiAgICAvLyBGb3IgWmNhc2gsIHVzZSBaY2FzaEJpdEdvUHNidCB3aGljaCByZXF1aXJlcyBibG9jayBoZWlnaHQgdG8gZGV0ZXJtaW5lIGNvbnNlbnN1cyBicmFuY2ggSURcbiAgICBjb25zdCBibG9ja0hlaWdodCA9IG9wdGlvbnM/LmJsb2NrSGVpZ2h0ID8/IFpDQVNIX0RFRkFVTFRfQkxPQ0tfSEVJR0hUU1tuZXR3b3JrTmFtZV07XG4gICAgcmV0dXJuIGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoQml0R29Qc2J0LmNyZWF0ZUVtcHR5KG5ldHdvcmtOYW1lIGFzICd6Y2FzaCcgfCAnemNhc2hUZXN0Jywgcm9vdFdhbGxldEtleXMsIHtcbiAgICAgIGJsb2NrSGVpZ2h0LFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eShuZXR3b3JrTmFtZSwgcm9vdFdhbGxldEtleXMpO1xufVxuXG4vKipcbiAqIEFkZCB3YWxsZXQgaW5wdXRzIGZyb20gdW5zcGVudHMgdG8gYSB3YXNtLXV0eG8gQml0R29Qc2J0LlxuICogSGFuZGxlcyB0YXByb290IGlucHV0cyBieSBzZXR0aW5nIHRoZSBhcHByb3ByaWF0ZSBzaWduUGF0aC5cbiAqXG4gKiBAcGFyYW0gd2FzbVBzYnQgLSBUaGUgd2FzbS11dHhvIEJpdEdvUHNidCB0byBhZGQgaW5wdXRzIHRvXG4gKiBAcGFyYW0gdW5zcGVudHMgLSBUaGUgd2FsbGV0IHVuc3BlbnRzIHRvIGFkZCBhcyBpbnB1dHNcbiAqIEBwYXJhbSByb290V2FsbGV0S2V5cyAtIFRoZSB3YWxsZXQga2V5c1xuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkV2FsbGV0SW5wdXRzVG9XYXNtUHNidChcbiAgd2FzbVBzYnQ6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCxcbiAgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8YmlnaW50PltdLFxuICByb290V2FsbGV0S2V5czogUm9vdFdhbGxldEtleXNcbik6IHZvaWQge1xuICB1bnNwZW50cy5mb3JFYWNoKCh1bnNwZW50KSA9PiB7XG4gICAgY29uc3QgeyB0eGlkLCB2b3V0IH0gPSB1dHhvbGliLmJpdGdvLnBhcnNlT3V0cHV0SWQodW5zcGVudC5pZCk7XG4gICAgY29uc3Qgc2lnblBhdGg6IGZpeGVkU2NyaXB0V2FsbGV0LlNpZ25QYXRoIHwgdW5kZWZpbmVkID0gaXNUYXByb290Q2hhaW4odW5zcGVudC5jaGFpbilcbiAgICAgID8geyBzaWduZXI6ICd1c2VyJywgY29zaWduZXI6ICdiYWNrdXAnIH1cbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gcHJldlR4IG1heSBiZSBhZGRlZCBkeW5hbWljYWxseSBpbiBiYWNrdXBLZXlSZWNvdmVyeSBmb3Igbm9uLXNlZ3dpdCBpbnB1dHNcbiAgICBjb25zdCBwcmV2VHggPSAodW5zcGVudCBhcyBXYWxsZXRVbnNwZW50PGJpZ2ludD4gJiB7IHByZXZUeD86IEJ1ZmZlciB9KS5wcmV2VHg7XG5cbiAgICB3YXNtUHNidC5hZGRXYWxsZXRJbnB1dChcbiAgICAgIHtcbiAgICAgICAgdHhpZCxcbiAgICAgICAgdm91dCxcbiAgICAgICAgdmFsdWU6IHVuc3BlbnQudmFsdWUsXG4gICAgICAgIHByZXZUeDogcHJldlR4LFxuICAgICAgfSxcbiAgICAgIHJvb3RXYWxsZXRLZXlzLFxuICAgICAge1xuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbjogdW5zcGVudC5jaGFpbiwgaW5kZXg6IHVuc3BlbnQuaW5kZXggfSxcbiAgICAgICAgc2lnblBhdGgsXG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQWRkIGFuIG91dHB1dCB0byBhIHdhc20tdXR4byBCaXRHb1BzYnQuXG4gKlxuICogQHBhcmFtIHdhc21Qc2J0IC0gVGhlIHdhc20tdXR4byBCaXRHb1BzYnQgdG8gYWRkIHRoZSBvdXRwdXQgdG9cbiAqIEBwYXJhbSBhZGRyZXNzIC0gVGhlIGRlc3RpbmF0aW9uIGFkZHJlc3NcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBvdXRwdXQgdmFsdWUgaW4gc2F0b3NoaXNcbiAqIEBwYXJhbSBuZXR3b3JrIC0gVGhlIG5ldHdvcmsgKHVzZWQgdG8gY29udmVydCBhZGRyZXNzIHRvIHNjcmlwdClcbiAqIEByZXR1cm5zIFRoZSBvdXRwdXQgaW5kZXhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZE91dHB1dFRvV2FzbVBzYnQoXG4gIHdhc21Qc2J0OiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQsXG4gIGFkZHJlc3M6IHN0cmluZyxcbiAgdmFsdWU6IGJpZ2ludCxcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrXG4pOiBudW1iZXIge1xuICBjb25zdCBzY3JpcHQgPSB1dHhvbGliLmFkZHJlc3MudG9PdXRwdXRTY3JpcHQoYWRkcmVzcywgbmV0d29yayk7XG4gIHJldHVybiB3YXNtUHNidC5hZGRPdXRwdXQoeyBzY3JpcHQ6IG5ldyBVaW50OEFycmF5KHNjcmlwdCksIHZhbHVlIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSB3YXNtLXV0eG8gQml0R29Qc2J0IHRvIGEgdXR4b2xpYiBVdHhvUHNidC5cbiAqXG4gKiBAcGFyYW0gd2FzbVBzYnQgLSBUaGUgd2FzbS11dHhvIEJpdEdvUHNidCB0byBjb252ZXJ0XG4gKiBAcGFyYW0gbmV0d29yayAtIFRoZSBuZXR3b3JrXG4gKiBAcmV0dXJucyBBIHV0eG9saWIgVXR4b1BzYnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhc21Qc2J0VG9VdHhvbGliUHNidChcbiAgd2FzbVBzYnQ6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCxcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrXG4pOiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0IHtcbiAgcmV0dXJuIHV0eG9saWIuYml0Z28uY3JlYXRlUHNidEZyb21CdWZmZXIoQnVmZmVyLmZyb20od2FzbVBzYnQuc2VyaWFsaXplKCkpLCBuZXR3b3JrKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBiYWNrdXAga2V5IHJlY292ZXJ5IFBTQlQgdXNpbmcgd2FzbS11dHhvXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJhY2t1cEtleVJlY292ZXJ5UHNidFdhc20oXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayxcbiAgcm9vdFdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzLFxuICB1bnNwZW50czogV2FsbGV0VW5zcGVudDxiaWdpbnQ+W10sXG4gIG9wdGlvbnM6IENyZWF0ZUJhY2t1cEtleVJlY292ZXJ5UHNidE9wdGlvbnNcbik6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQge1xuICBjb25zdCB7IGZlZVJhdGVTYXRWQiwgcmVjb3ZlcnlEZXN0aW5hdGlvbiwga2V5UmVjb3ZlcnlTZXJ2aWNlRmVlLCBrZXlSZWNvdmVyeVNlcnZpY2VGZWVBZGRyZXNzIH0gPSBvcHRpb25zO1xuXG4gIC8vIENyZWF0ZSBQU0JUIHdpdGggd2FzbS11dHhvIGFuZCBhZGQgd2FsbGV0IGlucHV0cyB1c2luZyBzaGFyZWQgdXRpbGl0aWVzXG4gIGNvbnN0IHdhc21Qc2J0ID0gY3JlYXRlRW1wdHlXYXNtUHNidChuZXR3b3JrLCByb290V2FsbGV0S2V5cywgeyBibG9ja0hlaWdodDogb3B0aW9ucy5ibG9ja0hlaWdodCB9KTtcbiAgYWRkV2FsbGV0SW5wdXRzVG9XYXNtUHNidCh3YXNtUHNidCwgdW5zcGVudHMsIHJvb3RXYWxsZXRLZXlzKTtcblxuICAvLyBDb252ZXJ0IHRvIHV0eG9saWIgUFNCVCB0ZW1wb3JhcmlseSBmb3IgZGltZW5zaW9uIGNhbGN1bGF0aW9uXG4gIGNvbnN0IHRlbXBQc2J0ID0gd2FzbVBzYnRUb1V0eG9saWJQc2J0KHdhc21Qc2J0LCBuZXR3b3JrKTtcbiAgbGV0IGRpbWVuc2lvbnMgPSBEaW1lbnNpb25zLmZyb21Qc2J0KHRlbXBQc2J0KS5wbHVzKFxuICAgIERpbWVuc2lvbnMuZnJvbU91dHB1dCh7IHNjcmlwdDogdXR4b2xpYi5hZGRyZXNzLnRvT3V0cHV0U2NyaXB0KHJlY292ZXJ5RGVzdGluYXRpb24sIG5ldHdvcmspIH0pXG4gICk7XG5cbiAgaWYgKGtleVJlY292ZXJ5U2VydmljZUZlZUFkZHJlc3MpIHtcbiAgICBkaW1lbnNpb25zID0gZGltZW5zaW9ucy5wbHVzKFxuICAgICAgRGltZW5zaW9ucy5mcm9tT3V0cHV0KHtcbiAgICAgICAgc2NyaXB0OiB1dHhvbGliLmFkZHJlc3MudG9PdXRwdXRTY3JpcHQoa2V5UmVjb3ZlcnlTZXJ2aWNlRmVlQWRkcmVzcywgbmV0d29yayksXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBjb25zdCBhcHByb3hpbWF0ZUZlZSA9IEJpZ0ludChkaW1lbnNpb25zLmdldFZTaXplKCkgKiBmZWVSYXRlU2F0VkIpO1xuICBjb25zdCB0b3RhbElucHV0QW1vdW50ID0gdXR4b2xpYi5iaXRnby51bnNwZW50U3VtKHVuc3BlbnRzLCAnYmlnaW50Jyk7XG4gIGNvbnN0IHJlY292ZXJ5QW1vdW50ID0gdG90YWxJbnB1dEFtb3VudCAtIGFwcHJveGltYXRlRmVlIC0ga2V5UmVjb3ZlcnlTZXJ2aWNlRmVlO1xuXG4gIGlmIChyZWNvdmVyeUFtb3VudCA8IEJpZ0ludCgwKSkge1xuICAgIHRocm93IG5ldyBJbnN1ZmZpY2llbnRGdW5kc0Vycm9yKHRvdGFsSW5wdXRBbW91bnQsIGFwcHJveGltYXRlRmVlLCBrZXlSZWNvdmVyeVNlcnZpY2VGZWUsIHJlY292ZXJ5QW1vdW50KTtcbiAgfVxuXG4gIC8vIEFkZCBvdXRwdXRzIHRvIHdhc20gUFNCVFxuICBhZGRPdXRwdXRUb1dhc21Qc2J0KHdhc21Qc2J0LCByZWNvdmVyeURlc3RpbmF0aW9uLCByZWNvdmVyeUFtb3VudCwgbmV0d29yayk7XG5cbiAgaWYgKGtleVJlY292ZXJ5U2VydmljZUZlZUFkZHJlc3MpIHtcbiAgICBhZGRPdXRwdXRUb1dhc21Qc2J0KHdhc21Qc2J0LCBrZXlSZWNvdmVyeVNlcnZpY2VGZWVBZGRyZXNzLCBrZXlSZWNvdmVyeVNlcnZpY2VGZWUsIG5ldHdvcmspO1xuICB9XG5cbiAgLy8gQ29udmVydCB0byB1dHhvbGliIFBTQlQgZm9yIHNpZ25pbmcgYW5kIHJldHVyblxuICByZXR1cm4gd2FzbVBzYnRUb1V0eG9saWJQc2J0KHdhc21Qc2J0LCBuZXR3b3JrKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBiYWNrdXAga2V5IHJlY292ZXJ5IFBTQlQuXG4gKlxuICogQHBhcmFtIG5ldHdvcmsgLSBUaGUgbmV0d29yayBmb3IgdGhlIFBTQlRcbiAqIEBwYXJhbSByb290V2FsbGV0S2V5cyAtIFRoZSB3YWxsZXQga2V5c1xuICogQHBhcmFtIHVuc3BlbnRzIC0gVGhlIHVuc3BlbnRzIHRvIGluY2x1ZGUgaW4gdGhlIFBTQlRcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgY3JlYXRpbmcgdGhlIFBTQlRcbiAqIEBwYXJhbSBiYWNrZW5kIC0gV2hpY2ggYmFja2VuZCB0byB1c2UgZm9yIFBTQlQgY3JlYXRpb24gKGRlZmF1bHQ6ICd3YXNtLXV0eG8nKVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQmFja3VwS2V5UmVjb3ZlcnlQc2J0KFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmssXG4gIHJvb3RXYWxsZXRLZXlzOiBSb290V2FsbGV0S2V5cyxcbiAgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8YmlnaW50PltdLFxuICBvcHRpb25zOiBDcmVhdGVCYWNrdXBLZXlSZWNvdmVyeVBzYnRPcHRpb25zLFxuICBiYWNrZW5kOiBQc2J0QmFja2VuZCA9ICd3YXNtLXV0eG8nXG4pOiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0IHtcbiAgaWYgKG9wdGlvbnMua2V5UmVjb3ZlcnlTZXJ2aWNlRmVlID4gMCAmJiAhb3B0aW9ucy5rZXlSZWNvdmVyeVNlcnZpY2VGZWVBZGRyZXNzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdrZXlSZWNvdmVyeVNlcnZpY2VGZWVBZGRyZXNzIGlzIHJlcXVpcmVkIHdoZW4ga2V5UmVjb3ZlcnlTZXJ2aWNlRmVlIGlzIHByb3ZpZGVkJyk7XG4gIH1cblxuICBpZiAoYmFja2VuZCA9PT0gJ3dhc20tdXR4bycpIHtcbiAgICByZXR1cm4gY3JlYXRlQmFja3VwS2V5UmVjb3ZlcnlQc2J0V2FzbShuZXR3b3JrLCByb290V2FsbGV0S2V5cywgdW5zcGVudHMsIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBjcmVhdGVCYWNrdXBLZXlSZWNvdmVyeVBzYnRVdHhvbGliKG5ldHdvcmssIHJvb3RXYWxsZXRLZXlzLCB1bnNwZW50cywgb3B0aW9ucyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlY292ZXJ5QW1vdW50KHBzYnQ6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQsIGFkZHJlc3M6IHN0cmluZyk6IGJpZ2ludCB7XG4gIGNvbnN0IHJlY292ZXJ5T3V0cHV0U2NyaXB0ID0gdXR4b2xpYi5hZGRyZXNzLnRvT3V0cHV0U2NyaXB0KGFkZHJlc3MsIHBzYnQubmV0d29yayk7XG4gIGNvbnN0IG91dHB1dCA9IHBzYnQudHhPdXRwdXRzLmZpbmQoKG8pID0+IG8uc2NyaXB0LmVxdWFscyhyZWNvdmVyeU91dHB1dFNjcmlwdCkpO1xuICBpZiAoIW91dHB1dCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUmVjb3ZlcnkgZGVzdGluYXRpb24gb3V0cHV0IG5vdCBmb3VuZCBpbiBQU0JUOiAke2FkZHJlc3N9YCk7XG4gIH1cbiAgcmV0dXJuIG91dHB1dC52YWx1ZTtcbn1cbiJdfQ==
265
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHNidC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9yZWNvdmVyeS9wc2J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBdUJBLHdDQUlDO0FBS0Qsc0NBT0M7QUFnSEQsa0RBY0M7QUFVRCw4REE0QkM7QUFXRCxrREFRQztBQVNELGtEQVNDO0FBc0RELGtFQWdCQztBQUVELDhDQXNCQztBQTlVRCx5REFBMkM7QUFDM0MsOENBQTZDO0FBQzdDLGdEQUFzRztBQUV0RyxvQ0FBZ0U7QUFLaEUsTUFBTSxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFXL0Q7O0dBRUc7QUFDSCxTQUFnQixjQUFjLENBQUMsS0FBZ0I7SUFDN0MsT0FBTyxDQUNKLGNBQW9DLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFLLG9CQUEwQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FDckgsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGFBQWEsQ0FBQyxRQUFzQjtJQUNsRCxNQUFNLE9BQU8sR0FBRyxJQUFBLDhCQUFzQixFQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUNELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxNQUFNLHNCQUF1QixTQUFRLEtBQUs7SUFDeEMsWUFDUyxnQkFBd0IsRUFDeEIsY0FBc0IsRUFDdEIsTUFBYyxFQUNkLGNBQXNCO1FBRTdCLEtBQUssQ0FDSCxpRkFBaUY7WUFDL0UsK0JBQStCLGdCQUFnQixD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U0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDL0UsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBQ0QsSUFBSSxJQUFJLFlBQVksNkJBQWlCLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDaEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDL0UsQ0FBQztRQUNELE9BQU8sY0FBYyxDQUFDLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQ3ZDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBEaW1lbnNpb25zIH0gZnJvbSAnQGJpdGdvL3Vuc3BlbnRzJztcbmltcG9ydCB7IENvaW5OYW1lLCBmaXhlZFNjcmlwdFdhbGxldCwgdXR4b2xpYkNvbXBhdCwgYWRkcmVzcyBhcyB3YXNtQWRkcmVzcyB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQgeyBnZXROZXR3b3JrRnJvbUNvaW5OYW1lLCBVdHhvQ29pbk5hbWUgfSBmcm9tICcuLi9uYW1lcyc7XG5cbnR5cGUgUm9vdFdhbGxldEtleXMgPSB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzO1xudHlwZSBXYWxsZXRVbnNwZW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+ID0gdXR4b2xpYi5iaXRnby5XYWxsZXRVbnNwZW50PFROdW1iZXI+O1xuXG5jb25zdCB7IGNoYWluQ29kZXNQMnRyLCBjaGFpbkNvZGVzUDJ0ck11c2lnMiB9ID0gdXR4b2xpYi5iaXRnbztcblxudHlwZSBDaGFpbkNvZGUgPSB1dHhvbGliLmJpdGdvLkNoYWluQ29kZTtcblxuLyoqXG4gKiBCYWNrZW5kIHRvIHVzZSBmb3IgUFNCVCBjcmVhdGlvbi5cbiAqIC0gJ3dhc20tdXR4byc6IFVzZSB3YXNtLXV0eG8gZm9yIFBTQlQgY3JlYXRpb24gKGRlZmF1bHQpXG4gKiAtICd1dHhvbGliJzogVXNlIHV0eG9saWIgZm9yIFBTQlQgY3JlYXRpb24gKGxlZ2FjeSlcbiAqL1xuZXhwb3J0IHR5cGUgUHNidEJhY2tlbmQgPSAnd2FzbS11dHhvJyB8ICd1dHhvbGliJztcblxuLyoqXG4gKiBDaGVjayBpZiBhIGNoYWluIGNvZGUgaXMgZm9yIGEgdGFwcm9vdCBzY3JpcHQgdHlwZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUYXByb290Q2hhaW4oY2hhaW46IENoYWluQ29kZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIChjaGFpbkNvZGVzUDJ0ciBhcyByZWFkb25seSBudW1iZXJbXSkuaW5jbHVkZXMoY2hhaW4pIHx8IChjaGFpbkNvZGVzUDJ0ck11c2lnMiBhcyByZWFkb25seSBudW1iZXJbXSkuaW5jbHVkZXMoY2hhaW4pXG4gICk7XG59XG5cbi8qKlxuICogQ29udmVydCBjb2luIG5hbWUgdG8gd2FzbS11dHhvIG5ldHdvcmsgbmFtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9OZXR3b3JrTmFtZShjb2luTmFtZTogVXR4b0NvaW5OYW1lKTogdXR4b2xpYkNvbXBhdC5VdHhvbGliTmFtZSB7XG4gIGNvbnN0IG5ldHdvcmsgPSBnZXROZXR3b3JrRnJvbUNvaW5OYW1lKGNvaW5OYW1lKTtcbiAgY29uc3QgbmV0d29ya05hbWUgPSB1dHhvbGliLmdldE5ldHdvcmtOYW1lKG5ldHdvcmspO1xuICBpZiAoIW5ldHdvcmtOYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNvaW5OYW1lOiAke2NvaW5OYW1lfWApO1xuICB9XG4gIHJldHVybiBuZXR3b3JrTmFtZTtcbn1cblxuY2xhc3MgSW5zdWZmaWNpZW50RnVuZHNFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHRvdGFsSW5wdXRBbW91bnQ6IGJpZ2ludCxcbiAgICBwdWJsaWMgYXBwcm94aW1hdGVGZWU6IGJpZ2ludCxcbiAgICBwdWJsaWMga3JzRmVlOiBiaWdpbnQsXG4gICAgcHVibGljIHJlY292ZXJ5QW1vdW50OiBiaWdpbnRcbiAgKSB7XG4gICAgc3VwZXIoXG4gICAgICBgVGhpcyB3YWxsZXQncyBiYWxhbmNlIGlzIHRvbyBsb3cgdG8gcGF5IHRoZSBmZWVzIHNwZWNpZmllZCBieSB0aGUgS1JTIHByb3ZpZGVyLmAgK1xuICAgICAgICBgRXhpc3RpbmcgYmFsYW5jZSBvbiB3YWxsZXQ6ICR7dG90YWxJbnB1dEFtb3VudC50b1N0cmluZygpfS4gYCArXG4gICAgICAgIGBFc3RpbWF0ZWQgbmV0d29yayBmZWUgZm9yIHRoZSByZWNvdmVyeSB0cmFuc2FjdGlvbjogJHthcHByb3hpbWF0ZUZlZS50b1N0cmluZygpfWAgK1xuICAgICAgICBgS1JTIGZlZSB0byBwYXk6ICR7a3JzRmVlLnRvU3RyaW5nKCl9LiBgICtcbiAgICAgICAgYEFmdGVyIGRlZHVjdGluZyBmZWVzLCB5b3VyIHRvdGFsIHJlY292ZXJhYmxlIGJhbGFuY2UgaXMgJHtyZWNvdmVyeUFtb3VudC50b1N0cmluZygpfWBcbiAgICApO1xuICB9XG59XG5cbmludGVyZmFjZSBDcmVhdGVCYWNrdXBLZXlSZWNvdmVyeVBzYnRPcHRpb25zIHtcbiAgZmVlUmF0ZVNhdFZCOiBudW1iZXI7XG4gIHJlY292ZXJ5RGVzdGluYXRpb246IHN0cmluZztcbiAga2V5UmVjb3ZlcnlTZXJ2aWNlRmVlOiBiaWdpbnQ7XG4gIGtleVJlY292ZXJ5U2VydmljZUZlZUFkZHJlc3M6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqIEJsb2NrIGhlaWdodCBmb3IgWmNhc2ggbmV0d29ya3MgKHJlcXVpcmVkIHRvIGRldGVybWluZSBjb25zZW5zdXMgYnJhbmNoIElEKSAqL1xuICBibG9ja0hlaWdodD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBiYWNrdXAga2V5IHJlY292ZXJ5IFBTQlQgdXNpbmcgdXR4b2xpYiAobGVnYWN5IGltcGxlbWVudGF0aW9uKVxuICovXG5mdW5jdGlvbiBjcmVhdGVCYWNrdXBLZXlSZWNvdmVyeVBzYnRVdHhvbGliKFxuICBjb2luTmFtZTogQ29pbk5hbWUsXG4gIHJvb3RXYWxsZXRLZXlzOiBSb290V2FsbGV0S2V5cyxcbiAgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8YmlnaW50PltdLFxuICBvcHRpb25zOiBDcmVhdGVCYWNrdXBLZXlSZWNvdmVyeVBzYnRPcHRpb25zXG4pOiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0IHtcbiAgY29uc3QgbmV0d29yayA9IGdldE5ldHdvcmtGcm9tQ29pbk5hbWUoY29pbk5hbWUpO1xuICBjb25zdCB7IGZlZVJhdGVTYXRWQiwgcmVjb3ZlcnlEZXN0aW5hdGlvbiwga2V5UmVjb3ZlcnlTZXJ2aWNlRmVlLCBrZXlSZWNvdmVyeVNlcnZpY2VGZWVBZGRyZXNzIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IHBzYnQgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGb3JOZXR3b3JrKHsgbmV0d29yayB9KTtcbiAgdXR4b2xpYi5iaXRnby5hZGRYcHVic1RvUHNidChwc2J0LCByb290V2FsbGV0S2V5cyk7XG4gIHVuc3BlbnRzLmZvckVhY2goKHVuc3BlbnQpID0+IHtcbiAgICB1dHhvbGliLmJpdGdvLmFkZFdhbGxldFVuc3BlbnRUb1BzYnQocHNidCwgdW5zcGVudCwgcm9vdFdhbGxldEtleXMsICd1c2VyJywgJ2JhY2t1cCcpO1xuICB9KTtcblxuICBsZXQgZGltZW5zaW9ucyA9IERpbWVuc2lvbnMuZnJvbVBzYnQocHNidCkucGx1cyhcbiAgICBEaW1lbnNpb25zLmZyb21PdXRwdXQoeyBzY3JpcHQ6IHV0eG9saWIuYWRkcmVzcy50b091dHB1dFNjcmlwdChyZWNvdmVyeURlc3RpbmF0aW9uLCBuZXR3b3JrKSB9KVxuICApO1xuXG4gIGlmIChrZXlSZWNvdmVyeVNlcnZpY2VGZWVBZGRyZXNzKSB7XG4gICAgZGltZW5zaW9ucyA9IGRpbWVuc2lvbnMucGx1cyhcbiAgICAgIERpbWVuc2lvbnMuZnJvbU91dHB1dCh7XG4gICAgICAgIHNjcmlwdDogdXR4b2xpYi5hZGRyZXNzLnRvT3V0cHV0U2NyaXB0KGtleVJlY292ZXJ5U2VydmljZUZlZUFkZHJlc3MsIG5ldHdvcmspLFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgY29uc3QgYXBwcm94aW1hdGVGZWUgPSBCaWdJbnQoZGltZW5zaW9ucy5nZXRWU2l6ZSgpICogZmVlUmF0ZVNhdFZCKTtcbiAgY29uc3QgdG90YWxJbnB1dEFtb3VudCA9IHV0eG9saWIuYml0Z28udW5zcGVudFN1bSh1bnNwZW50cywgJ2JpZ2ludCcpO1xuICBjb25zdCByZWNvdmVyeUFtb3VudCA9IHRvdGFsSW5wdXRBbW91bnQgLSBhcHByb3hpbWF0ZUZlZSAtIGtleVJlY292ZXJ5U2VydmljZUZlZTtcblxuICBpZiAocmVjb3ZlcnlBbW91bnQgPCBCaWdJbnQoMCkpIHtcbiAgICB0aHJvdyBuZXcgSW5zdWZmaWNpZW50RnVuZHNFcnJvcih0b3RhbElucHV0QW1vdW50LCBhcHByb3hpbWF0ZUZlZSwga2V5UmVjb3ZlcnlTZXJ2aWNlRmVlLCByZWNvdmVyeUFtb3VudCk7XG4gIH1cblxuICBwc2J0LmFkZE91dHB1dCh7IHNjcmlwdDogdXR4b2xpYi5hZGRyZXNzLnRvT3V0cHV0U2NyaXB0KHJlY292ZXJ5RGVzdGluYXRpb24sIG5ldHdvcmspLCB2YWx1ZTogcmVjb3ZlcnlBbW91bnQgfSk7XG5cbiAgaWYgKGtleVJlY292ZXJ5U2VydmljZUZlZUFkZHJlc3MpIHtcbiAgICBwc2J0LmFkZE91dHB1dCh7XG4gICAgICBzY3JpcHQ6IHV0eG9saWIuYWRkcmVzcy50b091dHB1dFNjcmlwdChrZXlSZWNvdmVyeVNlcnZpY2VGZWVBZGRyZXNzLCBuZXR3b3JrKSxcbiAgICAgIHZhbHVlOiBrZXlSZWNvdmVyeVNlcnZpY2VGZWUsXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcHNidDtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgbmV0d29yayBpcyBhIFpjYXNoIG5ldHdvcmtcbiAqL1xuZnVuY3Rpb24gaXNaY2FzaChjb2luTmFtZTogQ29pbk5hbWUpOiBjb2luTmFtZSBpcyAnemVjJyB8ICd0emVjJyB7XG4gIHJldHVybiBjb2luTmFtZSA9PT0gJ3plYycgfHwgY29pbk5hbWUgPT09ICd0emVjJztcbn1cblxuLyoqXG4gKiBEZWZhdWx0IGJsb2NrIGhlaWdodHMgZm9yIFpjYXNoIG5ldHdvcmtzIGlmIG5vdCBwcm92aWRlZC5cbiAqIFRoZXNlIHNob3VsZCBiZSBzZXQgdG8gYSBoZWlnaHQgYWZ0ZXIgdGhlIGxhdGVzdCBuZXR3b3JrIHVwZ3JhZGUuXG4gKiBUT0RPKEJUQy0yOTAxKTogZ2V0IHRoZSBoZWlnaHQgZnJvbSBibG9ja2NoYWlyIEFQSSBpbnN0ZWFkIG9mIGhhcmRjb2RpbmcuXG4gKi9cbmNvbnN0IFpDQVNIX0RFRkFVTFRfQkxPQ0tfSEVJR0hUUzogUmVjb3JkPCd6ZWMnIHwgJ3R6ZWMnLCBudW1iZXI+ID0ge1xuICB6ZWM6IDMxNDY0MDAsXG4gIHR6ZWM6IDM1MzY1MDAsXG59O1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNyZWF0aW5nIGFuIGVtcHR5IHdhc20tdXR4byBQU0JUXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlRW1wdHlXYXNtUHNidE9wdGlvbnMge1xuICAvKiogQmxvY2sgaGVpZ2h0IGZvciBaY2FzaCBuZXR3b3JrcyAocmVxdWlyZWQgdG8gZGV0ZXJtaW5lIGNvbnNlbnN1cyBicmFuY2ggSUQpICovXG4gIGJsb2NrSGVpZ2h0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBlbXB0eSB3YXNtLXV0eG8gQml0R29Qc2J0IGZvciBhIGdpdmVuIG5ldHdvcmsuXG4gKiBIYW5kbGVzIFpjYXNoIG5ldHdvcmtzIHNwZWNpYWxseSBieSB1c2luZyBaY2FzaEJpdEdvUHNidC5cbiAqXG4gKiBAcGFyYW0gbmV0d29yayAtIFRoZSBuZXR3b3JrIGZvciB0aGUgUFNCVFxuICogQHBhcmFtIHJvb3RXYWxsZXRLZXlzIC0gVGhlIHdhbGxldCBrZXlzXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHNldHRpbmdzIChlLmcuLCBibG9ja0hlaWdodCBmb3IgWmNhc2gpXG4gKiBAcmV0dXJucyBBIHdhc20tdXR4byBCaXRHb1BzYnQgaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVtcHR5V2FzbVBzYnQoXG4gIGNvaW5OYW1lOiBDb2luTmFtZSxcbiAgcm9vdFdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzLFxuICBvcHRpb25zPzogQ3JlYXRlRW1wdHlXYXNtUHNidE9wdGlvbnNcbik6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCB7XG4gIGlmIChpc1pjYXNoKGNvaW5OYW1lKSkge1xuICAgIC8vIEZvciBaY2FzaCwgdXNlIFpjYXNoQml0R29Qc2J0IHdoaWNoIHJlcXVpcmVzIGJsb2NrIGhlaWdodCB0byBkZXRlcm1pbmUgY29uc2Vuc3VzIGJyYW5jaCBJRFxuICAgIGNvbnN0IGJsb2NrSGVpZ2h0ID0gb3B0aW9ucz8uYmxvY2tIZWlnaHQgPz8gWkNBU0hfREVGQVVMVF9CTE9DS19IRUlHSFRTW2NvaW5OYW1lXTtcbiAgICByZXR1cm4gZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hCaXRHb1BzYnQuY3JlYXRlRW1wdHkoY29pbk5hbWUsIHJvb3RXYWxsZXRLZXlzLCB7XG4gICAgICBibG9ja0hlaWdodCxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuY3JlYXRlRW1wdHkoY29pbk5hbWUsIHJvb3RXYWxsZXRLZXlzKTtcbn1cblxuLyoqXG4gKiBBZGQgd2FsbGV0IGlucHV0cyBmcm9tIHVuc3BlbnRzIHRvIGEgd2FzbS11dHhvIEJpdEdvUHNidC5cbiAqIEhhbmRsZXMgdGFwcm9vdCBpbnB1dHMgYnkgc2V0dGluZyB0aGUgYXBwcm9wcmlhdGUgc2lnblBhdGguXG4gKlxuICogQHBhcmFtIHdhc21Qc2J0IC0gVGhlIHdhc20tdXR4byBCaXRHb1BzYnQgdG8gYWRkIGlucHV0cyB0b1xuICogQHBhcmFtIHVuc3BlbnRzIC0gVGhlIHdhbGxldCB1bnNwZW50cyB0byBhZGQgYXMgaW5wdXRzXG4gKiBAcGFyYW0gcm9vdFdhbGxldEtleXMgLSBUaGUgd2FsbGV0IGtleXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFdhbGxldElucHV0c1RvV2FzbVBzYnQoXG4gIHdhc21Qc2J0OiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQsXG4gIHVuc3BlbnRzOiBXYWxsZXRVbnNwZW50PGJpZ2ludD5bXSxcbiAgcm9vdFdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzXG4pOiB2b2lkIHtcbiAgdW5zcGVudHMuZm9yRWFjaCgodW5zcGVudCkgPT4ge1xuICAgIGNvbnN0IHsgdHhpZCwgdm91dCB9ID0gdXR4b2xpYi5iaXRnby5wYXJzZU91dHB1dElkKHVuc3BlbnQuaWQpO1xuICAgIGNvbnN0IHNpZ25QYXRoOiBmaXhlZFNjcmlwdFdhbGxldC5TaWduUGF0aCB8IHVuZGVmaW5lZCA9IGlzVGFwcm9vdENoYWluKHVuc3BlbnQuY2hhaW4pXG4gICAgICA/IHsgc2lnbmVyOiAndXNlcicsIGNvc2lnbmVyOiAnYmFja3VwJyB9XG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIC8vIHByZXZUeCBtYXkgYmUgYWRkZWQgZHluYW1pY2FsbHkgaW4gYmFja3VwS2V5UmVjb3ZlcnkgZm9yIG5vbi1zZWd3aXQgaW5wdXRzXG4gICAgY29uc3QgcHJldlR4ID0gKHVuc3BlbnQgYXMgV2FsbGV0VW5zcGVudDxiaWdpbnQ+ICYgeyBwcmV2VHg/OiBCdWZmZXIgfSkucHJldlR4O1xuXG4gICAgd2FzbVBzYnQuYWRkV2FsbGV0SW5wdXQoXG4gICAgICB7XG4gICAgICAgIHR4aWQsXG4gICAgICAgIHZvdXQsXG4gICAgICAgIHZhbHVlOiB1bnNwZW50LnZhbHVlLFxuICAgICAgICBwcmV2VHg6IHByZXZUeCxcbiAgICAgIH0sXG4gICAgICByb290V2FsbGV0S2V5cyxcbiAgICAgIHtcbiAgICAgICAgc2NyaXB0SWQ6IHsgY2hhaW46IHVuc3BlbnQuY2hhaW4sIGluZGV4OiB1bnNwZW50LmluZGV4IH0sXG4gICAgICAgIHNpZ25QYXRoLFxuICAgICAgfVxuICAgICk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEFkZCBhbiBvdXRwdXQgdG8gYSB3YXNtLXV0eG8gQml0R29Qc2J0LlxuICpcbiAqIEBwYXJhbSB3YXNtUHNidCAtIFRoZSB3YXNtLXV0eG8gQml0R29Qc2J0IHRvIGFkZCB0aGUgb3V0cHV0IHRvXG4gKiBAcGFyYW0gYWRkcmVzcyAtIFRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgb3V0cHV0IHZhbHVlIGluIHNhdG9zaGlzXG4gKiBAcGFyYW0gbmV0d29yayAtIFRoZSBuZXR3b3JrICh1c2VkIHRvIGNvbnZlcnQgYWRkcmVzcyB0byBzY3JpcHQpXG4gKiBAcmV0dXJucyBUaGUgb3V0cHV0IGluZGV4XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRPdXRwdXRUb1dhc21Qc2J0KFxuICB3YXNtUHNidDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LFxuICBhZGRyZXNzOiBzdHJpbmcsXG4gIHZhbHVlOiBiaWdpbnQsXG4gIGNvaW5OYW1lOiBDb2luTmFtZVxuKTogbnVtYmVyIHtcbiAgY29uc3Qgc2NyaXB0ID0gd2FzbUFkZHJlc3MudG9PdXRwdXRTY3JpcHRXaXRoQ29pbihhZGRyZXNzLCBjb2luTmFtZSk7XG4gIHJldHVybiB3YXNtUHNidC5hZGRPdXRwdXQoeyBzY3JpcHQsIHZhbHVlIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSB3YXNtLXV0eG8gQml0R29Qc2J0IHRvIGEgdXR4b2xpYiBVdHhvUHNidC5cbiAqXG4gKiBAcGFyYW0gd2FzbVBzYnQgLSBUaGUgd2FzbS11dHhvIEJpdEdvUHNidCB0byBjb252ZXJ0XG4gKiBAcGFyYW0gbmV0d29yayAtIFRoZSBuZXR3b3JrXG4gKiBAcmV0dXJucyBBIHV0eG9saWIgVXR4b1BzYnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvUHNidFRvVXR4b2xpYlBzYnQoXG4gIHdhc21Qc2J0OiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQgfCB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LFxuICBjb2luTmFtZTogQ29pbk5hbWVcbik6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQge1xuICBpZiAod2FzbVBzYnQgaW5zdGFuY2VvZiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQpIHtcbiAgICBjb25zdCBuZXR3b3JrID0gZ2V0TmV0d29ya0Zyb21Db2luTmFtZShjb2luTmFtZSk7XG4gICAgcmV0dXJuIHV0eG9saWIuYml0Z28uY3JlYXRlUHNidEZyb21CdWZmZXIoQnVmZmVyLmZyb20od2FzbVBzYnQuc2VyaWFsaXplKCkpLCBuZXR3b3JrKTtcbiAgfVxuICByZXR1cm4gd2FzbVBzYnQ7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgYmFja3VwIGtleSByZWNvdmVyeSBQU0JUIHVzaW5nIHdhc20tdXR4b1xuICovXG5mdW5jdGlvbiBjcmVhdGVCYWNrdXBLZXlSZWNvdmVyeVBzYnRXYXNtKFxuICBjb2luTmFtZTogQ29pbk5hbWUsXG4gIHJvb3RXYWxsZXRLZXlzOiBSb290V2FsbGV0S2V5cyxcbiAgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8YmlnaW50PltdLFxuICBvcHRpb25zOiBDcmVhdGVCYWNrdXBLZXlSZWNvdmVyeVBzYnRPcHRpb25zXG4pOiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQge1xuICBjb25zdCB7IGZlZVJhdGVTYXRWQiwgcmVjb3ZlcnlEZXN0aW5hdGlvbiwga2V5UmVjb3ZlcnlTZXJ2aWNlRmVlLCBrZXlSZWNvdmVyeVNlcnZpY2VGZWVBZGRyZXNzIH0gPSBvcHRpb25zO1xuXG4gIC8vIENyZWF0ZSBQU0JUIHdpdGggd2FzbS11dHhvIGFuZCBhZGQgd2FsbGV0IGlucHV0cyB1c2luZyBzaGFyZWQgdXRpbGl0aWVzXG4gIGNvbnN0IHdhc21Qc2J0ID0gY3JlYXRlRW1wdHlXYXNtUHNidChjb2luTmFtZSwgcm9vdFdhbGxldEtleXMsIHsgYmxvY2tIZWlnaHQ6IG9wdGlvbnMuYmxvY2tIZWlnaHQgfSk7XG4gIGFkZFdhbGxldElucHV0c1RvV2FzbVBzYnQod2FzbVBzYnQsIHVuc3BlbnRzLCByb290V2FsbGV0S2V5cyk7XG5cbiAgLy8gQ2FsY3VsYXRlIGRpbWVuc2lvbnMgdXNpbmcgd2FzbS11dHhvIERpbWVuc2lvbnNcbiAgbGV0IGRpbWVuc2lvbnMgPSBmaXhlZFNjcmlwdFdhbGxldC5EaW1lbnNpb25zLmZyb21Qc2J0KHdhc21Qc2J0KS5wbHVzKFxuICAgIGZpeGVkU2NyaXB0V2FsbGV0LkRpbWVuc2lvbnMuZnJvbU91dHB1dChyZWNvdmVyeURlc3RpbmF0aW9uLCBjb2luTmFtZSlcbiAgKTtcblxuICBpZiAoa2V5UmVjb3ZlcnlTZXJ2aWNlRmVlQWRkcmVzcykge1xuICAgIGRpbWVuc2lvbnMgPSBkaW1lbnNpb25zLnBsdXMoZml4ZWRTY3JpcHRXYWxsZXQuRGltZW5zaW9ucy5mcm9tT3V0cHV0KGtleVJlY292ZXJ5U2VydmljZUZlZUFkZHJlc3MsIGNvaW5OYW1lKSk7XG4gIH1cblxuICBjb25zdCBhcHByb3hpbWF0ZUZlZSA9IEJpZ0ludChkaW1lbnNpb25zLmdldFZTaXplKCkgKiBmZWVSYXRlU2F0VkIpO1xuICBjb25zdCB0b3RhbElucHV0QW1vdW50ID0gdXR4b2xpYi5iaXRnby51bnNwZW50U3VtKHVuc3BlbnRzLCAnYmlnaW50Jyk7XG4gIGNvbnN0IHJlY292ZXJ5QW1vdW50ID0gdG90YWxJbnB1dEFtb3VudCAtIGFwcHJveGltYXRlRmVlIC0ga2V5UmVjb3ZlcnlTZXJ2aWNlRmVlO1xuXG4gIGlmIChyZWNvdmVyeUFtb3VudCA8IEJpZ0ludCgwKSkge1xuICAgIHRocm93IG5ldyBJbnN1ZmZpY2llbnRGdW5kc0Vycm9yKHRvdGFsSW5wdXRBbW91bnQsIGFwcHJveGltYXRlRmVlLCBrZXlSZWNvdmVyeVNlcnZpY2VGZWUsIHJlY292ZXJ5QW1vdW50KTtcbiAgfVxuXG4gIC8vIEFkZCBvdXRwdXRzIHRvIHdhc20gUFNCVFxuICBhZGRPdXRwdXRUb1dhc21Qc2J0KHdhc21Qc2J0LCByZWNvdmVyeURlc3RpbmF0aW9uLCByZWNvdmVyeUFtb3VudCwgY29pbk5hbWUpO1xuXG4gIGlmIChrZXlSZWNvdmVyeVNlcnZpY2VGZWVBZGRyZXNzKSB7XG4gICAgYWRkT3V0cHV0VG9XYXNtUHNidCh3YXNtUHNidCwga2V5UmVjb3ZlcnlTZXJ2aWNlRmVlQWRkcmVzcywga2V5UmVjb3ZlcnlTZXJ2aWNlRmVlLCBjb2luTmFtZSk7XG4gIH1cblxuICAvLyBDb252ZXJ0IHRvIHV0eG9saWIgUFNCVCBmb3Igc2lnbmluZyBhbmQgcmV0dXJuXG4gIHJldHVybiB3YXNtUHNidDtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBiYWNrdXAga2V5IHJlY292ZXJ5IFBTQlQuXG4gKlxuICogQHBhcmFtIG5ldHdvcmsgLSBUaGUgbmV0d29yayBmb3IgdGhlIFBTQlRcbiAqIEBwYXJhbSByb290V2FsbGV0S2V5cyAtIFRoZSB3YWxsZXQga2V5c1xuICogQHBhcmFtIHVuc3BlbnRzIC0gVGhlIHVuc3BlbnRzIHRvIGluY2x1ZGUgaW4gdGhlIFBTQlRcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgY3JlYXRpbmcgdGhlIFBTQlRcbiAqIEBwYXJhbSBiYWNrZW5kIC0gV2hpY2ggYmFja2VuZCB0byB1c2UgZm9yIFBTQlQgY3JlYXRpb24gKGRlZmF1bHQ6ICd3YXNtLXV0eG8nKVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQmFja3VwS2V5UmVjb3ZlcnlQc2J0KFxuICBjb2luTmFtZTogQ29pbk5hbWUsXG4gIHJvb3RXYWxsZXRLZXlzOiBSb290V2FsbGV0S2V5cyxcbiAgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8YmlnaW50PltdLFxuICBvcHRpb25zOiBDcmVhdGVCYWNrdXBLZXlSZWNvdmVyeVBzYnRPcHRpb25zLFxuICBiYWNrZW5kOiBQc2J0QmFja2VuZCA9ICd3YXNtLXV0eG8nXG4pOiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0IHwgZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0IHtcbiAgaWYgKG9wdGlvbnMua2V5UmVjb3ZlcnlTZXJ2aWNlRmVlID4gMCAmJiAhb3B0aW9ucy5rZXlSZWNvdmVyeVNlcnZpY2VGZWVBZGRyZXNzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdrZXlSZWNvdmVyeVNlcnZpY2VGZWVBZGRyZXNzIGlzIHJlcXVpcmVkIHdoZW4ga2V5UmVjb3ZlcnlTZXJ2aWNlRmVlIGlzIHByb3ZpZGVkJyk7XG4gIH1cblxuICBpZiAoYmFja2VuZCA9PT0gJ3dhc20tdXR4bycpIHtcbiAgICByZXR1cm4gY3JlYXRlQmFja3VwS2V5UmVjb3ZlcnlQc2J0V2FzbShjb2luTmFtZSwgcm9vdFdhbGxldEtleXMsIHVuc3BlbnRzLCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY3JlYXRlQmFja3VwS2V5UmVjb3ZlcnlQc2J0VXR4b2xpYihjb2luTmFtZSwgcm9vdFdhbGxldEtleXMsIHVuc3BlbnRzLCBvcHRpb25zKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVjb3ZlcnlBbW91bnQoXG4gIHBzYnQ6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQgfCBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQsXG4gIHdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzLFxuICBhZGRyZXNzOiBzdHJpbmdcbik6IGJpZ2ludCB7XG4gIGlmIChwc2J0IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidCkge1xuICAgIGNvbnN0IHJlY292ZXJ5T3V0cHV0U2NyaXB0ID0gdXR4b2xpYi5hZGRyZXNzLnRvT3V0cHV0U2NyaXB0KGFkZHJlc3MsIHBzYnQubmV0d29yayk7XG4gICAgY29uc3Qgb3V0cHV0ID0gcHNidC50eE91dHB1dHMuZmluZCgobykgPT4gby5zY3JpcHQuZXF1YWxzKHJlY292ZXJ5T3V0cHV0U2NyaXB0KSk7XG4gICAgaWYgKCFvdXRwdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUmVjb3ZlcnkgZGVzdGluYXRpb24gb3V0cHV0IG5vdCBmb3VuZCBpbiBQU0JUOiAke2FkZHJlc3N9YCk7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQudmFsdWU7XG4gIH1cbiAgaWYgKHBzYnQgaW5zdGFuY2VvZiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQpIHtcbiAgICBjb25zdCBwYXJzZWRPdXRwdXRzID0gcHNidC5wYXJzZU91dHB1dHNXaXRoV2FsbGV0S2V5cyh3YWxsZXRLZXlzKTtcbiAgICBjb25zdCByZWNvdmVyeU91dHB1dCA9IHBhcnNlZE91dHB1dHMuZmluZCgobykgPT4gby5hZGRyZXNzID09PSBhZGRyZXNzKTtcbiAgICBpZiAoIXJlY292ZXJ5T3V0cHV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlY292ZXJ5IGRlc3RpbmF0aW9uIG91dHB1dCBub3QgZm91bmQgaW4gUFNCVDogJHthZGRyZXNzfWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVjb3ZlcnlPdXRwdXQudmFsdWU7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFBTQlQgdHlwZScpO1xufVxuIl19
@@ -0,0 +1,4 @@
1
+ export declare function toTNumber(value: number | bigint, amountType: 'number'): number;
2
+ export declare function toTNumber(value: number | bigint, amountType: 'bigint'): bigint;
3
+ export declare function toTNumber(value: number | bigint, amountType: 'number' | 'bigint'): number | bigint;
4
+ //# sourceMappingURL=tnumber.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tnumber.d.ts","sourceRoot":"","sources":["../../../src/tnumber.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,UAAU,EAAE,QAAQ,GAAG,MAAM,CAAC;AAChF,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,UAAU,EAAE,QAAQ,GAAG,MAAM,CAAC;AAChF,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,UAAU,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toTNumber = toTNumber;
4
+ function toTNumber(value, amountType) {
5
+ switch (amountType) {
6
+ case 'number':
7
+ return Number(value);
8
+ case 'bigint':
9
+ return BigInt(value);
10
+ }
11
+ }
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG51bWJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90bnVtYmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0EsOEJBT0M7QUFQRCxTQUFnQixTQUFTLENBQUMsS0FBc0IsRUFBRSxVQUErQjtJQUMvRSxRQUFRLFVBQVUsRUFBRSxDQUFDO1FBQ25CLEtBQUssUUFBUTtZQUNYLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLEtBQUssUUFBUTtZQUNYLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHRvVE51bWJlcih2YWx1ZTogbnVtYmVyIHwgYmlnaW50LCBhbW91bnRUeXBlOiAnbnVtYmVyJyk6IG51bWJlcjtcbmV4cG9ydCBmdW5jdGlvbiB0b1ROdW1iZXIodmFsdWU6IG51bWJlciB8IGJpZ2ludCwgYW1vdW50VHlwZTogJ2JpZ2ludCcpOiBiaWdpbnQ7XG5leHBvcnQgZnVuY3Rpb24gdG9UTnVtYmVyKHZhbHVlOiBudW1iZXIgfCBiaWdpbnQsIGFtb3VudFR5cGU6ICdudW1iZXInIHwgJ2JpZ2ludCcpOiBudW1iZXIgfCBiaWdpbnQ7XG5leHBvcnQgZnVuY3Rpb24gdG9UTnVtYmVyKHZhbHVlOiBudW1iZXIgfCBiaWdpbnQsIGFtb3VudFR5cGU6ICdudW1iZXInIHwgJ2JpZ2ludCcpOiBudW1iZXIgfCBiaWdpbnQge1xuICBzd2l0Y2ggKGFtb3VudFR5cGUpIHtcbiAgICBjYXNlICdudW1iZXInOlxuICAgICAgcmV0dXJuIE51bWJlcih2YWx1ZSk7XG4gICAgY2FzZSAnYmlnaW50JzpcbiAgICAgIHJldHVybiBCaWdJbnQodmFsdWUpO1xuICB9XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"bip322.d.ts","sourceRoot":"","sources":["../../../../src/transaction/bip322.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAE3B,QAAA,MAAM,iBAAiB;;;;;EAWrB,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEnE,QAAA,MAAM,0BAA0B;;;;;;;;EAG9B,CAAC;AAEH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAErF,wBAAgB,mCAAmC,CAAC,OAAO,EAAE,0BAA0B,GAAG,MAAM,CAE/F;AAED,wBAAgB,qCAAqC,CAAC,GAAG,EAAE,MAAM,GAAG,0BAA0B,CAK7F;AAED,wBAAgB,yCAAyC,CACvD,OAAO,EAAE,0BAA0B,EACnC,QAAQ,EAAE,MAAM,GACf,OAAO,CAwBT;AAED,wBAAgB,0DAA0D,CACxE,qBAAqB,EAAE,0BAA0B,EAAE,EACnD,QAAQ,EAAE,MAAM,GACf;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CA0BxC"}
1
+ {"version":3,"file":"bip322.d.ts","sourceRoot":"","sources":["../../../../src/transaction/bip322.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAE3B,QAAA,MAAM,iBAAiB;;;;;EAWrB,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEnE,QAAA,MAAM,0BAA0B;;;;;;;;EAG9B,CAAC;AAEH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,0BAA0B,CAAC,CAAC;AASrF,wBAAgB,mCAAmC,CAAC,OAAO,EAAE,0BAA0B,GAAG,MAAM,CAE/F;AAED,wBAAgB,qCAAqC,CAAC,GAAG,EAAE,MAAM,GAAG,0BAA0B,CAK7F;AAED,wBAAgB,yCAAyC,CACvD,OAAO,EAAE,0BAA0B,EACnC,QAAQ,EAAE,MAAM,GACf,OAAO,CAmCT;AAED,wBAAgB,0DAA0D,CACxE,qBAAqB,EAAE,0BAA0B,EAAE,EACnD,QAAQ,EAAE,MAAM,GACf;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CA0BxC"}
@@ -38,8 +38,8 @@ exports.deserializeBIP322BroadcastableMessage = deserializeBIP322BroadcastableMe
38
38
  exports.verifyTransactionFromBroadcastableMessage = verifyTransactionFromBroadcastableMessage;
39
39
  exports.generateBIP322MessageListAndVerifyFromMessageBroadcastable = generateBIP322MessageListAndVerifyFromMessageBroadcastable;
40
40
  const sdk_core_1 = require("@bitgo/sdk-core");
41
- const utxo_core_1 = require("@bitgo/utxo-core");
42
41
  const utxo_lib_1 = require("@bitgo/utxo-lib");
42
+ const wasm_utxo_1 = require("@bitgo/wasm-utxo");
43
43
  const t = __importStar(require("io-ts"));
44
44
  const BIP322MessageInfo = t.type({
45
45
  address: t.string,
@@ -57,6 +57,12 @@ const BIP322MessageBroadcastable = t.type({
57
57
  txHex: t.string,
58
58
  messageInfo: t.array(BIP322MessageInfo),
59
59
  });
60
+ function assertPubkeyTriple(pubkeys) {
61
+ if (pubkeys.length !== 3) {
62
+ throw new Error(`Expected exactly 3 pubkeys, got ${pubkeys.length}`);
63
+ }
64
+ return pubkeys;
65
+ }
60
66
  function serializeBIP322BroadcastableMessage(message) {
61
67
  return Buffer.from(JSON.stringify(message), 'utf8').toString('hex');
62
68
  }
@@ -67,17 +73,20 @@ function deserializeBIP322BroadcastableMessage(hex) {
67
73
  });
68
74
  }
69
75
  function verifyTransactionFromBroadcastableMessage(message, coinName) {
70
- let network = utxo_lib_1.networks.bitcoin;
71
- if (coinName === 'tbtc4') {
72
- network = utxo_lib_1.networks.bitcoinTestnet4;
73
- }
74
- else if (coinName !== 'btc') {
76
+ if (coinName !== 'btc' && coinName !== 'tbtc4') {
75
77
  throw new Error('Only tbtc4 or btc coinNames are supported.');
76
78
  }
79
+ const network = coinName;
77
80
  if (utxo_lib_1.bitgo.isPsbt(message.txHex)) {
78
- const psbt = utxo_lib_1.bitgo.createPsbtFromBuffer(Buffer.from(message.txHex, 'hex'), network);
81
+ const psbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(Buffer.from(message.txHex, 'hex'), network);
79
82
  try {
80
- utxo_core_1.bip322.assertBip322PsbtProof(psbt, message.messageInfo);
83
+ message.messageInfo.forEach((info, inputIndex) => {
84
+ wasm_utxo_1.bip322.verifyBip322PsbtInputWithPubkeys(psbt, inputIndex, {
85
+ message: info.message,
86
+ pubkeys: assertPubkeyTriple(info.pubkeys),
87
+ scriptType: info.scriptType,
88
+ });
89
+ });
81
90
  return true;
82
91
  }
83
92
  catch (error) {
@@ -85,9 +94,15 @@ function verifyTransactionFromBroadcastableMessage(message, coinName) {
85
94
  }
86
95
  }
87
96
  else {
88
- const tx = utxo_lib_1.bitgo.createTransactionFromBuffer(Buffer.from(message.txHex, 'hex'), network, { amountType: 'bigint' });
97
+ const tx = wasm_utxo_1.Transaction.fromBytes(Buffer.from(message.txHex, 'hex'));
89
98
  try {
90
- utxo_core_1.bip322.assertBip322TxProof(tx, message.messageInfo);
99
+ message.messageInfo.forEach((info, inputIndex) => {
100
+ wasm_utxo_1.bip322.verifyBip322TxInputWithPubkeys(tx, inputIndex, {
101
+ message: info.message,
102
+ pubkeys: assertPubkeyTriple(info.pubkeys),
103
+ scriptType: info.scriptType,
104
+ });
105
+ });
91
106
  return true;
92
107
  }
93
108
  catch (error) {
@@ -122,4 +137,4 @@ function generateBIP322MessageListAndVerifyFromMessageBroadcastable(messageBroad
122
137
  message,
123
138
  }));
124
139
  }
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlwMzIyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2JpcDMyMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTJCQSxrRkFFQztBQUVELHNGQUtDO0FBRUQsOEZBMkJDO0FBRUQsZ0lBNkJDO0FBaEdELDhDQUErQztBQUMvQyxnREFBMEM7QUFDMUMsOENBQTJEO0FBQzNELHlDQUEyQjtBQUUzQixNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDL0IsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNO0lBQ2pCLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTTtJQUNqQixPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO0tBQ3hCLENBQUM7Q0FDSCxDQUFDLENBQUM7QUFJSCxNQUFNLDBCQUEwQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDeEMsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNO0lBQ2YsV0FBVyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUM7Q0FDeEMsQ0FBQyxDQUFDO0FBSUgsU0FBZ0IsbUNBQW1DLENBQUMsT0FBbUM7SUFDckYsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxDQUFD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QUFLLENBQUMscUJBQXFCLE9BQU8seUJBQXlCLENBQUMsQ0FBQztvQkFDekUsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQy9CLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsS0FBSyx1Q0FBdUMsQ0FBQyxDQUFDO1FBQ3pGLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNuRSxPQUFPO1FBQ1AsT0FBTztLQUNSLENBQUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlY29kZU9yRWxzZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBiaXAzMjIgfSBmcm9tICdAYml0Z28vdXR4by1jb3JlJztcbmltcG9ydCB7IGJpdGdvLCBuZXR3b3JrcywgTmV0d29yayB9IGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgKiBhcyB0IGZyb20gJ2lvLXRzJztcblxuY29uc3QgQklQMzIyTWVzc2FnZUluZm8gPSB0LnR5cGUoe1xuICBhZGRyZXNzOiB0LnN0cmluZyxcbiAgbWVzc2FnZTogdC5zdHJpbmcsXG4gIHB1YmtleXM6IHQuYXJyYXkodC5zdHJpbmcpLFxuICBzY3JpcHRUeXBlOiB0LnVuaW9uKFtcbiAgICB0LmxpdGVyYWwoJ3Ayc2gnKSxcbiAgICB0LmxpdGVyYWwoJ3Ayc2hQMndzaCcpLFxuICAgIHQubGl0ZXJhbCgncDJ3c2gnKSxcbiAgICB0LmxpdGVyYWwoJ3AydHInKSxcbiAgICB0LmxpdGVyYWwoJ3AydHJNdXNpZzInKSxcbiAgXSksXG59KTtcblxuZXhwb3J0IHR5cGUgQklQMzIyTWVzc2FnZUluZm8gPSB0LlR5cGVPZjx0eXBlb2YgQklQMzIyTWVzc2FnZUluZm8+O1xuXG5jb25zdCBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHQudHlwZSh7XG4gIHR4SGV4OiB0LnN0cmluZyxcbiAgbWVzc2FnZUluZm86IHQuYXJyYXkoQklQMzIyTWVzc2FnZUluZm8pLFxufSk7XG5cbmV4cG9ydCB0eXBlIEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlID0gdC5UeXBlT2Y8dHlwZW9mIEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlPjtcblxuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUJJUDMyMkJyb2FkY2FzdGFibGVNZXNzYWdlKG1lc3NhZ2U6IEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlKTogc3RyaW5nIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCAndXRmOCcpLnRvU3RyaW5nKCdoZXgnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlc2VyaWFsaXplQklQMzIyQnJvYWRjYXN0YWJsZU1lc3NhZ2UoaGV4OiBzdHJpbmcpOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSB7XG4gIGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKEJ1ZmZlci5mcm9tKGhleCwgJ2hleCcpLnRvU3RyaW5nKCd1dGY4JykpO1xuICByZXR1cm4gZGVjb2RlT3JFbHNlKEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlLm5hbWUsIEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlLCBqc29uLCAoZXJyb3IpID0+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBkZWNvZGUgJHtCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZS5uYW1lfTogJHtlcnJvcn1gKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlUcmFuc2FjdGlvbkZyb21Ccm9hZGNhc3RhYmxlTWVzc2FnZShcbiAgbWVzc2FnZTogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGUsXG4gIGNvaW5OYW1lOiBzdHJpbmdcbik6IGJvb2xlYW4ge1xuICBsZXQgbmV0d29yazogTmV0d29yayA9IG5ldHdvcmtzLmJpdGNvaW47XG4gIGlmIChjb2luTmFtZSA9PT0gJ3RidGM0Jykge1xuICAgIG5ldHdvcmsgPSBuZXR3b3Jrcy5iaXRjb2luVGVzdG5ldDQ7XG4gIH0gZWxzZSBpZiAoY29pbk5hbWUgIT09ICdidGMnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IHRidGM0IG9yIGJ0YyBjb2luTmFtZXMgYXJlIHN1cHBvcnRlZC4nKTtcbiAgfVxuICBpZiAoYml0Z28uaXNQc2J0KG1lc3NhZ2UudHhIZXgpKSB7XG4gICAgY29uc3QgcHNidCA9IGJpdGdvLmNyZWF0ZVBzYnRGcm9tQnVmZmVyKEJ1ZmZlci5mcm9tKG1lc3NhZ2UudHhIZXgsICdoZXgnKSwgbmV0d29yayk7XG4gICAgdHJ5IHtcbiAgICAgIGJpcDMyMi5hc3NlcnRCaXAzMjJQc2J0UHJvb2YocHNidCwgbWVzc2FnZS5tZXNzYWdlSW5mbyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCB0eCA9IGJpdGdvLmNyZWF0ZVRyYW5zYWN0aW9uRnJvbUJ1ZmZlcihCdWZmZXIuZnJvbShtZXNzYWdlLnR4SGV4LCAnaGV4JyksIG5ldHdvcmssIHsgYW1vdW50VHlwZTogJ2JpZ2ludCcgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGJpcDMyMi5hc3NlcnRCaXAzMjJUeFByb29mKHR4LCBtZXNzYWdlLm1lc3NhZ2VJbmZvKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUJJUDMyMk1lc3NhZ2VMaXN0QW5kVmVyaWZ5RnJvbU1lc3NhZ2VCcm9hZGNhc3RhYmxlKFxuICBtZXNzYWdlQnJvYWRjYXN0YWJsZXM6IEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlW10sXG4gIGNvaW5OYW1lOiBzdHJpbmdcbik6IHsgYWRkcmVzczogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmcgfVtdIHtcbiAgLy8gTWFwIGZyb20gdGhlIGFkZHJlc3MgdG8gdGhlIG1lc3NhZ2UuIElmIHRoZXJlIGFyZSBkdXBsaWNhdGVzIG9mIHRoZSBhZGRyZXNzLCBtYWtlIHN1cmUgdGhhdCB0aGVcbiAgLy8gbWVzc2FnZSBpcyB0aGUgc2FtZS4gSWYgdGhlcmUgYXJlIGR1cGxpY2F0ZSBhZGRyZXNzZXMgYW5kIHRoZSBtZXNzYWdlcyBhcmUgbm90IHRoZSBzYW1lLCB0aHJvdyBhbiBlcnJvci5cbiAgY29uc3QgYWRkcmVzc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgbWVzc2FnZUJyb2FkY2FzdGFibGVzLmZvckVhY2goKG1lc3NhZ2UsIGluZGV4KSA9PiB7XG4gICAgaWYgKHZlcmlmeVRyYW5zYWN0aW9uRnJvbUJyb2FkY2FzdGFibGVNZXNzYWdlKG1lc3NhZ2UsIGNvaW5OYW1lKSkge1xuICAgICAgbWVzc2FnZS5tZXNzYWdlSW5mby5mb3JFYWNoKChpbmZvKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgYWRkcmVzcywgbWVzc2FnZTogbXNnIH0gPSBpbmZvO1xuICAgICAgICBpZiAoYWRkcmVzc01hcC5oYXMoYWRkcmVzcykpIHtcbiAgICAgICAgICBpZiAoYWRkcmVzc01hcC5nZXQoYWRkcmVzcykgIT09IG1zZykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEdXBsaWNhdGUgYWRkcmVzcyAke2FkZHJlc3N9IGhhcyBkaWZmZXJlbnQgbWVzc2FnZXNgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkcmVzc01hcC5zZXQoYWRkcmVzcywgbXNnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWVzc2FnZSBCcm9hZGNhc3RhYmxlICR7aW5kZXh9IGRpZCBub3QgaGF2ZSBhIHN1Y2Nlc3NmdWwgdmFsaWRhdGlvbmApO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIEFycmF5LmZyb20oYWRkcmVzc01hcC5lbnRyaWVzKCkpLm1hcCgoW2FkZHJlc3MsIG1lc3NhZ2VdKSA9PiAoe1xuICAgIGFkZHJlc3MsXG4gICAgbWVzc2FnZSxcbiAgfSkpO1xufVxuIl19
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlwMzIyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2JpcDMyMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtDQSxrRkFFQztBQUVELHNGQUtDO0FBRUQsOEZBc0NDO0FBRUQsZ0lBNkJDO0FBbEhELDhDQUErQztBQUMvQyw4Q0FBd0M7QUFDeEMsZ0RBQXNHO0FBQ3RHLHlDQUEyQjtBQUUzQixNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDL0IsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNO0lBQ2pCLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTTtJQUNqQixPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO0tBQ3hCLENBQUM7Q0FDSCxDQUFDLENBQUM7QUFJSCxNQUFNLDBCQUEwQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDeEMsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNO0lBQ2YsV0FBVyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUM7Q0FDeEMsQ0FBQyxDQUFDO0FBSUgsU0FBUyxrQkFBa0IsQ0FBQyxPQUFpQjtJQUMzQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FB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TixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVjb2RlT3JFbHNlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IGJpdGdvIH0gZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IGJpcDMyMiwgZml4ZWRTY3JpcHRXYWxsZXQsIFRyYW5zYWN0aW9uLCB0eXBlIENvaW5OYW1lLCB0eXBlIFRyaXBsZSB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuaW1wb3J0ICogYXMgdCBmcm9tICdpby10cyc7XG5cbmNvbnN0IEJJUDMyMk1lc3NhZ2VJbmZvID0gdC50eXBlKHtcbiAgYWRkcmVzczogdC5zdHJpbmcsXG4gIG1lc3NhZ2U6IHQuc3RyaW5nLFxuICBwdWJrZXlzOiB0LmFycmF5KHQuc3RyaW5nKSxcbiAgc2NyaXB0VHlwZTogdC51bmlvbihbXG4gICAgdC5saXRlcmFsKCdwMnNoJyksXG4gICAgdC5saXRlcmFsKCdwMnNoUDJ3c2gnKSxcbiAgICB0LmxpdGVyYWwoJ3Ayd3NoJyksXG4gICAgdC5saXRlcmFsKCdwMnRyJyksXG4gICAgdC5saXRlcmFsKCdwMnRyTXVzaWcyJyksXG4gIF0pLFxufSk7XG5cbmV4cG9ydCB0eXBlIEJJUDMyMk1lc3NhZ2VJbmZvID0gdC5UeXBlT2Y8dHlwZW9mIEJJUDMyMk1lc3NhZ2VJbmZvPjtcblxuY29uc3QgQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGUgPSB0LnR5cGUoe1xuICB0eEhleDogdC5zdHJpbmcsXG4gIG1lc3NhZ2VJbmZvOiB0LmFycmF5KEJJUDMyMk1lc3NhZ2VJbmZvKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHQuVHlwZU9mPHR5cGVvZiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZT47XG5cbmZ1bmN0aW9uIGFzc2VydFB1YmtleVRyaXBsZShwdWJrZXlzOiBzdHJpbmdbXSk6IFRyaXBsZTxzdHJpbmc+IHtcbiAgaWYgKHB1YmtleXMubGVuZ3RoICE9PSAzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IDMgcHVia2V5cywgZ290ICR7cHVia2V5cy5sZW5ndGh9YCk7XG4gIH1cbiAgcmV0dXJuIHB1YmtleXMgYXMgVHJpcGxlPHN0cmluZz47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZShtZXNzYWdlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSk6IHN0cmluZyB7XG4gIHJldHVybiBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgJ3V0ZjgnKS50b1N0cmluZygnaGV4Jyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXNlcmlhbGl6ZUJJUDMyMkJyb2FkY2FzdGFibGVNZXNzYWdlKGhleDogc3RyaW5nKTogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGUge1xuICBjb25zdCBqc29uID0gSlNPTi5wYXJzZShCdWZmZXIuZnJvbShoZXgsICdoZXgnKS50b1N0cmluZygndXRmOCcpKTtcbiAgcmV0dXJuIGRlY29kZU9yRWxzZShCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZS5uYW1lLCBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSwganNvbiwgKGVycm9yKSA9PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZGVjb2RlICR7QklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGUubmFtZX06ICR7ZXJyb3J9YCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5VHJhbnNhY3Rpb25Gcm9tQnJvYWRjYXN0YWJsZU1lc3NhZ2UoXG4gIG1lc3NhZ2U6IEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlLFxuICBjb2luTmFtZTogc3RyaW5nXG4pOiBib29sZWFuIHtcbiAgaWYgKGNvaW5OYW1lICE9PSAnYnRjJyAmJiBjb2luTmFtZSAhPT0gJ3RidGM0Jykge1xuICAgIHRocm93IG5ldyBFcnJvcignT25seSB0YnRjNCBvciBidGMgY29pbk5hbWVzIGFyZSBzdXBwb3J0ZWQuJyk7XG4gIH1cbiAgY29uc3QgbmV0d29yayA9IGNvaW5OYW1lIGFzIENvaW5OYW1lO1xuXG4gIGlmIChiaXRnby5pc1BzYnQobWVzc2FnZS50eEhleCkpIHtcbiAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmZyb21CeXRlcyhCdWZmZXIuZnJvbShtZXNzYWdlLnR4SGV4LCAnaGV4JyksIG5ldHdvcmspO1xuICAgIHRyeSB7XG4gICAgICBtZXNzYWdlLm1lc3NhZ2VJbmZvLmZvckVhY2goKGluZm8sIGlucHV0SW5kZXgpID0+IHtcbiAgICAgICAgYmlwMzIyLnZlcmlmeUJpcDMyMlBzYnRJbnB1dFdpdGhQdWJrZXlzKHBzYnQsIGlucHV0SW5kZXgsIHtcbiAgICAgICAgICBtZXNzYWdlOiBpbmZvLm1lc3NhZ2UsXG4gICAgICAgICAgcHVia2V5czogYXNzZXJ0UHVia2V5VHJpcGxlKGluZm8ucHVia2V5cyksXG4gICAgICAgICAgc2NyaXB0VHlwZTogaW5mby5zY3JpcHRUeXBlLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdHggPSBUcmFuc2FjdGlvbi5mcm9tQnl0ZXMoQnVmZmVyLmZyb20obWVzc2FnZS50eEhleCwgJ2hleCcpKTtcbiAgICB0cnkge1xuICAgICAgbWVzc2FnZS5tZXNzYWdlSW5mby5mb3JFYWNoKChpbmZvLCBpbnB1dEluZGV4KSA9PiB7XG4gICAgICAgIGJpcDMyMi52ZXJpZnlCaXAzMjJUeElucHV0V2l0aFB1YmtleXModHgsIGlucHV0SW5kZXgsIHtcbiAgICAgICAgICBtZXNzYWdlOiBpbmZvLm1lc3NhZ2UsXG4gICAgICAgICAgcHVia2V5czogYXNzZXJ0UHVia2V5VHJpcGxlKGluZm8ucHVia2V5cyksXG4gICAgICAgICAgc2NyaXB0VHlwZTogaW5mby5zY3JpcHRUeXBlLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQklQMzIyTWVzc2FnZUxpc3RBbmRWZXJpZnlGcm9tTWVzc2FnZUJyb2FkY2FzdGFibGUoXG4gIG1lc3NhZ2VCcm9hZGNhc3RhYmxlczogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGVbXSxcbiAgY29pbk5hbWU6IHN0cmluZ1xuKTogeyBhZGRyZXNzOiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZyB9W10ge1xuICAvLyBNYXAgZnJvbSB0aGUgYWRkcmVzcyB0byB0aGUgbWVzc2FnZS4gSWYgdGhlcmUgYXJlIGR1cGxpY2F0ZXMgb2YgdGhlIGFkZHJlc3MsIG1ha2Ugc3VyZSB0aGF0IHRoZVxuICAvLyBtZXNzYWdlIGlzIHRoZSBzYW1lLiBJZiB0aGVyZSBhcmUgZHVwbGljYXRlIGFkZHJlc3NlcyBhbmQgdGhlIG1lc3NhZ2VzIGFyZSBub3QgdGhlIHNhbWUsIHRocm93IGFuIGVycm9yLlxuICBjb25zdCBhZGRyZXNzTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblxuICBtZXNzYWdlQnJvYWRjYXN0YWJsZXMuZm9yRWFjaCgobWVzc2FnZSwgaW5kZXgpID0+IHtcbiAgICBpZiAodmVyaWZ5VHJhbnNhY3Rpb25Gcm9tQnJvYWRjYXN0YWJsZU1lc3NhZ2UobWVzc2FnZSwgY29pbk5hbWUpKSB7XG4gICAgICBtZXNzYWdlLm1lc3NhZ2VJbmZvLmZvckVhY2goKGluZm8pID0+IHtcbiAgICAgICAgY29uc3QgeyBhZGRyZXNzLCBtZXNzYWdlOiBtc2cgfSA9IGluZm87XG4gICAgICAgIGlmIChhZGRyZXNzTWFwLmhhcyhhZGRyZXNzKSkge1xuICAgICAgICAgIGlmIChhZGRyZXNzTWFwLmdldChhZGRyZXNzKSAhPT0gbXNnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZSBhZGRyZXNzICR7YWRkcmVzc30gaGFzIGRpZmZlcmVudCBtZXNzYWdlc2ApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRyZXNzTWFwLnNldChhZGRyZXNzLCBtc2cpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNZXNzYWdlIEJyb2FkY2FzdGFibGUgJHtpbmRleH0gZGlkIG5vdCBoYXZlIGEgc3VjY2Vzc2Z1bCB2YWxpZGF0aW9uYCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gQXJyYXkuZnJvbShhZGRyZXNzTWFwLmVudHJpZXMoKSkubWFwKChbYWRkcmVzcywgbWVzc2FnZV0pID0+ICh7XG4gICAgYWRkcmVzcyxcbiAgICBtZXNzYWdlLFxuICB9KSk7XG59XG4iXX0=
@@ -1,11 +1,12 @@
1
1
  import * as utxolib from '@bitgo/utxo-lib';
2
2
  import { fixedScriptWallet } from '@bitgo/wasm-utxo';
3
+ import { UtxoCoinName } from '../names';
3
4
  import { SdkBackend } from './types';
4
5
  type BufferEncoding = 'hex' | 'base64';
5
6
  export declare function stringToBufferTryFormats(input: string, formats?: BufferEncoding[]): Buffer;
6
- export declare function decodePsbtWith(psbt: string | Buffer, network: utxolib.Network, backend: 'utxolib'): utxolib.bitgo.UtxoPsbt;
7
- export declare function decodePsbtWith(psbt: string | Buffer, network: utxolib.Network, backend: 'wasm-utxo'): fixedScriptWallet.BitGoPsbt;
8
- export declare function decodePsbtWith(psbt: string | Buffer, network: utxolib.Network, backend: SdkBackend): utxolib.bitgo.UtxoPsbt | fixedScriptWallet.BitGoPsbt;
7
+ export declare function decodePsbtWith(psbt: string | Buffer, coinName: UtxoCoinName, backend: 'utxolib'): utxolib.bitgo.UtxoPsbt;
8
+ export declare function decodePsbtWith(psbt: string | Buffer, coinName: UtxoCoinName, backend: 'wasm-utxo'): fixedScriptWallet.BitGoPsbt;
9
+ export declare function decodePsbtWith(psbt: string | Buffer, coinName: UtxoCoinName, backend: SdkBackend): utxolib.bitgo.UtxoPsbt | fixedScriptWallet.BitGoPsbt;
9
10
  export declare function encodeTransaction(transaction: utxolib.bitgo.UtxoTransaction<bigint | number> | utxolib.bitgo.UtxoPsbt | fixedScriptWallet.BitGoPsbt): Buffer;
10
11
  export {};
11
12
  //# sourceMappingURL=decode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../../../../src/transaction/decode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAiB,MAAM,kBAAkB,CAAC;AAEpE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,KAAK,cAAc,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEvC,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,cAAc,EAAsB,GAAG,MAAM,CAa7G;AAUD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,GAAG,MAAM,EACrB,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,OAAO,EAAE,SAAS,GACjB,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;AAC1B,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,GAAG,MAAM,EACrB,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,OAAO,EAAE,WAAW,GACnB,iBAAiB,CAAC,SAAS,CAAC;AAC/B,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,GAAG,MAAM,EACrB,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,iBAAiB,CAAC,SAAS,CAAC;AAgBxD,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,iBAAiB,CAAC,SAAS,GACjH,MAAM,CAQR"}
1
+ {"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../../../../src/transaction/decode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAiB,MAAM,kBAAkB,CAAC;AAEpE,OAAO,EAA0B,YAAY,EAAE,MAAM,UAAU,CAAC;AAEhE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,KAAK,cAAc,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEvC,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,cAAc,EAAsB,GAAG,MAAM,CAa7G;AAWD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,GAAG,MAAM,EACrB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,SAAS,GACjB,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;AAC1B,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,GAAG,MAAM,EACrB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,WAAW,GACnB,iBAAiB,CAAC,SAAS,CAAC;AAC/B,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,GAAG,MAAM,EACrB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,iBAAiB,CAAC,SAAS,CAAC;AAiBxD,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,iBAAiB,CAAC,SAAS,GACjH,MAAM,CAQR"}
@@ -38,6 +38,7 @@ exports.decodePsbtWith = decodePsbtWith;
38
38
  exports.encodeTransaction = encodeTransaction;
39
39
  const utxolib = __importStar(require("@bitgo/utxo-lib"));
40
40
  const wasm_utxo_1 = require("@bitgo/wasm-utxo");
41
+ const names_1 = require("../names");
41
42
  function stringToBufferTryFormats(input, formats = ['hex', 'base64']) {
42
43
  for (const format of formats) {
43
44
  const buffer = Buffer.from(input, format);
@@ -49,22 +50,24 @@ function stringToBufferTryFormats(input, formats = ['hex', 'base64']) {
49
50
  }
50
51
  throw new Error('input must be a valid hex or base64 string');
51
52
  }
52
- function toNetworkName(network) {
53
+ function toNetworkName(coinName) {
54
+ const network = (0, names_1.getNetworkFromCoinName)(coinName);
53
55
  const networkName = utxolib.getNetworkName(network);
54
56
  if (!networkName) {
55
- throw new Error(`Invalid network: ${network}`);
57
+ throw new Error(`Invalid coinName: ${coinName}`);
56
58
  }
57
59
  return networkName;
58
60
  }
59
- function decodePsbtWith(psbt, network, backend) {
61
+ function decodePsbtWith(psbt, coinName, backend) {
60
62
  if (typeof psbt === 'string') {
61
63
  psbt = Buffer.from(psbt, 'hex');
62
64
  }
63
65
  if (backend === 'utxolib') {
66
+ const network = (0, names_1.getNetworkFromCoinName)(coinName);
64
67
  return utxolib.bitgo.createPsbtFromBuffer(psbt, network);
65
68
  }
66
69
  else {
67
- return wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(psbt, toNetworkName(network));
70
+ return wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(psbt, toNetworkName(coinName));
68
71
  }
69
72
  }
70
73
  function encodeTransaction(transaction) {
@@ -78,4 +81,4 @@ function encodeTransaction(transaction) {
78
81
  return Buffer.from(transaction.serialize());
79
82
  }
80
83
  }
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2RlY29kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU9BLDREQWFDO0FBeUJELHdDQWFDO0FBRUQsOENBVUM7QUF0RUQseURBQTJDO0FBQzNDLGdEQUFvRTtBQU1wRSxTQUFnQix3QkFBd0IsQ0FBQyxLQUFhLEVBQUUsVUFBNEIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDO0lBQ25HLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7UUFDN0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUMsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQyxJQUNFLENBQUMsTUFBTSxLQUFLLFFBQVEsSUFBSSxjQUFjLEtBQUssS0FBSyxDQUFDO1lBQ2pELENBQUMsTUFBTSxLQUFLLEtBQUssSUFBSSxjQUFjLEtBQUssS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQzVELENBQUM7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsT0FBd0I7SUFDN0MsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBQ0QsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQWlCRCxTQUFnQixjQUFjLENBQzVCLElBQXFCLEVBQ3JCLE9BQXdCLEVBQ3hCLE9BQW1CO0lBRW5CLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDN0IsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUMxQixPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzNELENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyw2QkFBaUIsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUM3RSxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQWdCLGlCQUFpQixDQUMvQixXQUFrSDtJQUVsSCxJQUFJLFdBQVcsWUFBWSxPQUFPLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pELE9BQU8sV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2hDLENBQUM7U0FBTSxJQUFJLFdBQVcsWUFBWSxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3pELE9BQU8sV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2hDLENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgZml4ZWRTY3JpcHRXYWxsZXQsIHV0eG9saWJDb21wYXQgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHsgU2RrQmFja2VuZCB9IGZyb20gJy4vdHlwZXMnO1xuXG50eXBlIEJ1ZmZlckVuY29kaW5nID0gJ2hleCcgfCAnYmFzZTY0JztcblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ1RvQnVmZmVyVHJ5Rm9ybWF0cyhpbnB1dDogc3RyaW5nLCBmb3JtYXRzOiBCdWZmZXJFbmNvZGluZ1tdID0gWydoZXgnLCAnYmFzZTY0J10pOiBCdWZmZXIge1xuICBmb3IgKGNvbnN0IGZvcm1hdCBvZiBmb3JtYXRzKSB7XG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oaW5wdXQsIGZvcm1hdCk7XG4gICAgY29uc3QgYnVmZmVyVG9TdHJpbmcgPSBidWZmZXIudG9TdHJpbmcoZm9ybWF0KTtcbiAgICBpZiAoXG4gICAgICAoZm9ybWF0ID09PSAnYmFzZTY0JyAmJiBidWZmZXJUb1N0cmluZyA9PT0gaW5wdXQpIHx8XG4gICAgICAoZm9ybWF0ID09PSAnaGV4JyAmJiBidWZmZXJUb1N0cmluZyA9PT0gaW5wdXQudG9Mb3dlckNhc2UoKSlcbiAgICApIHtcbiAgICAgIHJldHVybiBidWZmZXI7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdpbnB1dCBtdXN0IGJlIGEgdmFsaWQgaGV4IG9yIGJhc2U2NCBzdHJpbmcnKTtcbn1cblxuZnVuY3Rpb24gdG9OZXR3b3JrTmFtZShuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmspOiB1dHhvbGliQ29tcGF0LlV0eG9saWJOYW1lIHtcbiAgY29uc3QgbmV0d29ya05hbWUgPSB1dHhvbGliLmdldE5ldHdvcmtOYW1lKG5ldHdvcmspO1xuICBpZiAoIW5ldHdvcmtOYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5ldHdvcms6ICR7bmV0d29ya31gKTtcbiAgfVxuICByZXR1cm4gbmV0d29ya05hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVQc2J0V2l0aChcbiAgcHNidDogc3RyaW5nIHwgQnVmZmVyLFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmssXG4gIGJhY2tlbmQ6ICd1dHhvbGliJ1xuKTogdXR4b2xpYi5iaXRnby5VdHhvUHNidDtcbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVQc2J0V2l0aChcbiAgcHNidDogc3RyaW5nIHwgQnVmZmVyLFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmssXG4gIGJhY2tlbmQ6ICd3YXNtLXV0eG8nXG4pOiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQ7XG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlUHNidFdpdGgoXG4gIHBzYnQ6IHN0cmluZyB8IEJ1ZmZlcixcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrLFxuICBiYWNrZW5kOiBTZGtCYWNrZW5kXG4pOiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0IHwgZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0O1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVBzYnRXaXRoKFxuICBwc2J0OiBzdHJpbmcgfCBCdWZmZXIsXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayxcbiAgYmFja2VuZDogU2RrQmFja2VuZFxuKTogdXR4b2xpYi5iaXRnby5VdHhvUHNidCB8IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCB7XG4gIGlmICh0eXBlb2YgcHNidCA9PT0gJ3N0cmluZycpIHtcbiAgICBwc2J0ID0gQnVmZmVyLmZyb20ocHNidCwgJ2hleCcpO1xuICB9XG4gIGlmIChiYWNrZW5kID09PSAndXR4b2xpYicpIHtcbiAgICByZXR1cm4gdXR4b2xpYi5iaXRnby5jcmVhdGVQc2J0RnJvbUJ1ZmZlcihwc2J0LCBuZXR3b3JrKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmZyb21CeXRlcyhwc2J0LCB0b05ldHdvcmtOYW1lKG5ldHdvcmspKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlVHJhbnNhY3Rpb24oXG4gIHRyYW5zYWN0aW9uOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxiaWdpbnQgfCBudW1iZXI+IHwgdXR4b2xpYi5iaXRnby5VdHhvUHNidCB8IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidFxuKTogQnVmZmVyIHtcbiAgaWYgKHRyYW5zYWN0aW9uIGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb24pIHtcbiAgICByZXR1cm4gdHJhbnNhY3Rpb24udG9CdWZmZXIoKTtcbiAgfSBlbHNlIGlmICh0cmFuc2FjdGlvbiBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnQpIHtcbiAgICByZXR1cm4gdHJhbnNhY3Rpb24udG9CdWZmZXIoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odHJhbnNhY3Rpb24uc2VyaWFsaXplKCkpO1xuICB9XG59XG4iXX0=
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2RlY29kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNBLDREQWFDO0FBMEJELHdDQWNDO0FBRUQsOENBVUM7QUExRUQseURBQTJDO0FBQzNDLGdEQUFvRTtBQUVwRSxvQ0FBZ0U7QUFNaEUsU0FBZ0Isd0JBQXdCLENBQUMsS0FBYSxFQUFFLFVBQTRCLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQztJQUNuRyxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzdCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0MsSUFDRSxDQUFDLE1BQU0sS0FBSyxRQUFRLElBQUksY0FBYyxLQUFLLEtBQUssQ0FBQztZQUNqRCxDQUFDLE1BQU0sS0FBSyxLQUFLLElBQUksY0FBYyxLQUFLLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUM1RCxDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7QUFDaEUsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLFFBQXNCO0lBQzNDLE1BQU0sT0FBTyxHQUFHLElBQUEsOEJBQXNCLEVBQUMsUUFBUSxDQUFDLENBQUM7SUFDakQsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBQ0QsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQWlCRCxTQUFnQixjQUFjLENBQzVCLElBQXFCLEVBQ3JCLFFBQXNCLEVBQ3RCLE9BQW1CO0lBRW5CLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDN0IsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUMxQixNQUFNLE9BQU8sR0FBRyxJQUFBLDhCQUFzQixFQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDM0QsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLDZCQUFpQixDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzlFLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQy9CLFdBQWtIO0lBRWxILElBQUksV0FBVyxZQUFZLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDekQsT0FBTyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDaEMsQ0FBQztTQUFNLElBQUksV0FBVyxZQUFZLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekQsT0FBTyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDaEMsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDOUMsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBmaXhlZFNjcmlwdFdhbGxldCwgdXR4b2xpYkNvbXBhdCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQgeyBnZXROZXR3b3JrRnJvbUNvaW5OYW1lLCBVdHhvQ29pbk5hbWUgfSBmcm9tICcuLi9uYW1lcyc7XG5cbmltcG9ydCB7IFNka0JhY2tlbmQgfSBmcm9tICcuL3R5cGVzJztcblxudHlwZSBCdWZmZXJFbmNvZGluZyA9ICdoZXgnIHwgJ2Jhc2U2NCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdUb0J1ZmZlclRyeUZvcm1hdHMoaW5wdXQ6IHN0cmluZywgZm9ybWF0czogQnVmZmVyRW5jb2RpbmdbXSA9IFsnaGV4JywgJ2Jhc2U2NCddKTogQnVmZmVyIHtcbiAgZm9yIChjb25zdCBmb3JtYXQgb2YgZm9ybWF0cykge1xuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGlucHV0LCBmb3JtYXQpO1xuICAgIGNvbnN0IGJ1ZmZlclRvU3RyaW5nID0gYnVmZmVyLnRvU3RyaW5nKGZvcm1hdCk7XG4gICAgaWYgKFxuICAgICAgKGZvcm1hdCA9PT0gJ2Jhc2U2NCcgJiYgYnVmZmVyVG9TdHJpbmcgPT09IGlucHV0KSB8fFxuICAgICAgKGZvcm1hdCA9PT0gJ2hleCcgJiYgYnVmZmVyVG9TdHJpbmcgPT09IGlucHV0LnRvTG93ZXJDYXNlKCkpXG4gICAgKSB7XG4gICAgICByZXR1cm4gYnVmZmVyO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcignaW5wdXQgbXVzdCBiZSBhIHZhbGlkIGhleCBvciBiYXNlNjQgc3RyaW5nJyk7XG59XG5cbmZ1bmN0aW9uIHRvTmV0d29ya05hbWUoY29pbk5hbWU6IFV0eG9Db2luTmFtZSk6IHV0eG9saWJDb21wYXQuVXR4b2xpYk5hbWUge1xuICBjb25zdCBuZXR3b3JrID0gZ2V0TmV0d29ya0Zyb21Db2luTmFtZShjb2luTmFtZSk7XG4gIGNvbnN0IG5ldHdvcmtOYW1lID0gdXR4b2xpYi5nZXROZXR3b3JrTmFtZShuZXR3b3JrKTtcbiAgaWYgKCFuZXR3b3JrTmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjb2luTmFtZTogJHtjb2luTmFtZX1gKTtcbiAgfVxuICByZXR1cm4gbmV0d29ya05hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVQc2J0V2l0aChcbiAgcHNidDogc3RyaW5nIHwgQnVmZmVyLFxuICBjb2luTmFtZTogVXR4b0NvaW5OYW1lLFxuICBiYWNrZW5kOiAndXR4b2xpYidcbik6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQ7XG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlUHNidFdpdGgoXG4gIHBzYnQ6IHN0cmluZyB8IEJ1ZmZlcixcbiAgY29pbk5hbWU6IFV0eG9Db2luTmFtZSxcbiAgYmFja2VuZDogJ3dhc20tdXR4bydcbik6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidDtcbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVQc2J0V2l0aChcbiAgcHNidDogc3RyaW5nIHwgQnVmZmVyLFxuICBjb2luTmFtZTogVXR4b0NvaW5OYW1lLFxuICBiYWNrZW5kOiBTZGtCYWNrZW5kXG4pOiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0IHwgZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0O1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVBzYnRXaXRoKFxuICBwc2J0OiBzdHJpbmcgfCBCdWZmZXIsXG4gIGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUsXG4gIGJhY2tlbmQ6IFNka0JhY2tlbmRcbik6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQgfCBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQge1xuICBpZiAodHlwZW9mIHBzYnQgPT09ICdzdHJpbmcnKSB7XG4gICAgcHNidCA9IEJ1ZmZlci5mcm9tKHBzYnQsICdoZXgnKTtcbiAgfVxuICBpZiAoYmFja2VuZCA9PT0gJ3V0eG9saWInKSB7XG4gICAgY29uc3QgbmV0d29yayA9IGdldE5ldHdvcmtGcm9tQ29pbk5hbWUoY29pbk5hbWUpO1xuICAgIHJldHVybiB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGcm9tQnVmZmVyKHBzYnQsIG5ldHdvcmspO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuZnJvbUJ5dGVzKHBzYnQsIHRvTmV0d29ya05hbWUoY29pbk5hbWUpKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlVHJhbnNhY3Rpb24oXG4gIHRyYW5zYWN0aW9uOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxiaWdpbnQgfCBudW1iZXI+IHwgdXR4b2xpYi5iaXRnby5VdHhvUHNidCB8IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidFxuKTogQnVmZmVyIHtcbiAgaWYgKHRyYW5zYWN0aW9uIGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb24pIHtcbiAgICByZXR1cm4gdHJhbnNhY3Rpb24udG9CdWZmZXIoKTtcbiAgfSBlbHNlIGlmICh0cmFuc2FjdGlvbiBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnQpIHtcbiAgICByZXR1cm4gdHJhbnNhY3Rpb24udG9CdWZmZXIoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odHJhbnNhY3Rpb24uc2VyaWFsaXplKCkpO1xuICB9XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"explainPsbt.d.ts","sourceRoot":"","sources":["../../../../../src/transaction/descriptor/explainPsbt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAE3C,OAAO,KAAK,eAAe,MAAM,6BAA6B,CAAC;AAG/D,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,mCAAmC,CAAC;AA4B1F,wBAAgB,WAAW,CACzB,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAC5B,WAAW,EAAE,eAAe,CAAC,aAAa,GACzC,gCAAgC,CAkBlC"}
1
+ {"version":3,"file":"explainPsbt.d.ts","sourceRoot":"","sources":["../../../../../src/transaction/descriptor/explainPsbt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAE3C,OAAO,KAAK,eAAe,MAAM,6BAA6B,CAAC;AAG/D,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,mCAAmC,CAAC;AA6B1F,wBAAgB,WAAW,CACzB,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAC5B,WAAW,EAAE,eAAe,CAAC,aAAa,GACzC,gCAAgC,CAmBlC"}
@@ -36,9 +36,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.explainPsbt = explainPsbt;
37
37
  const coreDescriptors = __importStar(require("@bitgo/utxo-core/descriptor"));
38
38
  const recipient_1 = require("../recipient");
39
- function toRecipient(output, network) {
39
+ const names_1 = require("../../names");
40
+ function toRecipient(output, coinName) {
40
41
  return {
41
- address: (0, recipient_1.toExtendedAddressFormat)(output.script, network),
42
+ address: (0, recipient_1.toExtendedAddressFormat)(output.script, coinName),
42
43
  amount: output.value.toString(),
43
44
  };
44
45
  }
@@ -65,16 +66,17 @@ function explainPsbt(psbt, descriptors) {
65
66
  const changeOutputs = outputs.filter((o) => o.scriptId !== undefined);
66
67
  const fee = sumValues(inputs) - sumValues(outputs);
67
68
  const inputSignatures = getInputSignatures(psbt);
69
+ const coinName = (0, names_1.getCoinName)(psbt.network);
68
70
  return {
69
71
  inputSignatures,
70
72
  signatures: inputSignatures.reduce((a, b) => Math.min(a, b), Infinity),
71
73
  locktime: psbt.locktime,
72
74
  id: psbt.getUnsignedTx().getId(),
73
- outputs: externalOutputs.map((o) => toRecipient(o, psbt.network)),
75
+ outputs: externalOutputs.map((o) => toRecipient(o, coinName)),
74
76
  outputAmount: sumValues(externalOutputs).toString(),
75
- changeOutputs: changeOutputs.map((o) => toRecipient(o, psbt.network)),
77
+ changeOutputs: changeOutputs.map((o) => toRecipient(o, coinName)),
76
78
  changeAmount: sumValues(changeOutputs).toString(),
77
79
  fee: fee.toString(),
78
80
  };
79
81
  }
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpblBzYnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZGVzY3JpcHRvci9leHBsYWluUHNidC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlDQSxrQ0FxQkM7QUFwREQsNkVBQStEO0FBRS9ELDRDQUF1RDtBQUd2RCxTQUFTLFdBQVcsQ0FBQyxNQUFvQyxFQUFFLE9BQXdCO0lBQ2pGLE9BQU87UUFDTCxPQUFPLEVBQUUsSUFBQSxtQ0FBdUIsRUFBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztRQUN4RCxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7S0FDaEMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxHQUF3QjtJQUN6QyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQsU0FBUywrQkFBK0IsQ0FBQyxJQUE0QixFQUFFLFVBQWtCO0lBQ3ZGLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBQ0QsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pFLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9CLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNSLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLElBQTRCO0lBQ3RELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsK0JBQStCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEYsQ0FBQztBQUVELFNBQWdCLFdBQVcsQ0FDekIsSUFBNEIsRUFDNUIsV0FBMEM7SUFFMUMsTUFBTSxpQkFBaUIsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pGLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsaUJBQWlCLENBQUM7SUFDOUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQztJQUN4RSxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkQsTUFBTSxlQUFlLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakQsT0FBTztRQUNMLGVBQWU7UUFDZixVQUFVLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQztRQUN0RSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7UUFDdkIsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxLQUFLLEVBQUU7UUFDaEMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pFLFlBQVksRUFBRSxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUMsUUFBUSxFQUFFO1FBQ25ELGFBQWEsRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyRSxZQUFZLEVBQUUsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLFFBQVEsRUFBRTtRQUNqRCxHQUFHLEVBQUUsR0FBRyxDQUFDLFFBQVEsRUFBRTtLQUNwQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IElUcmFuc2FjdGlvblJlY2lwaWVudCB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgKiBhcyBjb3JlRGVzY3JpcHRvcnMgZnJvbSAnQGJpdGdvL3V0eG8tY29yZS9kZXNjcmlwdG9yJztcblxuaW1wb3J0IHsgdG9FeHRlbmRlZEFkZHJlc3NGb3JtYXQgfSBmcm9tICcuLi9yZWNpcGllbnQnO1xuaW1wb3J0IHR5cGUgeyBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uRGVzY3JpcHRvciB9IGZyb20gJy4uL2ZpeGVkU2NyaXB0L2V4cGxhaW5UcmFuc2FjdGlvbic7XG5cbmZ1bmN0aW9uIHRvUmVjaXBpZW50KG91dHB1dDogY29yZURlc2NyaXB0b3JzLlBhcnNlZE91dHB1dCwgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrKTogSVRyYW5zYWN0aW9uUmVjaXBpZW50IHtcbiAgcmV0dXJuIHtcbiAgICBhZGRyZXNzOiB0b0V4dGVuZGVkQWRkcmVzc0Zvcm1hdChvdXRwdXQuc2NyaXB0LCBuZXR3b3JrKSxcbiAgICBhbW91bnQ6IG91dHB1dC52YWx1ZS50b1N0cmluZygpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBzdW1WYWx1ZXMoYXJyOiB7IHZhbHVlOiBiaWdpbnQgfVtdKTogYmlnaW50IHtcbiAgcmV0dXJuIGFyci5yZWR1Y2UoKHN1bSwgZSkgPT4gc3VtICsgZS52YWx1ZSwgQmlnSW50KDApKTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5wdXRTaWduYXR1cmVzRm9ySW5wdXRJbmRleChwc2J0OiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LCBpbnB1dEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCB7IHBhcnRpYWxTaWcgfSA9IHBzYnQuZGF0YS5pbnB1dHNbaW5wdXRJbmRleF07XG4gIGlmICghcGFydGlhbFNpZykge1xuICAgIHJldHVybiAwO1xuICB9XG4gIHJldHVybiBwYXJ0aWFsU2lnLnJlZHVjZSgoYWdnLCBwKSA9PiB7XG4gICAgY29uc3QgdmFsaWQgPSBwc2J0LnZhbGlkYXRlU2lnbmF0dXJlc09mSW5wdXRDb21tb24oaW5wdXRJbmRleCwgcC5wdWJrZXkpO1xuICAgIHJldHVybiBhZ2cgKyAodmFsaWQgPyAxIDogMCk7XG4gIH0sIDApO1xufVxuXG5mdW5jdGlvbiBnZXRJbnB1dFNpZ25hdHVyZXMocHNidDogdXR4b2xpYi5iaXRnby5VdHhvUHNidCk6IG51bWJlcltdIHtcbiAgcmV0dXJuIHBzYnQuZGF0YS5pbnB1dHMubWFwKChfLCBpKSA9PiBnZXRJbnB1dFNpZ25hdHVyZXNGb3JJbnB1dEluZGV4KHBzYnQsIGkpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGxhaW5Qc2J0KFxuICBwc2J0OiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LFxuICBkZXNjcmlwdG9yczogY29yZURlc2NyaXB0b3JzLkRlc2NyaXB0b3JNYXBcbik6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb25EZXNjcmlwdG9yIHtcbiAgY29uc3QgcGFyc2VkVHJhbnNhY3Rpb24gPSBjb3JlRGVzY3JpcHRvcnMucGFyc2UocHNidCwgZGVzY3JpcHRvcnMsIHBzYnQubmV0d29yayk7XG4gIGNvbnN0IHsgaW5wdXRzLCBvdXRwdXRzIH0gPSBwYXJzZWRUcmFuc2FjdGlvbjtcbiAgY29uc3QgZXh0ZXJuYWxPdXRwdXRzID0gb3V0cHV0cy5maWx0ZXIoKG8pID0+IG8uc2NyaXB0SWQgPT09IHVuZGVmaW5lZCk7XG4gIGNvbnN0IGNoYW5nZU91dHB1dHMgPSBvdXRwdXRzLmZpbHRlcigobykgPT4gby5zY3JpcHRJZCAhPT0gdW5kZWZpbmVkKTtcbiAgY29uc3QgZmVlID0gc3VtVmFsdWVzKGlucHV0cykgLSBzdW1WYWx1ZXMob3V0cHV0cyk7XG4gIGNvbnN0IGlucHV0U2lnbmF0dXJlcyA9IGdldElucHV0U2lnbmF0dXJlcyhwc2J0KTtcbiAgcmV0dXJuIHtcbiAgICBpbnB1dFNpZ25hdHVyZXMsXG4gICAgc2lnbmF0dXJlczogaW5wdXRTaWduYXR1cmVzLnJlZHVjZSgoYSwgYikgPT4gTWF0aC5taW4oYSwgYiksIEluZmluaXR5KSxcbiAgICBsb2NrdGltZTogcHNidC5sb2NrdGltZSxcbiAgICBpZDogcHNidC5nZXRVbnNpZ25lZFR4KCkuZ2V0SWQoKSxcbiAgICBvdXRwdXRzOiBleHRlcm5hbE91dHB1dHMubWFwKChvKSA9PiB0b1JlY2lwaWVudChvLCBwc2J0Lm5ldHdvcmspKSxcbiAgICBvdXRwdXRBbW91bnQ6IHN1bVZhbHVlcyhleHRlcm5hbE91dHB1dHMpLnRvU3RyaW5nKCksXG4gICAgY2hhbmdlT3V0cHV0czogY2hhbmdlT3V0cHV0cy5tYXAoKG8pID0+IHRvUmVjaXBpZW50KG8sIHBzYnQubmV0d29yaykpLFxuICAgIGNoYW5nZUFtb3VudDogc3VtVmFsdWVzKGNoYW5nZU91dHB1dHMpLnRvU3RyaW5nKCksXG4gICAgZmVlOiBmZWUudG9TdHJpbmcoKSxcbiAgfTtcbn1cbiJdfQ==
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpblBzYnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZGVzY3JpcHRvci9leHBsYWluUHNidC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtDQSxrQ0FzQkM7QUF0REQsNkVBQStEO0FBRS9ELDRDQUF1RDtBQUV2RCx1Q0FBd0Q7QUFFeEQsU0FBUyxXQUFXLENBQUMsTUFBb0MsRUFBRSxRQUFzQjtJQUMvRSxPQUFPO1FBQ0wsT0FBTyxFQUFFLElBQUEsbUNBQXVCLEVBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUM7UUFDekQsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0tBQ2hDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsR0FBd0I7SUFDekMsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVELFNBQVMsK0JBQStCLENBQUMsSUFBNEIsRUFBRSxVQUFrQjtJQUN2RixNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNsQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsK0JBQStCLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6RSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDUixDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxJQUE0QjtJQUN0RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLCtCQUErQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xGLENBQUM7QUFFRCxTQUFnQixXQUFXLENBQ3pCLElBQTRCLEVBQzVCLFdBQTBDO0lBRTFDLE1BQU0saUJBQWlCLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqRixNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLGlCQUFpQixDQUFDO0lBQzlDLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLENBQUM7SUFDeEUsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQztJQUN0RSxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25ELE1BQU0sZUFBZSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pELE1BQU0sUUFBUSxHQUFHLElBQUEsbUJBQVcsRUFBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0MsT0FBTztRQUNMLGVBQWU7UUFDZixVQUFVLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQztRQUN0RSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7UUFDdkIsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxLQUFLLEVBQUU7UUFDaEMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDN0QsWUFBWSxFQUFFLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLEVBQUU7UUFDbkQsYUFBYSxFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDakUsWUFBWSxFQUFFLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLEVBQUU7UUFDakQsR0FBRyxFQUFFLEdBQUcsQ0FBQyxRQUFRLEVBQUU7S0FDcEIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBJVHJhbnNhY3Rpb25SZWNpcGllbnQgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgY29yZURlc2NyaXB0b3JzIGZyb20gJ0BiaXRnby91dHhvLWNvcmUvZGVzY3JpcHRvcic7XG5cbmltcG9ydCB7IHRvRXh0ZW5kZWRBZGRyZXNzRm9ybWF0IH0gZnJvbSAnLi4vcmVjaXBpZW50JztcbmltcG9ydCB0eXBlIHsgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbkRlc2NyaXB0b3IgfSBmcm9tICcuLi9maXhlZFNjcmlwdC9leHBsYWluVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgZ2V0Q29pbk5hbWUsIFV0eG9Db2luTmFtZSB9IGZyb20gJy4uLy4uL25hbWVzJztcblxuZnVuY3Rpb24gdG9SZWNpcGllbnQob3V0cHV0OiBjb3JlRGVzY3JpcHRvcnMuUGFyc2VkT3V0cHV0LCBjb2luTmFtZTogVXR4b0NvaW5OYW1lKTogSVRyYW5zYWN0aW9uUmVjaXBpZW50IHtcbiAgcmV0dXJuIHtcbiAgICBhZGRyZXNzOiB0b0V4dGVuZGVkQWRkcmVzc0Zvcm1hdChvdXRwdXQuc2NyaXB0LCBjb2luTmFtZSksXG4gICAgYW1vdW50OiBvdXRwdXQudmFsdWUudG9TdHJpbmcoKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3VtVmFsdWVzKGFycjogeyB2YWx1ZTogYmlnaW50IH1bXSk6IGJpZ2ludCB7XG4gIHJldHVybiBhcnIucmVkdWNlKChzdW0sIGUpID0+IHN1bSArIGUudmFsdWUsIEJpZ0ludCgwKSk7XG59XG5cbmZ1bmN0aW9uIGdldElucHV0U2lnbmF0dXJlc0ZvcklucHV0SW5kZXgocHNidDogdXR4b2xpYi5iaXRnby5VdHhvUHNidCwgaW5wdXRJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgeyBwYXJ0aWFsU2lnIH0gPSBwc2J0LmRhdGEuaW5wdXRzW2lucHV0SW5kZXhdO1xuICBpZiAoIXBhcnRpYWxTaWcpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICByZXR1cm4gcGFydGlhbFNpZy5yZWR1Y2UoKGFnZywgcCkgPT4ge1xuICAgIGNvbnN0IHZhbGlkID0gcHNidC52YWxpZGF0ZVNpZ25hdHVyZXNPZklucHV0Q29tbW9uKGlucHV0SW5kZXgsIHAucHVia2V5KTtcbiAgICByZXR1cm4gYWdnICsgKHZhbGlkID8gMSA6IDApO1xuICB9LCAwKTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5wdXRTaWduYXR1cmVzKHBzYnQ6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQpOiBudW1iZXJbXSB7XG4gIHJldHVybiBwc2J0LmRhdGEuaW5wdXRzLm1hcCgoXywgaSkgPT4gZ2V0SW5wdXRTaWduYXR1cmVzRm9ySW5wdXRJbmRleChwc2J0LCBpKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBsYWluUHNidChcbiAgcHNidDogdXR4b2xpYi5iaXRnby5VdHhvUHNidCxcbiAgZGVzY3JpcHRvcnM6IGNvcmVEZXNjcmlwdG9ycy5EZXNjcmlwdG9yTWFwXG4pOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uRGVzY3JpcHRvciB7XG4gIGNvbnN0IHBhcnNlZFRyYW5zYWN0aW9uID0gY29yZURlc2NyaXB0b3JzLnBhcnNlKHBzYnQsIGRlc2NyaXB0b3JzLCBwc2J0Lm5ldHdvcmspO1xuICBjb25zdCB7IGlucHV0cywgb3V0cHV0cyB9ID0gcGFyc2VkVHJhbnNhY3Rpb247XG4gIGNvbnN0IGV4dGVybmFsT3V0cHV0cyA9IG91dHB1dHMuZmlsdGVyKChvKSA9PiBvLnNjcmlwdElkID09PSB1bmRlZmluZWQpO1xuICBjb25zdCBjaGFuZ2VPdXRwdXRzID0gb3V0cHV0cy5maWx0ZXIoKG8pID0+IG8uc2NyaXB0SWQgIT09IHVuZGVmaW5lZCk7XG4gIGNvbnN0IGZlZSA9IHN1bVZhbHVlcyhpbnB1dHMpIC0gc3VtVmFsdWVzKG91dHB1dHMpO1xuICBjb25zdCBpbnB1dFNpZ25hdHVyZXMgPSBnZXRJbnB1dFNpZ25hdHVyZXMocHNidCk7XG4gIGNvbnN0IGNvaW5OYW1lID0gZ2V0Q29pbk5hbWUocHNidC5uZXR3b3JrKTtcbiAgcmV0dXJuIHtcbiAgICBpbnB1dFNpZ25hdHVyZXMsXG4gICAgc2lnbmF0dXJlczogaW5wdXRTaWduYXR1cmVzLnJlZHVjZSgoYSwgYikgPT4gTWF0aC5taW4oYSwgYiksIEluZmluaXR5KSxcbiAgICBsb2NrdGltZTogcHNidC5sb2NrdGltZSxcbiAgICBpZDogcHNidC5nZXRVbnNpZ25lZFR4KCkuZ2V0SWQoKSxcbiAgICBvdXRwdXRzOiBleHRlcm5hbE91dHB1dHMubWFwKChvKSA9PiB0b1JlY2lwaWVudChvLCBjb2luTmFtZSkpLFxuICAgIG91dHB1dEFtb3VudDogc3VtVmFsdWVzKGV4dGVybmFsT3V0cHV0cykudG9TdHJpbmcoKSxcbiAgICBjaGFuZ2VPdXRwdXRzOiBjaGFuZ2VPdXRwdXRzLm1hcCgobykgPT4gdG9SZWNpcGllbnQobywgY29pbk5hbWUpKSxcbiAgICBjaGFuZ2VBbW91bnQ6IHN1bVZhbHVlcyhjaGFuZ2VPdXRwdXRzKS50b1N0cmluZygpLFxuICAgIGZlZTogZmVlLnRvU3RyaW5nKCksXG4gIH07XG59XG4iXX0=