@bitgo/abstract-utxo 12.6.0 → 13.0.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/cjs/src/abstractUtxoCoin.d.ts +7 -2
- package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/cjs/src/abstractUtxoCoin.js +19 -34
- package/dist/cjs/src/address/fixedScript.d.ts +4 -4
- package/dist/cjs/src/address/fixedScript.d.ts.map +1 -1
- package/dist/cjs/src/address/fixedScript.js +4 -3
- package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
- package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
- package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.js +3 -4
- package/dist/cjs/src/impl/bch/bch.d.ts +15 -1
- package/dist/cjs/src/impl/bch/bch.d.ts.map +1 -1
- package/dist/cjs/src/impl/bch/bch.js +29 -5
- package/dist/cjs/src/impl/btc/index.d.ts +2 -0
- package/dist/cjs/src/impl/btc/index.d.ts.map +1 -1
- package/dist/cjs/src/impl/btc/index.js +3 -1
- package/dist/cjs/src/impl/btc/inscriptionBuilder.js +4 -4
- package/dist/cjs/src/impl/btc/tbtcstx.d.ts +10 -0
- package/dist/cjs/src/impl/btc/tbtcstx.d.ts.map +1 -0
- package/dist/cjs/src/impl/btc/tbtcstx.js +18 -0
- package/dist/cjs/src/impl/btc/tbtcstxprivate1.d.ts +9 -0
- package/dist/cjs/src/impl/btc/tbtcstxprivate1.d.ts.map +1 -0
- package/dist/cjs/src/impl/btc/tbtcstxprivate1.js +15 -0
- package/dist/cjs/src/impl/zec/address.d.ts +51 -0
- package/dist/cjs/src/impl/zec/address.d.ts.map +1 -1
- package/dist/cjs/src/impl/zec/address.js +103 -1
- package/dist/cjs/src/impl/zec/recipients.d.ts +4 -2
- package/dist/cjs/src/impl/zec/recipients.d.ts.map +1 -1
- package/dist/cjs/src/impl/zec/recipients.js +7 -3
- package/dist/cjs/src/impl/zec/types.d.ts +5 -2
- package/dist/cjs/src/impl/zec/types.d.ts.map +1 -1
- package/dist/cjs/src/impl/zec/types.js +1 -1
- package/dist/cjs/src/impl/zec/zec.d.ts +23 -2
- package/dist/cjs/src/impl/zec/zec.d.ts.map +1 -1
- package/dist/cjs/src/impl/zec/zec.js +61 -2
- package/dist/cjs/src/names.d.ts +5 -2
- package/dist/cjs/src/names.d.ts.map +1 -1
- package/dist/cjs/src/names.js +19 -1
- package/dist/cjs/src/recovery/backupKeyRecovery.d.ts +2 -2
- package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -1
- package/dist/cjs/src/recovery/backupKeyRecovery.js +5 -5
- package/dist/cjs/src/recovery/crossChainRecovery.d.ts.map +1 -1
- package/dist/cjs/src/recovery/crossChainRecovery.js +4 -4
- package/dist/cjs/src/transaction/decode.d.ts +2 -2
- package/dist/cjs/src/transaction/decode.d.ts.map +1 -1
- package/dist/cjs/src/transaction/decode.js +3 -2
- package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts +2 -2
- package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/explainPsbt.js +6 -5
- package/dist/cjs/src/transaction/descriptor/parse.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/parse.js +3 -4
- package/dist/cjs/src/transaction/descriptor/parseToAmountType.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/parseToAmountType.js +2 -3
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.js +2 -3
- package/dist/cjs/src/transaction/explainTransaction.d.ts +3 -2
- package/dist/cjs/src/transaction/explainTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/explainTransaction.js +3 -2
- package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts +2 -0
- package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.js +4 -1
- package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/parseTransaction.js +11 -5
- package/dist/cjs/src/transaction/fixedScript/replayProtection.d.ts +4 -4
- package/dist/cjs/src/transaction/fixedScript/replayProtection.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/replayProtection.js +1 -1
- package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +2 -2
- package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/signTransaction.js +1 -1
- package/dist/cjs/src/transaction/parseTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/parseTransaction.js +2 -3
- package/dist/cjs/src/transaction/recipient.d.ts +30 -4
- package/dist/cjs/src/transaction/recipient.d.ts.map +1 -1
- package/dist/cjs/src/transaction/recipient.js +48 -9
- package/dist/cjs/src/transaction/signTransaction.js +2 -2
- package/dist/cjs/src/transaction/verifyTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/verifyTransaction.js +2 -3
- package/dist/cjs/test/unit/bip322.js +14 -4
- package/dist/cjs/test/unit/customChangeWallet.js +3 -1
- package/dist/cjs/test/unit/descriptorAddress.d.ts.map +1 -1
- package/dist/cjs/test/unit/descriptorAddress.js +24 -4
- package/dist/cjs/test/unit/impl/bch/unit/bch.js +9 -1
- package/dist/cjs/test/unit/impl/zec/psbtDecode.d.ts +2 -0
- package/dist/cjs/test/unit/impl/zec/psbtDecode.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/zec/psbtDecode.js +69 -0
- package/dist/cjs/test/unit/impl/zec/shieldedPrebuildAndSign.d.ts +2 -0
- package/dist/cjs/test/unit/impl/zec/shieldedPrebuildAndSign.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/zec/shieldedPrebuildAndSign.js +329 -0
- package/dist/cjs/test/unit/impl/zec/unit/address.js +162 -1
- package/dist/cjs/test/unit/impl/zec/unit/resolvePsbtRecipients.js +7 -5
- package/dist/cjs/test/unit/recovery/backupKeyRecovery.js +2 -2
- package/dist/cjs/test/unit/recovery/crossChainRecovery.js +2 -2
- package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.js +2 -2
- package/dist/cjs/test/unit/recovery/mock.d.ts.map +1 -1
- package/dist/cjs/test/unit/recovery/mock.js +5 -3
- package/dist/cjs/test/unit/tbtcstx.d.ts +2 -0
- package/dist/cjs/test/unit/tbtcstx.d.ts.map +1 -0
- package/dist/cjs/test/unit/tbtcstx.js +60 -0
- package/dist/cjs/test/unit/tbtcstxprivate1.d.ts +2 -0
- package/dist/cjs/test/unit/tbtcstxprivate1.d.ts.map +1 -0
- package/dist/cjs/test/unit/tbtcstxprivate1.js +61 -0
- package/dist/cjs/test/unit/transaction/addressCodec.d.ts +2 -0
- package/dist/cjs/test/unit/transaction/addressCodec.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/addressCodec.js +30 -0
- package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.js +9 -1
- package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.js +2 -1
- package/dist/cjs/test/unit/transaction.js +2 -2
- package/dist/cjs/test/unit/util/address.d.ts +2 -1
- package/dist/cjs/test/unit/util/address.d.ts.map +1 -1
- package/dist/cjs/test/unit/util/address.js +3 -2
- package/dist/cjs/test/unit/util/nockIndexerAPI.d.ts.map +1 -1
- package/dist/cjs/test/unit/util/nockIndexerAPI.js +3 -4
- package/dist/cjs/test/unit/util/transaction.d.ts +1 -1
- package/dist/cjs/test/unit/util/transaction.d.ts.map +1 -1
- package/dist/cjs/test/unit/util/transaction.js +5 -4
- package/dist/cjs/test/unit/util/unspents.d.ts.map +1 -1
- package/dist/cjs/test/unit/util/unspents.js +3 -3
- package/dist/cjs/test/unit/util/utxoCoins.d.ts +2 -2
- package/dist/cjs/test/unit/util/utxoCoins.d.ts.map +1 -1
- package/dist/cjs/test/unit/util/utxoCoins.js +17 -33
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/abstractUtxoCoin.d.ts +7 -2
- package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/esm/abstractUtxoCoin.js +21 -36
- package/dist/esm/address/fixedScript.d.ts +4 -4
- package/dist/esm/address/fixedScript.d.ts.map +1 -1
- package/dist/esm/address/fixedScript.js +4 -3
- package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
- package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
- package/dist/esm/descriptor/assertDescriptorWalletAddress.js +3 -4
- package/dist/esm/impl/bch/bch.d.ts +15 -1
- package/dist/esm/impl/bch/bch.d.ts.map +1 -1
- package/dist/esm/impl/bch/bch.js +29 -5
- package/dist/esm/impl/btc/index.d.ts +2 -0
- package/dist/esm/impl/btc/index.d.ts.map +1 -1
- package/dist/esm/impl/btc/index.js +3 -1
- package/dist/esm/impl/btc/inscriptionBuilder.js +4 -4
- package/dist/esm/impl/btc/tbtcstx.d.ts +10 -0
- package/dist/esm/impl/btc/tbtcstx.d.ts.map +1 -0
- package/dist/esm/impl/btc/tbtcstx.js +14 -0
- package/dist/esm/impl/btc/tbtcstxprivate1.d.ts +9 -0
- package/dist/esm/impl/btc/tbtcstxprivate1.d.ts.map +1 -0
- package/dist/esm/impl/btc/tbtcstxprivate1.js +11 -0
- package/dist/esm/impl/zec/address.d.ts +51 -0
- package/dist/esm/impl/zec/address.d.ts.map +1 -1
- package/dist/esm/impl/zec/address.js +102 -2
- package/dist/esm/impl/zec/recipients.d.ts +4 -2
- package/dist/esm/impl/zec/recipients.d.ts.map +1 -1
- package/dist/esm/impl/zec/recipients.js +7 -3
- package/dist/esm/impl/zec/types.d.ts +5 -2
- package/dist/esm/impl/zec/types.d.ts.map +1 -1
- package/dist/esm/impl/zec/types.js +1 -1
- package/dist/esm/impl/zec/zec.d.ts +23 -2
- package/dist/esm/impl/zec/zec.d.ts.map +1 -1
- package/dist/esm/impl/zec/zec.js +62 -3
- package/dist/esm/names.d.ts +5 -2
- package/dist/esm/names.d.ts.map +1 -1
- package/dist/esm/names.js +18 -1
- package/dist/esm/recovery/backupKeyRecovery.d.ts +2 -2
- package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -1
- package/dist/esm/recovery/backupKeyRecovery.js +6 -6
- package/dist/esm/recovery/crossChainRecovery.d.ts.map +1 -1
- package/dist/esm/recovery/crossChainRecovery.js +4 -4
- package/dist/esm/transaction/decode.d.ts +2 -2
- package/dist/esm/transaction/decode.d.ts.map +1 -1
- package/dist/esm/transaction/decode.js +3 -2
- package/dist/esm/transaction/descriptor/explainPsbt.d.ts +2 -2
- package/dist/esm/transaction/descriptor/explainPsbt.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/explainPsbt.js +6 -5
- package/dist/esm/transaction/descriptor/parse.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/parse.js +3 -4
- package/dist/esm/transaction/descriptor/parseToAmountType.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/parseToAmountType.js +2 -3
- package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/verifyTransaction.js +2 -3
- package/dist/esm/transaction/explainTransaction.d.ts +3 -2
- package/dist/esm/transaction/explainTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/explainTransaction.js +3 -2
- package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts +2 -0
- package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/explainPsbtWasm.js +4 -1
- package/dist/esm/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/parseTransaction.js +11 -5
- package/dist/esm/transaction/fixedScript/replayProtection.d.ts +4 -4
- package/dist/esm/transaction/fixedScript/replayProtection.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/replayProtection.js +1 -1
- package/dist/esm/transaction/fixedScript/signTransaction.d.ts +2 -2
- package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/signTransaction.js +1 -1
- package/dist/esm/transaction/parseTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/parseTransaction.js +2 -3
- package/dist/esm/transaction/recipient.d.ts +30 -4
- package/dist/esm/transaction/recipient.d.ts.map +1 -1
- package/dist/esm/transaction/recipient.js +48 -9
- package/dist/esm/transaction/signTransaction.js +2 -2
- package/dist/esm/transaction/verifyTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/verifyTransaction.js +2 -3
- package/package.json +6 -5
|
@@ -36,10 +36,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.verifyTransaction = verifyTransaction;
|
|
37
37
|
const descriptor_1 = require("../descriptor");
|
|
38
38
|
const keychains_1 = require("../keychains");
|
|
39
|
-
const recipient_1 = require("./recipient");
|
|
40
39
|
const fixedScript = __importStar(require("./fixedScript"));
|
|
41
40
|
const descriptor = __importStar(require("./descriptor"));
|
|
42
|
-
async function verifyTransaction(coin, bitgo, params, addressCodec =
|
|
41
|
+
async function verifyTransaction(coin, bitgo, params, addressCodec = coin.addressCodec) {
|
|
43
42
|
if ((0, descriptor_1.isDescriptorWallet)(params.wallet)) {
|
|
44
43
|
const walletKeys = (0, keychains_1.toBip32Triple)(await (0, keychains_1.fetchKeychains)(coin, params.wallet));
|
|
45
44
|
return descriptor.verifyTransaction(coin, params, (0, descriptor_1.getDescriptorMapFromWallet)(params.wallet, walletKeys, (0, descriptor_1.getPolicyForEnv)(bitgo.env)), addressCodec);
|
|
@@ -48,4 +47,4 @@ async function verifyTransaction(coin, bitgo, params, addressCodec = new recipie
|
|
|
48
47
|
return fixedScript.verifyTransaction(coin, bitgo, params);
|
|
49
48
|
}
|
|
50
49
|
}
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5VHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vdmVyaWZ5VHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVQSw4Q0FpQkM7QUF4QkQsOENBQWdHO0FBQ2hHLDRDQUE2RDtBQUc3RCwyREFBNkM7QUFDN0MseURBQTJDO0FBRXBDLEtBQUssVUFBVSxpQkFBaUIsQ0FDckMsSUFBc0IsRUFDdEIsS0FBZ0IsRUFDaEIsTUFBeUMsRUFDekMsZUFBNkIsSUFBSSxDQUFDLFlBQVk7SUFFOUMsSUFBSSxJQUFBLCtCQUFrQixFQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sVUFBVSxHQUFHLElBQUEseUJBQWEsRUFBQyxNQUFNLElBQUEsMEJBQWMsRUFBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDNUUsT0FBTyxVQUFVLENBQUMsaUJBQWlCLENBQ2pDLElBQUksRUFDSixNQUFNLEVBQ04sSUFBQSx1Q0FBMEIsRUFBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFBLDRCQUFlLEVBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQ2pGLFlBQVksQ0FDYixDQUFDO0lBQ0osQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzVELENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgQWJzdHJhY3RVdHhvQ29pbiwgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zIH0gZnJvbSAnLi4vYWJzdHJhY3RVdHhvQ29pbic7XG5pbXBvcnQgeyBnZXREZXNjcmlwdG9yTWFwRnJvbVdhbGxldCwgaXNEZXNjcmlwdG9yV2FsbGV0LCBnZXRQb2xpY3lGb3JFbnYgfSBmcm9tICcuLi9kZXNjcmlwdG9yJztcbmltcG9ydCB7IGZldGNoS2V5Y2hhaW5zLCB0b0JpcDMyVHJpcGxlIH0gZnJvbSAnLi4va2V5Y2hhaW5zJztcblxuaW1wb3J0IHsgQWRkcmVzc0NvZGVjIH0gZnJvbSAnLi9yZWNpcGllbnQnO1xuaW1wb3J0ICogYXMgZml4ZWRTY3JpcHQgZnJvbSAnLi9maXhlZFNjcmlwdCc7XG5pbXBvcnQgKiBhcyBkZXNjcmlwdG9yIGZyb20gJy4vZGVzY3JpcHRvcic7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgYmlnaW50IHwgbnVtYmVyPihcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgYml0Z286IEJpdEdvQmFzZSxcbiAgcGFyYW1zOiBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj4sXG4gIGFkZHJlc3NDb2RlYzogQWRkcmVzc0NvZGVjID0gY29pbi5hZGRyZXNzQ29kZWNcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBpZiAoaXNEZXNjcmlwdG9yV2FsbGV0KHBhcmFtcy53YWxsZXQpKSB7XG4gICAgY29uc3Qgd2FsbGV0S2V5cyA9IHRvQmlwMzJUcmlwbGUoYXdhaXQgZmV0Y2hLZXljaGFpbnMoY29pbiwgcGFyYW1zLndhbGxldCkpO1xuICAgIHJldHVybiBkZXNjcmlwdG9yLnZlcmlmeVRyYW5zYWN0aW9uKFxuICAgICAgY29pbixcbiAgICAgIHBhcmFtcyxcbiAgICAgIGdldERlc2NyaXB0b3JNYXBGcm9tV2FsbGV0KHBhcmFtcy53YWxsZXQsIHdhbGxldEtleXMsIGdldFBvbGljeUZvckVudihiaXRnby5lbnYpKSxcbiAgICAgIGFkZHJlc3NDb2RlY1xuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZpeGVkU2NyaXB0LnZlcmlmeVRyYW5zYWN0aW9uKGNvaW4sIGJpdGdvLCBwYXJhbXMpO1xuICB9XG59XG4iXX0=
|
|
@@ -42,6 +42,7 @@ const utxo_core_1 = require("@bitgo/utxo-core");
|
|
|
42
42
|
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
43
43
|
const testutils_1 = require("@bitgo/wasm-utxo/testutils");
|
|
44
44
|
const fixedScript_1 = require("../../src/transaction/fixedScript");
|
|
45
|
+
const recipient_1 = require("../../src/transaction/recipient");
|
|
45
46
|
const bip322_1 = require("../../src/transaction/bip322");
|
|
46
47
|
function createTestWalletKeys(seed) {
|
|
47
48
|
const keys = (0, testutils_1.getKeyTriple)(seed);
|
|
@@ -389,18 +390,27 @@ describe('BIP322', function () {
|
|
|
389
390
|
}
|
|
390
391
|
it('should successfully run with a user nonce', function () {
|
|
391
392
|
const psbt = createUnsignedPsbt();
|
|
392
|
-
assertCommon((0, fixedScript_1.explainPsbtWasm)(psbt, walletKeys, {
|
|
393
|
+
assertCommon((0, fixedScript_1.explainPsbtWasm)(psbt, walletKeys, {
|
|
394
|
+
addressCodec: new recipient_1.AddressCodec('btc'),
|
|
395
|
+
replayProtection: { publicKeys: [] },
|
|
396
|
+
}), 0);
|
|
393
397
|
});
|
|
394
398
|
it('should successfully run with a user signature', function () {
|
|
395
399
|
const psbt = createUnsignedPsbt();
|
|
396
400
|
psbt.sign(wasm_utxo_1.BIP32.fromBase58(xprivs[0]));
|
|
397
|
-
assertCommon((0, fixedScript_1.explainPsbtWasm)(psbt, walletKeys, {
|
|
401
|
+
assertCommon((0, fixedScript_1.explainPsbtWasm)(psbt, walletKeys, {
|
|
402
|
+
addressCodec: new recipient_1.AddressCodec('btc'),
|
|
403
|
+
replayProtection: { publicKeys: [] },
|
|
404
|
+
}), 1);
|
|
398
405
|
});
|
|
399
406
|
it('should successfully run with a hsm signature', function () {
|
|
400
407
|
const psbt = createUnsignedPsbt();
|
|
401
408
|
psbt.sign(wasm_utxo_1.BIP32.fromBase58(xprivs[0]));
|
|
402
409
|
psbt.sign(wasm_utxo_1.BIP32.fromBase58(xprivs[2]));
|
|
403
|
-
assertCommon((0, fixedScript_1.explainPsbtWasm)(psbt, walletKeys, {
|
|
410
|
+
assertCommon((0, fixedScript_1.explainPsbtWasm)(psbt, walletKeys, {
|
|
411
|
+
addressCodec: new recipient_1.AddressCodec('btc'),
|
|
412
|
+
replayProtection: { publicKeys: [] },
|
|
413
|
+
}), 2);
|
|
404
414
|
});
|
|
405
415
|
});
|
|
406
416
|
describe('p2trMusig2 BIP322 signing', function () {
|
|
@@ -478,4 +488,4 @@ describe('BIP322', function () {
|
|
|
478
488
|
});
|
|
479
489
|
});
|
|
480
490
|
});
|
|
481
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlwMzIyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpcDMyMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUU1Qix5REFBMkM7QUFDM0MsZ0RBQXdEO0FBQ3hELGdEQUErRjtBQUMvRiwwREFBMEQ7QUFFMUQsbUVBQW9FO0FBQ3BFLHlEQU9zQztBQUV0QyxTQUFTLG9CQUFvQixDQUFDLElBQVk7SUFJeEMsTUFBTSxJQUFJLEdBQUcsSUFBQSx3QkFBWSxFQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLE9BQU87UUFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFtQjtRQUNqRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFtQjtLQUN4RCxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsSUFBWSxFQUFFLEtBQWEsRUFBRSxLQUFhO0lBQ25FLE1BQU0sSUFBSSxHQUFHLElBQUEsd0JBQVksRUFBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxLQUFLLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQzdELENBQUM7QUFDdEIsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLFVBQTRDLEVBQUUsS0FBYSxFQUFFLEtBQWE7SUFDNUYsT0FBTyw2QkFBaUIsQ0FB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LENBQUM7WUFDbEMsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO1lBQzdFLGdCQUFNLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsd0NBQXdDLENBQUMsQ0FBQztZQUN0RixnQkFBTSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLGlDQUFpQyxDQUFDLENBQUM7UUFDaEYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBiaXAzMjIgYXMgY29yZUJpcDMyMiB9IGZyb20gJ0BiaXRnby91dHhvLWNvcmUnO1xuaW1wb3J0IHsgYmlwMzIyIGFzIHdhc21CaXAzMjIsIGZpeGVkU2NyaXB0V2FsbGV0LCBCSVAzMiwgdHlwZSBUcmlwbGUgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcbmltcG9ydCB7IGdldEtleVRyaXBsZSB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8vdGVzdHV0aWxzJztcblxuaW1wb3J0IHsgZXhwbGFpblBzYnRXYXNtIH0gZnJvbSAnLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0JztcbmltcG9ydCB7XG4gIEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlLFxuICBCSVAzMjJNZXNzYWdlSW5mbyxcbiAgZGVzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZSxcbiAgZ2VuZXJhdGVCSVAzMjJNZXNzYWdlTGlzdEFuZFZlcmlmeUZyb21NZXNzYWdlQnJvYWRjYXN0YWJsZSxcbiAgc2VyaWFsaXplQklQMzIyQnJvYWRjYXN0YWJsZU1lc3NhZ2UsXG4gIHZlcmlmeVRyYW5zYWN0aW9uRnJvbUJyb2FkY2FzdGFibGVNZXNzYWdlLFxufSBmcm9tICcuLi8uLi9zcmMvdHJhbnNhY3Rpb24vYmlwMzIyJztcblxuZnVuY3Rpb24gY3JlYXRlVGVzdFdhbGxldEtleXMoc2VlZDogc3RyaW5nKToge1xuICB4cHViczogVHJpcGxlPHN0cmluZz47XG4gIHhwcml2czogVHJpcGxlPHN0cmluZz47XG59IHtcbiAgY29uc3Qga2V5cyA9IGdldEtleVRyaXBsZShzZWVkKTtcbiAgcmV0dXJuIHtcbiAgICB4cHViczoga2V5cy5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKSBhcyBUcmlwbGU8c3RyaW5nPixcbiAgICB4cHJpdnM6IGtleXMubWFwKChrKSA9PiBrLnRvQmFzZTU4KCkpIGFzIFRyaXBsZTxzdHJpbmc+LFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXREZXJpdmVkUHVia2V5cyhzZWVkOiBzdHJpbmcsIGNoYWluOiBudW1iZXIsIGluZGV4OiBudW1iZXIpOiBUcmlwbGU8c3RyaW5nPiB7XG4gIGNvbnN0IGtleXMgPSBnZXRLZXlUcmlwbGUoc2VlZCk7XG4gIHJldHVybiBrZXlzLm1hcCgoaykgPT5cbiAgICBCdWZmZXIuZnJvbShrLmRlcml2ZVBhdGgoYG0vMC8wLyR7Y2hhaW59LyR7aW5kZXh9YCkucHVibGljS2V5KS50b1N0cmluZygnaGV4JylcbiAgKSBhcyBUcmlwbGU8c3RyaW5nPjtcbn1cblxuZnVuY3Rpb24gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzOiBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cywgY2hhaW46IG51bWJlciwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBmaXhlZFNjcmlwdFdhbGxldC5hZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCwgJ2J0YycpO1xufVxuXG5kZXNjcmliZSgnQklQMzIyJywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgnQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGUnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBzZXJpYWxpemUgYW5kIGRlc2VyaWFsaXplIGNvcnJlY3RseScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2U6IEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlID0ge1xuICAgICAgICB0eEhleDogJzAxMDIwMycsXG4gICAgICAgIG1lc3NhZ2VJbmZvOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJ3NvbWVBZGRyZXNzJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdzb21lTWVzc2FnZScsXG4gICAgICAgICAgICBwdWJrZXlzOiBbJ3B1YmtleTEnLCAncHVia2V5MicsICdwdWJrZXkzJ10sXG4gICAgICAgICAgICBzY3JpcHRUeXBlOiAncDJzaCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgIGNvbnN0IGRlc2VyaWFsaXplZCA9IGRlc2VyaWFsaXplQklQMzIyQnJvYWRjYXN0YWJsZU1lc3NhZ2Uoc2VyaWFsaXplZCk7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGRlc2VyaWFsaXplZCwgbWVzc2FnZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgaWYgdGhlcmUgaXMgYW4gdW5zdXBwb3J0ZWQgc2NyaXB0IHR5cGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICB0eEhleDogJzAxMDIwMycsXG4gICAgICAgIG1lc3NhZ2VJbmZvOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJ3NvbWVBZGRyZXNzJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdzb21lTWVzc2FnZScsXG4gICAgICAgICAgICBwdWJrZXlzOiBbJ3B1YmtleTEnLCAncHVia2V5MicsICdwdWJrZXkzJ10sXG4gICAgICAgICAgICBzY3JpcHRUeXBlOiAndW5zdXBwb3J0ZWQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9IGFzIHVua25vd24gYXMgQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGU7XG5cbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4ge1xuICAgICAgICBkZXNlcmlhbGl6ZUJJUDMyMkJyb2FkY2FzdGFibGVNZXNzYWdlKHNlcmlhbGl6ZWQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd2ZXJpZnlUcmFuc2FjdGlvbkZyb21Ccm9hZGNhc3RhYmxlTWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzZWVkID0gJ2JpcDMyMl92ZXJpZnlfdGVzdCc7XG4gICAgY29uc3QgeyB4cHVicywgeHByaXZzIH0gPSBjcmVhdGVUZXN0V2FsbGV0S2V5cyhzZWVkKTtcbiAgICBjb25zdCB3YWxsZXRLZXlzID0gZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMuZnJvbSh4cHVicyk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBhIHZhbGlkIHAyc2hQMndzaCBQU0JUIHByb29mJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2hhaW4gPSAxMDtcbiAgICAgIGNvbnN0IGluZGV4ID0gMDtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gJ0hlbGxvLCBCaXRHbyEnO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTaWduIHdpdGggdXNlciBhbmQgYml0Z28ga2V5c1xuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgbWVzc2FnZUluZm86IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgICAgICBwdWJrZXlzLFxuICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh2ZXJpZnlUcmFuc2FjdGlvbkZyb21Ccm9hZGNhc3RhYmxlTWVzc2FnZShicm9hZGNhc3RhYmxlLCAnYnRjJyksIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYSB2YWxpZCBwMndzaCBQU0JUIHByb29mJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2hhaW4gPSAyMDtcbiAgICAgIGNvbnN0IGluZGV4ID0gNTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gJ1AyV1NIIHByb29mIHRlc3QnO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuXG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1syXSkpO1xuXG4gICAgICBjb25zdCBwdWJrZXlzID0gZ2V0RGVyaXZlZFB1YmtleXMoc2VlZCwgY2hhaW4sIGluZGV4KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBnZXRBZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCk7XG5cbiAgICAgIGNvbnN0IGJyb2FkY2FzdGFibGU6IEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlID0ge1xuICAgICAgICB0eEhleDogQnVmZmVyLmZyb20ocHNidC5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICBtZXNzYWdlSW5mbzogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlVGV4dCxcbiAgICAgICAgICAgIHB1YmtleXMsXG4gICAgICAgICAgICBzY3JpcHRUeXBlOiAncDJ3c2gnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodmVyaWZ5VHJhbnNhY3Rpb25Gcm9tQnJvYWRjYXN0YWJsZU1lc3NhZ2UoYnJvYWRjYXN0YWJsZSwgJ2J0YycpLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmVyaWZ5IG11bHRpcGxlIGlucHV0cyBpbiBhIHNpbmdsZSBQU0JUJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbWVzc2FnZXMgPSBbJ01lc3NhZ2UgMScsICdNZXNzYWdlIDInXTtcbiAgICAgIGNvbnN0IHNjcmlwdElkcyA9IFtcbiAgICAgICAgeyBjaGFpbjogMTAsIGluZGV4OiAwIH0sXG4gICAgICAgIHsgY2hhaW46IDIwLCBpbmRleDogMSB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHNjcmlwdFR5cGVzOiBCSVAzMjJNZXNzYWdlSW5mb1snc2NyaXB0VHlwZSddW10gPSBbJ3Ayc2hQMndzaCcsICdwMndzaCddO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7XG4gICAgICAgICAgbWVzc2FnZTogbWVzc2FnZXNbaV0sXG4gICAgICAgICAgc2NyaXB0SWQ6IHNjcmlwdElkc1tpXSxcbiAgICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNpZ24gYWxsIGlucHV0c1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXNzYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBwc2J0LnNpZ24oaSwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgICAgcHNidC5zaWduKGksIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lc3NhZ2VJbmZvOiBCSVAzMjJNZXNzYWdlSW5mb1tdID0gbWVzc2FnZXMubWFwKChtc2csIGkpID0+IHtcbiAgICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIHNjcmlwdElkc1tpXS5jaGFpbiwgc2NyaXB0SWRzW2ldLmluZGV4KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhZGRyZXNzOiBnZXRBZGRyZXNzKHdhbGxldEtleXMsIHNjcmlwdElkc1tpXS5jaGFpbiwgc2NyaXB0SWRzW2ldLmluZGV4KSxcbiAgICAgICAgICBtZXNzYWdlOiBtc2csXG4gICAgICAgICAgcHVia2V5cyxcbiAgICAgICAgICBzY3JpcHRUeXBlOiBzY3JpcHRUeXBlc1tpXSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgbWVzc2FnZUluZm8sXG4gICAgICB9O1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodmVyaWZ5VHJhbnNhY3Rpb25Gcm9tQnJvYWRjYXN0YWJsZU1lc3NhZ2UoYnJvYWRjYXN0YWJsZSwgJ2J0YycpLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciB3cm9uZyBtZXNzYWdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2hhaW4gPSAxMDtcbiAgICAgIGNvbnN0IGluZGV4ID0gMDtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gJ09yaWdpbmFsIG1lc3NhZ2UnO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuXG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1syXSkpO1xuXG4gICAgICBjb25zdCBwdWJrZXlzID0gZ2V0RGVyaXZlZFB1YmtleXMoc2VlZCwgY2hhaW4sIGluZGV4KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBnZXRBZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCk7XG5cbiAgICAgIGNvbnN0IGJyb2FkY2FzdGFibGU6IEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlID0ge1xuICAgICAgICB0eEhleDogQnVmZmVyLmZyb20ocHNidC5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICBtZXNzYWdlSW5mbzogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICBtZXNzYWdlOiAnRGlmZmVyZW50IG1lc3NhZ2UnLCAvLyBXcm9uZyBtZXNzYWdlXG4gICAgICAgICAgICBwdWJrZXlzLFxuICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh2ZXJpZnlUcmFuc2FjdGlvbkZyb21Ccm9hZGNhc3RhYmxlTWVzc2FnZShicm9hZGNhc3RhYmxlLCAnYnRjJyksIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZm9yIHVuc3VwcG9ydGVkIGNvaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6ICcwMCcsXG4gICAgICAgIG1lc3NhZ2VJbmZvOiBbXSxcbiAgICAgIH07XG5cbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHZlcmlmeVRyYW5zYWN0aW9uRnJvbUJyb2FkY2FzdGFibGVNZXNzYWdlKGJyb2FkY2FzdGFibGUsICdsdGMnKSxcbiAgICAgICAgL09ubHkgdGJ0YzQgb3IgYnRjIGNvaW5OYW1lcyBhcmUgc3VwcG9ydGVkL1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dlbmVyYXRlQklQMzIyTWVzc2FnZUxpc3RBbmRWZXJpZnlGcm9tTWVzc2FnZUJyb2FkY2FzdGFibGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2VlZCA9ICdiaXAzMjJfZ2VuZXJhdGVfdGVzdCc7XG4gICAgY29uc3QgeyB4cHVicywgeHByaXZzIH0gPSBjcmVhdGVUZXN0V2FsbGV0S2V5cyhzZWVkKTtcbiAgICBjb25zdCB3YWxsZXRLZXlzID0gZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMuZnJvbSh4cHVicyk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIG1lc3NhZ2UgbGlzdCBmcm9tIHZhbGlkIHByb29mcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdQcm9vZiBtZXNzYWdlJztcblxuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcblxuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlczogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGVbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0LnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgbWVzc2FnZUluZm86IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgICAgICAgIHB1YmtleXMsXG4gICAgICAgICAgICAgIHNjcmlwdFR5cGU6ICdwMnNoUDJ3c2gnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gZ2VuZXJhdGVCSVAzMjJNZXNzYWdlTGlzdEFuZFZlcmlmeUZyb21NZXNzYWdlQnJvYWRjYXN0YWJsZShicm9hZGNhc3RhYmxlcywgJ2J0YycpO1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0Lmxlbmd0aCwgMSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0WzBdLmFkZHJlc3MsIGFkZHJlc3MpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdFswXS5tZXNzYWdlLCBtZXNzYWdlVGV4dCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlZHVwbGljYXRlIGFkZHJlc3NlcyB3aXRoIHNhbWUgbWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdTYW1lIG1lc3NhZ2UnO1xuXG4gICAgICAvLyBDcmVhdGUgdHdvIHNlcGFyYXRlIFBTQlRzIGZvciB0aGUgc2FtZSBhZGRyZXNzL21lc3NhZ2VcbiAgICAgIGNvbnN0IHBzYnQxID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQxLCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcbiAgICAgIHBzYnQxLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQxLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHNidDIgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuY3JlYXRlRW1wdHkoJ2J0YycsIHdhbGxldEtleXMsIHsgdmVyc2lvbjogMCB9KTtcbiAgICAgIHdhc21CaXAzMjIuYWRkQmlwMzIySW5wdXQocHNidDIsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuICAgICAgcHNidDIuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSkpO1xuICAgICAgcHNidDIuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1syXSkpO1xuXG4gICAgICBjb25zdCBwdWJrZXlzID0gZ2V0RGVyaXZlZFB1YmtleXMoc2VlZCwgY2hhaW4sIGluZGV4KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBnZXRBZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCk7XG5cbiAgICAgIGNvbnN0IGJyb2FkY2FzdGFibGVzOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZVtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQxLnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgbWVzc2FnZUluZm86IFt7IGFkZHJlc3MsIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LCBwdWJrZXlzLCBzY3JpcHRUeXBlOiAncDJzaFAyd3NoJyB9XSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0Mi5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIG1lc3NhZ2VJbmZvOiBbeyBhZGRyZXNzLCBtZXNzYWdlOiBtZXNzYWdlVGV4dCwgcHVia2V5cywgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcgfV0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBnZW5lcmF0ZUJJUDMyMk1lc3NhZ2VMaXN0QW5kVmVyaWZ5RnJvbU1lc3NhZ2VCcm9hZGNhc3RhYmxlKGJyb2FkY2FzdGFibGVzLCAnYnRjJyk7XG5cbiAgICAgIC8vIFNob3VsZCBkZWR1cGxpY2F0ZSB0byBhIHNpbmdsZSBlbnRyeVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdFswXS5hZGRyZXNzLCBhZGRyZXNzKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHRbMF0ubWVzc2FnZSwgbWVzc2FnZVRleHQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBmb3IgZHVwbGljYXRlIGFkZHJlc3Mgd2l0aCBkaWZmZXJlbnQgbWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG5cbiAgICAgIGNvbnN0IHBzYnQxID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQxLCB7XG4gICAgICAgIG1lc3NhZ2U6ICdNZXNzYWdlIDEnLFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcbiAgICAgIHBzYnQxLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQxLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHNidDIgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuY3JlYXRlRW1wdHkoJ2J0YycsIHdhbGxldEtleXMsIHsgdmVyc2lvbjogMCB9KTtcbiAgICAgIHdhc21CaXAzMjIuYWRkQmlwMzIySW5wdXQocHNidDIsIHtcbiAgICAgICAgbWVzc2FnZTogJ01lc3NhZ2UgMicsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuICAgICAgcHNidDIuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSkpO1xuICAgICAgcHNidDIuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1syXSkpO1xuXG4gICAgICBjb25zdCBwdWJrZXlzID0gZ2V0RGVyaXZlZFB1YmtleXMoc2VlZCwgY2hhaW4sIGluZGV4KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBnZXRBZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCk7XG5cbiAgICAgIGNvbnN0IGJyb2FkY2FzdGFibGVzOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZVtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQxLnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgbWVzc2FnZUluZm86IFt7IGFkZHJlc3MsIG1lc3NhZ2U6ICdNZXNzYWdlIDEnLCBwdWJrZXlzLCBzY3JpcHRUeXBlOiAncDJzaFAyd3NoJyB9XSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0Mi5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIG1lc3NhZ2VJbmZvOiBbeyBhZGRyZXNzLCBtZXNzYWdlOiAnTWVzc2FnZSAyJywgcHVia2V5cywgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcgfV0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBnZW5lcmF0ZUJJUDMyMk1lc3NhZ2VMaXN0QW5kVmVyaWZ5RnJvbU1lc3NhZ2VCcm9hZGNhc3RhYmxlKGJyb2FkY2FzdGFibGVzLCAnYnRjJyksXG4gICAgICAgIC9EdXBsaWNhdGUgYWRkcmVzcy4qaGFzIGRpZmZlcmVudCBtZXNzYWdlcy9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciBpbnZhbGlkIHByb29mJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2hhaW4gPSAxMDtcbiAgICAgIGNvbnN0IGluZGV4ID0gMDtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gJ1ZhbGlkIG1lc3NhZ2UnO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuICAgICAgcHNidC5zaWduKEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0LnNpZ24oQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlczogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGVbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0LnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgbWVzc2FnZUluZm86IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ1dyb25nIG1lc3NhZ2UnLCAvLyBEb2Vzbid0IG1hdGNoIHdoYXQgd2FzIHNpZ25lZFxuICAgICAgICAgICAgICBwdWJrZXlzLFxuICAgICAgICAgICAgICBzY3JpcHRUeXBlOiAncDJzaFAyd3NoJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IGdlbmVyYXRlQklQMzIyTWVzc2FnZUxpc3RBbmRWZXJpZnlGcm9tTWVzc2FnZUJyb2FkY2FzdGFibGUoYnJvYWRjYXN0YWJsZXMsICdidGMnKSxcbiAgICAgICAgL2RpZCBub3QgaGF2ZSBhIHN1Y2Nlc3NmdWwgdmFsaWRhdGlvbi9cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdCSVAzMjIgUHJvb2YnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9ICdJIGNhbiBiZWxpZXZlIGl0IGlzIG5vdCBidXR0ZXInO1xuICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgY29uc3QgaW5kZXggPSAwO1xuICAgIGNvbnN0IHsgeHB1YnMsIHhwcml2cyB9ID0gY3JlYXRlVGVzdFdhbGxldEtleXMoJ2JpcDMyMi1wcm9vZicpO1xuICAgIGNvbnN0IHdhbGxldEtleXMgPSBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cy5mcm9tKHhwdWJzKTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVuc2lnbmVkUHNidCgpOiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQge1xuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7IG1lc3NhZ2UsIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LCByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyB9KTtcbiAgICAgIHJldHVybiBwc2J0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFzc2VydENvbW1vbihyZXN1bHQ6IFJldHVyblR5cGU8dHlwZW9mIGV4cGxhaW5Qc2J0V2FzbT4sIGV4cGVjdGVkU2lnbmVyQ291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5vdXRwdXRBbW91bnQsICcwJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LmNoYW5nZUFtb3VudCwgJzAnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQub3V0cHV0cy5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5vdXRwdXRzWzBdLmFkZHJlc3MsICdzY3JpcHRQdWJLZXk6NmEnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZmVlLCAnMCcpO1xuICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiByZXN1bHQuaW5wdXRzKSB7XG4gICAgICAgIGNvbnN0IHNpZ25lckNvdW50ID0gT2JqZWN0LnZhbHVlcyhpbnB1dC5zaWduZWRCeSkuZmlsdGVyKEJvb2xlYW4pLmxlbmd0aDtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNpZ25lckNvdW50LCBleHBlY3RlZFNpZ25lckNvdW50KTtcbiAgICAgIH1cbiAgICAgIGFzc2VydC5vayhyZXN1bHQubWVzc2FnZXMpO1xuICAgICAgZm9yIChjb25zdCBvYmogb2YgcmVzdWx0Lm1lc3NhZ2VzID8/IFtdKSB7XG4gICAgICAgIGFzc2VydC5vayhvYmouYWRkcmVzcyk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChvYmoubWVzc2FnZSwgbWVzc2FnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgcnVuIHdpdGggYSB1c2VyIG5vbmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcHNidCA9IGNyZWF0ZVVuc2lnbmVkUHNidCgpO1xuICAgICAgYXNzZXJ0Q29tbW9uKGV4cGxhaW5Qc2J0V2FzbShwc2J0LCB3YWxsZXRLZXlzLCB7IHJlcGxheVByb3RlY3Rpb246IHsgcHVibGljS2V5czogW10gfSB9KSwgMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2Nlc3NmdWxseSBydW4gd2l0aCBhIHVzZXIgc2lnbmF0dXJlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcHNidCA9IGNyZWF0ZVVuc2lnbmVkUHNidCgpO1xuICAgICAgcHNidC5zaWduKEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBhc3NlcnRDb21tb24oZXhwbGFpblBzYnRXYXNtKHBzYnQsIHdhbGxldEtleXMsIHsgcmVwbGF5UHJvdGVjdGlvbjogeyBwdWJsaWNLZXlzOiBbXSB9IH0pLCAxKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2Vzc2Z1bGx5IHJ1biB3aXRoIGEgaHNtIHNpZ25hdHVyZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBzYnQgPSBjcmVhdGVVbnNpZ25lZFBzYnQoKTtcbiAgICAgIHBzYnQuc2lnbihCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSkpO1xuICAgICAgcHNidC5zaWduKEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKSk7XG4gICAgICBhc3NlcnRDb21tb24oZXhwbGFpblBzYnRXYXNtKHBzYnQsIHdhbGxldEtleXMsIHsgcmVwbGF5UHJvdGVjdGlvbjogeyBwdWJsaWNLZXlzOiBbXSB9IH0pLCAyKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3AydHJNdXNpZzIgQklQMzIyIHNpZ25pbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBwcm9kdWNlIHZlcmlmaWFibGUgbXVzaWcyIHNpZ25hdHVyZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZWVkID0gJ3AydHJNdXNpZzJfc2lnaGFzaF90ZXN0JztcbiAgICAgIGNvbnN0IHsgeHB1YnMsIHhwcml2cyB9ID0gY3JlYXRlVGVzdFdhbGxldEtleXMoc2VlZCk7XG4gICAgICBjb25zdCB3YWxsZXRLZXlzID0gZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMuZnJvbSh4cHVicyk7XG5cbiAgICAgIGNvbnN0IGNoYWluID0gNDA7IC8vIHAydHJNdXNpZzIgZXh0ZXJuYWxcbiAgICAgIGNvbnN0IGluZGV4ID0gMDtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gJ0JJUDMyMiBzaWdoYXNoIHRlc3QnO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgICAgc2lnblBhdGg6IHsgc2lnbmVyOiAndXNlcicsIGNvc2lnbmVyOiAnYml0Z28nIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdXNlcktleSA9IEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKTtcbiAgICAgIGNvbnN0IGJpdGdvS2V5ID0gQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pO1xuICAgICAgcHNidC5nZW5lcmF0ZU11c2lnMk5vbmNlcyh1c2VyS2V5KTtcbiAgICAgIHBzYnQuZ2VuZXJhdGVNdXNpZzJOb25jZXMoYml0Z29LZXkpO1xuICAgICAgcHNidC5zaWduKHVzZXJLZXkpO1xuICAgICAgcHNidC5zaWduKGJpdGdvS2V5KTtcblxuICAgICAgY29uc3Qgc2lnbmVycyA9IHdhc21CaXAzMjIudmVyaWZ5QmlwMzIyUHNidElucHV0KHBzYnQsIDAsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0Lm9rKHNpZ25lcnMuaW5jbHVkZXMoJ3VzZXInKSk7XG4gICAgICBhc3NlcnQub2soc2lnbmVycy5pbmNsdWRlcygnYml0Z28nKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd1dHhvbGliIGludGVyb3BlcmFiaWxpdHkgLSB3YXNtLXV0eG8gY2FuIHZlcmlmeSB1dHhvbGliLWdlbmVyYXRlZCBCSVAzMjIgcHJvb2ZzJywgZnVuY3Rpb24gKCkge1xuICAgIC8vIFRoaXMgdGVzdCB2ZXJpZmllcyBjcm9zcy1saWJyYXJ5IGNvbXBhdGliaWxpdHk6XG4gICAgLy8gMS4gdXR4by1jb3JlICh1dHhvbGliKSBjcmVhdGVzIGEgQklQMzIyIFBTQlRcbiAgICAvLyAyLiB3YXNtLXV0eG8gc2lnbnMgaXQgd2l0aCBtdXNpZzJcbiAgICAvLyAzLiB1dHhvLWNvcmUgdmFsaWRhdGVzIHRoZSB3YXNtLXV0eG8gc2lnbmF0dXJlc1xuICAgIC8vXG4gICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2FzbS11dHhvIGFuZCB1dHhvbGliIGdlbmVyYXRlIGNvbXBhdGlibGUgQklQMzIyIHByb29mcy5cblxuICAgIGl0KCdzaG91bGQgc2lnbiB1dHhvbGliLWNyZWF0ZWQgQklQMzIyIFBTQlQgYW5kIHZhbGlkYXRlIHdpdGggdXR4b2xpYicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNlZWQgPSAncDJ0ck11c2lnMl91dHhvbGliX2NvbXBhdF90ZXN0JztcbiAgICAgIGNvbnN0IHsgeHByaXZzIH0gPSBjcmVhdGVUZXN0V2FsbGV0S2V5cyhzZWVkKTtcblxuICAgICAgLy8gQ3JlYXRlIHV0eG9saWIgUm9vdFdhbGxldEtleXMgZm9yIHV0eG8tY29yZSBQU0JUIGNvbnN0cnVjdGlvblxuICAgICAgY29uc3QgdXR4b2xpYlJvb3RXYWxsZXRLZXlzID0gbmV3IHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXModXR4b2xpYi50ZXN0dXRpbC5nZXRLZXlUcmlwbGUoc2VlZCkpO1xuXG4gICAgICAvLyBwMnRyTXVzaWcyIGV4dGVybmFsIGNoYWluIGNvZGVcbiAgICAgIGNvbnN0IGNoYWluID0gdXR4b2xpYi5iaXRnby5nZXRFeHRlcm5hbENoYWluQ29kZSgncDJ0ck11c2lnMicpO1xuICAgICAgY29uc3QgaW5kZXggPSAwO1xuICAgICAgY29uc3QgbWVzc2FnZVRleHQgPSAnQklQMzIyIHV0eG9saWIgaW50ZXJvcCB0ZXN0JztcblxuICAgICAgLy8gQ3JlYXRlIEJJUDMyMiBQU0JUIHVzaW5nIHV0eG8tY29yZVxuICAgICAgY29uc3QgcHNidCA9IGNvcmVCaXAzMjIuY3JlYXRlQmFzZVRvU2lnblBzYnQodXR4b2xpYlJvb3RXYWxsZXRLZXlzLCB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4pO1xuICAgICAgY29yZUJpcDMyMi5hZGRCaXAzMjJJbnB1dFdpdGhDaGFpbkFuZEluZGV4KHBzYnQsIG1lc3NhZ2VUZXh0LCB1dHhvbGliUm9vdFdhbGxldEtleXMsIHtcbiAgICAgICAgY2hhaW4sXG4gICAgICAgIGluZGV4LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIENvbnZlcnQgdG8gd2FzbS11dHhvIFBTQlQgZm9yIHNpZ25pbmdcbiAgICAgIGNvbnN0IHdhc21Qc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmZyb21CeXRlcyhwc2J0LnRvQnVmZmVyKCksICdidGMnKTtcblxuICAgICAgLy8gR2VuZXJhdGUgbXVzaWcyIG5vbmNlcyBhbmQgc2lnbiB3aXRoIHdhc20tdXR4b1xuICAgICAgY29uc3QgdXNlcktleSA9IEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKTtcbiAgICAgIGNvbnN0IGJpdGdvS2V5ID0gQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pO1xuXG4gICAgICB3YXNtUHNidC5nZW5lcmF0ZU11c2lnMk5vbmNlcyh1c2VyS2V5KTtcbiAgICAgIHdhc21Qc2J0LmdlbmVyYXRlTXVzaWcyTm9uY2VzKGJpdGdvS2V5KTtcbiAgICAgIHdhc21Qc2J0LnNpZ24odXNlcktleSk7XG4gICAgICB3YXNtUHNidC5zaWduKGJpdGdvS2V5KTtcblxuICAgICAgLy8gQ29udmVydCBiYWNrIHRvIHV0eG9saWIgUFNCVCBmb3IgdmFsaWRhdGlvblxuICAgICAgY29uc3Qgc2lnbmVkUHNidCA9IHV0eG9saWIuYml0Z28uY3JlYXRlUHNidEZyb21CdWZmZXIoXG4gICAgICAgIEJ1ZmZlci5mcm9tKHdhc21Qc2J0LnNlcmlhbGl6ZSgpKSxcbiAgICAgICAgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luXG4gICAgICApO1xuXG4gICAgICAvLyBWYWxpZGF0aW9uIHNob3VsZCBzdWNjZWVkIC0gd2FzbS11dHhvIHNpZ25hdHVyZXMgYXJlIGNvbXBhdGlibGUgd2l0aCB1dHhvbGliXG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gdXR4b2xpYi5iaXRnby5nZXRTaWduYXR1cmVWYWxpZGF0aW9uQXJyYXlQc2J0KHNpZ25lZFBzYnQsIHV0eG9saWJSb290V2FsbGV0S2V5cyk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IGJvdGggdXNlciAoaW5kZXggMCkgYW5kIGJpdGdvIChpbmRleCAyKSBzaWduYXR1cmVzIGFyZSB2YWxpZFxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZhbGlkYXRpb25SZXN1bHQubGVuZ3RoLCAxKTtcbiAgICAgIGNvbnN0IFtpbnB1dEluZGV4LCBzaWdWYWxpZGF0aW9uXSA9IHZhbGlkYXRpb25SZXN1bHRbMF07XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaW5wdXRJbmRleCwgMCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2lnVmFsaWRhdGlvblswXSwgdHJ1ZSwgJ3VzZXIgc2lnbmF0dXJlIHNob3VsZCBiZSB2YWxpZCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNpZ1ZhbGlkYXRpb25bMV0sIGZhbHNlLCAnYmFja3VwIHNpZ25hdHVyZSBzaG91bGQgbm90IGJlIHByZXNlbnQnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaWdWYWxpZGF0aW9uWzJdLCB0cnVlLCAnYml0Z28gc2lnbmF0dXJlIHNob3VsZCBiZSB2YWxpZCcpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
491
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlwMzIyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpcDMyMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUU1Qix5REFBMkM7QUFDM0MsZ0RBQXdEO0FBQ3hELGdEQUErRjtBQUMvRiwwREFBMEQ7QUFFMUQsbUVBQW9FO0FBQ3BFLCtEQUErRDtBQUMvRCx5REFPc0M7QUFFdEMsU0FBUyxvQkFBb0IsQ0FBQyxJQUFZO0lBSXhDLE1BQU0sSUFBSSxHQUFHLElBQUEsd0JBQVksRUFBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxPQUFPO1FBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBbUI7UUFDakUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBbUI7S0FDeEQsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLElBQVksRUFBRSxLQUFhLEVBQUUsS0FBYTtJQUNuRSxNQUFNLElBQUksR0FBRyxJQUFBLHdCQUFZLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDcEIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsS0FBSyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUM3RCxDQUFDO0FBQ3RCLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxVQUE0QyxFQUFFLEtBQWEsRUFBRSxLQUFhO0lBQzVGLE9B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QWdCLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEQsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLGdCQUFNLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQztZQUM3RSxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLHdDQUF3QyxDQUFDLENBQUM7WUFDdEYsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxpQ0FBaUMsQ0FBQyxDQUFDO1FBQ2hGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgYmlwMzIyIGFzIGNvcmVCaXAzMjIgfSBmcm9tICdAYml0Z28vdXR4by1jb3JlJztcbmltcG9ydCB7IGJpcDMyMiBhcyB3YXNtQmlwMzIyLCBmaXhlZFNjcmlwdFdhbGxldCwgQklQMzIsIHR5cGUgVHJpcGxlIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgeyBnZXRLZXlUcmlwbGUgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvL3Rlc3R1dGlscyc7XG5cbmltcG9ydCB7IGV4cGxhaW5Qc2J0V2FzbSB9IGZyb20gJy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdCc7XG5pbXBvcnQgeyBBZGRyZXNzQ29kZWMgfSBmcm9tICcuLi8uLi9zcmMvdHJhbnNhY3Rpb24vcmVjaXBpZW50JztcbmltcG9ydCB7XG4gIEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlLFxuICBCSVAzMjJNZXNzYWdlSW5mbyxcbiAgZGVzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZSxcbiAgZ2VuZXJhdGVCSVAzMjJNZXNzYWdlTGlzdEFuZFZlcmlmeUZyb21NZXNzYWdlQnJvYWRjYXN0YWJsZSxcbiAgc2VyaWFsaXplQklQMzIyQnJvYWRjYXN0YWJsZU1lc3NhZ2UsXG4gIHZlcmlmeVRyYW5zYWN0aW9uRnJvbUJyb2FkY2FzdGFibGVNZXNzYWdlLFxufSBmcm9tICcuLi8uLi9zcmMvdHJhbnNhY3Rpb24vYmlwMzIyJztcblxuZnVuY3Rpb24gY3JlYXRlVGVzdFdhbGxldEtleXMoc2VlZDogc3RyaW5nKToge1xuICB4cHViczogVHJpcGxlPHN0cmluZz47XG4gIHhwcml2czogVHJpcGxlPHN0cmluZz47XG59IHtcbiAgY29uc3Qga2V5cyA9IGdldEtleVRyaXBsZShzZWVkKTtcbiAgcmV0dXJuIHtcbiAgICB4cHViczoga2V5cy5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKSBhcyBUcmlwbGU8c3RyaW5nPixcbiAgICB4cHJpdnM6IGtleXMubWFwKChrKSA9PiBrLnRvQmFzZTU4KCkpIGFzIFRyaXBsZTxzdHJpbmc+LFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXREZXJpdmVkUHVia2V5cyhzZWVkOiBzdHJpbmcsIGNoYWluOiBudW1iZXIsIGluZGV4OiBudW1iZXIpOiBUcmlwbGU8c3RyaW5nPiB7XG4gIGNvbnN0IGtleXMgPSBnZXRLZXlUcmlwbGUoc2VlZCk7XG4gIHJldHVybiBrZXlzLm1hcCgoaykgPT5cbiAgICBCdWZmZXIuZnJvbShrLmRlcml2ZVBhdGgoYG0vMC8wLyR7Y2hhaW59LyR7aW5kZXh9YCkucHVibGljS2V5KS50b1N0cmluZygnaGV4JylcbiAgKSBhcyBUcmlwbGU8c3RyaW5nPjtcbn1cblxuZnVuY3Rpb24gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzOiBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cywgY2hhaW46IG51bWJlciwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBmaXhlZFNjcmlwdFdhbGxldC5hZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCwgJ2J0YycpO1xufVxuXG5kZXNjcmliZSgnQklQMzIyJywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgnQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGUnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBzZXJpYWxpemUgYW5kIGRlc2VyaWFsaXplIGNvcnJlY3RseScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2U6IEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlID0ge1xuICAgICAgICB0eEhleDogJzAxMDIwMycsXG4gICAgICAgIG1lc3NhZ2VJbmZvOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJ3NvbWVBZGRyZXNzJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdzb21lTWVzc2FnZScsXG4gICAgICAgICAgICBwdWJrZXlzOiBbJ3B1YmtleTEnLCAncHVia2V5MicsICdwdWJrZXkzJ10sXG4gICAgICAgICAgICBzY3JpcHRUeXBlOiAncDJzaCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgIGNvbnN0IGRlc2VyaWFsaXplZCA9IGRlc2VyaWFsaXplQklQMzIyQnJvYWRjYXN0YWJsZU1lc3NhZ2Uoc2VyaWFsaXplZCk7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGRlc2VyaWFsaXplZCwgbWVzc2FnZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgaWYgdGhlcmUgaXMgYW4gdW5zdXBwb3J0ZWQgc2NyaXB0IHR5cGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICB0eEhleDogJzAxMDIwMycsXG4gICAgICAgIG1lc3NhZ2VJbmZvOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJ3NvbWVBZGRyZXNzJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdzb21lTWVzc2FnZScsXG4gICAgICAgICAgICBwdWJrZXlzOiBbJ3B1YmtleTEnLCAncHVia2V5MicsICdwdWJrZXkzJ10sXG4gICAgICAgICAgICBzY3JpcHRUeXBlOiAndW5zdXBwb3J0ZWQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9IGFzIHVua25vd24gYXMgQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGU7XG5cbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4ge1xuICAgICAgICBkZXNlcmlhbGl6ZUJJUDMyMkJyb2FkY2FzdGFibGVNZXNzYWdlKHNlcmlhbGl6ZWQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd2ZXJpZnlUcmFuc2FjdGlvbkZyb21Ccm9hZGNhc3RhYmxlTWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzZWVkID0gJ2JpcDMyMl92ZXJpZnlfdGVzdCc7XG4gICAgY29uc3QgeyB4cHVicywgeHByaXZzIH0gPSBjcmVhdGVUZXN0V2FsbGV0S2V5cyhzZWVkKTtcbiAgICBjb25zdCB3YWxsZXRLZXlzID0gZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMuZnJvbSh4cHVicyk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBhIHZhbGlkIHAyc2hQMndzaCBQU0JUIHByb29mJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2hhaW4gPSAxMDtcbiAgICAgIGNvbnN0IGluZGV4ID0gMDtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gJ0hlbGxvLCBCaXRHbyEnO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTaWduIHdpdGggdXNlciBhbmQgYml0Z28ga2V5c1xuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgbWVzc2FnZUluZm86IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgICAgICBwdWJrZXlzLFxuICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh2ZXJpZnlUcmFuc2FjdGlvbkZyb21Ccm9hZGNhc3RhYmxlTWVzc2FnZShicm9hZGNhc3RhYmxlLCAnYnRjJyksIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYSB2YWxpZCBwMndzaCBQU0JUIHByb29mJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2hhaW4gPSAyMDtcbiAgICAgIGNvbnN0IGluZGV4ID0gNTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gJ1AyV1NIIHByb29mIHRlc3QnO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuXG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1syXSkpO1xuXG4gICAgICBjb25zdCBwdWJrZXlzID0gZ2V0RGVyaXZlZFB1YmtleXMoc2VlZCwgY2hhaW4sIGluZGV4KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBnZXRBZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCk7XG5cbiAgICAgIGNvbnN0IGJyb2FkY2FzdGFibGU6IEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlID0ge1xuICAgICAgICB0eEhleDogQnVmZmVyLmZyb20ocHNidC5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICBtZXNzYWdlSW5mbzogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlVGV4dCxcbiAgICAgICAgICAgIHB1YmtleXMsXG4gICAgICAgICAgICBzY3JpcHRUeXBlOiAncDJ3c2gnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodmVyaWZ5VHJhbnNhY3Rpb25Gcm9tQnJvYWRjYXN0YWJsZU1lc3NhZ2UoYnJvYWRjYXN0YWJsZSwgJ2J0YycpLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmVyaWZ5IG11bHRpcGxlIGlucHV0cyBpbiBhIHNpbmdsZSBQU0JUJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbWVzc2FnZXMgPSBbJ01lc3NhZ2UgMScsICdNZXNzYWdlIDInXTtcbiAgICAgIGNvbnN0IHNjcmlwdElkcyA9IFtcbiAgICAgICAgeyBjaGFpbjogMTAsIGluZGV4OiAwIH0sXG4gICAgICAgIHsgY2hhaW46IDIwLCBpbmRleDogMSB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHNjcmlwdFR5cGVzOiBCSVAzMjJNZXNzYWdlSW5mb1snc2NyaXB0VHlwZSddW10gPSBbJ3Ayc2hQMndzaCcsICdwMndzaCddO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7XG4gICAgICAgICAgbWVzc2FnZTogbWVzc2FnZXNbaV0sXG4gICAgICAgICAgc2NyaXB0SWQ6IHNjcmlwdElkc1tpXSxcbiAgICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNpZ24gYWxsIGlucHV0c1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXNzYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBwc2J0LnNpZ24oaSwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgICAgcHNidC5zaWduKGksIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lc3NhZ2VJbmZvOiBCSVAzMjJNZXNzYWdlSW5mb1tdID0gbWVzc2FnZXMubWFwKChtc2csIGkpID0+IHtcbiAgICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIHNjcmlwdElkc1tpXS5jaGFpbiwgc2NyaXB0SWRzW2ldLmluZGV4KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhZGRyZXNzOiBnZXRBZGRyZXNzKHdhbGxldEtleXMsIHNjcmlwdElkc1tpXS5jaGFpbiwgc2NyaXB0SWRzW2ldLmluZGV4KSxcbiAgICAgICAgICBtZXNzYWdlOiBtc2csXG4gICAgICAgICAgcHVia2V5cyxcbiAgICAgICAgICBzY3JpcHRUeXBlOiBzY3JpcHRUeXBlc1tpXSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgbWVzc2FnZUluZm8sXG4gICAgICB9O1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodmVyaWZ5VHJhbnNhY3Rpb25Gcm9tQnJvYWRjYXN0YWJsZU1lc3NhZ2UoYnJvYWRjYXN0YWJsZSwgJ2J0YycpLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciB3cm9uZyBtZXNzYWdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2hhaW4gPSAxMDtcbiAgICAgIGNvbnN0IGluZGV4ID0gMDtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gJ09yaWdpbmFsIG1lc3NhZ2UnO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuXG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1syXSkpO1xuXG4gICAgICBjb25zdCBwdWJrZXlzID0gZ2V0RGVyaXZlZFB1YmtleXMoc2VlZCwgY2hhaW4sIGluZGV4KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBnZXRBZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCk7XG5cbiAgICAgIGNvbnN0IGJyb2FkY2FzdGFibGU6IEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlID0ge1xuICAgICAgICB0eEhleDogQnVmZmVyLmZyb20ocHNidC5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICBtZXNzYWdlSW5mbzogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICBtZXNzYWdlOiAnRGlmZmVyZW50IG1lc3NhZ2UnLCAvLyBXcm9uZyBtZXNzYWdlXG4gICAgICAgICAgICBwdWJrZXlzLFxuICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh2ZXJpZnlUcmFuc2FjdGlvbkZyb21Ccm9hZGNhc3RhYmxlTWVzc2FnZShicm9hZGNhc3RhYmxlLCAnYnRjJyksIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZm9yIHVuc3VwcG9ydGVkIGNvaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6ICcwMCcsXG4gICAgICAgIG1lc3NhZ2VJbmZvOiBbXSxcbiAgICAgIH07XG5cbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHZlcmlmeVRyYW5zYWN0aW9uRnJvbUJyb2FkY2FzdGFibGVNZXNzYWdlKGJyb2FkY2FzdGFibGUsICdsdGMnKSxcbiAgICAgICAgL09ubHkgdGJ0YzQgb3IgYnRjIGNvaW5OYW1lcyBhcmUgc3VwcG9ydGVkL1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dlbmVyYXRlQklQMzIyTWVzc2FnZUxpc3RBbmRWZXJpZnlGcm9tTWVzc2FnZUJyb2FkY2FzdGFibGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2VlZCA9ICdiaXAzMjJfZ2VuZXJhdGVfdGVzdCc7XG4gICAgY29uc3QgeyB4cHVicywgeHByaXZzIH0gPSBjcmVhdGVUZXN0V2FsbGV0S2V5cyhzZWVkKTtcbiAgICBjb25zdCB3YWxsZXRLZXlzID0gZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMuZnJvbSh4cHVicyk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIG1lc3NhZ2UgbGlzdCBmcm9tIHZhbGlkIHByb29mcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdQcm9vZiBtZXNzYWdlJztcblxuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcblxuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlczogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGVbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0LnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgbWVzc2FnZUluZm86IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgICAgICAgIHB1YmtleXMsXG4gICAgICAgICAgICAgIHNjcmlwdFR5cGU6ICdwMnNoUDJ3c2gnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gZ2VuZXJhdGVCSVAzMjJNZXNzYWdlTGlzdEFuZFZlcmlmeUZyb21NZXNzYWdlQnJvYWRjYXN0YWJsZShicm9hZGNhc3RhYmxlcywgJ2J0YycpO1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0Lmxlbmd0aCwgMSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0WzBdLmFkZHJlc3MsIGFkZHJlc3MpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdFswXS5tZXNzYWdlLCBtZXNzYWdlVGV4dCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlZHVwbGljYXRlIGFkZHJlc3NlcyB3aXRoIHNhbWUgbWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdTYW1lIG1lc3NhZ2UnO1xuXG4gICAgICAvLyBDcmVhdGUgdHdvIHNlcGFyYXRlIFBTQlRzIGZvciB0aGUgc2FtZSBhZGRyZXNzL21lc3NhZ2VcbiAgICAgIGNvbnN0IHBzYnQxID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQxLCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcbiAgICAgIHBzYnQxLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQxLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHNidDIgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuY3JlYXRlRW1wdHkoJ2J0YycsIHdhbGxldEtleXMsIHsgdmVyc2lvbjogMCB9KTtcbiAgICAgIHdhc21CaXAzMjIuYWRkQmlwMzIySW5wdXQocHNidDIsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuICAgICAgcHNidDIuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSkpO1xuICAgICAgcHNidDIuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1syXSkpO1xuXG4gICAgICBjb25zdCBwdWJrZXlzID0gZ2V0RGVyaXZlZFB1YmtleXMoc2VlZCwgY2hhaW4sIGluZGV4KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBnZXRBZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCk7XG5cbiAgICAgIGNvbnN0IGJyb2FkY2FzdGFibGVzOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZVtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQxLnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgbWVzc2FnZUluZm86IFt7IGFkZHJlc3MsIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LCBwdWJrZXlzLCBzY3JpcHRUeXBlOiAncDJzaFAyd3NoJyB9XSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0Mi5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIG1lc3NhZ2VJbmZvOiBbeyBhZGRyZXNzLCBtZXNzYWdlOiBtZXNzYWdlVGV4dCwgcHVia2V5cywgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcgfV0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBnZW5lcmF0ZUJJUDMyMk1lc3NhZ2VMaXN0QW5kVmVyaWZ5RnJvbU1lc3NhZ2VCcm9hZGNhc3RhYmxlKGJyb2FkY2FzdGFibGVzLCAnYnRjJyk7XG5cbiAgICAgIC8vIFNob3VsZCBkZWR1cGxpY2F0ZSB0byBhIHNpbmdsZSBlbnRyeVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdFswXS5hZGRyZXNzLCBhZGRyZXNzKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHRbMF0ubWVzc2FnZSwgbWVzc2FnZVRleHQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBmb3IgZHVwbGljYXRlIGFkZHJlc3Mgd2l0aCBkaWZmZXJlbnQgbWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG5cbiAgICAgIGNvbnN0IHBzYnQxID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQxLCB7XG4gICAgICAgIG1lc3NhZ2U6ICdNZXNzYWdlIDEnLFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcbiAgICAgIHBzYnQxLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQxLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHNidDIgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuY3JlYXRlRW1wdHkoJ2J0YycsIHdhbGxldEtleXMsIHsgdmVyc2lvbjogMCB9KTtcbiAgICAgIHdhc21CaXAzMjIuYWRkQmlwMzIySW5wdXQocHNidDIsIHtcbiAgICAgICAgbWVzc2FnZTogJ01lc3NhZ2UgMicsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuICAgICAgcHNidDIuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSkpO1xuICAgICAgcHNidDIuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1syXSkpO1xuXG4gICAgICBjb25zdCBwdWJrZXlzID0gZ2V0RGVyaXZlZFB1YmtleXMoc2VlZCwgY2hhaW4sIGluZGV4KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBnZXRBZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCk7XG5cbiAgICAgIGNvbnN0IGJyb2FkY2FzdGFibGVzOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZVtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQxLnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgbWVzc2FnZUluZm86IFt7IGFkZHJlc3MsIG1lc3NhZ2U6ICdNZXNzYWdlIDEnLCBwdWJrZXlzLCBzY3JpcHRUeXBlOiAncDJzaFAyd3NoJyB9XSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0Mi5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIG1lc3NhZ2VJbmZvOiBbeyBhZGRyZXNzLCBtZXNzYWdlOiAnTWVzc2FnZSAyJywgcHVia2V5cywgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcgfV0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBnZW5lcmF0ZUJJUDMyMk1lc3NhZ2VMaXN0QW5kVmVyaWZ5RnJvbU1lc3NhZ2VCcm9hZGNhc3RhYmxlKGJyb2FkY2FzdGFibGVzLCAnYnRjJyksXG4gICAgICAgIC9EdXBsaWNhdGUgYWRkcmVzcy4qaGFzIGRpZmZlcmVudCBtZXNzYWdlcy9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciBpbnZhbGlkIHByb29mJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2hhaW4gPSAxMDtcbiAgICAgIGNvbnN0IGluZGV4ID0gMDtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gJ1ZhbGlkIG1lc3NhZ2UnO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuICAgICAgcHNidC5zaWduKEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0LnNpZ24oQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlczogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGVbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0LnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgbWVzc2FnZUluZm86IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ1dyb25nIG1lc3NhZ2UnLCAvLyBEb2Vzbid0IG1hdGNoIHdoYXQgd2FzIHNpZ25lZFxuICAgICAgICAgICAgICBwdWJrZXlzLFxuICAgICAgICAgICAgICBzY3JpcHRUeXBlOiAncDJzaFAyd3NoJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IGdlbmVyYXRlQklQMzIyTWVzc2FnZUxpc3RBbmRWZXJpZnlGcm9tTWVzc2FnZUJyb2FkY2FzdGFibGUoYnJvYWRjYXN0YWJsZXMsICdidGMnKSxcbiAgICAgICAgL2RpZCBub3QgaGF2ZSBhIHN1Y2Nlc3NmdWwgdmFsaWRhdGlvbi9cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdCSVAzMjIgUHJvb2YnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9ICdJIGNhbiBiZWxpZXZlIGl0IGlzIG5vdCBidXR0ZXInO1xuICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgY29uc3QgaW5kZXggPSAwO1xuICAgIGNvbnN0IHsgeHB1YnMsIHhwcml2cyB9ID0gY3JlYXRlVGVzdFdhbGxldEtleXMoJ2JpcDMyMi1wcm9vZicpO1xuICAgIGNvbnN0IHdhbGxldEtleXMgPSBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cy5mcm9tKHhwdWJzKTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVuc2lnbmVkUHNidCgpOiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQge1xuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7IG1lc3NhZ2UsIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LCByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyB9KTtcbiAgICAgIHJldHVybiBwc2J0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFzc2VydENvbW1vbihyZXN1bHQ6IFJldHVyblR5cGU8dHlwZW9mIGV4cGxhaW5Qc2J0V2FzbT4sIGV4cGVjdGVkU2lnbmVyQ291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5vdXRwdXRBbW91bnQsICcwJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LmNoYW5nZUFtb3VudCwgJzAnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQub3V0cHV0cy5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5vdXRwdXRzWzBdLmFkZHJlc3MsICdzY3JpcHRQdWJLZXk6NmEnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZmVlLCAnMCcpO1xuICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiByZXN1bHQuaW5wdXRzKSB7XG4gICAgICAgIGNvbnN0IHNpZ25lckNvdW50ID0gT2JqZWN0LnZhbHVlcyhpbnB1dC5zaWduZWRCeSkuZmlsdGVyKEJvb2xlYW4pLmxlbmd0aDtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNpZ25lckNvdW50LCBleHBlY3RlZFNpZ25lckNvdW50KTtcbiAgICAgIH1cbiAgICAgIGFzc2VydC5vayhyZXN1bHQubWVzc2FnZXMpO1xuICAgICAgZm9yIChjb25zdCBvYmogb2YgcmVzdWx0Lm1lc3NhZ2VzID8/IFtdKSB7XG4gICAgICAgIGFzc2VydC5vayhvYmouYWRkcmVzcyk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChvYmoubWVzc2FnZSwgbWVzc2FnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgcnVuIHdpdGggYSB1c2VyIG5vbmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcHNidCA9IGNyZWF0ZVVuc2lnbmVkUHNidCgpO1xuICAgICAgYXNzZXJ0Q29tbW9uKFxuICAgICAgICBleHBsYWluUHNidFdhc20ocHNidCwgd2FsbGV0S2V5cywge1xuICAgICAgICAgIGFkZHJlc3NDb2RlYzogbmV3IEFkZHJlc3NDb2RlYygnYnRjJyksXG4gICAgICAgICAgcmVwbGF5UHJvdGVjdGlvbjogeyBwdWJsaWNLZXlzOiBbXSB9LFxuICAgICAgICB9KSxcbiAgICAgICAgMFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2Vzc2Z1bGx5IHJ1biB3aXRoIGEgdXNlciBzaWduYXR1cmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwc2J0ID0gY3JlYXRlVW5zaWduZWRQc2J0KCk7XG4gICAgICBwc2J0LnNpZ24oQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIGFzc2VydENvbW1vbihcbiAgICAgICAgZXhwbGFpblBzYnRXYXNtKHBzYnQsIHdhbGxldEtleXMsIHtcbiAgICAgICAgICBhZGRyZXNzQ29kZWM6IG5ldyBBZGRyZXNzQ29kZWMoJ2J0YycpLFxuICAgICAgICAgIHJlcGxheVByb3RlY3Rpb246IHsgcHVibGljS2V5czogW10gfSxcbiAgICAgICAgfSksXG4gICAgICAgIDFcbiAgICAgICk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgcnVuIHdpdGggYSBoc20gc2lnbmF0dXJlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcHNidCA9IGNyZWF0ZVVuc2lnbmVkUHNidCgpO1xuICAgICAgcHNidC5zaWduKEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0LnNpZ24oQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcbiAgICAgIGFzc2VydENvbW1vbihcbiAgICAgICAgZXhwbGFpblBzYnRXYXNtKHBzYnQsIHdhbGxldEtleXMsIHtcbiAgICAgICAgICBhZGRyZXNzQ29kZWM6IG5ldyBBZGRyZXNzQ29kZWMoJ2J0YycpLFxuICAgICAgICAgIHJlcGxheVByb3RlY3Rpb246IHsgcHVibGljS2V5czogW10gfSxcbiAgICAgICAgfSksXG4gICAgICAgIDJcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdwMnRyTXVzaWcyIEJJUDMyMiBzaWduaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcHJvZHVjZSB2ZXJpZmlhYmxlIG11c2lnMiBzaWduYXR1cmVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2VlZCA9ICdwMnRyTXVzaWcyX3NpZ2hhc2hfdGVzdCc7XG4gICAgICBjb25zdCB7IHhwdWJzLCB4cHJpdnMgfSA9IGNyZWF0ZVRlc3RXYWxsZXRLZXlzKHNlZWQpO1xuICAgICAgY29uc3Qgd2FsbGV0S2V5cyA9IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLmZyb20oeHB1YnMpO1xuXG4gICAgICBjb25zdCBjaGFpbiA9IDQwOyAvLyBwMnRyTXVzaWcyIGV4dGVybmFsXG4gICAgICBjb25zdCBpbmRleCA9IDA7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdCSVAzMjIgc2lnaGFzaCB0ZXN0JztcblxuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICAgIHNpZ25QYXRoOiB7IHNpZ25lcjogJ3VzZXInLCBjb3NpZ25lcjogJ2JpdGdvJyB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHVzZXJLZXkgPSBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSk7XG4gICAgICBjb25zdCBiaXRnb0tleSA9IEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKTtcbiAgICAgIHBzYnQuZ2VuZXJhdGVNdXNpZzJOb25jZXModXNlcktleSk7XG4gICAgICBwc2J0LmdlbmVyYXRlTXVzaWcyTm9uY2VzKGJpdGdvS2V5KTtcbiAgICAgIHBzYnQuc2lnbih1c2VyS2V5KTtcbiAgICAgIHBzYnQuc2lnbihiaXRnb0tleSk7XG5cbiAgICAgIGNvbnN0IHNpZ25lcnMgPSB3YXNtQmlwMzIyLnZlcmlmeUJpcDMyMlBzYnRJbnB1dChwc2J0LCAwLCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5vayhzaWduZXJzLmluY2x1ZGVzKCd1c2VyJykpO1xuICAgICAgYXNzZXJ0Lm9rKHNpZ25lcnMuaW5jbHVkZXMoJ2JpdGdvJykpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndXR4b2xpYiBpbnRlcm9wZXJhYmlsaXR5IC0gd2FzbS11dHhvIGNhbiB2ZXJpZnkgdXR4b2xpYi1nZW5lcmF0ZWQgQklQMzIyIHByb29mcycsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUaGlzIHRlc3QgdmVyaWZpZXMgY3Jvc3MtbGlicmFyeSBjb21wYXRpYmlsaXR5OlxuICAgIC8vIDEuIHV0eG8tY29yZSAodXR4b2xpYikgY3JlYXRlcyBhIEJJUDMyMiBQU0JUXG4gICAgLy8gMi4gd2FzbS11dHhvIHNpZ25zIGl0IHdpdGggbXVzaWcyXG4gICAgLy8gMy4gdXR4by1jb3JlIHZhbGlkYXRlcyB0aGUgd2FzbS11dHhvIHNpZ25hdHVyZXNcbiAgICAvL1xuICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdhc20tdXR4byBhbmQgdXR4b2xpYiBnZW5lcmF0ZSBjb21wYXRpYmxlIEJJUDMyMiBwcm9vZnMuXG5cbiAgICBpdCgnc2hvdWxkIHNpZ24gdXR4b2xpYi1jcmVhdGVkIEJJUDMyMiBQU0JUIGFuZCB2YWxpZGF0ZSB3aXRoIHV0eG9saWInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZWVkID0gJ3AydHJNdXNpZzJfdXR4b2xpYl9jb21wYXRfdGVzdCc7XG4gICAgICBjb25zdCB7IHhwcml2cyB9ID0gY3JlYXRlVGVzdFdhbGxldEtleXMoc2VlZCk7XG5cbiAgICAgIC8vIENyZWF0ZSB1dHhvbGliIFJvb3RXYWxsZXRLZXlzIGZvciB1dHhvLWNvcmUgUFNCVCBjb25zdHJ1Y3Rpb25cbiAgICAgIGNvbnN0IHV0eG9saWJSb290V2FsbGV0S2V5cyA9IG5ldyB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzKHV0eG9saWIudGVzdHV0aWwuZ2V0S2V5VHJpcGxlKHNlZWQpKTtcblxuICAgICAgLy8gcDJ0ck11c2lnMiBleHRlcm5hbCBjaGFpbiBjb2RlXG4gICAgICBjb25zdCBjaGFpbiA9IHV0eG9saWIuYml0Z28uZ2V0RXh0ZXJuYWxDaGFpbkNvZGUoJ3AydHJNdXNpZzInKTtcbiAgICAgIGNvbnN0IGluZGV4ID0gMDtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gJ0JJUDMyMiB1dHhvbGliIGludGVyb3AgdGVzdCc7XG5cbiAgICAgIC8vIENyZWF0ZSBCSVAzMjIgUFNCVCB1c2luZyB1dHhvLWNvcmVcbiAgICAgIGNvbnN0IHBzYnQgPSBjb3JlQmlwMzIyLmNyZWF0ZUJhc2VUb1NpZ25Qc2J0KHV0eG9saWJSb290V2FsbGV0S2V5cywgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luKTtcbiAgICAgIGNvcmVCaXAzMjIuYWRkQmlwMzIySW5wdXRXaXRoQ2hhaW5BbmRJbmRleChwc2J0LCBtZXNzYWdlVGV4dCwgdXR4b2xpYlJvb3RXYWxsZXRLZXlzLCB7XG4gICAgICAgIGNoYWluLFxuICAgICAgICBpbmRleCxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBDb252ZXJ0IHRvIHdhc20tdXR4byBQU0JUIGZvciBzaWduaW5nXG4gICAgICBjb25zdCB3YXNtUHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5mcm9tQnl0ZXMocHNidC50b0J1ZmZlcigpLCAnYnRjJyk7XG5cbiAgICAgIC8vIEdlbmVyYXRlIG11c2lnMiBub25jZXMgYW5kIHNpZ24gd2l0aCB3YXNtLXV0eG9cbiAgICAgIGNvbnN0IHVzZXJLZXkgPSBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSk7XG4gICAgICBjb25zdCBiaXRnb0tleSA9IEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKTtcblxuICAgICAgd2FzbVBzYnQuZ2VuZXJhdGVNdXNpZzJOb25jZXModXNlcktleSk7XG4gICAgICB3YXNtUHNidC5nZW5lcmF0ZU11c2lnMk5vbmNlcyhiaXRnb0tleSk7XG4gICAgICB3YXNtUHNidC5zaWduKHVzZXJLZXkpO1xuICAgICAgd2FzbVBzYnQuc2lnbihiaXRnb0tleSk7XG5cbiAgICAgIC8vIENvbnZlcnQgYmFjayB0byB1dHhvbGliIFBTQlQgZm9yIHZhbGlkYXRpb25cbiAgICAgIGNvbnN0IHNpZ25lZFBzYnQgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGcm9tQnVmZmVyKFxuICAgICAgICBCdWZmZXIuZnJvbSh3YXNtUHNidC5zZXJpYWxpemUoKSksXG4gICAgICAgIHV0eG9saWIubmV0d29ya3MuYml0Y29pblxuICAgICAgKTtcblxuICAgICAgLy8gVmFsaWRhdGlvbiBzaG91bGQgc3VjY2VlZCAtIHdhc20tdXR4byBzaWduYXR1cmVzIGFyZSBjb21wYXRpYmxlIHdpdGggdXR4b2xpYlxuICAgICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IHV0eG9saWIuYml0Z28uZ2V0U2lnbmF0dXJlVmFsaWRhdGlvbkFycmF5UHNidChzaWduZWRQc2J0LCB1dHhvbGliUm9vdFdhbGxldEtleXMpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhhdCBib3RoIHVzZXIgKGluZGV4IDApIGFuZCBiaXRnbyAoaW5kZXggMikgc2lnbmF0dXJlcyBhcmUgdmFsaWRcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh2YWxpZGF0aW9uUmVzdWx0Lmxlbmd0aCwgMSk7XG4gICAgICBjb25zdCBbaW5wdXRJbmRleCwgc2lnVmFsaWRhdGlvbl0gPSB2YWxpZGF0aW9uUmVzdWx0WzBdO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlucHV0SW5kZXgsIDApO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNpZ1ZhbGlkYXRpb25bMF0sIHRydWUsICd1c2VyIHNpZ25hdHVyZSBzaG91bGQgYmUgdmFsaWQnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaWdWYWxpZGF0aW9uWzFdLCBmYWxzZSwgJ2JhY2t1cCBzaWduYXR1cmUgc2hvdWxkIG5vdCBiZSBwcmVzZW50Jyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2lnVmFsaWRhdGlvblsyXSwgdHJ1ZSwgJ2JpdGdvIHNpZ25hdHVyZSBzaG91bGQgYmUgdmFsaWQnKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -44,10 +44,12 @@ const utxo_lib_1 = require("@bitgo/utxo-lib");
|
|
|
44
44
|
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
45
45
|
const sdk_test_1 = require("@bitgo/sdk-test");
|
|
46
46
|
const fixedScript_1 = require("../../src/transaction/fixedScript");
|
|
47
|
+
const recipient_1 = require("../../src/transaction/recipient");
|
|
47
48
|
const verifyKey_1 = require("../../src/verifyKey");
|
|
48
49
|
const util_1 = require("./util");
|
|
49
50
|
function explainPsbt(psbt, walletKeys, customChangeWalletKeys) {
|
|
50
51
|
return (0, fixedScript_1.explainPsbtWasm)(psbt, wasm_utxo_1.fixedScriptWallet.RootWalletKeys.from(walletKeys), {
|
|
52
|
+
addressCodec: new recipient_1.AddressCodec('btc'),
|
|
51
53
|
replayProtection: { publicKeys: [] },
|
|
52
54
|
customChangeWalletXpubs: customChangeWalletKeys
|
|
53
55
|
? wasm_utxo_1.fixedScriptWallet.RootWalletKeys.from(customChangeWalletKeys)
|
|
@@ -201,4 +203,4 @@ describe('Custom Change Wallets', function () {
|
|
|
201
203
|
});
|
|
202
204
|
});
|
|
203
205
|
});
|
|
204
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tQ2hhbmdlV2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2N1c3RvbUNoYW5nZVdhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdFQUF3QztBQUV4Qyw2QkFBOEI7QUFDOUIsZ0RBQXFFO0FBQ3JFLHlEQUEyQztBQUMzQyw4Q0FBMkM7QUFDM0MsOENBQWlEO0FBQ2pELDhDQUEwQztBQUUxQyxtRUFBb0U7QUFDcEUsbURBQXlEO0FBRXpELGlDQUFtRDtBQUVuRCxTQUFTLFdBQVcsQ0FDbEIsSUFBaUMsRUFDakMsVUFBd0MsRUFDeEMsc0JBQWdFO0lBRWhFLE9BQU8sSUFBQSw2QkFBZSxFQUFDLElBQUksRUFBRSw2QkFBaUIsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1FBQzlFLGdCQUFnQixFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRTtRQUNwQyx1QkFBdUIsRUFBRSxzQkFBc0I7WUFDN0MsQ0FBQyxDQUFDLDZCQUFpQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUM7WUFDL0QsQ0FBQyxDQUFDLFNBQVM7S0FDZCxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsUUFBUSxDQUFDLHVCQUF1QixFQUFFO0lBQ2hDLE1BQU0sSUFBSSxHQUFHLElBQUEsa0JBQVcsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUN6QyxNQUFNLEtBQUssR0FBRyxpQkFBTSxDQUFDLFlBQVksQ0FBQyxtQkFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQzdELE1BQU0sY0FBYyxHQUFHLG1CQUFRLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUN2RCxNQUFNLHNCQUFzQixHQUFHLG1CQUFRLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDOUUsTUFBTSxjQUFjLEdBQUcsaUJBQUssQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFVBQVcsQ0FBQztJQUV6RixNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBQSxrQkFBTyxFQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3RHLE1BQU0sa0JBQWtCLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBQSxrQkFBTyxFQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3RILE1BQU0seUJBQXlCLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FDakQsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3RELElBQUk7UUFDSixNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFPLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FDL0csS0FBSyxDQUNOO0tBQ0YsQ0FBQyxDQUM0QyxDQUFDO0lBRWpELE1BQU0sTUFBTSxHQUFxQixDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoRixNQUFNLE9BQU8sR0FBc0I7UUFDakMsbURBQW1EO1FBQ25ELEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQzNDLHlGQUF5RjtRQUN6RixFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxVQUFVLEVBQUUsc0JBQXNCLEVBQUU7UUFDL0UsZ0NBQWdDO1FBQ2hDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7S0FDOUQsQ0FBQztJQUVGLE1BQU0sV0FBVyxHQUFHLG1CQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUU7UUFDL0YsY0FBYyxFQUFFLElBQUk7S0FDckIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxJQUFJLEdBQUcsNkJBQWlCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFbEYsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNuRyxNQUFNLG9CQUFvQixHQUFHLHlCQUF5QixDQUFDO0lBQ3ZELE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDO0lBRXRDLFNBQVMsWUFBWSxDQUFDLE1BQWdCLEVBQUUsSUFBa0M7UUFDeEUsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUNsSCxDQUFDO0lBQ0osQ0FBQztJQUVELFNBQVMsc0JBQXNCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxvQkFBb0IsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUM3RixFQUFFLEVBQUUsb0JBQW9CO1lBQ3hCLElBQUksRUFBRSxrQkFBa0I7WUFDeEIsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7U0FDdEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUVqQyxFQUFFLENBQUMsbUVBQW1FLEVBQUU7UUFDdEUsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUU5RSxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4RCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVoRSxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMzQyxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlELGdCQUFNLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdEUsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTNELGdCQUFNLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xELGdCQUFNLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzVELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHNFQUFzRSxFQUFFO1FBQ3pFLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRWpFLGdCQUFNLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hELGdCQUFNLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRWhFLGdCQUFNLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXBFLDREQUE0RDtRQUM1RCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRTtRQUNoRCxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRS9ELEtBQUssTUFBTSxHQUFHLElBQUksc0JBQXNCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEQsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hGLGdCQUFNLENBQUMsRUFBRSxDQUNQLElBQUEsOEJBQWtCLEVBQUMsRUFBRSxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FDM0csQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw4Q0FBOEMsRUFBRTtRQUNqRCxNQUFNLFFBQVEsR0FBRyxpQkFBSyxDQUFDLFVBQVUsQ0FBQyxtQkFBUSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQy9GLE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFL0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoRCxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLFVBQVcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pHLGdCQUFNLENBQUMsV0FBVyxDQUNoQixJQUFBLDhCQUFrQixFQUFDLEVBQUUsWUFBWSxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxDQUFDLEVBQzdHLEtBQUssQ0FDTixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGtCQUFrQixFQUFFO1FBQzNCLEVBQUUsQ0FBQywyREFBMkQsRUFBRSxLQUFLO1lBQ25FLE1BQU0sTUFBTSxHQUFHLElBQUksaUJBQU0sQ0FBQyxtQkFBWSxFQUFFLElBQUksRUFBRTtnQkFDNUMsRUFBRSxFQUFFLFlBQVk7Z0JBQ2hCLElBQUksRUFBRSxVQUFVO2dCQUNoQixJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDckIsWUFBWSxFQUFFLEVBQUUsb0JBQW9CLEVBQUU7Z0JBQ3RDLHlCQUF5QjthQUMxQixDQUFDLENBQUM7WUFFSCxNQUFNLEtBQUssR0FBRztnQkFDWixHQUFHLFlBQVksQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDO2dCQUMzQyxzQkFBc0IsRUFBRTtnQkFDeEIsR0FBRyxZQUFZLENBQUMsa0JBQWtCLEVBQUUsc0JBQXNCLENBQUM7YUFDNUQsQ0FBQztZQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDO2dCQUN6QyxRQUFRLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUU7Z0JBQ3hFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzFDLE1BQU0sRUFBRSxNQUFtRDthQUM1RCxDQUFDLENBQUM7WUFFSCxLQUFLLE1BQU0sQ0FBQyxJQUFJLEtBQUs7Z0JBQUUsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFFN0MsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQy9CLGdCQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN2RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzNCLGdCQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUM5RyxDQUFDO1lBRUQsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM3RCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZEQUE2RCxFQUFFLEtBQUs7WUFDckUsTUFBTSxNQUFNLEdBQUcsSUFBSSxpQkFBTSxDQUFDLG1CQUFZLEVBQUUsSUFBSSxFQUFFO2dCQUM1QyxFQUFFLEVBQUUsWUFBWTtnQkFDaEIsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNyQixZQUFZLEVBQUUsRUFBRTthQUNqQixDQUFDLENBQUM7WUFFSCxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBRXZELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDO2dCQUN6QyxRQUFRLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUU7Z0JBQ3hFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzFDLE1BQU0sRUFBRSxNQUFtRDthQUM1RCxDQUFDLENBQUM7WUFFSCxLQUFLLE1BQU0sQ0FBQyxJQUFJLEtBQUs7Z0JBQUUsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFFN0MsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNuRCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMseUNBQXlDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsOENBQThDLEVBQUUsS0FBSztZQUN0RCxNQUFNLFFBQVEsR0FBRyxpQkFBSyxDQUFDLFVBQVUsQ0FBQyxtQkFBUSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQy9GLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQ3JDLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDdEQsSUFBSTtnQkFDSixNQUFNLENBQUMsSUFBSSxDQUNULG1CQUFPLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxRQUFRLENBQUMsVUFBVyxDQUFDLENBQ2xHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQzthQUNsQixDQUFDLENBQzRDLENBQUM7WUFFakQsTUFBTSxNQUFNLEdBQUcsSUFBSSxpQkFBTSxDQUFDLG1CQUFZLEVBQUUsSUFBSSxFQUFFO2dCQUM1QyxFQUFFLEVBQUUsWUFBWTtnQkFDaEIsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNyQixZQUFZLEVBQUUsRUFBRSxvQkFBb0IsRUFBRTtnQkFDdEMseUJBQXlCLEVBQUUsYUFBYTthQUN6QyxDQUFDLENBQUM7WUFFSCxZQUFZLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQ3pDLHNCQUFzQixFQUFFLENBQUM7WUFDekIsWUFBWSxDQUFDLGtCQUFrQixFQUFFLHNCQUFzQixDQUFDLENBQUM7WUFFekQsTUFBTSxnQkFBTSxDQUFDLE9BQU8sQ0FDbEIsR0FBRyxFQUFFLENBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDO2dCQUNwQixRQUFRLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUU7Z0JBQ3hFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzFDLE1BQU0sRUFBRSxNQUFtRDthQUM1RCxDQUFDLEVBQ0osaURBQWlELENBQ2xELENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0L3N0cmljdCc7XG5cbmltcG9ydCBub2NrID0gcmVxdWlyZSgnbm9jaycpO1xuaW1wb3J0IHsgZml4ZWRTY3JpcHRXYWxsZXQsIEJJUDMyLCBtZXNzYWdlIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyB0ZXN0dXRpbCB9IGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBjb21tb24sIFdhbGxldCB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBnZXRTZWVkIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcblxuaW1wb3J0IHsgZXhwbGFpblBzYnRXYXNtIH0gZnJvbSAnLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0JztcbmltcG9ydCB7IHZlcmlmeUtleVNpZ25hdHVyZSB9IGZyb20gJy4uLy4uL3NyYy92ZXJpZnlLZXknO1xuXG5pbXBvcnQgeyBkZWZhdWx0Qml0R28sIGdldFV0eG9Db2luIH0gZnJvbSAnLi91dGlsJztcblxuZnVuY3Rpb24gZXhwbGFpblBzYnQoXG4gIHBzYnQ6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCxcbiAgd2FsbGV0S2V5czogdXR4b2xpYi5iaXRnby5Sb290V2FsbGV0S2V5cyxcbiAgY3VzdG9tQ2hhbmdlV2FsbGV0S2V5czogdXR4b2xpYi5iaXRnby5Sb290V2FsbGV0S2V5cyB8IHVuZGVmaW5lZFxuKSB7XG4gIHJldHVybiBleHBsYWluUHNidFdhc20ocHNidCwgZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMuZnJvbSh3YWxsZXRLZXlzKSwge1xuICAgIHJlcGxheVByb3RlY3Rpb246IHsgcHVibGljS2V5czogW10gfSxcbiAgICBjdXN0b21DaGFuZ2VXYWxsZXRYcHViczogY3VzdG9tQ2hhbmdlV2FsbGV0S2V5c1xuICAgICAgPyBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cy5mcm9tKGN1c3RvbUNoYW5nZVdhbGxldEtleXMpXG4gICAgICA6IHVuZGVmaW5lZCxcbiAgfSk7XG59XG5cbmRlc2NyaWJlKCdDdXN0b20gQ2hhbmdlIFdhbGxldHMnLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGNvaW4gPSBnZXRVdHhvQ29pbignYnRjJyk7XG4gIGNvbnN0IG5ldHdvcmsgPSB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW47XG4gIGNvbnN0IGJnVXJsID0gY29tbW9uLkVudmlyb25tZW50c1tkZWZhdWx0Qml0R28uZ2V0RW52KCldLnVyaTtcbiAgY29uc3Qgcm9vdFdhbGxldEtleXMgPSB0ZXN0dXRpbC5nZXREZWZhdWx0V2FsbGV0S2V5cygpO1xuICBjb25zdCBjdXN0b21DaGFuZ2VXYWxsZXRLZXlzID0gdGVzdHV0aWwuZ2V0V2FsbGV0S2V5c0ZvclNlZWQoJ2N1c3RvbSBjaGFuZ2UnKTtcbiAgY29uc3QgdXNlclByaXZhdGVLZXkgPSBCSVAzMi5mcm9tQmFzZTU4KHJvb3RXYWxsZXRLZXlzLnRyaXBsZVswXS50b0Jhc2U1OCgpKS5wcml2YXRlS2V5ITtcblxuICBjb25zdCBtYWluS2V5SWRzID0gcm9vdFdhbGxldEtleXMudHJpcGxlLm1hcCgoaykgPT4gZ2V0U2VlZChrLm5ldXRlcmVkKCkudG9CYXNlNTgoKSkudG9TdHJpbmcoJ2hleCcpKTtcbiAgY29uc3QgY3VzdG9tQ2hhbmdlS2V5SWRzID0gY3VzdG9tQ2hhbmdlV2FsbGV0S2V5cy50cmlwbGUubWFwKChrKSA9PiBnZXRTZWVkKGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKS50b1N0cmluZygnaGV4JykpO1xuICBjb25zdCBjdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIChbJ3VzZXInLCAnYmFja3VwJywgJ2JpdGdvJ10gYXMgY29uc3QpLm1hcCgobmFtZSwgaSkgPT4gW1xuICAgICAgbmFtZSxcbiAgICAgIEJ1ZmZlci5mcm9tKG1lc3NhZ2Uuc2lnbk1lc3NhZ2UoY3VzdG9tQ2hhbmdlV2FsbGV0S2V5cy50cmlwbGVbaV0ubmV1dGVyZWQoKS50b0Jhc2U1OCgpLCB1c2VyUHJpdmF0ZUtleSkpLnRvU3RyaW5nKFxuICAgICAgICAnaGV4J1xuICAgICAgKSxcbiAgICBdKVxuICApIGFzIFJlY29yZDwndXNlcicgfCAnYmFja3VwJyB8ICdiaXRnbycsIHN0cmluZz47XG5cbiAgY29uc3QgaW5wdXRzOiB0ZXN0dXRpbC5JbnB1dFtdID0gW3sgc2NyaXB0VHlwZTogJ3Ayc2gnLCB2YWx1ZTogQmlnSW50KDEwMDAwKSB9XTtcbiAgY29uc3Qgb3V0cHV0czogdGVzdHV0aWwuT3V0cHV0W10gPSBbXG4gICAgLy8gcmVndWxhciBjaGFuZ2UgKHVzZXMgcm9vdFdhbGxldEtleXMgdmlhIGRlZmF1bHQpXG4gICAgeyBzY3JpcHRUeXBlOiAncDJzaCcsIHZhbHVlOiBCaWdJbnQoMzAwMCkgfSxcbiAgICAvLyBjdXN0b20gY2hhbmdlIChiaXAzMkRlcml2YXRpb24gZnJvbSBjdXN0b21DaGFuZ2VXYWxsZXRLZXlzLCBub3QgYWRkZWQgYXMgZ2xvYmFsIHhwdWJzKVxuICAgIHsgc2NyaXB0VHlwZTogJ3Ayc2gnLCB2YWx1ZTogQmlnSW50KDMwMDApLCB3YWxsZXRLZXlzOiBjdXN0b21DaGFuZ2VXYWxsZXRLZXlzIH0sXG4gICAgLy8gZXh0ZXJuYWwgKG5vIGRlcml2YXRpb24gaW5mbylcbiAgICB7IHNjcmlwdFR5cGU6ICdwMnNoJywgdmFsdWU6IEJpZ0ludCgzMDAwKSwgd2FsbGV0S2V5czogbnVsbCB9LFxuICBdO1xuXG4gIGNvbnN0IHV0eG9saWJQc2J0ID0gdGVzdHV0aWwuY29uc3RydWN0UHNidChpbnB1dHMsIG91dHB1dHMsIG5ldHdvcmssIHJvb3RXYWxsZXRLZXlzLCAndW5zaWduZWQnLCB7XG4gICAgYWRkR2xvYmFsWFB1YnM6IHRydWUsXG4gIH0pO1xuICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmZyb21CeXRlcyh1dHhvbGliUHNidC50b0J1ZmZlcigpLCAnYnRjJyk7XG5cbiAgY29uc3QgZXh0ZXJuYWxBZGRyZXNzID0gdXR4b2xpYi5hZGRyZXNzLmZyb21PdXRwdXRTY3JpcHQodXR4b2xpYlBzYnQudHhPdXRwdXRzWzJdLnNjcmlwdCwgbmV0d29yayk7XG4gIGNvbnN0IGN1c3RvbUNoYW5nZVdhbGxldElkID0gJ2N1c3RvbS1jaGFuZ2Utd2FsbGV0LWlkJztcbiAgY29uc3QgbWFpbldhbGxldElkID0gJ21haW4td2FsbGV0LWlkJztcblxuICBmdW5jdGlvbiBub2NrS2V5RmV0Y2goa2V5SWRzOiBzdHJpbmdbXSwga2V5czogdXR4b2xpYi5iaXRnby5Sb290V2FsbGV0S2V5cyk6IG5vY2suU2NvcGVbXSB7XG4gICAgcmV0dXJuIGtleUlkcy5tYXAoKGlkLCBpKSA9PlxuICAgICAgbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyLyR7Y29pbi5nZXRDaGFpbigpfS9rZXkvJHtpZH1gKS5yZXBseSgyMDAsIHsgcHViOiBrZXlzLnRyaXBsZVtpXS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkgfSlcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gbm9ja0N1c3RvbUNoYW5nZVdhbGxldCgpOiBub2NrLlNjb3BlIHtcbiAgICByZXR1cm4gbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyLyR7Y29pbi5nZXRDaGFpbigpfS93YWxsZXQvJHtjdXN0b21DaGFuZ2VXYWxsZXRJZH1gKS5yZXBseSgyMDAsIHtcbiAgICAgIGlkOiBjdXN0b21DaGFuZ2VXYWxsZXRJZCxcbiAgICAgIGtleXM6IGN1c3RvbUNoYW5nZUtleUlkcyxcbiAgICAgIGNvaW46IGNvaW4uZ2V0Q2hhaW4oKSxcbiAgICB9KTtcbiAgfVxuXG4gIGFmdGVyRWFjaCgoKSA9PiBub2NrLmNsZWFuQWxsKCkpO1xuXG4gIGl0KCdjbGFzc2lmaWVzIGN1c3RvbSBjaGFuZ2Ugb3V0cHV0IHdoZW4gY3VzdG9tQ2hhbmdlUHVicyBpcyBwcm92aWRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBleHBsYW5hdGlvbiA9IGV4cGxhaW5Qc2J0KHBzYnQsIHJvb3RXYWxsZXRLZXlzLCBjdXN0b21DaGFuZ2VXYWxsZXRLZXlzKTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYW5hdGlvbi5jaGFuZ2VPdXRwdXRzLmxlbmd0aCwgMSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4cGxhbmF0aW9uLmNoYW5nZU91dHB1dHNbMF0uYW1vdW50LCAnMzAwMCcpO1xuXG4gICAgYXNzZXJ0Lm9rKGV4cGxhbmF0aW9uLmN1c3RvbUNoYW5nZU91dHB1dHMpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYW5hdGlvbi5jdXN0b21DaGFuZ2VPdXRwdXRzLmxlbmd0aCwgMSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4cGxhbmF0aW9uLmN1c3RvbUNoYW5nZU91dHB1dHNbMF0uYW1vdW50LCAnMzAwMCcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYW5hdGlvbi5jdXN0b21DaGFuZ2VBbW91bnQsICczMDAwJyk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXhwbGFuYXRpb24ub3V0cHV0cy5sZW5ndGgsIDEpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYW5hdGlvbi5vdXRwdXRzWzBdLmFtb3VudCwgJzMwMDAnKTtcbiAgfSk7XG5cbiAgaXQoJ2NsYXNzaWZpZXMgY3VzdG9tIGNoYW5nZSBvdXRwdXQgYXMgZXh0ZXJuYWwgd2l0aG91dCBjdXN0b21DaGFuZ2VQdWJzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGV4cGxhbmF0aW9uID0gZXhwbGFpblBzYnQocHNidCwgcm9vdFdhbGxldEtleXMsIHVuZGVmaW5lZCk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXhwbGFuYXRpb24uY2hhbmdlT3V0cHV0cy5sZW5ndGgsIDEpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYW5hdGlvbi5jaGFuZ2VPdXRwdXRzWzBdLmFtb3VudCwgJzMwMDAnKTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYW5hdGlvbi5jdXN0b21DaGFuZ2VPdXRwdXRzPy5sZW5ndGggPz8gMCwgMCk7XG5cbiAgICAvLyBjdXN0b20gY2hhbmdlICsgZXh0ZXJuYWwgYm90aCB0cmVhdGVkIGFzIGV4dGVybmFsIG91dHB1dHNcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXhwbGFuYXRpb24ub3V0cHV0cy5sZW5ndGgsIDIpO1xuICB9KTtcblxuICBpdCgndmVyaWZpZXMgdmFsaWQgY3VzdG9tIGNoYW5nZSBrZXkgc2lnbmF0dXJlcycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB1c2VyUHViID0gcm9vdFdhbGxldEtleXMudHJpcGxlWzBdLm5ldXRlcmVkKCkudG9CYXNlNTgoKTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGN1c3RvbUNoYW5nZVdhbGxldEtleXMudHJpcGxlKSB7XG4gICAgICBjb25zdCBwdWIgPSBrZXkubmV1dGVyZWQoKS50b0Jhc2U1OCgpO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gQnVmZmVyLmZyb20obWVzc2FnZS5zaWduTWVzc2FnZShwdWIsIHVzZXJQcml2YXRlS2V5KSkudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgYXNzZXJ0Lm9rKFxuICAgICAgICB2ZXJpZnlLZXlTaWduYXR1cmUoeyB1c2VyS2V5Y2hhaW46IHsgcHViOiB1c2VyUHViIH0sIGtleWNoYWluVG9WZXJpZnk6IHsgcHViIH0sIGtleVNpZ25hdHVyZTogc2lnbmF0dXJlIH0pXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgaW52YWxpZCBjdXN0b20gY2hhbmdlIGtleSBzaWduYXR1cmVzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHdyb25nS2V5ID0gQklQMzIuZnJvbUJhc2U1OCh0ZXN0dXRpbC5nZXRXYWxsZXRLZXlzRm9yU2VlZCgnd3JvbmcnKS50cmlwbGVbMF0udG9CYXNlNTgoKSk7XG4gICAgY29uc3QgdXNlclB1YiA9IHJvb3RXYWxsZXRLZXlzLnRyaXBsZVswXS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCk7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBjdXN0b21DaGFuZ2VXYWxsZXRLZXlzLnRyaXBsZSkge1xuICAgICAgY29uc3QgcHViID0ga2V5Lm5ldXRlcmVkKCkudG9CYXNlNTgoKTtcbiAgICAgIGNvbnN0IGJhZFNpZ25hdHVyZSA9IEJ1ZmZlci5mcm9tKG1lc3NhZ2Uuc2lnbk1lc3NhZ2UocHViLCB3cm9uZ0tleS5wcml2YXRlS2V5ISkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgICAgdmVyaWZ5S2V5U2lnbmF0dXJlKHsgdXNlcktleWNoYWluOiB7IHB1YjogdXNlclB1YiB9LCBrZXljaGFpblRvVmVyaWZ5OiB7IHB1YiB9LCBrZXlTaWduYXR1cmU6IGJhZFNpZ25hdHVyZSB9KSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICBkZXNjcmliZSgncGFyc2VUcmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnZmV0Y2hlcyBjdXN0b20gY2hhbmdlIHdhbGxldCBrZXlzIGFuZCB2ZXJpZmllcyBzaWduYXR1cmVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChkZWZhdWx0Qml0R28sIGNvaW4sIHtcbiAgICAgICAgaWQ6IG1haW5XYWxsZXRJZCxcbiAgICAgICAga2V5czogbWFpbktleUlkcyxcbiAgICAgICAgY29pbjogY29pbi5nZXRDaGFpbigpLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHsgY3VzdG9tQ2hhbmdlV2FsbGV0SWQgfSxcbiAgICAgICAgY3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlcyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBub2NrcyA9IFtcbiAgICAgICAgLi4ubm9ja0tleUZldGNoKG1haW5LZXlJZHMsIHJvb3RXYWxsZXRLZXlzKSxcbiAgICAgICAgbm9ja0N1c3RvbUNoYW5nZVdhbGxldCgpLFxuICAgICAgICAuLi5ub2NrS2V5RmV0Y2goY3VzdG9tQ2hhbmdlS2V5SWRzLCBjdXN0b21DaGFuZ2VXYWxsZXRLZXlzKSxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IHBhcnNlZCA9IGF3YWl0IGNvaW4ucGFyc2VUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IGV4dGVybmFsQWRkcmVzcywgYW1vdW50OiAnMzAwMCcgfV0gfSxcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleDogdXR4b2xpYlBzYnQudG9IZXgoKSB9LFxuICAgICAgICB3YWxsZXQ6IHdhbGxldCBhcyB1bmtub3duIGFzIGltcG9ydCgnLi4vLi4vc3JjJykuVXR4b1dhbGxldCxcbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKGNvbnN0IG4gb2Ygbm9ja3MpIGFzc2VydC5vayhuLmlzRG9uZSgpKTtcblxuICAgICAgYXNzZXJ0Lm9rKHBhcnNlZC5jdXN0b21DaGFuZ2UpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlZC5jdXN0b21DaGFuZ2Uua2V5cy5sZW5ndGgsIDMpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlZC5jdXN0b21DaGFuZ2Uua2V5c1tpXS5wdWIsIGN1c3RvbUNoYW5nZVdhbGxldEtleXMudHJpcGxlW2ldLm5ldXRlcmVkKCkudG9CYXNlNTgoKSk7XG4gICAgICB9XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQuZXhwbGljaXRFeHRlcm5hbE91dHB1dHMubGVuZ3RoLCAxKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQuZXhwbGljaXRFeHRlcm5hbE91dHB1dHNbMF0uYW1vdW50LCAnMzAwMCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhcyBubyBjdXN0b20gY2hhbmdlIHdoZW4gd2FsbGV0IGxhY2tzIGN1c3RvbUNoYW5nZVdhbGxldElkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChkZWZhdWx0Qml0R28sIGNvaW4sIHtcbiAgICAgICAgaWQ6IG1haW5XYWxsZXRJZCxcbiAgICAgICAga2V5czogbWFpbktleUlkcyxcbiAgICAgICAgY29pbjogY29pbi5nZXRDaGFpbigpLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG5vY2tzID0gbm9ja0tleUZldGNoKG1haW5LZXlJZHMsIHJvb3RXYWxsZXRLZXlzKTtcblxuICAgICAgY29uc3QgcGFyc2VkID0gYXdhaXQgY29pbi5wYXJzZVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogZXh0ZXJuYWxBZGRyZXNzLCBhbW91bnQ6ICczMDAwJyB9XSB9LFxuICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4OiB1dHhvbGliUHNidC50b0hleCgpIH0sXG4gICAgICAgIHdhbGxldDogd2FsbGV0IGFzIHVua25vd24gYXMgaW1wb3J0KCcuLi8uLi9zcmMnKS5VdHhvV2FsbGV0LFxuICAgICAgfSk7XG5cbiAgICAgIGZvciAoY29uc3QgbiBvZiBub2NrcykgYXNzZXJ0Lm9rKG4uaXNEb25lKCkpO1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyc2VkLmN1c3RvbUNoYW5nZSwgdW5kZWZpbmVkKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQubmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb24sIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGludmFsaWQgY3VzdG9tIGNoYW5nZSBrZXkgc2lnbmF0dXJlcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdyb25nS2V5ID0gQklQMzIuZnJvbUJhc2U1OCh0ZXN0dXRpbC5nZXRXYWxsZXRLZXlzRm9yU2VlZCgnd3JvbmcnKS50cmlwbGVbMF0udG9CYXNlNTgoKSk7XG4gICAgICBjb25zdCBiYWRTaWduYXR1cmVzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICAoWyd1c2VyJywgJ2JhY2t1cCcsICdiaXRnbyddIGFzIGNvbnN0KS5tYXAoKG5hbWUsIGkpID0+IFtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIEJ1ZmZlci5mcm9tKFxuICAgICAgICAgICAgbWVzc2FnZS5zaWduTWVzc2FnZShjdXN0b21DaGFuZ2VXYWxsZXRLZXlzLnRyaXBsZVtpXS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCksIHdyb25nS2V5LnByaXZhdGVLZXkhKVxuICAgICAgICAgICkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICBdKVxuICAgICAgKSBhcyBSZWNvcmQ8J3VzZXInIHwgJ2JhY2t1cCcgfCAnYml0Z28nLCBzdHJpbmc+O1xuXG4gICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGRlZmF1bHRCaXRHbywgY29pbiwge1xuICAgICAgICBpZDogbWFpbldhbGxldElkLFxuICAgICAgICBrZXlzOiBtYWluS2V5SWRzLFxuICAgICAgICBjb2luOiBjb2luLmdldENoYWluKCksXG4gICAgICAgIGNvaW5TcGVjaWZpYzogeyBjdXN0b21DaGFuZ2VXYWxsZXRJZCB9LFxuICAgICAgICBjdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVzOiBiYWRTaWduYXR1cmVzLFxuICAgICAgfSk7XG5cbiAgICAgIG5vY2tLZXlGZXRjaChtYWluS2V5SWRzLCByb290V2FsbGV0S2V5cyk7XG4gICAgICBub2NrQ3VzdG9tQ2hhbmdlV2FsbGV0KCk7XG4gICAgICBub2NrS2V5RmV0Y2goY3VzdG9tQ2hhbmdlS2V5SWRzLCBjdXN0b21DaGFuZ2VXYWxsZXRLZXlzKTtcblxuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgY29pbi5wYXJzZVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IGV4dGVybmFsQWRkcmVzcywgYW1vdW50OiAnMzAwMCcgfV0gfSxcbiAgICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXg6IHV0eG9saWJQc2J0LnRvSGV4KCkgfSxcbiAgICAgICAgICAgIHdhbGxldDogd2FsbGV0IGFzIHVua25vd24gYXMgaW1wb3J0KCcuLi8uLi9zcmMnKS5VdHhvV2FsbGV0LFxuICAgICAgICAgIH0pLFxuICAgICAgICAvZmFpbGVkIHRvIHZlcmlmeSBjdXN0b20gY2hhbmdlIC4qIGtleSBzaWduYXR1cmUvXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tQ2hhbmdlV2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2N1c3RvbUNoYW5nZVdhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdFQUF3QztBQUV4Qyw2QkFBOEI7QUFDOUIsZ0RBQXFFO0FBQ3JFLHlEQUEyQztBQUMzQyw4Q0FBMkM7QUFDM0MsOENBQWlEO0FBQ2pELDhDQUEwQztBQUUxQyxtRUFBb0U7QUFDcEUsK0RBQStEO0FBQy9ELG1EQUF5RDtBQUV6RCxpQ0FBbUQ7QUFFbkQsU0FBUyxXQUFXLENBQ2xCLElBQWlDLEVBQ2pDLFVBQXdDLEVBQ3hDLHNCQUFnRTtJQUVoRSxPQUFPLElBQUEsNkJBQWUsRUFBQyxJQUFJLEVBQUUsNkJBQWlCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUM5RSxZQUFZLEVBQUUsSUFBSSx3QkFBWSxDQUFDLEtBQUssQ0FBQztRQUNyQyxnQkFBZ0IsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUU7UUFDcEMsdUJBQXVCLEVBQUUsc0JBQXNCO1lBQzdDLENBQUMsQ0FBQyw2QkFBaUIsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDO1lBQy9ELENBQUMsQ0FBQyxTQUFTO0tBQ2QsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFFBQVEsQ0FBQyx1QkFBdUIsRUFBRTtJQUNoQyxNQUFNLElBQUksR0FBRyxJQUFBLGtCQUFXLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7SUFDekMsTUFBTSxLQUFLLEdBQUcsaUJBQU0sQ0FBQyxZQUFZLENBQUMsbUJBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUM3RCxNQUFNLGNB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QUksRUFBRTtnQkFDNUMsRUFBRSxFQUFFLFlBQVk7Z0JBQ2hCLElBQUksRUFBRSxVQUFVO2dCQUNoQixJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDckIsWUFBWSxFQUFFLEVBQUUsb0JBQW9CLEVBQUU7Z0JBQ3RDLHlCQUF5QixFQUFFLGFBQWE7YUFDekMsQ0FBQyxDQUFDO1lBRUgsWUFBWSxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUN6QyxzQkFBc0IsRUFBRSxDQUFDO1lBQ3pCLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1lBRXpELE1BQU0sZ0JBQU0sQ0FBQyxPQUFPLENBQ2xCLEdBQUcsRUFBRSxDQUNILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDcEIsUUFBUSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFO2dCQUN4RSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUMxQyxNQUFNLEVBQUUsTUFBbUQ7YUFDNUQsQ0FBQyxFQUNKLGlEQUFpRCxDQUNsRCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdub2RlOmFzc2VydC9zdHJpY3QnO1xuXG5pbXBvcnQgbm9jayA9IHJlcXVpcmUoJ25vY2snKTtcbmltcG9ydCB7IGZpeGVkU2NyaXB0V2FsbGV0LCBCSVAzMiwgbWVzc2FnZSB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgdGVzdHV0aWwgfSBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgY29tbW9uLCBXYWxsZXQgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgZ2V0U2VlZCB9IGZyb20gJ0BiaXRnby9zZGstdGVzdCc7XG5cbmltcG9ydCB7IGV4cGxhaW5Qc2J0V2FzbSB9IGZyb20gJy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdCc7XG5pbXBvcnQgeyBBZGRyZXNzQ29kZWMgfSBmcm9tICcuLi8uLi9zcmMvdHJhbnNhY3Rpb24vcmVjaXBpZW50JztcbmltcG9ydCB7IHZlcmlmeUtleVNpZ25hdHVyZSB9IGZyb20gJy4uLy4uL3NyYy92ZXJpZnlLZXknO1xuXG5pbXBvcnQgeyBkZWZhdWx0Qml0R28sIGdldFV0eG9Db2luIH0gZnJvbSAnLi91dGlsJztcblxuZnVuY3Rpb24gZXhwbGFpblBzYnQoXG4gIHBzYnQ6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCxcbiAgd2FsbGV0S2V5czogdXR4b2xpYi5iaXRnby5Sb290V2FsbGV0S2V5cyxcbiAgY3VzdG9tQ2hhbmdlV2FsbGV0S2V5czogdXR4b2xpYi5iaXRnby5Sb290V2FsbGV0S2V5cyB8IHVuZGVmaW5lZFxuKSB7XG4gIHJldHVybiBleHBsYWluUHNidFdhc20ocHNidCwgZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMuZnJvbSh3YWxsZXRLZXlzKSwge1xuICAgIGFkZHJlc3NDb2RlYzogbmV3IEFkZHJlc3NDb2RlYygnYnRjJyksXG4gICAgcmVwbGF5UHJvdGVjdGlvbjogeyBwdWJsaWNLZXlzOiBbXSB9LFxuICAgIGN1c3RvbUNoYW5nZVdhbGxldFhwdWJzOiBjdXN0b21DaGFuZ2VXYWxsZXRLZXlzXG4gICAgICA/IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLmZyb20oY3VzdG9tQ2hhbmdlV2FsbGV0S2V5cylcbiAgICAgIDogdW5kZWZpbmVkLFxuICB9KTtcbn1cblxuZGVzY3JpYmUoJ0N1c3RvbSBDaGFuZ2UgV2FsbGV0cycsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgY29pbiA9IGdldFV0eG9Db2luKCdidGMnKTtcbiAgY29uc3QgbmV0d29yayA9IHV0eG9saWIubmV0d29ya3MuYml0Y29pbjtcbiAgY29uc3QgYmdVcmwgPSBjb21tb24uRW52aXJvbm1lbnRzW2RlZmF1bHRCaXRHby5nZXRFbnYoKV0udXJpO1xuICBjb25zdCByb290V2FsbGV0S2V5cyA9IHRlc3R1dGlsLmdldERlZmF1bHRXYWxsZXRLZXlzKCk7XG4gIGNvbnN0IGN1c3RvbUNoYW5nZVdhbGxldEtleXMgPSB0ZXN0dXRpbC5nZXRXYWxsZXRLZXlzRm9yU2VlZCgnY3VzdG9tIGNoYW5nZScpO1xuICBjb25zdCB1c2VyUHJpdmF0ZUtleSA9IEJJUDMyLmZyb21CYXNlNTgocm9vdFdhbGxldEtleXMudHJpcGxlWzBdLnRvQmFzZTU4KCkpLnByaXZhdGVLZXkhO1xuXG4gIGNvbnN0IG1haW5LZXlJZHMgPSByb290V2FsbGV0S2V5cy50cmlwbGUubWFwKChrKSA9PiBnZXRTZWVkKGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKS50b1N0cmluZygnaGV4JykpO1xuICBjb25zdCBjdXN0b21DaGFuZ2VLZXlJZHMgPSBjdXN0b21DaGFuZ2VXYWxsZXRLZXlzLnRyaXBsZS5tYXAoKGspID0+IGdldFNlZWQoay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpLnRvU3RyaW5nKCdoZXgnKSk7XG4gIGNvbnN0IGN1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgKFsndXNlcicsICdiYWNrdXAnLCAnYml0Z28nXSBhcyBjb25zdCkubWFwKChuYW1lLCBpKSA9PiBbXG4gICAgICBuYW1lLFxuICAgICAgQnVmZmVyLmZyb20obWVzc2FnZS5zaWduTWVzc2FnZShjdXN0b21DaGFuZ2VXYWxsZXRLZXlzLnRyaXBsZVtpXS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCksIHVzZXJQcml2YXRlS2V5KSkudG9TdHJpbmcoXG4gICAgICAgICdoZXgnXG4gICAgICApLFxuICAgIF0pXG4gICkgYXMgUmVjb3JkPCd1c2VyJyB8ICdiYWNrdXAnIHwgJ2JpdGdvJywgc3RyaW5nPjtcblxuICBjb25zdCBpbnB1dHM6IHRlc3R1dGlsLklucHV0W10gPSBbeyBzY3JpcHRUeXBlOiAncDJzaCcsIHZhbHVlOiBCaWdJbnQoMTAwMDApIH1dO1xuICBjb25zdCBvdXRwdXRzOiB0ZXN0dXRpbC5PdXRwdXRbXSA9IFtcbiAgICAvLyByZWd1bGFyIGNoYW5nZSAodXNlcyByb290V2FsbGV0S2V5cyB2aWEgZGVmYXVsdClcbiAgICB7IHNjcmlwdFR5cGU6ICdwMnNoJywgdmFsdWU6IEJpZ0ludCgzMDAwKSB9LFxuICAgIC8vIGN1c3RvbSBjaGFuZ2UgKGJpcDMyRGVyaXZhdGlvbiBmcm9tIGN1c3RvbUNoYW5nZVdhbGxldEtleXMsIG5vdCBhZGRlZCBhcyBnbG9iYWwgeHB1YnMpXG4gICAgeyBzY3JpcHRUeXBlOiAncDJzaCcsIHZhbHVlOiBCaWdJbnQoMzAwMCksIHdhbGxldEtleXM6IGN1c3RvbUNoYW5nZVdhbGxldEtleXMgfSxcbiAgICAvLyBleHRlcm5hbCAobm8gZGVyaXZhdGlvbiBpbmZvKVxuICAgIHsgc2NyaXB0VHlwZTogJ3Ayc2gnLCB2YWx1ZTogQmlnSW50KDMwMDApLCB3YWxsZXRLZXlzOiBudWxsIH0sXG4gIF07XG5cbiAgY29uc3QgdXR4b2xpYlBzYnQgPSB0ZXN0dXRpbC5jb25zdHJ1Y3RQc2J0KGlucHV0cywgb3V0cHV0cywgbmV0d29yaywgcm9vdFdhbGxldEtleXMsICd1bnNpZ25lZCcsIHtcbiAgICBhZGRHbG9iYWxYUHViczogdHJ1ZSxcbiAgfSk7XG4gIGNvbnN0IHBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuZnJvbUJ5dGVzKHV0eG9saWJQc2J0LnRvQnVmZmVyKCksICdidGMnKTtcblxuICBjb25zdCBleHRlcm5hbEFkZHJlc3MgPSB1dHhvbGliLmFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdCh1dHhvbGliUHNidC50eE91dHB1dHNbMl0uc2NyaXB0LCBuZXR3b3JrKTtcbiAgY29uc3QgY3VzdG9tQ2hhbmdlV2FsbGV0SWQgPSAnY3VzdG9tLWNoYW5nZS13YWxsZXQtaWQnO1xuICBjb25zdCBtYWluV2FsbGV0SWQgPSAnbWFpbi13YWxsZXQtaWQnO1xuXG4gIGZ1bmN0aW9uIG5vY2tLZXlGZXRjaChrZXlJZHM6IHN0cmluZ1tdLCBrZXlzOiB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzKTogbm9jay5TY29wZVtdIHtcbiAgICByZXR1cm4ga2V5SWRzLm1hcCgoaWQsIGkpID0+XG4gICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHtjb2luLmdldENoYWluKCl9L2tleS8ke2lkfWApLnJlcGx5KDIwMCwgeyBwdWI6IGtleXMudHJpcGxlW2ldLm5ldXRlcmVkKCkudG9CYXNlNTgoKSB9KVxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBub2NrQ3VzdG9tQ2hhbmdlV2FsbGV0KCk6IG5vY2suU2NvcGUge1xuICAgIHJldHVybiBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHtjb2luLmdldENoYWluKCl9L3dhbGxldC8ke2N1c3RvbUNoYW5nZVdhbGxldElkfWApLnJlcGx5KDIwMCwge1xuICAgICAgaWQ6IGN1c3RvbUNoYW5nZVdhbGxldElkLFxuICAgICAga2V5czogY3VzdG9tQ2hhbmdlS2V5SWRzLFxuICAgICAgY29pbjogY29pbi5nZXRDaGFpbigpLFxuICAgIH0pO1xuICB9XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IG5vY2suY2xlYW5BbGwoKSk7XG5cbiAgaXQoJ2NsYXNzaWZpZXMgY3VzdG9tIGNoYW5nZSBvdXRwdXQgd2hlbiBjdXN0b21DaGFuZ2VQdWJzIGlzIHByb3ZpZGVkJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGV4cGxhbmF0aW9uID0gZXhwbGFpblBzYnQocHNidCwgcm9vdFdhbGxldEtleXMsIGN1c3RvbUNoYW5nZVdhbGxldEtleXMpO1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4cGxhbmF0aW9uLmNoYW5nZU91dHB1dHMubGVuZ3RoLCAxKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXhwbGFuYXRpb24uY2hhbmdlT3V0cHV0c1swXS5hbW91bnQsICczMDAwJyk7XG5cbiAgICBhc3NlcnQub2soZXhwbGFuYXRpb24uY3VzdG9tQ2hhbmdlT3V0cHV0cyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4cGxhbmF0aW9uLmN1c3RvbUNoYW5nZU91dHB1dHMubGVuZ3RoLCAxKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXhwbGFuYXRpb24uY3VzdG9tQ2hhbmdlT3V0cHV0c1swXS5hbW91bnQsICczMDAwJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4cGxhbmF0aW9uLmN1c3RvbUNoYW5nZUFtb3VudCwgJzMwMDAnKTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYW5hdGlvbi5vdXRwdXRzLmxlbmd0aCwgMSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4cGxhbmF0aW9uLm91dHB1dHNbMF0uYW1vdW50LCAnMzAwMCcpO1xuICB9KTtcblxuICBpdCgnY2xhc3NpZmllcyBjdXN0b20gY2hhbmdlIG91dHB1dCBhcyBleHRlcm5hbCB3aXRob3V0IGN1c3RvbUNoYW5nZVB1YnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZXhwbGFuYXRpb24gPSBleHBsYWluUHNidChwc2J0LCByb290V2FsbGV0S2V5cywgdW5kZWZpbmVkKTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYW5hdGlvbi5jaGFuZ2VPdXRwdXRzLmxlbmd0aCwgMSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4cGxhbmF0aW9uLmNoYW5nZU91dHB1dHNbMF0uYW1vdW50LCAnMzAwMCcpO1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4cGxhbmF0aW9uLmN1c3RvbUNoYW5nZU91dHB1dHM/Lmxlbmd0aCA/PyAwLCAwKTtcblxuICAgIC8vIGN1c3RvbSBjaGFuZ2UgKyBleHRlcm5hbCBib3RoIHRyZWF0ZWQgYXMgZXh0ZXJuYWwgb3V0cHV0c1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYW5hdGlvbi5vdXRwdXRzLmxlbmd0aCwgMik7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZmllcyB2YWxpZCBjdXN0b20gY2hhbmdlIGtleSBzaWduYXR1cmVzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHVzZXJQdWIgPSByb290V2FsbGV0S2V5cy50cmlwbGVbMF0ubmV1dGVyZWQoKS50b0Jhc2U1OCgpO1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgY3VzdG9tQ2hhbmdlV2FsbGV0S2V5cy50cmlwbGUpIHtcbiAgICAgIGNvbnN0IHB1YiA9IGtleS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCk7XG4gICAgICBjb25zdCBzaWduYXR1cmUgPSBCdWZmZXIuZnJvbShtZXNzYWdlLnNpZ25NZXNzYWdlKHB1YiwgdXNlclByaXZhdGVLZXkpKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBhc3NlcnQub2soXG4gICAgICAgIHZlcmlmeUtleVNpZ25hdHVyZSh7IHVzZXJLZXljaGFpbjogeyBwdWI6IHVzZXJQdWIgfSwga2V5Y2hhaW5Ub1ZlcmlmeTogeyBwdWIgfSwga2V5U2lnbmF0dXJlOiBzaWduYXR1cmUgfSlcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICBpdCgncmVqZWN0cyBpbnZhbGlkIGN1c3RvbSBjaGFuZ2Uga2V5IHNpZ25hdHVyZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgd3JvbmdLZXkgPSBCSVAzMi5mcm9tQmFzZTU4KHRlc3R1dGlsLmdldFdhbGxldEtleXNGb3JTZWVkKCd3cm9uZycpLnRyaXBsZVswXS50b0Jhc2U1OCgpKTtcbiAgICBjb25zdCB1c2VyUHViID0gcm9vdFdhbGxldEtleXMudHJpcGxlWzBdLm5ldXRlcmVkKCkudG9CYXNlNTgoKTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGN1c3RvbUNoYW5nZVdhbGxldEtleXMudHJpcGxlKSB7XG4gICAgICBjb25zdCBwdWIgPSBrZXkubmV1dGVyZWQoKS50b0Jhc2U1OCgpO1xuICAgICAgY29uc3QgYmFkU2lnbmF0dXJlID0gQnVmZmVyLmZyb20obWVzc2FnZS5zaWduTWVzc2FnZShwdWIsIHdyb25nS2V5LnByaXZhdGVLZXkhKSkudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgICB2ZXJpZnlLZXlTaWduYXR1cmUoeyB1c2VyS2V5Y2hhaW46IHsgcHViOiB1c2VyUHViIH0sIGtleWNoYWluVG9WZXJpZnk6IHsgcHViIH0sIGtleVNpZ25hdHVyZTogYmFkU2lnbmF0dXJlIH0pLFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdwYXJzZVRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdmZXRjaGVzIGN1c3RvbSBjaGFuZ2Ugd2FsbGV0IGtleXMgYW5kIHZlcmlmaWVzIHNpZ25hdHVyZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGRlZmF1bHRCaXRHbywgY29pbiwge1xuICAgICAgICBpZDogbWFpbldhbGxldElkLFxuICAgICAgICBrZXlzOiBtYWluS2V5SWRzLFxuICAgICAgICBjb2luOiBjb2luLmdldENoYWluKCksXG4gICAgICAgIGNvaW5TcGVjaWZpYzogeyBjdXN0b21DaGFuZ2VXYWxsZXRJZCB9LFxuICAgICAgICBjdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVzLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG5vY2tzID0gW1xuICAgICAgICAuLi5ub2NrS2V5RmV0Y2gobWFpbktleUlkcywgcm9vdFdhbGxldEtleXMpLFxuICAgICAgICBub2NrQ3VzdG9tQ2hhbmdlV2FsbGV0KCksXG4gICAgICAgIC4uLm5vY2tLZXlGZXRjaChjdXN0b21DaGFuZ2VLZXlJZHMsIGN1c3RvbUNoYW5nZVdhbGxldEtleXMpLFxuICAgICAgXTtcblxuICAgICAgY29uc3QgcGFyc2VkID0gYXdhaXQgY29pbi5wYXJzZVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogZXh0ZXJuYWxBZGRyZXNzLCBhbW91bnQ6ICczMDAwJyB9XSB9LFxuICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4OiB1dHhvbGliUHNidC50b0hleCgpIH0sXG4gICAgICAgIHdhbGxldDogd2FsbGV0IGFzIHVua25vd24gYXMgaW1wb3J0KCcuLi8uLi9zcmMnKS5VdHhvV2FsbGV0LFxuICAgICAgfSk7XG5cbiAgICAgIGZvciAoY29uc3QgbiBvZiBub2NrcykgYXNzZXJ0Lm9rKG4uaXNEb25lKCkpO1xuXG4gICAgICBhc3NlcnQub2socGFyc2VkLmN1c3RvbUNoYW5nZSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyc2VkLmN1c3RvbUNoYW5nZS5rZXlzLmxlbmd0aCwgMyk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyc2VkLmN1c3RvbUNoYW5nZS5rZXlzW2ldLnB1YiwgY3VzdG9tQ2hhbmdlV2FsbGV0S2V5cy50cmlwbGVbaV0ubmV1dGVyZWQoKS50b0Jhc2U1OCgpKTtcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlZC5leHBsaWNpdEV4dGVybmFsT3V0cHV0cy5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlZC5leHBsaWNpdEV4dGVybmFsT3V0cHV0c1swXS5hbW91bnQsICczMDAwJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFzIG5vIGN1c3RvbSBjaGFuZ2Ugd2hlbiB3YWxsZXQgbGFja3MgY3VzdG9tQ2hhbmdlV2FsbGV0SWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGRlZmF1bHRCaXRHbywgY29pbiwge1xuICAgICAgICBpZDogbWFpbldhbGxldElkLFxuICAgICAgICBrZXlzOiBtYWluS2V5SWRzLFxuICAgICAgICBjb2luOiBjb2luLmdldENoYWluKCksXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgbm9ja3MgPSBub2NrS2V5RmV0Y2gobWFpbktleUlkcywgcm9vdFdhbGxldEtleXMpO1xuXG4gICAgICBjb25zdCBwYXJzZWQgPSBhd2FpdCBjb2luLnBhcnNlVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczogeyByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiBleHRlcm5hbEFkZHJlc3MsIGFtb3VudDogJzMwMDAnIH1dIH0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXg6IHV0eG9saWJQc2J0LnRvSGV4KCkgfSxcbiAgICAgICAgd2FsbGV0OiB3YWxsZXQgYXMgdW5rbm93biBhcyBpbXBvcnQoJy4uLy4uL3NyYycpLlV0eG9XYWxsZXQsXG4gICAgICB9KTtcblxuICAgICAgZm9yIChjb25zdCBuIG9mIG5vY2tzKSBhc3NlcnQub2sobi5pc0RvbmUoKSk7XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQuY3VzdG9tQ2hhbmdlLCB1bmRlZmluZWQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlZC5uZWVkc0N1c3RvbUNoYW5nZUtleVNpZ25hdHVyZVZlcmlmaWNhdGlvbiwgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgaW52YWxpZCBjdXN0b20gY2hhbmdlIGtleSBzaWduYXR1cmVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd3JvbmdLZXkgPSBCSVAzMi5mcm9tQmFzZTU4KHRlc3R1dGlsLmdldFdhbGxldEtleXNGb3JTZWVkKCd3cm9uZycpLnRyaXBsZVswXS50b0Jhc2U1OCgpKTtcbiAgICAgIGNvbnN0IGJhZFNpZ25hdHVyZXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIChbJ3VzZXInLCAnYmFja3VwJywgJ2JpdGdvJ10gYXMgY29uc3QpLm1hcCgobmFtZSwgaSkgPT4gW1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgQnVmZmVyLmZyb20oXG4gICAgICAgICAgICBtZXNzYWdlLnNpZ25NZXNzYWdlKGN1c3RvbUNoYW5nZVdhbGxldEtleXMudHJpcGxlW2ldLm5ldXRlcmVkKCkudG9CYXNlNTgoKSwgd3JvbmdLZXkucHJpdmF0ZUtleSEpXG4gICAgICAgICAgKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIF0pXG4gICAgICApIGFzIFJlY29yZDwndXNlcicgfCAnYmFja3VwJyB8ICdiaXRnbycsIHN0cmluZz47XG5cbiAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQoZGVmYXVsdEJpdEdvLCBjb2luLCB7XG4gICAgICAgIGlkOiBtYWluV2FsbGV0SWQsXG4gICAgICAgIGtleXM6IG1haW5LZXlJZHMsXG4gICAgICAgIGNvaW46IGNvaW4uZ2V0Q2hhaW4oKSxcbiAgICAgICAgY29pblNwZWNpZmljOiB7IGN1c3RvbUNoYW5nZVdhbGxldElkIH0sXG4gICAgICAgIGN1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXM6IGJhZFNpZ25hdHVyZXMsXG4gICAgICB9KTtcblxuICAgICAgbm9ja0tleUZldGNoKG1haW5LZXlJZHMsIHJvb3RXYWxsZXRLZXlzKTtcbiAgICAgIG5vY2tDdXN0b21DaGFuZ2VXYWxsZXQoKTtcbiAgICAgIG5vY2tLZXlGZXRjaChjdXN0b21DaGFuZ2VLZXlJZHMsIGN1c3RvbUNoYW5nZVdhbGxldEtleXMpO1xuXG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBjb2luLnBhcnNlVHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdHhQYXJhbXM6IHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogZXh0ZXJuYWxBZGRyZXNzLCBhbW91bnQ6ICczMDAwJyB9XSB9LFxuICAgICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleDogdXR4b2xpYlBzYnQudG9IZXgoKSB9LFxuICAgICAgICAgICAgd2FsbGV0OiB3YWxsZXQgYXMgdW5rbm93biBhcyBpbXBvcnQoJy4uLy4uL3NyYycpLlV0eG9XYWxsZXQsXG4gICAgICAgICAgfSksXG4gICAgICAgIC9mYWlsZWQgdG8gdmVyaWZ5IGN1c3RvbSBjaGFuZ2UgLioga2V5IHNpZ25hdHVyZS9cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"descriptorAddress.d.ts","sourceRoot":"","sources":["../../../../test/unit/descriptorAddress.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0B,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"descriptorAddress.d.ts","sourceRoot":"","sources":["../../../../test/unit/descriptorAddress.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0B,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAUpE,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAGzF"}
|
|
@@ -38,11 +38,20 @@ const assert = __importStar(require("node:assert"));
|
|
|
38
38
|
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
39
39
|
const testutils = __importStar(require("@bitgo/wasm-utxo/testutils"));
|
|
40
40
|
const src_1 = require("../../src");
|
|
41
|
+
const btc_1 = require("../../src/impl/btc");
|
|
41
42
|
const util_1 = require("./util");
|
|
42
43
|
function getDescriptorAddress(d, index, coinName) {
|
|
43
44
|
const derivedScript = src_1.descriptor.Descriptor.fromString(d, 'derivable').atDerivationIndex(index).scriptPubkey();
|
|
44
45
|
return wasm_utxo_1.address.fromOutputScriptWithCoin(derivedScript, coinName);
|
|
45
46
|
}
|
|
47
|
+
class RegtestTbtc extends btc_1.Tbtc {
|
|
48
|
+
constructor() {
|
|
49
|
+
super(util_1.defaultBitGo);
|
|
50
|
+
}
|
|
51
|
+
get wasmName() {
|
|
52
|
+
return 'tbtcreg';
|
|
53
|
+
}
|
|
54
|
+
}
|
|
46
55
|
describe('descriptor wallets', function () {
|
|
47
56
|
const coin = (0, util_1.getUtxoCoin)('tbtc');
|
|
48
57
|
const xpubs = testutils.getKeyTriple('setec astronomy').map((k) => k.neutered().toBase58());
|
|
@@ -65,9 +74,9 @@ describe('descriptor wallets', function () {
|
|
|
65
74
|
}
|
|
66
75
|
const descFoo = getNamedDescriptor2Of2('foo', xpubs[0], xpubs[1]);
|
|
67
76
|
const descBar = getNamedDescriptor2Of2('bar', xpubs[1], xpubs[0]);
|
|
68
|
-
const addressFoo0 = getDescriptorAddress(descFoo.value, 0, coin.
|
|
69
|
-
const addressFoo1 = getDescriptorAddress(descFoo.value, 1, coin.
|
|
70
|
-
const addressBar0 = getDescriptorAddress(descBar.value, 0, coin.
|
|
77
|
+
const addressFoo0 = getDescriptorAddress(descFoo.value, 0, coin.wasmName);
|
|
78
|
+
const addressFoo1 = getDescriptorAddress(descFoo.value, 1, coin.wasmName);
|
|
79
|
+
const addressBar0 = getDescriptorAddress(descBar.value, 0, coin.wasmName);
|
|
71
80
|
it('has expected values', function () {
|
|
72
81
|
assert.deepStrictEqual([addressFoo0, addressFoo1, addressBar0], [
|
|
73
82
|
'2N9b1trWxMJN16mTzGJypFn6pEWfXtgh689',
|
|
@@ -99,5 +108,16 @@ describe('descriptor wallets', function () {
|
|
|
99
108
|
runTestIsAddress(addressFoo1, 0, 'foo', descFoo.value.slice(-8), /Address mismatch for descriptor/);
|
|
100
109
|
runTestIsAddress(addressBar0, 0, 'bar', descFoo.value.slice(-8), /Descriptor checksum mismatch/);
|
|
101
110
|
runTestIsAddress(addressFoo0, 0, 'bar', descBar.value.slice(-8), /Address mismatch for descriptor/);
|
|
111
|
+
it('uses the coin address codec for descriptor wallet addresses', async function () {
|
|
112
|
+
const regtestCoin = new RegtestTbtc();
|
|
113
|
+
const address = getDescriptorAddress(descFoo.value, 0, regtestCoin.wasmName);
|
|
114
|
+
const wallet = getIWalletWithDescriptors([descFoo, descBar]);
|
|
115
|
+
assert.strictEqual(await regtestCoin.isWalletAddress({
|
|
116
|
+
address,
|
|
117
|
+
index: 0,
|
|
118
|
+
coinSpecific: { descriptorName: 'foo', descriptorChecksum: descFoo.value.slice(-8) },
|
|
119
|
+
keychains: xpubs.map((pub) => ({ pub })),
|
|
120
|
+
}, wallet), true);
|
|
121
|
+
});
|
|
102
122
|
});
|
|
103
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpcHRvckFkZHJlc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvZGVzY3JpcHRvckFkZHJlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVQSxvREFHQztBQWJELG9EQUFzQztBQUV0QyxnREFBb0U7QUFDcEUsc0VBQXdEO0FBR3hELG1DQUFnRDtBQUVoRCxpQ0FBcUM7QUFFckMsU0FBZ0Isb0JBQW9CLENBQUMsQ0FBUyxFQUFFLEtBQWEsRUFBRSxRQUFrQjtJQUMvRSxNQUFNLGFBQWEsR0FBRyxnQkFBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFHLE9BQU8sbUJBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDdkUsQ0FBQztBQUVELFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtJQUM3QixNQUFNLElBQUksR0FBRyxJQUFBLGtCQUFXLEVBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFFNUYsU0FBUyxZQUFZLENBQUMsVUFBa0I7UUFDdEMsT0FBTyxnQkFBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3pFLENBQUM7SUFFRCxTQUFTLHNCQUFzQixDQUFDLElBQVksRUFBRSxDQUFTLEVBQUUsQ0FBUztRQUNoRSxPQUFPO1lBQ0wsSUFBSTtZQUNKLEtB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RUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSw4QkFBOEIsQ0FBQyxDQUFDO0lBQ2pHLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztBQUN0RyxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdub2RlOmFzc2VydCc7XG5cbmltcG9ydCB7IGFkZHJlc3MgYXMgd2FzbUFkZHJlc3MsIENvaW5OYW1lIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgKiBhcyB0ZXN0dXRpbHMgZnJvbSAnQGJpdGdvL3dhc20tdXR4by90ZXN0dXRpbHMnO1xuaW1wb3J0IHsgSVdhbGxldCwgV2FsbGV0Q29pblNwZWNpZmljIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgZGVzY3JpcHRvciBhcyB1dHhvZCB9IGZyb20gJy4uLy4uL3NyYyc7XG5cbmltcG9ydCB7IGdldFV0eG9Db2luIH0gZnJvbSAnLi91dGlsJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlc2NyaXB0b3JBZGRyZXNzKGQ6IHN0cmluZywgaW5kZXg6IG51bWJlciwgY29pbk5hbWU6IENvaW5OYW1lKTogc3RyaW5nIHtcbiAgY29uc3QgZGVyaXZlZFNjcmlwdCA9IHV0eG9kLkRlc2NyaXB0b3IuZnJvbVN0cmluZyhkLCAnZGVyaXZhYmxlJykuYXREZXJpdmF0aW9uSW5kZXgoaW5kZXgpLnNjcmlwdFB1YmtleSgpO1xuICByZXR1cm4gd2FzbUFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdFdpdGhDb2luKGRlcml2ZWRTY3JpcHQsIGNvaW5OYW1lKTtcbn1cblxuZGVzY3JpYmUoJ2Rlc2NyaXB0b3Igd2FsbGV0cycsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgY29pbiA9IGdldFV0eG9Db2luKCd0YnRjJyk7XG4gIGNvbnN0IHhwdWJzID0gdGVzdHV0aWxzLmdldEtleVRyaXBsZSgnc2V0ZWMgYXN0cm9ub215JykubWFwKChrKSA9PiBrLm5ldXRlcmVkKCkudG9CYXNlNTgoKSk7XG5cbiAgZnVuY3Rpb24gd2l0aENoZWNrc3VtKGRlc2NyaXB0b3I6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHV0eG9kLkRlc2NyaXB0b3IuZnJvbVN0cmluZyhkZXNjcmlwdG9yLCAnZGVyaXZhYmxlJykudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE5hbWVkRGVzY3JpcHRvcjJPZjIobmFtZTogc3RyaW5nLCBhOiBzdHJpbmcsIGI6IHN0cmluZyk6IHV0eG9kLk5hbWVkRGVzY3JpcHRvciB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWUsXG4gICAgICB2YWx1ZTogd2l0aENoZWNrc3VtKGBzaChtdWx0aSgyLCR7YX0vKiwke2J9LyopKWApLFxuICAgICAgc2lnbmF0dXJlczogW10sXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldElXYWxsZXRXaXRoRGVzY3JpcHRvcnMoZGVzY3JpcHRvcnM6IHV0eG9kLk5hbWVkRGVzY3JpcHRvcltdKTogSVdhbGxldCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvaW5TcGVjaWZpYygpIHtcbiAgICAgICAgcmV0dXJuIHsgZGVzY3JpcHRvcnMgfSBhcyB1bmtub3duIGFzIFdhbGxldENvaW5TcGVjaWZpYztcbiAgICAgIH0sXG4gICAgfSBhcyBJV2FsbGV0O1xuICB9XG5cbiAgY29uc3QgZGVzY0ZvbyA9IGdldE5hbWVkRGVzY3JpcHRvcjJPZjIoJ2ZvbycsIHhwdWJzWzBdLCB4cHVic1sxXSk7XG4gIGNvbnN0IGRlc2NCYXIgPSBnZXROYW1lZERlc2NyaXB0b3IyT2YyKCdiYXInLCB4cHVic1sxXSwgeHB1YnNbMF0pO1xuICBjb25zdCBhZGRyZXNzRm9vMCA9IGdldERlc2NyaXB0b3JBZGRyZXNzKGRlc2NGb28udmFsdWUsIDAsIGNvaW4ubmFtZSk7XG4gIGNvbnN0IGFkZHJlc3NGb28xID0gZ2V0RGVzY3JpcHRvckFkZHJlc3MoZGVzY0Zvby52YWx1ZSwgMSwgY29pbi5uYW1lKTtcbiAgY29uc3QgYWRkcmVzc0JhcjAgPSBnZXREZXNjcmlwdG9yQWRkcmVzcyhkZXNjQmFyLnZhbHVlLCAwLCBjb2luLm5hbWUpO1xuXG4gIGl0KCdoYXMgZXhwZWN0ZWQgdmFsdWVzJywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoXG4gICAgICBbYWRkcmVzc0ZvbzAsIGFkZHJlc3NGb28xLCBhZGRyZXNzQmFyMF0sXG4gICAgICBbXG4gICAgICAgICcyTjliMXRyV3hNSk4xNm1UekdKeXBGbjZwRVdmWHRnaDY4OScsXG4gICAgICAgICcyTjFZRnpqNEVDemNqdXJ1YUV2U3pHYUdHSDF0b3BNWE1YWicsXG4gICAgICAgICcyTjlvTjVLYzJmTHQyTXJ4RWt1UVBzeThGZzJLZHJGZmVLSCcsXG4gICAgICBdXG4gICAgKTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gcnVuVGVzdElzQWRkcmVzcyhcbiAgICBhZGRyZXNzOiBzdHJpbmcsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBkZXNjcmlwdG9yTmFtZTogc3RyaW5nLFxuICAgIGRlc2NyaXB0b3JDaGVja3N1bTogc3RyaW5nLFxuICAgIGV4cGVjdGVkOiB0cnVlIHwgRXJyb3IgfCBSZWdFeHBcbiAgKSB7XG4gICAgaXQoYHNob3VsZCByZXR1cm4gJHtleHBlY3RlZH0gZm9yIGFkZHJlc3MgJHthZGRyZXNzfSB3aXRoIGluZGV4ICR7aW5kZXh9IGFuZCBkZXNjcmlwdG9yICR7ZGVzY3JpcHRvck5hbWV9IHdpdGggY2hlY2tzdW0gJHtkZXNjcmlwdG9yQ2hlY2tzdW19YCwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gZ2V0SVdhbGxldFdpdGhEZXNjcmlwdG9ycyhbZGVzY0ZvbywgZGVzY0Jhcl0pO1xuICAgICAgYXN5bmMgZnVuY3Rpb24gZigpIHtcbiAgICAgICAgcmV0dXJuIGNvaW4uaXNXYWxsZXRBZGRyZXNzKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIGNvaW5TcGVjaWZpYzogeyBkZXNjcmlwdG9yTmFtZSwgZGVzY3JpcHRvckNoZWNrc3VtIH0sXG4gICAgICAgICAgICBrZXljaGFpbnM6IHhwdWJzLm1hcCgocHViKSA9PiAoeyBwdWIgfSkpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgd2FsbGV0XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoZXhwZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgYXNzZXJ0LmVxdWFsKGF3YWl0IGYoKSwgZXhwZWN0ZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYmVjYXVzZSBpc1dhbGxldEFkZHJlc3MgaXMgc3R1cGlkIGl0IGFjdHVhbGx5IHRocm93cyBpbnN0ZWFkIG9mIHJldHVybmluZyBmYWxzZVxuICAgICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhmLCBleHBlY3RlZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBydW5UZXN0SXNBZGRyZXNzKGFkZHJlc3NGb28wLCAwLCAnZm9vJywgZGVzY0Zvby52YWx1ZS5zbGljZSgtOCksIHRydWUpO1xuICBydW5UZXN0SXNBZGRyZXNzKGFkZHJlc3NGb28xLCAwLCAnZm9vJywgZGVzY0Zvby52YWx1ZS5zbGljZSgtOCksIC9BZGRyZXNzIG1pc21hdGNoIGZvciBkZXNjcmlwdG9yLyk7XG4gIHJ1blRlc3RJc0FkZHJlc3MoYWRkcmVzc0JhcjAsIDAsICdiYXInLCBkZXNjRm9vLnZhbHVlLnNsaWNlKC04KSwgL0Rlc2NyaXB0b3IgY2hlY2tzdW0gbWlzbWF0Y2gvKTtcbiAgcnVuVGVzdElzQWRkcmVzcyhhZGRyZXNzRm9vMCwgMCwgJ2JhcicsIGRlc2NCYXIudmFsdWUuc2xpY2UoLTgpLCAvQWRkcmVzcyBtaXNtYXRjaCBmb3IgZGVzY3JpcHRvci8pO1xufSk7XG4iXX0=
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpcHRvckFkZHJlc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvZGVzY3JpcHRvckFkZHJlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZQSxvREFHQztBQWZELG9EQUFzQztBQUV0QyxnREFBb0U7QUFDcEUsc0VBQXdEO0FBR3hELG1DQUFnRDtBQUNoRCw0Q0FBMEM7QUFHMUMsaUNBQW1EO0FBRW5ELFNBQWdCLG9CQUFvQixDQUFDLENBQVMsRUFBRSxLQUFhLEVBQUUsUUFBa0I7SUFDL0UsTUFBTSxhQUFhLEdBQUcsZ0JBQUssQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxRyxPQUFPLG1CQUFXLENBQUMsd0JBQXdCLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFFRCxNQUFNLFdBQVksU0FBUSxVQUFJO0lBQzVCO1FBQ0UsS0FBSyxDQUFDLG1CQUFZLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBYSxRQUFRO1FBQ25CLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7Q0FDRjtBQUVELFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtJQUM3QixNQUFNLElBQUksR0FBRyxJQUFBLGtCQUFXLEVBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFFNUYsU0FBUyxZQUFZLENBQUMsVUFBa0I7UUFDdEMsT0FBTyxnQkFBSyxDQUFDLFVBQVUsQ0FB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QztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0JztcblxuaW1wb3J0IHsgYWRkcmVzcyBhcyB3YXNtQWRkcmVzcywgQ29pbk5hbWUgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcbmltcG9ydCAqIGFzIHRlc3R1dGlscyBmcm9tICdAYml0Z28vd2FzbS11dHhvL3Rlc3R1dGlscyc7XG5pbXBvcnQgeyBJV2FsbGV0LCBXYWxsZXRDb2luU3BlY2lmaWMgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuXG5pbXBvcnQgeyBkZXNjcmlwdG9yIGFzIHV0eG9kIH0gZnJvbSAnLi4vLi4vc3JjJztcbmltcG9ydCB7IFRidGMgfSBmcm9tICcuLi8uLi9zcmMvaW1wbC9idGMnO1xuaW1wb3J0IHR5cGUgeyBXYXNtVXR4b0NvaW5OYW1lIH0gZnJvbSAnLi4vLi4vc3JjL25hbWVzJztcblxuaW1wb3J0IHsgZGVmYXVsdEJpdEdvLCBnZXRVdHhvQ29pbiB9IGZyb20gJy4vdXRpbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXNjcmlwdG9yQWRkcmVzcyhkOiBzdHJpbmcsIGluZGV4OiBudW1iZXIsIGNvaW5OYW1lOiBDb2luTmFtZSk6IHN0cmluZyB7XG4gIGNvbnN0IGRlcml2ZWRTY3JpcHQgPSB1dHhvZC5EZXNjcmlwdG9yLmZyb21TdHJpbmcoZCwgJ2Rlcml2YWJsZScpLmF0RGVyaXZhdGlvbkluZGV4KGluZGV4KS5zY3JpcHRQdWJrZXkoKTtcbiAgcmV0dXJuIHdhc21BZGRyZXNzLmZyb21PdXRwdXRTY3JpcHRXaXRoQ29pbihkZXJpdmVkU2NyaXB0LCBjb2luTmFtZSk7XG59XG5cbmNsYXNzIFJlZ3Rlc3RUYnRjIGV4dGVuZHMgVGJ0YyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKGRlZmF1bHRCaXRHbyk7XG4gIH1cblxuICBvdmVycmlkZSBnZXQgd2FzbU5hbWUoKTogV2FzbVV0eG9Db2luTmFtZSB7XG4gICAgcmV0dXJuICd0YnRjcmVnJztcbiAgfVxufVxuXG5kZXNjcmliZSgnZGVzY3JpcHRvciB3YWxsZXRzJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBjb2luID0gZ2V0VXR4b0NvaW4oJ3RidGMnKTtcbiAgY29uc3QgeHB1YnMgPSB0ZXN0dXRpbHMuZ2V0S2V5VHJpcGxlKCdzZXRlYyBhc3Ryb25vbXknKS5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKTtcblxuICBmdW5jdGlvbiB3aXRoQ2hlY2tzdW0oZGVzY3JpcHRvcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdXR4b2QuRGVzY3JpcHRvci5mcm9tU3RyaW5nKGRlc2NyaXB0b3IsICdkZXJpdmFibGUnKS50b1N0cmluZygpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0TmFtZWREZXNjcmlwdG9yMk9mMihuYW1lOiBzdHJpbmcsIGE6IHN0cmluZywgYjogc3RyaW5nKTogdXR4b2QuTmFtZWREZXNjcmlwdG9yIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZSxcbiAgICAgIHZhbHVlOiB3aXRoQ2hlY2tzdW0oYHNoKG11bHRpKDIsJHthfS8qLCR7Yn0vKikpYCksXG4gICAgICBzaWduYXR1cmVzOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0SVdhbGxldFdpdGhEZXNjcmlwdG9ycyhkZXNjcmlwdG9yczogdXR4b2QuTmFtZWREZXNjcmlwdG9yW10pOiBJV2FsbGV0IHtcbiAgICByZXR1cm4ge1xuICAgICAgY29pblNwZWNpZmljKCkge1xuICAgICAgICByZXR1cm4geyBkZXNjcmlwdG9ycyB9IGFzIHVua25vd24gYXMgV2FsbGV0Q29pblNwZWNpZmljO1xuICAgICAgfSxcbiAgICB9IGFzIElXYWxsZXQ7XG4gIH1cblxuICBjb25zdCBkZXNjRm9vID0gZ2V0TmFtZWREZXNjcmlwdG9yMk9mMignZm9vJywgeHB1YnNbMF0sIHhwdWJzWzFdKTtcbiAgY29uc3QgZGVzY0JhciA9IGdldE5hbWVkRGVzY3JpcHRvcjJPZjIoJ2JhcicsIHhwdWJzWzFdLCB4cHVic1swXSk7XG4gIGNvbnN0IGFkZHJlc3NGb28wID0gZ2V0RGVzY3JpcHRvckFkZHJlc3MoZGVzY0Zvby52YWx1ZSwgMCwgY29pbi53YXNtTmFtZSk7XG4gIGNvbnN0IGFkZHJlc3NGb28xID0gZ2V0RGVzY3JpcHRvckFkZHJlc3MoZGVzY0Zvby52YWx1ZSwgMSwgY29pbi53YXNtTmFtZSk7XG4gIGNvbnN0IGFkZHJlc3NCYXIwID0gZ2V0RGVzY3JpcHRvckFkZHJlc3MoZGVzY0Jhci52YWx1ZSwgMCwgY29pbi53YXNtTmFtZSk7XG5cbiAgaXQoJ2hhcyBleHBlY3RlZCB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChcbiAgICAgIFthZGRyZXNzRm9vMCwgYWRkcmVzc0ZvbzEsIGFkZHJlc3NCYXIwXSxcbiAgICAgIFtcbiAgICAgICAgJzJOOWIxdHJXeE1KTjE2bVR6R0p5cEZuNnBFV2ZYdGdoNjg5JyxcbiAgICAgICAgJzJOMVlGemo0RUN6Y2p1cnVhRXZTekdhR0dIMXRvcE1YTVhaJyxcbiAgICAgICAgJzJOOW9ONUtjMmZMdDJNcnhFa3VRUHN5OEZnMktkckZmZUtIJyxcbiAgICAgIF1cbiAgICApO1xuICB9KTtcblxuICBmdW5jdGlvbiBydW5UZXN0SXNBZGRyZXNzKFxuICAgIGFkZHJlc3M6IHN0cmluZyxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGRlc2NyaXB0b3JOYW1lOiBzdHJpbmcsXG4gICAgZGVzY3JpcHRvckNoZWNrc3VtOiBzdHJpbmcsXG4gICAgZXhwZWN0ZWQ6IHRydWUgfCBFcnJvciB8IFJlZ0V4cFxuICApIHtcbiAgICBpdChgc2hvdWxkIHJldHVybiAke2V4cGVjdGVkfSBmb3IgYWRkcmVzcyAke2FkZHJlc3N9IHdpdGggaW5kZXggJHtpbmRleH0gYW5kIGRlc2NyaXB0b3IgJHtkZXNjcmlwdG9yTmFtZX0gd2l0aCBjaGVja3N1bSAke2Rlc2NyaXB0b3JDaGVja3N1bX1gLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBnZXRJV2FsbGV0V2l0aERlc2NyaXB0b3JzKFtkZXNjRm9vLCBkZXNjQmFyXSk7XG4gICAgICBhc3luYyBmdW5jdGlvbiBmKCkge1xuICAgICAgICByZXR1cm4gY29pbi5pc1dhbGxldEFkZHJlc3MoXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgY29pblNwZWNpZmljOiB7IGRlc2NyaXB0b3JOYW1lLCBkZXNjcmlwdG9yQ2hlY2tzdW0gfSxcbiAgICAgICAgICAgIGtleWNoYWluczogeHB1YnMubWFwKChwdWIpID0+ICh7IHB1YiB9KSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3YWxsZXRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChleHBlY3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgICBhc3NlcnQuZXF1YWwoYXdhaXQgZigpLCBleHBlY3RlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBiZWNhdXNlIGlzV2FsbGV0QWRkcmVzcyBpcyBzdHVwaWQgaXQgYWN0dWFsbHkgdGhyb3dzIGluc3RlYWQgb2YgcmV0dXJuaW5nIGZhbHNlXG4gICAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKGYsIGV4cGVjdGVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJ1blRlc3RJc0FkZHJlc3MoYWRkcmVzc0ZvbzAsIDAsICdmb28nLCBkZXNjRm9vLnZhbHVlLnNsaWNlKC04KSwgdHJ1ZSk7XG4gIHJ1blRlc3RJc0FkZHJlc3MoYWRkcmVzc0ZvbzEsIDAsICdmb28nLCBkZXNjRm9vLnZhbHVlLnNsaWNlKC04KSwgL0FkZHJlc3MgbWlzbWF0Y2ggZm9yIGRlc2NyaXB0b3IvKTtcbiAgcnVuVGVzdElzQWRkcmVzcyhhZGRyZXNzQmFyMCwgMCwgJ2JhcicsIGRlc2NGb28udmFsdWUuc2xpY2UoLTgpLCAvRGVzY3JpcHRvciBjaGVja3N1bSBtaXNtYXRjaC8pO1xuICBydW5UZXN0SXNBZGRyZXNzKGFkZHJlc3NGb28wLCAwLCAnYmFyJywgZGVzY0Jhci52YWx1ZS5zbGljZSgtOCksIC9BZGRyZXNzIG1pc21hdGNoIGZvciBkZXNjcmlwdG9yLyk7XG5cbiAgaXQoJ3VzZXMgdGhlIGNvaW4gYWRkcmVzcyBjb2RlYyBmb3IgZGVzY3JpcHRvciB3YWxsZXQgYWRkcmVzc2VzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJlZ3Rlc3RDb2luID0gbmV3IFJlZ3Rlc3RUYnRjKCk7XG4gICAgY29uc3QgYWRkcmVzcyA9IGdldERlc2NyaXB0b3JBZGRyZXNzKGRlc2NGb28udmFsdWUsIDAsIHJlZ3Rlc3RDb2luLndhc21OYW1lKTtcbiAgICBjb25zdCB3YWxsZXQgPSBnZXRJV2FsbGV0V2l0aERlc2NyaXB0b3JzKFtkZXNjRm9vLCBkZXNjQmFyXSk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICBhd2FpdCByZWd0ZXN0Q29pbi5pc1dhbGxldEFkZHJlc3MoXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgIGNvaW5TcGVjaWZpYzogeyBkZXNjcmlwdG9yTmFtZTogJ2ZvbycsIGRlc2NyaXB0b3JDaGVja3N1bTogZGVzY0Zvby52YWx1ZS5zbGljZSgtOCkgfSxcbiAgICAgICAgICBrZXljaGFpbnM6IHhwdWJzLm1hcCgocHViKSA9PiAoeyBwdWIgfSkpLFxuICAgICAgICB9LFxuICAgICAgICB3YWxsZXRcbiAgICAgICksXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfSk7XG59KTtcbiJdfQ==
|