@bitgo-beta/sdk-coin-sol 7.6.4-beta.73 → 7.6.4-beta.731

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