@bitgo-beta/utxo-staking 1.1.1-beta.84 → 1.1.1-beta.841
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.
- package/dist/cjs/scripts/babylon-sync.d.ts +2 -0
- package/dist/cjs/scripts/babylon-sync.d.ts.map +1 -0
- package/dist/cjs/scripts/babylon-sync.js +126 -0
- package/dist/cjs/src/babylon/delegationMessage.d.ts +38 -0
- package/dist/cjs/src/babylon/delegationMessage.d.ts.map +1 -0
- package/dist/cjs/src/babylon/delegationMessage.js +285 -0
- package/dist/cjs/src/babylon/descriptor.d.ts +48 -0
- package/dist/cjs/src/babylon/descriptor.d.ts.map +1 -0
- package/dist/cjs/src/babylon/descriptor.js +97 -0
- package/dist/cjs/src/babylon/index.d.ts +6 -0
- package/dist/cjs/src/babylon/index.d.ts.map +1 -0
- package/dist/cjs/src/babylon/index.js +49 -0
- package/dist/cjs/src/babylon/network.d.ts +7 -0
- package/dist/cjs/src/babylon/network.d.ts.map +1 -0
- package/dist/cjs/src/babylon/network.js +66 -0
- package/dist/cjs/src/babylon/params.mainnet.json +152 -0
- package/dist/cjs/src/babylon/params.testnet.json +212 -0
- package/dist/cjs/src/babylon/parseDescriptor.d.ts +26 -0
- package/dist/cjs/src/babylon/parseDescriptor.d.ts.map +1 -0
- package/dist/cjs/src/babylon/parseDescriptor.js +159 -0
- package/dist/cjs/src/babylon/stakingManager.d.ts +6 -0
- package/dist/cjs/src/babylon/stakingManager.d.ts.map +1 -0
- package/dist/cjs/src/babylon/stakingManager.js +120 -0
- package/dist/cjs/src/babylon/stakingParams.d.ts +40 -0
- package/dist/cjs/src/babylon/stakingParams.d.ts.map +1 -0
- package/dist/cjs/src/babylon/stakingParams.js +132 -0
- package/dist/cjs/src/babylon/undelegation/UndelegationResponse.d.ts +24 -0
- package/dist/cjs/src/babylon/undelegation/UndelegationResponse.d.ts.map +1 -0
- package/dist/cjs/src/babylon/undelegation/UndelegationResponse.js +55 -0
- package/dist/cjs/src/babylon/undelegation/index.d.ts +3 -0
- package/dist/cjs/src/babylon/undelegation/index.d.ts.map +1 -0
- package/dist/{src → cjs/src/babylon/undelegation}/index.js +3 -4
- package/dist/cjs/src/babylon/undelegation/unbonding.d.ts +16 -0
- package/dist/cjs/src/babylon/undelegation/unbonding.d.ts.map +1 -0
- package/dist/cjs/src/babylon/undelegation/unbonding.js +111 -0
- package/dist/cjs/src/coreDao/descriptor.d.ts.map +1 -0
- package/dist/cjs/src/coreDao/descriptor.js +38 -0
- package/dist/cjs/src/coreDao/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/coreDao/index.js +1 -1
- package/dist/cjs/src/coreDao/opReturn.d.ts.map +1 -0
- package/dist/cjs/src/coreDao/opReturn.js +183 -0
- package/dist/{src → cjs/src}/coreDao/transaction.d.ts +16 -7
- package/dist/cjs/src/coreDao/transaction.d.ts.map +1 -0
- package/dist/cjs/src/coreDao/transaction.js +34 -0
- package/dist/cjs/src/index.d.ts +3 -0
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/cjs/src/index.js +39 -0
- package/dist/cjs/test/unit/babylon/bug71.d.ts +2 -0
- package/dist/cjs/test/unit/babylon/bug71.d.ts.map +1 -0
- package/dist/cjs/test/unit/babylon/bug71.js +108 -0
- package/dist/cjs/test/unit/babylon/key.utils.d.ts +6 -0
- package/dist/cjs/test/unit/babylon/key.utils.d.ts.map +1 -0
- package/dist/cjs/test/unit/babylon/key.utils.js +68 -0
- package/dist/cjs/test/unit/babylon/transactions.d.ts +2 -0
- package/dist/cjs/test/unit/babylon/transactions.d.ts.map +1 -0
- package/dist/cjs/test/unit/babylon/transactions.js +338 -0
- package/dist/cjs/test/unit/babylon/undelegation.d.ts +2 -0
- package/dist/cjs/test/unit/babylon/undelegation.d.ts.map +1 -0
- package/dist/cjs/test/unit/babylon/undelegation.js +156 -0
- package/dist/cjs/test/unit/babylon/vendor.utils.d.ts +13 -0
- package/dist/cjs/test/unit/babylon/vendor.utils.d.ts.map +1 -0
- package/dist/cjs/test/unit/babylon/vendor.utils.js +78 -0
- package/dist/cjs/test/unit/coreDao/descriptor.d.ts +2 -0
- package/dist/cjs/test/unit/coreDao/descriptor.d.ts.map +1 -0
- package/dist/cjs/test/unit/coreDao/descriptor.js +144 -0
- package/dist/cjs/test/unit/coreDao/opReturn.d.ts +2 -0
- package/dist/cjs/test/unit/coreDao/opReturn.d.ts.map +1 -0
- package/dist/cjs/test/unit/coreDao/opReturn.js +275 -0
- package/dist/cjs/test/unit/coreDao/utils.d.ts +5 -0
- package/dist/cjs/test/unit/coreDao/utils.d.ts.map +1 -0
- package/dist/cjs/test/unit/coreDao/utils.js +54 -0
- package/dist/cjs/test/unit/fixtures.utils.d.ts +9 -0
- package/dist/cjs/test/unit/fixtures.utils.d.ts.map +1 -0
- package/dist/cjs/test/unit/fixtures.utils.js +91 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/dist/esm/babylon/delegationMessage.d.ts +38 -0
- package/dist/esm/babylon/delegationMessage.d.ts.map +1 -0
- package/dist/esm/babylon/delegationMessage.js +239 -0
- package/dist/esm/babylon/descriptor.d.ts +48 -0
- package/dist/esm/babylon/descriptor.d.ts.map +1 -0
- package/dist/esm/babylon/descriptor.js +91 -0
- package/dist/esm/babylon/index.d.ts +6 -0
- package/dist/esm/babylon/index.d.ts.map +1 -0
- package/dist/esm/babylon/index.js +11 -0
- package/dist/esm/babylon/network.d.ts +7 -0
- package/dist/esm/babylon/network.d.ts.map +1 -0
- package/dist/esm/babylon/network.js +29 -0
- package/dist/esm/babylon/params.mainnet.json +152 -0
- package/dist/esm/babylon/params.testnet.json +212 -0
- package/dist/esm/babylon/parseDescriptor.d.ts +26 -0
- package/dist/esm/babylon/parseDescriptor.d.ts.map +1 -0
- package/dist/esm/babylon/parseDescriptor.js +155 -0
- package/dist/esm/babylon/stakingManager.d.ts +6 -0
- package/dist/esm/babylon/stakingManager.d.ts.map +1 -0
- package/dist/esm/babylon/stakingManager.js +83 -0
- package/dist/esm/babylon/stakingParams.d.ts +40 -0
- package/dist/esm/babylon/stakingParams.d.ts.map +1 -0
- package/dist/esm/babylon/stakingParams.js +86 -0
- package/dist/esm/babylon/undelegation/UndelegationResponse.d.ts +24 -0
- package/dist/esm/babylon/undelegation/UndelegationResponse.d.ts.map +1 -0
- package/dist/esm/babylon/undelegation/UndelegationResponse.js +18 -0
- package/dist/esm/babylon/undelegation/index.d.ts +3 -0
- package/dist/esm/babylon/undelegation/index.d.ts.map +1 -0
- package/dist/esm/babylon/undelegation/index.js +3 -0
- package/dist/esm/babylon/undelegation/unbonding.d.ts +16 -0
- package/dist/esm/babylon/undelegation/unbonding.d.ts.map +1 -0
- package/dist/esm/babylon/undelegation/unbonding.js +70 -0
- package/dist/esm/coreDao/descriptor.d.ts +18 -0
- package/dist/{src → esm}/coreDao/descriptor.d.ts.map +1 -1
- package/dist/esm/coreDao/descriptor.js +35 -0
- package/dist/esm/coreDao/index.d.ts +4 -0
- package/dist/esm/coreDao/index.js +4 -0
- package/dist/esm/coreDao/opReturn.d.ts +41 -0
- package/dist/esm/coreDao/opReturn.js +175 -0
- package/dist/esm/coreDao/transaction.d.ts +28 -0
- package/dist/esm/coreDao/transaction.d.ts.map +1 -0
- package/dist/esm/coreDao/transaction.js +30 -0
- package/dist/esm/index.d.ts +3 -0
- package/dist/{src → esm}/index.d.ts.map +1 -1
- package/dist/esm/index.js +3 -0
- package/package.json +42 -12
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -63
- package/dist/src/coreDao/descriptor.js +0 -37
- package/dist/src/coreDao/opReturn.js +0 -183
- package/dist/src/coreDao/transaction.d.ts.map +0 -1
- package/dist/src/coreDao/transaction.js +0 -26
- package/dist/src/index.d.ts +0 -3
- package/dist/src/transaction.d.ts +0 -32
- package/dist/src/transaction.d.ts.map +0 -1
- package/dist/src/transaction.js +0 -54
- /package/dist/{src → cjs/src}/coreDao/descriptor.d.ts +0 -0
- /package/dist/{src → cjs/src}/coreDao/index.d.ts +0 -0
- /package/dist/{src → cjs/src}/coreDao/opReturn.d.ts +0 -0
- /package/dist/{src → esm}/coreDao/index.d.ts.map +0 -0
- /package/dist/{src → esm}/coreDao/opReturn.d.ts.map +0 -0
|
@@ -0,0 +1,275 @@
|
|
|
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
|
+
const assert_1 = __importDefault(require("assert"));
|
|
7
|
+
const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
|
|
8
|
+
const testutil_1 = require("@bitgo-beta/utxo-core/testutil");
|
|
9
|
+
const coreDao_1 = require("../../../src/coreDao");
|
|
10
|
+
describe('OP_RETURN', function () {
|
|
11
|
+
const validVersion = 2;
|
|
12
|
+
const validChainId = coreDao_1.CORE_DAO_MAINNET_CHAIN_ID;
|
|
13
|
+
// random 20 byte buffers
|
|
14
|
+
const validDelegator = Buffer.alloc(20, utxo_lib_1.testutil.getKey('wasm-possum').publicKey);
|
|
15
|
+
const validValidator = Buffer.alloc(20, utxo_lib_1.testutil.getKey('possum-wasm').publicKey);
|
|
16
|
+
const validFee = 1;
|
|
17
|
+
const validRedeemScript = Buffer.from('522103a8295453660d5e212d55556666666666666666666666666666666666', 'hex');
|
|
18
|
+
const validTimelock = 800800;
|
|
19
|
+
let defaultScript;
|
|
20
|
+
before(async function () {
|
|
21
|
+
// https://docs.coredao.org/docs/Learn/products/btc-staking/design#op_return-output-1
|
|
22
|
+
const script = await (0, testutil_1.getFixture)('test/fixtures/coreDao/opReturn/documentation.txt', undefined);
|
|
23
|
+
(0, assert_1.default)(typeof script === 'string');
|
|
24
|
+
defaultScript = script;
|
|
25
|
+
});
|
|
26
|
+
describe('createCoreDaoOpReturnOutputScript', function () {
|
|
27
|
+
it('should throw if invalid parameters are passed', function () {
|
|
28
|
+
assert_1.default.throws(() => (0, coreDao_1.createCoreDaoOpReturnOutputScript)({
|
|
29
|
+
version: 292,
|
|
30
|
+
chainId: validChainId,
|
|
31
|
+
delegator: validDelegator,
|
|
32
|
+
validator: validValidator,
|
|
33
|
+
fee: validFee,
|
|
34
|
+
timelock: validTimelock,
|
|
35
|
+
}));
|
|
36
|
+
assert_1.default.throws(() => (0, coreDao_1.createCoreDaoOpReturnOutputScript)({
|
|
37
|
+
version: validVersion,
|
|
38
|
+
chainId: Buffer.alloc(32, 0),
|
|
39
|
+
delegator: validDelegator,
|
|
40
|
+
validator: validValidator,
|
|
41
|
+
fee: validFee,
|
|
42
|
+
timelock: validTimelock,
|
|
43
|
+
}));
|
|
44
|
+
assert_1.default.throws(() => (0, coreDao_1.createCoreDaoOpReturnOutputScript)({
|
|
45
|
+
version: validVersion,
|
|
46
|
+
chainId: validChainId,
|
|
47
|
+
delegator: Buffer.alloc(19, 0),
|
|
48
|
+
validator: validValidator,
|
|
49
|
+
fee: validFee,
|
|
50
|
+
timelock: validTimelock,
|
|
51
|
+
}));
|
|
52
|
+
assert_1.default.throws(() => (0, coreDao_1.createCoreDaoOpReturnOutputScript)({
|
|
53
|
+
version: validVersion,
|
|
54
|
+
chainId: validChainId,
|
|
55
|
+
delegator: validDelegator,
|
|
56
|
+
validator: Buffer.alloc(19, 0),
|
|
57
|
+
fee: validFee,
|
|
58
|
+
timelock: validTimelock,
|
|
59
|
+
}));
|
|
60
|
+
assert_1.default.throws(() => (0, coreDao_1.createCoreDaoOpReturnOutputScript)({
|
|
61
|
+
version: validVersion,
|
|
62
|
+
chainId: validChainId,
|
|
63
|
+
delegator: validDelegator,
|
|
64
|
+
validator: validValidator,
|
|
65
|
+
fee: 256,
|
|
66
|
+
timelock: validTimelock,
|
|
67
|
+
}));
|
|
68
|
+
assert_1.default.throws(() => (0, coreDao_1.createCoreDaoOpReturnOutputScript)({
|
|
69
|
+
version: validVersion,
|
|
70
|
+
chainId: validChainId,
|
|
71
|
+
delegator: validDelegator,
|
|
72
|
+
validator: validValidator,
|
|
73
|
+
fee: validFee,
|
|
74
|
+
timelock: -1,
|
|
75
|
+
}));
|
|
76
|
+
});
|
|
77
|
+
it('should throw if the length of the script is too long', function () {
|
|
78
|
+
assert_1.default.throws(() => (0, coreDao_1.createCoreDaoOpReturnOutputScript)({
|
|
79
|
+
version: validVersion,
|
|
80
|
+
chainId: validChainId,
|
|
81
|
+
delegator: validDelegator,
|
|
82
|
+
validator: validValidator,
|
|
83
|
+
fee: validFee,
|
|
84
|
+
redeemScript: Buffer.alloc(100),
|
|
85
|
+
}));
|
|
86
|
+
});
|
|
87
|
+
it('should return a buffer with the correct length', function () {
|
|
88
|
+
const script = (0, coreDao_1.createCoreDaoOpReturnOutputScript)({
|
|
89
|
+
version: validVersion,
|
|
90
|
+
chainId: validChainId,
|
|
91
|
+
delegator: validDelegator,
|
|
92
|
+
validator: validValidator,
|
|
93
|
+
fee: validFee,
|
|
94
|
+
timelock: validTimelock,
|
|
95
|
+
});
|
|
96
|
+
// Make sure that the first byte is the OP_RETURN opcode
|
|
97
|
+
assert_1.default.strictEqual(script[0], 0x6a);
|
|
98
|
+
// Make sure that the length of the script matches what is in the buffer
|
|
99
|
+
assert_1.default.strictEqual(
|
|
100
|
+
// We do not count the OP_RETURN opcode or the bytes for the length
|
|
101
|
+
script.length - 2, script[1]);
|
|
102
|
+
});
|
|
103
|
+
it('should have the correct placement of the values provided with a redeem script', function () {
|
|
104
|
+
// This should produce an Op_RETURN that needs the extra push bytes for the length
|
|
105
|
+
const script = (0, coreDao_1.createCoreDaoOpReturnOutputScript)({
|
|
106
|
+
version: validVersion,
|
|
107
|
+
chainId: validChainId,
|
|
108
|
+
delegator: validDelegator,
|
|
109
|
+
validator: validValidator,
|
|
110
|
+
fee: validFee,
|
|
111
|
+
redeemScript: validRedeemScript,
|
|
112
|
+
});
|
|
113
|
+
// Make sure that the first byte is the OP_RETURN opcode
|
|
114
|
+
assert_1.default.strictEqual(script[0], 0x6a);
|
|
115
|
+
// Make sure that the length of the script matches what is in the buffer
|
|
116
|
+
assert_1.default.strictEqual(script[1], 0x4c);
|
|
117
|
+
assert_1.default.strictEqual(
|
|
118
|
+
// We do not count the OP_RETURN opcode or the length + pushbytes
|
|
119
|
+
script.length - 3, script[2]);
|
|
120
|
+
// Satoshi plus identifier
|
|
121
|
+
assert_1.default.deepStrictEqual(script.subarray(3, 7).toString('hex'), coreDao_1.CORE_DAO_SATOSHI_PLUS_IDENTIFIER.toString('hex'));
|
|
122
|
+
// Make sure that the version is correct
|
|
123
|
+
assert_1.default.strictEqual(script[7], validVersion);
|
|
124
|
+
// Make sure that the chainId is correct
|
|
125
|
+
assert_1.default.deepStrictEqual(script.subarray(8, 10).toString('hex'), validChainId.toString('hex'));
|
|
126
|
+
// Make sure that the delegator is correct
|
|
127
|
+
assert_1.default.deepStrictEqual(script.subarray(10, 30).toString('hex'), validDelegator.toString('hex'));
|
|
128
|
+
// Make sure that the validator is correct
|
|
129
|
+
assert_1.default.deepStrictEqual(script.subarray(30, 50).toString('hex'), validValidator.toString('hex'));
|
|
130
|
+
// Make sure that the fee is correct
|
|
131
|
+
assert_1.default.strictEqual(script[50], validFee);
|
|
132
|
+
// Make sure that the redeemScript is correct
|
|
133
|
+
assert_1.default.deepStrictEqual(script.subarray(51, 51 + validRedeemScript.length).toString('hex'), validRedeemScript.toString('hex'));
|
|
134
|
+
});
|
|
135
|
+
it('should have the correct placement of the values provided with a blockheight timelock', function () {
|
|
136
|
+
// This should produce an Op_RETURN that needs the extra push bytes for the length
|
|
137
|
+
const script = (0, coreDao_1.createCoreDaoOpReturnOutputScript)({
|
|
138
|
+
version: validVersion,
|
|
139
|
+
chainId: validChainId,
|
|
140
|
+
delegator: validDelegator,
|
|
141
|
+
validator: validValidator,
|
|
142
|
+
fee: validFee,
|
|
143
|
+
timelock: validTimelock,
|
|
144
|
+
});
|
|
145
|
+
// Make sure that the first byte is the OP_RETURN opcode
|
|
146
|
+
assert_1.default.strictEqual(script[0], 0x6a);
|
|
147
|
+
// Make sure that the length of the script matches what is in the buffer
|
|
148
|
+
assert_1.default.strictEqual(
|
|
149
|
+
// We do not count the OP_RETURN opcode or the length
|
|
150
|
+
script.length - 2, script[1]);
|
|
151
|
+
// Satoshi plus identifier
|
|
152
|
+
assert_1.default.deepStrictEqual(script.subarray(2, 6).toString('hex'), coreDao_1.CORE_DAO_SATOSHI_PLUS_IDENTIFIER.toString('hex'));
|
|
153
|
+
// Make sure that the version is correct
|
|
154
|
+
assert_1.default.strictEqual(script[6], validVersion);
|
|
155
|
+
// Make sure that the chainId is correct
|
|
156
|
+
assert_1.default.deepStrictEqual(script.subarray(7, 9).toString('hex'), validChainId.toString('hex'));
|
|
157
|
+
// Make sure that the delegator is correct
|
|
158
|
+
assert_1.default.deepStrictEqual(script.subarray(9, 29).toString('hex'), validDelegator.toString('hex'));
|
|
159
|
+
// Make sure that the validator is correct
|
|
160
|
+
assert_1.default.deepStrictEqual(script.subarray(29, 49).toString('hex'), validValidator.toString('hex'));
|
|
161
|
+
// Make sure that the fee is correct
|
|
162
|
+
assert_1.default.strictEqual(script[49], validFee);
|
|
163
|
+
// Make sure that the redeemScript is correct
|
|
164
|
+
assert_1.default.deepStrictEqual(script.subarray(50, 54).toString('hex'), (0, coreDao_1.encodeTimelock)(validTimelock).toString('hex'));
|
|
165
|
+
assert_1.default.deepStrictEqual((0, coreDao_1.decodeTimelock)(script.subarray(50, 54)), validTimelock);
|
|
166
|
+
});
|
|
167
|
+
it('should have the correct placement of the values provided with a time timelock', function () {
|
|
168
|
+
// This should produce an Op_RETURN that needs the extra push bytes for the length
|
|
169
|
+
const timelock = new Date('2022-01-01T00:00:00Z').getTime() / 1000;
|
|
170
|
+
const script = (0, coreDao_1.createCoreDaoOpReturnOutputScript)({
|
|
171
|
+
version: validVersion,
|
|
172
|
+
chainId: validChainId,
|
|
173
|
+
delegator: validDelegator,
|
|
174
|
+
validator: validValidator,
|
|
175
|
+
fee: validFee,
|
|
176
|
+
timelock,
|
|
177
|
+
});
|
|
178
|
+
// Make sure that the first byte is the OP_RETURN opcode
|
|
179
|
+
assert_1.default.strictEqual(script[0], 0x6a);
|
|
180
|
+
// Make sure that the length of the script matches what is in the buffer
|
|
181
|
+
assert_1.default.strictEqual(
|
|
182
|
+
// We do not count the OP_RETURN opcode or the length
|
|
183
|
+
script.length - 2, script[1]);
|
|
184
|
+
// Satoshi plus identifier
|
|
185
|
+
assert_1.default.deepStrictEqual(script.subarray(2, 6).toString('hex'), coreDao_1.CORE_DAO_SATOSHI_PLUS_IDENTIFIER.toString('hex'));
|
|
186
|
+
// Make sure that the version is correct
|
|
187
|
+
assert_1.default.strictEqual(script[6], validVersion);
|
|
188
|
+
// Make sure that the chainId is correct
|
|
189
|
+
assert_1.default.deepStrictEqual(script.subarray(7, 9).toString('hex'), validChainId.toString('hex'));
|
|
190
|
+
// Make sure that the delegator is correct
|
|
191
|
+
assert_1.default.deepStrictEqual(script.subarray(9, 29).toString('hex'), validDelegator.toString('hex'));
|
|
192
|
+
// Make sure that the validator is correct
|
|
193
|
+
assert_1.default.deepStrictEqual(script.subarray(29, 49).toString('hex'), validValidator.toString('hex'));
|
|
194
|
+
// Make sure that the fee is correct
|
|
195
|
+
assert_1.default.strictEqual(script[49], validFee);
|
|
196
|
+
// Make sure that the redeemScript is correct
|
|
197
|
+
assert_1.default.deepStrictEqual(script.subarray(50, 54).toString('hex'), (0, coreDao_1.encodeTimelock)(timelock).toString('hex'));
|
|
198
|
+
assert_1.default.deepStrictEqual((0, coreDao_1.decodeTimelock)(script.subarray(50, 54)), timelock);
|
|
199
|
+
});
|
|
200
|
+
it('should recreate the example OP_RETURN correctly', function () {
|
|
201
|
+
assert_1.default.deepStrictEqual((0, coreDao_1.createCoreDaoOpReturnOutputScript)({
|
|
202
|
+
version: 1,
|
|
203
|
+
chainId: Buffer.from('045b', 'hex'),
|
|
204
|
+
delegator: Buffer.from('de60b7d0e6b758ca5dd8c61d377a2c5f1af51ec1', 'hex'),
|
|
205
|
+
validator: Buffer.from('a9e209f5ea0036c8c2f41078a3cebee57d8a47d5', 'hex'),
|
|
206
|
+
fee: 1,
|
|
207
|
+
redeemScript: Buffer.from('041f5e0e66b17576a914c4b8ae927ff2b9ce218e20bf06d425d6b68424fd88ac', 'hex'),
|
|
208
|
+
}).toString('hex'), defaultScript);
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
describe('parseCoreDaoOpReturnOutputScript', function () {
|
|
212
|
+
it('should parse a valid script with a timelock', function () {
|
|
213
|
+
const script = (0, coreDao_1.createCoreDaoOpReturnOutputScript)({
|
|
214
|
+
version: validVersion,
|
|
215
|
+
chainId: validChainId,
|
|
216
|
+
delegator: validDelegator,
|
|
217
|
+
validator: validValidator,
|
|
218
|
+
fee: validFee,
|
|
219
|
+
timelock: validTimelock,
|
|
220
|
+
});
|
|
221
|
+
const parsed = (0, coreDao_1.parseCoreDaoOpReturnOutputScript)(script);
|
|
222
|
+
assert_1.default.strictEqual(parsed.version, validVersion);
|
|
223
|
+
assert_1.default.deepStrictEqual(parsed.chainId, validChainId);
|
|
224
|
+
assert_1.default.deepStrictEqual(parsed.delegator, validDelegator);
|
|
225
|
+
assert_1.default.deepStrictEqual(parsed.validator, validValidator);
|
|
226
|
+
assert_1.default.strictEqual(parsed.fee, validFee);
|
|
227
|
+
(0, assert_1.default)('timelock' in parsed);
|
|
228
|
+
assert_1.default.deepStrictEqual(parsed.timelock, validTimelock);
|
|
229
|
+
});
|
|
230
|
+
it('should parse a valid script with a redeem script', function () {
|
|
231
|
+
const script = (0, coreDao_1.createCoreDaoOpReturnOutputScript)({
|
|
232
|
+
version: validVersion,
|
|
233
|
+
chainId: validChainId,
|
|
234
|
+
delegator: validDelegator,
|
|
235
|
+
validator: validValidator,
|
|
236
|
+
fee: validFee,
|
|
237
|
+
redeemScript: validRedeemScript,
|
|
238
|
+
});
|
|
239
|
+
const parsed = (0, coreDao_1.parseCoreDaoOpReturnOutputScript)(script);
|
|
240
|
+
assert_1.default.strictEqual(parsed.version, validVersion);
|
|
241
|
+
assert_1.default.deepStrictEqual(parsed.chainId, validChainId);
|
|
242
|
+
assert_1.default.deepStrictEqual(parsed.delegator, validDelegator);
|
|
243
|
+
assert_1.default.deepStrictEqual(parsed.validator, validValidator);
|
|
244
|
+
assert_1.default.strictEqual(parsed.fee, validFee);
|
|
245
|
+
(0, assert_1.default)('redeemScript' in parsed);
|
|
246
|
+
assert_1.default.deepStrictEqual(parsed.redeemScript, validRedeemScript);
|
|
247
|
+
});
|
|
248
|
+
it('should parse valid opreturn script from testnet', async function () {
|
|
249
|
+
// Source: https://mempool.space/testnet/tx/66ed4cea26a410248a6d87f14b2bca514f33920c54d4af63ed46a903793115d5
|
|
250
|
+
const baseFixturePath = 'test/fixtures/coreDao/opReturn/66ed4cea26a410248a6d87f14b2bca514f33920c54d4af63ed46a903793115d5';
|
|
251
|
+
const opReturnHex = await (0, testutil_1.getFixture)(baseFixturePath + '.txt', undefined);
|
|
252
|
+
(0, assert_1.default)(typeof opReturnHex === 'string');
|
|
253
|
+
const parsed = (0, coreDao_1.parseCoreDaoOpReturnOutputScript)(Buffer.from(opReturnHex, 'hex'));
|
|
254
|
+
const parsedFixture = await (0, testutil_1.getFixture)(baseFixturePath + '.json', JSON.parse((0, coreDao_1.toString)(parsed)));
|
|
255
|
+
assert_1.default.deepStrictEqual((0, coreDao_1.toString)(parsed), JSON.stringify(parsedFixture));
|
|
256
|
+
});
|
|
257
|
+
it('should fail if there is an invalid op-return', function () {
|
|
258
|
+
const script = defaultScript.replace('6a4c50', '6b4c50');
|
|
259
|
+
assert_1.default.throws(() => (0, coreDao_1.parseCoreDaoOpReturnOutputScript)(Buffer.from(script, 'hex')));
|
|
260
|
+
});
|
|
261
|
+
it('should fail if the length is incorrect', function () {
|
|
262
|
+
const script = defaultScript.replace('4c50', '4c51');
|
|
263
|
+
assert_1.default.throws(() => (0, coreDao_1.parseCoreDaoOpReturnOutputScript)(Buffer.from(script, 'hex')));
|
|
264
|
+
});
|
|
265
|
+
it('should fail if the satoshi+ identifier is incorrect', function () {
|
|
266
|
+
const script = defaultScript.replace('5341542b', '5341532b');
|
|
267
|
+
assert_1.default.throws(() => (0, coreDao_1.parseCoreDaoOpReturnOutputScript)(Buffer.from(script, 'hex')));
|
|
268
|
+
});
|
|
269
|
+
it('should fail if the chainId is incorrect', function () {
|
|
270
|
+
const script = defaultScript.replace('045b', '0454');
|
|
271
|
+
assert_1.default.throws(() => (0, coreDao_1.parseCoreDaoOpReturnOutputScript)(Buffer.from(script, 'hex')));
|
|
272
|
+
});
|
|
273
|
+
});
|
|
274
|
+
});
|
|
275
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BSZXR1cm4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvY29yZURhby9vcFJldHVybi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUU1QixtREFBZ0Q7QUFDaEQsNkRBQTREO0FBRTVELGtEQVE4QjtBQUU5QixRQUFRLENBQUMsV0FBVyxFQUFFO0lBQ3BCLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQztJQUN2QixNQUFNLFlBQVksR0FBRyxtQ0FBeUIsQ0FBQztJQUMvQyx5QkFBeUI7SUFDekIsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsbUJBQVEsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbEYsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsbUJBQVEsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbEYsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxnRUFBZ0UsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvRyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUM7SUFDN0IsSUFBSSxhQUFxQixDQUFDO0lBRTFCLE1BQU0sQ0FBQyxLQUFLO1FBQ1YscUZBQXFGO1FBQ3JGLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBQSxxQkFBVSxFQUFDLGtEQUFrRCxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQy9GLElBQUEsZ0JBQU0sRUFBQyxPQUFPLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQztRQUNuQyxhQUFhLEdBQUcsTUFBTSxDQUFDO0lBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG1DQUFtQyxFQUFFO1FBQzVDLEVBQUUsQ0FBQywrQ0FBK0MsRUFBRTtZQUNsRCxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FDakIsSUFBQSwyQ0FBaUMsRUFBQztnQkFDaEMsT0FBTyxFQUFFLEdBQUc7Z0JBQ1osT0FBTyxFQUFFLFlBQVk7Z0JBQ3JCLFNBQVMsRUFBRSxjQUFjO2dCQUN6QixTQUFTLEVBQUUsY0FBYztnQkFDekIsR0FBRyxFQUFFLFFBQVE7Z0JBQ2IsUUFBUSxFQUFFLGFBQWE7YUFDeEIsQ0FBQyxDQUNILENBQUM7WUFDRixnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FDakIsSUFBQSwyQ0FBaUMsRUFBQztnQkFDaEMsT0FBTyxFQUFFLFlBQVk7Z0JBQ3JCLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzVCLFNBQVMsRUFBRSxjQUFjO2dCQUN6QixTQUFTLEVBQUUsY0FBYztnQkFDekIsR0FBRyxFQUFFLFFBQVE7Z0JBQ2IsUUFBUSxFQUFFLGFBQWE7YUFDeEIsQ0FBQyxDQUNILENBQUM7WUFDRixnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FDakIsSUFBQSwyQ0FBaUMsRUFBQztnQkFDaEMsT0FBTyxFQUFFLFlBQVk7Z0JBQ3JCLE9BQU8sRUFBRSxZQUFZO2dCQUNyQixTQUFTLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUM5QixTQUFTLEVBQUUsY0FBYztnQkFDekIsR0FBRyxFQUFFLFFBQVE7Z0JBQ2IsUUFBUSxFQUFFLGFBQWE7YUFDeEIsQ0FBQyxDQUNILENBQUM7WUFDRixnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FDakIsSUFBQSwyQ0FBaUMsRUFBQztnQkFDaEMsT0FBTyxFQUFFLFlBQVk7Z0JBQ3JCLE9BQU8sRUFBRSxZQUFZO2dCQUNyQixTQUFTLEVBQUUsY0FBYztnQkFDekIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDOUIsR0FBRyxFQUFFLFFBQVE7Z0JBQ2IsUUFBUSxFQUFFLGFBQWE7YUFDeEIsQ0FBQyxDQUNILENBQUM7WUFDRixnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FDakIsSUFBQSwyQ0FBaUMsRUFBQztnQkFDaEMsT0FBTyxFQUFFLFlBQVk7Z0JBQ3JCLE9BQU8sRUFBRSxZQUFZO2dCQUNyQixTQUFTLEVBQUUsY0FBYztnQkFDekIsU0FBUyxFQUFFLGNBQWM7Z0JBQ3pCLEdBQUcsRUFBRSxHQUFHO2dCQUNSLFFBQVEsRUFBRSxhQUFhO2FBQ3hCLENBQUMsQ0FDSCxDQUFDO1lBQ0YsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQ2pCLElBQUEsMkNBQWlDLEVBQUM7Z0JBQ2hDLE9BQU8sRUFBRSxZQUFZO2dCQUNyQixPQUFPLEVBQUUsWUFBWTtnQkFDckIsU0FBUyxFQUFFLGNBQWM7Z0JBQ3pCLFNBQVMsRUFBRSxjQUFjO2dCQUN6QixHQUFHLEVBQUUsUUFBUTtnQkFDYixRQUFRLEVBQUUsQ0FBQyxDQUFDO2FBQ2IsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxzREFBc0QsRUFBRTtZQUN6RCxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FDakIsSUFBQSwyQ0FBaUMsRUFBQztnQkFDaEMsT0FBTyxFQUFFLFlBQVk7Z0JBQ3JCLE9BQU8sRUFBRSxZQUFZO2dCQUNyQixTQUFTLEVBQUUsY0FBYztnQkFDekIsU0FBUyxFQUFFLGNBQWM7Z0JBQ3pCLEdBQUcsRUFBRSxRQUFRO2dCQUNiLFlBQVksRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUNoQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGdEQUFnRCxFQUFFO1lBQ25ELE1BQU0sTUFBTSxHQUFHLElBQUEsMkNBQWlDLEVBQUM7Z0JBQy9DLE9BQU8sRUFBRSxZQUFZO2dCQUNyQixPQUFPLEVBQUUsWUFBWTtnQkFDckIsU0FBUyxFQUFFLGNBQWM7Z0JBQ3pCLFNBQVMsRUFBRSxjQUFjO2dCQUN6QixHQUFHLEVBQUUsUUFBUTtnQkFDYixRQUFRLEVBQUUsYUFBYTthQUN4QixDQUFDLENBQUM7WUFDSCx3REFBd0Q7WUFDeEQsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3BDLHdFQUF3RTtZQUN4RSxnQkFBTSxDQUFDLFdBQVc7WUFDaEIsbUVBQW1FO1lBQ25FLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUNqQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQ1YsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtFQUErRSxFQUFFO1lBQ2xGLGtGQUFrRjtZQUNsRixNQUFNLE1BQU0sR0FBRyxJQUFBLDJDQUFpQyxFQUFDO2dCQUMvQyxPQUFPLEVBQUUsWUFBWTtnQkFDckIsT0FBTyxFQUFFLFlBQVk7Z0JBQ3JCLFNBQVMsRUFBRSxjQUFjO2dCQUN6QixTQUFTLEVBQUUsY0FBYztnQkFDekIsR0FBRyxFQUFFLFFBQVE7Z0JBQ2IsWUFBWSxFQUFFLGlCQUFpQjthQUNoQyxDQUFDLENBQUM7WUFDSCx3REFBd0Q7WUFDeEQsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3BDLHdFQUF3RTtZQUN4RSxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDcEMsZ0JBQU0sQ0FBQyxXQUFXO1lBQ2hCLGlFQUFpRTtZQUNqRSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDakIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUNWLENBQUM7WUFDRiwwQkFBMEI7WUFDMUIsZ0JBQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLDBDQUFnQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2hILHdDQUF3QztZQUN4QyxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDNUMsd0NBQXdDO1lBQ3hDLGdCQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDN0YsMENBQTBDO1lBQzFDLGdCQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDaEcsMENBQTBDO1lBQzFDLGdCQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDaEcsb0NBQW9DO1lBQ3BDLGdCQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN6Qyw2Q0FBNkM7WUFDN0MsZ0JBQU0sQ0FBQyxlQUFlLENBQ3BCLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQ2xFLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FDbEMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHNGQUFzRixFQUFFO1lBQ3pGLGtGQUFrRjtZQUNsRixNQUFNLE1BQU0sR0FBRyxJQUFBLDJDQUFpQyxFQUFDO2dCQUMvQyxPQUFPLEVBQUUsWUFBWTtnQkFDckIsT0FBTyxFQUFFLFlBQVk7Z0JBQ3JCLFNBQVMsRUFBRSxjQUFjO2dCQUN6QixTQUFTLEVBQUUsY0FBYztnQkFDekIsR0FBRyxFQUFFLFFBQVE7Z0JBQ2IsUUFBUSxFQUFFLGFBQWE7YUFDeEIsQ0FBQyxDQUFDO1lBQ0gsd0RBQXdEO1lBQ3hELGdCQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNwQyx3RUFBd0U7WUFDeEUsZ0JBQU0sQ0FBQyxXQUFXO1lBQ2hCLHFEQUFxRDtZQUNyRCxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDakIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUNWLENBQUM7WUFDRiwwQkFBMEI7WUFDMUIsZ0JBQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLDBDQUFnQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2hILHdDQUF3QztZQUN4QyxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDNUMsd0NBQXdDO1lBQ3hDLGdCQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDNUYsMENBQTBDO1lBQzFDLGdCQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDL0YsMENBQTBDO1lBQzFDLGdCQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDaEcsb0NBQW9DO1lBQ3BDLGdCQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN6Qyw2Q0FBNkM7WUFDN0MsZ0JBQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUEsd0JBQWMsRUFBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMvRyxnQkFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFBLHdCQUFjLEVBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNqRixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywrRUFBK0UsRUFBRTtZQUNsRixrRkFBa0Y7WUFDbEYsTUFBTSxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFDbkUsTUFBTSxNQUFNLEdBQUcsSUFBQSwyQ0FBaUMsRUFBQztnQkFDL0MsT0FBTyxFQUFFLFlBQVk7Z0JBQ3JCLE9BQU8sRUFBRSxZQUFZO2dCQUNyQixTQUFTLEVBQUUsY0FBYztnQkFDekIsU0FBUyxFQUFFLGNBQWM7Z0JBQ3pCLEdBQUcsRUFBRSxRQUFRO2dCQUNiLFFBQVE7YUFDVCxDQUFDLENBQUM7WUFDSCx3REFBd0Q7WUFDeEQsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3BDLHdFQUF3RTtZQUN4RSxnQkFBTSxDQUFDLFdBQVc7WUFDaEIscURBQXFEO1lBQ3JELE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUNqQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQ1YsQ0FBQztZQUNGLDBCQUEwQjtZQUMxQixnQkFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsMENBQWdDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDaEgsd0NBQXdDO1lBQ3hDLGdCQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUM1Qyx3Q0FBd0M7WUFDeEMsZ0JBQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUM1RiwwQ0FBMEM7WUFDMUMsZ0JBQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMvRiwwQ0FBMEM7WUFDMUMsZ0JBQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNoRyxvQ0FBb0M7WUFDcEMsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3pDLDZDQUE2QztZQUM3QyxnQkFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBQSx3QkFBYyxFQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzFHLGdCQUFNLENBQUMsZUFBZSxDQUFDLElBQUEsd0JBQWMsRUFBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzVFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGlEQUFpRCxFQUFFO1lBQ3BELGdCQUFNLENBQUMsZUFBZSxDQUNwQixJQUFBLDJDQUFpQyxFQUFDO2dCQUNoQyxPQUFPLEVBQUUsQ0FBQztnQkFDVixPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO2dCQUNuQyxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQywwQ0FBMEMsRUFBRSxLQUFLLENBQUM7Z0JBQ3pFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLDBDQUEwQyxFQUFFLEtBQUssQ0FBQztnQkFDekUsR0FBRyxFQUFFLENBQUM7Z0JBQ04sWUFBWSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0VBQWtFLEVBQUUsS0FBSyxDQUFDO2FBQ3JHLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQ2xCLGFBQWEsQ0FDZCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxrQ0FBa0MsRUFBRTtRQUMzQyxFQUFFLENBQUMsNkNBQTZDLEVBQUU7WUFDaEQsTUFBTSxNQUFNLEdBQUcsSUFBQSwyQ0FBaUMsRUFBQztnQkFDL0MsT0FBTyxFQUFFLFlBQVk7Z0JBQ3JCLE9BQU8sRUFBRSxZQUFZO2dCQUNyQixTQUFTLEVBQUUsY0FBYztnQkFDekIsU0FBUyxFQUFFLGNBQWM7Z0JBQ3pCLEdBQUcsRUFBRSxRQUFRO2dCQUNiLFFBQVEsRUFBRSxhQUFhO2FBQ3hCLENBQUMsQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLElBQUEsMENBQWdDLEVBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEQsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztZQUNqRCxnQkFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ3JELGdCQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDekQsZ0JBQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUN6RCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3pDLElBQUEsZ0JBQU0sRUFBQyxVQUFVLElBQUksTUFBTSxDQUFDLENBQUM7WUFDN0IsZ0JBQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxrREFBa0QsRUFBRTtZQUNyRCxNQUFNLE1BQU0sR0FBRyxJQUFBLDJDQUFpQyxFQUFDO2dCQUMvQyxPQUFPLEVBQUUsWUFBWTtnQkFDckIsT0FBTyxFQUFFLFlBQVk7Z0JBQ3JCLFNBQVMsRUFBRSxjQUFjO2dCQUN6QixTQUFTLEVBQUUsY0FBYztnQkFDekIsR0FBRyxFQUFFLFFBQVE7Z0JBQ2IsWUFBWSxFQUFFLGlCQUFpQjthQUNoQyxDQUFDLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFBLDBDQUFnQyxFQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hELGdCQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDakQsZ0JBQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztZQUNyRCxnQkFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQ3pELGdCQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDekQsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN6QyxJQUFBLGdCQUFNLEVBQUMsY0FBYyxJQUFJLE1BQU0sQ0FBQyxDQUFDO1lBQ2pDLGdCQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUNqRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxLQUFLO1lBQ3pELDRHQUE0RztZQUM1RyxNQUFNLGVBQWUsR0FDbkIsaUdBQWlHLENBQUM7WUFDcEcsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFBLHFCQUFVLEVBQUMsZUFBZSxHQUFHLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztZQUMxRSxJQUFBLGdCQUFNLEVBQUMsT0FBTyxXQUFXLEtBQUssUUFBUSxDQUFDLENBQUM7WUFDeEMsTUFBTSxNQUFNLEdBQUcsSUFBQSwwQ0FBZ0MsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2pGLE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBQSxxQkFBVSxFQUFDLGVBQWUsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFBLGtCQUFRLEVBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hHLGdCQUFNLENBQUMsZUFBZSxDQUFDLElBQUEsa0JBQVEsRUFBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDMUUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsOENBQThDLEVBQUU7WUFDakQsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDekQsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSwwQ0FBZ0MsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEYsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsd0NBQXdDLEVBQUU7WUFDM0MsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDckQsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSwwQ0FBZ0MsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEYsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscURBQXFELEVBQUU7WUFDeEQsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDN0QsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSwwQ0FBZ0MsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEYsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMseUNBQXlDLEVBQUU7WUFDNUMsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDckQsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSwwQ0FBZ0MsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgeyB0ZXN0dXRpbCB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IGdldEZpeHR1cmUgfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWNvcmUvdGVzdHV0aWwnO1xuXG5pbXBvcnQge1xuICBDT1JFX0RBT19NQUlOTkVUX0NIQUlOX0lELFxuICBDT1JFX0RBT19TQVRPU0hJX1BMVVNfSURFTlRJRklFUixcbiAgY3JlYXRlQ29yZURhb09wUmV0dXJuT3V0cHV0U2NyaXB0LFxuICBkZWNvZGVUaW1lbG9jayxcbiAgZW5jb2RlVGltZWxvY2ssXG4gIHBhcnNlQ29yZURhb09wUmV0dXJuT3V0cHV0U2NyaXB0LFxuICB0b1N0cmluZyxcbn0gZnJvbSAnLi4vLi4vLi4vc3JjL2NvcmVEYW8nO1xuXG5kZXNjcmliZSgnT1BfUkVUVVJOJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCB2YWxpZFZlcnNpb24gPSAyO1xuICBjb25zdCB2YWxpZENoYWluSWQgPSBDT1JFX0RBT19NQUlOTkVUX0NIQUlOX0lEO1xuICAvLyByYW5kb20gMjAgYnl0ZSBidWZmZXJzXG4gIGNvbnN0IHZhbGlkRGVsZWdhdG9yID0gQnVmZmVyLmFsbG9jKDIwLCB0ZXN0dXRpbC5nZXRLZXkoJ3dhc20tcG9zc3VtJykucHVibGljS2V5KTtcbiAgY29uc3QgdmFsaWRWYWxpZGF0b3IgPSBCdWZmZXIuYWxsb2MoMjAsIHRlc3R1dGlsLmdldEtleSgncG9zc3VtLXdhc20nKS5wdWJsaWNLZXkpO1xuICBjb25zdCB2YWxpZEZlZSA9IDE7XG4gIGNvbnN0IHZhbGlkUmVkZWVtU2NyaXB0ID0gQnVmZmVyLmZyb20oJzUyMjEwM2E4Mjk1NDUzNjYwZDVlMjEyZDU1NTU2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2JywgJ2hleCcpO1xuICBjb25zdCB2YWxpZFRpbWVsb2NrID0gODAwODAwO1xuICBsZXQgZGVmYXVsdFNjcmlwdDogc3RyaW5nO1xuXG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgLy8gaHR0cHM6Ly9kb2NzLmNvcmVkYW8ub3JnL2RvY3MvTGVhcm4vcHJvZHVjdHMvYnRjLXN0YWtpbmcvZGVzaWduI29wX3JldHVybi1vdXRwdXQtMVxuICAgIGNvbnN0IHNjcmlwdCA9IGF3YWl0IGdldEZpeHR1cmUoJ3Rlc3QvZml4dHVyZXMvY29yZURhby9vcFJldHVybi9kb2N1bWVudGF0aW9uLnR4dCcsIHVuZGVmaW5lZCk7XG4gICAgYXNzZXJ0KHR5cGVvZiBzY3JpcHQgPT09ICdzdHJpbmcnKTtcbiAgICBkZWZhdWx0U2NyaXB0ID0gc2NyaXB0O1xuICB9KTtcblxuICBkZXNjcmliZSgnY3JlYXRlQ29yZURhb09wUmV0dXJuT3V0cHV0U2NyaXB0JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgaW52YWxpZCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+XG4gICAgICAgIGNyZWF0ZUNvcmVEYW9PcFJldHVybk91dHB1dFNjcmlwdCh7XG4gICAgICAgICAgdmVyc2lvbjogMjkyLFxuICAgICAgICAgIGNoYWluSWQ6IHZhbGlkQ2hhaW5JZCxcbiAgICAgICAgICBkZWxlZ2F0b3I6IHZhbGlkRGVsZWdhdG9yLFxuICAgICAgICAgIHZhbGlkYXRvcjogdmFsaWRWYWxpZGF0b3IsXG4gICAgICAgICAgZmVlOiB2YWxpZEZlZSxcbiAgICAgICAgICB0aW1lbG9jazogdmFsaWRUaW1lbG9jayxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+XG4gICAgICAgIGNyZWF0ZUNvcmVEYW9PcFJldHVybk91dHB1dFNjcmlwdCh7XG4gICAgICAgICAgdmVyc2lvbjogdmFsaWRWZXJzaW9uLFxuICAgICAgICAgIGNoYWluSWQ6IEJ1ZmZlci5hbGxvYygzMiwgMCksXG4gICAgICAgICAgZGVsZWdhdG9yOiB2YWxpZERlbGVnYXRvcixcbiAgICAgICAgICB2YWxpZGF0b3I6IHZhbGlkVmFsaWRhdG9yLFxuICAgICAgICAgIGZlZTogdmFsaWRGZWUsXG4gICAgICAgICAgdGltZWxvY2s6IHZhbGlkVGltZWxvY2ssXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PlxuICAgICAgICBjcmVhdGVDb3JlRGFvT3BSZXR1cm5PdXRwdXRTY3JpcHQoe1xuICAgICAgICAgIHZlcnNpb246IHZhbGlkVmVyc2lvbixcbiAgICAgICAgICBjaGFpbklkOiB2YWxpZENoYWluSWQsXG4gICAgICAgICAgZGVsZWdhdG9yOiBCdWZmZXIuYWxsb2MoMTksIDApLFxuICAgICAgICAgIHZhbGlkYXRvcjogdmFsaWRWYWxpZGF0b3IsXG4gICAgICAgICAgZmVlOiB2YWxpZEZlZSxcbiAgICAgICAgICB0aW1lbG9jazogdmFsaWRUaW1lbG9jayxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+XG4gICAgICAgIGNyZWF0ZUNvcmVEYW9PcFJldHVybk91dHB1dFNjcmlwdCh7XG4gICAgICAgICAgdmVyc2lvbjogdmFsaWRWZXJzaW9uLFxuICAgICAgICAgIGNoYWluSWQ6IHZhbGlkQ2hhaW5JZCxcbiAgICAgICAgICBkZWxlZ2F0b3I6IHZhbGlkRGVsZWdhdG9yLFxuICAgICAgICAgIHZhbGlkYXRvcjogQnVmZmVyLmFsbG9jKDE5LCAwKSxcbiAgICAgICAgICBmZWU6IHZhbGlkRmVlLFxuICAgICAgICAgIHRpbWVsb2NrOiB2YWxpZFRpbWVsb2NrLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT5cbiAgICAgICAgY3JlYXRlQ29yZURhb09wUmV0dXJuT3V0cHV0U2NyaXB0KHtcbiAgICAgICAgICB2ZXJzaW9uOiB2YWxpZFZlcnNpb24sXG4gICAgICAgICAgY2hhaW5JZDogdmFsaWRDaGFpbklkLFxuICAgICAgICAgIGRlbGVnYXRvcjogdmFsaWREZWxlZ2F0b3IsXG4gICAgICAgICAgdmFsaWRhdG9yOiB2YWxpZFZhbGlkYXRvcixcbiAgICAgICAgICBmZWU6IDI1NixcbiAgICAgICAgICB0aW1lbG9jazogdmFsaWRUaW1lbG9jayxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+XG4gICAgICAgIGNyZWF0ZUNvcmVEYW9PcFJldHVybk91dHB1dFNjcmlwdCh7XG4gICAgICAgICAgdmVyc2lvbjogdmFsaWRWZXJzaW9uLFxuICAgICAgICAgIGNoYWluSWQ6IHZhbGlkQ2hhaW5JZCxcbiAgICAgICAgICBkZWxlZ2F0b3I6IHZhbGlkRGVsZWdhdG9yLFxuICAgICAgICAgIHZhbGlkYXRvcjogdmFsaWRWYWxpZGF0b3IsXG4gICAgICAgICAgZmVlOiB2YWxpZEZlZSxcbiAgICAgICAgICB0aW1lbG9jazogLTEsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBpZiB0aGUgbGVuZ3RoIG9mIHRoZSBzY3JpcHQgaXMgdG9vIGxvbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+XG4gICAgICAgIGNyZWF0ZUNvcmVEYW9PcFJldHVybk91dHB1dFNjcmlwdCh7XG4gICAgICAgICAgdmVyc2lvbjogdmFsaWRWZXJzaW9uLFxuICAgICAgICAgIGNoYWluSWQ6IHZhbGlkQ2hhaW5JZCxcbiAgICAgICAgICBkZWxlZ2F0b3I6IHZhbGlkRGVsZWdhdG9yLFxuICAgICAgICAgIHZhbGlkYXRvcjogdmFsaWRWYWxpZGF0b3IsXG4gICAgICAgICAgZmVlOiB2YWxpZEZlZSxcbiAgICAgICAgICByZWRlZW1TY3JpcHQ6IEJ1ZmZlci5hbGxvYygxMDApLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgYnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgbGVuZ3RoJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2NyaXB0ID0gY3JlYXRlQ29yZURhb09wUmV0dXJuT3V0cHV0U2NyaXB0KHtcbiAgICAgICAgdmVyc2lvbjogdmFsaWRWZXJzaW9uLFxuICAgICAgICBjaGFpbklkOiB2YWxpZENoYWluSWQsXG4gICAgICAgIGRlbGVnYXRvcjogdmFsaWREZWxlZ2F0b3IsXG4gICAgICAgIHZhbGlkYXRvcjogdmFsaWRWYWxpZGF0b3IsXG4gICAgICAgIGZlZTogdmFsaWRGZWUsXG4gICAgICAgIHRpbWVsb2NrOiB2YWxpZFRpbWVsb2NrLFxuICAgICAgfSk7XG4gICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgZmlyc3QgYnl0ZSBpcyB0aGUgT1BfUkVUVVJOIG9wY29kZVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNjcmlwdFswXSwgMHg2YSk7XG4gICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgbGVuZ3RoIG9mIHRoZSBzY3JpcHQgbWF0Y2hlcyB3aGF0IGlzIGluIHRoZSBidWZmZXJcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgICAgLy8gV2UgZG8gbm90IGNvdW50IHRoZSBPUF9SRVRVUk4gb3Bjb2RlIG9yIHRoZSBieXRlcyBmb3IgdGhlIGxlbmd0aFxuICAgICAgICBzY3JpcHQubGVuZ3RoIC0gMixcbiAgICAgICAgc2NyaXB0WzFdXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYXZlIHRoZSBjb3JyZWN0IHBsYWNlbWVudCBvZiB0aGUgdmFsdWVzIHByb3ZpZGVkIHdpdGggYSByZWRlZW0gc2NyaXB0JywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGhpcyBzaG91bGQgcHJvZHVjZSBhbiBPcF9SRVRVUk4gdGhhdCBuZWVkcyB0aGUgZXh0cmEgcHVzaCBieXRlcyBmb3IgdGhlIGxlbmd0aFxuICAgICAgY29uc3Qgc2NyaXB0ID0gY3JlYXRlQ29yZURhb09wUmV0dXJuT3V0cHV0U2NyaXB0KHtcbiAgICAgICAgdmVyc2lvbjogdmFsaWRWZXJzaW9uLFxuICAgICAgICBjaGFpbklkOiB2YWxpZENoYWluSWQsXG4gICAgICAgIGRlbGVnYXRvcjogdmFsaWREZWxlZ2F0b3IsXG4gICAgICAgIHZhbGlkYXRvcjogdmFsaWRWYWxpZGF0b3IsXG4gICAgICAgIGZlZTogdmFsaWRGZWUsXG4gICAgICAgIHJlZGVlbVNjcmlwdDogdmFsaWRSZWRlZW1TY3JpcHQsXG4gICAgICB9KTtcbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBmaXJzdCBieXRlIGlzIHRoZSBPUF9SRVRVUk4gb3Bjb2RlXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2NyaXB0WzBdLCAweDZhKTtcbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBsZW5ndGggb2YgdGhlIHNjcmlwdCBtYXRjaGVzIHdoYXQgaXMgaW4gdGhlIGJ1ZmZlclxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNjcmlwdFsxXSwgMHg0Yyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICAgIC8vIFdlIGRvIG5vdCBjb3VudCB0aGUgT1BfUkVUVVJOIG9wY29kZSBvciB0aGUgbGVuZ3RoICsgcHVzaGJ5dGVzXG4gICAgICAgIHNjcmlwdC5sZW5ndGggLSAzLFxuICAgICAgICBzY3JpcHRbMl1cbiAgICAgICk7XG4gICAgICAvLyBTYXRvc2hpIHBsdXMgaWRlbnRpZmllclxuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChzY3JpcHQuc3ViYXJyYXkoMywgNykudG9TdHJpbmcoJ2hleCcpLCBDT1JFX0RBT19TQVRPU0hJX1BMVVNfSURFTlRJRklFUi50b1N0cmluZygnaGV4JykpO1xuICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHZlcnNpb24gaXMgY29ycmVjdFxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNjcmlwdFs3XSwgdmFsaWRWZXJzaW9uKTtcbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBjaGFpbklkIGlzIGNvcnJlY3RcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoc2NyaXB0LnN1YmFycmF5KDgsIDEwKS50b1N0cmluZygnaGV4JyksIHZhbGlkQ2hhaW5JZC50b1N0cmluZygnaGV4JykpO1xuICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGRlbGVnYXRvciBpcyBjb3JyZWN0XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHNjcmlwdC5zdWJhcnJheSgxMCwgMzApLnRvU3RyaW5nKCdoZXgnKSwgdmFsaWREZWxlZ2F0b3IudG9TdHJpbmcoJ2hleCcpKTtcbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSB2YWxpZGF0b3IgaXMgY29ycmVjdFxuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChzY3JpcHQuc3ViYXJyYXkoMzAsIDUwKS50b1N0cmluZygnaGV4JyksIHZhbGlkVmFsaWRhdG9yLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgZmVlIGlzIGNvcnJlY3RcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzY3JpcHRbNTBdLCB2YWxpZEZlZSk7XG4gICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVkZWVtU2NyaXB0IGlzIGNvcnJlY3RcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoXG4gICAgICAgIHNjcmlwdC5zdWJhcnJheSg1MSwgNTEgKyB2YWxpZFJlZGVlbVNjcmlwdC5sZW5ndGgpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgdmFsaWRSZWRlZW1TY3JpcHQudG9TdHJpbmcoJ2hleCcpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYXZlIHRoZSBjb3JyZWN0IHBsYWNlbWVudCBvZiB0aGUgdmFsdWVzIHByb3ZpZGVkIHdpdGggYSBibG9ja2hlaWdodCB0aW1lbG9jaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFRoaXMgc2hvdWxkIHByb2R1Y2UgYW4gT3BfUkVUVVJOIHRoYXQgbmVlZHMgdGhlIGV4dHJhIHB1c2ggYnl0ZXMgZm9yIHRoZSBsZW5ndGhcbiAgICAgIGNvbnN0IHNjcmlwdCA9IGNyZWF0ZUNvcmVEYW9PcFJldHVybk91dHB1dFNjcmlwdCh7XG4gICAgICAgIHZlcnNpb246IHZhbGlkVmVyc2lvbixcbiAgICAgICAgY2hhaW5JZDogdmFsaWRDaGFpbklkLFxuICAgICAgICBkZWxlZ2F0b3I6IHZhbGlkRGVsZWdhdG9yLFxuICAgICAgICB2YWxpZGF0b3I6IHZhbGlkVmFsaWRhdG9yLFxuICAgICAgICBmZWU6IHZhbGlkRmVlLFxuICAgICAgICB0aW1lbG9jazogdmFsaWRUaW1lbG9jayxcbiAgICAgIH0pO1xuICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGZpcnN0IGJ5dGUgaXMgdGhlIE9QX1JFVFVSTiBvcGNvZGVcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzY3JpcHRbMF0sIDB4NmEpO1xuICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGxlbmd0aCBvZiB0aGUgc2NyaXB0IG1hdGNoZXMgd2hhdCBpcyBpbiB0aGUgYnVmZmVyXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICAgIC8vIFdlIGRvIG5vdCBjb3VudCB0aGUgT1BfUkVUVVJOIG9wY29kZSBvciB0aGUgbGVuZ3RoXG4gICAgICAgIHNjcmlwdC5sZW5ndGggLSAyLFxuICAgICAgICBzY3JpcHRbMV1cbiAgICAgICk7XG4gICAgICAvLyBTYXRvc2hpIHBsdXMgaWRlbnRpZmllclxuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChzY3JpcHQuc3ViYXJyYXkoMiwgNikudG9TdHJpbmcoJ2hleCcpLCBDT1JFX0RBT19TQVRPU0hJX1BMVVNfSURFTlRJRklFUi50b1N0cmluZygnaGV4JykpO1xuICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHZlcnNpb24gaXMgY29ycmVjdFxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNjcmlwdFs2XSwgdmFsaWRWZXJzaW9uKTtcbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBjaGFpbklkIGlzIGNvcnJlY3RcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoc2NyaXB0LnN1YmFycmF5KDcsIDkpLnRvU3RyaW5nKCdoZXgnKSwgdmFsaWRDaGFpbklkLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgZGVsZWdhdG9yIGlzIGNvcnJlY3RcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoc2NyaXB0LnN1YmFycmF5KDksIDI5KS50b1N0cmluZygnaGV4JyksIHZhbGlkRGVsZWdhdG9yLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgdmFsaWRhdG9yIGlzIGNvcnJlY3RcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoc2NyaXB0LnN1YmFycmF5KDI5LCA0OSkudG9TdHJpbmcoJ2hleCcpLCB2YWxpZFZhbGlkYXRvci50b1N0cmluZygnaGV4JykpO1xuICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGZlZSBpcyBjb3JyZWN0XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2NyaXB0WzQ5XSwgdmFsaWRGZWUpO1xuICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlZGVlbVNjcmlwdCBpcyBjb3JyZWN0XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHNjcmlwdC5zdWJhcnJheSg1MCwgNTQpLnRvU3RyaW5nKCdoZXgnKSwgZW5jb2RlVGltZWxvY2sodmFsaWRUaW1lbG9jaykudG9TdHJpbmcoJ2hleCcpKTtcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZGVjb2RlVGltZWxvY2soc2NyaXB0LnN1YmFycmF5KDUwLCA1NCkpLCB2YWxpZFRpbWVsb2NrKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGF2ZSB0aGUgY29ycmVjdCBwbGFjZW1lbnQgb2YgdGhlIHZhbHVlcyBwcm92aWRlZCB3aXRoIGEgdGltZSB0aW1lbG9jaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFRoaXMgc2hvdWxkIHByb2R1Y2UgYW4gT3BfUkVUVVJOIHRoYXQgbmVlZHMgdGhlIGV4dHJhIHB1c2ggYnl0ZXMgZm9yIHRoZSBsZW5ndGhcbiAgICAgIGNvbnN0IHRpbWVsb2NrID0gbmV3IERhdGUoJzIwMjItMDEtMDFUMDA6MDA6MDBaJykuZ2V0VGltZSgpIC8gMTAwMDtcbiAgICAgIGNvbnN0IHNjcmlwdCA9IGNyZWF0ZUNvcmVEYW9PcFJldHVybk91dHB1dFNjcmlwdCh7XG4gICAgICAgIHZlcnNpb246IHZhbGlkVmVyc2lvbixcbiAgICAgICAgY2hhaW5JZDogdmFsaWRDaGFpbklkLFxuICAgICAgICBkZWxlZ2F0b3I6IHZhbGlkRGVsZWdhdG9yLFxuICAgICAgICB2YWxpZGF0b3I6IHZhbGlkVmFsaWRhdG9yLFxuICAgICAgICBmZWU6IHZhbGlkRmVlLFxuICAgICAgICB0aW1lbG9jayxcbiAgICAgIH0pO1xuICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGZpcnN0IGJ5dGUgaXMgdGhlIE9QX1JFVFVSTiBvcGNvZGVcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzY3JpcHRbMF0sIDB4NmEpO1xuICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGxlbmd0aCBvZiB0aGUgc2NyaXB0IG1hdGNoZXMgd2hhdCBpcyBpbiB0aGUgYnVmZmVyXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICAgIC8vIFdlIGRvIG5vdCBjb3VudCB0aGUgT1BfUkVUVVJOIG9wY29kZSBvciB0aGUgbGVuZ3RoXG4gICAgICAgIHNjcmlwdC5sZW5ndGggLSAyLFxuICAgICAgICBzY3JpcHRbMV1cbiAgICAgICk7XG4gICAgICAvLyBTYXRvc2hpIHBsdXMgaWRlbnRpZmllclxuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChzY3JpcHQuc3ViYXJyYXkoMiwgNikudG9TdHJpbmcoJ2hleCcpLCBDT1JFX0RBT19TQVRPU0hJX1BMVVNfSURFTlRJRklFUi50b1N0cmluZygnaGV4JykpO1xuICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHZlcnNpb24gaXMgY29ycmVjdFxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNjcmlwdFs2XSwgdmFsaWRWZXJzaW9uKTtcbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBjaGFpbklkIGlzIGNvcnJlY3RcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoc2NyaXB0LnN1YmFycmF5KDcsIDkpLnRvU3RyaW5nKCdoZXgnKSwgdmFsaWRDaGFpbklkLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgZGVsZWdhdG9yIGlzIGNvcnJlY3RcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoc2NyaXB0LnN1YmFycmF5KDksIDI5KS50b1N0cmluZygnaGV4JyksIHZhbGlkRGVsZWdhdG9yLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgdmFsaWRhdG9yIGlzIGNvcnJlY3RcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoc2NyaXB0LnN1YmFycmF5KDI5LCA0OSkudG9TdHJpbmcoJ2hleCcpLCB2YWxpZFZhbGlkYXRvci50b1N0cmluZygnaGV4JykpO1xuICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGZlZSBpcyBjb3JyZWN0XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2NyaXB0WzQ5XSwgdmFsaWRGZWUpO1xuICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlZGVlbVNjcmlwdCBpcyBjb3JyZWN0XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHNjcmlwdC5zdWJhcnJheSg1MCwgNTQpLnRvU3RyaW5nKCdoZXgnKSwgZW5jb2RlVGltZWxvY2sodGltZWxvY2spLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGRlY29kZVRpbWVsb2NrKHNjcmlwdC5zdWJhcnJheSg1MCwgNTQpKSwgdGltZWxvY2spO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWNyZWF0ZSB0aGUgZXhhbXBsZSBPUF9SRVRVUk4gY29ycmVjdGx5JywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChcbiAgICAgICAgY3JlYXRlQ29yZURhb09wUmV0dXJuT3V0cHV0U2NyaXB0KHtcbiAgICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICAgIGNoYWluSWQ6IEJ1ZmZlci5mcm9tKCcwNDViJywgJ2hleCcpLFxuICAgICAgICAgIGRlbGVnYXRvcjogQnVmZmVyLmZyb20oJ2RlNjBiN2QwZTZiNzU4Y2E1ZGQ4YzYxZDM3N2EyYzVmMWFmNTFlYzEnLCAnaGV4JyksXG4gICAgICAgICAgdmFsaWRhdG9yOiBCdWZmZXIuZnJvbSgnYTllMjA5ZjVlYTAwMzZjOGMyZjQxMDc4YTNjZWJlZTU3ZDhhNDdkNScsICdoZXgnKSxcbiAgICAgICAgICBmZWU6IDEsXG4gICAgICAgICAgcmVkZWVtU2NyaXB0OiBCdWZmZXIuZnJvbSgnMDQxZjVlMGU2NmIxNzU3NmE5MTRjNGI4YWU5MjdmZjJiOWNlMjE4ZTIwYmYwNmQ0MjVkNmI2ODQyNGZkODhhYycsICdoZXgnKSxcbiAgICAgICAgfSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICBkZWZhdWx0U2NyaXB0XG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncGFyc2VDb3JlRGFvT3BSZXR1cm5PdXRwdXRTY3JpcHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBwYXJzZSBhIHZhbGlkIHNjcmlwdCB3aXRoIGEgdGltZWxvY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzY3JpcHQgPSBjcmVhdGVDb3JlRGFvT3BSZXR1cm5PdXRwdXRTY3JpcHQoe1xuICAgICAgICB2ZXJzaW9uOiB2YWxpZFZlcnNpb24sXG4gICAgICAgIGNoYWluSWQ6IHZhbGlkQ2hhaW5JZCxcbiAgICAgICAgZGVsZWdhdG9yOiB2YWxpZERlbGVnYXRvcixcbiAgICAgICAgdmFsaWRhdG9yOiB2YWxpZFZhbGlkYXRvcixcbiAgICAgICAgZmVlOiB2YWxpZEZlZSxcbiAgICAgICAgdGltZWxvY2s6IHZhbGlkVGltZWxvY2ssXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlQ29yZURhb09wUmV0dXJuT3V0cHV0U2NyaXB0KHNjcmlwdCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyc2VkLnZlcnNpb24sIHZhbGlkVmVyc2lvbik7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHBhcnNlZC5jaGFpbklkLCB2YWxpZENoYWluSWQpO1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChwYXJzZWQuZGVsZWdhdG9yLCB2YWxpZERlbGVnYXRvcik7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHBhcnNlZC52YWxpZGF0b3IsIHZhbGlkVmFsaWRhdG9yKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQuZmVlLCB2YWxpZEZlZSk7XG4gICAgICBhc3NlcnQoJ3RpbWVsb2NrJyBpbiBwYXJzZWQpO1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChwYXJzZWQudGltZWxvY2ssIHZhbGlkVGltZWxvY2spO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXJzZSBhIHZhbGlkIHNjcmlwdCB3aXRoIGEgcmVkZWVtIHNjcmlwdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNjcmlwdCA9IGNyZWF0ZUNvcmVEYW9PcFJldHVybk91dHB1dFNjcmlwdCh7XG4gICAgICAgIHZlcnNpb246IHZhbGlkVmVyc2lvbixcbiAgICAgICAgY2hhaW5JZDogdmFsaWRDaGFpbklkLFxuICAgICAgICBkZWxlZ2F0b3I6IHZhbGlkRGVsZWdhdG9yLFxuICAgICAgICB2YWxpZGF0b3I6IHZhbGlkVmFsaWRhdG9yLFxuICAgICAgICBmZWU6IHZhbGlkRmVlLFxuICAgICAgICByZWRlZW1TY3JpcHQ6IHZhbGlkUmVkZWVtU2NyaXB0LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUNvcmVEYW9PcFJldHVybk91dHB1dFNjcmlwdChzY3JpcHQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlZC52ZXJzaW9uLCB2YWxpZFZlcnNpb24pO1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChwYXJzZWQuY2hhaW5JZCwgdmFsaWRDaGFpbklkKTtcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocGFyc2VkLmRlbGVnYXRvciwgdmFsaWREZWxlZ2F0b3IpO1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChwYXJzZWQudmFsaWRhdG9yLCB2YWxpZFZhbGlkYXRvcik7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyc2VkLmZlZSwgdmFsaWRGZWUpO1xuICAgICAgYXNzZXJ0KCdyZWRlZW1TY3JpcHQnIGluIHBhcnNlZCk7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHBhcnNlZC5yZWRlZW1TY3JpcHQsIHZhbGlkUmVkZWVtU2NyaXB0KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFyc2UgdmFsaWQgb3ByZXR1cm4gc2NyaXB0IGZyb20gdGVzdG5ldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFNvdXJjZTogaHR0cHM6Ly9tZW1wb29sLnNwYWNlL3Rlc3RuZXQvdHgvNjZlZDRjZWEyNmE0MTAyNDhhNmQ4N2YxNGIyYmNhNTE0ZjMzOTIwYzU0ZDRhZjYzZWQ0NmE5MDM3OTMxMTVkNVxuICAgICAgY29uc3QgYmFzZUZpeHR1cmVQYXRoID1cbiAgICAgICAgJ3Rlc3QvZml4dHVyZXMvY29yZURhby9vcFJldHVybi82NmVkNGNlYTI2YTQxMDI0OGE2ZDg3ZjE0YjJiY2E1MTRmMzM5MjBjNTRkNGFmNjNlZDQ2YTkwMzc5MzExNWQ1JztcbiAgICAgIGNvbnN0IG9wUmV0dXJuSGV4ID0gYXdhaXQgZ2V0Rml4dHVyZShiYXNlRml4dHVyZVBhdGggKyAnLnR4dCcsIHVuZGVmaW5lZCk7XG4gICAgICBhc3NlcnQodHlwZW9mIG9wUmV0dXJuSGV4ID09PSAnc3RyaW5nJyk7XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUNvcmVEYW9PcFJldHVybk91dHB1dFNjcmlwdChCdWZmZXIuZnJvbShvcFJldHVybkhleCwgJ2hleCcpKTtcbiAgICAgIGNvbnN0IHBhcnNlZEZpeHR1cmUgPSBhd2FpdCBnZXRGaXh0dXJlKGJhc2VGaXh0dXJlUGF0aCArICcuanNvbicsIEpTT04ucGFyc2UodG9TdHJpbmcocGFyc2VkKSkpO1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCh0b1N0cmluZyhwYXJzZWQpLCBKU09OLnN0cmluZ2lmeShwYXJzZWRGaXh0dXJlKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgaWYgdGhlcmUgaXMgYW4gaW52YWxpZCBvcC1yZXR1cm4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzY3JpcHQgPSBkZWZhdWx0U2NyaXB0LnJlcGxhY2UoJzZhNGM1MCcsICc2YjRjNTAnKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gcGFyc2VDb3JlRGFvT3BSZXR1cm5PdXRwdXRTY3JpcHQoQnVmZmVyLmZyb20oc2NyaXB0LCAnaGV4JykpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCBpZiB0aGUgbGVuZ3RoIGlzIGluY29ycmVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNjcmlwdCA9IGRlZmF1bHRTY3JpcHQucmVwbGFjZSgnNGM1MCcsICc0YzUxJyk7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHBhcnNlQ29yZURhb09wUmV0dXJuT3V0cHV0U2NyaXB0KEJ1ZmZlci5mcm9tKHNjcmlwdCwgJ2hleCcpKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgaWYgdGhlIHNhdG9zaGkrIGlkZW50aWZpZXIgaXMgaW5jb3JyZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2NyaXB0ID0gZGVmYXVsdFNjcmlwdC5yZXBsYWNlKCc1MzQxNTQyYicsICc1MzQxNTMyYicpO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBwYXJzZUNvcmVEYW9PcFJldHVybk91dHB1dFNjcmlwdChCdWZmZXIuZnJvbShzY3JpcHQsICdoZXgnKSkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIGlmIHRoZSBjaGFpbklkIGlzIGluY29ycmVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNjcmlwdCA9IGRlZmF1bHRTY3JpcHQucmVwbGFjZSgnMDQ1YicsICcwNDU0Jyk7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHBhcnNlQ29yZURhb09wUmV0dXJuT3V0cHV0U2NyaXB0KEJ1ZmZlci5mcm9tKHNjcmlwdCwgJ2hleCcpKSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Descriptor } from '@bitgo/wasm-utxo';
|
|
2
|
+
import * as utxolib from '@bitgo-beta/utxo-lib';
|
|
3
|
+
export declare function updateInputWithDescriptor(psbt: utxolib.Psbt, inputIndex: number, descriptor: Descriptor): void;
|
|
4
|
+
export declare function finalizePsbt(psbt: utxolib.Psbt): utxolib.bitgo.UtxoPsbt;
|
|
5
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../test/unit/coreDao/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAQ,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAEhD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI,CAM9G;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAMvE"}
|
|
@@ -0,0 +1,54 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.updateInputWithDescriptor = updateInputWithDescriptor;
|
|
37
|
+
exports.finalizePsbt = finalizePsbt;
|
|
38
|
+
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
39
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
40
|
+
function updateInputWithDescriptor(psbt, inputIndex, descriptor) {
|
|
41
|
+
const wrappedPsbt = wasm_utxo_1.Psbt.deserialize(psbt.toBuffer());
|
|
42
|
+
wrappedPsbt.updateInputWithDescriptor(inputIndex, descriptor);
|
|
43
|
+
psbt.data.inputs[inputIndex] = utxolib.bitgo.UtxoPsbt.fromBuffer(Buffer.from(wrappedPsbt.serialize()), {
|
|
44
|
+
network: utxolib.networks.bitcoin,
|
|
45
|
+
}).data.inputs[inputIndex];
|
|
46
|
+
}
|
|
47
|
+
function finalizePsbt(psbt) {
|
|
48
|
+
const wrappedPsbt = wasm_utxo_1.Psbt.deserialize(psbt.toBuffer());
|
|
49
|
+
wrappedPsbt.finalize();
|
|
50
|
+
return utxolib.bitgo.UtxoPsbt.fromBuffer(Buffer.from(wrappedPsbt.serialize()), {
|
|
51
|
+
network: utxolib.networks.bitcoin,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvY29yZURhby91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLDhEQU1DO0FBRUQsb0NBTUM7QUFqQkQsZ0RBQW9EO0FBQ3BELDhEQUFnRDtBQUVoRCxTQUFnQix5QkFBeUIsQ0FBQyxJQUFrQixFQUFFLFVBQWtCLEVBQUUsVUFBc0I7SUFDdEcsTUFBTSxXQUFXLEdBQUcsZ0JBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDdEQsV0FBVyxDQUFDLHlCQUF5QixDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUM5RCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtRQUNyRyxPQUFPLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPO0tBQ2xDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzdCLENBQUM7QUFFRCxTQUFnQixZQUFZLENBQUMsSUFBa0I7SUFDN0MsTUFBTSxXQUFXLEdBQUcsZ0JBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDdEQsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3ZCLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUU7UUFDN0UsT0FBTyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTztLQUNsQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzY3JpcHRvciwgUHNidCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVJbnB1dFdpdGhEZXNjcmlwdG9yKHBzYnQ6IHV0eG9saWIuUHNidCwgaW5wdXRJbmRleDogbnVtYmVyLCBkZXNjcmlwdG9yOiBEZXNjcmlwdG9yKTogdm9pZCB7XG4gIGNvbnN0IHdyYXBwZWRQc2J0ID0gUHNidC5kZXNlcmlhbGl6ZShwc2J0LnRvQnVmZmVyKCkpO1xuICB3cmFwcGVkUHNidC51cGRhdGVJbnB1dFdpdGhEZXNjcmlwdG9yKGlucHV0SW5kZXgsIGRlc2NyaXB0b3IpO1xuICBwc2J0LmRhdGEuaW5wdXRzW2lucHV0SW5kZXhdID0gdXR4b2xpYi5iaXRnby5VdHhvUHNidC5mcm9tQnVmZmVyKEJ1ZmZlci5mcm9tKHdyYXBwZWRQc2J0LnNlcmlhbGl6ZSgpKSwge1xuICAgIG5ldHdvcms6IHV0eG9saWIubmV0d29ya3MuYml0Y29pbixcbiAgfSkuZGF0YS5pbnB1dHNbaW5wdXRJbmRleF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5hbGl6ZVBzYnQocHNidDogdXR4b2xpYi5Qc2J0KTogdXR4b2xpYi5iaXRnby5VdHhvUHNidCB7XG4gIGNvbnN0IHdyYXBwZWRQc2J0ID0gUHNidC5kZXNlcmlhbGl6ZShwc2J0LnRvQnVmZmVyKCkpO1xuICB3cmFwcGVkUHNidC5maW5hbGl6ZSgpO1xuICByZXR1cm4gdXR4b2xpYi5iaXRnby5VdHhvUHNidC5mcm9tQnVmZmVyKEJ1ZmZlci5mcm9tKHdyYXBwZWRQc2J0LnNlcmlhbGl6ZSgpKSwge1xuICAgIG5ldHdvcms6IHV0eG9saWIubmV0d29ya3MuYml0Y29pbixcbiAgfSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import assert from 'assert';
|
|
2
|
+
import { ast } from '@bitgo/wasm-utxo';
|
|
3
|
+
export declare function normalize(v: unknown): unknown;
|
|
4
|
+
type EqualsAssertion = typeof assert.deepStrictEqual;
|
|
5
|
+
export declare function assertEqualsFixture(fixtureName: string, value: unknown, n?: typeof normalize, eq?: EqualsAssertion): Promise<void>;
|
|
6
|
+
export declare function assertTransactionEqualsFixture(fixtureName: string, tx: unknown): Promise<void>;
|
|
7
|
+
export declare function assertEqualsMiniscript(script: Buffer, miniscript: ast.MiniscriptNode): void;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=fixtures.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixtures.utils.d.ts","sourceRoot":"","sources":["../../../../test/unit/fixtures.utils.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,GAAG,EAA0B,MAAM,kBAAkB,CAAC;AAM/D,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CA6B7C;AAED,KAAK,eAAe,GAAG,OAAO,MAAM,CAAC,eAAe,CAAC;AAErD,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,OAAO,EACd,CAAC,mBAAY,EACb,EAAE,GAAE,eAAwC,GAC3C,OAAO,CAAC,IAAI,CAAC,CAGf;AAED,wBAAsB,8BAA8B,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpG;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,cAAc,GAAG,IAAI,CAO3F"}
|
|
@@ -0,0 +1,91 @@
|
|
|
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
|
+
exports.normalize = normalize;
|
|
40
|
+
exports.assertEqualsFixture = assertEqualsFixture;
|
|
41
|
+
exports.assertTransactionEqualsFixture = assertTransactionEqualsFixture;
|
|
42
|
+
exports.assertEqualsMiniscript = assertEqualsMiniscript;
|
|
43
|
+
const assert_1 = __importDefault(require("assert"));
|
|
44
|
+
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
45
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
46
|
+
const bitcoinjslib = __importStar(require("bitcoinjs-lib"));
|
|
47
|
+
const testutil_1 = require("@bitgo-beta/utxo-core/testutil");
|
|
48
|
+
const descriptor_1 = require("@bitgo-beta/utxo-core/testutil/descriptor");
|
|
49
|
+
function normalize(v) {
|
|
50
|
+
if (typeof v === 'bigint') {
|
|
51
|
+
return v.toString();
|
|
52
|
+
}
|
|
53
|
+
if (v instanceof wasm_utxo_1.Descriptor) {
|
|
54
|
+
return v.toString();
|
|
55
|
+
}
|
|
56
|
+
if (v instanceof Uint8Array) {
|
|
57
|
+
v = Buffer.from(v);
|
|
58
|
+
}
|
|
59
|
+
if (v instanceof Buffer) {
|
|
60
|
+
return v.toString('hex');
|
|
61
|
+
}
|
|
62
|
+
if (v instanceof bitcoinjslib.Psbt) {
|
|
63
|
+
v = utxolib.Psbt.fromBuffer(v.toBuffer());
|
|
64
|
+
}
|
|
65
|
+
if (v instanceof utxolib.Psbt) {
|
|
66
|
+
return (0, descriptor_1.toPlainObjectFromPsbt)(v);
|
|
67
|
+
}
|
|
68
|
+
if (v instanceof utxolib.Transaction) {
|
|
69
|
+
return (0, descriptor_1.toPlainObjectFromTx)(v);
|
|
70
|
+
}
|
|
71
|
+
if (Array.isArray(v)) {
|
|
72
|
+
return v.map(normalize);
|
|
73
|
+
}
|
|
74
|
+
if (typeof v === 'object' && v !== null) {
|
|
75
|
+
return Object.fromEntries(Object.entries(v).flatMap(([k, v]) => (v === undefined ? [] : [[k, normalize(v)]])));
|
|
76
|
+
}
|
|
77
|
+
return v;
|
|
78
|
+
}
|
|
79
|
+
async function assertEqualsFixture(fixtureName, value, n = normalize, eq = assert_1.default.deepStrictEqual) {
|
|
80
|
+
value = n(value);
|
|
81
|
+
eq(await (0, testutil_1.getFixture)(fixtureName, value), value);
|
|
82
|
+
}
|
|
83
|
+
async function assertTransactionEqualsFixture(fixtureName, tx) {
|
|
84
|
+
await assertEqualsFixture(fixtureName, normalize(tx));
|
|
85
|
+
}
|
|
86
|
+
function assertEqualsMiniscript(script, miniscript) {
|
|
87
|
+
const ms = wasm_utxo_1.Miniscript.fromBitcoinScript(script, 'tap');
|
|
88
|
+
assert_1.default.deepStrictEqual(wasm_utxo_1.ast.fromMiniscript(ms), miniscript);
|
|
89
|
+
assert_1.default.deepStrictEqual(script.toString('hex'), Buffer.from(wasm_utxo_1.Miniscript.fromString(wasm_utxo_1.ast.formatNode(miniscript), 'tap').encode()).toString('hex'));
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZXMudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvZml4dHVyZXMudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRQSw4QkE2QkM7QUFJRCxrREFRQztBQUVELHdFQUVDO0FBRUQsd0RBT0M7QUE5REQsb0RBQTRCO0FBRTVCLGdEQUErRDtBQUMvRCw4REFBZ0Q7QUFDaEQsNERBQThDO0FBQzlDLDZEQUE0RDtBQUM1RCwwRUFBdUc7QUFFdkcsU0FBZ0IsU0FBUyxDQUFDLENBQVU7SUFDbEMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMxQixPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBQ0QsSUFBSSxDQUFDLFlBQVksc0JBQVUsRUFBRSxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFDRCxJQUFJLENBQUMsWUFBWSxVQUFVLEVBQUUsQ0FBQztRQUM1QixDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBQ0QsSUFBSSxDQUFDLFlBQVksTUFBTSxFQUFFLENBQUM7UUFDeEIsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFDRCxJQUFJLENBQUMsWUFBWSxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFDRCxJQUFJLENBQUMsWUFBWSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUIsT0FBTyxJQUFBLGtDQUFxQixFQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxJQUFJLENBQUMsWUFBWSxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckMsT0FBTyxJQUFBLGdDQUFtQixFQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNyQixPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUNELElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUN4QyxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqSCxDQUFDO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBSU0sS0FBSyxVQUFVLG1CQUFtQixDQUN2QyxXQUFtQixFQUNuQixLQUFjLEVBQ2QsQ0FBQyxHQUFHLFNBQVMsRUFDYixLQUFzQixnQkFBTSxDQUFDLGVBQWU7SUFFNUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQixFQUFFLENBQUMsTUFBTSxJQUFBLHFCQUFVLEVBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFFTSxLQUFLLFVBQVUsOEJBQThCLENBQUMsV0FBbUIsRUFBRSxFQUFXO0lBQ25GLE1BQU0sbUJBQW1CLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFFRCxTQUFnQixzQkFBc0IsQ0FBQyxNQUFjLEVBQUUsVUFBOEI7SUFDbkYsTUFBTSxFQUFFLEdBQUcsc0JBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkQsZ0JBQU0sQ0FBQyxlQUFlLENBQUMsZUFBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMzRCxnQkFBTSxDQUFDLGVBQWUsQ0FDcEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFDdEIsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBVSxDQUFDLFVBQVUsQ0FBQyxlQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUMvRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHsgYXN0LCBEZXNjcmlwdG9yLCBNaW5pc2NyaXB0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCAqIGFzIGJpdGNvaW5qc2xpYiBmcm9tICdiaXRjb2luanMtbGliJztcbmltcG9ydCB7IGdldEZpeHR1cmUgfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWNvcmUvdGVzdHV0aWwnO1xuaW1wb3J0IHsgdG9QbGFpbk9iamVjdEZyb21UeCwgdG9QbGFpbk9iamVjdEZyb21Qc2J0IH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1jb3JlL3Rlc3R1dGlsL2Rlc2NyaXB0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplKHY6IHVua25vd24pOiB1bmtub3duIHtcbiAgaWYgKHR5cGVvZiB2ID09PSAnYmlnaW50Jykge1xuICAgIHJldHVybiB2LnRvU3RyaW5nKCk7XG4gIH1cbiAgaWYgKHYgaW5zdGFuY2VvZiBEZXNjcmlwdG9yKSB7XG4gICAgcmV0dXJuIHYudG9TdHJpbmcoKTtcbiAgfVxuICBpZiAodiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICB2ID0gQnVmZmVyLmZyb20odik7XG4gIH1cbiAgaWYgKHYgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICByZXR1cm4gdi50b1N0cmluZygnaGV4Jyk7XG4gIH1cbiAgaWYgKHYgaW5zdGFuY2VvZiBiaXRjb2luanNsaWIuUHNidCkge1xuICAgIHYgPSB1dHhvbGliLlBzYnQuZnJvbUJ1ZmZlcih2LnRvQnVmZmVyKCkpO1xuICB9XG4gIGlmICh2IGluc3RhbmNlb2YgdXR4b2xpYi5Qc2J0KSB7XG4gICAgcmV0dXJuIHRvUGxhaW5PYmplY3RGcm9tUHNidCh2KTtcbiAgfVxuICBpZiAodiBpbnN0YW5jZW9mIHV0eG9saWIuVHJhbnNhY3Rpb24pIHtcbiAgICByZXR1cm4gdG9QbGFpbk9iamVjdEZyb21UeCh2KTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh2KSkge1xuICAgIHJldHVybiB2Lm1hcChub3JtYWxpemUpO1xuICB9XG4gIGlmICh0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiAhPT0gbnVsbCkge1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXModikuZmxhdE1hcCgoW2ssIHZdKSA9PiAodiA9PT0gdW5kZWZpbmVkID8gW10gOiBbW2ssIG5vcm1hbGl6ZSh2KV1dKSkpO1xuICB9XG4gIHJldHVybiB2O1xufVxuXG50eXBlIEVxdWFsc0Fzc2VydGlvbiA9IHR5cGVvZiBhc3NlcnQuZGVlcFN0cmljdEVxdWFsO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXNzZXJ0RXF1YWxzRml4dHVyZShcbiAgZml4dHVyZU5hbWU6IHN0cmluZyxcbiAgdmFsdWU6IHVua25vd24sXG4gIG4gPSBub3JtYWxpemUsXG4gIGVxOiBFcXVhbHNBc3NlcnRpb24gPSBhc3NlcnQuZGVlcFN0cmljdEVxdWFsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgdmFsdWUgPSBuKHZhbHVlKTtcbiAgZXEoYXdhaXQgZ2V0Rml4dHVyZShmaXh0dXJlTmFtZSwgdmFsdWUpLCB2YWx1ZSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3NlcnRUcmFuc2FjdGlvbkVxdWFsc0ZpeHR1cmUoZml4dHVyZU5hbWU6IHN0cmluZywgdHg6IHVua25vd24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYXNzZXJ0RXF1YWxzRml4dHVyZShmaXh0dXJlTmFtZSwgbm9ybWFsaXplKHR4KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRFcXVhbHNNaW5pc2NyaXB0KHNjcmlwdDogQnVmZmVyLCBtaW5pc2NyaXB0OiBhc3QuTWluaXNjcmlwdE5vZGUpOiB2b2lkIHtcbiAgY29uc3QgbXMgPSBNaW5pc2NyaXB0LmZyb21CaXRjb2luU2NyaXB0KHNjcmlwdCwgJ3RhcCcpO1xuICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGFzdC5mcm9tTWluaXNjcmlwdChtcyksIG1pbmlzY3JpcHQpO1xuICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKFxuICAgIHNjcmlwdC50b1N0cmluZygnaGV4JyksXG4gICAgQnVmZmVyLmZyb20oTWluaXNjcmlwdC5mcm9tU3RyaW5nKGFzdC5mb3JtYXROb2RlKG1pbmlzY3JpcHQpLCAndGFwJykuZW5jb2RlKCkpLnRvU3RyaW5nKCdoZXgnKVxuICApO1xufVxuIl19
|