@bitgo/sdk-coin-polyx 2.0.1 → 2.0.4
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/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +41 -6
- package/dist/test/unit/polyx.js +23 -1
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.js +116 -1
- package/dist/test/unit/transactionBuilder/v8BatchStakingBuilder.js +41 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
|
@@ -121,5 +121,120 @@ describe('Tao Transaction Builder Factory', function () {
|
|
|
121
121
|
should_1.default.ok(builder instanceof lib_1.TransferBuilder, 'expected TransferBuilder for v7 txHex');
|
|
122
122
|
});
|
|
123
123
|
});
|
|
124
|
+
// Regression test for the bug where getBuilder() decoded a v8 addAndAffirmWithMediators
|
|
125
|
+
// payload with v7 metadata (same call index, so no throw), silently lost sender.did, then
|
|
126
|
+
// routed to the v7 TokenTransferBuilder — causing Joi to throw
|
|
127
|
+
// 'legs[0].fungible.sender.did is required'.
|
|
128
|
+
describe('v8 token transfer routing regression', function () {
|
|
129
|
+
const FROM_DID = '0x1208d7851e6698249aea40742701ee1ef6cdcced260a7c49c1cca1a9db836342';
|
|
130
|
+
const TO_DID = '0xbc6f7ec808f361c1353ab9dc88c3cc54b98d9eb60fed9c063e67a40925b8ef61';
|
|
131
|
+
const ASSET_ID = '0x780602887b358cf48989d0d9aa6c8d28';
|
|
132
|
+
const VALIDITY = { firstValid: 3933, maxDuration: 64 };
|
|
133
|
+
const REF_BLOCK = '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d';
|
|
134
|
+
let unsignedHex;
|
|
135
|
+
let signedHex;
|
|
136
|
+
before(async function () {
|
|
137
|
+
const config = (0, base_1.buildTestConfig)();
|
|
138
|
+
// unsigned (no signature attached)
|
|
139
|
+
const unsignedTx = await new lib_1.V8TokenTransferBuilder(config)
|
|
140
|
+
.assetId(ASSET_ID)
|
|
141
|
+
.amount('1000000')
|
|
142
|
+
.fromDID(FROM_DID)
|
|
143
|
+
.toDID(TO_DID)
|
|
144
|
+
.memo('0')
|
|
145
|
+
.sender({ address: sender.address })
|
|
146
|
+
.validity(VALIDITY)
|
|
147
|
+
.referenceBlock(REF_BLOCK)
|
|
148
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 1 })
|
|
149
|
+
.fee({ amount: 0, type: 'tip' })
|
|
150
|
+
.build();
|
|
151
|
+
unsignedHex = unsignedTx.toBroadcastFormat();
|
|
152
|
+
// signed
|
|
153
|
+
const signedBuilder = new lib_1.V8TokenTransferBuilder(config)
|
|
154
|
+
.assetId(ASSET_ID)
|
|
155
|
+
.amount('1000000')
|
|
156
|
+
.fromDID(FROM_DID)
|
|
157
|
+
.toDID(TO_DID)
|
|
158
|
+
.memo('0')
|
|
159
|
+
.sender({ address: sender.address })
|
|
160
|
+
.validity(VALIDITY)
|
|
161
|
+
.referenceBlock(REF_BLOCK)
|
|
162
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 1 })
|
|
163
|
+
.fee({ amount: 0, type: 'tip' });
|
|
164
|
+
signedBuilder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
|
|
165
|
+
const signedTx = await signedBuilder.build();
|
|
166
|
+
signedHex = signedTx.toBroadcastFormat();
|
|
167
|
+
});
|
|
168
|
+
it('routes a v8 token transfer tx to V8TokenTransferBuilder (not TokenTransferBuilder)', function () {
|
|
169
|
+
// The call index for addAndAffirmWithMediators is identical in v7 and v8, so the v7 decode
|
|
170
|
+
// path "succeeds" but drops sender.did. The fix in getBuilder() detects the missing field
|
|
171
|
+
// and redirects to tryGetV8Builder() before Joi validation fires.
|
|
172
|
+
const factoryInst = new lib_1.TransactionBuilderFactory((0, base_1.buildTestConfig)());
|
|
173
|
+
const builder = factoryInst.from(signedHex);
|
|
174
|
+
should_1.default.ok(builder instanceof lib_1.V8TokenTransferBuilder, 'expected V8TokenTransferBuilder — v8 payload must not be silently mis-routed to v7 TokenTransferBuilder');
|
|
175
|
+
// V8TokenTransferBuilder extends TokenTransferBuilder; verify it is the v8 subclass
|
|
176
|
+
// specifically (constructor name) so a future refactor that breaks the class hierarchy
|
|
177
|
+
// is caught here rather than silently allowing a plain TokenTransferBuilder through.
|
|
178
|
+
should_1.default.equal(builder.constructor.name, 'V8TokenTransferBuilder', 'constructor must be V8TokenTransferBuilder, not plain TokenTransferBuilder');
|
|
179
|
+
});
|
|
180
|
+
it('rebuilds from unsigned v8 token transfer hex with correct fields and matching raw output', async function () {
|
|
181
|
+
const factoryInst = new lib_1.TransactionBuilderFactory((0, base_1.buildTestConfig)());
|
|
182
|
+
const builder = factoryInst.from(unsignedHex);
|
|
183
|
+
builder.validity(VALIDITY).referenceBlock(REF_BLOCK).sender({ address: sender.address });
|
|
184
|
+
const rebuilt = await builder.build();
|
|
185
|
+
const json = rebuilt.toJson();
|
|
186
|
+
should_1.default.equal(json.assetId, ASSET_ID);
|
|
187
|
+
should_1.default.equal(json.amount, '1000000');
|
|
188
|
+
should_1.default.equal(json.fromDID, FROM_DID);
|
|
189
|
+
should_1.default.equal(json.toDID, TO_DID);
|
|
190
|
+
should_1.default.equal(rebuilt.toBroadcastFormat(), unsignedHex, 'unsigned round-trip hex must match original');
|
|
191
|
+
});
|
|
192
|
+
it('rebuilds from signed v8 token transfer hex with correct fields and matching raw output', async function () {
|
|
193
|
+
const factoryInst = new lib_1.TransactionBuilderFactory((0, base_1.buildTestConfig)());
|
|
194
|
+
const builder = factoryInst.from(signedHex);
|
|
195
|
+
builder.validity(VALIDITY).referenceBlock(REF_BLOCK);
|
|
196
|
+
const rebuilt = await builder.build();
|
|
197
|
+
const json = rebuilt.toJson();
|
|
198
|
+
should_1.default.equal(json.assetId, ASSET_ID);
|
|
199
|
+
should_1.default.equal(json.amount, '1000000');
|
|
200
|
+
should_1.default.equal(json.fromDID, FROM_DID);
|
|
201
|
+
should_1.default.equal(json.toDID, TO_DID);
|
|
202
|
+
should_1.default.equal(rebuilt.toBroadcastFormat(), signedHex, 'signed round-trip hex must match original');
|
|
203
|
+
});
|
|
204
|
+
it('forwards factory live material specVersion to V8TokenTransferBuilder (SI-XXXX regression)', async function () {
|
|
205
|
+
// Regression for the bug where getV8TokenTransferBuilder() was called without
|
|
206
|
+
// .material(this._material), causing the builder to use the static placeholder
|
|
207
|
+
// specVersion (8000000) instead of the live chain specVersion. This produced a
|
|
208
|
+
// rebuilt signablePayload with wrong additional bytes, failing verifySignature.
|
|
209
|
+
const liveSpecVersion = 8000020;
|
|
210
|
+
const liveMaterial = {
|
|
211
|
+
...lib_1.utils.getV8Material(statics_1.NetworkType.TESTNET),
|
|
212
|
+
specVersion: liveSpecVersion,
|
|
213
|
+
};
|
|
214
|
+
// Build an unsigned tx with the live material — its signable payload encodes liveSpecVersion.
|
|
215
|
+
const originalTx = await new lib_1.V8TokenTransferBuilder((0, base_1.buildTestConfig)())
|
|
216
|
+
.material(liveMaterial)
|
|
217
|
+
.assetId(ASSET_ID)
|
|
218
|
+
.amount('1000000')
|
|
219
|
+
.fromDID(FROM_DID)
|
|
220
|
+
.toDID(TO_DID)
|
|
221
|
+
.memo('0')
|
|
222
|
+
.sender({ address: sender.address })
|
|
223
|
+
.validity(VALIDITY)
|
|
224
|
+
.referenceBlock(REF_BLOCK)
|
|
225
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 1 })
|
|
226
|
+
.fee({ amount: 0, type: 'tip' })
|
|
227
|
+
.build();
|
|
228
|
+
const originalSignable = originalTx.signablePayload.toString('hex');
|
|
229
|
+
const signingPayloadHex = originalTx.toBroadcastFormat();
|
|
230
|
+
// Factory with the same live material must forward it to the created V8TokenTransferBuilder
|
|
231
|
+
// so the rebuild uses liveSpecVersion, not the static 8000000 placeholder.
|
|
232
|
+
const factoryInst = new lib_1.TransactionBuilderFactory((0, base_1.buildTestConfig)()).material(liveMaterial);
|
|
233
|
+
const rebuiltBuilder = factoryInst.from(signingPayloadHex);
|
|
234
|
+
rebuiltBuilder.sender({ address: sender.address }).validity(VALIDITY).referenceBlock(REF_BLOCK);
|
|
235
|
+
const rebuiltTx = await rebuiltBuilder.build();
|
|
236
|
+
should_1.default.equal(rebuiltTx.signablePayload.toString('hex'), originalSignable, 'signablePayload must match: factory must forward live material to V8TokenTransferBuilder');
|
|
237
|
+
});
|
|
238
|
+
});
|
|
124
239
|
});
|
|
125
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDRDQUF1QztBQUN2QyxvREFBNEI7QUFDNUIsMENBQXVIO0FBRXZILCtDQUFrRDtBQUNsRCxnRkFBa0U7QUFDbEUsaUNBQXlDO0FBRXpDLFFBQVEsQ0FBQyxpQ0FBaUMsRUFBRTtJQUMxQyxNQUFNLE1BQU0sR0FBRyxvQkFBUSxDQUFDLFFBQVEsQ0FBQztJQUNqQyxJQUFJLE9BQWtDLENBQUM7SUFFdkMsU0FBUyxDQUFDLHdCQUF3QixFQUFFO1FBQ2xDLE1BQU0sQ0FBQztZQUNMLE9BQU8sR0FBRyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FBQztRQUVILENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxxQkFBZSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUMvRCxFQUFFLENBQUMsNEJBQTRCLEdBQUcsQ0FBQyxJQUFJLHFCQUFxQixHQUFHLENBQUMsSUFBSSxVQUFVLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQ3pGLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQWtDLENBQUMsQ0FBQztnQkFFcEcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFMUMsT0FB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LENBQUM7UUFFSCxFQUFFLENBQUMsNkRBQTZELEVBQUU7WUFDaEUsTUFBTSxXQUFXLEdBQUcsSUFBSSwrQkFBeUIsQ0FBQyxJQUFBLHNCQUFlLEdBQUUsQ0FBQyxDQUFDO1lBQ3JFLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsaUJBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEQsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxZQUFZLHFCQUFlLEVBQUUsdUNBQXVDLENBQUMsQ0FBQztRQUN6RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnksIFRyYW5zZmVyQnVpbGRlciwgVjhUcmFuc2ZlckJ1aWxkZXIsIFY4SGV4VHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYic7XG5pbXBvcnQgeyBJbnRlcmZhY2UgfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHsgcmF3VHgsIGFjY291bnRzIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzJztcbmltcG9ydCAqIGFzIG1hdGVyaWFsRGF0YSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvbWF0ZXJpYWxEYXRhLmpzb24nO1xuaW1wb3J0IHsgYnVpbGRUZXN0Q29uZmlnIH0gZnJvbSAnLi9iYXNlJztcblxuZGVzY3JpYmUoJ1RhbyBUcmFuc2FjdGlvbiBCdWlsZGVyIEZhY3RvcnknLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHNlbmRlciA9IGFjY291bnRzLmFjY291bnQxO1xuICBsZXQgZmFjdG9yeTogVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeTtcblxuICB4ZGVzY3JpYmUoJ3BhcnNlIGdlbmVyaWMgYnVpbGRlcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3Rwb2x5eCcpKTtcbiAgICB9KTtcblxuICAgIFt7IHR5cGU6ICd0cmFuc2ZlcicsIGJ1aWxkZXI6IFRyYW5zZmVyQnVpbGRlciB9XS5mb3JFYWNoKCh0eG4pID0+IHtcbiAgICAgIGl0KGBzaG91bGQgcGFyc2UgYW4gdW5zaWduZWQgJHt0eG4udHlwZX0gdHhuIGFuZCByZXR1cm4gYSAke3R4bi50eXBlfSBidWlsZGVyYCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5mcm9tKHJhd1R4W3R4bi50eXBlXS51bnNpZ25lZCkubWF0ZXJpYWwobWF0ZXJpYWxEYXRhIGFzIEludGVyZmFjZS5NYXRlcmlhbCk7XG5cbiAgICAgICAgYnVpbGRlci5zaG91bGQuYmUuaW5zdGFuY2VPZih0eG4uYnVpbGRlcik7XG5cbiAgICAgICAgYnVpbGRlclxuICAgICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMgfSlcbiAgICAgICAgICAucmVmZXJlbmNlQmxvY2soJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpXG4gICAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHJhd1R4W3R4bi50eXBlXS51bnNpZ25lZCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoYHNob3VsZCBwYXJzZSBhIHNpZ25lZCAke3R4bi50eXBlfSB0eG4gYW5kIHJldHVybiBhICR7dHhuLnR5cGV9IGJ1aWxkZXJgLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmZyb20ocmF3VHhbdHhuLnR5cGVdLnNpZ25lZCkubWF0ZXJpYWwobWF0ZXJpYWxEYXRhIGFzIEludGVyZmFjZS5NYXRlcmlhbCk7XG5cbiAgICAgICAgYnVpbGRlci5zaG91bGQuYmUuaW5zdGFuY2VPZih0eG4uYnVpbGRlcik7XG5cbiAgICAgICAgYnVpbGRlclxuICAgICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMgfSlcbiAgICAgICAgICAucmVmZXJlbmNlQmxvY2soJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHJhd1R4W3R4bi50eXBlXS5zaWduZWQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd0cnlHZXRWOEJ1aWxkZXIgcm91dGluZycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZWNlaXZlciA9IGFjY291bnRzLmFjY291bnQyO1xuXG4gICAgbGV0IHY4VHJhbnNmZXJUeEhleDogc3RyaW5nO1xuICAgIGxldCB2OEhleFRyYW5zZmVyVHhIZXg6IHN0cmluZztcblxuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjb25maWcgPSBidWlsZFRlc3RDb25maWcoKTtcblxuICAgICAgLy8gQnVpbGQgYW4gdW5zaWduZWQgdjggdHJhbnNmZXJXaXRoTWVtbyB0eCAocGxhaW4tc3RyaW5nIG1lbW8sIG5vdCAweC1wcmVmaXhlZClcbiAgICAgIGNvbnN0IHY4VHggPSBhd2FpdCBuZXcgVjhUcmFuc2ZlckJ1aWxkZXIoY29uZmlnKVxuICAgICAgICAuYW1vdW50KCcxMDAwMDAwJylcbiAgICAgICAgLnRvKHsgYWRkcmVzczogcmVjZWl2ZXIuYWRkcmVzcyB9KVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgLm1lbW8oJzAnKVxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAxIH0pXG4gICAgICAgIC5mZWUoeyBhbW91bnQ6IDAsIHR5cGU6ICd0aXAnIH0pXG4gICAgICAgIC5idWlsZCgpO1xuICAgICAgdjhUcmFuc2ZlclR4SGV4ID0gdjhUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAvLyBCdWlsZCBhbiB1bnNpZ25lZCB2OCBoZXgtbWVtbyB0cmFuc2ZlcldpdGhNZW1vIHR4XG4gICAgICBjb25zdCB2OEhleFR4ID0gYXdhaXQgbmV3IFY4SGV4VHJhbnNmZXJCdWlsZGVyKGNvbmZpZylcbiAgICAgICAgLmFtb3VudCgnMTAwMDAwMCcpXG4gICAgICAgIC50byh7IGFkZHJlc3M6IHJlY2VpdmVyLmFkZHJlc3MgfSlcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgIC5tZW1vKCc1NjU5NCcpXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2soJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpXG4gICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDEgfSlcbiAgICAgICAgLmZlZSh7IGFtb3VudDogMCwgdHlwZTogJ3RpcCcgfSlcbiAgICAgICAgLmJ1aWxkKCk7XG4gICAgICB2OEhleFRyYW5zZmVyVHhIZXggPSB2OEhleFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncm91dGVzIGEgdjggdHJhbnNmZXJXaXRoTWVtbyB0eCB0byBWOFRyYW5zZmVyQnVpbGRlciB2aWEgZmFsbGJhY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBBIHY4IHR4SGV4IGVuY29kZXMgdHJhbnNmZXJXaXRoTWVtbyBhdCBjYWxsIGluZGV4IDB4MjggKEJhbGFuY2VzIHBhbGxldCwgY2FsbCA0MCksXG4gICAgICAvLyB3aGljaCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdjcgU0RLIG1ldGFkYXRhLiBUaGUgZmFjdG9yeSBmYWxscyBiYWNrIHRvIHRyeUdldFY4QnVpbGRlcixcbiAgICAgIC8vIGRlY29kZXMgYWdhaW5zdCB2OCBtZXRhZGF0YSwgYW5kIHJldHVybnMgdGhlIGNvcnJlY3QgYnVpbGRlci5cbiAgICAgIGNvbnN0IGZhY3RvcnlJbnN0ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoYnVpbGRUZXN0Q29uZmlnKCkpO1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnlJbnN0LmZyb20odjhUcmFuc2ZlclR4SGV4KTtcbiAgICAgIHNob3VsZC5vayhidWlsZGVyIGluc3RhbmNlb2YgVjhUcmFuc2ZlckJ1aWxkZXIsICdleHBlY3RlZCBWOFRyYW5zZmVyQnVpbGRlciBmcm9tIHRyeUdldFY4QnVpbGRlciBmYWxsYmFjaycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JvdXRlcyBhIHY4IGhleC1tZW1vIHRyYW5zZmVyV2l0aE1lbW8gdHggdG8gVjhIZXhUcmFuc2ZlckJ1aWxkZXIgdmlhIGZhbGxiYWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZmFjdG9yeUluc3QgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShidWlsZFRlc3RDb25maWcoKSk7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeUluc3QuZnJvbSh2OEhleFRyYW5zZmVyVHhIZXgpO1xuICAgICAgc2hvdWxkLm9rKGJ1aWxkZXIgaW5zdGFuY2VvZiBWOEhleFRyYW5zZmVyQnVpbGRlciwgJ2V4cGVjdGVkIFY4SGV4VHJhbnNmZXJCdWlsZGVyIGZyb20gdHJ5R2V0VjhCdWlsZGVyIGZhbGxiYWNrJyk7XG4gICAgfSk7XG5cbiAgICBpdCgncm91dGVzIGEgdjcgdHJhbnNmZXJXaXRoTWVtbyB0eCB0byBUcmFuc2ZlckJ1aWxkZXIgZGlyZWN0bHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBmYWN0b3J5SW5zdCA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGJ1aWxkVGVzdENvbmZpZygpKTtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5SW5zdC5mcm9tKHJhd1R4LnRyYW5zZmVyLnNpZ25lZCk7XG4gICAgICBzaG91bGQub2soYnVpbGRlciBpbnN0YW5jZW9mIFRyYW5zZmVyQnVpbGRlciwgJ2V4cGVjdGVkIFRyYW5zZmVyQnVpbGRlciBmb3IgdjcgdHhIZXgnKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
240
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDRDQUFvRDtBQUNwRCxvREFBNEI7QUFDNUIsMENBTzBCO0FBRTFCLCtDQUFvRTtBQUNwRSxnRkFBa0U7QUFDbEUsaUNBQXlDO0FBRXpDLFFBQVEsQ0FBQyxpQ0FBaUMsRUFBRTtJQUMxQyxNQUFNLE1BQU0sR0FBRyxvQkFBUSxDQUFDLFFBQVEsQ0FBQztJQUNqQyxJQUFJLE9BQWtDLENBQUM7SUFFdkMsU0FBUyxDQUFDLHdCQUF3QixFQUFFO1FBQ2xDLE1BQU0sQ0FBQztZQUNMLE9BQU8sR0FBRyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FBQztRQUVILENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxxQkFBZSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUMvRCxFQUFFLENBQUMsNEJBQTRCLEdBQUcsQ0FBQyxJQUFJLHFCQUFxQixHQUFHLENBQUMsSUFBSSxVQUFVLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQ3pGLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQWtDLENBQUMsQ0FBQztnQkFFcEcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFMUMsT0FB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QkFBaUIsR0FBRyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUV6RCw0RkFBNEY7WUFDNUYsMkVBQTJFO1lBQzNFLE1BQU0sV0FBVyxHQUFHLElBQUksK0JBQXlCLENBQUMsSUFBQSxzQkFBZSxHQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDNUYsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQzNELGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNoRyxNQUFNLFNBQVMsR0FBRyxNQUFNLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUUvQyxnQkFBTSxDQUFDLEtBQUssQ0FDVixTQUFTLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFDekMsZ0JBQWdCLEVBQ2hCLDBGQUEwRixDQUMzRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29pbnMsIE5ldHdvcmtUeXBlIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHtcbiAgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSxcbiAgVHJhbnNmZXJCdWlsZGVyLFxuICBWOFRyYW5zZmVyQnVpbGRlcixcbiAgVjhIZXhUcmFuc2ZlckJ1aWxkZXIsXG4gIFY4VG9rZW5UcmFuc2ZlckJ1aWxkZXIsXG4gIHV0aWxzLFxufSBmcm9tICcuLi8uLi8uLi9zcmMvbGliJztcbmltcG9ydCB7IEludGVyZmFjZSB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyByYXdUeCwgYWNjb3VudHMsIG1vY2tUc3NTaWduYXR1cmUgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMnO1xuaW1wb3J0ICogYXMgbWF0ZXJpYWxEYXRhIGZyb20gJy4uLy4uL3Jlc291cmNlcy9tYXRlcmlhbERhdGEuanNvbic7XG5pbXBvcnQgeyBidWlsZFRlc3RDb25maWcgfSBmcm9tICcuL2Jhc2UnO1xuXG5kZXNjcmliZSgnVGFvIFRyYW5zYWN0aW9uIEJ1aWxkZXIgRmFjdG9yeScsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc2VuZGVyID0gYWNjb3VudHMuYWNjb3VudDE7XG4gIGxldCBmYWN0b3J5OiBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5O1xuXG4gIHhkZXNjcmliZSgncGFyc2UgZ2VuZXJpYyBidWlsZGVycycsIGZ1bmN0aW9uICgpIHtcbiAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndHBvbHl4JykpO1xuICAgIH0pO1xuXG4gICAgW3sgdHlwZTogJ3RyYW5zZmVyJywgYnVpbGRlcjogVHJhbnNmZXJCdWlsZGVyIH1dLmZvckVhY2goKHR4bikgPT4ge1xuICAgICAgaXQoYHNob3VsZCBwYXJzZSBhbiB1bnNpZ25lZCAke3R4bi50eXBlfSB0eG4gYW5kIHJldHVybiBhICR7dHhuLnR5cGV9IGJ1aWxkZXJgLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmZyb20ocmF3VHhbdHhuLnR5cGVdLnVuc2lnbmVkKS5tYXRlcmlhbChtYXRlcmlhbERhdGEgYXMgSW50ZXJmYWNlLk1hdGVyaWFsKTtcblxuICAgICAgICBidWlsZGVyLnNob3VsZC5iZS5pbnN0YW5jZU9mKHR4bi5idWlsZGVyKTtcblxuICAgICAgICBidWlsZGVyXG4gICAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMyB9KVxuICAgICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJylcbiAgICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgICBzaG91bGQuZXF1YWwodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgcmF3VHhbdHhuLnR5cGVdLnVuc2lnbmVkKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdChgc2hvdWxkIHBhcnNlIGEgc2lnbmVkICR7dHhuLnR5cGV9IHR4biBhbmQgcmV0dXJuIGEgJHt0eG4udHlwZX0gYnVpbGRlcmAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZnJvbShyYXdUeFt0eG4udHlwZV0uc2lnbmVkKS5tYXRlcmlhbChtYXRlcmlhbERhdGEgYXMgSW50ZXJmYWNlLk1hdGVyaWFsKTtcblxuICAgICAgICBidWlsZGVyLnNob3VsZC5iZS5pbnN0YW5jZU9mKHR4bi5idWlsZGVyKTtcblxuICAgICAgICBidWlsZGVyXG4gICAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMyB9KVxuICAgICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJyk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgICBzaG91bGQuZXF1YWwodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgcmF3VHhbdHhuLnR5cGVdLnNpZ25lZCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3RyeUdldFY4QnVpbGRlciByb3V0aW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJlY2VpdmVyID0gYWNjb3VudHMuYWNjb3VudDI7XG5cbiAgICBsZXQgdjhUcmFuc2ZlclR4SGV4OiBzdHJpbmc7XG4gICAgbGV0IHY4SGV4VHJhbnNmZXJUeEhleDogc3RyaW5nO1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IGJ1aWxkVGVzdENvbmZpZygpO1xuXG4gICAgICAvLyBCdWlsZCBhbiB1bnNpZ25lZCB2OCB0cmFuc2ZlcldpdGhNZW1vIHR4IChwbGFpbi1zdHJpbmcgbWVtbywgbm90IDB4LXByZWZpeGVkKVxuICAgICAgY29uc3QgdjhUeCA9IGF3YWl0IG5ldyBWOFRyYW5zZmVyQnVpbGRlcihjb25maWcpXG4gICAgICAgIC5hbW91bnQoJzEwMDAwMDAnKVxuICAgICAgICAudG8oeyBhZGRyZXNzOiByZWNlaXZlci5hZGRyZXNzIH0pXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAubWVtbygnMCcpXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2soJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpXG4gICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDEgfSlcbiAgICAgICAgLmZlZSh7IGFtb3VudDogMCwgdHlwZTogJ3RpcCcgfSlcbiAgICAgICAgLmJ1aWxkKCk7XG4gICAgICB2OFRyYW5zZmVyVHhIZXggPSB2OFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIC8vIEJ1aWxkIGFuIHVuc2lnbmVkIHY4IGhleC1tZW1vIHRyYW5zZmVyV2l0aE1lbW8gdHhcbiAgICAgIGNvbnN0IHY4SGV4VHggPSBhd2FpdCBuZXcgVjhIZXhUcmFuc2ZlckJ1aWxkZXIoY29uZmlnKVxuICAgICAgICAuYW1vdW50KCcxMDAwMDAwJylcbiAgICAgICAgLnRvKHsgYWRkcmVzczogcmVjZWl2ZXIuYWRkcmVzcyB9KVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgLm1lbW8oJzU2NTk0JylcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJylcbiAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMSB9KVxuICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KVxuICAgICAgICAuYnVpbGQoKTtcbiAgICAgIHY4SGV4VHJhbnNmZXJUeEhleCA9IHY4SGV4VHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyb3V0ZXMgYSB2OCB0cmFuc2ZlcldpdGhNZW1vIHR4IHRvIFY4VHJhbnNmZXJCdWlsZGVyIHZpYSBmYWxsYmFjaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEEgdjggdHhIZXggZW5jb2RlcyB0cmFuc2ZlcldpdGhNZW1vIGF0IGNhbGwgaW5kZXggMHgyOCAoQmFsYW5jZXMgcGFsbGV0LCBjYWxsIDQwKSxcbiAgICAgIC8vIHdoaWNoIGRvZXMgbm90IGV4aXN0IGluIHRoZSB2NyBTREsgbWV0YWRhdGEuIFRoZSBmYWN0b3J5IGZhbGxzIGJhY2sgdG8gdHJ5R2V0VjhCdWlsZGVyLFxuICAgICAgLy8gZGVjb2RlcyBhZ2FpbnN0IHY4IG1ldGFkYXRhLCBhbmQgcmV0dXJucyB0aGUgY29ycmVjdCBidWlsZGVyLlxuICAgICAgY29uc3QgZmFjdG9yeUluc3QgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShidWlsZFRlc3RDb25maWcoKSk7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeUluc3QuZnJvbSh2OFRyYW5zZmVyVHhIZXgpO1xuICAgICAgc2hvdWxkLm9rKGJ1aWxkZXIgaW5zdGFuY2VvZiBWOFRyYW5zZmVyQnVpbGRlciwgJ2V4cGVjdGVkIFY4VHJhbnNmZXJCdWlsZGVyIGZyb20gdHJ5R2V0VjhCdWlsZGVyIGZhbGxiYWNrJyk7XG4gICAgfSk7XG5cbiAgICBpdCgncm91dGVzIGEgdjggaGV4LW1lbW8gdHJhbnNmZXJXaXRoTWVtbyB0eCB0byBWOEhleFRyYW5zZmVyQnVpbGRlciB2aWEgZmFsbGJhY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBmYWN0b3J5SW5zdCA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGJ1aWxkVGVzdENvbmZpZygpKTtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5SW5zdC5mcm9tKHY4SGV4VHJhbnNmZXJUeEhleCk7XG4gICAgICBzaG91bGQub2soYnVpbGRlciBpbnN0YW5jZW9mIFY4SGV4VHJhbnNmZXJCdWlsZGVyLCAnZXhwZWN0ZWQgVjhIZXhUcmFuc2ZlckJ1aWxkZXIgZnJvbSB0cnlHZXRWOEJ1aWxkZXIgZmFsbGJhY2snKTtcbiAgICB9KTtcblxuICAgIGl0KCdyb3V0ZXMgYSB2NyB0cmFuc2ZlcldpdGhNZW1vIHR4IHRvIFRyYW5zZmVyQnVpbGRlciBkaXJlY3RseScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGZhY3RvcnlJbnN0ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoYnVpbGRUZXN0Q29uZmlnKCkpO1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnlJbnN0LmZyb20ocmF3VHgudHJhbnNmZXIuc2lnbmVkKTtcbiAgICAgIHNob3VsZC5vayhidWlsZGVyIGluc3RhbmNlb2YgVHJhbnNmZXJCdWlsZGVyLCAnZXhwZWN0ZWQgVHJhbnNmZXJCdWlsZGVyIGZvciB2NyB0eEhleCcpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBSZWdyZXNzaW9uIHRlc3QgZm9yIHRoZSBidWcgd2hlcmUgZ2V0QnVpbGRlcigpIGRlY29kZWQgYSB2OCBhZGRBbmRBZmZpcm1XaXRoTWVkaWF0b3JzXG4gIC8vIHBheWxvYWQgd2l0aCB2NyBtZXRhZGF0YSAoc2FtZSBjYWxsIGluZGV4LCBzbyBubyB0aHJvdyksIHNpbGVudGx5IGxvc3Qgc2VuZGVyLmRpZCwgdGhlblxuICAvLyByb3V0ZWQgdG8gdGhlIHY3IFRva2VuVHJhbnNmZXJCdWlsZGVyIOKAlCBjYXVzaW5nIEpvaSB0byB0aHJvd1xuICAvLyAnbGVnc1swXS5mdW5naWJsZS5zZW5kZXIuZGlkIGlzIHJlcXVpcmVkJy5cbiAgZGVzY3JpYmUoJ3Y4IHRva2VuIHRyYW5zZmVyIHJvdXRpbmcgcmVncmVzc2lvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBGUk9NX0RJRCA9ICcweDEyMDhkNzg1MWU2Njk4MjQ5YWVhNDA3NDI3MDFlZTFlZjZjZGNjZWQyNjBhN2M0OWMxY2NhMWE5ZGI4MzYzNDInO1xuICAgIGNvbnN0IFRPX0RJRCA9ICcweGJjNmY3ZWM4MDhmMzYxYzEzNTNhYjlkYzg4YzNjYzU0Yjk4ZDllYjYwZmVkOWMwNjNlNjdhNDA5MjViOGVmNjEnO1xuICAgIGNvbnN0IEFTU0VUX0lEID0gJzB4NzgwNjAyODg3YjM1OGNmNDg5ODlkMGQ5YWE2YzhkMjgnO1xuICAgIGNvbnN0IFZBTElESVRZID0geyBmaXJzdFZhbGlkOiAzOTMzLCBtYXhEdXJhdGlvbjogNjQgfTtcbiAgICBjb25zdCBSRUZfQkxPQ0sgPSAnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJztcblxuICAgIGxldCB1bnNpZ25lZEhleDogc3RyaW5nO1xuICAgIGxldCBzaWduZWRIZXg6IHN0cmluZztcblxuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjb25maWcgPSBidWlsZFRlc3RDb25maWcoKTtcblxuICAgICAgLy8gdW5zaWduZWQgKG5vIHNpZ25hdHVyZSBhdHRhY2hlZClcbiAgICAgIGNvbnN0IHVuc2lnbmVkVHggPSBhd2FpdCBuZXcgVjhUb2tlblRyYW5zZmVyQnVpbGRlcihjb25maWcpXG4gICAgICAgIC5hc3NldElkKEFTU0VUX0lEKVxuICAgICAgICAuYW1vdW50KCcxMDAwMDAwJylcbiAgICAgICAgLmZyb21ESUQoRlJPTV9ESUQpXG4gICAgICAgIC50b0RJRChUT19ESUQpXG4gICAgICAgIC5tZW1vKCcwJylcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgIC52YWxpZGl0eShWQUxJRElUWSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKFJFRl9CTE9DSylcbiAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMSB9KVxuICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KVxuICAgICAgICAuYnVpbGQoKTtcbiAgICAgIHVuc2lnbmVkSGV4ID0gdW5zaWduZWRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAvLyBzaWduZWRcbiAgICAgIGNvbnN0IHNpZ25lZEJ1aWxkZXIgPSBuZXcgVjhUb2tlblRyYW5zZmVyQnVpbGRlcihjb25maWcpXG4gICAgICAgIC5hc3NldElkKEFTU0VUX0lEKVxuICAgICAgICAuYW1vdW50KCcxMDAwMDAwJylcbiAgICAgICAgLmZyb21ESUQoRlJPTV9ESUQpXG4gICAgICAgIC50b0RJRChUT19ESUQpXG4gICAgICAgIC5tZW1vKCcwJylcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgIC52YWxpZGl0eShWQUxJRElUWSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKFJFRl9CTE9DSylcbiAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMSB9KVxuICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KTtcbiAgICAgIHNpZ25lZEJ1aWxkZXIuYWRkU2lnbmF0dXJlKHsgcHViOiBzZW5kZXIucHVibGljS2V5IH0sIEJ1ZmZlci5mcm9tKG1vY2tUc3NTaWduYXR1cmUsICdoZXgnKSk7XG4gICAgICBjb25zdCBzaWduZWRUeCA9IGF3YWl0IHNpZ25lZEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNpZ25lZEhleCA9IHNpZ25lZFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncm91dGVzIGEgdjggdG9rZW4gdHJhbnNmZXIgdHggdG8gVjhUb2tlblRyYW5zZmVyQnVpbGRlciAobm90IFRva2VuVHJhbnNmZXJCdWlsZGVyKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFRoZSBjYWxsIGluZGV4IGZvciBhZGRBbmRBZmZpcm1XaXRoTWVkaWF0b3JzIGlzIGlkZW50aWNhbCBpbiB2NyBhbmQgdjgsIHNvIHRoZSB2NyBkZWNvZGVcbiAgICAgIC8vIHBhdGggXCJzdWNjZWVkc1wiIGJ1dCBkcm9wcyBzZW5kZXIuZGlkLiBUaGUgZml4IGluIGdldEJ1aWxkZXIoKSBkZXRlY3RzIHRoZSBtaXNzaW5nIGZpZWxkXG4gICAgICAvLyBhbmQgcmVkaXJlY3RzIHRvIHRyeUdldFY4QnVpbGRlcigpIGJlZm9yZSBKb2kgdmFsaWRhdGlvbiBmaXJlcy5cbiAgICAgIGNvbnN0IGZhY3RvcnlJbnN0ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoYnVpbGRUZXN0Q29uZmlnKCkpO1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnlJbnN0LmZyb20oc2lnbmVkSGV4KTtcbiAgICAgIHNob3VsZC5vayhcbiAgICAgICAgYnVpbGRlciBpbnN0YW5jZW9mIFY4VG9rZW5UcmFuc2ZlckJ1aWxkZXIsXG4gICAgICAgICdleHBlY3RlZCBWOFRva2VuVHJhbnNmZXJCdWlsZGVyIOKAlCB2OCBwYXlsb2FkIG11c3Qgbm90IGJlIHNpbGVudGx5IG1pcy1yb3V0ZWQgdG8gdjcgVG9rZW5UcmFuc2ZlckJ1aWxkZXInXG4gICAgICApO1xuICAgICAgLy8gVjhUb2tlblRyYW5zZmVyQnVpbGRlciBleHRlbmRzIFRva2VuVHJhbnNmZXJCdWlsZGVyOyB2ZXJpZnkgaXQgaXMgdGhlIHY4IHN1YmNsYXNzXG4gICAgICAvLyBzcGVjaWZpY2FsbHkgKGNvbnN0cnVjdG9yIG5hbWUpIHNvIGEgZnV0dXJlIHJlZmFjdG9yIHRoYXQgYnJlYWtzIHRoZSBjbGFzcyBoaWVyYXJjaHlcbiAgICAgIC8vIGlzIGNhdWdodCBoZXJlIHJhdGhlciB0aGFuIHNpbGVudGx5IGFsbG93aW5nIGEgcGxhaW4gVG9rZW5UcmFuc2ZlckJ1aWxkZXIgdGhyb3VnaC5cbiAgICAgIHNob3VsZC5lcXVhbChcbiAgICAgICAgYnVpbGRlci5jb25zdHJ1Y3Rvci5uYW1lLFxuICAgICAgICAnVjhUb2tlblRyYW5zZmVyQnVpbGRlcicsXG4gICAgICAgICdjb25zdHJ1Y3RvciBtdXN0IGJlIFY4VG9rZW5UcmFuc2ZlckJ1aWxkZXIsIG5vdCBwbGFpbiBUb2tlblRyYW5zZmVyQnVpbGRlcidcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVidWlsZHMgZnJvbSB1bnNpZ25lZCB2OCB0b2tlbiB0cmFuc2ZlciBoZXggd2l0aCBjb3JyZWN0IGZpZWxkcyBhbmQgbWF0Y2hpbmcgcmF3IG91dHB1dCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGZhY3RvcnlJbnN0ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoYnVpbGRUZXN0Q29uZmlnKCkpO1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnlJbnN0LmZyb20odW5zaWduZWRIZXgpO1xuICAgICAgYnVpbGRlci52YWxpZGl0eShWQUxJRElUWSkucmVmZXJlbmNlQmxvY2soUkVGX0JMT0NLKS5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KTtcbiAgICAgIGNvbnN0IHJlYnVpbHQgPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIGNvbnN0IGpzb24gPSByZWJ1aWx0LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmVxdWFsKGpzb24uYXNzZXRJZCwgQVNTRVRfSUQpO1xuICAgICAgc2hvdWxkLmVxdWFsKGpzb24uYW1vdW50LCAnMTAwMDAwMCcpO1xuICAgICAgc2hvdWxkLmVxdWFsKGpzb24uZnJvbURJRCwgRlJPTV9ESUQpO1xuICAgICAgc2hvdWxkLmVxdWFsKGpzb24udG9ESUQsIFRPX0RJRCk7XG4gICAgICBzaG91bGQuZXF1YWwocmVidWlsdC50b0Jyb2FkY2FzdEZvcm1hdCgpLCB1bnNpZ25lZEhleCwgJ3Vuc2lnbmVkIHJvdW5kLXRyaXAgaGV4IG11c3QgbWF0Y2ggb3JpZ2luYWwnKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWJ1aWxkcyBmcm9tIHNpZ25lZCB2OCB0b2tlbiB0cmFuc2ZlciBoZXggd2l0aCBjb3JyZWN0IGZpZWxkcyBhbmQgbWF0Y2hpbmcgcmF3IG91dHB1dCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGZhY3RvcnlJbnN0ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoYnVpbGRUZXN0Q29uZmlnKCkpO1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnlJbnN0LmZyb20oc2lnbmVkSGV4KTtcbiAgICAgIGJ1aWxkZXIudmFsaWRpdHkoVkFMSURJVFkpLnJlZmVyZW5jZUJsb2NrKFJFRl9CTE9DSyk7XG4gICAgICBjb25zdCByZWJ1aWx0ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuXG4gICAgICBjb25zdCBqc29uID0gcmVidWlsdC50b0pzb24oKTtcbiAgICAgIHNob3VsZC5lcXVhbChqc29uLmFzc2V0SWQsIEFTU0VUX0lEKTtcbiAgICAgIHNob3VsZC5lcXVhbChqc29uLmFtb3VudCwgJzEwMDAwMDAnKTtcbiAgICAgIHNob3VsZC5lcXVhbChqc29uLmZyb21ESUQsIEZST01fRElEKTtcbiAgICAgIHNob3VsZC5lcXVhbChqc29uLnRvRElELCBUT19ESUQpO1xuICAgICAgc2hvdWxkLmVxdWFsKHJlYnVpbHQudG9Ccm9hZGNhc3RGb3JtYXQoKSwgc2lnbmVkSGV4LCAnc2lnbmVkIHJvdW5kLXRyaXAgaGV4IG11c3QgbWF0Y2ggb3JpZ2luYWwnKTtcbiAgICB9KTtcblxuICAgIGl0KCdmb3J3YXJkcyBmYWN0b3J5IGxpdmUgbWF0ZXJpYWwgc3BlY1ZlcnNpb24gdG8gVjhUb2tlblRyYW5zZmVyQnVpbGRlciAoU0ktWFhYWCByZWdyZXNzaW9uKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFJlZ3Jlc3Npb24gZm9yIHRoZSBidWcgd2hlcmUgZ2V0VjhUb2tlblRyYW5zZmVyQnVpbGRlcigpIHdhcyBjYWxsZWQgd2l0aG91dFxuICAgICAgLy8gLm1hdGVyaWFsKHRoaXMuX21hdGVyaWFsKSwgY2F1c2luZyB0aGUgYnVpbGRlciB0byB1c2UgdGhlIHN0YXRpYyBwbGFjZWhvbGRlclxuICAgICAgLy8gc3BlY1ZlcnNpb24gKDgwMDAwMDApIGluc3RlYWQgb2YgdGhlIGxpdmUgY2hhaW4gc3BlY1ZlcnNpb24uIFRoaXMgcHJvZHVjZWQgYVxuICAgICAgLy8gcmVidWlsdCBzaWduYWJsZVBheWxvYWQgd2l0aCB3cm9uZyBhZGRpdGlvbmFsIGJ5dGVzLCBmYWlsaW5nIHZlcmlmeVNpZ25hdHVyZS5cbiAgICAgIGNvbnN0IGxpdmVTcGVjVmVyc2lvbiA9IDgwMDAwMjA7XG4gICAgICBjb25zdCBsaXZlTWF0ZXJpYWwgPSB7XG4gICAgICAgIC4uLnV0aWxzLmdldFY4TWF0ZXJpYWwoTmV0d29ya1R5cGUuVEVTVE5FVCksXG4gICAgICAgIHNwZWNWZXJzaW9uOiBsaXZlU3BlY1ZlcnNpb24sXG4gICAgICB9IGFzIEludGVyZmFjZS5NYXRlcmlhbDtcblxuICAgICAgLy8gQnVpbGQgYW4gdW5zaWduZWQgdHggd2l0aCB0aGUgbGl2ZSBtYXRlcmlhbCDigJQgaXRzIHNpZ25hYmxlIHBheWxvYWQgZW5jb2RlcyBsaXZlU3BlY1ZlcnNpb24uXG4gICAgICBjb25zdCBvcmlnaW5hbFR4ID0gYXdhaXQgbmV3IFY4VG9rZW5UcmFuc2ZlckJ1aWxkZXIoYnVpbGRUZXN0Q29uZmlnKCkpXG4gICAgICAgIC5tYXRlcmlhbChsaXZlTWF0ZXJpYWwpXG4gICAgICAgIC5hc3NldElkKEFTU0VUX0lEKVxuICAgICAgICAuYW1vdW50KCcxMDAwMDAwJylcbiAgICAgICAgLmZyb21ESUQoRlJPTV9ESUQpXG4gICAgICAgIC50b0RJRChUT19ESUQpXG4gICAgICAgIC5tZW1vKCcwJylcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgIC52YWxpZGl0eShWQUxJRElUWSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKFJFRl9CTE9DSylcbiAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMSB9KVxuICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KVxuICAgICAgICAuYnVpbGQoKTtcbiAgICAgIGNvbnN0IG9yaWdpbmFsU2lnbmFibGUgPSBvcmlnaW5hbFR4LnNpZ25hYmxlUGF5bG9hZC50b1N0cmluZygnaGV4Jyk7XG4gICAgICBjb25zdCBzaWduaW5nUGF5bG9hZEhleCA9IG9yaWdpbmFsVHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgLy8gRmFjdG9yeSB3aXRoIHRoZSBzYW1lIGxpdmUgbWF0ZXJpYWwgbXVzdCBmb3J3YXJkIGl0IHRvIHRoZSBjcmVhdGVkIFY4VG9rZW5UcmFuc2ZlckJ1aWxkZXJcbiAgICAgIC8vIHNvIHRoZSByZWJ1aWxkIHVzZXMgbGl2ZVNwZWNWZXJzaW9uLCBub3QgdGhlIHN0YXRpYyA4MDAwMDAwIHBsYWNlaG9sZGVyLlxuICAgICAgY29uc3QgZmFjdG9yeUluc3QgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShidWlsZFRlc3RDb25maWcoKSkubWF0ZXJpYWwobGl2ZU1hdGVyaWFsKTtcbiAgICAgIGNvbnN0IHJlYnVpbHRCdWlsZGVyID0gZmFjdG9yeUluc3QuZnJvbShzaWduaW5nUGF5bG9hZEhleCk7XG4gICAgICByZWJ1aWx0QnVpbGRlci5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KS52YWxpZGl0eShWQUxJRElUWSkucmVmZXJlbmNlQmxvY2soUkVGX0JMT0NLKTtcbiAgICAgIGNvbnN0IHJlYnVpbHRUeCA9IGF3YWl0IHJlYnVpbHRCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIHNob3VsZC5lcXVhbChcbiAgICAgICAgcmVidWlsdFR4LnNpZ25hYmxlUGF5bG9hZC50b1N0cmluZygnaGV4JyksXG4gICAgICAgIG9yaWdpbmFsU2lnbmFibGUsXG4gICAgICAgICdzaWduYWJsZVBheWxvYWQgbXVzdCBtYXRjaDogZmFjdG9yeSBtdXN0IGZvcndhcmQgbGl2ZSBtYXRlcmlhbCB0byBWOFRva2VuVHJhbnNmZXJCdWlsZGVyJ1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -140,6 +140,46 @@ describe('V8BatchStakingBuilder', function () {
|
|
|
140
140
|
const builder = v8Factory.from(rawTxHex);
|
|
141
141
|
should_1.default.ok(builder instanceof lib_1.V8BatchStakingBuilder);
|
|
142
142
|
});
|
|
143
|
+
it('factory.material(liveMaterial).from(...) forwards the live material into the rebuilt v8 batch staking builder (SI-1034)', async () => {
|
|
144
|
+
// Reproduces the custodial staking incident: the HSM signs against LIVE chain material
|
|
145
|
+
// (e.g. a specVersion bump after a runtime upgrade), but wallet-platform's getSignedTx
|
|
146
|
+
// re-verifies by calling `factory.material(liveMaterial).from(serializedTxHex)`. On the
|
|
147
|
+
// decode-success path, `getBuilder()` used to return `getV8BatchStakingBuilder()` without
|
|
148
|
+
// forwarding `this._material`, so the rebuild silently fell back to the builder's static
|
|
149
|
+
// `getV8Material()` (stale specVersion) instead of the caller's live material. Because
|
|
150
|
+
// specVersion is embedded in the raw ExtrinsicPayload bytes that are actually signed, the
|
|
151
|
+
// rebuilt signable payload would then diverge from the one the HSM signed, producing
|
|
152
|
+
// `InvalidSignature: invalid key signature` at Trust approval.
|
|
153
|
+
//
|
|
154
|
+
// Simulate a "live" chain that has moved past the pinned static testnet v8 material by
|
|
155
|
+
// bumping specVersion on a copy of it.
|
|
156
|
+
const liveMaterial = {
|
|
157
|
+
...resources_1.testnetV8Material,
|
|
158
|
+
specVersion: resources_1.testnetV8Material.specVersion + 10,
|
|
159
|
+
};
|
|
160
|
+
const originalTx = await new lib_1.V8BatchStakingBuilder((0, base_1.buildTestConfig)())
|
|
161
|
+
.material(liveMaterial)
|
|
162
|
+
.amount(bondAmount)
|
|
163
|
+
.payee('Staked')
|
|
164
|
+
.validators([validator])
|
|
165
|
+
.sender({ address: stash })
|
|
166
|
+
.validity({ firstValid, maxDuration: 64 })
|
|
167
|
+
.referenceBlock(referenceBlock)
|
|
168
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: nonce })
|
|
169
|
+
.build();
|
|
170
|
+
const rawTxHex = originalTx.toBroadcastFormat();
|
|
171
|
+
const originalSignablePayload = originalTx.signablePayload.toString('hex');
|
|
172
|
+
const rebuiltBuilder = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tpolyx')).material(liveMaterial).from(rawTxHex);
|
|
173
|
+
// The raw signing payload does not carry the sender address or the raw `firstValid` block
|
|
174
|
+
// number (only the encoded era), so — like any real caller re-verifying a decoded
|
|
175
|
+
// transaction — they must be supplied again before build() can run.
|
|
176
|
+
rebuiltBuilder.sender({ address: stash }).validity({ firstValid, maxDuration: 64 });
|
|
177
|
+
const rebuiltTx = await rebuiltBuilder.build();
|
|
178
|
+
const rebuiltSignablePayload = rebuiltTx.signablePayload.toString('hex');
|
|
179
|
+
// Without the SI-1034 fix, this fails: the rebuild uses the static material (specVersion
|
|
180
|
+
// 8000000) instead of liveMaterial (specVersion 8000010), so the payloads differ.
|
|
181
|
+
should_1.default.equal(rebuiltSignablePayload, originalSignablePayload);
|
|
182
|
+
});
|
|
143
183
|
});
|
|
144
184
|
});
|
|
145
185
|
describe('V8 staking wrappers (smoke build)', function () {
|
|
@@ -209,4 +249,4 @@ describe('V8 staking wrappers (smoke build)', function () {
|
|
|
209
249
|
should_1.default.equal(tx.toJson().specVersion, resources_1.testnetV8Material.specVersion);
|
|
210
250
|
});
|
|
211
251
|
});
|
|
212
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjhCYXRjaFN0YWtpbmdCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci92OEJhdGNoU3Rha2luZ0J1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxzRUFBdUQ7QUFDdkQsNENBQXVDO0FBQ3ZDLG9EQUE0QjtBQUM1QiwwQ0FTMEI7QUFFMUIsbUVBQTJDO0FBQzNDLHNEQUE4RTtBQUM5RSwrQ0FBOEM7QUFDOUMsaUNBQTZEO0FBRTdELFFBQVEsQ0FBQyx1QkFBdUIsRUFBRTtJQUNoQyxNQUFNLE9BQU8sR0FBRyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUVuRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyx1QkFBVyxDQUFDLE9BQU8sQ0FBQztJQUVoRyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsRUFBRSxDQUM3QixJQUFJLDJCQUFxQixDQUFDLElBQUEsc0JBQWUsR0FBRSxDQUFDO1NBQ3pDLE1BQU0sQ0FBQyxVQUFVLENBQUM7U0FDbEIsS0FBSyxDQUFDLFFBQVEsQ0FBQztTQUNmLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3ZCLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUMxQixRQUFRLENBQUMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDO1NBQ3pDLGNBQWMsQ0FBQyxjQUFjLENBQUM7U0FDOUIsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRW5FLFFBQVEsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFO1FBQzNCLEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxHQUFHLEVBQUU7WUFDM0QsTUFBTSxPQUFPLEdBQUcsSUFBSSwyQkFBcUIsQ0FBQyxJQUFBLHNCQUFlLEdBQUUsQ0FBQyxDQUFDO1lBQzdELE1BQU0sUUFBUSxHQUFJLE9BQWUsQ0FBQyxTQUFTLENBQUM7WUFDNUMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSw2QkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNsRSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLDZCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlELGdCQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsbURBQW1ELEVBQUUsR0FBRyxFQUFFO1lBQzNELE1BQU0sT0FBTyxHQUFHLElBQUksMkJBQXFCLENBQUMsSUFBQSx5QkFBa0IsR0FBRSxDQUFDLENBQUM7WUFDaEUsTUFBTSxRQUFRLEdBQUksT0FBZSxDQUFDLFNBQVMsQ0FBQztZQUM1QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLDZCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2xFLGdCQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsNkJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7UUFDOUIsRUFBRSxDQUFDLCtFQUErRSxFQUFFLEdBQUcsRUFBRTtZQUN2RixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUNuRCxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLFlBQVksMkJBQXFCLENBQUMsQ0FBQztZQUNwRCxnQkFBTSxDQUFDLEtBQUssQ0FBRSxPQUFlLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSw2QkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN0RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRTtRQUNqQyxFQUFFLENBQUMsdUNBQXVDLEVBQUUsR0FBRyxFQUFFO1lBQy9DLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ25ELGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQVEsT0FBZSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUM5RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFRLE9BQWUsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbkUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsa0RBQWtELEVBQUUsR0FBRyxFQUFFO1lBQzFELElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ2pELE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzNDLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLGdEQUFnRCxDQUFDLENBQUM7WUFFcEcsT0FBTyxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQzdDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLGdEQUFnRCxDQUFDLENBQUM7WUFFcEcsT0FBTyxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQzdDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDbkUsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUMxRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRTtRQUNqQyxFQUFFLENBQUMseUVBQXlFLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDdkYsTUFBTSxFQUFFLEdBQUcsTUFBTSxpQkFBaUIsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzdDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMzQixnQkFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzFDLGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsNkJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDaEUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLDZCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG9FQUFvRSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2xGLE1BQU0sRUFBRSxHQUFHLE1BQU0saUJBQWlCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM3QyxNQUFNLFNBQVMsR0FBSSxFQUFVLENBQUMscUJBQXFCLENBQUMsTUFBZ0IsQ0FBQztZQUNyRSwwRkFBMEY7WUFDMUYsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLHVCQUFXLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtRkFBbUYsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNqRyxNQUFNLEVBQUUsR0FBRyxNQUFNLGlCQUFpQixFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDN0MsTUFBTSxRQUFRLEdBQUcsZUFBSyxDQUFDLGFBQWEsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2RSxNQUFNLFFBQVEsR0FBRyx1QkFBaUIsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekQsTUFBTSxTQUFTLEdBQUcsSUFBQSwyQkFBTSxFQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFO2dCQUMvQyxXQUFXLEVBQUUsUUFBUSxDQUFDLFFBQVE7Z0JBQzlCLFFBQVE7YUFDVCxDQUFDLENBQUM7WUFFSCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNoRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztZQUVqRCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQTRCLENBQUM7WUFDaEUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFeEMsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxJQUF3RCxDQUFDO1lBQ3BGLE1BQU0sU0FBUyxHQUFHLE9BQU8sUUFBUSxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFFLFFBQVEsQ0FBQyxLQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlHLGdCQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNwQyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBRTdDLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZUFBSyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUN2RSxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsSUFBK0IsQ0FBQztZQUNoRSxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUUsQ0FBb0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3hHLGdCQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7UUFDMUMsRUFBRSxDQUFDLHNEQUFzRCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3BFLE1BQU0sT0FBTyxHQUFHLGlCQUFpQixFQUFFLENBQUM7WUFDcEMsTUFBTSxFQUFFLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakMsTUFBTSxRQUFRLEdBQUcsZUFBSyxDQUFDLGFBQWEsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2RSxNQUFNLFFBQVEsR0FBRyx1QkFBaUIsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekQsTUFBTSxTQUFTLEdBQUcsSUFBQSwyQkFBTSxFQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUMvRixnQkFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsMEJBQTBCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUMzRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxHQUFHLEVBQUU7WUFDM0QsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDbkQsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFnQixDQUFDLENBQUMsQ0FBQztRQUNoSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRTtRQUNwQyxFQUFFLENBQUMsd0RBQXdELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDdEUsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFNLGlCQUFpQixFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBRXpFLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ3RELFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFMUIsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ2pELGdCQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM5QyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzVELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG1GQUFtRixFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2pHLE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBTSxpQkFBaUIsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6RSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZDLGdCQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sWUFBWSwyQkFBcUIsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHFGQUFxRixFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ25HLDZGQUE2RjtZQUM3Riw4RkFBOEY7WUFDOUYsc0ZBQXNGO1lBQ3RGLHdCQUF3QjtZQUN4QixNQUFNLFFBQVEsR0FBRyxDQUFDLE1BQU0saUJBQWlCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekUsTUFBTSxVQUFVLEdBQUcsZUFBSyxDQUFDLGFBQWEsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6RSxNQUFNLFNBQVMsR0FBRyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDMUYsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6QyxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLFlBQVksMkJBQXFCLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsbUNBQW1DLEVBQUU7SUFDNUMsTUFBTSxPQUFPLEdBQUcsSUFBSSwrQkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDbkUsTUFBTSxTQUFTLEdBQUcsdUJBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO0lBQ2hELE1BQU0sTUFBTSxHQUFHLHVCQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUN6QyxNQUFNLGNBQWMsR0FBRyx1QkFBVyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7SUFFMUQsTUFBTSxNQUFNLEdBQUcsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUV6RCxFQUFFLENBQUMsNENBQTRDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDMUQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDaEQsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxZQUFZLHdCQUFrQixDQUFDLENBQUM7UUFDakQsTUFBTSxFQUFFLEdBQUcsTUFBTSxPQUFPO2FBQ3JCLE1BQU0sQ0FBQyxVQUFVLENBQUM7YUFDbEIsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO2FBQzNCLFFBQVEsQ0FBQyxNQUFNLENBQUM7YUFDaEIsY0FBYyxDQUFDLGNBQWMsQ0FBQzthQUM5QixVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO2FBQzNELEtBQUssRUFBRSxDQUFDO1FBQ1gsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLFdBQVcsRUFBRSw2QkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN2RSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN2RCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM3QyxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLFlBQVkscUJBQWUsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sRUFBRSxHQUFHLE1BQU0sT0FBTzthQUNyQixNQUFNLENBQUMsVUFBVSxDQUFDO2FBQ2xCLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQzthQUMzQixRQUFRLENBQUMsTUFBTSxDQUFDO2FBQ2hCLGNBQWMsQ0FBQyxjQUFjLENBQUM7YUFDOUIsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQzthQUMzRCxLQUFLLEVBQUUsQ0FBQztRQUNYLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxXQUFXLEVBQUUsNkJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdkUsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsaURBQWlELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDL0QsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDckQsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxZQUFZLDZCQUF1QixDQUFDLENBQUM7UUFDdEQsTUFBTSxFQUFFLEdBQUcsTUFBTSxPQUFPO2FBQ3JCLE1BQU0sQ0FBQyxVQUFVLENBQUM7YUFDbEIsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO2FBQzNCLFFBQVEsQ0FBQyxNQUFNLENBQUM7YUFDaEIsY0FBYyxDQUFDLGNBQWMsQ0FBQzthQUM5QixVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO2FBQzNELEtBQUssRUFBRSxDQUFDO1FBQ1gsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLFdBQVcsRUFBRSw2QkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN2RSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNqRSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztRQUN2RCxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLFlBQVksK0JBQXlCLENBQUMsQ0FBQztRQUN4RCxNQUFNLEVBQUUsR0FBRyxNQUFNLE9BQU87YUFDckIsYUFBYSxDQUFDLENBQUMsQ0FBQzthQUNoQixNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7YUFDM0IsUUFBUSxDQUFDLE1BQU0sQ0FBQzthQUNoQixjQUFjLENBQUMsY0FBYyxDQUFDO2FBQzlCLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7YUFDM0QsS0FBSyxFQUFFLENBQUM7UUFDWCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsV0FBVyxFQUFFLDZCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZFLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDJDQUEyQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3pELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQy9DLGdCQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sWUFBWSx1QkFBaUIsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sRUFBRSxHQUFHLE1BQU0sT0FBTzthQUNyQixVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUN2QixNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7YUFDM0IsUUFBUSxDQUFDLE1BQU0sQ0FBQzthQUNoQixjQUFjLENBQUMsY0FBYyxDQUFDO2FBQzlCLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7YUFDM0QsS0FBSyxFQUFFLENBQUM7UUFDWCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsV0FBVyxFQUFFLDZCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZFLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWNvZGUgfSBmcm9tICdAc3Vic3RyYXRlL3R4d3JhcHBlci1wb2xrYWRvdCc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7XG4gIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnksXG4gIFY4QmF0Y2hTdGFraW5nQnVpbGRlcixcbiAgVjhCb25kRXh0cmFCdWlsZGVyLFxuICBWOFVuYm9uZEJ1aWxkZXIsXG4gIFY4QmF0Y2hVbnN0YWtpbmdCdWlsZGVyLFxuICBWOFdpdGhkcmF3VW5ib25kZWRCdWlsZGVyLFxuICBWOE5vbWluYXRlQnVpbGRlcixcbiAgU2luZ2xldG9uUmVnaXN0cnksXG59IGZyb20gJy4uLy4uLy4uL3NyYy9saWInO1xuaW1wb3J0IHsgQmF0Y2hBcmdzLCBOb21pbmF0ZUFyZ3MsIFY4Qm9uZEFyZ3MgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL2lmYWNlJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi8uLi8uLi9zcmMvbGliL3V0aWxzJztcbmltcG9ydCB7IHRlc3RuZXRWOE1hdGVyaWFsLCBtYWlubmV0VjhNYXRlcmlhbCB9IGZyb20gJy4uLy4uLy4uL3NyYy9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgc3Rha2luZ1R4VjggfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgYnVpbGRUZXN0Q29uZmlnLCBidWlsZE1haW5uZXRDb25maWcgfSBmcm9tICcuL2Jhc2UnO1xuXG5kZXNjcmliZSgnVjhCYXRjaFN0YWtpbmdCdWlsZGVyJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0cG9seXgnKSk7XG5cbiAgY29uc3QgeyBzdGFzaCwgdmFsaWRhdG9yLCBib25kQW1vdW50LCByZWZlcmVuY2VCbG9jaywgbm9uY2UsIGZpcnN0VmFsaWQgfSA9IHN0YWtpbmdUeFY4LnNhbmRib3g7XG5cbiAgY29uc3QgYnVpbGRTYW5kYm94QmF0Y2ggPSAoKSA9PlxuICAgIG5ldyBWOEJhdGNoU3Rha2luZ0J1aWxkZXIoYnVpbGRUZXN0Q29uZmlnKCkpXG4gICAgICAuYW1vdW50KGJvbmRBbW91bnQpXG4gICAgICAucGF5ZWUoJ1N0YWtlZCcpXG4gICAgICAudmFsaWRhdG9ycyhbdmFsaWRhdG9yXSlcbiAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzdGFzaCB9KVxuICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZCwgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAucmVmZXJlbmNlQmxvY2socmVmZXJlbmNlQmxvY2spXG4gICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiBub25jZSB9KTtcblxuICBkZXNjcmliZSgndjggbWF0ZXJpYWwnLCAoKSA9PiB7XG4gICAgaXQoJ3Rlc3RuZXQgYnVpbGRlciB1c2VzIHY4IHNwZWNWZXJzaW9uIGFuZCB0eFZlcnNpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFY4QmF0Y2hTdGFraW5nQnVpbGRlcihidWlsZFRlc3RDb25maWcoKSk7XG4gICAgICBjb25zdCBtYXRlcmlhbCA9IChidWlsZGVyIGFzIGFueSkuX21hdGVyaWFsO1xuICAgICAgc2hvdWxkLmVxdWFsKG1hdGVyaWFsLnNwZWNWZXJzaW9uLCB0ZXN0bmV0VjhNYXRlcmlhbC5zcGVjVmVyc2lvbik7XG4gICAgICBzaG91bGQuZXF1YWwobWF0ZXJpYWwudHhWZXJzaW9uLCB0ZXN0bmV0VjhNYXRlcmlhbC50eFZlcnNpb24pO1xuICAgICAgc2hvdWxkLmVxdWFsKG1hdGVyaWFsLnNwZWNWZXJzaW9uLCA4MDAwMDAwKTtcbiAgICB9KTtcblxuICAgIGl0KCdtYWlubmV0IGJ1aWxkZXIgdXNlcyB2OCBzcGVjVmVyc2lvbiBhbmQgdHhWZXJzaW9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBWOEJhdGNoU3Rha2luZ0J1aWxkZXIoYnVpbGRNYWlubmV0Q29uZmlnKCkpO1xuICAgICAgY29uc3QgbWF0ZXJpYWwgPSAoYnVpbGRlciBhcyBhbnkpLl9tYXRlcmlhbDtcbiAgICAgIHNob3VsZC5lcXVhbChtYXRlcmlhbC5zcGVjVmVyc2lvbiwgbWFpbm5ldFY4TWF0ZXJpYWwuc3BlY1ZlcnNpb24pO1xuICAgICAgc2hvdWxkLmVxdWFsKG1hdGVyaWFsLnR4VmVyc2lvbiwgbWFpbm5ldFY4TWF0ZXJpYWwudHhWZXJzaW9uKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2ZhY3RvcnkgbWV0aG9kJywgKCkgPT4ge1xuICAgIGl0KCdnZXRWOEJhdGNoU3Rha2luZ0J1aWxkZXIgcmV0dXJucyBhIFY4QmF0Y2hTdGFraW5nQnVpbGRlciBjYXJyeWluZyB2OCBtYXRlcmlhbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFY4QmF0Y2hTdGFraW5nQnVpbGRlcigpO1xuICAgICAgc2hvdWxkLm9rKGJ1aWxkZXIgaW5zdGFuY2VvZiBWOEJhdGNoU3Rha2luZ0J1aWxkZXIpO1xuICAgICAgc2hvdWxkLmVxdWFsKChidWlsZGVyIGFzIGFueSkuX21hdGVyaWFsLnNwZWNWZXJzaW9uLCB0ZXN0bmV0VjhNYXRlcmlhbC5zcGVjVmVyc2lvbik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzZXR0ZXIgdmFsaWRhdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIG5vdCBleHBvc2UgYSBjb250cm9sbGVyIHNldHRlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFY4QmF0Y2hTdGFraW5nQnVpbGRlcigpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR5cGVvZiAoYnVpbGRlciBhcyBhbnkpLmNvbnRyb2xsZXIsICd1bmRlZmluZWQnKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eXBlb2YgKGJ1aWxkZXIgYXMgYW55KS5nZXRDb250cm9sbGVyLCAndW5kZWZpbmVkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlcXVpcmUgYm90aCBib25kIGFuZCBub21pbmF0ZSBvcGVyYXRpb25zJywgKCkgPT4ge1xuICAgICAgbGV0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFY4QmF0Y2hTdGFraW5nQnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5hbW91bnQoYm9uZEFtb3VudCkucGF5ZWUoJ1N0YWtlZCcpO1xuICAgICAgc2hvdWxkLnRocm93cygoKSA9PiBidWlsZGVyLnRlc3RWYWxpZGF0ZUZpZWxkcygpLCAvbXVzdCBpbmNsdWRlIGJvdGggYm9uZCBhbmQgbm9taW5hdGUgb3BlcmF0aW9ucy8pO1xuXG4gICAgICBidWlsZGVyID0gZmFjdG9yeS5nZXRWOEJhdGNoU3Rha2luZ0J1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIudmFsaWRhdG9ycyhbdmFsaWRhdG9yXSk7XG4gICAgICBzaG91bGQudGhyb3dzKCgpID0+IGJ1aWxkZXIudGVzdFZhbGlkYXRlRmllbGRzKCksIC9tdXN0IGluY2x1ZGUgYm90aCBib25kIGFuZCBub21pbmF0ZSBvcGVyYXRpb25zLyk7XG5cbiAgICAgIGJ1aWxkZXIgPSBmYWN0b3J5LmdldFY4QmF0Y2hTdGFraW5nQnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5hbW91bnQoYm9uZEFtb3VudCkucGF5ZWUoJ1N0YWtlZCcpLnZhbGlkYXRvcnMoW3ZhbGlkYXRvcl0pO1xuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBidWlsZGVyLnRlc3RWYWxpZGF0ZUZpZWxkcygpKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2J1aWxkIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdidWlsZHMgYmF0Y2hBbGwoW2JvbmQsIG5vbWluYXRlXSkgd2l0aCB2OCBzcGVjVmVyc2lvbiBhbmQgbm8gY29udHJvbGxlcicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRTYW5kYm94QmF0Y2goKS5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCA4MDAwMDAwKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnNwZWNWZXJzaW9uKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24udHJhbnNhY3Rpb25WZXJzaW9uLCB0ZXN0bmV0VjhNYXRlcmlhbC50eFZlcnNpb24pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2lubmVyIGJvbmQgbGVnICsgZnVsbCBiYXRjaCBtZXRob2QgaGV4IG1hdGNoZXMgdGhlIHRlc3RuZXQgc2FuZGJveCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRTYW5kYm94QmF0Y2goKS5idWlsZCgpO1xuICAgICAgY29uc3QgbWV0aG9kSGV4ID0gKHR4IGFzIGFueSkuX3N1YnN0cmF0ZVRyYW5zYWN0aW9uLm1ldGhvZCBhcyBzdHJpbmc7XG4gICAgICAvLyBGdWxsIHV0aWxpdHkuYmF0Y2hBbGwgbWV0aG9kIGhleCBpcyBieXRlLWZvci1ieXRlIGlkZW50aWNhbCB0byB0aGUgb24tY2hhaW4gc2FuZGJveCB0eC5cbiAgICAgIHNob3VsZC5lcXVhbChtZXRob2RIZXgsIHN0YWtpbmdUeFY4LmJhdGNoLmJvbmRBbmROb21pbmF0ZS5jYWxsSGV4KTtcbiAgICB9KTtcblxuICAgIGl0KCdkZWNvZGVzIHdpdGggdjggbWF0ZXJpYWwgdG8gYm9uZCh7IHZhbHVlLCBwYXllZSB9KSDigJQgbm8gY29udHJvbGxlciDigJQgYW5kIG5vbWluYXRlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZFNhbmRib3hCYXRjaCgpLmJ1aWxkKCk7XG4gICAgICBjb25zdCBtYXRlcmlhbCA9IHV0aWxzLmdldFY4TWF0ZXJpYWwoY29pbnMuZ2V0KCd0cG9seXgnKS5uZXR3b3JrLnR5cGUpO1xuICAgICAgY29uc3QgcmVnaXN0cnkgPSBTaW5nbGV0b25SZWdpc3RyeS5nZXRJbnN0YW5jZShtYXRlcmlhbCk7XG4gICAgICBjb25zdCBkZWNvZGVkVHggPSBkZWNvZGUodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwge1xuICAgICAgICBtZXRhZGF0YVJwYzogbWF0ZXJpYWwubWV0YWRhdGEsXG4gICAgICAgIHJlZ2lzdHJ5LFxuICAgICAgfSk7XG5cbiAgICAgIHNob3VsZC5lcXVhbChkZWNvZGVkVHgubWV0aG9kLm5hbWUsICdiYXRjaEFsbCcpO1xuICAgICAgc2hvdWxkLmVxdWFsKGRlY29kZWRUeC5tZXRob2QucGFsbGV0LCAndXRpbGl0eScpO1xuXG4gICAgICBjb25zdCBiYXRjaEFyZ3MgPSBkZWNvZGVkVHgubWV0aG9kLmFyZ3MgYXMgdW5rbm93biBhcyBCYXRjaEFyZ3M7XG4gICAgICBzaG91bGQuZXF1YWwoYmF0Y2hBcmdzLmNhbGxzLmxlbmd0aCwgMik7XG5cbiAgICAgIGNvbnN0IGZpcnN0Q2FsbCA9IGJhdGNoQXJncy5jYWxsc1swXTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5kZWNvZGVNZXRob2ROYW1lKGZpcnN0Q2FsbCwgcmVnaXN0cnkpLCAnYm9uZCcpO1xuICAgICAgY29uc3QgYm9uZEFyZ3MgPSBmaXJzdENhbGwuYXJncyBhcyB1bmtub3duIGFzIFY4Qm9uZEFyZ3MgJiB7IGNvbnRyb2xsZXI/OiB1bmtub3duIH07XG4gICAgICBjb25zdCBib25kVmFsdWUgPSB0eXBlb2YgYm9uZEFyZ3MudmFsdWUgPT09ICdzdHJpbmcnID8gYm9uZEFyZ3MudmFsdWUgOiAoYm9uZEFyZ3MudmFsdWUgYXMgbnVtYmVyKS50b1N0cmluZygpO1xuICAgICAgc2hvdWxkLmVxdWFsKGJvbmRWYWx1ZSwgYm9uZEFtb3VudCk7XG4gICAgICBzaG91bGQuZXF1YWwoYm9uZEFyZ3MuY29udHJvbGxlciwgdW5kZWZpbmVkKTtcblxuICAgICAgY29uc3Qgc2Vjb25kQ2FsbCA9IGJhdGNoQXJncy5jYWxsc1sxXTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5kZWNvZGVNZXRob2ROYW1lKHNlY29uZENhbGwsIHJlZ2lzdHJ5KSwgJ25vbWluYXRlJyk7XG4gICAgICBjb25zdCBub21pbmF0ZUFyZ3MgPSBzZWNvbmRDYWxsLmFyZ3MgYXMgdW5rbm93biBhcyBOb21pbmF0ZUFyZ3M7XG4gICAgICBjb25zdCB0YXJnZXRzID0gbm9taW5hdGVBcmdzLnRhcmdldHMubWFwKCh0KSA9PiAodHlwZW9mIHQgPT09ICdzdHJpbmcnID8gdCA6ICh0IGFzIHsgaWQ6IHN0cmluZyB9KS5pZCkpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0YXJnZXRzLCBbdmFsaWRhdG9yXSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd2YWxpZGF0ZURlY29kZWRUcmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBpdCgnYWNjZXB0cyBhIGRlY29kZWQgdjggYmF0Y2ggYm9uZCtub21pbmF0ZSB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBidWlsZFNhbmRib3hCYXRjaCgpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBtYXRlcmlhbCA9IHV0aWxzLmdldFY4TWF0ZXJpYWwoY29pbnMuZ2V0KCd0cG9seXgnKS5uZXR3b3JrLnR5cGUpO1xuICAgICAgY29uc3QgcmVnaXN0cnkgPSBTaW5nbGV0b25SZWdpc3RyeS5nZXRJbnN0YW5jZShtYXRlcmlhbCk7XG4gICAgICBjb25zdCBkZWNvZGVkVHggPSBkZWNvZGUodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgeyBtZXRhZGF0YVJwYzogbWF0ZXJpYWwubWV0YWRhdGEsIHJlZ2lzdHJ5IH0pO1xuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBidWlsZGVyLnZhbGlkYXRlRGVjb2RlZFRyYW5zYWN0aW9uKGRlY29kZWRUeCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3ZhbGlkYXRlcyB2OCBib25kIGFyZ3Mgd2l0aG91dCBhIGNvbnRyb2xsZXIgZmllbGQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRWOEJhdGNoU3Rha2luZ0J1aWxkZXIoKTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gYnVpbGRlci50ZXN0VmFsaWRhdGVCb25kQXJncyh7IHZhbHVlOiBib25kQW1vdW50LCBwYXllZTogJ1N0YWtlZCcgfSBhcyBWOEJvbmRBcmdzKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmcm9tIHJhdyB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBpdCgncm91bmQtdHJpcHMgYSB2OCBiYXRjaCB0cmFuc2FjdGlvbiB0aHJvdWdoIHRoZSBidWlsZGVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmF3VHhIZXggPSAoYXdhaXQgYnVpbGRTYW5kYm94QmF0Y2goKS5idWlsZCgpKS50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICBjb25zdCBuZXdCdWlsZGVyID0gZmFjdG9yeS5nZXRWOEJhdGNoU3Rha2luZ0J1aWxkZXIoKTtcbiAgICAgIG5ld0J1aWxkZXIuZnJvbShyYXdUeEhleCk7XG5cbiAgICAgIHNob3VsZC5lcXVhbChuZXdCdWlsZGVyLmdldEFtb3VudCgpLCBib25kQW1vdW50KTtcbiAgICAgIHNob3VsZC5lcXVhbChuZXdCdWlsZGVyLmdldFBheWVlKCksICdTdGFrZWQnKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwobmV3QnVpbGRlci5nZXRWYWxpZGF0b3JzKCksIFt2YWxpZGF0b3JdKTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWN0b3J5LmZyb20gcm91dGVzIGEgdjggYmF0Y2ggYm9uZCtub21pbmF0ZSB0cmFuc2FjdGlvbiB0byBWOEJhdGNoU3Rha2luZ0J1aWxkZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByYXdUeEhleCA9IChhd2FpdCBidWlsZFNhbmRib3hCYXRjaCgpLmJ1aWxkKCkpLnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5mcm9tKHJhd1R4SGV4KTtcbiAgICAgIHNob3VsZC5vayhidWlsZGVyIGluc3RhbmNlb2YgVjhCYXRjaFN0YWtpbmdCdWlsZGVyKTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWN0b3J5LmZyb20gcm91dGVzIHRvIFY4QmF0Y2hTdGFraW5nQnVpbGRlciBvbiB0aGUgdjggZGVjb2RlLXN1Y2Nlc3MgcGF0aCAoU0ktOTgxKScsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFJlcHJvZHVjZXMgdGhlIHN0YWdpbmcgaW5jaWRlbnQ6IHdoZW4gdGhlIGZhY3RvcnkgY2FycmllcyB2OCBtYXRlcmlhbCwgYGRlY29kZSgpYCBzdWNjZWVkc1xuICAgICAgLy8gYW5kIHlpZWxkcyBhIGJvbmQgY2FsbCB3aXRoIG5vIGBjb250cm9sbGVyYC4gUm91dGluZyBtdXN0IGRldGVjdCB0aGUgbWlzc2luZyBjb250cm9sbGVyIGFuZFxuICAgICAgLy8gcmV0dXJuIHRoZSB2OCBidWlsZGVyIHJhdGhlciB0aGFuIHRoZSB2NyBCYXRjaFN0YWtpbmdCdWlsZGVyLCB3aGljaCBjcmFzaGVzIHJlYWRpbmdcbiAgICAgIC8vIGBhcmdzLmNvbnRyb2xsZXIuaWRgLlxuICAgICAgY29uc3QgcmF3VHhIZXggPSAoYXdhaXQgYnVpbGRTYW5kYm94QmF0Y2goKS5idWlsZCgpKS50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgY29uc3QgdjhNYXRlcmlhbCA9IHV0aWxzLmdldFY4TWF0ZXJpYWwoY29pbnMuZ2V0KCd0cG9seXgnKS5uZXR3b3JrLnR5cGUpO1xuICAgICAgY29uc3QgdjhGYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0cG9seXgnKSkubWF0ZXJpYWwodjhNYXRlcmlhbCk7XG4gICAgICBjb25zdCBidWlsZGVyID0gdjhGYWN0b3J5LmZyb20ocmF3VHhIZXgpO1xuICAgICAgc2hvdWxkLm9rKGJ1aWxkZXIgaW5zdGFuY2VvZiBWOEJhdGNoU3Rha2luZ0J1aWxkZXIpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnVjggc3Rha2luZyB3cmFwcGVycyAoc21va2UgYnVpbGQpJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0cG9seXgnKSk7XG4gIGNvbnN0IHZhbGlkYXRvciA9IHN0YWtpbmdUeFY4LnNhbmRib3gudmFsaWRhdG9yO1xuICBjb25zdCBzZW5kZXIgPSBzdGFraW5nVHhWOC5zYW5kYm94LnN0YXNoO1xuICBjb25zdCByZWZlcmVuY2VCbG9jayA9IHN0YWtpbmdUeFY4LnNhbmRib3gucmVmZXJlbmNlQmxvY2s7XG5cbiAgY29uc3QgcmVwbGF5ID0geyBmaXJzdFZhbGlkOiAyNDgyOTEzMiwgbWF4RHVyYXRpb246IDY0IH07XG5cbiAgaXQoJ1Y4Qm9uZEV4dHJhQnVpbGRlciBidWlsZHMgd2l0aCB2OCBtYXRlcmlhbCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRWOEJvbmRFeHRyYUJ1aWxkZXIoKTtcbiAgICBzaG91bGQub2soYnVpbGRlciBpbnN0YW5jZW9mIFY4Qm9uZEV4dHJhQnVpbGRlcik7XG4gICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyXG4gICAgICAuYW1vdW50KCcxMDAwMDAwMCcpXG4gICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyIH0pXG4gICAgICAudmFsaWRpdHkocmVwbGF5KVxuICAgICAgLnJlZmVyZW5jZUJsb2NrKHJlZmVyZW5jZUJsb2NrKVxuICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMTg5IH0pXG4gICAgICAuYnVpbGQoKTtcbiAgICBzaG91bGQuZXF1YWwodHgudG9Kc29uKCkuc3BlY1ZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnNwZWNWZXJzaW9uKTtcbiAgfSk7XG5cbiAgaXQoJ1Y4VW5ib25kQnVpbGRlciBidWlsZHMgd2l0aCB2OCBtYXRlcmlhbCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRWOFVuYm9uZEJ1aWxkZXIoKTtcbiAgICBzaG91bGQub2soYnVpbGRlciBpbnN0YW5jZW9mIFY4VW5ib25kQnVpbGRlcik7XG4gICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyXG4gICAgICAuYW1vdW50KCcxMDAwMDAwMCcpXG4gICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyIH0pXG4gICAgICAudmFsaWRpdHkocmVwbGF5KVxuICAgICAgLnJlZmVyZW5jZUJsb2NrKHJlZmVyZW5jZUJsb2NrKVxuICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMTg5IH0pXG4gICAgICAuYnVpbGQoKTtcbiAgICBzaG91bGQuZXF1YWwodHgudG9Kc29uKCkuc3BlY1ZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnNwZWNWZXJzaW9uKTtcbiAgfSk7XG5cbiAgaXQoJ1Y4QmF0Y2hVbnN0YWtpbmdCdWlsZGVyIGJ1aWxkcyB3aXRoIHY4IG1hdGVyaWFsJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFY4QmF0Y2hVbnN0YWtpbmdCdWlsZGVyKCk7XG4gICAgc2hvdWxkLm9rKGJ1aWxkZXIgaW5zdGFuY2VvZiBWOEJhdGNoVW5zdGFraW5nQnVpbGRlcik7XG4gICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyXG4gICAgICAuYW1vdW50KCcxMDAwMDAwMCcpXG4gICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyIH0pXG4gICAgICAudmFsaWRpdHkocmVwbGF5KVxuICAgICAgLnJlZmVyZW5jZUJsb2NrKHJlZmVyZW5jZUJsb2NrKVxuICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMTg5IH0pXG4gICAgICAuYnVpbGQoKTtcbiAgICBzaG91bGQuZXF1YWwodHgudG9Kc29uKCkuc3BlY1ZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnNwZWNWZXJzaW9uKTtcbiAgfSk7XG5cbiAgaXQoJ1Y4V2l0aGRyYXdVbmJvbmRlZEJ1aWxkZXIgYnVpbGRzIHdpdGggdjggbWF0ZXJpYWwnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VjhXaXRoZHJhd1VuYm9uZGVkQnVpbGRlcigpO1xuICAgIHNob3VsZC5vayhidWlsZGVyIGluc3RhbmNlb2YgVjhXaXRoZHJhd1VuYm9uZGVkQnVpbGRlcik7XG4gICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyXG4gICAgICAuc2xhc2hpbmdTcGFucygwKVxuICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlciB9KVxuICAgICAgLnZhbGlkaXR5KHJlcGxheSlcbiAgICAgIC5yZWZlcmVuY2VCbG9jayhyZWZlcmVuY2VCbG9jaylcbiAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDE4OSB9KVxuICAgICAgLmJ1aWxkKCk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LnRvSnNvbigpLnNwZWNWZXJzaW9uLCB0ZXN0bmV0VjhNYXRlcmlhbC5zcGVjVmVyc2lvbik7XG4gIH0pO1xuXG4gIGl0KCdWOE5vbWluYXRlQnVpbGRlciBidWlsZHMgd2l0aCB2OCBtYXRlcmlhbCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRWOE5vbWluYXRlQnVpbGRlcigpO1xuICAgIHNob3VsZC5vayhidWlsZGVyIGluc3RhbmNlb2YgVjhOb21pbmF0ZUJ1aWxkZXIpO1xuICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlclxuICAgICAgLnZhbGlkYXRvcnMoW3ZhbGlkYXRvcl0pXG4gICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyIH0pXG4gICAgICAudmFsaWRpdHkocmVwbGF5KVxuICAgICAgLnJlZmVyZW5jZUJsb2NrKHJlZmVyZW5jZUJsb2NrKVxuICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMTg5IH0pXG4gICAgICAuYnVpbGQoKTtcbiAgICBzaG91bGQuZXF1YWwodHgudG9Kc29uKCkuc3BlY1ZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnNwZWNWZXJzaW9uKTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
252
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjhCYXRjaFN0YWtpbmdCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci92OEJhdGNoU3Rha2luZ0J1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxzRUFBdUQ7QUFDdkQsNENBQXVDO0FBQ3ZDLG9EQUE0QjtBQUM1QiwwQ0FVMEI7QUFFMUIsbUVBQTJDO0FBQzNDLHNEQUE4RTtBQUM5RSwrQ0FBOEM7QUFDOUMsaUNBQTZEO0FBRTdELFFBQVEsQ0FBQyx1QkFBdUIsRUFBRTtJQUNoQyxNQUFNLE9BQU8sR0FBRyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUVuRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyx1QkFBVyxDQUFDLE9BQU8sQ0FBQztJQUVoRyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsRUFBRSxDQUM3QixJQUFJLDJCQUFxQixDQUFDLElBQUEsc0JBQWUsR0FBRSxDQUFDO1NBQ3pDLE1BQU0sQ0FBQyxVQUFVLENBQUM7U0FDbEIsS0FBSyxDQUFDLFFBQVEsQ0FBQztTQUNmLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3ZCLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUMxQixRQUFRLENBQUMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDO1NBQ3pDLGNBQWMsQ0FBQyxjQUFjLENBQUM7U0FDOUIsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRW5FLFFBQVEsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFF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Q0FBQztRQUNYLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxXQUFXLEVBQUUsNkJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdkUsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMkNBQTJDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDekQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDL0MsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxZQUFZLHVCQUFpQixDQUFDLENBQUM7UUFDaEQsTUFBTSxFQUFFLEdBQUcsTUFBTSxPQUFPO2FBQ3JCLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ3ZCLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQzthQUMzQixRQUFRLENBQUMsTUFBTSxDQUFDO2FBQ2hCLGNBQWMsQ0FBQyxjQUFjLENBQUM7YUFDOUIsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQzthQUMzRCxLQUFLLEVBQUUsQ0FBQztRQUNYLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxXQUFXLEVBQUUsNkJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdkUsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlY29kZSB9IGZyb20gJ0BzdWJzdHJhdGUvdHh3cmFwcGVyLXBvbGthZG90JztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHtcbiAgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSxcbiAgVjhCYXRjaFN0YWtpbmdCdWlsZGVyLFxuICBWOEJvbmRFeHRyYUJ1aWxkZXIsXG4gIFY4VW5ib25kQnVpbGRlcixcbiAgVjhCYXRjaFVuc3Rha2luZ0J1aWxkZXIsXG4gIFY4V2l0aGRyYXdVbmJvbmRlZEJ1aWxkZXIsXG4gIFY4Tm9taW5hdGVCdWlsZGVyLFxuICBTaW5nbGV0b25SZWdpc3RyeSxcbiAgSW50ZXJmYWNlLFxufSBmcm9tICcuLi8uLi8uLi9zcmMvbGliJztcbmltcG9ydCB7IEJhdGNoQXJncywgTm9taW5hdGVBcmdzLCBWOEJvbmRBcmdzIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi9pZmFjZSc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi91dGlscyc7XG5pbXBvcnQgeyB0ZXN0bmV0VjhNYXRlcmlhbCwgbWFpbm5ldFY4TWF0ZXJpYWwgfSBmcm9tICcuLi8uLi8uLi9zcmMvcmVzb3VyY2VzJztcbmltcG9ydCB7IHN0YWtpbmdUeFY4IH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzJztcbmltcG9ydCB7IGJ1aWxkVGVzdENvbmZpZywgYnVpbGRNYWlubmV0Q29uZmlnIH0gZnJvbSAnLi9iYXNlJztcblxuZGVzY3JpYmUoJ1Y4QmF0Y2hTdGFraW5nQnVpbGRlcicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndHBvbHl4JykpO1xuXG4gIGNvbnN0IHsgc3Rhc2gsIHZhbGlkYXRvciwgYm9uZEFtb3VudCwgcmVmZXJlbmNlQmxvY2ssIG5vbmNlLCBmaXJzdFZhbGlkIH0gPSBzdGFraW5nVHhWOC5zYW5kYm94O1xuXG4gIGNvbnN0IGJ1aWxkU2FuZGJveEJhdGNoID0gKCkgPT5cbiAgICBuZXcgVjhCYXRjaFN0YWtpbmdCdWlsZGVyKGJ1aWxkVGVzdENvbmZpZygpKVxuICAgICAgLmFtb3VudChib25kQW1vdW50KVxuICAgICAgLnBheWVlKCdTdGFrZWQnKVxuICAgICAgLnZhbGlkYXRvcnMoW3ZhbGlkYXRvcl0pXG4gICAgICAuc2VuZGVyKHsgYWRkcmVzczogc3Rhc2ggfSlcbiAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgLnJlZmVyZW5jZUJsb2NrKHJlZmVyZW5jZUJsb2NrKVxuICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogbm9uY2UgfSk7XG5cbiAgZGVzY3JpYmUoJ3Y4IG1hdGVyaWFsJywgKCkgPT4ge1xuICAgIGl0KCd0ZXN0bmV0IGJ1aWxkZXIgdXNlcyB2OCBzcGVjVmVyc2lvbiBhbmQgdHhWZXJzaW9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBWOEJhdGNoU3Rha2luZ0J1aWxkZXIoYnVpbGRUZXN0Q29uZmlnKCkpO1xuICAgICAgY29uc3QgbWF0ZXJpYWwgPSAoYnVpbGRlciBhcyBhbnkpLl9tYXRlcmlhbDtcbiAgICAgIHNob3VsZC5lcXVhbChtYXRlcmlhbC5zcGVjVmVyc2lvbiwgdGVzdG5ldFY4TWF0ZXJpYWwuc3BlY1ZlcnNpb24pO1xuICAgICAgc2hvdWxkLmVxdWFsKG1hdGVyaWFsLnR4VmVyc2lvbiwgdGVzdG5ldFY4TWF0ZXJpYWwudHhWZXJzaW9uKTtcbiAgICAgIHNob3VsZC5lcXVhbChtYXRlcmlhbC5zcGVjVmVyc2lvbiwgODAwMDAwMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnbWFpbm5ldCBidWlsZGVyIHVzZXMgdjggc3BlY1ZlcnNpb24gYW5kIHR4VmVyc2lvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVjhCYXRjaFN0YWtpbmdCdWlsZGVyKGJ1aWxkTWFpbm5ldENvbmZpZygpKTtcbiAgICAgIGNvbnN0IG1hdGVyaWFsID0gKGJ1aWxkZXIgYXMgYW55KS5fbWF0ZXJpYWw7XG4gICAgICBzaG91bGQuZXF1YWwobWF0ZXJpYWwuc3BlY1ZlcnNpb24sIG1haW5uZXRWOE1hdGVyaWFsLnNwZWNWZXJzaW9uKTtcbiAgICAgIHNob3VsZC5lcXVhbChtYXRlcmlhbC50eFZlcnNpb24sIG1haW5uZXRWOE1hdGVyaWFsLnR4VmVyc2lvbik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmYWN0b3J5IG1ldGhvZCcsICgpID0+IHtcbiAgICBpdCgnZ2V0VjhCYXRjaFN0YWtpbmdCdWlsZGVyIHJldHVybnMgYSBWOEJhdGNoU3Rha2luZ0J1aWxkZXIgY2FycnlpbmcgdjggbWF0ZXJpYWwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRWOEJhdGNoU3Rha2luZ0J1aWxkZXIoKTtcbiAgICAgIHNob3VsZC5vayhidWlsZGVyIGluc3RhbmNlb2YgVjhCYXRjaFN0YWtpbmdCdWlsZGVyKTtcbiAgICAgIHNob3VsZC5lcXVhbCgoYnVpbGRlciBhcyBhbnkpLl9tYXRlcmlhbC5zcGVjVmVyc2lvbiwgdGVzdG5ldFY4TWF0ZXJpYWwuc3BlY1ZlcnNpb24pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2V0dGVyIHZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBub3QgZXhwb3NlIGEgY29udHJvbGxlciBzZXR0ZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRWOEJhdGNoU3Rha2luZ0J1aWxkZXIoKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eXBlb2YgKGJ1aWxkZXIgYXMgYW55KS5jb250cm9sbGVyLCAndW5kZWZpbmVkJyk7XG4gICAgICBzaG91bGQuZXF1YWwodHlwZW9mIChidWlsZGVyIGFzIGFueSkuZ2V0Q29udHJvbGxlciwgJ3VuZGVmaW5lZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXF1aXJlIGJvdGggYm9uZCBhbmQgbm9taW5hdGUgb3BlcmF0aW9ucycsICgpID0+IHtcbiAgICAgIGxldCBidWlsZGVyID0gZmFjdG9yeS5nZXRWOEJhdGNoU3Rha2luZ0J1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuYW1vdW50KGJvbmRBbW91bnQpLnBheWVlKCdTdGFrZWQnKTtcbiAgICAgIHNob3VsZC50aHJvd3MoKCkgPT4gYnVpbGRlci50ZXN0VmFsaWRhdGVGaWVsZHMoKSwgL211c3QgaW5jbHVkZSBib3RoIGJvbmQgYW5kIG5vbWluYXRlIG9wZXJhdGlvbnMvKTtcblxuICAgICAgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VjhCYXRjaFN0YWtpbmdCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLnZhbGlkYXRvcnMoW3ZhbGlkYXRvcl0pO1xuICAgICAgc2hvdWxkLnRocm93cygoKSA9PiBidWlsZGVyLnRlc3RWYWxpZGF0ZUZpZWxkcygpLCAvbXVzdCBpbmNsdWRlIGJvdGggYm9uZCBhbmQgbm9taW5hdGUgb3BlcmF0aW9ucy8pO1xuXG4gICAgICBidWlsZGVyID0gZmFjdG9yeS5nZXRWOEJhdGNoU3Rha2luZ0J1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuYW1vdW50KGJvbmRBbW91bnQpLnBheWVlKCdTdGFrZWQnKS52YWxpZGF0b3JzKFt2YWxpZGF0b3JdKTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gYnVpbGRlci50ZXN0VmFsaWRhdGVGaWVsZHMoKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdidWlsZCB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBpdCgnYnVpbGRzIGJhdGNoQWxsKFtib25kLCBub21pbmF0ZV0pIHdpdGggdjggc3BlY1ZlcnNpb24gYW5kIG5vIGNvbnRyb2xsZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkU2FuZGJveEJhdGNoKCkuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi5zcGVjVmVyc2lvbiwgODAwMDAwMCk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCB0ZXN0bmV0VjhNYXRlcmlhbC5zcGVjVmVyc2lvbik7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLnRyYW5zYWN0aW9uVmVyc2lvbiwgdGVzdG5ldFY4TWF0ZXJpYWwudHhWZXJzaW9uKTtcbiAgICB9KTtcblxuICAgIGl0KCdpbm5lciBib25kIGxlZyArIGZ1bGwgYmF0Y2ggbWV0aG9kIGhleCBtYXRjaGVzIHRoZSB0ZXN0bmV0IHNhbmRib3gnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkU2FuZGJveEJhdGNoKCkuYnVpbGQoKTtcbiAgICAgIGNvbnN0IG1ldGhvZEhleCA9ICh0eCBhcyBhbnkpLl9zdWJzdHJhdGVUcmFuc2FjdGlvbi5tZXRob2QgYXMgc3RyaW5nO1xuICAgICAgLy8gRnVsbCB1dGlsaXR5LmJhdGNoQWxsIG1ldGhvZCBoZXggaXMgYnl0ZS1mb3ItYnl0ZSBpZGVudGljYWwgdG8gdGhlIG9uLWNoYWluIHNhbmRib3ggdHguXG4gICAgICBzaG91bGQuZXF1YWwobWV0aG9kSGV4LCBzdGFraW5nVHhWOC5iYXRjaC5ib25kQW5kTm9taW5hdGUuY2FsbEhleCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZGVjb2RlcyB3aXRoIHY4IG1hdGVyaWFsIHRvIGJvbmQoeyB2YWx1ZSwgcGF5ZWUgfSkg4oCUIG5vIGNvbnRyb2xsZXIg4oCUIGFuZCBub21pbmF0ZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRTYW5kYm94QmF0Y2goKS5idWlsZCgpO1xuICAgICAgY29uc3QgbWF0ZXJpYWwgPSB1dGlscy5nZXRWOE1hdGVyaWFsKGNvaW5zLmdldCgndHBvbHl4JykubmV0d29yay50eXBlKTtcbiAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gU2luZ2xldG9uUmVnaXN0cnkuZ2V0SW5zdGFuY2UobWF0ZXJpYWwpO1xuICAgICAgY29uc3QgZGVjb2RlZFR4ID0gZGVjb2RlKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHtcbiAgICAgICAgbWV0YWRhdGFScGM6IG1hdGVyaWFsLm1ldGFkYXRhLFxuICAgICAgICByZWdpc3RyeSxcbiAgICAgIH0pO1xuXG4gICAgICBzaG91bGQuZXF1YWwoZGVjb2RlZFR4Lm1ldGhvZC5uYW1lLCAnYmF0Y2hBbGwnKTtcbiAgICAgIHNob3VsZC5lcXVhbChkZWNvZGVkVHgubWV0aG9kLnBhbGxldCwgJ3V0aWxpdHknKTtcblxuICAgICAgY29uc3QgYmF0Y2hBcmdzID0gZGVjb2RlZFR4Lm1ldGhvZC5hcmdzIGFzIHVua25vd24gYXMgQmF0Y2hBcmdzO1xuICAgICAgc2hvdWxkLmVxdWFsKGJhdGNoQXJncy5jYWxscy5sZW5ndGgsIDIpO1xuXG4gICAgICBjb25zdCBmaXJzdENhbGwgPSBiYXRjaEFyZ3MuY2FsbHNbMF07XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuZGVjb2RlTWV0aG9kTmFtZShmaXJzdENhbGwsIHJlZ2lzdHJ5KSwgJ2JvbmQnKTtcbiAgICAgIGNvbnN0IGJvbmRBcmdzID0gZmlyc3RDYWxsLmFyZ3MgYXMgdW5rbm93biBhcyBWOEJvbmRBcmdzICYgeyBjb250cm9sbGVyPzogdW5rbm93biB9O1xuICAgICAgY29uc3QgYm9uZFZhbHVlID0gdHlwZW9mIGJvbmRBcmdzLnZhbHVlID09PSAnc3RyaW5nJyA/IGJvbmRBcmdzLnZhbHVlIDogKGJvbmRBcmdzLnZhbHVlIGFzIG51bWJlcikudG9TdHJpbmcoKTtcbiAgICAgIHNob3VsZC5lcXVhbChib25kVmFsdWUsIGJvbmRBbW91bnQpO1xuICAgICAgc2hvdWxkLmVxdWFsKGJvbmRBcmdzLmNvbnRyb2xsZXIsIHVuZGVmaW5lZCk7XG5cbiAgICAgIGNvbnN0IHNlY29uZENhbGwgPSBiYXRjaEFyZ3MuY2FsbHNbMV07XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuZGVjb2RlTWV0aG9kTmFtZShzZWNvbmRDYWxsLCByZWdpc3RyeSksICdub21pbmF0ZScpO1xuICAgICAgY29uc3Qgbm9taW5hdGVBcmdzID0gc2Vjb25kQ2FsbC5hcmdzIGFzIHVua25vd24gYXMgTm9taW5hdGVBcmdzO1xuICAgICAgY29uc3QgdGFyZ2V0cyA9IG5vbWluYXRlQXJncy50YXJnZXRzLm1hcCgodCkgPT4gKHR5cGVvZiB0ID09PSAnc3RyaW5nJyA/IHQgOiAodCBhcyB7IGlkOiBzdHJpbmcgfSkuaWQpKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodGFyZ2V0cywgW3ZhbGlkYXRvcl0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndmFsaWRhdGVEZWNvZGVkVHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ2FjY2VwdHMgYSBkZWNvZGVkIHY4IGJhdGNoIGJvbmQrbm9taW5hdGUgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gYnVpbGRTYW5kYm94QmF0Y2goKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgbWF0ZXJpYWwgPSB1dGlscy5nZXRWOE1hdGVyaWFsKGNvaW5zLmdldCgndHBvbHl4JykubmV0d29yay50eXBlKTtcbiAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gU2luZ2xldG9uUmVnaXN0cnkuZ2V0SW5zdGFuY2UobWF0ZXJpYWwpO1xuICAgICAgY29uc3QgZGVjb2RlZFR4ID0gZGVjb2RlKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHsgbWV0YWRhdGFScGM6IG1hdGVyaWFsLm1ldGFkYXRhLCByZWdpc3RyeSB9KTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gYnVpbGRlci52YWxpZGF0ZURlY29kZWRUcmFuc2FjdGlvbihkZWNvZGVkVHgpKTtcbiAgICB9KTtcblxuICAgIGl0KCd2YWxpZGF0ZXMgdjggYm9uZCBhcmdzIHdpdGhvdXQgYSBjb250cm9sbGVyIGZpZWxkJywgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VjhCYXRjaFN0YWtpbmdCdWlsZGVyKCk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IGJ1aWxkZXIudGVzdFZhbGlkYXRlQm9uZEFyZ3MoeyB2YWx1ZTogYm9uZEFtb3VudCwgcGF5ZWU6ICdTdGFrZWQnIH0gYXMgVjhCb25kQXJncykpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZnJvbSByYXcgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3JvdW5kLXRyaXBzIGEgdjggYmF0Y2ggdHJhbnNhY3Rpb24gdGhyb3VnaCB0aGUgYnVpbGRlcicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJhd1R4SGV4ID0gKGF3YWl0IGJ1aWxkU2FuZGJveEJhdGNoKCkuYnVpbGQoKSkudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgY29uc3QgbmV3QnVpbGRlciA9IGZhY3RvcnkuZ2V0VjhCYXRjaFN0YWtpbmdCdWlsZGVyKCk7XG4gICAgICBuZXdCdWlsZGVyLmZyb20ocmF3VHhIZXgpO1xuXG4gICAgICBzaG91bGQuZXF1YWwobmV3QnVpbGRlci5nZXRBbW91bnQoKSwgYm9uZEFtb3VudCk7XG4gICAgICBzaG91bGQuZXF1YWwobmV3QnVpbGRlci5nZXRQYXllZSgpLCAnU3Rha2VkJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKG5ld0J1aWxkZXIuZ2V0VmFsaWRhdG9ycygpLCBbdmFsaWRhdG9yXSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmFjdG9yeS5mcm9tIHJvdXRlcyBhIHY4IGJhdGNoIGJvbmQrbm9taW5hdGUgdHJhbnNhY3Rpb24gdG8gVjhCYXRjaFN0YWtpbmdCdWlsZGVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmF3VHhIZXggPSAoYXdhaXQgYnVpbGRTYW5kYm94QmF0Y2goKS5idWlsZCgpKS50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZnJvbShyYXdUeEhleCk7XG4gICAgICBzaG91bGQub2soYnVpbGRlciBpbnN0YW5jZW9mIFY4QmF0Y2hTdGFraW5nQnVpbGRlcik7XG4gICAgfSk7XG5cbiAgICBpdCgnZmFjdG9yeS5mcm9tIHJvdXRlcyB0byBWOEJhdGNoU3Rha2luZ0J1aWxkZXIgb24gdGhlIHY4IGRlY29kZS1zdWNjZXNzIHBhdGggKFNJLTk4MSknLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBSZXByb2R1Y2VzIHRoZSBzdGFnaW5nIGluY2lkZW50OiB3aGVuIHRoZSBmYWN0b3J5IGNhcnJpZXMgdjggbWF0ZXJpYWwsIGBkZWNvZGUoKWAgc3VjY2VlZHNcbiAgICAgIC8vIGFuZCB5aWVsZHMgYSBib25kIGNhbGwgd2l0aCBubyBgY29udHJvbGxlcmAuIFJvdXRpbmcgbXVzdCBkZXRlY3QgdGhlIG1pc3NpbmcgY29udHJvbGxlciBhbmRcbiAgICAgIC8vIHJldHVybiB0aGUgdjggYnVpbGRlciByYXRoZXIgdGhhbiB0aGUgdjcgQmF0Y2hTdGFraW5nQnVpbGRlciwgd2hpY2ggY3Jhc2hlcyByZWFkaW5nXG4gICAgICAvLyBgYXJncy5jb250cm9sbGVyLmlkYC5cbiAgICAgIGNvbnN0IHJhd1R4SGV4ID0gKGF3YWl0IGJ1aWxkU2FuZGJveEJhdGNoKCkuYnVpbGQoKSkudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIGNvbnN0IHY4TWF0ZXJpYWwgPSB1dGlscy5nZXRWOE1hdGVyaWFsKGNvaW5zLmdldCgndHBvbHl4JykubmV0d29yay50eXBlKTtcbiAgICAgIGNvbnN0IHY4RmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndHBvbHl4JykpLm1hdGVyaWFsKHY4TWF0ZXJpYWwpO1xuICAgICAgY29uc3QgYnVpbGRlciA9IHY4RmFjdG9yeS5mcm9tKHJhd1R4SGV4KTtcbiAgICAgIHNob3VsZC5vayhidWlsZGVyIGluc3RhbmNlb2YgVjhCYXRjaFN0YWtpbmdCdWlsZGVyKTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWN0b3J5Lm1hdGVyaWFsKGxpdmVNYXRlcmlhbCkuZnJvbSguLi4pIGZvcndhcmRzIHRoZSBsaXZlIG1hdGVyaWFsIGludG8gdGhlIHJlYnVpbHQgdjggYmF0Y2ggc3Rha2luZyBidWlsZGVyIChTSS0xMDM0KScsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFJlcHJvZHVjZXMgdGhlIGN1c3RvZGlhbCBzdGFraW5nIGluY2lkZW50OiB0aGUgSFNNIHNpZ25zIGFnYWluc3QgTElWRSBjaGFpbiBtYXRlcmlhbFxuICAgICAgLy8gKGUuZy4gYSBzcGVjVmVyc2lvbiBidW1wIGFmdGVyIGEgcnVudGltZSB1cGdyYWRlKSwgYnV0IHdhbGxldC1wbGF0Zm9ybSdzIGdldFNpZ25lZFR4XG4gICAgICAvLyByZS12ZXJpZmllcyBieSBjYWxsaW5nIGBmYWN0b3J5Lm1hdGVyaWFsKGxpdmVNYXRlcmlhbCkuZnJvbShzZXJpYWxpemVkVHhIZXgpYC4gT24gdGhlXG4gICAgICAvLyBkZWNvZGUtc3VjY2VzcyBwYXRoLCBgZ2V0QnVpbGRlcigpYCB1c2VkIHRvIHJldHVybiBgZ2V0VjhCYXRjaFN0YWtpbmdCdWlsZGVyKClgIHdpdGhvdXRcbiAgICAgIC8vIGZvcndhcmRpbmcgYHRoaXMuX21hdGVyaWFsYCwgc28gdGhlIHJlYnVpbGQgc2lsZW50bHkgZmVsbCBiYWNrIHRvIHRoZSBidWlsZGVyJ3Mgc3RhdGljXG4gICAgICAvLyBgZ2V0VjhNYXRlcmlhbCgpYCAoc3RhbGUgc3BlY1ZlcnNpb24pIGluc3RlYWQgb2YgdGhlIGNhbGxlcidzIGxpdmUgbWF0ZXJpYWwuIEJlY2F1c2VcbiAgICAgIC8vIHNwZWNWZXJzaW9uIGlzIGVtYmVkZGVkIGluIHRoZSByYXcgRXh0cmluc2ljUGF5bG9hZCBieXRlcyB0aGF0IGFyZSBhY3R1YWxseSBzaWduZWQsIHRoZVxuICAgICAgLy8gcmVidWlsdCBzaWduYWJsZSBwYXlsb2FkIHdvdWxkIHRoZW4gZGl2ZXJnZSBmcm9tIHRoZSBvbmUgdGhlIEhTTSBzaWduZWQsIHByb2R1Y2luZ1xuICAgICAgLy8gYEludmFsaWRTaWduYXR1cmU6IGludmFsaWQga2V5IHNpZ25hdHVyZWAgYXQgVHJ1c3QgYXBwcm92YWwuXG4gICAgICAvL1xuICAgICAgLy8gU2ltdWxhdGUgYSBcImxpdmVcIiBjaGFpbiB0aGF0IGhhcyBtb3ZlZCBwYXN0IHRoZSBwaW5uZWQgc3RhdGljIHRlc3RuZXQgdjggbWF0ZXJpYWwgYnlcbiAgICAgIC8vIGJ1bXBpbmcgc3BlY1ZlcnNpb24gb24gYSBjb3B5IG9mIGl0LlxuICAgICAgY29uc3QgbGl2ZU1hdGVyaWFsID0ge1xuICAgICAgICAuLi50ZXN0bmV0VjhNYXRlcmlhbCxcbiAgICAgICAgc3BlY1ZlcnNpb246IHRlc3RuZXRWOE1hdGVyaWFsLnNwZWNWZXJzaW9uICsgMTAsXG4gICAgICB9IGFzIHVua25vd24gYXMgSW50ZXJmYWNlLk1hdGVyaWFsO1xuXG4gICAgICBjb25zdCBvcmlnaW5hbFR4ID0gYXdhaXQgbmV3IFY4QmF0Y2hTdGFraW5nQnVpbGRlcihidWlsZFRlc3RDb25maWcoKSlcbiAgICAgICAgLm1hdGVyaWFsKGxpdmVNYXRlcmlhbClcbiAgICAgICAgLmFtb3VudChib25kQW1vdW50KVxuICAgICAgICAucGF5ZWUoJ1N0YWtlZCcpXG4gICAgICAgIC52YWxpZGF0b3JzKFt2YWxpZGF0b3JdKVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc3Rhc2ggfSlcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZCwgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jayhyZWZlcmVuY2VCbG9jaylcbiAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogbm9uY2UgfSlcbiAgICAgICAgLmJ1aWxkKCk7XG4gICAgICBjb25zdCByYXdUeEhleCA9IG9yaWdpbmFsVHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIGNvbnN0IG9yaWdpbmFsU2lnbmFibGVQYXlsb2FkID0gb3JpZ2luYWxUeC5zaWduYWJsZVBheWxvYWQudG9TdHJpbmcoJ2hleCcpO1xuXG4gICAgICBjb25zdCByZWJ1aWx0QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndHBvbHl4JykpLm1hdGVyaWFsKGxpdmVNYXRlcmlhbCkuZnJvbShyYXdUeEhleCk7XG4gICAgICAvLyBUaGUgcmF3IHNpZ25pbmcgcGF5bG9hZCBkb2VzIG5vdCBjYXJyeSB0aGUgc2VuZGVyIGFkZHJlc3Mgb3IgdGhlIHJhdyBgZmlyc3RWYWxpZGAgYmxvY2tcbiAgICAgIC8vIG51bWJlciAob25seSB0aGUgZW5jb2RlZCBlcmEpLCBzbyDigJQgbGlrZSBhbnkgcmVhbCBjYWxsZXIgcmUtdmVyaWZ5aW5nIGEgZGVjb2RlZFxuICAgICAgLy8gdHJhbnNhY3Rpb24g4oCUIHRoZXkgbXVzdCBiZSBzdXBwbGllZCBhZ2FpbiBiZWZvcmUgYnVpbGQoKSBjYW4gcnVuLlxuICAgICAgKHJlYnVpbHRCdWlsZGVyIGFzIFY4QmF0Y2hTdGFraW5nQnVpbGRlcikuc2VuZGVyKHsgYWRkcmVzczogc3Rhc2ggfSkudmFsaWRpdHkoeyBmaXJzdFZhbGlkLCBtYXhEdXJhdGlvbjogNjQgfSk7XG4gICAgICBjb25zdCByZWJ1aWx0VHggPSBhd2FpdCByZWJ1aWx0QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgcmVidWlsdFNpZ25hYmxlUGF5bG9hZCA9IHJlYnVpbHRUeC5zaWduYWJsZVBheWxvYWQudG9TdHJpbmcoJ2hleCcpO1xuXG4gICAgICAvLyBXaXRob3V0IHRoZSBTSS0xMDM0IGZpeCwgdGhpcyBmYWlsczogdGhlIHJlYnVpbGQgdXNlcyB0aGUgc3RhdGljIG1hdGVyaWFsIChzcGVjVmVyc2lvblxuICAgICAgLy8gODAwMDAwMCkgaW5zdGVhZCBvZiBsaXZlTWF0ZXJpYWwgKHNwZWNWZXJzaW9uIDgwMDAwMTApLCBzbyB0aGUgcGF5bG9hZHMgZGlmZmVyLlxuICAgICAgc2hvdWxkLmVxdWFsKHJlYnVpbHRTaWduYWJsZVBheWxvYWQsIG9yaWdpbmFsU2lnbmFibGVQYXlsb2FkKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ1Y4IHN0YWtpbmcgd3JhcHBlcnMgKHNtb2tlIGJ1aWxkKScsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndHBvbHl4JykpO1xuICBjb25zdCB2YWxpZGF0b3IgPSBzdGFraW5nVHhWOC5zYW5kYm94LnZhbGlkYXRvcjtcbiAgY29uc3Qgc2VuZGVyID0gc3Rha2luZ1R4Vjguc2FuZGJveC5zdGFzaDtcbiAgY29uc3QgcmVmZXJlbmNlQmxvY2sgPSBzdGFraW5nVHhWOC5zYW5kYm94LnJlZmVyZW5jZUJsb2NrO1xuXG4gIGNvbnN0IHJlcGxheSA9IHsgZmlyc3RWYWxpZDogMjQ4MjkxMzIsIG1heER1cmF0aW9uOiA2NCB9O1xuXG4gIGl0KCdWOEJvbmRFeHRyYUJ1aWxkZXIgYnVpbGRzIHdpdGggdjggbWF0ZXJpYWwnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VjhCb25kRXh0cmFCdWlsZGVyKCk7XG4gICAgc2hvdWxkLm9rKGJ1aWxkZXIgaW5zdGFuY2VvZiBWOEJvbmRFeHRyYUJ1aWxkZXIpO1xuICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlclxuICAgICAgLmFtb3VudCgnMTAwMDAwMDAnKVxuICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlciB9KVxuICAgICAgLnZhbGlkaXR5KHJlcGxheSlcbiAgICAgIC5yZWZlcmVuY2VCbG9jayhyZWZlcmVuY2VCbG9jaylcbiAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDE4OSB9KVxuICAgICAgLmJ1aWxkKCk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LnRvSnNvbigpLnNwZWNWZXJzaW9uLCB0ZXN0bmV0VjhNYXRlcmlhbC5zcGVjVmVyc2lvbik7XG4gIH0pO1xuXG4gIGl0KCdWOFVuYm9uZEJ1aWxkZXIgYnVpbGRzIHdpdGggdjggbWF0ZXJpYWwnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VjhVbmJvbmRCdWlsZGVyKCk7XG4gICAgc2hvdWxkLm9rKGJ1aWxkZXIgaW5zdGFuY2VvZiBWOFVuYm9uZEJ1aWxkZXIpO1xuICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlclxuICAgICAgLmFtb3VudCgnMTAwMDAwMDAnKVxuICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlciB9KVxuICAgICAgLnZhbGlkaXR5KHJlcGxheSlcbiAgICAgIC5yZWZlcmVuY2VCbG9jayhyZWZlcmVuY2VCbG9jaylcbiAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDE4OSB9KVxuICAgICAgLmJ1aWxkKCk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LnRvSnNvbigpLnNwZWNWZXJzaW9uLCB0ZXN0bmV0VjhNYXRlcmlhbC5zcGVjVmVyc2lvbik7XG4gIH0pO1xuXG4gIGl0KCdWOEJhdGNoVW5zdGFraW5nQnVpbGRlciBidWlsZHMgd2l0aCB2OCBtYXRlcmlhbCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRWOEJhdGNoVW5zdGFraW5nQnVpbGRlcigpO1xuICAgIHNob3VsZC5vayhidWlsZGVyIGluc3RhbmNlb2YgVjhCYXRjaFVuc3Rha2luZ0J1aWxkZXIpO1xuICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlclxuICAgICAgLmFtb3VudCgnMTAwMDAwMDAnKVxuICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlciB9KVxuICAgICAgLnZhbGlkaXR5KHJlcGxheSlcbiAgICAgIC5yZWZlcmVuY2VCbG9jayhyZWZlcmVuY2VCbG9jaylcbiAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDE4OSB9KVxuICAgICAgLmJ1aWxkKCk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LnRvSnNvbigpLnNwZWNWZXJzaW9uLCB0ZXN0bmV0VjhNYXRlcmlhbC5zcGVjVmVyc2lvbik7XG4gIH0pO1xuXG4gIGl0KCdWOFdpdGhkcmF3VW5ib25kZWRCdWlsZGVyIGJ1aWxkcyB3aXRoIHY4IG1hdGVyaWFsJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFY4V2l0aGRyYXdVbmJvbmRlZEJ1aWxkZXIoKTtcbiAgICBzaG91bGQub2soYnVpbGRlciBpbnN0YW5jZW9mIFY4V2l0aGRyYXdVbmJvbmRlZEJ1aWxkZXIpO1xuICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlclxuICAgICAgLnNsYXNoaW5nU3BhbnMoMClcbiAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIgfSlcbiAgICAgIC52YWxpZGl0eShyZXBsYXkpXG4gICAgICAucmVmZXJlbmNlQmxvY2socmVmZXJlbmNlQmxvY2spXG4gICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAxODkgfSlcbiAgICAgIC5idWlsZCgpO1xuICAgIHNob3VsZC5lcXVhbCh0eC50b0pzb24oKS5zcGVjVmVyc2lvbiwgdGVzdG5ldFY4TWF0ZXJpYWwuc3BlY1ZlcnNpb24pO1xuICB9KTtcblxuICBpdCgnVjhOb21pbmF0ZUJ1aWxkZXIgYnVpbGRzIHdpdGggdjggbWF0ZXJpYWwnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VjhOb21pbmF0ZUJ1aWxkZXIoKTtcbiAgICBzaG91bGQub2soYnVpbGRlciBpbnN0YW5jZW9mIFY4Tm9taW5hdGVCdWlsZGVyKTtcbiAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXJcbiAgICAgIC52YWxpZGF0b3JzKFt2YWxpZGF0b3JdKVxuICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlciB9KVxuICAgICAgLnZhbGlkaXR5KHJlcGxheSlcbiAgICAgIC5yZWZlcmVuY2VCbG9jayhyZWZlcmVuY2VCbG9jaylcbiAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDE4OSB9KVxuICAgICAgLmJ1aWxkKCk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LnRvSnNvbigpLnNwZWNWZXJzaW9uLCB0ZXN0bmV0VjhNYXRlcmlhbC5zcGVjVmVyc2lvbik7XG4gIH0pO1xufSk7XG4iXX0=
|