@bitgo-beta/sdk-coin-sol 2.4.3-beta.999 → 7.6.3

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 (142) hide show
  1. package/dist/src/bigint-buffer-guard.d.ts +1 -0
  2. package/dist/src/bigint-buffer-guard.d.ts.map +1 -0
  3. package/dist/src/bigint-buffer-guard.js +29 -0
  4. package/dist/src/config/token2022StaticConfig.d.ts +3 -0
  5. package/dist/src/config/token2022StaticConfig.d.ts.map +1 -0
  6. package/dist/src/config/token2022StaticConfig.js +50 -0
  7. package/dist/src/index.d.ts +1 -0
  8. package/dist/src/index.d.ts.map +1 -1
  9. package/dist/src/index.js +2 -1
  10. package/dist/src/lib/constants.d.ts +35 -2
  11. package/dist/src/lib/constants.d.ts.map +1 -1
  12. package/dist/src/lib/constants.js +41 -2
  13. package/dist/src/lib/customInstructionBuilder.d.ts +72 -0
  14. package/dist/src/lib/customInstructionBuilder.d.ts.map +1 -0
  15. package/dist/src/lib/customInstructionBuilder.js +289 -0
  16. package/dist/src/lib/iface.d.ts +79 -5
  17. package/dist/src/lib/iface.d.ts.map +1 -1
  18. package/dist/src/lib/iface.js +1 -1
  19. package/dist/src/lib/index.d.ts +1 -0
  20. package/dist/src/lib/index.d.ts.map +1 -1
  21. package/dist/src/lib/index.js +4 -2
  22. package/dist/src/lib/instructionParamsFactory.d.ts.map +1 -1
  23. package/dist/src/lib/instructionParamsFactory.js +364 -78
  24. package/dist/src/lib/jitoStakePoolOperations.d.ts +113 -0
  25. package/dist/src/lib/jitoStakePoolOperations.d.ts.map +1 -0
  26. package/dist/src/lib/jitoStakePoolOperations.js +200 -0
  27. package/dist/src/lib/solInstructionFactory.d.ts.map +1 -1
  28. package/dist/src/lib/solInstructionFactory.js +266 -69
  29. package/dist/src/lib/stakingActivateBuilder.d.ts +16 -5
  30. package/dist/src/lib/stakingActivateBuilder.d.ts.map +1 -1
  31. package/dist/src/lib/stakingActivateBuilder.js +23 -10
  32. package/dist/src/lib/stakingDeactivateBuilder.d.ts +16 -5
  33. package/dist/src/lib/stakingDeactivateBuilder.d.ts.map +1 -1
  34. package/dist/src/lib/stakingDeactivateBuilder.js +43 -20
  35. package/dist/src/lib/token2022Config.d.ts +44 -0
  36. package/dist/src/lib/token2022Config.d.ts.map +1 -0
  37. package/dist/src/lib/token2022Config.js +27 -0
  38. package/dist/src/lib/tokenTransferBuilder.js +7 -7
  39. package/dist/src/lib/transaction.d.ts +31 -4
  40. package/dist/src/lib/transaction.d.ts.map +1 -1
  41. package/dist/src/lib/transaction.js +134 -46
  42. package/dist/src/lib/transactionBuilder.d.ts +18 -2
  43. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  44. package/dist/src/lib/transactionBuilder.js +78 -2
  45. package/dist/src/lib/transactionBuilderFactory.d.ts +5 -0
  46. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  47. package/dist/src/lib/transactionBuilderFactory.js +10 -1
  48. package/dist/src/lib/utils.d.ts +34 -1
  49. package/dist/src/lib/utils.d.ts.map +1 -1
  50. package/dist/src/lib/utils.js +88 -24
  51. package/dist/src/sol.d.ts +36 -13
  52. package/dist/src/sol.d.ts.map +1 -1
  53. package/dist/src/sol.js +230 -38
  54. package/dist/test/fixtures/sol.d.ts +1152 -0
  55. package/dist/test/fixtures/sol.d.ts.map +1 -0
  56. package/dist/test/fixtures/sol.js +1433 -0
  57. package/dist/test/resources/sol.d.ts +238 -0
  58. package/dist/test/resources/sol.d.ts.map +1 -0
  59. package/dist/test/resources/sol.js +320 -0
  60. package/dist/test/unit/fixtures/solBackupKey.d.ts +5 -0
  61. package/dist/test/unit/fixtures/solBackupKey.d.ts.map +1 -0
  62. package/dist/test/unit/fixtures/solBackupKey.js +8 -0
  63. package/dist/test/unit/getBuilderFactory.d.ts +3 -0
  64. package/dist/test/unit/getBuilderFactory.d.ts.map +1 -0
  65. package/dist/test/unit/getBuilderFactory.js +10 -0
  66. package/dist/test/unit/instructionParamsFactory.d.ts +2 -0
  67. package/dist/test/unit/instructionParamsFactory.d.ts.map +1 -0
  68. package/dist/test/unit/instructionParamsFactory.js +412 -0
  69. package/dist/test/unit/instructionParamsFactory.staking.d.ts +2 -0
  70. package/dist/test/unit/instructionParamsFactory.staking.d.ts.map +1 -0
  71. package/dist/test/unit/instructionParamsFactory.staking.js +1059 -0
  72. package/dist/test/unit/keyPair.d.ts +2 -0
  73. package/dist/test/unit/keyPair.d.ts.map +1 -0
  74. package/dist/test/unit/keyPair.js +177 -0
  75. package/dist/test/unit/messages/messageBuilderFactory.d.ts +2 -0
  76. package/dist/test/unit/messages/messageBuilderFactory.d.ts.map +1 -0
  77. package/dist/test/unit/messages/messageBuilderFactory.js +118 -0
  78. package/dist/test/unit/messages/simpleMessageBuilder.d.ts +2 -0
  79. package/dist/test/unit/messages/simpleMessageBuilder.d.ts.map +1 -0
  80. package/dist/test/unit/messages/simpleMessageBuilder.js +194 -0
  81. package/dist/test/unit/sol.d.ts +2 -0
  82. package/dist/test/unit/sol.d.ts.map +1 -0
  83. package/dist/test/unit/sol.js +3108 -0
  84. package/dist/test/unit/solInstructionFactory.d.ts +2 -0
  85. package/dist/test/unit/solInstructionFactory.d.ts.map +1 -0
  86. package/dist/test/unit/solInstructionFactory.js +454 -0
  87. package/dist/test/unit/solToken.d.ts +2 -0
  88. package/dist/test/unit/solToken.d.ts.map +1 -0
  89. package/dist/test/unit/solToken.js +31 -0
  90. package/dist/test/unit/transaction.d.ts +2 -0
  91. package/dist/test/unit/transaction.d.ts.map +1 -0
  92. package/dist/test/unit/transaction.js +983 -0
  93. package/dist/test/unit/transactionBuilder/StakingWithdrawBuilder.d.ts +2 -0
  94. package/dist/test/unit/transactionBuilder/StakingWithdrawBuilder.d.ts.map +1 -0
  95. package/dist/test/unit/transactionBuilder/StakingWithdrawBuilder.js +202 -0
  96. package/dist/test/unit/transactionBuilder/ataInitBuilder.d.ts +2 -0
  97. package/dist/test/unit/transactionBuilder/ataInitBuilder.d.ts.map +1 -0
  98. package/dist/test/unit/transactionBuilder/ataInitBuilder.js +471 -0
  99. package/dist/test/unit/transactionBuilder/customInstructionBuilder.d.ts +2 -0
  100. package/dist/test/unit/transactionBuilder/customInstructionBuilder.d.ts.map +1 -0
  101. package/dist/test/unit/transactionBuilder/customInstructionBuilder.js +413 -0
  102. package/dist/test/unit/transactionBuilder/stakingActivateBuilder.d.ts +2 -0
  103. package/dist/test/unit/transactionBuilder/stakingActivateBuilder.d.ts.map +1 -0
  104. package/dist/test/unit/transactionBuilder/stakingActivateBuilder.js +430 -0
  105. package/dist/test/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts +2 -0
  106. package/dist/test/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts.map +1 -0
  107. package/dist/test/unit/transactionBuilder/stakingAuthorizeBuilder.js +157 -0
  108. package/dist/test/unit/transactionBuilder/stakingDeactivateBuilder.d.ts +2 -0
  109. package/dist/test/unit/transactionBuilder/stakingDeactivateBuilder.d.ts.map +1 -0
  110. package/dist/test/unit/transactionBuilder/stakingDeactivateBuilder.js +384 -0
  111. package/dist/test/unit/transactionBuilder/stakingDelegateBuilder.d.ts +2 -0
  112. package/dist/test/unit/transactionBuilder/stakingDelegateBuilder.d.ts.map +1 -0
  113. package/dist/test/unit/transactionBuilder/stakingDelegateBuilder.js +224 -0
  114. package/dist/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts +2 -0
  115. package/dist/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts.map +1 -0
  116. package/dist/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.js +259 -0
  117. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts +2 -0
  118. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
  119. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +787 -0
  120. package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts +2 -0
  121. package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts.map +1 -0
  122. package/dist/test/unit/transactionBuilder/transactionBuilder.js +495 -0
  123. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
  124. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
  125. package/dist/test/unit/transactionBuilder/transferBuilder.js +286 -0
  126. package/dist/test/unit/transactionBuilder/transferBuilderV2.d.ts +2 -0
  127. package/dist/test/unit/transactionBuilder/transferBuilderV2.d.ts.map +1 -0
  128. package/dist/test/unit/transactionBuilder/transferBuilderV2.js +862 -0
  129. package/dist/test/unit/transactionBuilder/walletInitBuilder.d.ts +2 -0
  130. package/dist/test/unit/transactionBuilder/walletInitBuilder.d.ts.map +1 -0
  131. package/dist/test/unit/transactionBuilder/walletInitBuilder.js +259 -0
  132. package/dist/test/unit/utils.d.ts +2 -0
  133. package/dist/test/unit/utils.d.ts.map +1 -0
  134. package/dist/test/unit/utils.js +505 -0
  135. package/dist/test/unit/versionedTransaction.d.ts +2 -0
  136. package/dist/test/unit/versionedTransaction.d.ts.map +1 -0
  137. package/dist/test/unit/versionedTransaction.js +207 -0
  138. package/dist/tsconfig.tsbuildinfo +1 -0
  139. package/package.json +14 -9
  140. package/.eslintignore +0 -5
  141. package/.mocharc.yml +0 -8
  142. package/CHANGELOG.md +0 -1223
@@ -0,0 +1,413 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const should_1 = __importDefault(require("should"));
40
+ const web3_js_1 = require("@solana/web3.js");
41
+ const getBuilderFactory_1 = require("../getBuilderFactory");
42
+ const src_1 = require("../../../src");
43
+ const testData = __importStar(require("../../resources/sol"));
44
+ const bs58_1 = __importDefault(require("bs58"));
45
+ describe('Sol Custom Instruction Builder', () => {
46
+ const factory = (0, getBuilderFactory_1.getBuilderFactory)('tsol');
47
+ const customInstructionBuilder = () => {
48
+ const txBuilder = factory.getCustomInstructionBuilder();
49
+ txBuilder.nonce(recentBlockHash);
50
+ txBuilder.sender(authAccount.pub);
51
+ return txBuilder;
52
+ };
53
+ const authAccount = new src_1.KeyPair(testData.authAccount).getKeys();
54
+ const otherAccount = new src_1.KeyPair({ prv: testData.prvKeys.prvKey1.base58 }).getKeys();
55
+ const recentBlockHash = 'GHtXQBsoZHVnNFa9YevAzFr17DJjgHXk3ycTKD5xD3Zi';
56
+ const memo = 'test memo';
57
+ // Helper function to convert TransactionInstruction to the expected format
58
+ const convertInstructionToParams = (instruction) => ({
59
+ programId: instruction.programId.toString(),
60
+ keys: instruction.keys.map((key) => ({
61
+ pubkey: key.pubkey.toString(),
62
+ isSigner: key.isSigner,
63
+ isWritable: key.isWritable,
64
+ })),
65
+ data: instruction.data.toString('hex'),
66
+ });
67
+ describe('Succeed', () => {
68
+ it('build a transaction with a single custom instruction', async () => {
69
+ const transferInstruction = web3_js_1.SystemProgram.transfer({
70
+ fromPubkey: new web3_js_1.PublicKey(authAccount.pub),
71
+ toPubkey: new web3_js_1.PublicKey(otherAccount.pub),
72
+ lamports: 1000000,
73
+ });
74
+ const txBuilder = customInstructionBuilder();
75
+ txBuilder.addCustomInstruction(convertInstructionToParams(transferInstruction));
76
+ const tx = await txBuilder.build();
77
+ tx.inputs.length.should.equal(0);
78
+ const rawTx = tx.toBroadcastFormat();
79
+ should_1.default.equal(src_1.Utils.isValidRawTransaction(rawTx), true);
80
+ });
81
+ it('build a transaction with multiple custom instructions', async () => {
82
+ const transferInstruction = web3_js_1.SystemProgram.transfer({
83
+ fromPubkey: new web3_js_1.PublicKey(authAccount.pub),
84
+ toPubkey: new web3_js_1.PublicKey(otherAccount.pub),
85
+ lamports: 1000000,
86
+ });
87
+ const priorityFeeInstruction = web3_js_1.ComputeBudgetProgram.setComputeUnitPrice({
88
+ microLamports: 1000,
89
+ });
90
+ const txBuilder = customInstructionBuilder();
91
+ txBuilder.addCustomInstructions([
92
+ convertInstructionToParams(transferInstruction),
93
+ convertInstructionToParams(priorityFeeInstruction),
94
+ ]);
95
+ const tx = await txBuilder.build();
96
+ tx.inputs.length.should.equal(0);
97
+ tx.outputs.length.should.equal(0);
98
+ const rawTx = tx.toBroadcastFormat();
99
+ should_1.default.equal(src_1.Utils.isValidRawTransaction(rawTx), true);
100
+ // Should have 2 instructions
101
+ tx.solTransaction.instructions.should.have.length(2);
102
+ });
103
+ it('build a transaction with custom instruction and memo', async () => {
104
+ const transferInstruction = web3_js_1.SystemProgram.transfer({
105
+ fromPubkey: new web3_js_1.PublicKey(authAccount.pub),
106
+ toPubkey: new web3_js_1.PublicKey(otherAccount.pub),
107
+ lamports: 1000000,
108
+ });
109
+ const txBuilder = customInstructionBuilder();
110
+ txBuilder.addCustomInstruction(convertInstructionToParams(transferInstruction));
111
+ txBuilder.memo(memo);
112
+ const tx = await txBuilder.build();
113
+ const rawTx = tx.toBroadcastFormat();
114
+ should_1.default.equal(src_1.Utils.isValidRawTransaction(rawTx), true);
115
+ // Should have instruction + memo
116
+ tx.solTransaction.instructions.should.have.length(2);
117
+ });
118
+ it('build a signed transaction with custom instruction', async () => {
119
+ const transferInstruction = web3_js_1.SystemProgram.transfer({
120
+ fromPubkey: new web3_js_1.PublicKey(authAccount.pub),
121
+ toPubkey: new web3_js_1.PublicKey(otherAccount.pub),
122
+ lamports: 1000000,
123
+ });
124
+ const txBuilder = customInstructionBuilder();
125
+ txBuilder.addCustomInstruction(convertInstructionToParams(transferInstruction));
126
+ txBuilder.sign({ key: authAccount.prv });
127
+ const tx = await txBuilder.build();
128
+ const rawTx = tx.toBroadcastFormat();
129
+ should_1.default.equal(src_1.Utils.isValidRawTransaction(rawTx), true);
130
+ // Should be signed
131
+ tx.solTransaction.signatures.should.not.be.empty();
132
+ });
133
+ it('clear instructions from builder', async () => {
134
+ const transferInstruction = web3_js_1.SystemProgram.transfer({
135
+ fromPubkey: new web3_js_1.PublicKey(authAccount.pub),
136
+ toPubkey: new web3_js_1.PublicKey(otherAccount.pub),
137
+ lamports: 1000000,
138
+ });
139
+ const txBuilder = customInstructionBuilder();
140
+ txBuilder.addCustomInstruction(convertInstructionToParams(transferInstruction));
141
+ txBuilder.getInstructions().should.have.length(1);
142
+ txBuilder.clearInstructions();
143
+ txBuilder.getInstructions().should.have.length(0);
144
+ });
145
+ });
146
+ describe('Fail', () => {
147
+ it('for null instruction', () => {
148
+ const txBuilder = customInstructionBuilder();
149
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
150
+ (0, should_1.default)(() => txBuilder.addCustomInstruction(null)).throwError('Instruction cannot be null or undefined');
151
+ });
152
+ it('for undefined instruction', () => {
153
+ const txBuilder = customInstructionBuilder();
154
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
155
+ (0, should_1.default)(() => txBuilder.addCustomInstruction(undefined)).throwError('Instruction cannot be null or undefined');
156
+ });
157
+ it('for instruction without programId', () => {
158
+ const txBuilder = customInstructionBuilder();
159
+ const invalidInstruction = {
160
+ keys: [],
161
+ data: '',
162
+ };
163
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
164
+ (0, should_1.default)(() => txBuilder.addCustomInstruction(invalidInstruction)).throwError('Versioned instruction must have a valid programIdIndex number');
165
+ });
166
+ it('for instruction without keys', () => {
167
+ const txBuilder = customInstructionBuilder();
168
+ const invalidInstruction = {
169
+ programId: '11111111111111111111111111111112',
170
+ data: '',
171
+ };
172
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
173
+ (0, should_1.default)(() => txBuilder.addCustomInstruction(invalidInstruction)).throwError('Instruction must have valid keys array');
174
+ });
175
+ it('for instruction without data', () => {
176
+ const txBuilder = customInstructionBuilder();
177
+ const invalidInstruction = {
178
+ programId: '11111111111111111111111111111112',
179
+ keys: [],
180
+ };
181
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
182
+ (0, should_1.default)(() => txBuilder.addCustomInstruction(invalidInstruction)).throwError('Instruction must have valid data string');
183
+ });
184
+ it('for non-array in addCustomInstructions', () => {
185
+ const txBuilder = customInstructionBuilder();
186
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
187
+ (0, should_1.default)(() => txBuilder.addCustomInstructions('invalid')).throwError('Instructions must be an array');
188
+ });
189
+ it('when building without instructions', async () => {
190
+ const txBuilder = customInstructionBuilder();
191
+ await txBuilder.build().should.be.rejectedWith('At least one custom instruction must be specified');
192
+ });
193
+ it('when building without sender', async () => {
194
+ const transferInstruction = web3_js_1.SystemProgram.transfer({
195
+ fromPubkey: new web3_js_1.PublicKey(authAccount.pub),
196
+ toPubkey: new web3_js_1.PublicKey(otherAccount.pub),
197
+ lamports: 1000000,
198
+ });
199
+ const txBuilder = factory.getCustomInstructionBuilder();
200
+ txBuilder.nonce(recentBlockHash);
201
+ txBuilder.addCustomInstruction(convertInstructionToParams(transferInstruction));
202
+ await txBuilder.build().should.be.rejectedWith('Invalid transaction: missing sender');
203
+ });
204
+ it('when building without nonce', async () => {
205
+ const transferInstruction = web3_js_1.SystemProgram.transfer({
206
+ fromPubkey: new web3_js_1.PublicKey(authAccount.pub),
207
+ toPubkey: new web3_js_1.PublicKey(otherAccount.pub),
208
+ lamports: 1000000,
209
+ });
210
+ const txBuilder = factory.getCustomInstructionBuilder();
211
+ txBuilder.sender(authAccount.pub);
212
+ txBuilder.addCustomInstruction(convertInstructionToParams(transferInstruction));
213
+ await txBuilder.build().should.be.rejectedWith('Invalid transaction: missing nonce blockhash');
214
+ });
215
+ });
216
+ describe('SolVersionedInstruction Support', () => {
217
+ it('should accept and validate SolVersionedInstruction format', () => {
218
+ const compiledInstruction = {
219
+ programIdIndex: 1,
220
+ accountKeyIndexes: [0, 2, 3],
221
+ data: '3Bxs43ZMjSRQLs6o', // base58 encoded instruction data
222
+ };
223
+ const txBuilder = customInstructionBuilder();
224
+ (0, should_1.default)(() => txBuilder.addCustomInstruction(compiledInstruction)).not.throwError();
225
+ txBuilder.getInstructions().should.have.length(1);
226
+ const addedInstruction = txBuilder.getInstructions()[0];
227
+ addedInstruction.params.should.deepEqual(compiledInstruction);
228
+ });
229
+ it('should validate versioned instruction format', () => {
230
+ const txBuilder = customInstructionBuilder();
231
+ // Invalid programIdIndex
232
+ (0, should_1.default)(() => txBuilder.addCustomInstruction({
233
+ programIdIndex: -1,
234
+ accountKeyIndexes: [0],
235
+ data: '1', // base58 for 0x00
236
+ })).throwError('Versioned instruction must have a valid programIdIndex number');
237
+ // Invalid accountKeyIndexes
238
+ (0, should_1.default)(() => txBuilder.addCustomInstruction({
239
+ programIdIndex: 0,
240
+ accountKeyIndexes: [-1],
241
+ data: '1', // base58 for 0x00
242
+ })).throwError('Each accountKeyIndex must be a non-negative number');
243
+ // Missing data
244
+ (0, should_1.default)(() => txBuilder.addCustomInstruction({
245
+ programIdIndex: 0,
246
+ accountKeyIndexes: [0],
247
+ })).throwError('Versioned instruction must have valid data string');
248
+ });
249
+ it('should handle mixed SolInstruction and SolVersionedInstruction', () => {
250
+ const traditionalInstruction = convertInstructionToParams(web3_js_1.SystemProgram.transfer({
251
+ fromPubkey: new web3_js_1.PublicKey(authAccount.pub),
252
+ toPubkey: new web3_js_1.PublicKey(otherAccount.pub),
253
+ lamports: 1000000,
254
+ }));
255
+ const compiledInstruction = {
256
+ programIdIndex: 1,
257
+ accountKeyIndexes: [0, 2],
258
+ data: '4HSo5YVBrgChTZX5',
259
+ };
260
+ const txBuilder = customInstructionBuilder();
261
+ txBuilder.addCustomInstruction(traditionalInstruction);
262
+ txBuilder.addCustomInstruction(compiledInstruction);
263
+ txBuilder.getInstructions().should.have.length(2);
264
+ });
265
+ });
266
+ describe('fromVersionedTransactionData', () => {
267
+ function extractVersionedTransactionData(base64Bytes) {
268
+ const buffer = Buffer.from(base64Bytes, 'base64');
269
+ const versionedTx = web3_js_1.VersionedTransaction.deserialize(buffer);
270
+ return {
271
+ versionedInstructions: versionedTx.message.compiledInstructions.map((ci) => ({
272
+ programIdIndex: ci.programIdIndex,
273
+ accountKeyIndexes: ci.accountKeyIndexes,
274
+ data: bs58_1.default.encode(ci.data),
275
+ })),
276
+ addressLookupTables: versionedTx.message.addressTableLookups.map((alt) => ({
277
+ accountKey: alt.accountKey.toString(),
278
+ writableIndexes: alt.writableIndexes,
279
+ readonlyIndexes: alt.readonlyIndexes,
280
+ })),
281
+ staticAccountKeys: versionedTx.message.staticAccountKeys.map((key) => key.toString()),
282
+ messageHeader: {
283
+ numRequiredSignatures: versionedTx.message.header.numRequiredSignatures,
284
+ numReadonlySignedAccounts: versionedTx.message.header.numReadonlySignedAccounts,
285
+ numReadonlyUnsignedAccounts: versionedTx.message.header.numReadonlyUnsignedAccounts,
286
+ },
287
+ };
288
+ }
289
+ it('should process VersionedTransactionData and extract instructions', () => {
290
+ const txBuilder = customInstructionBuilder();
291
+ const versionedTxData = extractVersionedTransactionData(testData.JUPITER_VERSIONED_TX_BYTES);
292
+ // Should parse without throwing errors
293
+ (0, should_1.default)(() => txBuilder.fromVersionedTransactionData(versionedTxData)).not.throwError();
294
+ // Should have extracted instructions
295
+ const instructions = txBuilder.getInstructions();
296
+ instructions.length.should.be.greaterThan(0);
297
+ for (const instruction of instructions) {
298
+ instruction.type.should.equal('VersionedCustomInstruction');
299
+ instruction.params.should.have.property('programIdIndex');
300
+ instruction.params.should.have.property('accountKeyIndexes');
301
+ instruction.params.should.have.property('data');
302
+ }
303
+ });
304
+ it('should store VersionedTransactionData in underlying transaction', async () => {
305
+ const txBuilder = customInstructionBuilder();
306
+ const versionedTxData = extractVersionedTransactionData(testData.JUPITER_VERSIONED_TX_BYTES);
307
+ txBuilder.fromVersionedTransactionData(versionedTxData);
308
+ const tx = txBuilder['_transaction'];
309
+ const storedData = tx.getVersionedTransactionData();
310
+ should_1.default.exist(storedData);
311
+ storedData.versionedInstructions.length.should.equal(versionedTxData.versionedInstructions.length);
312
+ storedData.addressLookupTables.length.should.equal(versionedTxData.addressLookupTables.length);
313
+ storedData.staticAccountKeys.length.should.equal(versionedTxData.staticAccountKeys.length);
314
+ });
315
+ it('should validate input data', () => {
316
+ const txBuilder = customInstructionBuilder();
317
+ // Invalid: null/undefined
318
+ (0, should_1.default)(() => txBuilder.fromVersionedTransactionData(null)).throwError(/must be a valid object/);
319
+ (0, should_1.default)(() => txBuilder.fromVersionedTransactionData(undefined)).throwError(/must be a valid object/);
320
+ // Invalid: empty instructions
321
+ (0, should_1.default)(() => txBuilder.fromVersionedTransactionData({
322
+ versionedInstructions: [],
323
+ addressLookupTables: [],
324
+ staticAccountKeys: ['test'],
325
+ messageHeader: { numRequiredSignatures: 1, numReadonlySignedAccounts: 0, numReadonlyUnsignedAccounts: 0 },
326
+ })).throwError(/non-empty array/);
327
+ // Invalid: missing addressLookupTables
328
+ (0, should_1.default)(() => txBuilder.fromVersionedTransactionData({
329
+ versionedInstructions: [{ programIdIndex: 0, accountKeyIndexes: [0], data: '1' }], // base58 for 0x00
330
+ staticAccountKeys: ['test'],
331
+ })).throwError(/must be an array/);
332
+ // Invalid: empty staticAccountKeys
333
+ (0, should_1.default)(() => txBuilder.fromVersionedTransactionData({
334
+ versionedInstructions: [{ programIdIndex: 0, accountKeyIndexes: [0], data: '1' }], // base58 for 0x00
335
+ addressLookupTables: [],
336
+ staticAccountKeys: [],
337
+ messageHeader: { numRequiredSignatures: 1, numReadonlySignedAccounts: 0, numReadonlyUnsignedAccounts: 0 },
338
+ })).throwError(/non-empty array/);
339
+ });
340
+ it('should work with the complete transaction building flow', async () => {
341
+ const txBuilder = customInstructionBuilder();
342
+ const versionedTxData = extractVersionedTransactionData(testData.JUPITER_VERSIONED_TX_BYTES);
343
+ // Process the VersionedTransactionData
344
+ txBuilder.fromVersionedTransactionData(versionedTxData);
345
+ txBuilder.sender(versionedTxData.staticAccountKeys[0]); // Fee payer
346
+ txBuilder.nonce(testData.blockHashes.validBlockHashes[0]);
347
+ const tx = await txBuilder.build();
348
+ // Verify transaction properties
349
+ tx.should.be.ok();
350
+ tx.type.should.equal(31); // TransactionType.CustomTx enum value
351
+ // Verify signable payload
352
+ const payload = tx.signablePayload;
353
+ payload.should.be.instanceOf(Buffer);
354
+ payload.length.should.be.greaterThan(0);
355
+ // Verify payload is deterministic - rebuilding with same params produces same payload
356
+ const txBuilder2 = customInstructionBuilder();
357
+ txBuilder2.fromVersionedTransactionData(versionedTxData);
358
+ txBuilder2.sender(versionedTxData.staticAccountKeys[0]);
359
+ txBuilder2.nonce(testData.blockHashes.validBlockHashes[0]);
360
+ const tx2 = await txBuilder2.build();
361
+ should_1.default.equal(tx2.signablePayload.toString('hex'), payload.toString('hex'));
362
+ });
363
+ it('should extract the correct number of instructions from Jupiter transaction', () => {
364
+ const txBuilder = customInstructionBuilder();
365
+ const versionedTxData = extractVersionedTransactionData(testData.JUPITER_VERSIONED_TX_BYTES);
366
+ txBuilder.fromVersionedTransactionData(versionedTxData);
367
+ const instructions = txBuilder.getInstructions();
368
+ // Verify we extracted instructions
369
+ instructions.length.should.be.greaterThan(0);
370
+ instructions.length.should.equal(versionedTxData.versionedInstructions.length);
371
+ // Verify each instruction has valid compiled format
372
+ for (const instruction of instructions) {
373
+ const params = instruction.params;
374
+ (typeof params.programIdIndex).should.equal('number');
375
+ params.programIdIndex.should.be.greaterThanOrEqual(0);
376
+ Array.isArray(params.accountKeyIndexes).should.equal(true);
377
+ (typeof params.data).should.equal('string');
378
+ // Data should be valid base58 string (non-empty)
379
+ params.data.length.should.be.greaterThan(0);
380
+ // Verify it can be decoded
381
+ should_1.default.doesNotThrow(() => bs58_1.default.decode(params.data));
382
+ }
383
+ });
384
+ it('should clear instructions properly after using fromVersionedTransactionData', () => {
385
+ const txBuilder = customInstructionBuilder();
386
+ const versionedTxData = extractVersionedTransactionData(testData.JUPITER_VERSIONED_TX_BYTES);
387
+ txBuilder.fromVersionedTransactionData(versionedTxData);
388
+ txBuilder.getInstructions().length.should.be.greaterThan(0);
389
+ // Clear should work
390
+ txBuilder.clearInstructions();
391
+ txBuilder.getInstructions().should.have.length(0);
392
+ });
393
+ it('should extract fee payer from staticAccountKeys', () => {
394
+ const txBuilder = factory.getCustomInstructionBuilder();
395
+ txBuilder.nonce(recentBlockHash);
396
+ const versionedTxData = extractVersionedTransactionData(testData.JUPITER_VERSIONED_TX_BYTES);
397
+ txBuilder.fromVersionedTransactionData(versionedTxData);
398
+ const sender = txBuilder['_sender'];
399
+ should_1.default.exist(sender);
400
+ sender.should.equal(versionedTxData.staticAccountKeys[0]);
401
+ });
402
+ it('should not override existing sender', () => {
403
+ const txBuilder = customInstructionBuilder();
404
+ const versionedTxData = extractVersionedTransactionData(testData.JUPITER_VERSIONED_TX_BYTES);
405
+ const originalSender = txBuilder['_sender'];
406
+ txBuilder.fromVersionedTransactionData(versionedTxData);
407
+ const sender = txBuilder['_sender'];
408
+ sender.should.equal(originalSender);
409
+ sender.should.equal(authAccount.pub);
410
+ });
411
+ });
412
+ });
413
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tSW5zdHJ1Y3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci9jdXN0b21JbnN0cnVjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsNkNBTXlCO0FBQ3pCLDREQUF5RDtBQUN6RCxzQ0FBMkQ7QUFDM0QsOERBQWdEO0FBRWhELGdEQUEwQjtBQUUxQixRQUFRLENBQUMsZ0NBQWdDLEVBQUUsR0FBRyxFQUFFO0lBQzlDLE1BQU0sT0FBTyxHQUFHLElBQUEscUNBQWlCLEVBQUMsTUFBTSxDQUFDLENBQUM7SUFFMUMsTUFBTSx3QkFBd0IsR0FBRyxHQUFHLEVBQUU7UUFDcEMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDeEQsU0FBUyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNqQyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDLENBQUM7SUFFRixNQUFNLFdBQVcsR0FBRyxJQUFJLGFBQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDaEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxhQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNyRixNQUFNLGVBQWUsR0FBRyw4Q0FBOEMsQ0FBQztJQUN2RSxNQUFNLElBQUksR0FBRyxXQUFXLENBQUM7SUFFekIsMkVBQTJFO0lBQzNFLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxXQUFtQyxFQUFFLEVBQUUs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QyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNwQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHtcbiAgU3lzdGVtUHJvZ3JhbSxcbiAgUHVibGljS2V5LFxuICBUcmFuc2FjdGlvbkluc3RydWN0aW9uLFxuICBDb21wdXRlQnVkZ2V0UHJvZ3JhbSxcbiAgVmVyc2lvbmVkVHJhbnNhY3Rpb24sXG59IGZyb20gJ0Bzb2xhbmEvd2ViMy5qcyc7XG5pbXBvcnQgeyBnZXRCdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4uL2dldEJ1aWxkZXJGYWN0b3J5JztcbmltcG9ydCB7IEtleVBhaXIsIFV0aWxzLCBUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvc29sJztcbmltcG9ydCB7IFNvbFZlcnNpb25lZEluc3RydWN0aW9uIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IGJhc2U1OCBmcm9tICdiczU4JztcblxuZGVzY3JpYmUoJ1NvbCBDdXN0b20gSW5zdHJ1Y3Rpb24gQnVpbGRlcicsICgpID0+IHtcbiAgY29uc3QgZmFjdG9yeSA9IGdldEJ1aWxkZXJGYWN0b3J5KCd0c29sJyk7XG5cbiAgY29uc3QgY3VzdG9tSW5zdHJ1Y3Rpb25CdWlsZGVyID0gKCkgPT4ge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0Q3VzdG9tSW5zdHJ1Y3Rpb25CdWlsZGVyKCk7XG4gICAgdHhCdWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCk7XG4gICAgdHhCdWlsZGVyLnNlbmRlcihhdXRoQWNjb3VudC5wdWIpO1xuICAgIHJldHVybiB0eEJ1aWxkZXI7XG4gIH07XG5cbiAgY29uc3QgYXV0aEFjY291bnQgPSBuZXcgS2V5UGFpcih0ZXN0RGF0YS5hdXRoQWNjb3VudCkuZ2V0S2V5cygpO1xuICBjb25zdCBvdGhlckFjY291bnQgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEucHJ2S2V5cy5wcnZLZXkxLmJhc2U1OCB9KS5nZXRLZXlzKCk7XG4gIGNvbnN0IHJlY2VudEJsb2NrSGFzaCA9ICdHSHRYUUJzb1pIVm5ORmE5WWV2QXpGcjE3REpqZ0hYazN5Y1RLRDV4RDNaaSc7XG4gIGNvbnN0IG1lbW8gPSAndGVzdCBtZW1vJztcblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBUcmFuc2FjdGlvbkluc3RydWN0aW9uIHRvIHRoZSBleHBlY3RlZCBmb3JtYXRcbiAgY29uc3QgY29udmVydEluc3RydWN0aW9uVG9QYXJhbXMgPSAoaW5zdHJ1Y3Rpb246IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24pID0+ICh7XG4gICAgcHJvZ3JhbUlkOiBpbnN0cnVjdGlvbi5wcm9ncmFtSWQudG9TdHJpbmcoKSxcbiAgICBrZXlzOiBpbnN0cnVjdGlvbi5rZXlzLm1hcCgoa2V5KSA9PiAoe1xuICAgICAgcHVia2V5OiBrZXkucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICBpc1NpZ25lcjoga2V5LmlzU2lnbmVyLFxuICAgICAgaXNXcml0YWJsZToga2V5LmlzV3JpdGFibGUsXG4gICAgfSkpLFxuICAgIGRhdGE6IGluc3RydWN0aW9uLmRhdGEudG9TdHJpbmcoJ2hleCcpLFxuICB9KTtcblxuICBkZXNjcmliZSgnU3VjY2VlZCcsICgpID0+IHtcbiAgICBpdCgnYnVpbGQgYSB0cmFuc2FjdGlvbiB3aXRoIGEgc2luZ2xlIGN1c3RvbSBpbnN0cnVjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zZmVySW5zdHJ1Y3Rpb24gPSBTeXN0ZW1Qcm9ncmFtLnRyYW5zZmVyKHtcbiAgICAgICAgZnJvbVB1YmtleTogbmV3IFB1YmxpY0tleShhdXRoQWNjb3VudC5wdWIpLFxuICAgICAgICB0b1B1YmtleTogbmV3IFB1YmxpY0tleShvdGhlckFjY291bnQucHViKSxcbiAgICAgICAgbGFtcG9ydHM6IDEwMDAwMDAsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdHhCdWlsZGVyID0gY3VzdG9tSW5zdHJ1Y3Rpb25CdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuYWRkQ3VzdG9tSW5zdHJ1Y3Rpb24oY29udmVydEluc3RydWN0aW9uVG9QYXJhbXModHJhbnNmZXJJbnN0cnVjdGlvbikpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgdHguaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMCk7XG5cbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHNob3VsZC5lcXVhbChVdGlscy5pc1ZhbGlkUmF3VHJhbnNhY3Rpb24ocmF3VHgpLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdidWlsZCBhIHRyYW5zYWN0aW9uIHdpdGggbXVsdGlwbGUgY3VzdG9tIGluc3RydWN0aW9ucycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zZmVySW5zdHJ1Y3Rpb24gPSBTeXN0ZW1Qcm9ncmFtLnRyYW5zZmVyKHtcbiAgICAgICAgZnJvbVB1YmtleTogbmV3IFB1YmxpY0tleShhdXRoQWNjb3VudC5wdWIpLFxuICAgICAgICB0b1B1YmtleTogbmV3IFB1YmxpY0tleShvdGhlckFjY291bnQucHViKSxcbiAgICAgICAgbGFtcG9ydHM6IDEwMDAwMDAsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcHJpb3JpdHlGZWVJbnN0cnVjdGlvbiA9IENvbXB1dGVCdWRnZXRQcm9ncmFtLnNldENvbXB1dGVVbml0UHJpY2Uoe1xuICAgICAgICBtaWNyb0xhbXBvcnRzOiAxMDAwLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGN1c3RvbUluc3RydWN0aW9uQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLmFkZEN1c3RvbUluc3RydWN0aW9ucyhbXG4gICAgICAgIGNvbnZlcnRJbnN0cnVjdGlvblRvUGFyYW1zKHRyYW5zZmVySW5zdHJ1Y3Rpb24pLFxuICAgICAgICBjb252ZXJ0SW5zdHJ1Y3Rpb25Ub1BhcmFtcyhwcmlvcml0eUZlZUluc3RydWN0aW9uKSxcbiAgICAgIF0pO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgdHguaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMCk7XG4gICAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMCk7XG5cbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHNob3VsZC5lcXVhbChVdGlscy5pc1ZhbGlkUmF3VHJhbnNhY3Rpb24ocmF3VHgpLCB0cnVlKTtcblxuICAgICAgLy8gU2hvdWxkIGhhdmUgMiBpbnN0cnVjdGlvbnNcbiAgICAgICh0eCBhcyBUcmFuc2FjdGlvbikuc29sVHJhbnNhY3Rpb24uaW5zdHJ1Y3Rpb25zLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICB9KTtcblxuICAgIGl0KCdidWlsZCBhIHRyYW5zYWN0aW9uIHdpdGggY3VzdG9tIGluc3RydWN0aW9uIGFuZCBtZW1vJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHJhbnNmZXJJbnN0cnVjdGlvbiA9IFN5c3RlbVByb2dyYW0udHJhbnNmZXIoe1xuICAgICAgICBmcm9tUHVia2V5OiBuZXcgUHVibGljS2V5KGF1dGhBY2NvdW50LnB1YiksXG4gICAgICAgIHRvUHVia2V5OiBuZXcgUHVibGljS2V5KG90aGVyQWNjb3VudC5wdWIpLFxuICAgICAgICBsYW1wb3J0czogMTAwMDAwMCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjdXN0b21JbnN0cnVjdGlvbkJ1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlci5hZGRDdXN0b21JbnN0cnVjdGlvbihjb252ZXJ0SW5zdHJ1Y3Rpb25Ub1BhcmFtcyh0cmFuc2Zlckluc3RydWN0aW9uKSk7XG4gICAgICB0eEJ1aWxkZXIubWVtbyhtZW1vKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHNob3VsZC5lcXVhbChVdGlscy5pc1ZhbGlkUmF3VHJhbnNhY3Rpb24ocmF3VHgpLCB0cnVlKTtcblxuICAgICAgLy8gU2hvdWxkIGhhdmUgaW5zdHJ1Y3Rpb24gKyBtZW1vXG4gICAgICAodHggYXMgVHJhbnNhY3Rpb24pLnNvbFRyYW5zYWN0aW9uLmluc3RydWN0aW9ucy5zaG91bGQuaGF2ZS5sZW5ndGgoMik7XG4gICAgfSk7XG5cbiAgICBpdCgnYnVpbGQgYSBzaWduZWQgdHJhbnNhY3Rpb24gd2l0aCBjdXN0b20gaW5zdHJ1Y3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0cmFuc2Zlckluc3RydWN0aW9uID0gU3lzdGVtUHJvZ3JhbS50cmFuc2Zlcih7XG4gICAgICAgIGZyb21QdWJrZXk6IG5ldyBQdWJsaWNLZXkoYXV0aEFjY291bnQucHViKSxcbiAgICAgICAgdG9QdWJrZXk6IG5ldyBQdWJsaWNLZXkob3RoZXJBY2NvdW50LnB1YiksXG4gICAgICAgIGxhbXBvcnRzOiAxMDAwMDAwLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGN1c3RvbUluc3RydWN0aW9uQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLmFkZEN1c3RvbUluc3RydWN0aW9uKGNvbnZlcnRJbnN0cnVjdGlvblRvUGFyYW1zKHRyYW5zZmVySW5zdHJ1Y3Rpb24pKTtcbiAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBhdXRoQWNjb3VudC5wcnYgfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuXG4gICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICBzaG91bGQuZXF1YWwoVXRpbHMuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1R4KSwgdHJ1ZSk7XG5cbiAgICAgIC8vIFNob3VsZCBiZSBzaWduZWRcbiAgICAgICh0eCBhcyBUcmFuc2FjdGlvbikuc29sVHJhbnNhY3Rpb24uc2lnbmF0dXJlcy5zaG91bGQubm90LmJlLmVtcHR5KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnY2xlYXIgaW5zdHJ1Y3Rpb25zIGZyb20gYnVpbGRlcicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zZmVySW5zdHJ1Y3Rpb24gPSBTeXN0ZW1Qcm9ncmFtLnRyYW5zZmVyKHtcbiAgICAgICAgZnJvbVB1YmtleTogbmV3IFB1YmxpY0tleShhdXRoQWNjb3VudC5wdWIpLFxuICAgICAgICB0b1B1YmtleTogbmV3IFB1YmxpY0tleShvdGhlckFjY291bnQucHViKSxcbiAgICAgICAgbGFtcG9ydHM6IDEwMDAwMDAsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdHhCdWlsZGVyID0gY3VzdG9tSW5zdHJ1Y3Rpb25CdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuYWRkQ3VzdG9tSW5zdHJ1Y3Rpb24oY29udmVydEluc3RydWN0aW9uVG9QYXJhbXModHJhbnNmZXJJbnN0cnVjdGlvbikpO1xuICAgICAgdHhCdWlsZGVyLmdldEluc3RydWN0aW9ucygpLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcblxuICAgICAgdHhCdWlsZGVyLmNsZWFySW5zdHJ1Y3Rpb25zKCk7XG4gICAgICB0eEJ1aWxkZXIuZ2V0SW5zdHJ1Y3Rpb25zKCkuc2hvdWxkLmhhdmUubGVuZ3RoKDApO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBUeXBlIGZvciB0ZXN0aW5nIGludmFsaWQgaW5zdHJ1Y3Rpb24gZm9ybWF0c1xuICBpbnRlcmZhY2UgSW52YWxpZEluc3RydWN0aW9uIHtcbiAgICBwcm9ncmFtSWQ/OiBzdHJpbmc7XG4gICAga2V5cz86IHVua25vd247XG4gICAgZGF0YT86IHVua25vd247XG4gIH1cblxuICBkZXNjcmliZSgnRmFpbCcsICgpID0+IHtcbiAgICBpdCgnZm9yIG51bGwgaW5zdHJ1Y3Rpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjdXN0b21JbnN0cnVjdGlvbkJ1aWxkZXIoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICBzaG91bGQoKCkgPT4gdHhCdWlsZGVyLmFkZEN1c3RvbUluc3RydWN0aW9uKG51bGwgYXMgYW55KSkudGhyb3dFcnJvcignSW5zdHJ1Y3Rpb24gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnZm9yIHVuZGVmaW5lZCBpbnN0cnVjdGlvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGN1c3RvbUluc3RydWN0aW9uQnVpbGRlcigpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIHNob3VsZCgoKSA9PiB0eEJ1aWxkZXIuYWRkQ3VzdG9tSW5zdHJ1Y3Rpb24odW5kZWZpbmVkIGFzIGFueSkpLnRocm93RXJyb3IoXG4gICAgICAgICdJbnN0cnVjdGlvbiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQnXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZvciBpbnN0cnVjdGlvbiB3aXRob3V0IHByb2dyYW1JZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGN1c3RvbUluc3RydWN0aW9uQnVpbGRlcigpO1xuICAgICAgY29uc3QgaW52YWxpZEluc3RydWN0aW9uOiBJbnZhbGlkSW5zdHJ1Y3Rpb24gPSB7XG4gICAgICAgIGtleXM6IFtdLFxuICAgICAgICBkYXRhOiAnJyxcbiAgICAgIH07XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICBzaG91bGQoKCkgPT4gdHhCdWlsZGVyLmFkZEN1c3RvbUluc3RydWN0aW9uKGludmFsaWRJbnN0cnVjdGlvbiBhcyBhbnkpKS50aHJvd0Vycm9yKFxuICAgICAgICAnVmVyc2lvbmVkIGluc3RydWN0aW9uIG11c3QgaGF2ZSBhIHZhbGlkIHByb2dyYW1JZEluZGV4IG51bWJlcidcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnZm9yIGluc3RydWN0aW9uIHdpdGhvdXQga2V5cycsICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGN1c3RvbUluc3RydWN0aW9uQnVpbGRlcigpO1xuICAgICAgY29uc3QgaW52YWxpZEluc3RydWN0aW9uOiBJbnZhbGlkSW5zdHJ1Y3Rpb24gPSB7XG4gICAgICAgIHByb2dyYW1JZDogJzExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyJyxcbiAgICAgICAgZGF0YTogJycsXG4gICAgICB9O1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgc2hvdWxkKCgpID0+IHR4QnVpbGRlci5hZGRDdXN0b21JbnN0cnVjdGlvbihpbnZhbGlkSW5zdHJ1Y3Rpb24gYXMgYW55KSkudGhyb3dFcnJvcihcbiAgICAgICAgJ0luc3RydWN0aW9uIG11c3QgaGF2ZSB2YWxpZCBrZXlzIGFycmF5J1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdmb3IgaW5zdHJ1Y3Rpb24gd2l0aG91dCBkYXRhJywgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gY3VzdG9tSW5zdHJ1Y3Rpb25CdWlsZGVyKCk7XG4gICAgICBjb25zdCBpbnZhbGlkSW5zdHJ1Y3Rpb246IEludmFsaWRJbnN0cnVjdGlvbiA9IHtcbiAgICAgICAgcHJvZ3JhbUlkOiAnMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTInLFxuICAgICAgICBrZXlzOiBbXSxcbiAgICAgIH07XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICBzaG91bGQoKCkgPT4gdHhCdWlsZGVyLmFkZEN1c3RvbUluc3RydWN0aW9uKGludmFsaWRJbnN0cnVjdGlvbiBhcyBhbnkpKS50aHJvd0Vycm9yKFxuICAgICAgICAnSW5zdHJ1Y3Rpb24gbXVzdCBoYXZlIHZhbGlkIGRhdGEgc3RyaW5nJ1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdmb3Igbm9uLWFycmF5IGluIGFkZEN1c3RvbUluc3RydWN0aW9ucycsICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGN1c3RvbUluc3RydWN0aW9uQnVpbGRlcigpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIHNob3VsZCgoKSA9PiB0eEJ1aWxkZXIuYWRkQ3VzdG9tSW5zdHJ1Y3Rpb25zKCdpbnZhbGlkJyBhcyBhbnkpKS50aHJvd0Vycm9yKCdJbnN0cnVjdGlvbnMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3doZW4gYnVpbGRpbmcgd2l0aG91dCBpbnN0cnVjdGlvbnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjdXN0b21JbnN0cnVjdGlvbkJ1aWxkZXIoKTtcbiAgICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0F0IGxlYXN0IG9uZSBjdXN0b20gaW5zdHJ1Y3Rpb24gbXVzdCBiZSBzcGVjaWZpZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCd3aGVuIGJ1aWxkaW5nIHdpdGhvdXQgc2VuZGVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHJhbnNmZXJJbnN0cnVjdGlvbiA9IFN5c3RlbVByb2dyYW0udHJhbnNmZXIoe1xuICAgICAgICBmcm9tUHVia2V5OiBuZXcgUHVibGljS2V5KGF1dGhBY2NvdW50LnB1YiksXG4gICAgICAgIHRvUHVia2V5OiBuZXcgUHVibGljS2V5KG90aGVyQWNjb3VudC5wdWIpLFxuICAgICAgICBsYW1wb3J0czogMTAwMDAwMCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldEN1c3RvbUluc3RydWN0aW9uQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCk7XG4gICAgICB0eEJ1aWxkZXIuYWRkQ3VzdG9tSW5zdHJ1Y3Rpb24oY29udmVydEluc3RydWN0aW9uVG9QYXJhbXModHJhbnNmZXJJbnN0cnVjdGlvbikpO1xuXG4gICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIHNlbmRlcicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3doZW4gYnVpbGRpbmcgd2l0aG91dCBub25jZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zZmVySW5zdHJ1Y3Rpb24gPSBTeXN0ZW1Qcm9ncmFtLnRyYW5zZmVyKHtcbiAgICAgICAgZnJvbVB1YmtleTogbmV3IFB1YmxpY0tleShhdXRoQWNjb3VudC5wdWIpLFxuICAgICAgICB0b1B1YmtleTogbmV3IFB1YmxpY0tleShvdGhlckFjY291bnQucHViKSxcbiAgICAgICAgbGFtcG9ydHM6IDEwMDAwMDAsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRDdXN0b21JbnN0cnVjdGlvbkJ1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlci5zZW5kZXIoYXV0aEFjY291bnQucHViKTtcbiAgICAgIHR4QnVpbGRlci5hZGRDdXN0b21JbnN0cnVjdGlvbihjb252ZXJ0SW5zdHJ1Y3Rpb25Ub1BhcmFtcyh0cmFuc2Zlckluc3RydWN0aW9uKSk7XG5cbiAgICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0ludmFsaWQgdHJhbnNhY3Rpb246IG1pc3Npbmcgbm9uY2UgYmxvY2toYXNoJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTb2xWZXJzaW9uZWRJbnN0cnVjdGlvbiBTdXBwb3J0JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYWNjZXB0IGFuZCB2YWxpZGF0ZSBTb2xWZXJzaW9uZWRJbnN0cnVjdGlvbiBmb3JtYXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjb21waWxlZEluc3RydWN0aW9uOiBTb2xWZXJzaW9uZWRJbnN0cnVjdGlvbiA9IHtcbiAgICAgICAgcHJvZ3JhbUlkSW5kZXg6IDEsXG4gICAgICAgIGFjY291bnRLZXlJbmRleGVzOiBbMCwgMiwgM10sXG4gICAgICAgIGRhdGE6ICczQnhzNDNaTWpTUlFMczZvJywgLy8gYmFzZTU4IGVuY29kZWQgaW5zdHJ1Y3Rpb24gZGF0YVxuICAgICAgfTtcblxuICAgICAgY29uc3QgdHhCdWlsZGVyID0gY3VzdG9tSW5zdHJ1Y3Rpb25CdWlsZGVyKCk7XG4gICAgICBzaG91bGQoKCkgPT4gdHhCdWlsZGVyLmFkZEN1c3RvbUluc3RydWN0aW9uKGNvbXBpbGVkSW5zdHJ1Y3Rpb24pKS5ub3QudGhyb3dFcnJvcigpO1xuXG4gICAgICB0eEJ1aWxkZXIuZ2V0SW5zdHJ1Y3Rpb25zKCkuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgY29uc3QgYWRkZWRJbnN0cnVjdGlvbiA9IHR4QnVpbGRlci5nZXRJbnN0cnVjdGlvbnMoKVswXTtcbiAgICAgIGFkZGVkSW5zdHJ1Y3Rpb24ucGFyYW1zLnNob3VsZC5kZWVwRXF1YWwoY29tcGlsZWRJbnN0cnVjdGlvbik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIHZlcnNpb25lZCBpbnN0cnVjdGlvbiBmb3JtYXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjdXN0b21JbnN0cnVjdGlvbkJ1aWxkZXIoKTtcblxuICAgICAgLy8gSW52YWxpZCBwcm9ncmFtSWRJbmRleFxuICAgICAgc2hvdWxkKCgpID0+XG4gICAgICAgIHR4QnVpbGRlci5hZGRDdXN0b21JbnN0cnVjdGlvbih7XG4gICAgICAgICAgcHJvZ3JhbUlkSW5kZXg6IC0xLFxuICAgICAgICAgIGFjY291bnRLZXlJbmRleGVzOiBbMF0sXG4gICAgICAgICAgZGF0YTogJzEnLCAvLyBiYXNlNTggZm9yIDB4MDBcbiAgICAgICAgfSBhcyBTb2xWZXJzaW9uZWRJbnN0cnVjdGlvbilcbiAgICAgICkudGhyb3dFcnJvcignVmVyc2lvbmVkIGluc3RydWN0aW9uIG11c3QgaGF2ZSBhIHZhbGlkIHByb2dyYW1JZEluZGV4IG51bWJlcicpO1xuXG4gICAgICAvLyBJbnZhbGlkIGFjY291bnRLZXlJbmRleGVzXG4gICAgICBzaG91bGQoKCkgPT5cbiAgICAgICAgdHhCdWlsZGVyLmFkZEN1c3RvbUluc3RydWN0aW9uKHtcbiAgICAgICAgICBwcm9ncmFtSWRJbmRleDogMCxcbiAgICAgICAgICBhY2NvdW50S2V5SW5kZXhlczogWy0xXSxcbiAgICAgICAgICBkYXRhOiAnMScsIC8vIGJhc2U1OCBmb3IgMHgwMFxuICAgICAgICB9IGFzIFNvbFZlcnNpb25lZEluc3RydWN0aW9uKVxuICAgICAgKS50aHJvd0Vycm9yKCdFYWNoIGFjY291bnRLZXlJbmRleCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlcicpO1xuXG4gICAgICAvLyBNaXNzaW5nIGRhdGFcbiAgICAgIHNob3VsZCgoKSA9PlxuICAgICAgICB0eEJ1aWxkZXIuYWRkQ3VzdG9tSW5zdHJ1Y3Rpb24oe1xuICAgICAgICAgIHByb2dyYW1JZEluZGV4OiAwLFxuICAgICAgICAgIGFjY291bnRLZXlJbmRleGVzOiBbMF0sXG4gICAgICAgIH0gYXMgU29sVmVyc2lvbmVkSW5zdHJ1Y3Rpb24pXG4gICAgICApLnRocm93RXJyb3IoJ1ZlcnNpb25lZCBpbnN0cnVjdGlvbiBtdXN0IGhhdmUgdmFsaWQgZGF0YSBzdHJpbmcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIG1peGVkIFNvbEluc3RydWN0aW9uIGFuZCBTb2xWZXJzaW9uZWRJbnN0cnVjdGlvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IHRyYWRpdGlvbmFsSW5zdHJ1Y3Rpb24gPSBjb252ZXJ0SW5zdHJ1Y3Rpb25Ub1BhcmFtcyhcbiAgICAgICAgU3lzdGVtUHJvZ3JhbS50cmFuc2Zlcih7XG4gICAgICAgICAgZnJvbVB1YmtleTogbmV3IFB1YmxpY0tleShhdXRoQWNjb3VudC5wdWIpLFxuICAgICAgICAgIHRvUHVia2V5OiBuZXcgUHVibGljS2V5KG90aGVyQWNjb3VudC5wdWIpLFxuICAgICAgICAgIGxhbXBvcnRzOiAxMDAwMDAwLFxuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgICAgY29uc3QgY29tcGlsZWRJbnN0cnVjdGlvbjogU29sVmVyc2lvbmVkSW5zdHJ1Y3Rpb24gPSB7XG4gICAgICAgIHByb2dyYW1JZEluZGV4OiAxLFxuICAgICAgICBhY2NvdW50S2V5SW5kZXhlczogWzAsIDJdLFxuICAgICAgICBkYXRhOiAnNEhTbzVZVkJyZ0NoVFpYNScsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjdXN0b21JbnN0cnVjdGlvbkJ1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlci5hZGRDdXN0b21JbnN0cnVjdGlvbih0cmFkaXRpb25hbEluc3RydWN0aW9uKTtcbiAgICAgIHR4QnVpbGRlci5hZGRDdXN0b21JbnN0cnVjdGlvbihjb21waWxlZEluc3RydWN0aW9uKTtcblxuICAgICAgdHhCdWlsZGVyLmdldEluc3RydWN0aW9ucygpLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Zyb21WZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEnLCAoKSA9PiB7XG4gICAgZnVuY3Rpb24gZXh0cmFjdFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YShiYXNlNjRCeXRlczogc3RyaW5nKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShiYXNlNjRCeXRlcywgJ2Jhc2U2NCcpO1xuICAgICAgY29uc3QgdmVyc2lvbmVkVHggPSBWZXJzaW9uZWRUcmFuc2FjdGlvbi5kZXNlcmlhbGl6ZShidWZmZXIpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB2ZXJzaW9uZWRJbnN0cnVjdGlvbnM6IHZlcnNpb25lZFR4Lm1lc3NhZ2UuY29tcGlsZWRJbnN0cnVjdGlvbnMubWFwKChjaSkgPT4gKHtcbiAgICAgICAgICBwcm9ncmFtSWRJbmRleDogY2kucHJvZ3JhbUlkSW5kZXgsXG4gICAgICAgICAgYWNjb3VudEtleUluZGV4ZXM6IGNpLmFjY291bnRLZXlJbmRleGVzLFxuICAgICAgICAgIGRhdGE6IGJhc2U1OC5lbmNvZGUoY2kuZGF0YSksXG4gICAgICAgIH0pKSxcbiAgICAgICAgYWRkcmVzc0xvb2t1cFRhYmxlczogdmVyc2lvbmVkVHgubWVzc2FnZS5hZGRyZXNzVGFibGVMb29rdXBzLm1hcCgoYWx0KSA9PiAoe1xuICAgICAgICAgIGFjY291bnRLZXk6IGFsdC5hY2NvdW50S2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgd3JpdGFibGVJbmRleGVzOiBhbHQud3JpdGFibGVJbmRleGVzLFxuICAgICAgICAgIHJlYWRvbmx5SW5kZXhlczogYWx0LnJlYWRvbmx5SW5kZXhlcyxcbiAgICAgICAgfSkpLFxuICAgICAgICBzdGF0aWNBY2NvdW50S2V5czogdmVyc2lvbmVkVHgubWVzc2FnZS5zdGF0aWNBY2NvdW50S2V5cy5tYXAoKGtleSkgPT4ga2V5LnRvU3RyaW5nKCkpLFxuICAgICAgICBtZXNzYWdlSGVhZGVyOiB7XG4gICAgICAgICAgbnVtUmVxdWlyZWRTaWduYXR1cmVzOiB2ZXJzaW9uZWRUeC5tZXNzYWdlLmhlYWRlci5udW1SZXF1aXJlZFNpZ25hdHVyZXMsXG4gICAgICAgICAgbnVtUmVhZG9ubHlTaWduZWRBY2NvdW50czogdmVyc2lvbmVkVHgubWVzc2FnZS5oZWFkZXIubnVtUmVhZG9ubHlTaWduZWRBY2NvdW50cyxcbiAgICAgICAgICBudW1SZWFkb25seVVuc2lnbmVkQWNjb3VudHM6IHZlcnNpb25lZFR4Lm1lc3NhZ2UuaGVhZGVyLm51bVJlYWRvbmx5VW5zaWduZWRBY2NvdW50cyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaXQoJ3Nob3VsZCBwcm9jZXNzIFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSBhbmQgZXh0cmFjdCBpbnN0cnVjdGlvbnMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjdXN0b21JbnN0cnVjdGlvbkJ1aWxkZXIoKTtcbiAgICAgIGNvbnN0IHZlcnNpb25lZFR4RGF0YSA9IGV4dHJhY3RWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEodGVzdERhdGEuSlVQSVRFUl9WRVJTSU9ORURfVFhfQllURVMpO1xuXG4gICAgICAvLyBTaG91bGQgcGFyc2Ugd2l0aG91dCB0aHJvd2luZyBlcnJvcnNcbiAgICAgIHNob3VsZCgoKSA9PiB0eEJ1aWxkZXIuZnJvbVZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSh2ZXJzaW9uZWRUeERhdGEpKS5ub3QudGhyb3dFcnJvcigpO1xuXG4gICAgICAvLyBTaG91bGQgaGF2ZSBleHRyYWN0ZWQgaW5zdHJ1Y3Rpb25zXG4gICAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSB0eEJ1aWxkZXIuZ2V0SW5zdHJ1Y3Rpb25zKCk7XG4gICAgICBpbnN0cnVjdGlvbnMubGVuZ3RoLnNob3VsZC5iZS5ncmVhdGVyVGhhbigwKTtcblxuICAgICAgZm9yIChjb25zdCBpbnN0cnVjdGlvbiBvZiBpbnN0cnVjdGlvbnMpIHtcbiAgICAgICAgaW5zdHJ1Y3Rpb24udHlwZS5zaG91bGQuZXF1YWwoJ1ZlcnNpb25lZEN1c3RvbUluc3RydWN0aW9uJyk7XG4gICAgICAgIGluc3RydWN0aW9uLnBhcmFtcy5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncHJvZ3JhbUlkSW5kZXgnKTtcbiAgICAgICAgaW5zdHJ1Y3Rpb24ucGFyYW1zLnNob3VsZC5oYXZlLnByb3BlcnR5KCdhY2NvdW50S2V5SW5kZXhlcycpO1xuICAgICAgICBpbnN0cnVjdGlvbi5wYXJhbXMuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2RhdGEnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3RvcmUgVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhIGluIHVuZGVybHlpbmcgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjdXN0b21JbnN0cnVjdGlvbkJ1aWxkZXIoKTtcbiAgICAgIGNvbnN0IHZlcnNpb25lZFR4RGF0YSA9IGV4dHJhY3RWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEodGVzdERhdGEuSlVQSVRFUl9WRVJTSU9ORURfVFhfQllURVMpO1xuXG4gICAgICB0eEJ1aWxkZXIuZnJvbVZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSh2ZXJzaW9uZWRUeERhdGEpO1xuXG4gICAgICBjb25zdCB0eCA9IHR4QnVpbGRlclsnX3RyYW5zYWN0aW9uJ107XG4gICAgICBjb25zdCBzdG9yZWREYXRhID0gdHguZ2V0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhKCk7XG4gICAgICBzaG91bGQuZXhpc3Qoc3RvcmVkRGF0YSk7XG4gICAgICBzdG9yZWREYXRhIS52ZXJzaW9uZWRJbnN0cnVjdGlvbnMubGVuZ3RoLnNob3VsZC5lcXVhbCh2ZXJzaW9uZWRUeERhdGEudmVyc2lvbmVkSW5zdHJ1Y3Rpb25zLmxlbmd0aCk7XG4gICAgICBzdG9yZWREYXRhIS5hZGRyZXNzTG9va3VwVGFibGVzLmxlbmd0aC5zaG91bGQuZXF1YWwodmVyc2lvbmVkVHhEYXRhLmFkZHJlc3NMb29rdXBUYWJsZXMubGVuZ3RoKTtcbiAgICAgIHN0b3JlZERhdGEhLnN0YXRpY0FjY291bnRLZXlzLmxlbmd0aC5zaG91bGQuZXF1YWwodmVyc2lvbmVkVHhEYXRhLnN0YXRpY0FjY291bnRLZXlzLmxlbmd0aCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGlucHV0IGRhdGEnLCAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjdXN0b21JbnN0cnVjdGlvbkJ1aWxkZXIoKTtcblxuICAgICAgLy8gSW52YWxpZDogbnVsbC91bmRlZmluZWRcbiAgICAgIHNob3VsZCgoKSA9PiB0eEJ1aWxkZXIuZnJvbVZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YShudWxsIGFzIGFueSkpLnRocm93RXJyb3IoL211c3QgYmUgYSB2YWxpZCBvYmplY3QvKTtcbiAgICAgIHNob3VsZCgoKSA9PiB0eEJ1aWxkZXIuZnJvbVZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSh1bmRlZmluZWQgYXMgYW55KSkudGhyb3dFcnJvcigvbXVzdCBiZSBhIHZhbGlkIG9iamVjdC8pO1xuXG4gICAgICAvLyBJbnZhbGlkOiBlbXB0eSBpbnN0cnVjdGlvbnNcbiAgICAgIHNob3VsZCgoKSA9PlxuICAgICAgICB0eEJ1aWxkZXIuZnJvbVZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSh7XG4gICAgICAgICAgdmVyc2lvbmVkSW5zdHJ1Y3Rpb25zOiBbXSxcbiAgICAgICAgICBhZGRyZXNzTG9va3VwVGFibGVzOiBbXSxcbiAgICAgICAgICBzdGF0aWNBY2NvdW50S2V5czogWyd0ZXN0J10sXG4gICAgICAgICAgbWVzc2FnZUhlYWRlcjogeyBudW1SZXF1aXJlZFNpZ25hdHVyZXM6IDEsIG51bVJlYWRvbmx5U2lnbmVkQWNjb3VudHM6IDAsIG51bVJlYWRvbmx5VW5zaWduZWRBY2NvdW50czogMCB9LFxuICAgICAgICB9KVxuICAgICAgKS50aHJvd0Vycm9yKC9ub24tZW1wdHkgYXJyYXkvKTtcblxuICAgICAgLy8gSW52YWxpZDogbWlzc2luZyBhZGRyZXNzTG9va3VwVGFibGVzXG4gICAgICBzaG91bGQoKCkgPT5cbiAgICAgICAgdHhCdWlsZGVyLmZyb21WZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEoe1xuICAgICAgICAgIHZlcnNpb25lZEluc3RydWN0aW9uczogW3sgcHJvZ3JhbUlkSW5kZXg6IDAsIGFjY291bnRLZXlJbmRleGVzOiBbMF0sIGRhdGE6ICcxJyB9XSwgLy8gYmFzZTU4IGZvciAweDAwXG4gICAgICAgICAgc3RhdGljQWNjb3VudEtleXM6IFsndGVzdCddLFxuICAgICAgICB9IGFzIGFueSlcbiAgICAgICkudGhyb3dFcnJvcigvbXVzdCBiZSBhbiBhcnJheS8pO1xuXG4gICAgICAvLyBJbnZhbGlkOiBlbXB0eSBzdGF0aWNBY2NvdW50S2V5c1xuICAgICAgc2hvdWxkKCgpID0+XG4gICAgICAgIHR4QnVpbGRlci5mcm9tVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhKHtcbiAgICAgICAgICB2ZXJzaW9uZWRJbnN0cnVjdGlvbnM6IFt7IHByb2dyYW1JZEluZGV4OiAwLCBhY2NvdW50S2V5SW5kZXhlczogWzBdLCBkYXRhOiAnMScgfV0sIC8vIGJhc2U1OCBmb3IgMHgwMFxuICAgICAgICAgIGFkZHJlc3NMb29rdXBUYWJsZXM6IFtdLFxuICAgICAgICAgIHN0YXRpY0FjY291bnRLZXlzOiBbXSxcbiAgICAgICAgICBtZXNzYWdlSGVhZGVyOiB7IG51bVJlcXVpcmVkU2lnbmF0dXJlczogMSwgbnVtUmVhZG9ubHlTaWduZWRBY2NvdW50czogMCwgbnVtUmVhZG9ubHlVbnNpZ25lZEFjY291bnRzOiAwIH0sXG4gICAgICAgIH0pXG4gICAgICApLnRocm93RXJyb3IoL25vbi1lbXB0eSBhcnJheS8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB3b3JrIHdpdGggdGhlIGNvbXBsZXRlIHRyYW5zYWN0aW9uIGJ1aWxkaW5nIGZsb3cnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjdXN0b21JbnN0cnVjdGlvbkJ1aWxkZXIoKTtcbiAgICAgIGNvbnN0IHZlcnNpb25lZFR4RGF0YSA9IGV4dHJhY3RWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEodGVzdERhdGEuSlVQSVRFUl9WRVJTSU9ORURfVFhfQllURVMpO1xuXG4gICAgICAvLyBQcm9jZXNzIHRoZSBWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGFcbiAgICAgIHR4QnVpbGRlci5mcm9tVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhKHZlcnNpb25lZFR4RGF0YSk7XG5cbiAgICAgIHR4QnVpbGRlci5zZW5kZXIodmVyc2lvbmVkVHhEYXRhLnN0YXRpY0FjY291bnRLZXlzWzBdKTsgLy8gRmVlIHBheWVyXG4gICAgICB0eEJ1aWxkZXIubm9uY2UodGVzdERhdGEuYmxvY2tIYXNoZXMudmFsaWRCbG9ja0hhc2hlc1swXSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIC8vIFZlcmlmeSB0cmFuc2FjdGlvbiBwcm9wZXJ0aWVzXG4gICAgICB0eC5zaG91bGQuYmUub2soKTtcbiAgICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKDMxKTsgLy8gVHJhbnNhY3Rpb25UeXBlLkN1c3RvbVR4IGVudW0gdmFsdWVcblxuICAgICAgLy8gVmVyaWZ5IHNpZ25hYmxlIHBheWxvYWRcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB0eC5zaWduYWJsZVBheWxvYWQ7XG4gICAgICBwYXlsb2FkLnNob3VsZC5iZS5pbnN0YW5jZU9mKEJ1ZmZlcik7XG4gICAgICBwYXlsb2FkLmxlbmd0aC5zaG91bGQuYmUuZ3JlYXRlclRoYW4oMCk7XG5cbiAgICAgIC8vIFZlcmlmeSBwYXlsb2FkIGlzIGRldGVybWluaXN0aWMgLSByZWJ1aWxkaW5nIHdpdGggc2FtZSBwYXJhbXMgcHJvZHVjZXMgc2FtZSBwYXlsb2FkXG4gICAgICBjb25zdCB0eEJ1aWxkZXIyID0gY3VzdG9tSW5zdHJ1Y3Rpb25CdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIyLmZyb21WZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEodmVyc2lvbmVkVHhEYXRhKTtcbiAgICAgIHR4QnVpbGRlcjIuc2VuZGVyKHZlcnNpb25lZFR4RGF0YS5zdGF0aWNBY2NvdW50S2V5c1swXSk7XG4gICAgICB0eEJ1aWxkZXIyLm5vbmNlKHRlc3REYXRhLmJsb2NrSGFzaGVzLnZhbGlkQmxvY2tIYXNoZXNbMF0pO1xuICAgICAgY29uc3QgdHgyID0gYXdhaXQgdHhCdWlsZGVyMi5idWlsZCgpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4Mi5zaWduYWJsZVBheWxvYWQudG9TdHJpbmcoJ2hleCcpLCBwYXlsb2FkLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4dHJhY3QgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGluc3RydWN0aW9ucyBmcm9tIEp1cGl0ZXIgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjdXN0b21JbnN0cnVjdGlvbkJ1aWxkZXIoKTtcbiAgICAgIGNvbnN0IHZlcnNpb25lZFR4RGF0YSA9IGV4dHJhY3RWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEodGVzdERhdGEuSlVQSVRFUl9WRVJTSU9ORURfVFhfQllURVMpO1xuXG4gICAgICB0eEJ1aWxkZXIuZnJvbVZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSh2ZXJzaW9uZWRUeERhdGEpO1xuXG4gICAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSB0eEJ1aWxkZXIuZ2V0SW5zdHJ1Y3Rpb25zKCk7XG5cbiAgICAgIC8vIFZlcmlmeSB3ZSBleHRyYWN0ZWQgaW5zdHJ1Y3Rpb25zXG4gICAgICBpbnN0cnVjdGlvbnMubGVuZ3RoLnNob3VsZC5iZS5ncmVhdGVyVGhhbigwKTtcbiAgICAgIGluc3RydWN0aW9ucy5sZW5ndGguc2hvdWxkLmVxdWFsKHZlcnNpb25lZFR4RGF0YS52ZXJzaW9uZWRJbnN0cnVjdGlvbnMubGVuZ3RoKTtcblxuICAgICAgLy8gVmVyaWZ5IGVhY2ggaW5zdHJ1Y3Rpb24gaGFzIHZhbGlkIGNvbXBpbGVkIGZvcm1hdFxuICAgICAgZm9yIChjb25zdCBpbnN0cnVjdGlvbiBvZiBpbnN0cnVjdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gaW5zdHJ1Y3Rpb24ucGFyYW1zIGFzIFNvbFZlcnNpb25lZEluc3RydWN0aW9uO1xuICAgICAgICAodHlwZW9mIHBhcmFtcy5wcm9ncmFtSWRJbmRleCkuc2hvdWxkLmVxdWFsKCdudW1iZXInKTtcbiAgICAgICAgcGFyYW1zLnByb2dyYW1JZEluZGV4LnNob3VsZC5iZS5ncmVhdGVyVGhhbk9yRXF1YWwoMCk7XG4gICAgICAgIEFycmF5LmlzQXJyYXkocGFyYW1zLmFjY291bnRLZXlJbmRleGVzKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICAgICh0eXBlb2YgcGFyYW1zLmRhdGEpLnNob3VsZC5lcXVhbCgnc3RyaW5nJyk7XG4gICAgICAgIC8vIERhdGEgc2hvdWxkIGJlIHZhbGlkIGJhc2U1OCBzdHJpbmcgKG5vbi1lbXB0eSlcbiAgICAgICAgcGFyYW1zLmRhdGEubGVuZ3RoLnNob3VsZC5iZS5ncmVhdGVyVGhhbigwKTtcbiAgICAgICAgLy8gVmVyaWZ5IGl0IGNhbiBiZSBkZWNvZGVkXG4gICAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gYmFzZTU4LmRlY29kZShwYXJhbXMuZGF0YSkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjbGVhciBpbnN0cnVjdGlvbnMgcHJvcGVybHkgYWZ0ZXIgdXNpbmcgZnJvbVZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YScsICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGN1c3RvbUluc3RydWN0aW9uQnVpbGRlcigpO1xuICAgICAgY29uc3QgdmVyc2lvbmVkVHhEYXRhID0gZXh0cmFjdFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSh0ZXN0RGF0YS5KVVBJVEVSX1ZFUlNJT05FRF9UWF9CWVRFUyk7XG5cbiAgICAgIHR4QnVpbGRlci5mcm9tVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhKHZlcnNpb25lZFR4RGF0YSk7XG4gICAgICB0eEJ1aWxkZXIuZ2V0SW5zdHJ1Y3Rpb25zKCkubGVuZ3RoLnNob3VsZC5iZS5ncmVhdGVyVGhhbigwKTtcblxuICAgICAgLy8gQ2xlYXIgc2hvdWxkIHdvcmtcbiAgICAgIHR4QnVpbGRlci5jbGVhckluc3RydWN0aW9ucygpO1xuICAgICAgdHhCdWlsZGVyLmdldEluc3RydWN0aW9ucygpLnNob3VsZC5oYXZlLmxlbmd0aCgwKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXh0cmFjdCBmZWUgcGF5ZXIgZnJvbSBzdGF0aWNBY2NvdW50S2V5cycsICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0Q3VzdG9tSW5zdHJ1Y3Rpb25CdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoKTtcblxuICAgICAgY29uc3QgdmVyc2lvbmVkVHhEYXRhID0gZXh0cmFjdFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSh0ZXN0RGF0YS5KVVBJVEVSX1ZFUlNJT05FRF9UWF9CWVRFUyk7XG5cbiAgICAgIHR4QnVpbGRlci5mcm9tVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhKHZlcnNpb25lZFR4RGF0YSk7XG5cbiAgICAgIGNvbnN0IHNlbmRlciA9IHR4QnVpbGRlclsnX3NlbmRlciddO1xuICAgICAgc2hvdWxkLmV4aXN0KHNlbmRlcik7XG4gICAgICBzZW5kZXIuc2hvdWxkLmVxdWFsKHZlcnNpb25lZFR4RGF0YS5zdGF0aWNBY2NvdW50S2V5c1swXSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBvdmVycmlkZSBleGlzdGluZyBzZW5kZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjdXN0b21JbnN0cnVjdGlvbkJ1aWxkZXIoKTtcbiAgICAgIGNvbnN0IHZlcnNpb25lZFR4RGF0YSA9IGV4dHJhY3RWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEodGVzdERhdGEuSlVQSVRFUl9WRVJTSU9ORURfVFhfQllURVMpO1xuXG4gICAgICBjb25zdCBvcmlnaW5hbFNlbmRlciA9IHR4QnVpbGRlclsnX3NlbmRlciddO1xuICAgICAgdHhCdWlsZGVyLmZyb21WZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEodmVyc2lvbmVkVHhEYXRhKTtcblxuICAgICAgY29uc3Qgc2VuZGVyID0gdHhCdWlsZGVyWydfc2VuZGVyJ107XG4gICAgICBzZW5kZXIuc2hvdWxkLmVxdWFsKG9yaWdpbmFsU2VuZGVyKTtcbiAgICAgIHNlbmRlci5zaG91bGQuZXF1YWwoYXV0aEFjY291bnQucHViKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=stakingActivateBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stakingActivateBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/stakingActivateBuilder.ts"],"names":[],"mappings":""}