@bitgo-beta/sdk-core 8.2.1-beta.2050 → 8.2.1-beta.2052
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/LICENSE +191 -0
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +14 -0
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
- package/dist/src/bitgo/safe/iSafe.d.ts +2 -2
- package/dist/src/bitgo/safe/iSafe.js +1 -1
- package/dist/src/bitgo/safe/safe.d.ts.map +1 -1
- package/dist/src/bitgo/safe/safe.js +5 -10
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +6 -2
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +18 -14
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts +0 -19
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.js +4 -64
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +4 -2
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.js +19 -6
- package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts +0 -8
- package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.js +4 -23
- package/dist/src/bitgo/utils/tss/eddsa/types.d.ts +3 -0
- package/dist/src/bitgo/utils/tss/eddsa/types.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/types.js +1 -1
- package/dist/src/bitgo/utils/tss/index.d.ts +1 -0
- package/dist/src/bitgo/utils/tss/index.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/index.js +2 -1
- package/dist/src/bitgo/utils/tss/keyShareEnvelope.d.ts +40 -0
- package/dist/src/bitgo/utils/tss/keyShareEnvelope.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/keyShareEnvelope.js +103 -0
- package/dist/test/unit/bitgo/safe/safe.js +15 -2
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.js +20 -1
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.js +4 -3
- package/dist/test/unit/bitgo/utils/tss/keyShareEnvelope.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/keyShareEnvelope.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/keyShareEnvelope.js +83 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -8
|
@@ -6,25 +6,6 @@ import { EncryptionVersion } from '../../../../api';
|
|
|
6
6
|
import { WebauthnKeyEncryptionInfo } from '../../../keychain';
|
|
7
7
|
import { EcdsaMPCv2Utils } from './ecdsaMPCv2';
|
|
8
8
|
import { EcdsaMPCv2DeriveKeySendFn } from './ecdsaMPCv2KeyGenSender';
|
|
9
|
-
/**
|
|
10
|
-
* Combines the signing keyshare with the VRF keyshare into the `encryptedPrv` envelope
|
|
11
|
-
* (`base64(cborEncode({version, prvKeyShare, vrf}))` once the caller base64-encodes the
|
|
12
|
-
* returned buffers). The same container wraps the reduced signing share for
|
|
13
|
-
* `reducedEncryptedPrv`.
|
|
14
|
-
*/
|
|
15
|
-
export declare function buildVrfKeyEnvelopes(privateMaterial: Buffer, reducedPrivateMaterial: Buffer, vrfKeyShare: Buffer): {
|
|
16
|
-
envelope: Buffer;
|
|
17
|
-
reducedEnvelope: Buffer;
|
|
18
|
-
};
|
|
19
|
-
/**
|
|
20
|
-
* Parses a decrypted root blob produced by {@link buildVrfKeyEnvelopes}: a CBOR
|
|
21
|
-
* envelope `{version: 1, prvKeyShare, vrf}`. Returns the signing and VRF keyshares
|
|
22
|
-
* as Buffers. Throws if the blob is not a valid VRF key envelope.
|
|
23
|
-
*/
|
|
24
|
-
export declare function parseVrfKeyEnvelopes(decryptedBlob: string): {
|
|
25
|
-
signing: Buffer;
|
|
26
|
-
vrf: Buffer;
|
|
27
|
-
};
|
|
28
9
|
/**
|
|
29
10
|
* Encodes a hardened derivation index as the byte path the DKLS hard-derive wasm
|
|
30
11
|
* expects: one big-endian u32 with the hardened bit (0x80000000) set — i.e. the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecdsaVrfMPCv2.d.ts","sourceRoot":"","sources":["../../../../../../src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,SAAS,EAAW,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"ecdsaVrfMPCv2.d.ts","sourceRoot":"","sources":["../../../../../../src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,SAAS,EAAW,MAAM,yBAAyB,CAAC;AAG1F,OAAO,EAEL,yBAAyB,EAEzB,yBAAyB,EACzB,yBAAyB,EAI1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAG9D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EACL,yBAAyB,EAG1B,MAAM,0BAA0B,CAAC;AAwClC;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAKhE;AAED;;;;;;;;;GASG;AACH,qBAAa,kBAAmB,SAAQ,eAAe;IACrD,kBAAkB;IACZ,eAAe,CAAC,MAAM,EAAE;QAC5B,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,8BAA8B,CAAC,EAAE,MAAM,CAAC;QACxC,QAAQ,CAAC,EAAE,wBAAwB,CAAC;QACpC,YAAY,CAAC,EAAE,yBAAyB,CAAC;QACzC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;QAEtC,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAua7B;;OAEG;IACG,4BAA4B,CAChC,QAAQ,EAAE,yBAAyB,CAAC,yBAAyB,CAAC,EAC9D,gBAAgB,EAAE,MAAM,EACxB,OAAO,EAAE,SAAS,CAAC,eAAe,EAClC,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,yBAAyB,CAAC;IAmBrC;;OAEG;IACG,4BAA4B,CAChC,QAAQ,EAAE,yBAAyB,CAAC,yBAAyB,CAAC,EAC9D,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,SAAS,CAAC,eAAe,GACjC,OAAO,CAAC,yBAAyB,CAAC;IAYrC;;OAEG;IACG,4BAA4B,CAChC,QAAQ,EAAE,yBAAyB,CAAC,yBAAyB,CAAC,EAC9D,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,yBAAyB,CAAC;IAKrC;;OAEG;IACG,wBAAwB,CAAC,MAAM,EAAE;QACrC,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,uCAAuC;QACvC,WAAW,EAAE,MAAM,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;QACxB,aAAa,EAAE,MAAM,CAAC;QACtB,eAAe,EAAE,MAAM,CAAC;QACxB,gBAAgB,EAAE,MAAM,CAAC;QACzB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,8BAA8B,CAAC,EAAE,MAAM,CAAC;QACxC,YAAY,CAAC,EAAE,yBAAyB,CAAC;QACzC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;KACvC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA6I7B,OAAO,CAAC,wBAAwB;CAgBjC"}
|
|
@@ -4,29 +4,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.EcdsaVrfMPCv2Utils = void 0;
|
|
7
|
-
exports.buildVrfKeyEnvelopes = buildVrfKeyEnvelopes;
|
|
8
|
-
exports.parseVrfKeyEnvelopes = parseVrfKeyEnvelopes;
|
|
9
7
|
exports.hardenedDerivationPath = hardenedDerivationPath;
|
|
10
8
|
const sdk_lib_mpc_1 = require("@bitgo-beta/sdk-lib-mpc");
|
|
11
|
-
const cbor_x_1 = require("cbor-x");
|
|
12
9
|
const assert_1 = __importDefault(require("assert"));
|
|
13
10
|
const io_ts_types_1 = require("io-ts-types");
|
|
14
11
|
const public_types_1 = require("@bitgo/public-types");
|
|
15
12
|
const opengpgUtils_1 = require("../../opengpgUtils");
|
|
16
13
|
const bitgoPubKeys_1 = require("../../../tss/bitgoPubKeys");
|
|
14
|
+
const keyShareEnvelope_1 = require("../keyShareEnvelope");
|
|
17
15
|
const ecdsaMPCv2_1 = require("./ecdsaMPCv2");
|
|
18
16
|
const ecdsaMPCv2KeyGenSender_1 = require("./ecdsaMPCv2KeyGenSender");
|
|
19
17
|
const typesMPCv2_1 = require("./typesMPCv2");
|
|
20
|
-
/**
|
|
21
|
-
* Version field of the `encryptedPrv` envelope used when a ceremony produces both a
|
|
22
|
-
* signing keyshare and a VRF keyshare. The plaintext handed to encrypt() is
|
|
23
|
-
* `base64(cborEncode(envelope))`, keeping it a single opaque base64 token exactly as
|
|
24
|
-
* the ordinary MPCv2 format does.
|
|
25
|
-
*/
|
|
26
|
-
const VRF_KEY_ENVELOPE_VERSION = 1;
|
|
27
|
-
function isVrfKeyEnvelope(value) {
|
|
28
|
-
return typeof value === 'object' && value !== null && 'version' in value && 'prvKeyShare' in value && 'vrf' in value;
|
|
29
|
-
}
|
|
30
18
|
function serializeVrfMessages(messages) {
|
|
31
19
|
const transfers = [
|
|
32
20
|
...messages.broadcastMessages.map((m) => ({ from: m.from, payload: Buffer.from(m.payload).toString('base64') })),
|
|
@@ -49,54 +37,6 @@ function deserializeVrfMessages(blob, forParty) {
|
|
|
49
37
|
.map((t) => ({ from: t.from, to: t.to, payload: new Uint8Array(Buffer.from(t.payload, 'base64')) })),
|
|
50
38
|
};
|
|
51
39
|
}
|
|
52
|
-
/**
|
|
53
|
-
* Combines the signing keyshare with the VRF keyshare into the `encryptedPrv` envelope
|
|
54
|
-
* (`base64(cborEncode({version, prvKeyShare, vrf}))` once the caller base64-encodes the
|
|
55
|
-
* returned buffers). The same container wraps the reduced signing share for
|
|
56
|
-
* `reducedEncryptedPrv`.
|
|
57
|
-
*/
|
|
58
|
-
function buildVrfKeyEnvelopes(privateMaterial, reducedPrivateMaterial, vrfKeyShare) {
|
|
59
|
-
const envelope = (0, cbor_x_1.encode)({
|
|
60
|
-
version: VRF_KEY_ENVELOPE_VERSION,
|
|
61
|
-
prvKeyShare: new Uint8Array(privateMaterial),
|
|
62
|
-
vrf: new Uint8Array(vrfKeyShare),
|
|
63
|
-
});
|
|
64
|
-
const reducedEnvelope = (0, cbor_x_1.encode)({
|
|
65
|
-
version: VRF_KEY_ENVELOPE_VERSION,
|
|
66
|
-
prvKeyShare: new Uint8Array(reducedPrivateMaterial),
|
|
67
|
-
vrf: new Uint8Array(vrfKeyShare),
|
|
68
|
-
});
|
|
69
|
-
return { envelope: Buffer.from(envelope), reducedEnvelope: Buffer.from(reducedEnvelope) };
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Parses a decrypted root blob produced by {@link buildVrfKeyEnvelopes}: a CBOR
|
|
73
|
-
* envelope `{version: 1, prvKeyShare, vrf}`. Returns the signing and VRF keyshares
|
|
74
|
-
* as Buffers. Throws if the blob is not a valid VRF key envelope.
|
|
75
|
-
*/
|
|
76
|
-
function parseVrfKeyEnvelopes(decryptedBlob) {
|
|
77
|
-
let envelope;
|
|
78
|
-
try {
|
|
79
|
-
envelope = (0, cbor_x_1.decode)(Buffer.from(decryptedBlob, 'base64'));
|
|
80
|
-
}
|
|
81
|
-
catch (e) {
|
|
82
|
-
const message = e instanceof Error ? e.message : String(e);
|
|
83
|
-
throw new Error(`Failed to decode safe MPC root key envelope: ${message}`);
|
|
84
|
-
}
|
|
85
|
-
if (!isVrfKeyEnvelope(envelope)) {
|
|
86
|
-
throw new Error('Invalid safe MPC root key envelope: expected version, signing keyshare, and VRF keyshare');
|
|
87
|
-
}
|
|
88
|
-
const { version, prvKeyShare, vrf } = envelope;
|
|
89
|
-
if (version !== VRF_KEY_ENVELOPE_VERSION) {
|
|
90
|
-
throw new Error(`Unsupported safe MPC root key envelope version: ${String(version)}`);
|
|
91
|
-
}
|
|
92
|
-
if (!(prvKeyShare instanceof Uint8Array) || prvKeyShare.length === 0) {
|
|
93
|
-
throw new Error('Safe MPC root key envelope is missing a signing keyshare');
|
|
94
|
-
}
|
|
95
|
-
if (!(vrf instanceof Uint8Array) || vrf.length === 0) {
|
|
96
|
-
throw new Error('Safe MPC root key envelope is missing a VRF keyshare');
|
|
97
|
-
}
|
|
98
|
-
return { signing: Buffer.from(prvKeyShare), vrf: Buffer.from(vrf) };
|
|
99
|
-
}
|
|
100
40
|
/**
|
|
101
41
|
* Encodes a hardened derivation index as the byte path the DKLS hard-derive wasm
|
|
102
42
|
* expects: one big-endian u32 with the hardened bit (0x80000000) set — i.e. the
|
|
@@ -346,8 +286,8 @@ class EcdsaVrfMPCv2Utils extends ecdsaMPCv2_1.EcdsaMPCv2Utils {
|
|
|
346
286
|
const backupCommonKeychain = sdk_lib_mpc_1.DklsTypes.getCommonKeychain(backupPrivateMaterial);
|
|
347
287
|
assert_1.default.equal(bitgoCommonKeychain, userCommonKeychain, 'User and Bitgo Common keychains do not match');
|
|
348
288
|
assert_1.default.equal(bitgoCommonKeychain, backupCommonKeychain, 'Backup and Bitgo Common keychains do not match');
|
|
349
|
-
const { envelope: userEnvelope, reducedEnvelope: userReducedEnvelope } =
|
|
350
|
-
const { envelope: backupEnvelope, reducedEnvelope: backupReducedEnvelope } =
|
|
289
|
+
const { envelope: userEnvelope, reducedEnvelope: userReducedEnvelope } = (0, keyShareEnvelope_1.buildSafeMpcKeyEnvelopes)(userPrivateMaterial, userReducedPrivateMaterial, userVrfKeyShare);
|
|
290
|
+
const { envelope: backupEnvelope, reducedEnvelope: backupReducedEnvelope } = (0, keyShareEnvelope_1.buildSafeMpcKeyEnvelopes)(backupPrivateMaterial, backupReducedPrivateMaterial, backupVrfKeyShare);
|
|
351
291
|
const encryptionSession = params.encryptionVersion === 2 ? await this.bitgo.createEncryptionSession(params.passphrase) : undefined;
|
|
352
292
|
try {
|
|
353
293
|
const userKeychainPromise = this.createParticipantKeychain(typesMPCv2_1.MPCv2PartiesEnum.USER, bitgoCommonKeychain, userEnvelope, userReducedEnvelope, params.passphrase, params.originalPasscodeEncryptionCode, params.webauthnInfo, encryptionSession, params.encryptionVersion, params.enterprise, params.safeId);
|
|
@@ -499,4 +439,4 @@ class EcdsaVrfMPCv2Utils extends ecdsaMPCv2_1.EcdsaMPCv2Utils {
|
|
|
499
439
|
}
|
|
500
440
|
}
|
|
501
441
|
exports.EcdsaVrfMPCv2Utils = EcdsaVrfMPCv2Utils;
|
|
502
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNkc2FWcmZNUEN2Mi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby91dGlscy90c3MvZWNkc2EvZWNkc2FWcmZNUEN2Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUF3RkEsb0RBZ0JDO0FBT0Qsb0RBc0JDO0FBUUQsd0RBS0M7QUFsSkQseURBQTBGO0FBQzFGLG1DQUF3QztBQUN4QyxvREFBNEI7QUFDNUIsNkNBQTZDO0FBQzdDLHNEQVM2QjtBQUk3QixxREFBd0Q7QUFFeEQsNERBQThGO0FBQzlGLDZDQUErQztBQUMvQyxxRUFJa0M7QUFDbEMsNkNBQThFO0FBRTlFOzs7OztHQUtHO0FBQ0gsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLENBQUM7QUFPbkMsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFjO0lBQ3RDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksU0FBUyxJQUFJLEtBQUssSUFBSSxhQUFhLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUM7QUFDdkgsQ0FBQztBQWVELFNBQVMsb0JBQW9CLENBQUMsUUFBd0M7SUFDcEUsTUFBTSxTQUFTLEdBQXlCO1FBQ3RDLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hILEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO1lBQ1osRUFBRSxFQUFFLENBQUMsQ0FB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QUFtQixFQUFFLFFBQVEsQ0FBQyxrQkFBa0I7YUFDakQsQ0FBQyxDQUFDO1lBQ0gsT0FBTztnQkFDTCxXQUFXLEVBQUUsSUFBSSxxQkFBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLDZCQUFnQixDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLGlCQUFpQixDQUFDO2dCQUNwRyxhQUFhLEVBQUUsSUFBSSxxQkFBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLDZCQUFnQixDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLG1CQUFtQixDQUFDO2FBQzNHLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTztZQUNMLFdBQVcsRUFBRSxJQUFJLHFCQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsNkJBQWdCLENBQUMsSUFBSSxDQUFDO1lBQ3pELGFBQWEsRUFBRSxJQUFJLHFCQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsNkJBQWdCLENBQUMsTUFBTSxDQUFDO1NBQzlELENBQUM7SUFDSixDQUFDO0NBQ0Y7QUExcEJELGdEQTBwQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEa2xzQ29tbXMsIERrbHNEa2csIERrbHNEcnYsIERrbHNUeXBlcywgRGtsc1ZyZiB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1saWItbXBjJztcbmltcG9ydCB7IGRlY29kZSwgZW5jb2RlIH0gZnJvbSAnY2Jvci14JztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IE5vbkVtcHR5U3RyaW5nIH0gZnJvbSAnaW8tdHMtdHlwZXMnO1xuaW1wb3J0IHtcbiAgTVBDdjJEZXJpdmVSb3VuZDFSZXF1ZXN0LFxuICBNUEN2MkRlcml2ZVJvdW5kMVJlc3BvbnNlLFxuICBNUEN2MkRlcml2ZVJvdW5kMlJlcXVlc3QsXG4gIE1QQ3YyRGVyaXZlUm91bmQyUmVzcG9uc2UsXG4gIE1QQ3YyRGVyaXZlUm91bmQzUmVzcG9uc2UsXG4gIE1QQ3YyS2V5R2VuUm91bmQxUmVzcG9uc2UsXG4gIE1QQ3YyS2V5R2VuUm91bmQyUmVzcG9uc2UsXG4gIE1QQ3YyS2V5R2VuU3RhdGVFbnVtLFxufSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCB7IEtleWNoYWluc1RyaXBsZXQgfSBmcm9tICcuLi8uLi8uLi9iYXNlQ29pbic7XG5pbXBvcnQgeyBEZWNyeXB0ZWRSZXRyb2ZpdFBheWxvYWQgfSBmcm9tICcuLi8uLi8uLi9rZXljaGFpbi9pS2V5Y2hhaW5zJztcbmltcG9ydCB7IEVuY3J5cHRpb25WZXJzaW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXBpJztcbmltcG9ydCB7IGdlbmVyYXRlR1BHS2V5UGFpciB9IGZyb20gJy4uLy4uL29wZW5ncGdVdGlscyc7XG5pbXBvcnQgeyBXZWJhdXRobktleUVuY3J5cHRpb25JbmZvIH0gZnJvbSAnLi4vLi4vLi4va2V5Y2hhaW4nO1xuaW1wb3J0IHsgZW52UmVxdWlyZXNCaXRnb1B1YkdwZ0tleUNvbmZpZywgaXNCaXRnb01wY1B1YktleSB9IGZyb20gJy4uLy4uLy4uL3Rzcy9iaXRnb1B1YktleXMnO1xuaW1wb3J0IHsgRWNkc2FNUEN2MlV0aWxzIH0gZnJvbSAnLi9lY2RzYU1QQ3YyJztcbmltcG9ydCB7XG4gIEVjZHNhTVBDdjJEZXJpdmVLZXlTZW5kRm4sXG4gIEtleUdlblNlbmRlckZvckVudGVycHJpc2UsXG4gIEtleUdlblNlbmRlckZvclNhZmVDaGlsZCxcbn0gZnJvbSAnLi9lY2RzYU1QQ3YyS2V5R2VuU2VuZGVyJztcbmltcG9ydCB7IE1QQ3YyUGFydGllc0VudW0sIE1wY1YyVnJmS2V5R2VuUmVzcG9uc2VGaWVsZHMgfSBmcm9tICcuL3R5cGVzTVBDdjInO1xuXG4vKipcbiAqIFZlcnNpb24gZmllbGQgb2YgdGhlIGBlbmNyeXB0ZWRQcnZgIGVudmVsb3BlIHVzZWQgd2hlbiBhIGNlcmVtb255IHByb2R1Y2VzIGJvdGggYVxuICogc2lnbmluZyBrZXlzaGFyZSBhbmQgYSBWUkYga2V5c2hhcmUuIFRoZSBwbGFpbnRleHQgaGFuZGVkIHRvIGVuY3J5cHQoKSBpc1xuICogYGJhc2U2NChjYm9yRW5jb2RlKGVudmVsb3BlKSlgLCBrZWVwaW5nIGl0IGEgc2luZ2xlIG9wYXF1ZSBiYXNlNjQgdG9rZW4gZXhhY3RseSBhc1xuICogdGhlIG9yZGluYXJ5IE1QQ3YyIGZvcm1hdCBkb2VzLlxuICovXG5jb25zdCBWUkZfS0VZX0VOVkVMT1BFX1ZFUlNJT04gPSAxO1xudHlwZSBWcmZLZXlFbnZlbG9wZSA9IHtcbiAgdmVyc2lvbjogdW5rbm93bjtcbiAgcHJ2S2V5U2hhcmU6IHVua25vd247XG4gIHZyZjogdW5rbm93bjtcbn07XG5cbmZ1bmN0aW9uIGlzVnJmS2V5RW52ZWxvcGUodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBWcmZLZXlFbnZlbG9wZSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICd2ZXJzaW9uJyBpbiB2YWx1ZSAmJiAncHJ2S2V5U2hhcmUnIGluIHZhbHVlICYmICd2cmYnIGluIHZhbHVlO1xufVxuXG4vKipcbiAqIFdpcmUgZm9ybWF0IGZvciBWUkYgREtHIG1lc3NhZ2VzIHJpZGluZyB0aGUgTVBDdjItUjEvUjIgcGF5bG9hZHM6IGFuIG9wYXF1ZSBibG9iLFxuICogYGJhc2U2NChKU09OLnN0cmluZ2lmeShWcmZNZXNzYWdlVHJhbnNmZXJbXSkpYCwgY2FycnlpbmcgdGhlIHBhcnR5J3MgZnVsbCBiYXRjaCBvZlxuICogZW1pdHRlZCBtZXNzYWdlcy4gVGhlIFZSRiBES0cgZW1pdHMgYnJvYWRjYXN0IGNvbW1pdG1lbnRzIChSMSkgYW5kIHBlci1yZWNpcGllbnRcbiAqIG9wZW5pbmcgbWVzc2FnZXMgYWRkcmVzc2VkIHRvIGVhY2ggcGFydHkgaW5jbHVkaW5nIHRoZSBzZW5kZXIgKFIyKSwgc28gdGhlIHJlY2VpdmluZ1xuICogc2lkZSByb3V0ZXMgYnkgYHRvYCBhbmQga2VlcHMgbWVzc2FnZXMgYWRkcmVzc2VkIHRvIGl0c2VsZi5cbiAqL1xuaW50ZXJmYWNlIFZyZk1lc3NhZ2VUcmFuc2ZlciB7XG4gIGZyb206IG51bWJlcjtcbiAgdG8/OiBudW1iZXI7XG4gIHBheWxvYWQ6IHN0cmluZzsgLy8gYmFzZTY0XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZVZyZk1lc3NhZ2VzKG1lc3NhZ2VzOiBEa2xzVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZXMpOiBzdHJpbmcge1xuICBjb25zdCB0cmFuc2ZlcnM6IFZyZk1lc3NhZ2VUcmFuc2ZlcltdID0gW1xuICAgIC4uLm1lc3NhZ2VzLmJyb2FkY2FzdE1lc3NhZ2VzLm1hcCgobSkgPT4gKHsgZnJvbTogbS5mcm9tLCBwYXlsb2FkOiBCdWZmZXIuZnJvbShtLnBheWxvYWQpLnRvU3RyaW5nKCdiYXNlNjQnKSB9KSksXG4gICAgLi4ubWVzc2FnZXMucDJwTWVzc2FnZXMubWFwKChtKSA9PiAoe1xuICAgICAgZnJvbTogbS5mcm9tLFxuICAgICAgdG86IG0udG8sXG4gICAgICBwYXlsb2FkOiBCdWZmZXIuZnJvbShtLnBheWxvYWQpLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICB9KSksXG4gIF07XG4gIHJldHVybiBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeSh0cmFuc2ZlcnMpKS50b1N0cmluZygnYmFzZTY0Jyk7XG59XG5cbmZ1bmN0aW9uIGRlc2VyaWFsaXplVnJmTWVzc2FnZXMoYmxvYjogc3RyaW5nLCBmb3JQYXJ0eTogbnVtYmVyKTogRGtsc1R5cGVzLkRlc2VyaWFsaXplZE1lc3NhZ2VzIHtcbiAgY29uc3QgdHJhbnNmZXJzOiBWcmZNZXNzYWdlVHJhbnNmZXJbXSA9IEpTT04ucGFyc2UoQnVmZmVyLmZyb20oYmxvYiwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCkpO1xuICByZXR1cm4ge1xuICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiB0cmFuc2ZlcnNcbiAgICAgIC5maWx0ZXIoKHQpID0+IHQudG8gPT09IHVuZGVmaW5lZClcbiAgICAgIC5tYXAoKHQpID0+ICh7IGZyb206IHQuZnJvbSwgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20odC5wYXlsb2FkLCAnYmFzZTY0JykpIH0pKSxcbiAgICBwMnBNZXNzYWdlczogdHJhbnNmZXJzXG4gICAgICAuZmlsdGVyKCh0KTogdCBpcyBWcmZNZXNzYWdlVHJhbnNmZXIgJiB7IHRvOiBudW1iZXIgfSA9PiB0LnRvID09PSBmb3JQYXJ0eSlcbiAgICAgIC5tYXAoKHQpID0+ICh7IGZyb206IHQuZnJvbSwgdG86IHQudG8sIHBheWxvYWQ6IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKHQucGF5bG9hZCwgJ2Jhc2U2NCcpKSB9KSksXG4gIH07XG59XG5cbi8qKlxuICogQ29tYmluZXMgdGhlIHNpZ25pbmcga2V5c2hhcmUgd2l0aCB0aGUgVlJGIGtleXNoYXJlIGludG8gdGhlIGBlbmNyeXB0ZWRQcnZgIGVudmVsb3BlXG4gKiAoYGJhc2U2NChjYm9yRW5jb2RlKHt2ZXJzaW9uLCBwcnZLZXlTaGFyZSwgdnJmfSkpYCBvbmNlIHRoZSBjYWxsZXIgYmFzZTY0LWVuY29kZXMgdGhlXG4gKiByZXR1cm5lZCBidWZmZXJzKS4gVGhlIHNhbWUgY29udGFpbmVyIHdyYXBzIHRoZSByZWR1Y2VkIHNpZ25pbmcgc2hhcmUgZm9yXG4gKiBgcmVkdWNlZEVuY3J5cHRlZFBydmAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFZyZktleUVudmVsb3BlcyhcbiAgcHJpdmF0ZU1hdGVyaWFsOiBCdWZmZXIsXG4gIHJlZHVjZWRQcml2YXRlTWF0ZXJpYWw6IEJ1ZmZlcixcbiAgdnJmS2V5U2hhcmU6IEJ1ZmZlclxuKTogeyBlbnZlbG9wZTogQnVmZmVyOyByZWR1Y2VkRW52ZWxvcGU6IEJ1ZmZlciB9IHtcbiAgY29uc3QgZW52ZWxvcGUgPSBlbmNvZGUoe1xuICAgIHZlcnNpb246IFZSRl9LRVlfRU5WRUxPUEVfVkVSU0lPTixcbiAgICBwcnZLZXlTaGFyZTogbmV3IFVpbnQ4QXJyYXkocHJpdmF0ZU1hdGVyaWFsKSxcbiAgICB2cmY6IG5ldyBVaW50OEFycmF5KHZyZktleVNoYXJlKSxcbiAgfSk7XG4gIGNvbnN0IHJlZHVjZWRFbnZlbG9wZSA9IGVuY29kZSh7XG4gICAgdmVyc2lvbjogVlJGX0tFWV9FTlZFTE9QRV9WRVJTSU9OLFxuICAgIHBydktleVNoYXJlOiBuZXcgVWludDhBcnJheShyZWR1Y2VkUHJpdmF0ZU1hdGVyaWFsKSxcbiAgICB2cmY6IG5ldyBVaW50OEFycmF5KHZyZktleVNoYXJlKSxcbiAgfSk7XG4gIHJldHVybiB7IGVudmVsb3BlOiBCdWZmZXIuZnJvbShlbnZlbG9wZSksIHJlZHVjZWRFbnZlbG9wZTogQnVmZmVyLmZyb20ocmVkdWNlZEVudmVsb3BlKSB9O1xufVxuXG4vKipcbiAqIFBhcnNlcyBhIGRlY3J5cHRlZCByb290IGJsb2IgcHJvZHVjZWQgYnkge0BsaW5rIGJ1aWxkVnJmS2V5RW52ZWxvcGVzfTogYSBDQk9SXG4gKiBlbnZlbG9wZSBge3ZlcnNpb246IDEsIHBydktleVNoYXJlLCB2cmZ9YC4gUmV0dXJucyB0aGUgc2lnbmluZyBhbmQgVlJGIGtleXNoYXJlc1xuICogYXMgQnVmZmVycy4gVGhyb3dzIGlmIHRoZSBibG9iIGlzIG5vdCBhIHZhbGlkIFZSRiBrZXkgZW52ZWxvcGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVZyZktleUVudmVsb3BlcyhkZWNyeXB0ZWRCbG9iOiBzdHJpbmcpOiB7IHNpZ25pbmc6IEJ1ZmZlcjsgdnJmOiBCdWZmZXIgfSB7XG4gIGxldCBlbnZlbG9wZTogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICBlbnZlbG9wZSA9IGRlY29kZShCdWZmZXIuZnJvbShkZWNyeXB0ZWRCbG9iLCAnYmFzZTY0JykpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBkZWNvZGUgc2FmZSBNUEMgcm9vdCBrZXkgZW52ZWxvcGU6ICR7bWVzc2FnZX1gKTtcbiAgfVxuICBpZiAoIWlzVnJmS2V5RW52ZWxvcGUoZW52ZWxvcGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNhZmUgTVBDIHJvb3Qga2V5IGVudmVsb3BlOiBleHBlY3RlZCB2ZXJzaW9uLCBzaWduaW5nIGtleXNoYXJlLCBhbmQgVlJGIGtleXNoYXJlJyk7XG4gIH1cbiAgY29uc3QgeyB2ZXJzaW9uLCBwcnZLZXlTaGFyZSwgdnJmIH0gPSBlbnZlbG9wZTtcbiAgaWYgKHZlcnNpb24gIT09IFZSRl9LRVlfRU5WRUxPUEVfVkVSU0lPTikge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgc2FmZSBNUEMgcm9vdCBrZXkgZW52ZWxvcGUgdmVyc2lvbjogJHtTdHJpbmcodmVyc2lvbil9YCk7XG4gIH1cbiAgaWYgKCEocHJ2S2V5U2hhcmUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB8fCBwcnZLZXlTaGFyZS5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NhZmUgTVBDIHJvb3Qga2V5IGVudmVsb3BlIGlzIG1pc3NpbmcgYSBzaWduaW5nIGtleXNoYXJlJyk7XG4gIH1cbiAgaWYgKCEodnJmIGluc3RhbmNlb2YgVWludDhBcnJheSkgfHwgdnJmLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU2FmZSBNUEMgcm9vdCBrZXkgZW52ZWxvcGUgaXMgbWlzc2luZyBhIFZSRiBrZXlzaGFyZScpO1xuICB9XG4gIHJldHVybiB7IHNpZ25pbmc6IEJ1ZmZlci5mcm9tKHBydktleVNoYXJlKSwgdnJmOiBCdWZmZXIuZnJvbSh2cmYpIH07XG59XG5cbi8qKlxuICogRW5jb2RlcyBhIGhhcmRlbmVkIGRlcml2YXRpb24gaW5kZXggYXMgdGhlIGJ5dGUgcGF0aCB0aGUgREtMUyBoYXJkLWRlcml2ZSB3YXNtXG4gKiBleHBlY3RzOiBvbmUgYmlnLWVuZGlhbiB1MzIgd2l0aCB0aGUgaGFyZGVuZWQgYml0ICgweDgwMDAwMDAwKSBzZXQg4oCUIGkuZS4gdGhlXG4gKiBjaGlsZCBwYXRoIGBtLzxpbmRleD4nYC4gVGhlIHNlcnZlciBkZXJpdmVzIHRoZSBzYW1lIGhhcmRlbmVkIHBhdGggZnJvbSB0aGVcbiAqIGBkZXJpdmF0aW9uSW5kZXhgIGl0IHJlY2VpdmVzIG9uIHJvdW5kIDEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXJkZW5lZERlcml2YXRpb25QYXRoKGluZGV4OiBudW1iZXIpOiBVaW50OEFycmF5IHtcbiAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGluZGV4KSB8fCBpbmRleCA8IDAgfHwgaW5kZXggPiAweDdmZmZmZmZmKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRlcml2YXRpb24gaW5kZXg6ICR7aW5kZXh9YCk7XG4gIH1cbiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KFsweDgwIHwgKGluZGV4ID4+PiAyNCksIChpbmRleCA+Pj4gMTYpICYgMHhmZiwgKGluZGV4ID4+PiA4KSAmIDB4ZmYsIGluZGV4ICYgMHhmZl0pO1xufVxuXG4vKipcbiAqIEVjZHNhTVBDdjJVdGlscyB2YXJpYW50IHRoYXQgcnVucyB0aGUgUmlzdHJldHRvIFZSRiBES0cgYWxvbmdzaWRlIHRoZSBzaWduaW5nIERLTFNcbiAqIERLRyBpbnNpZGUgdGhlIHNhbWUgTVBDdjIga2V5Z2VuIHJvdW5kcywgZm9yIHNhZmUgTVBDIHJvb3QgY3JlYXRpb24uXG4gKlxuICogVGhlIHJvdW5kIGVudW0gaXMgdW5jaGFuZ2VkOiB0aGUgVlJGIGNvbW1pdG1lbnQgcmlkZXMgTVBDdjItUjEsIHRoZSBvcGVuaW5nIHJpZGVzXG4gKiBNUEN2Mi1SMiwgYW5kIHRoZSBWUkYgREtHIGZpbmFsaXplcyBsb2NhbGx5IGJlZm9yZSBNUEN2Mi1SMy4gVlJGIG1lc3NhZ2VzIHRyYXZlbCBhc1xuICogb3BhcXVlIGJhc2U2NCBmaWVsZHMgb24gdGhlIHJvdW5kIHBheWxvYWRzLCBuZXZlciB0aHJvdWdoIHRoZSBES0xTIGJyb2FkY2FzdC9wMnAgc2xvdHMuXG4gKiBBdCB0aGUgZW5kLCB0aGUgc2lnbmluZyBhbmQgVlJGIGtleXNoYXJlcyBhcmUgY29tYmluZWQgaW50byBhIHNpbmdsZSBDQk9SIGVudmVsb3BlXG4gKiBiZWZvcmUgZW5jcnlwdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEVjZHNhVnJmTVBDdjJVdGlscyBleHRlbmRzIEVjZHNhTVBDdjJVdGlscyB7XG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBhc3luYyBjcmVhdGVLZXljaGFpbnMocGFyYW1zOiB7XG4gICAgcGFzc3BocmFzZTogc3RyaW5nO1xuICAgIGVudGVycHJpc2U6IHN0cmluZztcbiAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGU/OiBzdHJpbmc7XG4gICAgcmV0cm9maXQ/OiBEZWNyeXB0ZWRSZXRyb2ZpdFBheWxvYWQ7XG4gICAgd2ViYXV0aG5JbmZvPzogV2ViYXV0aG5LZXlFbmNyeXB0aW9uSW5mbztcbiAgICBlbmNyeXB0aW9uVmVyc2lvbj86IEVuY3J5cHRpb25WZXJzaW9uO1xuICAgIC8vIFRhZ3MgdGhlIHJlc3VsdGluZyB1c2VyL2JhY2t1cC9iaXRnbyByb290IGtleXMgd2l0aCB0aGlzIHNhZmUuXG4gICAgc2FmZUlkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPEtleWNoYWluc1RyaXBsZXQ+IHtcbiAgICBjb25zdCB7IHVzZXJTZXNzaW9uLCBiYWNrdXBTZXNzaW9uIH0gPSB0aGlzLmNyZWF0ZVNpZ25pbmdEa2dTZXNzaW9ucyhwYXJhbXMucmV0cm9maXQpO1xuICAgIGNvbnN0IHVzZXJWcmZTZXNzaW9uID0gbmV3IERrbHNWcmYuVnJmRGtnKDMsIDIsIE1QQ3YyUGFydGllc0VudW0uVVNFUik7XG4gICAgY29uc3QgYmFja3VwVnJmU2Vzc2lvbiA9IG5ldyBEa2xzVnJmLlZyZkRrZygzLCAyLCBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCk7XG5cbiAgICBjb25zdCB1c2VyR3BnS2V5ID0gYXdhaXQgZ2VuZXJhdGVHUEdLZXlQYWlyKCdzZWNwMjU2azEnKTtcbiAgICBjb25zdCBiYWNrdXBHcGdLZXkgPSBhd2FpdCBnZW5lcmF0ZUdQR0tleVBhaXIoJ3NlY3AyNTZrMScpO1xuXG4gICAgLy8gR2V0IHRoZSBCaXRHbyBwdWJsaWMga2V5IGJhc2VkIG9uIHVzZXIvZW50ZXJwcmlzZSBmZWF0dXJlIGZsYWdzXG4gICAgLy8gSWYgaXQgZG9lc24ndCB3b3JrLCB1c2UgdGhlIGRlZmF1bHQgcHVibGljIGtleSBmcm9tIHRoZSBjb25zdGFudHNcbiAgICBjb25zdCB7IG1wY3YyUHVibGljS2V5IH0gPSBhd2FpdCB0aGlzLmdldEJpdGdvR3BnUHVia2V5QmFzZWRPbkZlYXR1cmVGbGFncyhwYXJhbXMuZW50ZXJwcmlzZSwgdHJ1ZSk7XG4gICAgY29uc3QgbXBjdjJLZXkgPSBtcGN2MlB1YmxpY0tleSA/PyB0aGlzLmJpdGdvTVBDdjJQdWJsaWNHcGdLZXk7XG4gICAgYXNzZXJ0KG1wY3YyS2V5LCAnRmFpbGVkIHRvIGdldCBCaXRHbyBNUEN2MiBHUEcgcHVibGljIGtleScpO1xuICAgIGNvbnN0IGJpdGdvUHVibGljR3BnS2V5ID0gbXBjdjJLZXkuYXJtb3IoKTtcblxuICAgIGlmIChlbnZSZXF1aXJlc0JpdGdvUHViR3BnS2V5Q29uZmlnKHRoaXMuYml0Z28uZ2V0RW52KCkpKSB7XG4gICAgICAvLyBFbnN1cmUgdGhlIHB1YmxpYyBrZXkgaXMgb25lIG9mIHRoZSBleHBlY3RlZCBCaXRHbyBwdWJsaWMga2V5cyB3aGVuIGluIHRlc3Qgb3IgcHJvZC5cbiAgICAgIGFzc2VydChpc0JpdGdvTXBjUHViS2V5KGJpdGdvUHVibGljR3BnS2V5LCAnbXBjdjInKSwgJ0ludmFsaWQgQml0R28gR1BHIHB1YmxpYyBrZXknKTtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyR3BnUHJ2S2V5OiBEa2xzVHlwZXMuUGFydHlHcGdLZXkgPSB7XG4gICAgICBwYXJ0eUlkOiBNUEN2MlBhcnRpZXNFbnVtLlVTRVIsXG4gICAgICBncGdLZXk6IHVzZXJHcGdLZXkucHJpdmF0ZUtleSxcbiAgICB9O1xuICAgIGNvbnN0IGJhY2t1cEdwZ1BydktleTogRGtsc1R5cGVzLlBhcnR5R3BnS2V5ID0ge1xuICAgICAgcGFydHlJZDogTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVAsXG4gICAgICBncGdLZXk6IGJhY2t1cEdwZ0tleS5wcml2YXRlS2V5LFxuICAgIH07XG4gICAgY29uc3QgYml0Z29HcGdQdWJLZXk6IERrbHNUeXBlcy5QYXJ0eUdwZ0tleSA9IHtcbiAgICAgIHBhcnR5SWQ6IE1QQ3YyUGFydGllc0VudW0uQklUR08sXG4gICAgICBncGdLZXk6IGJpdGdvUHVibGljR3BnS2V5LFxuICAgIH07XG5cbiAgICAvLyAjcmVnaW9uIHJvdW5kIDFcbiAgICBjb25zdCB1c2VyUm91bmQxQnJvYWRjYXN0TXNnID0gYXdhaXQgdXNlclNlc3Npb24uaW5pdERrZygpO1xuICAgIGNvbnN0IGJhY2t1cFJvdW5kMUJyb2FkY2FzdE1zZyA9IGF3YWl0IGJhY2t1cFNlc3Npb24uaW5pdERrZygpO1xuICAgIGNvbnN0IHVzZXJWcmZSb3VuZDFNc2cgPSBhd2FpdCB1c2VyVnJmU2Vzc2lvbi5pbml0RGtnKCk7XG4gICAgY29uc3QgYmFja3VwVnJmUm91bmQxTXNnID0gYXdhaXQgYmFja3VwVnJmU2Vzc2lvbi5pbml0RGtnKCk7XG5cbiAgICBjb25zdCByb3VuZDFTZXJpYWxpemVkTWVzc2FnZXMgPSBEa2xzVHlwZXMuc2VyaWFsaXplTWVzc2FnZXMoe1xuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFt1c2VyUm91bmQxQnJvYWRjYXN0TXNnLCBiYWNrdXBSb3VuZDFCcm9hZGNhc3RNc2ddLFxuICAgICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgIH0pO1xuICAgIGNvbnN0IHJvdW5kMU1lc3NhZ2VzID0gYXdhaXQgRGtsc0NvbW1zLmVuY3J5cHRBbmRBdXRoT3V0Z29pbmdNZXNzYWdlcyhcbiAgICAgIHJvdW5kMVNlcmlhbGl6ZWRNZXNzYWdlcyxcbiAgICAgIFtiaXRnb0dwZ1B1YktleV0sXG4gICAgICBbdXNlckdwZ1BydktleSwgYmFja3VwR3BnUHJ2S2V5XVxuICAgICk7XG4gICAgY29uc3QgdXNlck1zZzEgPSByb3VuZDFNZXNzYWdlcy5icm9hZGNhc3RNZXNzYWdlcy5maW5kKChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uVVNFUik/LnBheWxvYWQ7XG4gICAgY29uc3QgYmFja3VwTXNnMSA9IHJvdW5kMU1lc3NhZ2VzLmJyb2FkY2FzdE1lc3NhZ2VzLmZpbmQoKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVApPy5wYXlsb2FkO1xuICAgIGFzc2VydCh1c2VyTXNnMSwgJ1VzZXIgbWVzc2FnZSAxIG5vdCBmb3VuZCBpbiBicm9hZGNhc3QgbWVzc2FnZXMnKTtcbiAgICBhc3NlcnQoYmFja3VwTXNnMSwgJ0JhY2t1cCBtZXNzYWdlIDEgbm90IGZvdW5kIGluIGJyb2FkY2FzdCBtZXNzYWdlcycpO1xuXG4gICAgY29uc3QgdXNlckdwZ1B1YmxpY0tleSA9IHVzZXJHcGdLZXkucHVibGljS2V5O1xuICAgIGNvbnN0IGJhY2t1cEdwZ1B1YmxpY0tleSA9IGJhY2t1cEdwZ0tleS5wdWJsaWNLZXk7XG4gICAgYXNzZXJ0KE5vbkVtcHR5U3RyaW5nLmlzKHVzZXJHcGdQdWJsaWNLZXkpLCAnVXNlciBHUEcgcHVibGljIGtleSBpcyByZXF1aXJlZCcpO1xuICAgIGFzc2VydChOb25FbXB0eVN0cmluZy5pcyhiYWNrdXBHcGdQdWJsaWNLZXkpLCAnQmFja3VwIEdQRyBwdWJsaWMga2V5IGlzIHJlcXVpcmVkJyk7XG4gICAgLy8gS2VlcCBWUkYgbWVzc2FnZXMgb3BhcXVlIG9uIHRoZSBrZXktZ2VuZXJhdGlvbiByZXF1ZXN0LlxuICAgIGNvbnN0IHJvdW5kMVNlbmRlciA9IEtleUdlblNlbmRlckZvckVudGVycHJpc2U8TVBDdjJLZXlHZW5Sb3VuZDFSZXNwb25zZSAmIE1wY1YyVnJmS2V5R2VuUmVzcG9uc2VGaWVsZHM+KFxuICAgICAgdGhpcy5iaXRnbyxcbiAgICAgIHBhcmFtcy5lbnRlcnByaXNlLFxuICAgICAgcGFyYW1zLnNhZmVJZFxuICAgICk7XG4gICAgY29uc3QgeyBzZXNzaW9uSWQsIGJpdGdvTXNnMSwgYml0Z29Ub0JhY2t1cE1zZzIsIGJpdGdvVG9Vc2VyTXNnMiwgYml0Z29WcmZNc2cxIH0gPSBhd2FpdCByb3VuZDFTZW5kZXIoXG4gICAgICBNUEN2MktleUdlblN0YXRlRW51bVsnTVBDdjItUjEnXSxcbiAgICAgIHtcbiAgICAgICAgdXNlck1zZzE6IHsgZnJvbTogTVBDdjJQYXJ0aWVzRW51bS5VU0VSLCAuLi51c2VyTXNnMSB9LFxuICAgICAgICBiYWNrdXBNc2cxOiB7IGZyb206IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQLCAuLi5iYWNrdXBNc2cxIH0sXG4gICAgICAgIHVzZXJHcGdQdWJsaWNLZXksXG4gICAgICAgIGJhY2t1cEdwZ1B1YmxpY0tleSxcbiAgICAgICAgdXNlclZyZk1zZzE6IHNlcmlhbGl6ZVZyZk1lc3NhZ2VzKHVzZXJWcmZSb3VuZDFNc2cpLFxuICAgICAgICBiYWNrdXBWcmZNc2cxOiBzZXJpYWxpemVWcmZNZXNzYWdlcyhiYWNrdXBWcmZSb3VuZDFNc2cpLFxuICAgICAgICB3YWxsZXRJZDogcGFyYW1zLnJldHJvZml0Py53YWxsZXRJZCxcbiAgICAgIH1cbiAgICApO1xuICAgIGFzc2VydChiaXRnb1ZyZk1zZzEsICdCaXRHbyBWUkYgbWVzc2FnZSAxIG5vdCBmb3VuZCBpbiByb3VuZCAxIHJlc3BvbnNlJyk7XG4gICAgLy8gI2VuZHJlZ2lvblxuXG4gICAgLy8gI3JlZ2lvbiByb3VuZCAyXG4gICAgY29uc3QgYml0Z29Sb3VuZDFCcm9hZGNhc3RNZXNzYWdlcyA9IGF3YWl0IERrbHNDb21tcy5kZWNyeXB0QW5kVmVyaWZ5SW5jb21pbmdNZXNzYWdlcyhcbiAgICAgIHsgcDJwTWVzc2FnZXM6IFtdLCBicm9hZGNhc3RNZXNzYWdlczogW3RoaXMuZm9ybWF0Qml0Z29Ccm9hZGNhc3RNZXNzYWdlKGJpdGdvTXNnMSldIH0sXG4gICAgICBbYml0Z29HcGdQdWJLZXldLFxuICAgICAgW3VzZXJHcGdQcnZLZXksIGJhY2t1cEdwZ1BydktleV1cbiAgICApO1xuICAgIGNvbnN0IGJpdGdvUm91bmQxQnJvYWRjYXN0TXNnID0gYml0Z29Sb3VuZDFCcm9hZGNhc3RNZXNzYWdlcy5icm9hZGNhc3RNZXNzYWdlcy5maW5kKFxuICAgICAgKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CSVRHT1xuICAgICk7XG4gICAgYXNzZXJ0KGJpdGdvUm91bmQxQnJvYWRjYXN0TXNnLCAnQml0R28gbWVzc2FnZSAxIG5vdCBmb3VuZCBpbiBicm9hZGNhc3QgbWVzc2FnZXMnKTtcblxuICAgIGNvbnN0IHVzZXJSb3VuZDJQMlBNZXNzYWdlcyA9IHVzZXJTZXNzaW9uLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtEa2xzVHlwZXMuZGVzZXJpYWxpemVCcm9hZGNhc3RNZXNzYWdlKGJpdGdvUm91bmQxQnJvYWRjYXN0TXNnKSwgYmFja3VwUm91bmQxQnJvYWRjYXN0TXNnXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHVzZXJUb0JpdGdvTXNnMiA9IHVzZXJSb3VuZDJQMlBNZXNzYWdlcy5wMnBNZXNzYWdlcy5maW5kKFxuICAgICAgKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5VU0VSICYmIG0udG8gPT09IE1QQ3YyUGFydGllc0VudW0uQklUR09cbiAgICApO1xuICAgIGFzc2VydCh1c2VyVG9CaXRnb01zZzIsICdVc2VyIG1lc3NhZ2UgMiBub3QgZm91bmQgaW4gUDJQIG1lc3NhZ2VzJyk7XG4gICAgY29uc3Qgc2VyaWFsaXplZFVzZXJUb0JpdGdvTXNnMiA9IERrbHNUeXBlcy5zZXJpYWxpemVQMlBNZXNzYWdlKHVzZXJUb0JpdGdvTXNnMik7XG5cbiAgICBjb25zdCBiYWNrdXBSb3VuZDJQMlBNZXNzYWdlcyA9IGJhY2t1cFNlc3Npb24uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgICBwMnBNZXNzYWdlczogW10sXG4gICAgICBicm9hZGNhc3RNZXNzYWdlczogW3VzZXJSb3VuZDFCcm9hZGNhc3RNc2csIERrbHNUeXBlcy5kZXNlcmlhbGl6ZUJyb2FkY2FzdE1lc3NhZ2UoYml0Z29Sb3VuZDFCcm9hZGNhc3RNc2cpXSxcbiAgICB9KTtcbiAgICBjb25zdCBzZXJpYWxpemVkQmFja3VwVG9CaXRnb01zZzIgPSBEa2xzVHlwZXMuc2VyaWFsaXplTWVzc2FnZXMoYmFja3VwUm91bmQyUDJQTWVzc2FnZXMpLnAycE1lc3NhZ2VzLmZpbmQoXG4gICAgICAobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCAmJiBtLnRvID09PSBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPXG4gICAgKTtcbiAgICBhc3NlcnQoc2VyaWFsaXplZEJhY2t1cFRvQml0Z29Nc2cyLCAnQmFja3VwIG1lc3NhZ2UgMiBub3QgZm91bmQgaW4gUDJQIG1lc3NhZ2VzJyk7XG5cbiAgICAvLyBWUkY6IGNvbnN1bWUgQml0R28ncyBhbmQgdGhlIGNvdW50ZXJwYXJ0eSdzIGNvbW1pdG1lbnRzLCBlbWl0IHRoaXMgcGFydHkncyBvcGVuaW5ncy5cbiAgICAvLyBPcGVuaW5ncyBjb21lIGJhY2sgYXMgcDJwIG1lc3NhZ2VzIGFkZHJlc3NlZCB0byBlYWNoIHBhcnR5IChpbmNsdWRpbmcgdGhlIHNlbmRlcikuXG4gICAgY29uc3QgdXNlclZyZlJvdW5kMk1lc3NhZ2VzID0gYXdhaXQgdXNlclZyZlNlc3Npb24uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgICBicm9hZGNhc3RNZXNzYWdlczogW1xuICAgICAgICAuLi5iYWNrdXBWcmZSb3VuZDFNc2cuYnJvYWRjYXN0TWVzc2FnZXMsXG4gICAgICAgIC4uLmRlc2VyaWFsaXplVnJmTWVzc2FnZXMoYml0Z29WcmZNc2cxLCBNUEN2MlBhcnRpZXNFbnVtLlVTRVIpLmJyb2FkY2FzdE1lc3NhZ2VzLFxuICAgICAgXSxcbiAgICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGJhY2t1cFZyZlJvdW5kMk1lc3NhZ2VzID0gYXdhaXQgYmFja3VwVnJmU2Vzc2lvbi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXG4gICAgICAgIC4uLnVzZXJWcmZSb3VuZDFNc2cuYnJvYWRjYXN0TWVzc2FnZXMsXG4gICAgICAgIC4uLmRlc2VyaWFsaXplVnJmTWVzc2FnZXMoYml0Z29WcmZNc2cxLCBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCkuYnJvYWRjYXN0TWVzc2FnZXMsXG4gICAgICBdLFxuICAgICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgcm91bmQyTWVzc2FnZXMgPSBhd2FpdCBEa2xzQ29tbXMuZW5jcnlwdEFuZEF1dGhPdXRnb2luZ01lc3NhZ2VzKFxuICAgICAgeyBwMnBNZXNzYWdlczogW3NlcmlhbGl6ZWRVc2VyVG9CaXRnb01zZzIsIHNlcmlhbGl6ZWRCYWNrdXBUb0JpdGdvTXNnMl0sIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXSB9LFxuICAgICAgW2JpdGdvR3BnUHViS2V5XSxcbiAgICAgIFt1c2VyR3BnUHJ2S2V5LCBiYWNrdXBHcGdQcnZLZXldXG4gICAgKTtcbiAgICBjb25zdCB1c2VyUm91bmQyTXNnID0gcm91bmQyTWVzc2FnZXMucDJwTWVzc2FnZXMuZmluZChcbiAgICAgIChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uVVNFUiAmJiBtLnRvID09PSBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPXG4gICAgKTtcbiAgICBjb25zdCBiYWNrdXBSb3VuZDJNc2cgPSByb3VuZDJNZXNzYWdlcy5wMnBNZXNzYWdlcy5maW5kKFxuICAgICAgKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVAgJiYgbS50byA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CSVRHT1xuICAgICk7XG4gICAgYXNzZXJ0KHVzZXJSb3VuZDJNc2csICdVc2VyIHRvIEJpdGdvIG1lc3NhZ2UgMiBub3QgZm91bmQgaW4gUDJQIG1lc3NhZ2VzJyk7XG4gICAgYXNzZXJ0KHVzZXJSb3VuZDJNc2cuY29tbWl0bWVudCwgJ1VzZXIgdG8gQml0Z28gY29tbWl0bWVudCBub3QgZm91bmQgaW4gUDJQIG1lc3NhZ2VzJyk7XG4gICAgYXNzZXJ0KGJhY2t1cFJvdW5kMk1zZywgJ0JhY2t1cCB0byBCaXRnbyBtZXNzYWdlIDIgbm90IGZvdW5kIGluIFAyUCBtZXNzYWdlcycpO1xuICAgIGFzc2VydChiYWNrdXBSb3VuZDJNc2cuY29tbWl0bWVudCwgJ0JhY2t1cCB0byBCaXRnbyBjb21taXRtZW50IG5vdCBmb3VuZCBpbiBQMlAgbWVzc2FnZXMnKTtcbiAgICBhc3NlcnQoTm9uRW1wdHlTdHJpbmcuaXModXNlclJvdW5kMk1zZy5jb21taXRtZW50KSwgJ1VzZXIgdG8gQml0Z28gY29tbWl0bWVudCBpcyByZXF1aXJlZCcpO1xuICAgIGFzc2VydChOb25FbXB0eVN0cmluZy5pcyhiYWNrdXBSb3VuZDJNc2cuY29tbWl0bWVudCksICdCYWNrdXAgdG8gQml0Z28gY29tbWl0bWVudCBpcyByZXF1aXJlZCcpO1xuICAgIGNvbnN0IHJvdW5kMlNlbmRlciA9IEtleUdlblNlbmRlckZvckVudGVycHJpc2U8TVBDdjJLZXlHZW5Sb3VuZDJSZXNwb25zZSAmIE1wY1YyVnJmS2V5R2VuUmVzcG9uc2VGaWVsZHM+KFxuICAgICAgdGhpcy5iaXRnbyxcbiAgICAgIHBhcmFtcy5lbnRlcnByaXNlXG4gICAgKTtcbiAgICBjb25zdCB7XG4gICAgICBzZXNzaW9uSWQ6IHNlc3Npb25JZFJvdW5kMixcbiAgICAgIGJpdGdvQ29tbWl0bWVudDIsXG4gICAgICBiaXRnb1RvVXNlck1zZzMsXG4gICAgICBiaXRnb1RvQmFja3VwTXNnMyxcbiAgICAgIGJpdGdvVnJmTXNnMixcbiAgICB9ID0gYXdhaXQgcm91bmQyU2VuZGVyKE1QQ3YyS2V5R2VuU3RhdGVFbnVtWydNUEN2Mi1SMiddLCB7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICB1c2VyTXNnMjoge1xuICAgICAgICBmcm9tOiBNUEN2MlBhcnRpZXNFbnVtLlVTRVIsXG4gICAgICAgIHRvOiBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPLFxuICAgICAgICBzaWduYXR1cmU6IHVzZXJSb3VuZDJNc2cucGF5bG9hZC5zaWduYXR1cmUsXG4gICAgICAgIGVuY3J5cHRlZE1lc3NhZ2U6IHVzZXJSb3VuZDJNc2cucGF5bG9hZC5lbmNyeXB0ZWRNZXNzYWdlLFxuICAgICAgfSxcbiAgICAgIHVzZXJDb21taXRtZW50MjogdXNlclJvdW5kMk1zZy5jb21taXRtZW50LFxuICAgICAgYmFja3VwTXNnMjoge1xuICAgICAgICBmcm9tOiBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCxcbiAgICAgICAgdG86IE1QQ3YyUGFydGllc0VudW0uQklUR08sXG4gICAgICAgIHNpZ25hdHVyZTogYmFja3VwUm91bmQyTXNnLnBheWxvYWQuc2lnbmF0dXJlLFxuICAgICAgICBlbmNyeXB0ZWRNZXNzYWdlOiBiYWNrdXBSb3VuZDJNc2cucGF5bG9hZC5lbmNyeXB0ZWRNZXNzYWdlLFxuICAgICAgfSxcbiAgICAgIGJhY2t1cENvbW1pdG1lbnQyOiBiYWNrdXBSb3VuZDJNc2cuY29tbWl0bWVudCxcbiAgICAgIHVzZXJWcmZNc2cyOiBzZXJpYWxpemVWcmZNZXNzYWdlcyh1c2VyVnJmUm91bmQyTWVzc2FnZXMpLFxuICAgICAgYmFja3VwVnJmTXNnMjogc2VyaWFsaXplVnJmTWVzc2FnZXMoYmFja3VwVnJmUm91bmQyTWVzc2FnZXMpLFxuICAgIH0pO1xuICAgIC8vICNlbmRyZWdpb25cblxuICAgIC8vICNyZWdpb24gcm91bmQgM1xuICAgIGFzc2VydC5lcXVhbChzZXNzaW9uSWQsIHNlc3Npb25JZFJvdW5kMiwgJ1JvdW5kIDEgYW5kIDIgU2Vzc2lvbiBJRHMgZG8gbm90IG1hdGNoJyk7XG4gICAgYXNzZXJ0KGJpdGdvVnJmTXNnMiwgJ0JpdEdvIFZSRiBtZXNzYWdlIDIgbm90IGZvdW5kIGluIHJvdW5kIDIgcmVzcG9uc2UnKTtcblxuICAgIC8vIFZSRjogZmluYWxpemUgYm90aCBES0dzIGxvY2FsbHkgYnkgY29uc3VtaW5nIHRoZSBvcGVuaW5nIG1lc3NhZ2VzIGFkZHJlc3NlZCB0byBlYWNoXG4gICAgLy8gcGFydHkgKGluY2x1ZGluZyBlYWNoIHBhcnR5J3Mgb3duKSBmcm9tIHRoZSBSMiBleGNoYW5nZXMuIFRoZSBWUkYgREtHIGNvbXBsZXRlcyBoZXJlLFxuICAgIC8vIGEgZnVsbCByb3VuZCBvZiBzbGFjayBiZWZvcmUgTVBDdjItUjMuXG4gICAgYXdhaXQgdXNlclZyZlNlc3Npb24uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgICBicm9hZGNhc3RNZXNzYWdlczogW10sXG4gICAgICBwMnBNZXNzYWdlczogW1xuICAgICAgICAuLi51c2VyVnJmUm91bmQyTWVzc2FnZXMucDJwTWVzc2FnZXMuZmlsdGVyKChtKSA9PiBtLnRvID09PSBNUEN2MlBhcnRpZXNFbnVtLlVTRVIpLFxuICAgICAgICAuLi5iYWNrdXBWcmZSb3VuZDJNZXNzYWdlcy5wMnBNZXNzYWdlcy5maWx0ZXIoKG0pID0+IG0udG8gPT09IE1QQ3YyUGFydGllc0VudW0uVVNFUiksXG4gICAgICAgIC4uLmRlc2VyaWFsaXplVnJmTWVzc2FnZXMoYml0Z29WcmZNc2cyLCBNUEN2MlBhcnRpZXNFbnVtLlVTRVIpLnAycE1lc3NhZ2VzLFxuICAgICAgXSxcbiAgICB9KTtcbiAgICBhd2FpdCBiYWNrdXBWcmZTZXNzaW9uLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLFxuICAgICAgcDJwTWVzc2FnZXM6IFtcbiAgICAgICAgLi4udXNlclZyZlJvdW5kMk1lc3NhZ2VzLnAycE1lc3NhZ2VzLmZpbHRlcigobSkgPT4gbS50byA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVApLFxuICAgICAgICAuLi5iYWNrdXBWcmZSb3VuZDJNZXNzYWdlcy5wMnBNZXNzYWdlcy5maWx0ZXIoKG0pID0+IG0udG8gPT09IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQKSxcbiAgICAgICAgLi4uZGVzZXJpYWxpemVWcmZNZXNzYWdlcyhiaXRnb1ZyZk1zZzIsIE1QQ3YyUGFydGllc0VudW0uQkFDS1VQKS5wMnBNZXNzYWdlcyxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBkZWNyeXB0ZWRCaXRnb1RvVXNlclJvdW5kMk1zZ3MgPSBhd2FpdCBEa2xzQ29tbXMuZGVjcnlwdEFuZFZlcmlmeUluY29taW5nTWVzc2FnZXMoXG4gICAgICB7IHAycE1lc3NhZ2VzOiBbdGhpcy5mb3JtYXRQMlBNZXNzYWdlKGJpdGdvVG9Vc2VyTXNnMildLCBicm9hZGNhc3RNZXNzYWdlczogW10gfSxcbiAgICAgIFtiaXRnb0dwZ1B1YktleV0sXG4gICAgICBbdXNlckdwZ1BydktleV1cbiAgICApO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRCaXRnb1RvVXNlclJvdW5kMk1zZyA9IGRlY3J5cHRlZEJpdGdvVG9Vc2VyUm91bmQyTXNncy5wMnBNZXNzYWdlcy5maW5kKFxuICAgICAgKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyAmJiBtLnRvID09PSBNUEN2MlBhcnRpZXNFbnVtLlVTRVJcbiAgICApO1xuICAgIGFzc2VydChzZXJpYWxpemVkQml0Z29Ub1VzZXJSb3VuZDJNc2csICdCaXRHbyB0byBVc2VyIG1lc3NhZ2UgMiBub3QgZm91bmQgaW4gUDJQIG1lc3NhZ2VzJyk7XG4gICAgY29uc3QgYml0Z29Ub1VzZXJSb3VuZDJNc2cgPSBEa2xzVHlwZXMuZGVzZXJpYWxpemVQMlBNZXNzYWdlKHNlcmlhbGl6ZWRCaXRnb1RvVXNlclJvdW5kMk1zZyk7XG5cbiAgICBjb25zdCBkZWNyeXB0ZWRCaXRnb1RvQmFja3VwUm91bmQyTXNnID0gYXdhaXQgRGtsc0NvbW1zLmRlY3J5cHRBbmRWZXJpZnlJbmNvbWluZ01lc3NhZ2VzKFxuICAgICAgeyBwMnBNZXNzYWdlczogW3RoaXMuZm9ybWF0UDJQTWVzc2FnZShiaXRnb1RvQmFja3VwTXNnMildLCBicm9hZGNhc3RNZXNzYWdlczogW10gfSxcbiAgICAgIFtiaXRnb0dwZ1B1YktleV0sXG4gICAgICBbYmFja3VwR3BnUHJ2S2V5XVxuICAgICk7XG4gICAgY29uc3Qgc2VyaWFsaXplZEJpdGdvVG9CYWNrdXBSb3VuZDJNc2cgPSBkZWNyeXB0ZWRCaXRnb1RvQmFja3VwUm91bmQyTXNnLnAycE1lc3NhZ2VzLmZpbmQoXG4gICAgICAobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPICYmIG0udG8gPT09IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQXG4gICAgKTtcbiAgICBhc3NlcnQoc2VyaWFsaXplZEJpdGdvVG9CYWNrdXBSb3VuZDJNc2csICdCaXRHbyB0byBCYWNrdXAgbWVzc2FnZSAyIG5vdCBmb3VuZCBpbiBQMlAgbWVzc2FnZXMnKTtcbiAgICBjb25zdCBiaXRnb1RvQmFja3VwUm91bmQyTXNnID0gRGtsc1R5cGVzLmRlc2VyaWFsaXplUDJQTWVzc2FnZShzZXJpYWxpemVkQml0Z29Ub0JhY2t1cFJvdW5kMk1zZyk7XG5cbiAgICBjb25zdCB1c2VyVG9CYWNrdXBNc2cyID0gdXNlclJvdW5kMlAyUE1lc3NhZ2VzLnAycE1lc3NhZ2VzLmZpbmQoXG4gICAgICAobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLlVTRVIgJiYgbS50byA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVBcbiAgICApO1xuICAgIGFzc2VydCh1c2VyVG9CYWNrdXBNc2cyLCAnVXNlciB0byBCYWNrdXAgbWVzc2FnZSAyIG5vdCBmb3VuZCBpbiBQMlAgbWVzc2FnZXMnKTtcblxuICAgIGNvbnN0IGJhY2t1cFRvVXNlck1zZzIgPSBiYWNrdXBSb3VuZDJQMlBNZXNzYWdlcy5wMnBNZXNzYWdlcy5maW5kKFxuICAgICAgKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVAgJiYgbS50byA9PT0gTVBDdjJQYXJ0aWVzRW51bS5VU0VSXG4gICAgKTtcbiAgICBhc3NlcnQoYmFja3VwVG9Vc2VyTXNnMiwgJ0JhY2t1cCB0byBVc2VyIG1lc3NhZ2UgMiBub3QgZm91bmQgaW4gUDJQIG1lc3NhZ2VzJyk7XG5cbiAgICBjb25zdCB1c2VyUm91bmQzTWVzc2FnZXMgPSB1c2VyU2Vzc2lvbi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXSxcbiAgICAgIHAycE1lc3NhZ2VzOiBbYml0Z29Ub1VzZXJSb3VuZDJNc2csIGJhY2t1cFRvVXNlck1zZzJdLFxuICAgIH0pO1xuICAgIGNvbnN0IHVzZXJUb0JhY2t1cE1zZzMgPSB1c2VyUm91bmQzTWVzc2FnZXMucDJwTWVzc2FnZXMuZmluZChcbiAgICAgIChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uVVNFUiAmJiBtLnRvID09PSBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUFxuICAgICk7XG4gICAgYXNzZXJ0KHVzZXJUb0JhY2t1cE1zZzMsICdVc2VyIHRvIEJhY2t1cCBtZXNzYWdlIDMgbm90IGZvdW5kIGluIFAyUCBtZXNzYWdlcycpO1xuICAgIGNvbnN0IHVzZXJUb0JpdGdvTXNnMyA9IHVzZXJSb3VuZDNNZXNzYWdlcy5wMnBNZXNzYWdlcy5maW5kKFxuICAgICAgKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5VU0VSICYmIG0udG8gPT09IE1QQ3YyUGFydGllc0VudW0uQklUR09cbiAgICApO1xuICAgIGFzc2VydCh1c2VyVG9CaXRnb01zZzMsICdVc2VyIHRvIEJpdGdvIG1lc3NhZ2UgMyBub3QgZm91bmQgaW4gUDJQIG1lc3NhZ2VzJyk7XG4gICAgY29uc3Qgc2VyaWFsaXplZFVzZXJUb0JpdGdvTXNnMyA9IERrbHNUeXBlcy5zZXJpYWxpemVQMlBNZXNzYWdlKHVzZXJUb0JpdGdvTXNnMyk7XG5cbiAgICBjb25zdCBiYWNrdXBSb3VuZDNNZXNzYWdlcyA9IGJhY2t1cFNlc3Npb24uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgICBicm9hZGNhc3RNZXNzYWdlczogW10sXG4gICAgICBwMnBNZXNzYWdlczogW2JpdGdvVG9CYWNrdXBSb3VuZDJNc2csIHVzZXJUb0JhY2t1cE1zZzJdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYmFja3VwVG9Vc2VyTXNnMyA9IGJhY2t1cFJvdW5kM01lc3NhZ2VzLnAycE1lc3NhZ2VzLmZpbmQoXG4gICAgICAobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCAmJiBtLnRvID09PSBNUEN2MlBhcnRpZXNFbnVtLlVTRVJcbiAgICApO1xuICAgIGFzc2VydChiYWNrdXBUb1VzZXJNc2czLCAnQmFja3VwIHRvIFVzZXIgbWVzc2FnZSAzIG5vdCBmb3VuZCBpbiBQMlAgbWVzc2FnZXMnKTtcbiAgICBjb25zdCBiYWNrdXBUb0JpdGdvTXNnMyA9IGJhY2t1cFJvdW5kM01lc3NhZ2VzLnAycE1lc3NhZ2VzLmZpbmQoXG4gICAgICAobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCAmJiBtLnRvID09PSBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPXG4gICAgKTtcbiAgICBhc3NlcnQoYmFja3VwVG9CaXRnb01zZzMsICdCYWNrdXAgdG8gQml0Z28gbWVzc2FnZSAzIG5vdCBmb3VuZCBpbiBQMlAgbWVzc2FnZXMnKTtcbiAgICBjb25zdCBzZXJpYWxpemVkQmFja3VwVG9CaXRnb01zZzMgPSBEa2xzVHlwZXMuc2VyaWFsaXplUDJQTWVzc2FnZShiYWNrdXBUb0JpdGdvTXNnMyk7XG5cbiAgICBjb25zdCBkZWNyeXB0ZWRCaXRnb1RvVXNlclJvdW5kM01lc3NhZ2VzID0gYXdhaXQgRGtsc0NvbW1zLmRlY3J5cHRBbmRWZXJpZnlJbmNvbWluZ01lc3NhZ2VzKFxuICAgICAgeyBicm9hZGNhc3RNZXNzYWdlczogW10sIHAycE1lc3NhZ2VzOiBbdGhpcy5mb3JtYXRQMlBNZXNzYWdlKGJpdGdvVG9Vc2VyTXNnMywgYml0Z29Db21taXRtZW50MildIH0sXG4gICAgICBbYml0Z29HcGdQdWJLZXldLFxuICAgICAgW3VzZXJHcGdQcnZLZXldXG4gICAgKTtcbiAgICBjb25zdCBzZXJpYWxpemVkQml0Z29Ub1VzZXJSb3VuZDNNc2cgPSBkZWNyeXB0ZWRCaXRnb1RvVXNlclJvdW5kM01lc3NhZ2VzLnAycE1lc3NhZ2VzLmZpbmQoXG4gICAgICAobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPICYmIG0udG8gPT09IE1QQ3YyUGFydGllc0VudW0uVVNFUlxuICAgICk7XG4gICAgYXNzZXJ0KHNlcmlhbGl6ZWRCaXRnb1RvVXNlclJvdW5kM01zZywgJ0JpdEdvIHRvIFVzZXIgbWVzc2FnZSAzIG5vdCBmb3VuZCBpbiBQMlAgbWVzc2FnZXMnKTtcbiAgICBjb25zdCBiaXRnb1RvVXNlclJvdW5kM01zZyA9IERrbHNUeXBlcy5kZXNlcmlhbGl6ZVAyUE1lc3NhZ2Uoc2VyaWFsaXplZEJpdGdvVG9Vc2VyUm91bmQzTXNnKTtcblxuICAgIGNvbnN0IGRlY3J5cHRlZEJpdGdvVG9CYWNrdXBSb3VuZDNNZXNzYWdlcyA9IGF3YWl0IERrbHNDb21tcy5kZWNyeXB0QW5kVmVyaWZ5SW5jb21pbmdNZXNzYWdlcyhcbiAgICAgIHsgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLCBwMnBNZXNzYWdlczogW3RoaXMuZm9ybWF0UDJQTWVzc2FnZShiaXRnb1RvQmFja3VwTXNnMywgYml0Z29Db21taXRtZW50MildIH0sXG4gICAgICBbYml0Z29HcGdQdWJLZXldLFxuICAgICAgW2JhY2t1cEdwZ1BydktleV1cbiAgICApO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRCaXRnb1RvQmFja3VwUm91bmQzTXNnID0gZGVjcnlwdGVkQml0Z29Ub0JhY2t1cFJvdW5kM01lc3NhZ2VzLnAycE1lc3NhZ2VzLmZpbmQoXG4gICAgICAobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPICYmIG0udG8gPT09IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQXG4gICAgKTtcbiAgICBhc3NlcnQoc2VyaWFsaXplZEJpdGdvVG9CYWNrdXBSb3VuZDNNc2csICdCaXRHbyB0byBCYWNrdXAgbWVzc2FnZSAzIG5vdCBmb3VuZCBpbiBQMlAgbWVzc2FnZXMnKTtcbiAgICBjb25zdCBiaXRnb1RvQmFja3VwUm91bmQzTXNnID0gRGtsc1R5cGVzLmRlc2VyaWFsaXplUDJQTWVzc2FnZShzZXJpYWxpemVkQml0Z29Ub0JhY2t1cFJvdW5kM01zZyk7XG5cbiAgICBjb25zdCB1c2VyUm91bmQ0TWVzc2FnZXMgPSB1c2VyU2Vzc2lvbi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICAgIHAycE1lc3NhZ2VzOiBbYmFja3VwVG9Vc2VyTXNnMywgYml0Z29Ub1VzZXJSb3VuZDNNc2ddLFxuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdXNlclJvdW5kNEJyb2FkY2FzdE1zZyA9IHVzZXJSb3VuZDRNZXNzYWdlcy5icm9hZGNhc3RNZXNzYWdlcy5maW5kKChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uVVNFUik7XG4gICAgYXNzZXJ0KHVzZXJSb3VuZDRCcm9hZGNhc3RNc2csICdVc2VyIG1lc3NhZ2UgNCBub3QgZm91bmQgaW4gYnJvYWRjYXN0IG1lc3NhZ2VzJyk7XG4gICAgY29uc3Qgc2VyaWFsaXplZFVzZXJSb3VuZDRCcm9hZGNhc3RNc2cgPSBEa2xzVHlwZXMuc2VyaWFsaXplQnJvYWRjYXN0TWVzc2FnZSh1c2VyUm91bmQ0QnJvYWRjYXN0TXNnKTtcblxuICAgIGNvbnN0IGJhY2t1cFJvdW5kNE1lc3NhZ2VzID0gYmFja3VwU2Vzc2lvbi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICAgIHAycE1lc3NhZ2VzOiBbdXNlclRvQmFja3VwTXNnMywgYml0Z29Ub0JhY2t1cFJvdW5kM01zZ10sXG4gICAgICBicm9hZGNhc3RNZXNzYWdlczogW10sXG4gICAgfSk7XG4gICAgY29uc3QgYmFja3VwUm91bmQ0QnJvYWRjYXN0TXNnID0gYmFja3VwUm91bmQ0TWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXMuZmluZChcbiAgICAgIChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQXG4gICAgKTtcbiAgICBhc3NlcnQoYmFja3VwUm91bmQ0QnJvYWRjYXN0TXNnLCAnQmFja3VwIG1lc3NhZ2UgNCBub3QgZm91bmQgaW4gYnJvYWRjYXN0IG1lc3NhZ2VzJyk7XG4gICAgY29uc3Qgc2VyaWFsaXplZEJhY2t1cFJvdW5kNEJyb2FkY2FzdE1zZyA9IERrbHNUeXBlcy5zZXJpYWxpemVCcm9hZGNhc3RNZXNzYWdlKGJhY2t1cFJvdW5kNEJyb2FkY2FzdE1zZyk7XG5cbiAgICBjb25zdCByb3VuZDNNZXNzYWdlcyA9IGF3YWl0IERrbHNDb21tcy5lbmNyeXB0QW5kQXV0aE91dGdvaW5nTWVzc2FnZXMoXG4gICAgICB7XG4gICAgICAgIHAycE1lc3NhZ2VzOiBbc2VyaWFsaXplZFVzZXJUb0JpdGdvTXNnMywgc2VyaWFsaXplZEJhY2t1cFRvQml0Z29Nc2czXSxcbiAgICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtzZXJpYWxpemVkVXNlclJvdW5kNEJyb2FkY2FzdE1zZywgc2VyaWFsaXplZEJhY2t1cFJvdW5kNEJyb2FkY2FzdE1zZ10sXG4gICAgICB9LFxuICAgICAgW2JpdGdvR3BnUHViS2V5XSxcbiAgICAgIFt1c2VyR3BnUHJ2S2V5LCBiYWNrdXBHcGdQcnZLZXldXG4gICAgKTtcblxuICAgIGNvbnN0IHtcbiAgICAgIHNlc3Npb25JZDogc2Vzc2lvbklkUm91bmQzLFxuICAgICAgYml0Z29Nc2c0LFxuICAgICAgY29tbW9uS2V5Y2hhaW46IGJpdGdvQ29tbW9uS2V5Y2hhaW4sXG4gICAgfSA9IGF3YWl0IHRoaXMuc2VuZEtleUdlbmVyYXRpb25Sb3VuZDMocGFyYW1zLmVudGVycHJpc2UsIHNlc3Npb25JZCwgcm91bmQzTWVzc2FnZXMpO1xuXG4gICAgLy8gI2VuZHJlZ2lvblxuXG4gICAgLy8gI3JlZ2lvbiBrZXljaGFpbiBjcmVhdGlvblxuICAgIGFzc2VydC5lcXVhbChzZXNzaW9uSWQsIHNlc3Npb25JZFJvdW5kMywgJ1JvdW5kIDEgYW5kIDMgU2Vzc2lvbiBJRHMgZG8gbm90IG1hdGNoJyk7XG4gICAgY29uc3QgYml0Z29Sb3VuZDRCcm9hZGNhc3RNZXNzYWdlcyA9IERrbHNUeXBlcy5kZXNlcmlhbGl6ZU1lc3NhZ2VzKFxuICAgICAgYXdhaXQgRGtsc0NvbW1zLmRlY3J5cHRBbmRWZXJpZnlJbmNvbWluZ01lc3NhZ2VzKFxuICAgICAgICB7IHAycE1lc3NhZ2VzOiBbXSwgYnJvYWRjYXN0TWVzc2FnZXM6IFt0aGlzLmZvcm1hdEJpdGdvQnJvYWRjYXN0TWVzc2FnZShiaXRnb01zZzQpXSB9LFxuICAgICAgICBbYml0Z29HcGdQdWJLZXldLFxuICAgICAgICBbXVxuICAgICAgKVxuICAgICkuYnJvYWRjYXN0TWVzc2FnZXM7XG4gICAgY29uc3QgYml0Z29Sb3VuZDRCcm9hZGNhc3RNc2cgPSBiaXRnb1JvdW5kNEJyb2FkY2FzdE1lc3NhZ2VzLmZpbmQoKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG5cbiAgICBhc3NlcnQoYml0Z29Sb3VuZDRCcm9hZGNhc3RNc2csICdCaXRHbyBtZXNzYWdlIDQgbm90IGZvdW5kIGluIGJyb2FkY2FzdCBtZXNzYWdlcycpO1xuICAgIHVzZXJTZXNzaW9uLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtiaXRnb1JvdW5kNEJyb2FkY2FzdE1zZywgYmFja3VwUm91bmQ0QnJvYWRjYXN0TXNnXSxcbiAgICB9KTtcblxuICAgIGJhY2t1cFNlc3Npb24uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgICBwMnBNZXNzYWdlczogW10sXG4gICAgICBicm9hZGNhc3RNZXNzYWdlczogW2JpdGdvUm91bmQ0QnJvYWRjYXN0TXNnLCB1c2VyUm91bmQ0QnJvYWRjYXN0TXNnXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHVzZXJQcml2YXRlTWF0ZXJpYWwgPSB1c2VyU2Vzc2lvbi5nZXRLZXlTaGFyZSgpO1xuICAgIGNvbnN0IGJhY2t1cFByaXZhdGVNYXRlcmlhbCA9IGJhY2t1cFNlc3Npb24uZ2V0S2V5U2hhcmUoKTtcbiAgICBjb25zdCB1c2VyUmVkdWNlZFByaXZhdGVNYXRlcmlhbCA9IHVzZXJTZXNzaW9uLmdldFJlZHVjZWRLZXlTaGFyZSgpO1xuICAgIGNvbnN0IGJhY2t1cFJlZHVjZWRQcml2YXRlTWF0ZXJpYWwgPSBiYWNrdXBTZXNzaW9uLmdldFJlZHVjZWRLZXlTaGFyZSgpO1xuICAgIGNvbnN0IHVzZXJWcmZLZXlTaGFyZSA9IHVzZXJWcmZTZXNzaW9uLmdldEtleVNoYXJlKCk7XG4gICAgY29uc3QgYmFja3VwVnJmS2V5U2hhcmUgPSBiYWNrdXBWcmZTZXNzaW9uLmdldEtleVNoYXJlKCk7XG5cbiAgICBjb25zdCB1c2VyQ29tbW9uS2V5Y2hhaW4gPSBEa2xzVHlwZXMuZ2V0Q29tbW9uS2V5Y2hhaW4odXNlclByaXZhdGVNYXRlcmlhbCk7XG4gICAgY29uc3QgYmFja3VwQ29tbW9uS2V5Y2hhaW4gPSBEa2xzVHlwZXMuZ2V0Q29tbW9uS2V5Y2hhaW4oYmFja3VwUHJpdmF0ZU1hdGVyaWFsKTtcblxuICAgIGFzc2VydC5lcXVhbChiaXRnb0NvbW1vbktleWNoYWluLCB1c2VyQ29tbW9uS2V5Y2hhaW4sICdVc2VyIGFuZCBCaXRnbyBDb21tb24ga2V5Y2hhaW5zIGRvIG5vdCBtYXRjaCcpO1xuICAgIGFzc2VydC5lcXVhbChiaXRnb0NvbW1vbktleWNoYWluLCBiYWNrdXBDb21tb25LZXljaGFpbiwgJ0JhY2t1cCBhbmQgQml0Z28gQ29tbW9uIGtleWNoYWlucyBkbyBub3QgbWF0Y2gnKTtcblxuICAgIGNvbnN0IHsgZW52ZWxvcGU6IHVzZXJFbnZlbG9wZSwgcmVkdWNlZEVudmVsb3BlOiB1c2VyUmVkdWNlZEVudmVsb3BlIH0gPSBidWlsZFZyZktleUVudmVsb3BlcyhcbiAgICAgIHVzZXJQcml2YXRlTWF0ZXJpYWwsXG4gICAgICB1c2VyUmVkdWNlZFByaXZhdGVNYXRlcmlhbCxcbiAgICAgIHVzZXJWcmZLZXlTaGFyZVxuICAgICk7XG4gICAgY29uc3QgeyBlbnZlbG9wZTogYmFja3VwRW52ZWxvcGUsIHJlZHVjZWRFbnZlbG9wZTogYmFja3VwUmVkdWNlZEVudmVsb3BlIH0gPSBidWlsZFZyZktleUVudmVsb3BlcyhcbiAgICAgIGJhY2t1cFByaXZhdGVNYXRlcmlhbCxcbiAgICAgIGJhY2t1cFJlZHVjZWRQcml2YXRlTWF0ZXJpYWwsXG4gICAgICBiYWNrdXBWcmZLZXlTaGFyZVxuICAgICk7XG5cbiAgICBjb25zdCBlbmNyeXB0aW9uU2Vzc2lvbiA9XG4gICAgICBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb24gPT09IDIgPyBhd2FpdCB0aGlzLmJpdGdvLmNyZWF0ZUVuY3J5cHRpb25TZXNzaW9uKHBhcmFtcy5wYXNzcGhyYXNlKSA6IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXNlcktleWNoYWluUHJvbWlzZSA9IHRoaXMuY3JlYXRlUGFydGljaXBhbnRLZXljaGFpbihcbiAgICAgICAgTVBDdjJQYXJ0aWVzRW51bS5VU0VSLFxuICAgICAgICBiaXRnb0NvbW1vbktleWNoYWluLFxuICAgICAgICB1c2VyRW52ZWxvcGUsXG4gICAgICAgIHVzZXJSZWR1Y2VkRW52ZWxvcGUsXG4gICAgICAgIHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgICBwYXJhbXMub3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICAgICAgICBwYXJhbXMud2ViYXV0aG5JbmZvLFxuICAgICAgICBlbmNyeXB0aW9uU2Vzc2lvbixcbiAgICAgICAgcGFyYW1zLmVuY3J5cHRpb25WZXJzaW9uLFxuICAgICAgICBwYXJhbXMuZW50ZXJwcmlzZSxcbiAgICAgICAgcGFyYW1zLnNhZmVJZFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGJhY2t1cEtleWNoYWluUHJvbWlzZSA9IHRoaXMuY3JlYXRlUGFydGljaXBhbnRLZXljaGFpbihcbiAgICAgICAgTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVAsXG4gICAgICAgIGJpdGdvQ29tbW9uS2V5Y2hhaW4sXG4gICAgICAgIGJhY2t1cEVudmVsb3BlLFxuICAgICAgICBiYWNrdXBSZWR1Y2VkRW52ZWxvcGUsXG4gICAgICAgIHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgICBwYXJhbXMub3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIGVuY3J5cHRpb25TZXNzaW9uLFxuICAgICAgICBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb24sXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgcGFyYW1zLnNhZmVJZFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGJpdGdvS2V5Y2hhaW5Qcm9taXNlID0gdGhpcy5jcmVhdGVQYXJ0aWNpcGFudEtleWNoYWluKFxuICAgICAgICBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPLFxuICAgICAgICBiaXRnb0NvbW1vbktleWNoYWluLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgcGFyYW1zLnNhZmVJZFxuICAgICAgKTtcblxuICAgICAgY29uc3QgW3VzZXJLZXljaGFpbiwgYmFja3VwS2V5Y2hhaW4sIGJpdGdvS2V5Y2hhaW5dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICB1c2VyS2V5Y2hhaW5Qcm9taXNlLFxuICAgICAgICBiYWNrdXBLZXljaGFpblByb21pc2UsXG4gICAgICAgIGJpdGdvS2V5Y2hhaW5Qcm9taXNlLFxuICAgICAgXSk7XG4gICAgICAvLyAjZW5kcmVnaW9uXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVzZXJLZXljaGFpbixcbiAgICAgICAgYmFja3VwS2V5Y2hhaW4sXG4gICAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICB9O1xuICAgIH0gZmluYWxseSB7XG4gICAgICBlbmNyeXB0aW9uU2Vzc2lvbj8uZGVzdHJveSgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogU2VuZHMgcm91bmQgMSBmb3IgdGhlIHVzZXIvQml0R28gaGFyZC1kZXJpdmUgY2VyZW1vbnkuXG4gICAqL1xuICBhc3luYyBzZW5kRGVyaXZhdGlvblJvdW5kMUJ5U2VuZGVyKFxuICAgIHNlbmRlckZuOiBFY2RzYU1QQ3YyRGVyaXZlS2V5U2VuZEZuPE1QQ3YyRGVyaXZlUm91bmQxUmVzcG9uc2U+LFxuICAgIHVzZXJHcGdQdWJsaWNLZXk6IHN0cmluZyxcbiAgICBwYXlsb2FkOiBEa2xzVHlwZXMuQXV0aEVuY01lc3NhZ2VzLFxuICAgIHBhcmVudEtleUlkOiBzdHJpbmcsXG4gICAgZGVyaXZhdGlvbkluZGV4OiBudW1iZXJcbiAgKTogUHJvbWlzZTxNUEN2MkRlcml2ZVJvdW5kMVJlc3BvbnNlPiB7XG4gICAgYXNzZXJ0KE5vbkVtcHR5U3RyaW5nLmlzKHVzZXJHcGdQdWJsaWNLZXkpLCAnVXNlciBHUEcgcHVibGljIGtleSBpcyByZXF1aXJlZCcpO1xuICAgIGFzc2VydChOb25FbXB0eVN0cmluZy5pcyhwYXJlbnRLZXlJZCksICdQYXJlbnQga2V5IGlkIGlzIHJlcXVpcmVkJyk7XG4gICAgY29uc3QgdXNlck1zZzEgPSBwYXlsb2FkLmJyb2FkY2FzdE1lc3NhZ2VzLmZpbmQoKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5VU0VSKT8ucGF5bG9hZDtcbiAgICBhc3NlcnQodXNlck1zZzEsICdVc2VyIG1lc3NhZ2UgMSBub3QgZm91bmQgaW4gYnJvYWRjYXN0IG1lc3NhZ2VzJyk7XG5cbiAgICBhc3NlcnQoXG4gICAgICBNUEN2MkRlcml2ZVJvdW5kMVJlcXVlc3QucHJvcHMuZGVyaXZhdGlvbkluZGV4LmlzKGRlcml2YXRpb25JbmRleCksXG4gICAgICAnRGVyaXZhdGlvbiBpbmRleCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIHNhZmUgaW50ZWdlcidcbiAgICApO1xuICAgIGNvbnN0IHJlcXVlc3Q6IE1QQ3YyRGVyaXZlUm91bmQxUmVxdWVzdCA9IHtcbiAgICAgIHVzZXJHcGdQdWJsaWNLZXksXG4gICAgICB1c2VyTXNnMTogeyBmcm9tOiBNUEN2MlBhcnRpZXNFbnVtLlVTRVIsIC4uLnVzZXJNc2cxIH0sXG4gICAgICBwYXJlbnRLZXlJZCxcbiAgICAgIGRlcml2YXRpb25JbmRleCxcbiAgICB9O1xuICAgIHJldHVybiBzZW5kZXJGbihNUEN2MktleUdlblN0YXRlRW51bVsnTVBDdjJEZXJpdmUtUjEnXSwgcmVxdWVzdCk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZHMgcm91bmQgMiBmb3IgdGhlIHVzZXIvQml0R28gaGFyZC1kZXJpdmUgY2VyZW1vbnkuXG4gICAqL1xuICBhc3luYyBzZW5kRGVyaXZhdGlvblJvdW5kMkJ5U2VuZGVyKFxuICAgIHNlbmRlckZuOiBFY2RzYU1QQ3YyRGVyaXZlS2V5U2VuZEZuPE1QQ3YyRGVyaXZlUm91bmQyUmVzcG9uc2U+LFxuICAgIHNlc3Npb25JZDogc3RyaW5nLFxuICAgIHBheWxvYWQ6IERrbHNUeXBlcy5BdXRoRW5jTWVzc2FnZXNcbiAgKTogUHJvbWlzZTxNUEN2MkRlcml2ZVJvdW5kMlJlc3BvbnNlPiB7XG4gICAgYXNzZXJ0KE5vbkVtcHR5U3RyaW5nLmlzKHNlc3Npb25JZCksICdTZXNzaW9uIElEIGlzIHJlcXVpcmVkJyk7XG4gICAgY29uc3QgdXNlck1zZzIgPSBwYXlsb2FkLmJyb2FkY2FzdE1lc3NhZ2VzLmZpbmQoKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5VU0VSKT8ucGF5bG9hZDtcbiAgICBhc3NlcnQodXNlck1zZzIsICdVc2VyIG1lc3NhZ2UgMiBub3QgZm91bmQgaW4gYnJvYWRjYXN0IG1lc3NhZ2VzJyk7XG5cbiAgICBjb25zdCByZXF1ZXN0OiBNUEN2MkRlcml2ZVJvdW5kMlJlcXVlc3QgPSB7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICB1c2VyTXNnMjogeyBmcm9tOiBNUEN2MlBhcnRpZXNFbnVtLlVTRVIsIC4uLnVzZXJNc2cyIH0sXG4gICAgfTtcbiAgICByZXR1cm4gc2VuZGVyRm4oTVBDdjJLZXlHZW5TdGF0ZUVudW1bJ01QQ3YyRGVyaXZlLVIyJ10sIHJlcXVlc3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlcyByb3VuZCAzIGFuZCByZXR1cm5zIHRoZSBjaGlsZCBjb21tb24ga2V5Y2hhaW4uXG4gICAqL1xuICBhc3luYyBzZW5kRGVyaXZhdGlvblJvdW5kM0J5U2VuZGVyKFxuICAgIHNlbmRlckZuOiBFY2RzYU1QQ3YyRGVyaXZlS2V5U2VuZEZuPE1QQ3YyRGVyaXZlUm91bmQzUmVzcG9uc2U+LFxuICAgIHNlc3Npb25JZDogc3RyaW5nXG4gICk6IFByb21pc2U8TVBDdjJEZXJpdmVSb3VuZDNSZXNwb25zZT4ge1xuICAgIGFzc2VydChOb25FbXB0eVN0cmluZy5pcyhzZXNzaW9uSWQpLCAnU2Vzc2lvbiBJRCBpcyByZXF1aXJlZCcpO1xuICAgIHJldHVybiBzZW5kZXJGbihNUEN2MktleUdlblN0YXRlRW51bVsnTVBDdjJEZXJpdmUtUjMnXSwgeyBzZXNzaW9uSWQgfSk7XG4gIH1cblxuICAvKipcbiAgICogUnVucyB0aGUgc2FmZSBjaGlsZCBoYXJkLWRlcml2ZSBjZXJlbW9ueSBhbmQgcmVnaXN0ZXJzIGNoaWxkIGtleSBkb2N1bWVudHMuXG4gICAqL1xuICBhc3luYyBjcmVhdGVTYWZlQ2hpbGRLZXljaGFpbnMocGFyYW1zOiB7XG4gICAgcGFzc3BocmFzZTogc3RyaW5nO1xuICAgIGVudGVycHJpc2U6IHN0cmluZztcbiAgICBzYWZlSWQ6IHN0cmluZztcbiAgICAvKiogUm9vdCBrZXkgSUQgdXNlZCBmb3IgdGhlIGRlcml2ZS4gKi9cbiAgICBwYXJlbnRLZXlJZDogc3RyaW5nO1xuICAgIGRlcml2YXRpb25JbmRleDogbnVtYmVyO1xuICAgIHVzZXJSb290S2V5SWQ6IHN0cmluZztcbiAgICBiYWNrdXBSb290S2V5SWQ6IHN0cmluZztcbiAgICB1c2VyUm9vdEtleVNoYXJlOiBCdWZmZXI7XG4gICAgdXNlclJvb3RWcmZLZXlTaGFyZTogQnVmZmVyO1xuICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZT86IHN0cmluZztcbiAgICB3ZWJhdXRobkluZm8/OiBXZWJhdXRobktleUVuY3J5cHRpb25JbmZvO1xuICAgIGVuY3J5cHRpb25WZXJzaW9uPzogRW5jcnlwdGlvblZlcnNpb247XG4gIH0pOiBQcm9taXNlPEtleWNoYWluc1RyaXBsZXQ+IHtcbiAgICBjb25zdCB1c2VyR3BnS2V5ID0gYXdhaXQgZ2VuZXJhdGVHUEdLZXlQYWlyKCdzZWNwMjU2azEnKTtcbiAgICBjb25zdCB7IG1wY3YyUHVibGljS2V5IH0gPSBhd2FpdCB0aGlzLmdldEJpdGdvR3BnUHVia2V5QmFzZWRPbkZlYXR1cmVGbGFncyhwYXJhbXMuZW50ZXJwcmlzZSwgdHJ1ZSk7XG4gICAgY29uc3QgbXBjdjJLZXkgPSBtcGN2MlB1YmxpY0tleSA/PyB0aGlzLmJpdGdvTVBDdjJQdWJsaWNHcGdLZXk7XG4gICAgYXNzZXJ0KG1wY3YyS2V5LCAnRmFpbGVkIHRvIGdldCBCaXRHbyBNUEN2MiBHUEcgcHVibGljIGtleScpO1xuICAgIGNvbnN0IGJpdGdvUHVibGljR3BnS2V5ID0gbXBjdjJLZXkuYXJtb3IoKTtcblxuICAgIGlmIChlbnZSZXF1aXJlc0JpdGdvUHViR3BnS2V5Q29uZmlnKHRoaXMuYml0Z28uZ2V0RW52KCkpKSB7XG4gICAgICBhc3NlcnQoaXNCaXRnb01wY1B1YktleShiaXRnb1B1YmxpY0dwZ0tleSwgJ21wY3YyJyksICdJbnZhbGlkIEJpdEdvIEdQRyBwdWJsaWMga2V5Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlckdwZ1BydktleTogRGtsc1R5cGVzLlBhcnR5R3BnS2V5ID0ge1xuICAgICAgcGFydHlJZDogTVBDdjJQYXJ0aWVzRW51bS5VU0VSLFxuICAgICAgZ3BnS2V5OiB1c2VyR3BnS2V5LnByaXZhdGVLZXksXG4gICAgfTtcbiAgICBjb25zdCBiaXRnb0dwZ1B1YktleTogRGtsc1R5cGVzLlBhcnR5R3BnS2V5ID0ge1xuICAgICAgcGFydHlJZDogTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyxcbiAgICAgIGdwZ0tleTogYml0Z29QdWJsaWNHcGdLZXksXG4gICAgfTtcblxuICAgIGNvbnN0IHBhdGggPSBoYXJkZW5lZERlcml2YXRpb25QYXRoKHBhcmFtcy5kZXJpdmF0aW9uSW5kZXgpO1xuICAgIGNvbnN0IHVzZXJEZXJpdmVTZXNzaW9uID0gbmV3IERrbHNEcnYuRGVyaXZlKFxuICAgICAgMyxcbiAgICAgIDIsXG4gICAgICBNUEN2MlBhcnRpZXNFbnVtLlVTRVIsXG4gICAgICBwYXJhbXMudXNlclJvb3RLZXlTaGFyZSxcbiAgICAgIHBhcmFtcy51c2VyUm9vdFZyZktleVNoYXJlLFxuICAgICAgcGF0aFxuICAgICk7XG5cbiAgICAvLyBSb3VuZCAxOiBzZW5kIHRoZSB1c2VyJ3MgZmlyc3QgbWVzc2FnZS5cbiAgICBjb25zdCB1c2VyUm91bmQxTXNnID0gYXdhaXQgdXNlckRlcml2ZVNlc3Npb24uaW5pdERlcml2ZSgpO1xuICAgIGNvbnN0IHJvdW5kMU1lc3NhZ2VzID0gYXdhaXQgRGtsc0NvbW1zLmVuY3J5cHRBbmRBdXRoT3V0Z29pbmdNZXNzYWdlcyhcbiAgICAgIHtcbiAgICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtEa2xzVHlwZXMuc2VyaWFsaXplQnJvYWRjYXN0TWVzc2FnZSh1c2VyUm91bmQxTXNnKV0sXG4gICAgICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICAgIH0sXG4gICAgICBbYml0Z29HcGdQdWJLZXldLFxuICAgICAgW3VzZXJHcGdQcnZLZXldXG4gICAgKTtcbiAgICBhc3NlcnQoTm9uRW1wdHlTdHJpbmcuaXModXNlckdwZ0tleS5wdWJsaWNLZXkpLCAnVXNlciBHUEcgcHVibGljIGtleSBpcyByZXF1aXJlZCcpO1xuICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBiaXRnb01zZzEgfSA9IGF3YWl0IHRoaXMuc2VuZERlcml2YXRpb25Sb3VuZDFCeVNlbmRlcihcbiAgICAgIEtleUdlblNlbmRlckZvclNhZmVDaGlsZDxNUEN2MkRlcml2ZVJvdW5kMVJlc3BvbnNlPih0aGlzLmJpdGdvLCBwYXJhbXMuZW50ZXJwcmlzZSwgcGFyYW1zLnNhZmVJZCksXG4gICAgICB1c2VyR3BnS2V5LnB1YmxpY0tleSxcbiAgICAgIHJvdW5kMU1lc3NhZ2VzLFxuICAgICAgcGFyYW1zLnBhcmVudEtleUlkLFxuICAgICAgcGFyYW1zLmRlcml2YXRpb25JbmRleFxuICAgICk7XG5cbiAgICAvLyBSb3VuZCAyOiBwcm9jZXNzIHRoZSBwZWVyJ3MgZmlyc3QgbWVzc2FnZSBhbmQgcmV0dXJuIHRoZSB1c2VyJ3Mgc2Vjb25kLlxuICAgIGNvbnN0IGRlY3J5cHRlZEJpdGdvUm91bmQxID0gYXdhaXQgRGtsc0NvbW1zLmRlY3J5cHRBbmRWZXJpZnlJbmNvbWluZ01lc3NhZ2VzKFxuICAgICAgeyBwMnBNZXNzYWdlczogW10sIGJyb2FkY2FzdE1lc3NhZ2VzOiBbdGhpcy5mb3JtYXRCaXRnb0Jyb2FkY2FzdE1lc3NhZ2UoYml0Z29Nc2cxKV0gfSxcbiAgICAgIFtiaXRnb0dwZ1B1YktleV0sXG4gICAgICBbXVxuICAgICk7XG4gICAgY29uc3QgYml0Z29Sb3VuZDFNc2cgPSBkZWNyeXB0ZWRCaXRnb1JvdW5kMS5icm9hZGNhc3RNZXNzYWdlcy5maW5kKChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uQklUR08pO1xuICAgIGFzc2VydChiaXRnb1JvdW5kMU1zZywgJ0JpdEdvIGRlcml2ZSBtZXNzYWdlIDEgbm90IGZvdW5kIGluIGJyb2FkY2FzdCBtZXNzYWdlcycpO1xuICAgIGNvbnN0IHVzZXJSb3VuZDJNZXNzYWdlcyA9IHVzZXJEZXJpdmVTZXNzaW9uLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtEa2xzVHlwZXMuZGVzZXJpYWxpemVCcm9hZGNhc3RNZXNzYWdlKGJpdGdvUm91bmQxTXNnKV0sXG4gICAgfSk7XG4gICAgY29uc3Qgcm91bmQyTWVzc2FnZXMgPSBhd2FpdCBEa2xzQ29tbXMuZW5jcnlwdEFuZEF1dGhPdXRnb2luZ01lc3NhZ2VzKFxuICAgICAgRGtsc1R5cGVzLnNlcmlhbGl6ZU1lc3NhZ2VzKHVzZXJSb3VuZDJNZXNzYWdlcyksXG4gICAgICBbYml0Z29HcGdQdWJLZXldLFxuICAgICAgW3VzZXJHcGdQcnZLZXldXG4gICAgKTtcbiAgICBjb25zdCB7IHNlc3Npb25JZDogc2Vzc2lvbklkUm91bmQyLCBiaXRnb01zZzIgfSA9IGF3YWl0IHRoaXMuc2VuZERlcml2YXRpb25Sb3VuZDJCeVNlbmRlcihcbiAgICAgIEtleUdlblNlbmRlckZvclNhZmVDaGlsZDxNUEN2MkRlcml2ZVJvdW5kMlJlc3BvbnNlPih0aGlzLmJpdGdvLCBwYXJhbXMuZW50ZXJwcmlzZSwgcGFyYW1zLnNhZmVJZCksXG4gICAgICBzZXNzaW9uSWQsXG4gICAgICByb3VuZDJNZXNzYWdlc1xuICAgICk7XG4gICAgYXNzZXJ0LmVxdWFsKHNlc3Npb25JZCwgc2Vzc2lvbklkUm91bmQyLCAnUm91bmQgMSBhbmQgMiBTZXNzaW9uIElEcyBkbyBub3QgbWF0Y2gnKTtcblxuICAgIC8vIFByb2Nlc3MgdGhlIHBlZXIgcmVzcG9uc2UgdG8gZmluYWxpemUgdGhlIGxvY2FsIGNoaWxkIHNoYXJlLlxuICAgIGNvbnN0IGRlY3J5cHRlZEJpdGdvUm91bmQyID0gYXdhaXQgRGtsc0NvbW1zLmRlY3J5cHRBbmRWZXJpZnlJbmNvbWluZ01lc3NhZ2VzKFxuICAgICAgeyBwMnBNZXNzYWdlczogW10sIGJyb2FkY2FzdE1lc3NhZ2VzOiBbdGhpcy5mb3JtYXRCaXRnb0Jyb2FkY2FzdE1lc3NhZ2UoYml0Z29Nc2cyKV0gfSxcbiAgICAgIFtiaXRnb0dwZ1B1YktleV0sXG4gICAgICBbXVxuICAgICk7XG4gICAgY29uc3QgYml0Z29Sb3VuZDJNc2cgPSBkZWNyeXB0ZWRCaXRnb1JvdW5kMi5icm9hZGNhc3RNZXNzYWdlcy5maW5kKChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uQklUR08pO1xuICAgIGFzc2VydChiaXRnb1JvdW5kMk1zZywgJ0JpdEdvIGRlcml2ZSBtZXNzYWdlIDIgbm90IGZvdW5kIGluIGJyb2FkY2FzdCBtZXNzYWdlcycpO1xuICAgIHVzZXJEZXJpdmVTZXNzaW9uLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtEa2xzVHlwZXMuZGVzZXJpYWxpemVCcm9hZGNhc3RNZXNzYWdlKGJpdGdvUm91bmQyTXNnKV0sXG4gICAgfSk7XG5cbiAgICAvLyBSb3VuZCAzOiBvYnRhaW4gdGhlIGNoaWxkIGNvbW1vbi1rZXljaGFpbiBtZXRhZGF0YS5cbiAgICBjb25zdCB7IHNlc3Npb25JZDogc2Vzc2lvbklkUm91bmQzLCBjb21tb25LZXljaGFpbiB9ID0gYXdhaXQgdGhpcy5zZW5kRGVyaXZhdGlvblJvdW5kM0J5U2VuZGVyKFxuICAgICAgS2V5R2VuU2VuZGVyRm9yU2FmZUNoaWxkPE1QQ3YyRGVyaXZlUm91bmQzUmVzcG9uc2U+KHRoaXMuYml0Z28sIHBhcmFtcy5lbnRlcnByaXNlLCBwYXJhbXMuc2FmZUlkKSxcbiAgICAgIHNlc3Npb25JZFxuICAgICk7XG4gICAgYXNzZXJ0LmVxdWFsKHNlc3Npb25JZCwgc2Vzc2lvbklkUm91bmQzLCAnUm91bmQgMSBhbmQgMyBTZXNzaW9uIElEcyBkbyBub3QgbWF0Y2gnKTtcblxuICAgIGNvbnN0IHVzZXJQcml2YXRlTWF0ZXJpYWwgPSB1c2VyRGVyaXZlU2Vzc2lvbi5nZXRLZXlTaGFyZSgpO1xuICAgIGNvbnN0IHVzZXJSZWR1Y2VkUHJpdmF0ZU1hdGVyaWFsID0gdXNlckRlcml2ZVNlc3Npb24uZ2V0UmVkdWNlZEtleVNoYXJlKCk7XG4gICAgY29uc3QgdXNlckNvbW1vbktleWNoYWluID0gRGtsc1R5cGVzLmdldENvbW1vbktleWNoYWluKHVzZXJQcml2YXRlTWF0ZXJpYWwpO1xuICAgIGFzc2VydC5lcXVhbChjb21tb25LZXljaGFpbiwgdXNlckNvbW1vbktleWNoYWluLCAnVXNlciBhbmQgQml0R28gY29tbW9uIGtleWNoYWlucyBkbyBub3QgbWF0Y2gnKTtcblxuICAgIGNvbnN0IGVuY3J5cHRpb25TZXNzaW9uID1cbiAgICAgIHBhcmFtcy5lbmNyeXB0aW9uVmVyc2lvbiA9PT0gMiA/IGF3YWl0IHRoaXMuYml0Z28uY3JlYXRlRW5jcnlwdGlvblNlc3Npb24ocGFyYW1zLnBhc3NwaHJhc2UpIDogdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1c2VyS2V5Y2hhaW5Qcm9taXNlID0gdGhpcy5hZGRVc2VyS2V5Y2hhaW4oXG4gICAgICAgIGNvbW1vbktleWNoYWluLFxuICAgICAgICB1c2VyUHJpdmF0ZU1hdGVyaWFsLFxuICAgICAgICB1c2VyUmVkdWNlZFByaXZhdGVNYXRlcmlhbCxcbiAgICAgICAgcGFyYW1zLnBhc3NwaHJhc2UsXG4gICAgICAgIHBhcmFtcy5vcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgICAgIHBhcmFtcy53ZWJhdXRobkluZm8sXG4gICAgICAgIGVuY3J5cHRpb25TZXNzaW9uLFxuICAgICAgICBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb24sXG4gICAgICAgIHBhcmFtcy5lbnRlcnByaXNlLFxuICAgICAgICBwYXJhbXMuc2FmZUlkLFxuICAgICAgICB7IHBhcmVudEtleUlkOiBwYXJhbXMudXNlclJvb3RLZXlJZCwgaW5kZXg6IHBhcmFtcy5kZXJpdmF0aW9uSW5kZXggfVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGJhY2t1cEtleWNoYWluUHJvbWlzZSA9IHRoaXMuYWRkQmFja3VwS2V5Y2hhaW4oXG4gICAgICAgIGNvbW1vbktleWNoYWluLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgcGFyYW1zLnBhc3NwaHJhc2UsXG4gICAgICAgIHBhcmFtcy5vcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgICAgIGVuY3J5cHRpb25TZXNzaW9uLFxuICAgICAgICBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb24sXG4gICAgICAgIHBhcmFtcy5zYWZlSWQsXG4gICAgICAgIHsgcGFyZW50S2V5SWQ6IHBhcmFtcy5iYWNrdXBSb290S2V5SWQsIGluZGV4OiBwYXJhbXMuZGVyaXZhdGlvbkluZGV4IH1cbiAgICAgICk7XG4gICAgICBjb25zdCBiaXRnb0tleWNoYWluUHJvbWlzZSA9IHRoaXMuYWRkQml0Z29LZXljaGFpbihjb21tb25LZXljaGFpbiwgcGFyYW1zLnNhZmVJZCwge1xuICAgICAgICBwYXJlbnRLZXlJZDogcGFyYW1zLnBhcmVudEtleUlkLFxuICAgICAgICBpbmRleDogcGFyYW1zLmRlcml2YXRpb25JbmRleCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBbdXNlcktleWNoYWluLCBiYWNrdXBLZXljaGFpbiwgYml0Z29LZXljaGFpbl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHVzZXJLZXljaGFpblByb21pc2UsXG4gICAgICAgIGJhY2t1cEtleWNoYWluUHJvbWlzZSxcbiAgICAgICAgYml0Z29LZXljaGFpblByb21pc2UsXG4gICAgICBdKTtcbiAgICAgIHJldHVybiB7IHVzZXJLZXljaGFpbiwgYmFja3VwS2V5Y2hhaW4sIGJpdGdvS2V5Y2hhaW4gfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZW5jcnlwdGlvblNlc3Npb24/LmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNpZ25pbmdEa2dTZXNzaW9ucyhyZXRyb2ZpdD86IERlY3J5cHRlZFJldHJvZml0UGF5bG9hZCkge1xuICAgIGlmIChyZXRyb2ZpdCkge1xuICAgICAgY29uc3QgcmV0cm9maXREYXRhID0gdGhpcy5nZXRNcGNWMlJldHJvZml0RGF0YUZyb21NcGNWMUtleXMoe1xuICAgICAgICBtcGN2MVVzZXJLZXlTaGFyZTogcmV0cm9maXQuZGVjcnlwdGVkVXNlcktleSxcbiAgICAgICAgbXBjdjFCYWNrdXBLZXlTaGFyZTogcmV0cm9maXQuZGVjcnlwdGVkQmFja3VwS2V5LFxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1c2VyU2Vzc2lvbjogbmV3IERrbHNEa2cuRGtnKDMsIDIsIE1QQ3YyUGFydGllc0VudW0uVVNFUiwgdW5kZWZpbmVkLCByZXRyb2ZpdERhdGEubXBjdjJVc2VyS2V5U2hhcmUpLFxuICAgICAgICBiYWNrdXBTZXNzaW9uOiBuZXcgRGtsc0RrZy5Ea2coMywgMiwgTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVAsIHVuZGVmaW5lZCwgcmV0cm9maXREYXRhLm1wY3YyQmFja3VwS2V5U2hhcmUpLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHVzZXJTZXNzaW9uOiBuZXcgRGtsc0RrZy5Ea2coMywgMiwgTVBDdjJQYXJ0aWVzRW51bS5VU0VSKSxcbiAgICAgIGJhY2t1cFNlc3Npb246IG5ldyBEa2xzRGtnLkRrZygzLCAyLCBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCksXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
442
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNkc2FWcmZNUEN2Mi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby91dGlscy90c3MvZWNkc2EvZWNkc2FWcmZNUEN2Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUF1RUEsd0RBS0M7QUE1RUQseURBQTBGO0FBQzFGLG9EQUE0QjtBQUM1Qiw2Q0FBNkM7QUFDN0Msc0RBUzZCO0FBSTdCLHFEQUF3RDtBQUV4RCw0REFBOEY7QUFDOUYsMERBQStEO0FBQy9ELDZDQUErQztBQUMvQyxxRUFJa0M7QUFDbEMsNkNBQThFO0FBZTlFLFNBQVMsb0JBQW9CLENBQUMsUUFBd0M7SUFDcEUsTUFBTSxTQUFTLEdBQXlCO1FBQ3RDLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hILEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO1lBQ1osRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFO1lBQ1IsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7U0FDbkQsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUFFRCxT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QUM7Z0JBQzFELGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxnQkFBZ0I7Z0JBQzVDLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxrQkFBa0I7YUFDakQsQ0FBQyxDQUFDO1lBQ0gsT0FBTztnQkFDTCxXQUFXLEVBQUUsSUFBSSxxQkFBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLDZCQUFnQixDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLGlCQUFpQixDQUFDO2dCQUNwRyxhQUFhLEVBQUUsSUFBSSxxQkFBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLDZCQUFnQixDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLG1CQUFtQixDQUFDO2FBQzNHLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTztZQUNMLFdBQVcsRUFBRSxJQUFJLHFCQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsNkJBQWdCLENBQUMsSUFBSSxDQUFDO1lBQ3pELGFBQWEsRUFBRSxJQUFJLHFCQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsNkJBQWdCLENBQUMsTUFBTSxDQUFDO1NBQzlELENBQUM7SUFDSixDQUFDO0NBQ0Y7QUExcEJELGdEQTBwQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEa2xzQ29tbXMsIERrbHNEa2csIERrbHNEcnYsIERrbHNUeXBlcywgRGtsc1ZyZiB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1saWItbXBjJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IE5vbkVtcHR5U3RyaW5nIH0gZnJvbSAnaW8tdHMtdHlwZXMnO1xuaW1wb3J0IHtcbiAgTVBDdjJEZXJpdmVSb3VuZDFSZXF1ZXN0LFxuICBNUEN2MkRlcml2ZVJvdW5kMVJlc3BvbnNlLFxuICBNUEN2MkRlcml2ZVJvdW5kMlJlcXVlc3QsXG4gIE1QQ3YyRGVyaXZlUm91bmQyUmVzcG9uc2UsXG4gIE1QQ3YyRGVyaXZlUm91bmQzUmVzcG9uc2UsXG4gIE1QQ3YyS2V5R2VuUm91bmQxUmVzcG9uc2UsXG4gIE1QQ3YyS2V5R2VuUm91bmQyUmVzcG9uc2UsXG4gIE1QQ3YyS2V5R2VuU3RhdGVFbnVtLFxufSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCB7IEtleWNoYWluc1RyaXBsZXQgfSBmcm9tICcuLi8uLi8uLi9iYXNlQ29pbic7XG5pbXBvcnQgeyBEZWNyeXB0ZWRSZXRyb2ZpdFBheWxvYWQgfSBmcm9tICcuLi8uLi8uLi9rZXljaGFpbi9pS2V5Y2hhaW5zJztcbmltcG9ydCB7IEVuY3J5cHRpb25WZXJzaW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXBpJztcbmltcG9ydCB7IGdlbmVyYXRlR1BHS2V5UGFpciB9IGZyb20gJy4uLy4uL29wZW5ncGdVdGlscyc7XG5pbXBvcnQgeyBXZWJhdXRobktleUVuY3J5cHRpb25JbmZvIH0gZnJvbSAnLi4vLi4vLi4va2V5Y2hhaW4nO1xuaW1wb3J0IHsgZW52UmVxdWlyZXNCaXRnb1B1YkdwZ0tleUNvbmZpZywgaXNCaXRnb01wY1B1YktleSB9IGZyb20gJy4uLy4uLy4uL3Rzcy9iaXRnb1B1YktleXMnO1xuaW1wb3J0IHsgYnVpbGRTYWZlTXBjS2V5RW52ZWxvcGVzIH0gZnJvbSAnLi4va2V5U2hhcmVFbnZlbG9wZSc7XG5pbXBvcnQgeyBFY2RzYU1QQ3YyVXRpbHMgfSBmcm9tICcuL2VjZHNhTVBDdjInO1xuaW1wb3J0IHtcbiAgRWNkc2FNUEN2MkRlcml2ZUtleVNlbmRGbixcbiAgS2V5R2VuU2VuZGVyRm9yRW50ZXJwcmlzZSxcbiAgS2V5R2VuU2VuZGVyRm9yU2FmZUNoaWxkLFxufSBmcm9tICcuL2VjZHNhTVBDdjJLZXlHZW5TZW5kZXInO1xuaW1wb3J0IHsgTVBDdjJQYXJ0aWVzRW51bSwgTXBjVjJWcmZLZXlHZW5SZXNwb25zZUZpZWxkcyB9IGZyb20gJy4vdHlwZXNNUEN2Mic7XG5cbi8qKlxuICogV2lyZSBmb3JtYXQgZm9yIFZSRiBES0cgbWVzc2FnZXMgcmlkaW5nIHRoZSBNUEN2Mi1SMS9SMiBwYXlsb2FkczogYW4gb3BhcXVlIGJsb2IsXG4gKiBgYmFzZTY0KEpTT04uc3RyaW5naWZ5KFZyZk1lc3NhZ2VUcmFuc2ZlcltdKSlgLCBjYXJyeWluZyB0aGUgcGFydHkncyBmdWxsIGJhdGNoIG9mXG4gKiBlbWl0dGVkIG1lc3NhZ2VzLiBUaGUgVlJGIERLRyBlbWl0cyBicm9hZGNhc3QgY29tbWl0bWVudHMgKFIxKSBhbmQgcGVyLXJlY2lwaWVudFxuICogb3BlbmluZyBtZXNzYWdlcyBhZGRyZXNzZWQgdG8gZWFjaCBwYXJ0eSBpbmNsdWRpbmcgdGhlIHNlbmRlciAoUjIpLCBzbyB0aGUgcmVjZWl2aW5nXG4gKiBzaWRlIHJvdXRlcyBieSBgdG9gIGFuZCBrZWVwcyBtZXNzYWdlcyBhZGRyZXNzZWQgdG8gaXRzZWxmLlxuICovXG5pbnRlcmZhY2UgVnJmTWVzc2FnZVRyYW5zZmVyIHtcbiAgZnJvbTogbnVtYmVyO1xuICB0bz86IG51bWJlcjtcbiAgcGF5bG9hZDogc3RyaW5nOyAvLyBiYXNlNjRcbn1cblxuZnVuY3Rpb24gc2VyaWFsaXplVnJmTWVzc2FnZXMobWVzc2FnZXM6IERrbHNUeXBlcy5EZXNlcmlhbGl6ZWRNZXNzYWdlcyk6IHN0cmluZyB7XG4gIGNvbnN0IHRyYW5zZmVyczogVnJmTWVzc2FnZVRyYW5zZmVyW10gPSBbXG4gICAgLi4ubWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXMubWFwKChtKSA9PiAoeyBmcm9tOiBtLmZyb20sIHBheWxvYWQ6IEJ1ZmZlci5mcm9tKG0ucGF5bG9hZCkudG9TdHJpbmcoJ2Jhc2U2NCcpIH0pKSxcbiAgICAuLi5tZXNzYWdlcy5wMnBNZXNzYWdlcy5tYXAoKG0pID0+ICh7XG4gICAgICBmcm9tOiBtLmZyb20sXG4gICAgICB0bzogbS50byxcbiAgICAgIHBheWxvYWQ6IEJ1ZmZlci5mcm9tKG0ucGF5bG9hZCkudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgIH0pKSxcbiAgXTtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHRyYW5zZmVycykpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbn1cblxuZnVuY3Rpb24gZGVzZXJpYWxpemVWcmZNZXNzYWdlcyhibG9iOiBzdHJpbmcsIGZvclBhcnR5OiBudW1iZXIpOiBEa2xzVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZXMge1xuICBjb25zdCB0cmFuc2ZlcnM6IFZyZk1lc3NhZ2VUcmFuc2ZlcltdID0gSlNPTi5wYXJzZShCdWZmZXIuZnJvbShibG9iLCAnYmFzZTY0JykudG9TdHJpbmcoKSk7XG4gIHJldHVybiB7XG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IHRyYW5zZmVyc1xuICAgICAgLmZpbHRlcigodCkgPT4gdC50byA9PT0gdW5kZWZpbmVkKVxuICAgICAgLm1hcCgodCkgPT4gKHsgZnJvbTogdC5mcm9tLCBwYXlsb2FkOiBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbSh0LnBheWxvYWQsICdiYXNlNjQnKSkgfSkpLFxuICAgIHAycE1lc3NhZ2VzOiB0cmFuc2ZlcnNcbiAgICAgIC5maWx0ZXIoKHQpOiB0IGlzIFZyZk1lc3NhZ2VUcmFuc2ZlciAmIHsgdG86IG51bWJlciB9ID0+IHQudG8gPT09IGZvclBhcnR5KVxuICAgICAgLm1hcCgodCkgPT4gKHsgZnJvbTogdC5mcm9tLCB0bzogdC50bywgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20odC5wYXlsb2FkLCAnYmFzZTY0JykpIH0pKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBFbmNvZGVzIGEgaGFyZGVuZWQgZGVyaXZhdGlvbiBpbmRleCBhcyB0aGUgYnl0ZSBwYXRoIHRoZSBES0xTIGhhcmQtZGVyaXZlIHdhc21cbiAqIGV4cGVjdHM6IG9uZSBiaWctZW5kaWFuIHUzMiB3aXRoIHRoZSBoYXJkZW5lZCBiaXQgKDB4ODAwMDAwMDApIHNldCDigJQgaS5lLiB0aGVcbiAqIGNoaWxkIHBhdGggYG0vPGluZGV4PidgLiBUaGUgc2VydmVyIGRlcml2ZXMgdGhlIHNhbWUgaGFyZGVuZWQgcGF0aCBmcm9tIHRoZVxuICogYGRlcml2YXRpb25JbmRleGAgaXQgcmVjZWl2ZXMgb24gcm91bmQgMS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhcmRlbmVkRGVyaXZhdGlvblBhdGgoaW5kZXg6IG51bWJlcik6IFVpbnQ4QXJyYXkge1xuICBpZiAoIU51bWJlci5pc0ludGVnZXIoaW5kZXgpIHx8IGluZGV4IDwgMCB8fCBpbmRleCA+IDB4N2ZmZmZmZmYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGVyaXZhdGlvbiBpbmRleDogJHtpbmRleH1gKTtcbiAgfVxuICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWzB4ODAgfCAoaW5kZXggPj4+IDI0KSwgKGluZGV4ID4+PiAxNikgJiAweGZmLCAoaW5kZXggPj4+IDgpICYgMHhmZiwgaW5kZXggJiAweGZmXSk7XG59XG5cbi8qKlxuICogRWNkc2FNUEN2MlV0aWxzIHZhcmlhbnQgdGhhdCBydW5zIHRoZSBSaXN0cmV0dG8gVlJGIERLRyBhbG9uZ3NpZGUgdGhlIHNpZ25pbmcgREtMU1xuICogREtHIGluc2lkZSB0aGUgc2FtZSBNUEN2MiBrZXlnZW4gcm91bmRzLCBmb3Igc2FmZSBNUEMgcm9vdCBjcmVhdGlvbi5cbiAqXG4gKiBUaGUgcm91bmQgZW51bSBpcyB1bmNoYW5nZWQ6IHRoZSBWUkYgY29tbWl0bWVudCByaWRlcyBNUEN2Mi1SMSwgdGhlIG9wZW5pbmcgcmlkZXNcbiAqIE1QQ3YyLVIyLCBhbmQgdGhlIFZSRiBES0cgZmluYWxpemVzIGxvY2FsbHkgYmVmb3JlIE1QQ3YyLVIzLiBWUkYgbWVzc2FnZXMgdHJhdmVsIGFzXG4gKiBvcGFxdWUgYmFzZTY0IGZpZWxkcyBvbiB0aGUgcm91bmQgcGF5bG9hZHMsIG5ldmVyIHRocm91Z2ggdGhlIERLTFMgYnJvYWRjYXN0L3AycCBzbG90cy5cbiAqIEF0IHRoZSBlbmQsIHRoZSBzaWduaW5nIGFuZCBWUkYga2V5c2hhcmVzIGFyZSBjb21iaW5lZCBpbnRvIGEgc2luZ2xlIENCT1IgZW52ZWxvcGVcbiAqIGJlZm9yZSBlbmNyeXB0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgRWNkc2FWcmZNUEN2MlV0aWxzIGV4dGVuZHMgRWNkc2FNUEN2MlV0aWxzIHtcbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGFzeW5jIGNyZWF0ZUtleWNoYWlucyhwYXJhbXM6IHtcbiAgICBwYXNzcGhyYXNlOiBzdHJpbmc7XG4gICAgZW50ZXJwcmlzZTogc3RyaW5nO1xuICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZT86IHN0cmluZztcbiAgICByZXRyb2ZpdD86IERlY3J5cHRlZFJldHJvZml0UGF5bG9hZDtcbiAgICB3ZWJhdXRobkluZm8/OiBXZWJhdXRobktleUVuY3J5cHRpb25JbmZvO1xuICAgIGVuY3J5cHRpb25WZXJzaW9uPzogRW5jcnlwdGlvblZlcnNpb247XG4gICAgLy8gVGFncyB0aGUgcmVzdWx0aW5nIHVzZXIvYmFja3VwL2JpdGdvIHJvb3Qga2V5cyB3aXRoIHRoaXMgc2FmZS5cbiAgICBzYWZlSWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8S2V5Y2hhaW5zVHJpcGxldD4ge1xuICAgIGNvbnN0IHsgdXNlclNlc3Npb24sIGJhY2t1cFNlc3Npb24gfSA9IHRoaXMuY3JlYXRlU2lnbmluZ0RrZ1Nlc3Npb25zKHBhcmFtcy5yZXRyb2ZpdCk7XG4gICAgY29uc3QgdXNlclZyZlNlc3Npb24gPSBuZXcgRGtsc1ZyZi5WcmZEa2coMywgMiwgTVBDdjJQYXJ0aWVzRW51bS5VU0VSKTtcbiAgICBjb25zdCBiYWNrdXBWcmZTZXNzaW9uID0gbmV3IERrbHNWcmYuVnJmRGtnKDMsIDIsIE1QQ3YyUGFydGllc0VudW0uQkFDS1VQKTtcblxuICAgIGNvbnN0IHVzZXJHcGdLZXkgPSBhd2FpdCBnZW5lcmF0ZUdQR0tleVBhaXIoJ3NlY3AyNTZrMScpO1xuICAgIGNvbnN0IGJhY2t1cEdwZ0tleSA9IGF3YWl0IGdlbmVyYXRlR1BHS2V5UGFpcignc2VjcDI1NmsxJyk7XG5cbiAgICAvLyBHZXQgdGhlIEJpdEdvIHB1YmxpYyBrZXkgYmFzZWQgb24gdXNlci9lbnRlcnByaXNlIGZlYXR1cmUgZmxhZ3NcbiAgICAvLyBJZiBpdCBkb2Vzbid0IHdvcmssIHVzZSB0aGUgZGVmYXVsdCBwdWJsaWMga2V5IGZyb20gdGhlIGNvbnN0YW50c1xuICAgIGNvbnN0IHsgbXBjdjJQdWJsaWNLZXkgfSA9IGF3YWl0IHRoaXMuZ2V0Qml0Z29HcGdQdWJrZXlCYXNlZE9uRmVhdHVyZUZsYWdzKHBhcmFtcy5lbnRlcnByaXNlLCB0cnVlKTtcbiAgICBjb25zdCBtcGN2MktleSA9IG1wY3YyUHVibGljS2V5ID8/IHRoaXMuYml0Z29NUEN2MlB1YmxpY0dwZ0tleTtcbiAgICBhc3NlcnQobXBjdjJLZXksICdGYWlsZWQgdG8gZ2V0IEJpdEdvIE1QQ3YyIEdQRyBwdWJsaWMga2V5Jyk7XG4gICAgY29uc3QgYml0Z29QdWJsaWNHcGdLZXkgPSBtcGN2MktleS5hcm1vcigpO1xuXG4gICAgaWYgKGVudlJlcXVpcmVzQml0Z29QdWJHcGdLZXlDb25maWcodGhpcy5iaXRnby5nZXRFbnYoKSkpIHtcbiAgICAgIC8vIEVuc3VyZSB0aGUgcHVibGljIGtleSBpcyBvbmUgb2YgdGhlIGV4cGVjdGVkIEJpdEdvIHB1YmxpYyBrZXlzIHdoZW4gaW4gdGVzdCBvciBwcm9kLlxuICAgICAgYXNzZXJ0KGlzQml0Z29NcGNQdWJLZXkoYml0Z29QdWJsaWNHcGdLZXksICdtcGN2MicpLCAnSW52YWxpZCBCaXRHbyBHUEcgcHVibGljIGtleScpO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJHcGdQcnZLZXk6IERrbHNUeXBlcy5QYXJ0eUdwZ0tleSA9IHtcbiAgICAgIHBhcnR5SWQ6IE1QQ3YyUGFydGllc0VudW0uVVNFUixcbiAgICAgIGdwZ0tleTogdXNlckdwZ0tleS5wcml2YXRlS2V5LFxuICAgIH07XG4gICAgY29uc3QgYmFja3VwR3BnUHJ2S2V5OiBEa2xzVHlwZXMuUGFydHlHcGdLZXkgPSB7XG4gICAgICBwYXJ0eUlkOiBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCxcbiAgICAgIGdwZ0tleTogYmFja3VwR3BnS2V5LnByaXZhdGVLZXksXG4gICAgfTtcbiAgICBjb25zdCBiaXRnb0dwZ1B1YktleTogRGtsc1R5cGVzLlBhcnR5R3BnS2V5ID0ge1xuICAgICAgcGFydHlJZDogTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyxcbiAgICAgIGdwZ0tleTogYml0Z29QdWJsaWNHcGdLZXksXG4gICAgfTtcblxuICAgIC8vICNyZWdpb24gcm91bmQgMVxuICAgIGNvbnN0IHVzZXJSb3VuZDFCcm9hZGNhc3RNc2cgPSBhd2FpdCB1c2VyU2Vzc2lvbi5pbml0RGtnKCk7XG4gICAgY29uc3QgYmFja3VwUm91bmQxQnJvYWRjYXN0TXNnID0gYXdhaXQgYmFja3VwU2Vzc2lvbi5pbml0RGtnKCk7XG4gICAgY29uc3QgdXNlclZyZlJvdW5kMU1zZyA9IGF3YWl0IHVzZXJWcmZTZXNzaW9uLmluaXREa2coKTtcbiAgICBjb25zdCBiYWNrdXBWcmZSb3VuZDFNc2cgPSBhd2FpdCBiYWNrdXBWcmZTZXNzaW9uLmluaXREa2coKTtcblxuICAgIGNvbnN0IHJvdW5kMVNlcmlhbGl6ZWRNZXNzYWdlcyA9IERrbHNUeXBlcy5zZXJpYWxpemVNZXNzYWdlcyh7XG4gICAgICBicm9hZGNhc3RNZXNzYWdlczogW3VzZXJSb3VuZDFCcm9hZGNhc3RNc2csIGJhY2t1cFJvdW5kMUJyb2FkY2FzdE1zZ10sXG4gICAgICBwMnBNZXNzYWdlczogW10sXG4gICAgfSk7XG4gICAgY29uc3Qgcm91bmQxTWVzc2FnZXMgPSBhd2FpdCBEa2xzQ29tbXMuZW5jcnlwdEFuZEF1dGhPdXRnb2luZ01lc3NhZ2VzKFxuICAgICAgcm91bmQxU2VyaWFsaXplZE1lc3NhZ2VzLFxuICAgICAgW2JpdGdvR3BnUHViS2V5XSxcbiAgICAgIFt1c2VyR3BnUHJ2S2V5LCBiYWNrdXBHcGdQcnZLZXldXG4gICAgKTtcbiAgICBjb25zdCB1c2VyTXNnMSA9IHJvdW5kMU1lc3NhZ2VzLmJyb2FkY2FzdE1lc3NhZ2VzLmZpbmQoKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5VU0VSKT8ucGF5bG9hZDtcbiAgICBjb25zdCBiYWNrdXBNc2cxID0gcm91bmQxTWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXMuZmluZCgobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCk/LnBheWxvYWQ7XG4gICAgYXNzZXJ0KHVzZXJNc2cxLCAnVXNlciBtZXNzYWdlIDEgbm90IGZvdW5kIGluIGJyb2FkY2FzdCBtZXNzYWdlcycpO1xuICAgIGFzc2VydChiYWNrdXBNc2cxLCAnQmFja3VwIG1lc3NhZ2UgMSBub3QgZm91bmQgaW4gYnJvYWRjYXN0IG1lc3NhZ2VzJyk7XG5cbiAgICBjb25zdCB1c2VyR3BnUHVibGljS2V5ID0gdXNlckdwZ0tleS5wdWJsaWNLZXk7XG4gICAgY29uc3QgYmFja3VwR3BnUHVibGljS2V5ID0gYmFja3VwR3BnS2V5LnB1YmxpY0tleTtcbiAgICBhc3NlcnQoTm9uRW1wdHlTdHJpbmcuaXModXNlckdwZ1B1YmxpY0tleSksICdVc2VyIEdQRyBwdWJsaWMga2V5IGlzIHJlcXVpcmVkJyk7XG4gICAgYXNzZXJ0KE5vbkVtcHR5U3RyaW5nLmlzKGJhY2t1cEdwZ1B1YmxpY0tleSksICdCYWNrdXAgR1BHIHB1YmxpYyBrZXkgaXMgcmVxdWlyZWQnKTtcbiAgICAvLyBLZWVwIFZSRiBtZXNzYWdlcyBvcGFxdWUgb24gdGhlIGtleS1nZW5lcmF0aW9uIHJlcXVlc3QuXG4gICAgY29uc3Qgcm91bmQxU2VuZGVyID0gS2V5R2VuU2VuZGVyRm9yRW50ZXJwcmlzZTxNUEN2MktleUdlblJvdW5kMVJlc3BvbnNlICYgTXBjVjJWcmZLZXlHZW5SZXNwb25zZUZpZWxkcz4oXG4gICAgICB0aGlzLmJpdGdvLFxuICAgICAgcGFyYW1zLmVudGVycHJpc2UsXG4gICAgICBwYXJhbXMuc2FmZUlkXG4gICAgKTtcbiAgICBjb25zdCB7IHNlc3Npb25JZCwgYml0Z29Nc2cxLCBiaXRnb1RvQmFja3VwTXNnMiwgYml0Z29Ub1VzZXJNc2cyLCBiaXRnb1ZyZk1zZzEgfSA9IGF3YWl0IHJvdW5kMVNlbmRlcihcbiAgICAgIE1QQ3YyS2V5R2VuU3RhdGVFbnVtWydNUEN2Mi1SMSddLFxuICAgICAge1xuICAgICAgICB1c2VyTXNnMTogeyBmcm9tOiBNUEN2MlBhcnRpZXNFbnVtLlVTRVIsIC4uLnVzZXJNc2cxIH0sXG4gICAgICAgIGJhY2t1cE1zZzE6IHsgZnJvbTogTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVAsIC4uLmJhY2t1cE1zZzEgfSxcbiAgICAgICAgdXNlckdwZ1B1YmxpY0tleSxcbiAgICAgICAgYmFja3VwR3BnUHVibGljS2V5LFxuICAgICAgICB1c2VyVnJmTXNnMTogc2VyaWFsaXplVnJmTWVzc2FnZXModXNlclZyZlJvdW5kMU1zZyksXG4gICAgICAgIGJhY2t1cFZyZk1zZzE6IHNlcmlhbGl6ZVZyZk1lc3NhZ2VzKGJhY2t1cFZyZlJvdW5kMU1zZyksXG4gICAgICAgIHdhbGxldElkOiBwYXJhbXMucmV0cm9maXQ/LndhbGxldElkLFxuICAgICAgfVxuICAgICk7XG4gICAgYXNzZXJ0KGJpdGdvVnJmTXNnMSwgJ0JpdEdvIFZSRiBtZXNzYWdlIDEgbm90IGZvdW5kIGluIHJvdW5kIDEgcmVzcG9uc2UnKTtcbiAgICAvLyAjZW5kcmVnaW9uXG5cbiAgICAvLyAjcmVnaW9uIHJvdW5kIDJcbiAgICBjb25zdCBiaXRnb1JvdW5kMUJyb2FkY2FzdE1lc3NhZ2VzID0gYXdhaXQgRGtsc0NvbW1zLmRlY3J5cHRBbmRWZXJpZnlJbmNvbWluZ01lc3NhZ2VzKFxuICAgICAgeyBwMnBNZXNzYWdlczogW10sIGJyb2FkY2FzdE1lc3NhZ2VzOiBbdGhpcy5mb3JtYXRCaXRnb0Jyb2FkY2FzdE1lc3NhZ2UoYml0Z29Nc2cxKV0gfSxcbiAgICAgIFtiaXRnb0dwZ1B1YktleV0sXG4gICAgICBbdXNlckdwZ1BydktleSwgYmFja3VwR3BnUHJ2S2V5XVxuICAgICk7XG4gICAgY29uc3QgYml0Z29Sb3VuZDFCcm9hZGNhc3RNc2cgPSBiaXRnb1JvdW5kMUJyb2FkY2FzdE1lc3NhZ2VzLmJyb2FkY2FzdE1lc3NhZ2VzLmZpbmQoXG4gICAgICAobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPXG4gICAgKTtcbiAgICBhc3NlcnQoYml0Z29Sb3VuZDFCcm9hZGNhc3RNc2csICdCaXRHbyBtZXNzYWdlIDEgbm90IGZvdW5kIGluIGJyb2FkY2FzdCBtZXNzYWdlcycpO1xuXG4gICAgY29uc3QgdXNlclJvdW5kMlAyUE1lc3NhZ2VzID0gdXNlclNlc3Npb24uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgICBwMnBNZXNzYWdlczogW10sXG4gICAgICBicm9hZGNhc3RNZXNzYWdlczogW0RrbHNUeXBlcy5kZXNlcmlhbGl6ZUJyb2FkY2FzdE1lc3NhZ2UoYml0Z29Sb3VuZDFCcm9hZGNhc3RNc2cpLCBiYWNrdXBSb3VuZDFCcm9hZGNhc3RNc2ddLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdXNlclRvQml0Z29Nc2cyID0gdXNlclJvdW5kMlAyUE1lc3NhZ2VzLnAycE1lc3NhZ2VzLmZpbmQoXG4gICAgICAobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLlVTRVIgJiYgbS50byA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CSVRHT1xuICAgICk7XG4gICAgYXNzZXJ0KHVzZXJUb0JpdGdvTXNnMiwgJ1VzZXIgbWVzc2FnZSAyIG5vdCBmb3VuZCBpbiBQMlAgbWVzc2FnZXMnKTtcbiAgICBjb25zdCBzZXJpYWxpemVkVXNlclRvQml0Z29Nc2cyID0gRGtsc1R5cGVzLnNlcmlhbGl6ZVAyUE1lc3NhZ2UodXNlclRvQml0Z29Nc2cyKTtcblxuICAgIGNvbnN0IGJhY2t1cFJvdW5kMlAyUE1lc3NhZ2VzID0gYmFja3VwU2Vzc2lvbi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbdXNlclJvdW5kMUJyb2FkY2FzdE1zZywgRGtsc1R5cGVzLmRlc2VyaWFsaXplQnJvYWRjYXN0TWVzc2FnZShiaXRnb1JvdW5kMUJyb2FkY2FzdE1zZyldLFxuICAgIH0pO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRCYWNrdXBUb0JpdGdvTXNnMiA9IERrbHNUeXBlcy5zZXJpYWxpemVNZXNzYWdlcyhiYWNrdXBSb3VuZDJQMlBNZXNzYWdlcykucDJwTWVzc2FnZXMuZmluZChcbiAgICAgIChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQICYmIG0udG8gPT09IE1QQ3YyUGFydGllc0VudW0uQklUR09cbiAgICApO1xuICAgIGFzc2VydChzZXJpYWxpemVkQmFja3VwVG9CaXRnb01zZzIsICdCYWNrdXAgbWVzc2FnZSAyIG5vdCBmb3VuZCBpbiBQMlAgbWVzc2FnZXMnKTtcblxuICAgIC8vIFZSRjogY29uc3VtZSBCaXRHbydzIGFuZCB0aGUgY291bnRlcnBhcnR5J3MgY29tbWl0bWVudHMsIGVtaXQgdGhpcyBwYXJ0eSdzIG9wZW5pbmdzLlxuICAgIC8vIE9wZW5pbmdzIGNvbWUgYmFjayBhcyBwMnAgbWVzc2FnZXMgYWRkcmVzc2VkIHRvIGVhY2ggcGFydHkgKGluY2x1ZGluZyB0aGUgc2VuZGVyKS5cbiAgICBjb25zdCB1c2VyVnJmUm91bmQyTWVzc2FnZXMgPSBhd2FpdCB1c2VyVnJmU2Vzc2lvbi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXG4gICAgICAgIC4uLmJhY2t1cFZyZlJvdW5kMU1zZy5icm9hZGNhc3RNZXNzYWdlcyxcbiAgICAgICAgLi4uZGVzZXJpYWxpemVWcmZNZXNzYWdlcyhiaXRnb1ZyZk1zZzEsIE1QQ3YyUGFydGllc0VudW0uVVNFUikuYnJvYWRjYXN0TWVzc2FnZXMsXG4gICAgICBdLFxuICAgICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYmFja3VwVnJmUm91bmQyTWVzc2FnZXMgPSBhd2FpdCBiYWNrdXBWcmZTZXNzaW9uLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtcbiAgICAgICAgLi4udXNlclZyZlJvdW5kMU1zZy5icm9hZGNhc3RNZXNzYWdlcyxcbiAgICAgICAgLi4uZGVzZXJpYWxpemVWcmZNZXNzYWdlcyhiaXRnb1ZyZk1zZzEsIE1QQ3YyUGFydGllc0VudW0uQkFDS1VQKS5icm9hZGNhc3RNZXNzYWdlcyxcbiAgICAgIF0sXG4gICAgICBwMnBNZXNzYWdlczogW10sXG4gICAgfSk7XG5cbiAgICBjb25zdCByb3VuZDJNZXNzYWdlcyA9IGF3YWl0IERrbHNDb21tcy5lbmNyeXB0QW5kQXV0aE91dGdvaW5nTWVzc2FnZXMoXG4gICAgICB7IHAycE1lc3NhZ2VzOiBbc2VyaWFsaXplZFVzZXJUb0JpdGdvTXNnMiwgc2VyaWFsaXplZEJhY2t1cFRvQml0Z29Nc2cyXSwgYnJvYWRjYXN0TWVzc2FnZXM6IFtdIH0sXG4gICAgICBbYml0Z29HcGdQdWJLZXldLFxuICAgICAgW3VzZXJHcGdQcnZLZXksIGJhY2t1cEdwZ1BydktleV1cbiAgICApO1xuICAgIGNvbnN0IHVzZXJSb3VuZDJNc2cgPSByb3VuZDJNZXNzYWdlcy5wMnBNZXNzYWdlcy5maW5kKFxuICAgICAgKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5VU0VSICYmIG0udG8gPT09IE1QQ3YyUGFydGllc0VudW0uQklUR09cbiAgICApO1xuICAgIGNvbnN0IGJhY2t1cFJvdW5kMk1zZyA9IHJvdW5kMk1lc3NhZ2VzLnAycE1lc3NhZ2VzLmZpbmQoXG4gICAgICAobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCAmJiBtLnRvID09PSBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPXG4gICAgKTtcbiAgICBhc3NlcnQodXNlclJvdW5kMk1zZywgJ1VzZXIgdG8gQml0Z28gbWVzc2FnZSAyIG5vdCBmb3VuZCBpbiBQMlAgbWVzc2FnZXMnKTtcbiAgICBhc3NlcnQodXNlclJvdW5kMk1zZy5jb21taXRtZW50LCAnVXNlciB0byBCaXRnbyBjb21taXRtZW50IG5vdCBmb3VuZCBpbiBQMlAgbWVzc2FnZXMnKTtcbiAgICBhc3NlcnQoYmFja3VwUm91bmQyTXNnLCAnQmFja3VwIHRvIEJpdGdvIG1lc3NhZ2UgMiBub3QgZm91bmQgaW4gUDJQIG1lc3NhZ2VzJyk7XG4gICAgYXNzZXJ0KGJhY2t1cFJvdW5kMk1zZy5jb21taXRtZW50LCAnQmFja3VwIHRvIEJpdGdvIGNvbW1pdG1lbnQgbm90IGZvdW5kIGluIFAyUCBtZXNzYWdlcycpO1xuICAgIGFzc2VydChOb25FbXB0eVN0cmluZy5pcyh1c2VyUm91bmQyTXNnLmNvbW1pdG1lbnQpLCAnVXNlciB0byBCaXRnbyBjb21taXRtZW50IGlzIHJlcXVpcmVkJyk7XG4gICAgYXNzZXJ0KE5vbkVtcHR5U3RyaW5nLmlzKGJhY2t1cFJvdW5kMk1zZy5jb21taXRtZW50KSwgJ0JhY2t1cCB0byBCaXRnbyBjb21taXRtZW50IGlzIHJlcXVpcmVkJyk7XG4gICAgY29uc3Qgcm91bmQyU2VuZGVyID0gS2V5R2VuU2VuZGVyRm9yRW50ZXJwcmlzZTxNUEN2MktleUdlblJvdW5kMlJlc3BvbnNlICYgTXBjVjJWcmZLZXlHZW5SZXNwb25zZUZpZWxkcz4oXG4gICAgICB0aGlzLmJpdGdvLFxuICAgICAgcGFyYW1zLmVudGVycHJpc2VcbiAgICApO1xuICAgIGNvbnN0IHtcbiAgICAgIHNlc3Npb25JZDogc2Vzc2lvbklkUm91bmQyLFxuICAgICAgYml0Z29Db21taXRtZW50MixcbiAgICAgIGJpdGdvVG9Vc2VyTXNnMyxcbiAgICAgIGJpdGdvVG9CYWNrdXBNc2czLFxuICAgICAgYml0Z29WcmZNc2cyLFxuICAgIH0gPSBhd2FpdCByb3VuZDJTZW5kZXIoTVBDdjJLZXlHZW5TdGF0ZUVudW1bJ01QQ3YyLVIyJ10sIHtcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIHVzZXJNc2cyOiB7XG4gICAgICAgIGZyb206IE1QQ3YyUGFydGllc0VudW0uVVNFUixcbiAgICAgICAgdG86IE1QQ3YyUGFydGllc0VudW0uQklUR08sXG4gICAgICAgIHNpZ25hdHVyZTogdXNlclJvdW5kMk1zZy5wYXlsb2FkLnNpZ25hdHVyZSxcbiAgICAgICAgZW5jcnlwdGVkTWVzc2FnZTogdXNlclJvdW5kMk1zZy5wYXlsb2FkLmVuY3J5cHRlZE1lc3NhZ2UsXG4gICAgICB9LFxuICAgICAgdXNlckNvbW1pdG1lbnQyOiB1c2VyUm91bmQyTXNnLmNvbW1pdG1lbnQsXG4gICAgICBiYWNrdXBNc2cyOiB7XG4gICAgICAgIGZyb206IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQLFxuICAgICAgICB0bzogTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyxcbiAgICAgICAgc2lnbmF0dXJlOiBiYWNrdXBSb3VuZDJNc2cucGF5bG9hZC5zaWduYXR1cmUsXG4gICAgICAgIGVuY3J5cHRlZE1lc3NhZ2U6IGJhY2t1cFJvdW5kMk1zZy5wYXlsb2FkLmVuY3J5cHRlZE1lc3NhZ2UsXG4gICAgICB9LFxuICAgICAgYmFja3VwQ29tbWl0bWVudDI6IGJhY2t1cFJvdW5kMk1zZy5jb21taXRtZW50LFxuICAgICAgdXNlclZyZk1zZzI6IHNlcmlhbGl6ZVZyZk1lc3NhZ2VzKHVzZXJWcmZSb3VuZDJNZXNzYWdlcyksXG4gICAgICBiYWNrdXBWcmZNc2cyOiBzZXJpYWxpemVWcmZNZXNzYWdlcyhiYWNrdXBWcmZSb3VuZDJNZXNzYWdlcyksXG4gICAgfSk7XG4gICAgLy8gI2VuZHJlZ2lvblxuXG4gICAgLy8gI3JlZ2lvbiByb3VuZCAzXG4gICAgYXNzZXJ0LmVxdWFsKHNlc3Npb25JZCwgc2Vzc2lvbklkUm91bmQyLCAnUm91bmQgMSBhbmQgMiBTZXNzaW9uIElEcyBkbyBub3QgbWF0Y2gnKTtcbiAgICBhc3NlcnQoYml0Z29WcmZNc2cyLCAnQml0R28gVlJGIG1lc3NhZ2UgMiBub3QgZm91bmQgaW4gcm91bmQgMiByZXNwb25zZScpO1xuXG4gICAgLy8gVlJGOiBmaW5hbGl6ZSBib3RoIERLR3MgbG9jYWxseSBieSBjb25zdW1pbmcgdGhlIG9wZW5pbmcgbWVzc2FnZXMgYWRkcmVzc2VkIHRvIGVhY2hcbiAgICAvLyBwYXJ0eSAoaW5jbHVkaW5nIGVhY2ggcGFydHkncyBvd24pIGZyb20gdGhlIFIyIGV4Y2hhbmdlcy4gVGhlIFZSRiBES0cgY29tcGxldGVzIGhlcmUsXG4gICAgLy8gYSBmdWxsIHJvdW5kIG9mIHNsYWNrIGJlZm9yZSBNUEN2Mi1SMy5cbiAgICBhd2FpdCB1c2VyVnJmU2Vzc2lvbi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXSxcbiAgICAgIHAycE1lc3NhZ2VzOiBbXG4gICAgICAgIC4uLnVzZXJWcmZSb3VuZDJNZXNzYWdlcy5wMnBNZXNzYWdlcy5maWx0ZXIoKG0pID0+IG0udG8gPT09IE1QQ3YyUGFydGllc0VudW0uVVNFUiksXG4gICAgICAgIC4uLmJhY2t1cFZyZlJvdW5kMk1lc3NhZ2VzLnAycE1lc3NhZ2VzLmZpbHRlcigobSkgPT4gbS50byA9PT0gTVBDdjJQYXJ0aWVzRW51bS5VU0VSKSxcbiAgICAgICAgLi4uZGVzZXJpYWxpemVWcmZNZXNzYWdlcyhiaXRnb1ZyZk1zZzIsIE1QQ3YyUGFydGllc0VudW0uVVNFUikucDJwTWVzc2FnZXMsXG4gICAgICBdLFxuICAgIH0pO1xuICAgIGF3YWl0IGJhY2t1cFZyZlNlc3Npb24uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgICBicm9hZGNhc3RNZXNzYWdlczogW10sXG4gICAgICBwMnBNZXNzYWdlczogW1xuICAgICAgICAuLi51c2VyVnJmUm91bmQyTWVzc2FnZXMucDJwTWVzc2FnZXMuZmlsdGVyKChtKSA9PiBtLnRvID09PSBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCksXG4gICAgICAgIC4uLmJhY2t1cFZyZlJvdW5kMk1lc3NhZ2VzLnAycE1lc3NhZ2VzLmZpbHRlcigobSkgPT4gbS50byA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVApLFxuICAgICAgICAuLi5kZXNlcmlhbGl6ZVZyZk1lc3NhZ2VzKGJpdGdvVnJmTXNnMiwgTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVApLnAycE1lc3NhZ2VzLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlY3J5cHRlZEJpdGdvVG9Vc2VyUm91bmQyTXNncyA9IGF3YWl0IERrbHNDb21tcy5kZWNyeXB0QW5kVmVyaWZ5SW5jb21pbmdNZXNzYWdlcyhcbiAgICAgIHsgcDJwTWVzc2FnZXM6IFt0aGlzLmZvcm1hdFAyUE1lc3NhZ2UoYml0Z29Ub1VzZXJNc2cyKV0sIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXSB9LFxuICAgICAgW2JpdGdvR3BnUHViS2V5XSxcbiAgICAgIFt1c2VyR3BnUHJ2S2V5XVxuICAgICk7XG4gICAgY29uc3Qgc2VyaWFsaXplZEJpdGdvVG9Vc2VyUm91bmQyTXNnID0gZGVjcnlwdGVkQml0Z29Ub1VzZXJSb3VuZDJNc2dzLnAycE1lc3NhZ2VzLmZpbmQoXG4gICAgICAobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPICYmIG0udG8gPT09IE1QQ3YyUGFydGllc0VudW0uVVNFUlxuICAgICk7XG4gICAgYXNzZXJ0KHNlcmlhbGl6ZWRCaXRnb1RvVXNlclJvdW5kMk1zZywgJ0JpdEdvIHRvIFVzZXIgbWVzc2FnZSAyIG5vdCBmb3VuZCBpbiBQMlAgbWVzc2FnZXMnKTtcbiAgICBjb25zdCBiaXRnb1RvVXNlclJvdW5kMk1zZyA9IERrbHNUeXBlcy5kZXNlcmlhbGl6ZVAyUE1lc3NhZ2Uoc2VyaWFsaXplZEJpdGdvVG9Vc2VyUm91bmQyTXNnKTtcblxuICAgIGNvbnN0IGRlY3J5cHRlZEJpdGdvVG9CYWNrdXBSb3VuZDJNc2cgPSBhd2FpdCBEa2xzQ29tbXMuZGVjcnlwdEFuZFZlcmlmeUluY29taW5nTWVzc2FnZXMoXG4gICAgICB7IHAycE1lc3NhZ2VzOiBbdGhpcy5mb3JtYXRQMlBNZXNzYWdlKGJpdGdvVG9CYWNrdXBNc2cyKV0sIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXSB9LFxuICAgICAgW2JpdGdvR3BnUHViS2V5XSxcbiAgICAgIFtiYWNrdXBHcGdQcnZLZXldXG4gICAgKTtcbiAgICBjb25zdCBzZXJpYWxpemVkQml0Z29Ub0JhY2t1cFJvdW5kMk1zZyA9IGRlY3J5cHRlZEJpdGdvVG9CYWNrdXBSb3VuZDJNc2cucDJwTWVzc2FnZXMuZmluZChcbiAgICAgIChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uQklUR08gJiYgbS50byA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVBcbiAgICApO1xuICAgIGFzc2VydChzZXJpYWxpemVkQml0Z29Ub0JhY2t1cFJvdW5kMk1zZywgJ0JpdEdvIHRvIEJhY2t1cCBtZXNzYWdlIDIgbm90IGZvdW5kIGluIFAyUCBtZXNzYWdlcycpO1xuICAgIGNvbnN0IGJpdGdvVG9CYWNrdXBSb3VuZDJNc2cgPSBEa2xzVHlwZXMuZGVzZXJpYWxpemVQMlBNZXNzYWdlKHNlcmlhbGl6ZWRCaXRnb1RvQmFja3VwUm91bmQyTXNnKTtcblxuICAgIGNvbnN0IHVzZXJUb0JhY2t1cE1zZzIgPSB1c2VyUm91bmQyUDJQTWVzc2FnZXMucDJwTWVzc2FnZXMuZmluZChcbiAgICAgIChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uVVNFUiAmJiBtLnRvID09PSBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUFxuICAgICk7XG4gICAgYXNzZXJ0KHVzZXJUb0JhY2t1cE1zZzIsICdVc2VyIHRvIEJhY2t1cCBtZXNzYWdlIDIgbm90IGZvdW5kIGluIFAyUCBtZXNzYWdlcycpO1xuXG4gICAgY29uc3QgYmFja3VwVG9Vc2VyTXNnMiA9IGJhY2t1cFJvdW5kMlAyUE1lc3NhZ2VzLnAycE1lc3NhZ2VzLmZpbmQoXG4gICAgICAobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCAmJiBtLnRvID09PSBNUEN2MlBhcnRpZXNFbnVtLlVTRVJcbiAgICApO1xuICAgIGFzc2VydChiYWNrdXBUb1VzZXJNc2cyLCAnQmFja3VwIHRvIFVzZXIgbWVzc2FnZSAyIG5vdCBmb3VuZCBpbiBQMlAgbWVzc2FnZXMnKTtcblxuICAgIGNvbnN0IHVzZXJSb3VuZDNNZXNzYWdlcyA9IHVzZXJTZXNzaW9uLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLFxuICAgICAgcDJwTWVzc2FnZXM6IFtiaXRnb1RvVXNlclJvdW5kMk1zZywgYmFja3VwVG9Vc2VyTXNnMl0sXG4gICAgfSk7XG4gICAgY29uc3QgdXNlclRvQmFja3VwTXNnMyA9IHVzZXJSb3VuZDNNZXNzYWdlcy5wMnBNZXNzYWdlcy5maW5kKFxuICAgICAgKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5VU0VSICYmIG0udG8gPT09IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQXG4gICAgKTtcbiAgICBhc3NlcnQodXNlclRvQmFja3VwTXNnMywgJ1VzZXIgdG8gQmFja3VwIG1lc3NhZ2UgMyBub3QgZm91bmQgaW4gUDJQIG1lc3NhZ2VzJyk7XG4gICAgY29uc3QgdXNlclRvQml0Z29Nc2czID0gdXNlclJvdW5kM01lc3NhZ2VzLnAycE1lc3NhZ2VzLmZpbmQoXG4gICAgICAobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLlVTRVIgJiYgbS50byA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CSVRHT1xuICAgICk7XG4gICAgYXNzZXJ0KHVzZXJUb0JpdGdvTXNnMywgJ1VzZXIgdG8gQml0Z28gbWVzc2FnZSAzIG5vdCBmb3VuZCBpbiBQMlAgbWVzc2FnZXMnKTtcbiAgICBjb25zdCBzZXJpYWxpemVkVXNlclRvQml0Z29Nc2czID0gRGtsc1R5cGVzLnNlcmlhbGl6ZVAyUE1lc3NhZ2UodXNlclRvQml0Z29Nc2czKTtcblxuICAgIGNvbnN0IGJhY2t1cFJvdW5kM01lc3NhZ2VzID0gYmFja3VwU2Vzc2lvbi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXSxcbiAgICAgIHAycE1lc3NhZ2VzOiBbYml0Z29Ub0JhY2t1cFJvdW5kMk1zZywgdXNlclRvQmFja3VwTXNnMl0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBiYWNrdXBUb1VzZXJNc2czID0gYmFja3VwUm91bmQzTWVzc2FnZXMucDJwTWVzc2FnZXMuZmluZChcbiAgICAgIChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQICYmIG0udG8gPT09IE1QQ3YyUGFydGllc0VudW0uVVNFUlxuICAgICk7XG4gICAgYXNzZXJ0KGJhY2t1cFRvVXNlck1zZzMsICdCYWNrdXAgdG8gVXNlciBtZXNzYWdlIDMgbm90IGZvdW5kIGluIFAyUCBtZXNzYWdlcycpO1xuICAgIGNvbnN0IGJhY2t1cFRvQml0Z29Nc2czID0gYmFja3VwUm91bmQzTWVzc2FnZXMucDJwTWVzc2FnZXMuZmluZChcbiAgICAgIChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQICYmIG0udG8gPT09IE1QQ3YyUGFydGllc0VudW0uQklUR09cbiAgICApO1xuICAgIGFzc2VydChiYWNrdXBUb0JpdGdvTXNnMywgJ0JhY2t1cCB0byBCaXRnbyBtZXNzYWdlIDMgbm90IGZvdW5kIGluIFAyUCBtZXNzYWdlcycpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRCYWNrdXBUb0JpdGdvTXNnMyA9IERrbHNUeXBlcy5zZXJpYWxpemVQMlBNZXNzYWdlKGJhY2t1cFRvQml0Z29Nc2czKTtcblxuICAgIGNvbnN0IGRlY3J5cHRlZEJpdGdvVG9Vc2VyUm91bmQzTWVzc2FnZXMgPSBhd2FpdCBEa2xzQ29tbXMuZGVjcnlwdEFuZFZlcmlmeUluY29taW5nTWVzc2FnZXMoXG4gICAgICB7IGJyb2FkY2FzdE1lc3NhZ2VzOiBbXSwgcDJwTWVzc2FnZXM6IFt0aGlzLmZvcm1hdFAyUE1lc3NhZ2UoYml0Z29Ub1VzZXJNc2czLCBiaXRnb0NvbW1pdG1lbnQyKV0gfSxcbiAgICAgIFtiaXRnb0dwZ1B1YktleV0sXG4gICAgICBbdXNlckdwZ1BydktleV1cbiAgICApO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRCaXRnb1RvVXNlclJvdW5kM01zZyA9IGRlY3J5cHRlZEJpdGdvVG9Vc2VyUm91bmQzTWVzc2FnZXMucDJwTWVzc2FnZXMuZmluZChcbiAgICAgIChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uQklUR08gJiYgbS50byA9PT0gTVBDdjJQYXJ0aWVzRW51bS5VU0VSXG4gICAgKTtcbiAgICBhc3NlcnQoc2VyaWFsaXplZEJpdGdvVG9Vc2VyUm91bmQzTXNnLCAnQml0R28gdG8gVXNlciBtZXNzYWdlIDMgbm90IGZvdW5kIGluIFAyUCBtZXNzYWdlcycpO1xuICAgIGNvbnN0IGJpdGdvVG9Vc2VyUm91bmQzTXNnID0gRGtsc1R5cGVzLmRlc2VyaWFsaXplUDJQTWVzc2FnZShzZXJpYWxpemVkQml0Z29Ub1VzZXJSb3VuZDNNc2cpO1xuXG4gICAgY29uc3QgZGVjcnlwdGVkQml0Z29Ub0JhY2t1cFJvdW5kM01lc3NhZ2VzID0gYXdhaXQgRGtsc0NvbW1zLmRlY3J5cHRBbmRWZXJpZnlJbmNvbWluZ01lc3NhZ2VzKFxuICAgICAgeyBicm9hZGNhc3RNZXNzYWdlczogW10sIHAycE1lc3NhZ2VzOiBbdGhpcy5mb3JtYXRQMlBNZXNzYWdlKGJpdGdvVG9CYWNrdXBNc2czLCBiaXRnb0NvbW1pdG1lbnQyKV0gfSxcbiAgICAgIFtiaXRnb0dwZ1B1YktleV0sXG4gICAgICBbYmFja3VwR3BnUHJ2S2V5XVxuICAgICk7XG4gICAgY29uc3Qgc2VyaWFsaXplZEJpdGdvVG9CYWNrdXBSb3VuZDNNc2cgPSBkZWNyeXB0ZWRCaXRnb1RvQmFja3VwUm91bmQzTWVzc2FnZXMucDJwTWVzc2FnZXMuZmluZChcbiAgICAgIChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uQklUR08gJiYgbS50byA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVBcbiAgICApO1xuICAgIGFzc2VydChzZXJpYWxpemVkQml0Z29Ub0JhY2t1cFJvdW5kM01zZywgJ0JpdEdvIHRvIEJhY2t1cCBtZXNzYWdlIDMgbm90IGZvdW5kIGluIFAyUCBtZXNzYWdlcycpO1xuICAgIGNvbnN0IGJpdGdvVG9CYWNrdXBSb3VuZDNNc2cgPSBEa2xzVHlwZXMuZGVzZXJpYWxpemVQMlBNZXNzYWdlKHNlcmlhbGl6ZWRCaXRnb1RvQmFja3VwUm91bmQzTXNnKTtcblxuICAgIGNvbnN0IHVzZXJSb3VuZDRNZXNzYWdlcyA9IHVzZXJTZXNzaW9uLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgICAgcDJwTWVzc2FnZXM6IFtiYWNrdXBUb1VzZXJNc2czLCBiaXRnb1RvVXNlclJvdW5kM01zZ10sXG4gICAgICBicm9hZGNhc3RNZXNzYWdlczogW10sXG4gICAgfSk7XG5cbiAgICBjb25zdCB1c2VyUm91bmQ0QnJvYWRjYXN0TXNnID0gdXNlclJvdW5kNE1lc3NhZ2VzLmJyb2FkY2FzdE1lc3NhZ2VzLmZpbmQoKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5VU0VSKTtcbiAgICBhc3NlcnQodXNlclJvdW5kNEJyb2FkY2FzdE1zZywgJ1VzZXIgbWVzc2FnZSA0IG5vdCBmb3VuZCBpbiBicm9hZGNhc3QgbWVzc2FnZXMnKTtcbiAgICBjb25zdCBzZXJpYWxpemVkVXNlclJvdW5kNEJyb2FkY2FzdE1zZyA9IERrbHNUeXBlcy5zZXJpYWxpemVCcm9hZGNhc3RNZXNzYWdlKHVzZXJSb3VuZDRCcm9hZGNhc3RNc2cpO1xuXG4gICAgY29uc3QgYmFja3VwUm91bmQ0TWVzc2FnZXMgPSBiYWNrdXBTZXNzaW9uLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgICAgcDJwTWVzc2FnZXM6IFt1c2VyVG9CYWNrdXBNc2czLCBiaXRnb1RvQmFja3VwUm91bmQzTXNnXSxcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXSxcbiAgICB9KTtcbiAgICBjb25zdCBiYWNrdXBSb3VuZDRCcm9hZGNhc3RNc2cgPSBiYWNrdXBSb3VuZDRNZXNzYWdlcy5icm9hZGNhc3RNZXNzYWdlcy5maW5kKFxuICAgICAgKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVBcbiAgICApO1xuICAgIGFzc2VydChiYWNrdXBSb3VuZDRCcm9hZGNhc3RNc2csICdCYWNrdXAgbWVzc2FnZSA0IG5vdCBmb3VuZCBpbiBicm9hZGNhc3QgbWVzc2FnZXMnKTtcbiAgICBjb25zdCBzZXJpYWxpemVkQmFja3VwUm91bmQ0QnJvYWRjYXN0TXNnID0gRGtsc1R5cGVzLnNlcmlhbGl6ZUJyb2FkY2FzdE1lc3NhZ2UoYmFja3VwUm91bmQ0QnJvYWRjYXN0TXNnKTtcblxuICAgIGNvbnN0IHJvdW5kM01lc3NhZ2VzID0gYXdhaXQgRGtsc0NvbW1zLmVuY3J5cHRBbmRBdXRoT3V0Z29pbmdNZXNzYWdlcyhcbiAgICAgIHtcbiAgICAgICAgcDJwTWVzc2FnZXM6IFtzZXJpYWxpemVkVXNlclRvQml0Z29Nc2czLCBzZXJpYWxpemVkQmFja3VwVG9CaXRnb01zZzNdLFxuICAgICAgICBicm9hZGNhc3RNZXNzYWdlczogW3NlcmlhbGl6ZWRVc2VyUm91bmQ0QnJvYWRjYXN0TXNnLCBzZXJpYWxpemVkQmFja3VwUm91bmQ0QnJvYWRjYXN0TXNnXSxcbiAgICAgIH0sXG4gICAgICBbYml0Z29HcGdQdWJLZXldLFxuICAgICAgW3VzZXJHcGdQcnZLZXksIGJhY2t1cEdwZ1BydktleV1cbiAgICApO1xuXG4gICAgY29uc3Qge1xuICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uSWRSb3VuZDMsXG4gICAgICBiaXRnb01zZzQsXG4gICAgICBjb21tb25LZXljaGFpbjogYml0Z29Db21tb25LZXljaGFpbixcbiAgICB9ID0gYXdhaXQgdGhpcy5zZW5kS2V5R2VuZXJhdGlvblJvdW5kMyhwYXJhbXMuZW50ZXJwcmlzZSwgc2Vzc2lvbklkLCByb3VuZDNNZXNzYWdlcyk7XG5cbiAgICAvLyAjZW5kcmVnaW9uXG5cbiAgICAvLyAjcmVnaW9uIGtleWNoYWluIGNyZWF0aW9uXG4gICAgYXNzZXJ0LmVxdWFsKHNlc3Npb25JZCwgc2Vzc2lvbklkUm91bmQzLCAnUm91bmQgMSBhbmQgMyBTZXNzaW9uIElEcyBkbyBub3QgbWF0Y2gnKTtcbiAgICBjb25zdCBiaXRnb1JvdW5kNEJyb2FkY2FzdE1lc3NhZ2VzID0gRGtsc1R5cGVzLmRlc2VyaWFsaXplTWVzc2FnZXMoXG4gICAgICBhd2FpdCBEa2xzQ29tbXMuZGVjcnlwdEFuZFZlcmlmeUluY29taW5nTWVzc2FnZXMoXG4gICAgICAgIHsgcDJwTWVzc2FnZXM6IFtdLCBicm9hZGNhc3RNZXNzYWdlczogW3RoaXMuZm9ybWF0Qml0Z29Ccm9hZGNhc3RNZXNzYWdlKGJpdGdvTXNnNCldIH0sXG4gICAgICAgIFtiaXRnb0dwZ1B1YktleV0sXG4gICAgICAgIFtdXG4gICAgICApXG4gICAgKS5icm9hZGNhc3RNZXNzYWdlcztcbiAgICBjb25zdCBiaXRnb1JvdW5kNEJyb2FkY2FzdE1zZyA9IGJpdGdvUm91bmQ0QnJvYWRjYXN0TWVzc2FnZXMuZmluZCgobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPKTtcblxuICAgIGFzc2VydChiaXRnb1JvdW5kNEJyb2FkY2FzdE1zZywgJ0JpdEdvIG1lc3NhZ2UgNCBub3QgZm91bmQgaW4gYnJvYWRjYXN0IG1lc3NhZ2VzJyk7XG4gICAgdXNlclNlc3Npb24uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgICBwMnBNZXNzYWdlczogW10sXG4gICAgICBicm9hZGNhc3RNZXNzYWdlczogW2JpdGdvUm91bmQ0QnJvYWRjYXN0TXNnLCBiYWNrdXBSb3VuZDRCcm9hZGNhc3RNc2ddLFxuICAgIH0pO1xuXG4gICAgYmFja3VwU2Vzc2lvbi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbYml0Z29Sb3VuZDRCcm9hZGNhc3RNc2csIHVzZXJSb3VuZDRCcm9hZGNhc3RNc2ddLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdXNlclByaXZhdGVNYXRlcmlhbCA9IHVzZXJTZXNzaW9uLmdldEtleVNoYXJlKCk7XG4gICAgY29uc3QgYmFja3VwUHJpdmF0ZU1hdGVyaWFsID0gYmFja3VwU2Vzc2lvbi5nZXRLZXlTaGFyZSgpO1xuICAgIGNvbnN0IHVzZXJSZWR1Y2VkUHJpdmF0ZU1hdGVyaWFsID0gdXNlclNlc3Npb24uZ2V0UmVkdWNlZEtleVNoYXJlKCk7XG4gICAgY29uc3QgYmFja3VwUmVkdWNlZFByaXZhdGVNYXRlcmlhbCA9IGJhY2t1cFNlc3Npb24uZ2V0UmVkdWNlZEtleVNoYXJlKCk7XG4gICAgY29uc3QgdXNlclZyZktleVNoYXJlID0gdXNlclZyZlNlc3Npb24uZ2V0S2V5U2hhcmUoKTtcbiAgICBjb25zdCBiYWNrdXBWcmZLZXlTaGFyZSA9IGJhY2t1cFZyZlNlc3Npb24uZ2V0S2V5U2hhcmUoKTtcblxuICAgIGNvbnN0IHVzZXJDb21tb25LZXljaGFpbiA9IERrbHNUeXBlcy5nZXRDb21tb25LZXljaGFpbih1c2VyUHJpdmF0ZU1hdGVyaWFsKTtcbiAgICBjb25zdCBiYWNrdXBDb21tb25LZXljaGFpbiA9IERrbHNUeXBlcy5nZXRDb21tb25LZXljaGFpbihiYWNrdXBQcml2YXRlTWF0ZXJpYWwpO1xuXG4gICAgYXNzZXJ0LmVxdWFsKGJpdGdvQ29tbW9uS2V5Y2hhaW4sIHVzZXJDb21tb25LZXljaGFpbiwgJ1VzZXIgYW5kIEJpdGdvIENvbW1vbiBrZXljaGFpbnMgZG8gbm90IG1hdGNoJyk7XG4gICAgYXNzZXJ0LmVxdWFsKGJpdGdvQ29tbW9uS2V5Y2hhaW4sIGJhY2t1cENvbW1vbktleWNoYWluLCAnQmFja3VwIGFuZCBCaXRnbyBDb21tb24ga2V5Y2hhaW5zIGRvIG5vdCBtYXRjaCcpO1xuXG4gICAgY29uc3QgeyBlbnZlbG9wZTogdXNlckVudmVsb3BlLCByZWR1Y2VkRW52ZWxvcGU6IHVzZXJSZWR1Y2VkRW52ZWxvcGUgfSA9IGJ1aWxkU2FmZU1wY0tleUVudmVsb3BlcyhcbiAgICAgIHVzZXJQcml2YXRlTWF0ZXJpYWwsXG4gICAgICB1c2VyUmVkdWNlZFByaXZhdGVNYXRlcmlhbCxcbiAgICAgIHVzZXJWcmZLZXlTaGFyZVxuICAgICk7XG4gICAgY29uc3QgeyBlbnZlbG9wZTogYmFja3VwRW52ZWxvcGUsIHJlZHVjZWRFbnZlbG9wZTogYmFja3VwUmVkdWNlZEVudmVsb3BlIH0gPSBidWlsZFNhZmVNcGNLZXlFbnZlbG9wZXMoXG4gICAgICBiYWNrdXBQcml2YXRlTWF0ZXJpYWwsXG4gICAgICBiYWNrdXBSZWR1Y2VkUHJpdmF0ZU1hdGVyaWFsLFxuICAgICAgYmFja3VwVnJmS2V5U2hhcmVcbiAgICApO1xuXG4gICAgY29uc3QgZW5jcnlwdGlvblNlc3Npb24gPVxuICAgICAgcGFyYW1zLmVuY3J5cHRpb25WZXJzaW9uID09PSAyID8gYXdhaXQgdGhpcy5iaXRnby5jcmVhdGVFbmNyeXB0aW9uU2Vzc2lvbihwYXJhbXMucGFzc3BocmFzZSkgOiB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVzZXJLZXljaGFpblByb21pc2UgPSB0aGlzLmNyZWF0ZVBhcnRpY2lwYW50S2V5Y2hhaW4oXG4gICAgICAgIE1QQ3YyUGFydGllc0VudW0uVVNFUixcbiAgICAgICAgYml0Z29Db21tb25LZXljaGFpbixcbiAgICAgICAgdXNlckVudmVsb3BlLFxuICAgICAgICB1c2VyUmVkdWNlZEVudmVsb3BlLFxuICAgICAgICBwYXJhbXMucGFzc3BocmFzZSxcbiAgICAgICAgcGFyYW1zLm9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZSxcbiAgICAgICAgcGFyYW1zLndlYmF1dGhuSW5mbyxcbiAgICAgICAgZW5jcnlwdGlvblNlc3Npb24sXG4gICAgICAgIHBhcmFtcy5lbmNyeXB0aW9uVmVyc2lvbixcbiAgICAgICAgcGFyYW1zLmVudGVycHJpc2UsXG4gICAgICAgIHBhcmFtcy5zYWZlSWRcbiAgICAgICk7XG4gICAgICBjb25zdCBiYWNrdXBLZXljaGFpblByb21pc2UgPSB0aGlzLmNyZWF0ZVBhcnRpY2lwYW50S2V5Y2hhaW4oXG4gICAgICAgIE1QQ3YyUGFydGllc0VudW0uQkFDS1VQLFxuICAgICAgICBiaXRnb0NvbW1vbktleWNoYWluLFxuICAgICAgICBiYWNrdXBFbnZlbG9wZSxcbiAgICAgICAgYmFja3VwUmVkdWNlZEVudmVsb3BlLFxuICAgICAgICBwYXJhbXMucGFzc3BocmFzZSxcbiAgICAgICAgcGFyYW1zLm9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBlbmNyeXB0aW9uU2Vzc2lvbixcbiAgICAgICAgcGFyYW1zLmVuY3J5cHRpb25WZXJzaW9uLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHBhcmFtcy5zYWZlSWRcbiAgICAgICk7XG4gICAgICBjb25zdCBiaXRnb0tleWNoYWluUHJvbWlzZSA9IHRoaXMuY3JlYXRlUGFydGljaXBhbnRLZXljaGFpbihcbiAgICAgICAgTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyxcbiAgICAgICAgYml0Z29Db21tb25LZXljaGFpbixcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHBhcmFtcy5zYWZlSWRcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IFt1c2VyS2V5Y2hhaW4sIGJhY2t1cEtleWNoYWluLCBiaXRnb0tleWNoYWluXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgdXNlcktleWNoYWluUHJvbWlzZSxcbiAgICAgICAgYmFja3VwS2V5Y2hhaW5Qcm9taXNlLFxuICAgICAgICBiaXRnb0tleWNoYWluUHJvbWlzZSxcbiAgICAgIF0pO1xuICAgICAgLy8gI2VuZHJlZ2lvblxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB1c2VyS2V5Y2hhaW4sXG4gICAgICAgIGJhY2t1cEtleWNoYWluLFxuICAgICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZW5jcnlwdGlvblNlc3Npb24/LmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFNlbmRzIHJvdW5kIDEgZm9yIHRoZSB1c2VyL0JpdEdvIGhhcmQtZGVyaXZlIGNlcmVtb255LlxuICAgKi9cbiAgYXN5bmMgc2VuZERlcml2YXRpb25Sb3VuZDFCeVNlbmRlcihcbiAgICBzZW5kZXJGbjogRWNkc2FNUEN2MkRlcml2ZUtleVNlbmRGbjxNUEN2MkRlcml2ZVJvdW5kMVJlc3BvbnNlPixcbiAgICB1c2VyR3BnUHVibGljS2V5OiBzdHJpbmcsXG4gICAgcGF5bG9hZDogRGtsc1R5cGVzLkF1dGhFbmNNZXNzYWdlcyxcbiAgICBwYXJlbnRLZXlJZDogc3RyaW5nLFxuICAgIGRlcml2YXRpb25JbmRleDogbnVtYmVyXG4gICk6IFByb21pc2U8TVBDdjJEZXJpdmVSb3VuZDFSZXNwb25zZT4ge1xuICAgIGFzc2VydChOb25FbXB0eVN0cmluZy5pcyh1c2VyR3BnUHVibGljS2V5KSwgJ1VzZXIgR1BHIHB1YmxpYyBrZXkgaXMgcmVxdWlyZWQnKTtcbiAgICBhc3NlcnQoTm9uRW1wdHlTdHJpbmcuaXMocGFyZW50S2V5SWQpLCAnUGFyZW50IGtleSBpZCBpcyByZXF1aXJlZCcpO1xuICAgIGNvbnN0IHVzZXJNc2cxID0gcGF5bG9hZC5icm9hZGNhc3RNZXNzYWdlcy5maW5kKChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uVVNFUik/LnBheWxvYWQ7XG4gICAgYXNzZXJ0KHVzZXJNc2cxLCAnVXNlciBtZXNzYWdlIDEgbm90IGZvdW5kIGluIGJyb2FkY2FzdCBtZXNzYWdlcycpO1xuXG4gICAgYXNzZXJ0KFxuICAgICAgTVBDdjJEZXJpdmVSb3VuZDFSZXF1ZXN0LnByb3BzLmRlcml2YXRpb25JbmRleC5pcyhkZXJpdmF0aW9uSW5kZXgpLFxuICAgICAgJ0Rlcml2YXRpb24gaW5kZXggbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBzYWZlIGludGVnZXInXG4gICAgKTtcbiAgICBjb25zdCByZXF1ZXN0OiBNUEN2MkRlcml2ZVJvdW5kMVJlcXVlc3QgPSB7XG4gICAgICB1c2VyR3BnUHVibGljS2V5LFxuICAgICAgdXNlck1zZzE6IHsgZnJvbTogTVBDdjJQYXJ0aWVzRW51bS5VU0VSLCAuLi51c2VyTXNnMSB9LFxuICAgICAgcGFyZW50S2V5SWQsXG4gICAgICBkZXJpdmF0aW9uSW5kZXgsXG4gICAgfTtcbiAgICByZXR1cm4gc2VuZGVyRm4oTVBDdjJLZXlHZW5TdGF0ZUVudW1bJ01QQ3YyRGVyaXZlLVIxJ10sIHJlcXVlc3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIHJvdW5kIDIgZm9yIHRoZSB1c2VyL0JpdEdvIGhhcmQtZGVyaXZlIGNlcmVtb255LlxuICAgKi9cbiAgYXN5bmMgc2VuZERlcml2YXRpb25Sb3VuZDJCeVNlbmRlcihcbiAgICBzZW5kZXJGbjogRWNkc2FNUEN2MkRlcml2ZUtleVNlbmRGbjxNUEN2MkRlcml2ZVJvdW5kMlJlc3BvbnNlPixcbiAgICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgICBwYXlsb2FkOiBEa2xzVHlwZXMuQXV0aEVuY01lc3NhZ2VzXG4gICk6IFByb21pc2U8TVBDdjJEZXJpdmVSb3VuZDJSZXNwb25zZT4ge1xuICAgIGFzc2VydChOb25FbXB0eVN0cmluZy5pcyhzZXNzaW9uSWQpLCAnU2Vzc2lvbiBJRCBpcyByZXF1aXJlZCcpO1xuICAgIGNvbnN0IHVzZXJNc2cyID0gcGF5bG9hZC5icm9hZGNhc3RNZXNzYWdlcy5maW5kKChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uVVNFUik/LnBheWxvYWQ7XG4gICAgYXNzZXJ0KHVzZXJNc2cyLCAnVXNlciBtZXNzYWdlIDIgbm90IGZvdW5kIGluIGJyb2FkY2FzdCBtZXNzYWdlcycpO1xuXG4gICAgY29uc3QgcmVxdWVzdDogTVBDdjJEZXJpdmVSb3VuZDJSZXF1ZXN0ID0ge1xuICAgICAgc2Vzc2lvbklkLFxuICAgICAgdXNlck1zZzI6IHsgZnJvbTogTVBDdjJQYXJ0aWVzRW51bS5VU0VSLCAuLi51c2VyTXNnMiB9LFxuICAgIH07XG4gICAgcmV0dXJuIHNlbmRlckZuKE1QQ3YyS2V5R2VuU3RhdGVFbnVtWydNUEN2MkRlcml2ZS1SMiddLCByZXF1ZXN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wbGV0ZXMgcm91bmQgMyBhbmQgcmV0dXJucyB0aGUgY2hpbGQgY29tbW9uIGtleWNoYWluLlxuICAgKi9cbiAgYXN5bmMgc2VuZERlcml2YXRpb25Sb3VuZDNCeVNlbmRlcihcbiAgICBzZW5kZXJGbjogRWNkc2FNUEN2MkRlcml2ZUtleVNlbmRGbjxNUEN2MkRlcml2ZVJvdW5kM1Jlc3BvbnNlPixcbiAgICBzZXNzaW9uSWQ6IHN0cmluZ1xuICApOiBQcm9taXNlPE1QQ3YyRGVyaXZlUm91bmQzUmVzcG9uc2U+IHtcbiAgICBhc3NlcnQoTm9uRW1wdHlTdHJpbmcuaXMoc2Vzc2lvbklkKSwgJ1Nlc3Npb24gSUQgaXMgcmVxdWlyZWQnKTtcbiAgICByZXR1cm4gc2VuZGVyRm4oTVBDdjJLZXlHZW5TdGF0ZUVudW1bJ01QQ3YyRGVyaXZlLVIzJ10sIHsgc2Vzc2lvbklkIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgdGhlIHNhZmUgY2hpbGQgaGFyZC1kZXJpdmUgY2VyZW1vbnkgYW5kIHJlZ2lzdGVycyBjaGlsZCBrZXkgZG9jdW1lbnRzLlxuICAgKi9cbiAgYXN5bmMgY3JlYXRlU2FmZUNoaWxkS2V5Y2hhaW5zKHBhcmFtczoge1xuICAgIHBhc3NwaHJhc2U6IHN0cmluZztcbiAgICBlbnRlcnByaXNlOiBzdHJpbmc7XG4gICAgc2FmZUlkOiBzdHJpbmc7XG4gICAgLyoqIFJvb3Qga2V5IElEIHVzZWQgZm9yIHRoZSBkZXJpdmUuICovXG4gICAgcGFyZW50S2V5SWQ6IHN0cmluZztcbiAgICBkZXJpdmF0aW9uSW5kZXg6IG51bWJlcjtcbiAgICB1c2VyUm9vdEtleUlkOiBzdHJpbmc7XG4gICAgYmFja3VwUm9vdEtleUlkOiBzdHJpbmc7XG4gICAgdXNlclJvb3RLZXlTaGFyZTogQnVmZmVyO1xuICAgIHVzZXJSb290VnJmS2V5U2hhcmU6IEJ1ZmZlcjtcbiAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGU/OiBzdHJpbmc7XG4gICAgd2ViYXV0aG5JbmZvPzogV2ViYXV0aG5LZXlFbmNyeXB0aW9uSW5mbztcbiAgICBlbmNyeXB0aW9uVmVyc2lvbj86IEVuY3J5cHRpb25WZXJzaW9uO1xuICB9KTogUHJvbWlzZTxLZXljaGFpbnNUcmlwbGV0PiB7XG4gICAgY29uc3QgdXNlckdwZ0tleSA9IGF3YWl0IGdlbmVyYXRlR1BHS2V5UGFpcignc2VjcDI1NmsxJyk7XG4gICAgY29uc3QgeyBtcGN2MlB1YmxpY0tleSB9ID0gYXdhaXQgdGhpcy5nZXRCaXRnb0dwZ1B1YmtleUJhc2VkT25GZWF0dXJlRmxhZ3MocGFyYW1zLmVudGVycHJpc2UsIHRydWUpO1xuICAgIGNvbnN0IG1wY3YyS2V5ID0gbXBjdjJQdWJsaWNLZXkgPz8gdGhpcy5iaXRnb01QQ3YyUHVibGljR3BnS2V5O1xuICAgIGFzc2VydChtcGN2MktleSwgJ0ZhaWxlZCB0byBnZXQgQml0R28gTVBDdjIgR1BHIHB1YmxpYyBrZXknKTtcbiAgICBjb25zdCBiaXRnb1B1YmxpY0dwZ0tleSA9IG1wY3YyS2V5LmFybW9yKCk7XG5cbiAgICBpZiAoZW52UmVxdWlyZXNCaXRnb1B1YkdwZ0tleUNvbmZpZyh0aGlzLmJpdGdvLmdldEVudigpKSkge1xuICAgICAgYXNzZXJ0KGlzQml0Z29NcGNQdWJLZXkoYml0Z29QdWJsaWNHcGdLZXksICdtcGN2MicpLCAnSW52YWxpZCBCaXRHbyBHUEcgcHVibGljIGtleScpO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJHcGdQcnZLZXk6IERrbHNUeXBlcy5QYXJ0eUdwZ0tleSA9IHtcbiAgICAgIHBhcnR5SWQ6IE1QQ3YyUGFydGllc0VudW0uVVNFUixcbiAgICAgIGdwZ0tleTogdXNlckdwZ0tleS5wcml2YXRlS2V5LFxuICAgIH07XG4gICAgY29uc3QgYml0Z29HcGdQdWJLZXk6IERrbHNUeXBlcy5QYXJ0eUdwZ0tleSA9IHtcbiAgICAgIHBhcnR5SWQ6IE1QQ3YyUGFydGllc0VudW0uQklUR08sXG4gICAgICBncGdLZXk6IGJpdGdvUHVibGljR3BnS2V5LFxuICAgIH07XG5cbiAgICBjb25zdCBwYXRoID0gaGFyZGVuZWREZXJpdmF0aW9uUGF0aChwYXJhbXMuZGVyaXZhdGlvbkluZGV4KTtcbiAgICBjb25zdCB1c2VyRGVyaXZlU2Vzc2lvbiA9IG5ldyBEa2xzRHJ2LkRlcml2ZShcbiAgICAgIDMsXG4gICAgICAyLFxuICAgICAgTVBDdjJQYXJ0aWVzRW51bS5VU0VSLFxuICAgICAgcGFyYW1zLnVzZXJSb290S2V5U2hhcmUsXG4gICAgICBwYXJhbXMudXNlclJvb3RWcmZLZXlTaGFyZSxcbiAgICAgIHBhdGhcbiAgICApO1xuXG4gICAgLy8gUm91bmQgMTogc2VuZCB0aGUgdXNlcidzIGZpcnN0IG1lc3NhZ2UuXG4gICAgY29uc3QgdXNlclJvdW5kMU1zZyA9IGF3YWl0IHVzZXJEZXJpdmVTZXNzaW9uLmluaXREZXJpdmUoKTtcbiAgICBjb25zdCByb3VuZDFNZXNzYWdlcyA9IGF3YWl0IERrbHNDb21tcy5lbmNyeXB0QW5kQXV0aE91dGdvaW5nTWVzc2FnZXMoXG4gICAgICB7XG4gICAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbRGtsc1R5cGVzLnNlcmlhbGl6ZUJyb2FkY2FzdE1lc3NhZ2UodXNlclJvdW5kMU1zZyldLFxuICAgICAgICBwMnBNZXNzYWdlczogW10sXG4gICAgICB9LFxuICAgICAgW2JpdGdvR3BnUHViS2V5XSxcbiAgICAgIFt1c2VyR3BnUHJ2S2V5XVxuICAgICk7XG4gICAgYXNzZXJ0KE5vbkVtcHR5U3RyaW5nLmlzKHVzZXJHcGdLZXkucHVibGljS2V5KSwgJ1VzZXIgR1BHIHB1YmxpYyBrZXkgaXMgcmVxdWlyZWQnKTtcbiAgICBjb25zdCB7IHNlc3Npb25JZCwgYml0Z29Nc2cxIH0gPSBhd2FpdCB0aGlzLnNlbmREZXJpdmF0aW9uUm91bmQxQnlTZW5kZXIoXG4gICAgICBLZXlHZW5TZW5kZXJGb3JTYWZlQ2hpbGQ8TVBDdjJEZXJpdmVSb3VuZDFSZXNwb25zZT4odGhpcy5iaXRnbywgcGFyYW1zLmVudGVycHJpc2UsIHBhcmFtcy5zYWZlSWQpLFxuICAgICAgdXNlckdwZ0tleS5wdWJsaWNLZXksXG4gICAgICByb3VuZDFNZXNzYWdlcyxcbiAgICAgIHBhcmFtcy5wYXJlbnRLZXlJZCxcbiAgICAgIHBhcmFtcy5kZXJpdmF0aW9uSW5kZXhcbiAgICApO1xuXG4gICAgLy8gUm91bmQgMjogcHJvY2VzcyB0aGUgcGVlcidzIGZpcnN0IG1lc3NhZ2UgYW5kIHJldHVybiB0aGUgdXNlcidzIHNlY29uZC5cbiAgICBjb25zdCBkZWNyeXB0ZWRCaXRnb1JvdW5kMSA9IGF3YWl0IERrbHNDb21tcy5kZWNyeXB0QW5kVmVyaWZ5SW5jb21pbmdNZXNzYWdlcyhcbiAgICAgIHsgcDJwTWVzc2FnZXM6IFtdLCBicm9hZGNhc3RNZXNzYWdlczogW3RoaXMuZm9ybWF0Qml0Z29Ccm9hZGNhc3RNZXNzYWdlKGJpdGdvTXNnMSldIH0sXG4gICAgICBbYml0Z29HcGdQdWJLZXldLFxuICAgICAgW11cbiAgICApO1xuICAgIGNvbnN0IGJpdGdvUm91bmQxTXNnID0gZGVjcnlwdGVkQml0Z29Sb3VuZDEuYnJvYWRjYXN0TWVzc2FnZXMuZmluZCgobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPKTtcbiAgICBhc3NlcnQoYml0Z29Sb3VuZDFNc2csICdCaXRHbyBkZXJpdmUgbWVzc2FnZSAxIG5vdCBmb3VuZCBpbiBicm9hZGNhc3QgbWVzc2FnZXMnKTtcbiAgICBjb25zdCB1c2VyUm91bmQyTWVzc2FnZXMgPSB1c2VyRGVyaXZlU2Vzc2lvbi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbRGtsc1R5cGVzLmRlc2VyaWFsaXplQnJvYWRjYXN0TWVzc2FnZShiaXRnb1JvdW5kMU1zZyldLFxuICAgIH0pO1xuICAgIGNvbnN0IHJvdW5kMk1lc3NhZ2VzID0gYXdhaXQgRGtsc0NvbW1zLmVuY3J5cHRBbmRBdXRoT3V0Z29pbmdNZXNzYWdlcyhcbiAgICAgIERrbHNUeXBlcy5zZXJpYWxpemVNZXNzYWdlcyh1c2VyUm91bmQyTWVzc2FnZXMpLFxuICAgICAgW2JpdGdvR3BnUHViS2V5XSxcbiAgICAgIFt1c2VyR3BnUHJ2S2V5XVxuICAgICk7XG4gICAgY29uc3QgeyBzZXNzaW9uSWQ6IHNlc3Npb25JZFJvdW5kMiwgYml0Z29Nc2cyIH0gPSBhd2FpdCB0aGlzLnNlbmREZXJpdmF0aW9uUm91bmQyQnlTZW5kZXIoXG4gICAgICBLZXlHZW5TZW5kZXJGb3JTYWZlQ2hpbGQ8TVBDdjJEZXJpdmVSb3VuZDJSZXNwb25zZT4odGhpcy5iaXRnbywgcGFyYW1zLmVudGVycHJpc2UsIHBhcmFtcy5zYWZlSWQpLFxuICAgICAgc2Vzc2lvbklkLFxuICAgICAgcm91bmQyTWVzc2FnZXNcbiAgICApO1xuICAgIGFzc2VydC5lcXVhbChzZXNzaW9uSWQsIHNlc3Npb25JZFJvdW5kMiwgJ1JvdW5kIDEgYW5kIDIgU2Vzc2lvbiBJRHMgZG8gbm90IG1hdGNoJyk7XG5cbiAgICAvLyBQcm9jZXNzIHRoZSBwZWVyIHJlc3BvbnNlIHRvIGZpbmFsaXplIHRoZSBsb2NhbCBjaGlsZCBzaGFyZS5cbiAgICBjb25zdCBkZWNyeXB0ZWRCaXRnb1JvdW5kMiA9IGF3YWl0IERrbHNDb21tcy5kZWNyeXB0QW5kVmVyaWZ5SW5jb21pbmdNZXNzYWdlcyhcbiAgICAgIHsgcDJwTWVzc2FnZXM6IFtdLCBicm9hZGNhc3RNZXNzYWdlczogW3RoaXMuZm9ybWF0Qml0Z29Ccm9hZGNhc3RNZXNzYWdlKGJpdGdvTXNnMildIH0sXG4gICAgICBbYml0Z29HcGdQdWJLZXldLFxuICAgICAgW11cbiAgICApO1xuICAgIGNvbnN0IGJpdGdvUm91bmQyTXNnID0gZGVjcnlwdGVkQml0Z29Sb3VuZDIuYnJvYWRjYXN0TWVzc2FnZXMuZmluZCgobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPKTtcbiAgICBhc3NlcnQoYml0Z29Sb3VuZDJNc2csICdCaXRHbyBkZXJpdmUgbWVzc2FnZSAyIG5vdCBmb3VuZCBpbiBicm9hZGNhc3QgbWVzc2FnZXMnKTtcbiAgICB1c2VyRGVyaXZlU2Vzc2lvbi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbRGtsc1R5cGVzLmRlc2VyaWFsaXplQnJvYWRjYXN0TWVzc2FnZShiaXRnb1JvdW5kMk1zZyldLFxuICAgIH0pO1xuXG4gICAgLy8gUm91bmQgMzogb2J0YWluIHRoZSBjaGlsZCBjb21tb24ta2V5Y2hhaW4gbWV0YWRhdGEuXG4gICAgY29uc3QgeyBzZXNzaW9uSWQ6IHNlc3Npb25JZFJvdW5kMywgY29tbW9uS2V5Y2hhaW4gfSA9IGF3YWl0IHRoaXMuc2VuZERlcml2YXRpb25Sb3VuZDNCeVNlbmRlcihcbiAgICAgIEtleUdlblNlbmRlckZvclNhZmVDaGlsZDxNUEN2MkRlcml2ZVJvdW5kM1Jlc3BvbnNlPih0aGlzLmJpdGdvLCBwYXJhbXMuZW50ZXJwcmlzZSwgcGFyYW1zLnNhZmVJZCksXG4gICAgICBzZXNzaW9uSWRcbiAgICApO1xuICAgIGFzc2VydC5lcXVhbChzZXNzaW9uSWQsIHNlc3Npb25JZFJvdW5kMywgJ1JvdW5kIDEgYW5kIDMgU2Vzc2lvbiBJRHMgZG8gbm90IG1hdGNoJyk7XG5cbiAgICBjb25zdCB1c2VyUHJpdmF0ZU1hdGVyaWFsID0gdXNlckRlcml2ZVNlc3Npb24uZ2V0S2V5U2hhcmUoKTtcbiAgICBjb25zdCB1c2VyUmVkdWNlZFByaXZhdGVNYXRlcmlhbCA9IHVzZXJEZXJpdmVTZXNzaW9uLmdldFJlZHVjZWRLZXlTaGFyZSgpO1xuICAgIGNvbnN0IHVzZXJDb21tb25LZXljaGFpbiA9IERrbHNUeXBlcy5nZXRDb21tb25LZXljaGFpbih1c2VyUHJpdmF0ZU1hdGVyaWFsKTtcbiAgICBhc3NlcnQuZXF1YWwoY29tbW9uS2V5Y2hhaW4sIHVzZXJDb21tb25LZXljaGFpbiwgJ1VzZXIgYW5kIEJpdEdvIGNvbW1vbiBrZXljaGFpbnMgZG8gbm90IG1hdGNoJyk7XG5cbiAgICBjb25zdCBlbmNyeXB0aW9uU2Vzc2lvbiA9XG4gICAgICBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb24gPT09IDIgPyBhd2FpdCB0aGlzLmJpdGdvLmNyZWF0ZUVuY3J5cHRpb25TZXNzaW9uKHBhcmFtcy5wYXNzcGhyYXNlKSA6IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXNlcktleWNoYWluUHJvbWlzZSA9IHRoaXMuYWRkVXNlcktleWNoYWluKFxuICAgICAgICBjb21tb25LZXljaGFpbixcbiAgICAgICAgdXNlclByaXZhdGVNYXRlcmlhbCxcbiAgICAgICAgdXNlclJlZHVjZWRQcml2YXRlTWF0ZXJpYWwsXG4gICAgICAgIHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgICBwYXJhbXMub3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICAgICAgICBwYXJhbXMud2ViYXV0aG5JbmZvLFxuICAgICAgICBlbmNyeXB0aW9uU2Vzc2lvbixcbiAgICAgICAgcGFyYW1zLmVuY3J5cHRpb25WZXJzaW9uLFxuICAgICAgICBwYXJhbXMuZW50ZXJwcmlzZSxcbiAgICAgICAgcGFyYW1zLnNhZmVJZCxcbiAgICAgICAgeyBwYXJlbnRLZXlJZDogcGFyYW1zLnVzZXJSb290S2V5SWQsIGluZGV4OiBwYXJhbXMuZGVyaXZhdGlvbkluZGV4IH1cbiAgICAgICk7XG4gICAgICBjb25zdCBiYWNrdXBLZXljaGFpblByb21pc2UgPSB0aGlzLmFkZEJhY2t1cEtleWNoYWluKFxuICAgICAgICBjb21tb25LZXljaGFpbixcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgICBwYXJhbXMub3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICAgICAgICBlbmNyeXB0aW9uU2Vzc2lvbixcbiAgICAgICAgcGFyYW1zLmVuY3J5cHRpb25WZXJzaW9uLFxuICAgICAgICBwYXJhbXMuc2FmZUlkLFxuICAgICAgICB7IHBhcmVudEtleUlkOiBwYXJhbXMuYmFja3VwUm9vdEtleUlkLCBpbmRleDogcGFyYW1zLmRlcml2YXRpb25JbmRleCB9XG4gICAgICApO1xuICAgICAgY29uc3QgYml0Z29LZXljaGFpblByb21pc2UgPSB0aGlzLmFkZEJpdGdvS2V5Y2hhaW4oY29tbW9uS2V5Y2hhaW4sIHBhcmFtcy5zYWZlSWQsIHtcbiAgICAgICAgcGFyZW50S2V5SWQ6IHBhcmFtcy5wYXJlbnRLZXlJZCxcbiAgICAgICAgaW5kZXg6IHBhcmFtcy5kZXJpdmF0aW9uSW5kZXgsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgW3VzZXJLZXljaGFpbiwgYmFja3VwS2V5Y2hhaW4sIGJpdGdvS2V5Y2hhaW5dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICB1c2VyS2V5Y2hhaW5Qcm9taXNlLFxuICAgICAgICBiYWNrdXBLZXljaGFpblByb21pc2UsXG4gICAgICAgIGJpdGdvS2V5Y2hhaW5Qcm9taXNlLFxuICAgICAgXSk7XG4gICAgICByZXR1cm4geyB1c2VyS2V5Y2hhaW4sIGJhY2t1cEtleWNoYWluLCBiaXRnb0tleWNoYWluIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGVuY3J5cHRpb25TZXNzaW9uPy5kZXN0cm95KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTaWduaW5nRGtnU2Vzc2lvbnMocmV0cm9maXQ/OiBEZWNyeXB0ZWRSZXRyb2ZpdFBheWxvYWQpIHtcbiAgICBpZiAocmV0cm9maXQpIHtcbiAgICAgIGNvbnN0IHJldHJvZml0RGF0YSA9IHRoaXMuZ2V0TXBjVjJSZXRyb2ZpdERhdGFGcm9tTXBjVjFLZXlzKHtcbiAgICAgICAgbXBjdjFVc2VyS2V5U2hhcmU6IHJldHJvZml0LmRlY3J5cHRlZFVzZXJLZXksXG4gICAgICAgIG1wY3YxQmFja3VwS2V5U2hhcmU6IHJldHJvZml0LmRlY3J5cHRlZEJhY2t1cEtleSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdXNlclNlc3Npb246IG5ldyBEa2xzRGtnLkRrZygzLCAyLCBNUEN2MlBhcnRpZXNFbnVtLlVTRVIsIHVuZGVmaW5lZCwgcmV0cm9maXREYXRhLm1wY3YyVXNlcktleVNoYXJlKSxcbiAgICAgICAgYmFja3VwU2Vzc2lvbjogbmV3IERrbHNEa2cuRGtnKDMsIDIsIE1QQ3YyUGFydGllc0VudW0uQkFDS1VQLCB1bmRlZmluZWQsIHJldHJvZml0RGF0YS5tcGN2MkJhY2t1cEtleVNoYXJlKSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB1c2VyU2Vzc2lvbjogbmV3IERrbHNEa2cuRGtnKDMsIDIsIE1QQ3YyUGFydGllc0VudW0uVVNFUiksXG4gICAgICBiYWNrdXBTZXNzaW9uOiBuZXcgRGtsc0RrZy5Ea2coMywgMiwgTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVApLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -129,8 +129,10 @@ export declare function isEddsaMpcV1SigningMaterial(encryptedKeyShare: string, w
|
|
|
129
129
|
* Get EdDSA MPCv2 recovery key shares from encrypted reduced user and backup keys.
|
|
130
130
|
*
|
|
131
131
|
* The encrypted inputs are the `reducedEncryptedPrv` values stored on EdDSA MPCv2
|
|
132
|
-
* key cards. They decrypt to CBOR-encoded reduced shares
|
|
133
|
-
*
|
|
132
|
+
* key cards. They decrypt either to CBOR-encoded reduced shares (legacy cards) or to
|
|
133
|
+
* the versioned safe-root envelope `{ version: 1, prvKeyShare, vrf }`, where the signing
|
|
134
|
+
* share stays reduced and `vrf` is the complete serialized VRF keyshare. Legacy cards
|
|
135
|
+
* have no VRF material and recover as before.
|
|
134
136
|
*
|
|
135
137
|
* @param encryptedUserKey encrypted EdDSA MPCv2 reduced user key
|
|
136
138
|
* @param encryptedBackupKey encrypted EdDSA MPCv2 reduced backup key
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eddsaMPCv2.d.ts","sourceRoot":"","sources":["../../../../../../src/bitgo/utils/tss/eddsa/eddsaMPCv2.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,EAC9B,6BAA6B,EAC7B,8BAA8B,EAI9B,4BAA4B,EAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAErE,OAAO,EAAE,WAAW,EAAyB,QAAQ,EAAW,MAAM,yBAAyB,CAAC;AAChG,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAEL,wBAAwB,EACxB,QAAQ,EAER,yBAAyB,EAC1B,MAAM,mBAAmB,CAAC;AAa3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EACL,+CAA+C,EAC/C,+CAA+C,EAC/C,+CAA+C,EAC/C,WAAW,EACX,oBAAoB,EAEpB,SAAS,EACT,mBAAmB,EACnB,0BAA0B,EAC1B,gBAAgB,EAChB,SAAS,EAEV,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,sBAAsB,EAA6B,MAAM,0BAA0B,CAAC;AAC7F,OAAO,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"eddsaMPCv2.d.ts","sourceRoot":"","sources":["../../../../../../src/bitgo/utils/tss/eddsa/eddsaMPCv2.ts"],"names":[],"mappings":"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"}
|