@bitgo/sdk-coin-stx 4.2.2 → 4.4.0
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/abstractContractBuilder.d.ts +16 -0
- package/dist/src/lib/abstractContractBuilder.d.ts.map +1 -1
- package/dist/src/lib/abstractContractBuilder.js +30 -1
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +7 -1
- package/dist/src/stx.d.ts.map +1 -1
- package/dist/src/stx.js +7 -7
- package/dist/test/unit/registerForBondRealArgs.d.ts +2 -0
- package/dist/test/unit/registerForBondRealArgs.d.ts.map +1 -0
- package/dist/test/unit/registerForBondRealArgs.js +22 -0
- package/dist/test/unit/stx.js +42 -4
- package/dist/test/unit/transactionBuilder/pox5Builder.js +47 -1
- package/dist/test/unit/util.js +15 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
package/dist/test/unit/stx.js
CHANGED
|
@@ -45,6 +45,7 @@ const statics_1 = require("@bitgo/statics");
|
|
|
45
45
|
const transactions_1 = require("@stacks/transactions");
|
|
46
46
|
const testData = __importStar(require("../fixtures"));
|
|
47
47
|
const resources = __importStar(require("./resources"));
|
|
48
|
+
const registerForBondRealArgs_1 = require("./registerForBondRealArgs");
|
|
48
49
|
const src_1 = require("../../src");
|
|
49
50
|
const { KeyPair } = src_1.StxLib;
|
|
50
51
|
describe('STX:', function () {
|
|
@@ -208,6 +209,27 @@ describe('STX:', function () {
|
|
|
208
209
|
explain.contractFunctionArgs[0].type.should.equal(testData.txExplainedContract.functionArgs[0].type);
|
|
209
210
|
explain.contractFunctionArgs[0].value.toString().should.equal(testData.txExplainedContract.functionArgs[0].value);
|
|
210
211
|
});
|
|
212
|
+
it('explains a register-for-bond transaction with JSON-serialisable contractFunctionArgs (SI-1922)', async function () {
|
|
213
|
+
const factory = new src_1.StxLib.TransactionBuilderFactory(statics_1.coins.get(coinNameTest));
|
|
214
|
+
const functionArgs = registerForBondRealArgs_1.pox5RegisterForBondArgsHex.map((hex) => (0, transactions_1.deserializeCV)(Buffer.from(hex.replace(/^0x/, ''), 'hex')));
|
|
215
|
+
const builder = factory.getPox5Builder();
|
|
216
|
+
builder.fee({ fee: '18810' });
|
|
217
|
+
builder.nonce(0);
|
|
218
|
+
builder.fromPubKey(resources.TX_SENDER.pub);
|
|
219
|
+
builder.numberSignatures(1);
|
|
220
|
+
builder.functionName('register-for-bond');
|
|
221
|
+
builder.functionArgs(functionArgs);
|
|
222
|
+
const tx = await builder.build();
|
|
223
|
+
const explain = await basecoin.explainTransaction({
|
|
224
|
+
txHex: tx.toBroadcastFormat(),
|
|
225
|
+
publicKeys: [resources.TX_SENDER.pub],
|
|
226
|
+
feeInfo: { fee: '' },
|
|
227
|
+
});
|
|
228
|
+
explain.contractName.should.equal('pox-5');
|
|
229
|
+
explain.contractFunction.should.equal('register-for-bond');
|
|
230
|
+
// the second consumer of these args (explainTransaction) must also be JSON-serialisable
|
|
231
|
+
assert_1.default.doesNotThrow(() => JSON.stringify(explain.contractFunctionArgs));
|
|
232
|
+
});
|
|
211
233
|
it('should explain a fungible token transfer transaction with memo', async function () {
|
|
212
234
|
const explain = await basecoin.explainTransaction({
|
|
213
235
|
txHex: testData.txForExplainFungibleTokenTransfer,
|
|
@@ -588,9 +610,7 @@ describe('STX:', function () {
|
|
|
588
610
|
bitgoKey: testData.HOT_WALLET_KEY_CARD_INFO.BITGO_PUB_KEY,
|
|
589
611
|
walletPassphrase: testData.HOT_WALLET_KEY_CARD_INFO.WALLET_PASSPHRASE,
|
|
590
612
|
};
|
|
591
|
-
await basecoin
|
|
592
|
-
.recover(recoveryOptions)
|
|
593
|
-
.should.rejectedWith(`could not find any balance to recover for ${rootAddress}`);
|
|
613
|
+
await basecoin.recover(recoveryOptions).should.rejectedWith(sdk_core_1.ErrorNoInputToRecover);
|
|
594
614
|
});
|
|
595
615
|
it('should fail with insufficient balance when stx balance is lower than fee', async function () {
|
|
596
616
|
const rootAddress = testData.HOT_WALLET_ROOT_ADDRESS;
|
|
@@ -619,6 +639,24 @@ describe('STX:', function () {
|
|
|
619
639
|
};
|
|
620
640
|
await basecoin.recover(recoveryOptions).should.rejectedWith('insufficient balance to build the transaction');
|
|
621
641
|
});
|
|
642
|
+
it('should throw RecoveryProviderError when the node fails to return the stx balance', async function () {
|
|
643
|
+
const rootAddress = testData.HOT_WALLET_ROOT_ADDRESS;
|
|
644
|
+
(0, nock_1.default)(`https://api.testnet.hiro.so`)
|
|
645
|
+
.get(`/extended/v2/addresses/${rootAddress}/balances/stx`)
|
|
646
|
+
.reply(500, { error: 'node unavailable' });
|
|
647
|
+
(0, nock_1.default)(`https://api.testnet.hiro.so`)
|
|
648
|
+
.get(`/extended/v1/address/${rootAddress}/nonces`)
|
|
649
|
+
.reply(200, testData.ACCOUNT_NONCE_RESPONSE);
|
|
650
|
+
const recoveryOptions = {
|
|
651
|
+
backupKey: testData.HOT_WALLET_KEY_CARD_INFO.BACKUP_KEY,
|
|
652
|
+
userKey: testData.HOT_WALLET_KEY_CARD_INFO.USER_KEY,
|
|
653
|
+
rootAddress: rootAddress,
|
|
654
|
+
recoveryDestination: testData.DESTINATION_ADDRESS_WRW,
|
|
655
|
+
bitgoKey: testData.HOT_WALLET_KEY_CARD_INFO.BITGO_PUB_KEY,
|
|
656
|
+
walletPassphrase: testData.HOT_WALLET_KEY_CARD_INFO.WALLET_PASSPHRASE,
|
|
657
|
+
};
|
|
658
|
+
await basecoin.recover(recoveryOptions).should.rejectedWith(sdk_core_1.RecoveryProviderError);
|
|
659
|
+
});
|
|
622
660
|
});
|
|
623
661
|
});
|
|
624
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L3N0eC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixnREFBd0I7QUFFeEIsNENBQTBDO0FBQzFDLDhDQUF5QztBQUN6Qyw4Q0FBMEQ7QUFDMUQsNENBQXVDO0FBQ3ZDLHVEQUF3RjtBQUV4RixzREFBd0M7QUFDeEMsdURBQXlDO0FBQ3pDLG1DQUE4QztBQUc5QyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsWUFBTSxDQUFDO0FBRTNCLFFBQVEsQ0FBQyxNQUFNLEVBQUU7SUFDZixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDdkIsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDO0lBQzVCLElBQUksS0FBbUIsQ0FBQztJQUN4QixJQUFJLFFBQVEsQ0FBQztJQUViLE1BQU0saUJBQWlCLEdBQUc7UUFDeEIsRUFBRTtRQUNGLElBQUk7UUFDSixLQUFLO1FBQ0wsMENBQTBDO1FBQzFDLDJDQUEyQztLQUM1QyxDQUFDO0lBRUYsTUFBTSxhQUFhLEdBQUc7UUFDcEIsMENBQTBDO1FBQzFDLDJDQUEyQztRQUMzQywyQ0FBMkM7UUFDM0MsMkNBQTJDO1FBQzNDLG9EQUFvRDtRQUNwRCxvREFBb0Q7S0FDckQsQ0FBQztJQUVGLE1BQU0sQ0FBQztRQUNMLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFO1lBQ25DLEdBQUcsRUFBRSxNQUFNO1NBQ1osQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDM0IsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsU0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzlDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFVBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNo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dXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBub2NrIGZyb20gJ25vY2snO1xuXG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstYXBpJztcbmltcG9ydCB7IFdhbGxldCB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBUZXN0Qml0R28sIFRlc3RCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstdGVzdCc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IGN2VG9TdHJpbmcsIHB1YktleWZyb21Qcml2S2V5LCBwdWJsaWNLZXlUb1N0cmluZyB9IGZyb20gJ0BzdGFja3MvdHJhbnNhY3Rpb25zJztcblxuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vZml4dHVyZXMnO1xuaW1wb3J0ICogYXMgcmVzb3VyY2VzIGZyb20gJy4vcmVzb3VyY2VzJztcbmltcG9ydCB7IFN0eCwgU3R4TGliLCBUc3R4IH0gZnJvbSAnLi4vLi4vc3JjJztcbmltcG9ydCB7IFJlY292ZXJ5SW5mbywgUmVjb3ZlcnlPcHRpb25zLCBSZWNvdmVyeVRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi9pZmFjZSc7XG5cbmNvbnN0IHsgS2V5UGFpciB9ID0gU3R4TGliO1xuXG5kZXNjcmliZSgnU1RYOicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgY29pbk5hbWUgPSAnc3R4JztcbiAgY29uc3QgY29pbk5hbWVUZXN0ID0gJ3RzdHgnO1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgbGV0IGJhc2Vjb2luO1xuXG4gIGNvbnN0IGJhZFZhbGlkQWRkcmVzc2VzID0gW1xuICAgICcnLFxuICAgIG51bGwsXG4gICAgJ2FiYycsXG4gICAgJ1NQMjQ0SFlQWUFUMkJCMlFFNTEzTlNQODFIVE1ZV0JKUDAySFBHSzYnLFxuICAgICdTVDFUNzU4SzZUMllSS0c5UTBUSjE2QjZGUDVRUVJFV1pTRVNSUzBQWScsXG4gIF07XG5cbiAgY29uc3QgZ29vZEFkZHJlc3NlcyA9IFtcbiAgICAnU1RCNDRIWVBZQVQyQkIyUUU1MTNOU1A4MUhUTVlXQkpQMDJIUEdLNicsXG4gICAgJ1NUMTFOSlRUS0dWVDZEMUhZNE5KUlZRV01RTTdUVkFSMDkxRUo4UDJZJyxcbiAgICAnU1AyVDc1OEs2VDJZUktHOVEwVEoxNkI2RlA1UVFSRVdaU0VTUlMwUFknLFxuICAgICdTTTNXNVFGV0dQRzFKQzhSMjVFVlpERVAzQkVTSlo4MzFKUE5OUUZUWicsXG4gICAgJ1NNM1c1UUZXR1BHMUpDOFIyNUVWWkRFUDNCRVNKWjgzMUpQTk5RRlRaP21lbW9JZD0xJyxcbiAgICAnU1QxV1ZKTVM1VlM0MUYwWU1IN0QyTTBWSFhSRzRDWTQzWkpaQlM2MEE/bWVtb0lkPTQnLFxuICBdO1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHtcbiAgICAgIGVudjogJ21vY2snLFxuICAgIH0pO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3Rlcignc3R4JywgU3R4LmNyZWF0ZUluc3RhbmNlKTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3RzdHgnLCBUc3R4LmNyZWF0ZUluc3RhbmNlKTtcbiAgICBiYXNlY29pbiA9IGJpdGdvLmNvaW4oY29pbk5hbWVUZXN0KTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFuIHVuc2lnbmVkIGFjY291bnQtbGliIHNpZ25sZS1zaWduYXR1cmUgc2VuZCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gZGVzdGluYXRpb24gVGhlIGRlc3RpbmF0aW9uIGFkZHJlc3Mgb2YgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBhbW91bnQgVGhlIGFtb3VudCB0byBzZW5kIHRvIHRoZSByZWNpcGllbnRcbiAgICovXG4gIGNvbnN0IGJ1aWxkVW5zaWduZWRUcmFuc2FjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uICh7IGRlc3RpbmF0aW9uLCBhbW91bnQgPSAnMTAwMDAwJywgcHVibGljS2V5LCBtZW1vID0gJycgfSkge1xuICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgU3R4TGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KGNvaW5OYW1lKSk7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuZmVlKHtcbiAgICAgIGZlZTogJzE4MCcsXG4gICAgfSk7XG4gICAgdHhCdWlsZGVyLnRvKGRlc3RpbmF0aW9uKTtcbiAgICB0eEJ1aWxkZXIuYW1vdW50KGFtb3VudCk7XG4gICAgdHhCdWlsZGVyLm5vbmNlKDEpO1xuICAgIHR4QnVpbGRlci5mcm9tUHViS2V5KHB1YmxpY0tleSk7XG4gICAgdHhCdWlsZGVyLm1lbW8obWVtbyk7XG4gICAgdHhCdWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMSk7XG4gICAgcmV0dXJuIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBCdWlsZCBhbiB1bnNpZ25lZCBhY2NvdW50LWxpYiBtdWx0aS1zaWduYXR1cmUgc2VuZCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gZGVzdGluYXRpb24gVGhlIGRlc3RpbmF0aW9uIGFkZHJlc3Mgb2YgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBhbW91bnQgVGhlIGFtb3VudCB0byBzZW5kIHRvIHRoZSByZWNpcGllbnRcbiAgICovXG4gIGNvbnN0IGJ1aWxkbXVsdGlTaWdVbnNpZ25lZFRyYW5zYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gKHsgZGVzdGluYXRpb24sIGFtb3VudCA9ICcxMDAwMDAnLCBwdWJsaWNLZXlzLCBtZW1vID0gJycgfSkge1xuICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgU3R4TGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KGNvaW5OYW1lKSk7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuZmVlKHtcbiAgICAgIGZlZTogJzE4MCcsXG4gICAgfSk7XG4gICAgdHhCdWlsZGVyLnRvKGRlc3RpbmF0aW9uKTtcbiAgICB0eEJ1aWxkZXIuYW1vdW50KGFtb3VudCk7XG4gICAgdHhCdWlsZGVyLm5vbmNlKDEpO1xuICAgIHR4QnVpbGRlci5mcm9tUHViS2V5KHB1YmxpY0tleXMpO1xuICAgIHR4QnVpbGRlci5udW1iZXJTaWduYXR1cmVzKDIpO1xuICAgIHR4QnVpbGRlci5tZW1vKG1lbW8pO1xuICAgIHJldHVybiBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgfTtcblxuICBpdCgnc2hvdWxkIGluc3RhbnRpYXRlIHRoZSBjb2luJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBsb2NhbEJhc2Vjb2luID0gYml0Z28uY29pbigndHN0eCcpO1xuICAgIGxvY2FsQmFzZWNvaW4uc2hvdWxkLmJlLmFuLmluc3RhbmNlb2YoVHN0eCk7XG5cbiAgICBsb2NhbEJhc2Vjb2luID0gYml0Z28uY29pbignc3R4Jyk7XG4gICAgbG9jYWxCYXNlY29pbi5zaG91bGQuYmUuYW4uaW5zdGFuY2VvZihTdHgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGNoZWNrIHZhbGlkIGFkZHJlc3NlcycsIGZ1bmN0aW9uICgpIHtcbiAgICBiYWRWYWxpZEFkZHJlc3Nlcy5tYXAoKGFkZHIpID0+IHtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKGFkZHIpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG4gICAgZ29vZEFkZHJlc3Nlcy5tYXAoKGFkZHIpID0+IHtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKGFkZHIpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2ZXJpZnkgaXNXYWxsZXRBZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHVzZXJLZXkgPSB7XG4gICAgICBwdWI6ICd4cHViNjYxTXlNd0FxUmJjR1MySE1kdkFOTjdvOEVTV3F3dnI1VTRyeTVmWmREOVZIaHltV3lmb0RRRjR2emZLb3RYZ0d0SlRyd3JGUno3WGJHRm92NEZxZEtLbzZtUllOV3ZNcDdQMjNEanVKblMnLFxuICAgIH07XG4gICAgY29uc3QgYmFja3VwS2V5ID0ge1xuICAgICAgcHViOiAneHB1YjY2MU15TXdBcVJiY0ZFenI1Q2NwRnpQRzQ1cm1QZjc1RFR2RG9iTjVnSmltQ2F0Ykh0elI1M1NiSHpEWjFKNTZieUtTc2RjOHZTdWpHdVFweVBqYjdMc3VhMk5mQURKZXdQeE56TDNONlRqJyxcbiAgICB9O1xuICAgIGNvbnN0IGJpdGdvS2V5ID0ge1xuICAgICAgcHViOiAneHB1YjY2MU15TXdBcVJiY0dQMWFkazM0VnpSUUpFTVgyNXJDeGpFeVU5WUZGV05oV056d1BvcWdqTG9LZm5xb3RMd3J6N2tCZXZXYlJabnFUU1FyUUR1SnVZVVFhRFE1RERQRXpFWE13UFM5UEVmJyxcbiAgICB9O1xuICAgIGNvbnN0IGtleWNoYWlucyA9IFt1c2VyS2V5LCBiYWNrdXBLZXksIGJpdGdvS2V5XTtcbiAgICBjb25zdCB2YWxpZEFkZHJlc3MxID0gJ1NOQVlRRlo2RUY1NEQ1WFdKUDNHQUUxWThEUFlYS0ZDN1RUTVlYRlYnO1xuICAgIGNvbnN0IHZhbGlkQWRkcmVzczIgPSAnU05BWVFGWjZFRjU0RDVYV0pQM0dBRTFZOERQWVhLRkM3VFRNWVhGVj9tZW1vSWQ9Mic7XG4gICAgY29uc3QgdW5yZWxhdGVkVmFsaWRBZGRyZXNzID0gJ1NUMTFOSlRUS0dWVDZEMUhZNE5KUlZRV01RTTdUVkFSMDkxRUo4UDJZP21lbW9JZD0xJztcbiAgICBjb25zdCBpbnZhbGlkQWRkcmVzcyA9ICdTVDFUNzU4SzZUMllSS0c5UTBUSjE2QjZGUDVRUVJFV1pTRVNSUzBQWSc7XG4gICAgKGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7IGFkZHJlc3M6IHZhbGlkQWRkcmVzczEsIGtleWNoYWlucyB9KSkuc2hvdWxkLnRydWUoKTtcbiAgICAoYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHsgYWRkcmVzczogdmFsaWRBZGRyZXNzMiwga2V5Y2hhaW5zIH0pKS5zaG91bGQudHJ1ZSgpO1xuICAgIChhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3MoeyBhZGRyZXNzOiB1bnJlbGF0ZWRWYWxpZEFkZHJlc3MsIGtleWNoYWlucyB9KSkuc2hvdWxkLmZhbHNlKCk7XG5cbiAgICBhc3NlcnQucmVqZWN0cyhcbiAgICAgIGFzeW5jICgpID0+IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7IGFkZHJlc3M6IGludmFsaWRBZGRyZXNzLCBrZXljaGFpbnMgfSksXG4gICAgICBgaW52YWxpZCBhZGRyZXNzICR7aW52YWxpZEFkZHJlc3N9YFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZXhwbGFpbiBhIHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGV4cGxhaW4gPSBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgdHhIZXg6IHRlc3REYXRhLnR4Rm9yRXhwbGFpblRyYW5zZmVyLFxuICAgICAgZmVlSW5mbzogeyBmZWU6ICcnIH0sXG4gICAgfSk7XG4gICAgZXhwbGFpbi5pZC5zaG91bGQuZXF1YWwodGVzdERhdGEudHhFeHBsYWluZWRUcmFuc2Zlci5pZCk7XG4gICAgZXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLnR4RXhwbGFpbmVkVHJhbnNmZXIub3V0cHV0QW1vdW50KTtcbiAgICBleHBsYWluLm91dHB1dHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS50eEV4cGxhaW5lZFRyYW5zZmVyLm91dHB1dEFtb3VudCk7XG4gICAgZXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLnR4RXhwbGFpbmVkVHJhbnNmZXIucmVjaXBpZW50KTtcbiAgICBleHBsYWluLm91dHB1dHNbMF0ubWVtby5zaG91bGQuZXF1YWwodGVzdERhdGEudHhFeHBsYWluZWRUcmFuc2Zlci5tZW1vKTtcbiAgICBleHBsYWluLmZlZS5zaG91bGQuZXF1YWwodGVzdERhdGEudHhFeHBsYWluZWRUcmFuc2Zlci5mZWUpO1xuICAgIGV4cGxhaW4uY2hhbmdlQW1vdW50LnNob3VsZC5lcXVhbCgnMCcpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGV4cGxhaW4gYW4gdW5zaWduZWQgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qga2V5ID0gbmV3IEtleVBhaXIoKTtcbiAgICBjb25zdCBkZXN0aW5hdGlvbiA9ICdTVDExTkpUVEtHVlQ2RDFIWTROSlJWUVdNUU03VFZBUjA5MUVKOFAyWSc7XG4gICAgY29uc3QgYW1vdW50ID0gJzEwMDAwMCc7XG4gICAgY29uc3QgbWVtbyA9ICdpIGNhbm5vdCBiZSBicm9hZGNhc3QnO1xuXG4gICAgY29uc3QgdW5zaWduZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGJ1aWxkVW5zaWduZWRUcmFuc2FjdGlvbih7XG4gICAgICBkZXN0aW5hdGlvbixcbiAgICAgIGFtb3VudCxcbiAgICAgIHB1YmxpY0tleToga2V5LmdldEtleXMoKS5wdWIsXG4gICAgICBtZW1vOiBtZW1vLFxuICAgIH0pO1xuICAgIGNvbnN0IHVuc2lnbmVkSGV4ID0gdW5zaWduZWRUcmFuc2FjdGlvbi50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgY29uc3QgZXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICB0eEhleDogdW5zaWduZWRIZXgsXG4gICAgICBwdWJsaWNLZXlzOiBba2V5LmdldEtleXMoKS5wdWJdLFxuICAgICAgZmVlSW5mbzogeyBmZWU6ICcnIH0sXG4gICAgfSk7XG5cbiAgICBleHBsYWluLm1lbW8uc2hvdWxkLmVxdWFsKG1lbW8pO1xuICAgIGV4cGxhaW4ub3V0cHV0c1swXS5hbW91bnQuc2hvdWxkLmVxdWFsKGFtb3VudCk7XG4gICAgZXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKGRlc3RpbmF0aW9uKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBleHBsYWluIHVuc2lnbmVkIHRyYW5zZmVyIHRyYW5zYWN0aW9uIGhleCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBleHBsYWluID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4SGV4OiB0ZXN0RGF0YS51bnNpZ25lZFR4Rm9yRXhwbGFpblRyYW5zZmVyLFxuICAgICAgcHVibGljS2V5czogWycwMzc5N2RkNjUzMDQwZDM0NGZkMDQ4YzFhZDA1ZDRjYmNiMjE3OGIzMGM2YTBjNDI3Njk5NDc5NWYzZTgzM2RhNDEnXSxcbiAgICAgIGZlZUluZm86IHsgZmVlOiAnJyB9LFxuICAgIH0pO1xuICAgIGV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS51bnNpZ25lZFR4RXhwbGFpbmVkVHJhbnNmZXIub3V0cHV0QW1vdW50KTtcbiAgICBleHBsYWluLm91dHB1dHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS51bnNpZ25lZFR4RXhwbGFpbmVkVHJhbnNmZXIub3V0cHV0QW1vdW50KTtcbiAgICBleHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEudW5zaWduZWRUeEV4cGxhaW5lZFRyYW5zZmVyLnJlY2lwaWVudCk7XG4gICAgZXhwbGFpbi5vdXRwdXRzWzBdLm1lbW8uc2hvdWxkLmVxdWFsKHRlc3REYXRhLnVuc2lnbmVkVHhFeHBsYWluZWRUcmFuc2Zlci5tZW1vKTtcbiAgICBleHBsYWluLmZlZS5zaG91bGQuZXF1YWwodGVzdERhdGEudW5zaWduZWRUeEV4cGxhaW5lZFRyYW5zZmVyLmZlZSk7XG4gICAgZXhwbGFpbi5jaGFuZ2VBbW91bnQuc2hvdWxkLmVxdWFsKCcwJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZXhwbGFpbiBhIGNvbnRyYWN0IGNhbGwgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICB0eEhleDogdGVzdERhdGEudHhGb3JFeHBsYWluQ29udHJhY3QsXG4gICAgICBmZWVJbmZvOiB7IGZlZTogJycgfSxcbiAgICB9KTtcbiAgICBleHBsYWluLmlkLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS50eEV4cGxhaW5lZENvbnRyYWN0LmlkKTtcbiAgICBleHBsYWluLmZlZS5zaG91bGQuZXF1YWwodGVzdERhdGEudHhFeHBsYWluZWRDb250cmFjdC5mZWUpO1xuICAgIGV4cGxhaW4uY29udHJhY3RBZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS50eEV4cGxhaW5lZENvbnRyYWN0LmNvbnRyYWN0QWRkcmVzcyk7XG4gICAgZXhwbGFpbi5jb250cmFjdE5hbWUuc2hvdWxkLmVxdWFsKHRlc3REYXRhLnR4RXhwbGFpbmVkQ29udHJhY3QuY29udHJhY3ROYW1lKTtcbiAgICBleHBsYWluLmNvbnRyYWN0RnVuY3Rpb24uc2hvdWxkLmVxdWFsKHRlc3REYXRhLnR4RXhwbGFpbmVkQ29udHJhY3QuZnVuY3Rpb25OYW1lKTtcbiAgICBleHBsYWluLmNvbnRyYWN0RnVuY3Rpb25BcmdzWzBdLnR5cGUuc2hvdWxkLmVxdWFsKHRlc3REYXRhLnR4RXhwbGFpbmVkQ29udHJhY3QuZnVuY3Rpb25BcmdzWzBdLnR5cGUpO1xuICAgIGV4cGxhaW4uY29udHJhY3RGdW5jdGlvbkFyZ3NbMF0udmFsdWUudG9TdHJpbmcoKS5zaG91bGQuZXF1YWwodGVzdERhdGEudHhFeHBsYWluZWRDb250cmFjdC5mdW5jdGlvbkFyZ3NbMF0udmFsdWUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGV4cGxhaW4gYSBmdW5naWJsZSB0b2tlbiB0cmFuc2ZlciB0cmFuc2FjdGlvbiB3aXRoIG1lbW8nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICB0eEhleDogdGVzdERhdGEudHhGb3JFeHBsYWluRnVuZ2libGVUb2tlblRyYW5zZmVyLFxuICAgICAgZmVlSW5mbzogeyBmZWU6ICcnIH0sXG4gICAgfSk7XG4gICAgZXhwbGFpbi5pZC5zaG91bGQuZXF1YWwodGVzdERhdGEuZnVuZ2libGVUb2tlblRyYW5zZmVyVHguaWQpO1xuICAgIGV4cGxhaW4uZmVlLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5mdW5naWJsZVRva2VuVHJhbnNmZXJUeC5mZWUpO1xuICAgIGV4cGxhaW4ubWVtby5zaG91bGQuZXF1YWwoJzEnKTtcbiAgICBleHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEuZnVuZ2libGVUb2tlblRyYW5zZmVyVHguZnVuY3Rpb25BcmdzWzJdLnZhbHVlKTtcbiAgICBleHBsYWluLm91dHB1dHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5mdW5naWJsZVRva2VuVHJhbnNmZXJUeC5mdW5jdGlvbkFyZ3NbMl0udmFsdWUpO1xuICAgIGV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbChjdlRvU3RyaW5nKHRlc3REYXRhLmZ1bmdpYmxlVG9rZW5UcmFuc2ZlclR4LmZ1bmN0aW9uQXJnc1sxXSkpO1xuICAgIGV4cGxhaW4ub3V0cHV0c1swXS5tZW1vLnNob3VsZC5lcXVhbCgnMScpO1xuICAgIGV4cGxhaW4ub3V0cHV0c1swXS50b2tlbk5hbWUuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmZ1bmdpYmxlVG9rZW5UcmFuc2ZlclR4LnRva2VuTmFtZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZXhwbGFpbiBhIGZ1bmdpYmxlIHRva2VuIHRyYW5zZmVyIHRyYW5zYWN0aW9uIHdpdGhvdXQgbWVtbycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBleHBsYWluID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4SGV4OiB0ZXN0RGF0YS50eEZvckV4cGxhaW5GdW5naWJsZVRva2VuVHJhbnNmZXJXaXRob3V0TWVtbyxcbiAgICAgIGZlZUluZm86IHsgZmVlOiAnJyB9LFxuICAgIH0pO1xuICAgIGV4cGxhaW4uaWQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmhleFdpdGhvdXRNZW1vVHJhbnNmZXJJZCk7XG4gICAgZXhwbGFpbi5mZWUuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmZ1bmdpYmxlVG9rZW5UcmFuc2ZlclR4LmZlZSk7XG4gICAgYXNzZXJ0LmRlZXBFcXVhbChleHBsYWluLm1lbW8sIHVuZGVmaW5lZCwgJ21lbW8gc2hvdWxkIGJlIHVuZGVmaW5lZCcpO1xuICAgIGV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5mdW5naWJsZVRva2VuVHJhbnNmZXJUeC5mdW5jdGlvbkFyZ3NbMl0udmFsdWUpO1xuICAgIGV4cGxhaW4ub3V0cHV0c1swXS5hbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmZ1bmdpYmxlVG9rZW5UcmFuc2ZlclR4LmZ1bmN0aW9uQXJnc1syXS52YWx1ZSk7XG4gICAgZXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKGN2VG9TdHJpbmcodGVzdERhdGEuZnVuZ2libGVUb2tlblRyYW5zZmVyVHguZnVuY3Rpb25BcmdzWzFdKSk7XG4gICAgYXNzZXJ0LmRlZXBFcXVhbChleHBsYWluLm91dHB1dHNbMF0ubWVtbywgdW5kZWZpbmVkLCAnbWVtbyBzaG91bGQgYmUgdW5kZWZpbmVkJyk7XG4gICAgZXhwbGFpbi5vdXRwdXRzWzBdLnRva2VuTmFtZS5zaG91bGQuZXF1YWwodGVzdERhdGEuZnVuZ2libGVUb2tlblRyYW5zZmVyVHgudG9rZW5OYW1lKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0tleXBhaXJzOicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEga2V5cGFpciBmcm9tIHJhbmRvbSBzZWVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga2V5UGFpciA9IGJhc2Vjb2luLmdlbmVyYXRlS2V5UGFpcigpO1xuICAgICAga2V5UGFpci5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncHViJyk7XG4gICAgICBrZXlQYWlyLnNob3VsZC5oYXZlLnByb3BlcnR5KCdwcnYnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSBrZXlwYWlyIGZyb20gYSBzZWVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2VlZFRleHQgPVxuICAgICAgICAnODAzNTBiNDIwOGQzODFmYmZlMjI3NmEzMjY2MDMwNDlmZTUwMDczMWM0NmQzYzk5MzZiNWNlMDM2YjUxMzc3ZjI0YmFiN2RkMGMyYWY3ZjEwNzQxNmVmODU4ZmY3OWIwNjcwYzcyNDA2ZGFkMDY0ZTcyYmIxN2ZjMGE5MDM4YmInO1xuICAgICAgY29uc3Qgc2VlZCA9IEJ1ZmZlci5mcm9tKHNlZWRUZXh0LCAnaGV4Jyk7XG4gICAgICBjb25zdCBrZXlQYWlyID0gYmFzZWNvaW4uZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuICAgICAga2V5UGFpci5wdWIuc2hvdWxkLmVxdWFsKFxuICAgICAgICAneHB1YjY2MU15TXdBcVJiY0ZBd3F2U0diazM1a0pmN0NRcWROMXc0Q01VQkJUcUg1ZTNpdmpVNkQ4dWd2OWhSU2dSYlJlbkM0dzNhaFhkTFZhaHdqZ2pYaFN1UUtNZE5kbjU1WTlUTlNhZ0JrdHdzJ1xuICAgICAgKTtcbiAgICAgIGtleVBhaXIucHJ2LnNob3VsZC5lcXVhbChcbiAgICAgICAgJ3hwcnY5czIxWnJRSDE0M0syZ3NOcFFqYk51OTFrZEdpMU51V2VpOGJaNW1adVZrNm1GUG5Cdm14YjdOU0pRZGJaVzNGR3BLM1ljbjdqb3JBWGNFek12dmlHdGJ5Qno1dEJyamZuV3lRcDNnNzVGSydcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTaWduIHRyYW5zYWN0aW9uOicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHNpZ24gdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrZXkgPSBuZXcgS2V5UGFpcih7XG4gICAgICAgIHBydjogJzIxZDQzZDJhZTBkYTFkOWQwNGNmY2FhYzdkMzk3YTMzNzMzODgxMDgxZjBiMmNkMDM4MDYyY2YwY2NiYjc1MjYwMScsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uID0gJ1NUREU3WThIVjNSWDhWQk0yVFpWV0pUUzdaQTFYQjBTU0MzTkVWSDAnO1xuICAgICAgY29uc3QgYW1vdW50ID0gJzEwMDAwMCc7XG5cbiAgICAgIGNvbnN0IHVuc2lnbmVkVHJhbnNhY3Rpb24gPSBhd2FpdCBidWlsZFVuc2lnbmVkVHJhbnNhY3Rpb24oe1xuICAgICAgICBkZXN0aW5hdGlvbixcbiAgICAgICAgYW1vdW50LFxuICAgICAgICBwdWJsaWNLZXk6IGtleS5nZXRLZXlzKCkucHViLFxuICAgICAgfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJhc2Vjb2luLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgIHBydjoga2V5LmdldEtleXMoKS5wcnYhLnRvU3RyaW5nKCksXG4gICAgICAgIHB1YktleXM6IFtrZXkuZ2V0S2V5cygpLnB1Yl0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogdW5zaWduZWRUcmFuc2FjdGlvbi50b0Jyb2FkY2FzdEZvcm1hdCgpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBmYWN0b3J5ID0gbmV3IFN0eExpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldChjb2luTmFtZSkpO1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHR4LmhhbGZTaWduZWQudHhIZXgpO1xuICAgICAgY29uc3Qgc2lnbmVkVHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHNpZ25lZFR4LnRvSnNvbigpO1xuICAgICAgdHhKc29uLnBheWxvYWQudG8uc2hvdWxkLmVxdWFsKGRlc3RpbmF0aW9uKTtcbiAgICAgIHR4SnNvbi5wYXlsb2FkLmFtb3VudC5zaG91bGQuZXF1YWwoYW1vdW50KTtcbiAgICAgIHNpZ25lZFR4LnNpZ25hdHVyZS5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzaWduIG11bHRpc2lnIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga2V5MSA9IG5ldyBLZXlQYWlyKHtcbiAgICAgICAgcHJ2OiAnMjFkNDNkMmFlMGRhMWQ5ZDA0Y2ZjYWFjN2QzOTdhMzM3MzM4ODEwODFmMGIyY2QwMzgwNjJjZjBjY2JiNzUyNjAxJyxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qga2V5MiA9IG5ldyBLZXlQYWlyKHtcbiAgICAgICAgcHJ2OiAnYzcxNzAwYjA3ZDUyMGE4Yzk3MzFlNGQwZjA5NWFhNmVmYjkxZTE2ZTI1ZmIyN2NlMmI3MmU3YjY5OGY4MTI3YTAxJyxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qga2V5MyA9IG5ldyBLZXlQYWlyKHtcbiAgICAgICAgcHJ2OiAnZTc1ZGNiNjZmODQyODdlYWYzNDc5NTVlOTRmYTA0MzM3Mjk4ZGJkOTVhYTBkYmI5ODU3NzExMDRlZjE5MTNkYjAxJyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGVzdGluYXRpb24gPSAnU1RERTdZOEhWM1JYOFZCTTJUWlZXSlRTN1pBMVhCMFNTQzNORVZIMCc7XG4gICAgICBjb25zdCBhbW91bnQgPSAnMTAwMDAwJztcbiAgICAgIGNvbnN0IHB1YmxpY0tleXMgPSBba2V5MS5nZXRLZXlzKHRydWUpLnB1Yiwga2V5Mi5nZXRLZXlzKHRydWUpLnB1Yiwga2V5My5nZXRLZXlzKHRydWUpLnB1Yl07XG4gICAgICBjb25zdCB1bnNpZ25lZFRyYW5zYWN0aW9uID0gYXdhaXQgYnVpbGRtdWx0aVNpZ1Vuc2lnbmVkVHJhbnNhY3Rpb24oe1xuICAgICAgICBkZXN0aW5hdGlvbixcbiAgICAgICAgYW1vdW50LFxuICAgICAgICBwdWJsaWNLZXlzLFxuICAgICAgfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJhc2Vjb2luLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgIHBydjogW1xuICAgICAgICAgICcyMWQ0M2QyYWUwZGExZDlkMDRjZmNhYWM3ZDM5N2EzMzczMzg4MTA4MWYwYjJjZDAzODA2MmNmMGNjYmI3NTI2MDEnLFxuICAgICAgICAgICdjNzE3MDBiMDdkNTIwYThjOTczMWU0ZDBmMDk1YWE2ZWZiOTFlMTZlMjVmYjI3Y2UyYjcyZTdiNjk4ZjgxMjdhMDEnLFxuICAgICAgICBdLFxuICAgICAgICBwdWJLZXlzOiBba2V5MS5nZXRLZXlzKCkucHViLCBrZXkyLmdldEtleXMoKS5wdWIsIGtleTMuZ2V0S2V5cygpLnB1Yl0sXG4gICAgICAgIG51bWJlclNpZ25hdHVyZTogMixcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4SGV4OiB1bnNpZ25lZFRyYW5zYWN0aW9uLnRvQnJvYWRjYXN0Rm9ybWF0KCksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgU3R4TGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KGNvaW5OYW1lKSk7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odHgudHhIZXgpO1xuICAgICAgY29uc3Qgc2lnbmVkVHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHNpZ25lZFR4LnRvSnNvbigpO1xuICAgICAgdHhKc29uLnBheWxvYWQudG8uc2hvdWxkLmVxdWFsKGRlc3RpbmF0aW9uKTtcbiAgICAgIHR4SnNvbi5wYXlsb2FkLmFtb3VudC5zaG91bGQuZXF1YWwoYW1vdW50KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldFNpZ25pbmdQYXlsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSB0eCBhcyBhIGJ1ZmZlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG5vblRTU0NvaW4gPSBiaXRnby5jb2luKCd0c3R4Jyk7XG4gICAgICBjb25zdCBidWZmZXJUeCA9IGF3YWl0IG5vblRTU0NvaW4uZ2V0U2lnbmFibGVQYXlsb2FkKHRlc3REYXRhLnVuc2lnbmVkVHhGb3JFeHBsYWluVHJhbnNmZXIpO1xuICAgICAgYnVmZmVyVHguc2hvdWxkLmJlLmRlZXBFcXVhbChCdWZmZXIuZnJvbSh0ZXN0RGF0YS51bnNpZ25lZFR4Rm9yRXhwbGFpblRyYW5zZmVyKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdWZXJpZnkgVHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYWRkcmVzczEgPSAnMHgxNzRjZmQ4MjNhZjhjZTI3ZWQwYWZlZTNmY2YzYzNiYTI1OTExNmJlJztcbiAgICBjb25zdCBhZGRyZXNzMiA9ICcweDdlODViZGMyN2MwNTBlMzkwNWViZjRiOGU2MzRkOWFkNmVkZDBkZTYnO1xuICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7IHR4SGV4OiB0ZXN0RGF0YS50eEZvckV4cGxhaW5UcmFuc2ZlciwgdHhJbmZvOiB7fSB9O1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYSB0eFByZWJ1aWxkIHdpdGggbW9yZSB0aGFuIG9uZSByZWNpcGllbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlY29pbiwge30pO1xuXG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHsgYW1vdW50OiAnMTAwMDAwMDAwMDAwMCcsIGFkZHJlc3M6IGFkZHJlc3MxIH0sXG4gICAgICAgICAgeyBhbW91bnQ6ICcyNTAwMDAwMDAwMDAwJywgYWRkcmVzczogYWRkcmVzczIgfSxcbiAgICAgICAgXSxcbiAgICAgICAgd2FsbGV0OiB3YWxsZXQsXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdmYWtlV2FsbGV0UGFzc3BocmFzZScsXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcbiAgICAgICAgICBgdHN0eCBkb2Vzbid0IHN1cHBvcnQgc2VuZGluZyB0byBtb3JlIHRoYW4gMSBkZXN0aW5hdGlvbiBhZGRyZXNzIHdpdGhpbiBhIHNpbmdsZSB0cmFuc2FjdGlvbi4gVHJ5IGFnYWluLCB1c2luZyBvbmx5IGEgc2luZ2xlIHJlY2lwaWVudC5gXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCB3aGVuIHR4UHJlYnVpbGQgaXMgbWlzc2luZyB0eEhleCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCB7fSk7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW3sgYW1vdW50OiAnMTAwMCcsIGFkZHJlc3M6IHRlc3REYXRhLnR4RXhwbGFpbmVkVHJhbnNmZXIucmVjaXBpZW50IH1dLFxuICAgICAgICB3YWxsZXQsXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdmYWtlV2FsbGV0UGFzc3BocmFzZScsXG4gICAgICB9O1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQcmVidWlsZDoge30sIHR4UGFyYW1zIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdtaXNzaW5nIHJlcXVpcmVkIHR4IHByZWJ1aWxkIHByb3BlcnR5IHR4SGV4Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IGEgbmF0aXZlIFNUWCB0cmFuc2ZlciB3aXRoIG1hdGNoaW5nIHJlY2lwaWVudCBhbmQgYW1vdW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZWNvaW4sIHt9KTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogdGVzdERhdGEudHhFeHBsYWluZWRUcmFuc2Zlci5yZWNpcGllbnQsXG4gICAgICAgICAgICBhbW91bnQ6IHRlc3REYXRhLnR4RXhwbGFpbmVkVHJhbnNmZXIub3V0cHV0QW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG1lbW86IHsgdHlwZTogJycsIHZhbHVlOiB0ZXN0RGF0YS50eEV4cGxhaW5lZFRyYW5zZmVyLm1lbW8gfSxcbiAgICAgICAgd2FsbGV0LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQcmVidWlsZCwgdHhQYXJhbXMgfSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiB3aXRoIHdyb25nIHJlY2lwaWVudCBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZWNvaW4sIHt9KTtcbiAgICAgIGNvbnN0IHJlcXVlc3RlZEFkZHJlc3MgPSAnU1QxMU5KVFRLR1ZUNkQxSFk0TkpSVlFXTVFNN1RWQVIwOTFFSjhQMlknO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiByZXF1ZXN0ZWRBZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiB0ZXN0RGF0YS50eEV4cGxhaW5lZFRyYW5zZmVyLm91dHB1dEFtb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBtZW1vOiB7IHR5cGU6ICcnLCB2YWx1ZTogdGVzdERhdGEudHhFeHBsYWluZWRUcmFuc2Zlci5tZW1vIH0sXG4gICAgICAgIHdhbGxldCxcbiAgICAgIH07XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFByZWJ1aWxkLCB0eFBhcmFtcyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcbiAgICAgICAgICBgVHggZGVzdGluYXRpb24gZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcyByZWNpcGllbnQ6IGV4cGVjdGVkICR7cmVxdWVzdGVkQWRkcmVzc30gYnV0IGdvdCAke3Rlc3REYXRhLnR4RXhwbGFpbmVkVHJhbnNmZXIucmVjaXBpZW50fWBcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24gd2l0aCB3cm9uZyBhbW91bnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlY29pbiwge30pO1xuICAgICAgY29uc3QgcmVxdWVzdGVkQW1vdW50ID0gJzk5OTknO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS50eEV4cGxhaW5lZFRyYW5zZmVyLnJlY2lwaWVudCxcbiAgICAgICAgICAgIGFtb3VudDogcmVxdWVzdGVkQW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG1lbW86IHsgdHlwZTogJycsIHZhbHVlOiB0ZXN0RGF0YS50eEV4cGxhaW5lZFRyYW5zZmVyLm1lbW8gfSxcbiAgICAgICAgd2FsbGV0LFxuICAgICAgfTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UHJlYnVpbGQsIHR4UGFyYW1zIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgIGBUeCBhbW91bnQgZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcyByZWNpcGllbnQgYW1vdW50OiBleHBlY3RlZCAke3JlcXVlc3RlZEFtb3VudH0gYnV0IGdvdCAke3Rlc3REYXRhLnR4RXhwbGFpbmVkVHJhbnNmZXIub3V0cHV0QW1vdW50fWBcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24gd2l0aCB3cm9uZyBtZW1vJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZWNvaW4sIHt9KTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogdGVzdERhdGEudHhFeHBsYWluZWRUcmFuc2Zlci5yZWNpcGllbnQsXG4gICAgICAgICAgICBhbW91bnQ6IHRlc3REYXRhLnR4RXhwbGFpbmVkVHJhbnNmZXIub3V0cHV0QW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG1lbW86IHsgdHlwZTogJycsIHZhbHVlOiAnd3JvbmcgbWVtbycgfSxcbiAgICAgICAgd2FsbGV0LFxuICAgICAgfTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UHJlYnVpbGQsIHR4UGFyYW1zIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdUeCBtZW1vIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdHhQYXJhbXMgcmVjaXBpZW50IG1lbW8nKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1ZlcmlmeSBzQlRDIFdpdGhkcmF3IFRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgU3R4TGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0c3R4JykpO1xuICAgIGNvbnN0IHBydktleXNTdHJpbmcgPSByZXNvdXJjZXMucHJ2S2V5c1N0cmluZy5zbGljZSgwLCAyKTtcblxuICAgIGNvbnN0IGJ1aWxkV2l0aGRyYXdUeCA9IGFzeW5jICh3aXRoZHJhd1BhcmFtczogeyBhbW91bnQ6IHN0cmluZzsgYnRjQWRkcmVzczogc3RyaW5nOyBtYXhGZWU6IHN0cmluZyB9KSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRTYnRjV2l0aGRyYXdCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmZlZSh7IGZlZTogJzEwMDAnIH0pO1xuICAgICAgYnVpbGRlci5ub25jZSgxKTtcbiAgICAgIGNvbnN0IHB1YktleXMgPSBwcnZLZXlzU3RyaW5nLm1hcCgocHJ2KSA9PiBwdWJsaWNLZXlUb1N0cmluZyhwdWJLZXlmcm9tUHJpdktleShwcnYpKSk7XG4gICAgICBidWlsZGVyLmZyb21QdWJLZXkocHViS2V5cyk7XG4gICAgICBidWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMik7XG4gICAgICBidWlsZGVyLndpdGhkcmF3KHdpdGhkcmF3UGFyYW1zKTtcbiAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogcHJ2S2V5c1N0cmluZ1swXSB9KTtcbiAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogcHJ2S2V5c1N0cmluZ1sxXSB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgcmV0dXJuIHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgfTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgYSBtYXRjaGluZyBzQlRDIHdpdGhkcmF3YWwnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3aXRoZHJhd1BhcmFtcyA9IHtcbiAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgIGJ0Y0FkZHJlc3M6ICdiYzFwcnhsODh3NDdzcnFoNzAzcHh2NTY3cTQ3ZTdlcHp1bWU0bmx6OGNnZXdmaHR1ZW5uOG5ncWd3bTgwdycsXG4gICAgICAgIG1heEZlZTogJzEwMDAwJyxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkV2l0aGRyYXdUeCh3aXRoZHJhd1BhcmFtcyk7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgc2J0Y1dpdGhkcmF3UGFyYW1zOiB3aXRoZHJhd1BhcmFtcyxcbiAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogJ1NNMUs5VkY1R040OFEwQUMyQzdTQjhXTTVONU5SNkRZQzlWTTNRRUpFJywgYW1vdW50OiAnMTAnIH1dLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQcmVidWlsZDogeyB0eEhleCB9LCB0eFBhcmFtcyB9KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmVyaWZ5IHdpdGggd3JvbmcgYW1vdW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2l0aGRyYXdQYXJhbXMgPSB7XG4gICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICBidGNBZGRyZXNzOiAnYmMxcHJ4bDg4dzQ3c3JxaDcwM3B4djU2N3E0N2U3ZXB6dW1lNG5sejhjZ2V3Zmh0dWVubjhuZ3Fnd204MHcnLFxuICAgICAgICBtYXhGZWU6ICcxMDAwMCcsXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZFdpdGhkcmF3VHgod2l0aGRyYXdQYXJhbXMpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHNidGNXaXRoZHJhd1BhcmFtczogeyAuLi53aXRoZHJhd1BhcmFtcywgYW1vdW50OiAnOTk5OScgfSxcbiAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogJ1NNMUs5VkY1R040OFEwQUMyQzdTQjhXTTVONU5SNkRZQzlWTTNRRUpFJywgYW1vdW50OiAnMTAnIH1dLFxuICAgICAgfTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UHJlYnVpbGQ6IHsgdHhIZXggfSwgdHhQYXJhbXMgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3NCVEMgd2l0aGRyYXdhbCBhbW91bnQgZG9lcyBub3QgbWF0Y2gvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgd2l0aCB3cm9uZyBtYXhGZWUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3aXRoZHJhd1BhcmFtcyA9IHtcbiAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgIGJ0Y0FkZHJlc3M6ICdiYzFwcnhsODh3NDdzcnFoNzAzcHh2NTY3cTQ3ZTdlcHp1bWU0bmx6OGNnZXdmaHR1ZW5uOG5ncWd3bTgwdycsXG4gICAgICAgIG1heEZlZTogJzEwMDAwJyxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkV2l0aGRyYXdUeCh3aXRoZHJhd1BhcmFtcyk7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgc2J0Y1dpdGhkcmF3UGFyYW1zOiB7IC4uLndpdGhkcmF3UGFyYW1zLCBtYXhGZWU6ICcxJyB9LFxuICAgICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiAnU00xSzlWRjVHTjQ4UTBBQzJDN1NCOFdNNU41TlI2RFlDOVZNM1FFSkUnLCBhbW91bnQ6ICcxMCcgfV0sXG4gICAgICB9O1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQcmVidWlsZDogeyB0eEhleCB9LCB0eFBhcmFtcyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvc0JUQyB3aXRoZHJhd2FsIG1heEZlZSBkb2VzIG5vdCBtYXRjaC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSB3aXRoIHdyb25nIGJ0Y0FkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3aXRoZHJhd1BhcmFtcyA9IHtcbiAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgIGJ0Y0FkZHJlc3M6ICdiYzFwcnhsODh3NDdzcnFoNzAzcHh2NTY3cTQ3ZTdlcHp1bWU0bmx6OGNnZXdmaHR1ZW5uOG5ncWd3bTgwdycsXG4gICAgICAgIG1heEZlZTogJzEwMDAwJyxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkV2l0aGRyYXdUeCh3aXRoZHJhd1BhcmFtcyk7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgc2J0Y1dpdGhkcmF3UGFyYW1zOiB7IC4uLndpdGhkcmF3UGFyYW1zLCBidGNBZGRyZXNzOiAnMUJ2Qk1TRVlzdFdldHFURm41QXU0bTRHRmc3eEphTlZOMicgfSxcbiAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogJ1NNMUs5VkY1R040OFEwQUMyQzdTQjhXTTVONU5SNkRZQzlWTTNRRUpFJywgYW1vdW50OiAnMTAnIH1dLFxuICAgICAgfTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UHJlYnVpbGQ6IHsgdHhIZXggfSwgdHhQYXJhbXMgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3NCVEMgd2l0aGRyYXdhbCBidGNBZGRyZXNzIGRvZXMgbm90IG1hdGNoLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdSZWNvdmVyIFRyYW5zYWN0aW9uIFNUWCcsIGZ1bmN0aW9uICgpIHtcbiAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5lbmFibGVOZXRDb25uZWN0KCk7XG4gICAgfSk7XG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgfSk7XG4gICAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5kaXNhYmxlTmV0Q29ubmVjdCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhIHNpZ25lZCByZWNvdmVyIHRyYW5zYWN0aW9uIHdoZW4gcHJpdmF0ZSBrZXkgZGF0YSBpcyBwYXNzZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByb290QWRkcmVzcyA9IHRlc3REYXRhLkhPVF9XQUxMRVRfUk9PVF9BRERSRVNTO1xuICAgICAgbm9jayhgaHR0cHM6Ly9hcGkudGVzdG5ldC5oaXJvLnNvYClcbiAgICAgICAgLmdldChgL2V4dGVuZGVkL3YyL2FkZHJlc3Nlcy8ke3Jvb3RBZGRyZXNzfS9iYWxhbmNlcy9zdHhgKVxuICAgICAgICAucmVwbHkoMjAwLCB0ZXN0RGF0YS5BQ0NPVU5UX0JBTEFOQ0VfUkVTUE9OU0UpO1xuICAgICAgbm9jayhgaHR0cHM6Ly9hcGkudGVzdG5ldC5oaXJvLnNvYClcbiAgICAgICAgLmdldChgL2V4dGVuZGVkL3YxL2FkZHJlc3MvJHtyb290QWRkcmVzc30vbm9uY2VzYClcbiAgICAgICAgLnJlcGx5KDIwMCwgdGVzdERhdGEuQUNDT1VOVF9OT05DRV9SRVNQT05TRSk7XG4gICAgICBub2NrKGBodHRwczovL2FwaS50ZXN0bmV0Lmhpcm8uc29gLCB7IGFsbG93VW5tb2NrZWQ6IHRydWUgfSlcbiAgICAgICAgLnBvc3QoYC92Mi9mZWVzL3RyYW5zYWN0aW9uYCwgdGVzdERhdGEuRkVFX0VTVElNQVRJT05fUkVRVUVTVClcbiAgICAgICAgLnJlcGx5KDIwMCwgdGVzdERhdGEuRkVFX0VTVElNQVRJT05fUkVTUE9OU0UpO1xuXG4gICAgICBjb25zdCByZWNvdmVyeU9wdGlvbnM6IFJlY292ZXJ5T3B0aW9ucyA9IHtcbiAgICAgICAgYmFja3VwS2V5OiB0ZXN0RGF0YS5IT1RfV0FMTEVUX0tFWV9DQVJEX0lORk8uQkFDS1VQX0tFWSxcbiAgICAgICAgdXNlcktleTogdGVzdERhdGEuSE9UX1dBTExFVF9LRVlfQ0FSRF9JTkZPLlVTRVJfS0VZLFxuICAgICAgICByb290QWRkcmVzczogcm9vdEFkZHJlc3MsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IHRlc3REYXRhLkRFU1RJTkFUSU9OX0FERFJFU1NfV1JXLFxuICAgICAgICBiaXRnb0tleTogdGVzdERhdGEuSE9UX1dBTExFVF9LRVlfQ0FSRF9JTkZPLkJJVEdPX1BVQl9LRVksXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHRlc3REYXRhLkhPVF9XQUxMRVRfS0VZX0NBUkRfSU5GTy5XQUxMRVRfUEFTU1BIUkFTRSxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXNwb25zZTogUmVjb3ZlcnlUcmFuc2FjdGlvbiA9IGF3YWl0IGJhc2Vjb2luLnJlY292ZXIocmVjb3ZlcnlPcHRpb25zKTtcbiAgICAgIHJlc3BvbnNlLnNob3VsZC5oYXZlLnByb3BlcnR5KCd0eEhleCcpO1xuICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyZXNwb25zZS50eEhleCwgdGVzdERhdGEuSE9UX1dBTExFVF9SRUNPVkVSWV9UWF9IRVgsICd0eCBoZXggbm90IG1hdGNoaW5nIScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhbiB1bnNpZ25lZCB0cmFuc2FjdGlvbiB3aGVuIHB1YmxpYyBrZXlzIGFyZSBwYXNzZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByb290QWRkcmVzcyA9IHRlc3REYXRhLkNPTERfV0FMTEVUX1JPT1RfQUREUkVTUztcbiAgICAgIG5vY2soYGh0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zb2ApXG4gICAgICAgIC5nZXQoYC9leHRlbmRlZC92Mi9hZGRyZXNzZXMvJHtyb290QWRkcmVzc30vYmFsYW5jZXMvc3R4YClcbiAgICAgICAgLnJlcGx5KDIwMCwgdGVzdERhdGEuQUNDT1VOVF9CQUxBTkNFX1JFU1BPTlNFKTtcbiAgICAgIG5vY2soYGh0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zb2ApXG4gICAgICAgIC5nZXQoYC9leHRlbmRlZC92MS9hZGRyZXNzLyR7cm9vdEFkZHJlc3N9L25vbmNlc2ApXG4gICAgICAgIC5yZXBseSgyMDAsIHRlc3REYXRhLkFDQ09VTlRfTk9OQ0VfUkVTUE9OU0UpO1xuICAgICAgbm9jayhgaHR0cHM6Ly9hcGkudGVzdG5ldC5oaXJvLnNvYCwgeyBhbGxvd1VubW9ja2VkOiB0cnVlIH0pXG4gICAgICAgIC5wb3N0KGAvdjIvZmVlcy90cmFuc2FjdGlvbmAsIHRlc3REYXRhLkZFRV9FU1RJTUFUSU9OX1JFUVVFU1QpXG4gICAgICAgIC5yZXBseSgyMDAsIHRlc3REYXRhLkZFRV9FU1RJTUFUSU9OX1JFU1BPTlNFKTtcblxuICAgICAgY29uc3QgcmVjb3ZlcnlPcHRpb25zOiBSZWNvdmVyeU9wdGlvbnMgPSB7XG4gICAgICAgIGJhY2t1cEtleTogdGVzdERhdGEuQ09MRF9XQUxMRVRfUFVCTElDX0tFWV9JTkZPLkJBQ0tVUF9LRVksXG4gICAgICAgIHVzZXJLZXk6IHRlc3REYXRhLkNPTERfV0FMTEVUX1BVQkxJQ19LRVlfSU5GTy5VU0VSX0tFWSxcbiAgICAgICAgcm9vdEFkZHJlc3M6IHJvb3RBZGRyZXNzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiB0ZXN0RGF0YS5ERVNUSU5BVElPTl9BRERSRVNTX1dSVyxcbiAgICAgICAgYml0Z29LZXk6IHRlc3REYXRhLkNPTERfV0FMTEVUX1BVQkxJQ19LRVlfSU5GTy5CSVRHT19QVUJfS0VZLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBSZWNvdmVyeUluZm8gPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHJlY292ZXJ5T3B0aW9ucyk7XG4gICAgICByZXNwb25zZS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHhIZXgnKTtcbiAgICAgIHJlc3BvbnNlLnNob3VsZC5oYXZlLnByb3BlcnR5KCdjb2luJyk7XG4gICAgICByZXNwb25zZS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZmVlSW5mbycpO1xuICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyZXNwb25zZS50eEhleCwgdGVzdERhdGEuQ09MRF9XQUxMRVRfVU5TSUdORURfU1dFRVBfVFhfSEVYLCAndHggaGV4IG5vdCBtYXRjaGluZyEnKTtcbiAgICAgIGFzc2VydC5kZWVwRXF1YWwocmVzcG9uc2UuY29pbiwgJ3RzdHgnLCAnY29pbiBub3QgbWF0Y2hpbmchJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGludmFsaWQgcm9vdCBhZGRyZXNzIHdoZW4gcm9vdCBhZGRyZXNzIGlzIG1pc3Npbmcgb3IgaW52YWxpZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlY292ZXJ5T3B0aW9uczogUmVjb3ZlcnlPcHRpb25zID0ge1xuICAgICAgICBiYWNrdXBLZXk6IHRlc3REYXRhLkNPTERfV0FMTEVUX1BVQkxJQ19LRVlfSU5GTy5CQUNLVVBfS0VZLFxuICAgICAgICB1c2VyS2V5OiB0ZXN0RGF0YS5DT0xEX1dBTExFVF9QVUJMSUNfS0VZX0lORk8uVVNFUl9LRVksXG4gICAgICAgIHJvb3RBZGRyZXNzOiAnJyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogdGVzdERhdGEuREVTVElOQVRJT05fQUREUkVTU19XUlcsXG4gICAgICAgIGJpdGdvS2V5OiB0ZXN0RGF0YS5DT0xEX1dBTExFVF9QVUJMSUNfS0VZX0lORk8uQklUR09fUFVCX0tFWSxcbiAgICAgIH07XG4gICAgICBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHJlY292ZXJ5T3B0aW9ucykuc2hvdWxkLnJlamVjdGVkV2l0aCgnaW52YWxpZCByb290IGFkZHJlc3MhJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGludmFsaWQgZGVzdGluYXRpb24gYWRkcmVzcyB3aGVuIGRlc3RpbmF0aW9uIGFkZHJlc3MgaXMgbWlzc2luZyBvciBpbnZhbGlkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVjb3ZlcnlPcHRpb25zOiBSZWNvdmVyeU9wdGlvbnMgPSB7XG4gICAgICAgIGJhY2t1cEtleTogdGVzdERhdGEuQ09MRF9XQUxMRVRfUFVCTElDX0tFWV9JTkZPLkJBQ0tVUF9LRVksXG4gICAgICAgIHVzZXJLZXk6IHRlc3REYXRhLkNPTERfV0FMTEVUX1BVQkxJQ19LRVlfSU5GTy5VU0VSX0tFWSxcbiAgICAgICAgcm9vdEFkZHJlc3M6IHRlc3REYXRhLkNPTERfV0FMTEVUX1JPT1RfQUREUkVTUyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogJycsXG4gICAgICAgIGJpdGdvS2V5OiB0ZXN0RGF0YS5DT0xEX1dBTExFVF9QVUJMSUNfS0VZX0lORk8uQklUR09fUFVCX0tFWSxcbiAgICAgIH07XG4gICAgICBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHJlY292ZXJ5T3B0aW9ucykuc2hvdWxkLnJlamVjdGVkV2l0aCgnaW52YWxpZCBkZXN0aW5hdGlvbiBhZGRyZXNzIScpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgZmFpbCB3aXRoIG5vIGJhbGFuY2Ugd2hlbiByb290IGFkZHJlc3MgZG9lc24ndCBoYXZlIGJhbGFuY2VcIiwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgcm9vdEFkZHJlc3MgPSB0ZXN0RGF0YS5IT1RfV0FMTEVUX1JPT1RfQUREUkVTUztcbiAgICAgIGNvbnN0IHN0eEJhbGFuY2UgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRlc3REYXRhLkFDQ09VTlRfQkFMQU5DRV9SRVNQT05TRSkpO1xuICAgICAgc3R4QmFsYW5jZS5iYWxhbmNlID0gJzAnO1xuICAgICAgbm9jayhgaHR0cHM6Ly9hcGkudGVzdG5ldC5oaXJvLnNvYClcbiAgICAgICAgLmdldChgL2V4dGVuZGVkL3YyL2FkZHJlc3Nlcy8ke3Jvb3RBZGRyZXNzfS9iYWxhbmNlcy9zdHhgKVxuICAgICAgICAucmVwbHkoMjAwLCBzdHhCYWxhbmNlKTtcbiAgICAgIG5vY2soYGh0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zb2ApXG4gICAgICAgIC5nZXQoYC9leHRlbmRlZC92MS9hZGRyZXNzLyR7cm9vdEFkZHJlc3N9L25vbmNlc2ApXG4gICAgICAgIC5yZXBseSgyMDAsIHRlc3REYXRhLkFDQ09VTlRfTk9OQ0VfUkVTUE9OU0UpO1xuICAgICAgY29uc3QgcmVjb3ZlcnlPcHRpb25zOiBSZWNvdmVyeU9wdGlvbnMgPSB7XG4gICAgICAgIGJhY2t1cEtleTogdGVzdERhdGEuSE9UX1dBTExFVF9LRVlfQ0FSRF9JTkZPLkJBQ0tVUF9LRVksXG4gICAgICAgIHVzZXJLZXk6IHRlc3REYXRhLkhPVF9XQUxMRVRfS0VZX0NBUkRfSU5GTy5VU0VSX0tFWSxcbiAgICAgICAgcm9vdEFkZHJlc3M6IHJvb3RBZGRyZXNzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiB0ZXN0RGF0YS5ERVNUSU5BVElPTl9BRERSRVNTX1dSVyxcbiAgICAgICAgYml0Z29LZXk6IHRlc3REYXRhLkhPVF9XQUxMRVRfS0VZX0NBUkRfSU5GTy5CSVRHT19QVUJfS0VZLFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiB0ZXN0RGF0YS5IT1RfV0FMTEVUX0tFWV9DQVJEX0lORk8uV0FMTEVUX1BBU1NQSFJBU0UsXG4gICAgICB9O1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnJlY292ZXIocmVjb3ZlcnlPcHRpb25zKVxuICAgICAgICAuc2hvdWxkLnJlamVjdGVkV2l0aChgY291bGQgbm90IGZpbmQgYW55IGJhbGFuY2UgdG8gcmVjb3ZlciBmb3IgJHtyb290QWRkcmVzc31gKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB3aXRoIGluc3VmZmljaWVudCBiYWxhbmNlIHdoZW4gc3R4IGJhbGFuY2UgaXMgbG93ZXIgdGhhbiBmZWUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByb290QWRkcmVzcyA9IHRlc3REYXRhLkhPVF9XQUxMRVRfUk9PVF9BRERSRVNTO1xuICAgICAgLy8gZGVlcCBjbG9uZSB0byBzdG9wIG11dGF0aW9uXG4gICAgICBjb25zdCBhY2NvdW50QmFsYW5jZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGVzdERhdGEuQUNDT1VOVF9CQUxBTkNFX1JFU1BPTlNFKSk7XG4gICAgICBhY2NvdW50QmFsYW5jZS5iYWxhbmNlID0gJzEwMCc7IC8vIHNldCBiYWxhbmNlIGxvd2VyIHRoYW4gZmVlXG4gICAgICBub2NrKGBodHRwczovL2FwaS50ZXN0bmV0Lmhpcm8uc29gKVxuICAgICAgICAuZ2V0KGAvZXh0ZW5kZWQvdjIvYWRkcmVzc2VzLyR7cm9vdEFkZHJlc3N9L2JhbGFuY2VzL3N0eGApXG4gICAgICAgIC5yZXBseSgyMDAsIGFjY291bnRCYWxhbmNlKTtcbiAgICAgIG5vY2soYGh0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zb2ApXG4gICAgICAgIC5nZXQoYC9leHRlbmRlZC92MS9hZGRyZXNzLyR7cm9vdEFkZHJlc3N9L25vbmNlc2ApXG4gICAgICAgIC5yZXBseSgyMDAsIHRlc3REYXRhLkFDQ09VTlRfTk9OQ0VfUkVTUE9OU0UpO1xuICAgICAgY29uc3QgZmVlUmVxdWVzdEJvZHkgPSB0ZXN0RGF0YS5GRUVfRVNUSU1BVElPTl9SRVFVRVNUO1xuICAgICAgZmVlUmVxdWVzdEJvZHkudHJhbnNhY3Rpb25fcGF5bG9hZCA9XG4gICAgICAgICcwMDA1MWExNTAwYTFjNDJmMGMxMWJmZTM4OTNmNDc5YWYxODkwNDY3NzY4NWJlMDAwMDAwMDAwMDAwMDA2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJztcbiAgICAgIG5vY2soYGh0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zb2AsIHsgYWxsb3dVbm1vY2tlZDogdHJ1ZSB9KVxuICAgICAgICAucG9zdChgL3YyL2ZlZXMvdHJhbnNhY3Rpb25gLCBmZWVSZXF1ZXN0Qm9keSlcbiAgICAgICAgLnJlcGx5KDIwMCwgdGVzdERhdGEuRkVFX0VTVElNQVRJT05fUkVTUE9OU0UpO1xuICAgICAgY29uc3QgcmVjb3ZlcnlPcHRpb25zOiBSZWNvdmVyeU9wdGlvbnMgPSB7XG4gICAgICAgIGJhY2t1cEtleTogdGVzdERhdGEuSE9UX1dBTExFVF9LRVlfQ0FSRF9JTkZPLkJBQ0tVUF9LRVksXG4gICAgICAgIHVzZXJLZXk6IHRlc3REYXRhLkhPVF9XQUxMRVRfS0VZX0NBUkRfSU5GTy5VU0VSX0tFWSxcbiAgICAgICAgcm9vdEFkZHJlc3M6IHJvb3RBZGRyZXNzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiB0ZXN0RGF0YS5ERVNUSU5BVElPTl9BRERSRVNTX1dSVyxcbiAgICAgICAgYml0Z29LZXk6IHRlc3REYXRhLkhPVF9XQUxMRVRfS0VZX0NBUkRfSU5GTy5CSVRHT19QVUJfS0VZLFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiB0ZXN0RGF0YS5IT1RfV0FMTEVUX0tFWV9DQVJEX0lORk8uV0FMTEVUX1BBU1NQSFJBU0UsXG4gICAgICB9O1xuICAgICAgYXdhaXQgYmFzZWNvaW4ucmVjb3ZlcihyZWNvdmVyeU9wdGlvbnMpLnNob3VsZC5yZWplY3RlZFdpdGgoJ2luc3VmZmljaWVudCBiYWxhbmNlIHRvIGJ1aWxkIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
662
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L3N0eC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixnREFBd0I7QUFFeEIsNENBQTBDO0FBQzFDLDhDQUF1RjtBQUN2Riw4Q0FBMEQ7QUFDMUQsNENBQXVDO0FBQ3ZDLHVEQUF1RztBQUV2RyxzREFBd0M7QUFDeEMsdURBQXlDO0FBQ3pDLHVFQUF1RTtBQUN2RSxtQ0FBOEM7QUFHOUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLFlBQU0sQ0FBQztBQUUzQixRQUFRLENBQUMsTUFBTSxFQUFFO0lBQ2YsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQztJQUM1QixJQUFJLEtBQW1CLENBQUM7SUFDeEIsSUFBSSxRQUFRLENBQUM7SUFFYixNQUFNLGlCQUFpQixHQUFHO1FBQ3hCLEVBQUU7UUFDRixJQUFJO1FBQ0osS0FBSztRQUNMLDBDQUEwQztRQUMxQywyQ0FBMkM7S0FDNUMsQ0FBQztJQUVGLE1BQU0sYUFBYSxHQUFHO1FBQ3BCLDBDQUEwQztRQUMxQywyQ0FBMkM7UUFDM0MsMkNBQTJDO1FBQzNDLDJDQUEyQztRQUMzQyxvREFBb0Q7UUFDcEQsb0RBQW9EO0tBQ3JELENBQUM7SUFFRixNQUFNLENBQUM7UUFDTCxLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRTtZQUNuQyxHQUFHLEVBQUUsTUFBTTtTQUNaLENBQUMsQ0FBQztRQUNILEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNCLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFNBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM5QyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxVQUFJLENBQUMsY0FBYyxD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LENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgbm9jayBmcm9tICdub2NrJztcblxuaW1wb3J0IHsgQml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLWFwaSc7XG5pbXBvcnQgeyBFcnJvck5vSW5wdXRUb1JlY292ZXIsIFJlY292ZXJ5UHJvdmlkZXJFcnJvciwgV2FsbGV0IH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFRlc3RCaXRHbywgVGVzdEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgY3ZUb1N0cmluZywgZGVzZXJpYWxpemVDViwgcHViS2V5ZnJvbVByaXZLZXksIHB1YmxpY0tleVRvU3RyaW5nIH0gZnJvbSAnQHN0YWNrcy90cmFuc2FjdGlvbnMnO1xuXG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi9maXh0dXJlcyc7XG5pbXBvcnQgKiBhcyByZXNvdXJjZXMgZnJvbSAnLi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgcG94NVJlZ2lzdGVyRm9yQm9uZEFyZ3NIZXggfSBmcm9tICcuL3JlZ2lzdGVyRm9yQm9uZFJlYWxBcmdzJztcbmltcG9ydCB7IFN0eCwgU3R4TGliLCBUc3R4IH0gZnJvbSAnLi4vLi4vc3JjJztcbmltcG9ydCB7IFJlY292ZXJ5SW5mbywgUmVjb3ZlcnlPcHRpb25zLCBSZWNvdmVyeVRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi9pZmFjZSc7XG5cbmNvbnN0IHsgS2V5UGFpciB9ID0gU3R4TGliO1xuXG5kZXNjcmliZSgnU1RYOicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgY29pbk5hbWUgPSAnc3R4JztcbiAgY29uc3QgY29pbk5hbWVUZXN0ID0gJ3RzdHgnO1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgbGV0IGJhc2Vjb2luO1xuXG4gIGNvbnN0IGJhZFZhbGlkQWRkcmVzc2VzID0gW1xuICAgICcnLFxuICAgIG51bGwsXG4gICAgJ2FiYycsXG4gICAgJ1NQMjQ0SFlQWUFUMkJCMlFFNTEzTlNQODFIVE1ZV0JKUDAySFBHSzYnLFxuICAgICdTVDFUNzU4SzZUMllSS0c5UTBUSjE2QjZGUDVRUVJFV1pTRVNSUzBQWScsXG4gIF07XG5cbiAgY29uc3QgZ29vZEFkZHJlc3NlcyA9IFtcbiAgICAnU1RCNDRIWVBZQVQyQkIyUUU1MTNOU1A4MUhUTVlXQkpQMDJIUEdLNicsXG4gICAgJ1NUMTFOSlRUS0dWVDZEMUhZNE5KUlZRV01RTTdUVkFSMDkxRUo4UDJZJyxcbiAgICAnU1AyVDc1OEs2VDJZUktHOVEwVEoxNkI2RlA1UVFSRVdaU0VTUlMwUFknLFxuICAgICdTTTNXNVFGV0dQRzFKQzhSMjVFVlpERVAzQkVTSlo4MzFKUE5OUUZUWicsXG4gICAgJ1NNM1c1UUZXR1BHMUpDOFIyNUVWWkRFUDNCRVNKWjgzMUpQTk5RRlRaP21lbW9JZD0xJyxcbiAgICAnU1QxV1ZKTVM1VlM0MUYwWU1IN0QyTTBWSFhSRzRDWTQzWkpaQlM2MEE/bWVtb0lkPTQnLFxuICBdO1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHtcbiAgICAgIGVudjogJ21vY2snLFxuICAgIH0pO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3Rlcignc3R4JywgU3R4LmNyZWF0ZUluc3RhbmNlKTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3RzdHgnLCBUc3R4LmNyZWF0ZUluc3RhbmNlKTtcbiAgICBiYXNlY29pbiA9IGJpdGdvLmNvaW4oY29pbk5hbWVUZXN0KTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFuIHVuc2lnbmVkIGFjY291bnQtbGliIHNpZ25sZS1zaWduYXR1cmUgc2VuZCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gZGVzdGluYXRpb24gVGhlIGRlc3RpbmF0aW9uIGFkZHJlc3Mgb2YgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBhbW91bnQgVGhlIGFtb3VudCB0byBzZW5kIHRvIHRoZSByZWNpcGllbnRcbiAgICovXG4gIGNvbnN0IGJ1aWxkVW5zaWduZWRUcmFuc2FjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uICh7IGRlc3RpbmF0aW9uLCBhbW91bnQgPSAnMTAwMDAwJywgcHVibGljS2V5LCBtZW1vID0gJycgfSkge1xuICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgU3R4TGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KGNvaW5OYW1lKSk7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuZmVlKHtcbiAgICAgIGZlZTogJzE4MCcsXG4gICAgfSk7XG4gICAgdHhCdWlsZGVyLnRvKGRlc3RpbmF0aW9uKTtcbiAgICB0eEJ1aWxkZXIuYW1vdW50KGFtb3VudCk7XG4gICAgdHhCdWlsZGVyLm5vbmNlKDEpO1xuICAgIHR4QnVpbGRlci5mcm9tUHViS2V5KHB1YmxpY0tleSk7XG4gICAgdHhCdWlsZGVyLm1lbW8obWVtbyk7XG4gICAgdHhCdWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMSk7XG4gICAgcmV0dXJuIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBCdWlsZCBhbiB1bnNpZ25lZCBhY2NvdW50LWxpYiBtdWx0aS1zaWduYXR1cmUgc2VuZCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gZGVzdGluYXRpb24gVGhlIGRlc3RpbmF0aW9uIGFkZHJlc3Mgb2YgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBhbW91bnQgVGhlIGFtb3VudCB0byBzZW5kIHRvIHRoZSByZWNpcGllbnRcbiAgICovXG4gIGNvbnN0IGJ1aWxkbXVsdGlTaWdVbnNpZ25lZFRyYW5zYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gKHsgZGVzdGluYXRpb24sIGFtb3VudCA9ICcxMDAwMDAnLCBwdWJsaWNLZXlzLCBtZW1vID0gJycgfSkge1xuICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgU3R4TGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KGNvaW5OYW1lKSk7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuZmVlKHtcbiAgICAgIGZlZTogJzE4MCcsXG4gICAgfSk7XG4gICAgdHhCdWlsZGVyLnRvKGRlc3RpbmF0aW9uKTtcbiAgICB0eEJ1aWxkZXIuYW1vdW50KGFtb3VudCk7XG4gICAgdHhCdWlsZGVyLm5vbmNlKDEpO1xuICAgIHR4QnVpbGRlci5mcm9tUHViS2V5KHB1YmxpY0tleXMpO1xuICAgIHR4QnVpbGRlci5udW1iZXJTaWduYXR1cmVzKDIpO1xuICAgIHR4QnVpbGRlci5tZW1vKG1lbW8pO1xuICAgIHJldHVybiBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgfTtcblxuICBpdCgnc2hvdWxkIGluc3RhbnRpYXRlIHRoZSBjb2luJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBsb2NhbEJhc2Vjb2luID0gYml0Z28uY29pbigndHN0eCcpO1xuICAgIGxvY2FsQmFzZWNvaW4uc2hvdWxkLmJlLmFuLmluc3RhbmNlb2YoVHN0eCk7XG5cbiAgICBsb2NhbEJhc2Vjb2luID0gYml0Z28uY29pbignc3R4Jyk7XG4gICAgbG9jYWxCYXNlY29pbi5zaG91bGQuYmUuYW4uaW5zdGFuY2VvZihTdHgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGNoZWNrIHZhbGlkIGFkZHJlc3NlcycsIGZ1bmN0aW9uICgpIHtcbiAgICBiYWRWYWxpZEFkZHJlc3Nlcy5tYXAoKGFkZHIpID0+IHtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKGFkZHIpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG4gICAgZ29vZEFkZHJlc3Nlcy5tYXAoKGFkZHIpID0+IHtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKGFkZHIpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2ZXJpZnkgaXNXYWxsZXRBZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHVzZXJLZXkgPSB7XG4gICAgICBwdWI6ICd4cHViNjYxTXlNd0FxUmJjR1MySE1kdkFOTjdvOEVTV3F3dnI1VTRyeTVmWmREOVZIaHltV3lmb0RRRjR2emZLb3RYZ0d0SlRyd3JGUno3WGJHRm92NEZxZEtLbzZtUllOV3ZNcDdQMjNEanVKblMnLFxuICAgIH07XG4gICAgY29uc3QgYmFja3VwS2V5ID0ge1xuICAgICAgcHViOiAneHB1YjY2MU15TXdBcVJiY0ZFenI1Q2NwRnpQRzQ1cm1QZjc1RFR2RG9iTjVnSmltQ2F0Ykh0elI1M1NiSHpEWjFKNTZieUtTc2RjOHZTdWpHdVFweVBqYjdMc3VhMk5mQURKZXdQeE56TDNONlRqJyxcbiAgICB9O1xuICAgIGNvbnN0IGJpdGdvS2V5ID0ge1xuICAgICAgcHViOiAneHB1YjY2MU15TXdBcVJiY0dQMWFkazM0VnpSUUpFTVgyNXJDeGpFeVU5WUZGV05oV056d1BvcWdqTG9LZm5xb3RMd3J6N2tCZXZXYlJabnFUU1FyUUR1SnVZVVFhRFE1RERQRXpFWE13UFM5UEVmJyxcbiAgICB9O1xuICAgIGNvbnN0IGtleWNoYWlucyA9IFt1c2VyS2V5LCBiYWNrdXBLZXksIGJpdGdvS2V5XTtcbiAgICBjb25zdCB2YWxpZEFkZHJlc3MxID0gJ1NOQVlRRlo2RUY1NEQ1WFdKUDNHQUUxWThEUFlYS0ZDN1RUTVlYRlYnO1xuICAgIGNvbnN0IHZhbGlkQWRkcmVzczIgPSAnU05BWVFGWjZFRjU0RDVYV0pQM0dBRTFZOERQWVhLRkM3VFRNWVhGVj9tZW1vSWQ9Mic7XG4gICAgY29uc3QgdW5yZWxhdGVkVmFsaWRBZGRyZXNzID0gJ1NUMTFOSlRUS0dWVDZEMUhZNE5KUlZRV01RTTdUVkFSMDkxRUo4UDJZP21lbW9JZD0xJztcbiAgICBjb25zdCBpbnZhbGlkQWRkcmVzcyA9ICdTVDFUNzU4SzZUMllSS0c5UTBUSjE2QjZGUDVRUVJFV1pTRVNSUzBQWSc7XG4gICAgKGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7IGFkZHJlc3M6IHZhbGlkQWRkcmVzczEsIGtleWNoYWlucyB9KSkuc2hvdWxkLnRydWUoKTtcbiAgICAoYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHsgYWRkcmVzczogdmFsaWRBZGRyZXNzMiwga2V5Y2hhaW5zIH0pKS5zaG91bGQudHJ1ZSgpO1xuICAgIChhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3MoeyBhZGRyZXNzOiB1bnJlbGF0ZWRWYWxpZEFkZHJlc3MsIGtleWNoYWlucyB9KSkuc2hvdWxkLmZhbHNlKCk7XG5cbiAgICBhc3NlcnQucmVqZWN0cyhcbiAgICAgIGFzeW5jICgpID0+IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7IGFkZHJlc3M6IGludmFsaWRBZGRyZXNzLCBrZXljaGFpbnMgfSksXG4gICAgICBgaW52YWxpZCBhZGRyZXNzICR7aW52YWxpZEFkZHJlc3N9YFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZXhwbGFpbiBhIHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGV4cGxhaW4gPSBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgdHhIZXg6IHRlc3REYXRhLnR4Rm9yRXhwbGFpblRyYW5zZmVyLFxuICAgICAgZmVlSW5mbzogeyBmZWU6ICcnIH0sXG4gICAgfSk7XG4gICAgZXhwbGFpbi5pZC5zaG91bGQuZXF1YWwodGVzdERhdGEudHhFeHBsYWluZWRUcmFuc2Zlci5pZCk7XG4gICAgZXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLnR4RXhwbGFpbmVkVHJhbnNmZXIub3V0cHV0QW1vdW50KTtcbiAgICBleHBsYWluLm91dHB1dHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS50eEV4cGxhaW5lZFRyYW5zZmVyLm91dHB1dEFtb3VudCk7XG4gICAgZXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLnR4RXhwbGFpbmVkVHJhbnNmZXIucmVjaXBpZW50KTtcbiAgICBleHBsYWluLm91dHB1dHNbMF0ubWVtby5zaG91bGQuZXF1YWwodGVzdERhdGEudHhFeHBsYWluZWRUcmFuc2Zlci5tZW1vKTtcbiAgICBleHBsYWluLmZlZS5zaG91bGQuZXF1YWwodGVzdERhdGEudHhFeHBsYWluZWRUcmFuc2Zlci5mZWUpO1xuICAgIGV4cGxhaW4uY2hhbmdlQW1vdW50LnNob3VsZC5lcXVhbCgnMCcpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGV4cGxhaW4gYW4gdW5zaWduZWQgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qga2V5ID0gbmV3IEtleVBhaXIoKTtcbiAgICBjb25zdCBkZXN0aW5hdGlvbiA9ICdTVDExTkpUVEtHVlQ2RDFIWTROSlJWUVdNUU03VFZBUjA5MUVKOFAyWSc7XG4gICAgY29uc3QgYW1vdW50ID0gJzEwMDAwMCc7XG4gICAgY29uc3QgbWVtbyA9ICdpIGNhbm5vdCBiZSBicm9hZGNhc3QnO1xuXG4gICAgY29uc3QgdW5zaWduZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGJ1aWxkVW5zaWduZWRUcmFuc2FjdGlvbih7XG4gICAgICBkZXN0aW5hdGlvbixcbiAgICAgIGFtb3VudCxcbiAgICAgIHB1YmxpY0tleToga2V5LmdldEtleXMoKS5wdWIsXG4gICAgICBtZW1vOiBtZW1vLFxuICAgIH0pO1xuICAgIGNvbnN0IHVuc2lnbmVkSGV4ID0gdW5zaWduZWRUcmFuc2FjdGlvbi50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgY29uc3QgZXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICB0eEhleDogdW5zaWduZWRIZXgsXG4gICAgICBwdWJsaWNLZXlzOiBba2V5LmdldEtleXMoKS5wdWJdLFxuICAgICAgZmVlSW5mbzogeyBmZWU6ICcnIH0sXG4gICAgfSk7XG5cbiAgICBleHBsYWluLm1lbW8uc2hvdWxkLmVxdWFsKG1lbW8pO1xuICAgIGV4cGxhaW4ub3V0cHV0c1swXS5hbW91bnQuc2hvdWxkLmVxdWFsKGFtb3VudCk7XG4gICAgZXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKGRlc3RpbmF0aW9uKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBleHBsYWluIHVuc2lnbmVkIHRyYW5zZmVyIHRyYW5zYWN0aW9uIGhleCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBleHBsYWluID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4SGV4OiB0ZXN0RGF0YS51bnNpZ25lZFR4Rm9yRXhwbGFpblRyYW5zZmVyLFxuICAgICAgcHVibGljS2V5czogWycwMzc5N2RkNjUzMDQwZDM0NGZkMDQ4YzFhZDA1ZDRjYmNiMjE3OGIzMGM2YTBjNDI3Njk5NDc5NWYzZTgzM2RhNDEnXSxcbiAgICAgIGZlZUluZm86IHsgZmVlOiAnJyB9LFxuICAgIH0pO1xuICAgIGV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS51bnNpZ25lZFR4RXhwbGFpbmVkVHJhbnNmZXIub3V0cHV0QW1vdW50KTtcbiAgICBleHBsYWluLm91dHB1dHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS51bnNpZ25lZFR4RXhwbGFpbmVkVHJhbnNmZXIub3V0cHV0QW1vdW50KTtcbiAgICBleHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEudW5zaWduZWRUeEV4cGxhaW5lZFRyYW5zZmVyLnJlY2lwaWVudCk7XG4gICAgZXhwbGFpbi5vdXRwdXRzWzBdLm1lbW8uc2hvdWxkLmVxdWFsKHRlc3REYXRhLnVuc2lnbmVkVHhFeHBsYWluZWRUcmFuc2Zlci5tZW1vKTtcbiAgICBleHBsYWluLmZlZS5zaG91bGQuZXF1YWwodGVzdERhdGEudW5zaWduZWRUeEV4cGxhaW5lZFRyYW5zZmVyLmZlZSk7XG4gICAgZXhwbGFpbi5jaGFuZ2VBbW91bnQuc2hvdWxkLmVxdWFsKCcwJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZXhwbGFpbiBhIGNvbnRyYWN0IGNhbGwgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICB0eEhleDogdGVzdERhdGEudHhGb3JFeHBsYWluQ29udHJhY3QsXG4gICAgICBmZWVJbmZvOiB7IGZlZTogJycgfSxcbiAgICB9KTtcbiAgICBleHBsYWluLmlkLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS50eEV4cGxhaW5lZENvbnRyYWN0LmlkKTtcbiAgICBleHBsYWluLmZlZS5zaG91bGQuZXF1YWwodGVzdERhdGEudHhFeHBsYWluZWRDb250cmFjdC5mZWUpO1xuICAgIGV4cGxhaW4uY29udHJhY3RBZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS50eEV4cGxhaW5lZENvbnRyYWN0LmNvbnRyYWN0QWRkcmVzcyk7XG4gICAgZXhwbGFpbi5jb250cmFjdE5hbWUuc2hvdWxkLmVxdWFsKHRlc3REYXRhLnR4RXhwbGFpbmVkQ29udHJhY3QuY29udHJhY3ROYW1lKTtcbiAgICBleHBsYWluLmNvbnRyYWN0RnVuY3Rpb24uc2hvdWxkLmVxdWFsKHRlc3REYXRhLnR4RXhwbGFpbmVkQ29udHJhY3QuZnVuY3Rpb25OYW1lKTtcbiAgICBleHBsYWluLmNvbnRyYWN0RnVuY3Rpb25BcmdzWzBdLnR5cGUuc2hvdWxkLmVxdWFsKHRlc3REYXRhLnR4RXhwbGFpbmVkQ29udHJhY3QuZnVuY3Rpb25BcmdzWzBdLnR5cGUpO1xuICAgIGV4cGxhaW4uY29udHJhY3RGdW5jdGlvbkFyZ3NbMF0udmFsdWUudG9TdHJpbmcoKS5zaG91bGQuZXF1YWwodGVzdERhdGEudHhFeHBsYWluZWRDb250cmFjdC5mdW5jdGlvbkFyZ3NbMF0udmFsdWUpO1xuICB9KTtcblxuICBpdCgnZXhwbGFpbnMgYSByZWdpc3Rlci1mb3ItYm9uZCB0cmFuc2FjdGlvbiB3aXRoIEpTT04tc2VyaWFsaXNhYmxlIGNvbnRyYWN0RnVuY3Rpb25BcmdzIChTSS0xOTIyKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBmYWN0b3J5ID0gbmV3IFN0eExpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldChjb2luTmFtZVRlc3QpKTtcbiAgICBjb25zdCBmdW5jdGlvbkFyZ3MgPSBwb3g1UmVnaXN0ZXJGb3JCb25kQXJnc0hleC5tYXAoKGhleCkgPT5cbiAgICAgIGRlc2VyaWFsaXplQ1YoQnVmZmVyLmZyb20oaGV4LnJlcGxhY2UoL14weC8sICcnKSwgJ2hleCcpKVxuICAgICk7XG4gICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKTtcbiAgICBidWlsZGVyLmZlZSh7IGZlZTogJzE4ODEwJyB9KTtcbiAgICBidWlsZGVyLm5vbmNlKDApO1xuICAgIGJ1aWxkZXIuZnJvbVB1YktleShyZXNvdXJjZXMuVFhfU0VOREVSLnB1Yik7XG4gICAgYnVpbGRlci5udW1iZXJTaWduYXR1cmVzKDEpO1xuICAgIGJ1aWxkZXIuZnVuY3Rpb25OYW1lKCdyZWdpc3Rlci1mb3ItYm9uZCcpO1xuICAgIGJ1aWxkZXIuZnVuY3Rpb25BcmdzKGZ1bmN0aW9uQXJncyk7XG4gICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG5cbiAgICBjb25zdCBleHBsYWluID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4SGV4OiB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLFxuICAgICAgcHVibGljS2V5czogW3Jlc291cmNlcy5UWF9TRU5ERVIucHViXSxcbiAgICAgIGZlZUluZm86IHsgZmVlOiAnJyB9LFxuICAgIH0pO1xuICAgIGV4cGxhaW4uY29udHJhY3ROYW1lLnNob3VsZC5lcXVhbCgncG94LTUnKTtcbiAgICBleHBsYWluLmNvbnRyYWN0RnVuY3Rpb24uc2hvdWxkLmVxdWFsKCdyZWdpc3Rlci1mb3ItYm9uZCcpO1xuICAgIC8vIHRoZSBzZWNvbmQgY29uc3VtZXIgb2YgdGhlc2UgYXJncyAoZXhwbGFpblRyYW5zYWN0aW9uKSBtdXN0IGFsc28gYmUgSlNPTi1zZXJpYWxpc2FibGVcbiAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IEpTT04uc3RyaW5naWZ5KGV4cGxhaW4uY29udHJhY3RGdW5jdGlvbkFyZ3MpKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBleHBsYWluIGEgZnVuZ2libGUgdG9rZW4gdHJhbnNmZXIgdHJhbnNhY3Rpb24gd2l0aCBtZW1vJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGV4cGxhaW4gPSBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgdHhIZXg6IHRlc3REYXRhLnR4Rm9yRXhwbGFpbkZ1bmdpYmxlVG9rZW5UcmFuc2ZlcixcbiAgICAgIGZlZUluZm86IHsgZmVlOiAnJyB9LFxuICAgIH0pO1xuICAgIGV4cGxhaW4uaWQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmZ1bmdpYmxlVG9rZW5UcmFuc2ZlclR4LmlkKTtcbiAgICBleHBsYWluLmZlZS5zaG91bGQuZXF1YWwodGVzdERhdGEuZnVuZ2libGVUb2tlblRyYW5zZmVyVHguZmVlKTtcbiAgICBleHBsYWluLm1lbW8uc2hvdWxkLmVxdWFsKCcxJyk7XG4gICAgZXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmZ1bmdpYmxlVG9rZW5UcmFuc2ZlclR4LmZ1bmN0aW9uQXJnc1syXS52YWx1ZSk7XG4gICAgZXhwbGFpbi5vdXRwdXRzWzBdLmFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEuZnVuZ2libGVUb2tlblRyYW5zZmVyVHguZnVuY3Rpb25BcmdzWzJdLnZhbHVlKTtcbiAgICBleHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwoY3ZUb1N0cmluZyh0ZXN0RGF0YS5mdW5naWJsZVRva2VuVHJhbnNmZXJUeC5mdW5jdGlvbkFyZ3NbMV0pKTtcbiAgICBleHBsYWluLm91dHB1dHNbMF0ubWVtby5zaG91bGQuZXF1YWwoJzEnKTtcbiAgICBleHBsYWluLm91dHB1dHNbMF0udG9rZW5OYW1lLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5mdW5naWJsZVRva2VuVHJhbnNmZXJUeC50b2tlbk5hbWUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGV4cGxhaW4gYSBmdW5naWJsZSB0b2tlbiB0cmFuc2ZlciB0cmFuc2FjdGlvbiB3aXRob3V0IG1lbW8nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICB0eEhleDogdGVzdERhdGEudHhGb3JFeHBsYWluRnVuZ2libGVUb2tlblRyYW5zZmVyV2l0aG91dE1lbW8sXG4gICAgICBmZWVJbmZvOiB7IGZlZTogJycgfSxcbiAgICB9KTtcbiAgICBleHBsYWluLmlkLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5oZXhXaXRob3V0TWVtb1RyYW5zZmVySWQpO1xuICAgIGV4cGxhaW4uZmVlLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5mdW5naWJsZVRva2VuVHJhbnNmZXJUeC5mZWUpO1xuICAgIGFzc2VydC5kZWVwRXF1YWwoZXhwbGFpbi5tZW1vLCB1bmRlZmluZWQsICdtZW1vIHNob3VsZCBiZSB1bmRlZmluZWQnKTtcbiAgICBleHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEuZnVuZ2libGVUb2tlblRyYW5zZmVyVHguZnVuY3Rpb25BcmdzWzJdLnZhbHVlKTtcbiAgICBleHBsYWluLm91dHB1dHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5mdW5naWJsZVRva2VuVHJhbnNmZXJUeC5mdW5jdGlvbkFyZ3NbMl0udmFsdWUpO1xuICAgIGV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbChjdlRvU3RyaW5nKHRlc3REYXRhLmZ1bmdpYmxlVG9rZW5UcmFuc2ZlclR4LmZ1bmN0aW9uQXJnc1sxXSkpO1xuICAgIGFzc2VydC5kZWVwRXF1YWwoZXhwbGFpbi5vdXRwdXRzWzBdLm1lbW8sIHVuZGVmaW5lZCwgJ21lbW8gc2hvdWxkIGJlIHVuZGVmaW5lZCcpO1xuICAgIGV4cGxhaW4ub3V0cHV0c1swXS50b2tlbk5hbWUuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmZ1bmdpYmxlVG9rZW5UcmFuc2ZlclR4LnRva2VuTmFtZSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdLZXlwYWlyczonLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBhIGtleXBhaXIgZnJvbSByYW5kb20gc2VlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBiYXNlY29pbi5nZW5lcmF0ZUtleVBhaXIoKTtcbiAgICAgIGtleVBhaXIuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3B1YicpO1xuICAgICAga2V5UGFpci5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncHJ2Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEga2V5cGFpciBmcm9tIGEgc2VlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNlZWRUZXh0ID1cbiAgICAgICAgJzgwMzUwYjQyMDhkMzgxZmJmZTIyNzZhMzI2NjAzMDQ5ZmU1MDA3MzFjNDZkM2M5OTM2YjVjZTAzNmI1MTM3N2YyNGJhYjdkZDBjMmFmN2YxMDc0MTZlZjg1OGZmNzliMDY3MGM3MjQwNmRhZDA2NGU3MmJiMTdmYzBhOTAzOGJiJztcbiAgICAgIGNvbnN0IHNlZWQgPSBCdWZmZXIuZnJvbShzZWVkVGV4dCwgJ2hleCcpO1xuICAgICAgY29uc3Qga2V5UGFpciA9IGJhc2Vjb2luLmdlbmVyYXRlS2V5UGFpcihzZWVkKTtcbiAgICAgIGtleVBhaXIucHViLnNob3VsZC5lcXVhbChcbiAgICAgICAgJ3hwdWI2NjFNeU13QXFSYmNGQXdxdlNHYmszNWtKZjdDUXFkTjF3NENNVUJCVHFINWUzaXZqVTZEOHVndjloUlNnUmJSZW5DNHczYWhYZExWYWh3amdqWGhTdVFLTWROZG41NVk5VE5TYWdCa3R3cydcbiAgICAgICk7XG4gICAgICBrZXlQYWlyLnBydi5zaG91bGQuZXF1YWwoXG4gICAgICAgICd4cHJ2OXMyMVpyUUgxNDNLMmdzTnBRamJOdTkxa2RHaTFOdVdlaThiWjVtWnVWazZtRlBuQnZteGI3TlNKUWRiWlczRkdwSzNZY243am9yQVhjRXpNdnZpR3RieUJ6NXRCcmpmbld5UXAzZzc1RksnXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnU2lnbiB0cmFuc2FjdGlvbjonLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBzaWduIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga2V5ID0gbmV3IEtleVBhaXIoe1xuICAgICAgICBwcnY6ICcyMWQ0M2QyYWUwZGExZDlkMDRjZmNhYWM3ZDM5N2EzMzczMzg4MTA4MWYwYjJjZDAzODA2MmNmMGNjYmI3NTI2MDEnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbiA9ICdTVERFN1k4SFYzUlg4VkJNMlRaVldKVFM3WkExWEIwU1NDM05FVkgwJztcbiAgICAgIGNvbnN0IGFtb3VudCA9ICcxMDAwMDAnO1xuXG4gICAgICBjb25zdCB1bnNpZ25lZFRyYW5zYWN0aW9uID0gYXdhaXQgYnVpbGRVbnNpZ25lZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgZGVzdGluYXRpb24sXG4gICAgICAgIGFtb3VudCxcbiAgICAgICAgcHVibGljS2V5OiBrZXkuZ2V0S2V5cygpLnB1YixcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBiYXNlY29pbi5zaWduVHJhbnNhY3Rpb24oe1xuICAgICAgICBwcnY6IGtleS5nZXRLZXlzKCkucHJ2IS50b1N0cmluZygpLFxuICAgICAgICBwdWJLZXlzOiBba2V5LmdldEtleXMoKS5wdWJdLFxuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgdHhIZXg6IHVuc2lnbmVkVHJhbnNhY3Rpb24udG9Ccm9hZGNhc3RGb3JtYXQoKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZmFjdG9yeSA9IG5ldyBTdHhMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoY29pbk5hbWUpKTtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0eC5oYWxmU2lnbmVkLnR4SGV4KTtcbiAgICAgIGNvbnN0IHNpZ25lZFR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEpzb24gPSBzaWduZWRUeC50b0pzb24oKTtcbiAgICAgIHR4SnNvbi5wYXlsb2FkLnRvLnNob3VsZC5lcXVhbChkZXN0aW5hdGlvbik7XG4gICAgICB0eEpzb24ucGF5bG9hZC5hbW91bnQuc2hvdWxkLmVxdWFsKGFtb3VudCk7XG4gICAgICBzaWduZWRUeC5zaWduYXR1cmUubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2lnbiBtdWx0aXNpZyB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtleTEgPSBuZXcgS2V5UGFpcih7XG4gICAgICAgIHBydjogJzIxZDQzZDJhZTBkYTFkOWQwNGNmY2FhYzdkMzk3YTMzNzMzODgxMDgxZjBiMmNkMDM4MDYyY2YwY2NiYjc1MjYwMScsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGtleTIgPSBuZXcgS2V5UGFpcih7XG4gICAgICAgIHBydjogJ2M3MTcwMGIwN2Q1MjBhOGM5NzMxZTRkMGYwOTVhYTZlZmI5MWUxNmUyNWZiMjdjZTJiNzJlN2I2OThmODEyN2EwMScsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGtleTMgPSBuZXcgS2V5UGFpcih7XG4gICAgICAgIHBydjogJ2U3NWRjYjY2Zjg0Mjg3ZWFmMzQ3OTU1ZTk0ZmEwNDMzNzI5OGRiZDk1YWEwZGJiOTg1NzcxMTA0ZWYxOTEzZGIwMScsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uID0gJ1NUREU3WThIVjNSWDhWQk0yVFpWV0pUUzdaQTFYQjBTU0MzTkVWSDAnO1xuICAgICAgY29uc3QgYW1vdW50ID0gJzEwMDAwMCc7XG4gICAgICBjb25zdCBwdWJsaWNLZXlzID0gW2tleTEuZ2V0S2V5cyh0cnVlKS5wdWIsIGtleTIuZ2V0S2V5cyh0cnVlKS5wdWIsIGtleTMuZ2V0S2V5cyh0cnVlKS5wdWJdO1xuICAgICAgY29uc3QgdW5zaWduZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGJ1aWxkbXVsdGlTaWdVbnNpZ25lZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgZGVzdGluYXRpb24sXG4gICAgICAgIGFtb3VudCxcbiAgICAgICAgcHVibGljS2V5cyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBiYXNlY29pbi5zaWduVHJhbnNhY3Rpb24oe1xuICAgICAgICBwcnY6IFtcbiAgICAgICAgICAnMjFkNDNkMmFlMGRhMWQ5ZDA0Y2ZjYWFjN2QzOTdhMzM3MzM4ODEwODFmMGIyY2QwMzgwNjJjZjBjY2JiNzUyNjAxJyxcbiAgICAgICAgICAnYzcxNzAwYjA3ZDUyMGE4Yzk3MzFlNGQwZjA5NWFhNmVmYjkxZTE2ZTI1ZmIyN2NlMmI3MmU3YjY5OGY4MTI3YTAxJyxcbiAgICAgICAgXSxcbiAgICAgICAgcHViS2V5czogW2tleTEuZ2V0S2V5cygpLnB1Yiwga2V5Mi5nZXRLZXlzKCkucHViLCBrZXkzLmdldEtleXMoKS5wdWJdLFxuICAgICAgICBudW1iZXJTaWduYXR1cmU6IDIsXG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogdW5zaWduZWRUcmFuc2FjdGlvbi50b0Jyb2FkY2FzdEZvcm1hdCgpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBmYWN0b3J5ID0gbmV3IFN0eExpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldChjb2luTmFtZSkpO1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHR4LnR4SGV4KTtcbiAgICAgIGNvbnN0IHNpZ25lZFR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEpzb24gPSBzaWduZWRUeC50b0pzb24oKTtcbiAgICAgIHR4SnNvbi5wYXlsb2FkLnRvLnNob3VsZC5lcXVhbChkZXN0aW5hdGlvbik7XG4gICAgICB0eEpzb24ucGF5bG9hZC5hbW91bnQuc2hvdWxkLmVxdWFsKGFtb3VudCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRTaWduaW5nUGF5bG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgdHggYXMgYSBidWZmZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBub25UU1NDb2luID0gYml0Z28uY29pbigndHN0eCcpO1xuICAgICAgY29uc3QgYnVmZmVyVHggPSBhd2FpdCBub25UU1NDb2luLmdldFNpZ25hYmxlUGF5bG9hZCh0ZXN0RGF0YS51bnNpZ25lZFR4Rm9yRXhwbGFpblRyYW5zZmVyKTtcbiAgICAgIGJ1ZmZlclR4LnNob3VsZC5iZS5kZWVwRXF1YWwoQnVmZmVyLmZyb20odGVzdERhdGEudW5zaWduZWRUeEZvckV4cGxhaW5UcmFuc2ZlcikpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVmVyaWZ5IFRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGFkZHJlc3MxID0gJzB4MTc0Y2ZkODIzYWY4Y2UyN2VkMGFmZWUzZmNmM2MzYmEyNTkxMTZiZSc7XG4gICAgY29uc3QgYWRkcmVzczIgPSAnMHg3ZTg1YmRjMjdjMDUwZTM5MDVlYmY0YjhlNjM0ZDlhZDZlZGQwZGU2JztcbiAgICBjb25zdCB0eFByZWJ1aWxkID0geyB0eEhleDogdGVzdERhdGEudHhGb3JFeHBsYWluVHJhbnNmZXIsIHR4SW5mbzoge30gfTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGEgdHhQcmVidWlsZCB3aXRoIG1vcmUgdGhhbiBvbmUgcmVjaXBpZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZWNvaW4sIHt9KTtcblxuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7IGFtb3VudDogJzEwMDAwMDAwMDAwMDAnLCBhZGRyZXNzOiBhZGRyZXNzMSB9LFxuICAgICAgICAgIHsgYW1vdW50OiAnMjUwMDAwMDAwMDAwMCcsIGFkZHJlc3M6IGFkZHJlc3MyIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHdhbGxldDogd2FsbGV0LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAnZmFrZVdhbGxldFBhc3NwaHJhc2UnLFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgICAgYHRzdHggZG9lc24ndCBzdXBwb3J0IHNlbmRpbmcgdG8gbW9yZSB0aGFuIDEgZGVzdGluYXRpb24gYWRkcmVzcyB3aXRoaW4gYSBzaW5nbGUgdHJhbnNhY3Rpb24uIFRyeSBhZ2FpbiwgdXNpbmcgb25seSBhIHNpbmdsZSByZWNpcGllbnQuYFxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3Qgd2hlbiB0eFByZWJ1aWxkIGlzIG1pc3NpbmcgdHhIZXgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlY29pbiwge30pO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFt7IGFtb3VudDogJzEwMDAnLCBhZGRyZXNzOiB0ZXN0RGF0YS50eEV4cGxhaW5lZFRyYW5zZmVyLnJlY2lwaWVudCB9XSxcbiAgICAgICAgd2FsbGV0LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAnZmFrZVdhbGxldFBhc3NwaHJhc2UnLFxuICAgICAgfTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UHJlYnVpbGQ6IHt9LCB0eFBhcmFtcyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnbWlzc2luZyByZXF1aXJlZCB0eCBwcmVidWlsZCBwcm9wZXJ0eSB0eEhleCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSBhIG5hdGl2ZSBTVFggdHJhbnNmZXIgd2l0aCBtYXRjaGluZyByZWNpcGllbnQgYW5kIGFtb3VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCB7fSk7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHRlc3REYXRhLnR4RXhwbGFpbmVkVHJhbnNmZXIucmVjaXBpZW50LFxuICAgICAgICAgICAgYW1vdW50OiB0ZXN0RGF0YS50eEV4cGxhaW5lZFRyYW5zZmVyLm91dHB1dEFtb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBtZW1vOiB7IHR5cGU6ICcnLCB2YWx1ZTogdGVzdERhdGEudHhFeHBsYWluZWRUcmFuc2Zlci5tZW1vIH0sXG4gICAgICAgIHdhbGxldCxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UHJlYnVpbGQsIHR4UGFyYW1zIH0pO1xuICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24gd2l0aCB3cm9uZyByZWNpcGllbnQgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCB7fSk7XG4gICAgICBjb25zdCByZXF1ZXN0ZWRBZGRyZXNzID0gJ1NUMTFOSlRUS0dWVDZEMUhZNE5KUlZRV01RTTdUVkFSMDkxRUo4UDJZJztcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogcmVxdWVzdGVkQWRkcmVzcyxcbiAgICAgICAgICAgIGFtb3VudDogdGVzdERhdGEudHhFeHBsYWluZWRUcmFuc2Zlci5vdXRwdXRBbW91bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgbWVtbzogeyB0eXBlOiAnJywgdmFsdWU6IHRlc3REYXRhLnR4RXhwbGFpbmVkVHJhbnNmZXIubWVtbyB9LFxuICAgICAgICB3YWxsZXQsXG4gICAgICB9O1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQcmVidWlsZCwgdHhQYXJhbXMgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgICAgYFR4IGRlc3RpbmF0aW9uIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdHhQYXJhbXMgcmVjaXBpZW50OiBleHBlY3RlZCAke3JlcXVlc3RlZEFkZHJlc3N9IGJ1dCBnb3QgJHt0ZXN0RGF0YS50eEV4cGxhaW5lZFRyYW5zZmVyLnJlY2lwaWVudH1gXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmVyaWZ5IHRyYW5zYWN0aW9uIHdpdGggd3JvbmcgYW1vdW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZWNvaW4sIHt9KTtcbiAgICAgIGNvbnN0IHJlcXVlc3RlZEFtb3VudCA9ICc5OTk5JztcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogdGVzdERhdGEudHhFeHBsYWluZWRUcmFuc2Zlci5yZWNpcGllbnQsXG4gICAgICAgICAgICBhbW91bnQ6IHJlcXVlc3RlZEFtb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBtZW1vOiB7IHR5cGU6ICcnLCB2YWx1ZTogdGVzdERhdGEudHhFeHBsYWluZWRUcmFuc2Zlci5tZW1vIH0sXG4gICAgICAgIHdhbGxldCxcbiAgICAgIH07XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFByZWJ1aWxkLCB0eFBhcmFtcyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcbiAgICAgICAgICBgVHggYW1vdW50IGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdHhQYXJhbXMgcmVjaXBpZW50IGFtb3VudDogZXhwZWN0ZWQgJHtyZXF1ZXN0ZWRBbW91bnR9IGJ1dCBnb3QgJHt0ZXN0RGF0YS50eEV4cGxhaW5lZFRyYW5zZmVyLm91dHB1dEFtb3VudH1gXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmVyaWZ5IHRyYW5zYWN0aW9uIHdpdGggd3JvbmcgbWVtbycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCB7fSk7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHRlc3REYXRhLnR4RXhwbGFpbmVkVHJhbnNmZXIucmVjaXBpZW50LFxuICAgICAgICAgICAgYW1vdW50OiB0ZXN0RGF0YS50eEV4cGxhaW5lZFRyYW5zZmVyLm91dHB1dEFtb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBtZW1vOiB7IHR5cGU6ICcnLCB2YWx1ZTogJ3dyb25nIG1lbW8nIH0sXG4gICAgICAgIHdhbGxldCxcbiAgICAgIH07XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFByZWJ1aWxkLCB0eFBhcmFtcyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnVHggbWVtbyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zIHJlY2lwaWVudCBtZW1vJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdWZXJpZnkgc0JUQyBXaXRoZHJhdyBUcmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBmYWN0b3J5ID0gbmV3IFN0eExpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndHN0eCcpKTtcbiAgICBjb25zdCBwcnZLZXlzU3RyaW5nID0gcmVzb3VyY2VzLnBydktleXNTdHJpbmcuc2xpY2UoMCwgMik7XG5cbiAgICBjb25zdCBidWlsZFdpdGhkcmF3VHggPSBhc3luYyAod2l0aGRyYXdQYXJhbXM6IHsgYW1vdW50OiBzdHJpbmc7IGJ0Y0FkZHJlc3M6IHN0cmluZzsgbWF4RmVlOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0U2J0Y1dpdGhkcmF3QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5mZWUoeyBmZWU6ICcxMDAwJyB9KTtcbiAgICAgIGJ1aWxkZXIubm9uY2UoMSk7XG4gICAgICBjb25zdCBwdWJLZXlzID0gcHJ2S2V5c1N0cmluZy5tYXAoKHBydikgPT4gcHVibGljS2V5VG9TdHJpbmcocHViS2V5ZnJvbVByaXZLZXkocHJ2KSkpO1xuICAgICAgYnVpbGRlci5mcm9tUHViS2V5KHB1YktleXMpO1xuICAgICAgYnVpbGRlci5udW1iZXJTaWduYXR1cmVzKDIpO1xuICAgICAgYnVpbGRlci53aXRoZHJhdyh3aXRoZHJhd1BhcmFtcyk7XG4gICAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHBydktleXNTdHJpbmdbMF0gfSk7XG4gICAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHBydktleXNTdHJpbmdbMV0gfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHJldHVybiB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgIH07XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IGEgbWF0Y2hpbmcgc0JUQyB3aXRoZHJhd2FsJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2l0aGRyYXdQYXJhbXMgPSB7XG4gICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICBidGNBZGRyZXNzOiAnYmMxcHJ4bDg4dzQ3c3JxaDcwM3B4djU2N3E0N2U3ZXB6dW1lNG5sejhjZ2V3Zmh0dWVubjhuZ3Fnd204MHcnLFxuICAgICAgICBtYXhGZWU6ICcxMDAwMCcsXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZFdpdGhkcmF3VHgod2l0aGRyYXdQYXJhbXMpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHNidGNXaXRoZHJhd1BhcmFtczogd2l0aGRyYXdQYXJhbXMsXG4gICAgICAgIHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6ICdTTTFLOVZGNUdONDhRMEFDMkM3U0I4V001TjVOUjZEWUM5Vk0zUUVKRScsIGFtb3VudDogJzEwJyB9XSxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UHJlYnVpbGQ6IHsgdHhIZXggfSwgdHhQYXJhbXMgfSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSB3aXRoIHdyb25nIGFtb3VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdpdGhkcmF3UGFyYW1zID0ge1xuICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgYnRjQWRkcmVzczogJ2JjMXByeGw4OHc0N3NycWg3MDNweHY1NjdxNDdlN2VwenVtZTRubHo4Y2dld2ZodHVlbm44bmdxZ3dtODB3JyxcbiAgICAgICAgbWF4RmVlOiAnMTAwMDAnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRXaXRoZHJhd1R4KHdpdGhkcmF3UGFyYW1zKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICBzYnRjV2l0aGRyYXdQYXJhbXM6IHsgLi4ud2l0aGRyYXdQYXJhbXMsIGFtb3VudDogJzk5OTknIH0sXG4gICAgICAgIHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6ICdTTTFLOVZGNUdONDhRMEFDMkM3U0I4V001TjVOUjZEWUM5Vk0zUUVKRScsIGFtb3VudDogJzEwJyB9XSxcbiAgICAgIH07XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sIHR4UGFyYW1zIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9zQlRDIHdpdGhkcmF3YWwgYW1vdW50IGRvZXMgbm90IG1hdGNoLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmVyaWZ5IHdpdGggd3JvbmcgbWF4RmVlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2l0aGRyYXdQYXJhbXMgPSB7XG4gICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICBidGNBZGRyZXNzOiAnYmMxcHJ4bDg4dzQ3c3JxaDcwM3B4djU2N3E0N2U3ZXB6dW1lNG5sejhjZ2V3Zmh0dWVubjhuZ3Fnd204MHcnLFxuICAgICAgICBtYXhGZWU6ICcxMDAwMCcsXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZFdpdGhkcmF3VHgod2l0aGRyYXdQYXJhbXMpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHNidGNXaXRoZHJhd1BhcmFtczogeyAuLi53aXRoZHJhd1BhcmFtcywgbWF4RmVlOiAnMScgfSxcbiAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogJ1NNMUs5VkY1R040OFEwQUMyQzdTQjhXTTVONU5SNkRZQzlWTTNRRUpFJywgYW1vdW50OiAnMTAnIH1dLFxuICAgICAgfTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UHJlYnVpbGQ6IHsgdHhIZXggfSwgdHhQYXJhbXMgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3NCVEMgd2l0aGRyYXdhbCBtYXhGZWUgZG9lcyBub3QgbWF0Y2gvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgd2l0aCB3cm9uZyBidGNBZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2l0aGRyYXdQYXJhbXMgPSB7XG4gICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICBidGNBZGRyZXNzOiAnYmMxcHJ4bDg4dzQ3c3JxaDcwM3B4djU2N3E0N2U3ZXB6dW1lNG5sejhjZ2V3Zmh0dWVubjhuZ3Fnd204MHcnLFxuICAgICAgICBtYXhGZWU6ICcxMDAwMCcsXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZFdpdGhkcmF3VHgod2l0aGRyYXdQYXJhbXMpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHNidGNXaXRoZHJhd1BhcmFtczogeyAuLi53aXRoZHJhd1BhcmFtcywgYnRjQWRkcmVzczogJzFCdkJNU0VZc3RXZXRxVEZuNUF1NG00R0ZnN3hKYU5WTjInIH0sXG4gICAgICAgIHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6ICdTTTFLOVZGNUdONDhRMEFDMkM3U0I4V001TjVOUjZEWUM5Vk0zUUVKRScsIGFtb3VudDogJzEwJyB9XSxcbiAgICAgIH07XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sIHR4UGFyYW1zIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9zQlRDIHdpdGhkcmF3YWwgYnRjQWRkcmVzcyBkb2VzIG5vdCBtYXRjaC8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUmVjb3ZlciBUcmFuc2FjdGlvbiBTVFgnLCBmdW5jdGlvbiAoKSB7XG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2suZW5hYmxlTmV0Q29ubmVjdCgpO1xuICAgIH0pO1xuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIH0pO1xuICAgIGFmdGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2suZGlzYWJsZU5ldENvbm5lY3QoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYSBzaWduZWQgcmVjb3ZlciB0cmFuc2FjdGlvbiB3aGVuIHByaXZhdGUga2V5IGRhdGEgaXMgcGFzc2VkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgcm9vdEFkZHJlc3MgPSB0ZXN0RGF0YS5IT1RfV0FMTEVUX1JPT1RfQUREUkVTUztcbiAgICAgIG5vY2soYGh0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zb2ApXG4gICAgICAgIC5nZXQoYC9leHRlbmRlZC92Mi9hZGRyZXNzZXMvJHtyb290QWRkcmVzc30vYmFsYW5jZXMvc3R4YClcbiAgICAgICAgLnJlcGx5KDIwMCwgdGVzdERhdGEuQUNDT1VOVF9CQUxBTkNFX1JFU1BPTlNFKTtcbiAgICAgIG5vY2soYGh0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zb2ApXG4gICAgICAgIC5nZXQoYC9leHRlbmRlZC92MS9hZGRyZXNzLyR7cm9vdEFkZHJlc3N9L25vbmNlc2ApXG4gICAgICAgIC5yZXBseSgyMDAsIHRlc3REYXRhLkFDQ09VTlRfTk9OQ0VfUkVTUE9OU0UpO1xuICAgICAgbm9jayhgaHR0cHM6Ly9hcGkudGVzdG5ldC5oaXJvLnNvYCwgeyBhbGxvd1VubW9ja2VkOiB0cnVlIH0pXG4gICAgICAgIC5wb3N0KGAvdjIvZmVlcy90cmFuc2FjdGlvbmAsIHRlc3REYXRhLkZFRV9FU1RJTUFUSU9OX1JFUVVFU1QpXG4gICAgICAgIC5yZXBseSgyMDAsIHRlc3REYXRhLkZFRV9FU1RJTUFUSU9OX1JFU1BPTlNFKTtcblxuICAgICAgY29uc3QgcmVjb3ZlcnlPcHRpb25zOiBSZWNvdmVyeU9wdGlvbnMgPSB7XG4gICAgICAgIGJhY2t1cEtleTogdGVzdERhdGEuSE9UX1dBTExFVF9LRVlfQ0FSRF9JTkZPLkJBQ0tVUF9LRVksXG4gICAgICAgIHVzZXJLZXk6IHRlc3REYXRhLkhPVF9XQUxMRVRfS0VZX0NBUkRfSU5GTy5VU0VSX0tFWSxcbiAgICAgICAgcm9vdEFkZHJlc3M6IHJvb3RBZGRyZXNzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiB0ZXN0RGF0YS5ERVNUSU5BVElPTl9BRERSRVNTX1dSVyxcbiAgICAgICAgYml0Z29LZXk6IHRlc3REYXRhLkhPVF9XQUxMRVRfS0VZX0NBUkRfSU5GTy5CSVRHT19QVUJfS0VZLFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiB0ZXN0RGF0YS5IT1RfV0FMTEVUX0tFWV9DQVJEX0lORk8uV0FMTEVUX1BBU1NQSFJBU0UsXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzcG9uc2U6IFJlY292ZXJ5VHJhbnNhY3Rpb24gPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHJlY292ZXJ5T3B0aW9ucyk7XG4gICAgICByZXNwb25zZS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHhIZXgnKTtcbiAgICAgIGFzc2VydC5kZWVwRXF1YWwocmVzcG9uc2UudHhIZXgsIHRlc3REYXRhLkhPVF9XQUxMRVRfUkVDT1ZFUllfVFhfSEVYLCAndHggaGV4IG5vdCBtYXRjaGluZyEnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYW4gdW5zaWduZWQgdHJhbnNhY3Rpb24gd2hlbiBwdWJsaWMga2V5cyBhcmUgcGFzc2VkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgcm9vdEFkZHJlc3MgPSB0ZXN0RGF0YS5DT0xEX1dBTExFVF9ST09UX0FERFJFU1M7XG4gICAgICBub2NrKGBodHRwczovL2FwaS50ZXN0bmV0Lmhpcm8uc29gKVxuICAgICAgICAuZ2V0KGAvZXh0ZW5kZWQvdjIvYWRkcmVzc2VzLyR7cm9vdEFkZHJlc3N9L2JhbGFuY2VzL3N0eGApXG4gICAgICAgIC5yZXBseSgyMDAsIHRlc3REYXRhLkFDQ09VTlRfQkFMQU5DRV9SRVNQT05TRSk7XG4gICAgICBub2NrKGBodHRwczovL2FwaS50ZXN0bmV0Lmhpcm8uc29gKVxuICAgICAgICAuZ2V0KGAvZXh0ZW5kZWQvdjEvYWRkcmVzcy8ke3Jvb3RBZGRyZXNzfS9ub25jZXNgKVxuICAgICAgICAucmVwbHkoMjAwLCB0ZXN0RGF0YS5BQ0NPVU5UX05PTkNFX1JFU1BPTlNFKTtcbiAgICAgIG5vY2soYGh0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zb2AsIHsgYWxsb3dVbm1vY2tlZDogdHJ1ZSB9KVxuICAgICAgICAucG9zdChgL3YyL2ZlZXMvdHJhbnNhY3Rpb25gLCB0ZXN0RGF0YS5GRUVfRVNUSU1BVElPTl9SRVFVRVNUKVxuICAgICAgICAucmVwbHkoMjAwLCB0ZXN0RGF0YS5GRUVfRVNUSU1BVElPTl9SRVNQT05TRSk7XG5cbiAgICAgIGNvbnN0IHJlY292ZXJ5T3B0aW9uczogUmVjb3ZlcnlPcHRpb25zID0ge1xuICAgICAgICBiYWNrdXBLZXk6IHRlc3REYXRhLkNPTERfV0FMTEVUX1BVQkxJQ19LRVlfSU5GTy5CQUNLVVBfS0VZLFxuICAgICAgICB1c2VyS2V5OiB0ZXN0RGF0YS5DT0xEX1dBTExFVF9QVUJMSUNfS0VZX0lORk8uVVNFUl9LRVksXG4gICAgICAgIHJvb3RBZGRyZXNzOiByb290QWRkcmVzcyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogdGVzdERhdGEuREVTVElOQVRJT05fQUREUkVTU19XUlcsXG4gICAgICAgIGJpdGdvS2V5OiB0ZXN0RGF0YS5DT0xEX1dBTExFVF9QVUJMSUNfS0VZX0lORk8uQklUR09fUFVCX0tFWSxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXNwb25zZTogUmVjb3ZlcnlJbmZvID0gYXdhaXQgYmFzZWNvaW4ucmVjb3ZlcihyZWNvdmVyeU9wdGlvbnMpO1xuICAgICAgcmVzcG9uc2Uuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3R4SGV4Jyk7XG4gICAgICByZXNwb25zZS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnY29pbicpO1xuICAgICAgcmVzcG9uc2Uuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2ZlZUluZm8nKTtcbiAgICAgIGFzc2VydC5kZWVwRXF1YWwocmVzcG9uc2UudHhIZXgsIHRlc3REYXRhLkNPTERfV0FMTEVUX1VOU0lHTkVEX1NXRUVQX1RYX0hFWCwgJ3R4IGhleCBub3QgbWF0Y2hpbmchJyk7XG4gICAgICBhc3NlcnQuZGVlcEVxdWFsKHJlc3BvbnNlLmNvaW4sICd0c3R4JywgJ2NvaW4gbm90IG1hdGNoaW5nIScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBpbnZhbGlkIHJvb3QgYWRkcmVzcyB3aGVuIHJvb3QgYWRkcmVzcyBpcyBtaXNzaW5nIG9yIGludmFsaWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZWNvdmVyeU9wdGlvbnM6IFJlY292ZXJ5T3B0aW9ucyA9IHtcbiAgICAgICAgYmFja3VwS2V5OiB0ZXN0RGF0YS5DT0xEX1dBTExFVF9QVUJMSUNfS0VZX0lORk8uQkFDS1VQX0tFWSxcbiAgICAgICAgdXNlcktleTogdGVzdERhdGEuQ09MRF9XQUxMRVRfUFVCTElDX0tFWV9JTkZPLlVTRVJfS0VZLFxuICAgICAgICByb290QWRkcmVzczogJycsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IHRlc3REYXRhLkRFU1RJTkFUSU9OX0FERFJFU1NfV1JXLFxuICAgICAgICBiaXRnb0tleTogdGVzdERhdGEuQ09MRF9XQUxMRVRfUFVCTElDX0tFWV9JTkZPLkJJVEdPX1BVQl9LRVksXG4gICAgICB9O1xuICAgICAgYXdhaXQgYmFzZWNvaW4ucmVjb3ZlcihyZWNvdmVyeU9wdGlvbnMpLnNob3VsZC5yZWplY3RlZFdpdGgoJ2ludmFsaWQgcm9vdCBhZGRyZXNzIScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBpbnZhbGlkIGRlc3RpbmF0aW9uIGFkZHJlc3Mgd2hlbiBkZXN0aW5hdGlvbiBhZGRyZXNzIGlzIG1pc3Npbmcgb3IgaW52YWxpZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlY292ZXJ5T3B0aW9uczogUmVjb3ZlcnlPcHRpb25zID0ge1xuICAgICAgICBiYWNrdXBLZXk6IHRlc3REYXRhLkNPTERfV0FMTEVUX1BVQkxJQ19LRVlfSU5GTy5CQUNLVVBfS0VZLFxuICAgICAgICB1c2VyS2V5OiB0ZXN0RGF0YS5DT0xEX1dBTExFVF9QVUJMSUNfS0VZX0lORk8uVVNFUl9LRVksXG4gICAgICAgIHJvb3RBZGRyZXNzOiB0ZXN0RGF0YS5DT0xEX1dBTExFVF9ST09UX0FERFJFU1MsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246ICcnLFxuICAgICAgICBiaXRnb0tleTogdGVzdERhdGEuQ09MRF9XQUxMRVRfUFVCTElDX0tFWV9JTkZPLkJJVEdPX1BVQl9LRVksXG4gICAgICB9O1xuICAgICAgYXdhaXQgYmFzZWNvaW4ucmVjb3ZlcihyZWNvdmVyeU9wdGlvbnMpLnNob3VsZC5yZWplY3RlZFdpdGgoJ2ludmFsaWQgZGVzdGluYXRpb24gYWRkcmVzcyEnKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGZhaWwgd2l0aCBubyBiYWxhbmNlIHdoZW4gcm9vdCBhZGRyZXNzIGRvZXNuJ3QgaGF2ZSBiYWxhbmNlXCIsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJvb3RBZGRyZXNzID0gdGVzdERhdGEuSE9UX1dBTExFVF9ST09UX0FERFJFU1M7XG4gICAgICBjb25zdCBzdHhCYWxhbmNlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0ZXN0RGF0YS5BQ0NPVU5UX0JBTEFOQ0VfUkVTUE9OU0UpKTtcbiAgICAgIHN0eEJhbGFuY2UuYmFsYW5jZSA9ICcwJztcbiAgICAgIG5vY2soYGh0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zb2ApXG4gICAgICAgIC5nZXQoYC9leHRlbmRlZC92Mi9hZGRyZXNzZXMvJHtyb290QWRkcmVzc30vYmFsYW5jZXMvc3R4YClcbiAgICAgICAgLnJlcGx5KDIwMCwgc3R4QmFsYW5jZSk7XG4gICAgICBub2NrKGBodHRwczovL2FwaS50ZXN0bmV0Lmhpcm8uc29gKVxuICAgICAgICAuZ2V0KGAvZXh0ZW5kZWQvdjEvYWRkcmVzcy8ke3Jvb3RBZGRyZXNzfS9ub25jZXNgKVxuICAgICAgICAucmVwbHkoMjAwLCB0ZXN0RGF0YS5BQ0NPVU5UX05PTkNFX1JFU1BPTlNFKTtcbiAgICAgIGNvbnN0IHJlY292ZXJ5T3B0aW9uczogUmVjb3ZlcnlPcHRpb25zID0ge1xuICAgICAgICBiYWNrdXBLZXk6IHRlc3REYXRhLkhPVF9XQUxMRVRfS0VZX0NBUkRfSU5GTy5CQUNLVVBfS0VZLFxuICAgICAgICB1c2VyS2V5OiB0ZXN0RGF0YS5IT1RfV0FMTEVUX0tFWV9DQVJEX0lORk8uVVNFUl9LRVksXG4gICAgICAgIHJvb3RBZGRyZXNzOiByb290QWRkcmVzcyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogdGVzdERhdGEuREVTVElOQVRJT05fQUREUkVTU19XUlcsXG4gICAgICAgIGJpdGdvS2V5OiB0ZXN0RGF0YS5IT1RfV0FMTEVUX0tFWV9DQVJEX0lORk8uQklUR09fUFVCX0tFWSxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogdGVzdERhdGEuSE9UX1dBTExFVF9LRVlfQ0FSRF9JTkZPLldBTExFVF9QQVNTUEhSQVNFLFxuICAgICAgfTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luLnJlY292ZXIocmVjb3ZlcnlPcHRpb25zKS5zaG91bGQucmVqZWN0ZWRXaXRoKEVycm9yTm9JbnB1dFRvUmVjb3Zlcik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgd2l0aCBpbnN1ZmZpY2llbnQgYmFsYW5jZSB3aGVuIHN0eCBiYWxhbmNlIGlzIGxvd2VyIHRoYW4gZmVlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgcm9vdEFkZHJlc3MgPSB0ZXN0RGF0YS5IT1RfV0FMTEVUX1JPT1RfQUREUkVTUztcbiAgICAgIC8vIGRlZXAgY2xvbmUgdG8gc3RvcCBtdXRhdGlvblxuICAgICAgY29uc3QgYWNjb3VudEJhbGFuY2UgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRlc3REYXRhLkFDQ09VTlRfQkFMQU5DRV9SRVNQT05TRSkpO1xuICAgICAgYWNjb3VudEJhbGFuY2UuYmFsYW5jZSA9ICcxMDAnOyAvLyBzZXQgYmFsYW5jZSBsb3dlciB0aGFuIGZlZVxuICAgICAgbm9jayhgaHR0cHM6Ly9hcGkudGVzdG5ldC5oaXJvLnNvYClcbiAgICAgICAgLmdldChgL2V4dGVuZGVkL3YyL2FkZHJlc3Nlcy8ke3Jvb3RBZGRyZXNzfS9iYWxhbmNlcy9zdHhgKVxuICAgICAgICAucmVwbHkoMjAwLCBhY2NvdW50QmFsYW5jZSk7XG4gICAgICBub2NrKGBodHRwczovL2FwaS50ZXN0bmV0Lmhpcm8uc29gKVxuICAgICAgICAuZ2V0KGAvZXh0ZW5kZWQvdjEvYWRkcmVzcy8ke3Jvb3RBZGRyZXNzfS9ub25jZXNgKVxuICAgICAgICAucmVwbHkoMjAwLCB0ZXN0RGF0YS5BQ0NPVU5UX05PTkNFX1JFU1BPTlNFKTtcbiAgICAgIGNvbnN0IGZlZVJlcXVlc3RCb2R5ID0gdGVzdERhdGEuRkVFX0VTVElNQVRJT05fUkVRVUVTVDtcbiAgICAgIGZlZVJlcXVlc3RCb2R5LnRyYW5zYWN0aW9uX3BheWxvYWQgPVxuICAgICAgICAnMDAwNTFhMTUwMGExYzQyZjBjMTFiZmUzODkzZjQ3OWFmMTg5MDQ2Nzc2ODViZTAwMDAwMDAwMDAwMDAwNjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCc7XG4gICAgICBub2NrKGBodHRwczovL2FwaS50ZXN0bmV0Lmhpcm8uc29gLCB7IGFsbG93VW5tb2NrZWQ6IHRydWUgfSlcbiAgICAgICAgLnBvc3QoYC92Mi9mZWVzL3RyYW5zYWN0aW9uYCwgZmVlUmVxdWVzdEJvZHkpXG4gICAgICAgIC5yZXBseSgyMDAsIHRlc3REYXRhLkZFRV9FU1RJTUFUSU9OX1JFU1BPTlNFKTtcbiAgICAgIGNvbnN0IHJlY292ZXJ5T3B0aW9uczogUmVjb3ZlcnlPcHRpb25zID0ge1xuICAgICAgICBiYWNrdXBLZXk6IHRlc3REYXRhLkhPVF9XQUxMRVRfS0VZX0NBUkRfSU5GTy5CQUNLVVBfS0VZLFxuICAgICAgICB1c2VyS2V5OiB0ZXN0RGF0YS5IT1RfV0FMTEVUX0tFWV9DQVJEX0lORk8uVVNFUl9LRVksXG4gICAgICAgIHJvb3RBZGRyZXNzOiByb290QWRkcmVzcyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogdGVzdERhdGEuREVTVElOQVRJT05fQUREUkVTU19XUlcsXG4gICAgICAgIGJpdGdvS2V5OiB0ZXN0RGF0YS5IT1RfV0FMTEVUX0tFWV9DQVJEX0lORk8uQklUR09fUFVCX0tFWSxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogdGVzdERhdGEuSE9UX1dBTExFVF9LRVlfQ0FSRF9JTkZPLldBTExFVF9QQVNTUEhSQVNFLFxuICAgICAgfTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luLnJlY292ZXIocmVjb3ZlcnlPcHRpb25zKS5zaG91bGQucmVqZWN0ZWRXaXRoKCdpbnN1ZmZpY2llbnQgYmFsYW5jZSB0byBidWlsZCB0aGUgdHJhbnNhY3Rpb24nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgUmVjb3ZlcnlQcm92aWRlckVycm9yIHdoZW4gdGhlIG5vZGUgZmFpbHMgdG8gcmV0dXJuIHRoZSBzdHggYmFsYW5jZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJvb3RBZGRyZXNzID0gdGVzdERhdGEuSE9UX1dBTExFVF9ST09UX0FERFJFU1M7XG4gICAgICBub2NrKGBodHRwczovL2FwaS50ZXN0bmV0Lmhpcm8uc29gKVxuICAgICAgICAuZ2V0KGAvZXh0ZW5kZWQvdjIvYWRkcmVzc2VzLyR7cm9vdEFkZHJlc3N9L2JhbGFuY2VzL3N0eGApXG4gICAgICAgIC5yZXBseSg1MDAsIHsgZXJyb3I6ICdub2RlIHVuYXZhaWxhYmxlJyB9KTtcbiAgICAgIG5vY2soYGh0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zb2ApXG4gICAgICAgIC5nZXQoYC9leHRlbmRlZC92MS9hZGRyZXNzLyR7cm9vdEFkZHJlc3N9L25vbmNlc2ApXG4gICAgICAgIC5yZXBseSgyMDAsIHRlc3REYXRhLkFDQ09VTlRfTk9OQ0VfUkVTUE9OU0UpO1xuICAgICAgY29uc3QgcmVjb3ZlcnlPcHRpb25zOiBSZWNvdmVyeU9wdGlvbnMgPSB7XG4gICAgICAgIGJhY2t1cEtleTogdGVzdERhdGEuSE9UX1dBTExFVF9LRVlfQ0FSRF9JTkZPLkJBQ0tVUF9LRVksXG4gICAgICAgIHVzZXJLZXk6IHRlc3REYXRhLkhPVF9XQUxMRVRfS0VZX0NBUkRfSU5GTy5VU0VSX0tFWSxcbiAgICAgICAgcm9vdEFkZHJlc3M6IHJvb3RBZGRyZXNzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiB0ZXN0RGF0YS5ERVNUSU5BVElPTl9BRERSRVNTX1dSVyxcbiAgICAgICAgYml0Z29LZXk6IHRlc3REYXRhLkhPVF9XQUxMRVRfS0VZX0NBUkRfSU5GTy5CSVRHT19QVUJfS0VZLFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiB0ZXN0RGF0YS5IT1RfV0FMTEVUX0tFWV9DQVJEX0lORk8uV0FMTEVUX1BBU1NQSFJBU0UsXG4gICAgICB9O1xuICAgICAgYXdhaXQgYmFzZWNvaW4ucmVjb3ZlcihyZWNvdmVyeU9wdGlvbnMpLnNob3VsZC5yZWplY3RlZFdpdGgoUmVjb3ZlcnlQcm92aWRlckVycm9yKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|