@bitgo-beta/sdk-coin-flrp 1.0.1-beta.66 → 1.0.1-beta.68

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 (113) hide show
  1. package/dist/tsconfig.tsbuildinfo +1 -1
  2. package/package.json +6 -6
  3. package/dist/src/flrp.d.ts +0 -91
  4. package/dist/src/flrp.d.ts.map +0 -1
  5. package/dist/src/flrp.js +0 -343
  6. package/dist/src/iface.d.ts +0 -25
  7. package/dist/src/iface.d.ts.map +0 -1
  8. package/dist/src/iface.js +0 -3
  9. package/dist/src/index.d.ts +0 -6
  10. package/dist/src/index.d.ts.map +0 -1
  11. package/dist/src/index.js +0 -45
  12. package/dist/src/lib/atomicInCTransactionBuilder.d.ts +0 -26
  13. package/dist/src/lib/atomicInCTransactionBuilder.d.ts.map +0 -1
  14. package/dist/src/lib/atomicInCTransactionBuilder.js +0 -64
  15. package/dist/src/lib/atomicTransactionBuilder.d.ts +0 -96
  16. package/dist/src/lib/atomicTransactionBuilder.d.ts.map +0 -1
  17. package/dist/src/lib/atomicTransactionBuilder.js +0 -318
  18. package/dist/src/lib/constants.d.ts +0 -170
  19. package/dist/src/lib/constants.d.ts.map +0 -1
  20. package/dist/src/lib/constants.js +0 -227
  21. package/dist/src/lib/delegatorTxBuilder.d.ts +0 -58
  22. package/dist/src/lib/delegatorTxBuilder.d.ts.map +0 -1
  23. package/dist/src/lib/delegatorTxBuilder.js +0 -224
  24. package/dist/src/lib/errors.d.ts +0 -8
  25. package/dist/src/lib/errors.d.ts.map +0 -1
  26. package/dist/src/lib/errors.js +0 -19
  27. package/dist/src/lib/exportInCTxBuilder.d.ts +0 -77
  28. package/dist/src/lib/exportInCTxBuilder.d.ts.map +0 -1
  29. package/dist/src/lib/exportInCTxBuilder.js +0 -199
  30. package/dist/src/lib/exportInPTxBuilder.d.ts +0 -30
  31. package/dist/src/lib/exportInPTxBuilder.d.ts.map +0 -1
  32. package/dist/src/lib/exportInPTxBuilder.js +0 -120
  33. package/dist/src/lib/iface.d.ts +0 -119
  34. package/dist/src/lib/iface.d.ts.map +0 -1
  35. package/dist/src/lib/iface.js +0 -22
  36. package/dist/src/lib/importInCTxBuilder.d.ts +0 -67
  37. package/dist/src/lib/importInCTxBuilder.d.ts.map +0 -1
  38. package/dist/src/lib/importInCTxBuilder.js +0 -403
  39. package/dist/src/lib/importInPTxBuilder.d.ts +0 -73
  40. package/dist/src/lib/importInPTxBuilder.d.ts.map +0 -1
  41. package/dist/src/lib/importInPTxBuilder.js +0 -464
  42. package/dist/src/lib/index.d.ts +0 -12
  43. package/dist/src/lib/index.d.ts.map +0 -1
  44. package/dist/src/lib/index.js +0 -39
  45. package/dist/src/lib/keyPair.d.ts +0 -58
  46. package/dist/src/lib/keyPair.d.ts.map +0 -1
  47. package/dist/src/lib/keyPair.js +0 -142
  48. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts +0 -81
  49. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +0 -1
  50. package/dist/src/lib/permissionlessValidatorTxBuilder.js +0 -248
  51. package/dist/src/lib/transaction.d.ts +0 -111
  52. package/dist/src/lib/transaction.d.ts.map +0 -1
  53. package/dist/src/lib/transaction.js +0 -322
  54. package/dist/src/lib/transactionBuilder.d.ts +0 -85
  55. package/dist/src/lib/transactionBuilder.d.ts.map +0 -1
  56. package/dist/src/lib/transactionBuilder.js +0 -167
  57. package/dist/src/lib/transactionBuilderFactory.d.ts +0 -37
  58. package/dist/src/lib/transactionBuilderFactory.d.ts.map +0 -1
  59. package/dist/src/lib/transactionBuilderFactory.js +0 -91
  60. package/dist/src/lib/types.d.ts +0 -78
  61. package/dist/src/lib/types.d.ts.map +0 -1
  62. package/dist/src/lib/types.js +0 -5
  63. package/dist/src/lib/utils.d.ts +0 -217
  64. package/dist/src/lib/utils.d.ts.map +0 -1
  65. package/dist/src/lib/utils.js +0 -498
  66. package/dist/src/lib/validatorTxBuilder.d.ts +0 -40
  67. package/dist/src/lib/validatorTxBuilder.d.ts.map +0 -1
  68. package/dist/src/lib/validatorTxBuilder.js +0 -180
  69. package/dist/src/register.d.ts +0 -3
  70. package/dist/src/register.d.ts.map +0 -1
  71. package/dist/src/register.js +0 -11
  72. package/dist/src/tflrp.d.ts +0 -8
  73. package/dist/src/tflrp.d.ts.map +0 -1
  74. package/dist/src/tflrp.js +0 -14
  75. package/dist/test/unit/delegatorTxBuilder.test.d.ts +0 -2
  76. package/dist/test/unit/delegatorTxBuilder.test.d.ts.map +0 -1
  77. package/dist/test/unit/delegatorTxBuilder.test.js +0 -233
  78. package/dist/test/unit/flrp.d.ts +0 -2
  79. package/dist/test/unit/flrp.d.ts.map +0 -1
  80. package/dist/test/unit/flrp.js +0 -118
  81. package/dist/test/unit/lib/atomicTransactionBuilder.d.ts +0 -2
  82. package/dist/test/unit/lib/atomicTransactionBuilder.d.ts.map +0 -1
  83. package/dist/test/unit/lib/atomicTransactionBuilder.js +0 -222
  84. package/dist/test/unit/lib/exportInCTxBuilder.d.ts +0 -2
  85. package/dist/test/unit/lib/exportInCTxBuilder.d.ts.map +0 -1
  86. package/dist/test/unit/lib/exportInCTxBuilder.js +0 -584
  87. package/dist/test/unit/lib/exportInPTxBuilder.d.ts +0 -2
  88. package/dist/test/unit/lib/exportInPTxBuilder.d.ts.map +0 -1
  89. package/dist/test/unit/lib/exportInPTxBuilder.js +0 -377
  90. package/dist/test/unit/lib/importInCTxBuilder.d.ts +0 -2
  91. package/dist/test/unit/lib/importInCTxBuilder.d.ts.map +0 -1
  92. package/dist/test/unit/lib/importInCTxBuilder.js +0 -257
  93. package/dist/test/unit/lib/importInPTxBuilder.d.ts +0 -2
  94. package/dist/test/unit/lib/importInPTxBuilder.d.ts.map +0 -1
  95. package/dist/test/unit/lib/importInPTxBuilder.js +0 -500
  96. package/dist/test/unit/lib/transaction.d.ts +0 -2
  97. package/dist/test/unit/lib/transaction.d.ts.map +0 -1
  98. package/dist/test/unit/lib/transaction.js +0 -460
  99. package/dist/test/unit/lib/utils.d.ts +0 -2
  100. package/dist/test/unit/lib/utils.d.ts.map +0 -1
  101. package/dist/test/unit/lib/utils.js +0 -286
  102. package/dist/test/unit/permissionlessValidatorTxBuilder.test.d.ts +0 -2
  103. package/dist/test/unit/permissionlessValidatorTxBuilder.test.d.ts.map +0 -1
  104. package/dist/test/unit/permissionlessValidatorTxBuilder.test.js +0 -271
  105. package/dist/test/unit/smoke.d.ts +0 -2
  106. package/dist/test/unit/smoke.d.ts.map +0 -1
  107. package/dist/test/unit/smoke.js +0 -23
  108. package/dist/test/unit/transactionBuilder.test.d.ts +0 -2
  109. package/dist/test/unit/transactionBuilder.test.d.ts.map +0 -1
  110. package/dist/test/unit/transactionBuilder.test.js +0 -114
  111. package/dist/test/unit/validatorTxBuilder.test.d.ts +0 -2
  112. package/dist/test/unit/validatorTxBuilder.test.d.ts.map +0 -1
  113. package/dist/test/unit/validatorTxBuilder.test.js +0 -293
@@ -1,500 +0,0 @@
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 statics_1 = require("@bitgo-beta/statics");
40
- const sdk_core_1 = require("@bitgo-beta/sdk-core");
41
- const assert = __importStar(require("assert"));
42
- const bignumber_js_1 = __importDefault(require("bignumber.js"));
43
- const importInPTxBuilder_1 = require("../../../src/lib/importInPTxBuilder");
44
- describe('ImportInPTxBuilder', function () {
45
- const coinConfig = statics_1.coins.get('tflrp');
46
- let builder;
47
- beforeEach(function () {
48
- builder = new importInPTxBuilder_1.ImportInPTxBuilder(coinConfig);
49
- });
50
- describe('Constructor', function () {
51
- it('should initialize with coin config', function () {
52
- assert.ok(builder);
53
- assert.ok(builder instanceof importInPTxBuilder_1.ImportInPTxBuilder);
54
- });
55
- it('should initialize with default values', function () {
56
- // Builder should be initialized without throwing errors
57
- assert.ok(builder);
58
- });
59
- });
60
- describe('UTXO Management', function () {
61
- it('should add single UTXO', function () {
62
- const utxo = {
63
- outputID: 1,
64
- amount: '1000000000000000000', // 1 FLR
65
- txid: 'test-txid-single',
66
- outputidx: '0',
67
- threshold: 1,
68
- addresses: ['C-flare1test'],
69
- };
70
- assert.doesNotThrow(() => {
71
- builder.addUtxos([utxo]);
72
- });
73
- });
74
- it('should add multiple UTXOs', function () {
75
- const utxos = [
76
- {
77
- outputID: 1,
78
- amount: '1000000000000000000', // 1 FLR
79
- txid: 'test-txid-1',
80
- outputidx: '0',
81
- threshold: 1,
82
- addresses: ['C-flare1test1'],
83
- },
84
- {
85
- outputID: 2,
86
- amount: '2000000000000000000', // 2 FLR
87
- txid: 'test-txid-2',
88
- outputidx: '1',
89
- threshold: 2,
90
- addresses: ['C-flare1test2', 'C-flare1test3'],
91
- },
92
- {
93
- outputID: 3,
94
- amount: '500000000000000000', // 0.5 FLR
95
- txid: 'test-txid-3',
96
- outputidx: '0',
97
- threshold: 1,
98
- addresses: ['C-flare1test4'],
99
- },
100
- ];
101
- assert.doesNotThrow(() => {
102
- builder.addUtxos(utxos);
103
- });
104
- });
105
- it('should handle empty UTXO array', function () {
106
- assert.doesNotThrow(() => {
107
- builder.addUtxos([]);
108
- });
109
- });
110
- it('should accumulate UTXOs from multiple calls', function () {
111
- const utxos1 = [
112
- {
113
- outputID: 1,
114
- amount: '1000000000000000000',
115
- txid: 'test-txid-1',
116
- outputidx: '0',
117
- threshold: 1,
118
- addresses: ['C-flare1test1'],
119
- },
120
- ];
121
- const utxos2 = [
122
- {
123
- outputID: 2,
124
- amount: '2000000000000000000',
125
- txid: 'test-txid-2',
126
- outputidx: '0',
127
- threshold: 1,
128
- addresses: ['C-flare1test2'],
129
- },
130
- ];
131
- builder.addUtxos(utxos1);
132
- builder.addUtxos(utxos2);
133
- // Should not throw
134
- assert.ok(true);
135
- });
136
- });
137
- describe('Fee Management', function () {
138
- it('should set valid positive fee', function () {
139
- const validFees = ['1000', '0', '1000000000000000000', '999999999999999999'];
140
- validFees.forEach((fee) => {
141
- assert.doesNotThrow(() => {
142
- builder.fee(fee);
143
- }, `Should accept fee: ${fee}`);
144
- });
145
- });
146
- it('should reject negative fees', function () {
147
- const negativeFees = ['-1', '-1000', '-1000000000000000000'];
148
- negativeFees.forEach((fee) => {
149
- assert.throws(() => {
150
- builder.fee(fee);
151
- }, sdk_core_1.BuildTransactionError, `Should reject negative fee: ${fee}`);
152
- });
153
- });
154
- it('should handle invalid fee formats (BigNumber behavior)', function () {
155
- const invalidFees = ['abc', 'not-a-number', '1.5.5', 'infinity'];
156
- invalidFees.forEach((fee) => {
157
- // BigNumber doesn't throw for invalid strings, it creates NaN values
158
- // But our implementation should still accept them (no additional validation)
159
- assert.doesNotThrow(() => {
160
- builder.fee(fee);
161
- }, `BigNumber accepts invalid strings: ${fee}`);
162
- });
163
- });
164
- it('should handle BigNumber fee inputs', function () {
165
- const bigNumberFee = new bignumber_js_1.default('1000000000000000000');
166
- assert.doesNotThrow(() => {
167
- builder.fee(bigNumberFee.toString());
168
- });
169
- });
170
- it('should chain fee setting with other methods', function () {
171
- const fee = '1000';
172
- const utxo = {
173
- outputID: 1,
174
- amount: '1000000000000000000',
175
- txid: 'test-txid',
176
- outputidx: '0',
177
- threshold: 1,
178
- addresses: ['C-flare1test'],
179
- };
180
- assert.doesNotThrow(() => {
181
- builder.fee(fee).addUtxos([utxo]);
182
- });
183
- });
184
- });
185
- describe('Locktime Management', function () {
186
- it('should set valid locktime values', function () {
187
- const validLocktimes = [0, 1, 1000, 4294967295]; // Max uint32
188
- validLocktimes.forEach((locktime) => {
189
- assert.doesNotThrow(() => {
190
- builder.locktime(locktime);
191
- }, `Should accept locktime: ${locktime}`);
192
- });
193
- });
194
- it('should handle negative locktime (no validation)', function () {
195
- const negativeLocktimes = [-1, -1000];
196
- negativeLocktimes.forEach((locktime) => {
197
- assert.doesNotThrow(() => {
198
- builder.locktime(locktime);
199
- }, `Should accept negative locktime: ${locktime} (no validation in implementation)`);
200
- });
201
- });
202
- it('should handle boundary values', function () {
203
- const boundaryValues = [0, 4294967295]; // Min and max uint32
204
- boundaryValues.forEach((locktime) => {
205
- assert.doesNotThrow(() => {
206
- builder.locktime(locktime);
207
- });
208
- });
209
- });
210
- it('should chain locktime setting with other methods', function () {
211
- const locktime = 123456;
212
- const fee = '1000';
213
- assert.doesNotThrow(() => {
214
- builder.locktime(locktime).fee(fee);
215
- });
216
- });
217
- });
218
- describe('Threshold Management', function () {
219
- it('should set valid threshold values', function () {
220
- const validThresholds = [1, 2, 5, 10];
221
- validThresholds.forEach((threshold) => {
222
- assert.doesNotThrow(() => {
223
- builder.threshold(threshold);
224
- }, `Should accept threshold: ${threshold}`);
225
- });
226
- });
227
- it('should reject invalid threshold values', function () {
228
- const invalidThresholds = [0, -1, -10];
229
- invalidThresholds.forEach((threshold) => {
230
- assert.throws(() => {
231
- builder.threshold(threshold);
232
- }, sdk_core_1.BuildTransactionError, `Should reject threshold: ${threshold}`);
233
- });
234
- });
235
- it('should handle typical threshold scenarios', function () {
236
- // Single signature
237
- assert.doesNotThrow(() => {
238
- builder.threshold(1);
239
- });
240
- // Multi-signature
241
- assert.doesNotThrow(() => {
242
- builder.threshold(3);
243
- });
244
- });
245
- it('should chain threshold setting with other methods', function () {
246
- const threshold = 2;
247
- const locktime = 123456;
248
- assert.doesNotThrow(() => {
249
- builder.threshold(threshold).locktime(locktime);
250
- });
251
- });
252
- });
253
- describe('Source Chain Management', function () {
254
- it('should set valid source chain IDs', function () {
255
- const validChainIds = ['C-flare12345', 'NodeID-flare67890', '0x123456789abcdef', 'abc123def456'];
256
- validChainIds.forEach((chainId) => {
257
- assert.doesNotThrow(() => {
258
- builder.sourceChain(chainId);
259
- }, `Should accept chain ID: ${chainId}`);
260
- });
261
- });
262
- it('should handle different chain ID formats', function () {
263
- const chainIds = ['C-chain-id-123', 'P-chain-id-456', 'hex-formatted-id', '1234567890abcdef'];
264
- chainIds.forEach((chainId) => {
265
- assert.doesNotThrow(() => {
266
- builder.sourceChain(chainId);
267
- });
268
- });
269
- });
270
- });
271
- describe('Input/Output Creation', function () {
272
- it('should test public methods only due to protected access', function () {
273
- // Note: createInputOutput is protected, so we test through public interface
274
- // Test that we can set parameters that would be used by createInputOutput
275
- assert.doesNotThrow(() => {
276
- builder.fee('1000');
277
- builder.threshold(1);
278
- // Protected method cannot be tested directly
279
- });
280
- });
281
- it('should handle configuration for output creation', function () {
282
- const fee = '1000';
283
- const locktime = 0;
284
- const threshold = 1;
285
- assert.doesNotThrow(() => {
286
- builder.fee(fee).locktime(locktime).threshold(threshold);
287
- });
288
- });
289
- it('should allow setting parameters for large amounts', function () {
290
- const locktime = 0;
291
- const threshold = 1;
292
- assert.doesNotThrow(() => {
293
- builder.fee('1000').locktime(locktime).threshold(threshold);
294
- });
295
- });
296
- it('should configure for different threshold scenarios', function () {
297
- const locktime = 0;
298
- // Test different thresholds
299
- [1, 2, 3].forEach((threshold) => {
300
- assert.doesNotThrow(() => {
301
- builder.threshold(threshold).locktime(locktime);
302
- });
303
- });
304
- });
305
- });
306
- describe('Transaction Type Verification', function () {
307
- it('should verify transaction type (placeholder)', function () {
308
- const mockTx = { type: 'import' };
309
- const result = importInPTxBuilder_1.ImportInPTxBuilder.verifyTxType(mockTx);
310
- assert.strictEqual(result, true); // Placeholder returns true
311
- });
312
- it('should handle different transaction objects', function () {
313
- const testCases = [{}, null, undefined, { type: 'export' }, { data: 'test' }];
314
- testCases.forEach((testCase, index) => {
315
- const result = importInPTxBuilder_1.ImportInPTxBuilder.verifyTxType(testCase);
316
- assert.strictEqual(result, true, `Test case ${index} should return true (placeholder)`);
317
- });
318
- });
319
- it('should verify via instance method', function () {
320
- const mockTx = { type: 'import' };
321
- const result = builder.verifyTxType(mockTx);
322
- assert.strictEqual(result, true);
323
- });
324
- });
325
- describe('Transaction Building Preparation', function () {
326
- it('should prepare basic import transaction parameters', function () {
327
- const fee = '1000';
328
- const locktime = 123456;
329
- const threshold = 2;
330
- const chainId = 'C-source-chain-123';
331
- const utxos = [
332
- {
333
- outputID: 1,
334
- amount: '1000000000000000000',
335
- txid: 'test-txid',
336
- outputidx: '0',
337
- threshold: 1,
338
- addresses: ['C-flare1test'],
339
- },
340
- ];
341
- // Set all parameters
342
- builder.fee(fee).locktime(locktime).threshold(threshold).sourceChain(chainId).addUtxos(utxos);
343
- // Should not throw
344
- assert.ok(true);
345
- });
346
- it('should handle minimal configuration', function () {
347
- const fee = '0';
348
- const utxos = [
349
- {
350
- outputID: 1,
351
- amount: '1000000000000000000',
352
- txid: 'test-txid',
353
- outputidx: '0',
354
- threshold: 1,
355
- addresses: ['C-flare1test'],
356
- },
357
- ];
358
- builder.fee(fee).addUtxos(utxos);
359
- // Should not throw
360
- assert.ok(true);
361
- });
362
- });
363
- describe('Complex Scenarios', function () {
364
- it('should handle multiple UTXOs with different properties', function () {
365
- const utxos = [
366
- {
367
- outputID: 1,
368
- amount: '1000000000000000000',
369
- txid: 'test-txid-1',
370
- outputidx: '0',
371
- threshold: 1,
372
- addresses: ['C-flare1single'],
373
- },
374
- {
375
- outputID: 2,
376
- amount: '2000000000000000000',
377
- txid: 'test-txid-2',
378
- outputidx: '1',
379
- threshold: 2,
380
- addresses: ['C-flare1multi1', 'C-flare1multi2'],
381
- },
382
- {
383
- outputID: 3,
384
- amount: '3000000000000000000',
385
- txid: 'test-txid-3',
386
- outputidx: '0',
387
- threshold: 3,
388
- addresses: ['C-flare1multi1', 'C-flare1multi2', 'C-flare1multi3'],
389
- },
390
- ];
391
- builder.addUtxos(utxos);
392
- builder.fee('5000'); // Higher fee for complex transaction
393
- builder.threshold(2);
394
- // Should handle complex UTXO set
395
- assert.ok(true);
396
- });
397
- it('should handle large transaction parameters', function () {
398
- const fee = '1000000000000000000'; // 1 FLR fee
399
- const locktime = 4294967295; // Max uint32
400
- const threshold = 10; // High threshold
401
- const chainId = 'very-long-chain-id-with-lots-of-characters-0x123456789abcdef0123456789abcdef';
402
- builder.fee(fee).locktime(locktime).threshold(threshold).sourceChain(chainId);
403
- // Should handle large values
404
- assert.ok(true);
405
- });
406
- it('should handle rapid parameter changes', function () {
407
- // Simulate rapid parameter updates
408
- builder.fee('1000').fee('2000').fee('3000');
409
- builder.locktime(100).locktime(200).locktime(300);
410
- builder.threshold(1).threshold(2).threshold(3);
411
- // Should handle rapid changes without issues
412
- assert.ok(true);
413
- });
414
- });
415
- describe('Edge Cases', function () {
416
- it('should handle zero values where appropriate', function () {
417
- builder.fee('0');
418
- builder.locktime(0);
419
- // threshold of 0 should be invalid
420
- assert.throws(() => {
421
- builder.threshold(0);
422
- }, sdk_core_1.BuildTransactionError);
423
- });
424
- it('should handle maximum values', function () {
425
- const maxFee = '115792089237316195423570985008687907853269984665640564039457584007913129639935'; // Max uint256
426
- const maxLocktime = 4294967295; // Max uint32
427
- assert.doesNotThrow(() => {
428
- builder.fee(maxFee);
429
- });
430
- assert.doesNotThrow(() => {
431
- builder.locktime(maxLocktime);
432
- });
433
- });
434
- it('should maintain state across multiple operations', function () {
435
- const utxo1 = {
436
- outputID: 1,
437
- amount: '1000000000000000000',
438
- txid: 'test-txid-1',
439
- outputidx: '0',
440
- threshold: 1,
441
- addresses: ['C-flare1test1'],
442
- };
443
- const utxo2 = {
444
- outputID: 2,
445
- amount: '2000000000000000000',
446
- txid: 'test-txid-2',
447
- outputidx: '0',
448
- threshold: 1,
449
- addresses: ['C-flare1test2'],
450
- };
451
- // Build state incrementally
452
- builder.fee('1000');
453
- builder.addUtxos([utxo1]);
454
- builder.locktime(123456);
455
- builder.addUtxos([utxo2]);
456
- builder.threshold(2);
457
- // State should be maintained across operations
458
- assert.ok(true);
459
- });
460
- });
461
- describe('Integration Tests', function () {
462
- it('should handle complete P-chain import flow preparation', function () {
463
- const fee = '2000';
464
- const locktime = 654321;
465
- const threshold = 1;
466
- const chainId = 'C-source-chain-456';
467
- const utxos = [
468
- {
469
- outputID: 1,
470
- amount: '6000000000000000000', // 6 FLR (more than output for fees)
471
- txid: 'integration-test-txid',
472
- outputidx: '0',
473
- threshold: 1,
474
- addresses: ['C-flare1source'],
475
- },
476
- ];
477
- // Complete setup
478
- builder.fee(fee).locktime(locktime).threshold(threshold).sourceChain(chainId).addUtxos(utxos);
479
- // All operations should complete without throwing
480
- assert.ok(true);
481
- });
482
- it('should handle method chaining extensively', function () {
483
- const utxos = [
484
- {
485
- outputID: 1,
486
- amount: '10000000000000000000', // 10 FLR
487
- txid: 'chain-test-txid',
488
- outputidx: '0',
489
- threshold: 1,
490
- addresses: ['C-flare1test'],
491
- },
492
- ];
493
- // Test extensive method chaining
494
- assert.doesNotThrow(() => {
495
- builder.fee('1000').locktime(100000).threshold(1).sourceChain('C-chain-123').addUtxos(utxos);
496
- });
497
- });
498
- });
499
- });
500
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0SW5QVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2xpYi9pbXBvcnRJblBUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBNEM7QUFDNUMsbURBQTZEO0FBQzdELCtDQUFpQztBQUNqQyxnRUFBcUM7QUFDckMsNEVBQXlFO0FBR3pFLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtJQUM3QixNQUFNLFVBQVUsR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLElBQUksT0FBMkIsQ0FBQztJQUVoQyxVQUFVLENBQUM7UUFDVCxPQUFPLEdBQUcsSUFBSSx1Q0FBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMvQyxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxhQUFhLEVBQUU7UUFDdEIsRUFBRSxDQUFDLG9DQUFvQyxFQUFFO1lBQ3ZDLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLFlBQVksdUNBQWtCLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRTtZQUMxQyx3REFBd0Q7WUFDeEQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGlCQUFpQixFQUFFO1FBQzFCLEVBQUUsQ0FBQyx3QkFBd0IsRUFBRTtZQUMzQixNQUFNLElBQUksR0FBbUI7Z0JBQzNCLFFBQVEsRUFBRSxDQUFDO2dCQUNYLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxRQUFRO2dCQUN2QyxJQUFJLEVBQUUsa0JBQWtCO2dCQUN4QixTQUFTLEVBQUUs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QU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU5RixrREFBa0Q7WUFDbEQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywyQ0FBMkMsRUFBRTtZQUM5QyxNQUFNLEtBQUssR0FBcUI7Z0JBQzlCO29CQUNFLFFBQVEsRUFBRSxDQUFDO29CQUNYLE1BQU0sRUFBRSxzQkFBc0IsRUFBRSxTQUFTO29CQUN6QyxJQUFJLEVBQUUsaUJBQWlCO29CQUN2QixTQUFTLEVBQUUsR0FBRztvQkFDZCxTQUFTLEVBQUUsQ0FBQztvQkFDWixTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUM7aUJBQzVCO2FBQ0YsQ0FBQztZQUVGLGlDQUFpQztZQUNqQyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRTtnQkFDdkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0YsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgQnVpbGRUcmFuc2FjdGlvbkVycm9yIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBJbXBvcnRJblBUeEJ1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL2ltcG9ydEluUFR4QnVpbGRlcic7XG5pbXBvcnQgeyBEZWNvZGVkVXR4b09iaiB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWIvaWZhY2UnO1xuXG5kZXNjcmliZSgnSW1wb3J0SW5QVHhCdWlsZGVyJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBjb2luQ29uZmlnID0gY29pbnMuZ2V0KCd0ZmxycCcpO1xuICBsZXQgYnVpbGRlcjogSW1wb3J0SW5QVHhCdWlsZGVyO1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIGJ1aWxkZXIgPSBuZXcgSW1wb3J0SW5QVHhCdWlsZGVyKGNvaW5Db25maWcpO1xuICB9KTtcblxuICBkZXNjcmliZSgnQ29uc3RydWN0b3InLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIHdpdGggY29pbiBjb25maWcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQub2soYnVpbGRlcik7XG4gICAgICBhc3NlcnQub2soYnVpbGRlciBpbnN0YW5jZW9mIEltcG9ydEluUFR4QnVpbGRlcik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUgd2l0aCBkZWZhdWx0IHZhbHVlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEJ1aWxkZXIgc2hvdWxkIGJlIGluaXRpYWxpemVkIHdpdGhvdXQgdGhyb3dpbmcgZXJyb3JzXG4gICAgICBhc3NlcnQub2soYnVpbGRlcik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdVVFhPIE1hbmFnZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBhZGQgc2luZ2xlIFVUWE8nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1dHhvOiBEZWNvZGVkVXR4b09iaiA9IHtcbiAgICAgICAgb3V0cHV0SUQ6IDEsXG4gICAgICAgIGFtb3VudDogJzEwMDAwMDAwMDAwMDAwMDAwMDAnLCAvLyAxIEZMUlxuICAgICAgICB0eGlkOiAndGVzdC10eGlkLXNpbmdsZScsXG4gICAgICAgIG91dHB1dGlkeDogJzAnLFxuICAgICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICAgIGFkZHJlc3NlczogWydDLWZsYXJlMXRlc3QnXSxcbiAgICAgIH07XG5cbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICBidWlsZGVyLmFkZFV0eG9zKFt1dHhvXSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWRkIG11bHRpcGxlIFVUWE9zJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXR4b3M6IERlY29kZWRVdHhvT2JqW10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBvdXRwdXRJRDogMSxcbiAgICAgICAgICBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwMDAwMDAwJywgLy8gMSBGTFJcbiAgICAgICAgICB0eGlkOiAndGVzdC10eGlkLTEnLFxuICAgICAgICAgIG91dHB1dGlkeDogJzAnLFxuICAgICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgICBhZGRyZXNzZXM6IFsnQy1mbGFyZTF0ZXN0MSddLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb3V0cHV0SUQ6IDIsXG4gICAgICAgICAgYW1vdW50OiAnMjAwMDAwMDAwMDAwMDAwMDAwMCcsIC8vIDIgRkxSXG4gICAgICAgICAgdHhpZDogJ3Rlc3QtdHhpZC0yJyxcbiAgICAgICAgICBvdXRwdXRpZHg6ICcxJyxcbiAgICAgICAgICB0aHJlc2hvbGQ6IDIsXG4gICAgICAgICAgYWRkcmVzc2VzOiBbJ0MtZmxhcmUxdGVzdDInLCAnQy1mbGFyZTF0ZXN0MyddLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb3V0cHV0SUQ6IDMsXG4gICAgICAgICAgYW1vdW50OiAnNTAwMDAwMDAwMDAwMDAwMDAwJywgLy8gMC41IEZMUlxuICAgICAgICAgIHR4aWQ6ICd0ZXN0LXR4aWQtMycsXG4gICAgICAgICAgb3V0cHV0aWR4OiAnMCcsXG4gICAgICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgICAgIGFkZHJlc3NlczogWydDLWZsYXJlMXRlc3Q0J10sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgYnVpbGRlci5hZGRVdHhvcyh1dHhvcyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGVtcHR5IFVUWE8gYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgYnVpbGRlci5hZGRVdHhvcyhbXSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWNjdW11bGF0ZSBVVFhPcyBmcm9tIG11bHRpcGxlIGNhbGxzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXR4b3MxOiBEZWNvZGVkVXR4b09ialtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgb3V0cHV0SUQ6IDEsXG4gICAgICAgICAgYW1vdW50OiAnMTAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgICAgdHhpZDogJ3Rlc3QtdHhpZC0xJyxcbiAgICAgICAgICBvdXRwdXRpZHg6ICcwJyxcbiAgICAgICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICAgICAgYWRkcmVzc2VzOiBbJ0MtZmxhcmUxdGVzdDEnXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IHV0eG9zMjogRGVjb2RlZFV0eG9PYmpbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIG91dHB1dElEOiAyLFxuICAgICAgICAgIGFtb3VudDogJzIwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgICAgIHR4aWQ6ICd0ZXN0LXR4aWQtMicsXG4gICAgICAgICAgb3V0cHV0aWR4OiAnMCcsXG4gICAgICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgICAgIGFkZHJlc3NlczogWydDLWZsYXJlMXRlc3QyJ10sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBidWlsZGVyLmFkZFV0eG9zKHV0eG9zMSk7XG4gICAgICBidWlsZGVyLmFkZFV0eG9zKHV0eG9zMik7XG5cbiAgICAgIC8vIFNob3VsZCBub3QgdGhyb3dcbiAgICAgIGFzc2VydC5vayh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0ZlZSBNYW5hZ2VtZW50JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc2V0IHZhbGlkIHBvc2l0aXZlIGZlZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbGlkRmVlcyA9IFsnMTAwMCcsICcwJywgJzEwMDAwMDAwMDAwMDAwMDAwMDAnLCAnOTk5OTk5OTk5OTk5OTk5OTk5J107XG5cbiAgICAgIHZhbGlkRmVlcy5mb3JFYWNoKChmZWUpID0+IHtcbiAgICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgICAgYnVpbGRlci5mZWUoZmVlKTtcbiAgICAgICAgfSwgYFNob3VsZCBhY2NlcHQgZmVlOiAke2ZlZX1gKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgbmVnYXRpdmUgZmVlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG5lZ2F0aXZlRmVlcyA9IFsnLTEnLCAnLTEwMDAnLCAnLTEwMDAwMDAwMDAwMDAwMDAwMDAnXTtcblxuICAgICAgbmVnYXRpdmVGZWVzLmZvckVhY2goKGZlZSkgPT4ge1xuICAgICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIGJ1aWxkZXIuZmVlKGZlZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsXG4gICAgICAgICAgYFNob3VsZCByZWplY3QgbmVnYXRpdmUgZmVlOiAke2ZlZX1gXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGludmFsaWQgZmVlIGZvcm1hdHMgKEJpZ051bWJlciBiZWhhdmlvciknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbnZhbGlkRmVlcyA9IFsnYWJjJywgJ25vdC1hLW51bWJlcicsICcxLjUuNScsICdpbmZpbml0eSddO1xuXG4gICAgICBpbnZhbGlkRmVlcy5mb3JFYWNoKChmZWUpID0+IHtcbiAgICAgICAgLy8gQmlnTnVtYmVyIGRvZXNuJ3QgdGhyb3cgZm9yIGludmFsaWQgc3RyaW5ncywgaXQgY3JlYXRlcyBOYU4gdmFsdWVzXG4gICAgICAgIC8vIEJ1dCBvdXIgaW1wbGVtZW50YXRpb24gc2hvdWxkIHN0aWxsIGFjY2VwdCB0aGVtIChubyBhZGRpdGlvbmFsIHZhbGlkYXRpb24pXG4gICAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICAgIGJ1aWxkZXIuZmVlKGZlZSk7XG4gICAgICAgIH0sIGBCaWdOdW1iZXIgYWNjZXB0cyBpbnZhbGlkIHN0cmluZ3M6ICR7ZmVlfWApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBCaWdOdW1iZXIgZmVlIGlucHV0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpZ051bWJlckZlZSA9IG5ldyBCaWdOdW1iZXIoJzEwMDAwMDAwMDAwMDAwMDAwMDAnKTtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICBidWlsZGVyLmZlZShiaWdOdW1iZXJGZWUudG9TdHJpbmcoKSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY2hhaW4gZmVlIHNldHRpbmcgd2l0aCBvdGhlciBtZXRob2RzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZmVlID0gJzEwMDAnO1xuICAgICAgY29uc3QgdXR4bzogRGVjb2RlZFV0eG9PYmogPSB7XG4gICAgICAgIG91dHB1dElEOiAxLFxuICAgICAgICBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgdHhpZDogJ3Rlc3QtdHhpZCcsXG4gICAgICAgIG91dHB1dGlkeDogJzAnLFxuICAgICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICAgIGFkZHJlc3NlczogWydDLWZsYXJlMXRlc3QnXSxcbiAgICAgIH07XG5cbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICBidWlsZGVyLmZlZShmZWUpLmFkZFV0eG9zKFt1dHhvXSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0xvY2t0aW1lIE1hbmFnZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzZXQgdmFsaWQgbG9ja3RpbWUgdmFsdWVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsaWRMb2NrdGltZXMgPSBbMCwgMSwgMTAwMCwgNDI5NDk2NzI5NV07IC8vIE1heCB1aW50MzJcblxuICAgICAgdmFsaWRMb2NrdGltZXMuZm9yRWFjaCgobG9ja3RpbWUpID0+IHtcbiAgICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgICAgYnVpbGRlci5sb2NrdGltZShsb2NrdGltZSk7XG4gICAgICAgIH0sIGBTaG91bGQgYWNjZXB0IGxvY2t0aW1lOiAke2xvY2t0aW1lfWApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBuZWdhdGl2ZSBsb2NrdGltZSAobm8gdmFsaWRhdGlvbiknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBuZWdhdGl2ZUxvY2t0aW1lcyA9IFstMSwgLTEwMDBdO1xuXG4gICAgICBuZWdhdGl2ZUxvY2t0aW1lcy5mb3JFYWNoKChsb2NrdGltZSkgPT4ge1xuICAgICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgICBidWlsZGVyLmxvY2t0aW1lKGxvY2t0aW1lKTtcbiAgICAgICAgfSwgYFNob3VsZCBhY2NlcHQgbmVnYXRpdmUgbG9ja3RpbWU6ICR7bG9ja3RpbWV9IChubyB2YWxpZGF0aW9uIGluIGltcGxlbWVudGF0aW9uKWApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBib3VuZGFyeSB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBib3VuZGFyeVZhbHVlcyA9IFswLCA0Mjk0OTY3Mjk1XTsgLy8gTWluIGFuZCBtYXggdWludDMyXG5cbiAgICAgIGJvdW5kYXJ5VmFsdWVzLmZvckVhY2goKGxvY2t0aW1lKSA9PiB7XG4gICAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICAgIGJ1aWxkZXIubG9ja3RpbWUobG9ja3RpbWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjaGFpbiBsb2NrdGltZSBzZXR0aW5nIHdpdGggb3RoZXIgbWV0aG9kcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGxvY2t0aW1lID0gMTIzNDU2O1xuICAgICAgY29uc3QgZmVlID0gJzEwMDAnO1xuXG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgYnVpbGRlci5sb2NrdGltZShsb2NrdGltZSkuZmVlKGZlZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1RocmVzaG9sZCBNYW5hZ2VtZW50JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc2V0IHZhbGlkIHRocmVzaG9sZCB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWxpZFRocmVzaG9sZHMgPSBbMSwgMiwgNSwgMTBdO1xuXG4gICAgICB2YWxpZFRocmVzaG9sZHMuZm9yRWFjaCgodGhyZXNob2xkKSA9PiB7XG4gICAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICAgIGJ1aWxkZXIudGhyZXNob2xkKHRocmVzaG9sZCk7XG4gICAgICAgIH0sIGBTaG91bGQgYWNjZXB0IHRocmVzaG9sZDogJHt0aHJlc2hvbGR9YCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGludmFsaWQgdGhyZXNob2xkIHZhbHVlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGludmFsaWRUaHJlc2hvbGRzID0gWzAsIC0xLCAtMTBdO1xuXG4gICAgICBpbnZhbGlkVGhyZXNob2xkcy5mb3JFYWNoKCh0aHJlc2hvbGQpID0+IHtcbiAgICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICBidWlsZGVyLnRocmVzaG9sZCh0aHJlc2hvbGQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgQnVpbGRUcmFuc2FjdGlvbkVycm9yLFxuICAgICAgICAgIGBTaG91bGQgcmVqZWN0IHRocmVzaG9sZDogJHt0aHJlc2hvbGR9YFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSB0eXBpY2FsIHRocmVzaG9sZCBzY2VuYXJpb3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBTaW5nbGUgc2lnbmF0dXJlXG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgYnVpbGRlci50aHJlc2hvbGQoMSk7XG4gICAgICB9KTtcblxuICAgICAgLy8gTXVsdGktc2lnbmF0dXJlXG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgYnVpbGRlci50aHJlc2hvbGQoMyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY2hhaW4gdGhyZXNob2xkIHNldHRpbmcgd2l0aCBvdGhlciBtZXRob2RzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdGhyZXNob2xkID0gMjtcbiAgICAgIGNvbnN0IGxvY2t0aW1lID0gMTIzNDU2O1xuXG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgYnVpbGRlci50aHJlc2hvbGQodGhyZXNob2xkKS5sb2NrdGltZShsb2NrdGltZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1NvdXJjZSBDaGFpbiBNYW5hZ2VtZW50JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc2V0IHZhbGlkIHNvdXJjZSBjaGFpbiBJRHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWxpZENoYWluSWRzID0gWydDLWZsYXJlMTIzNDUnLCAnTm9kZUlELWZsYXJlNjc4OTAnLCAnMHgxMjM0NTY3ODlhYmNkZWYnLCAnYWJjMTIzZGVmNDU2J107XG5cbiAgICAgIHZhbGlkQ2hhaW5JZHMuZm9yRWFjaCgoY2hhaW5JZCkgPT4ge1xuICAgICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgICBidWlsZGVyLnNvdXJjZUNoYWluKGNoYWluSWQpO1xuICAgICAgICB9LCBgU2hvdWxkIGFjY2VwdCBjaGFpbiBJRDogJHtjaGFpbklkfWApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBkaWZmZXJlbnQgY2hhaW4gSUQgZm9ybWF0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluSWRzID0gWydDLWNoYWluLWlkLTEyMycsICdQLWNoYWluLWlkLTQ1NicsICdoZXgtZm9ybWF0dGVkLWlkJywgJzEyMzQ1Njc4OTBhYmNkZWYnXTtcblxuICAgICAgY2hhaW5JZHMuZm9yRWFjaCgoY2hhaW5JZCkgPT4ge1xuICAgICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgICBidWlsZGVyLnNvdXJjZUNoYWluKGNoYWluSWQpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnSW5wdXQvT3V0cHV0IENyZWF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdGVzdCBwdWJsaWMgbWV0aG9kcyBvbmx5IGR1ZSB0byBwcm90ZWN0ZWQgYWNjZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gTm90ZTogY3JlYXRlSW5wdXRPdXRwdXQgaXMgcHJvdGVjdGVkLCBzbyB3ZSB0ZXN0IHRocm91Z2ggcHVibGljIGludGVyZmFjZVxuICAgICAgLy8gVGVzdCB0aGF0IHdlIGNhbiBzZXQgcGFyYW1ldGVycyB0aGF0IHdvdWxkIGJlIHVzZWQgYnkgY3JlYXRlSW5wdXRPdXRwdXRcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICBidWlsZGVyLmZlZSgnMTAwMCcpO1xuICAgICAgICBidWlsZGVyLnRocmVzaG9sZCgxKTtcbiAgICAgICAgLy8gUHJvdGVjdGVkIG1ldGhvZCBjYW5ub3QgYmUgdGVzdGVkIGRpcmVjdGx5XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGNvbmZpZ3VyYXRpb24gZm9yIG91dHB1dCBjcmVhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGZlZSA9ICcxMDAwJztcbiAgICAgIGNvbnN0IGxvY2t0aW1lID0gMDtcbiAgICAgIGNvbnN0IHRocmVzaG9sZCA9IDE7XG5cbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICBidWlsZGVyLmZlZShmZWUpLmxvY2t0aW1lKGxvY2t0aW1lKS50aHJlc2hvbGQodGhyZXNob2xkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhbGxvdyBzZXR0aW5nIHBhcmFtZXRlcnMgZm9yIGxhcmdlIGFtb3VudHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBsb2NrdGltZSA9IDA7XG4gICAgICBjb25zdCB0aHJlc2hvbGQgPSAxO1xuXG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgYnVpbGRlci5mZWUoJzEwMDAnKS5sb2NrdGltZShsb2NrdGltZSkudGhyZXNob2xkKHRocmVzaG9sZCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29uZmlndXJlIGZvciBkaWZmZXJlbnQgdGhyZXNob2xkIHNjZW5hcmlvcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGxvY2t0aW1lID0gMDtcblxuICAgICAgLy8gVGVzdCBkaWZmZXJlbnQgdGhyZXNob2xkc1xuICAgICAgWzEsIDIsIDNdLmZvckVhY2goKHRocmVzaG9sZCkgPT4ge1xuICAgICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgICBidWlsZGVyLnRocmVzaG9sZCh0aHJlc2hvbGQpLmxvY2t0aW1lKGxvY2t0aW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1RyYW5zYWN0aW9uIFR5cGUgVmVyaWZpY2F0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmVyaWZ5IHRyYW5zYWN0aW9uIHR5cGUgKHBsYWNlaG9sZGVyKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1vY2tUeCA9IHsgdHlwZTogJ2ltcG9ydCcgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IEltcG9ydEluUFR4QnVpbGRlci52ZXJpZnlUeFR5cGUobW9ja1R4KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIHRydWUpOyAvLyBQbGFjZWhvbGRlciByZXR1cm5zIHRydWVcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGRpZmZlcmVudCB0cmFuc2FjdGlvbiBvYmplY3RzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdGVzdENhc2VzID0gW3t9LCBudWxsLCB1bmRlZmluZWQsIHsgdHlwZTogJ2V4cG9ydCcgfSwgeyBkYXRhOiAndGVzdCcgfV07XG5cbiAgICAgIHRlc3RDYXNlcy5mb3JFYWNoKCh0ZXN0Q2FzZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gSW1wb3J0SW5QVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSh0ZXN0Q2FzZSk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIHRydWUsIGBUZXN0IGNhc2UgJHtpbmRleH0gc2hvdWxkIHJldHVybiB0cnVlIChwbGFjZWhvbGRlcilgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgdmlhIGluc3RhbmNlIG1ldGhvZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1vY2tUeCA9IHsgdHlwZTogJ2ltcG9ydCcgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkZXIudmVyaWZ5VHhUeXBlKG1vY2tUeCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCB0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1RyYW5zYWN0aW9uIEJ1aWxkaW5nIFByZXBhcmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcHJlcGFyZSBiYXNpYyBpbXBvcnQgdHJhbnNhY3Rpb24gcGFyYW1ldGVycycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGZlZSA9ICcxMDAwJztcbiAgICAgIGNvbnN0IGxvY2t0aW1lID0gMTIzNDU2O1xuICAgICAgY29uc3QgdGhyZXNob2xkID0gMjtcbiAgICAgIGNvbnN0IGNoYWluSWQgPSAnQy1zb3VyY2UtY2hhaW4tMTIzJztcbiAgICAgIGNvbnN0IHV0eG9zOiBEZWNvZGVkVXR4b09ialtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgb3V0cHV0SUQ6IDEsXG4gICAgICAgICAgYW1vdW50OiAnMTAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgICAgdHhpZDogJ3Rlc3QtdHhpZCcsXG4gICAgICAgICAgb3V0cHV0aWR4OiAnMCcsXG4gICAgICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgICAgIGFkZHJlc3NlczogWydDLWZsYXJlMXRlc3QnXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIC8vIFNldCBhbGwgcGFyYW1ldGVyc1xuICAgICAgYnVpbGRlci5mZWUoZmVlKS5sb2NrdGltZShsb2NrdGltZSkudGhyZXNob2xkKHRocmVzaG9sZCkuc291cmNlQ2hhaW4oY2hhaW5JZCkuYWRkVXR4b3ModXR4b3MpO1xuXG4gICAgICAvLyBTaG91bGQgbm90IHRocm93XG4gICAgICBhc3NlcnQub2sodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBtaW5pbWFsIGNvbmZpZ3VyYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBmZWUgPSAnMCc7XG4gICAgICBjb25zdCB1dHhvczogRGVjb2RlZFV0eG9PYmpbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIG91dHB1dElEOiAxLFxuICAgICAgICAgIGFtb3VudDogJzEwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgICAgIHR4aWQ6ICd0ZXN0LXR4aWQnLFxuICAgICAgICAgIG91dHB1dGlkeDogJzAnLFxuICAgICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgICBhZGRyZXNzZXM6IFsnQy1mbGFyZTF0ZXN0J10sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBidWlsZGVyLmZlZShmZWUpLmFkZFV0eG9zKHV0eG9zKTtcblxuICAgICAgLy8gU2hvdWxkIG5vdCB0aHJvd1xuICAgICAgYXNzZXJ0Lm9rKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQ29tcGxleCBTY2VuYXJpb3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgbXVsdGlwbGUgVVRYT3Mgd2l0aCBkaWZmZXJlbnQgcHJvcGVydGllcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHV0eG9zOiBEZWNvZGVkVXR4b09ialtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgb3V0cHV0SUQ6IDEsXG4gICAgICAgICAgYW1vdW50OiAnMTAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgICAgdHhpZDogJ3Rlc3QtdHhpZC0xJyxcbiAgICAgICAgICBvdXRwdXRpZHg6ICcwJyxcbiAgICAgICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICAgICAgYWRkcmVzc2VzOiBbJ0MtZmxhcmUxc2luZ2xlJ10sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvdXRwdXRJRDogMixcbiAgICAgICAgICBhbW91bnQ6ICcyMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgICB0eGlkOiAndGVzdC10eGlkLTInLFxuICAgICAgICAgIG91dHB1dGlkeDogJzEnLFxuICAgICAgICAgIHRocmVzaG9sZDogMixcbiAgICAgICAgICBhZGRyZXNzZXM6IFsnQy1mbGFyZTFtdWx0aTEnLCAnQy1mbGFyZTFtdWx0aTInXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG91dHB1dElEOiAzLFxuICAgICAgICAgIGFtb3VudDogJzMwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgICAgIHR4aWQ6ICd0ZXN0LXR4aWQtMycsXG4gICAgICAgICAgb3V0cHV0aWR4OiAnMCcsXG4gICAgICAgICAgdGhyZXNob2xkOiAzLFxuICAgICAgICAgIGFkZHJlc3NlczogWydDLWZsYXJlMW11bHRpMScsICdDLWZsYXJlMW11bHRpMicsICdDLWZsYXJlMW11bHRpMyddLFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgYnVpbGRlci5hZGRVdHhvcyh1dHhvcyk7XG4gICAgICBidWlsZGVyLmZlZSgnNTAwMCcpOyAvLyBIaWdoZXIgZmVlIGZvciBjb21wbGV4IHRyYW5zYWN0aW9uXG4gICAgICBidWlsZGVyLnRocmVzaG9sZCgyKTtcblxuICAgICAgLy8gU2hvdWxkIGhhbmRsZSBjb21wbGV4IFVUWE8gc2V0XG4gICAgICBhc3NlcnQub2sodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBsYXJnZSB0cmFuc2FjdGlvbiBwYXJhbWV0ZXJzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZmVlID0gJzEwMDAwMDAwMDAwMDAwMDAwMDAnOyAvLyAxIEZMUiBmZWVcbiAgICAgIGNvbnN0IGxvY2t0aW1lID0gNDI5NDk2NzI5NTsgLy8gTWF4IHVpbnQzMlxuICAgICAgY29uc3QgdGhyZXNob2xkID0gMTA7IC8vIEhpZ2ggdGhyZXNob2xkXG4gICAgICBjb25zdCBjaGFpbklkID0gJ3ZlcnktbG9uZy1jaGFpbi1pZC13aXRoLWxvdHMtb2YtY2hhcmFjdGVycy0weDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYnO1xuXG4gICAgICBidWlsZGVyLmZlZShmZWUpLmxvY2t0aW1lKGxvY2t0aW1lKS50aHJlc2hvbGQodGhyZXNob2xkKS5zb3VyY2VDaGFpbihjaGFpbklkKTtcblxuICAgICAgLy8gU2hvdWxkIGhhbmRsZSBsYXJnZSB2YWx1ZXNcbiAgICAgIGFzc2VydC5vayh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHJhcGlkIHBhcmFtZXRlciBjaGFuZ2VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gU2ltdWxhdGUgcmFwaWQgcGFyYW1ldGVyIHVwZGF0ZXNcbiAgICAgIGJ1aWxkZXIuZmVlKCcxMDAwJykuZmVlKCcyMDAwJykuZmVlKCczMDAwJyk7XG4gICAgICBidWlsZGVyLmxvY2t0aW1lKDEwMCkubG9ja3RpbWUoMjAwKS5sb2NrdGltZSgzMDApO1xuICAgICAgYnVpbGRlci50aHJlc2hvbGQoMSkudGhyZXNob2xkKDIpLnRocmVzaG9sZCgzKTtcblxuICAgICAgLy8gU2hvdWxkIGhhbmRsZSByYXBpZCBjaGFuZ2VzIHdpdGhvdXQgaXNzdWVzXG4gICAgICBhc3NlcnQub2sodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdFZGdlIENhc2VzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgaGFuZGxlIHplcm8gdmFsdWVzIHdoZXJlIGFwcHJvcHJpYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgYnVpbGRlci5mZWUoJzAnKTtcbiAgICAgIGJ1aWxkZXIubG9ja3RpbWUoMCk7XG4gICAgICAvLyB0aHJlc2hvbGQgb2YgMCBzaG91bGQgYmUgaW52YWxpZFxuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIudGhyZXNob2xkKDApO1xuICAgICAgfSwgQnVpbGRUcmFuc2FjdGlvbkVycm9yKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIG1heGltdW0gdmFsdWVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbWF4RmVlID0gJzExNTc5MjA4OTIzNzMxNjE5NTQyMzU3MDk4NTAwODY4NzkwNzg1MzI2OTk4NDY2NTY0MDU2NDAzOTQ1NzU4NDAwNzkxMzEyOTYzOTkzNSc7IC8vIE1heCB1aW50MjU2XG4gICAgICBjb25zdCBtYXhMb2NrdGltZSA9IDQyOTQ5NjcyOTU7IC8vIE1heCB1aW50MzJcblxuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIuZmVlKG1heEZlZSk7XG4gICAgICB9KTtcblxuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIubG9ja3RpbWUobWF4TG9ja3RpbWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG1haW50YWluIHN0YXRlIGFjcm9zcyBtdWx0aXBsZSBvcGVyYXRpb25zJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXR4bzE6IERlY29kZWRVdHhvT2JqID0ge1xuICAgICAgICBvdXRwdXRJRDogMSxcbiAgICAgICAgYW1vdW50OiAnMTAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgIHR4aWQ6ICd0ZXN0LXR4aWQtMScsXG4gICAgICAgIG91dHB1dGlkeDogJzAnLFxuICAgICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICAgIGFkZHJlc3NlczogWydDLWZsYXJlMXRlc3QxJ10sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB1dHhvMjogRGVjb2RlZFV0eG9PYmogPSB7XG4gICAgICAgIG91dHB1dElEOiAyLFxuICAgICAgICBhbW91bnQ6ICcyMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgdHhpZDogJ3Rlc3QtdHhpZC0yJyxcbiAgICAgICAgb3V0cHV0aWR4OiAnMCcsXG4gICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgYWRkcmVzc2VzOiBbJ0MtZmxhcmUxdGVzdDInXSxcbiAgICAgIH07XG5cbiAgICAgIC8vIEJ1aWxkIHN0YXRlIGluY3JlbWVudGFsbHlcbiAgICAgIGJ1aWxkZXIuZmVlKCcxMDAwJyk7XG4gICAgICBidWlsZGVyLmFkZFV0eG9zKFt1dHhvMV0pO1xuICAgICAgYnVpbGRlci5sb2NrdGltZSgxMjM0NTYpO1xuICAgICAgYnVpbGRlci5hZGRVdHhvcyhbdXR4bzJdKTtcbiAgICAgIGJ1aWxkZXIudGhyZXNob2xkKDIpO1xuXG4gICAgICAvLyBTdGF0ZSBzaG91bGQgYmUgbWFpbnRhaW5lZCBhY3Jvc3Mgb3BlcmF0aW9uc1xuICAgICAgYXNzZXJ0Lm9rKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnSW50ZWdyYXRpb24gVGVzdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgY29tcGxldGUgUC1jaGFpbiBpbXBvcnQgZmxvdyBwcmVwYXJhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGZlZSA9ICcyMDAwJztcbiAgICAgIGNvbnN0IGxvY2t0aW1lID0gNjU0MzIxO1xuICAgICAgY29uc3QgdGhyZXNob2xkID0gMTtcbiAgICAgIGNvbnN0IGNoYWluSWQgPSAnQy1zb3VyY2UtY2hhaW4tNDU2JztcbiAgICAgIGNvbnN0IHV0eG9zOiBEZWNvZGVkVXR4b09ialtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgb3V0cHV0SUQ6IDEsXG4gICAgICAgICAgYW1vdW50OiAnNjAwMDAwMDAwMDAwMDAwMDAwMCcsIC8vIDYgRkxSIChtb3JlIHRoYW4gb3V0cHV0IGZvciBmZWVzKVxuICAgICAgICAgIHR4aWQ6ICdpbnRlZ3JhdGlvbi10ZXN0LXR4aWQnLFxuICAgICAgICAgIG91dHB1dGlkeDogJzAnLFxuICAgICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgICBhZGRyZXNzZXM6IFsnQy1mbGFyZTFzb3VyY2UnXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIC8vIENvbXBsZXRlIHNldHVwXG4gICAgICBidWlsZGVyLmZlZShmZWUpLmxvY2t0aW1lKGxvY2t0aW1lKS50aHJlc2hvbGQodGhyZXNob2xkKS5zb3VyY2VDaGFpbihjaGFpbklkKS5hZGRVdHhvcyh1dHhvcyk7XG5cbiAgICAgIC8vIEFsbCBvcGVyYXRpb25zIHNob3VsZCBjb21wbGV0ZSB3aXRob3V0IHRocm93aW5nXG4gICAgICBhc3NlcnQub2sodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBtZXRob2QgY2hhaW5pbmcgZXh0ZW5zaXZlbHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1dHhvczogRGVjb2RlZFV0eG9PYmpbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIG91dHB1dElEOiAxLFxuICAgICAgICAgIGFtb3VudDogJzEwMDAwMDAwMDAwMDAwMDAwMDAwJywgLy8gMTAgRkxSXG4gICAgICAgICAgdHhpZDogJ2NoYWluLXRlc3QtdHhpZCcsXG4gICAgICAgICAgb3V0cHV0aWR4OiAnMCcsXG4gICAgICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgICAgIGFkZHJlc3NlczogWydDLWZsYXJlMXRlc3QnXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIC8vIFRlc3QgZXh0ZW5zaXZlIG1ldGhvZCBjaGFpbmluZ1xuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIuZmVlKCcxMDAwJykubG9ja3RpbWUoMTAwMDAwKS50aHJlc2hvbGQoMSkuc291cmNlQ2hhaW4oJ0MtY2hhaW4tMTIzJykuYWRkVXR4b3ModXR4b3MpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=transaction.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../../test/unit/lib/transaction.ts"],"names":[],"mappings":""}