@bitgo-beta/sdk-coin-hbar 2.0.73-alpha.13 → 2.0.73-alpha.131

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 (50) hide show
  1. package/dist/src/hbar.d.ts +20 -3
  2. package/dist/src/hbar.d.ts.map +1 -1
  3. package/dist/src/hbar.js +183 -6
  4. package/dist/src/lib/index.d.ts +1 -0
  5. package/dist/src/lib/index.d.ts.map +1 -1
  6. package/dist/src/lib/index.js +1 -1
  7. package/dist/test/fixtures/hbar.d.ts +6 -0
  8. package/dist/test/fixtures/hbar.d.ts.map +1 -0
  9. package/dist/test/fixtures/hbar.js +9 -0
  10. package/dist/test/resources/hbar.d.ts +67 -0
  11. package/dist/test/resources/hbar.d.ts.map +1 -0
  12. package/dist/test/resources/hbar.js +73 -0
  13. package/dist/test/unit/fixtures/hbarBackupKey.d.ts +4 -0
  14. package/dist/test/unit/fixtures/hbarBackupKey.d.ts.map +1 -0
  15. package/dist/test/unit/fixtures/hbarBackupKey.js +10 -0
  16. package/dist/test/unit/getBuilderFactory.d.ts +3 -0
  17. package/dist/test/unit/getBuilderFactory.d.ts.map +1 -0
  18. package/dist/test/unit/getBuilderFactory.js +10 -0
  19. package/dist/test/unit/hbar.d.ts +2 -0
  20. package/dist/test/unit/hbar.d.ts.map +1 -0
  21. package/dist/test/unit/hbar.js +1437 -0
  22. package/dist/test/unit/hbarToken.d.ts +2 -0
  23. package/dist/test/unit/hbarToken.d.ts.map +1 -0
  24. package/dist/test/unit/hbarToken.js +34 -0
  25. package/dist/test/unit/keyPair.d.ts +2 -0
  26. package/dist/test/unit/keyPair.d.ts.map +1 -0
  27. package/dist/test/unit/keyPair.js +179 -0
  28. package/dist/test/unit/transaction.d.ts +2 -0
  29. package/dist/test/unit/transaction.d.ts.map +1 -0
  30. package/dist/test/unit/transaction.js +94 -0
  31. package/dist/test/unit/transactionBuilder/tokenAssociateBuilder.d.ts +2 -0
  32. package/dist/test/unit/transactionBuilder/tokenAssociateBuilder.d.ts.map +1 -0
  33. package/dist/test/unit/transactionBuilder/tokenAssociateBuilder.js +215 -0
  34. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts +2 -0
  35. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
  36. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +329 -0
  37. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
  38. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
  39. package/dist/test/unit/transactionBuilder/transferBuilder.js +353 -0
  40. package/dist/test/unit/transactionBuilder/walletInitialization.d.ts +2 -0
  41. package/dist/test/unit/transactionBuilder/walletInitialization.d.ts.map +1 -0
  42. package/dist/test/unit/transactionBuilder/walletInitialization.js +214 -0
  43. package/dist/test/unit/utils.d.ts +2 -0
  44. package/dist/test/unit/utils.d.ts.map +1 -0
  45. package/dist/test/unit/utils.js +275 -0
  46. package/dist/tsconfig.tsbuildinfo +1 -0
  47. package/package.json +13 -10
  48. package/.eslintignore +0 -5
  49. package/.mocharc.yml +0 -8
  50. package/CHANGELOG.md +0 -743
@@ -0,0 +1,215 @@
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 assert_1 = __importDefault(require("assert"));
40
+ const should = __importStar(require("should"));
41
+ const getBuilderFactory_1 = require("../getBuilderFactory");
42
+ const testData = __importStar(require("../../resources/hbar"));
43
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
44
+ describe('HBAR Token Associate Builder', () => {
45
+ const factory = (0, getBuilderFactory_1.getBuilderFactory)('thbar');
46
+ const TOKEN_NAME = 'thbar:usdc';
47
+ const initTxBuilder = () => {
48
+ const txBuilder = factory.getTokenAssociateBuilder();
49
+ txBuilder.fee({ fee: testData.FEE });
50
+ txBuilder.source({ address: testData.ACCOUNT_1.accountId });
51
+ txBuilder.account(testData.ACCOUNT_1.accountId);
52
+ txBuilder.tokens(TOKEN_NAME);
53
+ return txBuilder;
54
+ };
55
+ describe('should build ', () => {
56
+ describe('non serialized transactions', () => {
57
+ it('a signed token associate transaction', async () => {
58
+ const builder = initTxBuilder();
59
+ builder.validDuration(1000000);
60
+ builder.node({ nodeId: '0.0.2345' });
61
+ builder.startTime('1596110493.372646570');
62
+ builder.sign({ key: testData.ACCOUNT_1.prvKeyWithPrefix });
63
+ const tx = await builder.build();
64
+ const txJson = tx.toJson();
65
+ should.deepEqual(tx.signature.length, 1);
66
+ txJson.instructionsData.params.tokenNames.length.should.equal(1);
67
+ txJson.instructionsData.params.tokenNames[0].should.deepEqual(TOKEN_NAME);
68
+ txJson.instructionsData.params.accountId.should.deepEqual(testData.ACCOUNT_1.accountId);
69
+ should.deepEqual(txJson.from, testData.ACCOUNT_1.accountId);
70
+ should.deepEqual(txJson.fee.toString(), testData.FEE);
71
+ should.deepEqual(tx.toBroadcastFormat(), testData.SIGNED_TOKEN_ASSOCIATE_TRANSACTION);
72
+ tx.type.should.equal(sdk_core_1.TransactionType.AssociatedTokenAccountInitialization);
73
+ tx.outputs.length.should.equal(1);
74
+ tx.outputs[0].should.deepEqual({
75
+ address: testData.ACCOUNT_1.accountId,
76
+ value: '0',
77
+ coin: TOKEN_NAME,
78
+ });
79
+ tx.inputs.length.should.equal(1);
80
+ tx.inputs[0].should.deepEqual({
81
+ address: testData.ACCOUNT_1.accountId,
82
+ value: '0',
83
+ coin: TOKEN_NAME,
84
+ });
85
+ });
86
+ it('a token associate transaction with memo', async () => {
87
+ const builder = initTxBuilder();
88
+ builder.memo('This is an example');
89
+ const tx = await builder.build();
90
+ const txJson = tx.toJson();
91
+ txJson.instructionsData.params.tokenNames.length.should.equal(1);
92
+ txJson.instructionsData.params.tokenNames[0].should.deepEqual(TOKEN_NAME);
93
+ txJson.instructionsData.params.accountId.should.deepEqual(testData.ACCOUNT_1.accountId);
94
+ should.deepEqual(txJson.memo, 'This is an example');
95
+ should.deepEqual(txJson.from, testData.ACCOUNT_1.accountId);
96
+ should.deepEqual(txJson.fee.toString(), testData.FEE);
97
+ });
98
+ it('a non signed token associate transaction', async () => {
99
+ const builder = initTxBuilder();
100
+ builder.startTime('1596110493.372646570');
101
+ builder.validDuration(1000000);
102
+ builder.node({ nodeId: '0.0.2345' });
103
+ const tx = await builder.build();
104
+ const txJson = tx.toJson();
105
+ txJson.instructionsData.params.tokenNames.length.should.equal(1);
106
+ txJson.instructionsData.params.tokenNames[0].should.deepEqual(TOKEN_NAME);
107
+ txJson.instructionsData.params.accountId.should.deepEqual(testData.ACCOUNT_1.accountId);
108
+ should.deepEqual(txJson.from, testData.ACCOUNT_1.accountId);
109
+ should.deepEqual(txJson.fee.toString(), testData.FEE);
110
+ should.deepEqual(tx.toBroadcastFormat(), testData.NON_SIGNED_TOKEN_ASSOCIATE_TRANSACTION);
111
+ });
112
+ it('a token associate transaction between accounts with realm and shard non zero', async () => {
113
+ const builder = factory.getTokenAssociateBuilder();
114
+ builder.fee({ fee: testData.FEE });
115
+ builder.source({ address: '2.3.456' });
116
+ builder.account('3.4.567');
117
+ builder.tokens(TOKEN_NAME);
118
+ builder.node({ nodeId: '5.2.2345' });
119
+ const tx = await builder.build();
120
+ const txJson = tx.toJson();
121
+ txJson.instructionsData.params.tokenNames.length.should.equal(1);
122
+ txJson.instructionsData.params.tokenNames[0].should.deepEqual(TOKEN_NAME);
123
+ txJson.instructionsData.params.accountId.should.deepEqual('3.4.567');
124
+ should.deepEqual(txJson.node, '5.2.2345');
125
+ should.deepEqual(txJson.from, '2.3.456');
126
+ });
127
+ it('a token associate transaction between accounts without realm and shard', async () => {
128
+ const builder = factory.getTokenAssociateBuilder();
129
+ builder.fee({ fee: testData.FEE });
130
+ builder.source({ address: '456' });
131
+ builder.account('567');
132
+ builder.tokens(TOKEN_NAME);
133
+ builder.node({ nodeId: '2345' });
134
+ const tx = await builder.build();
135
+ const txJson = tx.toJson();
136
+ txJson.instructionsData.params.tokenNames.length.should.equal(1);
137
+ txJson.instructionsData.params.tokenNames[0].should.deepEqual(TOKEN_NAME);
138
+ txJson.instructionsData.params.accountId.should.deepEqual('0.0.567');
139
+ should.deepEqual(txJson.node, '0.0.2345');
140
+ should.deepEqual(txJson.from, '0.0.456');
141
+ });
142
+ describe('serialized token transactions', () => {
143
+ it('a non signed token transfer transaction from serialized', async () => {
144
+ const builder = factory.from(testData.NON_SIGNED_TOKEN_ASSOCIATE_TRANSACTION);
145
+ builder.sign({ key: testData.ACCOUNT_1.prvKeyWithPrefix });
146
+ const tx2 = await builder.build();
147
+ should.deepEqual(tx2.toBroadcastFormat(), testData.SIGNED_TOKEN_ASSOCIATE_TRANSACTION);
148
+ tx2.type.should.equal(sdk_core_1.TransactionType.AssociatedTokenAccountInitialization);
149
+ });
150
+ it('an offline multisig token transfer transaction', async () => {
151
+ const builder = initTxBuilder();
152
+ builder.startTime('1596110493.372646570');
153
+ builder.sign({ key: testData.ACCOUNT_1.prvKeyWithPrefix });
154
+ const tx = await builder.build();
155
+ should.deepEqual(tx.signature.length, 1);
156
+ const builder2 = factory.from(tx.toBroadcastFormat());
157
+ builder2.sign({ key: testData.ACCOUNT_2.privateKey });
158
+ const tx2 = await builder2.build();
159
+ should.deepEqual(tx2.signature.length, 2);
160
+ const builder3 = factory.from(tx2.toBroadcastFormat());
161
+ builder3.sign({ key: testData.ACCOUNT_3.privateKey });
162
+ const tx3 = await builder3.build();
163
+ should.deepEqual(tx3.signature.length, 3);
164
+ should.deepEqual(tx3.toBroadcastFormat(), testData.THREE_TIMES_SIGNED_TOKEN_ASSOCIATE_TRANSACTION);
165
+ });
166
+ });
167
+ });
168
+ describe('should fail', () => {
169
+ it('a token associate transaction with an invalid key', () => {
170
+ const builder = initTxBuilder();
171
+ assert_1.default.throws(() => builder.sign({ key: '5bb72603f237c0993f7973d37fdade32c71aa94aee686aa79d260acba1882d90AA' }), (e) => e.message === 'Invalid private key');
172
+ });
173
+ it('a token associate transaction with more signatures than allowed', () => {
174
+ const builder = initTxBuilder();
175
+ builder.sign({ key: testData.ACCOUNT_2.privateKey });
176
+ builder.sign({ key: testData.ACCOUNT_1.prvKeyWithPrefix });
177
+ builder.sign({ key: testData.ACCOUNT_3.privateKey });
178
+ assert_1.default.throws(() => builder.sign({ key: '5bb72603f237c0993f7973d37fdade32c71aa94aee686aa79d260acba1882d90' }), (e) => e.message === 'A maximum of 3 can sign the transaction.');
179
+ });
180
+ it('a token associate transaction with repeated sign', () => {
181
+ const builder = initTxBuilder();
182
+ builder.sign({ key: testData.ACCOUNT_1.prvKeyWithPrefix });
183
+ assert_1.default.throws(() => builder.sign({ key: testData.ACCOUNT_1.prvKeyWithPrefix }), (e) => e.message ===
184
+ 'Repeated sign: 302e020100300506032b65700422042062b0b669de0ab5e91b4328e1431859a5ca47e7426e701019272f5c2d52825b01');
185
+ });
186
+ it('a token associate transaction with an invalid account id', () => {
187
+ const txBuilder = factory.getTokenAssociateBuilder();
188
+ assert_1.default.throws(() => txBuilder.account('invalidaccountId'), (e) => e.message === 'Unsupported account address: invalidaccountId');
189
+ });
190
+ it('a token transfer transaction with an invalid destination memo', () => {
191
+ const txBuilder = factory.getTokenAssociateBuilder();
192
+ assert_1.default.throws(() => txBuilder.memo('This sentence has more than 100 bytes allowed for the memo, this should throw error -----------------'), (e) => e.message === 'Memo must not be longer than 100 bytes');
193
+ });
194
+ it('a token transfer transaction with an invalid token name', () => {
195
+ const txBuilder = factory.getTokenAssociateBuilder();
196
+ assert_1.default.throws(() => txBuilder.tokens('invalidtokenname'), (e) => e.message === 'Unsupported token: invalidtokenname');
197
+ });
198
+ it('a token transfer transaction with an repeated token name', () => {
199
+ const txBuilder = factory.getTokenAssociateBuilder();
200
+ txBuilder.tokens('thbar:usdc');
201
+ assert_1.default.throws(() => txBuilder.tokens('thbar:usdc'), (e) => e.message === 'Repeated token ID: 0.0.429274');
202
+ });
203
+ it('a token associate transaction with invalid start time', () => {
204
+ const txBuilder = factory.getTokenAssociateBuilder();
205
+ assert_1.default.throws(() => txBuilder.startTime('invalid start time'), (e) => e.message === 'Invalid value for time parameter');
206
+ assert_1.default.throws(() => txBuilder.startTime('-5'), (e) => e.message === 'Invalid value for time parameter');
207
+ });
208
+ it('a token associate transaction with invalid node', () => {
209
+ const txBuilder = factory.getTokenAssociateBuilder();
210
+ assert_1.default.throws(() => txBuilder.node({ nodeId: 'invalid node' }), (e) => e.message === 'Invalid Hedera node address');
211
+ });
212
+ });
213
+ });
214
+ });
215
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5Bc3NvY2lhdGVCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci90b2tlbkFzc29jaWF0ZUJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsK0NBQWlDO0FBQ2pDLDREQUF5RDtBQUN6RCwrREFBaUQ7QUFDakQsbURBQXVEO0FBRXZELFFBQVEsQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLEVBQUU7SUFDNUMsTUFBTSxPQUFPLEdBQUcsSUFBQSxxQ0FBaUIsRUFBQyxPQUFPLENBQUMsQ0FBQztJQUMzQyxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUM7SUFDaEMsTUFBTSxhQUFhLEdBQUcsR0FBRyxFQUFFO1FBQ3pCLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ3JELFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDckMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDNUQsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hELFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0IsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQyxDQUFDO0lBRUYsUUFBUSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUU7UUFDN0IsUUFBUSxDQUFDLDZCQUE2QixFQUFFLEdBQUcsRUFBRTtZQUMzQyxFQUFFLENBQUMsc0NBQXNDLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQ3BELE1BQU0sT0FBTyxHQUFHLGFB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RUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxrQ0FBa0MsQ0FDN0QsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLGlEQUFpRCxFQUFFLEdBQUcsRUFBRTtnQkFDekQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixFQUFFLENBQUM7Z0JBQ3JELGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFDaEQsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssNkJBQTZCLENBQ3hELENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgZ2V0QnVpbGRlckZhY3RvcnkgfSBmcm9tICcuLi9nZXRCdWlsZGVyRmFjdG9yeSc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvaGJhcic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmRlc2NyaWJlKCdIQkFSIFRva2VuIEFzc29jaWF0ZSBCdWlsZGVyJywgKCkgPT4ge1xuICBjb25zdCBmYWN0b3J5ID0gZ2V0QnVpbGRlckZhY3RvcnkoJ3RoYmFyJyk7XG4gIGNvbnN0IFRPS0VOX05BTUUgPSAndGhiYXI6dXNkYyc7XG4gIGNvbnN0IGluaXRUeEJ1aWxkZXIgPSAoKSA9PiB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUb2tlbkFzc29jaWF0ZUJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuZmVlKHsgZmVlOiB0ZXN0RGF0YS5GRUUgfSk7XG4gICAgdHhCdWlsZGVyLnNvdXJjZSh7IGFkZHJlc3M6IHRlc3REYXRhLkFDQ09VTlRfMS5hY2NvdW50SWQgfSk7XG4gICAgdHhCdWlsZGVyLmFjY291bnQodGVzdERhdGEuQUNDT1VOVF8xLmFjY291bnRJZCk7XG4gICAgdHhCdWlsZGVyLnRva2VucyhUT0tFTl9OQU1FKTtcbiAgICByZXR1cm4gdHhCdWlsZGVyO1xuICB9O1xuXG4gIGRlc2NyaWJlKCdzaG91bGQgYnVpbGQgJywgKCkgPT4ge1xuICAgIGRlc2NyaWJlKCdub24gc2VyaWFsaXplZCB0cmFuc2FjdGlvbnMnLCAoKSA9PiB7XG4gICAgICBpdCgnYSBzaWduZWQgdG9rZW4gYXNzb2NpYXRlIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICBidWlsZGVyLnZhbGlkRHVyYXRpb24oMTAwMDAwMCk7XG4gICAgICAgIGJ1aWxkZXIubm9kZSh7IG5vZGVJZDogJzAuMC4yMzQ1JyB9KTtcbiAgICAgICAgYnVpbGRlci5zdGFydFRpbWUoJzE1OTYxMTA0OTMuMzcyNjQ2NTcwJyk7XG4gICAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuQUNDT1VOVF8xLnBydktleVdpdGhQcmVmaXggfSk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eC5zaWduYXR1cmUubGVuZ3RoLCAxKTtcbiAgICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGEucGFyYW1zLnRva2VuTmFtZXMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGEucGFyYW1zLnRva2VuTmFtZXNbMF0uc2hvdWxkLmRlZXBFcXVhbChUT0tFTl9OQU1FKTtcbiAgICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGEucGFyYW1zLmFjY291bnRJZC5zaG91bGQuZGVlcEVxdWFsKHRlc3REYXRhLkFDQ09VTlRfMS5hY2NvdW50SWQpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5mcm9tLCB0ZXN0RGF0YS5BQ0NPVU5UXzEuYWNjb3VudElkKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZmVlLnRvU3RyaW5nKCksIHRlc3REYXRhLkZFRSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdGVzdERhdGEuU0lHTkVEX1RPS0VOX0FTU09DSUFURV9UUkFOU0FDVElPTik7XG4gICAgICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5Bc3NvY2lhdGVkVG9rZW5BY2NvdW50SW5pdGlhbGl6YXRpb24pO1xuXG4gICAgICAgIHR4Lm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgdHgub3V0cHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5BQ0NPVU5UXzEuYWNjb3VudElkLFxuICAgICAgICAgIHZhbHVlOiAnMCcsXG4gICAgICAgICAgY29pbjogVE9LRU5fTkFNRSxcbiAgICAgICAgfSk7XG4gICAgICAgIHR4LmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgICB0eC5pbnB1dHNbMF0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgYWRkcmVzczogdGVzdERhdGEuQUNDT1VOVF8xLmFjY291bnRJZCxcbiAgICAgICAgICB2YWx1ZTogJzAnLFxuICAgICAgICAgIGNvaW46IFRPS0VOX05BTUUsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdhIHRva2VuIGFzc29jaWF0ZSB0cmFuc2FjdGlvbiB3aXRoIG1lbW8nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgIGJ1aWxkZXIubWVtbygnVGhpcyBpcyBhbiBleGFtcGxlJyk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGEucGFyYW1zLnRva2VuTmFtZXMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGEucGFyYW1zLnRva2VuTmFtZXNbMF0uc2hvdWxkLmRlZXBFcXVhbChUT0tFTl9OQU1FKTtcbiAgICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGEucGFyYW1zLmFjY291bnRJZC5zaG91bGQuZGVlcEVxdWFsKHRlc3REYXRhLkFDQ09VTlRfMS5hY2NvdW50SWQpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5tZW1vLCAnVGhpcyBpcyBhbiBleGFtcGxlJyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmZyb20sIHRlc3REYXRhLkFDQ09VTlRfMS5hY2NvdW50SWQpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5mZWUudG9TdHJpbmcoKSwgdGVzdERhdGEuRkVFKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYSBub24gc2lnbmVkIHRva2VuIGFzc29jaWF0ZSB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgYnVpbGRlci5zdGFydFRpbWUoJzE1OTYxMTA0OTMuMzcyNjQ2NTcwJyk7XG4gICAgICAgIGJ1aWxkZXIudmFsaWREdXJhdGlvbigxMDAwMDAwKTtcbiAgICAgICAgYnVpbGRlci5ub2RlKHsgbm9kZUlkOiAnMC4wLjIzNDUnIH0pO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhLnBhcmFtcy50b2tlbk5hbWVzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhLnBhcmFtcy50b2tlbk5hbWVzWzBdLnNob3VsZC5kZWVwRXF1YWwoVE9LRU5fTkFNRSk7XG4gICAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhLnBhcmFtcy5hY2NvdW50SWQuc2hvdWxkLmRlZXBFcXVhbCh0ZXN0RGF0YS5BQ0NPVU5UXzEuYWNjb3VudElkKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZnJvbSwgdGVzdERhdGEuQUNDT1VOVF8xLmFjY291bnRJZCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmZlZS50b1N0cmluZygpLCB0ZXN0RGF0YS5GRUUpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLk5PTl9TSUdORURfVE9LRU5fQVNTT0NJQVRFX1RSQU5TQUNUSU9OKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYSB0b2tlbiBhc3NvY2lhdGUgdHJhbnNhY3Rpb24gYmV0d2VlbiBhY2NvdW50cyB3aXRoIHJlYWxtIGFuZCBzaGFyZCBub24gemVybycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VG9rZW5Bc3NvY2lhdGVCdWlsZGVyKCk7XG4gICAgICAgIGJ1aWxkZXIuZmVlKHsgZmVlOiB0ZXN0RGF0YS5GRUUgfSk7XG4gICAgICAgIGJ1aWxkZXIuc291cmNlKHsgYWRkcmVzczogJzIuMy40NTYnIH0pO1xuICAgICAgICBidWlsZGVyLmFjY291bnQoJzMuNC41NjcnKTtcbiAgICAgICAgYnVpbGRlci50b2tlbnMoVE9LRU5fTkFNRSk7XG4gICAgICAgIGJ1aWxkZXIubm9kZSh7IG5vZGVJZDogJzUuMi4yMzQ1JyB9KTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YS5wYXJhbXMudG9rZW5OYW1lcy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YS5wYXJhbXMudG9rZW5OYW1lc1swXS5zaG91bGQuZGVlcEVxdWFsKFRPS0VOX05BTUUpO1xuICAgICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YS5wYXJhbXMuYWNjb3VudElkLnNob3VsZC5kZWVwRXF1YWwoJzMuNC41NjcnKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ubm9kZSwgJzUuMi4yMzQ1Jyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmZyb20sICcyLjMuNDU2Jyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2EgdG9rZW4gYXNzb2NpYXRlIHRyYW5zYWN0aW9uIGJldHdlZW4gYWNjb3VudHMgd2l0aG91dCByZWFsbSBhbmQgc2hhcmQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFRva2VuQXNzb2NpYXRlQnVpbGRlcigpO1xuICAgICAgICBidWlsZGVyLmZlZSh7IGZlZTogdGVzdERhdGEuRkVFIH0pO1xuICAgICAgICBidWlsZGVyLnNvdXJjZSh7IGFkZHJlc3M6ICc0NTYnIH0pO1xuICAgICAgICBidWlsZGVyLmFjY291bnQoJzU2NycpO1xuICAgICAgICBidWlsZGVyLnRva2VucyhUT0tFTl9OQU1FKTtcbiAgICAgICAgYnVpbGRlci5ub2RlKHsgbm9kZUlkOiAnMjM0NScgfSk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGEucGFyYW1zLnRva2VuTmFtZXMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGEucGFyYW1zLnRva2VuTmFtZXNbMF0uc2hvdWxkLmRlZXBFcXVhbChUT0tFTl9OQU1FKTtcbiAgICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGEucGFyYW1zLmFjY291bnRJZC5zaG91bGQuZGVlcEVxdWFsKCcwLjAuNTY3Jyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vZGUsICcwLjAuMjM0NScpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5mcm9tLCAnMC4wLjQ1NicpO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCdzZXJpYWxpemVkIHRva2VuIHRyYW5zYWN0aW9ucycsICgpID0+IHtcbiAgICAgICAgaXQoJ2Egbm9uIHNpZ25lZCB0b2tlbiB0cmFuc2ZlciB0cmFuc2FjdGlvbiBmcm9tIHNlcmlhbGl6ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0ZXN0RGF0YS5OT05fU0lHTkVEX1RPS0VOX0FTU09DSUFURV9UUkFOU0FDVElPTik7XG4gICAgICAgICAgYnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5BQ0NPVU5UXzEucHJ2S2V5V2l0aFByZWZpeCB9KTtcbiAgICAgICAgICBjb25zdCB0eDIgPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eDIudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdGVzdERhdGEuU0lHTkVEX1RPS0VOX0FTU09DSUFURV9UUkFOU0FDVElPTik7XG4gICAgICAgICAgdHgyLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5Bc3NvY2lhdGVkVG9rZW5BY2NvdW50SW5pdGlhbGl6YXRpb24pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnYW4gb2ZmbGluZSBtdWx0aXNpZyB0b2tlbiB0cmFuc2ZlciB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICAgIGJ1aWxkZXIuc3RhcnRUaW1lKCcxNTk2MTEwNDkzLjM3MjY0NjU3MCcpO1xuICAgICAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuQUNDT1VOVF8xLnBydktleVdpdGhQcmVmaXggfSk7XG4gICAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eC5zaWduYXR1cmUubGVuZ3RoLCAxKTtcblxuICAgICAgICAgIGNvbnN0IGJ1aWxkZXIyID0gZmFjdG9yeS5mcm9tKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuICAgICAgICAgIGJ1aWxkZXIyLnNpZ24oeyBrZXk6IHRlc3REYXRhLkFDQ09VTlRfMi5wcml2YXRlS2V5IH0pO1xuICAgICAgICAgIGNvbnN0IHR4MiA9IGF3YWl0IGJ1aWxkZXIyLmJ1aWxkKCk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eDIuc2lnbmF0dXJlLmxlbmd0aCwgMik7XG5cbiAgICAgICAgICBjb25zdCBidWlsZGVyMyA9IGZhY3RvcnkuZnJvbSh0eDIudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gICAgICAgICAgYnVpbGRlcjMuc2lnbih7IGtleTogdGVzdERhdGEuQUNDT1VOVF8zLnByaXZhdGVLZXkgfSk7XG4gICAgICAgICAgY29uc3QgdHgzID0gYXdhaXQgYnVpbGRlcjMuYnVpbGQoKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4My5zaWduYXR1cmUubGVuZ3RoLCAzKTtcblxuICAgICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHgzLnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLlRIUkVFX1RJTUVTX1NJR05FRF9UT0tFTl9BU1NPQ0lBVEVfVFJBTlNBQ1RJT04pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3Nob3VsZCBmYWlsJywgKCkgPT4ge1xuICAgICAgaXQoJ2EgdG9rZW4gYXNzb2NpYXRlIHRyYW5zYWN0aW9uIHdpdGggYW4gaW52YWxpZCBrZXknLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICAgKCkgPT4gYnVpbGRlci5zaWduKHsga2V5OiAnNWJiNzI2MDNmMjM3YzA5OTNmNzk3M2QzN2ZkYWRlMzJjNzFhYTk0YWVlNjg2YWE3OWQyNjBhY2JhMTg4MmQ5MEFBJyB9KSxcbiAgICAgICAgICAoZTogYW55KSA9PiBlLm1lc3NhZ2UgPT09ICdJbnZhbGlkIHByaXZhdGUga2V5J1xuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdhIHRva2VuIGFzc29jaWF0ZSB0cmFuc2FjdGlvbiB3aXRoIG1vcmUgc2lnbmF0dXJlcyB0aGFuIGFsbG93ZWQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuQUNDT1VOVF8yLnByaXZhdGVLZXkgfSk7XG4gICAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuQUNDT1VOVF8xLnBydktleVdpdGhQcmVmaXggfSk7XG4gICAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuQUNDT1VOVF8zLnByaXZhdGVLZXkgfSk7XG4gICAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICAgKCkgPT4gYnVpbGRlci5zaWduKHsga2V5OiAnNWJiNzI2MDNmMjM3YzA5OTNmNzk3M2QzN2ZkYWRlMzJjNzFhYTk0YWVlNjg2YWE3OWQyNjBhY2JhMTg4MmQ5MCcgfSksXG4gICAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSAnQSBtYXhpbXVtIG9mIDMgY2FuIHNpZ24gdGhlIHRyYW5zYWN0aW9uLidcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYSB0b2tlbiBhc3NvY2lhdGUgdHJhbnNhY3Rpb24gd2l0aCByZXBlYXRlZCBzaWduJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLkFDQ09VTlRfMS5wcnZLZXlXaXRoUHJlZml4IH0pO1xuICAgICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAgICgpID0+IGJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuQUNDT1VOVF8xLnBydktleVdpdGhQcmVmaXggfSksXG4gICAgICAgICAgKGU6IGFueSkgPT5cbiAgICAgICAgICAgIGUubWVzc2FnZSA9PT1cbiAgICAgICAgICAgICdSZXBlYXRlZCBzaWduOiAzMDJlMDIwMTAwMzAwNTA2MDMyYjY1NzAwNDIyMDQyMDYyYjBiNjY5ZGUwYWI1ZTkxYjQzMjhlMTQzMTg1OWE1Y2E0N2U3NDI2ZTcwMTAxOTI3MmY1YzJkNTI4MjViMDEnXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2EgdG9rZW4gYXNzb2NpYXRlIHRyYW5zYWN0aW9uIHdpdGggYW4gaW52YWxpZCBhY2NvdW50IGlkJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRva2VuQXNzb2NpYXRlQnVpbGRlcigpO1xuICAgICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAgICgpID0+IHR4QnVpbGRlci5hY2NvdW50KCdpbnZhbGlkYWNjb3VudElkJyksXG4gICAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSAnVW5zdXBwb3J0ZWQgYWNjb3VudCBhZGRyZXNzOiBpbnZhbGlkYWNjb3VudElkJ1xuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdhIHRva2VuIHRyYW5zZmVyIHRyYW5zYWN0aW9uIHdpdGggYW4gaW52YWxpZCBkZXN0aW5hdGlvbiBtZW1vJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRva2VuQXNzb2NpYXRlQnVpbGRlcigpO1xuICAgICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAgICgpID0+XG4gICAgICAgICAgICB0eEJ1aWxkZXIubWVtbyhcbiAgICAgICAgICAgICAgJ1RoaXMgc2VudGVuY2UgaGFzIG1vcmUgdGhhbiAxMDAgYnl0ZXMgYWxsb3dlZCBmb3IgdGhlIG1lbW8sIHRoaXMgc2hvdWxkIHRocm93IGVycm9yIC0tLS0tLS0tLS0tLS0tLS0tJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAoZTogYW55KSA9PiBlLm1lc3NhZ2UgPT09ICdNZW1vIG11c3Qgbm90IGJlIGxvbmdlciB0aGFuIDEwMCBieXRlcydcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYSB0b2tlbiB0cmFuc2ZlciB0cmFuc2FjdGlvbiB3aXRoIGFuIGludmFsaWQgdG9rZW4gbmFtZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUb2tlbkFzc29jaWF0ZUJ1aWxkZXIoKTtcbiAgICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgICAoKSA9PiB0eEJ1aWxkZXIudG9rZW5zKCdpbnZhbGlkdG9rZW5uYW1lJyksXG4gICAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSAnVW5zdXBwb3J0ZWQgdG9rZW46IGludmFsaWR0b2tlbm5hbWUnXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2EgdG9rZW4gdHJhbnNmZXIgdHJhbnNhY3Rpb24gd2l0aCBhbiByZXBlYXRlZCB0b2tlbiBuYW1lJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRva2VuQXNzb2NpYXRlQnVpbGRlcigpO1xuICAgICAgICB0eEJ1aWxkZXIudG9rZW5zKCd0aGJhcjp1c2RjJyk7XG4gICAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICAgKCkgPT4gdHhCdWlsZGVyLnRva2VucygndGhiYXI6dXNkYycpLFxuICAgICAgICAgIChlOiBhbnkpID0+IGUubWVzc2FnZSA9PT0gJ1JlcGVhdGVkIHRva2VuIElEOiAwLjAuNDI5Mjc0J1xuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdhIHRva2VuIGFzc29jaWF0ZSB0cmFuc2FjdGlvbiB3aXRoIGludmFsaWQgc3RhcnQgdGltZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUb2tlbkFzc29jaWF0ZUJ1aWxkZXIoKTtcbiAgICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgICAoKSA9PiB0eEJ1aWxkZXIuc3RhcnRUaW1lKCdpbnZhbGlkIHN0YXJ0IHRpbWUnKSxcbiAgICAgICAgICAoZTogYW55KSA9PiBlLm1lc3NhZ2UgPT09ICdJbnZhbGlkIHZhbHVlIGZvciB0aW1lIHBhcmFtZXRlcidcbiAgICAgICAgKTtcbiAgICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgICAoKSA9PiB0eEJ1aWxkZXIuc3RhcnRUaW1lKCctNScpLFxuICAgICAgICAgIChlOiBhbnkpID0+IGUubWVzc2FnZSA9PT0gJ0ludmFsaWQgdmFsdWUgZm9yIHRpbWUgcGFyYW1ldGVyJ1xuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdhIHRva2VuIGFzc29jaWF0ZSB0cmFuc2FjdGlvbiB3aXRoIGludmFsaWQgbm9kZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUb2tlbkFzc29jaWF0ZUJ1aWxkZXIoKTtcbiAgICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgICAoKSA9PiB0eEJ1aWxkZXIubm9kZSh7IG5vZGVJZDogJ2ludmFsaWQgbm9kZScgfSksXG4gICAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSAnSW52YWxpZCBIZWRlcmEgbm9kZSBhZGRyZXNzJ1xuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tokenTransferBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenTransferBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/tokenTransferBuilder.ts"],"names":[],"mappings":""}