@bitgo-beta/sdk-coin-sol 7.6.4-beta.7 → 7.6.4-beta.700

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 (443) 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 +223 -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 +93 -0
  12. package/dist/cjs/src/lib/confidentialTransferBuilder.d.ts.map +1 -0
  13. package/dist/cjs/src/lib/confidentialTransferBuilder.js +212 -0
  14. package/dist/{src → cjs/src}/lib/constants.d.ts +89 -2
  15. package/dist/cjs/src/lib/constants.d.ts.map +1 -0
  16. package/dist/cjs/src/lib/constants.js +269 -0
  17. package/dist/cjs/src/lib/customInstructionBuilder.d.ts.map +1 -0
  18. package/dist/cjs/src/lib/customInstructionBuilder.js +289 -0
  19. package/dist/cjs/src/lib/explainTransactionWasm.d.ts +21 -0
  20. package/dist/cjs/src/lib/explainTransactionWasm.d.ts.map +1 -0
  21. package/dist/cjs/src/lib/explainTransactionWasm.js +304 -0
  22. package/dist/cjs/src/lib/iface.d.ts +526 -0
  23. package/dist/cjs/src/lib/iface.d.ts.map +1 -0
  24. package/dist/cjs/src/lib/iface.js +7 -0
  25. package/dist/{src → cjs/src}/lib/index.d.ts +5 -0
  26. package/dist/cjs/src/lib/index.d.ts.map +1 -0
  27. package/dist/cjs/src/lib/index.js +93 -0
  28. package/dist/{src → cjs/src}/lib/instructionParamsFactory.d.ts +3 -1
  29. package/dist/cjs/src/lib/instructionParamsFactory.d.ts.map +1 -0
  30. package/dist/cjs/src/lib/instructionParamsFactory.js +1220 -0
  31. package/dist/cjs/src/lib/jitoStakePoolOperations.d.ts.map +1 -0
  32. package/dist/cjs/src/lib/jitoStakePoolOperations.js +200 -0
  33. package/dist/cjs/src/lib/keyPair.d.ts.map +1 -0
  34. package/dist/cjs/src/lib/keyPair.js +63 -0
  35. package/dist/cjs/src/lib/messages/index.d.ts.map +1 -0
  36. package/dist/{src → cjs/src}/lib/messages/index.js +1 -1
  37. package/dist/cjs/src/lib/messages/messageBuilderFactory.d.ts.map +1 -0
  38. package/dist/cjs/src/lib/messages/messageBuilderFactory.js +19 -0
  39. package/dist/cjs/src/lib/recoverNestedAtaBuilder.d.ts +25 -0
  40. package/dist/cjs/src/lib/recoverNestedAtaBuilder.d.ts.map +1 -0
  41. package/dist/cjs/src/lib/recoverNestedAtaBuilder.js +90 -0
  42. package/dist/cjs/src/lib/scaledUiAmount.d.ts +30 -0
  43. package/dist/cjs/src/lib/scaledUiAmount.d.ts.map +1 -0
  44. package/dist/cjs/src/lib/scaledUiAmount.js +112 -0
  45. package/dist/{src → cjs/src}/lib/solInstructionFactory.d.ts +1 -1
  46. package/dist/cjs/src/lib/solInstructionFactory.d.ts.map +1 -0
  47. package/dist/cjs/src/lib/solInstructionFactory.js +1094 -0
  48. package/dist/cjs/src/lib/stakingActivateBuilder.d.ts.map +1 -0
  49. package/dist/cjs/src/lib/stakingActivateBuilder.js +120 -0
  50. package/dist/cjs/src/lib/stakingAuthorizeBuilder.d.ts.map +1 -0
  51. package/dist/cjs/src/lib/stakingAuthorizeBuilder.js +89 -0
  52. package/dist/cjs/src/lib/stakingDeactivateBuilder.d.ts.map +1 -0
  53. package/dist/cjs/src/lib/stakingDeactivateBuilder.js +208 -0
  54. package/dist/cjs/src/lib/stakingDelegateBuilder.d.ts.map +1 -0
  55. package/dist/cjs/src/lib/stakingDelegateBuilder.js +120 -0
  56. package/dist/cjs/src/lib/stakingRawMsgAuthorizeBuilder.d.ts.map +1 -0
  57. package/dist/cjs/src/lib/stakingRawMsgAuthorizeBuilder.js +110 -0
  58. package/dist/cjs/src/lib/stakingWithdrawBuilder.d.ts.map +1 -0
  59. package/dist/cjs/src/lib/stakingWithdrawBuilder.js +78 -0
  60. package/dist/cjs/src/lib/token2022Resolve.d.ts +106 -0
  61. package/dist/cjs/src/lib/token2022Resolve.d.ts.map +1 -0
  62. package/dist/cjs/src/lib/token2022Resolve.js +199 -0
  63. package/dist/cjs/src/lib/tokenExtensions.d.ts +26 -0
  64. package/dist/cjs/src/lib/tokenExtensions.d.ts.map +1 -0
  65. package/dist/cjs/src/lib/tokenExtensions.js +105 -0
  66. package/dist/{src → cjs/src}/lib/tokenTransferBuilder.d.ts +27 -1
  67. package/dist/cjs/src/lib/tokenTransferBuilder.d.ts.map +1 -0
  68. package/dist/cjs/src/lib/tokenTransferBuilder.js +237 -0
  69. package/dist/cjs/src/lib/transaction.d.ts.map +1 -0
  70. package/dist/cjs/src/lib/transaction.js +615 -0
  71. package/dist/{src → cjs/src}/lib/transactionBuilder.d.ts +2 -0
  72. package/dist/cjs/src/lib/transactionBuilder.d.ts.map +1 -0
  73. package/dist/cjs/src/lib/transactionBuilder.js +380 -0
  74. package/dist/{src → cjs/src}/lib/transactionBuilderFactory.d.ts +14 -0
  75. package/dist/cjs/src/lib/transactionBuilderFactory.d.ts.map +1 -0
  76. package/dist/cjs/src/lib/transactionBuilderFactory.js +222 -0
  77. package/dist/cjs/src/lib/transferBuilder.d.ts.map +1 -0
  78. package/dist/cjs/src/lib/transferBuilder.js +70 -0
  79. package/dist/cjs/src/lib/transferBuilderV2.d.ts +69 -0
  80. package/dist/cjs/src/lib/transferBuilderV2.d.ts.map +1 -0
  81. package/dist/cjs/src/lib/transferBuilderV2.js +254 -0
  82. package/dist/{src → cjs/src}/lib/utils.d.ts +5 -0
  83. package/dist/cjs/src/lib/utils.d.ts.map +1 -0
  84. package/dist/cjs/src/lib/utils.js +657 -0
  85. package/dist/cjs/src/lib/walletInitializationBuilder.d.ts.map +1 -0
  86. package/dist/cjs/src/lib/walletInitializationBuilder.js +71 -0
  87. package/dist/cjs/src/register.d.ts +5 -0
  88. package/dist/cjs/src/register.d.ts.map +1 -0
  89. package/dist/cjs/src/register.js +29 -0
  90. package/dist/{src → cjs/src}/sol.d.ts +125 -3
  91. package/dist/cjs/src/sol.d.ts.map +1 -0
  92. package/dist/cjs/src/sol.js +1637 -0
  93. package/dist/{src → cjs/src}/solToken.d.ts +7 -0
  94. package/dist/cjs/src/solToken.d.ts.map +1 -0
  95. package/dist/cjs/src/solToken.js +79 -0
  96. package/dist/cjs/src/tsol.d.ts.map +1 -0
  97. package/dist/cjs/src/tsol.js +24 -0
  98. package/dist/{test → cjs/test}/fixtures/sol.d.ts.map +1 -1
  99. package/dist/cjs/test/fixtures/sol.js +1433 -0
  100. package/dist/{test → cjs/test}/resources/sol.d.ts +29 -29
  101. package/dist/cjs/test/resources/sol.d.ts.map +1 -0
  102. package/dist/cjs/test/resources/sol.js +320 -0
  103. package/dist/cjs/test/unit/explainTransactionWasm.d.ts +5 -0
  104. package/dist/cjs/test/unit/explainTransactionWasm.d.ts.map +1 -0
  105. package/dist/cjs/test/unit/explainTransactionWasm.js +66 -0
  106. package/dist/cjs/test/unit/fixtures/solBackupKey.d.ts.map +1 -0
  107. package/dist/cjs/test/unit/fixtures/solBackupKey.js +8 -0
  108. package/dist/cjs/test/unit/getBuilderFactory.d.ts.map +1 -0
  109. package/dist/cjs/test/unit/getBuilderFactory.js +10 -0
  110. package/dist/cjs/test/unit/instructionParamsFactory.d.ts.map +1 -0
  111. package/dist/cjs/test/unit/instructionParamsFactory.js +425 -0
  112. package/dist/cjs/test/unit/instructionParamsFactory.staking.d.ts.map +1 -0
  113. package/dist/cjs/test/unit/instructionParamsFactory.staking.js +1059 -0
  114. package/dist/cjs/test/unit/jitoWasmVerification.d.ts +2 -0
  115. package/dist/cjs/test/unit/jitoWasmVerification.d.ts.map +1 -0
  116. package/dist/cjs/test/unit/jitoWasmVerification.js +78 -0
  117. package/dist/{test → cjs/test}/unit/keyPair.d.ts.map +1 -1
  118. package/dist/cjs/test/unit/keyPair.js +177 -0
  119. package/dist/cjs/test/unit/messages/messageBuilderFactory.d.ts.map +1 -0
  120. package/dist/cjs/test/unit/messages/messageBuilderFactory.js +118 -0
  121. package/dist/cjs/test/unit/messages/simpleMessageBuilder.d.ts.map +1 -0
  122. package/dist/cjs/test/unit/messages/simpleMessageBuilder.js +194 -0
  123. package/dist/cjs/test/unit/register.d.ts +2 -0
  124. package/dist/cjs/test/unit/register.d.ts.map +1 -0
  125. package/dist/cjs/test/unit/register.js +65 -0
  126. package/dist/cjs/test/unit/scaledUiAmount.d.ts +2 -0
  127. package/dist/cjs/test/unit/scaledUiAmount.d.ts.map +1 -0
  128. package/dist/cjs/test/unit/scaledUiAmount.js +101 -0
  129. package/dist/{test → cjs/test}/unit/sol.d.ts.map +1 -1
  130. package/dist/cjs/test/unit/sol.js +4899 -0
  131. package/dist/cjs/test/unit/solInstructionFactory.d.ts.map +1 -0
  132. package/dist/cjs/test/unit/solInstructionFactory.js +623 -0
  133. package/dist/cjs/test/unit/solToken.d.ts.map +1 -0
  134. package/dist/cjs/test/unit/solToken.js +37 -0
  135. package/dist/cjs/test/unit/token2022Resolve.d.ts +2 -0
  136. package/dist/cjs/test/unit/token2022Resolve.d.ts.map +1 -0
  137. package/dist/cjs/test/unit/token2022Resolve.js +252 -0
  138. package/dist/cjs/test/unit/tokenExtensions.d.ts +2 -0
  139. package/dist/cjs/test/unit/tokenExtensions.d.ts.map +1 -0
  140. package/dist/cjs/test/unit/tokenExtensions.js +58 -0
  141. package/dist/cjs/test/unit/transaction.d.ts.map +1 -0
  142. package/dist/cjs/test/unit/transaction.js +1108 -0
  143. package/dist/cjs/test/unit/transactionBuilder/StakingWithdrawBuilder.d.ts.map +1 -0
  144. package/dist/cjs/test/unit/transactionBuilder/StakingWithdrawBuilder.js +202 -0
  145. package/dist/cjs/test/unit/transactionBuilder/ataInitBuilder.d.ts.map +1 -0
  146. package/dist/cjs/test/unit/transactionBuilder/ataInitBuilder.js +508 -0
  147. package/dist/cjs/test/unit/transactionBuilder/closeAtaBuilder.d.ts +2 -0
  148. package/dist/cjs/test/unit/transactionBuilder/closeAtaBuilder.d.ts.map +1 -0
  149. package/dist/cjs/test/unit/transactionBuilder/closeAtaBuilder.js +343 -0
  150. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferBuilder.d.ts +2 -0
  151. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferBuilder.d.ts.map +1 -0
  152. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferBuilder.js +909 -0
  153. package/dist/cjs/test/unit/transactionBuilder/customInstructionBuilder.d.ts.map +1 -0
  154. package/dist/cjs/test/unit/transactionBuilder/customInstructionBuilder.js +413 -0
  155. package/dist/cjs/test/unit/transactionBuilder/stakingActivateBuilder.d.ts.map +1 -0
  156. package/dist/cjs/test/unit/transactionBuilder/stakingActivateBuilder.js +430 -0
  157. package/dist/cjs/test/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts.map +1 -0
  158. package/dist/cjs/test/unit/transactionBuilder/stakingAuthorizeBuilder.js +157 -0
  159. package/dist/cjs/test/unit/transactionBuilder/stakingDeactivateBuilder.d.ts.map +1 -0
  160. package/dist/cjs/test/unit/transactionBuilder/stakingDeactivateBuilder.js +384 -0
  161. package/dist/cjs/test/unit/transactionBuilder/stakingDelegateBuilder.d.ts.map +1 -0
  162. package/dist/cjs/test/unit/transactionBuilder/stakingDelegateBuilder.js +224 -0
  163. package/dist/cjs/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts.map +1 -0
  164. package/dist/cjs/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.js +259 -0
  165. package/dist/cjs/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
  166. package/dist/cjs/test/unit/transactionBuilder/tokenTransferBuilder.js +926 -0
  167. package/dist/cjs/test/unit/transactionBuilder/transactionBuilder.d.ts.map +1 -0
  168. package/dist/cjs/test/unit/transactionBuilder/transactionBuilder.js +495 -0
  169. package/dist/cjs/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
  170. package/dist/cjs/test/unit/transactionBuilder/transferBuilder.js +286 -0
  171. package/dist/cjs/test/unit/transactionBuilder/transferBuilderV2.d.ts.map +1 -0
  172. package/dist/cjs/test/unit/transactionBuilder/transferBuilderV2.js +910 -0
  173. package/dist/cjs/test/unit/transactionBuilder/walletInitBuilder.d.ts.map +1 -0
  174. package/dist/cjs/test/unit/transactionBuilder/walletInitBuilder.js +259 -0
  175. package/dist/{test → cjs/test}/unit/utils.d.ts.map +1 -1
  176. package/dist/cjs/test/unit/utils.js +628 -0
  177. package/dist/cjs/test/unit/versionedTransaction.d.ts.map +1 -0
  178. package/dist/cjs/test/unit/versionedTransaction.js +207 -0
  179. package/dist/cjs/tsconfig.tsbuildinfo +1 -0
  180. package/dist/esm/bigint-buffer-guard.d.ts +1 -0
  181. package/dist/esm/index.d.ts +7 -0
  182. package/dist/esm/index.js +7 -0
  183. package/dist/esm/lib/ataInitializationBuilder.d.ts +58 -0
  184. package/dist/esm/lib/ataInitializationBuilder.d.ts.map +1 -0
  185. package/dist/esm/lib/ataInitializationBuilder.js +183 -0
  186. package/dist/esm/lib/closeAtaBuilder.d.ts +55 -0
  187. package/dist/esm/lib/closeAtaBuilder.d.ts.map +1 -0
  188. package/dist/esm/lib/closeAtaBuilder.js +155 -0
  189. package/dist/esm/lib/confidentialTransferBuilder.d.ts +93 -0
  190. package/dist/esm/lib/confidentialTransferBuilder.d.ts.map +1 -0
  191. package/dist/esm/lib/confidentialTransferBuilder.js +205 -0
  192. package/dist/esm/lib/constants.d.ts +227 -0
  193. package/dist/esm/lib/constants.d.ts.map +1 -0
  194. package/dist/esm/lib/constants.js +266 -0
  195. package/dist/esm/lib/customInstructionBuilder.d.ts +72 -0
  196. package/dist/esm/lib/customInstructionBuilder.js +282 -0
  197. package/dist/esm/lib/explainTransactionWasm.d.ts +21 -0
  198. package/dist/esm/lib/explainTransactionWasm.d.ts.map +1 -0
  199. package/dist/esm/lib/explainTransactionWasm.js +301 -0
  200. package/dist/esm/lib/iface.d.ts +526 -0
  201. package/dist/esm/lib/iface.d.ts.map +1 -0
  202. package/dist/esm/lib/iface.js +3 -0
  203. package/dist/esm/lib/index.d.ts +27 -0
  204. package/dist/esm/lib/index.d.ts.map +1 -0
  205. package/dist/esm/lib/index.js +27 -0
  206. package/dist/esm/lib/instructionParamsFactory.d.ts +14 -0
  207. package/dist/esm/lib/instructionParamsFactory.d.ts.map +1 -0
  208. package/dist/esm/lib/instructionParamsFactory.js +1212 -0
  209. package/dist/esm/lib/jitoStakePoolOperations.d.ts +113 -0
  210. package/dist/esm/lib/jitoStakePoolOperations.js +189 -0
  211. package/dist/esm/lib/keyPair.d.ts +26 -0
  212. package/dist/esm/lib/keyPair.js +59 -0
  213. package/dist/esm/lib/messages/index.d.ts +2 -0
  214. package/dist/esm/lib/messages/index.js +2 -0
  215. package/dist/esm/lib/messages/messageBuilderFactory.d.ts +7 -0
  216. package/dist/{src → esm}/lib/messages/messageBuilderFactory.js +5 -9
  217. package/dist/esm/lib/recoverNestedAtaBuilder.d.ts +25 -0
  218. package/dist/esm/lib/recoverNestedAtaBuilder.d.ts.map +1 -0
  219. package/dist/esm/lib/recoverNestedAtaBuilder.js +83 -0
  220. package/dist/esm/lib/scaledUiAmount.d.ts +30 -0
  221. package/dist/esm/lib/scaledUiAmount.d.ts.map +1 -0
  222. package/dist/esm/lib/scaledUiAmount.js +108 -0
  223. package/dist/esm/lib/solInstructionFactory.d.ts +10 -0
  224. package/dist/esm/lib/solInstructionFactory.d.ts.map +1 -0
  225. package/dist/esm/lib/solInstructionFactory.js +1088 -0
  226. package/dist/esm/lib/stakingActivateBuilder.d.ts +59 -0
  227. package/dist/esm/lib/stakingActivateBuilder.js +113 -0
  228. package/dist/esm/lib/stakingAuthorizeBuilder.d.ts +43 -0
  229. package/dist/esm/lib/stakingAuthorizeBuilder.js +82 -0
  230. package/dist/esm/lib/stakingDeactivateBuilder.d.ts +81 -0
  231. package/dist/{src → esm}/lib/stakingDeactivateBuilder.js +31 -38
  232. package/dist/esm/lib/stakingDelegateBuilder.d.ts +42 -0
  233. package/dist/esm/lib/stakingDelegateBuilder.js +113 -0
  234. package/dist/esm/lib/stakingRawMsgAuthorizeBuilder.d.ts +33 -0
  235. package/dist/esm/lib/stakingRawMsgAuthorizeBuilder.js +103 -0
  236. package/dist/esm/lib/stakingWithdrawBuilder.d.ts +31 -0
  237. package/dist/esm/lib/stakingWithdrawBuilder.js +71 -0
  238. package/dist/esm/lib/token2022Resolve.d.ts +106 -0
  239. package/dist/esm/lib/token2022Resolve.d.ts.map +1 -0
  240. package/dist/esm/lib/token2022Resolve.js +194 -0
  241. package/dist/esm/lib/tokenExtensions.d.ts +26 -0
  242. package/dist/esm/lib/tokenExtensions.d.ts.map +1 -0
  243. package/dist/esm/lib/tokenExtensions.js +99 -0
  244. package/dist/esm/lib/tokenTransferBuilder.d.ts +67 -0
  245. package/dist/esm/lib/tokenTransferBuilder.d.ts.map +1 -0
  246. package/dist/esm/lib/tokenTransferBuilder.js +230 -0
  247. package/dist/esm/lib/transaction.d.ts +103 -0
  248. package/dist/esm/lib/transaction.d.ts.map +1 -0
  249. package/dist/esm/lib/transaction.js +608 -0
  250. package/dist/esm/lib/transactionBuilder.d.ts +130 -0
  251. package/dist/esm/lib/transactionBuilder.d.ts.map +1 -0
  252. package/dist/esm/lib/transactionBuilder.js +373 -0
  253. package/dist/esm/lib/transactionBuilderFactory.d.ts +129 -0
  254. package/dist/esm/lib/transactionBuilderFactory.d.ts.map +1 -0
  255. package/dist/esm/lib/transactionBuilderFactory.js +218 -0
  256. package/dist/esm/lib/transferBuilder.d.ts +26 -0
  257. package/dist/esm/lib/transferBuilder.js +63 -0
  258. package/dist/esm/lib/transferBuilderV2.d.ts +69 -0
  259. package/dist/esm/lib/transferBuilderV2.d.ts.map +1 -0
  260. package/dist/esm/lib/transferBuilderV2.js +247 -0
  261. package/dist/esm/lib/utils.d.ts +205 -0
  262. package/dist/{src → esm}/lib/utils.d.ts.map +1 -1
  263. package/dist/esm/lib/utils.js +619 -0
  264. package/dist/esm/lib/walletInitializationBuilder.d.ts +26 -0
  265. package/dist/esm/lib/walletInitializationBuilder.js +64 -0
  266. package/dist/esm/register.d.ts +5 -0
  267. package/dist/esm/register.d.ts.map +1 -0
  268. package/dist/esm/register.js +24 -0
  269. package/dist/esm/sol.d.ts +349 -0
  270. package/dist/esm/sol.d.ts.map +1 -0
  271. package/dist/esm/sol.js +1596 -0
  272. package/dist/esm/solToken.d.ts +44 -0
  273. package/dist/esm/solToken.d.ts.map +1 -0
  274. package/dist/esm/solToken.js +75 -0
  275. package/dist/esm/tsol.d.ts +11 -0
  276. package/dist/esm/tsol.js +20 -0
  277. package/package.json +36 -16
  278. package/dist/src/config/token2022StaticConfig.d.ts +0 -3
  279. package/dist/src/config/token2022StaticConfig.d.ts.map +0 -1
  280. package/dist/src/config/token2022StaticConfig.js +0 -50
  281. package/dist/src/lib/ataInitializationBuilder.d.ts.map +0 -1
  282. package/dist/src/lib/ataInitializationBuilder.js +0 -196
  283. package/dist/src/lib/closeAtaBuilder.d.ts +0 -19
  284. package/dist/src/lib/closeAtaBuilder.d.ts.map +0 -1
  285. package/dist/src/lib/closeAtaBuilder.js +0 -69
  286. package/dist/src/lib/constants.d.ts.map +0 -1
  287. package/dist/src/lib/constants.js +0 -171
  288. package/dist/src/lib/customInstructionBuilder.js +0 -289
  289. package/dist/src/lib/iface.d.ts +0 -244
  290. package/dist/src/lib/iface.d.ts.map +0 -1
  291. package/dist/src/lib/iface.js +0 -7
  292. package/dist/src/lib/index.d.ts.map +0 -1
  293. package/dist/src/lib/index.js +0 -77
  294. package/dist/src/lib/instructionParamsFactory.d.ts.map +0 -1
  295. package/dist/src/lib/instructionParamsFactory.js +0 -1036
  296. package/dist/src/lib/jitoStakePoolOperations.js +0 -200
  297. package/dist/src/lib/keyPair.js +0 -63
  298. package/dist/src/lib/solInstructionFactory.d.ts.map +0 -1
  299. package/dist/src/lib/solInstructionFactory.js +0 -572
  300. package/dist/src/lib/stakingActivateBuilder.js +0 -120
  301. package/dist/src/lib/stakingAuthorizeBuilder.js +0 -89
  302. package/dist/src/lib/stakingDelegateBuilder.js +0 -120
  303. package/dist/src/lib/stakingRawMsgAuthorizeBuilder.js +0 -110
  304. package/dist/src/lib/stakingWithdrawBuilder.js +0 -78
  305. package/dist/src/lib/token2022Config.d.ts +0 -44
  306. package/dist/src/lib/token2022Config.d.ts.map +0 -1
  307. package/dist/src/lib/token2022Config.js +0 -27
  308. package/dist/src/lib/tokenTransferBuilder.d.ts.map +0 -1
  309. package/dist/src/lib/tokenTransferBuilder.js +0 -188
  310. package/dist/src/lib/transaction.d.ts.map +0 -1
  311. package/dist/src/lib/transaction.js +0 -595
  312. package/dist/src/lib/transactionBuilder.d.ts.map +0 -1
  313. package/dist/src/lib/transactionBuilder.js +0 -380
  314. package/dist/src/lib/transactionBuilderFactory.d.ts.map +0 -1
  315. package/dist/src/lib/transactionBuilderFactory.js +0 -202
  316. package/dist/src/lib/transferBuilder.js +0 -70
  317. package/dist/src/lib/transferBuilderV2.d.ts +0 -43
  318. package/dist/src/lib/transferBuilderV2.d.ts.map +0 -1
  319. package/dist/src/lib/transferBuilderV2.js +0 -210
  320. package/dist/src/lib/utils.js +0 -586
  321. package/dist/src/lib/walletInitializationBuilder.js +0 -71
  322. package/dist/src/register.d.ts +0 -3
  323. package/dist/src/register.d.ts.map +0 -1
  324. package/dist/src/register.js +0 -15
  325. package/dist/src/sol.d.ts.map +0 -1
  326. package/dist/src/sol.js +0 -1285
  327. package/dist/src/solToken.d.ts.map +0 -1
  328. package/dist/src/solToken.js +0 -69
  329. package/dist/src/tsol.js +0 -24
  330. package/dist/test/fixtures/sol.js +0 -1433
  331. package/dist/test/resources/sol.d.ts.map +0 -1
  332. package/dist/test/resources/sol.js +0 -320
  333. package/dist/test/unit/fixtures/solBackupKey.d.ts.map +0 -1
  334. package/dist/test/unit/fixtures/solBackupKey.js +0 -8
  335. package/dist/test/unit/getBuilderFactory.d.ts.map +0 -1
  336. package/dist/test/unit/getBuilderFactory.js +0 -10
  337. package/dist/test/unit/instructionParamsFactory.d.ts.map +0 -1
  338. package/dist/test/unit/instructionParamsFactory.js +0 -412
  339. package/dist/test/unit/instructionParamsFactory.staking.d.ts.map +0 -1
  340. package/dist/test/unit/instructionParamsFactory.staking.js +0 -1059
  341. package/dist/test/unit/keyPair.js +0 -177
  342. package/dist/test/unit/messages/messageBuilderFactory.d.ts.map +0 -1
  343. package/dist/test/unit/messages/messageBuilderFactory.js +0 -118
  344. package/dist/test/unit/messages/simpleMessageBuilder.d.ts.map +0 -1
  345. package/dist/test/unit/messages/simpleMessageBuilder.js +0 -194
  346. package/dist/test/unit/sol.js +0 -3108
  347. package/dist/test/unit/solInstructionFactory.d.ts.map +0 -1
  348. package/dist/test/unit/solInstructionFactory.js +0 -454
  349. package/dist/test/unit/solToken.d.ts.map +0 -1
  350. package/dist/test/unit/solToken.js +0 -31
  351. package/dist/test/unit/transaction.d.ts.map +0 -1
  352. package/dist/test/unit/transaction.js +0 -983
  353. package/dist/test/unit/transactionBuilder/StakingWithdrawBuilder.d.ts.map +0 -1
  354. package/dist/test/unit/transactionBuilder/StakingWithdrawBuilder.js +0 -202
  355. package/dist/test/unit/transactionBuilder/ataInitBuilder.d.ts.map +0 -1
  356. package/dist/test/unit/transactionBuilder/ataInitBuilder.js +0 -471
  357. package/dist/test/unit/transactionBuilder/customInstructionBuilder.d.ts.map +0 -1
  358. package/dist/test/unit/transactionBuilder/customInstructionBuilder.js +0 -413
  359. package/dist/test/unit/transactionBuilder/stakingActivateBuilder.d.ts.map +0 -1
  360. package/dist/test/unit/transactionBuilder/stakingActivateBuilder.js +0 -430
  361. package/dist/test/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts.map +0 -1
  362. package/dist/test/unit/transactionBuilder/stakingAuthorizeBuilder.js +0 -157
  363. package/dist/test/unit/transactionBuilder/stakingDeactivateBuilder.d.ts.map +0 -1
  364. package/dist/test/unit/transactionBuilder/stakingDeactivateBuilder.js +0 -384
  365. package/dist/test/unit/transactionBuilder/stakingDelegateBuilder.d.ts.map +0 -1
  366. package/dist/test/unit/transactionBuilder/stakingDelegateBuilder.js +0 -224
  367. package/dist/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts.map +0 -1
  368. package/dist/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.js +0 -259
  369. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +0 -1
  370. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +0 -787
  371. package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts.map +0 -1
  372. package/dist/test/unit/transactionBuilder/transactionBuilder.js +0 -495
  373. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +0 -1
  374. package/dist/test/unit/transactionBuilder/transferBuilder.js +0 -286
  375. package/dist/test/unit/transactionBuilder/transferBuilderV2.d.ts.map +0 -1
  376. package/dist/test/unit/transactionBuilder/transferBuilderV2.js +0 -862
  377. package/dist/test/unit/transactionBuilder/walletInitBuilder.d.ts.map +0 -1
  378. package/dist/test/unit/transactionBuilder/walletInitBuilder.js +0 -259
  379. package/dist/test/unit/utils.js +0 -517
  380. package/dist/test/unit/versionedTransaction.d.ts.map +0 -1
  381. package/dist/test/unit/versionedTransaction.js +0 -207
  382. package/dist/tsconfig.tsbuildinfo +0 -1
  383. /package/dist/{src → cjs/src}/bigint-buffer-guard.d.ts +0 -0
  384. /package/dist/{src → cjs/src}/index.d.ts +0 -0
  385. /package/dist/{src → cjs/src}/lib/customInstructionBuilder.d.ts +0 -0
  386. /package/dist/{src → cjs/src}/lib/jitoStakePoolOperations.d.ts +0 -0
  387. /package/dist/{src → cjs/src}/lib/keyPair.d.ts +0 -0
  388. /package/dist/{src → cjs/src}/lib/messages/index.d.ts +0 -0
  389. /package/dist/{src → cjs/src}/lib/messages/messageBuilderFactory.d.ts +0 -0
  390. /package/dist/{src → cjs/src}/lib/stakingActivateBuilder.d.ts +0 -0
  391. /package/dist/{src → cjs/src}/lib/stakingAuthorizeBuilder.d.ts +0 -0
  392. /package/dist/{src → cjs/src}/lib/stakingDeactivateBuilder.d.ts +0 -0
  393. /package/dist/{src → cjs/src}/lib/stakingDelegateBuilder.d.ts +0 -0
  394. /package/dist/{src → cjs/src}/lib/stakingRawMsgAuthorizeBuilder.d.ts +0 -0
  395. /package/dist/{src → cjs/src}/lib/stakingWithdrawBuilder.d.ts +0 -0
  396. /package/dist/{src → cjs/src}/lib/transaction.d.ts +0 -0
  397. /package/dist/{src → cjs/src}/lib/transferBuilder.d.ts +0 -0
  398. /package/dist/{src → cjs/src}/lib/walletInitializationBuilder.d.ts +0 -0
  399. /package/dist/{src → cjs/src}/tsol.d.ts +0 -0
  400. /package/dist/{test → cjs/test}/fixtures/sol.d.ts +0 -0
  401. /package/dist/{test → cjs/test}/unit/fixtures/solBackupKey.d.ts +0 -0
  402. /package/dist/{test → cjs/test}/unit/getBuilderFactory.d.ts +0 -0
  403. /package/dist/{test → cjs/test}/unit/instructionParamsFactory.d.ts +0 -0
  404. /package/dist/{test → cjs/test}/unit/instructionParamsFactory.staking.d.ts +0 -0
  405. /package/dist/{test → cjs/test}/unit/keyPair.d.ts +0 -0
  406. /package/dist/{test → cjs/test}/unit/messages/messageBuilderFactory.d.ts +0 -0
  407. /package/dist/{test → cjs/test}/unit/messages/simpleMessageBuilder.d.ts +0 -0
  408. /package/dist/{test → cjs/test}/unit/sol.d.ts +0 -0
  409. /package/dist/{test → cjs/test}/unit/solInstructionFactory.d.ts +0 -0
  410. /package/dist/{test → cjs/test}/unit/solToken.d.ts +0 -0
  411. /package/dist/{test → cjs/test}/unit/transaction.d.ts +0 -0
  412. /package/dist/{test → cjs/test}/unit/transactionBuilder/StakingWithdrawBuilder.d.ts +0 -0
  413. /package/dist/{test → cjs/test}/unit/transactionBuilder/ataInitBuilder.d.ts +0 -0
  414. /package/dist/{test → cjs/test}/unit/transactionBuilder/customInstructionBuilder.d.ts +0 -0
  415. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingActivateBuilder.d.ts +0 -0
  416. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts +0 -0
  417. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingDeactivateBuilder.d.ts +0 -0
  418. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingDelegateBuilder.d.ts +0 -0
  419. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts +0 -0
  420. /package/dist/{test → cjs/test}/unit/transactionBuilder/tokenTransferBuilder.d.ts +0 -0
  421. /package/dist/{test → cjs/test}/unit/transactionBuilder/transactionBuilder.d.ts +0 -0
  422. /package/dist/{test → cjs/test}/unit/transactionBuilder/transferBuilder.d.ts +0 -0
  423. /package/dist/{test → cjs/test}/unit/transactionBuilder/transferBuilderV2.d.ts +0 -0
  424. /package/dist/{test → cjs/test}/unit/transactionBuilder/walletInitBuilder.d.ts +0 -0
  425. /package/dist/{test → cjs/test}/unit/utils.d.ts +0 -0
  426. /package/dist/{test → cjs/test}/unit/versionedTransaction.d.ts +0 -0
  427. /package/dist/{src → esm}/bigint-buffer-guard.d.ts.map +0 -0
  428. /package/dist/{src → esm}/bigint-buffer-guard.js +0 -0
  429. /package/dist/{src → esm}/index.d.ts.map +0 -0
  430. /package/dist/{src → esm}/lib/customInstructionBuilder.d.ts.map +0 -0
  431. /package/dist/{src → esm}/lib/jitoStakePoolOperations.d.ts.map +0 -0
  432. /package/dist/{src → esm}/lib/keyPair.d.ts.map +0 -0
  433. /package/dist/{src → esm}/lib/messages/index.d.ts.map +0 -0
  434. /package/dist/{src → esm}/lib/messages/messageBuilderFactory.d.ts.map +0 -0
  435. /package/dist/{src → esm}/lib/stakingActivateBuilder.d.ts.map +0 -0
  436. /package/dist/{src → esm}/lib/stakingAuthorizeBuilder.d.ts.map +0 -0
  437. /package/dist/{src → esm}/lib/stakingDeactivateBuilder.d.ts.map +0 -0
  438. /package/dist/{src → esm}/lib/stakingDelegateBuilder.d.ts.map +0 -0
  439. /package/dist/{src → esm}/lib/stakingRawMsgAuthorizeBuilder.d.ts.map +0 -0
  440. /package/dist/{src → esm}/lib/stakingWithdrawBuilder.d.ts.map +0 -0
  441. /package/dist/{src → esm}/lib/transferBuilder.d.ts.map +0 -0
  442. /package/dist/{src → esm}/lib/walletInitializationBuilder.d.ts.map +0 -0
  443. /package/dist/{src → esm}/tsol.d.ts.map +0 -0
@@ -0,0 +1,130 @@
1
+ import BigNumber from 'bignumber.js';
2
+ import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
3
+ import { BaseAddress, BaseKey, BaseTransactionBuilder, FeeOptions, PublicKey as BasePublicKey, TransactionType } from '@bitgo-beta/sdk-core';
4
+ import { Transaction } from './transaction';
5
+ import { Blockhash, Transaction as SolTransaction, VersionedTransaction } from '@solana/web3.js';
6
+ import { KeyPair } from '.';
7
+ import { DurableNonceParams, InstructionParams, Nonce } from './iface';
8
+ export declare abstract class TransactionBuilder extends BaseTransactionBuilder {
9
+ protected _transaction: Transaction;
10
+ private _signatures;
11
+ private _lamportsPerSignature;
12
+ private _tokenAccountRentExemptAmount;
13
+ protected _sender: string;
14
+ protected _recentBlockhash: Blockhash;
15
+ protected _nonceInfo: Nonce;
16
+ protected _instructionsData: InstructionParams[];
17
+ protected _signers: KeyPair[];
18
+ protected _memo?: string;
19
+ protected _feePayer?: string;
20
+ protected _priorityFee: number;
21
+ /** Optional override for the zk-elgamal-proof program id (used by CT instruction builders) */
22
+ protected _zkProofProgramId?: string;
23
+ constructor(_coinConfig: Readonly<CoinConfig>);
24
+ /**
25
+ * The transaction type.
26
+ */
27
+ protected abstract get transactionType(): TransactionType;
28
+ /**
29
+ * Initialize the transaction builder fields using the decoded transaction data
30
+ *
31
+ * @param {Transaction} tx the transaction data
32
+ */
33
+ initBuilder(tx: Transaction): void;
34
+ /** @inheritdoc */
35
+ protected fromImplementation(rawTransaction: string): Transaction;
36
+ /** @inheritdoc */
37
+ protected buildImplementation(): Promise<Transaction>;
38
+ /**
39
+ * Builds the solana transaction.
40
+ */
41
+ protected buildSolTransaction(): SolTransaction | VersionedTransaction;
42
+ /**
43
+ * Builds a legacy Solana transaction.
44
+ */
45
+ private buildLegacyTransaction;
46
+ /**
47
+ * Builds a VersionedTransaction.
48
+ *
49
+ * @returns {VersionedTransaction} The built versioned transaction
50
+ */
51
+ private buildVersionedTransaction;
52
+ /**
53
+ * Build a VersionedTransaction from deconstructed VersionedTransactionData
54
+ * @param data The versioned transaction data
55
+ * @returns The built versioned transaction
56
+ */
57
+ private buildFromVersionedData;
58
+ /** @inheritdoc */
59
+ protected get transaction(): Transaction;
60
+ /** @inheritdoc */
61
+ protected set transaction(transaction: Transaction);
62
+ /** @inheritdoc */
63
+ protected signImplementation(key: BaseKey): Transaction;
64
+ /** @inheritDoc */
65
+ addSignature(publicKey: BasePublicKey, signature: Buffer): void;
66
+ /**
67
+ * Sets the sender of this transaction.
68
+ * This account will be responsible for paying transaction fees.
69
+ *
70
+ * @param {string} senderAddress the account that is sending this transaction
71
+ * @returns {TransactionBuilder} This transaction builder
72
+ */
73
+ sender(senderAddress: string): this;
74
+ /**
75
+ * Set the transaction nonce
76
+ * Requires both optional params in order to use the durable nonce
77
+ *
78
+ * @param {Blockhash} blockHash The latest blockHash
79
+ * @param {DurableNonceParams} [durableNonceParams] An object containing the walletNonceAddress and the authWalletAddress (required for durable nonce)
80
+ * @returns {TransactionBuilder} This transaction builder
81
+ */
82
+ nonce(blockHash: Blockhash, durableNonceParams?: DurableNonceParams): this;
83
+ /**
84
+ * Set the memo
85
+ *
86
+ * @param {string} memo
87
+ * @returns {TransactionBuilder} This transaction builder
88
+ */
89
+ memo(memo: string): this;
90
+ fee(feeOptions: FeeOptions): this;
91
+ setPriorityFee(feeOptions: FeeOptions): this;
92
+ feePayer(feePayer: string): this;
93
+ /**
94
+ * Used to set the minimum rent exempt amount for an ATA
95
+ *
96
+ * @param tokenAccountRentExemptAmount minimum rent exempt amount in lamports
97
+ */
98
+ associatedTokenAccountRent(tokenAccountRentExemptAmount: string): this;
99
+ private validateRentExemptAmount;
100
+ /** @inheritdoc */
101
+ validateAddress(address: BaseAddress, addressFormat?: string): void;
102
+ /** @inheritdoc */
103
+ validateKey(key: BaseKey): void;
104
+ /** @inheritdoc */
105
+ validateRawTransaction(rawTransaction: string): void;
106
+ /** @inheritdoc */
107
+ validateTransaction(transaction?: Transaction): void;
108
+ /** @inheritdoc */
109
+ validateValue(value: BigNumber): void;
110
+ /** Validates the memo
111
+ *
112
+ * @param {string} memo - the memo as string
113
+ */
114
+ validateMemo(memo: string): void;
115
+ /**
116
+ * Validates that the given key is not already in this._signers
117
+ *
118
+ * @param {BaseKey} key - The key to check
119
+ */
120
+ private checkDuplicatedSigner;
121
+ /**
122
+ * Validates that the sender field is defined
123
+ */
124
+ private validateSender;
125
+ /**
126
+ * Validates that the nonce field is defined
127
+ */
128
+ private validateNonce;
129
+ }
130
+ //# sourceMappingURL=transactionBuilder.d.ts.map
@@ -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,373 @@
1
+ import { BaseTransactionBuilder, BuildTransactionError, SigningError, } from '@bitgo-beta/sdk-core';
2
+ import { Transaction } from './transaction';
3
+ import { MessageV0, PublicKey, Transaction as SolTransaction, VersionedTransaction, } from '@solana/web3.js';
4
+ import base58 from 'bs58';
5
+ import { isValidAddress, isValidAmount, isValidBlockId, isValidMemo, validateAddress, validateRawTransaction, } from './utils';
6
+ import { KeyPair } from '.';
7
+ import { InstructionBuilderTypes } from './constants';
8
+ import { solInstructionFactory } from './solInstructionFactory';
9
+ import assert from 'assert';
10
+ import { instructionParamsFactory } from './instructionParamsFactory';
11
+ export class TransactionBuilder extends BaseTransactionBuilder {
12
+ constructor(_coinConfig) {
13
+ super(_coinConfig);
14
+ this._signatures = [];
15
+ this._instructionsData = [];
16
+ this._signers = [];
17
+ this.transaction = new Transaction(_coinConfig);
18
+ }
19
+ /**
20
+ * Initialize the transaction builder fields using the decoded transaction data
21
+ *
22
+ * @param {Transaction} tx the transaction data
23
+ */
24
+ initBuilder(tx) {
25
+ this._transaction = tx;
26
+ const txData = tx.toJson();
27
+ const filteredTransferInstructionsData = txData.instructionsData.filter((data) => data.type === InstructionBuilderTypes.Transfer);
28
+ let sender;
29
+ if (filteredTransferInstructionsData.length > 0) {
30
+ const transferInstructionsData = filteredTransferInstructionsData[0];
31
+ sender = transferInstructionsData.params.fromAddress;
32
+ }
33
+ else {
34
+ sender = txData.feePayer;
35
+ }
36
+ this.sender(sender);
37
+ this.feePayer(txData.feePayer);
38
+ this.nonce(txData.nonce, txData.durableNonce);
39
+ this._instructionsData = instructionParamsFactory(tx.type, tx.solTransaction.instructions, this._coinConfig.name, txData.instructionsData, tx.useTokenAddressTokenName);
40
+ // Parse priority fee instruction data
41
+ const filteredPriorityFeeInstructionsData = txData.instructionsData.filter((data) => data.type === InstructionBuilderTypes.SetPriorityFee);
42
+ for (const instruction of this._instructionsData) {
43
+ if (instruction.type === InstructionBuilderTypes.Memo) {
44
+ const memoInstruction = instruction;
45
+ this.memo(memoInstruction.params.memo);
46
+ }
47
+ if (instruction.type === InstructionBuilderTypes.NonceAdvance) {
48
+ const advanceNonceInstruction = instruction;
49
+ this.nonce(txData.nonce, advanceNonceInstruction.params);
50
+ }
51
+ // If prio fee instruction exists, set the priority fee variable
52
+ if (instruction.type === InstructionBuilderTypes.SetPriorityFee) {
53
+ const priorityFeeInstructionsData = filteredPriorityFeeInstructionsData[0];
54
+ this.setPriorityFee({ amount: Number(priorityFeeInstructionsData.params.fee) });
55
+ }
56
+ }
57
+ }
58
+ /** @inheritdoc */
59
+ fromImplementation(rawTransaction) {
60
+ const tx = new Transaction(this._coinConfig);
61
+ this.validateRawTransaction(rawTransaction);
62
+ tx.fromRawTransaction(rawTransaction);
63
+ this.initBuilder(tx);
64
+ return this.transaction;
65
+ }
66
+ /** @inheritdoc */
67
+ async buildImplementation() {
68
+ const builtTransaction = this.buildSolTransaction();
69
+ if (builtTransaction instanceof VersionedTransaction) {
70
+ this.transaction.versionedTransaction = builtTransaction;
71
+ }
72
+ else {
73
+ this.transaction.solTransaction = builtTransaction;
74
+ }
75
+ this.transaction.setTransactionType(this.transactionType);
76
+ this.transaction.setInstructionsData(this._instructionsData);
77
+ this.transaction.loadInputsAndOutputs();
78
+ this._transaction.tokenAccountRentExemptAmount = this._tokenAccountRentExemptAmount;
79
+ return this.transaction;
80
+ }
81
+ /**
82
+ * Builds the solana transaction.
83
+ */
84
+ buildSolTransaction() {
85
+ assert(this._sender, new BuildTransactionError('sender is required before building'));
86
+ assert(this._recentBlockhash, new BuildTransactionError('recent blockhash is required before building'));
87
+ // Check if we should build as VersionedTransaction
88
+ if (this._transaction.isVersionedTransaction()) {
89
+ return this.buildVersionedTransaction();
90
+ }
91
+ else {
92
+ return this.buildLegacyTransaction();
93
+ }
94
+ }
95
+ /**
96
+ * Builds a legacy Solana transaction.
97
+ */
98
+ buildLegacyTransaction() {
99
+ const tx = new SolTransaction();
100
+ if (this._transaction?.solTransaction?.signatures) {
101
+ tx.signatures = this._transaction?.solTransaction?.signatures;
102
+ }
103
+ tx.feePayer = this._feePayer ? new PublicKey(this._feePayer) : new PublicKey(this._sender);
104
+ if (this._nonceInfo) {
105
+ tx.nonceInfo = {
106
+ nonce: this._recentBlockhash,
107
+ nonceInstruction: solInstructionFactory(this._nonceInfo)[0],
108
+ };
109
+ }
110
+ else {
111
+ tx.recentBlockhash = this._recentBlockhash;
112
+ }
113
+ for (const instruction of this._instructionsData) {
114
+ tx.add(...solInstructionFactory(instruction, this._zkProofProgramId));
115
+ }
116
+ if (this._memo) {
117
+ const memoData = {
118
+ type: InstructionBuilderTypes.Memo,
119
+ params: {
120
+ memo: this._memo,
121
+ },
122
+ };
123
+ this._instructionsData.push(memoData);
124
+ tx.add(...solInstructionFactory(memoData));
125
+ }
126
+ this._transaction.lamportsPerSignature = this._lamportsPerSignature;
127
+ for (const signer of this._signers) {
128
+ const publicKey = new PublicKey(signer.getKeys().pub);
129
+ const secretKey = signer.getKeys(true).prv;
130
+ assert(secretKey instanceof Uint8Array);
131
+ tx.partialSign({ publicKey, secretKey });
132
+ }
133
+ for (const signature of this._signatures) {
134
+ const solPublicKey = new PublicKey(signature.publicKey.pub);
135
+ tx.addSignature(solPublicKey, signature.signature);
136
+ }
137
+ return tx;
138
+ }
139
+ /**
140
+ * Builds a VersionedTransaction.
141
+ *
142
+ * @returns {VersionedTransaction} The built versioned transaction
143
+ */
144
+ buildVersionedTransaction() {
145
+ const versionedTxData = this._transaction.getVersionedTransactionData();
146
+ if (!versionedTxData) {
147
+ throw new BuildTransactionError('Missing VersionedTransactionData');
148
+ }
149
+ const versionedTx = this.buildFromVersionedData(versionedTxData);
150
+ this._transaction.lamportsPerSignature = this._lamportsPerSignature;
151
+ for (const signer of this._signers) {
152
+ const publicKey = new PublicKey(signer.getKeys().pub);
153
+ const secretKey = signer.getKeys(true).prv;
154
+ assert(secretKey instanceof Uint8Array);
155
+ versionedTx.sign([{ publicKey, secretKey }]);
156
+ }
157
+ for (const signature of this._signatures) {
158
+ const solPublicKey = new PublicKey(signature.publicKey.pub);
159
+ versionedTx.addSignature(solPublicKey, signature.signature);
160
+ }
161
+ return versionedTx;
162
+ }
163
+ /**
164
+ * Build a VersionedTransaction from deconstructed VersionedTransactionData
165
+ * @param data The versioned transaction data
166
+ * @returns The built versioned transaction
167
+ */
168
+ buildFromVersionedData(data) {
169
+ const staticAccountKeys = data.staticAccountKeys.map((key) => new PublicKey(key));
170
+ const addressTableLookups = data.addressLookupTables.map((alt) => ({
171
+ accountKey: new PublicKey(alt.accountKey),
172
+ writableIndexes: alt.writableIndexes,
173
+ readonlyIndexes: alt.readonlyIndexes,
174
+ }));
175
+ const compiledInstructions = data.versionedInstructions.map((instruction) => ({
176
+ programIdIndex: instruction.programIdIndex,
177
+ accountKeyIndexes: instruction.accountKeyIndexes,
178
+ data: Buffer.from(base58.decode(instruction.data)),
179
+ }));
180
+ const recentBlockhash = data.recentBlockhash || this._recentBlockhash;
181
+ if (!recentBlockhash) {
182
+ throw new BuildTransactionError('Missing recent blockhash for VersionedTransaction');
183
+ }
184
+ if (!this._sender) {
185
+ throw new BuildTransactionError('Missing sender (fee payer) for VersionedTransaction');
186
+ }
187
+ const messageV0 = new MessageV0({
188
+ header: data.messageHeader,
189
+ staticAccountKeys,
190
+ recentBlockhash: recentBlockhash,
191
+ compiledInstructions,
192
+ addressTableLookups,
193
+ });
194
+ return new VersionedTransaction(messageV0);
195
+ }
196
+ // region Getters and Setters
197
+ /** @inheritdoc */
198
+ get transaction() {
199
+ return this._transaction;
200
+ }
201
+ /** @inheritdoc */
202
+ set transaction(transaction) {
203
+ this._transaction = transaction;
204
+ }
205
+ /** @inheritdoc */
206
+ signImplementation(key) {
207
+ this.validateKey(key);
208
+ this.checkDuplicatedSigner(key);
209
+ const prv = key.key;
210
+ const signer = new KeyPair({ prv: prv });
211
+ this._signers.push(signer);
212
+ return this._transaction;
213
+ }
214
+ /** @inheritDoc */
215
+ addSignature(publicKey, signature) {
216
+ this._signatures.push({ publicKey, signature });
217
+ }
218
+ /**
219
+ * Sets the sender of this transaction.
220
+ * This account will be responsible for paying transaction fees.
221
+ *
222
+ * @param {string} senderAddress the account that is sending this transaction
223
+ * @returns {TransactionBuilder} This transaction builder
224
+ */
225
+ sender(senderAddress) {
226
+ validateAddress(senderAddress, 'sender');
227
+ this._sender = senderAddress;
228
+ return this;
229
+ }
230
+ /**
231
+ * Set the transaction nonce
232
+ * Requires both optional params in order to use the durable nonce
233
+ *
234
+ * @param {Blockhash} blockHash The latest blockHash
235
+ * @param {DurableNonceParams} [durableNonceParams] An object containing the walletNonceAddress and the authWalletAddress (required for durable nonce)
236
+ * @returns {TransactionBuilder} This transaction builder
237
+ */
238
+ nonce(blockHash, durableNonceParams) {
239
+ if (!blockHash || !isValidBlockId(blockHash)) {
240
+ throw new BuildTransactionError('Invalid or missing blockHash, got: ' + blockHash);
241
+ }
242
+ if (durableNonceParams) {
243
+ validateAddress(durableNonceParams.walletNonceAddress, 'walletNonceAddress');
244
+ validateAddress(durableNonceParams.authWalletAddress, 'authWalletAddress');
245
+ if (durableNonceParams.walletNonceAddress === durableNonceParams.authWalletAddress) {
246
+ throw new BuildTransactionError('Invalid params: walletNonceAddress cannot be equal to authWalletAddress');
247
+ }
248
+ this._nonceInfo = {
249
+ type: InstructionBuilderTypes.NonceAdvance,
250
+ params: durableNonceParams,
251
+ };
252
+ }
253
+ this._recentBlockhash = blockHash;
254
+ return this;
255
+ }
256
+ /**
257
+ * Set the memo
258
+ *
259
+ * @param {string} memo
260
+ * @returns {TransactionBuilder} This transaction builder
261
+ */
262
+ memo(memo) {
263
+ this.validateMemo(memo);
264
+ this._memo = memo;
265
+ return this;
266
+ }
267
+ fee(feeOptions) {
268
+ this._lamportsPerSignature = Number(feeOptions.amount);
269
+ return this;
270
+ }
271
+ setPriorityFee(feeOptions) {
272
+ this._priorityFee = Number(feeOptions.amount);
273
+ return this;
274
+ }
275
+ feePayer(feePayer) {
276
+ this._feePayer = feePayer;
277
+ return this;
278
+ }
279
+ /**
280
+ * Used to set the minimum rent exempt amount for an ATA
281
+ *
282
+ * @param tokenAccountRentExemptAmount minimum rent exempt amount in lamports
283
+ */
284
+ associatedTokenAccountRent(tokenAccountRentExemptAmount) {
285
+ this.validateRentExemptAmount(tokenAccountRentExemptAmount);
286
+ this._tokenAccountRentExemptAmount = tokenAccountRentExemptAmount;
287
+ return this;
288
+ }
289
+ validateRentExemptAmount(tokenAccountRentExemptAmount) {
290
+ // _tokenAccountRentExemptAmount is allowed to be undefined or a valid amount if it's defined
291
+ if (tokenAccountRentExemptAmount && !isValidAmount(tokenAccountRentExemptAmount)) {
292
+ throw new BuildTransactionError('Invalid tokenAccountRentExemptAmount, got: ' + tokenAccountRentExemptAmount);
293
+ }
294
+ }
295
+ // endregion
296
+ // region Validators
297
+ /** @inheritdoc */
298
+ validateAddress(address, addressFormat) {
299
+ if (!isValidAddress(address.address)) {
300
+ throw new BuildTransactionError('Invalid address ' + address.address);
301
+ }
302
+ }
303
+ /** @inheritdoc */
304
+ validateKey(key) {
305
+ let keyPair;
306
+ try {
307
+ keyPair = new KeyPair({ prv: key.key });
308
+ }
309
+ catch {
310
+ throw new BuildTransactionError('Invalid key');
311
+ }
312
+ if (!keyPair.getKeys().prv) {
313
+ throw new BuildTransactionError('Invalid key');
314
+ }
315
+ }
316
+ /** @inheritdoc */
317
+ validateRawTransaction(rawTransaction) {
318
+ validateRawTransaction(rawTransaction);
319
+ }
320
+ /** @inheritdoc */
321
+ validateTransaction(transaction) {
322
+ this.validateSender();
323
+ this.validateNonce();
324
+ this.validateRentExemptAmount(this._tokenAccountRentExemptAmount);
325
+ }
326
+ /** @inheritdoc */
327
+ validateValue(value) {
328
+ if (value.isLessThan(0)) {
329
+ throw new BuildTransactionError('Value cannot be less than zero');
330
+ }
331
+ }
332
+ /** Validates the memo
333
+ *
334
+ * @param {string} memo - the memo as string
335
+ */
336
+ validateMemo(memo) {
337
+ if (!memo) {
338
+ throw new BuildTransactionError('Invalid memo, got: ' + memo);
339
+ }
340
+ if (!isValidMemo(memo)) {
341
+ throw new BuildTransactionError('Memo is too long');
342
+ }
343
+ }
344
+ /**
345
+ * Validates that the given key is not already in this._signers
346
+ *
347
+ * @param {BaseKey} key - The key to check
348
+ */
349
+ checkDuplicatedSigner(key) {
350
+ this._signers.forEach((kp) => {
351
+ if (kp.getKeys().prv === key.key) {
352
+ throw new SigningError('Duplicated signer: ' + key.key);
353
+ }
354
+ });
355
+ }
356
+ /**
357
+ * Validates that the sender field is defined
358
+ */
359
+ validateSender() {
360
+ if (this._sender === undefined) {
361
+ throw new BuildTransactionError('Invalid transaction: missing sender');
362
+ }
363
+ }
364
+ /**
365
+ * Validates that the nonce field is defined
366
+ */
367
+ validateNonce() {
368
+ if (this._recentBlockhash === undefined) {
369
+ throw new BuildTransactionError('Invalid transaction: missing nonce blockhash');
370
+ }
371
+ }
372
+ }
373
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUdMLHNCQUFzQixFQUN0QixxQkFBcUIsRUFJckIsWUFBWSxHQUdiLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBR0wsU0FBUyxFQUNULFNBQVMsRUFDVCxXQUFXLElBQUksY0FBYyxFQUM3QixvQkFBb0IsR0FDckIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLE1BQU0sTUFBTSxNQUFNLENBQUM7QUFDMUIsT0FBTyxFQUNMLGNBQWMsRUFDZCxhQUFhLEVBQ2IsY0FBYyxFQUNkLFdBQVcsRUFDWCxlQUFlLEVBQ2Ysc0JBQXNCLEdBQ3ZCLE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxHQUFHLENBQUM7QUFDNUIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV0RSxNQUFNLE9BQWdCLGtCQUFtQixTQUFRLHNCQUFzQjtJQWlCckUsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFoQmIsZ0JBQVcsR0FBZ0IsRUFBRSxDQUFDO1FBTzVCLHNCQUFpQixHQUF3QixFQUFFLENBQUM7UUFDNUMsYUFBUSxHQUFjLEVBQUUsQ0FBQztRQVNqQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFP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S0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMvQixNQUFNLElBQUkscUJBQXFCLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUN6RSxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssYUFBYTtRQUNuQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4QyxNQUFNLElBQUkscUJBQXFCLENBQUMsOENBQThDLENBQUMsQ0FBQztRQUNsRixDQUFDO0lBQ0gsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHtcbiAgQmFzZUFkZHJlc3MsXG4gIEJhc2VLZXksXG4gIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIsXG4gIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcixcbiAgRmVlT3B0aW9ucyxcbiAgUHVibGljS2V5IGFzIEJhc2VQdWJsaWNLZXksXG4gIFNpZ25hdHVyZSxcbiAgU2lnbmluZ0Vycm9yLFxuICBTb2xWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7XG4gIEJsb2NraGFzaCxcbiAgTWVzc2FnZUFkZHJlc3NUYWJsZUxvb2t1cCxcbiAgTWVzc2FnZVYwLFxuICBQdWJsaWNLZXksXG4gIFRyYW5zYWN0aW9uIGFzIFNvbFRyYW5zYWN0aW9uLFxuICBWZXJzaW9uZWRUcmFuc2FjdGlvbixcbn0gZnJvbSAnQHNvbGFuYS93ZWIzLmpzJztcbmltcG9ydCBiYXNlNTggZnJvbSAnYnM1OCc7XG5pbXBvcnQge1xuICBpc1ZhbGlkQWRkcmVzcyxcbiAgaXNWYWxpZEFtb3VudCxcbiAgaXNWYWxpZEJsb2NrSWQsXG4gIGlzVmFsaWRNZW1vLFxuICB2YWxpZGF0ZUFkZHJlc3MsXG4gIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24sXG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4nO1xuaW1wb3J0IHsgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBzb2xJbnN0cnVjdGlvbkZhY3RvcnkgfSBmcm9tICcuL3NvbEluc3RydWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBEdXJhYmxlTm9uY2VQYXJhbXMsIEluc3RydWN0aW9uUGFyYW1zLCBNZW1vLCBOb25jZSwgU2V0UHJpb3JpdHlGZWUsIFRyYW5zZmVyIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBpbnN0cnVjdGlvblBhcmFtc0ZhY3RvcnkgfSBmcm9tICcuL2luc3RydWN0aW9uUGFyYW1zRmFjdG9yeSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc2FjdGlvbkJ1aWxkZXIgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIF90cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247XG4gIHByaXZhdGUgX3NpZ25hdHVyZXM6IFNpZ25hdHVyZVtdID0gW107XG4gIHByaXZhdGUgX2xhbXBvcnRzUGVyU2lnbmF0dXJlOiBudW1iZXI7XG4gIHByaXZhdGUgX3Rva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQ6IHN0cmluZztcblxuICBwcm90ZWN0ZWQgX3NlbmRlcjogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX3JlY2VudEJsb2NraGFzaDogQmxvY2toYXNoO1xuICBwcm90ZWN0ZWQgX25vbmNlSW5mbzogTm9uY2U7XG4gIHByb3RlY3RlZCBfaW5zdHJ1Y3Rpb25zRGF0YTogSW5zdHJ1Y3Rpb25QYXJhbXNbXSA9IFtdO1xuICBwcm90ZWN0ZWQgX3NpZ25lcnM6IEtleVBhaXJbXSA9IFtdO1xuICBwcm90ZWN0ZWQgX21lbW8/OiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfZmVlUGF5ZXI/OiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfcHJpb3JpdHlGZWU6IG51bWJlcjtcbiAgLyoqIE9wdGlvbmFsIG92ZXJyaWRlIGZvciB0aGUgemstZWxnYW1hbC1wcm9vZiBwcm9ncmFtIGlkICh1c2VkIGJ5IENUIGluc3RydWN0aW9uIGJ1aWxkZXJzKSAqL1xuICBwcm90ZWN0ZWQgX3prUHJvb2ZQcm9ncmFtSWQ/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0cmFuc2FjdGlvbiB0eXBlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSB0cmFuc2FjdGlvbiBidWlsZGVyIGZpZWxkcyB1c2luZyB0aGUgZGVjb2RlZCB0cmFuc2FjdGlvbiBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259IHR4IHRoZSB0cmFuc2FjdGlvbiBkYXRhXG4gICAqL1xuICBpbml0QnVpbGRlcih0eDogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHR4O1xuICAgIGNvbnN0IHR4RGF0YSA9IHR4LnRvSnNvbigpO1xuXG4gICAgY29uc3QgZmlsdGVyZWRUcmFuc2Zlckluc3RydWN0aW9uc0RhdGEgPSB0eERhdGEuaW5zdHJ1Y3Rpb25zRGF0YS5maWx0ZXIoXG4gICAgICAoZGF0YSkgPT4gZGF0YS50eXBlID09PSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5UcmFuc2ZlclxuICAgICk7XG4gICAgbGV0IHNlbmRlcjtcbiAgICBpZiAoZmlsdGVyZWRUcmFuc2Zlckluc3RydWN0aW9uc0RhdGEubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgdHJhbnNmZXJJbnN0cnVjdGlvbnNEYXRhID0gZmlsdGVyZWRUcmFuc2Zlckluc3RydWN0aW9uc0RhdGFbMF0gYXMgVHJhbnNmZXI7XG4gICAgICBzZW5kZXIgPSB0cmFuc2Zlckluc3RydWN0aW9uc0RhdGEucGFyYW1zLmZyb21BZGRyZXNzO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZW5kZXIgPSB0eERhdGEuZmVlUGF5ZXI7XG4gICAgfVxuICAgIHRoaXMuc2VuZGVyKHNlbmRlcik7XG4gICAgdGhpcy5mZWVQYXllcih0eERhdGEuZmVlUGF5ZXIgYXMgc3RyaW5nKTtcbiAgICB0aGlzLm5vbmNlKHR4RGF0YS5ub25jZSwgdHhEYXRhLmR1cmFibGVOb25jZSk7XG4gICAgdGhpcy5faW5zdHJ1Y3Rpb25zRGF0YSA9IGluc3RydWN0aW9uUGFyYW1zRmFjdG9yeShcbiAgICAgIHR4LnR5cGUsXG4gICAgICB0eC5zb2xUcmFuc2FjdGlvbi5pbnN0cnVjdGlvbnMsXG4gICAgICB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICB0eERhdGEuaW5zdHJ1Y3Rpb25zRGF0YSxcbiAgICAgIHR4LnVzZVRva2VuQWRkcmVzc1Rva2VuTmFtZVxuICAgICk7XG4gICAgLy8gUGFyc2UgcHJpb3JpdHkgZmVlIGluc3RydWN0aW9uIGRhdGFcbiAgICBjb25zdCBmaWx0ZXJlZFByaW9yaXR5RmVlSW5zdHJ1Y3Rpb25zRGF0YSA9IHR4RGF0YS5pbnN0cnVjdGlvbnNEYXRhLmZpbHRlcihcbiAgICAgIChkYXRhKSA9PiBkYXRhLnR5cGUgPT09IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlNldFByaW9yaXR5RmVlXG4gICAgKTtcblxuICAgIGZvciAoY29uc3QgaW5zdHJ1Y3Rpb24gb2YgdGhpcy5faW5zdHJ1Y3Rpb25zRGF0YSkge1xuICAgICAgaWYgKGluc3RydWN0aW9uLnR5cGUgPT09IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk1lbW8pIHtcbiAgICAgICAgY29uc3QgbWVtb0luc3RydWN0aW9uOiBNZW1vID0gaW5zdHJ1Y3Rpb247XG4gICAgICAgIHRoaXMubWVtbyhtZW1vSW5zdHJ1Y3Rpb24ucGFyYW1zLm1lbW8pO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5zdHJ1Y3Rpb24udHlwZSA9PT0gSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuTm9uY2VBZHZhbmNlKSB7XG4gICAgICAgIGNvbnN0IGFkdmFuY2VOb25jZUluc3RydWN0aW9uOiBOb25jZSA9IGluc3RydWN0aW9uO1xuICAgICAgICB0aGlzLm5vbmNlKHR4RGF0YS5ub25jZSwgYWR2YW5jZU5vbmNlSW5zdHJ1Y3Rpb24ucGFyYW1zKTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgcHJpbyBmZWUgaW5zdHJ1Y3Rpb24gZXhpc3RzLCBzZXQgdGhlIHByaW9yaXR5IGZlZSB2YXJpYWJsZVxuICAgICAgaWYgKGluc3RydWN0aW9uLnR5cGUgPT09IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlNldFByaW9yaXR5RmVlKSB7XG4gICAgICAgIGNvbnN0IHByaW9yaXR5RmVlSW5zdHJ1Y3Rpb25zRGF0YSA9IGZpbHRlcmVkUHJpb3JpdHlGZWVJbnN0cnVjdGlvbnNEYXRhWzBdIGFzIFNldFByaW9yaXR5RmVlO1xuICAgICAgICB0aGlzLnNldFByaW9yaXR5RmVlKHsgYW1vdW50OiBOdW1iZXIocHJpb3JpdHlGZWVJbnN0cnVjdGlvbnNEYXRhLnBhcmFtcy5mZWUpIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZyk7XG4gICAgdGhpcy52YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICB0eC5mcm9tUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIHRoaXMuaW5pdEJ1aWxkZXIodHgpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCBidWlsdFRyYW5zYWN0aW9uID0gdGhpcy5idWlsZFNvbFRyYW5zYWN0aW9uKCk7XG5cbiAgICBpZiAoYnVpbHRUcmFuc2FjdGlvbiBpbnN0YW5jZW9mIFZlcnNpb25lZFRyYW5zYWN0aW9uKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLnZlcnNpb25lZFRyYW5zYWN0aW9uID0gYnVpbHRUcmFuc2FjdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbi5zb2xUcmFuc2FjdGlvbiA9IGJ1aWx0VHJhbnNhY3Rpb247XG4gICAgfVxuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvblR5cGUodGhpcy50cmFuc2FjdGlvblR5cGUpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0SW5zdHJ1Y3Rpb25zRGF0YSh0aGlzLl9pbnN0cnVjdGlvbnNEYXRhKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLmxvYWRJbnB1dHNBbmRPdXRwdXRzKCk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24udG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudCA9IHRoaXMuX3Rva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQ7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIHRoZSBzb2xhbmEgdHJhbnNhY3Rpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgYnVpbGRTb2xUcmFuc2FjdGlvbigpOiBTb2xUcmFuc2FjdGlvbiB8IFZlcnNpb25lZFRyYW5zYWN0aW9uIHtcbiAgICBhc3NlcnQodGhpcy5fc2VuZGVyLCBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdzZW5kZXIgaXMgcmVxdWlyZWQgYmVmb3JlIGJ1aWxkaW5nJykpO1xuICAgIGFzc2VydCh0aGlzLl9yZWNlbnRCbG9ja2hhc2gsIG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ3JlY2VudCBibG9ja2hhc2ggaXMgcmVxdWlyZWQgYmVmb3JlIGJ1aWxkaW5nJykpO1xuXG4gICAgLy8gQ2hlY2sgaWYgd2Ugc2hvdWxkIGJ1aWxkIGFzIFZlcnNpb25lZFRyYW5zYWN0aW9uXG4gICAgaWYgKHRoaXMuX3RyYW5zYWN0aW9uLmlzVmVyc2lvbmVkVHJhbnNhY3Rpb24oKSkge1xuICAgICAgcmV0dXJuIHRoaXMuYnVpbGRWZXJzaW9uZWRUcmFuc2FjdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5idWlsZExlZ2FjeVRyYW5zYWN0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhIGxlZ2FjeSBTb2xhbmEgdHJhbnNhY3Rpb24uXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkTGVnYWN5VHJhbnNhY3Rpb24oKTogU29sVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHR4ID0gbmV3IFNvbFRyYW5zYWN0aW9uKCk7XG4gICAgaWYgKHRoaXMuX3RyYW5zYWN0aW9uPy5zb2xUcmFuc2FjdGlvbj8uc2lnbmF0dXJlcykge1xuICAgICAgdHguc2lnbmF0dXJlcyA9IHRoaXMuX3RyYW5zYWN0aW9uPy5zb2xUcmFuc2FjdGlvbj8uc2lnbmF0dXJlcztcbiAgICB9XG5cbiAgICB0eC5mZWVQYXllciA9IHRoaXMuX2ZlZVBheWVyID8gbmV3IFB1YmxpY0tleSh0aGlzLl9mZWVQYXllcikgOiBuZXcgUHVibGljS2V5KHRoaXMuX3NlbmRlcik7XG5cbiAgICBpZiAodGhpcy5fbm9uY2VJbmZvKSB7XG4gICAgICB0eC5ub25jZUluZm8gPSB7XG4gICAgICAgIG5vbmNlOiB0aGlzLl9yZWNlbnRCbG9ja2hhc2gsXG4gICAgICAgIG5vbmNlSW5zdHJ1Y3Rpb246IHNvbEluc3RydWN0aW9uRmFjdG9yeSh0aGlzLl9ub25jZUluZm8pWzBdLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHgucmVjZW50QmxvY2toYXNoID0gdGhpcy5fcmVjZW50QmxvY2toYXNoO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGluc3RydWN0aW9uIG9mIHRoaXMuX2luc3RydWN0aW9uc0RhdGEpIHtcbiAgICAgIHR4LmFkZCguLi5zb2xJbnN0cnVjdGlvbkZhY3RvcnkoaW5zdHJ1Y3Rpb24sIHRoaXMuX3prUHJvb2ZQcm9ncmFtSWQpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWVtbykge1xuICAgICAgY29uc3QgbWVtb0RhdGE6IE1lbW8gPSB7XG4gICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk1lbW8sXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIG1lbW86IHRoaXMuX21lbW8sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgdGhpcy5faW5zdHJ1Y3Rpb25zRGF0YS5wdXNoKG1lbW9EYXRhKTtcbiAgICAgIHR4LmFkZCguLi5zb2xJbnN0cnVjdGlvbkZhY3RvcnkobWVtb0RhdGEpKTtcbiAgICB9XG5cbiAgICB0aGlzLl90cmFuc2FjdGlvbi5sYW1wb3J0c1BlclNpZ25hdHVyZSA9IHRoaXMuX2xhbXBvcnRzUGVyU2lnbmF0dXJlO1xuXG4gICAgZm9yIChjb25zdCBzaWduZXIgb2YgdGhpcy5fc2lnbmVycykge1xuICAgICAgY29uc3QgcHVibGljS2V5ID0gbmV3IFB1YmxpY0tleShzaWduZXIuZ2V0S2V5cygpLnB1Yik7XG4gICAgICBjb25zdCBzZWNyZXRLZXkgPSBzaWduZXIuZ2V0S2V5cyh0cnVlKS5wcnY7XG4gICAgICBhc3NlcnQoc2VjcmV0S2V5IGluc3RhbmNlb2YgVWludDhBcnJheSk7XG4gICAgICB0eC5wYXJ0aWFsU2lnbih7IHB1YmxpY0tleSwgc2VjcmV0S2V5IH0pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc2lnbmF0dXJlIG9mIHRoaXMuX3NpZ25hdHVyZXMpIHtcbiAgICAgIGNvbnN0IHNvbFB1YmxpY0tleSA9IG5ldyBQdWJsaWNLZXkoc2lnbmF0dXJlLnB1YmxpY0tleS5wdWIpO1xuICAgICAgdHguYWRkU2lnbmF0dXJlKHNvbFB1YmxpY0tleSwgc2lnbmF0dXJlLnNpZ25hdHVyZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR4O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhIFZlcnNpb25lZFRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7VmVyc2lvbmVkVHJhbnNhY3Rpb259IFRoZSBidWlsdCB2ZXJzaW9uZWQgdHJhbnNhY3Rpb25cbiAgICovXG4gIHByaXZhdGUgYnVpbGRWZXJzaW9uZWRUcmFuc2FjdGlvbigpOiBWZXJzaW9uZWRUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgdmVyc2lvbmVkVHhEYXRhID0gdGhpcy5fdHJhbnNhY3Rpb24uZ2V0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhKCk7XG5cbiAgICBpZiAoIXZlcnNpb25lZFR4RGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignTWlzc2luZyBWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEnKTtcbiAgICB9XG5cbiAgICBjb25zdCB2ZXJzaW9uZWRUeCA9IHRoaXMuYnVpbGRGcm9tVmVyc2lvbmVkRGF0YSh2ZXJzaW9uZWRUeERhdGEpO1xuXG4gICAgdGhpcy5fdHJhbnNhY3Rpb24ubGFtcG9ydHNQZXJTaWduYXR1cmUgPSB0aGlzLl9sYW1wb3J0c1BlclNpZ25hdHVyZTtcblxuICAgIGZvciAoY29uc3Qgc2lnbmVyIG9mIHRoaXMuX3NpZ25lcnMpIHtcbiAgICAgIGNvbnN0IHB1YmxpY0tleSA9IG5ldyBQdWJsaWNLZXkoc2lnbmVyLmdldEtleXMoKS5wdWIpO1xuICAgICAgY29uc3Qgc2VjcmV0S2V5ID0gc2lnbmVyLmdldEtleXModHJ1ZSkucHJ2O1xuICAgICAgYXNzZXJ0KHNlY3JldEtleSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpO1xuICAgICAgdmVyc2lvbmVkVHguc2lnbihbeyBwdWJsaWNLZXksIHNlY3JldEtleSB9XSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzaWduYXR1cmUgb2YgdGhpcy5fc2lnbmF0dXJlcykge1xuICAgICAgY29uc3Qgc29sUHVibGljS2V5ID0gbmV3IFB1YmxpY0tleShzaWduYXR1cmUucHVibGljS2V5LnB1Yik7XG4gICAgICB2ZXJzaW9uZWRUeC5hZGRTaWduYXR1cmUoc29sUHVibGljS2V5LCBzaWduYXR1cmUuc2lnbmF0dXJlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyc2lvbmVkVHg7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBWZXJzaW9uZWRUcmFuc2FjdGlvbiBmcm9tIGRlY29uc3RydWN0ZWQgVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhXG4gICAqIEBwYXJhbSBkYXRhIFRoZSB2ZXJzaW9uZWQgdHJhbnNhY3Rpb24gZGF0YVxuICAgKiBAcmV0dXJucyBUaGUgYnVpbHQgdmVyc2lvbmVkIHRyYW5zYWN0aW9uXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkRnJvbVZlcnNpb25lZERhdGEoZGF0YTogU29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhKTogVmVyc2lvbmVkVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHN0YXRpY0FjY291bnRLZXlzID0gZGF0YS5zdGF0aWNBY2NvdW50S2V5cy5tYXAoKGtleTogc3RyaW5nKSA9PiBuZXcgUHVibGljS2V5KGtleSkpO1xuXG4gICAgY29uc3QgYWRkcmVzc1RhYmxlTG9va3VwczogTWVzc2FnZUFkZHJlc3NUYWJsZUxvb2t1cFtdID0gZGF0YS5hZGRyZXNzTG9va3VwVGFibGVzLm1hcCgoYWx0KSA9PiAoe1xuICAgICAgYWNjb3VudEtleTogbmV3IFB1YmxpY0tleShhbHQuYWNjb3VudEtleSksXG4gICAgICB3cml0YWJsZUluZGV4ZXM6IGFsdC53cml0YWJsZUluZGV4ZXMsXG4gICAgICByZWFkb25seUluZGV4ZXM6IGFsdC5yZWFkb25seUluZGV4ZXMsXG4gICAgfSkpO1xuXG4gICAgY29uc3QgY29tcGlsZWRJbnN0cnVjdGlvbnMgPSBkYXRhLnZlcnNpb25lZEluc3RydWN0aW9ucy5tYXAoKGluc3RydWN0aW9uKSA9PiAoe1xuICAgICAgcHJvZ3JhbUlkSW5kZXg6IGluc3RydWN0aW9uLnByb2dyYW1JZEluZGV4LFxuICAgICAgYWNjb3VudEtleUluZGV4ZXM6IGluc3RydWN0aW9uLmFjY291bnRLZXlJbmRleGVzLFxuICAgICAgZGF0YTogQnVmZmVyLmZyb20oYmFzZTU4LmRlY29kZShpbnN0cnVjdGlvbi5kYXRhKSksXG4gICAgfSkpO1xuXG4gICAgY29uc3QgcmVjZW50QmxvY2toYXNoID0gZGF0YS5yZWNlbnRCbG9ja2hhc2ggfHwgdGhpcy5fcmVjZW50QmxvY2toYXNoO1xuXG4gICAgaWYgKCFyZWNlbnRCbG9ja2hhc2gpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ01pc3NpbmcgcmVjZW50IGJsb2NraGFzaCBmb3IgVmVyc2lvbmVkVHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3NlbmRlcikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignTWlzc2luZyBzZW5kZXIgKGZlZSBwYXllcikgZm9yIFZlcnNpb25lZFRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZVYwID0gbmV3IE1lc3NhZ2VWMCh7XG4gICAgICBoZWFkZXI6IGRhdGEubWVzc2FnZUhlYWRlcixcbiAgICAgIHN0YXRpY0FjY291bnRLZXlzLFxuICAgICAgcmVjZW50QmxvY2toYXNoOiByZWNlbnRCbG9ja2hhc2gsXG4gICAgICBjb21waWxlZEluc3RydWN0aW9ucyxcbiAgICAgIGFkZHJlc3NUYWJsZUxvb2t1cHMsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IFZlcnNpb25lZFRyYW5zYWN0aW9uKG1lc3NhZ2VWMCk7XG4gIH1cblxuICAvLyByZWdpb24gR2V0dGVycyBhbmQgU2V0dGVyc1xuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvbigpOiBUcmFuc2FjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBzZXQgdHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKSB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgc2lnbkltcGxlbWVudGF0aW9uKGtleTogQmFzZUtleSk6IFRyYW5zYWN0aW9uIHtcbiAgICB0aGlzLnZhbGlkYXRlS2V5KGtleSk7XG4gICAgdGhpcy5jaGVja0R1cGxpY2F0ZWRTaWduZXIoa2V5KTtcbiAgICBjb25zdCBwcnYgPSBrZXkua2V5O1xuICAgIGNvbnN0IHNpZ25lciA9IG5ldyBLZXlQYWlyKHsgcHJ2OiBwcnYgfSk7XG4gICAgdGhpcy5fc2lnbmVycy5wdXNoKHNpZ25lcik7XG5cbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgYWRkU2lnbmF0dXJlKHB1YmxpY0tleTogQmFzZVB1YmxpY0tleSwgc2lnbmF0dXJlOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2goeyBwdWJsaWNLZXksIHNpZ25hdHVyZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzZW5kZXIgb2YgdGhpcyB0cmFuc2FjdGlvbi5cbiAgICogVGhpcyBhY2NvdW50IHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIHBheWluZyB0cmFuc2FjdGlvbiBmZWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VuZGVyQWRkcmVzcyB0aGUgYWNjb3VudCB0aGF0IGlzIHNlbmRpbmcgdGhpcyB0cmFuc2FjdGlvblxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICovXG4gIHNlbmRlcihzZW5kZXJBZGRyZXNzOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB2YWxpZGF0ZUFkZHJlc3Moc2VuZGVyQWRkcmVzcywgJ3NlbmRlcicpO1xuICAgIHRoaXMuX3NlbmRlciA9IHNlbmRlckFkZHJlc3M7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiBub25jZVxuICAgKiBSZXF1aXJlcyBib3RoIG9wdGlvbmFsIHBhcmFtcyBpbiBvcmRlciB0byB1c2UgdGhlIGR1cmFibGUgbm9uY2VcbiAgICpcbiAgICogQHBhcmFtIHtCbG9ja2hhc2h9IGJsb2NrSGFzaCBUaGUgbGF0ZXN0IGJsb2NrSGFzaFxuICAgKiBAcGFyYW0ge0R1cmFibGVOb25jZVBhcmFtc30gW2R1cmFibGVOb25jZVBhcmFtc10gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHdhbGxldE5vbmNlQWRkcmVzcyBhbmQgdGhlIGF1dGhXYWxsZXRBZGRyZXNzIChyZXF1aXJlZCBmb3IgZHVyYWJsZSBub25jZSlcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICBub25jZShibG9ja0hhc2g6IEJsb2NraGFzaCwgZHVyYWJsZU5vbmNlUGFyYW1zPzogRHVyYWJsZU5vbmNlUGFyYW1zKTogdGhpcyB7XG4gICAgaWYgKCFibG9ja0hhc2ggfHwgIWlzVmFsaWRCbG9ja0lkKGJsb2NrSGFzaCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgb3IgbWlzc2luZyBibG9ja0hhc2gsIGdvdDogJyArIGJsb2NrSGFzaCk7XG4gICAgfVxuICAgIGlmIChkdXJhYmxlTm9uY2VQYXJhbXMpIHtcbiAgICAgIHZhbGlkYXRlQWRkcmVzcyhkdXJhYmxlTm9uY2VQYXJhbXMud2FsbGV0Tm9uY2VBZGRyZXNzLCAnd2FsbGV0Tm9uY2VBZGRyZXNzJyk7XG4gICAgICB2YWxpZGF0ZUFkZHJlc3MoZHVyYWJsZU5vbmNlUGFyYW1zLmF1dGhXYWxsZXRBZGRyZXNzLCAnYXV0aFdhbGxldEFkZHJlc3MnKTtcbiAgICAgIGlmIChkdXJhYmxlTm9uY2VQYXJhbXMud2FsbGV0Tm9uY2VBZGRyZXNzID09PSBkdXJhYmxlTm9uY2VQYXJhbXMuYXV0aFdhbGxldEFkZHJlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBwYXJhbXM6IHdhbGxldE5vbmNlQWRkcmVzcyBjYW5ub3QgYmUgZXF1YWwgdG8gYXV0aFdhbGxldEFkZHJlc3MnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX25vbmNlSW5mbyA9IHtcbiAgICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuTm9uY2VBZHZhbmNlLFxuICAgICAgICBwYXJhbXM6IGR1cmFibGVOb25jZVBhcmFtcyxcbiAgICAgIH07XG4gICAgfVxuICAgIHRoaXMuX3JlY2VudEJsb2NraGFzaCA9IGJsb2NrSGFzaDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiAgU2V0IHRoZSBtZW1vXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZW1vXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlclxuICAgKi9cbiAgbWVtbyhtZW1vOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlTWVtbyhtZW1vKTtcbiAgICB0aGlzLl9tZW1vID0gbWVtbztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGZlZShmZWVPcHRpb25zOiBGZWVPcHRpb25zKTogdGhpcyB7XG4gICAgdGhpcy5fbGFtcG9ydHNQZXJTaWduYXR1cmUgPSBOdW1iZXIoZmVlT3B0aW9ucy5hbW91bnQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIHNldFByaW9yaXR5RmVlKGZlZU9wdGlvbnM6IEZlZU9wdGlvbnMpOiB0aGlzIHtcbiAgICB0aGlzLl9wcmlvcml0eUZlZSA9IE51bWJlcihmZWVPcHRpb25zLmFtb3VudCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmZWVQYXllcihmZWVQYXllcjogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy5fZmVlUGF5ZXIgPSBmZWVQYXllcjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIHNldCB0aGUgbWluaW11bSByZW50IGV4ZW1wdCBhbW91bnQgZm9yIGFuIEFUQVxuICAgKlxuICAgKiBAcGFyYW0gdG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudCBtaW5pbXVtIHJlbnQgZXhlbXB0IGFtb3VudCBpbiBsYW1wb3J0c1xuICAgKi9cbiAgYXNzb2NpYXRlZFRva2VuQWNjb3VudFJlbnQodG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudDogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZVJlbnRFeGVtcHRBbW91bnQodG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudCk7XG4gICAgdGhpcy5fdG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudCA9IHRva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlUmVudEV4ZW1wdEFtb3VudCh0b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50OiBzdHJpbmcpIHtcbiAgICAvLyBfdG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudCBpcyBhbGxvd2VkIHRvIGJlIHVuZGVmaW5lZCBvciBhIHZhbGlkIGFtb3VudCBpZiBpdCdzIGRlZmluZWRcbiAgICBpZiAodG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudCAmJiAhaXNWYWxpZEFtb3VudCh0b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50KSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50LCBnb3Q6ICcgKyB0b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50KTtcbiAgICB9XG4gIH1cblxuICAvLyBlbmRyZWdpb25cblxuICAvLyByZWdpb24gVmFsaWRhdG9yc1xuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVBZGRyZXNzKGFkZHJlc3M6IEJhc2VBZGRyZXNzLCBhZGRyZXNzRm9ybWF0Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIGFkZHJlc3MgJyArIGFkZHJlc3MuYWRkcmVzcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlS2V5KGtleTogQmFzZUtleSk6IHZvaWQge1xuICAgIGxldCBrZXlQYWlyOiBLZXlQYWlyO1xuICAgIHRyeSB7XG4gICAgICBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwcnY6IGtleS5rZXkgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIGtleScpO1xuICAgIH1cblxuICAgIGlmICgha2V5UGFpci5nZXRLZXlzKCkucHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIGtleScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uPzogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRlU2VuZGVyKCk7XG4gICAgdGhpcy52YWxpZGF0ZU5vbmNlKCk7XG4gICAgdGhpcy52YWxpZGF0ZVJlbnRFeGVtcHRBbW91bnQodGhpcy5fdG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudCk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVWYWx1ZSh2YWx1ZTogQmlnTnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlLmlzTGVzc1RoYW4oMCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1ZhbHVlIGNhbm5vdCBiZSBsZXNzIHRoYW4gemVybycpO1xuICAgIH1cbiAgfVxuICAvKiogVmFsaWRhdGVzIHRoZSBtZW1vXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZW1vIC0gdGhlIG1lbW8gYXMgc3RyaW5nXG4gICAqL1xuICB2YWxpZGF0ZU1lbW8obWVtbzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFtZW1vKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIG1lbW8sIGdvdDogJyArIG1lbW8pO1xuICAgIH1cbiAgICBpZiAoIWlzVmFsaWRNZW1vKG1lbW8pKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdNZW1vIGlzIHRvbyBsb25nJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGF0IHRoZSBnaXZlbiBrZXkgaXMgbm90IGFscmVhZHkgaW4gdGhpcy5fc2lnbmVyc1xuICAgKlxuICAgKiBAcGFyYW0ge0Jhc2VLZXl9IGtleSAtIFRoZSBrZXkgdG8gY2hlY2tcbiAgICovXG4gIHByaXZhdGUgY2hlY2tEdXBsaWNhdGVkU2lnbmVyKGtleTogQmFzZUtleSkge1xuICAgIHRoaXMuX3NpZ25lcnMuZm9yRWFjaCgoa3ApID0+IHtcbiAgICAgIGlmIChrcC5nZXRLZXlzKCkucHJ2ID09PSBrZXkua2V5KSB7XG4gICAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ0R1cGxpY2F0ZWQgc2lnbmVyOiAnICsga2V5LmtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoYXQgdGhlIHNlbmRlciBmaWVsZCBpcyBkZWZpbmVkXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlU2VuZGVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9zZW5kZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBzZW5kZXInKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoYXQgdGhlIG5vbmNlIGZpZWxkIGlzIGRlZmluZWRcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVOb25jZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcmVjZW50QmxvY2toYXNoID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IG1pc3Npbmcgbm9uY2UgYmxvY2toYXNoJyk7XG4gICAgfVxuICB9XG4gIC8vIGVuZHJlZ2lvblxufVxuIl19