@bitgo/sdk-coin-eos 1.6.5 → 2.0.1
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/CHANGELOG.md +15 -0
- package/dist/src/eos.js +13 -9
- package/dist/src/index.js +6 -2
- package/package.json +7 -7
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,21 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [2.0.1](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-eos@2.0.0...@bitgo/sdk-coin-eos@2.0.1) (2024-04-05)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-eos
|
|
9
|
+
|
|
10
|
+
# [2.0.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-eos@1.6.5...@bitgo/sdk-coin-eos@2.0.0) (2024-03-28)
|
|
11
|
+
|
|
12
|
+
### Features
|
|
13
|
+
|
|
14
|
+
- **root:** deprecate node 16 ([d3ec624](https://github.com/BitGo/BitGoJS/commit/d3ec6240bddae2a4ab7fa80c4a16efecc36210bd))
|
|
15
|
+
|
|
16
|
+
### BREAKING CHANGES
|
|
17
|
+
|
|
18
|
+
- **root:** Node 16 is no longer supported in bitgojs.
|
|
19
|
+
TICKET: WP-1100
|
|
20
|
+
|
|
6
21
|
## [1.6.5](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-eos@1.6.4...@bitgo/sdk-coin-eos@1.6.5) (2024-03-19)
|
|
7
22
|
|
|
8
23
|
**Note:** Version bump only for package @bitgo/sdk-coin-eos
|
package/dist/src/eos.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -93,7 +97,7 @@ class Eos extends sdk_core_1.BaseCoin {
|
|
|
93
97
|
// An extended private key has both a normal 256 bit private key and a 256
|
|
94
98
|
// bit chain code, both of which must be random. 512 bits is therefore the
|
|
95
99
|
// maximum entropy and gives us maximum security against cracking.
|
|
96
|
-
seed = crypto_1.randomBytes(512 / 8);
|
|
100
|
+
seed = (0, crypto_1.randomBytes)(512 / 8);
|
|
97
101
|
}
|
|
98
102
|
const extendedKey = utxo_lib_1.bip32.fromSeed(seed);
|
|
99
103
|
const xpub = extendedKey.neutered().toBase58();
|
|
@@ -311,7 +315,7 @@ class Eos extends sdk_core_1.BaseCoin {
|
|
|
311
315
|
};
|
|
312
316
|
}
|
|
313
317
|
static createTransactionIdHex(serializedTransactionBuffer) {
|
|
314
|
-
return crypto_1.createHash('sha256').update(serializedTransactionBuffer).digest().toString('hex');
|
|
318
|
+
return (0, crypto_1.createHash)('sha256').update(serializedTransactionBuffer).digest().toString('hex');
|
|
315
319
|
}
|
|
316
320
|
/**
|
|
317
321
|
* Deserialize a transaction
|
|
@@ -636,16 +640,16 @@ class Eos extends sdk_core_1.BaseCoin {
|
|
|
636
640
|
if (!params.rootAddress) {
|
|
637
641
|
throw new Error('missing required string rootAddress');
|
|
638
642
|
}
|
|
639
|
-
const isKrsRecovery = sdk_core_1.getIsKrsRecovery(params);
|
|
640
|
-
const isUnsignedSweep = sdk_core_1.getIsUnsignedSweep(params);
|
|
643
|
+
const isKrsRecovery = (0, sdk_core_1.getIsKrsRecovery)(params);
|
|
644
|
+
const isUnsignedSweep = (0, sdk_core_1.getIsUnsignedSweep)(params);
|
|
641
645
|
const { krsProvider } = params;
|
|
642
|
-
if (sdk_core_1.getIsKrsRecovery(params)) {
|
|
643
|
-
sdk_core_1.checkKrsProvider(this, krsProvider);
|
|
646
|
+
if ((0, sdk_core_1.getIsKrsRecovery)(params)) {
|
|
647
|
+
(0, sdk_core_1.checkKrsProvider)(this, krsProvider);
|
|
644
648
|
}
|
|
645
649
|
if (!this.isValidAddress(params.recoveryDestination)) {
|
|
646
650
|
throw new Error('Invalid destination address!');
|
|
647
651
|
}
|
|
648
|
-
const keys = sdk_core_1.getBip32Keys(this.bitgo, params, { requireBitGoXpub: false });
|
|
652
|
+
const keys = (0, sdk_core_1.getBip32Keys)(this.bitgo, params, { requireBitGoXpub: false });
|
|
649
653
|
const rootAddressDetails = this.getAddressDetails(params.rootAddress);
|
|
650
654
|
const account = await this.getAccountFromNode({ address: rootAddressDetails.address });
|
|
651
655
|
if (!account.core_liquid_balance) {
|
|
@@ -872,4 +876,4 @@ class Eos extends sdk_core_1.BaseCoin {
|
|
|
872
876
|
exports.Eos = Eos;
|
|
873
877
|
Eos.VALID_ADDRESS_CHARS = '12345abcdefghijklmnopqrstuvwxyz'.split('');
|
|
874
878
|
Eos.ADDRESS_LENGTH = 12;
|
|
875
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW9zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Vvcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0dBRUc7QUFDSCwrQ0FBeUM7QUFDekMsOENBQXdEO0FBQ3hELG1DQUFpRDtBQUNqRCxpQ0FBbUU7QUFDbkUsK0NBQWlDO0FBQ2pDLDBDQUE0QjtBQUM1Qix5REFBMkM7QUFDM0Msb0RBQXNDO0FBQ3RDLHlDQUEyQjtBQUUzQiw2REFBOEQ7QUFDOUQsdUNBQWdEO0FBQ2hELDhDQXFCeUI7QUFvSnpCLE1BQU0sV0FBWSxTQUFRLGVBQU87SUFDL0I7UUFDRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDWixDQUFDO0NBQ0Y7QUFFRCxNQUFNLHFCQUFxQjtJQUN6QixLQUFLLENBQUMsZ0JBQWdCO1FBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsOERBQThELENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUF5QztRQUNsRCxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7SUFDM0QsQ0FBQztDQUNGO0FBRUQsTUFBYSxHQUFJLFNBQVEsbUJBQVE7SUFJL0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFnQjtRQUNwQyxPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxVQUFVO1FBQ1IsT0FBTyxrRUFBa0UsQ0FBQyxDQUFDLG1CQUFtQjtJQUNoRyxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8s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QUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFMUYsSUFBSSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxjQUFjLEVBQUU7b0JBQzdDLE1BQU0sSUFBSSxLQUFLLENBQUMsK0RBQStELENBQUMsQ0FBQztpQkFDbEY7YUFDRjtpQkFBTTtnQkFDTCwyQkFBMkI7Z0JBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsbURBQW1ELENBQUMsQ0FBQzthQUN0RTtTQUNGO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILHFCQUFxQixDQUFDLE1BQTZCO1FBQ2pELE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQztRQUM3QixPQUFPLE9BQU8sQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFO1lBQzFCLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDVCxNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7YUFDbEU7WUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3BCO1FBQ0QsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7O0FBdjdCSCxrQkF3N0JDO0FBdjdCZSx1QkFBbUIsR0FBRyxpQ0FBaUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEUsa0JBQWMsR0FBRyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQgeyBCaWdOdW1iZXIgfSBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgYmlwMzIsIEJJUDMySW50ZXJmYWNlIH0gZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IGNyZWF0ZUhhc2gsIHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IEFwaSwgQXBpSW50ZXJmYWNlcywgSnNvblJwYywgUnBjSW50ZXJmYWNlcyB9IGZyb20gJ2Vvc2pzJztcbmltcG9ydCAqIGFzIGVjYyBmcm9tICdlb3Nqcy1lY2MnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICogYXMgcXVlcnlzdHJpbmcgZnJvbSAncXVlcnlzdHJpbmcnO1xuaW1wb3J0ICogYXMgcmVxdWVzdCBmcm9tICdzdXBlcmFnZW50JztcbmltcG9ydCAqIGFzIHVybCBmcm9tICd1cmwnO1xuXG5pbXBvcnQgeyBPZmZsaW5lQWJpUHJvdmlkZXIgfSBmcm9tICcuL2Vvc3V0aWwvZW9zYWJpcHJvdmlkZXInO1xuaW1wb3J0IHsgU3RyaW5nVGV4dERlY29kZXIgfSBmcm9tICcuL2xpYi91dGlscyc7XG5pbXBvcnQge1xuICBCYXNlQ29pbixcbiAgQml0R29CYXNlLFxuICBjaGVja0tyc1Byb3ZpZGVyLFxuICBFbnZpcm9ubWVudHMsXG4gIGdldEJpcDMyS2V5cyxcbiAgZ2V0SXNLcnNSZWNvdmVyeSxcbiAgZ2V0SXNVbnNpZ25lZFN3ZWVwLFxuICBIYWxmU2lnbmVkQWNjb3VudFRyYW5zYWN0aW9uIGFzIEJhc2VIYWxmU2lnbmVkVHJhbnNhY3Rpb24sXG4gIEludmFsaWRBZGRyZXNzRXJyb3IsXG4gIEtleVBhaXIsXG4gIFBhcnNlZFRyYW5zYWN0aW9uLFxuICBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgUmVxdWVzdFRyYWNlcixcbiAgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyBhcyBCYXNlU2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbixcbiAgVW5leHBlY3RlZEFkZHJlc3NFcnJvcixcbiAgVmVyaWZpY2F0aW9uT3B0aW9ucyxcbiAgVmVyaWZ5QWRkcmVzc09wdGlvbnMgYXMgQmFzZVZlcmlmeUFkZHJlc3NPcHRpb25zLFxuICBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMgYXMgQmFzZVZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgV2FsbGV0LFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuXG5pbnRlcmZhY2UgQWRkcmVzc0RldGFpbHMge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIG1lbW9JZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFb3NUeCB7XG4gIHNpZ25hdHVyZXM6IHN0cmluZ1tdO1xuICBwYWNrZWRfdHJ4OiBzdHJpbmc7XG4gIGNvbXByZXNzaW9uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjaXBpZW50IHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICBhbW91bnQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEVvc1RyYW5zYWN0aW9uSGVhZGVycyB7XG4gIHJlZl9ibG9ja19wcmVmaXg6IG51bWJlcjtcbiAgcmVmX2Jsb2NrX251bTogbnVtYmVyO1xuICBleHBpcmF0aW9uPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgRW9zVHJhbnNhY3Rpb25BY3Rpb24ge1xuICBhY2NvdW50OiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgYXV0aG9yaXphdGlvbjogW3sgYWN0b3I6IHN0cmluZzsgcGVybWlzc2lvbjogc3RyaW5nIH1dO1xuICBkYXRhOiBUcmFuc2ZlckFjdGlvbkRhdGEgfCBTdGFrZUFjdGlvbkRhdGEgfCBWb3RlQWN0aW9uRGF0YTtcbn1cblxuaW50ZXJmYWNlIEVvc1RyYW5zYWN0aW9uUHJlYnVpbGQge1xuICByZWNpcGllbnRzOiBSZWNpcGllbnRbXTtcbiAgaGVhZGVyczogRW9zVHJhbnNhY3Rpb25IZWFkZXJzO1xuICB0eEhleDogc3RyaW5nOyAvLyBUaGUgc2lnbmFibGUgdHggaGV4IHN0cmluZ1xuICB0cmFuc2FjdGlvbjogRW9zVHg7XG4gIHR4aWQ6IHN0cmluZztcbiAgY29pbjogc3RyaW5nO1xuICAvLyBmdWxsIHRva2VuIG5hbWUgd2l0aCB0aGUgZm9ybWF0LCBbdF1lb3M6U1lNQk9MLiBUaGlzIHdpbGwgb25seSBiZSBwcmVzZW50IGZvciB0b2tlbiB0cmFuc2FjdGlvbnMuIGUuZy4gdGVvczpDSEVYLlxuICB0b2tlbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFb3NTaWduVHJhbnNhY3Rpb25QYXJhbXMgZXh0ZW5kcyBCYXNlU2lnblRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHBydjogc3RyaW5nO1xuICB0eFByZWJ1aWxkOiBFb3NUcmFuc2FjdGlvblByZWJ1aWxkO1xuICByZWNpcGllbnRzOiBSZWNpcGllbnRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFb3NWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMgZXh0ZW5kcyBCYXNlVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhQcmVidWlsZDogRW9zVHJhbnNhY3Rpb25QcmVidWlsZDtcbiAgdHhQYXJhbXM6IEVvc1NpZ25UcmFuc2FjdGlvblBhcmFtcztcbiAgd2FsbGV0OiBXYWxsZXQ7XG4gIHZlcmlmaWNhdGlvbj86IFZlcmlmaWNhdGlvbk9wdGlvbnM7XG4gIHJlcUlkPzogUmVxdWVzdFRyYWNlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFb3NIYWxmU2lnbmVkIHtcbiAgcmVjaXBpZW50czogUmVjaXBpZW50W107XG4gIGhlYWRlcnM6IEVvc1RyYW5zYWN0aW9uSGVhZGVycztcbiAgdHhIZXg6IHN0cmluZzsgLy8gVGhlIHNpZ25hYmxlIHR4IGhleCBzdHJpbmdcbiAgdHJhbnNhY3Rpb246IEVvc1R4O1xuICB0eGlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW9zU2lnbmVkVHJhbnNhY3Rpb24gZXh0ZW5kcyBCYXNlSGFsZlNpZ25lZFRyYW5zYWN0aW9uIHtcbiAgaGFsZlNpZ25lZDogRW9zSGFsZlNpZ25lZDtcbn1cblxuaW50ZXJmYWNlIERlc2VyaWFsaXplZEVvc1RyYW5zYWN0aW9uIHtcbiAgZXhwaXJhdGlvbjogc3RyaW5nO1xuICByZWZfYmxvY2tfbnVtOiBzdHJpbmc7XG4gIHJlZl9ibG9ja19wcmVmaXg6IHN0cmluZztcbiAgbWF4X25ldF91c2FnZV93b3JkczogbnVtYmVyO1xuICBtYXhfY3B1X3VzYWdlX21zOiBudW1iZXI7XG4gIGRlbGF5X3NlYzogbnVtYmVyO1xuICBjb250ZXh0X2ZyZWVfYWN0aW9uczogRW9zVHJhbnNhY3Rpb25BY3Rpb25bXTtcbiAgYWN0aW9uczogRW9zVHJhbnNhY3Rpb25BY3Rpb25bXTtcbiAgdHJhbnNhY3Rpb25fZXh0ZW5zaW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcbiAgYWRkcmVzczogc3RyaW5nO1xuICBhbW91bnQ6IHN0cmluZztcbiAgdHJhbnNhY3Rpb25faWQ6IHN0cmluZztcbiAgbWVtbz86IHN0cmluZztcbiAgcHJveHk/OiBzdHJpbmc7XG4gIHByb2R1Y2Vycz86IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgVHJhbnNmZXJBY3Rpb25EYXRhIHtcbiAgZnJvbTogc3RyaW5nO1xuICB0bzogc3RyaW5nO1xuICBxdWFudGl0eTogc3RyaW5nO1xuICBtZW1vPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgU3Rha2VBY3Rpb25EYXRhIHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICBhbW91bnQ6IHN0cmluZztcbiAgZnJvbTogc3RyaW5nO1xuICByZWNlaXZlcjogc3RyaW5nO1xuICB0cmFuc2ZlcjogbnVtYmVyO1xuICBzdGFrZV9jcHVfcXVhbnRpdHk6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFVuc3Rha2VBY3Rpb25EYXRhIHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICBhbW91bnQ6IHN0cmluZztcbiAgZnJvbTogc3RyaW5nO1xuICByZWNlaXZlcjogc3RyaW5nO1xuICB1bnN0YWtlX2NwdV9xdWFudGl0eTogc3RyaW5nO1xuICB1bnN0YWtlX25ldF9xdWFudGl0eTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUmVmdW5kQWN0aW9uRGF0YSB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgb3duZXI6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFZvdGVBY3Rpb25EYXRhIHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICBwcm94eTogc3RyaW5nO1xuICBwcm9kdWNlcnM6IHN0cmluZ1tdO1xuICB2b3Rlcjogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHRyYW5zYWN0aW9uOiB7IHBhY2tlZF90cng6IHN0cmluZyB9O1xuICBoZWFkZXJzOiBFb3NUcmFuc2FjdGlvbkhlYWRlcnM7XG59XG5cbmludGVyZmFjZSBSZWNvdmVyeVRyYW5zYWN0aW9uIHtcbiAgdHJhbnNhY3Rpb246IEVvc1R4O1xuICB0eGlkOiBzdHJpbmc7XG4gIHJlY292ZXJ5QW1vdW50OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBSZWNvdmVyeU9wdGlvbnMge1xuICB1c2VyS2V5OiBzdHJpbmc7IC8vIEJveCBBXG4gIGJhY2t1cEtleTogc3RyaW5nOyAvLyBCb3ggQlxuICBiaXRnb0tleT86IHN0cmluZzsgLy8gQm94IENcbiAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogc3RyaW5nO1xuICBrcnNQcm92aWRlcj86IHN0cmluZztcbiAgd2FsbGV0UGFzc3BocmFzZT86IHN0cmluZztcbiAgcm9vdEFkZHJlc3M/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBWZXJpZnlBZGRyZXNzT3B0aW9ucyBleHRlbmRzIEJhc2VWZXJpZnlBZGRyZXNzT3B0aW9ucyB7XG4gIHJvb3RBZGRyZXNzOiBzdHJpbmc7XG59XG5cbmNsYXNzIE5vb3BKc29uUnBjIGV4dGVuZHMgSnNvblJwYyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCcnKTtcbiAgfVxufVxuXG5jbGFzcyBOb29wU2lnbmF0dXJlUHJvdmlkZXIgaW1wbGVtZW50cyBBcGlJbnRlcmZhY2VzLlNpZ25hdHVyZVByb3ZpZGVyIHtcbiAgYXN5bmMgZ2V0QXZhaWxhYmxlS2V5cygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub29wIHNpZ25hdHVyZSBwcm92aWRlciBpbXBsZW1lbnRhdGlvbiBoYXMgbm8gYXZhaWxhYmxlIGtleXMnKTtcbiAgfVxuXG4gIGFzeW5jIHNpZ24oYXJnczogQXBpSW50ZXJmYWNlcy5TaWduYXR1cmVQcm92aWRlckFyZ3MpOiBQcm9taXNlPFJwY0ludGVyZmFjZXMuUHVzaFRyYW5zYWN0aW9uQXJncz4ge1xuICAgIHRocm93IG5ldyBFcnJvcignbm9vcCBpbXBsZW1lbnRhdGlvbiBpcyB1bmFibGUgdG8gc2lnbicpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFb3MgZXh0ZW5kcyBCYXNlQ29pbiB7XG4gIHB1YmxpYyBzdGF0aWMgVkFMSURfQUREUkVTU19DSEFSUyA9ICcxMjM0NWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Jy5zcGxpdCgnJyk7XG4gIHB1YmxpYyBzdGF0aWMgQUREUkVTU19MRU5HVEggPSAxMjtcblxuICBzdGF0aWMgY3JlYXRlSW5zdGFuY2UoYml0Z286IEJpdEdvQmFzZSk6IEJhc2VDb2luIHtcbiAgICByZXR1cm4gbmV3IEVvcyhiaXRnbyk7XG4gIH1cblxuICBnZXRDaGFpbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdhY2EzNzZmMjA2YjhmYzI1YTZlZDQ0ZGJkYzY2NTQ3YzM2YzZjMzNlM2ExMTlmZmJlYWVmOTQzNjQyZjBlOTA2JzsgLy8gbWFpbm5ldCBjaGFpbiBpZFxuICB9XG5cbiAgZ2V0Q2hhaW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2Vvcyc7XG4gIH1cblxuICBnZXRGYW1pbHkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2Vvcyc7XG4gIH1cblxuICBnZXRGdWxsTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnRU9TJztcbiAgfVxuXG4gIGdldEJhc2VGYWN0b3IoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gMWU0O1xuICB9XG5cbiAgZ2V0IGRlY2ltYWxQbGFjZXMoKSB7XG4gICAgcmV0dXJuIDQ7XG4gIH1cblxuICAvKipcbiAgICogRmxhZyBmb3Igc2VuZGluZyB2YWx1ZSBvZiAwXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIG9rYXkgdG8gc2VuZCAwIHZhbHVlLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHZhbHVlbGVzc1RyYW5zZmVyQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgVVJMcyBvZiBzb21lIGFjdGl2ZSBwdWJsaWMgbm9kZXNcbiAgICovXG4gIGdldFB1YmxpY05vZGVVcmxzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gRW52aXJvbm1lbnRzW3RoaXMuYml0Z28uZ2V0RW52KCldLmVvc05vZGVVcmxzO1xuICB9XG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBzZWNwMjU2azEga2V5IHBhaXJcbiAgICpcbiAgICogQHBhcmFtIHNlZWQgLSBTZWVkIGZyb20gd2hpY2ggdGhlIG5ldyBrZXlwYWlyIHNob3VsZCBiZSBnZW5lcmF0ZWQsIG90aGVyd2lzZSBhIHJhbmRvbSBzZWVkIGlzIHVzZWRcbiAgICovXG4gIGdlbmVyYXRlS2V5UGFpcihzZWVkPzogQnVmZmVyKTogS2V5UGFpciB7XG4gICAgaWYgKCFzZWVkKSB7XG4gICAgICAvLyBBbiBleHRlbmRlZCBwcml2YXRlIGtleSBoYXMgYm90aCBhIG5vcm1hbCAyNTYgYml0IHByaXZhdGUga2V5IGFuZCBhIDI1NlxuICAgICAgLy8gYml0IGNoYWluIGNvZGUsIGJvdGggb2Ygd2hpY2ggbXVzdCBiZSByYW5kb20uIDUxMiBiaXRzIGlzIHRoZXJlZm9yZSB0aGVcbiAgICAgIC8vIG1heGltdW0gZW50cm9weSBhbmQgZ2l2ZXMgdXMgbWF4aW11bSBzZWN1cml0eSBhZ2FpbnN0IGNyYWNraW5nLlxuICAgICAgc2VlZCA9IHJhbmRvbUJ5dGVzKDUxMiAvIDgpO1xuICAgIH1cbiAgICBjb25zdCBleHRlbmRlZEtleSA9IGJpcDMyLmZyb21TZWVkKHNlZWQpO1xuICAgIGNvbnN0IHhwdWIgPSBleHRlbmRlZEtleS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1YjogeHB1YixcbiAgICAgIHBydjogZXh0ZW5kZWRLZXkudG9CYXNlNTgoKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBpbnB1dCBpcyB2YWxpZCBwdWJsaWMga2V5IGZvciB0aGUgY29pbi5cbiAgICpcbiAgICogQHBhcmFtIHB1YiAtIHRoZSBwdWIgdG8gYmUgY2hlY2tlZFxuICAgKi9cbiAgaXNWYWxpZFB1YihwdWI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYmlwMzIuZnJvbUJhc2U1OChwdWIpLmlzTmV1dGVyZWQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBpbnB1dCBpcyB2YWxpZCBzZWVkIGZvciB0aGUgY29pblxuICAgKlxuICAgKiBAcGFyYW0gcHJ2IC0gdGhlIHBydiB0byBiZSBjaGVja2VkXG4gICAqL1xuICBpc1ZhbGlkUHJ2KHBydjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAhYmlwMzIuZnJvbUJhc2U1OChwcnYpLmlzTmV1dGVyZWQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlcyB3aGV0aGVyIGEgbWVtbyBpcyB2YWxpZFxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSB0aGUgbWVtbyB0byBiZSBjaGVja2VkXG4gICAqL1xuICBpc1ZhbGlkTWVtbyh7IHZhbHVlIH06IHsgdmFsdWU6IHN0cmluZyB9KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIF8uaXNTdHJpbmcodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA8PSAyNTY7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGEgbWVtbyBpZCBpcyB2YWxpZFxuICAgKlxuICAgKiBAcGFyYW0gbWVtb0lkIC0gdGhlIG1lbW8gaWQgdG8gYmUgY2hlY2tlZFxuICAgKi9cbiAgaXNWYWxpZE1lbW9JZChtZW1vSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRNZW1vKHsgdmFsdWU6IG1lbW9JZCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIGFkZHJlc3MgaW50byBhZGRyZXNzIGFuZCBtZW1vIGlkXG4gICAqIEBwYXJhbSBhZGRyZXNzIC0gdGhlIGFkZHJlc3NcbiAgICovXG4gIGdldEFkZHJlc3NEZXRhaWxzKGFkZHJlc3M6IHN0cmluZyk6IEFkZHJlc3NEZXRhaWxzIHtcbiAgICBjb25zdCBkZXN0aW5hdGlvbkRldGFpbHMgPSB1cmwucGFyc2UoYWRkcmVzcyk7XG4gICAgY29uc3QgZGVzdGluYXRpb25BZGRyZXNzID0gZGVzdGluYXRpb25EZXRhaWxzLnBhdGhuYW1lO1xuXG4gICAgaWYgKCFkZXN0aW5hdGlvbkFkZHJlc3MpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBmYWlsZWQgdG8gcGFyc2UgYWRkcmVzczogJHthZGRyZXNzfWApO1xuICAgIH1cblxuICAgIC8vIEVPUyBhZGRyZXNzZXMgaGF2ZSB0byBiZSBcImh1bWFuIHJlYWRhYmxlXCIsIHdoaWNoIG1lYW5zIHVwIHRvIDEyIGNoYXJhY3RlcnMgYW5kIG9ubHkgYS16MS01LiwgaS5lLm10b2RhMS5iaXRnb1xuICAgIC8vIHNvdXJjZTogaHR0cHM6Ly9kZXZlbG9wZXJzLmVvcy5pby9lb3Npby1jcHAvZG9jcy9uYW1pbmctY29udmVudGlvbnNcbiAgICBpZiAoIS9eW2EtejEtNS5dKiQvLnRlc3QoZGVzdGluYXRpb25BZGRyZXNzKSB8fCBkZXN0aW5hdGlvbkFkZHJlc3MubGVuZ3RoID4gRW9zLkFERFJFU1NfTEVOR1RIKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcihgaW52YWxpZCBhZGRyZXNzOiAke2FkZHJlc3N9YCk7XG4gICAgfVxuXG4gICAgLy8gYWRkcmVzcyBkb2Vzbid0IGhhdmUgYSBtZW1vIGlkXG4gICAgaWYgKGRlc3RpbmF0aW9uRGV0YWlscy5wYXRobmFtZSA9PT0gYWRkcmVzcykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWRkcmVzczogYWRkcmVzcyxcbiAgICAgICAgbWVtb0lkOiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICghZGVzdGluYXRpb25EZXRhaWxzLnF1ZXJ5KSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcihgZmFpbGVkIHRvIHBhcnNlIHF1ZXJ5IHN0cmluZzogJHthZGRyZXNzfWApO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5RGV0YWlscyA9IHF1ZXJ5c3RyaW5nLnBhcnNlKGRlc3RpbmF0aW9uRGV0YWlscy5xdWVyeSk7XG4gICAgaWYgKCFxdWVyeURldGFpbHMubWVtb0lkKSB7XG4gICAgICAvLyBpZiB0aGVyZSBhcmUgbW9yZSBwcm9wZXJ0aWVzLCB0aGUgcXVlcnkgZGV0YWlscyBuZWVkIHRvIGNvbnRhaW4gdGhlIG1lbW9JZCBwcm9wZXJ0eVxuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoYGludmFsaWQgcHJvcGVydHkgaW4gYWRkcmVzczogJHthZGRyZXNzfWApO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHF1ZXJ5RGV0YWlscy5tZW1vSWQpICYmIHF1ZXJ5RGV0YWlscy5tZW1vSWQubGVuZ3RoICE9PSAxKSB7XG4gICAgICAvLyB2YWxpZCBhZGRyZXNzZXMgY2FuIG9ubHkgY29udGFpbiBvbmUgbWVtbyBpZFxuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoYGludmFsaWQgYWRkcmVzcyAnJHthZGRyZXNzfScsIG11c3QgY29udGFpbiBleGFjdGx5IG9uZSBtZW1vSWRgKTtcbiAgICB9XG5cbiAgICBjb25zdCBbbWVtb0lkXSA9IF8uY2FzdEFycmF5KHF1ZXJ5RGV0YWlscy5tZW1vSWQpO1xuICAgIGlmICghdGhpcy5pc1ZhbGlkTWVtb0lkKG1lbW9JZCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICcke2FkZHJlc3N9JywgbWVtb0lkIGlzIG5vdCB2YWxpZGApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBhZGRyZXNzOiBkZXN0aW5hdGlvbkFkZHJlc3MsXG4gICAgICBtZW1vSWQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGEgY3VycmVuY3kgYW1vdW50IHJlcHJlc2VudGVkIGluIGJhc2UgdW5pdHMgKHNhdG9zaGksIHdlaSwgYXRvbXMsIGRyb3BzLCBzdHJvb3BzKVxuICAgKiB0byBiaWcgdW5pdHMgKGJ0YywgZXRoLCB4cnAsIHhsbSlcbiAgICovXG4gIGJhc2VVbml0c1RvQmlnVW5pdHMoYmFzZVVuaXRzOiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRpdmlkZW5kID0gdGhpcy5nZXRCYXNlRmFjdG9yKCk7XG4gICAgY29uc3QgYmlnTnVtYmVyID0gbmV3IEJpZ051bWJlcihiYXNlVW5pdHMpLmRpdmlkZWRCeShkaXZpZGVuZCk7XG4gICAgLy8gc2V0IHRoZSBmb3JtYXQgc28gY29tbWFzIGFyZW4ndCBhZGRlZCB0byBsYXJnZSBjb2luIGFtb3VudHNcbiAgICByZXR1cm4gYmlnTnVtYmVyLnRvRm9ybWF0KHRoaXMuZGVjaW1hbFBsYWNlcywgbnVsbCBhcyBhbnksIHsgZ3JvdXBTZXBhcmF0b3I6ICcnLCBkZWNpbWFsU2VwYXJhdG9yOiAnLicgfSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgYW5kIHJldHVybiBhZGRyZXNzIHdpdGggYXBwZW5kZWQgbWVtbyBpZFxuICAgKlxuICAgKiBAcGFyYW0gYWRkcmVzc1xuICAgKiBAcGFyYW0gbWVtb0lkXG4gICAqL1xuICBub3JtYWxpemVBZGRyZXNzKHsgYWRkcmVzcywgbWVtb0lkIH06IEFkZHJlc3NEZXRhaWxzKTogc3RyaW5nIHtcbiAgICBpZiAobWVtb0lkICYmIHRoaXMuaXNWYWxpZE1lbW9JZChtZW1vSWQpKSB7XG4gICAgICByZXR1cm4gYCR7YWRkcmVzc30/bWVtb0lkPSR7bWVtb0lkfWA7XG4gICAgfVxuICAgIHJldHVybiBhZGRyZXNzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBpbnB1dCBpcyB2YWxpZCBwdWJsaWMga2V5IGZvciB0aGUgY29pblxuICAgKlxuICAgKiBAcGFyYW0gYWRkcmVzcyAtIHRoZSBhZGRyZXNzIHRvIGJlIGNoZWNrZWRcbiAgICovXG4gIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhZGRyZXNzRGV0YWlscyA9IHRoaXMuZ2V0QWRkcmVzc0RldGFpbHMoYWRkcmVzcyk7XG4gICAgICByZXR1cm4gYWRkcmVzcyA9PT0gdGhpcy5ub3JtYWxpemVBZGRyZXNzKGFkZHJlc3NEZXRhaWxzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBhZGRyZXNzIC0gdGhlIGFkZHJlc3MgdG8gdmVyaWZ5XG4gICAqIEBwYXJhbSByb290QWRkcmVzcyAtIHRoZSB3YWxsZXQncyByb290IGFkZHJlc3NcbiAgICogQHJldHVybiB0cnVlIGlmZiBhZGRyZXNzIGlzIGEgd2FsbGV0IGFkZHJlc3MgKGJhc2VkIG9uIHJvb3RBZGRyZXNzKVxuICAgKi9cbiAgYXN5bmMgaXNXYWxsZXRBZGRyZXNzKHsgYWRkcmVzcywgcm9vdEFkZHJlc3MgfTogVmVyaWZ5QWRkcmVzc09wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXJvb3RBZGRyZXNzIHx8ICFfLmlzU3RyaW5nKHJvb3RBZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHN0cmluZyByb290QWRkcmVzcycpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoYGludmFsaWQgYWRkcmVzczogJHthZGRyZXNzfWApO1xuICAgIH1cblxuICAgIGNvbnN0IGFkZHJlc3NEZXRhaWxzID0gdGhpcy5nZXRBZGRyZXNzRGV0YWlscyhhZGRyZXNzKTtcbiAgICBjb25zdCByb290QWRkcmVzc0RldGFpbHMgPSB0aGlzLmdldEFkZHJlc3NEZXRhaWxzKHJvb3RBZGRyZXNzKTtcblxuICAgIGlmICghYWRkcmVzc0RldGFpbHMgfHwgIXJvb3RBZGRyZXNzRGV0YWlscykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChhZGRyZXNzRGV0YWlscy5hZGRyZXNzICE9PSByb290QWRkcmVzc0RldGFpbHMuYWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRBZGRyZXNzRXJyb3IoXG4gICAgICAgIGBhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogJHthZGRyZXNzRGV0YWlscy5hZGRyZXNzfSB2cyAke3Jvb3RBZGRyZXNzRGV0YWlscy5hZGRyZXNzfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQXNzZW1ibGUga2V5Y2hhaW4gYW5kIGhhbGYtc2lnbiBwcmVidWlsdCB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbXMudHhQcmVidWlsZCB7T2JqZWN0fSBwcmVidWlsZCBvYmplY3QgcmV0dXJuZWQgYnkgcGxhdGZvcm1cbiAgICogQHBhcmFtIHBhcmFtcy5wcnYge1N0cmluZ30gdXNlciBwcnZcbiAgICogQHJldHVybnMge1Byb21pc2U8RW9zU2lnbmVkVHJhbnNhY3Rpb24+fVxuICAgKi9cbiAgYXN5bmMgc2lnblRyYW5zYWN0aW9uKHBhcmFtczogRW9zU2lnblRyYW5zYWN0aW9uUGFyYW1zKTogUHJvbWlzZTxFb3NTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHBydjogc3RyaW5nID0gcGFyYW1zLnBydjtcbiAgICBjb25zdCB0eEhleDogc3RyaW5nID0gcGFyYW1zLnR4UHJlYnVpbGQudHhIZXg7XG4gICAgY29uc3QgdHJhbnNhY3Rpb246IEVvc1R4ID0gcGFyYW1zLnR4UHJlYnVpbGQudHJhbnNhY3Rpb247XG5cbiAgICBjb25zdCBzaWduQnVmZmVyOiBCdWZmZXIgPSBCdWZmZXIuZnJvbSh0eEhleCwgJ2hleCcpO1xuICAgIGNvbnN0IHByaXZhdGVLZXlCdWZmZXIgPSBiaXAzMi5mcm9tQmFzZTU4KHBydikucHJpdmF0ZUtleTtcbiAgICBpZiAoIXByaXZhdGVLZXlCdWZmZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbm8gcHJpdmF0ZUtleScpO1xuICAgIH1cbiAgICBjb25zdCBzaWduYXR1cmU6IHN0cmluZyA9IGVjYy5TaWduYXR1cmUuc2lnbihzaWduQnVmZmVyLCBwcml2YXRlS2V5QnVmZmVyKS50b1N0cmluZygpO1xuXG4gICAgdHJhbnNhY3Rpb24uc2lnbmF0dXJlcy5wdXNoKHNpZ25hdHVyZSk7XG5cbiAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgIHRyYW5zYWN0aW9uLFxuICAgICAgdHhIZXgsXG4gICAgICByZWNpcGllbnRzOiBwYXJhbXMudHhQcmVidWlsZC5yZWNpcGllbnRzLFxuICAgICAgaGVhZGVyczogcGFyYW1zLnR4UHJlYnVpbGQuaGVhZGVycyxcbiAgICAgIHR4aWQ6IHBhcmFtcy50eFByZWJ1aWxkLnR4aWQsXG4gICAgfTtcbiAgICByZXR1cm4geyBoYWxmU2lnbmVkOiB0eFBhcmFtcyB9O1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVN0YWtlQWN0aW9uRGF0YShzdGFrZUFjdGlvbkRhdGE6IFN0YWtlQWN0aW9uRGF0YSk6IGFueSB7XG4gICAgaWYgKHN0YWtlQWN0aW9uRGF0YS5mcm9tICE9PSBzdGFrZUFjdGlvbkRhdGEucmVjZWl2ZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgc3Rha2VyICgke3N0YWtlQWN0aW9uRGF0YS5mcm9tfSkgYW5kIHJlY2VpdmVyICgke3N0YWtlQWN0aW9uRGF0YS5yZWNlaXZlcn0pIG11c3QgYmUgdGhlIHNhbWVgKTtcbiAgICB9XG5cbiAgICBpZiAoc3Rha2VBY3Rpb25EYXRhLnRyYW5zZmVyICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCB0cmFuc2ZlciBmdW5kcyBhcyBwYXJ0IG9mIGRlbGVnYXRlYncgYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgLy8gc3Rha2VfY3B1X3F1YW50aXR5IGlzIHVzZWQgYXMgdGhlIGFtb3VudCBiZWNhdXNlIHRoZSBCaXRHbyBwbGF0Zm9ybSBvbmx5IHN0YWtlcyBjcHUgZm9yIHZvdGluZyB0cmFuc2FjdGlvbnNcbiAgICByZXR1cm4ge1xuICAgICAgYWRkcmVzczogc3Rha2VBY3Rpb25EYXRhLmZyb20sXG4gICAgICBhbW91bnQ6IHRoaXMuYmlnVW5pdHNUb0Jhc2VVbml0cyhzdGFrZUFjdGlvbkRhdGEuc3Rha2VfY3B1X3F1YW50aXR5LnNwbGl0KCcgJylbMF0pLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlVW5zdGFrZUFjdGlvbkRhdGEodW5zdGFrZUFjdGlvbkRhdGE6IFVuc3Rha2VBY3Rpb25EYXRhKTogYW55IHtcbiAgICBpZiAodW5zdGFrZUFjdGlvbkRhdGEuZnJvbSAhPT0gdW5zdGFrZUFjdGlvbkRhdGEucmVjZWl2ZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHVuc3Rha2VyICgke3Vuc3Rha2VBY3Rpb25EYXRhLmZyb219KSBhbmQgcmVjZWl2ZXIgKCR7dW5zdGFrZUFjdGlvbkRhdGEucmVjZWl2ZXJ9KSBtdXN0IGJlIHRoZSBzYW1lYFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgY3B1QW1vdW50ID0gbmV3IEJpZ051bWJlcih1bnN0YWtlQWN0aW9uRGF0YS51bnN0YWtlX2NwdV9xdWFudGl0eS5zcGxpdCgnICcpWzBdKTtcbiAgICBjb25zdCBuZXRBbW91bnQgPSBuZXcgQmlnTnVtYmVyKHVuc3Rha2VBY3Rpb25EYXRhLnVuc3Rha2VfbmV0X3F1YW50aXR5LnNwbGl0KCcgJylbMF0pO1xuICAgIGNvbnN0IHRvdGFsQW1vdW50ID0gY3B1QW1vdW50LnBsdXMobmV0QW1vdW50KS50b051bWJlcigpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFkZHJlc3M6IHVuc3Rha2VBY3Rpb25EYXRhLnJlY2VpdmVyLFxuICAgICAgYW1vdW50OiB0aGlzLmJpZ1VuaXRzVG9CYXNlVW5pdHModG90YWxBbW91bnQpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZVZvdGVBY3Rpb25EYXRhKHZvdGVBY3Rpb25EYXRhOiBWb3RlQWN0aW9uRGF0YSkge1xuICAgIGNvbnN0IHByb3h5SXNFbXB0eSA9IF8uaXNFbXB0eSh2b3RlQWN0aW9uRGF0YS5wcm94eSk7XG4gICAgY29uc3QgcHJvZHVjZXJzSXNFbXB0eSA9IF8uaXNFbXB0eSh2b3RlQWN0aW9uRGF0YS5wcm9kdWNlcnMpO1xuICAgIGlmICgocHJveHlJc0VtcHR5ICYmIHByb2R1Y2Vyc0lzRW1wdHkpIHx8ICghcHJveHlJc0VtcHR5ICYmICFwcm9kdWNlcnNJc0VtcHR5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd2b3RpbmcgdHJhbnNhY3Rpb25zIG11c3Qgc3BlY2lmeSBlaXRoZXIgcHJvZHVjZXJzIG9yIHByb3h5IHRvIHZvdGUgZm9yJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFkZHJlc3M6IHZvdGVBY3Rpb25EYXRhLnZvdGVyLFxuICAgICAgcHJveHk6IHZvdGVBY3Rpb25EYXRhLnByb3h5LFxuICAgICAgcHJvZHVjZXJzOiB2b3RlQWN0aW9uRGF0YS5wcm9kdWNlcnMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNyZWF0ZVRyYW5zYWN0aW9uSWRIZXgoc2VyaWFsaXplZFRyYW5zYWN0aW9uQnVmZmVyOiBCdWZmZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoc2VyaWFsaXplZFRyYW5zYWN0aW9uQnVmZmVyKS5kaWdlc3QoKS50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIGhlYWRlcnNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZGVzZXJpYWxpemVUcmFuc2FjdGlvbih7XG4gICAgdHJhbnNhY3Rpb24sXG4gICAgaGVhZGVycyxcbiAgfTogRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8RGVzZXJpYWxpemVkRW9zVHJhbnNhY3Rpb24+IHtcbiAgICAvLyBjcmVhdGUgYW4gZW9zanMgQVBJIGNsaWVudFxuICAgIGNvbnN0IGFwaSA9IG5ldyBBcGkoe1xuICAgICAgYWJpUHJvdmlkZXI6IG5ldyBPZmZsaW5lQWJpUHJvdmlkZXIoKSxcbiAgICAgIHJwYzogbmV3IE5vb3BKc29uUnBjKCksXG4gICAgICBzaWduYXR1cmVQcm92aWRlcjogbmV3IE5vb3BTaWduYXR1cmVQcm92aWRlcigpLFxuICAgICAgY2hhaW5JZDogdGhpcy5nZXRDaGFpbklkKCksXG4gICAgICAvLyBVc2UgYSBjdXN0b20gVGV4dERlY29kZXIgYXMgdGhlIGdsb2JhbCBUZXh0RGVjb2RlciBsZWFkcyB0byBjcmFzaGVzIGluIE9WQyAvIEVsZWN0cm9uLlxuICAgICAgdGV4dERlY29kZXI6IG5ldyBTdHJpbmdUZXh0RGVjb2RlcigpLFxuICAgICAgdGV4dEVuY29kZXI6IG5ldyBUZXh0RW5jb2RlcigpLFxuICAgIH0pO1xuXG4gICAgLy8gdHlwZSBndWFyZHNcbiAgICBjb25zdCBpc1RyYW5zZmVyQWN0aW9uRGF0YSA9ICh0eEFjdGlvbkRhdGE6IGFueSk6IHR4QWN0aW9uRGF0YSBpcyBUcmFuc2ZlckFjdGlvbkRhdGEgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHR4QWN0aW9uRGF0YSBhcyBUcmFuc2ZlckFjdGlvbkRhdGEpLmZyb20gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAodHhBY3Rpb25EYXRhIGFzIFRyYW5zZmVyQWN0aW9uRGF0YSkudG8gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAodHhBY3Rpb25EYXRhIGFzIFRyYW5zZmVyQWN0aW9uRGF0YSkucXVhbnRpdHkgIT09IHVuZGVmaW5lZFxuICAgICAgKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzU3Rha2VBY3Rpb25EYXRhID0gKHR4QWN0aW9uRGF0YTogYW55KTogdHhBY3Rpb25EYXRhIGlzIFN0YWtlQWN0aW9uRGF0YSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAodHhBY3Rpb25EYXRhIGFzIFN0YWtlQWN0aW9uRGF0YSkuZnJvbSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICh0eEFjdGlvbkRhdGEgYXMgU3Rha2VBY3Rpb25EYXRhKS5yZWNlaXZlciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICh0eEFjdGlvbkRhdGEgYXMgU3Rha2VBY3Rpb25EYXRhKS50cmFuc2ZlciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICh0eEFjdGlvbkRhdGEgYXMgU3Rha2VBY3Rpb25EYXRhKS5zdGFrZV9jcHVfcXVhbnRpdHkgIT09IHVuZGVmaW5lZFxuICAgICAgKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzVW5zdGFrZUFjdGlvbkRhdGEgPSAodHhBY3Rpb25EYXRhOiBhbnkpOiB0eEFjdGlvbkRhdGEgaXMgVW5zdGFrZUFjdGlvbkRhdGEgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHR4QWN0aW9uRGF0YSBhcyBVbnN0YWtlQWN0aW9uRGF0YSkuZnJvbSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICh0eEFjdGlvbkRhdGEgYXMgVW5zdGFrZUFjdGlvbkRhdGEpLnJlY2VpdmVyICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgKHR4QWN0aW9uRGF0YSBhcyBVbnN0YWtlQWN0aW9uRGF0YSkudW5zdGFrZV9jcHVfcXVhbnRpdHkgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAodHhBY3Rpb25EYXRhIGFzIFVuc3Rha2VBY3Rpb25EYXRhKS51bnN0YWtlX25ldF9xdWFudGl0eSAhPT0gdW5kZWZpbmVkXG4gICAgICApO1xuICAgIH07XG4gICAgY29uc3QgaXNWb3RlQWN0aW9uRGF0YSA9ICh0eEFjdGlvbkRhdGE6IGFueSk6IHR4QWN0aW9uRGF0YSBpcyBWb3RlQWN0aW9uRGF0YSA9PiB7XG4gICAgICByZXR1cm4gKHR4QWN0aW9uRGF0YSBhcyBWb3RlQWN0aW9uRGF0YSkudm90ZXIgIT09IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIGNvbnN0IGlzUmVmdW5kQWN0aW9uRGF0YSA9ICh0eEFjdGlvbkRhdGE6IGFueSk6IHR4QWN0aW9uRGF0YSBpcyBSZWZ1bmRBY3Rpb25EYXRhID0+IHtcbiAgICAgIHJldHVybiAodHhBY3Rpb25EYXRhIGFzIFJlZnVuZEFjdGlvbkRhdGEpLm93bmVyICE9PSB1bmRlZmluZWQ7XG4gICAgfTtcblxuICAgIC8vIGRlc2VyaWFsaXplVHJhbnNhY3Rpb25cbiAgICBjb25zdCBzZXJpYWxpemVkVHhCdWZmZXIgPSBCdWZmZXIuZnJvbSh0cmFuc2FjdGlvbi5wYWNrZWRfdHJ4LCAnaGV4Jyk7XG4gICAgY29uc3QgZGVzZXJpYWxpemVkVHhKc29uRnJvbVBhY2tlZFRyeCA9IGF3YWl0IGFwaS5kZXNlcmlhbGl6ZVRyYW5zYWN0aW9uV2l0aEFjdGlvbnMoc2VyaWFsaXplZFR4QnVmZmVyKTtcblxuICAgIGlmICghZGVzZXJpYWxpemVkVHhKc29uRnJvbVBhY2tlZFRyeCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcHJvY2VzcyB0cmFuc2FjdGlvbiBmcm9tIHR4SGV4Jyk7XG4gICAgfVxuICAgIGNvbnN0IHR4OiBEZXNlcmlhbGl6ZWRFb3NUcmFuc2FjdGlvbiA9IGRlc2VyaWFsaXplZFR4SnNvbkZyb21QYWNrZWRUcng7XG5cbiAgICAvLyB2YWxpZGF0ZSBjb250ZXh0IGZyZWUgYWN0aW9uc1xuICAgIGlmICh0eC5jb250ZXh0X2ZyZWVfYWN0aW9ucy5sZW5ndGggIT09IDApIHtcbiAgICAgIGlmICh0eC5jb250ZXh0X2ZyZWVfYWN0aW9ucy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdudW1iZXIgb2YgY29udGV4dCBmcmVlIGFjdGlvbnMgbXVzdCBiZSAxJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgIV8uaXNFcXVhbChfLnBpY2sodHguY29udGV4dF9mcmVlX2FjdGlvbnNbMF0sIFsnYWNjb3VudCcsICdhdXRob3JpemF0aW9uJywgJ25hbWUnXSksIHtcbiAgICAgICAgICBhY2NvdW50OiAnZW9zaW8ubnVsbCcsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogW10sXG4gICAgICAgICAgbmFtZTogJ25vbmNlJyxcbiAgICAgICAgfSkgfHxcbiAgICAgICAgXy5pc0VtcHR5KHR4LmNvbnRleHRfZnJlZV9hY3Rpb25zWzBdLmRhdGEpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGUgY29udGV4dCBmcmVlIGFjdGlvbiBpcyBpbnZhbGlkJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT25seSBzdXBwb3J0IHRyYW5zYWN0aW9ucyB3aXRoIG9uZSAodHJhbnNmZXIgfCB2b3RlcHJvZHVjZXIpIG9yIHR3byAoZGVsZWdhdGVidyAmIHZvdGVwcm9kdWNlcikgYWN0aW9uc1xuICAgIGlmICh0eC5hY3Rpb25zLmxlbmd0aCAhPT0gMSAmJiB0eC5hY3Rpb25zLmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIG51bWJlciBvZiBhY3Rpb25zOiAke3R4LmFjdGlvbnMubGVuZ3RofWApO1xuICAgIH1cblxuICAgIGNvbnN0IHR4QWN0aW9uID0gdHguYWN0aW9uc1swXTtcbiAgICBpZiAoIXR4QWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgdHJhbnNhY3Rpb24gYWN0aW9uJyk7XG4gICAgfVxuICAgIGlmICh0eEFjdGlvbi5uYW1lID09PSAndHJhbnNmZXInKSB7XG4gICAgICAvLyBUcmFuc2ZlcnMgc2hvdWxkIG9ubHkgaGF2ZSAxIGFjdGlvblxuICAgICAgaWYgKHR4LmFjdGlvbnMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdHJhbnNmZXJzIHNob3VsZCBvbmx5IGhhdmUgMSBhY3Rpb246ICR7dHguYWN0aW9ucy5sZW5ndGh9IGdpdmVuYCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNUcmFuc2ZlckFjdGlvbkRhdGEodHhBY3Rpb24uZGF0YSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG9yIGluY29tcGxldGUgdHJhbnNmZXIgYWN0aW9uIGRhdGEnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRyYW5zZmVyQWN0aW9uRGF0YSA9IHR4QWN0aW9uLmRhdGE7XG5cbiAgICAgIHR4LmFkZHJlc3MgPSB0cmFuc2ZlckFjdGlvbkRhdGEudG87XG4gICAgICB0eC5hbW91bnQgPSB0aGlzLmJpZ1VuaXRzVG9CYXNlVW5pdHModHJhbnNmZXJBY3Rpb25EYXRhLnF1YW50aXR5LnNwbGl0KCcgJylbMF0pO1xuICAgICAgdHgubWVtbyA9IHRyYW5zZmVyQWN0aW9uRGF0YS5tZW1vO1xuICAgIH0gZWxzZSBpZiAodHhBY3Rpb24ubmFtZSA9PT0gJ2RlbGVnYXRlYncnKSB7XG4gICAgICAvLyBUaGUgZGVsZWdhdGVidyBhY3Rpb24gc2hvdWxkIG9ubHkgYmUgcGFydCBvZiB2b3RpbmcgdHJhbnNhY3Rpb25zXG4gICAgICBpZiAodHguYWN0aW9ucy5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBzdGFraW5nIHRyYW5zYWN0aW9ucyB0aGF0IGluY2x1ZGUgdGhlIGRlbGVnYXRlYncgYWN0aW9uIHNob3VsZCBoYXZlIDIgYWN0aW9uczogJHt0eC5hY3Rpb25zLmxlbmd0aH0gZ2l2ZW5gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHR4QWN0aW9uMiA9IHR4LmFjdGlvbnNbMV07XG4gICAgICBpZiAodHhBY3Rpb24yLm5hbWUgIT09ICd2b3RlcHJvZHVjZXInKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBzdGFraW5nIHRyYW5zYWN0aW9uIGFjdGlvbjogJHt0eEFjdGlvbjIubmFtZX0sIGV4cGVjdGluZzogdm90ZXByb2R1Y2VyYCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNTdGFrZUFjdGlvbkRhdGEodHhBY3Rpb24uZGF0YSkgfHwgIWlzVm90ZUFjdGlvbkRhdGEodHhBY3Rpb24yLmRhdGEpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBvciBpbmNvbXBsZXRlIHN0YWtlIG9yIHZvdGUgYWN0aW9uIGRhdGEnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0YWtlQWN0aW9uRGF0YSA9IHR4QWN0aW9uLmRhdGE7XG4gICAgICBjb25zdCB2b3RlQWN0aW9uRGF0YSA9IHR4QWN0aW9uMi5kYXRhO1xuXG4gICAgICBjb25zdCBkZXNlcmlhbGl6ZWRTdGFrZUFjdGlvbiA9IHRoaXMudmFsaWRhdGVTdGFrZUFjdGlvbkRhdGEoc3Rha2VBY3Rpb25EYXRhKTtcbiAgICAgIGNvbnN0IGRlc2VyaWFsaXplZFZvdGVBY3Rpb24gPSBFb3MudmFsaWRhdGVWb3RlQWN0aW9uRGF0YSh2b3RlQWN0aW9uRGF0YSk7XG4gICAgICBpZiAoZGVzZXJpYWxpemVkU3Rha2VBY3Rpb24uYWRkcmVzcyAhPT0gZGVzZXJpYWxpemVkVm90ZUFjdGlvbi5hZGRyZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgc3Rha2VyICgke2Rlc2VyaWFsaXplZFN0YWtlQWN0aW9uLmFkZHJlc3N9KSBhbmQgdm90ZXIgKCR7ZGVzZXJpYWxpemVkVm90ZUFjdGlvbi5hZGRyZXNzfSkgbXVzdCBiZSB0aGUgc2FtZWBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdHguYW1vdW50ID0gZGVzZXJpYWxpemVkU3Rha2VBY3Rpb24uYW1vdW50O1xuICAgICAgdHgucHJveHkgPSBkZXNlcmlhbGl6ZWRWb3RlQWN0aW9uLnByb3h5O1xuICAgICAgdHgucHJvZHVjZXJzID0gZGVzZXJpYWxpemVkVm90ZUFjdGlvbi5wcm9kdWNlcnM7XG4gICAgfSBlbHNlIGlmICh0eEFjdGlvbi5uYW1lID09PSAndm90ZXByb2R1Y2VyJykge1xuICAgICAgaWYgKHR4LmFjdGlvbnMubGVuZ3RoID4gMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZvdGluZyB0cmFuc2FjdGlvbnMgc2hvdWxkIG5vdCBoYXZlIG1vcmUgdGhhbiAyIGFjdGlvbnMnKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGRlc2VyaWFsaXplZFN0YWtlQWN0aW9uO1xuICAgICAgaWYgKHR4LmFjdGlvbnMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGNvbnN0IHR4QWN0aW9uMiA9IHR4LmFjdGlvbnNbMV07XG4gICAgICAgIGlmICh0eEFjdGlvbjIubmFtZSAhPT0gJ2RlbGVnYXRlYncnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHN0YWtpbmcgdHJhbnNhY3Rpb24gYWN0aW9uOiAke3R4QWN0aW9uMi5uYW1lfSwgZXhwZWN0aW5nOiBkZWxlZ2F0ZWJ3YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1N0YWtlQWN0aW9uRGF0YSh0eEFjdGlvbi5kYXRhKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBvciBpbmNvbXBsZXRlIHN0YWtlIGFjdGlvbiBkYXRhJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3Rha2VBY3Rpb25EYXRhID0gdHhBY3Rpb24uZGF0YTtcbiAgICAgICAgZGVzZXJpYWxpemVkU3Rha2VBY3Rpb24gPSB0aGlzLnZhbGlkYXRlU3Rha2VBY3Rpb25EYXRhKHN0YWtlQWN0aW9uRGF0YSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNWb3RlQWN0aW9uRGF0YSh0eEFjdGlvbi5kYXRhKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgb3IgaW5jb21wbGV0ZSB2b3RlIGFjdGlvbiBkYXRhJyk7XG4gICAgICB9XG4gICAgICBjb25zdCB2b3RlQWN0aW9uRGF0YSA9IHR4QWN0aW9uLmRhdGE7XG4gICAgICBjb25zdCBkZXNlcmlhbGl6ZWRWb3RlQWN0aW9uID0gRW9zLnZhbGlkYXRlVm90ZUFjdGlvbkRhdGEodm90ZUFjdGlvbkRhdGEpO1xuXG4gICAgICBpZiAoISFkZXNlcmlhbGl6ZWRTdGFrZUFjdGlvbiAmJiBkZXNlcmlhbGl6ZWRTdGFrZUFjdGlvbi5hZGRyZXNzICE9PSBkZXNlcmlhbGl6ZWRWb3RlQWN0aW9uLmFkZHJlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBzdGFrZXIgKCR7ZGVzZXJpYWxpemVkU3Rha2VBY3Rpb24uYWRkcmVzc30pIGFuZCB2b3RlciAoJHtkZXNlcmlhbGl6ZWRWb3RlQWN0aW9uLmFkZHJlc3N9KSBtdXN0IGJlIHRoZSBzYW1lYFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0eC5hbW91bnQgPSAhIWRlc2VyaWFsaXplZFN0YWtlQWN0aW9uID8gZGVzZXJpYWxpemVkU3Rha2VBY3Rpb24uYW1vdW50IDogJzAnO1xuICAgICAgdHgucHJveHkgPSBkZXNlcmlhbGl6ZWRWb3RlQWN0aW9uLnByb3h5O1xuICAgICAgdHgucHJvZHVjZXJzID0gZGVzZXJpYWxpemVkVm90ZUFjdGlvbi5wcm9kdWNlcnM7XG4gICAgfSBlbHNlIGlmICh0eEFjdGlvbi5uYW1lID09PSAndW5kZWxlZ2F0ZWJ3Jykge1xuICAgICAgaWYgKHR4LmFjdGlvbnMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdGFrZSBzaG91bGQgb25seSBoYXZlIDEgYWN0aW9uOiAke3R4LmFjdGlvbnMubGVuZ3RofSBnaXZlbmApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzVW5zdGFrZUFjdGlvbkRhdGEodHhBY3Rpb24uZGF0YSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG9yIGluY29tcGxldGUgdW5zdGFrZSBhY3Rpb24gZGF0YScpO1xuICAgICAgfVxuICAgICAgY29uc3QgdW5zdGFrZUFjdGlvbkRhdGEgPSB0eEFjdGlvbi5kYXRhO1xuICAgICAgY29uc3QgZGVzZXJpYWxpemVkVW5zdGFrZUFjdGlvbiA9IHRoaXMudmFsaWRhdGVVbnN0YWtlQWN0aW9uRGF0YSh1bnN0YWtlQWN0aW9uRGF0YSk7XG5cbiAgICAgIHR4LmFtb3VudCA9IGRlc2VyaWFsaXplZFVuc3Rha2VBY3Rpb24uYW1vdW50O1xuICAgICAgdHguYWRkcmVzcyA9IGRlc2VyaWFsaXplZFVuc3Rha2VBY3Rpb24uYWRkcmVzcztcbiAgICB9IGVsc2UgaWYgKHR4QWN0aW9uLm5hbWUgPT09ICdyZWZ1bmQnKSB7XG4gICAgICBpZiAodHguYWN0aW9ucy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGByZWZ1bmQgc2hvdWxkIG9ubHkgaGF2ZSAxIGFjdGlvbjogJHt0eC5hY3Rpb25zLmxlbmd0aH0gZ2l2ZW5gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc1JlZnVuZEFjdGlvbkRhdGEodHhBY3Rpb24uZGF0YSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG9yIGluY29tcGxldGUgcmVmdW5kIGFjdGlvbiBkYXRhJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlZnVuZEFjdGlvbkRhdGEgPSB0eEFjdGlvbi5kYXRhO1xuICAgICAgdHguYWRkcmVzcyA9IHJlZnVuZEFjdGlvbkRhdGEub3duZXI7XG4gICAgICB0eC5hbW91bnQgPSAnMCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBhY3Rpb246ICR7dHhBY3Rpb24ubmFtZX1gKTtcbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIHR4IGlkIGlmIHR4IGhlYWRlcnMgd2VyZSBwcm92aWRlZFxuICAgIGlmIChoZWFkZXJzKSB7XG4gICAgICBsZXQgcmVidWlsdFRyYW5zYWN0aW9uO1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gcmVtb3ZlIFogYXQgdGhlIGVuZFxuICAgICAgICBpZiAoKGhlYWRlcnMuZXhwaXJhdGlvbiBhcyBzdHJpbmcpLmVuZHNXaXRoKCdaJykpIHtcbiAgICAgICAgICBoZWFkZXJzLmV4cGlyYXRpb24gPSAoaGVhZGVycy5leHBpcmF0aW9uIGFzIHN0cmluZykuc2xpY2UoMCwgLTEpO1xuICAgICAgICB9XG4gICAgICAgIHJlYnVpbHRUcmFuc2FjdGlvbiA9IGF3YWl0IGFwaS50cmFuc2FjdCh7IC4uLnR4LCAuLi5oZWFkZXJzIH0sIHsgc2lnbjogZmFsc2UsIGJyb2FkY2FzdDogZmFsc2UgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnQ291bGQgbm90IGJ1aWxkIHRyYW5zYWN0aW9uIHRvIGdldCB0cmFuc2FjdGlvbl9pZC4gUGxlYXNlIGNoZWNrIHRyYW5zYWN0aW9uIG9yIGhlYWRlcnMgZm9ybWF0LidcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdHgudHJhbnNhY3Rpb25faWQgPSBFb3MuY3JlYXRlVHJhbnNhY3Rpb25JZEhleCgocmVidWlsdFRyYW5zYWN0aW9uIGFzIGFueSkuc2VyaWFsaXplZFRyYW5zYWN0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHg7XG4gIH1cblxuICAvKipcbiAgICogRXhwbGFpbi9wYXJzZSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gcGFyYW1zIC0gRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9uc1xuICAgKi9cbiAgYXN5bmMgZXhwbGFpblRyYW5zYWN0aW9uKHBhcmFtczogRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8VHJhbnNhY3Rpb25FeHBsYW5hdGlvbj4ge1xuICAgIGxldCB0cmFuc2FjdGlvbjtcbiAgICB0cnkge1xuICAgICAgdHJhbnNhY3Rpb24gPSBhd2FpdCB0aGlzLmRlc2VyaWFsaXplVHJhbnNhY3Rpb24ocGFyYW1zKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgRU9TIHRyYW5zYWN0aW9uIG9yIGhlYWRlcnM6ICcgKyBlLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZGlzcGxheU9yZGVyOiBbXG4gICAgICAgICdpZCcsXG4gICAgICAgICdvdXRwdXRBbW91bnQnLFxuICAgICAgICAnY2hhbmdlQW1vdW50JyxcbiAgICAgICAgJ291dHB1dHMnLFxuICAgICAgICAnY2hhbmdlT3V0cHV0cycsXG4gICAgICAgICdmZWUnLFxuICAgICAgICAnbWVtbycsXG4gICAgICAgICdwcm94eScsXG4gICAgICAgICdwcm9kdWNlcnMnLFxuICAgICAgXSxcbiAgICAgIGlkOiB0cmFuc2FjdGlvbi50cmFuc2FjdGlvbl9pZCxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgb3V0cHV0QW1vdW50OiB0cmFuc2FjdGlvbi5hbW91bnQsXG4gICAgICBjaGFuZ2VBbW91bnQ6IDAsXG4gICAgICBvdXRwdXRzOiAhIXRyYW5zYWN0aW9uLmFkZHJlc3MgPyBbeyBhZGRyZXNzOiB0cmFuc2FjdGlvbi5hZGRyZXNzLCBhbW91bnQ6IHRyYW5zYWN0aW9uLmFtb3VudCB9XSA6IFtdLFxuICAgICAgZmVlOiB7fSxcbiAgICAgIG1lbW86IHRyYW5zYWN0aW9uLm1lbW8sXG4gICAgICBwcm94eTogdHJhbnNhY3Rpb24ucHJveHksXG4gICAgICBwcm9kdWNlcnM6IHRyYW5zYWN0aW9uLnByb2R1Y2VycyxcbiAgICB9IGFzIGFueTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgaW5pdGlhdGVSZWNvdmVyeShwYXJhbXM6IFJlY292ZXJ5T3B0aW9ucyk6IG5ldmVyIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2RlcHJlY2F0ZWQgbWV0aG9kJyk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBhIHJlcXVlc3QgdG8gb25lIG9mIHRoZSBwdWJsaWMgRU9TIG5vZGVzIGF2YWlsYWJsZVxuICAgKiBAcGFyYW0gcGFyYW1zLmVuZHBvaW50XG4gICAqIEBwYXJhbSBwYXJhbXMucGF5bG9hZFxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGdldERhdGFGcm9tTm9kZShwYXJhbXM6IHtcbiAgICBlbmRwb2ludDogc3RyaW5nO1xuICAgIHBheWxvYWQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfSk6IFByb21pc2U8cmVxdWVzdC5SZXNwb25zZT4ge1xuICAgIGNvbnN0IG5vZGVVcmxzID0gdGhpcy5nZXRQdWJsaWNOb2RlVXJscygpO1xuICAgIGZvciAoY29uc3Qgbm9kZVVybCBvZiBub2RlVXJscykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlcXVlc3QucG9zdChub2RlVXJsICsgcGFyYW1zLmVuZHBvaW50KS5zZW5kKHBhcmFtcy5wYXlsb2FkKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gbGV0J3MgaG9wZSBhbm90aGVyIGNhbGwgc3VjY2VlZHNcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gY2FsbCBlbmRwb2ludDogJHtwYXJhbXMuZW5kcG9pbnR9IGZyb20gbm9kZXM6ICR7Xy5qb2luKG5vZGVVcmxzLCAnLCAnKX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgRU9TIGNoYWluIGluZm8gZnJvbSBhIHB1YmxpYyBub2RlXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0Q2hhaW5JbmZvRnJvbU5vZGUoKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0RGF0YUZyb21Ob2RlKHsgZW5kcG9pbnQ6ICcvdjEvY2hhaW4vZ2V0X2luZm8nIH0pO1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZmV0Y2ggY2hhaW4gaW5mbycpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGF0YSBzcGVjaWZpYyB0byBhbiBhY2NvdW50IGZyb20gYSBwdWJsaWMgbm9kZVxuICAgKiBAcGFyYW0gYWRkcmVzc1xuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGdldEFjY291bnRGcm9tTm9kZSh7IGFkZHJlc3MgfTogeyBhZGRyZXNzOiBzdHJpbmcgfSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldERhdGFGcm9tTm9kZSh7XG4gICAgICBlbmRwb2ludDogJy92MS9jaGFpbi9nZXRfYWNjb3VudCcsXG4gICAgICBwYXlsb2FkOiB7IGFjY291bnRfbmFtZTogYWRkcmVzcyB9LFxuICAgIH0pO1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBY2NvdW50IG5vdCBmb3VuZCcpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYmxvY2sgZGF0YSBmcm9tIGEgcHVibGljIG5vZGUgdXNpbmcgaXRzIGJsb2NrIG51bWJlciBvciBibG9jayBpZFxuICAgKiBAcGFyYW0gYmxvY2tOdW1PcklkXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0QmxvY2tGcm9tTm9kZSh7IGJsb2NrTnVtT3JJZCB9OiB7IGJsb2NrTnVtT3JJZDogc3RyaW5nIH0pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXREYXRhRnJvbU5vZGUoe1xuICAgICAgZW5kcG9pbnQ6ICcvdjEvY2hhaW4vZ2V0X2Jsb2NrJyxcbiAgICAgIHBheWxvYWQ6IHsgYmxvY2tfbnVtX29yX2lkOiBibG9ja051bU9ySWQgfSxcbiAgICB9KTtcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQmxvY2sgbm90IGZvdW5kJyk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBoZWFkZXJzIGZvciBhbiBFT1MgdHggZnJvbSBhIHB1YmxpYyBub2RlXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0VHJhbnNhY3Rpb25IZWFkZXJzRnJvbU5vZGUoKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBjaGFpbkluZm8gPSBhd2FpdCB0aGlzLmdldENoYWluSW5mb0Zyb21Ob2RlKCk7XG4gICAgY29uc3QgaGVhZEJsb2NrSW5mb1Jlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0QmxvY2tGcm9tTm9kZSh7IGJsb2NrTnVtT3JJZDogY2hhaW5JbmZvLmhlYWRfYmxvY2tfbnVtIH0pO1xuICAgIGNvbnN0IGV4cGlyZVNlY29uZHMgPSAyODgwMDsgLy8gbWF4aW11bSB0eCBleHBpcmUgdGltZSBvZiA4aFxuICAgIGNvbnN0IGNoYWluRGF0ZSA9IG5ldyBEYXRlKGNoYWluSW5mby5oZWFkX2Jsb2NrX3RpbWUgKyAnWicpLmdldFRpbWUoKTtcbiAgICBjb25zdCBleHBpcmF0aW9uRGF0ZSA9IG5ldyBEYXRlKGNoYWluRGF0ZSArIGV4cGlyZVNlY29uZHMgKiAxMDAwKTtcblxuICAgIHJldHVybiB7XG4gICAgICBleHBpcmF0aW9uOiBleHBpcmF0aW9uRGF0ZS50b0lTT1N0cmluZygpLFxuICAgICAgcmVmX2Jsb2NrX251bTogY2hhaW5JbmZvLmhlYWRfYmxvY2tfbnVtICYgMHhmZmZmLFxuICAgICAgcmVmX2Jsb2NrX3ByZWZpeDogaGVhZEJsb2NrSW5mb1Jlc3VsdC5yZWZfYmxvY2tfcHJlZml4LFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0VHJhbnNmZXJBY3Rpb24oeyByZWNpcGllbnQsIHNlbmRlciwgYW1vdW50LCBtZW1vIH06IGFueSk6IEVvc1RyYW5zYWN0aW9uQWN0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgYWNjb3VudDogJ2Vvc2lvLnRva2VuJyxcbiAgICAgIG5hbWU6ICd0cmFuc2ZlcicsXG4gICAgICBhdXRob3JpemF0aW9uOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhY3Rvcjogc2VuZGVyLFxuICAgICAgICAgIHBlcm1pc3Npb246ICdhY3RpdmUnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZnJvbTogc2VuZGVyLFxuICAgICAgICB0bzogcmVjaXBpZW50LFxuICAgICAgICBxdWFudGl0eTogYCR7dGhpcy5iYXNlVW5pdHNUb0JpZ1VuaXRzKGFtb3VudCl9IEVPU2AsXG4gICAgICAgIG1lbW86ICFfLmlzTmlsKG1lbW8pID8gbWVtbyA6ICcnLCAvLyBNZW1vIG11c3QgYmUgZGVmaW5lZCwgc2V0IGl0IHRvIGVtcHR5IHN0cmluZyBpZiBpdCBpcyBub3RcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIGEgdHJhbnNhY3Rpb24gd2l0aCBhIGtleVxuICAgKiBAcGFyYW0gc2lnbmFibGVUeFxuICAgKiBAcGFyYW0gc2lnbmluZ0tleVxuICAgKi9cbiAgc2lnblR4KHNpZ25hYmxlVHg6IHN0cmluZywgc2lnbmluZ0tleTogQklQMzJJbnRlcmZhY2UpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNpZ25CdWZmZXIgPSBCdWZmZXIuZnJvbShzaWduYWJsZVR4LCAnaGV4Jyk7XG4gICAgY29uc3QgcHJpdmF0ZUtleUJ1ZmZlciA9IHNpZ25pbmdLZXkucHJpdmF0ZUtleTtcbiAgICByZXR1cm4gZWNjLlNpZ25hdHVyZS5zaWduKHNpZ25CdWZmZXIsIHByaXZhdGVLZXlCdWZmZXIpLnRvU3RyaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgZnVuZHMgcmVjb3ZlcnkgdHJhbnNhY3Rpb24gd2l0aG91dCBCaXRHb1xuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyByZWNvdmVyKHBhcmFtczogUmVjb3ZlcnlPcHRpb25zKTogUHJvbWlzZTxSZWNvdmVyeVRyYW5zYWN0aW9uPiB7XG4gICAgaWYgKCFwYXJhbXMucm9vdEFkZHJlc3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBzdHJpbmcgcm9vdEFkZHJlc3MnKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0tyc1JlY292ZXJ5ID0gZ2V0SXNLcnNSZWNvdmVyeShwYXJhbXMpO1xuICAgIGNvbnN0IGlzVW5zaWduZWRTd2VlcCA9IGdldElzVW5zaWduZWRTd2VlcChwYXJhbXMpO1xuXG4gICAgY29uc3QgeyBrcnNQcm92aWRlciB9ID0gcGFyYW1zO1xuICAgIGlmIChnZXRJc0tyc1JlY292ZXJ5KHBhcmFtcykpIHtcbiAgICAgIGNoZWNrS3JzUHJvdmlkZXIodGhpcywga3JzUHJvdmlkZXIpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzcyhwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkZXN0aW5hdGlvbiBhZGRyZXNzIScpO1xuICAgIH1cblxuICAgIGNvbnN0IGtleXMgPSBnZXRCaXAzMktleXModGhpcy5iaXRnbywgcGFyYW1zLCB7IHJlcXVpcmVCaXRHb1hwdWI6IGZhbHNlIH0pO1xuXG4gICAgY29uc3Qgcm9vdEFkZHJlc3NEZXRhaWxzID0gdGhpcy5nZXRBZGRyZXNzRGV0YWlscyhwYXJhbXMucm9vdEFkZHJlc3MpO1xuICAgIGNvbnN0IGFjY291bnQgPSBhd2FpdCB0aGlzLmdldEFjY291bnRGcm9tTm9kZSh7IGFkZHJlc3M6IHJvb3RBZGRyZXNzRGV0YWlscy5hZGRyZXNzIH0pO1xuXG4gICAgaWYgKCFhY2NvdW50LmNvcmVfbGlxdWlkX2JhbGFuY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgYW55IGJhbGFuY2UgdG8gcmVjb3ZlcnkgZm9yICcgKyBwYXJhbXMucm9vdEFkZHJlc3MpO1xuICAgIH1cblxuICAgIGlmICghYWNjb3VudC5wZXJtaXNzaW9ucykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBwZXJtaXNzaW9ucyBmb3IgJyArIHBhcmFtcy5yb290QWRkcmVzcyk7XG4gICAgfVxuICAgIGNvbnN0IHVzZXJQdWIgPSBlY2MuUHVibGljS2V5LmZyb21CdWZmZXIoa2V5c1swXS5wdWJsaWNLZXkpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgYmFja3VwUHViID0gZWNjLlB1YmxpY0tleS5mcm9tQnVmZmVyKGtleXNbMV0ucHVibGljS2V5KS50b1N0cmluZygpO1xuXG4gICAgY29uc3QgYWN0aXZlUGVybWlzc2lvbiA9IF8uZmluZChhY2NvdW50LnBlcm1pc3Npb25zLCB7IHBlcm1fbmFtZTogJ2FjdGl2ZScgfSk7XG4gICAgY29uc3QgcmVxdWlyZWRBdXRoID0gXy5nZXQoYWN0aXZlUGVybWlzc2lvbiwgJ3JlcXVpcmVkX2F1dGgnKTtcbiAgICBpZiAoIXJlcXVpcmVkQXV0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBhdXRoIGZvciBhY3RpdmUgcGVybWlzc2lvbiBub3QgZm91bmQgaW4gYWNjb3VudCcpO1xuICAgIH1cbiAgICBpZiAocmVxdWlyZWRBdXRoLnRocmVzaG9sZCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIGFjdGl2ZSBwZXJtaXNzaW9uIHRocmVzaG9sZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGZvdW5kUHVicyA9IHt9O1xuICAgIGNvbnN0IHJlcXVpcmVkQXV0aEtleXMgPSByZXF1aXJlZEF1dGgua2V5cztcbiAgICBmb3IgKGNvbnN0IHNpZ25lciBvZiByZXF1aXJlZEF1dGhLZXlzKSB7XG4gICAgICBpZiAoc2lnbmVyLndlaWdodCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc2lnbmVyIHdlaWdodCcpO1xuICAgICAgfVxuICAgICAgLy8gaWYgaXQncyBhIGR1cGUgb2YgYSBwdWIgd2UgYWxyZWFkeSBrbm93LCBibG9ja1xuICAgICAgaWYgKGZvdW5kUHVic1tzaWduZXIua2V5XSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2R1cGxpY2F0ZSBzaWduZXIga2V5Jyk7XG4gICAgICB9XG4gICAgICBmb3VuZFB1YnNbc2lnbmVyLmtleV0gPSAoZm91bmRQdWJzW3NpZ25lci5rZXldIHx8IDApICsgMTtcbiAgICB9XG4gICAgaWYgKGZvdW5kUHVic1t1c2VyUHViXSAhPT0gMSB8fCBmb3VuZFB1YnNbYmFja3VwUHViXSAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIGluY2lkZW5jZSBmcmVxdWVuY3kgb2YgdXNlciBzaWduZXIga2V5Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgYWNjb3VudEJhbGFuY2UgPSBhY2NvdW50LmNvcmVfbGlxdWlkX2JhbGFuY2Uuc3BsaXQoJyAnKVswXTtcbiAgICBjb25zdCByZWNvdmVyeUFtb3VudCA9IHRoaXMuYmlnVW5pdHNUb0Jhc2VVbml0cyhuZXcgQmlnTnVtYmVyKGFjY291bnRCYWxhbmNlKS50b0ZpeGVkKCkpO1xuXG4gICAgY29uc3QgZGVzdGluYXRpb25BZGRyZXNzID0gcGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb247XG4gICAgY29uc3QgZGVzdGluYXRpb25BZGRyZXNzRGV0YWlscyA9IHRoaXMuZ2V0QWRkcmVzc0RldGFpbHMoZGVzdGluYXRpb25BZGRyZXNzKTtcbiAgICBjb25zdCBkZXN0aW5hdGlvbkFjY291bnQgPSBhd2FpdCB0aGlzLmdldEFjY291bnRGcm9tTm9kZSh7IGFkZHJlc3M6IGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHMuYWRkcmVzcyB9KTtcbiAgICBpZiAoIWRlc3RpbmF0aW9uQWNjb3VudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEZXN0aW5hdGlvbiBhY2NvdW50IG5vdCBmb3VuZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uSGVhZGVycyA9IGF3YWl0IHRoaXMuZ2V0VHJhbnNhY3Rpb25IZWFkZXJzRnJvbU5vZGUoKTtcbiAgICBpZiAoIXRyYW5zYWN0aW9uSGVhZGVycykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZ2V0IHRyYW5zYWN0aW9uIGhlYWRlcnMgZnJvbSBub2RlJyk7XG4gICAgfVxuICAgIGNvbnN0IGhlYWRlcnM6IEVvc1RyYW5zYWN0aW9uSGVhZGVycyA9IHRyYW5zYWN0aW9uSGVhZGVycztcbiAgICBjb25zdCBuYXRpdmVEYXRlID0gbmV3IERhdGUoaGVhZGVycy5leHBpcmF0aW9uIGFzIHN0cmluZyk7XG4gICAgLy8gZHJvcCBtaWxsaXNlY29uZHMgYW5kIHRyYWlsaW5nIFogZnJvbSBleHBpcmF0aW9uXG4gICAgbmF0aXZlRGF0ZS5zZXRNaWxsaXNlY29uZHMoMCk7XG4gICAgY29uc3QgZXhwaXJhdGlvbiA9IG5hdGl2ZURhdGUudG9JU09TdHJpbmcoKTtcbiAgICBpZiAoZXhwaXJhdGlvbi5lbmRzV2l0aCgnWicpKSB7XG4gICAgICBoZWFkZXJzLmV4cGlyYXRpb24gPSBleHBpcmF0aW9uLnNsaWNlKDAsIC0xKTtcbiAgICB9XG5cbiAgICAvLyBjcmVhdGUgYW4gb2ZmbGluZSBlb3NqcyBBUEkgY2xpZW50XG4gICAgY29uc3QgYXBpID0gbmV3IEFwaSh7XG4gICAgICBycGM6IG5ldyBOb29wSnNvblJwYygpLFxuICAgICAgc2lnbmF0dXJlUHJvdmlkZXI6IG5ldyBOb29wU2lnbmF0dXJlUHJvdmlkZXIoKSxcbiAgICAgIGFiaVByb3ZpZGVyOiBuZXcgT2ZmbGluZUFiaVByb3ZpZGVyKCksXG4gICAgICBjaGFpbklkOiB0aGlzLmdldENoYWluSWQoKSxcbiAgICAgIHRleHREZWNvZGVyOiBuZXcgVGV4dERlY29kZXIoKSxcbiAgICAgIHRleHRFbmNvZGVyOiBuZXcgVGV4dEVuY29kZXIoKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRyYW5zZmVyQWN0aW9uID0gdGhpcy5nZXRUcmFuc2ZlckFjdGlvbih7XG4gICAgICByZWNpcGllbnQ6IGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHMuYWRkcmVzcyxcbiAgICAgIHNlbmRlcjogcm9vdEFkZHJlc3NEZXRhaWxzLmFkZHJlc3MsXG4gICAgICBhbW91bnQ6IG5ldyBCaWdOdW1iZXIocmVjb3ZlcnlBbW91bnQpLFxuICAgICAgbWVtbzogZGVzdGluYXRpb25BZGRyZXNzRGV0YWlscy5tZW1vSWQsXG4gICAgfSk7XG5cbiAgICBsZXQgc2VyaWFsaXplZFRyYW5zYWN0aW9uO1xuICAgIGNvbnN0IHR4ID0geyBhY3Rpb25zOiBbdHJhbnNmZXJBY3Rpb25dIH07XG4gICAgdHJ5IHtcbiAgICAgIHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGFwaS50cmFuc2FjdCh7IC4uLnR4LCAuLi5oZWFkZXJzIH0sIHsgc2lnbjogZmFsc2UsIGJyb2FkY2FzdDogZmFsc2UgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFb3MgQVBJIGVycm9yOiBDb3VsZCBub3QgYnVpbGQgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICAvLyBjcmVhdGUgdHJhbnNhY3Rpb24gb2JqZWN0XG4gICAgY29uc3Qgc2VyaWFsaXplZFRyYW5zYWN0aW9uSGV4ID0gQnVmZmVyLmZyb20oc2VyaWFsaXplZFRyYW5zYWN0aW9uLnNlcmlhbGl6ZWRUcmFuc2FjdGlvbikudG9TdHJpbmcoJ2hleCcpO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uSWQgPSBFb3MuY3JlYXRlVHJhbnNhY3Rpb25JZEhleChzZXJpYWxpemVkVHJhbnNhY3Rpb24uc2VyaWFsaXplZFRyYW5zYWN0aW9uKTtcbiAgICBjb25zdCB0eE9iamVjdCA9IHtcbiAgICAgIHRyYW5zYWN0aW9uOiB7XG4gICAgICAgIGNvbXByZXNzaW9uOiAnbm9uZScsXG4gICAgICAgIHBhY2tlZF90cng6IHNlcmlhbGl6ZWRUcmFuc2FjdGlvbkhleCxcbiAgICAgICAgc2lnbmF0dXJlczogW10gYXMgc3RyaW5nW10sXG4gICAgICB9LFxuICAgICAgdHhpZDogdHJhbnNhY3Rpb25JZCxcbiAgICAgIHJlY292ZXJ5QW1vdW50OiBhY2NvdW50QmFsYW5jZSxcbiAgICAgIGNvaW46IHRoaXMuZ2V0Q2hhaW4oKSxcbiAgICAgIHR4SGV4OiAnJyxcbiAgICB9O1xuXG4gICAgY29uc3Qgc2lnbmFibGVUeCA9IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgQnVmZmVyLmZyb20odGhpcy5nZXRDaGFpbklkKCksICdoZXgnKSwgLy8gVGhlIENoYWluSUQgcmVwcmVzZW50aW5nIHRoZSBjaGFpbiB0aGF0IHdlIGFyZSBvblxuICAgICAgQnVmZmVyLmZyb20oc2VyaWFsaXplZFRyYW5zYWN0aW9uLnNlcmlhbGl6ZWRUcmFuc2FjdGlvbiksIC8vIFRoZSBzZXJpYWxpemVkIHVuc2lnbmVkIHR4XG4gICAgICBCdWZmZXIuZnJvbShuZXcgVWludDhBcnJheSgzMikpLCAvLyBTb21lIHBhZGRpbmdcbiAgICBdKS50b1N0cmluZygnaGV4Jyk7XG5cbiAgICBpZiAoaXNVbnNpZ25lZFN3ZWVwKSB7XG4gICAgICB0eE9iamVjdC50eEhleCA9IHNpZ25hYmxlVHg7XG4gICAgICByZXR1cm4gdHhPYmplY3Q7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlclNpZ25hdHVyZSA9IHRoaXMuc2lnblR4KHNpZ25hYmxlVHgsIGtleXNbMF0pO1xuICAgIHR4T2JqZWN0LnRyYW5zYWN0aW9uLnNpZ25hdHVyZXMucHVzaCh1c2VyU2lnbmF0dXJlKTtcblxuICAgIGlmICghaXNLcnNSZWNvdmVyeSkge1xuICAgICAgY29uc3QgYmFja3VwU2lnbmF0dXJlID0gdGhpcy5zaWduVHgoc2lnbmFibGVUeCwga2V5c1sxXSk7XG4gICAgICB0eE9iamVjdC50cmFuc2FjdGlvbi5zaWduYXR1cmVzLnB1c2goYmFja3VwU2lnbmF0dXJlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHhPYmplY3Q7XG4gIH1cblxuICBhc3luYyBwYXJzZVRyYW5zYWN0aW9uKHBhcmFtczogUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFBhcnNlZFRyYW5zYWN0aW9uPiB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmeSB0aGF0IGEgdHJhbnNhY3Rpb24gcHJlYnVpbGQgY29tcGxpZXMgd2l0aCB0aGUgb3JpZ2luYWwgaW50ZW50aW9uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtcy50eFBhcmFtcyBwYXJhbXMgdXNlZCB0byBidWlsZCB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHBhcmFtcy50eFByZWJ1aWxkIHRoZSBwcmVidWlsdCB0cmFuc2FjdGlvblxuICAgKi9cbiAgYXN5bmMgdmVyaWZ5VHJhbnNhY3Rpb24ocGFyYW1zOiBFb3NWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHsgdHhQYXJhbXM6IHR4UGFyYW1zLCB0eFByZWJ1aWxkOiB0eFByZWJ1aWxkIH0gPSBwYXJhbXM7XG5cbiAgICAvLyBjaGVjayBpZiB0aGUgdHJhbnNhY3Rpb24gaGFzIGEgdHhIZXhcbiAgICBpZiAoIXR4UHJlYnVpbGQudHhIZXgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCB0eCBwcmVidWlsZCBwcm9wZXJ0eSB0eEhleCcpO1xuICAgIH1cblxuICAgIC8vIGNvbnN0cnVjdCB0cmFuc2FjdGlvbiBmcm9tIHR4SGV4XG4gICAgY29uc3QgdHhGcm9tSGV4ID0gQnVmZmVyLmZyb20odHhQcmVidWlsZC50eEhleCwgJ2hleCcpO1xuICAgIGNvbnN0IHR4RGF0YVdpdGhQYWRkaW5nID0gdHhGcm9tSGV4LnNsaWNlKDMyKTtcbiAgICBjb25zdCB0eERhdGEgPSB0eERhdGFXaXRoUGFkZGluZy5zbGljZSgwLCB0eERhdGFXaXRoUGFkZGluZy5sZW5ndGggLSAzMik7XG4gICAgY29uc3QgZGVzZXJpYWxpemVkVHhKc29uID0gYXdhaXQgdGhpcy5kZXNlcmlhbGl6ZVRyYW5zYWN0aW9uKHtcbiAgICAgIHRyYW5zYWN0aW9uOiB7IHBhY2tlZF90cng6IHR4RGF0YS50b1N0cmluZygnaGV4JykgfSxcbiAgICAgIGhlYWRlcnM6IHR4UHJlYnVpbGQuaGVhZGVycyxcbiAgICB9KTtcbiAgICBpZiAoIWRlc2VyaWFsaXplZFR4SnNvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcHJvY2VzcyB0cmFuc2FjdGlvbiBmcm9tIHR4SGV4Jyk7XG4gICAgfVxuICAgIGNvbnN0IHR4SnNvbkZyb21IZXg6IERlc2VyaWFsaXplZEVvc1RyYW5zYWN0aW9uID0gZGVzZXJpYWxpemVkVHhKc29uO1xuXG4gICAgLy8gY2hlY2sgdGhhdCBpZiB0eFBhcmFtcyBoYXMgYSB0eFByZWJ1aWxkLCBpdCBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdHhQcmVidWlsZFxuICAgIGlmICh0eFBhcmFtcy50eFByZWJ1aWxkICYmICFfLmlzRXF1YWwodHhQYXJhbXMudHhQcmVidWlsZCwgdHhQcmVidWlsZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW5wdXRzIHR4UGFyYW1zLnR4UHJlYnVpbGQgYW5kIHR4UHJlYnVpbGQgZXhwZWN0ZWQgdG8gYmUgZXF1YWwgYnV0IHdlcmUgbm90Jyk7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgcHJlYnVpbGQgaGFzIGEgdHJhbnNhY3Rpb25cbiAgICBpZiAoIXR4UHJlYnVpbGQudHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCB0cmFuc2FjdGlvbiBpbiB0eFByZWJ1aWxkJyk7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgdHJhbnNhY3Rpb24gaGFzIGEgcGFja2VkX3RyeFxuICAgIGlmICghdHhQcmVidWlsZC50cmFuc2FjdGlvbj8ucGFja2VkX3RyeCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHRyYW5zYWN0aW9uLnBhY2tlZF90cnggaW4gdHhQcmVidWlsZCcpO1xuICAgIH1cblxuICAgIC8vIGNvbnN0cnVjdCB0cmFuc2FjdGlvbiB1c2luZyBwYWNrZWRfdHJ4XG4gICAgY29uc3QgZGVzZXJpYWxpemVkVHhKc29uRnJvbVBhY2tlZFRyeCA9IGF3YWl0IHRoaXMuZGVzZXJpYWxpemVUcmFuc2FjdGlvbih7XG4gICAgICB0cmFuc2FjdGlvbjogeyBwYWNrZWRfdHJ4OiB0eFByZWJ1aWxkLnRyYW5zYWN0aW9uLnBhY2tlZF90cnggfSxcbiAgICAgIGhlYWRlcnM6IHR4UHJlYnVpbGQuaGVhZGVycyxcbiAgICB9KTtcbiAgICBpZiAoIWRlc2VyaWFsaXplZFR4SnNvbkZyb21QYWNrZWRUcngpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHByb2Nlc3MgdHJhbnNhY3Rpb24gZnJvbSBwYWNrZWRfdHJ4Jyk7XG4gICAgfVxuICAgIGNvbnN0IHR4SnNvbkZyb21QYWNrZWRUcng6IERlc2VyaWFsaXplZEVvc1RyYW5zYWN0aW9uID0gZGVzZXJpYWxpemVkVHhKc29uRnJvbVBhY2tlZFRyeDtcblxuICAgIC8vIGRlZXAgY2hlY2sgb2Ygb2JqZWN0IGZyb20gcGFja2VkX3RyeCBhbmQgdHhIZXhcbiAgICBpZiAoIV8uaXNFcXVhbCh0eEpzb25Gcm9tUGFja2VkVHJ4LCB0eEpzb25Gcm9tSGV4KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bnBhY2tlZCBwYWNrZWRfdHJ4IGFuZCB1bnBhY2tlZCB0eEhleCBhcmUgbm90IGVxdWFsJyk7XG4gICAgfVxuXG4gICAgaWYgKHR4UGFyYW1zLnJlY2lwaWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdvbmx5IDAgb3IgMSByZWNpcGllbnRzIGFyZSBzdXBwb3J0ZWQnKTtcbiAgICB9XG5cbiAgICAvLyBjaGVjayB0aGUgYW1vdW50cywgcmVjaXBpZW50LCBhbmQgY29pbiBuYW1lIGZvciB0cmFuc2ZlcnNcbiAgICBpZiAodHhQYXJhbXMucmVjaXBpZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gdHhQYXJhbXMucmVjaXBpZW50c1swXTtcblxuICAgICAgLy8gY2hlY2sgb3V0cHV0IGFkZHJlc3MgYW5kIG1lbW9JZFxuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXRBZGRyZXNzQW5kTWVtb0lkID0gdGhpcy5nZXRBZGRyZXNzRGV0YWlscyhleHBlY3RlZE91dHB1dC5hZGRyZXNzKTtcbiAgICAgIGNvbnN0IHR4SGV4QWN0aW9uID0gdHhKc29uRnJvbUhleC5hY3Rpb25zWzBdO1xuICAgICAgY29uc3QgdHhIZXhUcmFuc2ZlckFjdGlvbiA9IHR4SGV4QWN0aW9uLmRhdGEgYXMgVHJhbnNmZXJBY3Rpb25EYXRhO1xuXG4gICAgICBpZiAodHhIZXhUcmFuc2ZlckFjdGlvbi50byAhPT0gZXhwZWN0ZWRPdXRwdXRBZGRyZXNzQW5kTWVtb0lkLmFkZHJlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0eEhleCByZWNlaXZlIGFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgcmVjaXBpZW50IGFkZHJlc3MnKTtcbiAgICAgIH1cbiAgICAgIC8vIGNoZWNrIGlmIHR4YWN0aW9uIG1lbW9pZCBpcyBlcXVhbCB0byBhZGRyZXNzIG1lbW8gaWQgb25seSBpZiBhZGRyZXNzIGFsc28gaGFzIG1lbW9pZCBwcmVzZW50XG4gICAgICBpZiAoIV8uaXNVbmRlZmluZWQoZXhwZWN0ZWRPdXRwdXRBZGRyZXNzQW5kTWVtb0lkLm1lbW9JZCkpIHtcbiAgICAgICAgaWYgKHR4SGV4VHJhbnNmZXJBY3Rpb24ubWVtbyAhPT0gZXhwZWN0ZWRPdXRwdXRBZGRyZXNzQW5kTWVtb0lkLm1lbW9JZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndHhIZXggcmVjZWl2ZSBtZW1vSWQgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgcmVjaXBpZW50IG1lbW9JZCcpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGNoZWNrIGFtb3VudCBhbmQgY29pblxuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXRBbW91bnQgPSBleHBlY3RlZE91dHB1dC5hbW91bnQ7XG4gICAgICBjb25zdCBhY3R1YWxBbW91bnRBbmRDb2luID0gdHhIZXhUcmFuc2ZlckFjdGlvbi5xdWFudGl0eS5zcGxpdCgnICcpO1xuICAgICAgY29uc3QgYWN0dWFsT3V0cHV0QW1vdW50ID0gdGhpcy5iaWdVbml0c1RvQmFzZVVuaXRzKGFjdHVhbEFtb3VudEFuZENvaW5bMF0pO1xuICAgICAgaWYgKGV4cGVjdGVkT3V0cHV0QW1vdW50ICE9PSBhY3R1YWxPdXRwdXRBbW91bnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0eEhleCByZWNlaXZlIGFtb3VudCBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCByZWNpcGllbnQgYW1vdW50Jyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eFByZWJ1aWxkLmNvaW4gPT09ICdlb3MnIHx8IHR4UHJlYnVpbGQuY29pbiA9PT0gJ3Rlb3MnKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkU3ltYm9sID0gXy5pc05pbCh0eFByZWJ1aWxkLnRva2VuKSA/ICdFT1MnIDogdHhQcmVidWlsZC50b2tlbi5zcGxpdCgnOicpWzFdO1xuXG4gICAgICAgIGlmIChhY3R1YWxBbW91bnRBbmRDb2luWzFdICE9PSBleHBlY3RlZFN5bWJvbCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndHhIZXggcmVjZWl2ZSBzeW1ib2wgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgcmVjaXBpZW50IHN5bWJvbCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0eEhleCBjb2luIG5hbWUgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgY29pbiBuYW1lJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSByYW5kb20gRU9TIGFkZHJlc3MuXG4gICAqXG4gICAqIFRoaXMgaXMganVzdCBhIHJhbmRvbSBzdHJpbmcgd2hpY2ggYWJpZGVzIGJ5IHRoZSBFT1MgYWRkZHJlc3MgY29uc3RyYWludHMsXG4gICAqIGFuZCBpcyBub3QgYWN0dWFsbHkgY2hlY2tlZCBmb3IgYXZhaWxhYmlsaXR5IG9uIHRoZSBFT1MgYmxvY2tjaGFpbi5cbiAgICpcbiAgICogQ3VycmVudCBFT1MgYWRkcmVzcyBjb25zdHJhaW50cyBhcmU6XG4gICAqICogQWRkcmVzcyBtdXN0IGJlIGV4YWN0bHkgMTIgY2hhcmFjdGVyc1xuICAgKiAqIEFkZHJlc3MgbXVzdCBvbmx5IGNvbnRhaW4gbG93ZXJjYXNlIGxldHRlcnMgYW5kIG51bWJlcnMgMS01XG4gICAqIEByZXR1cm5zIGEgdmFsaWRseSBmb3JtYXR0ZWQgRU9TIGFkZHJlc3MsIHdoaWNoIG1heSBvciBtYXkgbm90IGFjdHVhbGx5IGJlIGF2YWlsYWJsZSBvbiBjaGFpbi5cbiAgICovXG4gIGdlbmVyYXRlUmFuZG9tQWRkcmVzcyhwYXJhbXM6IFJlY29yZDxzdHJpbmcsIG5ldmVyPik6IHN0cmluZyB7XG4gICAgY29uc3QgYWRkcmVzczogc3RyaW5nW10gPSBbXTtcbiAgICB3aGlsZSAoYWRkcmVzcy5sZW5ndGggPCAxMikge1xuICAgICAgY29uc3QgY2hhciA9IF8uc2FtcGxlKEVvcy5WQUxJRF9BRERSRVNTX0NIQVJTKTtcbiAgICAgIGlmICghY2hhcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBzYW1wbGUgdmFsaWQgRU9TIGFkZHJlc3MgY2hhcmFjdGVycycpO1xuICAgICAgfVxuICAgICAgYWRkcmVzcy5wdXNoKGNoYXIpO1xuICAgIH1cbiAgICByZXR1cm4gYWRkcmVzcy5qb2luKCcnKTtcbiAgfVxufVxuIl19
|
|
879
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW9zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Vvcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztHQUVHO0FBQ0gsK0NBQXlDO0FBQ3pDLDhDQUF3RDtBQUN4RCxtQ0FBaUQ7QUFDakQsaUNBQW1FO0FBQ25FLCtDQUFpQztBQUNqQywwQ0FBNEI7QUFDNUIseURBQTJDO0FBQzNDLG9EQUFzQztBQUN0Qyx5Q0FBMkI7QUFFM0IsNkRBQThEO0FBQzlELHVDQUFnRDtBQUNoRCw4Q0FxQnlCO0FBb0p6QixNQUFNLFdBQVksU0FBUSxlQUFPO0lBQy9CO1FBQ0UsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ1osQ0FBQztDQUNGO0FBRUQsTUFBTSxxQkFBcUI7SUFDekIsS0FBSyxDQUFDLGdCQUFnQjtRQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBeUM7UUFDbEQsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7Q0FDRjtBQUVELE1BQWEsR0FBSSxTQUFRLG1CQUFRO0lBSS9CLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBZ0I7UUFDcEMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsVUFBVTtRQUNSLE9BQU8sa0VBQWtFLENBQUMsQ0FBQyxtQkFBbUI7SUFDaEcsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELGFBQWE7UUFDWCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixP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QyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFMUYsSUFBSSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxjQUFjLEVBQUU7b0JBQzdDLE1BQU0sSUFBSSxLQUFLLENBQUMsK0RBQStELENBQUMsQ0FBQztpQkFDbEY7YUFDRjtpQkFBTTtnQkFDTCwyQkFBMkI7Z0JBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsbURBQW1ELENBQUMsQ0FBQzthQUN0RTtTQUNGO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILHFCQUFxQixDQUFDLE1BQTZCO1FBQ2pELE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQztRQUM3QixPQUFPLE9BQU8sQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFO1lBQzFCLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDVCxNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7YUFDbEU7WUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3BCO1FBQ0QsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7O0FBdjdCSCxrQkF3N0JDO0FBdjdCZSx1QkFBbUIsR0FBRyxpQ0FBaUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEUsa0JBQWMsR0FBRyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQgeyBCaWdOdW1iZXIgfSBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgYmlwMzIsIEJJUDMySW50ZXJmYWNlIH0gZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IGNyZWF0ZUhhc2gsIHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IEFwaSwgQXBpSW50ZXJmYWNlcywgSnNvblJwYywgUnBjSW50ZXJmYWNlcyB9IGZyb20gJ2Vvc2pzJztcbmltcG9ydCAqIGFzIGVjYyBmcm9tICdlb3Nqcy1lY2MnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICogYXMgcXVlcnlzdHJpbmcgZnJvbSAncXVlcnlzdHJpbmcnO1xuaW1wb3J0ICogYXMgcmVxdWVzdCBmcm9tICdzdXBlcmFnZW50JztcbmltcG9ydCAqIGFzIHVybCBmcm9tICd1cmwnO1xuXG5pbXBvcnQgeyBPZmZsaW5lQWJpUHJvdmlkZXIgfSBmcm9tICcuL2Vvc3V0aWwvZW9zYWJpcHJvdmlkZXInO1xuaW1wb3J0IHsgU3RyaW5nVGV4dERlY29kZXIgfSBmcm9tICcuL2xpYi91dGlscyc7XG5pbXBvcnQge1xuICBCYXNlQ29pbixcbiAgQml0R29CYXNlLFxuICBjaGVja0tyc1Byb3ZpZGVyLFxuICBFbnZpcm9ubWVudHMsXG4gIGdldEJpcDMyS2V5cyxcbiAgZ2V0SXNLcnNSZWNvdmVyeSxcbiAgZ2V0SXNVbnNpZ25lZFN3ZWVwLFxuICBIYWxmU2lnbmVkQWNjb3VudFRyYW5zYWN0aW9uIGFzIEJhc2VIYWxmU2lnbmVkVHJhbnNhY3Rpb24sXG4gIEludmFsaWRBZGRyZXNzRXJyb3IsXG4gIEtleVBhaXIsXG4gIFBhcnNlZFRyYW5zYWN0aW9uLFxuICBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgUmVxdWVzdFRyYWNlcixcbiAgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyBhcyBCYXNlU2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbixcbiAgVW5leHBlY3RlZEFkZHJlc3NFcnJvcixcbiAgVmVyaWZpY2F0aW9uT3B0aW9ucyxcbiAgVmVyaWZ5QWRkcmVzc09wdGlvbnMgYXMgQmFzZVZlcmlmeUFkZHJlc3NPcHRpb25zLFxuICBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMgYXMgQmFzZVZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgV2FsbGV0LFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuXG5pbnRlcmZhY2UgQWRkcmVzc0RldGFpbHMge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIG1lbW9JZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFb3NUeCB7XG4gIHNpZ25hdHVyZXM6IHN0cmluZ1tdO1xuICBwYWNrZWRfdHJ4OiBzdHJpbmc7XG4gIGNvbXByZXNzaW9uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjaXBpZW50IHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICBhbW91bnQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEVvc1RyYW5zYWN0aW9uSGVhZGVycyB7XG4gIHJlZl9ibG9ja19wcmVmaXg6IG51bWJlcjtcbiAgcmVmX2Jsb2NrX251bTogbnVtYmVyO1xuICBleHBpcmF0aW9uPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgRW9zVHJhbnNhY3Rpb25BY3Rpb24ge1xuICBhY2NvdW50OiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgYXV0aG9yaXphdGlvbjogW3sgYWN0b3I6IHN0cmluZzsgcGVybWlzc2lvbjogc3RyaW5nIH1dO1xuICBkYXRhOiBUcmFuc2ZlckFjdGlvbkRhdGEgfCBTdGFrZUFjdGlvbkRhdGEgfCBWb3RlQWN0aW9uRGF0YTtcbn1cblxuaW50ZXJmYWNlIEVvc1RyYW5zYWN0aW9uUHJlYnVpbGQge1xuICByZWNpcGllbnRzOiBSZWNpcGllbnRbXTtcbiAgaGVhZGVyczogRW9zVHJhbnNhY3Rpb25IZWFkZXJzO1xuICB0eEhleDogc3RyaW5nOyAvLyBUaGUgc2lnbmFibGUgdHggaGV4IHN0cmluZ1xuICB0cmFuc2FjdGlvbjogRW9zVHg7XG4gIHR4aWQ6IHN0cmluZztcbiAgY29pbjogc3RyaW5nO1xuICAvLyBmdWxsIHRva2VuIG5hbWUgd2l0aCB0aGUgZm9ybWF0LCBbdF1lb3M6U1lNQk9MLiBUaGlzIHdpbGwgb25seSBiZSBwcmVzZW50IGZvciB0b2tlbiB0cmFuc2FjdGlvbnMuIGUuZy4gdGVvczpDSEVYLlxuICB0b2tlbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFb3NTaWduVHJhbnNhY3Rpb25QYXJhbXMgZXh0ZW5kcyBCYXNlU2lnblRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHBydjogc3RyaW5nO1xuICB0eFByZWJ1aWxkOiBFb3NUcmFuc2FjdGlvblByZWJ1aWxkO1xuICByZWNpcGllbnRzOiBSZWNpcGllbnRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFb3NWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMgZXh0ZW5kcyBCYXNlVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhQcmVidWlsZDogRW9zVHJhbnNhY3Rpb25QcmVidWlsZDtcbiAgdHhQYXJhbXM6IEVvc1NpZ25UcmFuc2FjdGlvblBhcmFtcztcbiAgd2FsbGV0OiBXYWxsZXQ7XG4gIHZlcmlmaWNhdGlvbj86IFZlcmlmaWNhdGlvbk9wdGlvbnM7XG4gIHJlcUlkPzogUmVxdWVzdFRyYWNlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFb3NIYWxmU2lnbmVkIHtcbiAgcmVjaXBpZW50czogUmVjaXBpZW50W107XG4gIGhlYWRlcnM6IEVvc1RyYW5zYWN0aW9uSGVhZGVycztcbiAgdHhIZXg6IHN0cmluZzsgLy8gVGhlIHNpZ25hYmxlIHR4IGhleCBzdHJpbmdcbiAgdHJhbnNhY3Rpb246IEVvc1R4O1xuICB0eGlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW9zU2lnbmVkVHJhbnNhY3Rpb24gZXh0ZW5kcyBCYXNlSGFsZlNpZ25lZFRyYW5zYWN0aW9uIHtcbiAgaGFsZlNpZ25lZDogRW9zSGFsZlNpZ25lZDtcbn1cblxuaW50ZXJmYWNlIERlc2VyaWFsaXplZEVvc1RyYW5zYWN0aW9uIHtcbiAgZXhwaXJhdGlvbjogc3RyaW5nO1xuICByZWZfYmxvY2tfbnVtOiBzdHJpbmc7XG4gIHJlZl9ibG9ja19wcmVmaXg6IHN0cmluZztcbiAgbWF4X25ldF91c2FnZV93b3JkczogbnVtYmVyO1xuICBtYXhfY3B1X3VzYWdlX21zOiBudW1iZXI7XG4gIGRlbGF5X3NlYzogbnVtYmVyO1xuICBjb250ZXh0X2ZyZWVfYWN0aW9uczogRW9zVHJhbnNhY3Rpb25BY3Rpb25bXTtcbiAgYWN0aW9uczogRW9zVHJhbnNhY3Rpb25BY3Rpb25bXTtcbiAgdHJhbnNhY3Rpb25fZXh0ZW5zaW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcbiAgYWRkcmVzczogc3RyaW5nO1xuICBhbW91bnQ6IHN0cmluZztcbiAgdHJhbnNhY3Rpb25faWQ6IHN0cmluZztcbiAgbWVtbz86IHN0cmluZztcbiAgcHJveHk/OiBzdHJpbmc7XG4gIHByb2R1Y2Vycz86IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgVHJhbnNmZXJBY3Rpb25EYXRhIHtcbiAgZnJvbTogc3RyaW5nO1xuICB0bzogc3RyaW5nO1xuICBxdWFudGl0eTogc3RyaW5nO1xuICBtZW1vPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgU3Rha2VBY3Rpb25EYXRhIHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICBhbW91bnQ6IHN0cmluZztcbiAgZnJvbTogc3RyaW5nO1xuICByZWNlaXZlcjogc3RyaW5nO1xuICB0cmFuc2ZlcjogbnVtYmVyO1xuICBzdGFrZV9jcHVfcXVhbnRpdHk6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFVuc3Rha2VBY3Rpb25EYXRhIHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICBhbW91bnQ6IHN0cmluZztcbiAgZnJvbTogc3RyaW5nO1xuICByZWNlaXZlcjogc3RyaW5nO1xuICB1bnN0YWtlX2NwdV9xdWFudGl0eTogc3RyaW5nO1xuICB1bnN0YWtlX25ldF9xdWFudGl0eTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUmVmdW5kQWN0aW9uRGF0YSB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgb3duZXI6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFZvdGVBY3Rpb25EYXRhIHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICBwcm94eTogc3RyaW5nO1xuICBwcm9kdWNlcnM6IHN0cmluZ1tdO1xuICB2b3Rlcjogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHRyYW5zYWN0aW9uOiB7IHBhY2tlZF90cng6IHN0cmluZyB9O1xuICBoZWFkZXJzOiBFb3NUcmFuc2FjdGlvbkhlYWRlcnM7XG59XG5cbmludGVyZmFjZSBSZWNvdmVyeVRyYW5zYWN0aW9uIHtcbiAgdHJhbnNhY3Rpb246IEVvc1R4O1xuICB0eGlkOiBzdHJpbmc7XG4gIHJlY292ZXJ5QW1vdW50OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBSZWNvdmVyeU9wdGlvbnMge1xuICB1c2VyS2V5OiBzdHJpbmc7IC8vIEJveCBBXG4gIGJhY2t1cEtleTogc3RyaW5nOyAvLyBCb3ggQlxuICBiaXRnb0tleT86IHN0cmluZzsgLy8gQm94IENcbiAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogc3RyaW5nO1xuICBrcnNQcm92aWRlcj86IHN0cmluZztcbiAgd2FsbGV0UGFzc3BocmFzZT86IHN0cmluZztcbiAgcm9vdEFkZHJlc3M/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBWZXJpZnlBZGRyZXNzT3B0aW9ucyBleHRlbmRzIEJhc2VWZXJpZnlBZGRyZXNzT3B0aW9ucyB7XG4gIHJvb3RBZGRyZXNzOiBzdHJpbmc7XG59XG5cbmNsYXNzIE5vb3BKc29uUnBjIGV4dGVuZHMgSnNvblJwYyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCcnKTtcbiAgfVxufVxuXG5jbGFzcyBOb29wU2lnbmF0dXJlUHJvdmlkZXIgaW1wbGVtZW50cyBBcGlJbnRlcmZhY2VzLlNpZ25hdHVyZVByb3ZpZGVyIHtcbiAgYXN5bmMgZ2V0QXZhaWxhYmxlS2V5cygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub29wIHNpZ25hdHVyZSBwcm92aWRlciBpbXBsZW1lbnRhdGlvbiBoYXMgbm8gYXZhaWxhYmxlIGtleXMnKTtcbiAgfVxuXG4gIGFzeW5jIHNpZ24oYXJnczogQXBpSW50ZXJmYWNlcy5TaWduYXR1cmVQcm92aWRlckFyZ3MpOiBQcm9taXNlPFJwY0ludGVyZmFjZXMuUHVzaFRyYW5zYWN0aW9uQXJncz4ge1xuICAgIHRocm93IG5ldyBFcnJvcignbm9vcCBpbXBsZW1lbnRhdGlvbiBpcyB1bmFibGUgdG8gc2lnbicpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFb3MgZXh0ZW5kcyBCYXNlQ29pbiB7XG4gIHB1YmxpYyBzdGF0aWMgVkFMSURfQUREUkVTU19DSEFSUyA9ICcxMjM0NWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Jy5zcGxpdCgnJyk7XG4gIHB1YmxpYyBzdGF0aWMgQUREUkVTU19MRU5HVEggPSAxMjtcblxuICBzdGF0aWMgY3JlYXRlSW5zdGFuY2UoYml0Z286IEJpdEdvQmFzZSk6IEJhc2VDb2luIHtcbiAgICByZXR1cm4gbmV3IEVvcyhiaXRnbyk7XG4gIH1cblxuICBnZXRDaGFpbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdhY2EzNzZmMjA2YjhmYzI1YTZlZDQ0ZGJkYzY2NTQ3YzM2YzZjMzNlM2ExMTlmZmJlYWVmOTQzNjQyZjBlOTA2JzsgLy8gbWFpbm5ldCBjaGFpbiBpZFxuICB9XG5cbiAgZ2V0Q2hhaW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2Vvcyc7XG4gIH1cblxuICBnZXRGYW1pbHkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2Vvcyc7XG4gIH1cblxuICBnZXRGdWxsTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnRU9TJztcbiAgfVxuXG4gIGdldEJhc2VGYWN0b3IoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gMWU0O1xuICB9XG5cbiAgZ2V0IGRlY2ltYWxQbGFjZXMoKSB7XG4gICAgcmV0dXJuIDQ7XG4gIH1cblxuICAvKipcbiAgICogRmxhZyBmb3Igc2VuZGluZyB2YWx1ZSBvZiAwXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIG9rYXkgdG8gc2VuZCAwIHZhbHVlLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHZhbHVlbGVzc1RyYW5zZmVyQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgVVJMcyBvZiBzb21lIGFjdGl2ZSBwdWJsaWMgbm9kZXNcbiAgICovXG4gIGdldFB1YmxpY05vZGVVcmxzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gRW52aXJvbm1lbnRzW3RoaXMuYml0Z28uZ2V0RW52KCldLmVvc05vZGVVcmxzO1xuICB9XG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBzZWNwMjU2azEga2V5IHBhaXJcbiAgICpcbiAgICogQHBhcmFtIHNlZWQgLSBTZWVkIGZyb20gd2hpY2ggdGhlIG5ldyBrZXlwYWlyIHNob3VsZCBiZSBnZW5lcmF0ZWQsIG90aGVyd2lzZSBhIHJhbmRvbSBzZWVkIGlzIHVzZWRcbiAgICovXG4gIGdlbmVyYXRlS2V5UGFpcihzZWVkPzogQnVmZmVyKTogS2V5UGFpciB7XG4gICAgaWYgKCFzZWVkKSB7XG4gICAgICAvLyBBbiBleHRlbmRlZCBwcml2YXRlIGtleSBoYXMgYm90aCBhIG5vcm1hbCAyNTYgYml0IHByaXZhdGUga2V5IGFuZCBhIDI1NlxuICAgICAgLy8gYml0IGNoYWluIGNvZGUsIGJvdGggb2Ygd2hpY2ggbXVzdCBiZSByYW5kb20uIDUxMiBiaXRzIGlzIHRoZXJlZm9yZSB0aGVcbiAgICAgIC8vIG1heGltdW0gZW50cm9weSBhbmQgZ2l2ZXMgdXMgbWF4aW11bSBzZWN1cml0eSBhZ2FpbnN0IGNyYWNraW5nLlxuICAgICAgc2VlZCA9IHJhbmRvbUJ5dGVzKDUxMiAvIDgpO1xuICAgIH1cbiAgICBjb25zdCBleHRlbmRlZEtleSA9IGJpcDMyLmZyb21TZWVkKHNlZWQpO1xuICAgIGNvbnN0IHhwdWIgPSBleHRlbmRlZEtleS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1YjogeHB1YixcbiAgICAgIHBydjogZXh0ZW5kZWRLZXkudG9CYXNlNTgoKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBpbnB1dCBpcyB2YWxpZCBwdWJsaWMga2V5IGZvciB0aGUgY29pbi5cbiAgICpcbiAgICogQHBhcmFtIHB1YiAtIHRoZSBwdWIgdG8gYmUgY2hlY2tlZFxuICAgKi9cbiAgaXNWYWxpZFB1YihwdWI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYmlwMzIuZnJvbUJhc2U1OChwdWIpLmlzTmV1dGVyZWQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBpbnB1dCBpcyB2YWxpZCBzZWVkIGZvciB0aGUgY29pblxuICAgKlxuICAgKiBAcGFyYW0gcHJ2IC0gdGhlIHBydiB0byBiZSBjaGVja2VkXG4gICAqL1xuICBpc1ZhbGlkUHJ2KHBydjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAhYmlwMzIuZnJvbUJhc2U1OChwcnYpLmlzTmV1dGVyZWQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlcyB3aGV0aGVyIGEgbWVtbyBpcyB2YWxpZFxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSB0aGUgbWVtbyB0byBiZSBjaGVja2VkXG4gICAqL1xuICBpc1ZhbGlkTWVtbyh7IHZhbHVlIH06IHsgdmFsdWU6IHN0cmluZyB9KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIF8uaXNTdHJpbmcodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA8PSAyNTY7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGEgbWVtbyBpZCBpcyB2YWxpZFxuICAgKlxuICAgKiBAcGFyYW0gbWVtb0lkIC0gdGhlIG1lbW8gaWQgdG8gYmUgY2hlY2tlZFxuICAgKi9cbiAgaXNWYWxpZE1lbW9JZChtZW1vSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRNZW1vKHsgdmFsdWU6IG1lbW9JZCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIGFkZHJlc3MgaW50byBhZGRyZXNzIGFuZCBtZW1vIGlkXG4gICAqIEBwYXJhbSBhZGRyZXNzIC0gdGhlIGFkZHJlc3NcbiAgICovXG4gIGdldEFkZHJlc3NEZXRhaWxzKGFkZHJlc3M6IHN0cmluZyk6IEFkZHJlc3NEZXRhaWxzIHtcbiAgICBjb25zdCBkZXN0aW5hdGlvbkRldGFpbHMgPSB1cmwucGFyc2UoYWRkcmVzcyk7XG4gICAgY29uc3QgZGVzdGluYXRpb25BZGRyZXNzID0gZGVzdGluYXRpb25EZXRhaWxzLnBhdGhuYW1lO1xuXG4gICAgaWYgKCFkZXN0aW5hdGlvbkFkZHJlc3MpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBmYWlsZWQgdG8gcGFyc2UgYWRkcmVzczogJHthZGRyZXNzfWApO1xuICAgIH1cblxuICAgIC8vIEVPUyBhZGRyZXNzZXMgaGF2ZSB0byBiZSBcImh1bWFuIHJlYWRhYmxlXCIsIHdoaWNoIG1lYW5zIHVwIHRvIDEyIGNoYXJhY3RlcnMgYW5kIG9ubHkgYS16MS01LiwgaS5lLm10b2RhMS5iaXRnb1xuICAgIC8vIHNvdXJjZTogaHR0cHM6Ly9kZXZlbG9wZXJzLmVvcy5pby9lb3Npby1jcHAvZG9jcy9uYW1pbmctY29udmVudGlvbnNcbiAgICBpZiAoIS9eW2EtejEtNS5dKiQvLnRlc3QoZGVzdGluYXRpb25BZGRyZXNzKSB8fCBkZXN0aW5hdGlvbkFkZHJlc3MubGVuZ3RoID4gRW9zLkFERFJFU1NfTEVOR1RIKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcihgaW52YWxpZCBhZGRyZXNzOiAke2FkZHJlc3N9YCk7XG4gICAgfVxuXG4gICAgLy8gYWRkcmVzcyBkb2Vzbid0IGhhdmUgYSBtZW1vIGlkXG4gICAgaWYgKGRlc3RpbmF0aW9uRGV0YWlscy5wYXRobmFtZSA9PT0gYWRkcmVzcykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWRkcmVzczogYWRkcmVzcyxcbiAgICAgICAgbWVtb0lkOiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICghZGVzdGluYXRpb25EZXRhaWxzLnF1ZXJ5KSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcihgZmFpbGVkIHRvIHBhcnNlIHF1ZXJ5IHN0cmluZzogJHthZGRyZXNzfWApO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5RGV0YWlscyA9IHF1ZXJ5c3RyaW5nLnBhcnNlKGRlc3RpbmF0aW9uRGV0YWlscy5xdWVyeSk7XG4gICAgaWYgKCFxdWVyeURldGFpbHMubWVtb0lkKSB7XG4gICAgICAvLyBpZiB0aGVyZSBhcmUgbW9yZSBwcm9wZXJ0aWVzLCB0aGUgcXVlcnkgZGV0YWlscyBuZWVkIHRvIGNvbnRhaW4gdGhlIG1lbW9JZCBwcm9wZXJ0eVxuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoYGludmFsaWQgcHJvcGVydHkgaW4gYWRkcmVzczogJHthZGRyZXNzfWApO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHF1ZXJ5RGV0YWlscy5tZW1vSWQpICYmIHF1ZXJ5RGV0YWlscy5tZW1vSWQubGVuZ3RoICE9PSAxKSB7XG4gICAgICAvLyB2YWxpZCBhZGRyZXNzZXMgY2FuIG9ubHkgY29udGFpbiBvbmUgbWVtbyBpZFxuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoYGludmFsaWQgYWRkcmVzcyAnJHthZGRyZXNzfScsIG11c3QgY29udGFpbiBleGFjdGx5IG9uZSBtZW1vSWRgKTtcbiAgICB9XG5cbiAgICBjb25zdCBbbWVtb0lkXSA9IF8uY2FzdEFycmF5KHF1ZXJ5RGV0YWlscy5tZW1vSWQpO1xuICAgIGlmICghdGhpcy5pc1ZhbGlkTWVtb0lkKG1lbW9JZCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICcke2FkZHJlc3N9JywgbWVtb0lkIGlzIG5vdCB2YWxpZGApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBhZGRyZXNzOiBkZXN0aW5hdGlvbkFkZHJlc3MsXG4gICAgICBtZW1vSWQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGEgY3VycmVuY3kgYW1vdW50IHJlcHJlc2VudGVkIGluIGJhc2UgdW5pdHMgKHNhdG9zaGksIHdlaSwgYXRvbXMsIGRyb3BzLCBzdHJvb3BzKVxuICAgKiB0byBiaWcgdW5pdHMgKGJ0YywgZXRoLCB4cnAsIHhsbSlcbiAgICovXG4gIGJhc2VVbml0c1RvQmlnVW5pdHMoYmFzZVVuaXRzOiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRpdmlkZW5kID0gdGhpcy5nZXRCYXNlRmFjdG9yKCk7XG4gICAgY29uc3QgYmlnTnVtYmVyID0gbmV3IEJpZ051bWJlcihiYXNlVW5pdHMpLmRpdmlkZWRCeShkaXZpZGVuZCk7XG4gICAgLy8gc2V0IHRoZSBmb3JtYXQgc28gY29tbWFzIGFyZW4ndCBhZGRlZCB0byBsYXJnZSBjb2luIGFtb3VudHNcbiAgICByZXR1cm4gYmlnTnVtYmVyLnRvRm9ybWF0KHRoaXMuZGVjaW1hbFBsYWNlcywgbnVsbCBhcyBhbnksIHsgZ3JvdXBTZXBhcmF0b3I6ICcnLCBkZWNpbWFsU2VwYXJhdG9yOiAnLicgfSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgYW5kIHJldHVybiBhZGRyZXNzIHdpdGggYXBwZW5kZWQgbWVtbyBpZFxuICAgKlxuICAgKiBAcGFyYW0gYWRkcmVzc1xuICAgKiBAcGFyYW0gbWVtb0lkXG4gICAqL1xuICBub3JtYWxpemVBZGRyZXNzKHsgYWRkcmVzcywgbWVtb0lkIH06IEFkZHJlc3NEZXRhaWxzKTogc3RyaW5nIHtcbiAgICBpZiAobWVtb0lkICYmIHRoaXMuaXNWYWxpZE1lbW9JZChtZW1vSWQpKSB7XG4gICAgICByZXR1cm4gYCR7YWRkcmVzc30/bWVtb0lkPSR7bWVtb0lkfWA7XG4gICAgfVxuICAgIHJldHVybiBhZGRyZXNzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBpbnB1dCBpcyB2YWxpZCBwdWJsaWMga2V5IGZvciB0aGUgY29pblxuICAgKlxuICAgKiBAcGFyYW0gYWRkcmVzcyAtIHRoZSBhZGRyZXNzIHRvIGJlIGNoZWNrZWRcbiAgICovXG4gIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhZGRyZXNzRGV0YWlscyA9IHRoaXMuZ2V0QWRkcmVzc0RldGFpbHMoYWRkcmVzcyk7XG4gICAgICByZXR1cm4gYWRkcmVzcyA9PT0gdGhpcy5ub3JtYWxpemVBZGRyZXNzKGFkZHJlc3NEZXRhaWxzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBhZGRyZXNzIC0gdGhlIGFkZHJlc3MgdG8gdmVyaWZ5XG4gICAqIEBwYXJhbSByb290QWRkcmVzcyAtIHRoZSB3YWxsZXQncyByb290IGFkZHJlc3NcbiAgICogQHJldHVybiB0cnVlIGlmZiBhZGRyZXNzIGlzIGEgd2FsbGV0IGFkZHJlc3MgKGJhc2VkIG9uIHJvb3RBZGRyZXNzKVxuICAgKi9cbiAgYXN5bmMgaXNXYWxsZXRBZGRyZXNzKHsgYWRkcmVzcywgcm9vdEFkZHJlc3MgfTogVmVyaWZ5QWRkcmVzc09wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXJvb3RBZGRyZXNzIHx8ICFfLmlzU3RyaW5nKHJvb3RBZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHN0cmluZyByb290QWRkcmVzcycpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoYGludmFsaWQgYWRkcmVzczogJHthZGRyZXNzfWApO1xuICAgIH1cblxuICAgIGNvbnN0IGFkZHJlc3NEZXRhaWxzID0gdGhpcy5nZXRBZGRyZXNzRGV0YWlscyhhZGRyZXNzKTtcbiAgICBjb25zdCByb290QWRkcmVzc0RldGFpbHMgPSB0aGlzLmdldEFkZHJlc3NEZXRhaWxzKHJvb3RBZGRyZXNzKTtcblxuICAgIGlmICghYWRkcmVzc0RldGFpbHMgfHwgIXJvb3RBZGRyZXNzRGV0YWlscykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChhZGRyZXNzRGV0YWlscy5hZGRyZXNzICE9PSByb290QWRkcmVzc0RldGFpbHMuYWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRBZGRyZXNzRXJyb3IoXG4gICAgICAgIGBhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogJHthZGRyZXNzRGV0YWlscy5hZGRyZXNzfSB2cyAke3Jvb3RBZGRyZXNzRGV0YWlscy5hZGRyZXNzfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQXNzZW1ibGUga2V5Y2hhaW4gYW5kIGhhbGYtc2lnbiBwcmVidWlsdCB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbXMudHhQcmVidWlsZCB7T2JqZWN0fSBwcmVidWlsZCBvYmplY3QgcmV0dXJuZWQgYnkgcGxhdGZvcm1cbiAgICogQHBhcmFtIHBhcmFtcy5wcnYge1N0cmluZ30gdXNlciBwcnZcbiAgICogQHJldHVybnMge1Byb21pc2U8RW9zU2lnbmVkVHJhbnNhY3Rpb24+fVxuICAgKi9cbiAgYXN5bmMgc2lnblRyYW5zYWN0aW9uKHBhcmFtczogRW9zU2lnblRyYW5zYWN0aW9uUGFyYW1zKTogUHJvbWlzZTxFb3NTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHBydjogc3RyaW5nID0gcGFyYW1zLnBydjtcbiAgICBjb25zdCB0eEhleDogc3RyaW5nID0gcGFyYW1zLnR4UHJlYnVpbGQudHhIZXg7XG4gICAgY29uc3QgdHJhbnNhY3Rpb246IEVvc1R4ID0gcGFyYW1zLnR4UHJlYnVpbGQudHJhbnNhY3Rpb247XG5cbiAgICBjb25zdCBzaWduQnVmZmVyOiBCdWZmZXIgPSBCdWZmZXIuZnJvbSh0eEhleCwgJ2hleCcpO1xuICAgIGNvbnN0IHByaXZhdGVLZXlCdWZmZXIgPSBiaXAzMi5mcm9tQmFzZTU4KHBydikucHJpdmF0ZUtleTtcbiAgICBpZiAoIXByaXZhdGVLZXlCdWZmZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbm8gcHJpdmF0ZUtleScpO1xuICAgIH1cbiAgICBjb25zdCBzaWduYXR1cmU6IHN0cmluZyA9IGVjYy5TaWduYXR1cmUuc2lnbihzaWduQnVmZmVyLCBwcml2YXRlS2V5QnVmZmVyKS50b1N0cmluZygpO1xuXG4gICAgdHJhbnNhY3Rpb24uc2lnbmF0dXJlcy5wdXNoKHNpZ25hdHVyZSk7XG5cbiAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgIHRyYW5zYWN0aW9uLFxuICAgICAgdHhIZXgsXG4gICAgICByZWNpcGllbnRzOiBwYXJhbXMudHhQcmVidWlsZC5yZWNpcGllbnRzLFxuICAgICAgaGVhZGVyczogcGFyYW1zLnR4UHJlYnVpbGQuaGVhZGVycyxcbiAgICAgIHR4aWQ6IHBhcmFtcy50eFByZWJ1aWxkLnR4aWQsXG4gICAgfTtcbiAgICByZXR1cm4geyBoYWxmU2lnbmVkOiB0eFBhcmFtcyB9O1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVN0YWtlQWN0aW9uRGF0YShzdGFrZUFjdGlvbkRhdGE6IFN0YWtlQWN0aW9uRGF0YSk6IGFueSB7XG4gICAgaWYgKHN0YWtlQWN0aW9uRGF0YS5mcm9tICE9PSBzdGFrZUFjdGlvbkRhdGEucmVjZWl2ZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgc3Rha2VyICgke3N0YWtlQWN0aW9uRGF0YS5mcm9tfSkgYW5kIHJlY2VpdmVyICgke3N0YWtlQWN0aW9uRGF0YS5yZWNlaXZlcn0pIG11c3QgYmUgdGhlIHNhbWVgKTtcbiAgICB9XG5cbiAgICBpZiAoc3Rha2VBY3Rpb25EYXRhLnRyYW5zZmVyICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCB0cmFuc2ZlciBmdW5kcyBhcyBwYXJ0IG9mIGRlbGVnYXRlYncgYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgLy8gc3Rha2VfY3B1X3F1YW50aXR5IGlzIHVzZWQgYXMgdGhlIGFtb3VudCBiZWNhdXNlIHRoZSBCaXRHbyBwbGF0Zm9ybSBvbmx5IHN0YWtlcyBjcHUgZm9yIHZvdGluZyB0cmFuc2FjdGlvbnNcbiAgICByZXR1cm4ge1xuICAgICAgYWRkcmVzczogc3Rha2VBY3Rpb25EYXRhLmZyb20sXG4gICAgICBhbW91bnQ6IHRoaXMuYmlnVW5pdHNUb0Jhc2VVbml0cyhzdGFrZUFjdGlvbkRhdGEuc3Rha2VfY3B1X3F1YW50aXR5LnNwbGl0KCcgJylbMF0pLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlVW5zdGFrZUFjdGlvbkRhdGEodW5zdGFrZUFjdGlvbkRhdGE6IFVuc3Rha2VBY3Rpb25EYXRhKTogYW55IHtcbiAgICBpZiAodW5zdGFrZUFjdGlvbkRhdGEuZnJvbSAhPT0gdW5zdGFrZUFjdGlvbkRhdGEucmVjZWl2ZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHVuc3Rha2VyICgke3Vuc3Rha2VBY3Rpb25EYXRhLmZyb219KSBhbmQgcmVjZWl2ZXIgKCR7dW5zdGFrZUFjdGlvbkRhdGEucmVjZWl2ZXJ9KSBtdXN0IGJlIHRoZSBzYW1lYFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgY3B1QW1vdW50ID0gbmV3IEJpZ051bWJlcih1bnN0YWtlQWN0aW9uRGF0YS51bnN0YWtlX2NwdV9xdWFudGl0eS5zcGxpdCgnICcpWzBdKTtcbiAgICBjb25zdCBuZXRBbW91bnQgPSBuZXcgQmlnTnVtYmVyKHVuc3Rha2VBY3Rpb25EYXRhLnVuc3Rha2VfbmV0X3F1YW50aXR5LnNwbGl0KCcgJylbMF0pO1xuICAgIGNvbnN0IHRvdGFsQW1vdW50ID0gY3B1QW1vdW50LnBsdXMobmV0QW1vdW50KS50b051bWJlcigpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFkZHJlc3M6IHVuc3Rha2VBY3Rpb25EYXRhLnJlY2VpdmVyLFxuICAgICAgYW1vdW50OiB0aGlzLmJpZ1VuaXRzVG9CYXNlVW5pdHModG90YWxBbW91bnQpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZVZvdGVBY3Rpb25EYXRhKHZvdGVBY3Rpb25EYXRhOiBWb3RlQWN0aW9uRGF0YSkge1xuICAgIGNvbnN0IHByb3h5SXNFbXB0eSA9IF8uaXNFbXB0eSh2b3RlQWN0aW9uRGF0YS5wcm94eSk7XG4gICAgY29uc3QgcHJvZHVjZXJzSXNFbXB0eSA9IF8uaXNFbXB0eSh2b3RlQWN0aW9uRGF0YS5wcm9kdWNlcnMpO1xuICAgIGlmICgocHJveHlJc0VtcHR5ICYmIHByb2R1Y2Vyc0lzRW1wdHkpIHx8ICghcHJveHlJc0VtcHR5ICYmICFwcm9kdWNlcnNJc0VtcHR5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd2b3RpbmcgdHJhbnNhY3Rpb25zIG11c3Qgc3BlY2lmeSBlaXRoZXIgcHJvZHVjZXJzIG9yIHByb3h5IHRvIHZvdGUgZm9yJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFkZHJlc3M6IHZvdGVBY3Rpb25EYXRhLnZvdGVyLFxuICAgICAgcHJveHk6IHZvdGVBY3Rpb25EYXRhLnByb3h5LFxuICAgICAgcHJvZHVjZXJzOiB2b3RlQWN0aW9uRGF0YS5wcm9kdWNlcnMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNyZWF0ZVRyYW5zYWN0aW9uSWRIZXgoc2VyaWFsaXplZFRyYW5zYWN0aW9uQnVmZmVyOiBCdWZmZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoc2VyaWFsaXplZFRyYW5zYWN0aW9uQnVmZmVyKS5kaWdlc3QoKS50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIGhlYWRlcnNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZGVzZXJpYWxpemVUcmFuc2FjdGlvbih7XG4gICAgdHJhbnNhY3Rpb24sXG4gICAgaGVhZGVycyxcbiAgfTogRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8RGVzZXJpYWxpemVkRW9zVHJhbnNhY3Rpb24+IHtcbiAgICAvLyBjcmVhdGUgYW4gZW9zanMgQVBJIGNsaWVudFxuICAgIGNvbnN0IGFwaSA9IG5ldyBBcGkoe1xuICAgICAgYWJpUHJvdmlkZXI6IG5ldyBPZmZsaW5lQWJpUHJvdmlkZXIoKSxcbiAgICAgIHJwYzogbmV3IE5vb3BKc29uUnBjKCksXG4gICAgICBzaWduYXR1cmVQcm92aWRlcjogbmV3IE5vb3BTaWduYXR1cmVQcm92aWRlcigpLFxuICAgICAgY2hhaW5JZDogdGhpcy5nZXRDaGFpbklkKCksXG4gICAgICAvLyBVc2UgYSBjdXN0b20gVGV4dERlY29kZXIgYXMgdGhlIGdsb2JhbCBUZXh0RGVjb2RlciBsZWFkcyB0byBjcmFzaGVzIGluIE9WQyAvIEVsZWN0cm9uLlxuICAgICAgdGV4dERlY29kZXI6IG5ldyBTdHJpbmdUZXh0RGVjb2RlcigpLFxuICAgICAgdGV4dEVuY29kZXI6IG5ldyBUZXh0RW5jb2RlcigpLFxuICAgIH0pO1xuXG4gICAgLy8gdHlwZSBndWFyZHNcbiAgICBjb25zdCBpc1RyYW5zZmVyQWN0aW9uRGF0YSA9ICh0eEFjdGlvbkRhdGE6IGFueSk6IHR4QWN0aW9uRGF0YSBpcyBUcmFuc2ZlckFjdGlvbkRhdGEgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHR4QWN0aW9uRGF0YSBhcyBUcmFuc2ZlckFjdGlvbkRhdGEpLmZyb20gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAodHhBY3Rpb25EYXRhIGFzIFRyYW5zZmVyQWN0aW9uRGF0YSkudG8gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAodHhBY3Rpb25EYXRhIGFzIFRyYW5zZmVyQWN0aW9uRGF0YSkucXVhbnRpdHkgIT09IHVuZGVmaW5lZFxuICAgICAgKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzU3Rha2VBY3Rpb25EYXRhID0gKHR4QWN0aW9uRGF0YTogYW55KTogdHhBY3Rpb25EYXRhIGlzIFN0YWtlQWN0aW9uRGF0YSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAodHhBY3Rpb25EYXRhIGFzIFN0YWtlQWN0aW9uRGF0YSkuZnJvbSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICh0eEFjdGlvbkRhdGEgYXMgU3Rha2VBY3Rpb25EYXRhKS5yZWNlaXZlciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICh0eEFjdGlvbkRhdGEgYXMgU3Rha2VBY3Rpb25EYXRhKS50cmFuc2ZlciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICh0eEFjdGlvbkRhdGEgYXMgU3Rha2VBY3Rpb25EYXRhKS5zdGFrZV9jcHVfcXVhbnRpdHkgIT09IHVuZGVmaW5lZFxuICAgICAgKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzVW5zdGFrZUFjdGlvbkRhdGEgPSAodHhBY3Rpb25EYXRhOiBhbnkpOiB0eEFjdGlvbkRhdGEgaXMgVW5zdGFrZUFjdGlvbkRhdGEgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHR4QWN0aW9uRGF0YSBhcyBVbnN0YWtlQWN0aW9uRGF0YSkuZnJvbSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICh0eEFjdGlvbkRhdGEgYXMgVW5zdGFrZUFjdGlvbkRhdGEpLnJlY2VpdmVyICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgKHR4QWN0aW9uRGF0YSBhcyBVbnN0YWtlQWN0aW9uRGF0YSkudW5zdGFrZV9jcHVfcXVhbnRpdHkgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAodHhBY3Rpb25EYXRhIGFzIFVuc3Rha2VBY3Rpb25EYXRhKS51bnN0YWtlX25ldF9xdWFudGl0eSAhPT0gdW5kZWZpbmVkXG4gICAgICApO1xuICAgIH07XG4gICAgY29uc3QgaXNWb3RlQWN0aW9uRGF0YSA9ICh0eEFjdGlvbkRhdGE6IGFueSk6IHR4QWN0aW9uRGF0YSBpcyBWb3RlQWN0aW9uRGF0YSA9PiB7XG4gICAgICByZXR1cm4gKHR4QWN0aW9uRGF0YSBhcyBWb3RlQWN0aW9uRGF0YSkudm90ZXIgIT09IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIGNvbnN0IGlzUmVmdW5kQWN0aW9uRGF0YSA9ICh0eEFjdGlvbkRhdGE6IGFueSk6IHR4QWN0aW9uRGF0YSBpcyBSZWZ1bmRBY3Rpb25EYXRhID0+IHtcbiAgICAgIHJldHVybiAodHhBY3Rpb25EYXRhIGFzIFJlZnVuZEFjdGlvbkRhdGEpLm93bmVyICE9PSB1bmRlZmluZWQ7XG4gICAgfTtcblxuICAgIC8vIGRlc2VyaWFsaXplVHJhbnNhY3Rpb25cbiAgICBjb25zdCBzZXJpYWxpemVkVHhCdWZmZXIgPSBCdWZmZXIuZnJvbSh0cmFuc2FjdGlvbi5wYWNrZWRfdHJ4LCAnaGV4Jyk7XG4gICAgY29uc3QgZGVzZXJpYWxpemVkVHhKc29uRnJvbVBhY2tlZFRyeCA9IGF3YWl0IGFwaS5kZXNlcmlhbGl6ZVRyYW5zYWN0aW9uV2l0aEFjdGlvbnMoc2VyaWFsaXplZFR4QnVmZmVyKTtcblxuICAgIGlmICghZGVzZXJpYWxpemVkVHhKc29uRnJvbVBhY2tlZFRyeCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcHJvY2VzcyB0cmFuc2FjdGlvbiBmcm9tIHR4SGV4Jyk7XG4gICAgfVxuICAgIGNvbnN0IHR4OiBEZXNlcmlhbGl6ZWRFb3NUcmFuc2FjdGlvbiA9IGRlc2VyaWFsaXplZFR4SnNvbkZyb21QYWNrZWRUcng7XG5cbiAgICAvLyB2YWxpZGF0ZSBjb250ZXh0IGZyZWUgYWN0aW9uc1xuICAgIGlmICh0eC5jb250ZXh0X2ZyZWVfYWN0aW9ucy5sZW5ndGggIT09IDApIHtcbiAgICAgIGlmICh0eC5jb250ZXh0X2ZyZWVfYWN0aW9ucy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdudW1iZXIgb2YgY29udGV4dCBmcmVlIGFjdGlvbnMgbXVzdCBiZSAxJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgIV8uaXNFcXVhbChfLnBpY2sodHguY29udGV4dF9mcmVlX2FjdGlvbnNbMF0sIFsnYWNjb3VudCcsICdhdXRob3JpemF0aW9uJywgJ25hbWUnXSksIHtcbiAgICAgICAgICBhY2NvdW50OiAnZW9zaW8ubnVsbCcsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogW10sXG4gICAgICAgICAgbmFtZTogJ25vbmNlJyxcbiAgICAgICAgfSkgfHxcbiAgICAgICAgXy5pc0VtcHR5KHR4LmNvbnRleHRfZnJlZV9hY3Rpb25zWzBdLmRhdGEpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGUgY29udGV4dCBmcmVlIGFjdGlvbiBpcyBpbnZhbGlkJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT25seSBzdXBwb3J0IHRyYW5zYWN0aW9ucyB3aXRoIG9uZSAodHJhbnNmZXIgfCB2b3RlcHJvZHVjZXIpIG9yIHR3byAoZGVsZWdhdGVidyAmIHZvdGVwcm9kdWNlcikgYWN0aW9uc1xuICAgIGlmICh0eC5hY3Rpb25zLmxlbmd0aCAhPT0gMSAmJiB0eC5hY3Rpb25zLmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIG51bWJlciBvZiBhY3Rpb25zOiAke3R4LmFjdGlvbnMubGVuZ3RofWApO1xuICAgIH1cblxuICAgIGNvbnN0IHR4QWN0aW9uID0gdHguYWN0aW9uc1swXTtcbiAgICBpZiAoIXR4QWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgdHJhbnNhY3Rpb24gYWN0aW9uJyk7XG4gICAgfVxuICAgIGlmICh0eEFjdGlvbi5uYW1lID09PSAndHJhbnNmZXInKSB7XG4gICAgICAvLyBUcmFuc2ZlcnMgc2hvdWxkIG9ubHkgaGF2ZSAxIGFjdGlvblxuICAgICAgaWYgKHR4LmFjdGlvbnMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdHJhbnNmZXJzIHNob3VsZCBvbmx5IGhhdmUgMSBhY3Rpb246ICR7dHguYWN0aW9ucy5sZW5ndGh9IGdpdmVuYCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNUcmFuc2ZlckFjdGlvbkRhdGEodHhBY3Rpb24uZGF0YSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG9yIGluY29tcGxldGUgdHJhbnNmZXIgYWN0aW9uIGRhdGEnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRyYW5zZmVyQWN0aW9uRGF0YSA9IHR4QWN0aW9uLmRhdGE7XG5cbiAgICAgIHR4LmFkZHJlc3MgPSB0cmFuc2ZlckFjdGlvbkRhdGEudG87XG4gICAgICB0eC5hbW91bnQgPSB0aGlzLmJpZ1VuaXRzVG9CYXNlVW5pdHModHJhbnNmZXJBY3Rpb25EYXRhLnF1YW50aXR5LnNwbGl0KCcgJylbMF0pO1xuICAgICAgdHgubWVtbyA9IHRyYW5zZmVyQWN0aW9uRGF0YS5tZW1vO1xuICAgIH0gZWxzZSBpZiAodHhBY3Rpb24ubmFtZSA9PT0gJ2RlbGVnYXRlYncnKSB7XG4gICAgICAvLyBUaGUgZGVsZWdhdGVidyBhY3Rpb24gc2hvdWxkIG9ubHkgYmUgcGFydCBvZiB2b3RpbmcgdHJhbnNhY3Rpb25zXG4gICAgICBpZiAodHguYWN0aW9ucy5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBzdGFraW5nIHRyYW5zYWN0aW9ucyB0aGF0IGluY2x1ZGUgdGhlIGRlbGVnYXRlYncgYWN0aW9uIHNob3VsZCBoYXZlIDIgYWN0aW9uczogJHt0eC5hY3Rpb25zLmxlbmd0aH0gZ2l2ZW5gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHR4QWN0aW9uMiA9IHR4LmFjdGlvbnNbMV07XG4gICAgICBpZiAodHhBY3Rpb24yLm5hbWUgIT09ICd2b3RlcHJvZHVjZXInKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBzdGFraW5nIHRyYW5zYWN0aW9uIGFjdGlvbjogJHt0eEFjdGlvbjIubmFtZX0sIGV4cGVjdGluZzogdm90ZXByb2R1Y2VyYCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNTdGFrZUFjdGlvbkRhdGEodHhBY3Rpb24uZGF0YSkgfHwgIWlzVm90ZUFjdGlvbkRhdGEodHhBY3Rpb24yLmRhdGEpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBvciBpbmNvbXBsZXRlIHN0YWtlIG9yIHZvdGUgYWN0aW9uIGRhdGEnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0YWtlQWN0aW9uRGF0YSA9IHR4QWN0aW9uLmRhdGE7XG4gICAgICBjb25zdCB2b3RlQWN0aW9uRGF0YSA9IHR4QWN0aW9uMi5kYXRhO1xuXG4gICAgICBjb25zdCBkZXNlcmlhbGl6ZWRTdGFrZUFjdGlvbiA9IHRoaXMudmFsaWRhdGVTdGFrZUFjdGlvbkRhdGEoc3Rha2VBY3Rpb25EYXRhKTtcbiAgICAgIGNvbnN0IGRlc2VyaWFsaXplZFZvdGVBY3Rpb24gPSBFb3MudmFsaWRhdGVWb3RlQWN0aW9uRGF0YSh2b3RlQWN0aW9uRGF0YSk7XG4gICAgICBpZiAoZGVzZXJpYWxpemVkU3Rha2VBY3Rpb24uYWRkcmVzcyAhPT0gZGVzZXJpYWxpemVkVm90ZUFjdGlvbi5hZGRyZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgc3Rha2VyICgke2Rlc2VyaWFsaXplZFN0YWtlQWN0aW9uLmFkZHJlc3N9KSBhbmQgdm90ZXIgKCR7ZGVzZXJpYWxpemVkVm90ZUFjdGlvbi5hZGRyZXNzfSkgbXVzdCBiZSB0aGUgc2FtZWBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdHguYW1vdW50ID0gZGVzZXJpYWxpemVkU3Rha2VBY3Rpb24uYW1vdW50O1xuICAgICAgdHgucHJveHkgPSBkZXNlcmlhbGl6ZWRWb3RlQWN0aW9uLnByb3h5O1xuICAgICAgdHgucHJvZHVjZXJzID0gZGVzZXJpYWxpemVkVm90ZUFjdGlvbi5wcm9kdWNlcnM7XG4gICAgfSBlbHNlIGlmICh0eEFjdGlvbi5uYW1lID09PSAndm90ZXByb2R1Y2VyJykge1xuICAgICAgaWYgKHR4LmFjdGlvbnMubGVuZ3RoID4gMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZvdGluZyB0cmFuc2FjdGlvbnMgc2hvdWxkIG5vdCBoYXZlIG1vcmUgdGhhbiAyIGFjdGlvbnMnKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGRlc2VyaWFsaXplZFN0YWtlQWN0aW9uO1xuICAgICAgaWYgKHR4LmFjdGlvbnMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGNvbnN0IHR4QWN0aW9uMiA9IHR4LmFjdGlvbnNbMV07XG4gICAgICAgIGlmICh0eEFjdGlvbjIubmFtZSAhPT0gJ2RlbGVnYXRlYncnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHN0YWtpbmcgdHJhbnNhY3Rpb24gYWN0aW9uOiAke3R4QWN0aW9uMi5uYW1lfSwgZXhwZWN0aW5nOiBkZWxlZ2F0ZWJ3YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1N0YWtlQWN0aW9uRGF0YSh0eEFjdGlvbi5kYXRhKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBvciBpbmNvbXBsZXRlIHN0YWtlIGFjdGlvbiBkYXRhJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3Rha2VBY3Rpb25EYXRhID0gdHhBY3Rpb24uZGF0YTtcbiAgICAgICAgZGVzZXJpYWxpemVkU3Rha2VBY3Rpb24gPSB0aGlzLnZhbGlkYXRlU3Rha2VBY3Rpb25EYXRhKHN0YWtlQWN0aW9uRGF0YSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNWb3RlQWN0aW9uRGF0YSh0eEFjdGlvbi5kYXRhKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgb3IgaW5jb21wbGV0ZSB2b3RlIGFjdGlvbiBkYXRhJyk7XG4gICAgICB9XG4gICAgICBjb25zdCB2b3RlQWN0aW9uRGF0YSA9IHR4QWN0aW9uLmRhdGE7XG4gICAgICBjb25zdCBkZXNlcmlhbGl6ZWRWb3RlQWN0aW9uID0gRW9zLnZhbGlkYXRlVm90ZUFjdGlvbkRhdGEodm90ZUFjdGlvbkRhdGEpO1xuXG4gICAgICBpZiAoISFkZXNlcmlhbGl6ZWRTdGFrZUFjdGlvbiAmJiBkZXNlcmlhbGl6ZWRTdGFrZUFjdGlvbi5hZGRyZXNzICE9PSBkZXNlcmlhbGl6ZWRWb3RlQWN0aW9uLmFkZHJlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBzdGFrZXIgKCR7ZGVzZXJpYWxpemVkU3Rha2VBY3Rpb24uYWRkcmVzc30pIGFuZCB2b3RlciAoJHtkZXNlcmlhbGl6ZWRWb3RlQWN0aW9uLmFkZHJlc3N9KSBtdXN0IGJlIHRoZSBzYW1lYFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0eC5hbW91bnQgPSAhIWRlc2VyaWFsaXplZFN0YWtlQWN0aW9uID8gZGVzZXJpYWxpemVkU3Rha2VBY3Rpb24uYW1vdW50IDogJzAnO1xuICAgICAgdHgucHJveHkgPSBkZXNlcmlhbGl6ZWRWb3RlQWN0aW9uLnByb3h5O1xuICAgICAgdHgucHJvZHVjZXJzID0gZGVzZXJpYWxpemVkVm90ZUFjdGlvbi5wcm9kdWNlcnM7XG4gICAgfSBlbHNlIGlmICh0eEFjdGlvbi5uYW1lID09PSAndW5kZWxlZ2F0ZWJ3Jykge1xuICAgICAgaWYgKHR4LmFjdGlvbnMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdGFrZSBzaG91bGQgb25seSBoYXZlIDEgYWN0aW9uOiAke3R4LmFjdGlvbnMubGVuZ3RofSBnaXZlbmApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzVW5zdGFrZUFjdGlvbkRhdGEodHhBY3Rpb24uZGF0YSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG9yIGluY29tcGxldGUgdW5zdGFrZSBhY3Rpb24gZGF0YScpO1xuICAgICAgfVxuICAgICAgY29uc3QgdW5zdGFrZUFjdGlvbkRhdGEgPSB0eEFjdGlvbi5kYXRhO1xuICAgICAgY29uc3QgZGVzZXJpYWxpemVkVW5zdGFrZUFjdGlvbiA9IHRoaXMudmFsaWRhdGVVbnN0YWtlQWN0aW9uRGF0YSh1bnN0YWtlQWN0aW9uRGF0YSk7XG5cbiAgICAgIHR4LmFtb3VudCA9IGRlc2VyaWFsaXplZFVuc3Rha2VBY3Rpb24uYW1vdW50O1xuICAgICAgdHguYWRkcmVzcyA9IGRlc2VyaWFsaXplZFVuc3Rha2VBY3Rpb24uYWRkcmVzcztcbiAgICB9IGVsc2UgaWYgKHR4QWN0aW9uLm5hbWUgPT09ICdyZWZ1bmQnKSB7XG4gICAgICBpZiAodHguYWN0aW9ucy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGByZWZ1bmQgc2hvdWxkIG9ubHkgaGF2ZSAxIGFjdGlvbjogJHt0eC5hY3Rpb25zLmxlbmd0aH0gZ2l2ZW5gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc1JlZnVuZEFjdGlvbkRhdGEodHhBY3Rpb24uZGF0YSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG9yIGluY29tcGxldGUgcmVmdW5kIGFjdGlvbiBkYXRhJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlZnVuZEFjdGlvbkRhdGEgPSB0eEFjdGlvbi5kYXRhO1xuICAgICAgdHguYWRkcmVzcyA9IHJlZnVuZEFjdGlvbkRhdGEub3duZXI7XG4gICAgICB0eC5hbW91bnQgPSAnMCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBhY3Rpb246ICR7dHhBY3Rpb24ubmFtZX1gKTtcbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIHR4IGlkIGlmIHR4IGhlYWRlcnMgd2VyZSBwcm92aWRlZFxuICAgIGlmIChoZWFkZXJzKSB7XG4gICAgICBsZXQgcmVidWlsdFRyYW5zYWN0aW9uO1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gcmVtb3ZlIFogYXQgdGhlIGVuZFxuICAgICAgICBpZiAoKGhlYWRlcnMuZXhwaXJhdGlvbiBhcyBzdHJpbmcpLmVuZHNXaXRoKCdaJykpIHtcbiAgICAgICAgICBoZWFkZXJzLmV4cGlyYXRpb24gPSAoaGVhZGVycy5leHBpcmF0aW9uIGFzIHN0cmluZykuc2xpY2UoMCwgLTEpO1xuICAgICAgICB9XG4gICAgICAgIHJlYnVpbHRUcmFuc2FjdGlvbiA9IGF3YWl0IGFwaS50cmFuc2FjdCh7IC4uLnR4LCAuLi5oZWFkZXJzIH0sIHsgc2lnbjogZmFsc2UsIGJyb2FkY2FzdDogZmFsc2UgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnQ291bGQgbm90IGJ1aWxkIHRyYW5zYWN0aW9uIHRvIGdldCB0cmFuc2FjdGlvbl9pZC4gUGxlYXNlIGNoZWNrIHRyYW5zYWN0aW9uIG9yIGhlYWRlcnMgZm9ybWF0LidcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdHgudHJhbnNhY3Rpb25faWQgPSBFb3MuY3JlYXRlVHJhbnNhY3Rpb25JZEhleCgocmVidWlsdFRyYW5zYWN0aW9uIGFzIGFueSkuc2VyaWFsaXplZFRyYW5zYWN0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHg7XG4gIH1cblxuICAvKipcbiAgICogRXhwbGFpbi9wYXJzZSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gcGFyYW1zIC0gRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9uc1xuICAgKi9cbiAgYXN5bmMgZXhwbGFpblRyYW5zYWN0aW9uKHBhcmFtczogRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8VHJhbnNhY3Rpb25FeHBsYW5hdGlvbj4ge1xuICAgIGxldCB0cmFuc2FjdGlvbjtcbiAgICB0cnkge1xuICAgICAgdHJhbnNhY3Rpb24gPSBhd2FpdCB0aGlzLmRlc2VyaWFsaXplVHJhbnNhY3Rpb24ocGFyYW1zKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgRU9TIHRyYW5zYWN0aW9uIG9yIGhlYWRlcnM6ICcgKyBlLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZGlzcGxheU9yZGVyOiBbXG4gICAgICAgICdpZCcsXG4gICAgICAgICdvdXRwdXRBbW91bnQnLFxuICAgICAgICAnY2hhbmdlQW1vdW50JyxcbiAgICAgICAgJ291dHB1dHMnLFxuICAgICAgICAnY2hhbmdlT3V0cHV0cycsXG4gICAgICAgICdmZWUnLFxuICAgICAgICAnbWVtbycsXG4gICAgICAgICdwcm94eScsXG4gICAgICAgICdwcm9kdWNlcnMnLFxuICAgICAgXSxcbiAgICAgIGlkOiB0cmFuc2FjdGlvbi50cmFuc2FjdGlvbl9pZCxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgb3V0cHV0QW1vdW50OiB0cmFuc2FjdGlvbi5hbW91bnQsXG4gICAgICBjaGFuZ2VBbW91bnQ6IDAsXG4gICAgICBvdXRwdXRzOiAhIXRyYW5zYWN0aW9uLmFkZHJlc3MgPyBbeyBhZGRyZXNzOiB0cmFuc2FjdGlvbi5hZGRyZXNzLCBhbW91bnQ6IHRyYW5zYWN0aW9uLmFtb3VudCB9XSA6IFtdLFxuICAgICAgZmVlOiB7fSxcbiAgICAgIG1lbW86IHRyYW5zYWN0aW9uLm1lbW8sXG4gICAgICBwcm94eTogdHJhbnNhY3Rpb24ucHJveHksXG4gICAgICBwcm9kdWNlcnM6IHRyYW5zYWN0aW9uLnByb2R1Y2VycyxcbiAgICB9IGFzIGFueTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgaW5pdGlhdGVSZWNvdmVyeShwYXJhbXM6IFJlY292ZXJ5T3B0aW9ucyk6IG5ldmVyIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2RlcHJlY2F0ZWQgbWV0aG9kJyk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBhIHJlcXVlc3QgdG8gb25lIG9mIHRoZSBwdWJsaWMgRU9TIG5vZGVzIGF2YWlsYWJsZVxuICAgKiBAcGFyYW0gcGFyYW1zLmVuZHBvaW50XG4gICAqIEBwYXJhbSBwYXJhbXMucGF5bG9hZFxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGdldERhdGFGcm9tTm9kZShwYXJhbXM6IHtcbiAgICBlbmRwb2ludDogc3RyaW5nO1xuICAgIHBheWxvYWQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfSk6IFByb21pc2U8cmVxdWVzdC5SZXNwb25zZT4ge1xuICAgIGNvbnN0IG5vZGVVcmxzID0gdGhpcy5nZXRQdWJsaWNOb2RlVXJscygpO1xuICAgIGZvciAoY29uc3Qgbm9kZVVybCBvZiBub2RlVXJscykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlcXVlc3QucG9zdChub2RlVXJsICsgcGFyYW1zLmVuZHBvaW50KS5zZW5kKHBhcmFtcy5wYXlsb2FkKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gbGV0J3MgaG9wZSBhbm90aGVyIGNhbGwgc3VjY2VlZHNcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gY2FsbCBlbmRwb2ludDogJHtwYXJhbXMuZW5kcG9pbnR9IGZyb20gbm9kZXM6ICR7Xy5qb2luKG5vZGVVcmxzLCAnLCAnKX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgRU9TIGNoYWluIGluZm8gZnJvbSBhIHB1YmxpYyBub2RlXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0Q2hhaW5JbmZvRnJvbU5vZGUoKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0RGF0YUZyb21Ob2RlKHsgZW5kcG9pbnQ6ICcvdjEvY2hhaW4vZ2V0X2luZm8nIH0pO1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZmV0Y2ggY2hhaW4gaW5mbycpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGF0YSBzcGVjaWZpYyB0byBhbiBhY2NvdW50IGZyb20gYSBwdWJsaWMgbm9kZVxuICAgKiBAcGFyYW0gYWRkcmVzc1xuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGdldEFjY291bnRGcm9tTm9kZSh7IGFkZHJlc3MgfTogeyBhZGRyZXNzOiBzdHJpbmcgfSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldERhdGFGcm9tTm9kZSh7XG4gICAgICBlbmRwb2ludDogJy92MS9jaGFpbi9nZXRfYWNjb3VudCcsXG4gICAgICBwYXlsb2FkOiB7IGFjY291bnRfbmFtZTogYWRkcmVzcyB9LFxuICAgIH0pO1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBY2NvdW50IG5vdCBmb3VuZCcpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYmxvY2sgZGF0YSBmcm9tIGEgcHVibGljIG5vZGUgdXNpbmcgaXRzIGJsb2NrIG51bWJlciBvciBibG9jayBpZFxuICAgKiBAcGFyYW0gYmxvY2tOdW1PcklkXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0QmxvY2tGcm9tTm9kZSh7IGJsb2NrTnVtT3JJZCB9OiB7IGJsb2NrTnVtT3JJZDogc3RyaW5nIH0pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXREYXRhRnJvbU5vZGUoe1xuICAgICAgZW5kcG9pbnQ6ICcvdjEvY2hhaW4vZ2V0X2Jsb2NrJyxcbiAgICAgIHBheWxvYWQ6IHsgYmxvY2tfbnVtX29yX2lkOiBibG9ja051bU9ySWQgfSxcbiAgICB9KTtcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQmxvY2sgbm90IGZvdW5kJyk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBoZWFkZXJzIGZvciBhbiBFT1MgdHggZnJvbSBhIHB1YmxpYyBub2RlXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0VHJhbnNhY3Rpb25IZWFkZXJzRnJvbU5vZGUoKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBjaGFpbkluZm8gPSBhd2FpdCB0aGlzLmdldENoYWluSW5mb0Zyb21Ob2RlKCk7XG4gICAgY29uc3QgaGVhZEJsb2NrSW5mb1Jlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0QmxvY2tGcm9tTm9kZSh7IGJsb2NrTnVtT3JJZDogY2hhaW5JbmZvLmhlYWRfYmxvY2tfbnVtIH0pO1xuICAgIGNvbnN0IGV4cGlyZVNlY29uZHMgPSAyODgwMDsgLy8gbWF4aW11bSB0eCBleHBpcmUgdGltZSBvZiA4aFxuICAgIGNvbnN0IGNoYWluRGF0ZSA9IG5ldyBEYXRlKGNoYWluSW5mby5oZWFkX2Jsb2NrX3RpbWUgKyAnWicpLmdldFRpbWUoKTtcbiAgICBjb25zdCBleHBpcmF0aW9uRGF0ZSA9IG5ldyBEYXRlKGNoYWluRGF0ZSArIGV4cGlyZVNlY29uZHMgKiAxMDAwKTtcblxuICAgIHJldHVybiB7XG4gICAgICBleHBpcmF0aW9uOiBleHBpcmF0aW9uRGF0ZS50b0lTT1N0cmluZygpLFxuICAgICAgcmVmX2Jsb2NrX251bTogY2hhaW5JbmZvLmhlYWRfYmxvY2tfbnVtICYgMHhmZmZmLFxuICAgICAgcmVmX2Jsb2NrX3ByZWZpeDogaGVhZEJsb2NrSW5mb1Jlc3VsdC5yZWZfYmxvY2tfcHJlZml4LFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0VHJhbnNmZXJBY3Rpb24oeyByZWNpcGllbnQsIHNlbmRlciwgYW1vdW50LCBtZW1vIH06IGFueSk6IEVvc1RyYW5zYWN0aW9uQWN0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgYWNjb3VudDogJ2Vvc2lvLnRva2VuJyxcbiAgICAgIG5hbWU6ICd0cmFuc2ZlcicsXG4gICAgICBhdXRob3JpemF0aW9uOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhY3Rvcjogc2VuZGVyLFxuICAgICAgICAgIHBlcm1pc3Npb246ICdhY3RpdmUnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZnJvbTogc2VuZGVyLFxuICAgICAgICB0bzogcmVjaXBpZW50LFxuICAgICAgICBxdWFudGl0eTogYCR7dGhpcy5iYXNlVW5pdHNUb0JpZ1VuaXRzKGFtb3VudCl9IEVPU2AsXG4gICAgICAgIG1lbW86ICFfLmlzTmlsKG1lbW8pID8gbWVtbyA6ICcnLCAvLyBNZW1vIG11c3QgYmUgZGVmaW5lZCwgc2V0IGl0IHRvIGVtcHR5IHN0cmluZyBpZiBpdCBpcyBub3RcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIGEgdHJhbnNhY3Rpb24gd2l0aCBhIGtleVxuICAgKiBAcGFyYW0gc2lnbmFibGVUeFxuICAgKiBAcGFyYW0gc2lnbmluZ0tleVxuICAgKi9cbiAgc2lnblR4KHNpZ25hYmxlVHg6IHN0cmluZywgc2lnbmluZ0tleTogQklQMzJJbnRlcmZhY2UpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNpZ25CdWZmZXIgPSBCdWZmZXIuZnJvbShzaWduYWJsZVR4LCAnaGV4Jyk7XG4gICAgY29uc3QgcHJpdmF0ZUtleUJ1ZmZlciA9IHNpZ25pbmdLZXkucHJpdmF0ZUtleTtcbiAgICByZXR1cm4gZWNjLlNpZ25hdHVyZS5zaWduKHNpZ25CdWZmZXIsIHByaXZhdGVLZXlCdWZmZXIpLnRvU3RyaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgZnVuZHMgcmVjb3ZlcnkgdHJhbnNhY3Rpb24gd2l0aG91dCBCaXRHb1xuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyByZWNvdmVyKHBhcmFtczogUmVjb3ZlcnlPcHRpb25zKTogUHJvbWlzZTxSZWNvdmVyeVRyYW5zYWN0aW9uPiB7XG4gICAgaWYgKCFwYXJhbXMucm9vdEFkZHJlc3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBzdHJpbmcgcm9vdEFkZHJlc3MnKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0tyc1JlY292ZXJ5ID0gZ2V0SXNLcnNSZWNvdmVyeShwYXJhbXMpO1xuICAgIGNvbnN0IGlzVW5zaWduZWRTd2VlcCA9IGdldElzVW5zaWduZWRTd2VlcChwYXJhbXMpO1xuXG4gICAgY29uc3QgeyBrcnNQcm92aWRlciB9ID0gcGFyYW1zO1xuICAgIGlmIChnZXRJc0tyc1JlY292ZXJ5KHBhcmFtcykpIHtcbiAgICAgIGNoZWNrS3JzUHJvdmlkZXIodGhpcywga3JzUHJvdmlkZXIpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzcyhwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkZXN0aW5hdGlvbiBhZGRyZXNzIScpO1xuICAgIH1cblxuICAgIGNvbnN0IGtleXMgPSBnZXRCaXAzMktleXModGhpcy5iaXRnbywgcGFyYW1zLCB7IHJlcXVpcmVCaXRHb1hwdWI6IGZhbHNlIH0pO1xuXG4gICAgY29uc3Qgcm9vdEFkZHJlc3NEZXRhaWxzID0gdGhpcy5nZXRBZGRyZXNzRGV0YWlscyhwYXJhbXMucm9vdEFkZHJlc3MpO1xuICAgIGNvbnN0IGFjY291bnQgPSBhd2FpdCB0aGlzLmdldEFjY291bnRGcm9tTm9kZSh7IGFkZHJlc3M6IHJvb3RBZGRyZXNzRGV0YWlscy5hZGRyZXNzIH0pO1xuXG4gICAgaWYgKCFhY2NvdW50LmNvcmVfbGlxdWlkX2JhbGFuY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgYW55IGJhbGFuY2UgdG8gcmVjb3ZlcnkgZm9yICcgKyBwYXJhbXMucm9vdEFkZHJlc3MpO1xuICAgIH1cblxuICAgIGlmICghYWNjb3VudC5wZXJtaXNzaW9ucykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBwZXJtaXNzaW9ucyBmb3IgJyArIHBhcmFtcy5yb290QWRkcmVzcyk7XG4gICAgfVxuICAgIGNvbnN0IHVzZXJQdWIgPSBlY2MuUHVibGljS2V5LmZyb21CdWZmZXIoa2V5c1swXS5wdWJsaWNLZXkpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgYmFja3VwUHViID0gZWNjLlB1YmxpY0tleS5mcm9tQnVmZmVyKGtleXNbMV0ucHVibGljS2V5KS50b1N0cmluZygpO1xuXG4gICAgY29uc3QgYWN0aXZlUGVybWlzc2lvbiA9IF8uZmluZChhY2NvdW50LnBlcm1pc3Npb25zLCB7IHBlcm1fbmFtZTogJ2FjdGl2ZScgfSk7XG4gICAgY29uc3QgcmVxdWlyZWRBdXRoID0gXy5nZXQoYWN0aXZlUGVybWlzc2lvbiwgJ3JlcXVpcmVkX2F1dGgnKTtcbiAgICBpZiAoIXJlcXVpcmVkQXV0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBhdXRoIGZvciBhY3RpdmUgcGVybWlzc2lvbiBub3QgZm91bmQgaW4gYWNjb3VudCcpO1xuICAgIH1cbiAgICBpZiAocmVxdWlyZWRBdXRoLnRocmVzaG9sZCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIGFjdGl2ZSBwZXJtaXNzaW9uIHRocmVzaG9sZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGZvdW5kUHVicyA9IHt9O1xuICAgIGNvbnN0IHJlcXVpcmVkQXV0aEtleXMgPSByZXF1aXJlZEF1dGgua2V5cztcbiAgICBmb3IgKGNvbnN0IHNpZ25lciBvZiByZXF1aXJlZEF1dGhLZXlzKSB7XG4gICAgICBpZiAoc2lnbmVyLndlaWdodCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc2lnbmVyIHdlaWdodCcpO1xuICAgICAgfVxuICAgICAgLy8gaWYgaXQncyBhIGR1cGUgb2YgYSBwdWIgd2UgYWxyZWFkeSBrbm93LCBibG9ja1xuICAgICAgaWYgKGZvdW5kUHVic1tzaWduZXIua2V5XSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2R1cGxpY2F0ZSBzaWduZXIga2V5Jyk7XG4gICAgICB9XG4gICAgICBmb3VuZFB1YnNbc2lnbmVyLmtleV0gPSAoZm91bmRQdWJzW3NpZ25lci5rZXldIHx8IDApICsgMTtcbiAgICB9XG4gICAgaWYgKGZvdW5kUHVic1t1c2VyUHViXSAhPT0gMSB8fCBmb3VuZFB1YnNbYmFja3VwUHViXSAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIGluY2lkZW5jZSBmcmVxdWVuY3kgb2YgdXNlciBzaWduZXIga2V5Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgYWNjb3VudEJhbGFuY2UgPSBhY2NvdW50LmNvcmVfbGlxdWlkX2JhbGFuY2Uuc3BsaXQoJyAnKVswXTtcbiAgICBjb25zdCByZWNvdmVyeUFtb3VudCA9IHRoaXMuYmlnVW5pdHNUb0Jhc2VVbml0cyhuZXcgQmlnTnVtYmVyKGFjY291bnRCYWxhbmNlKS50b0ZpeGVkKCkpO1xuXG4gICAgY29uc3QgZGVzdGluYXRpb25BZGRyZXNzID0gcGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb247XG4gICAgY29uc3QgZGVzdGluYXRpb25BZGRyZXNzRGV0YWlscyA9IHRoaXMuZ2V0QWRkcmVzc0RldGFpbHMoZGVzdGluYXRpb25BZGRyZXNzKTtcbiAgICBjb25zdCBkZXN0aW5hdGlvbkFjY291bnQgPSBhd2FpdCB0aGlzLmdldEFjY291bnRGcm9tTm9kZSh7IGFkZHJlc3M6IGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHMuYWRkcmVzcyB9KTtcbiAgICBpZiAoIWRlc3RpbmF0aW9uQWNjb3VudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEZXN0aW5hdGlvbiBhY2NvdW50IG5vdCBmb3VuZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uSGVhZGVycyA9IGF3YWl0IHRoaXMuZ2V0VHJhbnNhY3Rpb25IZWFkZXJzRnJvbU5vZGUoKTtcbiAgICBpZiAoIXRyYW5zYWN0aW9uSGVhZGVycykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZ2V0IHRyYW5zYWN0aW9uIGhlYWRlcnMgZnJvbSBub2RlJyk7XG4gICAgfVxuICAgIGNvbnN0IGhlYWRlcnM6IEVvc1RyYW5zYWN0aW9uSGVhZGVycyA9IHRyYW5zYWN0aW9uSGVhZGVycztcbiAgICBjb25zdCBuYXRpdmVEYXRlID0gbmV3IERhdGUoaGVhZGVycy5leHBpcmF0aW9uIGFzIHN0cmluZyk7XG4gICAgLy8gZHJvcCBtaWxsaXNlY29uZHMgYW5kIHRyYWlsaW5nIFogZnJvbSBleHBpcmF0aW9uXG4gICAgbmF0aXZlRGF0ZS5zZXRNaWxsaXNlY29uZHMoMCk7XG4gICAgY29uc3QgZXhwaXJhdGlvbiA9IG5hdGl2ZURhdGUudG9JU09TdHJpbmcoKTtcbiAgICBpZiAoZXhwaXJhdGlvbi5lbmRzV2l0aCgnWicpKSB7XG4gICAgICBoZWFkZXJzLmV4cGlyYXRpb24gPSBleHBpcmF0aW9uLnNsaWNlKDAsIC0xKTtcbiAgICB9XG5cbiAgICAvLyBjcmVhdGUgYW4gb2ZmbGluZSBlb3NqcyBBUEkgY2xpZW50XG4gICAgY29uc3QgYXBpID0gbmV3IEFwaSh7XG4gICAgICBycGM6IG5ldyBOb29wSnNvblJwYygpLFxuICAgICAgc2lnbmF0dXJlUHJvdmlkZXI6IG5ldyBOb29wU2lnbmF0dXJlUHJvdmlkZXIoKSxcbiAgICAgIGFiaVByb3ZpZGVyOiBuZXcgT2ZmbGluZUFiaVByb3ZpZGVyKCksXG4gICAgICBjaGFpbklkOiB0aGlzLmdldENoYWluSWQoKSxcbiAgICAgIHRleHREZWNvZGVyOiBuZXcgVGV4dERlY29kZXIoKSxcbiAgICAgIHRleHRFbmNvZGVyOiBuZXcgVGV4dEVuY29kZXIoKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRyYW5zZmVyQWN0aW9uID0gdGhpcy5nZXRUcmFuc2ZlckFjdGlvbih7XG4gICAgICByZWNpcGllbnQ6IGRlc3RpbmF0aW9uQWRkcmVzc0RldGFpbHMuYWRkcmVzcyxcbiAgICAgIHNlbmRlcjogcm9vdEFkZHJlc3NEZXRhaWxzLmFkZHJlc3MsXG4gICAgICBhbW91bnQ6IG5ldyBCaWdOdW1iZXIocmVjb3ZlcnlBbW91bnQpLFxuICAgICAgbWVtbzogZGVzdGluYXRpb25BZGRyZXNzRGV0YWlscy5tZW1vSWQsXG4gICAgfSk7XG5cbiAgICBsZXQgc2VyaWFsaXplZFRyYW5zYWN0aW9uO1xuICAgIGNvbnN0IHR4ID0geyBhY3Rpb25zOiBbdHJhbnNmZXJBY3Rpb25dIH07XG4gICAgdHJ5IHtcbiAgICAgIHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGFwaS50cmFuc2FjdCh7IC4uLnR4LCAuLi5oZWFkZXJzIH0sIHsgc2lnbjogZmFsc2UsIGJyb2FkY2FzdDogZmFsc2UgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFb3MgQVBJIGVycm9yOiBDb3VsZCBub3QgYnVpbGQgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICAvLyBjcmVhdGUgdHJhbnNhY3Rpb24gb2JqZWN0XG4gICAgY29uc3Qgc2VyaWFsaXplZFRyYW5zYWN0aW9uSGV4ID0gQnVmZmVyLmZyb20oc2VyaWFsaXplZFRyYW5zYWN0aW9uLnNlcmlhbGl6ZWRUcmFuc2FjdGlvbikudG9TdHJpbmcoJ2hleCcpO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uSWQgPSBFb3MuY3JlYXRlVHJhbnNhY3Rpb25JZEhleChzZXJpYWxpemVkVHJhbnNhY3Rpb24uc2VyaWFsaXplZFRyYW5zYWN0aW9uKTtcbiAgICBjb25zdCB0eE9iamVjdCA9IHtcbiAgICAgIHRyYW5zYWN0aW9uOiB7XG4gICAgICAgIGNvbXByZXNzaW9uOiAnbm9uZScsXG4gICAgICAgIHBhY2tlZF90cng6IHNlcmlhbGl6ZWRUcmFuc2FjdGlvbkhleCxcbiAgICAgICAgc2lnbmF0dXJlczogW10gYXMgc3RyaW5nW10sXG4gICAgICB9LFxuICAgICAgdHhpZDogdHJhbnNhY3Rpb25JZCxcbiAgICAgIHJlY292ZXJ5QW1vdW50OiBhY2NvdW50QmFsYW5jZSxcbiAgICAgIGNvaW46IHRoaXMuZ2V0Q2hhaW4oKSxcbiAgICAgIHR4SGV4OiAnJyxcbiAgICB9O1xuXG4gICAgY29uc3Qgc2lnbmFibGVUeCA9IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgQnVmZmVyLmZyb20odGhpcy5nZXRDaGFpbklkKCksICdoZXgnKSwgLy8gVGhlIENoYWluSUQgcmVwcmVzZW50aW5nIHRoZSBjaGFpbiB0aGF0IHdlIGFyZSBvblxuICAgICAgQnVmZmVyLmZyb20oc2VyaWFsaXplZFRyYW5zYWN0aW9uLnNlcmlhbGl6ZWRUcmFuc2FjdGlvbiksIC8vIFRoZSBzZXJpYWxpemVkIHVuc2lnbmVkIHR4XG4gICAgICBCdWZmZXIuZnJvbShuZXcgVWludDhBcnJheSgzMikpLCAvLyBTb21lIHBhZGRpbmdcbiAgICBdKS50b1N0cmluZygnaGV4Jyk7XG5cbiAgICBpZiAoaXNVbnNpZ25lZFN3ZWVwKSB7XG4gICAgICB0eE9iamVjdC50eEhleCA9IHNpZ25hYmxlVHg7XG4gICAgICByZXR1cm4gdHhPYmplY3Q7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlclNpZ25hdHVyZSA9IHRoaXMuc2lnblR4KHNpZ25hYmxlVHgsIGtleXNbMF0pO1xuICAgIHR4T2JqZWN0LnRyYW5zYWN0aW9uLnNpZ25hdHVyZXMucHVzaCh1c2VyU2lnbmF0dXJlKTtcblxuICAgIGlmICghaXNLcnNSZWNvdmVyeSkge1xuICAgICAgY29uc3QgYmFja3VwU2lnbmF0dXJlID0gdGhpcy5zaWduVHgoc2lnbmFibGVUeCwga2V5c1sxXSk7XG4gICAgICB0eE9iamVjdC50cmFuc2FjdGlvbi5zaWduYXR1cmVzLnB1c2goYmFja3VwU2lnbmF0dXJlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHhPYmplY3Q7XG4gIH1cblxuICBhc3luYyBwYXJzZVRyYW5zYWN0aW9uKHBhcmFtczogUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFBhcnNlZFRyYW5zYWN0aW9uPiB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmeSB0aGF0IGEgdHJhbnNhY3Rpb24gcHJlYnVpbGQgY29tcGxpZXMgd2l0aCB0aGUgb3JpZ2luYWwgaW50ZW50aW9uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtcy50eFBhcmFtcyBwYXJhbXMgdXNlZCB0byBidWlsZCB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHBhcmFtcy50eFByZWJ1aWxkIHRoZSBwcmVidWlsdCB0cmFuc2FjdGlvblxuICAgKi9cbiAgYXN5bmMgdmVyaWZ5VHJhbnNhY3Rpb24ocGFyYW1zOiBFb3NWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHsgdHhQYXJhbXM6IHR4UGFyYW1zLCB0eFByZWJ1aWxkOiB0eFByZWJ1aWxkIH0gPSBwYXJhbXM7XG5cbiAgICAvLyBjaGVjayBpZiB0aGUgdHJhbnNhY3Rpb24gaGFzIGEgdHhIZXhcbiAgICBpZiAoIXR4UHJlYnVpbGQudHhIZXgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCB0eCBwcmVidWlsZCBwcm9wZXJ0eSB0eEhleCcpO1xuICAgIH1cblxuICAgIC8vIGNvbnN0cnVjdCB0cmFuc2FjdGlvbiBmcm9tIHR4SGV4XG4gICAgY29uc3QgdHhGcm9tSGV4ID0gQnVmZmVyLmZyb20odHhQcmVidWlsZC50eEhleCwgJ2hleCcpO1xuICAgIGNvbnN0IHR4RGF0YVdpdGhQYWRkaW5nID0gdHhGcm9tSGV4LnNsaWNlKDMyKTtcbiAgICBjb25zdCB0eERhdGEgPSB0eERhdGFXaXRoUGFkZGluZy5zbGljZSgwLCB0eERhdGFXaXRoUGFkZGluZy5sZW5ndGggLSAzMik7XG4gICAgY29uc3QgZGVzZXJpYWxpemVkVHhKc29uID0gYXdhaXQgdGhpcy5kZXNlcmlhbGl6ZVRyYW5zYWN0aW9uKHtcbiAgICAgIHRyYW5zYWN0aW9uOiB7IHBhY2tlZF90cng6IHR4RGF0YS50b1N0cmluZygnaGV4JykgfSxcbiAgICAgIGhlYWRlcnM6IHR4UHJlYnVpbGQuaGVhZGVycyxcbiAgICB9KTtcbiAgICBpZiAoIWRlc2VyaWFsaXplZFR4SnNvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcHJvY2VzcyB0cmFuc2FjdGlvbiBmcm9tIHR4SGV4Jyk7XG4gICAgfVxuICAgIGNvbnN0IHR4SnNvbkZyb21IZXg6IERlc2VyaWFsaXplZEVvc1RyYW5zYWN0aW9uID0gZGVzZXJpYWxpemVkVHhKc29uO1xuXG4gICAgLy8gY2hlY2sgdGhhdCBpZiB0eFBhcmFtcyBoYXMgYSB0eFByZWJ1aWxkLCBpdCBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdHhQcmVidWlsZFxuICAgIGlmICh0eFBhcmFtcy50eFByZWJ1aWxkICYmICFfLmlzRXF1YWwodHhQYXJhbXMudHhQcmVidWlsZCwgdHhQcmVidWlsZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW5wdXRzIHR4UGFyYW1zLnR4UHJlYnVpbGQgYW5kIHR4UHJlYnVpbGQgZXhwZWN0ZWQgdG8gYmUgZXF1YWwgYnV0IHdlcmUgbm90Jyk7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgcHJlYnVpbGQgaGFzIGEgdHJhbnNhY3Rpb25cbiAgICBpZiAoIXR4UHJlYnVpbGQudHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCB0cmFuc2FjdGlvbiBpbiB0eFByZWJ1aWxkJyk7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgdHJhbnNhY3Rpb24gaGFzIGEgcGFja2VkX3RyeFxuICAgIGlmICghdHhQcmVidWlsZC50cmFuc2FjdGlvbj8ucGFja2VkX3RyeCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHRyYW5zYWN0aW9uLnBhY2tlZF90cnggaW4gdHhQcmVidWlsZCcpO1xuICAgIH1cblxuICAgIC8vIGNvbnN0cnVjdCB0cmFuc2FjdGlvbiB1c2luZyBwYWNrZWRfdHJ4XG4gICAgY29uc3QgZGVzZXJpYWxpemVkVHhKc29uRnJvbVBhY2tlZFRyeCA9IGF3YWl0IHRoaXMuZGVzZXJpYWxpemVUcmFuc2FjdGlvbih7XG4gICAgICB0cmFuc2FjdGlvbjogeyBwYWNrZWRfdHJ4OiB0eFByZWJ1aWxkLnRyYW5zYWN0aW9uLnBhY2tlZF90cnggfSxcbiAgICAgIGhlYWRlcnM6IHR4UHJlYnVpbGQuaGVhZGVycyxcbiAgICB9KTtcbiAgICBpZiAoIWRlc2VyaWFsaXplZFR4SnNvbkZyb21QYWNrZWRUcngpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHByb2Nlc3MgdHJhbnNhY3Rpb24gZnJvbSBwYWNrZWRfdHJ4Jyk7XG4gICAgfVxuICAgIGNvbnN0IHR4SnNvbkZyb21QYWNrZWRUcng6IERlc2VyaWFsaXplZEVvc1RyYW5zYWN0aW9uID0gZGVzZXJpYWxpemVkVHhKc29uRnJvbVBhY2tlZFRyeDtcblxuICAgIC8vIGRlZXAgY2hlY2sgb2Ygb2JqZWN0IGZyb20gcGFja2VkX3RyeCBhbmQgdHhIZXhcbiAgICBpZiAoIV8uaXNFcXVhbCh0eEpzb25Gcm9tUGFja2VkVHJ4LCB0eEpzb25Gcm9tSGV4KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bnBhY2tlZCBwYWNrZWRfdHJ4IGFuZCB1bnBhY2tlZCB0eEhleCBhcmUgbm90IGVxdWFsJyk7XG4gICAgfVxuXG4gICAgaWYgKHR4UGFyYW1zLnJlY2lwaWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdvbmx5IDAgb3IgMSByZWNpcGllbnRzIGFyZSBzdXBwb3J0ZWQnKTtcbiAgICB9XG5cbiAgICAvLyBjaGVjayB0aGUgYW1vdW50cywgcmVjaXBpZW50LCBhbmQgY29pbiBuYW1lIGZvciB0cmFuc2ZlcnNcbiAgICBpZiAodHhQYXJhbXMucmVjaXBpZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gdHhQYXJhbXMucmVjaXBpZW50c1swXTtcblxuICAgICAgLy8gY2hlY2sgb3V0cHV0IGFkZHJlc3MgYW5kIG1lbW9JZFxuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXRBZGRyZXNzQW5kTWVtb0lkID0gdGhpcy5nZXRBZGRyZXNzRGV0YWlscyhleHBlY3RlZE91dHB1dC5hZGRyZXNzKTtcbiAgICAgIGNvbnN0IHR4SGV4QWN0aW9uID0gdHhKc29uRnJvbUhleC5hY3Rpb25zWzBdO1xuICAgICAgY29uc3QgdHhIZXhUcmFuc2ZlckFjdGlvbiA9IHR4SGV4QWN0aW9uLmRhdGEgYXMgVHJhbnNmZXJBY3Rpb25EYXRhO1xuXG4gICAgICBpZiAodHhIZXhUcmFuc2ZlckFjdGlvbi50byAhPT0gZXhwZWN0ZWRPdXRwdXRBZGRyZXNzQW5kTWVtb0lkLmFkZHJlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0eEhleCByZWNlaXZlIGFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgcmVjaXBpZW50IGFkZHJlc3MnKTtcbiAgICAgIH1cbiAgICAgIC8vIGNoZWNrIGlmIHR4YWN0aW9uIG1lbW9pZCBpcyBlcXVhbCB0byBhZGRyZXNzIG1lbW8gaWQgb25seSBpZiBhZGRyZXNzIGFsc28gaGFzIG1lbW9pZCBwcmVzZW50XG4gICAgICBpZiAoIV8uaXNVbmRlZmluZWQoZXhwZWN0ZWRPdXRwdXRBZGRyZXNzQW5kTWVtb0lkLm1lbW9JZCkpIHtcbiAgICAgICAgaWYgKHR4SGV4VHJhbnNmZXJBY3Rpb24ubWVtbyAhPT0gZXhwZWN0ZWRPdXRwdXRBZGRyZXNzQW5kTWVtb0lkLm1lbW9JZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndHhIZXggcmVjZWl2ZSBtZW1vSWQgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgcmVjaXBpZW50IG1lbW9JZCcpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGNoZWNrIGFtb3VudCBhbmQgY29pblxuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXRBbW91bnQgPSBleHBlY3RlZE91dHB1dC5hbW91bnQ7XG4gICAgICBjb25zdCBhY3R1YWxBbW91bnRBbmRDb2luID0gdHhIZXhUcmFuc2ZlckFjdGlvbi5xdWFudGl0eS5zcGxpdCgnICcpO1xuICAgICAgY29uc3QgYWN0dWFsT3V0cHV0QW1vdW50ID0gdGhpcy5iaWdVbml0c1RvQmFzZVVuaXRzKGFjdHVhbEFtb3VudEFuZENvaW5bMF0pO1xuICAgICAgaWYgKGV4cGVjdGVkT3V0cHV0QW1vdW50ICE9PSBhY3R1YWxPdXRwdXRBbW91bnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0eEhleCByZWNlaXZlIGFtb3VudCBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCByZWNpcGllbnQgYW1vdW50Jyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eFByZWJ1aWxkLmNvaW4gPT09ICdlb3MnIHx8IHR4UHJlYnVpbGQuY29pbiA9PT0gJ3Rlb3MnKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkU3ltYm9sID0gXy5pc05pbCh0eFByZWJ1aWxkLnRva2VuKSA/ICdFT1MnIDogdHhQcmVidWlsZC50b2tlbi5zcGxpdCgnOicpWzFdO1xuXG4gICAgICAgIGlmIChhY3R1YWxBbW91bnRBbmRDb2luWzFdICE9PSBleHBlY3RlZFN5bWJvbCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndHhIZXggcmVjZWl2ZSBzeW1ib2wgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgcmVjaXBpZW50IHN5bWJvbCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0eEhleCBjb2luIG5hbWUgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgY29pbiBuYW1lJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSByYW5kb20gRU9TIGFkZHJlc3MuXG4gICAqXG4gICAqIFRoaXMgaXMganVzdCBhIHJhbmRvbSBzdHJpbmcgd2hpY2ggYWJpZGVzIGJ5IHRoZSBFT1MgYWRkZHJlc3MgY29uc3RyYWludHMsXG4gICAqIGFuZCBpcyBub3QgYWN0dWFsbHkgY2hlY2tlZCBmb3IgYXZhaWxhYmlsaXR5IG9uIHRoZSBFT1MgYmxvY2tjaGFpbi5cbiAgICpcbiAgICogQ3VycmVudCBFT1MgYWRkcmVzcyBjb25zdHJhaW50cyBhcmU6XG4gICAqICogQWRkcmVzcyBtdXN0IGJlIGV4YWN0bHkgMTIgY2hhcmFjdGVyc1xuICAgKiAqIEFkZHJlc3MgbXVzdCBvbmx5IGNvbnRhaW4gbG93ZXJjYXNlIGxldHRlcnMgYW5kIG51bWJlcnMgMS01XG4gICAqIEByZXR1cm5zIGEgdmFsaWRseSBmb3JtYXR0ZWQgRU9TIGFkZHJlc3MsIHdoaWNoIG1heSBvciBtYXkgbm90IGFjdHVhbGx5IGJlIGF2YWlsYWJsZSBvbiBjaGFpbi5cbiAgICovXG4gIGdlbmVyYXRlUmFuZG9tQWRkcmVzcyhwYXJhbXM6IFJlY29yZDxzdHJpbmcsIG5ldmVyPik6IHN0cmluZyB7XG4gICAgY29uc3QgYWRkcmVzczogc3RyaW5nW10gPSBbXTtcbiAgICB3aGlsZSAoYWRkcmVzcy5sZW5ndGggPCAxMikge1xuICAgICAgY29uc3QgY2hhciA9IF8uc2FtcGxlKEVvcy5WQUxJRF9BRERSRVNTX0NIQVJTKTtcbiAgICAgIGlmICghY2hhcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBzYW1wbGUgdmFsaWQgRU9TIGFkZHJlc3MgY2hhcmFjdGVycycpO1xuICAgICAgfVxuICAgICAgYWRkcmVzcy5wdXNoKGNoYXIpO1xuICAgIH1cbiAgICByZXR1cm4gYWRkcmVzcy5qb2luKCcnKTtcbiAgfVxufVxuIl19
|
package/dist/src/index.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -15,4 +19,4 @@ __exportStar(require("./eos"), exports);
|
|
|
15
19
|
__exportStar(require("./teos"), exports);
|
|
16
20
|
__exportStar(require("./eosToken"), exports);
|
|
17
21
|
__exportStar(require("./register"), exports);
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHdDQUFzQjtBQUN0Qix3Q0FBc0I7QUFDdEIseUNBQXVCO0FBQ3ZCLDZDQUEyQjtBQUMzQiw2Q0FBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYic7XG5leHBvcnQgKiBmcm9tICcuL2Vvcyc7XG5leHBvcnQgKiBmcm9tICcuL3Rlb3MnO1xuZXhwb3J0ICogZnJvbSAnLi9lb3NUb2tlbic7XG5leHBvcnQgKiBmcm9tICcuL3JlZ2lzdGVyJztcbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitgo/sdk-coin-eos",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"description": "BitGo SDK coin library for Eos",
|
|
5
5
|
"main": "./dist/src/index.js",
|
|
6
6
|
"types": "./dist/src/index.d.ts",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"author": "BitGo SDK Team <sdkteam@bitgo.com>",
|
|
19
19
|
"license": "MIT",
|
|
20
20
|
"engines": {
|
|
21
|
-
"node": ">=
|
|
21
|
+
"node": ">=18 <21"
|
|
22
22
|
},
|
|
23
23
|
"repository": {
|
|
24
24
|
"type": "git",
|
|
@@ -40,8 +40,8 @@
|
|
|
40
40
|
]
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@bitgo/sdk-core": "^26.
|
|
44
|
-
"@bitgo/statics": "^48.
|
|
43
|
+
"@bitgo/sdk-core": "^26.5.0",
|
|
44
|
+
"@bitgo/statics": "^48.3.0",
|
|
45
45
|
"@bitgo/utxo-lib": "^9.34.0",
|
|
46
46
|
"bignumber.js": "^9.0.2",
|
|
47
47
|
"eosjs": "^21.0.2",
|
|
@@ -50,9 +50,9 @@
|
|
|
50
50
|
"superagent": "^3.8.3"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
|
-
"@bitgo/sdk-api": "^1.43.
|
|
54
|
-
"@bitgo/sdk-test": "^8.0.
|
|
53
|
+
"@bitgo/sdk-api": "^1.43.6",
|
|
54
|
+
"@bitgo/sdk-test": "^8.0.6",
|
|
55
55
|
"@types/lodash": "^4.14.121"
|
|
56
56
|
},
|
|
57
|
-
"gitHead": "
|
|
57
|
+
"gitHead": "836681179c597c51a4f60f4f8a5a684eebd49f98"
|
|
58
58
|
}
|