@bitgo/sdk-core 38.15.0 → 38.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/account-lib/util/ed25519KeyDeriver.d.ts +3 -1
- package/dist/src/account-lib/util/ed25519KeyDeriver.d.ts.map +1 -1
- package/dist/src/account-lib/util/ed25519KeyDeriver.js +4 -2
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +7 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
- package/dist/src/bitgo/defi/defiVault.d.ts +7 -7
- package/dist/src/bitgo/defi/defiVault.d.ts.map +1 -1
- package/dist/src/bitgo/defi/defiVault.js +10 -10
- package/dist/src/bitgo/defi/iDefiVault.d.ts +7 -2
- package/dist/src/bitgo/defi/iDefiVault.d.ts.map +1 -1
- package/dist/src/bitgo/defi/iDefiVault.js +1 -1
- package/dist/src/bitgo/environments.js +3 -3
- package/dist/src/bitgo/keychain/iKeychains.d.ts +4 -0
- package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/iKeychains.js +1 -1
- package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/keychains.js +15 -15
- package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts +24 -81
- package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts.map +1 -1
- package/dist/src/bitgo/safe/derivableEd25519Pub.js +117 -147
- package/dist/src/bitgo/safe/iSafe.d.ts +5 -2
- package/dist/src/bitgo/safe/iSafe.d.ts.map +1 -1
- package/dist/src/bitgo/safe/iSafe.js +1 -1
- package/dist/src/bitgo/safe/safe.d.ts +14 -7
- package/dist/src/bitgo/safe/safe.d.ts.map +1 -1
- package/dist/src/bitgo/safe/safe.js +108 -30
- package/dist/src/bitgo/safe/safeDerivation.d.ts +13 -0
- package/dist/src/bitgo/safe/safeDerivation.d.ts.map +1 -1
- package/dist/src/bitgo/safe/safeDerivation.js +30 -1
- package/dist/src/bitgo/safe/safes.d.ts.map +1 -1
- package/dist/src/bitgo/safe/safes.js +10 -8
- package/dist/src/bitgo/staking/iStakingWallet.d.ts +13 -5
- package/dist/src/bitgo/staking/iStakingWallet.d.ts.map +1 -1
- package/dist/src/bitgo/staking/iStakingWallet.js +1 -1
- package/dist/src/bitgo/staking/stakingWallet.d.ts +2 -2
- package/dist/src/bitgo/staking/stakingWallet.d.ts.map +1 -1
- package/dist/src/bitgo/staking/stakingWallet.js +14 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +4 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +18 -6
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.d.ts +9 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.js +24 -3
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts +50 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.js +154 -4
- package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.d.ts +3 -0
- package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.js +1 -1
- package/dist/src/bitgo/utils/tss/recipientUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/recipientUtils.js +9 -1
- package/dist/src/bitgo/wallet/BuildParams.d.ts +8 -0
- package/dist/src/bitgo/wallet/BuildParams.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/BuildParams.js +6 -1
- package/dist/src/bitgo/wallet/iWallet.d.ts +5 -1
- package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallet.js +1 -1
- package/dist/test/unit/bitgo/defi/defiVault.js +102 -1
- package/dist/test/unit/bitgo/keychain/keychains.js +40 -29
- package/dist/test/unit/bitgo/safe/derivableEd25519Pub.js +72 -76
- package/dist/test/unit/bitgo/safe/fixtures/derivableEd25519Pub.json +50 -175
- package/dist/test/unit/bitgo/safe/safe.js +122 -23
- package/dist/test/unit/bitgo/safe/safeDerivation.d.ts +2 -0
- package/dist/test/unit/bitgo/safe/safeDerivation.d.ts.map +1 -0
- package/dist/test/unit/bitgo/safe/safeDerivation.js +71 -0
- package/dist/test/unit/bitgo/safe/safes.js +23 -11
- package/dist/test/unit/bitgo/utils/tss/recipientUtils.js +29 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
require("should");
|
|
4
|
+
const src_1 = require("../../../../src");
|
|
5
|
+
// 32-byte synthetic root seed. The StrKey spelling was generated with stellar-sdk
|
|
6
|
+
// (Keypair.fromRawEd25519Seed); the derivation vectors below were generated with an independent
|
|
7
|
+
// SLIP-0010 implementation written from the spec and cross-checked against published vectors
|
|
8
|
+
// (SLIP-0010 test vector 1 seed 000102...0f derives m/0' to 68e0fe46...dade7a3).
|
|
9
|
+
const ROOT_SEED_STRKEY = 'SAAACAQDAQCQMBYIBEFAWDANBYHRAEISCMKBKFQXDAMRUGY4DUPB6NKI';
|
|
10
|
+
const ROOT_XPRV = 'xprv9s21ZrQH143K3hekyNj7TciR4XNYe1kMj68W2ipjJGNHETWP7o42AjDnSPgKhdZ4x8NBAvaL72RrXjuXNdmkMqLERZza73oYugGtbLFXG8g';
|
|
11
|
+
describe('safeDerivation', function () {
|
|
12
|
+
describe('parseSafeDerivationIndex', function () {
|
|
13
|
+
it('accepts numbers and digit strings', function () {
|
|
14
|
+
(0, src_1.parseSafeDerivationIndex)(0).should.equal(0);
|
|
15
|
+
(0, src_1.parseSafeDerivationIndex)(7).should.equal(7);
|
|
16
|
+
(0, src_1.parseSafeDerivationIndex)('42').should.equal(42);
|
|
17
|
+
(0, src_1.parseSafeDerivationIndex)(0x7fffffff).should.equal(0x7fffffff);
|
|
18
|
+
});
|
|
19
|
+
it('rejects negatives, non-integers, and out-of-range values', function () {
|
|
20
|
+
(() => (0, src_1.parseSafeDerivationIndex)(-1)).should.throw(/Invalid safe derivation index/);
|
|
21
|
+
(() => (0, src_1.parseSafeDerivationIndex)(1.5)).should.throw(/Invalid safe derivation index/);
|
|
22
|
+
(() => (0, src_1.parseSafeDerivationIndex)(0x80000000)).should.throw(/Invalid safe derivation index/);
|
|
23
|
+
});
|
|
24
|
+
it('rejects non-numeric strings', function () {
|
|
25
|
+
(() => (0, src_1.parseSafeDerivationIndex)("0'")).should.throw(/Invalid safe derivation index/);
|
|
26
|
+
(() => (0, src_1.parseSafeDerivationIndex)('m/0')).should.throw(/Invalid safe derivation index/);
|
|
27
|
+
(() => (0, src_1.parseSafeDerivationIndex)('')).should.throw(/Invalid safe derivation index/);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
describe('getSafeHardenedDerivationPath', function () {
|
|
31
|
+
it('formats m/<index> with hardened apostrophe', function () {
|
|
32
|
+
(0, src_1.getSafeHardenedDerivationPath)(0).should.equal("m/0'");
|
|
33
|
+
(0, src_1.getSafeHardenedDerivationPath)('7').should.equal("m/7'");
|
|
34
|
+
(0, src_1.getSafeHardenedDerivationPath)('007').should.equal("m/7'");
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
describe('deriveSafeChildHardenedFromXprv', function () {
|
|
38
|
+
it('derives m/0 from the root xprv', function () {
|
|
39
|
+
const child = (0, src_1.deriveSafeChildHardenedFromXprv)(ROOT_XPRV, 0);
|
|
40
|
+
child.derivationPath.should.equal("m/0'");
|
|
41
|
+
child.pub.should.equal('xpub69PbR6HB6ZaW3Q9CWAzNsmWXC8TBDq1VEmd25XkwUgrU3PVGAbj6bksqPnGWcFdAodXWRpWMXJ5KGim45n55cZjXeW7FDw4BqahtxTEN4wB');
|
|
42
|
+
child.prv.should.equal('xprv9vQF1akHGC2Cpv4jQ9TNWdZne6cgpNHdsYhRH9MKvMKVAbA7d4Qr3xZMYXqAS35V4damCDP2hYohCLViHzcGhX4Tr7djjCBruAX73SsjCiC');
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
describe('deriveSafeChildEd25519Hardened', function () {
|
|
46
|
+
it('derives m/0 to the pinned SLIP-0010 vector', function () {
|
|
47
|
+
const child = (0, src_1.deriveSafeChildEd25519Hardened)(ROOT_SEED_STRKEY, 0);
|
|
48
|
+
child.should.eql({
|
|
49
|
+
prv: 'b127eb5092011c085345c8ce0bfeda6064f9e1249e29cc238c1d64bf2e587ce7',
|
|
50
|
+
pub: 'GCTZR46FPFAMYN734SQB4NCNBI44M4DSNM5RJPCDLOMAOFPEUVUXPK7R',
|
|
51
|
+
derivationPath: "m/0'",
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
it('derives m/7 to the pinned SLIP-0010 vector', function () {
|
|
55
|
+
const child = (0, src_1.deriveSafeChildEd25519Hardened)(ROOT_SEED_STRKEY, '7');
|
|
56
|
+
child.should.eql({
|
|
57
|
+
prv: 'd54701e221cf51e9e208a7c59e3fe3e4cfbb6b91fd3f35ce092a471c35228217',
|
|
58
|
+
pub: 'GC2Y5EU2XA22SOSCRSZRNDEY3UAA4OJSLZ5NQUFUZDBQSLMVCIZCBHIN',
|
|
59
|
+
derivationPath: "m/7'",
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
it('rejects a malformed root seed', function () {
|
|
63
|
+
(() => (0, src_1.deriveSafeChildEd25519Hardened)(ROOT_SEED_STRKEY.slice(0, 55), 0)).should.throw(/Invalid ed25519 StrKey secret seed/);
|
|
64
|
+
(() => (0, src_1.deriveSafeChildEd25519Hardened)(ROOT_XPRV, 0)).should.throw(/Invalid ed25519 StrKey secret seed/);
|
|
65
|
+
});
|
|
66
|
+
it('rejects an invalid index', function () {
|
|
67
|
+
(() => (0, src_1.deriveSafeChildEd25519Hardened)(ROOT_SEED_STRKEY, -1)).should.throw(/Invalid safe derivation index/);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZURlcml2YXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vc2FmZS9zYWZlRGVyaXZhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGtCQUFnQjtBQUNoQix5Q0FLeUI7QUFFekIsa0ZBQWtGO0FBQ2xGLGdHQUFnRztBQUNoRyw2RkFBNkY7QUFDN0YsaUZBQWlGO0FBQ2pGLE1BQU0sZ0JBQWdCLEdBQUcsMERBQTBELENBQUM7QUFFcEYsTUFBTSxTQUFTLEdBQ2IsaUhBQWlILENBQUM7QUFFcEgsUUFBUSxDQUFDLGdCQUFnQixFQUFFO0lBQ3pCLFFBQVEsQ0FBQywwQkFBMEIsRUFBRTtRQUNuQyxFQUFFLENBQUMsbUNBQW1DLEVBQUU7WUFDdEMsSUFBQSw4QkFBd0IsRUFBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVDLElBQUEsOEJBQXdCLEVBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QyxJQUFBLDhCQUF3QixFQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDaEQsSUFBQSw4QkFBd0IsRUFBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDBEQUEwRCxFQUFFO1lBQzdELENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSw4QkFBd0IsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1lBQ25GLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSw4QkFBd0IsRUFBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFL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LENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDbkYsb0NBQW9DLENBQ3JDLENBQUM7WUFDRixDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUEsb0NBQThCLEVBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1FBQzFHLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDBCQUEwQixFQUFFO1lBQzdCLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSxvQ0FBOEIsRUFBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQzdHLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnc2hvdWxkJztcbmltcG9ydCB7XG4gIGRlcml2ZVNhZmVDaGlsZEVkMjU1MTlIYXJkZW5lZCxcbiAgZGVyaXZlU2FmZUNoaWxkSGFyZGVuZWRGcm9tWHBydixcbiAgZ2V0U2FmZUhhcmRlbmVkRGVyaXZhdGlvblBhdGgsXG4gIHBhcnNlU2FmZURlcml2YXRpb25JbmRleCxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjJztcblxuLy8gMzItYnl0ZSBzeW50aGV0aWMgcm9vdCBzZWVkLiBUaGUgU3RyS2V5IHNwZWxsaW5nIHdhcyBnZW5lcmF0ZWQgd2l0aCBzdGVsbGFyLXNka1xuLy8gKEtleXBhaXIuZnJvbVJhd0VkMjU1MTlTZWVkKTsgdGhlIGRlcml2YXRpb24gdmVjdG9ycyBiZWxvdyB3ZXJlIGdlbmVyYXRlZCB3aXRoIGFuIGluZGVwZW5kZW50XG4vLyBTTElQLTAwMTAgaW1wbGVtZW50YXRpb24gd3JpdHRlbiBmcm9tIHRoZSBzcGVjIGFuZCBjcm9zcy1jaGVja2VkIGFnYWluc3QgcHVibGlzaGVkIHZlY3RvcnNcbi8vIChTTElQLTAwMTAgdGVzdCB2ZWN0b3IgMSBzZWVkIDAwMDEwMi4uLjBmIGRlcml2ZXMgbS8wJyB0byA2OGUwZmU0Ni4uLmRhZGU3YTMpLlxuY29uc3QgUk9PVF9TRUVEX1NUUktFWSA9ICdTQUFBQ0FRREFRQ1FNQllJQkVGQVdEQU5CWUhSQUVJU0NNS0JLRlFYREFNUlVHWTREVVBCNk5LSSc7XG5cbmNvbnN0IFJPT1RfWFBSViA9XG4gICd4cHJ2OXMyMVpyUUgxNDNLM2hla3lOajdUY2lSNFhOWWUxa01qNjhXMmlwakpHTkhFVFdQN280MkFqRG5TUGdLaGRaNHg4TkJBdmFMNzJSclhqdVhOZG1rTXFMRVJaemE3M29ZdWdHdGJMRlhHOGcnO1xuXG5kZXNjcmliZSgnc2FmZURlcml2YXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdwYXJzZVNhZmVEZXJpdmF0aW9uSW5kZXgnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2FjY2VwdHMgbnVtYmVycyBhbmQgZGlnaXQgc3RyaW5ncycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHBhcnNlU2FmZURlcml2YXRpb25JbmRleCgwKS5zaG91bGQuZXF1YWwoMCk7XG4gICAgICBwYXJzZVNhZmVEZXJpdmF0aW9uSW5kZXgoNykuc2hvdWxkLmVxdWFsKDcpO1xuICAgICAgcGFyc2VTYWZlRGVyaXZhdGlvbkluZGV4KCc0MicpLnNob3VsZC5lcXVhbCg0Mik7XG4gICAgICBwYXJzZVNhZmVEZXJpdmF0aW9uSW5kZXgoMHg3ZmZmZmZmZikuc2hvdWxkLmVxdWFsKDB4N2ZmZmZmZmYpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgbmVnYXRpdmVzLCBub24taW50ZWdlcnMsIGFuZCBvdXQtb2YtcmFuZ2UgdmFsdWVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgKCgpID0+IHBhcnNlU2FmZURlcml2YXRpb25JbmRleCgtMSkpLnNob3VsZC50aHJvdygvSW52YWxpZCBzYWZlIGRlcml2YXRpb24gaW5kZXgvKTtcbiAgICAgICgoKSA9PiBwYXJzZVNhZmVEZXJpdmF0aW9uSW5kZXgoMS41KSkuc2hvdWxkLnRocm93KC9JbnZhbGlkIHNhZmUgZGVyaXZhdGlvbiBpbmRleC8pO1xuICAgICAgKCgpID0+IHBhcnNlU2FmZURlcml2YXRpb25JbmRleCgweDgwMDAwMDAwKSkuc2hvdWxkLnRocm93KC9JbnZhbGlkIHNhZmUgZGVyaXZhdGlvbiBpbmRleC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgbm9uLW51bWVyaWMgc3RyaW5ncycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICgoKSA9PiBwYXJzZVNhZmVEZXJpdmF0aW9uSW5kZXgoXCIwJ1wiKSkuc2hvdWxkLnRocm93KC9JbnZhbGlkIHNhZmUgZGVyaXZhdGlvbiBpbmRleC8pO1xuICAgICAgKCgpID0+IHBhcnNlU2FmZURlcml2YXRpb25JbmRleCgnbS8wJykpLnNob3VsZC50aHJvdygvSW52YWxpZCBzYWZlIGRlcml2YXRpb24gaW5kZXgvKTtcbiAgICAgICgoKSA9PiBwYXJzZVNhZmVEZXJpdmF0aW9uSW5kZXgoJycpKS5zaG91bGQudGhyb3coL0ludmFsaWQgc2FmZSBkZXJpdmF0aW9uIGluZGV4Lyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRTYWZlSGFyZGVuZWREZXJpdmF0aW9uUGF0aCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnZm9ybWF0cyBtLzxpbmRleD4gd2l0aCBoYXJkZW5lZCBhcG9zdHJvcGhlJywgZnVuY3Rpb24gKCkge1xuICAgICAgZ2V0U2FmZUhhcmRlbmVkRGVyaXZhdGlvblBhdGgoMCkuc2hvdWxkLmVxdWFsKFwibS8wJ1wiKTtcbiAgICAgIGdldFNhZmVIYXJkZW5lZERlcml2YXRpb25QYXRoKCc3Jykuc2hvdWxkLmVxdWFsKFwibS83J1wiKTtcbiAgICAgIGdldFNhZmVIYXJkZW5lZERlcml2YXRpb25QYXRoKCcwMDcnKS5zaG91bGQuZXF1YWwoXCJtLzcnXCIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZGVyaXZlU2FmZUNoaWxkSGFyZGVuZWRGcm9tWHBydicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnZGVyaXZlcyBtLzAgZnJvbSB0aGUgcm9vdCB4cHJ2JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2hpbGQgPSBkZXJpdmVTYWZlQ2hpbGRIYXJkZW5lZEZyb21YcHJ2KFJPT1RfWFBSViwgMCk7XG4gICAgICBjaGlsZC5kZXJpdmF0aW9uUGF0aC5zaG91bGQuZXF1YWwoXCJtLzAnXCIpO1xuICAgICAgY2hpbGQucHViLnNob3VsZC5lcXVhbChcbiAgICAgICAgJ3hwdWI2OVBiUjZIQjZaYVczUTlDV0F6TnNtV1hDOFRCRHExVkVtZDI1WGt3VWdyVTNQVkdBYmo2YmtzcVBuR1djRmRBb2RYV1JwV01YSjVLR2ltNDVuNTVjWmpYZVc3RkR3NEJxYWh0eFRFTjR3QidcbiAgICAgICk7XG4gICAgICBjaGlsZC5wcnYuc2hvdWxkLmVxdWFsKFxuICAgICAgICAneHBydjl2UUYxYWtIR0MyQ3B2NGpROVROV2RabmU2Y2dwTkhkc1loUkg5TUt2TUtWQWJBN2Q0UXIzeFpNWVhxQVMzNVY0ZGFtQ0RQMmhZb2hDTFZpSHpjR2hYNFRyN2RqakNCcnVBWDczU3NqQ2lDJ1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Rlcml2ZVNhZmVDaGlsZEVkMjU1MTlIYXJkZW5lZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnZGVyaXZlcyBtLzAgdG8gdGhlIHBpbm5lZCBTTElQLTAwMTAgdmVjdG9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2hpbGQgPSBkZXJpdmVTYWZlQ2hpbGRFZDI1NTE5SGFyZGVuZWQoUk9PVF9TRUVEX1NUUktFWSwgMCk7XG4gICAgICBjaGlsZC5zaG91bGQuZXFsKHtcbiAgICAgICAgcHJ2OiAnYjEyN2ViNTA5MjAxMWMwODUzNDVjOGNlMGJmZWRhNjA2NGY5ZTEyNDllMjljYzIzOGMxZDY0YmYyZTU4N2NlNycsXG4gICAgICAgIHB1YjogJ0dDVFpSNDZGUEZBTVlONzM0U1FCNE5DTkJJNDRNNERTTk01UkpQQ0RMT01BT0ZQRVVWVVhQSzdSJyxcbiAgICAgICAgZGVyaXZhdGlvblBhdGg6IFwibS8wJ1wiLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZGVyaXZlcyBtLzcgdG8gdGhlIHBpbm5lZCBTTElQLTAwMTAgdmVjdG9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2hpbGQgPSBkZXJpdmVTYWZlQ2hpbGRFZDI1NTE5SGFyZGVuZWQoUk9PVF9TRUVEX1NUUktFWSwgJzcnKTtcbiAgICAgIGNoaWxkLnNob3VsZC5lcWwoe1xuICAgICAgICBwcnY6ICdkNTQ3MDFlMjIxY2Y1MWU5ZTIwOGE3YzU5ZTNmZTNlNGNmYmI2YjkxZmQzZjM1Y2UwOTJhNDcxYzM1MjI4MjE3JyxcbiAgICAgICAgcHViOiAnR0MyWTVFVTJYQTIyU09TQ1JTWlJOREVZM1VBQTRPSlNMWjVOUVVGVVpEQlFTTE1WQ0laQ0JISU4nLFxuICAgICAgICBkZXJpdmF0aW9uUGF0aDogXCJtLzcnXCIsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgbWFsZm9ybWVkIHJvb3Qgc2VlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICgoKSA9PiBkZXJpdmVTYWZlQ2hpbGRFZDI1NTE5SGFyZGVuZWQoUk9PVF9TRUVEX1NUUktFWS5zbGljZSgwLCA1NSksIDApKS5zaG91bGQudGhyb3coXG4gICAgICAgIC9JbnZhbGlkIGVkMjU1MTkgU3RyS2V5IHNlY3JldCBzZWVkL1xuICAgICAgKTtcbiAgICAgICgoKSA9PiBkZXJpdmVTYWZlQ2hpbGRFZDI1NTE5SGFyZGVuZWQoUk9PVF9YUFJWLCAwKSkuc2hvdWxkLnRocm93KC9JbnZhbGlkIGVkMjU1MTkgU3RyS2V5IHNlY3JldCBzZWVkLyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhbiBpbnZhbGlkIGluZGV4JywgZnVuY3Rpb24gKCkge1xuICAgICAgKCgpID0+IGRlcml2ZVNhZmVDaGlsZEVkMjU1MTlIYXJkZW5lZChST09UX1NFRURfU1RSS0VZLCAtMSkpLnNob3VsZC50aHJvdygvSW52YWxpZCBzYWZlIGRlcml2YXRpb24gaW5kZXgvKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -36,8 +36,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
const sinon = __importStar(require("sinon"));
|
|
37
37
|
require("should");
|
|
38
38
|
const src_1 = require("../../../../src");
|
|
39
|
-
/** A derivable slot-④
|
|
40
|
-
const COMPOSITE_BACKUP_PUB = '
|
|
39
|
+
/** A derivable slot-④ root: raw 32-byte public key plus raw 32-byte chain code in base32. */
|
|
40
|
+
const COMPOSITE_BACKUP_PUB = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKXK5LVOV2XKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA';
|
|
41
41
|
describe('Safes', function () {
|
|
42
42
|
let safes;
|
|
43
43
|
let mockBitGo;
|
|
@@ -93,13 +93,15 @@ describe('Safes', function () {
|
|
|
93
93
|
return {
|
|
94
94
|
create: sinon.stub().returns({ pub: `${coin}-pub`, prv: `${coin}-prv` }),
|
|
95
95
|
add: sinon.stub().resolves({ id: `${coin}-user` }),
|
|
96
|
-
// txlm is the ed25519Multisig root coin, so its backup pub
|
|
97
|
-
// createMultisigRoot asserts that before returning the triplet.
|
|
96
|
+
// txlm is the ed25519Multisig root coin, so its backup pub is neutral raw derivation material.
|
|
98
97
|
createBackup: sinon.stub().resolves({
|
|
99
98
|
id: `${coin}-backup`,
|
|
100
99
|
...(coin === 'txlm' || coin === 'xlm' ? { pub: COMPOSITE_BACKUP_PUB } : {}),
|
|
101
100
|
}),
|
|
102
|
-
createBitGo: sinon.stub().resolves({
|
|
101
|
+
createBitGo: sinon.stub().resolves({
|
|
102
|
+
id: `${coin}-bitgo`,
|
|
103
|
+
...(coin === 'txlm' || coin === 'xlm' ? { pub: COMPOSITE_BACKUP_PUB } : {}),
|
|
104
|
+
}),
|
|
103
105
|
createMpc: sinon.stub().resolves({
|
|
104
106
|
userKeychain: { id: `${coin}-user` },
|
|
105
107
|
backupKeychain: { id: `${coin}-backup` },
|
|
@@ -131,17 +133,27 @@ describe('Safes', function () {
|
|
|
131
133
|
});
|
|
132
134
|
});
|
|
133
135
|
it('rejects an ed25519Multisig backup root that came back non-derivable', async function () {
|
|
134
|
-
//
|
|
135
|
-
// the root is silently non-derivable and the wallets minted from it are unrecoverable.
|
|
136
|
+
// A bare Stellar StrKey is not the neutral raw root format.
|
|
136
137
|
keychainsByCoin['txlm'] = makeKeychains('txlm');
|
|
137
|
-
// A bare 56-char StrKey: the pub createBackup would post if it failed to recognise slot ④.
|
|
138
138
|
keychainsByCoin['txlm'].createBackup.resolves({
|
|
139
139
|
id: 'txlm-backup',
|
|
140
140
|
pub: 'GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH',
|
|
141
141
|
});
|
|
142
142
|
await safes
|
|
143
143
|
.createSafeKeys({ label: 'my safe', passphrase: 'pw', safeId: 'safe-1' })
|
|
144
|
-
.should.be.rejectedWith(/ed25519Multisig
|
|
144
|
+
.should.be.rejectedWith(/ed25519Multisig roots are not derivable/);
|
|
145
|
+
});
|
|
146
|
+
it('rejects an ed25519Multisig BitGo root that came back non-derivable', async function () {
|
|
147
|
+
// The BitGo root is composed server-side; if it ever comes back as a bare Stellar StrKey
|
|
148
|
+
// instead of the neutral raw root format, wallets minted from it are unrecoverable.
|
|
149
|
+
keychainsByCoin['txlm'] = makeKeychains('txlm');
|
|
150
|
+
keychainsByCoin['txlm'].createBitGo.resolves({
|
|
151
|
+
id: 'txlm-bitgo',
|
|
152
|
+
pub: 'GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH',
|
|
153
|
+
});
|
|
154
|
+
await safes
|
|
155
|
+
.createSafeKeys({ label: 'my safe', passphrase: 'pw', safeId: 'safe-1' })
|
|
156
|
+
.should.be.rejectedWith(/ed25519Multisig roots are not derivable/);
|
|
145
157
|
});
|
|
146
158
|
it('does not apply the derivable check to the secp256k1Multisig slot', async function () {
|
|
147
159
|
// Slot ① backup roots are xpubs, which already carry a chain code and are never composed.
|
|
@@ -202,7 +214,7 @@ describe('Safes', function () {
|
|
|
202
214
|
keychainsByCoin['tbtc'] = makeKeychains('tbtc');
|
|
203
215
|
keychainsByCoin['tbtc'].createBitGo = gated({ id: 'tbtc-bitgo' });
|
|
204
216
|
keychainsByCoin['txlm'] = makeKeychains('txlm');
|
|
205
|
-
keychainsByCoin['txlm'].createBitGo = gated({ id: 'txlm-bitgo' });
|
|
217
|
+
keychainsByCoin['txlm'].createBitGo = gated({ id: 'txlm-bitgo', pub: COMPOSITE_BACKUP_PUB });
|
|
206
218
|
keychainsByCoin['hteth'] = makeKeychains('hteth');
|
|
207
219
|
keychainsByCoin['hteth'].createMpc = gated({
|
|
208
220
|
userKeychain: { id: 'hteth-user' },
|
|
@@ -361,4 +373,4 @@ describe('Safes', function () {
|
|
|
361
373
|
});
|
|
362
374
|
});
|
|
363
375
|
});
|
|
364
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vc2FmZS9zYWZlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZDQUErQjtBQUMvQixrQkFBZ0I7QUFFaEIseUNBQW9FO0FBRXBFLHVGQUF1RjtBQUN2RixNQUFNLG9CQUFvQixHQUN4QiwwREFBMEQsR0FBRyxzREFBc0QsQ0FBQztBQUV0SCxRQUFRLENBQUMsT0FBTyxFQUFFO0lBQ2hCLElBQUksS0FBWSxDQUFDO0lBQ2pCLElBQUksU0FBYyxDQUFDO0lBQ25CLE1BQU0sWUFBWSxHQUFHO1FBQ25CLEVBQUUsRUFBRSxjQUFjO1FBQ2xCLFlBQVksRUFBRSxvQkFBb0I7UUFDbEMsS0FBSyxFQUFFLFNBQVM7UUFDaEIsTUFBTSxFQUFFLFFBQVE7UUFDaEIsT0FBTyxFQUFFLFlBQVk7UUFDckIsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ2xFLFNBQVMsRUFBRSwwQkFBMEI7S0FDdEMsQ0FBQztJQUVGLFVBQVUsQ0FBQztRQUNULFNBQVMsR0FBRztZQUNWLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDbkQsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUU7U0FDbkIsQ0FBQztRQUNGLEtBQUssR0FBRyxJQUFJLFdBQUssQ0FBQyxTQUFTLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztJQUNyRCxDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsQ0FBQztRQUNSLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsQixDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEs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bXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQgeyBJbml0aWFsaXplU2FmZVJlc3BvbnNlIH0gZnJvbSAnQGJpdGdvL3B1YmxpYy10eXBlcyc7XG5pbXBvcnQgeyBFbnRlcnByaXNlLCBTYWZlLCBTYWZlS2V5cywgU2FmZXMgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMnO1xuXG4vKiogQSBkZXJpdmFibGUgc2xvdC3ikaMgYmFja3VwIHJvb3QgcHViOiA1Ni1jaGFyIFN0cktleSB8fCA1Mi1jaGFyIGJhc2UzMiBjaGFpbiBjb2RlLiAqL1xuY29uc3QgQ09NUE9TSVRFX0JBQ0tVUF9QVUIgPVxuICAnR0E1V1VKNTRaMjNLSUxMQ1VPVU5BS1RQQlZaV0tNUVZPNE82RVE1R0hMQUVSSU1MTEhOQ1NLWUgnICsgJ1RJSFRZN0k2TE1VRU1DWFQzRVdHNUFOWEFVNzJKUVhKUlVMM01CS0RVTDZJNEdPWFdCREEnO1xuXG5kZXNjcmliZSgnU2FmZXMnLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBzYWZlczogU2FmZXM7XG4gIGxldCBtb2NrQml0R286IGFueTtcbiAgY29uc3Qgc2FmZURhdGFXaXJlID0ge1xuICAgIGlkOiAndGVzdC1zYWZlLWlkJyxcbiAgICBlbnRlcnByaXNlSWQ6ICd0ZXN0LWVudGVycHJpc2UtaWQnLFxuICAgIGxhYmVsOiAnbXkgc2FmZScsXG4gICAgc3RhdHVzOiAnYWN0aXZlJyxcbiAgICBjcmVhdG9yOiAnY3JlYXRvci1pZCcsXG4gICAgdXNlcnM6IFt7IHVzZXJJZDogJ2NyZWF0b3ItaWQnLCBwZXJtaXNzaW9uczogWydhZG1pbicsICdzcGVuZCddIH1dLFxuICAgIGNyZWF0ZWRBdDogJzIwMjYtMDctMDdUMDA6MDA6MDAuMDAwWicsXG4gIH07XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgbW9ja0JpdEdvID0ge1xuICAgICAgdXJsOiBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKChwYXRoOiBzdHJpbmcpID0+IHBhdGgpLFxuICAgICAgcG9zdDogc2lub24uc3R1YigpLFxuICAgIH07XG4gICAgc2FmZXMgPSBuZXcgU2FmZXMobW9ja0JpdEdvLCAndGVzdC1lbnRlcnByaXNlLWlkJyk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBkZXNjcmliZSgnaW5pdGlhbGl6ZVNhZmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ1BPU1RzIHRvIHRoZSBzYWZlcyBjb2xsZWN0aW9uIFVSTCBhbmQgcmV0dXJucyB0aGUgaW5pdGlhbGl6aW5nIGlkL3N0YXR1cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGluaXRpYWxpemVSZXNwb25zZVdpcmUgPSB7IGlkOiAndGVzdC1zYWZlLWlkJywgc3RhdHVzOiAnaW5pdGlhbGl6aW5nJyB9O1xuICAgICAgY29uc3Qgc2VuZCA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHsgcmVzdWx0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoaW5pdGlhbGl6ZVJlc3BvbnNlV2lyZSkgfSk7XG4gICAgICBtb2NrQml0R28ucG9zdC5yZXR1cm5zKHsgc2VuZCB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2FmZXMuaW5pdGlhbGl6ZVNhZmUoeyBsYWJlbDogJ215IHNhZmUnIH0pO1xuXG4gICAgICByZXN1bHQuaWQuc2hvdWxkLmVxdWFsKCd0ZXN0LXNhZmUtaWQnKTtcbiAgICAgIHJlc3VsdC5zdGF0dXMuc2hvdWxkLmVxdWFsKCdpbml0aWFsaXppbmcnKTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoKG1vY2tCaXRHby5wb3N0LCAnL2VudGVycHJpc2UvdGVzdC1lbnRlcnByaXNlLWlkL3NhZmVzJyk7XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aChzZW5kLCB7IGxhYmVsOiAnbXkgc2FmZScgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZGVjb2RlcyBlbmFibGVkUm9vdFNsb3RzIHdoZW4gdGhlIHNlcnZlciByZXR1cm5zIHRoZW0nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbml0aWFsaXplUmVzcG9uc2VXaXJlID0ge1xuICAgICAgICBpZDogJ3Rlc3Qtc2FmZS1pZCcsXG4gICAgICAgIHN0YXR1czogJ2luaXRpYWxpemluZycsXG4gICAgICAgIGVuYWJsZWRSb290U2xvdHM6IFsnc2VjcDI1NmsxTXVsdGlzaWcnLCAnZWNkc2FNcGMnXSxcbiAgICAgIH07XG4gICAgICBjb25zdCBzZW5kID0gc2lub24uc3R1YigpLnJldHVybnMoeyByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhpbml0aWFsaXplUmVzcG9uc2VXaXJlKSB9KTtcbiAgICAgIG1vY2tCaXRHby5wb3N0LnJldHVybnMoeyBzZW5kIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzYWZlcy5pbml0aWFsaXplU2FmZSh7IGxhYmVsOiAnbXkgc2FmZScgfSk7XG5cbiAgICAgIGlmIChyZXN1bHQuZW5hYmxlZFJvb3RTbG90cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgZW5hYmxlZFJvb3RTbG90cycpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LmVuYWJsZWRSb290U2xvdHMuc2hvdWxkLmRlZXBFcXVhbChbJ3NlY3AyNTZrMU11bHRpc2lnJywgJ2VjZHNhTXBjJ10pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY3JlYXRlU2FmZUtleXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgLy8gUGVyLWNvaW4ga2V5Y2hhaW5zKCkgbW9jazogbXVsdGlzaWcgY29pbnMgdXNlIGNyZWF0ZS9hZGQvY3JlYXRlQmFja3VwL2NyZWF0ZUJpdEdvOyBNUEMgY29pbnNcbiAgICAvLyB1c2UgY3JlYXRlTXBjLiBJZHMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgY29pbiBuYW1lIHNvIHdlIGNhbiBhc3NlcnQgcGVyLXNsb3QgY29pbiByb3V0aW5nLlxuICAgIGZ1bmN0aW9uIG1ha2VLZXljaGFpbnMoY29pbjogc3RyaW5nKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjcmVhdGU6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHsgcHViOiBgJHtjb2lufS1wdWJgLCBwcnY6IGAke2NvaW59LXBydmAgfSksXG4gICAgICAgIGFkZDogc2lub24uc3R1YigpLnJlc29sdmVzKHsgaWQ6IGAke2NvaW59LXVzZXJgIH0pLFxuICAgICAgICAvLyB0eGxtIGlzIHRoZSBlZDI1NTE5TXVsdGlzaWcgcm9vdCBjb2luLCBzbyBpdHMgYmFja3VwIHB1YiBjb21lcyBiYWNrIGNvbXBvc2l0ZSDigJRcbiAgICAgICAgLy8gY3JlYXRlTXVsdGlzaWdSb290IGFzc2VydHMgdGhhdCBiZWZvcmUgcmV0dXJuaW5nIHRoZSB0cmlwbGV0LlxuICAgICAgICBjcmVhdGVCYWNrdXA6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICAgICAgaWQ6IGAke2NvaW59LWJhY2t1cGAsXG4gICAgICAgICAgLi4uKGNvaW4gPT09ICd0eGxtJyB8fCBjb2luID09PSAneGxtJyA/IHsgcHViOiBDT01QT1NJVEVfQkFDS1VQX1BVQiB9IDoge30pLFxuICAgICAgICB9KSxcbiAgICAgICAgY3JlYXRlQml0R286IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IGlkOiBgJHtjb2lufS1iaXRnb2AgfSksXG4gICAgICAgIGNyZWF0ZU1wYzogc2lub24uc3R1YigpLnJlc29sdmVzKHtcbiAgICAgICAgICB1c2VyS2V5Y2hhaW46IHsgaWQ6IGAke2NvaW59LXVzZXJgIH0sXG4gICAgICAgICAgYmFja3VwS2V5Y2hhaW46IHsgaWQ6IGAke2NvaW59LWJhY2t1cGAgfSxcbiAgICAgICAgICBiaXRnb0tleWNoYWluOiB7IGlkOiBgJHtjb2lufS1iaXRnb2AgfSxcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIGxldCBrZXljaGFpbnNCeUNvaW46IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIG1ha2VLZXljaGFpbnM+PjtcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAga2V5Y2hhaW5zQnlDb2luID0ge307XG4gICAgICBtb2NrQml0R28uZ2V0RW52ID0gc2lub24uc3R1YigpLnJldHVybnMoJ3Rlc3QnKTsgLy8gdGVzdG5ldCBjb2luIG1hcFxuICAgICAgbW9ja0JpdEdvLmVuY3J5cHQgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoJ2VuY3J5cHRlZC1wcnYnKTtcbiAgICAgIG1vY2tCaXRHby5jb2luID0gc2lub24uc3R1YigpLmNhbGxzRmFrZSgobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGtleWNoYWluc0J5Q29pbltuYW1lXSA9IGtleWNoYWluc0J5Q29pbltuYW1lXSB8fCBtYWtlS2V5Y2hhaW5zKG5hbWUpO1xuICAgICAgICByZXR1cm4geyBrZXljaGFpbnM6ICgpID0+IGtleWNoYWluc0J5Q29pbltuYW1lXSB9O1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgncnVucyB0aGUgNCByb290IGNlcmVtb25pZXMgYW5kIHJldHVybnMgMTIgaWRzIGFzIG9yZGVyZWQgdHJpcGxldHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzYWZlcy5jcmVhdGVTYWZlS2V5cyh7IGxhYmVsOiAnbXkgc2FmZScsIHBhc3NwaHJhc2U6ICdwdycsIHNhZmVJZDogJ3NhZmUtMScgfSk7XG5cbiAgICAgIHJlc3VsdC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgcm9vdEtleXM6IHtcbiAgICAgICAgICBob3Q6IHtcbiAgICAgICAgICAgIHNlY3AyNTZrMU11bHRpc2lnOiBbJ3RidGMtdXNlcicsICd0YnRjLWJhY2t1cCcsICd0YnRjLWJpdGdvJ10sXG4gICAgICAgICAgICBlY2RzYU1wYzogWydodGV0aC11c2VyJywgJ2h0ZXRoLWJhY2t1cCcsICdodGV0aC1iaXRnbyddLFxuICAgICAgICAgICAgZWRkc2FNcGM6IFsndHNvbC11c2VyJywgJ3Rzb2wtYmFja3VwJywgJ3Rzb2wtYml0Z28nXSxcbiAgICAgICAgICAgIGVkMjU1MTlNdWx0aXNpZzogWyd0eGxtLXVzZXInLCAndHhsbS1iYWNrdXAnLCAndHhsbS1iaXRnbyddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGFuIGVkMjU1MTlNdWx0aXNpZyBiYWNrdXAgcm9vdCB0aGF0IGNhbWUgYmFjayBub24tZGVyaXZhYmxlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gY3JlYXRlQmFja3VwIGluZmVycyBzbG90IOKRoyBmcm9tIHRoZSBnZW5lcmF0ZWQgcHViJ3Mgc2hhcGU7IGlmIHRoYXQgaW5mZXJlbmNlIGV2ZXIgbWlzc2VzLFxuICAgICAgLy8gdGhlIHJvb3QgaXMgc2lsZW50bHkgbm9uLWRlcml2YWJsZSBhbmQgdGhlIHdhbGxldHMgbWludGVkIGZyb20gaXQgYXJlIHVucmVjb3ZlcmFibGUuXG4gICAgICBrZXljaGFpbnNCeUNvaW5bJ3R4bG0nXSA9IG1ha2VLZXljaGFpbnMoJ3R4bG0nKTtcbiAgICAgIC8vIEEgYmFyZSA1Ni1jaGFyIFN0cktleTogdGhlIHB1YiBjcmVhdGVCYWNrdXAgd291bGQgcG9zdCBpZiBpdCBmYWlsZWQgdG8gcmVjb2duaXNlIHNsb3Qg4pGjLlxuICAgICAga2V5Y2hhaW5zQnlDb2luWyd0eGxtJ10uY3JlYXRlQmFja3VwLnJlc29sdmVzKHtcbiAgICAgICAgaWQ6ICd0eGxtLWJhY2t1cCcsXG4gICAgICAgIHB1YjogJ0dBNVdVSjU0WjIzS0lMTENVT1VOQUtUUEJWWldLTVFWTzRPNkVRNUdITEFFUklNTExITkNTS1lIJyxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBzYWZlc1xuICAgICAgICAuY3JlYXRlU2FmZUtleXMoeyBsYWJlbDogJ215IHNhZmUnLCBwYXNzcGhyYXNlOiAncHcnLCBzYWZlSWQ6ICdzYWZlLTEnIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9lZDI1NTE5TXVsdGlzaWcgYmFja3VwIHJvb3QgaXMgbm90IGRlcml2YWJsZS8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IGFwcGx5IHRoZSBkZXJpdmFibGUgY2hlY2sgdG8gdGhlIHNlY3AyNTZrMU11bHRpc2lnIHNsb3QnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBTbG90IOKRoCBiYWNrdXAgcm9vdHMgYXJlIHhwdWJzLCB3aGljaCBhbHJlYWR5IGNhcnJ5IGEgY2hhaW4gY29kZSBhbmQgYXJlIG5ldmVyIGNvbXBvc2VkLlxuICAgICAga2V5Y2hhaW5zQnlDb2luWyd0YnRjJ10gPSBtYWtlS2V5Y2hhaW5zKCd0YnRjJyk7XG4gICAgICBrZXljaGFpbnNCeUNvaW5bJ3RidGMnXS5jcmVhdGVCYWNrdXAucmVzb2x2ZXMoeyBpZDogJ3RidGMtYmFja3VwJyB9KTtcblxuICAgICAgYXdhaXQgc2FmZXMuY3JlYXRlU2FmZUtleXMoeyBsYWJlbDogJ215IHNhZmUnLCBwYXNzcGhyYXNlOiAncHcnLCBzYWZlSWQ6ICdzYWZlLTEnIH0pLnNob3VsZC5iZS5mdWxmaWxsZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KCd0YWdzIGV2ZXJ5IG11bHRpc2lnIGtleSByZWdpc3RyYXRpb24gd2l0aCBzYWZlSWQgYW5kIHRoZSBjb3JyZWN0IHNvdXJjZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHNhZmVzLmNyZWF0ZVNhZmVLZXlzKHsgbGFiZWw6ICdteSBzYWZlJywgcGFzc3BocmFzZTogJ3B3Jywgc2FmZUlkOiAnc2FmZS0xJyB9KTtcblxuICAgICAgY29uc3QgYnRjID0ga2V5Y2hhaW5zQnlDb2luWyd0YnRjJ107XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aE1hdGNoKGJ0Yy5hZGQsIHtcbiAgICAgICAgcHViOiAndGJ0Yy1wdWInLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQtcHJ2JyxcbiAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgIHNhZmVJZDogJ3NhZmUtMScsXG4gICAgICB9KTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoTWF0Y2goYnRjLmNyZWF0ZUJhY2t1cCwgeyBwYXNzcGhyYXNlOiAncHcnLCBzYWZlSWQ6ICdzYWZlLTEnIH0pO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGhNYXRjaChidGMuY3JlYXRlQml0R28sIHsgZW50ZXJwcmlzZTogJ3Rlc3QtZW50ZXJwcmlzZS1pZCcsIHNhZmVJZDogJ3NhZmUtMScgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgndGhyZWFkcyBzYWZlSWQgKyBlbnRlcnByaXNlIGludG8gYm90aCBNUEMgY2VyZW1vbmllcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHNhZmVzLmNyZWF0ZVNhZmVLZXlzKHsgbGFiZWw6ICdteSBzYWZlJywgcGFzc3BocmFzZTogJ3B3Jywgc2FmZUlkOiAnc2FmZS0xJyB9KTtcblxuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGhNYXRjaChrZXljaGFpbnNCeUNvaW5bJ2h0ZXRoJ10uY3JlYXRlTXBjLCB7XG4gICAgICAgIG11bHRpc2lnVHlwZTogJ3RzcycsXG4gICAgICAgIHBhc3NwaHJhc2U6ICdwdycsXG4gICAgICAgIGVudGVycHJpc2U6ICd0ZXN0LWVudGVycHJpc2UtaWQnLFxuICAgICAgICBzYWZlSWQ6ICdzYWZlLTEnLFxuICAgICAgfSk7XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aE1hdGNoKGtleWNoYWluc0J5Q29pblsndHNvbCddLmNyZWF0ZU1wYywge1xuICAgICAgICBtdWx0aXNpZ1R5cGU6ICd0c3MnLFxuICAgICAgICBwYXNzcGhyYXNlOiAncHcnLFxuICAgICAgICBlbnRlcnByaXNlOiAndGVzdC1lbnRlcnByaXNlLWlkJyxcbiAgICAgICAgc2FmZUlkOiAnc2FmZS0xJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3NlbGVjdHMgbWFpbm5ldCBjb2lucyBpbiBhIHByb2QgZW52aXJvbm1lbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBtb2NrQml0R28uZ2V0RW52ID0gc2lub24uc3R1YigpLnJldHVybnMoJ3Byb2QnKTtcbiAgICAgIGF3YWl0IHNhZmVzLmNyZWF0ZVNhZmVLZXlzKHsgbGFiZWw6ICdteSBzYWZlJywgcGFzc3BocmFzZTogJ3B3Jywgc2FmZUlkOiAnc2FmZS0xJyB9KTtcblxuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGgobW9ja0JpdEdvLmNvaW4sICdidGMnKTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoKG1vY2tCaXRHby5jb2luLCAnZXRoJyk7XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aChtb2NrQml0R28uY29pbiwgJ3NvbCcpO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGgobW9ja0JpdEdvLmNvaW4sICd4bG0nKTtcbiAgICB9KTtcblxuICAgIGl0KCdydW5zIHRoZSA0IHJvb3QgY2VyZW1vbmllcyBpbiBwYXJhbGxlbCAobm9uZSBhd2FpdHMgYW5vdGhlciknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBHYXRlIGV4YWN0bHkgb25lIGNhbGwgcGVyIHJvb3Qgb24gYSBzaGFyZWQgbGF0Y2ggdGhhdCBvbmx5IG9wZW5zIG9uY2UgYWxsIDQgcm9vdHMgaGF2ZVxuICAgICAgLy8gZW50ZXJlZC4gSWYgdGhlIHJvb3RzIHJhbiBzZXF1ZW50aWFsbHksIHRoZSBmaXJzdCB3b3VsZCBhd2FpdCB0aGUgbGF0Y2ggZm9yZXZlciDihpIgdGhlXG4gICAgICAvLyB0ZXN0IHdvdWxkIHRpbWUgb3V0OyBjb21wbGV0aW5nIHByb3ZlcyBhbGwgNCB3ZXJlIGluIGZsaWdodCBjb25jdXJyZW50bHkuXG4gICAgICBsZXQgcmVsZWFzZTogKCkgPT4gdm9pZCA9ICgpID0+IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGdhdGUgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4gKHJlbGVhc2UgPSByZXNvbHZlKSk7XG4gICAgICBsZXQgc3RhcnRlZCA9IDA7XG4gICAgICBjb25zdCBnYXRlZCA9IChyZXN1bHQ6IGFueSkgPT5cbiAgICAgICAgc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgaWYgKCsrc3RhcnRlZCA9PT0gNCkge1xuICAgICAgICAgICAgcmVsZWFzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBnYXRlO1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgICAgLy8gb25lIGdhdGVkIGVudHJ5IHBvaW50IHBlciByb290OiBtdWx0aXNpZyByb290cyB2aWEgY3JlYXRlQml0R28sIE1QQyByb290cyB2aWEgY3JlYXRlTXBjXG4gICAgICBrZXljaGFpbnNCeUNvaW5bJ3RidGMnXSA9IG1ha2VLZXljaGFpbnMoJ3RidGMnKTtcbiAgICAgIGtleWNoYWluc0J5Q29pblsndGJ0YyddLmNyZWF0ZUJpdEdvID0gZ2F0ZWQoeyBpZDogJ3RidGMtYml0Z28nIH0pO1xuICAgICAga2V5Y2hhaW5zQnlDb2luWyd0eGxtJ10gPSBtYWtlS2V5Y2hhaW5zKCd0eGxtJyk7XG4gICAgICBrZXljaGFpbnNCeUNvaW5bJ3R4bG0nXS5jcmVhdGVCaXRHbyA9IGdhdGVkKHsgaWQ6ICd0eGxtLWJpdGdvJyB9KTtcbiAgICAgIGtleWNoYWluc0J5Q29pblsnaHRldGgnXSA9IG1ha2VLZXljaGFpbnMoJ2h0ZXRoJyk7XG4gICAgICBrZXljaGFpbnNCeUNvaW5bJ2h0ZXRoJ10uY3JlYXRlTXBjID0gZ2F0ZWQoe1xuICAgICAgICB1c2VyS2V5Y2hhaW46IHsgaWQ6ICdodGV0aC11c2VyJyB9LFxuICAgICAgICBiYWNrdXBLZXljaGFpbjogeyBpZDogJ2h0ZXRoLWJhY2t1cCcgfSxcbiAgICAgICAgYml0Z29LZXljaGFpbjogeyBpZDogJ2h0ZXRoLWJpdGdvJyB9LFxuICAgICAgfSk7XG4gICAgICBrZXljaGFpbnNCeUNvaW5bJ3Rzb2wnXSA9IG1ha2VLZXljaGFpbnMoJ3Rzb2wnKTtcbiAgICAgIGtleWNoYWluc0J5Q29pblsndHNvbCddLmNyZWF0ZU1wYyA9IGdhdGVkKHtcbiAgICAgICAgdXNlcktleWNoYWluOiB7IGlkOiAndHNvbC11c2VyJyB9LFxuICAgICAgICBiYWNrdXBLZXljaGFpbjogeyBpZDogJ3Rzb2wtYmFja3VwJyB9LFxuICAgICAgICBiaXRnb0tleWNoYWluOiB7IGlkOiAndHNvbC1iaXRnbycgfSxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBzYWZlcy5jcmVhdGVTYWZlS2V5cyh7IGxhYmVsOiAnbXkgc2FmZScsIHBhc3NwaHJhc2U6ICdwdycsIHNhZmVJZDogJ3NhZmUtMScgfSk7XG4gICAgICBzdGFydGVkLnNob3VsZC5lcXVhbCg0KTtcbiAgICB9KTtcblxuICAgIGl0KCdydW5zIG9ubHkgdGhlIGVuYWJsZWQgY2VyZW1vbmllcyB3aGVuIGVuYWJsZWRSb290U2xvdHMgaXMgYSBzdWJzZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzYWZlcy5jcmVhdGVTYWZlS2V5cyh7XG4gICAgICAgIGxhYmVsOiAnbXkgc2FmZScsXG4gICAgICAgIHBhc3NwaHJhc2U6ICdwdycsXG4gICAgICAgIHNhZmVJZDogJ3NhZmUtMScsXG4gICAgICAgIGVuYWJsZWRSb290U2xvdHM6IFsnZWNkc2FNcGMnLCAnZWRkc2FNcGMnXSxcbiAgICAgIH0pO1xuXG4gICAgICByZXN1bHQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIHJvb3RLZXlzOiB7XG4gICAgICAgICAgaG90OiB7XG4gICAgICAgICAgICBlY2RzYU1wYzogWydodGV0aC11c2VyJywgJ2h0ZXRoLWJhY2t1cCcsICdodGV0aC1iaXRnbyddLFxuICAgICAgICAgICAgZWRkc2FNcGM6IFsndHNvbC11c2VyJywgJ3Rzb2wtYmFja3VwJywgJ3Rzb2wtYml0Z28nXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBrZXljaGFpbnNCeUNvaW4uc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCd0YnRjJyk7XG4gICAgICBrZXljaGFpbnNCeUNvaW4uc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCd0eGxtJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnYXJjaGl2ZXMgdGhlIHNhZmUgYW5kIHRocm93cyBsaXN0aW5nIGV2ZXJ5IGZhaWxlZCBjZXJlbW9ueScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFR3byBjZXJlbW9uaWVzIGZhaWwgKGFuIE1QQyBhbmQgYSBtdWx0aXNpZyByb290KS5cbiAgICAgIGtleWNoYWluc0J5Q29pblsnaHRldGgnXSA9IG1ha2VLZXljaGFpbnMoJ2h0ZXRoJyk7XG4gICAgICBrZXljaGFpbnNCeUNvaW5bJ2h0ZXRoJ10uY3JlYXRlTXBjID0gc2lub24uc3R1YigpLnJlamVjdHMobmV3IEVycm9yKCdka2xzIGJvb20nKSk7XG4gICAgICBrZXljaGFpbnNCeUNvaW5bJ3R4bG0nXSA9IG1ha2VLZXljaGFpbnMoJ3R4bG0nKTtcbiAgICAgIGtleWNoYWluc0J5Q29pblsndHhsbSddLmNyZWF0ZUJpdEdvID0gc2lub24uc3R1YigpLnJlamVjdHMobmV3IEVycm9yKCdiaXRnbyBrZXkgYm9vbScpKTtcbiAgICAgIC8vIGFyY2hpdmUgc3VjY2VlZHMsIHJldHVybmluZyBhIHZhbGlkIChhcmNoaXZlZCkgU2FmZURhdGFcbiAgICAgIGNvbnN0IHNlbmQgPSBzaW5vbi5zdHViKCkucmV0dXJucyh7XG4gICAgICAgIHJlc3VsdDogc2lub24uc3R1YigpLnJlc29sdmVzKHsgLi4uc2FmZURhdGFXaXJlLCBzdGF0dXM6ICdhcmNoaXZlZCcgfSksXG4gICAgICB9KTtcbiAgICAgIG1vY2tCaXRHby5wb3N0LnJldHVybnMoeyBzZW5kIH0pO1xuXG4gICAgICBjb25zdCBlcnIgPSBhd2FpdCBzYWZlc1xuICAgICAgICAuY3JlYXRlU2FmZUtleXMoeyBsYWJlbDogJ215IHNhZmUnLCBwYXNzcGhyYXNlOiAncHcnLCBzYWZlSWQ6ICdzYWZlLTEnIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9TYWZlIGtleSBnZW5lcmF0aW9uIGZhaWxlZCBmb3IgMiByb290Lyk7XG4gICAgICBlcnIubWVzc2FnZS5zaG91bGQubWF0Y2goL2VjZHNhTXBjOiBka2xzIGJvb20vKTtcbiAgICAgIGVyci5tZXNzYWdlLnNob3VsZC5tYXRjaCgvZWQyNTUxOU11bHRpc2lnOiBiaXRnbyBrZXkgYm9vbS8pO1xuICAgICAgZXJyLm1lc3NhZ2Uuc2hvdWxkLm1hdGNoKC9oYXMgYmVlbiBhcmNoaXZlZC8pO1xuICAgICAgZXJyLm1lc3NhZ2Uuc2hvdWxkLm5vdC5tYXRjaCgvYXJjaGl2aW5nIHRoZSBzYWZlIGFsc28gZmFpbGVkLyk7XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aChtb2NrQml0R28ucG9zdCwgJy9lbnRlcnByaXNlL3Rlc3QtZW50ZXJwcmlzZS1pZC9zYWZlcy9zYWZlLTEvYXJjaGl2ZScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ25vdGVzIHdoZW4gYXJjaGl2aW5nIGFsc28gZmFpbHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBrZXljaGFpbnNCeUNvaW5bJ3Rzb2wnXSA9IG1ha2VLZXljaGFpbnMoJ3Rzb2wnKTtcbiAgICAgIGtleWNoYWluc0J5Q29pblsndHNvbCddLmNyZWF0ZU1wYyA9IHNpbm9uLnN0dWIoKS5yZWplY3RzKG5ldyBFcnJvcignZWRkc2EgYm9vbScpKTtcbiAgICAgIG1vY2tCaXRHby5wb3N0LnJldHVybnMoe1xuICAgICAgICBzZW5kOiBzaW5vbi5zdHViKCkucmV0dXJucyh7IHJlc3VsdDogc2lub24uc3R1YigpLnJlamVjdHMobmV3IEVycm9yKCdhcmNoaXZlIDUwMCcpKSB9KSxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBzYWZlc1xuICAgICAgICAuY3JlYXRlU2FmZUtleXMoeyBsYWJlbDogJ215IHNhZmUnLCBwYXNzcGhyYXNlOiAncHcnLCBzYWZlSWQ6ICdzYWZlLTEnIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9hcmNoaXZpbmcgdGhlIHNhZmUgYWxzbyBmYWlsZWQgXFwoYXJjaGl2ZSA1MDBcXCkuKmFyY2hpdmUgaXQgbWFudWFsbHkvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2ZpbmFsaXplU2FmZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByb290S2V5cyA9IHtcbiAgICAgIGhvdDoge1xuICAgICAgICBzZWNwMjU2azFNdWx0aXNpZzogWyd1MScsICdiMScsICdnMSddIGFzIFtzdHJpbmcsIHN0cmluZywgc3RyaW5nXSxcbiAgICAgICAgZWNkc2FNcGM6IFsndTInLCAnYjInLCAnZzInXSBhcyBbc3RyaW5nLCBzdHJpbmcsIHN0cmluZ10sXG4gICAgICAgIGVkZHNhTXBjOiBbJ3UzJywgJ2IzJywgJ2czJ10gYXMgW3N0cmluZywgc3RyaW5nLCBzdHJpbmddLFxuICAgICAgICBlZDI1NTE5TXVsdGlzaWc6IFsndTQnLCAnYjQnLCAnZzQnXSBhcyBbc3RyaW5nLCBzdHJpbmcsIHN0cmluZ10sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBpdCgnUE9TVHMgdGhlIHJvb3RLZXlzIHRvIHRoZSBmaW5hbGl6ZSBVUkwgYW5kIHJldHVybnMgdGhlIGFjdGl2ZSBTYWZlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2VuZCA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHsgcmVzdWx0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoc2FmZURhdGFXaXJlKSB9KTtcbiAgICAgIG1vY2tCaXRHby5wb3N0LnJldHVybnMoeyBzZW5kIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzYWZlcy5maW5hbGl6ZVNhZmUoJ3Rlc3Qtc2FmZS1pZCcsIHsgcm9vdEtleXMgfSk7XG5cbiAgICAgIHJlc3VsdC5zaG91bGQuYmUuaW5zdGFuY2VvZihTYWZlKTtcbiAgICAgIHJlc3VsdC5zdGF0dXMoKS5zaG91bGQuZXF1YWwoJ2FjdGl2ZScpO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGgobW9ja0JpdEdvLnBvc3QsICcvZW50ZXJwcmlzZS90ZXN0LWVudGVycHJpc2UtaWQvc2FmZXMvdGVzdC1zYWZlLWlkL2ZpbmFsaXplJyk7XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aE1hdGNoKHNlbmQsIHsgcm9vdEtleXMgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdhcmNoaXZlU2FmZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnUE9TVHMgdG8gdGhlIGFyY2hpdmUgVVJMIGFuZCByZXR1cm5zIHRoZSBhcmNoaXZlZCBTYWZlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2VuZCA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHsgcmVzdWx0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyAuLi5zYWZlRGF0YVdpcmUsIHN0YXR1czogJ2FyY2hpdmVkJyB9KSB9KTtcbiAgICAgIG1vY2tCaXRHby5wb3N0LnJldHVybnMoeyBzZW5kIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzYWZlcy5hcmNoaXZlU2FmZSgndGVzdC1zYWZlLWlkJyk7XG5cbiAgICAgIHJlc3VsdC5zaG91bGQuYmUuaW5zdGFuY2VvZihTYWZlKTtcbiAgICAgIHJlc3VsdC5zdGF0dXMoKS5zaG91bGQuZXF1YWwoJ2FyY2hpdmVkJyk7XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aChtb2NrQml0R28ucG9zdCwgJy9lbnRlcnByaXNlL3Rlc3QtZW50ZXJwcmlzZS1pZC9zYWZlcy90ZXN0LXNhZmUtaWQvYXJjaGl2ZScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2VuZXJhdGVTYWZlJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdjaGFpbnMgaW5pdGlhbGl6ZSDihpIgY3JlYXRlU2FmZUtleXMg4oaSIGZpbmFsaXplLCB0aHJlYWRpbmcgdGhlIHNhZmVJZCBhbmQgZW5hYmxlZFJvb3RTbG90cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGluaXRpYWxpemluZzogSW5pdGlhbGl6ZVNhZmVSZXNwb25zZSA9IHtcbiAgICAgICAgaWQ6ICd0ZXN0LXNhZmUtaWQnLFxuICAgICAgICBzdGF0dXM6ICdpbml0aWFsaXppbmcnLFxuICAgICAgICBlbmFibGVkUm9vdFNsb3RzOiBbJ2VjZHNhTXBjJywgJ2VkZHNhTXBjJ10sXG4gICAgICB9O1xuICAgICAgY29uc3Qgcm9vdEtleXM6IFNhZmVLZXlzID0geyByb290S2V5czogeyBob3Q6IHt9IH0gfTtcbiAgICAgIGNvbnN0IGluaXRTdHViID0gc2lub24uc3R1YihzYWZlcywgJ2luaXRpYWxpemVTYWZlJykucmVzb2x2ZXMoaW5pdGlhbGl6aW5nKTtcbiAgICAgIGNvbnN0IGtleXNTdHViID0gc2lub24uc3R1YihzYWZlcywgJ2NyZWF0ZVNhZmVLZXlzJykucmVzb2x2ZXMocm9vdEtleXMpO1xuICAgICAgY29uc3QgZmluYWxpemVTdHViID0gc2lub24uc3R1YihzYWZlcywgJ2ZpbmFsaXplU2FmZScpLnJlc29sdmVzKG5ldyBTYWZlKG1vY2tCaXRHbywgc2FmZURhdGFXaXJlIGFzIGFueSkpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzYWZlcy5nZW5lcmF0ZVNhZmUoeyBsYWJlbDogJ215IHNhZmUnLCBwYXNzcGhyYXNlOiAncHcnIH0pO1xuXG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aE1hdGNoKGluaXRTdHViLCB7IGxhYmVsOiAnbXkgc2FmZScgfSk7XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aE1hdGNoKGtleXNTdHViLCB7XG4gICAgICAgIGxhYmVsOiAnbXkgc2FmZScsXG4gICAgICAgIHBhc3NwaHJhc2U6ICdwdycsXG4gICAgICAgIHNhZmVJZDogJ3Rlc3Qtc2FmZS1pZCcsXG4gICAgICAgIGVuYWJsZWRSb290U2xvdHM6IFsnZWNkc2FNcGMnLCAnZWRkc2FNcGMnXSxcbiAgICAgIH0pO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGgoZmluYWxpemVTdHViLCAndGVzdC1zYWZlLWlkJywgcm9vdEtleXMpO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxPcmRlcihpbml0U3R1Yiwga2V5c1N0dWIsIGZpbmFsaXplU3R1Yik7XG4gICAgICByZXN1bHQuc3RhdHVzKCkuc2hvdWxkLmVxdWFsKCdhY3RpdmUnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnR0VUcyB0aGUgc2FmZSBVUkwgYW5kIHJldHVybnMgYSBTYWZlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbW9ja0JpdEdvLmdldCA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHsgcmVzdWx0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoc2FmZURhdGFXaXJlKSB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2FmZXMuZ2V0KHsgaWQ6ICd0ZXN0LXNhZmUtaWQnIH0pO1xuXG4gICAgICByZXN1bHQuc2hvdWxkLmJlLmluc3RhbmNlb2YoU2FmZSk7XG4gICAgICByZXN1bHQuaWQoKS5zaG91bGQuZXF1YWwoJ3Rlc3Qtc2FmZS1pZCcpO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGgobW9ja0JpdEdvLmdldCwgJy9lbnRlcnByaXNlL3Rlc3QtZW50ZXJwcmlzZS1pZC9zYWZlcy90ZXN0LXNhZmUtaWQnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2xpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ0dFVHMgdGhlIHNhZmVzIGNvbGxlY3Rpb24gYW5kIG1hcHMgdGhlIHJlc3BvbnNlIHRvIFNhZmVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcXVlcnkgPSBzaW5vbi5zdHViKCkucmV0dXJuc1RoaXMoKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IHNhZmVzOiBbc2FmZURhdGFXaXJlXSwgbmV4dEJhdGNoUHJldklkOiAnbmV4dC1wYWdlLWlkJyB9KTtcbiAgICAgIG1vY2tCaXRHby5nZXQgPSBzaW5vbi5zdHViKCkucmV0dXJucyh7IHF1ZXJ5LCByZXN1bHQgfSk7XG5cbiAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCBzYWZlcy5saXN0KCk7XG5cbiAgICAgIHBhZ2Uuc2FmZXMuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgcGFnZS5zYWZlc1swXS5zaG91bGQuYmUuaW5zdGFuY2VvZihTYWZlKTtcbiAgICAgIHBhZ2Uuc2FmZXNbMF0uaWQoKS5zaG91bGQuZXF1YWwoJ3Rlc3Qtc2FmZS1pZCcpO1xuICAgICAgcGFnZS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbmV4dEN1cnNvcicsICduZXh0LXBhZ2UtaWQnKTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoKG1vY2tCaXRHby5nZXQsICcvZW50ZXJwcmlzZS90ZXN0LWVudGVycHJpc2UtaWQvc2FmZXMnKTtcbiAgICAgIC8vIG5vIGN1cnNvci9saW1pdCBwYXNzZWQg4oaSIGVtcHR5IHF1ZXJ5XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aChxdWVyeSwge30pO1xuICAgIH0pO1xuXG4gICAgaXQoJ21hcHMgY3Vyc29y4oaScHJldklkIGFuZCBsaW1pdCBvbnRvIHRoZSBxdWVyeScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gc2lub24uc3R1YigpLnJldHVybnNUaGlzKCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBzYWZlczogW10gfSk7XG4gICAgICBtb2NrQml0R28uZ2V0ID0gc2lub24uc3R1YigpLnJldHVybnMoeyBxdWVyeSwgcmVzdWx0IH0pO1xuXG4gICAgICBjb25zdCBwYWdlID0gYXdhaXQgc2FmZXMubGlzdCh7IGN1cnNvcjogJ3ByZXYtcGFnZS1pZCcsIGxpbWl0OiA1MCB9KTtcblxuICAgICAgcGFnZS5zYWZlcy5zaG91bGQuaGF2ZS5sZW5ndGgoMCk7XG4gICAgICAvLyBhYnNlbnQgbmV4dEJhdGNoUHJldklkIOKGkiB1bmRlZmluZWQgbmV4dEN1cnNvciAobGFzdCBwYWdlKVxuICAgICAgKHBhZ2UubmV4dEN1cnNvciA9PT0gdW5kZWZpbmVkKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGgocXVlcnksIHsgbGltaXQ6IDUwLCBwcmV2SWQ6ICdwcmV2LXBhZ2UtaWQnIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRW50ZXJwcmlzZS5zYWZlcygpIGFjY2Vzc29yJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdyZXR1cm5zIGEgU2FmZXMgaW5zdGFuY2Ugc2NvcGVkIHRvIHRoZSBlbnRlcnByaXNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZW50ZXJwcmlzZSA9IG5ldyBFbnRlcnByaXNlKG1vY2tCaXRHbywge30gYXMgYW55LCB7IGlkOiAnZW50LWlkJywgbmFtZTogJ2VudCcgfSk7XG4gICAgICBlbnRlcnByaXNlLnNhZmVzKCkuc2hvdWxkLmJlLmluc3RhbmNlb2YoU2FmZXMpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
376
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vc2FmZS9zYWZlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZDQUErQjtBQUMvQixrQkFBZ0I7QUFFaEIseUNBQW9FO0FBRXBFLDZGQUE2RjtBQUM3RixNQUFNLG9CQUFvQixHQUN4Qix5R0FBeUcsQ0FBQztBQUU1RyxRQUFRLENBQUMsT0FBTyxFQUFFO0lBQ2hCLElBQUksS0FBWSxDQUFDO0lBQ2pCLElBQUksU0FBYyxDQUFDO0lBQ25CLE1BQU0sWUFBWSxHQUFHO1FBQ25CLEVBQUUsRUFBRSxjQUFjO1FBQ2xCLFlBQVksRUFBRSxvQkFBb0I7UUFDbEMsS0FBSyxFQUFFLFNBQVM7UUFDaEIsTUFBTSxFQUFFLFFBQVE7UUFDaEIsT0FBTyxFQUFFLFlBQVk7UUFDckIsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ2xFLFNBQVMsRUFBRSwwQkFBMEI7S0FDdEMsQ0FBQztJQUVGLFVBQVUsQ0FBQztRQUNULFNBQVMsR0FBRztZQUNWLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDbkQsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUU7U0FDbkIsQ0FBQztRQUNGLEtBQUssR0FBRyxJQUFJLFdBQUssQ0FBQyxTQUFTLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztJQUNyRCxDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsQ0FBQztRQUNSLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsQixDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxnQkFBZ0Is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QUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pELEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDeEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyw2QkFBNkIsRUFBRTtRQUN0QyxFQUFFLENBQUMsbURBQW1ELEVBQUU7WUFDdEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxnQkFBVSxDQUFDLFNBQVMsRUFBRSxFQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZGLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFLLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQgeyBJbml0aWFsaXplU2FmZVJlc3BvbnNlIH0gZnJvbSAnQGJpdGdvL3B1YmxpYy10eXBlcyc7XG5pbXBvcnQgeyBFbnRlcnByaXNlLCBTYWZlLCBTYWZlS2V5cywgU2FmZXMgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMnO1xuXG4vKiogQSBkZXJpdmFibGUgc2xvdC3ikaMgcm9vdDogcmF3IDMyLWJ5dGUgcHVibGljIGtleSBwbHVzIHJhdyAzMi1ieXRlIGNoYWluIGNvZGUgaW4gYmFzZTMyLiAqL1xuY29uc3QgQ09NUE9TSVRFX0JBQ0tVUF9QVUIgPVxuICAnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBS1hLNUxWT1YyWEtBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSc7XG5cbmRlc2NyaWJlKCdTYWZlcycsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IHNhZmVzOiBTYWZlcztcbiAgbGV0IG1vY2tCaXRHbzogYW55O1xuICBjb25zdCBzYWZlRGF0YVdpcmUgPSB7XG4gICAgaWQ6ICd0ZXN0LXNhZmUtaWQnLFxuICAgIGVudGVycHJpc2VJZDogJ3Rlc3QtZW50ZXJwcmlzZS1pZCcsXG4gICAgbGFiZWw6ICdteSBzYWZlJyxcbiAgICBzdGF0dXM6ICdhY3RpdmUnLFxuICAgIGNyZWF0b3I6ICdjcmVhdG9yLWlkJyxcbiAgICB1c2VyczogW3sgdXNlcklkOiAnY3JlYXRvci1pZCcsIHBlcm1pc3Npb25zOiBbJ2FkbWluJywgJ3NwZW5kJ10gfV0sXG4gICAgY3JlYXRlZEF0OiAnMjAyNi0wNy0wN1QwMDowMDowMC4wMDBaJyxcbiAgfTtcblxuICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBtb2NrQml0R28gPSB7XG4gICAgICB1cmw6IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoKHBhdGg6IHN0cmluZykgPT4gcGF0aCksXG4gICAgICBwb3N0OiBzaW5vbi5zdHViKCksXG4gICAgfTtcbiAgICBzYWZlcyA9IG5ldyBTYWZlcyhtb2NrQml0R28sICd0ZXN0LWVudGVycHJpc2UtaWQnKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzaW5vbi5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpbml0aWFsaXplU2FmZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnUE9TVHMgdG8gdGhlIHNhZmVzIGNvbGxlY3Rpb24gVVJMIGFuZCByZXR1cm5zIHRoZSBpbml0aWFsaXppbmcgaWQvc3RhdHVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaW5pdGlhbGl6ZVJlc3BvbnNlV2lyZSA9IHsgaWQ6ICd0ZXN0LXNhZmUtaWQnLCBzdGF0dXM6ICdpbml0aWFsaXppbmcnIH07XG4gICAgICBjb25zdCBzZW5kID0gc2lub24uc3R1YigpLnJldHVybnMoeyByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhpbml0aWFsaXplUmVzcG9uc2VXaXJlKSB9KTtcbiAgICAgIG1vY2tCaXRHby5wb3N0LnJldHVybnMoeyBzZW5kIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzYWZlcy5pbml0aWFsaXplU2FmZSh7IGxhYmVsOiAnbXkgc2FmZScgfSk7XG5cbiAgICAgIHJlc3VsdC5pZC5zaG91bGQuZXF1YWwoJ3Rlc3Qtc2FmZS1pZCcpO1xuICAgICAgcmVzdWx0LnN0YXR1cy5zaG91bGQuZXF1YWwoJ2luaXRpYWxpemluZycpO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGgobW9ja0JpdEdvLnBvc3QsICcvZW50ZXJwcmlzZS90ZXN0LWVudGVycHJpc2UtaWQvc2FmZXMnKTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoKHNlbmQsIHsgbGFiZWw6ICdteSBzYWZlJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdkZWNvZGVzIGVuYWJsZWRSb290U2xvdHMgd2hlbiB0aGUgc2VydmVyIHJldHVybnMgdGhlbScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGluaXRpYWxpemVSZXNwb25zZVdpcmUgPSB7XG4gICAgICAgIGlkOiAndGVzdC1zYWZlLWlkJyxcbiAgICAgICAgc3RhdHVzOiAnaW5pdGlhbGl6aW5nJyxcbiAgICAgICAgZW5hYmxlZFJvb3RTbG90czogWydzZWNwMjU2azFNdWx0aXNpZycsICdlY2RzYU1wYyddLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNlbmQgPSBzaW5vbi5zdHViKCkucmV0dXJucyh7IHJlc3VsdDogc2lub24uc3R1YigpLnJlc29sdmVzKGluaXRpYWxpemVSZXNwb25zZVdpcmUpIH0pO1xuICAgICAgbW9ja0JpdEdvLnBvc3QucmV0dXJucyh7IHNlbmQgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNhZmVzLmluaXRpYWxpemVTYWZlKHsgbGFiZWw6ICdteSBzYWZlJyB9KTtcblxuICAgICAgaWYgKHJlc3VsdC5lbmFibGVkUm9vdFNsb3RzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBlbmFibGVkUm9vdFNsb3RzJyk7XG4gICAgICB9XG4gICAgICByZXN1bHQuZW5hYmxlZFJvb3RTbG90cy5zaG91bGQuZGVlcEVxdWFsKFsnc2VjcDI1NmsxTXVsdGlzaWcnLCAnZWNkc2FNcGMnXSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjcmVhdGVTYWZlS2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBQZXItY29pbiBrZXljaGFpbnMoKSBtb2NrOiBtdWx0aXNpZyBjb2lucyB1c2UgY3JlYXRlL2FkZC9jcmVhdGVCYWNrdXAvY3JlYXRlQml0R287IE1QQyBjb2luc1xuICAgIC8vIHVzZSBjcmVhdGVNcGMuIElkcyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb2luIG5hbWUgc28gd2UgY2FuIGFzc2VydCBwZXItc2xvdCBjb2luIHJvdXRpbmcuXG4gICAgZnVuY3Rpb24gbWFrZUtleWNoYWlucyhjb2luOiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNyZWF0ZTogc2lub24uc3R1YigpLnJldHVybnMoeyBwdWI6IGAke2NvaW59LXB1YmAsIHBydjogYCR7Y29pbn0tcHJ2YCB9KSxcbiAgICAgICAgYWRkOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBpZDogYCR7Y29pbn0tdXNlcmAgfSksXG4gICAgICAgIC8vIHR4bG0gaXMgdGhlIGVkMjU1MTlNdWx0aXNpZyByb290IGNvaW4sIHNvIGl0cyBiYWNrdXAgcHViIGlzIG5ldXRyYWwgcmF3IGRlcml2YXRpb24gbWF0ZXJpYWwuXG4gICAgICAgIGNyZWF0ZUJhY2t1cDogc2lub24uc3R1YigpLnJlc29sdmVzKHtcbiAgICAgICAgICBpZDogYCR7Y29pbn0tYmFja3VwYCxcbiAgICAgICAgICAuLi4oY29pbiA9PT0gJ3R4bG0nIHx8IGNvaW4gPT09ICd4bG0nID8geyBwdWI6IENPTVBPU0lURV9CQUNLVVBfUFVCIH0gOiB7fSksXG4gICAgICAgIH0pLFxuICAgICAgICBjcmVhdGVCaXRHbzogc2lub24uc3R1YigpLnJlc29sdmVzKHtcbiAgICAgICAgICBpZDogYCR7Y29pbn0tYml0Z29gLFxuICAgICAgICAgIC4uLihjb2luID09PSAndHhsbScgfHwgY29pbiA9PT0gJ3hsbScgPyB7IHB1YjogQ09NUE9TSVRFX0JBQ0tVUF9QVUIgfSA6IHt9KSxcbiAgICAgICAgfSksXG4gICAgICAgIGNyZWF0ZU1wYzogc2lub24uc3R1YigpLnJlc29sdmVzKHtcbiAgICAgICAgICB1c2VyS2V5Y2hhaW46IHsgaWQ6IGAke2NvaW59LXVzZXJgIH0sXG4gICAgICAgICAgYmFja3VwS2V5Y2hhaW46IHsgaWQ6IGAke2NvaW59LWJhY2t1cGAgfSxcbiAgICAgICAgICBiaXRnb0tleWNoYWluOiB7IGlkOiBgJHtjb2lufS1iaXRnb2AgfSxcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIGxldCBrZXljaGFpbnNCeUNvaW46IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIG1ha2VLZXljaGFpbnM+PjtcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAga2V5Y2hhaW5zQnlDb2luID0ge307XG4gICAgICBtb2NrQml0R28uZ2V0RW52ID0gc2lub24uc3R1YigpLnJldHVybnMoJ3Rlc3QnKTsgLy8gdGVzdG5ldCBjb2luIG1hcFxuICAgICAgbW9ja0JpdEdvLmVuY3J5cHQgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoJ2VuY3J5cHRlZC1wcnYnKTtcbiAgICAgIG1vY2tCaXRHby5jb2luID0gc2lub24uc3R1YigpLmNhbGxzRmFrZSgobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGtleWNoYWluc0J5Q29pbltuYW1lXSA9IGtleWNoYWluc0J5Q29pbltuYW1lXSB8fCBtYWtlS2V5Y2hhaW5zKG5hbWUpO1xuICAgICAgICByZXR1cm4geyBrZXljaGFpbnM6ICgpID0+IGtleWNoYWluc0J5Q29pbltuYW1lXSB9O1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgncnVucyB0aGUgNCByb290IGNlcmVtb25pZXMgYW5kIHJldHVybnMgMTIgaWRzIGFzIG9yZGVyZWQgdHJpcGxldHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzYWZlcy5jcmVhdGVTYWZlS2V5cyh7IGxhYmVsOiAnbXkgc2FmZScsIHBhc3NwaHJhc2U6ICdwdycsIHNhZmVJZDogJ3NhZmUtMScgfSk7XG5cbiAgICAgIHJlc3VsdC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgcm9vdEtleXM6IHtcbiAgICAgICAgICBob3Q6IHtcbiAgICAgICAgICAgIHNlY3AyNTZrMU11bHRpc2lnOiBbJ3RidGMtdXNlcicsICd0YnRjLWJhY2t1cCcsICd0YnRjLWJpdGdvJ10sXG4gICAgICAgICAgICBlY2RzYU1wYzogWydodGV0aC11c2VyJywgJ2h0ZXRoLWJhY2t1cCcsICdodGV0aC1iaXRnbyddLFxuICAgICAgICAgICAgZWRkc2FNcGM6IFsndHNvbC11c2VyJywgJ3Rzb2wtYmFja3VwJywgJ3Rzb2wtYml0Z28nXSxcbiAgICAgICAgICAgIGVkMjU1MTlNdWx0aXNpZzogWyd0eGxtLXVzZXInLCAndHhsbS1iYWNrdXAnLCAndHhsbS1iaXRnbyddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGFuIGVkMjU1MTlNdWx0aXNpZyBiYWNrdXAgcm9vdCB0aGF0IGNhbWUgYmFjayBub24tZGVyaXZhYmxlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gQSBiYXJlIFN0ZWxsYXIgU3RyS2V5IGlzIG5vdCB0aGUgbmV1dHJhbCByYXcgcm9vdCBmb3JtYXQuXG4gICAgICBrZXljaGFpbnNCeUNvaW5bJ3R4bG0nXSA9IG1ha2VLZXljaGFpbnMoJ3R4bG0nKTtcbiAgICAgIGtleWNoYWluc0J5Q29pblsndHhsbSddLmNyZWF0ZUJhY2t1cC5yZXNvbHZlcyh7XG4gICAgICAgIGlkOiAndHhsbS1iYWNrdXAnLFxuICAgICAgICBwdWI6ICdHQTVXVUo1NFoyM0tJTExDVU9VTkFLVFBCVlpXS01RVk80TzZFUTVHSExBRVJJTUxMSE5DU0tZSCcsXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgc2FmZXNcbiAgICAgICAgLmNyZWF0ZVNhZmVLZXlzKHsgbGFiZWw6ICdteSBzYWZlJywgcGFzc3BocmFzZTogJ3B3Jywgc2FmZUlkOiAnc2FmZS0xJyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvZWQyNTUxOU11bHRpc2lnIHJvb3RzIGFyZSBub3QgZGVyaXZhYmxlLyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhbiBlZDI1NTE5TXVsdGlzaWcgQml0R28gcm9vdCB0aGF0IGNhbWUgYmFjayBub24tZGVyaXZhYmxlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGhlIEJpdEdvIHJvb3QgaXMgY29tcG9zZWQgc2VydmVyLXNpZGU7IGlmIGl0IGV2ZXIgY29tZXMgYmFjayBhcyBhIGJhcmUgU3RlbGxhciBTdHJLZXlcbiAgICAgIC8vIGluc3RlYWQgb2YgdGhlIG5ldXRyYWwgcmF3IHJvb3QgZm9ybWF0LCB3YWxsZXRzIG1pbnRlZCBmcm9tIGl0IGFyZSB1bnJlY292ZXJhYmxlLlxuICAgICAga2V5Y2hhaW5zQnlDb2luWyd0eGxtJ10gPSBtYWtlS2V5Y2hhaW5zKCd0eGxtJyk7XG4gICAgICBrZXljaGFpbnNCeUNvaW5bJ3R4bG0nXS5jcmVhdGVCaXRHby5yZXNvbHZlcyh7XG4gICAgICAgIGlkOiAndHhsbS1iaXRnbycsXG4gICAgICAgIHB1YjogJ0dBNVdVSjU0WjIzS0lMTENVT1VOQUtUUEJWWldLTVFWTzRPNkVRNUdITEFFUklNTExITkNTS1lIJyxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBzYWZlc1xuICAgICAgICAuY3JlYXRlU2FmZUtleXMoeyBsYWJlbDogJ215IHNhZmUnLCBwYXNzcGhyYXNlOiAncHcnLCBzYWZlSWQ6ICdzYWZlLTEnIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9lZDI1NTE5TXVsdGlzaWcgcm9vdHMgYXJlIG5vdCBkZXJpdmFibGUvKTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCBhcHBseSB0aGUgZGVyaXZhYmxlIGNoZWNrIHRvIHRoZSBzZWNwMjU2azFNdWx0aXNpZyBzbG90JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gU2xvdCDikaAgYmFja3VwIHJvb3RzIGFyZSB4cHVicywgd2hpY2ggYWxyZWFkeSBjYXJyeSBhIGNoYWluIGNvZGUgYW5kIGFyZSBuZXZlciBjb21wb3NlZC5cbiAgICAgIGtleWNoYWluc0J5Q29pblsndGJ0YyddID0gbWFrZUtleWNoYWlucygndGJ0YycpO1xuICAgICAga2V5Y2hhaW5zQnlDb2luWyd0YnRjJ10uY3JlYXRlQmFja3VwLnJlc29sdmVzKHsgaWQ6ICd0YnRjLWJhY2t1cCcgfSk7XG5cbiAgICAgIGF3YWl0IHNhZmVzLmNyZWF0ZVNhZmVLZXlzKHsgbGFiZWw6ICdteSBzYWZlJywgcGFzc3BocmFzZTogJ3B3Jywgc2FmZUlkOiAnc2FmZS0xJyB9KS5zaG91bGQuYmUuZnVsZmlsbGVkKCk7XG4gICAgfSk7XG5cbiAgICBpdCgndGFncyBldmVyeSBtdWx0aXNpZyBrZXkgcmVnaXN0cmF0aW9uIHdpdGggc2FmZUlkIGFuZCB0aGUgY29ycmVjdCBzb3VyY2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBzYWZlcy5jcmVhdGVTYWZlS2V5cyh7IGxhYmVsOiAnbXkgc2FmZScsIHBhc3NwaHJhc2U6ICdwdycsIHNhZmVJZDogJ3NhZmUtMScgfSk7XG5cbiAgICAgIGNvbnN0IGJ0YyA9IGtleWNoYWluc0J5Q29pblsndGJ0YyddO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGhNYXRjaChidGMuYWRkLCB7XG4gICAgICAgIHB1YjogJ3RidGMtcHViJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLXBydicsXG4gICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICBzYWZlSWQ6ICdzYWZlLTEnLFxuICAgICAgfSk7XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aE1hdGNoKGJ0Yy5jcmVhdGVCYWNrdXAsIHsgcGFzc3BocmFzZTogJ3B3Jywgc2FmZUlkOiAnc2FmZS0xJyB9KTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoTWF0Y2goYnRjLmNyZWF0ZUJpdEdvLCB7IGVudGVycHJpc2U6ICd0ZXN0LWVudGVycHJpc2UtaWQnLCBzYWZlSWQ6ICdzYWZlLTEnIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3RocmVhZHMgc2FmZUlkICsgZW50ZXJwcmlzZSBpbnRvIGJvdGggTVBDIGNlcmVtb25pZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBzYWZlcy5jcmVhdGVTYWZlS2V5cyh7IGxhYmVsOiAnbXkgc2FmZScsIHBhc3NwaHJhc2U6ICdwdycsIHNhZmVJZDogJ3NhZmUtMScgfSk7XG5cbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoTWF0Y2goa2V5Y2hhaW5zQnlDb2luWydodGV0aCddLmNyZWF0ZU1wYywge1xuICAgICAgICBtdWx0aXNpZ1R5cGU6ICd0c3MnLFxuICAgICAgICBwYXNzcGhyYXNlOiAncHcnLFxuICAgICAgICBlbnRlcnByaXNlOiAndGVzdC1lbnRlcnByaXNlLWlkJyxcbiAgICAgICAgc2FmZUlkOiAnc2FmZS0xJyxcbiAgICAgIH0pO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGhNYXRjaChrZXljaGFpbnNCeUNvaW5bJ3Rzb2wnXS5jcmVhdGVNcGMsIHtcbiAgICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICAgICAgcGFzc3BocmFzZTogJ3B3JyxcbiAgICAgICAgZW50ZXJwcmlzZTogJ3Rlc3QtZW50ZXJwcmlzZS1pZCcsXG4gICAgICAgIHNhZmVJZDogJ3NhZmUtMScsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzZWxlY3RzIG1haW5uZXQgY29pbnMgaW4gYSBwcm9kIGVudmlyb25tZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbW9ja0JpdEdvLmdldEVudiA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdwcm9kJyk7XG4gICAgICBhd2FpdCBzYWZlcy5jcmVhdGVTYWZlS2V5cyh7IGxhYmVsOiAnbXkgc2FmZScsIHBhc3NwaHJhc2U6ICdwdycsIHNhZmVJZDogJ3NhZmUtMScgfSk7XG5cbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoKG1vY2tCaXRHby5jb2luLCAnYnRjJyk7XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aChtb2NrQml0R28uY29pbiwgJ2V0aCcpO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGgobW9ja0JpdEdvLmNvaW4sICdzb2wnKTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoKG1vY2tCaXRHby5jb2luLCAneGxtJyk7XG4gICAgfSk7XG5cbiAgICBpdCgncnVucyB0aGUgNCByb290IGNlcmVtb25pZXMgaW4gcGFyYWxsZWwgKG5vbmUgYXdhaXRzIGFub3RoZXIpJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gR2F0ZSBleGFjdGx5IG9uZSBjYWxsIHBlciByb290IG9uIGEgc2hhcmVkIGxhdGNoIHRoYXQgb25seSBvcGVucyBvbmNlIGFsbCA0IHJvb3RzIGhhdmVcbiAgICAgIC8vIGVudGVyZWQuIElmIHRoZSByb290cyByYW4gc2VxdWVudGlhbGx5LCB0aGUgZmlyc3Qgd291bGQgYXdhaXQgdGhlIGxhdGNoIGZvcmV2ZXIg4oaSIHRoZVxuICAgICAgLy8gdGVzdCB3b3VsZCB0aW1lIG91dDsgY29tcGxldGluZyBwcm92ZXMgYWxsIDQgd2VyZSBpbiBmbGlnaHQgY29uY3VycmVudGx5LlxuICAgICAgbGV0IHJlbGVhc2U6ICgpID0+IHZvaWQgPSAoKSA9PiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBnYXRlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IChyZWxlYXNlID0gcmVzb2x2ZSkpO1xuICAgICAgbGV0IHN0YXJ0ZWQgPSAwO1xuICAgICAgY29uc3QgZ2F0ZWQgPSAocmVzdWx0OiBhbnkpID0+XG4gICAgICAgIHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGlmICgrK3N0YXJ0ZWQgPT09IDQpIHtcbiAgICAgICAgICAgIHJlbGVhc2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgZ2F0ZTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KTtcbiAgICAgIC8vIG9uZSBnYXRlZCBlbnRyeSBwb2ludCBwZXIgcm9vdDogbXVsdGlzaWcgcm9vdHMgdmlhIGNyZWF0ZUJpdEdvLCBNUEMgcm9vdHMgdmlhIGNyZWF0ZU1wY1xuICAgICAga2V5Y2hhaW5zQnlDb2luWyd0YnRjJ10gPSBtYWtlS2V5Y2hhaW5zKCd0YnRjJyk7XG4gICAgICBrZXljaGFpbnNCeUNvaW5bJ3RidGMnXS5jcmVhdGVCaXRHbyA9IGdhdGVkKHsgaWQ6ICd0YnRjLWJpdGdvJyB9KTtcbiAgICAgIGtleWNoYWluc0J5Q29pblsndHhsbSddID0gbWFrZUtleWNoYWlucygndHhsbScpO1xuICAgICAga2V5Y2hhaW5zQnlDb2luWyd0eGxtJ10uY3JlYXRlQml0R28gPSBnYXRlZCh7IGlkOiAndHhsbS1iaXRnbycsIHB1YjogQ09NUE9TSVRFX0JBQ0tVUF9QVUIgfSk7XG4gICAgICBrZXljaGFpbnNCeUNvaW5bJ2h0ZXRoJ10gPSBtYWtlS2V5Y2hhaW5zKCdodGV0aCcpO1xuICAgICAga2V5Y2hhaW5zQnlDb2luWydodGV0aCddLmNyZWF0ZU1wYyA9IGdhdGVkKHtcbiAgICAgICAgdXNlcktleWNoYWluOiB7IGlkOiAnaHRldGgtdXNlcicgfSxcbiAgICAgICAgYmFja3VwS2V5Y2hhaW46IHsgaWQ6ICdodGV0aC1iYWNrdXAnIH0sXG4gICAgICAgIGJpdGdvS2V5Y2hhaW46IHsgaWQ6ICdodGV0aC1iaXRnbycgfSxcbiAgICAgIH0pO1xuICAgICAga2V5Y2hhaW5zQnlDb2luWyd0c29sJ10gPSBtYWtlS2V5Y2hhaW5zKCd0c29sJyk7XG4gICAgICBrZXljaGFpbnNCeUNvaW5bJ3Rzb2wnXS5jcmVhdGVNcGMgPSBnYXRlZCh7XG4gICAgICAgIHVzZXJLZXljaGFpbjogeyBpZDogJ3Rzb2wtdXNlcicgfSxcbiAgICAgICAgYmFja3VwS2V5Y2hhaW46IHsgaWQ6ICd0c29sLWJhY2t1cCcgfSxcbiAgICAgICAgYml0Z29LZXljaGFpbjogeyBpZDogJ3Rzb2wtYml0Z28nIH0sXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgc2FmZXMuY3JlYXRlU2FmZUtleXMoeyBsYWJlbDogJ215IHNhZmUnLCBwYXNzcGhyYXNlOiAncHcnLCBzYWZlSWQ6ICdzYWZlLTEnIH0pO1xuICAgICAgc3RhcnRlZC5zaG91bGQuZXF1YWwoNCk7XG4gICAgfSk7XG5cbiAgICBpdCgncnVucyBvbmx5IHRoZSBlbmFibGVkIGNlcmVtb25pZXMgd2hlbiBlbmFibGVkUm9vdFNsb3RzIGlzIGEgc3Vic2V0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2FmZXMuY3JlYXRlU2FmZUtleXMoe1xuICAgICAgICBsYWJlbDogJ215IHNhZmUnLFxuICAgICAgICBwYXNzcGhyYXNlOiAncHcnLFxuICAgICAgICBzYWZlSWQ6ICdzYWZlLTEnLFxuICAgICAgICBlbmFibGVkUm9vdFNsb3RzOiBbJ2VjZHNhTXBjJywgJ2VkZHNhTXBjJ10sXG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICByb290S2V5czoge1xuICAgICAgICAgIGhvdDoge1xuICAgICAgICAgICAgZWNkc2FNcGM6IFsnaHRldGgtdXNlcicsICdodGV0aC1iYWNrdXAnLCAnaHRldGgtYml0Z28nXSxcbiAgICAgICAgICAgIGVkZHNhTXBjOiBbJ3Rzb2wtdXNlcicsICd0c29sLWJhY2t1cCcsICd0c29sLWJpdGdvJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAga2V5Y2hhaW5zQnlDb2luLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgndGJ0YycpO1xuICAgICAga2V5Y2hhaW5zQnlDb2luLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgndHhsbScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FyY2hpdmVzIHRoZSBzYWZlIGFuZCB0aHJvd3MgbGlzdGluZyBldmVyeSBmYWlsZWQgY2VyZW1vbnknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBUd28gY2VyZW1vbmllcyBmYWlsIChhbiBNUEMgYW5kIGEgbXVsdGlzaWcgcm9vdCkuXG4gICAgICBrZXljaGFpbnNCeUNvaW5bJ2h0ZXRoJ10gPSBtYWtlS2V5Y2hhaW5zKCdodGV0aCcpO1xuICAgICAga2V5Y2hhaW5zQnlDb2luWydodGV0aCddLmNyZWF0ZU1wYyA9IHNpbm9uLnN0dWIoKS5yZWplY3RzKG5ldyBFcnJvcignZGtscyBib29tJykpO1xuICAgICAga2V5Y2hhaW5zQnlDb2luWyd0eGxtJ10gPSBtYWtlS2V5Y2hhaW5zKCd0eGxtJyk7XG4gICAgICBrZXljaGFpbnNCeUNvaW5bJ3R4bG0nXS5jcmVhdGVCaXRHbyA9IHNpbm9uLnN0dWIoKS5yZWplY3RzKG5ldyBFcnJvcignYml0Z28ga2V5IGJvb20nKSk7XG4gICAgICAvLyBhcmNoaXZlIHN1Y2NlZWRzLCByZXR1cm5pbmcgYSB2YWxpZCAoYXJjaGl2ZWQpIFNhZmVEYXRhXG4gICAgICBjb25zdCBzZW5kID0gc2lub24uc3R1YigpLnJldHVybnMoe1xuICAgICAgICByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IC4uLnNhZmVEYXRhV2lyZSwgc3RhdHVzOiAnYXJjaGl2ZWQnIH0pLFxuICAgICAgfSk7XG4gICAgICBtb2NrQml0R28ucG9zdC5yZXR1cm5zKHsgc2VuZCB9KTtcblxuICAgICAgY29uc3QgZXJyID0gYXdhaXQgc2FmZXNcbiAgICAgICAgLmNyZWF0ZVNhZmVLZXlzKHsgbGFiZWw6ICdteSBzYWZlJywgcGFzc3BocmFzZTogJ3B3Jywgc2FmZUlkOiAnc2FmZS0xJyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvU2FmZSBrZXkgZ2VuZXJhdGlvbiBmYWlsZWQgZm9yIDIgcm9vdC8pO1xuICAgICAgZXJyLm1lc3NhZ2Uuc2hvdWxkLm1hdGNoKC9lY2RzYU1wYzogZGtscyBib29tLyk7XG4gICAgICBlcnIubWVzc2FnZS5zaG91bGQubWF0Y2goL2VkMjU1MTlNdWx0aXNpZzogYml0Z28ga2V5IGJvb20vKTtcbiAgICAgIGVyci5tZXNzYWdlLnNob3VsZC5tYXRjaCgvaGFzIGJlZW4gYXJjaGl2ZWQvKTtcbiAgICAgIGVyci5tZXNzYWdlLnNob3VsZC5ub3QubWF0Y2goL2FyY2hpdmluZyB0aGUgc2FmZSBhbHNvIGZhaWxlZC8pO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGgobW9ja0JpdEdvLnBvc3QsICcvZW50ZXJwcmlzZS90ZXN0LWVudGVycHJpc2UtaWQvc2FmZXMvc2FmZS0xL2FyY2hpdmUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdub3RlcyB3aGVuIGFyY2hpdmluZyBhbHNvIGZhaWxzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAga2V5Y2hhaW5zQnlDb2luWyd0c29sJ10gPSBtYWtlS2V5Y2hhaW5zKCd0c29sJyk7XG4gICAgICBrZXljaGFpbnNCeUNvaW5bJ3Rzb2wnXS5jcmVhdGVNcGMgPSBzaW5vbi5zdHViKCkucmVqZWN0cyhuZXcgRXJyb3IoJ2VkZHNhIGJvb20nKSk7XG4gICAgICBtb2NrQml0R28ucG9zdC5yZXR1cm5zKHtcbiAgICAgICAgc2VuZDogc2lub24uc3R1YigpLnJldHVybnMoeyByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZWplY3RzKG5ldyBFcnJvcignYXJjaGl2ZSA1MDAnKSkgfSksXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgc2FmZXNcbiAgICAgICAgLmNyZWF0ZVNhZmVLZXlzKHsgbGFiZWw6ICdteSBzYWZlJywgcGFzc3BocmFzZTogJ3B3Jywgc2FmZUlkOiAnc2FmZS0xJyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvYXJjaGl2aW5nIHRoZSBzYWZlIGFsc28gZmFpbGVkIFxcKGFyY2hpdmUgNTAwXFwpLiphcmNoaXZlIGl0IG1hbnVhbGx5Lyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmaW5hbGl6ZVNhZmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgcm9vdEtleXMgPSB7XG4gICAgICBob3Q6IHtcbiAgICAgICAgc2VjcDI1NmsxTXVsdGlzaWc6IFsndTEnLCAnYjEnLCAnZzEnXSBhcyBbc3RyaW5nLCBzdHJpbmcsIHN0cmluZ10sXG4gICAgICAgIGVjZHNhTXBjOiBbJ3UyJywgJ2IyJywgJ2cyJ10gYXMgW3N0cmluZywgc3RyaW5nLCBzdHJpbmddLFxuICAgICAgICBlZGRzYU1wYzogWyd1MycsICdiMycsICdnMyddIGFzIFtzdHJpbmcsIHN0cmluZywgc3RyaW5nXSxcbiAgICAgICAgZWQyNTUxOU11bHRpc2lnOiBbJ3U0JywgJ2I0JywgJ2c0J10gYXMgW3N0cmluZywgc3RyaW5nLCBzdHJpbmddLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgaXQoJ1BPU1RzIHRoZSByb290S2V5cyB0byB0aGUgZmluYWxpemUgVVJMIGFuZCByZXR1cm5zIHRoZSBhY3RpdmUgU2FmZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNlbmQgPSBzaW5vbi5zdHViKCkucmV0dXJucyh7IHJlc3VsdDogc2lub24uc3R1YigpLnJlc29sdmVzKHNhZmVEYXRhV2lyZSkgfSk7XG4gICAgICBtb2NrQml0R28ucG9zdC5yZXR1cm5zKHsgc2VuZCB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2FmZXMuZmluYWxpemVTYWZlKCd0ZXN0LXNhZmUtaWQnLCB7IHJvb3RLZXlzIH0pO1xuXG4gICAgICByZXN1bHQuc2hvdWxkLmJlLmluc3RhbmNlb2YoU2FmZSk7XG4gICAgICByZXN1bHQuc3RhdHVzKCkuc2hvdWxkLmVxdWFsKCdhY3RpdmUnKTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoKG1vY2tCaXRHby5wb3N0LCAnL2VudGVycHJpc2UvdGVzdC1lbnRlcnByaXNlLWlkL3NhZmVzL3Rlc3Qtc2FmZS1pZC9maW5hbGl6ZScpO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGhNYXRjaChzZW5kLCB7IHJvb3RLZXlzIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYXJjaGl2ZVNhZmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ1BPU1RzIHRvIHRoZSBhcmNoaXZlIFVSTCBhbmQgcmV0dXJucyB0aGUgYXJjaGl2ZWQgU2FmZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNlbmQgPSBzaW5vbi5zdHViKCkucmV0dXJucyh7IHJlc3VsdDogc2lub24uc3R1YigpLnJlc29sdmVzKHsgLi4uc2FmZURhdGFXaXJlLCBzdGF0dXM6ICdhcmNoaXZlZCcgfSkgfSk7XG4gICAgICBtb2NrQml0R28ucG9zdC5yZXR1cm5zKHsgc2VuZCB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2FmZXMuYXJjaGl2ZVNhZmUoJ3Rlc3Qtc2FmZS1pZCcpO1xuXG4gICAgICByZXN1bHQuc2hvdWxkLmJlLmluc3RhbmNlb2YoU2FmZSk7XG4gICAgICByZXN1bHQuc3RhdHVzKCkuc2hvdWxkLmVxdWFsKCdhcmNoaXZlZCcpO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGgobW9ja0JpdEdvLnBvc3QsICcvZW50ZXJwcmlzZS90ZXN0LWVudGVycHJpc2UtaWQvc2FmZXMvdGVzdC1zYWZlLWlkL2FyY2hpdmUnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dlbmVyYXRlU2FmZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnY2hhaW5zIGluaXRpYWxpemUg4oaSIGNyZWF0ZVNhZmVLZXlzIOKGkiBmaW5hbGl6ZSwgdGhyZWFkaW5nIHRoZSBzYWZlSWQgYW5kIGVuYWJsZWRSb290U2xvdHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbml0aWFsaXppbmc6IEluaXRpYWxpemVTYWZlUmVzcG9uc2UgPSB7XG4gICAgICAgIGlkOiAndGVzdC1zYWZlLWlkJyxcbiAgICAgICAgc3RhdHVzOiAnaW5pdGlhbGl6aW5nJyxcbiAgICAgICAgZW5hYmxlZFJvb3RTbG90czogWydlY2RzYU1wYycsICdlZGRzYU1wYyddLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJvb3RLZXlzOiBTYWZlS2V5cyA9IHsgcm9vdEtleXM6IHsgaG90OiB7fSB9IH07XG4gICAgICBjb25zdCBpbml0U3R1YiA9IHNpbm9uLnN0dWIoc2FmZXMsICdpbml0aWFsaXplU2FmZScpLnJlc29sdmVzKGluaXRpYWxpemluZyk7XG4gICAgICBjb25zdCBrZXlzU3R1YiA9IHNpbm9uLnN0dWIoc2FmZXMsICdjcmVhdGVTYWZlS2V5cycpLnJlc29sdmVzKHJvb3RLZXlzKTtcbiAgICAgIGNvbnN0IGZpbmFsaXplU3R1YiA9IHNpbm9uLnN0dWIoc2FmZXMsICdmaW5hbGl6ZVNhZmUnKS5yZXNvbHZlcyhuZXcgU2FmZShtb2NrQml0R28sIHNhZmVEYXRhV2lyZSBhcyBhbnkpKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2FmZXMuZ2VuZXJhdGVTYWZlKHsgbGFiZWw6ICdteSBzYWZlJywgcGFzc3BocmFzZTogJ3B3JyB9KTtcblxuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGhNYXRjaChpbml0U3R1YiwgeyBsYWJlbDogJ215IHNhZmUnIH0pO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGhNYXRjaChrZXlzU3R1Yiwge1xuICAgICAgICBsYWJlbDogJ215IHNhZmUnLFxuICAgICAgICBwYXNzcGhyYXNlOiAncHcnLFxuICAgICAgICBzYWZlSWQ6ICd0ZXN0LXNhZmUtaWQnLFxuICAgICAgICBlbmFibGVkUm9vdFNsb3RzOiBbJ2VjZHNhTXBjJywgJ2VkZHNhTXBjJ10sXG4gICAgICB9KTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoKGZpbmFsaXplU3R1YiwgJ3Rlc3Qtc2FmZS1pZCcsIHJvb3RLZXlzKTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsT3JkZXIoaW5pdFN0dWIsIGtleXNTdHViLCBmaW5hbGl6ZVN0dWIpO1xuICAgICAgcmVzdWx0LnN0YXR1cygpLnNob3VsZC5lcXVhbCgnYWN0aXZlJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ0dFVHMgdGhlIHNhZmUgVVJMIGFuZCByZXR1cm5zIGEgU2FmZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2tCaXRHby5nZXQgPSBzaW5vbi5zdHViKCkucmV0dXJucyh7IHJlc3VsdDogc2lub24uc3R1YigpLnJlc29sdmVzKHNhZmVEYXRhV2lyZSkgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNhZmVzLmdldCh7IGlkOiAndGVzdC1zYWZlLWlkJyB9KTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5iZS5pbnN0YW5jZW9mKFNhZmUpO1xuICAgICAgcmVzdWx0LmlkKCkuc2hvdWxkLmVxdWFsKCd0ZXN0LXNhZmUtaWQnKTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoKG1vY2tCaXRHby5nZXQsICcvZW50ZXJwcmlzZS90ZXN0LWVudGVycHJpc2UtaWQvc2FmZXMvdGVzdC1zYWZlLWlkJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdsaXN0JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdHRVRzIHRoZSBzYWZlcyBjb2xsZWN0aW9uIGFuZCBtYXBzIHRoZSByZXNwb25zZSB0byBTYWZlcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gc2lub24uc3R1YigpLnJldHVybnNUaGlzKCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBzYWZlczogW3NhZmVEYXRhV2lyZV0sIG5leHRCYXRjaFByZXZJZDogJ25leHQtcGFnZS1pZCcgfSk7XG4gICAgICBtb2NrQml0R28uZ2V0ID0gc2lub24uc3R1YigpLnJldHVybnMoeyBxdWVyeSwgcmVzdWx0IH0pO1xuXG4gICAgICBjb25zdCBwYWdlID0gYXdhaXQgc2FmZXMubGlzdCgpO1xuXG4gICAgICBwYWdlLnNhZmVzLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgIHBhZ2Uuc2FmZXNbMF0uc2hvdWxkLmJlLmluc3RhbmNlb2YoU2FmZSk7XG4gICAgICBwYWdlLnNhZmVzWzBdLmlkKCkuc2hvdWxkLmVxdWFsKCd0ZXN0LXNhZmUtaWQnKTtcbiAgICAgIHBhZ2Uuc2hvdWxkLmhhdmUucHJvcGVydHkoJ25leHRDdXJzb3InLCAnbmV4dC1wYWdlLWlkJyk7XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aChtb2NrQml0R28uZ2V0LCAnL2VudGVycHJpc2UvdGVzdC1lbnRlcnByaXNlLWlkL3NhZmVzJyk7XG4gICAgICAvLyBubyBjdXJzb3IvbGltaXQgcGFzc2VkIOKGkiBlbXB0eSBxdWVyeVxuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGgocXVlcnksIHt9KTtcbiAgICB9KTtcblxuICAgIGl0KCdtYXBzIGN1cnNvcuKGknByZXZJZCBhbmQgbGltaXQgb250byB0aGUgcXVlcnknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBxdWVyeSA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zVGhpcygpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gc2lub24uc3R1YigpLnJlc29sdmVzKHsgc2FmZXM6IFtdIH0pO1xuICAgICAgbW9ja0JpdEdvLmdldCA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHsgcXVlcnksIHJlc3VsdCB9KTtcblxuICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IHNhZmVzLmxpc3QoeyBjdXJzb3I6ICdwcmV2LXBhZ2UtaWQnLCBsaW1pdDogNTAgfSk7XG5cbiAgICAgIHBhZ2Uuc2FmZXMuc2hvdWxkLmhhdmUubGVuZ3RoKDApO1xuICAgICAgLy8gYWJzZW50IG5leHRCYXRjaFByZXZJZCDihpIgdW5kZWZpbmVkIG5leHRDdXJzb3IgKGxhc3QgcGFnZSlcbiAgICAgIChwYWdlLm5leHRDdXJzb3IgPT09IHVuZGVmaW5lZCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoKHF1ZXJ5LCB7IGxpbWl0OiA1MCwgcHJldklkOiAncHJldi1wYWdlLWlkJyB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0VudGVycHJpc2Uuc2FmZXMoKSBhY2Nlc3NvcicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgncmV0dXJucyBhIFNhZmVzIGluc3RhbmNlIHNjb3BlZCB0byB0aGUgZW50ZXJwcmlzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGVudGVycHJpc2UgPSBuZXcgRW50ZXJwcmlzZShtb2NrQml0R28sIHt9IGFzIGFueSwgeyBpZDogJ2VudC1pZCcsIG5hbWU6ICdlbnQnIH0pO1xuICAgICAgZW50ZXJwcmlzZS5zYWZlcygpLnNob3VsZC5iZS5pbnN0YW5jZW9mKFNhZmVzKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|