@bitgo-beta/sdk-coin-sol 7.6.4-beta.72 → 7.6.4-beta.721

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 (508) hide show
  1. package/dist/cjs/src/bigint-buffer-guard.d.ts.map +1 -0
  2. package/dist/cjs/src/bigint-buffer-guard.js +29 -0
  3. package/dist/cjs/src/index.d.ts.map +1 -0
  4. package/dist/{src → cjs/src}/index.js +1 -1
  5. package/dist/{src → cjs/src}/lib/ataInitializationBuilder.d.ts +12 -1
  6. package/dist/cjs/src/lib/ataInitializationBuilder.d.ts.map +1 -0
  7. package/dist/cjs/src/lib/ataInitializationBuilder.js +231 -0
  8. package/dist/cjs/src/lib/closeAtaBuilder.d.ts +55 -0
  9. package/dist/cjs/src/lib/closeAtaBuilder.d.ts.map +1 -0
  10. package/dist/cjs/src/lib/closeAtaBuilder.js +162 -0
  11. package/dist/cjs/src/lib/confidentialTransferBuilder.d.ts +128 -0
  12. package/dist/cjs/src/lib/confidentialTransferBuilder.d.ts.map +1 -0
  13. package/dist/cjs/src/lib/confidentialTransferBuilder.js +311 -0
  14. package/dist/{src → cjs/src}/lib/constants.d.ts +96 -2
  15. package/dist/cjs/src/lib/constants.d.ts.map +1 -0
  16. package/dist/cjs/src/lib/constants.js +276 -0
  17. package/dist/{src → cjs/src}/lib/customInstructionBuilder.d.ts +13 -2
  18. package/dist/cjs/src/lib/customInstructionBuilder.d.ts.map +1 -0
  19. package/dist/cjs/src/lib/customInstructionBuilder.js +392 -0
  20. package/dist/cjs/src/lib/explainTransactionWasm.d.ts +21 -0
  21. package/dist/cjs/src/lib/explainTransactionWasm.d.ts.map +1 -0
  22. package/dist/cjs/src/lib/explainTransactionWasm.js +304 -0
  23. package/dist/cjs/src/lib/iface.d.ts +526 -0
  24. package/dist/cjs/src/lib/iface.d.ts.map +1 -0
  25. package/dist/cjs/src/lib/iface.js +7 -0
  26. package/dist/{src → cjs/src}/lib/index.d.ts +6 -0
  27. package/dist/cjs/src/lib/index.d.ts.map +1 -0
  28. package/dist/cjs/src/lib/index.js +97 -0
  29. package/dist/{src → cjs/src}/lib/instructionParamsFactory.d.ts +3 -1
  30. package/dist/cjs/src/lib/instructionParamsFactory.d.ts.map +1 -0
  31. package/dist/cjs/src/lib/instructionParamsFactory.js +1280 -0
  32. package/dist/cjs/src/lib/jitoStakePoolOperations.d.ts.map +1 -0
  33. package/dist/cjs/src/lib/jitoStakePoolOperations.js +200 -0
  34. package/dist/{src → cjs/src}/lib/keyPair.d.ts +6 -0
  35. package/dist/cjs/src/lib/keyPair.d.ts.map +1 -0
  36. package/dist/cjs/src/lib/keyPair.js +112 -0
  37. package/dist/cjs/src/lib/messages/index.d.ts.map +1 -0
  38. package/dist/{src → cjs/src}/lib/messages/index.js +1 -1
  39. package/dist/cjs/src/lib/messages/messageBuilderFactory.d.ts.map +1 -0
  40. package/dist/cjs/src/lib/messages/messageBuilderFactory.js +19 -0
  41. package/dist/cjs/src/lib/recoverNestedAtaBuilder.d.ts +25 -0
  42. package/dist/cjs/src/lib/recoverNestedAtaBuilder.d.ts.map +1 -0
  43. package/dist/cjs/src/lib/recoverNestedAtaBuilder.js +90 -0
  44. package/dist/cjs/src/lib/scaledUiAmount.d.ts +30 -0
  45. package/dist/cjs/src/lib/scaledUiAmount.d.ts.map +1 -0
  46. package/dist/cjs/src/lib/scaledUiAmount.js +112 -0
  47. package/dist/cjs/src/lib/serialization/codecs/v1/config.d.ts +21 -0
  48. package/dist/cjs/src/lib/serialization/codecs/v1/config.d.ts.map +1 -0
  49. package/dist/cjs/src/lib/serialization/codecs/v1/config.js +34 -0
  50. package/dist/cjs/src/lib/serialization/codecs/v1/instruction.d.ts +14 -0
  51. package/dist/cjs/src/lib/serialization/codecs/v1/instruction.d.ts.map +1 -0
  52. package/dist/cjs/src/lib/serialization/codecs/v1/instruction.js +32 -0
  53. package/dist/cjs/src/lib/serialization/codecs/v1/message.d.ts +27 -0
  54. package/dist/cjs/src/lib/serialization/codecs/v1/message.d.ts.map +1 -0
  55. package/dist/cjs/src/lib/serialization/codecs/v1/message.js +196 -0
  56. package/dist/cjs/src/lib/serialization/compileTransactionMessage.d.ts +30 -0
  57. package/dist/cjs/src/lib/serialization/compileTransactionMessage.d.ts.map +1 -0
  58. package/dist/cjs/src/lib/serialization/compileTransactionMessage.js +205 -0
  59. package/dist/cjs/src/lib/serialization/index.d.ts +5 -0
  60. package/dist/cjs/src/lib/serialization/index.d.ts.map +1 -0
  61. package/dist/cjs/src/lib/serialization/index.js +27 -0
  62. package/dist/cjs/src/lib/serialization/parseWireTransaction.d.ts +9 -0
  63. package/dist/cjs/src/lib/serialization/parseWireTransaction.d.ts.map +1 -0
  64. package/dist/cjs/src/lib/serialization/parseWireTransaction.js +58 -0
  65. package/dist/cjs/src/lib/serialization/wire-transaction.d.ts +14 -0
  66. package/dist/cjs/src/lib/serialization/wire-transaction.d.ts.map +1 -0
  67. package/dist/cjs/src/lib/serialization/wire-transaction.js +51 -0
  68. package/dist/{src → cjs/src}/lib/solInstructionFactory.d.ts +1 -1
  69. package/dist/cjs/src/lib/solInstructionFactory.d.ts.map +1 -0
  70. package/dist/cjs/src/lib/solInstructionFactory.js +1094 -0
  71. package/dist/cjs/src/lib/stakingActivateBuilder.d.ts.map +1 -0
  72. package/dist/cjs/src/lib/stakingActivateBuilder.js +129 -0
  73. package/dist/cjs/src/lib/stakingAuthorizeBuilder.d.ts.map +1 -0
  74. package/dist/cjs/src/lib/stakingAuthorizeBuilder.js +89 -0
  75. package/dist/cjs/src/lib/stakingDeactivateBuilder.d.ts.map +1 -0
  76. package/dist/cjs/src/lib/stakingDeactivateBuilder.js +214 -0
  77. package/dist/cjs/src/lib/stakingDelegateBuilder.d.ts.map +1 -0
  78. package/dist/cjs/src/lib/stakingDelegateBuilder.js +126 -0
  79. package/dist/cjs/src/lib/stakingRawMsgAuthorizeBuilder.d.ts.map +1 -0
  80. package/dist/cjs/src/lib/stakingRawMsgAuthorizeBuilder.js +110 -0
  81. package/dist/cjs/src/lib/stakingWithdrawBuilder.d.ts.map +1 -0
  82. package/dist/cjs/src/lib/stakingWithdrawBuilder.js +87 -0
  83. package/dist/cjs/src/lib/token2022Resolve.d.ts +106 -0
  84. package/dist/cjs/src/lib/token2022Resolve.d.ts.map +1 -0
  85. package/dist/cjs/src/lib/token2022Resolve.js +199 -0
  86. package/dist/cjs/src/lib/tokenExtensions.d.ts +26 -0
  87. package/dist/cjs/src/lib/tokenExtensions.d.ts.map +1 -0
  88. package/dist/cjs/src/lib/tokenExtensions.js +109 -0
  89. package/dist/{src → cjs/src}/lib/tokenTransferBuilder.d.ts +27 -1
  90. package/dist/cjs/src/lib/tokenTransferBuilder.d.ts.map +1 -0
  91. package/dist/cjs/src/lib/tokenTransferBuilder.js +237 -0
  92. package/dist/{src → cjs/src}/lib/transaction.d.ts +34 -1
  93. package/dist/cjs/src/lib/transaction.d.ts.map +1 -0
  94. package/dist/cjs/src/lib/transaction.js +691 -0
  95. package/dist/{src → cjs/src}/lib/transactionBuilder.d.ts +42 -1
  96. package/dist/cjs/src/lib/transactionBuilder.d.ts.map +1 -0
  97. package/dist/cjs/src/lib/transactionBuilder.js +462 -0
  98. package/dist/{src → cjs/src}/lib/transactionBuilderFactory.d.ts +14 -0
  99. package/dist/cjs/src/lib/transactionBuilderFactory.d.ts.map +1 -0
  100. package/dist/cjs/src/lib/transactionBuilderFactory.js +222 -0
  101. package/dist/cjs/src/lib/transferBuilder.d.ts.map +1 -0
  102. package/dist/cjs/src/lib/transferBuilder.js +81 -0
  103. package/dist/cjs/src/lib/transferBuilderV2.d.ts +69 -0
  104. package/dist/cjs/src/lib/transferBuilderV2.d.ts.map +1 -0
  105. package/dist/cjs/src/lib/transferBuilderV2.js +252 -0
  106. package/dist/{src → cjs/src}/lib/utils.d.ts +5 -0
  107. package/dist/cjs/src/lib/utils.d.ts.map +1 -0
  108. package/dist/cjs/src/lib/utils.js +665 -0
  109. package/dist/cjs/src/lib/walletInitializationBuilder.d.ts.map +1 -0
  110. package/dist/cjs/src/lib/walletInitializationBuilder.js +71 -0
  111. package/dist/cjs/src/register.d.ts +5 -0
  112. package/dist/cjs/src/register.d.ts.map +1 -0
  113. package/dist/cjs/src/register.js +29 -0
  114. package/dist/{src → cjs/src}/sol.d.ts +114 -3
  115. package/dist/cjs/src/sol.d.ts.map +1 -0
  116. package/dist/cjs/src/sol.js +1673 -0
  117. package/dist/{src → cjs/src}/solToken.d.ts +7 -0
  118. package/dist/cjs/src/solToken.d.ts.map +1 -0
  119. package/dist/cjs/src/solToken.js +79 -0
  120. package/dist/cjs/src/tsol.d.ts.map +1 -0
  121. package/dist/cjs/src/tsol.js +24 -0
  122. package/dist/{test → cjs/test}/fixtures/sol.d.ts.map +1 -1
  123. package/dist/cjs/test/fixtures/sol.js +1433 -0
  124. package/dist/{test → cjs/test}/resources/sol.d.ts +29 -29
  125. package/dist/cjs/test/resources/sol.d.ts.map +1 -0
  126. package/dist/cjs/test/resources/sol.js +320 -0
  127. package/dist/cjs/test/unit/explainTransactionWasm.d.ts +5 -0
  128. package/dist/cjs/test/unit/explainTransactionWasm.d.ts.map +1 -0
  129. package/dist/cjs/test/unit/explainTransactionWasm.js +66 -0
  130. package/dist/cjs/test/unit/fixtures/solBackupKey.d.ts.map +1 -0
  131. package/dist/cjs/test/unit/fixtures/solBackupKey.js +8 -0
  132. package/dist/cjs/test/unit/getBuilderFactory.d.ts.map +1 -0
  133. package/dist/cjs/test/unit/getBuilderFactory.js +10 -0
  134. package/dist/cjs/test/unit/instructionParamsFactory.d.ts.map +1 -0
  135. package/dist/cjs/test/unit/instructionParamsFactory.js +425 -0
  136. package/dist/cjs/test/unit/instructionParamsFactory.staking.d.ts.map +1 -0
  137. package/dist/cjs/test/unit/instructionParamsFactory.staking.js +1059 -0
  138. package/dist/cjs/test/unit/jitoWasmVerification.d.ts +2 -0
  139. package/dist/cjs/test/unit/jitoWasmVerification.d.ts.map +1 -0
  140. package/dist/cjs/test/unit/jitoWasmVerification.js +78 -0
  141. package/dist/{test → cjs/test}/unit/keyPair.d.ts.map +1 -1
  142. package/dist/cjs/test/unit/keyPair.js +177 -0
  143. package/dist/cjs/test/unit/messages/messageBuilderFactory.d.ts.map +1 -0
  144. package/dist/cjs/test/unit/messages/messageBuilderFactory.js +118 -0
  145. package/dist/cjs/test/unit/messages/simpleMessageBuilder.d.ts.map +1 -0
  146. package/dist/cjs/test/unit/messages/simpleMessageBuilder.js +194 -0
  147. package/dist/cjs/test/unit/register.d.ts +2 -0
  148. package/dist/cjs/test/unit/register.d.ts.map +1 -0
  149. package/dist/cjs/test/unit/register.js +65 -0
  150. package/dist/cjs/test/unit/scaledUiAmount.d.ts +2 -0
  151. package/dist/cjs/test/unit/scaledUiAmount.d.ts.map +1 -0
  152. package/dist/cjs/test/unit/scaledUiAmount.js +101 -0
  153. package/dist/cjs/test/unit/serialization/decodeV1Message.d.ts +2 -0
  154. package/dist/cjs/test/unit/serialization/decodeV1Message.d.ts.map +1 -0
  155. package/dist/cjs/test/unit/serialization/decodeV1Message.js +63 -0
  156. package/dist/cjs/test/unit/serialization/exportV1.d.ts +2 -0
  157. package/dist/cjs/test/unit/serialization/exportV1.d.ts.map +1 -0
  158. package/dist/cjs/test/unit/serialization/exportV1.js +21 -0
  159. package/dist/cjs/test/unit/serialization/parseWireTransaction.d.ts +2 -0
  160. package/dist/cjs/test/unit/serialization/parseWireTransaction.d.ts.map +1 -0
  161. package/dist/cjs/test/unit/serialization/parseWireTransaction.js +90 -0
  162. package/dist/cjs/test/unit/serialization/transactionV1.d.ts +2 -0
  163. package/dist/cjs/test/unit/serialization/transactionV1.d.ts.map +1 -0
  164. package/dist/cjs/test/unit/serialization/transactionV1.js +136 -0
  165. package/dist/{test → cjs/test}/unit/sol.d.ts.map +1 -1
  166. package/dist/cjs/test/unit/sol.js +5092 -0
  167. package/dist/cjs/test/unit/solInstructionFactory.d.ts.map +1 -0
  168. package/dist/cjs/test/unit/solInstructionFactory.js +623 -0
  169. package/dist/cjs/test/unit/solToken.d.ts.map +1 -0
  170. package/dist/cjs/test/unit/solToken.js +37 -0
  171. package/dist/cjs/test/unit/token2022Resolve.d.ts +2 -0
  172. package/dist/cjs/test/unit/token2022Resolve.d.ts.map +1 -0
  173. package/dist/cjs/test/unit/token2022Resolve.js +252 -0
  174. package/dist/cjs/test/unit/tokenExtensions.d.ts +2 -0
  175. package/dist/cjs/test/unit/tokenExtensions.d.ts.map +1 -0
  176. package/dist/cjs/test/unit/tokenExtensions.js +73 -0
  177. package/dist/cjs/test/unit/transaction.d.ts.map +1 -0
  178. package/dist/cjs/test/unit/transaction.js +1129 -0
  179. package/dist/cjs/test/unit/transactionBuilder/StakingWithdrawBuilder.d.ts.map +1 -0
  180. package/dist/cjs/test/unit/transactionBuilder/StakingWithdrawBuilder.js +202 -0
  181. package/dist/cjs/test/unit/transactionBuilder/ataInitBuilder.d.ts.map +1 -0
  182. package/dist/cjs/test/unit/transactionBuilder/ataInitBuilder.js +508 -0
  183. package/dist/cjs/test/unit/transactionBuilder/closeAtaBuilder.d.ts +2 -0
  184. package/dist/cjs/test/unit/transactionBuilder/closeAtaBuilder.d.ts.map +1 -0
  185. package/dist/cjs/test/unit/transactionBuilder/closeAtaBuilder.js +343 -0
  186. package/dist/cjs/test/unit/transactionBuilder/computeUnitLimit.d.ts +2 -0
  187. package/dist/cjs/test/unit/transactionBuilder/computeUnitLimit.d.ts.map +1 -0
  188. package/dist/cjs/test/unit/transactionBuilder/computeUnitLimit.js +346 -0
  189. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferBuilder.d.ts +2 -0
  190. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferBuilder.d.ts.map +1 -0
  191. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferBuilder.js +909 -0
  192. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1.d.ts +2 -0
  193. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1.d.ts.map +1 -0
  194. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1.js +144 -0
  195. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1Ops.d.ts +2 -0
  196. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1Ops.d.ts.map +1 -0
  197. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1Ops.js +167 -0
  198. package/dist/cjs/test/unit/transactionBuilder/customInstructionBuilder.d.ts.map +1 -0
  199. package/dist/cjs/test/unit/transactionBuilder/customInstructionBuilder.js +724 -0
  200. package/dist/cjs/test/unit/transactionBuilder/stakingActivateBuilder.d.ts.map +1 -0
  201. package/dist/cjs/test/unit/transactionBuilder/stakingActivateBuilder.js +430 -0
  202. package/dist/cjs/test/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts.map +1 -0
  203. package/dist/cjs/test/unit/transactionBuilder/stakingAuthorizeBuilder.js +157 -0
  204. package/dist/cjs/test/unit/transactionBuilder/stakingDeactivateBuilder.d.ts.map +1 -0
  205. package/dist/cjs/test/unit/transactionBuilder/stakingDeactivateBuilder.js +384 -0
  206. package/dist/cjs/test/unit/transactionBuilder/stakingDelegateBuilder.d.ts.map +1 -0
  207. package/dist/cjs/test/unit/transactionBuilder/stakingDelegateBuilder.js +224 -0
  208. package/dist/cjs/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts.map +1 -0
  209. package/dist/cjs/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.js +259 -0
  210. package/dist/cjs/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
  211. package/dist/cjs/test/unit/transactionBuilder/tokenTransferBuilder.js +926 -0
  212. package/dist/cjs/test/unit/transactionBuilder/transactionBuilder.d.ts.map +1 -0
  213. package/dist/cjs/test/unit/transactionBuilder/transactionBuilder.js +495 -0
  214. package/dist/cjs/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
  215. package/dist/cjs/test/unit/transactionBuilder/transferBuilder.js +302 -0
  216. package/dist/cjs/test/unit/transactionBuilder/transferBuilderV2.d.ts.map +1 -0
  217. package/dist/cjs/test/unit/transactionBuilder/transferBuilderV2.js +910 -0
  218. package/dist/cjs/test/unit/transactionBuilder/walletInitBuilder.d.ts.map +1 -0
  219. package/dist/cjs/test/unit/transactionBuilder/walletInitBuilder.js +259 -0
  220. package/dist/{test → cjs/test}/unit/utils.d.ts.map +1 -1
  221. package/dist/cjs/test/unit/utils.js +628 -0
  222. package/dist/cjs/test/unit/versionedTransaction.d.ts.map +1 -0
  223. package/dist/cjs/test/unit/versionedTransaction.js +207 -0
  224. package/dist/cjs/tsconfig.tsbuildinfo +1 -0
  225. package/dist/esm/bigint-buffer-guard.d.ts +1 -0
  226. package/dist/esm/index.d.ts +7 -0
  227. package/dist/esm/index.js +7 -0
  228. package/dist/esm/lib/ataInitializationBuilder.d.ts +58 -0
  229. package/dist/esm/lib/ataInitializationBuilder.d.ts.map +1 -0
  230. package/dist/esm/lib/ataInitializationBuilder.js +191 -0
  231. package/dist/esm/lib/closeAtaBuilder.d.ts +55 -0
  232. package/dist/esm/lib/closeAtaBuilder.d.ts.map +1 -0
  233. package/dist/esm/lib/closeAtaBuilder.js +155 -0
  234. package/dist/esm/lib/confidentialTransferBuilder.d.ts +128 -0
  235. package/dist/esm/lib/confidentialTransferBuilder.d.ts.map +1 -0
  236. package/dist/esm/lib/confidentialTransferBuilder.js +304 -0
  237. package/dist/esm/lib/constants.d.ts +234 -0
  238. package/dist/esm/lib/constants.d.ts.map +1 -0
  239. package/dist/esm/lib/constants.js +273 -0
  240. package/dist/esm/lib/customInstructionBuilder.d.ts +83 -0
  241. package/dist/{src → esm}/lib/customInstructionBuilder.d.ts.map +1 -1
  242. package/dist/esm/lib/customInstructionBuilder.js +385 -0
  243. package/dist/esm/lib/explainTransactionWasm.d.ts +21 -0
  244. package/dist/esm/lib/explainTransactionWasm.d.ts.map +1 -0
  245. package/dist/esm/lib/explainTransactionWasm.js +301 -0
  246. package/dist/esm/lib/iface.d.ts +526 -0
  247. package/dist/esm/lib/iface.d.ts.map +1 -0
  248. package/dist/esm/lib/iface.js +3 -0
  249. package/dist/esm/lib/index.d.ts +28 -0
  250. package/dist/esm/lib/index.d.ts.map +1 -0
  251. package/dist/esm/lib/index.js +28 -0
  252. package/dist/esm/lib/instructionParamsFactory.d.ts +14 -0
  253. package/dist/esm/lib/instructionParamsFactory.d.ts.map +1 -0
  254. package/dist/esm/lib/instructionParamsFactory.js +1272 -0
  255. package/dist/esm/lib/jitoStakePoolOperations.d.ts +113 -0
  256. package/dist/esm/lib/jitoStakePoolOperations.js +189 -0
  257. package/dist/esm/lib/keyPair.d.ts +32 -0
  258. package/dist/esm/lib/keyPair.d.ts.map +1 -0
  259. package/dist/esm/lib/keyPair.js +75 -0
  260. package/dist/esm/lib/messages/index.d.ts +2 -0
  261. package/dist/esm/lib/messages/index.js +2 -0
  262. package/dist/esm/lib/messages/messageBuilderFactory.d.ts +7 -0
  263. package/dist/{src → esm}/lib/messages/messageBuilderFactory.js +5 -9
  264. package/dist/esm/lib/recoverNestedAtaBuilder.d.ts +25 -0
  265. package/dist/esm/lib/recoverNestedAtaBuilder.d.ts.map +1 -0
  266. package/dist/esm/lib/recoverNestedAtaBuilder.js +83 -0
  267. package/dist/esm/lib/scaledUiAmount.d.ts +30 -0
  268. package/dist/esm/lib/scaledUiAmount.d.ts.map +1 -0
  269. package/dist/esm/lib/scaledUiAmount.js +108 -0
  270. package/dist/esm/lib/serialization/codecs/v1/config.d.ts +21 -0
  271. package/dist/esm/lib/serialization/codecs/v1/config.d.ts.map +1 -0
  272. package/dist/esm/lib/serialization/codecs/v1/config.js +30 -0
  273. package/dist/esm/lib/serialization/codecs/v1/instruction.d.ts +14 -0
  274. package/dist/esm/lib/serialization/codecs/v1/instruction.d.ts.map +1 -0
  275. package/dist/esm/lib/serialization/codecs/v1/instruction.js +29 -0
  276. package/dist/esm/lib/serialization/codecs/v1/message.d.ts +27 -0
  277. package/dist/esm/lib/serialization/codecs/v1/message.d.ts.map +1 -0
  278. package/dist/esm/lib/serialization/codecs/v1/message.js +188 -0
  279. package/dist/esm/lib/serialization/compileTransactionMessage.d.ts +30 -0
  280. package/dist/esm/lib/serialization/compileTransactionMessage.d.ts.map +1 -0
  281. package/dist/esm/lib/serialization/compileTransactionMessage.js +202 -0
  282. package/dist/esm/lib/serialization/index.d.ts +5 -0
  283. package/dist/esm/lib/serialization/index.d.ts.map +1 -0
  284. package/dist/esm/lib/serialization/index.js +5 -0
  285. package/dist/esm/lib/serialization/parseWireTransaction.d.ts +9 -0
  286. package/dist/esm/lib/serialization/parseWireTransaction.d.ts.map +1 -0
  287. package/dist/esm/lib/serialization/parseWireTransaction.js +50 -0
  288. package/dist/esm/lib/serialization/wire-transaction.d.ts +14 -0
  289. package/dist/esm/lib/serialization/wire-transaction.d.ts.map +1 -0
  290. package/dist/esm/lib/serialization/wire-transaction.js +48 -0
  291. package/dist/esm/lib/solInstructionFactory.d.ts +10 -0
  292. package/dist/esm/lib/solInstructionFactory.d.ts.map +1 -0
  293. package/dist/esm/lib/solInstructionFactory.js +1088 -0
  294. package/dist/esm/lib/stakingActivateBuilder.d.ts +59 -0
  295. package/dist/{src → esm}/lib/stakingActivateBuilder.d.ts.map +1 -1
  296. package/dist/esm/lib/stakingActivateBuilder.js +122 -0
  297. package/dist/esm/lib/stakingAuthorizeBuilder.d.ts +43 -0
  298. package/dist/esm/lib/stakingAuthorizeBuilder.js +82 -0
  299. package/dist/esm/lib/stakingDeactivateBuilder.d.ts +81 -0
  300. package/dist/{src → esm}/lib/stakingDeactivateBuilder.d.ts.map +1 -1
  301. package/dist/esm/lib/stakingDeactivateBuilder.js +207 -0
  302. package/dist/esm/lib/stakingDelegateBuilder.d.ts +42 -0
  303. package/dist/{src → esm}/lib/stakingDelegateBuilder.d.ts.map +1 -1
  304. package/dist/esm/lib/stakingDelegateBuilder.js +119 -0
  305. package/dist/esm/lib/stakingRawMsgAuthorizeBuilder.d.ts +33 -0
  306. package/dist/esm/lib/stakingRawMsgAuthorizeBuilder.js +103 -0
  307. package/dist/esm/lib/stakingWithdrawBuilder.d.ts +31 -0
  308. package/dist/{src → esm}/lib/stakingWithdrawBuilder.d.ts.map +1 -1
  309. package/dist/esm/lib/stakingWithdrawBuilder.js +80 -0
  310. package/dist/esm/lib/token2022Resolve.d.ts +106 -0
  311. package/dist/esm/lib/token2022Resolve.d.ts.map +1 -0
  312. package/dist/esm/lib/token2022Resolve.js +194 -0
  313. package/dist/esm/lib/tokenExtensions.d.ts +26 -0
  314. package/dist/esm/lib/tokenExtensions.d.ts.map +1 -0
  315. package/dist/esm/lib/tokenExtensions.js +103 -0
  316. package/dist/esm/lib/tokenTransferBuilder.d.ts +67 -0
  317. package/dist/esm/lib/tokenTransferBuilder.d.ts.map +1 -0
  318. package/dist/esm/lib/tokenTransferBuilder.js +230 -0
  319. package/dist/esm/lib/transaction.d.ts +136 -0
  320. package/dist/esm/lib/transaction.d.ts.map +1 -0
  321. package/dist/esm/lib/transaction.js +684 -0
  322. package/dist/esm/lib/transactionBuilder.d.ts +169 -0
  323. package/dist/esm/lib/transactionBuilder.d.ts.map +1 -0
  324. package/dist/esm/lib/transactionBuilder.js +455 -0
  325. package/dist/esm/lib/transactionBuilderFactory.d.ts +129 -0
  326. package/dist/esm/lib/transactionBuilderFactory.d.ts.map +1 -0
  327. package/dist/esm/lib/transactionBuilderFactory.js +218 -0
  328. package/dist/esm/lib/transferBuilder.d.ts +26 -0
  329. package/dist/{src → esm}/lib/transferBuilder.d.ts.map +1 -1
  330. package/dist/esm/lib/transferBuilder.js +74 -0
  331. package/dist/esm/lib/transferBuilderV2.d.ts +69 -0
  332. package/dist/esm/lib/transferBuilderV2.d.ts.map +1 -0
  333. package/dist/esm/lib/transferBuilderV2.js +245 -0
  334. package/dist/esm/lib/utils.d.ts +205 -0
  335. package/dist/{src → esm}/lib/utils.d.ts.map +1 -1
  336. package/dist/esm/lib/utils.js +627 -0
  337. package/dist/esm/lib/walletInitializationBuilder.d.ts +26 -0
  338. package/dist/esm/lib/walletInitializationBuilder.js +64 -0
  339. package/dist/esm/register.d.ts +5 -0
  340. package/dist/esm/register.d.ts.map +1 -0
  341. package/dist/esm/register.js +24 -0
  342. package/dist/esm/sol.d.ts +351 -0
  343. package/dist/esm/sol.d.ts.map +1 -0
  344. package/dist/esm/sol.js +1632 -0
  345. package/dist/esm/solToken.d.ts +44 -0
  346. package/dist/esm/solToken.d.ts.map +1 -0
  347. package/dist/esm/solToken.js +75 -0
  348. package/dist/esm/tsol.d.ts +11 -0
  349. package/dist/esm/tsol.js +20 -0
  350. package/package.json +37 -17
  351. package/dist/src/config/token2022StaticConfig.d.ts +0 -3
  352. package/dist/src/config/token2022StaticConfig.d.ts.map +0 -1
  353. package/dist/src/config/token2022StaticConfig.js +0 -50
  354. package/dist/src/lib/ataInitializationBuilder.d.ts.map +0 -1
  355. package/dist/src/lib/ataInitializationBuilder.js +0 -196
  356. package/dist/src/lib/closeAtaBuilder.d.ts +0 -19
  357. package/dist/src/lib/closeAtaBuilder.d.ts.map +0 -1
  358. package/dist/src/lib/closeAtaBuilder.js +0 -69
  359. package/dist/src/lib/constants.d.ts.map +0 -1
  360. package/dist/src/lib/constants.js +0 -171
  361. package/dist/src/lib/customInstructionBuilder.js +0 -289
  362. package/dist/src/lib/iface.d.ts +0 -244
  363. package/dist/src/lib/iface.d.ts.map +0 -1
  364. package/dist/src/lib/iface.js +0 -7
  365. package/dist/src/lib/index.d.ts.map +0 -1
  366. package/dist/src/lib/index.js +0 -77
  367. package/dist/src/lib/instructionParamsFactory.d.ts.map +0 -1
  368. package/dist/src/lib/instructionParamsFactory.js +0 -1036
  369. package/dist/src/lib/jitoStakePoolOperations.js +0 -200
  370. package/dist/src/lib/keyPair.d.ts.map +0 -1
  371. package/dist/src/lib/keyPair.js +0 -63
  372. package/dist/src/lib/solInstructionFactory.d.ts.map +0 -1
  373. package/dist/src/lib/solInstructionFactory.js +0 -572
  374. package/dist/src/lib/stakingActivateBuilder.js +0 -120
  375. package/dist/src/lib/stakingAuthorizeBuilder.js +0 -89
  376. package/dist/src/lib/stakingDeactivateBuilder.js +0 -208
  377. package/dist/src/lib/stakingDelegateBuilder.js +0 -120
  378. package/dist/src/lib/stakingRawMsgAuthorizeBuilder.js +0 -110
  379. package/dist/src/lib/stakingWithdrawBuilder.js +0 -78
  380. package/dist/src/lib/token2022Config.d.ts +0 -44
  381. package/dist/src/lib/token2022Config.d.ts.map +0 -1
  382. package/dist/src/lib/token2022Config.js +0 -27
  383. package/dist/src/lib/tokenTransferBuilder.d.ts.map +0 -1
  384. package/dist/src/lib/tokenTransferBuilder.js +0 -188
  385. package/dist/src/lib/transaction.d.ts.map +0 -1
  386. package/dist/src/lib/transaction.js +0 -595
  387. package/dist/src/lib/transactionBuilder.d.ts.map +0 -1
  388. package/dist/src/lib/transactionBuilder.js +0 -380
  389. package/dist/src/lib/transactionBuilderFactory.d.ts.map +0 -1
  390. package/dist/src/lib/transactionBuilderFactory.js +0 -202
  391. package/dist/src/lib/transferBuilder.js +0 -70
  392. package/dist/src/lib/transferBuilderV2.d.ts +0 -43
  393. package/dist/src/lib/transferBuilderV2.d.ts.map +0 -1
  394. package/dist/src/lib/transferBuilderV2.js +0 -210
  395. package/dist/src/lib/utils.js +0 -589
  396. package/dist/src/lib/walletInitializationBuilder.js +0 -71
  397. package/dist/src/register.d.ts +0 -3
  398. package/dist/src/register.d.ts.map +0 -1
  399. package/dist/src/register.js +0 -15
  400. package/dist/src/sol.d.ts.map +0 -1
  401. package/dist/src/sol.js +0 -1324
  402. package/dist/src/solToken.d.ts.map +0 -1
  403. package/dist/src/solToken.js +0 -69
  404. package/dist/src/tsol.js +0 -24
  405. package/dist/test/fixtures/sol.js +0 -1433
  406. package/dist/test/resources/sol.d.ts.map +0 -1
  407. package/dist/test/resources/sol.js +0 -320
  408. package/dist/test/unit/fixtures/solBackupKey.d.ts.map +0 -1
  409. package/dist/test/unit/fixtures/solBackupKey.js +0 -8
  410. package/dist/test/unit/getBuilderFactory.d.ts.map +0 -1
  411. package/dist/test/unit/getBuilderFactory.js +0 -10
  412. package/dist/test/unit/instructionParamsFactory.d.ts.map +0 -1
  413. package/dist/test/unit/instructionParamsFactory.js +0 -412
  414. package/dist/test/unit/instructionParamsFactory.staking.d.ts.map +0 -1
  415. package/dist/test/unit/instructionParamsFactory.staking.js +0 -1059
  416. package/dist/test/unit/keyPair.js +0 -177
  417. package/dist/test/unit/messages/messageBuilderFactory.d.ts.map +0 -1
  418. package/dist/test/unit/messages/messageBuilderFactory.js +0 -118
  419. package/dist/test/unit/messages/simpleMessageBuilder.d.ts.map +0 -1
  420. package/dist/test/unit/messages/simpleMessageBuilder.js +0 -194
  421. package/dist/test/unit/sol.js +0 -3180
  422. package/dist/test/unit/solInstructionFactory.d.ts.map +0 -1
  423. package/dist/test/unit/solInstructionFactory.js +0 -454
  424. package/dist/test/unit/solToken.d.ts.map +0 -1
  425. package/dist/test/unit/solToken.js +0 -31
  426. package/dist/test/unit/transaction.d.ts.map +0 -1
  427. package/dist/test/unit/transaction.js +0 -983
  428. package/dist/test/unit/transactionBuilder/StakingWithdrawBuilder.d.ts.map +0 -1
  429. package/dist/test/unit/transactionBuilder/StakingWithdrawBuilder.js +0 -202
  430. package/dist/test/unit/transactionBuilder/ataInitBuilder.d.ts.map +0 -1
  431. package/dist/test/unit/transactionBuilder/ataInitBuilder.js +0 -471
  432. package/dist/test/unit/transactionBuilder/customInstructionBuilder.d.ts.map +0 -1
  433. package/dist/test/unit/transactionBuilder/customInstructionBuilder.js +0 -413
  434. package/dist/test/unit/transactionBuilder/stakingActivateBuilder.d.ts.map +0 -1
  435. package/dist/test/unit/transactionBuilder/stakingActivateBuilder.js +0 -430
  436. package/dist/test/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts.map +0 -1
  437. package/dist/test/unit/transactionBuilder/stakingAuthorizeBuilder.js +0 -157
  438. package/dist/test/unit/transactionBuilder/stakingDeactivateBuilder.d.ts.map +0 -1
  439. package/dist/test/unit/transactionBuilder/stakingDeactivateBuilder.js +0 -384
  440. package/dist/test/unit/transactionBuilder/stakingDelegateBuilder.d.ts.map +0 -1
  441. package/dist/test/unit/transactionBuilder/stakingDelegateBuilder.js +0 -224
  442. package/dist/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts.map +0 -1
  443. package/dist/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.js +0 -259
  444. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +0 -1
  445. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +0 -787
  446. package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts.map +0 -1
  447. package/dist/test/unit/transactionBuilder/transactionBuilder.js +0 -495
  448. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +0 -1
  449. package/dist/test/unit/transactionBuilder/transferBuilder.js +0 -286
  450. package/dist/test/unit/transactionBuilder/transferBuilderV2.d.ts.map +0 -1
  451. package/dist/test/unit/transactionBuilder/transferBuilderV2.js +0 -862
  452. package/dist/test/unit/transactionBuilder/walletInitBuilder.d.ts.map +0 -1
  453. package/dist/test/unit/transactionBuilder/walletInitBuilder.js +0 -259
  454. package/dist/test/unit/utils.js +0 -517
  455. package/dist/test/unit/versionedTransaction.d.ts.map +0 -1
  456. package/dist/test/unit/versionedTransaction.js +0 -207
  457. package/dist/tsconfig.tsbuildinfo +0 -1
  458. /package/dist/{src → cjs/src}/bigint-buffer-guard.d.ts +0 -0
  459. /package/dist/{src → cjs/src}/index.d.ts +0 -0
  460. /package/dist/{src → cjs/src}/lib/jitoStakePoolOperations.d.ts +0 -0
  461. /package/dist/{src → cjs/src}/lib/messages/index.d.ts +0 -0
  462. /package/dist/{src → cjs/src}/lib/messages/messageBuilderFactory.d.ts +0 -0
  463. /package/dist/{src → cjs/src}/lib/stakingActivateBuilder.d.ts +0 -0
  464. /package/dist/{src → cjs/src}/lib/stakingAuthorizeBuilder.d.ts +0 -0
  465. /package/dist/{src → cjs/src}/lib/stakingDeactivateBuilder.d.ts +0 -0
  466. /package/dist/{src → cjs/src}/lib/stakingDelegateBuilder.d.ts +0 -0
  467. /package/dist/{src → cjs/src}/lib/stakingRawMsgAuthorizeBuilder.d.ts +0 -0
  468. /package/dist/{src → cjs/src}/lib/stakingWithdrawBuilder.d.ts +0 -0
  469. /package/dist/{src → cjs/src}/lib/transferBuilder.d.ts +0 -0
  470. /package/dist/{src → cjs/src}/lib/walletInitializationBuilder.d.ts +0 -0
  471. /package/dist/{src → cjs/src}/tsol.d.ts +0 -0
  472. /package/dist/{test → cjs/test}/fixtures/sol.d.ts +0 -0
  473. /package/dist/{test → cjs/test}/unit/fixtures/solBackupKey.d.ts +0 -0
  474. /package/dist/{test → cjs/test}/unit/getBuilderFactory.d.ts +0 -0
  475. /package/dist/{test → cjs/test}/unit/instructionParamsFactory.d.ts +0 -0
  476. /package/dist/{test → cjs/test}/unit/instructionParamsFactory.staking.d.ts +0 -0
  477. /package/dist/{test → cjs/test}/unit/keyPair.d.ts +0 -0
  478. /package/dist/{test → cjs/test}/unit/messages/messageBuilderFactory.d.ts +0 -0
  479. /package/dist/{test → cjs/test}/unit/messages/simpleMessageBuilder.d.ts +0 -0
  480. /package/dist/{test → cjs/test}/unit/sol.d.ts +0 -0
  481. /package/dist/{test → cjs/test}/unit/solInstructionFactory.d.ts +0 -0
  482. /package/dist/{test → cjs/test}/unit/solToken.d.ts +0 -0
  483. /package/dist/{test → cjs/test}/unit/transaction.d.ts +0 -0
  484. /package/dist/{test → cjs/test}/unit/transactionBuilder/StakingWithdrawBuilder.d.ts +0 -0
  485. /package/dist/{test → cjs/test}/unit/transactionBuilder/ataInitBuilder.d.ts +0 -0
  486. /package/dist/{test → cjs/test}/unit/transactionBuilder/customInstructionBuilder.d.ts +0 -0
  487. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingActivateBuilder.d.ts +0 -0
  488. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts +0 -0
  489. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingDeactivateBuilder.d.ts +0 -0
  490. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingDelegateBuilder.d.ts +0 -0
  491. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts +0 -0
  492. /package/dist/{test → cjs/test}/unit/transactionBuilder/tokenTransferBuilder.d.ts +0 -0
  493. /package/dist/{test → cjs/test}/unit/transactionBuilder/transactionBuilder.d.ts +0 -0
  494. /package/dist/{test → cjs/test}/unit/transactionBuilder/transferBuilder.d.ts +0 -0
  495. /package/dist/{test → cjs/test}/unit/transactionBuilder/transferBuilderV2.d.ts +0 -0
  496. /package/dist/{test → cjs/test}/unit/transactionBuilder/walletInitBuilder.d.ts +0 -0
  497. /package/dist/{test → cjs/test}/unit/utils.d.ts +0 -0
  498. /package/dist/{test → cjs/test}/unit/versionedTransaction.d.ts +0 -0
  499. /package/dist/{src → esm}/bigint-buffer-guard.d.ts.map +0 -0
  500. /package/dist/{src → esm}/bigint-buffer-guard.js +0 -0
  501. /package/dist/{src → esm}/index.d.ts.map +0 -0
  502. /package/dist/{src → esm}/lib/jitoStakePoolOperations.d.ts.map +0 -0
  503. /package/dist/{src → esm}/lib/messages/index.d.ts.map +0 -0
  504. /package/dist/{src → esm}/lib/messages/messageBuilderFactory.d.ts.map +0 -0
  505. /package/dist/{src → esm}/lib/stakingAuthorizeBuilder.d.ts.map +0 -0
  506. /package/dist/{src → esm}/lib/stakingRawMsgAuthorizeBuilder.d.ts.map +0 -0
  507. /package/dist/{src → esm}/lib/walletInitializationBuilder.d.ts.map +0 -0
  508. /package/dist/{src → esm}/tsol.d.ts.map +0 -0
@@ -1,6 +1,6 @@
1
1
  import BigNumber from 'bignumber.js';
2
2
  import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
3
- import { BaseAddress, BaseKey, BaseTransactionBuilder, FeeOptions, PublicKey as BasePublicKey, TransactionType } from '@bitgo-beta/sdk-core';
3
+ import { BaseAddress, BaseKey, BaseTransactionBuilder, FeeOptions, PublicKey as BasePublicKey, Signature, TransactionType } from '@bitgo-beta/sdk-core';
4
4
  import { Transaction } from './transaction';
5
5
  import { Blockhash, Transaction as SolTransaction, VersionedTransaction } from '@solana/web3.js';
6
6
  import { KeyPair } from '.';
@@ -18,6 +18,10 @@ export declare abstract class TransactionBuilder extends BaseTransactionBuilder
18
18
  protected _memo?: string;
19
19
  protected _feePayer?: string;
20
20
  protected _priorityFee: number;
21
+ /** Explicit compute-unit limit requested for the transaction, in compute units */
22
+ protected _computeUnitLimit?: number;
23
+ /** Optional override for the zk-elgamal-proof program id (used by CT instruction builders) */
24
+ protected _zkProofProgramId?: string;
21
25
  constructor(_coinConfig: Readonly<CoinConfig>);
22
26
  /**
23
27
  * The transaction type.
@@ -61,6 +65,27 @@ export declare abstract class TransactionBuilder extends BaseTransactionBuilder
61
65
  protected signImplementation(key: BaseKey): Transaction;
62
66
  /** @inheritDoc */
63
67
  addSignature(publicKey: BasePublicKey, signature: Buffer): void;
68
+ /**
69
+ * Get the externally-added signatures (via addSignature) in order.
70
+ *
71
+ * @returns {Signature[]} The list of external signatures
72
+ */
73
+ protected getAdditionalSignatures(): Signature[];
74
+ /**
75
+ * Add a signature produced by the fee payer of the transaction being built.
76
+ * The fee payer is account 0 of the transaction message, so its signature belongs in slot 0.
77
+ * Use this for signatures produced by the enterprise fee address key (HSM single-sig) of a
78
+ * sponsored transaction; the key must match account 0.
79
+ *
80
+ * @param {BasePublicKey} publicKey The public key of the fee payer; must be account 0 of the message
81
+ * @param {Buffer} signature The signature of the transaction payload
82
+ */
83
+ addFeePayerSignature(publicKey: BasePublicKey, signature: Buffer): void;
84
+ /**
85
+ * The account 0 key of the message being built, i.e. the fee payer: the first static account
86
+ * key of a versioned transaction, or the fee payer of a legacy transaction.
87
+ */
88
+ private getFeePayerAccountKey;
64
89
  /**
65
90
  * Sets the sender of this transaction.
66
91
  * This account will be responsible for paying transaction fees.
@@ -87,6 +112,22 @@ export declare abstract class TransactionBuilder extends BaseTransactionBuilder
87
112
  memo(memo: string): this;
88
113
  fee(feeOptions: FeeOptions): this;
89
114
  setPriorityFee(feeOptions: FeeOptions): this;
115
+ /**
116
+ * Set an explicit compute-unit limit for this transaction.
117
+ *
118
+ * The priority fee is charged on the requested compute-unit limit rather than the
119
+ * units actually consumed, so every sponsored transaction must set an intent-sized
120
+ * limit. When set, the built transaction prepends a SetComputeUnitLimit instruction
121
+ * ahead of all other instructions (after the durable-nonce AdvanceNonceAccount):
122
+ * [AdvanceNonce?, SetComputeUnitLimit, SetComputeUnitPrice?, ...]. When unset, the
123
+ * built transaction bytes are unchanged.
124
+ *
125
+ * @param {number} units the requested compute-unit limit, an integer between
126
+ * 1 and 1,400,000 (the on-chain per-transaction maximum)
127
+ * @returns {TransactionBuilder} This transaction builder
128
+ */
129
+ setComputeUnitLimit(units: number): this;
130
+ private validateComputeUnitLimit;
90
131
  feePayer(feePayer: string): this;
91
132
  /**
92
133
  * Used to set the minimum rent exempt amount for an ATA
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,462 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TransactionBuilder = void 0;
7
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
8
+ const transaction_1 = require("./transaction");
9
+ const web3_js_1 = require("@solana/web3.js");
10
+ const bs58_1 = __importDefault(require("bs58"));
11
+ const utils_1 = require("./utils");
12
+ const _1 = require(".");
13
+ const constants_1 = require("./constants");
14
+ const solInstructionFactory_1 = require("./solInstructionFactory");
15
+ const assert_1 = __importDefault(require("assert"));
16
+ const instructionParamsFactory_1 = require("./instructionParamsFactory");
17
+ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
18
+ constructor(_coinConfig) {
19
+ super(_coinConfig);
20
+ this._signatures = [];
21
+ this._instructionsData = [];
22
+ this._signers = [];
23
+ this.transaction = new transaction_1.Transaction(_coinConfig);
24
+ }
25
+ /**
26
+ * Initialize the transaction builder fields using the decoded transaction data
27
+ *
28
+ * @param {Transaction} tx the transaction data
29
+ */
30
+ initBuilder(tx) {
31
+ this._transaction = tx;
32
+ const txData = tx.toJson();
33
+ const filteredTransferInstructionsData = txData.instructionsData.filter((data) => data.type === constants_1.InstructionBuilderTypes.Transfer);
34
+ let sender;
35
+ if (filteredTransferInstructionsData.length > 0) {
36
+ const transferInstructionsData = filteredTransferInstructionsData[0];
37
+ sender = transferInstructionsData.params.fromAddress;
38
+ }
39
+ else {
40
+ sender = txData.feePayer;
41
+ }
42
+ this.sender(sender);
43
+ this.feePayer(txData.feePayer);
44
+ this.nonce(txData.nonce, txData.durableNonce);
45
+ this._instructionsData = (0, instructionParamsFactory_1.instructionParamsFactory)(tx.type, tx.solTransaction.instructions, this._coinConfig.name, txData.instructionsData, tx.useTokenAddressTokenName);
46
+ // Parse priority fee instruction data
47
+ const filteredPriorityFeeInstructionsData = txData.instructionsData.filter((data) => data.type === constants_1.InstructionBuilderTypes.SetPriorityFee);
48
+ for (const instruction of this._instructionsData) {
49
+ if (instruction.type === constants_1.InstructionBuilderTypes.Memo) {
50
+ const memoInstruction = instruction;
51
+ this.memo(memoInstruction.params.memo);
52
+ }
53
+ if (instruction.type === constants_1.InstructionBuilderTypes.NonceAdvance) {
54
+ const advanceNonceInstruction = instruction;
55
+ this.nonce(txData.nonce, advanceNonceInstruction.params);
56
+ }
57
+ // If prio fee instruction exists, set the priority fee variable
58
+ if (instruction.type === constants_1.InstructionBuilderTypes.SetPriorityFee) {
59
+ const priorityFeeInstructionsData = filteredPriorityFeeInstructionsData[0];
60
+ this.setPriorityFee({ amount: Number(priorityFeeInstructionsData.params.fee) });
61
+ }
62
+ // If compute unit limit instruction exists, restore the compute unit limit
63
+ if (instruction.type === constants_1.InstructionBuilderTypes.SetComputeUnitLimit) {
64
+ const computeUnitLimitInstruction = instruction;
65
+ this.setComputeUnitLimit(computeUnitLimitInstruction.params.units);
66
+ }
67
+ }
68
+ }
69
+ /** @inheritdoc */
70
+ fromImplementation(rawTransaction) {
71
+ const tx = new transaction_1.Transaction(this._coinConfig);
72
+ this.validateRawTransaction(rawTransaction);
73
+ tx.fromRawTransaction(rawTransaction);
74
+ this.initBuilder(tx);
75
+ return this.transaction;
76
+ }
77
+ /** @inheritdoc */
78
+ async buildImplementation() {
79
+ const builtTransaction = this.buildSolTransaction();
80
+ if (builtTransaction instanceof web3_js_1.VersionedTransaction) {
81
+ this.transaction.versionedTransaction = builtTransaction;
82
+ }
83
+ else {
84
+ this.transaction.solTransaction = builtTransaction;
85
+ }
86
+ this.transaction.setTransactionType(this.transactionType);
87
+ this.transaction.setInstructionsData(this._instructionsData);
88
+ this.transaction.loadInputsAndOutputs();
89
+ this._transaction.tokenAccountRentExemptAmount = this._tokenAccountRentExemptAmount;
90
+ return this.transaction;
91
+ }
92
+ /**
93
+ * Builds the solana transaction.
94
+ */
95
+ buildSolTransaction() {
96
+ (0, assert_1.default)(this._sender, new sdk_core_1.BuildTransactionError('sender is required before building'));
97
+ (0, assert_1.default)(this._recentBlockhash, new sdk_core_1.BuildTransactionError('recent blockhash is required before building'));
98
+ // Check if we should build as VersionedTransaction
99
+ if (this._transaction.isVersionedTransaction()) {
100
+ return this.buildVersionedTransaction();
101
+ }
102
+ else {
103
+ return this.buildLegacyTransaction();
104
+ }
105
+ }
106
+ /**
107
+ * Builds a legacy Solana transaction.
108
+ */
109
+ buildLegacyTransaction() {
110
+ const tx = new web3_js_1.Transaction();
111
+ if (this._transaction?.solTransaction?.signatures) {
112
+ tx.signatures = this._transaction?.solTransaction?.signatures;
113
+ }
114
+ tx.feePayer = this._feePayer ? new web3_js_1.PublicKey(this._feePayer) : new web3_js_1.PublicKey(this._sender);
115
+ if (this._nonceInfo) {
116
+ tx.nonceInfo = {
117
+ nonce: this._recentBlockhash,
118
+ nonceInstruction: (0, solInstructionFactory_1.solInstructionFactory)(this._nonceInfo)[0],
119
+ };
120
+ }
121
+ else {
122
+ tx.recentBlockhash = this._recentBlockhash;
123
+ }
124
+ // The priority fee is charged on the requested compute-unit limit, so an explicit
125
+ // limit must precede every entry of _instructionsData (including the optional
126
+ // SetComputeUnitPrice). web3.js serializes the durable-nonce AdvanceNonceAccount
127
+ // first via nonceInfo, giving [AdvanceNonce, SetComputeUnitLimit, SetComputeUnitPrice?, ...].
128
+ const computeUnitLimitData = this._computeUnitLimit !== undefined
129
+ ? {
130
+ type: constants_1.InstructionBuilderTypes.SetComputeUnitLimit,
131
+ params: {
132
+ units: this._computeUnitLimit,
133
+ },
134
+ }
135
+ : undefined;
136
+ if (computeUnitLimitData) {
137
+ tx.add(...(0, solInstructionFactory_1.solInstructionFactory)(computeUnitLimitData));
138
+ }
139
+ for (const instruction of this._instructionsData) {
140
+ tx.add(...(0, solInstructionFactory_1.solInstructionFactory)(instruction, this._zkProofProgramId));
141
+ }
142
+ if (computeUnitLimitData) {
143
+ // Record the instruction so explain and parsing see it, mirroring how memo is recorded
144
+ this._instructionsData.unshift(computeUnitLimitData);
145
+ }
146
+ if (this._memo) {
147
+ const memoData = {
148
+ type: constants_1.InstructionBuilderTypes.Memo,
149
+ params: {
150
+ memo: this._memo,
151
+ },
152
+ };
153
+ this._instructionsData.push(memoData);
154
+ tx.add(...(0, solInstructionFactory_1.solInstructionFactory)(memoData));
155
+ }
156
+ this._transaction.lamportsPerSignature = this._lamportsPerSignature;
157
+ for (const signer of this._signers) {
158
+ const publicKey = new web3_js_1.PublicKey(signer.getKeys().pub);
159
+ const secretKey = signer.getKeys(true).prv;
160
+ (0, assert_1.default)(secretKey instanceof Uint8Array);
161
+ tx.partialSign({ publicKey, secretKey });
162
+ }
163
+ for (const signature of this._signatures) {
164
+ const solPublicKey = new web3_js_1.PublicKey(signature.publicKey.pub);
165
+ tx.addSignature(solPublicKey, signature.signature);
166
+ }
167
+ return tx;
168
+ }
169
+ /**
170
+ * Builds a VersionedTransaction.
171
+ *
172
+ * @returns {VersionedTransaction} The built versioned transaction
173
+ */
174
+ buildVersionedTransaction() {
175
+ const versionedTxData = this._transaction.getVersionedTransactionData();
176
+ if (!versionedTxData) {
177
+ throw new sdk_core_1.BuildTransactionError('Missing VersionedTransactionData');
178
+ }
179
+ const versionedTx = this.buildFromVersionedData(versionedTxData);
180
+ this._transaction.lamportsPerSignature = this._lamportsPerSignature;
181
+ for (const signer of this._signers) {
182
+ const publicKey = new web3_js_1.PublicKey(signer.getKeys().pub);
183
+ const secretKey = signer.getKeys(true).prv;
184
+ (0, assert_1.default)(secretKey instanceof Uint8Array);
185
+ versionedTx.sign([{ publicKey, secretKey }]);
186
+ }
187
+ for (const signature of this._signatures) {
188
+ const solPublicKey = new web3_js_1.PublicKey(signature.publicKey.pub);
189
+ versionedTx.addSignature(solPublicKey, signature.signature);
190
+ }
191
+ return versionedTx;
192
+ }
193
+ /**
194
+ * Build a VersionedTransaction from deconstructed VersionedTransactionData
195
+ * @param data The versioned transaction data
196
+ * @returns The built versioned transaction
197
+ */
198
+ buildFromVersionedData(data) {
199
+ const staticAccountKeys = data.staticAccountKeys.map((key) => new web3_js_1.PublicKey(key));
200
+ const addressTableLookups = data.addressLookupTables.map((alt) => ({
201
+ accountKey: new web3_js_1.PublicKey(alt.accountKey),
202
+ writableIndexes: alt.writableIndexes,
203
+ readonlyIndexes: alt.readonlyIndexes,
204
+ }));
205
+ const compiledInstructions = data.versionedInstructions.map((instruction) => ({
206
+ programIdIndex: instruction.programIdIndex,
207
+ accountKeyIndexes: instruction.accountKeyIndexes,
208
+ data: Buffer.from(bs58_1.default.decode(instruction.data)),
209
+ }));
210
+ const recentBlockhash = data.recentBlockhash || this._recentBlockhash;
211
+ if (!recentBlockhash) {
212
+ throw new sdk_core_1.BuildTransactionError('Missing recent blockhash for VersionedTransaction');
213
+ }
214
+ if (!this._sender) {
215
+ throw new sdk_core_1.BuildTransactionError('Missing sender (fee payer) for VersionedTransaction');
216
+ }
217
+ const messageV0 = new web3_js_1.MessageV0({
218
+ header: data.messageHeader,
219
+ staticAccountKeys,
220
+ recentBlockhash: recentBlockhash,
221
+ compiledInstructions,
222
+ addressTableLookups,
223
+ });
224
+ return new web3_js_1.VersionedTransaction(messageV0);
225
+ }
226
+ // region Getters and Setters
227
+ /** @inheritdoc */
228
+ get transaction() {
229
+ return this._transaction;
230
+ }
231
+ /** @inheritdoc */
232
+ set transaction(transaction) {
233
+ this._transaction = transaction;
234
+ }
235
+ /** @inheritdoc */
236
+ signImplementation(key) {
237
+ this.validateKey(key);
238
+ this.checkDuplicatedSigner(key);
239
+ const prv = key.key;
240
+ const signer = new _1.KeyPair({ prv: prv });
241
+ this._signers.push(signer);
242
+ return this._transaction;
243
+ }
244
+ /** @inheritDoc */
245
+ addSignature(publicKey, signature) {
246
+ this._signatures.push({ publicKey, signature });
247
+ }
248
+ /**
249
+ * Get the externally-added signatures (via addSignature) in order.
250
+ *
251
+ * @returns {Signature[]} The list of external signatures
252
+ */
253
+ getAdditionalSignatures() {
254
+ return this._signatures;
255
+ }
256
+ /**
257
+ * Add a signature produced by the fee payer of the transaction being built.
258
+ * The fee payer is account 0 of the transaction message, so its signature belongs in slot 0.
259
+ * Use this for signatures produced by the enterprise fee address key (HSM single-sig) of a
260
+ * sponsored transaction; the key must match account 0.
261
+ *
262
+ * @param {BasePublicKey} publicKey The public key of the fee payer; must be account 0 of the message
263
+ * @param {Buffer} signature The signature of the transaction payload
264
+ */
265
+ addFeePayerSignature(publicKey, signature) {
266
+ if (publicKey.pub !== this.getFeePayerAccountKey()) {
267
+ throw new sdk_core_1.SigningError(`Fee payer signature must come from account 0 of the message, got: ${publicKey.pub}`);
268
+ }
269
+ this.addSignature(publicKey, signature);
270
+ }
271
+ /**
272
+ * The account 0 key of the message being built, i.e. the fee payer: the first static account
273
+ * key of a versioned transaction, or the fee payer of a legacy transaction.
274
+ */
275
+ getFeePayerAccountKey() {
276
+ const versionedData = this._transaction.getVersionedTransactionData();
277
+ if (versionedData) {
278
+ return versionedData.staticAccountKeys[0];
279
+ }
280
+ return this._feePayer ?? this._sender;
281
+ }
282
+ /**
283
+ * Sets the sender of this transaction.
284
+ * This account will be responsible for paying transaction fees.
285
+ *
286
+ * @param {string} senderAddress the account that is sending this transaction
287
+ * @returns {TransactionBuilder} This transaction builder
288
+ */
289
+ sender(senderAddress) {
290
+ (0, utils_1.validateAddress)(senderAddress, 'sender');
291
+ this._sender = senderAddress;
292
+ return this;
293
+ }
294
+ /**
295
+ * Set the transaction nonce
296
+ * Requires both optional params in order to use the durable nonce
297
+ *
298
+ * @param {Blockhash} blockHash The latest blockHash
299
+ * @param {DurableNonceParams} [durableNonceParams] An object containing the walletNonceAddress and the authWalletAddress (required for durable nonce)
300
+ * @returns {TransactionBuilder} This transaction builder
301
+ */
302
+ nonce(blockHash, durableNonceParams) {
303
+ if (!blockHash || !(0, utils_1.isValidBlockId)(blockHash)) {
304
+ throw new sdk_core_1.BuildTransactionError('Invalid or missing blockHash, got: ' + blockHash);
305
+ }
306
+ if (durableNonceParams) {
307
+ (0, utils_1.validateAddress)(durableNonceParams.walletNonceAddress, 'walletNonceAddress');
308
+ (0, utils_1.validateAddress)(durableNonceParams.authWalletAddress, 'authWalletAddress');
309
+ if (durableNonceParams.walletNonceAddress === durableNonceParams.authWalletAddress) {
310
+ throw new sdk_core_1.BuildTransactionError('Invalid params: walletNonceAddress cannot be equal to authWalletAddress');
311
+ }
312
+ this._nonceInfo = {
313
+ type: constants_1.InstructionBuilderTypes.NonceAdvance,
314
+ params: durableNonceParams,
315
+ };
316
+ }
317
+ this._recentBlockhash = blockHash;
318
+ return this;
319
+ }
320
+ /**
321
+ * Set the memo
322
+ *
323
+ * @param {string} memo
324
+ * @returns {TransactionBuilder} This transaction builder
325
+ */
326
+ memo(memo) {
327
+ this.validateMemo(memo);
328
+ this._memo = memo;
329
+ return this;
330
+ }
331
+ fee(feeOptions) {
332
+ this._lamportsPerSignature = Number(feeOptions.amount);
333
+ return this;
334
+ }
335
+ setPriorityFee(feeOptions) {
336
+ this._priorityFee = Number(feeOptions.amount);
337
+ return this;
338
+ }
339
+ /**
340
+ * Set an explicit compute-unit limit for this transaction.
341
+ *
342
+ * The priority fee is charged on the requested compute-unit limit rather than the
343
+ * units actually consumed, so every sponsored transaction must set an intent-sized
344
+ * limit. When set, the built transaction prepends a SetComputeUnitLimit instruction
345
+ * ahead of all other instructions (after the durable-nonce AdvanceNonceAccount):
346
+ * [AdvanceNonce?, SetComputeUnitLimit, SetComputeUnitPrice?, ...]. When unset, the
347
+ * built transaction bytes are unchanged.
348
+ *
349
+ * @param {number} units the requested compute-unit limit, an integer between
350
+ * 1 and 1,400,000 (the on-chain per-transaction maximum)
351
+ * @returns {TransactionBuilder} This transaction builder
352
+ */
353
+ setComputeUnitLimit(units) {
354
+ this.validateComputeUnitLimit(units);
355
+ this._computeUnitLimit = units;
356
+ return this;
357
+ }
358
+ validateComputeUnitLimit(units) {
359
+ if (!Number.isInteger(units) || units < 1 || units > constants_1.MAX_COMPUTE_UNIT_LIMIT) {
360
+ throw new sdk_core_1.BuildTransactionError(`Invalid compute unit limit, expected an integer between 1 and ${constants_1.MAX_COMPUTE_UNIT_LIMIT}, got: ${units}`);
361
+ }
362
+ }
363
+ feePayer(feePayer) {
364
+ this._feePayer = feePayer;
365
+ return this;
366
+ }
367
+ /**
368
+ * Used to set the minimum rent exempt amount for an ATA
369
+ *
370
+ * @param tokenAccountRentExemptAmount minimum rent exempt amount in lamports
371
+ */
372
+ associatedTokenAccountRent(tokenAccountRentExemptAmount) {
373
+ this.validateRentExemptAmount(tokenAccountRentExemptAmount);
374
+ this._tokenAccountRentExemptAmount = tokenAccountRentExemptAmount;
375
+ return this;
376
+ }
377
+ validateRentExemptAmount(tokenAccountRentExemptAmount) {
378
+ // _tokenAccountRentExemptAmount is allowed to be undefined or a valid amount if it's defined
379
+ if (tokenAccountRentExemptAmount && !(0, utils_1.isValidAmount)(tokenAccountRentExemptAmount)) {
380
+ throw new sdk_core_1.BuildTransactionError('Invalid tokenAccountRentExemptAmount, got: ' + tokenAccountRentExemptAmount);
381
+ }
382
+ }
383
+ // endregion
384
+ // region Validators
385
+ /** @inheritdoc */
386
+ validateAddress(address, addressFormat) {
387
+ if (!(0, utils_1.isValidAddress)(address.address)) {
388
+ throw new sdk_core_1.BuildTransactionError('Invalid address ' + address.address);
389
+ }
390
+ }
391
+ /** @inheritdoc */
392
+ validateKey(key) {
393
+ let keyPair;
394
+ try {
395
+ keyPair = new _1.KeyPair({ prv: key.key });
396
+ }
397
+ catch {
398
+ throw new sdk_core_1.BuildTransactionError('Invalid key');
399
+ }
400
+ if (!keyPair.getKeys().prv) {
401
+ throw new sdk_core_1.BuildTransactionError('Invalid key');
402
+ }
403
+ }
404
+ /** @inheritdoc */
405
+ validateRawTransaction(rawTransaction) {
406
+ (0, utils_1.validateRawTransaction)(rawTransaction);
407
+ }
408
+ /** @inheritdoc */
409
+ validateTransaction(transaction) {
410
+ this.validateSender();
411
+ this.validateNonce();
412
+ this.validateRentExemptAmount(this._tokenAccountRentExemptAmount);
413
+ }
414
+ /** @inheritdoc */
415
+ validateValue(value) {
416
+ if (value.isLessThan(0)) {
417
+ throw new sdk_core_1.BuildTransactionError('Value cannot be less than zero');
418
+ }
419
+ }
420
+ /** Validates the memo
421
+ *
422
+ * @param {string} memo - the memo as string
423
+ */
424
+ validateMemo(memo) {
425
+ if (!memo) {
426
+ throw new sdk_core_1.BuildTransactionError('Invalid memo, got: ' + memo);
427
+ }
428
+ if (!(0, utils_1.isValidMemo)(memo)) {
429
+ throw new sdk_core_1.BuildTransactionError('Memo is too long');
430
+ }
431
+ }
432
+ /**
433
+ * Validates that the given key is not already in this._signers
434
+ *
435
+ * @param {BaseKey} key - The key to check
436
+ */
437
+ checkDuplicatedSigner(key) {
438
+ this._signers.forEach((kp) => {
439
+ if (kp.getKeys().prv === key.key) {
440
+ throw new sdk_core_1.SigningError('Duplicated signer: ' + key.key);
441
+ }
442
+ });
443
+ }
444
+ /**
445
+ * Validates that the sender field is defined
446
+ */
447
+ validateSender() {
448
+ if (this._sender === undefined) {
449
+ throw new sdk_core_1.BuildTransactionError('Invalid transaction: missing sender');
450
+ }
451
+ }
452
+ /**
453
+ * Validates that the nonce field is defined
454
+ */
455
+ validateNonce() {
456
+ if (this._recentBlockhash === undefined) {
457
+ throw new sdk_core_1.BuildTransactionError('Invalid transaction: missing nonce blockhash');
458
+ }
459
+ }
460
+ }
461
+ exports.TransactionBuilder = TransactionBuilder;
462
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUEsbURBVzhCO0FBQzlCLCtDQUE0QztBQUM1Qyw2Q0FPeUI7QUFDekIsZ0RBQTBCO0FBQzFCLG1DQU9pQjtBQUNqQix3QkFBNEI7QUFDNUIsMkNBQThFO0FBQzlFLG1FQUFnRTtBQUNoRSxvREFBNEI7QUFVNUIseUVBQXNFO0FBRXRFLE1BQXNCLGtCQUFtQixTQUFRLGlDQUFzQjtJQW1CckUsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFsQmIsZ0JBQVcsR0FBZ0IsRUFBRSxDQUFDO1FBTzVCLHNCQUFpQixHQUF3QixFQUFFLENBQUM7UUFDNUMsYUFBUSxHQUFjLEVBQUUsQ0FBQztRQVdqQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUkseUJBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBT0Q7Ozs7T0FJRztJQUNILFdBQVcsQ0FBQyxFQUFlO1FBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUUzQixNQUFNLGdDQUFnQyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQ3JFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLG1DQUF1QixDQUFDLFFBQVEsQ0FDekQsQ0FBQztRQUNGLElBQUksTUFBTSxDQUFDO1FBQ1gsSUFBSSxnQ0FBZ0MsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEQsTUFBTSx3QkFBd0IsR0FBRyxnQ0FBZ0MsQ0FBQyxDQUFDLENBQWEsQ0FBQztZQUNqRixNQUFNLEdBQUcsd0JBQXdCLENBQUMsTUFBTSxD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QixDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDdEQsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0sscUJBQXFCLENBQUMsR0FBWTtRQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQzNCLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2pDLE1BQU0sSUFBSSx1QkFBWSxDQUFDLHFCQUFxQixHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxjQUFjO1FBQ3BCLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMvQixNQUFNLElBQUksZ0NBQXFCLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUN6RSxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssYUFBYTtRQUNuQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4QyxNQUFNLElBQUksZ0NBQXFCLENBQUMsOENBQThDLENBQUMsQ0FBQztRQUNsRixDQUFDO0lBQ0gsQ0FBQztDQUVGO0FBeGhCRCxnREF3aEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHtcbiAgQmFzZUFkZHJlc3MsXG4gIEJhc2VLZXksXG4gIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIsXG4gIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcixcbiAgRmVlT3B0aW9ucyxcbiAgUHVibGljS2V5IGFzIEJhc2VQdWJsaWNLZXksXG4gIFNpZ25hdHVyZSxcbiAgU2lnbmluZ0Vycm9yLFxuICBTb2xWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7XG4gIEJsb2NraGFzaCxcbiAgTWVzc2FnZUFkZHJlc3NUYWJsZUxvb2t1cCxcbiAgTWVzc2FnZVYwLFxuICBQdWJsaWNLZXksXG4gIFRyYW5zYWN0aW9uIGFzIFNvbFRyYW5zYWN0aW9uLFxuICBWZXJzaW9uZWRUcmFuc2FjdGlvbixcbn0gZnJvbSAnQHNvbGFuYS93ZWIzLmpzJztcbmltcG9ydCBiYXNlNTggZnJvbSAnYnM1OCc7XG5pbXBvcnQge1xuICBpc1ZhbGlkQWRkcmVzcyxcbiAgaXNWYWxpZEFtb3VudCxcbiAgaXNWYWxpZEJsb2NrSWQsXG4gIGlzVmFsaWRNZW1vLFxuICB2YWxpZGF0ZUFkZHJlc3MsXG4gIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24sXG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4nO1xuaW1wb3J0IHsgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMsIE1BWF9DT01QVVRFX1VOSVRfTElNSVQgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBzb2xJbnN0cnVjdGlvbkZhY3RvcnkgfSBmcm9tICcuL3NvbEluc3RydWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge1xuICBEdXJhYmxlTm9uY2VQYXJhbXMsXG4gIEluc3RydWN0aW9uUGFyYW1zLFxuICBNZW1vLFxuICBOb25jZSxcbiAgU2V0Q29tcHV0ZVVuaXRMaW1pdCxcbiAgU2V0UHJpb3JpdHlGZWUsXG4gIFRyYW5zZmVyLFxufSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IGluc3RydWN0aW9uUGFyYW1zRmFjdG9yeSB9IGZyb20gJy4vaW5zdHJ1Y3Rpb25QYXJhbXNGYWN0b3J5JztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlciBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgX3RyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbjtcbiAgcHJpdmF0ZSBfc2lnbmF0dXJlczogU2lnbmF0dXJlW10gPSBbXTtcbiAgcHJpdmF0ZSBfbGFtcG9ydHNQZXJTaWduYXR1cmU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudDogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCBfc2VuZGVyOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfcmVjZW50QmxvY2toYXNoOiBCbG9ja2hhc2g7XG4gIHByb3RlY3RlZCBfbm9uY2VJbmZvOiBOb25jZTtcbiAgcHJvdGVjdGVkIF9pbnN0cnVjdGlvbnNEYXRhOiBJbnN0cnVjdGlvblBhcmFtc1tdID0gW107XG4gIHByb3RlY3RlZCBfc2lnbmVyczogS2V5UGFpcltdID0gW107XG4gIHByb3RlY3RlZCBfbWVtbz86IHN0cmluZztcbiAgcHJvdGVjdGVkIF9mZWVQYXllcj86IHN0cmluZztcbiAgcHJvdGVjdGVkIF9wcmlvcml0eUZlZTogbnVtYmVyO1xuICAvKiogRXhwbGljaXQgY29tcHV0ZS11bml0IGxpbWl0IHJlcXVlc3RlZCBmb3IgdGhlIHRyYW5zYWN0aW9uLCBpbiBjb21wdXRlIHVuaXRzICovXG4gIHByb3RlY3RlZCBfY29tcHV0ZVVuaXRMaW1pdD86IG51bWJlcjtcbiAgLyoqIE9wdGlvbmFsIG92ZXJyaWRlIGZvciB0aGUgemstZWxnYW1hbC1wcm9vZiBwcm9ncmFtIGlkICh1c2VkIGJ5IENUIGluc3RydWN0aW9uIGJ1aWxkZXJzKSAqL1xuICBwcm90ZWN0ZWQgX3prUHJvb2ZQcm9ncmFtSWQ/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0cmFuc2FjdGlvbiB0eXBlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSB0cmFuc2FjdGlvbiBidWlsZGVyIGZpZWxkcyB1c2luZyB0aGUgZGVjb2RlZCB0cmFuc2FjdGlvbiBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259IHR4IHRoZSB0cmFuc2FjdGlvbiBkYXRhXG4gICAqL1xuICBpbml0QnVpbGRlcih0eDogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHR4O1xuICAgIGNvbnN0IHR4RGF0YSA9IHR4LnRvSnNvbigpO1xuXG4gICAgY29uc3QgZmlsdGVyZWRUcmFuc2Zlckluc3RydWN0aW9uc0RhdGEgPSB0eERhdGEuaW5zdHJ1Y3Rpb25zRGF0YS5maWx0ZXIoXG4gICAgICAoZGF0YSkgPT4gZGF0YS50eXBlID09PSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5UcmFuc2ZlclxuICAgICk7XG4gICAgbGV0IHNlbmRlcjtcbiAgICBpZiAoZmlsdGVyZWRUcmFuc2Zlckluc3RydWN0aW9uc0RhdGEubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgdHJhbnNmZXJJbnN0cnVjdGlvbnNEYXRhID0gZmlsdGVyZWRUcmFuc2Zlckluc3RydWN0aW9uc0RhdGFbMF0gYXMgVHJhbnNmZXI7XG4gICAgICBzZW5kZXIgPSB0cmFuc2Zlckluc3RydWN0aW9uc0RhdGEucGFyYW1zLmZyb21BZGRyZXNzO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZW5kZXIgPSB0eERhdGEuZmVlUGF5ZXI7XG4gICAgfVxuICAgIHRoaXMuc2VuZGVyKHNlbmRlcik7XG4gICAgdGhpcy5mZWVQYXllcih0eERhdGEuZmVlUGF5ZXIgYXMgc3RyaW5nKTtcbiAgICB0aGlzLm5vbmNlKHR4RGF0YS5ub25jZSwgdHhEYXRhLmR1cmFibGVOb25jZSk7XG4gICAgdGhpcy5faW5zdHJ1Y3Rpb25zRGF0YSA9IGluc3RydWN0aW9uUGFyYW1zRmFjdG9yeShcbiAgICAgIHR4LnR5cGUsXG4gICAgICB0eC5zb2xUcmFuc2FjdGlvbi5pbnN0cnVjdGlvbnMsXG4gICAgICB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICB0eERhdGEuaW5zdHJ1Y3Rpb25zRGF0YSxcbiAgICAgIHR4LnVzZVRva2VuQWRkcmVzc1Rva2VuTmFtZVxuICAgICk7XG4gICAgLy8gUGFyc2UgcHJpb3JpdHkgZmVlIGluc3RydWN0aW9uIGRhdGFcbiAgICBjb25zdCBmaWx0ZXJlZFByaW9yaXR5RmVlSW5zdHJ1Y3Rpb25zRGF0YSA9IHR4RGF0YS5pbnN0cnVjdGlvbnNEYXRhLmZpbHRlcihcbiAgICAgIChkYXRhKSA9PiBkYXRhLnR5cGUgPT09IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlNldFByaW9yaXR5RmVlXG4gICAgKTtcblxuICAgIGZvciAoY29uc3QgaW5zdHJ1Y3Rpb24gb2YgdGhpcy5faW5zdHJ1Y3Rpb25zRGF0YSkge1xuICAgICAgaWYgKGluc3RydWN0aW9uLnR5cGUgPT09IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk1lbW8pIHtcbiAgICAgICAgY29uc3QgbWVtb0luc3RydWN0aW9uOiBNZW1vID0gaW5zdHJ1Y3Rpb247XG4gICAgICAgIHRoaXMubWVtbyhtZW1vSW5zdHJ1Y3Rpb24ucGFyYW1zLm1lbW8pO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5zdHJ1Y3Rpb24udHlwZSA9PT0gSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuTm9uY2VBZHZhbmNlKSB7XG4gICAgICAgIGNvbnN0IGFkdmFuY2VOb25jZUluc3RydWN0aW9uOiBOb25jZSA9IGluc3RydWN0aW9uO1xuICAgICAgICB0aGlzLm5vbmNlKHR4RGF0YS5ub25jZSwgYWR2YW5jZU5vbmNlSW5zdHJ1Y3Rpb24ucGFyYW1zKTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgcHJpbyBmZWUgaW5zdHJ1Y3Rpb24gZXhpc3RzLCBzZXQgdGhlIHByaW9yaXR5IGZlZSB2YXJpYWJsZVxuICAgICAgaWYgKGluc3RydWN0aW9uLnR5cGUgPT09IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlNldFByaW9yaXR5RmVlKSB7XG4gICAgICAgIGNvbnN0IHByaW9yaXR5RmVlSW5zdHJ1Y3Rpb25zRGF0YSA9IGZpbHRlcmVkUHJpb3JpdHlGZWVJbnN0cnVjdGlvbnNEYXRhWzBdIGFzIFNldFByaW9yaXR5RmVlO1xuICAgICAgICB0aGlzLnNldFByaW9yaXR5RmVlKHsgYW1vdW50OiBOdW1iZXIocHJpb3JpdHlGZWVJbnN0cnVjdGlvbnNEYXRhLnBhcmFtcy5mZWUpIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBjb21wdXRlIHVuaXQgbGltaXQgaW5zdHJ1Y3Rpb24gZXhpc3RzLCByZXN0b3JlIHRoZSBjb21wdXRlIHVuaXQgbGltaXRcbiAgICAgIGlmIChpbnN0cnVjdGlvbi50eXBlID09PSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5TZXRDb21wdXRlVW5pdExpbWl0KSB7XG4gICAgICAgIGNvbnN0IGNvbXB1dGVVbml0TGltaXRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uIGFzIFNldENvbXB1dGVVbml0TGltaXQ7XG4gICAgICAgIHRoaXMuc2V0Q29tcHV0ZVVuaXRMaW1pdChjb21wdXRlVW5pdExpbWl0SW5zdHJ1Y3Rpb24ucGFyYW1zLnVuaXRzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgIHRoaXMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgdHguZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICB0aGlzLmluaXRCdWlsZGVyKHR4KTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgYnVpbHRUcmFuc2FjdGlvbiA9IHRoaXMuYnVpbGRTb2xUcmFuc2FjdGlvbigpO1xuXG4gICAgaWYgKGJ1aWx0VHJhbnNhY3Rpb24gaW5zdGFuY2VvZiBWZXJzaW9uZWRUcmFuc2FjdGlvbikge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbi52ZXJzaW9uZWRUcmFuc2FjdGlvbiA9IGJ1aWx0VHJhbnNhY3Rpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uc29sVHJhbnNhY3Rpb24gPSBidWlsdFRyYW5zYWN0aW9uO1xuICAgIH1cblxuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb25UeXBlKHRoaXMudHJhbnNhY3Rpb25UeXBlKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldEluc3RydWN0aW9uc0RhdGEodGhpcy5faW5zdHJ1Y3Rpb25zRGF0YSk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5sb2FkSW5wdXRzQW5kT3V0cHV0cygpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uLnRva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQgPSB0aGlzLl90b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50O1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgc29sYW5hIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkU29sVHJhbnNhY3Rpb24oKTogU29sVHJhbnNhY3Rpb24gfCBWZXJzaW9uZWRUcmFuc2FjdGlvbiB7XG4gICAgYXNzZXJ0KHRoaXMuX3NlbmRlciwgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignc2VuZGVyIGlzIHJlcXVpcmVkIGJlZm9yZSBidWlsZGluZycpKTtcbiAgICBhc3NlcnQodGhpcy5fcmVjZW50QmxvY2toYXNoLCBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdyZWNlbnQgYmxvY2toYXNoIGlzIHJlcXVpcmVkIGJlZm9yZSBidWlsZGluZycpKTtcblxuICAgIC8vIENoZWNrIGlmIHdlIHNob3VsZCBidWlsZCBhcyBWZXJzaW9uZWRUcmFuc2FjdGlvblxuICAgIGlmICh0aGlzLl90cmFuc2FjdGlvbi5pc1ZlcnNpb25lZFRyYW5zYWN0aW9uKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmJ1aWxkVmVyc2lvbmVkVHJhbnNhY3Rpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYnVpbGRMZWdhY3lUcmFuc2FjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBsZWdhY3kgU29sYW5hIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZExlZ2FjeVRyYW5zYWN0aW9uKCk6IFNvbFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCB0eCA9IG5ldyBTb2xUcmFuc2FjdGlvbigpO1xuICAgIGlmICh0aGlzLl90cmFuc2FjdGlvbj8uc29sVHJhbnNhY3Rpb24/LnNpZ25hdHVyZXMpIHtcbiAgICAgIHR4LnNpZ25hdHVyZXMgPSB0aGlzLl90cmFuc2FjdGlvbj8uc29sVHJhbnNhY3Rpb24/LnNpZ25hdHVyZXM7XG4gICAgfVxuXG4gICAgdHguZmVlUGF5ZXIgPSB0aGlzLl9mZWVQYXllciA/IG5ldyBQdWJsaWNLZXkodGhpcy5fZmVlUGF5ZXIpIDogbmV3IFB1YmxpY0tleSh0aGlzLl9zZW5kZXIpO1xuXG4gICAgaWYgKHRoaXMuX25vbmNlSW5mbykge1xuICAgICAgdHgubm9uY2VJbmZvID0ge1xuICAgICAgICBub25jZTogdGhpcy5fcmVjZW50QmxvY2toYXNoLFxuICAgICAgICBub25jZUluc3RydWN0aW9uOiBzb2xJbnN0cnVjdGlvbkZhY3RvcnkodGhpcy5fbm9uY2VJbmZvKVswXSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHR4LnJlY2VudEJsb2NraGFzaCA9IHRoaXMuX3JlY2VudEJsb2NraGFzaDtcbiAgICB9XG5cbiAgICAvLyBUaGUgcHJpb3JpdHkgZmVlIGlzIGNoYXJnZWQgb24gdGhlIHJlcXVlc3RlZCBjb21wdXRlLXVuaXQgbGltaXQsIHNvIGFuIGV4cGxpY2l0XG4gICAgLy8gbGltaXQgbXVzdCBwcmVjZWRlIGV2ZXJ5IGVudHJ5IG9mIF9pbnN0cnVjdGlvbnNEYXRhIChpbmNsdWRpbmcgdGhlIG9wdGlvbmFsXG4gICAgLy8gU2V0Q29tcHV0ZVVuaXRQcmljZSkuIHdlYjMuanMgc2VyaWFsaXplcyB0aGUgZHVyYWJsZS1ub25jZSBBZHZhbmNlTm9uY2VBY2NvdW50XG4gICAgLy8gZmlyc3QgdmlhIG5vbmNlSW5mbywgZ2l2aW5nIFtBZHZhbmNlTm9uY2UsIFNldENvbXB1dGVVbml0TGltaXQsIFNldENvbXB1dGVVbml0UHJpY2U/LCAuLi5dLlxuICAgIGNvbnN0IGNvbXB1dGVVbml0TGltaXREYXRhOiBTZXRDb21wdXRlVW5pdExpbWl0IHwgdW5kZWZpbmVkID1cbiAgICAgIHRoaXMuX2NvbXB1dGVVbml0TGltaXQgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlNldENvbXB1dGVVbml0TGltaXQsXG4gICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgdW5pdHM6IHRoaXMuX2NvbXB1dGVVbml0TGltaXQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgaWYgKGNvbXB1dGVVbml0TGltaXREYXRhKSB7XG4gICAgICB0eC5hZGQoLi4uc29sSW5zdHJ1Y3Rpb25GYWN0b3J5KGNvbXB1dGVVbml0TGltaXREYXRhKSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgaW5zdHJ1Y3Rpb24gb2YgdGhpcy5faW5zdHJ1Y3Rpb25zRGF0YSkge1xuICAgICAgdHguYWRkKC4uLnNvbEluc3RydWN0aW9uRmFjdG9yeShpbnN0cnVjdGlvbiwgdGhpcy5femtQcm9vZlByb2dyYW1JZCkpO1xuICAgIH1cbiAgICBpZiAoY29tcHV0ZVVuaXRMaW1pdERhdGEpIHtcbiAgICAgIC8vIFJlY29yZCB0aGUgaW5zdHJ1Y3Rpb24gc28gZXhwbGFpbiBhbmQgcGFyc2luZyBzZWUgaXQsIG1pcnJvcmluZyBob3cgbWVtbyBpcyByZWNvcmRlZFxuICAgICAgdGhpcy5faW5zdHJ1Y3Rpb25zRGF0YS51bnNoaWZ0KGNvbXB1dGVVbml0TGltaXREYXRhKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWVtbykge1xuICAgICAgY29uc3QgbWVtb0RhdGE6IE1lbW8gPSB7XG4gICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk1lbW8sXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIG1lbW86IHRoaXMuX21lbW8sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgdGhpcy5faW5zdHJ1Y3Rpb25zRGF0YS5wdXNoKG1lbW9EYXRhKTtcbiAgICAgIHR4LmFkZCguLi5zb2xJbnN0cnVjdGlvbkZhY3RvcnkobWVtb0RhdGEpKTtcbiAgICB9XG5cbiAgICB0aGlzLl90cmFuc2FjdGlvbi5sYW1wb3J0c1BlclNpZ25hdHVyZSA9IHRoaXMuX2xhbXBvcnRzUGVyU2lnbmF0dXJlO1xuXG4gICAgZm9yIChjb25zdCBzaWduZXIgb2YgdGhpcy5fc2lnbmVycykge1xuICAgICAgY29uc3QgcHVibGljS2V5ID0gbmV3IFB1YmxpY0tleShzaWduZXIuZ2V0S2V5cygpLnB1Yik7XG4gICAgICBjb25zdCBzZWNyZXRLZXkgPSBzaWduZXIuZ2V0S2V5cyh0cnVlKS5wcnY7XG4gICAgICBhc3NlcnQoc2VjcmV0S2V5IGluc3RhbmNlb2YgVWludDhBcnJheSk7XG4gICAgICB0eC5wYXJ0aWFsU2lnbih7IHB1YmxpY0tleSwgc2VjcmV0S2V5IH0pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc2lnbmF0dXJlIG9mIHRoaXMuX3NpZ25hdHVyZXMpIHtcbiAgICAgIGNvbnN0IHNvbFB1YmxpY0tleSA9IG5ldyBQdWJsaWNLZXkoc2lnbmF0dXJlLnB1YmxpY0tleS5wdWIpO1xuICAgICAgdHguYWRkU2lnbmF0dXJlKHNvbFB1YmxpY0tleSwgc2lnbmF0dXJlLnNpZ25hdHVyZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR4O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhIFZlcnNpb25lZFRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7VmVyc2lvbmVkVHJhbnNhY3Rpb259IFRoZSBidWlsdCB2ZXJzaW9uZWQgdHJhbnNhY3Rpb25cbiAgICovXG4gIHByaXZhdGUgYnVpbGRWZXJzaW9uZWRUcmFuc2FjdGlvbigpOiBWZXJzaW9uZWRUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgdmVyc2lvbmVkVHhEYXRhID0gdGhpcy5fdHJhbnNhY3Rpb24uZ2V0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhKCk7XG5cbiAgICBpZiAoIXZlcnNpb25lZFR4RGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignTWlzc2luZyBWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEnKTtcbiAgICB9XG5cbiAgICBjb25zdCB2ZXJzaW9uZWRUeCA9IHRoaXMuYnVpbGRGcm9tVmVyc2lvbmVkRGF0YSh2ZXJzaW9uZWRUeERhdGEpO1xuXG4gICAgdGhpcy5fdHJhbnNhY3Rpb24ubGFtcG9ydHNQZXJTaWduYXR1cmUgPSB0aGlzLl9sYW1wb3J0c1BlclNpZ25hdHVyZTtcblxuICAgIGZvciAoY29uc3Qgc2lnbmVyIG9mIHRoaXMuX3NpZ25lcnMpIHtcbiAgICAgIGNvbnN0IHB1YmxpY0tleSA9IG5ldyBQdWJsaWNLZXkoc2lnbmVyLmdldEtleXMoKS5wdWIpO1xuICAgICAgY29uc3Qgc2VjcmV0S2V5ID0gc2lnbmVyLmdldEtleXModHJ1ZSkucHJ2O1xuICAgICAgYXNzZXJ0KHNlY3JldEtleSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpO1xuICAgICAgdmVyc2lvbmVkVHguc2lnbihbeyBwdWJsaWNLZXksIHNlY3JldEtleSB9XSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzaWduYXR1cmUgb2YgdGhpcy5fc2lnbmF0dXJlcykge1xuICAgICAgY29uc3Qgc29sUHVibGljS2V5ID0gbmV3IFB1YmxpY0tleShzaWduYXR1cmUucHVibGljS2V5LnB1Yik7XG4gICAgICB2ZXJzaW9uZWRUeC5hZGRTaWduYXR1cmUoc29sUHVibGljS2V5LCBzaWduYXR1cmUuc2lnbmF0dXJlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyc2lvbmVkVHg7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBWZXJzaW9uZWRUcmFuc2FjdGlvbiBmcm9tIGRlY29uc3RydWN0ZWQgVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhXG4gICAqIEBwYXJhbSBkYXRhIFRoZSB2ZXJzaW9uZWQgdHJhbnNhY3Rpb24gZGF0YVxuICAgKiBAcmV0dXJucyBUaGUgYnVpbHQgdmVyc2lvbmVkIHRyYW5zYWN0aW9uXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkRnJvbVZlcnNpb25lZERhdGEoZGF0YTogU29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhKTogVmVyc2lvbmVkVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHN0YXRpY0FjY291bnRLZXlzID0gZGF0YS5zdGF0aWNBY2NvdW50S2V5cy5tYXAoKGtleTogc3RyaW5nKSA9PiBuZXcgUHVibGljS2V5KGtleSkpO1xuXG4gICAgY29uc3QgYWRkcmVzc1RhYmxlTG9va3VwczogTWVzc2FnZUFkZHJlc3NUYWJsZUxvb2t1cFtdID0gZGF0YS5hZGRyZXNzTG9va3VwVGFibGVzLm1hcCgoYWx0KSA9PiAoe1xuICAgICAgYWNjb3VudEtleTogbmV3IFB1YmxpY0tleShhbHQuYWNjb3VudEtleSksXG4gICAgICB3cml0YWJsZUluZGV4ZXM6IGFsdC53cml0YWJsZUluZGV4ZXMsXG4gICAgICByZWFkb25seUluZGV4ZXM6IGFsdC5yZWFkb25seUluZGV4ZXMsXG4gICAgfSkpO1xuXG4gICAgY29uc3QgY29tcGlsZWRJbnN0cnVjdGlvbnMgPSBkYXRhLnZlcnNpb25lZEluc3RydWN0aW9ucy5tYXAoKGluc3RydWN0aW9uKSA9PiAoe1xuICAgICAgcHJvZ3JhbUlkSW5kZXg6IGluc3RydWN0aW9uLnByb2dyYW1JZEluZGV4LFxuICAgICAgYWNjb3VudEtleUluZGV4ZXM6IGluc3RydWN0aW9uLmFjY291bnRLZXlJbmRleGVzLFxuICAgICAgZGF0YTogQnVmZmVyLmZyb20oYmFzZTU4LmRlY29kZShpbnN0cnVjdGlvbi5kYXRhKSksXG4gICAgfSkpO1xuXG4gICAgY29uc3QgcmVjZW50QmxvY2toYXNoID0gZGF0YS5yZWNlbnRCbG9ja2hhc2ggfHwgdGhpcy5fcmVjZW50QmxvY2toYXNoO1xuXG4gICAgaWYgKCFyZWNlbnRCbG9ja2hhc2gpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ01pc3NpbmcgcmVjZW50IGJsb2NraGFzaCBmb3IgVmVyc2lvbmVkVHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3NlbmRlcikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignTWlzc2luZyBzZW5kZXIgKGZlZSBwYXllcikgZm9yIFZlcnNpb25lZFRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZVYwID0gbmV3IE1lc3NhZ2VWMCh7XG4gICAgICBoZWFkZXI6IGRhdGEubWVzc2FnZUhlYWRlcixcbiAgICAgIHN0YXRpY0FjY291bnRLZXlzLFxuICAgICAgcmVjZW50QmxvY2toYXNoOiByZWNlbnRCbG9ja2hhc2gsXG4gICAgICBjb21waWxlZEluc3RydWN0aW9ucyxcbiAgICAgIGFkZHJlc3NUYWJsZUxvb2t1cHMsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IFZlcnNpb25lZFRyYW5zYWN0aW9uKG1lc3NhZ2VWMCk7XG4gIH1cblxuICAvLyByZWdpb24gR2V0dGVycyBhbmQgU2V0dGVyc1xuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvbigpOiBUcmFuc2FjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBzZXQgdHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKSB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgc2lnbkltcGxlbWVudGF0aW9uKGtleTogQmFzZUtleSk6IFRyYW5zYWN0aW9uIHtcbiAgICB0aGlzLnZhbGlkYXRlS2V5KGtleSk7XG4gICAgdGhpcy5jaGVja0R1cGxpY2F0ZWRTaWduZXIoa2V5KTtcbiAgICBjb25zdCBwcnYgPSBrZXkua2V5O1xuICAgIGNvbnN0IHNpZ25lciA9IG5ldyBLZXlQYWlyKHsgcHJ2OiBwcnYgfSk7XG4gICAgdGhpcy5fc2lnbmVycy5wdXNoKHNpZ25lcik7XG5cbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgYWRkU2lnbmF0dXJlKHB1YmxpY0tleTogQmFzZVB1YmxpY0tleSwgc2lnbmF0dXJlOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2goeyBwdWJsaWNLZXksIHNpZ25hdHVyZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGV4dGVybmFsbHktYWRkZWQgc2lnbmF0dXJlcyAodmlhIGFkZFNpZ25hdHVyZSkgaW4gb3JkZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIHtTaWduYXR1cmVbXX0gVGhlIGxpc3Qgb2YgZXh0ZXJuYWwgc2lnbmF0dXJlc1xuICAgKi9cbiAgcHJvdGVjdGVkIGdldEFkZGl0aW9uYWxTaWduYXR1cmVzKCk6IFNpZ25hdHVyZVtdIHtcbiAgICByZXR1cm4gdGhpcy5fc2lnbmF0dXJlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBzaWduYXR1cmUgcHJvZHVjZWQgYnkgdGhlIGZlZSBwYXllciBvZiB0aGUgdHJhbnNhY3Rpb24gYmVpbmcgYnVpbHQuXG4gICAqIFRoZSBmZWUgcGF5ZXIgaXMgYWNjb3VudCAwIG9mIHRoZSB0cmFuc2FjdGlvbiBtZXNzYWdlLCBzbyBpdHMgc2lnbmF0dXJlIGJlbG9uZ3MgaW4gc2xvdCAwLlxuICAgKiBVc2UgdGhpcyBmb3Igc2lnbmF0dXJlcyBwcm9kdWNlZCBieSB0aGUgZW50ZXJwcmlzZSBmZWUgYWRkcmVzcyBrZXkgKEhTTSBzaW5nbGUtc2lnKSBvZiBhXG4gICAqIHNwb25zb3JlZCB0cmFuc2FjdGlvbjsgdGhlIGtleSBtdXN0IG1hdGNoIGFjY291bnQgMC5cbiAgICpcbiAgICogQHBhcmFtIHtCYXNlUHVibGljS2V5fSBwdWJsaWNLZXkgVGhlIHB1YmxpYyBrZXkgb2YgdGhlIGZlZSBwYXllcjsgbXVzdCBiZSBhY2NvdW50IDAgb2YgdGhlIG1lc3NhZ2VcbiAgICogQHBhcmFtIHtCdWZmZXJ9IHNpZ25hdHVyZSBUaGUgc2lnbmF0dXJlIG9mIHRoZSB0cmFuc2FjdGlvbiBwYXlsb2FkXG4gICAqL1xuICBhZGRGZWVQYXllclNpZ25hdHVyZShwdWJsaWNLZXk6IEJhc2VQdWJsaWNLZXksIHNpZ25hdHVyZTogQnVmZmVyKTogdm9pZCB7XG4gICAgaWYgKHB1YmxpY0tleS5wdWIgIT09IHRoaXMuZ2V0RmVlUGF5ZXJBY2NvdW50S2V5KCkpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoYEZlZSBwYXllciBzaWduYXR1cmUgbXVzdCBjb21lIGZyb20gYWNjb3VudCAwIG9mIHRoZSBtZXNzYWdlLCBnb3Q6ICR7cHVibGljS2V5LnB1Yn1gKTtcbiAgICB9XG4gICAgdGhpcy5hZGRTaWduYXR1cmUocHVibGljS2V5LCBzaWduYXR1cmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBhY2NvdW50IDAga2V5IG9mIHRoZSBtZXNzYWdlIGJlaW5nIGJ1aWx0LCBpLmUuIHRoZSBmZWUgcGF5ZXI6IHRoZSBmaXJzdCBzdGF0aWMgYWNjb3VudFxuICAgKiBrZXkgb2YgYSB2ZXJzaW9uZWQgdHJhbnNhY3Rpb24sIG9yIHRoZSBmZWUgcGF5ZXIgb2YgYSBsZWdhY3kgdHJhbnNhY3Rpb24uXG4gICAqL1xuICBwcml2YXRlIGdldEZlZVBheWVyQWNjb3VudEtleSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHZlcnNpb25lZERhdGEgPSB0aGlzLl90cmFuc2FjdGlvbi5nZXRWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEoKTtcbiAgICBpZiAodmVyc2lvbmVkRGF0YSkge1xuICAgICAgcmV0dXJuIHZlcnNpb25lZERhdGEuc3RhdGljQWNjb3VudEtleXNbMF07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9mZWVQYXllciA/PyB0aGlzLl9zZW5kZXI7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgc2VuZGVyIG9mIHRoaXMgdHJhbnNhY3Rpb24uXG4gICAqIFRoaXMgYWNjb3VudCB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvciBwYXlpbmcgdHJhbnNhY3Rpb24gZmVlcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlbmRlckFkZHJlc3MgdGhlIGFjY291bnQgdGhhdCBpcyBzZW5kaW5nIHRoaXMgdHJhbnNhY3Rpb25cbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICBzZW5kZXIoc2VuZGVyQWRkcmVzczogc3RyaW5nKTogdGhpcyB7XG4gICAgdmFsaWRhdGVBZGRyZXNzKHNlbmRlckFkZHJlc3MsICdzZW5kZXInKTtcbiAgICB0aGlzLl9zZW5kZXIgPSBzZW5kZXJBZGRyZXNzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNhY3Rpb24gbm9uY2VcbiAgICogUmVxdWlyZXMgYm90aCBvcHRpb25hbCBwYXJhbXMgaW4gb3JkZXIgdG8gdXNlIHRoZSBkdXJhYmxlIG5vbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7QmxvY2toYXNofSBibG9ja0hhc2ggVGhlIGxhdGVzdCBibG9ja0hhc2hcbiAgICogQHBhcmFtIHtEdXJhYmxlTm9uY2VQYXJhbXN9IFtkdXJhYmxlTm9uY2VQYXJhbXNdIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSB3YWxsZXROb25jZUFkZHJlc3MgYW5kIHRoZSBhdXRoV2FsbGV0QWRkcmVzcyAocmVxdWlyZWQgZm9yIGR1cmFibGUgbm9uY2UpXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlclxuICAgKi9cbiAgbm9uY2UoYmxvY2tIYXNoOiBCbG9ja2hhc2gsIGR1cmFibGVOb25jZVBhcmFtcz86IER1cmFibGVOb25jZVBhcmFtcyk6IHRoaXMge1xuICAgIGlmICghYmxvY2tIYXNoIHx8ICFpc1ZhbGlkQmxvY2tJZChibG9ja0hhc2gpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIG9yIG1pc3NpbmcgYmxvY2tIYXNoLCBnb3Q6ICcgKyBibG9ja0hhc2gpO1xuICAgIH1cbiAgICBpZiAoZHVyYWJsZU5vbmNlUGFyYW1zKSB7XG4gICAgICB2YWxpZGF0ZUFkZHJlc3MoZHVyYWJsZU5vbmNlUGFyYW1zLndhbGxldE5vbmNlQWRkcmVzcywgJ3dhbGxldE5vbmNlQWRkcmVzcycpO1xuICAgICAgdmFsaWRhdGVBZGRyZXNzKGR1cmFibGVOb25jZVBhcmFtcy5hdXRoV2FsbGV0QWRkcmVzcywgJ2F1dGhXYWxsZXRBZGRyZXNzJyk7XG4gICAgICBpZiAoZHVyYWJsZU5vbmNlUGFyYW1zLndhbGxldE5vbmNlQWRkcmVzcyA9PT0gZHVyYWJsZU5vbmNlUGFyYW1zLmF1dGhXYWxsZXRBZGRyZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgcGFyYW1zOiB3YWxsZXROb25jZUFkZHJlc3MgY2Fubm90IGJlIGVxdWFsIHRvIGF1dGhXYWxsZXRBZGRyZXNzJyk7XG4gICAgICB9XG4gICAgICB0aGlzLl9ub25jZUluZm8gPSB7XG4gICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk5vbmNlQWR2YW5jZSxcbiAgICAgICAgcGFyYW1zOiBkdXJhYmxlTm9uY2VQYXJhbXMsXG4gICAgICB9O1xuICAgIH1cbiAgICB0aGlzLl9yZWNlbnRCbG9ja2hhc2ggPSBibG9ja0hhc2g7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogIFNldCB0aGUgbWVtb1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVtb1xuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICovXG4gIG1lbW8obWVtbzogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZU1lbW8obWVtbyk7XG4gICAgdGhpcy5fbWVtbyA9IG1lbW87XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmZWUoZmVlT3B0aW9uczogRmVlT3B0aW9ucyk6IHRoaXMge1xuICAgIHRoaXMuX2xhbXBvcnRzUGVyU2lnbmF0dXJlID0gTnVtYmVyKGZlZU9wdGlvbnMuYW1vdW50KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBzZXRQcmlvcml0eUZlZShmZWVPcHRpb25zOiBGZWVPcHRpb25zKTogdGhpcyB7XG4gICAgdGhpcy5fcHJpb3JpdHlGZWUgPSBOdW1iZXIoZmVlT3B0aW9ucy5hbW91bnQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhbiBleHBsaWNpdCBjb21wdXRlLXVuaXQgbGltaXQgZm9yIHRoaXMgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIFRoZSBwcmlvcml0eSBmZWUgaXMgY2hhcmdlZCBvbiB0aGUgcmVxdWVzdGVkIGNvbXB1dGUtdW5pdCBsaW1pdCByYXRoZXIgdGhhbiB0aGVcbiAgICogdW5pdHMgYWN0dWFsbHkgY29uc3VtZWQsIHNvIGV2ZXJ5IHNwb25zb3JlZCB0cmFuc2FjdGlvbiBtdXN0IHNldCBhbiBpbnRlbnQtc2l6ZWRcbiAgICogbGltaXQuIFdoZW4gc2V0LCB0aGUgYnVpbHQgdHJhbnNhY3Rpb24gcHJlcGVuZHMgYSBTZXRDb21wdXRlVW5pdExpbWl0IGluc3RydWN0aW9uXG4gICAqIGFoZWFkIG9mIGFsbCBvdGhlciBpbnN0cnVjdGlvbnMgKGFmdGVyIHRoZSBkdXJhYmxlLW5vbmNlIEFkdmFuY2VOb25jZUFjY291bnQpOlxuICAgKiBbQWR2YW5jZU5vbmNlPywgU2V0Q29tcHV0ZVVuaXRMaW1pdCwgU2V0Q29tcHV0ZVVuaXRQcmljZT8sIC4uLl0uIFdoZW4gdW5zZXQsIHRoZVxuICAgKiBidWlsdCB0cmFuc2FjdGlvbiBieXRlcyBhcmUgdW5jaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdW5pdHMgdGhlIHJlcXVlc3RlZCBjb21wdXRlLXVuaXQgbGltaXQsIGFuIGludGVnZXIgYmV0d2VlblxuICAgKiAxIGFuZCAxLDQwMCwwMDAgKHRoZSBvbi1jaGFpbiBwZXItdHJhbnNhY3Rpb24gbWF4aW11bSlcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICBwdWJsaWMgc2V0Q29tcHV0ZVVuaXRMaW1pdCh1bml0czogbnVtYmVyKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZUNvbXB1dGVVbml0TGltaXQodW5pdHMpO1xuICAgIHRoaXMuX2NvbXB1dGVVbml0TGltaXQgPSB1bml0cztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVDb21wdXRlVW5pdExpbWl0KHVuaXRzOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIodW5pdHMpIHx8IHVuaXRzIDwgMSB8fCB1bml0cyA+IE1BWF9DT01QVVRFX1VOSVRfTElNSVQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGNvbXB1dGUgdW5pdCBsaW1pdCwgZXhwZWN0ZWQgYW4gaW50ZWdlciBiZXR3ZWVuIDEgYW5kICR7TUFYX0NPTVBVVEVfVU5JVF9MSU1JVH0sIGdvdDogJHt1bml0c31gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGZlZVBheWVyKGZlZVBheWVyOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLl9mZWVQYXllciA9IGZlZVBheWVyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gc2V0IHRoZSBtaW5pbXVtIHJlbnQgZXhlbXB0IGFtb3VudCBmb3IgYW4gQVRBXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50IG1pbmltdW0gcmVudCBleGVtcHQgYW1vdW50IGluIGxhbXBvcnRzXG4gICAqL1xuICBhc3NvY2lhdGVkVG9rZW5BY2NvdW50UmVudCh0b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50OiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlUmVudEV4ZW1wdEFtb3VudCh0b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50KTtcbiAgICB0aGlzLl90b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50ID0gdG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVSZW50RXhlbXB0QW1vdW50KHRva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQ6IHN0cmluZykge1xuICAgIC8vIF90b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50IGlzIGFsbG93ZWQgdG8gYmUgdW5kZWZpbmVkIG9yIGEgdmFsaWQgYW1vdW50IGlmIGl0J3MgZGVmaW5lZFxuICAgIGlmICh0b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50ICYmICFpc1ZhbGlkQW1vdW50KHRva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQsIGdvdDogJyArIHRva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBWYWxpZGF0b3JzXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUFkZHJlc3MoYWRkcmVzczogQmFzZUFkZHJlc3MsIGFkZHJlc3NGb3JtYXQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIWlzVmFsaWRBZGRyZXNzKGFkZHJlc3MuYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgYWRkcmVzcyAnICsgYWRkcmVzcy5hZGRyZXNzKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVLZXkoa2V5OiBCYXNlS2V5KTogdm9pZCB7XG4gICAgbGV0IGtleVBhaXI6IEtleVBhaXI7XG4gICAgdHJ5IHtcbiAgICAgIGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjoga2V5LmtleSB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQga2V5Jyk7XG4gICAgfVxuXG4gICAgaWYgKCFrZXlQYWlyLmdldEtleXMoKS5wcnYpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQga2V5Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24/OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdGVTZW5kZXIoKTtcbiAgICB0aGlzLnZhbGlkYXRlTm9uY2UoKTtcbiAgICB0aGlzLnZhbGlkYXRlUmVudEV4ZW1wdEFtb3VudCh0aGlzLl90b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVZhbHVlKHZhbHVlOiBCaWdOdW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUuaXNMZXNzVGhhbigwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVmFsdWUgY2Fubm90IGJlIGxlc3MgdGhhbiB6ZXJvJyk7XG4gICAgfVxuICB9XG4gIC8qKiBWYWxpZGF0ZXMgdGhlIG1lbW9cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lbW8gLSB0aGUgbWVtbyBhcyBzdHJpbmdcbiAgICovXG4gIHZhbGlkYXRlTWVtbyhtZW1vOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIW1lbW8pIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgbWVtbywgZ290OiAnICsgbWVtbyk7XG4gICAgfVxuICAgIGlmICghaXNWYWxpZE1lbW8obWVtbykpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ01lbW8gaXMgdG9vIGxvbmcnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoYXQgdGhlIGdpdmVuIGtleSBpcyBub3QgYWxyZWFkeSBpbiB0aGlzLl9zaWduZXJzXG4gICAqXG4gICAqIEBwYXJhbSB7QmFzZUtleX0ga2V5IC0gVGhlIGtleSB0byBjaGVja1xuICAgKi9cbiAgcHJpdmF0ZSBjaGVja0R1cGxpY2F0ZWRTaWduZXIoa2V5OiBCYXNlS2V5KSB7XG4gICAgdGhpcy5fc2lnbmVycy5mb3JFYWNoKChrcCkgPT4ge1xuICAgICAgaWYgKGtwLmdldEtleXMoKS5wcnYgPT09IGtleS5rZXkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignRHVwbGljYXRlZCBzaWduZXI6ICcgKyBrZXkua2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhhdCB0aGUgc2VuZGVyIGZpZWxkIGlzIGRlZmluZWRcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVTZW5kZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3NlbmRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIHNlbmRlcicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhhdCB0aGUgbm9uY2UgZmllbGQgaXMgZGVmaW5lZFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZU5vbmNlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9yZWNlbnRCbG9ja2hhc2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBub25jZSBibG9ja2hhc2gnKTtcbiAgICB9XG4gIH1cbiAgLy8gZW5kcmVnaW9uXG59XG4iXX0=
@@ -2,6 +2,8 @@ import { BaseTransactionBuilderFactory } from '@bitgo-beta/sdk-core';
2
2
  import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
3
3
  import { AtaInitializationBuilder } from './ataInitializationBuilder';
4
4
  import { CloseAtaBuilder } from './closeAtaBuilder';
5
+ import { ConfidentialTransferBuilder } from './confidentialTransferBuilder';
6
+ import { RecoverNestedAtaBuilder } from './recoverNestedAtaBuilder';
5
7
  import { CustomInstructionBuilder } from './customInstructionBuilder';
6
8
  import { StakingActivateBuilder } from './stakingActivateBuilder';
7
9
  import { StakingAuthorizeBuilder } from './stakingAuthorizeBuilder';
@@ -93,10 +95,22 @@ export declare class TransactionBuilderFactory extends BaseTransactionBuilderFac
93
95
  * Returns the builder to create a close associated token account transaction.
94
96
  */
95
97
  getCloseAtaInitializationBuilder(tx?: Transaction): CloseAtaBuilder;
98
+ /**
99
+ * Returns the builder to recover tokens from a nested ATA (an ATA owned by another ATA).
100
+ */
101
+ getRecoverNestedAtaBuilder(tx?: Transaction): RecoverNestedAtaBuilder;
96
102
  /**
97
103
  * Returns the builder to create transactions with custom Solana instructions.
98
104
  */
99
105
  getCustomInstructionBuilder(tx?: Transaction): CustomInstructionBuilder;
106
+ /**
107
+ * Returns the builder to create Token-2022 confidential transfer transactions.
108
+ *
109
+ * Supports Phase 1a CT instructions: ConfigureAccount, ApplyPendingBalance,
110
+ * Deposit, Withdraw, Transfer, and all verify-proof instructions.
111
+ * Instruction builders are v0/v1-agnostic.
112
+ */
113
+ getConfidentialTransferBuilder(tx?: Transaction): ConfidentialTransferBuilder;
100
114
  /**
101
115
  * Initialize the builder with the given transaction
102
116
  *