@bitgo/abstract-utxo 9.3.0 → 9.4.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/CHANGELOG.md +10 -0
- package/dist/src/abstractUtxoCoin.d.ts +3 -6
- package/dist/src/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/src/abstractUtxoCoin.js +85 -58
- package/dist/src/core/descriptor/DescriptorMap.d.ts +9 -0
- package/dist/src/core/descriptor/DescriptorMap.d.ts.map +1 -0
- package/dist/src/core/descriptor/DescriptorMap.js +9 -0
- package/dist/src/core/descriptor/Output.d.ts +24 -0
- package/dist/src/core/descriptor/Output.d.ts.map +1 -0
- package/dist/src/core/descriptor/Output.js +22 -0
- package/dist/src/core/descriptor/VirtualSize.d.ts +21 -0
- package/dist/src/core/descriptor/VirtualSize.d.ts.map +1 -0
- package/dist/src/core/descriptor/VirtualSize.js +83 -0
- package/dist/src/core/descriptor/address.d.ts +5 -0
- package/dist/src/core/descriptor/address.d.ts.map +1 -0
- package/dist/src/core/descriptor/address.js +48 -0
- package/dist/src/core/descriptor/index.d.ts +9 -0
- package/dist/src/core/descriptor/index.d.ts.map +1 -0
- package/dist/src/core/descriptor/index.js +17 -0
- package/dist/src/core/descriptor/psbt/assertSatisfiable.d.ts +20 -0
- package/dist/src/core/descriptor/psbt/assertSatisfiable.d.ts.map +1 -0
- package/dist/src/core/descriptor/psbt/assertSatisfiable.js +75 -0
- package/dist/src/core/descriptor/psbt/createPsbt.d.ts +15 -0
- package/dist/src/core/descriptor/psbt/createPsbt.d.ts.map +1 -0
- package/dist/src/core/descriptor/psbt/createPsbt.js +83 -0
- package/dist/src/core/descriptor/psbt/findDescriptors.d.ts +22 -0
- package/dist/src/core/descriptor/psbt/findDescriptors.d.ts.map +1 -0
- package/dist/src/core/descriptor/psbt/findDescriptors.js +75 -0
- package/dist/src/core/descriptor/psbt/index.d.ts +5 -0
- package/dist/src/core/descriptor/psbt/index.d.ts.map +1 -0
- package/dist/src/core/descriptor/psbt/index.js +10 -0
- package/dist/src/core/descriptor/psbt/parse.d.ts +27 -0
- package/dist/src/core/descriptor/psbt/parse.d.ts.map +1 -0
- package/dist/src/core/descriptor/psbt/parse.js +87 -0
- package/dist/src/core/descriptor/psbt/wrap.d.ts +12 -0
- package/dist/src/core/descriptor/psbt/wrap.d.ts.map +1 -0
- package/dist/src/core/descriptor/psbt/wrap.js +76 -0
- package/dist/src/core/descriptor/signTxLocal.d.ts +3 -0
- package/dist/src/core/descriptor/signTxLocal.d.ts.map +1 -0
- package/dist/src/core/descriptor/signTxLocal.js +9 -0
- package/dist/src/descriptor/NamedDescriptor.js +35 -2
- package/dist/src/descriptor/assertDescriptorWalletAddress.js +44 -8
- package/dist/src/index.js +24 -2
- package/dist/src/names.js +35 -2
- package/dist/src/parseOutput.d.ts +0 -3
- package/dist/src/parseOutput.d.ts.map +1 -1
- package/dist/src/parseOutput.js +15 -15
- package/dist/src/recovery/backupKeyRecovery.d.ts +0 -3
- package/dist/src/recovery/backupKeyRecovery.d.ts.map +1 -1
- package/dist/src/recovery/backupKeyRecovery.js +47 -14
- package/dist/src/recovery/baseApi.d.ts +1 -4
- package/dist/src/recovery/baseApi.d.ts.map +1 -1
- package/dist/src/recovery/baseApi.js +6 -6
- package/dist/src/recovery/coingeckoApi.d.ts +0 -3
- package/dist/src/recovery/coingeckoApi.d.ts.map +1 -1
- package/dist/src/recovery/coingeckoApi.js +1 -4
- package/dist/src/recovery/crossChainRecovery.d.ts.map +1 -1
- package/dist/src/recovery/crossChainRecovery.js +40 -7
- package/dist/src/recovery/mempoolApi.d.ts.map +1 -1
- package/dist/src/recovery/mempoolApi.js +7 -7
- package/dist/src/replayProtection.js +35 -2
- package/dist/src/sign.d.ts +0 -3
- package/dist/src/sign.d.ts.map +1 -1
- package/dist/src/sign.js +41 -8
- package/dist/src/transaction/explainTransaction.d.ts +9 -8
- package/dist/src/transaction/explainTransaction.d.ts.map +1 -1
- package/dist/src/transaction/explainTransaction.js +42 -182
- package/dist/src/transaction/fetchInputs.js +35 -2
- package/dist/src/transaction/fixedScript/explainTransaction.d.ts +30 -0
- package/dist/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -0
- package/dist/src/transaction/fixedScript/explainTransaction.js +220 -0
- package/dist/src/transaction/fixedScript/index.d.ts +2 -0
- package/dist/src/transaction/fixedScript/index.d.ts.map +1 -0
- package/dist/src/transaction/fixedScript/index.js +7 -0
- package/dist/src/transaction/index.d.ts +1 -1
- package/dist/src/transaction/index.d.ts.map +1 -1
- package/dist/src/transaction/index.js +4 -2
- package/dist/src/transaction/recipient.js +35 -2
- package/dist/test/core/descriptor/descriptor.utils.d.ts +9 -0
- package/dist/test/core/descriptor/descriptor.utils.d.ts.map +1 -0
- package/dist/test/core/descriptor/descriptor.utils.js +57 -0
- package/dist/test/core/descriptor/psbt/VirtualSize.d.ts +2 -0
- package/dist/test/core/descriptor/psbt/VirtualSize.d.ts.map +1 -0
- package/dist/test/core/descriptor/psbt/VirtualSize.js +78 -0
- package/dist/test/core/descriptor/psbt/assertSatisfiable.d.ts +2 -0
- package/dist/test/core/descriptor/psbt/assertSatisfiable.d.ts.map +1 -0
- package/dist/test/core/descriptor/psbt/assertSatisfiable.js +56 -0
- package/dist/test/core/descriptor/psbt/createPsbt.d.ts +2 -0
- package/dist/test/core/descriptor/psbt/createPsbt.d.ts.map +1 -0
- package/dist/test/core/descriptor/psbt/createPsbt.js +85 -0
- package/dist/test/core/descriptor/psbt/findDescriptors.d.ts +2 -0
- package/dist/test/core/descriptor/psbt/findDescriptors.d.ts.map +1 -0
- package/dist/test/core/descriptor/psbt/findDescriptors.js +66 -0
- package/dist/test/core/descriptor/psbt/mock.utils.d.ts +34 -0
- package/dist/test/core/descriptor/psbt/mock.utils.d.ts.map +1 -0
- package/dist/test/core/descriptor/psbt/mock.utils.js +89 -0
- package/dist/test/core/descriptor/psbt/parse.d.ts +2 -0
- package/dist/test/core/descriptor/psbt/parse.d.ts.map +1 -0
- package/dist/test/core/descriptor/psbt/parse.js +32 -0
- package/dist/test/core/descriptor/psbt/psbt.utils.d.ts +4 -0
- package/dist/test/core/descriptor/psbt/psbt.utils.d.ts.map +1 -0
- package/dist/test/core/descriptor/psbt/psbt.utils.js +20 -0
- package/dist/test/core/fixtures.utils.d.ts +15 -0
- package/dist/test/core/fixtures.utils.d.ts.map +1 -0
- package/dist/test/core/fixtures.utils.js +114 -0
- package/dist/test/core/key.utils.d.ts +16 -0
- package/dist/test/core/key.utils.d.ts.map +1 -0
- package/dist/test/core/key.utils.js +59 -0
- package/dist/test/core/toPlainObject.utils.d.ts +11 -0
- package/dist/test/core/toPlainObject.utils.d.ts.map +1 -0
- package/dist/test/core/toPlainObject.utils.js +76 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -7
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
type ToPlainObjectOpts = {
|
|
2
|
+
propertyDescriptors?: boolean;
|
|
3
|
+
skipUndefinedValues?: boolean;
|
|
4
|
+
ignorePaths?: string[] | ((path: PathElement[]) => boolean);
|
|
5
|
+
apply?: (v: unknown, path: PathElement[]) => unknown;
|
|
6
|
+
};
|
|
7
|
+
export type PathElement = string | number;
|
|
8
|
+
export declare function matchPath(a: PathElement[], b: PathElement[]): boolean;
|
|
9
|
+
export declare function toPlainObject(v: unknown, opts: ToPlainObjectOpts, path: PathElement[]): unknown;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=toPlainObject.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toPlainObject.utils.d.ts","sourceRoot":"","sources":["../../../test/core/toPlainObject.utils.ts"],"names":[],"mappings":"AAAA,KAAK,iBAAiB,GAAG;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,OAAO,CAAC,CAAC;IAC5D,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,OAAO,CAAC;CACtD,CAAC;AACF,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1C,wBAAgB,SAAS,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC,EAAE,WAAW,EAAE,GAAG,OAAO,CAErE;AA0CD,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,OAAO,CAyC/F"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.matchPath = matchPath;
|
|
4
|
+
exports.toPlainObject = toPlainObject;
|
|
5
|
+
function matchPath(a, b) {
|
|
6
|
+
return a.length === b.length && a.every((e, i) => e === b[i]);
|
|
7
|
+
}
|
|
8
|
+
function includePath(opts, path) {
|
|
9
|
+
if (!opts.ignorePaths) {
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
if (typeof opts.ignorePaths === 'function') {
|
|
13
|
+
return !opts.ignorePaths(path);
|
|
14
|
+
}
|
|
15
|
+
return !opts.ignorePaths.some((ignorePath) => matchPath(path, ignorePath.split('.')));
|
|
16
|
+
}
|
|
17
|
+
function toPlainEntries(key, value, opts, path) {
|
|
18
|
+
var _a;
|
|
19
|
+
if (!includePath(opts, [...path, key])) {
|
|
20
|
+
return [];
|
|
21
|
+
}
|
|
22
|
+
if (value === undefined && ((_a = opts.skipUndefinedValues) !== null && _a !== void 0 ? _a : true)) {
|
|
23
|
+
return [];
|
|
24
|
+
}
|
|
25
|
+
return [[key, toPlainObject(value, opts, [...path, key])]];
|
|
26
|
+
}
|
|
27
|
+
function toPlainObjectFromPropertyDescriptors(v, opts, path) {
|
|
28
|
+
const descriptors = Object.getOwnPropertyDescriptors(v);
|
|
29
|
+
return Object.fromEntries(Object.entries(descriptors).flatMap(([key, descriptor]) => {
|
|
30
|
+
if (descriptor.value !== undefined) {
|
|
31
|
+
return toPlainEntries(key, descriptor.value, opts, path);
|
|
32
|
+
}
|
|
33
|
+
if (typeof descriptor.get === 'function') {
|
|
34
|
+
return toPlainEntries(key, descriptor.get.call(v), opts, path);
|
|
35
|
+
}
|
|
36
|
+
return [];
|
|
37
|
+
}));
|
|
38
|
+
}
|
|
39
|
+
function toPlainObject(v, opts, path) {
|
|
40
|
+
if (opts.apply) {
|
|
41
|
+
const result = opts.apply(v, path);
|
|
42
|
+
if (result !== undefined) {
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
switch (typeof v) {
|
|
47
|
+
case 'string':
|
|
48
|
+
case 'number':
|
|
49
|
+
case 'boolean':
|
|
50
|
+
case 'undefined':
|
|
51
|
+
return v;
|
|
52
|
+
case 'bigint':
|
|
53
|
+
return v.toString();
|
|
54
|
+
case 'function':
|
|
55
|
+
case 'symbol':
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
if (v === null) {
|
|
59
|
+
return v;
|
|
60
|
+
}
|
|
61
|
+
if (Buffer.isBuffer(v)) {
|
|
62
|
+
return v.toString('hex');
|
|
63
|
+
}
|
|
64
|
+
if (Array.isArray(v)) {
|
|
65
|
+
return v.map((e, i) => toPlainObject(e, opts, [...path, i]));
|
|
66
|
+
}
|
|
67
|
+
if (typeof v === 'object') {
|
|
68
|
+
const result = Object.fromEntries(Object.entries(v).flatMap(([key, value]) => toPlainEntries(key, value, opts, path)));
|
|
69
|
+
if (opts.propertyDescriptors) {
|
|
70
|
+
Object.assign(result, toPlainObjectFromPropertyDescriptors(v, opts, path));
|
|
71
|
+
}
|
|
72
|
+
return result;
|
|
73
|
+
}
|
|
74
|
+
throw new Error(`unknown v ${typeof v}`);
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9QbGFpbk9iamVjdC51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvY29yZS90b1BsYWluT2JqZWN0LnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBUUEsOEJBRUM7QUEwQ0Qsc0NBeUNDO0FBckZELFNBQWdCLFNBQVMsQ0FBQyxDQUFnQixFQUFFLENBQWdCO0lBQzFELE9BQU8sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEUsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLElBQXVCLEVBQUUsSUFBbUI7SUFDL0QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN0QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxJQUFJLE9BQU8sSUFBSSxDQUFDLFdBQVcsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUMzQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hGLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FDckIsR0FBVyxFQUNYLEtBQWEsRUFDYixJQUF1QixFQUN2QixJQUFtQjs7SUFFbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdkMsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFD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RSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQ3BGLENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLG9DQUFvQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDM0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbInR5cGUgVG9QbGFpbk9iamVjdE9wdHMgPSB7XG4gIHByb3BlcnR5RGVzY3JpcHRvcnM/OiBib29sZWFuO1xuICBza2lwVW5kZWZpbmVkVmFsdWVzPzogYm9vbGVhbjtcbiAgaWdub3JlUGF0aHM/OiBzdHJpbmdbXSB8ICgocGF0aDogUGF0aEVsZW1lbnRbXSkgPT4gYm9vbGVhbik7XG4gIGFwcGx5PzogKHY6IHVua25vd24sIHBhdGg6IFBhdGhFbGVtZW50W10pID0+IHVua25vd247XG59O1xuZXhwb3J0IHR5cGUgUGF0aEVsZW1lbnQgPSBzdHJpbmcgfCBudW1iZXI7XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaFBhdGgoYTogUGF0aEVsZW1lbnRbXSwgYjogUGF0aEVsZW1lbnRbXSk6IGJvb2xlYW4ge1xuICByZXR1cm4gYS5sZW5ndGggPT09IGIubGVuZ3RoICYmIGEuZXZlcnkoKGUsIGkpID0+IGUgPT09IGJbaV0pO1xufVxuXG5mdW5jdGlvbiBpbmNsdWRlUGF0aChvcHRzOiBUb1BsYWluT2JqZWN0T3B0cywgcGF0aDogUGF0aEVsZW1lbnRbXSk6IGJvb2xlYW4ge1xuICBpZiAoIW9wdHMuaWdub3JlUGF0aHMpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodHlwZW9mIG9wdHMuaWdub3JlUGF0aHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gIW9wdHMuaWdub3JlUGF0aHMocGF0aCk7XG4gIH1cbiAgcmV0dXJuICFvcHRzLmlnbm9yZVBhdGhzLnNvbWUoKGlnbm9yZVBhdGgpID0+IG1hdGNoUGF0aChwYXRoLCBpZ25vcmVQYXRoLnNwbGl0KCcuJykpKTtcbn1cblxuZnVuY3Rpb24gdG9QbGFpbkVudHJpZXMoXG4gIGtleTogc3RyaW5nLFxuICB2YWx1ZTogc3RyaW5nLFxuICBvcHRzOiBUb1BsYWluT2JqZWN0T3B0cyxcbiAgcGF0aDogUGF0aEVsZW1lbnRbXVxuKTogW10gfCBbW3N0cmluZywgdW5rbm93bl1dIHtcbiAgaWYgKCFpbmNsdWRlUGF0aChvcHRzLCBbLi4ucGF0aCwga2V5XSkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgKG9wdHMuc2tpcFVuZGVmaW5lZFZhbHVlcyA/PyB0cnVlKSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gW1trZXksIHRvUGxhaW5PYmplY3QodmFsdWUsIG9wdHMsIFsuLi5wYXRoLCBrZXldKV1dO1xufVxuXG5mdW5jdGlvbiB0b1BsYWluT2JqZWN0RnJvbVByb3BlcnR5RGVzY3JpcHRvcnModjogdW5rbm93biwgb3B0czogVG9QbGFpbk9iamVjdE9wdHMsIHBhdGg6IFBhdGhFbGVtZW50W10pIHtcbiAgY29uc3QgZGVzY3JpcHRvcnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh2KTtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhkZXNjcmlwdG9ycykuZmxhdE1hcCgoW2tleSwgZGVzY3JpcHRvcl0pID0+IHtcbiAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHRvUGxhaW5FbnRyaWVzKGtleSwgZGVzY3JpcHRvci52YWx1ZSwgb3B0cywgcGF0aCk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiB0b1BsYWluRW50cmllcyhrZXksIGRlc2NyaXB0b3IuZ2V0LmNhbGwodiksIG9wdHMsIHBhdGgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1BsYWluT2JqZWN0KHY6IHVua25vd24sIG9wdHM6IFRvUGxhaW5PYmplY3RPcHRzLCBwYXRoOiBQYXRoRWxlbWVudFtdKTogdW5rbm93biB7XG4gIGlmIChvcHRzLmFwcGx5KSB7XG4gICAgY29uc3QgcmVzdWx0ID0gb3B0cy5hcHBseSh2LCBwYXRoKTtcbiAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgcmV0dXJuIHY7XG4gICAgY2FzZSAnYmlnaW50JzpcbiAgICAgIHJldHVybiB2LnRvU3RyaW5nKCk7XG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgIGNhc2UgJ3N5bWJvbCc6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHYgPT09IG51bGwpIHtcbiAgICByZXR1cm4gdjtcbiAgfVxuXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIodikpIHtcbiAgICByZXR1cm4gdi50b1N0cmluZygnaGV4Jyk7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodikpIHtcbiAgICByZXR1cm4gdi5tYXAoKGUsIGkpID0+IHRvUGxhaW5PYmplY3QoZSwgb3B0cywgWy4uLnBhdGgsIGldKSk7XG4gIH1cbiAgaWYgKHR5cGVvZiB2ID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IHJlc3VsdCA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIE9iamVjdC5lbnRyaWVzKHYpLmZsYXRNYXAoKFtrZXksIHZhbHVlXSkgPT4gdG9QbGFpbkVudHJpZXMoa2V5LCB2YWx1ZSwgb3B0cywgcGF0aCkpXG4gICAgKTtcbiAgICBpZiAob3B0cy5wcm9wZXJ0eURlc2NyaXB0b3JzKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHJlc3VsdCwgdG9QbGFpbk9iamVjdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3JzKHYsIG9wdHMsIHBhdGgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gdiAke3R5cGVvZiB2fWApO1xufVxuIl19
|