@bitgo/sdk-coin-stx 4.0.8 → 4.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/lib/index.d.ts +2 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +3 -1
- package/dist/src/lib/sbtcWithdrawBuilder.d.ts +11 -0
- package/dist/src/lib/sbtcWithdrawBuilder.d.ts.map +1 -1
- package/dist/src/lib/sbtcWithdrawBuilder.js +27 -1
- package/dist/src/stx.d.ts +8 -0
- package/dist/src/stx.d.ts.map +1 -1
- package/dist/src/stx.js +36 -1
- package/dist/test/unit/stx.js +78 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
package/dist/test/unit/stx.js
CHANGED
|
@@ -44,6 +44,7 @@ const sdk_test_1 = require("@bitgo/sdk-test");
|
|
|
44
44
|
const statics_1 = require("@bitgo/statics");
|
|
45
45
|
const transactions_1 = require("@stacks/transactions");
|
|
46
46
|
const testData = __importStar(require("../fixtures"));
|
|
47
|
+
const resources = __importStar(require("./resources"));
|
|
47
48
|
const src_1 = require("../../src");
|
|
48
49
|
const { KeyPair } = src_1.StxLib;
|
|
49
50
|
describe('STX:', function () {
|
|
@@ -415,6 +416,82 @@ describe('STX:', function () {
|
|
|
415
416
|
.should.be.rejectedWith('Tx memo does not match with expected txParams recipient memo');
|
|
416
417
|
});
|
|
417
418
|
});
|
|
419
|
+
describe('Verify sBTC Withdraw Transaction', function () {
|
|
420
|
+
const factory = new src_1.StxLib.TransactionBuilderFactory(statics_1.coins.get('tstx'));
|
|
421
|
+
const prvKeysString = resources.prvKeysString.slice(0, 2);
|
|
422
|
+
const buildWithdrawTx = async (withdrawParams) => {
|
|
423
|
+
const builder = factory.getSbtcWithdrawBuilder();
|
|
424
|
+
builder.fee({ fee: '1000' });
|
|
425
|
+
builder.nonce(1);
|
|
426
|
+
const pubKeys = prvKeysString.map((prv) => (0, transactions_1.publicKeyToString)((0, transactions_1.pubKeyfromPrivKey)(prv)));
|
|
427
|
+
builder.fromPubKey(pubKeys);
|
|
428
|
+
builder.numberSignatures(2);
|
|
429
|
+
builder.withdraw(withdrawParams);
|
|
430
|
+
builder.sign({ key: prvKeysString[0] });
|
|
431
|
+
builder.sign({ key: prvKeysString[1] });
|
|
432
|
+
const tx = await builder.build();
|
|
433
|
+
return tx.toBroadcastFormat();
|
|
434
|
+
};
|
|
435
|
+
it('should succeed to verify a matching sBTC withdrawal', async function () {
|
|
436
|
+
const withdrawParams = {
|
|
437
|
+
amount: '1000',
|
|
438
|
+
btcAddress: 'bc1prxl88w47srqh703pxv567q47e7epzume4nlz8cgewfhtuenn8ngqgwm80w',
|
|
439
|
+
maxFee: '10000',
|
|
440
|
+
};
|
|
441
|
+
const txHex = await buildWithdrawTx(withdrawParams);
|
|
442
|
+
const txParams = {
|
|
443
|
+
sbtcWithdrawParams: withdrawParams,
|
|
444
|
+
recipients: [{ address: 'SM1K9VF5GN48Q0AC2C7SB8WM5N5NR6DYC9VM3QEJE', amount: '10' }],
|
|
445
|
+
};
|
|
446
|
+
const result = await basecoin.verifyTransaction({ txPrebuild: { txHex }, txParams });
|
|
447
|
+
result.should.equal(true);
|
|
448
|
+
});
|
|
449
|
+
it('should fail to verify with wrong amount', async function () {
|
|
450
|
+
const withdrawParams = {
|
|
451
|
+
amount: '1000',
|
|
452
|
+
btcAddress: 'bc1prxl88w47srqh703pxv567q47e7epzume4nlz8cgewfhtuenn8ngqgwm80w',
|
|
453
|
+
maxFee: '10000',
|
|
454
|
+
};
|
|
455
|
+
const txHex = await buildWithdrawTx(withdrawParams);
|
|
456
|
+
const txParams = {
|
|
457
|
+
sbtcWithdrawParams: { ...withdrawParams, amount: '9999' },
|
|
458
|
+
recipients: [{ address: 'SM1K9VF5GN48Q0AC2C7SB8WM5N5NR6DYC9VM3QEJE', amount: '10' }],
|
|
459
|
+
};
|
|
460
|
+
await basecoin
|
|
461
|
+
.verifyTransaction({ txPrebuild: { txHex }, txParams })
|
|
462
|
+
.should.be.rejectedWith(/sBTC withdrawal amount does not match/);
|
|
463
|
+
});
|
|
464
|
+
it('should fail to verify with wrong maxFee', async function () {
|
|
465
|
+
const withdrawParams = {
|
|
466
|
+
amount: '1000',
|
|
467
|
+
btcAddress: 'bc1prxl88w47srqh703pxv567q47e7epzume4nlz8cgewfhtuenn8ngqgwm80w',
|
|
468
|
+
maxFee: '10000',
|
|
469
|
+
};
|
|
470
|
+
const txHex = await buildWithdrawTx(withdrawParams);
|
|
471
|
+
const txParams = {
|
|
472
|
+
sbtcWithdrawParams: { ...withdrawParams, maxFee: '1' },
|
|
473
|
+
recipients: [{ address: 'SM1K9VF5GN48Q0AC2C7SB8WM5N5NR6DYC9VM3QEJE', amount: '10' }],
|
|
474
|
+
};
|
|
475
|
+
await basecoin
|
|
476
|
+
.verifyTransaction({ txPrebuild: { txHex }, txParams })
|
|
477
|
+
.should.be.rejectedWith(/sBTC withdrawal maxFee does not match/);
|
|
478
|
+
});
|
|
479
|
+
it('should fail to verify with wrong btcAddress', async function () {
|
|
480
|
+
const withdrawParams = {
|
|
481
|
+
amount: '1000',
|
|
482
|
+
btcAddress: 'bc1prxl88w47srqh703pxv567q47e7epzume4nlz8cgewfhtuenn8ngqgwm80w',
|
|
483
|
+
maxFee: '10000',
|
|
484
|
+
};
|
|
485
|
+
const txHex = await buildWithdrawTx(withdrawParams);
|
|
486
|
+
const txParams = {
|
|
487
|
+
sbtcWithdrawParams: { ...withdrawParams, btcAddress: '1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2' },
|
|
488
|
+
recipients: [{ address: 'SM1K9VF5GN48Q0AC2C7SB8WM5N5NR6DYC9VM3QEJE', amount: '10' }],
|
|
489
|
+
};
|
|
490
|
+
await basecoin
|
|
491
|
+
.verifyTransaction({ txPrebuild: { txHex }, txParams })
|
|
492
|
+
.should.be.rejectedWith(/sBTC withdrawal btcAddress does not match/);
|
|
493
|
+
});
|
|
494
|
+
});
|
|
418
495
|
describe('Recover Transaction STX', function () {
|
|
419
496
|
before(function () {
|
|
420
497
|
nock_1.default.enableNetConnect();
|
|
@@ -544,4 +621,4 @@ describe('STX:', function () {
|
|
|
544
621
|
});
|
|
545
622
|
});
|
|
546
623
|
});
|
|
547
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L3N0eC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixnREFBd0I7QUFFeEIsNENBQTBDO0FBQzFDLDhDQUF5QztBQUN6Qyw4Q0FBMEQ7QUFDMUQsNENBQXVDO0FBQ3ZDLHVEQUFrRDtBQUVsRCxzREFBd0M7QUFDeEMsbUNBQThDO0FBRzlDLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxZQUFNLENBQUM7QUFFM0IsUUFBUSxDQUFDLE1BQU0sRUFBRTtJQUNmLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQztJQUN2QixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUM7SUFDNUIsSUFBSSxLQUFtQixDQUFDO0lBQ3hCLElBQUksUUFBUSxDQUFDO0lBRWIsTUFBTSxpQkFBaUIsR0FBRztRQUN4QixFQUFFO1FBQ0YsSUFBSTtRQUNKLEtBQUs7UUFDTCwwQ0FBMEM7UUFDMUMsMkNBQTJDO0tBQzVDLENBQUM7SUFFRixNQUFNLGFBQWEsR0FBRztRQUNwQiwwQ0FBMEM7UUFDMUMsMkNBQTJDO1FBQzNDLDJDQUEyQztRQUMzQywyQ0FBMkM7UUFDM0Msb0RBQW9EO1FBQ3BELG9EQUFvRDtLQUNyRCxDQUFDO0lBRUYsTUFBTSxDQUFDO1FBQ0wsS0FBSyxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFRLEVBQUU7WUFDbkMsR0FBRyxFQUFFLE1BQU07U0FDWixDQUFDLENBQUM7UUFDSCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMzQixLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxTQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDOUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsVUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2hELFFBQVEsR0FBRyxL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LHNCQUFzQixDQUFDLENBQUM7WUFDL0MsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLHNCQUFzQixDQUFDO1lBQ3ZELGNBQWMsQ0FBQyxtQkFBbUI7Z0JBQ2hDLG9JQUFvSSxDQUFDO1lBQ3ZJLElBQUEsY0FBSSxFQUFDLDZCQUE2QixFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDO2lCQUN6RCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsY0FBYyxDQUFDO2lCQUM1QyxLQUFLLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBQ2hELE1BQU0sZUFBZSxHQUFvQjtnQkFDdkMsU0FBUyxFQUFFLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVO2dCQUN2RCxPQUFPLEVBQUUsUUFBUSxDQUFDLHdCQUF3QixDQUFDLFFBQVE7Z0JBQ25ELFdBQVcsRUFBRSxXQUFXO2dCQUN4QixtQkFBbUIsRUFBRSxRQUFRLENBQUMsdUJBQXVCO2dCQUNyRCxRQUFRLEVBQUUsUUFBUSxDQUFDLHdCQUF3QixDQUFDLGFBQWE7Z0JBQ3pELGdCQUFnQixFQUFFLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxpQkFBaUI7YUFDdEUsQ0FBQztZQUNGLE1BQU0sUUFBUSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLCtDQUErQyxDQUFDLENBQUM7UUFDL0csQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IG5vY2sgZnJvbSAnbm9jayc7XG5cbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuaW1wb3J0IHsgV2FsbGV0IH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFRlc3RCaXRHbywgVGVzdEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgY3ZUb1N0cmluZyB9IGZyb20gJ0BzdGFja3MvdHJhbnNhY3Rpb25zJztcblxuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vZml4dHVyZXMnO1xuaW1wb3J0IHsgU3R4LCBTdHhMaWIsIFRzdHggfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0IHsgUmVjb3ZlcnlJbmZvLCBSZWNvdmVyeU9wdGlvbnMsIFJlY292ZXJ5VHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi9zcmMvbGliL2lmYWNlJztcblxuY29uc3QgeyBLZXlQYWlyIH0gPSBTdHhMaWI7XG5cbmRlc2NyaWJlKCdTVFg6JywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBjb2luTmFtZSA9ICdzdHgnO1xuICBjb25zdCBjb2luTmFtZVRlc3QgPSAndHN0eCc7XG4gIGxldCBiaXRnbzogVGVzdEJpdEdvQVBJO1xuICBsZXQgYmFzZWNvaW47XG5cbiAgY29uc3QgYmFkVmFsaWRBZGRyZXNzZXMgPSBbXG4gICAgJycsXG4gICAgbnVsbCxcbiAgICAnYWJjJyxcbiAgICAnU1AyNDRIWVBZQVQyQkIyUUU1MTNOU1A4MUhUTVlXQkpQMDJIUEdLNicsXG4gICAgJ1NUMVQ3NThLNlQyWVJLRzlRMFRKMTZCNkZQNVFRUkVXWlNFU1JTMFBZJyxcbiAgXTtcblxuICBjb25zdCBnb29kQWRkcmVzc2VzID0gW1xuICAgICdTVEI0NEhZUFlBVDJCQjJRRTUxM05TUDgxSFRNWVdCSlAwMkhQR0s2JyxcbiAgICAnU1QxMU5KVFRLR1ZUNkQxSFk0TkpSVlFXTVFNN1RWQVIwOTFFSjhQMlknLFxuICAgICdTUDJUNzU4SzZUMllSS0c5UTBUSjE2QjZGUDVRUVJFV1pTRVNSUzBQWScsXG4gICAgJ1NNM1c1UUZXR1BHMUpDOFIyNUVWWkRFUDNCRVNKWjgzMUpQTk5RRlRaJyxcbiAgICAnU00zVzVRRldHUEcxSkM4UjI1RVZaREVQM0JFU0paODMxSlBOTlFGVFo/bWVtb0lkPTEnLFxuICAgICdTVDFXVkpNUzVWUzQxRjBZTUg3RDJNMFZIWFJHNENZNDNaSlpCUzYwQT9tZW1vSWQ9NCcsXG4gIF07XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwge1xuICAgICAgZW52OiAnbW9jaycsXG4gICAgfSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCdzdHgnLCBTdHguY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndHN0eCcsIFRzdHguY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJhc2Vjb2luID0gYml0Z28uY29pbihjb2luTmFtZVRlc3QpO1xuICB9KTtcblxuICAvKipcbiAgICogQnVpbGQgYW4gdW5zaWduZWQgYWNjb3VudC1saWIgc2lnbmxlLXNpZ25hdHVyZSBzZW5kIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBkZXN0aW5hdGlvbiBUaGUgZGVzdGluYXRpb24gYWRkcmVzcyBvZiB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIGFtb3VudCBUaGUgYW1vdW50IHRvIHNlbmQgdG8gdGhlIHJlY2lwaWVudFxuICAgKi9cbiAgY29uc3QgYnVpbGRVbnNpZ25lZFRyYW5zYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gKHsgZGVzdGluYXRpb24sIGFtb3VudCA9ICcxMDAwMDAnLCBwdWJsaWNLZXksIG1lbW8gPSAnJyB9KSB7XG4gICAgY29uc3QgZmFjdG9yeSA9IG5ldyBTdHhMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoY29pbk5hbWUpKTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5mZWUoe1xuICAgICAgZmVlOiAnMTgwJyxcbiAgICB9KTtcbiAgICB0eEJ1aWxkZXIudG8oZGVzdGluYXRpb24pO1xuICAgIHR4QnVpbGRlci5hbW91bnQoYW1vdW50KTtcbiAgICB0eEJ1aWxkZXIubm9uY2UoMSk7XG4gICAgdHhCdWlsZGVyLmZyb21QdWJLZXkocHVibGljS2V5KTtcbiAgICB0eEJ1aWxkZXIubWVtbyhtZW1vKTtcbiAgICB0eEJ1aWxkZXIubnVtYmVyU2lnbmF0dXJlcygxKTtcbiAgICByZXR1cm4gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFuIHVuc2lnbmVkIGFjY291bnQtbGliIG11bHRpLXNpZ25hdHVyZSBzZW5kIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBkZXN0aW5hdGlvbiBUaGUgZGVzdGluYXRpb24gYWRkcmVzcyBvZiB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIGFtb3VudCBUaGUgYW1vdW50IHRvIHNlbmQgdG8gdGhlIHJlY2lwaWVudFxuICAgKi9cbiAgY29uc3QgYnVpbGRtdWx0aVNpZ1Vuc2lnbmVkVHJhbnNhY3Rpb24gPSBhc3luYyBmdW5jdGlvbiAoeyBkZXN0aW5hdGlvbiwgYW1vdW50ID0gJzEwMDAwMCcsIHB1YmxpY0tleXMsIG1lbW8gPSAnJyB9KSB7XG4gICAgY29uc3QgZmFjdG9yeSA9IG5ldyBTdHhMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoY29pbk5hbWUpKTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5mZWUoe1xuICAgICAgZmVlOiAnMTgwJyxcbiAgICB9KTtcbiAgICB0eEJ1aWxkZXIudG8oZGVzdGluYXRpb24pO1xuICAgIHR4QnVpbGRlci5hbW91bnQoYW1vdW50KTtcbiAgICB0eEJ1aWxkZXIubm9uY2UoMSk7XG4gICAgdHhCdWlsZGVyLmZyb21QdWJLZXkocHVibGljS2V5cyk7XG4gICAgdHhCdWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMik7XG4gICAgdHhCdWlsZGVyLm1lbW8obWVtbyk7XG4gICAgcmV0dXJuIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICB9O1xuXG4gIGl0KCdzaG91bGQgaW5zdGFudGlhdGUgdGhlIGNvaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGxvY2FsQmFzZWNvaW4gPSBiaXRnby5jb2luKCd0c3R4Jyk7XG4gICAgbG9jYWxCYXNlY29pbi5zaG91bGQuYmUuYW4uaW5zdGFuY2VvZihUc3R4KTtcblxuICAgIGxvY2FsQmFzZWNvaW4gPSBiaXRnby5jb2luKCdzdHgnKTtcbiAgICBsb2NhbEJhc2Vjb2luLnNob3VsZC5iZS5hbi5pbnN0YW5jZW9mKFN0eCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY2hlY2sgdmFsaWQgYWRkcmVzc2VzJywgZnVuY3Rpb24gKCkge1xuICAgIGJhZFZhbGlkQWRkcmVzc2VzLm1hcCgoYWRkcikgPT4ge1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoYWRkcikuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcbiAgICBnb29kQWRkcmVzc2VzLm1hcCgoYWRkcikgPT4ge1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoYWRkcikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHZlcmlmeSBpc1dhbGxldEFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdXNlcktleSA9IHtcbiAgICAgIHB1YjogJ3hwdWI2NjFNeU13QXFSYmNHUzJITWR2QU5ON284RVNXcXd2cjVVNHJ5NWZaZEQ5VkhoeW1XeWZvRFFGNHZ6ZktvdFhnR3RKVHJ3ckZSejdYYkdGb3Y0RnFkS0tvNm1SWU5Xdk1wN1AyM0RqdUpuUycsXG4gICAgfTtcbiAgICBjb25zdCBiYWNrdXBLZXkgPSB7XG4gICAgICBwdWI6ICd4cHViNjYxTXlNd0FxUmJjRkV6cjVDY3BGelBHNDVybVBmNzVEVHZEb2JONWdKaW1DYXRiSHR6UjUzU2JIekRaMUo1NmJ5S1NzZGM4dlN1akd1UXB5UGpiN0xzdWEyTmZBREpld1B4TnpMM042VGonLFxuICAgIH07XG4gICAgY29uc3QgYml0Z29LZXkgPSB7XG4gICAgICBwdWI6ICd4cHViNjYxTXlNd0FxUmJjR1AxYWRrMzRWelJRSkVNWDI1ckN4akV5VTlZRkZXTmhXTnp3UG9xZ2pMb0tmbnFvdEx3cno3a0JldldiUlpucVRTUXJRRHVKdVlVUWFEUTVERFBFekVYTXdQUzlQRWYnLFxuICAgIH07XG4gICAgY29uc3Qga2V5Y2hhaW5zID0gW3VzZXJLZXksIGJhY2t1cEtleSwgYml0Z29LZXldO1xuICAgIGNvbnN0IHZhbGlkQWRkcmVzczEgPSAnU05BWVFGWjZFRjU0RDVYV0pQM0dBRTFZOERQWVhLRkM3VFRNWVhGVic7XG4gICAgY29uc3QgdmFsaWRBZGRyZXNzMiA9ICdTTkFZUUZaNkVGNTRENVhXSlAzR0FFMVk4RFBZWEtGQzdUVE1ZWEZWP21lbW9JZD0yJztcbiAgICBjb25zdCB1bnJlbGF0ZWRWYWxpZEFkZHJlc3MgPSAnU1QxMU5KVFRLR1ZUNkQxSFk0TkpSVlFXTVFNN1RWQVIwOTFFSjhQMlk/bWVtb0lkPTEnO1xuICAgIGNvbnN0IGludmFsaWRBZGRyZXNzID0gJ1NUMVQ3NThLNlQyWVJLRzlRMFRKMTZCNkZQNVFRUkVXWlNFU1JTMFBZJztcbiAgICAoYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHsgYWRkcmVzczogdmFsaWRBZGRyZXNzMSwga2V5Y2hhaW5zIH0pKS5zaG91bGQudHJ1ZSgpO1xuICAgIChhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3MoeyBhZGRyZXNzOiB2YWxpZEFkZHJlc3MyLCBrZXljaGFpbnMgfSkpLnNob3VsZC50cnVlKCk7XG4gICAgKGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7IGFkZHJlc3M6IHVucmVsYXRlZFZhbGlkQWRkcmVzcywga2V5Y2hhaW5zIH0pKS5zaG91bGQuZmFsc2UoKTtcblxuICAgIGFzc2VydC5yZWplY3RzKFxuICAgICAgYXN5bmMgKCkgPT4gYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHsgYWRkcmVzczogaW52YWxpZEFkZHJlc3MsIGtleWNoYWlucyB9KSxcbiAgICAgIGBpbnZhbGlkIGFkZHJlc3MgJHtpbnZhbGlkQWRkcmVzc31gXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBleHBsYWluIGEgdHJhbnNmZXIgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICB0eEhleDogdGVzdERhdGEudHhGb3JFeHBsYWluVHJhbnNmZXIsXG4gICAgICBmZWVJbmZvOiB7IGZlZTogJycgfSxcbiAgICB9KTtcbiAgICBleHBsYWluLmlkLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS50eEV4cGxhaW5lZFRyYW5zZmVyLmlkKTtcbiAgICBleHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEudHhFeHBsYWluZWRUcmFuc2Zlci5vdXRwdXRBbW91bnQpO1xuICAgIGV4cGxhaW4ub3V0cHV0c1swXS5hbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLnR4RXhwbGFpbmVkVHJhbnNmZXIub3V0cHV0QW1vdW50KTtcbiAgICBleHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEudHhFeHBsYWluZWRUcmFuc2Zlci5yZWNpcGllbnQpO1xuICAgIGV4cGxhaW4ub3V0cHV0c1swXS5tZW1vLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS50eEV4cGxhaW5lZFRyYW5zZmVyLm1lbW8pO1xuICAgIGV4cGxhaW4uZmVlLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS50eEV4cGxhaW5lZFRyYW5zZmVyLmZlZSk7XG4gICAgZXhwbGFpbi5jaGFuZ2VBbW91bnQuc2hvdWxkLmVxdWFsKCcwJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZXhwbGFpbiBhbiB1bnNpZ25lZCB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBrZXkgPSBuZXcgS2V5UGFpcigpO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uID0gJ1NUMTFOSlRUS0dWVDZEMUhZNE5KUlZRV01RTTdUVkFSMDkxRUo4UDJZJztcbiAgICBjb25zdCBhbW91bnQgPSAnMTAwMDAwJztcbiAgICBjb25zdCBtZW1vID0gJ2kgY2Fubm90IGJlIGJyb2FkY2FzdCc7XG5cbiAgICBjb25zdCB1bnNpZ25lZFRyYW5zYWN0aW9uID0gYXdhaXQgYnVpbGRVbnNpZ25lZFRyYW5zYWN0aW9uKHtcbiAgICAgIGRlc3RpbmF0aW9uLFxuICAgICAgYW1vdW50LFxuICAgICAgcHVibGljS2V5OiBrZXkuZ2V0S2V5cygpLnB1YixcbiAgICAgIG1lbW86IG1lbW8sXG4gICAgfSk7XG4gICAgY29uc3QgdW5zaWduZWRIZXggPSB1bnNpZ25lZFRyYW5zYWN0aW9uLnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICBjb25zdCBleHBsYWluID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4SGV4OiB1bnNpZ25lZEhleCxcbiAgICAgIHB1YmxpY0tleXM6IFtrZXkuZ2V0S2V5cygpLnB1Yl0sXG4gICAgICBmZWVJbmZvOiB7IGZlZTogJycgfSxcbiAgICB9KTtcblxuICAgIGV4cGxhaW4ubWVtby5zaG91bGQuZXF1YWwobWVtbyk7XG4gICAgZXhwbGFpbi5vdXRwdXRzWzBdLmFtb3VudC5zaG91bGQuZXF1YWwoYW1vdW50KTtcbiAgICBleHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwoZGVzdGluYXRpb24pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGV4cGxhaW4gdW5zaWduZWQgdHJhbnNmZXIgdHJhbnNhY3Rpb24gaGV4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGV4cGxhaW4gPSBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgdHhIZXg6IHRlc3REYXRhLnVuc2lnbmVkVHhGb3JFeHBsYWluVHJhbnNmZXIsXG4gICAgICBwdWJsaWNLZXlzOiBbJzAzNzk3ZGQ2NTMwNDBkMzQ0ZmQwNDhjMWFkMDVkNGNiY2IyMTc4YjMwYzZhMGM0Mjc2OTk0Nzk1ZjNlODMzZGE0MSddLFxuICAgICAgZmVlSW5mbzogeyBmZWU6ICcnIH0sXG4gICAgfSk7XG4gICAgZXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLnVuc2lnbmVkVHhFeHBsYWluZWRUcmFuc2Zlci5vdXRwdXRBbW91bnQpO1xuICAgIGV4cGxhaW4ub3V0cHV0c1swXS5hbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLnVuc2lnbmVkVHhFeHBsYWluZWRUcmFuc2Zlci5vdXRwdXRBbW91bnQpO1xuICAgIGV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS51bnNpZ25lZFR4RXhwbGFpbmVkVHJhbnNmZXIucmVjaXBpZW50KTtcbiAgICBleHBsYWluLm91dHB1dHNbMF0ubWVtby5zaG91bGQuZXF1YWwodGVzdERhdGEudW5zaWduZWRUeEV4cGxhaW5lZFRyYW5zZmVyLm1lbW8pO1xuICAgIGV4cGxhaW4uZmVlLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS51bnNpZ25lZFR4RXhwbGFpbmVkVHJhbnNmZXIuZmVlKTtcbiAgICBleHBsYWluLmNoYW5nZUFtb3VudC5zaG91bGQuZXF1YWwoJzAnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBleHBsYWluIGEgY29udHJhY3QgY2FsbCB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBleHBsYWluID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4SGV4OiB0ZXN0RGF0YS50eEZvckV4cGxhaW5Db250cmFjdCxcbiAgICAgIGZlZUluZm86IHsgZmVlOiAnJyB9LFxuICAgIH0pO1xuICAgIGV4cGxhaW4uaWQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLnR4RXhwbGFpbmVkQ29udHJhY3QuaWQpO1xuICAgIGV4cGxhaW4uZmVlLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS50eEV4cGxhaW5lZENvbnRyYWN0LmZlZSk7XG4gICAgZXhwbGFpbi5jb250cmFjdEFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLnR4RXhwbGFpbmVkQ29udHJhY3QuY29udHJhY3RBZGRyZXNzKTtcbiAgICBleHBsYWluLmNvbnRyYWN0TmFtZS5zaG91bGQuZXF1YWwodGVzdERhdGEudHhFeHBsYWluZWRDb250cmFjdC5jb250cmFjdE5hbWUpO1xuICAgIGV4cGxhaW4uY29udHJhY3RGdW5jdGlvbi5zaG91bGQuZXF1YWwodGVzdERhdGEudHhFeHBsYWluZWRDb250cmFjdC5mdW5jdGlvbk5hbWUpO1xuICAgIGV4cGxhaW4uY29udHJhY3RGdW5jdGlvbkFyZ3NbMF0udHlwZS5zaG91bGQuZXF1YWwodGVzdERhdGEudHhFeHBsYWluZWRDb250cmFjdC5mdW5jdGlvbkFyZ3NbMF0udHlwZSk7XG4gICAgZXhwbGFpbi5jb250cmFjdEZ1bmN0aW9uQXJnc1swXS52YWx1ZS50b1N0cmluZygpLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS50eEV4cGxhaW5lZENvbnRyYWN0LmZ1bmN0aW9uQXJnc1swXS52YWx1ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZXhwbGFpbiBhIGZ1bmdpYmxlIHRva2VuIHRyYW5zZmVyIHRyYW5zYWN0aW9uIHdpdGggbWVtbycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBleHBsYWluID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4SGV4OiB0ZXN0RGF0YS50eEZvckV4cGxhaW5GdW5naWJsZVRva2VuVHJhbnNmZXIsXG4gICAgICBmZWVJbmZvOiB7IGZlZTogJycgfSxcbiAgICB9KTtcbiAgICBleHBsYWluLmlkLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5mdW5naWJsZVRva2VuVHJhbnNmZXJUeC5pZCk7XG4gICAgZXhwbGFpbi5mZWUuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmZ1bmdpYmxlVG9rZW5UcmFuc2ZlclR4LmZlZSk7XG4gICAgZXhwbGFpbi5tZW1vLnNob3VsZC5lcXVhbCgnMScpO1xuICAgIGV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5mdW5naWJsZVRva2VuVHJhbnNmZXJUeC5mdW5jdGlvbkFyZ3NbMl0udmFsdWUpO1xuICAgIGV4cGxhaW4ub3V0cHV0c1swXS5hbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmZ1bmdpYmxlVG9rZW5UcmFuc2ZlclR4LmZ1bmN0aW9uQXJnc1syXS52YWx1ZSk7XG4gICAgZXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKGN2VG9TdHJpbmcodGVzdERhdGEuZnVuZ2libGVUb2tlblRyYW5zZmVyVHguZnVuY3Rpb25BcmdzWzFdKSk7XG4gICAgZXhwbGFpbi5vdXRwdXRzWzBdLm1lbW8uc2hvdWxkLmVxdWFsKCcxJyk7XG4gICAgZXhwbGFpbi5vdXRwdXRzWzBdLnRva2VuTmFtZS5zaG91bGQuZXF1YWwodGVzdERhdGEuZnVuZ2libGVUb2tlblRyYW5zZmVyVHgudG9rZW5OYW1lKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBleHBsYWluIGEgZnVuZ2libGUgdG9rZW4gdHJhbnNmZXIgdHJhbnNhY3Rpb24gd2l0aG91dCBtZW1vJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGV4cGxhaW4gPSBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgdHhIZXg6IHRlc3REYXRhLnR4Rm9yRXhwbGFpbkZ1bmdpYmxlVG9rZW5UcmFuc2ZlcldpdGhvdXRNZW1vLFxuICAgICAgZmVlSW5mbzogeyBmZWU6ICcnIH0sXG4gICAgfSk7XG4gICAgZXhwbGFpbi5pZC5zaG91bGQuZXF1YWwodGVzdERhdGEuaGV4V2l0aG91dE1lbW9UcmFuc2ZlcklkKTtcbiAgICBleHBsYWluLmZlZS5zaG91bGQuZXF1YWwodGVzdERhdGEuZnVuZ2libGVUb2tlblRyYW5zZmVyVHguZmVlKTtcbiAgICBhc3NlcnQuZGVlcEVxdWFsKGV4cGxhaW4ubWVtbywgdW5kZWZpbmVkLCAnbWVtbyBzaG91bGQgYmUgdW5kZWZpbmVkJyk7XG4gICAgZXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmZ1bmdpYmxlVG9rZW5UcmFuc2ZlclR4LmZ1bmN0aW9uQXJnc1syXS52YWx1ZSk7XG4gICAgZXhwbGFpbi5vdXRwdXRzWzBdLmFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEuZnVuZ2libGVUb2tlblRyYW5zZmVyVHguZnVuY3Rpb25BcmdzWzJdLnZhbHVlKTtcbiAgICBleHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwoY3ZUb1N0cmluZyh0ZXN0RGF0YS5mdW5naWJsZVRva2VuVHJhbnNmZXJUeC5mdW5jdGlvbkFyZ3NbMV0pKTtcbiAgICBhc3NlcnQuZGVlcEVxdWFsKGV4cGxhaW4ub3V0cHV0c1swXS5tZW1vLCB1bmRlZmluZWQsICdtZW1vIHNob3VsZCBiZSB1bmRlZmluZWQnKTtcbiAgICBleHBsYWluLm91dHB1dHNbMF0udG9rZW5OYW1lLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5mdW5naWJsZVRva2VuVHJhbnNmZXJUeC50b2tlbk5hbWUpO1xuICB9KTtcblxuICBkZXNjcmliZSgnS2V5cGFpcnM6JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSBrZXlwYWlyIGZyb20gcmFuZG9tIHNlZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gYmFzZWNvaW4uZ2VuZXJhdGVLZXlQYWlyKCk7XG4gICAgICBrZXlQYWlyLnNob3VsZC5oYXZlLnByb3BlcnR5KCdwdWInKTtcbiAgICAgIGtleVBhaXIuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3BydicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBhIGtleXBhaXIgZnJvbSBhIHNlZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZWVkVGV4dCA9XG4gICAgICAgICc4MDM1MGI0MjA4ZDM4MWZiZmUyMjc2YTMyNjYwMzA0OWZlNTAwNzMxYzQ2ZDNjOTkzNmI1Y2UwMzZiNTEzNzdmMjRiYWI3ZGQwYzJhZjdmMTA3NDE2ZWY4NThmZjc5YjA2NzBjNzI0MDZkYWQwNjRlNzJiYjE3ZmMwYTkwMzhiYic7XG4gICAgICBjb25zdCBzZWVkID0gQnVmZmVyLmZyb20oc2VlZFRleHQsICdoZXgnKTtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBiYXNlY29pbi5nZW5lcmF0ZUtleVBhaXIoc2VlZCk7XG4gICAgICBrZXlQYWlyLnB1Yi5zaG91bGQuZXF1YWwoXG4gICAgICAgICd4cHViNjYxTXlNd0FxUmJjRkF3cXZTR2JrMzVrSmY3Q1FxZE4xdzRDTVVCQlRxSDVlM2l2alU2RDh1Z3Y5aFJTZ1JiUmVuQzR3M2FoWGRMVmFod2pnalhoU3VRS01kTmRuNTVZOVROU2FnQmt0d3MnXG4gICAgICApO1xuICAgICAga2V5UGFpci5wcnYuc2hvdWxkLmVxdWFsKFxuICAgICAgICAneHBydjlzMjFaclFIMTQzSzJnc05wUWpiTnU5MWtkR2kxTnVXZWk4Ylo1bVp1Vms2bUZQbkJ2bXhiN05TSlFkYlpXM0ZHcEszWWNuN2pvckFYY0V6TXZ2aUd0YnlCejV0QnJqZm5XeVFwM2c3NUZLJ1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1NpZ24gdHJhbnNhY3Rpb246JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgc2lnbiB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtleSA9IG5ldyBLZXlQYWlyKHtcbiAgICAgICAgcHJ2OiAnMjFkNDNkMmFlMGRhMWQ5ZDA0Y2ZjYWFjN2QzOTdhMzM3MzM4ODEwODFmMGIyY2QwMzgwNjJjZjBjY2JiNzUyNjAxJyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGVzdGluYXRpb24gPSAnU1RERTdZOEhWM1JYOFZCTTJUWlZXSlRTN1pBMVhCMFNTQzNORVZIMCc7XG4gICAgICBjb25zdCBhbW91bnQgPSAnMTAwMDAwJztcblxuICAgICAgY29uc3QgdW5zaWduZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGJ1aWxkVW5zaWduZWRUcmFuc2FjdGlvbih7XG4gICAgICAgIGRlc3RpbmF0aW9uLFxuICAgICAgICBhbW91bnQsXG4gICAgICAgIHB1YmxpY0tleToga2V5LmdldEtleXMoKS5wdWIsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYmFzZWNvaW4uc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgICAgcHJ2OiBrZXkuZ2V0S2V5cygpLnBydiEudG9TdHJpbmcoKSxcbiAgICAgICAgcHViS2V5czogW2tleS5nZXRLZXlzKCkucHViXSxcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4SGV4OiB1bnNpZ25lZFRyYW5zYWN0aW9uLnRvQnJvYWRjYXN0Rm9ybWF0KCksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgU3R4TGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KGNvaW5OYW1lKSk7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odHguaGFsZlNpZ25lZC50eEhleCk7XG4gICAgICBjb25zdCBzaWduZWRUeCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gc2lnbmVkVHgudG9Kc29uKCk7XG4gICAgICB0eEpzb24ucGF5bG9hZC50by5zaG91bGQuZXF1YWwoZGVzdGluYXRpb24pO1xuICAgICAgdHhKc29uLnBheWxvYWQuYW1vdW50LnNob3VsZC5lcXVhbChhbW91bnQpO1xuICAgICAgc2lnbmVkVHguc2lnbmF0dXJlLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNpZ24gbXVsdGlzaWcgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrZXkxID0gbmV3IEtleVBhaXIoe1xuICAgICAgICBwcnY6ICcyMWQ0M2QyYWUwZGExZDlkMDRjZmNhYWM3ZDM5N2EzMzczMzg4MTA4MWYwYjJjZDAzODA2MmNmMGNjYmI3NTI2MDEnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBrZXkyID0gbmV3IEtleVBhaXIoe1xuICAgICAgICBwcnY6ICdjNzE3MDBiMDdkNTIwYThjOTczMWU0ZDBmMDk1YWE2ZWZiOTFlMTZlMjVmYjI3Y2UyYjcyZTdiNjk4ZjgxMjdhMDEnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBrZXkzID0gbmV3IEtleVBhaXIoe1xuICAgICAgICBwcnY6ICdlNzVkY2I2NmY4NDI4N2VhZjM0Nzk1NWU5NGZhMDQzMzcyOThkYmQ5NWFhMGRiYjk4NTc3MTEwNGVmMTkxM2RiMDEnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbiA9ICdTVERFN1k4SFYzUlg4VkJNMlRaVldKVFM3WkExWEIwU1NDM05FVkgwJztcbiAgICAgIGNvbnN0IGFtb3VudCA9ICcxMDAwMDAnO1xuICAgICAgY29uc3QgcHVibGljS2V5cyA9IFtrZXkxLmdldEtleXModHJ1ZSkucHViLCBrZXkyLmdldEtleXModHJ1ZSkucHViLCBrZXkzLmdldEtleXModHJ1ZSkucHViXTtcbiAgICAgIGNvbnN0IHVuc2lnbmVkVHJhbnNhY3Rpb24gPSBhd2FpdCBidWlsZG11bHRpU2lnVW5zaWduZWRUcmFuc2FjdGlvbih7XG4gICAgICAgIGRlc3RpbmF0aW9uLFxuICAgICAgICBhbW91bnQsXG4gICAgICAgIHB1YmxpY0tleXMsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYmFzZWNvaW4uc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgICAgcHJ2OiBbXG4gICAgICAgICAgJzIxZDQzZDJhZTBkYTFkOWQwNGNmY2FhYzdkMzk3YTMzNzMzODgxMDgxZjBiMmNkMDM4MDYyY2YwY2NiYjc1MjYwMScsXG4gICAgICAgICAgJ2M3MTcwMGIwN2Q1MjBhOGM5NzMxZTRkMGYwOTVhYTZlZmI5MWUxNmUyNWZiMjdjZTJiNzJlN2I2OThmODEyN2EwMScsXG4gICAgICAgIF0sXG4gICAgICAgIHB1YktleXM6IFtrZXkxLmdldEtleXMoKS5wdWIsIGtleTIuZ2V0S2V5cygpLnB1Yiwga2V5My5nZXRLZXlzKCkucHViXSxcbiAgICAgICAgbnVtYmVyU2lnbmF0dXJlOiAyLFxuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgdHhIZXg6IHVuc2lnbmVkVHJhbnNhY3Rpb24udG9Ccm9hZGNhc3RGb3JtYXQoKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZmFjdG9yeSA9IG5ldyBTdHhMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoY29pbk5hbWUpKTtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0eC50eEhleCk7XG4gICAgICBjb25zdCBzaWduZWRUeCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gc2lnbmVkVHgudG9Kc29uKCk7XG4gICAgICB0eEpzb24ucGF5bG9hZC50by5zaG91bGQuZXF1YWwoZGVzdGluYXRpb24pO1xuICAgICAgdHhKc29uLnBheWxvYWQuYW1vdW50LnNob3VsZC5lcXVhbChhbW91bnQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0U2lnbmluZ1BheWxvYWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHR4IGFzIGEgYnVmZmVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgbm9uVFNTQ29pbiA9IGJpdGdvLmNvaW4oJ3RzdHgnKTtcbiAgICAgIGNvbnN0IGJ1ZmZlclR4ID0gYXdhaXQgbm9uVFNTQ29pbi5nZXRTaWduYWJsZVBheWxvYWQodGVzdERhdGEudW5zaWduZWRUeEZvckV4cGxhaW5UcmFuc2Zlcik7XG4gICAgICBidWZmZXJUeC5zaG91bGQuYmUuZGVlcEVxdWFsKEJ1ZmZlci5mcm9tKHRlc3REYXRhLnVuc2lnbmVkVHhGb3JFeHBsYWluVHJhbnNmZXIpKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1ZlcmlmeSBUcmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBhZGRyZXNzMSA9ICcweDE3NGNmZDgyM2FmOGNlMjdlZDBhZmVlM2ZjZjNjM2JhMjU5MTE2YmUnO1xuICAgIGNvbnN0IGFkZHJlc3MyID0gJzB4N2U4NWJkYzI3YzA1MGUzOTA1ZWJmNGI4ZTYzNGQ5YWQ2ZWRkMGRlNic7XG4gICAgY29uc3QgdHhQcmVidWlsZCA9IHsgdHhIZXg6IHRlc3REYXRhLnR4Rm9yRXhwbGFpblRyYW5zZmVyLCB0eEluZm86IHt9IH07XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBhIHR4UHJlYnVpbGQgd2l0aCBtb3JlIHRoYW4gb25lIHJlY2lwaWVudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCB7fSk7XG5cbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgeyBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwJywgYWRkcmVzczogYWRkcmVzczEgfSxcbiAgICAgICAgICB7IGFtb3VudDogJzI1MDAwMDAwMDAwMDAnLCBhZGRyZXNzOiBhZGRyZXNzMiB9LFxuICAgICAgICBdLFxuICAgICAgICB3YWxsZXQ6IHdhbGxldCxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJ2Zha2VXYWxsZXRQYXNzcGhyYXNlJyxcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgIGB0c3R4IGRvZXNuJ3Qgc3VwcG9ydCBzZW5kaW5nIHRvIG1vcmUgdGhhbiAxIGRlc3RpbmF0aW9uIGFkZHJlc3Mgd2l0aGluIGEgc2luZ2xlIHRyYW5zYWN0aW9uLiBUcnkgYWdhaW4sIHVzaW5nIG9ubHkgYSBzaW5nbGUgcmVjaXBpZW50LmBcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IHdoZW4gdHhQcmVidWlsZCBpcyBtaXNzaW5nIHR4SGV4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZWNvaW4sIHt9KTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbeyBhbW91bnQ6ICcxMDAwJywgYWRkcmVzczogdGVzdERhdGEudHhFeHBsYWluZWRUcmFuc2Zlci5yZWNpcGllbnQgfV0sXG4gICAgICAgIHdhbGxldCxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJ2Zha2VXYWxsZXRQYXNzcGhyYXNlJyxcbiAgICAgIH07XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFByZWJ1aWxkOiB7fSwgdHhQYXJhbXMgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ21pc3NpbmcgcmVxdWlyZWQgdHggcHJlYnVpbGQgcHJvcGVydHkgdHhIZXgnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgYSBuYXRpdmUgU1RYIHRyYW5zZmVyIHdpdGggbWF0Y2hpbmcgcmVjaXBpZW50IGFuZCBhbW91bnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlY29pbiwge30pO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS50eEV4cGxhaW5lZFRyYW5zZmVyLnJlY2lwaWVudCxcbiAgICAgICAgICAgIGFtb3VudDogdGVzdERhdGEudHhFeHBsYWluZWRUcmFuc2Zlci5vdXRwdXRBbW91bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgbWVtbzogeyB0eXBlOiAnJywgdmFsdWU6IHRlc3REYXRhLnR4RXhwbGFpbmVkVHJhbnNmZXIubWVtbyB9LFxuICAgICAgICB3YWxsZXQsXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFByZWJ1aWxkLCB0eFBhcmFtcyB9KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmVyaWZ5IHRyYW5zYWN0aW9uIHdpdGggd3JvbmcgcmVjaXBpZW50IGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlY29pbiwge30pO1xuICAgICAgY29uc3QgcmVxdWVzdGVkQWRkcmVzcyA9ICdTVDExTkpUVEtHVlQ2RDFIWTROSlJWUVdNUU03VFZBUjA5MUVKOFAyWSc7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHJlcXVlc3RlZEFkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6IHRlc3REYXRhLnR4RXhwbGFpbmVkVHJhbnNmZXIub3V0cHV0QW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG1lbW86IHsgdHlwZTogJycsIHZhbHVlOiB0ZXN0RGF0YS50eEV4cGxhaW5lZFRyYW5zZmVyLm1lbW8gfSxcbiAgICAgICAgd2FsbGV0LFxuICAgICAgfTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UHJlYnVpbGQsIHR4UGFyYW1zIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgIGBUeCBkZXN0aW5hdGlvbiBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zIHJlY2lwaWVudDogZXhwZWN0ZWQgJHtyZXF1ZXN0ZWRBZGRyZXNzfSBidXQgZ290ICR7dGVzdERhdGEudHhFeHBsYWluZWRUcmFuc2Zlci5yZWNpcGllbnR9YFxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiB3aXRoIHdyb25nIGFtb3VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCB7fSk7XG4gICAgICBjb25zdCByZXF1ZXN0ZWRBbW91bnQgPSAnOTk5OSc7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHRlc3REYXRhLnR4RXhwbGFpbmVkVHJhbnNmZXIucmVjaXBpZW50LFxuICAgICAgICAgICAgYW1vdW50OiByZXF1ZXN0ZWRBbW91bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgbWVtbzogeyB0eXBlOiAnJywgdmFsdWU6IHRlc3REYXRhLnR4RXhwbGFpbmVkVHJhbnNmZXIubWVtbyB9LFxuICAgICAgICB3YWxsZXQsXG4gICAgICB9O1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQcmVidWlsZCwgdHhQYXJhbXMgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgICAgYFR4IGFtb3VudCBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zIHJlY2lwaWVudCBhbW91bnQ6IGV4cGVjdGVkICR7cmVxdWVzdGVkQW1vdW50fSBidXQgZ290ICR7dGVzdERhdGEudHhFeHBsYWluZWRUcmFuc2Zlci5vdXRwdXRBbW91bnR9YFxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiB3aXRoIHdyb25nIG1lbW8nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlY29pbiwge30pO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS50eEV4cGxhaW5lZFRyYW5zZmVyLnJlY2lwaWVudCxcbiAgICAgICAgICAgIGFtb3VudDogdGVzdERhdGEudHhFeHBsYWluZWRUcmFuc2Zlci5vdXRwdXRBbW91bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgbWVtbzogeyB0eXBlOiAnJywgdmFsdWU6ICd3cm9uZyBtZW1vJyB9LFxuICAgICAgICB3YWxsZXQsXG4gICAgICB9O1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQcmVidWlsZCwgdHhQYXJhbXMgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ1R4IG1lbW8gZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcyByZWNpcGllbnQgbWVtbycpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUmVjb3ZlciBUcmFuc2FjdGlvbiBTVFgnLCBmdW5jdGlvbiAoKSB7XG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2suZW5hYmxlTmV0Q29ubmVjdCgpO1xuICAgIH0pO1xuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIH0pO1xuICAgIGFmdGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2suZGlzYWJsZU5ldENvbm5lY3QoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYSBzaWduZWQgcmVjb3ZlciB0cmFuc2FjdGlvbiB3aGVuIHByaXZhdGUga2V5IGRhdGEgaXMgcGFzc2VkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgcm9vdEFkZHJlc3MgPSB0ZXN0RGF0YS5IT1RfV0FMTEVUX1JPT1RfQUREUkVTUztcbiAgICAgIG5vY2soYGh0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zb2ApXG4gICAgICAgIC5nZXQoYC9leHRlbmRlZC92Mi9hZGRyZXNzZXMvJHtyb290QWRkcmVzc30vYmFsYW5jZXMvc3R4YClcbiAgICAgICAgLnJlcGx5KDIwMCwgdGVzdERhdGEuQUNDT1VOVF9CQUxBTkNFX1JFU1BPTlNFKTtcbiAgICAgIG5vY2soYGh0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zb2ApXG4gICAgICAgIC5nZXQoYC9leHRlbmRlZC92MS9hZGRyZXNzLyR7cm9vdEFkZHJlc3N9L25vbmNlc2ApXG4gICAgICAgIC5yZXBseSgyMDAsIHRlc3REYXRhLkFDQ09VTlRfTk9OQ0VfUkVTUE9OU0UpO1xuICAgICAgbm9jayhgaHR0cHM6Ly9hcGkudGVzdG5ldC5oaXJvLnNvYCwgeyBhbGxvd1VubW9ja2VkOiB0cnVlIH0pXG4gICAgICAgIC5wb3N0KGAvdjIvZmVlcy90cmFuc2FjdGlvbmAsIHRlc3REYXRhLkZFRV9FU1RJTUFUSU9OX1JFUVVFU1QpXG4gICAgICAgIC5yZXBseSgyMDAsIHRlc3REYXRhLkZFRV9FU1RJTUFUSU9OX1JFU1BPTlNFKTtcblxuICAgICAgY29uc3QgcmVjb3ZlcnlPcHRpb25zOiBSZWNvdmVyeU9wdGlvbnMgPSB7XG4gICAgICAgIGJhY2t1cEtleTogdGVzdERhdGEuSE9UX1dBTExFVF9LRVlfQ0FSRF9JTkZPLkJBQ0tVUF9LRVksXG4gICAgICAgIHVzZXJLZXk6IHRlc3REYXRhLkhPVF9XQUxMRVRfS0VZX0NBUkRfSU5GTy5VU0VSX0tFWSxcbiAgICAgICAgcm9vdEFkZHJlc3M6IHJvb3RBZGRyZXNzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiB0ZXN0RGF0YS5ERVNUSU5BVElPTl9BRERSRVNTX1dSVyxcbiAgICAgICAgYml0Z29LZXk6IHRlc3REYXRhLkhPVF9XQUxMRVRfS0VZX0NBUkRfSU5GTy5CSVRHT19QVUJfS0VZLFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiB0ZXN0RGF0YS5IT1RfV0FMTEVUX0tFWV9DQVJEX0lORk8uV0FMTEVUX1BBU1NQSFJBU0UsXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzcG9uc2U6IFJlY292ZXJ5VHJhbnNhY3Rpb24gPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHJlY292ZXJ5T3B0aW9ucyk7XG4gICAgICByZXNwb25zZS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHhIZXgnKTtcbiAgICAgIGFzc2VydC5kZWVwRXF1YWwocmVzcG9uc2UudHhIZXgsIHRlc3REYXRhLkhPVF9XQUxMRVRfUkVDT1ZFUllfVFhfSEVYLCAndHggaGV4IG5vdCBtYXRjaGluZyEnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYW4gdW5zaWduZWQgdHJhbnNhY3Rpb24gd2hlbiBwdWJsaWMga2V5cyBhcmUgcGFzc2VkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgcm9vdEFkZHJlc3MgPSB0ZXN0RGF0YS5DT0xEX1dBTExFVF9ST09UX0FERFJFU1M7XG4gICAgICBub2NrKGBodHRwczovL2FwaS50ZXN0bmV0Lmhpcm8uc29gKVxuICAgICAgICAuZ2V0KGAvZXh0ZW5kZWQvdjIvYWRkcmVzc2VzLyR7cm9vdEFkZHJlc3N9L2JhbGFuY2VzL3N0eGApXG4gICAgICAgIC5yZXBseSgyMDAsIHRlc3REYXRhLkFDQ09VTlRfQkFMQU5DRV9SRVNQT05TRSk7XG4gICAgICBub2NrKGBodHRwczovL2FwaS50ZXN0bmV0Lmhpcm8uc29gKVxuICAgICAgICAuZ2V0KGAvZXh0ZW5kZWQvdjEvYWRkcmVzcy8ke3Jvb3RBZGRyZXNzfS9ub25jZXNgKVxuICAgICAgICAucmVwbHkoMjAwLCB0ZXN0RGF0YS5BQ0NPVU5UX05PTkNFX1JFU1BPTlNFKTtcbiAgICAgIG5vY2soYGh0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zb2AsIHsgYWxsb3dVbm1vY2tlZDogdHJ1ZSB9KVxuICAgICAgICAucG9zdChgL3YyL2ZlZXMvdHJhbnNhY3Rpb25gLCB0ZXN0RGF0YS5GRUVfRVNUSU1BVElPTl9SRVFVRVNUKVxuICAgICAgICAucmVwbHkoMjAwLCB0ZXN0RGF0YS5GRUVfRVNUSU1BVElPTl9SRVNQT05TRSk7XG5cbiAgICAgIGNvbnN0IHJlY292ZXJ5T3B0aW9uczogUmVjb3ZlcnlPcHRpb25zID0ge1xuICAgICAgICBiYWNrdXBLZXk6IHRlc3REYXRhLkNPTERfV0FMTEVUX1BVQkxJQ19LRVlfSU5GTy5CQUNLVVBfS0VZLFxuICAgICAgICB1c2VyS2V5OiB0ZXN0RGF0YS5DT0xEX1dBTExFVF9QVUJMSUNfS0VZX0lORk8uVVNFUl9LRVksXG4gICAgICAgIHJvb3RBZGRyZXNzOiByb290QWRkcmVzcyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogdGVzdERhdGEuREVTVElOQVRJT05fQUREUkVTU19XUlcsXG4gICAgICAgIGJpdGdvS2V5OiB0ZXN0RGF0YS5DT0xEX1dBTExFVF9QVUJMSUNfS0VZX0lORk8uQklUR09fUFVCX0tFWSxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXNwb25zZTogUmVjb3ZlcnlJbmZvID0gYXdhaXQgYmFzZWNvaW4ucmVjb3ZlcihyZWNvdmVyeU9wdGlvbnMpO1xuICAgICAgcmVzcG9uc2Uuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3R4SGV4Jyk7XG4gICAgICByZXNwb25zZS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnY29pbicpO1xuICAgICAgcmVzcG9uc2Uuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2ZlZUluZm8nKTtcbiAgICAgIGFzc2VydC5kZWVwRXF1YWwocmVzcG9uc2UudHhIZXgsIHRlc3REYXRhLkNPTERfV0FMTEVUX1VOU0lHTkVEX1NXRUVQX1RYX0hFWCwgJ3R4IGhleCBub3QgbWF0Y2hpbmchJyk7XG4gICAgICBhc3NlcnQuZGVlcEVxdWFsKHJlc3BvbnNlLmNvaW4sICd0c3R4JywgJ2NvaW4gbm90IG1hdGNoaW5nIScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBpbnZhbGlkIHJvb3QgYWRkcmVzcyB3aGVuIHJvb3QgYWRkcmVzcyBpcyBtaXNzaW5nIG9yIGludmFsaWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZWNvdmVyeU9wdGlvbnM6IFJlY292ZXJ5T3B0aW9ucyA9IHtcbiAgICAgICAgYmFja3VwS2V5OiB0ZXN0RGF0YS5DT0xEX1dBTExFVF9QVUJMSUNfS0VZX0lORk8uQkFDS1VQX0tFWSxcbiAgICAgICAgdXNlcktleTogdGVzdERhdGEuQ09MRF9XQUxMRVRfUFVCTElDX0tFWV9JTkZPLlVTRVJfS0VZLFxuICAgICAgICByb290QWRkcmVzczogJycsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IHRlc3REYXRhLkRFU1RJTkFUSU9OX0FERFJFU1NfV1JXLFxuICAgICAgICBiaXRnb0tleTogdGVzdERhdGEuQ09MRF9XQUxMRVRfUFVCTElDX0tFWV9JTkZPLkJJVEdPX1BVQl9LRVksXG4gICAgICB9O1xuICAgICAgYXdhaXQgYmFzZWNvaW4ucmVjb3ZlcihyZWNvdmVyeU9wdGlvbnMpLnNob3VsZC5yZWplY3RlZFdpdGgoJ2ludmFsaWQgcm9vdCBhZGRyZXNzIScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBpbnZhbGlkIGRlc3RpbmF0aW9uIGFkZHJlc3Mgd2hlbiBkZXN0aW5hdGlvbiBhZGRyZXNzIGlzIG1pc3Npbmcgb3IgaW52YWxpZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlY292ZXJ5T3B0aW9uczogUmVjb3ZlcnlPcHRpb25zID0ge1xuICAgICAgICBiYWNrdXBLZXk6IHRlc3REYXRhLkNPTERfV0FMTEVUX1BVQkxJQ19LRVlfSU5GTy5CQUNLVVBfS0VZLFxuICAgICAgICB1c2VyS2V5OiB0ZXN0RGF0YS5DT0xEX1dBTExFVF9QVUJMSUNfS0VZX0lORk8uVVNFUl9LRVksXG4gICAgICAgIHJvb3RBZGRyZXNzOiB0ZXN0RGF0YS5DT0xEX1dBTExFVF9ST09UX0FERFJFU1MsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246ICcnLFxuICAgICAgICBiaXRnb0tleTogdGVzdERhdGEuQ09MRF9XQUxMRVRfUFVCTElDX0tFWV9JTkZPLkJJVEdPX1BVQl9LRVksXG4gICAgICB9O1xuICAgICAgYXdhaXQgYmFzZWNvaW4ucmVjb3ZlcihyZWNvdmVyeU9wdGlvbnMpLnNob3VsZC5yZWplY3RlZFdpdGgoJ2ludmFsaWQgZGVzdGluYXRpb24gYWRkcmVzcyEnKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGZhaWwgd2l0aCBubyBiYWxhbmNlIHdoZW4gcm9vdCBhZGRyZXNzIGRvZXNuJ3QgaGF2ZSBiYWxhbmNlXCIsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJvb3RBZGRyZXNzID0gdGVzdERhdGEuSE9UX1dBTExFVF9ST09UX0FERFJFU1M7XG4gICAgICBjb25zdCBzdHhCYWxhbmNlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0ZXN0RGF0YS5BQ0NPVU5UX0JBTEFOQ0VfUkVTUE9OU0UpKTtcbiAgICAgIHN0eEJhbGFuY2UuYmFsYW5jZSA9ICcwJztcbiAgICAgIG5vY2soYGh0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zb2ApXG4gICAgICAgIC5nZXQoYC9leHRlbmRlZC92Mi9hZGRyZXNzZXMvJHtyb290QWRkcmVzc30vYmFsYW5jZXMvc3R4YClcbiAgICAgICAgLnJlcGx5KDIwMCwgc3R4QmFsYW5jZSk7XG4gICAgICBub2NrKGBodHRwczovL2FwaS50ZXN0bmV0Lmhpcm8uc29gKVxuICAgICAgICAuZ2V0KGAvZXh0ZW5kZWQvdjEvYWRkcmVzcy8ke3Jvb3RBZGRyZXNzfS9ub25jZXNgKVxuICAgICAgICAucmVwbHkoMjAwLCB0ZXN0RGF0YS5BQ0NPVU5UX05PTkNFX1JFU1BPTlNFKTtcbiAgICAgIGNvbnN0IHJlY292ZXJ5T3B0aW9uczogUmVjb3ZlcnlPcHRpb25zID0ge1xuICAgICAgICBiYWNrdXBLZXk6IHRlc3REYXRhLkhPVF9XQUxMRVRfS0VZX0NBUkRfSU5GTy5CQUNLVVBfS0VZLFxuICAgICAgICB1c2VyS2V5OiB0ZXN0RGF0YS5IT1RfV0FMTEVUX0tFWV9DQVJEX0lORk8uVVNFUl9LRVksXG4gICAgICAgIHJvb3RBZGRyZXNzOiByb290QWRkcmVzcyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogdGVzdERhdGEuREVTVElOQVRJT05fQUREUkVTU19XUlcsXG4gICAgICAgIGJpdGdvS2V5OiB0ZXN0RGF0YS5IT1RfV0FMTEVUX0tFWV9DQVJEX0lORk8uQklUR09fUFVCX0tFWSxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogdGVzdERhdGEuSE9UX1dBTExFVF9LRVlfQ0FSRF9JTkZPLldBTExFVF9QQVNTUEhSQVNFLFxuICAgICAgfTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC5yZWNvdmVyKHJlY292ZXJ5T3B0aW9ucylcbiAgICAgICAgLnNob3VsZC5yZWplY3RlZFdpdGgoYGNvdWxkIG5vdCBmaW5kIGFueSBiYWxhbmNlIHRvIHJlY292ZXIgZm9yICR7cm9vdEFkZHJlc3N9YCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgd2l0aCBpbnN1ZmZpY2llbnQgYmFsYW5jZSB3aGVuIHN0eCBiYWxhbmNlIGlzIGxvd2VyIHRoYW4gZmVlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgcm9vdEFkZHJlc3MgPSB0ZXN0RGF0YS5IT1RfV0FMTEVUX1JPT1RfQUREUkVTUztcbiAgICAgIC8vIGRlZXAgY2xvbmUgdG8gc3RvcCBtdXRhdGlvblxuICAgICAgY29uc3QgYWNjb3VudEJhbGFuY2UgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRlc3REYXRhLkFDQ09VTlRfQkFMQU5DRV9SRVNQT05TRSkpO1xuICAgICAgYWNjb3VudEJhbGFuY2UuYmFsYW5jZSA9ICcxMDAnOyAvLyBzZXQgYmFsYW5jZSBsb3dlciB0aGFuIGZlZVxuICAgICAgbm9jayhgaHR0cHM6Ly9hcGkudGVzdG5ldC5oaXJvLnNvYClcbiAgICAgICAgLmdldChgL2V4dGVuZGVkL3YyL2FkZHJlc3Nlcy8ke3Jvb3RBZGRyZXNzfS9iYWxhbmNlcy9zdHhgKVxuICAgICAgICAucmVwbHkoMjAwLCBhY2NvdW50QmFsYW5jZSk7XG4gICAgICBub2NrKGBodHRwczovL2FwaS50ZXN0bmV0Lmhpcm8uc29gKVxuICAgICAgICAuZ2V0KGAvZXh0ZW5kZWQvdjEvYWRkcmVzcy8ke3Jvb3RBZGRyZXNzfS9ub25jZXNgKVxuICAgICAgICAucmVwbHkoMjAwLCB0ZXN0RGF0YS5BQ0NPVU5UX05PTkNFX1JFU1BPTlNFKTtcbiAgICAgIGNvbnN0IGZlZVJlcXVlc3RCb2R5ID0gdGVzdERhdGEuRkVFX0VTVElNQVRJT05fUkVRVUVTVDtcbiAgICAgIGZlZVJlcXVlc3RCb2R5LnRyYW5zYWN0aW9uX3BheWxvYWQgPVxuICAgICAgICAnMDAwNTFhMTUwMGExYzQyZjBjMTFiZmUzODkzZjQ3OWFmMTg5MDQ2Nzc2ODViZTAwMDAwMDAwMDAwMDAwNjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCc7XG4gICAgICBub2NrKGBodHRwczovL2FwaS50ZXN0bmV0Lmhpcm8uc29gLCB7IGFsbG93VW5tb2NrZWQ6IHRydWUgfSlcbiAgICAgICAgLnBvc3QoYC92Mi9mZWVzL3RyYW5zYWN0aW9uYCwgZmVlUmVxdWVzdEJvZHkpXG4gICAgICAgIC5yZXBseSgyMDAsIHRlc3REYXRhLkZFRV9FU1RJTUFUSU9OX1JFU1BPTlNFKTtcbiAgICAgIGNvbnN0IHJlY292ZXJ5T3B0aW9uczogUmVjb3ZlcnlPcHRpb25zID0ge1xuICAgICAgICBiYWNrdXBLZXk6IHRlc3REYXRhLkhPVF9XQUxMRVRfS0VZX0NBUkRfSU5GTy5CQUNLVVBfS0VZLFxuICAgICAgICB1c2VyS2V5OiB0ZXN0RGF0YS5IT1RfV0FMTEVUX0tFWV9DQVJEX0lORk8uVVNFUl9LRVksXG4gICAgICAgIHJvb3RBZGRyZXNzOiByb290QWRkcmVzcyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogdGVzdERhdGEuREVTVElOQVRJT05fQUREUkVTU19XUlcsXG4gICAgICAgIGJpdGdvS2V5OiB0ZXN0RGF0YS5IT1RfV0FMTEVUX0tFWV9DQVJEX0lORk8uQklUR09fUFVCX0tFWSxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogdGVzdERhdGEuSE9UX1dBTExFVF9LRVlfQ0FSRF9JTkZPLldBTExFVF9QQVNTUEhSQVNFLFxuICAgICAgfTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luLnJlY292ZXIocmVjb3ZlcnlPcHRpb25zKS5zaG91bGQucmVqZWN0ZWRXaXRoKCdpbnN1ZmZpY2llbnQgYmFsYW5jZSB0byBidWlsZCB0aGUgdHJhbnNhY3Rpb24nKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
624
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L3N0eC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixnREFBd0I7QUFFeEIsNENBQTBDO0FBQzFDLDhDQUF5QztBQUN6Qyw4Q0FBMEQ7QUFDMUQsNENBQXVDO0FBQ3ZDLHVEQUF3RjtBQUV4RixzREFBd0M7QUFDeEMsdURBQXlDO0FBQ3pDLG1DQUE4QztBQUc5QyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsWUFBTSxDQUFDO0FBRTNCLFFBQVEsQ0FBQyxNQUFNLEVBQUU7SUFDZixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDdkIsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDO0lBQzVCLElBQUksS0FBbUIsQ0FBQztJQUN4QixJQUFJLFFBQVEsQ0FBQztJQUViLE1BQU0saUJBQWlCLEdBQUc7UUFDeEIsRUFBRTtRQUNGLElBQUk7UUFDSixLQUFLO1FBQ0wsMENBQTBDO1FBQzFDLDJDQUEyQztLQUM1QyxDQUFDO0lBRUYsTUFBTSxhQUFhLEdBQUc7UUFDcEIsMENBQTBDO1FBQzFDLDJDQUEyQztRQUMzQywyQ0FBMkM7UUFDM0MsMkNBQTJDO1FBQzNDLG9EQUFvRDtRQUNwRCxvREFBb0Q7S0FDckQsQ0FBQztJQUVGLE1BQU0sQ0FBQztRQUNMLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFO1lBQ25DLEdBQUcsRUFBRSxNQUFNO1NBQ1osQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDM0IsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsU0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzlDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFVBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNo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dXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBub2NrIGZyb20gJ25vY2snO1xuXG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstYXBpJztcbmltcG9ydCB7IFdhbGxldCB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBUZXN0Qml0R28sIFRlc3RCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstdGVzdCc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IGN2VG9TdHJpbmcsIHB1YktleWZyb21Qcml2S2V5LCBwdWJsaWNLZXlUb1N0cmluZyB9IGZyb20gJ0BzdGFja3MvdHJhbnNhY3Rpb25zJztcblxuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vZml4dHVyZXMnO1xuaW1wb3J0ICogYXMgcmVzb3VyY2VzIGZyb20gJy4vcmVzb3VyY2VzJztcbmltcG9ydCB7IFN0eCwgU3R4TGliLCBUc3R4IH0gZnJvbSAnLi4vLi4vc3JjJztcbmltcG9ydCB7IFJlY292ZXJ5SW5mbywgUmVjb3ZlcnlPcHRpb25zLCBSZWNvdmVyeVRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi9pZmFjZSc7XG5cbmNvbnN0IHsgS2V5UGFpciB9ID0gU3R4TGliO1xuXG5kZXNjcmliZSgnU1RYOicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgY29pbk5hbWUgPSAnc3R4JztcbiAgY29uc3QgY29pbk5hbWVUZXN0ID0gJ3RzdHgnO1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgbGV0IGJhc2Vjb2luO1xuXG4gIGNvbnN0IGJhZFZhbGlkQWRkcmVzc2VzID0gW1xuICAgICcnLFxuICAgIG51bGwsXG4gICAgJ2FiYycsXG4gICAgJ1NQMjQ0SFlQWUFUMkJCMlFFNTEzTlNQODFIVE1ZV0JKUDAySFBHSzYnLFxuICAgICdTVDFUNzU4SzZUMllSS0c5UTBUSjE2QjZGUDVRUVJFV1pTRVNSUzBQWScsXG4gIF07XG5cbiAgY29uc3QgZ29vZEFkZHJlc3NlcyA9IFtcbiAgICAnU1RCNDRIWVBZQVQyQkIyUUU1MTNOU1A4MUhUTVlXQkpQMDJIUEdLNicsXG4gICAgJ1NUMTFOSlRUS0dWVDZEMUhZNE5KUlZRV01RTTdUVkFSMDkxRUo4UDJZJyxcbiAgICAnU1AyVDc1OEs2VDJZUktHOVEwVEoxNkI2RlA1UVFSRVdaU0VTUlMwUFknLFxuICAgICdTTTNXNVFGV0dQRzFKQzhSMjVFVlpERVAzQkVTSlo4MzFKUE5OUUZUWicsXG4gICAgJ1NNM1c1UUZXR1BHMUpDOFIyNUVWWkRFUDNCRVNKWjgzMUpQTk5RRlRaP21lbW9JZD0xJyxcbiAgICAnU1QxV1ZKTVM1VlM0MUYwWU1IN0QyTTBWSFhSRzRDWTQzWkpaQlM2MEE/bWVtb0lkPTQnLFxuICBdO1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHtcbiAgICAgIGVudjogJ21vY2snLFxuICAgIH0pO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3Rlcignc3R4JywgU3R4LmNyZWF0ZUluc3RhbmNlKTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3RzdHgnLCBUc3R4LmNyZWF0ZUluc3RhbmNlKTtcbiAgICBiYXNlY29pbiA9IGJpdGdvLmNvaW4oY29pbk5hbWVUZXN0KTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFuIHVuc2lnbmVkIGFjY291bnQtbGliIHNpZ25sZS1zaWduYXR1cmUgc2VuZCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gZGVzdGluYXRpb24gVGhlIGRlc3RpbmF0aW9uIGFkZHJlc3Mgb2YgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBhbW91bnQgVGhlIGFtb3VudCB0byBzZW5kIHRvIHRoZSByZWNpcGllbnRcbiAgICovXG4gIGNvbnN0IGJ1aWxkVW5zaWduZWRUcmFuc2FjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uICh7IGRlc3RpbmF0aW9uLCBhbW91bnQgPSAnMTAwMDAwJywgcHVibGljS2V5LCBtZW1vID0gJycgfSkge1xuICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgU3R4TGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KGNvaW5OYW1lKSk7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuZmVlKHtcbiAgICAgIGZlZTogJzE4MCcsXG4gICAgfSk7XG4gICAgdHhCdWlsZGVyLnRvKGRlc3RpbmF0aW9uKTtcbiAgICB0eEJ1aWxkZXIuYW1vdW50KGFtb3VudCk7XG4gICAgdHhCdWlsZGVyLm5vbmNlKDEpO1xuICAgIHR4QnVpbGRlci5mcm9tUHViS2V5KHB1YmxpY0tleSk7XG4gICAgdHhCdWlsZGVyLm1lbW8obWVtbyk7XG4gICAgdHhCdWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMSk7XG4gICAgcmV0dXJuIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBCdWlsZCBhbiB1bnNpZ25lZCBhY2NvdW50LWxpYiBtdWx0aS1zaWduYXR1cmUgc2VuZCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gZGVzdGluYXRpb24gVGhlIGRlc3RpbmF0aW9uIGFkZHJlc3Mgb2YgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBhbW91bnQgVGhlIGFtb3VudCB0byBzZW5kIHRvIHRoZSByZWNpcGllbnRcbiAgICovXG4gIGNvbnN0IGJ1aWxkbXVsdGlTaWdVbnNpZ25lZFRyYW5zYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gKHsgZGVzdGluYXRpb24sIGFtb3VudCA9ICcxMDAwMDAnLCBwdWJsaWNLZXlzLCBtZW1vID0gJycgfSkge1xuICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgU3R4TGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KGNvaW5OYW1lKSk7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuZmVlKHtcbiAgICAgIGZlZTogJzE4MCcsXG4gICAgfSk7XG4gICAgdHhCdWlsZGVyLnRvKGRlc3RpbmF0aW9uKTtcbiAgICB0eEJ1aWxkZXIuYW1vdW50KGFtb3VudCk7XG4gICAgdHhCdWlsZGVyLm5vbmNlKDEpO1xuICAgIHR4QnVpbGRlci5mcm9tUHViS2V5KHB1YmxpY0tleXMpO1xuICAgIHR4QnVpbGRlci5udW1iZXJTaWduYXR1cmVzKDIpO1xuICAgIHR4QnVpbGRlci5tZW1vKG1lbW8pO1xuICAgIHJldHVybiBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgfTtcblxuICBpdCgnc2hvdWxkIGluc3RhbnRpYXRlIHRoZSBjb2luJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBsb2NhbEJhc2Vjb2luID0gYml0Z28uY29pbigndHN0eCcpO1xuICAgIGxvY2FsQmFzZWNvaW4uc2hvdWxkLmJlLmFuLmluc3RhbmNlb2YoVHN0eCk7XG5cbiAgICBsb2NhbEJhc2Vjb2luID0gYml0Z28uY29pbignc3R4Jyk7XG4gICAgbG9jYWxCYXNlY29pbi5zaG91bGQuYmUuYW4uaW5zdGFuY2VvZihTdHgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGNoZWNrIHZhbGlkIGFkZHJlc3NlcycsIGZ1bmN0aW9uICgpIHtcbiAgICBiYWRWYWxpZEFkZHJlc3Nlcy5tYXAoKGFkZHIpID0+IHtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKGFkZHIpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG4gICAgZ29vZEFkZHJlc3Nlcy5tYXAoKGFkZHIpID0+IHtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKGFkZHIpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2ZXJpZnkgaXNXYWxsZXRBZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHVzZXJLZXkgPSB7XG4gICAgICBwdWI6ICd4cHViNjYxTXlNd0FxUmJjR1MySE1kdkFOTjdvOEVTV3F3dnI1VTRyeTVmWmREOVZIaHltV3lmb0RRRjR2emZLb3RYZ0d0SlRyd3JGUno3WGJHRm92NEZxZEtLbzZtUllOV3ZNcDdQMjNEanVKblMnLFxuICAgIH07XG4gICAgY29uc3QgYmFja3VwS2V5ID0ge1xuICAgICAgcHViOiAneHB1YjY2MU15TXdBcVJiY0ZFenI1Q2NwRnpQRzQ1cm1QZjc1RFR2RG9iTjVnSmltQ2F0Ykh0elI1M1NiSHpEWjFKNTZieUtTc2RjOHZTdWpHdVFweVBqYjdMc3VhMk5mQURKZXdQeE56TDNONlRqJyxcbiAgICB9O1xuICAgIGNvbnN0IGJpdGdvS2V5ID0ge1xuICAgICAgcHViOiAneHB1YjY2MU15TXdBcVJiY0dQMWFkazM0VnpSUUpFTVgyNXJDeGpFeVU5WUZGV05oV056d1BvcWdqTG9LZm5xb3RMd3J6N2tCZXZXYlJabnFUU1FyUUR1SnVZVVFhRFE1RERQRXpFWE13UFM5UEVmJyxcbiAgICB9O1xuICAgIGNvbnN0IGtleWNoYWlucyA9IFt1c2VyS2V5LCBiYWNrdXBLZXksIGJpdGdvS2V5XTtcbiAgICBjb25zdCB2YWxpZEFkZHJlc3MxID0gJ1NOQVlRRlo2RUY1NEQ1WFdKUDNHQUUxWThEUFlYS0ZDN1RUTVlYRlYnO1xuICAgIGNvbnN0IHZhbGlkQWRkcmVzczIgPSAnU05BWVFGWjZFRjU0RDVYV0pQM0dBRTFZOERQWVhLRkM3VFRNWVhGVj9tZW1vSWQ9Mic7XG4gICAgY29uc3QgdW5yZWxhdGVkVmFsaWRBZGRyZXNzID0gJ1NUMTFOSlRUS0dWVDZEMUhZNE5KUlZRV01RTTdUVkFSMDkxRUo4UDJZP21lbW9JZD0xJztcbiAgICBjb25zdCBpbnZhbGlkQWRkcmVzcyA9ICdTVDFUNzU4SzZUMllSS0c5UTBUSjE2QjZGUDVRUVJFV1pTRVNSUzBQWSc7XG4gICAgKGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7IGFkZHJlc3M6IHZhbGlkQWRkcmVzczEsIGtleWNoYWlucyB9KSkuc2hvdWxkLnRydWUoKTtcbiAgICAoYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHsgYWRkcmVzczogdmFsaWRBZGRyZXNzMiwga2V5Y2hhaW5zIH0pKS5zaG91bGQudHJ1ZSgpO1xuICAgIChhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3MoeyBhZGRyZXNzOiB1bnJlbGF0ZWRWYWxpZEFkZHJlc3MsIGtleWNoYWlucyB9KSkuc2hvdWxkLmZhbHNlKCk7XG5cbiAgICBhc3NlcnQucmVqZWN0cyhcbiAgICAgIGFzeW5jICgpID0+IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7IGFkZHJlc3M6IGludmFsaWRBZGRyZXNzLCBrZXljaGFpbnMgfSksXG4gICAgICBgaW52YWxpZCBhZGRyZXNzICR7aW52YWxpZEFkZHJlc3N9YFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZXhwbGFpbiBhIHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGV4cGxhaW4gPSBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgdHhIZXg6IHRlc3REYXRhLnR4Rm9yRXhwbGFpblRyYW5zZmVyLFxuICAgICAgZmVlSW5mbzogeyBmZWU6ICcnIH0sXG4gICAgfSk7XG4gICAgZXhwbGFpbi5pZC5zaG91bGQuZXF1YWwodGVzdERhdGEudHhFeHBsYWluZWRUcmFuc2Zlci5pZCk7XG4gICAgZXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLnR4RXhwbGFpbmVkVHJhbnNmZXIub3V0cHV0QW1vdW50KTtcbiAgICBleHBsYWluLm91dHB1dHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS50eEV4cGxhaW5lZFRyYW5zZmVyLm91dHB1dEFtb3VudCk7XG4gICAgZXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLnR4RXhwbGFpbmVkVHJhbnNmZXIucmVjaXBpZW50KTtcbiAgICBleHBsYWluLm91dHB1dHNbMF0ubWVtby5zaG91bGQuZXF1YWwodGVzdERhdGEudHhFeHBsYWluZWRUcmFuc2Zlci5tZW1vKTtcbiAgICBleHBsYWluLmZlZS5zaG91bGQuZXF1YWwodGVzdERhdGEudHhFeHBsYWluZWRUcmFuc2Zlci5mZWUpO1xuICAgIGV4cGxhaW4uY2hhbmdlQW1vdW50LnNob3VsZC5lcXVhbCgnMCcpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGV4cGxhaW4gYW4gdW5zaWduZWQgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qga2V5ID0gbmV3IEtleVBhaXIoKTtcbiAgICBjb25zdCBkZXN0aW5hdGlvbiA9ICdTVDExTkpUVEtHVlQ2RDFIWTROSlJWUVdNUU03VFZBUjA5MUVKOFAyWSc7XG4gICAgY29uc3QgYW1vdW50ID0gJzEwMDAwMCc7XG4gICAgY29uc3QgbWVtbyA9ICdpIGNhbm5vdCBiZSBicm9hZGNhc3QnO1xuXG4gICAgY29uc3QgdW5zaWduZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGJ1aWxkVW5zaWduZWRUcmFuc2FjdGlvbih7XG4gICAgICBkZXN0aW5hdGlvbixcbiAgICAgIGFtb3VudCxcbiAgICAgIHB1YmxpY0tleToga2V5LmdldEtleXMoKS5wdWIsXG4gICAgICBtZW1vOiBtZW1vLFxuICAgIH0pO1xuICAgIGNvbnN0IHVuc2lnbmVkSGV4ID0gdW5zaWduZWRUcmFuc2FjdGlvbi50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgY29uc3QgZXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICB0eEhleDogdW5zaWduZWRIZXgsXG4gICAgICBwdWJsaWNLZXlzOiBba2V5LmdldEtleXMoKS5wdWJdLFxuICAgICAgZmVlSW5mbzogeyBmZWU6ICcnIH0sXG4gICAgfSk7XG5cbiAgICBleHBsYWluLm1lbW8uc2hvdWxkLmVxdWFsKG1lbW8pO1xuICAgIGV4cGxhaW4ub3V0cHV0c1swXS5hbW91bnQuc2hvdWxkLmVxdWFsKGFtb3VudCk7XG4gICAgZXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKGRlc3RpbmF0aW9uKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBleHBsYWluIHVuc2lnbmVkIHRyYW5zZmVyIHRyYW5zYWN0aW9uIGhleCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBleHBsYWluID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4SGV4OiB0ZXN0RGF0YS51bnNpZ25lZFR4Rm9yRXhwbGFpblRyYW5zZmVyLFxuICAgICAgcHVibGljS2V5czogWycwMzc5N2RkNjUzMDQwZDM0NGZkMDQ4YzFhZDA1ZDRjYmNiMjE3OGIzMGM2YTBjNDI3Njk5NDc5NWYzZTgzM2RhNDEnXSxcbiAgICAgIGZlZUluZm86IHsgZmVlOiAnJyB9LFxuICAgIH0pO1xuICAgIGV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS51bnNpZ25lZFR4RXhwbGFpbmVkVHJhbnNmZXIub3V0cHV0QW1vdW50KTtcbiAgICBleHBsYWluLm91dHB1dHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS51bnNpZ25lZFR4RXhwbGFpbmVkVHJhbnNmZXIub3V0cHV0QW1vdW50KTtcbiAgICBleHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEudW5zaWduZWRUeEV4cGxhaW5lZFRyYW5zZmVyLnJlY2lwaWVudCk7XG4gICAgZXhwbGFpbi5vdXRwdXRzWzBdLm1lbW8uc2hvdWxkLmVxdWFsKHRlc3REYXRhLnVuc2lnbmVkVHhFeHBsYWluZWRUcmFuc2Zlci5tZW1vKTtcbiAgICBleHBsYWluLmZlZS5zaG91bGQuZXF1YWwodGVzdERhdGEudW5zaWduZWRUeEV4cGxhaW5lZFRyYW5zZmVyLmZlZSk7XG4gICAgZXhwbGFpbi5jaGFuZ2VBbW91bnQuc2hvdWxkLmVxdWFsKCcwJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZXhwbGFpbiBhIGNvbnRyYWN0IGNhbGwgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICB0eEhleDogdGVzdERhdGEudHhGb3JFeHBsYWluQ29udHJhY3QsXG4gICAgICBmZWVJbmZvOiB7IGZlZTogJycgfSxcbiAgICB9KTtcbiAgICBleHBsYWluLmlkLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS50eEV4cGxhaW5lZENvbnRyYWN0LmlkKTtcbiAgICBleHBsYWluLmZlZS5zaG91bGQuZXF1YWwodGVzdERhdGEudHhFeHBsYWluZWRDb250cmFjdC5mZWUpO1xuICAgIGV4cGxhaW4uY29udHJhY3RBZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS50eEV4cGxhaW5lZENvbnRyYWN0LmNvbnRyYWN0QWRkcmVzcyk7XG4gICAgZXhwbGFpbi5jb250cmFjdE5hbWUuc2hvdWxkLmVxdWFsKHRlc3REYXRhLnR4RXhwbGFpbmVkQ29udHJhY3QuY29udHJhY3ROYW1lKTtcbiAgICBleHBsYWluLmNvbnRyYWN0RnVuY3Rpb24uc2hvdWxkLmVxdWFsKHRlc3REYXRhLnR4RXhwbGFpbmVkQ29udHJhY3QuZnVuY3Rpb25OYW1lKTtcbiAgICBleHBsYWluLmNvbnRyYWN0RnVuY3Rpb25BcmdzWzBdLnR5cGUuc2hvdWxkLmVxdWFsKHRlc3REYXRhLnR4RXhwbGFpbmVkQ29udHJhY3QuZnVuY3Rpb25BcmdzWzBdLnR5cGUpO1xuICAgIGV4cGxhaW4uY29udHJhY3RGdW5jdGlvbkFyZ3NbMF0udmFsdWUudG9TdHJpbmcoKS5zaG91bGQuZXF1YWwodGVzdERhdGEudHhFeHBsYWluZWRDb250cmFjdC5mdW5jdGlvbkFyZ3NbMF0udmFsdWUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGV4cGxhaW4gYSBmdW5naWJsZSB0b2tlbiB0cmFuc2ZlciB0cmFuc2FjdGlvbiB3aXRoIG1lbW8nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICB0eEhleDogdGVzdERhdGEudHhGb3JFeHBsYWluRnVuZ2libGVUb2tlblRyYW5zZmVyLFxuICAgICAgZmVlSW5mbzogeyBmZWU6ICcnIH0sXG4gICAgfSk7XG4gICAgZXhwbGFpbi5pZC5zaG91bGQuZXF1YWwodGVzdERhdGEuZnVuZ2libGVUb2tlblRyYW5zZmVyVHguaWQpO1xuICAgIGV4cGxhaW4uZmVlLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5mdW5naWJsZVRva2VuVHJhbnNmZXJUeC5mZWUpO1xuICAgIGV4cGxhaW4ubWVtby5zaG91bGQuZXF1YWwoJzEnKTtcbiAgICBleHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEuZnVuZ2libGVUb2tlblRyYW5zZmVyVHguZnVuY3Rpb25BcmdzWzJdLnZhbHVlKTtcbiAgICBleHBsYWluLm91dHB1dHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5mdW5naWJsZVRva2VuVHJhbnNmZXJUeC5mdW5jdGlvbkFyZ3NbMl0udmFsdWUpO1xuICAgIGV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbChjdlRvU3RyaW5nKHRlc3REYXRhLmZ1bmdpYmxlVG9rZW5UcmFuc2ZlclR4LmZ1bmN0aW9uQXJnc1sxXSkpO1xuICAgIGV4cGxhaW4ub3V0cHV0c1swXS5tZW1vLnNob3VsZC5lcXVhbCgnMScpO1xuICAgIGV4cGxhaW4ub3V0cHV0c1swXS50b2tlbk5hbWUuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmZ1bmdpYmxlVG9rZW5UcmFuc2ZlclR4LnRva2VuTmFtZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZXhwbGFpbiBhIGZ1bmdpYmxlIHRva2VuIHRyYW5zZmVyIHRyYW5zYWN0aW9uIHdpdGhvdXQgbWVtbycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBleHBsYWluID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4SGV4OiB0ZXN0RGF0YS50eEZvckV4cGxhaW5GdW5naWJsZVRva2VuVHJhbnNmZXJXaXRob3V0TWVtbyxcbiAgICAgIGZlZUluZm86IHsgZmVlOiAnJyB9LFxuICAgIH0pO1xuICAgIGV4cGxhaW4uaWQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmhleFdpdGhvdXRNZW1vVHJhbnNmZXJJZCk7XG4gICAgZXhwbGFpbi5mZWUuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmZ1bmdpYmxlVG9rZW5UcmFuc2ZlclR4LmZlZSk7XG4gICAgYXNzZXJ0LmRlZXBFcXVhbChleHBsYWluLm1lbW8sIHVuZGVmaW5lZCwgJ21lbW8gc2hvdWxkIGJlIHVuZGVmaW5lZCcpO1xuICAgIGV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5mdW5naWJsZVRva2VuVHJhbnNmZXJUeC5mdW5jdGlvbkFyZ3NbMl0udmFsdWUpO1xuICAgIGV4cGxhaW4ub3V0cHV0c1swXS5hbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmZ1bmdpYmxlVG9rZW5UcmFuc2ZlclR4LmZ1bmN0aW9uQXJnc1syXS52YWx1ZSk7XG4gICAgZXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKGN2VG9TdHJpbmcodGVzdERhdGEuZnVuZ2libGVUb2tlblRyYW5zZmVyVHguZnVuY3Rpb25BcmdzWzFdKSk7XG4gICAgYXNzZXJ0LmRlZXBFcXVhbChleHBsYWluLm91dHB1dHNbMF0ubWVtbywgdW5kZWZpbmVkLCAnbWVtbyBzaG91bGQgYmUgdW5kZWZpbmVkJyk7XG4gICAgZXhwbGFpbi5vdXRwdXRzWzBdLnRva2VuTmFtZS5zaG91bGQuZXF1YWwodGVzdERhdGEuZnVuZ2libGVUb2tlblRyYW5zZmVyVHgudG9rZW5OYW1lKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0tleXBhaXJzOicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEga2V5cGFpciBmcm9tIHJhbmRvbSBzZWVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga2V5UGFpciA9IGJhc2Vjb2luLmdlbmVyYXRlS2V5UGFpcigpO1xuICAgICAga2V5UGFpci5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncHViJyk7XG4gICAgICBrZXlQYWlyLnNob3VsZC5oYXZlLnByb3BlcnR5KCdwcnYnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSBrZXlwYWlyIGZyb20gYSBzZWVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2VlZFRleHQgPVxuICAgICAgICAnODAzNTBiNDIwOGQzODFmYmZlMjI3NmEzMjY2MDMwNDlmZTUwMDczMWM0NmQzYzk5MzZiNWNlMDM2YjUxMzc3ZjI0YmFiN2RkMGMyYWY3ZjEwNzQxNmVmODU4ZmY3OWIwNjcwYzcyNDA2ZGFkMDY0ZTcyYmIxN2ZjMGE5MDM4YmInO1xuICAgICAgY29uc3Qgc2VlZCA9IEJ1ZmZlci5mcm9tKHNlZWRUZXh0LCAnaGV4Jyk7XG4gICAgICBjb25zdCBrZXlQYWlyID0gYmFzZWNvaW4uZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuICAgICAga2V5UGFpci5wdWIuc2hvdWxkLmVxdWFsKFxuICAgICAgICAneHB1YjY2MU15TXdBcVJiY0ZBd3F2U0diazM1a0pmN0NRcWROMXc0Q01VQkJUcUg1ZTNpdmpVNkQ4dWd2OWhSU2dSYlJlbkM0dzNhaFhkTFZhaHdqZ2pYaFN1UUtNZE5kbjU1WTlUTlNhZ0JrdHdzJ1xuICAgICAgKTtcbiAgICAgIGtleVBhaXIucHJ2LnNob3VsZC5lcXVhbChcbiAgICAgICAgJ3hwcnY5czIxWnJRSDE0M0syZ3NOcFFqYk51OTFrZEdpMU51V2VpOGJaNW1adVZrNm1GUG5Cdm14YjdOU0pRZGJaVzNGR3BLM1ljbjdqb3JBWGNFek12dmlHdGJ5Qno1dEJyamZuV3lRcDNnNzVGSydcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTaWduIHRyYW5zYWN0aW9uOicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHNpZ24gdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrZXkgPSBuZXcgS2V5UGFpcih7XG4gICAgICAgIHBydjogJzIxZDQzZDJhZTBkYTFkOWQwNGNmY2FhYzdkMzk3YTMzNzMzODgxMDgxZjBiMmNkMDM4MDYyY2YwY2NiYjc1MjYwMScsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uID0gJ1NUREU3WThIVjNSWDhWQk0yVFpWV0pUUzdaQTFYQjBTU0MzTkVWSDAnO1xuICAgICAgY29uc3QgYW1vdW50ID0gJzEwMDAwMCc7XG5cbiAgICAgIGNvbnN0IHVuc2lnbmVkVHJhbnNhY3Rpb24gPSBhd2FpdCBidWlsZFVuc2lnbmVkVHJhbnNhY3Rpb24oe1xuICAgICAgICBkZXN0aW5hdGlvbixcbiAgICAgICAgYW1vdW50LFxuICAgICAgICBwdWJsaWNLZXk6IGtleS5nZXRLZXlzKCkucHViLFxuICAgICAgfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJhc2Vjb2luLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgIHBydjoga2V5LmdldEtleXMoKS5wcnYhLnRvU3RyaW5nKCksXG4gICAgICAgIHB1YktleXM6IFtrZXkuZ2V0S2V5cygpLnB1Yl0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogdW5zaWduZWRUcmFuc2FjdGlvbi50b0Jyb2FkY2FzdEZvcm1hdCgpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBmYWN0b3J5ID0gbmV3IFN0eExpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldChjb2luTmFtZSkpO1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHR4LmhhbGZTaWduZWQudHhIZXgpO1xuICAgICAgY29uc3Qgc2lnbmVkVHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHNpZ25lZFR4LnRvSnNvbigpO1xuICAgICAgdHhKc29uLnBheWxvYWQudG8uc2hvdWxkLmVxdWFsKGRlc3RpbmF0aW9uKTtcbiAgICAgIHR4SnNvbi5wYXlsb2FkLmFtb3VudC5zaG91bGQuZXF1YWwoYW1vdW50KTtcbiAgICAgIHNpZ25lZFR4LnNpZ25hdHVyZS5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzaWduIG11bHRpc2lnIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga2V5MSA9IG5ldyBLZXlQYWlyKHtcbiAgICAgICAgcHJ2OiAnMjFkNDNkMmFlMGRhMWQ5ZDA0Y2ZjYWFjN2QzOTdhMzM3MzM4ODEwODFmMGIyY2QwMzgwNjJjZjBjY2JiNzUyNjAxJyxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qga2V5MiA9IG5ldyBLZXlQYWlyKHtcbiAgICAgICAgcHJ2OiAnYzcxNzAwYjA3ZDUyMGE4Yzk3MzFlNGQwZjA5NWFhNmVmYjkxZTE2ZTI1ZmIyN2NlMmI3MmU3YjY5OGY4MTI3YTAxJyxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qga2V5MyA9IG5ldyBLZXlQYWlyKHtcbiAgICAgICAgcHJ2OiAnZTc1ZGNiNjZmODQyODdlYWYzNDc5NTVlOTRmYTA0MzM3Mjk4ZGJkOTVhYTBkYmI5ODU3NzExMDRlZjE5MTNkYjAxJyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGVzdGluYXRpb24gPSAnU1RERTdZOEhWM1JYOFZCTTJUWlZXSlRTN1pBMVhCMFNTQzNORVZIMCc7XG4gICAgICBjb25zdCBhbW91bnQgPSAnMTAwMDAwJztcbiAgICAgIGNvbnN0IHB1YmxpY0tleXMgPSBba2V5MS5nZXRLZXlzKHRydWUpLnB1Yiwga2V5Mi5nZXRLZXlzKHRydWUpLnB1Yiwga2V5My5nZXRLZXlzKHRydWUpLnB1Yl07XG4gICAgICBjb25zdCB1bnNpZ25lZFRyYW5zYWN0aW9uID0gYXdhaXQgYnVpbGRtdWx0aVNpZ1Vuc2lnbmVkVHJhbnNhY3Rpb24oe1xuICAgICAgICBkZXN0aW5hdGlvbixcbiAgICAgICAgYW1vdW50LFxuICAgICAgICBwdWJsaWNLZXlzLFxuICAgICAgfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJhc2Vjb2luLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgIHBydjogW1xuICAgICAgICAgICcyMWQ0M2QyYWUwZGExZDlkMDRjZmNhYWM3ZDM5N2EzMzczMzg4MTA4MWYwYjJjZDAzODA2MmNmMGNjYmI3NTI2MDEnLFxuICAgICAgICAgICdjNzE3MDBiMDdkNTIwYThjOTczMWU0ZDBmMDk1YWE2ZWZiOTFlMTZlMjVmYjI3Y2UyYjcyZTdiNjk4ZjgxMjdhMDEnLFxuICAgICAgICBdLFxuICAgICAgICBwdWJLZXlzOiBba2V5MS5nZXRLZXlzKCkucHViLCBrZXkyLmdldEtleXMoKS5wdWIsIGtleTMuZ2V0S2V5cygpLnB1Yl0sXG4gICAgICAgIG51bWJlclNpZ25hdHVyZTogMixcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4SGV4OiB1bnNpZ25lZFRyYW5zYWN0aW9uLnRvQnJvYWRjYXN0Rm9ybWF0KCksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgU3R4TGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KGNvaW5OYW1lKSk7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odHgudHhIZXgpO1xuICAgICAgY29uc3Qgc2lnbmVkVHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHNpZ25lZFR4LnRvSnNvbigpO1xuICAgICAgdHhKc29uLnBheWxvYWQudG8uc2hvdWxkLmVxdWFsKGRlc3RpbmF0aW9uKTtcbiAgICAgIHR4SnNvbi5wYXlsb2FkLmFtb3VudC5zaG91bGQuZXF1YWwoYW1vdW50KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldFNpZ25pbmdQYXlsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSB0eCBhcyBhIGJ1ZmZlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG5vblRTU0NvaW4gPSBiaXRnby5jb2luKCd0c3R4Jyk7XG4gICAgICBjb25zdCBidWZmZXJUeCA9IGF3YWl0IG5vblRTU0NvaW4uZ2V0U2lnbmFibGVQYXlsb2FkKHRlc3REYXRhLnVuc2lnbmVkVHhGb3JFeHBsYWluVHJhbnNmZXIpO1xuICAgICAgYnVmZmVyVHguc2hvdWxkLmJlLmRlZXBFcXVhbChCdWZmZXIuZnJvbSh0ZXN0RGF0YS51bnNpZ25lZFR4Rm9yRXhwbGFpblRyYW5zZmVyKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdWZXJpZnkgVHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYWRkcmVzczEgPSAnMHgxNzRjZmQ4MjNhZjhjZTI3ZWQwYWZlZTNmY2YzYzNiYTI1OTExNmJlJztcbiAgICBjb25zdCBhZGRyZXNzMiA9ICcweDdlODViZGMyN2MwNTBlMzkwNWViZjRiOGU2MzRkOWFkNmVkZDBkZTYnO1xuICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7IHR4SGV4OiB0ZXN0RGF0YS50eEZvckV4cGxhaW5UcmFuc2ZlciwgdHhJbmZvOiB7fSB9O1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYSB0eFByZWJ1aWxkIHdpdGggbW9yZSB0aGFuIG9uZSByZWNpcGllbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlY29pbiwge30pO1xuXG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHsgYW1vdW50OiAnMTAwMDAwMDAwMDAwMCcsIGFkZHJlc3M6IGFkZHJlc3MxIH0sXG4gICAgICAgICAgeyBhbW91bnQ6ICcyNTAwMDAwMDAwMDAwJywgYWRkcmVzczogYWRkcmVzczIgfSxcbiAgICAgICAgXSxcbiAgICAgICAgd2FsbGV0OiB3YWxsZXQsXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdmYWtlV2FsbGV0UGFzc3BocmFzZScsXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcbiAgICAgICAgICBgdHN0eCBkb2Vzbid0IHN1cHBvcnQgc2VuZGluZyB0byBtb3JlIHRoYW4gMSBkZXN0aW5hdGlvbiBhZGRyZXNzIHdpdGhpbiBhIHNpbmdsZSB0cmFuc2FjdGlvbi4gVHJ5IGFnYWluLCB1c2luZyBvbmx5IGEgc2luZ2xlIHJlY2lwaWVudC5gXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCB3aGVuIHR4UHJlYnVpbGQgaXMgbWlzc2luZyB0eEhleCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCB7fSk7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW3sgYW1vdW50OiAnMTAwMCcsIGFkZHJlc3M6IHRlc3REYXRhLnR4RXhwbGFpbmVkVHJhbnNmZXIucmVjaXBpZW50IH1dLFxuICAgICAgICB3YWxsZXQsXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdmYWtlV2FsbGV0UGFzc3BocmFzZScsXG4gICAgICB9O1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQcmVidWlsZDoge30sIHR4UGFyYW1zIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdtaXNzaW5nIHJlcXVpcmVkIHR4IHByZWJ1aWxkIHByb3BlcnR5IHR4SGV4Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IGEgbmF0aXZlIFNUWCB0cmFuc2ZlciB3aXRoIG1hdGNoaW5nIHJlY2lwaWVudCBhbmQgYW1vdW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZWNvaW4sIHt9KTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogdGVzdERhdGEudHhFeHBsYWluZWRUcmFuc2Zlci5yZWNpcGllbnQsXG4gICAgICAgICAgICBhbW91bnQ6IHRlc3REYXRhLnR4RXhwbGFpbmVkVHJhbnNmZXIub3V0cHV0QW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG1lbW86IHsgdHlwZTogJycsIHZhbHVlOiB0ZXN0RGF0YS50eEV4cGxhaW5lZFRyYW5zZmVyLm1lbW8gfSxcbiAgICAgICAgd2FsbGV0LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQcmVidWlsZCwgdHhQYXJhbXMgfSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiB3aXRoIHdyb25nIHJlY2lwaWVudCBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZWNvaW4sIHt9KTtcbiAgICAgIGNvbnN0IHJlcXVlc3RlZEFkZHJlc3MgPSAnU1QxMU5KVFRLR1ZUNkQxSFk0TkpSVlFXTVFNN1RWQVIwOTFFSjhQMlknO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiByZXF1ZXN0ZWRBZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiB0ZXN0RGF0YS50eEV4cGxhaW5lZFRyYW5zZmVyLm91dHB1dEFtb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBtZW1vOiB7IHR5cGU6ICcnLCB2YWx1ZTogdGVzdERhdGEudHhFeHBsYWluZWRUcmFuc2Zlci5tZW1vIH0sXG4gICAgICAgIHdhbGxldCxcbiAgICAgIH07XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFByZWJ1aWxkLCB0eFBhcmFtcyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcbiAgICAgICAgICBgVHggZGVzdGluYXRpb24gZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcyByZWNpcGllbnQ6IGV4cGVjdGVkICR7cmVxdWVzdGVkQWRkcmVzc30gYnV0IGdvdCAke3Rlc3REYXRhLnR4RXhwbGFpbmVkVHJhbnNmZXIucmVjaXBpZW50fWBcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24gd2l0aCB3cm9uZyBhbW91bnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlY29pbiwge30pO1xuICAgICAgY29uc3QgcmVxdWVzdGVkQW1vdW50ID0gJzk5OTknO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS50eEV4cGxhaW5lZFRyYW5zZmVyLnJlY2lwaWVudCxcbiAgICAgICAgICAgIGFtb3VudDogcmVxdWVzdGVkQW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG1lbW86IHsgdHlwZTogJycsIHZhbHVlOiB0ZXN0RGF0YS50eEV4cGxhaW5lZFRyYW5zZmVyLm1lbW8gfSxcbiAgICAgICAgd2FsbGV0LFxuICAgICAgfTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UHJlYnVpbGQsIHR4UGFyYW1zIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgIGBUeCBhbW91bnQgZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcyByZWNpcGllbnQgYW1vdW50OiBleHBlY3RlZCAke3JlcXVlc3RlZEFtb3VudH0gYnV0IGdvdCAke3Rlc3REYXRhLnR4RXhwbGFpbmVkVHJhbnNmZXIub3V0cHV0QW1vdW50fWBcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24gd2l0aCB3cm9uZyBtZW1vJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZWNvaW4sIHt9KTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogdGVzdERhdGEudHhFeHBsYWluZWRUcmFuc2Zlci5yZWNpcGllbnQsXG4gICAgICAgICAgICBhbW91bnQ6IHRlc3REYXRhLnR4RXhwbGFpbmVkVHJhbnNmZXIub3V0cHV0QW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG1lbW86IHsgdHlwZTogJycsIHZhbHVlOiAnd3JvbmcgbWVtbycgfSxcbiAgICAgICAgd2FsbGV0LFxuICAgICAgfTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UHJlYnVpbGQsIHR4UGFyYW1zIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdUeCBtZW1vIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdHhQYXJhbXMgcmVjaXBpZW50IG1lbW8nKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1ZlcmlmeSBzQlRDIFdpdGhkcmF3IFRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgU3R4TGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0c3R4JykpO1xuICAgIGNvbnN0IHBydktleXNTdHJpbmcgPSByZXNvdXJjZXMucHJ2S2V5c1N0cmluZy5zbGljZSgwLCAyKTtcblxuICAgIGNvbnN0IGJ1aWxkV2l0aGRyYXdUeCA9IGFzeW5jICh3aXRoZHJhd1BhcmFtczogeyBhbW91bnQ6IHN0cmluZzsgYnRjQWRkcmVzczogc3RyaW5nOyBtYXhGZWU6IHN0cmluZyB9KSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRTYnRjV2l0aGRyYXdCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmZlZSh7IGZlZTogJzEwMDAnIH0pO1xuICAgICAgYnVpbGRlci5ub25jZSgxKTtcbiAgICAgIGNvbnN0IHB1YktleXMgPSBwcnZLZXlzU3RyaW5nLm1hcCgocHJ2KSA9PiBwdWJsaWNLZXlUb1N0cmluZyhwdWJLZXlmcm9tUHJpdktleShwcnYpKSk7XG4gICAgICBidWlsZGVyLmZyb21QdWJLZXkocHViS2V5cyk7XG4gICAgICBidWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMik7XG4gICAgICBidWlsZGVyLndpdGhkcmF3KHdpdGhkcmF3UGFyYW1zKTtcbiAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogcHJ2S2V5c1N0cmluZ1swXSB9KTtcbiAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogcHJ2S2V5c1N0cmluZ1sxXSB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgcmV0dXJuIHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgfTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgYSBtYXRjaGluZyBzQlRDIHdpdGhkcmF3YWwnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3aXRoZHJhd1BhcmFtcyA9IHtcbiAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgIGJ0Y0FkZHJlc3M6ICdiYzFwcnhsODh3NDdzcnFoNzAzcHh2NTY3cTQ3ZTdlcHp1bWU0bmx6OGNnZXdmaHR1ZW5uOG5ncWd3bTgwdycsXG4gICAgICAgIG1heEZlZTogJzEwMDAwJyxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkV2l0aGRyYXdUeCh3aXRoZHJhd1BhcmFtcyk7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgc2J0Y1dpdGhkcmF3UGFyYW1zOiB3aXRoZHJhd1BhcmFtcyxcbiAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogJ1NNMUs5VkY1R040OFEwQUMyQzdTQjhXTTVONU5SNkRZQzlWTTNRRUpFJywgYW1vdW50OiAnMTAnIH1dLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQcmVidWlsZDogeyB0eEhleCB9LCB0eFBhcmFtcyB9KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmVyaWZ5IHdpdGggd3JvbmcgYW1vdW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2l0aGRyYXdQYXJhbXMgPSB7XG4gICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICBidGNBZGRyZXNzOiAnYmMxcHJ4bDg4dzQ3c3JxaDcwM3B4djU2N3E0N2U3ZXB6dW1lNG5sejhjZ2V3Zmh0dWVubjhuZ3Fnd204MHcnLFxuICAgICAgICBtYXhGZWU6ICcxMDAwMCcsXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZFdpdGhkcmF3VHgod2l0aGRyYXdQYXJhbXMpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHNidGNXaXRoZHJhd1BhcmFtczogeyAuLi53aXRoZHJhd1BhcmFtcywgYW1vdW50OiAnOTk5OScgfSxcbiAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogJ1NNMUs5VkY1R040OFEwQUMyQzdTQjhXTTVONU5SNkRZQzlWTTNRRUpFJywgYW1vdW50OiAnMTAnIH1dLFxuICAgICAgfTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UHJlYnVpbGQ6IHsgdHhIZXggfSwgdHhQYXJhbXMgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3NCVEMgd2l0aGRyYXdhbCBhbW91bnQgZG9lcyBub3QgbWF0Y2gvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgd2l0aCB3cm9uZyBtYXhGZWUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3aXRoZHJhd1BhcmFtcyA9IHtcbiAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgIGJ0Y0FkZHJlc3M6ICdiYzFwcnhsODh3NDdzcnFoNzAzcHh2NTY3cTQ3ZTdlcHp1bWU0bmx6OGNnZXdmaHR1ZW5uOG5ncWd3bTgwdycsXG4gICAgICAgIG1heEZlZTogJzEwMDAwJyxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkV2l0aGRyYXdUeCh3aXRoZHJhd1BhcmFtcyk7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgc2J0Y1dpdGhkcmF3UGFyYW1zOiB7IC4uLndpdGhkcmF3UGFyYW1zLCBtYXhGZWU6ICcxJyB9LFxuICAgICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiAnU00xSzlWRjVHTjQ4UTBBQzJDN1NCOFdNNU41TlI2RFlDOVZNM1FFSkUnLCBhbW91bnQ6ICcxMCcgfV0sXG4gICAgICB9O1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQcmVidWlsZDogeyB0eEhleCB9LCB0eFBhcmFtcyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvc0JUQyB3aXRoZHJhd2FsIG1heEZlZSBkb2VzIG5vdCBtYXRjaC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSB3aXRoIHdyb25nIGJ0Y0FkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3aXRoZHJhd1BhcmFtcyA9IHtcbiAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgIGJ0Y0FkZHJlc3M6ICdiYzFwcnhsODh3NDdzcnFoNzAzcHh2NTY3cTQ3ZTdlcHp1bWU0bmx6OGNnZXdmaHR1ZW5uOG5ncWd3bTgwdycsXG4gICAgICAgIG1heEZlZTogJzEwMDAwJyxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkV2l0aGRyYXdUeCh3aXRoZHJhd1BhcmFtcyk7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgc2J0Y1dpdGhkcmF3UGFyYW1zOiB7IC4uLndpdGhkcmF3UGFyYW1zLCBidGNBZGRyZXNzOiAnMUJ2Qk1TRVlzdFdldHFURm41QXU0bTRHRmc3eEphTlZOMicgfSxcbiAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogJ1NNMUs5VkY1R040OFEwQUMyQzdTQjhXTTVONU5SNkRZQzlWTTNRRUpFJywgYW1vdW50OiAnMTAnIH1dLFxuICAgICAgfTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UHJlYnVpbGQ6IHsgdHhIZXggfSwgdHhQYXJhbXMgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3NCVEMgd2l0aGRyYXdhbCBidGNBZGRyZXNzIGRvZXMgbm90IG1hdGNoLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdSZWNvdmVyIFRyYW5zYWN0aW9uIFNUWCcsIGZ1bmN0aW9uICgpIHtcbiAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5lbmFibGVOZXRDb25uZWN0KCk7XG4gICAgfSk7XG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgfSk7XG4gICAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5kaXNhYmxlTmV0Q29ubmVjdCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhIHNpZ25lZCByZWNvdmVyIHRyYW5zYWN0aW9uIHdoZW4gcHJpdmF0ZSBrZXkgZGF0YSBpcyBwYXNzZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByb290QWRkcmVzcyA9IHRlc3REYXRhLkhPVF9XQUxMRVRfUk9PVF9BRERSRVNTO1xuICAgICAgbm9jayhgaHR0cHM6Ly9hcGkudGVzdG5ldC5oaXJvLnNvYClcbiAgICAgICAgLmdldChgL2V4dGVuZGVkL3YyL2FkZHJlc3Nlcy8ke3Jvb3RBZGRyZXNzfS9iYWxhbmNlcy9zdHhgKVxuICAgICAgICAucmVwbHkoMjAwLCB0ZXN0RGF0YS5BQ0NPVU5UX0JBTEFOQ0VfUkVTUE9OU0UpO1xuICAgICAgbm9jayhgaHR0cHM6Ly9hcGkudGVzdG5ldC5oaXJvLnNvYClcbiAgICAgICAgLmdldChgL2V4dGVuZGVkL3YxL2FkZHJlc3MvJHtyb290QWRkcmVzc30vbm9uY2VzYClcbiAgICAgICAgLnJlcGx5KDIwMCwgdGVzdERhdGEuQUNDT1VOVF9OT05DRV9SRVNQT05TRSk7XG4gICAgICBub2NrKGBodHRwczovL2FwaS50ZXN0bmV0Lmhpcm8uc29gLCB7IGFsbG93VW5tb2NrZWQ6IHRydWUgfSlcbiAgICAgICAgLnBvc3QoYC92Mi9mZWVzL3RyYW5zYWN0aW9uYCwgdGVzdERhdGEuRkVFX0VTVElNQVRJT05fUkVRVUVTVClcbiAgICAgICAgLnJlcGx5KDIwMCwgdGVzdERhdGEuRkVFX0VTVElNQVRJT05fUkVTUE9OU0UpO1xuXG4gICAgICBjb25zdCByZWNvdmVyeU9wdGlvbnM6IFJlY292ZXJ5T3B0aW9ucyA9IHtcbiAgICAgICAgYmFja3VwS2V5OiB0ZXN0RGF0YS5IT1RfV0FMTEVUX0tFWV9DQVJEX0lORk8uQkFDS1VQX0tFWSxcbiAgICAgICAgdXNlcktleTogdGVzdERhdGEuSE9UX1dBTExFVF9LRVlfQ0FSRF9JTkZPLlVTRVJfS0VZLFxuICAgICAgICByb290QWRkcmVzczogcm9vdEFkZHJlc3MsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IHRlc3REYXRhLkRFU1RJTkFUSU9OX0FERFJFU1NfV1JXLFxuICAgICAgICBiaXRnb0tleTogdGVzdERhdGEuSE9UX1dBTExFVF9LRVlfQ0FSRF9JTkZPLkJJVEdPX1BVQl9LRVksXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHRlc3REYXRhLkhPVF9XQUxMRVRfS0VZX0NBUkRfSU5GTy5XQUxMRVRfUEFTU1BIUkFTRSxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXNwb25zZTogUmVjb3ZlcnlUcmFuc2FjdGlvbiA9IGF3YWl0IGJhc2Vjb2luLnJlY292ZXIocmVjb3ZlcnlPcHRpb25zKTtcbiAgICAgIHJlc3BvbnNlLnNob3VsZC5oYXZlLnByb3BlcnR5KCd0eEhleCcpO1xuICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyZXNwb25zZS50eEhleCwgdGVzdERhdGEuSE9UX1dBTExFVF9SRUNPVkVSWV9UWF9IRVgsICd0eCBoZXggbm90IG1hdGNoaW5nIScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhbiB1bnNpZ25lZCB0cmFuc2FjdGlvbiB3aGVuIHB1YmxpYyBrZXlzIGFyZSBwYXNzZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByb290QWRkcmVzcyA9IHRlc3REYXRhLkNPTERfV0FMTEVUX1JPT1RfQUREUkVTUztcbiAgICAgIG5vY2soYGh0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zb2ApXG4gICAgICAgIC5nZXQoYC9leHRlbmRlZC92Mi9hZGRyZXNzZXMvJHtyb290QWRkcmVzc30vYmFsYW5jZXMvc3R4YClcbiAgICAgICAgLnJlcGx5KDIwMCwgdGVzdERhdGEuQUNDT1VOVF9CQUxBTkNFX1JFU1BPTlNFKTtcbiAgICAgIG5vY2soYGh0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zb2ApXG4gICAgICAgIC5nZXQoYC9leHRlbmRlZC92MS9hZGRyZXNzLyR7cm9vdEFkZHJlc3N9L25vbmNlc2ApXG4gICAgICAgIC5yZXBseSgyMDAsIHRlc3REYXRhLkFDQ09VTlRfTk9OQ0VfUkVTUE9OU0UpO1xuICAgICAgbm9jayhgaHR0cHM6Ly9hcGkudGVzdG5ldC5oaXJvLnNvYCwgeyBhbGxvd1VubW9ja2VkOiB0cnVlIH0pXG4gICAgICAgIC5wb3N0KGAvdjIvZmVlcy90cmFuc2FjdGlvbmAsIHRlc3REYXRhLkZFRV9FU1RJTUFUSU9OX1JFUVVFU1QpXG4gICAgICAgIC5yZXBseSgyMDAsIHRlc3REYXRhLkZFRV9FU1RJTUFUSU9OX1JFU1BPTlNFKTtcblxuICAgICAgY29uc3QgcmVjb3ZlcnlPcHRpb25zOiBSZWNvdmVyeU9wdGlvbnMgPSB7XG4gICAgICAgIGJhY2t1cEtleTogdGVzdERhdGEuQ09MRF9XQUxMRVRfUFVCTElDX0tFWV9JTkZPLkJBQ0tVUF9LRVksXG4gICAgICAgIHVzZXJLZXk6IHRlc3REYXRhLkNPTERfV0FMTEVUX1BVQkxJQ19LRVlfSU5GTy5VU0VSX0tFWSxcbiAgICAgICAgcm9vdEFkZHJlc3M6IHJvb3RBZGRyZXNzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiB0ZXN0RGF0YS5ERVNUSU5BVElPTl9BRERSRVNTX1dSVyxcbiAgICAgICAgYml0Z29LZXk6IHRlc3REYXRhLkNPTERfV0FMTEVUX1BVQkxJQ19LRVlfSU5GTy5CSVRHT19QVUJfS0VZLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBSZWNvdmVyeUluZm8gPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHJlY292ZXJ5T3B0aW9ucyk7XG4gICAgICByZXNwb25zZS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHhIZXgnKTtcbiAgICAgIHJlc3BvbnNlLnNob3VsZC5oYXZlLnByb3BlcnR5KCdjb2luJyk7XG4gICAgICByZXNwb25zZS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZmVlSW5mbycpO1xuICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyZXNwb25zZS50eEhleCwgdGVzdERhdGEuQ09MRF9XQUxMRVRfVU5TSUdORURfU1dFRVBfVFhfSEVYLCAndHggaGV4IG5vdCBtYXRjaGluZyEnKTtcbiAgICAgIGFzc2VydC5kZWVwRXF1YWwocmVzcG9uc2UuY29pbiwgJ3RzdHgnLCAnY29pbiBub3QgbWF0Y2hpbmchJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGludmFsaWQgcm9vdCBhZGRyZXNzIHdoZW4gcm9vdCBhZGRyZXNzIGlzIG1pc3Npbmcgb3IgaW52YWxpZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlY292ZXJ5T3B0aW9uczogUmVjb3ZlcnlPcHRpb25zID0ge1xuICAgICAgICBiYWNrdXBLZXk6IHRlc3REYXRhLkNPTERfV0FMTEVUX1BVQkxJQ19LRVlfSU5GTy5CQUNLVVBfS0VZLFxuICAgICAgICB1c2VyS2V5OiB0ZXN0RGF0YS5DT0xEX1dBTExFVF9QVUJMSUNfS0VZX0lORk8uVVNFUl9LRVksXG4gICAgICAgIHJvb3RBZGRyZXNzOiAnJyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogdGVzdERhdGEuREVTVElOQVRJT05fQUREUkVTU19XUlcsXG4gICAgICAgIGJpdGdvS2V5OiB0ZXN0RGF0YS5DT0xEX1dBTExFVF9QVUJMSUNfS0VZX0lORk8uQklUR09fUFVCX0tFWSxcbiAgICAgIH07XG4gICAgICBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHJlY292ZXJ5T3B0aW9ucykuc2hvdWxkLnJlamVjdGVkV2l0aCgnaW52YWxpZCByb290IGFkZHJlc3MhJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGludmFsaWQgZGVzdGluYXRpb24gYWRkcmVzcyB3aGVuIGRlc3RpbmF0aW9uIGFkZHJlc3MgaXMgbWlzc2luZyBvciBpbnZhbGlkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVjb3ZlcnlPcHRpb25zOiBSZWNvdmVyeU9wdGlvbnMgPSB7XG4gICAgICAgIGJhY2t1cEtleTogdGVzdERhdGEuQ09MRF9XQUxMRVRfUFVCTElDX0tFWV9JTkZPLkJBQ0tVUF9LRVksXG4gICAgICAgIHVzZXJLZXk6IHRlc3REYXRhLkNPTERfV0FMTEVUX1BVQkxJQ19LRVlfSU5GTy5VU0VSX0tFWSxcbiAgICAgICAgcm9vdEFkZHJlc3M6IHRlc3REYXRhLkNPTERfV0FMTEVUX1JPT1RfQUREUkVTUyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogJycsXG4gICAgICAgIGJpdGdvS2V5OiB0ZXN0RGF0YS5DT0xEX1dBTExFVF9QVUJMSUNfS0VZX0lORk8uQklUR09fUFVCX0tFWSxcbiAgICAgIH07XG4gICAgICBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHJlY292ZXJ5T3B0aW9ucykuc2hvdWxkLnJlamVjdGVkV2l0aCgnaW52YWxpZCBkZXN0aW5hdGlvbiBhZGRyZXNzIScpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgZmFpbCB3aXRoIG5vIGJhbGFuY2Ugd2hlbiByb290IGFkZHJlc3MgZG9lc24ndCBoYXZlIGJhbGFuY2VcIiwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgcm9vdEFkZHJlc3MgPSB0ZXN0RGF0YS5IT1RfV0FMTEVUX1JPT1RfQUREUkVTUztcbiAgICAgIGNvbnN0IHN0eEJhbGFuY2UgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRlc3REYXRhLkFDQ09VTlRfQkFMQU5DRV9SRVNQT05TRSkpO1xuICAgICAgc3R4QmFsYW5jZS5iYWxhbmNlID0gJzAnO1xuICAgICAgbm9jayhgaHR0cHM6Ly9hcGkudGVzdG5ldC5oaXJvLnNvYClcbiAgICAgICAgLmdldChgL2V4dGVuZGVkL3YyL2FkZHJlc3Nlcy8ke3Jvb3RBZGRyZXNzfS9iYWxhbmNlcy9zdHhgKVxuICAgICAgICAucmVwbHkoMjAwLCBzdHhCYWxhbmNlKTtcbiAgICAgIG5vY2soYGh0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zb2ApXG4gICAgICAgIC5nZXQoYC9leHRlbmRlZC92MS9hZGRyZXNzLyR7cm9vdEFkZHJlc3N9L25vbmNlc2ApXG4gICAgICAgIC5yZXBseSgyMDAsIHRlc3REYXRhLkFDQ09VTlRfTk9OQ0VfUkVTUE9OU0UpO1xuICAgICAgY29uc3QgcmVjb3ZlcnlPcHRpb25zOiBSZWNvdmVyeU9wdGlvbnMgPSB7XG4gICAgICAgIGJhY2t1cEtleTogdGVzdERhdGEuSE9UX1dBTExFVF9LRVlfQ0FSRF9JTkZPLkJBQ0tVUF9LRVksXG4gICAgICAgIHVzZXJLZXk6IHRlc3REYXRhLkhPVF9XQUxMRVRfS0VZX0NBUkRfSU5GTy5VU0VSX0tFWSxcbiAgICAgICAgcm9vdEFkZHJlc3M6IHJvb3RBZGRyZXNzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiB0ZXN0RGF0YS5ERVNUSU5BVElPTl9BRERSRVNTX1dSVyxcbiAgICAgICAgYml0Z29LZXk6IHRlc3REYXRhLkhPVF9XQUxMRVRfS0VZX0NBUkRfSU5GTy5CSVRHT19QVUJfS0VZLFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiB0ZXN0RGF0YS5IT1RfV0FMTEVUX0tFWV9DQVJEX0lORk8uV0FMTEVUX1BBU1NQSFJBU0UsXG4gICAgICB9O1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnJlY292ZXIocmVjb3ZlcnlPcHRpb25zKVxuICAgICAgICAuc2hvdWxkLnJlamVjdGVkV2l0aChgY291bGQgbm90IGZpbmQgYW55IGJhbGFuY2UgdG8gcmVjb3ZlciBmb3IgJHtyb290QWRkcmVzc31gKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB3aXRoIGluc3VmZmljaWVudCBiYWxhbmNlIHdoZW4gc3R4IGJhbGFuY2UgaXMgbG93ZXIgdGhhbiBmZWUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByb290QWRkcmVzcyA9IHRlc3REYXRhLkhPVF9XQUxMRVRfUk9PVF9BRERSRVNTO1xuICAgICAgLy8gZGVlcCBjbG9uZSB0byBzdG9wIG11dGF0aW9uXG4gICAgICBjb25zdCBhY2NvdW50QmFsYW5jZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGVzdERhdGEuQUNDT1VOVF9CQUxBTkNFX1JFU1BPTlNFKSk7XG4gICAgICBhY2NvdW50QmFsYW5jZS5iYWxhbmNlID0gJzEwMCc7IC8vIHNldCBiYWxhbmNlIGxvd2VyIHRoYW4gZmVlXG4gICAgICBub2NrKGBodHRwczovL2FwaS50ZXN0bmV0Lmhpcm8uc29gKVxuICAgICAgICAuZ2V0KGAvZXh0ZW5kZWQvdjIvYWRkcmVzc2VzLyR7cm9vdEFkZHJlc3N9L2JhbGFuY2VzL3N0eGApXG4gICAgICAgIC5yZXBseSgyMDAsIGFjY291bnRCYWxhbmNlKTtcbiAgICAgIG5vY2soYGh0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zb2ApXG4gICAgICAgIC5nZXQoYC9leHRlbmRlZC92MS9hZGRyZXNzLyR7cm9vdEFkZHJlc3N9L25vbmNlc2ApXG4gICAgICAgIC5yZXBseSgyMDAsIHRlc3REYXRhLkFDQ09VTlRfTk9OQ0VfUkVTUE9OU0UpO1xuICAgICAgY29uc3QgZmVlUmVxdWVzdEJvZHkgPSB0ZXN0RGF0YS5GRUVfRVNUSU1BVElPTl9SRVFVRVNUO1xuICAgICAgZmVlUmVxdWVzdEJvZHkudHJhbnNhY3Rpb25fcGF5bG9hZCA9XG4gICAgICAgICcwMDA1MWExNTAwYTFjNDJmMGMxMWJmZTM4OTNmNDc5YWYxODkwNDY3NzY4NWJlMDAwMDAwMDAwMDAwMDA2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJztcbiAgICAgIG5vY2soYGh0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zb2AsIHsgYWxsb3dVbm1vY2tlZDogdHJ1ZSB9KVxuICAgICAgICAucG9zdChgL3YyL2ZlZXMvdHJhbnNhY3Rpb25gLCBmZWVSZXF1ZXN0Qm9keSlcbiAgICAgICAgLnJlcGx5KDIwMCwgdGVzdERhdGEuRkVFX0VTVElNQVRJT05fUkVTUE9OU0UpO1xuICAgICAgY29uc3QgcmVjb3ZlcnlPcHRpb25zOiBSZWNvdmVyeU9wdGlvbnMgPSB7XG4gICAgICAgIGJhY2t1cEtleTogdGVzdERhdGEuSE9UX1dBTExFVF9LRVlfQ0FSRF9JTkZPLkJBQ0tVUF9LRVksXG4gICAgICAgIHVzZXJLZXk6IHRlc3REYXRhLkhPVF9XQUxMRVRfS0VZX0NBUkRfSU5GTy5VU0VSX0tFWSxcbiAgICAgICAgcm9vdEFkZHJlc3M6IHJvb3RBZGRyZXNzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiB0ZXN0RGF0YS5ERVNUSU5BVElPTl9BRERSRVNTX1dSVyxcbiAgICAgICAgYml0Z29LZXk6IHRlc3REYXRhLkhPVF9XQUxMRVRfS0VZX0NBUkRfSU5GTy5CSVRHT19QVUJfS0VZLFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiB0ZXN0RGF0YS5IT1RfV0FMTEVUX0tFWV9DQVJEX0lORk8uV0FMTEVUX1BBU1NQSFJBU0UsXG4gICAgICB9O1xuICAgICAgYXdhaXQgYmFzZWNvaW4ucmVjb3ZlcihyZWNvdmVyeU9wdGlvbnMpLnNob3VsZC5yZWplY3RlZFdpdGgoJ2luc3VmZmljaWVudCBiYWxhbmNlIHRvIGJ1aWxkIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|