@bitgo-beta/abstract-utxo 1.1.1-beta.1821 → 1.1.1-beta.1823
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.
|
@@ -38,6 +38,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
const assert_1 = __importDefault(require("assert"));
|
|
40
40
|
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
41
|
+
const utxo_core_1 = require("@bitgo-beta/utxo-core");
|
|
41
42
|
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
42
43
|
const bip322_1 = require("../../src/transaction/bip322");
|
|
43
44
|
function createTestWalletKeys(seed) {
|
|
@@ -357,5 +358,53 @@ describe('BIP322', function () {
|
|
|
357
358
|
assert_1.default.throws(() => (0, bip322_1.generateBIP322MessageListAndVerifyFromMessageBroadcastable)(broadcastables, 'btc'), /did not have a successful validation/);
|
|
358
359
|
});
|
|
359
360
|
});
|
|
361
|
+
describe('utxolib verification stack - wasm-utxo respects input.sighashType', function () {
|
|
362
|
+
// This test verifies that wasm-utxo correctly respects the input.sighashType field
|
|
363
|
+
// when creating musig2 partial signatures.
|
|
364
|
+
//
|
|
365
|
+
// Previously (before fix), wasm-utxo would always create signatures with SIGHASH_DEFAULT (0)
|
|
366
|
+
// regardless of the input.sighashType field, causing validation to fail.
|
|
367
|
+
//
|
|
368
|
+
// Now (after fix), wasm-utxo reads input.sighashType and creates signatures with the
|
|
369
|
+
// correct sighash type, allowing validation to succeed.
|
|
370
|
+
it('should validate signatures when wasm-utxo respects input.sighashType', function () {
|
|
371
|
+
const seed = 'p2trMusig2_sighash_test';
|
|
372
|
+
const { xprivs } = createTestWalletKeys(seed);
|
|
373
|
+
// Create utxolib RootWalletKeys for utxo-core PSBT construction
|
|
374
|
+
const utxolibRootWalletKeys = new utxolib.bitgo.RootWalletKeys(utxolib.testutil.getKeyTriple(seed));
|
|
375
|
+
// p2trMusig2 external chain code
|
|
376
|
+
const chain = utxolib.bitgo.getExternalChainCode('p2trMusig2');
|
|
377
|
+
const index = 0;
|
|
378
|
+
const messageText = 'BIP322 sighash test';
|
|
379
|
+
// Create BIP322 PSBT using utxo-core
|
|
380
|
+
const psbt = utxo_core_1.bip322.createBaseToSignPsbt(utxolibRootWalletKeys, utxolib.networks.bitcoin);
|
|
381
|
+
utxo_core_1.bip322.addBip322InputWithChainAndIndex(psbt, messageText, utxolibRootWalletKeys, { chain, index });
|
|
382
|
+
// Note: utxo-core sets sighashType: Transaction.SIGHASH_ALL (1) for BIP322 inputs
|
|
383
|
+
const SIGHASH_ALL = 1;
|
|
384
|
+
assert_1.default.strictEqual(psbt.data.inputs[0].sighashType, SIGHASH_ALL);
|
|
385
|
+
// Convert to wasm-utxo PSBT for cosigning
|
|
386
|
+
const wasmPsbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(psbt.toBuffer(), 'btc');
|
|
387
|
+
// Generate musig2 nonces and sign with wasm-utxo
|
|
388
|
+
// wasm-utxo now respects input.sighashType and creates signatures with SIGHASH_ALL
|
|
389
|
+
const userKey = wasm_utxo_1.BIP32.fromBase58(xprivs[0]);
|
|
390
|
+
const bitgoKey = wasm_utxo_1.BIP32.fromBase58(xprivs[2]);
|
|
391
|
+
wasmPsbt.generateMusig2Nonces(userKey);
|
|
392
|
+
wasmPsbt.generateMusig2Nonces(bitgoKey);
|
|
393
|
+
wasmPsbt.sign(0, userKey);
|
|
394
|
+
wasmPsbt.sign(0, bitgoKey);
|
|
395
|
+
// Convert back to utxolib PSBT for validation
|
|
396
|
+
const signedPsbt = utxolib.bitgo.createPsbtFromBuffer(Buffer.from(wasmPsbt.serialize()), utxolib.networks.bitcoin);
|
|
397
|
+
// Validation should succeed because wasm-utxo now creates signatures
|
|
398
|
+
// with the correct sighash type (SIGHASH_ALL) matching input.sighashType
|
|
399
|
+
const validationResult = utxolib.bitgo.getSignatureValidationArrayPsbt(signedPsbt, utxolibRootWalletKeys);
|
|
400
|
+
// Verify that both user (index 0) and bitgo (index 2) signatures are valid
|
|
401
|
+
assert_1.default.strictEqual(validationResult.length, 1);
|
|
402
|
+
const [inputIndex, sigValidation] = validationResult[0];
|
|
403
|
+
assert_1.default.strictEqual(inputIndex, 0);
|
|
404
|
+
assert_1.default.strictEqual(sigValidation[0], true, 'user signature should be valid');
|
|
405
|
+
assert_1.default.strictEqual(sigValidation[1], false, 'backup signature should not be present');
|
|
406
|
+
assert_1.default.strictEqual(sigValidation[2], true, 'bitgo signature should be valid');
|
|
407
|
+
});
|
|
408
|
+
});
|
|
360
409
|
});
|
|
361
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlwMzIyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpcDMyMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUU1Qiw4REFBZ0Q7QUFDaEQsZ0RBQStGO0FBRS9GLHlEQU9zQztBQUV0QyxTQUFTLG9CQUFvQixDQUFDLElBQVk7SUFJeEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakQsT0FBTztRQUNMLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQW1CO1FBQ2pFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQW1CO0tBQ3hELENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxJQUFZLEVBQUUsS0FBYSxFQUFFLEtBQWE7SUFDbkUsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsS0FBSyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBbUIsQ0FBQztBQUM5RyxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsVUFBNEMsRUFBRSxLQUFhLEVBQUUsS0FBYTtJQUM1RixPQUFPLDZCQUFpQixDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUss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QUNwRCxXQUFXLEVBQUU7d0JBQ1g7NEJBQ0UsT0FBTzs0QkFDUCxPQUFPLEVBQUUsZUFBZSxFQUFFLGdDQUFnQzs0QkFDMUQsT0FBTzs0QkFDUCxVQUFVLEVBQUUsV0FBVzt5QkFDeEI7cUJBQ0Y7aUJBQ0Y7YUFDRixDQUFDO1lBRUYsZ0JBQU0sQ0FBQyxNQUFNLENBQ1gsR0FBRyxFQUFFLENBQUMsSUFBQSxtRUFBMEQsRUFBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLEVBQ3ZGLHNDQUFzQyxDQUN2QyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IGJpcDMyMiBhcyB3YXNtQmlwMzIyLCBmaXhlZFNjcmlwdFdhbGxldCwgQklQMzIsIHR5cGUgVHJpcGxlIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5cbmltcG9ydCB7XG4gIEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlLFxuICBCSVAzMjJNZXNzYWdlSW5mbyxcbiAgZGVzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZSxcbiAgZ2VuZXJhdGVCSVAzMjJNZXNzYWdlTGlzdEFuZFZlcmlmeUZyb21NZXNzYWdlQnJvYWRjYXN0YWJsZSxcbiAgc2VyaWFsaXplQklQMzIyQnJvYWRjYXN0YWJsZU1lc3NhZ2UsXG4gIHZlcmlmeVRyYW5zYWN0aW9uRnJvbUJyb2FkY2FzdGFibGVNZXNzYWdlLFxufSBmcm9tICcuLi8uLi9zcmMvdHJhbnNhY3Rpb24vYmlwMzIyJztcblxuZnVuY3Rpb24gY3JlYXRlVGVzdFdhbGxldEtleXMoc2VlZDogc3RyaW5nKToge1xuICB4cHViczogVHJpcGxlPHN0cmluZz47XG4gIHhwcml2czogVHJpcGxlPHN0cmluZz47XG59IHtcbiAgY29uc3Qga2V5cyA9IHV0eG9saWIudGVzdHV0aWwuZ2V0S2V5VHJpcGxlKHNlZWQpO1xuICByZXR1cm4ge1xuICAgIHhwdWJzOiBrZXlzLm1hcCgoaykgPT4gay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpIGFzIFRyaXBsZTxzdHJpbmc+LFxuICAgIHhwcml2czoga2V5cy5tYXAoKGspID0+IGsudG9CYXNlNTgoKSkgYXMgVHJpcGxlPHN0cmluZz4sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldERlcml2ZWRQdWJrZXlzKHNlZWQ6IHN0cmluZywgY2hhaW46IG51bWJlciwgaW5kZXg6IG51bWJlcik6IFRyaXBsZTxzdHJpbmc+IHtcbiAgY29uc3Qga2V5cyA9IHV0eG9saWIudGVzdHV0aWwuZ2V0S2V5VHJpcGxlKHNlZWQpO1xuICByZXR1cm4ga2V5cy5tYXAoKGspID0+IGsuZGVyaXZlUGF0aChgbS8wLzAvJHtjaGFpbn0vJHtpbmRleH1gKS5wdWJsaWNLZXkudG9TdHJpbmcoJ2hleCcpKSBhcyBUcmlwbGU8c3RyaW5nPjtcbn1cblxuZnVuY3Rpb24gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzOiBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cywgY2hhaW46IG51bWJlciwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBmaXhlZFNjcmlwdFdhbGxldC5hZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCwgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luKTtcbn1cblxuZGVzY3JpYmUoJ0JJUDMyMicsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ0JJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgc2VyaWFsaXplIGFuZCBkZXNlcmlhbGl6ZSBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6ICcwMTAyMDMnLFxuICAgICAgICBtZXNzYWdlSW5mbzogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICdzb21lQWRkcmVzcycsXG4gICAgICAgICAgICBtZXNzYWdlOiAnc29tZU1lc3NhZ2UnLFxuICAgICAgICAgICAgcHVia2V5czogWydwdWJrZXkxJywgJ3B1YmtleTInLCAncHVia2V5MyddLFxuICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Ayc2gnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzZXJpYWxpemVkID0gc2VyaWFsaXplQklQMzIyQnJvYWRjYXN0YWJsZU1lc3NhZ2UobWVzc2FnZSk7XG4gICAgICBjb25zdCBkZXNlcmlhbGl6ZWQgPSBkZXNlcmlhbGl6ZUJJUDMyMkJyb2FkY2FzdGFibGVNZXNzYWdlKHNlcmlhbGl6ZWQpO1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChkZXNlcmlhbGl6ZWQsIG1lc3NhZ2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIGlmIHRoZXJlIGlzIGFuIHVuc3VwcG9ydGVkIHNjcmlwdCB0eXBlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgdHhIZXg6ICcwMTAyMDMnLFxuICAgICAgICBtZXNzYWdlSW5mbzogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICdzb21lQWRkcmVzcycsXG4gICAgICAgICAgICBtZXNzYWdlOiAnc29tZU1lc3NhZ2UnLFxuICAgICAgICAgICAgcHVia2V5czogWydwdWJrZXkxJywgJ3B1YmtleTInLCAncHVia2V5MyddLFxuICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Vuc3VwcG9ydGVkJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSBhcyB1bmtub3duIGFzIEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlO1xuXG4gICAgICBjb25zdCBzZXJpYWxpemVkID0gc2VyaWFsaXplQklQMzIyQnJvYWRjYXN0YWJsZU1lc3NhZ2UobWVzc2FnZSk7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgZGVzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZShzZXJpYWxpemVkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndmVyaWZ5VHJhbnNhY3Rpb25Gcm9tQnJvYWRjYXN0YWJsZU1lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2VlZCA9ICdiaXAzMjJfdmVyaWZ5X3Rlc3QnO1xuICAgIGNvbnN0IHsgeHB1YnMsIHhwcml2cyB9ID0gY3JlYXRlVGVzdFdhbGxldEtleXMoc2VlZCk7XG4gICAgY29uc3Qgd2FsbGV0S2V5cyA9IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLmZyb20oeHB1YnMpO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYSB2YWxpZCBwMnNoUDJ3c2ggUFNCVCBwcm9vZicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdIZWxsbywgQml0R28hJztcblxuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcblxuICAgICAgLy8gU2lnbiB3aXRoIHVzZXIgYW5kIGJpdGdvIGtleXNcbiAgICAgIHBzYnQuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSkpO1xuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKSk7XG5cbiAgICAgIGNvbnN0IHB1YmtleXMgPSBnZXREZXJpdmVkUHVia2V5cyhzZWVkLCBjaGFpbiwgaW5kZXgpO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGdldEFkZHJlc3Mod2FsbGV0S2V5cywgY2hhaW4sIGluZGV4KTtcblxuICAgICAgY29uc3QgYnJvYWRjYXN0YWJsZTogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGUgPSB7XG4gICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0LnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIG1lc3NhZ2VJbmZvOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICAgICAgcHVia2V5cyxcbiAgICAgICAgICAgIHNjcmlwdFR5cGU6ICdwMnNoUDJ3c2gnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodmVyaWZ5VHJhbnNhY3Rpb25Gcm9tQnJvYWRjYXN0YWJsZU1lc3NhZ2UoYnJvYWRjYXN0YWJsZSwgJ2J0YycpLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmVyaWZ5IGEgdmFsaWQgcDJ3c2ggUFNCVCBwcm9vZicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMjA7XG4gICAgICBjb25zdCBpbmRleCA9IDU7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdQMldTSCBwcm9vZiB0ZXN0JztcblxuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcblxuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgbWVzc2FnZUluZm86IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgICAgICBwdWJrZXlzLFxuICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Ayd3NoJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZlcmlmeVRyYW5zYWN0aW9uRnJvbUJyb2FkY2FzdGFibGVNZXNzYWdlKGJyb2FkY2FzdGFibGUsICdidGMnKSwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBtdWx0aXBsZSBpbnB1dHMgaW4gYSBzaW5nbGUgUFNCVCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2VzID0gWydNZXNzYWdlIDEnLCAnTWVzc2FnZSAyJ107XG4gICAgICBjb25zdCBzY3JpcHRJZHMgPSBbXG4gICAgICAgIHsgY2hhaW46IDEwLCBpbmRleDogMCB9LFxuICAgICAgICB7IGNoYWluOiAyMCwgaW5kZXg6IDEgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBzY3JpcHRUeXBlczogQklQMzIyTWVzc2FnZUluZm9bJ3NjcmlwdFR5cGUnXVtdID0gWydwMnNoUDJ3c2gnLCAncDJ3c2gnXTtcblxuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHdhc21CaXAzMjIuYWRkQmlwMzIySW5wdXQocHNidCwge1xuICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VzW2ldLFxuICAgICAgICAgIHNjcmlwdElkOiBzY3JpcHRJZHNbaV0sXG4gICAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBTaWduIGFsbCBpbnB1dHNcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcHNidC5zaWduKGksIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICAgIHBzYnQuc2lnbihpLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1syXSkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXNzYWdlSW5mbzogQklQMzIyTWVzc2FnZUluZm9bXSA9IG1lc3NhZ2VzLm1hcCgobXNnLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IHB1YmtleXMgPSBnZXREZXJpdmVkUHVia2V5cyhzZWVkLCBzY3JpcHRJZHNbaV0uY2hhaW4sIHNjcmlwdElkc1tpXS5pbmRleCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYWRkcmVzczogZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBzY3JpcHRJZHNbaV0uY2hhaW4sIHNjcmlwdElkc1tpXS5pbmRleCksXG4gICAgICAgICAgbWVzc2FnZTogbXNnLFxuICAgICAgICAgIHB1YmtleXMsXG4gICAgICAgICAgc2NyaXB0VHlwZTogc2NyaXB0VHlwZXNbaV0sXG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYnJvYWRjYXN0YWJsZTogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGUgPSB7XG4gICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0LnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIG1lc3NhZ2VJbmZvLFxuICAgICAgfTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZlcmlmeVRyYW5zYWN0aW9uRnJvbUJyb2FkY2FzdGFibGVNZXNzYWdlKGJyb2FkY2FzdGFibGUsICdidGMnKSwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBmb3Igd3JvbmcgbWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdPcmlnaW5hbCBtZXNzYWdlJztcblxuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcblxuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgbWVzc2FnZUluZm86IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgICAgbWVzc2FnZTogJ0RpZmZlcmVudCBtZXNzYWdlJywgLy8gV3JvbmcgbWVzc2FnZVxuICAgICAgICAgICAgcHVia2V5cyxcbiAgICAgICAgICAgIHNjcmlwdFR5cGU6ICdwMnNoUDJ3c2gnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodmVyaWZ5VHJhbnNhY3Rpb25Gcm9tQnJvYWRjYXN0YWJsZU1lc3NhZ2UoYnJvYWRjYXN0YWJsZSwgJ2J0YycpLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciB1bnN1cHBvcnRlZCBjb2luJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYnJvYWRjYXN0YWJsZTogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGUgPSB7XG4gICAgICAgIHR4SGV4OiAnMDAnLFxuICAgICAgICBtZXNzYWdlSW5mbzogW10sXG4gICAgICB9O1xuXG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB2ZXJpZnlUcmFuc2FjdGlvbkZyb21Ccm9hZGNhc3RhYmxlTWVzc2FnZShicm9hZGNhc3RhYmxlLCAnbHRjJyksXG4gICAgICAgIC9Pbmx5IHRidGM0IG9yIGJ0YyBjb2luTmFtZXMgYXJlIHN1cHBvcnRlZC9cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZW5lcmF0ZUJJUDMyMk1lc3NhZ2VMaXN0QW5kVmVyaWZ5RnJvbU1lc3NhZ2VCcm9hZGNhc3RhYmxlJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNlZWQgPSAnYmlwMzIyX2dlbmVyYXRlX3Rlc3QnO1xuICAgIGNvbnN0IHsgeHB1YnMsIHhwcml2cyB9ID0gY3JlYXRlVGVzdFdhbGxldEtleXMoc2VlZCk7XG4gICAgY29uc3Qgd2FsbGV0S2V5cyA9IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLmZyb20oeHB1YnMpO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBtZXNzYWdlIGxpc3QgZnJvbSB2YWxpZCBwcm9vZnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IDEwO1xuICAgICAgY29uc3QgaW5kZXggPSAwO1xuICAgICAgY29uc3QgbWVzc2FnZVRleHQgPSAnUHJvb2YgbWVzc2FnZSc7XG5cbiAgICAgIGNvbnN0IHBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuY3JlYXRlRW1wdHkoJ2J0YycsIHdhbGxldEtleXMsIHsgdmVyc2lvbjogMCB9KTtcbiAgICAgIHdhc21CaXAzMjIuYWRkQmlwMzIySW5wdXQocHNidCwge1xuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlVGV4dCxcbiAgICAgICAgc2NyaXB0SWQ6IHsgY2hhaW4sIGluZGV4IH0sXG4gICAgICAgIHJvb3RXYWxsZXRLZXlzOiB3YWxsZXRLZXlzLFxuICAgICAgfSk7XG5cbiAgICAgIHBzYnQuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSkpO1xuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKSk7XG5cbiAgICAgIGNvbnN0IHB1YmtleXMgPSBnZXREZXJpdmVkUHVia2V5cyhzZWVkLCBjaGFpbiwgaW5kZXgpO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGdldEFkZHJlc3Mod2FsbGV0S2V5cywgY2hhaW4sIGluZGV4KTtcblxuICAgICAgY29uc3QgYnJvYWRjYXN0YWJsZXM6IEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlW10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eEhleDogQnVmZmVyLmZyb20ocHNidC5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIG1lc3NhZ2VJbmZvOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICAgICAgICBwdWJrZXlzLFxuICAgICAgICAgICAgICBzY3JpcHRUeXBlOiAncDJzaFAyd3NoJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdlbmVyYXRlQklQMzIyTWVzc2FnZUxpc3RBbmRWZXJpZnlGcm9tTWVzc2FnZUJyb2FkY2FzdGFibGUoYnJvYWRjYXN0YWJsZXMsICdidGMnKTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdFswXS5hZGRyZXNzLCBhZGRyZXNzKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHRbMF0ubWVzc2FnZSwgbWVzc2FnZVRleHQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBkZWR1cGxpY2F0ZSBhZGRyZXNzZXMgd2l0aCBzYW1lIG1lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IDEwO1xuICAgICAgY29uc3QgaW5kZXggPSAwO1xuICAgICAgY29uc3QgbWVzc2FnZVRleHQgPSAnU2FtZSBtZXNzYWdlJztcblxuICAgICAgLy8gQ3JlYXRlIHR3byBzZXBhcmF0ZSBQU0JUcyBmb3IgdGhlIHNhbWUgYWRkcmVzcy9tZXNzYWdlXG4gICAgICBjb25zdCBwc2J0MSA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0MSwge1xuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlVGV4dCxcbiAgICAgICAgc2NyaXB0SWQ6IHsgY2hhaW4sIGluZGV4IH0sXG4gICAgICAgIHJvb3RXYWxsZXRLZXlzOiB3YWxsZXRLZXlzLFxuICAgICAgfSk7XG4gICAgICBwc2J0MS5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0MS5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKSk7XG5cbiAgICAgIGNvbnN0IHBzYnQyID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQyLCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcbiAgICAgIHBzYnQyLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQyLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlczogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGVbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0MS5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIG1lc3NhZ2VJbmZvOiBbeyBhZGRyZXNzLCBtZXNzYWdlOiBtZXNzYWdlVGV4dCwgcHVia2V5cywgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcgfV0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eEhleDogQnVmZmVyLmZyb20ocHNidDIuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICBtZXNzYWdlSW5mbzogW3sgYWRkcmVzcywgbWVzc2FnZTogbWVzc2FnZVRleHQsIHB1YmtleXMsIHNjcmlwdFR5cGU6ICdwMnNoUDJ3c2gnIH1dLFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gZ2VuZXJhdGVCSVAzMjJNZXNzYWdlTGlzdEFuZFZlcmlmeUZyb21NZXNzYWdlQnJvYWRjYXN0YWJsZShicm9hZGNhc3RhYmxlcywgJ2J0YycpO1xuXG4gICAgICAvLyBTaG91bGQgZGVkdXBsaWNhdGUgdG8gYSBzaW5nbGUgZW50cnlcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQubGVuZ3RoLCAxKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHRbMF0uYWRkcmVzcywgYWRkcmVzcyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0WzBdLm1lc3NhZ2UsIG1lc3NhZ2VUZXh0KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZm9yIGR1cGxpY2F0ZSBhZGRyZXNzIHdpdGggZGlmZmVyZW50IG1lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IDEwO1xuICAgICAgY29uc3QgaW5kZXggPSAwO1xuXG4gICAgICBjb25zdCBwc2J0MSA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0MSwge1xuICAgICAgICBtZXNzYWdlOiAnTWVzc2FnZSAxJyxcbiAgICAgICAgc2NyaXB0SWQ6IHsgY2hhaW4sIGluZGV4IH0sXG4gICAgICAgIHJvb3RXYWxsZXRLZXlzOiB3YWxsZXRLZXlzLFxuICAgICAgfSk7XG4gICAgICBwc2J0MS5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0MS5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKSk7XG5cbiAgICAgIGNvbnN0IHBzYnQyID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQyLCB7XG4gICAgICAgIG1lc3NhZ2U6ICdNZXNzYWdlIDInLFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcbiAgICAgIHBzYnQyLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQyLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlczogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGVbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0MS5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIG1lc3NhZ2VJbmZvOiBbeyBhZGRyZXNzLCBtZXNzYWdlOiAnTWVzc2FnZSAxJywgcHVia2V5cywgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcgfV0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eEhleDogQnVmZmVyLmZyb20ocHNidDIuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICBtZXNzYWdlSW5mbzogW3sgYWRkcmVzcywgbWVzc2FnZTogJ01lc3NhZ2UgMicsIHB1YmtleXMsIHNjcmlwdFR5cGU6ICdwMnNoUDJ3c2gnIH1dLFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gZ2VuZXJhdGVCSVAzMjJNZXNzYWdlTGlzdEFuZFZlcmlmeUZyb21NZXNzYWdlQnJvYWRjYXN0YWJsZShicm9hZGNhc3RhYmxlcywgJ2J0YycpLFxuICAgICAgICAvRHVwbGljYXRlIGFkZHJlc3MuKmhhcyBkaWZmZXJlbnQgbWVzc2FnZXMvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBmb3IgaW52YWxpZCBwcm9vZicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdWYWxpZCBtZXNzYWdlJztcblxuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcbiAgICAgIHBzYnQuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSkpO1xuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKSk7XG5cbiAgICAgIGNvbnN0IHB1YmtleXMgPSBnZXREZXJpdmVkUHVia2V5cyhzZWVkLCBjaGFpbiwgaW5kZXgpO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGdldEFkZHJlc3Mod2FsbGV0S2V5cywgY2hhaW4sIGluZGV4KTtcblxuICAgICAgY29uc3QgYnJvYWRjYXN0YWJsZXM6IEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlW10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eEhleDogQnVmZmVyLmZyb20ocHNidC5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIG1lc3NhZ2VJbmZvOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdXcm9uZyBtZXNzYWdlJywgLy8gRG9lc24ndCBtYXRjaCB3aGF0IHdhcyBzaWduZWRcbiAgICAgICAgICAgICAgcHVia2V5cyxcbiAgICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBnZW5lcmF0ZUJJUDMyMk1lc3NhZ2VMaXN0QW5kVmVyaWZ5RnJvbU1lc3NhZ2VCcm9hZGNhc3RhYmxlKGJyb2FkY2FzdGFibGVzLCAnYnRjJyksXG4gICAgICAgIC9kaWQgbm90IGhhdmUgYSBzdWNjZXNzZnVsIHZhbGlkYXRpb24vXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
410
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlwMzIyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpcDMyMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUU1Qiw4REFBZ0Q7QUFDaEQscURBQTZEO0FBQzdELGdEQUErRjtBQUUvRix5REFPc0M7QUFFdEMsU0FBUyxvQkFBb0IsQ0FBQyxJQUFZO0lBSXhDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pELE9BQU87UUFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFtQjtRQUNqRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFtQjtLQUN4RCxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsSUFBWSxFQUFFLEtBQWEsRUFBRSxLQUFhO0lBQ25FLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEtBQUssSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQW1CLENBQUM7QUFDOUcsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLFVBQTRDLEVBQUUsS0FBYSxFQUFFLEtBQWE7SUFDNUYsT0FBTyw2QkFBaUIsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEtB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QUFPLENBQUMsS0FBSyxDQUFDLCtCQUErQixDQUFDLFVBQVUsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1lBRTFHLDJFQUEyRTtZQUMzRSxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDL0MsTUFBTSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4RCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbEMsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO1lBQzdFLGdCQUFNLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsd0NBQXdDLENBQUMsQ0FBQztZQUN0RixnQkFBTSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLGlDQUFpQyxDQUFDLENBQUM7UUFDaEYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IGJpcDMyMiBhcyBjb3JlQmlwMzIyIH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1jb3JlJztcbmltcG9ydCB7IGJpcDMyMiBhcyB3YXNtQmlwMzIyLCBmaXhlZFNjcmlwdFdhbGxldCwgQklQMzIsIHR5cGUgVHJpcGxlIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5cbmltcG9ydCB7XG4gIEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlLFxuICBCSVAzMjJNZXNzYWdlSW5mbyxcbiAgZGVzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZSxcbiAgZ2VuZXJhdGVCSVAzMjJNZXNzYWdlTGlzdEFuZFZlcmlmeUZyb21NZXNzYWdlQnJvYWRjYXN0YWJsZSxcbiAgc2VyaWFsaXplQklQMzIyQnJvYWRjYXN0YWJsZU1lc3NhZ2UsXG4gIHZlcmlmeVRyYW5zYWN0aW9uRnJvbUJyb2FkY2FzdGFibGVNZXNzYWdlLFxufSBmcm9tICcuLi8uLi9zcmMvdHJhbnNhY3Rpb24vYmlwMzIyJztcblxuZnVuY3Rpb24gY3JlYXRlVGVzdFdhbGxldEtleXMoc2VlZDogc3RyaW5nKToge1xuICB4cHViczogVHJpcGxlPHN0cmluZz47XG4gIHhwcml2czogVHJpcGxlPHN0cmluZz47XG59IHtcbiAgY29uc3Qga2V5cyA9IHV0eG9saWIudGVzdHV0aWwuZ2V0S2V5VHJpcGxlKHNlZWQpO1xuICByZXR1cm4ge1xuICAgIHhwdWJzOiBrZXlzLm1hcCgoaykgPT4gay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpIGFzIFRyaXBsZTxzdHJpbmc+LFxuICAgIHhwcml2czoga2V5cy5tYXAoKGspID0+IGsudG9CYXNlNTgoKSkgYXMgVHJpcGxlPHN0cmluZz4sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldERlcml2ZWRQdWJrZXlzKHNlZWQ6IHN0cmluZywgY2hhaW46IG51bWJlciwgaW5kZXg6IG51bWJlcik6IFRyaXBsZTxzdHJpbmc+IHtcbiAgY29uc3Qga2V5cyA9IHV0eG9saWIudGVzdHV0aWwuZ2V0S2V5VHJpcGxlKHNlZWQpO1xuICByZXR1cm4ga2V5cy5tYXAoKGspID0+IGsuZGVyaXZlUGF0aChgbS8wLzAvJHtjaGFpbn0vJHtpbmRleH1gKS5wdWJsaWNLZXkudG9TdHJpbmcoJ2hleCcpKSBhcyBUcmlwbGU8c3RyaW5nPjtcbn1cblxuZnVuY3Rpb24gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzOiBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cywgY2hhaW46IG51bWJlciwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBmaXhlZFNjcmlwdFdhbGxldC5hZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCwgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luKTtcbn1cblxuZGVzY3JpYmUoJ0JJUDMyMicsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ0JJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgc2VyaWFsaXplIGFuZCBkZXNlcmlhbGl6ZSBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6ICcwMTAyMDMnLFxuICAgICAgICBtZXNzYWdlSW5mbzogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICdzb21lQWRkcmVzcycsXG4gICAgICAgICAgICBtZXNzYWdlOiAnc29tZU1lc3NhZ2UnLFxuICAgICAgICAgICAgcHVia2V5czogWydwdWJrZXkxJywgJ3B1YmtleTInLCAncHVia2V5MyddLFxuICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Ayc2gnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzZXJpYWxpemVkID0gc2VyaWFsaXplQklQMzIyQnJvYWRjYXN0YWJsZU1lc3NhZ2UobWVzc2FnZSk7XG4gICAgICBjb25zdCBkZXNlcmlhbGl6ZWQgPSBkZXNlcmlhbGl6ZUJJUDMyMkJyb2FkY2FzdGFibGVNZXNzYWdlKHNlcmlhbGl6ZWQpO1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChkZXNlcmlhbGl6ZWQsIG1lc3NhZ2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIGlmIHRoZXJlIGlzIGFuIHVuc3VwcG9ydGVkIHNjcmlwdCB0eXBlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgdHhIZXg6ICcwMTAyMDMnLFxuICAgICAgICBtZXNzYWdlSW5mbzogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICdzb21lQWRkcmVzcycsXG4gICAgICAgICAgICBtZXNzYWdlOiAnc29tZU1lc3NhZ2UnLFxuICAgICAgICAgICAgcHVia2V5czogWydwdWJrZXkxJywgJ3B1YmtleTInLCAncHVia2V5MyddLFxuICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Vuc3VwcG9ydGVkJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSBhcyB1bmtub3duIGFzIEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlO1xuXG4gICAgICBjb25zdCBzZXJpYWxpemVkID0gc2VyaWFsaXplQklQMzIyQnJvYWRjYXN0YWJsZU1lc3NhZ2UobWVzc2FnZSk7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgZGVzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZShzZXJpYWxpemVkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndmVyaWZ5VHJhbnNhY3Rpb25Gcm9tQnJvYWRjYXN0YWJsZU1lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2VlZCA9ICdiaXAzMjJfdmVyaWZ5X3Rlc3QnO1xuICAgIGNvbnN0IHsgeHB1YnMsIHhwcml2cyB9ID0gY3JlYXRlVGVzdFdhbGxldEtleXMoc2VlZCk7XG4gICAgY29uc3Qgd2FsbGV0S2V5cyA9IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLmZyb20oeHB1YnMpO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYSB2YWxpZCBwMnNoUDJ3c2ggUFNCVCBwcm9vZicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdIZWxsbywgQml0R28hJztcblxuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcblxuICAgICAgLy8gU2lnbiB3aXRoIHVzZXIgYW5kIGJpdGdvIGtleXNcbiAgICAgIHBzYnQuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSkpO1xuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKSk7XG5cbiAgICAgIGNvbnN0IHB1YmtleXMgPSBnZXREZXJpdmVkUHVia2V5cyhzZWVkLCBjaGFpbiwgaW5kZXgpO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGdldEFkZHJlc3Mod2FsbGV0S2V5cywgY2hhaW4sIGluZGV4KTtcblxuICAgICAgY29uc3QgYnJvYWRjYXN0YWJsZTogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGUgPSB7XG4gICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0LnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIG1lc3NhZ2VJbmZvOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICAgICAgcHVia2V5cyxcbiAgICAgICAgICAgIHNjcmlwdFR5cGU6ICdwMnNoUDJ3c2gnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodmVyaWZ5VHJhbnNhY3Rpb25Gcm9tQnJvYWRjYXN0YWJsZU1lc3NhZ2UoYnJvYWRjYXN0YWJsZSwgJ2J0YycpLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmVyaWZ5IGEgdmFsaWQgcDJ3c2ggUFNCVCBwcm9vZicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMjA7XG4gICAgICBjb25zdCBpbmRleCA9IDU7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdQMldTSCBwcm9vZiB0ZXN0JztcblxuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcblxuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgbWVzc2FnZUluZm86IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgICAgICBwdWJrZXlzLFxuICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Ayd3NoJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZlcmlmeVRyYW5zYWN0aW9uRnJvbUJyb2FkY2FzdGFibGVNZXNzYWdlKGJyb2FkY2FzdGFibGUsICdidGMnKSwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBtdWx0aXBsZSBpbnB1dHMgaW4gYSBzaW5nbGUgUFNCVCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2VzID0gWydNZXNzYWdlIDEnLCAnTWVzc2FnZSAyJ107XG4gICAgICBjb25zdCBzY3JpcHRJZHMgPSBbXG4gICAgICAgIHsgY2hhaW46IDEwLCBpbmRleDogMCB9LFxuICAgICAgICB7IGNoYWluOiAyMCwgaW5kZXg6IDEgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBzY3JpcHRUeXBlczogQklQMzIyTWVzc2FnZUluZm9bJ3NjcmlwdFR5cGUnXVtdID0gWydwMnNoUDJ3c2gnLCAncDJ3c2gnXTtcblxuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHdhc21CaXAzMjIuYWRkQmlwMzIySW5wdXQocHNidCwge1xuICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VzW2ldLFxuICAgICAgICAgIHNjcmlwdElkOiBzY3JpcHRJZHNbaV0sXG4gICAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBTaWduIGFsbCBpbnB1dHNcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcHNidC5zaWduKGksIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICAgIHBzYnQuc2lnbihpLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1syXSkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXNzYWdlSW5mbzogQklQMzIyTWVzc2FnZUluZm9bXSA9IG1lc3NhZ2VzLm1hcCgobXNnLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IHB1YmtleXMgPSBnZXREZXJpdmVkUHVia2V5cyhzZWVkLCBzY3JpcHRJZHNbaV0uY2hhaW4sIHNjcmlwdElkc1tpXS5pbmRleCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYWRkcmVzczogZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBzY3JpcHRJZHNbaV0uY2hhaW4sIHNjcmlwdElkc1tpXS5pbmRleCksXG4gICAgICAgICAgbWVzc2FnZTogbXNnLFxuICAgICAgICAgIHB1YmtleXMsXG4gICAgICAgICAgc2NyaXB0VHlwZTogc2NyaXB0VHlwZXNbaV0sXG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYnJvYWRjYXN0YWJsZTogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGUgPSB7XG4gICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0LnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIG1lc3NhZ2VJbmZvLFxuICAgICAgfTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZlcmlmeVRyYW5zYWN0aW9uRnJvbUJyb2FkY2FzdGFibGVNZXNzYWdlKGJyb2FkY2FzdGFibGUsICdidGMnKSwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBmb3Igd3JvbmcgbWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdPcmlnaW5hbCBtZXNzYWdlJztcblxuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcblxuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgbWVzc2FnZUluZm86IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgICAgbWVzc2FnZTogJ0RpZmZlcmVudCBtZXNzYWdlJywgLy8gV3JvbmcgbWVzc2FnZVxuICAgICAgICAgICAgcHVia2V5cyxcbiAgICAgICAgICAgIHNjcmlwdFR5cGU6ICdwMnNoUDJ3c2gnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodmVyaWZ5VHJhbnNhY3Rpb25Gcm9tQnJvYWRjYXN0YWJsZU1lc3NhZ2UoYnJvYWRjYXN0YWJsZSwgJ2J0YycpLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciB1bnN1cHBvcnRlZCBjb2luJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYnJvYWRjYXN0YWJsZTogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGUgPSB7XG4gICAgICAgIHR4SGV4OiAnMDAnLFxuICAgICAgICBtZXNzYWdlSW5mbzogW10sXG4gICAgICB9O1xuXG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB2ZXJpZnlUcmFuc2FjdGlvbkZyb21Ccm9hZGNhc3RhYmxlTWVzc2FnZShicm9hZGNhc3RhYmxlLCAnbHRjJyksXG4gICAgICAgIC9Pbmx5IHRidGM0IG9yIGJ0YyBjb2luTmFtZXMgYXJlIHN1cHBvcnRlZC9cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZW5lcmF0ZUJJUDMyMk1lc3NhZ2VMaXN0QW5kVmVyaWZ5RnJvbU1lc3NhZ2VCcm9hZGNhc3RhYmxlJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNlZWQgPSAnYmlwMzIyX2dlbmVyYXRlX3Rlc3QnO1xuICAgIGNvbnN0IHsgeHB1YnMsIHhwcml2cyB9ID0gY3JlYXRlVGVzdFdhbGxldEtleXMoc2VlZCk7XG4gICAgY29uc3Qgd2FsbGV0S2V5cyA9IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLmZyb20oeHB1YnMpO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBtZXNzYWdlIGxpc3QgZnJvbSB2YWxpZCBwcm9vZnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IDEwO1xuICAgICAgY29uc3QgaW5kZXggPSAwO1xuICAgICAgY29uc3QgbWVzc2FnZVRleHQgPSAnUHJvb2YgbWVzc2FnZSc7XG5cbiAgICAgIGNvbnN0IHBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuY3JlYXRlRW1wdHkoJ2J0YycsIHdhbGxldEtleXMsIHsgdmVyc2lvbjogMCB9KTtcbiAgICAgIHdhc21CaXAzMjIuYWRkQmlwMzIySW5wdXQocHNidCwge1xuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlVGV4dCxcbiAgICAgICAgc2NyaXB0SWQ6IHsgY2hhaW4sIGluZGV4IH0sXG4gICAgICAgIHJvb3RXYWxsZXRLZXlzOiB3YWxsZXRLZXlzLFxuICAgICAgfSk7XG5cbiAgICAgIHBzYnQuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSkpO1xuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKSk7XG5cbiAgICAgIGNvbnN0IHB1YmtleXMgPSBnZXREZXJpdmVkUHVia2V5cyhzZWVkLCBjaGFpbiwgaW5kZXgpO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGdldEFkZHJlc3Mod2FsbGV0S2V5cywgY2hhaW4sIGluZGV4KTtcblxuICAgICAgY29uc3QgYnJvYWRjYXN0YWJsZXM6IEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlW10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eEhleDogQnVmZmVyLmZyb20ocHNidC5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIG1lc3NhZ2VJbmZvOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICAgICAgICBwdWJrZXlzLFxuICAgICAgICAgICAgICBzY3JpcHRUeXBlOiAncDJzaFAyd3NoJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdlbmVyYXRlQklQMzIyTWVzc2FnZUxpc3RBbmRWZXJpZnlGcm9tTWVzc2FnZUJyb2FkY2FzdGFibGUoYnJvYWRjYXN0YWJsZXMsICdidGMnKTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdFswXS5hZGRyZXNzLCBhZGRyZXNzKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHRbMF0ubWVzc2FnZSwgbWVzc2FnZVRleHQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBkZWR1cGxpY2F0ZSBhZGRyZXNzZXMgd2l0aCBzYW1lIG1lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IDEwO1xuICAgICAgY29uc3QgaW5kZXggPSAwO1xuICAgICAgY29uc3QgbWVzc2FnZVRleHQgPSAnU2FtZSBtZXNzYWdlJztcblxuICAgICAgLy8gQ3JlYXRlIHR3byBzZXBhcmF0ZSBQU0JUcyBmb3IgdGhlIHNhbWUgYWRkcmVzcy9tZXNzYWdlXG4gICAgICBjb25zdCBwc2J0MSA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0MSwge1xuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlVGV4dCxcbiAgICAgICAgc2NyaXB0SWQ6IHsgY2hhaW4sIGluZGV4IH0sXG4gICAgICAgIHJvb3RXYWxsZXRLZXlzOiB3YWxsZXRLZXlzLFxuICAgICAgfSk7XG4gICAgICBwc2J0MS5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0MS5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKSk7XG5cbiAgICAgIGNvbnN0IHBzYnQyID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQyLCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcbiAgICAgIHBzYnQyLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQyLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlczogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGVbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0MS5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIG1lc3NhZ2VJbmZvOiBbeyBhZGRyZXNzLCBtZXNzYWdlOiBtZXNzYWdlVGV4dCwgcHVia2V5cywgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcgfV0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eEhleDogQnVmZmVyLmZyb20ocHNidDIuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICBtZXNzYWdlSW5mbzogW3sgYWRkcmVzcywgbWVzc2FnZTogbWVzc2FnZVRleHQsIHB1YmtleXMsIHNjcmlwdFR5cGU6ICdwMnNoUDJ3c2gnIH1dLFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gZ2VuZXJhdGVCSVAzMjJNZXNzYWdlTGlzdEFuZFZlcmlmeUZyb21NZXNzYWdlQnJvYWRjYXN0YWJsZShicm9hZGNhc3RhYmxlcywgJ2J0YycpO1xuXG4gICAgICAvLyBTaG91bGQgZGVkdXBsaWNhdGUgdG8gYSBzaW5nbGUgZW50cnlcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQubGVuZ3RoLCAxKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHRbMF0uYWRkcmVzcywgYWRkcmVzcyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0WzBdLm1lc3NhZ2UsIG1lc3NhZ2VUZXh0KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZm9yIGR1cGxpY2F0ZSBhZGRyZXNzIHdpdGggZGlmZmVyZW50IG1lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IDEwO1xuICAgICAgY29uc3QgaW5kZXggPSAwO1xuXG4gICAgICBjb25zdCBwc2J0MSA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0MSwge1xuICAgICAgICBtZXNzYWdlOiAnTWVzc2FnZSAxJyxcbiAgICAgICAgc2NyaXB0SWQ6IHsgY2hhaW4sIGluZGV4IH0sXG4gICAgICAgIHJvb3RXYWxsZXRLZXlzOiB3YWxsZXRLZXlzLFxuICAgICAgfSk7XG4gICAgICBwc2J0MS5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0MS5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKSk7XG5cbiAgICAgIGNvbnN0IHBzYnQyID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQyLCB7XG4gICAgICAgIG1lc3NhZ2U6ICdNZXNzYWdlIDInLFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcbiAgICAgIHBzYnQyLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQyLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlczogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGVbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0MS5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIG1lc3NhZ2VJbmZvOiBbeyBhZGRyZXNzLCBtZXNzYWdlOiAnTWVzc2FnZSAxJywgcHVia2V5cywgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcgfV0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eEhleDogQnVmZmVyLmZyb20ocHNidDIuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICBtZXNzYWdlSW5mbzogW3sgYWRkcmVzcywgbWVzc2FnZTogJ01lc3NhZ2UgMicsIHB1YmtleXMsIHNjcmlwdFR5cGU6ICdwMnNoUDJ3c2gnIH1dLFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gZ2VuZXJhdGVCSVAzMjJNZXNzYWdlTGlzdEFuZFZlcmlmeUZyb21NZXNzYWdlQnJvYWRjYXN0YWJsZShicm9hZGNhc3RhYmxlcywgJ2J0YycpLFxuICAgICAgICAvRHVwbGljYXRlIGFkZHJlc3MuKmhhcyBkaWZmZXJlbnQgbWVzc2FnZXMvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBmb3IgaW52YWxpZCBwcm9vZicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdWYWxpZCBtZXNzYWdlJztcblxuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcbiAgICAgIHBzYnQuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSkpO1xuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKSk7XG5cbiAgICAgIGNvbnN0IHB1YmtleXMgPSBnZXREZXJpdmVkUHVia2V5cyhzZWVkLCBjaGFpbiwgaW5kZXgpO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGdldEFkZHJlc3Mod2FsbGV0S2V5cywgY2hhaW4sIGluZGV4KTtcblxuICAgICAgY29uc3QgYnJvYWRjYXN0YWJsZXM6IEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlW10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eEhleDogQnVmZmVyLmZyb20ocHNidC5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIG1lc3NhZ2VJbmZvOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdXcm9uZyBtZXNzYWdlJywgLy8gRG9lc24ndCBtYXRjaCB3aGF0IHdhcyBzaWduZWRcbiAgICAgICAgICAgICAgcHVia2V5cyxcbiAgICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBnZW5lcmF0ZUJJUDMyMk1lc3NhZ2VMaXN0QW5kVmVyaWZ5RnJvbU1lc3NhZ2VCcm9hZGNhc3RhYmxlKGJyb2FkY2FzdGFibGVzLCAnYnRjJyksXG4gICAgICAgIC9kaWQgbm90IGhhdmUgYSBzdWNjZXNzZnVsIHZhbGlkYXRpb24vXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndXR4b2xpYiB2ZXJpZmljYXRpb24gc3RhY2sgLSB3YXNtLXV0eG8gcmVzcGVjdHMgaW5wdXQuc2lnaGFzaFR5cGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgLy8gVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgd2FzbS11dHhvIGNvcnJlY3RseSByZXNwZWN0cyB0aGUgaW5wdXQuc2lnaGFzaFR5cGUgZmllbGRcbiAgICAvLyB3aGVuIGNyZWF0aW5nIG11c2lnMiBwYXJ0aWFsIHNpZ25hdHVyZXMuXG4gICAgLy9cbiAgICAvLyBQcmV2aW91c2x5IChiZWZvcmUgZml4KSwgd2FzbS11dHhvIHdvdWxkIGFsd2F5cyBjcmVhdGUgc2lnbmF0dXJlcyB3aXRoIFNJR0hBU0hfREVGQVVMVCAoMClcbiAgICAvLyByZWdhcmRsZXNzIG9mIHRoZSBpbnB1dC5zaWdoYXNoVHlwZSBmaWVsZCwgY2F1c2luZyB2YWxpZGF0aW9uIHRvIGZhaWwuXG4gICAgLy9cbiAgICAvLyBOb3cgKGFmdGVyIGZpeCksIHdhc20tdXR4byByZWFkcyBpbnB1dC5zaWdoYXNoVHlwZSBhbmQgY3JlYXRlcyBzaWduYXR1cmVzIHdpdGggdGhlXG4gICAgLy8gY29ycmVjdCBzaWdoYXNoIHR5cGUsIGFsbG93aW5nIHZhbGlkYXRpb24gdG8gc3VjY2VlZC5cblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgc2lnbmF0dXJlcyB3aGVuIHdhc20tdXR4byByZXNwZWN0cyBpbnB1dC5zaWdoYXNoVHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNlZWQgPSAncDJ0ck11c2lnMl9zaWdoYXNoX3Rlc3QnO1xuICAgICAgY29uc3QgeyB4cHJpdnMgfSA9IGNyZWF0ZVRlc3RXYWxsZXRLZXlzKHNlZWQpO1xuXG4gICAgICAvLyBDcmVhdGUgdXR4b2xpYiBSb290V2FsbGV0S2V5cyBmb3IgdXR4by1jb3JlIFBTQlQgY29uc3RydWN0aW9uXG4gICAgICBjb25zdCB1dHhvbGliUm9vdFdhbGxldEtleXMgPSBuZXcgdXR4b2xpYi5iaXRnby5Sb290V2FsbGV0S2V5cyh1dHhvbGliLnRlc3R1dGlsLmdldEtleVRyaXBsZShzZWVkKSk7XG5cbiAgICAgIC8vIHAydHJNdXNpZzIgZXh0ZXJuYWwgY2hhaW4gY29kZVxuICAgICAgY29uc3QgY2hhaW4gPSB1dHhvbGliLmJpdGdvLmdldEV4dGVybmFsQ2hhaW5Db2RlKCdwMnRyTXVzaWcyJyk7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdCSVAzMjIgc2lnaGFzaCB0ZXN0JztcblxuICAgICAgLy8gQ3JlYXRlIEJJUDMyMiBQU0JUIHVzaW5nIHV0eG8tY29yZVxuICAgICAgY29uc3QgcHNidCA9IGNvcmVCaXAzMjIuY3JlYXRlQmFzZVRvU2lnblBzYnQodXR4b2xpYlJvb3RXYWxsZXRLZXlzLCB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4pO1xuICAgICAgY29yZUJpcDMyMi5hZGRCaXAzMjJJbnB1dFdpdGhDaGFpbkFuZEluZGV4KHBzYnQsIG1lc3NhZ2VUZXh0LCB1dHhvbGliUm9vdFdhbGxldEtleXMsIHsgY2hhaW4sIGluZGV4IH0pO1xuXG4gICAgICAvLyBOb3RlOiB1dHhvLWNvcmUgc2V0cyBzaWdoYXNoVHlwZTogVHJhbnNhY3Rpb24uU0lHSEFTSF9BTEwgKDEpIGZvciBCSVAzMjIgaW5wdXRzXG4gICAgICBjb25zdCBTSUdIQVNIX0FMTCA9IDE7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocHNidC5kYXRhLmlucHV0c1swXS5zaWdoYXNoVHlwZSwgU0lHSEFTSF9BTEwpO1xuXG4gICAgICAvLyBDb252ZXJ0IHRvIHdhc20tdXR4byBQU0JUIGZvciBjb3NpZ25pbmdcbiAgICAgIGNvbnN0IHdhc21Qc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmZyb21CeXRlcyhwc2J0LnRvQnVmZmVyKCksICdidGMnKTtcblxuICAgICAgLy8gR2VuZXJhdGUgbXVzaWcyIG5vbmNlcyBhbmQgc2lnbiB3aXRoIHdhc20tdXR4b1xuICAgICAgLy8gd2FzbS11dHhvIG5vdyByZXNwZWN0cyBpbnB1dC5zaWdoYXNoVHlwZSBhbmQgY3JlYXRlcyBzaWduYXR1cmVzIHdpdGggU0lHSEFTSF9BTExcbiAgICAgIGNvbnN0IHVzZXJLZXkgPSBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSk7XG4gICAgICBjb25zdCBiaXRnb0tleSA9IEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKTtcblxuICAgICAgd2FzbVBzYnQuZ2VuZXJhdGVNdXNpZzJOb25jZXModXNlcktleSk7XG4gICAgICB3YXNtUHNidC5nZW5lcmF0ZU11c2lnMk5vbmNlcyhiaXRnb0tleSk7XG4gICAgICB3YXNtUHNidC5zaWduKDAsIHVzZXJLZXkpO1xuICAgICAgd2FzbVBzYnQuc2lnbigwLCBiaXRnb0tleSk7XG5cbiAgICAgIC8vIENvbnZlcnQgYmFjayB0byB1dHhvbGliIFBTQlQgZm9yIHZhbGlkYXRpb25cbiAgICAgIGNvbnN0IHNpZ25lZFBzYnQgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGcm9tQnVmZmVyKFxuICAgICAgICBCdWZmZXIuZnJvbSh3YXNtUHNidC5zZXJpYWxpemUoKSksXG4gICAgICAgIHV0eG9saWIubmV0d29ya3MuYml0Y29pblxuICAgICAgKTtcblxuICAgICAgLy8gVmFsaWRhdGlvbiBzaG91bGQgc3VjY2VlZCBiZWNhdXNlIHdhc20tdXR4byBub3cgY3JlYXRlcyBzaWduYXR1cmVzXG4gICAgICAvLyB3aXRoIHRoZSBjb3JyZWN0IHNpZ2hhc2ggdHlwZSAoU0lHSEFTSF9BTEwpIG1hdGNoaW5nIGlucHV0LnNpZ2hhc2hUeXBlXG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gdXR4b2xpYi5iaXRnby5nZXRTaWduYXR1cmVWYWxpZGF0aW9uQXJyYXlQc2J0KHNpZ25lZFBzYnQsIHV0eG9saWJSb290V2FsbGV0S2V5cyk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IGJvdGggdXNlciAoaW5kZXggMCkgYW5kIGJpdGdvIChpbmRleCAyKSBzaWduYXR1cmVzIGFyZSB2YWxpZFxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZhbGlkYXRpb25SZXN1bHQubGVuZ3RoLCAxKTtcbiAgICAgIGNvbnN0IFtpbnB1dEluZGV4LCBzaWdWYWxpZGF0aW9uXSA9IHZhbGlkYXRpb25SZXN1bHRbMF07XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaW5wdXRJbmRleCwgMCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2lnVmFsaWRhdGlvblswXSwgdHJ1ZSwgJ3VzZXIgc2lnbmF0dXJlIHNob3VsZCBiZSB2YWxpZCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNpZ1ZhbGlkYXRpb25bMV0sIGZhbHNlLCAnYmFja3VwIHNpZ25hdHVyZSBzaG91bGQgbm90IGJlIHByZXNlbnQnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaWdWYWxpZGF0aW9uWzJdLCB0cnVlLCAnYml0Z28gc2lnbmF0dXJlIHNob3VsZCBiZSB2YWxpZCcpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|