@bitgo/sdk-core 39.0.0 → 39.1.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/bitgo/keychain/iKeychains.d.ts +2 -2
- package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/iKeychains.js +1 -1
- package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts +18 -0
- package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts.map +1 -1
- package/dist/src/bitgo/safe/derivableEd25519Pub.js +39 -3
- package/dist/src/bitgo/safe/recovery.d.ts +44 -3
- package/dist/src/bitgo/safe/recovery.d.ts.map +1 -1
- package/dist/src/bitgo/safe/recovery.js +74 -46
- package/dist/src/bitgo/safe/safe.d.ts +5 -5
- package/dist/src/bitgo/safe/safe.d.ts.map +1 -1
- package/dist/src/bitgo/safe/safe.js +24 -16
- package/dist/src/bitgo/tss/common.d.ts +11 -2
- package/dist/src/bitgo/tss/common.d.ts.map +1 -1
- package/dist/src/bitgo/tss/common.js +16 -4
- package/dist/src/bitgo/tss/redpallas/redpallasMPCv2.d.ts +10 -5
- package/dist/src/bitgo/tss/redpallas/redpallasMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/tss/redpallas/redpallasMPCv2.js +11 -6
- package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTSSUtils.js +2 -1
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts +6 -0
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTypes.js +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +5 -4
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +5 -9
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts +4 -9
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.js +16 -21
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +5 -4
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.js +2 -3
- package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts +4 -2
- package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.js +10 -7
- package/dist/src/bitgo/wallet/iWallet.d.ts +6 -0
- package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallet.js +1 -1
- package/dist/src/bitgo/wallet/safeKeychain.d.ts +1 -1
- package/dist/src/bitgo/wallet/safeKeychain.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/safeKeychain.js +4 -3
- package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallet.js +12 -3
- package/dist/test/unit/bitgo/safe/derivableEd25519Pub.js +29 -1
- package/dist/test/unit/bitgo/safe/recovery.d.ts.map +1 -1
- package/dist/test/unit/bitgo/safe/recovery.js +164 -6
- package/dist/test/unit/bitgo/safe/safe.js +54 -32
- package/dist/test/unit/bitgo/safe/safeDerivation.js +15 -53
- package/dist/test/unit/bitgo/tss/common.js +12 -5
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.js +24 -22
- package/dist/test/unit/bitgo/wallet/safeGetUserPrv.js +29 -49
- package/dist/test/unit/bitgo/wallet/safeShareWallet.js +5 -4
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
|
@@ -34,6 +34,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
require("should");
|
|
37
|
+
const nacl = __importStar(require("tweetnacl"));
|
|
37
38
|
const src_1 = require("../../../../src");
|
|
38
39
|
// Cross-repo fixture: byte-identical to wallet-platform
|
|
39
40
|
// test/unit/base/safes/fixtures/derivableEd25519Pub.json. Four independent implementations of this
|
|
@@ -108,6 +109,33 @@ describe('derivableEd25519Pub', function () {
|
|
|
108
109
|
await (0, src_1.softDeriveChildPubEd25519)(STRKEY_PUBLIC, 0).should.be.rejectedWith(/Invalid derivable ed25519 pub/);
|
|
109
110
|
});
|
|
110
111
|
});
|
|
112
|
+
describe('multi-segment soft derivation', function () {
|
|
113
|
+
const seed = (0, src_1.decodeEd25519StrKeySecretSeed)(STRKEY_SEED);
|
|
114
|
+
const rootPub = Buffer.from(nacl.sign.keyPair.fromSeed(seed).publicKey);
|
|
115
|
+
const rootChainCode = Buffer.alloc(32, 0xab);
|
|
116
|
+
const composite = (0, src_1.encodeDerivableEd25519Pub)(rootPub, rootChainCode);
|
|
117
|
+
const chainCodeStr = (0, src_1.encodeEd25519ChainCode)(rootChainCode);
|
|
118
|
+
it('private derive public half matches public derive at m/0 and m/44/283/2/0', async function () {
|
|
119
|
+
for (const path of ['m/0', 'm/44/283/2/0']) {
|
|
120
|
+
const pub = await (0, src_1.softDeriveChildPubEd25519AtPath)(composite, path);
|
|
121
|
+
const prv = await (0, src_1.softDeriveChildPrvEd25519AtPath)({ seedStrKey: STRKEY_SEED, chainCode: chainCodeStr, path });
|
|
122
|
+
prv.pub.equals(pub).should.equal(true);
|
|
123
|
+
// Recompute the public point directly from kL to prove the private scalar maps to pub.
|
|
124
|
+
(0, src_1.bigIntToBufferLE)(src_1.Eddsa.curve.basePointMult((0, src_1.bigIntFromBufferLE)(prv.kL)), 32)
|
|
125
|
+
.equals(prv.pub)
|
|
126
|
+
.should.equal(true);
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
it('rejects hardened and out-of-range paths', async function () {
|
|
130
|
+
await (0, src_1.softDeriveChildPubEd25519AtPath)(composite, "m/0'").should.be.rejectedWith(/Invalid soft derivation path/);
|
|
131
|
+
await (0, src_1.softDeriveChildPrvEd25519AtPath)({
|
|
132
|
+
seedStrKey: STRKEY_SEED,
|
|
133
|
+
chainCode: chainCodeStr,
|
|
134
|
+
path: "m/0'",
|
|
135
|
+
}).should.be.rejectedWith(/Invalid soft derivation path/);
|
|
136
|
+
await (0, src_1.softDeriveChildPubEd25519AtPath)(composite, 'm/2147483648').should.be.rejectedWith(/out of range/);
|
|
137
|
+
});
|
|
138
|
+
});
|
|
111
139
|
describe('Stellar user-key codecs', function () {
|
|
112
140
|
it('keeps Stellar encoding separate from the neutral root format', function () {
|
|
113
141
|
(0, src_1.isValidEd25519StrKeyPublicKey)(STRKEY_PUBLIC).should.equal(true);
|
|
@@ -130,4 +158,4 @@ describe('derivableEd25519Pub', function () {
|
|
|
130
158
|
});
|
|
131
159
|
});
|
|
132
160
|
});
|
|
133
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZhYmxlRWQyNTUxOVB1Yi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby9zYWZlL2Rlcml2YWJsZUVkMjU1MTlQdWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrQkFBZ0I7QUFDaEIseUNBZXlCO0FBRXpCLHdEQUF3RDtBQUN4RCxtR0FBbUc7QUFDbkcsOEVBQThFO0FBQzlFLDZFQUErRDtBQUUvRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzFDLE1BQU0sUUFBUSxHQUFHLElBQUEsK0JBQXlCLEVBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ25FLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUUsTUFBTSxhQUFhLEdBQUcsMERBQTBELENBQUM7QUFDakYsTUFBTSxXQUFXLEdBQUcsMERBQTBELENBQUM7QUFFL0UsUUFBUSxDQUFDLHFCQUFxQixFQUFFO0lBQzlCLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtRQUM3QixFQUFFLENBQUMsb0RBQW9ELEVBQUU7WUFDdkQsd0NBQWtDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNwRCxrQ0FBNEIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9DLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDekMsSUFBQSwrQkFBeUIsRUFBQyxRQUFRLENBQUMsQ0FB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QixFQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsZ0RBQWdELEVBQUU7WUFDbkQsSUFBQSxtQ0FBNkIsRUFBQywwREFBMEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEgsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsc0RBQXNELEVBQUU7WUFDekQsSUFBQSxtQ0FBNkIsRUFBQywwREFBMEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFBLGtDQUE0QixFQUFDLDBEQUEwRCxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUMzRyxtQkFBbUIsQ0FDcEIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGlFQUFpRSxFQUFFO1lBQ3BFLElBQUEsbUNBQTZCLEVBQUMsMERBQTBELENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlHLElBQUEsbUNBQTZCLEVBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0RCxJQUFBLG1DQUE2QixFQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IHtcbiAgREVSSVZBQkxFX0VEMjU1MTlfQ0hBSU5fQ09ERV9CWVRFUyxcbiAgREVSSVZBQkxFX0VEMjU1MTlfUFVCX0xFTkdUSCxcbiAgRWQyNTUxOUJJUDMyLFxuICBFZGRzYSxcbiAgZGVjb2RlRGVyaXZhYmxlRWQyNTUxOVB1YixcbiAgZGVjb2RlRWQyNTUxOVN0cktleVB1YmxpY0tleSxcbiAgZGVjb2RlRWQyNTUxOVN0cktleVNlY3JldFNlZWQsXG4gIGVuY29kZURlcml2YWJsZUVkMjU1MTlQdWIsXG4gIGVuY29kZUVkMjU1MTlTdHJLZXlQdWJsaWNLZXksXG4gIGdlbmVyYXRlRWQyNTUxOUNoYWluQ29kZSxcbiAgaXNDaGVja3N1bVZhbGlkU3RyS2V5RWQyNTUxOVB1YixcbiAgaXNEZXJpdmFibGVFZDI1NTE5UHViLFxuICBpc1ZhbGlkRWQyNTUxOVN0cktleVB1YmxpY0tleSxcbiAgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOSxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjJztcblxuLy8gQ3Jvc3MtcmVwbyBmaXh0dXJlOiBieXRlLWlkZW50aWNhbCB0byB3YWxsZXQtcGxhdGZvcm1cbi8vIHRlc3QvdW5pdC9iYXNlL3NhZmVzL2ZpeHR1cmVzL2Rlcml2YWJsZUVkMjU1MTlQdWIuanNvbi4gRm91ciBpbmRlcGVuZGVudCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhpc1xuLy8gZm9ybWF0IHdpbGwgb3RoZXJ3aXNlIGRyaWZ0LCBhbmQgdGhlIGZhaWx1cmUgbW9kZSBpcyB1bnJlY292ZXJhYmxlIHdhbGxldHMuXG5pbXBvcnQgKiBhcyBmaXh0dXJlIGZyb20gJy4vZml4dHVyZXMvZGVyaXZhYmxlRWQyNTUxOVB1Yi5qc29uJztcblxuY29uc3QgUFVCTElDX0tFWSA9IEJ1ZmZlci5hbGxvYygzMik7XG5jb25zdCBDSEFJTl9DT0RFID0gQnVmZmVyLmFsbG9jKDMyLCAweGFiKTtcbmNvbnN0IFJPT1RfUFVCID0gZW5jb2RlRGVyaXZhYmxlRWQyNTUxOVB1YihQVUJMSUNfS0VZLCBDSEFJTl9DT0RFKTtcbmNvbnN0IFJPT1RfS0VZQ0hBSU4gPSBCdWZmZXIuY29uY2F0KFtQVUJMSUNfS0VZLCBDSEFJTl9DT0RFXSkudG9TdHJpbmcoJ2hleCcpO1xuY29uc3QgU1RSS0VZX1BVQkxJQyA9ICdHQTVXVUo1NFoyM0tJTExDVU9VTkFLVFBCVlpXS01RVk80TzZFUTVHSExBRVJJTUxMSE5DU0tZSCc7XG5jb25zdCBTVFJLRVlfU0VFRCA9ICdTQUFBQ0FRREFRQ1FNQllJQkVGQVdEQU5CWUhSQUVJU0NNS0JLRlFYREFNUlVHWTREVVBCNk5LSSc7XG5cbmRlc2NyaWJlKCdkZXJpdmFibGVFZDI1NTE5UHViJywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgnYmFzZTMyIHJvb3QgZm9ybWF0JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdlbmNvZGVzIDMyLWJ5dGUgcHVibGljIGtleSBwbHVzIDMyLWJ5dGUgY2hhaW4gY29kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIERFUklWQUJMRV9FRDI1NTE5X0NIQUlOX0NPREVfQllURVMuc2hvdWxkLmVxdWFsKDMyKTtcbiAgICAgIERFUklWQUJMRV9FRDI1NTE5X1BVQl9MRU5HVEguc2hvdWxkLmVxdWFsKDEwMyk7XG4gICAgICBST09UX1BVQi5zaG91bGQubWF0Y2goL15bQS1aMi03XXsxMDN9JC8pO1xuICAgICAgZGVjb2RlRGVyaXZhYmxlRWQyNTUxOVB1YihST09UX1BVQikucHViLmVxdWFscyhQVUJMSUNfS0VZKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICBkZWNvZGVEZXJpdmFibGVFZDI1NTE5UHViKFJPT1RfUFVCKS5jaGFpbkNvZGUuZXF1YWxzKENIQUlOX0NPREUpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdtYXRjaGVzIHRoZSBjb25zdGFudHMgcGlubmVkIGluIHRoZSBzaGFyZWQgZml4dHVyZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIERFUklWQUJMRV9FRDI1NTE5X1BVQl9MRU5HVEguc2hvdWxkLmVxdWFsKGZpeHR1cmUucm9vdFB1YkJhc2UzMkxlbmd0aCk7XG4gICAgICBERVJJVkFCTEVfRUQyNTUxOV9DSEFJTl9DT0RFX0JZVEVTLnNob3VsZC5lcXVhbChmaXh0dXJlLmNoYWluQ29kZUJ5dGVzKTtcbiAgICB9KTtcblxuICAgIGl0KCdnZW5lcmF0ZXMgcmF3IGNoYWluIGNvZGUgZm9yIHJvb3QgY29tcG9zaXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBnZW5lcmF0ZUVkMjU1MTlDaGFpbkNvZGUoKS5sZW5ndGguc2hvdWxkLmVxdWFsKDMyKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2ZpeHR1cmUgdmVjdG9ycycsIGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKGNvbnN0IHZlY3RvciBvZiBmaXh0dXJlLnZhbGlkKSB7XG4gICAgICBpdChgcm91bmQtdHJpcHMgJHt2ZWN0b3IubmFtZX1gLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvc2l0ZSA9IGVuY29kZURlcml2YWJsZUVkMjU1MTlQdWIoXG4gICAgICAgICAgQnVmZmVyLmZyb20odmVjdG9yLnB1YiwgJ2hleCcpLFxuICAgICAgICAgIEJ1ZmZlci5mcm9tKHZlY3Rvci5jaGFpbkNvZGUsICdoZXgnKVxuICAgICAgICApO1xuICAgICAgICBjb21wb3NpdGUuc2hvdWxkLmVxdWFsKHZlY3Rvci5jb21wb3NpdGUpO1xuICAgICAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlRGVyaXZhYmxlRWQyNTUxOVB1Yih2ZWN0b3IuY29tcG9zaXRlKTtcbiAgICAgICAgZGVjb2RlZC5wdWIudG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbCh2ZWN0b3IucHViKTtcbiAgICAgICAgZGVjb2RlZC5jaGFpbkNvZGUudG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbCh2ZWN0b3IuY2hhaW5Db2RlKTtcbiAgICAgICAgaXNEZXJpdmFibGVFZDI1NTE5UHViKHZlY3Rvci5jb21wb3NpdGUpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgdmVjdG9yIG9mIGZpeHR1cmUuaW52YWxpZENvbXBvc2l0ZSkge1xuICAgICAgaXQoYHJlamVjdHMgJHt2ZWN0b3IubmFtZX1gLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlzRGVyaXZhYmxlRWQyNTUxOVB1Yih2ZWN0b3IuY29tcG9zaXRlKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgICAoKCkgPT4gZGVjb2RlRGVyaXZhYmxlRWQyNTUxOVB1Yih2ZWN0b3IuY29tcG9zaXRlKSkuc2hvdWxkLnRocm93KC9JbnZhbGlkIGRlcml2YWJsZSBlZDI1NTE5IHB1Yi8pO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICBkZXNjcmliZSgncmF3IHB1YmxpYyBzb2Z0IGRlcml2YXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2Rlcml2ZXMgYSBkZXRlcm1pbmlzdGljIHB1YmxpYyBrZXkgYW5kIGRpc2NhcmRzIHRoZSBjaGlsZCBjaGFpbiBjb2RlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZWRkc2EgPSBhd2FpdCBFZGRzYS5pbml0aWFsaXplKGF3YWl0IEVkMjU1MTlCSVAzMi5pbml0aWFsaXplKCkpO1xuICAgICAgY29uc3QgZGVyaXZlZCA9IGVkZHNhLmRlcml2ZVVuaGFyZGVuZWQoUk9PVF9LRVlDSEFJTiwgJ20vNycpO1xuICAgICAgZGVyaXZlZC5sZW5ndGguc2hvdWxkLmVxdWFsKDEyOCk7XG4gICAgICBkZXJpdmVkLnNsaWNlKDAsIDY0KS5zaG91bGQubWF0Y2goL15bMC05YS1mXXs2NH0kLyk7XG4gICAgICBkZXJpdmVkLnNsaWNlKDY0KS5zaG91bGQubWF0Y2goL15bMC05YS1mXXs2NH0kLyk7XG4gICAgICAoYXdhaXQgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOShST09UX1BVQiwgNykpLnRvU3RyaW5nKCdoZXgnKS5zaG91bGQuZXF1YWwoZGVyaXZlZC5zbGljZSgwLCA2NCkpO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIGdvbGRlbiB2ZWN0b3JzIGJlbG93IHBpbiB0aGUgdW5oYXJkZW5lZCBkZXJpdmF0aW9uIG91dHB1dCBzaGFyZWQgY3Jvc3MtcmVwbyB3aXRoXG4gICAgLy8gd2FsbGV0LXBsYXRmb3JtOiBhIGRpdmVyZ2VudCBpbXBsZW1lbnRhdGlvbiBkZXJpdmVzIGNvLXNpZ25lciBrZXlzIG5vYm9keSBlbHNlIGNhblxuICAgIC8vIHJlcHJvZHVjZSwgcGVybWFuZW50bHkgYnJpY2tpbmcgdGhlIHdhbGxldHMgbWludGVkIHdpdGggaXQuXG4gICAgZm9yIChjb25zdCB2ZWN0b3Igb2YgZml4dHVyZS5zb2Z0RGVyaXZhdGlvbikge1xuICAgICAgaXQoYGRlcml2ZXMgdGhlIHBpbm5lZCBnb2xkZW4gY2hpbGQ6ICR7dmVjdG9yLm5hbWV9YCwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBjaGlsZCA9IGF3YWl0IHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTkodmVjdG9yLmNvbXBvc2l0ZSwgdmVjdG9yLmluZGV4KTtcbiAgICAgICAgY2hpbGQudG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbCh2ZWN0b3IuY2hpbGRQdWIpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaXQoJ3JlamVjdHMgYSBoYXJkZW5lZCBvciBvdXQtb2YtcmFuZ2UgaW5kZXgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5KFJPT1RfUFVCLCAtMSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbm9uLWhhcmRlbmVkLyk7XG4gICAgICBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5KFJPT1RfUFVCLCAweDgwMDAwMDAwKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9ub24taGFyZGVuZWQvKTtcbiAgICAgIGF3YWl0IHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTkoUk9PVF9QVUIsIDEuNSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbm9uLWhhcmRlbmVkLyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhIG1hbGZvcm1lZCByb290JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOShmaXh0dXJlLmludmFsaWRDb21wb3NpdGVbMV0uY29tcG9zaXRlLCAwKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAvSW52YWxpZCBkZXJpdmFibGUgZWQyNTUxOSBwdWIvXG4gICAgICApO1xuICAgICAgYXdhaXQgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOShTVFJLRVlfUFVCTElDLCAwKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnZhbGlkIGRlcml2YWJsZSBlZDI1NTE5IHB1Yi8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnU3RlbGxhciB1c2VyLWtleSBjb2RlY3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2tlZXBzIFN0ZWxsYXIgZW5jb2Rpbmcgc2VwYXJhdGUgZnJvbSB0aGUgbmV1dHJhbCByb290IGZvcm1hdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlzVmFsaWRFZDI1NTE5U3RyS2V5UHVibGljS2V5KFNUUktFWV9QVUJMSUMpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIGVuY29kZUVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoZGVjb2RlRWQyNTUxOVN0cktleVB1YmxpY0tleShTVFJLRVlfUFVCTElDKSkuc2hvdWxkLmVxdWFsKFNUUktFWV9QVUJMSUMpO1xuICAgICAgZGVjb2RlRWQyNTUxOVN0cktleVNlY3JldFNlZWQoU1RSS0VZX1NFRUQpLmxlbmd0aC5zaG91bGQuZXF1YWwoMzIpO1xuICAgICAgaXNEZXJpdmFibGVFZDI1NTE5UHViKFNUUktFWV9QVUJMSUMpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICBpc0NoZWNrc3VtVmFsaWRTdHJLZXlFZDI1NTE5UHViKFNUUktFWV9QVUJMSUMpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgcHVibGljIGtleSB3aXRoIGEgY29ycnVwdGVkIGNoZWNrc3VtJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoJ0dBNVdVSjU0WjIzS0lMTENVT1VOQUtUUEJWWldLTVFWTzRPNkVRNUdITEFFUklNTExITkNTS1lBJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgc2VjcmV0IHNlZWQgd2hlcmUgYSBwdWJsaWMga2V5IGlzIHJlcXVpcmVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoJ1NBNVdVSjU0WjIzS0lMTENVT1VOQUtUUEJWWldLTVFWTzRPNkVRNUdITEFFUklNTExITkNTS1lIJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICAgICgoKSA9PiBkZWNvZGVFZDI1NTE5U3RyS2V5UHVibGljS2V5KCdTQTVXVUo1NFoyM0tJTExDVU9VTkFLVFBCVlpXS01RVk80TzZFUTVHSExBRVJJTUxMSE5DU0tZSCcpKS5zaG91bGQudGhyb3coXG4gICAgICAgIC9TdHJLZXkgcHVibGljIGtleS9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhIG5vbi1iYXNlMzIgY2hhcmFjdGVyLCB0aGUgZW1wdHkgc3RyaW5nLCBhbmQgbG93ZXJjYXNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoJ0dBNVdVSjU0WjIzS0lMTENVT1VOQUtUUEJWWldLTVFWTzRPNkVRNUdITEFFUklNTExITkNTS1kxJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICAgIGlzVmFsaWRFZDI1NTE5U3RyS2V5UHVibGljS2V5KCcnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoU1RSS0VZX1BVQkxJQy50b0xvd2VyQ2FzZSgpKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZhYmxlRWQyNTUxOVB1Yi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby9zYWZlL2Rlcml2YWJsZUVkMjU1MTlQdWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrQkFBZ0I7QUFDaEIsZ0RBQWtDO0FBQ2xDLHlDQW9CeUI7QUFFekIsd0RBQXdEO0FBQ3hELG1HQUFtRztBQUNuRyw4RUFBOEU7QUFDOUUsNkVBQStEO0FBRS9ELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBQSwrQkFBeUIsRUFBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDbkUsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5RSxNQUFNLGFBQWEsR0FBRywwREFBMEQsQ0FBQztBQUNqRixNQUFNLFdBQVcsR0FBRywwREFBMEQsQ0FBQztBQUUvRSxRQUFRLENBQUMscUJBQXFCLEVBQUU7SUFDOUIsUUFBUSxDQUFDLG9CQUFvQixFQUFFO1FBQzdCLEVBQUUsQ0FBQyxvREFBb0QsRUFBRTtZQUN2RCx3Q0FBa0MsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BELGtDQUE0QixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDL0MsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUN6QyxJQUFBLCtCQUF5QixFQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5RSxJQUFBLCtCQUF5QixFQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxvREFBb0QsRUFBRTtZQUN2RCxrQ0FBNEIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ3ZFLHdDQUFrQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtDQUErQyxFQUFFO1lBQ2xELElBQUEsOEJBQXdCLEdBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGlCQUFpQixFQUFFO1FBQzFCLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25DLEVBQUUsQ0FBQyxlQUFlLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDL0IsTUFBTSxTQUFTLEdBQUcsSUFBQSwrQkFBeUIsRUFDekMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQ3JDLENBQUM7Z0JBQ0YsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN6QyxNQUFNLE9BQU8sR0FBRyxJQUFBLCtCQUF5QixFQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDNUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3JELE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNqRSxJQUFBLDJCQUFxQixFQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdELENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDOUMsRUFBRSxDQUFDLFdBQVcsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUMzQixJQUFBLDJCQUFxQixFQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM1RCxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUEsK0JBQXlCLEVBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1lBQ3BHLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLDRCQUE0QixFQUFFO1FBQ3JDLEVBQUUsQ0FBQyxzRUFBc0UsRUFBRSxLQUFLO1lBQzlFLE1BQU0sS0FBSyxHQUFHLE1BQU0sV0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLGtCQUFZLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUN0RSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzdELE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDcEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDakQsQ0FBQyxNQUFNLElBQUEsK0JBQXlCLEVBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRyxDQUFDLENBQUMsQ0FBQztRQUVILHVGQUF1RjtRQUN2RixxRkFBcUY7UUFDckYsOERBQThEO1FBQzlELEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzVDLEVBQUUsQ0FBQyxvQ0FBb0MsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEtBQUs7Z0JBQ3pELE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBQSwrQkFBeUIsRUFBQyxNQUFNLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDOUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0RCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxFQUFFLENBQUMsMENBQTBDLEVBQUUsS0FBSztZQUNsRCxNQUFNLElBQUEsK0JBQXlCLEVBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDckYsTUFBTSxJQUFBLCtCQUF5QixFQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM3RixNQUFNLElBQUEsK0JBQXlCLEVBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3hGLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDBCQUEwQixFQUFFLEtBQUs7WUFDbEMsTUFBTSxJQUFBLCtCQUF5QixFQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQzlGLCtCQUErQixDQUNoQyxDQUFDO1lBQ0YsTUFBTSxJQUFBLCtCQUF5QixFQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQzVHLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsK0JBQStCLEVBQUU7UUFDeEMsTUFBTSxJQUFJLEdBQUcsSUFBQSxtQ0FBNkIsRUFBQyxXQUFXLENBQUMsQ0FBQztRQUN4RCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4RSxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM3QyxNQUFNLFNBQVMsR0FBRyxJQUFBLCtCQUF5QixFQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNwRSxNQUFNLFlBQVksR0FBRyxJQUFBLDRCQUFzQixFQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTNELEVBQUUsQ0FBQywwRUFBMEUsRUFBRSxLQUFLO1lBQ2xGLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FBQztnQkFDM0MsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFBLHFDQUErQixFQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDbkUsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFBLHFDQUErQixFQUFDLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQzlHLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZDLHVGQUF1RjtnQkFDdkYsSUFBQSxzQkFBZ0IsRUFBQyxXQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFBLHdCQUFrQixFQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztxQkFDeEUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7cUJBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMseUNBQXlDLEVBQUUsS0FBSztZQUNqRCxNQUFNLElBQUEscUNBQStCLEVBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLDhCQUE4QixDQUFDLENBQUM7WUFDaEgsTUFBTSxJQUFBLHFDQUErQixFQUFDO2dCQUNwQyxVQUFVLEVBQUUsV0FBVztnQkFDdkIsU0FBUyxFQUFFLFlBQVk7Z0JBQ3ZCLElBQUksRUFBRSxNQUFNO2FBQ2IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLDhCQUE4QixDQUFDLENBQUM7WUFDMUQsTUFBTSxJQUFBLHFDQUErQixFQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMxRyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHlCQUF5QixFQUFFO1FBQ2xDLEVBQUUsQ0FBQyw4REFBOEQsRUFBRTtZQUNqRSxJQUFBLG1DQUE2QixFQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEUsSUFBQSxrQ0FBNEIsRUFBQyxJQUFBLGtDQUE0QixFQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN0RyxJQUFBLG1DQUE2QixFQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLElBQUEsMkJBQXFCLEVBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6RCxJQUFBLHFDQUErQixFQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsZ0RBQWdELEVBQUU7WUFDbkQsSUFBQSxtQ0FBNkIsRUFBQywwREFBMEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEgsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsc0RBQXNELEVBQUU7WUFDekQsSUFBQSxtQ0FBNkIsRUFBQywwREFBMEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFBLGtDQUE0QixFQUFDLDBEQUEwRCxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUMzRyxtQkFBbUIsQ0FDcEIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGlFQUFpRSxFQUFFO1lBQ3BFLElBQUEsbUNBQTZCLEVBQUMsMERBQTBELENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlHLElBQUEsbUNBQTZCLEVBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0RCxJQUFBLG1DQUE2QixFQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0ICogYXMgbmFjbCBmcm9tICd0d2VldG5hY2wnO1xuaW1wb3J0IHtcbiAgREVSSVZBQkxFX0VEMjU1MTlfQ0hBSU5fQ09ERV9CWVRFUyxcbiAgREVSSVZBQkxFX0VEMjU1MTlfUFVCX0xFTkdUSCxcbiAgRWQyNTUxOUJJUDMyLFxuICBFZGRzYSxcbiAgYmlnSW50RnJvbUJ1ZmZlckxFLFxuICBiaWdJbnRUb0J1ZmZlckxFLFxuICBkZWNvZGVEZXJpdmFibGVFZDI1NTE5UHViLFxuICBkZWNvZGVFZDI1NTE5U3RyS2V5UHVibGljS2V5LFxuICBkZWNvZGVFZDI1NTE5U3RyS2V5U2VjcmV0U2VlZCxcbiAgZW5jb2RlRGVyaXZhYmxlRWQyNTUxOVB1YixcbiAgZW5jb2RlRWQyNTUxOUNoYWluQ29kZSxcbiAgZW5jb2RlRWQyNTUxOVN0cktleVB1YmxpY0tleSxcbiAgZ2VuZXJhdGVFZDI1NTE5Q2hhaW5Db2RlLFxuICBpc0NoZWNrc3VtVmFsaWRTdHJLZXlFZDI1NTE5UHViLFxuICBpc0Rlcml2YWJsZUVkMjU1MTlQdWIsXG4gIGlzVmFsaWRFZDI1NTE5U3RyS2V5UHVibGljS2V5LFxuICBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5LFxuICBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5QXRQYXRoLFxuICBzb2Z0RGVyaXZlQ2hpbGRQcnZFZDI1NTE5QXRQYXRoLFxufSBmcm9tICcuLi8uLi8uLi8uLi9zcmMnO1xuXG4vLyBDcm9zcy1yZXBvIGZpeHR1cmU6IGJ5dGUtaWRlbnRpY2FsIHRvIHdhbGxldC1wbGF0Zm9ybVxuLy8gdGVzdC91bml0L2Jhc2Uvc2FmZXMvZml4dHVyZXMvZGVyaXZhYmxlRWQyNTUxOVB1Yi5qc29uLiBGb3VyIGluZGVwZW5kZW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzXG4vLyBmb3JtYXQgd2lsbCBvdGhlcndpc2UgZHJpZnQsIGFuZCB0aGUgZmFpbHVyZSBtb2RlIGlzIHVucmVjb3ZlcmFibGUgd2FsbGV0cy5cbmltcG9ydCAqIGFzIGZpeHR1cmUgZnJvbSAnLi9maXh0dXJlcy9kZXJpdmFibGVFZDI1NTE5UHViLmpzb24nO1xuXG5jb25zdCBQVUJMSUNfS0VZID0gQnVmZmVyLmFsbG9jKDMyKTtcbmNvbnN0IENIQUlOX0NPREUgPSBCdWZmZXIuYWxsb2MoMzIsIDB4YWIpO1xuY29uc3QgUk9PVF9QVUIgPSBlbmNvZGVEZXJpdmFibGVFZDI1NTE5UHViKFBVQkxJQ19LRVksIENIQUlOX0NPREUpO1xuY29uc3QgUk9PVF9LRVlDSEFJTiA9IEJ1ZmZlci5jb25jYXQoW1BVQkxJQ19LRVksIENIQUlOX0NPREVdKS50b1N0cmluZygnaGV4Jyk7XG5jb25zdCBTVFJLRVlfUFVCTElDID0gJ0dBNVdVSjU0WjIzS0lMTENVT1VOQUtUUEJWWldLTVFWTzRPNkVRNUdITEFFUklNTExITkNTS1lIJztcbmNvbnN0IFNUUktFWV9TRUVEID0gJ1NBQUFDQVFEQVFDUU1CWUlCRUZBV0RBTkJZSFJBRUlTQ01LQktGUVhEQU1SVUdZNERVUEI2TktJJztcblxuZGVzY3JpYmUoJ2Rlcml2YWJsZUVkMjU1MTlQdWInLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdiYXNlMzIgcm9vdCBmb3JtYXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2VuY29kZXMgMzItYnl0ZSBwdWJsaWMga2V5IHBsdXMgMzItYnl0ZSBjaGFpbiBjb2RlJywgZnVuY3Rpb24gKCkge1xuICAgICAgREVSSVZBQkxFX0VEMjU1MTlfQ0hBSU5fQ09ERV9CWVRFUy5zaG91bGQuZXF1YWwoMzIpO1xuICAgICAgREVSSVZBQkxFX0VEMjU1MTlfUFVCX0xFTkdUSC5zaG91bGQuZXF1YWwoMTAzKTtcbiAgICAgIFJPT1RfUFVCLnNob3VsZC5tYXRjaCgvXltBLVoyLTddezEwM30kLyk7XG4gICAgICBkZWNvZGVEZXJpdmFibGVFZDI1NTE5UHViKFJPT1RfUFVCKS5wdWIuZXF1YWxzKFBVQkxJQ19LRVkpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIGRlY29kZURlcml2YWJsZUVkMjU1MTlQdWIoUk9PVF9QVUIpLmNoYWluQ29kZS5lcXVhbHMoQ0hBSU5fQ09ERSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21hdGNoZXMgdGhlIGNvbnN0YW50cyBwaW5uZWQgaW4gdGhlIHNoYXJlZCBmaXh0dXJlJywgZnVuY3Rpb24gKCkge1xuICAgICAgREVSSVZBQkxFX0VEMjU1MTlfUFVCX0xFTkdUSC5zaG91bGQuZXF1YWwoZml4dHVyZS5yb290UHViQmFzZTMyTGVuZ3RoKTtcbiAgICAgIERFUklWQUJMRV9FRDI1NTE5X0NIQUlOX0NPREVfQllURVMuc2hvdWxkLmVxdWFsKGZpeHR1cmUuY2hhaW5Db2RlQnl0ZXMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2dlbmVyYXRlcyByYXcgY2hhaW4gY29kZSBmb3Igcm9vdCBjb21wb3NpdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGdlbmVyYXRlRWQyNTUxOUNoYWluQ29kZSgpLmxlbmd0aC5zaG91bGQuZXF1YWwoMzIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZml4dHVyZSB2ZWN0b3JzJywgZnVuY3Rpb24gKCkge1xuICAgIGZvciAoY29uc3QgdmVjdG9yIG9mIGZpeHR1cmUudmFsaWQpIHtcbiAgICAgIGl0KGByb3VuZC10cmlwcyAke3ZlY3Rvci5uYW1lfWAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgY29tcG9zaXRlID0gZW5jb2RlRGVyaXZhYmxlRWQyNTUxOVB1YihcbiAgICAgICAgICBCdWZmZXIuZnJvbSh2ZWN0b3IucHViLCAnaGV4JyksXG4gICAgICAgICAgQnVmZmVyLmZyb20odmVjdG9yLmNoYWluQ29kZSwgJ2hleCcpXG4gICAgICAgICk7XG4gICAgICAgIGNvbXBvc2l0ZS5zaG91bGQuZXF1YWwodmVjdG9yLmNvbXBvc2l0ZSk7XG4gICAgICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVEZXJpdmFibGVFZDI1NTE5UHViKHZlY3Rvci5jb21wb3NpdGUpO1xuICAgICAgICBkZWNvZGVkLnB1Yi50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKHZlY3Rvci5wdWIpO1xuICAgICAgICBkZWNvZGVkLmNoYWluQ29kZS50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKHZlY3Rvci5jaGFpbkNvZGUpO1xuICAgICAgICBpc0Rlcml2YWJsZUVkMjU1MTlQdWIodmVjdG9yLmNvbXBvc2l0ZSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB2ZWN0b3Igb2YgZml4dHVyZS5pbnZhbGlkQ29tcG9zaXRlKSB7XG4gICAgICBpdChgcmVqZWN0cyAke3ZlY3Rvci5uYW1lfWAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXNEZXJpdmFibGVFZDI1NTE5UHViKHZlY3Rvci5jb21wb3NpdGUpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICAgICgoKSA9PiBkZWNvZGVEZXJpdmFibGVFZDI1NTE5UHViKHZlY3Rvci5jb21wb3NpdGUpKS5zaG91bGQudGhyb3coL0ludmFsaWQgZGVyaXZhYmxlIGVkMjU1MTkgcHViLyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyYXcgcHVibGljIHNvZnQgZGVyaXZhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnZGVyaXZlcyBhIGRldGVybWluaXN0aWMgcHVibGljIGtleSBhbmQgZGlzY2FyZHMgdGhlIGNoaWxkIGNoYWluIGNvZGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBlZGRzYSA9IGF3YWl0IEVkZHNhLmluaXRpYWxpemUoYXdhaXQgRWQyNTUxOUJJUDMyLmluaXRpYWxpemUoKSk7XG4gICAgICBjb25zdCBkZXJpdmVkID0gZWRkc2EuZGVyaXZlVW5oYXJkZW5lZChST09UX0tFWUNIQUlOLCAnbS83Jyk7XG4gICAgICBkZXJpdmVkLmxlbmd0aC5zaG91bGQuZXF1YWwoMTI4KTtcbiAgICAgIGRlcml2ZWQuc2xpY2UoMCwgNjQpLnNob3VsZC5tYXRjaCgvXlswLTlhLWZdezY0fSQvKTtcbiAgICAgIGRlcml2ZWQuc2xpY2UoNjQpLnNob3VsZC5tYXRjaCgvXlswLTlhLWZdezY0fSQvKTtcbiAgICAgIChhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5KFJPT1RfUFVCLCA3KSkudG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbChkZXJpdmVkLnNsaWNlKDAsIDY0KSk7XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgZ29sZGVuIHZlY3RvcnMgYmVsb3cgcGluIHRoZSB1bmhhcmRlbmVkIGRlcml2YXRpb24gb3V0cHV0IHNoYXJlZCBjcm9zcy1yZXBvIHdpdGhcbiAgICAvLyB3YWxsZXQtcGxhdGZvcm06IGEgZGl2ZXJnZW50IGltcGxlbWVudGF0aW9uIGRlcml2ZXMgY28tc2lnbmVyIGtleXMgbm9ib2R5IGVsc2UgY2FuXG4gICAgLy8gcmVwcm9kdWNlLCBwZXJtYW5lbnRseSBicmlja2luZyB0aGUgd2FsbGV0cyBtaW50ZWQgd2l0aCBpdC5cbiAgICBmb3IgKGNvbnN0IHZlY3RvciBvZiBmaXh0dXJlLnNvZnREZXJpdmF0aW9uKSB7XG4gICAgICBpdChgZGVyaXZlcyB0aGUgcGlubmVkIGdvbGRlbiBjaGlsZDogJHt2ZWN0b3IubmFtZX1gLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gYXdhaXQgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOSh2ZWN0b3IuY29tcG9zaXRlLCB2ZWN0b3IuaW5kZXgpO1xuICAgICAgICBjaGlsZC50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKHZlY3Rvci5jaGlsZFB1Yik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpdCgncmVqZWN0cyBhIGhhcmRlbmVkIG9yIG91dC1vZi1yYW5nZSBpbmRleCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTkoUk9PVF9QVUIsIC0xKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9ub24taGFyZGVuZWQvKTtcbiAgICAgIGF3YWl0IHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTkoUk9PVF9QVUIsIDB4ODAwMDAwMDApLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL25vbi1oYXJkZW5lZC8pO1xuICAgICAgYXdhaXQgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOShST09UX1BVQiwgMS41KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9ub24taGFyZGVuZWQvKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgbWFsZm9ybWVkIHJvb3QnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5KGZpeHR1cmUuaW52YWxpZENvbXBvc2l0ZVsxXS5jb21wb3NpdGUsIDApLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgIC9JbnZhbGlkIGRlcml2YWJsZSBlZDI1NTE5IHB1Yi9cbiAgICAgICk7XG4gICAgICBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5KFNUUktFWV9QVUJMSUMsIDApLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL0ludmFsaWQgZGVyaXZhYmxlIGVkMjU1MTkgcHViLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdtdWx0aS1zZWdtZW50IHNvZnQgZGVyaXZhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzZWVkID0gZGVjb2RlRWQyNTUxOVN0cktleVNlY3JldFNlZWQoU1RSS0VZX1NFRUQpO1xuICAgIGNvbnN0IHJvb3RQdWIgPSBCdWZmZXIuZnJvbShuYWNsLnNpZ24ua2V5UGFpci5mcm9tU2VlZChzZWVkKS5wdWJsaWNLZXkpO1xuICAgIGNvbnN0IHJvb3RDaGFpbkNvZGUgPSBCdWZmZXIuYWxsb2MoMzIsIDB4YWIpO1xuICAgIGNvbnN0IGNvbXBvc2l0ZSA9IGVuY29kZURlcml2YWJsZUVkMjU1MTlQdWIocm9vdFB1Yiwgcm9vdENoYWluQ29kZSk7XG4gICAgY29uc3QgY2hhaW5Db2RlU3RyID0gZW5jb2RlRWQyNTUxOUNoYWluQ29kZShyb290Q2hhaW5Db2RlKTtcblxuICAgIGl0KCdwcml2YXRlIGRlcml2ZSBwdWJsaWMgaGFsZiBtYXRjaGVzIHB1YmxpYyBkZXJpdmUgYXQgbS8wIGFuZCBtLzQ0LzI4My8yLzAnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhdGggb2YgWydtLzAnLCAnbS80NC8yODMvMi8wJ10pIHtcbiAgICAgICAgY29uc3QgcHViID0gYXdhaXQgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOUF0UGF0aChjb21wb3NpdGUsIHBhdGgpO1xuICAgICAgICBjb25zdCBwcnYgPSBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQcnZFZDI1NTE5QXRQYXRoKHsgc2VlZFN0cktleTogU1RSS0VZX1NFRUQsIGNoYWluQ29kZTogY2hhaW5Db2RlU3RyLCBwYXRoIH0pO1xuICAgICAgICBwcnYucHViLmVxdWFscyhwdWIpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgICAgLy8gUmVjb21wdXRlIHRoZSBwdWJsaWMgcG9pbnQgZGlyZWN0bHkgZnJvbSBrTCB0byBwcm92ZSB0aGUgcHJpdmF0ZSBzY2FsYXIgbWFwcyB0byBwdWIuXG4gICAgICAgIGJpZ0ludFRvQnVmZmVyTEUoRWRkc2EuY3VydmUuYmFzZVBvaW50TXVsdChiaWdJbnRGcm9tQnVmZmVyTEUocHJ2LmtMKSksIDMyKVxuICAgICAgICAgIC5lcXVhbHMocHJ2LnB1YilcbiAgICAgICAgICAuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgaGFyZGVuZWQgYW5kIG91dC1vZi1yYW5nZSBwYXRocycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTlBdFBhdGgoY29tcG9zaXRlLCBcIm0vMCdcIikuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvSW52YWxpZCBzb2Z0IGRlcml2YXRpb24gcGF0aC8pO1xuICAgICAgYXdhaXQgc29mdERlcml2ZUNoaWxkUHJ2RWQyNTUxOUF0UGF0aCh7XG4gICAgICAgIHNlZWRTdHJLZXk6IFNUUktFWV9TRUVELFxuICAgICAgICBjaGFpbkNvZGU6IGNoYWluQ29kZVN0cixcbiAgICAgICAgcGF0aDogXCJtLzAnXCIsXG4gICAgICB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnZhbGlkIHNvZnQgZGVyaXZhdGlvbiBwYXRoLyk7XG4gICAgICBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5QXRQYXRoKGNvbXBvc2l0ZSwgJ20vMjE0NzQ4MzY0OCcpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL291dCBvZiByYW5nZS8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnU3RlbGxhciB1c2VyLWtleSBjb2RlY3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2tlZXBzIFN0ZWxsYXIgZW5jb2Rpbmcgc2VwYXJhdGUgZnJvbSB0aGUgbmV1dHJhbCByb290IGZvcm1hdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlzVmFsaWRFZDI1NTE5U3RyS2V5UHVibGljS2V5KFNUUktFWV9QVUJMSUMpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIGVuY29kZUVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoZGVjb2RlRWQyNTUxOVN0cktleVB1YmxpY0tleShTVFJLRVlfUFVCTElDKSkuc2hvdWxkLmVxdWFsKFNUUktFWV9QVUJMSUMpO1xuICAgICAgZGVjb2RlRWQyNTUxOVN0cktleVNlY3JldFNlZWQoU1RSS0VZX1NFRUQpLmxlbmd0aC5zaG91bGQuZXF1YWwoMzIpO1xuICAgICAgaXNEZXJpdmFibGVFZDI1NTE5UHViKFNUUktFWV9QVUJMSUMpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICBpc0NoZWNrc3VtVmFsaWRTdHJLZXlFZDI1NTE5UHViKFNUUktFWV9QVUJMSUMpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgcHVibGljIGtleSB3aXRoIGEgY29ycnVwdGVkIGNoZWNrc3VtJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoJ0dBNVdVSjU0WjIzS0lMTENVT1VOQUtUUEJWWldLTVFWTzRPNkVRNUdITEFFUklNTExITkNTS1lBJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgc2VjcmV0IHNlZWQgd2hlcmUgYSBwdWJsaWMga2V5IGlzIHJlcXVpcmVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoJ1NBNVdVSjU0WjIzS0lMTENVT1VOQUtUUEJWWldLTVFWTzRPNkVRNUdITEFFUklNTExITkNTS1lIJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICAgICgoKSA9PiBkZWNvZGVFZDI1NTE5U3RyS2V5UHVibGljS2V5KCdTQTVXVUo1NFoyM0tJTExDVU9VTkFLVFBCVlpXS01RVk80TzZFUTVHSExBRVJJTUxMSE5DU0tZSCcpKS5zaG91bGQudGhyb3coXG4gICAgICAgIC9TdHJLZXkgcHVibGljIGtleS9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhIG5vbi1iYXNlMzIgY2hhcmFjdGVyLCB0aGUgZW1wdHkgc3RyaW5nLCBhbmQgbG93ZXJjYXNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoJ0dBNVdVSjU0WjIzS0lMTENVT1VOQUtUUEJWWldLTVFWTzRPNkVRNUdITEFFUklNTExITkNTS1kxJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICAgIGlzVmFsaWRFZDI1NTE5U3RyS2V5UHVibGljS2V5KCcnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoU1RSS0VZX1BVQkxJQy50b0xvd2VyQ2FzZSgpKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../../../../../test/unit/bitgo/safe/recovery.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../../../../../test/unit/bitgo/safe/recovery.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,CAAC"}
|
|
@@ -32,14 +32,23 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
32
32
|
return result;
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
35
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
const assert_1 = __importDefault(require("assert"));
|
|
36
40
|
require("should");
|
|
37
41
|
const sinon = __importStar(require("sinon"));
|
|
38
42
|
const utxo_lib_1 = require("@bitgo/utxo-lib");
|
|
43
|
+
const ed25519_1 = require("@noble/curves/ed25519");
|
|
44
|
+
const sjcl = __importStar(require("@bitgo/sjcl"));
|
|
39
45
|
const sdk_lib_mpc_1 = require("@bitgo/sdk-lib-mpc");
|
|
40
46
|
const keyShareEnvelope_1 = require("../../../../src/bitgo/utils/tss/keyShareEnvelope");
|
|
41
47
|
const errors_1 = require("../../../../src/bitgo/errors");
|
|
42
48
|
const recovery_1 = require("../../../../src/bitgo/safe/recovery");
|
|
49
|
+
const src_1 = require("../../../../src");
|
|
50
|
+
const eddsa_1 = require("../../../../src/bitgo/tss/eddsa/eddsa");
|
|
51
|
+
const eddsaMPCv2_1 = require("../../../../src/bitgo/utils/tss/eddsa/eddsaMPCv2");
|
|
43
52
|
const PASSWORD = 'safe-password';
|
|
44
53
|
function makeMockBitGo(decryptImpl) {
|
|
45
54
|
return {
|
|
@@ -72,7 +81,7 @@ describe('decryptSafeKeycard', () => {
|
|
|
72
81
|
});
|
|
73
82
|
const backupBox = box({
|
|
74
83
|
secp256k1Multisig: 'enc-backup-secp',
|
|
75
|
-
ed25519Multisig: 'enc-backup-ed25519',
|
|
84
|
+
ed25519Multisig: { prv: 'enc-backup-ed25519', chainCode: 'C'.repeat(52) },
|
|
76
85
|
ecdsaMpc: 'enc-backup-ecdsa',
|
|
77
86
|
eddsaMpc: 'enc-backup-eddsa',
|
|
78
87
|
});
|
|
@@ -105,7 +114,8 @@ describe('decryptSafeKeycard', () => {
|
|
|
105
114
|
result.secp256k1Multisig.backup.should.equal('xprv-backup');
|
|
106
115
|
result.secp256k1Multisig.bitgo.should.equal('xpub-secp-bitgo');
|
|
107
116
|
result.ed25519Multisig.user.should.equal('S-user-seed');
|
|
108
|
-
result.ed25519Multisig.backup.should.equal('S-backup-seed');
|
|
117
|
+
result.ed25519Multisig.backup.prv.should.equal('S-backup-seed');
|
|
118
|
+
result.ed25519Multisig.backup.chainCode.should.equal('C'.repeat(52));
|
|
109
119
|
result.ed25519Multisig.bitgo.should.equal('pub-ed25519-bitgo');
|
|
110
120
|
result.ecdsaMpc.user.signing.toString('hex').should.equal(Buffer.from('user-reduced').toString('hex'));
|
|
111
121
|
result.ecdsaMpc.user.vrf.toString('hex').should.equal(Buffer.from('user-vrf').toString('hex'));
|
|
@@ -116,6 +126,62 @@ describe('decryptSafeKeycard', () => {
|
|
|
116
126
|
// 4 slots × (user + backup) = 8 decrypts; BitGo (Box C) is never decrypted.
|
|
117
127
|
bitgo.decrypt.callCount.should.equal(8);
|
|
118
128
|
});
|
|
129
|
+
it('decrypts the seed from an object-form ed25519Multisig backup entry', async () => {
|
|
130
|
+
const userBox = box({
|
|
131
|
+
secp256k1Multisig: 'enc-user-secp',
|
|
132
|
+
ed25519Multisig: 'enc-user-ed25519',
|
|
133
|
+
ecdsaMpc: 'enc-user-ecdsa',
|
|
134
|
+
eddsaMpc: 'enc-user-eddsa',
|
|
135
|
+
});
|
|
136
|
+
const backupBox = JSON.stringify({
|
|
137
|
+
secp256k1Multisig: 'enc-backup-secp',
|
|
138
|
+
ed25519Multisig: { prv: 'enc-backup-ed25519', chainCode: 'A'.repeat(52) },
|
|
139
|
+
ecdsaMpc: 'enc-backup-ecdsa',
|
|
140
|
+
eddsaMpc: 'enc-backup-eddsa',
|
|
141
|
+
});
|
|
142
|
+
const bitgoBox = box({
|
|
143
|
+
secp256k1Multisig: 'xpub-secp-bitgo',
|
|
144
|
+
ed25519Multisig: 'pub-ed25519-bitgo',
|
|
145
|
+
ecdsaMpc: 'common-ecdsa-bitgo',
|
|
146
|
+
eddsaMpc: 'common-eddsa-bitgo',
|
|
147
|
+
});
|
|
148
|
+
const mpcUser = (0, keyShareEnvelope_1.buildSafeMpcKeyEnvelopes)(Buffer.from('user-signing'), Buffer.from('user-reduced'), Buffer.from('user-vrf'));
|
|
149
|
+
const mpcBackup = (0, keyShareEnvelope_1.buildSafeMpcKeyEnvelopes)(Buffer.from('backup-signing'), Buffer.from('backup-reduced'), Buffer.from('backup-vrf'));
|
|
150
|
+
const bitgo = makeMockBitGo(makeDecryptMap({
|
|
151
|
+
'enc-user-secp': 'xprv-user',
|
|
152
|
+
'enc-backup-secp': 'xprv-backup',
|
|
153
|
+
'enc-user-ed25519': 'S-user-seed',
|
|
154
|
+
'enc-backup-ed25519': 'S-backup-seed',
|
|
155
|
+
'enc-user-ecdsa': mpcUser.reducedEnvelope.toString('base64'),
|
|
156
|
+
'enc-backup-ecdsa': mpcBackup.reducedEnvelope.toString('base64'),
|
|
157
|
+
'enc-user-eddsa': mpcUser.reducedEnvelope.toString('base64'),
|
|
158
|
+
'enc-backup-eddsa': mpcBackup.reducedEnvelope.toString('base64'),
|
|
159
|
+
}));
|
|
160
|
+
const result = await (0, recovery_1.decryptSafeKeycard)({
|
|
161
|
+
bitgo,
|
|
162
|
+
userKeyBox: userBox,
|
|
163
|
+
backupKeyBox: backupBox,
|
|
164
|
+
bitgoKeyBox: bitgoBox,
|
|
165
|
+
password: PASSWORD,
|
|
166
|
+
});
|
|
167
|
+
result.ed25519Multisig.backup.prv.should.equal('S-backup-seed');
|
|
168
|
+
result.ed25519Multisig.backup.chainCode.should.equal('A'.repeat(52));
|
|
169
|
+
});
|
|
170
|
+
it('rejects an ed25519 chain-code entry in a non-backup slot (fail closed)', async () => {
|
|
171
|
+
const userBox = JSON.stringify({
|
|
172
|
+
secp256k1Multisig: { prv: 'enc-user-secp', chainCode: 'A'.repeat(52) },
|
|
173
|
+
ed25519Multisig: 'enc-user-ed25519',
|
|
174
|
+
ecdsaMpc: 'enc-user-ecdsa',
|
|
175
|
+
eddsaMpc: 'enc-user-eddsa',
|
|
176
|
+
});
|
|
177
|
+
await (0, recovery_1.decryptSafeKeycard)({
|
|
178
|
+
bitgo: makeMockBitGo(makeDecryptMap({})),
|
|
179
|
+
userKeyBox: userBox,
|
|
180
|
+
backupKeyBox: userBox,
|
|
181
|
+
bitgoKeyBox: userBox,
|
|
182
|
+
password: PASSWORD,
|
|
183
|
+
}).should.be.rejectedWith(/unexpected ed25519 chain-code entry/);
|
|
184
|
+
});
|
|
119
185
|
it('throws IncorrectPasswordError when decryption fails (wrong password)', async () => {
|
|
120
186
|
const userBox = box({
|
|
121
187
|
secp256k1Multisig: 'enc-user-secp',
|
|
@@ -139,7 +205,7 @@ const MPC_ROOT = { signing: Buffer.alloc(0), vrf: Buffer.alloc(0) };
|
|
|
139
205
|
function makeRoots(secp) {
|
|
140
206
|
return {
|
|
141
207
|
secp256k1Multisig: secp,
|
|
142
|
-
ed25519Multisig: { user: 'u', backup: 'b', bitgo: 'g' },
|
|
208
|
+
ed25519Multisig: { user: 'u', backup: { prv: 'b', chainCode: 'c' }, bitgo: 'g' },
|
|
143
209
|
ecdsaMpc: { user: MPC_ROOT, backup: MPC_ROOT, bitgo: 'g' },
|
|
144
210
|
eddsaMpc: { user: MPC_ROOT, backup: MPC_ROOT, bitgo: 'g' },
|
|
145
211
|
};
|
|
@@ -190,8 +256,99 @@ describe('deriveSafeWalletKeys', () => {
|
|
|
190
256
|
result.keys.user.should.be.a.String();
|
|
191
257
|
result.keys.backup.should.be.a.String();
|
|
192
258
|
});
|
|
193
|
-
it('
|
|
194
|
-
|
|
259
|
+
it('derives and signs the eddsaMpc slot-4 BIP44 child', async function () {
|
|
260
|
+
const [userDkg, backupDkg, bitgoDkg] = await sdk_lib_mpc_1.MPSUtil.generateEdDsaDKGKeyShares();
|
|
261
|
+
const [vrfUser, vrfBackup, vrfBitgo] = await sdk_lib_mpc_1.MpsVrfUtils.generateVrfDKGKeyShares();
|
|
262
|
+
const mpcRoots = {
|
|
263
|
+
...roots,
|
|
264
|
+
eddsaMpc: {
|
|
265
|
+
user: { signing: userDkg.getReducedKeyShare(), vrf: vrfUser.getKeyShare() },
|
|
266
|
+
backup: { signing: backupDkg.getReducedKeyShare(), vrf: vrfBackup.getKeyShare() },
|
|
267
|
+
bitgo: bitgoDkg.getCommonKeychain(),
|
|
268
|
+
},
|
|
269
|
+
};
|
|
270
|
+
const result = await (0, recovery_1.deriveSafeWalletKeys)({ coin: 'sol', slot: 'eddsaMpc', account: 0, roots: mpcRoots });
|
|
271
|
+
if (result.slot !== 'eddsaMpc') {
|
|
272
|
+
throw new Error('expected eddsaMpc slot');
|
|
273
|
+
}
|
|
274
|
+
result.path.should.equal("m/44'/501'/4'/0'");
|
|
275
|
+
// Play mint's user↔BitGo role locally at the same BIP44 path; no dev-minted wallet is needed.
|
|
276
|
+
const userMint = new sdk_lib_mpc_1.MpsDerive.Derive(3, 2, 0, userDkg.getKeyShare(), vrfUser.getKeyShare(), result.path);
|
|
277
|
+
const bitgoMint = new sdk_lib_mpc_1.MpsDerive.Derive(3, 2, 2, bitgoDkg.getKeyShare(), vrfBitgo.getKeyShare(), result.path);
|
|
278
|
+
const [userRound0, bitgoRound0] = await Promise.all([userMint.initDerive(), bitgoMint.initDerive()]);
|
|
279
|
+
const [userRound1] = userMint.handleIncomingMessages([bitgoRound0]);
|
|
280
|
+
const [bitgoRound1] = bitgoMint.handleIncomingMessages([userRound0]);
|
|
281
|
+
if (!userRound1 || !bitgoRound1) {
|
|
282
|
+
throw new Error('expected user and BitGo derive round-1 messages');
|
|
283
|
+
}
|
|
284
|
+
assert_1.default.deepStrictEqual(userMint.handleIncomingMessages([bitgoRound1]), []);
|
|
285
|
+
assert_1.default.deepStrictEqual(bitgoMint.handleIncomingMessages([userRound1]), []);
|
|
286
|
+
const mintedChildCommonKeychain = userMint.getCommonKeychain();
|
|
287
|
+
assert_1.default.strictEqual(bitgoMint.getCommonKeychain(), mintedChildCommonKeychain);
|
|
288
|
+
assert_1.default.strictEqual(result.keys.commonKeychain, mintedChildCommonKeychain);
|
|
289
|
+
const walletPassphrase = 'safe-recovery-passphrase';
|
|
290
|
+
const userKey = sjcl.encrypt(walletPassphrase, result.keys.user);
|
|
291
|
+
const backupKey = sjcl.encrypt(walletPassphrase, result.keys.backup);
|
|
292
|
+
const rootCommonKeychain = userDkg.getCommonKeychain();
|
|
293
|
+
await assert_1.default.rejects((0, eddsaMPCv2_1.signEddsaMpcV2RecoveryTx)({
|
|
294
|
+
message: Buffer.from('wrong keychain must fail'),
|
|
295
|
+
userKey,
|
|
296
|
+
backupKey,
|
|
297
|
+
walletPassphrase,
|
|
298
|
+
bitgoKey: rootCommonKeychain,
|
|
299
|
+
derivationPath: 'm/0',
|
|
300
|
+
}), /commonKeyChain from keycard does not match bitgoKey/);
|
|
301
|
+
const mpc = await (0, eddsa_1.getInitializedMpcInstance)();
|
|
302
|
+
for (const derivationPath of ['m/0', 'm/3']) {
|
|
303
|
+
const message = Buffer.from(`Safe EdDSA recovery ${derivationPath}`);
|
|
304
|
+
const signature = await (0, eddsaMPCv2_1.signEddsaMpcV2RecoveryTx)({
|
|
305
|
+
message,
|
|
306
|
+
userKey,
|
|
307
|
+
backupKey,
|
|
308
|
+
walletPassphrase,
|
|
309
|
+
bitgoKey: result.keys.commonKeychain,
|
|
310
|
+
derivationPath,
|
|
311
|
+
});
|
|
312
|
+
const derivedKeychain = mpc.deriveUnhardened(result.keys.commonKeychain, derivationPath);
|
|
313
|
+
const publicKeyBytes = Buffer.from(derivedKeychain.slice(0, 64), 'hex');
|
|
314
|
+
assert_1.default.strictEqual(ed25519_1.ed25519.verify(new Uint8Array(signature), new Uint8Array(message), new Uint8Array(publicKeyBytes)), true);
|
|
315
|
+
}
|
|
316
|
+
});
|
|
317
|
+
it('derives the ed25519Multisig triplet at the BIP44 path', async () => {
|
|
318
|
+
const STRKEY_SEED = 'SAAACAQDAQCQMBYIBEFAWDANBYHRAEISCMKBKFQXDAMRUGY4DUPB6NKI';
|
|
319
|
+
const backupSeed = (0, src_1.decodeEd25519StrKeySecretSeed)(STRKEY_SEED);
|
|
320
|
+
const backupRootPub = Buffer.from(ed25519_1.ed25519.getPublicKey(backupSeed));
|
|
321
|
+
const backupChainCode = Buffer.alloc(32, 0xab);
|
|
322
|
+
const ed25519Roots = {
|
|
323
|
+
...roots,
|
|
324
|
+
ed25519Multisig: {
|
|
325
|
+
user: STRKEY_SEED,
|
|
326
|
+
backup: { prv: STRKEY_SEED, chainCode: (0, src_1.encodeEd25519ChainCode)(backupChainCode) },
|
|
327
|
+
bitgo: (0, src_1.encodeDerivableEd25519Pub)(backupRootPub, backupChainCode),
|
|
328
|
+
},
|
|
329
|
+
};
|
|
330
|
+
const result = await (0, recovery_1.deriveSafeWalletKeys)({
|
|
331
|
+
coin: 'algo',
|
|
332
|
+
slot: 'ed25519Multisig',
|
|
333
|
+
account: 0,
|
|
334
|
+
roots: ed25519Roots,
|
|
335
|
+
});
|
|
336
|
+
if (result.slot !== 'ed25519Multisig') {
|
|
337
|
+
throw new Error('expected ed25519Multisig slot');
|
|
338
|
+
}
|
|
339
|
+
result.path.should.equal("m/44'/283'/2'/0'");
|
|
340
|
+
// user: hardened SLIP-0010 child, pinned to the leaf's golden vector
|
|
341
|
+
result.keys.user.kind.should.equal('seed');
|
|
342
|
+
result.keys.user.seed.should.equal('be69531ebbab851b69aa41bb9c905afed52d26ff4278e6418609d4d60570510c');
|
|
343
|
+
result.keys.user.pub.should.equal(Buffer.from(ed25519_1.ed25519.getPublicKey(Buffer.from(result.keys.user.seed, 'hex'))).toString('hex'));
|
|
344
|
+
// backup: extended key whose public half equals the public soft-derive of root pub ‖ chain code
|
|
345
|
+
const bitgoPub = (await (0, src_1.softDeriveChildPubEd25519AtPath)(ed25519Roots.ed25519Multisig.bitgo, 'm/44/283/2/0')).toString('hex');
|
|
346
|
+
result.keys.backup.kind.should.equal('extended');
|
|
347
|
+
// Pin the private halves (self-generated; to be superseded by GV1 cross-repo vectors).
|
|
348
|
+
result.keys.backup.kL.should.equal('9ad60bb591fec65df3a72fb041ee53a3263c43e6056512bc49de6b342cff8e0f');
|
|
349
|
+
result.keys.backup.kR.should.equal('1262f2d5439c03d11f2a295d691b4ea629f14e9e25c614d4a8aff8edd1865cdf');
|
|
350
|
+
result.keys.backup.pub.should.equal(bitgoPub);
|
|
351
|
+
result.keys.bitgo.pub.should.equal(bitgoPub);
|
|
195
352
|
});
|
|
196
353
|
it('rejects a non-integer account', async () => {
|
|
197
354
|
await (0, recovery_1.deriveSafeWalletKeys)({ coin: 'btc', slot: 'secp256k1Multisig', account: 1.5, roots }).should.be.rejectedWith(/invalid account/);
|
|
@@ -284,6 +441,7 @@ describe('Safe ecdsaMpc derive → sign (gate)', function () {
|
|
|
284
441
|
backupRoot: { signing: backupDkg.getReducedKeyShare(), vrf: vrfBackup.getKeyShare() },
|
|
285
442
|
account: 0,
|
|
286
443
|
coinType: 60,
|
|
444
|
+
safeSlotOrdinal: 3,
|
|
287
445
|
});
|
|
288
446
|
// The derived child must never be the root (the "root envelope in the child position" footgun).
|
|
289
447
|
commonKeychain.should.not.equal(rootCommonKeychain);
|
|
@@ -310,4 +468,4 @@ describe('Safe ecdsaMpc derive → sign (gate)', function () {
|
|
|
310
468
|
signatureString.should.match(/^\d+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+$/);
|
|
311
469
|
});
|
|
312
470
|
});
|
|
313
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3ZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vc2FmZS9yZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtCQUFnQjtBQUNoQiw2Q0FBK0I7QUFDL0IsOENBQXdDO0FBQ3hDLG9EQUFpRjtBQUNqRix1RkFBNEY7QUFDNUYseURBQXNFO0FBQ3RFLGtFQUs2QztBQUc3QyxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUM7QUFFakMsU0FBUyxhQUFhLENBQUMsV0FBb0U7SUFDekYsT0FBTztRQUNMLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUEyQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDcEYsQ0FBQztBQUM1QixDQUFDO0FBRUQsZ0hBQWdIO0FBQ2hILFNBQVMsY0FBYyxDQUFDLE9BQStCO0lBQ3JELE9BQU8sQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1FBQzdCLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLEdBQUcsQ0FBQyxNQUtaO0lBQ0MsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFFRCxRQUFRLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFO0lBQ2xDLFNB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QyxHQUFHLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbkYsTUFBTSxlQUFlLEdBQUcsdUJBQVMsQ0FBQyw2QkFBNkIsQ0FDN0QsV0FBVyxFQUNYLENBQUMsTUFBTSx1QkFBUyxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQXdDLEVBQ2hHLGNBQWMsRUFDZCxLQUFLLEVBQ0wsU0FBUyxFQUNULEtBQUssQ0FDTixDQUFDO1FBRUYsNkZBQTZGO1FBQzdGLDBGQUEwRjtRQUMxRixlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDckMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztJQUN0RSxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IHsgYmlwMzIgfSBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgRGtsc0RzZywgRGtsc1R5cGVzLCBEa2xzVXRpbHMsIERrbHNWcmZVdGlscyB9IGZyb20gJ0BiaXRnby9zZGstbGliLW1wYyc7XG5pbXBvcnQgeyBidWlsZFNhZmVNcGNLZXlFbnZlbG9wZXMgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvdHNzL2tleVNoYXJlRW52ZWxvcGUnO1xuaW1wb3J0IHsgSW5jb3JyZWN0UGFzc3dvcmRFcnJvciB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby9lcnJvcnMnO1xuaW1wb3J0IHtcbiAgRGVjcnlwdGVkU2FmZVJvb3RzLFxuICBidWlsZFNhZmVSZWNvdmVyS2V5UGFyYW1zLFxuICBkZWNyeXB0U2FmZUtleWNhcmQsXG4gIGRlcml2ZVNhZmVXYWxsZXRLZXlzLFxufSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvYml0Z28vc2FmZS9yZWNvdmVyeSc7XG5pbXBvcnQgeyBCaXRHb0Jhc2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvYml0Z28vYml0Z29CYXNlJztcblxuY29uc3QgUEFTU1dPUkQgPSAnc2FmZS1wYXNzd29yZCc7XG5cbmZ1bmN0aW9uIG1ha2VNb2NrQml0R28oZGVjcnlwdEltcGw6IChwYXJhbXM6IHsgcGFzc3dvcmQ6IHN0cmluZzsgaW5wdXQ6IHN0cmluZyB9KSA9PiBzdHJpbmcpOiBCaXRHb0Jhc2Uge1xuICByZXR1cm4ge1xuICAgIGRlY3J5cHQ6IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoYXN5bmMgKHBhcmFtczogeyBwYXNzd29yZDogc3RyaW5nOyBpbnB1dDogc3RyaW5nIH0pID0+IGRlY3J5cHRJbXBsKHBhcmFtcykpLFxuICB9IGFzIHVua25vd24gYXMgQml0R29CYXNlO1xufVxuXG4vKiogQSBmYWtlIGRlY3J5cHQgdGhhdCBvbmx5IHJlY29nbml6ZXMgdGhlIHVzZXIvYmFja3VwIHRva2VuczsgYW55IG90aGVyIGlucHV0IChlLmcuIGEgQm94IEMgcHVibGljKSB0aHJvd3MuICovXG5mdW5jdGlvbiBtYWtlRGVjcnlwdE1hcChlbnRyaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogKHBhcmFtczogeyBwYXNzd29yZDogc3RyaW5nOyBpbnB1dDogc3RyaW5nIH0pID0+IHN0cmluZyB7XG4gIHJldHVybiAoeyBwYXNzd29yZCwgaW5wdXQgfSkgPT4ge1xuICAgIHBhc3N3b3JkLnNob3VsZC5lcXVhbChQQVNTV09SRCk7XG4gICAgaWYgKCEoaW5wdXQgaW4gZW50cmllcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCBkZWNyeXB0IGlucHV0OiAke2lucHV0fWApO1xuICAgIH1cbiAgICByZXR1cm4gZW50cmllc1tpbnB1dF07XG4gIH07XG59XG5cbmZ1bmN0aW9uIGJveCh2YWx1ZXM6IHtcbiAgc2VjcDI1NmsxTXVsdGlzaWc6IHN0cmluZztcbiAgZWQyNTUxOU11bHRpc2lnOiBzdHJpbmc7XG4gIGVjZHNhTXBjOiBzdHJpbmc7XG4gIGVkZHNhTXBjOiBzdHJpbmc7XG59KTogc3RyaW5nIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlcyk7XG59XG5cbmRlc2NyaWJlKCdkZWNyeXB0U2FmZUtleWNhcmQnLCAoKSA9PiB7XG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnZGVjcnlwdHMgb25jaGFpbiByb290cyB0byBzdHJpbmdzIGFuZCByZXR1cm5zIEJveCBDIHZlcmJhdGltJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHVzZXJCb3ggPSBib3goe1xuICAgICAgc2VjcDI1NmsxTXVsdGlzaWc6ICdlbmMtdXNlci1zZWNwJyxcbiAgICAgIGVkMjU1MTlNdWx0aXNpZzogJ2VuYy11c2VyLWVkMjU1MTknLFxuICAgICAgZWNkc2FNcGM6ICdlbmMtdXNlci1lY2RzYScsXG4gICAgICBlZGRzYU1wYzogJ2VuYy11c2VyLWVkZHNhJyxcbiAgICB9KTtcbiAgICBjb25zdCBiYWNrdXBCb3ggPSBib3goe1xuICAgICAgc2VjcDI1NmsxTXVsdGlzaWc6ICdlbmMtYmFja3VwLXNlY3AnLFxuICAgICAgZWQyNTUxOU11bHRpc2lnOiAnZW5jLWJhY2t1cC1lZDI1NTE5JyxcbiAgICAgIGVjZHNhTXBjOiAnZW5jLWJhY2t1cC1lY2RzYScsXG4gICAgICBlZGRzYU1wYzogJ2VuYy1iYWNrdXAtZWRkc2EnLFxuICAgIH0pO1xuICAgIGNvbnN0IGJpdGdvQm94ID0gYm94KHtcbiAgICAgIHNlY3AyNTZrMU11bHRpc2lnOiAneHB1Yi1zZWNwLWJpdGdvJyxcbiAgICAgIGVkMjU1MTlNdWx0aXNpZzogJ3B1Yi1lZDI1NTE5LWJpdGdvJyxcbiAgICAgIGVjZHNhTXBjOiAnY29tbW9uLWVjZHNhLWJpdGdvJyxcbiAgICAgIGVkZHNhTXBjOiAnY29tbW9uLWVkZHNhLWJpdGdvJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IG1wY1VzZXIgPSBidWlsZFNhZmVNcGNLZXlFbnZlbG9wZXMoXG4gICAgICBCdWZmZXIuZnJvbSgndXNlci1zaWduaW5nJyksXG4gICAgICBCdWZmZXIuZnJvbSgndXNlci1yZWR1Y2VkJyksXG4gICAgICBCdWZmZXIuZnJvbSgndXNlci12cmYnKVxuICAgICk7XG4gICAgY29uc3QgbXBjQmFja3VwID0gYnVpbGRTYWZlTXBjS2V5RW52ZWxvcGVzKFxuICAgICAgQnVmZmVyLmZyb20oJ2JhY2t1cC1zaWduaW5nJyksXG4gICAgICBCdWZmZXIuZnJvbSgnYmFja3VwLXJlZHVjZWQnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKCdiYWNrdXAtdnJmJylcbiAgICApO1xuXG4gICAgY29uc3QgYml0Z28gPSBtYWtlTW9ja0JpdEdvKFxuICAgICAgbWFrZURlY3J5cHRNYXAoe1xuICAgICAgICAnZW5jLXVzZXItc2VjcCc6ICd4cHJ2LXVzZXInLFxuICAgICAgICAnZW5jLWJhY2t1cC1zZWNwJzogJ3hwcnYtYmFja3VwJyxcbiAgICAgICAgJ2VuYy11c2VyLWVkMjU1MTknOiAnUy11c2VyLXNlZWQnLFxuICAgICAgICAnZW5jLWJhY2t1cC1lZDI1NTE5JzogJ1MtYmFja3VwLXNlZWQnLFxuICAgICAgICAnZW5jLXVzZXItZWNkc2EnOiBtcGNVc2VyLnJlZHVjZWRFbnZlbG9wZS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgICdlbmMtYmFja3VwLWVjZHNhJzogbXBjQmFja3VwLnJlZHVjZWRFbnZlbG9wZS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgICdlbmMtdXNlci1lZGRzYSc6IG1wY1VzZXIucmVkdWNlZEVudmVsb3BlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgJ2VuYy1iYWNrdXAtZWRkc2EnOiBtcGNCYWNrdXAucmVkdWNlZEVudmVsb3BlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRlY3J5cHRTYWZlS2V5Y2FyZCh7XG4gICAgICBiaXRnbyxcbiAgICAgIHVzZXJLZXlCb3g6IHVzZXJCb3gsXG4gICAgICBiYWNrdXBLZXlCb3g6IGJhY2t1cEJveCxcbiAgICAgIGJpdGdvS2V5Qm94OiBiaXRnb0JveCxcbiAgICAgIHBhc3N3b3JkOiBQQVNTV09SRCxcbiAgICB9KTtcblxuICAgIHJlc3VsdC5zZWNwMjU2azFNdWx0aXNpZy51c2VyLnNob3VsZC5lcXVhbCgneHBydi11c2VyJyk7XG4gICAgcmVzdWx0LnNlY3AyNTZrMU11bHRpc2lnLmJhY2t1cC5zaG91bGQuZXF1YWwoJ3hwcnYtYmFja3VwJyk7XG4gICAgcmVzdWx0LnNlY3AyNTZrMU11bHRpc2lnLmJpdGdvLnNob3VsZC5lcXVhbCgneHB1Yi1zZWNwLWJpdGdvJyk7XG5cbiAgICByZXN1bHQuZWQyNTUxOU11bHRpc2lnLnVzZXIuc2hvdWxkLmVxdWFsKCdTLXVzZXItc2VlZCcpO1xuICAgIHJlc3VsdC5lZDI1NTE5TXVsdGlzaWcuYmFja3VwLnNob3VsZC5lcXVhbCgnUy1iYWNrdXAtc2VlZCcpO1xuICAgIHJlc3VsdC5lZDI1NTE5TXVsdGlzaWcuYml0Z28uc2hvdWxkLmVxdWFsKCdwdWItZWQyNTUxOS1iaXRnbycpO1xuXG4gICAgcmVzdWx0LmVjZHNhTXBjLnVzZXIuc2lnbmluZy50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKEJ1ZmZlci5mcm9tKCd1c2VyLXJlZHVjZWQnKS50b1N0cmluZygnaGV4JykpO1xuICAgIHJlc3VsdC5lY2RzYU1wYy51c2VyLnZyZi50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKEJ1ZmZlci5mcm9tKCd1c2VyLXZyZicpLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgcmVzdWx0LmVjZHNhTXBjLmJhY2t1cC5zaWduaW5nLnRvU3RyaW5nKCdoZXgnKS5zaG91bGQuZXF1YWwoQnVmZmVyLmZyb20oJ2JhY2t1cC1yZWR1Y2VkJykudG9TdHJpbmcoJ2hleCcpKTtcbiAgICByZXN1bHQuZWNkc2FNcGMuYmFja3VwLnZyZi50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKEJ1ZmZlci5mcm9tKCdiYWNrdXAtdnJmJykudG9TdHJpbmcoJ2hleCcpKTtcbiAgICByZXN1bHQuZWNkc2FNcGMuYml0Z28uc2hvdWxkLmVxdWFsKCdjb21tb24tZWNkc2EtYml0Z28nKTtcblxuICAgIHJlc3VsdC5lZGRzYU1wYy5iaXRnby5zaG91bGQuZXF1YWwoJ2NvbW1vbi1lZGRzYS1iaXRnbycpO1xuXG4gICAgLy8gNCBzbG90cyDDlyAodXNlciArIGJhY2t1cCkgPSA4IGRlY3J5cHRzOyBCaXRHbyAoQm94IEMpIGlzIG5ldmVyIGRlY3J5cHRlZC5cbiAgICAoYml0Z28uZGVjcnlwdCBhcyBzaW5vbi5TaW5vblN0dWIpLmNhbGxDb3VudC5zaG91bGQuZXF1YWwoOCk7XG4gIH0pO1xuXG4gIGl0KCd0aHJvd3MgSW5jb3JyZWN0UGFzc3dvcmRFcnJvciB3aGVuIGRlY3J5cHRpb24gZmFpbHMgKHdyb25nIHBhc3N3b3JkKScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB1c2VyQm94ID0gYm94KHtcbiAgICAgIHNlY3AyNTZrMU11bHRpc2lnOiAnZW5jLXVzZXItc2VjcCcsXG4gICAgICBlZDI1NTE5TXVsdGlzaWc6ICdlbmMtdXNlci1lZDI1NTE5JyxcbiAgICAgIGVjZHNhTXBjOiAnZW5jLXVzZXItZWNkc2EnLFxuICAgICAgZWRkc2FNcGM6ICdlbmMtdXNlci1lZGRzYScsXG4gICAgfSk7XG4gICAgY29uc3QgYml0Z28gPSBtYWtlTW9ja0JpdEdvKCgpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYXJnb24yOiB0YWcgZG9lcyBub3QgbWF0Y2gnKTtcbiAgICB9KTtcblxuICAgIGF3YWl0IGRlY3J5cHRTYWZlS2V5Y2FyZCh7XG4gICAgICBiaXRnbyxcbiAgICAgIHVzZXJLZXlCb3g6IHVzZXJCb3gsXG4gICAgICBiYWNrdXBLZXlCb3g6IHVzZXJCb3gsXG4gICAgICBiaXRnb0tleUJveDogdXNlckJveCxcbiAgICAgIHBhc3N3b3JkOiAnd3JvbmctcGFzc3dvcmQnLFxuICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoSW5jb3JyZWN0UGFzc3dvcmRFcnJvcik7XG4gIH0pO1xufSk7XG5cbmNvbnN0IE1QQ19ST09UID0geyBzaWduaW5nOiBCdWZmZXIuYWxsb2MoMCksIHZyZjogQnVmZmVyLmFsbG9jKDApIH07XG5cbmZ1bmN0aW9uIG1ha2VSb290cyhzZWNwOiB7IHVzZXI6IHN0cmluZzsgYmFja3VwOiBzdHJpbmc7IGJpdGdvOiBzdHJpbmcgfSk6IERlY3J5cHRlZFNhZmVSb290cyB7XG4gIHJldHVybiB7XG4gICAgc2VjcDI1NmsxTXVsdGlzaWc6IHNlY3AsXG4gICAgZWQyNTUxOU11bHRpc2lnOiB7IHVzZXI6ICd1JywgYmFja3VwOiAnYicsIGJpdGdvOiAnZycgfSxcbiAgICBlY2RzYU1wYzogeyB1c2VyOiBNUENfUk9PVCwgYmFja3VwOiBNUENfUk9PVCwgYml0Z286ICdnJyB9LFxuICAgIGVkZHNhTXBjOiB7IHVzZXI6IE1QQ19ST09ULCBiYWNrdXA6IE1QQ19ST09ULCBiaXRnbzogJ2cnIH0sXG4gIH07XG59XG5cbmRlc2NyaWJlKCdkZXJpdmVTYWZlV2FsbGV0S2V5cycsICgpID0+IHtcbiAgY29uc3QgdXNlclJvb3QgPSBiaXAzMi5mcm9tU2VlZChCdWZmZXIuZnJvbSgnMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYnLCAnaGV4JykpO1xuICBjb25zdCBiYWNrdXBSb290ID0gYmlwMzIuZnJvbVNlZWQoXG4gICAgQnVmZmVyLmZyb20oJzFmMWUxZDFjMWIxYTE5MTgxNzE2MTUxNDEzMTIxMTEwMGYwZTBkMGMwYjBhMDkwODA3MDYwNTA0MDMwMjAxMDAnLCAnaGV4JylcbiAgKTtcbiAgY29uc3QgYml0Z29Sb290ID0gYmlwMzJcbiAgICAuZnJvbVNlZWQoQnVmZmVyLmZyb20oJzJmMmUyZDJjMmIyYTI5MjgyNzI2MjUyNDIzMjIyMTIwMWYxZTFkMWMxYjFhMTkxODE3MTYxNTE0MTMxMjExMTAnLCAnaGV4JykpXG4gICAgLm5ldXRlcmVkKCk7XG5cbiAgY29uc3Qgcm9vdHMgPSBtYWtlUm9vdHMoe1xuICAgIHVzZXI6IHVzZXJSb290LnRvQmFzZTU4KCksXG4gICAgYmFja3VwOiBiYWNrdXBSb290LnRvQmFzZTU4KCksXG4gICAgYml0Z286IGJpdGdvUm9vdC50b0Jhc2U1OCgpLFxuICB9KTtcblxuICBpdCgnZGVyaXZlcyB0aGUgQklQNDQgY2hpbGQgdHJpcGxldCBmb3Igc2xvdCAxJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRlcml2ZVNhZmVXYWxsZXRLZXlzKHsgY29pbjogJ2J0YycsIHNsb3Q6ICdzZWNwMjU2azFNdWx0aXNpZycsIGFjY291bnQ6IDAsIHJvb3RzIH0pO1xuICAgIGlmIChyZXN1bHQuc2xvdCAhPT0gJ3NlY3AyNTZrMU11bHRpc2lnJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBzZWNwMjU2azFNdWx0aXNpZyBzbG90Jyk7XG4gICAgfVxuXG4gICAgcmVzdWx0LnBhdGguc2hvdWxkLmVxdWFsKFwibS80NCcvMCcvMScvMCdcIik7XG4gICAgcmVzdWx0LmtleXMudXNlci5wcnYuc2hvdWxkLmVxdWFsKHVzZXJSb290LmRlcml2ZVBhdGgoXCJtLzQ0Jy8wJy8xJy8wJ1wiKS50b0Jhc2U1OCgpKTtcbiAgICByZXN1bHQua2V5cy51c2VyLnB1Yi5zaG91bGQuZXF1YWwodXNlclJvb3QuZGVyaXZlUGF0aChcIm0vNDQnLzAnLzEnLzAnXCIpLm5ldXRlcmVkKCkudG9CYXNlNTgoKSk7XG4gICAgcmVzdWx0LmtleXMuYmFja3VwLnBydi5zaG91bGQuZXF1YWwoYmFja3VwUm9vdC5kZXJpdmVQYXRoKCdtLzQ0LzAvMS8wJykudG9CYXNlNTgoKSk7XG4gICAgcmVzdWx0LmtleXMuYml0Z28ucHViLnNob3VsZC5lcXVhbChiaXRnb1Jvb3QuZGVyaXZlUGF0aCgnbS80NC8wLzEvMCcpLnRvQmFzZTU4KCkpO1xuICB9KTtcblxuICBpdCgndmFyaWVzIHRoZSBwYXRoIHdpdGggdGhlIGFjY291bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGVyaXZlU2FmZVdhbGxldEtleXMoeyBjb2luOiAnYnRjJywgc2xvdDogJ3NlY3AyNTZrMU11bHRpc2lnJywgYWNjb3VudDogMiwgcm9vdHMgfSk7XG4gICAgcmVzdWx0LnBhdGguc2hvdWxkLmVxdWFsKFwibS80NCcvMCcvMScvMidcIik7XG4gIH0pO1xuXG4gIGl0KCdkZXJpdmVzIHRoZSBlY2RzYU1wYyBjaGlsZCB2aWEgdGhlIERLTHMgY2VyZW1vbnknLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgW3VzZXJEa2csIGJhY2t1cERrZ10gPSBhd2FpdCBEa2xzVXRpbHMuZ2VuZXJhdGVES0dLZXlTaGFyZXMoKTtcbiAgICBjb25zdCBbdnJmVXNlciwgdnJmQmFja3VwXSA9IGF3YWl0IERrbHNWcmZVdGlscy5nZW5lcmF0ZVZyZkRLR0tleVNoYXJlcygpO1xuXG4gICAgY29uc3QgbXBjUm9vdHM6IERlY3J5cHRlZFNhZmVSb290cyA9IHtcbiAgICAgIC4uLnJvb3RzLFxuICAgICAgZWNkc2FNcGM6IHtcbiAgICAgICAgdXNlcjogeyBzaWduaW5nOiB1c2VyRGtnLmdldFJlZHVjZWRLZXlTaGFyZSgpLCB2cmY6IHZyZlVzZXIuZ2V0S2V5U2hhcmUoKSB9LFxuICAgICAgICBiYWNrdXA6IHsgc2lnbmluZzogYmFja3VwRGtnLmdldFJlZHVjZWRLZXlTaGFyZSgpLCB2cmY6IHZyZkJhY2t1cC5nZXRLZXlTaGFyZSgpIH0sXG4gICAgICAgIGJpdGdvOiAnZycsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkZXJpdmVTYWZlV2FsbGV0S2V5cyh7IGNvaW46ICdldGgnLCBzbG90OiAnZWNkc2FNcGMnLCBhY2NvdW50OiAwLCByb290czogbXBjUm9vdHMgfSk7XG4gICAgaWYgKHJlc3VsdC5zbG90ICE9PSAnZWNkc2FNcGMnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIGVjZHNhTXBjIHNsb3QnKTtcbiAgICB9XG5cbiAgICByZXN1bHQucGF0aC5zaG91bGQuZXF1YWwoXCJtLzQ0Jy82MCcvMycvMCdcIik7XG4gICAgcmVzdWx0LmtleXMuY29tbW9uS2V5Y2hhaW4uc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgcmVzdWx0LmtleXMudXNlci5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICByZXN1bHQua2V5cy5iYWNrdXAuc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIHVuc3VwcG9ydGVkIHNsb3RzJywgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGRlcml2ZVNhZmVXYWxsZXRLZXlzKHsgY29pbjogJ2J0YycsIHNsb3Q6ICdlZGRzYU1wYycsIGFjY291bnQ6IDAsIHJvb3RzIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAvbm90IHN1cHBvcnRlZCB5ZXQvXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgYSBub24taW50ZWdlciBhY2NvdW50JywgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGRlcml2ZVNhZmVXYWxsZXRLZXlzKHsgY29pbjogJ2J0YycsIHNsb3Q6ICdzZWNwMjU2azFNdWx0aXNpZycsIGFjY291bnQ6IDEuNSwgcm9vdHMgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcbiAgICAgIC9pbnZhbGlkIGFjY291bnQvXG4gICAgKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2J1aWxkU2FmZVJlY292ZXJLZXlQYXJhbXMnLCAoKSA9PiB7XG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBjb25zdCB1c2VyUm9vdCA9IGJpcDMyLmZyb21TZWVkKEJ1ZmZlci5mcm9tKCcwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZicsICdoZXgnKSk7XG4gIGNvbnN0IGJhY2t1cFJvb3QgPSBiaXAzMi5mcm9tU2VlZChcbiAgICBCdWZmZXIuZnJvbSgnMWYxZTFkMWMxYjFhMTkxODE3MTYxNTE0MTMxMjExMTAwZjBlMGQwYzBiMGEwOTA4MDcwNjA1MDQwMzAyMDEwMCcsICdoZXgnKVxuICApO1xuICBjb25zdCBiaXRnb1Jvb3QgPSBiaXAzMlxuICAgIC5mcm9tU2VlZChCdWZmZXIuZnJvbSgnMmYyZTJkMmMyYjJhMjkyODI3MjYyNTI0MjMyMjIxMjAxZjFlMWQxYzFiMWExOTE4MTcxNjE1MTQxMzEyMTExMCcsICdoZXgnKSlcbiAgICAubmV1dGVyZWQoKTtcblxuICBjb25zdCBrZXlzID0ge1xuICAgIHVzZXI6IHsgcHJ2OiB1c2VyUm9vdC50b0Jhc2U1OCgpLCBwdWI6IHVzZXJSb290Lm5ldXRlcmVkKCkudG9CYXNlNTgoKSB9LFxuICAgIGJhY2t1cDogeyBwcnY6IGJhY2t1cFJvb3QudG9CYXNlNTgoKSwgcHViOiBiYWNrdXBSb290Lm5ldXRlcmVkKCkudG9CYXNlNTgoKSB9LFxuICAgIGJpdGdvOiB7IHB1YjogYml0Z29Sb290LnRvQmFzZTU4KCkgfSxcbiAgfTtcblxuICBpdCgnc2lnbmVkIG1vZGUgcmUtZW5jcnlwdHMgY2hpbGQgeHBydnMgdW5kZXIgYSBzaW5nbGUgZXBoZW1lcmFsIHBhc3NwaHJhc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcGFzc3BocmFzZXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgZW5jcnlwdCA9IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoYXN5bmMgKHsgaW5wdXQsIHBhc3N3b3JkLCBlbmNyeXB0aW9uVmVyc2lvbiB9KSA9PiB7XG4gICAgICBwYXNzcGhyYXNlcy5wdXNoKHBhc3N3b3JkKTtcbiAgICAgIGVuY3J5cHRpb25WZXJzaW9uLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIHJldHVybiBgZW5jKCR7aW5wdXR9KWA7XG4gICAgfSk7XG4gICAgY29uc3QgYml0Z28gPSB7IGVuY3J5cHQgfSBhcyB1bmtub3duIGFzIEJpdEdvQmFzZTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJ1aWxkU2FmZVJlY292ZXJLZXlQYXJhbXMoe1xuICAgICAgYml0Z28sXG4gICAgICBjb2luOiAnYnRjJyxcbiAgICAgIHNsb3Q6ICdzZWNwMjU2azFNdWx0aXNpZycsXG4gICAgICBrZXlzLFxuICAgICAgbW9kZTogJ3NpZ25lZCcsXG4gICAgfSk7XG5cbiAgICByZXN1bHQudXNlcktleS5zaG91bGQuZXF1YWwoYGVuYygke2tleXMudXNlci5wcnZ9KWApO1xuICAgIHJlc3VsdC5iYWNrdXBLZXkuc2hvdWxkLmVxdWFsKGBlbmMoJHtrZXlzLmJhY2t1cC5wcnZ9KWApO1xuICAgIHJlc3VsdC5iaXRnb0tleS5zaG91bGQuZXF1YWwoa2V5cy5iaXRnby5wdWIpO1xuICAgIChyZXN1bHQud2FsbGV0UGFzc3BocmFzZSBhcyBzdHJpbmcpLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgIHBhc3NwaHJhc2VzLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICBwYXNzcGhyYXNlc1swXS5zaG91bGQuZXF1YWwocGFzc3BocmFzZXNbMV0pO1xuICAgIHBhc3NwaHJhc2VzWzBdLnNob3VsZC5lcXVhbChyZXN1bHQud2FsbGV0UGFzc3BocmFzZSk7XG4gICAgZW5jcnlwdC5jYWxsQ291bnQuc2hvdWxkLmVxdWFsKDIpO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyBub24tcHJpdmF0ZSBjaGlsZCBrZXlzIGluIHNpZ25lZCBtb2RlJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJpdGdvID0geyBlbmNyeXB0OiBzaW5vbi5zdHViKCkgfSBhcyB1bmtub3duIGFzIEJpdEdvQmFzZTtcbiAgICBhd2FpdCBidWlsZFNhZmVSZWNvdmVyS2V5UGFyYW1zKHtcbiAgICAgIGJpdGdvLFxuICAgICAgY29pbjogJ2J0YycsXG4gICAgICBzbG90OiAnc2VjcDI1NmsxTXVsdGlzaWcnLFxuICAgICAga2V5czogeyB1c2VyOiB7IHBydjoga2V5cy51c2VyLnB1YiwgcHViOiBrZXlzLnVzZXIucHViIH0sIGJhY2t1cDoga2V5cy5iYWNrdXAsIGJpdGdvOiBrZXlzLmJpdGdvIH0sXG4gICAgICBtb2RlOiAnc2lnbmVkJyxcbiAgICB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9tdXN0IGJlIHByaXZhdGUgeHBydnMvKTtcbiAgfSk7XG5cbiAgaXQoJ3Vuc2lnbmVkIG1vZGUgcmV0dXJucyBwdWJzIGFuZCBuZXZlciBlbmNyeXB0cycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbmNyeXB0ID0gc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAoKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2VuY3J5cHQgc2hvdWxkIG5vdCBiZSBjYWxsZWQnKTtcbiAgICB9KTtcbiAgICBjb25zdCBiaXRnbyA9IHsgZW5jcnlwdCB9IGFzIHVua25vd24gYXMgQml0R29CYXNlO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYnVpbGRTYWZlUmVjb3ZlcktleVBhcmFtcyh7XG4gICAgICBiaXRnbyxcbiAgICAgIGNvaW46ICdidGMnLFxuICAgICAgc2xvdDogJ3NlY3AyNTZrMU11bHRpc2lnJyxcbiAgICAgIGtleXMsXG4gICAgICBtb2RlOiAndW5zaWduZWQnLFxuICAgIH0pO1xuXG4gICAgcmVzdWx0LnVzZXJLZXkuc2hvdWxkLmVxdWFsKGtleXMudXNlci5wdWIpO1xuICAgIHJlc3VsdC5iYWNrdXBLZXkuc2hvdWxkLmVxdWFsKGtleXMuYmFja3VwLnB1Yik7XG4gICAgcmVzdWx0LmJpdGdvS2V5LnNob3VsZC5lcXVhbChrZXlzLmJpdGdvLnB1Yik7XG4gICAgcmVzdWx0LnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnd2FsbGV0UGFzc3BocmFzZScpO1xuICAgIGVuY3J5cHQuY2FsbENvdW50LnNob3VsZC5lcXVhbCgwKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgdW5zdXBwb3J0ZWQgc2xvdHMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYml0Z28gPSB7IGVuY3J5cHQ6IHNpbm9uLnN0dWIoKSB9IGFzIHVua25vd24gYXMgQml0R29CYXNlO1xuICAgIGF3YWl0IGJ1aWxkU2FmZVJlY292ZXJLZXlQYXJhbXMoe1xuICAgICAgYml0Z28sXG4gICAgICBjb2luOiAnYnRjJyxcbiAgICAgIHNsb3Q6ICdlZGRzYU1wYycsXG4gICAgICBrZXlzLFxuICAgICAgbW9kZTogJ3NpZ25lZCcsXG4gICAgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbm90IHN1cHBvcnRlZCB5ZXQvKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ1NhZmUgZWNkc2FNcGMgZGVyaXZlIOKGkiBzaWduIChnYXRlKScsIGZ1bmN0aW9uICgpIHtcbiAgaXQoJ2Rlcml2ZXMgYSBjaGlsZCwgcmVidWlsZHMgMi1vZi0yIHNoYXJlcywgYW5kIHNpZ25zIGEgbWVzc2FnZSB2ZXJpZmllZCBhdCBtLzAnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgW3VzZXJEa2csIGJhY2t1cERrZ10gPSBhd2FpdCBEa2xzVXRpbHMuZ2VuZXJhdGVES0dLZXlTaGFyZXMoKTtcbiAgICBjb25zdCBbdnJmVXNlciwgdnJmQmFja3VwXSA9IGF3YWl0IERrbHNWcmZVdGlscy5nZW5lcmF0ZVZyZkRLR0tleVNoYXJlcygpO1xuXG4gICAgY29uc3Qgcm9vdENvbW1vbktleWNoYWluID0gRGtsc1R5cGVzLmdldENvbW1vbktleWNoYWluKHVzZXJEa2cuZ2V0S2V5U2hhcmUoKSk7XG5cbiAgICBjb25zdCB7IGNvbW1vbktleWNoYWluLCB1c2VyQ2hpbGQsIGJhY2t1cENoaWxkIH0gPSBhd2FpdCBEa2xzVnJmVXRpbHMuZGVyaXZlU2FmZUVjZHNhTXBjQ2hpbGQoe1xuICAgICAgdXNlclJvb3Q6IHsgc2lnbmluZzogdXNlckRrZy5nZXRSZWR1Y2VkS2V5U2hhcmUoKSwgdnJmOiB2cmZVc2VyLmdldEtleVNoYXJlKCkgfSxcbiAgICAgIGJhY2t1cFJvb3Q6IHsgc2lnbmluZzogYmFja3VwRGtnLmdldFJlZHVjZWRLZXlTaGFyZSgpLCB2cmY6IHZyZkJhY2t1cC5nZXRLZXlTaGFyZSgpIH0sXG4gICAgICBhY2NvdW50OiAwLFxuICAgICAgY29pblR5cGU6IDYwLFxuICAgIH0pO1xuXG4gICAgLy8gVGhlIGRlcml2ZWQgY2hpbGQgbXVzdCBuZXZlciBiZSB0aGUgcm9vdCAodGhlIFwicm9vdCBlbnZlbG9wZSBpbiB0aGUgY2hpbGQgcG9zaXRpb25cIiBmb290Z3VuKS5cbiAgICBjb21tb25LZXljaGFpbi5zaG91bGQubm90LmVxdWFsKHJvb3RDb21tb25LZXljaGFpbik7XG5cbiAgICAvLyBSZWJ1aWxkIDItb2YtMiBrZXlzaGFyZXMgZnJvbSB0aGUgZGVyaXZlZCByZWR1Y2VkIENCT1IsIGV4YWN0bHkgYXMgdGhlIHNpZ25lcidzIHJldHJvZml0IGRvZXMuXG4gICAgY29uc3QgdG9SZXRyb2ZpdCA9IChiNjQ6IHN0cmluZyk6IERrbHNUeXBlcy5SZXRyb2ZpdERhdGEgPT4ge1xuICAgICAgY29uc3QgcmVkdWNlZCA9IERrbHNUeXBlcy5nZXREZWNvZGVkUmVkdWNlZEtleVNoYXJlKEJ1ZmZlci5mcm9tKGI2NCwgJ2Jhc2U2NCcpKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHhTaGFyZToge1xuICAgICAgICAgIHg6IEJ1ZmZlci5mcm9tKHJlZHVjZWQucHJ2KS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgeTogQnVmZmVyLmZyb20ocmVkdWNlZC5wdWIpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICBjaGFpbmNvZGU6IEJ1ZmZlci5mcm9tKHJlZHVjZWQucm9vdENoYWluQ29kZSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB9LFxuICAgICAgICB4aUxpc3Q6IHJlZHVjZWQueExpc3Quc2xpY2UoMCwgMiksXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgW3VzZXIyb2YyLCBiYWNrdXAyb2YyXSA9IGF3YWl0IERrbHNVdGlscy5nZW5lcmF0ZTJvZjJLZXlTaGFyZXMoXG4gICAgICB0b1JldHJvZml0KHVzZXJDaGlsZCksXG4gICAgICB0b1JldHJvZml0KGJhY2t1cENoaWxkKVxuICAgICk7XG5cbiAgICBjb25zdCBtZXNzYWdlSGFzaCA9IEJ1ZmZlci5mcm9tKCcwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmJywgJ2hleCcpO1xuICAgIGNvbnN0IHVzZXJEc2cgPSBuZXcgRGtsc0RzZy5Ec2codXNlcjJvZjIuZ2V0S2V5U2hhcmUoKSwgMCwgJ20vMCcsIG1lc3NhZ2VIYXNoKTtcbiAgICBjb25zdCBiYWNrdXBEc2cgPSBuZXcgRGtsc0RzZy5Ec2coYmFja3VwMm9mMi5nZXRLZXlTaGFyZSgpLCAxLCAnbS8wJywgbWVzc2FnZUhhc2gpO1xuICAgIGNvbnN0IHNpZ25hdHVyZVN0cmluZyA9IERrbHNVdGlscy52ZXJpZnlBbmRDb252ZXJ0RGtsc1NpZ25hdHVyZShcbiAgICAgIG1lc3NhZ2VIYXNoLFxuICAgICAgKGF3YWl0IERrbHNVdGlscy5leGVjdXRlVGlsbFJvdW5kKDUsIHVzZXJEc2csIGJhY2t1cERzZykpIGFzIERrbHNUeXBlcy5EZXNlcmlhbGl6ZWREa2xzU2lnbmF0dXJlLFxuICAgICAgY29tbW9uS2V5Y2hhaW4sXG4gICAgICAnbS8wJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGZhbHNlXG4gICAgKTtcblxuICAgIC8vIHZlcmlmeUFuZENvbnZlcnREa2xzU2lnbmF0dXJlIHJlY292ZXJzIHRoZSBwdWJrZXkgZnJvbSB0aGUgc2lnbmF0dXJlIGFuZCBjaGVja3MgaXQgYWdhaW5zdFxuICAgIC8vIGRlcml2ZVVuaGFyZGVuZWQoY2hpbGRDSywgJ20vMCcpOyBpdCB0aHJvd3Mgb24gbWlzbWF0Y2gsIHNvIGEgcmV0dXJuZWQgc3RyaW5nIGlzIHByb29mLlxuICAgIHNpZ25hdHVyZVN0cmluZy5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICBzaWduYXR1cmVTdHJpbmcuc2hvdWxkLm1hdGNoKC9eXFxkKzpbMC05YS1mXSs6WzAtOWEtZl0rOlswLTlhLWZdKyQvKTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
471
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3ZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vc2FmZS9yZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixrQkFBZ0I7QUFDaEIsNkNBQStCO0FBQy9CLDhDQUF3QztBQUN4QyxtREFBZ0Q7QUFDaEQsa0RBQW9DO0FBQ3BDLG9EQUFrSDtBQUNsSCx1RkFBNEY7QUFDNUYseURBQXNFO0FBQ3RFLGtFQUs2QztBQUM3Qyx5Q0FLeUI7QUFFekIsaUVBQWtGO0FBQ2xGLGlGQUE0RjtBQUU1RixNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUM7QUFFakMsU0FBUyxhQUFhLENBQUMsV0FBb0U7SUFDekYsT0FBTztRQUNMLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUEyQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDcEYsQ0FBQztBQUM1QixDQUFDO0FBRUQsZ0hBQWdIO0FBQ2hILFNBQVMsY0FBYyxDQUFDLE9BQStCO0lBQ3JELE9BQU8sQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1FBQzdCLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLEdBQUcsQ0FBQyxNQUtaO0lBQ0MsT0FBTyxJQUFJLENBQUMs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TyxFQUFFLFNBQVMsQ0FBQyxDQUF3QyxFQUNoRyxjQUFjLEVBQ2QsS0FBSyxFQUNMLFNBQVMsRUFDVCxLQUFLLENBQ04sQ0FBQztRQUVGLDZGQUE2RjtRQUM3RiwwRkFBMEY7UUFDMUYsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3JDLGVBQWUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7SUFDdEUsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAnc2hvdWxkJztcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCB7IGJpcDMyIH0gZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IGVkMjU1MTkgfSBmcm9tICdAbm9ibGUvY3VydmVzL2VkMjU1MTknO1xuaW1wb3J0ICogYXMgc2pjbCBmcm9tICdAYml0Z28vc2pjbCc7XG5pbXBvcnQgeyBEa2xzRHNnLCBEa2xzVHlwZXMsIERrbHNVdGlscywgRGtsc1ZyZlV0aWxzLCBNUFNVdGlsLCBNcHNEZXJpdmUsIE1wc1ZyZlV0aWxzIH0gZnJvbSAnQGJpdGdvL3Nkay1saWItbXBjJztcbmltcG9ydCB7IGJ1aWxkU2FmZU1wY0tleUVudmVsb3BlcyB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby91dGlscy90c3Mva2V5U2hhcmVFbnZlbG9wZSc7XG5pbXBvcnQgeyBJbmNvcnJlY3RQYXNzd29yZEVycm9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL2JpdGdvL2Vycm9ycyc7XG5pbXBvcnQge1xuICBEZWNyeXB0ZWRTYWZlUm9vdHMsXG4gIGJ1aWxkU2FmZVJlY292ZXJLZXlQYXJhbXMsXG4gIGRlY3J5cHRTYWZlS2V5Y2FyZCxcbiAgZGVyaXZlU2FmZVdhbGxldEtleXMsXG59IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby9zYWZlL3JlY292ZXJ5JztcbmltcG9ydCB7XG4gIGRlY29kZUVkMjU1MTlTdHJLZXlTZWNyZXRTZWVkLFxuICBlbmNvZGVEZXJpdmFibGVFZDI1NTE5UHViLFxuICBlbmNvZGVFZDI1NTE5Q2hhaW5Db2RlLFxuICBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5QXRQYXRoLFxufSBmcm9tICcuLi8uLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL2JpdGdvL2JpdGdvQmFzZSc7XG5pbXBvcnQgeyBnZXRJbml0aWFsaXplZE1wY0luc3RhbmNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3Rzcy9lZGRzYS9lZGRzYSc7XG5pbXBvcnQgeyBzaWduRWRkc2FNcGNWMlJlY292ZXJ5VHggfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvdHNzL2VkZHNhL2VkZHNhTVBDdjInO1xuXG5jb25zdCBQQVNTV09SRCA9ICdzYWZlLXBhc3N3b3JkJztcblxuZnVuY3Rpb24gbWFrZU1vY2tCaXRHbyhkZWNyeXB0SW1wbDogKHBhcmFtczogeyBwYXNzd29yZDogc3RyaW5nOyBpbnB1dDogc3RyaW5nIH0pID0+IHN0cmluZyk6IEJpdEdvQmFzZSB7XG4gIHJldHVybiB7XG4gICAgZGVjcnlwdDogc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAocGFyYW1zOiB7IHBhc3N3b3JkOiBzdHJpbmc7IGlucHV0OiBzdHJpbmcgfSkgPT4gZGVjcnlwdEltcGwocGFyYW1zKSksXG4gIH0gYXMgdW5rbm93biBhcyBCaXRHb0Jhc2U7XG59XG5cbi8qKiBBIGZha2UgZGVjcnlwdCB0aGF0IG9ubHkgcmVjb2duaXplcyB0aGUgdXNlci9iYWNrdXAgdG9rZW5zOyBhbnkgb3RoZXIgaW5wdXQgKGUuZy4gYSBCb3ggQyBwdWJsaWMpIHRocm93cy4gKi9cbmZ1bmN0aW9uIG1ha2VEZWNyeXB0TWFwKGVudHJpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiAocGFyYW1zOiB7IHBhc3N3b3JkOiBzdHJpbmc7IGlucHV0OiBzdHJpbmcgfSkgPT4gc3RyaW5nIHtcbiAgcmV0dXJuICh7IHBhc3N3b3JkLCBpbnB1dCB9KSA9PiB7XG4gICAgcGFzc3dvcmQuc2hvdWxkLmVxdWFsKFBBU1NXT1JEKTtcbiAgICBpZiAoIShpbnB1dCBpbiBlbnRyaWVzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIGRlY3J5cHQgaW5wdXQ6ICR7aW5wdXR9YCk7XG4gICAgfVxuICAgIHJldHVybiBlbnRyaWVzW2lucHV0XTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYm94KHZhbHVlczoge1xuICBzZWNwMjU2azFNdWx0aXNpZzogc3RyaW5nO1xuICBlZDI1NTE5TXVsdGlzaWc6IHN0cmluZyB8IHsgcHJ2OiBzdHJpbmc7IGNoYWluQ29kZTogc3RyaW5nIH07XG4gIGVjZHNhTXBjOiBzdHJpbmc7XG4gIGVkZHNhTXBjOiBzdHJpbmc7XG59KTogc3RyaW5nIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlcyk7XG59XG5cbmRlc2NyaWJlKCdkZWNyeXB0U2FmZUtleWNhcmQnLCAoKSA9PiB7XG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnZGVjcnlwdHMgb25jaGFpbiByb290cyB0byBzdHJpbmdzIGFuZCByZXR1cm5zIEJveCBDIHZlcmJhdGltJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHVzZXJCb3ggPSBib3goe1xuICAgICAgc2VjcDI1NmsxTXVsdGlzaWc6ICdlbmMtdXNlci1zZWNwJyxcbiAgICAgIGVkMjU1MTlNdWx0aXNpZzogJ2VuYy11c2VyLWVkMjU1MTknLFxuICAgICAgZWNkc2FNcGM6ICdlbmMtdXNlci1lY2RzYScsXG4gICAgICBlZGRzYU1wYzogJ2VuYy11c2VyLWVkZHNhJyxcbiAgICB9KTtcbiAgICBjb25zdCBiYWNrdXBCb3ggPSBib3goe1xuICAgICAgc2VjcDI1NmsxTXVsdGlzaWc6ICdlbmMtYmFja3VwLXNlY3AnLFxuICAgICAgZWQyNTUxOU11bHRpc2lnOiB7IHBydjogJ2VuYy1iYWNrdXAtZWQyNTUxOScsIGNoYWluQ29kZTogJ0MnLnJlcGVhdCg1MikgfSxcbiAgICAgIGVjZHNhTXBjOiAnZW5jLWJhY2t1cC1lY2RzYScsXG4gICAgICBlZGRzYU1wYzogJ2VuYy1iYWNrdXAtZWRkc2EnLFxuICAgIH0pO1xuICAgIGNvbnN0IGJpdGdvQm94ID0gYm94KHtcbiAgICAgIHNlY3AyNTZrMU11bHRpc2lnOiAneHB1Yi1zZWNwLWJpdGdvJyxcbiAgICAgIGVkMjU1MTlNdWx0aXNpZzogJ3B1Yi1lZDI1NTE5LWJpdGdvJyxcbiAgICAgIGVjZHNhTXBjOiAnY29tbW9uLWVjZHNhLWJpdGdvJyxcbiAgICAgIGVkZHNhTXBjOiAnY29tbW9uLWVkZHNhLWJpdGdvJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IG1wY1VzZXIgPSBidWlsZFNhZmVNcGNLZXlFbnZlbG9wZXMoXG4gICAgICBCdWZmZXIuZnJvbSgndXNlci1zaWduaW5nJyksXG4gICAgICBCdWZmZXIuZnJvbSgndXNlci1yZWR1Y2VkJyksXG4gICAgICBCdWZmZXIuZnJvbSgndXNlci12cmYnKVxuICAgICk7XG4gICAgY29uc3QgbXBjQmFja3VwID0gYnVpbGRTYWZlTXBjS2V5RW52ZWxvcGVzKFxuICAgICAgQnVmZmVyLmZyb20oJ2JhY2t1cC1zaWduaW5nJyksXG4gICAgICBCdWZmZXIuZnJvbSgnYmFja3VwLXJlZHVjZWQnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKCdiYWNrdXAtdnJmJylcbiAgICApO1xuXG4gICAgY29uc3QgYml0Z28gPSBtYWtlTW9ja0JpdEdvKFxuICAgICAgbWFrZURlY3J5cHRNYXAoe1xuICAgICAgICAnZW5jLXVzZXItc2VjcCc6ICd4cHJ2LXVzZXInLFxuICAgICAgICAnZW5jLWJhY2t1cC1zZWNwJzogJ3hwcnYtYmFja3VwJyxcbiAgICAgICAgJ2VuYy11c2VyLWVkMjU1MTknOiAnUy11c2VyLXNlZWQnLFxuICAgICAgICAnZW5jLWJhY2t1cC1lZDI1NTE5JzogJ1MtYmFja3VwLXNlZWQnLFxuICAgICAgICAnZW5jLXVzZXItZWNkc2EnOiBtcGNVc2VyLnJlZHVjZWRFbnZlbG9wZS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgICdlbmMtYmFja3VwLWVjZHNhJzogbXBjQmFja3VwLnJlZHVjZWRFbnZlbG9wZS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgICdlbmMtdXNlci1lZGRzYSc6IG1wY1VzZXIucmVkdWNlZEVudmVsb3BlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgJ2VuYy1iYWNrdXAtZWRkc2EnOiBtcGNCYWNrdXAucmVkdWNlZEVudmVsb3BlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRlY3J5cHRTYWZlS2V5Y2FyZCh7XG4gICAgICBiaXRnbyxcbiAgICAgIHVzZXJLZXlCb3g6IHVzZXJCb3gsXG4gICAgICBiYWNrdXBLZXlCb3g6IGJhY2t1cEJveCxcbiAgICAgIGJpdGdvS2V5Qm94OiBiaXRnb0JveCxcbiAgICAgIHBhc3N3b3JkOiBQQVNTV09SRCxcbiAgICB9KTtcblxuICAgIHJlc3VsdC5zZWNwMjU2azFNdWx0aXNpZy51c2VyLnNob3VsZC5lcXVhbCgneHBydi11c2VyJyk7XG4gICAgcmVzdWx0LnNlY3AyNTZrMU11bHRpc2lnLmJhY2t1cC5zaG91bGQuZXF1YWwoJ3hwcnYtYmFja3VwJyk7XG4gICAgcmVzdWx0LnNlY3AyNTZrMU11bHRpc2lnLmJpdGdvLnNob3VsZC5lcXVhbCgneHB1Yi1zZWNwLWJpdGdvJyk7XG5cbiAgICByZXN1bHQuZWQyNTUxOU11bHRpc2lnLnVzZXIuc2hvdWxkLmVxdWFsKCdTLXVzZXItc2VlZCcpO1xuICAgIHJlc3VsdC5lZDI1NTE5TXVsdGlzaWcuYmFja3VwLnBydi5zaG91bGQuZXF1YWwoJ1MtYmFja3VwLXNlZWQnKTtcbiAgICByZXN1bHQuZWQyNTUxOU11bHRpc2lnLmJhY2t1cC5jaGFpbkNvZGUuc2hvdWxkLmVxdWFsKCdDJy5yZXBlYXQoNTIpKTtcbiAgICByZXN1bHQuZWQyNTUxOU11bHRpc2lnLmJpdGdvLnNob3VsZC5lcXVhbCgncHViLWVkMjU1MTktYml0Z28nKTtcblxuICAgIHJlc3VsdC5lY2RzYU1wYy51c2VyLnNpZ25pbmcudG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbChCdWZmZXIuZnJvbSgndXNlci1yZWR1Y2VkJykudG9TdHJpbmcoJ2hleCcpKTtcbiAgICByZXN1bHQuZWNkc2FNcGMudXNlci52cmYudG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbChCdWZmZXIuZnJvbSgndXNlci12cmYnKS50b1N0cmluZygnaGV4JykpO1xuICAgIHJlc3VsdC5lY2RzYU1wYy5iYWNrdXAuc2lnbmluZy50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKEJ1ZmZlci5mcm9tKCdiYWNrdXAtcmVkdWNlZCcpLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgcmVzdWx0LmVjZHNhTXBjLmJhY2t1cC52cmYudG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbChCdWZmZXIuZnJvbSgnYmFja3VwLXZyZicpLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgcmVzdWx0LmVjZHNhTXBjLmJpdGdvLnNob3VsZC5lcXVhbCgnY29tbW9uLWVjZHNhLWJpdGdvJyk7XG5cbiAgICByZXN1bHQuZWRkc2FNcGMuYml0Z28uc2hvdWxkLmVxdWFsKCdjb21tb24tZWRkc2EtYml0Z28nKTtcblxuICAgIC8vIDQgc2xvdHMgw5cgKHVzZXIgKyBiYWNrdXApID0gOCBkZWNyeXB0czsgQml0R28gKEJveCBDKSBpcyBuZXZlciBkZWNyeXB0ZWQuXG4gICAgKGJpdGdvLmRlY3J5cHQgYXMgc2lub24uU2lub25TdHViKS5jYWxsQ291bnQuc2hvdWxkLmVxdWFsKDgpO1xuICB9KTtcblxuICBpdCgnZGVjcnlwdHMgdGhlIHNlZWQgZnJvbSBhbiBvYmplY3QtZm9ybSBlZDI1NTE5TXVsdGlzaWcgYmFja3VwIGVudHJ5JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHVzZXJCb3ggPSBib3goe1xuICAgICAgc2VjcDI1NmsxTXVsdGlzaWc6ICdlbmMtdXNlci1zZWNwJyxcbiAgICAgIGVkMjU1MTlNdWx0aXNpZzogJ2VuYy11c2VyLWVkMjU1MTknLFxuICAgICAgZWNkc2FNcGM6ICdlbmMtdXNlci1lY2RzYScsXG4gICAgICBlZGRzYU1wYzogJ2VuYy11c2VyLWVkZHNhJyxcbiAgICB9KTtcbiAgICBjb25zdCBiYWNrdXBCb3ggPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBzZWNwMjU2azFNdWx0aXNpZzogJ2VuYy1iYWNrdXAtc2VjcCcsXG4gICAgICBlZDI1NTE5TXVsdGlzaWc6IHsgcHJ2OiAnZW5jLWJhY2t1cC1lZDI1NTE5JywgY2hhaW5Db2RlOiAnQScucmVwZWF0KDUyKSB9LFxuICAgICAgZWNkc2FNcGM6ICdlbmMtYmFja3VwLWVjZHNhJyxcbiAgICAgIGVkZHNhTXBjOiAnZW5jLWJhY2t1cC1lZGRzYScsXG4gICAgfSk7XG4gICAgY29uc3QgYml0Z29Cb3ggPSBib3goe1xuICAgICAgc2VjcDI1NmsxTXVsdGlzaWc6ICd4cHViLXNlY3AtYml0Z28nLFxuICAgICAgZWQyNTUxOU11bHRpc2lnOiAncHViLWVkMjU1MTktYml0Z28nLFxuICAgICAgZWNkc2FNcGM6ICdjb21tb24tZWNkc2EtYml0Z28nLFxuICAgICAgZWRkc2FNcGM6ICdjb21tb24tZWRkc2EtYml0Z28nLFxuICAgIH0pO1xuXG4gICAgY29uc3QgbXBjVXNlciA9IGJ1aWxkU2FmZU1wY0tleUVudmVsb3BlcyhcbiAgICAgIEJ1ZmZlci5mcm9tKCd1c2VyLXNpZ25pbmcnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKCd1c2VyLXJlZHVjZWQnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKCd1c2VyLXZyZicpXG4gICAgKTtcbiAgICBjb25zdCBtcGNCYWNrdXAgPSBidWlsZFNhZmVNcGNLZXlFbnZlbG9wZXMoXG4gICAgICBCdWZmZXIuZnJvbSgnYmFja3VwLXNpZ25pbmcnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKCdiYWNrdXAtcmVkdWNlZCcpLFxuICAgICAgQnVmZmVyLmZyb20oJ2JhY2t1cC12cmYnKVxuICAgICk7XG5cbiAgICBjb25zdCBiaXRnbyA9IG1ha2VNb2NrQml0R28oXG4gICAgICBtYWtlRGVjcnlwdE1hcCh7XG4gICAgICAgICdlbmMtdXNlci1zZWNwJzogJ3hwcnYtdXNlcicsXG4gICAgICAgICdlbmMtYmFja3VwLXNlY3AnOiAneHBydi1iYWNrdXAnLFxuICAgICAgICAnZW5jLXVzZXItZWQyNTUxOSc6ICdTLXVzZXItc2VlZCcsXG4gICAgICAgICdlbmMtYmFja3VwLWVkMjU1MTknOiAnUy1iYWNrdXAtc2VlZCcsXG4gICAgICAgICdlbmMtdXNlci1lY2RzYSc6IG1wY1VzZXIucmVkdWNlZEVudmVsb3BlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgJ2VuYy1iYWNrdXAtZWNkc2EnOiBtcGNCYWNrdXAucmVkdWNlZEVudmVsb3BlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgJ2VuYy11c2VyLWVkZHNhJzogbXBjVXNlci5yZWR1Y2VkRW52ZWxvcGUudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgICAnZW5jLWJhY2t1cC1lZGRzYSc6IG1wY0JhY2t1cC5yZWR1Y2VkRW52ZWxvcGUudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGVjcnlwdFNhZmVLZXljYXJkKHtcbiAgICAgIGJpdGdvLFxuICAgICAgdXNlcktleUJveDogdXNlckJveCxcbiAgICAgIGJhY2t1cEtleUJveDogYmFja3VwQm94LFxuICAgICAgYml0Z29LZXlCb3g6IGJpdGdvQm94LFxuICAgICAgcGFzc3dvcmQ6IFBBU1NXT1JELFxuICAgIH0pO1xuXG4gICAgcmVzdWx0LmVkMjU1MTlNdWx0aXNpZy5iYWNrdXAucHJ2LnNob3VsZC5lcXVhbCgnUy1iYWNrdXAtc2VlZCcpO1xuICAgIHJlc3VsdC5lZDI1NTE5TXVsdGlzaWcuYmFja3VwLmNoYWluQ29kZS5zaG91bGQuZXF1YWwoJ0EnLnJlcGVhdCg1MikpO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyBhbiBlZDI1NTE5IGNoYWluLWNvZGUgZW50cnkgaW4gYSBub24tYmFja3VwIHNsb3QgKGZhaWwgY2xvc2VkKScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB1c2VyQm94ID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgc2VjcDI1NmsxTXVsdGlzaWc6IHsgcHJ2OiAnZW5jLXVzZXItc2VjcCcsIGNoYWluQ29kZTogJ0EnLnJlcGVhdCg1MikgfSxcbiAgICAgIGVkMjU1MTlNdWx0aXNpZzogJ2VuYy11c2VyLWVkMjU1MTknLFxuICAgICAgZWNkc2FNcGM6ICdlbmMtdXNlci1lY2RzYScsXG4gICAgICBlZGRzYU1wYzogJ2VuYy11c2VyLWVkZHNhJyxcbiAgICB9KTtcblxuICAgIGF3YWl0IGRlY3J5cHRTYWZlS2V5Y2FyZCh7XG4gICAgICBiaXRnbzogbWFrZU1vY2tCaXRHbyhtYWtlRGVjcnlwdE1hcCh7fSkpLFxuICAgICAgdXNlcktleUJveDogdXNlckJveCxcbiAgICAgIGJhY2t1cEtleUJveDogdXNlckJveCxcbiAgICAgIGJpdGdvS2V5Qm94OiB1c2VyQm94LFxuICAgICAgcGFzc3dvcmQ6IFBBU1NXT1JELFxuICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3VuZXhwZWN0ZWQgZWQyNTUxOSBjaGFpbi1jb2RlIGVudHJ5Lyk7XG4gIH0pO1xuXG4gIGl0KCd0aHJvd3MgSW5jb3JyZWN0UGFzc3dvcmRFcnJvciB3aGVuIGRlY3J5cHRpb24gZmFpbHMgKHdyb25nIHBhc3N3b3JkKScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB1c2VyQm94ID0gYm94KHtcbiAgICAgIHNlY3AyNTZrMU11bHRpc2lnOiAnZW5jLXVzZXItc2VjcCcsXG4gICAgICBlZDI1NTE5TXVsdGlzaWc6ICdlbmMtdXNlci1lZDI1NTE5JyxcbiAgICAgIGVjZHNhTXBjOiAnZW5jLXVzZXItZWNkc2EnLFxuICAgICAgZWRkc2FNcGM6ICdlbmMtdXNlci1lZGRzYScsXG4gICAgfSk7XG4gICAgY29uc3QgYml0Z28gPSBtYWtlTW9ja0JpdEdvKCgpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYXJnb24yOiB0YWcgZG9lcyBub3QgbWF0Y2gnKTtcbiAgICB9KTtcblxuICAgIGF3YWl0IGRlY3J5cHRTYWZlS2V5Y2FyZCh7XG4gICAgICBiaXRnbyxcbiAgICAgIHVzZXJLZXlCb3g6IHVzZXJCb3gsXG4gICAgICBiYWNrdXBLZXlCb3g6IHVzZXJCb3gsXG4gICAgICBiaXRnb0tleUJveDogdXNlckJveCxcbiAgICAgIHBhc3N3b3JkOiAnd3JvbmctcGFzc3dvcmQnLFxuICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoSW5jb3JyZWN0UGFzc3dvcmRFcnJvcik7XG4gIH0pO1xufSk7XG5cbmNvbnN0IE1QQ19ST09UID0geyBzaWduaW5nOiBCdWZmZXIuYWxsb2MoMCksIHZyZjogQnVmZmVyLmFsbG9jKDApIH07XG5cbmZ1bmN0aW9uIG1ha2VSb290cyhzZWNwOiB7IHVzZXI6IHN0cmluZzsgYmFja3VwOiBzdHJpbmc7IGJpdGdvOiBzdHJpbmcgfSk6IERlY3J5cHRlZFNhZmVSb290cyB7XG4gIHJldHVybiB7XG4gICAgc2VjcDI1NmsxTXVsdGlzaWc6IHNlY3AsXG4gICAgZWQyNTUxOU11bHRpc2lnOiB7IHVzZXI6ICd1JywgYmFja3VwOiB7IHBydjogJ2InLCBjaGFpbkNvZGU6ICdjJyB9LCBiaXRnbzogJ2cnIH0sXG4gICAgZWNkc2FNcGM6IHsgdXNlcjogTVBDX1JPT1QsIGJhY2t1cDogTVBDX1JPT1QsIGJpdGdvOiAnZycgfSxcbiAgICBlZGRzYU1wYzogeyB1c2VyOiBNUENfUk9PVCwgYmFja3VwOiBNUENfUk9PVCwgYml0Z286ICdnJyB9LFxuICB9O1xufVxuXG5kZXNjcmliZSgnZGVyaXZlU2FmZVdhbGxldEtleXMnLCAoKSA9PiB7XG4gIGNvbnN0IHVzZXJSb290ID0gYmlwMzIuZnJvbVNlZWQoQnVmZmVyLmZyb20oJzAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmJywgJ2hleCcpKTtcbiAgY29uc3QgYmFja3VwUm9vdCA9IGJpcDMyLmZyb21TZWVkKFxuICAgIEJ1ZmZlci5mcm9tKCcxZjFlMWQxYzFiMWExOTE4MTcxNjE1MTQxMzEyMTExMDBmMGUwZDBjMGIwYTA5MDgwNzA2MDUwNDAzMDIwMTAwJywgJ2hleCcpXG4gICk7XG4gIGNvbnN0IGJpdGdvUm9vdCA9IGJpcDMyXG4gICAgLmZyb21TZWVkKEJ1ZmZlci5mcm9tKCcyZjJlMmQyYzJiMmEyOTI4MjcyNjI1MjQyMzIyMjEyMDFmMWUxZDFjMWIxYTE5MTgxNzE2MTUxNDEzMTIxMTEwJywgJ2hleCcpKVxuICAgIC5uZXV0ZXJlZCgpO1xuXG4gIGNvbnN0IHJvb3RzID0gbWFrZVJvb3RzKHtcbiAgICB1c2VyOiB1c2VyUm9vdC50b0Jhc2U1OCgpLFxuICAgIGJhY2t1cDogYmFja3VwUm9vdC50b0Jhc2U1OCgpLFxuICAgIGJpdGdvOiBiaXRnb1Jvb3QudG9CYXNlNTgoKSxcbiAgfSk7XG5cbiAgaXQoJ2Rlcml2ZXMgdGhlIEJJUDQ0IGNoaWxkIHRyaXBsZXQgZm9yIHNsb3QgMScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkZXJpdmVTYWZlV2FsbGV0S2V5cyh7IGNvaW46ICdidGMnLCBzbG90OiAnc2VjcDI1NmsxTXVsdGlzaWcnLCBhY2NvdW50OiAwLCByb290cyB9KTtcbiAgICBpZiAocmVzdWx0LnNsb3QgIT09ICdzZWNwMjU2azFNdWx0aXNpZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgc2VjcDI1NmsxTXVsdGlzaWcgc2xvdCcpO1xuICAgIH1cblxuICAgIHJlc3VsdC5wYXRoLnNob3VsZC5lcXVhbChcIm0vNDQnLzAnLzEnLzAnXCIpO1xuICAgIHJlc3VsdC5rZXlzLnVzZXIucHJ2LnNob3VsZC5lcXVhbCh1c2VyUm9vdC5kZXJpdmVQYXRoKFwibS80NCcvMCcvMScvMCdcIikudG9CYXNlNTgoKSk7XG4gICAgcmVzdWx0LmtleXMudXNlci5wdWIuc2hvdWxkLmVxdWFsKHVzZXJSb290LmRlcml2ZVBhdGgoXCJtLzQ0Jy8wJy8xJy8wJ1wiKS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpO1xuICAgIHJlc3VsdC5rZXlzLmJhY2t1cC5wcnYuc2hvdWxkLmVxdWFsKGJhY2t1cFJvb3QuZGVyaXZlUGF0aCgnbS80NC8wLzEvMCcpLnRvQmFzZTU4KCkpO1xuICAgIHJlc3VsdC5rZXlzLmJpdGdvLnB1Yi5zaG91bGQuZXF1YWwoYml0Z29Sb290LmRlcml2ZVBhdGgoJ20vNDQvMC8xLzAnKS50b0Jhc2U1OCgpKTtcbiAgfSk7XG5cbiAgaXQoJ3ZhcmllcyB0aGUgcGF0aCB3aXRoIHRoZSBhY2NvdW50JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRlcml2ZVNhZmVXYWxsZXRLZXlzKHsgY29pbjogJ2J0YycsIHNsb3Q6ICdzZWNwMjU2azFNdWx0aXNpZycsIGFjY291bnQ6IDIsIHJvb3RzIH0pO1xuICAgIHJlc3VsdC5wYXRoLnNob3VsZC5lcXVhbChcIm0vNDQnLzAnLzEnLzInXCIpO1xuICB9KTtcblxuICBpdCgnZGVyaXZlcyB0aGUgZWNkc2FNcGMgY2hpbGQgdmlhIHRoZSBES0xzIGNlcmVtb255JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IFt1c2VyRGtnLCBiYWNrdXBEa2ddID0gYXdhaXQgRGtsc1V0aWxzLmdlbmVyYXRlREtHS2V5U2hhcmVzKCk7XG4gICAgY29uc3QgW3ZyZlVzZXIsIHZyZkJhY2t1cF0gPSBhd2FpdCBEa2xzVnJmVXRpbHMuZ2VuZXJhdGVWcmZES0dLZXlTaGFyZXMoKTtcblxuICAgIGNvbnN0IG1wY1Jvb3RzOiBEZWNyeXB0ZWRTYWZlUm9vdHMgPSB7XG4gICAgICAuLi5yb290cyxcbiAgICAgIGVjZHNhTXBjOiB7XG4gICAgICAgIHVzZXI6IHsgc2lnbmluZzogdXNlckRrZy5nZXRSZWR1Y2VkS2V5U2hhcmUoKSwgdnJmOiB2cmZVc2VyLmdldEtleVNoYXJlKCkgfSxcbiAgICAgICAgYmFja3VwOiB7IHNpZ25pbmc6IGJhY2t1cERrZy5nZXRSZWR1Y2VkS2V5U2hhcmUoKSwgdnJmOiB2cmZCYWNrdXAuZ2V0S2V5U2hhcmUoKSB9LFxuICAgICAgICBiaXRnbzogJ2cnLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGVyaXZlU2FmZVdhbGxldEtleXMoeyBjb2luOiAnZXRoJywgc2xvdDogJ2VjZHNhTXBjJywgYWNjb3VudDogMCwgcm9vdHM6IG1wY1Jvb3RzIH0pO1xuICAgIGlmIChyZXN1bHQuc2xvdCAhPT0gJ2VjZHNhTXBjJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBlY2RzYU1wYyBzbG90Jyk7XG4gICAgfVxuXG4gICAgcmVzdWx0LnBhdGguc2hvdWxkLmVxdWFsKFwibS80NCcvNjAnLzMnLzAnXCIpO1xuICAgIHJlc3VsdC5rZXlzLmNvbW1vbktleWNoYWluLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgIHJlc3VsdC5rZXlzLnVzZXIuc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgcmVzdWx0LmtleXMuYmFja3VwLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICB9KTtcblxuICBpdCgnZGVyaXZlcyBhbmQgc2lnbnMgdGhlIGVkZHNhTXBjIHNsb3QtNCBCSVA0NCBjaGlsZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBbdXNlckRrZywgYmFja3VwRGtnLCBiaXRnb0RrZ10gPSBhd2FpdCBNUFNVdGlsLmdlbmVyYXRlRWREc2FES0dLZXlTaGFyZXMoKTtcbiAgICBjb25zdCBbdnJmVXNlciwgdnJmQmFja3VwLCB2cmZCaXRnb10gPSBhd2FpdCBNcHNWcmZVdGlscy5nZW5lcmF0ZVZyZkRLR0tleVNoYXJlcygpO1xuICAgIGNvbnN0IG1wY1Jvb3RzOiBEZWNyeXB0ZWRTYWZlUm9vdHMgPSB7XG4gICAgICAuLi5yb290cyxcbiAgICAgIGVkZHNhTXBjOiB7XG4gICAgICAgIHVzZXI6IHsgc2lnbmluZzogdXNlckRrZy5nZXRSZWR1Y2VkS2V5U2hhcmUoKSwgdnJmOiB2cmZVc2VyLmdldEtleVNoYXJlKCkgfSxcbiAgICAgICAgYmFja3VwOiB7IHNpZ25pbmc6IGJhY2t1cERrZy5nZXRSZWR1Y2VkS2V5U2hhcmUoKSwgdnJmOiB2cmZCYWNrdXAuZ2V0S2V5U2hhcmUoKSB9LFxuICAgICAgICBiaXRnbzogYml0Z29Ea2cuZ2V0Q29tbW9uS2V5Y2hhaW4oKSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRlcml2ZVNhZmVXYWxsZXRLZXlzKHsgY29pbjogJ3NvbCcsIHNsb3Q6ICdlZGRzYU1wYycsIGFjY291bnQ6IDAsIHJvb3RzOiBtcGNSb290cyB9KTtcbiAgICBpZiAocmVzdWx0LnNsb3QgIT09ICdlZGRzYU1wYycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgZWRkc2FNcGMgc2xvdCcpO1xuICAgIH1cbiAgICByZXN1bHQucGF0aC5zaG91bGQuZXF1YWwoXCJtLzQ0Jy81MDEnLzQnLzAnXCIpO1xuXG4gICAgLy8gUGxheSBtaW50J3MgdXNlcuKGlEJpdEdvIHJvbGUgbG9jYWxseSBhdCB0aGUgc2FtZSBCSVA0NCBwYXRoOyBubyBkZXYtbWludGVkIHdhbGxldCBpcyBuZWVkZWQuXG4gICAgY29uc3QgdXNlck1pbnQgPSBuZXcgTXBzRGVyaXZlLkRlcml2ZSgzLCAyLCAwLCB1c2VyRGtnLmdldEtleVNoYXJlKCksIHZyZlVzZXIuZ2V0S2V5U2hhcmUoKSwgcmVzdWx0LnBhdGgpO1xuICAgIGNvbnN0IGJpdGdvTWludCA9IG5ldyBNcHNEZXJpdmUuRGVyaXZlKDMsIDIsIDIsIGJpdGdvRGtnLmdldEtleVNoYXJlKCksIHZyZkJpdGdvLmdldEtleVNoYXJlKCksIHJlc3VsdC5wYXRoKTtcbiAgICBjb25zdCBbdXNlclJvdW5kMCwgYml0Z29Sb3VuZDBdID0gYXdhaXQgUHJvbWlzZS5hbGwoW3VzZXJNaW50LmluaXREZXJpdmUoKSwgYml0Z29NaW50LmluaXREZXJpdmUoKV0pO1xuICAgIGNvbnN0IFt1c2VyUm91bmQxXSA9IHVzZXJNaW50LmhhbmRsZUluY29taW5nTWVzc2FnZXMoW2JpdGdvUm91bmQwXSk7XG4gICAgY29uc3QgW2JpdGdvUm91bmQxXSA9IGJpdGdvTWludC5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFt1c2VyUm91bmQwXSk7XG4gICAgaWYgKCF1c2VyUm91bmQxIHx8ICFiaXRnb1JvdW5kMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCB1c2VyIGFuZCBCaXRHbyBkZXJpdmUgcm91bmQtMSBtZXNzYWdlcycpO1xuICAgIH1cbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHVzZXJNaW50LmhhbmRsZUluY29taW5nTWVzc2FnZXMoW2JpdGdvUm91bmQxXSksIFtdKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGJpdGdvTWludC5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFt1c2VyUm91bmQxXSksIFtdKTtcbiAgICBjb25zdCBtaW50ZWRDaGlsZENvbW1vbktleWNoYWluID0gdXNlck1pbnQuZ2V0Q29tbW9uS2V5Y2hhaW4oKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYml0Z29NaW50LmdldENvbW1vbktleWNoYWluKCksIG1pbnRlZENoaWxkQ29tbW9uS2V5Y2hhaW4pO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQua2V5cy5jb21tb25LZXljaGFpbiwgbWludGVkQ2hpbGRDb21tb25LZXljaGFpbik7XG5cbiAgICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ3NhZmUtcmVjb3ZlcnktcGFzc3BocmFzZSc7XG4gICAgY29uc3QgdXNlcktleSA9IHNqY2wuZW5jcnlwdCh3YWxsZXRQYXNzcGhyYXNlLCByZXN1bHQua2V5cy51c2VyKTtcbiAgICBjb25zdCBiYWNrdXBLZXkgPSBzamNsLmVuY3J5cHQod2FsbGV0UGFzc3BocmFzZSwgcmVzdWx0LmtleXMuYmFja3VwKTtcbiAgICBjb25zdCByb290Q29tbW9uS2V5Y2hhaW4gPSB1c2VyRGtnLmdldENvbW1vbktleWNoYWluKCk7XG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICBzaWduRWRkc2FNcGNWMlJlY292ZXJ5VHgoe1xuICAgICAgICBtZXNzYWdlOiBCdWZmZXIuZnJvbSgnd3Jvbmcga2V5Y2hhaW4gbXVzdCBmYWlsJyksXG4gICAgICAgIHVzZXJLZXksXG4gICAgICAgIGJhY2t1cEtleSxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgYml0Z29LZXk6IHJvb3RDb21tb25LZXljaGFpbixcbiAgICAgICAgZGVyaXZhdGlvblBhdGg6ICdtLzAnLFxuICAgICAgfSksXG4gICAgICAvY29tbW9uS2V5Q2hhaW4gZnJvbSBrZXljYXJkIGRvZXMgbm90IG1hdGNoIGJpdGdvS2V5L1xuICAgICk7XG5cbiAgICBjb25zdCBtcGMgPSBhd2FpdCBnZXRJbml0aWFsaXplZE1wY0luc3RhbmNlKCk7XG4gICAgZm9yIChjb25zdCBkZXJpdmF0aW9uUGF0aCBvZiBbJ20vMCcsICdtLzMnXSkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IEJ1ZmZlci5mcm9tKGBTYWZlIEVkRFNBIHJlY292ZXJ5ICR7ZGVyaXZhdGlvblBhdGh9YCk7XG4gICAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBzaWduRWRkc2FNcGNWMlJlY292ZXJ5VHgoe1xuICAgICAgICBtZXNzYWdlLFxuICAgICAgICB1c2VyS2V5LFxuICAgICAgICBiYWNrdXBLZXksXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgIGJpdGdvS2V5OiByZXN1bHQua2V5cy5jb21tb25LZXljaGFpbixcbiAgICAgICAgZGVyaXZhdGlvblBhdGgsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRlcml2ZWRLZXljaGFpbiA9IG1wYy5kZXJpdmVVbmhhcmRlbmVkKHJlc3VsdC5rZXlzLmNvbW1vbktleWNoYWluLCBkZXJpdmF0aW9uUGF0aCk7XG4gICAgICBjb25zdCBwdWJsaWNLZXlCeXRlcyA9IEJ1ZmZlci5mcm9tKGRlcml2ZWRLZXljaGFpbi5zbGljZSgwLCA2NCksICdoZXgnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgICAgZWQyNTUxOS52ZXJpZnkobmV3IFVpbnQ4QXJyYXkoc2lnbmF0dXJlKSwgbmV3IFVpbnQ4QXJyYXkobWVzc2FnZSksIG5ldyBVaW50OEFycmF5KHB1YmxpY0tleUJ5dGVzKSksXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICBpdCgnZGVyaXZlcyB0aGUgZWQyNTUxOU11bHRpc2lnIHRyaXBsZXQgYXQgdGhlIEJJUDQ0IHBhdGgnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgU1RSS0VZX1NFRUQgPSAnU0FBQUNBUURBUUNRTUJZSUJFRkFXREFOQllIUkFFSVNDTUtCS0ZRWERBTVJVR1k0RFVQQjZOS0knO1xuICAgIGNvbnN0IGJhY2t1cFNlZWQgPSBkZWNvZGVFZDI1NTE5U3RyS2V5U2VjcmV0U2VlZChTVFJLRVlfU0VFRCk7XG4gICAgY29uc3QgYmFja3VwUm9vdFB1YiA9IEJ1ZmZlci5mcm9tKGVkMjU1MTkuZ2V0UHVibGljS2V5KGJhY2t1cFNlZWQpKTtcbiAgICBjb25zdCBiYWNrdXBDaGFpbkNvZGUgPSBCdWZmZXIuYWxsb2MoMzIsIDB4YWIpO1xuICAgIGNvbnN0IGVkMjU1MTlSb290czogRGVjcnlwdGVkU2FmZVJvb3RzID0ge1xuICAgICAgLi4ucm9vdHMsXG4gICAgICBlZDI1NTE5TXVsdGlzaWc6IHtcbiAgICAgICAgdXNlcjogU1RSS0VZX1NFRUQsXG4gICAgICAgIGJhY2t1cDogeyBwcnY6IFNUUktFWV9TRUVELCBjaGFpbkNvZGU6IGVuY29kZUVkMjU1MTlDaGFpbkNvZGUoYmFja3VwQ2hhaW5Db2RlKSB9LFxuICAgICAgICBiaXRnbzogZW5jb2RlRGVyaXZhYmxlRWQyNTUxOVB1YihiYWNrdXBSb290UHViLCBiYWNrdXBDaGFpbkNvZGUpLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGVyaXZlU2FmZVdhbGxldEtleXMoe1xuICAgICAgY29pbjogJ2FsZ28nLFxuICAgICAgc2xvdDogJ2VkMjU1MTlNdWx0aXNpZycsXG4gICAgICBhY2NvdW50OiAwLFxuICAgICAgcm9vdHM6IGVkMjU1MTlSb290cyxcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LnNsb3QgIT09ICdlZDI1NTE5TXVsdGlzaWcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIGVkMjU1MTlNdWx0aXNpZyBzbG90Jyk7XG4gICAgfVxuXG4gICAgcmVzdWx0LnBhdGguc2hvdWxkLmVxdWFsKFwibS80NCcvMjgzJy8yJy8wJ1wiKTtcblxuICAgIC8vIHVzZXI6IGhhcmRlbmVkIFNMSVAtMDAxMCBjaGlsZCwgcGlubmVkIHRvIHRoZSBsZWFmJ3MgZ29sZGVuIHZlY3RvclxuICAgIHJlc3VsdC5rZXlzLnVzZXIua2luZC5zaG91bGQuZXF1YWwoJ3NlZWQnKTtcbiAgICByZXN1bHQua2V5cy51c2VyLnNlZWQuc2hvdWxkLmVxdWFsKCdiZTY5NTMxZWJiYWI4NTFiNjlhYTQxYmI5YzkwNWFmZWQ1MmQyNmZmNDI3OGU2NDE4NjA5ZDRkNjA1NzA1MTBjJyk7XG4gICAgcmVzdWx0LmtleXMudXNlci5wdWIuc2hvdWxkLmVxdWFsKFxuICAgICAgQnVmZmVyLmZyb20oZWQyNTUxOS5nZXRQdWJsaWNLZXkoQnVmZmVyLmZyb20ocmVzdWx0LmtleXMudXNlci5zZWVkLCAnaGV4JykpKS50b1N0cmluZygnaGV4JylcbiAgICApO1xuXG4gICAgLy8gYmFja3VwOiBleHRlbmRlZCBrZXkgd2hvc2UgcHVibGljIGhhbGYgZXF1YWxzIHRoZSBwdWJsaWMgc29mdC1kZXJpdmUgb2Ygcm9vdCBwdWIg4oCWIGNoYWluIGNvZGVcbiAgICBjb25zdCBiaXRnb1B1YiA9IChcbiAgICAgIGF3YWl0IHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTlBdFBhdGgoZWQyNTUxOVJvb3RzLmVkMjU1MTlNdWx0aXNpZy5iaXRnbywgJ20vNDQvMjgzLzIvMCcpXG4gICAgKS50b1N0cmluZygnaGV4Jyk7XG4gICAgcmVzdWx0LmtleXMuYmFja3VwLmtpbmQuc2hvdWxkLmVxdWFsKCdleHRlbmRlZCcpO1xuICAgIC8vIFBpbiB0aGUgcHJpdmF0ZSBoYWx2ZXMgKHNlbGYtZ2VuZXJhdGVkOyB0byBiZSBzdXBlcnNlZGVkIGJ5IEdWMSBjcm9zcy1yZXBvIHZlY3RvcnMpLlxuICAgIHJlc3VsdC5rZXlzLmJhY2t1cC5rTC5zaG91bGQuZXF1YWwoJzlhZDYwYmI1OTFmZWM2NWRmM2E3MmZiMDQxZWU1M2EzMjYzYzQzZTYwNTY1MTJiYzQ5ZGU2YjM0MmNmZjhlMGYnKTtcbiAgICByZXN1bHQua2V5cy5iYWNrdXAua1Iuc2hvdWxkLmVxdWFsKCcxMjYyZjJkNTQzOWMwM2QxMWYyYTI5NWQ2OTFiNGVhNjI5ZjE0ZTllMjVjNjE0ZDRhOGFmZjhlZGQxODY1Y2RmJyk7XG4gICAgcmVzdWx0LmtleXMuYmFja3VwLnB1Yi5zaG91bGQuZXF1YWwoYml0Z29QdWIpO1xuICAgIHJlc3VsdC5rZXlzLmJpdGdvLnB1Yi5zaG91bGQuZXF1YWwoYml0Z29QdWIpO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyBhIG5vbi1pbnRlZ2VyIGFjY291bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgZGVyaXZlU2FmZVdhbGxldEtleXMoeyBjb2luOiAnYnRjJywgc2xvdDogJ3NlY3AyNTZrMU11bHRpc2lnJywgYWNjb3VudDogMS41LCByb290cyB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgL2ludmFsaWQgYWNjb3VudC9cbiAgICApO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnYnVpbGRTYWZlUmVjb3ZlcktleVBhcmFtcycsICgpID0+IHtcbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBzaW5vbi5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGNvbnN0IHVzZXJSb290ID0gYmlwMzIuZnJvbVNlZWQoQnVmZmVyLmZyb20oJzAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmJywgJ2hleCcpKTtcbiAgY29uc3QgYmFja3VwUm9vdCA9IGJpcDMyLmZyb21TZWVkKFxuICAgIEJ1ZmZlci5mcm9tKCcxZjFlMWQxYzFiMWExOTE4MTcxNjE1MTQxMzEyMTExMDBmMGUwZDBjMGIwYTA5MDgwNzA2MDUwNDAzMDIwMTAwJywgJ2hleCcpXG4gICk7XG4gIGNvbnN0IGJpdGdvUm9vdCA9IGJpcDMyXG4gICAgLmZyb21TZWVkKEJ1ZmZlci5mcm9tKCcyZjJlMmQyYzJiMmEyOTI4MjcyNjI1MjQyMzIyMjEyMDFmMWUxZDFjMWIxYTE5MTgxNzE2MTUxNDEzMTIxMTEwJywgJ2hleCcpKVxuICAgIC5uZXV0ZXJlZCgpO1xuXG4gIGNvbnN0IGtleXMgPSB7XG4gICAgdXNlcjogeyBwcnY6IHVzZXJSb290LnRvQmFzZTU4KCksIHB1YjogdXNlclJvb3QubmV1dGVyZWQoKS50b0Jhc2U1OCgpIH0sXG4gICAgYmFja3VwOiB7IHBydjogYmFja3VwUm9vdC50b0Jhc2U1OCgpLCBwdWI6IGJhY2t1cFJvb3QubmV1dGVyZWQoKS50b0Jhc2U1OCgpIH0sXG4gICAgYml0Z286IHsgcHViOiBiaXRnb1Jvb3QudG9CYXNlNTgoKSB9LFxuICB9O1xuXG4gIGl0KCdzaWduZWQgbW9kZSByZS1lbmNyeXB0cyBjaGlsZCB4cHJ2cyB1bmRlciBhIHNpbmdsZSBlcGhlbWVyYWwgcGFzc3BocmFzZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwYXNzcGhyYXNlczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBlbmNyeXB0ID0gc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAoeyBpbnB1dCwgcGFzc3dvcmQsIGVuY3J5cHRpb25WZXJzaW9uIH0pID0+IHtcbiAgICAgIHBhc3NwaHJhc2VzLnB1c2gocGFzc3dvcmQpO1xuICAgICAgZW5jcnlwdGlvblZlcnNpb24uc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgcmV0dXJuIGBlbmMoJHtpbnB1dH0pYDtcbiAgICB9KTtcbiAgICBjb25zdCBiaXRnbyA9IHsgZW5jcnlwdCB9IGFzIHVua25vd24gYXMgQml0R29CYXNlO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYnVpbGRTYWZlUmVjb3ZlcktleVBhcmFtcyh7XG4gICAgICBiaXRnbyxcbiAgICAgIGNvaW46ICdidGMnLFxuICAgICAgc2xvdDogJ3NlY3AyNTZrMU11bHRpc2lnJyxcbiAgICAgIGtleXMsXG4gICAgICBtb2RlOiAnc2lnbmVkJyxcbiAgICB9KTtcblxuICAgIHJlc3VsdC51c2VyS2V5LnNob3VsZC5lcXVhbChgZW5jKCR7a2V5cy51c2VyLnBydn0pYCk7XG4gICAgcmVzdWx0LmJhY2t1cEtleS5zaG91bGQuZXF1YWwoYGVuYygke2tleXMuYmFja3VwLnBydn0pYCk7XG4gICAgcmVzdWx0LmJpdGdvS2V5LnNob3VsZC5lcXVhbChrZXlzLmJpdGdvLnB1Yik7XG4gICAgKHJlc3VsdC53YWxsZXRQYXNzcGhyYXNlIGFzIHN0cmluZykuc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgcGFzc3BocmFzZXMuc2hvdWxkLmhhdmUubGVuZ3RoKDIpO1xuICAgIHBhc3NwaHJhc2VzWzBdLnNob3VsZC5lcXVhbChwYXNzcGhyYXNlc1sxXSk7XG4gICAgcGFzc3BocmFzZXNbMF0uc2hvdWxkLmVxdWFsKHJlc3VsdC53YWxsZXRQYXNzcGhyYXNlKTtcbiAgICBlbmNyeXB0LmNhbGxDb3VudC5zaG91bGQuZXF1YWwoMik7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIG5vbi1wcml2YXRlIGNoaWxkIGtleXMgaW4gc2lnbmVkIG1vZGUnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYml0Z28gPSB7IGVuY3J5cHQ6IHNpbm9uLnN0dWIoKSB9IGFzIHVua25vd24gYXMgQml0R29CYXNlO1xuICAgIGF3YWl0IGJ1aWxkU2FmZVJlY292ZXJLZXlQYXJhbXMoe1xuICAgICAgYml0Z28sXG4gICAgICBjb2luOiAnYnRjJyxcbiAgICAgIHNsb3Q6ICdzZWNwMjU2azFNdWx0aXNpZycsXG4gICAgICBrZXlzOiB7IHVzZXI6IHsgcHJ2OiBrZXlzLnVzZXIucHViLCBwdWI6IGtleXMudXNlci5wdWIgfSwgYmFja3VwOiBrZXlzLmJhY2t1cCwgYml0Z286IGtleXMuYml0Z28gfSxcbiAgICAgIG1vZGU6ICdzaWduZWQnLFxuICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL211c3QgYmUgcHJpdmF0ZSB4cHJ2cy8pO1xuICB9KTtcblxuICBpdCgndW5zaWduZWQgbW9kZSByZXR1cm5zIHB1YnMgYW5kIG5ldmVyIGVuY3J5cHRzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVuY3J5cHQgPSBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jICgpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZW5jcnlwdCBzaG91bGQgbm90IGJlIGNhbGxlZCcpO1xuICAgIH0pO1xuICAgIGNvbnN0IGJpdGdvID0geyBlbmNyeXB0IH0gYXMgdW5rbm93biBhcyBCaXRHb0Jhc2U7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBidWlsZFNhZmVSZWNvdmVyS2V5UGFyYW1zKHtcbiAgICAgIGJpdGdvLFxuICAgICAgY29pbjogJ2J0YycsXG4gICAgICBzbG90OiAnc2VjcDI1NmsxTXVsdGlzaWcnLFxuICAgICAga2V5cyxcbiAgICAgIG1vZGU6ICd1bnNpZ25lZCcsXG4gICAgfSk7XG5cbiAgICByZXN1bHQudXNlcktleS5zaG91bGQuZXF1YWwoa2V5cy51c2VyLnB1Yik7XG4gICAgcmVzdWx0LmJhY2t1cEtleS5zaG91bGQuZXF1YWwoa2V5cy5iYWNrdXAucHViKTtcbiAgICByZXN1bHQuYml0Z29LZXkuc2hvdWxkLmVxdWFsKGtleXMuYml0Z28ucHViKTtcbiAgICByZXN1bHQuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCd3YWxsZXRQYXNzcGhyYXNlJyk7XG4gICAgZW5jcnlwdC5jYWxsQ291bnQuc2hvdWxkLmVxdWFsKDApO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyB1bnN1cHBvcnRlZCBzbG90cycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBiaXRnbyA9IHsgZW5jcnlwdDogc2lub24uc3R1YigpIH0gYXMgdW5rbm93biBhcyBCaXRHb0Jhc2U7XG4gICAgYXdhaXQgYnVpbGRTYWZlUmVjb3ZlcktleVBhcmFtcyh7XG4gICAgICBiaXRnbyxcbiAgICAgIGNvaW46ICdidGMnLFxuICAgICAgc2xvdDogJ2VkZHNhTXBjJyxcbiAgICAgIGtleXMsXG4gICAgICBtb2RlOiAnc2lnbmVkJyxcbiAgICB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9ub3Qgc3VwcG9ydGVkIHlldC8pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnU2FmZSBlY2RzYU1wYyBkZXJpdmUg4oaSIHNpZ24gKGdhdGUpJywgZnVuY3Rpb24gKCkge1xuICBpdCgnZGVyaXZlcyBhIGNoaWxkLCByZWJ1aWxkcyAyLW9mLTIgc2hhcmVzLCBhbmQgc2lnbnMgYSBtZXNzYWdlIHZlcmlmaWVkIGF0IG0vMCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBbdXNlckRrZywgYmFja3VwRGtnXSA9IGF3YWl0IERrbHNVdGlscy5nZW5lcmF0ZURLR0tleVNoYXJlcygpO1xuICAgIGNvbnN0IFt2cmZVc2VyLCB2cmZCYWNrdXBdID0gYXdhaXQgRGtsc1ZyZlV0aWxzLmdlbmVyYXRlVnJmREtHS2V5U2hhcmVzKCk7XG5cbiAgICBjb25zdCByb290Q29tbW9uS2V5Y2hhaW4gPSBEa2xzVHlwZXMuZ2V0Q29tbW9uS2V5Y2hhaW4odXNlckRrZy5nZXRLZXlTaGFyZSgpKTtcblxuICAgIGNvbnN0IHsgY29tbW9uS2V5Y2hhaW4sIHVzZXJDaGlsZCwgYmFja3VwQ2hpbGQgfSA9IGF3YWl0IERrbHNWcmZVdGlscy5kZXJpdmVTYWZlRWNkc2FNcGNDaGlsZCh7XG4gICAgICB1c2VyUm9vdDogeyBzaWduaW5nOiB1c2VyRGtnLmdldFJlZHVjZWRLZXlTaGFyZSgpLCB2cmY6IHZyZlVzZXIuZ2V0S2V5U2hhcmUoKSB9LFxuICAgICAgYmFja3VwUm9vdDogeyBzaWduaW5nOiBiYWNrdXBEa2cuZ2V0UmVkdWNlZEtleVNoYXJlKCksIHZyZjogdnJmQmFja3VwLmdldEtleVNoYXJlKCkgfSxcbiAgICAgIGFjY291bnQ6IDAsXG4gICAgICBjb2luVHlwZTogNjAsXG4gICAgICBzYWZlU2xvdE9yZGluYWw6IDMsXG4gICAgfSk7XG5cbiAgICAvLyBUaGUgZGVyaXZlZCBjaGlsZCBtdXN0IG5ldmVyIGJlIHRoZSByb290ICh0aGUgXCJyb290IGVudmVsb3BlIGluIHRoZSBjaGlsZCBwb3NpdGlvblwiIGZvb3RndW4pLlxuICAgIGNvbW1vbktleWNoYWluLnNob3VsZC5ub3QuZXF1YWwocm9vdENvbW1vbktleWNoYWluKTtcblxuICAgIC8vIFJlYnVpbGQgMi1vZi0yIGtleXNoYXJlcyBmcm9tIHRoZSBkZXJpdmVkIHJlZHVjZWQgQ0JPUiwgZXhhY3RseSBhcyB0aGUgc2lnbmVyJ3MgcmV0cm9maXQgZG9lcy5cbiAgICBjb25zdCB0b1JldHJvZml0ID0gKGI2NDogc3RyaW5nKTogRGtsc1R5cGVzLlJldHJvZml0RGF0YSA9PiB7XG4gICAgICBjb25zdCByZWR1Y2VkID0gRGtsc1R5cGVzLmdldERlY29kZWRSZWR1Y2VkS2V5U2hhcmUoQnVmZmVyLmZyb20oYjY0LCAnYmFzZTY0JykpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeFNoYXJlOiB7XG4gICAgICAgICAgeDogQnVmZmVyLmZyb20ocmVkdWNlZC5wcnYpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICB5OiBCdWZmZXIuZnJvbShyZWR1Y2VkLnB1YikudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIGNoYWluY29kZTogQnVmZmVyLmZyb20ocmVkdWNlZC5yb290Q2hhaW5Db2RlKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIH0sXG4gICAgICAgIHhpTGlzdDogcmVkdWNlZC54TGlzdC5zbGljZSgwLCAyKSxcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBbdXNlcjJvZjIsIGJhY2t1cDJvZjJdID0gYXdhaXQgRGtsc1V0aWxzLmdlbmVyYXRlMm9mMktleVNoYXJlcyhcbiAgICAgIHRvUmV0cm9maXQodXNlckNoaWxkKSxcbiAgICAgIHRvUmV0cm9maXQoYmFja3VwQ2hpbGQpXG4gICAgKTtcblxuICAgIGNvbnN0IG1lc3NhZ2VIYXNoID0gQnVmZmVyLmZyb20oJzAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYnLCAnaGV4Jyk7XG4gICAgY29uc3QgdXNlckRzZyA9IG5ldyBEa2xzRHNnLkRzZyh1c2VyMm9mMi5nZXRLZXlTaGFyZSgpLCAwLCAnbS8wJywgbWVzc2FnZUhhc2gpO1xuICAgIGNvbnN0IGJhY2t1cERzZyA9IG5ldyBEa2xzRHNnLkRzZyhiYWNrdXAyb2YyLmdldEtleVNoYXJlKCksIDEsICdtLzAnLCBtZXNzYWdlSGFzaCk7XG4gICAgY29uc3Qgc2lnbmF0dXJlU3RyaW5nID0gRGtsc1V0aWxzLnZlcmlmeUFuZENvbnZlcnREa2xzU2lnbmF0dXJlKFxuICAgICAgbWVzc2FnZUhhc2gsXG4gICAgICAoYXdhaXQgRGtsc1V0aWxzLmV4ZWN1dGVUaWxsUm91bmQoNSwgdXNlckRzZywgYmFja3VwRHNnKSkgYXMgRGtsc1R5cGVzLkRlc2VyaWFsaXplZERrbHNTaWduYXR1cmUsXG4gICAgICBjb21tb25LZXljaGFpbixcbiAgICAgICdtLzAnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgZmFsc2VcbiAgICApO1xuXG4gICAgLy8gdmVyaWZ5QW5kQ29udmVydERrbHNTaWduYXR1cmUgcmVjb3ZlcnMgdGhlIHB1YmtleSBmcm9tIHRoZSBzaWduYXR1cmUgYW5kIGNoZWNrcyBpdCBhZ2FpbnN0XG4gICAgLy8gZGVyaXZlVW5oYXJkZW5lZChjaGlsZENLLCAnbS8wJyk7IGl0IHRocm93cyBvbiBtaXNtYXRjaCwgc28gYSByZXR1cm5lZCBzdHJpbmcgaXMgcHJvb2YuXG4gICAgc2lnbmF0dXJlU3RyaW5nLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgIHNpZ25hdHVyZVN0cmluZy5zaG91bGQubWF0Y2goL15cXGQrOlswLTlhLWZdKzpbMC05YS1mXSs6WzAtOWEtZl0rJC8pO1xuICB9KTtcbn0pO1xuIl19
|