@bitgo-beta/utxo-lib 8.0.3-beta.182 → 8.0.3-beta.1821

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 (222) hide show
  1. package/dist/src/address.d.ts +0 -1
  2. package/dist/src/address.d.ts.map +1 -1
  3. package/dist/src/address.js +10 -10
  4. package/dist/src/addressFormat.d.ts +1 -2
  5. package/dist/src/addressFormat.d.ts.map +1 -1
  6. package/dist/src/addressFormat.js +21 -26
  7. package/dist/src/bitgo/Musig2.d.ts +1 -2
  8. package/dist/src/bitgo/Musig2.d.ts.map +1 -1
  9. package/dist/src/bitgo/Musig2.js +54 -54
  10. package/dist/src/bitgo/ProprietaryKeyValUtils.d.ts +27 -0
  11. package/dist/src/bitgo/ProprietaryKeyValUtils.d.ts.map +1 -0
  12. package/dist/src/bitgo/ProprietaryKeyValUtils.js +74 -0
  13. package/dist/src/bitgo/PsbtUtil.d.ts +18 -23
  14. package/dist/src/bitgo/PsbtUtil.d.ts.map +1 -1
  15. package/dist/src/bitgo/PsbtUtil.js +63 -24
  16. package/dist/src/bitgo/Unspent.d.ts +2 -3
  17. package/dist/src/bitgo/Unspent.d.ts.map +1 -1
  18. package/dist/src/bitgo/Unspent.js +14 -15
  19. package/dist/src/bitgo/UtxoPsbt.d.ts +22 -9
  20. package/dist/src/bitgo/UtxoPsbt.d.ts.map +1 -1
  21. package/dist/src/bitgo/UtxoPsbt.js +126 -120
  22. package/dist/src/bitgo/UtxoTransaction.d.ts +0 -1
  23. package/dist/src/bitgo/UtxoTransaction.d.ts.map +1 -1
  24. package/dist/src/bitgo/UtxoTransaction.js +14 -14
  25. package/dist/src/bitgo/UtxoTransactionBuilder.d.ts +0 -1
  26. package/dist/src/bitgo/UtxoTransactionBuilder.d.ts.map +1 -1
  27. package/dist/src/bitgo/UtxoTransactionBuilder.js +1 -1
  28. package/dist/src/bitgo/bitcoincash/address.d.ts +0 -1
  29. package/dist/src/bitgo/bitcoincash/address.d.ts.map +1 -1
  30. package/dist/src/bitgo/bitcoincash/address.js +11 -12
  31. package/dist/src/bitgo/bitcoincash/index.js +6 -2
  32. package/dist/src/bitgo/dash/DashPsbt.d.ts +1 -1
  33. package/dist/src/bitgo/dash/DashPsbt.d.ts.map +1 -1
  34. package/dist/src/bitgo/dash/DashPsbt.js +4 -1
  35. package/dist/src/bitgo/dash/DashTransaction.d.ts +0 -1
  36. package/dist/src/bitgo/dash/DashTransaction.d.ts.map +1 -1
  37. package/dist/src/bitgo/dash/DashTransaction.js +3 -3
  38. package/dist/src/bitgo/dash/DashTransactionBuilder.d.ts +0 -1
  39. package/dist/src/bitgo/dash/DashTransactionBuilder.d.ts.map +1 -1
  40. package/dist/src/bitgo/dash/DashTransactionBuilder.js +1 -1
  41. package/dist/src/bitgo/dash/index.js +6 -2
  42. package/dist/src/bitgo/index.d.ts +3 -1
  43. package/dist/src/bitgo/index.d.ts.map +1 -1
  44. package/dist/src/bitgo/index.js +8 -2
  45. package/dist/src/bitgo/keyutil.d.ts +10 -2
  46. package/dist/src/bitgo/keyutil.d.ts.map +1 -1
  47. package/dist/src/bitgo/keyutil.js +27 -6
  48. package/dist/src/bitgo/legacysafe/index.d.ts +0 -1
  49. package/dist/src/bitgo/legacysafe/index.d.ts.map +1 -1
  50. package/dist/src/bitgo/legacysafe/index.js +11 -12
  51. package/dist/src/bitgo/litecoin/LitecoinPsbt.d.ts +1 -1
  52. package/dist/src/bitgo/litecoin/LitecoinPsbt.d.ts.map +1 -1
  53. package/dist/src/bitgo/litecoin/LitecoinPsbt.js +4 -1
  54. package/dist/src/bitgo/litecoin/LitecoinTransaction.d.ts +1 -2
  55. package/dist/src/bitgo/litecoin/LitecoinTransaction.d.ts.map +1 -1
  56. package/dist/src/bitgo/litecoin/LitecoinTransaction.js +2 -2
  57. package/dist/src/bitgo/litecoin/index.js +6 -2
  58. package/dist/src/bitgo/nonStandardHalfSigned.js +4 -5
  59. package/dist/src/bitgo/outputScripts.d.ts +11 -8
  60. package/dist/src/bitgo/outputScripts.d.ts.map +1 -1
  61. package/dist/src/bitgo/outputScripts.js +47 -44
  62. package/dist/src/bitgo/parseInput.d.ts +7 -8
  63. package/dist/src/bitgo/parseInput.d.ts.map +1 -1
  64. package/dist/src/bitgo/parseInput.js +14 -15
  65. package/dist/src/bitgo/psbt/fromHalfSigned.d.ts +0 -1
  66. package/dist/src/bitgo/psbt/fromHalfSigned.d.ts.map +1 -1
  67. package/dist/src/bitgo/psbt/fromHalfSigned.js +7 -8
  68. package/dist/src/bitgo/psbt/scriptTypes.d.ts +0 -1
  69. package/dist/src/bitgo/psbt/scriptTypes.d.ts.map +1 -1
  70. package/dist/src/bitgo/psbt/scriptTypes.js +7 -8
  71. package/dist/src/bitgo/signature.d.ts +3 -4
  72. package/dist/src/bitgo/signature.d.ts.map +1 -1
  73. package/dist/src/bitgo/signature.js +22 -23
  74. package/dist/src/bitgo/tnumber.js +2 -3
  75. package/dist/src/bitgo/transaction.d.ts +13 -1
  76. package/dist/src/bitgo/transaction.d.ts.map +1 -1
  77. package/dist/src/bitgo/transaction.js +53 -23
  78. package/dist/src/bitgo/transactionAmounts.d.ts +9 -0
  79. package/dist/src/bitgo/transactionAmounts.d.ts.map +1 -0
  80. package/dist/src/bitgo/transactionAmounts.js +32 -0
  81. package/dist/src/bitgo/types.d.ts +8 -2
  82. package/dist/src/bitgo/types.d.ts.map +1 -1
  83. package/dist/src/bitgo/types.js +12 -4
  84. package/dist/src/bitgo/wallet/Psbt.d.ts +37 -21
  85. package/dist/src/bitgo/wallet/Psbt.d.ts.map +1 -1
  86. package/dist/src/bitgo/wallet/Psbt.js +88 -58
  87. package/dist/src/bitgo/wallet/ScriptId.d.ts +14 -0
  88. package/dist/src/bitgo/wallet/ScriptId.d.ts.map +1 -0
  89. package/dist/src/bitgo/wallet/ScriptId.js +28 -0
  90. package/dist/src/bitgo/wallet/Unspent.d.ts +0 -3
  91. package/dist/src/bitgo/wallet/Unspent.d.ts.map +1 -1
  92. package/dist/src/bitgo/wallet/Unspent.js +47 -44
  93. package/dist/src/bitgo/wallet/WalletKeys.d.ts +2 -3
  94. package/dist/src/bitgo/wallet/WalletKeys.d.ts.map +1 -1
  95. package/dist/src/bitgo/wallet/WalletKeys.js +3 -3
  96. package/dist/src/bitgo/wallet/WalletOutput.d.ts +62 -8
  97. package/dist/src/bitgo/wallet/WalletOutput.d.ts.map +1 -1
  98. package/dist/src/bitgo/wallet/WalletOutput.js +160 -63
  99. package/dist/src/bitgo/wallet/WalletScripts.js +4 -5
  100. package/dist/src/bitgo/wallet/WalletUnspentSigner.d.ts +1 -1
  101. package/dist/src/bitgo/wallet/WalletUnspentSigner.d.ts.map +1 -1
  102. package/dist/src/bitgo/wallet/WalletUnspentSigner.js +7 -7
  103. package/dist/src/bitgo/wallet/chains.d.ts +2 -2
  104. package/dist/src/bitgo/wallet/chains.d.ts.map +1 -1
  105. package/dist/src/bitgo/wallet/chains.js +10 -10
  106. package/dist/src/bitgo/wallet/index.d.ts +3 -0
  107. package/dist/src/bitgo/wallet/index.d.ts.map +1 -1
  108. package/dist/src/bitgo/wallet/index.js +9 -2
  109. package/dist/src/bitgo/wallet/psbt/PsbtOutputs.d.ts +50 -0
  110. package/dist/src/bitgo/wallet/psbt/PsbtOutputs.d.ts.map +1 -0
  111. package/dist/src/bitgo/wallet/psbt/PsbtOutputs.js +85 -0
  112. package/dist/src/bitgo/wallet/psbt/RootNodes.d.ts +32 -0
  113. package/dist/src/bitgo/wallet/psbt/RootNodes.d.ts.map +1 -0
  114. package/dist/src/bitgo/wallet/psbt/RootNodes.js +122 -0
  115. package/dist/src/bitgo/zcash/ZcashBufferutils.d.ts +1 -2
  116. package/dist/src/bitgo/zcash/ZcashBufferutils.d.ts.map +1 -1
  117. package/dist/src/bitgo/zcash/ZcashBufferutils.js +15 -15
  118. package/dist/src/bitgo/zcash/ZcashPsbt.d.ts +4 -5
  119. package/dist/src/bitgo/zcash/ZcashPsbt.d.ts.map +1 -1
  120. package/dist/src/bitgo/zcash/ZcashPsbt.js +24 -15
  121. package/dist/src/bitgo/zcash/ZcashTransaction.d.ts +7 -2
  122. package/dist/src/bitgo/zcash/ZcashTransaction.d.ts.map +1 -1
  123. package/dist/src/bitgo/zcash/ZcashTransaction.js +58 -21
  124. package/dist/src/bitgo/zcash/ZcashTransactionBuilder.d.ts +0 -1
  125. package/dist/src/bitgo/zcash/ZcashTransactionBuilder.d.ts.map +1 -1
  126. package/dist/src/bitgo/zcash/ZcashTransactionBuilder.js +10 -4
  127. package/dist/src/bitgo/zcash/address.d.ts +0 -1
  128. package/dist/src/bitgo/zcash/address.d.ts.map +1 -1
  129. package/dist/src/bitgo/zcash/address.js +7 -8
  130. package/dist/src/bitgo/zcash/hashZip0244.d.ts +1 -2
  131. package/dist/src/bitgo/zcash/hashZip0244.d.ts.map +1 -1
  132. package/dist/src/bitgo/zcash/hashZip0244.js +9 -10
  133. package/dist/src/bitgo/zcash/index.js +6 -2
  134. package/dist/src/classify.d.ts +0 -1
  135. package/dist/src/classify.d.ts.map +1 -1
  136. package/dist/src/classify.js +5 -5
  137. package/dist/src/index.d.ts +3 -1
  138. package/dist/src/index.d.ts.map +1 -1
  139. package/dist/src/index.js +12 -4
  140. package/dist/src/networks.d.ts +2 -2
  141. package/dist/src/networks.d.ts.map +1 -1
  142. package/dist/src/networks.js +67 -21
  143. package/dist/src/payments/p2tr.d.ts.map +1 -1
  144. package/dist/src/payments/p2tr.js +16 -28
  145. package/dist/src/payments/p2tr_ns.js +3 -5
  146. package/dist/src/taproot.d.ts +80 -6
  147. package/dist/src/taproot.d.ts.map +1 -1
  148. package/dist/src/taproot.js +132 -48
  149. package/dist/src/templates/multisig/input.d.ts +0 -1
  150. package/dist/src/templates/multisig/input.d.ts.map +1 -1
  151. package/dist/src/templates/multisig/input.js +2 -3
  152. package/dist/src/templates/multisig/output.d.ts +0 -1
  153. package/dist/src/templates/multisig/output.d.ts.map +1 -1
  154. package/dist/src/templates/multisig/output.js +2 -3
  155. package/dist/src/templates/nulldata.d.ts +0 -1
  156. package/dist/src/templates/nulldata.d.ts.map +1 -1
  157. package/dist/src/templates/nulldata.js +3 -3
  158. package/dist/src/templates/pubkey/input.d.ts +0 -1
  159. package/dist/src/templates/pubkey/input.d.ts.map +1 -1
  160. package/dist/src/templates/pubkey/input.js +2 -3
  161. package/dist/src/templates/pubkey/output.d.ts +0 -1
  162. package/dist/src/templates/pubkey/output.d.ts.map +1 -1
  163. package/dist/src/templates/pubkey/output.js +2 -3
  164. package/dist/src/templates/pubkeyhash/input.d.ts +0 -1
  165. package/dist/src/templates/pubkeyhash/input.d.ts.map +1 -1
  166. package/dist/src/templates/pubkeyhash/input.js +2 -3
  167. package/dist/src/templates/pubkeyhash/output.d.ts +0 -1
  168. package/dist/src/templates/pubkeyhash/output.d.ts.map +1 -1
  169. package/dist/src/templates/pubkeyhash/output.js +2 -3
  170. package/dist/src/templates/scripthash/input.d.ts +0 -1
  171. package/dist/src/templates/scripthash/input.d.ts.map +1 -1
  172. package/dist/src/templates/scripthash/input.js +2 -3
  173. package/dist/src/templates/scripthash/output.d.ts +0 -1
  174. package/dist/src/templates/scripthash/output.d.ts.map +1 -1
  175. package/dist/src/templates/scripthash/output.js +2 -3
  176. package/dist/src/templates/taproot/input.d.ts +0 -1
  177. package/dist/src/templates/taproot/input.d.ts.map +1 -1
  178. package/dist/src/templates/taproot/input.js +2 -3
  179. package/dist/src/templates/taproot/output.d.ts +0 -1
  180. package/dist/src/templates/taproot/output.d.ts.map +1 -1
  181. package/dist/src/templates/taproot/output.js +2 -3
  182. package/dist/src/templates/taprootnofn/input.d.ts +0 -1
  183. package/dist/src/templates/taprootnofn/input.d.ts.map +1 -1
  184. package/dist/src/templates/taprootnofn/input.js +2 -3
  185. package/dist/src/templates/taprootnofn/output.d.ts +0 -1
  186. package/dist/src/templates/taprootnofn/output.d.ts.map +1 -1
  187. package/dist/src/templates/taprootnofn/output.js +4 -5
  188. package/dist/src/templates/witnesscommitment/output.d.ts +0 -1
  189. package/dist/src/templates/witnesscommitment/output.d.ts.map +1 -1
  190. package/dist/src/templates/witnesscommitment/output.js +4 -5
  191. package/dist/src/templates/witnesspubkeyhash/input.d.ts +0 -1
  192. package/dist/src/templates/witnesspubkeyhash/input.d.ts.map +1 -1
  193. package/dist/src/templates/witnesspubkeyhash/input.js +2 -3
  194. package/dist/src/templates/witnesspubkeyhash/output.d.ts +0 -1
  195. package/dist/src/templates/witnesspubkeyhash/output.d.ts.map +1 -1
  196. package/dist/src/templates/witnesspubkeyhash/output.js +2 -3
  197. package/dist/src/templates/witnessscripthash/input.d.ts +0 -1
  198. package/dist/src/templates/witnessscripthash/input.d.ts.map +1 -1
  199. package/dist/src/templates/witnessscripthash/input.js +2 -3
  200. package/dist/src/templates/witnessscripthash/output.d.ts +0 -1
  201. package/dist/src/templates/witnessscripthash/output.d.ts.map +1 -1
  202. package/dist/src/templates/witnessscripthash/output.js +2 -3
  203. package/dist/src/testutil/index.js +6 -2
  204. package/dist/src/testutil/keys.d.ts +6 -6
  205. package/dist/src/testutil/keys.d.ts.map +1 -1
  206. package/dist/src/testutil/keys.js +16 -14
  207. package/dist/src/testutil/mock.d.ts +3 -4
  208. package/dist/src/testutil/mock.d.ts.map +1 -1
  209. package/dist/src/testutil/mock.js +33 -31
  210. package/dist/src/testutil/psbt.d.ts +69 -15
  211. package/dist/src/testutil/psbt.d.ts.map +1 -1
  212. package/dist/src/testutil/psbt.js +140 -50
  213. package/dist/src/testutil/transaction.d.ts +2 -2
  214. package/dist/src/testutil/transaction.d.ts.map +1 -1
  215. package/dist/src/testutil/transaction.js +22 -21
  216. package/dist/src/transaction_builder.d.ts +0 -1
  217. package/dist/src/transaction_builder.d.ts.map +1 -1
  218. package/dist/src/transaction_builder.js +27 -32
  219. package/package.json +9 -16
  220. package/dist/src/noble_ecc.d.ts +0 -28
  221. package/dist/src/noble_ecc.d.ts.map +0 -1
  222. package/dist/src/noble_ecc.js +0 -172
@@ -1,11 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.verifyFullySignedSignatures = exports.constructPsbt = exports.signAllPsbtInputs = exports.signPsbtInput = exports.getSigners = exports.toUnspent = exports.outputScriptTypes = exports.inputScriptTypes = void 0;
4
- const assert = require("assert");
3
+ exports.AcidTest = exports.txFormats = exports.outputScriptTypes = exports.inputScriptTypes = exports.signStages = void 0;
4
+ exports.toUnspent = toUnspent;
5
+ exports.getSigners = getSigners;
6
+ exports.signPsbtInput = signPsbtInput;
7
+ exports.signAllPsbtInputs = signAllPsbtInputs;
8
+ exports.constructPsbt = constructPsbt;
9
+ exports.verifyFullySignedSignatures = verifyFullySignedSignatures;
10
+ const bitcoinjslib = require("bitcoinjs-lib");
11
+ const assert_1 = require("assert");
5
12
  const outputScripts_1 = require("../bitgo/outputScripts");
6
13
  const bitgo_1 = require("../bitgo");
14
+ const networks_1 = require("../networks");
7
15
  const mock_1 = require("./mock");
8
16
  const address_1 = require("../address");
17
+ const keys_1 = require("./keys");
18
+ exports.signStages = ['unsigned', 'halfsigned', 'fullsigned'];
9
19
  /**
10
20
  * array of supported input script types.
11
21
  * use p2trMusig2 for p2trMusig2 script path.
@@ -19,13 +29,16 @@ exports.outputScriptTypes = outputScripts_1.scriptTypes2Of3;
19
29
  /**
20
30
  * create unspent object from input script type, index, network and root wallet key.
21
31
  */
22
- function toUnspent(input, index, network, rootWalletKeys) {
32
+ function toUnspent(input, index, network, rootWalletKeys, { p2shP2pkKey } = {}) {
23
33
  if (input.scriptType === 'p2shP2pk') {
24
- return mock_1.mockReplayProtectionUnspent(network, input.value, { key: rootWalletKeys['user'], vout: index });
34
+ return (0, mock_1.mockReplayProtectionUnspent)(network, input.value, {
35
+ key: p2shP2pkKey ?? rootWalletKeys['user'],
36
+ vout: index,
37
+ });
25
38
  }
26
39
  else {
27
- const chain = bitgo_1.getInternalChainCode(input.scriptType === 'taprootKeyPathSpend' ? 'p2trMusig2' : input.scriptType);
28
- return mock_1.mockWalletUnspent(network, input.value, {
40
+ const chain = (0, bitgo_1.getInternalChainCode)(input.scriptType === 'taprootKeyPathSpend' ? 'p2trMusig2' : input.scriptType);
41
+ return (0, mock_1.mockWalletUnspent)(network, input.value, {
29
42
  chain,
30
43
  vout: index,
31
44
  keys: rootWalletKeys,
@@ -33,7 +46,6 @@ function toUnspent(input, index, network, rootWalletKeys) {
33
46
  });
34
47
  }
35
48
  }
36
- exports.toUnspent = toUnspent;
37
49
  /**
38
50
  * returns signer and cosigner names for InputScriptType.
39
51
  * user and undefined as signer and cosigner respectively for p2shP2pk.
@@ -46,102 +58,181 @@ function getSigners(inputType) {
46
58
  cosignerName: inputType === 'p2shP2pk' ? undefined : inputType === 'p2trMusig2' ? 'backup' : 'bitgo',
47
59
  };
48
60
  }
49
- exports.getSigners = getSigners;
50
61
  /**
51
62
  * signs with first or second signature for single input.
52
63
  * p2shP2pk is signed only with first sign.
53
64
  */
54
65
  function signPsbtInput(psbt, input, inputIndex, rootWalletKeys, sign, params) {
55
- function signPsbt(psbt, signFunc, skipNonWitnessUtxo) {
56
- if (skipNonWitnessUtxo) {
57
- bitgo_1.withUnsafeNonSegwit(psbt, signFunc);
58
- }
59
- else {
60
- signFunc();
61
- }
62
- }
63
- const { signers, deterministic, skipNonWitnessUtxo } = params !== null && params !== void 0 ? params : {};
66
+ const { signers, deterministic } = params ?? {};
64
67
  const { signerName, cosignerName } = signers ? signers : getSigners(input.scriptType);
65
68
  if (sign === 'halfsigned') {
66
69
  if (input.scriptType === 'p2shP2pk') {
67
- signPsbt(psbt, () => psbt.signInput(inputIndex, rootWalletKeys[signerName]), skipNonWitnessUtxo);
70
+ psbt.signInput(inputIndex, rootWalletKeys[signerName]);
68
71
  }
69
72
  else {
70
- signPsbt(psbt, () => psbt.signInputHD(inputIndex, rootWalletKeys[signerName]), skipNonWitnessUtxo);
73
+ psbt.signInputHD(inputIndex, rootWalletKeys[signerName]);
71
74
  }
72
75
  }
73
76
  if (sign === 'fullsigned' && cosignerName && input.scriptType !== 'p2shP2pk') {
74
- signPsbt(psbt, () => psbt.signInputHD(inputIndex, rootWalletKeys[cosignerName], { deterministic }), skipNonWitnessUtxo);
77
+ psbt.signInputHD(inputIndex, rootWalletKeys[cosignerName], { deterministic });
75
78
  }
76
79
  }
77
- exports.signPsbtInput = signPsbtInput;
78
80
  /**
79
81
  * signs with first or second signature for all inputs.
80
82
  * p2shP2pk is signed only with first sign.
81
83
  */
82
84
  function signAllPsbtInputs(psbt, inputs, rootWalletKeys, sign, params) {
83
- const { signers, deterministic, skipNonWitnessUtxo } = params !== null && params !== void 0 ? params : {};
85
+ const { signers, deterministic } = params ?? {};
84
86
  inputs.forEach((input, inputIndex) => {
85
- signPsbtInput(psbt, input, inputIndex, rootWalletKeys, sign, { signers, deterministic, skipNonWitnessUtxo });
87
+ signPsbtInput(psbt, input, inputIndex, rootWalletKeys, sign, { signers, deterministic });
86
88
  });
87
89
  }
88
- exports.signAllPsbtInputs = signAllPsbtInputs;
89
90
  /**
90
91
  * construct psbt for given inputs, outputs, network and root wallet keys.
91
92
  */
92
- function constructPsbt(inputs, outputs, network, rootWalletKeys, sign, params) {
93
- const { signers, deterministic, skipNonWitnessUtxo } = params !== null && params !== void 0 ? params : {};
93
+ function constructPsbt(inputs, outputs, network, rootWalletKeys, signStage, params) {
94
+ const { signers, deterministic, skipNonWitnessUtxo } = params ?? {};
94
95
  const totalInputAmount = inputs.reduce((sum, input) => sum + input.value, BigInt(0));
95
96
  const outputInputAmount = outputs.reduce((sum, output) => sum + output.value, BigInt(0));
96
- assert(totalInputAmount >= outputInputAmount, 'total output can not exceed total input');
97
- assert(!outputs.some((o) => (o.scriptType && o.address) || (!o.scriptType && !o.address)), 'only either output script type or address should be provided');
98
- const psbt = bitgo_1.createPsbtForNetwork({ network });
99
- const unspents = inputs.map((input, i) => toUnspent(input, i, network, rootWalletKeys));
97
+ (0, assert_1.ok)(totalInputAmount >= outputInputAmount, 'total output can not exceed total input');
98
+ const psbt = (0, bitgo_1.createPsbtForNetwork)({ network });
99
+ if (params?.addGlobalXPubs) {
100
+ (0, bitgo_1.addXpubsToPsbt)(psbt, rootWalletKeys);
101
+ }
102
+ const unspents = inputs.map((input, i) => toUnspent(input, i, network, rootWalletKeys, { p2shP2pkKey: params?.p2shP2pkKey }));
100
103
  unspents.forEach((u, i) => {
101
104
  const { signerName, cosignerName } = signers ? signers : getSigners(inputs[i].scriptType);
102
- if (bitgo_1.isWalletUnspent(u) && cosignerName) {
103
- bitgo_1.addWalletUnspentToPsbt(psbt, u, rootWalletKeys, signerName, cosignerName, { skipNonWitnessUtxo });
105
+ if ((0, bitgo_1.isWalletUnspent)(u) && cosignerName) {
106
+ (0, bitgo_1.addWalletUnspentToPsbt)(psbt, u, rootWalletKeys, signerName, cosignerName, { skipNonWitnessUtxo });
104
107
  }
105
108
  else {
106
- const { redeemScript } = outputScripts_1.createOutputScriptP2shP2pk(rootWalletKeys[signerName].publicKey);
107
- assert(redeemScript);
108
- bitgo_1.addReplayProtectionUnspentToPsbt(psbt, u, redeemScript, { skipNonWitnessUtxo });
109
+ const { redeemScript } = (0, outputScripts_1.createOutputScriptP2shP2pk)(params?.p2shP2pkKey ?? rootWalletKeys.user.publicKey);
110
+ (0, assert_1.ok)(redeemScript);
111
+ (0, bitgo_1.addReplayProtectionUnspentToPsbt)(psbt, u, redeemScript, { skipNonWitnessUtxo });
109
112
  }
110
113
  });
111
114
  outputs.forEach((output, i) => {
112
- if (output.scriptType) {
113
- bitgo_1.addWalletOutputToPsbt(psbt, rootWalletKeys, output.isInternalAddress ? bitgo_1.getInternalChainCode(output.scriptType) : bitgo_1.getExternalChainCode(output.scriptType), i, output.value);
115
+ if ('scriptType' in output) {
116
+ (0, bitgo_1.addWalletOutputToPsbt)(psbt, output.walletKeys ?? rootWalletKeys, output.isInternalAddress ? (0, bitgo_1.getInternalChainCode)(output.scriptType) : (0, bitgo_1.getExternalChainCode)(output.scriptType), i, output.value, { addDerivationInfo: output.walletKeys !== null });
117
+ return;
114
118
  }
115
- else if (output.address) {
119
+ else if ('address' in output) {
116
120
  const { address, value } = output;
117
- psbt.addOutput({ script: address_1.toOutputScript(address, network), value });
121
+ psbt.addOutput({ script: (0, address_1.toOutputScript)(address, network), value });
122
+ return;
118
123
  }
124
+ else if ('opReturn' in output) {
125
+ const { opReturn, value } = output;
126
+ const script = bitcoinjslib.payments.embed({ data: [Buffer.from(opReturn, 'ascii')] }).output;
127
+ (0, assert_1.ok)(script, 'script is required');
128
+ psbt.addOutput({ script, value });
129
+ return;
130
+ }
131
+ else if ('script' in output) {
132
+ const { script, value } = output;
133
+ psbt.addOutput({ script: Buffer.from(script, 'hex'), value });
134
+ return;
135
+ }
136
+ throw new Error('invalid output');
119
137
  });
120
- if (sign === 'unsigned') {
138
+ if (signStage === 'unsigned') {
121
139
  return psbt;
122
140
  }
123
- psbt.setAllInputsMusig2NonceHD(rootWalletKeys['user']);
141
+ /* use fixed sessionId for deterministic nonce creation */
142
+ const sessionId = Buffer.alloc(32);
143
+ psbt.setAllInputsMusig2NonceHD(rootWalletKeys['user'], { sessionId });
124
144
  psbt.setAllInputsMusig2NonceHD(rootWalletKeys['bitgo'], { deterministic });
125
145
  signAllPsbtInputs(psbt, inputs, rootWalletKeys, 'halfsigned', { signers, skipNonWitnessUtxo });
126
- if (sign === 'fullsigned') {
127
- signAllPsbtInputs(psbt, inputs, rootWalletKeys, sign, { signers, deterministic, skipNonWitnessUtxo });
146
+ if (signStage === 'fullsigned') {
147
+ signAllPsbtInputs(psbt, inputs, rootWalletKeys, signStage, { signers, deterministic, skipNonWitnessUtxo });
128
148
  }
129
149
  return psbt;
130
150
  }
131
- exports.constructPsbt = constructPsbt;
151
+ exports.txFormats = ['psbt', 'psbt-lite'];
152
+ /**
153
+ * Creates a valid PSBT with as many features as possible.
154
+ *
155
+ * - Inputs:
156
+ * - All wallet script types that are supported by the network.
157
+ * - A p2shP2pk input (for replay protection)
158
+ * - Outputs:
159
+ * - All wallet script types that are supported by the network.
160
+ * - A p2sh output with derivation info of a different wallet (not in the global psbt xpubs)
161
+ * - A p2sh output with no derivation info (external output)
162
+ * - An OP_RETURN output
163
+ */
164
+ class AcidTest {
165
+ constructor(network, signStage, txFormat, rootWalletKeys, otherWalletKeys, inputs, outputs) {
166
+ this.network = network;
167
+ this.signStage = signStage;
168
+ this.txFormat = txFormat;
169
+ this.rootWalletKeys = rootWalletKeys;
170
+ this.otherWalletKeys = otherWalletKeys;
171
+ this.inputs = inputs;
172
+ this.outputs = outputs;
173
+ }
174
+ static withConfig(network, signStage, txFormat, suiteConfig) {
175
+ const rootWalletKeys = (0, keys_1.getDefaultWalletKeys)();
176
+ const otherWalletKeys = (0, keys_1.getWalletKeysForSeed)('too many secrets');
177
+ const inputs = exports.inputScriptTypes
178
+ .filter((scriptType) => scriptType === 'taprootKeyPathSpend'
179
+ ? (0, outputScripts_1.isSupportedScriptType)(network, 'p2trMusig2')
180
+ : (0, outputScripts_1.isSupportedScriptType)(network, scriptType))
181
+ .filter((scriptType) => (suiteConfig.includeP2trMusig2ScriptPath ?? true) || scriptType !== 'p2trMusig2')
182
+ .map((scriptType) => ({ scriptType, value: BigInt(2000) }));
183
+ const outputs = exports.outputScriptTypes
184
+ .filter((scriptType) => (0, outputScripts_1.isSupportedScriptType)(network, scriptType))
185
+ .map((scriptType) => ({ scriptType, value: BigInt(900) }));
186
+ // Test other wallet output (with derivation info)
187
+ outputs.push({ scriptType: 'p2sh', value: BigInt(900), walletKeys: otherWalletKeys });
188
+ // Tes non-wallet output
189
+ outputs.push({ scriptType: 'p2sh', value: BigInt(900), walletKeys: null });
190
+ // Test OP_RETURN output
191
+ outputs.push({ opReturn: 'setec astronomy', value: BigInt(0) });
192
+ return new AcidTest(network, signStage, txFormat, rootWalletKeys, otherWalletKeys, inputs, outputs);
193
+ }
194
+ get name() {
195
+ const networkName = (0, networks_1.getNetworkName)(this.network);
196
+ return `${networkName} ${this.signStage} ${this.txFormat}`;
197
+ }
198
+ getReplayProtectionPublicKey() {
199
+ return this.rootWalletKeys.user.publicKey;
200
+ }
201
+ getReplayProtectionOutputScript() {
202
+ const { scriptPubKey } = (0, outputScripts_1.createOutputScriptP2shP2pk)(this.getReplayProtectionPublicKey());
203
+ (0, assert_1.ok)(scriptPubKey);
204
+ return scriptPubKey;
205
+ }
206
+ createPsbt() {
207
+ const psbt = constructPsbt(this.inputs, this.outputs, this.network, this.rootWalletKeys, this.signStage, {
208
+ deterministic: true,
209
+ addGlobalXPubs: true,
210
+ });
211
+ if (this.txFormat === 'psbt-lite') {
212
+ return (0, bitgo_1.clonePsbtWithoutNonWitnessUtxo)(psbt);
213
+ }
214
+ return psbt;
215
+ }
216
+ static suite(suiteConfig = {}) {
217
+ return (0, networks_1.getNetworkList)()
218
+ .filter((network) => (0, networks_1.isMainnet)(network) && network !== networks_1.networks.bitcoinsv)
219
+ .flatMap((network) => exports.signStages.flatMap((signStage) => exports.txFormats.flatMap((txFormat) => AcidTest.withConfig(network, signStage, txFormat, suiteConfig))));
220
+ }
221
+ }
222
+ exports.AcidTest = AcidTest;
132
223
  /**
133
224
  * Verifies signatures of fully signed tx (with taproot key path support).
134
225
  * NOTE: taproot key path tx can only be built and signed with PSBT.
135
226
  */
136
227
  function verifyFullySignedSignatures(tx, unspents, walletKeys, signer, cosigner) {
137
- const prevOutputs = unspents.map((u) => bitgo_1.toOutput(u, tx.network));
228
+ const prevOutputs = unspents.map((u) => (0, bitgo_1.toOutput)(u, tx.network));
138
229
  return unspents.every((u, index) => {
139
- if (bitgo_1.parseSignatureScript2Of3(tx.ins[index]).scriptType === 'taprootKeyPathSpend') {
140
- const result = bitgo_1.getSignatureVerifications(tx, index, u.value, undefined, prevOutputs);
230
+ if ((0, bitgo_1.parseSignatureScript2Of3)(tx.ins[index]).scriptType === 'taprootKeyPathSpend') {
231
+ const result = (0, bitgo_1.getSignatureVerifications)(tx, index, u.value, undefined, prevOutputs);
141
232
  return result.length === 1 && result[0].signature;
142
233
  }
143
234
  else {
144
- const result = bitgo_1.verifySignatureWithUnspent(tx, index, unspents, walletKeys);
235
+ const result = (0, bitgo_1.verifySignatureWithUnspent)(tx, index, unspents, walletKeys);
145
236
  if ((signer === 'user' && cosigner === 'bitgo') || (signer === 'bitgo' && cosigner === 'user')) {
146
237
  return result[0] && !result[1] && result[2];
147
238
  }
@@ -154,5 +245,4 @@ function verifyFullySignedSignatures(tx, unspents, walletKeys, signer, cosigner)
154
245
  }
155
246
  });
156
247
  }
157
- exports.verifyFullySignedSignatures = verifyFullySignedSignatures;
158
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHNidC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0dXRpbC9wc2J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUFpQztBQUVqQywwREFNZ0M7QUFDaEMsb0NBa0JrQjtBQUVsQixpQ0FBd0U7QUFDeEUsd0NBQTRDO0FBNkI1Qzs7OztHQUlHO0FBQ1UsUUFBQSxnQkFBZ0IsR0FBRyxDQUFDLEdBQUcsK0JBQWUsRUFBRSxxQkFBcUIsRUFBRSxrQ0FBa0IsQ0FBVSxDQUFDO0FBRXpHOztHQUVHO0FBQ1UsUUFBQSxpQkFBaUIsR0FBRywrQkFBZSxDQUFDO0FBRWpEOztHQUVHO0FBQ0gsU0FBZ0IsU0FBUyxDQUN2QixLQUFZLEVBQ1osS0FBYSxFQUNiLE9BQWdCLEVBQ2hCLGNBQThCO0lBRTlCLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7UUFDbkMsT0FBTyxrQ0FBMkIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDeEc7U0FBTTtRQUNMLE1BQU0sS0FBSyxHQUFHLDRCQUFvQixDQUFDLEtBQUssQ0FBQyxVQUFVLEtBQUsscUJBQXFCLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pILE9BQU8sd0JBQWlCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFDN0MsS0FBSztZQUNMLElBQUksRUFBRSxLQUFLO1lBQ1gsSUFBSSxFQUFFLGNBQWM7WUFDcEIsS0FBSztTQUNOLENBQUMsQ0FBQztLQUNKO0FBQ0gsQ0FBQztBQWpCRCw4QkFpQkM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLFVBQVUsQ0FBQyxTQUEwQjtJQUNuRCxPQUFPO1FBQ0wsVUFBVSxF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Q0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7U0FDbkQ7YUFBTTtZQUNMLE1BQU0sTUFBTSxHQUFHLGtDQUEwQixDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzNFLElBQUksQ0FBQyxNQUFNLEtBQUssTUFBTSxJQUFJLFFBQVEsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxPQUFPLElBQUksUUFBUSxLQUFLLE1BQU0sQ0FBQyxFQUFFO2dCQUM5RixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDN0M7aUJBQU0sSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNLElBQUksUUFBUSxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLFFBQVEsSUFBSSxRQUFRLEtBQUssTUFBTSxDQUFDLEVBQUU7Z0JBQ3ZHLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM3QztpQkFBTTtnQkFDTCxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDN0M7U0FDRjtJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQXZCRCxrRUF1QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHtcbiAgY3JlYXRlT3V0cHV0U2NyaXB0UDJzaFAycGssXG4gIFNjcmlwdFR5cGUsXG4gIFNjcmlwdFR5cGUyT2YzLFxuICBzY3JpcHRUeXBlUDJzaFAycGssXG4gIHNjcmlwdFR5cGVzMk9mMyxcbn0gZnJvbSAnLi4vYml0Z28vb3V0cHV0U2NyaXB0cyc7XG5pbXBvcnQge1xuICBhZGRSZXBsYXlQcm90ZWN0aW9uVW5zcGVudFRvUHNidCxcbiAgYWRkV2FsbGV0T3V0cHV0VG9Qc2J0LFxuICBhZGRXYWxsZXRVbnNwZW50VG9Qc2J0LFxuICBjcmVhdGVQc2J0Rm9yTmV0d29yayxcbiAgZ2V0RXh0ZXJuYWxDaGFpbkNvZGUsXG4gIGdldEludGVybmFsQ2hhaW5Db2RlLFxuICBnZXRTaWduYXR1cmVWZXJpZmljYXRpb25zLFxuICBpc1dhbGxldFVuc3BlbnQsXG4gIEtleU5hbWUsXG4gIHBhcnNlU2lnbmF0dXJlU2NyaXB0Mk9mMyxcbiAgUm9vdFdhbGxldEtleXMsXG4gIHRvT3V0cHV0LFxuICBVbnNwZW50LFxuICBVdHhvUHNidCxcbiAgVXR4b1RyYW5zYWN0aW9uLFxuICB2ZXJpZnlTaWduYXR1cmVXaXRoVW5zcGVudCxcbiAgd2l0aFVuc2FmZU5vblNlZ3dpdCxcbn0gZnJvbSAnLi4vYml0Z28nO1xuaW1wb3J0IHsgTmV0d29yayB9IGZyb20gJy4uL25ldHdvcmtzJztcbmltcG9ydCB7IG1vY2tSZXBsYXlQcm90ZWN0aW9uVW5zcGVudCwgbW9ja1dhbGxldFVuc3BlbnQgfSBmcm9tICcuL21vY2snO1xuaW1wb3J0IHsgdG9PdXRwdXRTY3JpcHQgfSBmcm9tICcuLi9hZGRyZXNzJztcblxuLyoqXG4gKiBpbnB1dCBzY3JpcHQgdHlwZSBhbmQgdmFsdWUuXG4gKiB1c2UgcDJ0ck11c2lnMiBmb3IgcDJ0ck11c2lnMiBzY3JpcHQgcGF0aC5cbiAqIHVzZSB0YXByb290S2V5UGF0aFNwZW5kIGZvciBwMnRyTXVzaWcyIGtleSBwYXRoLlxuICovXG5leHBvcnQgdHlwZSBJbnB1dFNjcmlwdFR5cGUgPSBTY3JpcHRUeXBlIHwgJ3RhcHJvb3RLZXlQYXRoU3BlbmQnO1xuZXhwb3J0IHR5cGUgT3V0cHV0U2NyaXB0VHlwZSA9IFNjcmlwdFR5cGUyT2YzO1xuXG4vKipcbiAqIGlucHV0IHNjcmlwdCB0eXBlIGFuZCB2YWx1ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElucHV0IHtcbiAgc2NyaXB0VHlwZTogSW5wdXRTY3JpcHRUeXBlO1xuICB2YWx1ZTogYmlnaW50O1xufVxuXG4vKipcbiAqIHNob3VsZCBzZXQgZWl0aGVyIGFkZHJlc3Mgb3Igc2NyaXB0VHlwZSwgbmV2ZXIgYm90aC5cbiAqIHNldCBpc0ludGVybmFsQWRkcmVzcz10cnVlIGZvciBpbnRlcm5hbCBvdXRwdXQgYWRkcmVzc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE91dHB1dCB7XG4gIGFkZHJlc3M/OiBzdHJpbmc7XG4gIHNjcmlwdFR5cGU/OiBPdXRwdXRTY3JpcHRUeXBlO1xuICB2YWx1ZTogYmlnaW50O1xuICBpc0ludGVybmFsQWRkcmVzcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogYXJyYXkgb2Ygc3VwcG9ydGVkIGlucHV0IHNjcmlwdCB0eXBlcy5cbiAqIHVzZSBwMnRyTXVzaWcyIGZvciBwMnRyTXVzaWcyIHNjcmlwdCBwYXRoLlxuICogdXNlIHRhcHJvb3RLZXlQYXRoU3BlbmQgZm9yIHAydHJNdXNpZzIga2V5IHBhdGguXG4gKi9cbmV4cG9ydCBjb25zdCBpbnB1dFNjcmlwdFR5cGVzID0gWy4uLnNjcmlwdFR5cGVzMk9mMywgJ3RhcHJvb3RLZXlQYXRoU3BlbmQnLCBzY3JpcHRUeXBlUDJzaFAycGtdIGFzIGNvbnN0O1xuXG4vKipcbiAqIGFycmF5IG9mIHN1cHBvcnRlZCBvdXRwdXQgc2NyaXB0IHR5cGVzLlxuICovXG5leHBvcnQgY29uc3Qgb3V0cHV0U2NyaXB0VHlwZXMgPSBzY3JpcHRUeXBlczJPZjM7XG5cbi8qKlxuICogY3JlYXRlIHVuc3BlbnQgb2JqZWN0IGZyb20gaW5wdXQgc2NyaXB0IHR5cGUsIGluZGV4LCBuZXR3b3JrIGFuZCByb290IHdhbGxldCBrZXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1Vuc3BlbnQoXG4gIGlucHV0OiBJbnB1dCxcbiAgaW5kZXg6IG51bWJlcixcbiAgbmV0d29yazogTmV0d29yayxcbiAgcm9vdFdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzXG4pOiBVbnNwZW50PGJpZ2ludD4ge1xuICBpZiAoaW5wdXQuc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJykge1xuICAgIHJldHVybiBtb2NrUmVwbGF5UHJvdGVjdGlvblVuc3BlbnQobmV0d29yaywgaW5wdXQudmFsdWUsIHsga2V5OiByb290V2FsbGV0S2V5c1sndXNlciddLCB2b3V0OiBpbmRleCB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBjaGFpbiA9IGdldEludGVybmFsQ2hhaW5Db2RlKGlucHV0LnNjcmlwdFR5cGUgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJyA/ICdwMnRyTXVzaWcyJyA6IGlucHV0LnNjcmlwdFR5cGUpO1xuICAgIHJldHVybiBtb2NrV2FsbGV0VW5zcGVudChuZXR3b3JrLCBpbnB1dC52YWx1ZSwge1xuICAgICAgY2hhaW4sXG4gICAgICB2b3V0OiBpbmRleCxcbiAgICAgIGtleXM6IHJvb3RXYWxsZXRLZXlzLFxuICAgICAgaW5kZXgsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiByZXR1cm5zIHNpZ25lciBhbmQgY29zaWduZXIgbmFtZXMgZm9yIElucHV0U2NyaXB0VHlwZS5cbiAqIHVzZXIgYW5kIHVuZGVmaW5lZCBhcyBzaWduZXIgYW5kIGNvc2lnbmVyIHJlc3BlY3RpdmVseSBmb3IgcDJzaFAycGsuXG4gKiB1c2VyIGFuZCBiYWNrdXAgYXMgc2lnbmVyIGFuZCBjb3NpZ25lciByZXNwZWN0aXZlbHkgZm9yIHAydHJNdXNpZzIuXG4gKiB1c2VyIGFuZCBiaXRnbyBhcyBzaWduZXIgYW5kIGNvc2lnbmVyIHJlc3BlY3RpdmVseSBmb3Igb3RoZXIgaW5wdXQgc2NyaXB0IHR5cGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2lnbmVycyhpbnB1dFR5cGU6IElucHV0U2NyaXB0VHlwZSk6IHsgc2lnbmVyTmFtZTogS2V5TmFtZTsgY29zaWduZXJOYW1lPzogS2V5TmFtZSB9IHtcbiAgcmV0dXJuIHtcbiAgICBzaWduZXJOYW1lOiAndXNlcicsXG4gICAgY29zaWduZXJOYW1lOiBpbnB1dFR5cGUgPT09ICdwMnNoUDJwaycgPyB1bmRlZmluZWQgOiBpbnB1dFR5cGUgPT09ICdwMnRyTXVzaWcyJyA/ICdiYWNrdXAnIDogJ2JpdGdvJyxcbiAgfTtcbn1cblxuLyoqXG4gKiBzaWducyB3aXRoIGZpcnN0IG9yIHNlY29uZCBzaWduYXR1cmUgZm9yIHNpbmdsZSBpbnB1dC5cbiAqIHAyc2hQMnBrIGlzIHNpZ25lZCBvbmx5IHdpdGggZmlyc3Qgc2lnbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpZ25Qc2J0SW5wdXQoXG4gIHBzYnQ6IFV0eG9Qc2J0LFxuICBpbnB1dDogSW5wdXQsXG4gIGlucHV0SW5kZXg6IG51bWJlcixcbiAgcm9vdFdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzLFxuICBzaWduOiAnaGFsZnNpZ25lZCcgfCAnZnVsbHNpZ25lZCcsXG4gIHBhcmFtcz86IHtcbiAgICBzaWduZXJzPzogeyBzaWduZXJOYW1lOiBLZXlOYW1lOyBjb3NpZ25lck5hbWU/OiBLZXlOYW1lIH07XG4gICAgZGV0ZXJtaW5pc3RpYz86IGJvb2xlYW47XG4gICAgc2tpcE5vbldpdG5lc3NVdHhvPzogYm9vbGVhbjtcbiAgfVxuKTogdm9pZCB7XG4gIGZ1bmN0aW9uIHNpZ25Qc2J0KHBzYnQ6IFV0eG9Qc2J0LCBzaWduRnVuYzogKCkgPT4gdm9pZCwgc2tpcE5vbldpdG5lc3NVdHhvPzogYm9vbGVhbikge1xuICAgIGlmIChza2lwTm9uV2l0bmVzc1V0eG8pIHtcbiAgICAgIHdpdGhVbnNhZmVOb25TZWd3aXQocHNidCwgc2lnbkZ1bmMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaWduRnVuYygpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHsgc2lnbmVycywgZGV0ZXJtaW5pc3RpYywgc2tpcE5vbldpdG5lc3NVdHhvIH0gPSBwYXJhbXMgPz8ge307XG4gIGNvbnN0IHsgc2lnbmVyTmFtZSwgY29zaWduZXJOYW1lIH0gPSBzaWduZXJzID8gc2lnbmVycyA6IGdldFNpZ25lcnMoaW5wdXQuc2NyaXB0VHlwZSk7XG4gIGlmIChzaWduID09PSAnaGFsZnNpZ25lZCcpIHtcbiAgICBpZiAoaW5wdXQuc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJykge1xuICAgICAgc2lnblBzYnQocHNidCwgKCkgPT4gcHNidC5zaWduSW5wdXQoaW5wdXRJbmRleCwgcm9vdFdhbGxldEtleXNbc2lnbmVyTmFtZV0pLCBza2lwTm9uV2l0bmVzc1V0eG8pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaWduUHNidChwc2J0LCAoKSA9PiBwc2J0LnNpZ25JbnB1dEhEKGlucHV0SW5kZXgsIHJvb3RXYWxsZXRLZXlzW3NpZ25lck5hbWVdKSwgc2tpcE5vbldpdG5lc3NVdHhvKTtcbiAgICB9XG4gIH1cbiAgaWYgKHNpZ24gPT09ICdmdWxsc2lnbmVkJyAmJiBjb3NpZ25lck5hbWUgJiYgaW5wdXQuc2NyaXB0VHlwZSAhPT0gJ3Ayc2hQMnBrJykge1xuICAgIHNpZ25Qc2J0KFxuICAgICAgcHNidCxcbiAgICAgICgpID0+IHBzYnQuc2lnbklucHV0SEQoaW5wdXRJbmRleCwgcm9vdFdhbGxldEtleXNbY29zaWduZXJOYW1lXSwgeyBkZXRlcm1pbmlzdGljIH0pLFxuICAgICAgc2tpcE5vbldpdG5lc3NVdHhvXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIHNpZ25zIHdpdGggZmlyc3Qgb3Igc2Vjb25kIHNpZ25hdHVyZSBmb3IgYWxsIGlucHV0cy5cbiAqIHAyc2hQMnBrIGlzIHNpZ25lZCBvbmx5IHdpdGggZmlyc3Qgc2lnbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpZ25BbGxQc2J0SW5wdXRzKFxuICBwc2J0OiBVdHhvUHNidCxcbiAgaW5wdXRzOiBJbnB1dFtdLFxuICByb290V2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIHNpZ246ICdoYWxmc2lnbmVkJyB8ICdmdWxsc2lnbmVkJyxcbiAgcGFyYW1zPzoge1xuICAgIHNpZ25lcnM/OiB7IHNpZ25lck5hbWU6IEtleU5hbWU7IGNvc2lnbmVyTmFtZT86IEtleU5hbWUgfTtcbiAgICBkZXRlcm1pbmlzdGljPzogYm9vbGVhbjtcbiAgICBza2lwTm9uV2l0bmVzc1V0eG8/OiBib29sZWFuO1xuICB9XG4pOiB2b2lkIHtcbiAgY29uc3QgeyBzaWduZXJzLCBkZXRlcm1pbmlzdGljLCBza2lwTm9uV2l0bmVzc1V0eG8gfSA9IHBhcmFtcyA/PyB7fTtcbiAgaW5wdXRzLmZvckVhY2goKGlucHV0LCBpbnB1dEluZGV4KSA9PiB7XG4gICAgc2lnblBzYnRJbnB1dChwc2J0LCBpbnB1dCwgaW5wdXRJbmRleCwgcm9vdFdhbGxldEtleXMsIHNpZ24sIHsgc2lnbmVycywgZGV0ZXJtaW5pc3RpYywgc2tpcE5vbldpdG5lc3NVdHhvIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBjb25zdHJ1Y3QgcHNidCBmb3IgZ2l2ZW4gaW5wdXRzLCBvdXRwdXRzLCBuZXR3b3JrIGFuZCByb290IHdhbGxldCBrZXlzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0UHNidChcbiAgaW5wdXRzOiBJbnB1dFtdLFxuICBvdXRwdXRzOiBPdXRwdXRbXSxcbiAgbmV0d29yazogTmV0d29yayxcbiAgcm9vdFdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzLFxuICBzaWduOiAndW5zaWduZWQnIHwgJ2hhbGZzaWduZWQnIHwgJ2Z1bGxzaWduZWQnLFxuICBwYXJhbXM/OiB7XG4gICAgc2lnbmVycz86IHsgc2lnbmVyTmFtZTogS2V5TmFtZTsgY29zaWduZXJOYW1lPzogS2V5TmFtZSB9O1xuICAgIGRldGVybWluaXN0aWM/OiBib29sZWFuO1xuICAgIHNraXBOb25XaXRuZXNzVXR4bz86IGJvb2xlYW47XG4gIH1cbik6IFV0eG9Qc2J0IHtcbiAgY29uc3QgeyBzaWduZXJzLCBkZXRlcm1pbmlzdGljLCBza2lwTm9uV2l0bmVzc1V0eG8gfSA9IHBhcmFtcyA/PyB7fTtcbiAgY29uc3QgdG90YWxJbnB1dEFtb3VudCA9IGlucHV0cy5yZWR1Y2UoKHN1bSwgaW5wdXQpID0+IHN1bSArIGlucHV0LnZhbHVlLCBCaWdJbnQoMCkpO1xuICBjb25zdCBvdXRwdXRJbnB1dEFtb3VudCA9IG91dHB1dHMucmVkdWNlKChzdW0sIG91dHB1dCkgPT4gc3VtICsgb3V0cHV0LnZhbHVlLCBCaWdJbnQoMCkpO1xuICBhc3NlcnQodG90YWxJbnB1dEFtb3VudCA+PSBvdXRwdXRJbnB1dEFtb3VudCwgJ3RvdGFsIG91dHB1dCBjYW4gbm90IGV4Y2VlZCB0b3RhbCBpbnB1dCcpO1xuICBhc3NlcnQoXG4gICAgIW91dHB1dHMuc29tZSgobykgPT4gKG8uc2NyaXB0VHlwZSAmJiBvLmFkZHJlc3MpIHx8ICghby5zY3JpcHRUeXBlICYmICFvLmFkZHJlc3MpKSxcbiAgICAnb25seSBlaXRoZXIgb3V0cHV0IHNjcmlwdCB0eXBlIG9yIGFkZHJlc3Mgc2hvdWxkIGJlIHByb3ZpZGVkJ1xuICApO1xuXG4gIGNvbnN0IHBzYnQgPSBjcmVhdGVQc2J0Rm9yTmV0d29yayh7IG5ldHdvcmsgfSk7XG4gIGNvbnN0IHVuc3BlbnRzID0gaW5wdXRzLm1hcCgoaW5wdXQsIGkpID0+IHRvVW5zcGVudChpbnB1dCwgaSwgbmV0d29yaywgcm9vdFdhbGxldEtleXMpKTtcblxuICB1bnNwZW50cy5mb3JFYWNoKCh1LCBpKSA9PiB7XG4gICAgY29uc3QgeyBzaWduZXJOYW1lLCBjb3NpZ25lck5hbWUgfSA9IHNpZ25lcnMgPyBzaWduZXJzIDogZ2V0U2lnbmVycyhpbnB1dHNbaV0uc2NyaXB0VHlwZSk7XG4gICAgaWYgKGlzV2FsbGV0VW5zcGVudCh1KSAmJiBjb3NpZ25lck5hbWUpIHtcbiAgICAgIGFkZFdhbGxldFVuc3BlbnRUb1BzYnQocHNidCwgdSwgcm9vdFdhbGxldEtleXMsIHNpZ25lck5hbWUsIGNvc2lnbmVyTmFtZSwgeyBza2lwTm9uV2l0bmVzc1V0eG8gfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHsgcmVkZWVtU2NyaXB0IH0gPSBjcmVhdGVPdXRwdXRTY3JpcHRQMnNoUDJwayhyb290V2FsbGV0S2V5c1tzaWduZXJOYW1lXS5wdWJsaWNLZXkpO1xuICAgICAgYXNzZXJ0KHJlZGVlbVNjcmlwdCk7XG4gICAgICBhZGRSZXBsYXlQcm90ZWN0aW9uVW5zcGVudFRvUHNidChwc2J0LCB1LCByZWRlZW1TY3JpcHQsIHsgc2tpcE5vbldpdG5lc3NVdHhvIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgb3V0cHV0cy5mb3JFYWNoKChvdXRwdXQsIGkpID0+IHtcbiAgICBpZiAob3V0cHV0LnNjcmlwdFR5cGUpIHtcbiAgICAgIGFkZFdhbGxldE91dHB1dFRvUHNidChcbiAgICAgICAgcHNidCxcbiAgICAgICAgcm9vdFdhbGxldEtleXMsXG4gICAgICAgIG91dHB1dC5pc0ludGVybmFsQWRkcmVzcyA/IGdldEludGVybmFsQ2hhaW5Db2RlKG91dHB1dC5zY3JpcHRUeXBlKSA6IGdldEV4dGVybmFsQ2hhaW5Db2RlKG91dHB1dC5zY3JpcHRUeXBlKSxcbiAgICAgICAgaSxcbiAgICAgICAgb3V0cHV0LnZhbHVlXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAob3V0cHV0LmFkZHJlc3MpIHtcbiAgICAgIGNvbnN0IHsgYWRkcmVzcywgdmFsdWUgfSA9IG91dHB1dDtcbiAgICAgIHBzYnQuYWRkT3V0cHV0KHsgc2NyaXB0OiB0b091dHB1dFNjcmlwdChhZGRyZXNzLCBuZXR3b3JrKSwgdmFsdWUgfSk7XG4gICAgfVxuICB9KTtcblxuICBpZiAoc2lnbiA9PT0gJ3Vuc2lnbmVkJykge1xuICAgIHJldHVybiBwc2J0O1xuICB9XG5cbiAgcHNidC5zZXRBbGxJbnB1dHNNdXNpZzJOb25jZUhEKHJvb3RXYWxsZXRLZXlzWyd1c2VyJ10pO1xuICBwc2J0LnNldEFsbElucHV0c011c2lnMk5vbmNlSEQocm9vdFdhbGxldEtleXNbJ2JpdGdvJ10sIHsgZGV0ZXJtaW5pc3RpYyB9KTtcblxuICBzaWduQWxsUHNidElucHV0cyhwc2J0LCBpbnB1dHMsIHJvb3RXYWxsZXRLZXlzLCAnaGFsZnNpZ25lZCcsIHsgc2lnbmVycywgc2tpcE5vbldpdG5lc3NVdHhvIH0pO1xuXG4gIGlmIChzaWduID09PSAnZnVsbHNpZ25lZCcpIHtcbiAgICBzaWduQWxsUHNidElucHV0cyhwc2J0LCBpbnB1dHMsIHJvb3RXYWxsZXRLZXlzLCBzaWduLCB7IHNpZ25lcnMsIGRldGVybWluaXN0aWMsIHNraXBOb25XaXRuZXNzVXR4byB9KTtcbiAgfVxuXG4gIHJldHVybiBwc2J0O1xufVxuXG4vKipcbiAqIFZlcmlmaWVzIHNpZ25hdHVyZXMgb2YgZnVsbHkgc2lnbmVkIHR4ICh3aXRoIHRhcHJvb3Qga2V5IHBhdGggc3VwcG9ydCkuXG4gKiBOT1RFOiB0YXByb290IGtleSBwYXRoIHR4IGNhbiBvbmx5IGJlIGJ1aWx0IGFuZCBzaWduZWQgd2l0aCBQU0JULlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5RnVsbHlTaWduZWRTaWduYXR1cmVzKFxuICB0eDogVXR4b1RyYW5zYWN0aW9uPGJpZ2ludD4sXG4gIHVuc3BlbnRzOiBVbnNwZW50PGJpZ2ludD5bXSxcbiAgd2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIHNpZ25lcjogS2V5TmFtZSxcbiAgY29zaWduZXI6IEtleU5hbWVcbik6IGJvb2xlYW4ge1xuICBjb25zdCBwcmV2T3V0cHV0cyA9IHVuc3BlbnRzLm1hcCgodSkgPT4gdG9PdXRwdXQodSwgdHgubmV0d29yaykpO1xuICByZXR1cm4gdW5zcGVudHMuZXZlcnkoKHUsIGluZGV4KSA9PiB7XG4gICAgaWYgKHBhcnNlU2lnbmF0dXJlU2NyaXB0Mk9mMyh0eC5pbnNbaW5kZXhdKS5zY3JpcHRUeXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFNpZ25hdHVyZVZlcmlmaWNhdGlvbnModHgsIGluZGV4LCB1LnZhbHVlLCB1bmRlZmluZWQsIHByZXZPdXRwdXRzKTtcbiAgICAgIHJldHVybiByZXN1bHQubGVuZ3RoID09PSAxICYmIHJlc3VsdFswXS5zaWduYXR1cmU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHZlcmlmeVNpZ25hdHVyZVdpdGhVbnNwZW50KHR4LCBpbmRleCwgdW5zcGVudHMsIHdhbGxldEtleXMpO1xuICAgICAgaWYgKChzaWduZXIgPT09ICd1c2VyJyAmJiBjb3NpZ25lciA9PT0gJ2JpdGdvJykgfHwgKHNpZ25lciA9PT0gJ2JpdGdvJyAmJiBjb3NpZ25lciA9PT0gJ3VzZXInKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0WzBdICYmICFyZXN1bHRbMV0gJiYgcmVzdWx0WzJdO1xuICAgICAgfSBlbHNlIGlmICgoc2lnbmVyID09PSAndXNlcicgJiYgY29zaWduZXIgPT09ICdiYWNrdXAnKSB8fCAoc2lnbmVyID09PSAnYmFja3VwJyAmJiBjb3NpZ25lciA9PT0gJ3VzZXInKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0WzBdICYmIHJlc3VsdFsxXSAmJiAhcmVzdWx0WzJdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICFyZXN1bHRbMF0gJiYgcmVzdWx0WzFdICYmIHJlc3VsdFsyXTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuIl19
248
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHNidC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0dXRpbC9wc2J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQW9GQSw4QkFxQkM7QUFRRCxnQ0FLQztBQU1ELHNDQXlCQztBQU1ELDhDQWdCQztBQUtELHNDQXNGQztBQTJIRCxrRUF1QkM7QUF4WkQsOENBQThDO0FBQzlDLG1DQUFzQztBQUV0QywwREFPZ0M7QUFDaEMsb0NBbUJrQjtBQUNsQiwwQ0FBMkY7QUFDM0YsaUNBQXdFO0FBQ3hFLHdDQUE0QztBQUM1QyxpQ0FBb0U7QUFtQnZELFFBQUEsVUFBVSxHQUFHLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxZQUFZLENBQVUsQ0FBQztBQWdCNUU7Ozs7R0FJRztBQUNVLFFBQUEsZ0JBQWdCLEdBQUcsQ0FBQyxHQUFHLCtCQUFlLEVBQUUscUJBQXFCLEVBQUUsa0NBQWtCLENBQVUsQ0FBQztBQUV6Rzs7R0FFRztBQUNVLFFBQUEsaUJBQWlCLEdBQUcsK0JBQWUsQ0FBQztBQUVqRDs7R0FFRztBQUNILFNBQWdCLFNBQVMsQ0FDdkIsS0FBWSxFQUNaLEtBQWEsRUFDYixPQUFnQixFQUNoQixjQUE4QixFQUM5QixFQUFFLFdBQVcsS0FBK0IsRUFBRTtJQUU5QyxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDcEMsT0FBTyxJQUFBLGtDQUEyQixFQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFO1lBQ3ZELEdBQUcsRUFBRSxXQUFXLElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQztZQUMxQyxJQUFJLEVBQUUsS0FBSztTQUNaLENBQUMsQ0FBQztJQUNMLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxLQUFLLEdBQUcsSUFBQSw0QkFBb0IsRUFBQyxLQUFLLENBQUMsVUFBVSxLQUFLLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FB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QU0sR0FBRyxJQUFBLGtDQUEwQixFQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzNFLElBQUksQ0FBQyxNQUFNLEtBQUssTUFBTSxJQUFJLFFBQVEsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxPQUFPLElBQUksUUFBUSxLQUFLLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQy9GLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QyxDQUFDO2lCQUFNLElBQUksQ0FBQyxNQUFNLEtBQUssTUFBTSxJQUFJLFFBQVEsS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRLElBQUksUUFBUSxLQUFLLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3hHLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYml0Y29pbmpzbGliIGZyb20gJ2JpdGNvaW5qcy1saWInO1xuaW1wb3J0IHsgb2sgYXMgYXNzZXJ0IH0gZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHtcbiAgY3JlYXRlT3V0cHV0U2NyaXB0UDJzaFAycGssXG4gIGlzU3VwcG9ydGVkU2NyaXB0VHlwZSxcbiAgU2NyaXB0VHlwZSxcbiAgU2NyaXB0VHlwZTJPZjMsXG4gIHNjcmlwdFR5cGVQMnNoUDJwayxcbiAgc2NyaXB0VHlwZXMyT2YzLFxufSBmcm9tICcuLi9iaXRnby9vdXRwdXRTY3JpcHRzJztcbmltcG9ydCB7XG4gIGFkZFJlcGxheVByb3RlY3Rpb25VbnNwZW50VG9Qc2J0LFxuICBhZGRXYWxsZXRPdXRwdXRUb1BzYnQsXG4gIGFkZFdhbGxldFVuc3BlbnRUb1BzYnQsXG4gIGNyZWF0ZVBzYnRGb3JOZXR3b3JrLFxuICBnZXRFeHRlcm5hbENoYWluQ29kZSxcbiAgZ2V0SW50ZXJuYWxDaGFpbkNvZGUsXG4gIGdldFNpZ25hdHVyZVZlcmlmaWNhdGlvbnMsXG4gIGlzV2FsbGV0VW5zcGVudCxcbiAgS2V5TmFtZSxcbiAgcGFyc2VTaWduYXR1cmVTY3JpcHQyT2YzLFxuICBSb290V2FsbGV0S2V5cyxcbiAgdG9PdXRwdXQsXG4gIFVuc3BlbnQsXG4gIFV0eG9Qc2J0LFxuICBVdHhvVHJhbnNhY3Rpb24sXG4gIHZlcmlmeVNpZ25hdHVyZVdpdGhVbnNwZW50LFxuICBhZGRYcHVic1RvUHNidCxcbiAgY2xvbmVQc2J0V2l0aG91dE5vbldpdG5lc3NVdHhvLFxufSBmcm9tICcuLi9iaXRnbyc7XG5pbXBvcnQgeyBnZXROZXR3b3JrTGlzdCwgZ2V0TmV0d29ya05hbWUsIGlzTWFpbm5ldCwgTmV0d29yaywgbmV0d29ya3MgfSBmcm9tICcuLi9uZXR3b3Jrcyc7XG5pbXBvcnQgeyBtb2NrUmVwbGF5UHJvdGVjdGlvblVuc3BlbnQsIG1vY2tXYWxsZXRVbnNwZW50IH0gZnJvbSAnLi9tb2NrJztcbmltcG9ydCB7IHRvT3V0cHV0U2NyaXB0IH0gZnJvbSAnLi4vYWRkcmVzcyc7XG5pbXBvcnQgeyBnZXREZWZhdWx0V2FsbGV0S2V5cywgZ2V0V2FsbGV0S2V5c0ZvclNlZWQgfSBmcm9tICcuL2tleXMnO1xuXG4vKipcbiAqIFRoaXMgaXMgYSBiaXQgb2YgYSBtaXNub21lciwgYXMgaXQgYWN0dWFsbHkgc3BlY2lmaWVzIHRoZSBzcGVuZCB0eXBlIG9mIHRoZSBpbnB1dC5cbiAqIFRoaXMgbWFrZXMgYSBkaWZmZXJlbmNlIGZvciBwMnRyTXVzaWcyIGlucHV0cywgYXMgdGhleSBjYW4gYmUgc3BlbnQgZWl0aGVyIGJ5IGtleSBwYXRoIG9yIHNjcmlwdCBwYXRoLlxuICogVGhlIHZhbHVlIHAydHJNdXNpZzIgaXMgdXNlZCBmb3IgcDJ0ck11c2lnMiBzY3JpcHQgcGF0aC5cbiAqIFRoZSB2YWx1ZSB0YXByb290S2V5UGF0aFNwZW5kIGlzIHVzZWQgZm9yIHAydHJNdXNpZzIga2V5IHBhdGguXG4gKi9cbmV4cG9ydCB0eXBlIElucHV0U2NyaXB0VHlwZSA9IFNjcmlwdFR5cGUgfCAndGFwcm9vdEtleVBhdGhTcGVuZCc7XG5leHBvcnQgdHlwZSBPdXRwdXRTY3JpcHRUeXBlID0gU2NyaXB0VHlwZTJPZjM7XG5cbi8qKlxuICogaW5wdXQgc2NyaXB0IHR5cGUgYW5kIHZhbHVlXG4gKi9cbmV4cG9ydCB0eXBlIElucHV0ID0ge1xuICBzY3JpcHRUeXBlOiBJbnB1dFNjcmlwdFR5cGU7XG4gIHZhbHVlOiBiaWdpbnQ7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnblN0YWdlcyA9IFsndW5zaWduZWQnLCAnaGFsZnNpZ25lZCcsICdmdWxsc2lnbmVkJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBTaWduU3RhZ2UgPSAodHlwZW9mIHNpZ25TdGFnZXMpW251bWJlcl07XG5cbi8qKlxuICogU2V0IGlzSW50ZXJuYWxBZGRyZXNzPXRydWUgZm9yIGludGVybmFsIG91dHB1dCBhZGRyZXNzXG4gKi9cbi8vIE1ha2Ugc2NyaXB0OiBzdHJpbmcgYXMgaW5zdGVhZCBvZiBzY3JpcHRUeXBlIG9yIGFkZHJlc3NcbmV4cG9ydCB0eXBlIE91dHB1dCA9IHtcbiAgdmFsdWU6IGJpZ2ludDtcbiAgLy8gRGV0ZXJtaW5lcyBjaGFpbiBjb2RlIGZvciB0aGUgb3V0cHV0XG4gIGlzSW50ZXJuYWxBZGRyZXNzPzogYm9vbGVhbjtcbiAgLy8gRGV0ZXJtaW5lcyB0aGUgd2FsbGV0IGtleXMgdG8gdXNlIGZvciB0aGUgb3V0cHV0LiBCeSBkZWZhdWx0IHVzZSByb290IHdhbGxldCBrZXlzIHVzZWQgZm9yIHRoZSBpbnB1dHMuXG4gIC8vIFdoZW4gc2V0IHRvIG51bGwsIG9taXRzIHRoZSBkZXJpdmF0aW9uIGluZm8gYW5kIGVmZmVjdGl2ZWx5IG1ha2VzIHRoZSBvdXRwdXQgbm9uLXdhbGxldCBvdXRwdXQuXG4gIHdhbGxldEtleXM/OiBSb290V2FsbGV0S2V5cyB8IG51bGw7XG59ICYgKHsgc2NyaXB0VHlwZTogT3V0cHV0U2NyaXB0VHlwZSB9IHwgeyBhZGRyZXNzOiBzdHJpbmcgfSB8IHsgc2NyaXB0OiBzdHJpbmcgfSB8IHsgb3BSZXR1cm46IHN0cmluZyB9KTtcblxuLyoqXG4gKiBhcnJheSBvZiBzdXBwb3J0ZWQgaW5wdXQgc2NyaXB0IHR5cGVzLlxuICogdXNlIHAydHJNdXNpZzIgZm9yIHAydHJNdXNpZzIgc2NyaXB0IHBhdGguXG4gKiB1c2UgdGFwcm9vdEtleVBhdGhTcGVuZCBmb3IgcDJ0ck11c2lnMiBrZXkgcGF0aC5cbiAqL1xuZXhwb3J0IGNvbnN0IGlucHV0U2NyaXB0VHlwZXMgPSBbLi4uc2NyaXB0VHlwZXMyT2YzLCAndGFwcm9vdEtleVBhdGhTcGVuZCcsIHNjcmlwdFR5cGVQMnNoUDJwa10gYXMgY29uc3Q7XG5cbi8qKlxuICogYXJyYXkgb2Ygc3VwcG9ydGVkIG91dHB1dCBzY3JpcHQgdHlwZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBvdXRwdXRTY3JpcHRUeXBlcyA9IHNjcmlwdFR5cGVzMk9mMztcblxuLyoqXG4gKiBjcmVhdGUgdW5zcGVudCBvYmplY3QgZnJvbSBpbnB1dCBzY3JpcHQgdHlwZSwgaW5kZXgsIG5ldHdvcmsgYW5kIHJvb3Qgd2FsbGV0IGtleS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvVW5zcGVudChcbiAgaW5wdXQ6IElucHV0LFxuICBpbmRleDogbnVtYmVyLFxuICBuZXR3b3JrOiBOZXR3b3JrLFxuICByb290V2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIHsgcDJzaFAycGtLZXkgfTogeyBwMnNoUDJwa0tleT86IEJ1ZmZlciB9ID0ge31cbik6IFVuc3BlbnQ8YmlnaW50PiB7XG4gIGlmIChpbnB1dC5zY3JpcHRUeXBlID09PSAncDJzaFAycGsnKSB7XG4gICAgcmV0dXJuIG1vY2tSZXBsYXlQcm90ZWN0aW9uVW5zcGVudChuZXR3b3JrLCBpbnB1dC52YWx1ZSwge1xuICAgICAga2V5OiBwMnNoUDJwa0tleSA/PyByb290V2FsbGV0S2V5c1sndXNlciddLFxuICAgICAgdm91dDogaW5kZXgsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgY2hhaW4gPSBnZXRJbnRlcm5hbENoYWluQ29kZShpbnB1dC5zY3JpcHRUeXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgPyAncDJ0ck11c2lnMicgOiBpbnB1dC5zY3JpcHRUeXBlKTtcbiAgICByZXR1cm4gbW9ja1dhbGxldFVuc3BlbnQobmV0d29yaywgaW5wdXQudmFsdWUsIHtcbiAgICAgIGNoYWluLFxuICAgICAgdm91dDogaW5kZXgsXG4gICAgICBrZXlzOiByb290V2FsbGV0S2V5cyxcbiAgICAgIGluZGV4LFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogcmV0dXJucyBzaWduZXIgYW5kIGNvc2lnbmVyIG5hbWVzIGZvciBJbnB1dFNjcmlwdFR5cGUuXG4gKiB1c2VyIGFuZCB1bmRlZmluZWQgYXMgc2lnbmVyIGFuZCBjb3NpZ25lciByZXNwZWN0aXZlbHkgZm9yIHAyc2hQMnBrLlxuICogdXNlciBhbmQgYmFja3VwIGFzIHNpZ25lciBhbmQgY29zaWduZXIgcmVzcGVjdGl2ZWx5IGZvciBwMnRyTXVzaWcyLlxuICogdXNlciBhbmQgYml0Z28gYXMgc2lnbmVyIGFuZCBjb3NpZ25lciByZXNwZWN0aXZlbHkgZm9yIG90aGVyIGlucHV0IHNjcmlwdCB0eXBlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNpZ25lcnMoaW5wdXRUeXBlOiBJbnB1dFNjcmlwdFR5cGUpOiB7IHNpZ25lck5hbWU6IEtleU5hbWU7IGNvc2lnbmVyTmFtZT86IEtleU5hbWUgfSB7XG4gIHJldHVybiB7XG4gICAgc2lnbmVyTmFtZTogJ3VzZXInLFxuICAgIGNvc2lnbmVyTmFtZTogaW5wdXRUeXBlID09PSAncDJzaFAycGsnID8gdW5kZWZpbmVkIDogaW5wdXRUeXBlID09PSAncDJ0ck11c2lnMicgPyAnYmFja3VwJyA6ICdiaXRnbycsXG4gIH07XG59XG5cbi8qKlxuICogc2lnbnMgd2l0aCBmaXJzdCBvciBzZWNvbmQgc2lnbmF0dXJlIGZvciBzaW5nbGUgaW5wdXQuXG4gKiBwMnNoUDJwayBpcyBzaWduZWQgb25seSB3aXRoIGZpcnN0IHNpZ24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWduUHNidElucHV0KFxuICBwc2J0OiBVdHhvUHNidCxcbiAgaW5wdXQ6IElucHV0LFxuICBpbnB1dEluZGV4OiBudW1iZXIsXG4gIHJvb3RXYWxsZXRLZXlzOiBSb290V2FsbGV0S2V5cyxcbiAgc2lnbjogJ2hhbGZzaWduZWQnIHwgJ2Z1bGxzaWduZWQnLFxuICBwYXJhbXM/OiB7XG4gICAgc2lnbmVycz86IHsgc2lnbmVyTmFtZTogS2V5TmFtZTsgY29zaWduZXJOYW1lPzogS2V5TmFtZSB9O1xuICAgIGRldGVybWluaXN0aWM/OiBib29sZWFuO1xuICAgIC8vIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBrZWVwIHRoaXMgaGVyZS5cbiAgICBza2lwTm9uV2l0bmVzc1V0eG8/OiBib29sZWFuO1xuICB9XG4pOiB2b2lkIHtcbiAgY29uc3QgeyBzaWduZXJzLCBkZXRlcm1pbmlzdGljIH0gPSBwYXJhbXMgPz8ge307XG4gIGNvbnN0IHsgc2lnbmVyTmFtZSwgY29zaWduZXJOYW1lIH0gPSBzaWduZXJzID8gc2lnbmVycyA6IGdldFNpZ25lcnMoaW5wdXQuc2NyaXB0VHlwZSk7XG4gIGlmIChzaWduID09PSAnaGFsZnNpZ25lZCcpIHtcbiAgICBpZiAoaW5wdXQuc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJykge1xuICAgICAgcHNidC5zaWduSW5wdXQoaW5wdXRJbmRleCwgcm9vdFdhbGxldEtleXNbc2lnbmVyTmFtZV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwc2J0LnNpZ25JbnB1dEhEKGlucHV0SW5kZXgsIHJvb3RXYWxsZXRLZXlzW3NpZ25lck5hbWVdKTtcbiAgICB9XG4gIH1cbiAgaWYgKHNpZ24gPT09ICdmdWxsc2lnbmVkJyAmJiBjb3NpZ25lck5hbWUgJiYgaW5wdXQuc2NyaXB0VHlwZSAhPT0gJ3Ayc2hQMnBrJykge1xuICAgIHBzYnQuc2lnbklucHV0SEQoaW5wdXRJbmRleCwgcm9vdFdhbGxldEtleXNbY29zaWduZXJOYW1lXSwgeyBkZXRlcm1pbmlzdGljIH0pO1xuICB9XG59XG5cbi8qKlxuICogc2lnbnMgd2l0aCBmaXJzdCBvciBzZWNvbmQgc2lnbmF0dXJlIGZvciBhbGwgaW5wdXRzLlxuICogcDJzaFAycGsgaXMgc2lnbmVkIG9ubHkgd2l0aCBmaXJzdCBzaWduLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnbkFsbFBzYnRJbnB1dHMoXG4gIHBzYnQ6IFV0eG9Qc2J0LFxuICBpbnB1dHM6IElucHV0W10sXG4gIHJvb3RXYWxsZXRLZXlzOiBSb290V2FsbGV0S2V5cyxcbiAgc2lnbjogJ2hhbGZzaWduZWQnIHwgJ2Z1bGxzaWduZWQnLFxuICBwYXJhbXM/OiB7XG4gICAgc2lnbmVycz86IHsgc2lnbmVyTmFtZTogS2V5TmFtZTsgY29zaWduZXJOYW1lPzogS2V5TmFtZSB9O1xuICAgIGRldGVybWluaXN0aWM/OiBib29sZWFuO1xuICAgIC8vIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBrZWVwIHRoaXMgaGVyZS5cbiAgICBza2lwTm9uV2l0bmVzc1V0eG8/OiBib29sZWFuO1xuICB9XG4pOiB2b2lkIHtcbiAgY29uc3QgeyBzaWduZXJzLCBkZXRlcm1pbmlzdGljIH0gPSBwYXJhbXMgPz8ge307XG4gIGlucHV0cy5mb3JFYWNoKChpbnB1dCwgaW5wdXRJbmRleCkgPT4ge1xuICAgIHNpZ25Qc2J0SW5wdXQocHNidCwgaW5wdXQsIGlucHV0SW5kZXgsIHJvb3RXYWxsZXRLZXlzLCBzaWduLCB7IHNpZ25lcnMsIGRldGVybWluaXN0aWMgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIGNvbnN0cnVjdCBwc2J0IGZvciBnaXZlbiBpbnB1dHMsIG91dHB1dHMsIG5ldHdvcmsgYW5kIHJvb3Qgd2FsbGV0IGtleXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RQc2J0KFxuICBpbnB1dHM6IElucHV0W10sXG4gIG91dHB1dHM6IE91dHB1dFtdLFxuICBuZXR3b3JrOiBOZXR3b3JrLFxuICByb290V2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIHNpZ25TdGFnZTogU2lnblN0YWdlLFxuICBwYXJhbXM/OiB7XG4gICAgcDJzaFAycGtLZXk/OiBCdWZmZXI7XG4gICAgc2lnbmVycz86IHsgc2lnbmVyTmFtZTogS2V5TmFtZTsgY29zaWduZXJOYW1lPzogS2V5TmFtZSB9O1xuICAgIGRldGVybWluaXN0aWM/OiBib29sZWFuO1xuICAgIHNraXBOb25XaXRuZXNzVXR4bz86IGJvb2xlYW47XG4gICAgYWRkR2xvYmFsWFB1YnM/OiBib29sZWFuO1xuICB9XG4pOiBVdHhvUHNidCB7XG4gIGNvbnN0IHsgc2lnbmVycywgZGV0ZXJtaW5pc3RpYywgc2tpcE5vbldpdG5lc3NVdHhvIH0gPSBwYXJhbXMgPz8ge307XG4gIGNvbnN0IHRvdGFsSW5wdXRBbW91bnQgPSBpbnB1dHMucmVkdWNlKChzdW0sIGlucHV0KSA9PiBzdW0gKyBpbnB1dC52YWx1ZSwgQmlnSW50KDApKTtcbiAgY29uc3Qgb3V0cHV0SW5wdXRBbW91bnQgPSBvdXRwdXRzLnJlZHVjZSgoc3VtLCBvdXRwdXQpID0+IHN1bSArIG91dHB1dC52YWx1ZSwgQmlnSW50KDApKTtcbiAgYXNzZXJ0KHRvdGFsSW5wdXRBbW91bnQgPj0gb3V0cHV0SW5wdXRBbW91bnQsICd0b3RhbCBvdXRwdXQgY2FuIG5vdCBleGNlZWQgdG90YWwgaW5wdXQnKTtcblxuICBjb25zdCBwc2J0ID0gY3JlYXRlUHNidEZvck5ldHdvcmsoeyBuZXR3b3JrIH0pO1xuXG4gIGlmIChwYXJhbXM/LmFkZEdsb2JhbFhQdWJzKSB7XG4gICAgYWRkWHB1YnNUb1BzYnQocHNidCwgcm9vdFdhbGxldEtleXMpO1xuICB9XG5cbiAgY29uc3QgdW5zcGVudHMgPSBpbnB1dHMubWFwKChpbnB1dCwgaSkgPT5cbiAgICB0b1Vuc3BlbnQoaW5wdXQsIGksIG5ldHdvcmssIHJvb3RXYWxsZXRLZXlzLCB7IHAyc2hQMnBrS2V5OiBwYXJhbXM/LnAyc2hQMnBrS2V5IH0pXG4gICk7XG5cbiAgdW5zcGVudHMuZm9yRWFjaCgodSwgaSkgPT4ge1xuICAgIGNvbnN0IHsgc2lnbmVyTmFtZSwgY29zaWduZXJOYW1lIH0gPSBzaWduZXJzID8gc2lnbmVycyA6IGdldFNpZ25lcnMoaW5wdXRzW2ldLnNjcmlwdFR5cGUpO1xuICAgIGlmIChpc1dhbGxldFVuc3BlbnQodSkgJiYgY29zaWduZXJOYW1lKSB7XG4gICAgICBhZGRXYWxsZXRVbnNwZW50VG9Qc2J0KHBzYnQsIHUsIHJvb3RXYWxsZXRLZXlzLCBzaWduZXJOYW1lLCBjb3NpZ25lck5hbWUsIHsgc2tpcE5vbldpdG5lc3NVdHhvIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7IHJlZGVlbVNjcmlwdCB9ID0gY3JlYXRlT3V0cHV0U2NyaXB0UDJzaFAycGsocGFyYW1zPy5wMnNoUDJwa0tleSA/PyByb290V2FsbGV0S2V5cy51c2VyLnB1YmxpY0tleSk7XG4gICAgICBhc3NlcnQocmVkZWVtU2NyaXB0KTtcbiAgICAgIGFkZFJlcGxheVByb3RlY3Rpb25VbnNwZW50VG9Qc2J0KHBzYnQsIHUsIHJlZGVlbVNjcmlwdCwgeyBza2lwTm9uV2l0bmVzc1V0eG8gfSk7XG4gICAgfVxuICB9KTtcblxuICBvdXRwdXRzLmZvckVhY2goKG91dHB1dCwgaSkgPT4ge1xuICAgIGlmICgnc2NyaXB0VHlwZScgaW4gb3V0cHV0KSB7XG4gICAgICBhZGRXYWxsZXRPdXRwdXRUb1BzYnQoXG4gICAgICAgIHBzYnQsXG4gICAgICAgIG91dHB1dC53YWxsZXRLZXlzID8/IHJvb3RXYWxsZXRLZXlzLFxuICAgICAgICBvdXRwdXQuaXNJbnRlcm5hbEFkZHJlc3MgPyBnZXRJbnRlcm5hbENoYWluQ29kZShvdXRwdXQuc2NyaXB0VHlwZSkgOiBnZXRFeHRlcm5hbENoYWluQ29kZShvdXRwdXQuc2NyaXB0VHlwZSksXG4gICAgICAgIGksXG4gICAgICAgIG91dHB1dC52YWx1ZSxcbiAgICAgICAgeyBhZGREZXJpdmF0aW9uSW5mbzogb3V0cHV0LndhbGxldEtleXMgIT09IG51bGwgfVxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKCdhZGRyZXNzJyBpbiBvdXRwdXQpIHtcbiAgICAgIGNvbnN0IHsgYWRkcmVzcywgdmFsdWUgfSA9IG91dHB1dDtcbiAgICAgIHBzYnQuYWRkT3V0cHV0KHsgc2NyaXB0OiB0b091dHB1dFNjcmlwdChhZGRyZXNzLCBuZXR3b3JrKSwgdmFsdWUgfSk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmICgnb3BSZXR1cm4nIGluIG91dHB1dCkge1xuICAgICAgY29uc3QgeyBvcFJldHVybiwgdmFsdWUgfSA9IG91dHB1dDtcbiAgICAgIGNvbnN0IHNjcmlwdCA9IGJpdGNvaW5qc2xpYi5wYXltZW50cy5lbWJlZCh7IGRhdGE6IFtCdWZmZXIuZnJvbShvcFJldHVybiwgJ2FzY2lpJyldIH0pLm91dHB1dDtcbiAgICAgIGFzc2VydChzY3JpcHQsICdzY3JpcHQgaXMgcmVxdWlyZWQnKTtcbiAgICAgIHBzYnQuYWRkT3V0cHV0KHsgc2NyaXB0LCB2YWx1ZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKCdzY3JpcHQnIGluIG91dHB1dCkge1xuICAgICAgY29uc3QgeyBzY3JpcHQsIHZhbHVlIH0gPSBvdXRwdXQ7XG4gICAgICBwc2J0LmFkZE91dHB1dCh7IHNjcmlwdDogQnVmZmVyLmZyb20oc2NyaXB0LCAnaGV4JyksIHZhbHVlIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBvdXRwdXQnKTtcbiAgfSk7XG5cbiAgaWYgKHNpZ25TdGFnZSA9PT0gJ3Vuc2lnbmVkJykge1xuICAgIHJldHVybiBwc2J0O1xuICB9XG5cbiAgLyogdXNlIGZpeGVkIHNlc3Npb25JZCBmb3IgZGV0ZXJtaW5pc3RpYyBub25jZSBjcmVhdGlvbiAqL1xuICBjb25zdCBzZXNzaW9uSWQgPSBCdWZmZXIuYWxsb2MoMzIpO1xuICBwc2J0LnNldEFsbElucHV0c011c2lnMk5vbmNlSEQocm9vdFdhbGxldEtleXNbJ3VzZXInXSwgeyBzZXNzaW9uSWQgfSk7XG4gIHBzYnQuc2V0QWxsSW5wdXRzTXVzaWcyTm9uY2VIRChyb290V2FsbGV0S2V5c1snYml0Z28nXSwgeyBkZXRlcm1pbmlzdGljIH0pO1xuXG4gIHNpZ25BbGxQc2J0SW5wdXRzKHBzYnQsIGlucHV0cywgcm9vdFdhbGxldEtleXMsICdoYWxmc2lnbmVkJywgeyBzaWduZXJzLCBza2lwTm9uV2l0bmVzc1V0eG8gfSk7XG5cbiAgaWYgKHNpZ25TdGFnZSA9PT0gJ2Z1bGxzaWduZWQnKSB7XG4gICAgc2lnbkFsbFBzYnRJbnB1dHMocHNidCwgaW5wdXRzLCByb290V2FsbGV0S2V5cywgc2lnblN0YWdlLCB7IHNpZ25lcnMsIGRldGVybWluaXN0aWMsIHNraXBOb25XaXRuZXNzVXR4byB9KTtcbiAgfVxuXG4gIHJldHVybiBwc2J0O1xufVxuXG5leHBvcnQgY29uc3QgdHhGb3JtYXRzID0gWydwc2J0JywgJ3BzYnQtbGl0ZSddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgVHhGb3JtYXQgPSAodHlwZW9mIHR4Rm9ybWF0cylbbnVtYmVyXTtcblxudHlwZSBTdWl0ZUNvbmZpZyA9IHtcbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQsIHdlIGluY2x1ZGUgcDJ0ck11c2lnMiBzY3JpcHQgcGF0aCBpbiB0aGUgaW5wdXRzLlxuICAgKiBUaGlzIGlucHV0IGlzIGEgYml0IG9mIGEgd2VpcmRvIGJlY2F1c2UgaXQgaXMgc2lnbmVkIGJ5IHRoZSB1c2VyIGFuZCB0aGVcbiAgICogYmFja3VwIGtleSwgd2hpY2ggdXN1YWxseSBpcyBub3QgbWl4ZWQgd2l0aCBvdGhlciBpbnB1dHMgYW5kIG91dHB1dHMuXG4gICAqXG4gICAqIFRoaXMgb3B0aW9uIGFsbG93cyB0byBleGNsdWRlIHRoaXMgaW5wdXQgZnJvbSB0aGUgaW5wdXRzLlxuICAgKi9cbiAgaW5jbHVkZVAydHJNdXNpZzJTY3JpcHRQYXRoPzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIHZhbGlkIFBTQlQgd2l0aCBhcyBtYW55IGZlYXR1cmVzIGFzIHBvc3NpYmxlLlxuICpcbiAqIC0gSW5wdXRzOlxuICogICAtIEFsbCB3YWxsZXQgc2NyaXB0IHR5cGVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSB0aGUgbmV0d29yay5cbiAqICAgLSBBIHAyc2hQMnBrIGlucHV0IChmb3IgcmVwbGF5IHByb3RlY3Rpb24pXG4gKiAtIE91dHB1dHM6XG4gKiAgIC0gQWxsIHdhbGxldCBzY3JpcHQgdHlwZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBuZXR3b3JrLlxuICogICAtIEEgcDJzaCBvdXRwdXQgd2l0aCBkZXJpdmF0aW9uIGluZm8gb2YgYSBkaWZmZXJlbnQgd2FsbGV0IChub3QgaW4gdGhlIGdsb2JhbCBwc2J0IHhwdWJzKVxuICogICAtIEEgcDJzaCBvdXRwdXQgd2l0aCBubyBkZXJpdmF0aW9uIGluZm8gKGV4dGVybmFsIG91dHB1dClcbiAqICAgLSBBbiBPUF9SRVRVUk4gb3V0cHV0XG4gKi9cbmV4cG9ydCBjbGFzcyBBY2lkVGVzdCB7XG4gIHB1YmxpYyByZWFkb25seSBuZXR3b3JrOiBOZXR3b3JrO1xuICBwdWJsaWMgcmVhZG9ubHkgc2lnblN0YWdlOiBTaWduU3RhZ2U7XG4gIHB1YmxpYyByZWFkb25seSB0eEZvcm1hdDogVHhGb3JtYXQ7XG4gIHB1YmxpYyByZWFkb25seSByb290V2FsbGV0S2V5czogUm9vdFdhbGxldEtleXM7XG4gIHB1YmxpYyByZWFkb25seSBvdGhlcldhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzO1xuICBwdWJsaWMgcmVhZG9ubHkgaW5wdXRzOiBJbnB1dFtdO1xuICBwdWJsaWMgcmVhZG9ubHkgb3V0cHV0czogT3V0cHV0W107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbmV0d29yazogTmV0d29yayxcbiAgICBzaWduU3RhZ2U6IFNpZ25TdGFnZSxcbiAgICB0eEZvcm1hdDogVHhGb3JtYXQsXG4gICAgcm9vdFdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzLFxuICAgIG90aGVyV2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gICAgaW5wdXRzOiBJbnB1dFtdLFxuICAgIG91dHB1dHM6IE91dHB1dFtdXG4gICkge1xuICAgIHRoaXMubmV0d29yayA9IG5ldHdvcms7XG4gICAgdGhpcy5zaWduU3RhZ2UgPSBzaWduU3RhZ2U7XG4gICAgdGhpcy50eEZvcm1hdCA9IHR4Rm9ybWF0O1xuICAgIHRoaXMucm9vdFdhbGxldEtleXMgPSByb290V2FsbGV0S2V5cztcbiAgICB0aGlzLm90aGVyV2FsbGV0S2V5cyA9IG90aGVyV2FsbGV0S2V5cztcbiAgICB0aGlzLmlucHV0cyA9IGlucHV0cztcbiAgICB0aGlzLm91dHB1dHMgPSBvdXRwdXRzO1xuICB9XG5cbiAgc3RhdGljIHdpdGhDb25maWcobmV0d29yazogTmV0d29yaywgc2lnblN0YWdlOiBTaWduU3RhZ2UsIHR4Rm9ybWF0OiBUeEZvcm1hdCwgc3VpdGVDb25maWc6IFN1aXRlQ29uZmlnKTogQWNpZFRlc3Qge1xuICAgIGNvbnN0IHJvb3RXYWxsZXRLZXlzID0gZ2V0RGVmYXVsdFdhbGxldEtleXMoKTtcblxuICAgIGNvbnN0IG90aGVyV2FsbGV0S2V5cyA9IGdldFdhbGxldEtleXNGb3JTZWVkKCd0b28gbWFueSBzZWNyZXRzJyk7XG4gICAgY29uc3QgaW5wdXRzOiBJbnB1dFtdID0gaW5wdXRTY3JpcHRUeXBlc1xuICAgICAgLmZpbHRlcigoc2NyaXB0VHlwZSkgPT5cbiAgICAgICAgc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnXG4gICAgICAgICAgPyBpc1N1cHBvcnRlZFNjcmlwdFR5cGUobmV0d29yaywgJ3AydHJNdXNpZzInKVxuICAgICAgICAgIDogaXNTdXBwb3J0ZWRTY3JpcHRUeXBlKG5ldHdvcmssIHNjcmlwdFR5cGUpXG4gICAgICApXG4gICAgICAuZmlsdGVyKChzY3JpcHRUeXBlKSA9PiAoc3VpdGVDb25maWcuaW5jbHVkZVAydHJNdXNpZzJTY3JpcHRQYXRoID8/IHRydWUpIHx8IHNjcmlwdFR5cGUgIT09ICdwMnRyTXVzaWcyJylcbiAgICAgIC5tYXAoKHNjcmlwdFR5cGUpID0+ICh7IHNjcmlwdFR5cGUsIHZhbHVlOiBCaWdJbnQoMjAwMCkgfSkpO1xuXG4gICAgY29uc3Qgb3V0cHV0czogT3V0cHV0W10gPSBvdXRwdXRTY3JpcHRUeXBlc1xuICAgICAgLmZpbHRlcigoc2NyaXB0VHlwZSkgPT4gaXNTdXBwb3J0ZWRTY3JpcHRUeXBlKG5ldHdvcmssIHNjcmlwdFR5cGUpKVxuICAgICAgLm1hcCgoc2NyaXB0VHlwZSkgPT4gKHsgc2NyaXB0VHlwZSwgdmFsdWU6IEJpZ0ludCg5MDApIH0pKTtcblxuICAgIC8vIFRlc3Qgb3RoZXIgd2FsbGV0IG91dHB1dCAod2l0aCBkZXJpdmF0aW9uIGluZm8pXG4gICAgb3V0cHV0cy5wdXNoKHsgc2NyaXB0VHlwZTogJ3Ayc2gnLCB2YWx1ZTogQmlnSW50KDkwMCksIHdhbGxldEtleXM6IG90aGVyV2FsbGV0S2V5cyB9KTtcbiAgICAvLyBUZXMgbm9uLXdhbGxldCBvdXRwdXRcbiAgICBvdXRwdXRzLnB1c2goeyBzY3JpcHRUeXBlOiAncDJzaCcsIHZhbHVlOiBCaWdJbnQoOTAwKSwgd2FsbGV0S2V5czogbnVsbCB9KTtcbiAgICAvLyBUZXN0IE9QX1JFVFVSTiBvdXRwdXRcbiAgICBvdXRwdXRzLnB1c2goeyBvcFJldHVybjogJ3NldGVjIGFzdHJvbm9teScsIHZhbHVlOiBCaWdJbnQoMCkgfSk7XG5cbiAgICByZXR1cm4gbmV3IEFjaWRUZXN0KG5ldHdvcmssIHNpZ25TdGFnZSwgdHhGb3JtYXQsIHJvb3RXYWxsZXRLZXlzLCBvdGhlcldhbGxldEtleXMsIGlucHV0cywgb3V0cHV0cyk7XG4gIH1cblxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5ldHdvcmtOYW1lID0gZ2V0TmV0d29ya05hbWUodGhpcy5uZXR3b3JrKTtcbiAgICByZXR1cm4gYCR7bmV0d29ya05hbWV9ICR7dGhpcy5zaWduU3RhZ2V9ICR7dGhpcy50eEZvcm1hdH1gO1xuICB9XG5cbiAgZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmxpY0tleSgpOiBCdWZmZXIge1xuICAgIHJldHVybiB0aGlzLnJvb3RXYWxsZXRLZXlzLnVzZXIucHVibGljS2V5O1xuICB9XG5cbiAgZ2V0UmVwbGF5UHJvdGVjdGlvbk91dHB1dFNjcmlwdCgpOiBCdWZmZXIge1xuICAgIGNvbnN0IHsgc2NyaXB0UHViS2V5IH0gPSBjcmVhdGVPdXRwdXRTY3JpcHRQMnNoUDJwayh0aGlzLmdldFJlcGxheVByb3RlY3Rpb25QdWJsaWNLZXkoKSk7XG4gICAgYXNzZXJ0KHNjcmlwdFB1YktleSk7XG4gICAgcmV0dXJuIHNjcmlwdFB1YktleTtcbiAgfVxuXG4gIGNyZWF0ZVBzYnQoKTogVXR4b1BzYnQge1xuICAgIGNvbnN0IHBzYnQgPSBjb25zdHJ1Y3RQc2J0KHRoaXMuaW5wdXRzLCB0aGlzLm91dHB1dHMsIHRoaXMubmV0d29yaywgdGhpcy5yb290V2FsbGV0S2V5cywgdGhpcy5zaWduU3RhZ2UsIHtcbiAgICAgIGRldGVybWluaXN0aWM6IHRydWUsXG4gICAgICBhZGRHbG9iYWxYUHViczogdHJ1ZSxcbiAgICB9KTtcbiAgICBpZiAodGhpcy50eEZvcm1hdCA9PT0gJ3BzYnQtbGl0ZScpIHtcbiAgICAgIHJldHVybiBjbG9uZVBzYnRXaXRob3V0Tm9uV2l0bmVzc1V0eG8ocHNidCk7XG4gICAgfVxuICAgIHJldHVybiBwc2J0O1xuICB9XG5cbiAgc3RhdGljIHN1aXRlKHN1aXRlQ29uZmlnOiBTdWl0ZUNvbmZpZyA9IHt9KTogQWNpZFRlc3RbXSB7XG4gICAgcmV0dXJuIGdldE5ldHdvcmtMaXN0KClcbiAgICAgIC5maWx0ZXIoKG5ldHdvcmspID0+IGlzTWFpbm5ldChuZXR3b3JrKSAmJiBuZXR3b3JrICE9PSBuZXR3b3Jrcy5iaXRjb2luc3YpXG4gICAgICAuZmxhdE1hcCgobmV0d29yaykgPT5cbiAgICAgICAgc2lnblN0YWdlcy5mbGF0TWFwKChzaWduU3RhZ2UpID0+XG4gICAgICAgICAgdHhGb3JtYXRzLmZsYXRNYXAoKHR4Rm9ybWF0KSA9PiBBY2lkVGVzdC53aXRoQ29uZmlnKG5ldHdvcmssIHNpZ25TdGFnZSwgdHhGb3JtYXQsIHN1aXRlQ29uZmlnKSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFZlcmlmaWVzIHNpZ25hdHVyZXMgb2YgZnVsbHkgc2lnbmVkIHR4ICh3aXRoIHRhcHJvb3Qga2V5IHBhdGggc3VwcG9ydCkuXG4gKiBOT1RFOiB0YXByb290IGtleSBwYXRoIHR4IGNhbiBvbmx5IGJlIGJ1aWx0IGFuZCBzaWduZWQgd2l0aCBQU0JULlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5RnVsbHlTaWduZWRTaWduYXR1cmVzKFxuICB0eDogVXR4b1RyYW5zYWN0aW9uPGJpZ2ludD4sXG4gIHVuc3BlbnRzOiBVbnNwZW50PGJpZ2ludD5bXSxcbiAgd2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIHNpZ25lcjogS2V5TmFtZSxcbiAgY29zaWduZXI6IEtleU5hbWVcbik6IGJvb2xlYW4ge1xuICBjb25zdCBwcmV2T3V0cHV0cyA9IHVuc3BlbnRzLm1hcCgodSkgPT4gdG9PdXRwdXQodSwgdHgubmV0d29yaykpO1xuICByZXR1cm4gdW5zcGVudHMuZXZlcnkoKHUsIGluZGV4KSA9PiB7XG4gICAgaWYgKHBhcnNlU2lnbmF0dXJlU2NyaXB0Mk9mMyh0eC5pbnNbaW5kZXhdKS5zY3JpcHRUeXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFNpZ25hdHVyZVZlcmlmaWNhdGlvbnModHgsIGluZGV4LCB1LnZhbHVlLCB1bmRlZmluZWQsIHByZXZPdXRwdXRzKTtcbiAgICAgIHJldHVybiByZXN1bHQubGVuZ3RoID09PSAxICYmIHJlc3VsdFswXS5zaWduYXR1cmU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHZlcmlmeVNpZ25hdHVyZVdpdGhVbnNwZW50KHR4LCBpbmRleCwgdW5zcGVudHMsIHdhbGxldEtleXMpO1xuICAgICAgaWYgKChzaWduZXIgPT09ICd1c2VyJyAmJiBjb3NpZ25lciA9PT0gJ2JpdGdvJykgfHwgKHNpZ25lciA9PT0gJ2JpdGdvJyAmJiBjb3NpZ25lciA9PT0gJ3VzZXInKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0WzBdICYmICFyZXN1bHRbMV0gJiYgcmVzdWx0WzJdO1xuICAgICAgfSBlbHNlIGlmICgoc2lnbmVyID09PSAndXNlcicgJiYgY29zaWduZXIgPT09ICdiYWNrdXAnKSB8fCAoc2lnbmVyID09PSAnYmFja3VwJyAmJiBjb3NpZ25lciA9PT0gJ3VzZXInKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0WzBdICYmIHJlc3VsdFsxXSAmJiAhcmVzdWx0WzJdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICFyZXN1bHRbMF0gJiYgcmVzdWx0WzFdICYmIHJlc3VsdFsyXTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuIl19
@@ -4,8 +4,8 @@ import { Network } from '../networks';
4
4
  /**
5
5
  * input script type and value.
6
6
  */
7
- export declare type TxnInputScriptType = Exclude<ScriptType, 'p2trMusig2'>;
8
- export declare type TxnOutputScriptType = ScriptType2Of3;
7
+ export type TxnInputScriptType = Exclude<ScriptType, 'p2trMusig2'>;
8
+ export type TxnOutputScriptType = ScriptType2Of3;
9
9
  /**
10
10
  * output script type and value
11
11
  */
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/testutil/transaction.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAuC,MAAM,wBAAwB,CAAC;AACzG,OAAO,EAGL,OAAO,EAEP,cAAc,EACd,OAAO,EACP,sBAAsB,EAOvB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;GAEG;AACH,oBAAY,kBAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AACnE,oBAAY,mBAAmB,GAAG,cAAc,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,QAAQ,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM;IACvD,UAAU,EAAE,kBAAkB,CAAC;IAC/B,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,6DAAsE,CAAC;AAEvG;;GAEG;AACH,eAAO,MAAM,oBAAoB,+DAAkB,CAAC;AAEpD;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC1D,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,EACxB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,OAAO,CAAC,CAWlB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,kBAAkB,GAAG;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,CAK5G;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC1D,GAAG,EAAE,sBAAsB,CAAC,OAAO,CAAC,EACpC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,EACxB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,cAAc,EAC9B,IAAI,EAAE,YAAY,GAAG,YAAY,EACjC,OAAO,CAAC,EAAE;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GACxD,IAAI,CAuBN;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC9D,GAAG,EAAE,sBAAsB,CAAC,OAAO,CAAC,EACpC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,EAC3B,cAAc,EAAE,cAAc,EAC9B,IAAI,EAAE,YAAY,GAAG,YAAY,EACjC,OAAO,CAAC,EAAE;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GACxD,IAAI,CAIN;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACjE,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,EAC3B,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,EAC7B,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,cAAc,EAC9B,IAAI,EAAE,UAAU,GAAG,YAAY,GAAG,YAAY,EAC9C,OAAO,CAAC,EAAE;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GACxD,sBAAsB,CAAC,OAAO,CAAC,CA2CjC"}
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/testutil/transaction.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAuC,MAAM,wBAAwB,CAAC;AACzG,OAAO,EAGL,OAAO,EAEP,cAAc,EACd,OAAO,EACP,sBAAsB,EAOvB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AACnE,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,QAAQ,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM;IACvD,UAAU,EAAE,kBAAkB,CAAC;IAC/B,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,6DAAsE,CAAC;AAEvG;;GAEG;AACH,eAAO,MAAM,oBAAoB,+DAAkB,CAAC;AAEpD;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC1D,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,EACxB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,OAAO,CAAC,CAWlB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,kBAAkB,GAAG;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,CAK5G;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC1D,GAAG,EAAE,sBAAsB,CAAC,OAAO,CAAC,EACpC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,EACxB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,cAAc,EAC9B,IAAI,EAAE,YAAY,GAAG,YAAY,EACjC,OAAO,CAAC,EAAE;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GACxD,IAAI,CAuBN;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC9D,GAAG,EAAE,sBAAsB,CAAC,OAAO,CAAC,EACpC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,EAC3B,cAAc,EAAE,cAAc,EAC9B,IAAI,EAAE,YAAY,GAAG,YAAY,EACjC,OAAO,CAAC,EAAE;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GACxD,IAAI,CAIN;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACjE,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,EAC3B,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,EAC7B,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,cAAc,EAC9B,IAAI,EAAE,UAAU,GAAG,YAAY,GAAG,YAAY,EAC9C,OAAO,CAAC,EAAE;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GACxD,sBAAsB,CAAC,OAAO,CAAC,CA+CjC"}
@@ -1,7 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.constructTxnBuilder = exports.signAllTxnInputs = exports.signTxnInput = exports.getTxnSigners = exports.toTxnUnspent = exports.txnOutputScriptTypes = exports.txnInputScriptTypes = void 0;
4
- const assert = require("assert");
3
+ exports.txnOutputScriptTypes = exports.txnInputScriptTypes = void 0;
4
+ exports.toTxnUnspent = toTxnUnspent;
5
+ exports.getTxnSigners = getTxnSigners;
6
+ exports.signTxnInput = signTxnInput;
7
+ exports.signAllTxnInputs = signAllTxnInputs;
8
+ exports.constructTxnBuilder = constructTxnBuilder;
9
+ const assert_1 = require("assert");
5
10
  const outputScripts_1 = require("../bitgo/outputScripts");
6
11
  const bitgo_1 = require("../bitgo");
7
12
  const mock_1 = require("./mock");
@@ -18,18 +23,17 @@ exports.txnOutputScriptTypes = outputScripts_1.scriptTypes2Of3;
18
23
  */
19
24
  function toTxnUnspent(input, index, network, rootWalletKeys) {
20
25
  if (input.scriptType === 'p2shP2pk') {
21
- return mock_1.mockReplayProtectionUnspent(network, input.value, { key: rootWalletKeys['user'], vout: index });
26
+ return (0, mock_1.mockReplayProtectionUnspent)(network, input.value, { key: rootWalletKeys['user'], vout: index });
22
27
  }
23
28
  else {
24
- return mock_1.mockWalletUnspent(network, input.value, {
25
- chain: bitgo_1.getInternalChainCode(input.scriptType),
29
+ return (0, mock_1.mockWalletUnspent)(network, input.value, {
30
+ chain: (0, bitgo_1.getInternalChainCode)(input.scriptType),
26
31
  vout: index,
27
32
  keys: rootWalletKeys,
28
33
  index,
29
34
  });
30
35
  }
31
36
  }
32
- exports.toTxnUnspent = toTxnUnspent;
33
37
  /**
34
38
  * returns signer and cosigner names for TxnInputScriptType.
35
39
  * user and undefined as signer and cosigner respectively for p2shP2pk.
@@ -41,7 +45,6 @@ function getTxnSigners(inputType) {
41
45
  cosignerName: inputType === 'p2shP2pk' ? undefined : 'bitgo',
42
46
  };
43
47
  }
44
- exports.getTxnSigners = getTxnSigners;
45
48
  /**
46
49
  * signs with first or second signature for single input.
47
50
  * p2shP2pk is signed only with first sign.
@@ -51,17 +54,16 @@ function signTxnInput(txb, input, inputIndex, rootWalletKeys, sign, signers) {
51
54
  const unspent = toTxnUnspent(input, inputIndex, txb.network, rootWalletKeys);
52
55
  if (sign === 'halfsigned') {
53
56
  if (input.scriptType === 'p2shP2pk') {
54
- bitgo_1.signInputP2shP2pk(txb, inputIndex, rootWalletKeys[signerName]);
57
+ (0, bitgo_1.signInputP2shP2pk)(txb, inputIndex, rootWalletKeys[signerName]);
55
58
  }
56
- else if (bitgo_1.isWalletUnspent(unspent) && cosignerName) {
57
- bitgo_1.signInputWithUnspent(txb, inputIndex, unspent, bitgo_1.WalletUnspentSigner.from(rootWalletKeys, rootWalletKeys[signerName], rootWalletKeys[cosignerName]));
59
+ else if ((0, bitgo_1.isWalletUnspent)(unspent) && cosignerName) {
60
+ (0, bitgo_1.signInputWithUnspent)(txb, inputIndex, unspent, bitgo_1.WalletUnspentSigner.from(rootWalletKeys, rootWalletKeys[signerName], rootWalletKeys[cosignerName]));
58
61
  }
59
62
  }
60
- if (bitgo_1.isWalletUnspent(unspent) && sign === 'fullsigned' && cosignerName) {
61
- bitgo_1.signInputWithUnspent(txb, inputIndex, unspent, bitgo_1.WalletUnspentSigner.from(rootWalletKeys, rootWalletKeys[cosignerName], rootWalletKeys[signerName]));
63
+ if ((0, bitgo_1.isWalletUnspent)(unspent) && sign === 'fullsigned' && cosignerName) {
64
+ (0, bitgo_1.signInputWithUnspent)(txb, inputIndex, unspent, bitgo_1.WalletUnspentSigner.from(rootWalletKeys, rootWalletKeys[cosignerName], rootWalletKeys[signerName]));
62
65
  }
63
66
  }
64
- exports.signTxnInput = signTxnInput;
65
67
  /**
66
68
  * signs with first or second signature for all inputs.
67
69
  * p2shP2pk is signed only with first sign.
@@ -71,23 +73,23 @@ function signAllTxnInputs(txb, inputs, rootWalletKeys, sign, signers) {
71
73
  signTxnInput(txb, input, index, rootWalletKeys, sign, signers);
72
74
  });
73
75
  }
74
- exports.signAllTxnInputs = signAllTxnInputs;
75
76
  /**
76
77
  * construct transaction for given inputs, outputs, network and root wallet keys.
77
78
  */
78
79
  function constructTxnBuilder(inputs, outputs, network, rootWalletKeys, sign, signers) {
79
80
  const totalInputAmount = inputs.reduce((sum, input) => sum + BigInt(input.value), BigInt(0));
80
81
  const outputInputAmount = outputs.reduce((sum, output) => sum + BigInt(output.value), BigInt(0));
81
- assert(totalInputAmount >= outputInputAmount, 'total output can not exceed total input');
82
- assert(!outputs.some((o) => (o.scriptType && o.address) || (!o.scriptType && !o.address)), 'only either output script type or address should be provided');
83
- const txb = bitgo_1.createTransactionBuilderForNetwork(network);
82
+ (0, assert_1.ok)(totalInputAmount >= outputInputAmount, 'total output can not exceed total input');
83
+ (0, assert_1.ok)(outputs.every((o) => o.scriptType || o.address), 'must provide either scriptType or address for each output');
84
+ (0, assert_1.ok)(outputs.every((o) => !(o.scriptType && o.address)), 'cannot provide both scriptType and address for the same output');
85
+ const txb = (0, bitgo_1.createTransactionBuilderForNetwork)(network);
84
86
  const unspents = inputs.map((input, i) => toTxnUnspent(input, i, network, rootWalletKeys));
85
87
  unspents.forEach((u, i) => {
86
- bitgo_1.addToTransactionBuilder(txb, u);
88
+ (0, bitgo_1.addToTransactionBuilder)(txb, u);
87
89
  });
88
90
  outputs.forEach((output, i) => {
89
91
  const address = output.scriptType
90
- ? bitgo_1.getWalletAddress(rootWalletKeys, output.isInternalAddress ? bitgo_1.getInternalChainCode(output.scriptType) : bitgo_1.getExternalChainCode(output.scriptType), i, network)
92
+ ? (0, bitgo_1.getWalletAddress)(rootWalletKeys, output.isInternalAddress ? (0, bitgo_1.getInternalChainCode)(output.scriptType) : (0, bitgo_1.getExternalChainCode)(output.scriptType), i, network)
91
93
  : output.address;
92
94
  if (!address) {
93
95
  throw new Error('address is missing');
@@ -103,5 +105,4 @@ function constructTxnBuilder(inputs, outputs, network, rootWalletKeys, sign, sig
103
105
  }
104
106
  return txb;
105
107
  }
106
- exports.constructTxnBuilder = constructTxnBuilder;
107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdHV0aWwvdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQWlDO0FBRWpDLDBEQUF5RztBQUN6RyxvQ0Fja0I7QUFFbEIsaUNBQXdFO0FBMkJ4RTs7R0FFRztBQUNVLFFBQUEsbUJBQW1CLEdBQUcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsa0NBQWtCLENBQVUsQ0FBQztBQUV2Rzs7R0FFRztBQUNVLFFBQUEsb0JBQW9CLEdBQUcsK0JBQWUsQ0FBQztBQUVwRDs7R0FFRztBQUNILFNBQWdCLFlBQVksQ0FDMUIsS0FBd0IsRUFDeEIsS0FBYSxFQUNiLE9BQWdCLEVBQ2hCLGNBQThCO0lBRTlCLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7UUFDbkMsT0FBTyxrQ0FBMkIsQ0FBVSxPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDakg7U0FBTTtRQUNMLE9BQU8sd0JBQWlCLENBQVUsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFDdEQsS0FBSyxFQUFFLDRCQUFvQixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7WUFDN0MsSUFBSSxFQUFFLEtBQUs7WUFDWCxJQUFJLEVBQUUsY0FBYztZQUNwQixLQUFLO1NBQ04sQ0FBQyxDQUFDO0tBQ0o7QUFDSCxDQUFDO0FBaEJELG9DQWdCQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixhQUFhLENBQUMsU0FBNkI7SUFDekQsT0FBTztRQUNMLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLFlBQVksRUFBRSxTQUFTLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxD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QU0sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXJFLElBQUksSUFBSSxLQUFLLFlBQVksRUFBRTtRQUN6QixnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDOUQ7SUFFRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFsREQsa0RBa0RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7IFNjcmlwdFR5cGUsIFNjcmlwdFR5cGUyT2YzLCBzY3JpcHRUeXBlUDJzaFAycGssIHNjcmlwdFR5cGVzMk9mMyB9IGZyb20gJy4uL2JpdGdvL291dHB1dFNjcmlwdHMnO1xuaW1wb3J0IHtcbiAgZ2V0RXh0ZXJuYWxDaGFpbkNvZGUsXG4gIGlzV2FsbGV0VW5zcGVudCxcbiAgS2V5TmFtZSxcbiAgZ2V0SW50ZXJuYWxDaGFpbkNvZGUsXG4gIFJvb3RXYWxsZXRLZXlzLFxuICBVbnNwZW50LFxuICBVdHhvVHJhbnNhY3Rpb25CdWlsZGVyLFxuICBjcmVhdGVUcmFuc2FjdGlvbkJ1aWxkZXJGb3JOZXR3b3JrLFxuICBhZGRUb1RyYW5zYWN0aW9uQnVpbGRlcixcbiAgZ2V0V2FsbGV0QWRkcmVzcyxcbiAgc2lnbklucHV0UDJzaFAycGssXG4gIHNpZ25JbnB1dFdpdGhVbnNwZW50LFxuICBXYWxsZXRVbnNwZW50U2lnbmVyLFxufSBmcm9tICcuLi9iaXRnbyc7XG5pbXBvcnQgeyBOZXR3b3JrIH0gZnJvbSAnLi4vbmV0d29ya3MnO1xuaW1wb3J0IHsgbW9ja1JlcGxheVByb3RlY3Rpb25VbnNwZW50LCBtb2NrV2FsbGV0VW5zcGVudCB9IGZyb20gJy4vbW9jayc7XG5cbi8qKlxuICogaW5wdXQgc2NyaXB0IHR5cGUgYW5kIHZhbHVlLlxuICovXG5leHBvcnQgdHlwZSBUeG5JbnB1dFNjcmlwdFR5cGUgPSBFeGNsdWRlPFNjcmlwdFR5cGUsICdwMnRyTXVzaWcyJz47XG5leHBvcnQgdHlwZSBUeG5PdXRwdXRTY3JpcHRUeXBlID0gU2NyaXB0VHlwZTJPZjM7XG5cbi8qKlxuICogb3V0cHV0IHNjcmlwdCB0eXBlIGFuZCB2YWx1ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR4bklucHV0PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+IHtcbiAgc2NyaXB0VHlwZTogVHhuSW5wdXRTY3JpcHRUeXBlO1xuICB2YWx1ZTogVE51bWJlcjtcbn1cblxuLyoqXG4gKiBzaG91bGQgc2V0IGVpdGhlciBhZGRyZXNzIG9yIHNjcmlwdFR5cGUsIG5ldmVyIGJvdGguXG4gKiBzZXQgaXNJbnRlcm5hbEFkZHJlc3M9dHJ1ZSBmb3IgaW50ZXJuYWwgb3V0cHV0IGFkZHJlc3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUeG5PdXRwdXQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4ge1xuICBhZGRyZXNzPzogc3RyaW5nO1xuICBzY3JpcHRUeXBlPzogVHhuT3V0cHV0U2NyaXB0VHlwZTtcbiAgdmFsdWU6IFROdW1iZXI7XG4gIGlzSW50ZXJuYWxBZGRyZXNzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBhcnJheSBvZiBzdXBwb3J0ZWQgaW5wdXQgc2NyaXB0IHR5cGVzLlxuICovXG5leHBvcnQgY29uc3QgdHhuSW5wdXRTY3JpcHRUeXBlcyA9IFsncDJzaCcsICdwMnNoUDJ3c2gnLCAncDJ3c2gnLCAncDJ0cicsIHNjcmlwdFR5cGVQMnNoUDJwa10gYXMgY29uc3Q7XG5cbi8qKlxuICogYXJyYXkgb2Ygc3VwcG9ydGVkIG91dHB1dCBzY3JpcHQgdHlwZXMuXG4gKi9cbmV4cG9ydCBjb25zdCB0eG5PdXRwdXRTY3JpcHRUeXBlcyA9IHNjcmlwdFR5cGVzMk9mMztcblxuLyoqXG4gKiBjcmVhdGUgdW5zcGVudCBvYmplY3QgZnJvbSBpbnB1dCBzY3JpcHQgdHlwZSwgaW5kZXgsIG5ldHdvcmsgYW5kIHJvb3Qgd2FsbGV0IGtleS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvVHhuVW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgaW5wdXQ6IFR4bklucHV0PFROdW1iZXI+LFxuICBpbmRleDogbnVtYmVyLFxuICBuZXR3b3JrOiBOZXR3b3JrLFxuICByb290V2FsbGV0S2V5czogUm9vdFdhbGxldEtleXNcbik6IFVuc3BlbnQ8VE51bWJlcj4ge1xuICBpZiAoaW5wdXQuc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJykge1xuICAgIHJldHVybiBtb2NrUmVwbGF5UHJvdGVjdGlvblVuc3BlbnQ8VE51bWJlcj4obmV0d29yaywgaW5wdXQudmFsdWUsIHsga2V5OiByb290V2FsbGV0S2V5c1sndXNlciddLCB2b3V0OiBpbmRleCB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbW9ja1dhbGxldFVuc3BlbnQ8VE51bWJlcj4obmV0d29yaywgaW5wdXQudmFsdWUsIHtcbiAgICAgIGNoYWluOiBnZXRJbnRlcm5hbENoYWluQ29kZShpbnB1dC5zY3JpcHRUeXBlKSxcbiAgICAgIHZvdXQ6IGluZGV4LFxuICAgICAga2V5czogcm9vdFdhbGxldEtleXMsXG4gICAgICBpbmRleCxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIHJldHVybnMgc2lnbmVyIGFuZCBjb3NpZ25lciBuYW1lcyBmb3IgVHhuSW5wdXRTY3JpcHRUeXBlLlxuICogdXNlciBhbmQgdW5kZWZpbmVkIGFzIHNpZ25lciBhbmQgY29zaWduZXIgcmVzcGVjdGl2ZWx5IGZvciBwMnNoUDJway5cbiAqIHVzZXIgYW5kIGJpdGdvIGFzIHNpZ25lciBhbmQgY29zaWduZXIgcmVzcGVjdGl2ZWx5IGZvciBvdGhlciBpbnB1dCBzY3JpcHQgdHlwZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeG5TaWduZXJzKGlucHV0VHlwZTogVHhuSW5wdXRTY3JpcHRUeXBlKTogeyBzaWduZXJOYW1lOiBLZXlOYW1lOyBjb3NpZ25lck5hbWU/OiBLZXlOYW1lIH0ge1xuICByZXR1cm4ge1xuICAgIHNpZ25lck5hbWU6ICd1c2VyJyxcbiAgICBjb3NpZ25lck5hbWU6IGlucHV0VHlwZSA9PT0gJ3Ayc2hQMnBrJyA/IHVuZGVmaW5lZCA6ICdiaXRnbycsXG4gIH07XG59XG5cbi8qKlxuICogc2lnbnMgd2l0aCBmaXJzdCBvciBzZWNvbmQgc2lnbmF0dXJlIGZvciBzaW5nbGUgaW5wdXQuXG4gKiBwMnNoUDJwayBpcyBzaWduZWQgb25seSB3aXRoIGZpcnN0IHNpZ24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWduVHhuSW5wdXQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHR4YjogVXR4b1RyYW5zYWN0aW9uQnVpbGRlcjxUTnVtYmVyPixcbiAgaW5wdXQ6IFR4bklucHV0PFROdW1iZXI+LFxuICBpbnB1dEluZGV4OiBudW1iZXIsXG4gIHJvb3RXYWxsZXRLZXlzOiBSb290V2FsbGV0S2V5cyxcbiAgc2lnbjogJ2hhbGZzaWduZWQnIHwgJ2Z1bGxzaWduZWQnLFxuICBzaWduZXJzPzogeyBzaWduZXJOYW1lOiBLZXlOYW1lOyBjb3NpZ25lck5hbWU/OiBLZXlOYW1lIH1cbik6IHZvaWQge1xuICBjb25zdCB7IHNpZ25lck5hbWUsIGNvc2lnbmVyTmFtZSB9ID0gc2lnbmVycyA/IHNpZ25lcnMgOiBnZXRUeG5TaWduZXJzKGlucHV0LnNjcmlwdFR5cGUpO1xuICBjb25zdCB1bnNwZW50ID0gdG9UeG5VbnNwZW50KGlucHV0LCBpbnB1dEluZGV4LCB0eGIubmV0d29yaywgcm9vdFdhbGxldEtleXMpO1xuICBpZiAoc2lnbiA9PT0gJ2hhbGZzaWduZWQnKSB7XG4gICAgaWYgKGlucHV0LnNjcmlwdFR5cGUgPT09ICdwMnNoUDJwaycpIHtcbiAgICAgIHNpZ25JbnB1dFAyc2hQMnBrKHR4YiwgaW5wdXRJbmRleCwgcm9vdFdhbGxldEtleXNbc2lnbmVyTmFtZV0pO1xuICAgIH0gZWxzZSBpZiAoaXNXYWxsZXRVbnNwZW50KHVuc3BlbnQpICYmIGNvc2lnbmVyTmFtZSkge1xuICAgICAgc2lnbklucHV0V2l0aFVuc3BlbnQoXG4gICAgICAgIHR4YixcbiAgICAgICAgaW5wdXRJbmRleCxcbiAgICAgICAgdW5zcGVudCxcbiAgICAgICAgV2FsbGV0VW5zcGVudFNpZ25lci5mcm9tKHJvb3RXYWxsZXRLZXlzLCByb290V2FsbGV0S2V5c1tzaWduZXJOYW1lXSwgcm9vdFdhbGxldEtleXNbY29zaWduZXJOYW1lXSlcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGlmIChpc1dhbGxldFVuc3BlbnQodW5zcGVudCkgJiYgc2lnbiA9PT0gJ2Z1bGxzaWduZWQnICYmIGNvc2lnbmVyTmFtZSkge1xuICAgIHNpZ25JbnB1dFdpdGhVbnNwZW50KFxuICAgICAgdHhiLFxuICAgICAgaW5wdXRJbmRleCxcbiAgICAgIHVuc3BlbnQsXG4gICAgICBXYWxsZXRVbnNwZW50U2lnbmVyLmZyb20ocm9vdFdhbGxldEtleXMsIHJvb3RXYWxsZXRLZXlzW2Nvc2lnbmVyTmFtZV0sIHJvb3RXYWxsZXRLZXlzW3NpZ25lck5hbWVdKVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBzaWducyB3aXRoIGZpcnN0IG9yIHNlY29uZCBzaWduYXR1cmUgZm9yIGFsbCBpbnB1dHMuXG4gKiBwMnNoUDJwayBpcyBzaWduZWQgb25seSB3aXRoIGZpcnN0IHNpZ24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWduQWxsVHhuSW5wdXRzPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0eGI6IFV0eG9UcmFuc2FjdGlvbkJ1aWxkZXI8VE51bWJlcj4sXG4gIGlucHV0czogVHhuSW5wdXQ8VE51bWJlcj5bXSxcbiAgcm9vdFdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzLFxuICBzaWduOiAnaGFsZnNpZ25lZCcgfCAnZnVsbHNpZ25lZCcsXG4gIHNpZ25lcnM/OiB7IHNpZ25lck5hbWU6IEtleU5hbWU7IGNvc2lnbmVyTmFtZT86IEtleU5hbWUgfVxuKTogdm9pZCB7XG4gIGlucHV0cy5mb3JFYWNoKChpbnB1dCwgaW5kZXgpID0+IHtcbiAgICBzaWduVHhuSW5wdXQodHhiLCBpbnB1dCwgaW5kZXgsIHJvb3RXYWxsZXRLZXlzLCBzaWduLCBzaWduZXJzKTtcbiAgfSk7XG59XG5cbi8qKlxuICogY29uc3RydWN0IHRyYW5zYWN0aW9uIGZvciBnaXZlbiBpbnB1dHMsIG91dHB1dHMsIG5ldHdvcmsgYW5kIHJvb3Qgd2FsbGV0IGtleXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RUeG5CdWlsZGVyPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICBpbnB1dHM6IFR4bklucHV0PFROdW1iZXI+W10sXG4gIG91dHB1dHM6IFR4bk91dHB1dDxUTnVtYmVyPltdLFxuICBuZXR3b3JrOiBOZXR3b3JrLFxuICByb290V2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIHNpZ246ICd1bnNpZ25lZCcgfCAnaGFsZnNpZ25lZCcgfCAnZnVsbHNpZ25lZCcsXG4gIHNpZ25lcnM/OiB7IHNpZ25lck5hbWU6IEtleU5hbWU7IGNvc2lnbmVyTmFtZT86IEtleU5hbWUgfVxuKTogVXR4b1RyYW5zYWN0aW9uQnVpbGRlcjxUTnVtYmVyPiB7XG4gIGNvbnN0IHRvdGFsSW5wdXRBbW91bnQgPSBpbnB1dHMucmVkdWNlKChzdW0sIGlucHV0KSA9PiBzdW0gKyBCaWdJbnQoaW5wdXQudmFsdWUpLCBCaWdJbnQoMCkpO1xuICBjb25zdCBvdXRwdXRJbnB1dEFtb3VudCA9IG91dHB1dHMucmVkdWNlKChzdW0sIG91dHB1dCkgPT4gc3VtICsgQmlnSW50KG91dHB1dC52YWx1ZSksIEJpZ0ludCgwKSk7XG4gIGFzc2VydCh0b3RhbElucHV0QW1vdW50ID49IG91dHB1dElucHV0QW1vdW50LCAndG90YWwgb3V0cHV0IGNhbiBub3QgZXhjZWVkIHRvdGFsIGlucHV0Jyk7XG4gIGFzc2VydChcbiAgICAhb3V0cHV0cy5zb21lKChvKSA9PiAoby5zY3JpcHRUeXBlICYmIG8uYWRkcmVzcykgfHwgKCFvLnNjcmlwdFR5cGUgJiYgIW8uYWRkcmVzcykpLFxuICAgICdvbmx5IGVpdGhlciBvdXRwdXQgc2NyaXB0IHR5cGUgb3IgYWRkcmVzcyBzaG91bGQgYmUgcHJvdmlkZWQnXG4gICk7XG5cbiAgY29uc3QgdHhiID0gY3JlYXRlVHJhbnNhY3Rpb25CdWlsZGVyRm9yTmV0d29yazxUTnVtYmVyPihuZXR3b3JrKTtcblxuICBjb25zdCB1bnNwZW50cyA9IGlucHV0cy5tYXAoKGlucHV0LCBpKSA9PiB0b1R4blVuc3BlbnQoaW5wdXQsIGksIG5ldHdvcmssIHJvb3RXYWxsZXRLZXlzKSk7XG5cbiAgdW5zcGVudHMuZm9yRWFjaCgodSwgaSkgPT4ge1xuICAgIGFkZFRvVHJhbnNhY3Rpb25CdWlsZGVyKHR4YiwgdSk7XG4gIH0pO1xuXG4gIG91dHB1dHMuZm9yRWFjaCgob3V0cHV0LCBpKSA9PiB7XG4gICAgY29uc3QgYWRkcmVzcyA9IG91dHB1dC5zY3JpcHRUeXBlXG4gICAgICA/IGdldFdhbGxldEFkZHJlc3MoXG4gICAgICAgICAgcm9vdFdhbGxldEtleXMsXG4gICAgICAgICAgb3V0cHV0LmlzSW50ZXJuYWxBZGRyZXNzID8gZ2V0SW50ZXJuYWxDaGFpbkNvZGUob3V0cHV0LnNjcmlwdFR5cGUpIDogZ2V0RXh0ZXJuYWxDaGFpbkNvZGUob3V0cHV0LnNjcmlwdFR5cGUpLFxuICAgICAgICAgIGksXG4gICAgICAgICAgbmV0d29ya1xuICAgICAgICApXG4gICAgICA6IG91dHB1dC5hZGRyZXNzO1xuICAgIGlmICghYWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdhZGRyZXNzIGlzIG1pc3NpbmcnKTtcbiAgICB9XG4gICAgdHhiLmFkZE91dHB1dChhZGRyZXNzLCBvdXRwdXQudmFsdWUpO1xuICB9KTtcblxuICBpZiAoc2lnbiA9PT0gJ3Vuc2lnbmVkJykge1xuICAgIHJldHVybiB0eGI7XG4gIH1cblxuICBzaWduQWxsVHhuSW5wdXRzKHR4YiwgaW5wdXRzLCByb290V2FsbGV0S2V5cywgJ2hhbGZzaWduZWQnLCBzaWduZXJzKTtcblxuICBpZiAoc2lnbiA9PT0gJ2Z1bGxzaWduZWQnKSB7XG4gICAgc2lnbkFsbFR4bklucHV0cyh0eGIsIGlucHV0cywgcm9vdFdhbGxldEtleXMsIHNpZ24sIHNpZ25lcnMpO1xuICB9XG5cbiAgcmV0dXJuIHR4Yjtcbn1cbiJdfQ==
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdHV0aWwvdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBMkRBLG9DQWdCQztBQU9ELHNDQUtDO0FBTUQsb0NBOEJDO0FBTUQsNENBVUM7QUFLRCxrREFzREM7QUF0TUQsbUNBQXNDO0FBRXRDLDBEQUF5RztBQUN6RyxvQ0Fja0I7QUFFbEIsaUNBQXdFO0FBMkJ4RTs7R0FFRztBQUNVLFFBQUEsbUJBQW1CLEdBQUcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsa0NBQWtCLENBQVUsQ0FBQztBQUV2Rzs7R0FFRztBQUNVLFFBQUEsb0JBQW9CLEdBQUcsK0JBQWUsQ0FBQztBQUVwRDs7R0FFRztBQUNILFNBQWdCLFlBQVksQ0FDMUIsS0FBd0IsRUFDeEIsS0FBYSxFQUNiLE9BQWdCLEVBQ2hCLGNBQThCO0lBRTlCLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUNwQyxPQUFPLElBQUEsa0NBQTJCLEVBQVUsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2xILENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxJQUFBLHdCQUFpQixFQUFVLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFO1lBQ3RELEtBQUssRUFBRSxJQUFBLDRCQUFvQixFQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7WUFDN0MsSUFBSSxFQUFFLEtBQUs7WUFDWCxJQUFJLEVBQUUsY0FBYztZQUNwQixLQUFLO1NBQ04sQ0FBQyxDQUFDO0lBQ0wsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsYUFBYSxDQUFDLFNBQTZCO0lBQ3pELE9BQU87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RSxDQUFDO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFDRCxHQUFHLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUN4QixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFckUsSUFBSSxJQUFJLEtBQUssWUFBWSxFQUFFLENBQUM7UUFDMUIsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBvayBhcyBhc3NlcnQgfSBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgeyBTY3JpcHRUeXBlLCBTY3JpcHRUeXBlMk9mMywgc2NyaXB0VHlwZVAyc2hQMnBrLCBzY3JpcHRUeXBlczJPZjMgfSBmcm9tICcuLi9iaXRnby9vdXRwdXRTY3JpcHRzJztcbmltcG9ydCB7XG4gIGdldEV4dGVybmFsQ2hhaW5Db2RlLFxuICBpc1dhbGxldFVuc3BlbnQsXG4gIEtleU5hbWUsXG4gIGdldEludGVybmFsQ2hhaW5Db2RlLFxuICBSb290V2FsbGV0S2V5cyxcbiAgVW5zcGVudCxcbiAgVXR4b1RyYW5zYWN0aW9uQnVpbGRlcixcbiAgY3JlYXRlVHJhbnNhY3Rpb25CdWlsZGVyRm9yTmV0d29yayxcbiAgYWRkVG9UcmFuc2FjdGlvbkJ1aWxkZXIsXG4gIGdldFdhbGxldEFkZHJlc3MsXG4gIHNpZ25JbnB1dFAyc2hQMnBrLFxuICBzaWduSW5wdXRXaXRoVW5zcGVudCxcbiAgV2FsbGV0VW5zcGVudFNpZ25lcixcbn0gZnJvbSAnLi4vYml0Z28nO1xuaW1wb3J0IHsgTmV0d29yayB9IGZyb20gJy4uL25ldHdvcmtzJztcbmltcG9ydCB7IG1vY2tSZXBsYXlQcm90ZWN0aW9uVW5zcGVudCwgbW9ja1dhbGxldFVuc3BlbnQgfSBmcm9tICcuL21vY2snO1xuXG4vKipcbiAqIGlucHV0IHNjcmlwdCB0eXBlIGFuZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IHR5cGUgVHhuSW5wdXRTY3JpcHRUeXBlID0gRXhjbHVkZTxTY3JpcHRUeXBlLCAncDJ0ck11c2lnMic+O1xuZXhwb3J0IHR5cGUgVHhuT3V0cHV0U2NyaXB0VHlwZSA9IFNjcmlwdFR5cGUyT2YzO1xuXG4vKipcbiAqIG91dHB1dCBzY3JpcHQgdHlwZSBhbmQgdmFsdWVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUeG5JbnB1dDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PiB7XG4gIHNjcmlwdFR5cGU6IFR4bklucHV0U2NyaXB0VHlwZTtcbiAgdmFsdWU6IFROdW1iZXI7XG59XG5cbi8qKlxuICogc2hvdWxkIHNldCBlaXRoZXIgYWRkcmVzcyBvciBzY3JpcHRUeXBlLCBuZXZlciBib3RoLlxuICogc2V0IGlzSW50ZXJuYWxBZGRyZXNzPXRydWUgZm9yIGludGVybmFsIG91dHB1dCBhZGRyZXNzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHhuT3V0cHV0PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+IHtcbiAgYWRkcmVzcz86IHN0cmluZztcbiAgc2NyaXB0VHlwZT86IFR4bk91dHB1dFNjcmlwdFR5cGU7XG4gIHZhbHVlOiBUTnVtYmVyO1xuICBpc0ludGVybmFsQWRkcmVzcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogYXJyYXkgb2Ygc3VwcG9ydGVkIGlucHV0IHNjcmlwdCB0eXBlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IHR4bklucHV0U2NyaXB0VHlwZXMgPSBbJ3Ayc2gnLCAncDJzaFAyd3NoJywgJ3Ayd3NoJywgJ3AydHInLCBzY3JpcHRUeXBlUDJzaFAycGtdIGFzIGNvbnN0O1xuXG4vKipcbiAqIGFycmF5IG9mIHN1cHBvcnRlZCBvdXRwdXQgc2NyaXB0IHR5cGVzLlxuICovXG5leHBvcnQgY29uc3QgdHhuT3V0cHV0U2NyaXB0VHlwZXMgPSBzY3JpcHRUeXBlczJPZjM7XG5cbi8qKlxuICogY3JlYXRlIHVuc3BlbnQgb2JqZWN0IGZyb20gaW5wdXQgc2NyaXB0IHR5cGUsIGluZGV4LCBuZXR3b3JrIGFuZCByb290IHdhbGxldCBrZXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1R4blVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIGlucHV0OiBUeG5JbnB1dDxUTnVtYmVyPixcbiAgaW5kZXg6IG51bWJlcixcbiAgbmV0d29yazogTmV0d29yayxcbiAgcm9vdFdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzXG4pOiBVbnNwZW50PFROdW1iZXI+IHtcbiAgaWYgKGlucHV0LnNjcmlwdFR5cGUgPT09ICdwMnNoUDJwaycpIHtcbiAgICByZXR1cm4gbW9ja1JlcGxheVByb3RlY3Rpb25VbnNwZW50PFROdW1iZXI+KG5ldHdvcmssIGlucHV0LnZhbHVlLCB7IGtleTogcm9vdFdhbGxldEtleXNbJ3VzZXInXSwgdm91dDogaW5kZXggfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG1vY2tXYWxsZXRVbnNwZW50PFROdW1iZXI+KG5ldHdvcmssIGlucHV0LnZhbHVlLCB7XG4gICAgICBjaGFpbjogZ2V0SW50ZXJuYWxDaGFpbkNvZGUoaW5wdXQuc2NyaXB0VHlwZSksXG4gICAgICB2b3V0OiBpbmRleCxcbiAgICAgIGtleXM6IHJvb3RXYWxsZXRLZXlzLFxuICAgICAgaW5kZXgsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiByZXR1cm5zIHNpZ25lciBhbmQgY29zaWduZXIgbmFtZXMgZm9yIFR4bklucHV0U2NyaXB0VHlwZS5cbiAqIHVzZXIgYW5kIHVuZGVmaW5lZCBhcyBzaWduZXIgYW5kIGNvc2lnbmVyIHJlc3BlY3RpdmVseSBmb3IgcDJzaFAycGsuXG4gKiB1c2VyIGFuZCBiaXRnbyBhcyBzaWduZXIgYW5kIGNvc2lnbmVyIHJlc3BlY3RpdmVseSBmb3Igb3RoZXIgaW5wdXQgc2NyaXB0IHR5cGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHhuU2lnbmVycyhpbnB1dFR5cGU6IFR4bklucHV0U2NyaXB0VHlwZSk6IHsgc2lnbmVyTmFtZTogS2V5TmFtZTsgY29zaWduZXJOYW1lPzogS2V5TmFtZSB9IHtcbiAgcmV0dXJuIHtcbiAgICBzaWduZXJOYW1lOiAndXNlcicsXG4gICAgY29zaWduZXJOYW1lOiBpbnB1dFR5cGUgPT09ICdwMnNoUDJwaycgPyB1bmRlZmluZWQgOiAnYml0Z28nLFxuICB9O1xufVxuXG4vKipcbiAqIHNpZ25zIHdpdGggZmlyc3Qgb3Igc2Vjb25kIHNpZ25hdHVyZSBmb3Igc2luZ2xlIGlucHV0LlxuICogcDJzaFAycGsgaXMgc2lnbmVkIG9ubHkgd2l0aCBmaXJzdCBzaWduLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnblR4bklucHV0PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0eGI6IFV0eG9UcmFuc2FjdGlvbkJ1aWxkZXI8VE51bWJlcj4sXG4gIGlucHV0OiBUeG5JbnB1dDxUTnVtYmVyPixcbiAgaW5wdXRJbmRleDogbnVtYmVyLFxuICByb290V2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIHNpZ246ICdoYWxmc2lnbmVkJyB8ICdmdWxsc2lnbmVkJyxcbiAgc2lnbmVycz86IHsgc2lnbmVyTmFtZTogS2V5TmFtZTsgY29zaWduZXJOYW1lPzogS2V5TmFtZSB9XG4pOiB2b2lkIHtcbiAgY29uc3QgeyBzaWduZXJOYW1lLCBjb3NpZ25lck5hbWUgfSA9IHNpZ25lcnMgPyBzaWduZXJzIDogZ2V0VHhuU2lnbmVycyhpbnB1dC5zY3JpcHRUeXBlKTtcbiAgY29uc3QgdW5zcGVudCA9IHRvVHhuVW5zcGVudChpbnB1dCwgaW5wdXRJbmRleCwgdHhiLm5ldHdvcmssIHJvb3RXYWxsZXRLZXlzKTtcbiAgaWYgKHNpZ24gPT09ICdoYWxmc2lnbmVkJykge1xuICAgIGlmIChpbnB1dC5zY3JpcHRUeXBlID09PSAncDJzaFAycGsnKSB7XG4gICAgICBzaWduSW5wdXRQMnNoUDJwayh0eGIsIGlucHV0SW5kZXgsIHJvb3RXYWxsZXRLZXlzW3NpZ25lck5hbWVdKTtcbiAgICB9IGVsc2UgaWYgKGlzV2FsbGV0VW5zcGVudCh1bnNwZW50KSAmJiBjb3NpZ25lck5hbWUpIHtcbiAgICAgIHNpZ25JbnB1dFdpdGhVbnNwZW50KFxuICAgICAgICB0eGIsXG4gICAgICAgIGlucHV0SW5kZXgsXG4gICAgICAgIHVuc3BlbnQsXG4gICAgICAgIFdhbGxldFVuc3BlbnRTaWduZXIuZnJvbShyb290V2FsbGV0S2V5cywgcm9vdFdhbGxldEtleXNbc2lnbmVyTmFtZV0sIHJvb3RXYWxsZXRLZXlzW2Nvc2lnbmVyTmFtZV0pXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAoaXNXYWxsZXRVbnNwZW50KHVuc3BlbnQpICYmIHNpZ24gPT09ICdmdWxsc2lnbmVkJyAmJiBjb3NpZ25lck5hbWUpIHtcbiAgICBzaWduSW5wdXRXaXRoVW5zcGVudChcbiAgICAgIHR4YixcbiAgICAgIGlucHV0SW5kZXgsXG4gICAgICB1bnNwZW50LFxuICAgICAgV2FsbGV0VW5zcGVudFNpZ25lci5mcm9tKHJvb3RXYWxsZXRLZXlzLCByb290V2FsbGV0S2V5c1tjb3NpZ25lck5hbWVdLCByb290V2FsbGV0S2V5c1tzaWduZXJOYW1lXSlcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogc2lnbnMgd2l0aCBmaXJzdCBvciBzZWNvbmQgc2lnbmF0dXJlIGZvciBhbGwgaW5wdXRzLlxuICogcDJzaFAycGsgaXMgc2lnbmVkIG9ubHkgd2l0aCBmaXJzdCBzaWduLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnbkFsbFR4bklucHV0czxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdHhiOiBVdHhvVHJhbnNhY3Rpb25CdWlsZGVyPFROdW1iZXI+LFxuICBpbnB1dHM6IFR4bklucHV0PFROdW1iZXI+W10sXG4gIHJvb3RXYWxsZXRLZXlzOiBSb290V2FsbGV0S2V5cyxcbiAgc2lnbjogJ2hhbGZzaWduZWQnIHwgJ2Z1bGxzaWduZWQnLFxuICBzaWduZXJzPzogeyBzaWduZXJOYW1lOiBLZXlOYW1lOyBjb3NpZ25lck5hbWU/OiBLZXlOYW1lIH1cbik6IHZvaWQge1xuICBpbnB1dHMuZm9yRWFjaCgoaW5wdXQsIGluZGV4KSA9PiB7XG4gICAgc2lnblR4bklucHV0KHR4YiwgaW5wdXQsIGluZGV4LCByb290V2FsbGV0S2V5cywgc2lnbiwgc2lnbmVycyk7XG4gIH0pO1xufVxuXG4vKipcbiAqIGNvbnN0cnVjdCB0cmFuc2FjdGlvbiBmb3IgZ2l2ZW4gaW5wdXRzLCBvdXRwdXRzLCBuZXR3b3JrIGFuZCByb290IHdhbGxldCBrZXlzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0VHhuQnVpbGRlcjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgaW5wdXRzOiBUeG5JbnB1dDxUTnVtYmVyPltdLFxuICBvdXRwdXRzOiBUeG5PdXRwdXQ8VE51bWJlcj5bXSxcbiAgbmV0d29yazogTmV0d29yayxcbiAgcm9vdFdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzLFxuICBzaWduOiAndW5zaWduZWQnIHwgJ2hhbGZzaWduZWQnIHwgJ2Z1bGxzaWduZWQnLFxuICBzaWduZXJzPzogeyBzaWduZXJOYW1lOiBLZXlOYW1lOyBjb3NpZ25lck5hbWU/OiBLZXlOYW1lIH1cbik6IFV0eG9UcmFuc2FjdGlvbkJ1aWxkZXI8VE51bWJlcj4ge1xuICBjb25zdCB0b3RhbElucHV0QW1vdW50ID0gaW5wdXRzLnJlZHVjZSgoc3VtLCBpbnB1dCkgPT4gc3VtICsgQmlnSW50KGlucHV0LnZhbHVlKSwgQmlnSW50KDApKTtcbiAgY29uc3Qgb3V0cHV0SW5wdXRBbW91bnQgPSBvdXRwdXRzLnJlZHVjZSgoc3VtLCBvdXRwdXQpID0+IHN1bSArIEJpZ0ludChvdXRwdXQudmFsdWUpLCBCaWdJbnQoMCkpO1xuICBhc3NlcnQodG90YWxJbnB1dEFtb3VudCA+PSBvdXRwdXRJbnB1dEFtb3VudCwgJ3RvdGFsIG91dHB1dCBjYW4gbm90IGV4Y2VlZCB0b3RhbCBpbnB1dCcpO1xuICBhc3NlcnQoXG4gICAgb3V0cHV0cy5ldmVyeSgobykgPT4gby5zY3JpcHRUeXBlIHx8IG8uYWRkcmVzcyksXG4gICAgJ211c3QgcHJvdmlkZSBlaXRoZXIgc2NyaXB0VHlwZSBvciBhZGRyZXNzIGZvciBlYWNoIG91dHB1dCdcbiAgKTtcbiAgYXNzZXJ0KFxuICAgIG91dHB1dHMuZXZlcnkoKG8pID0+ICEoby5zY3JpcHRUeXBlICYmIG8uYWRkcmVzcykpLFxuICAgICdjYW5ub3QgcHJvdmlkZSBib3RoIHNjcmlwdFR5cGUgYW5kIGFkZHJlc3MgZm9yIHRoZSBzYW1lIG91dHB1dCdcbiAgKTtcblxuICBjb25zdCB0eGIgPSBjcmVhdGVUcmFuc2FjdGlvbkJ1aWxkZXJGb3JOZXR3b3JrPFROdW1iZXI+KG5ldHdvcmspO1xuXG4gIGNvbnN0IHVuc3BlbnRzID0gaW5wdXRzLm1hcCgoaW5wdXQsIGkpID0+IHRvVHhuVW5zcGVudChpbnB1dCwgaSwgbmV0d29yaywgcm9vdFdhbGxldEtleXMpKTtcblxuICB1bnNwZW50cy5mb3JFYWNoKCh1LCBpKSA9PiB7XG4gICAgYWRkVG9UcmFuc2FjdGlvbkJ1aWxkZXIodHhiLCB1KTtcbiAgfSk7XG5cbiAgb3V0cHV0cy5mb3JFYWNoKChvdXRwdXQsIGkpID0+IHtcbiAgICBjb25zdCBhZGRyZXNzID0gb3V0cHV0LnNjcmlwdFR5cGVcbiAgICAgID8gZ2V0V2FsbGV0QWRkcmVzcyhcbiAgICAgICAgICByb290V2FsbGV0S2V5cyxcbiAgICAgICAgICBvdXRwdXQuaXNJbnRlcm5hbEFkZHJlc3MgPyBnZXRJbnRlcm5hbENoYWluQ29kZShvdXRwdXQuc2NyaXB0VHlwZSkgOiBnZXRFeHRlcm5hbENoYWluQ29kZShvdXRwdXQuc2NyaXB0VHlwZSksXG4gICAgICAgICAgaSxcbiAgICAgICAgICBuZXR3b3JrXG4gICAgICAgIClcbiAgICAgIDogb3V0cHV0LmFkZHJlc3M7XG4gICAgaWYgKCFhZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FkZHJlc3MgaXMgbWlzc2luZycpO1xuICAgIH1cbiAgICB0eGIuYWRkT3V0cHV0KGFkZHJlc3MsIG91dHB1dC52YWx1ZSk7XG4gIH0pO1xuXG4gIGlmIChzaWduID09PSAndW5zaWduZWQnKSB7XG4gICAgcmV0dXJuIHR4YjtcbiAgfVxuXG4gIHNpZ25BbGxUeG5JbnB1dHModHhiLCBpbnB1dHMsIHJvb3RXYWxsZXRLZXlzLCAnaGFsZnNpZ25lZCcsIHNpZ25lcnMpO1xuXG4gIGlmIChzaWduID09PSAnZnVsbHNpZ25lZCcpIHtcbiAgICBzaWduQWxsVHhuSW5wdXRzKHR4YiwgaW5wdXRzLCByb290V2FsbGV0S2V5cywgc2lnbiwgc2lnbmVycyk7XG4gIH1cblxuICByZXR1cm4gdHhiO1xufVxuIl19
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { Network } from './';
3
2
  import { TxOutput, Transaction } from './';
4
3
  export interface Signer {
@@ -1 +1 @@
1
- {"version":3,"file":"transaction_builder.d.ts","sourceRoot":"","sources":["../../src/transaction_builder.ts"],"names":[],"mappings":";AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAM7B,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAG3C,MAAM,WAAW,MAAM;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,IAAI,MAAM,CAAC;IACxB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3C,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CACnC;AAuED,UAAU,UAAU,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM;IAC3D,iBAAiB,EAAE,MAAM,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAsBD,qBAAa,kBAAkB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM;IAyCnD,OAAO,EAAE,OAAO;IAA4B,cAAc,EAAE,MAAM;IAxCrF,MAAM,CAAC,eAAe,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EAC7D,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,EACjC,OAAO,CAAC,EAAE,OAAO,EACjB,WAAW,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,GAChC,kBAAkB,CAAC,OAAO,CAAC;IA6B9B,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,QAAQ,CAA2B;IAC3C,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,WAAW,CAAU;gBAIV,OAAO,GAAE,OAA0B,EAAS,cAAc,GAAE,MAAa;IAe5F,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO;IASnC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAiBnC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOjC,QAAQ,CACN,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,EAC9C,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,MAAM,EACtB,KAAK,CAAC,EAAE,OAAO,GACd,MAAM;IA0BT,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM;IAahE,KAAK,IAAI,WAAW,CAAC,OAAO,CAAC;IAI7B,eAAe,IAAI,WAAW,CAAC,OAAO,CAAC;IAIvC,IAAI,CACF,UAAU,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,EACxC,OAAO,CAAC,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,OAAO,EACtB,aAAa,CAAC,EAAE,MAAM,EACtB,YAAY,CAAC,EAAE,MAAM,EACrB,KAAK,CAAC,EAAE,MAAM,GACb,IAAI;IAoBP,OAAO,CAAC,gBAAgB;IA4CxB,OAAO,CAAC,OAAO;IAmCf,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,kBAAkB;IAwB1B,OAAO,CAAC,iBAAiB;CAe1B"}
1
+ {"version":3,"file":"transaction_builder.d.ts","sourceRoot":"","sources":["../../src/transaction_builder.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAM7B,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAG3C,MAAM,WAAW,MAAM;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,IAAI,MAAM,CAAC;IACxB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3C,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CACnC;AAuED,UAAU,UAAU,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM;IAC3D,iBAAiB,EAAE,MAAM,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAsBD,qBAAa,kBAAkB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM;IAyCnD,OAAO,EAAE,OAAO;IAA4B,cAAc,EAAE,MAAM;IAxCrF,MAAM,CAAC,eAAe,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EAC7D,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,EACjC,OAAO,CAAC,EAAE,OAAO,EACjB,WAAW,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,GAChC,kBAAkB,CAAC,OAAO,CAAC;IA6B9B,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,QAAQ,CAA2B;IAC3C,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,WAAW,CAAU;gBAIV,OAAO,GAAE,OAA0B,EAAS,cAAc,GAAE,MAAa;IAQ5F,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO;IASnC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAiBnC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOjC,QAAQ,CACN,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,EAC9C,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,MAAM,EACtB,KAAK,CAAC,EAAE,OAAO,GACd,MAAM;IA0BT,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM;IAahE,KAAK,IAAI,WAAW,CAAC,OAAO,CAAC;IAI7B,eAAe,IAAI,WAAW,CAAC,OAAO,CAAC;IAIvC,IAAI,CACF,UAAU,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,EACxC,OAAO,CAAC,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,OAAO,EACtB,aAAa,CAAC,EAAE,MAAM,EACtB,YAAY,CAAC,EAAE,MAAM,EACrB,KAAK,CAAC,EAAE,MAAM,GACb,IAAI;IAoBP,OAAO,CAAC,gBAAgB;IA4CxB,OAAO,CAAC,OAAO;IAmCf,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,kBAAkB;IAwB1B,OAAO,CAAC,iBAAiB;CAe1B"}