@bitgo-beta/sdk-api 1.10.1-beta.1796 → 1.10.1-beta.1797

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitgo-beta/sdk-api",
3
- "version": "1.10.1-beta.1796",
3
+ "version": "1.10.1-beta.1797",
4
4
  "description": "REST wrapper for BitGoJS",
5
5
  "main": "./dist/src/index.js",
6
6
  "types": "./dist/src/index.d.ts",
@@ -40,12 +40,12 @@
40
40
  ]
41
41
  },
42
42
  "dependencies": {
43
- "@bitgo-beta/argon2": "0.0.1-beta.110",
44
- "@bitgo-beta/sdk-core": "8.2.1-beta.1799",
45
- "@bitgo-beta/sdk-hmac": "1.0.1-beta.1169",
46
- "@bitgo-beta/sjcl": "1.0.2-beta.2042",
47
- "@bitgo-beta/unspents": "0.13.2-beta.1800",
48
- "@bitgo-beta/utxo-lib": "8.0.3-beta.1801",
43
+ "@bitgo-beta/argon2": "0.0.1-beta.111",
44
+ "@bitgo-beta/sdk-core": "8.2.1-beta.1800",
45
+ "@bitgo-beta/sdk-hmac": "1.0.1-beta.1170",
46
+ "@bitgo-beta/sjcl": "1.0.2-beta.2043",
47
+ "@bitgo-beta/unspents": "0.13.2-beta.1801",
48
+ "@bitgo-beta/utxo-lib": "8.0.3-beta.1802",
49
49
  "@types/superagent": "4.1.15",
50
50
  "bitcoinjs-message": "npm:@bitgo-forks/bitcoinjs-message@1.0.0-master.3",
51
51
  "debug": "3.1.0",
@@ -64,7 +64,7 @@
64
64
  "resolutions": {
65
65
  "degenerator": "5.0.0"
66
66
  },
67
- "gitHead": "9e64ffec78a32790a88edd8d0a2ddda57d335a11",
67
+ "gitHead": "ec22791e5f3954eeaae44c5b44b3eadf0d44dc83",
68
68
  "files": [
69
69
  "dist"
70
70
  ]
@@ -13,7 +13,7 @@ export declare function encrypt(password: string, plaintext: string, options?: {
13
13
  }): string;
14
14
  /**
15
15
  * Async encrypt that dispatches to v1 (SJCL) or v2 (Argon2id + AES-256-GCM)
16
- * when `encryptionVersion` is 2. Defaults to v1, matching sync `encrypt()`.
16
+ * when `encryptionVersion` is 2. Defaults to v2.
17
17
  */
18
18
  export declare function encryptAsync(password: string, plaintext: string, options?: {
19
19
  salt?: Buffer;
@@ -78,13 +78,13 @@ function encrypt(password, plaintext, options) {
78
78
  }
79
79
  /**
80
80
  * Async encrypt that dispatches to v1 (SJCL) or v2 (Argon2id + AES-256-GCM)
81
- * when `encryptionVersion` is 2. Defaults to v1, matching sync `encrypt()`.
81
+ * when `encryptionVersion` is 2. Defaults to v2.
82
82
  */
83
83
  async function encryptAsync(password, plaintext, options) {
84
- if (options?.encryptionVersion === 2) {
85
- return (0, encryptV2_1.encryptV2)(password, plaintext, { adata: options.adata });
84
+ if (options?.encryptionVersion === 1) {
85
+ return encrypt(password, plaintext, options);
86
86
  }
87
- return encrypt(password, plaintext, options);
87
+ return (0, encryptV2_1.encryptV2)(password, plaintext, { adata: options?.adata });
88
88
  }
89
89
  /** Decrypt a v1 SJCL envelope. */
90
90
  function decrypt(password, ciphertext) {
@@ -114,4 +114,4 @@ async function decryptAsync(password, ciphertext) {
114
114
  }
115
115
  return sjcl.decrypt(password, ciphertext);
116
116
  }
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jcnlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbmNyeXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV0Esa0NBS0M7QUFHRCwwQkF1QkM7QUFNRCxvQ0FTQztBQUdELDBCQUVDO0FBUUQsb0NBZ0JDO0FBdEZELHVEQUF5QztBQUN6QyxtQ0FBcUM7QUFFckMsMkNBQW1EO0FBRW5EOzs7OztHQUtHO0FBQ0gsU0FBZ0IsV0FBVyxDQUFDLEtBQTZCO0lBQ3ZELElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxVQUFVLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pELE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUVELGtFQUFrRTtBQUNsRSxTQUFnQixPQUFPLENBQ3JCLFFBQWdCLEVBQ2hCLFNBQWlCLEVBQ2pCLE9BQXdEO0lBRXhELE1BQU0sSUFBSSxHQUFHLE9BQU8sRUFBRSxJQUFJLElBQUksSUFBQSxvQkFBVyxFQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sRUFBRSxHQUFHLE9BQU8sRUFBRSxFQUFFLElBQUksSUFBQSxvQkFBVyxFQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxFQUFFO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBRTdELE1BQU0sY0FBYyxHQUErRTtRQUNqRyxJQUFJLEVBQUUsS0FBSztRQUNYLEVBQUUsRUFBRSxHQUFHO1FBQ1AsSUFBSSxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRSxFQUFFLEVBQUU7WUFDRixXQUFXLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0IsV0FBVyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzNCLFdBQVcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM1QixXQUFXLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDOUI7S0FDRixDQUFDO0lBQ0YsSUFBSSxPQUFPLEVBQUUsS0FBSztRQUFFLGNBQWMsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUN6RCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0ksS0FBSyxVQUFVLFlBQVksQ0FDaEMsUUFBZ0IsRUFDaEIsU0FBaUIsRUFDakIsT0FBbUY7SUFFbkYsSUFBSSxPQUFPLEVBQUUsaUJBQWlCLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDckMsT0FBTyxJQUFBLHFCQUFTLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQsa0NBQWtDO0FBQ2xDLFNBQWdCLE9BQU8sQ0FBQyxRQUFnQixFQUFFLFVBQWtCO0lBQzFELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDNUMsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0ksS0FBSyxVQUFVLFlBQVksQ0FBQyxRQUFnQixFQUFFLFVBQWtCO0lBQ3JFLElBQUksZUFBbUMsQ0FBQztJQUN4QyxJQUFJLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hDLGVBQWUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUNELElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzFCLDJFQUEyRTtRQUMzRSxPQUFPLElBQUEscUJBQVMsRUFBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUNELElBQUksZUFBZSxLQUFLLFNBQVMsSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDM0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsZUFBZSxFQUFFLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgc2pjbCBmcm9tICdAYml0Z28tYmV0YS9zamNsJztcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcblxuaW1wb3J0IHsgZGVjcnlwdFYyLCBlbmNyeXB0VjIgfSBmcm9tICcuL2VuY3J5cHRWMic7XG5cbi8qKlxuICogY29udmVydCBhIDQgZWxlbWVudCBVaW50OEFycmF5IHRvIGEgNCBieXRlIE51bWJlclxuICpcbiAqIEBwYXJhbSBieXRlc1xuICogQHJldHVybiA0IGJ5dGUgbnVtYmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBieXRlc1RvV29yZChieXRlcz86IFVpbnQ4QXJyYXkgfCBudW1iZXJbXSk6IG51bWJlciB7XG4gIGlmICghKGJ5dGVzIGluc3RhbmNlb2YgVWludDhBcnJheSkgfHwgYnl0ZXMubGVuZ3RoICE9PSA0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdieXRlcyBtdXN0IGJlIGEgVWludDhBcnJheSB3aXRoIGxlbmd0aCA0Jyk7XG4gIH1cbiAgcmV0dXJuIGJ5dGVzLnJlZHVjZSgobnVtLCBieXRlKSA9PiBudW0gKiAweDEwMCArIGJ5dGUsIDApO1xufVxuXG4vKiogRW5jcnlwdCB1c2luZyBsZWdhY3kgdjEgU0pDTCAoUEJLREYyLVNIQTI1NiArIEFFUy0yNTYtQ0NNKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNyeXB0KFxuICBwYXNzd29yZDogc3RyaW5nLFxuICBwbGFpbnRleHQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IHsgc2FsdD86IEJ1ZmZlcjsgaXY/OiBCdWZmZXI7IGFkYXRhPzogc3RyaW5nIH1cbik6IHN0cmluZyB7XG4gIGNvbnN0IHNhbHQgPSBvcHRpb25zPy5zYWx0IHx8IHJhbmRvbUJ5dGVzKDgpO1xuICBpZiAoc2FsdC5sZW5ndGggIT09IDgpIHRocm93IG5ldyBFcnJvcignc2FsdCBtdXN0IGJlIDggYnl0ZXMnKTtcbiAgY29uc3QgaXYgPSBvcHRpb25zPy5pdiB8fCByYW5kb21CeXRlcygxNik7XG4gIGlmIChpdi5sZW5ndGggIT09IDE2KSB0aHJvdyBuZXcgRXJyb3IoJ2l2IG11c3QgYmUgMTYgYnl0ZXMnKTtcblxuICBjb25zdCBlbmNyeXB0T3B0aW9uczogeyBpdGVyOiBudW1iZXI7IGtzOiBudW1iZXI7IHNhbHQ6IG51bWJlcltdOyBpdjogbnVtYmVyW107IGFkYXRhPzogc3RyaW5nIH0gPSB7XG4gICAgaXRlcjogMTAwMDAsXG4gICAga3M6IDI1NixcbiAgICBzYWx0OiBbYnl0ZXNUb1dvcmQoc2FsdC5zbGljZSgwLCA0KSksIGJ5dGVzVG9Xb3JkKHNhbHQuc2xpY2UoNCkpXSxcbiAgICBpdjogW1xuICAgICAgYnl0ZXNUb1dvcmQoaXYuc2xpY2UoMCwgNCkpLFxuICAgICAgYnl0ZXNUb1dvcmQoaXYuc2xpY2UoNCwgOCkpLFxuICAgICAgYnl0ZXNUb1dvcmQoaXYuc2xpY2UoOCwgMTIpKSxcbiAgICAgIGJ5dGVzVG9Xb3JkKGl2LnNsaWNlKDEyLCAxNikpLFxuICAgIF0sXG4gIH07XG4gIGlmIChvcHRpb25zPy5hZGF0YSkgZW5jcnlwdE9wdGlvbnMuYWRhdGEgPSBvcHRpb25zLmFkYXRhO1xuICByZXR1cm4gc2pjbC5lbmNyeXB0KHBhc3N3b3JkLCBwbGFpbnRleHQsIGVuY3J5cHRPcHRpb25zKTtcbn1cblxuLyoqXG4gKiBBc3luYyBlbmNyeXB0IHRoYXQgZGlzcGF0Y2hlcyB0byB2MSAoU0pDTCkgb3IgdjIgKEFyZ29uMmlkICsgQUVTLTI1Ni1HQ00pXG4gKiB3aGVuIGBlbmNyeXB0aW9uVmVyc2lvbmAgaXMgMi4gRGVmYXVsdHMgdG8gdjEsIG1hdGNoaW5nIHN5bmMgYGVuY3J5cHQoKWAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbmNyeXB0QXN5bmMoXG4gIHBhc3N3b3JkOiBzdHJpbmcsXG4gIHBsYWludGV4dDogc3RyaW5nLFxuICBvcHRpb25zPzogeyBzYWx0PzogQnVmZmVyOyBpdj86IEJ1ZmZlcjsgYWRhdGE/OiBzdHJpbmc7IGVuY3J5cHRpb25WZXJzaW9uPzogMSB8IDIgfVxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKG9wdGlvbnM/LmVuY3J5cHRpb25WZXJzaW9uID09PSAyKSB7XG4gICAgcmV0dXJuIGVuY3J5cHRWMihwYXNzd29yZCwgcGxhaW50ZXh0LCB7IGFkYXRhOiBvcHRpb25zLmFkYXRhIH0pO1xuICB9XG4gIHJldHVybiBlbmNyeXB0KHBhc3N3b3JkLCBwbGFpbnRleHQsIG9wdGlvbnMpO1xufVxuXG4vKiogRGVjcnlwdCBhIHYxIFNKQ0wgZW52ZWxvcGUuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjcnlwdChwYXNzd29yZDogc3RyaW5nLCBjaXBoZXJ0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc2pjbC5kZWNyeXB0KHBhc3N3b3JkLCBjaXBoZXJ0ZXh0KTtcbn1cblxuLyoqXG4gKiBBdXRvLWRldGVjdCB2MSAoU0pDTCkgb3IgdjIgKEFyZ29uMmlkICsgQUVTLTI1Ni1HQ00pIGZyb20gdGhlIGVudmVsb3BlIGB2YCBmaWVsZCBhbmQgZGVjcnlwdC5cbiAqXG4gKiBNaWdyYXRpb24gcGF0aCBmcm9tIHN5bmMgYGRlY3J5cHQoKWAuIE1vdmUgY2FsbCBzaXRlcyB0byBgZGVjcnlwdEFzeW5jKClgIGJlZm9yZVxuICogdGhlIGJyZWFraW5nIHJlbGVhc2UgdGhhdCBmbGlwcyB0aGUgZGVmYXVsdCB0byB2Mi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlY3J5cHRBc3luYyhwYXNzd29yZDogc3RyaW5nLCBjaXBoZXJ0ZXh0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBsZXQgZW52ZWxvcGVWZXJzaW9uOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgY29uc3QgZW52ZWxvcGUgPSBKU09OLnBhcnNlKGNpcGhlcnRleHQpO1xuICAgIGVudmVsb3BlVmVyc2lvbiA9IGVudmVsb3BlLnY7XG4gIH0gY2F0Y2gge1xuICAgIHRocm93IG5ldyBFcnJvcignZGVjcnlwdDogY2lwaGVydGV4dCBpcyBub3QgdmFsaWQgSlNPTicpO1xuICB9XG4gIGlmIChlbnZlbG9wZVZlcnNpb24gPT09IDIpIHtcbiAgICAvLyBEbyBub3QgY2F0Y2g6IHdyb25nIHBhc3N3b3JkIG9uIHYyIG11c3Qgbm90IHNpbGVudGx5IGZhbGwgdGhyb3VnaCB0byB2MS5cbiAgICByZXR1cm4gZGVjcnlwdFYyKHBhc3N3b3JkLCBjaXBoZXJ0ZXh0KTtcbiAgfVxuICBpZiAoZW52ZWxvcGVWZXJzaW9uICE9PSB1bmRlZmluZWQgJiYgZW52ZWxvcGVWZXJzaW9uICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBkZWNyeXB0OiB1bmtub3duIGVudmVsb3BlIHZlcnNpb24gJHtlbnZlbG9wZVZlcnNpb259YCk7XG4gIH1cbiAgcmV0dXJuIHNqY2wuZGVjcnlwdChwYXNzd29yZCwgY2lwaGVydGV4dCk7XG59XG4iXX0=
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jcnlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbmNyeXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV0Esa0NBS0M7QUFHRCwwQkF1QkM7QUFNRCxvQ0FTQztBQUdELDBCQUVDO0FBUUQsb0NBZ0JDO0FBdEZELHVEQUF5QztBQUN6QyxtQ0FBcUM7QUFFckMsMkNBQW1EO0FBRW5EOzs7OztHQUtHO0FBQ0gsU0FBZ0IsV0FBVyxDQUFDLEtBQTZCO0lBQ3ZELElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxVQUFVLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pELE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUVELGtFQUFrRTtBQUNsRSxTQUFnQixPQUFPLENBQ3JCLFFBQWdCLEVBQ2hCLFNBQWlCLEVBQ2pCLE9BQXdEO0lBRXhELE1BQU0sSUFBSSxHQUFHLE9BQU8sRUFBRSxJQUFJLElBQUksSUFBQSxvQkFBVyxFQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sRUFBRSxHQUFHLE9BQU8sRUFBRSxFQUFFLElBQUksSUFBQSxvQkFBVyxFQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxFQUFFO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBRTdELE1BQU0sY0FBYyxHQUErRTtRQUNqRyxJQUFJLEVBQUUsS0FBSztRQUNYLEVBQUUsRUFBRSxHQUFHO1FBQ1AsSUFBSSxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRSxFQUFFLEVBQUU7WUFDRixXQUFXLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0IsV0FBVyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzNCLFdBQVcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM1QixXQUFXLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDOUI7S0FDRixDQUFDO0lBQ0YsSUFBSSxPQUFPLEVBQUUsS0FBSztRQUFFLGNBQWMsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUN6RCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0ksS0FBSyxVQUFVLFlBQVksQ0FDaEMsUUFBZ0IsRUFDaEIsU0FBaUIsRUFDakIsT0FBbUY7SUFFbkYsSUFBSSxPQUFPLEVBQUUsaUJBQWlCLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDckMsT0FBTyxPQUFPLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQ0QsT0FBTyxJQUFBLHFCQUFTLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNuRSxDQUFDO0FBRUQsa0NBQWtDO0FBQ2xDLFNBQWdCLE9BQU8sQ0FBQyxRQUFnQixFQUFFLFVBQWtCO0lBQzFELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDNUMsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0ksS0FBSyxVQUFVLFlBQVksQ0FBQyxRQUFnQixFQUFFLFVBQWtCO0lBQ3JFLElBQUksZUFBbUMsQ0FBQztJQUN4QyxJQUFJLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hDLGVBQWUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUNELElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzFCLDJFQUEyRTtRQUMzRSxPQUFPLElBQUEscUJBQVMsRUFBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUNELElBQUksZUFBZSxLQUFLLFNBQVMsSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDM0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsZUFBZSxFQUFFLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgc2pjbCBmcm9tICdAYml0Z28tYmV0YS9zamNsJztcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcblxuaW1wb3J0IHsgZGVjcnlwdFYyLCBlbmNyeXB0VjIgfSBmcm9tICcuL2VuY3J5cHRWMic7XG5cbi8qKlxuICogY29udmVydCBhIDQgZWxlbWVudCBVaW50OEFycmF5IHRvIGEgNCBieXRlIE51bWJlclxuICpcbiAqIEBwYXJhbSBieXRlc1xuICogQHJldHVybiA0IGJ5dGUgbnVtYmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBieXRlc1RvV29yZChieXRlcz86IFVpbnQ4QXJyYXkgfCBudW1iZXJbXSk6IG51bWJlciB7XG4gIGlmICghKGJ5dGVzIGluc3RhbmNlb2YgVWludDhBcnJheSkgfHwgYnl0ZXMubGVuZ3RoICE9PSA0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdieXRlcyBtdXN0IGJlIGEgVWludDhBcnJheSB3aXRoIGxlbmd0aCA0Jyk7XG4gIH1cbiAgcmV0dXJuIGJ5dGVzLnJlZHVjZSgobnVtLCBieXRlKSA9PiBudW0gKiAweDEwMCArIGJ5dGUsIDApO1xufVxuXG4vKiogRW5jcnlwdCB1c2luZyBsZWdhY3kgdjEgU0pDTCAoUEJLREYyLVNIQTI1NiArIEFFUy0yNTYtQ0NNKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNyeXB0KFxuICBwYXNzd29yZDogc3RyaW5nLFxuICBwbGFpbnRleHQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IHsgc2FsdD86IEJ1ZmZlcjsgaXY/OiBCdWZmZXI7IGFkYXRhPzogc3RyaW5nIH1cbik6IHN0cmluZyB7XG4gIGNvbnN0IHNhbHQgPSBvcHRpb25zPy5zYWx0IHx8IHJhbmRvbUJ5dGVzKDgpO1xuICBpZiAoc2FsdC5sZW5ndGggIT09IDgpIHRocm93IG5ldyBFcnJvcignc2FsdCBtdXN0IGJlIDggYnl0ZXMnKTtcbiAgY29uc3QgaXYgPSBvcHRpb25zPy5pdiB8fCByYW5kb21CeXRlcygxNik7XG4gIGlmIChpdi5sZW5ndGggIT09IDE2KSB0aHJvdyBuZXcgRXJyb3IoJ2l2IG11c3QgYmUgMTYgYnl0ZXMnKTtcblxuICBjb25zdCBlbmNyeXB0T3B0aW9uczogeyBpdGVyOiBudW1iZXI7IGtzOiBudW1iZXI7IHNhbHQ6IG51bWJlcltdOyBpdjogbnVtYmVyW107IGFkYXRhPzogc3RyaW5nIH0gPSB7XG4gICAgaXRlcjogMTAwMDAsXG4gICAga3M6IDI1NixcbiAgICBzYWx0OiBbYnl0ZXNUb1dvcmQoc2FsdC5zbGljZSgwLCA0KSksIGJ5dGVzVG9Xb3JkKHNhbHQuc2xpY2UoNCkpXSxcbiAgICBpdjogW1xuICAgICAgYnl0ZXNUb1dvcmQoaXYuc2xpY2UoMCwgNCkpLFxuICAgICAgYnl0ZXNUb1dvcmQoaXYuc2xpY2UoNCwgOCkpLFxuICAgICAgYnl0ZXNUb1dvcmQoaXYuc2xpY2UoOCwgMTIpKSxcbiAgICAgIGJ5dGVzVG9Xb3JkKGl2LnNsaWNlKDEyLCAxNikpLFxuICAgIF0sXG4gIH07XG4gIGlmIChvcHRpb25zPy5hZGF0YSkgZW5jcnlwdE9wdGlvbnMuYWRhdGEgPSBvcHRpb25zLmFkYXRhO1xuICByZXR1cm4gc2pjbC5lbmNyeXB0KHBhc3N3b3JkLCBwbGFpbnRleHQsIGVuY3J5cHRPcHRpb25zKTtcbn1cblxuLyoqXG4gKiBBc3luYyBlbmNyeXB0IHRoYXQgZGlzcGF0Y2hlcyB0byB2MSAoU0pDTCkgb3IgdjIgKEFyZ29uMmlkICsgQUVTLTI1Ni1HQ00pXG4gKiB3aGVuIGBlbmNyeXB0aW9uVmVyc2lvbmAgaXMgMi4gRGVmYXVsdHMgdG8gdjIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbmNyeXB0QXN5bmMoXG4gIHBhc3N3b3JkOiBzdHJpbmcsXG4gIHBsYWludGV4dDogc3RyaW5nLFxuICBvcHRpb25zPzogeyBzYWx0PzogQnVmZmVyOyBpdj86IEJ1ZmZlcjsgYWRhdGE/OiBzdHJpbmc7IGVuY3J5cHRpb25WZXJzaW9uPzogMSB8IDIgfVxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKG9wdGlvbnM/LmVuY3J5cHRpb25WZXJzaW9uID09PSAxKSB7XG4gICAgcmV0dXJuIGVuY3J5cHQocGFzc3dvcmQsIHBsYWludGV4dCwgb3B0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIGVuY3J5cHRWMihwYXNzd29yZCwgcGxhaW50ZXh0LCB7IGFkYXRhOiBvcHRpb25zPy5hZGF0YSB9KTtcbn1cblxuLyoqIERlY3J5cHQgYSB2MSBTSkNMIGVudmVsb3BlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY3J5cHQocGFzc3dvcmQ6IHN0cmluZywgY2lwaGVydGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHNqY2wuZGVjcnlwdChwYXNzd29yZCwgY2lwaGVydGV4dCk7XG59XG5cbi8qKlxuICogQXV0by1kZXRlY3QgdjEgKFNKQ0wpIG9yIHYyIChBcmdvbjJpZCArIEFFUy0yNTYtR0NNKSBmcm9tIHRoZSBlbnZlbG9wZSBgdmAgZmllbGQgYW5kIGRlY3J5cHQuXG4gKlxuICogTWlncmF0aW9uIHBhdGggZnJvbSBzeW5jIGBkZWNyeXB0KClgLiBNb3ZlIGNhbGwgc2l0ZXMgdG8gYGRlY3J5cHRBc3luYygpYCBiZWZvcmVcbiAqIHRoZSBicmVha2luZyByZWxlYXNlIHRoYXQgZmxpcHMgdGhlIGRlZmF1bHQgdG8gdjIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWNyeXB0QXN5bmMocGFzc3dvcmQ6IHN0cmluZywgY2lwaGVydGV4dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgbGV0IGVudmVsb3BlVmVyc2lvbjogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIGNvbnN0IGVudmVsb3BlID0gSlNPTi5wYXJzZShjaXBoZXJ0ZXh0KTtcbiAgICBlbnZlbG9wZVZlcnNpb24gPSBlbnZlbG9wZS52O1xuICB9IGNhdGNoIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2RlY3J5cHQ6IGNpcGhlcnRleHQgaXMgbm90IHZhbGlkIEpTT04nKTtcbiAgfVxuICBpZiAoZW52ZWxvcGVWZXJzaW9uID09PSAyKSB7XG4gICAgLy8gRG8gbm90IGNhdGNoOiB3cm9uZyBwYXNzd29yZCBvbiB2MiBtdXN0IG5vdCBzaWxlbnRseSBmYWxsIHRocm91Z2ggdG8gdjEuXG4gICAgcmV0dXJuIGRlY3J5cHRWMihwYXNzd29yZCwgY2lwaGVydGV4dCk7XG4gIH1cbiAgaWYgKGVudmVsb3BlVmVyc2lvbiAhPT0gdW5kZWZpbmVkICYmIGVudmVsb3BlVmVyc2lvbiAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgZGVjcnlwdDogdW5rbm93biBlbnZlbG9wZSB2ZXJzaW9uICR7ZW52ZWxvcGVWZXJzaW9ufWApO1xuICB9XG4gIHJldHVybiBzamNsLmRlY3J5cHQocGFzc3dvcmQsIGNpcGhlcnRleHQpO1xufVxuIl19
@@ -173,17 +173,20 @@ Keychains.prototype.updatePassword = function (params, callback) {
173
173
  const newKeychains = {};
174
174
  // @ts-expect-error - no implicit this
175
175
  const self = this;
176
- _.forOwn(encrypted.keychains, function keychainsForOwn(oldEncryptedXprv, xpub) {
176
+ for (const [xpub, oldEncryptedXprv] of Object.entries(encrypted.keychains)) {
177
177
  try {
178
- const decryptedPrv = self.bitgo.decrypt({ input: oldEncryptedXprv, password: params.oldPassword });
179
- const newEncryptedPrv = self.bitgo.encrypt({ input: decryptedPrv, password: params.newPassword });
178
+ const decryptedPrv = await self.bitgo.decryptAsync({
179
+ input: oldEncryptedXprv,
180
+ password: params.oldPassword,
181
+ });
182
+ const newEncryptedPrv = await self.bitgo.encryptAsync({ input: decryptedPrv, password: params.newPassword });
180
183
  newKeychains[xpub] = newEncryptedPrv;
181
184
  }
182
185
  catch (e) {
183
186
  // decrypting the keychain with the old password didn't work so we just keep it the way it is
184
187
  newKeychains[xpub] = oldEncryptedXprv;
185
188
  }
186
- });
189
+ }
187
190
  return { keychains: newKeychains, version: encrypted.version };
188
191
  }
189
192
  .call(this)
@@ -317,4 +320,4 @@ Keychains.prototype.update = function (params, callback) {
317
320
  .catch(callback);
318
321
  };
319
322
  module.exports = Keychains;
320
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2hhaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3YxL2tleWNoYWlucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7O0FBRUg7R0FDRztBQUNILEVBQUU7QUFDRixtQkFBbUI7QUFDbkIsdUNBQXVDO0FBQ3ZDLEVBQUU7QUFDRixvREFBb0Q7QUFDcEQsRUFBRTtBQUVGLG1EQUE2QztBQUM3QyxtQ0FBcUM7QUFDckMsbURBQXdFO0FBQ3hFLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUU1QixFQUFFO0FBQ0YsY0FBYztBQUNkLEVBQUU7QUFDRixNQUFNLFNBQVMsR0FBRyxVQUFVLEtBQUs7SUFDL0Isc0NBQXNDO0lBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3JCLENBQUMsQ0FBQztBQUVGLEVBQUU7QUFDRixVQUFVO0FBQ1YsZ0VBQWdFO0FBQ2hFLEVBQUU7QUFDRixTQUFTLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxVQUFVLE1BQU07SUFDNUMsTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7SUFDdEIsaUJBQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUV0QyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3ZELE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckIsZ0JBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLENB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UUFDdEIsSUFDRSxRQUFRLENBQUMsSUFBSTtZQUNiLFFBQVEsQ0FBQyxVQUFVO1lBQ25CLGVBQUksQ0FBQyxnQkFBZ0I7WUFDckIsUUFBUSxDQUFDLFVBQVUsS0FBSyxlQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUM1RCxDQUFDO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDLENBQUM7U0FDRCxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQ2QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3JCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAaGlkZGVuXG4gKi9cblxuLyoqXG4gKi9cbi8vXG4vLyBLZXljaGFpbnMgT2JqZWN0XG4vLyBCaXRHbyBhY2Nlc3NvciB0byBhIHVzZXIncyBrZXljaGFpbi5cbi8vXG4vLyBDb3B5cmlnaHQgMjAxNCwgQml0R28sIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vL1xuXG5pbXBvcnQgeyBiaXAzMiB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IGNvbW1vbiwgVXRpbCwgc2FuaXRpemVMZWdhY3lQYXRoIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xuXG4vL1xuLy8gQ29uc3RydWN0b3Jcbi8vXG5jb25zdCBLZXljaGFpbnMgPSBmdW5jdGlvbiAoYml0Z28pIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIG5vIGltcGxpY2l0IHRoaXNcbiAgdGhpcy5iaXRnbyA9IGJpdGdvO1xufTtcblxuLy9cbi8vIGlzVmFsaWRcbi8vIFRlc3RzIGEgeHB1YiBvciB4cHJ2IHN0cmluZyB0byBzZWUgaWYgaXQgaXMgYSB2YWxpZCBrZXljaGFpbi5cbi8vXG5LZXljaGFpbnMucHJvdG90eXBlLmlzVmFsaWQgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywgW10sIFtdKTtcblxuICBpZiAoIV8uaXNTdHJpbmcocGFyYW1zLmtleSkgJiYgIV8uaXNPYmplY3QocGFyYW1zLmtleSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2tleSBtdXN0IGJlIGEgc3RyaW5nIG9yIG9iamVjdCcpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAoIXBhcmFtcy5rZXkucGF0aCkge1xuICAgICAgYmlwMzIuZnJvbUJhc2U1OChwYXJhbXMua2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYmlwMzIuZnJvbUJhc2U1OChwYXJhbXMua2V5LnhwdWIpLmRlcml2ZVBhdGgoc2FuaXRpemVMZWdhY3lQYXRoKHBhcmFtcy5rZXkucGF0aCkpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuLy9cbi8vIGNyZWF0ZVxuLy8gQ3JlYXRlIGEgbmV3IGtleWNoYWluIGxvY2FsbHkuXG4vLyBEb2VzIG5vdCBzZW5kIHRoZSBrZXljaGFpbiB0byBiaXRnbywgb25seSBjcmVhdGVzIGxvY2FsbHkuXG4vLyBJZiB8c2VlZHwgaXMgcHJvdmlkZWQsIHVzZWQgdG8gc2VlZCB0aGUga2V5Y2hhaW4uICBPdGhlcndpc2UsXG4vLyBhIHJhbmRvbSBrZXljaGFpbiBpcyBjcmVhdGVkLlxuLy9cbktleWNoYWlucy5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFtdLCBbXSk7XG5cbiAgbGV0IHNlZWQ7XG4gIGlmICghcGFyYW1zLnNlZWQpIHtcbiAgICAvLyBBbiBleHRlbmRlZCBwcml2YXRlIGtleSBoYXMgYm90aCBhIG5vcm1hbCAyNTYgYml0IHByaXZhdGUga2V5IGFuZCBhIDI1NlxuICAgIC8vIGJpdCBjaGFpbiBjb2RlLCBib3RoIG9mIHdoaWNoIG11c3QgYmUgcmFuZG9tLiA1MTIgYml0cyBpcyB0aGVyZWZvcmUgdGhlXG4gICAgLy8gbWF4aW11bSBlbnRyb3B5IGFuZCBnaXZlcyB1cyBtYXhpbXVtIHNlY3VyaXR5IGFnYWluc3QgY3JhY2tpbmcuXG4gICAgc2VlZCA9IHJhbmRvbUJ5dGVzKDUxMiAvIDgpO1xuICB9IGVsc2Uge1xuICAgIHNlZWQgPSBwYXJhbXMuc2VlZDtcbiAgfVxuXG4gIGNvbnN0IGV4dGVuZGVkS2V5ID0gYmlwMzIuZnJvbVNlZWQoc2VlZCk7XG4gIGNvbnN0IHhwdWIgPSBleHRlbmRlZEtleS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCk7XG5cbiAgbGV0IGV0aEFkZHJlc3M7XG4gIHRyeSB7XG4gICAgZXRoQWRkcmVzcyA9IFV0aWwueHB1YlRvRXRoQWRkcmVzcyh4cHViKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIGV0aGVyZXVtIGlzIHVuYXZhaWxhYmxlXG4gIH1cblxuICByZXR1cm4ge1xuICAgIHhwdWI6IHhwdWIsXG4gICAgeHBydjogZXh0ZW5kZWRLZXkudG9CYXNlNTgoKSxcbiAgICBldGhBZGRyZXNzOiBldGhBZGRyZXNzLFxuICB9O1xufTtcblxuLy8gdXNlZCBieSBkZXJpdmVMb2NhbFxuY29uc3QgYXBpUmVzcG9uc2UgPSBmdW5jdGlvbiAoc3RhdHVzLCByZXN1bHQsIG1lc3NhZ2UpIHtcbiAgY29uc3QgZXJyOiBhbnkgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIGVyci5zdGF0dXMgPSBzdGF0dXM7XG4gIGVyci5yZXN1bHQgPSByZXN1bHQ7XG4gIHJldHVybiBlcnI7XG59O1xuXG4vL1xuLy8gZGVyaXZlTG9jYWxcbi8vIExvY2FsbHkgZGVyaXZlcyBhIGtleWNoYWluIGZyb20gYSB0b3AgbGV2ZWwgQklQMzIgc3RyaW5nLCBnaXZlbiBhIHBhdGguXG4vL1xuS2V5Y2hhaW5zLnByb3RvdHlwZS5kZXJpdmVMb2NhbCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbJ3BhdGgnXSwgWyd4cHJ2JywgJ3hwdWInXSk7XG5cbiAgaWYgKCFwYXJhbXMueHBydiAmJiAhcGFyYW1zLnhwdWIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ211c3QgcHJvdmlkZSBhbiB4cHViIG9yIHhwcnYgZm9yIGRlcml2YXRpb24uJyk7XG4gIH1cbiAgaWYgKHBhcmFtcy54cHJ2ICYmIHBhcmFtcy54cHViKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgcHJvdmlkZSBib3RoIHhwdWIgYW5kIHhwcnYnKTtcbiAgfVxuXG4gIGxldCBoZE5vZGU7XG4gIHRyeSB7XG4gICAgaGROb2RlID0gYmlwMzIuZnJvbUJhc2U1OChwYXJhbXMueHBydiB8fCBwYXJhbXMueHB1Yik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBhcGlSZXNwb25zZSg0MDAsIHt9LCAnVW5hYmxlIHRvIHBhcnNlIHRoZSB4cHJ2IG9yIHhwdWInKTtcbiAgfVxuXG4gIGxldCBkZXJpdmVkTm9kZTtcbiAgdHJ5IHtcbiAgICBkZXJpdmVkTm9kZSA9IGhkTm9kZS5kZXJpdmVQYXRoKHNhbml0aXplTGVnYWN5UGF0aChwYXJhbXMucGF0aCkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgYXBpUmVzcG9uc2UoNDAwLCB7fSwgJ1VuYWJsZSB0byBkZXJpdmUgSEQga2V5IGZyb20gcGF0aCcpO1xuICB9XG5cbiAgY29uc3QgeHB1YiA9IGRlcml2ZWROb2RlLm5ldXRlcmVkKCkudG9CYXNlNTgoKTtcblxuICBsZXQgZXRoQWRkcmVzcztcbiAgdHJ5IHtcbiAgICBldGhBZGRyZXNzID0gVXRpbC54cHViVG9FdGhBZGRyZXNzKHhwdWIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gZXRoZXJldW0gaXMgdW5hdmFpbGFibGVcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGF0aDogcGFyYW1zLnBhdGgsXG4gICAgeHB1YjogeHB1YixcbiAgICB4cHJ2OiBwYXJhbXMueHBydiAmJiBkZXJpdmVkTm9kZS50b0Jhc2U1OCgpLFxuICAgIGV0aEFkZHJlc3M6IGV0aEFkZHJlc3MsXG4gIH07XG59O1xuXG4vL1xuLy8gbGlzdFxuLy8gTGlzdCB0aGUgdXNlcidzIGtleWNoYWluc1xuLy9cbktleWNoYWlucy5wcm90b3R5cGUubGlzdCA9IGZ1bmN0aW9uIChwYXJhbXMsIGNhbGxiYWNrKSB7XG4gIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywgW10sIFtdLCBjYWxsYmFjayk7XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmJpdGdvLmdldCh0aGlzLmJpdGdvLnVybCgnL2tleWNoYWluJykpLnJlc3VsdCgna2V5Y2hhaW5zJykpXG4gICAgLnRoZW4oZnVuY3Rpb24gKGtleWNoYWlucykge1xuICAgICAga2V5Y2hhaW5zLm1hcChmdW5jdGlvbiAoa2V5Y2hhaW4pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGtleWNoYWluLnhwdWIgJiZcbiAgICAgICAgICBrZXljaGFpbi5ldGhBZGRyZXNzICYmXG4gICAgICAgICAgVXRpbC54cHViVG9FdGhBZGRyZXNzICYmXG4gICAgICAgICAga2V5Y2hhaW4uZXRoQWRkcmVzcyAhPT0gVXRpbC54cHViVG9FdGhBZGRyZXNzKGtleWNoYWluLnhwdWIpXG4gICAgICAgICkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZXRoQWRkcmVzcyBhbmQgeHB1YiBkbyBub3QgbWF0Y2gnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4ga2V5Y2hhaW5zO1xuICAgIH0pXG4gICAgLnRoZW4oY2FsbGJhY2spXG4gICAgLmNhdGNoKGNhbGxiYWNrKTtcbn07XG5cbi8qKlxuICogaXRlcmF0ZXMgdGhyb3VnaCBhbGwga2V5cyBhc3NvY2lhdGVkIHdpdGggdGhlIHVzZXIsIGRlY3J5cHRzIHRoZW0gd2l0aCB0aGUgb2xkIHBhc3N3b3JkIGFuZCBlbmNyeXB0cyB0aGVtIHdpdGggdGhlXG4gKiBuZXcgcGFzc3dvcmRcbiAqIEBwYXJhbSBwYXJhbXMub2xkUGFzc3dvcmQge1N0cmluZ30gLSBUaGUgb2xkIHBhc3N3b3JkIHVzZWQgZm9yIGVuY3J5cHRpbmcgdGhlIGtleVxuICogQHBhcmFtIHBhcmFtcy5uZXdQYXNzd29yZCB7U3RyaW5nfSAtIFRoZSBuZXcgcGFzc3dvcmQgdG8gYmUgdXNlZCBmb3IgZW5jcnlwdGluZyB0aGUga2V5XG4gKiBAcGFyYW0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHJlc3VsdC5rZXljaGFpbnMge09iamVjdH0gLSBlLmcuOlxuICogIHtcbiAqICAgIHhwdWIxOiBlbmNyeXB0ZWRQcnYxLFxuICogICAgeHB1YjI6IGVuY3J5cHRlZFBydjIsXG4gKiAgICAuLi5cbiAqICB9XG4gKiAgQHJldHVybnMgcmVzdWx0LnZlcnNpb24ge051bWJlcn1cbiAqL1xuS2V5Y2hhaW5zLnByb3RvdHlwZS51cGRhdGVQYXNzd29yZCA9IGZ1bmN0aW9uIChwYXJhbXMsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiBjb1VwZGF0ZVBhc3N3b3JkKCkge1xuICAgIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFsnb2xkUGFzc3dvcmQnLCAnbmV3UGFzc3dvcmQnXSwgW10sIGNhbGxiYWNrKTtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gbm8gaW1wbGljaXQgdGhpc1xuICAgIGNvbnN0IGVuY3J5cHRlZCA9IGF3YWl0IHRoaXMuYml0Z28ucG9zdCh0aGlzLmJpdGdvLnVybCgnL3VzZXIvZW5jcnlwdGVkJykpLnJlc3VsdCgpO1xuICAgIGNvbnN0IG5ld0tleWNoYWlucyA9IHt9O1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBubyBpbXBsaWNpdCB0aGlzXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgXy5mb3JPd24oKGVuY3J5cHRlZCBhcyBhbnkpLmtleWNoYWlucywgZnVuY3Rpb24ga2V5Y2hhaW5zRm9yT3duKG9sZEVuY3J5cHRlZFhwcnYsIHhwdWIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRlY3J5cHRlZFBydiA9IHNlbGYuYml0Z28uZGVjcnlwdCh7IGlucHV0OiBvbGRFbmNyeXB0ZWRYcHJ2LCBwYXNzd29yZDogcGFyYW1zLm9sZFBhc3N3b3JkIH0pO1xuICAgICAgICBjb25zdCBuZXdFbmNyeXB0ZWRQcnYgPSBzZWxmLmJpdGdvLmVuY3J5cHQoeyBpbnB1dDogZGVjcnlwdGVkUHJ2LCBwYXNzd29yZDogcGFyYW1zLm5ld1Bhc3N3b3JkIH0pO1xuICAgICAgICBuZXdLZXljaGFpbnNbeHB1Yl0gPSBuZXdFbmNyeXB0ZWRQcnY7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGRlY3J5cHRpbmcgdGhlIGtleWNoYWluIHdpdGggdGhlIG9sZCBwYXNzd29yZCBkaWRuJ3Qgd29yayBzbyB3ZSBqdXN0IGtlZXAgaXQgdGhlIHdheSBpdCBpc1xuICAgICAgICBuZXdLZXljaGFpbnNbeHB1Yl0gPSBvbGRFbmNyeXB0ZWRYcHJ2O1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7IGtleWNoYWluczogbmV3S2V5Y2hhaW5zLCB2ZXJzaW9uOiAoZW5jcnlwdGVkIGFzIGFueSkudmVyc2lvbiB9O1xuICB9XG4gICAgLmNhbGwodGhpcylcbiAgICAudGhlbihjYWxsYmFjaylcbiAgICAuY2F0Y2goY2FsbGJhY2spO1xufTtcblxuLy9cbi8vIGFkZFxuLy8gQWRkIGEgbmV3IGtleWNoYWluXG4vL1xuS2V5Y2hhaW5zLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAocGFyYW1zLCBjYWxsYmFjaykge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFsneHB1YiddLCBbJ2VuY3J5cHRlZFhwcnYnLCAndHlwZScsICdpc0xlZGdlciddLCBjYWxsYmFjayk7XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICB0aGlzLmJpdGdvXG4gICAgICAucG9zdCh0aGlzLmJpdGdvLnVybCgnL2tleWNoYWluJykpXG4gICAgICAuc2VuZCh7XG4gICAgICAgIHhwdWI6IHBhcmFtcy54cHViLFxuICAgICAgICBlbmNyeXB0ZWRYcHJ2OiBwYXJhbXMuZW5jcnlwdGVkWHBydixcbiAgICAgICAgdHlwZTogcGFyYW1zLnR5cGUsXG4gICAgICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogcGFyYW1zLm9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZSxcbiAgICAgICAgaXNMZWRnZXI6IHBhcmFtcy5pc0xlZGdlcixcbiAgICAgIH0pXG4gICAgICAucmVzdWx0KClcbiAgKVxuICAgIC50aGVuKGZ1bmN0aW9uIChrZXljaGFpbikge1xuICAgICAgaWYgKFxuICAgICAgICBrZXljaGFpbi54cHViICYmXG4gICAgICAgIGtleWNoYWluLmV0aEFkZHJlc3MgJiZcbiAgICAgICAgVXRpbC54cHViVG9FdGhBZGRyZXNzICYmXG4gICAgICAgIGtleWNoYWluLmV0aEFkZHJlc3MgIT09IFV0aWwueHB1YlRvRXRoQWRkcmVzcyhrZXljaGFpbi54cHViKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZXRoQWRkcmVzcyBhbmQgeHB1YiBkbyBub3QgbWF0Y2gnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBrZXljaGFpbjtcbiAgICB9KVxuICAgIC50aGVuKGNhbGxiYWNrKVxuICAgIC5jYXRjaChjYWxsYmFjayk7XG59O1xuXG4vL1xuLy8gY3JlYXRlQml0R29cbi8vIEFkZCBhIG5ldyBCaXRHbyBzZXJ2ZXIga2V5Y2hhaW5cbi8vXG5LZXljaGFpbnMucHJvdG90eXBlLmNyZWF0ZUJpdEdvID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbXSwgW10sIGNhbGxiYWNrKTtcblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuYml0Z28ucG9zdCh0aGlzLmJpdGdvLnVybCgnL2tleWNoYWluL2JpdGdvJykpLnNlbmQocGFyYW1zKS5yZXN1bHQoKSlcbiAgICAudGhlbihmdW5jdGlvbiAoa2V5Y2hhaW4pIHtcbiAgICAgIGlmIChcbiAgICAgICAga2V5Y2hhaW4ueHB1YiAmJlxuICAgICAgICBrZXljaGFpbi5ldGhBZGRyZXNzICYmXG4gICAgICAgIFV0aWwueHB1YlRvRXRoQWRkcmVzcyAmJlxuICAgICAgICBrZXljaGFpbi5ldGhBZGRyZXNzICE9PSBVdGlsLnhwdWJUb0V0aEFkZHJlc3Moa2V5Y2hhaW4ueHB1YilcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V0aEFkZHJlc3MgYW5kIHhwdWIgZG8gbm90IG1hdGNoJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4ga2V5Y2hhaW47XG4gICAgfSlcbiAgICAudGhlbihjYWxsYmFjaylcbiAgICAuY2F0Y2goY2FsbGJhY2spO1xufTtcblxuLy9cbi8vIGNyZWF0ZUJhY2t1cFxuLy8gQ3JlYXRlIGEgbmV3IGJhY2t1cCBrZXljaGFpbiB0aHJvdWdoIGJpdGdvIC0gb2Z0ZW4gdXNlZCBmb3IgY3JlYXRpbmcgYSBrZXljaGFpbiBvbiBhIEtSU1xuLy9cbktleWNoYWlucy5wcm90b3R5cGUuY3JlYXRlQmFja3VwID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbJ3Byb3ZpZGVyJ10sIFtdLCBjYWxsYmFjayk7XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmJpdGdvLnBvc3QodGhpcy5iaXRnby51cmwoJy9rZXljaGFpbi9iYWNrdXAnKSkuc2VuZChwYXJhbXMpLnJlc3VsdCgpKVxuICAgIC50aGVuKGZ1bmN0aW9uIChrZXljaGFpbikge1xuICAgICAgLy8gbm90IGFsbCBrZXljaGFpbnMgaGF2ZSBhbiB4cHViXG4gICAgICBpZiAoXG4gICAgICAgIGtleWNoYWluLnhwdWIgJiZcbiAgICAgICAga2V5Y2hhaW4uZXRoQWRkcmVzcyAmJlxuICAgICAgICBVdGlsLnhwdWJUb0V0aEFkZHJlc3MgJiZcbiAgICAgICAga2V5Y2hhaW4uZXRoQWRkcmVzcyAhPT0gVXRpbC54cHViVG9FdGhBZGRyZXNzKGtleWNoYWluLnhwdWIpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdldGhBZGRyZXNzIGFuZCB4cHViIGRvIG5vdCBtYXRjaCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGtleWNoYWluO1xuICAgIH0pXG4gICAgLnRoZW4oY2FsbGJhY2spXG4gICAgLmNhdGNoKGNhbGxiYWNrKTtcbn07XG5cbi8vXG4vLyBnZXRcbi8vIEZldGNoIGFuIGV4aXN0aW5nIGtleWNoYWluXG4vLyBQYXJhbWV0ZXJzIGluY2x1ZGU6XG4vLyAgIHhwdWI6ICB0aGUgeHB1YiBvZiB0aGUga2V5IHRvIGxvb2t1cCAocmVxdWlyZWQpXG4vL1xuS2V5Y2hhaW5zLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAocGFyYW1zLCBjYWxsYmFjaykge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFtdLCBbJ3hwdWInLCAnZXRoQWRkcmVzcyddLCBjYWxsYmFjayk7XG5cbiAgaWYgKCFwYXJhbXMueHB1YiAmJiAhcGFyYW1zLmV0aEFkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3hwdWIgb3IgZXRoQWRkcmVzcyBtdXN0IGJlIGRlZmluZWQnKTtcbiAgfVxuXG4gIGNvbnN0IGlkID0gcGFyYW1zLnhwdWIgfHwgcGFyYW1zLmV0aEFkZHJlc3M7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgdGhpcy5iaXRnb1xuICAgICAgLnBvc3QodGhpcy5iaXRnby51cmwoJy9rZXljaGFpbi8nICsgZW5jb2RlVVJJQ29tcG9uZW50KGlkKSkpXG4gICAgICAuc2VuZCh7fSlcbiAgICAgIC5yZXN1bHQoKVxuICApXG4gICAgLnRoZW4oZnVuY3Rpb24gKGtleWNoYWluKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGtleWNoYWluLnhwdWIgJiZcbiAgICAgICAga2V5Y2hhaW4uZXRoQWRkcmVzcyAmJlxuICAgICAgICBVdGlsLnhwdWJUb0V0aEFkZHJlc3MgJiZcbiAgICAgICAga2V5Y2hhaW4uZXRoQWRkcmVzcyAhPT0gVXRpbC54cHViVG9FdGhBZGRyZXNzKGtleWNoYWluLnhwdWIpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdldGhBZGRyZXNzIGFuZCB4cHViIGRvIG5vdCBtYXRjaCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGtleWNoYWluO1xuICAgIH0pXG4gICAgLnRoZW4oY2FsbGJhY2spXG4gICAgLmNhdGNoKGNhbGxiYWNrKTtcbn07XG5cbi8vXG4vLyB1cGRhdGVcbi8vIFVwZGF0ZSBhbiBleGlzdGluZyBrZXljaGFpblxuLy8gUGFyYW1ldGVycyBpbmNsdWRlOlxuLy8gICB4cHViOiAgdGhlIHhwdWIgb2YgdGhlIGtleSB0byBsb29rdXAgKHJlcXVpcmVkKVxuLy9cbktleWNoYWlucy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbJ3hwdWInXSwgWydlbmNyeXB0ZWRYcHJ2J10sIGNhbGxiYWNrKTtcblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgIHRoaXMuYml0Z29cbiAgICAgIC5wdXQodGhpcy5iaXRnby51cmwoJy9rZXljaGFpbi8nICsgcGFyYW1zLnhwdWIpKVxuICAgICAgLnNlbmQoe1xuICAgICAgICBlbmNyeXB0ZWRYcHJ2OiBwYXJhbXMuZW5jcnlwdGVkWHBydixcbiAgICAgIH0pXG4gICAgICAucmVzdWx0KClcbiAgKVxuICAgIC50aGVuKGZ1bmN0aW9uIChrZXljaGFpbikge1xuICAgICAgaWYgKFxuICAgICAgICBrZXljaGFpbi54cHViICYmXG4gICAgICAgIGtleWNoYWluLmV0aEFkZHJlc3MgJiZcbiAgICAgICAgVXRpbC54cHViVG9FdGhBZGRyZXNzICYmXG4gICAgICAgIGtleWNoYWluLmV0aEFkZHJlc3MgIT09IFV0aWwueHB1YlRvRXRoQWRkcmVzcyhrZXljaGFpbi54cHViKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZXRoQWRkcmVzcyBhbmQgeHB1YiBkbyBub3QgbWF0Y2gnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBrZXljaGFpbjtcbiAgICB9KVxuICAgIC50aGVuKGNhbGxiYWNrKVxuICAgIC5jYXRjaChjYWxsYmFjayk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEtleWNoYWlucztcbiJdfQ==
323
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2hhaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3YxL2tleWNoYWlucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7O0FBRUg7R0FDRztBQUNILEVBQUU7QUFDRixtQkFBbUI7QUFDbkIsdUNBQXVDO0FBQ3ZDLEVBQUU7QUFDRixvREFBb0Q7QUFDcEQsRUFBRTtBQUVGLG1EQUE2QztBQUM3QyxtQ0FBcUM7QUFDckMsbURBQXdFO0FBQ3hFLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUU1QixFQUFFO0FBQ0YsY0FBYztBQUNkLEVBQUU7QUFDRixNQUFNLFNBQVMsR0FBRyxVQUFVLEtBQUs7SUFDL0Isc0NBQXNDO0lBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3JCLENBQUMsQ0FBQztBQUVGLEVBQUU7QUFDRixVQUFVO0FBQ1YsZ0VBQWdFO0FBQ2hFLEVBQUU7QUFDRixTQUFTLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxVQUFVLE1BQU07SUFDNUMsTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7SUFDdEIsaUJBQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUV0QyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3ZELE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckIsZ0JBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLENB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U0FDRSxJQUFJLENBQUMsVUFBVSxRQUFRO1FBQ3RCLElBQ0UsUUFBUSxDQUFDLElBQUk7WUFDYixRQUFRLENBQUMsVUFBVTtZQUNuQixlQUFJLENBQUMsZ0JBQWdCO1lBQ3JCLFFBQVEsQ0FBQyxVQUFVLEtBQUssZUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFDNUQsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUNkLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNyQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGhpZGRlblxuICovXG5cbi8qKlxuICovXG4vL1xuLy8gS2V5Y2hhaW5zIE9iamVjdFxuLy8gQml0R28gYWNjZXNzb3IgdG8gYSB1c2VyJ3Mga2V5Y2hhaW4uXG4vL1xuLy8gQ29weXJpZ2h0IDIwMTQsIEJpdEdvLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy9cblxuaW1wb3J0IHsgYmlwMzIgfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBjb21tb24sIFV0aWwsIHNhbml0aXplTGVnYWN5UGF0aCB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcblxuLy9cbi8vIENvbnN0cnVjdG9yXG4vL1xuY29uc3QgS2V5Y2hhaW5zID0gZnVuY3Rpb24gKGJpdGdvKSB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBubyBpbXBsaWNpdCB0aGlzXG4gIHRoaXMuYml0Z28gPSBiaXRnbztcbn07XG5cbi8vXG4vLyBpc1ZhbGlkXG4vLyBUZXN0cyBhIHhwdWIgb3IgeHBydiBzdHJpbmcgdG8gc2VlIGlmIGl0IGlzIGEgdmFsaWQga2V5Y2hhaW4uXG4vL1xuS2V5Y2hhaW5zLnByb3RvdHlwZS5pc1ZhbGlkID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFtdLCBbXSk7XG5cbiAgaWYgKCFfLmlzU3RyaW5nKHBhcmFtcy5rZXkpICYmICFfLmlzT2JqZWN0KHBhcmFtcy5rZXkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdrZXkgbXVzdCBiZSBhIHN0cmluZyBvciBvYmplY3QnKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKCFwYXJhbXMua2V5LnBhdGgpIHtcbiAgICAgIGJpcDMyLmZyb21CYXNlNTgocGFyYW1zLmtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJpcDMyLmZyb21CYXNlNTgocGFyYW1zLmtleS54cHViKS5kZXJpdmVQYXRoKHNhbml0aXplTGVnYWN5UGF0aChwYXJhbXMua2V5LnBhdGgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbi8vXG4vLyBjcmVhdGVcbi8vIENyZWF0ZSBhIG5ldyBrZXljaGFpbiBsb2NhbGx5LlxuLy8gRG9lcyBub3Qgc2VuZCB0aGUga2V5Y2hhaW4gdG8gYml0Z28sIG9ubHkgY3JlYXRlcyBsb2NhbGx5LlxuLy8gSWYgfHNlZWR8IGlzIHByb3ZpZGVkLCB1c2VkIHRvIHNlZWQgdGhlIGtleWNoYWluLiAgT3RoZXJ3aXNlLFxuLy8gYSByYW5kb20ga2V5Y2hhaW4gaXMgY3JlYXRlZC5cbi8vXG5LZXljaGFpbnMucHJvdG90eXBlLmNyZWF0ZSA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbXSwgW10pO1xuXG4gIGxldCBzZWVkO1xuICBpZiAoIXBhcmFtcy5zZWVkKSB7XG4gICAgLy8gQW4gZXh0ZW5kZWQgcHJpdmF0ZSBrZXkgaGFzIGJvdGggYSBub3JtYWwgMjU2IGJpdCBwcml2YXRlIGtleSBhbmQgYSAyNTZcbiAgICAvLyBiaXQgY2hhaW4gY29kZSwgYm90aCBvZiB3aGljaCBtdXN0IGJlIHJhbmRvbS4gNTEyIGJpdHMgaXMgdGhlcmVmb3JlIHRoZVxuICAgIC8vIG1heGltdW0gZW50cm9weSBhbmQgZ2l2ZXMgdXMgbWF4aW11bSBzZWN1cml0eSBhZ2FpbnN0IGNyYWNraW5nLlxuICAgIHNlZWQgPSByYW5kb21CeXRlcyg1MTIgLyA4KTtcbiAgfSBlbHNlIHtcbiAgICBzZWVkID0gcGFyYW1zLnNlZWQ7XG4gIH1cblxuICBjb25zdCBleHRlbmRlZEtleSA9IGJpcDMyLmZyb21TZWVkKHNlZWQpO1xuICBjb25zdCB4cHViID0gZXh0ZW5kZWRLZXkubmV1dGVyZWQoKS50b0Jhc2U1OCgpO1xuXG4gIGxldCBldGhBZGRyZXNzO1xuICB0cnkge1xuICAgIGV0aEFkZHJlc3MgPSBVdGlsLnhwdWJUb0V0aEFkZHJlc3MoeHB1Yik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBldGhlcmV1bSBpcyB1bmF2YWlsYWJsZVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4cHViOiB4cHViLFxuICAgIHhwcnY6IGV4dGVuZGVkS2V5LnRvQmFzZTU4KCksXG4gICAgZXRoQWRkcmVzczogZXRoQWRkcmVzcyxcbiAgfTtcbn07XG5cbi8vIHVzZWQgYnkgZGVyaXZlTG9jYWxcbmNvbnN0IGFwaVJlc3BvbnNlID0gZnVuY3Rpb24gKHN0YXR1cywgcmVzdWx0LCBtZXNzYWdlKSB7XG4gIGNvbnN0IGVycjogYW55ID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICBlcnIuc3RhdHVzID0gc3RhdHVzO1xuICBlcnIucmVzdWx0ID0gcmVzdWx0O1xuICByZXR1cm4gZXJyO1xufTtcblxuLy9cbi8vIGRlcml2ZUxvY2FsXG4vLyBMb2NhbGx5IGRlcml2ZXMgYSBrZXljaGFpbiBmcm9tIGEgdG9wIGxldmVsIEJJUDMyIHN0cmluZywgZ2l2ZW4gYSBwYXRoLlxuLy9cbktleWNoYWlucy5wcm90b3R5cGUuZGVyaXZlTG9jYWwgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywgWydwYXRoJ10sIFsneHBydicsICd4cHViJ10pO1xuXG4gIGlmICghcGFyYW1zLnhwcnYgJiYgIXBhcmFtcy54cHViKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdXN0IHByb3ZpZGUgYW4geHB1YiBvciB4cHJ2IGZvciBkZXJpdmF0aW9uLicpO1xuICB9XG4gIGlmIChwYXJhbXMueHBydiAmJiBwYXJhbXMueHB1Yikge1xuICAgIHRocm93IG5ldyBFcnJvcignY2Fubm90IHByb3ZpZGUgYm90aCB4cHViIGFuZCB4cHJ2Jyk7XG4gIH1cblxuICBsZXQgaGROb2RlO1xuICB0cnkge1xuICAgIGhkTm9kZSA9IGJpcDMyLmZyb21CYXNlNTgocGFyYW1zLnhwcnYgfHwgcGFyYW1zLnhwdWIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgYXBpUmVzcG9uc2UoNDAwLCB7fSwgJ1VuYWJsZSB0byBwYXJzZSB0aGUgeHBydiBvciB4cHViJyk7XG4gIH1cblxuICBsZXQgZGVyaXZlZE5vZGU7XG4gIHRyeSB7XG4gICAgZGVyaXZlZE5vZGUgPSBoZE5vZGUuZGVyaXZlUGF0aChzYW5pdGl6ZUxlZ2FjeVBhdGgocGFyYW1zLnBhdGgpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IGFwaVJlc3BvbnNlKDQwMCwge30sICdVbmFibGUgdG8gZGVyaXZlIEhEIGtleSBmcm9tIHBhdGgnKTtcbiAgfVxuXG4gIGNvbnN0IHhwdWIgPSBkZXJpdmVkTm9kZS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCk7XG5cbiAgbGV0IGV0aEFkZHJlc3M7XG4gIHRyeSB7XG4gICAgZXRoQWRkcmVzcyA9IFV0aWwueHB1YlRvRXRoQWRkcmVzcyh4cHViKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIGV0aGVyZXVtIGlzIHVuYXZhaWxhYmxlXG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhdGg6IHBhcmFtcy5wYXRoLFxuICAgIHhwdWI6IHhwdWIsXG4gICAgeHBydjogcGFyYW1zLnhwcnYgJiYgZGVyaXZlZE5vZGUudG9CYXNlNTgoKSxcbiAgICBldGhBZGRyZXNzOiBldGhBZGRyZXNzLFxuICB9O1xufTtcblxuLy9cbi8vIGxpc3Rcbi8vIExpc3QgdGhlIHVzZXIncyBrZXljaGFpbnNcbi8vXG5LZXljaGFpbnMucHJvdG90eXBlLmxpc3QgPSBmdW5jdGlvbiAocGFyYW1zLCBjYWxsYmFjaykge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFtdLCBbXSwgY2FsbGJhY2spO1xuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5iaXRnby5nZXQodGhpcy5iaXRnby51cmwoJy9rZXljaGFpbicpKS5yZXN1bHQoJ2tleWNoYWlucycpKVxuICAgIC50aGVuKGZ1bmN0aW9uIChrZXljaGFpbnMpIHtcbiAgICAgIGtleWNoYWlucy5tYXAoZnVuY3Rpb24gKGtleWNoYWluKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBrZXljaGFpbi54cHViICYmXG4gICAgICAgICAga2V5Y2hhaW4uZXRoQWRkcmVzcyAmJlxuICAgICAgICAgIFV0aWwueHB1YlRvRXRoQWRkcmVzcyAmJlxuICAgICAgICAgIGtleWNoYWluLmV0aEFkZHJlc3MgIT09IFV0aWwueHB1YlRvRXRoQWRkcmVzcyhrZXljaGFpbi54cHViKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V0aEFkZHJlc3MgYW5kIHhwdWIgZG8gbm90IG1hdGNoJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGtleWNoYWlucztcbiAgICB9KVxuICAgIC50aGVuKGNhbGxiYWNrKVxuICAgIC5jYXRjaChjYWxsYmFjayk7XG59O1xuXG4vKipcbiAqIGl0ZXJhdGVzIHRocm91Z2ggYWxsIGtleXMgYXNzb2NpYXRlZCB3aXRoIHRoZSB1c2VyLCBkZWNyeXB0cyB0aGVtIHdpdGggdGhlIG9sZCBwYXNzd29yZCBhbmQgZW5jcnlwdHMgdGhlbSB3aXRoIHRoZVxuICogbmV3IHBhc3N3b3JkXG4gKiBAcGFyYW0gcGFyYW1zLm9sZFBhc3N3b3JkIHtTdHJpbmd9IC0gVGhlIG9sZCBwYXNzd29yZCB1c2VkIGZvciBlbmNyeXB0aW5nIHRoZSBrZXlcbiAqIEBwYXJhbSBwYXJhbXMubmV3UGFzc3dvcmQge1N0cmluZ30gLSBUaGUgbmV3IHBhc3N3b3JkIHRvIGJlIHVzZWQgZm9yIGVuY3J5cHRpbmcgdGhlIGtleVxuICogQHBhcmFtIGNhbGxiYWNrXG4gKiBAcmV0dXJucyByZXN1bHQua2V5Y2hhaW5zIHtPYmplY3R9IC0gZS5nLjpcbiAqICB7XG4gKiAgICB4cHViMTogZW5jcnlwdGVkUHJ2MSxcbiAqICAgIHhwdWIyOiBlbmNyeXB0ZWRQcnYyLFxuICogICAgLi4uXG4gKiAgfVxuICogIEByZXR1cm5zIHJlc3VsdC52ZXJzaW9uIHtOdW1iZXJ9XG4gKi9cbktleWNoYWlucy5wcm90b3R5cGUudXBkYXRlUGFzc3dvcmQgPSBmdW5jdGlvbiAocGFyYW1zLCBjYWxsYmFjaykge1xuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gY29VcGRhdGVQYXNzd29yZCgpIHtcbiAgICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbJ29sZFBhc3N3b3JkJywgJ25ld1Bhc3N3b3JkJ10sIFtdLCBjYWxsYmFjayk7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIG5vIGltcGxpY2l0IHRoaXNcbiAgICBjb25zdCBlbmNyeXB0ZWQgPSBhd2FpdCB0aGlzLmJpdGdvLnBvc3QodGhpcy5iaXRnby51cmwoJy91c2VyL2VuY3J5cHRlZCcpKS5yZXN1bHQoKTtcbiAgICBjb25zdCBuZXdLZXljaGFpbnMgPSB7fTtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gbm8gaW1wbGljaXQgdGhpc1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGZvciAoY29uc3QgW3hwdWIsIG9sZEVuY3J5cHRlZFhwcnZdIG9mIE9iamVjdC5lbnRyaWVzKChlbmNyeXB0ZWQgYXMgYW55KS5rZXljaGFpbnMpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkZWNyeXB0ZWRQcnYgPSBhd2FpdCBzZWxmLmJpdGdvLmRlY3J5cHRBc3luYyh7XG4gICAgICAgICAgaW5wdXQ6IG9sZEVuY3J5cHRlZFhwcnYgYXMgc3RyaW5nLFxuICAgICAgICAgIHBhc3N3b3JkOiBwYXJhbXMub2xkUGFzc3dvcmQsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBuZXdFbmNyeXB0ZWRQcnYgPSBhd2FpdCBzZWxmLmJpdGdvLmVuY3J5cHRBc3luYyh7IGlucHV0OiBkZWNyeXB0ZWRQcnYsIHBhc3N3b3JkOiBwYXJhbXMubmV3UGFzc3dvcmQgfSk7XG4gICAgICAgIG5ld0tleWNoYWluc1t4cHViXSA9IG5ld0VuY3J5cHRlZFBydjtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gZGVjcnlwdGluZyB0aGUga2V5Y2hhaW4gd2l0aCB0aGUgb2xkIHBhc3N3b3JkIGRpZG4ndCB3b3JrIHNvIHdlIGp1c3Qga2VlcCBpdCB0aGUgd2F5IGl0IGlzXG4gICAgICAgIG5ld0tleWNoYWluc1t4cHViXSA9IG9sZEVuY3J5cHRlZFhwcnYgYXMgc3RyaW5nO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBrZXljaGFpbnM6IG5ld0tleWNoYWlucywgdmVyc2lvbjogKGVuY3J5cHRlZCBhcyBhbnkpLnZlcnNpb24gfTtcbiAgfVxuICAgIC5jYWxsKHRoaXMpXG4gICAgLnRoZW4oY2FsbGJhY2spXG4gICAgLmNhdGNoKGNhbGxiYWNrKTtcbn07XG5cbi8vXG4vLyBhZGRcbi8vIEFkZCBhIG5ldyBrZXljaGFpblxuLy9cbktleWNoYWlucy5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbJ3hwdWInXSwgWydlbmNyeXB0ZWRYcHJ2JywgJ3R5cGUnLCAnaXNMZWRnZXInXSwgY2FsbGJhY2spO1xuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgdGhpcy5iaXRnb1xuICAgICAgLnBvc3QodGhpcy5iaXRnby51cmwoJy9rZXljaGFpbicpKVxuICAgICAgLnNlbmQoe1xuICAgICAgICB4cHViOiBwYXJhbXMueHB1YixcbiAgICAgICAgZW5jcnlwdGVkWHBydjogcGFyYW1zLmVuY3J5cHRlZFhwcnYsXG4gICAgICAgIHR5cGU6IHBhcmFtcy50eXBlLFxuICAgICAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6IHBhcmFtcy5vcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgICAgIGlzTGVkZ2VyOiBwYXJhbXMuaXNMZWRnZXIsXG4gICAgICB9KVxuICAgICAgLnJlc3VsdCgpXG4gIClcbiAgICAudGhlbihmdW5jdGlvbiAoa2V5Y2hhaW4pIHtcbiAgICAgIGlmIChcbiAgICAgICAga2V5Y2hhaW4ueHB1YiAmJlxuICAgICAgICBrZXljaGFpbi5ldGhBZGRyZXNzICYmXG4gICAgICAgIFV0aWwueHB1YlRvRXRoQWRkcmVzcyAmJlxuICAgICAgICBrZXljaGFpbi5ldGhBZGRyZXNzICE9PSBVdGlsLnhwdWJUb0V0aEFkZHJlc3Moa2V5Y2hhaW4ueHB1YilcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V0aEFkZHJlc3MgYW5kIHhwdWIgZG8gbm90IG1hdGNoJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4ga2V5Y2hhaW47XG4gICAgfSlcbiAgICAudGhlbihjYWxsYmFjaylcbiAgICAuY2F0Y2goY2FsbGJhY2spO1xufTtcblxuLy9cbi8vIGNyZWF0ZUJpdEdvXG4vLyBBZGQgYSBuZXcgQml0R28gc2VydmVyIGtleWNoYWluXG4vL1xuS2V5Y2hhaW5zLnByb3RvdHlwZS5jcmVhdGVCaXRHbyA9IGZ1bmN0aW9uIChwYXJhbXMsIGNhbGxiYWNrKSB7XG4gIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywgW10sIFtdLCBjYWxsYmFjayk7XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmJpdGdvLnBvc3QodGhpcy5iaXRnby51cmwoJy9rZXljaGFpbi9iaXRnbycpKS5zZW5kKHBhcmFtcykucmVzdWx0KCkpXG4gICAgLnRoZW4oZnVuY3Rpb24gKGtleWNoYWluKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGtleWNoYWluLnhwdWIgJiZcbiAgICAgICAga2V5Y2hhaW4uZXRoQWRkcmVzcyAmJlxuICAgICAgICBVdGlsLnhwdWJUb0V0aEFkZHJlc3MgJiZcbiAgICAgICAga2V5Y2hhaW4uZXRoQWRkcmVzcyAhPT0gVXRpbC54cHViVG9FdGhBZGRyZXNzKGtleWNoYWluLnhwdWIpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdldGhBZGRyZXNzIGFuZCB4cHViIGRvIG5vdCBtYXRjaCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGtleWNoYWluO1xuICAgIH0pXG4gICAgLnRoZW4oY2FsbGJhY2spXG4gICAgLmNhdGNoKGNhbGxiYWNrKTtcbn07XG5cbi8vXG4vLyBjcmVhdGVCYWNrdXBcbi8vIENyZWF0ZSBhIG5ldyBiYWNrdXAga2V5Y2hhaW4gdGhyb3VnaCBiaXRnbyAtIG9mdGVuIHVzZWQgZm9yIGNyZWF0aW5nIGEga2V5Y2hhaW4gb24gYSBLUlNcbi8vXG5LZXljaGFpbnMucHJvdG90eXBlLmNyZWF0ZUJhY2t1cCA9IGZ1bmN0aW9uIChwYXJhbXMsIGNhbGxiYWNrKSB7XG4gIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywgWydwcm92aWRlciddLCBbXSwgY2FsbGJhY2spO1xuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5iaXRnby5wb3N0KHRoaXMuYml0Z28udXJsKCcva2V5Y2hhaW4vYmFja3VwJykpLnNlbmQocGFyYW1zKS5yZXN1bHQoKSlcbiAgICAudGhlbihmdW5jdGlvbiAoa2V5Y2hhaW4pIHtcbiAgICAgIC8vIG5vdCBhbGwga2V5Y2hhaW5zIGhhdmUgYW4geHB1YlxuICAgICAgaWYgKFxuICAgICAgICBrZXljaGFpbi54cHViICYmXG4gICAgICAgIGtleWNoYWluLmV0aEFkZHJlc3MgJiZcbiAgICAgICAgVXRpbC54cHViVG9FdGhBZGRyZXNzICYmXG4gICAgICAgIGtleWNoYWluLmV0aEFkZHJlc3MgIT09IFV0aWwueHB1YlRvRXRoQWRkcmVzcyhrZXljaGFpbi54cHViKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZXRoQWRkcmVzcyBhbmQgeHB1YiBkbyBub3QgbWF0Y2gnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBrZXljaGFpbjtcbiAgICB9KVxuICAgIC50aGVuKGNhbGxiYWNrKVxuICAgIC5jYXRjaChjYWxsYmFjayk7XG59O1xuXG4vL1xuLy8gZ2V0XG4vLyBGZXRjaCBhbiBleGlzdGluZyBrZXljaGFpblxuLy8gUGFyYW1ldGVycyBpbmNsdWRlOlxuLy8gICB4cHViOiAgdGhlIHhwdWIgb2YgdGhlIGtleSB0byBsb29rdXAgKHJlcXVpcmVkKVxuLy9cbktleWNoYWlucy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbXSwgWyd4cHViJywgJ2V0aEFkZHJlc3MnXSwgY2FsbGJhY2spO1xuXG4gIGlmICghcGFyYW1zLnhwdWIgJiYgIXBhcmFtcy5ldGhBZGRyZXNzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd4cHViIG9yIGV0aEFkZHJlc3MgbXVzdCBiZSBkZWZpbmVkJyk7XG4gIH1cblxuICBjb25zdCBpZCA9IHBhcmFtcy54cHViIHx8IHBhcmFtcy5ldGhBZGRyZXNzO1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgIHRoaXMuYml0Z29cbiAgICAgIC5wb3N0KHRoaXMuYml0Z28udXJsKCcva2V5Y2hhaW4vJyArIGVuY29kZVVSSUNvbXBvbmVudChpZCkpKVxuICAgICAgLnNlbmQoe30pXG4gICAgICAucmVzdWx0KClcbiAgKVxuICAgIC50aGVuKGZ1bmN0aW9uIChrZXljaGFpbikge1xuICAgICAgaWYgKFxuICAgICAgICBrZXljaGFpbi54cHViICYmXG4gICAgICAgIGtleWNoYWluLmV0aEFkZHJlc3MgJiZcbiAgICAgICAgVXRpbC54cHViVG9FdGhBZGRyZXNzICYmXG4gICAgICAgIGtleWNoYWluLmV0aEFkZHJlc3MgIT09IFV0aWwueHB1YlRvRXRoQWRkcmVzcyhrZXljaGFpbi54cHViKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZXRoQWRkcmVzcyBhbmQgeHB1YiBkbyBub3QgbWF0Y2gnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBrZXljaGFpbjtcbiAgICB9KVxuICAgIC50aGVuKGNhbGxiYWNrKVxuICAgIC5jYXRjaChjYWxsYmFjayk7XG59O1xuXG4vL1xuLy8gdXBkYXRlXG4vLyBVcGRhdGUgYW4gZXhpc3Rpbmcga2V5Y2hhaW5cbi8vIFBhcmFtZXRlcnMgaW5jbHVkZTpcbi8vICAgeHB1YjogIHRoZSB4cHViIG9mIHRoZSBrZXkgdG8gbG9va3VwIChyZXF1aXJlZClcbi8vXG5LZXljaGFpbnMucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChwYXJhbXMsIGNhbGxiYWNrKSB7XG4gIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywgWyd4cHViJ10sIFsnZW5jcnlwdGVkWHBydiddLCBjYWxsYmFjayk7XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICB0aGlzLmJpdGdvXG4gICAgICAucHV0KHRoaXMuYml0Z28udXJsKCcva2V5Y2hhaW4vJyArIHBhcmFtcy54cHViKSlcbiAgICAgIC5zZW5kKHtcbiAgICAgICAgZW5jcnlwdGVkWHBydjogcGFyYW1zLmVuY3J5cHRlZFhwcnYsXG4gICAgICB9KVxuICAgICAgLnJlc3VsdCgpXG4gIClcbiAgICAudGhlbihmdW5jdGlvbiAoa2V5Y2hhaW4pIHtcbiAgICAgIGlmIChcbiAgICAgICAga2V5Y2hhaW4ueHB1YiAmJlxuICAgICAgICBrZXljaGFpbi5ldGhBZGRyZXNzICYmXG4gICAgICAgIFV0aWwueHB1YlRvRXRoQWRkcmVzcyAmJlxuICAgICAgICBrZXljaGFpbi5ldGhBZGRyZXNzICE9PSBVdGlsLnhwdWJUb0V0aEFkZHJlc3Moa2V5Y2hhaW4ueHB1YilcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V0aEFkZHJlc3MgYW5kIHhwdWIgZG8gbm90IG1hdGNoJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4ga2V5Y2hhaW47XG4gICAgfSlcbiAgICAudGhlbihjYWxsYmFjaylcbiAgICAuY2F0Y2goY2FsbGJhY2spO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBLZXljaGFpbnM7XG4iXX0=
@@ -304,19 +304,19 @@ TravelRule.prototype.sendMany = function (params, callback) {
304
304
  return self.validateTravelInfo(travelInfo);
305
305
  })
306
306
  .value();
307
- return self.getRecipients({ txid: params.txid }).then(function (recipients) {
307
+ return self.getRecipients({ txid: params.txid }).then(async function (recipients) {
308
308
  // Build up data to post
309
309
  const sendParamsList = [];
310
310
  // don't regenerate a new random key for each recipient
311
311
  const fromKey = params.fromKey || (0, sdk_core_1.makeRandomKey)().toWIF();
312
- recipients.forEach(function (recipient) {
312
+ for (const recipient of recipients) {
313
313
  const outputIndex = recipient.outputIndex;
314
314
  const info = travelInfoMap[outputIndex];
315
315
  if (info) {
316
316
  if (info.amount && info.amount !== recipient.amount) {
317
317
  throw new Error('amount did not match for output index ' + outputIndex);
318
318
  }
319
- const sendParams = self.prepareParams({
319
+ const sendParams = await self.prepareParamsAsync({
320
320
  txid: params.txid,
321
321
  recipient: recipient,
322
322
  travelInfo: info,
@@ -325,7 +325,7 @@ TravelRule.prototype.sendMany = function (params, callback) {
325
325
  });
326
326
  sendParamsList.push(sendParams);
327
327
  }
328
- });
328
+ }
329
329
  const result = {
330
330
  matched: sendParamsList.length,
331
331
  results: [],
@@ -350,4 +350,4 @@ TravelRule.prototype.sendMany = function (params, callback) {
350
350
  });
351
351
  };
352
352
  module.exports = TravelRule;
353
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhdmVsUnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92MS90cmF2ZWxSdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSDtHQUNHO0FBQ0gsRUFBRTtBQUNGLG9CQUFvQjtBQUNwQiwyQ0FBMkM7QUFDM0MsRUFBRTtBQUNGLG9EQUFvRDtBQUNwRCxFQUFFO0FBQ0YsbURBQThHO0FBQzlHLG1EQUE2RDtBQUM3RCw4REFBZ0Q7QUFDaEQsb0RBQXVCO0FBMkJ2QixFQUFFO0FBQ0YsY0FBYztBQUNkLEVBQUU7QUFDRixNQUFNLFVBQVUsR0FBRyxVQUFVLEtBQUs7SUFDaEMsc0NBQXNDO0lBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3JCLENBQUMsQ0FBQztBQUVGLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLFVBQVUsS0FBSztJQUN4QyxLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUNwQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUM1QyxDQUFDLENBQUM7QUFFRjs7Ozs7O0dBTUc7QUFDSCxVQUFVLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxVQUFVLE1BQU0sRUFBRSxRQUFRO0lBQzdELE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO0lBQ3RCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ3pDLGlCQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUV0RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdB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LE9BQU87b0JBQ2hCLFVBQVUsRUFBRSxJQUFJLEVBQUUsb0JBQW9CO2lCQUN2QyxDQUFDLENBQUM7Z0JBQ0gsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNsQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLE1BQU0sR0FNUjtZQUNGLE9BQU8sRUFBRSxjQUFjLENBQUMsTUFBTTtZQUM5QixPQUFPLEVBQUUsRUFBRTtTQUNaLENBQUM7UUFFRixNQUFNLFVBQVUsR0FBRztZQUNqQixNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNoQixPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO1lBQ0QsT0FBTyxJQUFJO2lCQUNSLElBQUksQ0FBQyxVQUFVLENBQUM7aUJBQ2hCLElBQUksQ0FBQyxVQUFVLEdBQUc7Z0JBQ2pCLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQ3JDLE9BQU8sVUFBVSxFQUFFLENBQUM7WUFDdEIsQ0FBQyxDQUFDO2lCQUNELEtBQUssQ0FBQyxVQUFVLEdBQUc7Z0JBQ2xCLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQy9DLE9BQU8sVUFBVSxFQUFFLENBQUM7WUFDdEIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUM7UUFFRixPQUFPLFVBQVUsRUFBRSxDQUFDO0lBQ3RCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBoaWRkZW5cbiAqL1xuXG4vKipcbiAqL1xuLy9cbi8vIFRyYXZlbFJ1bGUgT2JqZWN0XG4vLyBCaXRHbyBhY2Nlc3NvciBmb3IgYSBzcGVjaWZpYyBlbnRlcnByaXNlXG4vL1xuLy8gQ29weXJpZ2h0IDIwMTQsIEJpdEdvLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy9cbmltcG9ydCB7IGNvbW1vbiwgZ2V0TmV0d29yaywgZ2V0U2hhcmVkU2VjcmV0LCBtYWtlUmFuZG9tS2V5LCBzYW5pdGl6ZUxlZ2FjeVBhdGggfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBiaXAzMiwgQklQMzJJbnRlcmZhY2UgfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmludGVyZmFjZSBSZWNlaXZlZFRyYXZlbEluZm9FbnRyeSB7XG4gIHRvUHViS2V5UGF0aDogc3RyaW5nO1xuICBmcm9tUHViS2V5OiBzdHJpbmc7XG4gIGVuY3J5cHRlZFRyYXZlbEluZm86IHN0cmluZztcbiAgdHJhdmVsSW5mbzogc3RyaW5nO1xuICB0cmFuc2FjdGlvbklkOiBzdHJpbmc7XG4gIG91dHB1dEluZGV4OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBEZWNyeXB0UmVjZWl2ZWRUcmF2ZWxSdWxlT3B0aW9ucyB7XG4gIHR4Pzoge1xuICAgIHJlY2VpdmVkVHJhdmVsSW5mbz86IFJlY2VpdmVkVHJhdmVsSW5mb0VudHJ5W107XG4gIH07XG4gIGtleWNoYWluPzoge1xuICAgIHhwcnY/OiBzdHJpbmc7XG4gIH07XG4gIGhkbm9kZT86IEJJUDMySW50ZXJmYWNlO1xufVxuXG5pbnRlcmZhY2UgUmVjaXBpZW50IHtcbiAgZW50ZXJwcmlzZTogc3RyaW5nO1xuICBwdWJLZXk6IHN0cmluZztcbiAgb3V0cHV0SW5kZXg6IHN0cmluZztcbn1cblxuLy9cbi8vIENvbnN0cnVjdG9yXG4vL1xuY29uc3QgVHJhdmVsUnVsZSA9IGZ1bmN0aW9uIChiaXRnbykge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gbm8gaW1wbGljaXQgdGhpc1xuICB0aGlzLmJpdGdvID0gYml0Z287XG59O1xuXG5UcmF2ZWxSdWxlLnByb3RvdHlwZS51cmwgPSBmdW5jdGlvbiAoZXh0cmEpIHtcbiAgZXh0cmEgPSBleHRyYSB8fCAnJztcbiAgcmV0dXJuIHRoaXMuYml0Z28udXJsKCcvdHJhdmVsLycgKyBleHRyYSk7XG59O1xuXG4vKipcbiAqIEdldCBhdmFpbGFibGUgdHJhdmVsLXJ1bGUgaW5mbyByZWNpcGllbnRzIGZvciBhIHRyYW5zYWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1zXG4gKiAgdHhpZDogdHJhbnNhY3Rpb24gaWRcbiAqIEBwYXJhbSBjYWxsYmFja1xuICogQHJldHVybnMgeyp9XG4gKi9cblRyYXZlbFJ1bGUucHJvdG90eXBlLmdldFJlY2lwaWVudHMgPSBmdW5jdGlvbiAocGFyYW1zLCBjYWxsYmFjaykge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gIHBhcmFtcy50eGlkID0gcGFyYW1zLnR4aWQgfHwgcGFyYW1zLmhhc2g7XG4gIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFsndHhpZCddLCBbXSwgY2FsbGJhY2spO1xuXG4gIGNvbnN0IHVybCA9IHRoaXMudXJsKHBhcmFtcy50eGlkICsgJy9yZWNpcGllbnRzJyk7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5iaXRnby5nZXQodXJsKS5yZXN1bHQoJ3JlY2lwaWVudHMnKSkudGhlbihjYWxsYmFjaykuY2F0Y2goY2FsbGJhY2spO1xufTtcblxuVHJhdmVsUnVsZS5wcm90b3R5cGUudmFsaWRhdGVUcmF2ZWxJbmZvID0gZnVuY3Rpb24gKGluZm8pIHtcbiAgY29uc3QgZmllbGRzID0ge1xuICAgIGFtb3VudDogeyB0eXBlOiAnbnVtYmVyJyB9LFxuICAgIHRvQWRkcmVzczogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgIHRvRW50ZXJwcmlzZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgIGZyb21Vc2VyTmFtZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgIGZyb21Vc2VyQWNjb3VudDogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgIGZyb21Vc2VyQWRkcmVzczogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgIHRvVXNlck5hbWU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICB0b1VzZXJBY2NvdW50OiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgdG9Vc2VyQWRkcmVzczogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgIGV4dHJhOiB7IHR5cGU6ICdvYmplY3QnIH0sXG4gIH07XG5cbiAgXy5mb3JFYWNoKGZpZWxkcywgZnVuY3Rpb24gKGZpZWxkOiBhbnksIGZpZWxkTmFtZSkge1xuICAgIC8vIE5vIHJlcXVpcmVkIGZpZWxkcyB5ZXQgLS0gc2hvdWxkIHRoZXJlIGJlP1xuICAgIGlmIChmaWVsZC5yZXF1aXJlZCkge1xuICAgICAgaWYgKGluZm9bZmllbGROYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBmaWVsZCAnICsgZmllbGROYW1lICsgJyBpbiB0cmF2ZWwgaW5mbycpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaW5mb1tmaWVsZE5hbWVdICYmIHR5cGVvZiBpbmZvW2ZpZWxkTmFtZV0gIT09IGZpZWxkLnR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW5jb3JyZWN0IHR5cGUgZm9yIGZpZWxkICcgKyBmaWVsZE5hbWUgKyAnIGluIHRyYXZlbCBpbmZvLCBleHBlY3RlZCAnICsgZmllbGQudHlwZSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBTdHJpcCBvdXQgYW55IG90aGVyIGZpZWxkcyB3ZSBkb24ndCBrbm93IGFib3V0XG4gIGNvbnN0IHJlc3VsdCA9IF8ucGljayhpbmZvLCBfLmtleXMoZmllbGRzKSk7XG4gIGlmIChfLmlzRW1wdHkocmVzdWx0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZW1wdHkgdHJhdmVsIGRhdGEnKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZnVuY3Rpb24gdmFsaWRhdGVUcmF2ZWxSdWxlRGVjcnlwdFBhcmFtcyhwYXJhbXM6IERlY3J5cHRSZWNlaXZlZFRyYXZlbFJ1bGVPcHRpb25zID0ge30pIHtcbiAgY29uc3QgdHggPSBwYXJhbXMudHg7XG4gIGlmICghXy5pc09iamVjdCh0eCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGluZyB0eCBwYXJhbSB0byBiZSBvYmplY3QnKTtcbiAgfVxuXG4gIGlmICghdHgucmVjZWl2ZWRUcmF2ZWxJbmZvIHx8ICF0eC5yZWNlaXZlZFRyYXZlbEluZm8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHsgdHgsIGhkTm9kZTogdW5kZWZpbmVkIGFzIEJJUDMySW50ZXJmYWNlIHwgdW5kZWZpbmVkIH07XG4gIH1cblxuICBjb25zdCBrZXljaGFpbiA9IHBhcmFtcy5rZXljaGFpbjtcbiAgaWYgKCFfLmlzT2JqZWN0KGtleWNoYWluKSB8fCAhXy5pc1N0cmluZyhrZXljaGFpbi54cHJ2KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0aW5nIGtleWNoYWluIHBhcmFtIHdpdGggeHBydicpO1xuICB9XG4gIGNvbnN0IGhkTm9kZSA9IGJpcDMyLmZyb21CYXNlNTgoa2V5Y2hhaW4ueHBydik7XG4gIHJldHVybiB7IHR4LCBoZE5vZGUgfTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZVRyYXZlbFJ1bGVQYXJhbXNDb21tb24oc2VsZjogeyB2YWxpZGF0ZVRyYXZlbEluZm86IChpbmZvOiBhbnkpID0+IGFueSB9LCBwYXJhbXM6IGFueSkge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gIHBhcmFtcy50eGlkID0gcGFyYW1zLnR4aWQgfHwgcGFyYW1zLmhhc2g7XG4gIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFsndHhpZCddLCBbJ2Zyb21Qcml2YXRlSW5mbyddKTtcbiAgY29uc3QgdHhpZCA9IHBhcmFtcy50eGlkO1xuICBjb25zdCByZWNpcGllbnQ6IFJlY2lwaWVudCB8IHVuZGVmaW5lZCA9IHBhcmFtcy5yZWNpcGllbnQ7XG4gIGxldCB0cmF2ZWxJbmZvID0gcGFyYW1zLnRyYXZlbEluZm87XG4gIGlmICghcmVjaXBpZW50IHx8ICFfLmlzT2JqZWN0KHJlY2lwaWVudCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgb3IgbWlzc2luZyByZWNpcGllbnQnKTtcbiAgfVxuICBpZiAoIXRyYXZlbEluZm8gfHwgIV8uaXNPYmplY3QodHJhdmVsSW5mbykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgb3IgbWlzc2luZyB0cmF2ZWxJbmZvJyk7XG4gIH1cbiAgaWYgKCFwYXJhbXMubm9WYWxpZGF0ZSkge1xuICAgIHRyYXZlbEluZm8gPSBzZWxmLnZhbGlkYXRlVHJhdmVsSW5mbyh0cmF2ZWxJbmZvKTtcbiAgfVxuXG4gIGlmICghdHJhdmVsSW5mby50b0VudGVycHJpc2UgJiYgcmVjaXBpZW50LmVudGVycHJpc2UpIHtcbiAgICB0cmF2ZWxJbmZvLnRvRW50ZXJwcmlzZSA9IHJlY2lwaWVudC5lbnRlcnByaXNlO1xuICB9XG5cbiAgLy8gSWYgYSBrZXkgd2FzIG5vdCBwcm92aWRlZCwgY3JlYXRlIGEgbmV3IHJhbmRvbSBrZXlcbiAgbGV0IGZyb21LZXkgPSBwYXJhbXMuZnJvbUtleSAmJiB1dHhvbGliLkVDUGFpci5mcm9tV0lGKHBhcmFtcy5mcm9tS2V5LCBnZXROZXR3b3JrKCkgYXMgdXR4b2xpYi5CaXRjb2luSlNOZXR3b3JrKTtcbiAgaWYgKCFmcm9tS2V5KSB7XG4gICAgZnJvbUtleSA9IG1ha2VSYW5kb21LZXkoKTtcbiAgfVxuXG4gIC8vIENvbXB1dGUgdGhlIHNoYXJlZCBrZXkgZm9yIGVuY3J5cHRpb25cbiAgY29uc3Qgc2hhcmVkU2VjcmV0ID0gZ2V0U2hhcmVkU2VjcmV0KGZyb21LZXksIEJ1ZmZlci5mcm9tKHJlY2lwaWVudC5wdWJLZXksICdoZXgnKSkudG9TdHJpbmcoJ2hleCcpO1xuXG4gIC8vIEpTT04taWZ5IGFuZCBlbmNyeXB0IHRoZSBwYXlsb2FkXG4gIGNvbnN0IHRyYXZlbEluZm9KU09OID0gSlNPTi5zdHJpbmdpZnkodHJhdmVsSW5mbyk7XG5cbiAgcmV0dXJuIHtcbiAgICB0eGlkLFxuICAgIHJlY2lwaWVudCxcbiAgICB0cmF2ZWxJbmZvSlNPTixcbiAgICBmcm9tS2V5LFxuICAgIHNoYXJlZFNlY3JldCxcbiAgICBmcm9tUHJpdmF0ZUluZm86IHBhcmFtcy5mcm9tUHJpdmF0ZUluZm8sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkVHJhdmVsUnVsZVNlbmRQYXJhbXMoXG4gIHByZXBhcmVkOiB7XG4gICAgdHhpZDogc3RyaW5nO1xuICAgIHJlY2lwaWVudDogUmVjaXBpZW50O1xuICAgIGZyb21LZXk6IHV0eG9saWIuRUNQYWlySW50ZXJmYWNlO1xuICAgIGZyb21Qcml2YXRlSW5mbz86IHN0cmluZztcbiAgfSxcbiAgZW5jcnlwdGVkVHJhdmVsSW5mbzogc3RyaW5nXG4pIHtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIHR4aWQ6IHByZXBhcmVkLnR4aWQsXG4gICAgb3V0cHV0SW5kZXg6IHByZXBhcmVkLnJlY2lwaWVudC5vdXRwdXRJbmRleCxcbiAgICB0b1B1YktleTogcHJlcGFyZWQucmVjaXBpZW50LnB1YktleSxcbiAgICBmcm9tUHViS2V5OiBwcmVwYXJlZC5mcm9tS2V5LnB1YmxpY0tleS50b1N0cmluZygnaGV4JyksXG4gICAgZW5jcnlwdGVkVHJhdmVsSW5mbzogZW5jcnlwdGVkVHJhdmVsSW5mbyxcbiAgICBmcm9tUHJpdmF0ZUluZm86IHVuZGVmaW5lZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIH07XG5cbiAgaWYgKHByZXBhcmVkLmZyb21Qcml2YXRlSW5mbykge1xuICAgIHJlc3VsdC5mcm9tUHJpdmF0ZUluZm8gPSBwcmVwYXJlZC5mcm9tUHJpdmF0ZUluZm87XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFRha2VzIGEgdHJhbnNhY3Rpb24gb2JqZWN0IGFzIHJldHVybmVkIGJ5IGdldFRyYW5zYWN0aW9uIG9yIGxpc3RUcmFuc2FjdGlvbnMsIGFsb25nXG4gKiB3aXRoIGEga2V5Y2hhaW4gKG9yIGhkbm9kZSBvYmplY3QpLCBhbmQgYXR0ZW1wdHMgdG8gZGVjcnlwdCBhbnkgZW5jcnlwdGVkIHRyYXZlbFxuICogaW5mbyBpbmNsdWRlZCBpbiB0aGUgdHJhbnNhY3Rpb24ncyByZWNlaXZlZFRyYXZlbEluZm8gZmllbGQuXG4gKiBQYXJhbWV0ZXJzOlxuICogICB0eDogYSB0cmFuc2FjdGlvbiBvYmplY3RcbiAqICAga2V5Y2hhaW46IGtleWNoYWluIG9iamVjdCAod2l0aCB4cHJ2KVxuICogUmV0dXJuczpcbiAqICAgdGhlIHR4IG9iamVjdCwgYXVnbWVudGVkIHdpdGggZGVjcnlwdGVkIHRyYXZlbEluZm8gZmllbGRzXG4gKiBUT0RPOiBEZXByZWNhdGUgaW4gZmF2b3Igb2YgZGVjcnlwdFJlY2VpdmVkVHJhdmVsSW5mb0FzeW5jIG9uY2UgdjIgZW5jcnlwdGlvbiBpcyBkZWZhdWx0LlxuICovXG5UcmF2ZWxSdWxlLnByb3RvdHlwZS5kZWNyeXB0UmVjZWl2ZWRUcmF2ZWxJbmZvID0gZnVuY3Rpb24gKHBhcmFtczogRGVjcnlwdFJlY2VpdmVkVHJhdmVsUnVsZU9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7IHR4LCBoZE5vZGUgfSA9IHZhbGlkYXRlVHJhdmVsUnVsZURlY3J5cHRQYXJhbXMocGFyYW1zKTtcbiAgaWYgKCFoZE5vZGUpIHtcbiAgICByZXR1cm4gdHg7XG4gIH1cblxuICB0eCEucmVjZWl2ZWRUcmF2ZWxJbmZvIS5mb3JFYWNoKChpbmZvKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gaGROb2RlLmRlcml2ZVBhdGgoc2FuaXRpemVMZWdhY3lQYXRoKGluZm8udG9QdWJLZXlQYXRoKSk7XG4gICAgY29uc3Qgc2VjcmV0ID0gZ2V0U2hhcmVkU2VjcmV0KGtleSwgQnVmZmVyLmZyb20oaW5mby5mcm9tUHViS2V5LCAnaGV4JykpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVjcnlwdGVkID0gdGhpcy5iaXRnby5kZWNyeXB0KHtcbiAgICAgICAgaW5wdXQ6IGluZm8uZW5jcnlwdGVkVHJhdmVsSW5mbyxcbiAgICAgICAgcGFzc3dvcmQ6IHNlY3JldCxcbiAgICAgIH0pO1xuICAgICAgaW5mby50cmF2ZWxJbmZvID0gSlNPTi5wYXJzZShkZWNyeXB0ZWQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignZmFpbGVkIHRvIGRlY3J5cHQgb3IgcGFyc2UgdHJhdmVsIGluZm8gZm9yICcsIGluZm8udHJhbnNhY3Rpb25JZCArICc6JyArIGluZm8ub3V0cHV0SW5kZXgpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHR4O1xufTtcblxuLyoqXG4gKiBBc3luYyB2ZXJzaW9uIG9mIGRlY3J5cHRSZWNlaXZlZFRyYXZlbEluZm8gd2l0aCB2MiBlbmNyeXB0L2RlY3J5cHQgc3VwcG9ydC5cbiAqL1xuVHJhdmVsUnVsZS5wcm90b3R5cGUuZGVjcnlwdFJlY2VpdmVkVHJhdmVsSW5mb0FzeW5jID0gYXN5bmMgZnVuY3Rpb24gKHBhcmFtczogRGVjcnlwdFJlY2VpdmVkVHJhdmVsUnVsZU9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7IHR4LCBoZE5vZGUgfSA9IHZhbGlkYXRlVHJhdmVsUnVsZURlY3J5cHRQYXJhbXMocGFyYW1zKTtcbiAgaWYgKCFoZE5vZGUpIHtcbiAgICByZXR1cm4gdHg7XG4gIH1cblxuICBmb3IgKGNvbnN0IGluZm8gb2YgdHghLnJlY2VpdmVkVHJhdmVsSW5mbyEpIHtcbiAgICBjb25zdCBrZXkgPSBoZE5vZGUuZGVyaXZlUGF0aChzYW5pdGl6ZUxlZ2FjeVBhdGgoaW5mby50b1B1YktleVBhdGgpKTtcbiAgICBjb25zdCBzZWNyZXQgPSBnZXRTaGFyZWRTZWNyZXQoa2V5LCBCdWZmZXIuZnJvbShpbmZvLmZyb21QdWJLZXksICdoZXgnKSkudG9TdHJpbmcoJ2hleCcpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNyeXB0ZWQgPSBhd2FpdCB0aGlzLmJpdGdvLmRlY3J5cHRBc3luYyh7XG4gICAgICAgIGlucHV0OiBpbmZvLmVuY3J5cHRlZFRyYXZlbEluZm8sXG4gICAgICAgIHBhc3N3b3JkOiBzZWNyZXQsXG4gICAgICB9KTtcbiAgICAgIGluZm8udHJhdmVsSW5mbyA9IEpTT04ucGFyc2UoZGVjcnlwdGVkKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2ZhaWxlZCB0byBkZWNyeXB0IG9yIHBhcnNlIHRyYXZlbCBpbmZvIGZvciAnLCBpbmZvLnRyYW5zYWN0aW9uSWQgKyAnOicgKyBpbmZvLm91dHB1dEluZGV4KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHg7XG59O1xuXG4vKipcbiAqIFRPRE86IERlcHJlY2F0ZSBpbiBmYXZvciBvZiBwcmVwYXJlUGFyYW1zQXN5bmMgb25jZSB2MiBlbmNyeXB0aW9uIGlzIGRlZmF1bHQuXG4gKi9cblRyYXZlbFJ1bGUucHJvdG90eXBlLnByZXBhcmVQYXJhbXMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gIGNvbnN0IHByZXBhcmVkID0gcHJlcGFyZVRyYXZlbFJ1bGVQYXJhbXNDb21tb24odGhpcywgcGFyYW1zKTtcbiAgY29uc3QgZW5jcnlwdGVkVHJhdmVsSW5mbyA9IHRoaXMuYml0Z28uZW5jcnlwdCh7XG4gICAgaW5wdXQ6IHByZXBhcmVkLnRyYXZlbEluZm9KU09OLFxuICAgIHBhc3N3b3JkOiBwcmVwYXJlZC5zaGFyZWRTZWNyZXQsXG4gIH0pO1xuXG4gIHJldHVybiBidWlsZFRyYXZlbFJ1bGVTZW5kUGFyYW1zKHByZXBhcmVkLCBlbmNyeXB0ZWRUcmF2ZWxJbmZvKTtcbn07XG5cbi8qKlxuICogQXN5bmMgdmVyc2lvbiBvZiBwcmVwYXJlUGFyYW1zIHdpdGggdjIgZW5jcnlwdC9kZWNyeXB0IHN1cHBvcnQuXG4gKi9cblRyYXZlbFJ1bGUucHJvdG90eXBlLnByZXBhcmVQYXJhbXNBc3luYyA9IGFzeW5jIGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgY29uc3QgcHJlcGFyZWQgPSBwcmVwYXJlVHJhdmVsUnVsZVBhcmFtc0NvbW1vbih0aGlzLCBwYXJhbXMpO1xuICBjb25zdCBlbmNyeXB0ZWRUcmF2ZWxJbmZvID0gYXdhaXQgdGhpcy5iaXRnby5lbmNyeXB0QXN5bmMoe1xuICAgIGlucHV0OiBwcmVwYXJlZC50cmF2ZWxJbmZvSlNPTixcbiAgICBwYXNzd29yZDogcHJlcGFyZWQuc2hhcmVkU2VjcmV0LFxuICB9KTtcblxuICByZXR1cm4gYnVpbGRUcmF2ZWxSdWxlU2VuZFBhcmFtcyhwcmVwYXJlZCwgZW5jcnlwdGVkVHJhdmVsSW5mbyk7XG59O1xuXG4vKipcbiAqIFNlbmQgdHJhdmVsIGRhdGEgdG8gdGhlIHNlcnZlciBmb3IgYSB0cmFuc2FjdGlvblxuICovXG5UcmF2ZWxSdWxlLnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBwYXJhbXMudHhpZCA9IHBhcmFtcy50eGlkIHx8IHBhcmFtcy5oYXNoO1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMoXG4gICAgcGFyYW1zLFxuICAgIFsndHhpZCcsICd0b1B1YktleScsICdlbmNyeXB0ZWRUcmF2ZWxJbmZvJ10sXG4gICAgWydmcm9tUHViS2V5JywgJ2Zyb21Qcml2YXRlSW5mbyddLFxuICAgIGNhbGxiYWNrXG4gICk7XG5cbiAgaWYgKCFfLmlzTnVtYmVyKHBhcmFtcy5vdXRwdXRJbmRleCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgb3V0cHV0SW5kZXgnKTtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgdGhpcy5iaXRnb1xuICAgICAgLnBvc3QodGhpcy51cmwocGFyYW1zLnR4aWQgKyAnLycgKyBwYXJhbXMub3V0cHV0SW5kZXgpKVxuICAgICAgLnNlbmQocGFyYW1zKVxuICAgICAgLnJlc3VsdCgpXG4gIClcbiAgICAudGhlbihjYWxsYmFjaylcbiAgICAuY2F0Y2goY2FsbGJhY2spO1xufTtcblxuLyoqXG4gKiBTZW5kIG11bHRpcGxlIHRyYXZlbCBydWxlIGluZm9zIGZvciB0aGUgb3V0cHV0cyBvZiBhIHNpbmdsZSB0cmFuc2FjdGlvbi5cbiAqIFBhcmFtZXRlcnM6XG4gKiAgIC0gdHhpZCAob3IgaGFzaCk6IHR4aWQgb2YgdGhlIHRyYW5zYWN0aW9uIChtdXN0IGJlIGEgc2VuZGVyIG9mIHRoZSB0eClcbiAqICAgLSB0cmF2ZWxJbmZvczogYXJyYXkgb2YgdHJhdmVsSW5mbyBvYmplY3RzIHdoaWNoIGxvb2sgbGlrZSB0aGUgZm9sbG93aW5nOlxuICogICAgIHtcbiAqICAgICAgIG91dHB1dEluZGV4OiBudW1iZXIsICAgICAvLyB0eCBvdXRwdXQgaW5kZXhcbiAqICAgICAgIGZyb21Vc2VyTmFtZTogc3RyaW5nLCAgICAvLyBuYW1lIG9mIHRoZSBzZW5kaW5nIHVzZXJcbiAqICAgICAgIGZyb21Vc2VyQWNjb3VudDogc3RyaW5nLCAvLyBhY2NvdW50IGlkIG9mIHRoZSBzZW5kaW5nIHVzZXJcbiAqICAgICAgIGZyb21Vc2VyQWRkcmVzczogc3RyaW5nLCAvLyBtYWlsaW5nIGFkZHJlc3Mgb2YgdGhlIHNlbmRpbmcgdXNlclxuICogICAgICAgdG9Vc2VyTmFtZTogc3RyaW5nLCAgICAgIC8vIG5hbWUgb2YgdGhlIHJlY2VpdmluZyB1c2VyXG4gKiAgICAgICB0b1VzZXJBY2NvdW50OiBzdHJpbmcsICAgLy8gYWNjb3VudCBpZCBvZiB0aGUgcmVjZWl2aW5nIHVzZXJcbiAqICAgICAgIHRvVXNlckFkZHJlc3M6IHN0cmluZyAgICAvLyBtYWlsaW5nIGFkZHJlc3Mgb2YgdGhlIHJlY2VpdmluZyB1c2VyXG4gKiAgICAgfVxuICogICAgIEFsbCBmaWVsZHMgYXNpZGUgZnJvbSBvdXRwdXRJbmRleCBhcmUgb3B0aW9uYWwsIGJ1dCBhdCBsZWFzdCBvbmUgbXVzdFxuICogICAgIGJlIGRlZmluZWQuXG4gKlxuICogIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gcHJvdmlkZSB0cmF2ZWxJbmZvIGZvciBhbGwgb3V0cHV0IGluZGljZXMuXG4gKiAgRW5kLXRvLWVuZCBlbmNyeXB0aW9uIG9mIHRoZSB0cmF2ZWwgaW5mbyBpcyBoYW5kbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhpcyBtZXRob2QuXG4gKlxuICovXG5UcmF2ZWxSdWxlLnByb3RvdHlwZS5zZW5kTWFueSA9IGZ1bmN0aW9uIChwYXJhbXMsIGNhbGxiYWNrKSB7XG4gIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgcGFyYW1zLnR4aWQgPSBwYXJhbXMudHhpZCB8fCBwYXJhbXMuaGFzaDtcbiAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywgWyd0eGlkJ10sIGNhbGxiYWNrKTtcblxuICBjb25zdCB0cmF2ZWxJbmZvcyA9IHBhcmFtcy50cmF2ZWxJbmZvcztcbiAgaWYgKCFfLmlzQXJyYXkodHJhdmVsSW5mb3MpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBwYXJhbWV0ZXIgdHJhdmVsSW5mb3MgdG8gYmUgYXJyYXknKTtcbiAgfVxuXG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuICBjb25zdCB0cmF2ZWxJbmZvTWFwID0gXyh0cmF2ZWxJbmZvcylcbiAgICAua2V5QnkoJ291dHB1dEluZGV4JylcbiAgICAubWFwVmFsdWVzKGZ1bmN0aW9uICh0cmF2ZWxJbmZvKSB7XG4gICAgICByZXR1cm4gc2VsZi52YWxpZGF0ZVRyYXZlbEluZm8odHJhdmVsSW5mbyk7XG4gICAgfSlcbiAgICAudmFsdWUoKTtcblxuICByZXR1cm4gc2VsZi5nZXRSZWNpcGllbnRzKHsgdHhpZDogcGFyYW1zLnR4aWQgfSkudGhlbihmdW5jdGlvbiAocmVjaXBpZW50cykge1xuICAgIC8vIEJ1aWxkIHVwIGRhdGEgdG8gcG9zdFxuICAgIGNvbnN0IHNlbmRQYXJhbXNMaXN0OiBhbnlbXSA9IFtdO1xuICAgIC8vIGRvbid0IHJlZ2VuZXJhdGUgYSBuZXcgcmFuZG9tIGtleSBmb3IgZWFjaCByZWNpcGllbnRcbiAgICBjb25zdCBmcm9tS2V5ID0gcGFyYW1zLmZyb21LZXkgfHwgbWFrZVJhbmRvbUtleSgpLnRvV0lGKCk7XG5cbiAgICByZWNpcGllbnRzLmZvckVhY2goZnVuY3Rpb24gKHJlY2lwaWVudCkge1xuICAgICAgY29uc3Qgb3V0cHV0SW5kZXggPSByZWNpcGllbnQub3V0cHV0SW5kZXg7XG4gICAgICBjb25zdCBpbmZvID0gdHJhdmVsSW5mb01hcFtvdXRwdXRJbmRleF07XG4gICAgICBpZiAoaW5mbykge1xuICAgICAgICBpZiAoaW5mby5hbW91bnQgJiYgaW5mby5hbW91bnQgIT09IHJlY2lwaWVudC5hbW91bnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Ftb3VudCBkaWQgbm90IG1hdGNoIGZvciBvdXRwdXQgaW5kZXggJyArIG91dHB1dEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZW5kUGFyYW1zID0gc2VsZi5wcmVwYXJlUGFyYW1zKHtcbiAgICAgICAgICB0eGlkOiBwYXJhbXMudHhpZCxcbiAgICAgICAgICByZWNpcGllbnQ6IHJlY2lwaWVudCxcbiAgICAgICAgICB0cmF2ZWxJbmZvOiBpbmZvLFxuICAgICAgICAgIGZyb21LZXk6IGZyb21LZXksXG4gICAgICAgICAgbm9WYWxpZGF0ZTogdHJ1ZSwgLy8gZG9uJ3QgcmUtdmFsaWRhdGVcbiAgICAgICAgfSk7XG4gICAgICAgIHNlbmRQYXJhbXNMaXN0LnB1c2goc2VuZFBhcmFtcyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN1bHQ6IHtcbiAgICAgIG1hdGNoZWQ6IG51bWJlcjtcbiAgICAgIHJlc3VsdHM6IHtcbiAgICAgICAgcmVzdWx0PzogYW55O1xuICAgICAgICBlcnJvcj86IHN0cmluZztcbiAgICAgIH1bXTtcbiAgICB9ID0ge1xuICAgICAgbWF0Y2hlZDogc2VuZFBhcmFtc0xpc3QubGVuZ3RoLFxuICAgICAgcmVzdWx0czogW10sXG4gICAgfTtcblxuICAgIGNvbnN0IHNlbmRTZXJpYWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZW5kUGFyYW1zID0gc2VuZFBhcmFtc0xpc3Quc2hpZnQoKTtcbiAgICAgIGlmICghc2VuZFBhcmFtcykge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlbGZcbiAgICAgICAgLnNlbmQoc2VuZFBhcmFtcylcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgIHJlc3VsdC5yZXN1bHRzLnB1c2goeyByZXN1bHQ6IHJlcyB9KTtcbiAgICAgICAgICByZXR1cm4gc2VuZFNlcmlhbCgpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIHJlc3VsdC5yZXN1bHRzLnB1c2goeyBlcnJvcjogZXJyLnRvU3RyaW5nKCkgfSk7XG4gICAgICAgICAgcmV0dXJuIHNlbmRTZXJpYWwoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybiBzZW5kU2VyaWFsKCk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUcmF2ZWxSdWxlO1xuIl19
353
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhdmVsUnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92MS90cmF2ZWxSdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSDtHQUNHO0FBQ0gsRUFBRTtBQUNGLG9CQUFvQjtBQUNwQiwyQ0FBMkM7QUFDM0MsRUFBRTtBQUNGLG9EQUFvRDtBQUNwRCxFQUFFO0FBQ0YsbURBQThHO0FBQzlHLG1EQUE2RDtBQUM3RCw4REFBZ0Q7QUFDaEQsb0RBQXVCO0FBMkJ2QixFQUFFO0FBQ0YsY0FBYztBQUNkLEVBQUU7QUFDRixNQUFNLFVBQVUsR0FBRyxVQUFVLEtBQUs7SUFDaEMsc0NBQXNDO0lBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3JCLENBQUMsQ0FBQztBQUVGLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLFVBQVUsS0FBSztJQUN4QyxLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUNwQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUM1QyxDQUFDLENBQUM7QUFFRjs7Ozs7O0dBTUc7QUFDSCxVQUFVLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxVQUFVLE1BQU0sRUFBRSxRQUFRO0lBQzdELE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO0lBQ3RCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ3pDLGlCQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUV0RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdB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O29CQUNoQixPQUFPLEVBQUUsT0FBTztvQkFDaEIsVUFBVSxFQUFFLElBQUksRUFBRSxvQkFBb0I7aUJBQ3ZDLENBQUMsQ0FBQztnQkFDSCxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xDLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBTVI7WUFDRixPQUFPLEVBQUUsY0FBYyxDQUFDLE1BQU07WUFDOUIsT0FBTyxFQUFFLEVBQUU7U0FDWixDQUFDO1FBRUYsTUFBTSxVQUFVLEdBQUc7WUFDakIsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDaEIsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQztZQUNELE9BQU8sSUFBSTtpQkFDUixJQUFJLENBQUMsVUFBVSxDQUFDO2lCQUNoQixJQUFJLENBQUMsVUFBVSxHQUFHO2dCQUNqQixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUNyQyxPQUFPLFVBQVUsRUFBRSxDQUFDO1lBQ3RCLENBQUMsQ0FBQztpQkFDRCxLQUFLLENBQUMsVUFBVSxHQUFHO2dCQUNsQixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMvQyxPQUFPLFVBQVUsRUFBRSxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDO1FBRUYsT0FBTyxVQUFVLEVBQUUsQ0FBQztJQUN0QixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAaGlkZGVuXG4gKi9cblxuLyoqXG4gKi9cbi8vXG4vLyBUcmF2ZWxSdWxlIE9iamVjdFxuLy8gQml0R28gYWNjZXNzb3IgZm9yIGEgc3BlY2lmaWMgZW50ZXJwcmlzZVxuLy9cbi8vIENvcHlyaWdodCAyMDE0LCBCaXRHbywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vXG5pbXBvcnQgeyBjb21tb24sIGdldE5ldHdvcmssIGdldFNoYXJlZFNlY3JldCwgbWFrZVJhbmRvbUtleSwgc2FuaXRpemVMZWdhY3lQYXRoIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgYmlwMzIsIEJJUDMySW50ZXJmYWNlIH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5pbnRlcmZhY2UgUmVjZWl2ZWRUcmF2ZWxJbmZvRW50cnkge1xuICB0b1B1YktleVBhdGg6IHN0cmluZztcbiAgZnJvbVB1YktleTogc3RyaW5nO1xuICBlbmNyeXB0ZWRUcmF2ZWxJbmZvOiBzdHJpbmc7XG4gIHRyYXZlbEluZm86IHN0cmluZztcbiAgdHJhbnNhY3Rpb25JZDogc3RyaW5nO1xuICBvdXRwdXRJbmRleDogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgRGVjcnlwdFJlY2VpdmVkVHJhdmVsUnVsZU9wdGlvbnMge1xuICB0eD86IHtcbiAgICByZWNlaXZlZFRyYXZlbEluZm8/OiBSZWNlaXZlZFRyYXZlbEluZm9FbnRyeVtdO1xuICB9O1xuICBrZXljaGFpbj86IHtcbiAgICB4cHJ2Pzogc3RyaW5nO1xuICB9O1xuICBoZG5vZGU/OiBCSVAzMkludGVyZmFjZTtcbn1cblxuaW50ZXJmYWNlIFJlY2lwaWVudCB7XG4gIGVudGVycHJpc2U6IHN0cmluZztcbiAgcHViS2V5OiBzdHJpbmc7XG4gIG91dHB1dEluZGV4OiBzdHJpbmc7XG59XG5cbi8vXG4vLyBDb25zdHJ1Y3RvclxuLy9cbmNvbnN0IFRyYXZlbFJ1bGUgPSBmdW5jdGlvbiAoYml0Z28pIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIG5vIGltcGxpY2l0IHRoaXNcbiAgdGhpcy5iaXRnbyA9IGJpdGdvO1xufTtcblxuVHJhdmVsUnVsZS5wcm90b3R5cGUudXJsID0gZnVuY3Rpb24gKGV4dHJhKSB7XG4gIGV4dHJhID0gZXh0cmEgfHwgJyc7XG4gIHJldHVybiB0aGlzLmJpdGdvLnVybCgnL3RyYXZlbC8nICsgZXh0cmEpO1xufTtcblxuLyoqXG4gKiBHZXQgYXZhaWxhYmxlIHRyYXZlbC1ydWxlIGluZm8gcmVjaXBpZW50cyBmb3IgYSB0cmFuc2FjdGlvblxuICogQHBhcmFtIHBhcmFtc1xuICogIHR4aWQ6IHRyYW5zYWN0aW9uIGlkXG4gKiBAcGFyYW0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHsqfVxuICovXG5UcmF2ZWxSdWxlLnByb3RvdHlwZS5nZXRSZWNpcGllbnRzID0gZnVuY3Rpb24gKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBwYXJhbXMudHhpZCA9IHBhcmFtcy50eGlkIHx8IHBhcmFtcy5oYXNoO1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbJ3R4aWQnXSwgW10sIGNhbGxiYWNrKTtcblxuICBjb25zdCB1cmwgPSB0aGlzLnVybChwYXJhbXMudHhpZCArICcvcmVjaXBpZW50cycpO1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuYml0Z28uZ2V0KHVybCkucmVzdWx0KCdyZWNpcGllbnRzJykpLnRoZW4oY2FsbGJhY2spLmNhdGNoKGNhbGxiYWNrKTtcbn07XG5cblRyYXZlbFJ1bGUucHJvdG90eXBlLnZhbGlkYXRlVHJhdmVsSW5mbyA9IGZ1bmN0aW9uIChpbmZvKSB7XG4gIGNvbnN0IGZpZWxkcyA9IHtcbiAgICBhbW91bnQ6IHsgdHlwZTogJ251bWJlcicgfSxcbiAgICB0b0FkZHJlc3M6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICB0b0VudGVycHJpc2U6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICBmcm9tVXNlck5hbWU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICBmcm9tVXNlckFjY291bnQ6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICBmcm9tVXNlckFkZHJlc3M6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICB0b1VzZXJOYW1lOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgdG9Vc2VyQWNjb3VudDogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgIHRvVXNlckFkZHJlc3M6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICBleHRyYTogeyB0eXBlOiAnb2JqZWN0JyB9LFxuICB9O1xuXG4gIF8uZm9yRWFjaChmaWVsZHMsIGZ1bmN0aW9uIChmaWVsZDogYW55LCBmaWVsZE5hbWUpIHtcbiAgICAvLyBObyByZXF1aXJlZCBmaWVsZHMgeWV0IC0tIHNob3VsZCB0aGVyZSBiZT9cbiAgICBpZiAoZmllbGQucmVxdWlyZWQpIHtcbiAgICAgIGlmIChpbmZvW2ZpZWxkTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgZmllbGQgJyArIGZpZWxkTmFtZSArICcgaW4gdHJhdmVsIGluZm8nKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGluZm9bZmllbGROYW1lXSAmJiB0eXBlb2YgaW5mb1tmaWVsZE5hbWVdICE9PSBmaWVsZC50eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2luY29ycmVjdCB0eXBlIGZvciBmaWVsZCAnICsgZmllbGROYW1lICsgJyBpbiB0cmF2ZWwgaW5mbywgZXhwZWN0ZWQgJyArIGZpZWxkLnR5cGUpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gU3RyaXAgb3V0IGFueSBvdGhlciBmaWVsZHMgd2UgZG9uJ3Qga25vdyBhYm91dFxuICBjb25zdCByZXN1bHQgPSBfLnBpY2soaW5mbywgXy5rZXlzKGZpZWxkcykpO1xuICBpZiAoXy5pc0VtcHR5KHJlc3VsdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2VtcHR5IHRyYXZlbCBkYXRhJyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVHJhdmVsUnVsZURlY3J5cHRQYXJhbXMocGFyYW1zOiBEZWNyeXB0UmVjZWl2ZWRUcmF2ZWxSdWxlT3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHR4ID0gcGFyYW1zLnR4O1xuICBpZiAoIV8uaXNPYmplY3QodHgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RpbmcgdHggcGFyYW0gdG8gYmUgb2JqZWN0Jyk7XG4gIH1cblxuICBpZiAoIXR4LnJlY2VpdmVkVHJhdmVsSW5mbyB8fCAhdHgucmVjZWl2ZWRUcmF2ZWxJbmZvLmxlbmd0aCkge1xuICAgIHJldHVybiB7IHR4LCBoZE5vZGU6IHVuZGVmaW5lZCBhcyBCSVAzMkludGVyZmFjZSB8IHVuZGVmaW5lZCB9O1xuICB9XG5cbiAgY29uc3Qga2V5Y2hhaW4gPSBwYXJhbXMua2V5Y2hhaW47XG4gIGlmICghXy5pc09iamVjdChrZXljaGFpbikgfHwgIV8uaXNTdHJpbmcoa2V5Y2hhaW4ueHBydikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGluZyBrZXljaGFpbiBwYXJhbSB3aXRoIHhwcnYnKTtcbiAgfVxuICBjb25zdCBoZE5vZGUgPSBiaXAzMi5mcm9tQmFzZTU4KGtleWNoYWluLnhwcnYpO1xuICByZXR1cm4geyB0eCwgaGROb2RlIH07XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVUcmF2ZWxSdWxlUGFyYW1zQ29tbW9uKHNlbGY6IHsgdmFsaWRhdGVUcmF2ZWxJbmZvOiAoaW5mbzogYW55KSA9PiBhbnkgfSwgcGFyYW1zOiBhbnkpIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICBwYXJhbXMudHhpZCA9IHBhcmFtcy50eGlkIHx8IHBhcmFtcy5oYXNoO1xuICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbJ3R4aWQnXSwgWydmcm9tUHJpdmF0ZUluZm8nXSk7XG4gIGNvbnN0IHR4aWQgPSBwYXJhbXMudHhpZDtcbiAgY29uc3QgcmVjaXBpZW50OiBSZWNpcGllbnQgfCB1bmRlZmluZWQgPSBwYXJhbXMucmVjaXBpZW50O1xuICBsZXQgdHJhdmVsSW5mbyA9IHBhcmFtcy50cmF2ZWxJbmZvO1xuICBpZiAoIXJlY2lwaWVudCB8fCAhXy5pc09iamVjdChyZWNpcGllbnQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIG9yIG1pc3NpbmcgcmVjaXBpZW50Jyk7XG4gIH1cbiAgaWYgKCF0cmF2ZWxJbmZvIHx8ICFfLmlzT2JqZWN0KHRyYXZlbEluZm8pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIG9yIG1pc3NpbmcgdHJhdmVsSW5mbycpO1xuICB9XG4gIGlmICghcGFyYW1zLm5vVmFsaWRhdGUpIHtcbiAgICB0cmF2ZWxJbmZvID0gc2VsZi52YWxpZGF0ZVRyYXZlbEluZm8odHJhdmVsSW5mbyk7XG4gIH1cblxuICBpZiAoIXRyYXZlbEluZm8udG9FbnRlcnByaXNlICYmIHJlY2lwaWVudC5lbnRlcnByaXNlKSB7XG4gICAgdHJhdmVsSW5mby50b0VudGVycHJpc2UgPSByZWNpcGllbnQuZW50ZXJwcmlzZTtcbiAgfVxuXG4gIC8vIElmIGEga2V5IHdhcyBub3QgcHJvdmlkZWQsIGNyZWF0ZSBhIG5ldyByYW5kb20ga2V5XG4gIGxldCBmcm9tS2V5ID0gcGFyYW1zLmZyb21LZXkgJiYgdXR4b2xpYi5FQ1BhaXIuZnJvbVdJRihwYXJhbXMuZnJvbUtleSwgZ2V0TmV0d29yaygpIGFzIHV0eG9saWIuQml0Y29pbkpTTmV0d29yayk7XG4gIGlmICghZnJvbUtleSkge1xuICAgIGZyb21LZXkgPSBtYWtlUmFuZG9tS2V5KCk7XG4gIH1cblxuICAvLyBDb21wdXRlIHRoZSBzaGFyZWQga2V5IGZvciBlbmNyeXB0aW9uXG4gIGNvbnN0IHNoYXJlZFNlY3JldCA9IGdldFNoYXJlZFNlY3JldChmcm9tS2V5LCBCdWZmZXIuZnJvbShyZWNpcGllbnQucHViS2V5LCAnaGV4JykpLnRvU3RyaW5nKCdoZXgnKTtcblxuICAvLyBKU09OLWlmeSBhbmQgZW5jcnlwdCB0aGUgcGF5bG9hZFxuICBjb25zdCB0cmF2ZWxJbmZvSlNPTiA9IEpTT04uc3RyaW5naWZ5KHRyYXZlbEluZm8pO1xuXG4gIHJldHVybiB7XG4gICAgdHhpZCxcbiAgICByZWNpcGllbnQsXG4gICAgdHJhdmVsSW5mb0pTT04sXG4gICAgZnJvbUtleSxcbiAgICBzaGFyZWRTZWNyZXQsXG4gICAgZnJvbVByaXZhdGVJbmZvOiBwYXJhbXMuZnJvbVByaXZhdGVJbmZvLFxuICB9O1xufVxuXG5mdW5jdGlvbiBidWlsZFRyYXZlbFJ1bGVTZW5kUGFyYW1zKFxuICBwcmVwYXJlZDoge1xuICAgIHR4aWQ6IHN0cmluZztcbiAgICByZWNpcGllbnQ6IFJlY2lwaWVudDtcbiAgICBmcm9tS2V5OiB1dHhvbGliLkVDUGFpckludGVyZmFjZTtcbiAgICBmcm9tUHJpdmF0ZUluZm8/OiBzdHJpbmc7XG4gIH0sXG4gIGVuY3J5cHRlZFRyYXZlbEluZm86IHN0cmluZ1xuKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICB0eGlkOiBwcmVwYXJlZC50eGlkLFxuICAgIG91dHB1dEluZGV4OiBwcmVwYXJlZC5yZWNpcGllbnQub3V0cHV0SW5kZXgsXG4gICAgdG9QdWJLZXk6IHByZXBhcmVkLnJlY2lwaWVudC5wdWJLZXksXG4gICAgZnJvbVB1YktleTogcHJlcGFyZWQuZnJvbUtleS5wdWJsaWNLZXkudG9TdHJpbmcoJ2hleCcpLFxuICAgIGVuY3J5cHRlZFRyYXZlbEluZm86IGVuY3J5cHRlZFRyYXZlbEluZm8sXG4gICAgZnJvbVByaXZhdGVJbmZvOiB1bmRlZmluZWQgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICB9O1xuXG4gIGlmIChwcmVwYXJlZC5mcm9tUHJpdmF0ZUluZm8pIHtcbiAgICByZXN1bHQuZnJvbVByaXZhdGVJbmZvID0gcHJlcGFyZWQuZnJvbVByaXZhdGVJbmZvO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBUYWtlcyBhIHRyYW5zYWN0aW9uIG9iamVjdCBhcyByZXR1cm5lZCBieSBnZXRUcmFuc2FjdGlvbiBvciBsaXN0VHJhbnNhY3Rpb25zLCBhbG9uZ1xuICogd2l0aCBhIGtleWNoYWluIChvciBoZG5vZGUgb2JqZWN0KSwgYW5kIGF0dGVtcHRzIHRvIGRlY3J5cHQgYW55IGVuY3J5cHRlZCB0cmF2ZWxcbiAqIGluZm8gaW5jbHVkZWQgaW4gdGhlIHRyYW5zYWN0aW9uJ3MgcmVjZWl2ZWRUcmF2ZWxJbmZvIGZpZWxkLlxuICogUGFyYW1ldGVyczpcbiAqICAgdHg6IGEgdHJhbnNhY3Rpb24gb2JqZWN0XG4gKiAgIGtleWNoYWluOiBrZXljaGFpbiBvYmplY3QgKHdpdGggeHBydilcbiAqIFJldHVybnM6XG4gKiAgIHRoZSB0eCBvYmplY3QsIGF1Z21lbnRlZCB3aXRoIGRlY3J5cHRlZCB0cmF2ZWxJbmZvIGZpZWxkc1xuICogVE9ETzogRGVwcmVjYXRlIGluIGZhdm9yIG9mIGRlY3J5cHRSZWNlaXZlZFRyYXZlbEluZm9Bc3luYyBvbmNlIHYyIGVuY3J5cHRpb24gaXMgZGVmYXVsdC5cbiAqL1xuVHJhdmVsUnVsZS5wcm90b3R5cGUuZGVjcnlwdFJlY2VpdmVkVHJhdmVsSW5mbyA9IGZ1bmN0aW9uIChwYXJhbXM6IERlY3J5cHRSZWNlaXZlZFRyYXZlbFJ1bGVPcHRpb25zID0ge30pIHtcbiAgY29uc3QgeyB0eCwgaGROb2RlIH0gPSB2YWxpZGF0ZVRyYXZlbFJ1bGVEZWNyeXB0UGFyYW1zKHBhcmFtcyk7XG4gIGlmICghaGROb2RlKSB7XG4gICAgcmV0dXJuIHR4O1xuICB9XG5cbiAgdHghLnJlY2VpdmVkVHJhdmVsSW5mbyEuZm9yRWFjaCgoaW5mbykgPT4ge1xuICAgIGNvbnN0IGtleSA9IGhkTm9kZS5kZXJpdmVQYXRoKHNhbml0aXplTGVnYWN5UGF0aChpbmZvLnRvUHViS2V5UGF0aCkpO1xuICAgIGNvbnN0IHNlY3JldCA9IGdldFNoYXJlZFNlY3JldChrZXksIEJ1ZmZlci5mcm9tKGluZm8uZnJvbVB1YktleSwgJ2hleCcpKS50b1N0cmluZygnaGV4Jyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY3J5cHRlZCA9IHRoaXMuYml0Z28uZGVjcnlwdCh7XG4gICAgICAgIGlucHV0OiBpbmZvLmVuY3J5cHRlZFRyYXZlbEluZm8sXG4gICAgICAgIHBhc3N3b3JkOiBzZWNyZXQsXG4gICAgICB9KTtcbiAgICAgIGluZm8udHJhdmVsSW5mbyA9IEpTT04ucGFyc2UoZGVjcnlwdGVkKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2ZhaWxlZCB0byBkZWNyeXB0IG9yIHBhcnNlIHRyYXZlbCBpbmZvIGZvciAnLCBpbmZvLnRyYW5zYWN0aW9uSWQgKyAnOicgKyBpbmZvLm91dHB1dEluZGV4KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0eDtcbn07XG5cbi8qKlxuICogQXN5bmMgdmVyc2lvbiBvZiBkZWNyeXB0UmVjZWl2ZWRUcmF2ZWxJbmZvIHdpdGggdjIgZW5jcnlwdC9kZWNyeXB0IHN1cHBvcnQuXG4gKi9cblRyYXZlbFJ1bGUucHJvdG90eXBlLmRlY3J5cHRSZWNlaXZlZFRyYXZlbEluZm9Bc3luYyA9IGFzeW5jIGZ1bmN0aW9uIChwYXJhbXM6IERlY3J5cHRSZWNlaXZlZFRyYXZlbFJ1bGVPcHRpb25zID0ge30pIHtcbiAgY29uc3QgeyB0eCwgaGROb2RlIH0gPSB2YWxpZGF0ZVRyYXZlbFJ1bGVEZWNyeXB0UGFyYW1zKHBhcmFtcyk7XG4gIGlmICghaGROb2RlKSB7XG4gICAgcmV0dXJuIHR4O1xuICB9XG5cbiAgZm9yIChjb25zdCBpbmZvIG9mIHR4IS5yZWNlaXZlZFRyYXZlbEluZm8hKSB7XG4gICAgY29uc3Qga2V5ID0gaGROb2RlLmRlcml2ZVBhdGgoc2FuaXRpemVMZWdhY3lQYXRoKGluZm8udG9QdWJLZXlQYXRoKSk7XG4gICAgY29uc3Qgc2VjcmV0ID0gZ2V0U2hhcmVkU2VjcmV0KGtleSwgQnVmZmVyLmZyb20oaW5mby5mcm9tUHViS2V5LCAnaGV4JykpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVjcnlwdGVkID0gYXdhaXQgdGhpcy5iaXRnby5kZWNyeXB0QXN5bmMoe1xuICAgICAgICBpbnB1dDogaW5mby5lbmNyeXB0ZWRUcmF2ZWxJbmZvLFxuICAgICAgICBwYXNzd29yZDogc2VjcmV0LFxuICAgICAgfSk7XG4gICAgICBpbmZvLnRyYXZlbEluZm8gPSBKU09OLnBhcnNlKGRlY3J5cHRlZCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdmYWlsZWQgdG8gZGVjcnlwdCBvciBwYXJzZSB0cmF2ZWwgaW5mbyBmb3IgJywgaW5mby50cmFuc2FjdGlvbklkICsgJzonICsgaW5mby5vdXRwdXRJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHR4O1xufTtcblxuLyoqXG4gKiBUT0RPOiBEZXByZWNhdGUgaW4gZmF2b3Igb2YgcHJlcGFyZVBhcmFtc0FzeW5jIG9uY2UgdjIgZW5jcnlwdGlvbiBpcyBkZWZhdWx0LlxuICovXG5UcmF2ZWxSdWxlLnByb3RvdHlwZS5wcmVwYXJlUGFyYW1zID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICBjb25zdCBwcmVwYXJlZCA9IHByZXBhcmVUcmF2ZWxSdWxlUGFyYW1zQ29tbW9uKHRoaXMsIHBhcmFtcyk7XG4gIGNvbnN0IGVuY3J5cHRlZFRyYXZlbEluZm8gPSB0aGlzLmJpdGdvLmVuY3J5cHQoe1xuICAgIGlucHV0OiBwcmVwYXJlZC50cmF2ZWxJbmZvSlNPTixcbiAgICBwYXNzd29yZDogcHJlcGFyZWQuc2hhcmVkU2VjcmV0LFxuICB9KTtcblxuICByZXR1cm4gYnVpbGRUcmF2ZWxSdWxlU2VuZFBhcmFtcyhwcmVwYXJlZCwgZW5jcnlwdGVkVHJhdmVsSW5mbyk7XG59O1xuXG4vKipcbiAqIEFzeW5jIHZlcnNpb24gb2YgcHJlcGFyZVBhcmFtcyB3aXRoIHYyIGVuY3J5cHQvZGVjcnlwdCBzdXBwb3J0LlxuICovXG5UcmF2ZWxSdWxlLnByb3RvdHlwZS5wcmVwYXJlUGFyYW1zQXN5bmMgPSBhc3luYyBmdW5jdGlvbiAocGFyYW1zKSB7XG4gIGNvbnN0IHByZXBhcmVkID0gcHJlcGFyZVRyYXZlbFJ1bGVQYXJhbXNDb21tb24odGhpcywgcGFyYW1zKTtcbiAgY29uc3QgZW5jcnlwdGVkVHJhdmVsSW5mbyA9IGF3YWl0IHRoaXMuYml0Z28uZW5jcnlwdEFzeW5jKHtcbiAgICBpbnB1dDogcHJlcGFyZWQudHJhdmVsSW5mb0pTT04sXG4gICAgcGFzc3dvcmQ6IHByZXBhcmVkLnNoYXJlZFNlY3JldCxcbiAgfSk7XG5cbiAgcmV0dXJuIGJ1aWxkVHJhdmVsUnVsZVNlbmRQYXJhbXMocHJlcGFyZWQsIGVuY3J5cHRlZFRyYXZlbEluZm8pO1xufTtcblxuLyoqXG4gKiBTZW5kIHRyYXZlbCBkYXRhIHRvIHRoZSBzZXJ2ZXIgZm9yIGEgdHJhbnNhY3Rpb25cbiAqL1xuVHJhdmVsUnVsZS5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uIChwYXJhbXMsIGNhbGxiYWNrKSB7XG4gIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgcGFyYW1zLnR4aWQgPSBwYXJhbXMudHhpZCB8fCBwYXJhbXMuaGFzaDtcbiAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKFxuICAgIHBhcmFtcyxcbiAgICBbJ3R4aWQnLCAndG9QdWJLZXknLCAnZW5jcnlwdGVkVHJhdmVsSW5mbyddLFxuICAgIFsnZnJvbVB1YktleScsICdmcm9tUHJpdmF0ZUluZm8nXSxcbiAgICBjYWxsYmFja1xuICApO1xuXG4gIGlmICghXy5pc051bWJlcihwYXJhbXMub3V0cHV0SW5kZXgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIG91dHB1dEluZGV4Jyk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgIHRoaXMuYml0Z29cbiAgICAgIC5wb3N0KHRoaXMudXJsKHBhcmFtcy50eGlkICsgJy8nICsgcGFyYW1zLm91dHB1dEluZGV4KSlcbiAgICAgIC5zZW5kKHBhcmFtcylcbiAgICAgIC5yZXN1bHQoKVxuICApXG4gICAgLnRoZW4oY2FsbGJhY2spXG4gICAgLmNhdGNoKGNhbGxiYWNrKTtcbn07XG5cbi8qKlxuICogU2VuZCBtdWx0aXBsZSB0cmF2ZWwgcnVsZSBpbmZvcyBmb3IgdGhlIG91dHB1dHMgb2YgYSBzaW5nbGUgdHJhbnNhY3Rpb24uXG4gKiBQYXJhbWV0ZXJzOlxuICogICAtIHR4aWQgKG9yIGhhc2gpOiB0eGlkIG9mIHRoZSB0cmFuc2FjdGlvbiAobXVzdCBiZSBhIHNlbmRlciBvZiB0aGUgdHgpXG4gKiAgIC0gdHJhdmVsSW5mb3M6IGFycmF5IG9mIHRyYXZlbEluZm8gb2JqZWN0cyB3aGljaCBsb29rIGxpa2UgdGhlIGZvbGxvd2luZzpcbiAqICAgICB7XG4gKiAgICAgICBvdXRwdXRJbmRleDogbnVtYmVyLCAgICAgLy8gdHggb3V0cHV0IGluZGV4XG4gKiAgICAgICBmcm9tVXNlck5hbWU6IHN0cmluZywgICAgLy8gbmFtZSBvZiB0aGUgc2VuZGluZyB1c2VyXG4gKiAgICAgICBmcm9tVXNlckFjY291bnQ6IHN0cmluZywgLy8gYWNjb3VudCBpZCBvZiB0aGUgc2VuZGluZyB1c2VyXG4gKiAgICAgICBmcm9tVXNlckFkZHJlc3M6IHN0cmluZywgLy8gbWFpbGluZyBhZGRyZXNzIG9mIHRoZSBzZW5kaW5nIHVzZXJcbiAqICAgICAgIHRvVXNlck5hbWU6IHN0cmluZywgICAgICAvLyBuYW1lIG9mIHRoZSByZWNlaXZpbmcgdXNlclxuICogICAgICAgdG9Vc2VyQWNjb3VudDogc3RyaW5nLCAgIC8vIGFjY291bnQgaWQgb2YgdGhlIHJlY2VpdmluZyB1c2VyXG4gKiAgICAgICB0b1VzZXJBZGRyZXNzOiBzdHJpbmcgICAgLy8gbWFpbGluZyBhZGRyZXNzIG9mIHRoZSByZWNlaXZpbmcgdXNlclxuICogICAgIH1cbiAqICAgICBBbGwgZmllbGRzIGFzaWRlIGZyb20gb3V0cHV0SW5kZXggYXJlIG9wdGlvbmFsLCBidXQgYXQgbGVhc3Qgb25lIG11c3RcbiAqICAgICBiZSBkZWZpbmVkLlxuICpcbiAqICBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHByb3ZpZGUgdHJhdmVsSW5mbyBmb3IgYWxsIG91dHB1dCBpbmRpY2VzLlxuICogIEVuZC10by1lbmQgZW5jcnlwdGlvbiBvZiB0aGUgdHJhdmVsIGluZm8gaXMgaGFuZGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoaXMgbWV0aG9kLlxuICpcbiAqL1xuVHJhdmVsUnVsZS5wcm90b3R5cGUuc2VuZE1hbnkgPSBmdW5jdGlvbiAocGFyYW1zLCBjYWxsYmFjaykge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gIHBhcmFtcy50eGlkID0gcGFyYW1zLnR4aWQgfHwgcGFyYW1zLmhhc2g7XG4gIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFsndHhpZCddLCBjYWxsYmFjayk7XG5cbiAgY29uc3QgdHJhdmVsSW5mb3MgPSBwYXJhbXMudHJhdmVsSW5mb3M7XG4gIGlmICghXy5pc0FycmF5KHRyYXZlbEluZm9zKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgcGFyYW1ldGVyIHRyYXZlbEluZm9zIHRvIGJlIGFycmF5Jyk7XG4gIH1cblxuICBjb25zdCBzZWxmID0gdGhpcztcbiAgY29uc3QgdHJhdmVsSW5mb01hcCA9IF8odHJhdmVsSW5mb3MpXG4gICAgLmtleUJ5KCdvdXRwdXRJbmRleCcpXG4gICAgLm1hcFZhbHVlcyhmdW5jdGlvbiAodHJhdmVsSW5mbykge1xuICAgICAgcmV0dXJuIHNlbGYudmFsaWRhdGVUcmF2ZWxJbmZvKHRyYXZlbEluZm8pO1xuICAgIH0pXG4gICAgLnZhbHVlKCk7XG5cbiAgcmV0dXJuIHNlbGYuZ2V0UmVjaXBpZW50cyh7IHR4aWQ6IHBhcmFtcy50eGlkIH0pLnRoZW4oYXN5bmMgZnVuY3Rpb24gKHJlY2lwaWVudHMpIHtcbiAgICAvLyBCdWlsZCB1cCBkYXRhIHRvIHBvc3RcbiAgICBjb25zdCBzZW5kUGFyYW1zTGlzdDogYW55W10gPSBbXTtcbiAgICAvLyBkb24ndCByZWdlbmVyYXRlIGEgbmV3IHJhbmRvbSBrZXkgZm9yIGVhY2ggcmVjaXBpZW50XG4gICAgY29uc3QgZnJvbUtleSA9IHBhcmFtcy5mcm9tS2V5IHx8IG1ha2VSYW5kb21LZXkoKS50b1dJRigpO1xuXG4gICAgZm9yIChjb25zdCByZWNpcGllbnQgb2YgcmVjaXBpZW50cykge1xuICAgICAgY29uc3Qgb3V0cHV0SW5kZXggPSByZWNpcGllbnQub3V0cHV0SW5kZXg7XG4gICAgICBjb25zdCBpbmZvID0gdHJhdmVsSW5mb01hcFtvdXRwdXRJbmRleF07XG4gICAgICBpZiAoaW5mbykge1xuICAgICAgICBpZiAoaW5mby5hbW91bnQgJiYgaW5mby5hbW91bnQgIT09IHJlY2lwaWVudC5hbW91bnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Ftb3VudCBkaWQgbm90IG1hdGNoIGZvciBvdXRwdXQgaW5kZXggJyArIG91dHB1dEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZW5kUGFyYW1zID0gYXdhaXQgc2VsZi5wcmVwYXJlUGFyYW1zQXN5bmMoe1xuICAgICAgICAgIHR4aWQ6IHBhcmFtcy50eGlkLFxuICAgICAgICAgIHJlY2lwaWVudDogcmVjaXBpZW50LFxuICAgICAgICAgIHRyYXZlbEluZm86IGluZm8sXG4gICAgICAgICAgZnJvbUtleTogZnJvbUtleSxcbiAgICAgICAgICBub1ZhbGlkYXRlOiB0cnVlLCAvLyBkb24ndCByZS12YWxpZGF0ZVxuICAgICAgICB9KTtcbiAgICAgICAgc2VuZFBhcmFtc0xpc3QucHVzaChzZW5kUGFyYW1zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQ6IHtcbiAgICAgIG1hdGNoZWQ6IG51bWJlcjtcbiAgICAgIHJlc3VsdHM6IHtcbiAgICAgICAgcmVzdWx0PzogYW55O1xuICAgICAgICBlcnJvcj86IHN0cmluZztcbiAgICAgIH1bXTtcbiAgICB9ID0ge1xuICAgICAgbWF0Y2hlZDogc2VuZFBhcmFtc0xpc3QubGVuZ3RoLFxuICAgICAgcmVzdWx0czogW10sXG4gICAgfTtcblxuICAgIGNvbnN0IHNlbmRTZXJpYWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZW5kUGFyYW1zID0gc2VuZFBhcmFtc0xpc3Quc2hpZnQoKTtcbiAgICAgIGlmICghc2VuZFBhcmFtcykge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlbGZcbiAgICAgICAgLnNlbmQoc2VuZFBhcmFtcylcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgIHJlc3VsdC5yZXN1bHRzLnB1c2goeyByZXN1bHQ6IHJlcyB9KTtcbiAgICAgICAgICByZXR1cm4gc2VuZFNlcmlhbCgpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIHJlc3VsdC5yZXN1bHRzLnB1c2goeyBlcnJvcjogZXJyLnRvU3RyaW5nKCkgfSk7XG4gICAgICAgICAgcmV0dXJuIHNlbmRTZXJpYWwoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybiBzZW5kU2VyaWFsKCk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUcmF2ZWxSdWxlO1xuIl19