@bitgo-beta/utxo-lib 8.0.3-beta.18 → 8.0.3-beta.180
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/README.md +19 -16
- package/dist/src/bitgo/PsbtUtil.d.ts +8 -7
- package/dist/src/bitgo/PsbtUtil.d.ts.map +1 -1
- package/dist/src/bitgo/PsbtUtil.js +15 -2
- package/dist/src/bitgo/UtxoPsbt.d.ts +17 -3
- package/dist/src/bitgo/UtxoPsbt.d.ts.map +1 -1
- package/dist/src/bitgo/UtxoPsbt.js +111 -56
- package/dist/src/bitgo/index.d.ts +8 -0
- package/dist/src/bitgo/index.d.ts.map +1 -1
- package/dist/src/bitgo/index.js +3 -2
- package/dist/src/bitgo/legacysafe/index.d.ts +15 -0
- package/dist/src/bitgo/legacysafe/index.d.ts.map +1 -0
- package/dist/src/bitgo/legacysafe/index.js +61 -0
- package/dist/src/bitgo/outputScripts.d.ts +1 -0
- package/dist/src/bitgo/outputScripts.d.ts.map +1 -1
- package/dist/src/bitgo/outputScripts.js +24 -9
- package/dist/src/bitgo/parseInput.js +2 -2
- package/dist/src/bitgo/signature.d.ts +2 -2
- package/dist/src/bitgo/signature.d.ts.map +1 -1
- package/dist/src/bitgo/signature.js +17 -2
- package/dist/src/bitgo/transaction.d.ts +18 -3
- package/dist/src/bitgo/transaction.d.ts.map +1 -1
- package/dist/src/bitgo/transaction.js +9 -7
- package/dist/src/bitgo/wallet/Psbt.d.ts +20 -7
- package/dist/src/bitgo/wallet/Psbt.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/Psbt.js +71 -3
- package/dist/src/bitgo/wallet/Unspent.d.ts +43 -7
- package/dist/src/bitgo/wallet/Unspent.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/Unspent.js +152 -65
- package/dist/src/bitgo/wallet/WalletOutput.d.ts +17 -1
- package/dist/src/bitgo/wallet/WalletOutput.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/WalletOutput.js +64 -23
- package/dist/src/bitgo/wallet/chains.d.ts +1 -1
- package/dist/src/bitgo/zcash/ZcashPsbt.d.ts +0 -1
- package/dist/src/bitgo/zcash/ZcashPsbt.d.ts.map +1 -1
- package/dist/src/bitgo/zcash/ZcashPsbt.js +3 -12
- package/dist/src/testutil/keys.d.ts +3 -0
- package/dist/src/testutil/keys.d.ts.map +1 -1
- package/dist/src/testutil/keys.js +17 -2
- package/dist/src/testutil/mock.d.ts +1 -1
- package/dist/src/testutil/mock.d.ts.map +1 -1
- package/dist/src/testutil/mock.js +12 -4
- package/dist/src/testutil/psbt.d.ts +27 -6
- package/dist/src/testutil/psbt.d.ts.map +1 -1
- package/dist/src/testutil/psbt.js +30 -18
- package/dist/src/testutil/transaction.d.ts +14 -5
- package/dist/src/testutil/transaction.d.ts.map +1 -1
- package/dist/src/testutil/transaction.js +9 -9
- package/package.json +8 -8
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
export { PsbtInput, PsbtOutput } from 'bip174/src/lib/interfaces';
|
|
1
2
|
export * as bcashAddress from './bitcoincash';
|
|
2
3
|
export * as keyutil from './keyutil';
|
|
3
4
|
export * as nonStandardHalfSigned from './nonStandardHalfSigned';
|
|
4
5
|
export * as outputScripts from './outputScripts';
|
|
6
|
+
export * as legacySafe from './legacysafe';
|
|
5
7
|
export * as musig2 from './Musig2';
|
|
6
8
|
export * from './dash';
|
|
7
9
|
export * from './parseInput';
|
|
@@ -17,4 +19,10 @@ export * from './zcash';
|
|
|
17
19
|
export * from './tnumber';
|
|
18
20
|
export * from './litecoin';
|
|
19
21
|
export * from './PsbtUtil';
|
|
22
|
+
import { PsbtInput } from 'bip174/src/lib/interfaces';
|
|
23
|
+
/**
|
|
24
|
+
* alias for PsbtInput type to avoid direct bip174 library dependency by users of the util functions
|
|
25
|
+
* @deprecated use PsbtInput instead
|
|
26
|
+
*/
|
|
27
|
+
export declare type PsbtInputType = PsbtInput;
|
|
20
28
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/bitgo/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,qBAAqB,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,aAAa,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/bitgo/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,KAAK,YAAY,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,qBAAqB,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,aAAa,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAE3B,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD;;;GAGG;AACH,oBAAY,aAAa,GAAG,SAAS,CAAC"}
|
package/dist/src/bitgo/index.js
CHANGED
|
@@ -10,11 +10,12 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
10
10
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.musig2 = exports.outputScripts = exports.nonStandardHalfSigned = exports.keyutil = exports.bcashAddress = void 0;
|
|
13
|
+
exports.musig2 = exports.legacySafe = exports.outputScripts = exports.nonStandardHalfSigned = exports.keyutil = exports.bcashAddress = void 0;
|
|
14
14
|
exports.bcashAddress = require("./bitcoincash");
|
|
15
15
|
exports.keyutil = require("./keyutil");
|
|
16
16
|
exports.nonStandardHalfSigned = require("./nonStandardHalfSigned");
|
|
17
17
|
exports.outputScripts = require("./outputScripts");
|
|
18
|
+
exports.legacySafe = require("./legacysafe");
|
|
18
19
|
exports.musig2 = require("./Musig2");
|
|
19
20
|
__exportStar(require("./dash"), exports);
|
|
20
21
|
__exportStar(require("./parseInput"), exports);
|
|
@@ -30,4 +31,4 @@ __exportStar(require("./zcash"), exports);
|
|
|
30
31
|
__exportStar(require("./tnumber"), exports);
|
|
31
32
|
__exportStar(require("./litecoin"), exports);
|
|
32
33
|
__exportStar(require("./PsbtUtil"), exports);
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYml0Z28vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUVBLGdEQUE4QztBQUM5Qyx1Q0FBcUM7QUFDckMsbUVBQWlFO0FBQ2pFLG1EQUFpRDtBQUNqRCw2Q0FBMkM7QUFDM0MscUNBQW1DO0FBQ25DLHlDQUF1QjtBQUN2QiwrQ0FBNkI7QUFDN0IsOENBQTRCO0FBQzVCLGdEQUE4QjtBQUM5QiwwQ0FBd0I7QUFDeEIsNENBQTBCO0FBQzFCLDZDQUEyQjtBQUMzQixvREFBa0M7QUFDbEMsMkRBQXlDO0FBQ3pDLDJDQUF5QjtBQUN6QiwwQ0FBd0I7QUFDeEIsNENBQTBCO0FBQzFCLDZDQUEyQjtBQUMzQiw2Q0FBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBQc2J0SW5wdXQsIFBzYnRPdXRwdXQgfSBmcm9tICdiaXAxNzQvc3JjL2xpYi9pbnRlcmZhY2VzJztcblxuZXhwb3J0ICogYXMgYmNhc2hBZGRyZXNzIGZyb20gJy4vYml0Y29pbmNhc2gnO1xuZXhwb3J0ICogYXMga2V5dXRpbCBmcm9tICcuL2tleXV0aWwnO1xuZXhwb3J0ICogYXMgbm9uU3RhbmRhcmRIYWxmU2lnbmVkIGZyb20gJy4vbm9uU3RhbmRhcmRIYWxmU2lnbmVkJztcbmV4cG9ydCAqIGFzIG91dHB1dFNjcmlwdHMgZnJvbSAnLi9vdXRwdXRTY3JpcHRzJztcbmV4cG9ydCAqIGFzIGxlZ2FjeVNhZmUgZnJvbSAnLi9sZWdhY3lzYWZlJztcbmV4cG9ydCAqIGFzIG11c2lnMiBmcm9tICcuL011c2lnMic7XG5leHBvcnQgKiBmcm9tICcuL2Rhc2gnO1xuZXhwb3J0ICogZnJvbSAnLi9wYXJzZUlucHV0JztcbmV4cG9ydCAqIGZyb20gJy4vc2lnbmF0dXJlJztcbmV4cG9ydCAqIGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL1Vuc3BlbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9VdHhvUHNidCc7XG5leHBvcnQgKiBmcm9tICcuL1V0eG9UcmFuc2FjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL1V0eG9UcmFuc2FjdGlvbkJ1aWxkZXInO1xuZXhwb3J0ICogZnJvbSAnLi93YWxsZXQnO1xuZXhwb3J0ICogZnJvbSAnLi96Y2FzaCc7XG5leHBvcnQgKiBmcm9tICcuL3RudW1iZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saXRlY29pbic7XG5leHBvcnQgKiBmcm9tICcuL1BzYnRVdGlsJztcblxuaW1wb3J0IHsgUHNidElucHV0IH0gZnJvbSAnYmlwMTc0L3NyYy9saWIvaW50ZXJmYWNlcyc7XG4vKipcbiAqIGFsaWFzIGZvciBQc2J0SW5wdXQgdHlwZSB0byBhdm9pZCBkaXJlY3QgYmlwMTc0IGxpYnJhcnkgZGVwZW5kZW5jeSBieSB1c2VycyBvZiB0aGUgdXRpbCBmdW5jdGlvbnNcbiAqIEBkZXByZWNhdGVkIHVzZSBQc2J0SW5wdXQgaW5zdGVhZFxuICovXG5leHBvcnQgdHlwZSBQc2J0SW5wdXRUeXBlID0gUHNidElucHV0O1xuIl19
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* V1 Safe Wallets are the oldest type of wallets that BitGo supports. They were
|
|
3
|
+
* created back in 2013-14 and don't use HD chains. Instead, they have only one
|
|
4
|
+
* P2SH address per wallet whose redeem script uses uncompressed public keys.
|
|
5
|
+
* */
|
|
6
|
+
/// <reference types="node" />
|
|
7
|
+
import { Network } from '../../networks';
|
|
8
|
+
export declare function toUncompressedPub(pubkey: Buffer): Buffer;
|
|
9
|
+
export declare function toCompressedPub(pubkey: Buffer): Buffer;
|
|
10
|
+
/** create p2sh scripts with uncompressed pubkeys */
|
|
11
|
+
export declare function createLegacySafeOutputScript2of3(pubkeys: Buffer[], network?: Network): {
|
|
12
|
+
scriptPubKey: Buffer;
|
|
13
|
+
redeemScript: Buffer;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/legacysafe/index.ts"],"names":[],"mappings":"AAAA;;;;KAIK;;AAIL,OAAO,EAAa,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAepD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,oDAAoD;AACpD,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,CAAC,EAAE,OAAO,GAChB;IACD,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB,CAgCA"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* V1 Safe Wallets are the oldest type of wallets that BitGo supports. They were
|
|
4
|
+
* created back in 2013-14 and don't use HD chains. Instead, they have only one
|
|
5
|
+
* P2SH address per wallet whose redeem script uses uncompressed public keys.
|
|
6
|
+
* */
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.createLegacySafeOutputScript2of3 = exports.toCompressedPub = exports.toUncompressedPub = void 0;
|
|
9
|
+
const assert = require("assert");
|
|
10
|
+
const noble_ecc_1 = require("../../noble_ecc");
|
|
11
|
+
const networks_1 = require("../../networks");
|
|
12
|
+
const types_1 = require("../types");
|
|
13
|
+
const bitcoinjs = require("bitcoinjs-lib");
|
|
14
|
+
function getPublicKeyBuffer(publicKey, { compressed = true } = {}) {
|
|
15
|
+
const res = noble_ecc_1.ecc.pointCompress(publicKey, compressed);
|
|
16
|
+
if (res === null) {
|
|
17
|
+
throw new Error('invalid public key');
|
|
18
|
+
}
|
|
19
|
+
const buffer = Buffer.from(res);
|
|
20
|
+
assert.strictEqual(buffer.length, compressed ? 33 : 65);
|
|
21
|
+
return buffer;
|
|
22
|
+
}
|
|
23
|
+
function toUncompressedPub(pubkey) {
|
|
24
|
+
return getPublicKeyBuffer(pubkey, { compressed: false });
|
|
25
|
+
}
|
|
26
|
+
exports.toUncompressedPub = toUncompressedPub;
|
|
27
|
+
function toCompressedPub(pubkey) {
|
|
28
|
+
return getPublicKeyBuffer(pubkey, { compressed: true });
|
|
29
|
+
}
|
|
30
|
+
exports.toCompressedPub = toCompressedPub;
|
|
31
|
+
/** create p2sh scripts with uncompressed pubkeys */
|
|
32
|
+
function createLegacySafeOutputScript2of3(pubkeys, network) {
|
|
33
|
+
if (network) {
|
|
34
|
+
if (!networks_1.isBitcoin(network)) {
|
|
35
|
+
throw new Error(`unsupported network for legacy safe output script: ${network.coin}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (!types_1.isTriple(pubkeys)) {
|
|
39
|
+
throw new Error(`must provide pubkey triple`);
|
|
40
|
+
}
|
|
41
|
+
pubkeys.forEach((key) => {
|
|
42
|
+
if (key.length !== pubkeys[0].length) {
|
|
43
|
+
throw new Error(`all pubkeys must have the same length`);
|
|
44
|
+
}
|
|
45
|
+
if (key.length !== 65 && key.length !== 33) {
|
|
46
|
+
// V1 Safe BTC wallets could contain either uncompressed or compressed pubkeys
|
|
47
|
+
throw new Error(`Unexpected key length ${key.length}, neither compressed nor uncompressed.`);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
const script2of3 = bitcoinjs.payments.p2ms({ m: 2, pubkeys });
|
|
51
|
+
assert(script2of3.output);
|
|
52
|
+
const scriptPubKey = bitcoinjs.payments.p2sh({ redeem: script2of3 });
|
|
53
|
+
assert(scriptPubKey);
|
|
54
|
+
assert(scriptPubKey.output);
|
|
55
|
+
return {
|
|
56
|
+
scriptPubKey: scriptPubKey.output,
|
|
57
|
+
redeemScript: script2of3.output,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
exports.createLegacySafeOutputScript2of3 = createLegacySafeOutputScript2of3;
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vbGVnYWN5c2FmZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7S0FJSzs7O0FBRUwsaUNBQWlDO0FBQ2pDLCtDQUFnRDtBQUNoRCw2Q0FBb0Q7QUFDcEQsb0NBQW9DO0FBQ3BDLDJDQUEyQztBQUUzQyxTQUFTLGtCQUFrQixDQUFDLFNBQWlCLEVBQUUsRUFBRSxVQUFVLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRTtJQUN2RSxNQUFNLEdBQUcsR0FBRyxlQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN4RCxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7UUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0tBQ3ZDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVoQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFnQixpQkFBaUIsQ0FBQyxNQUFjO0lBQzlDLE9BQU8sa0JBQWtCLENBQUMsTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUZELDhDQUVDO0FBRUQsU0FBZ0IsZUFBZSxDQUFDLE1BQWM7SUFDNUMsT0FBTyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRkQsMENBRUM7QUFFRCxvREFBb0Q7QUFDcEQsU0FBZ0IsZ0NBQWdDLENBQzlDLE9BQWlCLEVBQ2pCLE9BQWlCO0lBS2pCLElBQUksT0FBTyxFQUFFO1FBQ1gsSUFBSSxDQUFDLG9CQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7U0FDdkY7S0FDRjtJQUVELElBQUksQ0FBQyxnQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztLQUMvQztJQUVELE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUN0QixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRTtZQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7U0FDMUQ7UUFDRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssRUFBRSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssRUFBRSxFQUFFO1lBQzFDLDhFQUE4RTtZQUM5RSxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixHQUFHLENBQUMsTUFBTSx3Q0FBd0MsQ0FBQyxDQUFDO1NBQzlGO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUM5RCxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTFCLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDckUsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3JCLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFNUIsT0FBTztRQUNMLFlBQVksRUFBRSxZQUFZLENBQUMsTUFBTTtRQUNqQyxZQUFZLEVBQUUsVUFBVSxDQUFDLE1BQU07S0FDaEMsQ0FBQztBQUNKLENBQUM7QUF0Q0QsNEVBc0NDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBWMSBTYWZlIFdhbGxldHMgYXJlIHRoZSBvbGRlc3QgdHlwZSBvZiB3YWxsZXRzIHRoYXQgQml0R28gc3VwcG9ydHMuIFRoZXkgd2VyZVxuICogY3JlYXRlZCBiYWNrIGluIDIwMTMtMTQgYW5kIGRvbid0IHVzZSBIRCBjaGFpbnMuIEluc3RlYWQsIHRoZXkgaGF2ZSBvbmx5IG9uZVxuICogUDJTSCBhZGRyZXNzIHBlciB3YWxsZXQgd2hvc2UgcmVkZWVtIHNjcmlwdCB1c2VzIHVuY29tcHJlc3NlZCBwdWJsaWMga2V5cy5cbiAqICovXG5cbmltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgZWNjIGFzIGVjY0xpYiB9IGZyb20gJy4uLy4uL25vYmxlX2VjYyc7XG5pbXBvcnQgeyBpc0JpdGNvaW4sIE5ldHdvcmsgfSBmcm9tICcuLi8uLi9uZXR3b3Jrcyc7XG5pbXBvcnQgeyBpc1RyaXBsZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIGJpdGNvaW5qcyBmcm9tICdiaXRjb2luanMtbGliJztcblxuZnVuY3Rpb24gZ2V0UHVibGljS2V5QnVmZmVyKHB1YmxpY0tleTogQnVmZmVyLCB7IGNvbXByZXNzZWQgPSB0cnVlIH0gPSB7fSk6IEJ1ZmZlciB7XG4gIGNvbnN0IHJlcyA9IGVjY0xpYi5wb2ludENvbXByZXNzKHB1YmxpY0tleSwgY29tcHJlc3NlZCk7XG4gIGlmIChyZXMgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcHVibGljIGtleScpO1xuICB9XG4gIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHJlcyk7XG5cbiAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ1ZmZlci5sZW5ndGgsIGNvbXByZXNzZWQgPyAzMyA6IDY1KTtcbiAgcmV0dXJuIGJ1ZmZlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvVW5jb21wcmVzc2VkUHViKHB1YmtleTogQnVmZmVyKTogQnVmZmVyIHtcbiAgcmV0dXJuIGdldFB1YmxpY0tleUJ1ZmZlcihwdWJrZXksIHsgY29tcHJlc3NlZDogZmFsc2UgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0NvbXByZXNzZWRQdWIocHVia2V5OiBCdWZmZXIpOiBCdWZmZXIge1xuICByZXR1cm4gZ2V0UHVibGljS2V5QnVmZmVyKHB1YmtleSwgeyBjb21wcmVzc2VkOiB0cnVlIH0pO1xufVxuXG4vKiogY3JlYXRlIHAyc2ggc2NyaXB0cyB3aXRoIHVuY29tcHJlc3NlZCBwdWJrZXlzICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGVnYWN5U2FmZU91dHB1dFNjcmlwdDJvZjMoXG4gIHB1YmtleXM6IEJ1ZmZlcltdLFxuICBuZXR3b3JrPzogTmV0d29ya1xuKToge1xuICBzY3JpcHRQdWJLZXk6IEJ1ZmZlcjtcbiAgcmVkZWVtU2NyaXB0OiBCdWZmZXI7XG59IHtcbiAgaWYgKG5ldHdvcmspIHtcbiAgICBpZiAoIWlzQml0Y29pbihuZXR3b3JrKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBuZXR3b3JrIGZvciBsZWdhY3kgc2FmZSBvdXRwdXQgc2NyaXB0OiAke25ldHdvcmsuY29pbn1gKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWlzVHJpcGxlKHB1YmtleXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBtdXN0IHByb3ZpZGUgcHVia2V5IHRyaXBsZWApO1xuICB9XG5cbiAgcHVia2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBpZiAoa2V5Lmxlbmd0aCAhPT0gcHVia2V5c1swXS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgYWxsIHB1YmtleXMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aGApO1xuICAgIH1cbiAgICBpZiAoa2V5Lmxlbmd0aCAhPT0gNjUgJiYga2V5Lmxlbmd0aCAhPT0gMzMpIHtcbiAgICAgIC8vIFYxIFNhZmUgQlRDIHdhbGxldHMgY291bGQgY29udGFpbiBlaXRoZXIgdW5jb21wcmVzc2VkIG9yIGNvbXByZXNzZWQgcHVia2V5c1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGtleSBsZW5ndGggJHtrZXkubGVuZ3RofSwgbmVpdGhlciBjb21wcmVzc2VkIG5vciB1bmNvbXByZXNzZWQuYCk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBzY3JpcHQyb2YzID0gYml0Y29pbmpzLnBheW1lbnRzLnAybXMoeyBtOiAyLCBwdWJrZXlzIH0pO1xuICBhc3NlcnQoc2NyaXB0Mm9mMy5vdXRwdXQpO1xuXG4gIGNvbnN0IHNjcmlwdFB1YktleSA9IGJpdGNvaW5qcy5wYXltZW50cy5wMnNoKHsgcmVkZWVtOiBzY3JpcHQyb2YzIH0pO1xuICBhc3NlcnQoc2NyaXB0UHViS2V5KTtcbiAgYXNzZXJ0KHNjcmlwdFB1YktleS5vdXRwdXQpO1xuXG4gIHJldHVybiB7XG4gICAgc2NyaXB0UHViS2V5OiBzY3JpcHRQdWJLZXkub3V0cHV0LFxuICAgIHJlZGVlbVNjcmlwdDogc2NyaXB0Mm9mMy5vdXRwdXQsXG4gIH07XG59XG4iXX0=
|
|
@@ -48,6 +48,7 @@ export declare type KeyPathP2trMusig2 = {
|
|
|
48
48
|
* @param pubkey
|
|
49
49
|
*/
|
|
50
50
|
export declare function createOutputScriptP2shP2pk(pubkey: Buffer): SpendableScript;
|
|
51
|
+
export declare function getOutputScript(scriptType: 'p2sh' | 'p2shP2wsh' | 'p2wsh', conditionScript: Buffer): Buffer;
|
|
51
52
|
/**
|
|
52
53
|
* Return scripts for 2-of-3 multisig output
|
|
53
54
|
* @param pubkeys - the key triple for multisig
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outputScripts.d.ts","sourceRoot":"","sources":["../../../src/bitgo/outputScripts.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,SAAS,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,OAAO,EAA0D,MAAM,IAAI,CAAC;AAErF,OAAO,EAAY,MAAM,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAKlD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,eAAO,MAAM,kBAAkB,aAAa,CAAC;AAC7C,oBAAY,kBAAkB,GAAG,OAAO,kBAAkB,CAAC;AAE3D,eAAO,MAAM,eAAe,+DAAgE,CAAC;AAC7F,oBAAY,cAAc,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,IAAI,cAAc,CAE/D;AAED,oBAAY,UAAU,GAAG,kBAAkB,GAAG,cAAc,CAAC;AAE7D;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,IAAI,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,YAAY,CAElH;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAevF;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,EAAE,cAAc,GAAG,MAAM,CAgBrE;AAED,oBAAY,eAAe,GAAG;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,oBAAY,eAAe,GAAG;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,oBAAY,iBAAiB,GAAG;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAU1E;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EAAE,EACjB,UAAU,EAAE,cAAc,EAC1B,OAAO,CAAC,EAAE,OAAO,GAChB,eAAe,
|
|
1
|
+
{"version":3,"file":"outputScripts.d.ts","sourceRoot":"","sources":["../../../src/bitgo/outputScripts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createSpendScriptP2trMusig2 = exports.createSpendScriptP2tr = exports.createKeyPathP2trMusig2 = exports.getLeafHash = exports.createPaymentP2trMusig2 = exports.createPaymentP2tr = exports.checkTxHash = exports.checkTapMerkleRoot = exports.checkPlainPublicKey = exports.checkXOnlyPublicKey = exports.toXOnlyPublicKey = exports.createOutputScript2of3 = exports.createOutputScriptP2shP2pk = exports.scriptType2Of3AsPrevOutType = exports.isSupportedScriptType = exports.hasWitnessData = exports.isScriptType2Of3 = exports.scriptTypes2Of3 = exports.scriptTypeP2shP2pk = exports.scriptTypeForChain = void 0;
|
|
3
|
+
exports.createSpendScriptP2trMusig2 = exports.createSpendScriptP2tr = exports.createKeyPathP2trMusig2 = exports.getLeafHash = exports.createPaymentP2trMusig2 = exports.createPaymentP2tr = exports.checkTxHash = exports.checkTapMerkleRoot = exports.checkPlainPublicKey = exports.checkXOnlyPublicKey = exports.toXOnlyPublicKey = exports.createOutputScript2of3 = exports.getOutputScript = exports.createOutputScriptP2shP2pk = exports.scriptType2Of3AsPrevOutType = exports.isSupportedScriptType = exports.hasWitnessData = exports.isScriptType2Of3 = exports.scriptTypes2Of3 = exports.scriptTypeP2shP2pk = exports.scriptTypeForChain = void 0;
|
|
4
4
|
const assert = require("assert");
|
|
5
5
|
const bitcoinjs = require("bitcoinjs-lib");
|
|
6
6
|
const __1 = require("..");
|
|
@@ -80,6 +80,27 @@ function createOutputScriptP2shP2pk(pubkey) {
|
|
|
80
80
|
};
|
|
81
81
|
}
|
|
82
82
|
exports.createOutputScriptP2shP2pk = createOutputScriptP2shP2pk;
|
|
83
|
+
function getOutputScript(scriptType, conditionScript) {
|
|
84
|
+
let output;
|
|
85
|
+
switch (scriptType) {
|
|
86
|
+
case 'p2sh':
|
|
87
|
+
({ output } = bitcoinjs.payments.p2sh({ redeem: { output: conditionScript } }));
|
|
88
|
+
break;
|
|
89
|
+
case 'p2shP2wsh':
|
|
90
|
+
({ output } = bitcoinjs.payments.p2sh({
|
|
91
|
+
redeem: { output: getOutputScript('p2wsh', conditionScript) },
|
|
92
|
+
}));
|
|
93
|
+
break;
|
|
94
|
+
case 'p2wsh':
|
|
95
|
+
({ output } = bitcoinjs.payments.p2wsh({ redeem: { output: conditionScript } }));
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
if (output === undefined) {
|
|
99
|
+
throw new Error(`output undefined`);
|
|
100
|
+
}
|
|
101
|
+
return output;
|
|
102
|
+
}
|
|
103
|
+
exports.getOutputScript = getOutputScript;
|
|
83
104
|
/**
|
|
84
105
|
* Return scripts for 2-of-3 multisig output
|
|
85
106
|
* @param pubkeys - the key triple for multisig
|
|
@@ -108,30 +129,24 @@ function createOutputScript2of3(pubkeys, scriptType, network) {
|
|
|
108
129
|
}
|
|
109
130
|
const script2of3 = bitcoinjs.payments.p2ms({ m: 2, pubkeys });
|
|
110
131
|
assert(script2of3.output);
|
|
111
|
-
let scriptPubKey;
|
|
112
132
|
let redeemScript;
|
|
113
133
|
let witnessScript;
|
|
114
134
|
switch (scriptType) {
|
|
115
135
|
case 'p2sh':
|
|
116
136
|
redeemScript = script2of3;
|
|
117
|
-
scriptPubKey = bitcoinjs.payments.p2sh({ redeem: script2of3 });
|
|
118
137
|
break;
|
|
119
138
|
case 'p2shP2wsh':
|
|
120
139
|
witnessScript = script2of3;
|
|
121
140
|
redeemScript = bitcoinjs.payments.p2wsh({ redeem: script2of3 });
|
|
122
|
-
scriptPubKey = bitcoinjs.payments.p2sh({ redeem: redeemScript });
|
|
123
141
|
break;
|
|
124
142
|
case 'p2wsh':
|
|
125
143
|
witnessScript = script2of3;
|
|
126
|
-
scriptPubKey = bitcoinjs.payments.p2wsh({ redeem: witnessScript });
|
|
127
144
|
break;
|
|
128
145
|
default:
|
|
129
146
|
throw new Error(`unknown multisig script type ${scriptType}`);
|
|
130
147
|
}
|
|
131
|
-
assert(scriptPubKey);
|
|
132
|
-
assert(scriptPubKey.output);
|
|
133
148
|
return {
|
|
134
|
-
scriptPubKey:
|
|
149
|
+
scriptPubKey: getOutputScript(scriptType, script2of3.output),
|
|
135
150
|
redeemScript: redeemScript === null || redeemScript === void 0 ? void 0 : redeemScript.output,
|
|
136
151
|
witnessScript: witnessScript === null || witnessScript === void 0 ? void 0 : witnessScript.output,
|
|
137
152
|
};
|
|
@@ -302,4 +317,4 @@ function createTaprootScript2of3(scriptType, pubkeys) {
|
|
|
302
317
|
scriptPubKey: output,
|
|
303
318
|
};
|
|
304
319
|
}
|
|
305
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0U2NyaXB0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iaXRnby9vdXRwdXRTY3JpcHRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUFpQztBQUNqQywyQ0FBMkM7QUFFM0MsMEJBQXFGO0FBRXJGLG1DQUFrRDtBQUVsRCw0Q0FBNkM7QUFDN0Msd0NBQXVFO0FBRXZFLDBDQUFxRDtBQUE1Qyw0R0FBQSxrQkFBa0IsT0FBQTtBQUVkLFFBQUEsa0JBQWtCLEdBQUcsVUFBVSxDQUFDO0FBR2hDLFFBQUEsZUFBZSxHQUFHLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBVSxDQUFDO0FBRzdGLFNBQWdCLGdCQUFnQixDQUFDLENBQVM7SUFDeEMsT0FBTyx1QkFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFtQixDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUZELDRDQUVDO0FBSUQ7O0dBRUc7QUFDSCxTQUFnQixjQUFjLENBQUMsVUFBc0I7SUFDbkQsT0FBTyxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMzRSxDQUFDO0FBRkQsd0NBRUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IscUJBQXFCLENBQUMsT0FBZ0IsRUFBRSxVQUFzQjtJQUM1RSxRQUFRLFVBQVUsRUFBRTtRQUNsQixLQUFLLE1BQU0sQ0FBQztRQUNaLEtBQUssVUFBVTtZQUNiLE9BQU8sSUFBSSxDQUFDO1FBQ2QsS0FBSyxXQUFXLENBQUM7UUFDakIsS0FBSyxPQUFPO1lBQ1YsT0FBTyxrQkFBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLEtBQUssTUFBTSxDQUFDO1FBQ1osS0FBSyxZQUFZO1lBQ2YsT0FBTyxtQkFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ25DO0lBRUQsMEJBQTBCO0lBQzFC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TSxDQUFDLE1BQU0sQ0FBQztJQUN6QyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBRXBDLE1BQU0sa0JBQWtCLEdBQUcsV0FBTyxDQUFDLGlCQUFpQixDQUFDLGVBQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUMzRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsa0JBQWtCLENBQUM7SUFDM0MsTUFBTSxRQUFRLEdBQUcsV0FBTyxDQUFDLGNBQWMsQ0FBQyxlQUFNLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFFaEYsT0FBTztRQUNMLFlBQVk7UUFDWixhQUFhLEVBQUUsVUFBVTtRQUN6QixXQUFXO1FBQ1gsUUFBUTtLQUNULENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0IscUJBQXFCLENBQUMsT0FBdUIsRUFBRSxjQUE2QjtJQUMxRixPQUFPLDJCQUEyQixDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUZELHNEQUVDO0FBRUQsU0FBZ0IsMkJBQTJCLENBQUMsT0FBdUIsRUFBRSxjQUE2QjtJQUNoRyxPQUFPLDJCQUEyQixDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDNUUsQ0FBQztBQUZELGtFQUVDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyx1QkFBdUIsQ0FBQyxVQUFpQyxFQUFFLE9BQXVCO0lBQ3pGLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDaEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNoQyxPQUFPO1FBQ0wsWUFBWSxFQUFFLE1BQU07S0FDckIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIGJpdGNvaW5qcyBmcm9tICdiaXRjb2luanMtbGliJztcblxuaW1wb3J0IHsgTmV0d29yaywgcDJ0clBheW1lbnRzLCBzdXBwb3J0c1NlZ3dpdCwgc3VwcG9ydHNUYXByb290LCB0YXByb290IH0gZnJvbSAnLi4nO1xuXG5pbXBvcnQgeyBpc1RyaXBsZSwgVHJpcGxlLCBUdXBsZSB9IGZyb20gJy4vdHlwZXMnO1xuXG5pbXBvcnQgeyBlY2MgYXMgZWNjTGliIH0gZnJvbSAnLi4vbm9ibGVfZWNjJztcbmltcG9ydCB7IGdldERlcHRoRmlyc3RUYXB0cmVlLCBnZXRUd2Vha2VkT3V0cHV0S2V5IH0gZnJvbSAnLi4vdGFwcm9vdCc7XG5cbmV4cG9ydCB7IHNjcmlwdFR5cGVGb3JDaGFpbiB9IGZyb20gJy4vd2FsbGV0L2NoYWlucyc7XG5cbmV4cG9ydCBjb25zdCBzY3JpcHRUeXBlUDJzaFAycGsgPSAncDJzaFAycGsnO1xuZXhwb3J0IHR5cGUgU2NyaXB0VHlwZVAyc2hQMnBrID0gdHlwZW9mIHNjcmlwdFR5cGVQMnNoUDJwaztcblxuZXhwb3J0IGNvbnN0IHNjcmlwdFR5cGVzMk9mMyA9IFsncDJzaCcsICdwMnNoUDJ3c2gnLCAncDJ3c2gnLCAncDJ0cicsICdwMnRyTXVzaWcyJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBTY3JpcHRUeXBlMk9mMyA9ICh0eXBlb2Ygc2NyaXB0VHlwZXMyT2YzKVtudW1iZXJdO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNTY3JpcHRUeXBlMk9mMyh0OiBzdHJpbmcpOiB0IGlzIFNjcmlwdFR5cGUyT2YzIHtcbiAgcmV0dXJuIHNjcmlwdFR5cGVzMk9mMy5pbmNsdWRlcyh0IGFzIFNjcmlwdFR5cGUyT2YzKTtcbn1cblxuZXhwb3J0IHR5cGUgU2NyaXB0VHlwZSA9IFNjcmlwdFR5cGVQMnNoUDJwayB8IFNjcmlwdFR5cGUyT2YzO1xuXG4vKipcbiAqIEByZXR1cm4gdHJ1ZSBpZmYgc2NyaXB0VHlwZSByZXF1aXJlcyB3aXRuZXNzIGRhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc1dpdG5lc3NEYXRhKHNjcmlwdFR5cGU6IFNjcmlwdFR5cGUpOiBzY3JpcHRUeXBlIGlzICdwMnNoUDJ3c2gnIHwgJ3Ayd3NoJyB8ICdwMnRyJyB8ICdwMnRyTXVzaWcyJyB7XG4gIHJldHVybiBbJ3Ayc2hQMndzaCcsICdwMndzaCcsICdwMnRyJywgJ3AydHJNdXNpZzInXS5pbmNsdWRlcyhzY3JpcHRUeXBlKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gbmV0d29ya1xuICogQHBhcmFtIHNjcmlwdFR5cGVcbiAqIEByZXR1cm4gdHJ1ZSBpZmYgc2NyaXB0IHR5cGUgaXMgc3VwcG9ydGVkIGZvciBuZXR3b3JrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1N1cHBvcnRlZFNjcmlwdFR5cGUobmV0d29yazogTmV0d29yaywgc2NyaXB0VHlwZTogU2NyaXB0VHlwZSk6IGJvb2xlYW4ge1xuICBzd2l0Y2ggKHNjcmlwdFR5cGUpIHtcbiAgICBjYXNlICdwMnNoJzpcbiAgICBjYXNlICdwMnNoUDJwayc6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBjYXNlICdwMnNoUDJ3c2gnOlxuICAgIGNhc2UgJ3Ayd3NoJzpcbiAgICAgIHJldHVybiBzdXBwb3J0c1NlZ3dpdChuZXR3b3JrKTtcbiAgICBjYXNlICdwMnRyJzpcbiAgICBjYXNlICdwMnRyTXVzaWcyJzpcbiAgICAgIHJldHVybiBzdXBwb3J0c1RhcHJvb3QobmV0d29yayk7XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQgc2NyaXB0IHR5cGUgJHtzY3JpcHRUeXBlfWApO1xufVxuXG4vKipcbiAqIEBwYXJhbSB0XG4gKiBAcmV0dXJuIHN0cmluZyBwcmV2T3V0IGFzIGRlZmluZWQgaW4gUFJFVk9VVF9UWVBFUyAoYml0Y29pbmpzLWxpYi8uLi4vdHJhbnNhY3Rpb25fYnVpbGRlci5qcylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcmlwdFR5cGUyT2YzQXNQcmV2T3V0VHlwZSh0OiBTY3JpcHRUeXBlMk9mMyk6IHN0cmluZyB7XG4gIHN3aXRjaCAodCkge1xuICAgIGNhc2UgJ3Ayc2gnOlxuICAgICAgcmV0dXJuICdwMnNoLXAybXMnO1xuICAgIGNhc2UgJ3Ayc2hQMndzaCc6XG4gICAgICByZXR1cm4gJ3Ayc2gtcDJ3c2gtcDJtcyc7XG4gICAgY2FzZSAncDJ3c2gnOlxuICAgICAgcmV0dXJuICdwMndzaC1wMm1zJztcbiAgICBjYXNlICdwMnRyJzpcbiAgICAgIHJldHVybiAncDJ0ci1wMm5zJztcbiAgICBjYXNlICdwMnRyTXVzaWcyJzpcbiAgICAgIHJldHVybiAncDJ0cic7XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIHNjcmlwdCB0eXBlICR7dH1gKTtcbn1cblxuZXhwb3J0IHR5cGUgU3BlbmRhYmxlU2NyaXB0ID0ge1xuICBzY3JpcHRQdWJLZXk6IEJ1ZmZlcjtcbiAgcmVkZWVtU2NyaXB0PzogQnVmZmVyO1xuICB3aXRuZXNzU2NyaXB0PzogQnVmZmVyO1xufTtcblxuZXhwb3J0IHR5cGUgU3BlbmRTY3JpcHRQMnRyID0ge1xuICBjb250cm9sQmxvY2s6IEJ1ZmZlcjtcbiAgd2l0bmVzc1NjcmlwdDogQnVmZmVyO1xuICBsZWFmVmVyc2lvbjogbnVtYmVyO1xuICBsZWFmSGFzaDogQnVmZmVyO1xufTtcblxuLyoqXG4gKiBUd2VhayBkYXRhIGhvbGRlciBmb3IgUDJ0ciBNdXNpZzIga2V5IHBhdGguXG4gKi9cbmV4cG9ydCB0eXBlIEtleVBhdGhQMnRyTXVzaWcyID0ge1xuICBpbnRlcm5hbFB1YmtleTogQnVmZmVyO1xuICBvdXRwdXRQdWJrZXk6IEJ1ZmZlcjtcbiAgdGFwdHJlZVJvb3Q6IEJ1ZmZlcjtcbn07XG5cbi8qKlxuICogUmV0dXJuIHNjcmlwdHMgZm9yIHAyc2gtcDJwayAodXNlZCBmb3IgQkNIL0JTViByZXBsYXkgcHJvdGVjdGlvbilcbiAqIEBwYXJhbSBwdWJrZXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU91dHB1dFNjcmlwdFAyc2hQMnBrKHB1YmtleTogQnVmZmVyKTogU3BlbmRhYmxlU2NyaXB0IHtcbiAgY29uc3QgcDJwayA9IGJpdGNvaW5qcy5wYXltZW50cy5wMnBrKHsgcHVia2V5IH0pO1xuICBjb25zdCBwMnNoID0gYml0Y29pbmpzLnBheW1lbnRzLnAyc2goeyByZWRlZW06IHAycGsgfSk7XG4gIGlmICghcDJzaC5vdXRwdXQgfHwgIXAycGsub3V0cHV0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHN0YXRlYCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzY3JpcHRQdWJLZXk6IHAyc2gub3V0cHV0LFxuICAgIHJlZGVlbVNjcmlwdDogcDJway5vdXRwdXQsXG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJuIHNjcmlwdHMgZm9yIDItb2YtMyBtdWx0aXNpZyBvdXRwdXRcbiAqIEBwYXJhbSBwdWJrZXlzIC0gdGhlIGtleSB0cmlwbGUgZm9yIG11bHRpc2lnXG4gKiBAcGFyYW0gc2NyaXB0VHlwZVxuICogQHBhcmFtIG5ldHdvcmsgLSBpZiBzZXQsIHBlcmZvcm1zIHNhbml0eSBjaGVjayBmb3Igc2NyaXB0VHlwZSBzdXBwb3J0XG4gKiBAcmV0dXJucyB7e3JlZGVlbVNjcmlwdCwgd2l0bmVzc1NjcmlwdCwgc2NyaXB0UHViS2V5fX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU91dHB1dFNjcmlwdDJvZjMoXG4gIHB1YmtleXM6IEJ1ZmZlcltdLFxuICBzY3JpcHRUeXBlOiBTY3JpcHRUeXBlMk9mMyxcbiAgbmV0d29yaz86IE5ldHdvcmtcbik6IFNwZW5kYWJsZVNjcmlwdCB7XG4gIGlmIChuZXR3b3JrKSB7XG4gICAgaWYgKCFpc1N1cHBvcnRlZFNjcmlwdFR5cGUobmV0d29yaywgc2NyaXB0VHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgc2NyaXB0IHR5cGUgJHtzY3JpcHRUeXBlfSBmb3IgbmV0d29ya2ApO1xuICAgIH1cbiAgfVxuXG4gIGlmICghaXNUcmlwbGUocHVia2V5cykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG11c3QgcHJvdmlkZSBwdWJrZXkgdHJpcGxlYCk7XG4gIH1cblxuICBwdWJrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmIChrZXkubGVuZ3RoICE9PSAzMykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGtleSBsZW5ndGggJHtrZXkubGVuZ3RofS4gTXVzdCB1c2UgY29tcHJlc3NlZCBrZXlzLmApO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKHNjcmlwdFR5cGUgPT09ICdwMnRyJyB8fCBzY3JpcHRUeXBlID09PSAncDJ0ck11c2lnMicpIHtcbiAgICAvLyBwMnRyL3AydHJNdXNpZzIgYWRkcmVzc2VzIHVzZSBhIGNvbWJpbmF0aW9uIG9mIDIgb2YgMiBtdWx0aXNpZyBzY3JpcHRzIGRpc3RpbmN0IGZyb21cbiAgICAvLyB0aGUgMiBvZiAzIG11bHRpc2lnIHVzZWQgZm9yIG90aGVyIHNjcmlwdCB0eXBlc1xuICAgIHJldHVybiBjcmVhdGVUYXByb290U2NyaXB0Mm9mMyhzY3JpcHRUeXBlLCBwdWJrZXlzKTtcbiAgfVxuXG4gIGNvbnN0IHNjcmlwdDJvZjMgPSBiaXRjb2luanMucGF5bWVudHMucDJtcyh7IG06IDIsIHB1YmtleXMgfSk7XG4gIGFzc2VydChzY3JpcHQyb2YzLm91dHB1dCk7XG5cbiAgbGV0IHNjcmlwdFB1YktleTogYml0Y29pbmpzLlBheW1lbnQ7XG4gIGxldCByZWRlZW1TY3JpcHQ6IGJpdGNvaW5qcy5QYXltZW50IHwgdW5kZWZpbmVkO1xuICBsZXQgd2l0bmVzc1NjcmlwdDogYml0Y29pbmpzLlBheW1lbnQgfCB1bmRlZmluZWQ7XG4gIHN3aXRjaCAoc2NyaXB0VHlwZSkge1xuICAgIGNhc2UgJ3Ayc2gnOlxuICAgICAgcmVkZWVtU2NyaXB0ID0gc2NyaXB0Mm9mMztcbiAgICAgIHNjcmlwdFB1YktleSA9IGJpdGNvaW5qcy5wYXltZW50cy5wMnNoKHsgcmVkZWVtOiBzY3JpcHQyb2YzIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncDJzaFAyd3NoJzpcbiAgICAgIHdpdG5lc3NTY3JpcHQgPSBzY3JpcHQyb2YzO1xuICAgICAgcmVkZWVtU2NyaXB0ID0gYml0Y29pbmpzLnBheW1lbnRzLnAyd3NoKHsgcmVkZWVtOiBzY3JpcHQyb2YzIH0pO1xuICAgICAgc2NyaXB0UHViS2V5ID0gYml0Y29pbmpzLnBheW1lbnRzLnAyc2goeyByZWRlZW06IHJlZGVlbVNjcmlwdCB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Ayd3NoJzpcbiAgICAgIHdpdG5lc3NTY3JpcHQgPSBzY3JpcHQyb2YzO1xuICAgICAgc2NyaXB0UHViS2V5ID0gYml0Y29pbmpzLnBheW1lbnRzLnAyd3NoKHsgcmVkZWVtOiB3aXRuZXNzU2NyaXB0IH0pO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBtdWx0aXNpZyBzY3JpcHQgdHlwZSAke3NjcmlwdFR5cGV9YCk7XG4gIH1cblxuICBhc3NlcnQoc2NyaXB0UHViS2V5KTtcbiAgYXNzZXJ0KHNjcmlwdFB1YktleS5vdXRwdXQpO1xuXG4gIHJldHVybiB7XG4gICAgc2NyaXB0UHViS2V5OiBzY3JpcHRQdWJLZXkub3V0cHV0LFxuICAgIHJlZGVlbVNjcmlwdDogcmVkZWVtU2NyaXB0Py5vdXRwdXQsXG4gICAgd2l0bmVzc1NjcmlwdDogd2l0bmVzc1NjcmlwdD8ub3V0cHV0LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9YT25seVB1YmxpY0tleShiOiBCdWZmZXIpOiBCdWZmZXIge1xuICBpZiAoYi5sZW5ndGggPT09IDMzKSB7XG4gICAgcmV0dXJuIGIuc2xpY2UoMSk7XG4gIH1cbiAgaWYgKGIubGVuZ3RoID09PSAzMikge1xuICAgIHJldHVybiBiO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBrZXkgc2l6ZSAke2IubGVuZ3RofWApO1xufVxuXG5mdW5jdGlvbiBjaGVja1NpemUoYjogQnVmZmVyLCB0YXJnZXRTaXplOiBudW1iZXIsIG5hbWU6IHN0cmluZyk6IEJ1ZmZlciB7XG4gIGlmIChiLmxlbmd0aCA9PT0gdGFyZ2V0U2l6ZSkge1xuICAgIHJldHVybiBiO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBzaXplICR7Yi5sZW5ndGh9LiBNdXN0IHVzZSAke25hbWV9LmApO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBzaXplIG9mIHRoZSBwdWIga2V5IGZvciAzMiBieXRlcyBhbmQgcmV0dXJucyB0aGUgc2FtZSBpZmYgdHJ1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrWE9ubHlQdWJsaWNLZXkoYjogQnVmZmVyKTogQnVmZmVyIHtcbiAgcmV0dXJuIGNoZWNrU2l6ZShiLCAzMiwgJ3gtb25seSBrZXknKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgc2l6ZSBvZiB0aGUgcHViIGtleSBmb3IgMzIgYnl0ZXMgYW5kIHJldHVybnMgdGhlIHNhbWUgaWZmIHRydWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1BsYWluUHVibGljS2V5KGI6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIHJldHVybiBjaGVja1NpemUoYiwgMzMsICdwbGFpbiBrZXknKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrVGFwTWVya2xlUm9vdChiOiBCdWZmZXIpOiBCdWZmZXIge1xuICByZXR1cm4gY2hlY2tTaXplKGIsIDMyLCAndGFwIG1lcmtsZSByb290Jyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1R4SGFzaChiOiBCdWZmZXIpOiBCdWZmZXIge1xuICByZXR1cm4gY2hlY2tTaXplKGIsIDMyLCAndHggaGFzaCcpO1xufVxuXG5mdW5jdGlvbiBnZXRUYXB0cmVlS2V5Q29tYmluYXRpb25zKHNjcmlwdFR5cGU6ICdwMnRyJyB8ICdwMnRyTXVzaWcyJywga2V5czogVHJpcGxlPEJ1ZmZlcj4pOiBUdXBsZTxCdWZmZXI+W10ge1xuICBjb25zdCBbdXNlcktleSwgYmFja3VwS2V5LCBiaXRHb0tleV0gPSBrZXlzLm1hcCgoaykgPT4gdG9YT25seVB1YmxpY0tleShrKSk7XG4gIHJldHVybiBzY3JpcHRUeXBlID09PSAncDJ0cidcbiAgICA/IFtcbiAgICAgICAgW3VzZXJLZXksIGJpdEdvS2V5XSxcbiAgICAgICAgW3VzZXJLZXksIGJhY2t1cEtleV0sXG4gICAgICAgIFtiYWNrdXBLZXksIGJpdEdvS2V5XSxcbiAgICAgIF1cbiAgICA6IFtcbiAgICAgICAgW3VzZXJLZXksIGJhY2t1cEtleV0sXG4gICAgICAgIFtiYWNrdXBLZXksIGJpdEdvS2V5XSxcbiAgICAgIF07XG59XG5cbmZ1bmN0aW9uIGdldEtleVBhdGhDb21iaW5hdGlvbihzY3JpcHRUeXBlOiAncDJ0cicgfCAncDJ0ck11c2lnMicsIGtleXM6IFRyaXBsZTxCdWZmZXI+KTogVHVwbGU8QnVmZmVyPiB7XG4gIGNvbnN0IHNhbml0aXplUHVibGljS2V5ID0gc2NyaXB0VHlwZSA9PT0gJ3AydHInID8gdG9YT25seVB1YmxpY0tleSA6IGNoZWNrUGxhaW5QdWJsaWNLZXk7XG4gIHJldHVybiBbc2FuaXRpemVQdWJsaWNLZXkoa2V5c1swXSksIHNhbml0aXplUHVibGljS2V5KGtleXNbMl0pXTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVkZWVtSW5kZXgoa2V5Q29tYmluYXRpb25zOiBbQnVmZmVyLCBCdWZmZXJdW10sIHNpZ25lcjogQnVmZmVyLCBjb3NpZ25lcjogQnVmZmVyKTogbnVtYmVyIHtcbiAgc2lnbmVyID0gdG9YT25seVB1YmxpY0tleShzaWduZXIpO1xuICBjb3NpZ25lciA9IHRvWE9ubHlQdWJsaWNLZXkoY29zaWduZXIpO1xuICBjb25zdCBpID0ga2V5Q29tYmluYXRpb25zLmZpbmRJbmRleCgoW2EsIGJdKSA9PiB7XG4gICAgaWYgKGEubGVuZ3RoICE9PSBzaWduZXIubGVuZ3RoIHx8IGIubGVuZ3RoICE9PSBjb3NpZ25lci5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBjb21wYXJpc29uYCk7XG4gICAgfVxuICAgIHJldHVybiAoYS5lcXVhbHMoc2lnbmVyKSAmJiBiLmVxdWFscyhjb3NpZ25lcikpIHx8IChhLmVxdWFscyhjb3NpZ25lcikgJiYgYi5lcXVhbHMoc2lnbmVyKSk7XG4gIH0pO1xuICBpZiAoMCA8PSBpKSB7XG4gICAgcmV0dXJuIGk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBjb3VsZCBub3QgZmluZCBzaW5nZXIvY29zaWduZXIgY29tYmluYXRpb25gKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUGF5bWVudFAydHJDb21tb24oXG4gIHNjcmlwdFR5cGU6ICdwMnRyJyB8ICdwMnRyTXVzaWcyJyxcbiAgcHVia2V5czogVHJpcGxlPEJ1ZmZlcj4sXG4gIHJlZGVlbUluZGV4PzogbnVtYmVyIHwgeyBzaWduZXI6IEJ1ZmZlcjsgY29zaWduZXI6IEJ1ZmZlciB9XG4pOiBiaXRjb2luanMuUGF5bWVudCB7XG4gIGNvbnN0IGtleUNvbWJpbmF0aW9uczJvZjIgPSBnZXRUYXB0cmVlS2V5Q29tYmluYXRpb25zKHNjcmlwdFR5cGUsIHB1YmtleXMpO1xuICBpZiAodHlwZW9mIHJlZGVlbUluZGV4ID09PSAnb2JqZWN0Jykge1xuICAgIHJlZGVlbUluZGV4ID0gZ2V0UmVkZWVtSW5kZXgoa2V5Q29tYmluYXRpb25zMm9mMiwgcmVkZWVtSW5kZXguc2lnbmVyLCByZWRlZW1JbmRleC5jb3NpZ25lcik7XG4gIH1cbiAgY29uc3QgcmVkZWVtcyA9IGtleUNvbWJpbmF0aW9uczJvZjIubWFwKChwdWJrZXlzLCBpbmRleCkgPT5cbiAgICBwMnRyUGF5bWVudHMucDJ0cl9ucyhcbiAgICAgIHtcbiAgICAgICAgcHVia2V5cyxcbiAgICAgICAgZGVwdGg6IHNjcmlwdFR5cGUgPT09ICdwMnRyTXVzaWcyJyB8fCBpbmRleCA9PT0gMCA/IDEgOiAyLFxuICAgICAgfSxcbiAgICAgIHsgZWNjTGliIH1cbiAgICApXG4gICk7XG5cbiAgcmV0dXJuIHAydHJQYXltZW50cy5wMnRyKFxuICAgIHtcbiAgICAgIHB1YmtleXM6IGdldEtleVBhdGhDb21iaW5hdGlvbihzY3JpcHRUeXBlLCBwdWJrZXlzKSxcbiAgICAgIHJlZGVlbXMsXG4gICAgICByZWRlZW1JbmRleCxcbiAgICB9LFxuICAgIHsgZWNjTGliIH1cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBheW1lbnRQMnRyKFxuICBwdWJrZXlzOiBUcmlwbGU8QnVmZmVyPixcbiAgcmVkZWVtSW5kZXg/OiBudW1iZXIgfCB7IHNpZ25lcjogQnVmZmVyOyBjb3NpZ25lcjogQnVmZmVyIH1cbik6IGJpdGNvaW5qcy5QYXltZW50IHtcbiAgcmV0dXJuIGNyZWF0ZVBheW1lbnRQMnRyQ29tbW9uKCdwMnRyJywgcHVia2V5cywgcmVkZWVtSW5kZXgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGF5bWVudFAydHJNdXNpZzIoXG4gIHB1YmtleXM6IFRyaXBsZTxCdWZmZXI+LFxuICByZWRlZW1JbmRleD86IG51bWJlciB8IHsgc2lnbmVyOiBCdWZmZXI7IGNvc2lnbmVyOiBCdWZmZXIgfVxuKTogYml0Y29pbmpzLlBheW1lbnQge1xuICByZXR1cm4gY3JlYXRlUGF5bWVudFAydHJDb21tb24oJ3AydHJNdXNpZzInLCBwdWJrZXlzLCByZWRlZW1JbmRleCk7XG59XG5cbmZ1bmN0aW9uIGdldExlYWZIYXNoQ29tbW9uKFxuICBzY3JpcHRUeXBlOiAncDJ0cicgfCAncDJ0ck11c2lnMicsXG4gIHBhcmFtczogYml0Y29pbmpzLlBheW1lbnQgfCB7IHB1YmxpY0tleXM6IFRyaXBsZTxCdWZmZXI+OyBzaWduZXI6IEJ1ZmZlcjsgY29zaWduZXI6IEJ1ZmZlciB9XG4pOiBCdWZmZXIge1xuICBpZiAoJ3B1YmxpY0tleXMnIGluIHBhcmFtcykge1xuICAgIHBhcmFtcyA9IGNyZWF0ZVBheW1lbnRQMnRyQ29tbW9uKHNjcmlwdFR5cGUsIHBhcmFtcy5wdWJsaWNLZXlzLCBwYXJhbXMpO1xuICB9XG4gIGNvbnN0IHsgb3V0cHV0LCBjb250cm9sQmxvY2ssIHJlZGVlbSB9ID0gcGFyYW1zO1xuICBpZiAoIW91dHB1dCB8fCAhY29udHJvbEJsb2NrIHx8ICFyZWRlZW0gfHwgIXJlZGVlbS5vdXRwdXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgc3RhdGVgKTtcbiAgfVxuICByZXR1cm4gdGFwcm9vdC5nZXRUYXBsZWFmSGFzaChlY2NMaWIsIGNvbnRyb2xCbG9jaywgcmVkZWVtLm91dHB1dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMZWFmSGFzaChcbiAgcGFyYW1zOiBiaXRjb2luanMuUGF5bWVudCB8IHsgcHVibGljS2V5czogVHJpcGxlPEJ1ZmZlcj47IHNpZ25lcjogQnVmZmVyOyBjb3NpZ25lcjogQnVmZmVyIH1cbik6IEJ1ZmZlciB7XG4gIHJldHVybiBnZXRMZWFmSGFzaENvbW1vbigncDJ0cicsIHBhcmFtcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVLZXlQYXRoUDJ0ck11c2lnMihwdWJrZXlzOiBUcmlwbGU8QnVmZmVyPik6IEtleVBhdGhQMnRyTXVzaWcyIHtcbiAgY29uc3QgcGF5bWVudCA9IGNyZWF0ZVBheW1lbnRQMnRyQ29tbW9uKCdwMnRyTXVzaWcyJywgcHVia2V5cyk7XG4gIGFzc2VydChwYXltZW50LmludGVybmFsUHVia2V5KTtcbiAgYXNzZXJ0KHBheW1lbnQudGFwVHJlZSk7XG4gIHJldHVybiB7XG4gICAgaW50ZXJuYWxQdWJrZXk6IHBheW1lbnQuaW50ZXJuYWxQdWJrZXksXG4gICAgb3V0cHV0UHVia2V5OiBnZXRUd2Vha2VkT3V0cHV0S2V5KHBheW1lbnQpLFxuICAgIHRhcHRyZWVSb290OiBnZXREZXB0aEZpcnN0VGFwdHJlZShwYXltZW50LnRhcFRyZWUpLnJvb3QsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNwZW5kU2NyaXB0UDJ0ckNvbW1vbihcbiAgc2NyaXB0VHlwZTogJ3AydHInIHwgJ3AydHJNdXNpZzInLFxuICBwdWJrZXlzOiBUcmlwbGU8QnVmZmVyPixcbiAga2V5Q29tYmluYXRpb246IFR1cGxlPEJ1ZmZlcj5cbik6IFNwZW5kU2NyaXB0UDJ0ciB7XG4gIGNvbnN0IGtleUNvbWJpbmF0aW9ucyA9IGdldFRhcHRyZWVLZXlDb21iaW5hdGlvbnMoc2NyaXB0VHlwZSwgcHVia2V5cyk7XG4gIGNvbnN0IFthLCBiXSA9IGtleUNvbWJpbmF0aW9uLm1hcCgoaykgPT4gdG9YT25seVB1YmxpY0tleShrKSk7XG4gIGNvbnN0IHJlZGVlbUluZGV4ID0ga2V5Q29tYmluYXRpb25zLmZpbmRJbmRleChcbiAgICAoW2MsIGRdKSA9PiAoYS5lcXVhbHMoYykgJiYgYi5lcXVhbHMoZCkpIHx8IChhLmVxdWFscyhkKSAmJiBiLmVxdWFscyhjKSlcbiAgKTtcblxuICBpZiAocmVkZWVtSW5kZXggPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBjb3VsZCBub3QgZmluZCByZWRlZW1JbmRleCBmb3Iga2V5IGNvbWJpbmF0aW9uYCk7XG4gIH1cblxuICBjb25zdCBwYXltZW50ID0gY3JlYXRlUGF5bWVudFAydHJDb21tb24oc2NyaXB0VHlwZSwgcHVia2V5cywgcmVkZWVtSW5kZXgpO1xuICBjb25zdCB7IGNvbnRyb2xCbG9jayB9ID0gcGF5bWVudDtcbiAgYXNzZXJ0KEJ1ZmZlci5pc0J1ZmZlcihjb250cm9sQmxvY2spKTtcblxuICBhc3NlcnQocGF5bWVudC5yZWRlZW0pO1xuICBjb25zdCBsZWFmU2NyaXB0ID0gcGF5bWVudC5yZWRlZW0ub3V0cHV0O1xuICBhc3NlcnQoQnVmZmVyLmlzQnVmZmVyKGxlYWZTY3JpcHQpKTtcblxuICBjb25zdCBwYXJzZWRDb250cm9sQmxvY2sgPSB0YXByb290LnBhcnNlQ29udHJvbEJsb2NrKGVjY0xpYiwgY29udHJvbEJsb2NrKTtcbiAgY29uc3QgeyBsZWFmVmVyc2lvbiB9ID0gcGFyc2VkQ29udHJvbEJsb2NrO1xuICBjb25zdCBsZWFmSGFzaCA9IHRhcHJvb3QuZ2V0VGFwbGVhZkhhc2goZWNjTGliLCBwYXJzZWRDb250cm9sQmxvY2ssIGxlYWZTY3JpcHQpO1xuXG4gIHJldHVybiB7XG4gICAgY29udHJvbEJsb2NrLFxuICAgIHdpdG5lc3NTY3JpcHQ6IGxlYWZTY3JpcHQsXG4gICAgbGVhZlZlcnNpb24sXG4gICAgbGVhZkhhc2gsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTcGVuZFNjcmlwdFAydHIocHVia2V5czogVHJpcGxlPEJ1ZmZlcj4sIGtleUNvbWJpbmF0aW9uOiBUdXBsZTxCdWZmZXI+KTogU3BlbmRTY3JpcHRQMnRyIHtcbiAgcmV0dXJuIGNyZWF0ZVNwZW5kU2NyaXB0UDJ0ckNvbW1vbigncDJ0cicsIHB1YmtleXMsIGtleUNvbWJpbmF0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNwZW5kU2NyaXB0UDJ0ck11c2lnMihwdWJrZXlzOiBUcmlwbGU8QnVmZmVyPiwga2V5Q29tYmluYXRpb246IFR1cGxlPEJ1ZmZlcj4pOiBTcGVuZFNjcmlwdFAydHIge1xuICByZXR1cm4gY3JlYXRlU3BlbmRTY3JpcHRQMnRyQ29tbW9uKCdwMnRyTXVzaWcyJywgcHVia2V5cywga2V5Q29tYmluYXRpb24pO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSB0YXByb290IG91dHB1dCBzY3JpcHQgdXNpbmcgdGhlIHVzZXIrYml0Z28ga2V5cyBmb3IgdGhlIGFnZ3JlZ2F0ZVxuICogcHVibGljIGtleSB1c2luZyBNdVNpZzIgYW5kIGEgdGFwdHJlZSBjb250YWluaW5nIGVpdGhlciBvZiB0aGUgZm9sbG93aW5nIGRlcGVuZHMgb24gc2NyaXB0VHlwZS5cbiAqIHAydHIgdHlwZTogYSB1c2VyK2JpdGdvIDItb2YtMiBzY3JpcHQgYXQgdGhlIGZpcnN0IGRlcHRoIGxldmVsIG9mIHRoZSB0cmVlIGFuZCB1c2VyK2JhY2t1cFxuICogYW5kIGJpdGdvK2JhY2t1cCAyLW9mLTIgc2NyaXB0cyBvbmUgbGV2ZWwgZGVlcGVyLlxuICogcDJ0ck11c2lnMiB0eXBlOiB1c2VyK2JhY2t1cCBhbmQgYml0Z28rYmFja3VwIDItb2YtMiBzY3JpcHRzIGF0IHRoZSBmaXJzdCBkZXB0aCBsZXZlbCBvZiB0aGVcbiAqIHRyZWUuXG4gKiBAcGFyYW0gcHVia2V5cyAtIGEgcHVia2V5IGFycmF5IGNvbnRhaW5pbmcgdGhlIHVzZXIga2V5LCBiYWNrdXAga2V5LCBhbmQgYml0Z28ga2V5IGluIHRoYXQgb3JkZXJcbiAqIEByZXR1cm5zIHt7c2NyaXB0UHViS2V5fX1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlVGFwcm9vdFNjcmlwdDJvZjMoc2NyaXB0VHlwZTogJ3AydHInIHwgJ3AydHJNdXNpZzInLCBwdWJrZXlzOiBUcmlwbGU8QnVmZmVyPik6IFNwZW5kYWJsZVNjcmlwdCB7XG4gIGNvbnN0IHsgb3V0cHV0IH0gPSBjcmVhdGVQYXltZW50UDJ0ckNvbW1vbihzY3JpcHRUeXBlLCBwdWJrZXlzKTtcbiAgYXNzZXJ0KEJ1ZmZlci5pc0J1ZmZlcihvdXRwdXQpKTtcbiAgcmV0dXJuIHtcbiAgICBzY3JpcHRQdWJLZXk6IG91dHB1dCxcbiAgfTtcbn1cbiJdfQ==
|
|
320
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0U2NyaXB0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iaXRnby9vdXRwdXRTY3JpcHRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUFpQztBQUNqQywyQ0FBMkM7QUFFM0MsMEJBQXFGO0FBRXJGLG1DQUFrRDtBQUVsRCw0Q0FBNkM7QUFDN0Msd0NBQXVFO0FBRXZFLDBDQUFxRDtBQUE1Qyw0R0FBQSxrQkFBa0IsT0FBQTtBQUVkLFFBQUEsa0JBQWtCLEdBQUcsVUFBVSxDQUFDO0FBR2hDLFFBQUEsZUFBZSxHQUFHLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBVSxDQUFDO0FBRzdGLFNBQWdCLGdCQUFnQixDQUFDLENBQVM7SUFDeEMsT0FBTyx1QkFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFtQixDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUZELDRDQUVDO0FBSUQ7O0dBRUc7QUFDSCxTQUFnQixjQUFjLENBQUMsVUFBc0I7SUFDbkQsT0FBTyxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMzRSxDQUFDO0FBRkQsd0NBRUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IscUJBQXFCLENBQUMsT0FBZ0IsRUFBRSxVQUFzQjtJQUM1RSxRQUFRLFVBQVUsRUFBRTtRQUNsQixLQUFLLE1BQU0sQ0FBQztRQUNaLEtBQUssVUFBVTtZQUNiLE9BQU8sSUFBSSxDQUFDO1FBQ2QsS0FBSyxXQUFXLENBQUM7UUFDakIsS0FBSyxPQUFPO1lBQ1YsT0FBTyxrQkFBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLEtBQUssTUFBTSxDQUFDO1FBQ1osS0FBSyxZQUFZO1lBQ2YsT0FBTyxtQkFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ25DO0lBRUQsMEJBQTBCO0lBQzFC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T0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQzVFLENBQUM7QUFGRCxrRUFFQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQVMsdUJBQXVCLENBQUMsVUFBaUMsRUFBRSxPQUF1QjtJQUN6RixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsdUJBQXVCLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDaEMsT0FBTztRQUNMLFlBQVksRUFBRSxNQUFNO0tBQ3JCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgKiBhcyBiaXRjb2luanMgZnJvbSAnYml0Y29pbmpzLWxpYic7XG5cbmltcG9ydCB7IE5ldHdvcmssIHAydHJQYXltZW50cywgc3VwcG9ydHNTZWd3aXQsIHN1cHBvcnRzVGFwcm9vdCwgdGFwcm9vdCB9IGZyb20gJy4uJztcblxuaW1wb3J0IHsgaXNUcmlwbGUsIFRyaXBsZSwgVHVwbGUgfSBmcm9tICcuL3R5cGVzJztcblxuaW1wb3J0IHsgZWNjIGFzIGVjY0xpYiB9IGZyb20gJy4uL25vYmxlX2VjYyc7XG5pbXBvcnQgeyBnZXREZXB0aEZpcnN0VGFwdHJlZSwgZ2V0VHdlYWtlZE91dHB1dEtleSB9IGZyb20gJy4uL3RhcHJvb3QnO1xuXG5leHBvcnQgeyBzY3JpcHRUeXBlRm9yQ2hhaW4gfSBmcm9tICcuL3dhbGxldC9jaGFpbnMnO1xuXG5leHBvcnQgY29uc3Qgc2NyaXB0VHlwZVAyc2hQMnBrID0gJ3Ayc2hQMnBrJztcbmV4cG9ydCB0eXBlIFNjcmlwdFR5cGVQMnNoUDJwayA9IHR5cGVvZiBzY3JpcHRUeXBlUDJzaFAycGs7XG5cbmV4cG9ydCBjb25zdCBzY3JpcHRUeXBlczJPZjMgPSBbJ3Ayc2gnLCAncDJzaFAyd3NoJywgJ3Ayd3NoJywgJ3AydHInLCAncDJ0ck11c2lnMiddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgU2NyaXB0VHlwZTJPZjMgPSAodHlwZW9mIHNjcmlwdFR5cGVzMk9mMylbbnVtYmVyXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2NyaXB0VHlwZTJPZjModDogc3RyaW5nKTogdCBpcyBTY3JpcHRUeXBlMk9mMyB7XG4gIHJldHVybiBzY3JpcHRUeXBlczJPZjMuaW5jbHVkZXModCBhcyBTY3JpcHRUeXBlMk9mMyk7XG59XG5cbmV4cG9ydCB0eXBlIFNjcmlwdFR5cGUgPSBTY3JpcHRUeXBlUDJzaFAycGsgfCBTY3JpcHRUeXBlMk9mMztcblxuLyoqXG4gKiBAcmV0dXJuIHRydWUgaWZmIHNjcmlwdFR5cGUgcmVxdWlyZXMgd2l0bmVzcyBkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNXaXRuZXNzRGF0YShzY3JpcHRUeXBlOiBTY3JpcHRUeXBlKTogc2NyaXB0VHlwZSBpcyAncDJzaFAyd3NoJyB8ICdwMndzaCcgfCAncDJ0cicgfCAncDJ0ck11c2lnMicge1xuICByZXR1cm4gWydwMnNoUDJ3c2gnLCAncDJ3c2gnLCAncDJ0cicsICdwMnRyTXVzaWcyJ10uaW5jbHVkZXMoc2NyaXB0VHlwZSk7XG59XG5cbi8qKlxuICogQHBhcmFtIG5ldHdvcmtcbiAqIEBwYXJhbSBzY3JpcHRUeXBlXG4gKiBAcmV0dXJuIHRydWUgaWZmIHNjcmlwdCB0eXBlIGlzIHN1cHBvcnRlZCBmb3IgbmV0d29ya1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTdXBwb3J0ZWRTY3JpcHRUeXBlKG5ldHdvcms6IE5ldHdvcmssIHNjcmlwdFR5cGU6IFNjcmlwdFR5cGUpOiBib29sZWFuIHtcbiAgc3dpdGNoIChzY3JpcHRUeXBlKSB7XG4gICAgY2FzZSAncDJzaCc6XG4gICAgY2FzZSAncDJzaFAycGsnOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgY2FzZSAncDJzaFAyd3NoJzpcbiAgICBjYXNlICdwMndzaCc6XG4gICAgICByZXR1cm4gc3VwcG9ydHNTZWd3aXQobmV0d29yayk7XG4gICAgY2FzZSAncDJ0cic6XG4gICAgY2FzZSAncDJ0ck11c2lnMic6XG4gICAgICByZXR1cm4gc3VwcG9ydHNUYXByb290KG5ldHdvcmspO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIHNjcmlwdCB0eXBlICR7c2NyaXB0VHlwZX1gKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gdFxuICogQHJldHVybiBzdHJpbmcgcHJldk91dCBhcyBkZWZpbmVkIGluIFBSRVZPVVRfVFlQRVMgKGJpdGNvaW5qcy1saWIvLi4uL3RyYW5zYWN0aW9uX2J1aWxkZXIuanMpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY3JpcHRUeXBlMk9mM0FzUHJldk91dFR5cGUodDogU2NyaXB0VHlwZTJPZjMpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHQpIHtcbiAgICBjYXNlICdwMnNoJzpcbiAgICAgIHJldHVybiAncDJzaC1wMm1zJztcbiAgICBjYXNlICdwMnNoUDJ3c2gnOlxuICAgICAgcmV0dXJuICdwMnNoLXAyd3NoLXAybXMnO1xuICAgIGNhc2UgJ3Ayd3NoJzpcbiAgICAgIHJldHVybiAncDJ3c2gtcDJtcyc7XG4gICAgY2FzZSAncDJ0cic6XG4gICAgICByZXR1cm4gJ3AydHItcDJucyc7XG4gICAgY2FzZSAncDJ0ck11c2lnMic6XG4gICAgICByZXR1cm4gJ3AydHInO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBzY3JpcHQgdHlwZSAke3R9YCk7XG59XG5cbmV4cG9ydCB0eXBlIFNwZW5kYWJsZVNjcmlwdCA9IHtcbiAgc2NyaXB0UHViS2V5OiBCdWZmZXI7XG4gIHJlZGVlbVNjcmlwdD86IEJ1ZmZlcjtcbiAgd2l0bmVzc1NjcmlwdD86IEJ1ZmZlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFNwZW5kU2NyaXB0UDJ0ciA9IHtcbiAgY29udHJvbEJsb2NrOiBCdWZmZXI7XG4gIHdpdG5lc3NTY3JpcHQ6IEJ1ZmZlcjtcbiAgbGVhZlZlcnNpb246IG51bWJlcjtcbiAgbGVhZkhhc2g6IEJ1ZmZlcjtcbn07XG5cbi8qKlxuICogVHdlYWsgZGF0YSBob2xkZXIgZm9yIFAydHIgTXVzaWcyIGtleSBwYXRoLlxuICovXG5leHBvcnQgdHlwZSBLZXlQYXRoUDJ0ck11c2lnMiA9IHtcbiAgaW50ZXJuYWxQdWJrZXk6IEJ1ZmZlcjtcbiAgb3V0cHV0UHVia2V5OiBCdWZmZXI7XG4gIHRhcHRyZWVSb290OiBCdWZmZXI7XG59O1xuXG4vKipcbiAqIFJldHVybiBzY3JpcHRzIGZvciBwMnNoLXAycGsgKHVzZWQgZm9yIEJDSC9CU1YgcmVwbGF5IHByb3RlY3Rpb24pXG4gKiBAcGFyYW0gcHVia2V5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVPdXRwdXRTY3JpcHRQMnNoUDJwayhwdWJrZXk6IEJ1ZmZlcik6IFNwZW5kYWJsZVNjcmlwdCB7XG4gIGNvbnN0IHAycGsgPSBiaXRjb2luanMucGF5bWVudHMucDJwayh7IHB1YmtleSB9KTtcbiAgY29uc3QgcDJzaCA9IGJpdGNvaW5qcy5wYXltZW50cy5wMnNoKHsgcmVkZWVtOiBwMnBrIH0pO1xuICBpZiAoIXAyc2gub3V0cHV0IHx8ICFwMnBrLm91dHB1dCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBzdGF0ZWApO1xuICB9XG4gIHJldHVybiB7XG4gICAgc2NyaXB0UHViS2V5OiBwMnNoLm91dHB1dCxcbiAgICByZWRlZW1TY3JpcHQ6IHAycGsub3V0cHV0LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3V0cHV0U2NyaXB0KHNjcmlwdFR5cGU6ICdwMnNoJyB8ICdwMnNoUDJ3c2gnIHwgJ3Ayd3NoJywgY29uZGl0aW9uU2NyaXB0OiBCdWZmZXIpOiBCdWZmZXIge1xuICBsZXQgb3V0cHV0O1xuICBzd2l0Y2ggKHNjcmlwdFR5cGUpIHtcbiAgICBjYXNlICdwMnNoJzpcbiAgICAgICh7IG91dHB1dCB9ID0gYml0Y29pbmpzLnBheW1lbnRzLnAyc2goeyByZWRlZW06IHsgb3V0cHV0OiBjb25kaXRpb25TY3JpcHQgfSB9KSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwMnNoUDJ3c2gnOlxuICAgICAgKHsgb3V0cHV0IH0gPSBiaXRjb2luanMucGF5bWVudHMucDJzaCh7XG4gICAgICAgIHJlZGVlbTogeyBvdXRwdXQ6IGdldE91dHB1dFNjcmlwdCgncDJ3c2gnLCBjb25kaXRpb25TY3JpcHQpIH0sXG4gICAgICB9KSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwMndzaCc6XG4gICAgICAoeyBvdXRwdXQgfSA9IGJpdGNvaW5qcy5wYXltZW50cy5wMndzaCh7IHJlZGVlbTogeyBvdXRwdXQ6IGNvbmRpdGlvblNjcmlwdCB9IH0pKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGlmIChvdXRwdXQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgb3V0cHV0IHVuZGVmaW5lZGApO1xuICB9XG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbi8qKlxuICogUmV0dXJuIHNjcmlwdHMgZm9yIDItb2YtMyBtdWx0aXNpZyBvdXRwdXRcbiAqIEBwYXJhbSBwdWJrZXlzIC0gdGhlIGtleSB0cmlwbGUgZm9yIG11bHRpc2lnXG4gKiBAcGFyYW0gc2NyaXB0VHlwZVxuICogQHBhcmFtIG5ldHdvcmsgLSBpZiBzZXQsIHBlcmZvcm1zIHNhbml0eSBjaGVjayBmb3Igc2NyaXB0VHlwZSBzdXBwb3J0XG4gKiBAcmV0dXJucyB7e3JlZGVlbVNjcmlwdCwgd2l0bmVzc1NjcmlwdCwgc2NyaXB0UHViS2V5fX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU91dHB1dFNjcmlwdDJvZjMoXG4gIHB1YmtleXM6IEJ1ZmZlcltdLFxuICBzY3JpcHRUeXBlOiBTY3JpcHRUeXBlMk9mMyxcbiAgbmV0d29yaz86IE5ldHdvcmtcbik6IFNwZW5kYWJsZVNjcmlwdCB7XG4gIGlmIChuZXR3b3JrKSB7XG4gICAgaWYgKCFpc1N1cHBvcnRlZFNjcmlwdFR5cGUobmV0d29yaywgc2NyaXB0VHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgc2NyaXB0IHR5cGUgJHtzY3JpcHRUeXBlfSBmb3IgbmV0d29ya2ApO1xuICAgIH1cbiAgfVxuXG4gIGlmICghaXNUcmlwbGUocHVia2V5cykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG11c3QgcHJvdmlkZSBwdWJrZXkgdHJpcGxlYCk7XG4gIH1cblxuICBwdWJrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmIChrZXkubGVuZ3RoICE9PSAzMykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGtleSBsZW5ndGggJHtrZXkubGVuZ3RofS4gTXVzdCB1c2UgY29tcHJlc3NlZCBrZXlzLmApO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKHNjcmlwdFR5cGUgPT09ICdwMnRyJyB8fCBzY3JpcHRUeXBlID09PSAncDJ0ck11c2lnMicpIHtcbiAgICAvLyBwMnRyL3AydHJNdXNpZzIgYWRkcmVzc2VzIHVzZSBhIGNvbWJpbmF0aW9uIG9mIDIgb2YgMiBtdWx0aXNpZyBzY3JpcHRzIGRpc3RpbmN0IGZyb21cbiAgICAvLyB0aGUgMiBvZiAzIG11bHRpc2lnIHVzZWQgZm9yIG90aGVyIHNjcmlwdCB0eXBlc1xuICAgIHJldHVybiBjcmVhdGVUYXByb290U2NyaXB0Mm9mMyhzY3JpcHRUeXBlLCBwdWJrZXlzKTtcbiAgfVxuXG4gIGNvbnN0IHNjcmlwdDJvZjMgPSBiaXRjb2luanMucGF5bWVudHMucDJtcyh7IG06IDIsIHB1YmtleXMgfSk7XG4gIGFzc2VydChzY3JpcHQyb2YzLm91dHB1dCk7XG5cbiAgbGV0IHJlZGVlbVNjcmlwdDogYml0Y29pbmpzLlBheW1lbnQgfCB1bmRlZmluZWQ7XG4gIGxldCB3aXRuZXNzU2NyaXB0OiBiaXRjb2luanMuUGF5bWVudCB8IHVuZGVmaW5lZDtcbiAgc3dpdGNoIChzY3JpcHRUeXBlKSB7XG4gICAgY2FzZSAncDJzaCc6XG4gICAgICByZWRlZW1TY3JpcHQgPSBzY3JpcHQyb2YzO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncDJzaFAyd3NoJzpcbiAgICAgIHdpdG5lc3NTY3JpcHQgPSBzY3JpcHQyb2YzO1xuICAgICAgcmVkZWVtU2NyaXB0ID0gYml0Y29pbmpzLnBheW1lbnRzLnAyd3NoKHsgcmVkZWVtOiBzY3JpcHQyb2YzIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncDJ3c2gnOlxuICAgICAgd2l0bmVzc1NjcmlwdCA9IHNjcmlwdDJvZjM7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIG11bHRpc2lnIHNjcmlwdCB0eXBlICR7c2NyaXB0VHlwZX1gKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2NyaXB0UHViS2V5OiBnZXRPdXRwdXRTY3JpcHQoc2NyaXB0VHlwZSwgc2NyaXB0Mm9mMy5vdXRwdXQpLFxuICAgIHJlZGVlbVNjcmlwdDogcmVkZWVtU2NyaXB0Py5vdXRwdXQsXG4gICAgd2l0bmVzc1NjcmlwdDogd2l0bmVzc1NjcmlwdD8ub3V0cHV0LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9YT25seVB1YmxpY0tleShiOiBCdWZmZXIpOiBCdWZmZXIge1xuICBpZiAoYi5sZW5ndGggPT09IDMzKSB7XG4gICAgcmV0dXJuIGIuc2xpY2UoMSk7XG4gIH1cbiAgaWYgKGIubGVuZ3RoID09PSAzMikge1xuICAgIHJldHVybiBiO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBrZXkgc2l6ZSAke2IubGVuZ3RofWApO1xufVxuXG5mdW5jdGlvbiBjaGVja1NpemUoYjogQnVmZmVyLCB0YXJnZXRTaXplOiBudW1iZXIsIG5hbWU6IHN0cmluZyk6IEJ1ZmZlciB7XG4gIGlmIChiLmxlbmd0aCA9PT0gdGFyZ2V0U2l6ZSkge1xuICAgIHJldHVybiBiO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBzaXplICR7Yi5sZW5ndGh9LiBNdXN0IHVzZSAke25hbWV9LmApO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBzaXplIG9mIHRoZSBwdWIga2V5IGZvciAzMiBieXRlcyBhbmQgcmV0dXJucyB0aGUgc2FtZSBpZmYgdHJ1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrWE9ubHlQdWJsaWNLZXkoYjogQnVmZmVyKTogQnVmZmVyIHtcbiAgcmV0dXJuIGNoZWNrU2l6ZShiLCAzMiwgJ3gtb25seSBrZXknKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgc2l6ZSBvZiB0aGUgcHViIGtleSBmb3IgMzIgYnl0ZXMgYW5kIHJldHVybnMgdGhlIHNhbWUgaWZmIHRydWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1BsYWluUHVibGljS2V5KGI6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIHJldHVybiBjaGVja1NpemUoYiwgMzMsICdwbGFpbiBrZXknKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrVGFwTWVya2xlUm9vdChiOiBCdWZmZXIpOiBCdWZmZXIge1xuICByZXR1cm4gY2hlY2tTaXplKGIsIDMyLCAndGFwIG1lcmtsZSByb290Jyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1R4SGFzaChiOiBCdWZmZXIpOiBCdWZmZXIge1xuICByZXR1cm4gY2hlY2tTaXplKGIsIDMyLCAndHggaGFzaCcpO1xufVxuXG5mdW5jdGlvbiBnZXRUYXB0cmVlS2V5Q29tYmluYXRpb25zKHNjcmlwdFR5cGU6ICdwMnRyJyB8ICdwMnRyTXVzaWcyJywga2V5czogVHJpcGxlPEJ1ZmZlcj4pOiBUdXBsZTxCdWZmZXI+W10ge1xuICBjb25zdCBbdXNlcktleSwgYmFja3VwS2V5LCBiaXRHb0tleV0gPSBrZXlzLm1hcCgoaykgPT4gdG9YT25seVB1YmxpY0tleShrKSk7XG4gIHJldHVybiBzY3JpcHRUeXBlID09PSAncDJ0cidcbiAgICA/IFtcbiAgICAgICAgW3VzZXJLZXksIGJpdEdvS2V5XSxcbiAgICAgICAgW3VzZXJLZXksIGJhY2t1cEtleV0sXG4gICAgICAgIFtiYWNrdXBLZXksIGJpdEdvS2V5XSxcbiAgICAgIF1cbiAgICA6IFtcbiAgICAgICAgW3VzZXJLZXksIGJhY2t1cEtleV0sXG4gICAgICAgIFtiYWNrdXBLZXksIGJpdEdvS2V5XSxcbiAgICAgIF07XG59XG5cbmZ1bmN0aW9uIGdldEtleVBhdGhDb21iaW5hdGlvbihzY3JpcHRUeXBlOiAncDJ0cicgfCAncDJ0ck11c2lnMicsIGtleXM6IFRyaXBsZTxCdWZmZXI+KTogVHVwbGU8QnVmZmVyPiB7XG4gIGNvbnN0IHNhbml0aXplUHVibGljS2V5ID0gc2NyaXB0VHlwZSA9PT0gJ3AydHInID8gdG9YT25seVB1YmxpY0tleSA6IGNoZWNrUGxhaW5QdWJsaWNLZXk7XG4gIHJldHVybiBbc2FuaXRpemVQdWJsaWNLZXkoa2V5c1swXSksIHNhbml0aXplUHVibGljS2V5KGtleXNbMl0pXTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVkZWVtSW5kZXgoa2V5Q29tYmluYXRpb25zOiBbQnVmZmVyLCBCdWZmZXJdW10sIHNpZ25lcjogQnVmZmVyLCBjb3NpZ25lcjogQnVmZmVyKTogbnVtYmVyIHtcbiAgc2lnbmVyID0gdG9YT25seVB1YmxpY0tleShzaWduZXIpO1xuICBjb3NpZ25lciA9IHRvWE9ubHlQdWJsaWNLZXkoY29zaWduZXIpO1xuICBjb25zdCBpID0ga2V5Q29tYmluYXRpb25zLmZpbmRJbmRleCgoW2EsIGJdKSA9PiB7XG4gICAgaWYgKGEubGVuZ3RoICE9PSBzaWduZXIubGVuZ3RoIHx8IGIubGVuZ3RoICE9PSBjb3NpZ25lci5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBjb21wYXJpc29uYCk7XG4gICAgfVxuICAgIHJldHVybiAoYS5lcXVhbHMoc2lnbmVyKSAmJiBiLmVxdWFscyhjb3NpZ25lcikpIHx8IChhLmVxdWFscyhjb3NpZ25lcikgJiYgYi5lcXVhbHMoc2lnbmVyKSk7XG4gIH0pO1xuICBpZiAoMCA8PSBpKSB7XG4gICAgcmV0dXJuIGk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBjb3VsZCBub3QgZmluZCBzaW5nZXIvY29zaWduZXIgY29tYmluYXRpb25gKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUGF5bWVudFAydHJDb21tb24oXG4gIHNjcmlwdFR5cGU6ICdwMnRyJyB8ICdwMnRyTXVzaWcyJyxcbiAgcHVia2V5czogVHJpcGxlPEJ1ZmZlcj4sXG4gIHJlZGVlbUluZGV4PzogbnVtYmVyIHwgeyBzaWduZXI6IEJ1ZmZlcjsgY29zaWduZXI6IEJ1ZmZlciB9XG4pOiBiaXRjb2luanMuUGF5bWVudCB7XG4gIGNvbnN0IGtleUNvbWJpbmF0aW9uczJvZjIgPSBnZXRUYXB0cmVlS2V5Q29tYmluYXRpb25zKHNjcmlwdFR5cGUsIHB1YmtleXMpO1xuICBpZiAodHlwZW9mIHJlZGVlbUluZGV4ID09PSAnb2JqZWN0Jykge1xuICAgIHJlZGVlbUluZGV4ID0gZ2V0UmVkZWVtSW5kZXgoa2V5Q29tYmluYXRpb25zMm9mMiwgcmVkZWVtSW5kZXguc2lnbmVyLCByZWRlZW1JbmRleC5jb3NpZ25lcik7XG4gIH1cbiAgY29uc3QgcmVkZWVtcyA9IGtleUNvbWJpbmF0aW9uczJvZjIubWFwKChwdWJrZXlzLCBpbmRleCkgPT5cbiAgICBwMnRyUGF5bWVudHMucDJ0cl9ucyhcbiAgICAgIHtcbiAgICAgICAgcHVia2V5cyxcbiAgICAgICAgZGVwdGg6IHNjcmlwdFR5cGUgPT09ICdwMnRyTXVzaWcyJyB8fCBpbmRleCA9PT0gMCA/IDEgOiAyLFxuICAgICAgfSxcbiAgICAgIHsgZWNjTGliIH1cbiAgICApXG4gICk7XG5cbiAgcmV0dXJuIHAydHJQYXltZW50cy5wMnRyKFxuICAgIHtcbiAgICAgIHB1YmtleXM6IGdldEtleVBhdGhDb21iaW5hdGlvbihzY3JpcHRUeXBlLCBwdWJrZXlzKSxcbiAgICAgIHJlZGVlbXMsXG4gICAgICByZWRlZW1JbmRleCxcbiAgICB9LFxuICAgIHsgZWNjTGliIH1cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBheW1lbnRQMnRyKFxuICBwdWJrZXlzOiBUcmlwbGU8QnVmZmVyPixcbiAgcmVkZWVtSW5kZXg/OiBudW1iZXIgfCB7IHNpZ25lcjogQnVmZmVyOyBjb3NpZ25lcjogQnVmZmVyIH1cbik6IGJpdGNvaW5qcy5QYXltZW50IHtcbiAgcmV0dXJuIGNyZWF0ZVBheW1lbnRQMnRyQ29tbW9uKCdwMnRyJywgcHVia2V5cywgcmVkZWVtSW5kZXgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGF5bWVudFAydHJNdXNpZzIoXG4gIHB1YmtleXM6IFRyaXBsZTxCdWZmZXI+LFxuICByZWRlZW1JbmRleD86IG51bWJlciB8IHsgc2lnbmVyOiBCdWZmZXI7IGNvc2lnbmVyOiBCdWZmZXIgfVxuKTogYml0Y29pbmpzLlBheW1lbnQge1xuICByZXR1cm4gY3JlYXRlUGF5bWVudFAydHJDb21tb24oJ3AydHJNdXNpZzInLCBwdWJrZXlzLCByZWRlZW1JbmRleCk7XG59XG5cbmZ1bmN0aW9uIGdldExlYWZIYXNoQ29tbW9uKFxuICBzY3JpcHRUeXBlOiAncDJ0cicgfCAncDJ0ck11c2lnMicsXG4gIHBhcmFtczogYml0Y29pbmpzLlBheW1lbnQgfCB7IHB1YmxpY0tleXM6IFRyaXBsZTxCdWZmZXI+OyBzaWduZXI6IEJ1ZmZlcjsgY29zaWduZXI6IEJ1ZmZlciB9XG4pOiBCdWZmZXIge1xuICBpZiAoJ3B1YmxpY0tleXMnIGluIHBhcmFtcykge1xuICAgIHBhcmFtcyA9IGNyZWF0ZVBheW1lbnRQMnRyQ29tbW9uKHNjcmlwdFR5cGUsIHBhcmFtcy5wdWJsaWNLZXlzLCBwYXJhbXMpO1xuICB9XG4gIGNvbnN0IHsgb3V0cHV0LCBjb250cm9sQmxvY2ssIHJlZGVlbSB9ID0gcGFyYW1zO1xuICBpZiAoIW91dHB1dCB8fCAhY29udHJvbEJsb2NrIHx8ICFyZWRlZW0gfHwgIXJlZGVlbS5vdXRwdXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgc3RhdGVgKTtcbiAgfVxuICByZXR1cm4gdGFwcm9vdC5nZXRUYXBsZWFmSGFzaChlY2NMaWIsIGNvbnRyb2xCbG9jaywgcmVkZWVtLm91dHB1dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMZWFmSGFzaChcbiAgcGFyYW1zOiBiaXRjb2luanMuUGF5bWVudCB8IHsgcHVibGljS2V5czogVHJpcGxlPEJ1ZmZlcj47IHNpZ25lcjogQnVmZmVyOyBjb3NpZ25lcjogQnVmZmVyIH1cbik6IEJ1ZmZlciB7XG4gIHJldHVybiBnZXRMZWFmSGFzaENvbW1vbigncDJ0cicsIHBhcmFtcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVLZXlQYXRoUDJ0ck11c2lnMihwdWJrZXlzOiBUcmlwbGU8QnVmZmVyPik6IEtleVBhdGhQMnRyTXVzaWcyIHtcbiAgY29uc3QgcGF5bWVudCA9IGNyZWF0ZVBheW1lbnRQMnRyQ29tbW9uKCdwMnRyTXVzaWcyJywgcHVia2V5cyk7XG4gIGFzc2VydChwYXltZW50LmludGVybmFsUHVia2V5KTtcbiAgYXNzZXJ0KHBheW1lbnQudGFwVHJlZSk7XG4gIHJldHVybiB7XG4gICAgaW50ZXJuYWxQdWJrZXk6IHBheW1lbnQuaW50ZXJuYWxQdWJrZXksXG4gICAgb3V0cHV0UHVia2V5OiBnZXRUd2Vha2VkT3V0cHV0S2V5KHBheW1lbnQpLFxuICAgIHRhcHRyZWVSb290OiBnZXREZXB0aEZpcnN0VGFwdHJlZShwYXltZW50LnRhcFRyZWUpLnJvb3QsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNwZW5kU2NyaXB0UDJ0ckNvbW1vbihcbiAgc2NyaXB0VHlwZTogJ3AydHInIHwgJ3AydHJNdXNpZzInLFxuICBwdWJrZXlzOiBUcmlwbGU8QnVmZmVyPixcbiAga2V5Q29tYmluYXRpb246IFR1cGxlPEJ1ZmZlcj5cbik6IFNwZW5kU2NyaXB0UDJ0ciB7XG4gIGNvbnN0IGtleUNvbWJpbmF0aW9ucyA9IGdldFRhcHRyZWVLZXlDb21iaW5hdGlvbnMoc2NyaXB0VHlwZSwgcHVia2V5cyk7XG4gIGNvbnN0IFthLCBiXSA9IGtleUNvbWJpbmF0aW9uLm1hcCgoaykgPT4gdG9YT25seVB1YmxpY0tleShrKSk7XG4gIGNvbnN0IHJlZGVlbUluZGV4ID0ga2V5Q29tYmluYXRpb25zLmZpbmRJbmRleChcbiAgICAoW2MsIGRdKSA9PiAoYS5lcXVhbHMoYykgJiYgYi5lcXVhbHMoZCkpIHx8IChhLmVxdWFscyhkKSAmJiBiLmVxdWFscyhjKSlcbiAgKTtcblxuICBpZiAocmVkZWVtSW5kZXggPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBjb3VsZCBub3QgZmluZCByZWRlZW1JbmRleCBmb3Iga2V5IGNvbWJpbmF0aW9uYCk7XG4gIH1cblxuICBjb25zdCBwYXltZW50ID0gY3JlYXRlUGF5bWVudFAydHJDb21tb24oc2NyaXB0VHlwZSwgcHVia2V5cywgcmVkZWVtSW5kZXgpO1xuICBjb25zdCB7IGNvbnRyb2xCbG9jayB9ID0gcGF5bWVudDtcbiAgYXNzZXJ0KEJ1ZmZlci5pc0J1ZmZlcihjb250cm9sQmxvY2spKTtcblxuICBhc3NlcnQocGF5bWVudC5yZWRlZW0pO1xuICBjb25zdCBsZWFmU2NyaXB0ID0gcGF5bWVudC5yZWRlZW0ub3V0cHV0O1xuICBhc3NlcnQoQnVmZmVyLmlzQnVmZmVyKGxlYWZTY3JpcHQpKTtcblxuICBjb25zdCBwYXJzZWRDb250cm9sQmxvY2sgPSB0YXByb290LnBhcnNlQ29udHJvbEJsb2NrKGVjY0xpYiwgY29udHJvbEJsb2NrKTtcbiAgY29uc3QgeyBsZWFmVmVyc2lvbiB9ID0gcGFyc2VkQ29udHJvbEJsb2NrO1xuICBjb25zdCBsZWFmSGFzaCA9IHRhcHJvb3QuZ2V0VGFwbGVhZkhhc2goZWNjTGliLCBwYXJzZWRDb250cm9sQmxvY2ssIGxlYWZTY3JpcHQpO1xuXG4gIHJldHVybiB7XG4gICAgY29udHJvbEJsb2NrLFxuICAgIHdpdG5lc3NTY3JpcHQ6IGxlYWZTY3JpcHQsXG4gICAgbGVhZlZlcnNpb24sXG4gICAgbGVhZkhhc2gsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTcGVuZFNjcmlwdFAydHIocHVia2V5czogVHJpcGxlPEJ1ZmZlcj4sIGtleUNvbWJpbmF0aW9uOiBUdXBsZTxCdWZmZXI+KTogU3BlbmRTY3JpcHRQMnRyIHtcbiAgcmV0dXJuIGNyZWF0ZVNwZW5kU2NyaXB0UDJ0ckNvbW1vbigncDJ0cicsIHB1YmtleXMsIGtleUNvbWJpbmF0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNwZW5kU2NyaXB0UDJ0ck11c2lnMihwdWJrZXlzOiBUcmlwbGU8QnVmZmVyPiwga2V5Q29tYmluYXRpb246IFR1cGxlPEJ1ZmZlcj4pOiBTcGVuZFNjcmlwdFAydHIge1xuICByZXR1cm4gY3JlYXRlU3BlbmRTY3JpcHRQMnRyQ29tbW9uKCdwMnRyTXVzaWcyJywgcHVia2V5cywga2V5Q29tYmluYXRpb24pO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSB0YXByb290IG91dHB1dCBzY3JpcHQgdXNpbmcgdGhlIHVzZXIrYml0Z28ga2V5cyBmb3IgdGhlIGFnZ3JlZ2F0ZVxuICogcHVibGljIGtleSB1c2luZyBNdVNpZzIgYW5kIGEgdGFwdHJlZSBjb250YWluaW5nIGVpdGhlciBvZiB0aGUgZm9sbG93aW5nIGRlcGVuZHMgb24gc2NyaXB0VHlwZS5cbiAqIHAydHIgdHlwZTogYSB1c2VyK2JpdGdvIDItb2YtMiBzY3JpcHQgYXQgdGhlIGZpcnN0IGRlcHRoIGxldmVsIG9mIHRoZSB0cmVlIGFuZCB1c2VyK2JhY2t1cFxuICogYW5kIGJpdGdvK2JhY2t1cCAyLW9mLTIgc2NyaXB0cyBvbmUgbGV2ZWwgZGVlcGVyLlxuICogcDJ0ck11c2lnMiB0eXBlOiB1c2VyK2JhY2t1cCBhbmQgYml0Z28rYmFja3VwIDItb2YtMiBzY3JpcHRzIGF0IHRoZSBmaXJzdCBkZXB0aCBsZXZlbCBvZiB0aGVcbiAqIHRyZWUuXG4gKiBAcGFyYW0gcHVia2V5cyAtIGEgcHVia2V5IGFycmF5IGNvbnRhaW5pbmcgdGhlIHVzZXIga2V5LCBiYWNrdXAga2V5LCBhbmQgYml0Z28ga2V5IGluIHRoYXQgb3JkZXJcbiAqIEByZXR1cm5zIHt7c2NyaXB0UHViS2V5fX1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlVGFwcm9vdFNjcmlwdDJvZjMoc2NyaXB0VHlwZTogJ3AydHInIHwgJ3AydHJNdXNpZzInLCBwdWJrZXlzOiBUcmlwbGU8QnVmZmVyPik6IFNwZW5kYWJsZVNjcmlwdCB7XG4gIGNvbnN0IHsgb3V0cHV0IH0gPSBjcmVhdGVQYXltZW50UDJ0ckNvbW1vbihzY3JpcHRUeXBlLCBwdWJrZXlzKTtcbiAgYXNzZXJ0KEJ1ZmZlci5pc0J1ZmZlcihvdXRwdXQpKTtcbiAgcmV0dXJuIHtcbiAgICBzY3JpcHRQdWJLZXk6IG91dHB1dCxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -90,7 +90,7 @@ function matchScript(script, pattern) {
|
|
|
90
90
|
case 'OP_CHECKSIGVERIFY':
|
|
91
91
|
return e === opcodes[p];
|
|
92
92
|
case ':pubkey':
|
|
93
|
-
return Buffer.isBuffer(e) && e.length === 33;
|
|
93
|
+
return Buffer.isBuffer(e) && (e.length === 33 || e.length === 65);
|
|
94
94
|
case ':pubkey-xonly':
|
|
95
95
|
return Buffer.isBuffer(e) && e.length === 32;
|
|
96
96
|
case ':signature':
|
|
@@ -425,4 +425,4 @@ function parsePubScript(inputPubScript, scriptType) {
|
|
|
425
425
|
return result;
|
|
426
426
|
}
|
|
427
427
|
exports.parsePubScript = parsePubScript;
|
|
428
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VJbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iaXRnby9wYXJzZUlucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDRCQUE0QjtBQUM1Qix1Q0FBdUM7QUFDdkMsaURBQTJEO0FBRTNELG1DQUFtQztBQUNuQyxtREFBbUQ7QUFFbkQsU0FBZ0Isc0JBQXNCLENBQUMsQ0FBa0I7SUFDdkQsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3RCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7S0FDdkI7SUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakIsQ0FBQztBQUxELHdEQUtDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxZQUFvQjtJQUNyRCxzRkFBc0Y7SUFDdEYsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxZQUFZLENBQUMsTUFBTSxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN0RyxDQUFDO0FBSEQsZ0RBR0M7QUFFRDs7R0FFRztBQUNILFNBQWdCLHdCQUF3QixDQUFDLFlBQW9CO0lBQzNELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFO1FBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztLQUNoRDtJQUNELElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUU7UUFDOUIsT0FBTyxDQUFDLENBQUM7S0FDVjtJQUNELElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUU7UUFDOUIsT0FBTyxDQUFDLENBQUM7S0FDVjtJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBWEQsNERBV0M7QUFFRDs7R0FFRztBQUNILFNBQWdCLGNBQWMsQ0FBQyxZQUFvQjtJQUNqRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDNUQsT0FBTyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0tBQy9CO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFMRCx3Q0FLQztBQWtJRCxTQUFTLGdCQUFnQjtJQUN2QixPQUFPO1FBQ0wsU0FBUyxFQUFFLEVBQUU7UUFDYixlQUFlLEVBQUUsRUFBRTtRQUNuQixnQkFBZ0IsRUFBRSxFQUFFO1FBQ3BCLFlBQVksRUFBRSxFQUFFO1FBQ2hCLFNBQVMsRUFBRSxFQUFFO0tBQ2QsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVcsU0FBUSxLQUFLO0lBRzVCLFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFIakIsdUdBQXVHO1FBQ3ZHLFdBQU0sR0FBRyxZQUFZLENBQUM7SUFHdEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUF1QjtRQUM5QyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxTQUFTLElBQUksQ0FBQyxFQUFFO1lBQzNDLE9BQU8sSUFBSSxVQUFVLENBQUMsOEJBQThCLENBQUMsQ0FBQztTQUN2RDtRQUNELE9BQU8sSUFBSSxVQUFVLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0MsQ0FBQztDQUNGO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsV0FBVyxDQUFDLE1BQXdCLEVBQUUsT0FBK0I7SUFDNUU7O09BRUc7SUFDSCxTQUFTLFlBQVksQ0FBQyxDQUFrQixFQUFFLENBQXVCO1FBQy9ELFFBQVEsQ0FBQyxFQUFFO1lBQ1QsS0FBSyxNQUFNO2dCQUNULE9BQU8sQ0FBQyxLQUFLLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDdEUsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLE1BQU0sQ0FBQztZQUNaLEtBQUssTUFBTSxDQUFDO1lBQ1osS0FBSyxrQkFBa0IsQ0FBQztZQUN4QixLQUFLLGFBQWEsQ0FBQztZQUNuQixLQUFLLG1CQUFtQjtnQkFDdEIsT0FBTyxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLEtBQUssU0FBUztnQkFDWixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxFQUFFLENBQUM7WUFDL0MsS0FBSyxlQUFlO2dCQUNsQixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxFQUFFLENBQUM7WUFDL0MsS0FBSyxZQUFZO2dCQUNmLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RCxLQUFLLGdCQUFnQjtnQkFDbkIsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JEO2dCQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDbkQ7SUFDSCxDQUFDO0lBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLE9BQU8sQ0FBQyxNQUFNLEVBQUU7UUFDcEMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0tBQzFDO0lBRUQsZ0NBQWdDO0lBQ2hDLHlDQUF5QztJQUN6QyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUE2QixFQUFFLENBQUMsRUFBRSxDQUFDLEVBQTRCLEVBQUU7UUFDdEYsK0NBQStDO1FBQy9DLElBQUksR0FBRyxZQUFZLFVBQVUsRUFBRTtZQUM3QixPQUFPLEdBQUcsQ0FBQztTQUNaO1FBRUQsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXBCLHVFQUF1RTtRQUN2RSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxTQUFTLElBQUksQ0FBQyxFQUFFO1lBQzNDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN2QixPQUFPLElBQUksVUFBVSxDQUFDLDZCQUE2QixDQUFDLENBQUM7YUFDdEQ7WUFDRCxNQUFNLEdBQUcsR0FBRyxzQkFBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNSLE9BQU8sSUFBSSxVQUFVLENBQUMsaUNBQWlDLENBQUMsQ0FBQzthQUMxRDtZQUNELE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDN0MsSUFBSSxLQUFLLFlBQVksVUFBVSxFQUFFO2dCQUMvQixPQUFPLEtBQUssQ0FBQzthQUNkO1lBQ0QsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDbEIsTUFBTSxFQUFFLENBQUM7Z0JBQ1QsS0FBSzthQUNOLENBQUMsQ0FBQztZQUNILE9BQU8sR0FBRyxDQUFDO1NBQ1o7UUFFRCxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixPQUFPLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QztRQUVELDREQUE0RDtRQUM1RCxJQUFJLENBQUMsS0FBSyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hCO2FBQU0sSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFO1lBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7YUFDMUM7WUFDRCxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hCO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxlQUFlLENBQUMsTUFBd0IsRUFBRSxRQUFrQztJQUNuRixLQUFLLE1BQU0sQ0FBQyxJQUFJLFFBQVEsRUFBRTtRQUN4QixNQUFNLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxZQUFZLFVBQVUsRUFBRTtZQUMzQixTQUFTO1NBQ1Y7UUFDRCxPQUFPLENBQUMsQ0FBQztLQUNWO0lBQ0QsT0FBTyxJQUFJLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUF3QkQsU0FBUyxRQUFRLENBQUMsQ0FBc0I7SUFDdEMsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsQ0FBc0I7SUFDN0MsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLENBQXNCO0lBQzVDLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUVELE1BQU0sYUFBYSxHQUErQyxDQUFDLENBQUMsRUFBRSxFQUFFO0lBQ3RFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDaEIsT0FBTyxJQUFJLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0tBQ2hEO0lBQ0QsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0YsSUFBSSxLQUFLLFlBQVksVUFBVSxFQUFFO1FBQy9CLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxPQUFPO1FBQ0wsVUFBVSxFQUFFLFVBQVU7UUFDdEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFhO1FBQzVELFVBQVUsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFhO0tBQzVDLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixTQUFTLFNBQVMsQ0FDaEIsU0FBMkIsRUFDM0IsVUFBMEM7SUFFMUMsTUFBTSxXQUFXLEdBQTJCLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBRWxILE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxTQUFTLEVBQUU7UUFDdkMsMkNBQTJDO1FBQzNDLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDaEUseUNBQXlDO1FBQ3pDLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxDQUFDO0tBQy9FLENBQUMsQ0FBQztJQUNILElBQUksS0FBSyxZQUFZLFVBQVUsRUFBRTtRQUMvQixPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUV4QyxJQUFJLENBQUMsZ0JBQVEsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUU7UUFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0tBQ3pDO0lBRUQsT0FBTztRQUNMLFVBQVU7UUFDVixVQUFVLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDekMsU0FBUyxFQUFFLFlBQVksQ0FBQyxNQUFNO1FBQzlCLFVBQVUsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUE0QztRQUMxRSxZQUFZLEVBQUUsVUFBVSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUztRQUNyRSxhQUFhLEVBQUUsVUFBVSxLQUFLLFdBQVcsSUFBSSxVQUFVLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTO0tBQ3RHLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxhQUFhLEdBQTJDLENBQUMsQ0FBQyxFQUFFLEVBQUU7SUFDbEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNoQixPQUFPLElBQUksVUFBVSxDQUFDLHVCQUF1QixDQUFDLENBQUM7S0FDaEQ7SUFDRCxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3JDLENBQUMsQ0FBQztBQUVGLE1BQU0sa0JBQWtCLEdBQTJDLENBQUMsQ0FBQyxFQUFFLEVBQUU7SUFDdkUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUN2QixPQUFPLElBQUksVUFBVSxDQUFDLCtCQUErQixDQUFDLENBQUM7S0FDeEQ7SUFDRCxPQUFPLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQVcsRUFBRSxDQUFDO0FBQ3ZGLENBQUMsQ0FBQztBQUVGLE1BQU0sY0FBYyxHQUEyQyxDQUFDLENBQUMsRUFBRSxFQUFFO0lBQ25FLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDdEIsT0FBTyxJQUFJLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0tBQ2pEO0lBQ0QsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN2QyxDQUFDLENBQUM7QUFFRixNQUFNLHVCQUF1QixHQUFxRCxDQUFDLENBQUMsRUFBRSxFQUFFO0lBQ3RGLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDdEIsT0FBTyxJQUFJLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0tBQ2pEO0lBQ0QsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ3JELElBQUksS0FBSyxZQUFZLFVBQVUsRUFBRTtRQUMvQixPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBYSxDQUFDO0lBQ25ELElBQUksc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDekMsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO0tBQ3ZEO0lBQ0QsT0FBTztRQUNMLFVBQVUsRUFBRSxxQkFBcUI7UUFDakMsVUFBVTtLQUNYLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLDBCQUEwQixHQUE4QyxDQUFDLENBQUMsRUFBRSxFQUFFO0lBQ2xGLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDdEIsT0FBTyxJQUFJLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0tBQ2pEO0lBQ0QsbUJBQW1CO0lBQ25CLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFO1FBQ25DLFlBQVk7UUFDWixZQUFZO1FBQ1osRUFBRSxTQUFTLEVBQUUsQ0FBQyxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLGFBQWEsQ0FBQyxFQUFFO1FBQ3JGLGdCQUFnQjtLQUNqQixDQUFDLENBQUM7SUFDSCxJQUFJLEtBQUssWUFBWSxVQUFVLEVBQUU7UUFDL0IsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMvQyxNQUFNLGVBQWUsR0FBRyx3QkFBd0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUUvRCxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFakQsT0FBTztRQUNMLFVBQVUsRUFBRSx3QkFBd0I7UUFDcEMsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO1FBQ3JDLFVBQVUsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBcUI7UUFDMUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQXFCO1FBQ25ELFlBQVk7UUFDWixlQUFlO1FBQ2YsV0FBVztLQUNaLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLG9CQUFvQixDQUNsQyxLQUFjO0lBRWQsTUFBTSxTQUFTLEdBQUcsc0JBQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELE1BQU0sT0FBTyxHQUFHO1FBQ2QsYUFBYTtRQUNiLGtCQUFrQjtRQUNsQixjQUFjO1FBQ2QsdUJBQXVCO1FBQ3ZCLDBCQUEwQjtRQUMxQixhQUFhO0tBQ0wsQ0FBQztJQUNYLEtBQUssTUFBTSxDQUFDLElBQUksT0FBTyxFQUFFO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNmLE1BQU0sRUFBRSxDQUFBLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxNQUFNLE1BQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDbEQsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTztTQUMzRCxDQUFDLENBQUM7UUFDSCxJQUFJLE1BQU0sWUFBWSxVQUFVLEVBQUU7WUFDaEMsU0FBUztTQUNWO1FBQ0QsT0FBTyxNQUFNLENBQUM7S0FDZjtJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBdkJELG9EQXVCQztBQUVELFNBQWdCLHdCQUF3QixDQUFDLEtBQWM7SUFDckQsTUFBTSxNQUFNLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFM0MsSUFDRSxDQUFDLGdDQUFnQixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDcEMsTUFBTSxDQUFDLFVBQVUsS0FBSyxxQkFBcUI7UUFDM0MsTUFBTSxDQUFDLFVBQVUsS0FBSyx3QkFBd0IsRUFDOUM7UUFDQSxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7S0FDeEM7SUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtRQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7S0FDdkM7SUFDRCxJQUNFLE1BQU0sQ0FBQyxVQUFVLEtBQUsscUJBQXFCO1FBQzNDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUM7UUFDOUIsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyx3QkFBd0IsQ0FBQyxFQUNsRjtRQUNBLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztLQUM1QztJQUVELE9BQU8sTUFBa0UsQ0FBQztBQUM1RSxDQUFDO0FBdkJELDREQXVCQztBQUVELE1BQU0sc0JBQXNCLEdBQTZDLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxFQUFFO0lBQ2pHLElBQUksVUFBVSxLQUFLLFVBQVUsRUFBRTtRQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7S0FDeEM7SUFDRCxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLElBQUksS0FBSyxZQUFZLFVBQVUsRUFBRTtRQUMvQixPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsQyxPQUFPO1FBQ0wsVUFBVTtRQUNWLFVBQVUsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBYTtRQUMvQyxTQUFTLEVBQUUsU0FBUztRQUNwQixZQUFZLEVBQUUsU0FBUztLQUN4QixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxrQkFBa0IsR0FBeUMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLEVBQUU7SUFDekYsSUFBSSxVQUFVLEtBQUssd0JBQXdCLElBQUksVUFBVSxLQUFLLHFCQUFxQixJQUFJLFVBQVUsS0FBSyxVQUFVLEVBQUU7UUFDaEgsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0tBQ3hDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUN2QixDQUFDLFNBQVMsQ0FBQyxFQUNYLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUN2RixDQUFDO0lBQ0YsSUFBSSxLQUFLLFlBQVksVUFBVSxFQUFFO1FBQy9CLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRXhDLElBQUksQ0FBQyxnQkFBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRTtRQUM1QyxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7S0FDekM7SUFFRCxPQUFPO1FBQ0wsVUFBVTtRQUNWLFVBQVUsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUN6QyxTQUFTLEVBQUUsWUFBWSxDQUFDLE1BQU07UUFDOUIsWUFBWSxFQUFFLFVBQVUsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDckUsYUFBYSxFQUFFLFVBQVUsS0FBSyxXQUFXLElBQUksVUFBVSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUztLQUN0RyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSw0QkFBNEIsR0FBbUQsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLEVBQUU7SUFDN0csSUFDRSxVQUFVLEtBQUssTUFBTTtRQUNyQixVQUFVLEtBQUssT0FBTztRQUN0QixVQUFVLEtBQUssV0FBVztRQUMxQixVQUFVLEtBQUssd0JBQXdCO1FBQ3ZDLFVBQVUsS0FBSyxVQUFVLEVBQ3pCO1FBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0tBQ3hDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRixJQUFJLEtBQUssWUFBWSxVQUFVLEVBQUU7UUFDL0IsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFbEMsT0FBTztRQUNMLFVBQVUsRUFBRSxxQkFBcUI7UUFDakMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFhO1FBQ3JELFNBQVMsRUFBRSxTQUFTO0tBQ3JCLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLCtCQUErQixHQUFzRCxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsRUFBRTtJQUNuSCxJQUNFLFVBQVUsS0FBSyxNQUFNO1FBQ3JCLFVBQVUsS0FBSyxPQUFPO1FBQ3RCLFVBQVUsS0FBSyxXQUFXO1FBQzFCLFVBQVUsS0FBSyxxQkFBcUI7UUFDcEMsVUFBVSxLQUFLLFVBQVUsRUFDekI7UUFDQSxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7S0FDeEM7SUFDRCxNQUFNLEtBQUssR0FBRyxXQUFXLENBQ3ZCLENBQUMsU0FBUyxDQUFDLEVBQ1gsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUN4RixDQUFDO0lBQ0YsSUFBSSxLQUFLLFlBQVksVUFBVSxFQUFFO1FBQy9CLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCxPQUFPO1FBQ0wsVUFBVTtRQUNWLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtRQUNyQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQXFCO0tBQzNFLENBQUM7QUFDSixDQUFDLENBQUM7QUEwQkYsU0FBZ0Isa0JBQWtCLENBQ2hDLGNBQThCLEVBQzlCLFVBQWdDO0lBRWhDLE1BQU0sTUFBTSxHQUNWLFVBQVUsS0FBSyxxQkFBcUI7UUFDbEMsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUM7UUFDMUQsQ0FBQyxDQUFDLFVBQVUsS0FBSyx3QkFBd0I7WUFDekMsQ0FBQyxDQUFDLCtCQUErQixDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUM7WUFDN0QsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUVyRCxJQUFJLE1BQU0sWUFBWSxVQUFVLEVBQUU7UUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDakM7SUFFRCxJQUNFLENBQUMsTUFBTSxDQUFDLFVBQVUsS0FBSyxxQkFBcUIsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7UUFDL0UsQ0FBQyxNQUFNLENBQUMsVUFBVSxLQUFLLHdCQUF3QixJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztRQUNsRixDQUFDLGdDQUFnQixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFDdkU7UUFDQSxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7S0FDNUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBeEJELGdEQXdCQztBQTRCRCxTQUFnQixjQUFjLENBQzVCLGNBQThCLEVBQzlCLFVBQTRCO0lBRTVCLE1BQU0sTUFBTSxHQUNWLFVBQVUsS0FBSyxVQUFVO1FBQ3ZCLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDO1FBQ3BELENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFFckQsSUFBSSxNQUFNLFlBQVksVUFBVSxFQUFFO1FBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ2pDO0lBRUQsSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLFVBQVUsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDdEUsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0tBQzVDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQWxCRCx3Q0FrQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQgbm8tcmVkZWNsYXJlOiAwICovXG5pbXBvcnQgKiBhcyBvcGNvZGVzIGZyb20gJ2JpdGNvaW4tb3BzJztcbmltcG9ydCB7IFR4SW5wdXQsIHNjcmlwdCBhcyBic2NyaXB0IH0gZnJvbSAnYml0Y29pbmpzLWxpYic7XG5cbmltcG9ydCB7IGlzVHJpcGxlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBpc1NjcmlwdFR5cGUyT2YzIH0gZnJvbSAnLi9vdXRwdXRTY3JpcHRzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGxhY2Vob2xkZXJTaWduYXR1cmUodjogbnVtYmVyIHwgQnVmZmVyKTogYm9vbGVhbiB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIodikpIHtcbiAgICByZXR1cm4gdi5sZW5ndGggPT09IDA7XG4gIH1cbiAgcmV0dXJuIHYgPT09IDA7XG59XG5cbi8qKlxuICogQHJldHVybiB0cnVlIGlmZiBQMlRSIHNjcmlwdCBwYXRoJ3MgY29udHJvbCBibG9jayBtYXRjaGVzIEJpdEdvJ3MgbmVlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZENvbnRyb2xCb2NrKGNvbnRyb2xCbG9jazogQnVmZmVyKTogYm9vbGVhbiB7XG4gIC8vIFRoZSBsYXN0IHN0YWNrIGVsZW1lbnQgaXMgY2FsbGVkIHRoZSBjb250cm9sIGJsb2NrIGMsIGFuZCBtdXN0IGhhdmUgbGVuZ3RoIDMzICsgMzJtXG4gIHJldHVybiBCdWZmZXIuaXNCdWZmZXIoY29udHJvbEJsb2NrKSAmJiAzMyA8PSBjb250cm9sQmxvY2subGVuZ3RoICYmIGNvbnRyb2xCbG9jay5sZW5ndGggJSAzMiA9PT0gMTtcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHNjcmlwdCBwYXRoIGxldmVsIGZvciBQMlRSIGNvbnRyb2wgYmxvY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZVNjcmlwdFBhdGhMZXZlbChjb250cm9sQmxvY2s6IEJ1ZmZlcik6IG51bWJlciB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGNvbnRyb2xCbG9jaykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29udHJvbCBibG9jayB0eXBlLicpO1xuICB9XG4gIGlmIChjb250cm9sQmxvY2subGVuZ3RoID09PSA2NSkge1xuICAgIHJldHVybiAxO1xuICB9XG4gIGlmIChjb250cm9sQmxvY2subGVuZ3RoID09PSA5Nykge1xuICAgIHJldHVybiAyO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCBjb250cm9sIGJsb2NrIGxlbmd0aC4nKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJuIGxlYWYgdmVyc2lvbiBmb3IgUDJUUiBjb250cm9sIGJsb2NrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGVhZlZlcnNpb24oY29udHJvbEJsb2NrOiBCdWZmZXIpOiBudW1iZXIge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGNvbnRyb2xCbG9jaykgJiYgY29udHJvbEJsb2NrLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gY29udHJvbEJsb2NrWzBdICYgMHhmZTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgbGVhZlZlcnNpb24uJyk7XG59XG5cbmV4cG9ydCB0eXBlIFBhcnNlZFNjcmlwdFR5cGUyT2YzID1cbiAgfCAncDJzaCdcbiAgfCAncDJzaFAyd3NoJ1xuICB8ICdwMndzaCdcbiAgfCAndGFwcm9vdEtleVBhdGhTcGVuZCcgLy8gb25seSBpbXBsZW1lbnRlZCBmb3IgcDJ0ck11c2lnMlxuICB8ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJzsgLy8gY2FuIGJlIGZvciBlaXRoZXIgcDJ0ciBvciBwMnRyTXVzaWcyIG91dHB1dCBzY3JpcHRcblxuZXhwb3J0IHR5cGUgUGFyc2VkU2NyaXB0VHlwZSA9IFBhcnNlZFNjcmlwdFR5cGUyT2YzIHwgJ3Ayc2hQMnBrJztcblxuZXhwb3J0IHR5cGUgUGFyc2VkUHViU2NyaXB0ID0ge1xuICBzY3JpcHRUeXBlOiBQYXJzZWRTY3JpcHRUeXBlO1xufTtcblxuZXhwb3J0IHR5cGUgUGFyc2VkU2lnbmF0dXJlU2NyaXB0ID0ge1xuICBzY3JpcHRUeXBlOiBQYXJzZWRTY3JpcHRUeXBlO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRTaWduYXR1cmVTY3JpcHRQMnNoUDJwayBleHRlbmRzIFBhcnNlZFNpZ25hdHVyZVNjcmlwdCB7XG4gIHNjcmlwdFR5cGU6ICdwMnNoUDJwayc7XG4gIHB1YmxpY0tleXM6IFtCdWZmZXJdO1xuICBzaWduYXR1cmVzOiBbQnVmZmVyXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRQdWJTY3JpcHRUYXByb290S2V5UGF0aCBleHRlbmRzIFBhcnNlZFB1YlNjcmlwdCB7XG4gIHNjcmlwdFR5cGU6ICd0YXByb290S2V5UGF0aFNwZW5kJztcbiAgLy8geC1vbmx5IHRhcE91dHB1dEtleVxuICBwdWJsaWNLZXlzOiBbQnVmZmVyXTtcbiAgcHViU2NyaXB0OiBCdWZmZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkUHViU2NyaXB0VGFwcm9vdFNjcmlwdFBhdGggZXh0ZW5kcyBQYXJzZWRQdWJTY3JpcHQge1xuICBzY3JpcHRUeXBlOiAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCc7XG4gIHB1YmxpY0tleXM6IFtCdWZmZXIsIEJ1ZmZlcl07XG4gIHB1YlNjcmlwdDogQnVmZmVyO1xufVxuXG5leHBvcnQgdHlwZSBQYXJzZWRQdWJTY3JpcHRUYXByb290ID0gUGFyc2VkUHViU2NyaXB0VGFwcm9vdEtleVBhdGggfCBQYXJzZWRQdWJTY3JpcHRUYXByb290U2NyaXB0UGF0aDtcblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRQdWJTY3JpcHRQMm1zIGV4dGVuZHMgUGFyc2VkUHViU2NyaXB0IHtcbiAgc2NyaXB0VHlwZTogJ3Ayc2gnIHwgJ3Ayc2hQMndzaCcgfCAncDJ3c2gnO1xuICBwdWJsaWNLZXlzOiBbQnVmZmVyLCBCdWZmZXIsIEJ1ZmZlcl07XG4gIHB1YlNjcmlwdDogQnVmZmVyO1xuICByZWRlZW1TY3JpcHQ6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbiAgd2l0bmVzc1NjcmlwdDogQnVmZmVyIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFB1YlNjcmlwdFAyc2hQMnBrIGV4dGVuZHMgUGFyc2VkUHViU2NyaXB0IHtcbiAgc2NyaXB0VHlwZTogJ3Ayc2hQMnBrJztcbiAgcHVibGljS2V5czogW0J1ZmZlcl07XG4gIHB1YlNjcmlwdDogQnVmZmVyO1xuICByZWRlZW1TY3JpcHQ6IEJ1ZmZlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRTaWduYXR1cmVTY3JpcHRQMm1zIGV4dGVuZHMgUGFyc2VkU2lnbmF0dXJlU2NyaXB0IHtcbiAgc2NyaXB0VHlwZTogJ3Ayc2gnIHwgJ3Ayc2hQMndzaCcgfCAncDJ3c2gnO1xuICBwdWJsaWNLZXlzOiBbQnVmZmVyLCBCdWZmZXIsIEJ1ZmZlcl07XG4gIHNpZ25hdHVyZXM6XG4gICAgfCBbQnVmZmVyLCBCdWZmZXJdIC8vIGZ1bGx5LXNpZ25lZCB0cmFuc2FjdGlvbnMgd2l0aCBzaWduYXR1cmVzXG4gICAgLyogUGFydGlhbGx5IHNpZ25lZCB0cmFuc2FjdGlvbnMgd2l0aCBwbGFjZWhvbGRlciBzaWduYXR1cmVzLlxuICAgICAgIEZvciBwMnNoLCB0aGUgcGxhY2Vob2xkZXIgaXMgT1BfMCAobnVtYmVyIDApICovXG4gICAgfCBbQnVmZmVyIHwgMCwgQnVmZmVyIHwgMCwgQnVmZmVyIHwgMF07XG4gIHB1YlNjcmlwdDogQnVmZmVyO1xuICByZWRlZW1TY3JpcHQ6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbiAgd2l0bmVzc1NjcmlwdDogQnVmZmVyIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEtleXBhdGggc3BlbmRzIG9ubHkgaGF2ZSBhIHNpbmdsZSBzaWduYXR1cmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290S2V5UGF0aCBleHRlbmRzIFBhcnNlZFNpZ25hdHVyZVNjcmlwdCB7XG4gIHNjcmlwdFR5cGU6ICd0YXByb290S2V5UGF0aFNwZW5kJztcbiAgc2lnbmF0dXJlczogW0J1ZmZlcl07XG59XG5cbi8qKlxuICogVGFwcm9vdCBTY3JpcHRwYXRoIHNwZW5kcyBhcmUgbW9yZSBzaW1pbGFyIHRvIHJlZ3VsYXIgcDJtcyBzcGVuZHMgYW5kIGhhdmUgdHdvIHB1YmxpYyBrZXlzIGFuZFxuICogdHdvIHNpZ25hdHVyZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290U2NyaXB0UGF0aCBleHRlbmRzIFBhcnNlZFNpZ25hdHVyZVNjcmlwdCB7XG4gIHNjcmlwdFR5cGU6ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJztcbiAgcHVibGljS2V5czogW0J1ZmZlciwgQnVmZmVyXTtcbiAgc2lnbmF0dXJlczogW0J1ZmZlciwgQnVmZmVyXTtcbiAgY29udHJvbEJsb2NrOiBCdWZmZXI7XG4gIGxlYWZWZXJzaW9uOiBudW1iZXI7XG4gIC8qKiBJbmRpY2F0ZXMgdGhlIGxldmVsIGluc2lkZSB0aGUgdGFwdHJlZS4gKi9cbiAgc2NyaXB0UGF0aExldmVsOiBudW1iZXI7XG4gIHB1YlNjcmlwdDogQnVmZmVyO1xufVxuXG5leHBvcnQgdHlwZSBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290ID0gUGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdEtleVBhdGggfCBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290U2NyaXB0UGF0aDtcblxudHlwZSBEZWNvbXBpbGVkU2NyaXB0ID0gQXJyYXk8QnVmZmVyIHwgbnVtYmVyPjtcblxuLyoqXG4gKiBTdGF0aWMgc2NyaXB0IGVsZW1lbnRzXG4gKi9cbnR5cGUgU2NyaXB0UGF0dGVybkNvbnN0YW50ID1cbiAgfCAnT1BfMCdcbiAgfCAnT1BfMSdcbiAgfCAnT1BfMidcbiAgfCAnT1BfMydcbiAgfCAnT1BfQ0hFQ0tNVUxUSVNJRydcbiAgfCAnT1BfQ0hFQ0tTSUcnXG4gIHwgJ09QX0NIRUNLU0lHVkVSSUZZJztcblxuLyoqXG4gKiBTY3JpcHQgZWxlbWVudHMgdGhhdCBjYW4gYmUgY2FwdHVyZWRcbiAqL1xudHlwZSBTY3JpcHRQYXR0ZXJuQ2FwdHVyZSA9XG4gIHwgJzpwdWJrZXknXG4gIHwgJzpwdWJrZXkteG9ubHknXG4gIHwgJzpzaWduYXR1cmUnXG4gIHwgJzpjb250cm9sLWJsb2NrJ1xuICB8IHsgJzpzY3JpcHQnOiBTY3JpcHRQYXR0ZXJuRWxlbWVudFtdIH07XG5cbnR5cGUgU2NyaXB0UGF0dGVybkVsZW1lbnQgPSBTY3JpcHRQYXR0ZXJuQ29uc3RhbnQgfCBTY3JpcHRQYXR0ZXJuQ2FwdHVyZTtcblxuLyoqXG4gKiBSZXN1bHQgZm9yIGEgc3VjY2Vzc2Z1bCBzY3JpcHQgbWF0Y2hcbiAqL1xudHlwZSBNYXRjaFJlc3VsdCA9IHtcbiAgJzpwdWJrZXknOiBCdWZmZXJbXTtcbiAgJzpwdWJrZXkteG9ubHknOiBCdWZmZXJbXTtcbiAgJzpjb250cm9sLWJsb2NrJzogQnVmZmVyW107XG4gICc6c2lnbmF0dXJlJzogKEJ1ZmZlciB8IDApW107XG4gICc6c2NyaXB0JzogeyBidWZmZXI6IEJ1ZmZlcjsgbWF0Y2g6IE1hdGNoUmVzdWx0IH1bXTtcbn07XG5cbmZ1bmN0aW9uIGVtcHR5TWF0Y2hSZXN1bHQoKTogTWF0Y2hSZXN1bHQge1xuICByZXR1cm4ge1xuICAgICc6cHVia2V5JzogW10sXG4gICAgJzpwdWJrZXkteG9ubHknOiBbXSxcbiAgICAnOmNvbnRyb2wtYmxvY2snOiBbXSxcbiAgICAnOnNpZ25hdHVyZSc6IFtdLFxuICAgICc6c2NyaXB0JzogW10sXG4gIH07XG59XG5cbmNsYXNzIE1hdGNoRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8vIHRoaXMgcHJvcGVydHkgaXMgcmVxdWlyZWQgdG8gcHJvaGliaXQgYHJldHVybiBuZXcgRXJyb3IoKWAgd2hlbiB0aGUgcmV0dXJuIHR5cGUgZGVtYW5kcyBgTWF0Y2hFcnJvcmBcbiAgX190eXBlID0gJ01hdGNoRXJyb3InO1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgfVxuXG4gIHN0YXRpYyBmb3JQYXR0ZXJuRWxlbWVudChwOiBTY3JpcHRQYXR0ZXJuRWxlbWVudCk6IE1hdGNoRXJyb3Ige1xuICAgIGlmICh0eXBlb2YgcCA9PT0gJ29iamVjdCcgJiYgJzpzY3JpcHQnIGluIHApIHtcbiAgICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgZXJyb3IgbWF0Y2hpbmcgbmVzdGVkIHNjcmlwdGApO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYGVycm9yIG1hdGNoaW5nICR7cH1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSBzY3JpcHRcbiAqIEBwYXJhbSBwYXR0ZXJuXG4gKiBAcmV0dXJuIE1hdGNoUmVzdWx0IGlmIHNjcmlwdCBtYXRjaGVzIHBhdHRlcm4uIFRoZSByZXN1bHQgd2lsbCBjb250YWluIHRoZSBtYXRjaGVkIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hTY3JpcHQoc2NyaXB0OiBEZWNvbXBpbGVkU2NyaXB0LCBwYXR0ZXJuOiBTY3JpcHRQYXR0ZXJuRWxlbWVudFtdKTogTWF0Y2hSZXN1bHQgfCBNYXRjaEVycm9yIHtcbiAgLyoqXG4gICAqIE1hdGNoIGEgc2luZ2xlIHNjcmlwdCBlbGVtZW50IHdpdGggYSBTY3JpcHRQYXR0ZXJuRWxlbWVudFxuICAgKi9cbiAgZnVuY3Rpb24gbWF0Y2hFbGVtZW50KGU6IEJ1ZmZlciB8IG51bWJlciwgcDogU2NyaXB0UGF0dGVybkVsZW1lbnQpOiBNYXRjaFJlc3VsdCB8IGJvb2xlYW4ge1xuICAgIHN3aXRjaCAocCkge1xuICAgICAgY2FzZSAnT1BfMCc6XG4gICAgICAgIHJldHVybiBlID09PSBvcGNvZGVzLk9QXzAgfHwgKEJ1ZmZlci5pc0J1ZmZlcihlKSAmJiBlLmxlbmd0aCA9PT0gMCk7XG4gICAgICBjYXNlICdPUF8xJzpcbiAgICAgIGNhc2UgJ09QXzInOlxuICAgICAgY2FzZSAnT1BfMyc6XG4gICAgICBjYXNlICdPUF9DSEVDS01VTFRJU0lHJzpcbiAgICAgIGNhc2UgJ09QX0NIRUNLU0lHJzpcbiAgICAgIGNhc2UgJ09QX0NIRUNLU0lHVkVSSUZZJzpcbiAgICAgICAgcmV0dXJuIGUgPT09IG9wY29kZXNbcF07XG4gICAgICBjYXNlICc6cHVia2V5JzpcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihlKSAmJiBlLmxlbmd0aCA9PT0gMzM7XG4gICAgICBjYXNlICc6cHVia2V5LXhvbmx5JzpcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihlKSAmJiBlLmxlbmd0aCA9PT0gMzI7XG4gICAgICBjYXNlICc6c2lnbmF0dXJlJzpcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihlKSB8fCBpc1BsYWNlaG9sZGVyU2lnbmF0dXJlKGUpO1xuICAgICAgY2FzZSAnOmNvbnRyb2wtYmxvY2snOlxuICAgICAgICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGUpICYmIGlzVmFsaWRDb250cm9sQm9jayhlKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBwYXR0ZXJuIGVsZW1lbnQgJHtwfWApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzY3JpcHQubGVuZ3RoICE9PSBwYXR0ZXJuLmxlbmd0aCkge1xuICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgbGVuZ3RoIG1pc21hdGNoYCk7XG4gIH1cblxuICAvLyBHbyBvdmVyIGVhY2ggcGF0dGVybiBlbGVtZW50LlxuICAvLyBDb2xsZWN0IGNhcHR1cmVzIGludG8gYSByZXN1bHQgb2JqZWN0LlxuICByZXR1cm4gcGF0dGVybi5yZWR1Y2UoKG9iajogTWF0Y2hSZXN1bHQgfCBNYXRjaEVycm9yLCBwLCBpKTogTWF0Y2hSZXN1bHQgfCBNYXRjaEVycm9yID0+IHtcbiAgICAvLyBpZiB3ZSBoYWQgYSBwcmV2aW91cyBtaXNtYXRjaCwgc2hvcnQtY2lyY3VpdFxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIGNvbnN0IGUgPSBzY3JpcHRbaV07XG5cbiAgICAvLyBmb3IgJzpzY3JpcHQnIHBhdHRlcm4gZWxlbWVudHMsIGRlY29tcGlsZSBzY3JpcHQgZWxlbWVudCBhbmQgcmVjdXJzZVxuICAgIGlmICh0eXBlb2YgcCA9PT0gJ29iamVjdCcgJiYgJzpzY3JpcHQnIGluIHApIHtcbiAgICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGUpKSB7XG4gICAgICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgZXhwZWN0ZWQgYnVmZmVyIGZvciA6c2NyaXB0YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBkZWMgPSBic2NyaXB0LmRlY29tcGlsZShlKTtcbiAgICAgIGlmICghZGVjKSB7XG4gICAgICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgZXJyb3IgZGVjb21waWxpbmcgbmVzdGVkIHNjcmlwdGApO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF0Y2ggPSBtYXRjaFNjcmlwdChkZWMsIHBbJzpzY3JpcHQnXSk7XG4gICAgICBpZiAobWF0Y2ggaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgIH1cbiAgICAgIG9ialsnOnNjcmlwdCddLnB1c2goe1xuICAgICAgICBidWZmZXI6IGUsXG4gICAgICAgIG1hdGNoLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoID0gbWF0Y2hFbGVtZW50KGUsIHApO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHJldHVybiBNYXRjaEVycm9yLmZvclBhdHRlcm5FbGVtZW50KHApO1xuICAgIH1cblxuICAgIC8vIGlmIHBhdHRlcm4gZWxlbWVudCBpcyBhIGNhcHR1cmUsIGFkZCBpdCB0byB0aGUgcmVzdWx0IG9ialxuICAgIGlmIChwID09PSAnOnNpZ25hdHVyZScgJiYgZSA9PT0gMCkge1xuICAgICAgb2JqW3BdLnB1c2goZSk7XG4gICAgfSBlbHNlIGlmIChwIGluIG9iaikge1xuICAgICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGNhcHR1cmUgdmFsdWVgKTtcbiAgICAgIH1cbiAgICAgIG9ialtwXS5wdXNoKGUpO1xuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG4gIH0sIGVtcHR5TWF0Y2hSZXN1bHQoKSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHNjcmlwdFxuICogQHBhcmFtIHBhdHRlcm5zXG4gKiBAcmV0dXJuIGZpcnN0IG1hdGNoXG4gKi9cbmZ1bmN0aW9uIG1hdGNoU2NyaXB0U29tZShzY3JpcHQ6IERlY29tcGlsZWRTY3JpcHQsIHBhdHRlcm5zOiBTY3JpcHRQYXR0ZXJuRWxlbWVudFtdW10pOiBNYXRjaFJlc3VsdCB8IE1hdGNoRXJyb3Ige1xuICBmb3IgKGNvbnN0IHAgb2YgcGF0dGVybnMpIHtcbiAgICBjb25zdCBtID0gbWF0Y2hTY3JpcHQoc2NyaXB0LCBwKTtcbiAgICBpZiAobSBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICByZXR1cm4gbTtcbiAgfVxuICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYG5vIG1hdGNoIGZvciBzY3JpcHRgKTtcbn1cblxudHlwZSBJbnB1dFNjcmlwdHM8VFNjcmlwdCwgVFdpdG5lc3M+ID0ge1xuICBzY3JpcHQ6IFRTY3JpcHQ7XG4gIHdpdG5lc3M6IFRXaXRuZXNzO1xufTtcblxudHlwZSBJbnB1dFNjcmlwdHNMZWdhY3kgPSBJbnB1dFNjcmlwdHM8RGVjb21waWxlZFNjcmlwdCwgbnVsbD47XG50eXBlIElucHV0U2NyaXB0c1dyYXBwZWRTZWd3aXQgPSBJbnB1dFNjcmlwdHM8RGVjb21waWxlZFNjcmlwdCwgQnVmZmVyW10+O1xudHlwZSBJbnB1dFNjcmlwdHNOYXRpdmVTZWd3aXQgPSBJbnB1dFNjcmlwdHM8bnVsbCwgQnVmZmVyW10+O1xuXG50eXBlIElucHV0U2NyaXB0c1Vua25vd24gPSBJbnB1dFNjcmlwdHM8RGVjb21waWxlZFNjcmlwdCB8IG51bGwsIEJ1ZmZlcltdIHwgbnVsbD47XG5cbnR5cGUgSW5wdXRQYXJzZXI8VCBleHRlbmRzIFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAyc2hQMnBrIHwgUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJtcyB8IFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3Q+ID0gKFxuICBwOiBJbnB1dFNjcmlwdHNVbmtub3duXG4pID0+IFQgfCBNYXRjaEVycm9yO1xuXG5leHBvcnQgdHlwZSBJbnB1dFB1YlNjcmlwdCA9IEJ1ZmZlcjtcblxudHlwZSBQdWJTY3JpcHRQYXJzZXI8VCBleHRlbmRzIFBhcnNlZFB1YlNjcmlwdFRhcHJvb3QgfCBQYXJzZWRQdWJTY3JpcHRQMm1zIHwgUGFyc2VkUHViU2NyaXB0UDJzaFAycGs+ID0gKFxuICBwOiBJbnB1dFB1YlNjcmlwdCxcbiAgdDogUGFyc2VkU2NyaXB0VHlwZVxuKSA9PiBUIHwgTWF0Y2hFcnJvcjtcblxuZnVuY3Rpb24gaXNMZWdhY3kocDogSW5wdXRTY3JpcHRzVW5rbm93bik6IHAgaXMgSW5wdXRTY3JpcHRzTGVnYWN5IHtcbiAgcmV0dXJuIEJvb2xlYW4ocC5zY3JpcHQgJiYgIXAud2l0bmVzcyk7XG59XG5cbmZ1bmN0aW9uIGlzV3JhcHBlZFNlZ3dpdChwOiBJbnB1dFNjcmlwdHNVbmtub3duKTogcCBpcyBJbnB1dFNjcmlwdHNXcmFwcGVkU2Vnd2l0IHtcbiAgcmV0dXJuIEJvb2xlYW4ocC5zY3JpcHQgJiYgcC53aXRuZXNzKTtcbn1cblxuZnVuY3Rpb24gaXNOYXRpdmVTZWd3aXQocDogSW5wdXRTY3JpcHRzVW5rbm93bik6IHAgaXMgSW5wdXRTY3JpcHRzTmF0aXZlU2Vnd2l0IHtcbiAgcmV0dXJuIEJvb2xlYW4oIXAuc2NyaXB0ICYmIHAud2l0bmVzcyk7XG59XG5cbmNvbnN0IHBhcnNlUDJzaFAycGs6IElucHV0UGFyc2VyPFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAyc2hQMnBrPiA9IChwKSA9PiB7XG4gIGlmICghaXNMZWdhY3kocCkpIHtcbiAgICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYGV4cGVjdGVkIGxlZ2FjeSBpbnB1dGApO1xuICB9XG4gIGNvbnN0IG1hdGNoID0gbWF0Y2hTY3JpcHQocC5zY3JpcHQsIFsnOnNpZ25hdHVyZScsIHsgJzpzY3JpcHQnOiBbJzpwdWJrZXknLCAnT1BfQ0hFQ0tTSUcnXSB9XSk7XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICByZXR1cm4gbWF0Y2g7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzY3JpcHRUeXBlOiAncDJzaFAycGsnLFxuICAgIHB1YmxpY0tleXM6IG1hdGNoWyc6c2NyaXB0J11bMF0ubWF0Y2hbJzpwdWJrZXknXSBhcyBbQnVmZmVyXSxcbiAgICBzaWduYXR1cmVzOiBtYXRjaFsnOnNpZ25hdHVyZSddIGFzIFtCdWZmZXJdLFxuICB9O1xufTtcblxuZnVuY3Rpb24gcGFyc2VQMm1zKFxuICBkZWNTY3JpcHQ6IERlY29tcGlsZWRTY3JpcHQsXG4gIHNjcmlwdFR5cGU6ICdwMnNoJyB8ICdwMnNoUDJ3c2gnIHwgJ3Ayd3NoJ1xuKTogUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJtcyB8IE1hdGNoRXJyb3Ige1xuICBjb25zdCBwYXR0ZXJuMk9mMzogU2NyaXB0UGF0dGVybkVsZW1lbnRbXSA9IFsnT1BfMicsICc6cHVia2V5JywgJzpwdWJrZXknLCAnOnB1YmtleScsICdPUF8zJywgJ09QX0NIRUNLTVVMVElTSUcnXTtcblxuICBjb25zdCBtYXRjaCA9IG1hdGNoU2NyaXB0U29tZShkZWNTY3JpcHQsIFtcbiAgICAvKiBmdWxsLXNpZ25lZCwgbm8gcGxhY2Vob2xkZXIgc2lnbmF0dXJlICovXG4gICAgWydPUF8wJywgJzpzaWduYXR1cmUnLCAnOnNpZ25hdHVyZScsIHsgJzpzY3JpcHQnOiBwYXR0ZXJuMk9mMyB9XSxcbiAgICAvKiBoYWxmLXNpZ25lZCwgcGxhY2Vob2xkZXIgc2lnbmF0dXJlcyAqL1xuICAgIFsnT1BfMCcsICc6c2lnbmF0dXJlJywgJzpzaWduYXR1cmUnLCAnOnNpZ25hdHVyZScsIHsgJzpzY3JpcHQnOiBwYXR0ZXJuMk9mMyB9XSxcbiAgXSk7XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICByZXR1cm4gbWF0Y2g7XG4gIH1cblxuICBjb25zdCBbcmVkZWVtU2NyaXB0XSA9IG1hdGNoWyc6c2NyaXB0J107XG5cbiAgaWYgKCFpc1RyaXBsZShyZWRlZW1TY3JpcHQubWF0Y2hbJzpwdWJrZXknXSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgcHVia2V5IGNvdW50YCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNjcmlwdFR5cGUsXG4gICAgcHVibGljS2V5czogcmVkZWVtU2NyaXB0Lm1hdGNoWyc6cHVia2V5J10sXG4gICAgcHViU2NyaXB0OiByZWRlZW1TY3JpcHQuYnVmZmVyLFxuICAgIHNpZ25hdHVyZXM6IG1hdGNoWyc6c2lnbmF0dXJlJ10gYXMgUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJtc1snc2lnbmF0dXJlcyddLFxuICAgIHJlZGVlbVNjcmlwdDogc2NyaXB0VHlwZSA9PT0gJ3Ayc2gnID8gcmVkZWVtU2NyaXB0LmJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgICB3aXRuZXNzU2NyaXB0OiBzY3JpcHRUeXBlID09PSAncDJzaFAyd3NoJyB8fCBzY3JpcHRUeXBlID09PSAncDJ3c2gnID8gcmVkZWVtU2NyaXB0LmJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgfTtcbn1cblxuY29uc3QgcGFyc2VQMnNoMk9mMzogSW5wdXRQYXJzZXI8UGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJtcz4gPSAocCkgPT4ge1xuICBpZiAoIWlzTGVnYWN5KHApKSB7XG4gICAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBleHBlY3RlZCBsZWdhY3kgaW5wdXRgKTtcbiAgfVxuICByZXR1cm4gcGFyc2VQMm1zKHAuc2NyaXB0LCAncDJzaCcpO1xufTtcblxuY29uc3QgcGFyc2VQMnNoUDJ3c2gyT2YzOiBJbnB1dFBhcnNlcjxQYXJzZWRTaWduYXR1cmVTY3JpcHRQMm1zPiA9IChwKSA9PiB7XG4gIGlmICghaXNXcmFwcGVkU2Vnd2l0KHApKSB7XG4gICAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBleHBlY3RlZCB3cmFwcGVkIHNlZ3dpdCBpbnB1dGApO1xuICB9XG4gIHJldHVybiB7IC4uLnBhcnNlUDJtcyhwLndpdG5lc3MsICdwMnNoUDJ3c2gnKSwgcmVkZWVtU2NyaXB0OiBwLnNjcmlwdFswXSBhcyBCdWZmZXIgfTtcbn07XG5cbmNvbnN0IHBhcnNlUDJ3c2gyT2YzOiBJbnB1dFBhcnNlcjxQYXJzZWRTaWduYXR1cmVTY3JpcHRQMm1zPiA9IChwKSA9PiB7XG4gIGlmICghaXNOYXRpdmVTZWd3aXQocCkpIHtcbiAgICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYGV4cGVjdGVkIG5hdGl2ZSBzZWd3aXRgKTtcbiAgfVxuICByZXR1cm4gcGFyc2VQMm1zKHAud2l0bmVzcywgJ3Ayd3NoJyk7XG59O1xuXG5jb25zdCBwYXJzZVRhcHJvb3RLZXlQYXRoMk9mMzogSW5wdXRQYXJzZXI8UGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdEtleVBhdGg+ID0gKHApID0+IHtcbiAgaWYgKCFpc05hdGl2ZVNlZ3dpdChwKSkge1xuICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgZXhwZWN0ZWQgbmF0aXZlIHNlZ3dpdGApO1xuICB9XG4gIGNvbnN0IG1hdGNoID0gbWF0Y2hTY3JpcHQocC53aXRuZXNzLCBbJzpzaWduYXR1cmUnXSk7XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICByZXR1cm4gbWF0Y2g7XG4gIH1cbiAgY29uc3Qgc2lnbmF0dXJlcyA9IG1hdGNoWyc6c2lnbmF0dXJlJ10gYXMgW0J1ZmZlcl07XG4gIGlmIChpc1BsYWNlaG9sZGVyU2lnbmF0dXJlKHNpZ25hdHVyZXNbMF0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHRhcHJvb3Qga2V5IHBhdGggc2lnbmF0dXJlYCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzY3JpcHRUeXBlOiAndGFwcm9vdEtleVBhdGhTcGVuZCcsXG4gICAgc2lnbmF0dXJlcyxcbiAgfTtcbn07XG5cbmNvbnN0IHBhcnNlVGFwcm9vdFNjcmlwdFBhdGgyT2YzOiBJbnB1dFBhcnNlcjxQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290PiA9IChwKSA9PiB7XG4gIGlmICghaXNOYXRpdmVTZWd3aXQocCkpIHtcbiAgICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYGV4cGVjdGVkIG5hdGl2ZSBzZWd3aXRgKTtcbiAgfVxuICAvLyBhc3N1bWVzIG5vIGFubmV4XG4gIGNvbnN0IG1hdGNoID0gbWF0Y2hTY3JpcHQocC53aXRuZXNzLCBbXG4gICAgJzpzaWduYXR1cmUnLFxuICAgICc6c2lnbmF0dXJlJyxcbiAgICB7ICc6c2NyaXB0JzogWyc6cHVia2V5LXhvbmx5JywgJ09QX0NIRUNLU0lHVkVSSUZZJywgJzpwdWJrZXkteG9ubHknLCAnT1BfQ0hFQ0tTSUcnXSB9LFxuICAgICc6Y29udHJvbC1ibG9jaycsXG4gIF0pO1xuICBpZiAobWF0Y2ggaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgcmV0dXJuIG1hdGNoO1xuICB9XG4gIGNvbnN0IFtjb250cm9sQmxvY2tdID0gbWF0Y2hbJzpjb250cm9sLWJsb2NrJ107XG4gIGNvbnN0IHNjcmlwdFBhdGhMZXZlbCA9IGNhbGN1bGF0ZVNjcmlwdFBhdGhMZXZlbChjb250cm9sQmxvY2spO1xuXG4gIGNvbnN0IGxlYWZWZXJzaW9uID0gZ2V0TGVhZlZlcnNpb24oY29udHJvbEJsb2NrKTtcblxuICByZXR1cm4ge1xuICAgIHNjcmlwdFR5cGU6ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJyxcbiAgICBwdWJTY3JpcHQ6IG1hdGNoWyc6c2NyaXB0J11bMF0uYnVmZmVyLFxuICAgIHB1YmxpY0tleXM6IG1hdGNoWyc6c2NyaXB0J11bMF0ubWF0Y2hbJzpwdWJrZXkteG9ubHknXSBhcyBbQnVmZmVyLCBCdWZmZXJdLFxuICAgIHNpZ25hdHVyZXM6IG1hdGNoWyc6c2lnbmF0dXJlJ10gYXMgW0J1ZmZlciwgQnVmZmVyXSxcbiAgICBjb250cm9sQmxvY2ssXG4gICAgc2NyaXB0UGF0aExldmVsLFxuICAgIGxlYWZWZXJzaW9uLFxuICB9O1xufTtcblxuLyoqXG4gKiBQYXJzZSBhIHRyYW5zYWN0aW9uJ3Mgc2lnbmF0dXJlIHNjcmlwdCB0byBvYnRhaW4gcHVibGljIGtleXMsIHNpZ25hdHVyZXMsIHRoZSBzaWcgc2NyaXB0LFxuICogYW5kIG90aGVyIHByb3BlcnRpZXMuXG4gKlxuICogT25seSBzdXBwb3J0cyBzY3JpcHQgdHlwZXMgdXNlZCBpbiBCaXRHbyB0cmFuc2FjdGlvbnMuXG4gKlxuICogQHBhcmFtIGlucHV0XG4gKiBAcmV0dXJucyBQYXJzZWRTaWduYXR1cmVTY3JpcHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2lnbmF0dXJlU2NyaXB0KFxuICBpbnB1dDogVHhJbnB1dFxuKTogUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJzaFAycGsgfCBQYXJzZWRTaWduYXR1cmVTY3JpcHRQMm1zIHwgUGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdCB7XG4gIGNvbnN0IGRlY1NjcmlwdCA9IGJzY3JpcHQuZGVjb21waWxlKGlucHV0LnNjcmlwdCk7XG4gIGNvbnN0IHBhcnNlcnMgPSBbXG4gICAgcGFyc2VQMnNoMk9mMyxcbiAgICBwYXJzZVAyc2hQMndzaDJPZjMsXG4gICAgcGFyc2VQMndzaDJPZjMsXG4gICAgcGFyc2VUYXByb290S2V5UGF0aDJPZjMsXG4gICAgcGFyc2VUYXByb290U2NyaXB0UGF0aDJPZjMsXG4gICAgcGFyc2VQMnNoUDJwayxcbiAgXSBhcyBjb25zdDtcbiAgZm9yIChjb25zdCBmIG9mIHBhcnNlcnMpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBmKHtcbiAgICAgIHNjcmlwdDogZGVjU2NyaXB0Py5sZW5ndGggPT09IDAgPyBudWxsIDogZGVjU2NyaXB0LFxuICAgICAgd2l0bmVzczogaW5wdXQud2l0bmVzcy5sZW5ndGggPT09IDAgPyBudWxsIDogaW5wdXQud2l0bmVzcyxcbiAgICB9KTtcbiAgICBpZiAocGFyc2VkIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBjb3VsZCBub3QgcGFyc2UgaW5wdXRgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2lnbmF0dXJlU2NyaXB0Mk9mMyhpbnB1dDogVHhJbnB1dCk6IFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAybXMgfCBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290IHtcbiAgY29uc3QgcmVzdWx0ID0gcGFyc2VTaWduYXR1cmVTY3JpcHQoaW5wdXQpO1xuXG4gIGlmIChcbiAgICAhaXNTY3JpcHRUeXBlMk9mMyhyZXN1bHQuc2NyaXB0VHlwZSkgJiZcbiAgICByZXN1bHQuc2NyaXB0VHlwZSAhPT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnICYmXG4gICAgcmVzdWx0LnNjcmlwdFR5cGUgIT09ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgc2NyaXB0IHR5cGVgKTtcbiAgfVxuXG4gIGlmICghcmVzdWx0LnNpZ25hdHVyZXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG1pc3Npbmcgc2lnbmF0dXJlc2ApO1xuICB9XG4gIGlmIChcbiAgICByZXN1bHQuc2NyaXB0VHlwZSAhPT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnICYmXG4gICAgcmVzdWx0LnB1YmxpY0tleXMubGVuZ3RoICE9PSAzICYmXG4gICAgKHJlc3VsdC5wdWJsaWNLZXlzLmxlbmd0aCAhPT0gMiB8fCByZXN1bHQuc2NyaXB0VHlwZSAhPT0gJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnKVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQgcHVia2V5IGNvdW50YCk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0IGFzIFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAybXMgfCBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290O1xufVxuXG5jb25zdCBwYXJzZVAyc2hQMnBrUHViU2NyaXB0OiBQdWJTY3JpcHRQYXJzZXI8UGFyc2VkUHViU2NyaXB0UDJzaFAycGs+ID0gKHB1YlNjcmlwdCwgc2NyaXB0VHlwZSkgPT4ge1xuICBpZiAoc2NyaXB0VHlwZSAhPT0gJ3Ayc2hQMnBrJykge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzY3JpcHQgdHlwZScpO1xuICB9XG4gIGNvbnN0IG1hdGNoID0gbWF0Y2hTY3JpcHQoW3B1YlNjcmlwdF0sIFt7ICc6c2NyaXB0JzogWyc6cHVia2V5JywgJ09QX0NIRUNLU0lHJ10gfV0pO1xuICBpZiAobWF0Y2ggaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgcmV0dXJuIG1hdGNoO1xuICB9XG4gIGNvbnN0IFtzY3JpcHRdID0gbWF0Y2hbJzpzY3JpcHQnXTtcbiAgcmV0dXJuIHtcbiAgICBzY3JpcHRUeXBlLFxuICAgIHB1YmxpY0tleXM6IHNjcmlwdC5tYXRjaFsnOnB1YmtleSddIGFzIFtCdWZmZXJdLFxuICAgIHB1YlNjcmlwdDogcHViU2NyaXB0LFxuICAgIHJlZGVlbVNjcmlwdDogcHViU2NyaXB0LFxuICB9O1xufTtcblxuY29uc3QgcGFyc2VQMm1zUHViU2NyaXB0OiBQdWJTY3JpcHRQYXJzZXI8UGFyc2VkUHViU2NyaXB0UDJtcz4gPSAocHViU2NyaXB0LCBzY3JpcHRUeXBlKSA9PiB7XG4gIGlmIChzY3JpcHRUeXBlID09PSAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCcgfHwgc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnIHx8IHNjcmlwdFR5cGUgPT09ICdwMnNoUDJwaycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc2NyaXB0IHR5cGUnKTtcbiAgfVxuICBjb25zdCBtYXRjaCA9IG1hdGNoU2NyaXB0KFxuICAgIFtwdWJTY3JpcHRdLFxuICAgIFt7ICc6c2NyaXB0JzogWydPUF8yJywgJzpwdWJrZXknLCAnOnB1YmtleScsICc6cHVia2V5JywgJ09QXzMnLCAnT1BfQ0hFQ0tNVUxUSVNJRyddIH1dXG4gICk7XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICByZXR1cm4gbWF0Y2g7XG4gIH1cblxuICBjb25zdCBbcmVkZWVtU2NyaXB0XSA9IG1hdGNoWyc6c2NyaXB0J107XG5cbiAgaWYgKCFpc1RyaXBsZShyZWRlZW1TY3JpcHQubWF0Y2hbJzpwdWJrZXknXSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcHVia2V5IGNvdW50Jyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNjcmlwdFR5cGUsXG4gICAgcHVibGljS2V5czogcmVkZWVtU2NyaXB0Lm1hdGNoWyc6cHVia2V5J10sXG4gICAgcHViU2NyaXB0OiByZWRlZW1TY3JpcHQuYnVmZmVyLFxuICAgIHJlZGVlbVNjcmlwdDogc2NyaXB0VHlwZSA9PT0gJ3Ayc2gnID8gcmVkZWVtU2NyaXB0LmJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgICB3aXRuZXNzU2NyaXB0OiBzY3JpcHRUeXBlID09PSAncDJzaFAyd3NoJyB8fCBzY3JpcHRUeXBlID09PSAncDJ3c2gnID8gcmVkZWVtU2NyaXB0LmJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgfTtcbn07XG5cbmNvbnN0IHBhcnNlVGFwcm9vdEtleVBhdGhQdWJTY3JpcHQ6IFB1YlNjcmlwdFBhcnNlcjxQYXJzZWRQdWJTY3JpcHRUYXByb290S2V5UGF0aD4gPSAocHViU2NyaXB0LCBzY3JpcHRUeXBlKSA9PiB7XG4gIGlmIChcbiAgICBzY3JpcHRUeXBlID09PSAncDJzaCcgfHxcbiAgICBzY3JpcHRUeXBlID09PSAncDJ3c2gnIHx8XG4gICAgc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMndzaCcgfHxcbiAgICBzY3JpcHRUeXBlID09PSAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCcgfHxcbiAgICBzY3JpcHRUeXBlID09PSAncDJzaFAycGsnXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzY3JpcHQgdHlwZScpO1xuICB9XG4gIGNvbnN0IG1hdGNoID0gbWF0Y2hTY3JpcHQoW3B1YlNjcmlwdF0sIFt7ICc6c2NyaXB0JzogWydPUF8xJywgJzpwdWJrZXkteG9ubHknXSB9XSk7XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICByZXR1cm4gbWF0Y2g7XG4gIH1cblxuICBjb25zdCBbc2NyaXB0XSA9IG1hdGNoWyc6c2NyaXB0J107XG5cbiAgcmV0dXJuIHtcbiAgICBzY3JpcHRUeXBlOiAndGFwcm9vdEtleVBhdGhTcGVuZCcsXG4gICAgcHVibGljS2V5czogc2NyaXB0Lm1hdGNoWyc6cHVia2V5LXhvbmx5J10gYXMgW0J1ZmZlcl0sXG4gICAgcHViU2NyaXB0OiBwdWJTY3JpcHQsXG4gIH07XG59O1xuXG5jb25zdCBwYXJzZVRhcHJvb3RTY3JpcHRQYXRoUHViU2NyaXB0OiBQdWJTY3JpcHRQYXJzZXI8UGFyc2VkUHViU2NyaXB0VGFwcm9vdFNjcmlwdFBhdGg+ID0gKHB1YlNjcmlwdCwgc2NyaXB0VHlwZSkgPT4ge1xuICBpZiAoXG4gICAgc2NyaXB0VHlwZSA9PT0gJ3Ayc2gnIHx8XG4gICAgc2NyaXB0VHlwZSA9PT0gJ3Ayd3NoJyB8fFxuICAgIHNjcmlwdFR5cGUgPT09ICdwMnNoUDJ3c2gnIHx8XG4gICAgc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnIHx8XG4gICAgc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc2NyaXB0IHR5cGUnKTtcbiAgfVxuICBjb25zdCBtYXRjaCA9IG1hdGNoU2NyaXB0KFxuICAgIFtwdWJTY3JpcHRdLFxuICAgIFt7ICc6c2NyaXB0JzogWyc6cHVia2V5LXhvbmx5JywgJ09QX0NIRUNLU0lHVkVSSUZZJywgJzpwdWJrZXkteG9ubHknLCAnT1BfQ0hFQ0tTSUcnXSB9XVxuICApO1xuICBpZiAobWF0Y2ggaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgcmV0dXJuIG1hdGNoO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzY3JpcHRUeXBlLFxuICAgIHB1YlNjcmlwdDogbWF0Y2hbJzpzY3JpcHQnXVswXS5idWZmZXIsXG4gICAgcHVibGljS2V5czogbWF0Y2hbJzpzY3JpcHQnXVswXS5tYXRjaFsnOnB1YmtleS14b25seSddIGFzIFtCdWZmZXIsIEJ1ZmZlcl0sXG4gIH07XG59O1xuXG4vKipcbiAqIEByZXR1cm4gcHViU2NyaXB0IChzY3JpcHRQdWJLZXkvcmVkZWVtU2NyaXB0L3dpdG5lc3NTY3JpcHQpIGlzIHBhcnNlZC5cbiAqIFAyU0ggPT4gc2NyaXB0VHlwZSwgcHViU2NyaXB0IChyZWRlZW1TY3JpcHQpLCByZWRlZW1TY3JpcHQsIHB1YmxpYyBrZXlzXG4gKiBQVzJTSCA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQgKHdpdG5lc3NTY3JpcHQpLCB3aXRuZXNzU2NyaXB0LCBwdWJsaWMga2V5cy5cbiAqIFAyU0gtUFcyU0ggPT4gc2NyaXB0VHlwZSwgcHViU2NyaXB0ICh3aXRuZXNzU2NyaXB0KSwgd2l0bmVzc1NjcmlwdCwgcHVibGljIGtleXMuXG4gKiB0YXByb290U2NyaXB0UGF0aFNwZW5kIChQMlRSIGFuZCBQMlRSTVVJU0cyIHNjcmlwdCBwYXRoKSA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQsIHB1YiBrZXlzLlxuICogdGFwcm9vdEtleVBhdGhTcGVuZCAoUDJUUk1VSVNHMiBrZXkgcGF0aCkgPT4gc2NyaXB0VHlwZSwgcHViU2NyaXB0ICgzNC1ieXRlIG91dHB1dCBzY3JpcHQpLCBwdWIga2V5ICh0YXBPdXRwdXRLZXkpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQdWJTY3JpcHQyT2YzKFxuICBpbnB1dFB1YlNjcmlwdDogSW5wdXRQdWJTY3JpcHQsXG4gIHNjcmlwdFR5cGU6ICd0YXByb290S2V5UGF0aFNwZW5kJ1xuKTogUGFyc2VkUHViU2NyaXB0VGFwcm9vdEtleVBhdGg7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQdWJTY3JpcHQyT2YzKFxuICBpbnB1dFB1YlNjcmlwdDogSW5wdXRQdWJTY3JpcHQsXG4gIHNjcmlwdFR5cGU6ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJ1xuKTogUGFyc2VkUHViU2NyaXB0VGFwcm9vdFNjcmlwdFBhdGg7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQdWJTY3JpcHQyT2YzKFxuICBpbnB1dFB1YlNjcmlwdDogSW5wdXRQdWJTY3JpcHQsXG4gIHNjcmlwdFR5cGU6ICdwMnNoJyB8ICdwMnNoUDJ3c2gnIHwgJ3Ayd3NoJ1xuKTogUGFyc2VkUHViU2NyaXB0UDJtcztcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVB1YlNjcmlwdDJPZjMoXG4gIGlucHV0UHViU2NyaXB0OiBJbnB1dFB1YlNjcmlwdCxcbiAgc2NyaXB0VHlwZTogUGFyc2VkU2NyaXB0VHlwZTJPZjNcbik6IFBhcnNlZFB1YlNjcmlwdFAybXMgfCBQYXJzZWRQdWJTY3JpcHRUYXByb290O1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHViU2NyaXB0Mk9mMyhcbiAgaW5wdXRQdWJTY3JpcHQ6IElucHV0UHViU2NyaXB0LFxuICBzY3JpcHRUeXBlOiBQYXJzZWRTY3JpcHRUeXBlMk9mM1xuKTogUGFyc2VkUHViU2NyaXB0UDJtcyB8IFBhcnNlZFB1YlNjcmlwdFRhcHJvb3Qge1xuICBjb25zdCByZXN1bHQgPVxuICAgIHNjcmlwdFR5cGUgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJ1xuICAgICAgPyBwYXJzZVRhcHJvb3RLZXlQYXRoUHViU2NyaXB0KGlucHV0UHViU2NyaXB0LCBzY3JpcHRUeXBlKVxuICAgICAgOiBzY3JpcHRUeXBlID09PSAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCdcbiAgICAgID8gcGFyc2VUYXByb290U2NyaXB0UGF0aFB1YlNjcmlwdChpbnB1dFB1YlNjcmlwdCwgc2NyaXB0VHlwZSlcbiAgICAgIDogcGFyc2VQMm1zUHViU2NyaXB0KGlucHV0UHViU2NyaXB0LCBzY3JpcHRUeXBlKTtcblxuICBpZiAocmVzdWx0IGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihyZXN1bHQubWVzc2FnZSk7XG4gIH1cblxuICBpZiAoXG4gICAgKHJlc3VsdC5zY3JpcHRUeXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgJiYgcmVzdWx0LnB1YmxpY0tleXMubGVuZ3RoICE9PSAxKSB8fFxuICAgIChyZXN1bHQuc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnICYmIHJlc3VsdC5wdWJsaWNLZXlzLmxlbmd0aCAhPT0gMikgfHxcbiAgICAoaXNTY3JpcHRUeXBlMk9mMyhyZXN1bHQuc2NyaXB0VHlwZSkgJiYgcmVzdWx0LnB1YmxpY0tleXMubGVuZ3RoICE9PSAzKVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgcHVia2V5IGNvdW50Jyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEByZXR1cm4gcHViU2NyaXB0IChzY3JpcHRQdWJLZXkvcmVkZWVtU2NyaXB0L3dpdG5lc3NTY3JpcHQpIGlzIHBhcnNlZC5cbiAqIFAyU0ggPT4gc2NyaXB0VHlwZSwgcHViU2NyaXB0IChyZWRlZW1TY3JpcHQpLCByZWRlZW1TY3JpcHQsIHB1YmxpYyBrZXlzXG4gKiBQVzJTSCA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQgKHdpdG5lc3NTY3JpcHQpLCB3aXRuZXNzU2NyaXB0LCBwdWJsaWMga2V5cy5cbiAqIFAyU0gtUFcyU0ggPT4gc2NyaXB0VHlwZSwgcHViU2NyaXB0ICh3aXRuZXNzU2NyaXB0KSwgd2l0bmVzc1NjcmlwdCwgcHVibGljIGtleXMuXG4gKiB0YXByb290U2NyaXB0UGF0aFNwZW5kIChQMlRSIGFuZCBQMlRSTVVJU0cyIHNjcmlwdCBwYXRoKSA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQsIHB1YiBrZXlzLlxuICogdGFwcm9vdEtleVBhdGhTcGVuZCAoUDJUUk1VSVNHMiBrZXkgcGF0aCkgPT4gc2NyaXB0VHlwZSwgcHViU2NyaXB0ICgzNC1ieXRlIG91dHB1dCBzY3JpcHQpLCBwdWIga2V5ICh0YXBPdXRwdXRLZXkpLlxuICogUDJTSC1QMlBLID0+IHNjcmlwdFR5cGUsIHB1YlNjcmlwdCwgcHViIGtleSwgcmVkZWVtU2NyaXB0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQdWJTY3JpcHQoXG4gIGlucHV0UHViU2NyaXB0OiBJbnB1dFB1YlNjcmlwdCxcbiAgc2NyaXB0VHlwZTogJ3RhcHJvb3RLZXlQYXRoU3BlbmQnXG4pOiBQYXJzZWRQdWJTY3JpcHRUYXByb290S2V5UGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVB1YlNjcmlwdChcbiAgaW5wdXRQdWJTY3JpcHQ6IElucHV0UHViU2NyaXB0LFxuICBzY3JpcHRUeXBlOiAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCdcbik6IFBhcnNlZFB1YlNjcmlwdFRhcHJvb3RTY3JpcHRQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHViU2NyaXB0KGlucHV0UHViU2NyaXB0OiBJbnB1dFB1YlNjcmlwdCwgc2NyaXB0VHlwZTogJ3Ayc2hQMnBrJyk6IFBhcnNlZFB1YlNjcmlwdFAyc2hQMnBrO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHViU2NyaXB0KFxuICBpbnB1dFB1YlNjcmlwdDogSW5wdXRQdWJTY3JpcHQsXG4gIHNjcmlwdFR5cGU6ICdwMnNoJyB8ICdwMnNoUDJ3c2gnIHwgJ3Ayd3NoJ1xuKTogUGFyc2VkUHViU2NyaXB0UDJtcztcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVB1YlNjcmlwdChcbiAgaW5wdXRQdWJTY3JpcHQ6IElucHV0UHViU2NyaXB0LFxuICBzY3JpcHRUeXBlOiBQYXJzZWRTY3JpcHRUeXBlXG4pOiBQYXJzZWRQdWJTY3JpcHRQMm1zIHwgUGFyc2VkUHViU2NyaXB0VGFwcm9vdCB8IFBhcnNlZFB1YlNjcmlwdFAyc2hQMnBrO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHViU2NyaXB0KFxuICBpbnB1dFB1YlNjcmlwdDogSW5wdXRQdWJTY3JpcHQsXG4gIHNjcmlwdFR5cGU6IFBhcnNlZFNjcmlwdFR5cGVcbik6IFBhcnNlZFB1YlNjcmlwdFAybXMgfCBQYXJzZWRQdWJTY3JpcHRUYXByb290IHwgUGFyc2VkUHViU2NyaXB0UDJzaFAycGsge1xuICBjb25zdCByZXN1bHQgPVxuICAgIHNjcmlwdFR5cGUgPT09ICdwMnNoUDJwaydcbiAgICAgID8gcGFyc2VQMnNoUDJwa1B1YlNjcmlwdChpbnB1dFB1YlNjcmlwdCwgc2NyaXB0VHlwZSlcbiAgICAgIDogcGFyc2VQdWJTY3JpcHQyT2YzKGlucHV0UHViU2NyaXB0LCBzY3JpcHRUeXBlKTtcblxuICBpZiAocmVzdWx0IGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihyZXN1bHQubWVzc2FnZSk7XG4gIH1cblxuICBpZiAocmVzdWx0LnNjcmlwdFR5cGUgPT09ICdwMnNoUDJwaycgJiYgcmVzdWx0LnB1YmxpY0tleXMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHB1YmtleSBjb3VudCcpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdfQ==
|
|
428
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VJbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iaXRnby9wYXJzZUlucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDRCQUE0QjtBQUM1Qix1Q0FBdUM7QUFDdkMsaURBQTJEO0FBRTNELG1DQUFtQztBQUNuQyxtREFBbUQ7QUFFbkQsU0FBZ0Isc0JBQXNCLENBQUMsQ0FBa0I7SUFDdkQsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3RCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7S0FDdkI7SUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakIsQ0FBQztBQUxELHdEQUtDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxZQUFvQjtJQUNyRCxzRkFBc0Y7SUFDdEYsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxZQUFZLENBQUMsTUFBTSxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN0RyxDQUFDO0FBSEQsZ0RBR0M7QUFFRDs7R0FFRztBQUNILFNBQWdCLHdCQUF3QixDQUFDLFlBQW9CO0lBQzNELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFO1FBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztLQUNoRDtJQUNELElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUU7UUFDOUIsT0FBTyxDQUFDLENBQUM7S0FDVjtJQUNELElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUU7UUFDOUIsT0FBTyxDQUFDLENBQUM7S0FDVjtJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBWEQsNERBV0M7QUFFRDs7R0FF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QyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3RFLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztLQUM1QztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFsQkQsd0NBa0JDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50IG5vLXJlZGVjbGFyZTogMCAqL1xuaW1wb3J0ICogYXMgb3Bjb2RlcyBmcm9tICdiaXRjb2luLW9wcyc7XG5pbXBvcnQgeyBUeElucHV0LCBzY3JpcHQgYXMgYnNjcmlwdCB9IGZyb20gJ2JpdGNvaW5qcy1saWInO1xuXG5pbXBvcnQgeyBpc1RyaXBsZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgaXNTY3JpcHRUeXBlMk9mMyB9IGZyb20gJy4vb3V0cHV0U2NyaXB0cyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BsYWNlaG9sZGVyU2lnbmF0dXJlKHY6IG51bWJlciB8IEJ1ZmZlcik6IGJvb2xlYW4ge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHYpKSB7XG4gICAgcmV0dXJuIHYubGVuZ3RoID09PSAwO1xuICB9XG4gIHJldHVybiB2ID09PSAwO1xufVxuXG4vKipcbiAqIEByZXR1cm4gdHJ1ZSBpZmYgUDJUUiBzY3JpcHQgcGF0aCdzIGNvbnRyb2wgYmxvY2sgbWF0Y2hlcyBCaXRHbydzIG5lZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRDb250cm9sQm9jayhjb250cm9sQmxvY2s6IEJ1ZmZlcik6IGJvb2xlYW4ge1xuICAvLyBUaGUgbGFzdCBzdGFjayBlbGVtZW50IGlzIGNhbGxlZCB0aGUgY29udHJvbCBibG9jayBjLCBhbmQgbXVzdCBoYXZlIGxlbmd0aCAzMyArIDMybVxuICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGNvbnRyb2xCbG9jaykgJiYgMzMgPD0gY29udHJvbEJsb2NrLmxlbmd0aCAmJiBjb250cm9sQmxvY2subGVuZ3RoICUgMzIgPT09IDE7XG59XG5cbi8qKlxuICogQHJldHVybiBzY3JpcHQgcGF0aCBsZXZlbCBmb3IgUDJUUiBjb250cm9sIGJsb2NrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVTY3JpcHRQYXRoTGV2ZWwoY29udHJvbEJsb2NrOiBCdWZmZXIpOiBudW1iZXIge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihjb250cm9sQmxvY2spKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvbnRyb2wgYmxvY2sgdHlwZS4nKTtcbiAgfVxuICBpZiAoY29udHJvbEJsb2NrLmxlbmd0aCA9PT0gNjUpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICBpZiAoY29udHJvbEJsb2NrLmxlbmd0aCA9PT0gOTcpIHtcbiAgICByZXR1cm4gMjtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgY29udHJvbCBibG9jayBsZW5ndGguJyk7XG59XG5cbi8qKlxuICogQHJldHVybiBsZWFmIHZlcnNpb24gZm9yIFAyVFIgY29udHJvbCBibG9jay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExlYWZWZXJzaW9uKGNvbnRyb2xCbG9jazogQnVmZmVyKTogbnVtYmVyIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihjb250cm9sQmxvY2spICYmIGNvbnRyb2xCbG9jay5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGNvbnRyb2xCbG9ja1swXSAmIDB4ZmU7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIGxlYWZWZXJzaW9uLicpO1xufVxuXG5leHBvcnQgdHlwZSBQYXJzZWRTY3JpcHRUeXBlMk9mMyA9XG4gIHwgJ3Ayc2gnXG4gIHwgJ3Ayc2hQMndzaCdcbiAgfCAncDJ3c2gnXG4gIHwgJ3RhcHJvb3RLZXlQYXRoU3BlbmQnIC8vIG9ubHkgaW1wbGVtZW50ZWQgZm9yIHAydHJNdXNpZzJcbiAgfCAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCc7IC8vIGNhbiBiZSBmb3IgZWl0aGVyIHAydHIgb3IgcDJ0ck11c2lnMiBvdXRwdXQgc2NyaXB0XG5cbmV4cG9ydCB0eXBlIFBhcnNlZFNjcmlwdFR5cGUgPSBQYXJzZWRTY3JpcHRUeXBlMk9mMyB8ICdwMnNoUDJwayc7XG5cbmV4cG9ydCB0eXBlIFBhcnNlZFB1YlNjcmlwdCA9IHtcbiAgc2NyaXB0VHlwZTogUGFyc2VkU2NyaXB0VHlwZTtcbn07XG5cbmV4cG9ydCB0eXBlIFBhcnNlZFNpZ25hdHVyZVNjcmlwdCA9IHtcbiAgc2NyaXB0VHlwZTogUGFyc2VkU2NyaXB0VHlwZTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJzaFAycGsgZXh0ZW5kcyBQYXJzZWRTaWduYXR1cmVTY3JpcHQge1xuICBzY3JpcHRUeXBlOiAncDJzaFAycGsnO1xuICBwdWJsaWNLZXlzOiBbQnVmZmVyXTtcbiAgc2lnbmF0dXJlczogW0J1ZmZlcl07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkUHViU2NyaXB0VGFwcm9vdEtleVBhdGggZXh0ZW5kcyBQYXJzZWRQdWJTY3JpcHQge1xuICBzY3JpcHRUeXBlOiAndGFwcm9vdEtleVBhdGhTcGVuZCc7XG4gIC8vIHgtb25seSB0YXBPdXRwdXRLZXlcbiAgcHVibGljS2V5czogW0J1ZmZlcl07XG4gIHB1YlNjcmlwdDogQnVmZmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFB1YlNjcmlwdFRhcHJvb3RTY3JpcHRQYXRoIGV4dGVuZHMgUGFyc2VkUHViU2NyaXB0IHtcbiAgc2NyaXB0VHlwZTogJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnO1xuICBwdWJsaWNLZXlzOiBbQnVmZmVyLCBCdWZmZXJdO1xuICBwdWJTY3JpcHQ6IEJ1ZmZlcjtcbn1cblxuZXhwb3J0IHR5cGUgUGFyc2VkUHViU2NyaXB0VGFwcm9vdCA9IFBhcnNlZFB1YlNjcmlwdFRhcHJvb3RLZXlQYXRoIHwgUGFyc2VkUHViU2NyaXB0VGFwcm9vdFNjcmlwdFBhdGg7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkUHViU2NyaXB0UDJtcyBleHRlbmRzIFBhcnNlZFB1YlNjcmlwdCB7XG4gIHNjcmlwdFR5cGU6ICdwMnNoJyB8ICdwMnNoUDJ3c2gnIHwgJ3Ayd3NoJztcbiAgcHVibGljS2V5czogW0J1ZmZlciwgQnVmZmVyLCBCdWZmZXJdO1xuICBwdWJTY3JpcHQ6IEJ1ZmZlcjtcbiAgcmVkZWVtU2NyaXB0OiBCdWZmZXIgfCB1bmRlZmluZWQ7XG4gIHdpdG5lc3NTY3JpcHQ6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRQdWJTY3JpcHRQMnNoUDJwayBleHRlbmRzIFBhcnNlZFB1YlNjcmlwdCB7XG4gIHNjcmlwdFR5cGU6ICdwMnNoUDJwayc7XG4gIHB1YmxpY0tleXM6IFtCdWZmZXJdO1xuICBwdWJTY3JpcHQ6IEJ1ZmZlcjtcbiAgcmVkZWVtU2NyaXB0OiBCdWZmZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJtcyBleHRlbmRzIFBhcnNlZFNpZ25hdHVyZVNjcmlwdCB7XG4gIHNjcmlwdFR5cGU6ICdwMnNoJyB8ICdwMnNoUDJ3c2gnIHwgJ3Ayd3NoJztcbiAgcHVibGljS2V5czogW0J1ZmZlciwgQnVmZmVyLCBCdWZmZXJdO1xuICBzaWduYXR1cmVzOlxuICAgIHwgW0J1ZmZlciwgQnVmZmVyXSAvLyBmdWxseS1zaWduZWQgdHJhbnNhY3Rpb25zIHdpdGggc2lnbmF0dXJlc1xuICAgIC8qIFBhcnRpYWxseSBzaWduZWQgdHJhbnNhY3Rpb25zIHdpdGggcGxhY2Vob2xkZXIgc2lnbmF0dXJlcy5cbiAgICAgICBGb3IgcDJzaCwgdGhlIHBsYWNlaG9sZGVyIGlzIE9QXzAgKG51bWJlciAwKSAqL1xuICAgIHwgW0J1ZmZlciB8IDAsIEJ1ZmZlciB8IDAsIEJ1ZmZlciB8IDBdO1xuICBwdWJTY3JpcHQ6IEJ1ZmZlcjtcbiAgcmVkZWVtU2NyaXB0OiBCdWZmZXIgfCB1bmRlZmluZWQ7XG4gIHdpdG5lc3NTY3JpcHQ6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBLZXlwYXRoIHNwZW5kcyBvbmx5IGhhdmUgYSBzaW5nbGUgc2lnbmF0dXJlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdEtleVBhdGggZXh0ZW5kcyBQYXJzZWRTaWduYXR1cmVTY3JpcHQge1xuICBzY3JpcHRUeXBlOiAndGFwcm9vdEtleVBhdGhTcGVuZCc7XG4gIHNpZ25hdHVyZXM6IFtCdWZmZXJdO1xufVxuXG4vKipcbiAqIFRhcHJvb3QgU2NyaXB0cGF0aCBzcGVuZHMgYXJlIG1vcmUgc2ltaWxhciB0byByZWd1bGFyIHAybXMgc3BlbmRzIGFuZCBoYXZlIHR3byBwdWJsaWMga2V5cyBhbmRcbiAqIHR3byBzaWduYXR1cmVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdFNjcmlwdFBhdGggZXh0ZW5kcyBQYXJzZWRTaWduYXR1cmVTY3JpcHQge1xuICBzY3JpcHRUeXBlOiAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCc7XG4gIHB1YmxpY0tleXM6IFtCdWZmZXIsIEJ1ZmZlcl07XG4gIHNpZ25hdHVyZXM6IFtCdWZmZXIsIEJ1ZmZlcl07XG4gIGNvbnRyb2xCbG9jazogQnVmZmVyO1xuICBsZWFmVmVyc2lvbjogbnVtYmVyO1xuICAvKiogSW5kaWNhdGVzIHRoZSBsZXZlbCBpbnNpZGUgdGhlIHRhcHRyZWUuICovXG4gIHNjcmlwdFBhdGhMZXZlbDogbnVtYmVyO1xuICBwdWJTY3JpcHQ6IEJ1ZmZlcjtcbn1cblxuZXhwb3J0IHR5cGUgUGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdCA9IFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3RLZXlQYXRoIHwgUGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdFNjcmlwdFBhdGg7XG5cbnR5cGUgRGVjb21waWxlZFNjcmlwdCA9IEFycmF5PEJ1ZmZlciB8IG51bWJlcj47XG5cbi8qKlxuICogU3RhdGljIHNjcmlwdCBlbGVtZW50c1xuICovXG50eXBlIFNjcmlwdFBhdHRlcm5Db25zdGFudCA9XG4gIHwgJ09QXzAnXG4gIHwgJ09QXzEnXG4gIHwgJ09QXzInXG4gIHwgJ09QXzMnXG4gIHwgJ09QX0NIRUNLTVVMVElTSUcnXG4gIHwgJ09QX0NIRUNLU0lHJ1xuICB8ICdPUF9DSEVDS1NJR1ZFUklGWSc7XG5cbi8qKlxuICogU2NyaXB0IGVsZW1lbnRzIHRoYXQgY2FuIGJlIGNhcHR1cmVkXG4gKi9cbnR5cGUgU2NyaXB0UGF0dGVybkNhcHR1cmUgPVxuICB8ICc6cHVia2V5J1xuICB8ICc6cHVia2V5LXhvbmx5J1xuICB8ICc6c2lnbmF0dXJlJ1xuICB8ICc6Y29udHJvbC1ibG9jaydcbiAgfCB7ICc6c2NyaXB0JzogU2NyaXB0UGF0dGVybkVsZW1lbnRbXSB9O1xuXG50eXBlIFNjcmlwdFBhdHRlcm5FbGVtZW50ID0gU2NyaXB0UGF0dGVybkNvbnN0YW50IHwgU2NyaXB0UGF0dGVybkNhcHR1cmU7XG5cbi8qKlxuICogUmVzdWx0IGZvciBhIHN1Y2Nlc3NmdWwgc2NyaXB0IG1hdGNoXG4gKi9cbnR5cGUgTWF0Y2hSZXN1bHQgPSB7XG4gICc6cHVia2V5JzogQnVmZmVyW107XG4gICc6cHVia2V5LXhvbmx5JzogQnVmZmVyW107XG4gICc6Y29udHJvbC1ibG9jayc6IEJ1ZmZlcltdO1xuICAnOnNpZ25hdHVyZSc6IChCdWZmZXIgfCAwKVtdO1xuICAnOnNjcmlwdCc6IHsgYnVmZmVyOiBCdWZmZXI7IG1hdGNoOiBNYXRjaFJlc3VsdCB9W107XG59O1xuXG5mdW5jdGlvbiBlbXB0eU1hdGNoUmVzdWx0KCk6IE1hdGNoUmVzdWx0IHtcbiAgcmV0dXJuIHtcbiAgICAnOnB1YmtleSc6IFtdLFxuICAgICc6cHVia2V5LXhvbmx5JzogW10sXG4gICAgJzpjb250cm9sLWJsb2NrJzogW10sXG4gICAgJzpzaWduYXR1cmUnOiBbXSxcbiAgICAnOnNjcmlwdCc6IFtdLFxuICB9O1xufVxuXG5jbGFzcyBNYXRjaEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvLyB0aGlzIHByb3BlcnR5IGlzIHJlcXVpcmVkIHRvIHByb2hpYml0IGByZXR1cm4gbmV3IEVycm9yKClgIHdoZW4gdGhlIHJldHVybiB0eXBlIGRlbWFuZHMgYE1hdGNoRXJyb3JgXG4gIF9fdHlwZSA9ICdNYXRjaEVycm9yJztcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gIH1cblxuICBzdGF0aWMgZm9yUGF0dGVybkVsZW1lbnQocDogU2NyaXB0UGF0dGVybkVsZW1lbnQpOiBNYXRjaEVycm9yIHtcbiAgICBpZiAodHlwZW9mIHAgPT09ICdvYmplY3QnICYmICc6c2NyaXB0JyBpbiBwKSB7XG4gICAgICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYGVycm9yIG1hdGNoaW5nIG5lc3RlZCBzY3JpcHRgKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBlcnJvciBtYXRjaGluZyAke3B9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0gc2NyaXB0XG4gKiBAcGFyYW0gcGF0dGVyblxuICogQHJldHVybiBNYXRjaFJlc3VsdCBpZiBzY3JpcHQgbWF0Y2hlcyBwYXR0ZXJuLiBUaGUgcmVzdWx0IHdpbGwgY29udGFpbiB0aGUgbWF0Y2hlZCB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIG1hdGNoU2NyaXB0KHNjcmlwdDogRGVjb21waWxlZFNjcmlwdCwgcGF0dGVybjogU2NyaXB0UGF0dGVybkVsZW1lbnRbXSk6IE1hdGNoUmVzdWx0IHwgTWF0Y2hFcnJvciB7XG4gIC8qKlxuICAgKiBNYXRjaCBhIHNpbmdsZSBzY3JpcHQgZWxlbWVudCB3aXRoIGEgU2NyaXB0UGF0dGVybkVsZW1lbnRcbiAgICovXG4gIGZ1bmN0aW9uIG1hdGNoRWxlbWVudChlOiBCdWZmZXIgfCBudW1iZXIsIHA6IFNjcmlwdFBhdHRlcm5FbGVtZW50KTogTWF0Y2hSZXN1bHQgfCBib29sZWFuIHtcbiAgICBzd2l0Y2ggKHApIHtcbiAgICAgIGNhc2UgJ09QXzAnOlxuICAgICAgICByZXR1cm4gZSA9PT0gb3Bjb2Rlcy5PUF8wIHx8IChCdWZmZXIuaXNCdWZmZXIoZSkgJiYgZS5sZW5ndGggPT09IDApO1xuICAgICAgY2FzZSAnT1BfMSc6XG4gICAgICBjYXNlICdPUF8yJzpcbiAgICAgIGNhc2UgJ09QXzMnOlxuICAgICAgY2FzZSAnT1BfQ0hFQ0tNVUxUSVNJRyc6XG4gICAgICBjYXNlICdPUF9DSEVDS1NJRyc6XG4gICAgICBjYXNlICdPUF9DSEVDS1NJR1ZFUklGWSc6XG4gICAgICAgIHJldHVybiBlID09PSBvcGNvZGVzW3BdO1xuICAgICAgY2FzZSAnOnB1YmtleSc6XG4gICAgICAgIHJldHVybiBCdWZmZXIuaXNCdWZmZXIoZSkgJiYgKGUubGVuZ3RoID09PSAzMyB8fCBlLmxlbmd0aCA9PT0gNjUpO1xuICAgICAgY2FzZSAnOnB1YmtleS14b25seSc6XG4gICAgICAgIHJldHVybiBCdWZmZXIuaXNCdWZmZXIoZSkgJiYgZS5sZW5ndGggPT09IDMyO1xuICAgICAgY2FzZSAnOnNpZ25hdHVyZSc6XG4gICAgICAgIHJldHVybiBCdWZmZXIuaXNCdWZmZXIoZSkgfHwgaXNQbGFjZWhvbGRlclNpZ25hdHVyZShlKTtcbiAgICAgIGNhc2UgJzpjb250cm9sLWJsb2NrJzpcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihlKSAmJiBpc1ZhbGlkQ29udHJvbEJvY2soZSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gcGF0dGVybiBlbGVtZW50ICR7cH1gKTtcbiAgICB9XG4gIH1cblxuICBpZiAoc2NyaXB0Lmxlbmd0aCAhPT0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYGxlbmd0aCBtaXNtYXRjaGApO1xuICB9XG5cbiAgLy8gR28gb3ZlciBlYWNoIHBhdHRlcm4gZWxlbWVudC5cbiAgLy8gQ29sbGVjdCBjYXB0dXJlcyBpbnRvIGEgcmVzdWx0IG9iamVjdC5cbiAgcmV0dXJuIHBhdHRlcm4ucmVkdWNlKChvYmo6IE1hdGNoUmVzdWx0IHwgTWF0Y2hFcnJvciwgcCwgaSk6IE1hdGNoUmVzdWx0IHwgTWF0Y2hFcnJvciA9PiB7XG4gICAgLy8gaWYgd2UgaGFkIGEgcHJldmlvdXMgbWlzbWF0Y2gsIHNob3J0LWNpcmN1aXRcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG5cbiAgICBjb25zdCBlID0gc2NyaXB0W2ldO1xuXG4gICAgLy8gZm9yICc6c2NyaXB0JyBwYXR0ZXJuIGVsZW1lbnRzLCBkZWNvbXBpbGUgc2NyaXB0IGVsZW1lbnQgYW5kIHJlY3Vyc2VcbiAgICBpZiAodHlwZW9mIHAgPT09ICdvYmplY3QnICYmICc6c2NyaXB0JyBpbiBwKSB7XG4gICAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihlKSkge1xuICAgICAgICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYGV4cGVjdGVkIGJ1ZmZlciBmb3IgOnNjcmlwdGApO1xuICAgICAgfVxuICAgICAgY29uc3QgZGVjID0gYnNjcmlwdC5kZWNvbXBpbGUoZSk7XG4gICAgICBpZiAoIWRlYykge1xuICAgICAgICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYGVycm9yIGRlY29tcGlsaW5nIG5lc3RlZCBzY3JpcHRgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hdGNoID0gbWF0Y2hTY3JpcHQoZGVjLCBwWyc6c2NyaXB0J10pO1xuICAgICAgaWYgKG1hdGNoIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICB9XG4gICAgICBvYmpbJzpzY3JpcHQnXS5wdXNoKHtcbiAgICAgICAgYnVmZmVyOiBlLFxuICAgICAgICBtYXRjaCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaCA9IG1hdGNoRWxlbWVudChlLCBwKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICByZXR1cm4gTWF0Y2hFcnJvci5mb3JQYXR0ZXJuRWxlbWVudChwKTtcbiAgICB9XG5cbiAgICAvLyBpZiBwYXR0ZXJuIGVsZW1lbnQgaXMgYSBjYXB0dXJlLCBhZGQgaXQgdG8gdGhlIHJlc3VsdCBvYmpcbiAgICBpZiAocCA9PT0gJzpzaWduYXR1cmUnICYmIGUgPT09IDApIHtcbiAgICAgIG9ialtwXS5wdXNoKGUpO1xuICAgIH0gZWxzZSBpZiAocCBpbiBvYmopIHtcbiAgICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBjYXB0dXJlIHZhbHVlYCk7XG4gICAgICB9XG4gICAgICBvYmpbcF0ucHVzaChlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqO1xuICB9LCBlbXB0eU1hdGNoUmVzdWx0KCkpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBzY3JpcHRcbiAqIEBwYXJhbSBwYXR0ZXJuc1xuICogQHJldHVybiBmaXJzdCBtYXRjaFxuICovXG5mdW5jdGlvbiBtYXRjaFNjcmlwdFNvbWUoc2NyaXB0OiBEZWNvbXBpbGVkU2NyaXB0LCBwYXR0ZXJuczogU2NyaXB0UGF0dGVybkVsZW1lbnRbXVtdKTogTWF0Y2hSZXN1bHQgfCBNYXRjaEVycm9yIHtcbiAgZm9yIChjb25zdCBwIG9mIHBhdHRlcm5zKSB7XG4gICAgY29uc3QgbSA9IG1hdGNoU2NyaXB0KHNjcmlwdCwgcCk7XG4gICAgaWYgKG0gaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcmV0dXJuIG07XG4gIH1cbiAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBubyBtYXRjaCBmb3Igc2NyaXB0YCk7XG59XG5cbnR5cGUgSW5wdXRTY3JpcHRzPFRTY3JpcHQsIFRXaXRuZXNzPiA9IHtcbiAgc2NyaXB0OiBUU2NyaXB0O1xuICB3aXRuZXNzOiBUV2l0bmVzcztcbn07XG5cbnR5cGUgSW5wdXRTY3JpcHRzTGVnYWN5ID0gSW5wdXRTY3JpcHRzPERlY29tcGlsZWRTY3JpcHQsIG51bGw+O1xudHlwZSBJbnB1dFNjcmlwdHNXcmFwcGVkU2Vnd2l0ID0gSW5wdXRTY3JpcHRzPERlY29tcGlsZWRTY3JpcHQsIEJ1ZmZlcltdPjtcbnR5cGUgSW5wdXRTY3JpcHRzTmF0aXZlU2Vnd2l0ID0gSW5wdXRTY3JpcHRzPG51bGwsIEJ1ZmZlcltdPjtcblxudHlwZSBJbnB1dFNjcmlwdHNVbmtub3duID0gSW5wdXRTY3JpcHRzPERlY29tcGlsZWRTY3JpcHQgfCBudWxsLCBCdWZmZXJbXSB8IG51bGw+O1xuXG50eXBlIElucHV0UGFyc2VyPFQgZXh0ZW5kcyBQYXJzZWRTaWduYXR1cmVTY3JpcHRQMnNoUDJwayB8IFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAybXMgfCBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290PiA9IChcbiAgcDogSW5wdXRTY3JpcHRzVW5rbm93blxuKSA9PiBUIHwgTWF0Y2hFcnJvcjtcblxuZXhwb3J0IHR5cGUgSW5wdXRQdWJTY3JpcHQgPSBCdWZmZXI7XG5cbnR5cGUgUHViU2NyaXB0UGFyc2VyPFQgZXh0ZW5kcyBQYXJzZWRQdWJTY3JpcHRUYXByb290IHwgUGFyc2VkUHViU2NyaXB0UDJtcyB8IFBhcnNlZFB1YlNjcmlwdFAyc2hQMnBrPiA9IChcbiAgcDogSW5wdXRQdWJTY3JpcHQsXG4gIHQ6IFBhcnNlZFNjcmlwdFR5cGVcbikgPT4gVCB8IE1hdGNoRXJyb3I7XG5cbmZ1bmN0aW9uIGlzTGVnYWN5KHA6IElucHV0U2NyaXB0c1Vua25vd24pOiBwIGlzIElucHV0U2NyaXB0c0xlZ2FjeSB7XG4gIHJldHVybiBCb29sZWFuKHAuc2NyaXB0ICYmICFwLndpdG5lc3MpO1xufVxuXG5mdW5jdGlvbiBpc1dyYXBwZWRTZWd3aXQocDogSW5wdXRTY3JpcHRzVW5rbm93bik6IHAgaXMgSW5wdXRTY3JpcHRzV3JhcHBlZFNlZ3dpdCB7XG4gIHJldHVybiBCb29sZWFuKHAuc2NyaXB0ICYmIHAud2l0bmVzcyk7XG59XG5cbmZ1bmN0aW9uIGlzTmF0aXZlU2Vnd2l0KHA6IElucHV0U2NyaXB0c1Vua25vd24pOiBwIGlzIElucHV0U2NyaXB0c05hdGl2ZVNlZ3dpdCB7XG4gIHJldHVybiBCb29sZWFuKCFwLnNjcmlwdCAmJiBwLndpdG5lc3MpO1xufVxuXG5jb25zdCBwYXJzZVAyc2hQMnBrOiBJbnB1dFBhcnNlcjxQYXJzZWRTaWduYXR1cmVTY3JpcHRQMnNoUDJwaz4gPSAocCkgPT4ge1xuICBpZiAoIWlzTGVnYWN5KHApKSB7XG4gICAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBleHBlY3RlZCBsZWdhY3kgaW5wdXRgKTtcbiAgfVxuICBjb25zdCBtYXRjaCA9IG1hdGNoU2NyaXB0KHAuc2NyaXB0LCBbJzpzaWduYXR1cmUnLCB7ICc6c2NyaXB0JzogWyc6cHVia2V5JywgJ09QX0NIRUNLU0lHJ10gfV0pO1xuICBpZiAobWF0Y2ggaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgcmV0dXJuIG1hdGNoO1xuICB9XG4gIHJldHVybiB7XG4gICAgc2NyaXB0VHlwZTogJ3Ayc2hQMnBrJyxcbiAgICBwdWJsaWNLZXlzOiBtYXRjaFsnOnNjcmlwdCddWzBdLm1hdGNoWyc6cHVia2V5J10gYXMgW0J1ZmZlcl0sXG4gICAgc2lnbmF0dXJlczogbWF0Y2hbJzpzaWduYXR1cmUnXSBhcyBbQnVmZmVyXSxcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIHBhcnNlUDJtcyhcbiAgZGVjU2NyaXB0OiBEZWNvbXBpbGVkU2NyaXB0LFxuICBzY3JpcHRUeXBlOiAncDJzaCcgfCAncDJzaFAyd3NoJyB8ICdwMndzaCdcbik6IFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAybXMgfCBNYXRjaEVycm9yIHtcbiAgY29uc3QgcGF0dGVybjJPZjM6IFNjcmlwdFBhdHRlcm5FbGVtZW50W10gPSBbJ09QXzInLCAnOnB1YmtleScsICc6cHVia2V5JywgJzpwdWJrZXknLCAnT1BfMycsICdPUF9DSEVDS01VTFRJU0lHJ107XG5cbiAgY29uc3QgbWF0Y2ggPSBtYXRjaFNjcmlwdFNvbWUoZGVjU2NyaXB0LCBbXG4gICAgLyogZnVsbC1zaWduZWQsIG5vIHBsYWNlaG9sZGVyIHNpZ25hdHVyZSAqL1xuICAgIFsnT1BfMCcsICc6c2lnbmF0dXJlJywgJzpzaWduYXR1cmUnLCB7ICc6c2NyaXB0JzogcGF0dGVybjJPZjMgfV0sXG4gICAgLyogaGFsZi1zaWduZWQsIHBsYWNlaG9sZGVyIHNpZ25hdHVyZXMgKi9cbiAgICBbJ09QXzAnLCAnOnNpZ25hdHVyZScsICc6c2lnbmF0dXJlJywgJzpzaWduYXR1cmUnLCB7ICc6c2NyaXB0JzogcGF0dGVybjJPZjMgfV0sXG4gIF0pO1xuICBpZiAobWF0Y2ggaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgcmV0dXJuIG1hdGNoO1xuICB9XG5cbiAgY29uc3QgW3JlZGVlbVNjcmlwdF0gPSBtYXRjaFsnOnNjcmlwdCddO1xuXG4gIGlmICghaXNUcmlwbGUocmVkZWVtU2NyaXB0Lm1hdGNoWyc6cHVia2V5J10pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHB1YmtleSBjb3VudGApO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzY3JpcHRUeXBlLFxuICAgIHB1YmxpY0tleXM6IHJlZGVlbVNjcmlwdC5tYXRjaFsnOnB1YmtleSddLFxuICAgIHB1YlNjcmlwdDogcmVkZWVtU2NyaXB0LmJ1ZmZlcixcbiAgICBzaWduYXR1cmVzOiBtYXRjaFsnOnNpZ25hdHVyZSddIGFzIFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAybXNbJ3NpZ25hdHVyZXMnXSxcbiAgICByZWRlZW1TY3JpcHQ6IHNjcmlwdFR5cGUgPT09ICdwMnNoJyA/IHJlZGVlbVNjcmlwdC5idWZmZXIgOiB1bmRlZmluZWQsXG4gICAgd2l0bmVzc1NjcmlwdDogc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMndzaCcgfHwgc2NyaXB0VHlwZSA9PT0gJ3Ayd3NoJyA/IHJlZGVlbVNjcmlwdC5idWZmZXIgOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbmNvbnN0IHBhcnNlUDJzaDJPZjM6IElucHV0UGFyc2VyPFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAybXM+ID0gKHApID0+IHtcbiAgaWYgKCFpc0xlZ2FjeShwKSkge1xuICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgZXhwZWN0ZWQgbGVnYWN5IGlucHV0YCk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlUDJtcyhwLnNjcmlwdCwgJ3Ayc2gnKTtcbn07XG5cbmNvbnN0IHBhcnNlUDJzaFAyd3NoMk9mMzogSW5wdXRQYXJzZXI8UGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJtcz4gPSAocCkgPT4ge1xuICBpZiAoIWlzV3JhcHBlZFNlZ3dpdChwKSkge1xuICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgZXhwZWN0ZWQgd3JhcHBlZCBzZWd3aXQgaW5wdXRgKTtcbiAgfVxuICByZXR1cm4geyAuLi5wYXJzZVAybXMocC53aXRuZXNzLCAncDJzaFAyd3NoJyksIHJlZGVlbVNjcmlwdDogcC5zY3JpcHRbMF0gYXMgQnVmZmVyIH07XG59O1xuXG5jb25zdCBwYXJzZVAyd3NoMk9mMzogSW5wdXRQYXJzZXI8UGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJtcz4gPSAocCkgPT4ge1xuICBpZiAoIWlzTmF0aXZlU2Vnd2l0KHApKSB7XG4gICAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBleHBlY3RlZCBuYXRpdmUgc2Vnd2l0YCk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlUDJtcyhwLndpdG5lc3MsICdwMndzaCcpO1xufTtcblxuY29uc3QgcGFyc2VUYXByb290S2V5UGF0aDJPZjM6IElucHV0UGFyc2VyPFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3RLZXlQYXRoPiA9IChwKSA9PiB7XG4gIGlmICghaXNOYXRpdmVTZWd3aXQocCkpIHtcbiAgICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYGV4cGVjdGVkIG5hdGl2ZSBzZWd3aXRgKTtcbiAgfVxuICBjb25zdCBtYXRjaCA9IG1hdGNoU2NyaXB0KHAud2l0bmVzcywgWyc6c2lnbmF0dXJlJ10pO1xuICBpZiAobWF0Y2ggaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgcmV0dXJuIG1hdGNoO1xuICB9XG4gIGNvbnN0IHNpZ25hdHVyZXMgPSBtYXRjaFsnOnNpZ25hdHVyZSddIGFzIFtCdWZmZXJdO1xuICBpZiAoaXNQbGFjZWhvbGRlclNpZ25hdHVyZShzaWduYXR1cmVzWzBdKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCB0YXByb290IGtleSBwYXRoIHNpZ25hdHVyZWApO1xuICB9XG4gIHJldHVybiB7XG4gICAgc2NyaXB0VHlwZTogJ3RhcHJvb3RLZXlQYXRoU3BlbmQnLFxuICAgIHNpZ25hdHVyZXMsXG4gIH07XG59O1xuXG5jb25zdCBwYXJzZVRhcHJvb3RTY3JpcHRQYXRoMk9mMzogSW5wdXRQYXJzZXI8UGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdD4gPSAocCkgPT4ge1xuICBpZiAoIWlzTmF0aXZlU2Vnd2l0KHApKSB7XG4gICAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBleHBlY3RlZCBuYXRpdmUgc2Vnd2l0YCk7XG4gIH1cbiAgLy8gYXNzdW1lcyBubyBhbm5leFxuICBjb25zdCBtYXRjaCA9IG1hdGNoU2NyaXB0KHAud2l0bmVzcywgW1xuICAgICc6c2lnbmF0dXJlJyxcbiAgICAnOnNpZ25hdHVyZScsXG4gICAgeyAnOnNjcmlwdCc6IFsnOnB1YmtleS14b25seScsICdPUF9DSEVDS1NJR1ZFUklGWScsICc6cHVia2V5LXhvbmx5JywgJ09QX0NIRUNLU0lHJ10gfSxcbiAgICAnOmNvbnRyb2wtYmxvY2snLFxuICBdKTtcbiAgaWYgKG1hdGNoIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgIHJldHVybiBtYXRjaDtcbiAgfVxuICBjb25zdCBbY29udHJvbEJsb2NrXSA9IG1hdGNoWyc6Y29udHJvbC1ibG9jayddO1xuICBjb25zdCBzY3JpcHRQYXRoTGV2ZWwgPSBjYWxjdWxhdGVTY3JpcHRQYXRoTGV2ZWwoY29udHJvbEJsb2NrKTtcblxuICBjb25zdCBsZWFmVmVyc2lvbiA9IGdldExlYWZWZXJzaW9uKGNvbnRyb2xCbG9jayk7XG5cbiAgcmV0dXJuIHtcbiAgICBzY3JpcHRUeXBlOiAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCcsXG4gICAgcHViU2NyaXB0OiBtYXRjaFsnOnNjcmlwdCddWzBdLmJ1ZmZlcixcbiAgICBwdWJsaWNLZXlzOiBtYXRjaFsnOnNjcmlwdCddWzBdLm1hdGNoWyc6cHVia2V5LXhvbmx5J10gYXMgW0J1ZmZlciwgQnVmZmVyXSxcbiAgICBzaWduYXR1cmVzOiBtYXRjaFsnOnNpZ25hdHVyZSddIGFzIFtCdWZmZXIsIEJ1ZmZlcl0sXG4gICAgY29udHJvbEJsb2NrLFxuICAgIHNjcmlwdFBhdGhMZXZlbCxcbiAgICBsZWFmVmVyc2lvbixcbiAgfTtcbn07XG5cbi8qKlxuICogUGFyc2UgYSB0cmFuc2FjdGlvbidzIHNpZ25hdHVyZSBzY3JpcHQgdG8gb2J0YWluIHB1YmxpYyBrZXlzLCBzaWduYXR1cmVzLCB0aGUgc2lnIHNjcmlwdCxcbiAqIGFuZCBvdGhlciBwcm9wZXJ0aWVzLlxuICpcbiAqIE9ubHkgc3VwcG9ydHMgc2NyaXB0IHR5cGVzIHVzZWQgaW4gQml0R28gdHJhbnNhY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBpbnB1dFxuICogQHJldHVybnMgUGFyc2VkU2lnbmF0dXJlU2NyaXB0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNpZ25hdHVyZVNjcmlwdChcbiAgaW5wdXQ6IFR4SW5wdXRcbik6IFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAyc2hQMnBrIHwgUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJtcyB8IFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3Qge1xuICBjb25zdCBkZWNTY3JpcHQgPSBic2NyaXB0LmRlY29tcGlsZShpbnB1dC5zY3JpcHQpO1xuICBjb25zdCBwYXJzZXJzID0gW1xuICAgIHBhcnNlUDJzaDJPZjMsXG4gICAgcGFyc2VQMnNoUDJ3c2gyT2YzLFxuICAgIHBhcnNlUDJ3c2gyT2YzLFxuICAgIHBhcnNlVGFwcm9vdEtleVBhdGgyT2YzLFxuICAgIHBhcnNlVGFwcm9vdFNjcmlwdFBhdGgyT2YzLFxuICAgIHBhcnNlUDJzaFAycGssXG4gIF0gYXMgY29uc3Q7XG4gIGZvciAoY29uc3QgZiBvZiBwYXJzZXJzKSB7XG4gICAgY29uc3QgcGFyc2VkID0gZih7XG4gICAgICBzY3JpcHQ6IGRlY1NjcmlwdD8ubGVuZ3RoID09PSAwID8gbnVsbCA6IGRlY1NjcmlwdCxcbiAgICAgIHdpdG5lc3M6IGlucHV0LndpdG5lc3MubGVuZ3RoID09PSAwID8gbnVsbCA6IGlucHV0LndpdG5lc3MsXG4gICAgfSk7XG4gICAgaWYgKHBhcnNlZCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgY291bGQgbm90IHBhcnNlIGlucHV0YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNpZ25hdHVyZVNjcmlwdDJPZjMoaW5wdXQ6IFR4SW5wdXQpOiBQYXJzZWRTaWduYXR1cmVTY3JpcHRQMm1zIHwgUGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdCB7XG4gIGNvbnN0IHJlc3VsdCA9IHBhcnNlU2lnbmF0dXJlU2NyaXB0KGlucHV0KTtcblxuICBpZiAoXG4gICAgIWlzU2NyaXB0VHlwZTJPZjMocmVzdWx0LnNjcmlwdFR5cGUpICYmXG4gICAgcmVzdWx0LnNjcmlwdFR5cGUgIT09ICd0YXByb290S2V5UGF0aFNwZW5kJyAmJlxuICAgIHJlc3VsdC5zY3JpcHRUeXBlICE9PSAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCdcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHNjcmlwdCB0eXBlYCk7XG4gIH1cblxuICBpZiAoIXJlc3VsdC5zaWduYXR1cmVzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBtaXNzaW5nIHNpZ25hdHVyZXNgKTtcbiAgfVxuICBpZiAoXG4gICAgcmVzdWx0LnNjcmlwdFR5cGUgIT09ICd0YXByb290S2V5UGF0aFNwZW5kJyAmJlxuICAgIHJlc3VsdC5wdWJsaWNLZXlzLmxlbmd0aCAhPT0gMyAmJlxuICAgIChyZXN1bHQucHVibGljS2V5cy5sZW5ndGggIT09IDIgfHwgcmVzdWx0LnNjcmlwdFR5cGUgIT09ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJylcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIHB1YmtleSBjb3VudGApO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdCBhcyBQYXJzZWRTaWduYXR1cmVTY3JpcHRQMm1zIHwgUGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdDtcbn1cblxuY29uc3QgcGFyc2VQMnNoUDJwa1B1YlNjcmlwdDogUHViU2NyaXB0UGFyc2VyPFBhcnNlZFB1YlNjcmlwdFAyc2hQMnBrPiA9IChwdWJTY3JpcHQsIHNjcmlwdFR5cGUpID0+IHtcbiAgaWYgKHNjcmlwdFR5cGUgIT09ICdwMnNoUDJwaycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc2NyaXB0IHR5cGUnKTtcbiAgfVxuICBjb25zdCBtYXRjaCA9IG1hdGNoU2NyaXB0KFtwdWJTY3JpcHRdLCBbeyAnOnNjcmlwdCc6IFsnOnB1YmtleScsICdPUF9DSEVDS1NJRyddIH1dKTtcbiAgaWYgKG1hdGNoIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgIHJldHVybiBtYXRjaDtcbiAgfVxuICBjb25zdCBbc2NyaXB0XSA9IG1hdGNoWyc6c2NyaXB0J107XG4gIHJldHVybiB7XG4gICAgc2NyaXB0VHlwZSxcbiAgICBwdWJsaWNLZXlzOiBzY3JpcHQubWF0Y2hbJzpwdWJrZXknXSBhcyBbQnVmZmVyXSxcbiAgICBwdWJTY3JpcHQ6IHB1YlNjcmlwdCxcbiAgICByZWRlZW1TY3JpcHQ6IHB1YlNjcmlwdCxcbiAgfTtcbn07XG5cbmNvbnN0IHBhcnNlUDJtc1B1YlNjcmlwdDogUHViU2NyaXB0UGFyc2VyPFBhcnNlZFB1YlNjcmlwdFAybXM+ID0gKHB1YlNjcmlwdCwgc2NyaXB0VHlwZSkgPT4ge1xuICBpZiAoc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnIHx8IHNjcmlwdFR5cGUgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJyB8fCBzY3JpcHRUeXBlID09PSAncDJzaFAycGsnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHNjcmlwdCB0eXBlJyk7XG4gIH1cbiAgY29uc3QgbWF0Y2ggPSBtYXRjaFNjcmlwdChcbiAgICBbcHViU2NyaXB0XSxcbiAgICBbeyAnOnNjcmlwdCc6IFsnT1BfMicsICc6cHVia2V5JywgJzpwdWJrZXknLCAnOnB1YmtleScsICdPUF8zJywgJ09QX0NIRUNLTVVMVElTSUcnXSB9XVxuICApO1xuICBpZiAobWF0Y2ggaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgcmV0dXJuIG1hdGNoO1xuICB9XG5cbiAgY29uc3QgW3JlZGVlbVNjcmlwdF0gPSBtYXRjaFsnOnNjcmlwdCddO1xuXG4gIGlmICghaXNUcmlwbGUocmVkZWVtU2NyaXB0Lm1hdGNoWyc6cHVia2V5J10pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHB1YmtleSBjb3VudCcpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzY3JpcHRUeXBlLFxuICAgIHB1YmxpY0tleXM6IHJlZGVlbVNjcmlwdC5tYXRjaFsnOnB1YmtleSddLFxuICAgIHB1YlNjcmlwdDogcmVkZWVtU2NyaXB0LmJ1ZmZlcixcbiAgICByZWRlZW1TY3JpcHQ6IHNjcmlwdFR5cGUgPT09ICdwMnNoJyA/IHJlZGVlbVNjcmlwdC5idWZmZXIgOiB1bmRlZmluZWQsXG4gICAgd2l0bmVzc1NjcmlwdDogc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMndzaCcgfHwgc2NyaXB0VHlwZSA9PT0gJ3Ayd3NoJyA/IHJlZGVlbVNjcmlwdC5idWZmZXIgOiB1bmRlZmluZWQsXG4gIH07XG59O1xuXG5jb25zdCBwYXJzZVRhcHJvb3RLZXlQYXRoUHViU2NyaXB0OiBQdWJTY3JpcHRQYXJzZXI8UGFyc2VkUHViU2NyaXB0VGFwcm9vdEtleVBhdGg+ID0gKHB1YlNjcmlwdCwgc2NyaXB0VHlwZSkgPT4ge1xuICBpZiAoXG4gICAgc2NyaXB0VHlwZSA9PT0gJ3Ayc2gnIHx8XG4gICAgc2NyaXB0VHlwZSA9PT0gJ3Ayd3NoJyB8fFxuICAgIHNjcmlwdFR5cGUgPT09ICdwMnNoUDJ3c2gnIHx8XG4gICAgc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnIHx8XG4gICAgc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc2NyaXB0IHR5cGUnKTtcbiAgfVxuICBjb25zdCBtYXRjaCA9IG1hdGNoU2NyaXB0KFtwdWJTY3JpcHRdLCBbeyAnOnNjcmlwdCc6IFsnT1BfMScsICc6cHVia2V5LXhvbmx5J10gfV0pO1xuICBpZiAobWF0Y2ggaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgcmV0dXJuIG1hdGNoO1xuICB9XG5cbiAgY29uc3QgW3NjcmlwdF0gPSBtYXRjaFsnOnNjcmlwdCddO1xuXG4gIHJldHVybiB7XG4gICAgc2NyaXB0VHlwZTogJ3RhcHJvb3RLZXlQYXRoU3BlbmQnLFxuICAgIHB1YmxpY0tleXM6IHNjcmlwdC5tYXRjaFsnOnB1YmtleS14b25seSddIGFzIFtCdWZmZXJdLFxuICAgIHB1YlNjcmlwdDogcHViU2NyaXB0LFxuICB9O1xufTtcblxuY29uc3QgcGFyc2VUYXByb290U2NyaXB0UGF0aFB1YlNjcmlwdDogUHViU2NyaXB0UGFyc2VyPFBhcnNlZFB1YlNjcmlwdFRhcHJvb3RTY3JpcHRQYXRoPiA9IChwdWJTY3JpcHQsIHNjcmlwdFR5cGUpID0+IHtcbiAgaWYgKFxuICAgIHNjcmlwdFR5cGUgPT09ICdwMnNoJyB8fFxuICAgIHNjcmlwdFR5cGUgPT09ICdwMndzaCcgfHxcbiAgICBzY3JpcHRUeXBlID09PSAncDJzaFAyd3NoJyB8fFxuICAgIHNjcmlwdFR5cGUgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJyB8fFxuICAgIHNjcmlwdFR5cGUgPT09ICdwMnNoUDJwaydcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHNjcmlwdCB0eXBlJyk7XG4gIH1cbiAgY29uc3QgbWF0Y2ggPSBtYXRjaFNjcmlwdChcbiAgICBbcHViU2NyaXB0XSxcbiAgICBbeyAnOnNjcmlwdCc6IFsnOnB1YmtleS14b25seScsICdPUF9DSEVDS1NJR1ZFUklGWScsICc6cHVia2V5LXhvbmx5JywgJ09QX0NIRUNLU0lHJ10gfV1cbiAgKTtcbiAgaWYgKG1hdGNoIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgIHJldHVybiBtYXRjaDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2NyaXB0VHlwZSxcbiAgICBwdWJTY3JpcHQ6IG1hdGNoWyc6c2NyaXB0J11bMF0uYnVmZmVyLFxuICAgIHB1YmxpY0tleXM6IG1hdGNoWyc6c2NyaXB0J11bMF0ubWF0Y2hbJzpwdWJrZXkteG9ubHknXSBhcyBbQnVmZmVyLCBCdWZmZXJdLFxuICB9O1xufTtcblxuLyoqXG4gKiBAcmV0dXJuIHB1YlNjcmlwdCAoc2NyaXB0UHViS2V5L3JlZGVlbVNjcmlwdC93aXRuZXNzU2NyaXB0KSBpcyBwYXJzZWQuXG4gKiBQMlNIID0+IHNjcmlwdFR5cGUsIHB1YlNjcmlwdCAocmVkZWVtU2NyaXB0KSwgcmVkZWVtU2NyaXB0LCBwdWJsaWMga2V5c1xuICogUFcyU0ggPT4gc2NyaXB0VHlwZSwgcHViU2NyaXB0ICh3aXRuZXNzU2NyaXB0KSwgd2l0bmVzc1NjcmlwdCwgcHVibGljIGtleXMuXG4gKiBQMlNILVBXMlNIID0+IHNjcmlwdFR5cGUsIHB1YlNjcmlwdCAod2l0bmVzc1NjcmlwdCksIHdpdG5lc3NTY3JpcHQsIHB1YmxpYyBrZXlzLlxuICogdGFwcm9vdFNjcmlwdFBhdGhTcGVuZCAoUDJUUiBhbmQgUDJUUk1VSVNHMiBzY3JpcHQgcGF0aCkgPT4gc2NyaXB0VHlwZSwgcHViU2NyaXB0LCBwdWIga2V5cy5cbiAqIHRhcHJvb3RLZXlQYXRoU3BlbmQgKFAyVFJNVUlTRzIga2V5IHBhdGgpID0+IHNjcmlwdFR5cGUsIHB1YlNjcmlwdCAoMzQtYnl0ZSBvdXRwdXQgc2NyaXB0KSwgcHViIGtleSAodGFwT3V0cHV0S2V5KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHViU2NyaXB0Mk9mMyhcbiAgaW5wdXRQdWJTY3JpcHQ6IElucHV0UHViU2NyaXB0LFxuICBzY3JpcHRUeXBlOiAndGFwcm9vdEtleVBhdGhTcGVuZCdcbik6IFBhcnNlZFB1YlNjcmlwdFRhcHJvb3RLZXlQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHViU2NyaXB0Mk9mMyhcbiAgaW5wdXRQdWJTY3JpcHQ6IElucHV0UHViU2NyaXB0LFxuICBzY3JpcHRUeXBlOiAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCdcbik6IFBhcnNlZFB1YlNjcmlwdFRhcHJvb3RTY3JpcHRQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHViU2NyaXB0Mk9mMyhcbiAgaW5wdXRQdWJTY3JpcHQ6IElucHV0UHViU2NyaXB0LFxuICBzY3JpcHRUeXBlOiAncDJzaCcgfCAncDJzaFAyd3NoJyB8ICdwMndzaCdcbik6IFBhcnNlZFB1YlNjcmlwdFAybXM7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQdWJTY3JpcHQyT2YzKFxuICBpbnB1dFB1YlNjcmlwdDogSW5wdXRQdWJTY3JpcHQsXG4gIHNjcmlwdFR5cGU6IFBhcnNlZFNjcmlwdFR5cGUyT2YzXG4pOiBQYXJzZWRQdWJTY3JpcHRQMm1zIHwgUGFyc2VkUHViU2NyaXB0VGFwcm9vdDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVB1YlNjcmlwdDJPZjMoXG4gIGlucHV0UHViU2NyaXB0OiBJbnB1dFB1YlNjcmlwdCxcbiAgc2NyaXB0VHlwZTogUGFyc2VkU2NyaXB0VHlwZTJPZjNcbik6IFBhcnNlZFB1YlNjcmlwdFAybXMgfCBQYXJzZWRQdWJTY3JpcHRUYXByb290IHtcbiAgY29uc3QgcmVzdWx0ID1cbiAgICBzY3JpcHRUeXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCdcbiAgICAgID8gcGFyc2VUYXByb290S2V5UGF0aFB1YlNjcmlwdChpbnB1dFB1YlNjcmlwdCwgc2NyaXB0VHlwZSlcbiAgICAgIDogc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnXG4gICAgICA/IHBhcnNlVGFwcm9vdFNjcmlwdFBhdGhQdWJTY3JpcHQoaW5wdXRQdWJTY3JpcHQsIHNjcmlwdFR5cGUpXG4gICAgICA6IHBhcnNlUDJtc1B1YlNjcmlwdChpbnB1dFB1YlNjcmlwdCwgc2NyaXB0VHlwZSk7XG5cbiAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocmVzdWx0Lm1lc3NhZ2UpO1xuICB9XG5cbiAgaWYgKFxuICAgIChyZXN1bHQuc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnICYmIHJlc3VsdC5wdWJsaWNLZXlzLmxlbmd0aCAhPT0gMSkgfHxcbiAgICAocmVzdWx0LnNjcmlwdFR5cGUgPT09ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJyAmJiByZXN1bHQucHVibGljS2V5cy5sZW5ndGggIT09IDIpIHx8XG4gICAgKGlzU2NyaXB0VHlwZTJPZjMocmVzdWx0LnNjcmlwdFR5cGUpICYmIHJlc3VsdC5wdWJsaWNLZXlzLmxlbmd0aCAhPT0gMylcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHB1YmtleSBjb3VudCcpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHB1YlNjcmlwdCAoc2NyaXB0UHViS2V5L3JlZGVlbVNjcmlwdC93aXRuZXNzU2NyaXB0KSBpcyBwYXJzZWQuXG4gKiBQMlNIID0+IHNjcmlwdFR5cGUsIHB1YlNjcmlwdCAocmVkZWVtU2NyaXB0KSwgcmVkZWVtU2NyaXB0LCBwdWJsaWMga2V5c1xuICogUFcyU0ggPT4gc2NyaXB0VHlwZSwgcHViU2NyaXB0ICh3aXRuZXNzU2NyaXB0KSwgd2l0bmVzc1NjcmlwdCwgcHVibGljIGtleXMuXG4gKiBQMlNILVBXMlNIID0+IHNjcmlwdFR5cGUsIHB1YlNjcmlwdCAod2l0bmVzc1NjcmlwdCksIHdpdG5lc3NTY3JpcHQsIHB1YmxpYyBrZXlzLlxuICogdGFwcm9vdFNjcmlwdFBhdGhTcGVuZCAoUDJUUiBhbmQgUDJUUk1VSVNHMiBzY3JpcHQgcGF0aCkgPT4gc2NyaXB0VHlwZSwgcHViU2NyaXB0LCBwdWIga2V5cy5cbiAqIHRhcHJvb3RLZXlQYXRoU3BlbmQgKFAyVFJNVUlTRzIga2V5IHBhdGgpID0+IHNjcmlwdFR5cGUsIHB1YlNjcmlwdCAoMzQtYnl0ZSBvdXRwdXQgc2NyaXB0KSwgcHViIGtleSAodGFwT3V0cHV0S2V5KS5cbiAqIFAyU0gtUDJQSyA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQsIHB1YiBrZXksIHJlZGVlbVNjcmlwdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHViU2NyaXB0KFxuICBpbnB1dFB1YlNjcmlwdDogSW5wdXRQdWJTY3JpcHQsXG4gIHNjcmlwdFR5cGU6ICd0YXByb290S2V5UGF0aFNwZW5kJ1xuKTogUGFyc2VkUHViU2NyaXB0VGFwcm9vdEtleVBhdGg7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQdWJTY3JpcHQoXG4gIGlucHV0UHViU2NyaXB0OiBJbnB1dFB1YlNjcmlwdCxcbiAgc2NyaXB0VHlwZTogJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnXG4pOiBQYXJzZWRQdWJTY3JpcHRUYXByb290U2NyaXB0UGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVB1YlNjcmlwdChpbnB1dFB1YlNjcmlwdDogSW5wdXRQdWJTY3JpcHQsIHNjcmlwdFR5cGU6ICdwMnNoUDJwaycpOiBQYXJzZWRQdWJTY3JpcHRQMnNoUDJwaztcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVB1YlNjcmlwdChcbiAgaW5wdXRQdWJTY3JpcHQ6IElucHV0UHViU2NyaXB0LFxuICBzY3JpcHRUeXBlOiAncDJzaCcgfCAncDJzaFAyd3NoJyB8ICdwMndzaCdcbik6IFBhcnNlZFB1YlNjcmlwdFAybXM7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQdWJTY3JpcHQoXG4gIGlucHV0UHViU2NyaXB0OiBJbnB1dFB1YlNjcmlwdCxcbiAgc2NyaXB0VHlwZTogUGFyc2VkU2NyaXB0VHlwZVxuKTogUGFyc2VkUHViU2NyaXB0UDJtcyB8IFBhcnNlZFB1YlNjcmlwdFRhcHJvb3QgfCBQYXJzZWRQdWJTY3JpcHRQMnNoUDJwaztcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVB1YlNjcmlwdChcbiAgaW5wdXRQdWJTY3JpcHQ6IElucHV0UHViU2NyaXB0LFxuICBzY3JpcHRUeXBlOiBQYXJzZWRTY3JpcHRUeXBlXG4pOiBQYXJzZWRQdWJTY3JpcHRQMm1zIHwgUGFyc2VkUHViU2NyaXB0VGFwcm9vdCB8IFBhcnNlZFB1YlNjcmlwdFAyc2hQMnBrIHtcbiAgY29uc3QgcmVzdWx0ID1cbiAgICBzY3JpcHRUeXBlID09PSAncDJzaFAycGsnXG4gICAgICA/IHBhcnNlUDJzaFAycGtQdWJTY3JpcHQoaW5wdXRQdWJTY3JpcHQsIHNjcmlwdFR5cGUpXG4gICAgICA6IHBhcnNlUHViU2NyaXB0Mk9mMyhpbnB1dFB1YlNjcmlwdCwgc2NyaXB0VHlwZSk7XG5cbiAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocmVzdWx0Lm1lc3NhZ2UpO1xuICB9XG5cbiAgaWYgKHJlc3VsdC5zY3JpcHRUeXBlID09PSAncDJzaFAycGsnICYmIHJlc3VsdC5wdWJsaWNLZXlzLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCBwdWJrZXkgY291bnQnKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iXX0=
|