@bitgo/abstract-utxo 12.0.5 → 12.2.0
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/cjs/src/impl/index.d.ts +1 -0
- package/dist/cjs/src/impl/index.d.ts.map +1 -1
- package/dist/cjs/src/impl/index.js +3 -2
- package/dist/cjs/src/impl/pearl/index.d.ts +3 -0
- package/dist/cjs/src/impl/pearl/index.d.ts.map +1 -0
- package/dist/cjs/src/impl/pearl/index.js +19 -0
- package/dist/cjs/src/impl/pearl/pearl.d.ts +17 -0
- package/dist/cjs/src/impl/pearl/pearl.d.ts.map +1 -0
- package/dist/cjs/src/impl/pearl/pearl.js +24 -0
- package/dist/cjs/src/impl/pearl/tpearl.d.ts +8 -0
- package/dist/cjs/src/impl/pearl/tpearl.d.ts.map +1 -0
- package/dist/cjs/src/impl/pearl/tpearl.js +15 -0
- package/dist/cjs/src/index.d.ts +1 -0
- package/dist/cjs/src/index.d.ts.map +1 -1
- package/dist/cjs/src/index.js +2 -1
- package/dist/cjs/src/names.d.ts +2 -2
- package/dist/cjs/src/names.d.ts.map +1 -1
- package/dist/cjs/src/names.js +5 -2
- package/dist/cjs/src/recovery/backupKeyRecovery.d.ts +14 -0
- package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -1
- package/dist/cjs/src/recovery/backupKeyRecovery.js +5 -1
- package/dist/cjs/src/recovery/psbt.d.ts +7 -1
- package/dist/cjs/src/recovery/psbt.d.ts.map +1 -1
- package/dist/cjs/src/recovery/psbt.js +12 -5
- package/dist/cjs/test/unit/impl/pearl/unit/index.d.ts +2 -0
- package/dist/cjs/test/unit/impl/pearl/unit/index.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/pearl/unit/index.js +111 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/impl/index.d.ts +1 -0
- package/dist/esm/impl/index.d.ts.map +1 -1
- package/dist/esm/impl/index.js +2 -1
- package/dist/esm/impl/pearl/index.d.ts +3 -0
- package/dist/esm/impl/pearl/index.d.ts.map +1 -0
- package/dist/esm/impl/pearl/index.js +3 -0
- package/dist/esm/impl/pearl/pearl.d.ts +17 -0
- package/dist/esm/impl/pearl/pearl.d.ts.map +1 -0
- package/dist/esm/impl/pearl/pearl.js +20 -0
- package/dist/esm/impl/pearl/tpearl.d.ts +8 -0
- package/dist/esm/impl/pearl/tpearl.d.ts.map +1 -0
- package/dist/esm/impl/pearl/tpearl.js +11 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/names.d.ts +2 -2
- package/dist/esm/names.d.ts.map +1 -1
- package/dist/esm/names.js +5 -2
- package/dist/esm/recovery/backupKeyRecovery.d.ts +14 -0
- package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -1
- package/dist/esm/recovery/backupKeyRecovery.js +5 -1
- package/dist/esm/recovery/psbt.d.ts +7 -1
- package/dist/esm/recovery/psbt.d.ts.map +1 -1
- package/dist/esm/recovery/psbt.js +12 -5
- package/package.json +11 -12
package/dist/esm/impl/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/impl/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAC7B,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAC7B,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAC7B,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAC7B,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAC7B,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/impl/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAC7B,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAC7B,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAC7B,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAC7B,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAC7B,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC"}
|
package/dist/esm/impl/index.js
CHANGED
|
@@ -6,5 +6,6 @@ export * as btg from './btg';
|
|
|
6
6
|
export * as ltc from './ltc';
|
|
7
7
|
export * as dash from './dash';
|
|
8
8
|
export * as doge from './doge';
|
|
9
|
+
export * as pearl from './pearl';
|
|
9
10
|
export * as zec from './zec';
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW1wbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssR0FBRyxNQUFNLE9BQU8sQ0FBQztBQUM3QixPQUFPLEtBQUssR0FBRyxNQUFNLE9BQU8sQ0FBQztBQUM3QixPQUFPLEtBQUssSUFBSSxNQUFNLFFBQVEsQ0FBQztBQUMvQixPQUFPLEtBQUssR0FBRyxNQUFNLE9BQU8sQ0FBQztBQUM3QixPQUFPLEtBQUssR0FBRyxNQUFNLE9BQU8sQ0FBQztBQUM3QixPQUFPLEtBQUssR0FBRyxNQUFNLE9BQU8sQ0FBQztBQUM3QixPQUFPLEtBQUssSUFBSSxNQUFNLFFBQVEsQ0FBQztBQUMvQixPQUFPLEtBQUssSUFBSSxNQUFNLFFBQVEsQ0FBQztBQUMvQixPQUFPLEtBQUssS0FBSyxNQUFNLFNBQVMsQ0FBQztBQUNqQyxPQUFPLEtBQUssR0FBRyxNQUFNLE9BQU8sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGFzIGJ0YyBmcm9tICcuL2J0Yyc7XG5leHBvcnQgKiBhcyBiY2ggZnJvbSAnLi9iY2gnO1xuZXhwb3J0ICogYXMgYmNoYSBmcm9tICcuL2JjaGEnO1xuZXhwb3J0ICogYXMgYnN2IGZyb20gJy4vYnN2JztcbmV4cG9ydCAqIGFzIGJ0ZyBmcm9tICcuL2J0Zyc7XG5leHBvcnQgKiBhcyBsdGMgZnJvbSAnLi9sdGMnO1xuZXhwb3J0ICogYXMgZGFzaCBmcm9tICcuL2Rhc2gnO1xuZXhwb3J0ICogYXMgZG9nZSBmcm9tICcuL2RvZ2UnO1xuZXhwb3J0ICogYXMgcGVhcmwgZnJvbSAnLi9wZWFybCc7XG5leHBvcnQgKiBhcyB6ZWMgZnJvbSAnLi96ZWMnO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/impl/pearl/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './pearl';
|
|
2
|
+
export * from './tpearl';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaW1wbC9wZWFybC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLFVBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcGVhcmwnO1xuZXhwb3J0ICogZnJvbSAnLi90cGVhcmwnO1xuIl19
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BitGoBase } from '@bitgo/sdk-core';
|
|
2
|
+
import { AbstractUtxoCoin } from '../../abstractUtxoCoin';
|
|
3
|
+
import { UtxoCoinName } from '../../names';
|
|
4
|
+
/**
|
|
5
|
+
* Pearl (Duplex) is a taproot-only UTXO chain, a btcd fork using BIP-340 Schnorr
|
|
6
|
+
* signatures and BIP-341 script-path spending with a NUMS internal key.
|
|
7
|
+
*
|
|
8
|
+
* Unlike the other utxo coins, Pearl has no `@bitgo/utxo-lib` network registration -
|
|
9
|
+
* it is served entirely through `@bitgo/wasm-utxo`. No script type override is needed
|
|
10
|
+
* here: `supportsAddressType` delegates to `fixedScriptWallet.supportsScriptType`,
|
|
11
|
+
* which already reports only p2tr and p2trMusig2 for this coin.
|
|
12
|
+
*/
|
|
13
|
+
export declare class Pearl extends AbstractUtxoCoin {
|
|
14
|
+
readonly name: UtxoCoinName;
|
|
15
|
+
static createInstance(bitgo: BitGoBase): Pearl;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=pearl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pearl.d.ts","sourceRoot":"","sources":["../../../../src/impl/pearl/pearl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C;;;;;;;;GAQG;AACH,qBAAa,KAAM,SAAQ,gBAAgB;IACzC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAW;IAEtC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,KAAK;CAG/C"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AbstractUtxoCoin } from '../../abstractUtxoCoin';
|
|
2
|
+
/**
|
|
3
|
+
* Pearl (Duplex) is a taproot-only UTXO chain, a btcd fork using BIP-340 Schnorr
|
|
4
|
+
* signatures and BIP-341 script-path spending with a NUMS internal key.
|
|
5
|
+
*
|
|
6
|
+
* Unlike the other utxo coins, Pearl has no `@bitgo/utxo-lib` network registration -
|
|
7
|
+
* it is served entirely through `@bitgo/wasm-utxo`. No script type override is needed
|
|
8
|
+
* here: `supportsAddressType` delegates to `fixedScriptWallet.supportsScriptType`,
|
|
9
|
+
* which already reports only p2tr and p2trMusig2 for this coin.
|
|
10
|
+
*/
|
|
11
|
+
export class Pearl extends AbstractUtxoCoin {
|
|
12
|
+
constructor() {
|
|
13
|
+
super(...arguments);
|
|
14
|
+
this.name = 'pearl';
|
|
15
|
+
}
|
|
16
|
+
static createInstance(bitgo) {
|
|
17
|
+
return new Pearl(bitgo);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVhcmwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaW1wbC9wZWFybC9wZWFybC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUcxRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sT0FBTyxLQUFNLFNBQVEsZ0JBQWdCO0lBQTNDOztRQUNXLFNBQUksR0FBaUIsT0FBTyxDQUFDO0lBS3hDLENBQUM7SUFIQyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCO1FBQ3BDLE9BQU8sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgQWJzdHJhY3RVdHhvQ29pbiB9IGZyb20gJy4uLy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHsgVXR4b0NvaW5OYW1lIH0gZnJvbSAnLi4vLi4vbmFtZXMnO1xuXG4vKipcbiAqIFBlYXJsIChEdXBsZXgpIGlzIGEgdGFwcm9vdC1vbmx5IFVUWE8gY2hhaW4sIGEgYnRjZCBmb3JrIHVzaW5nIEJJUC0zNDAgU2Nobm9yclxuICogc2lnbmF0dXJlcyBhbmQgQklQLTM0MSBzY3JpcHQtcGF0aCBzcGVuZGluZyB3aXRoIGEgTlVNUyBpbnRlcm5hbCBrZXkuXG4gKlxuICogVW5saWtlIHRoZSBvdGhlciB1dHhvIGNvaW5zLCBQZWFybCBoYXMgbm8gYEBiaXRnby91dHhvLWxpYmAgbmV0d29yayByZWdpc3RyYXRpb24gLVxuICogaXQgaXMgc2VydmVkIGVudGlyZWx5IHRocm91Z2ggYEBiaXRnby93YXNtLXV0eG9gLiBObyBzY3JpcHQgdHlwZSBvdmVycmlkZSBpcyBuZWVkZWRcbiAqIGhlcmU6IGBzdXBwb3J0c0FkZHJlc3NUeXBlYCBkZWxlZ2F0ZXMgdG8gYGZpeGVkU2NyaXB0V2FsbGV0LnN1cHBvcnRzU2NyaXB0VHlwZWAsXG4gKiB3aGljaCBhbHJlYWR5IHJlcG9ydHMgb25seSBwMnRyIGFuZCBwMnRyTXVzaWcyIGZvciB0aGlzIGNvaW4uXG4gKi9cbmV4cG9ydCBjbGFzcyBQZWFybCBleHRlbmRzIEFic3RyYWN0VXR4b0NvaW4ge1xuICByZWFkb25seSBuYW1lOiBVdHhvQ29pbk5hbWUgPSAncGVhcmwnO1xuXG4gIHN0YXRpYyBjcmVhdGVJbnN0YW5jZShiaXRnbzogQml0R29CYXNlKTogUGVhcmwge1xuICAgIHJldHVybiBuZXcgUGVhcmwoYml0Z28pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { BitGoBase } from '@bitgo/sdk-core';
|
|
2
|
+
import { UtxoCoinName } from '../../names';
|
|
3
|
+
import { Pearl } from './pearl';
|
|
4
|
+
export declare class Tpearl extends Pearl {
|
|
5
|
+
readonly name: UtxoCoinName;
|
|
6
|
+
static createInstance(bitgo: BitGoBase): Tpearl;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=tpearl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tpearl.d.ts","sourceRoot":"","sources":["../../../../src/impl/pearl/tpearl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,qBAAa,MAAO,SAAQ,KAAK;IAC/B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAY;IAEvC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM;CAGhD"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Pearl } from './pearl';
|
|
2
|
+
export class Tpearl extends Pearl {
|
|
3
|
+
constructor() {
|
|
4
|
+
super(...arguments);
|
|
5
|
+
this.name = 'tpearl';
|
|
6
|
+
}
|
|
7
|
+
static createInstance(bitgo) {
|
|
8
|
+
return new Tpearl(bitgo);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHBlYXJsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2ltcGwvcGVhcmwvdHBlYXJsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFaEMsTUFBTSxPQUFPLE1BQU8sU0FBUSxLQUFLO0lBQWpDOztRQUNXLFNBQUksR0FBaUIsUUFBUSxDQUFDO0lBS3pDLENBQUM7SUFIQyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCO1FBQ3BDLE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgVXR4b0NvaW5OYW1lIH0gZnJvbSAnLi4vLi4vbmFtZXMnO1xuXG5pbXBvcnQgeyBQZWFybCB9IGZyb20gJy4vcGVhcmwnO1xuXG5leHBvcnQgY2xhc3MgVHBlYXJsIGV4dGVuZHMgUGVhcmwge1xuICByZWFkb25seSBuYW1lOiBVdHhvQ29pbk5hbWUgPSAndHBlYXJsJztcblxuICBzdGF0aWMgY3JlYXRlSW5zdGFuY2UoYml0Z286IEJpdEdvQmFzZSk6IFRwZWFybCB7XG4gICAgcmV0dXJuIG5ldyBUcGVhcmwoYml0Z28pO1xuICB9XG59XG4iXX0=
|
package/dist/esm/index.d.ts
CHANGED
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,4CAA4C,CAAC;AAC3D,cAAc,WAAW,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,WAAW,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAG/B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,4CAA4C,CAAC;AAC3D,cAAc,WAAW,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,WAAW,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAG/B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
|
package/dist/esm/index.js
CHANGED
|
@@ -18,5 +18,6 @@ export * from './impl/btg';
|
|
|
18
18
|
export * from './impl/ltc';
|
|
19
19
|
export * from './impl/dash';
|
|
20
20
|
export * from './impl/doge';
|
|
21
|
+
export * from './impl/pearl';
|
|
21
22
|
export * from './impl/zec';
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsV0FBVyxDQUFDO0FBRzFCLE9BQU8sS0FBSyxVQUFVLE1BQU0sY0FBYyxDQUFDO0FBQzNDLE9BQU8sS0FBSyxZQUFZLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxLQUFLLFdBQVcsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxLQUFLLElBQUksTUFBTSxRQUFRLENBQUM7QUFFL0Isa0NBQWtDO0FBQ2xDLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hYnN0cmFjdFV0eG9Db2luJztcbmV4cG9ydCAqIGZyb20gJy4vYWRkcmVzcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbmZpZyc7XG5leHBvcnQgKiBmcm9tICcuL25hbWVzJztcbmV4cG9ydCAqIGZyb20gJy4vcmVjb3ZlcnknO1xuZXhwb3J0ICogZnJvbSAnLi90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9yZXBsYXlQcm90ZWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vdW5zcGVudCc7XG5cbmV4cG9ydCB7IFV0eG9XYWxsZXQgfSBmcm9tICcuL3dhbGxldCc7XG5leHBvcnQgKiBhcyBkZXNjcmlwdG9yIGZyb20gJy4vZGVzY3JpcHRvcic7XG5leHBvcnQgKiBhcyBvZmZsaW5lVmF1bHQgZnJvbSAnLi9vZmZsaW5lVmF1bHQnO1xuZXhwb3J0ICogYXMgdHJhbnNhY3Rpb24gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5leHBvcnQgKiBhcyBpbXBsIGZyb20gJy4vaW1wbCc7XG5cbi8vIEV4cG9ydCBhbGwgY29pbiBpbXBsZW1lbnRhdGlvbnNcbmV4cG9ydCAqIGZyb20gJy4vaW1wbC9idGMnO1xuZXhwb3J0ICogZnJvbSAnLi9pbXBsL2JjaCc7XG5leHBvcnQgKiBmcm9tICcuL2ltcGwvYmNoYSc7XG5leHBvcnQgKiBmcm9tICcuL2ltcGwvYnN2JztcbmV4cG9ydCAqIGZyb20gJy4vaW1wbC9idGcnO1xuZXhwb3J0ICogZnJvbSAnLi9pbXBsL2x0Yyc7XG5leHBvcnQgKiBmcm9tICcuL2ltcGwvZGFzaCc7XG5leHBvcnQgKiBmcm9tICcuL2ltcGwvZG9nZSc7XG5leHBvcnQgKiBmcm9tICcuL2ltcGwvcGVhcmwnO1xuZXhwb3J0ICogZnJvbSAnLi9pbXBsL3plYyc7XG4iXX0=
|
package/dist/esm/names.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export declare const utxoCoinsMainnet: readonly ["btc", "bch", "bcha", "bsv", "btg", "dash", "doge", "ltc", "zec"];
|
|
2
|
-
export declare const utxoCoinsTestnet: readonly ["tbtc", "tbtc4", "tbtcsig", "tbtcbgsig", "tbch", "tbcha", "tbsv", "tbtg", "tdash", "tdoge", "tltc", "tzec"];
|
|
1
|
+
export declare const utxoCoinsMainnet: readonly ["btc", "bch", "bcha", "bsv", "btg", "dash", "doge", "ltc", "pearl", "zec"];
|
|
2
|
+
export declare const utxoCoinsTestnet: readonly ["tbtc", "tbtc4", "tbtcsig", "tbtcbgsig", "tbch", "tbcha", "tbsv", "tbtg", "tdash", "tdoge", "tltc", "tpearl", "tzec"];
|
|
3
3
|
export type UtxoCoinNameMainnet = (typeof utxoCoinsMainnet)[number];
|
|
4
4
|
export type UtxoCoinNameTestnet = `t${UtxoCoinNameMainnet}` | 'tbtcsig' | 'tbtc4' | 'tbtcbgsig';
|
|
5
5
|
export type UtxoCoinName = UtxoCoinNameMainnet | UtxoCoinNameTestnet;
|
package/dist/esm/names.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"names.d.ts","sourceRoot":"","sources":["../../src/names.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"names.d.ts","sourceRoot":"","sources":["../../src/names.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,sFAAuF,CAAC;AACrH,eAAO,MAAM,gBAAgB,iIAcnB,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AACpE,MAAM,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,CAAC;AAChG,MAAM,MAAM,YAAY,GAAG,mBAAmB,GAAG,mBAAmB,CAAC;AAErE,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,mBAAmB,CAEvF;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,mBAAmB,CAEvF;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,YAAY,CAEzE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,mBAAmB,CAY9E;AA2BD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAiBtE;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAE7D;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAE7D"}
|
package/dist/esm/names.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export const utxoCoinsMainnet = ['btc', 'bch', 'bcha', 'bsv', 'btg', 'dash', 'doge', 'ltc', 'zec'];
|
|
1
|
+
export const utxoCoinsMainnet = ['btc', 'bch', 'bcha', 'bsv', 'btg', 'dash', 'doge', 'ltc', 'pearl', 'zec'];
|
|
2
2
|
export const utxoCoinsTestnet = [
|
|
3
3
|
'tbtc',
|
|
4
4
|
'tbtc4',
|
|
@@ -11,6 +11,7 @@ export const utxoCoinsTestnet = [
|
|
|
11
11
|
'tdash',
|
|
12
12
|
'tdoge',
|
|
13
13
|
'tltc',
|
|
14
|
+
'tpearl',
|
|
14
15
|
'tzec',
|
|
15
16
|
];
|
|
16
17
|
export function isUtxoCoinNameMainnet(coinName) {
|
|
@@ -53,6 +54,8 @@ function getBaseNameFromMainnet(coinName) {
|
|
|
53
54
|
return 'Dogecoin';
|
|
54
55
|
case 'ltc':
|
|
55
56
|
return 'Litecoin';
|
|
57
|
+
case 'pearl':
|
|
58
|
+
return 'Pearl';
|
|
56
59
|
case 'zec':
|
|
57
60
|
return 'ZCash';
|
|
58
61
|
}
|
|
@@ -80,4 +83,4 @@ export function isTestnetCoin(coinName) {
|
|
|
80
83
|
export function isMainnetCoin(coinName) {
|
|
81
84
|
return isUtxoCoinNameMainnet(coinName);
|
|
82
85
|
}
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbmFtZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQVUsQ0FBQztBQUNySCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztJQUM5QixNQUFNO0lBQ04sT0FBTztJQUNQLFNBQVM7SUFDVCxXQUFXO0lBQ1gsTUFBTTtJQUNOLE9BQU87SUFDUCxNQUFNO0lBQ04sTUFBTTtJQUNOLE9BQU87SUFDUCxPQUFPO0lBQ1AsTUFBTTtJQUNOLFFBQVE7SUFDUixNQUFNO0NBQ0UsQ0FBQztBQU1YLE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxRQUFnQjtJQUNwRCxPQUFPLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxRQUErQixDQUFDLENBQUM7QUFDcEUsQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxRQUFnQjtJQUNwRCxPQUFPLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxRQUErQixDQUFDLENBQUM7QUFDcEUsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUMsUUFBZ0I7SUFDN0MsT0FBTyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM1RSxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLFFBQXNCO0lBQ3ZELElBQUkscUJBQXFCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNwQyxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQ0QsUUFBUSxRQUFRLEVBQUUsQ0FBQztRQUNqQixLQUFLLE9BQU8sQ0FBQztRQUNiLEtBQUssU0FBUyxDQUFDO1FBQ2YsS0FBSyxXQUFXO1lBQ2QsT0FBTyxLQUFLLENBQUM7UUFDZjtZQUNFLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQXdCLENBQUM7SUFDcEQsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUFDLFFBQTZCO0lBQzNELFFBQVEsUUFBUSxFQUFFLENBQUM7UUFDakIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxTQUFTLENBQUM7UUFDbkIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxjQUFjLENBQUM7UUFDeEIsS0FBSyxNQUFNO1lBQ1QsT0FBTyxhQUFhLENBQUM7UUFDdkIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxjQUFjLENBQUM7UUFDeEIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxZQUFZLENBQUM7UUFDdEIsS0FBSyxNQUFNO1lBQ1QsT0FBTyxNQUFNLENBQUM7UUFDaEIsS0FBSyxNQUFNO1lBQ1QsT0FBTyxVQUFVLENBQUM7UUFDcEIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxVQUFVLENBQUM7UUFDcEIsS0FBSyxPQUFPO1lBQ1YsT0FBTyxPQUFPLENBQUM7UUFDakIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsUUFBc0I7SUFDNUQsSUFBSSxNQUFjLENBQUM7SUFDbkIsUUFBUSxRQUFRLEVBQUUsQ0FBQztRQUNqQixLQUFLLE9BQU87WUFDVixNQUFNLEdBQUcsV0FBVyxDQUFDO1lBQ3JCLE1BQU07UUFDUixLQUFLLFNBQVM7WUFDWixNQUFNLEdBQUcsZ0JBQWdCLENBQUM7WUFDMUIsTUFBTTtRQUNSLEtBQUssV0FBVztZQUNkLE1BQU0sR0FBRyxlQUFlLENBQUM7WUFDekIsTUFBTTtRQUNSO1lBQ0UsTUFBTSxHQUFHLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMvRCxDQUFDO0lBRUQsT0FBTyxNQUFNLEdBQUcsc0JBQXNCLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUN2RSxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxRQUFzQjtJQUNsRCxPQUFPLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLFFBQXNCO0lBQ2xELE9BQU8scUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDekMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCB1dHhvQ29pbnNNYWlubmV0ID0gWydidGMnLCAnYmNoJywgJ2JjaGEnLCAnYnN2JywgJ2J0ZycsICdkYXNoJywgJ2RvZ2UnLCAnbHRjJywgJ3BlYXJsJywgJ3plYyddIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IHV0eG9Db2luc1Rlc3RuZXQgPSBbXG4gICd0YnRjJyxcbiAgJ3RidGM0JyxcbiAgJ3RidGNzaWcnLFxuICAndGJ0Y2Jnc2lnJyxcbiAgJ3RiY2gnLFxuICAndGJjaGEnLFxuICAndGJzdicsXG4gICd0YnRnJyxcbiAgJ3RkYXNoJyxcbiAgJ3Rkb2dlJyxcbiAgJ3RsdGMnLFxuICAndHBlYXJsJyxcbiAgJ3R6ZWMnLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgVXR4b0NvaW5OYW1lTWFpbm5ldCA9ICh0eXBlb2YgdXR4b0NvaW5zTWFpbm5ldClbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIFV0eG9Db2luTmFtZVRlc3RuZXQgPSBgdCR7VXR4b0NvaW5OYW1lTWFpbm5ldH1gIHwgJ3RidGNzaWcnIHwgJ3RidGM0JyB8ICd0YnRjYmdzaWcnO1xuZXhwb3J0IHR5cGUgVXR4b0NvaW5OYW1lID0gVXR4b0NvaW5OYW1lTWFpbm5ldCB8IFV0eG9Db2luTmFtZVRlc3RuZXQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1V0eG9Db2luTmFtZU1haW5uZXQoY29pbk5hbWU6IHN0cmluZyk6IGNvaW5OYW1lIGlzIFV0eG9Db2luTmFtZU1haW5uZXQge1xuICByZXR1cm4gdXR4b0NvaW5zTWFpbm5ldC5pbmNsdWRlcyhjb2luTmFtZSBhcyBVdHhvQ29pbk5hbWVNYWlubmV0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVXR4b0NvaW5OYW1lVGVzdG5ldChjb2luTmFtZTogc3RyaW5nKTogY29pbk5hbWUgaXMgVXR4b0NvaW5OYW1lVGVzdG5ldCB7XG4gIHJldHVybiB1dHhvQ29pbnNUZXN0bmV0LmluY2x1ZGVzKGNvaW5OYW1lIGFzIFV0eG9Db2luTmFtZVRlc3RuZXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNVdHhvQ29pbk5hbWUoY29pbk5hbWU6IHN0cmluZyk6IGNvaW5OYW1lIGlzIFV0eG9Db2luTmFtZSB7XG4gIHJldHVybiBpc1V0eG9Db2luTmFtZU1haW5uZXQoY29pbk5hbWUpIHx8IGlzVXR4b0NvaW5OYW1lVGVzdG5ldChjb2luTmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYWlubmV0Q29pbk5hbWUoY29pbk5hbWU6IFV0eG9Db2luTmFtZSk6IFV0eG9Db2luTmFtZU1haW5uZXQge1xuICBpZiAoaXNVdHhvQ29pbk5hbWVNYWlubmV0KGNvaW5OYW1lKSkge1xuICAgIHJldHVybiBjb2luTmFtZTtcbiAgfVxuICBzd2l0Y2ggKGNvaW5OYW1lKSB7XG4gICAgY2FzZSAndGJ0YzQnOlxuICAgIGNhc2UgJ3RidGNzaWcnOlxuICAgIGNhc2UgJ3RidGNiZ3NpZyc6XG4gICAgICByZXR1cm4gJ2J0Yyc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBjb2luTmFtZS5zbGljZSgxKSBhcyBVdHhvQ29pbk5hbWVNYWlubmV0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEJhc2VOYW1lRnJvbU1haW5uZXQoY29pbk5hbWU6IFV0eG9Db2luTmFtZU1haW5uZXQpOiBzdHJpbmcge1xuICBzd2l0Y2ggKGNvaW5OYW1lKSB7XG4gICAgY2FzZSAnYnRjJzpcbiAgICAgIHJldHVybiAnQml0Y29pbic7XG4gICAgY2FzZSAnYmNoJzpcbiAgICAgIHJldHVybiAnQml0Y29pbiBDYXNoJztcbiAgICBjYXNlICdiY2hhJzpcbiAgICAgIHJldHVybiAnQml0Y29pbiBBQkMnO1xuICAgIGNhc2UgJ2J0Zyc6XG4gICAgICByZXR1cm4gJ0JpdGNvaW4gR29sZCc7XG4gICAgY2FzZSAnYnN2JzpcbiAgICAgIHJldHVybiAnQml0Y29pbiBTVic7XG4gICAgY2FzZSAnZGFzaCc6XG4gICAgICByZXR1cm4gJ0Rhc2gnO1xuICAgIGNhc2UgJ2RvZ2UnOlxuICAgICAgcmV0dXJuICdEb2dlY29pbic7XG4gICAgY2FzZSAnbHRjJzpcbiAgICAgIHJldHVybiAnTGl0ZWNvaW4nO1xuICAgIGNhc2UgJ3BlYXJsJzpcbiAgICAgIHJldHVybiAnUGVhcmwnO1xuICAgIGNhc2UgJ3plYyc6XG4gICAgICByZXR1cm4gJ1pDYXNoJztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnVsbE5hbWVGcm9tQ29pbk5hbWUoY29pbk5hbWU6IFV0eG9Db2luTmFtZSk6IHN0cmluZyB7XG4gIGxldCBwcmVmaXg6IHN0cmluZztcbiAgc3dpdGNoIChjb2luTmFtZSkge1xuICAgIGNhc2UgJ3RidGM0JzpcbiAgICAgIHByZWZpeCA9ICdUZXN0bmV0NCAnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndGJ0Y3NpZyc6XG4gICAgICBwcmVmaXggPSAnUHVibGljIFNpZ25ldCAnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndGJ0Y2Jnc2lnJzpcbiAgICAgIHByZWZpeCA9ICdCaXRHbyBTaWduZXQgJztcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBwcmVmaXggPSBpc1V0eG9Db2luTmFtZVRlc3RuZXQoY29pbk5hbWUpID8gJ1Rlc3RuZXQgJyA6ICcnO1xuICB9XG5cbiAgcmV0dXJuIHByZWZpeCArIGdldEJhc2VOYW1lRnJvbU1haW5uZXQoZ2V0TWFpbm5ldENvaW5OYW1lKGNvaW5OYW1lKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Rlc3RuZXRDb2luKGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzVXR4b0NvaW5OYW1lVGVzdG5ldChjb2luTmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01haW5uZXRDb2luKGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzVXR4b0NvaW5OYW1lTWFpbm5ldChjb2luTmFtZSk7XG59XG4iXX0=
|
|
@@ -33,6 +33,16 @@ export interface RecoverParams {
|
|
|
33
33
|
recoveryProvider?: RecoveryProvider;
|
|
34
34
|
/** Satoshi per byte */
|
|
35
35
|
feeRate?: number;
|
|
36
|
+
/**
|
|
37
|
+
* Transaction lock time (nLockTime). Set before signing — it is part of the sighash.
|
|
38
|
+
* Used for ECX replay-protection sweeps (e.g. 499_999_999) and other custom lock-time needs.
|
|
39
|
+
*/
|
|
40
|
+
lockTime?: number;
|
|
41
|
+
/**
|
|
42
|
+
* Input sequence number applied to every input. Defaults to 0xFFFFFFFE (RBF, non-final)
|
|
43
|
+
* which already satisfies the non-final requirement for lockTime to take effect.
|
|
44
|
+
*/
|
|
45
|
+
sequence?: number;
|
|
36
46
|
}
|
|
37
47
|
export type BackupKeyRecoveryTransansaction = {
|
|
38
48
|
inputs?: WalletUnspentJSON[];
|
|
@@ -59,6 +69,10 @@ export interface RecoverWithUnspentsParams {
|
|
|
59
69
|
krsFee?: bigint;
|
|
60
70
|
/** KRS fee address (required if krsFee > 0) */
|
|
61
71
|
krsFeeAddress?: string;
|
|
72
|
+
/** Transaction lock time (nLockTime), set on the PSBT before signing */
|
|
73
|
+
lockTime?: number;
|
|
74
|
+
/** Input sequence number applied to every input */
|
|
75
|
+
sequence?: number;
|
|
62
76
|
}
|
|
63
77
|
/**
|
|
64
78
|
* Builds a funds recovery PSBT without BitGo, using provided unspents.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backupKeyRecovery.d.ts","sourceRoot":"","sources":["../../../src/recovery/backupKeyRecovery.ts"],"names":[],"mappings":"AACA,OAAO,EACL,SAAS,EAMT,MAAM,EACP,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAe,MAAM,kBAAkB,CAAC;AAEzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAKvD,OAAO,EAAsB,YAAY,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAA6B,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3E,OAAO,EAAW,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAK/D,KAAK,cAAc,GAAG,iBAAiB,CAAC,gBAAgB,CAAC;AAEzD,KAAK,iBAAiB,GAAG,aAAa,GAAG;IACvC,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAGF,eAAO,MAAM,qCAAqC,KAAK,CAAC;AAGxD,eAAO,MAAM,2CAA2C,MAAM,CAAC;AAG/D,eAAO,MAAM,qCAAqC,KAAK,CAAC;AACxD,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE;QACN,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAC;KAChC,CAAC;IACF,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AA0CD,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,cAAc,EAAE,CAAC;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"backupKeyRecovery.d.ts","sourceRoot":"","sources":["../../../src/recovery/backupKeyRecovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -185,6 +185,8 @@ export function backupKeyRecoveryWithWalletUnspents(coinName, params, unspents)
|
|
|
185
185
|
recoveryDestination: recoveryDestination,
|
|
186
186
|
keyRecoveryServiceFee: krsFee ?? BigInt(0),
|
|
187
187
|
keyRecoveryServiceFeeAddress: krsFeeAddress,
|
|
188
|
+
lockTime: params.lockTime,
|
|
189
|
+
sequence: params.sequence,
|
|
188
190
|
});
|
|
189
191
|
const userHasPrivateKey = hasPrivateKey(keys[0]);
|
|
190
192
|
const backupHasPrivateKey = hasPrivateKey(keys[1]);
|
|
@@ -355,6 +357,8 @@ export async function backupKeyRecovery(coin, bitgo, params) {
|
|
|
355
357
|
feeRateSatVB,
|
|
356
358
|
krsFee,
|
|
357
359
|
krsFeeAddress,
|
|
360
|
+
lockTime: params.lockTime,
|
|
361
|
+
sequence: params.sequence,
|
|
358
362
|
}, unspents);
|
|
359
363
|
// Format the result
|
|
360
364
|
return formatBackupKeyRecoveryResult(coin, psbt, {
|
|
@@ -397,4 +401,4 @@ export async function v1Sweep(coin, bitgo, params) {
|
|
|
397
401
|
feeRate: recoveryFeePerByte,
|
|
398
402
|
});
|
|
399
403
|
}
|
|
400
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja3VwS2V5UmVjb3ZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVjb3ZlcnkvYmFja3VwS2V5UmVjb3ZlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sRUFFTCxxQkFBcUIsRUFDckIsY0FBYyxFQUNkLFlBQVksSUFBSSx1QkFBdUIsRUFDdkMsUUFBUSxFQUNSLFlBQVksR0FFYixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHekUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxrQkFBa0IsRUFBZ0IsTUFBTSxVQUFVLENBQUM7QUFDNUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQXNCLE1BQU0sWUFBWSxDQUFDO0FBRTNFLE9BQU8sRUFBRSxPQUFPLEVBQW9CLE1BQU0sb0JBQW9CLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sUUFBUSxDQUFDO0FBUXhFLDBEQUEwRDtBQUMxRCxNQUFNLENBQUMsTUFBTSxxQ0FBcUMsR0FBRyxFQUFFLENBQUM7QUFFeEQsNkhBQTZIO0FBQzdILE1BQU0sQ0FBQyxNQUFNLDJDQUEyQyxHQUFHLEdBQUcsQ0FB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Q2pELENBQUM7SUFFRCxJQUFJLGtCQUFrQixHQUFHLEdBQUcsQ0FBQztJQUM3QixJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDekIsa0JBQWtCLEdBQUcsTUFBTSxzQkFBc0IsQ0FBQyxJQUFJLEVBQUU7WUFDdEQsWUFBWSxFQUFFLDJDQUEyQztTQUMxRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLE9BQU8sTUFBTSxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQzFCLEdBQUcsTUFBTTtRQUNULE9BQU8sRUFBRSxrQkFBa0I7S0FDNUIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBCaXRHb0Jhc2UsXG4gIEVycm9yTm9JbnB1dFRvUmVjb3ZlcixcbiAgZ2V0S3JzUHJvdmlkZXIsXG4gIGdldEJpcDMyS2V5cyBhcyBnZXRCaXAzMktleXNGcm9tU2RrQ29yZSxcbiAgaXNUcmlwbGUsXG4gIGtyc1Byb3ZpZGVycyxcbiAgVHJpcGxlLFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgQklQMzIsIGZpeGVkU2NyaXB0V2FsbGV0LCBUcmFuc2FjdGlvbiB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQgeyBBYnN0cmFjdFV0eG9Db2luIH0gZnJvbSAnLi4vYWJzdHJhY3RVdHhvQ29pbic7XG5pbXBvcnQgeyBzaWduQW5kVmVyaWZ5UHNidCB9IGZyb20gJy4uL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L3NpZ25UcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBnZW5lcmF0ZUFkZHJlc3NXaXRoQ2hhaW5BbmRJbmRleCB9IGZyb20gJy4uL2FkZHJlc3MnO1xuaW1wb3J0IHsgZW5jb2RlVHJhbnNhY3Rpb24gfSBmcm9tICcuLi90cmFuc2FjdGlvbi9kZWNvZGUnO1xuaW1wb3J0IHsgZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmtleXMgfSBmcm9tICcuLi90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9yZXBsYXlQcm90ZWN0aW9uJztcbmltcG9ydCB7IGdldE1haW5uZXRDb2luTmFtZSwgVXR4b0NvaW5OYW1lIH0gZnJvbSAnLi4vbmFtZXMnO1xuaW1wb3J0IHsgcGFyc2VPdXRwdXRJZCwgdW5zcGVudFN1bSwgdHlwZSBXYWxsZXRVbnNwZW50IH0gZnJvbSAnLi4vdW5zcGVudCc7XG5cbmltcG9ydCB7IGZvckNvaW4sIFJlY292ZXJ5UHJvdmlkZXIgfSBmcm9tICcuL1JlY292ZXJ5UHJvdmlkZXInO1xuaW1wb3J0IHsgTWVtcG9vbEFwaSB9IGZyb20gJy4vbWVtcG9vbEFwaSc7XG5pbXBvcnQgeyBDb2luZ2Vja29BcGkgfSBmcm9tICcuL2NvaW5nZWNrb0FwaSc7XG5pbXBvcnQgeyBjcmVhdGVCYWNrdXBLZXlSZWNvdmVyeVBzYnQsIGdldFJlY292ZXJ5QW1vdW50IH0gZnJvbSAnLi9wc2J0JztcblxudHlwZSBTY3JpcHRUeXBlMk9mMyA9IGZpeGVkU2NyaXB0V2FsbGV0Lk91dHB1dFNjcmlwdFR5cGU7XG50eXBlIENoYWluQ29kZSA9IGZpeGVkU2NyaXB0V2FsbGV0LkNoYWluQ29kZTtcbnR5cGUgV2FsbGV0VW5zcGVudEpTT04gPSBXYWxsZXRVbnNwZW50ICYge1xuICB2YWx1ZVN0cmluZzogc3RyaW5nO1xufTtcblxuLy8gVjEgb25seSBkZWFscyB3aXRoIEJUQy4gNTAgc2F0L3ZieXRlIGlzIHZlcnkgYXJiaXRyYXJ5LlxuZXhwb3J0IGNvbnN0IERFRkFVTFRfUkVDT1ZFUllfRkVFUkFURV9TQVRfVkJZVEVfVjEgPSA1MDtcblxuLy8gRklYTUUoQlRDLTI2OTEpOiBpdCBpcyB1bmNsZWFyIHdoeSBzd2VlcHMgaGF2ZSBhIGRpZmZlcmVudCBkZWZhdWx0IHRoYW4gcmVndWxhciByZWNvdmVyeS4gMTAwIHNhdC92Ynl0ZSBpcyBleHRyZW1lbHkgaGlnaC5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1JFQ09WRVJZX0ZFRVJBVEVfU0FUX1ZCWVRFX1YxX1NXRUVQID0gMTAwO1xuXG4vLyBGSVhNRShCVEMtMjY5MSk6IGl0IG1ha2VzIGxpdHRsZSBzZW5zZSB0byBoYXZlIGEgc2luZ2xlIGRlZmF1bHQgZm9yIGV2ZXJ5IGNvaW4uXG5leHBvcnQgY29uc3QgREVGQVVMVF9SRUNPVkVSWV9GRUVSQVRFX1NBVF9WQllURV9WMiA9IDUwO1xuZXhwb3J0IGludGVyZmFjZSBGb3JtYXR0ZWRPZmZsaW5lVmF1bHRUeEluZm8ge1xuICB0eEluZm86IHtcbiAgICB1bnNwZW50cz86IFdhbGxldFVuc3BlbnRKU09OW107XG4gIH07XG4gIHR4SGV4OiBzdHJpbmc7XG4gIGZlZUluZm86IFJlY29yZDxzdHJpbmcsIG5ldmVyPjtcbiAgY29pbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEdldCB0aGUgY3VycmVudCBtYXJrZXQgcHJpY2UgZnJvbSBhIHRoaXJkIHBhcnR5IHRvIGJlIHVzZWQgZm9yIHJlY292ZXJ5XG4gKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgaW50ZW5kZWQgZm9yIG5vbi1iaXRnbyByZWNvdmVyeSB0cmFuc2FjdGlvbnMsIHdoZW4gaXQgaXMgbmVjZXNzYXJ5XG4gKiB0byBjYWxjdWxhdGUgdGhlIHJvdWdoIGZlZSBuZWVkZWQgdG8gcGF5IHRvIEtleXRlcm5hbC4gV2UgYXJlIG9rYXkgd2l0aCBhcHByb3hpbWF0aW5nLFxuICogYmVjYXVzZSB0aGUgcmVzdWx0aW5nIHByaWNlIG9mIHRoaXMgZnVuY3Rpb24gb25seSBoYXMgbGVzcyB0aGFuIDEgZG9sbGFyIGluZmx1ZW5jZSBvbiB0aGVcbiAqIGZlZSB0aGF0IG5lZWRzIHRvIGJlIHBhaWQgdG8gS2V5dGVybmFsLlxuICpcbiAqIFNlZSBjYWxjdWxhdGVGZWVBbW91bnQgZnVuY3Rpb246ICByZXR1cm4gTWF0aC5yb3VuZChmZWVBbW91bnRVc2QgLyBjdXJyZW50UHJpY2UgKiBzZWxmLmdldEJhc2VGYWN0b3IoKSk7XG4gKlxuICogVGhpcyBlbmQgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSB1c2VkIGFzIGFuIGFjY3VyYXRlIGVuZHBvaW50LCBzaW5jZSBzb21lIGNvaW5zJyBwcmljZXMgYXJlIG1pc3NpbmcgZnJvbSB0aGUgcHJvdmlkZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0UmVjb3ZlcnlNYXJrZXRQcmljZShjb2luOiBBYnN0cmFjdFV0eG9Db2luKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgcmV0dXJuIGF3YWl0IG5ldyBDb2luZ2Vja29BcGkoKS5nZXRVU0RQcmljZShjb2luLmdldEZhbWlseSgpKTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhbW91bnQgKGluIGJhc2UgdW5pdHMpIHRvIHBheSBhIEtSUyBwcm92aWRlciB3aGVuIGJ1aWxkaW5nIGEgcmVjb3ZlcnkgdHJhbnNhY3Rpb25cbiAqIEBwYXJhbSBjb2luXG4gKiBAcGFyYW0gcGFyYW1zXG4gKiBAcGFyYW0gcGFyYW1zLnByb3ZpZGVyIHtTdHJpbmd9IHRoZSBLUlMgcHJvdmlkZXIgdGhhdCBob2xkcyB0aGUgYmFja3VwIGtleVxuICogQHJldHVybnMgeyp9XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNhbGN1bGF0ZUZlZUFtb3VudChjb2luOiBBYnN0cmFjdFV0eG9Db2luLCBwYXJhbXM6IHsgcHJvdmlkZXI6IHN0cmluZyB9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgY29uc3Qga3JzUHJvdmlkZXIgPSBrcnNQcm92aWRlcnNbcGFyYW1zLnByb3ZpZGVyXTtcblxuICBpZiAoa3JzUHJvdmlkZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgbm8gZmVlIHN0cnVjdHVyZSBzcGVjaWZpZWQgZm9yIHByb3ZpZGVyICR7cGFyYW1zLnByb3ZpZGVyfWApO1xuICB9XG5cbiAgaWYgKGtyc1Byb3ZpZGVyLmZlZVR5cGUgPT09ICdmbGF0VXNkJykge1xuICAgIGNvbnN0IGZlZUFtb3VudFVzZCA9IGtyc1Byb3ZpZGVyLmZlZUFtb3VudDtcbiAgICBjb25zdCBjdXJyZW50UHJpY2U6IG51bWJlciA9IGF3YWl0IGdldFJlY292ZXJ5TWFya2V0UHJpY2UoY29pbik7XG5cbiAgICByZXR1cm4gTWF0aC5yb3VuZCgoZmVlQW1vdW50VXNkIC8gY3VycmVudFByaWNlKSAqIGNvaW4uZ2V0QmFzZUZhY3RvcigpKTtcbiAgfSBlbHNlIHtcbiAgICAvLyB3ZSBjYW4gYWRkIG1vcmUgZmVlIHN0cnVjdHVyZXMgaGVyZSBhcyBuZWVkZWQgZm9yIGRpZmZlcmVudCBwcm92aWRlcnMsIHN1Y2ggYXMgcGVyY2VudGFnZSBvZiByZWNvdmVyeSBhbW91bnRcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZlZSBzdHJ1Y3R1cmUgbm90IGltcGxlbWVudGVkJyk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWNvdmVyUGFyYW1zIHtcbiAgc2Nhbj86IG51bWJlcjtcbiAgdXNlcktleTogc3RyaW5nO1xuICBiYWNrdXBLZXk6IHN0cmluZztcbiAgYml0Z29LZXk6IHN0cmluZztcbiAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogc3RyaW5nO1xuICBrcnNQcm92aWRlcj86IHN0cmluZztcbiAgaWdub3JlQWRkcmVzc1R5cGVzOiBTY3JpcHRUeXBlMk9mM1tdO1xuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nO1xuICBhcGlLZXk/OiBzdHJpbmc7XG4gIHVzZXJLZXlQYXRoPzogc3RyaW5nO1xuICByZWNvdmVyeVByb3ZpZGVyPzogUmVjb3ZlcnlQcm92aWRlcjtcbiAgLyoqIFNhdG9zaGkgcGVyIGJ5dGUgKi9cbiAgZmVlUmF0ZT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhbiBhZGRyZXNzIGFuZCBmb3JtYXQgaXQgZm9yIEFQSSBxdWVyaWVzXG4gKiBAcGFyYW0gY29pbiAtIFRoZSBjb2luIGluc3RhbmNlXG4gKiBAcGFyYW0gY29pbk5hbWUgLSBUaGUgY29pbiBuYW1lXG4gKiBAcGFyYW0gd2FsbGV0S2V5cyAtIFRoZSB3YWxsZXQga2V5c1xuICogQHBhcmFtIGNoYWluIC0gVGhlIGNoYWluIGNvZGVcbiAqIEBwYXJhbSBhZGRySW5kZXggLSBUaGUgYWRkcmVzcyBpbmRleFxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBhZGRyZXNzICh3aXRoIGNhc2hhZGRyIHByZWZpeCBzdHJpcHBlZCBmb3IgQkNIL0JDSEEpXG4gKi9cbmZ1bmN0aW9uIGdldEZvcm1hdHRlZEFkZHJlc3MoXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUsXG4gIHdhbGxldEtleXM6IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLFxuICBjaGFpbjogQ2hhaW5Db2RlLFxuICBhZGRySW5kZXg6IG51bWJlclxuKTogc3RyaW5nIHtcbiAgY29uc3QgZm9ybWF0ID0gY29pbi5nZXRDaGFpbigpID09PSAnYmNoJyB8fCBjb2luLmdldENoYWluKCkgPT09ICdiY2hhJyA/ICdjYXNoYWRkcicgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGFkZHJlc3MgPSBnZW5lcmF0ZUFkZHJlc3NXaXRoQ2hhaW5BbmRJbmRleChjb2luTmFtZSwgd2FsbGV0S2V5cywgY2hhaW4sIGFkZHJJbmRleCwgZm9ybWF0KTtcblxuICAvLyBCbG9ja2NoYWlyIHVzZXMgY2FzaGFkZHIgZm9ybWF0IHdoZW4gcXVlcnlpbmcgdGhlIEFQSSBmb3IgYWRkcmVzcyBpbmZvcm1hdGlvbi4gU3RyaXAgdGhlIHByZWZpeCBmb3IgQkNIL0JDSEEuXG4gIHJldHVybiBmb3JtYXQgPT09ICdjYXNoYWRkcicgPyBhZGRyZXNzLnNwbGl0KCc6JylbMV0gOiBhZGRyZXNzO1xufVxuXG5mdW5jdGlvbiBoYXNXaXRuZXNzRGF0YShzY3JpcHRUeXBlOiBTY3JpcHRUeXBlMk9mMyk6IGJvb2xlYW4ge1xuICByZXR1cm4gc2NyaXB0VHlwZSAhPT0gJ3Ayc2gnO1xufVxuXG5hc3luYyBmdW5jdGlvbiBxdWVyeUJsb2NrY2hhaW5VbnNwZW50c1BhdGgoXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHBhcmFtczogUmVjb3ZlclBhcmFtcyxcbiAgd2FsbGV0S2V5czogZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMsXG4gIGNoYWluOiBDaGFpbkNvZGVcbik6IFByb21pc2U8V2FsbGV0VW5zcGVudDxiaWdpbnQ+W10+IHtcbiAgY29uc3Qgc2NyaXB0VHlwZSA9IGZpeGVkU2NyaXB0V2FsbGV0LkNoYWluQ29kZS5zY3JpcHRUeXBlKGNoYWluKTtcbiAgY29uc3QgZmV0Y2hQcmV2VHggPSAhaGFzV2l0bmVzc0RhdGEoc2NyaXB0VHlwZSkgJiYgZ2V0TWFpbm5ldENvaW5OYW1lKGNvaW4ubmFtZSkgIT09ICd6ZWMnO1xuICBjb25zdCByZWNvdmVyeVByb3ZpZGVyID0gcGFyYW1zLnJlY292ZXJ5UHJvdmlkZXIgPz8gZm9yQ29pbihjb2luLmdldENoYWluKCksIHBhcmFtcy5hcGlLZXkpO1xuICBjb25zdCBNQVhfU0VRVUVOVElBTF9BRERSRVNTRVNfV0lUSE9VVF9UWFMgPSBwYXJhbXMuc2NhbiB8fCAyMDtcbiAgbGV0IG51bVNlcXVlbnRpYWxBZGRyZXNzZXNXaXRob3V0VHhzID0gMDtcbiAgY29uc3QgcHJldlR4Q2FjaGUgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGdldFByZXZUeCh0eGlkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGxldCBwcmV2VHhIZXggPSBwcmV2VHhDYWNoZS5nZXQodHhpZCk7XG4gICAgaWYgKCFwcmV2VHhIZXgpIHtcbiAgICAgIHByZXZUeEhleCA9IGF3YWl0IHJlY292ZXJ5UHJvdmlkZXIuZ2V0VHJhbnNhY3Rpb25IZXgodHhpZCk7XG4gICAgICBwcmV2VHhDYWNoZS5zZXQodHhpZCwgcHJldlR4SGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIHByZXZUeEhleDtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGdhdGhlclVuc3BlbnRzKGFkZHJJbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgZm9ybWF0dGVkQWRkcmVzcyA9IGdldEZvcm1hdHRlZEFkZHJlc3MoY29pbiwgY29pbi5uYW1lLCB3YWxsZXRLZXlzLCBjaGFpbiwgYWRkckluZGV4KTtcbiAgICBjb25zdCBhZGRySW5mbyA9IGF3YWl0IHJlY292ZXJ5UHJvdmlkZXIuZ2V0QWRkcmVzc0luZm8oZm9ybWF0dGVkQWRkcmVzcyk7XG4gICAgLy8gd2UgdXNlIHR4Q291bnQgaGVyZSBiZWNhdXNlIGl0IGltcGxpZXMgdXNhZ2UgLSBoYXZpbmcgdHgnZXMgbWVhbnMgdGhlIGFkZHIgd2FzIGdlbmVyYXRlZCBhbmQgdXNlZFxuICAgIGlmIChhZGRySW5mby50eENvdW50ID09PSAwKSB7XG4gICAgICBudW1TZXF1ZW50aWFsQWRkcmVzc2VzV2l0aG91dFR4cysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBudW1TZXF1ZW50aWFsQWRkcmVzc2VzV2l0aG91dFR4cyA9IDA7XG5cbiAgICAgIGlmIChhZGRySW5mby5iYWxhbmNlID4gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgRm91bmQgYW4gYWRkcmVzcyB3aXRoIGJhbGFuY2U6ICR7Zm9ybWF0dGVkQWRkcmVzc30gd2l0aCBiYWxhbmNlICR7YWRkckluZm8uYmFsYW5jZX1gKTtcbiAgICAgICAgY29uc3QgYWRkcmVzc1Vuc3BlbnRzID0gYXdhaXQgcmVjb3ZlcnlQcm92aWRlci5nZXRVbnNwZW50c0ZvckFkZHJlc3NlcyhbZm9ybWF0dGVkQWRkcmVzc10pO1xuICAgICAgICBjb25zdCBwcm9jZXNzZWRVbnNwZW50cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIGFkZHJlc3NVbnNwZW50cy5tYXAoYXN5bmMgKHUpOiBQcm9taXNlPFdhbGxldFVuc3BlbnQ8YmlnaW50Pj4gPT4ge1xuICAgICAgICAgICAgY29uc3QgeyB0eGlkLCB2b3V0IH0gPSBwYXJzZU91dHB1dElkKHUuaWQpO1xuICAgICAgICAgICAgbGV0IHZhbCA9IEJpZ0ludCh1LnZhbHVlKTtcbiAgICAgICAgICAgIGlmIChjb2luLmFtb3VudFR5cGUgPT09ICdiaWdpbnQnKSB7XG4gICAgICAgICAgICAgIC8vIGJsb2NrY2hhaXIgcmV0dXJucyB0aGUgbnVtYmVyIHdpdGggdGhlIGNvcnJlY3QgcHJlY2lzaW9uLCBidXQgaW4gbnVtYmVyIGZvcm1hdFxuICAgICAgICAgICAgICAvLyBqc29uIHBhcnNlIHdvbid0IHBhcnNlIGl0IGNvcnJlY3RseSwgc28gd2UgcmVxdWVyeSB0aGUgdHhpZCBmb3IgdGhlIHR4IGhleCB0byBkZWNvZGUgaGVyZVxuICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHUudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBnZXRQcmV2VHgodHhpZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdHggPSBUcmFuc2FjdGlvbi5mcm9tQnl0ZXMoQnVmZmVyLmZyb20odHhIZXgsICdoZXgnKSk7XG4gICAgICAgICAgICAgICAgdmFsID0gdHguZ2V0T3V0cHV0cygpW3ZvdXRdLnZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0aGUgYXBpIG1heSByZXR1cm4gY2FzaGFkZHIncyBpbnN0ZWFkIG9mIGxlZ2FjeSBmb3IgQkNIIGFuZCBCQ0hBXG4gICAgICAgICAgICAvLyBkb3duc3RyZWFtIHByb2Nlc3NlcydzIG9ubHkgZXhwZWN0IGxlZ2FjeSBhZGRyZXNzZXNcbiAgICAgICAgICAgIHUgPSB7IC4uLnUsIGFkZHJlc3M6IGNvaW4uY2Fub25pY2FsQWRkcmVzcyh1LmFkZHJlc3MpIH07XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi51LFxuICAgICAgICAgICAgICB2YWx1ZTogdmFsLFxuICAgICAgICAgICAgICBjaGFpbjogY2hhaW4sXG4gICAgICAgICAgICAgIGluZGV4OiBhZGRySW5kZXgsXG4gICAgICAgICAgICAgIHByZXZUeDogZmV0Y2hQcmV2VHggPyBCdWZmZXIuZnJvbShhd2FpdCBnZXRQcmV2VHgodHhpZCksICdoZXgnKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0gYXMgV2FsbGV0VW5zcGVudDxiaWdpbnQ+O1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgd2FsbGV0VW5zcGVudHMucHVzaCguLi5wcm9jZXNzZWRVbnNwZW50cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG51bVNlcXVlbnRpYWxBZGRyZXNzZXNXaXRob3V0VHhzID49IE1BWF9TRVFVRU5USUFMX0FERFJFU1NFU19XSVRIT1VUX1RYUykge1xuICAgICAgLy8gc3RvcCBzZWFyY2hpbmcgZm9yIGFkZHJlc3NlcyB3aXRoIHVuc3BlbnRzIGluIHRoZW0sIHdlJ3ZlIGZvdW5kICR7TUFYX1NFUVVFTlRJQUxfQUREUkVTU0VTX1dJVEhPVVRfVFhTfSBpbiBhIHJvdyB3aXRoIG5vbmVcbiAgICAgIC8vIHdlIGFyZSBkb25lXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIGdhdGhlclVuc3BlbnRzKGFkZHJJbmRleCArIDEpO1xuICB9XG5cbiAgLy8gZ2V0IHVuc3BlbnRzIGZvciB0aGVzZSBhZGRyZXNzZXNcblxuICBjb25zdCB3YWxsZXRVbnNwZW50czogV2FsbGV0VW5zcGVudDxiaWdpbnQ+W10gPSBbXTtcbiAgLy8gVGhpcyB3aWxsIHBvcHVsYXRlIHdhbGxldEFkZHJlc3Nlc1xuICBhd2FpdCBnYXRoZXJVbnNwZW50cygwKTtcblxuICBpZiAod2FsbGV0VW5zcGVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gQ291bGRuJ3QgZmluZCBhbnkgYWRkcmVzc2VzIHdpdGggZnVuZHNcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gd2FsbGV0VW5zcGVudHM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlY292ZXJ5RmVlUGVyQnl0ZXMoXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHsgZGVmYXVsdFZhbHVlIH06IHsgZGVmYXVsdFZhbHVlOiBudW1iZXIgfVxuKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgaWYgKGNvaW4uZ2V0RmFtaWx5KCkgPT09ICdkb2dlJykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kb2dlY29pbi9kb2dlY29pbi9ibG9iL21hc3Rlci9kb2MvZmVlLXJlY29tbWVuZGF0aW9uLm1kXG4gICAgLy8gMC4wMSBET0dFIHBlciBLQlxuICAgIHJldHVybiAxMDAwO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgTWVtcG9vbEFwaS5mb3JDb2luKGNvaW4uZ2V0Q2hhaW4oKSkuZ2V0UmVjb3ZlcnlGZWVQZXJCeXRlcygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5kaXIoZSk7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uID0ge1xuICBpbnB1dHM/OiBXYWxsZXRVbnNwZW50SlNPTltdO1xuICB0cmFuc2FjdGlvbkhleDogc3RyaW5nO1xuICBjb2luOiBzdHJpbmc7XG4gIGJhY2t1cEtleTogc3RyaW5nO1xuICByZWNvdmVyeUFtb3VudDogbnVtYmVyO1xuICByZWNvdmVyeUFtb3VudFN0cmluZzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBiYWNrdXAga2V5IHJlY292ZXJ5IFBTQlQgY3JlYXRpb24uXG4gKiBBbGwgZmllbGRzIGFyZSBwcmUtdmFsaWRhdGVkIGFuZCBkZXJpdmVkIC0gbm8gc3RyaW5nIGtleSBwYXJzaW5nIG5lZWRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNvdmVyV2l0aFVuc3BlbnRzUGFyYW1zIHtcbiAgLyoqIFByZS1kZXJpdmVkIHdhbGxldCBrZXlzICovXG4gIHdhbGxldEtleXM6IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzO1xuICAvKiogUHJlLWRlcml2ZWQga2V5IHRyaXBsZSAodXNlciwgYmFja3VwLCBiaXRnbykuIENoZWNrIHByaXZhdGVLZXkgdG8gZGV0ZXJtaW5lIHNpZ25pbmcgY2FwYWJpbGl0eS4gKi9cbiAga2V5czogVHJpcGxlPEJJUDMyPjtcbiAgLyoqIFZhbGlkYXRlZCByZWNvdmVyeSBkZXN0aW5hdGlvbiBhZGRyZXNzICovXG4gIHJlY292ZXJ5RGVzdGluYXRpb246IHN0cmluZztcbiAgLyoqIEZlZSByYXRlIGluIHNhdG9zaGkgcGVyIHZieXRlICovXG4gIGZlZVJhdGVTYXRWQjogbnVtYmVyO1xuICAvKiogS1JTIGZlZSBhbW91bnQgaW4gc2F0b3NoaXMgKDAgaWYgbm90IEtSUyByZWNvdmVyeSkgKi9cbiAga3JzRmVlPzogYmlnaW50O1xuICAvKiogS1JTIGZlZSBhZGRyZXNzIChyZXF1aXJlZCBpZiBrcnNGZWUgPiAwKSAqL1xuICBrcnNGZWVBZGRyZXNzPzogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBoYXNQcml2YXRlS2V5KGtleTogQklQMzIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGtleS5wcml2YXRlS2V5ICE9PSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQnVpbGRzIGEgZnVuZHMgcmVjb3ZlcnkgUFNCVCB3aXRob3V0IEJpdEdvLCB1c2luZyBwcm92aWRlZCB1bnNwZW50cy5cbiAqXG4gKiBUaGlzIGlzIHRoZSBjb3JlIHRyYW5zYWN0aW9uIGJ1aWxkaW5nIGxvZ2ljLCBzZXBhcmF0ZWQgZnJvbSB1bnNwZW50IGdhdGhlcmluZ1xuICogYW5kIG91dHB1dCBmb3JtYXR0aW5nLiBSZXR1cm5zIGEgUFNCVCBhdCB0aGUgYXBwcm9wcmlhdGUgc2lnbmluZyBzdGFnZS5cbiAqXG4gKiBTaWduaW5nIGJlaGF2aW9yIGlzIGRldGVybWluZWQgYnkgdGhlIGtleXM6XG4gKiAtIElmIHVzZXIga2V5IGhhcyBubyBwcml2YXRlIGtleTogdW5zaWduZWQgUFNCVFxuICogLSBJZiB1c2VyIGtleSBoYXMgcHJpdmF0ZSBrZXkgYnV0IGJhY2t1cCBkb2Vzbid0OiBoYWxmLXNpZ25lZCBQU0JUICh1c2VyIHNpZ25hdHVyZSBvbmx5KVxuICogLSBJZiBib3RoIHVzZXIgYW5kIGJhY2t1cCBrZXlzIGhhdmUgcHJpdmF0ZSBrZXlzOiBmdWxseSBzaWduZWQgUFNCVCAobm90IGZpbmFsaXplZClcbiAqXG4gKiBAcGFyYW0gY29pbk5hbWUgLSBUaGUgY29pbiBuYW1lIGZvciB0aGUgUFNCVFxuICogQHBhcmFtIHBhcmFtcyAtIFJlY292ZXJ5IHBhcmFtZXRlcnMgd2l0aCBwcmUtZGVyaXZlZCBrZXlzXG4gKiBAcGFyYW0gdW5zcGVudHMgLSBUaGUgd2FsbGV0IHVuc3BlbnRzIHRvIHJlY292ZXIgKG11c3QgYmUgbm9uLWVtcHR5KVxuICogQHJldHVybnMgVGhlIFBTQlQgYXQgdGhlIGFwcHJvcHJpYXRlIHNpZ25pbmcgc3RhZ2UgKG5ldmVyIGZpbmFsaXplZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJhY2t1cEtleVJlY292ZXJ5V2l0aFdhbGxldFVuc3BlbnRzKFxuICBjb2luTmFtZTogVXR4b0NvaW5OYW1lLFxuICBwYXJhbXM6IFJlY292ZXJXaXRoVW5zcGVudHNQYXJhbXMsXG4gIHVuc3BlbnRzOiBXYWxsZXRVbnNwZW50PGJpZ2ludD5bXVxuKTogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0IHtcbiAgY29uc3QgeyB3YWxsZXRLZXlzLCBrZXlzLCByZWNvdmVyeURlc3RpbmF0aW9uLCBmZWVSYXRlU2F0VkIsIGtyc0ZlZSwga3JzRmVlQWRkcmVzcyB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IHRvdGFsSW5wdXRBbW91bnQgPSB1bnNwZW50U3VtKHVuc3BlbnRzKTtcbiAgaWYgKHRvdGFsSW5wdXRBbW91bnQgPD0gQmlnSW50KDApKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yTm9JbnB1dFRvUmVjb3ZlcigpO1xuICB9XG5cbiAgbGV0IHBzYnQgPSBjcmVhdGVCYWNrdXBLZXlSZWNvdmVyeVBzYnQoY29pbk5hbWUsIHdhbGxldEtleXMsIHVuc3BlbnRzLCB7XG4gICAgZmVlUmF0ZVNhdFZCOiBmZWVSYXRlU2F0VkIsXG4gICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogcmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICBrZXlSZWNvdmVyeVNlcnZpY2VGZWU6IGtyc0ZlZSA/PyBCaWdJbnQoMCksXG4gICAga2V5UmVjb3ZlcnlTZXJ2aWNlRmVlQWRkcmVzczoga3JzRmVlQWRkcmVzcyxcbiAgfSk7XG5cbiAgY29uc3QgdXNlckhhc1ByaXZhdGVLZXkgPSBoYXNQcml2YXRlS2V5KGtleXNbMF0pO1xuICBjb25zdCBiYWNrdXBIYXNQcml2YXRlS2V5ID0gaGFzUHJpdmF0ZUtleShrZXlzWzFdKTtcblxuICBpZiAoIXVzZXJIYXNQcml2YXRlS2V5KSB7XG4gICAgLy8gVW5zaWduZWQgc3dlZXAgLSByZXR1cm4gdW5zaWduZWQgUFNCVFxuICAgIHJldHVybiBwc2J0O1xuICB9XG5cbiAgY29uc3QgcmVwbGF5UHJvdGVjdGlvbiA9IHsgcHVibGljS2V5czogZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmtleXMoY29pbk5hbWUpIH07XG5cbiAgLy8gU2lnbiB3aXRoIHVzZXIga2V5XG4gIHBzYnQgPSBzaWduQW5kVmVyaWZ5UHNidChwc2J0LCBrZXlzWzBdLCB3YWxsZXRLZXlzLCByZXBsYXlQcm90ZWN0aW9uKTtcblxuICBpZiAoYmFja3VwSGFzUHJpdmF0ZUtleSkge1xuICAgIC8vIEZ1bGwgcmVjb3ZlcnkgLSBzaWduIHdpdGggYmFja3VwIGtleSB0b29cbiAgICBwc2J0ID0gc2lnbkFuZFZlcmlmeVBzYnQocHNidCwga2V5c1sxXSwgd2FsbGV0S2V5cywgcmVwbGF5UHJvdGVjdGlvbik7XG4gIH1cblxuICAvLyBSZXR1cm4gUFNCVCAobm90IGZpbmFsaXplZCAtIGxldCBjYWxsZXIgZGVjaWRlIGhvdyB0byBmb3JtYXQpXG4gIHJldHVybiBwc2J0O1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIGZvcm1hdHRpbmcgYSBiYWNrdXAga2V5IHJlY292ZXJ5IHJlc3VsdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtYXRCYWNrdXBLZXlSZWNvdmVyeVBhcmFtcyB7XG4gIC8qKiBQcmUtZGVyaXZlZCB3YWxsZXQga2V5cyAqL1xuICB3YWxsZXRLZXlzOiBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cztcbiAgLyoqIFByZS1kZXJpdmVkIGtleSB0cmlwbGUgKHVzZXIsIGJhY2t1cCwgYml0Z28pLiBDaGVjayBwcml2YXRlS2V5IHRvIGRldGVybWluZSBzaWduaW5nIGNhcGFiaWxpdHkuICovXG4gIGtleXM6IFRyaXBsZTxCSVAzMj47XG4gIC8qKiBSZWNvdmVyeSBkZXN0aW5hdGlvbiBhZGRyZXNzICovXG4gIHJlY292ZXJ5RGVzdGluYXRpb246IHN0cmluZztcbiAgLyoqIEtSUyBwcm92aWRlciBuYW1lIChpZiBiYWNrdXAga2V5IGlzIGhlbGQgYnkgS1JTKSAqL1xuICBrcnNQcm92aWRlcj86IHN0cmluZztcbiAgLyoqIE9yaWdpbmFsIGJhY2t1cCBrZXkgc3RyaW5nIChuZWVkZWQgZm9yIEtSUyByZWNvdmVyeSByZXNwb25zZSkgKi9cbiAgYmFja3VwS2V5Pzogc3RyaW5nO1xuICAvKiogVGhlIHdhbGxldCB1bnNwZW50cyAobmVlZGVkIGZvciBpbnB1dHMgYXJyYXkgaW4gcmVzcG9uc2UpICovXG4gIHVuc3BlbnRzOiBXYWxsZXRVbnNwZW50PGJpZ2ludD5bXTtcbn1cblxuLyoqXG4gKiBGb3JtYXRzIGEgYmFja3VwIGtleSByZWNvdmVyeSBQU0JUIGludG8gdGhlIGFwcHJvcHJpYXRlIHJlc3BvbnNlIGZvcm1hdC5cbiAqXG4gKiBPdXRwdXQgZm9ybWF0IGRlcGVuZHMgb24gc2lnbmluZyBzdGF0ZSBhbmQgS1JTIHByb3ZpZGVyOlxuICogLSBVbnNpZ25lZCBzd2VlcDogRm9ybWF0dGVkT2ZmbGluZVZhdWx0VHhJbmZvIHdpdGggUFNCVCBoZXhcbiAqIC0gS1JTIGtleXRlcm5hbDogQmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbiB3aXRoIGxlZ2FjeSBoYWxmLXNpZ25lZCB0eCBoZXhcbiAqIC0gS1JTIG90aGVyOiBCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uIHdpdGggUFNCVCBoZXhcbiAqIC0gRnVsbCByZWNvdmVyeTogQmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbiB3aXRoIGZpbmFsaXplZCB0eCBoZXhcbiAqXG4gKiBAcGFyYW0gY29pbiAtIFRoZSBjb2luIGluc3RhbmNlXG4gKiBAcGFyYW0gcHNidCAtIFRoZSBQU0JUIHRvIGZvcm1hdCAoYXQgYXBwcm9wcmlhdGUgc2lnbmluZyBzdGFnZSlcbiAqIEBwYXJhbSBwYXJhbXMgLSBGb3JtYXR0aW5nIHBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgcmVjb3ZlcnkgcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRCYWNrdXBLZXlSZWNvdmVyeVJlc3VsdChcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgcHNidDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LFxuICBwYXJhbXM6IEZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UGFyYW1zXG4pOiBCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uIHwgRm9ybWF0dGVkT2ZmbGluZVZhdWx0VHhJbmZvIHtcbiAgY29uc3QgeyB3YWxsZXRLZXlzLCBrZXlzLCByZWNvdmVyeURlc3RpbmF0aW9uLCBrcnNQcm92aWRlciwgYmFja3VwS2V5LCB1bnNwZW50cyB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IHVzZXJIYXNQcml2YXRlS2V5ID0gaGFzUHJpdmF0ZUtleShrZXlzWzBdKTtcbiAgY29uc3QgYmFja3VwSGFzUHJpdmF0ZUtleSA9IGhhc1ByaXZhdGVLZXkoa2V5c1sxXSk7XG5cbiAgY29uc3QgaXNVbnNpZ25lZFN3ZWVwID0gIXVzZXJIYXNQcml2YXRlS2V5ICYmICFiYWNrdXBIYXNQcml2YXRlS2V5O1xuICBjb25zdCBpc0tyc1JlY292ZXJ5ID0ga3JzUHJvdmlkZXIgIT09IHVuZGVmaW5lZCAmJiB1c2VySGFzUHJpdmF0ZUtleSAmJiAhYmFja3VwSGFzUHJpdmF0ZUtleTtcbiAgY29uc3QgaXNGdWxsUmVjb3ZlcnkgPSB1c2VySGFzUHJpdmF0ZUtleSAmJiBiYWNrdXBIYXNQcml2YXRlS2V5O1xuXG4gIC8vIFVuc2lnbmVkIHN3ZWVwIC0gcmV0dXJuIEZvcm1hdHRlZE9mZmxpbmVWYXVsdFR4SW5mb1xuICBpZiAoaXNVbnNpZ25lZFN3ZWVwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR4SGV4OiBlbmNvZGVUcmFuc2FjdGlvbihwc2J0KS50b1N0cmluZygnaGV4JyksXG4gICAgICB0eEluZm86IHt9LFxuICAgICAgZmVlSW5mbzoge30sXG4gICAgICBjb2luOiBjb2luLmdldENoYWluKCksXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlVHhGb3JtYXQgPSAhaXNLcnNSZWNvdmVyeSB8fCBrcnNQcm92aWRlciA9PT0gJ2tleXRlcm5hbCcgPyAnbGVnYWN5JyA6ICdwc2J0JztcbiAgY29uc3QgdHhJbmZvID0ge30gYXMgQmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbjtcblxuICAvLyBJbmNsdWRlIGlucHV0cyBhcnJheSBmb3IgbGVnYWN5IGZvcm1hdCByZXNwb25zZXNcbiAgdHhJbmZvLmlucHV0cyA9XG4gICAgcmVzcG9uc2VUeEZvcm1hdCA9PT0gJ2xlZ2FjeSdcbiAgICAgID8gdW5zcGVudHMubWFwKCh1KSA9PiAoeyAuLi51LCB2YWx1ZTogTnVtYmVyKHUudmFsdWUpLCB2YWx1ZVN0cmluZzogdS52YWx1ZS50b1N0cmluZygpLCBwcmV2VHg6IHVuZGVmaW5lZCB9KSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gIGlmIChpc0tyc1JlY292ZXJ5KSB7XG4gICAgLy8gS1JTIHJlY292ZXJ5IC0gaGFsZi1zaWduZWRcbiAgICAvLyBrZXl0ZXJuYWwgdXNlcyBsZWdhY3kgZm9ybWF0LCBvdGhlciBLUlMgcHJvdmlkZXJzIHVzZSBQU0JUIGZvcm1hdFxuICAgIHR4SW5mby50cmFuc2FjdGlvbkhleCA9XG4gICAgICBrcnNQcm92aWRlciA9PT0gJ2tleXRlcm5hbCdcbiAgICAgICAgPyBCdWZmZXIuZnJvbShwc2J0LmdldEhhbGZTaWduZWRMZWdhY3lGb3JtYXQoKSkudG9TdHJpbmcoJ2hleCcpXG4gICAgICAgIDogZW5jb2RlVHJhbnNhY3Rpb24ocHNidCkudG9TdHJpbmcoJ2hleCcpO1xuXG4gICAgdHhJbmZvLmNvaW4gPSBjb2luLmdldENoYWluKCk7XG4gICAgdHhJbmZvLmJhY2t1cEtleSA9IGJhY2t1cEtleSA/PyAnJztcbiAgICBjb25zdCByZWNvdmVyeUFtb3VudCA9IGdldFJlY292ZXJ5QW1vdW50KHBzYnQsIHdhbGxldEtleXMsIHJlY292ZXJ5RGVzdGluYXRpb24pO1xuICAgIHR4SW5mby5yZWNvdmVyeUFtb3VudCA9IE51bWJlcihyZWNvdmVyeUFtb3VudCk7XG4gICAgdHhJbmZvLnJlY292ZXJ5QW1vdW50U3RyaW5nID0gcmVjb3ZlcnlBbW91bnQudG9TdHJpbmcoKTtcbiAgfSBlbHNlIGlmIChpc0Z1bGxSZWNvdmVyeSkge1xuICAgIC8vIEZ1bGwgcmVjb3ZlcnkgLSBmaW5hbGl6ZSBhbmQgZXh0cmFjdCB0cmFuc2FjdGlvblxuICAgIHBzYnQuZmluYWxpemVBbGxJbnB1dHMoKTtcbiAgICB0eEluZm8udHJhbnNhY3Rpb25IZXggPSBCdWZmZXIuZnJvbShwc2J0LmV4dHJhY3RUcmFuc2FjdGlvbigpLnRvQnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpO1xuICB9XG5cbiAgcmV0dXJuIHR4SW5mbztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0QmlwMzJLZXlzKGJpdGdvOiBCaXRHb0Jhc2UsIHBhcmFtczogUmVjb3ZlclBhcmFtcyk6IFByb21pc2U8VHJpcGxlPEJJUDMyPj4ge1xuICBjb25zdCBrZXlzID0gYXdhaXQgZ2V0QmlwMzJLZXlzRnJvbVNka0NvcmUoYml0Z28sIHBhcmFtcywgeyByZXF1aXJlQml0R29YcHViOiB0cnVlIH0pO1xuICBpZiAoIWlzVHJpcGxlKGtleXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBleHBlY3RlZCBrZXkgdHJpcGxlYCk7XG4gIH1cbiAgcmV0dXJuIGtleXMubWFwKChrKSA9PiBCSVAzMi5mcm9tKGsudG9CYXNlNTgoKSkpIGFzIFRyaXBsZTxCSVAzMj47XG59XG5cbi8qKlxuICogQnVpbGRzIGEgZnVuZHMgcmVjb3ZlcnkgdHJhbnNhY3Rpb24gd2l0aG91dCBCaXRHby5cbiAqXG4gKiBSZXR1cm5zIHRyYW5zYWN0aW9uIGhleCBpbiBsZWdhY3kgZm9ybWF0IGZvciB1bnNpZ25lZCBzd2VlcCB0cmFuc2FjdGlvbiwgaGFsZiBzaWduZWQgYmFja3VwIHJlY292ZXJ5IHRyYW5zYWN0aW9uIHdpdGggS1JTIHByb3ZpZGVyIChvbmx5IGtleXRlcm5hbCksXG4gKiBmdWxseSBzaWduZWQgYmFja3VwIHJlY292ZXJ5IHRyYW5zYWN0aW9uIHdpdGhvdXQgYSBLUlMgcHJvdmlkZXIuXG4gKlxuICogUmV0dXJucyBQU0JUIGhleCBmb3IgaGFsZiBzaWduZWQgYmFja3VwIHJlY292ZXJ5IHRyYW5zYWN0aW9uIHdpdGggS1JTIHByb3ZpZGVyIChleGNsdWRpbmcga2V5dGVybmFsKVxuICogRm9yIFBTQlQgaGV4IGNhc2VzLCBVbnNwZW50cyBhcmUgbm90IHJlcXVpcmVkIGluIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSBjb2luXG4gKiBAcGFyYW0gYml0Z29cbiAqIEBwYXJhbSBwYXJhbXNcbiAqIC0gdXNlcktleTogW2VuY3J5cHRlZF0geHBydiwgb3IgeHB1YlxuICogLSBiYWNrdXBLZXk6IFtlbmNyeXB0ZWRdIHhwcnYsIG9yIHhwdWIgaWYgdGhlIHhwcnYgaXMgaGVsZCBieSBhIEtSUyBwcm92aWRlclxuICogLSB3YWxsZXRQYXNzcGhyYXNlOiBuZWNlc3NhcnkgaWYgb25lIG9mIHRoZSB4cHJ2cyBpcyBlbmNyeXB0ZWRcbiAqIC0gYml0Z29LZXk6IHhwdWJcbiAqIC0ga3JzUHJvdmlkZXI6IG5lY2Vzc2FyeSBpZiBiYWNrdXAga2V5IGlzIGhlbGQgYnkgS1JTXG4gKiAtIHJlY292ZXJ5RGVzdGluYXRpb246IHRhcmdldCBhZGRyZXNzIHRvIHNlbmQgcmVjb3ZlcmVkIGZ1bmRzIHRvXG4gKiAtIHNjYW46IHRoZSBhbW91bnQgb2YgY29uc2VjdXRpdmUgYWRkcmVzc2VzIHdpdGhvdXQgdW5zcGVudHMgdG8gc2NhbiB0aHJvdWdoIGJlZm9yZSBzdG9wcGluZ1xuICogLSBpZ25vcmVBZGRyZXNzVHlwZXM6IChvcHRpb25hbCkgc2NyaXB0cyB0byBpZ25vcmVcbiAqICAgICAgICBmb3IgZXhhbXBsZTogWydwMnNoUDJ3c2gnLCAncDJ3c2gnXSB3aWxsIHByZXZlbnQgY29kZSBmcm9tIGNoZWNraW5nIGZvciB3cmFwcGVkLXNlZ3dpdCBhbmQgbmF0aXZlLXNlZ3dpdCBjaGFpbnMgb24gdGhlIHB1YmxpYyBibG9jayBleHBsb3JlcnNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJhY2t1cEtleVJlY292ZXJ5KFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICBiaXRnbzogQml0R29CYXNlLFxuICBwYXJhbXM6IFJlY292ZXJQYXJhbXNcbik6IFByb21pc2U8QmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbiB8IEZvcm1hdHRlZE9mZmxpbmVWYXVsdFR4SW5mbz4ge1xuICBpZiAoXy5pc1VuZGVmaW5lZChwYXJhbXMudXNlcktleSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgdXNlcktleScpO1xuICB9XG5cbiAgaWYgKF8uaXNVbmRlZmluZWQocGFyYW1zLmJhY2t1cEtleSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgYmFja3VwS2V5Jyk7XG4gIH1cblxuICBpZiAoXG4gICAgXy5pc1VuZGVmaW5lZChwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbikgfHxcbiAgICAhY29pbi5pc1ZhbGlkQWRkcmVzcyhwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbiwgeyBhbnlGb3JtYXQ6IHRydWUgfSlcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHJlY292ZXJ5RGVzdGluYXRpb24nKTtcbiAgfVxuXG4gIGlmICghXy5pc1VuZGVmaW5lZChwYXJhbXMuc2NhbikgJiYgKCFfLmlzSW50ZWdlcihwYXJhbXMuc2NhbikgfHwgcGFyYW1zLnNjYW4gPCAwKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2NhbiBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5mZWVSYXRlICE9PSB1bmRlZmluZWQgJiYgKCFOdW1iZXIuaXNGaW5pdGUocGFyYW1zLmZlZVJhdGUpIHx8IHBhcmFtcy5mZWVSYXRlIDw9IDApKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdmZWVSYXRlIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTtcbiAgfVxuXG4gIC8vIGNoZWNrIHdoZXRoZXIga2V5IG1hdGVyaWFsIGFuZCBwYXNzd29yZCBhdXRoZW50aWNhdGUgdGhlIHVzZXJzIGFuZCByZXR1cm4gcGFyZW50IGtleXMgb2YgYWxsIHRocmVlIGtleXMgb2YgdGhlIHdhbGxldFxuICBjb25zdCBrZXlzID0gYXdhaXQgZ2V0QmlwMzJLZXlzKGJpdGdvLCBwYXJhbXMpO1xuICBjb25zdCB3YWxsZXRLZXlzID0gZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMuZnJvbSh7XG4gICAgdHJpcGxlOiBrZXlzLFxuICAgIGRlcml2YXRpb25QcmVmaXhlczogW3BhcmFtcy51c2VyS2V5UGF0aCB8fCAnbS8wLzAnLCAnbS8wLzAnLCAnbS8wLzAnXSxcbiAgfSk7XG5cbiAgY29uc3QgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8YmlnaW50PltdID0gKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgZml4ZWRTY3JpcHRXYWxsZXQub3V0cHV0U2NyaXB0VHlwZXNcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAoYWRkcmVzc1R5cGUpID0+XG4gICAgICAgICAgICBmaXhlZFNjcmlwdFdhbGxldC5zdXBwb3J0c1NjcmlwdFR5cGUoY29pbi5uYW1lLCBhZGRyZXNzVHlwZSkgJiZcbiAgICAgICAgICAgICFwYXJhbXMuaWdub3JlQWRkcmVzc1R5cGVzPy5pbmNsdWRlcyhhZGRyZXNzVHlwZSlcbiAgICAgICAgKVxuICAgICAgICAucmVkdWNlKFxuICAgICAgICAgIChxdWVyaWVzLCBhZGRyZXNzVHlwZSkgPT4gW1xuICAgICAgICAgICAgLi4ucXVlcmllcyxcbiAgICAgICAgICAgIHF1ZXJ5QmxvY2tjaGFpblVuc3BlbnRzUGF0aChcbiAgICAgICAgICAgICAgY29pbixcbiAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICB3YWxsZXRLZXlzLFxuICAgICAgICAgICAgICBmaXhlZFNjcmlwdFdhbGxldC5DaGFpbkNvZGUudmFsdWUoYWRkcmVzc1R5cGUsICdleHRlcm5hbCcpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgcXVlcnlCbG9ja2NoYWluVW5zcGVudHNQYXRoKFxuICAgICAgICAgICAgICBjb2luLFxuICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICAgIHdhbGxldEtleXMsXG4gICAgICAgICAgICAgIGZpeGVkU2NyaXB0V2FsbGV0LkNoYWluQ29kZS52YWx1ZShhZGRyZXNzVHlwZSwgJ2ludGVybmFsJylcbiAgICAgICAgICAgICksXG4gICAgICAgICAgXSxcbiAgICAgICAgICBbXSBhcyBQcm9taXNlPFdhbGxldFVuc3BlbnQ8YmlnaW50PltdPltdXG4gICAgICAgIClcbiAgICApXG4gICkuZmxhdCgpO1xuXG4gIGNvbnN0IGZlZVJhdGVTYXRWQiA9XG4gICAgcGFyYW1zLmZlZVJhdGUgIT09IHVuZGVmaW5lZFxuICAgICAgPyBwYXJhbXMuZmVlUmF0ZVxuICAgICAgOiBhd2FpdCBnZXRSZWNvdmVyeUZlZVBlckJ5dGVzKGNvaW4sIHsgZGVmYXVsdFZhbHVlOiBERUZBVUxUX1JFQ09WRVJZX0ZFRVJBVEVfU0FUX1ZCWVRFX1YyIH0pO1xuXG4gIC8vIENhbGN1bGF0ZSBLUlMgZmVlIGlmIG5lZWRlZFxuICBjb25zdCB1c2VySGFzUHJpdmF0ZUtleSA9IGhhc1ByaXZhdGVLZXkoa2V5c1swXSk7XG4gIGNvbnN0IGJhY2t1cEhhc1ByaXZhdGVLZXkgPSBoYXNQcml2YXRlS2V5KGtleXNbMV0pO1xuICBjb25zdCBpc0tyc1JlY292ZXJ5ID0gcGFyYW1zLmtyc1Byb3ZpZGVyICE9PSB1bmRlZmluZWQgJiYgdXNlckhhc1ByaXZhdGVLZXkgJiYgIWJhY2t1cEhhc1ByaXZhdGVLZXk7XG5cbiAgbGV0IGtyc0ZlZSA9IEJpZ0ludCgwKTtcbiAgbGV0IGtyc0ZlZUFkZHJlc3M6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBpZiAoaXNLcnNSZWNvdmVyeSAmJiBwYXJhbXMua3JzUHJvdmlkZXIpIHtcbiAgICB0cnkge1xuICAgICAga3JzRmVlID0gQmlnSW50KGF3YWl0IGNhbGN1bGF0ZUZlZUFtb3VudChjb2luLCB7IHByb3ZpZGVyOiBwYXJhbXMua3JzUHJvdmlkZXIgfSkpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gRG9uJ3QgbGV0IHRoaXMgZXJyb3IgYmxvY2sgdGhlIHJlY292ZXJ5IC1cbiAgICAgIGNvbnNvbGUuZGlyKGVycik7XG4gICAgfVxuXG4gICAgaWYgKGtyc0ZlZSA+IEJpZ0ludCgwKSkge1xuICAgICAgY29uc3Qga3JzUHJvdmlkZXJDb25maWcgPSBnZXRLcnNQcm92aWRlcihjb2luLCBwYXJhbXMua3JzUHJvdmlkZXIpO1xuICAgICAgaWYgKCFrcnNQcm92aWRlckNvbmZpZy5mZWVBZGRyZXNzZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBrZXlQcm92aWRlciBtdXN0IGRlZmluZSBmZWVBZGRyZXNzZXNgKTtcbiAgICAgIH1cblxuICAgICAga3JzRmVlQWRkcmVzcyA9IGtyc1Byb3ZpZGVyQ29uZmlnLmZlZUFkZHJlc3Nlc1tjb2luLmdldENoYWluKCldO1xuXG4gICAgICBpZiAoIWtyc0ZlZUFkZHJlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGlzIEtSUyBwcm92aWRlciBoYXMgbm90IGNvbmZpZ3VyZWQgdGhlaXIgZmVlIHN0cnVjdHVyZSB5ZXQgLSByZWNvdmVyeSBjYW5ub3QgYmUgY29tcGxldGVkJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQnVpbGQgYW5kIHNpZ24gUFNCVFxuICBjb25zdCBwc2J0ID0gYmFja3VwS2V5UmVjb3ZlcnlXaXRoV2FsbGV0VW5zcGVudHMoXG4gICAgY29pbi5uYW1lLFxuICAgIHtcbiAgICAgIHdhbGxldEtleXMsXG4gICAgICBrZXlzLFxuICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogcGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICBmZWVSYXRlU2F0VkIsXG4gICAgICBrcnNGZWUsXG4gICAgICBrcnNGZWVBZGRyZXNzLFxuICAgIH0sXG4gICAgdW5zcGVudHNcbiAgKTtcblxuICAvLyBGb3JtYXQgdGhlIHJlc3VsdFxuICByZXR1cm4gZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQoY29pbiwgcHNidCwge1xuICAgIHdhbGxldEtleXMsXG4gICAga2V5cyxcbiAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICBrcnNQcm92aWRlcjogcGFyYW1zLmtyc1Byb3ZpZGVyLFxuICAgIGJhY2t1cEtleTogcGFyYW1zLmJhY2t1cEtleSxcbiAgICB1bnNwZW50cyxcbiAgfSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQml0R29WMVVuc3BlbnQge1xuICB0eF9oYXNoOiBzdHJpbmc7XG4gIHR4X291dHB1dF9uOiBudW1iZXI7XG4gIHZhbHVlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVjFTd2VlcFBhcmFtcyB7XG4gIHdhbGxldElkOiBzdHJpbmc7XG4gIHdhbGxldFBhc3NwaHJhc2U6IHN0cmluZztcbiAgdW5zcGVudHM6IEJpdEdvVjFVbnNwZW50W107XG4gIHJlY292ZXJ5RGVzdGluYXRpb246IHN0cmluZztcbiAgdXNlcktleTogc3RyaW5nO1xuICBvdHA6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWMVJlY292ZXJQYXJhbXMgZXh0ZW5kcyBPbWl0PFYxU3dlZXBQYXJhbXMsICdvdHAnPiB7XG4gIGJhY2t1cEtleTogc3RyaW5nO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdjFCYWNrdXBLZXlSZWNvdmVyeShcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgYml0Z286IEJpdEdvQmFzZSxcbiAgcGFyYW1zOiBWMVJlY292ZXJQYXJhbXNcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChcbiAgICBfLmlzVW5kZWZpbmVkKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uKSB8fFxuICAgICFjb2luLmlzVmFsaWRBZGRyZXNzKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uLCB7IGFueUZvcm1hdDogdHJ1ZSB9KVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmVjb3ZlcnlEZXN0aW5hdGlvbicpO1xuICB9XG5cbiAgY29uc3QgcmVjb3ZlcnlGZWVQZXJCeXRlID0gYXdhaXQgZ2V0UmVjb3ZlcnlGZWVQZXJCeXRlcyhjb2luLCB7XG4gICAgZGVmYXVsdFZhbHVlOiBERUZBVUxUX1JFQ09WRVJZX0ZFRVJBVEVfU0FUX1ZCWVRFX1YxLFxuICB9KTtcbiAgY29uc3QgdjF3YWxsZXQgPSBhd2FpdCBiaXRnby53YWxsZXRzKCkuZ2V0KHsgaWQ6IHBhcmFtcy53YWxsZXRJZCB9KTtcbiAgcmV0dXJuIGF3YWl0IHYxd2FsbGV0LnJlY292ZXIoe1xuICAgIC4uLnBhcmFtcyxcbiAgICBmZWVSYXRlOiByZWNvdmVyeUZlZVBlckJ5dGUsXG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdjFTd2VlcChcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgYml0Z286IEJpdEdvQmFzZSxcbiAgcGFyYW1zOiBWMVN3ZWVwUGFyYW1zXG4pOiBQcm9taXNlPHtcbiAgdHg6IHN0cmluZztcbiAgaGFzaDogc3RyaW5nO1xuICBzdGF0dXM6IHN0cmluZztcbn0+IHtcbiAgaWYgKFxuICAgIF8uaXNVbmRlZmluZWQocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24pIHx8XG4gICAgIWNvaW4uaXNWYWxpZEFkZHJlc3MocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24sIHsgYW55Rm9ybWF0OiB0cnVlIH0pXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCByZWNvdmVyeURlc3RpbmF0aW9uJyk7XG4gIH1cblxuICBsZXQgcmVjb3ZlcnlGZWVQZXJCeXRlID0gMTAwO1xuICBpZiAoYml0Z28uZW52ID09PSAncHJvZCcpIHtcbiAgICByZWNvdmVyeUZlZVBlckJ5dGUgPSBhd2FpdCBnZXRSZWNvdmVyeUZlZVBlckJ5dGVzKGNvaW4sIHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9SRUNPVkVSWV9GRUVSQVRFX1NBVF9WQllURV9WMV9TV0VFUCxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHYxd2FsbGV0ID0gYXdhaXQgYml0Z28ud2FsbGV0cygpLmdldCh7IGlkOiBwYXJhbXMud2FsbGV0SWQgfSk7XG4gIHJldHVybiBhd2FpdCB2MXdhbGxldC5zd2VlcCh7XG4gICAgLi4ucGFyYW1zLFxuICAgIGZlZVJhdGU6IHJlY292ZXJ5RmVlUGVyQnl0ZSxcbiAgfSk7XG59XG4iXX0=
|
|
404
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja3VwS2V5UmVjb3ZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVjb3ZlcnkvYmFja3VwS2V5UmVjb3ZlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sRUFFTCxxQkFBcUIsRUFDckIsY0FBYyxFQUNkLFlBQVksSUFBSSx1QkFBdUIsRUFDdkMsUUFBUSxFQUNSLFlBQVksR0FFYixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHekUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxrQkFBa0IsRUFBZ0IsTUFBTSxVQUFVLENBQUM7QUFDNUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQXNCLE1BQU0sWUFBWSxDQUFDO0FBRTNFLE9BQU8sRUFBRSxPQUFPLEVBQW9CLE1BQU0sb0JBQW9CLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sUUFBUSxDQUFDO0FBUXhFLDBEQUEwRDtBQUMxRCxNQUFNLENBQUMsTUFBTSxxQ0FBcUMsR0FBRyxFQUFFLENBQUM7QUFFeEQsNkhBQTZIO0FBQzdILE1BQU0sQ0FBQyxNQUFNLDJDQUEyQyxHQUFHLEdBQUcsQ0FB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SSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFDckUsQ0FBQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsSUFBSSxrQkFBa0IsR0FBRyxHQUFHLENBQUM7SUFDN0IsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQ3pCLGtCQUFrQixHQUFHLE1BQU0sc0JBQXNCLENBQUMsSUFBSSxFQUFFO1lBQ3RELFlBQVksRUFBRSwyQ0FBMkM7U0FDMUQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNwRSxPQUFPLE1BQU0sUUFBUSxDQUFDLEtBQUssQ0FBQztRQUMxQixHQUFHLE1BQU07UUFDVCxPQUFPLEVBQUUsa0JBQWtCO0tBQzVCLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgQml0R29CYXNlLFxuICBFcnJvck5vSW5wdXRUb1JlY292ZXIsXG4gIGdldEtyc1Byb3ZpZGVyLFxuICBnZXRCaXAzMktleXMgYXMgZ2V0QmlwMzJLZXlzRnJvbVNka0NvcmUsXG4gIGlzVHJpcGxlLFxuICBrcnNQcm92aWRlcnMsXG4gIFRyaXBsZSxcbn0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEJJUDMyLCBmaXhlZFNjcmlwdFdhbGxldCwgVHJhbnNhY3Rpb24gfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHsgQWJzdHJhY3RVdHhvQ29pbiB9IGZyb20gJy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHsgc2lnbkFuZFZlcmlmeVBzYnQgfSBmcm9tICcuLi90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9zaWduVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgZ2VuZXJhdGVBZGRyZXNzV2l0aENoYWluQW5kSW5kZXggfSBmcm9tICcuLi9hZGRyZXNzJztcbmltcG9ydCB7IGVuY29kZVRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vdHJhbnNhY3Rpb24vZGVjb2RlJztcbmltcG9ydCB7IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzIH0gZnJvbSAnLi4vdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvcmVwbGF5UHJvdGVjdGlvbic7XG5pbXBvcnQgeyBnZXRNYWlubmV0Q29pbk5hbWUsIFV0eG9Db2luTmFtZSB9IGZyb20gJy4uL25hbWVzJztcbmltcG9ydCB7IHBhcnNlT3V0cHV0SWQsIHVuc3BlbnRTdW0sIHR5cGUgV2FsbGV0VW5zcGVudCB9IGZyb20gJy4uL3Vuc3BlbnQnO1xuXG5pbXBvcnQgeyBmb3JDb2luLCBSZWNvdmVyeVByb3ZpZGVyIH0gZnJvbSAnLi9SZWNvdmVyeVByb3ZpZGVyJztcbmltcG9ydCB7IE1lbXBvb2xBcGkgfSBmcm9tICcuL21lbXBvb2xBcGknO1xuaW1wb3J0IHsgQ29pbmdlY2tvQXBpIH0gZnJvbSAnLi9jb2luZ2Vja29BcGknO1xuaW1wb3J0IHsgY3JlYXRlQmFja3VwS2V5UmVjb3ZlcnlQc2J0LCBnZXRSZWNvdmVyeUFtb3VudCB9IGZyb20gJy4vcHNidCc7XG5cbnR5cGUgU2NyaXB0VHlwZTJPZjMgPSBmaXhlZFNjcmlwdFdhbGxldC5PdXRwdXRTY3JpcHRUeXBlO1xudHlwZSBDaGFpbkNvZGUgPSBmaXhlZFNjcmlwdFdhbGxldC5DaGFpbkNvZGU7XG50eXBlIFdhbGxldFVuc3BlbnRKU09OID0gV2FsbGV0VW5zcGVudCAmIHtcbiAgdmFsdWVTdHJpbmc6IHN0cmluZztcbn07XG5cbi8vIFYxIG9ubHkgZGVhbHMgd2l0aCBCVEMuIDUwIHNhdC92Ynl0ZSBpcyB2ZXJ5IGFyYml0cmFyeS5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1JFQ09WRVJZX0ZFRVJBVEVfU0FUX1ZCWVRFX1YxID0gNTA7XG5cbi8vIEZJWE1FKEJUQy0yNjkxKTogaXQgaXMgdW5jbGVhciB3aHkgc3dlZXBzIGhhdmUgYSBkaWZmZXJlbnQgZGVmYXVsdCB0aGFuIHJlZ3VsYXIgcmVjb3ZlcnkuIDEwMCBzYXQvdmJ5dGUgaXMgZXh0cmVtZWx5IGhpZ2guXG5leHBvcnQgY29uc3QgREVGQVVMVF9SRUNPVkVSWV9GRUVSQVRFX1NBVF9WQllURV9WMV9TV0VFUCA9IDEwMDtcblxuLy8gRklYTUUoQlRDLTI2OTEpOiBpdCBtYWtlcyBsaXR0bGUgc2Vuc2UgdG8gaGF2ZSBhIHNpbmdsZSBkZWZhdWx0IGZvciBldmVyeSBjb2luLlxuZXhwb3J0IGNvbnN0IERFRkFVTFRfUkVDT1ZFUllfRkVFUkFURV9TQVRfVkJZVEVfVjIgPSA1MDtcbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWF0dGVkT2ZmbGluZVZhdWx0VHhJbmZvIHtcbiAgdHhJbmZvOiB7XG4gICAgdW5zcGVudHM/OiBXYWxsZXRVbnNwZW50SlNPTltdO1xuICB9O1xuICB0eEhleDogc3RyaW5nO1xuICBmZWVJbmZvOiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj47XG4gIGNvaW46IHN0cmluZztcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGN1cnJlbnQgbWFya2V0IHByaWNlIGZyb20gYSB0aGlyZCBwYXJ0eSB0byBiZSB1c2VkIGZvciByZWNvdmVyeVxuICogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGludGVuZGVkIGZvciBub24tYml0Z28gcmVjb3ZlcnkgdHJhbnNhY3Rpb25zLCB3aGVuIGl0IGlzIG5lY2Vzc2FyeVxuICogdG8gY2FsY3VsYXRlIHRoZSByb3VnaCBmZWUgbmVlZGVkIHRvIHBheSB0byBLZXl0ZXJuYWwuIFdlIGFyZSBva2F5IHdpdGggYXBwcm94aW1hdGluZyxcbiAqIGJlY2F1c2UgdGhlIHJlc3VsdGluZyBwcmljZSBvZiB0aGlzIGZ1bmN0aW9uIG9ubHkgaGFzIGxlc3MgdGhhbiAxIGRvbGxhciBpbmZsdWVuY2Ugb24gdGhlXG4gKiBmZWUgdGhhdCBuZWVkcyB0byBiZSBwYWlkIHRvIEtleXRlcm5hbC5cbiAqXG4gKiBTZWUgY2FsY3VsYXRlRmVlQW1vdW50IGZ1bmN0aW9uOiAgcmV0dXJuIE1hdGgucm91bmQoZmVlQW1vdW50VXNkIC8gY3VycmVudFByaWNlICogc2VsZi5nZXRCYXNlRmFjdG9yKCkpO1xuICpcbiAqIFRoaXMgZW5kIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgdXNlZCBhcyBhbiBhY2N1cmF0ZSBlbmRwb2ludCwgc2luY2Ugc29tZSBjb2lucycgcHJpY2VzIGFyZSBtaXNzaW5nIGZyb20gdGhlIHByb3ZpZGVyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFJlY292ZXJ5TWFya2V0UHJpY2UoY29pbjogQWJzdHJhY3RVdHhvQ29pbik6IFByb21pc2U8bnVtYmVyPiB7XG4gIHJldHVybiBhd2FpdCBuZXcgQ29pbmdlY2tvQXBpKCkuZ2V0VVNEUHJpY2UoY29pbi5nZXRGYW1pbHkoKSk7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYW1vdW50IChpbiBiYXNlIHVuaXRzKSB0byBwYXkgYSBLUlMgcHJvdmlkZXIgd2hlbiBidWlsZGluZyBhIHJlY292ZXJ5IHRyYW5zYWN0aW9uXG4gKiBAcGFyYW0gY29pblxuICogQHBhcmFtIHBhcmFtc1xuICogQHBhcmFtIHBhcmFtcy5wcm92aWRlciB7U3RyaW5nfSB0aGUgS1JTIHByb3ZpZGVyIHRoYXQgaG9sZHMgdGhlIGJhY2t1cCBrZXlcbiAqIEByZXR1cm5zIHsqfVxuICovXG5hc3luYyBmdW5jdGlvbiBjYWxjdWxhdGVGZWVBbW91bnQoY29pbjogQWJzdHJhY3RVdHhvQ29pbiwgcGFyYW1zOiB7IHByb3ZpZGVyOiBzdHJpbmcgfSk6IFByb21pc2U8bnVtYmVyPiB7XG4gIGNvbnN0IGtyc1Byb3ZpZGVyID0ga3JzUHJvdmlkZXJzW3BhcmFtcy5wcm92aWRlcl07XG5cbiAgaWYgKGtyc1Byb3ZpZGVyID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIGZlZSBzdHJ1Y3R1cmUgc3BlY2lmaWVkIGZvciBwcm92aWRlciAke3BhcmFtcy5wcm92aWRlcn1gKTtcbiAgfVxuXG4gIGlmIChrcnNQcm92aWRlci5mZWVUeXBlID09PSAnZmxhdFVzZCcpIHtcbiAgICBjb25zdCBmZWVBbW91bnRVc2QgPSBrcnNQcm92aWRlci5mZWVBbW91bnQ7XG4gICAgY29uc3QgY3VycmVudFByaWNlOiBudW1iZXIgPSBhd2FpdCBnZXRSZWNvdmVyeU1hcmtldFByaWNlKGNvaW4pO1xuXG4gICAgcmV0dXJuIE1hdGgucm91bmQoKGZlZUFtb3VudFVzZCAvIGN1cnJlbnRQcmljZSkgKiBjb2luLmdldEJhc2VGYWN0b3IoKSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gd2UgY2FuIGFkZCBtb3JlIGZlZSBzdHJ1Y3R1cmVzIGhlcmUgYXMgbmVlZGVkIGZvciBkaWZmZXJlbnQgcHJvdmlkZXJzLCBzdWNoIGFzIHBlcmNlbnRhZ2Ugb2YgcmVjb3ZlcnkgYW1vdW50XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGZWUgc3RydWN0dXJlIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3ZlclBhcmFtcyB7XG4gIHNjYW4/OiBudW1iZXI7XG4gIHVzZXJLZXk6IHN0cmluZztcbiAgYmFja3VwS2V5OiBzdHJpbmc7XG4gIGJpdGdvS2V5OiBzdHJpbmc7XG4gIHJlY292ZXJ5RGVzdGluYXRpb246IHN0cmluZztcbiAga3JzUHJvdmlkZXI/OiBzdHJpbmc7XG4gIGlnbm9yZUFkZHJlc3NUeXBlczogU2NyaXB0VHlwZTJPZjNbXTtcbiAgd2FsbGV0UGFzc3BocmFzZT86IHN0cmluZztcbiAgYXBpS2V5Pzogc3RyaW5nO1xuICB1c2VyS2V5UGF0aD86IHN0cmluZztcbiAgcmVjb3ZlcnlQcm92aWRlcj86IFJlY292ZXJ5UHJvdmlkZXI7XG4gIC8qKiBTYXRvc2hpIHBlciBieXRlICovXG4gIGZlZVJhdGU/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUcmFuc2FjdGlvbiBsb2NrIHRpbWUgKG5Mb2NrVGltZSkuIFNldCBiZWZvcmUgc2lnbmluZyDigJQgaXQgaXMgcGFydCBvZiB0aGUgc2lnaGFzaC5cbiAgICogVXNlZCBmb3IgRUNYIHJlcGxheS1wcm90ZWN0aW9uIHN3ZWVwcyAoZS5nLiA0OTlfOTk5Xzk5OSkgYW5kIG90aGVyIGN1c3RvbSBsb2NrLXRpbWUgbmVlZHMuXG4gICAqL1xuICBsb2NrVGltZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIElucHV0IHNlcXVlbmNlIG51bWJlciBhcHBsaWVkIHRvIGV2ZXJ5IGlucHV0LiBEZWZhdWx0cyB0byAweEZGRkZGRkZFIChSQkYsIG5vbi1maW5hbClcbiAgICogd2hpY2ggYWxyZWFkeSBzYXRpc2ZpZXMgdGhlIG5vbi1maW5hbCByZXF1aXJlbWVudCBmb3IgbG9ja1RpbWUgdG8gdGFrZSBlZmZlY3QuXG4gICAqL1xuICBzZXF1ZW5jZT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhbiBhZGRyZXNzIGFuZCBmb3JtYXQgaXQgZm9yIEFQSSBxdWVyaWVzXG4gKiBAcGFyYW0gY29pbiAtIFRoZSBjb2luIGluc3RhbmNlXG4gKiBAcGFyYW0gY29pbk5hbWUgLSBUaGUgY29pbiBuYW1lXG4gKiBAcGFyYW0gd2FsbGV0S2V5cyAtIFRoZSB3YWxsZXQga2V5c1xuICogQHBhcmFtIGNoYWluIC0gVGhlIGNoYWluIGNvZGVcbiAqIEBwYXJhbSBhZGRySW5kZXggLSBUaGUgYWRkcmVzcyBpbmRleFxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBhZGRyZXNzICh3aXRoIGNhc2hhZGRyIHByZWZpeCBzdHJpcHBlZCBmb3IgQkNIL0JDSEEpXG4gKi9cbmZ1bmN0aW9uIGdldEZvcm1hdHRlZEFkZHJlc3MoXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUsXG4gIHdhbGxldEtleXM6IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLFxuICBjaGFpbjogQ2hhaW5Db2RlLFxuICBhZGRySW5kZXg6IG51bWJlclxuKTogc3RyaW5nIHtcbiAgY29uc3QgZm9ybWF0ID0gY29pbi5nZXRDaGFpbigpID09PSAnYmNoJyB8fCBjb2luLmdldENoYWluKCkgPT09ICdiY2hhJyA/ICdjYXNoYWRkcicgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGFkZHJlc3MgPSBnZW5lcmF0ZUFkZHJlc3NXaXRoQ2hhaW5BbmRJbmRleChjb2luTmFtZSwgd2FsbGV0S2V5cywgY2hhaW4sIGFkZHJJbmRleCwgZm9ybWF0KTtcblxuICAvLyBCbG9ja2NoYWlyIHVzZXMgY2FzaGFkZHIgZm9ybWF0IHdoZW4gcXVlcnlpbmcgdGhlIEFQSSBmb3IgYWRkcmVzcyBpbmZvcm1hdGlvbi4gU3RyaXAgdGhlIHByZWZpeCBmb3IgQkNIL0JDSEEuXG4gIHJldHVybiBmb3JtYXQgPT09ICdjYXNoYWRkcicgPyBhZGRyZXNzLnNwbGl0KCc6JylbMV0gOiBhZGRyZXNzO1xufVxuXG5mdW5jdGlvbiBoYXNXaXRuZXNzRGF0YShzY3JpcHRUeXBlOiBTY3JpcHRUeXBlMk9mMyk6IGJvb2xlYW4ge1xuICByZXR1cm4gc2NyaXB0VHlwZSAhPT0gJ3Ayc2gnO1xufVxuXG5hc3luYyBmdW5jdGlvbiBxdWVyeUJsb2NrY2hhaW5VbnNwZW50c1BhdGgoXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHBhcmFtczogUmVjb3ZlclBhcmFtcyxcbiAgd2FsbGV0S2V5czogZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMsXG4gIGNoYWluOiBDaGFpbkNvZGVcbik6IFByb21pc2U8V2FsbGV0VW5zcGVudDxiaWdpbnQ+W10+IHtcbiAgY29uc3Qgc2NyaXB0VHlwZSA9IGZpeGVkU2NyaXB0V2FsbGV0LkNoYWluQ29kZS5zY3JpcHRUeXBlKGNoYWluKTtcbiAgY29uc3QgZmV0Y2hQcmV2VHggPSAhaGFzV2l0bmVzc0RhdGEoc2NyaXB0VHlwZSkgJiYgZ2V0TWFpbm5ldENvaW5OYW1lKGNvaW4ubmFtZSkgIT09ICd6ZWMnO1xuICBjb25zdCByZWNvdmVyeVByb3ZpZGVyID0gcGFyYW1zLnJlY292ZXJ5UHJvdmlkZXIgPz8gZm9yQ29pbihjb2luLmdldENoYWluKCksIHBhcmFtcy5hcGlLZXkpO1xuICBjb25zdCBNQVhfU0VRVUVOVElBTF9BRERSRVNTRVNfV0lUSE9VVF9UWFMgPSBwYXJhbXMuc2NhbiB8fCAyMDtcbiAgbGV0IG51bVNlcXVlbnRpYWxBZGRyZXNzZXNXaXRob3V0VHhzID0gMDtcbiAgY29uc3QgcHJldlR4Q2FjaGUgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGdldFByZXZUeCh0eGlkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGxldCBwcmV2VHhIZXggPSBwcmV2VHhDYWNoZS5nZXQodHhpZCk7XG4gICAgaWYgKCFwcmV2VHhIZXgpIHtcbiAgICAgIHByZXZUeEhleCA9IGF3YWl0IHJlY292ZXJ5UHJvdmlkZXIuZ2V0VHJhbnNhY3Rpb25IZXgodHhpZCk7XG4gICAgICBwcmV2VHhDYWNoZS5zZXQodHhpZCwgcHJldlR4SGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIHByZXZUeEhleDtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGdhdGhlclVuc3BlbnRzKGFkZHJJbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgZm9ybWF0dGVkQWRkcmVzcyA9IGdldEZvcm1hdHRlZEFkZHJlc3MoY29pbiwgY29pbi5uYW1lLCB3YWxsZXRLZXlzLCBjaGFpbiwgYWRkckluZGV4KTtcbiAgICBjb25zdCBhZGRySW5mbyA9IGF3YWl0IHJlY292ZXJ5UHJvdmlkZXIuZ2V0QWRkcmVzc0luZm8oZm9ybWF0dGVkQWRkcmVzcyk7XG4gICAgLy8gd2UgdXNlIHR4Q291bnQgaGVyZSBiZWNhdXNlIGl0IGltcGxpZXMgdXNhZ2UgLSBoYXZpbmcgdHgnZXMgbWVhbnMgdGhlIGFkZHIgd2FzIGdlbmVyYXRlZCBhbmQgdXNlZFxuICAgIGlmIChhZGRySW5mby50eENvdW50ID09PSAwKSB7XG4gICAgICBudW1TZXF1ZW50aWFsQWRkcmVzc2VzV2l0aG91dFR4cysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBudW1TZXF1ZW50aWFsQWRkcmVzc2VzV2l0aG91dFR4cyA9IDA7XG5cbiAgICAgIGlmIChhZGRySW5mby5iYWxhbmNlID4gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgRm91bmQgYW4gYWRkcmVzcyB3aXRoIGJhbGFuY2U6ICR7Zm9ybWF0dGVkQWRkcmVzc30gd2l0aCBiYWxhbmNlICR7YWRkckluZm8uYmFsYW5jZX1gKTtcbiAgICAgICAgY29uc3QgYWRkcmVzc1Vuc3BlbnRzID0gYXdhaXQgcmVjb3ZlcnlQcm92aWRlci5nZXRVbnNwZW50c0ZvckFkZHJlc3NlcyhbZm9ybWF0dGVkQWRkcmVzc10pO1xuICAgICAgICBjb25zdCBwcm9jZXNzZWRVbnNwZW50cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIGFkZHJlc3NVbnNwZW50cy5tYXAoYXN5bmMgKHUpOiBQcm9taXNlPFdhbGxldFVuc3BlbnQ8YmlnaW50Pj4gPT4ge1xuICAgICAgICAgICAgY29uc3QgeyB0eGlkLCB2b3V0IH0gPSBwYXJzZU91dHB1dElkKHUuaWQpO1xuICAgICAgICAgICAgbGV0IHZhbCA9IEJpZ0ludCh1LnZhbHVlKTtcbiAgICAgICAgICAgIGlmIChjb2luLmFtb3VudFR5cGUgPT09ICdiaWdpbnQnKSB7XG4gICAgICAgICAgICAgIC8vIGJsb2NrY2hhaXIgcmV0dXJucyB0aGUgbnVtYmVyIHdpdGggdGhlIGNvcnJlY3QgcHJlY2lzaW9uLCBidXQgaW4gbnVtYmVyIGZvcm1hdFxuICAgICAgICAgICAgICAvLyBqc29uIHBhcnNlIHdvbid0IHBhcnNlIGl0IGNvcnJlY3RseSwgc28gd2UgcmVxdWVyeSB0aGUgdHhpZCBmb3IgdGhlIHR4IGhleCB0byBkZWNvZGUgaGVyZVxuICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHUudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBnZXRQcmV2VHgodHhpZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdHggPSBUcmFuc2FjdGlvbi5mcm9tQnl0ZXMoQnVmZmVyLmZyb20odHhIZXgsICdoZXgnKSk7XG4gICAgICAgICAgICAgICAgdmFsID0gdHguZ2V0T3V0cHV0cygpW3ZvdXRdLnZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0aGUgYXBpIG1heSByZXR1cm4gY2FzaGFkZHIncyBpbnN0ZWFkIG9mIGxlZ2FjeSBmb3IgQkNIIGFuZCBCQ0hBXG4gICAgICAgICAgICAvLyBkb3duc3RyZWFtIHByb2Nlc3NlcydzIG9ubHkgZXhwZWN0IGxlZ2FjeSBhZGRyZXNzZXNcbiAgICAgICAgICAgIHUgPSB7IC4uLnUsIGFkZHJlc3M6IGNvaW4uY2Fub25pY2FsQWRkcmVzcyh1LmFkZHJlc3MpIH07XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi51LFxuICAgICAgICAgICAgICB2YWx1ZTogdmFsLFxuICAgICAgICAgICAgICBjaGFpbjogY2hhaW4sXG4gICAgICAgICAgICAgIGluZGV4OiBhZGRySW5kZXgsXG4gICAgICAgICAgICAgIHByZXZUeDogZmV0Y2hQcmV2VHggPyBCdWZmZXIuZnJvbShhd2FpdCBnZXRQcmV2VHgodHhpZCksICdoZXgnKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0gYXMgV2FsbGV0VW5zcGVudDxiaWdpbnQ+O1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgd2FsbGV0VW5zcGVudHMucHVzaCguLi5wcm9jZXNzZWRVbnNwZW50cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG51bVNlcXVlbnRpYWxBZGRyZXNzZXNXaXRob3V0VHhzID49IE1BWF9TRVFVRU5USUFMX0FERFJFU1NFU19XSVRIT1VUX1RYUykge1xuICAgICAgLy8gc3RvcCBzZWFyY2hpbmcgZm9yIGFkZHJlc3NlcyB3aXRoIHVuc3BlbnRzIGluIHRoZW0sIHdlJ3ZlIGZvdW5kICR7TUFYX1NFUVVFTlRJQUxfQUREUkVTU0VTX1dJVEhPVVRfVFhTfSBpbiBhIHJvdyB3aXRoIG5vbmVcbiAgICAgIC8vIHdlIGFyZSBkb25lXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIGdhdGhlclVuc3BlbnRzKGFkZHJJbmRleCArIDEpO1xuICB9XG5cbiAgLy8gZ2V0IHVuc3BlbnRzIGZvciB0aGVzZSBhZGRyZXNzZXNcblxuICBjb25zdCB3YWxsZXRVbnNwZW50czogV2FsbGV0VW5zcGVudDxiaWdpbnQ+W10gPSBbXTtcbiAgLy8gVGhpcyB3aWxsIHBvcHVsYXRlIHdhbGxldEFkZHJlc3Nlc1xuICBhd2FpdCBnYXRoZXJVbnNwZW50cygwKTtcblxuICBpZiAod2FsbGV0VW5zcGVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gQ291bGRuJ3QgZmluZCBhbnkgYWRkcmVzc2VzIHdpdGggZnVuZHNcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gd2FsbGV0VW5zcGVudHM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlY292ZXJ5RmVlUGVyQnl0ZXMoXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHsgZGVmYXVsdFZhbHVlIH06IHsgZGVmYXVsdFZhbHVlOiBudW1iZXIgfVxuKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgaWYgKGNvaW4uZ2V0RmFtaWx5KCkgPT09ICdkb2dlJykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kb2dlY29pbi9kb2dlY29pbi9ibG9iL21hc3Rlci9kb2MvZmVlLXJlY29tbWVuZGF0aW9uLm1kXG4gICAgLy8gMC4wMSBET0dFIHBlciBLQlxuICAgIHJldHVybiAxMDAwO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgTWVtcG9vbEFwaS5mb3JDb2luKGNvaW4uZ2V0Q2hhaW4oKSkuZ2V0UmVjb3ZlcnlGZWVQZXJCeXRlcygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5kaXIoZSk7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uID0ge1xuICBpbnB1dHM/OiBXYWxsZXRVbnNwZW50SlNPTltdO1xuICB0cmFuc2FjdGlvbkhleDogc3RyaW5nO1xuICBjb2luOiBzdHJpbmc7XG4gIGJhY2t1cEtleTogc3RyaW5nO1xuICByZWNvdmVyeUFtb3VudDogbnVtYmVyO1xuICByZWNvdmVyeUFtb3VudFN0cmluZzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBiYWNrdXAga2V5IHJlY292ZXJ5IFBTQlQgY3JlYXRpb24uXG4gKiBBbGwgZmllbGRzIGFyZSBwcmUtdmFsaWRhdGVkIGFuZCBkZXJpdmVkIC0gbm8gc3RyaW5nIGtleSBwYXJzaW5nIG5lZWRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNvdmVyV2l0aFVuc3BlbnRzUGFyYW1zIHtcbiAgLyoqIFByZS1kZXJpdmVkIHdhbGxldCBrZXlzICovXG4gIHdhbGxldEtleXM6IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzO1xuICAvKiogUHJlLWRlcml2ZWQga2V5IHRyaXBsZSAodXNlciwgYmFja3VwLCBiaXRnbykuIENoZWNrIHByaXZhdGVLZXkgdG8gZGV0ZXJtaW5lIHNpZ25pbmcgY2FwYWJpbGl0eS4gKi9cbiAga2V5czogVHJpcGxlPEJJUDMyPjtcbiAgLyoqIFZhbGlkYXRlZCByZWNvdmVyeSBkZXN0aW5hdGlvbiBhZGRyZXNzICovXG4gIHJlY292ZXJ5RGVzdGluYXRpb246IHN0cmluZztcbiAgLyoqIEZlZSByYXRlIGluIHNhdG9zaGkgcGVyIHZieXRlICovXG4gIGZlZVJhdGVTYXRWQjogbnVtYmVyO1xuICAvKiogS1JTIGZlZSBhbW91bnQgaW4gc2F0b3NoaXMgKDAgaWYgbm90IEtSUyByZWNvdmVyeSkgKi9cbiAga3JzRmVlPzogYmlnaW50O1xuICAvKiogS1JTIGZlZSBhZGRyZXNzIChyZXF1aXJlZCBpZiBrcnNGZWUgPiAwKSAqL1xuICBrcnNGZWVBZGRyZXNzPzogc3RyaW5nO1xuICAvKiogVHJhbnNhY3Rpb24gbG9jayB0aW1lIChuTG9ja1RpbWUpLCBzZXQgb24gdGhlIFBTQlQgYmVmb3JlIHNpZ25pbmcgKi9cbiAgbG9ja1RpbWU/OiBudW1iZXI7XG4gIC8qKiBJbnB1dCBzZXF1ZW5jZSBudW1iZXIgYXBwbGllZCB0byBldmVyeSBpbnB1dCAqL1xuICBzZXF1ZW5jZT86IG51bWJlcjtcbn1cblxuZnVuY3Rpb24gaGFzUHJpdmF0ZUtleShrZXk6IEJJUDMyKTogYm9vbGVhbiB7XG4gIHJldHVybiBrZXkucHJpdmF0ZUtleSAhPT0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhIGZ1bmRzIHJlY292ZXJ5IFBTQlQgd2l0aG91dCBCaXRHbywgdXNpbmcgcHJvdmlkZWQgdW5zcGVudHMuXG4gKlxuICogVGhpcyBpcyB0aGUgY29yZSB0cmFuc2FjdGlvbiBidWlsZGluZyBsb2dpYywgc2VwYXJhdGVkIGZyb20gdW5zcGVudCBnYXRoZXJpbmdcbiAqIGFuZCBvdXRwdXQgZm9ybWF0dGluZy4gUmV0dXJucyBhIFBTQlQgYXQgdGhlIGFwcHJvcHJpYXRlIHNpZ25pbmcgc3RhZ2UuXG4gKlxuICogU2lnbmluZyBiZWhhdmlvciBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBrZXlzOlxuICogLSBJZiB1c2VyIGtleSBoYXMgbm8gcHJpdmF0ZSBrZXk6IHVuc2lnbmVkIFBTQlRcbiAqIC0gSWYgdXNlciBrZXkgaGFzIHByaXZhdGUga2V5IGJ1dCBiYWNrdXAgZG9lc24ndDogaGFsZi1zaWduZWQgUFNCVCAodXNlciBzaWduYXR1cmUgb25seSlcbiAqIC0gSWYgYm90aCB1c2VyIGFuZCBiYWNrdXAga2V5cyBoYXZlIHByaXZhdGUga2V5czogZnVsbHkgc2lnbmVkIFBTQlQgKG5vdCBmaW5hbGl6ZWQpXG4gKlxuICogQHBhcmFtIGNvaW5OYW1lIC0gVGhlIGNvaW4gbmFtZSBmb3IgdGhlIFBTQlRcbiAqIEBwYXJhbSBwYXJhbXMgLSBSZWNvdmVyeSBwYXJhbWV0ZXJzIHdpdGggcHJlLWRlcml2ZWQga2V5c1xuICogQHBhcmFtIHVuc3BlbnRzIC0gVGhlIHdhbGxldCB1bnNwZW50cyB0byByZWNvdmVyIChtdXN0IGJlIG5vbi1lbXB0eSlcbiAqIEByZXR1cm5zIFRoZSBQU0JUIGF0IHRoZSBhcHByb3ByaWF0ZSBzaWduaW5nIHN0YWdlIChuZXZlciBmaW5hbGl6ZWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiYWNrdXBLZXlSZWNvdmVyeVdpdGhXYWxsZXRVbnNwZW50cyhcbiAgY29pbk5hbWU6IFV0eG9Db2luTmFtZSxcbiAgcGFyYW1zOiBSZWNvdmVyV2l0aFVuc3BlbnRzUGFyYW1zLFxuICB1bnNwZW50czogV2FsbGV0VW5zcGVudDxiaWdpbnQ+W11cbik6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCB7XG4gIGNvbnN0IHsgd2FsbGV0S2V5cywga2V5cywgcmVjb3ZlcnlEZXN0aW5hdGlvbiwgZmVlUmF0ZVNhdFZCLCBrcnNGZWUsIGtyc0ZlZUFkZHJlc3MgfSA9IHBhcmFtcztcblxuICBjb25zdCB0b3RhbElucHV0QW1vdW50ID0gdW5zcGVudFN1bSh1bnNwZW50cyk7XG4gIGlmICh0b3RhbElucHV0QW1vdW50IDw9IEJpZ0ludCgwKSkge1xuICAgIHRocm93IG5ldyBFcnJvck5vSW5wdXRUb1JlY292ZXIoKTtcbiAgfVxuXG4gIGxldCBwc2J0ID0gY3JlYXRlQmFja3VwS2V5UmVjb3ZlcnlQc2J0KGNvaW5OYW1lLCB3YWxsZXRLZXlzLCB1bnNwZW50cywge1xuICAgIGZlZVJhdGVTYXRWQjogZmVlUmF0ZVNhdFZCLFxuICAgIHJlY292ZXJ5RGVzdGluYXRpb246IHJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAga2V5UmVjb3ZlcnlTZXJ2aWNlRmVlOiBrcnNGZWUgPz8gQmlnSW50KDApLFxuICAgIGtleVJlY292ZXJ5U2VydmljZUZlZUFkZHJlc3M6IGtyc0ZlZUFkZHJlc3MsXG4gICAgbG9ja1RpbWU6IHBhcmFtcy5sb2NrVGltZSxcbiAgICBzZXF1ZW5jZTogcGFyYW1zLnNlcXVlbmNlLFxuICB9KTtcblxuICBjb25zdCB1c2VySGFzUHJpdmF0ZUtleSA9IGhhc1ByaXZhdGVLZXkoa2V5c1swXSk7XG4gIGNvbnN0IGJhY2t1cEhhc1ByaXZhdGVLZXkgPSBoYXNQcml2YXRlS2V5KGtleXNbMV0pO1xuXG4gIGlmICghdXNlckhhc1ByaXZhdGVLZXkpIHtcbiAgICAvLyBVbnNpZ25lZCBzd2VlcCAtIHJldHVybiB1bnNpZ25lZCBQU0JUXG4gICAgcmV0dXJuIHBzYnQ7XG4gIH1cblxuICBjb25zdCByZXBsYXlQcm90ZWN0aW9uID0geyBwdWJsaWNLZXlzOiBnZXRSZXBsYXlQcm90ZWN0aW9uUHVia2V5cyhjb2luTmFtZSkgfTtcblxuICAvLyBTaWduIHdpdGggdXNlciBrZXlcbiAgcHNidCA9IHNpZ25BbmRWZXJpZnlQc2J0KHBzYnQsIGtleXNbMF0sIHdhbGxldEtleXMsIHJlcGxheVByb3RlY3Rpb24pO1xuXG4gIGlmIChiYWNrdXBIYXNQcml2YXRlS2V5KSB7XG4gICAgLy8gRnVsbCByZWNvdmVyeSAtIHNpZ24gd2l0aCBiYWNrdXAga2V5IHRvb1xuICAgIHBzYnQgPSBzaWduQW5kVmVyaWZ5UHNidChwc2J0LCBrZXlzWzFdLCB3YWxsZXRLZXlzLCByZXBsYXlQcm90ZWN0aW9uKTtcbiAgfVxuXG4gIC8vIFJldHVybiBQU0JUIChub3QgZmluYWxpemVkIC0gbGV0IGNhbGxlciBkZWNpZGUgaG93IHRvIGZvcm1hdClcbiAgcmV0dXJuIHBzYnQ7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgZm9ybWF0dGluZyBhIGJhY2t1cCBrZXkgcmVjb3ZlcnkgcmVzdWx0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UGFyYW1zIHtcbiAgLyoqIFByZS1kZXJpdmVkIHdhbGxldCBrZXlzICovXG4gIHdhbGxldEtleXM6IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzO1xuICAvKiogUHJlLWRlcml2ZWQga2V5IHRyaXBsZSAodXNlciwgYmFja3VwLCBiaXRnbykuIENoZWNrIHByaXZhdGVLZXkgdG8gZGV0ZXJtaW5lIHNpZ25pbmcgY2FwYWJpbGl0eS4gKi9cbiAga2V5czogVHJpcGxlPEJJUDMyPjtcbiAgLyoqIFJlY292ZXJ5IGRlc3RpbmF0aW9uIGFkZHJlc3MgKi9cbiAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogc3RyaW5nO1xuICAvKiogS1JTIHByb3ZpZGVyIG5hbWUgKGlmIGJhY2t1cCBrZXkgaXMgaGVsZCBieSBLUlMpICovXG4gIGtyc1Byb3ZpZGVyPzogc3RyaW5nO1xuICAvKiogT3JpZ2luYWwgYmFja3VwIGtleSBzdHJpbmcgKG5lZWRlZCBmb3IgS1JTIHJlY292ZXJ5IHJlc3BvbnNlKSAqL1xuICBiYWNrdXBLZXk/OiBzdHJpbmc7XG4gIC8qKiBUaGUgd2FsbGV0IHVuc3BlbnRzIChuZWVkZWQgZm9yIGlucHV0cyBhcnJheSBpbiByZXNwb25zZSkgKi9cbiAgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8YmlnaW50PltdO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgYSBiYWNrdXAga2V5IHJlY292ZXJ5IFBTQlQgaW50byB0aGUgYXBwcm9wcmlhdGUgcmVzcG9uc2UgZm9ybWF0LlxuICpcbiAqIE91dHB1dCBmb3JtYXQgZGVwZW5kcyBvbiBzaWduaW5nIHN0YXRlIGFuZCBLUlMgcHJvdmlkZXI6XG4gKiAtIFVuc2lnbmVkIHN3ZWVwOiBGb3JtYXR0ZWRPZmZsaW5lVmF1bHRUeEluZm8gd2l0aCBQU0JUIGhleFxuICogLSBLUlMga2V5dGVybmFsOiBCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uIHdpdGggbGVnYWN5IGhhbGYtc2lnbmVkIHR4IGhleFxuICogLSBLUlMgb3RoZXI6IEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb24gd2l0aCBQU0JUIGhleFxuICogLSBGdWxsIHJlY292ZXJ5OiBCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uIHdpdGggZmluYWxpemVkIHR4IGhleFxuICpcbiAqIEBwYXJhbSBjb2luIC0gVGhlIGNvaW4gaW5zdGFuY2VcbiAqIEBwYXJhbSBwc2J0IC0gVGhlIFBTQlQgdG8gZm9ybWF0IChhdCBhcHByb3ByaWF0ZSBzaWduaW5nIHN0YWdlKVxuICogQHBhcmFtIHBhcmFtcyAtIEZvcm1hdHRpbmcgcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCByZWNvdmVyeSByZXN1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICBwc2J0OiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQsXG4gIHBhcmFtczogRm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlQYXJhbXNcbik6IEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb24gfCBGb3JtYXR0ZWRPZmZsaW5lVmF1bHRUeEluZm8ge1xuICBjb25zdCB7IHdhbGxldEtleXMsIGtleXMsIHJlY292ZXJ5RGVzdGluYXRpb24sIGtyc1Byb3ZpZGVyLCBiYWNrdXBLZXksIHVuc3BlbnRzIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgdXNlckhhc1ByaXZhdGVLZXkgPSBoYXNQcml2YXRlS2V5KGtleXNbMF0pO1xuICBjb25zdCBiYWNrdXBIYXNQcml2YXRlS2V5ID0gaGFzUHJpdmF0ZUtleShrZXlzWzFdKTtcblxuICBjb25zdCBpc1Vuc2lnbmVkU3dlZXAgPSAhdXNlckhhc1ByaXZhdGVLZXkgJiYgIWJhY2t1cEhhc1ByaXZhdGVLZXk7XG4gIGNvbnN0IGlzS3JzUmVjb3ZlcnkgPSBrcnNQcm92aWRlciAhPT0gdW5kZWZpbmVkICYmIHVzZXJIYXNQcml2YXRlS2V5ICYmICFiYWNrdXBIYXNQcml2YXRlS2V5O1xuICBjb25zdCBpc0Z1bGxSZWNvdmVyeSA9IHVzZXJIYXNQcml2YXRlS2V5ICYmIGJhY2t1cEhhc1ByaXZhdGVLZXk7XG5cbiAgLy8gVW5zaWduZWQgc3dlZXAgLSByZXR1cm4gRm9ybWF0dGVkT2ZmbGluZVZhdWx0VHhJbmZvXG4gIGlmIChpc1Vuc2lnbmVkU3dlZXApIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHhIZXg6IGVuY29kZVRyYW5zYWN0aW9uKHBzYnQpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHR4SW5mbzoge30sXG4gICAgICBmZWVJbmZvOiB7fSxcbiAgICAgIGNvaW46IGNvaW4uZ2V0Q2hhaW4oKSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2VUeEZvcm1hdCA9ICFpc0tyc1JlY292ZXJ5IHx8IGtyc1Byb3ZpZGVyID09PSAna2V5dGVybmFsJyA/ICdsZWdhY3knIDogJ3BzYnQnO1xuICBjb25zdCB0eEluZm8gPSB7fSBhcyBCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uO1xuXG4gIC8vIEluY2x1ZGUgaW5wdXRzIGFycmF5IGZvciBsZWdhY3kgZm9ybWF0IHJlc3BvbnNlc1xuICB0eEluZm8uaW5wdXRzID1cbiAgICByZXNwb25zZVR4Rm9ybWF0ID09PSAnbGVnYWN5J1xuICAgICAgPyB1bnNwZW50cy5tYXAoKHUpID0+ICh7IC4uLnUsIHZhbHVlOiBOdW1iZXIodS52YWx1ZSksIHZhbHVlU3RyaW5nOiB1LnZhbHVlLnRvU3RyaW5nKCksIHByZXZUeDogdW5kZWZpbmVkIH0pKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKGlzS3JzUmVjb3ZlcnkpIHtcbiAgICAvLyBLUlMgcmVjb3ZlcnkgLSBoYWxmLXNpZ25lZFxuICAgIC8vIGtleXRlcm5hbCB1c2VzIGxlZ2FjeSBmb3JtYXQsIG90aGVyIEtSUyBwcm92aWRlcnMgdXNlIFBTQlQgZm9ybWF0XG4gICAgdHhJbmZvLnRyYW5zYWN0aW9uSGV4ID1cbiAgICAgIGtyc1Byb3ZpZGVyID09PSAna2V5dGVybmFsJ1xuICAgICAgICA/IEJ1ZmZlci5mcm9tKHBzYnQuZ2V0SGFsZlNpZ25lZExlZ2FjeUZvcm1hdCgpKS50b1N0cmluZygnaGV4JylcbiAgICAgICAgOiBlbmNvZGVUcmFuc2FjdGlvbihwc2J0KS50b1N0cmluZygnaGV4Jyk7XG5cbiAgICB0eEluZm8uY29pbiA9IGNvaW4uZ2V0Q2hhaW4oKTtcbiAgICB0eEluZm8uYmFja3VwS2V5ID0gYmFja3VwS2V5ID8/ICcnO1xuICAgIGNvbnN0IHJlY292ZXJ5QW1vdW50ID0gZ2V0UmVjb3ZlcnlBbW91bnQocHNidCwgd2FsbGV0S2V5cywgcmVjb3ZlcnlEZXN0aW5hdGlvbik7XG4gICAgdHhJbmZvLnJlY292ZXJ5QW1vdW50ID0gTnVtYmVyKHJlY292ZXJ5QW1vdW50KTtcbiAgICB0eEluZm8ucmVjb3ZlcnlBbW91bnRTdHJpbmcgPSByZWNvdmVyeUFtb3VudC50b1N0cmluZygpO1xuICB9IGVsc2UgaWYgKGlzRnVsbFJlY292ZXJ5KSB7XG4gICAgLy8gRnVsbCByZWNvdmVyeSAtIGZpbmFsaXplIGFuZCBleHRyYWN0IHRyYW5zYWN0aW9uXG4gICAgcHNidC5maW5hbGl6ZUFsbElucHV0cygpO1xuICAgIHR4SW5mby50cmFuc2FjdGlvbkhleCA9IEJ1ZmZlci5mcm9tKHBzYnQuZXh0cmFjdFRyYW5zYWN0aW9uKCkudG9CeXRlcygpKS50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICByZXR1cm4gdHhJbmZvO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRCaXAzMktleXMoYml0Z286IEJpdEdvQmFzZSwgcGFyYW1zOiBSZWNvdmVyUGFyYW1zKTogUHJvbWlzZTxUcmlwbGU8QklQMzI+PiB7XG4gIGNvbnN0IGtleXMgPSBhd2FpdCBnZXRCaXAzMktleXNGcm9tU2RrQ29yZShiaXRnbywgcGFyYW1zLCB7IHJlcXVpcmVCaXRHb1hwdWI6IHRydWUgfSk7XG4gIGlmICghaXNUcmlwbGUoa2V5cykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkIGtleSB0cmlwbGVgKTtcbiAgfVxuICByZXR1cm4ga2V5cy5tYXAoKGspID0+IEJJUDMyLmZyb20oay50b0Jhc2U1OCgpKSkgYXMgVHJpcGxlPEJJUDMyPjtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSBmdW5kcyByZWNvdmVyeSB0cmFuc2FjdGlvbiB3aXRob3V0IEJpdEdvLlxuICpcbiAqIFJldHVybnMgdHJhbnNhY3Rpb24gaGV4IGluIGxlZ2FjeSBmb3JtYXQgZm9yIHVuc2lnbmVkIHN3ZWVwIHRyYW5zYWN0aW9uLCBoYWxmIHNpZ25lZCBiYWNrdXAgcmVjb3ZlcnkgdHJhbnNhY3Rpb24gd2l0aCBLUlMgcHJvdmlkZXIgKG9ubHkga2V5dGVybmFsKSxcbiAqIGZ1bGx5IHNpZ25lZCBiYWNrdXAgcmVjb3ZlcnkgdHJhbnNhY3Rpb24gd2l0aG91dCBhIEtSUyBwcm92aWRlci5cbiAqXG4gKiBSZXR1cm5zIFBTQlQgaGV4IGZvciBoYWxmIHNpZ25lZCBiYWNrdXAgcmVjb3ZlcnkgdHJhbnNhY3Rpb24gd2l0aCBLUlMgcHJvdmlkZXIgKGV4Y2x1ZGluZyBrZXl0ZXJuYWwpXG4gKiBGb3IgUFNCVCBoZXggY2FzZXMsIFVuc3BlbnRzIGFyZSBub3QgcmVxdWlyZWQgaW4gcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIGNvaW5cbiAqIEBwYXJhbSBiaXRnb1xuICogQHBhcmFtIHBhcmFtc1xuICogLSB1c2VyS2V5OiBbZW5jcnlwdGVkXSB4cHJ2LCBvciB4cHViXG4gKiAtIGJhY2t1cEtleTogW2VuY3J5cHRlZF0geHBydiwgb3IgeHB1YiBpZiB0aGUgeHBydiBpcyBoZWxkIGJ5IGEgS1JTIHByb3ZpZGVyXG4gKiAtIHdhbGxldFBhc3NwaHJhc2U6IG5lY2Vzc2FyeSBpZiBvbmUgb2YgdGhlIHhwcnZzIGlzIGVuY3J5cHRlZFxuICogLSBiaXRnb0tleTogeHB1YlxuICogLSBrcnNQcm92aWRlcjogbmVjZXNzYXJ5IGlmIGJhY2t1cCBrZXkgaXMgaGVsZCBieSBLUlNcbiAqIC0gcmVjb3ZlcnlEZXN0aW5hdGlvbjogdGFyZ2V0IGFkZHJlc3MgdG8gc2VuZCByZWNvdmVyZWQgZnVuZHMgdG9cbiAqIC0gc2NhbjogdGhlIGFtb3VudCBvZiBjb25zZWN1dGl2ZSBhZGRyZXNzZXMgd2l0aG91dCB1bnNwZW50cyB0byBzY2FuIHRocm91Z2ggYmVmb3JlIHN0b3BwaW5nXG4gKiAtIGlnbm9yZUFkZHJlc3NUeXBlczogKG9wdGlvbmFsKSBzY3JpcHRzIHRvIGlnbm9yZVxuICogICAgICAgIGZvciBleGFtcGxlOiBbJ3Ayc2hQMndzaCcsICdwMndzaCddIHdpbGwgcHJldmVudCBjb2RlIGZyb20gY2hlY2tpbmcgZm9yIHdyYXBwZWQtc2Vnd2l0IGFuZCBuYXRpdmUtc2Vnd2l0IGNoYWlucyBvbiB0aGUgcHVibGljIGJsb2NrIGV4cGxvcmVyc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYmFja3VwS2V5UmVjb3ZlcnkoXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIGJpdGdvOiBCaXRHb0Jhc2UsXG4gIHBhcmFtczogUmVjb3ZlclBhcmFtc1xuKTogUHJvbWlzZTxCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uIHwgRm9ybWF0dGVkT2ZmbGluZVZhdWx0VHhJbmZvPiB7XG4gIGlmIChfLmlzVW5kZWZpbmVkKHBhcmFtcy51c2VyS2V5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyB1c2VyS2V5Jyk7XG4gIH1cblxuICBpZiAoXy5pc1VuZGVmaW5lZChwYXJhbXMuYmFja3VwS2V5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBiYWNrdXBLZXknKTtcbiAgfVxuXG4gIGlmIChcbiAgICBfLmlzVW5kZWZpbmVkKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uKSB8fFxuICAgICFjb2luLmlzVmFsaWRBZGRyZXNzKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uLCB7IGFueUZvcm1hdDogdHJ1ZSB9KVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmVjb3ZlcnlEZXN0aW5hdGlvbicpO1xuICB9XG5cbiAgaWYgKCFfLmlzVW5kZWZpbmVkKHBhcmFtcy5zY2FuKSAmJiAoIV8uaXNJbnRlZ2VyKHBhcmFtcy5zY2FuKSB8fCBwYXJhbXMuc2NhbiA8IDApKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzY2FuIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gIH1cblxuICBpZiAocGFyYW1zLmZlZVJhdGUgIT09IHVuZGVmaW5lZCAmJiAoIU51bWJlci5pc0Zpbml0ZShwYXJhbXMuZmVlUmF0ZSkgfHwgcGFyYW1zLmZlZVJhdGUgPD0gMCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZlZVJhdGUgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICB9XG5cbiAgLy8gY2hlY2sgd2hldGhlciBrZXkgbWF0ZXJpYWwgYW5kIHBhc3N3b3JkIGF1dGhlbnRpY2F0ZSB0aGUgdXNlcnMgYW5kIHJldHVybiBwYXJlbnQga2V5cyBvZiBhbGwgdGhyZWUga2V5cyBvZiB0aGUgd2FsbGV0XG4gIGNvbnN0IGtleXMgPSBhd2FpdCBnZXRCaXAzMktleXMoYml0Z28sIHBhcmFtcyk7XG4gIGNvbnN0IHdhbGxldEtleXMgPSBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cy5mcm9tKHtcbiAgICB0cmlwbGU6IGtleXMsXG4gICAgZGVyaXZhdGlvblByZWZpeGVzOiBbcGFyYW1zLnVzZXJLZXlQYXRoIHx8ICdtLzAvMCcsICdtLzAvMCcsICdtLzAvMCddLFxuICB9KTtcblxuICBjb25zdCB1bnNwZW50czogV2FsbGV0VW5zcGVudDxiaWdpbnQ+W10gPSAoXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBmaXhlZFNjcmlwdFdhbGxldC5vdXRwdXRTY3JpcHRUeXBlc1xuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChhZGRyZXNzVHlwZSkgPT5cbiAgICAgICAgICAgIGZpeGVkU2NyaXB0V2FsbGV0LnN1cHBvcnRzU2NyaXB0VHlwZShjb2luLm5hbWUsIGFkZHJlc3NUeXBlKSAmJlxuICAgICAgICAgICAgIXBhcmFtcy5pZ25vcmVBZGRyZXNzVHlwZXM/LmluY2x1ZGVzKGFkZHJlc3NUeXBlKVxuICAgICAgICApXG4gICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgKHF1ZXJpZXMsIGFkZHJlc3NUeXBlKSA9PiBbXG4gICAgICAgICAgICAuLi5xdWVyaWVzLFxuICAgICAgICAgICAgcXVlcnlCbG9ja2NoYWluVW5zcGVudHNQYXRoKFxuICAgICAgICAgICAgICBjb2luLFxuICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICAgIHdhbGxldEtleXMsXG4gICAgICAgICAgICAgIGZpeGVkU2NyaXB0V2FsbGV0LkNoYWluQ29kZS52YWx1ZShhZGRyZXNzVHlwZSwgJ2V4dGVybmFsJylcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBxdWVyeUJsb2NrY2hhaW5VbnNwZW50c1BhdGgoXG4gICAgICAgICAgICAgIGNvaW4sXG4gICAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgICAgd2FsbGV0S2V5cyxcbiAgICAgICAgICAgICAgZml4ZWRTY3JpcHRXYWxsZXQuQ2hhaW5Db2RlLnZhbHVlKGFkZHJlc3NUeXBlLCAnaW50ZXJuYWwnKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIFtdIGFzIFByb21pc2U8V2FsbGV0VW5zcGVudDxiaWdpbnQ+W10+W11cbiAgICAgICAgKVxuICAgIClcbiAgKS5mbGF0KCk7XG5cbiAgY29uc3QgZmVlUmF0ZVNhdFZCID1cbiAgICBwYXJhbXMuZmVlUmF0ZSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHBhcmFtcy5mZWVSYXRlXG4gICAgICA6IGF3YWl0IGdldFJlY292ZXJ5RmVlUGVyQnl0ZXMoY29pbiwgeyBkZWZhdWx0VmFsdWU6IERFRkFVTFRfUkVDT1ZFUllfRkVFUkFURV9TQVRfVkJZVEVfVjIgfSk7XG5cbiAgLy8gQ2FsY3VsYXRlIEtSUyBmZWUgaWYgbmVlZGVkXG4gIGNvbnN0IHVzZXJIYXNQcml2YXRlS2V5ID0gaGFzUHJpdmF0ZUtleShrZXlzWzBdKTtcbiAgY29uc3QgYmFja3VwSGFzUHJpdmF0ZUtleSA9IGhhc1ByaXZhdGVLZXkoa2V5c1sxXSk7XG4gIGNvbnN0IGlzS3JzUmVjb3ZlcnkgPSBwYXJhbXMua3JzUHJvdmlkZXIgIT09IHVuZGVmaW5lZCAmJiB1c2VySGFzUHJpdmF0ZUtleSAmJiAhYmFja3VwSGFzUHJpdmF0ZUtleTtcblxuICBsZXQga3JzRmVlID0gQmlnSW50KDApO1xuICBsZXQga3JzRmVlQWRkcmVzczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGlmIChpc0tyc1JlY292ZXJ5ICYmIHBhcmFtcy5rcnNQcm92aWRlcikge1xuICAgIHRyeSB7XG4gICAgICBrcnNGZWUgPSBCaWdJbnQoYXdhaXQgY2FsY3VsYXRlRmVlQW1vdW50KGNvaW4sIHsgcHJvdmlkZXI6IHBhcmFtcy5rcnNQcm92aWRlciB9KSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBEb24ndCBsZXQgdGhpcyBlcnJvciBibG9jayB0aGUgcmVjb3ZlcnkgLVxuICAgICAgY29uc29sZS5kaXIoZXJyKTtcbiAgICB9XG5cbiAgICBpZiAoa3JzRmVlID4gQmlnSW50KDApKSB7XG4gICAgICBjb25zdCBrcnNQcm92aWRlckNvbmZpZyA9IGdldEtyc1Byb3ZpZGVyKGNvaW4sIHBhcmFtcy5rcnNQcm92aWRlcik7XG4gICAgICBpZiAoIWtyc1Byb3ZpZGVyQ29uZmlnLmZlZUFkZHJlc3Nlcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGtleVByb3ZpZGVyIG11c3QgZGVmaW5lIGZlZUFkZHJlc3Nlc2ApO1xuICAgICAgfVxuXG4gICAgICBrcnNGZWVBZGRyZXNzID0ga3JzUHJvdmlkZXJDb25maWcuZmVlQWRkcmVzc2VzW2NvaW4uZ2V0Q2hhaW4oKV07XG5cbiAgICAgIGlmICgha3JzRmVlQWRkcmVzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoaXMgS1JTIHByb3ZpZGVyIGhhcyBub3QgY29uZmlndXJlZCB0aGVpciBmZWUgc3RydWN0dXJlIHlldCAtIHJlY292ZXJ5IGNhbm5vdCBiZSBjb21wbGV0ZWQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBCdWlsZCBhbmQgc2lnbiBQU0JUXG4gIGNvbnN0IHBzYnQgPSBiYWNrdXBLZXlSZWNvdmVyeVdpdGhXYWxsZXRVbnNwZW50cyhcbiAgICBjb2luLm5hbWUsXG4gICAge1xuICAgICAgd2FsbGV0S2V5cyxcbiAgICAgIGtleXMsXG4gICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgIGZlZVJhdGVTYXRWQixcbiAgICAgIGtyc0ZlZSxcbiAgICAgIGtyc0ZlZUFkZHJlc3MsXG4gICAgICBsb2NrVGltZTogcGFyYW1zLmxvY2tUaW1lLFxuICAgICAgc2VxdWVuY2U6IHBhcmFtcy5zZXF1ZW5jZSxcbiAgICB9LFxuICAgIHVuc3BlbnRzXG4gICk7XG5cbiAgLy8gRm9ybWF0IHRoZSByZXN1bHRcbiAgcmV0dXJuIGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KGNvaW4sIHBzYnQsIHtcbiAgICB3YWxsZXRLZXlzLFxuICAgIGtleXMsXG4gICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogcGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAga3JzUHJvdmlkZXI6IHBhcmFtcy5rcnNQcm92aWRlcixcbiAgICBiYWNrdXBLZXk6IHBhcmFtcy5iYWNrdXBLZXksXG4gICAgdW5zcGVudHMsXG4gIH0pO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJpdEdvVjFVbnNwZW50IHtcbiAgdHhfaGFzaDogc3RyaW5nO1xuICB0eF9vdXRwdXRfbjogbnVtYmVyO1xuICB2YWx1ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFYxU3dlZXBQYXJhbXMge1xuICB3YWxsZXRJZDogc3RyaW5nO1xuICB3YWxsZXRQYXNzcGhyYXNlOiBzdHJpbmc7XG4gIHVuc3BlbnRzOiBCaXRHb1YxVW5zcGVudFtdO1xuICByZWNvdmVyeURlc3RpbmF0aW9uOiBzdHJpbmc7XG4gIHVzZXJLZXk6IHN0cmluZztcbiAgb3RwOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVjFSZWNvdmVyUGFyYW1zIGV4dGVuZHMgT21pdDxWMVN3ZWVwUGFyYW1zLCAnb3RwJz4ge1xuICBiYWNrdXBLZXk6IHN0cmluZztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHYxQmFja3VwS2V5UmVjb3ZlcnkoXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIGJpdGdvOiBCaXRHb0Jhc2UsXG4gIHBhcmFtczogVjFSZWNvdmVyUGFyYW1zXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoXG4gICAgXy5pc1VuZGVmaW5lZChwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbikgfHxcbiAgICAhY29pbi5pc1ZhbGlkQWRkcmVzcyhwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbiwgeyBhbnlGb3JtYXQ6IHRydWUgfSlcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHJlY292ZXJ5RGVzdGluYXRpb24nKTtcbiAgfVxuXG4gIGNvbnN0IHJlY292ZXJ5RmVlUGVyQnl0ZSA9IGF3YWl0IGdldFJlY292ZXJ5RmVlUGVyQnl0ZXMoY29pbiwge1xuICAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9SRUNPVkVSWV9GRUVSQVRFX1NBVF9WQllURV9WMSxcbiAgfSk7XG4gIGNvbnN0IHYxd2FsbGV0ID0gYXdhaXQgYml0Z28ud2FsbGV0cygpLmdldCh7IGlkOiBwYXJhbXMud2FsbGV0SWQgfSk7XG4gIHJldHVybiBhd2FpdCB2MXdhbGxldC5yZWNvdmVyKHtcbiAgICAuLi5wYXJhbXMsXG4gICAgZmVlUmF0ZTogcmVjb3ZlcnlGZWVQZXJCeXRlLFxuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHYxU3dlZXAoXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIGJpdGdvOiBCaXRHb0Jhc2UsXG4gIHBhcmFtczogVjFTd2VlcFBhcmFtc1xuKTogUHJvbWlzZTx7XG4gIHR4OiBzdHJpbmc7XG4gIGhhc2g6IHN0cmluZztcbiAgc3RhdHVzOiBzdHJpbmc7XG59PiB7XG4gIGlmIChcbiAgICBfLmlzVW5kZWZpbmVkKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uKSB8fFxuICAgICFjb2luLmlzVmFsaWRBZGRyZXNzKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uLCB7IGFueUZvcm1hdDogdHJ1ZSB9KVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmVjb3ZlcnlEZXN0aW5hdGlvbicpO1xuICB9XG5cbiAgbGV0IHJlY292ZXJ5RmVlUGVyQnl0ZSA9IDEwMDtcbiAgaWYgKGJpdGdvLmVudiA9PT0gJ3Byb2QnKSB7XG4gICAgcmVjb3ZlcnlGZWVQZXJCeXRlID0gYXdhaXQgZ2V0UmVjb3ZlcnlGZWVQZXJCeXRlcyhjb2luLCB7XG4gICAgICBkZWZhdWx0VmFsdWU6IERFRkFVTFRfUkVDT1ZFUllfRkVFUkFURV9TQVRfVkJZVEVfVjFfU1dFRVAsXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCB2MXdhbGxldCA9IGF3YWl0IGJpdGdvLndhbGxldHMoKS5nZXQoeyBpZDogcGFyYW1zLndhbGxldElkIH0pO1xuICByZXR1cm4gYXdhaXQgdjF3YWxsZXQuc3dlZXAoe1xuICAgIC4uLnBhcmFtcyxcbiAgICBmZWVSYXRlOiByZWNvdmVyeUZlZVBlckJ5dGUsXG4gIH0pO1xufVxuIl19
|
|
@@ -11,6 +11,10 @@ interface CreateBackupKeyRecoveryPsbtOptions {
|
|
|
11
11
|
keyRecoveryServiceFeeAddress: string | undefined;
|
|
12
12
|
/** Block height for Zcash networks (required to determine consensus branch ID) */
|
|
13
13
|
blockHeight?: number;
|
|
14
|
+
/** Transaction lock time (nLockTime), set on the PSBT before signing */
|
|
15
|
+
lockTime?: number;
|
|
16
|
+
/** Input sequence number applied to every input */
|
|
17
|
+
sequence?: number;
|
|
14
18
|
}
|
|
15
19
|
/**
|
|
16
20
|
* Options for creating an empty wasm-utxo PSBT
|
|
@@ -18,6 +22,8 @@ interface CreateBackupKeyRecoveryPsbtOptions {
|
|
|
18
22
|
export interface CreateEmptyWasmPsbtOptions {
|
|
19
23
|
/** Block height for Zcash networks (required to determine consensus branch ID) */
|
|
20
24
|
blockHeight?: number;
|
|
25
|
+
/** Transaction lock time (nLockTime) */
|
|
26
|
+
lockTime?: number;
|
|
21
27
|
}
|
|
22
28
|
/**
|
|
23
29
|
* Create an empty wasm-utxo BitGoPsbt for a given network.
|
|
@@ -37,7 +43,7 @@ export declare function createEmptyWasmPsbt(coinName: CoinName, rootWalletKeys:
|
|
|
37
43
|
* @param unspents - The wallet unspents to add as inputs
|
|
38
44
|
* @param rootWalletKeys - The wallet keys
|
|
39
45
|
*/
|
|
40
|
-
export declare function addWalletInputsToWasmPsbt(wasmPsbt: fixedScriptWallet.BitGoPsbt, unspents: WalletUnspent<bigint>[], rootWalletKeys: fixedScriptWallet.RootWalletKeys): void;
|
|
46
|
+
export declare function addWalletInputsToWasmPsbt(wasmPsbt: fixedScriptWallet.BitGoPsbt, unspents: WalletUnspent<bigint>[], rootWalletKeys: fixedScriptWallet.RootWalletKeys, sequence?: number): void;
|
|
41
47
|
/**
|
|
42
48
|
* Add an output to a wasm-utxo BitGoPsbt.
|
|
43
49
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"psbt.d.ts","sourceRoot":"","sources":["../../../src/recovery/psbt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAA0B,MAAM,kBAAkB,CAAC;AAEvF,OAAO,EAA6B,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3E;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,iBAAiB,CAAC,SAAS,GAAG,OAAO,CAG1E;AAmBD,UAAU,kCAAkC;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,4BAA4B,EAAE,MAAM,GAAG,SAAS,CAAC;IACjD,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"psbt.d.ts","sourceRoot":"","sources":["../../../src/recovery/psbt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAA0B,MAAM,kBAAkB,CAAC;AAEvF,OAAO,EAA6B,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3E;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,iBAAiB,CAAC,SAAS,GAAG,OAAO,CAG1E;AAmBD,UAAU,kCAAkC;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,4BAA4B,EAAE,MAAM,GAAG,SAAS,CAAC;IACjD,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAmBD;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,iBAAiB,CAAC,cAAc,EAChD,OAAO,CAAC,EAAE,0BAA0B,GACnC,iBAAiB,CAAC,SAAS,CAa7B;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,iBAAiB,CAAC,SAAS,EACrC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,EACjC,cAAc,EAAE,iBAAiB,CAAC,cAAc,EAChD,QAAQ,CAAC,EAAE,MAAM,GAChB,IAAI,CAyBN;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,iBAAiB,CAAC,SAAS,EACrC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,QAAQ,GACjB,MAAM,CAGR;AA+CD;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,iBAAiB,CAAC,cAAc,EAChD,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,EACjC,OAAO,EAAE,kCAAkC,GAC1C,iBAAiB,CAAC,SAAS,CAM7B;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,iBAAiB,CAAC,SAAS,EACjC,UAAU,EAAE,iBAAiB,CAAC,cAAc,EAC5C,OAAO,EAAE,MAAM,GACd,MAAM,CAOR"}
|