@bitgo-beta/sdk-coin-avaxp 3.5.10-beta.99 → 3.5.10-beta.991
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/CHANGELOG.md +661 -0
- package/dist/src/avaxp.d.ts +7 -6
- package/dist/src/avaxp.d.ts.map +1 -1
- package/dist/src/avaxp.js +50 -40
- package/dist/src/iface.d.ts +0 -4
- package/dist/src/iface.d.ts.map +1 -1
- package/dist/src/iface.js +1 -1
- package/dist/src/index.js +23 -9
- package/dist/src/lib/atomicInCTransactionBuilder.d.ts +2 -3
- package/dist/src/lib/atomicInCTransactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/atomicInCTransactionBuilder.js +1 -1
- package/dist/src/lib/atomicTransactionBuilder.d.ts +2 -4
- package/dist/src/lib/atomicTransactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/atomicTransactionBuilder.js +7 -9
- package/dist/src/lib/delegatorTxBuilder.d.ts +6 -7
- package/dist/src/lib/delegatorTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/delegatorTxBuilder.js +9 -11
- package/dist/src/lib/deprecatedTransaction.d.ts +98 -0
- package/dist/src/lib/deprecatedTransaction.d.ts.map +1 -0
- package/dist/src/lib/deprecatedTransaction.js +344 -0
- package/dist/src/lib/deprecatedTransactionBuilder.d.ts +114 -0
- package/dist/src/lib/deprecatedTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/deprecatedTransactionBuilder.js +210 -0
- package/dist/src/lib/exportInCTxBuilder.d.ts +8 -9
- package/dist/src/lib/exportInCTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/exportInCTxBuilder.js +4 -4
- package/dist/src/lib/exportTxBuilder.d.ts +4 -5
- package/dist/src/lib/exportTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/exportTxBuilder.js +3 -3
- package/dist/src/lib/iface.d.ts +12 -9
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +2 -2
- package/dist/src/lib/importInCTxBuilder.d.ts +4 -5
- package/dist/src/lib/importInCTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/importInCTxBuilder.js +6 -6
- package/dist/src/lib/importTxBuilder.d.ts +4 -4
- package/dist/src/lib/importTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/importTxBuilder.js +3 -3
- package/dist/src/lib/index.d.ts +2 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +11 -3
- package/dist/src/lib/keyPair.d.ts +0 -1
- package/dist/src/lib/keyPair.d.ts.map +1 -1
- package/dist/src/lib/keyPair.js +20 -21
- package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts +154 -0
- package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/permissionlessValidatorTxBuilder.js +452 -0
- package/dist/src/lib/transaction.d.ts +19 -41
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +68 -168
- package/dist/src/lib/transactionBuilder.d.ts +31 -82
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +65 -151
- package/dist/src/lib/transactionBuilderFactory.d.ts +16 -8
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +77 -19
- package/dist/src/lib/utils.d.ts +23 -9
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +72 -22
- package/dist/src/lib/utxoEngine.d.ts +10 -2
- package/dist/src/lib/utxoEngine.d.ts.map +1 -1
- package/dist/src/lib/utxoEngine.js +29 -6
- package/dist/src/lib/validatorTxBuilder.d.ts +4 -4
- package/dist/src/lib/validatorTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/validatorTxBuilder.js +2 -2
- package/dist/test/resources/avaxp.d.ts +80 -6
- package/dist/test/resources/avaxp.d.ts.map +1 -1
- package/dist/test/resources/avaxp.js +166 -33
- package/dist/test/resources/tx/importP.js +8 -8
- package/dist/test/unit/avaxp.js +109 -117
- package/dist/test/unit/lib/exportC2PTxBuilder.js +23 -9
- package/dist/test/unit/lib/exportP2CTxBuilder.js +27 -17
- package/dist/test/unit/lib/importC2PTxBuilder.js +25 -11
- package/dist/test/unit/lib/importP2CTxBuilder.js +25 -13
- package/dist/test/unit/lib/keyPair.js +23 -9
- package/dist/test/unit/lib/permissionlessValidatorTxBuilder.d.ts +2 -0
- package/dist/test/unit/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/permissionlessValidatorTxBuilder.js +341 -0
- package/dist/test/unit/lib/signFlowTestSuit.js +2 -2
- package/dist/test/unit/lib/transactionBuilderFactory.js +25 -11
- package/dist/test/unit/lib/utils.js +23 -9
- package/dist/test/unit/lib/utxoEngine.js +6 -6
- package/dist/test/unit/lib/validateTxBuilder.js +29 -20
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -10
package/dist/test/unit/avaxp.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
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);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -11,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
11
15
|
}) : function(o, v) {
|
|
12
16
|
o["default"] = v;
|
|
13
17
|
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
};
|
|
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
|
+
})();
|
|
21
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
37
|
};
|
|
@@ -63,10 +77,6 @@ describe('Avaxp', function () {
|
|
|
63
77
|
delegationFeeRate: testData.ADDVALIDATOR_SAMPLES.delegationFee,
|
|
64
78
|
},
|
|
65
79
|
locktime: 0,
|
|
66
|
-
memo: {
|
|
67
|
-
value: testData.ADDVALIDATOR_SAMPLES.memo,
|
|
68
|
-
type: 'text',
|
|
69
|
-
},
|
|
70
80
|
};
|
|
71
81
|
before(function () {
|
|
72
82
|
bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, {
|
|
@@ -124,7 +134,6 @@ describe('Avaxp', function () {
|
|
|
124
134
|
describe('Sign Transaction', () => {
|
|
125
135
|
const factory = new AvaxpLib.TransactionBuilderFactory(statics_1.coins.get(tcoinName));
|
|
126
136
|
it('build and sign a transaction in regular mode', async () => {
|
|
127
|
-
var _a, _b;
|
|
128
137
|
const recoveryMode = false;
|
|
129
138
|
const txBuilder = new AvaxpLib.TransactionBuilderFactory(statics_1.coins.get(tcoinName))
|
|
130
139
|
.getValidatorBuilder()
|
|
@@ -137,7 +146,6 @@ describe('Avaxp', function () {
|
|
|
137
146
|
.stakeAmount(testData.BUILD_AND_SIGN_ADD_VALIDATOR_SAMPLE.stakeAmount)
|
|
138
147
|
.delegationFeeRate(testData.BUILD_AND_SIGN_ADD_VALIDATOR_SAMPLE.delegationFeeRate)
|
|
139
148
|
.nodeID(testData.BUILD_AND_SIGN_ADD_VALIDATOR_SAMPLE.nodeId)
|
|
140
|
-
.memo(testData.BUILD_AND_SIGN_ADD_VALIDATOR_SAMPLE.memo)
|
|
141
149
|
.utxos(testData.BUILD_AND_SIGN_ADD_VALIDATOR_SAMPLE.utxos);
|
|
142
150
|
const tx = await txBuilder.build();
|
|
143
151
|
let txHex = tx.toBroadcastFormat();
|
|
@@ -152,11 +160,10 @@ describe('Avaxp', function () {
|
|
|
152
160
|
prv: privateKey,
|
|
153
161
|
};
|
|
154
162
|
const halfSignedTransaction = await basecoin.signTransaction(params);
|
|
155
|
-
txHex =
|
|
163
|
+
txHex = halfSignedTransaction?.halfSigned?.txHex;
|
|
156
164
|
txHex.should.equal(testData.BUILD_AND_SIGN_ADD_VALIDATOR_SAMPLE.halfSignedRawTxNonRecovery);
|
|
157
165
|
});
|
|
158
166
|
it('build and sign a transaction in recovery mode', async () => {
|
|
159
|
-
var _a, _b;
|
|
160
167
|
const recoveryMode = true;
|
|
161
168
|
const txBuilder = new AvaxpLib.TransactionBuilderFactory(statics_1.coins.get(tcoinName))
|
|
162
169
|
.getValidatorBuilder()
|
|
@@ -169,7 +176,6 @@ describe('Avaxp', function () {
|
|
|
169
176
|
.stakeAmount(testData.BUILD_AND_SIGN_ADD_VALIDATOR_SAMPLE.stakeAmount)
|
|
170
177
|
.delegationFeeRate(testData.BUILD_AND_SIGN_ADD_VALIDATOR_SAMPLE.delegationFeeRate)
|
|
171
178
|
.nodeID(testData.BUILD_AND_SIGN_ADD_VALIDATOR_SAMPLE.nodeId)
|
|
172
|
-
.memo(testData.BUILD_AND_SIGN_ADD_VALIDATOR_SAMPLE.memo)
|
|
173
179
|
.utxos(testData.BUILD_AND_SIGN_ADD_VALIDATOR_SAMPLE.utxos);
|
|
174
180
|
const tx = await txBuilder.build();
|
|
175
181
|
let txHex = tx.toBroadcastFormat();
|
|
@@ -184,7 +190,7 @@ describe('Avaxp', function () {
|
|
|
184
190
|
prv: privateKey,
|
|
185
191
|
};
|
|
186
192
|
const halfSignedTransaction = await basecoin.signTransaction(params);
|
|
187
|
-
txHex =
|
|
193
|
+
txHex = halfSignedTransaction?.halfSigned?.txHex;
|
|
188
194
|
txHex.should.equal(testData.BUILD_AND_SIGN_ADD_VALIDATOR_SAMPLE.halfSignedRawTxRecovery);
|
|
189
195
|
});
|
|
190
196
|
it('should be rejected if invalid key', async () => {
|
|
@@ -253,7 +259,7 @@ describe('Avaxp', function () {
|
|
|
253
259
|
const keyPairToSign = new AvaxpLib.KeyPair();
|
|
254
260
|
const prvKey = keyPairToSign.getPrivateKey();
|
|
255
261
|
const keyPair = keyPairToSign.getKeys();
|
|
256
|
-
const messageToSign = Buffer.from(crypto_1.randomBytes(32));
|
|
262
|
+
const messageToSign = Buffer.from((0, crypto_1.randomBytes)(32));
|
|
257
263
|
const signature = await basecoin.signMessage(keyPair, messageToSign.toString('hex'));
|
|
258
264
|
const verify = AvaxpLib.Utils.verifySignature(basecoin._staticsCoin.network, messageToSign, signature, prvKey);
|
|
259
265
|
verify.should.be.true();
|
|
@@ -262,7 +268,7 @@ describe('Avaxp', function () {
|
|
|
262
268
|
const keyPair = new AvaxpLib.KeyPair({
|
|
263
269
|
pub: testData.SEED_ACCOUNT.publicKeyCb58,
|
|
264
270
|
}).getKeys();
|
|
265
|
-
const messageToSign = Buffer.from(crypto_1.randomBytes(32)).toString('hex');
|
|
271
|
+
const messageToSign = Buffer.from((0, crypto_1.randomBytes)(32)).toString('hex');
|
|
266
272
|
await basecoin.signMessage(keyPair, messageToSign).should.be.rejectedWith('Invalid key pair options');
|
|
267
273
|
});
|
|
268
274
|
});
|
|
@@ -274,7 +280,7 @@ describe('Avaxp', function () {
|
|
|
274
280
|
txExplain.type.should.equal(sdk_core_1.TransactionType.AddValidator);
|
|
275
281
|
txExplain.outputs[0].address.should.equal(testData.nodeID);
|
|
276
282
|
txExplain.changeOutputs[0].address.split('~').length.should.equal(3);
|
|
277
|
-
|
|
283
|
+
should.not.exist(txExplain.memo);
|
|
278
284
|
});
|
|
279
285
|
it('should explain a signed AddValidator transaction', async () => {
|
|
280
286
|
const testData = avaxp_1.ADDVALIDATOR_SAMPLES;
|
|
@@ -283,7 +289,26 @@ describe('Avaxp', function () {
|
|
|
283
289
|
txExplain.type.should.equal(sdk_core_1.TransactionType.AddValidator);
|
|
284
290
|
txExplain.outputs[0].address.should.equal(testData.nodeID);
|
|
285
291
|
txExplain.changeOutputs[0].address.split('~').length.should.equal(3);
|
|
286
|
-
|
|
292
|
+
should.not.exist(txExplain.memo);
|
|
293
|
+
});
|
|
294
|
+
// TODO(CR-1073): find unsiged, signed and half signed transactions for AddPermissionlessValidator
|
|
295
|
+
it('should explain a half signed AddPermissionlessValidator transaction', async () => {
|
|
296
|
+
const testData = avaxp_1.ADDVALIDATOR_SAMPLES;
|
|
297
|
+
const txExplain = await basecoin.explainTransaction({ halfSigned: { txHex: testData.halfsigntxHex } });
|
|
298
|
+
txExplain.outputAmount.should.equal(testData.minValidatorStake);
|
|
299
|
+
txExplain.type.should.equal(sdk_core_1.TransactionType.AddValidator);
|
|
300
|
+
txExplain.outputs[0].address.should.equal(testData.nodeID);
|
|
301
|
+
txExplain.changeOutputs[0].address.split('~').length.should.equal(3);
|
|
302
|
+
should.not.exist(txExplain.memo);
|
|
303
|
+
});
|
|
304
|
+
it('should explain a signed AddPermissionlessValidator transaction', async () => {
|
|
305
|
+
const testData = avaxp_1.ADDVALIDATOR_SAMPLES;
|
|
306
|
+
const txExplain = await basecoin.explainTransaction({ txHex: testData.fullsigntxHex });
|
|
307
|
+
txExplain.outputAmount.should.equal(testData.minValidatorStake);
|
|
308
|
+
txExplain.type.should.equal(sdk_core_1.TransactionType.AddValidator);
|
|
309
|
+
txExplain.outputs[0].address.should.equal(testData.nodeID);
|
|
310
|
+
txExplain.changeOutputs[0].address.split('~').length.should.equal(3);
|
|
311
|
+
should.not.exist(txExplain.memo);
|
|
287
312
|
});
|
|
288
313
|
it('should explain a half signed export transaction', async () => {
|
|
289
314
|
const testData = avaxp_1.EXPORT_P_2_C;
|
|
@@ -292,7 +317,7 @@ describe('Avaxp', function () {
|
|
|
292
317
|
txExplain.type.should.equal(sdk_core_1.TransactionType.Export);
|
|
293
318
|
txExplain.outputs[0].address.should.equal(testData.pAddresses.sort().join('~'));
|
|
294
319
|
txExplain.changeOutputs[0].address.should.equal(testData.pAddresses.sort().join('~'));
|
|
295
|
-
|
|
320
|
+
should.not.exist(txExplain.memo);
|
|
296
321
|
});
|
|
297
322
|
it('should explain a signed export transaction', async () => {
|
|
298
323
|
const testData = avaxp_1.EXPORT_P_2_C;
|
|
@@ -301,7 +326,7 @@ describe('Avaxp', function () {
|
|
|
301
326
|
txExplain.type.should.equal(sdk_core_1.TransactionType.Export);
|
|
302
327
|
txExplain.outputs[0].address.should.equal(testData.pAddresses.sort().join('~'));
|
|
303
328
|
txExplain.changeOutputs[0].address.should.equal(testData.pAddresses.sort().join('~'));
|
|
304
|
-
|
|
329
|
+
should.not.exist(txExplain.memo);
|
|
305
330
|
});
|
|
306
331
|
it('should explain a half signed export transaction without cahngeoutput ', async () => {
|
|
307
332
|
const testData = avaxp_1.EXPORT_P_2_C_WITHOUT_CHANGEOUTPUT;
|
|
@@ -312,7 +337,7 @@ describe('Avaxp', function () {
|
|
|
312
337
|
txExplain.type.should.equal(sdk_core_1.TransactionType.Export);
|
|
313
338
|
txExplain.outputs[0].address.should.equal(testData.pAddresses.sort().join('~'));
|
|
314
339
|
txExplain.changeOutputs.should.be.empty();
|
|
315
|
-
|
|
340
|
+
should.not.exist(txExplain.memo);
|
|
316
341
|
});
|
|
317
342
|
it('should explain a signed export transaction without cahngeoutput ', async () => {
|
|
318
343
|
const testData = avaxp_1.EXPORT_P_2_C_WITHOUT_CHANGEOUTPUT;
|
|
@@ -321,45 +346,41 @@ describe('Avaxp', function () {
|
|
|
321
346
|
txExplain.type.should.equal(sdk_core_1.TransactionType.Export);
|
|
322
347
|
txExplain.outputs[0].address.should.equal(testData.pAddresses.sort().join('~'));
|
|
323
348
|
txExplain.changeOutputs.should.be.empty();
|
|
324
|
-
|
|
349
|
+
should.not.exist(txExplain.memo);
|
|
325
350
|
});
|
|
326
351
|
it('should explain a half signed import transaction', async () => {
|
|
327
|
-
var _a;
|
|
328
352
|
const testData = importP_1.IMPORT_P;
|
|
329
353
|
const txExplain = await basecoin.explainTransaction({
|
|
330
354
|
halfSigned: { txHex: testData.halfsigntxHex },
|
|
331
355
|
});
|
|
332
|
-
txExplain.outputAmount.should.equal((Number(testData.amount) -
|
|
356
|
+
txExplain.outputAmount.should.equal((Number(testData.amount) - txExplain.fee?.fee).toString());
|
|
333
357
|
txExplain.type.should.equal(sdk_core_1.TransactionType.Import);
|
|
334
358
|
txExplain.outputs[0].address.should.equal(testData.pAddresses.sort().join('~'));
|
|
335
359
|
txExplain.changeOutputs.should.be.empty();
|
|
336
|
-
|
|
360
|
+
should.not.exist(txExplain.memo);
|
|
337
361
|
});
|
|
338
362
|
it('should explain a signed import transaction', async () => {
|
|
339
|
-
var _a;
|
|
340
363
|
const testData = importP_1.IMPORT_P;
|
|
341
364
|
const txExplain = await basecoin.explainTransaction({ txHex: testData.fullsigntxHex });
|
|
342
|
-
txExplain.outputAmount.should.equal((Number(testData.amount) -
|
|
365
|
+
txExplain.outputAmount.should.equal((Number(testData.amount) - txExplain.fee?.fee).toString());
|
|
343
366
|
txExplain.type.should.equal(sdk_core_1.TransactionType.Import);
|
|
344
367
|
txExplain.outputs[0].address.should.equal(testData.pAddresses.sort().join('~'));
|
|
345
368
|
txExplain.changeOutputs.should.be.empty();
|
|
346
|
-
|
|
369
|
+
should.not.exist(txExplain.memo);
|
|
347
370
|
});
|
|
348
371
|
it('should explain a half signed import in C transaction', async () => {
|
|
349
|
-
var _a;
|
|
350
372
|
const testData = importC_1.IMPORT_C;
|
|
351
373
|
const txExplain = await basecoin.explainTransaction({ txHex: testData.halfsigntxHex });
|
|
352
|
-
txExplain.outputAmount.should.equal((Number(testData.amount) -
|
|
374
|
+
txExplain.outputAmount.should.equal((Number(testData.amount) - txExplain.fee?.fee).toString());
|
|
353
375
|
txExplain.type.should.equal(sdk_core_1.TransactionType.Import);
|
|
354
376
|
txExplain.outputs[0].address.should.equal(testData.to);
|
|
355
377
|
txExplain.changeOutputs.should.be.empty();
|
|
356
378
|
should.not.exist(txExplain.memo);
|
|
357
379
|
});
|
|
358
380
|
it('should explain a signed import in C transaction', async () => {
|
|
359
|
-
var _a;
|
|
360
381
|
const testData = importC_1.IMPORT_C;
|
|
361
382
|
const txExplain = await basecoin.explainTransaction({ txHex: testData.fullsigntxHex });
|
|
362
|
-
txExplain.outputAmount.should.equal((Number(testData.amount) -
|
|
383
|
+
txExplain.outputAmount.should.equal((Number(testData.amount) - txExplain.fee?.fee).toString());
|
|
363
384
|
txExplain.type.should.equal(sdk_core_1.TransactionType.Import);
|
|
364
385
|
txExplain.outputs[0].address.should.equal(testData.to);
|
|
365
386
|
txExplain.changeOutputs.should.be.empty();
|
|
@@ -391,7 +412,24 @@ describe('Avaxp', function () {
|
|
|
391
412
|
await basecoin.explainTransaction({}).should.be.rejectedWith('missing transaction hex');
|
|
392
413
|
});
|
|
393
414
|
});
|
|
394
|
-
describe('
|
|
415
|
+
describe('Verify transaction', function () {
|
|
416
|
+
it('should fail to verify P > C import transaction without recipients', async () => {
|
|
417
|
+
const txPrebuild = {
|
|
418
|
+
txHex: importC_1.IMPORT_C.fullsigntxHex,
|
|
419
|
+
txInfo: {},
|
|
420
|
+
};
|
|
421
|
+
const txParams = {
|
|
422
|
+
recipients: [],
|
|
423
|
+
type: 'Import',
|
|
424
|
+
locktime: 0,
|
|
425
|
+
};
|
|
426
|
+
try {
|
|
427
|
+
await basecoin.verifyTransaction({ txParams, txPrebuild });
|
|
428
|
+
}
|
|
429
|
+
catch (e) {
|
|
430
|
+
e.message.should.equal('Expected 1 recipient in import transaction');
|
|
431
|
+
}
|
|
432
|
+
});
|
|
395
433
|
it('should succeed to verify signed add validator transaction', async () => {
|
|
396
434
|
const txPrebuild = {
|
|
397
435
|
txHex: testData.ADDVALIDATOR_SAMPLES.fullsigntxHex,
|
|
@@ -416,6 +454,31 @@ describe('Avaxp', function () {
|
|
|
416
454
|
const isTransactionVerified = await basecoin.verifyTransaction({ txParams, txPrebuild });
|
|
417
455
|
isTransactionVerified.should.equal(true);
|
|
418
456
|
});
|
|
457
|
+
// TODO(CR-1073): find unsiged, signed and half signed transactions for AddPermissionlessValidator
|
|
458
|
+
it('should succeed to verify signed add permissionless validator transaction', async () => {
|
|
459
|
+
const txPrebuild = {
|
|
460
|
+
txHex: testData.ADDVALIDATOR_SAMPLES.fullsigntxHex,
|
|
461
|
+
txInfo: {},
|
|
462
|
+
};
|
|
463
|
+
const txParams = newTxParams();
|
|
464
|
+
const isTransactionVerified = await basecoin.verifyTransaction({ txParams, txPrebuild });
|
|
465
|
+
isTransactionVerified.should.equal(true);
|
|
466
|
+
});
|
|
467
|
+
it('should succeed to verify half signed add permissionless validator transaction', async () => {
|
|
468
|
+
const txPrebuild = {
|
|
469
|
+
txHex: testData.ADDVALIDATOR_SAMPLES.halfsigntxHex,
|
|
470
|
+
txInfo: {},
|
|
471
|
+
};
|
|
472
|
+
const txParams = newTxParams();
|
|
473
|
+
const isTransactionVerified = await basecoin.verifyTransaction({ txParams, txPrebuild });
|
|
474
|
+
isTransactionVerified.should.equal(true);
|
|
475
|
+
});
|
|
476
|
+
it('should succeed to verify unsigned add permissionless validator transaction', async () => {
|
|
477
|
+
const txPrebuild = newTxPrebuild();
|
|
478
|
+
const txParams = newTxParams();
|
|
479
|
+
const isTransactionVerified = await basecoin.verifyTransaction({ txParams, txPrebuild });
|
|
480
|
+
isTransactionVerified.should.equal(true);
|
|
481
|
+
});
|
|
419
482
|
it('should succeed to verify add validator transactions when recipients has extra data ', async function () {
|
|
420
483
|
const txPrebuild = newTxPrebuild();
|
|
421
484
|
const txParams = newTxParams();
|
|
@@ -429,10 +492,14 @@ describe('Avaxp', function () {
|
|
|
429
492
|
txInfo: {},
|
|
430
493
|
};
|
|
431
494
|
const txParams = {
|
|
432
|
-
recipients: [
|
|
495
|
+
recipients: [
|
|
496
|
+
{
|
|
497
|
+
address: avaxp_1.EXPORT_P_2_C_VERIFY.receiveAddress,
|
|
498
|
+
amount: '1',
|
|
499
|
+
},
|
|
500
|
+
],
|
|
433
501
|
type: 'Import',
|
|
434
502
|
locktime: 0,
|
|
435
|
-
memo: undefined,
|
|
436
503
|
};
|
|
437
504
|
const isTransactionVerified = await basecoin.verifyTransaction({ txParams, txPrebuild });
|
|
438
505
|
isTransactionVerified.should.equal(true);
|
|
@@ -446,7 +513,6 @@ describe('Avaxp', function () {
|
|
|
446
513
|
recipients: [],
|
|
447
514
|
type: 'Import',
|
|
448
515
|
locktime: 0,
|
|
449
|
-
memo: undefined,
|
|
450
516
|
unspents: ['e8ixKnba52yufXrTVKrTXVQTj5cd5e6o6Lc3rVkhahDGEs72L:0'],
|
|
451
517
|
};
|
|
452
518
|
const isTransactionVerified = await basecoin.verifyTransaction({ txParams, txPrebuild });
|
|
@@ -461,7 +527,6 @@ describe('Avaxp', function () {
|
|
|
461
527
|
recipients: [],
|
|
462
528
|
type: 'Import',
|
|
463
529
|
locktime: 0,
|
|
464
|
-
memo: undefined,
|
|
465
530
|
unspents: ['test:1'],
|
|
466
531
|
};
|
|
467
532
|
await basecoin
|
|
@@ -479,16 +544,12 @@ describe('Avaxp', function () {
|
|
|
479
544
|
const txParams = {
|
|
480
545
|
recipients: [
|
|
481
546
|
{
|
|
482
|
-
address:
|
|
547
|
+
address: '',
|
|
483
548
|
amount: avaxp_1.EXPORT_P_2_C_VERIFY.amount,
|
|
484
549
|
},
|
|
485
550
|
],
|
|
486
551
|
type: 'Export',
|
|
487
552
|
locktime: 0,
|
|
488
|
-
memo: {
|
|
489
|
-
value: avaxp_1.EXPORT_P_2_C_VERIFY.memo,
|
|
490
|
-
type: 'text',
|
|
491
|
-
},
|
|
492
553
|
};
|
|
493
554
|
const isTransactionVerified = await basecoin.verifyTransaction({ txParams, txPrebuild });
|
|
494
555
|
isTransactionVerified.should.equal(true);
|
|
@@ -507,79 +568,10 @@ describe('Avaxp', function () {
|
|
|
507
568
|
],
|
|
508
569
|
type: 'Export',
|
|
509
570
|
locktime: 0,
|
|
510
|
-
memo: {
|
|
511
|
-
value: avaxp_1.EXPORT_P_2_C_VERIFY.memo,
|
|
512
|
-
type: 'text',
|
|
513
|
-
},
|
|
514
|
-
};
|
|
515
|
-
await basecoin
|
|
516
|
-
.verifyTransaction({ txParams, txPrebuild })
|
|
517
|
-
.should.be.rejectedWith(`Tx total amount ${avaxp_1.EXPORT_P_2_C_VERIFY.amount} does not match with expected total amount field 9999999 and fixed fee 1000000`);
|
|
518
|
-
});
|
|
519
|
-
it('should fail verify export transaction with wrong c-address in memo', async () => {
|
|
520
|
-
const txPrebuild = {
|
|
521
|
-
txHex: avaxp_1.EXPORT_P_2_C_VERIFY.txHex,
|
|
522
|
-
txInfo: {},
|
|
523
|
-
};
|
|
524
|
-
const txParams = {
|
|
525
|
-
recipients: [
|
|
526
|
-
{
|
|
527
|
-
address: avaxp_1.EXPORT_P_2_C_VERIFY.receiveAddress2,
|
|
528
|
-
amount: avaxp_1.EXPORT_P_2_C_VERIFY.amount,
|
|
529
|
-
},
|
|
530
|
-
],
|
|
531
|
-
type: 'Export',
|
|
532
|
-
locktime: 0,
|
|
533
|
-
memo: {
|
|
534
|
-
value: avaxp_1.EXPORT_P_2_C_VERIFY.memo,
|
|
535
|
-
type: 'text',
|
|
536
|
-
},
|
|
537
|
-
};
|
|
538
|
-
await basecoin
|
|
539
|
-
.verifyTransaction({ txParams, txPrebuild })
|
|
540
|
-
.should.be.rejectedWith(`Invalid C-chain receive address ${avaxp_1.EXPORT_P_2_C_VERIFY.receiveAddress}, does not match expected params address ${avaxp_1.EXPORT_P_2_C_VERIFY.receiveAddress2}`);
|
|
541
|
-
});
|
|
542
|
-
it('should fail verify export transaction with no memo', async () => {
|
|
543
|
-
const txPrebuild = {
|
|
544
|
-
txHex: exportC_1.EXPORT_C.unsignedTxHex,
|
|
545
|
-
txInfo: {},
|
|
546
|
-
};
|
|
547
|
-
const txParams = {
|
|
548
|
-
recipients: [
|
|
549
|
-
{
|
|
550
|
-
address: avaxp_1.EXPORT_P_2_C_VERIFY.receiveAddress2,
|
|
551
|
-
amount: avaxp_1.EXPORT_P_2_C_VERIFY.amount,
|
|
552
|
-
},
|
|
553
|
-
],
|
|
554
|
-
type: 'Export',
|
|
555
|
-
locktime: 0,
|
|
556
|
-
};
|
|
557
|
-
await basecoin
|
|
558
|
-
.verifyTransaction({ txParams, txPrebuild })
|
|
559
|
-
.should.be.rejectedWith(`Export Tx requires a memo with c-chain address`);
|
|
560
|
-
});
|
|
561
|
-
it('should fail verify export transaction with invalid C address in memo', async () => {
|
|
562
|
-
const txPrebuild = {
|
|
563
|
-
txHex: avaxp_1.EXPORT_P_2_C.unsignedTxHex,
|
|
564
|
-
txInfo: {},
|
|
565
|
-
};
|
|
566
|
-
const txParams = {
|
|
567
|
-
recipients: [
|
|
568
|
-
{
|
|
569
|
-
address: avaxp_1.EXPORT_P_2_C.pAddresses,
|
|
570
|
-
amount: avaxp_1.EXPORT_P_2_C.amount,
|
|
571
|
-
},
|
|
572
|
-
],
|
|
573
|
-
type: 'Export',
|
|
574
|
-
locktime: 0,
|
|
575
|
-
memo: {
|
|
576
|
-
value: avaxp_1.EXPORT_P_2_C.memo,
|
|
577
|
-
type: 'text',
|
|
578
|
-
},
|
|
579
571
|
};
|
|
580
572
|
await basecoin
|
|
581
573
|
.verifyTransaction({ txParams, txPrebuild })
|
|
582
|
-
.should.be.rejectedWith(`
|
|
574
|
+
.should.be.rejectedWith(`Tx total amount ${avaxp_1.EXPORT_P_2_C_VERIFY.amount} does not match with expected total amount field 9999999 and max import fee 10000000`);
|
|
583
575
|
});
|
|
584
576
|
it('should fail verify transactions when have different type', async function () {
|
|
585
577
|
const txParams = newTxParams();
|
|
@@ -737,4 +729,4 @@ describe('Avaxp', function () {
|
|
|
737
729
|
});
|
|
738
730
|
});
|
|
739
731
|
});
|
|
740
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZheHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvYXZheHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsd0RBQTBDO0FBQzFDLG1EQUErRDtBQUMvRCxvQ0FBMkM7QUFDM0MsbUNBQXFDO0FBQ3JDLCtDQUFpQztBQUNqQyxpREFBK0M7QUFDL0MsaURBQTRDO0FBQzVDLDZEQUErQztBQUMvQyxzREFBbUQ7QUFDbkQsK0NBQTREO0FBQzVELHVDQUF3QztBQUN4Qyx5Q0FBaUQ7QUFDakQsMENBQTRCO0FBRTVCLG1EQUFxRjtBQUNyRixxREFBbUQ7QUFDbkQsOENBSzRCO0FBQzVCLHFEQUFtRDtBQUNuRCxxREFBbUQ7QUFDbkQsb0RBQTRCO0FBRTVCLFFBQVEsQ0FBQyxPQUFPLEVBQUU7SUFDaEIsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLE1BQU0sU0FBUyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7SUFDakMsSUFBSSxLQUFtQixDQUFDO0lBQ3hCLElBQUksUUFBUSxDQUFDO0lBQ2IsSUFBSSxhQUFhLENBQUM7SUFDbEIsSUFBSSxXQUFXLENBQUM7SUFFaEIsTUFBTSxVQUFVLEdBQUc7UUFDakIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhO1FBQ2xELE1BQU0sRUFBRSxFQUFFO0tBQ1gsQ0FBQztJQUVGLE1BQU0sUUFBUSxHQUFHO1FBQ2YsVUFBVSxFQUFFLEVBQUU7UUFDZCxJQUFJLEVBQUUsY0FBYztRQUNwQixjQUFjLEVBQUU7WUFDZCxTQUFTLEVBQUUsUUFBUSxDQUFDLG9CQUFvQixDQUFDLFNBQVM7WUFDbEQsT0FBTyxFQUFFLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPO1lBQzlDLE1BQU0sRUFBRSxRQUFRLENBQUMsb0JBQW9CLENBQUMsTUFBTTtZQUM1QyxNQUFNLEVBQUUsUUFBUSxDQUFDLG9CQUFvQixDQUFD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UUFFSCxFQUFFLENBQUMsaUVBQWlFLEVBQUUsS0FBSztZQUN6RSxNQUFNLGdCQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQzlCLFFBQVEsQ0FBQyxlQUFlLENBQUM7Z0JBQ3ZCLE9BQU8sRUFBRSw2RkFBNkY7Z0JBQ3RHLFNBQVMsRUFBVCxxQkFBUzthQUNWLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0NBQStDLEVBQUUsS0FBSztZQUN2RCxNQUFNLGdCQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQzlCLFFBQVEsQ0FBQyxlQUFlLENBQUM7Z0JBQ3ZCLE9BQU8sRUFBRSwrQ0FBK0M7Z0JBQ3hELFNBQVMsRUFBRSxxQkFBUyxDQUFDLENBQUMsQ0FBQzthQUN4QixDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIEF2YXhwTGliIGZyb20gJy4uLy4uL3NyYy9saWInO1xuaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstdGVzdCc7XG5pbXBvcnQgeyBBdmF4UCwgVGF2YXhQIH0gZnJvbSAnLi4vLi4vc3JjLyc7XG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWFwaSc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL2F2YXhwJztcbmltcG9ydCB7IGtleWNoYWlucyB9IGZyb20gJy4uL3Jlc291cmNlcy9rZXljaGFpbnMnO1xuaW1wb3J0IHsgVXRpbHMgYXMgS2V5UGFpclV0aWxzIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi91dGlscyc7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi4vLi4vc3JjL2xpYic7XG5pbXBvcnQgeyBCdWZmZXIgYXMgQnVmZmVyQXZheCB9IGZyb20gJ2F2YWxhbmNoZSc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IEhhbGZTaWduZWRBY2NvdW50VHJhbnNhY3Rpb24sIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IElNUE9SVF9QIH0gZnJvbSAnLi4vcmVzb3VyY2VzL3R4L2ltcG9ydFAnO1xuaW1wb3J0IHtcbiAgQUREVkFMSURBVE9SX1NBTVBMRVMsXG4gIEVYUE9SVF9QXzJfQyxcbiAgRVhQT1JUX1BfMl9DX1ZFUklGWSxcbiAgRVhQT1JUX1BfMl9DX1dJVEhPVVRfQ0hBTkdFT1VUUFVULFxufSBmcm9tICcuLi9yZXNvdXJjZXMvYXZheHAnO1xuaW1wb3J0IHsgSU1QT1JUX0MgfSBmcm9tICcuLi9yZXNvdXJjZXMvdHgvaW1wb3J0Qyc7XG5pbXBvcnQgeyBFWFBPUlRfQyB9IGZyb20gJy4uL3Jlc291cmNlcy90eC9leHBvcnRDJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuZGVzY3JpYmUoJ0F2YXhwJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBjb2luTmFtZSA9ICdhdmF4cCc7XG4gIGNvbnN0IHRjb2luTmFtZSA9ICd0JyArIGNvaW5OYW1lO1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgbGV0IGJhc2Vjb2luO1xuICBsZXQgbmV3VHhQcmVidWlsZDtcbiAgbGV0IG5ld1R4UGFyYW1zO1xuXG4gIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgdHhIZXg6IHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLnVuc2lnbmVkVHhIZXgsXG4gICAgdHhJbmZvOiB7fSxcbiAgfTtcblxuICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICByZWNpcGllbnRzOiBbXSxcbiAgICB0eXBlOiAnQWRkVmFsaWRhdG9yJyxcbiAgICBzdGFraW5nT3B0aW9uczoge1xuICAgICAgc3RhcnRUaW1lOiB0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5zdGFydFRpbWUsXG4gICAgICBlbmRUaW1lOiB0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5lbmRUaW1lLFxuICAgICAgbm9kZUlEOiB0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5ub2RlSUQsXG4gICAgICBhbW91bnQ6IHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLm1pblZhbGlkYXRvclN0YWtlLFxuICAgICAgZGVsZWdhdGlvbkZlZVJhdGU6IHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLmRlbGVnYXRpb25GZWUsXG4gICAgfSxcbiAgICBsb2NrdGltZTogMCxcbiAgICBtZW1vOiB7XG4gICAgICB2YWx1ZTogdGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMubWVtbyxcbiAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICB9LFxuICB9O1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHtcbiAgICAgIGVudjogJ21vY2snLFxuICAgIH0pO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3Rlcihjb2luTmFtZSwgQXZheFAuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3Rlcih0Y29pbk5hbWUsIFRhdmF4UC5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYmFzZWNvaW4gPSBiaXRnby5jb2luKHRjb2luTmFtZSk7XG4gICAgbmV3VHhQcmVidWlsZCA9ICgpID0+IHtcbiAgICAgIHJldHVybiBfLmNsb25lRGVlcCh0eFByZWJ1aWxkKTtcbiAgICB9O1xuICAgIG5ld1R4UGFyYW1zID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIF8uY2xvbmVEZWVwKHR4UGFyYW1zKTtcbiAgICB9O1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGluc3RhbnRpYXRlIHRoZSBjb2luJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBsb2NhbEJhc2Vjb2luID0gYml0Z28uY29pbih0Y29pbk5hbWUpO1xuICAgIGxvY2FsQmFzZWNvaW4uc2hvdWxkLmJlLmFuLmluc3RhbmNlb2YoVGF2YXhQKTtcblxuICAgIGxvY2FsQmFzZWNvaW4gPSBiaXRnby5jb2luKGNvaW5OYW1lKTtcbiAgICBsb2NhbEJhc2Vjb2luLnNob3VsZC5iZS5hbi5pbnN0YW5jZW9mKEF2YXhQKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gJyArIHRjb2luTmFtZSwgZnVuY3Rpb24gKCkge1xuICAgIGJhc2Vjb2luLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKHRjb2luTmFtZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIGZ1bGwgbmFtZScsIGZ1bmN0aW9uICgpIHtcbiAgICBiYXNlY29pbi5nZXRGdWxsTmFtZSgpLnNob3VsZC5lcXVhbCgnVGVzdG5ldCBBdmFsYW5jaGUgUC1DaGFpbicpO1xuICB9KTtcblxuICBkZXNjcmliZSgnS2V5cGFpcnM6JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSBrZXlwYWlyIGZyb20gcmFuZG9tIHNlZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gYmFzZWNvaW4uZ2VuZXJhdGVLZXlQYWlyKCk7XG4gICAgICBrZXlQYWlyLnNob3VsZC5oYXZlLnByb3BlcnR5KCdwdWInKTtcbiAgICAgIGtleVBhaXIuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3BydicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBhIGtleXBhaXIgZnJvbSBhIHNlZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZWVkVGV4dCA9IHRlc3REYXRhLlNFRURfQUNDT1VOVC5zZWVkO1xuICAgICAgY29uc3Qgc2VlZCA9IEJ1ZmZlci5mcm9tKHNlZWRUZXh0LCAnaGV4Jyk7XG4gICAgICBjb25zdCBrZXlQYWlyID0gYmFzZWNvaW4uZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuICAgICAga2V5UGFpci5wdWIuc2hvdWxkLmVxdWFsKHRlc3REYXRhLlNFRURfQUNDT1VOVC5wdWJsaWNLZXkpO1xuICAgICAga2V5UGFpci5wcnYuc2hvdWxkLmVxdWFsKHRlc3REYXRhLlNFRURfQUNDT1VOVC5wcml2YXRlS2V5KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYSBwdWJsaWMga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga2V5UGFpciA9IGJhc2Vjb2luLmdlbmVyYXRlS2V5UGFpcigpO1xuICAgICAga2V5UGFpci5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncHViJyk7XG4gICAgICBrZXlQYWlyLnNob3VsZC5oYXZlLnByb3BlcnR5KCdwcnYnKTtcblxuICAgICAgYmFzZWNvaW4uaXNWYWxpZFB1YihrZXlQYWlyLnB1Yikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhIHByaXZhdGUga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga2V5UGFpciA9IGJhc2Vjb2luLmdlbmVyYXRlS2V5UGFpcigpO1xuICAgICAga2V5UGFpci5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncHViJyk7XG4gICAgICBrZXlQYWlyLnNob3VsZC5oYXZlLnByb3BlcnR5KCdwcnYnKTtcblxuICAgICAgYmFzZWNvaW4uaXNWYWxpZFBydihrZXlQYWlyLnBydikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnU2lnbiBUcmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBjb25zdCBmYWN0b3J5ID0gbmV3IEF2YXhwTGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KHRjb2luTmFtZSkpO1xuXG4gICAgaXQoJ2J1aWxkIGFuZCBzaWduIGEgdHJhbnNhY3Rpb24gaW4gcmVndWxhciBtb2RlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVjb3ZlcnlNb2RlID0gZmFsc2U7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQXZheHBMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQodGNvaW5OYW1lKSlcbiAgICAgICAgLmdldFZhbGlkYXRvckJ1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLnRocmVzaG9sZClcbiAgICAgICAgLmxvY2t0aW1lKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLmxvY2t0aW1lKVxuICAgICAgICAucmVjb3Zlck1vZGUocmVjb3ZlcnlNb2RlKVxuICAgICAgICAuZnJvbVB1YktleSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS5iaXRnb0FkZHJlc3NlcylcbiAgICAgICAgLnN0YXJ0VGltZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS5zdGFydFRpbWUpXG4gICAgICAgIC5lbmRUaW1lKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLmVuZFRpbWUpXG4gICAgICAgIC5zdGFrZUFtb3VudCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS5zdGFrZUFtb3VudClcbiAgICAgICAgLmRlbGVnYXRpb25GZWVSYXRlKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLmRlbGVnYXRpb25GZWVSYXRlKVxuICAgICAgICAubm9kZUlEKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLm5vZGVJZClcbiAgICAgICAgLm1lbW8odGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1ZBTElEQVRPUl9TQU1QTEUubWVtbylcbiAgICAgICAgLnV0eG9zKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLnV0eG9zKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIGxldCB0eEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICB0eEhleC5zaG91bGQuZXF1YWwodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1ZBTElEQVRPUl9TQU1QTEUudW5zaWduZWRSYXdUeE5vblJlY292ZXJ5KTtcblxuICAgICAgY29uc3QgcHJpdmF0ZUtleSA9IHJlY292ZXJ5TW9kZVxuICAgICAgICA/IHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLmJhY2t1cFByaXZhdGVLZXlcbiAgICAgICAgOiB0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS51c2VyUHJpdmF0ZUtleTtcblxuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgdHhIZXg6IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksXG4gICAgICAgIH0sXG4gICAgICAgIHBydjogcHJpdmF0ZUtleSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGhhbGZTaWduZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGJhc2Vjb2luLnNpZ25UcmFuc2FjdGlvbihwYXJhbXMpO1xuICAgICAgdHhIZXggPSAoaGFsZlNpZ25lZFRyYW5zYWN0aW9uIGFzIEhhbGZTaWduZWRBY2NvdW50VHJhbnNhY3Rpb24pPy5oYWxmU2lnbmVkPy50eEhleDtcbiAgICAgIHR4SGV4LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS5oYWxmU2lnbmVkUmF3VHhOb25SZWNvdmVyeSk7XG4gICAgfSk7XG4gICAgaXQoJ2J1aWxkIGFuZCBzaWduIGEgdHJhbnNhY3Rpb24gaW4gcmVjb3ZlcnkgbW9kZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlY292ZXJ5TW9kZSA9IHRydWU7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQXZheHBMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQodGNvaW5OYW1lKSlcbiAgICAgICAgLmdldFZhbGlkYXRvckJ1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLnRocmVzaG9sZClcbiAgICAgICAgLmxvY2t0aW1lKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLmxvY2t0aW1lKVxuICAgICAgICAucmVjb3Zlck1vZGUocmVjb3ZlcnlNb2RlKVxuICAgICAgICAuZnJvbVB1YktleSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS5iaXRnb0FkZHJlc3NlcylcbiAgICAgICAgLnN0YXJ0VGltZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS5zdGFydFRpbWUpXG4gICAgICAgIC5lbmRUaW1lKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLmVuZFRpbWUpXG4gICAgICAgIC5zdGFrZUFtb3VudCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS5zdGFrZUFtb3VudClcbiAgICAgICAgLmRlbGVnYXRpb25GZWVSYXRlKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLmRlbGVnYXRpb25GZWVSYXRlKVxuICAgICAgICAubm9kZUlEKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLm5vZGVJZClcbiAgICAgICAgLm1lbW8odGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1ZBTElEQVRPUl9TQU1QTEUubWVtbylcbiAgICAgICAgLnV0eG9zKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLnV0eG9zKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIGxldCB0eEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICB0eEhleC5zaG91bGQuZXF1YWwodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1ZBTElEQVRPUl9TQU1QTEUudW5zaWduZWRSYXd0eFJlY292ZXJ5KTtcblxuICAgICAgY29uc3QgcHJpdmF0ZUtleSA9IHJlY292ZXJ5TW9kZVxuICAgICAgICA/IHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLmJhY2t1cFByaXZhdGVLZXlcbiAgICAgICAgOiB0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS51c2VyUHJpdmF0ZUtleTtcblxuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgdHhIZXg6IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksXG4gICAgICAgIH0sXG4gICAgICAgIHBydjogcHJpdmF0ZUtleSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGhhbGZTaWduZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGJhc2Vjb2luLnNpZ25UcmFuc2FjdGlvbihwYXJhbXMpO1xuICAgICAgdHhIZXggPSAoaGFsZlNpZ25lZFRyYW5zYWN0aW9uIGFzIEhhbGZTaWduZWRBY2NvdW50VHJhbnNhY3Rpb24pPy5oYWxmU2lnbmVkPy50eEhleDtcbiAgICAgIHR4SGV4LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS5oYWxmU2lnbmVkUmF3VHhSZWNvdmVyeSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJlIHJlamVjdGVkIGlmIGludmFsaWQga2V5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaW52YWxpZFByaXZhdGVLZXkgPSAnQUFBQUEnO1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy51bnNpZ25lZFR4SGV4KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogdHgudG9Ccm9hZGNhc3RGb3JtYXQoKSxcbiAgICAgICAgfSxcbiAgICAgICAgcHJ2OiBpbnZhbGlkUHJpdmF0ZUtleSxcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IGJhc2Vjb2luLnNpZ25UcmFuc2FjdGlvbihwYXJhbXMpLnNob3VsZC5iZS5yZWplY3RlZCgpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIG1haW5uZXQgYWRkcmVzcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHV0aWxzID0gbmV3IEtleVBhaXJVdGlscygpO1xuICAgICAgY29uc3QgeHBydiA9IHRlc3REYXRhLlNFRURfQUNDT1VOVC54UHJpdmF0ZUtleTtcbiAgICAgIGNvbnN0IGtwMSA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB4cHJ2IH0pO1xuICAgICAgY29uc3QgYWRkcmVzc0J1ZmZlcjEgPSBrcDEuZ2V0QWRkcmVzc0J1ZmZlcigpO1xuICAgICAgY29uc3QgYWRkcmVzczEgPSB1dGlscy5hZGRyZXNzVG9TdHJpbmcoJ2F2YXgnLCAnUCcsIEJ1ZmZlckF2YXguZnJvbShhZGRyZXNzQnVmZmVyMSkpO1xuXG4gICAgICBjb25zdCBrcDIgPSBuZXcgS2V5UGFpcih7IHBydjogeHBydiB9KTtcbiAgICAgIGNvbnN0IGFkZHJlc3NCdWZmZXIyID0ga3AyLmdldEFkZHJlc3NTYWZlQnVmZmVyKCk7XG4gICAgICBjb25zdCBhZGRyZXNzMiA9IHV0aWxzLmFkZHJlc3NUb1N0cmluZygnYXZheCcsICdQJywgQnVmZmVyQXZheC5mcm9tKGFkZHJlc3NCdWZmZXIyKSk7XG5cbiAgICAgIGNvbnN0IGtwMyA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB4cHJ2IH0pO1xuICAgICAgY29uc3QgYWRkcmVzczMgPSBrcDMuZ2V0QXZheFBBZGRyZXNzKCdhdmF4Jyk7XG5cbiAgICAgIGFkZHJlc3MxLnNob3VsZC5lcXVhbChhZGRyZXNzMik7XG4gICAgICBhZGRyZXNzMS5zaG91bGQuZXF1YWwoYWRkcmVzczMpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIHRlc3RuZXQgYWRkcmVzcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHV0aWxzID0gbmV3IEtleVBhaXJVdGlscygpO1xuICAgICAgY29uc3QgeHBydiA9IHRlc3REYXRhLlNFRURfQUNDT1VOVC54UHJpdmF0ZUtleTtcbiAgICAgIGNvbnN0IGtwMSA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB4cHJ2IH0pO1xuICAgICAgY29uc3QgYWRkcmVzc0J1ZmZlcjEgPSBrcDEuZ2V0QWRkcmVzc0J1ZmZlcigpO1xuICAgICAgY29uc3QgYWRkcmVzczEgPSB1dGlscy5hZGRyZXNzVG9TdHJpbmcoJ2Z1amknLCAnUCcsIEJ1ZmZlckF2YXguZnJvbShhZGRyZXNzQnVmZmVyMSkpO1xuXG4gICAgICBjb25zdCBrcDIgPSBuZXcgS2V5UGFpcih7IHBydjogeHBydiB9KTtcbiAgICAgIGNvbnN0IGFkZHJlc3NCdWZmZXIyID0ga3AyLmdldEFkZHJlc3NTYWZlQnVmZmVyKCk7XG4gICAgICBjb25zdCBhZGRyZXNzMiA9IHV0aWxzLmFkZHJlc3NUb1N0cmluZygnZnVqaScsICdQJywgQnVmZmVyQXZheC5mcm9tKGFkZHJlc3NCdWZmZXIyKSk7XG5cbiAgICAgIGNvbnN0IGtwMyA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB4cHJ2IH0pO1xuICAgICAgY29uc3QgYWRkcmVzczMgPSBrcDMuZ2V0QXZheFBBZGRyZXNzKCdmdWppJyk7XG5cbiAgICAgIGFkZHJlc3MxLnNob3VsZC5lcXVhbChhZGRyZXNzMik7XG4gICAgICBhZGRyZXNzMS5zaG91bGQuZXF1YWwoYWRkcmVzczMpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgbm90IGJlIHRoZSBzYW1lIGFkZHJlc3MgZnJvbSBzYW1lIGtleScsICgpID0+IHtcbiAgICAgIGNvbnN0IHV0aWxzID0gbmV3IEtleVBhaXJVdGlscygpO1xuICAgICAgY29uc3Qga3AxID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLkFDQ09VTlRfMS5wcml2a2V5IH0pO1xuICAgICAgY29uc3QgYWRkcmVzc0J1ZmZlcjEgPSBrcDEuZ2V0QWRkcmVzc0J1ZmZlcigpO1xuICAgICAgY29uc3QgYWRkcmVzczEgPSB1dGlscy5hZGRyZXNzVG9TdHJpbmcoJ2F2YXgnLCAnUCcsIEJ1ZmZlckF2YXguZnJvbShhZGRyZXNzQnVmZmVyMSkpO1xuXG4gICAgICBjb25zdCBrcDIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuQUNDT1VOVF8xLnByaXZrZXkgfSk7XG4gICAgICBjb25zdCBhZGRyZXNzQnVmZmVyMiA9IGtwMi5nZXRBZGRyZXNzU2FmZUJ1ZmZlcigpO1xuICAgICAgY29uc3QgYWRkcmVzczIgPSB1dGlscy5hZGRyZXNzVG9TdHJpbmcoJ2Z1amknLCAnUCcsIEJ1ZmZlckF2YXguZnJvbShhZGRyZXNzQnVmZmVyMikpO1xuXG4gICAgICBhZGRyZXNzMS5zaG91bGQubm90LmVxdWFsKGFkZHJlc3MyKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIG5vdCBiZSB0aGUgc2FtZSBhZGRyZXNzIGZyb20gZGlmZmVyZW50IGtleXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1dGlscyA9IG5ldyBLZXlQYWlyVXRpbHMoKTtcbiAgICAgIGNvbnN0IGtwMSA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5BQ0NPVU5UXzEucHJpdmtleSB9KTtcbiAgICAgIGNvbnN0IGFkZHJlc3NCdWZmZXIxID0ga3AxLmdldEFkZHJlc3NCdWZmZXIoKTtcbiAgICAgIGNvbnN0IGFkZHJlc3MxID0gdXRpbHMuYWRkcmVzc1RvU3RyaW5nKCdhdmF4JywgJ1AnLCBCdWZmZXJBdmF4LmZyb20oYWRkcmVzc0J1ZmZlcjEpKTtcblxuICAgICAgY29uc3Qga3AyID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLkFDQ09VTlRfMy5wcml2a2V5IH0pO1xuICAgICAgY29uc3QgYWRkcmVzc0J1ZmZlcjIgPSBrcDIuZ2V0QWRkcmVzc1NhZmVCdWZmZXIoKTtcbiAgICAgIGNvbnN0IGFkZHJlc3MyID0gdXRpbHMuYWRkcmVzc1RvU3RyaW5nKCdhdmF4JywgJ1AnLCBCdWZmZXJBdmF4LmZyb20oYWRkcmVzc0J1ZmZlcjIpKTtcblxuICAgICAgYWRkcmVzczEuc2hvdWxkLm5vdC5lcXVhbChhZGRyZXNzMik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTaWduIE1lc3NhZ2UnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBiZSBwZXJmb3JtZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyVG9TaWduID0gbmV3IEF2YXhwTGliLktleVBhaXIoKTtcbiAgICAgIGNvbnN0IHBydktleSA9IGtleVBhaXJUb1NpZ24uZ2V0UHJpdmF0ZUtleSgpO1xuICAgICAgY29uc3Qga2V5UGFpciA9IGtleVBhaXJUb1NpZ24uZ2V0S2V5cygpO1xuICAgICAgY29uc3QgbWVzc2FnZVRvU2lnbiA9IEJ1ZmZlci5mcm9tKHJhbmRvbUJ5dGVzKDMyKSk7XG4gICAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBiYXNlY29pbi5zaWduTWVzc2FnZShrZXlQYWlyLCBtZXNzYWdlVG9TaWduLnRvU3RyaW5nKCdoZXgnKSk7XG5cbiAgICAgIGNvbnN0IHZlcmlmeSA9IEF2YXhwTGliLlV0aWxzLnZlcmlmeVNpZ25hdHVyZShiYXNlY29pbi5fc3RhdGljc0NvaW4ubmV0d29yaywgbWVzc2FnZVRvU2lnbiwgc2lnbmF0dXJlLCBwcnZLZXkhKTtcbiAgICAgIHZlcmlmeS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHdpdGggbWlzc2luZyBwcml2YXRlIGtleScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgQXZheHBMaWIuS2V5UGFpcih7XG4gICAgICAgIHB1YjogdGVzdERhdGEuU0VFRF9BQ0NPVU5ULnB1YmxpY0tleUNiNTgsXG4gICAgICB9KS5nZXRLZXlzKCk7XG4gICAgICBjb25zdCBtZXNzYWdlVG9TaWduID0gQnVmZmVyLmZyb20ocmFuZG9tQnl0ZXMoMzIpKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBhd2FpdCBiYXNlY29pbi5zaWduTWVzc2FnZShrZXlQYWlyLCBtZXNzYWdlVG9TaWduKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIGtleSBwYWlyIG9wdGlvbnMnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0V4cGxhaW4gVHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgaGFsZiBzaWduZWQgQWRkVmFsaWRhdG9yIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdERhdGEgPSBBRERWQUxJREFUT1JfU0FNUExFUztcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IGhhbGZTaWduZWQ6IHsgdHhIZXg6IHRlc3REYXRhLmhhbGZzaWdudHhIZXggfSB9KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLm1pblZhbGlkYXRvclN0YWtlKTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQWRkVmFsaWRhdG9yKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLm5vZGVJRCk7XG4gICAgICB0eEV4cGxhaW4uY2hhbmdlT3V0cHV0c1swXS5hZGRyZXNzLnNwbGl0KCd+JykubGVuZ3RoLnNob3VsZC5lcXVhbCgzKTtcbiAgICAgIHR4RXhwbGFpbi5tZW1vLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5tZW1vKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIHNpZ25lZCBBZGRWYWxpZGF0b3IgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YSA9IEFERFZBTElEQVRPUl9TQU1QTEVTO1xuICAgICAgY29uc3QgdHhFeHBsYWluID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHsgdHhIZXg6IHRlc3REYXRhLmZ1bGxzaWdudHhIZXggfSk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5taW5WYWxpZGF0b3JTdGFrZSk7XG4gICAgICB0eEV4cGxhaW4udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkFkZFZhbGlkYXRvcik7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5ub2RlSUQpO1xuICAgICAgdHhFeHBsYWluLmNoYW5nZU91dHB1dHNbMF0uYWRkcmVzcy5zcGxpdCgnficpLmxlbmd0aC5zaG91bGQuZXF1YWwoMyk7XG4gICAgICB0eEV4cGxhaW4ubWVtby5zaG91bGQuZXF1YWwodGVzdERhdGEubWVtbyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSBoYWxmIHNpZ25lZCBleHBvcnQgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YSA9IEVYUE9SVF9QXzJfQztcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IGhhbGZTaWduZWQ6IHsgdHhIZXg6IHRlc3REYXRhLmhhbGZzaWdudHhIZXggfSB9KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmFtb3VudCk7XG4gICAgICB0eEV4cGxhaW4udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkV4cG9ydCk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5wQWRkcmVzc2VzLnNvcnQoKS5qb2luKCd+JykpO1xuICAgICAgdHhFeHBsYWluLmNoYW5nZU91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEucEFkZHJlc3Nlcy5zb3J0KCkuam9pbignficpKTtcbiAgICAgIHR4RXhwbGFpbi5tZW1vLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5tZW1vKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIHNpZ25lZCBleHBvcnQgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YSA9IEVYUE9SVF9QXzJfQztcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4OiB0ZXN0RGF0YS5mdWxsc2lnbnR4SGV4IH0pO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEuYW1vdW50KTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuRXhwb3J0KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLnBBZGRyZXNzZXMuc29ydCgpLmpvaW4oJ34nKSk7XG4gICAgICB0eEV4cGxhaW4uY2hhbmdlT3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5wQWRkcmVzc2VzLnNvcnQoKS5qb2luKCd+JykpO1xuICAgICAgdHhFeHBsYWluLm1lbW8uc2hvdWxkLmVxdWFsKHRlc3REYXRhLm1lbW8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgaGFsZiBzaWduZWQgZXhwb3J0IHRyYW5zYWN0aW9uIHdpdGhvdXQgY2Fobmdlb3V0cHV0ICcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRlc3REYXRhID0gRVhQT1JUX1BfMl9DX1dJVEhPVVRfQ0hBTkdFT1VUUFVUO1xuICAgICAgY29uc3QgdHhFeHBsYWluID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgICAgaGFsZlNpZ25lZDogeyB0eEhleDogdGVzdERhdGEuaGFsZnNpZ250eEhleCB9LFxuICAgICAgfSk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5hbW91bnQpO1xuICAgICAgdHhFeHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5FeHBvcnQpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEucEFkZHJlc3Nlcy5zb3J0KCkuam9pbignficpKTtcbiAgICAgIHR4RXhwbGFpbi5jaGFuZ2VPdXRwdXRzLnNob3VsZC5iZS5lbXB0eSgpO1xuICAgICAgdHhFeHBsYWluLm1lbW8uc2hvdWxkLmVxdWFsKHRlc3REYXRhLm1lbW8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgc2lnbmVkIGV4cG9ydCB0cmFuc2FjdGlvbiB3aXRob3V0IGNhaG5nZW91dHB1dCAnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YSA9IEVYUE9SVF9QXzJfQ19XSVRIT1VUX0NIQU5HRU9VVFBVVDtcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4OiB0ZXN0RGF0YS5mdWxsc2lnbnR4SGV4IH0pO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEuYW1vdW50KTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuRXhwb3J0KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLnBBZGRyZXNzZXMuc29ydCgpLmpvaW4oJ34nKSk7XG4gICAgICB0eEV4cGxhaW4uY2hhbmdlT3V0cHV0cy5zaG91bGQuYmUuZW1wdHkoKTtcbiAgICAgIHR4RXhwbGFpbi5tZW1vLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5tZW1vKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIGhhbGYgc2lnbmVkIGltcG9ydCB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRlc3REYXRhID0gSU1QT1JUX1A7XG4gICAgICBjb25zdCB0eEV4cGxhaW4gPSBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgICBoYWxmU2lnbmVkOiB7IHR4SGV4OiB0ZXN0RGF0YS5oYWxmc2lnbnR4SGV4IH0sXG4gICAgICB9KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKChOdW1iZXIodGVzdERhdGEuYW1vdW50KSAtIHR4RXhwbGFpbi5mZWU/LmZlZSkudG9TdHJpbmcoKSk7XG4gICAgICB0eEV4cGxhaW4udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkltcG9ydCk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5wQWRkcmVzc2VzLnNvcnQoKS5qb2luKCd+JykpO1xuICAgICAgdHhFeHBsYWluLmNoYW5nZU91dHB1dHMuc2hvdWxkLmJlLmVtcHR5KCk7XG4gICAgICB0eEV4cGxhaW4ubWVtby5zaG91bGQuZXF1YWwodGVzdERhdGEubWVtbyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSBzaWduZWQgaW1wb3J0IHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdERhdGEgPSBJTVBPUlRfUDtcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4OiB0ZXN0RGF0YS5mdWxsc2lnbnR4SGV4IH0pO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwoKE51bWJlcih0ZXN0RGF0YS5hbW91bnQpIC0gdHhFeHBsYWluLmZlZT8uZmVlKS50b1N0cmluZygpKTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuSW1wb3J0KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLnBBZGRyZXNzZXMuc29ydCgpLmpvaW4oJ34nKSk7XG4gICAgICB0eEV4cGxhaW4uY2hhbmdlT3V0cHV0cy5zaG91bGQuYmUuZW1wdHkoKTtcbiAgICAgIHR4RXhwbGFpbi5tZW1vLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5tZW1vKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIGhhbGYgc2lnbmVkIGltcG9ydCBpbiBDIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdERhdGEgPSBJTVBPUlRfQztcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4OiB0ZXN0RGF0YS5oYWxmc2lnbnR4SGV4IH0pO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwoKE51bWJlcih0ZXN0RGF0YS5hbW91bnQpIC0gdHhFeHBsYWluLmZlZT8uZmVlKS50b1N0cmluZygpKTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuSW1wb3J0KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLnRvKTtcbiAgICAgIHR4RXhwbGFpbi5jaGFuZ2VPdXRwdXRzLnNob3VsZC5iZS5lbXB0eSgpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdCh0eEV4cGxhaW4ubWVtbyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSBzaWduZWQgaW1wb3J0IGluIEMgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YSA9IElNUE9SVF9DO1xuICAgICAgY29uc3QgdHhFeHBsYWluID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHsgdHhIZXg6IHRlc3REYXRhLmZ1bGxzaWdudHhIZXggfSk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCgoTnVtYmVyKHRlc3REYXRhLmFtb3VudCkgLSB0eEV4cGxhaW4uZmVlPy5mZWUpLnRvU3RyaW5nKCkpO1xuICAgICAgdHhFeHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5JbXBvcnQpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEudG8pO1xuICAgICAgdHhFeHBsYWluLmNoYW5nZU91dHB1dHMuc2hvdWxkLmJlLmVtcHR5KCk7XG4gICAgICBzaG91bGQubm90LmV4aXN0KHR4RXhwbGFpbi5tZW1vKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIHVuc2lnbmVkIGV4cG9ydCBpbiBDIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdERhdGEgPSBFWFBPUlRfQztcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4OiB0ZXN0RGF0YS51bnNpZ25lZFR4SGV4IH0pO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwoTnVtYmVyKHRlc3REYXRhLmFtb3VudCkudG9TdHJpbmcoKSk7XG4gICAgICB0eEV4cGxhaW4udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkV4cG9ydCk7XG4gICAgICB0eEV4cGxhaW4uaW5wdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLmNIZXhBZGRyZXNzKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLnBBZGRyZXNzZXMuc2xpY2UoKS5zb3J0KCkuam9pbignficpKTtcbiAgICAgIHR4RXhwbGFpbi5mZWUuZmVlUmF0ZS5zaG91bGQuZXF1YWwoTnVtYmVyKHRlc3REYXRhLmZlZSkpO1xuICAgICAgdHhFeHBsYWluLmNoYW5nZU91dHB1dHMuc2hvdWxkLmJlLmVtcHR5KCk7XG4gICAgICBzaG91bGQubm90LmV4aXN0KHR4RXhwbGFpbi5tZW1vKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIHNpZ25lZCBleHBvcnQgaW4gQyB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRlc3REYXRhID0gRVhQT1JUX0M7XG4gICAgICBjb25zdCB0eEV4cGxhaW4gPSBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oeyB0eEhleDogdGVzdERhdGEuZnVsbHNpZ250eEhleCB9KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKE51bWJlcih0ZXN0RGF0YS5hbW91bnQpLnRvU3RyaW5nKCkpO1xuICAgICAgdHhFeHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5FeHBvcnQpO1xuICAgICAgdHhFeHBsYWluLmlucHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5jSGV4QWRkcmVzcyk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5wQWRkcmVzc2VzLnNsaWNlKCkuc29ydCgpLmpvaW4oJ34nKSk7XG4gICAgICB0eEV4cGxhaW4uZmVlLmZlZVJhdGUuc2hvdWxkLmVxdWFsKE51bWJlcih0ZXN0RGF0YS5mZWUpKTtcbiAgICAgIHR4RXhwbGFpbi5jaGFuZ2VPdXRwdXRzLnNob3VsZC5iZS5lbXB0eSgpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdCh0eEV4cGxhaW4ubWVtbyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgd2hlbiBhIHR4IGlzIG5vdCBwYXNzZWQgYXMgcGFyYW1ldGVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHt9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdtaXNzaW5nIHRyYW5zYWN0aW9uIGhleCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndmVyaWZ5IHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgc2lnbmVkIGFkZCB2YWxpZGF0b3IgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICB0eEhleDogdGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMuZnVsbHNpZ250eEhleCxcbiAgICAgICAgdHhJbmZvOiB7fSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IG5ld1R4UGFyYW1zKCk7XG4gICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkIH0pO1xuICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgaGFsZiBzaWduZWQgYWRkIHZhbGlkYXRvciB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiB0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5oYWxmc2lnbnR4SGV4LFxuICAgICAgICB0eEluZm86IHt9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25WZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSk7XG4gICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSB1bnNpZ25lZCBhZGQgdmFsaWRhdG9yIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25WZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSk7XG4gICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSBhZGQgdmFsaWRhdG9yIHRyYW5zYWN0aW9ucyB3aGVuIHJlY2lwaWVudHMgaGFzIGV4dHJhIGRhdGEgJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIHR4UGFyYW1zLmRhdGEgPSAnZGF0YSc7XG5cbiAgICAgIGNvbnN0IHZhbGlkVHJhbnNhY3Rpb24gPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkIH0pO1xuICAgICAgdmFsaWRUcmFuc2FjdGlvbi5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IGltcG9ydCBpbiBDIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgdHhIZXg6IElNUE9SVF9DLmZ1bGxzaWdudHhIZXgsXG4gICAgICAgIHR4SW5mbzoge30sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtdLFxuICAgICAgICB0eXBlOiAnSW1wb3J0JyxcbiAgICAgICAgbG9ja3RpbWU6IDAsXG4gICAgICAgIG1lbW86IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkIH0pO1xuICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgaW1wb3J0IHRvIFAgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICB0eEhleDogSU1QT1JUX1AuZnVsbHNpZ250eEhleCxcbiAgICAgICAgdHhJbmZvOiB7fSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW10sXG4gICAgICAgIHR5cGU6ICdJbXBvcnQnLFxuICAgICAgICBsb2NrdGltZTogMCxcbiAgICAgICAgbWVtbzogdW5kZWZpbmVkLFxuICAgICAgICB1bnNwZW50czogWydlOGl4S25iYTUyeXVmWHJUVktyVFhWUVRqNWNkNWU2bzZMYzNyVmtoYWhER0VzNzJMOjAnXSxcbiAgICAgIH07XG4gICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkIH0pO1xuICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgaW1wb3J0IHRvIFAgdHJhbnNhY3Rpb24gd2l0aCB3cm9uZyB1bnNwZW50cycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiBJTVBPUlRfUC5mdWxsc2lnbnR4SGV4LFxuICAgICAgICB0eEluZm86IHt9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXSxcbiAgICAgICAgdHlwZTogJ0ltcG9ydCcsXG4gICAgICAgIGxvY2t0aW1lOiAwLFxuICAgICAgICBtZW1vOiB1bmRlZmluZWQsXG4gICAgICAgIHVuc3BlbnRzOiBbJ3Rlc3Q6MSddLFxuICAgICAgfTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXMsXG4gICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgICAgJ1RyYW5zYWN0aW9uIHNob3VsZCBub3QgY29udGFpbiB0aGUgVVRYTzogZThpeEtuYmE1Mnl1ZlhyVFZLclRYVlFUajVjZDVlNm82TGMzclZraGFoREdFczcyTDowJ1xuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSBleHBvcnQgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICB0eEhleDogRVhQT1JUX1BfMl9DX1ZFUklGWS50eEhleCxcbiAgICAgICAgdHhJbmZvOiB7fSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IEVYUE9SVF9QXzJfQ19WRVJJRlkucmVjZWl2ZUFkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6IEVYUE9SVF9QXzJfQ19WRVJJRlkuYW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdFeHBvcnQnLFxuICAgICAgICBsb2NrdGltZTogMCxcbiAgICAgICAgbWVtbzoge1xuICAgICAgICAgIHZhbHVlOiBFWFBPUlRfUF8yX0NfVkVSSUZZLm1lbW8sXG4gICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgaXNUcmFuc2FjdGlvblZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCB9KTtcbiAgICAgIGlzVHJhbnNhY3Rpb25WZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdmVyaWZ5IGV4cG9ydCB0cmFuc2FjdGlvbiB3aXRoIHdyb25nIGFtb3VudCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiBFWFBPUlRfUF8yX0NfVkVSSUZZLnR4SGV4LFxuICAgICAgICB0eEluZm86IHt9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogRVhQT1JUX1BfMl9DX1ZFUklGWS5yZWNlaXZlQWRkcmVzcyxcbiAgICAgICAgICAgIGFtb3VudDogJzk5OTk5OTknLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdFeHBvcnQnLFxuICAgICAgICBsb2NrdGltZTogMCxcbiAgICAgICAgbWVtbzoge1xuICAgICAgICAgIHZhbHVlOiBFWFBPUlRfUF8yX0NfVkVSSUZZLm1lbW8sXG4gICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgICAgYFR4IHRvdGFsIGFtb3VudCAke0VYUE9SVF9QXzJfQ19WRVJJRlkuYW1vdW50fSBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHRvdGFsIGFtb3VudCBmaWVsZCA5OTk5OTk5IGFuZCBmaXhlZCBmZWUgMTAwMDAwMGBcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB2ZXJpZnkgZXhwb3J0IHRyYW5zYWN0aW9uIHdpdGggd3JvbmcgYy1hZGRyZXNzIGluIG1lbW8nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICB0eEhleDogRVhQT1JUX1BfMl9DX1ZFUklGWS50eEhleCxcbiAgICAgICAgdHhJbmZvOiB7fSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IEVYUE9SVF9QXzJfQ19WRVJJRlkucmVjZWl2ZUFkZHJlc3MyLFxuICAgICAgICAgICAgYW1vdW50OiBFWFBPUlRfUF8yX0NfVkVSSUZZLmFtb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnRXhwb3J0JyxcbiAgICAgICAgbG9ja3RpbWU6IDAsXG4gICAgICAgIG1lbW86IHtcbiAgICAgICAgICB2YWx1ZTogRVhQT1JUX1BfMl9DX1ZFUklGWS5tZW1vLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgIGBJbnZhbGlkIEMtY2hhaW4gcmVjZWl2ZSBhZGRyZXNzICR7RVhQT1JUX1BfMl9DX1ZFUklGWS5yZWNlaXZlQWRkcmVzc30sIGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIHBhcmFtcyBhZGRyZXNzICR7RVhQT1JUX1BfMl9DX1ZFUklGWS5yZWNlaXZlQWRkcmVzczJ9YFxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHZlcmlmeSBleHBvcnQgdHJhbnNhY3Rpb24gd2l0aCBubyBtZW1vJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgdHhIZXg6IEVYUE9SVF9DLnVuc2lnbmVkVHhIZXgsXG4gICAgICAgIHR4SW5mbzoge30sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiBFWFBPUlRfUF8yX0NfVkVSSUZZLnJlY2VpdmVBZGRyZXNzMixcbiAgICAgICAgICAgIGFtb3VudDogRVhQT1JUX1BfMl9DX1ZFUklGWS5hbW91bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0V4cG9ydCcsXG4gICAgICAgIGxvY2t0aW1lOiAwLFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoYEV4cG9ydCBUeCByZXF1aXJlcyBhIG1lbW8gd2l0aCBjLWNoYWluIGFkZHJlc3NgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB2ZXJpZnkgZXhwb3J0IHRyYW5zYWN0aW9uIHdpdGggaW52YWxpZCBDIGFkZHJlc3MgaW4gbWVtbycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiBFWFBPUlRfUF8yX0MudW5zaWduZWRUeEhleCxcbiAgICAgICAgdHhJbmZvOiB7fSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IEVYUE9SVF9QXzJfQy5wQWRkcmVzc2VzLFxuICAgICAgICAgICAgYW1vdW50OiBFWFBPUlRfUF8yX0MuYW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdFeHBvcnQnLFxuICAgICAgICBsb2NrdGltZTogMCxcbiAgICAgICAgbWVtbzoge1xuICAgICAgICAgIHZhbHVlOiBFWFBPUlRfUF8yX0MubWVtbyxcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcbiAgICAgICAgICBgVHhuIG1lbW8gbXVzdCBjb250YWluIHZhbGlkIEMtY2hhaW4gYWRkcmVzcyBkZXN0aW5hdGlvbiwgcmVjZWl2ZWQ6IEV4cG9ydCBBVkFYIGZyb20gUC1DaGFpbiB0byBDLUNoYWluIGFuZCBjb25zdW1lIG11bHRpc2lnIG91dHB1dCBhbmQgY3JlYXRlIG11bHRpc2lnIGF0b21pYyBvdXRwdXRgXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdmVyaWZ5IHRyYW5zYWN0aW9ucyB3aGVuIGhhdmUgZGlmZmVyZW50IHR5cGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IG5ld1R4UGFyYW1zKCk7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuICAgICAgdHhQYXJhbXMudHlwZSA9ICdhZGREZWxlZ2F0b3InO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnVHggdHlwZSBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zIHR5cGUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB2ZXJpZnkgdHJhbnNhY3Rpb25zIHdoZW4gaGF2ZSBkaWZmZXJlbnQgbm9kZUlkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSBuZXdUeFBhcmFtcygpO1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIHR4UGFyYW1zLnN0YWtpbmdPcHRpb25zLm5vZGVJRCA9ICdOb2RlSUQtTWR0ZVM5VTk4N1BZN2l3QTVQY3ozc0tWcHJKQWJBdkU3JztcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXMsXG4gICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ1R4IG91dHB1dHMgZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcycpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgZmFpbCB2ZXJpZnkgd2hlbiBpbnB1dCBgbm9kZUlkYCBpcyBhYnNlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSBuZXdUeFBhcmFtcygpO1xuICAgICAgdHhQYXJhbXMuc3Rha2luZ09wdGlvbnMubm9kZUlEID0gdW5kZWZpbmVkO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnVHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdmVyaWZ5IHRyYW5zYWN0aW9ucyB3aGVuIGhhdmUgZGlmZmVyZW50IGFtb3VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBuZXdUeFByZWJ1aWxkKCk7XG4gICAgICB0eFBhcmFtcy5zdGFraW5nT3B0aW9ucy5hbW91bnQgPSAnMjAwMDAwMDAwMCc7XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UGFyYW1zLFxuICAgICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdUeCBvdXRwdXRzIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdHhQYXJhbXMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB2ZXJpZnkgdHJhbnNhY3Rpb25zIHdoZW4gYW1vdW50IGlzIG51bWJlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBuZXdUeFByZWJ1aWxkKCk7XG4gICAgICB0eFBhcmFtcy5zdGFraW5nT3B0aW9ucy5hbW91bnQgPSAxMDAwMDAwMDAwO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnVHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdmVyaWZ5IHRyYW5zYWN0aW9ucyB3aGVuIGFtb3VudCBpcyBhYnNlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IG5ld1R4UGFyYW1zKCk7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuICAgICAgdHhQYXJhbXMuc3Rha2luZ09wdGlvbnMuYW1vdW50ID0gdW5kZWZpbmVkO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnVHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdWYWxpZGF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbGlkQWRkcmVzcyA9ICdQLWZ1amkxNWphbXd1a2Zxa3doZTh6MjZ0anF4ZWp0amQzams5dmo0a214d2EnO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3ModmFsaWRBZGRyZXNzKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZhbGlkYXRlIGludmFsaWQgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGludmFsaWRBZGRyZXNzZXMgPSBbdW5kZWZpbmVkLCAnJywgJ2FzZGFkc2FhZicsICcxNXgzejRydms4ZTd2d2E2Zzlsa3lnODl2NWR3a25wNDQ4NTh1ZXgnXTtcbiAgICAgIGZvciAoY29uc3QgYWRkcmVzcyBvZiBpbnZhbGlkQWRkcmVzc2VzKSB7XG4gICAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhbiBhcnJheSBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsaWRBZGRyZXNzZXMgPSBbXG4gICAgICAgICdQLWZ1amkxNXgzejRydms4ZTd2d2E2Zzlsa3lnODl2NWR3a25wNDQ4NTh1ZXgnLFxuICAgICAgICAnUC1hdmF4MTQzcThsc3kzeTRrZTlkNnplbHRyZTh1MmF0ZWVkNnVrOWthMG51JyxcbiAgICAgICAgJ05vZGVJRC0xNDNxOGxzeTN5NGtlOWQ2emVsdHJlOHUyYXRlZWQ2dWs5a2EwbnUnLFxuICAgICAgXTtcblxuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3ModmFsaWRBZGRyZXNzZXMpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmFsaWRhdGUgYW4gYXJyYXkgYWRkcmVzcyB3aXRoIGludmFsaWQgYWRkcmVzc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWxpZEFkZHJlc3NlcyA9IFtcbiAgICAgICAgJ1AtZnVqaTE1eDN6NHJ2azhlN3Z3YTZnOWxreWc4OXY1ZHdrbnA0NDg1OHVleCcsXG4gICAgICAgICdQLWF2YXgxNDNxOGxzeTN5NGtlOWQ2emVsdHJlOHUyYXRlZWQ2dWs5a2EwbnUnLFxuICAgICAgICAnaW52YWxpZC1hZGRyZXNzJyxcbiAgICAgIF07XG5cbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKHZhbGlkQWRkcmVzc2VzKS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYSBtdWx0c2lnIGFkZHJlc3Mgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbXVsdGlTaWdWYWxpZEFkZHJlc3MgPVxuICAgICAgICAnUC1mdWppMXl6cGZzZGFsaGZ3a3EyY2Vld2dzOXd2N2swdWZ0NDB5ZHB1ajU5flAtZnVqaTEwM2NtbnRzc3A2cW51Y2VqYWhkZHk0MndjeTRxdHkwdWo0MjgyMn5QLWZ1amkxaGRrN250dzBodWhxbWxobGhlbWU5dDdzY3N5OWxoZmh3M3l3eTQnO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MobXVsdGlTaWdWYWxpZEFkZHJlc3MpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmFsaWRhdGUgYSBtdWx0c2lnIGFkZHJlc3Mgc3RyaW5nIHdpdGggaW52YWxpZCBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbXVsdGlTaWdWYWxpZEFkZHJlc3MgPVxuICAgICAgICAnUC1mdWppMXl6cGZzZGFsaGZ3a3EyY2Vld2dzOXd2N2swdWZ0NDB5ZHB1ajU5fmludmFsaWQtYWRkcmVzc35QLWZ1amkxaGRrN250dzBodWhxbWxobGhlbWU5dDdzY3N5OWxoZmh3M3l3eTQnO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MobXVsdGlTaWdWYWxpZEFkZHJlc3MpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSB2YWxpZCBjLWNoYWluIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICBjb25zdCBhZGRyZXNzID0gJzB4MTM3NGEyMDQ2NjYxZjkxNGQxNjg3ZDg1ZGJiY2ViOWFjNzkxMGEyOSc7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHZlcmlmeWluZyBhZGRyZXNzIGlmIGFkZHJlc3MgbGVuZ3RoIGRvZXNudCBtYXRjaCBrZXljaGFpbiBsZW5ndGgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWxpZEFkZHJlc3NlcyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdQLWZ1amkxNXgzejRydms4ZTd2d2E2Zzlsa3lnODl2NWR3a25wNDQ4NTh1ZXgnLFxuICAgICAgICAgIGtleWNoYWlucyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdQLWZ1amkxd3EwZDU2cHU1NHNnYzV4cGV2bTN1cjZzZjNsNmtrZTcwZHowbDQnLFxuICAgICAgICAgIGtleWNoYWlucyxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGZvciAoY29uc3QgYWRkcmVzc1BhcmFtcyBvZiB2YWxpZEFkZHJlc3Nlcykge1xuICAgICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhhc3luYyAoKSA9PiBiYXNlY29pbi52ZXJpZnlBZGRyZXNzKGFkZHJlc3NQYXJhbXMpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgaW52YWxpZCBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaW52YWxpZEFkZHJlc3NlcyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdQLWZ1amkxMDNjbW50c3NwNnFudWNlamFoZGR5NDJ3Y3k0cXR5MHVqNDI4MjInLFxuICAgICAgICAgIGtleWNoYWlucyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdQLWF2YXgxNDNxOGxzeTN5NGtlOWQ2emVsdHJlOHUyYXRlZWQ2dWs5a2EwbnUnLFxuICAgICAgICAgIGtleWNoYWlucyxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGZvciAoY29uc3QgYWRkcmVzcyBvZiBpbnZhbGlkQWRkcmVzc2VzKSB7XG4gICAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKGFzeW5jICgpID0+IGJhc2Vjb2luLnZlcmlmeUFkZHJlc3MoYWRkcmVzcykpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgdmVyaWZ5IGlzIHdhbGxldCBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgKFxuICAgICAgICBhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3Moe1xuICAgICAgICAgIGFkZHJlc3M6XG4gICAgICAgICAgICAnUC1mdWppMTV4M3o0cnZrOGU3dndhNmc5bGt5Zzg5djVkd2tucDQ0ODU4dWV4flAtZnVqaTF3cTBkNTZwdTU0c2djNXhwZXZtM3VyNnNmM2w2a2tlNzBkejBsNH5QLWZ1amkxY2prNGN2ZGZ5NmZmZDRmaDh1bXBubnJtanQweGRhcDAydGNlcDYnLFxuICAgICAgICAgIGtleWNoYWlucyxcbiAgICAgICAgfSlcbiAgICAgICkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBhZGRyZXNzIGxlbmd0aCBhbmQga2V5Y2hhaW4gbGVuZ3RoIGRvbnQgbWF0Y2gnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhhc3luYyAoKSA9PlxuICAgICAgICBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3Moe1xuICAgICAgICAgIGFkZHJlc3M6ICdQLWZ1amkxd3EwZDU2cHU1NHNnYzV4cGV2bTN1cjZzZjNsNmtrZTcwZHowbDR+UC1mdWppMWNqazRjdmRmeTZmZmQ0Zmg4dW1wbm5ybWp0MHhkYXAwMnRjZXA2JyxcbiAgICAgICAgICBrZXljaGFpbnMsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGtleWNoYWluIGlzIG5vdCBvZiBsZW5ndGggMycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKGFzeW5jICgpID0+XG4gICAgICAgIGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgICAgYWRkcmVzczogJ1AtZnVqaTF3cTBkNTZwdTU0c2djNXhwZXZtM3VyNnNmM2w2a2tlNzBkejBsNCcsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnNbMF0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
732
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZheHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvYXZheHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx3REFBMEM7QUFDMUMsbURBQStEO0FBQy9ELG9DQUEyQztBQUMzQyxtQ0FBcUM7QUFDckMsK0NBQWlDO0FBQ2pDLGlEQUErQztBQUMvQyxpREFBNEM7QUFDNUMsNkRBQStDO0FBQy9DLHNEQUFtRDtBQUNuRCwrQ0FBNEQ7QUFDNUQsdUNBQXdDO0FBQ3hDLHlDQUFpRDtBQUNqRCwwQ0FBNEI7QUFFNUIsbURBQXFGO0FBQ3JGLHFEQUFtRDtBQUNuRCw4Q0FLNEI7QUFDNUIscURBQW1EO0FBQ25ELHFEQUFtRDtBQUNuRCxvREFBNEI7QUFFNUIsUUFBUSxDQUFDLE9BQU8sRUFBRTtJQUNoQixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUM7SUFDekIsTUFBTSxTQUFTLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQztJQUNqQyxJQUFJLEtBQW1CLENBQUM7SUFDeEIsSUFBSSxRQUFRLENBQUM7SUFDYixJQUFJLGFBQWEsQ0FBQztJQUNsQixJQUFJLFdBQVcsQ0FBQztJQUVoQixNQUFNLFVBQVUsR0FBRztRQUNqQixLQUFLLEVBQUUsUUFBUSxDQUFDLG9CQUFvQixDQUFDLGFBQWE7UUFDbEQsTUFBTSxFQUFFLEVBQUU7S0FDWCxDQUFDO0lBRUYsTUFBTSxRQUFRLEdBQUc7UUFDZixVQUFVLEVBQUUsRUFBRTtRQUNkLElBQUksRUFBRSxjQUFjO1FBQ3BCLGNBQWMsRUFBRTtZQUNkLFNBQVMsRUFBRSxRQUFRLENBQUMsb0JBQW9CLENBQUMsU0FBUztZQUNsRCxPQUFPLEVBQUUsUUFBUSxDQUFDLG9CQUFvQixDQUFDLE9BQU87WUFDOUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNO1lBQzVDLE1BQU0sRUFBRSxRQUFRLENB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QUs7WUFDdkQsTUFBTSxnQkFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUM5QixRQUFRLENBQUMsZUFBZSxDQUFDO2dCQUN2QixPQUFPLEVBQUUsK0NBQStDO2dCQUN4RCxTQUFTLEVBQUUscUJBQVMsQ0FBQyxDQUFDLENBQUM7YUFDeEIsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBBdmF4cExpYiBmcm9tICcuLi8uLi9zcmMvbGliJztcbmltcG9ydCB7IFRlc3RCaXRHbywgVGVzdEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLXRlc3QnO1xuaW1wb3J0IHsgQXZheFAsIFRhdmF4UCB9IGZyb20gJy4uLy4uL3NyYy8nO1xuaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0ICogYXMgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1hcGknO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4uL3Jlc291cmNlcy9hdmF4cCc7XG5pbXBvcnQgeyBrZXljaGFpbnMgfSBmcm9tICcuLi9yZXNvdXJjZXMva2V5Y2hhaW5zJztcbmltcG9ydCB7IFV0aWxzIGFzIEtleVBhaXJVdGlscyB9IGZyb20gJy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4uLy4uL3NyYy9saWInO1xuaW1wb3J0IHsgQnVmZmVyIGFzIEJ1ZmZlckF2YXggfSBmcm9tICdhdmFsYW5jaGUnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgeyBIYWxmU2lnbmVkQWNjb3VudFRyYW5zYWN0aW9uLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBJTVBPUlRfUCB9IGZyb20gJy4uL3Jlc291cmNlcy90eC9pbXBvcnRQJztcbmltcG9ydCB7XG4gIEFERFZBTElEQVRPUl9TQU1QTEVTLFxuICBFWFBPUlRfUF8yX0MsXG4gIEVYUE9SVF9QXzJfQ19WRVJJRlksXG4gIEVYUE9SVF9QXzJfQ19XSVRIT1VUX0NIQU5HRU9VVFBVVCxcbn0gZnJvbSAnLi4vcmVzb3VyY2VzL2F2YXhwJztcbmltcG9ydCB7IElNUE9SVF9DIH0gZnJvbSAnLi4vcmVzb3VyY2VzL3R4L2ltcG9ydEMnO1xuaW1wb3J0IHsgRVhQT1JUX0MgfSBmcm9tICcuLi9yZXNvdXJjZXMvdHgvZXhwb3J0Qyc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmRlc2NyaWJlKCdBdmF4cCcsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgY29pbk5hbWUgPSAnYXZheHAnO1xuICBjb25zdCB0Y29pbk5hbWUgPSAndCcgKyBjb2luTmFtZTtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBiYXNlY29pbjtcbiAgbGV0IG5ld1R4UHJlYnVpbGQ7XG4gIGxldCBuZXdUeFBhcmFtcztcblxuICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgIHR4SGV4OiB0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy51bnNpZ25lZFR4SGV4LFxuICAgIHR4SW5mbzoge30sXG4gIH07XG5cbiAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgcmVjaXBpZW50czogW10sXG4gICAgdHlwZTogJ0FkZFZhbGlkYXRvcicsXG4gICAgc3Rha2luZ09wdGlvbnM6IHtcbiAgICAgIHN0YXJ0VGltZTogdGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMuc3RhcnRUaW1lLFxuICAgICAgZW5kVGltZTogdGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMuZW5kVGltZSxcbiAgICAgIG5vZGVJRDogdGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMubm9kZUlELFxuICAgICAgYW1vdW50OiB0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5taW5WYWxpZGF0b3JTdGFrZSxcbiAgICAgIGRlbGVnYXRpb25GZWVSYXRlOiB0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5kZWxlZ2F0aW9uRmVlLFxuICAgIH0sXG4gICAgbG9ja3RpbWU6IDAsXG4gIH07XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwge1xuICAgICAgZW52OiAnbW9jaycsXG4gICAgfSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKGNvaW5OYW1lLCBBdmF4UC5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKHRjb2luTmFtZSwgVGF2YXhQLmNyZWF0ZUluc3RhbmNlKTtcbiAgICBiYXNlY29pbiA9IGJpdGdvLmNvaW4odGNvaW5OYW1lKTtcbiAgICBuZXdUeFByZWJ1aWxkID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIF8uY2xvbmVEZWVwKHR4UHJlYnVpbGQpO1xuICAgIH07XG4gICAgbmV3VHhQYXJhbXMgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gXy5jbG9uZURlZXAodHhQYXJhbXMpO1xuICAgIH07XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaW5zdGFudGlhdGUgdGhlIGNvaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGxvY2FsQmFzZWNvaW4gPSBiaXRnby5jb2luKHRjb2luTmFtZSk7XG4gICAgbG9jYWxCYXNlY29pbi5zaG91bGQuYmUuYW4uaW5zdGFuY2VvZihUYXZheFApO1xuXG4gICAgbG9jYWxCYXNlY29pbiA9IGJpdGdvLmNvaW4oY29pbk5hbWUpO1xuICAgIGxvY2FsQmFzZWNvaW4uc2hvdWxkLmJlLmFuLmluc3RhbmNlb2YoQXZheFApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiAnICsgdGNvaW5OYW1lLCBmdW5jdGlvbiAoKSB7XG4gICAgYmFzZWNvaW4uZ2V0Q2hhaW4oKS5zaG91bGQuZXF1YWwodGNvaW5OYW1lKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gZnVsbCBuYW1lJywgZnVuY3Rpb24gKCkge1xuICAgIGJhc2Vjb2luLmdldEZ1bGxOYW1lKCkuc2hvdWxkLmVxdWFsKCdUZXN0bmV0IEF2YWxhbmNoZSBQLUNoYWluJyk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdLZXlwYWlyczonLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBhIGtleXBhaXIgZnJvbSByYW5kb20gc2VlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBiYXNlY29pbi5nZW5lcmF0ZUtleVBhaXIoKTtcbiAgICAgIGtleVBhaXIuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3B1YicpO1xuICAgICAga2V5UGFpci5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncHJ2Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEga2V5cGFpciBmcm9tIGEgc2VlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNlZWRUZXh0ID0gdGVzdERhdGEuU0VFRF9BQ0NPVU5ULnNlZWQ7XG4gICAgICBjb25zdCBzZWVkID0gQnVmZmVyLmZyb20oc2VlZFRleHQsICdoZXgnKTtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBiYXNlY29pbi5nZW5lcmF0ZUtleVBhaXIoc2VlZCk7XG4gICAgICBrZXlQYWlyLnB1Yi5zaG91bGQuZXF1YWwodGVzdERhdGEuU0VFRF9BQ0NPVU5ULnB1YmxpY0tleSk7XG4gICAgICBrZXlQYWlyLnBydi5zaG91bGQuZXF1YWwodGVzdERhdGEuU0VFRF9BQ0NPVU5ULnByaXZhdGVLZXkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhIHB1YmxpYyBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gYmFzZWNvaW4uZ2VuZXJhdGVLZXlQYWlyKCk7XG4gICAgICBrZXlQYWlyLnNob3VsZC5oYXZlLnByb3BlcnR5KCdwdWInKTtcbiAgICAgIGtleVBhaXIuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3BydicpO1xuXG4gICAgICBiYXNlY29pbi5pc1ZhbGlkUHViKGtleVBhaXIucHViKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGEgcHJpdmF0ZSBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gYmFzZWNvaW4uZ2VuZXJhdGVLZXlQYWlyKCk7XG4gICAgICBrZXlQYWlyLnNob3VsZC5oYXZlLnByb3BlcnR5KCdwdWInKTtcbiAgICAgIGtleVBhaXIuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3BydicpO1xuXG4gICAgICBiYXNlY29pbi5pc1ZhbGlkUHJ2KGtleVBhaXIucHJ2KS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTaWduIFRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgQXZheHBMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQodGNvaW5OYW1lKSk7XG5cbiAgICBpdCgnYnVpbGQgYW5kIHNpZ24gYSB0cmFuc2FjdGlvbiBpbiByZWd1bGFyIG1vZGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZWNvdmVyeU1vZGUgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBdmF4cExpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCh0Y29pbk5hbWUpKVxuICAgICAgICAuZ2V0VmFsaWRhdG9yQnVpbGRlcigpXG4gICAgICAgIC50aHJlc2hvbGQodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1ZBTElEQVRPUl9TQU1QTEUudGhyZXNob2xkKVxuICAgICAgICAubG9ja3RpbWUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1ZBTElEQVRPUl9TQU1QTEUubG9ja3RpbWUpXG4gICAgICAgIC5yZWNvdmVyTW9kZShyZWNvdmVyeU1vZGUpXG4gICAgICAgIC5mcm9tUHViS2V5KHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLmJpdGdvQWRkcmVzc2VzKVxuICAgICAgICAuc3RhcnRUaW1lKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLnN0YXJ0VGltZSlcbiAgICAgICAgLmVuZFRpbWUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1ZBTElEQVRPUl9TQU1QTEUuZW5kVGltZSlcbiAgICAgICAgLnN0YWtlQW1vdW50KHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLnN0YWtlQW1vdW50KVxuICAgICAgICAuZGVsZWdhdGlvbkZlZVJhdGUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1ZBTElEQVRPUl9TQU1QTEUuZGVsZWdhdGlvbkZlZVJhdGUpXG4gICAgICAgIC5ub2RlSUQodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1ZBTElEQVRPUl9TQU1QTEUubm9kZUlkKVxuICAgICAgICAudXR4b3ModGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1ZBTElEQVRPUl9TQU1QTEUudXR4b3MpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgbGV0IHR4SGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHR4SGV4LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS51bnNpZ25lZFJhd1R4Tm9uUmVjb3ZlcnkpO1xuXG4gICAgICBjb25zdCBwcml2YXRlS2V5ID0gcmVjb3ZlcnlNb2RlXG4gICAgICAgID8gdGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1ZBTElEQVRPUl9TQU1QTEUuYmFja3VwUHJpdmF0ZUtleVxuICAgICAgICA6IHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLnVzZXJQcml2YXRlS2V5O1xuXG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogdHgudG9Ccm9hZGNhc3RGb3JtYXQoKSxcbiAgICAgICAgfSxcbiAgICAgICAgcHJ2OiBwcml2YXRlS2V5LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgaGFsZlNpZ25lZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4uc2lnblRyYW5zYWN0aW9uKHBhcmFtcyk7XG4gICAgICB0eEhleCA9IChoYWxmU2lnbmVkVHJhbnNhY3Rpb24gYXMgSGFsZlNpZ25lZEFjY291bnRUcmFuc2FjdGlvbik/LmhhbGZTaWduZWQ/LnR4SGV4O1xuICAgICAgdHhIZXguc2hvdWxkLmVxdWFsKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLmhhbGZTaWduZWRSYXdUeE5vblJlY292ZXJ5KTtcbiAgICB9KTtcbiAgICBpdCgnYnVpbGQgYW5kIHNpZ24gYSB0cmFuc2FjdGlvbiBpbiByZWNvdmVyeSBtb2RlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVjb3ZlcnlNb2RlID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBdmF4cExpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCh0Y29pbk5hbWUpKVxuICAgICAgICAuZ2V0VmFsaWRhdG9yQnVpbGRlcigpXG4gICAgICAgIC50aHJlc2hvbGQodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1ZBTElEQVRPUl9TQU1QTEUudGhyZXNob2xkKVxuICAgICAgICAubG9ja3RpbWUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1ZBTElEQVRPUl9TQU1QTEUubG9ja3RpbWUpXG4gICAgICAgIC5yZWNvdmVyTW9kZShyZWNvdmVyeU1vZGUpXG4gICAgICAgIC5mcm9tUHViS2V5KHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLmJpdGdvQWRkcmVzc2VzKVxuICAgICAgICAuc3RhcnRUaW1lKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLnN0YXJ0VGltZSlcbiAgICAgICAgLmVuZFRpbWUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1ZBTElEQVRPUl9TQU1QTEUuZW5kVGltZSlcbiAgICAgICAgLnN0YWtlQW1vdW50KHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLnN0YWtlQW1vdW50KVxuICAgICAgICAuZGVsZWdhdGlvbkZlZVJhdGUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1ZBTElEQVRPUl9TQU1QTEUuZGVsZWdhdGlvbkZlZVJhdGUpXG4gICAgICAgIC5ub2RlSUQodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1ZBTElEQVRPUl9TQU1QTEUubm9kZUlkKVxuICAgICAgICAudXR4b3ModGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1ZBTElEQVRPUl9TQU1QTEUudXR4b3MpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgbGV0IHR4SGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHR4SGV4LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfVkFMSURBVE9SX1NBTVBMRS51bnNpZ25lZFJhd3R4UmVjb3ZlcnkpO1xuXG4gICAgICBjb25zdCBwcml2YXRlS2V5ID0gcmVjb3ZlcnlNb2RlXG4gICAgICAgID8gdGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1ZBTElEQVRPUl9TQU1QTEUuYmFja3VwUHJpdmF0ZUtleVxuICAgICAgICA6IHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLnVzZXJQcml2YXRlS2V5O1xuXG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogdHgudG9Ccm9hZGNhc3RGb3JtYXQoKSxcbiAgICAgICAgfSxcbiAgICAgICAgcHJ2OiBwcml2YXRlS2V5LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgaGFsZlNpZ25lZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4uc2lnblRyYW5zYWN0aW9uKHBhcmFtcyk7XG4gICAgICB0eEhleCA9IChoYWxmU2lnbmVkVHJhbnNhY3Rpb24gYXMgSGFsZlNpZ25lZEFjY291bnRUcmFuc2FjdGlvbik/LmhhbGZTaWduZWQ/LnR4SGV4O1xuICAgICAgdHhIZXguc2hvdWxkLmVxdWFsKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9WQUxJREFUT1JfU0FNUExFLmhhbGZTaWduZWRSYXdUeFJlY292ZXJ5KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYmUgcmVqZWN0ZWQgaWYgaW52YWxpZCBrZXknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBpbnZhbGlkUHJpdmF0ZUtleSA9ICdBQUFBQSc7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5mcm9tKHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLnVuc2lnbmVkVHhIZXgpO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4SGV4OiB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLFxuICAgICAgICB9LFxuICAgICAgICBwcnY6IGludmFsaWRQcml2YXRlS2V5LFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgYmFzZWNvaW4uc2lnblRyYW5zYWN0aW9uKHBhcmFtcykuc2hvdWxkLmJlLnJlamVjdGVkKCk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHNhbWUgbWFpbm5ldCBhZGRyZXNzJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXRpbHMgPSBuZXcgS2V5UGFpclV0aWxzKCk7XG4gICAgICBjb25zdCB4cHJ2ID0gdGVzdERhdGEuU0VFRF9BQ0NPVU5ULnhQcml2YXRlS2V5O1xuICAgICAgY29uc3Qga3AxID0gbmV3IEtleVBhaXIoeyBwcnY6IHhwcnYgfSk7XG4gICAgICBjb25zdCBhZGRyZXNzQnVmZmVyMSA9IGtwMS5nZXRBZGRyZXNzQnVmZmVyKCk7XG4gICAgICBjb25zdCBhZGRyZXNzMSA9IHV0aWxzLmFkZHJlc3NUb1N0cmluZygnYXZheCcsICdQJywgQnVmZmVyQXZheC5mcm9tKGFkZHJlc3NCdWZmZXIxKSk7XG5cbiAgICAgIGNvbnN0IGtwMiA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB4cHJ2IH0pO1xuICAgICAgY29uc3QgYWRkcmVzc0J1ZmZlcjIgPSBrcDIuZ2V0QWRkcmVzc1NhZmVCdWZmZXIoKTtcbiAgICAgIGNvbnN0IGFkZHJlc3MyID0gdXRpbHMuYWRkcmVzc1RvU3RyaW5nKCdhdmF4JywgJ1AnLCBCdWZmZXJBdmF4LmZyb20oYWRkcmVzc0J1ZmZlcjIpKTtcblxuICAgICAgY29uc3Qga3AzID0gbmV3IEtleVBhaXIoeyBwcnY6IHhwcnYgfSk7XG4gICAgICBjb25zdCBhZGRyZXNzMyA9IGtwMy5nZXRBdmF4UEFkZHJlc3MoJ2F2YXgnKTtcblxuICAgICAgYWRkcmVzczEuc2hvdWxkLmVxdWFsKGFkZHJlc3MyKTtcbiAgICAgIGFkZHJlc3MxLnNob3VsZC5lcXVhbChhZGRyZXNzMyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHNhbWUgdGVzdG5ldCBhZGRyZXNzJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXRpbHMgPSBuZXcgS2V5UGFpclV0aWxzKCk7XG4gICAgICBjb25zdCB4cHJ2ID0gdGVzdERhdGEuU0VFRF9BQ0NPVU5ULnhQcml2YXRlS2V5O1xuICAgICAgY29uc3Qga3AxID0gbmV3IEtleVBhaXIoeyBwcnY6IHhwcnYgfSk7XG4gICAgICBjb25zdCBhZGRyZXNzQnVmZmVyMSA9IGtwMS5nZXRBZGRyZXNzQnVmZmVyKCk7XG4gICAgICBjb25zdCBhZGRyZXNzMSA9IHV0aWxzLmFkZHJlc3NUb1N0cmluZygnZnVqaScsICdQJywgQnVmZmVyQXZheC5mcm9tKGFkZHJlc3NCdWZmZXIxKSk7XG5cbiAgICAgIGNvbnN0IGtwMiA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB4cHJ2IH0pO1xuICAgICAgY29uc3QgYWRkcmVzc0J1ZmZlcjIgPSBrcDIuZ2V0QWRkcmVzc1NhZmVCdWZmZXIoKTtcbiAgICAgIGNvbnN0IGFkZHJlc3MyID0gdXRpbHMuYWRkcmVzc1RvU3RyaW5nKCdmdWppJywgJ1AnLCBCdWZmZXJBdmF4LmZyb20oYWRkcmVzc0J1ZmZlcjIpKTtcblxuICAgICAgY29uc3Qga3AzID0gbmV3IEtleVBhaXIoeyBwcnY6IHhwcnYgfSk7XG4gICAgICBjb25zdCBhZGRyZXNzMyA9IGtwMy5nZXRBdmF4UEFkZHJlc3MoJ2Z1amknKTtcblxuICAgICAgYWRkcmVzczEuc2hvdWxkLmVxdWFsKGFkZHJlc3MyKTtcbiAgICAgIGFkZHJlc3MxLnNob3VsZC5lcXVhbChhZGRyZXNzMyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBub3QgYmUgdGhlIHNhbWUgYWRkcmVzcyBmcm9tIHNhbWUga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3QgdXRpbHMgPSBuZXcgS2V5UGFpclV0aWxzKCk7XG4gICAgICBjb25zdCBrcDEgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuQUNDT1VOVF8xLnByaXZrZXkgfSk7XG4gICAgICBjb25zdCBhZGRyZXNzQnVmZmVyMSA9IGtwMS5nZXRBZGRyZXNzQnVmZmVyKCk7XG4gICAgICBjb25zdCBhZGRyZXNzMSA9IHV0aWxzLmFkZHJlc3NUb1N0cmluZygnYXZheCcsICdQJywgQnVmZmVyQXZheC5mcm9tKGFkZHJlc3NCdWZmZXIxKSk7XG5cbiAgICAgIGNvbnN0IGtwMiA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5BQ0NPVU5UXzEucHJpdmtleSB9KTtcbiAgICAgIGNvbnN0IGFkZHJlc3NCdWZmZXIyID0ga3AyLmdldEFkZHJlc3NTYWZlQnVmZmVyKCk7XG4gICAgICBjb25zdCBhZGRyZXNzMiA9IHV0aWxzLmFkZHJlc3NUb1N0cmluZygnZnVqaScsICdQJywgQnVmZmVyQXZheC5mcm9tKGFkZHJlc3NCdWZmZXIyKSk7XG5cbiAgICAgIGFkZHJlc3MxLnNob3VsZC5ub3QuZXF1YWwoYWRkcmVzczIpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgbm90IGJlIHRoZSBzYW1lIGFkZHJlc3MgZnJvbSBkaWZmZXJlbnQga2V5cycsICgpID0+IHtcbiAgICAgIGNvbnN0IHV0aWxzID0gbmV3IEtleVBhaXJVdGlscygpO1xuICAgICAgY29uc3Qga3AxID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLkFDQ09VTlRfMS5wcml2a2V5IH0pO1xuICAgICAgY29uc3QgYWRkcmVzc0J1ZmZlcjEgPSBrcDEuZ2V0QWRkcmVzc0J1ZmZlcigpO1xuICAgICAgY29uc3QgYWRkcmVzczEgPSB1dGlscy5hZGRyZXNzVG9TdHJpbmcoJ2F2YXgnLCAnUCcsIEJ1ZmZlckF2YXguZnJvbShhZGRyZXNzQnVmZmVyMSkpO1xuXG4gICAgICBjb25zdCBrcDIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuQUNDT1VOVF8zLnByaXZrZXkgfSk7XG4gICAgICBjb25zdCBhZGRyZXNzQnVmZmVyMiA9IGtwMi5nZXRBZGRyZXNzU2FmZUJ1ZmZlcigpO1xuICAgICAgY29uc3QgYWRkcmVzczIgPSB1dGlscy5hZGRyZXNzVG9TdHJpbmcoJ2F2YXgnLCAnUCcsIEJ1ZmZlckF2YXguZnJvbShhZGRyZXNzQnVmZmVyMikpO1xuXG4gICAgICBhZGRyZXNzMS5zaG91bGQubm90LmVxdWFsKGFkZHJlc3MyKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1NpZ24gTWVzc2FnZScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGJlIHBlcmZvcm1lZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGtleVBhaXJUb1NpZ24gPSBuZXcgQXZheHBMaWIuS2V5UGFpcigpO1xuICAgICAgY29uc3QgcHJ2S2V5ID0ga2V5UGFpclRvU2lnbi5nZXRQcml2YXRlS2V5KCk7XG4gICAgICBjb25zdCBrZXlQYWlyID0ga2V5UGFpclRvU2lnbi5nZXRLZXlzKCk7XG4gICAgICBjb25zdCBtZXNzYWdlVG9TaWduID0gQnVmZmVyLmZyb20ocmFuZG9tQnl0ZXMoMzIpKTtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGF3YWl0IGJhc2Vjb2luLnNpZ25NZXNzYWdlKGtleVBhaXIsIG1lc3NhZ2VUb1NpZ24udG9TdHJpbmcoJ2hleCcpKTtcblxuICAgICAgY29uc3QgdmVyaWZ5ID0gQXZheHBMaWIuVXRpbHMudmVyaWZ5U2lnbmF0dXJlKGJhc2Vjb2luLl9zdGF0aWNzQ29pbi5uZXR3b3JrLCBtZXNzYWdlVG9TaWduLCBzaWduYXR1cmUsIHBydktleSEpO1xuICAgICAgdmVyaWZ5LnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgd2l0aCBtaXNzaW5nIHByaXZhdGUga2V5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBBdmF4cExpYi5LZXlQYWlyKHtcbiAgICAgICAgcHViOiB0ZXN0RGF0YS5TRUVEX0FDQ09VTlQucHVibGljS2V5Q2I1OCxcbiAgICAgIH0pLmdldEtleXMoKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUb1NpZ24gPSBCdWZmZXIuZnJvbShyYW5kb21CeXRlcygzMikpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luLnNpZ25NZXNzYWdlKGtleVBhaXIsIG1lc3NhZ2VUb1NpZ24pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0ludmFsaWQga2V5IHBhaXIgb3B0aW9ucycpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRXhwbGFpbiBUcmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSBoYWxmIHNpZ25lZCBBZGRWYWxpZGF0b3IgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YSA9IEFERFZBTElEQVRPUl9TQU1QTEVTO1xuICAgICAgY29uc3QgdHhFeHBsYWluID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHsgaGFsZlNpZ25lZDogeyB0eEhleDogdGVzdERhdGEuaGFsZnNpZ250eEhleCB9IH0pO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEubWluVmFsaWRhdG9yU3Rha2UpO1xuICAgICAgdHhFeHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5BZGRWYWxpZGF0b3IpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEubm9kZUlEKTtcbiAgICAgIHR4RXhwbGFpbi5jaGFuZ2VPdXRwdXRzWzBdLmFkZHJlc3Muc3BsaXQoJ34nKS5sZW5ndGguc2hvdWxkLmVxdWFsKDMpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdCh0eEV4cGxhaW4ubWVtbyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSBzaWduZWQgQWRkVmFsaWRhdG9yIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdERhdGEgPSBBRERWQUxJREFUT1JfU0FNUExFUztcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4OiB0ZXN0RGF0YS5mdWxsc2lnbnR4SGV4IH0pO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEubWluVmFsaWRhdG9yU3Rha2UpO1xuICAgICAgdHhFeHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5BZGRWYWxpZGF0b3IpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEubm9kZUlEKTtcbiAgICAgIHR4RXhwbGFpbi5jaGFuZ2VPdXRwdXRzWzBdLmFkZHJlc3Muc3BsaXQoJ34nKS5sZW5ndGguc2hvdWxkLmVxdWFsKDMpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdCh0eEV4cGxhaW4ubWVtbyk7XG4gICAgfSk7XG5cbiAgICAvLyBUT0RPKENSLTEwNzMpOiBmaW5kIHVuc2lnZWQsIHNpZ25lZCBhbmQgaGFsZiBzaWduZWQgdHJhbnNhY3Rpb25zIGZvciBBZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIGhhbGYgc2lnbmVkIEFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdERhdGEgPSBBRERWQUxJREFUT1JfU0FNUExFUztcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IGhhbGZTaWduZWQ6IHsgdHhIZXg6IHRlc3REYXRhLmhhbGZzaWdudHhIZXggfSB9KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLm1pblZhbGlkYXRvclN0YWtlKTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQWRkVmFsaWRhdG9yKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLm5vZGVJRCk7XG4gICAgICB0eEV4cGxhaW4uY2hhbmdlT3V0cHV0c1swXS5hZGRyZXNzLnNwbGl0KCd+JykubGVuZ3RoLnNob3VsZC5lcXVhbCgzKTtcbiAgICAgIHNob3VsZC5ub3QuZXhpc3QodHhFeHBsYWluLm1lbW8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgc2lnbmVkIEFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdERhdGEgPSBBRERWQUxJREFUT1JfU0FNUExFUztcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4OiB0ZXN0RGF0YS5mdWxsc2lnbnR4SGV4IH0pO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEubWluVmFsaWRhdG9yU3Rha2UpO1xuICAgICAgdHhFeHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5BZGRWYWxpZGF0b3IpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEubm9kZUlEKTtcbiAgICAgIHR4RXhwbGFpbi5jaGFuZ2VPdXRwdXRzWzBdLmFkZHJlc3Muc3BsaXQoJ34nKS5sZW5ndGguc2hvdWxkLmVxdWFsKDMpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdCh0eEV4cGxhaW4ubWVtbyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSBoYWxmIHNpZ25lZCBleHBvcnQgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YSA9IEVYUE9SVF9QXzJfQztcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IGhhbGZTaWduZWQ6IHsgdHhIZXg6IHRlc3REYXRhLmhhbGZzaWdudHhIZXggfSB9KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmFtb3VudCk7XG4gICAgICB0eEV4cGxhaW4udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkV4cG9ydCk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5wQWRkcmVzc2VzLnNvcnQoKS5qb2luKCd+JykpO1xuICAgICAgdHhFeHBsYWluLmNoYW5nZU91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEucEFkZHJlc3Nlcy5zb3J0KCkuam9pbignficpKTtcbiAgICAgIHNob3VsZC5ub3QuZXhpc3QodHhFeHBsYWluLm1lbW8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgc2lnbmVkIGV4cG9ydCB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRlc3REYXRhID0gRVhQT1JUX1BfMl9DO1xuICAgICAgY29uc3QgdHhFeHBsYWluID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHsgdHhIZXg6IHRlc3REYXRhLmZ1bGxzaWdudHhIZXggfSk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5hbW91bnQpO1xuICAgICAgdHhFeHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5FeHBvcnQpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEucEFkZHJlc3Nlcy5zb3J0KCkuam9pbignficpKTtcbiAgICAgIHR4RXhwbGFpbi5jaGFuZ2VPdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLnBBZGRyZXNzZXMuc29ydCgpLmpvaW4oJ34nKSk7XG4gICAgICBzaG91bGQubm90LmV4aXN0KHR4RXhwbGFpbi5tZW1vKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIGhhbGYgc2lnbmVkIGV4cG9ydCB0cmFuc2FjdGlvbiB3aXRob3V0IGNhaG5nZW91dHB1dCAnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YSA9IEVYUE9SVF9QXzJfQ19XSVRIT1VUX0NIQU5HRU9VVFBVVDtcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICAgIGhhbGZTaWduZWQ6IHsgdHhIZXg6IHRlc3REYXRhLmhhbGZzaWdudHhIZXggfSxcbiAgICAgIH0pO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEuYW1vdW50KTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuRXhwb3J0KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLnBBZGRyZXNzZXMuc29ydCgpLmpvaW4oJ34nKSk7XG4gICAgICB0eEV4cGxhaW4uY2hhbmdlT3V0cHV0cy5zaG91bGQuYmUuZW1wdHkoKTtcbiAgICAgIHNob3VsZC5ub3QuZXhpc3QodHhFeHBsYWluLm1lbW8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgc2lnbmVkIGV4cG9ydCB0cmFuc2FjdGlvbiB3aXRob3V0IGNhaG5nZW91dHB1dCAnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YSA9IEVYUE9SVF9QXzJfQ19XSVRIT1VUX0NIQU5HRU9VVFBVVDtcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4OiB0ZXN0RGF0YS5mdWxsc2lnbnR4SGV4IH0pO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEuYW1vdW50KTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuRXhwb3J0KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLnBBZGRyZXNzZXMuc29ydCgpLmpvaW4oJ34nKSk7XG4gICAgICB0eEV4cGxhaW4uY2hhbmdlT3V0cHV0cy5zaG91bGQuYmUuZW1wdHkoKTtcbiAgICAgIHNob3VsZC5ub3QuZXhpc3QodHhFeHBsYWluLm1lbW8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgaGFsZiBzaWduZWQgaW1wb3J0IHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdERhdGEgPSBJTVBPUlRfUDtcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICAgIGhhbGZTaWduZWQ6IHsgdHhIZXg6IHRlc3REYXRhLmhhbGZzaWdudHhIZXggfSxcbiAgICAgIH0pO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwoKE51bWJlcih0ZXN0RGF0YS5hbW91bnQpIC0gdHhFeHBsYWluLmZlZT8uZmVlKS50b1N0cmluZygpKTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuSW1wb3J0KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLnBBZGRyZXNzZXMuc29ydCgpLmpvaW4oJ34nKSk7XG4gICAgICB0eEV4cGxhaW4uY2hhbmdlT3V0cHV0cy5zaG91bGQuYmUuZW1wdHkoKTtcbiAgICAgIHNob3VsZC5ub3QuZXhpc3QodHhFeHBsYWluLm1lbW8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgc2lnbmVkIGltcG9ydCB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRlc3REYXRhID0gSU1QT1JUX1A7XG4gICAgICBjb25zdCB0eEV4cGxhaW4gPSBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oeyB0eEhleDogdGVzdERhdGEuZnVsbHNpZ250eEhleCB9KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKChOdW1iZXIodGVzdERhdGEuYW1vdW50KSAtIHR4RXhwbGFpbi5mZWU/LmZlZSkudG9TdHJpbmcoKSk7XG4gICAgICB0eEV4cGxhaW4udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkltcG9ydCk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5wQWRkcmVzc2VzLnNvcnQoKS5qb2luKCd+JykpO1xuICAgICAgdHhFeHBsYWluLmNoYW5nZU91dHB1dHMuc2hvdWxkLmJlLmVtcHR5KCk7XG4gICAgICBzaG91bGQubm90LmV4aXN0KHR4RXhwbGFpbi5tZW1vKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIGhhbGYgc2lnbmVkIGltcG9ydCBpbiBDIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdERhdGEgPSBJTVBPUlRfQztcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4OiB0ZXN0RGF0YS5oYWxmc2lnbnR4SGV4IH0pO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwoKE51bWJlcih0ZXN0RGF0YS5hbW91bnQpIC0gdHhFeHBsYWluLmZlZT8uZmVlKS50b1N0cmluZygpKTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuSW1wb3J0KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLnRvKTtcbiAgICAgIHR4RXhwbGFpbi5jaGFuZ2VPdXRwdXRzLnNob3VsZC5iZS5lbXB0eSgpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdCh0eEV4cGxhaW4ubWVtbyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSBzaWduZWQgaW1wb3J0IGluIEMgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YSA9IElNUE9SVF9DO1xuICAgICAgY29uc3QgdHhFeHBsYWluID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHsgdHhIZXg6IHRlc3REYXRhLmZ1bGxzaWdudHhIZXggfSk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCgoTnVtYmVyKHRlc3REYXRhLmFtb3VudCkgLSB0eEV4cGxhaW4uZmVlPy5mZWUpLnRvU3RyaW5nKCkpO1xuICAgICAgdHhFeHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5JbXBvcnQpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEudG8pO1xuICAgICAgdHhFeHBsYWluLmNoYW5nZU91dHB1dHMuc2hvdWxkLmJlLmVtcHR5KCk7XG4gICAgICBzaG91bGQubm90LmV4aXN0KHR4RXhwbGFpbi5tZW1vKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIHVuc2lnbmVkIGV4cG9ydCBpbiBDIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdERhdGEgPSBFWFBPUlRfQztcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4OiB0ZXN0RGF0YS51bnNpZ25lZFR4SGV4IH0pO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwoTnVtYmVyKHRlc3REYXRhLmFtb3VudCkudG9TdHJpbmcoKSk7XG4gICAgICB0eEV4cGxhaW4udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkV4cG9ydCk7XG4gICAgICB0eEV4cGxhaW4uaW5wdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLmNIZXhBZGRyZXNzKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLnBBZGRyZXNzZXMuc2xpY2UoKS5zb3J0KCkuam9pbignficpKTtcbiAgICAgIHR4RXhwbGFpbi5mZWUuZmVlUmF0ZS5zaG91bGQuZXF1YWwoTnVtYmVyKHRlc3REYXRhLmZlZSkpO1xuICAgICAgdHhFeHBsYWluLmNoYW5nZU91dHB1dHMuc2hvdWxkLmJlLmVtcHR5KCk7XG4gICAgICBzaG91bGQubm90LmV4aXN0KHR4RXhwbGFpbi5tZW1vKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIHNpZ25lZCBleHBvcnQgaW4gQyB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRlc3REYXRhID0gRVhQT1JUX0M7XG4gICAgICBjb25zdCB0eEV4cGxhaW4gPSBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oeyB0eEhleDogdGVzdERhdGEuZnVsbHNpZ250eEhleCB9KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKE51bWJlcih0ZXN0RGF0YS5hbW91bnQpLnRvU3RyaW5nKCkpO1xuICAgICAgdHhFeHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5FeHBvcnQpO1xuICAgICAgdHhFeHBsYWluLmlucHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5jSGV4QWRkcmVzcyk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5wQWRkcmVzc2VzLnNsaWNlKCkuc29ydCgpLmpvaW4oJ34nKSk7XG4gICAgICB0eEV4cGxhaW4uZmVlLmZlZVJhdGUuc2hvdWxkLmVxdWFsKE51bWJlcih0ZXN0RGF0YS5mZWUpKTtcbiAgICAgIHR4RXhwbGFpbi5jaGFuZ2VPdXRwdXRzLnNob3VsZC5iZS5lbXB0eSgpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdCh0eEV4cGxhaW4ubWVtbyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgd2hlbiBhIHR4IGlzIG5vdCBwYXNzZWQgYXMgcGFyYW1ldGVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHt9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdtaXNzaW5nIHRyYW5zYWN0aW9uIGhleCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVmVyaWZ5IHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgUCA+IEMgaW1wb3J0IHRyYW5zYWN0aW9uIHdpdGhvdXQgcmVjaXBpZW50cycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiBJTVBPUlRfQy5mdWxsc2lnbnR4SGV4LFxuICAgICAgICB0eEluZm86IHt9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXSxcbiAgICAgICAgdHlwZTogJ0ltcG9ydCcsXG4gICAgICAgIGxvY2t0aW1lOiAwLFxuICAgICAgfTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGUubWVzc2FnZS5zaG91bGQuZXF1YWwoJ0V4cGVjdGVkIDEgcmVjaXBpZW50IGluIGltcG9ydCB0cmFuc2FjdGlvbicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSBzaWduZWQgYWRkIHZhbGlkYXRvciB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiB0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5mdWxsc2lnbnR4SGV4LFxuICAgICAgICB0eEluZm86IHt9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25WZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSk7XG4gICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSBoYWxmIHNpZ25lZCBhZGQgdmFsaWRhdG9yIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgdHhIZXg6IHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLmhhbGZzaWdudHhIZXgsXG4gICAgICAgIHR4SW5mbzoge30sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSBuZXdUeFBhcmFtcygpO1xuICAgICAgY29uc3QgaXNUcmFuc2FjdGlvblZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCB9KTtcbiAgICAgIGlzVHJhbnNhY3Rpb25WZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IHVuc2lnbmVkIGFkZCB2YWxpZGF0b3IgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSBuZXdUeFBhcmFtcygpO1xuICAgICAgY29uc3QgaXNUcmFuc2FjdGlvblZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCB9KTtcbiAgICAgIGlzVHJhbnNhY3Rpb25WZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUT0RPKENSLTEwNzMpOiBmaW5kIHVuc2lnZWQsIHNpZ25lZCBhbmQgaGFsZiBzaWduZWQgdHJhbnNhY3Rpb25zIGZvciBBZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgc2lnbmVkIGFkZCBwZXJtaXNzaW9ubGVzcyB2YWxpZGF0b3IgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICB0eEhleDogdGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMuZnVsbHNpZ250eEhleCxcbiAgICAgICAgdHhJbmZvOiB7fSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IG5ld1R4UGFyYW1zKCk7XG4gICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkIH0pO1xuICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgaGFsZiBzaWduZWQgYWRkIHBlcm1pc3Npb25sZXNzIHZhbGlkYXRvciB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiB0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5oYWxmc2lnbnR4SGV4LFxuICAgICAgICB0eEluZm86IHt9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25WZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSk7XG4gICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSB1bnNpZ25lZCBhZGQgcGVybWlzc2lvbmxlc3MgdmFsaWRhdG9yIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25WZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSk7XG4gICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSBhZGQgdmFsaWRhdG9yIHRyYW5zYWN0aW9ucyB3aGVuIHJlY2lwaWVudHMgaGFzIGV4dHJhIGRhdGEgJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIHR4UGFyYW1zLmRhdGEgPSAnZGF0YSc7XG5cbiAgICAgIGNvbnN0IHZhbGlkVHJhbnNhY3Rpb24gPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkIH0pO1xuICAgICAgdmFsaWRUcmFuc2FjdGlvbi5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IGltcG9ydCBpbiBDIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgdHhIZXg6IElNUE9SVF9DLmZ1bGxzaWdudHhIZXgsXG4gICAgICAgIHR4SW5mbzoge30sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiBFWFBPUlRfUF8yX0NfVkVSSUZZLnJlY2VpdmVBZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiAnMScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0ltcG9ydCcsXG4gICAgICAgIGxvY2t0aW1lOiAwLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25WZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSk7XG4gICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSBpbXBvcnQgdG8gUCB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiBJTVBPUlRfUC5mdWxsc2lnbnR4SGV4LFxuICAgICAgICB0eEluZm86IHt9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXSxcbiAgICAgICAgdHlwZTogJ0ltcG9ydCcsXG4gICAgICAgIGxvY2t0aW1lOiAwLFxuICAgICAgICB1bnNwZW50czogWydlOGl4S25iYTUyeXVmWHJUVktyVFhWUVRqNWNkNWU2bzZMYzNyVmtoYWhER0VzNzJMOjAnXSxcbiAgICAgIH07XG4gICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkIH0pO1xuICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgaW1wb3J0IHRvIFAgdHJhbnNhY3Rpb24gd2l0aCB3cm9uZyB1bnNwZW50cycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiBJTVBPUlRfUC5mdWxsc2lnbnR4SGV4LFxuICAgICAgICB0eEluZm86IHt9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXSxcbiAgICAgICAgdHlwZTogJ0ltcG9ydCcsXG4gICAgICAgIGxvY2t0aW1lOiAwLFxuICAgICAgICB1bnNwZW50czogWyd0ZXN0OjEnXSxcbiAgICAgIH07XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UGFyYW1zLFxuICAgICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgICdUcmFuc2FjdGlvbiBzaG91bGQgbm90IGNvbnRhaW4gdGhlIFVUWE86IGU4aXhLbmJhNTJ5dWZYclRWS3JUWFZRVGo1Y2Q1ZTZvNkxjM3JWa2hhaERHRXM3Mkw6MCdcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgZXhwb3J0IHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgdHhIZXg6IEVYUE9SVF9QXzJfQ19WRVJJRlkudHhIZXgsXG4gICAgICAgIHR4SW5mbzoge30sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnJyxcbiAgICAgICAgICAgIGFtb3VudDogRVhQT1JUX1BfMl9DX1ZFUklGWS5hbW91bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0V4cG9ydCcsXG4gICAgICAgIGxvY2t0aW1lOiAwLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgaXNUcmFuc2FjdGlvblZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCB9KTtcbiAgICAgIGlzVHJhbnNhY3Rpb25WZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdmVyaWZ5IGV4cG9ydCB0cmFuc2FjdGlvbiB3aXRoIHdyb25nIGFtb3VudCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiBFWFBPUlRfUF8yX0NfVkVSSUZZLnR4SGV4LFxuICAgICAgICB0eEluZm86IHt9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogRVhQT1JUX1BfMl9DX1ZFUklGWS5yZWNlaXZlQWRkcmVzcyxcbiAgICAgICAgICAgIGFtb3VudDogJzk5OTk5OTknLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdFeHBvcnQnLFxuICAgICAgICBsb2NrdGltZTogMCxcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgIGBUeCB0b3RhbCBhbW91bnQgJHtFWFBPUlRfUF8yX0NfVkVSSUZZLmFtb3VudH0gZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0b3RhbCBhbW91bnQgZmllbGQgOTk5OTk5OSBhbmQgbWF4IGltcG9ydCBmZWUgMTAwMDAwMDBgXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdmVyaWZ5IHRyYW5zYWN0aW9ucyB3aGVuIGhhdmUgZGlmZmVyZW50IHR5cGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IG5ld1R4UGFyYW1zKCk7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuICAgICAgdHhQYXJhbXMudHlwZSA9ICdhZGREZWxlZ2F0b3InO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnVHggdHlwZSBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zIHR5cGUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB2ZXJpZnkgdHJhbnNhY3Rpb25zIHdoZW4gaGF2ZSBkaWZmZXJlbnQgbm9kZUlkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSBuZXdUeFBhcmFtcygpO1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIHR4UGFyYW1zLnN0YWtpbmdPcHRpb25zLm5vZGVJRCA9ICdOb2RlSUQtTWR0ZVM5VTk4N1BZN2l3QTVQY3ozc0tWcHJKQWJBdkU3JztcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXMsXG4gICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ1R4IG91dHB1dHMgZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcycpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgZmFpbCB2ZXJpZnkgd2hlbiBpbnB1dCBgbm9kZUlkYCBpcyBhYnNlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSBuZXdUeFBhcmFtcygpO1xuICAgICAgdHhQYXJhbXMuc3Rha2luZ09wdGlvbnMubm9kZUlEID0gdW5kZWZpbmVkO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnVHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdmVyaWZ5IHRyYW5zYWN0aW9ucyB3aGVuIGhhdmUgZGlmZmVyZW50IGFtb3VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBuZXdUeFByZWJ1aWxkKCk7XG4gICAgICB0eFBhcmFtcy5zdGFraW5nT3B0aW9ucy5hbW91bnQgPSAnMjAwMDAwMDAwMCc7XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UGFyYW1zLFxuICAgICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdUeCBvdXRwdXRzIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdHhQYXJhbXMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB2ZXJpZnkgdHJhbnNhY3Rpb25zIHdoZW4gYW1vdW50IGlzIG51bWJlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBuZXdUeFByZWJ1aWxkKCk7XG4gICAgICB0eFBhcmFtcy5zdGFraW5nT3B0aW9ucy5hbW91bnQgPSAxMDAwMDAwMDAwO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnVHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdmVyaWZ5IHRyYW5zYWN0aW9ucyB3aGVuIGFtb3VudCBpcyBhYnNlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IG5ld1R4UGFyYW1zKCk7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuICAgICAgdHhQYXJhbXMuc3Rha2luZ09wdGlvbnMuYW1vdW50ID0gdW5kZWZpbmVkO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnVHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdWYWxpZGF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbGlkQWRkcmVzcyA9ICdQLWZ1amkxNWphbXd1a2Zxa3doZTh6MjZ0anF4ZWp0amQzams5dmo0a214d2EnO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3ModmFsaWRBZGRyZXNzKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZhbGlkYXRlIGludmFsaWQgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGludmFsaWRBZGRyZXNzZXMgPSBbdW5kZWZpbmVkLCAnJywgJ2FzZGFkc2FhZicsICcxNXgzejRydms4ZTd2d2E2Zzlsa3lnODl2NWR3a25wNDQ4NTh1ZXgnXTtcbiAgICAgIGZvciAoY29uc3QgYWRkcmVzcyBvZiBpbnZhbGlkQWRkcmVzc2VzKSB7XG4gICAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhbiBhcnJheSBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsaWRBZGRyZXNzZXMgPSBbXG4gICAgICAgICdQLWZ1amkxNXgzejRydms4ZTd2d2E2Zzlsa3lnODl2NWR3a25wNDQ4NTh1ZXgnLFxuICAgICAgICAnUC1hdmF4MTQzcThsc3kzeTRrZTlkNnplbHRyZTh1MmF0ZWVkNnVrOWthMG51JyxcbiAgICAgICAgJ05vZGVJRC0xNDNxOGxzeTN5NGtlOWQ2emVsdHJlOHUyYXRlZWQ2dWs5a2EwbnUnLFxuICAgICAgXTtcblxuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3ModmFsaWRBZGRyZXNzZXMpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmFsaWRhdGUgYW4gYXJyYXkgYWRkcmVzcyB3aXRoIGludmFsaWQgYWRkcmVzc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWxpZEFkZHJlc3NlcyA9IFtcbiAgICAgICAgJ1AtZnVqaTE1eDN6NHJ2azhlN3Z3YTZnOWxreWc4OXY1ZHdrbnA0NDg1OHVleCcsXG4gICAgICAgICdQLWF2YXgxNDNxOGxzeTN5NGtlOWQ2emVsdHJlOHUyYXRlZWQ2dWs5a2EwbnUnLFxuICAgICAgICAnaW52YWxpZC1hZGRyZXNzJyxcbiAgICAgIF07XG5cbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKHZhbGlkQWRkcmVzc2VzKS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYSBtdWx0c2lnIGFkZHJlc3Mgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbXVsdGlTaWdWYWxpZEFkZHJlc3MgPVxuICAgICAgICAnUC1mdWppMXl6cGZzZGFsaGZ3a3EyY2Vld2dzOXd2N2swdWZ0NDB5ZHB1ajU5flAtZnVqaTEwM2NtbnRzc3A2cW51Y2VqYWhkZHk0MndjeTRxdHkwdWo0MjgyMn5QLWZ1amkxaGRrN250dzBodWhxbWxobGhlbWU5dDdzY3N5OWxoZmh3M3l3eTQnO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MobXVsdGlTaWdWYWxpZEFkZHJlc3MpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmFsaWRhdGUgYSBtdWx0c2lnIGFkZHJlc3Mgc3RyaW5nIHdpdGggaW52YWxpZCBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbXVsdGlTaWdWYWxpZEFkZHJlc3MgPVxuICAgICAgICAnUC1mdWppMXl6cGZzZGFsaGZ3a3EyY2Vld2dzOXd2N2swdWZ0NDB5ZHB1ajU5fmludmFsaWQtYWRkcmVzc35QLWZ1amkxaGRrN250dzBodWhxbWxobGhlbWU5dDdzY3N5OWxoZmh3M3l3eTQnO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MobXVsdGlTaWdWYWxpZEFkZHJlc3MpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSB2YWxpZCBjLWNoYWluIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICBjb25zdCBhZGRyZXNzID0gJzB4MTM3NGEyMDQ2NjYxZjkxNGQxNjg3ZDg1ZGJiY2ViOWFjNzkxMGEyOSc7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHZlcmlmeWluZyBhZGRyZXNzIGlmIGFkZHJlc3MgbGVuZ3RoIGRvZXNudCBtYXRjaCBrZXljaGFpbiBsZW5ndGgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWxpZEFkZHJlc3NlcyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdQLWZ1amkxNXgzejRydms4ZTd2d2E2Zzlsa3lnODl2NWR3a25wNDQ4NTh1ZXgnLFxuICAgICAgICAgIGtleWNoYWlucyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdQLWZ1amkxd3EwZDU2cHU1NHNnYzV4cGV2bTN1cjZzZjNsNmtrZTcwZHowbDQnLFxuICAgICAgICAgIGtleWNoYWlucyxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGZvciAoY29uc3QgYWRkcmVzc1BhcmFtcyBvZiB2YWxpZEFkZHJlc3Nlcykge1xuICAgICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhhc3luYyAoKSA9PiBiYXNlY29pbi52ZXJpZnlBZGRyZXNzKGFkZHJlc3NQYXJhbXMpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgaW52YWxpZCBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaW52YWxpZEFkZHJlc3NlcyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdQLWZ1amkxMDNjbW50c3NwNnFudWNlamFoZGR5NDJ3Y3k0cXR5MHVqNDI4MjInLFxuICAgICAgICAgIGtleWNoYWlucyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdQLWF2YXgxNDNxOGxzeTN5NGtlOWQ2emVsdHJlOHUyYXRlZWQ2dWs5a2EwbnUnLFxuICAgICAgICAgIGtleWNoYWlucyxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGZvciAoY29uc3QgYWRkcmVzcyBvZiBpbnZhbGlkQWRkcmVzc2VzKSB7XG4gICAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKGFzeW5jICgpID0+IGJhc2Vjb2luLnZlcmlmeUFkZHJlc3MoYWRkcmVzcykpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgdmVyaWZ5IGlzIHdhbGxldCBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgKFxuICAgICAgICBhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3Moe1xuICAgICAgICAgIGFkZHJlc3M6XG4gICAgICAgICAgICAnUC1mdWppMTV4M3o0cnZrOGU3dndhNmc5bGt5Zzg5djVkd2tucDQ0ODU4dWV4flAtZnVqaTF3cTBkNTZwdTU0c2djNXhwZXZtM3VyNnNmM2w2a2tlNzBkejBsNH5QLWZ1amkxY2prNGN2ZGZ5NmZmZDRmaDh1bXBubnJtanQweGRhcDAydGNlcDYnLFxuICAgICAgICAgIGtleWNoYWlucyxcbiAgICAgICAgfSlcbiAgICAgICkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBhZGRyZXNzIGxlbmd0aCBhbmQga2V5Y2hhaW4gbGVuZ3RoIGRvbnQgbWF0Y2gnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhhc3luYyAoKSA9PlxuICAgICAgICBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3Moe1xuICAgICAgICAgIGFkZHJlc3M6ICdQLWZ1amkxd3EwZDU2cHU1NHNnYzV4cGV2bTN1cjZzZjNsNmtrZTcwZHowbDR+UC1mdWppMWNqazRjdmRmeTZmZmQ0Zmg4dW1wbm5ybWp0MHhkYXAwMnRjZXA2JyxcbiAgICAgICAgICBrZXljaGFpbnMsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGtleWNoYWluIGlzIG5vdCBvZiBsZW5ndGggMycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKGFzeW5jICgpID0+XG4gICAgICAgIGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgICAgYWRkcmVzczogJ1AtZnVqaTF3cTBkNTZwdTU0c2djNXhwZXZtM3VyNnNmM2w2a2tlNzBkejBsNCcsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnNbMF0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|