@bitgo/sdk-coin-stx 4.0.9 → 4.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/lib/index.d.ts +2 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +3 -1
- package/dist/src/lib/sbtcWithdrawBuilder.d.ts +11 -0
- package/dist/src/lib/sbtcWithdrawBuilder.d.ts.map +1 -1
- package/dist/src/lib/sbtcWithdrawBuilder.js +27 -1
- package/dist/src/stx.d.ts +8 -0
- package/dist/src/stx.d.ts.map +1 -1
- package/dist/src/stx.js +36 -1
- package/dist/test/unit/stx.js +78 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
package/dist/src/lib/index.d.ts
CHANGED
|
@@ -3,5 +3,7 @@ export * from './keyPair';
|
|
|
3
3
|
export * from './transaction';
|
|
4
4
|
export * from './transactionBuilderFactory';
|
|
5
5
|
export * from './sbtcWithdrawBuilder';
|
|
6
|
+
export * from './btcAddressUtils';
|
|
7
|
+
export * from './iface';
|
|
6
8
|
export * as Utils from './utils';
|
|
7
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvE,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvE,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,SAAS,CAAC;AACxB,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC"}
|
package/dist/src/lib/index.js
CHANGED
|
@@ -44,5 +44,7 @@ __exportStar(require("./keyPair"), exports);
|
|
|
44
44
|
__exportStar(require("./transaction"), exports);
|
|
45
45
|
__exportStar(require("./transactionBuilderFactory"), exports);
|
|
46
46
|
__exportStar(require("./sbtcWithdrawBuilder"), exports);
|
|
47
|
+
__exportStar(require("./btcAddressUtils"), exports);
|
|
48
|
+
__exportStar(require("./iface"), exports);
|
|
47
49
|
exports.Utils = __importStar(require("./utils"));
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHFEQUF1RTtBQUE5RCw4R0FBQSxjQUFjLE9BQUE7QUFBRSwrR0FBQSxlQUFlLE9BQUE7QUFDeEMsNENBQTBCO0FBQzFCLGdEQUE4QjtBQUM5Qiw4REFBNEM7QUFDNUMsd0RBQXNDO0FBQ3RDLG9EQUFrQztBQUNsQywwQ0FBd0I7QUFDeEIsaURBQWlDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgQWRkcmVzc1ZlcnNpb24sIEFkZHJlc3NIYXNoTW9kZSB9IGZyb20gJ0BzdGFja3MvdHJhbnNhY3Rpb25zJztcbmV4cG9ydCAqIGZyb20gJy4va2V5UGFpcic7XG5leHBvcnQgKiBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL3NidGNXaXRoZHJhd0J1aWxkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9idGNBZGRyZXNzVXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9pZmFjZSc7XG5leHBvcnQgKiBhcyBVdGlscyBmcm9tICcuL3V0aWxzJztcbiJdfQ==
|
|
@@ -19,6 +19,17 @@ export declare class SbtcWithdrawBuilder extends AbstractContractBuilder {
|
|
|
19
19
|
*/
|
|
20
20
|
withdraw(params: SbtcWithdrawParams): this;
|
|
21
21
|
initBuilder(tx: Transaction): void;
|
|
22
|
+
/**
|
|
23
|
+
* Get the withdrawal params decoded from the deserialized/built transaction, including the
|
|
24
|
+
* raw sBTC recipient version and hash bytes (as opposed to a btcAddress string, which cannot
|
|
25
|
+
* be recovered from the on-chain args alone).
|
|
26
|
+
*/
|
|
27
|
+
getWithdrawParams(): {
|
|
28
|
+
amount: string;
|
|
29
|
+
maxFee: string;
|
|
30
|
+
recipientVersion: number;
|
|
31
|
+
recipientHashBytes: Buffer;
|
|
32
|
+
} | undefined;
|
|
22
33
|
/** @inheritdoc */
|
|
23
34
|
protected buildImplementation(): Promise<Transaction>;
|
|
24
35
|
private withdrawParamsToFunctionArgs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sbtcWithdrawBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/sbtcWithdrawBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAoD,MAAM,gBAAgB,CAAC;AAiB1G,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAMpE,qBAAa,mBAAoB,SAAQ,uBAAuB;IAC9D,OAAO,CAAC,eAAe,CAAiC;IACxD,OAAO,CAAC,eAAe,CAAS;gBAEpB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C;;OAEG;WACW,mBAAmB,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO;IAS1G;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAc1C,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAuClC,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAqB3D,OAAO,CAAC,4BAA4B;IAYpC,OAAO,CAAC,6BAA6B;CAqBtC"}
|
|
1
|
+
{"version":3,"file":"sbtcWithdrawBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/sbtcWithdrawBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAoD,MAAM,gBAAgB,CAAC;AAiB1G,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAMpE,qBAAa,mBAAoB,SAAQ,uBAAuB;IAC9D,OAAO,CAAC,eAAe,CAAiC;IACxD,OAAO,CAAC,eAAe,CAAS;gBAEpB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C;;OAEG;WACW,mBAAmB,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO;IAS1G;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAc1C,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAuClC;;;;OAIG;IACH,iBAAiB,IACb;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAA;KAAE,GACxF,SAAS;IAsBb,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAqB3D,OAAO,CAAC,4BAA4B;IAYpC,OAAO,CAAC,6BAA6B;CAqBtC"}
|
|
@@ -80,6 +80,32 @@ class SbtcWithdrawBuilder extends abstractContractBuilder_1.AbstractContractBuil
|
|
|
80
80
|
};
|
|
81
81
|
this._isDeserialized = true;
|
|
82
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Get the withdrawal params decoded from the deserialized/built transaction, including the
|
|
85
|
+
* raw sBTC recipient version and hash bytes (as opposed to a btcAddress string, which cannot
|
|
86
|
+
* be recovered from the on-chain args alone).
|
|
87
|
+
*/
|
|
88
|
+
getWithdrawParams() {
|
|
89
|
+
if (!this._withdrawParams) {
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
const payload = this.transaction.stxTransaction.payload;
|
|
93
|
+
const recipientTuple = payload.functionArgs[1];
|
|
94
|
+
if (recipientTuple?.type !== transactions_1.ClarityType.Tuple) {
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
const versionBuf = recipientTuple.data['version'];
|
|
98
|
+
const hashbytesBuf = recipientTuple.data['hashbytes'];
|
|
99
|
+
if (versionBuf?.type !== transactions_1.ClarityType.Buffer || hashbytesBuf?.type !== transactions_1.ClarityType.Buffer) {
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
amount: this._withdrawParams.amount,
|
|
104
|
+
maxFee: this._withdrawParams.maxFee,
|
|
105
|
+
recipientVersion: versionBuf.buffer[0],
|
|
106
|
+
recipientHashBytes: Buffer.from(hashbytesBuf.buffer),
|
|
107
|
+
};
|
|
108
|
+
}
|
|
83
109
|
/** @inheritdoc */
|
|
84
110
|
async buildImplementation() {
|
|
85
111
|
if (!this._withdrawParams) {
|
|
@@ -121,4 +147,4 @@ class SbtcWithdrawBuilder extends abstractContractBuilder_1.AbstractContractBuil
|
|
|
121
147
|
}
|
|
122
148
|
}
|
|
123
149
|
exports.SbtcWithdrawBuilder = SbtcWithdrawBuilder;
|
|
124
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2J0Y1dpdGhkcmF3QnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvc2J0Y1dpdGhkcmF3QnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw0Q0FBMEc7QUFDMUcsa0RBQTJCO0FBQzNCLHVEQWE4QjtBQUM5Qiw4Q0FBd0Q7QUFFeEQsbUNBQWtFO0FBRWxFLDJDQUErRjtBQUUvRix1RUFBb0U7QUFDcEUsdURBQXdFO0FBRXhFLE1BQU0sd0JBQXdCLEdBQUcsWUFBWSxDQUFDO0FBQzlDLE1BQU0scUJBQXFCLEdBQUcsWUFBWSxDQUFDO0FBRTNDLE1BQWEsbUJBQW9CLFNBQVEsaURBQXVCO0lBSTlELFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBSGIsb0JBQWUsR0FBRyxLQUFLLENBQUM7SUFJaEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLG1CQUFtQixDQUFDLFVBQWdDLEVBQUUsT0FBNEI7UUFDOUYsT0FBTyxDQUNKLFVBQVUsQ0FBQyxPQUE4QixDQUFDLDZCQUE2QjtZQUN0RSxJQUFBLDhCQUFlLEVBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztZQUMxQyx5Q0FBNkIsS0FBSyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU87WUFDOUQsNkNBQWlDLEtBQUssT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQ25FLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxRQUFRLENBQUMsTUFBMEI7UUFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFBLHFCQUFhLEVBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDN0UsTUFBTSxJQUFJLGdDQUFxQixDQUFDLGtDQUFrQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RixD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QTBCO1FBQzlELE1BQU0sTUFBTSxHQUFHLElBQUksZUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxlQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDeEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUE2QixDQUFDO1FBQy9ELE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLDZCQUE2QixDQUFDO1FBRWxFLE9BQU87WUFDTCxJQUFBLGdEQUFpQyxFQUMvQixJQUFBLGdDQUF3QixFQUN0QixJQUFJLENBQUMsWUFBWSxFQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUsscUJBQVcsQ0FBQyxPQUFPO2dCQUNuRCxDQUFDLENBQUMsNkJBQWMsQ0FBQyxlQUFlO2dCQUNoQyxDQUFDLENBQUMsNkJBQWMsQ0FBQyxlQUFlLEVBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsOEJBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLDhCQUFlLENBQUMsY0FBYyxFQUM3RixJQUFJLENBQUMsaUJBQWlCLENBQ3ZCLENBQUMsT0FBTyxFQUNULG9DQUFxQixDQUFDLEtBQUssRUFDM0IsTUFBTSxFQUNOLElBQUEsOEJBQWUsRUFBQyxtQkFBbUIsRUFBRSx3QkFBd0IsRUFBRSxxQkFBcUIsQ0FBQyxDQUN0RjtTQUNGLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUF0SUQsa0RBc0lDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZywgTmV0d29ya1R5cGUsIFN0YWNrc05ldHdvcmsgYXMgQml0Z29TdGFja3NOZXR3b3JrIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IEJpZ051bSBmcm9tICdibi5qcyc7XG5pbXBvcnQge1xuICBBZGRyZXNzSGFzaE1vZGUsXG4gIGFkZHJlc3NUb1N0cmluZyxcbiAgQWRkcmVzc1ZlcnNpb24sXG4gIGJ1ZmZlckNWLFxuICBDbGFyaXR5VHlwZSxcbiAgY3JlYXRlQXNzZXRJbmZvLFxuICBGdW5naWJsZUNvbmRpdGlvbkNvZGUsXG4gIG1ha2VTdGFuZGFyZEZ1bmdpYmxlUG9zdENvbmRpdGlvbixcbiAgUG9zdENvbmRpdGlvbixcbiAgUG9zdENvbmRpdGlvbk1vZGUsXG4gIHR1cGxlQ1YsXG4gIHVpbnRDVixcbn0gZnJvbSAnQHN0YWNrcy90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgQnVpbGRUcmFuc2FjdGlvbkVycm9yIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBnZXRTVFhBZGRyZXNzRnJvbVB1YktleXMsIGlzVmFsaWRBbW91bnQgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFNidGNXaXRoZHJhd1BhcmFtcyB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgQ09OVFJBQ1RfTkFNRV9TQlRDX1dJVEhEUkFXQUwsIEZVTkNUSU9OX05BTUVfSU5JVElBVEVfV0lUSERSQVdBTCB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IENvbnRyYWN0Q2FsbFBheWxvYWQgfSBmcm9tICdAc3RhY2tzL3RyYW5zYWN0aW9ucy9kaXN0L3BheWxvYWQnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cmFjdEJ1aWxkZXIgfSBmcm9tICcuL2Fic3RyYWN0Q29udHJhY3RCdWlsZGVyJztcbmltcG9ydCB7IGRlY29kZUJ0Y0FkZHJlc3MsIGlzVmFsaWRCdGNBZGRyZXNzIH0gZnJvbSAnLi9idGNBZGRyZXNzVXRpbHMnO1xuXG5jb25zdCBTQlRDX1RPS0VOX0NPTlRSQUNUX05BTUUgPSAnc2J0Yy10b2tlbic7XG5jb25zdCBTQlRDX1RPS0VOX0FTU0VUX05BTUUgPSAnc2J0Yy10b2tlbic7XG5cbmV4cG9ydCBjbGFzcyBTYnRjV2l0aGRyYXdCdWlsZGVyIGV4dGVuZHMgQWJzdHJhY3RDb250cmFjdEJ1aWxkZXIge1xuICBwcml2YXRlIF93aXRoZHJhd1BhcmFtczogU2J0Y1dpdGhkcmF3UGFyYW1zIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9pc0Rlc2VyaWFsaXplZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIGEgZGVzZXJpYWxpemVkIGNvbnRyYWN0LWNhbGwgcGF5bG9hZCBtYXRjaGVzIHRoZSBzQlRDIHdpdGhkcmF3YWwgY29udHJhY3QuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlzVmFsaWRDb250cmFjdENhbGwoY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4sIHBheWxvYWQ6IENvbnRyYWN0Q2FsbFBheWxvYWQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgKGNvaW5Db25maWcubmV0d29yayBhcyBCaXRnb1N0YWNrc05ldHdvcmspLnNidGNXaXRoZHJhd2FsQ29udHJhY3RBZGRyZXNzID09PVxuICAgICAgICBhZGRyZXNzVG9TdHJpbmcocGF5bG9hZC5jb250cmFjdEFkZHJlc3MpICYmXG4gICAgICBDT05UUkFDVF9OQU1FX1NCVENfV0lUSERSQVdBTCA9PT0gcGF5bG9hZC5jb250cmFjdE5hbWUuY29udGVudCAmJlxuICAgICAgRlVOQ1RJT05fTkFNRV9JTklUSUFURV9XSVRIRFJBV0FMID09PSBwYXlsb2FkLmZ1bmN0aW9uTmFtZS5jb250ZW50XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgd2l0aGRyYXdhbCBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge1NidGNXaXRoZHJhd1BhcmFtc30gcGFyYW1zIC0gYW1vdW50IChzYXRvc2hpcyksIGJ0Y0FkZHJlc3MsIG1heEZlZVxuICAgKiBAcmV0dXJucyB7dGhpc31cbiAgICovXG4gIHdpdGhkcmF3KHBhcmFtczogU2J0Y1dpdGhkcmF3UGFyYW1zKTogdGhpcyB7XG4gICAgaWYgKCFwYXJhbXMuYW1vdW50IHx8ICFpc1ZhbGlkQW1vdW50KHBhcmFtcy5hbW91bnQpIHx8IHBhcmFtcy5hbW91bnQgPT09ICcwJykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBvciBtaXNzaW5nIGFtb3VudCwgZ290OiAnICsgcGFyYW1zLmFtb3VudCk7XG4gICAgfVxuICAgIGlmICghcGFyYW1zLmJ0Y0FkZHJlc3MgfHwgIWlzVmFsaWRCdGNBZGRyZXNzKHBhcmFtcy5idGNBZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBvciBtaXNzaW5nIGJ0Y0FkZHJlc3MsIGdvdDogJyArIHBhcmFtcy5idGNBZGRyZXNzKTtcbiAgICB9XG4gICAgaWYgKCFwYXJhbXMubWF4RmVlIHx8ICFpc1ZhbGlkQW1vdW50KHBhcmFtcy5tYXhGZWUpIHx8IHBhcmFtcy5tYXhGZWUgPT09ICcwJykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBvciBtaXNzaW5nIG1heEZlZSwgZ290OiAnICsgcGFyYW1zLm1heEZlZSk7XG4gICAgfVxuICAgIHRoaXMuX3dpdGhkcmF3UGFyYW1zID0gcGFyYW1zO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaW5pdEJ1aWxkZXIodHg6IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgc3VwZXIuaW5pdEJ1aWxkZXIodHgpO1xuICAgIGNvbnN0IHBheWxvYWQgPSB0eC5zdHhUcmFuc2FjdGlvbi5wYXlsb2FkIGFzIENvbnRyYWN0Q2FsbFBheWxvYWQ7XG4gICAgY29uc3QgYXJncyA9IHBheWxvYWQuZnVuY3Rpb25BcmdzO1xuXG4gICAgaWYgKGFyZ3MubGVuZ3RoICE9PSAzKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIG51bWJlciBvZiBmdW5jdGlvbiBhcmdzIGZvciBzQlRDIHdpdGhkcmF3YWwnKTtcbiAgICB9XG5cbiAgICAvLyBhcmdzWzBdID0gdWludCAoYW1vdW50KVxuICAgIGlmIChhcmdzWzBdLnR5cGUgIT09IENsYXJpdHlUeXBlLlVJbnQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0V4cGVjdGVkIHVpbnQgZm9yIGFtb3VudCBhcmd1bWVudCcpO1xuICAgIH1cbiAgICBjb25zdCBhbW91bnQgPSBhcmdzWzBdLnZhbHVlLnRvU3RyaW5nKCk7XG5cbiAgICAvLyBhcmdzWzFdID0gdHVwbGUgeyB2ZXJzaW9uOiAoYnVmZiAxKSwgaGFzaGJ5dGVzOiAoYnVmZiAzMikgfVxuICAgIGlmIChhcmdzWzFdLnR5cGUgIT09IENsYXJpdHlUeXBlLlR1cGxlKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdFeHBlY3RlZCB0dXBsZSBmb3IgcmVjaXBpZW50IGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGNvbnN0IHZlcnNpb25CdWYgPSBhcmdzWzFdLmRhdGFbJ3ZlcnNpb24nXTtcbiAgICBjb25zdCBoYXNoYnl0ZXNCdWYgPSBhcmdzWzFdLmRhdGFbJ2hhc2hieXRlcyddO1xuICAgIGlmICh2ZXJzaW9uQnVmPy50eXBlICE9PSBDbGFyaXR5VHlwZS5CdWZmZXIgfHwgaGFzaGJ5dGVzQnVmPy50eXBlICE9PSBDbGFyaXR5VHlwZS5CdWZmZXIpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0V4cGVjdGVkIGJ1ZmZlciBmaWVsZHMgaW4gcmVjaXBpZW50IHR1cGxlJyk7XG4gICAgfVxuXG4gICAgLy8gYXJnc1syXSA9IHVpbnQgKG1heC1mZWUpXG4gICAgaWYgKGFyZ3NbMl0udHlwZSAhPT0gQ2xhcml0eVR5cGUuVUludCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignRXhwZWN0ZWQgdWludCBmb3IgbWF4LWZlZSBhcmd1bWVudCcpO1xuICAgIH1cbiAgICBjb25zdCBtYXhGZWUgPSBhcmdzWzJdLnZhbHVlLnRvU3RyaW5nKCk7XG5cbiAgICB0aGlzLl93aXRoZHJhd1BhcmFtcyA9IHtcbiAgICAgIGFtb3VudCxcbiAgICAgIGJ0Y0FkZHJlc3M6ICcnLCAvLyBub3QgbmVlZGVkIGZvciByZWJ1aWxkOyBmdW5jdGlvbiBhcmdzIGFyZSBwcmVzZXJ2ZWQgZnJvbSB0aGUgb3JpZ2luYWwgdHhcbiAgICAgIG1heEZlZSxcbiAgICB9O1xuICAgIHRoaXMuX2lzRGVzZXJpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgaWYgKCF0aGlzLl93aXRoZHJhd1BhcmFtcykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignV2l0aGRyYXdhbCBwYXJhbXMgYXJlIG5vdCBzZXQuIFVzZSB3aXRoZHJhdygpIHRvIHNldCB0aGVtLicpO1xuICAgIH1cblxuICAgIGNvbnN0IG5ldHdvcmsgPSB0aGlzLl9jb2luQ29uZmlnLm5ldHdvcmsgYXMgQml0Z29TdGFja3NOZXR3b3JrO1xuICAgIHRoaXMuX2NvbnRyYWN0QWRkcmVzcyA9IG5ldHdvcmsuc2J0Y1dpdGhkcmF3YWxDb250cmFjdEFkZHJlc3M7XG4gICAgdGhpcy5fY29udHJhY3ROYW1lID0gQ09OVFJBQ1RfTkFNRV9TQlRDX1dJVEhEUkFXQUw7XG4gICAgdGhpcy5fZnVuY3Rpb25OYW1lID0gRlVOQ1RJT05fTkFNRV9JTklUSUFURV9XSVRIRFJBV0FMO1xuXG4gICAgLy8gRm9yIGRlc2VyaWFsaXplZCB0cmFuc2FjdGlvbnMsIGZ1bmN0aW9uIGFyZ3MgYXJlIGFscmVhZHkgcHJlc2VydmVkIGZyb20gdGhlIG9yaWdpbmFsIHR4LlxuICAgIC8vIEZvciBmcmVzaCBidWlsZHMsIGNvbnN0cnVjdCB0aGVtIGZyb20gdGhlIHdpdGhkcmF3IHBhcmFtcy5cbiAgICBpZiAoIXRoaXMuX2lzRGVzZXJpYWxpemVkKSB7XG4gICAgICB0aGlzLl9mdW5jdGlvbkFyZ3MgPSB0aGlzLndpdGhkcmF3UGFyYW1zVG9GdW5jdGlvbkFyZ3ModGhpcy5fd2l0aGRyYXdQYXJhbXMpO1xuICAgIH1cblxuICAgIHRoaXMuX3Bvc3RDb25kaXRpb25Nb2RlID0gUG9zdENvbmRpdGlvbk1vZGUuRGVueTtcbiAgICB0aGlzLl9wb3N0Q29uZGl0aW9ucyA9IHRoaXMud2l0aGRyYXdQYXJhbXNUb1Bvc3RDb25kaXRpb24odGhpcy5fd2l0aGRyYXdQYXJhbXMpO1xuICAgIHJldHVybiBhd2FpdCBzdXBlci5idWlsZEltcGxlbWVudGF0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIHdpdGhkcmF3UGFyYW1zVG9GdW5jdGlvbkFyZ3MocGFyYW1zOiBTYnRjV2l0aGRyYXdQYXJhbXMpIHtcbiAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlQnRjQWRkcmVzcyhwYXJhbXMuYnRjQWRkcmVzcyk7XG4gICAgcmV0dXJuIFtcbiAgICAgIHVpbnRDVihwYXJhbXMuYW1vdW50KSxcbiAgICAgIHR1cGxlQ1Yoe1xuICAgICAgICB2ZXJzaW9uOiBidWZmZXJDVihCdWZmZXIuZnJvbShbZGVjb2RlZC52ZXJzaW9uXSkpLFxuICAgICAgICBoYXNoYnl0ZXM6IGJ1ZmZlckNWKGRlY29kZWQuaGFzaEJ5dGVzKSxcbiAgICAgIH0pLFxuICAgICAgdWludENWKHBhcmFtcy5tYXhGZWUpLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIHdpdGhkcmF3UGFyYW1zVG9Qb3N0Q29uZGl0aW9uKHBhcmFtczogU2J0Y1dpdGhkcmF3UGFyYW1zKTogUG9zdENvbmRpdGlvbltdIHtcbiAgICBjb25zdCBhbW91bnQgPSBuZXcgQmlnTnVtKHBhcmFtcy5hbW91bnQpLmFkZChuZXcgQmlnTnVtKHBhcmFtcy5tYXhGZWUpKTtcbiAgICBjb25zdCBuZXR3b3JrID0gdGhpcy5fY29pbkNvbmZpZy5uZXR3b3JrIGFzIEJpdGdvU3RhY2tzTmV0d29yaztcbiAgICBjb25zdCBzYnRjQ29udHJhY3RBZGRyZXNzID0gbmV0d29yay5zYnRjV2l0aGRyYXdhbENvbnRyYWN0QWRkcmVzcztcblxuICAgIHJldHVybiBbXG4gICAgICBtYWtlU3RhbmRhcmRGdW5naWJsZVBvc3RDb25kaXRpb24oXG4gICAgICAgIGdldFNUWEFkZHJlc3NGcm9tUHViS2V5cyhcbiAgICAgICAgICB0aGlzLl9mcm9tUHViS2V5cyxcbiAgICAgICAgICB0aGlzLl9jb2luQ29uZmlnLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVFxuICAgICAgICAgICAgPyBBZGRyZXNzVmVyc2lvbi5NYWlubmV0TXVsdGlTaWdcbiAgICAgICAgICAgIDogQWRkcmVzc1ZlcnNpb24uVGVzdG5ldE11bHRpU2lnLFxuICAgICAgICAgIHRoaXMuX2Zyb21QdWJLZXlzLmxlbmd0aCA+IDEgPyBBZGRyZXNzSGFzaE1vZGUuU2VyaWFsaXplUDJTSCA6IEFkZHJlc3NIYXNoTW9kZS5TZXJpYWxpemVQMlBLSCxcbiAgICAgICAgICB0aGlzLl9udW1iZXJTaWduYXR1cmVzXG4gICAgICAgICkuYWRkcmVzcyxcbiAgICAgICAgRnVuZ2libGVDb25kaXRpb25Db2RlLkVxdWFsLFxuICAgICAgICBhbW91bnQsXG4gICAgICAgIGNyZWF0ZUFzc2V0SW5mbyhzYnRjQ29udHJhY3RBZGRyZXNzLCBTQlRDX1RPS0VOX0NPTlRSQUNUX05BTUUsIFNCVENfVE9LRU5fQVNTRVRfTkFNRSlcbiAgICAgICksXG4gICAgXTtcbiAgfVxufVxuIl19
|
|
150
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2J0Y1dpdGhkcmF3QnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvc2J0Y1dpdGhkcmF3QnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw0Q0FBMEc7QUFDMUcsa0RBQTJCO0FBQzNCLHVEQWE4QjtBQUM5Qiw4Q0FBd0Q7QUFFeEQsbUNBQWtFO0FBRWxFLDJDQUErRjtBQUUvRix1RUFBb0U7QUFDcEUsdURBQXdFO0FBRXhFLE1BQU0sd0JBQXdCLEdBQUcsWUFBWSxDQUFDO0FBQzlDLE1BQU0scUJBQXFCLEdBQUcsWUFBWSxDQUFDO0FBRTNDLE1BQWEsbUJBQW9CLFNBQVEsaURBQXVCO0lBSTlELFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBSGIsb0JBQWUsR0FBRyxLQUFLLENBQUM7SUFJaEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLG1CQUFtQixDQUFDLFVBQWdDLEVBQUUsT0FBNEI7UUFDOUYsT0FBTyxDQUNKLFVBQVUsQ0FBQyxPQUE4QixDQUFDLDZCQUE2QjtZQUN0RSxJQUFBLDhCQUFlLEVBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztZQUMxQyx5Q0FBNkIsS0FBSyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU87WUFDOUQsNkNBQWlDLEtBQUssT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQ25FLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxRQUFRLENBQUMsTUFBMEI7UUFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFBLHFCQUFhLEVBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDN0UsTUFBTSxJQUFJLGdDQUFxQixDQUFDLGtDQUFrQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RixD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QUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUE2QixDQUFDO1FBQy9ELE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLDZCQUE2QixDQUFDO1FBRWxFLE9BQU87WUFDTCxJQUFBLGdEQUFpQyxFQUMvQixJQUFBLGdDQUF3QixFQUN0QixJQUFJLENBQUMsWUFBWSxFQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUsscUJBQVcsQ0FBQyxPQUFPO2dCQUNuRCxDQUFDLENBQUMsNkJBQWMsQ0FBQyxlQUFlO2dCQUNoQyxDQUFDLENBQUMsNkJBQWMsQ0FBQyxlQUFlLEVBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsOEJBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLDhCQUFlLENBQUMsY0FBYyxFQUM3RixJQUFJLENBQUMsaUJBQWlCLENBQ3ZCLENBQUMsT0FBTyxFQUNULG9DQUFxQixDQUFDLEtBQUssRUFDM0IsTUFBTSxFQUNOLElBQUEsOEJBQWUsRUFBQyxtQkFBbUIsRUFBRSx3QkFBd0IsRUFBRSxxQkFBcUIsQ0FBQyxDQUN0RjtTQUNGLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFuS0Qsa0RBbUtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZywgTmV0d29ya1R5cGUsIFN0YWNrc05ldHdvcmsgYXMgQml0Z29TdGFja3NOZXR3b3JrIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IEJpZ051bSBmcm9tICdibi5qcyc7XG5pbXBvcnQge1xuICBBZGRyZXNzSGFzaE1vZGUsXG4gIGFkZHJlc3NUb1N0cmluZyxcbiAgQWRkcmVzc1ZlcnNpb24sXG4gIGJ1ZmZlckNWLFxuICBDbGFyaXR5VHlwZSxcbiAgY3JlYXRlQXNzZXRJbmZvLFxuICBGdW5naWJsZUNvbmRpdGlvbkNvZGUsXG4gIG1ha2VTdGFuZGFyZEZ1bmdpYmxlUG9zdENvbmRpdGlvbixcbiAgUG9zdENvbmRpdGlvbixcbiAgUG9zdENvbmRpdGlvbk1vZGUsXG4gIHR1cGxlQ1YsXG4gIHVpbnRDVixcbn0gZnJvbSAnQHN0YWNrcy90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgQnVpbGRUcmFuc2FjdGlvbkVycm9yIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBnZXRTVFhBZGRyZXNzRnJvbVB1YktleXMsIGlzVmFsaWRBbW91bnQgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFNidGNXaXRoZHJhd1BhcmFtcyB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgQ09OVFJBQ1RfTkFNRV9TQlRDX1dJVEhEUkFXQUwsIEZVTkNUSU9OX05BTUVfSU5JVElBVEVfV0lUSERSQVdBTCB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IENvbnRyYWN0Q2FsbFBheWxvYWQgfSBmcm9tICdAc3RhY2tzL3RyYW5zYWN0aW9ucy9kaXN0L3BheWxvYWQnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cmFjdEJ1aWxkZXIgfSBmcm9tICcuL2Fic3RyYWN0Q29udHJhY3RCdWlsZGVyJztcbmltcG9ydCB7IGRlY29kZUJ0Y0FkZHJlc3MsIGlzVmFsaWRCdGNBZGRyZXNzIH0gZnJvbSAnLi9idGNBZGRyZXNzVXRpbHMnO1xuXG5jb25zdCBTQlRDX1RPS0VOX0NPTlRSQUNUX05BTUUgPSAnc2J0Yy10b2tlbic7XG5jb25zdCBTQlRDX1RPS0VOX0FTU0VUX05BTUUgPSAnc2J0Yy10b2tlbic7XG5cbmV4cG9ydCBjbGFzcyBTYnRjV2l0aGRyYXdCdWlsZGVyIGV4dGVuZHMgQWJzdHJhY3RDb250cmFjdEJ1aWxkZXIge1xuICBwcml2YXRlIF93aXRoZHJhd1BhcmFtczogU2J0Y1dpdGhkcmF3UGFyYW1zIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9pc0Rlc2VyaWFsaXplZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIGEgZGVzZXJpYWxpemVkIGNvbnRyYWN0LWNhbGwgcGF5bG9hZCBtYXRjaGVzIHRoZSBzQlRDIHdpdGhkcmF3YWwgY29udHJhY3QuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlzVmFsaWRDb250cmFjdENhbGwoY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4sIHBheWxvYWQ6IENvbnRyYWN0Q2FsbFBheWxvYWQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgKGNvaW5Db25maWcubmV0d29yayBhcyBCaXRnb1N0YWNrc05ldHdvcmspLnNidGNXaXRoZHJhd2FsQ29udHJhY3RBZGRyZXNzID09PVxuICAgICAgICBhZGRyZXNzVG9TdHJpbmcocGF5bG9hZC5jb250cmFjdEFkZHJlc3MpICYmXG4gICAgICBDT05UUkFDVF9OQU1FX1NCVENfV0lUSERSQVdBTCA9PT0gcGF5bG9hZC5jb250cmFjdE5hbWUuY29udGVudCAmJlxuICAgICAgRlVOQ1RJT05fTkFNRV9JTklUSUFURV9XSVRIRFJBV0FMID09PSBwYXlsb2FkLmZ1bmN0aW9uTmFtZS5jb250ZW50XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgd2l0aGRyYXdhbCBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge1NidGNXaXRoZHJhd1BhcmFtc30gcGFyYW1zIC0gYW1vdW50IChzYXRvc2hpcyksIGJ0Y0FkZHJlc3MsIG1heEZlZVxuICAgKiBAcmV0dXJucyB7dGhpc31cbiAgICovXG4gIHdpdGhkcmF3KHBhcmFtczogU2J0Y1dpdGhkcmF3UGFyYW1zKTogdGhpcyB7XG4gICAgaWYgKCFwYXJhbXMuYW1vdW50IHx8ICFpc1ZhbGlkQW1vdW50KHBhcmFtcy5hbW91bnQpIHx8IHBhcmFtcy5hbW91bnQgPT09ICcwJykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBvciBtaXNzaW5nIGFtb3VudCwgZ290OiAnICsgcGFyYW1zLmFtb3VudCk7XG4gICAgfVxuICAgIGlmICghcGFyYW1zLmJ0Y0FkZHJlc3MgfHwgIWlzVmFsaWRCdGNBZGRyZXNzKHBhcmFtcy5idGNBZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBvciBtaXNzaW5nIGJ0Y0FkZHJlc3MsIGdvdDogJyArIHBhcmFtcy5idGNBZGRyZXNzKTtcbiAgICB9XG4gICAgaWYgKCFwYXJhbXMubWF4RmVlIHx8ICFpc1ZhbGlkQW1vdW50KHBhcmFtcy5tYXhGZWUpIHx8IHBhcmFtcy5tYXhGZWUgPT09ICcwJykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBvciBtaXNzaW5nIG1heEZlZSwgZ290OiAnICsgcGFyYW1zLm1heEZlZSk7XG4gICAgfVxuICAgIHRoaXMuX3dpdGhkcmF3UGFyYW1zID0gcGFyYW1zO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaW5pdEJ1aWxkZXIodHg6IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgc3VwZXIuaW5pdEJ1aWxkZXIodHgpO1xuICAgIGNvbnN0IHBheWxvYWQgPSB0eC5zdHhUcmFuc2FjdGlvbi5wYXlsb2FkIGFzIENvbnRyYWN0Q2FsbFBheWxvYWQ7XG4gICAgY29uc3QgYXJncyA9IHBheWxvYWQuZnVuY3Rpb25BcmdzO1xuXG4gICAgaWYgKGFyZ3MubGVuZ3RoICE9PSAzKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIG51bWJlciBvZiBmdW5jdGlvbiBhcmdzIGZvciBzQlRDIHdpdGhkcmF3YWwnKTtcbiAgICB9XG5cbiAgICAvLyBhcmdzWzBdID0gdWludCAoYW1vdW50KVxuICAgIGlmIChhcmdzWzBdLnR5cGUgIT09IENsYXJpdHlUeXBlLlVJbnQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0V4cGVjdGVkIHVpbnQgZm9yIGFtb3VudCBhcmd1bWVudCcpO1xuICAgIH1cbiAgICBjb25zdCBhbW91bnQgPSBhcmdzWzBdLnZhbHVlLnRvU3RyaW5nKCk7XG5cbiAgICAvLyBhcmdzWzFdID0gdHVwbGUgeyB2ZXJzaW9uOiAoYnVmZiAxKSwgaGFzaGJ5dGVzOiAoYnVmZiAzMikgfVxuICAgIGlmIChhcmdzWzFdLnR5cGUgIT09IENsYXJpdHlUeXBlLlR1cGxlKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdFeHBlY3RlZCB0dXBsZSBmb3IgcmVjaXBpZW50IGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGNvbnN0IHZlcnNpb25CdWYgPSBhcmdzWzFdLmRhdGFbJ3ZlcnNpb24nXTtcbiAgICBjb25zdCBoYXNoYnl0ZXNCdWYgPSBhcmdzWzFdLmRhdGFbJ2hhc2hieXRlcyddO1xuICAgIGlmICh2ZXJzaW9uQnVmPy50eXBlICE9PSBDbGFyaXR5VHlwZS5CdWZmZXIgfHwgaGFzaGJ5dGVzQnVmPy50eXBlICE9PSBDbGFyaXR5VHlwZS5CdWZmZXIpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0V4cGVjdGVkIGJ1ZmZlciBmaWVsZHMgaW4gcmVjaXBpZW50IHR1cGxlJyk7XG4gICAgfVxuXG4gICAgLy8gYXJnc1syXSA9IHVpbnQgKG1heC1mZWUpXG4gICAgaWYgKGFyZ3NbMl0udHlwZSAhPT0gQ2xhcml0eVR5cGUuVUludCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignRXhwZWN0ZWQgdWludCBmb3IgbWF4LWZlZSBhcmd1bWVudCcpO1xuICAgIH1cbiAgICBjb25zdCBtYXhGZWUgPSBhcmdzWzJdLnZhbHVlLnRvU3RyaW5nKCk7XG5cbiAgICB0aGlzLl93aXRoZHJhd1BhcmFtcyA9IHtcbiAgICAgIGFtb3VudCxcbiAgICAgIGJ0Y0FkZHJlc3M6ICcnLCAvLyBub3QgbmVlZGVkIGZvciByZWJ1aWxkOyBmdW5jdGlvbiBhcmdzIGFyZSBwcmVzZXJ2ZWQgZnJvbSB0aGUgb3JpZ2luYWwgdHhcbiAgICAgIG1heEZlZSxcbiAgICB9O1xuICAgIHRoaXMuX2lzRGVzZXJpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHdpdGhkcmF3YWwgcGFyYW1zIGRlY29kZWQgZnJvbSB0aGUgZGVzZXJpYWxpemVkL2J1aWx0IHRyYW5zYWN0aW9uLCBpbmNsdWRpbmcgdGhlXG4gICAqIHJhdyBzQlRDIHJlY2lwaWVudCB2ZXJzaW9uIGFuZCBoYXNoIGJ5dGVzIChhcyBvcHBvc2VkIHRvIGEgYnRjQWRkcmVzcyBzdHJpbmcsIHdoaWNoIGNhbm5vdFxuICAgKiBiZSByZWNvdmVyZWQgZnJvbSB0aGUgb24tY2hhaW4gYXJncyBhbG9uZSkuXG4gICAqL1xuICBnZXRXaXRoZHJhd1BhcmFtcygpOlxuICAgIHwgeyBhbW91bnQ6IHN0cmluZzsgbWF4RmVlOiBzdHJpbmc7IHJlY2lwaWVudFZlcnNpb246IG51bWJlcjsgcmVjaXBpZW50SGFzaEJ5dGVzOiBCdWZmZXIgfVxuICAgIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMuX3dpdGhkcmF3UGFyYW1zKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBwYXlsb2FkID0gdGhpcy50cmFuc2FjdGlvbi5zdHhUcmFuc2FjdGlvbi5wYXlsb2FkIGFzIENvbnRyYWN0Q2FsbFBheWxvYWQ7XG4gICAgY29uc3QgcmVjaXBpZW50VHVwbGUgPSBwYXlsb2FkLmZ1bmN0aW9uQXJnc1sxXTtcbiAgICBpZiAocmVjaXBpZW50VHVwbGU/LnR5cGUgIT09IENsYXJpdHlUeXBlLlR1cGxlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCB2ZXJzaW9uQnVmID0gcmVjaXBpZW50VHVwbGUuZGF0YVsndmVyc2lvbiddO1xuICAgIGNvbnN0IGhhc2hieXRlc0J1ZiA9IHJlY2lwaWVudFR1cGxlLmRhdGFbJ2hhc2hieXRlcyddO1xuICAgIGlmICh2ZXJzaW9uQnVmPy50eXBlICE9PSBDbGFyaXR5VHlwZS5CdWZmZXIgfHwgaGFzaGJ5dGVzQnVmPy50eXBlICE9PSBDbGFyaXR5VHlwZS5CdWZmZXIpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBhbW91bnQ6IHRoaXMuX3dpdGhkcmF3UGFyYW1zLmFtb3VudCxcbiAgICAgIG1heEZlZTogdGhpcy5fd2l0aGRyYXdQYXJhbXMubWF4RmVlLFxuICAgICAgcmVjaXBpZW50VmVyc2lvbjogdmVyc2lvbkJ1Zi5idWZmZXJbMF0sXG4gICAgICByZWNpcGllbnRIYXNoQnl0ZXM6IEJ1ZmZlci5mcm9tKGhhc2hieXRlc0J1Zi5idWZmZXIpLFxuICAgIH07XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGlmICghdGhpcy5fd2l0aGRyYXdQYXJhbXMpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1dpdGhkcmF3YWwgcGFyYW1zIGFyZSBub3Qgc2V0LiBVc2Ugd2l0aGRyYXcoKSB0byBzZXQgdGhlbS4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXR3b3JrID0gdGhpcy5fY29pbkNvbmZpZy5uZXR3b3JrIGFzIEJpdGdvU3RhY2tzTmV0d29yaztcbiAgICB0aGlzLl9jb250cmFjdEFkZHJlc3MgPSBuZXR3b3JrLnNidGNXaXRoZHJhd2FsQ29udHJhY3RBZGRyZXNzO1xuICAgIHRoaXMuX2NvbnRyYWN0TmFtZSA9IENPTlRSQUNUX05BTUVfU0JUQ19XSVRIRFJBV0FMO1xuICAgIHRoaXMuX2Z1bmN0aW9uTmFtZSA9IEZVTkNUSU9OX05BTUVfSU5JVElBVEVfV0lUSERSQVdBTDtcblxuICAgIC8vIEZvciBkZXNlcmlhbGl6ZWQgdHJhbnNhY3Rpb25zLCBmdW5jdGlvbiBhcmdzIGFyZSBhbHJlYWR5IHByZXNlcnZlZCBmcm9tIHRoZSBvcmlnaW5hbCB0eC5cbiAgICAvLyBGb3IgZnJlc2ggYnVpbGRzLCBjb25zdHJ1Y3QgdGhlbSBmcm9tIHRoZSB3aXRoZHJhdyBwYXJhbXMuXG4gICAgaWYgKCF0aGlzLl9pc0Rlc2VyaWFsaXplZCkge1xuICAgICAgdGhpcy5fZnVuY3Rpb25BcmdzID0gdGhpcy53aXRoZHJhd1BhcmFtc1RvRnVuY3Rpb25BcmdzKHRoaXMuX3dpdGhkcmF3UGFyYW1zKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wb3N0Q29uZGl0aW9uTW9kZSA9IFBvc3RDb25kaXRpb25Nb2RlLkRlbnk7XG4gICAgdGhpcy5fcG9zdENvbmRpdGlvbnMgPSB0aGlzLndpdGhkcmF3UGFyYW1zVG9Qb3N0Q29uZGl0aW9uKHRoaXMuX3dpdGhkcmF3UGFyYW1zKTtcbiAgICByZXR1cm4gYXdhaXQgc3VwZXIuYnVpbGRJbXBsZW1lbnRhdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSB3aXRoZHJhd1BhcmFtc1RvRnVuY3Rpb25BcmdzKHBhcmFtczogU2J0Y1dpdGhkcmF3UGFyYW1zKSB7XG4gICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZUJ0Y0FkZHJlc3MocGFyYW1zLmJ0Y0FkZHJlc3MpO1xuICAgIHJldHVybiBbXG4gICAgICB1aW50Q1YocGFyYW1zLmFtb3VudCksXG4gICAgICB0dXBsZUNWKHtcbiAgICAgICAgdmVyc2lvbjogYnVmZmVyQ1YoQnVmZmVyLmZyb20oW2RlY29kZWQudmVyc2lvbl0pKSxcbiAgICAgICAgaGFzaGJ5dGVzOiBidWZmZXJDVihkZWNvZGVkLmhhc2hCeXRlcyksXG4gICAgICB9KSxcbiAgICAgIHVpbnRDVihwYXJhbXMubWF4RmVlKSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSB3aXRoZHJhd1BhcmFtc1RvUG9zdENvbmRpdGlvbihwYXJhbXM6IFNidGNXaXRoZHJhd1BhcmFtcyk6IFBvc3RDb25kaXRpb25bXSB7XG4gICAgY29uc3QgYW1vdW50ID0gbmV3IEJpZ051bShwYXJhbXMuYW1vdW50KS5hZGQobmV3IEJpZ051bShwYXJhbXMubWF4RmVlKSk7XG4gICAgY29uc3QgbmV0d29yayA9IHRoaXMuX2NvaW5Db25maWcubmV0d29yayBhcyBCaXRnb1N0YWNrc05ldHdvcms7XG4gICAgY29uc3Qgc2J0Y0NvbnRyYWN0QWRkcmVzcyA9IG5ldHdvcmsuc2J0Y1dpdGhkcmF3YWxDb250cmFjdEFkZHJlc3M7XG5cbiAgICByZXR1cm4gW1xuICAgICAgbWFrZVN0YW5kYXJkRnVuZ2libGVQb3N0Q29uZGl0aW9uKFxuICAgICAgICBnZXRTVFhBZGRyZXNzRnJvbVB1YktleXMoXG4gICAgICAgICAgdGhpcy5fZnJvbVB1YktleXMsXG4gICAgICAgICAgdGhpcy5fY29pbkNvbmZpZy5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVRcbiAgICAgICAgICAgID8gQWRkcmVzc1ZlcnNpb24uTWFpbm5ldE11bHRpU2lnXG4gICAgICAgICAgICA6IEFkZHJlc3NWZXJzaW9uLlRlc3RuZXRNdWx0aVNpZyxcbiAgICAgICAgICB0aGlzLl9mcm9tUHViS2V5cy5sZW5ndGggPiAxID8gQWRkcmVzc0hhc2hNb2RlLlNlcmlhbGl6ZVAyU0ggOiBBZGRyZXNzSGFzaE1vZGUuU2VyaWFsaXplUDJQS0gsXG4gICAgICAgICAgdGhpcy5fbnVtYmVyU2lnbmF0dXJlc1xuICAgICAgICApLmFkZHJlc3MsXG4gICAgICAgIEZ1bmdpYmxlQ29uZGl0aW9uQ29kZS5FcXVhbCxcbiAgICAgICAgYW1vdW50LFxuICAgICAgICBjcmVhdGVBc3NldEluZm8oc2J0Y0NvbnRyYWN0QWRkcmVzcywgU0JUQ19UT0tFTl9DT05UUkFDVF9OQU1FLCBTQlRDX1RPS0VOX0FTU0VUX05BTUUpXG4gICAgICApLFxuICAgIF07XG4gIH1cbn1cbiJdfQ==
|
package/dist/src/stx.d.ts
CHANGED
|
@@ -17,6 +17,14 @@ export declare class Stx extends BaseCoin {
|
|
|
17
17
|
/** inherited doc */
|
|
18
18
|
getDefaultMultisigType(): MultisigType;
|
|
19
19
|
verifyTransaction(params: VerifyTransactionOptions): Promise<boolean>;
|
|
20
|
+
private hasSbtcWithdrawParams;
|
|
21
|
+
/**
|
|
22
|
+
* Verify an sBTC withdrawal (burn) transaction matches the expected withdrawal params.
|
|
23
|
+
*
|
|
24
|
+
* @param rawTx - the raw (built) transaction hex from txPrebuild
|
|
25
|
+
* @param expected - the sbtcWithdrawParams supplied by the caller in txParams
|
|
26
|
+
*/
|
|
27
|
+
private verifySbtcWithdrawTransaction;
|
|
20
28
|
/**
|
|
21
29
|
* Check if address is valid, then make sure it matches the base address.
|
|
22
30
|
*
|
package/dist/src/stx.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stx.d.ts","sourceRoot":"","sources":["../../src/stx.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,QAAQ,EACR,eAAe,EACf,SAAS,EAIT,OAAO,EAEP,YAAY,EAEZ,iBAAiB,
|
|
1
|
+
{"version":3,"file":"stx.d.ts","sourceRoot":"","sources":["../../src/stx.ts"],"names":[],"mappings":"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"}
|
package/dist/src/stx.js
CHANGED
|
@@ -52,6 +52,9 @@ class Stx extends sdk_core_1.BaseCoin {
|
|
|
52
52
|
if (!rawTx) {
|
|
53
53
|
throw new Error('missing required tx prebuild property txHex');
|
|
54
54
|
}
|
|
55
|
+
if (this.hasSbtcWithdrawParams(txParams)) {
|
|
56
|
+
return this.verifySbtcWithdrawTransaction(rawTx, txParams.sbtcWithdrawParams);
|
|
57
|
+
}
|
|
55
58
|
const explainedTx = await this.explainTransaction({ txHex: rawTx, feeInfo: { fee: '' } });
|
|
56
59
|
const recipient = txParams.recipients?.[0];
|
|
57
60
|
if (recipient !== undefined && explainedTx) {
|
|
@@ -83,6 +86,38 @@ class Stx extends sdk_core_1.BaseCoin {
|
|
|
83
86
|
}
|
|
84
87
|
return true;
|
|
85
88
|
}
|
|
89
|
+
hasSbtcWithdrawParams(txParams) {
|
|
90
|
+
return 'sbtcWithdrawParams' in txParams && txParams.sbtcWithdrawParams !== undefined;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Verify an sBTC withdrawal (burn) transaction matches the expected withdrawal params.
|
|
94
|
+
*
|
|
95
|
+
* @param rawTx - the raw (built) transaction hex from txPrebuild
|
|
96
|
+
* @param expected - the sbtcWithdrawParams supplied by the caller in txParams
|
|
97
|
+
*/
|
|
98
|
+
async verifySbtcWithdrawTransaction(rawTx, expected) {
|
|
99
|
+
const factory = new _1.StxLib.TransactionBuilderFactory(statics_1.coins.get(this.getChain()));
|
|
100
|
+
const builder = factory.from(rawTx);
|
|
101
|
+
if (!(builder instanceof _1.StxLib.SbtcWithdrawBuilder)) {
|
|
102
|
+
throw new Error('Tx is not a valid sBTC withdrawal transaction');
|
|
103
|
+
}
|
|
104
|
+
const actual = builder.getWithdrawParams();
|
|
105
|
+
if (!actual) {
|
|
106
|
+
throw new Error('Unable to parse sBTC withdrawal params from tx');
|
|
107
|
+
}
|
|
108
|
+
if (BigInt(actual.amount) !== BigInt(expected.amount)) {
|
|
109
|
+
throw new Error(`Tx sBTC withdrawal amount does not match expected amount: expected ${expected.amount} but got ${actual.amount}`);
|
|
110
|
+
}
|
|
111
|
+
if (BigInt(actual.maxFee) !== BigInt(expected.maxFee)) {
|
|
112
|
+
throw new Error(`Tx sBTC withdrawal maxFee does not match expected maxFee: expected ${expected.maxFee} but got ${actual.maxFee}`);
|
|
113
|
+
}
|
|
114
|
+
const decodedExpected = _1.StxLib.decodeBtcAddress(expected.btcAddress);
|
|
115
|
+
if (decodedExpected.version !== actual.recipientVersion ||
|
|
116
|
+
!decodedExpected.hashBytes.equals(actual.recipientHashBytes)) {
|
|
117
|
+
throw new Error(`Tx sBTC withdrawal btcAddress does not match expected btcAddress: expected ${expected.btcAddress}`);
|
|
118
|
+
}
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
86
121
|
/**
|
|
87
122
|
* Check if address is valid, then make sure it matches the base address.
|
|
88
123
|
*
|
|
@@ -636,4 +671,4 @@ class Stx extends sdk_core_1.BaseCoin {
|
|
|
636
671
|
}
|
|
637
672
|
}
|
|
638
673
|
exports.Stx = Stx;
|
|
639
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0eC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw4Q0FpQnlCO0FBQ3pCLDRDQUFnRjtBQUNoRix1REFlOEI7QUFDOUIsK0RBQXFFO0FBQ3JFLGdFQUFxQztBQUdyQyx3QkFBMkI7QUFDM0IsK0JBQWtEO0FBRWxELHVDQUtxQjtBQWVyQixNQUFhLEdBQUksU0FBUSxtQkFBUTtJQUcvQixZQUFZLEtBQWdCLEVBQUUsV0FBdUM7UUFDbkUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztJQUNwQyxDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsY0FBYyxDQUFDLFVBQXFDO1FBQ2xELE9BQU8sSUFBSSwrQkFBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQ3hFLENBQUM7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QUMsaUJBQWlCLEVBQUUsQ0FBQztRQUUzRCxPQUFPO1lBQ0wsS0FBSyxFQUFFLGdCQUFnQjtTQUN4QixDQUFDO0lBQ0osQ0FBQztJQUVELGtCQUFrQjtJQUNsQixpQkFBaUIsQ0FBQyxNQUErQjtRQUMvQyxNQUFNLElBQUksb0NBQXlCLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0NBQ0Y7QUF6dUJELGtCQXl1QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBdWRpdERlY3J5cHRlZEtleVBhcmFtcyxcbiAgQmFzZUNvaW4sXG4gIEJhc2VUcmFuc2FjdGlvbixcbiAgQml0R29CYXNlLFxuICBFbnZpcm9ubWVudHMsXG4gIGdldEJpcDMyS2V5cyxcbiAgZ2V0SXNVbnNpZ25lZFN3ZWVwLFxuICBLZXlQYWlyLFxuICBNZXRob2ROb3RJbXBsZW1lbnRlZEVycm9yLFxuICBNdWx0aXNpZ1R5cGUsXG4gIG11bHRpc2lnVHlwZXMsXG4gIFNpZ25lZFRyYW5zYWN0aW9uLFxuICBUcmFuc2FjdGlvblJlY2lwaWVudCxcbiAgVHJhbnNhY3Rpb25UeXBlLFxuICBWZXJpZnlBZGRyZXNzT3B0aW9ucyxcbiAgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zLFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgU3RhdGljc0Jhc2VDb2luLCBDb2luRmFtaWx5LCBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7XG4gIGJ1ZmZlckNWRnJvbVN0cmluZyxcbiAgQ2xhcml0eVR5cGUsXG4gIENsYXJpdHlWYWx1ZSxcbiAgY3JlYXRlU3RhY2tzUHJpdmF0ZUtleSxcbiAgY3ZUb1N0cmluZyxcbiAgY3ZUb1ZhbHVlLFxuICBkZXNlcmlhbGl6ZVRyYW5zYWN0aW9uLFxuICBub25lQ1YsXG4gIHByaXZhdGVLZXlUb1N0cmluZyxcbiAgcHVibGljS2V5RnJvbUJ1ZmZlcixcbiAgcHVibGljS2V5VG9TdHJpbmcsXG4gIHNvbWVDVixcbiAgc3RhbmRhcmRQcmluY2lwYWxDVixcbiAgdWludENWLFxufSBmcm9tICdAc3RhY2tzL3RyYW5zYWN0aW9ucyc7XG5pbXBvcnQgeyBzZXJpYWxpemVQYXlsb2FkIH0gZnJvbSAnQHN0YWNrcy90cmFuc2FjdGlvbnMvZGlzdC9wYXlsb2FkJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcblxuaW1wb3J0IHsgRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucywgU3R4U2lnblRyYW5zYWN0aW9uT3B0aW9ucywgU3R4VHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgU3R4TGliIH0gZnJvbSAnLic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi9saWInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi9saWIvdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7XG4gIGZpbmRDb250cmFjdFRva2VuTmFtZVVzaW5nQ29udHJhY3QsXG4gIGZpbmRUb2tlbk5hbWVCeUNvbnRyYWN0LFxuICBnZXRBZGRyZXNzRGV0YWlscyxcbiAgZ2V0TWVtb0lkQW5kQmFzZUFkZHJlc3NGcm9tQWRkcmVzcyxcbn0gZnJvbSAnLi9saWIvdXRpbHMnO1xuaW1wb3J0IHtcbiAgQWRkcmVzc0RldGFpbHMsXG4gIE5hdGl2ZVN0eEJhbGFuY2UsXG4gIFJlY292ZXJ5SW5mbyxcbiAgUmVjb3ZlcnlPcHRpb25zLFxuICBSZWNvdmVyeVRyYW5zYWN0aW9uLFxuICBTaW5nbGVGdW5naWJsZVRva2VuQmFsYW5jZSxcbiAgU3R4Tm9uY2VSZXNwb25zZSxcbiAgU3R4VHhuRmVlRXN0aW1hdGlvblJlc3BvbnNlLFxuICBUeERhdGEsXG59IGZyb20gJy4vbGliL2lmYWNlJztcbmltcG9ydCB7IFRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4vbGliL3RyYW5zZmVyQnVpbGRlcic7XG5pbXBvcnQgeyBGdW5naWJsZVRva2VuVHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi9saWIvZnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlcic7XG5cbmV4cG9ydCBjbGFzcyBTdHggZXh0ZW5kcyBCYXNlQ29pbiB7XG4gIHByb3RlY3RlZCByZWFkb25seSBfc3RhdGljc0NvaW46IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj47XG5cbiAgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KSB7XG4gICAgc3VwZXIoYml0Z28pO1xuXG4gICAgaWYgKCFzdGF0aWNzQ29pbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIGNvbnN0cnVjdG9yIHBhcmFtZXRlciBzdGF0aWNzQ29pbicpO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRpY3NDb2luID0gc3RhdGljc0NvaW47XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlSW5zdGFuY2UoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KTogQmFzZUNvaW4ge1xuICAgIHJldHVybiBuZXcgU3R4KGJpdGdvLCBzdGF0aWNzQ29pbik7XG4gIH1cblxuICBnZXRDaGFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zdGF0aWNzQ29pbi5uYW1lO1xuICB9XG5cbiAgZ2V0RmFtaWx5KCk6IENvaW5GYW1pbHkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0aWNzQ29pbi5mYW1pbHk7XG4gIH1cblxuICBnZXRGdWxsTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zdGF0aWNzQ29pbi5mdWxsTmFtZTtcbiAgfVxuXG4gIGdldEJhc2VGYWN0b3IoKTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5wb3coMTAsIHRoaXMuX3N0YXRpY3NDb2luLmRlY2ltYWxQbGFjZXMpO1xuICB9XG5cbiAgZ2V0VHJhbnNhY3Rpb24oY29pbkNvbmZpZzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPik6IFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5Db25maWcpLmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICB9XG5cbiAgLyoqIGluaGVyaXRlZCBkb2MgKi9cbiAgZ2V0RGVmYXVsdE11bHRpc2lnVHlwZSgpOiBNdWx0aXNpZ1R5cGUge1xuICAgIHJldHVybiBtdWx0aXNpZ1R5cGVzLm9uY2hhaW47XG4gIH1cblxuICBhc3luYyB2ZXJpZnlUcmFuc2FjdGlvbihwYXJhbXM6IFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgdHhQcmVidWlsZCwgdHhQYXJhbXMgfSA9IHBhcmFtcztcbiAgICBjb25zdCB7IG1lbW8gfSA9IHR4UGFyYW1zO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHR4UGFyYW1zLnJlY2lwaWVudHMpICYmIHR4UGFyYW1zLnJlY2lwaWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJHt0aGlzLmdldENoYWluKCl9IGRvZXNuJ3Qgc3VwcG9ydCBzZW5kaW5nIHRvIG1vcmUgdGhhbiAxIGRlc3RpbmF0aW9uIGFkZHJlc3Mgd2l0aGluIGEgc2luZ2xlIHRyYW5zYWN0aW9uLiBUcnkgYWdhaW4sIHVzaW5nIG9ubHkgYSBzaW5nbGUgcmVjaXBpZW50LmBcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHJhd1R4ID0gdHhQcmVidWlsZD8udHhIZXg7XG4gICAgaWYgKCFyYXdUeCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHR4IHByZWJ1aWxkIHByb3BlcnR5IHR4SGV4Jyk7XG4gICAgfVxuICAgIGNvbnN0IGV4cGxhaW5lZFR4ID0gYXdhaXQgdGhpcy5leHBsYWluVHJhbnNhY3Rpb24oeyB0eEhleDogcmF3VHgsIGZlZUluZm86IHsgZmVlOiAnJyB9IH0pO1xuICAgIGNvbnN0IHJlY2lwaWVudCA9IHR4UGFyYW1zLnJlY2lwaWVudHM/LlswXTtcbiAgICBpZiAocmVjaXBpZW50ICE9PSB1bmRlZmluZWQgJiYgZXhwbGFpbmVkVHgpIHtcbiAgICAgIGNvbnN0IHR4T3V0cHV0ID0gZXhwbGFpbmVkVHgub3V0cHV0c1swXTtcbiAgICAgIGNvbnN0IHJlY2lwaWVudEFkZHJlc3MgPSBnZXRNZW1vSWRBbmRCYXNlQWRkcmVzc0Zyb21BZGRyZXNzKHJlY2lwaWVudC5hZGRyZXNzKS5hZGRyZXNzO1xuICAgICAgaWYgKHR4T3V0cHV0Py5hZGRyZXNzICE9PSByZWNpcGllbnRBZGRyZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVHggZGVzdGluYXRpb24gZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcyByZWNpcGllbnQ6IGV4cGVjdGVkICR7cmVjaXBpZW50QWRkcmVzc30gYnV0IGdvdCAke3R4T3V0cHV0Py5hZGRyZXNzfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChCaWdJbnQodHhPdXRwdXQ/LmFtb3VudCkgIT09IEJpZ0ludChyZWNpcGllbnQuYW1vdW50KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFR4IGFtb3VudCBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zIHJlY2lwaWVudCBhbW91bnQ6IGV4cGVjdGVkICR7cmVjaXBpZW50LmFtb3VudH0gYnV0IGdvdCAke3R4T3V0cHV0Py5hbW91bnR9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgLy8gY29tcGFyZSBtZW1vXG4gICAgICBsZXQgbWVtb0lucHV0ID0gJyc7XG4gICAgICBpZiAobWVtbyAmJiBtZW1vLnZhbHVlKSB7XG4gICAgICAgIG1lbW9JbnB1dCA9IG1lbW8udmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBhZGRyZXNzRGV0YWlscyA9IGdldE1lbW9JZEFuZEJhc2VBZGRyZXNzRnJvbUFkZHJlc3MocmVjaXBpZW50LmFkZHJlc3MpO1xuICAgICAgICBtZW1vSW5wdXQgPSBhZGRyZXNzRGV0YWlscy5tZW1vSWQgPz8gJyc7XG4gICAgICB9XG4gICAgICBjb25zdCBtZW1vT3V0cHV0ID0gZXhwbGFpbmVkVHgubWVtbyA/PyAnJztcbiAgICAgIGlmIChtZW1vSW5wdXQgIT09IG1lbW9PdXRwdXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUeCBtZW1vIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdHhQYXJhbXMgcmVjaXBpZW50IG1lbW8nKTtcbiAgICAgIH1cbiAgICAgIC8vIGNvbXBhcmUgYW1vdW50XG4gICAgICBpZiAoIW5ldyBCaWdOdW1iZXIocmVjaXBpZW50LmFtb3VudCkuaXNFcXVhbFRvKGV4cGxhaW5lZFR4Lm91dHB1dEFtb3VudCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUeCB0b3RhbCBhbW91bnQgZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0b3RhbCBhbW91bnQgZmllbGQnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYWRkcmVzcyBpcyB2YWxpZCwgdGhlbiBtYWtlIHN1cmUgaXQgbWF0Y2hlcyB0aGUgYmFzZSBhZGRyZXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge1ZlcmlmeUFkZHJlc3NPcHRpb25zfSBwYXJhbXNcbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhcmFtcy5hZGRyZXNzIC0gdGhlIGFkZHJlc3MgdG8gdmVyaWZ5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXJhbXMuYmFzZUFkZHJlc3MgLSB0aGUgYmFzZSBhZGRyZXNzIGZyb20gdGhlIHdhbGxldFxuICAgKi9cbiAgYXN5bmMgaXNXYWxsZXRBZGRyZXNzKHBhcmFtczogVmVyaWZ5QWRkcmVzc09wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGFkZHJlc3MsIGtleWNoYWlucyB9ID0gcGFyYW1zO1xuICAgIGlmICgha2V5Y2hhaW5zIHx8IGtleWNoYWlucy5sZW5ndGggIT09IDMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBrZXljaGFpbnMnKTtcbiAgICB9XG4gICAgY29uc3QgcHVicyA9IGtleWNoYWlucy5tYXAoKGtleWNoYWluKSA9PiBTdHhMaWIuVXRpbHMueHB1YlRvU1RYUHVia2V5KGtleWNoYWluLnB1YikpO1xuICAgIGNvbnN0IGFkZHJlc3NWZXJzaW9uID0gU3R4TGliLlV0aWxzLmdldEFkZHJlc3NWZXJzaW9uKGFkZHJlc3MpO1xuICAgIGNvbnN0IGJhc2VBZGRyZXNzID0gU3R4TGliLlV0aWxzLmdldFNUWEFkZHJlc3NGcm9tUHViS2V5cyhwdWJzLCBhZGRyZXNzVmVyc2lvbikuYWRkcmVzcztcbiAgICByZXR1cm4gU3R4TGliLlV0aWxzLmlzU2FtZUJhc2VBZGRyZXNzKGFkZHJlc3MsIGJhc2VBZGRyZXNzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBTdGFja3Mga2V5IHBhaXJcbiAgICpcbiAgICogQHBhcmFtIHtCdWZmZXJ9IHNlZWQgLSBTZWVkIGZyb20gd2hpY2ggdGhlIG5ldyBrZXlwYWlyIHNob3VsZCBiZSBnZW5lcmF0ZWQsIG90aGVyd2lzZSBhIHJhbmRvbSBzZWVkIGlzIHVzZWRcbiAgICogQHJldHVybnMge09iamVjdH0gb2JqZWN0IHdpdGggZ2VuZXJhdGVkIHB1YiBhbmQgcHJ2XG4gICAqL1xuICBnZW5lcmF0ZUtleVBhaXIoc2VlZD86IEJ1ZmZlcik6IEtleVBhaXIge1xuICAgIGNvbnN0IGtleVBhaXIgPSBzZWVkID8gbmV3IFN0eExpYi5LZXlQYWlyKHsgc2VlZCB9KSA6IG5ldyBTdHhMaWIuS2V5UGFpcigpO1xuICAgIGNvbnN0IGtleXMgPSBrZXlQYWlyLmdldEV4dGVuZGVkS2V5cygpO1xuXG4gICAgaWYgKCFrZXlzLnhwcnYpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyB4cHJ2IGluIGtleSBnZW5lcmF0aW9uLicpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwdWI6IGtleXMueHB1YixcbiAgICAgIHBydjoga2V5cy54cHJ2LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGlucHV0IGlzIHZhbGlkIHB1YmxpYyBrZXkgZm9yIHRoZSBjb2luXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwdWIgdGhlIHBydiB0byBiZSBjaGVja2VkXG4gICAqIEByZXR1cm5zIGlzIGl0IHZhbGlkP1xuICAgKi9cbiAgaXNWYWxpZFB1YihwdWI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gU3R4TGliLlV0aWxzLmlzVmFsaWRQdWJsaWNLZXkocHViKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBpbnB1dCBpcyB2YWxpZCBwcml2YXRlIGtleSBmb3IgdGhlIGNvaW5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBydiB0aGUgcHJ2IHRvIGJlIGNoZWNrZWRcbiAgICogQHJldHVybnMgaXMgaXQgdmFsaWQ/XG4gICAqL1xuICBpc1ZhbGlkUHJ2KHBydjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBTdHhMaWIuVXRpbHMuaXNWYWxpZFByaXZhdGVLZXkocHJ2KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBTdHhMaWIuVXRpbHMuaXNWYWxpZEFkZHJlc3NXaXRoUGF5bWVudElkKGFkZHJlc3MpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2lnbnMgc3RhY2tzIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIGFzeW5jIHNpZ25UcmFuc2FjdGlvbihwYXJhbXM6IFN0eFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgZmFjdG9yeSA9IG5ldyBTdHhMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQodGhpcy5nZXRDaGFpbigpKSk7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHBhcmFtcy50eFByZWJ1aWxkLnR4SGV4KTtcbiAgICBjb25zdCBwcnZLZXlzID0gcGFyYW1zLnBydiBpbnN0YW5jZW9mIEFycmF5ID8gcGFyYW1zLnBydiA6IFtwYXJhbXMucHJ2XTtcbiAgICBwcnZLZXlzLmZvckVhY2goKHBydikgPT4gdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHBydiB9KSk7XG4gICAgaWYgKHBhcmFtcy5wdWJLZXlzKSB0eEJ1aWxkZXIuZnJvbVB1YktleShwYXJhbXMucHViS2V5cyk7XG4gICAgLy8gaWYgKHBhcmFtcy5udW1iZXJTaWduYXR1cmUpIHR4QnVpbGRlci5udW1iZXJTaWduYXR1cmVzKHBhcmFtcy5udW1iZXJTaWduYXR1cmUpO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICBpZiAoIXRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbWVzc2FnZSBwYXNzZWQgdG8gc2lnbk1lc3NhZ2UnKTtcbiAgICB9XG5cbiAgICBjb25zdCB0eEhleCA9IHtcbiAgICAgIHR4SGV4OiB0cmFuc2FjdGlvbi50b0Jyb2FkY2FzdEZvcm1hdCgpLFxuICAgIH07XG5cbiAgICByZXR1cm4gdHJhbnNhY3Rpb24uc2lnbmF0dXJlLmxlbmd0aCA+PSAyID8gdHhIZXggOiB7IGhhbGZTaWduZWQ6IHR4SGV4IH07XG4gIH1cblxuICBhc3luYyBwYXJzZVRyYW5zYWN0aW9uKHBhcmFtczogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvKipcbiAgICogRXhwbGFpbiBhIFN0YWNrcyB0cmFuc2FjdGlvbiBmcm9tIHR4SGV4XG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIGFzeW5jIGV4cGxhaW5UcmFuc2FjdGlvbihwYXJhbXM6IEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFN0eFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCB0eEhleCA9IHBhcmFtcy50eEhleCB8fCAocGFyYW1zLmhhbGZTaWduZWQgJiYgcGFyYW1zLmhhbGZTaWduZWQudHhIZXgpO1xuICAgIGlmICghdHhIZXggfHwgIXBhcmFtcy5mZWVJbmZvKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgZXhwbGFpbiB0eCBwYXJhbWV0ZXJzJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZmFjdG9yeSA9IG5ldyBTdHhMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQodGhpcy5nZXRDaGFpbigpKSk7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHR4SGV4KTtcblxuICAgIGlmIChwYXJhbXMucHVibGljS2V5cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0eEJ1aWxkZXIuZnJvbVB1YktleShwYXJhbXMucHVibGljS2V5cyk7XG4gICAgICBpZiAocGFyYW1zLnB1YmxpY0tleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIC8vIGRlZmluaXRlbHkgYSBzaW5nbGUgc2lnIHR4XG4gICAgICAgIHR4QnVpbGRlci5udW1iZXJTaWduYXR1cmVzKDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG5cbiAgICBpZiAodHgudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlNlbmQpIHtcbiAgICAgIC8vIGNoZWNrIGlmIGl0IGlzIGEgdG9rZW4gdHJhbnNhY3Rpb24gb3IgbmF0aXZlIGNvaW4gdHJhbnNhY3Rpb25cbiAgICAgIGxldCB0cmFuc2FjdGlvblJlY2lwaWVudDogVHJhbnNhY3Rpb25SZWNpcGllbnQ7XG4gICAgICBsZXQgb3V0cHV0QW1vdW50OiBzdHJpbmc7XG4gICAgICBsZXQgbWVtbzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKHR4SnNvbi5wYXlsb2FkLmNvbnRyYWN0QWRkcmVzcyAmJiB0eEpzb24ucGF5bG9hZC5mdW5jdGlvbkFyZ3MubGVuZ3RoID49IDMpIHtcbiAgICAgICAgb3V0cHV0QW1vdW50ID0gY3ZUb1ZhbHVlKHR4SnNvbi5wYXlsb2FkLmZ1bmN0aW9uQXJnc1swXSkudG9TdHJpbmcoKTtcbiAgICAgICAgdHJhbnNhY3Rpb25SZWNpcGllbnQgPSB7XG4gICAgICAgICAgYWRkcmVzczogY3ZUb1N0cmluZyh0eEpzb24ucGF5bG9hZC5mdW5jdGlvbkFyZ3NbMl0pLFxuICAgICAgICAgIGFtb3VudDogb3V0cHV0QW1vdW50LFxuICAgICAgICAgIHRva2VuTmFtZTogZmluZFRva2VuTmFtZUJ5Q29udHJhY3QodHhKc29uLnBheWxvYWQuY29udHJhY3RBZGRyZXNzLCB0eEpzb24ucGF5bG9hZC5jb250cmFjdE5hbWUpLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdHhKc29uLnBheWxvYWQuZnVuY3Rpb25BcmdzLmxlbmd0aCA9PT0gNCAmJlxuICAgICAgICAgIHR4SnNvbi5wYXlsb2FkLmZ1bmN0aW9uQXJnc1szXS50eXBlID09PSBDbGFyaXR5VHlwZS5PcHRpb25hbFNvbWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgbWVtbyA9IEJ1ZmZlci5mcm9tKHR4SnNvbi5wYXlsb2FkLmZ1bmN0aW9uQXJnc1szXS52YWx1ZS5idWZmZXIpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgdHJhbnNhY3Rpb25SZWNpcGllbnRbJ21lbW8nXSA9IG1lbW87XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dEFtb3VudCA9IHR4SnNvbi5wYXlsb2FkLmFtb3VudDtcbiAgICAgICAgbWVtbyA9IHR4SnNvbi5wYXlsb2FkLm1lbW87XG4gICAgICAgIHRyYW5zYWN0aW9uUmVjaXBpZW50ID0ge1xuICAgICAgICAgIGFkZHJlc3M6IHR4SnNvbi5wYXlsb2FkLnRvLFxuICAgICAgICAgIGFtb3VudDogb3V0cHV0QW1vdW50LFxuICAgICAgICAgIG1lbW86IG1lbW8sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBvdXRwdXRzOiBUcmFuc2FjdGlvblJlY2lwaWVudFtdID0gW3RyYW5zYWN0aW9uUmVjaXBpZW50XTtcblxuICAgICAgY29uc3QgZGlzcGxheU9yZGVyID0gWydpZCcsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlQW1vdW50JywgJ291dHB1dHMnLCAnY2hhbmdlT3V0cHV0cycsICdmZWUnLCAnbWVtbycsICd0eXBlJ107XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXNwbGF5T3JkZXIsXG4gICAgICAgIGlkOiB0eEpzb24uaWQsXG4gICAgICAgIG91dHB1dEFtb3VudDogb3V0cHV0QW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgICBvdXRwdXRzLFxuICAgICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgICAgZmVlOiB0eEpzb24uZmVlLFxuICAgICAgICBtZW1vOiBtZW1vLFxuICAgICAgICB0eXBlOiB0eC50eXBlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodHgudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCkge1xuICAgICAgY29uc3QgZGlzcGxheU9yZGVyID0gW1xuICAgICAgICAnaWQnLFxuICAgICAgICAnZmVlJyxcbiAgICAgICAgJ3R5cGUnLFxuICAgICAgICAnY29udHJhY3RBZGRyZXNzJyxcbiAgICAgICAgJ2NvbnRyYWN0TmFtZScsXG4gICAgICAgICdjb250cmFjdEZ1bmN0aW9uJyxcbiAgICAgICAgJ2NvbnRyYWN0RnVuY3Rpb25BcmdzJyxcbiAgICAgIF07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXNwbGF5T3JkZXIsXG4gICAgICAgIGlkOiB0eEpzb24uaWQsXG4gICAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgICBvdXRwdXRBbW91bnQ6ICcnLFxuICAgICAgICBvdXRwdXRzOiBbXSxcbiAgICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICAgIGZlZTogdHhKc29uLmZlZSxcbiAgICAgICAgdHlwZTogdHgudHlwZSxcbiAgICAgICAgY29udHJhY3RBZGRyZXNzOiB0eEpzb24ucGF5bG9hZC5jb250cmFjdEFkZHJlc3MsXG4gICAgICAgIGNvbnRyYWN0TmFtZTogdHhKc29uLnBheWxvYWQuY29udHJhY3ROYW1lLFxuICAgICAgICBjb250cmFjdEZ1bmN0aW9uOiB0eEpzb24ucGF5bG9hZC5mdW5jdGlvbk5hbWUsXG4gICAgICAgIGNvbnRyYWN0RnVuY3Rpb25BcmdzOiB0eEpzb24ucGF5bG9hZC5mdW5jdGlvbkFyZ3MsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgVVJMcyBvZiBzb21lIGFjdGl2ZSBwdWJsaWMgbm9kZXNcbiAgICogQHJldHVybnMge1N0cmluZ30gbm9kZSB1cmxcbiAgICovXG4gIGdldFB1YmxpY05vZGVVcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRW52aXJvbm1lbnRzW3RoaXMuYml0Z28uZ2V0RW52KCldLnN0eE5vZGVVcmw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG5hdGl2ZSBzdGFja3MgYmFsYW5jZSBmb3IgYW4gYWNjb3VudFxuICAgKiBAcGFyYW0ge1N0cmluZ30gYWRkcmVzcyAtIHN0YWNrcyBhZGRyZXNzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE5hdGl2ZVN0eEJhbGFuY2U+fVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGdldE5hdGl2ZVN0eEJhbGFuY2VGcm9tTm9kZSh7IGFkZHJlc3MgfTogeyBhZGRyZXNzOiBzdHJpbmcgfSk6IFByb21pc2U8TmF0aXZlU3R4QmFsYW5jZT4ge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7dGhpcy5nZXRQdWJsaWNOb2RlVXJsKCl9L2V4dGVuZGVkL3YyL2FkZHJlc3Nlcy8ke2FkZHJlc3N9L2JhbGFuY2VzL3N0eGA7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5iaXRnby5nZXQoZW5kcG9pbnQpO1xuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzICR7cmVzcG9uc2Uuc3RhdHVzQ29kZX1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJvZHk6IE5hdGl2ZVN0eEJhbGFuY2UgPSByZXNwb25zZS5ib2R5O1xuICAgICAgcmV0dXJuIGJvZHk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmFibGUgdG8gZ2V0IG5hdGl2ZSBzdHggYmFsYW5jZSBmcm9tIG5vZGU6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc2luZ2xlIGZ1bmdpYmxlIHRva2VuIGJhbGFuY2UgZm9yIGFuIGFjY291bnRcbiAgICogQHBhcmFtIHtTdHJpbmd9IGFkZHJlc3MgLSBzdGFja3MgYWRkcmVzc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gYXNzZXRJZCAtIGZ1bmdpYmxlIHRva2VuIGFzc2V0IGlkXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFNpbmdsZUZ1bmdpYmxlVG9rZW5CYWxhbmNlPn1cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBnZXRTaW5nbGVGdW5naWJsZVRva2VuQmFsYW5jZUZyb21Ob2RlKHtcbiAgICBhZGRyZXNzLFxuICAgIGFzc2V0SWQsXG4gIH06IHtcbiAgICBhZGRyZXNzOiBzdHJpbmc7XG4gICAgYXNzZXRJZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxTaW5nbGVGdW5naWJsZVRva2VuQmFsYW5jZT4ge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7dGhpcy5nZXRQdWJsaWNOb2RlVXJsKCl9L2V4dGVuZGVkL3YyL2FkZHJlc3Nlcy8ke2FkZHJlc3N9L2JhbGFuY2VzL2Z0LyR7YXNzZXRJZH1gO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYml0Z28uZ2V0KGVuZHBvaW50KTtcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGByZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyAke3Jlc3BvbnNlLnN0YXR1c0NvZGV9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBib2R5OiBTaW5nbGVGdW5naWJsZVRva2VuQmFsYW5jZSA9IHJlc3BvbnNlLmJvZHk7XG4gICAgICByZXR1cm4gYm9keTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuYWJsZSB0byBnZXQgbmF0aXZlIHN0eCBiYWxhbmNlIGZyb20gbm9kZTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBub25jZSBkYXRhIHNwZWNpZmljIHRvIGFuIGFjY291bnQgZnJvbSBhIHB1YmxpYyBub2RlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBhZGRyZXNzIC0gc3RhY2tzIGFkZHJlc3NcbiAgICogQHJldHVybnMge1Byb21pc2U8U3R4Tm9uY2VSZXNwb25zZT59XG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0QWNjb3VudE5vbmNlRnJvbU5vZGUoeyBhZGRyZXNzIH06IHsgYWRkcmVzczogc3RyaW5nIH0pOiBQcm9taXNlPFN0eE5vbmNlUmVzcG9uc2U+IHtcbiAgICBjb25zdCBlbmRwb2ludCA9IGAke3RoaXMuZ2V0UHVibGljTm9kZVVybCgpfS9leHRlbmRlZC92MS9hZGRyZXNzLyR7YWRkcmVzc30vbm9uY2VzYDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmJpdGdvLmdldChlbmRwb2ludCk7XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgcmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgJHtyZXNwb25zZS5zdGF0dXNDb2RlfWApO1xuICAgICAgfVxuICAgICAgY29uc3QgYm9keTogU3R4Tm9uY2VSZXNwb25zZSA9IHJlc3BvbnNlLmJvZHk7XG4gICAgICByZXR1cm4gYm9keTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuYWJsZSB0byBnZXQgYWNjb3VudCBub25jZSBmcm9tIG5vZGU6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc3RhY2tzIHRyYW5zYWN0aW9uIGVzdGltYXRlZCBmZWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IHR4SGV4IC0gaGV4IG9mIHN0YWNrcyB0cmFuc2FjdGlvbiBwYXlsb2FkXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB0eEhleExlbmd0aCAtIGxlbmd0aCBvZiBidWlsdCBzZXJpYWxpemVkIHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE51bWJlcj59IC0gZmVlIGVzdGltYXRlICh0YWtpbmcgdGhlIGxvd2VzdClcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBnZXRUcmFuc2FjdGlvbkZlZUVzdGltYXRpb24oe1xuICAgIHR4SGV4LFxuICAgIHR4SGV4TGVuZ3RoLFxuICB9OiB7XG4gICAgdHhIZXg6IHN0cmluZztcbiAgICB0eEhleExlbmd0aDogbnVtYmVyO1xuICB9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBlbmRwb2ludCA9IGAke3RoaXMuZ2V0UHVibGljTm9kZVVybCgpfS92Mi9mZWVzL3RyYW5zYWN0aW9uYDtcbiAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHtcbiAgICAgIHRyYW5zYWN0aW9uX3BheWxvYWQ6IHR4SGV4LFxuICAgICAgZXN0aW1hdGVkX2xlbjogdHhIZXhMZW5ndGgsXG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmJpdGdvLnBvc3QoZW5kcG9pbnQpLnNlbmQocmVxdWVzdEJvZHkpO1xuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzICR7cmVzcG9uc2Uuc3RhdHVzQ29kZX1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJvZHk6IFN0eFR4bkZlZUVzdGltYXRpb25SZXNwb25zZSA9IHJlc3BvbnNlLmJvZHk7XG4gICAgICBpZiAoYm9keS5lc3RpbWF0aW9ucy5sZW5ndGggIT09IDMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHJlc3BvbnNlIGVzdGltYXRpb24gbGVuZ3RoJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYm9keS5lc3RpbWF0aW9uc1swXS5mZWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmFibGUgdG8gZ2V0IHRyYW5zYWN0aW9uIGZlZSBlc3RpbWF0aW9uOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IGZvciBvZmZsaW5lIHZhdWx0IHNpZ25pbmdcbiAgICogQHBhcmFtIHtCYXNlVHJhbnNhY3Rpb259IHR4IC0gYmFzZSB0cmFuc2FjdGlvblxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxSZWNvdmVyeUluZm8+fVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGZvcm1hdEZvck9mZmxpbmVWYXVsdCh0eDogQmFzZVRyYW5zYWN0aW9uKTogUHJvbWlzZTxSZWNvdmVyeUluZm8+IHtcbiAgICBjb25zdCB0eEpzb246IFR4RGF0YSA9IHR4LnRvSnNvbigpO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uRXhwbGFuYXRpb246IFJlY292ZXJ5SW5mbyA9IChhd2FpdCB0aGlzLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICB0eEhleDogdHgudG9Ccm9hZGNhc3RGb3JtYXQoKSxcbiAgICAgIGZlZUluZm86IHsgZmVlOiB0eEpzb24uZmVlIH0sXG4gICAgfSkpIGFzIFJlY292ZXJ5SW5mbztcbiAgICB0cmFuc2FjdGlvbkV4cGxhbmF0aW9uLmNvaW4gPSB0aGlzLmdldENoYWluKCk7XG4gICAgdHJhbnNhY3Rpb25FeHBsYW5hdGlvbi5mZWVJbmZvID0geyBmZWU6IHR4SnNvbi5mZWUgfTtcbiAgICB0cmFuc2FjdGlvbkV4cGxhbmF0aW9uLnR4SGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICByZXR1cm4gdHJhbnNhY3Rpb25FeHBsYW5hdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHJlY292ZXJhYmxlIGFtb3VudCAmIGZlZSBhZnRlciBzdWJ0cmFjdGluZyB0aGUgdHhuIGZlZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gc2VyaWFsaXplZEhleCAtIHNlcmlhbGl6ZWQgdHhuIGhleFxuICAgKiBAcGFyYW0ge051bWJlcn0gdHhIZXhMZW5ndGggLSBkZXNlcmlhbGl6ZWQgdHhuIGxlbmd0aFxuICAgKiBAcGFyYW0ge1N0cmluZ30gYmFsYW5jZSAtIHRvdGFsIGFjY291bnQgYmFsYW5jZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gdG9rZW5CYWxhbmNlIC0gdG90YWwgdG9rZW4gYmFsYW5jZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pn1cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBnZXRSZWNvdmVyYWJsZUFtb3VudEFuZEZlZShcbiAgICBzZXJpYWxpemVkSGV4OiBzdHJpbmcsXG4gICAgdHhIZXhMZW5ndGg6IG51bWJlcixcbiAgICBiYWxhbmNlOiBzdHJpbmcsXG4gICAgdG9rZW5CYWxhbmNlPzogc3RyaW5nXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICAgIGNvbnN0IGVzdGltYXRlZEZlZSA9IGF3YWl0IHRoaXMuZ2V0VHJhbnNhY3Rpb25GZWVFc3RpbWF0aW9uKHtcbiAgICAgIHR4SGV4OiBzZXJpYWxpemVkSGV4LFxuICAgICAgdHhIZXhMZW5ndGg6IHR4SGV4TGVuZ3RoLFxuICAgIH0pO1xuICAgIGNvbnN0IGJhbGFuY2VCTiA9IG5ldyBCaWdOdW1iZXIoYmFsYW5jZSk7XG4gICAgY29uc3QgZmVlQk4gPSBuZXcgQmlnTnVtYmVyKGVzdGltYXRlZEZlZSk7XG4gICAgaWYgKGJhbGFuY2VCTi5pc0xlc3NUaGFuKGZlZUJOKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnN1ZmZpY2llbnQgYmFsYW5jZSB0byBidWlsZCB0aGUgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlY292ZXJhYmxlQW1vdW50OiB0b2tlbkJhbGFuY2UgPz8gYmFsYW5jZUJOLm1pbnVzKGZlZUJOKS50b1N0cmluZygpLFxuICAgICAgZmVlOiBmZWVCTi50b1N0cmluZygpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRvIGZpbmQgdGhlIHJpZ2h0IGJ1aWxkZXIgZm9yIHRva2VuIG9yIG5hdGl2ZSBjb2luIHRyYW5zZmVyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBjb250cmFjdEFkZHJlc3MgLSB0b2tlbiBjb250cmFjdCBhZGRyZXNzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBjb250cmFjdE5hbWUgLSB0b2tlbiBjb250cmFjdCBuYW1lXG4gICAqIEByZXR1cm5zIHtUcmFuc2ZlckJ1aWxkZXJ8RnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlcn1cbiAgICovXG4gIHByb3RlY3RlZCBnZXRUb2tlbk9yTmF0aXZlVHJhbnNmZXJCdWlsZGVyKFxuICAgIGNvbnRyYWN0QWRkcmVzcz86IHN0cmluZyxcbiAgICBjb250cmFjdE5hbWU/OiBzdHJpbmdcbiAgKTogVHJhbnNmZXJCdWlsZGVyIHwgRnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlciB7XG4gICAgY29uc3QgaXNUb2tlbiA9ICEhY29udHJhY3RBZGRyZXNzICYmICEhY29udHJhY3ROYW1lO1xuICAgIGxldCBmYWN0b3J5OiBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5O1xuICAgIGlmIChpc1Rva2VuKSB7XG4gICAgICBjb25zdCB0b2tlbk5hbWUgPSBmaW5kVG9rZW5OYW1lQnlDb250cmFjdChjb250cmFjdEFkZHJlc3MsIGNvbnRyYWN0TmFtZSk7XG4gICAgICBpZiAoIXRva2VuTmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgY29udHJhY3QgYWRkcmVzcyBvciBjb250cmFjdCBuYW1lLCBub3Qgc3VwcG9ydGVkJyk7XG4gICAgICB9XG4gICAgICBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KHRva2VuTmFtZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KHRoaXMuZ2V0Q2hhaW4oKSkpO1xuICAgIH1cbiAgICBsZXQgYnVpbGRlcjogVHJhbnNmZXJCdWlsZGVyIHwgRnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlcjtcbiAgICBpZiAoaXNUb2tlbikge1xuICAgICAgYnVpbGRlciA9IGZhY3RvcnkuZ2V0RnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBidWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRvIGJ1aWxkIGZ1bmdpYmxlIHRva2VuIHRyYW5zZmVyIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7RnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlcn0gYnVpbGRlciAtIGZ1bmdpYmxlIHRva2VuIHRyYW5zZmVyIGJ1aWxkZXJcbiAgICogQHBhcmFtIHtTdHJpbmd9IGNvbnRyYWN0QWRkcmVzcyAtIHRva2VuIGNvbnRyYWN0IGFkZHJlc3NcbiAgICogQHBhcmFtIHtTdHJpbmd9IGNvbnRyYWN0TmFtZSAtIHRva2VuIGNvbnRyYWN0IG5hbWVcbiAgICogQHBhcmFtIHtTdHJpbmdbXX0gcHVicyAtIGFjY291bnQgcHVibGljIGtleXNcbiAgICogQHBhcmFtIHtOdW1iZXJ9IG5vbmNlIC0gYWNjb3VudCBub25jZVxuICAgKiBAcGFyYW0ge0FkZHJlc3NEZXRhaWxzfSByb290QWRkcmVzc0RldGFpbHMgLSByb290IGFkZHJlc3MgZGV0YWlsc1xuICAgKiBAcGFyYW0ge0FkZHJlc3NEZXRhaWxzfSBkZXN0aW5hdGlvbkFkZHJlc3NEZXRhaWxzIC0gcmVjZWl2ZSBhZGRyZXNzIGRldGFpbHNcbiAgICogQHBhcmFtIHtTdHJpbmd9IHN0eEJhbGFuY2UgLSBuYXRpdmUgc3R4IGJhbGFuY2VcbiAgICogQHJldHVybnMge1Byb21pc2U8QmFzZVRyYW5zYWN0aW9uPn0gLSBidWlsdCB0cmFuc2FjdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkVG9rZW5UcmFuc2ZlclRyYW5zYWN0aW9uKHtcbiAgICBidWlsZGVyLFxuICAgIGNvbnRyYWN0QWRkcmVzcyxcbiAgICBjb250cmFjdE5hbWUsXG4gICAgcHVicyxcbiAgICBub25jZSxcbiAgICByb290QWRkcmVzc0RldGFpbHMsXG4gICAgZGVzdGluYXRpb25BZGRyZXNzRGV0YWlscyxcbiAgICBzdHhCYWxhbmNlLFxuICB9OiB7XG4gICAgYnVpbGRlcjogRnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlcjtcbiAgICBjb250cmFjdEFkZHJlc3M6IHN0cmluZztcbiAgICBjb250cmFjdE5hbWU6IHN0cmluZztcbiAgICBwdWJzOiBzdHJpbmdbXTtcbiAgICBub25jZTogbnVtYmVyO1xuICAgIHJvb3RBZGRyZXNzRGV0YWlsczogQWRkcmVzc0RldGFpbHM7XG4gICAgZGVzdGluYXRpb25BZGRyZXNzRGV0YWlsczogQWRkcmVzc0RldGFpbHM7XG4gICAgc3R4QmFsYW5jZTogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxCYXNlVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBidWlsZGVyIGFzIEZ1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXI7XG4gICAgY29uc3QgY29udHJhY3RUb2tlbk5hbWUgPSBmaW5kQ29udHJhY3RUb2tlbk5hbWVVc2luZ0NvbnRyYWN0KGNvbnRyYWN0QWRkcmVzcywgY29udHJhY3ROYW1lKTtcbiAgICBpZiAoIWNvbnRyYWN0VG9rZW5OYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgY29udHJhY3QgYWRkcmVzcyBvciBjb250cmFjdCBuYW1lLCBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuICAgIGNvbnN0IGFzc2V0SWQgPSBgJHtjb250cmFjdEFkZHJlc3N9LiR7Y29udHJhY3ROYW1lfTo6JHtjb250cmFjdFRva2VuTmFtZX1gO1xuICAgIC8vIGZldGNoIHRoZSB0b2tlbiBiYWxhbmNlXG4gICAgY29uc3QgdG9rZW5CYWxhbmNlRGF0YSA9IGF3YWl0IHRoaXMuZ2V0U2luZ2xlRnVuZ2libGVUb2tlbkJhbGFuY2VGcm9tTm9kZSh7XG4gICAgICBhZGRyZXNzOiByb290QWRkcmVzc0RldGFpbHMuYWRkcmVzcyxcbiAgICAgIGFzc2V0SWQsXG4gICAgfSk7XG4gICAgY29uc3QgdG9rZW5CYWxhbmNlID0gdG9rZW5CYWxhbmNlRGF0YT8uYmFsYW5jZTtcbiAgICBpZiAoIU51bWJlcih0b2tlbkJhbGFuY2UpIHx8IGlzTmFOKE51bWJlcih0b2tlbkJhbGFuY2UpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgbm8gdG9rZW4gYmFsYW5jZSBmb3VuZCB0byByZWNvdmVyIGZvciBhZGRyZXNzOiAke3Jvb3RBZGRyZXNzRGV0YWlscy5hZGRyZXNzfSwgdG9rZW46ICR7YXNzZXRJZH1gXG4gICAgICApO1xuICAgIH1cbiAgICB0eEJ1aWxkZXIuZmVlKHsgZmVlOiAnMjAwJyB9KTtcbiAgICB0eEJ1aWxkZXIubnVtYmVyU2lnbmF0dXJlcygyKTtcbiAgICB0eEJ1aWxkZXIuZnJvbVB1YktleShwdWJzKTtcbiAgICB0eEJ1aWxkZXIubm9uY2Uobm9uY2UpO1xuICAgIHR4QnVpbGRlci5jb250cmFjdEFkZHJlc3MoY29udHJhY3RBZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIuY29udHJhY3ROYW1lKGNvbnRyYWN0TmFtZSk7XG4gICAgaWYgKGNvbnRyYWN0VG9rZW5OYW1lKSB7XG4gICAgICB0eEJ1aWxkZXIudG9rZW5OYW1lKGNvbnRyYWN0VG9rZW5OYW1lKTtcbiAgICB9XG4gICAgdHhCdWlsZGVyLmZ1bmN0aW9uTmFtZSgndHJhbnNmZXInKTtcbiAgICBjb25zdCBmdW5jdGlvbkFyZ3M6IENsYXJpdHlWYWx1ZVtdID0gW1xuICAgICAgdWludENWKHRva2VuQmFsYW5jZSksXG4gICAgICBzdGFuZGFyZFByaW5jaXBhbENWKHJvb3RBZGRyZXNzRGV0YWlscy5hZGRyZXNzKSxcbiAgICAgIHN0YW5kYXJkUHJpbmNpcGFsQ1YoZGVzdGluYXRpb25BZGRyZXNzRGV0YWlscy5hZGRyZXNzKSxcbiAgICBdO1xuICAgIGlmIChkZXN0aW5hdGlvbkFkZHJlc3NEZXRhaWxzLm1lbW9JZCkge1xuICAgICAgZnVuY3Rpb25BcmdzLnB1c2goc29tZUNWKGJ1ZmZlckNWRnJvbVN0cmluZyhkZXN0aW5hdGlvbkFkZHJlc3NEZXRhaWxzLm1lbW9JZCkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZnVuY3Rpb25BcmdzLnB1c2gobm9uZUNWKCkpO1xuICAgIH1cbiAgICB0eEJ1aWxkZXIuZnVuY3Rpb25BcmdzKGZ1bmN0aW9uQXJncyk7XG4gICAgY29uc3QgYmFzZVR4biA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIGNvbnN0IHR4QnJvYWRjYXN0Rm9ybWF0ID0gYmFzZVR4bi50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgIGNvbnN0IHR4RGVzZXJpYWxpemVkID0gZGVzZXJpYWxpemVUcmFuc2FjdGlvbih0eEJyb2FkY2FzdEZvcm1hdCk7XG4gICAgY29uc3Qgc2VyaWFsaXplZEhleCA9IHNlcmlhbGl6ZVBheWxvYWQodHhEZXNlcmlhbGl6ZWQucGF5bG9hZCkudG9TdHJpbmcoJ2hleCcpO1xuICAgIGNvbnN0IHsgcmVjb3ZlcmFibGVBbW91bnQsIGZlZSB9ID0gYXdhaXQgdGhpcy5nZXRSZWNvdmVyYWJsZUFtb3VudEFuZEZlZShcbiAgICAgIHNlcmlhbGl6ZWRIZXgsXG4gICAgICB0eEJyb2FkY2FzdEZvcm1hdC5sZW5ndGgsXG4gICAgICBzdHhCYWxhbmNlLFxuICAgICAgdG9rZW5CYWxhbmNlXG4gICAgKTtcbiAgICBmdW5jdGlvbkFyZ3NbMF0gPSB1aW50Q1YocmVjb3ZlcmFibGVBbW91bnQpO1xuICAgIHR4QnVpbGRlci5mdW5jdGlvbkFyZ3MoZnVuY3Rpb25BcmdzKTtcbiAgICB0eEJ1aWxkZXIuZmVlKHsgZmVlOiBmZWUgfSk7XG4gICAgcmV0dXJuIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byBidWlsZCBuYXRpdmUgdHJhbnNmZXIgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtUcmFuc2ZlckJ1aWxkZXJ9IGJ1aWxkZXIgLSB0cmFuc2ZlciBidWlsZGVyXG4gICAqIEBwYXJhbSB7U3RyaW5nW119IHB1YnMgLSBhY2NvdW50IHB1YmxpYyBrZXlzXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBub25jZSAtIGFjY291bnQgbm9uY2VcbiAgICogQHBhcmFtIHtBZGRyZXNzRGV0YWlsc30gZGVzdGluYXRpb25BZGRyZXNzRGV0YWlscyAtIHJlY2VpdmUgYWRkcmVzcyBkZXRhaWxzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzdHhCYWxhbmNlIC0gbmF0aXZlIHN0eCBiYWxhbmNlXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEJhc2VUcmFuc2FjdGlvbj59IC0gYnVpbHQgdHJhbnNhY3Rpb25cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZE5hdGl2ZVRyYW5zZmVyVHJhbnNhY3Rpb24oe1xuICAgIGJ1aWxkZXIsXG4gICAgcHVicyxcbiAgICBub25jZSxcbiAgICBkZXN0aW5hdGlvbkFkZHJlc3NEZXRhaWxzLFxuICAgIHN0eEJhbGFuY2UsXG4gIH06IHtcbiAgICBidWlsZGVyOiBUcmFuc2ZlckJ1aWxkZXI7XG4gICAgcHViczogc3RyaW5nW107XG4gICAgbm9uY2U6IG51bWJlcjtcbiAgICBkZXN0aW5hdGlvbkFkZHJlc3NEZXRhaWxzOiBBZGRyZXNzRGV0YWlscztcbiAgICBzdHhCYWxhbmNlOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPEJhc2VUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGJ1aWxkZXIgYXMgVHJhbnNmZXJCdWlsZGVyO1xuICAgIHR4QnVpbGRlci5mZWUoeyBmZWU6ICcyMDAnIH0pO1xuICAgIHR4QnVpbGRlci5udW1iZXJTaWduYXR1cmVzKDIpO1xuICAgIHR4QnVpbGRlci5mcm9tUHViS2V5KHB1YnMpO1xuICAgIHR4QnVpbGRlci5ub25jZShub25jZSk7XG4gICAgdHhCdWlsZGVyLnRvKGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHMuYWRkcmVzcyk7XG4gICAgdHhCdWlsZGVyLmFtb3VudChzdHhCYWxhbmNlKTtcbiAgICBpZiAoZGVzdGluYXRpb25BZGRyZXNzRGV0YWlscy5tZW1vSWQpIHtcbiAgICAgIHR4QnVpbGRlci5tZW1vKGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHMubWVtb0lkKTtcbiAgICB9XG4gICAgY29uc3QgYmFzZVR4biA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIGNvbnN0IHR4QnJvYWRjYXN0Rm9ybWF0ID0gYmFzZVR4bi50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgIGNvbnN0IHR4RGVzZXJpYWxpemVkID0gZGVzZXJpYWxpemVUcmFuc2FjdGlvbih0eEJyb2FkY2FzdEZvcm1hdCk7XG4gICAgY29uc3Qgc2VyaWFsaXplZEhleCA9IHNlcmlhbGl6ZVBheWxvYWQodHhEZXNlcmlhbGl6ZWQucGF5bG9hZCkudG9TdHJpbmcoJ2hleCcpO1xuICAgIGNvbnN0IHsgcmVjb3ZlcmFibGVBbW91bnQsIGZlZSB9ID0gYXdhaXQgdGhpcy5nZXRSZWNvdmVyYWJsZUFtb3VudEFuZEZlZShcbiAgICAgIHNlcmlhbGl6ZWRIZXgsXG4gICAgICB0eEJyb2FkY2FzdEZvcm1hdC5sZW5ndGgsXG4gICAgICBzdHhCYWxhbmNlXG4gICAgKTtcbiAgICB0eEJ1aWxkZXIuYW1vdW50KHJlY292ZXJhYmxlQW1vdW50KTtcbiAgICB0eEJ1aWxkZXIuZmVlKHsgZmVlOiBmZWUgfSk7XG4gICAgcmV0dXJuIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0aGF0IHVzZXMgYXBwcm9wcmlhdGUgYnVpbGRlciBhbmQgYnVpbGRzIHRyYW5zYWN0aW9uIGRlcGVuZGluZyBvbiB0b2tlbiBvciBuYXRpdmUgY29pblxuICAgKiBAcGFyYW0ge1N0cmluZ1tdfSBwdWJzIC0gcHVibGljIGtleXNcbiAgICogQHBhcmFtIHtBZGRyZXNzRGV0YWlsc30gcm9vdEFkZHJlc3NEZXRhaWxzIC0gc2VuZGVyIGFkZHJlc3MgZGV0YWlsXG4gICAqIEBwYXJhbSB7QWRkcmVzc0RldGFpbHN9IGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHMgLSByZWNlaXZlciBhZGRyZXNzIGRldGFpbFxuICAgKiBAcGFyYW0ge051bWJlcn0gbm9uY2UgLSB3YWxsZXQgbm9uY2VcbiAgICogQHBhcmFtIHtTdHJpbmd9IGJhbGFuY2UgLSB3YWxsZXQgYmFsYW5jZVxuICAgKiBAcGFyYW0ge1N0cmluZyB8IHVuZGVmaW5lZH0gY29udHJhY3RBZGRyZXNzIC0gdG9rZW4gY29udHJhY3QgYWRkcmVzc1xuICAgKiBAcGFyYW0ge1N0cmluZyB8IHVuZGVmaW5lZH0gY29udHJhY3ROYW1lIC0gdG9rZW4gY29udHJhY3QgbmFtZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxCYXNlVHJhbnNhY3Rpb24+fSBidWlsdCB0cmFuc2FjdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGdldE5hdGl2ZU9yVG9rZW5UcmFuc2FjdGlvbih7XG4gICAgcHVicyxcbiAgICByb290QWRkcmVzc0RldGFpbHMsXG4gICAgZGVzdGluYXRpb25BZGRyZXNzRGV0YWlscyxcbiAgICBub25jZSxcbiAgICBzdHhCYWxhbmNlLFxuICAgIGNvbnRyYWN0QWRkcmVzc0lucHV0LFxuICAgIGNvbnRyYWN0TmFtZSxcbiAgfToge1xuICAgIHB1YnM6IHN0cmluZ1tdO1xuICAgIHJvb3RBZGRyZXNzRGV0YWlsczogQWRkcmVzc0RldGFpbHM7XG4gICAgZGVzdGluYXRpb25BZGRyZXNzRGV0YWlsczogQWRkcmVzc0RldGFpbHM7XG4gICAgbm9uY2U6IG51bWJlcjtcbiAgICBzdHhCYWxhbmNlOiBzdHJpbmc7XG4gICAgY29udHJhY3RBZGRyZXNzSW5wdXQ/OiBzdHJpbmc7XG4gICAgY29udHJhY3ROYW1lPzogc3RyaW5nO1xuICB9KTogUHJvbWlzZTx7IHR4OiBCYXNlVHJhbnNhY3Rpb247IGJ1aWxkZXI6IFRyYW5zZmVyQnVpbGRlciB8IEZ1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXIgfT4ge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSB0aGlzLmdldFRva2VuT3JOYXRpdmVUcmFuc2ZlckJ1aWxkZXIoY29udHJhY3RBZGRyZXNzSW5wdXQsIGNvbnRyYWN0TmFtZSk7XG4gICAgY29uc3QgY29udHJhY3RBZGRyZXNzID0gY29udHJhY3RBZGRyZXNzSW5wdXQ/LnRvVXBwZXJDYXNlKCk7XG4gICAgY29uc3QgaXNUb2tlbiA9ICEhY29udHJhY3RBZGRyZXNzICYmICEhY29udHJhY3ROYW1lO1xuICAgIGxldCBmaW5hbFR4OiBCYXNlVHJhbnNhY3Rpb247XG4gICAgaWYgKGlzVG9rZW4pIHtcbiAgICAgIGZpbmFsVHggPSBhd2FpdCB0aGlzLmJ1aWxkVG9rZW5UcmFuc2ZlclRyYW5zYWN0aW9uKHtcbiAgICAgICAgYnVpbGRlcjogYnVpbGRlciBhcyBGdW5naWJsZVRva2VuVHJhbnNmZXJCdWlsZGVyLFxuICAgICAgICBjb250cmFjdEFkZHJlc3MsXG4gICAgICAgIGNvbnRyYWN0TmFtZSxcbiAgICAgICAgcHVicyxcbiAgICAgICAgbm9uY2UsXG4gICAgICAgIHJvb3RBZGRyZXNzRGV0YWlscyxcbiAgICAgICAgZGVzdGluYXRpb25BZGRyZXNzRGV0YWlscyxcbiAgICAgICAgc3R4QmFsYW5jZSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaW5hbFR4ID0gYXdhaXQgdGhpcy5idWlsZE5hdGl2ZVRyYW5zZmVyVHJhbnNhY3Rpb24oe1xuICAgICAgICBidWlsZGVyOiBidWlsZGVyIGFzIFRyYW5zZmVyQnVpbGRlcixcbiAgICAgICAgcHVicyxcbiAgICAgICAgbm9uY2UsXG4gICAgICAgIGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHMsXG4gICAgICAgIHN0eEJhbGFuY2UsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHR4OiBmaW5hbFR4LFxuICAgICAgYnVpbGRlcjogYnVpbGRlcixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byByZWNvdmVyIG5hdGl2ZSBzdHggb3Igc2lwMTAgdG9rZW5zIGZyb20gYml0Z28gaG90ICYgY29sZCB3YWxsZXRzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXJhbXMuYmFja3VwS2V5IC0gZW5jcnlwdGVkIHdhbGxldCBiYWNrdXAga2V5IChwdWJsaWMgb3IgcHJpdmF0ZSlcbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhcmFtcy51c2VyS2V5IC0gZW5jcnlwdGVkIHdhbGxldCB1c2VyIGtleSAocHVibGljIG9yIHByaXZhdGUpXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXJhbXMucm9vdEFkZHJlc3MgLSB3YWxsZXQgcm9vdCBhZGRyZXNzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbiAtIHJlY2VpdmUgYWRkcmVzc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1zLmJpdGdvS2V5IC0gZW5jcnlwdGVkIGJpdGdvIHB1YmxpYyBrZXlcbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlIC0gd2FsbGV0IHBhc3N3b3JkXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXJhbXMuY29udHJhY3RJZCAtIGNvbnRyYWN0IGlkIG9mIHRoZSB0b2tlbiAobWFuZGF0b3J5IGZvciB0b2tlbiByZWNvdmVyeSlcbiAgICogQHJldHVybnMge1Byb21pc2U8UmVjb3ZlcnlJbmZvfFJlY292ZXJ5VHJhbnNhY3Rpb24+fSBSZWNvdmVyeVRyYW5zYWN0aW9uLnR4SGV4IC0gaGV4IG9mIHNlcmlhbGl6ZWQgdHJhbnNhY3Rpb24gKHNpZ25lZCBvciB1bnNpZ25lZClcbiAgICovXG4gIGFzeW5jIHJlY292ZXIocGFyYW1zOiBSZWNvdmVyeU9wdGlvbnMpOiBQcm9taXNlPFJlY292ZXJ5SW5mbyB8IFJlY292ZXJ5VHJhbnNhY3Rpb24+IHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZEFkZHJlc3MocGFyYW1zLnJvb3RBZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHJvb3QgYWRkcmVzcyEnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRBZGRyZXNzKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGRlc3RpbmF0aW9uIGFkZHJlc3MhJyk7XG4gICAgfVxuICAgIGxldCBjb250cmFjdEFkZHJlc3M6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgY29udHJhY3ROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHBhcmFtcy5jb250cmFjdElkKSB7XG4gICAgICBbY29udHJhY3RBZGRyZXNzLCBjb250cmFjdE5hbWVdID0gcGFyYW1zLmNvbnRyYWN0SWQuc3BsaXQoJy4nKTtcbiAgICAgIGlmICgoY29udHJhY3RBZGRyZXNzICYmICFjb250cmFjdE5hbWUpIHx8IChjb250cmFjdE5hbWUgJiYgIWNvbnRyYWN0QWRkcmVzcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGNvbnRyYWN0IGlkLCBwbGVhc2UgcHJvdmlkZSBpdCBpbiB0aGUgZm9ybSAoY29udHJhY3RBZGRyZXNzLmNvbnRyYWN0TmFtZSknKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgaXNVbnNpZ25lZFN3ZWVwID0gZ2V0SXNVbnNpZ25lZFN3ZWVwKHBhcmFtcyk7XG4gICAgY29uc3Qga2V5cyA9IGF3YWl0IGdldEJpcDMyS2V5cyh0aGlzLmJpdGdvLCBwYXJhbXMsIHsgcmVxdWlyZUJpdEdvWHB1YjogdHJ1ZSB9KTtcbiAgICBjb25zdCByb290QWRkcmVzc0RldGFpbHMgPSBnZXRBZGRyZXNzRGV0YWlscyhwYXJhbXMucm9vdEFkZHJlc3MpO1xuICAgIGNvbnN0IFthY2NvdW50QmFsYW5jZURhdGEsIGFjY291bnROb25jZURhdGFdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5nZXROYXRpdmVTdHhCYWxhbmNlRnJvbU5vZGUoeyBhZGRyZXNzOiByb290QWRkcmVzc0RldGFpbHMuYWRkcmVzcyB9KSxcbiAgICAgIHRoaXMuZ2V0QWNjb3VudE5vbmNlRnJvbU5vZGUoeyBhZGRyZXNzOiByb290QWRkcmVzc0RldGFpbHMuYWRkcmVzcyB9KSxcbiAgICBdKTtcbiAgICBjb25zdCBiYWxhbmNlID0gTnVtYmVyKGFjY291bnRCYWxhbmNlRGF0YS5iYWxhbmNlKTtcbiAgICBpZiAoIWJhbGFuY2UgfHwgaXNOYU4oYmFsYW5jZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IGZpbmQgYW55IGJhbGFuY2UgdG8gcmVjb3ZlciBmb3IgJyArIHBhcmFtcy5yb290QWRkcmVzcyk7XG4gICAgfVxuICAgIGNvbnN0IHVzZXJQdWIgPSBwdWJsaWNLZXlGcm9tQnVmZmVyKGtleXNbMF0ucHVibGljS2V5KTtcbiAgICBjb25zdCBiYWNrdXBQdWIgPSBwdWJsaWNLZXlGcm9tQnVmZmVyKGtleXNbMV0ucHVibGljS2V5KTtcbiAgICBjb25zdCBiaXRnb1B1YktleSA9IHB1YmxpY0tleUZyb21CdWZmZXIoa2V5c1syXS5wdWJsaWNLZXkpO1xuICAgIGNvbnN0IHB1YnMgPSBbcHVibGljS2V5VG9TdHJpbmcodXNlclB1YiksIHB1YmxpY0tleVRvU3RyaW5nKGJhY2t1cFB1YiksIHB1YmxpY0tleVRvU3RyaW5nKGJpdGdvUHViS2V5KV07XG5cbiAgICBjb25zdCBkZXN0aW5hdGlvbkFkZHJlc3NEZXRhaWxzID0gZ2V0QWRkcmVzc0RldGFpbHMocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24pO1xuICAgIGNvbnN0IG5vbmNlID1cbiAgICAgIHR5cGVvZiBhY2NvdW50Tm9uY2VEYXRhPy5sYXN0X2V4ZWN1dGVkX3R4X25vbmNlID09PSAnbnVtYmVyJyA/IGFjY291bnROb25jZURhdGEubGFzdF9leGVjdXRlZF90eF9ub25jZSArIDEgOiAwO1xuXG4gICAgY29uc3QgeyB0eCwgYnVpbGRlciB9ID0gYXdhaXQgdGhpcy5nZXROYXRpdmVPclRva2VuVHJhbnNhY3Rpb24oe1xuICAgICAgcHVicyxcbiAgICAgIHJvb3RBZGRyZXNzRGV0YWlscyxcbiAgICAgIGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHMsXG4gICAgICBub25jZSxcbiAgICAgIHN0eEJhbGFuY2U6IGFjY291bnRCYWxhbmNlRGF0YS5iYWxhbmNlLFxuICAgICAgY29udHJhY3RBZGRyZXNzSW5wdXQ6IGNvbnRyYWN0QWRkcmVzcyxcbiAgICAgIGNvbnRyYWN0TmFtZTogY29udHJhY3ROYW1lLFxuICAgIH0pO1xuXG4gICAgaWYgKGlzVW5zaWduZWRTd2VlcCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZm9ybWF0Rm9yT2ZmbGluZVZhdWx0KHR4KTtcbiAgICB9XG4gICAgLy8gY2hlY2sgdGhlIHByaXZhdGUga2V5ICYgc2lnblxuICAgIGlmICgha2V5c1swXS5wcml2YXRlS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVzZXJLZXkgaXMgbm90IGEgcHJpdmF0ZSBrZXlgKTtcbiAgICB9XG4gICAgY29uc3QgdXNlcktleSA9IGNyZWF0ZVN0YWNrc1ByaXZhdGVLZXkoa2V5c1swXS5wcml2YXRlS2V5KTtcbiAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHByaXZhdGVLZXlUb1N0cmluZyh1c2VyS2V5KSB9KTtcblxuICAgIGNvbnN0IGhhbGZTaWduZWRUeCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCB0eEhleEhhbGZTaWduZWQgPSBoYWxmU2lnbmVkVHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICBjb25zdCBidWlsZGVyMiA9IHRoaXMuZ2V0VG9rZW5Pck5hdGl2ZVRyYW5zZmVyQnVpbGRlcihjb250cmFjdEFkZHJlc3MsIGNvbnRyYWN0TmFtZSk7XG4gICAgYnVpbGRlcjIuZnJvbSh0eEhleEhhbGZTaWduZWQpO1xuXG4gICAgaWYgKCFrZXlzWzFdLnByaXZhdGVLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgYmFja3VwS2V5IGlzIG5vdCBhIHByaXZhdGUga2V5YCk7XG4gICAgfVxuICAgIGNvbnN0IGJhY2t1cEtleSA9IGNyZWF0ZVN0YWNrc1ByaXZhdGVLZXkoa2V5c1sxXS5wcml2YXRlS2V5KTtcbiAgICBidWlsZGVyMi5zaWduKHsga2V5OiBwcml2YXRlS2V5VG9TdHJpbmcoYmFja3VwS2V5KSB9KTtcblxuICAgIGNvbnN0IGZ1bGx5U2lnbmVkVHggPSBhd2FpdCBidWlsZGVyMi5idWlsZCgpO1xuICAgIGNvbnN0IGZ1bGx5U2lnbmVkVHhIZXggPSBmdWxseVNpZ25lZFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHhIZXg6IGZ1bGx5U2lnbmVkVHhIZXgsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBhdWRpdERlY3J5cHRlZEtleShwYXJhbXM6IEF1ZGl0RGVjcnlwdGVkS2V5UGFyYW1zKSB7XG4gICAgdGhyb3cgbmV3IE1ldGhvZE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxufVxuIl19
|
|
674
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0eC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw4Q0FrQnlCO0FBQ3pCLDRDQUFnRjtBQUNoRix1REFlOEI7QUFDOUIsK0RBQXFFO0FBQ3JFLGdFQUFxQztBQUdyQyx3QkFBMkI7QUFDM0IsK0JBQWtEO0FBRWxELHVDQUtxQjtBQWVyQixNQUFhLEdBQUksU0FBUSxtQkFBUTtJQUcvQixZQUFZLEtBQWdCLEVBQUUsV0FBdUM7UUFDbkUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztJQUNwQyxDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsY0FBYyxDQUFDLFVBQXFDO1FBQ2xELE9BQU8sSUFBSSwrQkFBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQ3hFLENBQUM7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QVEsR0FBRyxJQUFJLENBQUMsK0JBQStCLENBQUMsZUFBZSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3JGLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLElBQUEscUNBQXNCLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzdELFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBQSxpQ0FBa0IsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFdEQsTUFBTSxhQUFhLEdBQUcsTUFBTSxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0MsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUUzRCxPQUFPO1lBQ0wsS0FBSyxFQUFFLGdCQUFnQjtTQUN4QixDQUFDO0lBQ0osQ0FBQztJQUVELGtCQUFrQjtJQUNsQixpQkFBaUIsQ0FBQyxNQUErQjtRQUMvQyxNQUFNLElBQUksb0NBQXlCLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0NBQ0Y7QUE5eEJELGtCQTh4QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBdWRpdERlY3J5cHRlZEtleVBhcmFtcyxcbiAgQmFzZUNvaW4sXG4gIEJhc2VUcmFuc2FjdGlvbixcbiAgQml0R29CYXNlLFxuICBFbnZpcm9ubWVudHMsXG4gIGdldEJpcDMyS2V5cyxcbiAgZ2V0SXNVbnNpZ25lZFN3ZWVwLFxuICBLZXlQYWlyLFxuICBNZXRob2ROb3RJbXBsZW1lbnRlZEVycm9yLFxuICBNdWx0aXNpZ1R5cGUsXG4gIG11bHRpc2lnVHlwZXMsXG4gIFNpZ25lZFRyYW5zYWN0aW9uLFxuICBUcmFuc2FjdGlvblBhcmFtcyxcbiAgVHJhbnNhY3Rpb25SZWNpcGllbnQsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbiAgVmVyaWZ5QWRkcmVzc09wdGlvbnMsXG4gIFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyxcbn0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiwgQ29pbkZhbWlseSwgY29pbnMgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQge1xuICBidWZmZXJDVkZyb21TdHJpbmcsXG4gIENsYXJpdHlUeXBlLFxuICBDbGFyaXR5VmFsdWUsXG4gIGNyZWF0ZVN0YWNrc1ByaXZhdGVLZXksXG4gIGN2VG9TdHJpbmcsXG4gIGN2VG9WYWx1ZSxcbiAgZGVzZXJpYWxpemVUcmFuc2FjdGlvbixcbiAgbm9uZUNWLFxuICBwcml2YXRlS2V5VG9TdHJpbmcsXG4gIHB1YmxpY0tleUZyb21CdWZmZXIsXG4gIHB1YmxpY0tleVRvU3RyaW5nLFxuICBzb21lQ1YsXG4gIHN0YW5kYXJkUHJpbmNpcGFsQ1YsXG4gIHVpbnRDVixcbn0gZnJvbSAnQHN0YWNrcy90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgc2VyaWFsaXplUGF5bG9hZCB9IGZyb20gJ0BzdGFja3MvdHJhbnNhY3Rpb25zL2Rpc3QvcGF5bG9hZCc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5cbmltcG9ydCB7IEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnMsIFN0eFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMsIFN0eFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFN0eExpYiB9IGZyb20gJy4nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4vbGliJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vbGliL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQge1xuICBmaW5kQ29udHJhY3RUb2tlbk5hbWVVc2luZ0NvbnRyYWN0LFxuICBmaW5kVG9rZW5OYW1lQnlDb250cmFjdCxcbiAgZ2V0QWRkcmVzc0RldGFpbHMsXG4gIGdldE1lbW9JZEFuZEJhc2VBZGRyZXNzRnJvbUFkZHJlc3MsXG59IGZyb20gJy4vbGliL3V0aWxzJztcbmltcG9ydCB7XG4gIEFkZHJlc3NEZXRhaWxzLFxuICBOYXRpdmVTdHhCYWxhbmNlLFxuICBSZWNvdmVyeUluZm8sXG4gIFJlY292ZXJ5T3B0aW9ucyxcbiAgUmVjb3ZlcnlUcmFuc2FjdGlvbixcbiAgU2luZ2xlRnVuZ2libGVUb2tlbkJhbGFuY2UsXG4gIFN0eE5vbmNlUmVzcG9uc2UsXG4gIFN0eFR4bkZlZUVzdGltYXRpb25SZXNwb25zZSxcbiAgVHhEYXRhLFxufSBmcm9tICcuL2xpYi9pZmFjZSc7XG5pbXBvcnQgeyBUcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuL2xpYi90cmFuc2ZlckJ1aWxkZXInO1xuaW1wb3J0IHsgRnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4vbGliL2Z1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXInO1xuXG5leHBvcnQgY2xhc3MgU3R4IGV4dGVuZHMgQmFzZUNvaW4ge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3N0YXRpY3NDb2luOiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+O1xuXG4gIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPikge1xuICAgIHN1cGVyKGJpdGdvKTtcblxuICAgIGlmICghc3RhdGljc0NvaW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIgc3RhdGljc0NvaW4nKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0aWNzQ29pbiA9IHN0YXRpY3NDb2luO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZUluc3RhbmNlKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPik6IEJhc2VDb2luIHtcbiAgICByZXR1cm4gbmV3IFN0eChiaXRnbywgc3RhdGljc0NvaW4pO1xuICB9XG5cbiAgZ2V0Q2hhaW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGljc0NvaW4ubmFtZTtcbiAgfVxuXG4gIGdldEZhbWlseSgpOiBDb2luRmFtaWx5IHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGljc0NvaW4uZmFtaWx5O1xuICB9XG5cbiAgZ2V0RnVsbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGljc0NvaW4uZnVsbE5hbWU7XG4gIH1cblxuICBnZXRCYXNlRmFjdG9yKCk6IHN0cmluZyB8IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgucG93KDEwLCB0aGlzLl9zdGF0aWNzQ29pbi5kZWNpbWFsUGxhY2VzKTtcbiAgfVxuXG4gIGdldFRyYW5zYWN0aW9uKGNvaW5Db25maWc6IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2luQ29uZmlnKS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgfVxuXG4gIC8qKiBpbmhlcml0ZWQgZG9jICovXG4gIGdldERlZmF1bHRNdWx0aXNpZ1R5cGUoKTogTXVsdGlzaWdUeXBlIHtcbiAgICByZXR1cm4gbXVsdGlzaWdUeXBlcy5vbmNoYWluO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5VHJhbnNhY3Rpb24ocGFyYW1zOiBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IHR4UHJlYnVpbGQsIHR4UGFyYW1zIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgeyBtZW1vIH0gPSB0eFBhcmFtcztcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0eFBhcmFtcy5yZWNpcGllbnRzKSAmJiB0eFBhcmFtcy5yZWNpcGllbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYCR7dGhpcy5nZXRDaGFpbigpfSBkb2Vzbid0IHN1cHBvcnQgc2VuZGluZyB0byBtb3JlIHRoYW4gMSBkZXN0aW5hdGlvbiBhZGRyZXNzIHdpdGhpbiBhIHNpbmdsZSB0cmFuc2FjdGlvbi4gVHJ5IGFnYWluLCB1c2luZyBvbmx5IGEgc2luZ2xlIHJlY2lwaWVudC5gXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCByYXdUeCA9IHR4UHJlYnVpbGQ/LnR4SGV4O1xuICAgIGlmICghcmF3VHgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCB0eCBwcmVidWlsZCBwcm9wZXJ0eSB0eEhleCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc1NidGNXaXRoZHJhd1BhcmFtcyh0eFBhcmFtcykpIHtcbiAgICAgIHJldHVybiB0aGlzLnZlcmlmeVNidGNXaXRoZHJhd1RyYW5zYWN0aW9uKHJhd1R4LCB0eFBhcmFtcy5zYnRjV2l0aGRyYXdQYXJhbXMpO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cGxhaW5lZFR4ID0gYXdhaXQgdGhpcy5leHBsYWluVHJhbnNhY3Rpb24oeyB0eEhleDogcmF3VHgsIGZlZUluZm86IHsgZmVlOiAnJyB9IH0pO1xuICAgIGNvbnN0IHJlY2lwaWVudCA9IHR4UGFyYW1zLnJlY2lwaWVudHM/LlswXTtcbiAgICBpZiAocmVjaXBpZW50ICE9PSB1bmRlZmluZWQgJiYgZXhwbGFpbmVkVHgpIHtcbiAgICAgIGNvbnN0IHR4T3V0cHV0ID0gZXhwbGFpbmVkVHgub3V0cHV0c1swXTtcbiAgICAgIGNvbnN0IHJlY2lwaWVudEFkZHJlc3MgPSBnZXRNZW1vSWRBbmRCYXNlQWRkcmVzc0Zyb21BZGRyZXNzKHJlY2lwaWVudC5hZGRyZXNzKS5hZGRyZXNzO1xuICAgICAgaWYgKHR4T3V0cHV0Py5hZGRyZXNzICE9PSByZWNpcGllbnRBZGRyZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVHggZGVzdGluYXRpb24gZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcyByZWNpcGllbnQ6IGV4cGVjdGVkICR7cmVjaXBpZW50QWRkcmVzc30gYnV0IGdvdCAke3R4T3V0cHV0Py5hZGRyZXNzfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChCaWdJbnQodHhPdXRwdXQ/LmFtb3VudCkgIT09IEJpZ0ludChyZWNpcGllbnQuYW1vdW50KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFR4IGFtb3VudCBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zIHJlY2lwaWVudCBhbW91bnQ6IGV4cGVjdGVkICR7cmVjaXBpZW50LmFtb3VudH0gYnV0IGdvdCAke3R4T3V0cHV0Py5hbW91bnR9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgLy8gY29tcGFyZSBtZW1vXG4gICAgICBsZXQgbWVtb0lucHV0ID0gJyc7XG4gICAgICBpZiAobWVtbyAmJiBtZW1vLnZhbHVlKSB7XG4gICAgICAgIG1lbW9JbnB1dCA9IG1lbW8udmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBhZGRyZXNzRGV0YWlscyA9IGdldE1lbW9JZEFuZEJhc2VBZGRyZXNzRnJvbUFkZHJlc3MocmVjaXBpZW50LmFkZHJlc3MpO1xuICAgICAgICBtZW1vSW5wdXQgPSBhZGRyZXNzRGV0YWlscy5tZW1vSWQgPz8gJyc7XG4gICAgICB9XG4gICAgICBjb25zdCBtZW1vT3V0cHV0ID0gZXhwbGFpbmVkVHgubWVtbyA/PyAnJztcbiAgICAgIGlmIChtZW1vSW5wdXQgIT09IG1lbW9PdXRwdXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUeCBtZW1vIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdHhQYXJhbXMgcmVjaXBpZW50IG1lbW8nKTtcbiAgICAgIH1cbiAgICAgIC8vIGNvbXBhcmUgYW1vdW50XG4gICAgICBpZiAoIW5ldyBCaWdOdW1iZXIocmVjaXBpZW50LmFtb3VudCkuaXNFcXVhbFRvKGV4cGxhaW5lZFR4Lm91dHB1dEFtb3VudCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUeCB0b3RhbCBhbW91bnQgZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0b3RhbCBhbW91bnQgZmllbGQnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGhhc1NidGNXaXRoZHJhd1BhcmFtcyhcbiAgICB0eFBhcmFtczogVHJhbnNhY3Rpb25QYXJhbXNcbiAgKTogdHhQYXJhbXMgaXMgVHJhbnNhY3Rpb25QYXJhbXMgJiB7IHNidGNXaXRoZHJhd1BhcmFtczogU3R4TGliLlNidGNXaXRoZHJhd1BhcmFtcyB9IHtcbiAgICByZXR1cm4gJ3NidGNXaXRoZHJhd1BhcmFtcycgaW4gdHhQYXJhbXMgJiYgdHhQYXJhbXMuc2J0Y1dpdGhkcmF3UGFyYW1zICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZ5IGFuIHNCVEMgd2l0aGRyYXdhbCAoYnVybikgdHJhbnNhY3Rpb24gbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgd2l0aGRyYXdhbCBwYXJhbXMuXG4gICAqXG4gICAqIEBwYXJhbSByYXdUeCAtIHRoZSByYXcgKGJ1aWx0KSB0cmFuc2FjdGlvbiBoZXggZnJvbSB0eFByZWJ1aWxkXG4gICAqIEBwYXJhbSBleHBlY3RlZCAtIHRoZSBzYnRjV2l0aGRyYXdQYXJhbXMgc3VwcGxpZWQgYnkgdGhlIGNhbGxlciBpbiB0eFBhcmFtc1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB2ZXJpZnlTYnRjV2l0aGRyYXdUcmFuc2FjdGlvbihyYXdUeDogc3RyaW5nLCBleHBlY3RlZDogU3R4TGliLlNidGNXaXRoZHJhd1BhcmFtcyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgU3R4TGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KHRoaXMuZ2V0Q2hhaW4oKSkpO1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmZyb20ocmF3VHgpO1xuICAgIGlmICghKGJ1aWxkZXIgaW5zdGFuY2VvZiBTdHhMaWIuU2J0Y1dpdGhkcmF3QnVpbGRlcikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVHggaXMgbm90IGEgdmFsaWQgc0JUQyB3aXRoZHJhd2FsIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYWN0dWFsID0gYnVpbGRlci5nZXRXaXRoZHJhd1BhcmFtcygpO1xuICAgIGlmICghYWN0dWFsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBwYXJzZSBzQlRDIHdpdGhkcmF3YWwgcGFyYW1zIGZyb20gdHgnKTtcbiAgICB9XG5cbiAgICBpZiAoQmlnSW50KGFjdHVhbC5hbW91bnQpICE9PSBCaWdJbnQoZXhwZWN0ZWQuYW1vdW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVHggc0JUQyB3aXRoZHJhd2FsIGFtb3VudCBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBhbW91bnQ6IGV4cGVjdGVkICR7ZXhwZWN0ZWQuYW1vdW50fSBidXQgZ290ICR7YWN0dWFsLmFtb3VudH1gXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoQmlnSW50KGFjdHVhbC5tYXhGZWUpICE9PSBCaWdJbnQoZXhwZWN0ZWQubWF4RmVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVHggc0JUQyB3aXRoZHJhd2FsIG1heEZlZSBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBtYXhGZWU6IGV4cGVjdGVkICR7ZXhwZWN0ZWQubWF4RmVlfSBidXQgZ290ICR7YWN0dWFsLm1heEZlZX1gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGRlY29kZWRFeHBlY3RlZCA9IFN0eExpYi5kZWNvZGVCdGNBZGRyZXNzKGV4cGVjdGVkLmJ0Y0FkZHJlc3MpO1xuICAgIGlmIChcbiAgICAgIGRlY29kZWRFeHBlY3RlZC52ZXJzaW9uICE9PSBhY3R1YWwucmVjaXBpZW50VmVyc2lvbiB8fFxuICAgICAgIWRlY29kZWRFeHBlY3RlZC5oYXNoQnl0ZXMuZXF1YWxzKGFjdHVhbC5yZWNpcGllbnRIYXNoQnl0ZXMpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUeCBzQlRDIHdpdGhkcmF3YWwgYnRjQWRkcmVzcyBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBidGNBZGRyZXNzOiBleHBlY3RlZCAke2V4cGVjdGVkLmJ0Y0FkZHJlc3N9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhZGRyZXNzIGlzIHZhbGlkLCB0aGVuIG1ha2Ugc3VyZSBpdCBtYXRjaGVzIHRoZSBiYXNlIGFkZHJlc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7VmVyaWZ5QWRkcmVzc09wdGlvbnN9IHBhcmFtc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1zLmFkZHJlc3MgLSB0aGUgYWRkcmVzcyB0byB2ZXJpZnlcbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhcmFtcy5iYXNlQWRkcmVzcyAtIHRoZSBiYXNlIGFkZHJlc3MgZnJvbSB0aGUgd2FsbGV0XG4gICAqL1xuICBhc3luYyBpc1dhbGxldEFkZHJlc3MocGFyYW1zOiBWZXJpZnlBZGRyZXNzT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgYWRkcmVzcywga2V5Y2hhaW5zIH0gPSBwYXJhbXM7XG4gICAgaWYgKCFrZXljaGFpbnMgfHwga2V5Y2hhaW5zLmxlbmd0aCAhPT0gMykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGtleWNoYWlucycpO1xuICAgIH1cbiAgICBjb25zdCBwdWJzID0ga2V5Y2hhaW5zLm1hcCgoa2V5Y2hhaW4pID0+IFN0eExpYi5VdGlscy54cHViVG9TVFhQdWJrZXkoa2V5Y2hhaW4ucHViKSk7XG4gICAgY29uc3QgYWRkcmVzc1ZlcnNpb24gPSBTdHhMaWIuVXRpbHMuZ2V0QWRkcmVzc1ZlcnNpb24oYWRkcmVzcyk7XG4gICAgY29uc3QgYmFzZUFkZHJlc3MgPSBTdHhMaWIuVXRpbHMuZ2V0U1RYQWRkcmVzc0Zyb21QdWJLZXlzKHB1YnMsIGFkZHJlc3NWZXJzaW9uKS5hZGRyZXNzO1xuICAgIHJldHVybiBTdHhMaWIuVXRpbHMuaXNTYW1lQmFzZUFkZHJlc3MoYWRkcmVzcywgYmFzZUFkZHJlc3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIFN0YWNrcyBrZXkgcGFpclxuICAgKlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gc2VlZCAtIFNlZWQgZnJvbSB3aGljaCB0aGUgbmV3IGtleXBhaXIgc2hvdWxkIGJlIGdlbmVyYXRlZCwgb3RoZXJ3aXNlIGEgcmFuZG9tIHNlZWQgaXMgdXNlZFxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBvYmplY3Qgd2l0aCBnZW5lcmF0ZWQgcHViIGFuZCBwcnZcbiAgICovXG4gIGdlbmVyYXRlS2V5UGFpcihzZWVkPzogQnVmZmVyKTogS2V5UGFpciB7XG4gICAgY29uc3Qga2V5UGFpciA9IHNlZWQgPyBuZXcgU3R4TGliLktleVBhaXIoeyBzZWVkIH0pIDogbmV3IFN0eExpYi5LZXlQYWlyKCk7XG4gICAgY29uc3Qga2V5cyA9IGtleVBhaXIuZ2V0RXh0ZW5kZWRLZXlzKCk7XG5cbiAgICBpZiAoIWtleXMueHBydikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHhwcnYgaW4ga2V5IGdlbmVyYXRpb24uJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHB1Yjoga2V5cy54cHViLFxuICAgICAgcHJ2OiBrZXlzLnhwcnYsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgaW5wdXQgaXMgdmFsaWQgcHVibGljIGtleSBmb3IgdGhlIGNvaW5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHB1YiB0aGUgcHJ2IHRvIGJlIGNoZWNrZWRcbiAgICogQHJldHVybnMgaXMgaXQgdmFsaWQ/XG4gICAqL1xuICBpc1ZhbGlkUHViKHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBTdHhMaWIuVXRpbHMuaXNWYWxpZFB1YmxpY0tleShwdWIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGlucHV0IGlzIHZhbGlkIHByaXZhdGUga2V5IGZvciB0aGUgY29pblxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJ2IHRoZSBwcnYgdG8gYmUgY2hlY2tlZFxuICAgKiBAcmV0dXJucyBpcyBpdCB2YWxpZD9cbiAgICovXG4gIGlzVmFsaWRQcnYocHJ2OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIFN0eExpYi5VdGlscy5pc1ZhbGlkUHJpdmF0ZUtleShwcnYpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIFN0eExpYi5VdGlscy5pc1ZhbGlkQWRkcmVzc1dpdGhQYXltZW50SWQoYWRkcmVzcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaWducyBzdGFja3MgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgYXN5bmMgc2lnblRyYW5zYWN0aW9uKHBhcmFtczogU3R4U2lnblRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8U2lnbmVkVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCBmYWN0b3J5ID0gbmV3IFN0eExpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCh0aGlzLmdldENoYWluKCkpKTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20ocGFyYW1zLnR4UHJlYnVpbGQudHhIZXgpO1xuICAgIGNvbnN0IHBydktleXMgPSBwYXJhbXMucHJ2IGluc3RhbmNlb2YgQXJyYXkgPyBwYXJhbXMucHJ2IDogW3BhcmFtcy5wcnZdO1xuICAgIHBydktleXMuZm9yRWFjaCgocHJ2KSA9PiB0eEJ1aWxkZXIuc2lnbih7IGtleTogcHJ2IH0pKTtcbiAgICBpZiAocGFyYW1zLnB1YktleXMpIHR4QnVpbGRlci5mcm9tUHViS2V5KHBhcmFtcy5wdWJLZXlzKTtcbiAgICAvLyBpZiAocGFyYW1zLm51bWJlclNpZ25hdHVyZSkgdHhCdWlsZGVyLm51bWJlclNpZ25hdHVyZXMocGFyYW1zLm51bWJlclNpZ25hdHVyZSk7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgIGlmICghdHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtZXNzYWdlIHBhc3NlZCB0byBzaWduTWVzc2FnZScpO1xuICAgIH1cblxuICAgIGNvbnN0IHR4SGV4ID0ge1xuICAgICAgdHhIZXg6IHRyYW5zYWN0aW9uLnRvQnJvYWRjYXN0Rm9ybWF0KCksXG4gICAgfTtcblxuICAgIHJldHVybiB0cmFuc2FjdGlvbi5zaWduYXR1cmUubGVuZ3RoID49IDIgPyB0eEhleCA6IHsgaGFsZlNpZ25lZDogdHhIZXggfTtcbiAgfVxuXG4gIGFzeW5jIHBhcnNlVHJhbnNhY3Rpb24ocGFyYW1zOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBsYWluIGEgU3RhY2tzIHRyYW5zYWN0aW9uIGZyb20gdHhIZXhcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgYXN5bmMgZXhwbGFpblRyYW5zYWN0aW9uKHBhcmFtczogRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8U3R4VHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHR4SGV4ID0gcGFyYW1zLnR4SGV4IHx8IChwYXJhbXMuaGFsZlNpZ25lZCAmJiBwYXJhbXMuaGFsZlNpZ25lZC50eEhleCk7XG4gICAgaWYgKCF0eEhleCB8fCAhcGFyYW1zLmZlZUluZm8pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBleHBsYWluIHR4IHBhcmFtZXRlcnMnKTtcbiAgICB9XG5cbiAgICBjb25zdCBmYWN0b3J5ID0gbmV3IFN0eExpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCh0aGlzLmdldENoYWluKCkpKTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odHhIZXgpO1xuXG4gICAgaWYgKHBhcmFtcy5wdWJsaWNLZXlzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHR4QnVpbGRlci5mcm9tUHViS2V5KHBhcmFtcy5wdWJsaWNLZXlzKTtcbiAgICAgIGlmIChwYXJhbXMucHVibGljS2V5cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgLy8gZGVmaW5pdGVseSBhIHNpbmdsZSBzaWcgdHhcbiAgICAgICAgdHhCdWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcblxuICAgIGlmICh0eC50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU2VuZCkge1xuICAgICAgLy8gY2hlY2sgaWYgaXQgaXMgYSB0b2tlbiB0cmFuc2FjdGlvbiBvciBuYXRpdmUgY29pbiB0cmFuc2FjdGlvblxuICAgICAgbGV0IHRyYW5zYWN0aW9uUmVjaXBpZW50OiBUcmFuc2FjdGlvblJlY2lwaWVudDtcbiAgICAgIGxldCBvdXRwdXRBbW91bnQ6IHN0cmluZztcbiAgICAgIGxldCBtZW1vOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAodHhKc29uLnBheWxvYWQuY29udHJhY3RBZGRyZXNzICYmIHR4SnNvbi5wYXlsb2FkLmZ1bmN0aW9uQXJncy5sZW5ndGggPj0gMykge1xuICAgICAgICBvdXRwdXRBbW91bnQgPSBjdlRvVmFsdWUodHhKc29uLnBheWxvYWQuZnVuY3Rpb25BcmdzWzBdKS50b1N0cmluZygpO1xuICAgICAgICB0cmFuc2FjdGlvblJlY2lwaWVudCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBjdlRvU3RyaW5nKHR4SnNvbi5wYXlsb2FkLmZ1bmN0aW9uQXJnc1syXSksXG4gICAgICAgICAgYW1vdW50OiBvdXRwdXRBbW91bnQsXG4gICAgICAgICAgdG9rZW5OYW1lOiBmaW5kVG9rZW5OYW1lQnlDb250cmFjdCh0eEpzb24ucGF5bG9hZC5jb250cmFjdEFkZHJlc3MsIHR4SnNvbi5wYXlsb2FkLmNvbnRyYWN0TmFtZSksXG4gICAgICAgIH07XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eEpzb24ucGF5bG9hZC5mdW5jdGlvbkFyZ3MubGVuZ3RoID09PSA0ICYmXG4gICAgICAgICAgdHhKc29uLnBheWxvYWQuZnVuY3Rpb25BcmdzWzNdLnR5cGUgPT09IENsYXJpdHlUeXBlLk9wdGlvbmFsU29tZVxuICAgICAgICApIHtcbiAgICAgICAgICBtZW1vID0gQnVmZmVyLmZyb20odHhKc29uLnBheWxvYWQuZnVuY3Rpb25BcmdzWzNdLnZhbHVlLmJ1ZmZlcikudG9TdHJpbmcoKTtcbiAgICAgICAgICB0cmFuc2FjdGlvblJlY2lwaWVudFsnbWVtbyddID0gbWVtbztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0QW1vdW50ID0gdHhKc29uLnBheWxvYWQuYW1vdW50O1xuICAgICAgICBtZW1vID0gdHhKc29uLnBheWxvYWQubWVtbztcbiAgICAgICAgdHJhbnNhY3Rpb25SZWNpcGllbnQgPSB7XG4gICAgICAgICAgYWRkcmVzczogdHhKc29uLnBheWxvYWQudG8sXG4gICAgICAgICAgYW1vdW50OiBvdXRwdXRBbW91bnQsXG4gICAgICAgICAgbWVtbzogbWVtbyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG91dHB1dHM6IFRyYW5zYWN0aW9uUmVjaXBpZW50W10gPSBbdHJhbnNhY3Rpb25SZWNpcGllbnRdO1xuXG4gICAgICBjb25zdCBkaXNwbGF5T3JkZXIgPSBbJ2lkJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VBbW91bnQnLCAnb3V0cHV0cycsICdjaGFuZ2VPdXRwdXRzJywgJ2ZlZScsICdtZW1vJywgJ3R5cGUnXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpc3BsYXlPcmRlcixcbiAgICAgICAgaWQ6IHR4SnNvbi5pZCxcbiAgICAgICAgb3V0cHV0QW1vdW50OiBvdXRwdXRBbW91bnQudG9TdHJpbmcoKSxcbiAgICAgICAgY2hhbmdlQW1vdW50OiAnMCcsXG4gICAgICAgIG91dHB1dHMsXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgICBmZWU6IHR4SnNvbi5mZWUsXG4gICAgICAgIG1lbW86IG1lbW8sXG4gICAgICAgIHR5cGU6IHR4LnR5cGUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0eC50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKSB7XG4gICAgICBjb25zdCBkaXNwbGF5T3JkZXIgPSBbXG4gICAgICAgICdpZCcsXG4gICAgICAgICdmZWUnLFxuICAgICAgICAndHlwZScsXG4gICAgICAgICdjb250cmFjdEFkZHJlc3MnLFxuICAgICAgICAnY29udHJhY3ROYW1lJyxcbiAgICAgICAgJ2NvbnRyYWN0RnVuY3Rpb24nLFxuICAgICAgICAnY29udHJhY3RGdW5jdGlvbkFyZ3MnLFxuICAgICAgXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpc3BsYXlPcmRlcixcbiAgICAgICAgaWQ6IHR4SnNvbi5pZCxcbiAgICAgICAgY2hhbmdlQW1vdW50OiAnMCcsXG4gICAgICAgIG91dHB1dEFtb3VudDogJycsXG4gICAgICAgIG91dHB1dHM6IFtdLFxuICAgICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgICAgZmVlOiB0eEpzb24uZmVlLFxuICAgICAgICB0eXBlOiB0eC50eXBlLFxuICAgICAgICBjb250cmFjdEFkZHJlc3M6IHR4SnNvbi5wYXlsb2FkLmNvbnRyYWN0QWRkcmVzcyxcbiAgICAgICAgY29udHJhY3ROYW1lOiB0eEpzb24ucGF5bG9hZC5jb250cmFjdE5hbWUsXG4gICAgICAgIGNvbnRyYWN0RnVuY3Rpb246IHR4SnNvbi5wYXlsb2FkLmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgY29udHJhY3RGdW5jdGlvbkFyZ3M6IHR4SnNvbi5wYXlsb2FkLmZ1bmN0aW9uQXJncyxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBVUkxzIG9mIHNvbWUgYWN0aXZlIHB1YmxpYyBub2Rlc1xuICAgKiBAcmV0dXJucyB7U3RyaW5nfSBub2RlIHVybFxuICAgKi9cbiAgZ2V0UHVibGljTm9kZVVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBFbnZpcm9ubWVudHNbdGhpcy5iaXRnby5nZXRFbnYoKV0uc3R4Tm9kZVVybDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbmF0aXZlIHN0YWNrcyBiYWxhbmNlIGZvciBhbiBhY2NvdW50XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBhZGRyZXNzIC0gc3RhY2tzIGFkZHJlc3NcbiAgICogQHJldHVybnMge1Byb21pc2U8TmF0aXZlU3R4QmFsYW5jZT59XG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0TmF0aXZlU3R4QmFsYW5jZUZyb21Ob2RlKHsgYWRkcmVzcyB9OiB7IGFkZHJlc3M6IHN0cmluZyB9KTogUHJvbWlzZTxOYXRpdmVTdHhCYWxhbmNlPiB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBgJHt0aGlzLmdldFB1YmxpY05vZGVVcmwoKX0vZXh0ZW5kZWQvdjIvYWRkcmVzc2VzLyR7YWRkcmVzc30vYmFsYW5jZXMvc3R4YDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmJpdGdvLmdldChlbmRwb2ludCk7XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgcmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgJHtyZXNwb25zZS5zdGF0dXNDb2RlfWApO1xuICAgICAgfVxuICAgICAgY29uc3QgYm9keTogTmF0aXZlU3R4QmFsYW5jZSA9IHJlc3BvbnNlLmJvZHk7XG4gICAgICByZXR1cm4gYm9keTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuYWJsZSB0byBnZXQgbmF0aXZlIHN0eCBiYWxhbmNlIGZyb20gbm9kZTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzaW5nbGUgZnVuZ2libGUgdG9rZW4gYmFsYW5jZSBmb3IgYW4gYWNjb3VudFxuICAgKiBAcGFyYW0ge1N0cmluZ30gYWRkcmVzcyAtIHN0YWNrcyBhZGRyZXNzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBhc3NldElkIC0gZnVuZ2libGUgdG9rZW4gYXNzZXQgaWRcbiAgICogQHJldHVybnMge1Byb21pc2U8U2luZ2xlRnVuZ2libGVUb2tlbkJhbGFuY2U+fVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGdldFNpbmdsZUZ1bmdpYmxlVG9rZW5CYWxhbmNlRnJvbU5vZGUoe1xuICAgIGFkZHJlc3MsXG4gICAgYXNzZXRJZCxcbiAgfToge1xuICAgIGFkZHJlc3M6IHN0cmluZztcbiAgICBhc3NldElkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFNpbmdsZUZ1bmdpYmxlVG9rZW5CYWxhbmNlPiB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBgJHt0aGlzLmdldFB1YmxpY05vZGVVcmwoKX0vZXh0ZW5kZWQvdjIvYWRkcmVzc2VzLyR7YWRkcmVzc30vYmFsYW5jZXMvZnQvJHthc3NldElkfWA7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5iaXRnby5nZXQoZW5kcG9pbnQpO1xuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzICR7cmVzcG9uc2Uuc3RhdHVzQ29kZX1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJvZHk6IFNpbmdsZUZ1bmdpYmxlVG9rZW5CYWxhbmNlID0gcmVzcG9uc2UuYm9keTtcbiAgICAgIHJldHVybiBib2R5O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdW5hYmxlIHRvIGdldCBuYXRpdmUgc3R4IGJhbGFuY2UgZnJvbSBub2RlOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IG5vbmNlIGRhdGEgc3BlY2lmaWMgdG8gYW4gYWNjb3VudCBmcm9tIGEgcHVibGljIG5vZGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IGFkZHJlc3MgLSBzdGFja3MgYWRkcmVzc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxTdHhOb25jZVJlc3BvbnNlPn1cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBnZXRBY2NvdW50Tm9uY2VGcm9tTm9kZSh7IGFkZHJlc3MgfTogeyBhZGRyZXNzOiBzdHJpbmcgfSk6IFByb21pc2U8U3R4Tm9uY2VSZXNwb25zZT4ge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7dGhpcy5nZXRQdWJsaWNOb2RlVXJsKCl9L2V4dGVuZGVkL3YxL2FkZHJlc3MvJHthZGRyZXNzfS9ub25jZXNgO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYml0Z28uZ2V0KGVuZHBvaW50KTtcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGByZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyAke3Jlc3BvbnNlLnN0YXR1c0NvZGV9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBib2R5OiBTdHhOb25jZVJlc3BvbnNlID0gcmVzcG9uc2UuYm9keTtcbiAgICAgIHJldHVybiBib2R5O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdW5hYmxlIHRvIGdldCBhY2NvdW50IG5vbmNlIGZyb20gbm9kZTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzdGFja3MgdHJhbnNhY3Rpb24gZXN0aW1hdGVkIGZlZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gdHhIZXggLSBoZXggb2Ygc3RhY2tzIHRyYW5zYWN0aW9uIHBheWxvYWRcbiAgICogQHBhcmFtIHtOdW1iZXJ9IHR4SGV4TGVuZ3RoIC0gbGVuZ3RoIG9mIGJ1aWx0IHNlcmlhbGl6ZWQgdHJhbnNhY3Rpb25cbiAgICogQHJldHVybnMge1Byb21pc2U8TnVtYmVyPn0gLSBmZWUgZXN0aW1hdGUgKHRha2luZyB0aGUgbG93ZXN0KVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGdldFRyYW5zYWN0aW9uRmVlRXN0aW1hdGlvbih7XG4gICAgdHhIZXgsXG4gICAgdHhIZXhMZW5ndGgsXG4gIH06IHtcbiAgICB0eEhleDogc3RyaW5nO1xuICAgIHR4SGV4TGVuZ3RoOiBudW1iZXI7XG4gIH0pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7dGhpcy5nZXRQdWJsaWNOb2RlVXJsKCl9L3YyL2ZlZXMvdHJhbnNhY3Rpb25gO1xuICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0ge1xuICAgICAgdHJhbnNhY3Rpb25fcGF5bG9hZDogdHhIZXgsXG4gICAgICBlc3RpbWF0ZWRfbGVuOiB0eEhleExlbmd0aCxcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYml0Z28ucG9zdChlbmRwb2ludCkuc2VuZChyZXF1ZXN0Qm9keSk7XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgcmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgJHtyZXNwb25zZS5zdGF0dXNDb2RlfWApO1xuICAgICAgfVxuICAgICAgY29uc3QgYm9keTogU3R4VHhuRmVlRXN0aW1hdGlvblJlc3BvbnNlID0gcmVzcG9uc2UuYm9keTtcbiAgICAgIGlmIChib2R5LmVzdGltYXRpb25zLmxlbmd0aCAhPT0gMykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcmVzcG9uc2UgZXN0aW1hdGlvbiBsZW5ndGgnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBib2R5LmVzdGltYXRpb25zWzBdLmZlZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuYWJsZSB0byBnZXQgdHJhbnNhY3Rpb24gZmVlIGVzdGltYXRpb246ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgZm9yIG9mZmxpbmUgdmF1bHQgc2lnbmluZ1xuICAgKiBAcGFyYW0ge0Jhc2VUcmFuc2FjdGlvbn0gdHggLSBiYXNlIHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFJlY292ZXJ5SW5mbz59XG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgZm9ybWF0Rm9yT2ZmbGluZVZhdWx0KHR4OiBCYXNlVHJhbnNhY3Rpb24pOiBQcm9taXNlPFJlY292ZXJ5SW5mbz4ge1xuICAgIGNvbnN0IHR4SnNvbjogVHhEYXRhID0gdHgudG9Kc29uKCk7XG4gICAgY29uc3QgdHJhbnNhY3Rpb25FeHBsYW5hdGlvbjogUmVjb3ZlcnlJbmZvID0gKGF3YWl0IHRoaXMuZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4SGV4OiB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLFxuICAgICAgZmVlSW5mbzogeyBmZWU6IHR4SnNvbi5mZWUgfSxcbiAgICB9KSkgYXMgUmVjb3ZlcnlJbmZvO1xuICAgIHRyYW5zYWN0aW9uRXhwbGFuYXRpb24uY29pbiA9IHRoaXMuZ2V0Q2hhaW4oKTtcbiAgICB0cmFuc2FjdGlvbkV4cGxhbmF0aW9uLmZlZUluZm8gPSB7IGZlZTogdHhKc29uLmZlZSB9O1xuICAgIHRyYW5zYWN0aW9uRXhwbGFuYXRpb24udHhIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgIHJldHVybiB0cmFuc2FjdGlvbkV4cGxhbmF0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcmVjb3ZlcmFibGUgYW1vdW50ICYgZmVlIGFmdGVyIHN1YnRyYWN0aW5nIHRoZSB0eG4gZmVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzZXJpYWxpemVkSGV4IC0gc2VyaWFsaXplZCB0eG4gaGV4XG4gICAqIEBwYXJhbSB7TnVtYmVyfSB0eEhleExlbmd0aCAtIGRlc2VyaWFsaXplZCB0eG4gbGVuZ3RoXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBiYWxhbmNlIC0gdG90YWwgYWNjb3VudCBiYWxhbmNlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0b2tlbkJhbGFuY2UgLSB0b3RhbCB0b2tlbiBiYWxhbmNlXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+fVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGdldFJlY292ZXJhYmxlQW1vdW50QW5kRmVlKFxuICAgIHNlcmlhbGl6ZWRIZXg6IHN0cmluZyxcbiAgICB0eEhleExlbmd0aDogbnVtYmVyLFxuICAgIGJhbGFuY2U6IHN0cmluZyxcbiAgICB0b2tlbkJhbGFuY2U/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gICAgY29uc3QgZXN0aW1hdGVkRmVlID0gYXdhaXQgdGhpcy5nZXRUcmFuc2FjdGlvbkZlZUVzdGltYXRpb24oe1xuICAgICAgdHhIZXg6IHNlcmlhbGl6ZWRIZXgsXG4gICAgICB0eEhleExlbmd0aDogdHhIZXhMZW5ndGgsXG4gICAgfSk7XG4gICAgY29uc3QgYmFsYW5jZUJOID0gbmV3IEJpZ051bWJlcihiYWxhbmNlKTtcbiAgICBjb25zdCBmZWVCTiA9IG5ldyBCaWdOdW1iZXIoZXN0aW1hdGVkRmVlKTtcbiAgICBpZiAoYmFsYW5jZUJOLmlzTGVzc1RoYW4oZmVlQk4pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2luc3VmZmljaWVudCBiYWxhbmNlIHRvIGJ1aWxkIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgcmVjb3ZlcmFibGVBbW91bnQ6IHRva2VuQmFsYW5jZSA/PyBiYWxhbmNlQk4ubWludXMoZmVlQk4pLnRvU3RyaW5nKCksXG4gICAgICBmZWU6IGZlZUJOLnRvU3RyaW5nKCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gZmluZCB0aGUgcmlnaHQgYnVpbGRlciBmb3IgdG9rZW4gb3IgbmF0aXZlIGNvaW4gdHJhbnNmZXJcbiAgICogQHBhcmFtIHtTdHJpbmd9IGNvbnRyYWN0QWRkcmVzcyAtIHRva2VuIGNvbnRyYWN0IGFkZHJlc3NcbiAgICogQHBhcmFtIHtTdHJpbmd9IGNvbnRyYWN0TmFtZSAtIHRva2VuIGNvbnRyYWN0IG5hbWVcbiAgICogQHJldHVybnMge1RyYW5zZmVyQnVpbGRlcnxGdW5naWJsZVRva2VuVHJhbnNmZXJCdWlsZGVyfVxuICAgKi9cbiAgcHJvdGVjdGVkIGdldFRva2VuT3JOYXRpdmVUcmFuc2ZlckJ1aWxkZXIoXG4gICAgY29udHJhY3RBZGRyZXNzPzogc3RyaW5nLFxuICAgIGNvbnRyYWN0TmFtZT86IHN0cmluZ1xuICApOiBUcmFuc2ZlckJ1aWxkZXIgfCBGdW5naWJsZVRva2VuVHJhbnNmZXJCdWlsZGVyIHtcbiAgICBjb25zdCBpc1Rva2VuID0gISFjb250cmFjdEFkZHJlc3MgJiYgISFjb250cmFjdE5hbWU7XG4gICAgbGV0IGZhY3Rvcnk6IFRyYW5zYWN0aW9uQnVpbGRlckZhY3Rvcnk7XG4gICAgaWYgKGlzVG9rZW4pIHtcbiAgICAgIGNvbnN0IHRva2VuTmFtZSA9IGZpbmRUb2tlbk5hbWVCeUNvbnRyYWN0KGNvbnRyYWN0QWRkcmVzcywgY29udHJhY3ROYW1lKTtcbiAgICAgIGlmICghdG9rZW5OYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBjb250cmFjdCBhZGRyZXNzIG9yIGNvbnRyYWN0IG5hbWUsIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgIH1cbiAgICAgIGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQodG9rZW5OYW1lKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQodGhpcy5nZXRDaGFpbigpKSk7XG4gICAgfVxuICAgIGxldCBidWlsZGVyOiBUcmFuc2ZlckJ1aWxkZXIgfCBGdW5naWJsZVRva2VuVHJhbnNmZXJCdWlsZGVyO1xuICAgIGlmIChpc1Rva2VuKSB7XG4gICAgICBidWlsZGVyID0gZmFjdG9yeS5nZXRGdW5naWJsZVRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIH1cbiAgICByZXR1cm4gYnVpbGRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gYnVpbGQgZnVuZ2libGUgdG9rZW4gdHJhbnNmZXIgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtGdW5naWJsZVRva2VuVHJhbnNmZXJCdWlsZGVyfSBidWlsZGVyIC0gZnVuZ2libGUgdG9rZW4gdHJhbnNmZXIgYnVpbGRlclxuICAgKiBAcGFyYW0ge1N0cmluZ30gY29udHJhY3RBZGRyZXNzIC0gdG9rZW4gY29udHJhY3QgYWRkcmVzc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gY29udHJhY3ROYW1lIC0gdG9rZW4gY29udHJhY3QgbmFtZVxuICAgKiBAcGFyYW0ge1N0cmluZ1tdfSBwdWJzIC0gYWNjb3VudCBwdWJsaWMga2V5c1xuICAgKiBAcGFyYW0ge051bWJlcn0gbm9uY2UgLSBhY2NvdW50IG5vbmNlXG4gICAqIEBwYXJhbSB7QWRkcmVzc0RldGFpbHN9IHJvb3RBZGRyZXNzRGV0YWlscyAtIHJvb3QgYWRkcmVzcyBkZXRhaWxzXG4gICAqIEBwYXJhbSB7QWRkcmVzc0RldGFpbHN9IGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHMgLSByZWNlaXZlIGFkZHJlc3MgZGV0YWlsc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gc3R4QmFsYW5jZSAtIG5hdGl2ZSBzdHggYmFsYW5jZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxCYXNlVHJhbnNhY3Rpb24+fSAtIGJ1aWx0IHRyYW5zYWN0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRUb2tlblRyYW5zZmVyVHJhbnNhY3Rpb24oe1xuICAgIGJ1aWxkZXIsXG4gICAgY29udHJhY3RBZGRyZXNzLFxuICAgIGNvbnRyYWN0TmFtZSxcbiAgICBwdWJzLFxuICAgIG5vbmNlLFxuICAgIHJvb3RBZGRyZXNzRGV0YWlscyxcbiAgICBkZXN0aW5hdGlvbkFkZHJlc3NEZXRhaWxzLFxuICAgIHN0eEJhbGFuY2UsXG4gIH06IHtcbiAgICBidWlsZGVyOiBGdW5naWJsZVRva2VuVHJhbnNmZXJCdWlsZGVyO1xuICAgIGNvbnRyYWN0QWRkcmVzczogc3RyaW5nO1xuICAgIGNvbnRyYWN0TmFtZTogc3RyaW5nO1xuICAgIHB1YnM6IHN0cmluZ1tdO1xuICAgIG5vbmNlOiBudW1iZXI7XG4gICAgcm9vdEFkZHJlc3NEZXRhaWxzOiBBZGRyZXNzRGV0YWlscztcbiAgICBkZXN0aW5hdGlvbkFkZHJlc3NEZXRhaWxzOiBBZGRyZXNzRGV0YWlscztcbiAgICBzdHhCYWxhbmNlOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPEJhc2VUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGJ1aWxkZXIgYXMgRnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlcjtcbiAgICBjb25zdCBjb250cmFjdFRva2VuTmFtZSA9IGZpbmRDb250cmFjdFRva2VuTmFtZVVzaW5nQ29udHJhY3QoY29udHJhY3RBZGRyZXNzLCBjb250cmFjdE5hbWUpO1xuICAgIGlmICghY29udHJhY3RUb2tlbk5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBjb250cmFjdCBhZGRyZXNzIG9yIGNvbnRyYWN0IG5hbWUsIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG4gICAgY29uc3QgYXNzZXRJZCA9IGAke2NvbnRyYWN0QWRkcmVzc30uJHtjb250cmFjdE5hbWV9Ojoke2NvbnRyYWN0VG9rZW5OYW1lfWA7XG4gICAgLy8gZmV0Y2ggdGhlIHRva2VuIGJhbGFuY2VcbiAgICBjb25zdCB0b2tlbkJhbGFuY2VEYXRhID0gYXdhaXQgdGhpcy5nZXRTaW5nbGVGdW5naWJsZVRva2VuQmFsYW5jZUZyb21Ob2RlKHtcbiAgICAgIGFkZHJlc3M6IHJvb3RBZGRyZXNzRGV0YWlscy5hZGRyZXNzLFxuICAgICAgYXNzZXRJZCxcbiAgICB9KTtcbiAgICBjb25zdCB0b2tlbkJhbGFuY2UgPSB0b2tlbkJhbGFuY2VEYXRhPy5iYWxhbmNlO1xuICAgIGlmICghTnVtYmVyKHRva2VuQmFsYW5jZSkgfHwgaXNOYU4oTnVtYmVyKHRva2VuQmFsYW5jZSkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBubyB0b2tlbiBiYWxhbmNlIGZvdW5kIHRvIHJlY292ZXIgZm9yIGFkZHJlc3M6ICR7cm9vdEFkZHJlc3NEZXRhaWxzLmFkZHJlc3N9LCB0b2tlbjogJHthc3NldElkfWBcbiAgICAgICk7XG4gICAgfVxuICAgIHR4QnVpbGRlci5mZWUoeyBmZWU6ICcyMDAnIH0pO1xuICAgIHR4QnVpbGRlci5udW1iZXJTaWduYXR1cmVzKDIpO1xuICAgIHR4QnVpbGRlci5mcm9tUHViS2V5KHB1YnMpO1xuICAgIHR4QnVpbGRlci5ub25jZShub25jZSk7XG4gICAgdHhCdWlsZGVyLmNvbnRyYWN0QWRkcmVzcyhjb250cmFjdEFkZHJlc3MpO1xuICAgIHR4QnVpbGRlci5jb250cmFjdE5hbWUoY29udHJhY3ROYW1lKTtcbiAgICBpZiAoY29udHJhY3RUb2tlbk5hbWUpIHtcbiAgICAgIHR4QnVpbGRlci50b2tlbk5hbWUoY29udHJhY3RUb2tlbk5hbWUpO1xuICAgIH1cbiAgICB0eEJ1aWxkZXIuZnVuY3Rpb25OYW1lKCd0cmFuc2ZlcicpO1xuICAgIGNvbnN0IGZ1bmN0aW9uQXJnczogQ2xhcml0eVZhbHVlW10gPSBbXG4gICAgICB1aW50Q1YodG9rZW5CYWxhbmNlKSxcbiAgICAgIHN0YW5kYXJkUHJpbmNpcGFsQ1Yocm9vdEFkZHJlc3NEZXRhaWxzLmFkZHJlc3MpLFxuICAgICAgc3RhbmRhcmRQcmluY2lwYWxDVihkZXN0aW5hdGlvbkFkZHJlc3NEZXRhaWxzLmFkZHJlc3MpLFxuICAgIF07XG4gICAgaWYgKGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHMubWVtb0lkKSB7XG4gICAgICBmdW5jdGlvbkFyZ3MucHVzaChzb21lQ1YoYnVmZmVyQ1ZGcm9tU3RyaW5nKGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHMubWVtb0lkKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmdW5jdGlvbkFyZ3MucHVzaChub25lQ1YoKSk7XG4gICAgfVxuICAgIHR4QnVpbGRlci5mdW5jdGlvbkFyZ3MoZnVuY3Rpb25BcmdzKTtcbiAgICBjb25zdCBiYXNlVHhuID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QgdHhCcm9hZGNhc3RGb3JtYXQgPSBiYXNlVHhuLnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgY29uc3QgdHhEZXNlcmlhbGl6ZWQgPSBkZXNlcmlhbGl6ZVRyYW5zYWN0aW9uKHR4QnJvYWRjYXN0Rm9ybWF0KTtcbiAgICBjb25zdCBzZXJpYWxpemVkSGV4ID0gc2VyaWFsaXplUGF5bG9hZCh0eERlc2VyaWFsaXplZC5wYXlsb2FkKS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3QgeyByZWNvdmVyYWJsZUFtb3VudCwgZmVlIH0gPSBhd2FpdCB0aGlzLmdldFJlY292ZXJhYmxlQW1vdW50QW5kRmVlKFxuICAgICAgc2VyaWFsaXplZEhleCxcbiAgICAgIHR4QnJvYWRjYXN0Rm9ybWF0Lmxlbmd0aCxcbiAgICAgIHN0eEJhbGFuY2UsXG4gICAgICB0b2tlbkJhbGFuY2VcbiAgICApO1xuICAgIGZ1bmN0aW9uQXJnc1swXSA9IHVpbnRDVihyZWNvdmVyYWJsZUFtb3VudCk7XG4gICAgdHhCdWlsZGVyLmZ1bmN0aW9uQXJncyhmdW5jdGlvbkFyZ3MpO1xuICAgIHR4QnVpbGRlci5mZWUoeyBmZWU6IGZlZSB9KTtcbiAgICByZXR1cm4gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRvIGJ1aWxkIG5hdGl2ZSB0cmFuc2ZlciB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge1RyYW5zZmVyQnVpbGRlcn0gYnVpbGRlciAtIHRyYW5zZmVyIGJ1aWxkZXJcbiAgICogQHBhcmFtIHtTdHJpbmdbXX0gcHVicyAtIGFjY291bnQgcHVibGljIGtleXNcbiAgICogQHBhcmFtIHtOdW1iZXJ9IG5vbmNlIC0gYWNjb3VudCBub25jZVxuICAgKiBAcGFyYW0ge0FkZHJlc3NEZXRhaWxzfSBkZXN0aW5hdGlvbkFkZHJlc3NEZXRhaWxzIC0gcmVjZWl2ZSBhZGRyZXNzIGRldGFpbHNcbiAgICogQHBhcmFtIHtTdHJpbmd9IHN0eEJhbGFuY2UgLSBuYXRpdmUgc3R4IGJhbGFuY2VcbiAgICogQHJldHVybnMge1Byb21pc2U8QmFzZVRyYW5zYWN0aW9uPn0gLSBidWlsdCB0cmFuc2FjdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkTmF0aXZlVHJhbnNmZXJUcmFuc2FjdGlvbih7XG4gICAgYnVpbGRlcixcbiAgICBwdWJzLFxuICAgIG5vbmNlLFxuICAgIGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHMsXG4gICAgc3R4QmFsYW5jZSxcbiAgfToge1xuICAgIGJ1aWxkZXI6IFRyYW5zZmVyQnVpbGRlcjtcbiAgICBwdWJzOiBzdHJpbmdbXTtcbiAgICBub25jZTogbnVtYmVyO1xuICAgIGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHM6IEFkZHJlc3NEZXRhaWxzO1xuICAgIHN0eEJhbGFuY2U6IHN0cmluZztcbiAgfSk6IFByb21pc2U8QmFzZVRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gYnVpbGRlciBhcyBUcmFuc2ZlckJ1aWxkZXI7XG4gICAgdHhCdWlsZGVyLmZlZSh7IGZlZTogJzIwMCcgfSk7XG4gICAgdHhCdWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMik7XG4gICAgdHhCdWlsZGVyLmZyb21QdWJLZXkocHVicyk7XG4gICAgdHhCdWlsZGVyLm5vbmNlKG5vbmNlKTtcbiAgICB0eEJ1aWxkZXIudG8oZGVzdGluYXRpb25BZGRyZXNzRGV0YWlscy5hZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIuYW1vdW50KHN0eEJhbGFuY2UpO1xuICAgIGlmIChkZXN0aW5hdGlvbkFkZHJlc3NEZXRhaWxzLm1lbW9JZCkge1xuICAgICAgdHhCdWlsZGVyLm1lbW8oZGVzdGluYXRpb25BZGRyZXNzRGV0YWlscy5tZW1vSWQpO1xuICAgIH1cbiAgICBjb25zdCBiYXNlVHhuID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QgdHhCcm9hZGNhc3RGb3JtYXQgPSBiYXNlVHhuLnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgY29uc3QgdHhEZXNlcmlhbGl6ZWQgPSBkZXNlcmlhbGl6ZVRyYW5zYWN0aW9uKHR4QnJvYWRjYXN0Rm9ybWF0KTtcbiAgICBjb25zdCBzZXJpYWxpemVkSGV4ID0gc2VyaWFsaXplUGF5bG9hZCh0eERlc2VyaWFsaXplZC5wYXlsb2FkKS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3QgeyByZWNvdmVyYWJsZUFtb3VudCwgZmVlIH0gPSBhd2FpdCB0aGlzLmdldFJlY292ZXJhYmxlQW1vdW50QW5kRmVlKFxuICAgICAgc2VyaWFsaXplZEhleCxcbiAgICAgIHR4QnJvYWRjYXN0Rm9ybWF0Lmxlbmd0aCxcbiAgICAgIHN0eEJhbGFuY2VcbiAgICApO1xuICAgIHR4QnVpbGRlci5hbW91bnQocmVjb3ZlcmFibGVBbW91bnQpO1xuICAgIHR4QnVpbGRlci5mZWUoeyBmZWU6IGZlZSB9KTtcbiAgICByZXR1cm4gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRoYXQgdXNlcyBhcHByb3ByaWF0ZSBidWlsZGVyIGFuZCBidWlsZHMgdHJhbnNhY3Rpb24gZGVwZW5kaW5nIG9uIHRva2VuIG9yIG5hdGl2ZSBjb2luXG4gICAqIEBwYXJhbSB7U3RyaW5nW119IHB1YnMgLSBwdWJsaWMga2V5c1xuICAgKiBAcGFyYW0ge0FkZHJlc3NEZXRhaWxzfSByb290QWRkcmVzc0RldGFpbHMgLSBzZW5kZXIgYWRkcmVzcyBkZXRhaWxcbiAgICogQHBhcmFtIHtBZGRyZXNzRGV0YWlsc30gZGVzdGluYXRpb25BZGRyZXNzRGV0YWlscyAtIHJlY2VpdmVyIGFkZHJlc3MgZGV0YWlsXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBub25jZSAtIHdhbGxldCBub25jZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gYmFsYW5jZSAtIHdhbGxldCBiYWxhbmNlXG4gICAqIEBwYXJhbSB7U3RyaW5nIHwgdW5kZWZpbmVkfSBjb250cmFjdEFkZHJlc3MgLSB0b2tlbiBjb250cmFjdCBhZGRyZXNzXG4gICAqIEBwYXJhbSB7U3RyaW5nIHwgdW5kZWZpbmVkfSBjb250cmFjdE5hbWUgLSB0b2tlbiBjb250cmFjdCBuYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEJhc2VUcmFuc2FjdGlvbj59IGJ1aWx0IHRyYW5zYWN0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0TmF0aXZlT3JUb2tlblRyYW5zYWN0aW9uKHtcbiAgICBwdWJzLFxuICAgIHJvb3RBZGRyZXNzRGV0YWlscyxcbiAgICBkZXN0aW5hdGlvbkFkZHJlc3NEZXRhaWxzLFxuICAgIG5vbmNlLFxuICAgIHN0eEJhbGFuY2UsXG4gICAgY29udHJhY3RBZGRyZXNzSW5wdXQsXG4gICAgY29udHJhY3ROYW1lLFxuICB9OiB7XG4gICAgcHViczogc3RyaW5nW107XG4gICAgcm9vdEFkZHJlc3NEZXRhaWxzOiBBZGRyZXNzRGV0YWlscztcbiAgICBkZXN0aW5hdGlvbkFkZHJlc3NEZXRhaWxzOiBBZGRyZXNzRGV0YWlscztcbiAgICBub25jZTogbnVtYmVyO1xuICAgIHN0eEJhbGFuY2U6IHN0cmluZztcbiAgICBjb250cmFjdEFkZHJlc3NJbnB1dD86IHN0cmluZztcbiAgICBjb250cmFjdE5hbWU/OiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPHsgdHg6IEJhc2VUcmFuc2FjdGlvbjsgYnVpbGRlcjogVHJhbnNmZXJCdWlsZGVyIHwgRnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlciB9PiB7XG4gICAgY29uc3QgYnVpbGRlciA9IHRoaXMuZ2V0VG9rZW5Pck5hdGl2ZVRyYW5zZmVyQnVpbGRlcihjb250cmFjdEFkZHJlc3NJbnB1dCwgY29udHJhY3ROYW1lKTtcbiAgICBjb25zdCBjb250cmFjdEFkZHJlc3MgPSBjb250cmFjdEFkZHJlc3NJbnB1dD8udG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCBpc1Rva2VuID0gISFjb250cmFjdEFkZHJlc3MgJiYgISFjb250cmFjdE5hbWU7XG4gICAgbGV0IGZpbmFsVHg6IEJhc2VUcmFuc2FjdGlvbjtcbiAgICBpZiAoaXNUb2tlbikge1xuICAgICAgZmluYWxUeCA9IGF3YWl0IHRoaXMuYnVpbGRUb2tlblRyYW5zZmVyVHJhbnNhY3Rpb24oe1xuICAgICAgICBidWlsZGVyOiBidWlsZGVyIGFzIEZ1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXIsXG4gICAgICAgIGNvbnRyYWN0QWRkcmVzcyxcbiAgICAgICAgY29udHJhY3ROYW1lLFxuICAgICAgICBwdWJzLFxuICAgICAgICBub25jZSxcbiAgICAgICAgcm9vdEFkZHJlc3NEZXRhaWxzLFxuICAgICAgICBkZXN0aW5hdGlvbkFkZHJlc3NEZXRhaWxzLFxuICAgICAgICBzdHhCYWxhbmNlLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbmFsVHggPSBhd2FpdCB0aGlzLmJ1aWxkTmF0aXZlVHJhbnNmZXJUcmFuc2FjdGlvbih7XG4gICAgICAgIGJ1aWxkZXI6IGJ1aWxkZXIgYXMgVHJhbnNmZXJCdWlsZGVyLFxuICAgICAgICBwdWJzLFxuICAgICAgICBub25jZSxcbiAgICAgICAgZGVzdGluYXRpb25BZGRyZXNzRGV0YWlscyxcbiAgICAgICAgc3R4QmFsYW5jZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdHg6IGZpbmFsVHgsXG4gICAgICBidWlsZGVyOiBidWlsZGVyLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRvIHJlY292ZXIgbmF0aXZlIHN0eCBvciBzaXAxMCB0b2tlbnMgZnJvbSBiaXRnbyBob3QgJiBjb2xkIHdhbGxldHNcbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhcmFtcy5iYWNrdXBLZXkgLSBlbmNyeXB0ZWQgd2FsbGV0IGJhY2t1cCBrZXkgKHB1YmxpYyBvciBwcml2YXRlKVxuICAgKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1zLnVzZXJLZXkgLSBlbmNyeXB0ZWQgd2FsbGV0IHVzZXIga2V5IChwdWJsaWMgb3IgcHJpdmF0ZSlcbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhcmFtcy5yb290QWRkcmVzcyAtIHdhbGxldCByb290IGFkZHJlc3NcbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uIC0gcmVjZWl2ZSBhZGRyZXNzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXJhbXMuYml0Z29LZXkgLSBlbmNyeXB0ZWQgYml0Z28gcHVibGljIGtleVxuICAgKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgLSB3YWxsZXQgcGFzc3dvcmRcbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhcmFtcy5jb250cmFjdElkIC0gY29udHJhY3QgaWQgb2YgdGhlIHRva2VuIChtYW5kYXRvcnkgZm9yIHRva2VuIHJlY292ZXJ5KVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxSZWNvdmVyeUluZm98UmVjb3ZlcnlUcmFuc2FjdGlvbj59IFJlY292ZXJ5VHJhbnNhY3Rpb24udHhIZXggLSBoZXggb2Ygc2VyaWFsaXplZCB0cmFuc2FjdGlvbiAoc2lnbmVkIG9yIHVuc2lnbmVkKVxuICAgKi9cbiAgYXN5bmMgcmVjb3ZlcihwYXJhbXM6IFJlY292ZXJ5T3B0aW9ucyk6IFByb21pc2U8UmVjb3ZlcnlJbmZvIHwgUmVjb3ZlcnlUcmFuc2FjdGlvbj4ge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzcyhwYXJhbXMucm9vdEFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcm9vdCBhZGRyZXNzIScpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNWYWxpZEFkZHJlc3MocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgZGVzdGluYXRpb24gYWRkcmVzcyEnKTtcbiAgICB9XG4gICAgbGV0IGNvbnRyYWN0QWRkcmVzczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGxldCBjb250cmFjdE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyYW1zLmNvbnRyYWN0SWQpIHtcbiAgICAgIFtjb250cmFjdEFkZHJlc3MsIGNvbnRyYWN0TmFtZV0gPSBwYXJhbXMuY29udHJhY3RJZC5zcGxpdCgnLicpO1xuICAgICAgaWYgKChjb250cmFjdEFkZHJlc3MgJiYgIWNvbnRyYWN0TmFtZSkgfHwgKGNvbnRyYWN0TmFtZSAmJiAhY29udHJhY3RBZGRyZXNzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgY29udHJhY3QgaWQsIHBsZWFzZSBwcm92aWRlIGl0IGluIHRoZSBmb3JtIChjb250cmFjdEFkZHJlc3MuY29udHJhY3ROYW1lKScpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBpc1Vuc2lnbmVkU3dlZXAgPSBnZXRJc1Vuc2lnbmVkU3dlZXAocGFyYW1zKTtcbiAgICBjb25zdCBrZXlzID0gYXdhaXQgZ2V0QmlwMzJLZXlzKHRoaXMuYml0Z28sIHBhcmFtcywgeyByZXF1aXJlQml0R29YcHViOiB0cnVlIH0pO1xuICAgIGNvbnN0IHJvb3RBZGRyZXNzRGV0YWlscyA9IGdldEFkZHJlc3NEZXRhaWxzKHBhcmFtcy5yb290QWRkcmVzcyk7XG4gICAgY29uc3QgW2FjY291bnRCYWxhbmNlRGF0YSwgYWNjb3VudE5vbmNlRGF0YV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICB0aGlzLmdldE5hdGl2ZVN0eEJhbGFuY2VGcm9tTm9kZSh7IGFkZHJlc3M6IHJvb3RBZGRyZXNzRGV0YWlscy5hZGRyZXNzIH0pLFxuICAgICAgdGhpcy5nZXRBY2NvdW50Tm9uY2VGcm9tTm9kZSh7IGFkZHJlc3M6IHJvb3RBZGRyZXNzRGV0YWlscy5hZGRyZXNzIH0pLFxuICAgIF0pO1xuICAgIGNvbnN0IGJhbGFuY2UgPSBOdW1iZXIoYWNjb3VudEJhbGFuY2VEYXRhLmJhbGFuY2UpO1xuICAgIGlmICghYmFsYW5jZSB8fCBpc05hTihiYWxhbmNlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgZmluZCBhbnkgYmFsYW5jZSB0byByZWNvdmVyIGZvciAnICsgcGFyYW1zLnJvb3RBZGRyZXNzKTtcbiAgICB9XG4gICAgY29uc3QgdXNlclB1YiA9IHB1YmxpY0tleUZyb21CdWZmZXIoa2V5c1swXS5wdWJsaWNLZXkpO1xuICAgIGNvbnN0IGJhY2t1cFB1YiA9IHB1YmxpY0tleUZyb21CdWZmZXIoa2V5c1sxXS5wdWJsaWNLZXkpO1xuICAgIGNvbnN0IGJpdGdvUHViS2V5ID0gcHVibGljS2V5RnJvbUJ1ZmZlcihrZXlzWzJdLnB1YmxpY0tleSk7XG4gICAgY29uc3QgcHVicyA9IFtwdWJsaWNLZXlUb1N0cmluZyh1c2VyUHViKSwgcHVibGljS2V5VG9TdHJpbmcoYmFja3VwUHViKSwgcHVibGljS2V5VG9TdHJpbmcoYml0Z29QdWJLZXkpXTtcblxuICAgIGNvbnN0IGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHMgPSBnZXRBZGRyZXNzRGV0YWlscyhwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbik7XG4gICAgY29uc3Qgbm9uY2UgPVxuICAgICAgdHlwZW9mIGFjY291bnROb25jZURhdGE/Lmxhc3RfZXhlY3V0ZWRfdHhfbm9uY2UgPT09ICdudW1iZXInID8gYWNjb3VudE5vbmNlRGF0YS5sYXN0X2V4ZWN1dGVkX3R4X25vbmNlICsgMSA6IDA7XG5cbiAgICBjb25zdCB7IHR4LCBidWlsZGVyIH0gPSBhd2FpdCB0aGlzLmdldE5hdGl2ZU9yVG9rZW5UcmFuc2FjdGlvbih7XG4gICAgICBwdWJzLFxuICAgICAgcm9vdEFkZHJlc3NEZXRhaWxzLFxuICAgICAgZGVzdGluYXRpb25BZGRyZXNzRGV0YWlscyxcbiAgICAgIG5vbmNlLFxuICAgICAgc3R4QmFsYW5jZTogYWNjb3VudEJhbGFuY2VEYXRhLmJhbGFuY2UsXG4gICAgICBjb250cmFjdEFkZHJlc3NJbnB1dDogY29udHJhY3RBZGRyZXNzLFxuICAgICAgY29udHJhY3ROYW1lOiBjb250cmFjdE5hbWUsXG4gICAgfSk7XG5cbiAgICBpZiAoaXNVbnNpZ25lZFN3ZWVwKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5mb3JtYXRGb3JPZmZsaW5lVmF1bHQodHgpO1xuICAgIH1cbiAgICAvLyBjaGVjayB0aGUgcHJpdmF0ZSBrZXkgJiBzaWduXG4gICAgaWYgKCFrZXlzWzBdLnByaXZhdGVLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdXNlcktleSBpcyBub3QgYSBwcml2YXRlIGtleWApO1xuICAgIH1cbiAgICBjb25zdCB1c2VyS2V5ID0gY3JlYXRlU3RhY2tzUHJpdmF0ZUtleShrZXlzWzBdLnByaXZhdGVLZXkpO1xuICAgIGJ1aWxkZXIuc2lnbih7IGtleTogcHJpdmF0ZUtleVRvU3RyaW5nKHVzZXJLZXkpIH0pO1xuXG4gICAgY29uc3QgaGFsZlNpZ25lZFR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgIGNvbnN0IHR4SGV4SGFsZlNpZ25lZCA9IGhhbGZTaWduZWRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgIGNvbnN0IGJ1aWxkZXIyID0gdGhpcy5nZXRUb2tlbk9yTmF0aXZlVHJhbnNmZXJCdWlsZGVyKGNvbnRyYWN0QWRkcmVzcywgY29udHJhY3ROYW1lKTtcbiAgICBidWlsZGVyMi5mcm9tKHR4SGV4SGFsZlNpZ25lZCk7XG5cbiAgICBpZiAoIWtleXNbMV0ucHJpdmF0ZUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBiYWNrdXBLZXkgaXMgbm90IGEgcHJpdmF0ZSBrZXlgKTtcbiAgICB9XG4gICAgY29uc3QgYmFja3VwS2V5ID0gY3JlYXRlU3RhY2tzUHJpdmF0ZUtleShrZXlzWzFdLnByaXZhdGVLZXkpO1xuICAgIGJ1aWxkZXIyLnNpZ24oeyBrZXk6IHByaXZhdGVLZXlUb1N0cmluZyhiYWNrdXBLZXkpIH0pO1xuXG4gICAgY29uc3QgZnVsbHlTaWduZWRUeCA9IGF3YWl0IGJ1aWxkZXIyLmJ1aWxkKCk7XG4gICAgY29uc3QgZnVsbHlTaWduZWRUeEhleCA9IGZ1bGx5U2lnbmVkVHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgIHJldHVybiB7XG4gICAgICB0eEhleDogZnVsbHlTaWduZWRUeEhleCxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGF1ZGl0RGVjcnlwdGVkS2V5KHBhcmFtczogQXVkaXREZWNyeXB0ZWRLZXlQYXJhbXMpIHtcbiAgICB0aHJvdyBuZXcgTWV0aG9kTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG59XG4iXX0=
|