@bitgo-beta/sdk-coin-tao 1.0.1-alpha.156 → 1.0.1-alpha.157

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 (49) hide show
  1. package/.eslintignore +4 -0
  2. package/.mocharc.yml +8 -0
  3. package/CHANGELOG.md +254 -0
  4. package/package.json +7 -10
  5. package/dist/test/integration/index.d.ts +0 -1
  6. package/dist/test/integration/index.d.ts.map +0 -1
  7. package/dist/test/integration/index.js +0 -1
  8. package/dist/test/resources/index.d.ts +0 -150
  9. package/dist/test/resources/index.d.ts.map +0 -1
  10. package/dist/test/resources/index.js +0 -166
  11. package/dist/test/resources/materialData.json +0 -8
  12. package/dist/test/resources/materialDataModified.json +0 -8
  13. package/dist/test/resources/testnet.d.ts +0 -2
  14. package/dist/test/resources/testnet.d.ts.map +0 -1
  15. package/dist/test/resources/testnet.js +0 -5
  16. package/dist/test/unit/fixtures.d.ts +0 -31
  17. package/dist/test/unit/fixtures.d.ts.map +0 -1
  18. package/dist/test/unit/fixtures.js +0 -107
  19. package/dist/test/unit/tao.d.ts +0 -2
  20. package/dist/test/unit/tao.d.ts.map +0 -1
  21. package/dist/test/unit/tao.js +0 -415
  22. package/dist/test/unit/transactionBuilder/base.d.ts +0 -8
  23. package/dist/test/unit/transactionBuilder/base.d.ts.map +0 -1
  24. package/dist/test/unit/transactionBuilder/base.js +0 -238
  25. package/dist/test/unit/transactionBuilder/moveStakeBuilder.d.ts +0 -2
  26. package/dist/test/unit/transactionBuilder/moveStakeBuilder.d.ts.map +0 -1
  27. package/dist/test/unit/transactionBuilder/moveStakeBuilder.js +0 -472
  28. package/dist/test/unit/transactionBuilder/singeltonRegistry.d.ts +0 -2
  29. package/dist/test/unit/transactionBuilder/singeltonRegistry.d.ts.map +0 -1
  30. package/dist/test/unit/transactionBuilder/singeltonRegistry.js +0 -59
  31. package/dist/test/unit/transactionBuilder/stakingBuilder.d.ts +0 -2
  32. package/dist/test/unit/transactionBuilder/stakingBuilder.d.ts.map +0 -1
  33. package/dist/test/unit/transactionBuilder/stakingBuilder.js +0 -112
  34. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts +0 -2
  35. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +0 -1
  36. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +0 -92
  37. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts +0 -2
  38. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts.map +0 -1
  39. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.js +0 -75
  40. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +0 -2
  41. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +0 -1
  42. package/dist/test/unit/transactionBuilder/transferBuilder.js +0 -309
  43. package/dist/test/unit/transactionBuilder/unstakeBuilder.d.ts +0 -2
  44. package/dist/test/unit/transactionBuilder/unstakeBuilder.d.ts.map +0 -1
  45. package/dist/test/unit/transactionBuilder/unstakeBuilder.js +0 -112
  46. package/dist/test/unit/util.d.ts +0 -2
  47. package/dist/test/unit/util.d.ts.map +0 -1
  48. package/dist/test/unit/util.js +0 -29
  49. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -1,238 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.buildTestConfig = void 0;
7
- const sdk_core_1 = require("@bitgo-beta/sdk-core");
8
- const statics_1 = require("@bitgo-beta/statics");
9
- const assert_1 = __importDefault(require("assert"));
10
- const should_1 = __importDefault(require("should"));
11
- const sinon_1 = __importDefault(require("sinon"));
12
- const lib_1 = require("../../../src/lib");
13
- const src_1 = require("../../../src/");
14
- const resources_1 = require("../../resources");
15
- const resources_2 = require("../../../src/resources");
16
- const buildTestConfig = () => {
17
- return statics_1.coins.get('tdot');
18
- };
19
- exports.buildTestConfig = buildTestConfig;
20
- class StubTransactionBuilder extends lib_1.TransactionBuilder {
21
- constructor(_coinConfig) {
22
- super(_coinConfig);
23
- this.material(src_1.utils.getMaterial(_coinConfig.network.type));
24
- }
25
- validateDecodedTransaction(decodedTxn) {
26
- return;
27
- }
28
- buildTransaction() {
29
- throw new Error('Method not implemented.');
30
- }
31
- getSender() {
32
- return this._sender;
33
- }
34
- getReferenceBlock() {
35
- return this._referenceBlock;
36
- }
37
- getNonce() {
38
- return this._nonce;
39
- }
40
- getTip() {
41
- return this._tip;
42
- }
43
- getEraPeriod() {
44
- return this._eraPeriod;
45
- }
46
- buildImplementation() {
47
- return super.buildImplementation();
48
- }
49
- fromImplementation(rawTransaction) {
50
- return super.fromImplementation(rawTransaction);
51
- }
52
- signImplementation(key) {
53
- return super.signImplementation(key);
54
- }
55
- get transactionType() {
56
- throw new Error('Method not implemented.');
57
- }
58
- getTransaction() {
59
- return this._transaction;
60
- }
61
- getMaterial() {
62
- return this._material;
63
- }
64
- }
65
- describe('TAO Transfer Builder Base', () => {
66
- let builder;
67
- const sender = resources_1.accounts.account1;
68
- const receiver = resources_1.accounts.account2;
69
- beforeEach(() => {
70
- builder = new StubTransactionBuilder((0, exports.buildTestConfig)());
71
- });
72
- describe('setter validation', () => {
73
- it('should validate sender address', () => {
74
- const spy = sinon_1.default.spy(builder, 'validateAddress');
75
- assert_1.default.throws(() => builder.sender({ address: 'asd' }), (e) => e.message === `The address 'asd' is not a well-formed dot address`);
76
- should_1.default.doesNotThrow(() => builder.sender({ address: sender.address }));
77
- sinon_1.default.assert.calledTwice(spy);
78
- });
79
- it('should validate eraPeriod', () => {
80
- const spy = sinon_1.default.spy(builder, 'validateValue');
81
- assert_1.default.throws(() => builder.validity({ maxDuration: -1 }), (e) => e.message === 'Value cannot be less than zero');
82
- should_1.default.doesNotThrow(() => builder.validity({ maxDuration: 64 }));
83
- sinon_1.default.assert.calledTwice(spy);
84
- });
85
- it('should validate nonce', () => {
86
- const spy = sinon_1.default.spy(builder, 'validateValue');
87
- assert_1.default.throws(() => builder.sequenceId({ name: 'Nonce', keyword: 'nonce', value: -1 }), (e) => e.message === 'Value cannot be less than zero');
88
- should_1.default.doesNotThrow(() => builder.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 10 }));
89
- sinon_1.default.assert.calledTwice(spy);
90
- });
91
- it('should validate tip', () => {
92
- const spy = sinon_1.default.spy(builder, 'validateValue');
93
- assert_1.default.throws(() => builder.fee({ amount: -1, type: 'tip' }), (e) => e.message === 'Value cannot be less than zero');
94
- should_1.default.doesNotThrow(() => builder.fee({ amount: 10, type: 'tip' }));
95
- sinon_1.default.assert.calledTwice(spy);
96
- });
97
- it('should validate blockNumber', () => {
98
- const spy = sinon_1.default.spy(builder, 'validateValue');
99
- assert_1.default.throws(() => builder.validity({ firstValid: -1 }), (e) => e.message === 'Value cannot be less than zero');
100
- should_1.default.doesNotThrow(() => builder.validity({ firstValid: 10 }));
101
- sinon_1.default.assert.calledTwice(spy);
102
- });
103
- });
104
- describe('build base transaction', () => {
105
- it('should build validate base fields', async () => {
106
- builder
107
- .material(src_1.utils.getMaterial((0, exports.buildTestConfig)().network.type))
108
- .sender({ address: sender.address })
109
- .validity({ firstValid: 3933, maxDuration: 64 })
110
- .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
111
- .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
112
- .fee({ amount: 0, type: 'tip' });
113
- should_1.default.doesNotThrow(() => builder.validateTransaction(builder.getTransaction()));
114
- });
115
- it('should build a base transaction on testnet', async () => {
116
- const material = builder.getMaterial();
117
- should_1.default.deepEqual(material.specName, resources_2.testnetMaterial.specName);
118
- should_1.default.deepEqual(material.genesisHash, resources_2.testnetMaterial.genesisHash);
119
- should_1.default.deepEqual(material.specVersion, resources_2.testnetMaterial.specVersion);
120
- should_1.default.deepEqual(material.chainName, resources_2.testnetMaterial.chainName);
121
- });
122
- it('should build from raw signed tx', async () => {
123
- builder.from(resources_1.rawTx.transfer.signed);
124
- should_1.default.deepEqual(builder.getSender(), '5H56KVtb3sSMxuhFsH51iFi1gei7tnBQjpVmj6hu9tK7CBDR');
125
- should_1.default.deepEqual(builder.getNonce(), 17);
126
- should_1.default.deepEqual(builder.getEraPeriod(), 64);
127
- should_1.default.deepEqual(builder.getTip(), undefined);
128
- });
129
- it('should build from raw unsigned tx', async () => {
130
- builder.from(resources_1.rawTx.transfer.unsigned);
131
- should_1.default.deepEqual(builder.getReferenceBlock(), '0xcfe3aab1066cbb67f3d004051bf07323f2eab4b4f5ba76e5a1c37f391f89b016');
132
- should_1.default.deepEqual(builder.getNonce(), 17);
133
- should_1.default.deepEqual(builder.getEraPeriod(), 64);
134
- should_1.default.deepEqual(builder.getTip(), undefined);
135
- });
136
- });
137
- describe('add TSS signature', function () {
138
- let MPC;
139
- before('initialize mpc module', async () => {
140
- MPC = await sdk_core_1.Eddsa.initialize();
141
- });
142
- it('should add TSS signature', async () => {
143
- const factory = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tdot'));
144
- const A = MPC.keyShare(1, 2, 3);
145
- const B = MPC.keyShare(2, 2, 3);
146
- const C = MPC.keyShare(3, 2, 3);
147
- const A_combine = MPC.keyCombine(A.uShare, [B.yShares[1], C.yShares[1]]);
148
- const B_combine = MPC.keyCombine(B.uShare, [A.yShares[2], C.yShares[2]]);
149
- const C_combine = MPC.keyCombine(C.uShare, [A.yShares[3], B.yShares[3]]);
150
- const commonPub = A_combine.pShare.y;
151
- const dotKeyPair = new lib_1.KeyPair({ pub: commonPub });
152
- const sender = dotKeyPair.getAddress(sdk_core_1.DotAddressFormat.substrate);
153
- let transferBuilder = factory
154
- .getTransferBuilder()
155
- .amount('90034235235322')
156
- .to({ address: '5Ffp1wJCPu4hzVDTo7XaMLqZSvSadyUQmxWPDw74CBjECSoq' })
157
- .sender({ address: sender })
158
- .to({ address: receiver.address })
159
- .validity({ firstValid: 3933, maxDuration: 64 })
160
- .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
161
- .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
162
- .fee({ amount: 0, type: 'tip' });
163
- const unsignedTransaction = await transferBuilder.build();
164
- const signablePayload = unsignedTransaction.signablePayload;
165
- // signing with A and B
166
- let A_sign_share = MPC.signShare(signablePayload, A_combine.pShare, [A_combine.jShares[2]]);
167
- let B_sign_share = MPC.signShare(signablePayload, B_combine.pShare, [B_combine.jShares[1]]);
168
- let A_sign = MPC.sign(signablePayload, A_sign_share.xShare, [B_sign_share.rShares[1]], [C.yShares[1]]);
169
- let B_sign = MPC.sign(signablePayload, B_sign_share.xShare, [A_sign_share.rShares[2]], [C.yShares[2]]);
170
- // sign the message_buffer (unsigned txHex)
171
- let signature = MPC.signCombine([A_sign, B_sign]);
172
- let rawSignature = Buffer.concat([Buffer.from(signature.R, 'hex'), Buffer.from(signature.sigma, 'hex')]);
173
- transferBuilder = factory
174
- .getTransferBuilder()
175
- .amount('90034235235322')
176
- .to({ address: '5Ffp1wJCPu4hzVDTo7XaMLqZSvSadyUQmxWPDw74CBjECSoq' })
177
- .sender({ address: sender })
178
- .to({ address: receiver.address })
179
- .validity({ firstValid: 3933, maxDuration: 64 })
180
- .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
181
- .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
182
- .fee({ amount: 0, type: 'tip' });
183
- transferBuilder.addSignature({ pub: dotKeyPair.getKeys().pub }, rawSignature);
184
- let signedTransaction = await transferBuilder.build();
185
- signedTransaction.signature.length.should.equal(1);
186
- signedTransaction.signature[0].should.equal(rawSignature.toString('hex'));
187
- // signing with A and C
188
- A_sign_share = MPC.signShare(signablePayload, A_combine.pShare, [A_combine.jShares[3]]);
189
- let C_sign_share = MPC.signShare(signablePayload, C_combine.pShare, [C_combine.jShares[1]]);
190
- A_sign = MPC.sign(signablePayload, A_sign_share.xShare, [C_sign_share.rShares[1]], [B.yShares[1]]);
191
- let C_sign = MPC.sign(signablePayload, C_sign_share.xShare, [A_sign_share.rShares[3]], [B.yShares[3]]);
192
- signature = MPC.signCombine([A_sign, C_sign]);
193
- rawSignature = Buffer.concat([Buffer.from(signature.R, 'hex'), Buffer.from(signature.sigma, 'hex')]);
194
- transferBuilder = factory
195
- .getTransferBuilder()
196
- .amount('90034235235322')
197
- .to({ address: '5Ffp1wJCPu4hzVDTo7XaMLqZSvSadyUQmxWPDw74CBjECSoq' })
198
- .sender({ address: sender })
199
- .to({ address: receiver.address })
200
- .validity({ firstValid: 3933, maxDuration: 64 })
201
- .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
202
- .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
203
- .fee({ amount: 0, type: 'tip' });
204
- transferBuilder.addSignature({ pub: dotKeyPair.getKeys().pub }, rawSignature);
205
- signedTransaction = await transferBuilder.build();
206
- signedTransaction.signature.length.should.equal(1);
207
- signedTransaction.signature[0].should.equal(rawSignature.toString('hex'));
208
- // signing with B and C
209
- B_sign_share = MPC.signShare(signablePayload, B_combine.pShare, [B_combine.jShares[3]]);
210
- C_sign_share = MPC.signShare(signablePayload, C_combine.pShare, [C_combine.jShares[2]]);
211
- B_sign = MPC.sign(signablePayload, B_sign_share.xShare, [C_sign_share.rShares[2]], [A.yShares[2]]);
212
- C_sign = MPC.sign(signablePayload, C_sign_share.xShare, [B_sign_share.rShares[3]], [A.yShares[3]]);
213
- signature = MPC.signCombine([B_sign, C_sign]);
214
- rawSignature = Buffer.concat([Buffer.from(signature.R, 'hex'), Buffer.from(signature.sigma, 'hex')]);
215
- transferBuilder = factory
216
- .getTransferBuilder()
217
- .amount('90034235235322')
218
- .to({ address: '5Ffp1wJCPu4hzVDTo7XaMLqZSvSadyUQmxWPDw74CBjECSoq' })
219
- .sender({ address: sender })
220
- .to({ address: receiver.address })
221
- .validity({ firstValid: 3933, maxDuration: 64 })
222
- .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
223
- .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
224
- .fee({ amount: 0, type: 'tip' });
225
- transferBuilder.addSignature({ pub: dotKeyPair.getKeys().pub }, rawSignature);
226
- signedTransaction = await transferBuilder.build();
227
- signedTransaction.signature.length.should.equal(1);
228
- signedTransaction.signature[0].should.equal(rawSignature.toString('hex'));
229
- const rebuiltTransaction = await factory
230
- .from(signedTransaction.toBroadcastFormat())
231
- .validity({ firstValid: 3933, maxDuration: 64 })
232
- .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
233
- .build();
234
- rebuiltTransaction.signature[0].should.equal(rawSignature.toString('hex'));
235
- });
236
- });
237
- });
238
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtREFBeUY7QUFDekYsaURBQWdGO0FBRWhGLG9EQUE0QjtBQUM1QixvREFBNEI7QUFDNUIsa0RBQTBCO0FBQzFCLDBDQUF1RztBQUN2Ryx1Q0FBaUQ7QUFDakQsK0NBQWtEO0FBQ2xELHNEQUF5RDtBQVFsRCxNQUFNLGVBQWUsR0FBRyxHQUF5QixFQUFFO0lBQ3hELE9BQU8sZUFBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMzQixDQUFDLENBQUM7QUFGVyxRQUFBLGVBQWUsbUJBRTFCO0FBRUYsTUFBTSxzQkFBdUIsU0FBUSx3QkFBa0I7SUFDckQsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBQ1MsMEJBQTBCLENBQUMsVUFBbUQ7UUFDdEYsT0FBTztJQUNULENBQUM7SUFDUyxnQkFBZ0I7UUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7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UUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDN0UsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUtleSwgRG90QWRkcmVzc0Zvcm1hdCwgRWRkc2EsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcsIGNvaW5zLCBEb3ROZXR3b3JrIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBEZWNvZGVkU2lnbmVkVHgsIERlY29kZWRTaWduaW5nUGF5bG9hZCwgVW5zaWduZWRUcmFuc2FjdGlvbiB9IGZyb20gJ0BzdWJzdHJhdGUvdHh3cmFwcGVyLWNvcmUnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCB7IEtleVBhaXIsIFRyYW5zYWN0aW9uLCBUcmFuc2FjdGlvbkJ1aWxkZXIsIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliJztcbmltcG9ydCB7IEludGVyZmFjZSwgdXRpbHMgfSBmcm9tICcuLi8uLi8uLi9zcmMvJztcbmltcG9ydCB7IGFjY291bnRzLCByYXdUeCB9IGZyb20gJy4uLy4uL3Jlc291cmNlcyc7XG5pbXBvcnQgeyB0ZXN0bmV0TWF0ZXJpYWwgfSBmcm9tICcuLi8uLi8uLi9zcmMvcmVzb3VyY2VzJztcblxuZXhwb3J0IGludGVyZmFjZSBUZXN0RG90TmV0d29yayBleHRlbmRzIERvdE5ldHdvcmsge1xuICBnZW5lc2lzSGFzaDogc3RyaW5nO1xuICBzcGVjVmVyc2lvbjogbnVtYmVyO1xuICBtZXRhZGF0YVJwYzogYDB4JHtzdHJpbmd9YDtcbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkVGVzdENvbmZpZyA9ICgpOiBSZWFkb25seTxDb2luQ29uZmlnPiA9PiB7XG4gIHJldHVybiBjb2lucy5nZXQoJ3Rkb3QnKTtcbn07XG5cbmNsYXNzIFN0dWJUcmFuc2FjdGlvbkJ1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5tYXRlcmlhbCh1dGlscy5nZXRNYXRlcmlhbChfY29pbkNvbmZpZy5uZXR3b3JrLnR5cGUpKTtcbiAgfVxuICBwcm90ZWN0ZWQgdmFsaWRhdGVEZWNvZGVkVHJhbnNhY3Rpb24oZGVjb2RlZFR4bjogRGVjb2RlZFNpZ25pbmdQYXlsb2FkIHwgRGVjb2RlZFNpZ25lZFR4KTogdm9pZCB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHByb3RlY3RlZCBidWlsZFRyYW5zYWN0aW9uKCk6IFVuc2lnbmVkVHJhbnNhY3Rpb24ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIGdldFNlbmRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZW5kZXI7XG4gIH1cblxuICBnZXRSZWZlcmVuY2VCbG9jaygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9yZWZlcmVuY2VCbG9jaztcbiAgfVxuXG4gIGdldE5vbmNlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX25vbmNlO1xuICB9XG5cbiAgZ2V0VGlwKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3RpcDtcbiAgfVxuXG4gIGdldEVyYVBlcmlvZCgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9lcmFQZXJpb2Q7XG4gIH1cblxuICBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICByZXR1cm4gc3VwZXIuYnVpbGRJbXBsZW1lbnRhdGlvbigpO1xuICB9XG5cbiAgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgcmV0dXJuIHN1cGVyLmZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gIH1cblxuICBzaWduSW1wbGVtZW50YXRpb24oa2V5OiBCYXNlS2V5KTogVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiBzdXBlci5zaWduSW1wbGVtZW50YXRpb24oa2V5KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgZ2V0VHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIGdldE1hdGVyaWFsKCk6IEludGVyZmFjZS5NYXRlcmlhbCB7XG4gICAgcmV0dXJuIHRoaXMuX21hdGVyaWFsO1xuICB9XG59XG5cbmRlc2NyaWJlKCdUQU8gVHJhbnNmZXIgQnVpbGRlciBCYXNlJywgKCkgPT4ge1xuICBsZXQgYnVpbGRlcjogU3R1YlRyYW5zYWN0aW9uQnVpbGRlcjtcblxuICBjb25zdCBzZW5kZXIgPSBhY2NvdW50cy5hY2NvdW50MTtcbiAgY29uc3QgcmVjZWl2ZXIgPSBhY2NvdW50cy5hY2NvdW50MjtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBidWlsZGVyID0gbmV3IFN0dWJUcmFuc2FjdGlvbkJ1aWxkZXIoYnVpbGRUZXN0Q29uZmlnKCkpO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2V0dGVyIHZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBzZW5kZXIgYWRkcmVzcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHNweSA9IHNpbm9uLnNweShidWlsZGVyLCAndmFsaWRhdGVBZGRyZXNzJyk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBidWlsZGVyLnNlbmRlcih7IGFkZHJlc3M6ICdhc2QnIH0pLFxuICAgICAgICAoZTogRXJyb3IpID0+IGUubWVzc2FnZSA9PT0gYFRoZSBhZGRyZXNzICdhc2QnIGlzIG5vdCBhIHdlbGwtZm9ybWVkIGRvdCBhZGRyZXNzYFxuICAgICAgKTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gYnVpbGRlci5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KSk7XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkVHdpY2Uoc3B5KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgZXJhUGVyaW9kJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc3B5ID0gc2lub24uc3B5KGJ1aWxkZXIsICd2YWxpZGF0ZVZhbHVlJyk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBidWlsZGVyLnZhbGlkaXR5KHsgbWF4RHVyYXRpb246IC0xIH0pLFxuICAgICAgICAoZTogRXJyb3IpID0+IGUubWVzc2FnZSA9PT0gJ1ZhbHVlIGNhbm5vdCBiZSBsZXNzIHRoYW4gemVybydcbiAgICAgICk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IGJ1aWxkZXIudmFsaWRpdHkoeyBtYXhEdXJhdGlvbjogNjQgfSkpO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFR3aWNlKHNweSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIG5vbmNlJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc3B5ID0gc2lub24uc3B5KGJ1aWxkZXIsICd2YWxpZGF0ZVZhbHVlJyk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBidWlsZGVyLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogLTEgfSksXG4gICAgICAgIChlOiBFcnJvcikgPT4gZS5tZXNzYWdlID09PSAnVmFsdWUgY2Fubm90IGJlIGxlc3MgdGhhbiB6ZXJvJ1xuICAgICAgKTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gYnVpbGRlci5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDEwIH0pKTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRUd2ljZShzcHkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSB0aXAnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzcHkgPSBzaW5vbi5zcHkoYnVpbGRlciwgJ3ZhbGlkYXRlVmFsdWUnKTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IGJ1aWxkZXIuZmVlKHsgYW1vdW50OiAtMSwgdHlwZTogJ3RpcCcgfSksXG4gICAgICAgIChlOiBFcnJvcikgPT4gZS5tZXNzYWdlID09PSAnVmFsdWUgY2Fubm90IGJlIGxlc3MgdGhhbiB6ZXJvJ1xuICAgICAgKTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gYnVpbGRlci5mZWUoeyBhbW91bnQ6IDEwLCB0eXBlOiAndGlwJyB9KSk7XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkVHdpY2Uoc3B5KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYmxvY2tOdW1iZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBzcHkgPSBzaW5vbi5zcHkoYnVpbGRlciwgJ3ZhbGlkYXRlVmFsdWUnKTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IGJ1aWxkZXIudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAtMSB9KSxcbiAgICAgICAgKGU6IEVycm9yKSA9PiBlLm1lc3NhZ2UgPT09ICdWYWx1ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm8nXG4gICAgICApO1xuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBidWlsZGVyLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMTAgfSkpO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFR3aWNlKHNweSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdidWlsZCBiYXNlIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYnVpbGQgdmFsaWRhdGUgYmFzZSBmaWVsZHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5tYXRlcmlhbCh1dGlscy5nZXRNYXRlcmlhbChidWlsZFRlc3RDb25maWcoKS5uZXR3b3JrLnR5cGUpKVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJylcbiAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMjAwIH0pXG4gICAgICAgIC5mZWUoeyBhbW91bnQ6IDAsIHR5cGU6ICd0aXAnIH0pO1xuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBidWlsZGVyLnZhbGlkYXRlVHJhbnNhY3Rpb24oYnVpbGRlci5nZXRUcmFuc2FjdGlvbigpKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgYmFzZSB0cmFuc2FjdGlvbiBvbiB0ZXN0bmV0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgbWF0ZXJpYWwgPSBidWlsZGVyLmdldE1hdGVyaWFsKCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKG1hdGVyaWFsLnNwZWNOYW1lLCB0ZXN0bmV0TWF0ZXJpYWwuc3BlY05hbWUpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChtYXRlcmlhbC5nZW5lc2lzSGFzaCwgdGVzdG5ldE1hdGVyaWFsLmdlbmVzaXNIYXNoKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwobWF0ZXJpYWwuc3BlY1ZlcnNpb24sIHRlc3RuZXRNYXRlcmlhbC5zcGVjVmVyc2lvbik7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKG1hdGVyaWFsLmNoYWluTmFtZSwgdGVzdG5ldE1hdGVyaWFsLmNoYWluTmFtZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGZyb20gcmF3IHNpZ25lZCB0eCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGJ1aWxkZXIuZnJvbShyYXdUeC50cmFuc2Zlci5zaWduZWQpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChidWlsZGVyLmdldFNlbmRlcigpLCAnNUg1NktWdGIzc1NNeHVoRnNINTFpRmkxZ2VpN3RuQlFqcFZtajZodTl0SzdDQkRSJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKGJ1aWxkZXIuZ2V0Tm9uY2UoKSwgMTcpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChidWlsZGVyLmdldEVyYVBlcmlvZCgpLCA2NCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKGJ1aWxkZXIuZ2V0VGlwKCksIHVuZGVmaW5lZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGZyb20gcmF3IHVuc2lnbmVkIHR4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgYnVpbGRlci5mcm9tKHJhd1R4LnRyYW5zZmVyLnVuc2lnbmVkKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwoXG4gICAgICAgIGJ1aWxkZXIuZ2V0UmVmZXJlbmNlQmxvY2soKSxcbiAgICAgICAgJzB4Y2ZlM2FhYjEwNjZjYmI2N2YzZDAwNDA1MWJmMDczMjNmMmVhYjRiNGY1YmE3NmU1YTFjMzdmMzkxZjg5YjAxNidcbiAgICAgICk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKGJ1aWxkZXIuZ2V0Tm9uY2UoKSwgMTcpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChidWlsZGVyLmdldEVyYVBlcmlvZCgpLCA2NCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKGJ1aWxkZXIuZ2V0VGlwKCksIHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdhZGQgVFNTIHNpZ25hdHVyZScsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgTVBDOiBFZGRzYTtcbiAgICBiZWZvcmUoJ2luaXRpYWxpemUgbXBjIG1vZHVsZScsIGFzeW5jICgpID0+IHtcbiAgICAgIE1QQyA9IGF3YWl0IEVkZHNhLmluaXRpYWxpemUoKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGFkZCBUU1Mgc2lnbmF0dXJlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGRvdCcpKTtcblxuICAgICAgY29uc3QgQSA9IE1QQy5rZXlTaGFyZSgxLCAyLCAzKTtcbiAgICAgIGNvbnN0IEIgPSBNUEMua2V5U2hhcmUoMiwgMiwgMyk7XG4gICAgICBjb25zdCBDID0gTVBDLmtleVNoYXJlKDMsIDIsIDMpO1xuXG4gICAgICBjb25zdCBBX2NvbWJpbmUgPSBNUEMua2V5Q29tYmluZShBLnVTaGFyZSwgW0IueVNoYXJlc1sxXSwgQy55U2hhcmVzWzFdXSk7XG4gICAgICBjb25zdCBCX2NvbWJpbmUgPSBNUEMua2V5Q29tYmluZShCLnVTaGFyZSwgW0EueVNoYXJlc1syXSwgQy55U2hhcmVzWzJdXSk7XG4gICAgICBjb25zdCBDX2NvbWJpbmUgPSBNUEMua2V5Q29tYmluZShDLnVTaGFyZSwgW0EueVNoYXJlc1szXSwgQi55U2hhcmVzWzNdXSk7XG5cbiAgICAgIGNvbnN0IGNvbW1vblB1YiA9IEFfY29tYmluZS5wU2hhcmUueTtcbiAgICAgIGNvbnN0IGRvdEtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHB1YjogY29tbW9uUHViIH0pO1xuICAgICAgY29uc3Qgc2VuZGVyID0gZG90S2V5UGFpci5nZXRBZGRyZXNzKERvdEFkZHJlc3NGb3JtYXQuc3Vic3RyYXRlKTtcblxuICAgICAgbGV0IHRyYW5zZmVyQnVpbGRlciA9IGZhY3RvcnlcbiAgICAgICAgLmdldFRyYW5zZmVyQnVpbGRlcigpXG4gICAgICAgIC5hbW91bnQoJzkwMDM0MjM1MjM1MzIyJylcbiAgICAgICAgLnRvKHsgYWRkcmVzczogJzVGZnAxd0pDUHU0aHpWRFRvN1hhTUxxWlN2U2FkeVVRbXhXUER3NzRDQmpFQ1NvcScgfSlcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlciB9KVxuICAgICAgICAudG8oeyBhZGRyZXNzOiByZWNlaXZlci5hZGRyZXNzIH0pXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2soJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpXG4gICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDIwMCB9KVxuICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KTtcbiAgICAgIGNvbnN0IHVuc2lnbmVkVHJhbnNhY3Rpb24gPSBhd2FpdCB0cmFuc2ZlckJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHNpZ25hYmxlUGF5bG9hZCA9IHVuc2lnbmVkVHJhbnNhY3Rpb24uc2lnbmFibGVQYXlsb2FkO1xuXG4gICAgICAvLyBzaWduaW5nIHdpdGggQSBhbmQgQlxuICAgICAgbGV0IEFfc2lnbl9zaGFyZSA9IE1QQy5zaWduU2hhcmUoc2lnbmFibGVQYXlsb2FkLCBBX2NvbWJpbmUucFNoYXJlLCBbQV9jb21iaW5lLmpTaGFyZXNbMl1dKTtcbiAgICAgIGxldCBCX3NpZ25fc2hhcmUgPSBNUEMuc2lnblNoYXJlKHNpZ25hYmxlUGF5bG9hZCwgQl9jb21iaW5lLnBTaGFyZSwgW0JfY29tYmluZS5qU2hhcmVzWzFdXSk7XG4gICAgICBsZXQgQV9zaWduID0gTVBDLnNpZ24oc2lnbmFibGVQYXlsb2FkLCBBX3NpZ25fc2hhcmUueFNoYXJlLCBbQl9zaWduX3NoYXJlLnJTaGFyZXNbMV1dLCBbQy55U2hhcmVzWzFdXSk7XG4gICAgICBsZXQgQl9zaWduID0gTVBDLnNpZ24oc2lnbmFibGVQYXlsb2FkLCBCX3NpZ25fc2hhcmUueFNoYXJlLCBbQV9zaWduX3NoYXJlLnJTaGFyZXNbMl1dLCBbQy55U2hhcmVzWzJdXSk7XG4gICAgICAvLyBzaWduIHRoZSBtZXNzYWdlX2J1ZmZlciAodW5zaWduZWQgdHhIZXgpXG4gICAgICBsZXQgc2lnbmF0dXJlID0gTVBDLnNpZ25Db21iaW5lKFtBX3NpZ24sIEJfc2lnbl0pO1xuICAgICAgbGV0IHJhd1NpZ25hdHVyZSA9IEJ1ZmZlci5jb25jYXQoW0J1ZmZlci5mcm9tKHNpZ25hdHVyZS5SLCAnaGV4JyksIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZS5zaWdtYSwgJ2hleCcpXSk7XG4gICAgICB0cmFuc2ZlckJ1aWxkZXIgPSBmYWN0b3J5XG4gICAgICAgIC5nZXRUcmFuc2ZlckJ1aWxkZXIoKVxuICAgICAgICAuYW1vdW50KCc5MDAzNDIzNTIzNTMyMicpXG4gICAgICAgIC50byh7IGFkZHJlc3M6ICc1RmZwMXdKQ1B1NGh6VkRUbzdYYU1McVpTdlNhZHlVUW14V1BEdzc0Q0JqRUNTb3EnIH0pXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIgfSlcbiAgICAgICAgLnRvKHsgYWRkcmVzczogcmVjZWl2ZXIuYWRkcmVzcyB9KVxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAyMDAgfSlcbiAgICAgICAgLmZlZSh7IGFtb3VudDogMCwgdHlwZTogJ3RpcCcgfSk7XG4gICAgICB0cmFuc2ZlckJ1aWxkZXIuYWRkU2lnbmF0dXJlKHsgcHViOiBkb3RLZXlQYWlyLmdldEtleXMoKS5wdWIgfSwgcmF3U2lnbmF0dXJlKTtcbiAgICAgIGxldCBzaWduZWRUcmFuc2FjdGlvbiA9IGF3YWl0IHRyYW5zZmVyQnVpbGRlci5idWlsZCgpO1xuICAgICAgc2lnbmVkVHJhbnNhY3Rpb24uc2lnbmF0dXJlLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICBzaWduZWRUcmFuc2FjdGlvbi5zaWduYXR1cmVbMF0uc2hvdWxkLmVxdWFsKHJhd1NpZ25hdHVyZS50b1N0cmluZygnaGV4JykpO1xuXG4gICAgICAvLyBzaWduaW5nIHdpdGggQSBhbmQgQ1xuICAgICAgQV9zaWduX3NoYXJlID0gTVBDLnNpZ25TaGFyZShzaWduYWJsZVBheWxvYWQsIEFfY29tYmluZS5wU2hhcmUsIFtBX2NvbWJpbmUualNoYXJlc1szXV0pO1xuICAgICAgbGV0IENfc2lnbl9zaGFyZSA9IE1QQy5zaWduU2hhcmUoc2lnbmFibGVQYXlsb2FkLCBDX2NvbWJpbmUucFNoYXJlLCBbQ19jb21iaW5lLmpTaGFyZXNbMV1dKTtcbiAgICAgIEFfc2lnbiA9IE1QQy5zaWduKHNpZ25hYmxlUGF5bG9hZCwgQV9zaWduX3NoYXJlLnhTaGFyZSwgW0Nfc2lnbl9zaGFyZS5yU2hhcmVzWzFdXSwgW0IueVNoYXJlc1sxXV0pO1xuICAgICAgbGV0IENfc2lnbiA9IE1QQy5zaWduKHNpZ25hYmxlUGF5bG9hZCwgQ19zaWduX3NoYXJlLnhTaGFyZSwgW0Ffc2lnbl9zaGFyZS5yU2hhcmVzWzNdXSwgW0IueVNoYXJlc1szXV0pO1xuICAgICAgc2lnbmF0dXJlID0gTVBDLnNpZ25Db21iaW5lKFtBX3NpZ24sIENfc2lnbl0pO1xuICAgICAgcmF3U2lnbmF0dXJlID0gQnVmZmVyLmNvbmNhdChbQnVmZmVyLmZyb20oc2lnbmF0dXJlLlIsICdoZXgnKSwgQnVmZmVyLmZyb20oc2lnbmF0dXJlLnNpZ21hLCAnaGV4JyldKTtcbiAgICAgIHRyYW5zZmVyQnVpbGRlciA9IGZhY3RvcnlcbiAgICAgICAgLmdldFRyYW5zZmVyQnVpbGRlcigpXG4gICAgICAgIC5hbW91bnQoJzkwMDM0MjM1MjM1MzIyJylcbiAgICAgICAgLnRvKHsgYWRkcmVzczogJzVGZnAxd0pDUHU0aHpWRFRvN1hhTUxxWlN2U2FkeVVRbXhXUER3NzRDQmpFQ1NvcScgfSlcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlciB9KVxuICAgICAgICAudG8oeyBhZGRyZXNzOiByZWNlaXZlci5hZGRyZXNzIH0pXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2soJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpXG4gICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDIwMCB9KVxuICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KTtcbiAgICAgIHRyYW5zZmVyQnVpbGRlci5hZGRTaWduYXR1cmUoeyBwdWI6IGRvdEtleVBhaXIuZ2V0S2V5cygpLnB1YiB9LCByYXdTaWduYXR1cmUpO1xuICAgICAgc2lnbmVkVHJhbnNhY3Rpb24gPSBhd2FpdCB0cmFuc2ZlckJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNpZ25lZFRyYW5zYWN0aW9uLnNpZ25hdHVyZS5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgc2lnbmVkVHJhbnNhY3Rpb24uc2lnbmF0dXJlWzBdLnNob3VsZC5lcXVhbChyYXdTaWduYXR1cmUudG9TdHJpbmcoJ2hleCcpKTtcblxuICAgICAgLy8gc2lnbmluZyB3aXRoIEIgYW5kIENcbiAgICAgIEJfc2lnbl9zaGFyZSA9IE1QQy5zaWduU2hhcmUoc2lnbmFibGVQYXlsb2FkLCBCX2NvbWJpbmUucFNoYXJlLCBbQl9jb21iaW5lLmpTaGFyZXNbM11dKTtcbiAgICAgIENfc2lnbl9zaGFyZSA9IE1QQy5zaWduU2hhcmUoc2lnbmFibGVQYXlsb2FkLCBDX2NvbWJpbmUucFNoYXJlLCBbQ19jb21iaW5lLmpTaGFyZXNbMl1dKTtcbiAgICAgIEJfc2lnbiA9IE1QQy5zaWduKHNpZ25hYmxlUGF5bG9hZCwgQl9zaWduX3NoYXJlLnhTaGFyZSwgW0Nfc2lnbl9zaGFyZS5yU2hhcmVzWzJdXSwgW0EueVNoYXJlc1syXV0pO1xuICAgICAgQ19zaWduID0gTVBDLnNpZ24oc2lnbmFibGVQYXlsb2FkLCBDX3NpZ25fc2hhcmUueFNoYXJlLCBbQl9zaWduX3NoYXJlLnJTaGFyZXNbM11dLCBbQS55U2hhcmVzWzNdXSk7XG4gICAgICBzaWduYXR1cmUgPSBNUEMuc2lnbkNvbWJpbmUoW0Jfc2lnbiwgQ19zaWduXSk7XG4gICAgICByYXdTaWduYXR1cmUgPSBCdWZmZXIuY29uY2F0KFtCdWZmZXIuZnJvbShzaWduYXR1cmUuUiwgJ2hleCcpLCBCdWZmZXIuZnJvbShzaWduYXR1cmUuc2lnbWEsICdoZXgnKV0pO1xuICAgICAgdHJhbnNmZXJCdWlsZGVyID0gZmFjdG9yeVxuICAgICAgICAuZ2V0VHJhbnNmZXJCdWlsZGVyKClcbiAgICAgICAgLmFtb3VudCgnOTAwMzQyMzUyMzUzMjInKVxuICAgICAgICAudG8oeyBhZGRyZXNzOiAnNUZmcDF3SkNQdTRoelZEVG83WGFNTHFaU3ZTYWR5VVFteFdQRHc3NENCakVDU29xJyB9KVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyIH0pXG4gICAgICAgIC50byh7IGFkZHJlc3M6IHJlY2VpdmVyLmFkZHJlc3MgfSlcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJylcbiAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMjAwIH0pXG4gICAgICAgIC5mZWUoeyBhbW91bnQ6IDAsIHR5cGU6ICd0aXAnIH0pO1xuICAgICAgdHJhbnNmZXJCdWlsZGVyLmFkZFNpZ25hdHVyZSh7IHB1YjogZG90S2V5UGFpci5nZXRLZXlzKCkucHViIH0sIHJhd1NpZ25hdHVyZSk7XG4gICAgICBzaWduZWRUcmFuc2FjdGlvbiA9IGF3YWl0IHRyYW5zZmVyQnVpbGRlci5idWlsZCgpO1xuICAgICAgc2lnbmVkVHJhbnNhY3Rpb24uc2lnbmF0dXJlLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICBzaWduZWRUcmFuc2FjdGlvbi5zaWduYXR1cmVbMF0uc2hvdWxkLmVxdWFsKHJhd1NpZ25hdHVyZS50b1N0cmluZygnaGV4JykpO1xuXG4gICAgICBjb25zdCByZWJ1aWx0VHJhbnNhY3Rpb24gPSBhd2FpdCBmYWN0b3J5XG4gICAgICAgIC5mcm9tKHNpZ25lZFRyYW5zYWN0aW9uLnRvQnJvYWRjYXN0Rm9ybWF0KCkpXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2soJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgICByZWJ1aWx0VHJhbnNhY3Rpb24uc2lnbmF0dXJlWzBdLnNob3VsZC5lcXVhbChyYXdTaWduYXR1cmUudG9TdHJpbmcoJ2hleCcpKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=moveStakeBuilder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"moveStakeBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/moveStakeBuilder.ts"],"names":[],"mappings":""}