@bitgo-beta/abstract-utxo 1.1.1-beta.1813 → 1.1.1-beta.1815
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 +1 -0
- package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/cjs/src/abstractUtxoCoin.js +2 -2
- package/dist/cjs/src/address/fixedScript.d.ts +1 -5
- package/dist/cjs/src/address/fixedScript.d.ts.map +1 -1
- package/dist/cjs/src/address/fixedScript.js +3 -5
- package/dist/cjs/src/recovery/backupKeyRecovery.d.ts +3 -3
- package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -1
- package/dist/cjs/src/recovery/backupKeyRecovery.js +31 -69
- package/dist/cjs/src/recovery/crossChainRecovery.d.ts +5 -5
- package/dist/cjs/src/recovery/crossChainRecovery.d.ts.map +1 -1
- package/dist/cjs/src/recovery/crossChainRecovery.js +22 -121
- package/dist/cjs/src/recovery/psbt.d.ts +8 -31
- package/dist/cjs/src/recovery/psbt.d.ts.map +1 -1
- package/dist/cjs/src/recovery/psbt.js +14 -126
- package/dist/cjs/src/transaction/fixedScript/parseOutput.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/parseOutput.js +6 -11
- package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.d.ts +1 -1
- package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.js +1 -1
- package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts +2 -2
- package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.js +1 -1
- package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +4 -4
- package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/signTransaction.js +41 -6
- package/dist/cjs/src/unspent.d.ts +7 -0
- package/dist/cjs/src/unspent.d.ts.map +1 -1
- package/dist/cjs/src/unspent.js +10 -1
- package/dist/cjs/test/unit/prebuildAndSign.d.ts +0 -4
- package/dist/cjs/test/unit/prebuildAndSign.d.ts.map +1 -1
- package/dist/cjs/test/unit/prebuildAndSign.js +12 -32
- package/dist/cjs/test/unit/recovery/backupKeyRecovery.js +17 -14
- package/dist/cjs/test/unit/recovery/crossChainRecovery.js +13 -4
- package/dist/cjs/test/unit/signTransaction.d.ts +2 -0
- package/dist/cjs/test/unit/signTransaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/signTransaction.js +244 -0
- package/dist/cjs/test/unit/transaction.js +4 -224
- package/dist/cjs/test/unit/util/transaction.d.ts +3 -0
- package/dist/cjs/test/unit/util/transaction.d.ts.map +1 -1
- package/dist/cjs/test/unit/util/transaction.js +19 -1
- package/dist/cjs/test/unit/util/utxoCoins.d.ts +13 -0
- package/dist/cjs/test/unit/util/utxoCoins.d.ts.map +1 -1
- package/dist/cjs/test/unit/util/utxoCoins.js +33 -2
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/abstractUtxoCoin.d.ts +1 -0
- package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/esm/abstractUtxoCoin.js +2 -2
- package/dist/esm/address/fixedScript.d.ts +1 -5
- package/dist/esm/address/fixedScript.d.ts.map +1 -1
- package/dist/esm/address/fixedScript.js +3 -5
- package/dist/esm/recovery/backupKeyRecovery.d.ts +3 -3
- package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -1
- package/dist/esm/recovery/backupKeyRecovery.js +34 -39
- package/dist/esm/recovery/crossChainRecovery.d.ts +5 -5
- package/dist/esm/recovery/crossChainRecovery.d.ts.map +1 -1
- package/dist/esm/recovery/crossChainRecovery.js +24 -90
- package/dist/esm/recovery/psbt.d.ts +8 -31
- package/dist/esm/recovery/psbt.d.ts.map +1 -1
- package/dist/esm/recovery/psbt.js +14 -91
- package/dist/esm/transaction/fixedScript/parseOutput.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/parseOutput.js +6 -11
- package/dist/esm/transaction/fixedScript/signPsbtUtxolib.d.ts +1 -1
- package/dist/esm/transaction/fixedScript/signPsbtUtxolib.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/signPsbtUtxolib.js +1 -1
- package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts +2 -2
- package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/signPsbtWasm.js +1 -1
- package/dist/esm/transaction/fixedScript/signTransaction.d.ts +4 -4
- package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/signTransaction.js +9 -7
- package/dist/esm/unspent.d.ts +7 -0
- package/dist/esm/unspent.d.ts.map +1 -1
- package/dist/esm/unspent.js +8 -2
- package/package.json +9 -10
|
@@ -42,7 +42,6 @@ const sinon = __importStar(require("sinon"));
|
|
|
42
42
|
const nock = require("nock");
|
|
43
43
|
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
44
44
|
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
45
|
-
const unspents_1 = require("@bitgo-beta/unspents");
|
|
46
45
|
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
47
46
|
const src_1 = require("../../../src");
|
|
48
47
|
const names_1 = require("../../../src/names");
|
|
@@ -164,18 +163,12 @@ function run(coin, scriptTypes, walletKeys, params, tags = []) {
|
|
|
164
163
|
const outputSum = recoveryTx.txOutputs.reduce((sum, o) => sum + o.value, BigInt(0));
|
|
165
164
|
const fee = inputSum - outputSum;
|
|
166
165
|
// Use wasm-utxo Dimensions for testnet (matches how fee was calculated), utxolib Dimensions for mainnet
|
|
167
|
-
|
|
168
|
-
if (
|
|
169
|
-
|
|
170
|
-
if (!networkName) {
|
|
171
|
-
throw new Error('Invalid network');
|
|
172
|
-
}
|
|
173
|
-
const wasmPsbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(new Uint8Array(recoveryTx.toBuffer()), networkName);
|
|
174
|
-
vsize = wasm_utxo_1.fixedScriptWallet.Dimensions.fromPsbt(wasmPsbt).getVSize();
|
|
175
|
-
}
|
|
176
|
-
else {
|
|
177
|
-
vsize = unspents_1.Dimensions.fromPsbt(recoveryTx).getVSize();
|
|
166
|
+
const networkName = utxolib.getNetworkName(coin.network);
|
|
167
|
+
if (!networkName) {
|
|
168
|
+
throw new Error('Invalid network');
|
|
178
169
|
}
|
|
170
|
+
const wasmPsbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(new Uint8Array(recoveryTx.toBuffer()), networkName);
|
|
171
|
+
const vsize = wasm_utxo_1.fixedScriptWallet.Dimensions.fromPsbt(wasmPsbt).getVSize();
|
|
179
172
|
const feeRateSatB = Number(fee) / vsize;
|
|
180
173
|
const diff = Math.abs(feeRateSatB - defaultFeeRateSatB) / defaultFeeRateSatB;
|
|
181
174
|
// within 1%
|
|
@@ -187,7 +180,17 @@ function run(coin, scriptTypes, walletKeys, params, tags = []) {
|
|
|
187
180
|
if (fixtureRecovery.coin) {
|
|
188
181
|
fixtureRecovery.coin = fixtureCoin.getChain();
|
|
189
182
|
}
|
|
190
|
-
|
|
183
|
+
const storedFixture = await (0, util_1.getFixture)(fixtureCoin, `recovery/backupKeyRecovery-${(params.krsProvider ? tags.concat([params.krsProvider]) : tags).join('-')}`, recovery);
|
|
184
|
+
if ('txHex' in storedFixture) {
|
|
185
|
+
const buf = Buffer.from(storedFixture.txHex, 'hex');
|
|
186
|
+
if ((0, wasm_utxo_1.hasPsbtMagic)(buf)) {
|
|
187
|
+
(0, util_1.assertEqualParsedPsbt)(buf, recoveryTx.toBuffer(), coin.name, walletKeys, [
|
|
188
|
+
wasm_utxo_1.ECPair.fromPublicKey(walletKeys.user.publicKey),
|
|
189
|
+
]);
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
(0, util_1.shouldEqualJSON)(fixtureRecovery, storedFixture);
|
|
191
194
|
});
|
|
192
195
|
it('has expected input count', function () {
|
|
193
196
|
(recoveryTx instanceof utxolib.bitgo.UtxoPsbt ? recoveryTx.data.inputs : recoveryTx.ins).length.should.eql(recoverUnspents.length);
|
|
@@ -307,4 +310,4 @@ describe('Backup Key Recovery', function () {
|
|
|
307
310
|
// taproot compatible coins
|
|
308
311
|
runWithScriptTypes(['p2tr', 'p2trMusig2'], { runKeyProviderTests: false });
|
|
309
312
|
});
|
|
310
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja3VwS2V5UmVjb3ZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvcmVjb3ZlcnkvYmFja3VwS2V5UmVjb3ZlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFFNUIsa0JBQWdCO0FBRWhCLDZDQUErQjtBQUMvQiw2QkFBOEI7QUFFOUIsOERBQWdEO0FBQ2hELG1EQUFvRTtBQUNwRSxtREFBa0Q7QUFDbEQsZ0RBQTZFO0FBRTdFLHNDQU1zQjtBQUN0Qiw4Q0FBaUQ7QUFFakQsa0NBWWlCO0FBRWpCLGlDQUE4QztBQUU5QyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUluQyxNQUFNLE1BQU0sR0FBRyxFQUFFLFlBQVksRUFBWix1QkFBWSxFQUFFLENBQUM7QUFFaEMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7QUFFekIsU0FBUyxjQUFjLENBQUMsQ0FBMkI7SUFDakQsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLHVCQUFZLEVBQUUsQ0FBQztJQUNuQyxNQUFNLENBQUM7UUFDTCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDWixDQUFDLENBQUMsQ0FBQztJQUNILEtBQUssQ0FBQztRQUNKLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7QUFRL0IsU0FBUyxZQUFZLENBQUMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEs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XG5cbmltcG9ydCAnc2hvdWxkJztcbmltcG9ydCAqIGFzIG1vY2hhIGZyb20gJ21vY2hhJztcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCBub2NrID0gcmVxdWlyZSgnbm9jaycpO1xuaW1wb3J0IHsgQklQMzJJbnRlcmZhY2UgfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IENvbmZpZywga3JzUHJvdmlkZXJzLCBUcmlwbGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBEaW1lbnNpb25zIH0gZnJvbSAnQGJpdGdvLWJldGEvdW5zcGVudHMnO1xuaW1wb3J0IHsgYWRkcmVzcyBhcyB3YXNtQWRkcmVzcywgZml4ZWRTY3JpcHRXYWxsZXQgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHtcbiAgQWJzdHJhY3RVdHhvQ29pbixcbiAgYmFja3VwS2V5UmVjb3ZlcnksXG4gIEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb24sXG4gIENvaW5nZWNrb0FwaSxcbiAgRm9ybWF0dGVkT2ZmbGluZVZhdWx0VHhJbmZvLFxufSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHsgZ2V0Q29pbk5hbWUgfSBmcm9tICcuLi8uLi8uLi9zcmMvbmFtZXMnO1xuaW1wb3J0IHR5cGUgeyBVbnNwZW50LCBXYWxsZXRVbnNwZW50IH0gZnJvbSAnLi4vLi4vLi4vc3JjL3Vuc3BlbnQnO1xuaW1wb3J0IHtcbiAgZGVmYXVsdEJpdEdvLFxuICBlbmNyeXB0S2V5Y2hhaW4sXG4gIGdldERlZmF1bHRXYWxsZXRLZXlzLFxuICBnZXRGaXh0dXJlLFxuICBnZXROb3JtYWxUZXN0bmV0Q29pbixcbiAgZ2V0V2FsbGV0QWRkcmVzcyxcbiAgZ2V0V2FsbGV0S2V5cyxcbiAga2V5Y2hhaW5zLFxuICBzaG91bGRFcXVhbEpTT04sXG4gIHRvS2V5Y2hhaW5CYXNlNTgsXG4gIHV0eG9Db2lucyxcbn0gZnJvbSAnLi4vdXRpbCc7XG5cbmltcG9ydCB7IE1vY2tSZWNvdmVyeVByb3ZpZGVyIH0gZnJvbSAnLi9tb2NrJztcblxuY29uc3QgeyB0b091dHB1dCB9ID0gdXR4b2xpYi5iaXRnbztcbnR5cGUgUm9vdFdhbGxldEtleXMgPSB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzO1xudHlwZSBTY3JpcHRUeXBlMk9mMyA9IHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5TY3JpcHRUeXBlMk9mMztcblxuY29uc3QgY29uZmlnID0geyBrcnNQcm92aWRlcnMgfTtcblxubm9jay5kaXNhYmxlTmV0Q29ubmVjdCgpO1xuXG5mdW5jdGlvbiBjb25maWdPdmVycmlkZShmOiAoY29uZmlnOiBDb25maWcpID0+IHZvaWQpIHtcbiAgY29uc3QgYmFja3VwID0geyAuLi5rcnNQcm92aWRlcnMgfTtcbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBmKGNvbmZpZyk7XG4gIH0pO1xuICBhZnRlcihmdW5jdGlvbiAoKSB7XG4gICAgT2JqZWN0LmVudHJpZXMoYmFja3VwKS5mb3JFYWNoKChbaywgdl0pID0+IHtcbiAgICAgIGNvbmZpZ1trXSA9IHY7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5jb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ2xvbCc7XG5cbnR5cGUgTmFtZWRLZXlzID0ge1xuICB1c2VyS2V5OiBzdHJpbmc7XG4gIGJhY2t1cEtleTogc3RyaW5nO1xuICBiaXRnb0tleTogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gZ2V0TmFtZWRLZXlzKFt1c2VyS2V5LCBiYWNrdXBLZXksIGJpdGdvS2V5XTogVHJpcGxlPEJJUDMySW50ZXJmYWNlPiwgcGFzc3dvcmQ6IHN0cmluZyk6IE5hbWVkS2V5cyB7XG4gIGZ1bmN0aW9uIGVuY29kZShrOiBCSVAzMkludGVyZmFjZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGsuaXNOZXV0ZXJlZCgpID8gay50b0Jhc2U1OCgpIDogZW5jcnlwdEtleWNoYWluKHBhc3N3b3JkLCB0b0tleWNoYWluQmFzZTU4KGspKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHVzZXJLZXk6IGVuY29kZSh1c2VyS2V5KSxcbiAgICBiYWNrdXBLZXk6IGVuY29kZShiYWNrdXBLZXkpLFxuICAgIGJpdGdvS2V5OiBlbmNvZGUoYml0Z29LZXkpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRLZXlzRm9yVW5zaWduZWRTd2VlcChbdXNlcktleSwgYmFja3VwS2V5LCBiaXRnb0tleV06IFRyaXBsZTxCSVAzMkludGVyZmFjZT4sIHBhc3N3b3JkOiBzdHJpbmcpOiBOYW1lZEtleXMge1xuICByZXR1cm4gZ2V0TmFtZWRLZXlzKFt1c2VyS2V5Lm5ldXRlcmVkKCksIGJhY2t1cEtleS5uZXV0ZXJlZCgpLCBiaXRnb0tleS5uZXV0ZXJlZCgpXSwgcGFzc3dvcmQpO1xufVxuXG5mdW5jdGlvbiBnZXRLZXlzRm9yS2V5UmVjb3ZlcnlTZXJ2aWNlKFxuICBbdXNlcktleSwgYmFja3VwS2V5LCBiaXRnb0tleV06IFRyaXBsZTxCSVAzMkludGVyZmFjZT4sXG4gIHBhc3N3b3JkOiBzdHJpbmdcbik6IE5hbWVkS2V5cyB7XG4gIHJldHVybiBnZXROYW1lZEtleXMoW3VzZXJLZXksIGJhY2t1cEtleS5uZXV0ZXJlZCgpLCBiaXRnb0tleS5uZXV0ZXJlZCgpXSwgcGFzc3dvcmQpO1xufVxuXG5mdW5jdGlvbiBnZXRLZXlzRm9yRnVsbFNpZ25lZFJlY292ZXJ5KFxuICBbdXNlcktleSwgYmFja3VwS2V5LCBiaXRnb0tleV06IFRyaXBsZTxCSVAzMkludGVyZmFjZT4sXG4gIHBhc3N3b3JkOiBzdHJpbmdcbik6IE5hbWVkS2V5cyB7XG4gIHJldHVybiBnZXROYW1lZEtleXMoW3VzZXJLZXksIGJhY2t1cEtleSwgYml0Z29LZXkubmV1dGVyZWQoKV0sIHBhc3N3b3JkKTtcbn1cblxuY29uc3Qgd2FsbGV0S2V5cyA9IGdldERlZmF1bHRXYWxsZXRLZXlzKCk7XG5jb25zdCBrZXlzVW5zaWduZWRTd2VlcCA9IGdldEtleXNGb3JVbnNpZ25lZFN3ZWVwKHdhbGxldEtleXMudHJpcGxlLCB3YWxsZXRQYXNzcGhyYXNlKTtcbmNvbnN0IGtleXNLZXlSZWNvdmVyeVNlcnZpY2UgPSBnZXRLZXlzRm9yS2V5UmVjb3ZlcnlTZXJ2aWNlKHdhbGxldEtleXMudHJpcGxlLCB3YWxsZXRQYXNzcGhyYXNlKTtcbmNvbnN0IGtleXNGdWxsU2lnbmVkUmVjb3ZlcnkgPSBnZXRLZXlzRm9yRnVsbFNpZ25lZFJlY292ZXJ5KHdhbGxldEtleXMudHJpcGxlLCB3YWxsZXRQYXNzcGhyYXNlKTtcblxuY29uc3QgZXhvdGljVXNlcktleVBhdGggPSAnOTkvOTknO1xuY29uc3QgZXhvdGljV2FsbGV0S2V5cyA9IG5ldyB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzKGtleWNoYWlucywgW1xuICBleG90aWNVc2VyS2V5UGF0aCxcbiAgdXR4b2xpYi5iaXRnby5Sb290V2FsbGV0S2V5cy5kZWZhdWx0UHJlZml4LFxuICB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzLmRlZmF1bHRQcmVmaXgsXG5dKTtcbmNvbnN0IGtleXNGdWxsU2lnbmVkUmVjb3ZlcnlFeG90aWMgPSBnZXRLZXlzRm9yRnVsbFNpZ25lZFJlY292ZXJ5KGV4b3RpY1dhbGxldEtleXMudHJpcGxlLCB3YWxsZXRQYXNzcGhyYXNlKTtcblxuZnVuY3Rpb24gcnVuKFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICBzY3JpcHRUeXBlczogU2NyaXB0VHlwZTJPZjNbXSxcbiAgd2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIHBhcmFtczoge1xuICAgIGtleXM6IE5hbWVkS2V5cztcbiAgICB1c2VyS2V5UGF0aD86IHN0cmluZztcbiAgICBrcnNQcm92aWRlcj86IHN0cmluZztcbiAgICBoYXNVc2VyU2lnbmF0dXJlOiBib29sZWFuO1xuICAgIGhhc0JhY2t1cFNpZ25hdHVyZTogYm9vbGVhbjtcbiAgICBoYXNLcnNPdXRwdXQ/OiBib29sZWFuO1xuICB9LFxuICB0YWdzOiBzdHJpbmdbXSA9IFtdXG4pIHtcbiAgY29uc3QgZGVmYXVsdEZlZVJhdGVTYXRCID0gMTAwO1xuXG4gIGRlc2NyaWJlKGBCYWNrdXAgS2V5IFJlY292ZXJ5IFske1tjb2luLmdldENoYWluKCksIC4uLnRhZ3MsIHBhcmFtcy5rcnNQcm92aWRlcl0uam9pbignLCcpfV1gLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZXh0ZXJuYWxXYWxsZXQgPSBnZXRXYWxsZXRLZXlzKCdleHRlcm5hbCcpO1xuICAgIGNvbnN0IHJlY292ZXJ5RGVzdGluYXRpb24gPSBnZXRXYWxsZXRBZGRyZXNzKGNvaW4ubmV0d29yaywgZXh0ZXJuYWxXYWxsZXQpO1xuXG4gICAgbGV0IGtleVJlY292ZXJ5U2VydmljZUFkZHJlc3M6IHN0cmluZztcbiAgICBsZXQgcmVjb3Zlcnk6IChCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uIHwgRm9ybWF0dGVkT2ZmbGluZVZhdWx0VHhJbmZvKSAmIHsgdHhpZD86IHN0cmluZyB9O1xuICAgIGxldCByZWNvdmVyeVR4OiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxudW1iZXIgfCBiaWdpbnQ+IHwgdXR4b2xpYi5iaXRnby5VdHhvUHNidDtcblxuICAgIC8vIDFlOCAqIDllNyA8IDkuMDA3ZTE1IGJ1dCAyZTggKiA5ZTcgPiA5LjAwN2UxNSB0byB0ZXN0IGJvdGggY29kZSBwYXRocyBpbiBxdWVyeUJsb2NrY2hhaW5VbnNwZW50c1BhdGhcbiAgICBjb25zdCB2YWx1ZU11bCA9IGNvaW4uYW1vdW50VHlwZSA9PT0gJ2JpZ2ludCcgPyBCaWdJbnQoOWU3KSA6IEJpZ0ludCgxKTtcbiAgICBiZWZvcmUoJ21vY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzaW5vbi5zdHViKENvaW5nZWNrb0FwaS5wcm90b3R5cGUsICdnZXRVU0RQcmljZScpLnJlc29sdmVzKDY5XzQyMCk7XG4gICAgfSk7XG5cbiAgICBjb25maWdPdmVycmlkZShmdW5jdGlvbiAoY29uZmlnOiBDb25maWcpIHtcbiAgICAgIGNvbnN0IGNvbmZpZ0tyc1Byb3ZpZGVycyA9IHsgLi4uY29uZmlnLmtyc1Byb3ZpZGVycyB9O1xuICAgICAgY29uZmlnS3JzUHJvdmlkZXJzLmRhaS5zdXBwb3J0ZWRDb2lucyA9IFtjb2luLmdldEZhbWlseSgpXTtcbiAgICAgIGNvbmZpZ0tyc1Byb3ZpZGVycy5rZXl0ZXJuYWwuc3VwcG9ydGVkQ29pbnMgPSBbY29pbi5nZXRGYW1pbHkoKV07XG4gICAgICBrZXlSZWNvdmVyeVNlcnZpY2VBZGRyZXNzID0gZ2V0V2FsbGV0QWRkcmVzcyhjb2luLm5ldHdvcmssIGV4dGVybmFsV2FsbGV0LCAwLCAxMDApO1xuICAgICAgY29uZmlnS3JzUHJvdmlkZXJzLmtleXRlcm5hbC5mZWVBZGRyZXNzZXMgPSB7IFtjb2luLmdldENoYWluKCldOiBrZXlSZWNvdmVyeVNlcnZpY2VBZGRyZXNzIH07XG4gICAgICBjb25maWcua3JzUHJvdmlkZXJzID0gY29uZmlnS3JzUHJvdmlkZXJzO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgc2lub24ucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgbGV0IHJlY292ZXJVbnNwZW50czogVW5zcGVudDxiaWdpbnQ+W107XG4gICAgbGV0IG1vY2tlZEFwaVVuc3BlbnRzOiBVbnNwZW50PGJpZ2ludD5bXTtcblxuICAgIGJlZm9yZSgnY3JlYXRlIHJlY292ZXJ5IGRhdGEnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLnRpbWVvdXQoMTBfMDAwKTtcbiAgICAgIHJlY292ZXJVbnNwZW50cyA9IHNjcmlwdFR5cGVzLmZsYXRNYXAoKHNjcmlwdFR5cGUsIGluZGV4KSA9PiBbXG4gICAgICAgIHV0eG9saWIudGVzdHV0aWwudG9VbnNwZW50KHsgc2NyaXB0VHlwZSwgdmFsdWU6IEJpZ0ludCgxZTgpICogdmFsdWVNdWwgfSwgaW5kZXgsIGNvaW4ubmV0d29yaywgd2FsbGV0S2V5cyksXG4gICAgICAgIHV0eG9saWIudGVzdHV0aWwudG9VbnNwZW50KHsgc2NyaXB0VHlwZSwgdmFsdWU6IEJpZ0ludCgyZTgpICogdmFsdWVNdWwgfSwgaW5kZXgsIGNvaW4ubmV0d29yaywgd2FsbGV0S2V5cyksXG4gICAgICAgIHV0eG9saWIudGVzdHV0aWwudG9VbnNwZW50KHsgc2NyaXB0VHlwZSwgdmFsdWU6IEJpZ0ludCgzZTgpICogdmFsdWVNdWwgfSwgaW5kZXgsIGNvaW4ubmV0d29yaywgd2FsbGV0S2V5cyksXG4gICAgICBdKTtcblxuICAgICAgLy8gSWYgdGhlIGNvaW4gaXMgYmNoLCBjb252ZXJ0IHRoZSBtb2NrZWQgdW5zcGVudCBhZGRyZXNzIHRvIGNhc2hhZGRyIGZvcm1hdCBzaW5jZSB0aGF0IGlzIHRoZSBmb3JtYXQgdGhhdCBibG9ja2NoYWlyXG4gICAgICAvLyByZXR1cm5zIG9uIHRoZSAvZGFzaGJvYXJkcy9hZGRyZXNzZXMgcmVzcG9uc2VcbiAgICAgIG1vY2tlZEFwaVVuc3BlbnRzID1cbiAgICAgICAgY29pbi5nZXRDaGFpbigpID09PSAnYmNoJyB8fCBjb2luLmdldENoYWluKCkgPT09ICdiY2hhJ1xuICAgICAgICAgID8gcmVjb3ZlclVuc3BlbnRzLm1hcCgodSkgPT4gKHsgLi4udSwgYWRkcmVzczogY29pbi5jYW5vbmljYWxBZGRyZXNzKHUuYWRkcmVzcywgJ2Nhc2hhZGRyJykuc3BsaXQoJzonKVsxXSB9KSlcbiAgICAgICAgICA6IHJlY292ZXJVbnNwZW50cztcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKG1vY2tlZEFwaVVuc3BlbnRzLmxlbmd0aCwgcmVjb3ZlclVuc3BlbnRzLmxlbmd0aCk7XG4gICAgICByZWNvdmVyeSA9IGF3YWl0IGJhY2t1cEtleVJlY292ZXJ5KGNvaW4sIGRlZmF1bHRCaXRHbywge1xuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICBzY2FuOiA1LFxuICAgICAgICBpZ25vcmVBZGRyZXNzVHlwZXM6IFtdLFxuICAgICAgICB1c2VyS2V5UGF0aDogcGFyYW1zLnVzZXJLZXlQYXRoLFxuICAgICAgICBrcnNQcm92aWRlcjogcGFyYW1zLmtyc1Byb3ZpZGVyLFxuICAgICAgICAuLi5wYXJhbXMua2V5cyxcbiAgICAgICAgcmVjb3ZlcnlQcm92aWRlcjogbmV3IE1vY2tSZWNvdmVyeVByb3ZpZGVyKG1vY2tlZEFwaVVuc3BlbnRzKSxcbiAgICAgICAgZmVlUmF0ZTogZGVmYXVsdEZlZVJhdGVTYXRCLFxuICAgICAgfSk7XG4gICAgICBjb25zdCB0eEhleCA9XG4gICAgICAgIChyZWNvdmVyeSBhcyBCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uKS50cmFuc2FjdGlvbkhleCA/PyAocmVjb3ZlcnkgYXMgRm9ybWF0dGVkT2ZmbGluZVZhdWx0VHhJbmZvKS50eEhleDtcbiAgICAgIGNvbnN0IGlzUHNidCA9IHV0eG9saWIuYml0Z28uaXNQc2J0KHR4SGV4KTtcbiAgICAgIHJlY292ZXJ5VHggPSBpc1BzYnRcbiAgICAgICAgPyB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGcm9tSGV4KHR4SGV4LCBjb2luLm5ldHdvcmspXG4gICAgICAgIDogdXR4b2xpYi5iaXRnby5jcmVhdGVUcmFuc2FjdGlvbkZyb21IZXgodHhIZXggYXMgc3RyaW5nLCBjb2luLm5ldHdvcmssIGNvaW4uYW1vdW50VHlwZSk7XG4gICAgICByZWNvdmVyeS50eGlkID1cbiAgICAgICAgcmVjb3ZlcnlUeCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnQgPyByZWNvdmVyeVR4LmdldFVuc2lnbmVkVHgoKS5nZXRJZCgpIDogcmVjb3ZlcnlUeC5nZXRJZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhcyBjb3JyZWN0IHJlY292ZXJ5IHByb3ZpZGVyIG1vY2tzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVjb3ZlcnlQcm92aWRlciA9IG5ldyBNb2NrUmVjb3ZlcnlQcm92aWRlcihtb2NrZWRBcGlVbnNwZW50cyk7XG4gICAgICAoYXdhaXQgcmVjb3ZlcnlQcm92aWRlci5nZXRVbnNwZW50c0ZvckFkZHJlc3Nlcyhtb2NrZWRBcGlVbnNwZW50cy5tYXAoKHUpID0+IHUuYWRkcmVzcykpKS5sZW5ndGguc2hvdWxkLmVxbChcbiAgICAgICAgbW9ja2VkQXBpVW5zcGVudHMubGVuZ3RoXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhcyBleHBlY3RlZCBmZWUgcmF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghKHJlY292ZXJ5VHggaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0KSkge1xuICAgICAgICB0aGlzLnNraXAoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlucHV0U3VtID0gdXR4b2xpYi5iaXRnby51bnNwZW50U3VtKHJlY292ZXJVbnNwZW50cywgJ2JpZ2ludCcpO1xuICAgICAgY29uc3Qgb3V0cHV0U3VtID0gcmVjb3ZlcnlUeC50eE91dHB1dHMucmVkdWNlKChzdW0sIG8pID0+IHN1bSArIG8udmFsdWUsIEJpZ0ludCgwKSk7XG4gICAgICBjb25zdCBmZWUgPSBpbnB1dFN1bSAtIG91dHB1dFN1bTtcbiAgICAgIC8vIFVzZSB3YXNtLXV0eG8gRGltZW5zaW9ucyBmb3IgdGVzdG5ldCAobWF0Y2hlcyBob3cgZmVlIHdhcyBjYWxjdWxhdGVkKSwgdXR4b2xpYiBEaW1lbnNpb25zIGZvciBtYWlubmV0XG4gICAgICBsZXQgdnNpemU6IG51bWJlcjtcbiAgICAgIGlmICh1dHhvbGliLmlzVGVzdG5ldChjb2luLm5ldHdvcmspKSB7XG4gICAgICAgIGNvbnN0IG5ldHdvcmtOYW1lID0gdXR4b2xpYi5nZXROZXR3b3JrTmFtZShjb2luLm5ldHdvcmspO1xuICAgICAgICBpZiAoIW5ldHdvcmtOYW1lKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG5ldHdvcmsnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3YXNtUHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5mcm9tQnl0ZXMobmV3IFVpbnQ4QXJyYXkocmVjb3ZlcnlUeC50b0J1ZmZlcigpKSwgbmV0d29ya05hbWUpO1xuICAgICAgICB2c2l6ZSA9IGZpeGVkU2NyaXB0V2FsbGV0LkRpbWVuc2lvbnMuZnJvbVBzYnQod2FzbVBzYnQpLmdldFZTaXplKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2c2l6ZSA9IERpbWVuc2lvbnMuZnJvbVBzYnQocmVjb3ZlcnlUeCkuZ2V0VlNpemUoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZlZVJhdGVTYXRCID0gTnVtYmVyKGZlZSkgLyB2c2l6ZTtcbiAgICAgIGNvbnN0IGRpZmYgPSBNYXRoLmFicyhmZWVSYXRlU2F0QiAtIGRlZmF1bHRGZWVSYXRlU2F0QikgLyBkZWZhdWx0RmVlUmF0ZVNhdEI7XG4gICAgICAvLyB3aXRoaW4gMSVcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChkaWZmIDwgMC4wMSwgdHJ1ZSwgYGV4cGVjdGVkIGZlZSByYXRlICR7ZGVmYXVsdEZlZVJhdGVTYXRCfSBidXQgZ290ICR7ZmVlUmF0ZVNhdEJ9YCk7XG4gICAgfSk7XG5cbiAgICBpdCgnbWF0Y2hlcyBmaXh0dXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZml4dHVyZUNvaW4gPSBnZXROb3JtYWxUZXN0bmV0Q29pbihjb2luKTtcbiAgICAgIGNvbnN0IGZpeHR1cmVSZWNvdmVyeSA9IHsgLi4ucmVjb3ZlcnkgfTtcbiAgICAgIGlmIChmaXh0dXJlUmVjb3ZlcnkuY29pbikge1xuICAgICAgICBmaXh0dXJlUmVjb3ZlcnkuY29pbiA9IGZpeHR1cmVDb2luLmdldENoYWluKCk7XG4gICAgICB9XG5cbiAgICAgIHNob3VsZEVxdWFsSlNPTihcbiAgICAgICAgZml4dHVyZVJlY292ZXJ5LFxuICAgICAgICBhd2FpdCBnZXRGaXh0dXJlKFxuICAgICAgICAgIGZpeHR1cmVDb2luLFxuICAgICAgICAgIGByZWNvdmVyeS9iYWNrdXBLZXlSZWNvdmVyeS0keyhwYXJhbXMua3JzUHJvdmlkZXIgPyB0YWdzLmNvbmNhdChbcGFyYW1zLmtyc1Byb3ZpZGVyXSkgOiB0YWdzKS5qb2luKCctJyl9YCxcbiAgICAgICAgICByZWNvdmVyeVxuICAgICAgICApXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhcyBleHBlY3RlZCBpbnB1dCBjb3VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIChyZWNvdmVyeVR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidCA/IHJlY292ZXJ5VHguZGF0YS5pbnB1dHMgOiByZWNvdmVyeVR4LmlucykubGVuZ3RoLnNob3VsZC5lcWwoXG4gICAgICAgIHJlY292ZXJVbnNwZW50cy5sZW5ndGhcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBjaGVja0lucHV0c1NpZ25lZEJ5KFxuICAgICAgdHg6IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uPG51bWJlciB8IGJpZ2ludD4gfCB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LFxuICAgICAgcm9vdEtleTogQklQMzJJbnRlcmZhY2UsXG4gICAgICBleHBlY3RDb3VudDogbnVtYmVyXG4gICAgKSB7XG4gICAgICBpZiAodHggaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0KSB7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHR4OiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LCBpbnB1dEluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHR4LnZhbGlkYXRlU2lnbmF0dXJlc09mSW5wdXRIRChpbnB1dEluZGV4LCByb290S2V5KTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZS5tZXNzYWdlID09PSAnTm8gc2lnbmF0dXJlcyB0byB2YWxpZGF0ZScpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdHguZGF0YS5pbnB1dHMuZm9yRWFjaCgoaW5wdXQsIGlucHV0SW5kZXgpID0+IHtcbiAgICAgICAgICB2YWxpZGF0ZSh0eCwgaW5wdXRJbmRleCkuc2hvdWxkLmVxbCghIWV4cGVjdENvdW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwcmV2T3V0cHV0cyA9IHJlY292ZXJVbnNwZW50c1xuICAgICAgICAgIC5tYXAoKHUpID0+IHRvT3V0cHV0KHUsIGNvaW4ubmV0d29yaykpXG4gICAgICAgICAgLm1hcCgodikgPT4gKHsgLi4udiwgdmFsdWU6IHV0eG9saWIuYml0Z28udG9UTnVtYmVyKHYudmFsdWUsIGNvaW4uYW1vdW50VHlwZSkgfSkpO1xuICAgICAgICB0eC5pbnMuZm9yRWFjaCgoaW5wdXQsIGlucHV0SW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCB1bnNwZW50ID0gcmVjb3ZlclVuc3BlbnRzW2lucHV0SW5kZXhdIGFzIFdhbGxldFVuc3BlbnQ8YmlnaW50PjtcbiAgICAgICAgICBjb25zdCB7IHB1YmxpY0tleSB9ID0gcm9vdEtleS5kZXJpdmVQYXRoKHdhbGxldEtleXMuZ2V0RGVyaXZhdGlvblBhdGgocm9vdEtleSwgdW5zcGVudC5jaGFpbiwgdW5zcGVudC5pbmRleCkpO1xuICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZXMgPSB1dHhvbGliLmJpdGdvXG4gICAgICAgICAgICAuZ2V0U2lnbmF0dXJlVmVyaWZpY2F0aW9ucyhcbiAgICAgICAgICAgICAgdHgsXG4gICAgICAgICAgICAgIGlucHV0SW5kZXgsXG4gICAgICAgICAgICAgIHV0eG9saWIuYml0Z28udG9UTnVtYmVyKHVuc3BlbnQudmFsdWUsIGNvaW4uYW1vdW50VHlwZSksXG4gICAgICAgICAgICAgIHsgcHVibGljS2V5IH0sXG4gICAgICAgICAgICAgIHByZXZPdXRwdXRzXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZmlsdGVyKChzKSA9PiBzLnNpZ25lZEJ5ICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgIHNpZ25hdHVyZXMubGVuZ3RoLnNob3VsZC5lcWwoZXhwZWN0Q291bnQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpdCgocGFyYW1zLmhhc1VzZXJTaWduYXR1cmUgPyAnaGFzJyA6ICdoYXMgbm8nKSArICcgdXNlciBzaWduYXR1cmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjaGVja0lucHV0c1NpZ25lZEJ5KHJlY292ZXJ5VHgsIHdhbGxldEtleXMudXNlciwgcGFyYW1zLmhhc1VzZXJTaWduYXR1cmUgPyAxIDogMCk7XG4gICAgfSk7XG5cbiAgICBpdCgocGFyYW1zLmhhc0JhY2t1cFNpZ25hdHVyZSA/ICdoYXMnIDogJ2hhcyBubycpICsgJyBiYWNrdXAgc2lnbmF0dXJlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY2hlY2tJbnB1dHNTaWduZWRCeShyZWNvdmVyeVR4LCB3YWxsZXRLZXlzLmJhY2t1cCwgcGFyYW1zLmhhc0JhY2t1cFNpZ25hdHVyZSA/IDEgOiAwKTtcbiAgICB9KTtcblxuICAgIGlmIChwYXJhbXMuaGFzVXNlclNpZ25hdHVyZSAmJiBwYXJhbXMuaGFzQmFja3VwU2lnbmF0dXJlKSB7XG4gICAgICBpdCgnaGFzIG5vIHBsYWNlaG9sZGVyIHNpZ25hdHVyZXMnLCBmdW5jdGlvbiAodGhpczogbW9jaGEuQ29udGV4dCkge1xuICAgICAgICBpZiAocmVjb3ZlcnlUeCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uKSB7XG4gICAgICAgICAgcmVjb3ZlcnlUeC5pbnMuZm9yRWFjaCgoaW5wdXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHV0eG9saWIuYml0Z28ucGFyc2VTaWduYXR1cmVTY3JpcHQoaW5wdXQpO1xuICAgICAgICAgICAgc3dpdGNoIChwYXJzZWQuc2NyaXB0VHlwZSkge1xuICAgICAgICAgICAgICBjYXNlICdwMnNoJzpcbiAgICAgICAgICAgICAgY2FzZSAncDJzaFAyd3NoJzpcbiAgICAgICAgICAgICAgY2FzZSAncDJ3c2gnOlxuICAgICAgICAgICAgICBjYXNlICd0YXByb290U2NyaXB0UGF0aFNwZW5kJzpcbiAgICAgICAgICAgICAgICBwYXJzZWQuc2lnbmF0dXJlcy5mb3JFYWNoKChzaWduYXR1cmUsIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICh1dHhvbGliLmJpdGdvLmlzUGxhY2Vob2xkZXJTaWduYXR1cmUoc2lnbmF0dXJlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHBsYWNlaG9sZGVyIHNpZ25hdHVyZSBhdCBpbmRleCAke2l9YCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIHNjcmlwdFR5cGUgJHtwYXJzZWQuc2NyaXB0VHlwZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNraXAoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaXQoKHBhcmFtcy5oYXNLcnNPdXRwdXQgPyAnaGFzJyA6ICdoYXMgbm8nKSArICcga2V5IHJlY292ZXJ5IHNlcnZpY2Ugb3V0cHV0JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgb3V0cyA9IHJlY292ZXJ5VHggaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0ID8gcmVjb3ZlcnlUeC5nZXRVbnNpZ25lZFR4KCkub3V0cyA6IHJlY292ZXJ5VHgub3V0cztcbiAgICAgIG91dHMubGVuZ3RoLnNob3VsZC5lcWwoMSk7XG4gICAgICBjb25zdCBvdXRwdXRBZGRyZXNzZXMgPSBvdXRzLm1hcCgobykgPT5cbiAgICAgICAgd2FzbUFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdFdpdGhDb2luKG8uc2NyaXB0LCBnZXRDb2luTmFtZShyZWNvdmVyeVR4Lm5ldHdvcmspKVxuICAgICAgKTtcbiAgICAgIG91dHB1dEFkZHJlc3Nlc1xuICAgICAgICAuaW5jbHVkZXMoa2V5UmVjb3ZlcnlTZXJ2aWNlQWRkcmVzcylcbiAgICAgICAgLnNob3VsZC5lcWwoISFwYXJhbXMuaGFzS3JzT3V0cHV0ICYmIHBhcmFtcy5rcnNQcm92aWRlciA9PT0gJ2tleXRlcm5hbCcpO1xuICAgICAgb3V0cHV0QWRkcmVzc2VzLmluY2x1ZGVzKHJlY292ZXJ5RGVzdGluYXRpb24pLnNob3VsZC5lcWwodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBydW5XaXRoU2NyaXB0VHlwZXMoXG4gIHNjcmlwdFR5cGVzOiBTY3JpcHRUeXBlMk9mM1tdLFxuICB7IHJ1bktleVByb3ZpZGVyVGVzdHMgPSB0cnVlIH06IHsgcnVuS2V5UHJvdmlkZXJUZXN0cz86IGJvb2xlYW4gfSA9IHt9XG4pIHtcbiAgdXR4b0NvaW5zXG4gICAgLmZpbHRlcigoY29pbikgPT4gc2NyaXB0VHlwZXMuZXZlcnkoKHR5cGUpID0+IGNvaW4uc3VwcG9ydHNBZGRyZXNzVHlwZSh0eXBlKSkpXG4gICAgLmZvckVhY2goKGNvaW4pID0+IHtcbiAgICAgIHJ1bihcbiAgICAgICAgY29pbixcbiAgICAgICAgc2NyaXB0VHlwZXMsXG4gICAgICAgIHdhbGxldEtleXMsXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlzOiBrZXlzVW5zaWduZWRTd2VlcCxcbiAgICAgICAgICBoYXNVc2VyU2lnbmF0dXJlOiBmYWxzZSxcbiAgICAgICAgICBoYXNCYWNrdXBTaWduYXR1cmU6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICBbJ3Vuc2lnbmVkUmVjb3ZlcnknLCAuLi5zY3JpcHRUeXBlc11cbiAgICAgICk7XG5cbiAgICAgIGlmIChydW5LZXlQcm92aWRlclRlc3RzKSB7XG4gICAgICAgIFsnZGFpJywgJ2tleXRlcm5hbCddLmZvckVhY2goKGtyc1Byb3ZpZGVyKSA9PiB7XG4gICAgICAgICAgcnVuKFxuICAgICAgICAgICAgY29pbixcbiAgICAgICAgICAgIHNjcmlwdFR5cGVzLFxuICAgICAgICAgICAgd2FsbGV0S2V5cyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAga2V5czoga2V5c0tleVJlY292ZXJ5U2VydmljZSxcbiAgICAgICAgICAgICAga3JzUHJvdmlkZXI6IGtyc1Byb3ZpZGVyLFxuICAgICAgICAgICAgICBoYXNVc2VyU2lnbmF0dXJlOiB0cnVlLFxuICAgICAgICAgICAgICBoYXNCYWNrdXBTaWduYXR1cmU6IGZhbHNlLFxuICAgICAgICAgICAgICBoYXNLcnNPdXRwdXQ6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFsna2V5UmVjb3ZlcnlTZXJ2aWNlJywgLi4uc2NyaXB0VHlwZXNdXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJ1bihcbiAgICAgICAgY29pbixcbiAgICAgICAgc2NyaXB0VHlwZXMsXG4gICAgICAgIHdhbGxldEtleXMsXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlzOiBrZXlzRnVsbFNpZ25lZFJlY292ZXJ5LFxuICAgICAgICAgIGhhc1VzZXJTaWduYXR1cmU6IHRydWUsXG4gICAgICAgICAgaGFzQmFja3VwU2lnbmF0dXJlOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBbJ2Z1bGxTaWduZWRSZWNvdmVyeScsIC4uLnNjcmlwdFR5cGVzXVxuICAgICAgKTtcblxuICAgICAgcnVuKFxuICAgICAgICBjb2luLFxuICAgICAgICBzY3JpcHRUeXBlcyxcbiAgICAgICAgZXhvdGljV2FsbGV0S2V5cyxcbiAgICAgICAge1xuICAgICAgICAgIGtleXM6IGtleXNGdWxsU2lnbmVkUmVjb3ZlcnlFeG90aWMsXG4gICAgICAgICAgdXNlcktleVBhdGg6IGV4b3RpY1VzZXJLZXlQYXRoLFxuICAgICAgICAgIGhhc1VzZXJTaWduYXR1cmU6IHRydWUsXG4gICAgICAgICAgaGFzQmFja3VwU2lnbmF0dXJlOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBbJ2Z1bGxTaWduZWRSZWNvdmVyeScsICdjdXN0b21Vc2VyS2V5UGF0aCcsIC4uLnNjcmlwdFR5cGVzXVxuICAgICAgKTtcbiAgICB9KTtcbn1cblxuZGVzY3JpYmUoJ0JhY2t1cCBLZXkgUmVjb3ZlcnknLCBmdW5jdGlvbiAoKSB7XG4gIC8vIGNvbXBhdGlibGUgd2l0aCBhbGwgY29pbnNcbiAgcnVuV2l0aFNjcmlwdFR5cGVzKFsncDJzaCddKTtcblxuICAvLyBzZWd3aXQgY29tcGF0aWJsZSBjb2luc1xuICBydW5XaXRoU2NyaXB0VHlwZXMoWydwMnNoUDJ3c2gnLCAncDJ3c2gnXSk7XG5cbiAgLy8gdGFwcm9vdCBjb21wYXRpYmxlIGNvaW5zXG4gIHJ1bldpdGhTY3JpcHRUeXBlcyhbJ3AydHInLCAncDJ0ck11c2lnMiddLCB7IHJ1bktleVByb3ZpZGVyVGVzdHM6IGZhbHNlIH0pO1xufSk7XG4iXX0=
|
|
313
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja3VwS2V5UmVjb3ZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvcmVjb3ZlcnkvYmFja3VwS2V5UmVjb3ZlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFFNUIsa0JBQWdCO0FBRWhCLDZDQUErQjtBQUMvQiw2QkFBOEI7QUFFOUIsOERBQWdEO0FBQ2hELG1EQUFvRTtBQUNwRSxnREFBbUc7QUFFbkcsc0NBTXNCO0FBQ3RCLDhDQUFpRDtBQUVqRCxrQ0FhaUI7QUFFakIsaUNBQThDO0FBRTlDLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBSW5DLE1BQU0sTUFBTSxHQUFHLEVBQUUsWUFBWSxFQUFaLHVCQUFZLEVBQUUsQ0FBQztBQUVoQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztBQUV6QixTQUFTLGNBQWMsQ0FBQyxDQUEyQjtJQUNqRCxNQUFNLE1BQU0sR0FBRyxFQUFFLEdBQUcsdUJBQVksRUFBRSxDQUFDO0lBQ25DLE1BQU0sQ0FBQztRQUNMLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNaLENBQUMsQ0FBQyxDQUFDO0lBQ0gsS0FBSyxDQUFDO1FBQ0osTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQztBQVEvQixTQUFTLFlBQVksQ0FBQyxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUF5QixFQUFFLFFB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VyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFFM0MsMkJBQTJCO0lBQzNCLGtCQUFrQixDQUFDLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUM3RSxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0ICogYXMgbW9jaGEgZnJvbSAnbW9jaGEnO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IG5vY2sgPSByZXF1aXJlKCdub2NrJyk7XG5pbXBvcnQgeyBCSVAzMkludGVyZmFjZSB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgQ29uZmlnLCBrcnNQcm92aWRlcnMsIFRyaXBsZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGFkZHJlc3MgYXMgd2FzbUFkZHJlc3MsIGZpeGVkU2NyaXB0V2FsbGV0LCBoYXNQc2J0TWFnaWMsIEVDUGFpciB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQge1xuICBBYnN0cmFjdFV0eG9Db2luLFxuICBiYWNrdXBLZXlSZWNvdmVyeSxcbiAgQmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbixcbiAgQ29pbmdlY2tvQXBpLFxuICBGb3JtYXR0ZWRPZmZsaW5lVmF1bHRUeEluZm8sXG59IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBnZXRDb2luTmFtZSB9IGZyb20gJy4uLy4uLy4uL3NyYy9uYW1lcyc7XG5pbXBvcnQgdHlwZSB7IFVuc3BlbnQsIFdhbGxldFVuc3BlbnQgfSBmcm9tICcuLi8uLi8uLi9zcmMvdW5zcGVudCc7XG5pbXBvcnQge1xuICBhc3NlcnRFcXVhbFBhcnNlZFBzYnQsXG4gIGRlZmF1bHRCaXRHbyxcbiAgZW5jcnlwdEtleWNoYWluLFxuICBnZXREZWZhdWx0V2FsbGV0S2V5cyxcbiAgZ2V0Rml4dHVyZSxcbiAgZ2V0Tm9ybWFsVGVzdG5ldENvaW4sXG4gIGdldFdhbGxldEFkZHJlc3MsXG4gIGdldFdhbGxldEtleXMsXG4gIGtleWNoYWlucyxcbiAgc2hvdWxkRXF1YWxKU09OLFxuICB0b0tleWNoYWluQmFzZTU4LFxuICB1dHhvQ29pbnMsXG59IGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQgeyBNb2NrUmVjb3ZlcnlQcm92aWRlciB9IGZyb20gJy4vbW9jayc7XG5cbmNvbnN0IHsgdG9PdXRwdXQgfSA9IHV0eG9saWIuYml0Z287XG50eXBlIFJvb3RXYWxsZXRLZXlzID0gdXR4b2xpYi5iaXRnby5Sb290V2FsbGV0S2V5cztcbnR5cGUgU2NyaXB0VHlwZTJPZjMgPSB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuU2NyaXB0VHlwZTJPZjM7XG5cbmNvbnN0IGNvbmZpZyA9IHsga3JzUHJvdmlkZXJzIH07XG5cbm5vY2suZGlzYWJsZU5ldENvbm5lY3QoKTtcblxuZnVuY3Rpb24gY29uZmlnT3ZlcnJpZGUoZjogKGNvbmZpZzogQ29uZmlnKSA9PiB2b2lkKSB7XG4gIGNvbnN0IGJhY2t1cCA9IHsgLi4ua3JzUHJvdmlkZXJzIH07XG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgZihjb25maWcpO1xuICB9KTtcbiAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgIE9iamVjdC5lbnRyaWVzKGJhY2t1cCkuZm9yRWFjaCgoW2ssIHZdKSA9PiB7XG4gICAgICBjb25maWdba10gPSB2O1xuICAgIH0pO1xuICB9KTtcbn1cblxuY29uc3Qgd2FsbGV0UGFzc3BocmFzZSA9ICdsb2wnO1xuXG50eXBlIE5hbWVkS2V5cyA9IHtcbiAgdXNlcktleTogc3RyaW5nO1xuICBiYWNrdXBLZXk6IHN0cmluZztcbiAgYml0Z29LZXk6IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIGdldE5hbWVkS2V5cyhbdXNlcktleSwgYmFja3VwS2V5LCBiaXRnb0tleV06IFRyaXBsZTxCSVAzMkludGVyZmFjZT4sIHBhc3N3b3JkOiBzdHJpbmcpOiBOYW1lZEtleXMge1xuICBmdW5jdGlvbiBlbmNvZGUoazogQklQMzJJbnRlcmZhY2UpOiBzdHJpbmcge1xuICAgIHJldHVybiBrLmlzTmV1dGVyZWQoKSA/IGsudG9CYXNlNTgoKSA6IGVuY3J5cHRLZXljaGFpbihwYXNzd29yZCwgdG9LZXljaGFpbkJhc2U1OChrKSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB1c2VyS2V5OiBlbmNvZGUodXNlcktleSksXG4gICAgYmFja3VwS2V5OiBlbmNvZGUoYmFja3VwS2V5KSxcbiAgICBiaXRnb0tleTogZW5jb2RlKGJpdGdvS2V5KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0S2V5c0ZvclVuc2lnbmVkU3dlZXAoW3VzZXJLZXksIGJhY2t1cEtleSwgYml0Z29LZXldOiBUcmlwbGU8QklQMzJJbnRlcmZhY2U+LCBwYXNzd29yZDogc3RyaW5nKTogTmFtZWRLZXlzIHtcbiAgcmV0dXJuIGdldE5hbWVkS2V5cyhbdXNlcktleS5uZXV0ZXJlZCgpLCBiYWNrdXBLZXkubmV1dGVyZWQoKSwgYml0Z29LZXkubmV1dGVyZWQoKV0sIHBhc3N3b3JkKTtcbn1cblxuZnVuY3Rpb24gZ2V0S2V5c0ZvcktleVJlY292ZXJ5U2VydmljZShcbiAgW3VzZXJLZXksIGJhY2t1cEtleSwgYml0Z29LZXldOiBUcmlwbGU8QklQMzJJbnRlcmZhY2U+LFxuICBwYXNzd29yZDogc3RyaW5nXG4pOiBOYW1lZEtleXMge1xuICByZXR1cm4gZ2V0TmFtZWRLZXlzKFt1c2VyS2V5LCBiYWNrdXBLZXkubmV1dGVyZWQoKSwgYml0Z29LZXkubmV1dGVyZWQoKV0sIHBhc3N3b3JkKTtcbn1cblxuZnVuY3Rpb24gZ2V0S2V5c0ZvckZ1bGxTaWduZWRSZWNvdmVyeShcbiAgW3VzZXJLZXksIGJhY2t1cEtleSwgYml0Z29LZXldOiBUcmlwbGU8QklQMzJJbnRlcmZhY2U+LFxuICBwYXNzd29yZDogc3RyaW5nXG4pOiBOYW1lZEtleXMge1xuICByZXR1cm4gZ2V0TmFtZWRLZXlzKFt1c2VyS2V5LCBiYWNrdXBLZXksIGJpdGdvS2V5Lm5ldXRlcmVkKCldLCBwYXNzd29yZCk7XG59XG5cbmNvbnN0IHdhbGxldEtleXMgPSBnZXREZWZhdWx0V2FsbGV0S2V5cygpO1xuY29uc3Qga2V5c1Vuc2lnbmVkU3dlZXAgPSBnZXRLZXlzRm9yVW5zaWduZWRTd2VlcCh3YWxsZXRLZXlzLnRyaXBsZSwgd2FsbGV0UGFzc3BocmFzZSk7XG5jb25zdCBrZXlzS2V5UmVjb3ZlcnlTZXJ2aWNlID0gZ2V0S2V5c0ZvcktleVJlY292ZXJ5U2VydmljZSh3YWxsZXRLZXlzLnRyaXBsZSwgd2FsbGV0UGFzc3BocmFzZSk7XG5jb25zdCBrZXlzRnVsbFNpZ25lZFJlY292ZXJ5ID0gZ2V0S2V5c0ZvckZ1bGxTaWduZWRSZWNvdmVyeSh3YWxsZXRLZXlzLnRyaXBsZSwgd2FsbGV0UGFzc3BocmFzZSk7XG5cbmNvbnN0IGV4b3RpY1VzZXJLZXlQYXRoID0gJzk5Lzk5JztcbmNvbnN0IGV4b3RpY1dhbGxldEtleXMgPSBuZXcgdXR4b2xpYi5iaXRnby5Sb290V2FsbGV0S2V5cyhrZXljaGFpbnMsIFtcbiAgZXhvdGljVXNlcktleVBhdGgsXG4gIHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXMuZGVmYXVsdFByZWZpeCxcbiAgdXR4b2xpYi5iaXRnby5Sb290V2FsbGV0S2V5cy5kZWZhdWx0UHJlZml4LFxuXSk7XG5jb25zdCBrZXlzRnVsbFNpZ25lZFJlY292ZXJ5RXhvdGljID0gZ2V0S2V5c0ZvckZ1bGxTaWduZWRSZWNvdmVyeShleG90aWNXYWxsZXRLZXlzLnRyaXBsZSwgd2FsbGV0UGFzc3BocmFzZSk7XG5cbmZ1bmN0aW9uIHJ1bihcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgc2NyaXB0VHlwZXM6IFNjcmlwdFR5cGUyT2YzW10sXG4gIHdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzLFxuICBwYXJhbXM6IHtcbiAgICBrZXlzOiBOYW1lZEtleXM7XG4gICAgdXNlcktleVBhdGg/OiBzdHJpbmc7XG4gICAga3JzUHJvdmlkZXI/OiBzdHJpbmc7XG4gICAgaGFzVXNlclNpZ25hdHVyZTogYm9vbGVhbjtcbiAgICBoYXNCYWNrdXBTaWduYXR1cmU6IGJvb2xlYW47XG4gICAgaGFzS3JzT3V0cHV0PzogYm9vbGVhbjtcbiAgfSxcbiAgdGFnczogc3RyaW5nW10gPSBbXVxuKSB7XG4gIGNvbnN0IGRlZmF1bHRGZWVSYXRlU2F0QiA9IDEwMDtcblxuICBkZXNjcmliZShgQmFja3VwIEtleSBSZWNvdmVyeSBbJHtbY29pbi5nZXRDaGFpbigpLCAuLi50YWdzLCBwYXJhbXMua3JzUHJvdmlkZXJdLmpvaW4oJywnKX1dYCwgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGV4dGVybmFsV2FsbGV0ID0gZ2V0V2FsbGV0S2V5cygnZXh0ZXJuYWwnKTtcbiAgICBjb25zdCByZWNvdmVyeURlc3RpbmF0aW9uID0gZ2V0V2FsbGV0QWRkcmVzcyhjb2luLm5ldHdvcmssIGV4dGVybmFsV2FsbGV0KTtcblxuICAgIGxldCBrZXlSZWNvdmVyeVNlcnZpY2VBZGRyZXNzOiBzdHJpbmc7XG4gICAgbGV0IHJlY292ZXJ5OiAoQmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbiB8IEZvcm1hdHRlZE9mZmxpbmVWYXVsdFR4SW5mbykgJiB7IHR4aWQ/OiBzdHJpbmcgfTtcbiAgICBsZXQgcmVjb3ZlcnlUeDogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248bnVtYmVyIHwgYmlnaW50PiB8IHV0eG9saWIuYml0Z28uVXR4b1BzYnQ7XG5cbiAgICAvLyAxZTggKiA5ZTcgPCA5LjAwN2UxNSBidXQgMmU4ICogOWU3ID4gOS4wMDdlMTUgdG8gdGVzdCBib3RoIGNvZGUgcGF0aHMgaW4gcXVlcnlCbG9ja2NoYWluVW5zcGVudHNQYXRoXG4gICAgY29uc3QgdmFsdWVNdWwgPSBjb2luLmFtb3VudFR5cGUgPT09ICdiaWdpbnQnID8gQmlnSW50KDllNykgOiBCaWdJbnQoMSk7XG4gICAgYmVmb3JlKCdtb2NrJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2lub24uc3R1YihDb2luZ2Vja29BcGkucHJvdG90eXBlLCAnZ2V0VVNEUHJpY2UnKS5yZXNvbHZlcyg2OV80MjApO1xuICAgIH0pO1xuXG4gICAgY29uZmlnT3ZlcnJpZGUoZnVuY3Rpb24gKGNvbmZpZzogQ29uZmlnKSB7XG4gICAgICBjb25zdCBjb25maWdLcnNQcm92aWRlcnMgPSB7IC4uLmNvbmZpZy5rcnNQcm92aWRlcnMgfTtcbiAgICAgIGNvbmZpZ0tyc1Byb3ZpZGVycy5kYWkuc3VwcG9ydGVkQ29pbnMgPSBbY29pbi5nZXRGYW1pbHkoKV07XG4gICAgICBjb25maWdLcnNQcm92aWRlcnMua2V5dGVybmFsLnN1cHBvcnRlZENvaW5zID0gW2NvaW4uZ2V0RmFtaWx5KCldO1xuICAgICAga2V5UmVjb3ZlcnlTZXJ2aWNlQWRkcmVzcyA9IGdldFdhbGxldEFkZHJlc3MoY29pbi5uZXR3b3JrLCBleHRlcm5hbFdhbGxldCwgMCwgMTAwKTtcbiAgICAgIGNvbmZpZ0tyc1Byb3ZpZGVycy5rZXl0ZXJuYWwuZmVlQWRkcmVzc2VzID0geyBbY29pbi5nZXRDaGFpbigpXToga2V5UmVjb3ZlcnlTZXJ2aWNlQWRkcmVzcyB9O1xuICAgICAgY29uZmlnLmtyc1Byb3ZpZGVycyA9IGNvbmZpZ0tyc1Byb3ZpZGVycztcbiAgICB9KTtcblxuICAgIGFmdGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGxldCByZWNvdmVyVW5zcGVudHM6IFVuc3BlbnQ8YmlnaW50PltdO1xuICAgIGxldCBtb2NrZWRBcGlVbnNwZW50czogVW5zcGVudDxiaWdpbnQ+W107XG5cbiAgICBiZWZvcmUoJ2NyZWF0ZSByZWNvdmVyeSBkYXRhJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy50aW1lb3V0KDEwXzAwMCk7XG4gICAgICByZWNvdmVyVW5zcGVudHMgPSBzY3JpcHRUeXBlcy5mbGF0TWFwKChzY3JpcHRUeXBlLCBpbmRleCkgPT4gW1xuICAgICAgICB1dHhvbGliLnRlc3R1dGlsLnRvVW5zcGVudCh7IHNjcmlwdFR5cGUsIHZhbHVlOiBCaWdJbnQoMWU4KSAqIHZhbHVlTXVsIH0sIGluZGV4LCBjb2luLm5ldHdvcmssIHdhbGxldEtleXMpLFxuICAgICAgICB1dHhvbGliLnRlc3R1dGlsLnRvVW5zcGVudCh7IHNjcmlwdFR5cGUsIHZhbHVlOiBCaWdJbnQoMmU4KSAqIHZhbHVlTXVsIH0sIGluZGV4LCBjb2luLm5ldHdvcmssIHdhbGxldEtleXMpLFxuICAgICAgICB1dHhvbGliLnRlc3R1dGlsLnRvVW5zcGVudCh7IHNjcmlwdFR5cGUsIHZhbHVlOiBCaWdJbnQoM2U4KSAqIHZhbHVlTXVsIH0sIGluZGV4LCBjb2luLm5ldHdvcmssIHdhbGxldEtleXMpLFxuICAgICAgXSk7XG5cbiAgICAgIC8vIElmIHRoZSBjb2luIGlzIGJjaCwgY29udmVydCB0aGUgbW9ja2VkIHVuc3BlbnQgYWRkcmVzcyB0byBjYXNoYWRkciBmb3JtYXQgc2luY2UgdGhhdCBpcyB0aGUgZm9ybWF0IHRoYXQgYmxvY2tjaGFpclxuICAgICAgLy8gcmV0dXJucyBvbiB0aGUgL2Rhc2hib2FyZHMvYWRkcmVzc2VzIHJlc3BvbnNlXG4gICAgICBtb2NrZWRBcGlVbnNwZW50cyA9XG4gICAgICAgIGNvaW4uZ2V0Q2hhaW4oKSA9PT0gJ2JjaCcgfHwgY29pbi5nZXRDaGFpbigpID09PSAnYmNoYSdcbiAgICAgICAgICA/IHJlY292ZXJVbnNwZW50cy5tYXAoKHUpID0+ICh7IC4uLnUsIGFkZHJlc3M6IGNvaW4uY2Fub25pY2FsQWRkcmVzcyh1LmFkZHJlc3MsICdjYXNoYWRkcicpLnNwbGl0KCc6JylbMV0gfSkpXG4gICAgICAgICAgOiByZWNvdmVyVW5zcGVudHM7XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChtb2NrZWRBcGlVbnNwZW50cy5sZW5ndGgsIHJlY292ZXJVbnNwZW50cy5sZW5ndGgpO1xuICAgICAgcmVjb3ZlcnkgPSBhd2FpdCBiYWNrdXBLZXlSZWNvdmVyeShjb2luLCBkZWZhdWx0Qml0R28sIHtcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgICAgc2NhbjogNSxcbiAgICAgICAgaWdub3JlQWRkcmVzc1R5cGVzOiBbXSxcbiAgICAgICAgdXNlcktleVBhdGg6IHBhcmFtcy51c2VyS2V5UGF0aCxcbiAgICAgICAga3JzUHJvdmlkZXI6IHBhcmFtcy5rcnNQcm92aWRlcixcbiAgICAgICAgLi4ucGFyYW1zLmtleXMsXG4gICAgICAgIHJlY292ZXJ5UHJvdmlkZXI6IG5ldyBNb2NrUmVjb3ZlcnlQcm92aWRlcihtb2NrZWRBcGlVbnNwZW50cyksXG4gICAgICAgIGZlZVJhdGU6IGRlZmF1bHRGZWVSYXRlU2F0QixcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdHhIZXggPVxuICAgICAgICAocmVjb3ZlcnkgYXMgQmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbikudHJhbnNhY3Rpb25IZXggPz8gKHJlY292ZXJ5IGFzIEZvcm1hdHRlZE9mZmxpbmVWYXVsdFR4SW5mbykudHhIZXg7XG4gICAgICBjb25zdCBpc1BzYnQgPSB1dHhvbGliLmJpdGdvLmlzUHNidCh0eEhleCk7XG4gICAgICByZWNvdmVyeVR4ID0gaXNQc2J0XG4gICAgICAgID8gdXR4b2xpYi5iaXRnby5jcmVhdGVQc2J0RnJvbUhleCh0eEhleCwgY29pbi5uZXR3b3JrKVxuICAgICAgICA6IHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tSGV4KHR4SGV4IGFzIHN0cmluZywgY29pbi5uZXR3b3JrLCBjb2luLmFtb3VudFR5cGUpO1xuICAgICAgcmVjb3ZlcnkudHhpZCA9XG4gICAgICAgIHJlY292ZXJ5VHggaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0ID8gcmVjb3ZlcnlUeC5nZXRVbnNpZ25lZFR4KCkuZ2V0SWQoKSA6IHJlY292ZXJ5VHguZ2V0SWQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdoYXMgY29ycmVjdCByZWNvdmVyeSBwcm92aWRlciBtb2NrcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlY292ZXJ5UHJvdmlkZXIgPSBuZXcgTW9ja1JlY292ZXJ5UHJvdmlkZXIobW9ja2VkQXBpVW5zcGVudHMpO1xuICAgICAgKGF3YWl0IHJlY292ZXJ5UHJvdmlkZXIuZ2V0VW5zcGVudHNGb3JBZGRyZXNzZXMobW9ja2VkQXBpVW5zcGVudHMubWFwKCh1KSA9PiB1LmFkZHJlc3MpKSkubGVuZ3RoLnNob3VsZC5lcWwoXG4gICAgICAgIG1vY2tlZEFwaVVuc3BlbnRzLmxlbmd0aFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdoYXMgZXhwZWN0ZWQgZmVlIHJhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIShyZWNvdmVyeVR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidCkpIHtcbiAgICAgICAgdGhpcy5za2lwKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBpbnB1dFN1bSA9IHV0eG9saWIuYml0Z28udW5zcGVudFN1bShyZWNvdmVyVW5zcGVudHMsICdiaWdpbnQnKTtcbiAgICAgIGNvbnN0IG91dHB1dFN1bSA9IHJlY292ZXJ5VHgudHhPdXRwdXRzLnJlZHVjZSgoc3VtLCBvKSA9PiBzdW0gKyBvLnZhbHVlLCBCaWdJbnQoMCkpO1xuICAgICAgY29uc3QgZmVlID0gaW5wdXRTdW0gLSBvdXRwdXRTdW07XG4gICAgICAvLyBVc2Ugd2FzbS11dHhvIERpbWVuc2lvbnMgZm9yIHRlc3RuZXQgKG1hdGNoZXMgaG93IGZlZSB3YXMgY2FsY3VsYXRlZCksIHV0eG9saWIgRGltZW5zaW9ucyBmb3IgbWFpbm5ldFxuICAgICAgY29uc3QgbmV0d29ya05hbWUgPSB1dHhvbGliLmdldE5ldHdvcmtOYW1lKGNvaW4ubmV0d29yayk7XG4gICAgICBpZiAoIW5ldHdvcmtOYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBuZXR3b3JrJyk7XG4gICAgICB9XG4gICAgICBjb25zdCB3YXNtUHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5mcm9tQnl0ZXMobmV3IFVpbnQ4QXJyYXkocmVjb3ZlcnlUeC50b0J1ZmZlcigpKSwgbmV0d29ya05hbWUpO1xuICAgICAgY29uc3QgdnNpemUgPSBmaXhlZFNjcmlwdFdhbGxldC5EaW1lbnNpb25zLmZyb21Qc2J0KHdhc21Qc2J0KS5nZXRWU2l6ZSgpO1xuICAgICAgY29uc3QgZmVlUmF0ZVNhdEIgPSBOdW1iZXIoZmVlKSAvIHZzaXplO1xuICAgICAgY29uc3QgZGlmZiA9IE1hdGguYWJzKGZlZVJhdGVTYXRCIC0gZGVmYXVsdEZlZVJhdGVTYXRCKSAvIGRlZmF1bHRGZWVSYXRlU2F0QjtcbiAgICAgIC8vIHdpdGhpbiAxJVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGRpZmYgPCAwLjAxLCB0cnVlLCBgZXhwZWN0ZWQgZmVlIHJhdGUgJHtkZWZhdWx0RmVlUmF0ZVNhdEJ9IGJ1dCBnb3QgJHtmZWVSYXRlU2F0Qn1gKTtcbiAgICB9KTtcblxuICAgIGl0KCdtYXRjaGVzIGZpeHR1cmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBmaXh0dXJlQ29pbiA9IGdldE5vcm1hbFRlc3RuZXRDb2luKGNvaW4pO1xuICAgICAgY29uc3QgZml4dHVyZVJlY292ZXJ5ID0geyAuLi5yZWNvdmVyeSB9O1xuICAgICAgaWYgKGZpeHR1cmVSZWNvdmVyeS5jb2luKSB7XG4gICAgICAgIGZpeHR1cmVSZWNvdmVyeS5jb2luID0gZml4dHVyZUNvaW4uZ2V0Q2hhaW4oKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RvcmVkRml4dHVyZSA9IGF3YWl0IGdldEZpeHR1cmUoXG4gICAgICAgIGZpeHR1cmVDb2luLFxuICAgICAgICBgcmVjb3ZlcnkvYmFja3VwS2V5UmVjb3ZlcnktJHsocGFyYW1zLmtyc1Byb3ZpZGVyID8gdGFncy5jb25jYXQoW3BhcmFtcy5rcnNQcm92aWRlcl0pIDogdGFncykuam9pbignLScpfWAsXG4gICAgICAgIHJlY292ZXJ5XG4gICAgICApO1xuXG4gICAgICBpZiAoJ3R4SGV4JyBpbiBzdG9yZWRGaXh0dXJlKSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKHN0b3JlZEZpeHR1cmUudHhIZXgsICdoZXgnKTtcbiAgICAgICAgaWYgKGhhc1BzYnRNYWdpYyhidWYpKSB7XG4gICAgICAgICAgYXNzZXJ0RXF1YWxQYXJzZWRQc2J0KGJ1ZiwgcmVjb3ZlcnlUeC50b0J1ZmZlcigpLCBjb2luLm5hbWUsIHdhbGxldEtleXMsIFtcbiAgICAgICAgICAgIEVDUGFpci5mcm9tUHVibGljS2V5KHdhbGxldEtleXMudXNlci5wdWJsaWNLZXkpLFxuICAgICAgICAgIF0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzaG91bGRFcXVhbEpTT04oZml4dHVyZVJlY292ZXJ5LCBzdG9yZWRGaXh0dXJlKTtcbiAgICB9KTtcblxuICAgIGl0KCdoYXMgZXhwZWN0ZWQgaW5wdXQgY291bnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAocmVjb3ZlcnlUeCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnQgPyByZWNvdmVyeVR4LmRhdGEuaW5wdXRzIDogcmVjb3ZlcnlUeC5pbnMpLmxlbmd0aC5zaG91bGQuZXFsKFxuICAgICAgICByZWNvdmVyVW5zcGVudHMubGVuZ3RoXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gY2hlY2tJbnB1dHNTaWduZWRCeShcbiAgICAgIHR4OiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxudW1iZXIgfCBiaWdpbnQ+IHwgdXR4b2xpYi5iaXRnby5VdHhvUHNidCxcbiAgICAgIHJvb3RLZXk6IEJJUDMySW50ZXJmYWNlLFxuICAgICAgZXhwZWN0Q291bnQ6IG51bWJlclxuICAgICkge1xuICAgICAgaWYgKHR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidCkge1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZSh0eDogdXR4b2xpYi5iaXRnby5VdHhvUHNidCwgaW5wdXRJbmRleDogbnVtYmVyKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB0eC52YWxpZGF0ZVNpZ25hdHVyZXNPZklucHV0SEQoaW5wdXRJbmRleCwgcm9vdEtleSk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUubWVzc2FnZSA9PT0gJ05vIHNpZ25hdHVyZXMgdG8gdmFsaWRhdGUnKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHR4LmRhdGEuaW5wdXRzLmZvckVhY2goKGlucHV0LCBpbnB1dEluZGV4KSA9PiB7XG4gICAgICAgICAgdmFsaWRhdGUodHgsIGlucHV0SW5kZXgpLnNob3VsZC5lcWwoISFleHBlY3RDb3VudCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcHJldk91dHB1dHMgPSByZWNvdmVyVW5zcGVudHNcbiAgICAgICAgICAubWFwKCh1KSA9PiB0b091dHB1dCh1LCBjb2luLm5ldHdvcmspKVxuICAgICAgICAgIC5tYXAoKHYpID0+ICh7IC4uLnYsIHZhbHVlOiB1dHhvbGliLmJpdGdvLnRvVE51bWJlcih2LnZhbHVlLCBjb2luLmFtb3VudFR5cGUpIH0pKTtcbiAgICAgICAgdHguaW5zLmZvckVhY2goKGlucHV0LCBpbnB1dEluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgdW5zcGVudCA9IHJlY292ZXJVbnNwZW50c1tpbnB1dEluZGV4XSBhcyBXYWxsZXRVbnNwZW50PGJpZ2ludD47XG4gICAgICAgICAgY29uc3QgeyBwdWJsaWNLZXkgfSA9IHJvb3RLZXkuZGVyaXZlUGF0aCh3YWxsZXRLZXlzLmdldERlcml2YXRpb25QYXRoKHJvb3RLZXksIHVuc3BlbnQuY2hhaW4sIHVuc3BlbnQuaW5kZXgpKTtcbiAgICAgICAgICBjb25zdCBzaWduYXR1cmVzID0gdXR4b2xpYi5iaXRnb1xuICAgICAgICAgICAgLmdldFNpZ25hdHVyZVZlcmlmaWNhdGlvbnMoXG4gICAgICAgICAgICAgIHR4LFxuICAgICAgICAgICAgICBpbnB1dEluZGV4LFxuICAgICAgICAgICAgICB1dHhvbGliLmJpdGdvLnRvVE51bWJlcih1bnNwZW50LnZhbHVlLCBjb2luLmFtb3VudFR5cGUpLFxuICAgICAgICAgICAgICB7IHB1YmxpY0tleSB9LFxuICAgICAgICAgICAgICBwcmV2T3V0cHV0c1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmZpbHRlcigocykgPT4gcy5zaWduZWRCeSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICBzaWduYXR1cmVzLmxlbmd0aC5zaG91bGQuZXFsKGV4cGVjdENvdW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaXQoKHBhcmFtcy5oYXNVc2VyU2lnbmF0dXJlID8gJ2hhcycgOiAnaGFzIG5vJykgKyAnIHVzZXIgc2lnbmF0dXJlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY2hlY2tJbnB1dHNTaWduZWRCeShyZWNvdmVyeVR4LCB3YWxsZXRLZXlzLnVzZXIsIHBhcmFtcy5oYXNVc2VyU2lnbmF0dXJlID8gMSA6IDApO1xuICAgIH0pO1xuXG4gICAgaXQoKHBhcmFtcy5oYXNCYWNrdXBTaWduYXR1cmUgPyAnaGFzJyA6ICdoYXMgbm8nKSArICcgYmFja3VwIHNpZ25hdHVyZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoZWNrSW5wdXRzU2lnbmVkQnkocmVjb3ZlcnlUeCwgd2FsbGV0S2V5cy5iYWNrdXAsIHBhcmFtcy5oYXNCYWNrdXBTaWduYXR1cmUgPyAxIDogMCk7XG4gICAgfSk7XG5cbiAgICBpZiAocGFyYW1zLmhhc1VzZXJTaWduYXR1cmUgJiYgcGFyYW1zLmhhc0JhY2t1cFNpZ25hdHVyZSkge1xuICAgICAgaXQoJ2hhcyBubyBwbGFjZWhvbGRlciBzaWduYXR1cmVzJywgZnVuY3Rpb24gKHRoaXM6IG1vY2hhLkNvbnRleHQpIHtcbiAgICAgICAgaWYgKHJlY292ZXJ5VHggaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbikge1xuICAgICAgICAgIHJlY292ZXJ5VHguaW5zLmZvckVhY2goKGlucHV0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSB1dHhvbGliLmJpdGdvLnBhcnNlU2lnbmF0dXJlU2NyaXB0KGlucHV0KTtcbiAgICAgICAgICAgIHN3aXRjaCAocGFyc2VkLnNjcmlwdFR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSAncDJzaCc6XG4gICAgICAgICAgICAgIGNhc2UgJ3Ayc2hQMndzaCc6XG4gICAgICAgICAgICAgIGNhc2UgJ3Ayd3NoJzpcbiAgICAgICAgICAgICAgY2FzZSAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCc6XG4gICAgICAgICAgICAgICAgcGFyc2VkLnNpZ25hdHVyZXMuZm9yRWFjaCgoc2lnbmF0dXJlLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAodXR4b2xpYi5iaXRnby5pc1BsYWNlaG9sZGVyU2lnbmF0dXJlKHNpZ25hdHVyZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwbGFjZWhvbGRlciBzaWduYXR1cmUgYXQgaW5kZXggJHtpfWApO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCBzY3JpcHRUeXBlICR7cGFyc2VkLnNjcmlwdFR5cGV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5za2lwKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGl0KChwYXJhbXMuaGFzS3JzT3V0cHV0ID8gJ2hhcycgOiAnaGFzIG5vJykgKyAnIGtleSByZWNvdmVyeSBzZXJ2aWNlIG91dHB1dCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG91dHMgPSByZWNvdmVyeVR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidCA/IHJlY292ZXJ5VHguZ2V0VW5zaWduZWRUeCgpLm91dHMgOiByZWNvdmVyeVR4Lm91dHM7XG4gICAgICBvdXRzLmxlbmd0aC5zaG91bGQuZXFsKDEpO1xuICAgICAgY29uc3Qgb3V0cHV0QWRkcmVzc2VzID0gb3V0cy5tYXAoKG8pID0+XG4gICAgICAgIHdhc21BZGRyZXNzLmZyb21PdXRwdXRTY3JpcHRXaXRoQ29pbihvLnNjcmlwdCwgZ2V0Q29pbk5hbWUocmVjb3ZlcnlUeC5uZXR3b3JrKSlcbiAgICAgICk7XG4gICAgICBvdXRwdXRBZGRyZXNzZXNcbiAgICAgICAgLmluY2x1ZGVzKGtleVJlY292ZXJ5U2VydmljZUFkZHJlc3MpXG4gICAgICAgIC5zaG91bGQuZXFsKCEhcGFyYW1zLmhhc0tyc091dHB1dCAmJiBwYXJhbXMua3JzUHJvdmlkZXIgPT09ICdrZXl0ZXJuYWwnKTtcbiAgICAgIG91dHB1dEFkZHJlc3Nlcy5pbmNsdWRlcyhyZWNvdmVyeURlc3RpbmF0aW9uKS5zaG91bGQuZXFsKHRydWUpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcnVuV2l0aFNjcmlwdFR5cGVzKFxuICBzY3JpcHRUeXBlczogU2NyaXB0VHlwZTJPZjNbXSxcbiAgeyBydW5LZXlQcm92aWRlclRlc3RzID0gdHJ1ZSB9OiB7IHJ1bktleVByb3ZpZGVyVGVzdHM/OiBib29sZWFuIH0gPSB7fVxuKSB7XG4gIHV0eG9Db2luc1xuICAgIC5maWx0ZXIoKGNvaW4pID0+IHNjcmlwdFR5cGVzLmV2ZXJ5KCh0eXBlKSA9PiBjb2luLnN1cHBvcnRzQWRkcmVzc1R5cGUodHlwZSkpKVxuICAgIC5mb3JFYWNoKChjb2luKSA9PiB7XG4gICAgICBydW4oXG4gICAgICAgIGNvaW4sXG4gICAgICAgIHNjcmlwdFR5cGVzLFxuICAgICAgICB3YWxsZXRLZXlzLFxuICAgICAgICB7XG4gICAgICAgICAga2V5czoga2V5c1Vuc2lnbmVkU3dlZXAsXG4gICAgICAgICAgaGFzVXNlclNpZ25hdHVyZTogZmFsc2UsXG4gICAgICAgICAgaGFzQmFja3VwU2lnbmF0dXJlOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAgWyd1bnNpZ25lZFJlY292ZXJ5JywgLi4uc2NyaXB0VHlwZXNdXG4gICAgICApO1xuXG4gICAgICBpZiAocnVuS2V5UHJvdmlkZXJUZXN0cykge1xuICAgICAgICBbJ2RhaScsICdrZXl0ZXJuYWwnXS5mb3JFYWNoKChrcnNQcm92aWRlcikgPT4ge1xuICAgICAgICAgIHJ1bihcbiAgICAgICAgICAgIGNvaW4sXG4gICAgICAgICAgICBzY3JpcHRUeXBlcyxcbiAgICAgICAgICAgIHdhbGxldEtleXMsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGtleXM6IGtleXNLZXlSZWNvdmVyeVNlcnZpY2UsXG4gICAgICAgICAgICAgIGtyc1Byb3ZpZGVyOiBrcnNQcm92aWRlcixcbiAgICAgICAgICAgICAgaGFzVXNlclNpZ25hdHVyZTogdHJ1ZSxcbiAgICAgICAgICAgICAgaGFzQmFja3VwU2lnbmF0dXJlOiBmYWxzZSxcbiAgICAgICAgICAgICAgaGFzS3JzT3V0cHV0OiBmYWxzZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbJ2tleVJlY292ZXJ5U2VydmljZScsIC4uLnNjcmlwdFR5cGVzXVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBydW4oXG4gICAgICAgIGNvaW4sXG4gICAgICAgIHNjcmlwdFR5cGVzLFxuICAgICAgICB3YWxsZXRLZXlzLFxuICAgICAgICB7XG4gICAgICAgICAga2V5czoga2V5c0Z1bGxTaWduZWRSZWNvdmVyeSxcbiAgICAgICAgICBoYXNVc2VyU2lnbmF0dXJlOiB0cnVlLFxuICAgICAgICAgIGhhc0JhY2t1cFNpZ25hdHVyZTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgWydmdWxsU2lnbmVkUmVjb3ZlcnknLCAuLi5zY3JpcHRUeXBlc11cbiAgICAgICk7XG5cbiAgICAgIHJ1bihcbiAgICAgICAgY29pbixcbiAgICAgICAgc2NyaXB0VHlwZXMsXG4gICAgICAgIGV4b3RpY1dhbGxldEtleXMsXG4gICAgICAgIHtcbiAgICAgICAgICBrZXlzOiBrZXlzRnVsbFNpZ25lZFJlY292ZXJ5RXhvdGljLFxuICAgICAgICAgIHVzZXJLZXlQYXRoOiBleG90aWNVc2VyS2V5UGF0aCxcbiAgICAgICAgICBoYXNVc2VyU2lnbmF0dXJlOiB0cnVlLFxuICAgICAgICAgIGhhc0JhY2t1cFNpZ25hdHVyZTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgWydmdWxsU2lnbmVkUmVjb3ZlcnknLCAnY3VzdG9tVXNlcktleVBhdGgnLCAuLi5zY3JpcHRUeXBlc11cbiAgICAgICk7XG4gICAgfSk7XG59XG5cbmRlc2NyaWJlKCdCYWNrdXAgS2V5IFJlY292ZXJ5JywgZnVuY3Rpb24gKCkge1xuICAvLyBjb21wYXRpYmxlIHdpdGggYWxsIGNvaW5zXG4gIHJ1bldpdGhTY3JpcHRUeXBlcyhbJ3Ayc2gnXSk7XG5cbiAgLy8gc2Vnd2l0IGNvbXBhdGlibGUgY29pbnNcbiAgcnVuV2l0aFNjcmlwdFR5cGVzKFsncDJzaFAyd3NoJywgJ3Ayd3NoJ10pO1xuXG4gIC8vIHRhcHJvb3QgY29tcGF0aWJsZSBjb2luc1xuICBydW5XaXRoU2NyaXB0VHlwZXMoWydwMnRyJywgJ3AydHJNdXNpZzInXSwgeyBydW5LZXlQcm92aWRlclRlc3RzOiBmYWxzZSB9KTtcbn0pO1xuIl19
|
|
@@ -38,6 +38,7 @@ const should = require("should");
|
|
|
38
38
|
const nock = require("nock");
|
|
39
39
|
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
40
40
|
const sdk_test_1 = require("@bitgo-beta/sdk-test");
|
|
41
|
+
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
41
42
|
const sinon = __importStar(require("sinon"));
|
|
42
43
|
const src_1 = require("../../../src");
|
|
43
44
|
const names_1 = require("../../../src/names");
|
|
@@ -271,14 +272,22 @@ describe(`Cross-Chain Recovery getWallet`, async function () {
|
|
|
271
272
|
});
|
|
272
273
|
});
|
|
273
274
|
describe('convertLtcAddressToLegacyFormat', function () {
|
|
275
|
+
const scriptPubKey = Buffer.from('a9149f0bf51fab4d33ab21977e1b89f776f64161ef4287', 'hex');
|
|
274
276
|
it('should convert M... P2SH address to 3... legacy format', function () {
|
|
275
277
|
// These two addresses represent the same underlying script hash:
|
|
276
278
|
// - MNQ7zkgMsaV67rsjA3JuP59RC5wxRXpwgE is the LTC format (scriptHash 0x32)
|
|
277
279
|
// - 3GBygsGPvTdfKMbq4AKZZRu1sPMWPEsBfd is the BTC format (scriptHash 0x05)
|
|
278
|
-
const ltcAddress = 'MNQ7zkgMsaV67rsjA3JuP59RC5wxRXpwgE';
|
|
279
|
-
const
|
|
280
|
+
// const ltcAddress = 'MNQ7zkgMsaV67rsjA3JuP59RC5wxRXpwgE';
|
|
281
|
+
const ltcAddress = wasm_utxo_1.address.fromOutputScriptWithCoin(scriptPubKey, 'ltc');
|
|
282
|
+
const tltcAddress = wasm_utxo_1.address.fromOutputScriptWithCoin(scriptPubKey, 'tltc');
|
|
283
|
+
assert.strictEqual(ltcAddress, 'MNQ7zkgMsaV67rsjA3JuP59RC5wxRXpwgE');
|
|
284
|
+
assert.strictEqual(tltcAddress, 'Qb6wsd4fZ2C6fKzRMPyTG5KiE81W6QCxhU');
|
|
280
285
|
const legacyAddress = (0, src_1.convertLtcAddressToLegacyFormat)(ltcAddress, 'ltc');
|
|
281
|
-
|
|
286
|
+
const expectedLtcLegacyAddress = '3GBygsGPvTdfKMbq4AKZZRu1sPMWPEsBfd';
|
|
287
|
+
assert.strictEqual(legacyAddress, expectedLtcLegacyAddress);
|
|
288
|
+
const expectedTltcLegacyAddress = '2N7kBkcCRXv91X9ENjHwSBNtH5jZg8yye6r';
|
|
289
|
+
const tltcLegacyAddress = (0, src_1.convertLtcAddressToLegacyFormat)(tltcAddress, 'tltc');
|
|
290
|
+
assert.strictEqual(tltcLegacyAddress, expectedTltcLegacyAddress);
|
|
282
291
|
});
|
|
283
292
|
it('should convert MD68PsdheKxcYsrVLyZRXgoSDLnB1MdVtE to legacy format', function () {
|
|
284
293
|
const address = 'MD68PsdheKxcYsrVLyZRXgoSDLnB1MdVtE';
|
|
@@ -292,4 +301,4 @@ describe('convertLtcAddressToLegacyFormat', function () {
|
|
|
292
301
|
assert.strictEqual(result, bech32Address);
|
|
293
302
|
});
|
|
294
303
|
});
|
|
295
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvc3NDaGFpblJlY292ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L3JlY292ZXJ5L2Nyb3NzQ2hhaW5SZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUVqQyxpQ0FBa0M7QUFDbEMsNkJBQThCO0FBQzlCLDhEQUFnRDtBQUVoRCxtREFBK0M7QUFDL0MsNkNBQStCO0FBRS9CLHNDQVFzQjtBQUN0Qiw4Q0FBa0U7QUFFbEUsa0NBVWlCO0FBQ2pCLGlEQUE4QztBQUM5QyxxREFBa0U7QUFDbEUsaURBQWtFO0FBRWxFLGlDQUF3RDtBQUV4RCxTQUFTLFFBQVEsQ0FBQyxDQUFpQjtJQUNqQyxPQUFPLElBQUEsa0JBQU8sRUFBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxJQUFzQixFQUFFLFFBQWdCLEVBQUUsVUFBa0M7SUFDOUYsT0FBTztRQUNMLElBQUEscUJBQVMsR0FBRTthQUNSLEdBQUcsQ0FBQyxXQUFXLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxRQUFRLEVBQUUsQ0FBQzthQUNwRCxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ1YsRUFBRSxFQUFFLFFBQVE7WUFDWixJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNyQixLQUFLLEVBQUUsb0JBQW9CO1lBQzNCLElBQUksRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekMsQ0FBQzthQUNELE9BQU8sRUFBRTtRQUNaLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ3RCLElBQUEscUJBQVMsR0FBRTth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TUFBTSxVQUFVLEdBQUcsb0NBQW9DLENBQUM7UUFDeEQsTUFBTSxxQkFBcUIsR0FBRyxvQ0FBb0MsQ0FBQztRQUVuRSxNQUFNLGFBQWEsR0FBRyxJQUFBLHFDQUErQixFQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6RSxNQUFNLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQzNELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLG9FQUFvRSxFQUFFO1FBQ3ZFLE1BQU0sT0FBTyxHQUFHLG9DQUFvQyxDQUFDO1FBQ3JELE1BQU0sYUFBYSxHQUFHLElBQUEscUNBQStCLEVBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXRFLGlEQUFpRDtRQUNqRCxNQUFNLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsNENBQTRDLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDeEcsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsb0NBQW9DLEVBQUU7UUFDdkMsTUFBTSxhQUFhLEdBQUcsNkNBQTZDLENBQUM7UUFDcEUsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQ0FBK0IsRUFBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDckUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDNUMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgc2hvdWxkID0gcmVxdWlyZSgnc2hvdWxkJyk7XG5pbXBvcnQgbm9jayA9IHJlcXVpcmUoJ25vY2snKTtcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgVHJpcGxlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgZ2V0U2VlZCB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay10ZXN0JztcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcblxuaW1wb3J0IHtcbiAgQWJzdHJhY3RVdHhvQ29pbixcbiAgQ3Jvc3NDaGFpblJlY292ZXJ5U2lnbmVkLFxuICBDcm9zc0NoYWluUmVjb3ZlcnlVbnNpZ25lZCxcbiAgZ2V0V2FsbGV0LFxuICBzdXBwb3J0ZWRDcm9zc0NoYWluUmVjb3ZlcmllcyxcbiAgZ2VuZXJhdGVBZGRyZXNzLFxuICBjb252ZXJ0THRjQWRkcmVzc1RvTGVnYWN5Rm9ybWF0LFxufSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHsgaXNNYWlubmV0Q29pbiwgaXNUZXN0bmV0Q29pbiB9IGZyb20gJy4uLy4uLy4uL3NyYy9uYW1lcyc7XG5pbXBvcnQgdHlwZSB7IFVuc3BlbnQsIFdhbGxldFVuc3BlbnQgfSBmcm9tICcuLi8uLi8uLi9zcmMvdW5zcGVudCc7XG5pbXBvcnQge1xuICBnZXRGaXh0dXJlLFxuICBrZXljaGFpbnNCYXNlNTgsXG4gIEtleWNoYWluQmFzZTU4LFxuICBtb2NrVW5zcGVudCxcbiAgc2hvdWxkRXF1YWxKU09OLFxuICB1dHhvQ29pbnMsXG4gIGdldERlZmF1bHRXYWxsZXRLZXlzLFxuICBkZWZhdWx0Qml0R28sXG4gIGdldFV0eG9Db2luLFxufSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7IG5vY2tCaXRHbyB9IGZyb20gJy4uL3V0aWwvbm9ja0JpdEdvJztcbmltcG9ydCB7IGNyZWF0ZUZ1bGxTaWduZWRUcmFuc2FjdGlvbiB9IGZyb20gJy4uL3V0aWwvdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdFdhbGxldFVuc3BlbnRTaWduZXIgfSBmcm9tICcuLi91dGlsL2tleWNoYWlucyc7XG5cbmltcG9ydCB7IE1vY2tDcm9zc0NoYWluUmVjb3ZlcnlQcm92aWRlciB9IGZyb20gJy4vbW9jayc7XG5cbmZ1bmN0aW9uIGdldEtleUlkKGs6IEtleWNoYWluQmFzZTU4KTogc3RyaW5nIHtcbiAgcmV0dXJuIGdldFNlZWQoay5wdWIpLnRvU3RyaW5nKCdoZXgnKTtcbn1cblxuZnVuY3Rpb24gbm9ja1dhbGxldChjb2luOiBBYnN0cmFjdFV0eG9Db2luLCB3YWxsZXRJZDogc3RyaW5nLCB3YWxsZXRLZXlzOiBUcmlwbGU8S2V5Y2hhaW5CYXNlNTg+KTogbm9jay5TY29wZVtdIHtcbiAgcmV0dXJuIFtcbiAgICBub2NrQml0R28oKVxuICAgICAgLmdldChgL2FwaS92Mi8ke2NvaW4uZ2V0Q2hhaW4oKX0vd2FsbGV0LyR7d2FsbGV0SWR9YClcbiAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgaWQ6IHdhbGxldElkLFxuICAgICAgICBjb2luOiBjb2luLmdldENoYWluKCksXG4gICAgICAgIGxhYmVsOiAnY3Jvc3NDaGFpblJlY292ZXJ5JyxcbiAgICAgICAga2V5czogd2FsbGV0S2V5cy5tYXAoKGspID0+IGdldEtleUlkKGspKSxcbiAgICAgIH0pXG4gICAgICAucGVyc2lzdCgpLFxuICAgIC4uLndhbGxldEtleXMubWFwKChrKSA9PlxuICAgICAgbm9ja0JpdEdvKClcbiAgICAgICAgLmdldChgL2FwaS92Mi8ke2NvaW4uZ2V0Q2hhaW4oKX0va2V5LyR7Z2V0S2V5SWQoayl9YClcbiAgICAgICAgLnJlcGx5KDIwMCwgaylcbiAgICAgICAgLnBlcnNpc3QoKVxuICAgICksXG4gIF07XG59XG5cbnR5cGUgQWRkcmVzcyA9IHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICBjaGFpbjogbnVtYmVyO1xuICBpbmRleDogbnVtYmVyO1xufTtcblxuZnVuY3Rpb24gbm9ja1dhbGxldEFkZHJlc3MoY29pbjogQWJzdHJhY3RVdHhvQ29pbiwgd2FsbGV0SWQ6IHN0cmluZywgYWRkcmVzczogQWRkcmVzcyk6IG5vY2suU2NvcGUge1xuICByZXR1cm4gbm9ja0JpdEdvKClcbiAgICAuZ2V0KGAvYXBpL3YyLyR7Y29pbi5nZXRDaGFpbigpfS93YWxsZXQvJHt3YWxsZXRJZH0vYWRkcmVzcy8ke2FkZHJlc3MuYWRkcmVzc31gKVxuICAgIC5yZXBseSgyMDAsIHtcbiAgICAgIGFkZHJlc3M6IGFkZHJlc3MuYWRkcmVzcyxcbiAgICAgIGNoYWluOiBhZGRyZXNzLmNoYWluLFxuICAgICAgaW5kZXg6IGFkZHJlc3MuaW5kZXgsXG4gICAgICBjb2luOiBjb2luLmdldENoYWluKCksXG4gICAgICB3YWxsZXQ6IHdhbGxldElkLFxuICAgIH0pXG4gICAgLnBlcnNpc3QoKTtcbn1cblxuLyoqXG4gKiBTZXR1cCB0ZXN0IGZvciBjcm9zcy1jaGFpbiByZWNvdmVyeS5cbiAqXG4gKiBVc2VycyBjYW4gcmVjZWl2ZSBkZXBvc2l0cyBvbiB3YWxsZXQgYWRkcmVzc2VzIHRoYXQgYXJlIG9uIGEgZGlmZmVyZW50IGNoYWluLlxuICpcbiAqIEZvciBpbnN0YW5jZSwgYSB1c2VyIGNhbiByZWNlaXZlIGxpdGVjb2luIG9uIGEgYml0Y29pbiB3YWxsZXQuXG4gKiBUaGlzIG1lYW5zIHRoYXQgdGhlIGxpdGVjb2luIGJsb2NrY2hhaW4gaGFzIGEgdHJhbnNhY3Rpb24gd2l0aCBvdXRwdXRzIHRoYXQgYXJlIHNwZW5kYWJsZVxuICogd2l0aCBrZXlzIHRoYXQgd2VyZSBvcmlnaW5hbGx5IGNyZWF0ZWQgZm9yIGEgQml0R28gQlRDIHdhbGxldC5cbiAqIEluIHRoaXMgZXhhbXBsZSwgTFRDIGlzIHRoZSBcInNvdXJjZSBjb2luXCIgYW5kIEJUQyBpcyB0aGUgXCJyZWNvdmVyeSBjb2luXCJcbiAqIEluIGNhc2VzIGxpa2UgdGhlc2Ugd2UgbXVzdCB1c2UgY29uc3RydWN0IGEgdHJhbnNhY3Rpb24gZm9yIGxpdGVjb2luIG5ldHdvcmsgdXNpbmcga2V5cyBvZiB0aGVcbiAqIGJpdGNvaW4gd2FsbGV0LlxuICpcbiAqIEBwYXJhbSBzb3VyY2VDb2luIC0gdGhlIGNvaW4gdG8gY29uc3RydWN0IHRoZSB0cmFuc2FjdGlvbiBmb3JcbiAqIEBwYXJhbSByZWNvdmVyeUNvaW4gLSB0aGUgY29pbiB0aGUgcmVjZWl2aW5nIHdhbGxldCB3YXMgc2V0IHVwIGZvclxuICovXG5mdW5jdGlvbiBydW48VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oc291cmNlQ29pbjogQWJzdHJhY3RVdHhvQ29pbiwgcmVjb3ZlcnlDb2luOiBBYnN0cmFjdFV0eG9Db2luKSB7XG4gIGRlc2NyaWJlKGBDcm9zcy1DaGFpbiBSZWNvdmVyeSBbc291cmNlQ29pbj0ke3NvdXJjZUNvaW4uZ2V0Q2hhaW4oKX0gcmVjb3ZlcnlDb2luPSR7cmVjb3ZlcnlDb2luLmdldENoYWluKCl9XWAsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB3YWxsZXRLZXlzID0gZ2V0RGVmYXVsdFdhbGxldEtleXMoKTtcbiAgICBjb25zdCByZWNvdmVyeVdhbGxldElkID0gJzVhYmFjZWJlMjhkNzJmYmQwN2UwYjhjYmJhMGZmMzllJztcbiAgICAvLyB0aGUgYWRkcmVzcyB0aGUgYWNjaWRlbnRhbCBkZXBvc2l0IHdlbnQgdG8sIGluIGJvdGggc291cmNlQ29pbiBhbmQgYWRkcmVzc0NvaW4gZm9ybWF0c1xuICAgIGNvbnN0IFtkZXBvc2l0QWRkcmVzc1NvdXJjZUNvaW4sIGRlcG9zaXRBZGRyZXNzUmVjb3ZlcnlDb2luXSA9IFtzb3VyY2VDb2luLCByZWNvdmVyeUNvaW5dLm1hcCgoY29pbikgPT4gKHtcbiAgICAgIGFkZHJlc3M6IGdlbmVyYXRlQWRkcmVzcyhjb2luLm5hbWUsIHsga2V5Y2hhaW5zOiBrZXljaGFpbnNCYXNlNTgsIGNoYWluOiAwLCBpbmRleDogMCB9KSxcbiAgICAgIGNoYWluOiAwLFxuICAgICAgaW5kZXg6IDAsXG4gICAgfSkpO1xuICAgIGNvbnN0IGNoYWluID0gMDtcbiAgICBjb25zdCBpbmRleCA9IDE7XG4gICAgLy8gdGhlIGFkZHJlc3Mgd2hlcmUgd2Ugd2FudCB0byByZWNvdmVyIG91ciBmdW5kcyB0b1xuICAgIGNvbnN0IHJlY292ZXJ5QWRkcmVzcyA9IGdlbmVyYXRlQWRkcmVzcyhzb3VyY2VDb2luLm5hbWUsIHtcbiAgICAgIGtleWNoYWluczoga2V5Y2hhaW5zQmFzZTU4LFxuICAgICAgY2hhaW4sXG4gICAgICBpbmRleCxcbiAgICB9KTtcbiAgICBjb25zdCBub2Nrczogbm9jay5TY29wZVtdID0gW107XG5cbiAgICBsZXQgZGVwb3NpdFR4OiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPjtcblxuICAgIGZ1bmN0aW9uIGdldERlcG9zaXRVbnNwZW50cygpOiBVbnNwZW50PFROdW1iZXI+W10ge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgbW9ja1Vuc3BlbnQ8VE51bWJlcj4oXG4gICAgICAgICAgc291cmNlQ29pbi5uZXR3b3JrLFxuICAgICAgICAgIHdhbGxldEtleXMsXG4gICAgICAgICAgJ3Ayc2gnLFxuICAgICAgICAgIDAsXG4gICAgICAgICAgKHNvdXJjZUNvaW4uYW1vdW50VHlwZSA9PT0gJ2JpZ2ludCcgPyBCaWdJbnQoJzEwOTk5OTk5ODAwMDAwMDAxJykgOiAxZTgpIGFzIFROdW1iZXJcbiAgICAgICAgKSxcbiAgICAgIF07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RGVwb3NpdFRyYW5zYWN0aW9uKCk6IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+IHtcbiAgICAgIHJldHVybiBjcmVhdGVGdWxsU2lnbmVkVHJhbnNhY3Rpb248VE51bWJlcj4oXG4gICAgICAgIHNvdXJjZUNvaW4ubmV0d29yayxcbiAgICAgICAgZ2V0RGVwb3NpdFVuc3BlbnRzKCksXG4gICAgICAgIGRlcG9zaXRBZGRyZXNzU291cmNlQ29pbi5hZGRyZXNzLFxuICAgICAgICBnZXREZWZhdWx0V2FsbGV0VW5zcGVudFNpZ25lcigpXG4gICAgICApO1xuICAgIH1cblxuICAgIGJlZm9yZSgncHJlcGFyZSBkZXBvc2l0IHR4JywgZnVuY3Rpb24gKCkge1xuICAgICAgZGVwb3NpdFR4ID0gZ2V0RGVwb3NpdFRyYW5zYWN0aW9uKCk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBnZXRSZWNvdmVyeVVuc3BlbnRzKCk6IFdhbGxldFVuc3BlbnQ8VE51bWJlcj5bXSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6IGRlcG9zaXRUeC5nZXRJZCgpLFxuICAgICAgICAgIGFkZHJlc3M6IGRlcG9zaXRBZGRyZXNzU291cmNlQ29pbi5hZGRyZXNzLFxuICAgICAgICAgIGNoYWluOiBjaGFpbixcbiAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgdmFsdWU6IGRlcG9zaXRUeC5vdXRzWzBdLnZhbHVlLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9XG5cbiAgICBiZWZvcmUoJ3NldHVwIG5vY2tzJywgZnVuY3Rpb24gKCkge1xuICAgICAgbm9ja3MucHVzaCguLi5ub2NrV2FsbGV0KHJlY292ZXJ5Q29pbiwgcmVjb3ZlcnlXYWxsZXRJZCwga2V5Y2hhaW5zQmFzZTU4KSk7XG4gICAgICBub2Nrcy5wdXNoKG5vY2tXYWxsZXRBZGRyZXNzKHJlY292ZXJ5Q29pbiwgcmVjb3ZlcnlXYWxsZXRJZCwgZGVwb3NpdEFkZHJlc3NSZWNvdmVyeUNvaW4pKTtcbiAgICB9KTtcblxuICAgIGFmdGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2tzLmZvckVhY2goKG4pID0+IG4uZG9uZSgpKTtcbiAgICB9KTtcblxuICAgIGFmdGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBtYXRjaEZpeHR1cmUoXG4gICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICByZWNvdmVyeTogQ3Jvc3NDaGFpblJlY292ZXJ5U2lnbmVkPFROdW1iZXI+IHwgQ3Jvc3NDaGFpblJlY292ZXJ5VW5zaWduZWQ8VE51bWJlcj5cbiAgICApIHtcbiAgICAgIGxldCByZWNvdmVyeU9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IC4uLnJlY292ZXJ5IH07XG4gICAgICBpZiAoc291cmNlQ29pbi5hbW91bnRUeXBlID09PSAnYmlnaW50Jykge1xuICAgICAgICByZWNvdmVyeU9iaiA9IEpTT04ucGFyc2UoXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkocmVjb3ZlcnlPYmosIChrLCB2KSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHYgPT09ICdiaWdpbnQnKSB7XG4gICAgICAgICAgICAgIHJldHVybiB2LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgc2hvdWxkRXF1YWxKU09OKFxuICAgICAgICByZWNvdmVyeU9iaixcbiAgICAgICAgYXdhaXQgZ2V0Rml4dHVyZShzb3VyY2VDb2luLCBgcmVjb3ZlcnkvY3Jvc3NDaGFpblJlY292ZXJ5LSR7cmVjb3ZlcnlDb2luLmdldENoYWluKCl9LSR7bmFtZX1gLCByZWNvdmVyeU9iailcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tSZWNvdmVyeVBzYnRTaWduYXR1cmUocHNidEhleDogc3RyaW5nKSB7XG4gICAgICBjb25zdCBwc2J0ID0gdXR4b2xpYi5iaXRnby5jcmVhdGVQc2J0RnJvbUhleChwc2J0SGV4LCBzb3VyY2VDb2luLm5ldHdvcmspO1xuICAgICAgY29uc3QgdW5zcGVudHMgPSBnZXRSZWNvdmVyeVVuc3BlbnRzKCk7XG4gICAgICBzaG91bGQuZXF1YWwocHNidC5kYXRhLmlucHV0cy5sZW5ndGgsIHVuc3BlbnRzLmxlbmd0aCk7XG4gICAgICAvLyBWZXJpZnkgdXNlciBrZXkgaGFzIHNpZ25lZCBlYWNoIGlucHV0IChzYW1lIHBhdHRlcm4gYXMgYmFja3VwS2V5UmVjb3ZlcnkgdGVzdClcbiAgICAgIHBzYnQuZGF0YS5pbnB1dHMuZm9yRWFjaCgoaW5wdXQsIGkpID0+IHtcbiAgICAgICAgY29uc3QgdXNlclNpZ25lZCA9IHBzYnQudmFsaWRhdGVTaWduYXR1cmVzT2ZJbnB1dEhEKGksIHdhbGxldEtleXMudXNlcik7XG4gICAgICAgIHVzZXJTaWduZWQuc2hvdWxkLmVxbCh0cnVlLCBgSW5wdXQgJHtpfSBzaG91bGQgYmUgc2lnbmVkIGJ5IHVzZXIga2V5YCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpdCgnc2hvdWxkIHRlc3Qgc2lnbmVkIGNyb3NzIGNoYWluIHJlY292ZXJ5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZ2V0UmVjb3ZlcnlQcm92aWRlclN0dWIgPSBzaW5vblxuICAgICAgICAuc3R1YihBYnN0cmFjdFV0eG9Db2luLnByb3RvdHlwZSwgJ2dldFJlY292ZXJ5UHJvdmlkZXInKVxuICAgICAgICAucmV0dXJucyhuZXcgTW9ja0Nyb3NzQ2hhaW5SZWNvdmVyeVByb3ZpZGVyPFROdW1iZXI+KHNvdXJjZUNvaW4sIGdldERlcG9zaXRVbnNwZW50cygpLCBkZXBvc2l0VHgpKTtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgcmVjb3ZlcnlDb2luLFxuICAgICAgICB0eGlkOiBkZXBvc2l0VHguZ2V0SWQoKSxcbiAgICAgICAgcmVjb3ZlcnlBZGRyZXNzLFxuICAgICAgICB3YWxsZXQ6IHJlY292ZXJ5V2FsbGV0SWQsXG4gICAgICB9O1xuICAgICAgY29uc3Qgc2lnbmVkUmVjb3ZlcnkgPSAoYXdhaXQgc291cmNlQ29pbi5yZWNvdmVyRnJvbVdyb25nQ2hhaW48VE51bWJlcj4oe1xuICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgIHhwcnY6IGtleWNoYWluc0Jhc2U1OFswXS5wcnYsXG4gICAgICB9KSkgYXMgQ3Jvc3NDaGFpblJlY292ZXJ5U2lnbmVkPFROdW1iZXI+O1xuICAgICAgc2hvdWxkLmVxdWFsKGdldFJlY292ZXJ5UHJvdmlkZXJTdHViLmNhbGxDb3VudCwgMSk7XG5cbiAgICAgIC8vIFZlcmlmeSBmaXh0dXJlIG1hdGNoXG4gICAgICBhd2FpdCBtYXRjaEZpeHR1cmUoJ3NpZ25lZCcsIHNpZ25lZFJlY292ZXJ5KTtcblxuICAgICAgLy8gVmVyaWZ5IFBTQlQgaGFzIHZhbGlkIHNpZ25hdHVyZXMgKHVzZXIga2V5IHNpZ25lZClcbiAgICAgIGNoZWNrUmVjb3ZlcnlQc2J0U2lnbmF0dXJlKHNpZ25lZFJlY292ZXJ5LnR4SGV4IGFzIHN0cmluZyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRlc3QgdW5zaWduZWQgY3Jvc3MgY2hhaW4gcmVjb3ZlcnknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBnZXRSZWNvdmVyeVByb3ZpZGVyU3R1YiA9IHNpbm9uXG4gICAgICAgIC5zdHViKEFic3RyYWN0VXR4b0NvaW4ucHJvdG90eXBlLCAnZ2V0UmVjb3ZlcnlQcm92aWRlcicpXG4gICAgICAgIC5yZXR1cm5zKG5ldyBNb2NrQ3Jvc3NDaGFpblJlY292ZXJ5UHJvdmlkZXI8VE51bWJlcj4oc291cmNlQ29pbiwgZ2V0RGVwb3NpdFVuc3BlbnRzKCksIGRlcG9zaXRUeCkpO1xuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICByZWNvdmVyeUNvaW4sXG4gICAgICAgIHR4aWQ6IGRlcG9zaXRUeC5nZXRJZCgpLFxuICAgICAgICByZWNvdmVyeUFkZHJlc3MsXG4gICAgICAgIHdhbGxldDogcmVjb3ZlcnlXYWxsZXRJZCxcbiAgICAgIH07XG4gICAgICBjb25zdCB1bnNpZ25lZFJlY292ZXJ5ID0gKGF3YWl0IHNvdXJjZUNvaW4ucmVjb3ZlckZyb21Xcm9uZ0NoYWluPFROdW1iZXI+KHtcbiAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICBzaWduZWQ6IGZhbHNlLFxuICAgICAgfSkpIGFzIENyb3NzQ2hhaW5SZWNvdmVyeVVuc2lnbmVkPFROdW1iZXI+O1xuICAgICAgc2hvdWxkLmVxdWFsKGdldFJlY292ZXJ5UHJvdmlkZXJTdHViLmNhbGxDb3VudCwgMSk7XG5cbiAgICAgIC8vIFZlcmlmeSBmaXh0dXJlIG1hdGNoXG4gICAgICBhd2FpdCBtYXRjaEZpeHR1cmUoJ3Vuc2lnbmVkJywgdW5zaWduZWRSZWNvdmVyeSk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGUgdW5zaWduZWQgUFNCVCBjYW4gYmUgc2lnbmVkXG4gICAgICBjb25zdCBzaWduZWRUeCA9IGF3YWl0IHNvdXJjZUNvaW4uc2lnblRyYW5zYWN0aW9uPFROdW1iZXI+KHtcbiAgICAgICAgdHhQcmVidWlsZDogdW5zaWduZWRSZWNvdmVyeSxcbiAgICAgICAgcHJ2OiBrZXljaGFpbnNCYXNlNThbMF0ucHJ2LFxuICAgICAgICBwdWJzOiBrZXljaGFpbnNCYXNlNTgubWFwKChrKSA9PiBrLnB1YikgYXMgVHJpcGxlPHN0cmluZz4sXG4gICAgICB9KTtcbiAgICAgIGNoZWNrUmVjb3ZlcnlQc2J0U2lnbmF0dXJlKChzaWduZWRUeCBhcyB7IHR4SGV4OiBzdHJpbmcgfSkudHhIZXgpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaXNTdXBwb3J0ZWRDcm9zc0NoYWluUmVjb3Zlcnkoc291cmNlQ29pbjogQWJzdHJhY3RVdHhvQ29pbiwgcmVjb3ZlcnlDb2luOiBBYnN0cmFjdFV0eG9Db2luKTogYm9vbGVhbiB7XG4gIHJldHVybiBzdXBwb3J0ZWRDcm9zc0NoYWluUmVjb3Zlcmllc1tzb3VyY2VDb2luLmdldEZhbWlseSgpXT8uaW5jbHVkZXMocmVjb3ZlcnlDb2luLmdldEZhbWlseSgpKTtcbn1cblxudXR4b0NvaW5zLmZvckVhY2goKGNvaW4pID0+IHtcbiAgdXR4b0NvaW5zXG4gICAgLmZpbHRlcihcbiAgICAgIChvdGhlckNvaW4pID0+XG4gICAgICAgIGNvaW4gIT09IG90aGVyQ29pbiAmJlxuICAgICAgICBpc1N1cHBvcnRlZENyb3NzQ2hhaW5SZWNvdmVyeShjb2luLCBvdGhlckNvaW4pICYmXG4gICAgICAgICgoaXNNYWlubmV0Q29pbihjb2luLm5hbWUpICYmIGlzTWFpbm5ldENvaW4ob3RoZXJDb2luLm5hbWUpKSB8fFxuICAgICAgICAgIChpc1Rlc3RuZXRDb2luKGNvaW4ubmFtZSkgJiYgaXNUZXN0bmV0Q29pbihvdGhlckNvaW4ubmFtZSkpKVxuICAgIClcbiAgICAuZm9yRWFjaCgob3RoZXJDb2luKSA9PiB7XG4gICAgICBpZiAoY29pbi5hbW91bnRUeXBlID09PSAnYmlnaW50Jykge1xuICAgICAgICBydW48YmlnaW50Pihjb2luLCBvdGhlckNvaW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcnVuKGNvaW4sIG90aGVyQ29pbik7XG4gICAgICB9XG4gICAgfSk7XG59KTtcblxuZGVzY3JpYmUoYENyb3NzLUNoYWluIFJlY292ZXJ5IGdldFdhbGxldGAsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYml0Z28gPSBkZWZhdWx0Qml0R287XG4gIGNvbnN0IHJlY292ZXJ5Q29pbiA9IGdldFV0eG9Db2luKCdidGMnKTtcbiAgY29uc3QgcmVjb3ZlcnlXYWxsZXRJZCA9ICc1YWJhY2ViZTI4ZDcyZmJkMDdlMGI4Y2JiYTBmZjM5ZSc7XG5cbiAgaXQoJ3Nob3VsZCBzZWFyY2ggdjEgd2FsbGV0cyBpZiB0aGUgdjIgZW5kcG9pbnQgcmVzcG9uZHMgd2l0aCBhIDR4eCBlcnJvcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBlcnJvclJlc3BvbnNlcyA9IFs0MDAsIDQwNF07XG5cbiAgICBmb3IgKGNvbnN0IGVycm9yIG9mIGVycm9yUmVzcG9uc2VzKSB7XG4gICAgICBjb25zdCBub2NrVjJXYWxsZXQgPSBub2NrQml0R28oYml0Z28pXG4gICAgICAgIC5nZXQoYC9hcGkvdjIvJHtyZWNvdmVyeUNvaW4uZ2V0Q2hhaW4oKX0vd2FsbGV0LyR7cmVjb3ZlcnlXYWxsZXRJZH1gKVxuICAgICAgICAucmVwbHkoZXJyb3IpO1xuICAgICAgY29uc3Qgbm9ja1YxV2FsbGV0ID0gbm9ja0JpdEdvKGJpdGdvKS5nZXQoYC9hcGkvdjEvd2FsbGV0LyR7cmVjb3ZlcnlXYWxsZXRJZH1gKS5yZXBseShlcnJvcik7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICAgKCkgPT4gZ2V0V2FsbGV0KGJpdGdvLCByZWNvdmVyeUNvaW4sIHJlY292ZXJ5V2FsbGV0SWQpLFxuICAgICAgICBFcnJvcihgY291bGQgbm90IGdldCB3YWxsZXQgJHtyZWNvdmVyeVdhbGxldElkfSBmcm9tIHYxIG9yIHYyOiBBcGlSZXNwb25zZUVycm9yOiAke2Vycm9yfWApXG4gICAgICApO1xuICAgICAgbm9ja1YyV2FsbGV0LmRvbmUoKTtcbiAgICAgIG5vY2tWMVdhbGxldC5kb25lKCk7XG4gICAgfVxuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIGlmIHRoZSB2MiBlbmRwb2ludCByZXNwb25kcyB3aXRoIGEgNXh4IGVycm9yJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGVycm9yUmVzcG9uc2VzID0gWzUwMF07XG4gICAgZm9yIChjb25zdCBlcnJvciBvZiBlcnJvclJlc3BvbnNlcykge1xuICAgICAgY29uc3Qgbm9ja1YyV2FsbGV0ID0gbm9ja0JpdEdvKGJpdGdvKVxuICAgICAgICAuZ2V0KGAvYXBpL3YyLyR7cmVjb3ZlcnlDb2luLmdldENoYWluKCl9L3dhbGxldC8ke3JlY292ZXJ5V2FsbGV0SWR9YClcbiAgICAgICAgLnJlcGx5KGVycm9yKTtcbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKCgpID0+IGdldFdhbGxldChiaXRnbywgcmVjb3ZlcnlDb2luLCByZWNvdmVyeVdhbGxldElkKSwge1xuICAgICAgICBuYW1lOiAnQXBpUmVzcG9uc2VFcnJvcicsXG4gICAgICAgIHN0YXR1czogNTAwLFxuICAgICAgICByZXN1bHQ6IHt9LFxuICAgICAgICBpbnZhbGlkVG9rZW46IGZhbHNlLFxuICAgICAgICBuZWVkc09UUDogZmFsc2UsXG4gICAgICB9KTtcbiAgICAgIG5vY2tWMldhbGxldC5kb25lKCk7XG4gICAgfVxuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnY29udmVydEx0Y0FkZHJlc3NUb0xlZ2FjeUZvcm1hdCcsIGZ1bmN0aW9uICgpIHtcbiAgaXQoJ3Nob3VsZCBjb252ZXJ0IE0uLi4gUDJTSCBhZGRyZXNzIHRvIDMuLi4gbGVnYWN5IGZvcm1hdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUaGVzZSB0d28gYWRkcmVzc2VzIHJlcHJlc2VudCB0aGUgc2FtZSB1bmRlcmx5aW5nIHNjcmlwdCBoYXNoOlxuICAgIC8vIC0gTU5RN3prZ01zYVY2N3JzakEzSnVQNTlSQzV3eFJYcHdnRSBpcyB0aGUgTFRDIGZvcm1hdCAoc2NyaXB0SGFzaCAweDMyKVxuICAgIC8vIC0gM0dCeWdzR1B2VGRmS01icTRBS1paUnUxc1BNV1BFc0JmZCBpcyB0aGUgQlRDIGZvcm1hdCAoc2NyaXB0SGFzaCAweDA1KVxuICAgIGNvbnN0IGx0Y0FkZHJlc3MgPSAnTU5RN3prZ01zYVY2N3JzakEzSnVQNTlSQzV3eFJYcHdnRSc7XG4gICAgY29uc3QgZXhwZWN0ZWRMZWdhY3lBZGRyZXNzID0gJzNHQnlnc0dQdlRkZktNYnE0QUtaWlJ1MXNQTVdQRXNCZmQnO1xuXG4gICAgY29uc3QgbGVnYWN5QWRkcmVzcyA9IGNvbnZlcnRMdGNBZGRyZXNzVG9MZWdhY3lGb3JtYXQobHRjQWRkcmVzcywgJ2x0YycpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChsZWdhY3lBZGRyZXNzLCBleHBlY3RlZExlZ2FjeUFkZHJlc3MpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGNvbnZlcnQgTUQ2OFBzZGhlS3hjWXNyVkx5WlJYZ29TRExuQjFNZFZ0RSB0byBsZWdhY3kgZm9ybWF0JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGFkZHJlc3MgPSAnTUQ2OFBzZGhlS3hjWXNyVkx5WlJYZ29TRExuQjFNZFZ0RSc7XG4gICAgY29uc3QgbGVnYWN5QWRkcmVzcyA9IGNvbnZlcnRMdGNBZGRyZXNzVG9MZWdhY3lGb3JtYXQoYWRkcmVzcywgJ2x0YycpO1xuXG4gICAgLy8gU2hvdWxkIHN0YXJ0IHdpdGggJzMnIChsZWdhY3kgQlRDIFAyU0ggZm9ybWF0KVxuICAgIGFzc2VydC5vayhsZWdhY3lBZGRyZXNzLnN0YXJ0c1dpdGgoJzMnKSwgYEV4cGVjdGVkIGFkZHJlc3MgdG8gc3RhcnQgd2l0aCAnMycsIGdvdDogJHtsZWdhY3lBZGRyZXNzfWApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIG5vdCBtb2RpZnkgYmVjaDMyIGFkZHJlc3NlcycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBiZWNoMzJBZGRyZXNzID0gJ2x0YzFxZ3JsOHpwbmRza2xhYTlzd2dkNXZldnl4bXg1eDYzdmNybDdkazQnO1xuICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRMdGNBZGRyZXNzVG9MZWdhY3lGb3JtYXQoYmVjaDMyQWRkcmVzcywgJ2x0YycpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIGJlY2gzMkFkZHJlc3MpO1xuICB9KTtcbn0pO1xuIl19
|
|
304
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvc3NDaGFpblJlY292ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L3JlY292ZXJ5L2Nyb3NzQ2hhaW5SZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUVqQyxpQ0FBa0M7QUFDbEMsNkJBQThCO0FBQzlCLDhEQUFnRDtBQUVoRCxtREFBK0M7QUFDL0MsZ0RBQTBEO0FBQzFELDZDQUErQjtBQUUvQixzQ0FRc0I7QUFDdEIsOENBQWtFO0FBRWxFLGtDQVVpQjtBQUNqQixpREFBOEM7QUFDOUMscURBQWtFO0FBQ2xFLGlEQUFrRTtBQUVsRSxpQ0FBd0Q7QUFFeEQsU0FBUyxRQUFRLENBQUMsQ0FBaUI7SUFDakMsT0FBTyxJQUFBLGtCQUFPLEVBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsSUFBc0IsRUFBRSxRQUFnQixFQUFFLFVBQWtDO0lBQzlGLE9BQU87UUFDTCxJQUFBLHFCQUFTLEdBQUU7YUFDUixHQUFHLENBQUMsV0FBVyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsUUFBUSxFQUFFLENBQUM7YUFDcEQsS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUNWLEVBQUUsRUFBRSxRQUFRO1lBQ1osSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDckIsS0FBSyxFQUFFLG9CQUFvQjtZQUMzQixJQUFJLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pDLENBQUM7YUFDRCxPQUFPLEVBQUU7UUFDWixHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUN0QixJQUFB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QUFDO0lBRUgsRUFBRSxDQUFDLG9DQUFvQyxFQUFFO1FBQ3ZDLE1BQU0sYUFBYSxHQUFHLDZDQUE2QyxDQUFDO1FBQ3BFLE1BQU0sTUFBTSxHQUFHLElBQUEscUNBQStCLEVBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzVDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHNob3VsZCA9IHJlcXVpcmUoJ3Nob3VsZCcpO1xuaW1wb3J0IG5vY2sgPSByZXF1aXJlKCdub2NrJyk7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IFRyaXBsZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGdldFNlZWQgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstdGVzdCc7XG5pbXBvcnQgeyBhZGRyZXNzIGFzIHdhc21BZGRyZXNzIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5cbmltcG9ydCB7XG4gIEFic3RyYWN0VXR4b0NvaW4sXG4gIENyb3NzQ2hhaW5SZWNvdmVyeVNpZ25lZCxcbiAgQ3Jvc3NDaGFpblJlY292ZXJ5VW5zaWduZWQsXG4gIGdldFdhbGxldCxcbiAgc3VwcG9ydGVkQ3Jvc3NDaGFpblJlY292ZXJpZXMsXG4gIGdlbmVyYXRlQWRkcmVzcyxcbiAgY29udmVydEx0Y0FkZHJlc3NUb0xlZ2FjeUZvcm1hdCxcbn0gZnJvbSAnLi4vLi4vLi4vc3JjJztcbmltcG9ydCB7IGlzTWFpbm5ldENvaW4sIGlzVGVzdG5ldENvaW4gfSBmcm9tICcuLi8uLi8uLi9zcmMvbmFtZXMnO1xuaW1wb3J0IHR5cGUgeyBVbnNwZW50LCBXYWxsZXRVbnNwZW50IH0gZnJvbSAnLi4vLi4vLi4vc3JjL3Vuc3BlbnQnO1xuaW1wb3J0IHtcbiAgZ2V0Rml4dHVyZSxcbiAga2V5Y2hhaW5zQmFzZTU4LFxuICBLZXljaGFpbkJhc2U1OCxcbiAgbW9ja1Vuc3BlbnQsXG4gIHNob3VsZEVxdWFsSlNPTixcbiAgdXR4b0NvaW5zLFxuICBnZXREZWZhdWx0V2FsbGV0S2V5cyxcbiAgZGVmYXVsdEJpdEdvLFxuICBnZXRVdHhvQ29pbixcbn0gZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQgeyBub2NrQml0R28gfSBmcm9tICcuLi91dGlsL25vY2tCaXRHbyc7XG5pbXBvcnQgeyBjcmVhdGVGdWxsU2lnbmVkVHJhbnNhY3Rpb24gfSBmcm9tICcuLi91dGlsL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IGdldERlZmF1bHRXYWxsZXRVbnNwZW50U2lnbmVyIH0gZnJvbSAnLi4vdXRpbC9rZXljaGFpbnMnO1xuXG5pbXBvcnQgeyBNb2NrQ3Jvc3NDaGFpblJlY292ZXJ5UHJvdmlkZXIgfSBmcm9tICcuL21vY2snO1xuXG5mdW5jdGlvbiBnZXRLZXlJZChrOiBLZXljaGFpbkJhc2U1OCk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRTZWVkKGsucHViKS50b1N0cmluZygnaGV4Jyk7XG59XG5cbmZ1bmN0aW9uIG5vY2tXYWxsZXQoY29pbjogQWJzdHJhY3RVdHhvQ29pbiwgd2FsbGV0SWQ6IHN0cmluZywgd2FsbGV0S2V5czogVHJpcGxlPEtleWNoYWluQmFzZTU4Pik6IG5vY2suU2NvcGVbXSB7XG4gIHJldHVybiBbXG4gICAgbm9ja0JpdEdvKClcbiAgICAgIC5nZXQoYC9hcGkvdjIvJHtjb2luLmdldENoYWluKCl9L3dhbGxldC8ke3dhbGxldElkfWApXG4gICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgIGlkOiB3YWxsZXRJZCxcbiAgICAgICAgY29pbjogY29pbi5nZXRDaGFpbigpLFxuICAgICAgICBsYWJlbDogJ2Nyb3NzQ2hhaW5SZWNvdmVyeScsXG4gICAgICAgIGtleXM6IHdhbGxldEtleXMubWFwKChrKSA9PiBnZXRLZXlJZChrKSksXG4gICAgICB9KVxuICAgICAgLnBlcnNpc3QoKSxcbiAgICAuLi53YWxsZXRLZXlzLm1hcCgoaykgPT5cbiAgICAgIG5vY2tCaXRHbygpXG4gICAgICAgIC5nZXQoYC9hcGkvdjIvJHtjb2luLmdldENoYWluKCl9L2tleS8ke2dldEtleUlkKGspfWApXG4gICAgICAgIC5yZXBseSgyMDAsIGspXG4gICAgICAgIC5wZXJzaXN0KClcbiAgICApLFxuICBdO1xufVxuXG50eXBlIEFkZHJlc3MgPSB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgY2hhaW46IG51bWJlcjtcbiAgaW5kZXg6IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIG5vY2tXYWxsZXRBZGRyZXNzKGNvaW46IEFic3RyYWN0VXR4b0NvaW4sIHdhbGxldElkOiBzdHJpbmcsIGFkZHJlc3M6IEFkZHJlc3MpOiBub2NrLlNjb3BlIHtcbiAgcmV0dXJuIG5vY2tCaXRHbygpXG4gICAgLmdldChgL2FwaS92Mi8ke2NvaW4uZ2V0Q2hhaW4oKX0vd2FsbGV0LyR7d2FsbGV0SWR9L2FkZHJlc3MvJHthZGRyZXNzLmFkZHJlc3N9YClcbiAgICAucmVwbHkoMjAwLCB7XG4gICAgICBhZGRyZXNzOiBhZGRyZXNzLmFkZHJlc3MsXG4gICAgICBjaGFpbjogYWRkcmVzcy5jaGFpbixcbiAgICAgIGluZGV4OiBhZGRyZXNzLmluZGV4LFxuICAgICAgY29pbjogY29pbi5nZXRDaGFpbigpLFxuICAgICAgd2FsbGV0OiB3YWxsZXRJZCxcbiAgICB9KVxuICAgIC5wZXJzaXN0KCk7XG59XG5cbi8qKlxuICogU2V0dXAgdGVzdCBmb3IgY3Jvc3MtY2hhaW4gcmVjb3ZlcnkuXG4gKlxuICogVXNlcnMgY2FuIHJlY2VpdmUgZGVwb3NpdHMgb24gd2FsbGV0IGFkZHJlc3NlcyB0aGF0IGFyZSBvbiBhIGRpZmZlcmVudCBjaGFpbi5cbiAqXG4gKiBGb3IgaW5zdGFuY2UsIGEgdXNlciBjYW4gcmVjZWl2ZSBsaXRlY29pbiBvbiBhIGJpdGNvaW4gd2FsbGV0LlxuICogVGhpcyBtZWFucyB0aGF0IHRoZSBsaXRlY29pbiBibG9ja2NoYWluIGhhcyBhIHRyYW5zYWN0aW9uIHdpdGggb3V0cHV0cyB0aGF0IGFyZSBzcGVuZGFibGVcbiAqIHdpdGgga2V5cyB0aGF0IHdlcmUgb3JpZ2luYWxseSBjcmVhdGVkIGZvciBhIEJpdEdvIEJUQyB3YWxsZXQuXG4gKiBJbiB0aGlzIGV4YW1wbGUsIExUQyBpcyB0aGUgXCJzb3VyY2UgY29pblwiIGFuZCBCVEMgaXMgdGhlIFwicmVjb3ZlcnkgY29pblwiXG4gKiBJbiBjYXNlcyBsaWtlIHRoZXNlIHdlIG11c3QgdXNlIGNvbnN0cnVjdCBhIHRyYW5zYWN0aW9uIGZvciBsaXRlY29pbiBuZXR3b3JrIHVzaW5nIGtleXMgb2YgdGhlXG4gKiBiaXRjb2luIHdhbGxldC5cbiAqXG4gKiBAcGFyYW0gc291cmNlQ29pbiAtIHRoZSBjb2luIHRvIGNvbnN0cnVjdCB0aGUgdHJhbnNhY3Rpb24gZm9yXG4gKiBAcGFyYW0gcmVjb3ZlcnlDb2luIC0gdGhlIGNvaW4gdGhlIHJlY2VpdmluZyB3YWxsZXQgd2FzIHNldCB1cCBmb3JcbiAqL1xuZnVuY3Rpb24gcnVuPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KHNvdXJjZUNvaW46IEFic3RyYWN0VXR4b0NvaW4sIHJlY292ZXJ5Q29pbjogQWJzdHJhY3RVdHhvQ29pbikge1xuICBkZXNjcmliZShgQ3Jvc3MtQ2hhaW4gUmVjb3ZlcnkgW3NvdXJjZUNvaW49JHtzb3VyY2VDb2luLmdldENoYWluKCl9IHJlY292ZXJ5Q29pbj0ke3JlY292ZXJ5Q29pbi5nZXRDaGFpbigpfV1gLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgd2FsbGV0S2V5cyA9IGdldERlZmF1bHRXYWxsZXRLZXlzKCk7XG4gICAgY29uc3QgcmVjb3ZlcnlXYWxsZXRJZCA9ICc1YWJhY2ViZTI4ZDcyZmJkMDdlMGI4Y2JiYTBmZjM5ZSc7XG4gICAgLy8gdGhlIGFkZHJlc3MgdGhlIGFjY2lkZW50YWwgZGVwb3NpdCB3ZW50IHRvLCBpbiBib3RoIHNvdXJjZUNvaW4gYW5kIGFkZHJlc3NDb2luIGZvcm1hdHNcbiAgICBjb25zdCBbZGVwb3NpdEFkZHJlc3NTb3VyY2VDb2luLCBkZXBvc2l0QWRkcmVzc1JlY292ZXJ5Q29pbl0gPSBbc291cmNlQ29pbiwgcmVjb3ZlcnlDb2luXS5tYXAoKGNvaW4pID0+ICh7XG4gICAgICBhZGRyZXNzOiBnZW5lcmF0ZUFkZHJlc3MoY29pbi5uYW1lLCB7IGtleWNoYWluczoga2V5Y2hhaW5zQmFzZTU4LCBjaGFpbjogMCwgaW5kZXg6IDAgfSksXG4gICAgICBjaGFpbjogMCxcbiAgICAgIGluZGV4OiAwLFxuICAgIH0pKTtcbiAgICBjb25zdCBjaGFpbiA9IDA7XG4gICAgY29uc3QgaW5kZXggPSAxO1xuICAgIC8vIHRoZSBhZGRyZXNzIHdoZXJlIHdlIHdhbnQgdG8gcmVjb3ZlciBvdXIgZnVuZHMgdG9cbiAgICBjb25zdCByZWNvdmVyeUFkZHJlc3MgPSBnZW5lcmF0ZUFkZHJlc3Moc291cmNlQ29pbi5uYW1lLCB7XG4gICAgICBrZXljaGFpbnM6IGtleWNoYWluc0Jhc2U1OCxcbiAgICAgIGNoYWluLFxuICAgICAgaW5kZXgsXG4gICAgfSk7XG4gICAgY29uc3Qgbm9ja3M6IG5vY2suU2NvcGVbXSA9IFtdO1xuXG4gICAgbGV0IGRlcG9zaXRUeDogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj47XG5cbiAgICBmdW5jdGlvbiBnZXREZXBvc2l0VW5zcGVudHMoKTogVW5zcGVudDxUTnVtYmVyPltdIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIG1vY2tVbnNwZW50PFROdW1iZXI+KFxuICAgICAgICAgIHNvdXJjZUNvaW4ubmV0d29yayxcbiAgICAgICAgICB3YWxsZXRLZXlzLFxuICAgICAgICAgICdwMnNoJyxcbiAgICAgICAgICAwLFxuICAgICAgICAgIChzb3VyY2VDb2luLmFtb3VudFR5cGUgPT09ICdiaWdpbnQnID8gQmlnSW50KCcxMDk5OTk5OTgwMDAwMDAwMScpIDogMWU4KSBhcyBUTnVtYmVyXG4gICAgICAgICksXG4gICAgICBdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERlcG9zaXRUcmFuc2FjdGlvbigpOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPiB7XG4gICAgICByZXR1cm4gY3JlYXRlRnVsbFNpZ25lZFRyYW5zYWN0aW9uPFROdW1iZXI+KFxuICAgICAgICBzb3VyY2VDb2luLm5ldHdvcmssXG4gICAgICAgIGdldERlcG9zaXRVbnNwZW50cygpLFxuICAgICAgICBkZXBvc2l0QWRkcmVzc1NvdXJjZUNvaW4uYWRkcmVzcyxcbiAgICAgICAgZ2V0RGVmYXVsdFdhbGxldFVuc3BlbnRTaWduZXIoKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBiZWZvcmUoJ3ByZXBhcmUgZGVwb3NpdCB0eCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGRlcG9zaXRUeCA9IGdldERlcG9zaXRUcmFuc2FjdGlvbigpO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gZ2V0UmVjb3ZlcnlVbnNwZW50cygpOiBXYWxsZXRVbnNwZW50PFROdW1iZXI+W10ge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBkZXBvc2l0VHguZ2V0SWQoKSxcbiAgICAgICAgICBhZGRyZXNzOiBkZXBvc2l0QWRkcmVzc1NvdXJjZUNvaW4uYWRkcmVzcyxcbiAgICAgICAgICBjaGFpbjogY2hhaW4sXG4gICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgIHZhbHVlOiBkZXBvc2l0VHgub3V0c1swXS52YWx1ZSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfVxuXG4gICAgYmVmb3JlKCdzZXR1cCBub2NrcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2tzLnB1c2goLi4ubm9ja1dhbGxldChyZWNvdmVyeUNvaW4sIHJlY292ZXJ5V2FsbGV0SWQsIGtleWNoYWluc0Jhc2U1OCkpO1xuICAgICAgbm9ja3MucHVzaChub2NrV2FsbGV0QWRkcmVzcyhyZWNvdmVyeUNvaW4sIHJlY292ZXJ5V2FsbGV0SWQsIGRlcG9zaXRBZGRyZXNzUmVjb3ZlcnlDb2luKSk7XG4gICAgfSk7XG5cbiAgICBhZnRlcihmdW5jdGlvbiAoKSB7XG4gICAgICBub2Nrcy5mb3JFYWNoKChuKSA9PiBuLmRvbmUoKSk7XG4gICAgfSk7XG5cbiAgICBhZnRlcihmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgc2lub24ucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gbWF0Y2hGaXh0dXJlKFxuICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgcmVjb3Zlcnk6IENyb3NzQ2hhaW5SZWNvdmVyeVNpZ25lZDxUTnVtYmVyPiB8IENyb3NzQ2hhaW5SZWNvdmVyeVVuc2lnbmVkPFROdW1iZXI+XG4gICAgKSB7XG4gICAgICBsZXQgcmVjb3ZlcnlPYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyAuLi5yZWNvdmVyeSB9O1xuICAgICAgaWYgKHNvdXJjZUNvaW4uYW1vdW50VHlwZSA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgICAgcmVjb3ZlcnlPYmogPSBKU09OLnBhcnNlKFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHJlY292ZXJ5T2JqLCAoaywgdikgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2ID09PSAnYmlnaW50Jykge1xuICAgICAgICAgICAgICByZXR1cm4gdi50b1N0cmluZygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHNob3VsZEVxdWFsSlNPTihcbiAgICAgICAgcmVjb3ZlcnlPYmosXG4gICAgICAgIGF3YWl0IGdldEZpeHR1cmUoc291cmNlQ29pbiwgYHJlY292ZXJ5L2Nyb3NzQ2hhaW5SZWNvdmVyeS0ke3JlY292ZXJ5Q29pbi5nZXRDaGFpbigpfS0ke25hbWV9YCwgcmVjb3ZlcnlPYmopXG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrUmVjb3ZlcnlQc2J0U2lnbmF0dXJlKHBzYnRIZXg6IHN0cmluZykge1xuICAgICAgY29uc3QgcHNidCA9IHV0eG9saWIuYml0Z28uY3JlYXRlUHNidEZyb21IZXgocHNidEhleCwgc291cmNlQ29pbi5uZXR3b3JrKTtcbiAgICAgIGNvbnN0IHVuc3BlbnRzID0gZ2V0UmVjb3ZlcnlVbnNwZW50cygpO1xuICAgICAgc2hvdWxkLmVxdWFsKHBzYnQuZGF0YS5pbnB1dHMubGVuZ3RoLCB1bnNwZW50cy5sZW5ndGgpO1xuICAgICAgLy8gVmVyaWZ5IHVzZXIga2V5IGhhcyBzaWduZWQgZWFjaCBpbnB1dCAoc2FtZSBwYXR0ZXJuIGFzIGJhY2t1cEtleVJlY292ZXJ5IHRlc3QpXG4gICAgICBwc2J0LmRhdGEuaW5wdXRzLmZvckVhY2goKGlucHV0LCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IHVzZXJTaWduZWQgPSBwc2J0LnZhbGlkYXRlU2lnbmF0dXJlc09mSW5wdXRIRChpLCB3YWxsZXRLZXlzLnVzZXIpO1xuICAgICAgICB1c2VyU2lnbmVkLnNob3VsZC5lcWwodHJ1ZSwgYElucHV0ICR7aX0gc2hvdWxkIGJlIHNpZ25lZCBieSB1c2VyIGtleWApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaXQoJ3Nob3VsZCB0ZXN0IHNpZ25lZCBjcm9zcyBjaGFpbiByZWNvdmVyeScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGdldFJlY292ZXJ5UHJvdmlkZXJTdHViID0gc2lub25cbiAgICAgICAgLnN0dWIoQWJzdHJhY3RVdHhvQ29pbi5wcm90b3R5cGUsICdnZXRSZWNvdmVyeVByb3ZpZGVyJylcbiAgICAgICAgLnJldHVybnMobmV3IE1vY2tDcm9zc0NoYWluUmVjb3ZlcnlQcm92aWRlcjxUTnVtYmVyPihzb3VyY2VDb2luLCBnZXREZXBvc2l0VW5zcGVudHMoKSwgZGVwb3NpdFR4KSk7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIHJlY292ZXJ5Q29pbixcbiAgICAgICAgdHhpZDogZGVwb3NpdFR4LmdldElkKCksXG4gICAgICAgIHJlY292ZXJ5QWRkcmVzcyxcbiAgICAgICAgd2FsbGV0OiByZWNvdmVyeVdhbGxldElkLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNpZ25lZFJlY292ZXJ5ID0gKGF3YWl0IHNvdXJjZUNvaW4ucmVjb3ZlckZyb21Xcm9uZ0NoYWluPFROdW1iZXI+KHtcbiAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICB4cHJ2OiBrZXljaGFpbnNCYXNlNThbMF0ucHJ2LFxuICAgICAgfSkpIGFzIENyb3NzQ2hhaW5SZWNvdmVyeVNpZ25lZDxUTnVtYmVyPjtcbiAgICAgIHNob3VsZC5lcXVhbChnZXRSZWNvdmVyeVByb3ZpZGVyU3R1Yi5jYWxsQ291bnQsIDEpO1xuXG4gICAgICAvLyBWZXJpZnkgZml4dHVyZSBtYXRjaFxuICAgICAgYXdhaXQgbWF0Y2hGaXh0dXJlKCdzaWduZWQnLCBzaWduZWRSZWNvdmVyeSk7XG5cbiAgICAgIC8vIFZlcmlmeSBQU0JUIGhhcyB2YWxpZCBzaWduYXR1cmVzICh1c2VyIGtleSBzaWduZWQpXG4gICAgICBjaGVja1JlY292ZXJ5UHNidFNpZ25hdHVyZShzaWduZWRSZWNvdmVyeS50eEhleCBhcyBzdHJpbmcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0ZXN0IHVuc2lnbmVkIGNyb3NzIGNoYWluIHJlY292ZXJ5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZ2V0UmVjb3ZlcnlQcm92aWRlclN0dWIgPSBzaW5vblxuICAgICAgICAuc3R1YihBYnN0cmFjdFV0eG9Db2luLnByb3RvdHlwZSwgJ2dldFJlY292ZXJ5UHJvdmlkZXInKVxuICAgICAgICAucmV0dXJucyhuZXcgTW9ja0Nyb3NzQ2hhaW5SZWNvdmVyeVByb3ZpZGVyPFROdW1iZXI+KHNvdXJjZUNvaW4sIGdldERlcG9zaXRVbnNwZW50cygpLCBkZXBvc2l0VHgpKTtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgcmVjb3ZlcnlDb2luLFxuICAgICAgICB0eGlkOiBkZXBvc2l0VHguZ2V0SWQoKSxcbiAgICAgICAgcmVjb3ZlcnlBZGRyZXNzLFxuICAgICAgICB3YWxsZXQ6IHJlY292ZXJ5V2FsbGV0SWQsXG4gICAgICB9O1xuICAgICAgY29uc3QgdW5zaWduZWRSZWNvdmVyeSA9IChhd2FpdCBzb3VyY2VDb2luLnJlY292ZXJGcm9tV3JvbmdDaGFpbjxUTnVtYmVyPih7XG4gICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgc2lnbmVkOiBmYWxzZSxcbiAgICAgIH0pKSBhcyBDcm9zc0NoYWluUmVjb3ZlcnlVbnNpZ25lZDxUTnVtYmVyPjtcbiAgICAgIHNob3VsZC5lcXVhbChnZXRSZWNvdmVyeVByb3ZpZGVyU3R1Yi5jYWxsQ291bnQsIDEpO1xuXG4gICAgICAvLyBWZXJpZnkgZml4dHVyZSBtYXRjaFxuICAgICAgYXdhaXQgbWF0Y2hGaXh0dXJlKCd1bnNpZ25lZCcsIHVuc2lnbmVkUmVjb3ZlcnkpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhlIHVuc2lnbmVkIFBTQlQgY2FuIGJlIHNpZ25lZFxuICAgICAgY29uc3Qgc2lnbmVkVHggPSBhd2FpdCBzb3VyY2VDb2luLnNpZ25UcmFuc2FjdGlvbjxUTnVtYmVyPih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHVuc2lnbmVkUmVjb3ZlcnksXG4gICAgICAgIHBydjoga2V5Y2hhaW5zQmFzZTU4WzBdLnBydixcbiAgICAgICAgcHViczoga2V5Y2hhaW5zQmFzZTU4Lm1hcCgoaykgPT4gay5wdWIpIGFzIFRyaXBsZTxzdHJpbmc+LFxuICAgICAgfSk7XG4gICAgICBjaGVja1JlY292ZXJ5UHNidFNpZ25hdHVyZSgoc2lnbmVkVHggYXMgeyB0eEhleDogc3RyaW5nIH0pLnR4SGV4KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzU3VwcG9ydGVkQ3Jvc3NDaGFpblJlY292ZXJ5KHNvdXJjZUNvaW46IEFic3RyYWN0VXR4b0NvaW4sIHJlY292ZXJ5Q29pbjogQWJzdHJhY3RVdHhvQ29pbik6IGJvb2xlYW4ge1xuICByZXR1cm4gc3VwcG9ydGVkQ3Jvc3NDaGFpblJlY292ZXJpZXNbc291cmNlQ29pbi5nZXRGYW1pbHkoKV0/LmluY2x1ZGVzKHJlY292ZXJ5Q29pbi5nZXRGYW1pbHkoKSk7XG59XG5cbnV0eG9Db2lucy5mb3JFYWNoKChjb2luKSA9PiB7XG4gIHV0eG9Db2luc1xuICAgIC5maWx0ZXIoXG4gICAgICAob3RoZXJDb2luKSA9PlxuICAgICAgICBjb2luICE9PSBvdGhlckNvaW4gJiZcbiAgICAgICAgaXNTdXBwb3J0ZWRDcm9zc0NoYWluUmVjb3ZlcnkoY29pbiwgb3RoZXJDb2luKSAmJlxuICAgICAgICAoKGlzTWFpbm5ldENvaW4oY29pbi5uYW1lKSAmJiBpc01haW5uZXRDb2luKG90aGVyQ29pbi5uYW1lKSkgfHxcbiAgICAgICAgICAoaXNUZXN0bmV0Q29pbihjb2luLm5hbWUpICYmIGlzVGVzdG5ldENvaW4ob3RoZXJDb2luLm5hbWUpKSlcbiAgICApXG4gICAgLmZvckVhY2goKG90aGVyQ29pbikgPT4ge1xuICAgICAgaWYgKGNvaW4uYW1vdW50VHlwZSA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgICAgcnVuPGJpZ2ludD4oY29pbiwgb3RoZXJDb2luKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJ1bihjb2luLCBvdGhlckNvaW4pO1xuICAgICAgfVxuICAgIH0pO1xufSk7XG5cbmRlc2NyaWJlKGBDcm9zcy1DaGFpbiBSZWNvdmVyeSBnZXRXYWxsZXRgLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGJpdGdvID0gZGVmYXVsdEJpdEdvO1xuICBjb25zdCByZWNvdmVyeUNvaW4gPSBnZXRVdHhvQ29pbignYnRjJyk7XG4gIGNvbnN0IHJlY292ZXJ5V2FsbGV0SWQgPSAnNWFiYWNlYmUyOGQ3MmZiZDA3ZTBiOGNiYmEwZmYzOWUnO1xuXG4gIGl0KCdzaG91bGQgc2VhcmNoIHYxIHdhbGxldHMgaWYgdGhlIHYyIGVuZHBvaW50IHJlc3BvbmRzIHdpdGggYSA0eHggZXJyb3InLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZXJyb3JSZXNwb25zZXMgPSBbNDAwLCA0MDRdO1xuXG4gICAgZm9yIChjb25zdCBlcnJvciBvZiBlcnJvclJlc3BvbnNlcykge1xuICAgICAgY29uc3Qgbm9ja1YyV2FsbGV0ID0gbm9ja0JpdEdvKGJpdGdvKVxuICAgICAgICAuZ2V0KGAvYXBpL3YyLyR7cmVjb3ZlcnlDb2luLmdldENoYWluKCl9L3dhbGxldC8ke3JlY292ZXJ5V2FsbGV0SWR9YClcbiAgICAgICAgLnJlcGx5KGVycm9yKTtcbiAgICAgIGNvbnN0IG5vY2tWMVdhbGxldCA9IG5vY2tCaXRHbyhiaXRnbykuZ2V0KGAvYXBpL3YxL3dhbGxldC8ke3JlY292ZXJ5V2FsbGV0SWR9YCkucmVwbHkoZXJyb3IpO1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgICgpID0+IGdldFdhbGxldChiaXRnbywgcmVjb3ZlcnlDb2luLCByZWNvdmVyeVdhbGxldElkKSxcbiAgICAgICAgRXJyb3IoYGNvdWxkIG5vdCBnZXQgd2FsbGV0ICR7cmVjb3ZlcnlXYWxsZXRJZH0gZnJvbSB2MSBvciB2MjogQXBpUmVzcG9uc2VFcnJvcjogJHtlcnJvcn1gKVxuICAgICAgKTtcbiAgICAgIG5vY2tWMldhbGxldC5kb25lKCk7XG4gICAgICBub2NrVjFXYWxsZXQuZG9uZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgdjIgZW5kcG9pbnQgcmVzcG9uZHMgd2l0aCBhIDV4eCBlcnJvcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBlcnJvclJlc3BvbnNlcyA9IFs1MDBdO1xuICAgIGZvciAoY29uc3QgZXJyb3Igb2YgZXJyb3JSZXNwb25zZXMpIHtcbiAgICAgIGNvbnN0IG5vY2tWMldhbGxldCA9IG5vY2tCaXRHbyhiaXRnbylcbiAgICAgICAgLmdldChgL2FwaS92Mi8ke3JlY292ZXJ5Q29pbi5nZXRDaGFpbigpfS93YWxsZXQvJHtyZWNvdmVyeVdhbGxldElkfWApXG4gICAgICAgIC5yZXBseShlcnJvcik7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cygoKSA9PiBnZXRXYWxsZXQoYml0Z28sIHJlY292ZXJ5Q29pbiwgcmVjb3ZlcnlXYWxsZXRJZCksIHtcbiAgICAgICAgbmFtZTogJ0FwaVJlc3BvbnNlRXJyb3InLFxuICAgICAgICBzdGF0dXM6IDUwMCxcbiAgICAgICAgcmVzdWx0OiB7fSxcbiAgICAgICAgaW52YWxpZFRva2VuOiBmYWxzZSxcbiAgICAgICAgbmVlZHNPVFA6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICBub2NrVjJXYWxsZXQuZG9uZSgpO1xuICAgIH1cbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2NvbnZlcnRMdGNBZGRyZXNzVG9MZWdhY3lGb3JtYXQnLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHNjcmlwdFB1YktleSA9IEJ1ZmZlci5mcm9tKCdhOTE0OWYwYmY1MWZhYjRkMzNhYjIxOTc3ZTFiODlmNzc2ZjY0MTYxZWY0Mjg3JywgJ2hleCcpO1xuICBpdCgnc2hvdWxkIGNvbnZlcnQgTS4uLiBQMlNIIGFkZHJlc3MgdG8gMy4uLiBsZWdhY3kgZm9ybWF0JywgZnVuY3Rpb24gKCkge1xuICAgIC8vIFRoZXNlIHR3byBhZGRyZXNzZXMgcmVwcmVzZW50IHRoZSBzYW1lIHVuZGVybHlpbmcgc2NyaXB0IGhhc2g6XG4gICAgLy8gLSBNTlE3emtnTXNhVjY3cnNqQTNKdVA1OVJDNXd4Ulhwd2dFIGlzIHRoZSBMVEMgZm9ybWF0IChzY3JpcHRIYXNoIDB4MzIpXG4gICAgLy8gLSAzR0J5Z3NHUHZUZGZLTWJxNEFLWlpSdTFzUE1XUEVzQmZkIGlzIHRoZSBCVEMgZm9ybWF0IChzY3JpcHRIYXNoIDB4MDUpXG4gICAgLy8gY29uc3QgbHRjQWRkcmVzcyA9ICdNTlE3emtnTXNhVjY3cnNqQTNKdVA1OVJDNXd4Ulhwd2dFJztcbiAgICBjb25zdCBsdGNBZGRyZXNzID0gd2FzbUFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdFdpdGhDb2luKHNjcmlwdFB1YktleSwgJ2x0YycpO1xuICAgIGNvbnN0IHRsdGNBZGRyZXNzID0gd2FzbUFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdFdpdGhDb2luKHNjcmlwdFB1YktleSwgJ3RsdGMnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwobHRjQWRkcmVzcywgJ01OUTd6a2dNc2FWNjdyc2pBM0p1UDU5UkM1d3hSWHB3Z0UnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodGx0Y0FkZHJlc3MsICdRYjZ3c2Q0ZloyQzZmS3pSTVB5VEc1S2lFODFXNlFDeGhVJyk7XG5cbiAgICBjb25zdCBsZWdhY3lBZGRyZXNzID0gY29udmVydEx0Y0FkZHJlc3NUb0xlZ2FjeUZvcm1hdChsdGNBZGRyZXNzLCAnbHRjJyk7XG4gICAgY29uc3QgZXhwZWN0ZWRMdGNMZWdhY3lBZGRyZXNzID0gJzNHQnlnc0dQdlRkZktNYnE0QUtaWlJ1MXNQTVdQRXNCZmQnO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChsZWdhY3lBZGRyZXNzLCBleHBlY3RlZEx0Y0xlZ2FjeUFkZHJlc3MpO1xuXG4gICAgY29uc3QgZXhwZWN0ZWRUbHRjTGVnYWN5QWRkcmVzcyA9ICcyTjdrQmtjQ1JYdjkxWDlFTmpId1NCTnRINWpaZzh5eWU2cic7XG4gICAgY29uc3QgdGx0Y0xlZ2FjeUFkZHJlc3MgPSBjb252ZXJ0THRjQWRkcmVzc1RvTGVnYWN5Rm9ybWF0KHRsdGNBZGRyZXNzLCAndGx0YycpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0bHRjTGVnYWN5QWRkcmVzcywgZXhwZWN0ZWRUbHRjTGVnYWN5QWRkcmVzcyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY29udmVydCBNRDY4UHNkaGVLeGNZc3JWTHlaUlhnb1NETG5CMU1kVnRFIHRvIGxlZ2FjeSBmb3JtYXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYWRkcmVzcyA9ICdNRDY4UHNkaGVLeGNZc3JWTHlaUlhnb1NETG5CMU1kVnRFJztcbiAgICBjb25zdCBsZWdhY3lBZGRyZXNzID0gY29udmVydEx0Y0FkZHJlc3NUb0xlZ2FjeUZvcm1hdChhZGRyZXNzLCAnbHRjJyk7XG5cbiAgICAvLyBTaG91bGQgc3RhcnQgd2l0aCAnMycgKGxlZ2FjeSBCVEMgUDJTSCBmb3JtYXQpXG4gICAgYXNzZXJ0Lm9rKGxlZ2FjeUFkZHJlc3Muc3RhcnRzV2l0aCgnMycpLCBgRXhwZWN0ZWQgYWRkcmVzcyB0byBzdGFydCB3aXRoICczJywgZ290OiAke2xlZ2FjeUFkZHJlc3N9YCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbm90IG1vZGlmeSBiZWNoMzIgYWRkcmVzc2VzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJlY2gzMkFkZHJlc3MgPSAnbHRjMXFncmw4enBuZHNrbGFhOXN3Z2Q1dmV2eXhteDV4NjN2Y3JsN2RrNCc7XG4gICAgY29uc3QgcmVzdWx0ID0gY29udmVydEx0Y0FkZHJlc3NUb0xlZ2FjeUZvcm1hdChiZWNoMzJBZGRyZXNzLCAnbHRjJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdCwgYmVjaDMyQWRkcmVzcyk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signTransaction.d.ts","sourceRoot":"","sources":["../../../../test/unit/signTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,CAAC"}
|