@bitgo/utxo-bin 2.12.0 → 2.14.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/README.md +63 -4
- package/dist/bin/index.js +9 -2
- package/dist/src/InputParser.d.ts.map +1 -1
- package/dist/src/InputParser.js +3 -11
- package/dist/src/ScriptParser.d.ts +21 -0
- package/dist/src/ScriptParser.d.ts.map +1 -0
- package/dist/src/ScriptParser.js +77 -0
- package/dist/src/commands.d.ts +31 -1
- package/dist/src/commands.d.ts.map +1 -1
- package/dist/src/commands.js +85 -14
- package/dist/src/format.d.ts.map +1 -1
- package/dist/src/format.js +11 -5
- package/dist/src/generateAddress.d.ts +32 -0
- package/dist/src/generateAddress.d.ts.map +1 -0
- package/dist/src/generateAddress.js +104 -0
- package/dist/src/parseString.d.ts +5 -0
- package/dist/src/parseString.d.ts.map +1 -0
- package/dist/src/parseString.js +29 -0
- package/dist/src/parseUnknown.d.ts +3 -1
- package/dist/src/parseUnknown.d.ts.map +1 -1
- package/dist/src/parseUnknown.js +3 -3
- package/dist/test/fixtures.d.ts.map +1 -1
- package/dist/test/fixtures.js +10 -3
- package/dist/test/generateAddress.d.ts +2 -0
- package/dist/test/generateAddress.d.ts.map +1 -0
- package/dist/test/generateAddress.js +29 -0
- package/dist/test/parseAddress.js +8 -6
- package/dist/test/parseScript.d.ts +2 -0
- package/dist/test/parseScript.d.ts.map +1 -0
- package/dist/test/parseScript.js +38 -0
- package/dist/test/parseTransaction.js +5 -2
- package/dist/test/stringToBuffer.d.ts +2 -0
- package/dist/test/stringToBuffer.d.ts.map +1 -0
- package/dist/test/stringToBuffer.js +16 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -3,25 +3,55 @@
|
|
|
3
3
|
This repository contains a CLI tool for parsing BitGo wallet transactions (withdrawals) and
|
|
4
4
|
formatting them for terminal output.
|
|
5
5
|
|
|
6
|
+
|
|
6
7
|
# Installation
|
|
7
8
|
|
|
9
|
+
## npm
|
|
10
|
+
|
|
11
|
+
To install the tool globally, run
|
|
12
|
+
|
|
8
13
|
```bash
|
|
9
14
|
npm install --global @bitgo/utxo-bin
|
|
10
15
|
```
|
|
11
16
|
|
|
12
|
-
|
|
17
|
+
This will enable the `utxo-bin` tool to be run from anywhere on your system.
|
|
18
|
+
|
|
19
|
+
## npx
|
|
20
|
+
|
|
21
|
+
To run the tool without installing, you can use `npx`. Be aware that this will download the
|
|
22
|
+
package every time you run it.
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npx @bitgo/utxo-bin ...
|
|
26
|
+
```
|
|
13
27
|
|
|
14
28
|
## parseTx
|
|
15
29
|
|
|
16
|
-
#### From
|
|
30
|
+
#### From file
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
utxo-bin -n bitcoin parseTx <path-to-file>
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
#### From hex or base64
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
utxo-bin -n bitcoin parseTx --data <hex/base64>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
#### From stdin
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
echo <txhex> | utxo-bin -n bitcoin parseTx --stdin
|
|
46
|
+
```
|
|
17
47
|
|
|
18
48
|
```bash
|
|
19
49
|
utxo-bin -n bitcoin parseTx --stdin
|
|
20
50
|
<paste txhex>
|
|
21
|
-
<
|
|
51
|
+
<CTRL-D>
|
|
22
52
|
```
|
|
23
53
|
|
|
24
|
-
|
|
54
|
+
#### From clipboard
|
|
25
55
|
|
|
26
56
|
```bash
|
|
27
57
|
utxo-bin -n bitcoin parseTx --clipboard
|
|
@@ -41,6 +71,16 @@ utxo-bin -n bitcoin parseTx \
|
|
|
41
71
|
--fetchInputs
|
|
42
72
|
```
|
|
43
73
|
|
|
74
|
+
#### Formats
|
|
75
|
+
|
|
76
|
+
Supported transactions formats are
|
|
77
|
+
|
|
78
|
+
* full-signed transactions
|
|
79
|
+
* half-signed transactions in proprietary bitcoinjs-lib format ("legacy")
|
|
80
|
+
* half-signed transactions in PSBT/BIP174 format
|
|
81
|
+
|
|
82
|
+
Supported encodings are hex and base64.
|
|
83
|
+
|
|
44
84
|
## parseAddress
|
|
45
85
|
|
|
46
86
|
```
|
|
@@ -52,3 +92,22 @@ Convert to other networks:
|
|
|
52
92
|
```
|
|
53
93
|
utxo-bin -n bitcoin parseAddress 3QJmV3qfvL9SuYo34YihAf3sRCW3qSinyC --convert
|
|
54
94
|
```
|
|
95
|
+
|
|
96
|
+
## Generate addresses
|
|
97
|
+
```
|
|
98
|
+
utxo-bin generateAddresses \
|
|
99
|
+
--userKey xpub661MyMwAqRbcEvoSo4qrsT5xhByHzUoBjm88hdCPohF1rdQ4TkntuHfccN2N7FbmAmBgmaBxD7VY1QZ43YfgGRLBL37BBkBhYbezgnsPRVP \
|
|
100
|
+
--backupKey xpub661MyMwAqRbcF8Evdu2twZS3ELM8Wg6DqSrVR8GpvCeXMgj3rNPf4nasU1FBzX9yeWYTfyikk7rfuWS5FkMqGnh3HpxeeYtuQEx7FVq5FZa \
|
|
101
|
+
--bitgoKey xpub661MyMwAqRbcEnKX5fhLKdrixijBk4sYCZ7gQ1qRUmib2dXragQVAjv9GmXL4tusTKRwcrYAGrXGETFkFxKFSBCFUAuqdbdM9u2uyQtYkUW
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Development
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
git clone https://github.com/BitGo/BitGoJS.git
|
|
108
|
+
yarn install
|
|
109
|
+
cd modules/utxo-bin
|
|
110
|
+
yarn ts-node bin/index.ts ...
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
See the toplevel [DEVELOPERS.md](../../DEVELOPERS.md) for more information.
|
package/dist/bin/index.js
CHANGED
|
@@ -3,5 +3,12 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
const yargs = require("yargs");
|
|
5
5
|
const commands_1 = require("../src/commands");
|
|
6
|
-
yargs
|
|
7
|
-
|
|
6
|
+
yargs
|
|
7
|
+
.command(commands_1.cmdParseTx)
|
|
8
|
+
.command(commands_1.cmdParseAddress)
|
|
9
|
+
.command(commands_1.cmdParseScript)
|
|
10
|
+
.command(commands_1.cmdGenerateAddress)
|
|
11
|
+
.demandCommand()
|
|
12
|
+
.help()
|
|
13
|
+
.parse();
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9iaW4vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsK0JBQStCO0FBQy9CLDhDQUFrRztBQUVsRyxLQUFLO0tBQ0YsT0FBTyxDQUFDLHFCQUFVLENBQUM7S0FDbkIsT0FBTyxDQUFDLDBCQUFlLENBQUM7S0FDeEIsT0FBTyxDQUFDLHlCQUFjLENBQUM7S0FDdkIsT0FBTyxDQUFDLDZCQUFrQixDQUFDO0tBQzNCLGFBQWEsRUFBRTtLQUNmLElBQUksRUFBRTtLQUNOLEtBQUssRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuaW1wb3J0ICogYXMgeWFyZ3MgZnJvbSAneWFyZ3MnO1xuaW1wb3J0IHsgY21kR2VuZXJhdGVBZGRyZXNzLCBjbWRQYXJzZUFkZHJlc3MsIGNtZFBhcnNlU2NyaXB0LCBjbWRQYXJzZVR4IH0gZnJvbSAnLi4vc3JjL2NvbW1hbmRzJztcblxueWFyZ3NcbiAgLmNvbW1hbmQoY21kUGFyc2VUeClcbiAgLmNvbW1hbmQoY21kUGFyc2VBZGRyZXNzKVxuICAuY29tbWFuZChjbWRQYXJzZVNjcmlwdClcbiAgLmNvbW1hbmQoY21kR2VuZXJhdGVBZGRyZXNzKVxuICAuZGVtYW5kQ29tbWFuZCgpXG4gIC5oZWxwKClcbiAgLnBhcnNlKCk7XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputParser.d.ts","sourceRoot":"","sources":["../../src/InputParser.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAA0C,QAAQ,EAAiB,MAAM,YAAY,CAAC;AAC7F,OAAO,EAAyB,iBAAiB,EAA0B,MAAM,qBAAqB,CAAC;AAGvG,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"InputParser.d.ts","sourceRoot":"","sources":["../../src/InputParser.ts"],"names":[],"mappings":"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"}
|
package/dist/src/InputParser.js
CHANGED
|
@@ -9,6 +9,7 @@ const bitcoinjs_lib_1 = require("bitcoinjs-lib");
|
|
|
9
9
|
const ecdsa_1 = require("./ecdsa");
|
|
10
10
|
const OutputParser_1 = require("./OutputParser");
|
|
11
11
|
const parseUnknown_1 = require("./parseUnknown");
|
|
12
|
+
const ScriptParser_1 = require("./ScriptParser");
|
|
12
13
|
function getOutputId(v) {
|
|
13
14
|
return utxolib.bitgo.formatOutputId(utxolib.bitgo.getOutputIdForInput(v));
|
|
14
15
|
}
|
|
@@ -44,16 +45,7 @@ class InputParser extends Parser_1.Parser {
|
|
|
44
45
|
parseScriptAsm(type, part, i, n) {
|
|
45
46
|
if ((type === 'taproot' && i === n - 2) ||
|
|
46
47
|
((type === 'scripthash' || type === 'witnessscripthash') && i === n - 1)) {
|
|
47
|
-
|
|
48
|
-
try {
|
|
49
|
-
parsed = utxolib.script.toASM(part);
|
|
50
|
-
}
|
|
51
|
-
catch (e) {
|
|
52
|
-
return 'error';
|
|
53
|
-
}
|
|
54
|
-
if (parsed) {
|
|
55
|
-
return ['', ...parsed.split(' ')].join('\n');
|
|
56
|
-
}
|
|
48
|
+
return ScriptParser_1.ScriptParser.toASM(part);
|
|
57
49
|
}
|
|
58
50
|
}
|
|
59
51
|
parseScriptParts(type, parts) {
|
|
@@ -244,4 +236,4 @@ class InputParser extends Parser_1.Parser {
|
|
|
244
236
|
}
|
|
245
237
|
}
|
|
246
238
|
exports.InputParser = InputParser;
|
|
247
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5wdXRQYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvSW5wdXRQYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQTJDO0FBQzNDLHFDQUE4QztBQUM5Qyx5Q0FBNkY7QUFDN0YsMkRBQXVHO0FBQ3ZHLGlEQUF3RDtBQUN4RCxtQ0FBa0M7QUFFbEMsaURBQThDO0FBQzlDLGlEQUE4QztBQVc5QyxTQUFTLFdBQVcsQ0FBQyxDQUFrQztJQUNyRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RSxDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxFQUFZLEVBQUUsVUFBa0IsRUFBRSxPQUF3QjtJQUN0RixJQUFJLEVBQUUsWUFBWSxPQUFPLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRTtRQUMvQyxPQUFPLENBQ0wsMENBQXNCLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FDOUcsQ0FBQztLQUNIO0lBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLENBQVM7SUFDakMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4QixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFhLFdBQVksU0FBUSxl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QUN0RixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO1lBQzdCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO1lBQzFCLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDckIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2xELEdBQUcsQ0FBQyxVQUFVO2dCQUNaLENBQUMsQ0FBQyxJQUFJLDJCQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBVSxDQUFDO29CQUNwRyxRQUFRLEVBQUUsSUFBSTtpQkFDZixDQUFDO2dCQUNKLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDUCxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDckQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBaFRELGtDQWdUQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IFBhcnNlciwgUGFyc2VyTm9kZSB9IGZyb20gJy4vUGFyc2VyJztcbmltcG9ydCB7IGdldFBhcnNlclR4SW5wdXRQcm9wZXJ0aWVzLCBnZXRQcmV2T3V0LCBQYXJzZXJUeCwgUGFyc2VyVHhJbnB1dCB9IGZyb20gJy4vUGFyc2VyVHgnO1xuaW1wb3J0IHsgZ2V0SG9sbG93U3BlbmRNZXNzYWdlLCBIb2xsb3dTZWd3aXRTcGVuZCwgcGFyc2VIb2xsb3dTZWd3aXRTcGVuZCB9IGZyb20gJy4vaG9sbG93U2Vnd2l0U3BlbmQnO1xuaW1wb3J0IHsgc2NyaXB0LCBTY3JpcHRTaWduYXR1cmUgfSBmcm9tICdiaXRjb2luanMtbGliJztcbmltcG9ydCB7IGlzSGlnaFMgfSBmcm9tICcuL2VjZHNhJztcbmltcG9ydCB7IENoYWluSW5mbyB9IGZyb20gJy4vVHhQYXJzZXInO1xuaW1wb3J0IHsgT3V0cHV0UGFyc2VyIH0gZnJvbSAnLi9PdXRwdXRQYXJzZXInO1xuaW1wb3J0IHsgcGFyc2VVbmtub3duIH0gZnJvbSAnLi9wYXJzZVVua25vd24nO1xuXG50eXBlIFBhcnNlZFNpZ25hdHVyZVNjcmlwdCA9XG4gIHwgdXR4b2xpYi5iaXRnby5QYXJzZWRTaWduYXR1cmVTY3JpcHRQMm1zXG4gIHwgdXR4b2xpYi5iaXRnby5QYXJzZWRTaWduYXR1cmVTY3JpcHRQMnNoUDJwa1xuICB8IHV0eG9saWIuYml0Z28uUGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdFxuICB8IHV0eG9saWIuYml0Z28uUGFyc2VkUHNidFAybXNcbiAgfCB1dHhvbGliLmJpdGdvLlBhcnNlZFBzYnRQMnNoUDJwa1xuICB8IHV0eG9saWIuYml0Z28uUGFyc2VkUHNidFRhcHJvb3RcbiAgfCBIb2xsb3dTZWd3aXRTcGVuZDtcblxuZnVuY3Rpb24gZ2V0T3V0cHV0SWQodjogeyBoYXNoOiBCdWZmZXI7IGluZGV4OiBudW1iZXIgfSk6IHN0cmluZyB7XG4gIHJldHVybiB1dHhvbGliLmJpdGdvLmZvcm1hdE91dHB1dElkKHV0eG9saWIuYml0Z28uZ2V0T3V0cHV0SWRGb3JJbnB1dCh2KSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU2lnbmF0dXJlU2NyaXB0KHR4OiBQYXJzZXJUeCwgaW5wdXRJbmRleDogbnVtYmVyLCBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmspOiBQYXJzZWRTaWduYXR1cmVTY3JpcHQge1xuICBpZiAodHggaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbikge1xuICAgIHJldHVybiAoXG4gICAgICBwYXJzZUhvbGxvd1NlZ3dpdFNwZW5kKHR4Lmluc1tpbnB1dEluZGV4XSwgbmV0d29yaykgfHwgdXR4b2xpYi5iaXRnby5wYXJzZVNpZ25hdHVyZVNjcmlwdCh0eC5pbnNbaW5wdXRJbmRleF0pXG4gICAgKTtcbiAgfVxuICByZXR1cm4gdXR4b2xpYi5iaXRnby5wYXJzZVBzYnRJbnB1dCh0eC5kYXRhLmlucHV0c1tpbnB1dEluZGV4XSk7XG59XG5cbmZ1bmN0aW9uIHRvQnVmZmVyVUludDMyQkUobjogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jKDQpO1xuICBidWYud3JpdGVVSW50MzJMRShuLCAwKTtcbiAgcmV0dXJuIGJ1Zjtcbn1cblxuZXhwb3J0IGNsYXNzIElucHV0UGFyc2VyIGV4dGVuZHMgUGFyc2VyIHtcbiAgcHJpdmF0ZSBpbnB1dDogUGFyc2VyVHhJbnB1dDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHR4aWQ6IHN0cmluZyxcbiAgICBwcml2YXRlIHR4OiBQYXJzZXJUeCxcbiAgICBwcml2YXRlIGlucHV0SW5kZXg6IG51bWJlcixcbiAgICBwcml2YXRlIGNoYWluSW5mbzogQ2hhaW5JbmZvLFxuICAgIHByaXZhdGUgcGFyYW1zOiB7XG4gICAgICBwYXJzZU91dHB1dFNjcmlwdDogYm9vbGVhbjtcbiAgICAgIHBhcnNlU2NyaXB0QXNtOiBib29sZWFuO1xuICAgICAgcGFyc2VTY3JpcHREYXRhOiBib29sZWFuO1xuICAgICAgcGFyc2VTaWduYXR1cmVEYXRhOiB7XG4gICAgICAgIHNjcmlwdDogYm9vbGVhbjtcbiAgICAgICAgZWNkc2E6IGJvb2xlYW47XG4gICAgICAgIHNjaG5vcnI6IGJvb2xlYW47XG4gICAgICB9O1xuICAgICAgcGFyc2VFcnJvcj86ICd0aHJvdycgfCAnY29udGludWUnO1xuICAgIH1cbiAgKSB7XG4gICAgc3VwZXIoeyBwYXJzZUVycm9yOiBwYXJhbXMucGFyc2VFcnJvciB9KTtcbiAgICBpZiAodHggaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbikge1xuICAgICAgdGhpcy5pbnB1dCA9IHR4Lmluc1tpbnB1dEluZGV4XTtcbiAgICB9IGVsc2UgaWYgKHR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidCkge1xuICAgICAgdGhpcy5pbnB1dCA9IHR4LnR4SW5wdXRzW2lucHV0SW5kZXhdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gdHJhbnNhY3Rpb24gdHlwZScpO1xuICAgIH1cbiAgfVxuXG4gIHBhcnNlU2NyaXB0QXNtKHR5cGU6IHN0cmluZywgcGFydDogQnVmZmVyLCBpOiBudW1iZXIsIG46IG51bWJlcik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKFxuICAgICAgKHR5cGUgPT09ICd0YXByb290JyAmJiBpID09PSBuIC0gMikgfHxcbiAgICAgICgodHlwZSA9PT0gJ3NjcmlwdGhhc2gnIHx8IHR5cGUgPT09ICd3aXRuZXNzc2NyaXB0aGFzaCcpICYmIGkgPT09IG4gLSAxKVxuICAgICkge1xuICAgICAgbGV0IHBhcnNlZDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcGFyc2VkID0gdXR4b2xpYi5zY3JpcHQudG9BU00ocGFydCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiAnZXJyb3InO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIHJldHVybiBbJycsIC4uLnBhcnNlZC5zcGxpdCgnICcpXS5qb2luKCdcXG4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwYXJzZVNjcmlwdFBhcnRzKHR5cGU6IHN0cmluZywgcGFydHM6IEFycmF5PEJ1ZmZlciB8IG51bWJlcj4pOiBQYXJzZXJOb2RlW10ge1xuICAgIHJldHVybiBwYXJ0cy5tYXAoKHYsIGkpID0+IHtcbiAgICAgIGxldCBhc21Ob2RlOiBQYXJzZXJOb2RlIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKHRoaXMucGFyYW1zLnBhcnNlU2NyaXB0QXNtICYmIEJ1ZmZlci5pc0J1ZmZlcih2KSkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlU2NyaXB0QXNtKHR5cGUsIHYsIGksIHBhcnRzLmxlbmd0aCk7XG4gICAgICAgIGFzbU5vZGUgPSBwYXJzZWQgPyB0aGlzLm5vZGUoJ2FzbScsIHBhcnNlZCkgOiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLm5vZGUoaSwgdGhpcy5wYXJhbXMucGFyc2VTY3JpcHREYXRhID8gdiA6IHVuZGVmaW5lZCwgYXNtTm9kZSA/IFthc21Ob2RlXSA6IHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH1cblxuICBwYXJzZUlucHV0U2NyaXB0KGJ1ZmZlcjogQnVmZmVyIHwgdW5kZWZpbmVkKTogUGFyc2VyTm9kZSB7XG4gICAgbGV0IHZhbHVlO1xuICAgIGxldCBub2RlcztcbiAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci5sZW5ndGggJiYgdGhpcy5wYXJhbXMucGFyc2VTaWduYXR1cmVEYXRhLnNjcmlwdCkge1xuICAgICAgY29uc3QgdHlwZSA9IHV0eG9saWIuY2xhc3NpZnkuaW5wdXQoYnVmZmVyLCB0cnVlKSA/PyAndW5rbm93bic7XG4gICAgICBjb25zdCBkZWNvbXBpbGVkID0gdXR4b2xpYi5zY3JpcHQuZGVjb21waWxlKGJ1ZmZlcik7XG4gICAgICBpZiAoZGVjb21waWxlZCkge1xuICAgICAgICBub2RlcyA9IHRoaXMucGFyc2VTY3JpcHRQYXJ0cyh0eXBlLCBkZWNvbXBpbGVkKTtcbiAgICAgIH1cbiAgICAgIHZhbHVlID0gdHlwZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSBidWZmZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubm9kZSgnc2NyaXB0U2lnJywgdmFsdWUsIG5vZGVzKTtcbiAgfVxuXG4gIHBhcnNlV2l0bmVzcyhzY3JpcHQ6IEJ1ZmZlcltdIHwgdW5kZWZpbmVkKTogUGFyc2VyTm9kZSB7XG4gICAgaWYgKCFzY3JpcHQgfHwgc2NyaXB0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZSgnd2l0bmVzcycsICdbXScpO1xuICAgIH1cbiAgICBjb25zdCB0eXBlID0gdXR4b2xpYi5jbGFzc2lmeS53aXRuZXNzKHNjcmlwdCwgdHJ1ZSkgPz8gJ3Vua25vd24nO1xuICAgIHJldHVybiB0aGlzLm5vZGUoJ3dpdG5lc3MnLCB0eXBlLCB0aGlzLnBhcmFtcy5wYXJzZVNjcmlwdERhdGEgPyB0aGlzLnBhcnNlU2NyaXB0UGFydHModHlwZSwgc2NyaXB0KSA6IHVuZGVmaW5lZCk7XG4gIH1cblxuICBwYXJzZVB1YmtleXMocGFyc2VkOiBQYXJzZWRTaWduYXR1cmVTY3JpcHQpOiBQYXJzZXJOb2RlIHtcbiAgICBpZiAoJ3B1YmxpY0tleXMnIGluIHBhcnNlZCkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZShcbiAgICAgICAgJ3B1YmtleXMnLFxuICAgICAgICBwYXJzZWQucHVibGljS2V5cy5sZW5ndGgsXG4gICAgICAgIHBhcnNlZC5wdWJsaWNLZXlzLm1hcCgoaywgaSkgPT4gdGhpcy5ub2RlKGksIGspKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZSgncHVia2V5cycsICdbXScpO1xuICAgIH1cbiAgfVxuXG4gIHBhcnNlU2lnbmF0dXJlQnVmZmVyKFxuICAgIHR5cGU6XG4gICAgICB8IHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5TY3JpcHRUeXBlMk9mM1xuICAgICAgfCB1dHhvbGliLmJpdGdvLlBhcnNlZFNjcmlwdFR5cGUyT2YzXG4gICAgICB8IHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5TY3JpcHRUeXBlUDJzaFAycGssXG4gICAgYnVmOiBCdWZmZXIgfCAwLFxuICAgIHNpZ25lckluZGV4OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgKTogUGFyc2VyTm9kZVtdIHtcbiAgICBpZiAoYnVmID09PSAwKSB7XG4gICAgICByZXR1cm4gW3RoaXMubm9kZSgndHlwZScsICdwbGFjZWhvbGRlciAoMCknKV07XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZXMgPSBbdGhpcy5ub2RlKCdieXRlcycsIGJ1ZildO1xuICAgIGlmIChzaWduZXJJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBub2Rlcy5wdXNoKHRoaXMubm9kZSgndmFsaWQnLCAwIDw9IHNpZ25lckluZGV4KSk7XG4gICAgICBpZiAoMCA8PSBzaWduZXJJbmRleCkge1xuICAgICAgICBub2Rlcy5wdXNoKHRoaXMubm9kZSgnc2lnbmVkQnknLCBbJ3VzZXInLCAnYmFja3VwJywgJ2JpdGdvJ11bc2lnbmVySW5kZXhdKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJyB8fCB0eXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcpIHtcbiAgICAgIC8vIFRPRE9cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgeyBzaWduYXR1cmUsIGhhc2hUeXBlIH0gPSBTY3JpcHRTaWduYXR1cmUuZGVjb2RlKGJ1Zik7XG4gICAgICBjb25zdCByID0gc2lnbmF0dXJlLnN1YmFycmF5KDAsIDMyKTtcbiAgICAgIGNvbnN0IHMgPSBzaWduYXR1cmUuc3ViYXJyYXkoMzIpO1xuXG4gICAgICBpZiAoci5sZW5ndGggIT09IDMyIHx8IHMubGVuZ3RoICE9PSAzMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgc2NhbGFyIGxlbmd0aGApO1xuICAgICAgfVxuXG4gICAgICBub2Rlcy5wdXNoKFxuICAgICAgICB0aGlzLm5vZGUoJ2lzQ2Fub25pY2FsJywgc2NyaXB0LmlzQ2Fub25pY2FsU2NyaXB0U2lnbmF0dXJlKGJ1ZikpLFxuICAgICAgICB0aGlzLm5vZGUoJ2hhc2hUeXBlJywgaGFzaFR5cGUpLFxuICAgICAgICB0aGlzLm5vZGUoJ3InLCByKSxcbiAgICAgICAgdGhpcy5ub2RlKCdzJywgcyksXG4gICAgICAgIHRoaXMubm9kZSgnaGlnaFMnLCBpc0hpZ2hTKHMpKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZXM7XG4gIH1cblxuICBwYXJzZVNpZ25hdHVyZXNXaXRoU2lnbmVycyhcbiAgICBwYXJzZWQ6IHtcbiAgICAgIHNjcmlwdFR5cGU6XG4gICAgICAgIHwgdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLlNjcmlwdFR5cGUyT2YzXG4gICAgICAgIHwgdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLlNjcmlwdFR5cGVQMnNoUDJwa1xuICAgICAgICB8IHV0eG9saWIuYml0Z28uUGFyc2VkU2NyaXB0VHlwZTJPZjM7XG4gICAgICBzaWduYXR1cmVzOiAoQnVmZmVyIHwgMClbXTtcbiAgICB9LFxuICAgIHNpZ25lZEJ5TGFiZWxzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCxcbiAgICBzaWduZXJJbmRleDogbnVtYmVyW10gfCB1bmRlZmluZWRcbiAgKTogUGFyc2VyTm9kZVtdIHtcbiAgICBjb25zdCBub2RlcyA9IHNpZ25lZEJ5TGFiZWxzID8gW3RoaXMubm9kZSgnc2lnbmVkIGJ5JywgYFske3NpZ25lZEJ5TGFiZWxzLmpvaW4oJywgJyl9XWApXSA6IFtdO1xuICAgIGlmICh0aGlzLnBhcmFtcy5wYXJzZVNpZ25hdHVyZURhdGEuZWNkc2EgfHwgdGhpcy5wYXJhbXMucGFyc2VTaWduYXR1cmVEYXRhLnNjaG5vcnIpIHtcbiAgICAgIG5vZGVzLnB1c2goXG4gICAgICAgIC4uLnBhcnNlZC5zaWduYXR1cmVzLm1hcCgoczogQnVmZmVyIHwgMCwgaTogbnVtYmVyKSA9PlxuICAgICAgICAgIHRoaXMubm9kZShcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICB0aGlzLnBhcnNlU2lnbmF0dXJlQnVmZmVyKHBhcnNlZC5zY3JpcHRUeXBlLCBzLCBzaWduZXJJbmRleCA/IHNpZ25lckluZGV4W2ldIDogdW5kZWZpbmVkKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzO1xuICB9XG5cbiAgcGFyc2VTaWduYXR1cmVzKHBhcnNlZDogUGFyc2VkU2lnbmF0dXJlU2NyaXB0KTogUGFyc2VyTm9kZSB7XG4gICAgY29uc3Qgbm9kZXM6IFBhcnNlck5vZGVbXSA9IFtdO1xuICAgIGlmIChcbiAgICAgICdzaWduYXR1cmVzJyBpbiBwYXJzZWQgJiZcbiAgICAgICdwdWJsaWNLZXlzJyBpbiBwYXJzZWQgJiZcbiAgICAgICdzY3JpcHRUeXBlJyBpbiBwYXJzZWQgJiZcbiAgICAgIHBhcnNlZC5zaWduYXR1cmVzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHBhcnNlZC5zY3JpcHRUeXBlICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLnR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb24gJiYgdGhpcy5jaGFpbkluZm8ucHJldk91dHB1dHMpIHtcbiAgICAgICAgY29uc3Qgc2lnbmVkQnkgPSB1dHhvbGliLmJpdGdvLmdldFNpZ25hdHVyZXNXaXRoUHVibGljS2V5cyhcbiAgICAgICAgICB0aGlzLnR4LFxuICAgICAgICAgIHRoaXMuaW5wdXRJbmRleCxcbiAgICAgICAgICB0aGlzLmNoYWluSW5mby5wcmV2T3V0cHV0cyxcbiAgICAgICAgICBwYXJzZWQucHVibGljS2V5c1xuICAgICAgICApO1xuICAgICAgICBub2Rlcy5wdXNoKFxuICAgICAgICAgIC4uLnRoaXMucGFyc2VTaWduYXR1cmVzV2l0aFNpZ25lcnMoXG4gICAgICAgICAgICBwYXJzZWQsXG4gICAgICAgICAgICBzaWduZWRCeS5mbGF0TWFwKCh2LCBpKSA9PiAodiA/IFtpLnRvU3RyaW5nKCldIDogW10pKSxcbiAgICAgICAgICAgIHBhcnNlZC5zaWduYXR1cmVzLm1hcCgoazogQnVmZmVyIHwgMCkgPT4gKGsgPT09IDAgPyAtMSA6IHNpZ25lZEJ5LmluZGV4T2YoaykpKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidCkge1xuICAgICAgICBsZXQgc2lnbmVkQnlMYWJlbHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAocGFyc2VkLnB1YmxpY0tleXMgJiYgQXJyYXkuaXNBcnJheShwYXJzZWQucHVibGljS2V5cykpIHtcbiAgICAgICAgICBjb25zdCBwc2J0ID0gdGhpcy50eDtcbiAgICAgICAgICBzaWduZWRCeUxhYmVscyA9IHBhcnNlZC5wdWJsaWNLZXlzLmZsYXRNYXAoKGs6IEJ1ZmZlciwgaSkgPT5cbiAgICAgICAgICAgIEJ1ZmZlci5pc0J1ZmZlcihrKSAmJiBwc2J0LnZhbGlkYXRlU2lnbmF0dXJlc09mSW5wdXRDb21tb24odGhpcy5pbnB1dEluZGV4LCBrKSA/IFtpLnRvU3RyaW5nKCldIDogW11cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRPRE86IHRoZSBjdXJyZW50IFV0eG9Qc2J0IEFQSSBkb2VzIG5vdCBhbGxvdyB1cyB0byBkZXRlcm1pbmUgd2hpY2ggc2lnbmVyIGNyZWF0ZWQgd2hpY2ggc2lnbmF0dXJlXG4gICAgICAgIGNvbnN0IHNpZ25lckluZGV4ID0gdW5kZWZpbmVkO1xuICAgICAgICBub2Rlcy5wdXNoKC4uLnRoaXMucGFyc2VTaWduYXR1cmVzV2l0aFNpZ25lcnMocGFyc2VkLCBzaWduZWRCeUxhYmVscywgc2lnbmVySW5kZXgpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLm5vZGUoXG4gICAgICAgICdzaWduYXR1cmVzJyxcbiAgICAgICAgcGFyc2VkLnNpZ25hdHVyZXNcbiAgICAgICAgICAubWFwKChzOiBCdWZmZXIgfCAwKSA9PlxuICAgICAgICAgICAgdXR4b2xpYi5iaXRnby5pc1BsYWNlaG9sZGVyU2lnbmF0dXJlKHMpID8gJ1tdJyA6IEJ1ZmZlci5pc0J1ZmZlcihzKSA/IGBbJHtzLmxlbmd0aH1ieXRlXWAgOiBgWyR7c31dYFxuICAgICAgICAgIClcbiAgICAgICAgICAuam9pbignICcpLFxuICAgICAgICBub2Rlc1xuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKCdzaWduYXR1cmVzJyBpbiBwYXJzZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGUoXG4gICAgICAgICdzaWduYXR1cmVzJyxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAocGFyc2VkLnNpZ25hdHVyZXMgPz8gW10pLm1hcCgoczogQnVmZmVyIHwgMCwgaTogbnVtYmVyKSA9PiB0aGlzLm5vZGUoaSwgcykpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2RlKCdzaWduYXR1cmVzJywgdW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICBwYXJzZVNpZ1NjcmlwdFdpdGhUeXBlKHBhcnNlZDogUGFyc2VkU2lnbmF0dXJlU2NyaXB0KTogUGFyc2VyTm9kZSB7XG4gICAgaWYgKFxuICAgICAgcGFyc2VkLnNjcmlwdFR5cGUgJiZcbiAgICAgICh1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuaXNTY3JpcHRUeXBlMk9mMyhwYXJzZWQuc2NyaXB0VHlwZSkgfHxcbiAgICAgICAgcGFyc2VkLnNjcmlwdFR5cGUgPT09ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJyB8fFxuICAgICAgICBwYXJzZWQuc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZSgnc2lnU2NyaXB0JywgcGFyc2VkLnNjcmlwdFR5cGUsIFt0aGlzLnBhcnNlUHVia2V5cyhwYXJzZWQpLCB0aGlzLnBhcnNlU2lnbmF0dXJlcyhwYXJzZWQpXSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcnNlZC5zY3JpcHRUeXBlID09PSAncDJzaFAyd3NoSG9sbG93JyB8fCBwYXJzZWQuc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMndwa2hIb2xsb3cnKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2RlKCdzaWdTY3JpcHQnLCBwYXJzZWQuc2NyaXB0VHlwZSwgW3RoaXMubm9kZSgnaW5mbycsIGdldEhvbGxvd1NwZW5kTWVzc2FnZSgpKV0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm5vZGUoJ3NpZ1NjcmlwdCcsIHBhcnNlZC5zY3JpcHRUeXBlID8/ICd1bmtub3duJyk7XG4gIH1cblxuICBwYXJzZVNpZ1NjcmlwdCgpOiBQYXJzZXJOb2RlIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMucGFyc2VTaWdTY3JpcHRXaXRoVHlwZShwYXJzZVNpZ25hdHVyZVNjcmlwdCh0aGlzLnR4LCB0aGlzLmlucHV0SW5kZXgsIHRoaXMudHgubmV0d29yaykpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZVBhcnNlRXJyb3IoZSk7XG4gICAgfVxuICB9XG5cbiAgcGFyc2VQcmV2T3V0KHByZXZPdXRwdXQ6IHV0eG9saWIuVHhPdXRwdXQ8YmlnaW50PiB8IHV0eG9saWIuYml0Z28uUHNidElucHV0KTogUGFyc2VyTm9kZVtdIHtcbiAgICBsZXQgc2NyaXB0OiBCdWZmZXI7XG4gICAgbGV0IHZhbHVlOiBiaWdpbnQ7XG4gICAgaWYgKCdzY3JpcHQnIGluIHByZXZPdXRwdXQgJiYgcHJldk91dHB1dC5zY3JpcHQpIHtcbiAgICAgICh7IHNjcmlwdCwgdmFsdWUgfSA9IHByZXZPdXRwdXQpO1xuICAgIH0gZWxzZSBpZiAoJ3dpdG5lc3NVdHhvJyBpbiBwcmV2T3V0cHV0IHx8ICdub25XaXRuZXNzVXR4bycgaW4gcHJldk91dHB1dCkge1xuICAgICAgaWYgKCEodGhpcy50eCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzdGF0ZScpO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0UHJldk91dChwcmV2T3V0cHV0LCB0aGlzLnR4LnR4SW5wdXRzW3RoaXMuaW5wdXRJbmRleF0sIHRoaXMudHgubmV0d29yayk7XG4gICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICByZXR1cm4gW3RoaXMubm9kZSgnc2NyaXB0JywgJ3Vua25vd24nKSwgdGhpcy5ub2RlKCd2YWx1ZScsICd1bmtub3duJyldO1xuICAgICAgfVxuICAgICAgKHsgc2NyaXB0LCB2YWx1ZSB9ID0gcmVzdWx0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHByZXZPdXRwdXQnKTtcbiAgICB9XG5cbiAgICBsZXQgYWRkcmVzcztcbiAgICB0cnkge1xuICAgICAgYWRkcmVzcyA9IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KHNjcmlwdCwgdGhpcy50eC5uZXR3b3JrKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhZGRyZXNzID0gJyhlcnJvciknO1xuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy5ub2RlKCd2YWx1ZScsIE51bWJlcih2YWx1ZSkgLyAxZTgpLFxuICAgICAgdGhpcy5ub2RlKCdwdWJTY3JpcHQnLCBzY3JpcHQsIGFkZHJlc3MgPyBbdGhpcy5ub2RlKCdhZGRyZXNzJywgYWRkcmVzcyldIDogdW5kZWZpbmVkKSxcbiAgICBdO1xuICB9XG5cbiAgcGFyc2VQc2J0SW5wdXQoaW5wdXQ6IHV0eG9saWIuYml0Z28uUHNidElucHV0KTogUGFyc2VyTm9kZVtdIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoe1xuICAgICAgbXVzaWcyUGFydGljaXBhbnRzOiB1dHhvbGliLmJpdGdvLm11c2lnMi5wYXJzZVBzYnRNdXNpZzJQYXJ0aWNpcGFudHMoaW5wdXQpLFxuICAgICAgbXVzaWcyTm9uY2VzOiB1dHhvbGliLmJpdGdvLm11c2lnMi5wYXJzZVBzYnRNdXNpZzJOb25jZXMoaW5wdXQpLFxuICAgICAgbXVzaWcyUGFydGlhbFNpZ25hdHVyZXM6IHV0eG9saWIuYml0Z28ubXVzaWcyLnBhcnNlUHNidE11c2lnMlBhcnRpYWxTaWdzKGlucHV0KSxcbiAgICB9KS5mbGF0TWFwKChba2V5LCB2YWx1ZV0pID0+ICh2YWx1ZSA/IFtwYXJzZVVua25vd24odGhpcywga2V5LCB2YWx1ZSldIDogW10pKTtcbiAgfVxuXG4gIHBhcnNlSW5wdXQoKTogUGFyc2VyTm9kZSB7XG4gICAgY29uc3QgcHNidElucHV0ID0gdGhpcy50eCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnQgPyB0aGlzLnR4LmRhdGEuaW5wdXRzW3RoaXMuaW5wdXRJbmRleF0gOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgeyB0eGlkOiBwcmV2VHhpZCwgdm91dCwgc2VxdWVuY2UsIHNjcmlwdCwgd2l0bmVzcyB9ID0gZ2V0UGFyc2VyVHhJbnB1dFByb3BlcnRpZXModGhpcy5pbnB1dCwgcHNidElucHV0KTtcbiAgICBjb25zdCBwcmV2T3V0cHV0ID0gdGhpcy5jaGFpbkluZm8ucHJldk91dHB1dHM/Llt0aGlzLmlucHV0SW5kZXhdO1xuICAgIHJldHVybiB0aGlzLm5vZGUodGhpcy5pbnB1dEluZGV4LCBnZXRPdXRwdXRJZCh0aGlzLmlucHV0KSwgW1xuICAgICAgdGhpcy5ub2RlKCdzZXF1ZW5jZScsIHNlcXVlbmNlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB0b0J1ZmZlclVJbnQzMkJFKHNlcXVlbmNlKSksXG4gICAgICB0aGlzLnBhcnNlSW5wdXRTY3JpcHQoc2NyaXB0KSxcbiAgICAgIHRoaXMucGFyc2VXaXRuZXNzKHdpdG5lc3MpLFxuICAgICAgdGhpcy5wYXJzZVNpZ1NjcmlwdCgpLFxuICAgICAgLi4uKHBzYnRJbnB1dCA/IHRoaXMucGFyc2VQcmV2T3V0KHBzYnRJbnB1dCkgOiBbXSksXG4gICAgICAuLi4ocHJldk91dHB1dFxuICAgICAgICA/IG5ldyBPdXRwdXRQYXJzZXIodGhpcy50eC5uZXR3b3JrLCBwcmV2VHhpZCwgdm91dCwgcHJldk91dHB1dCwgdGhpcy5jaGFpbkluZm8sIHRoaXMucGFyYW1zKS5wYXJzZVNwZW5kKHtcbiAgICAgICAgICAgIGNvbmZsaWN0OiB0cnVlLFxuICAgICAgICAgIH0pXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKHBzYnRJbnB1dCA/IHRoaXMucGFyc2VQc2J0SW5wdXQocHNidElucHV0KSA6IFtdKSxcbiAgICBdKTtcbiAgfVxufVxuIl19
|
|
239
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5wdXRQYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvSW5wdXRQYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQTJDO0FBQzNDLHFDQUE4QztBQUM5Qyx5Q0FBNkY7QUFDN0YsMkRBQXVHO0FBQ3ZHLGlEQUF3RDtBQUN4RCxtQ0FBa0M7QUFFbEMsaURBQThDO0FBQzlDLGlEQUE4QztBQUM5QyxpREFBOEM7QUFXOUMsU0FBUyxXQUFXLENBQUMsQ0FBa0M7SUFDckQsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUUsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsRUFBWSxFQUFFLFVBQWtCLEVBQUUsT0FBd0I7SUFDdEYsSUFBSSxFQUFFLFlBQVksT0FBTyxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUU7UUFDL0MsT0FBTyxDQUNMLDBDQUFzQixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQzlHLENBQUM7S0FDSDtJQUNELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUNsRSxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxDQUFTO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEIsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFB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VUFBVTtnQkFDWixDQUFDLENBQUMsSUFBSSwyQkFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQztvQkFDcEcsUUFBUSxFQUFFLElBQUk7aUJBQ2YsQ0FBQztnQkFDSixDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1AsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ3JELENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXRTRCxrQ0FzU0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBQYXJzZXIsIFBhcnNlck5vZGUgfSBmcm9tICcuL1BhcnNlcic7XG5pbXBvcnQgeyBnZXRQYXJzZXJUeElucHV0UHJvcGVydGllcywgZ2V0UHJldk91dCwgUGFyc2VyVHgsIFBhcnNlclR4SW5wdXQgfSBmcm9tICcuL1BhcnNlclR4JztcbmltcG9ydCB7IGdldEhvbGxvd1NwZW5kTWVzc2FnZSwgSG9sbG93U2Vnd2l0U3BlbmQsIHBhcnNlSG9sbG93U2Vnd2l0U3BlbmQgfSBmcm9tICcuL2hvbGxvd1NlZ3dpdFNwZW5kJztcbmltcG9ydCB7IHNjcmlwdCwgU2NyaXB0U2lnbmF0dXJlIH0gZnJvbSAnYml0Y29pbmpzLWxpYic7XG5pbXBvcnQgeyBpc0hpZ2hTIH0gZnJvbSAnLi9lY2RzYSc7XG5pbXBvcnQgeyBDaGFpbkluZm8gfSBmcm9tICcuL1R4UGFyc2VyJztcbmltcG9ydCB7IE91dHB1dFBhcnNlciB9IGZyb20gJy4vT3V0cHV0UGFyc2VyJztcbmltcG9ydCB7IHBhcnNlVW5rbm93biB9IGZyb20gJy4vcGFyc2VVbmtub3duJztcbmltcG9ydCB7IFNjcmlwdFBhcnNlciB9IGZyb20gJy4vU2NyaXB0UGFyc2VyJztcblxudHlwZSBQYXJzZWRTaWduYXR1cmVTY3JpcHQgPVxuICB8IHV0eG9saWIuYml0Z28uUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJtc1xuICB8IHV0eG9saWIuYml0Z28uUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJzaFAycGtcbiAgfCB1dHhvbGliLmJpdGdvLlBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3RcbiAgfCB1dHhvbGliLmJpdGdvLlBhcnNlZFBzYnRQMm1zXG4gIHwgdXR4b2xpYi5iaXRnby5QYXJzZWRQc2J0UDJzaFAycGtcbiAgfCB1dHhvbGliLmJpdGdvLlBhcnNlZFBzYnRUYXByb290XG4gIHwgSG9sbG93U2Vnd2l0U3BlbmQ7XG5cbmZ1bmN0aW9uIGdldE91dHB1dElkKHY6IHsgaGFzaDogQnVmZmVyOyBpbmRleDogbnVtYmVyIH0pOiBzdHJpbmcge1xuICByZXR1cm4gdXR4b2xpYi5iaXRnby5mb3JtYXRPdXRwdXRJZCh1dHhvbGliLmJpdGdvLmdldE91dHB1dElkRm9ySW5wdXQodikpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVNpZ25hdHVyZVNjcmlwdCh0eDogUGFyc2VyVHgsIGlucHV0SW5kZXg6IG51bWJlciwgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrKTogUGFyc2VkU2lnbmF0dXJlU2NyaXB0IHtcbiAgaWYgKHR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb24pIHtcbiAgICByZXR1cm4gKFxuICAgICAgcGFyc2VIb2xsb3dTZWd3aXRTcGVuZCh0eC5pbnNbaW5wdXRJbmRleF0sIG5ldHdvcmspIHx8IHV0eG9saWIuYml0Z28ucGFyc2VTaWduYXR1cmVTY3JpcHQodHguaW5zW2lucHV0SW5kZXhdKVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHV0eG9saWIuYml0Z28ucGFyc2VQc2J0SW5wdXQodHguZGF0YS5pbnB1dHNbaW5wdXRJbmRleF0pO1xufVxuXG5mdW5jdGlvbiB0b0J1ZmZlclVJbnQzMkJFKG46IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYyg0KTtcbiAgYnVmLndyaXRlVUludDMyTEUobiwgMCk7XG4gIHJldHVybiBidWY7XG59XG5cbmV4cG9ydCBjbGFzcyBJbnB1dFBhcnNlciBleHRlbmRzIFBhcnNlciB7XG4gIHByaXZhdGUgaW5wdXQ6IFBhcnNlclR4SW5wdXQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0eGlkOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSB0eDogUGFyc2VyVHgsXG4gICAgcHJpdmF0ZSBpbnB1dEluZGV4OiBudW1iZXIsXG4gICAgcHJpdmF0ZSBjaGFpbkluZm86IENoYWluSW5mbyxcbiAgICBwcml2YXRlIHBhcmFtczoge1xuICAgICAgcGFyc2VPdXRwdXRTY3JpcHQ6IGJvb2xlYW47XG4gICAgICBwYXJzZVNjcmlwdEFzbTogYm9vbGVhbjtcbiAgICAgIHBhcnNlU2NyaXB0RGF0YTogYm9vbGVhbjtcbiAgICAgIHBhcnNlU2lnbmF0dXJlRGF0YToge1xuICAgICAgICBzY3JpcHQ6IGJvb2xlYW47XG4gICAgICAgIGVjZHNhOiBib29sZWFuO1xuICAgICAgICBzY2hub3JyOiBib29sZWFuO1xuICAgICAgfTtcbiAgICAgIHBhcnNlRXJyb3I/OiAndGhyb3cnIHwgJ2NvbnRpbnVlJztcbiAgICB9XG4gICkge1xuICAgIHN1cGVyKHsgcGFyc2VFcnJvcjogcGFyYW1zLnBhcnNlRXJyb3IgfSk7XG4gICAgaWYgKHR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb24pIHtcbiAgICAgIHRoaXMuaW5wdXQgPSB0eC5pbnNbaW5wdXRJbmRleF07XG4gICAgfSBlbHNlIGlmICh0eCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnQpIHtcbiAgICAgIHRoaXMuaW5wdXQgPSB0eC50eElucHV0c1tpbnB1dEluZGV4XTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIHRyYW5zYWN0aW9uIHR5cGUnKTtcbiAgICB9XG4gIH1cblxuICBwYXJzZVNjcmlwdEFzbSh0eXBlOiBzdHJpbmcsIHBhcnQ6IEJ1ZmZlciwgaTogbnVtYmVyLCBuOiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmIChcbiAgICAgICh0eXBlID09PSAndGFwcm9vdCcgJiYgaSA9PT0gbiAtIDIpIHx8XG4gICAgICAoKHR5cGUgPT09ICdzY3JpcHRoYXNoJyB8fCB0eXBlID09PSAnd2l0bmVzc3NjcmlwdGhhc2gnKSAmJiBpID09PSBuIC0gMSlcbiAgICApIHtcbiAgICAgIHJldHVybiBTY3JpcHRQYXJzZXIudG9BU00ocGFydCk7XG4gICAgfVxuICB9XG5cbiAgcGFyc2VTY3JpcHRQYXJ0cyh0eXBlOiBzdHJpbmcsIHBhcnRzOiBBcnJheTxCdWZmZXIgfCBudW1iZXI+KTogUGFyc2VyTm9kZVtdIHtcbiAgICByZXR1cm4gcGFydHMubWFwKCh2LCBpKSA9PiB7XG4gICAgICBsZXQgYXNtTm9kZTogUGFyc2VyTm9kZSB8IHVuZGVmaW5lZDtcbiAgICAgIGlmICh0aGlzLnBhcmFtcy5wYXJzZVNjcmlwdEFzbSAmJiBCdWZmZXIuaXNCdWZmZXIodikpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5wYXJzZVNjcmlwdEFzbSh0eXBlLCB2LCBpLCBwYXJ0cy5sZW5ndGgpO1xuICAgICAgICBhc21Ob2RlID0gcGFyc2VkID8gdGhpcy5ub2RlKCdhc20nLCBwYXJzZWQpIDogdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ub2RlKGksIHRoaXMucGFyYW1zLnBhcnNlU2NyaXB0RGF0YSA/IHYgOiB1bmRlZmluZWQsIGFzbU5vZGUgPyBbYXNtTm9kZV0gOiB1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9XG5cbiAgcGFyc2VJbnB1dFNjcmlwdChidWZmZXI6IEJ1ZmZlciB8IHVuZGVmaW5lZCk6IFBhcnNlck5vZGUge1xuICAgIGxldCB2YWx1ZTtcbiAgICBsZXQgbm9kZXM7XG4gICAgaWYgKGJ1ZmZlciAmJiBidWZmZXIubGVuZ3RoICYmIHRoaXMucGFyYW1zLnBhcnNlU2lnbmF0dXJlRGF0YS5zY3JpcHQpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSB1dHhvbGliLmNsYXNzaWZ5LmlucHV0KGJ1ZmZlciwgdHJ1ZSkgPz8gJ3Vua25vd24nO1xuICAgICAgY29uc3QgZGVjb21waWxlZCA9IHV0eG9saWIuc2NyaXB0LmRlY29tcGlsZShidWZmZXIpO1xuICAgICAgaWYgKGRlY29tcGlsZWQpIHtcbiAgICAgICAgbm9kZXMgPSB0aGlzLnBhcnNlU2NyaXB0UGFydHModHlwZSwgZGVjb21waWxlZCk7XG4gICAgICB9XG4gICAgICB2YWx1ZSA9IHR5cGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gYnVmZmVyO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm5vZGUoJ3NjcmlwdFNpZycsIHZhbHVlLCBub2Rlcyk7XG4gIH1cblxuICBwYXJzZVdpdG5lc3Moc2NyaXB0OiBCdWZmZXJbXSB8IHVuZGVmaW5lZCk6IFBhcnNlck5vZGUge1xuICAgIGlmICghc2NyaXB0IHx8IHNjcmlwdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGUoJ3dpdG5lc3MnLCAnW10nKTtcbiAgICB9XG4gICAgY29uc3QgdHlwZSA9IHV0eG9saWIuY2xhc3NpZnkud2l0bmVzcyhzY3JpcHQsIHRydWUpID8/ICd1bmtub3duJztcbiAgICByZXR1cm4gdGhpcy5ub2RlKCd3aXRuZXNzJywgdHlwZSwgdGhpcy5wYXJhbXMucGFyc2VTY3JpcHREYXRhID8gdGhpcy5wYXJzZVNjcmlwdFBhcnRzKHR5cGUsIHNjcmlwdCkgOiB1bmRlZmluZWQpO1xuICB9XG5cbiAgcGFyc2VQdWJrZXlzKHBhcnNlZDogUGFyc2VkU2lnbmF0dXJlU2NyaXB0KTogUGFyc2VyTm9kZSB7XG4gICAgaWYgKCdwdWJsaWNLZXlzJyBpbiBwYXJzZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGUoXG4gICAgICAgICdwdWJrZXlzJyxcbiAgICAgICAgcGFyc2VkLnB1YmxpY0tleXMubGVuZ3RoLFxuICAgICAgICBwYXJzZWQucHVibGljS2V5cy5tYXAoKGssIGkpID0+IHRoaXMubm9kZShpLCBrKSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGUoJ3B1YmtleXMnLCAnW10nKTtcbiAgICB9XG4gIH1cblxuICBwYXJzZVNpZ25hdHVyZUJ1ZmZlcihcbiAgICB0eXBlOlxuICAgICAgfCB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuU2NyaXB0VHlwZTJPZjNcbiAgICAgIHwgdXR4b2xpYi5iaXRnby5QYXJzZWRTY3JpcHRUeXBlMk9mM1xuICAgICAgfCB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuU2NyaXB0VHlwZVAyc2hQMnBrLFxuICAgIGJ1ZjogQnVmZmVyIHwgMCxcbiAgICBzaWduZXJJbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkXG4gICk6IFBhcnNlck5vZGVbXSB7XG4gICAgaWYgKGJ1ZiA9PT0gMCkge1xuICAgICAgcmV0dXJuIFt0aGlzLm5vZGUoJ3R5cGUnLCAncGxhY2Vob2xkZXIgKDApJyldO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGVzID0gW3RoaXMubm9kZSgnYnl0ZXMnLCBidWYpXTtcbiAgICBpZiAoc2lnbmVySW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgbm9kZXMucHVzaCh0aGlzLm5vZGUoJ3ZhbGlkJywgMCA8PSBzaWduZXJJbmRleCkpO1xuICAgICAgaWYgKDAgPD0gc2lnbmVySW5kZXgpIHtcbiAgICAgICAgbm9kZXMucHVzaCh0aGlzLm5vZGUoJ3NpZ25lZEJ5JywgWyd1c2VyJywgJ2JhY2t1cCcsICdiaXRnbyddW3NpZ25lckluZGV4XSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCcgfHwgdHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnKSB7XG4gICAgICAvLyBUT0RPXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHsgc2lnbmF0dXJlLCBoYXNoVHlwZSB9ID0gU2NyaXB0U2lnbmF0dXJlLmRlY29kZShidWYpO1xuICAgICAgY29uc3QgciA9IHNpZ25hdHVyZS5zdWJhcnJheSgwLCAzMik7XG4gICAgICBjb25zdCBzID0gc2lnbmF0dXJlLnN1YmFycmF5KDMyKTtcblxuICAgICAgaWYgKHIubGVuZ3RoICE9PSAzMiB8fCBzLmxlbmd0aCAhPT0gMzIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHNjYWxhciBsZW5ndGhgKTtcbiAgICAgIH1cblxuICAgICAgbm9kZXMucHVzaChcbiAgICAgICAgdGhpcy5ub2RlKCdpc0Nhbm9uaWNhbCcsIHNjcmlwdC5pc0Nhbm9uaWNhbFNjcmlwdFNpZ25hdHVyZShidWYpKSxcbiAgICAgICAgdGhpcy5ub2RlKCdoYXNoVHlwZScsIGhhc2hUeXBlKSxcbiAgICAgICAgdGhpcy5ub2RlKCdyJywgciksXG4gICAgICAgIHRoaXMubm9kZSgncycsIHMpLFxuICAgICAgICB0aGlzLm5vZGUoJ2hpZ2hTJywgaXNIaWdoUyhzKSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGVzO1xuICB9XG5cbiAgcGFyc2VTaWduYXR1cmVzV2l0aFNpZ25lcnMoXG4gICAgcGFyc2VkOiB7XG4gICAgICBzY3JpcHRUeXBlOlxuICAgICAgICB8IHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5TY3JpcHRUeXBlMk9mM1xuICAgICAgICB8IHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5TY3JpcHRUeXBlUDJzaFAycGtcbiAgICAgICAgfCB1dHhvbGliLmJpdGdvLlBhcnNlZFNjcmlwdFR5cGUyT2YzO1xuICAgICAgc2lnbmF0dXJlczogKEJ1ZmZlciB8IDApW107XG4gICAgfSxcbiAgICBzaWduZWRCeUxhYmVsczogc3RyaW5nW10gfCB1bmRlZmluZWQsXG4gICAgc2lnbmVySW5kZXg6IG51bWJlcltdIHwgdW5kZWZpbmVkXG4gICk6IFBhcnNlck5vZGVbXSB7XG4gICAgY29uc3Qgbm9kZXMgPSBzaWduZWRCeUxhYmVscyA/IFt0aGlzLm5vZGUoJ3NpZ25lZCBieScsIGBbJHtzaWduZWRCeUxhYmVscy5qb2luKCcsICcpfV1gKV0gOiBbXTtcbiAgICBpZiAodGhpcy5wYXJhbXMucGFyc2VTaWduYXR1cmVEYXRhLmVjZHNhIHx8IHRoaXMucGFyYW1zLnBhcnNlU2lnbmF0dXJlRGF0YS5zY2hub3JyKSB7XG4gICAgICBub2Rlcy5wdXNoKFxuICAgICAgICAuLi5wYXJzZWQuc2lnbmF0dXJlcy5tYXAoKHM6IEJ1ZmZlciB8IDAsIGk6IG51bWJlcikgPT5cbiAgICAgICAgICB0aGlzLm5vZGUoXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgdGhpcy5wYXJzZVNpZ25hdHVyZUJ1ZmZlcihwYXJzZWQuc2NyaXB0VHlwZSwgcywgc2lnbmVySW5kZXggPyBzaWduZXJJbmRleFtpXSA6IHVuZGVmaW5lZClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBub2RlcztcbiAgfVxuXG4gIHBhcnNlU2lnbmF0dXJlcyhwYXJzZWQ6IFBhcnNlZFNpZ25hdHVyZVNjcmlwdCk6IFBhcnNlck5vZGUge1xuICAgIGNvbnN0IG5vZGVzOiBQYXJzZXJOb2RlW10gPSBbXTtcbiAgICBpZiAoXG4gICAgICAnc2lnbmF0dXJlcycgaW4gcGFyc2VkICYmXG4gICAgICAncHVibGljS2V5cycgaW4gcGFyc2VkICYmXG4gICAgICAnc2NyaXB0VHlwZScgaW4gcGFyc2VkICYmXG4gICAgICBwYXJzZWQuc2lnbmF0dXJlcyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBwYXJzZWQuc2NyaXB0VHlwZSAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy50eCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uICYmIHRoaXMuY2hhaW5JbmZvLnByZXZPdXRwdXRzKSB7XG4gICAgICAgIGNvbnN0IHNpZ25lZEJ5ID0gdXR4b2xpYi5iaXRnby5nZXRTaWduYXR1cmVzV2l0aFB1YmxpY0tleXMoXG4gICAgICAgICAgdGhpcy50eCxcbiAgICAgICAgICB0aGlzLmlucHV0SW5kZXgsXG4gICAgICAgICAgdGhpcy5jaGFpbkluZm8ucHJldk91dHB1dHMsXG4gICAgICAgICAgcGFyc2VkLnB1YmxpY0tleXNcbiAgICAgICAgKTtcbiAgICAgICAgbm9kZXMucHVzaChcbiAgICAgICAgICAuLi50aGlzLnBhcnNlU2lnbmF0dXJlc1dpdGhTaWduZXJzKFxuICAgICAgICAgICAgcGFyc2VkLFxuICAgICAgICAgICAgc2lnbmVkQnkuZmxhdE1hcCgodiwgaSkgPT4gKHYgPyBbaS50b1N0cmluZygpXSA6IFtdKSksXG4gICAgICAgICAgICBwYXJzZWQuc2lnbmF0dXJlcy5tYXAoKGs6IEJ1ZmZlciB8IDApID0+IChrID09PSAwID8gLTEgOiBzaWduZWRCeS5pbmRleE9mKGspKSlcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50eCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnQpIHtcbiAgICAgICAgbGV0IHNpZ25lZEJ5TGFiZWxzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHBhcnNlZC5wdWJsaWNLZXlzICYmIEFycmF5LmlzQXJyYXkocGFyc2VkLnB1YmxpY0tleXMpKSB7XG4gICAgICAgICAgY29uc3QgcHNidCA9IHRoaXMudHg7XG4gICAgICAgICAgc2lnbmVkQnlMYWJlbHMgPSBwYXJzZWQucHVibGljS2V5cy5mbGF0TWFwKChrOiBCdWZmZXIsIGkpID0+XG4gICAgICAgICAgICBCdWZmZXIuaXNCdWZmZXIoaykgJiYgcHNidC52YWxpZGF0ZVNpZ25hdHVyZXNPZklucHV0Q29tbW9uKHRoaXMuaW5wdXRJbmRleCwgaykgPyBbaS50b1N0cmluZygpXSA6IFtdXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPOiB0aGUgY3VycmVudCBVdHhvUHNidCBBUEkgZG9lcyBub3QgYWxsb3cgdXMgdG8gZGV0ZXJtaW5lIHdoaWNoIHNpZ25lciBjcmVhdGVkIHdoaWNoIHNpZ25hdHVyZVxuICAgICAgICBjb25zdCBzaWduZXJJbmRleCA9IHVuZGVmaW5lZDtcbiAgICAgICAgbm9kZXMucHVzaCguLi50aGlzLnBhcnNlU2lnbmF0dXJlc1dpdGhTaWduZXJzKHBhcnNlZCwgc2lnbmVkQnlMYWJlbHMsIHNpZ25lckluZGV4KSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5ub2RlKFxuICAgICAgICAnc2lnbmF0dXJlcycsXG4gICAgICAgIHBhcnNlZC5zaWduYXR1cmVzXG4gICAgICAgICAgLm1hcCgoczogQnVmZmVyIHwgMCkgPT5cbiAgICAgICAgICAgIHV0eG9saWIuYml0Z28uaXNQbGFjZWhvbGRlclNpZ25hdHVyZShzKSA/ICdbXScgOiBCdWZmZXIuaXNCdWZmZXIocykgPyBgWyR7cy5sZW5ndGh9Ynl0ZV1gIDogYFske3N9XWBcbiAgICAgICAgICApXG4gICAgICAgICAgLmpvaW4oJyAnKSxcbiAgICAgICAgbm9kZXNcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICgnc2lnbmF0dXJlcycgaW4gcGFyc2VkKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2RlKFxuICAgICAgICAnc2lnbmF0dXJlcycsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgKHBhcnNlZC5zaWduYXR1cmVzID8/IFtdKS5tYXAoKHM6IEJ1ZmZlciB8IDAsIGk6IG51bWJlcikgPT4gdGhpcy5ub2RlKGksIHMpKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZSgnc2lnbmF0dXJlcycsIHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgcGFyc2VTaWdTY3JpcHRXaXRoVHlwZShwYXJzZWQ6IFBhcnNlZFNpZ25hdHVyZVNjcmlwdCk6IFBhcnNlck5vZGUge1xuICAgIGlmIChcbiAgICAgIHBhcnNlZC5zY3JpcHRUeXBlICYmXG4gICAgICAodXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLmlzU2NyaXB0VHlwZTJPZjMocGFyc2VkLnNjcmlwdFR5cGUpIHx8XG4gICAgICAgIHBhcnNlZC5zY3JpcHRUeXBlID09PSAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCcgfHxcbiAgICAgICAgcGFyc2VkLnNjcmlwdFR5cGUgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJylcbiAgICApIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGUoJ3NpZ1NjcmlwdCcsIHBhcnNlZC5zY3JpcHRUeXBlLCBbdGhpcy5wYXJzZVB1YmtleXMocGFyc2VkKSwgdGhpcy5wYXJzZVNpZ25hdHVyZXMocGFyc2VkKV0pO1xuICAgIH1cblxuICAgIGlmIChwYXJzZWQuc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMndzaEhvbGxvdycgfHwgcGFyc2VkLnNjcmlwdFR5cGUgPT09ICdwMnNoUDJ3cGtoSG9sbG93Jykge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZSgnc2lnU2NyaXB0JywgcGFyc2VkLnNjcmlwdFR5cGUsIFt0aGlzLm5vZGUoJ2luZm8nLCBnZXRIb2xsb3dTcGVuZE1lc3NhZ2UoKSldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5ub2RlKCdzaWdTY3JpcHQnLCBwYXJzZWQuc2NyaXB0VHlwZSA/PyAndW5rbm93bicpO1xuICB9XG5cbiAgcGFyc2VTaWdTY3JpcHQoKTogUGFyc2VyTm9kZSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlU2lnU2NyaXB0V2l0aFR5cGUocGFyc2VTaWduYXR1cmVTY3JpcHQodGhpcy50eCwgdGhpcy5pbnB1dEluZGV4LCB0aGlzLnR4Lm5ldHdvcmspKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVQYXJzZUVycm9yKGUpO1xuICAgIH1cbiAgfVxuXG4gIHBhcnNlUHJldk91dChwcmV2T3V0cHV0OiB1dHhvbGliLlR4T3V0cHV0PGJpZ2ludD4gfCB1dHhvbGliLmJpdGdvLlBzYnRJbnB1dCk6IFBhcnNlck5vZGVbXSB7XG4gICAgbGV0IHNjcmlwdDogQnVmZmVyO1xuICAgIGxldCB2YWx1ZTogYmlnaW50O1xuICAgIGlmICgnc2NyaXB0JyBpbiBwcmV2T3V0cHV0ICYmIHByZXZPdXRwdXQuc2NyaXB0KSB7XG4gICAgICAoeyBzY3JpcHQsIHZhbHVlIH0gPSBwcmV2T3V0cHV0KTtcbiAgICB9IGVsc2UgaWYgKCd3aXRuZXNzVXR4bycgaW4gcHJldk91dHB1dCB8fCAnbm9uV2l0bmVzc1V0eG8nIGluIHByZXZPdXRwdXQpIHtcbiAgICAgIGlmICghKHRoaXMudHggaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc3RhdGUnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFByZXZPdXQocHJldk91dHB1dCwgdGhpcy50eC50eElucHV0c1t0aGlzLmlucHV0SW5kZXhdLCB0aGlzLnR4Lm5ldHdvcmspO1xuICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIFt0aGlzLm5vZGUoJ3NjcmlwdCcsICd1bmtub3duJyksIHRoaXMubm9kZSgndmFsdWUnLCAndW5rbm93bicpXTtcbiAgICAgIH1cbiAgICAgICh7IHNjcmlwdCwgdmFsdWUgfSA9IHJlc3VsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwcmV2T3V0cHV0Jyk7XG4gICAgfVxuXG4gICAgbGV0IGFkZHJlc3M7XG4gICAgdHJ5IHtcbiAgICAgIGFkZHJlc3MgPSB1dHhvbGliLmFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdChzY3JpcHQsIHRoaXMudHgubmV0d29yayk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYWRkcmVzcyA9ICcoZXJyb3IpJztcbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMubm9kZSgndmFsdWUnLCBOdW1iZXIodmFsdWUpIC8gMWU4KSxcbiAgICAgIHRoaXMubm9kZSgncHViU2NyaXB0Jywgc2NyaXB0LCBhZGRyZXNzID8gW3RoaXMubm9kZSgnYWRkcmVzcycsIGFkZHJlc3MpXSA6IHVuZGVmaW5lZCksXG4gICAgXTtcbiAgfVxuXG4gIHBhcnNlUHNidElucHV0KGlucHV0OiB1dHhvbGliLmJpdGdvLlBzYnRJbnB1dCk6IFBhcnNlck5vZGVbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHtcbiAgICAgIG11c2lnMlBhcnRpY2lwYW50czogdXR4b2xpYi5iaXRnby5tdXNpZzIucGFyc2VQc2J0TXVzaWcyUGFydGljaXBhbnRzKGlucHV0KSxcbiAgICAgIG11c2lnMk5vbmNlczogdXR4b2xpYi5iaXRnby5tdXNpZzIucGFyc2VQc2J0TXVzaWcyTm9uY2VzKGlucHV0KSxcbiAgICAgIG11c2lnMlBhcnRpYWxTaWduYXR1cmVzOiB1dHhvbGliLmJpdGdvLm11c2lnMi5wYXJzZVBzYnRNdXNpZzJQYXJ0aWFsU2lncyhpbnB1dCksXG4gICAgfSkuZmxhdE1hcCgoW2tleSwgdmFsdWVdKSA9PiAodmFsdWUgPyBbcGFyc2VVbmtub3duKHRoaXMsIGtleSwgdmFsdWUpXSA6IFtdKSk7XG4gIH1cblxuICBwYXJzZUlucHV0KCk6IFBhcnNlck5vZGUge1xuICAgIGNvbnN0IHBzYnRJbnB1dCA9IHRoaXMudHggaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0ID8gdGhpcy50eC5kYXRhLmlucHV0c1t0aGlzLmlucHV0SW5kZXhdIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHsgdHhpZDogcHJldlR4aWQsIHZvdXQsIHNlcXVlbmNlLCBzY3JpcHQsIHdpdG5lc3MgfSA9IGdldFBhcnNlclR4SW5wdXRQcm9wZXJ0aWVzKHRoaXMuaW5wdXQsIHBzYnRJbnB1dCk7XG4gICAgY29uc3QgcHJldk91dHB1dCA9IHRoaXMuY2hhaW5JbmZvLnByZXZPdXRwdXRzPy5bdGhpcy5pbnB1dEluZGV4XTtcbiAgICByZXR1cm4gdGhpcy5ub2RlKHRoaXMuaW5wdXRJbmRleCwgZ2V0T3V0cHV0SWQodGhpcy5pbnB1dCksIFtcbiAgICAgIHRoaXMubm9kZSgnc2VxdWVuY2UnLCBzZXF1ZW5jZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdG9CdWZmZXJVSW50MzJCRShzZXF1ZW5jZSkpLFxuICAgICAgdGhpcy5wYXJzZUlucHV0U2NyaXB0KHNjcmlwdCksXG4gICAgICB0aGlzLnBhcnNlV2l0bmVzcyh3aXRuZXNzKSxcbiAgICAgIHRoaXMucGFyc2VTaWdTY3JpcHQoKSxcbiAgICAgIC4uLihwc2J0SW5wdXQgPyB0aGlzLnBhcnNlUHJldk91dChwc2J0SW5wdXQpIDogW10pLFxuICAgICAgLi4uKHByZXZPdXRwdXRcbiAgICAgICAgPyBuZXcgT3V0cHV0UGFyc2VyKHRoaXMudHgubmV0d29yaywgcHJldlR4aWQsIHZvdXQsIHByZXZPdXRwdXQsIHRoaXMuY2hhaW5JbmZvLCB0aGlzLnBhcmFtcykucGFyc2VTcGVuZCh7XG4gICAgICAgICAgICBjb25mbGljdDogdHJ1ZSxcbiAgICAgICAgICB9KVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLihwc2J0SW5wdXQgPyB0aGlzLnBhcnNlUHNidElucHV0KHBzYnRJbnB1dCkgOiBbXSksXG4gICAgXSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Parser, ParserNode } from './Parser';
|
|
3
|
+
import * as utxolib from '@bitgo/utxo-lib';
|
|
4
|
+
export declare class ScriptParser extends Parser {
|
|
5
|
+
network?: utxolib.Network;
|
|
6
|
+
constructor({ network }?: {
|
|
7
|
+
network?: utxolib.Network;
|
|
8
|
+
});
|
|
9
|
+
static toASM(script: Buffer, { insertNewlines }?: {
|
|
10
|
+
insertNewlines?: boolean | undefined;
|
|
11
|
+
}): string | undefined;
|
|
12
|
+
static classify(script: Buffer | undefined, witness: Buffer[] | undefined): {
|
|
13
|
+
input: string | undefined;
|
|
14
|
+
output: string | undefined;
|
|
15
|
+
witness: string | undefined;
|
|
16
|
+
};
|
|
17
|
+
parsePayment(payment: utxolib.Payment): ParserNode;
|
|
18
|
+
parseBufferAsPayment(script: Buffer): ParserNode[];
|
|
19
|
+
parse(script: Buffer): ParserNode;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=ScriptParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScriptParser.d.ts","sourceRoot":"","sources":["../../src/ScriptParser.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAqB3C,qBAAa,YAAa,SAAQ,MAAM;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC;gBACd,EAAE,OAAO,EAAE,GAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAA;KAAO;IAK3D,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,cAAqB,EAAE;;KAAK,GAAG,MAAM,GAAG,SAAS;IAahF,MAAM,CAAC,QAAQ,CACb,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,GAC5B;QACD,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;KAC7B;IAQD,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,UAAU;IAMlD,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE;IAUlD,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU;CAclC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ScriptParser = void 0;
|
|
4
|
+
const Parser_1 = require("./Parser");
|
|
5
|
+
const utxolib = require("@bitgo/utxo-lib");
|
|
6
|
+
const parseUnknown_1 = require("./parseUnknown");
|
|
7
|
+
const paymentTypes = ['p2sh', 'p2pkh', 'p2wpkh', 'p2wsh', 'p2ms'];
|
|
8
|
+
function parsePaymentWithType(script, type, network) {
|
|
9
|
+
switch (type) {
|
|
10
|
+
case 'p2sh':
|
|
11
|
+
return utxolib.payments.p2sh({ redeem: { output: script }, network });
|
|
12
|
+
case 'p2pkh':
|
|
13
|
+
return utxolib.payments.p2pkh({ output: script, network });
|
|
14
|
+
case 'p2wpkh':
|
|
15
|
+
return utxolib.payments.p2wpkh({ output: script, network });
|
|
16
|
+
case 'p2wsh':
|
|
17
|
+
return utxolib.payments.p2wsh({ output: script, network });
|
|
18
|
+
case 'p2ms':
|
|
19
|
+
return utxolib.payments.p2ms({ output: script, network });
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
class ScriptParser extends Parser_1.Parser {
|
|
23
|
+
constructor({ network } = {}) {
|
|
24
|
+
super();
|
|
25
|
+
this.network = network;
|
|
26
|
+
}
|
|
27
|
+
static toASM(script, { insertNewlines = true } = {}) {
|
|
28
|
+
let parsed;
|
|
29
|
+
try {
|
|
30
|
+
parsed = utxolib.script.toASM(script);
|
|
31
|
+
}
|
|
32
|
+
catch (e) {
|
|
33
|
+
return 'error';
|
|
34
|
+
}
|
|
35
|
+
if (parsed) {
|
|
36
|
+
return insertNewlines ? ['', ...parsed.split(' ')].join('\n') : parsed;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
static classify(script, witness) {
|
|
40
|
+
return {
|
|
41
|
+
input: script ? utxolib.classify.input(script, /* allowIncomplete */ true) : undefined,
|
|
42
|
+
output: script ? utxolib.classify.output(script) : undefined,
|
|
43
|
+
witness: witness ? utxolib.classify.witness(witness) : undefined,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
parsePayment(payment) {
|
|
47
|
+
return parseUnknown_1.parseUnknown(this, `payment: ${payment.name}`, payment, {
|
|
48
|
+
omit: ['network', 'name'],
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
parseBufferAsPayment(script) {
|
|
52
|
+
return paymentTypes.flatMap((type) => {
|
|
53
|
+
try {
|
|
54
|
+
return [this.parsePayment(parsePaymentWithType(script, type, this.network))];
|
|
55
|
+
}
|
|
56
|
+
catch (e) {
|
|
57
|
+
return [];
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
parse(script) {
|
|
62
|
+
const classification = ScriptParser.classify(script, undefined);
|
|
63
|
+
const decompiled = utxolib.script.decompile(script);
|
|
64
|
+
return this.node('script', `length ${script.length} bytes`, [
|
|
65
|
+
this.node('classification', undefined, [
|
|
66
|
+
this.node('input', classification.input),
|
|
67
|
+
this.node('output', classification.output),
|
|
68
|
+
this.node('witness', classification.witness),
|
|
69
|
+
]),
|
|
70
|
+
this.node('asm', ScriptParser.toASM(script)),
|
|
71
|
+
this.node('decompiled', undefined, decompiled ? decompiled.map((v, i) => this.node(i, v)) : undefined),
|
|
72
|
+
...this.parseBufferAsPayment(script),
|
|
73
|
+
]);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
exports.ScriptParser = ScriptParser;
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NyaXB0UGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1NjcmlwdFBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxQ0FBOEM7QUFDOUMsMkNBQTJDO0FBQzNDLGlEQUE4QztBQUU5QyxNQUFNLFlBQVksR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQVUsQ0FBQztBQUczRSxTQUFTLG9CQUFvQixDQUFDLE1BQWMsRUFBRSxJQUFpQixFQUFFLE9BQXlCO0lBQ3hGLFFBQVEsSUFBSSxFQUFFO1FBQ1osS0FBSyxNQUFNO1lBQ1QsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLEtBQUssT0FBTztZQUNWLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDN0QsS0FBSyxRQUFRO1lBQ1gsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM5RCxLQUFLLE9BQU87WUFDVixPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzdELEtBQUssTUFBTTtZQUNULE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7S0FDN0Q7QUFDSCxDQUFDO0FBRUQsTUFBYSxZQUFhLFNBQVEsZUFBTTtJQUV0QyxZQUFZLEVBQUUsT0FBTyxLQUFv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SUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUN0RyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUM7U0FDckMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBakVELG9DQWlFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBhcnNlciwgUGFyc2VyTm9kZSB9IGZyb20gJy4vUGFyc2VyJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IHBhcnNlVW5rbm93biB9IGZyb20gJy4vcGFyc2VVbmtub3duJztcblxuY29uc3QgcGF5bWVudFR5cGVzID0gWydwMnNoJywgJ3AycGtoJywgJ3Ayd3BraCcsICdwMndzaCcsICdwMm1zJ10gYXMgY29uc3Q7XG50eXBlIFBheW1lbnRUeXBlID0gKHR5cGVvZiBwYXltZW50VHlwZXMpW251bWJlcl07XG5cbmZ1bmN0aW9uIHBhcnNlUGF5bWVudFdpdGhUeXBlKHNjcmlwdDogQnVmZmVyLCB0eXBlOiBQYXltZW50VHlwZSwgbmV0d29yaz86IHV0eG9saWIuTmV0d29yayk6IHV0eG9saWIuUGF5bWVudCB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3Ayc2gnOlxuICAgICAgcmV0dXJuIHV0eG9saWIucGF5bWVudHMucDJzaCh7IHJlZGVlbTogeyBvdXRwdXQ6IHNjcmlwdCB9LCBuZXR3b3JrIH0pO1xuICAgIGNhc2UgJ3AycGtoJzpcbiAgICAgIHJldHVybiB1dHhvbGliLnBheW1lbnRzLnAycGtoKHsgb3V0cHV0OiBzY3JpcHQsIG5ldHdvcmsgfSk7XG4gICAgY2FzZSAncDJ3cGtoJzpcbiAgICAgIHJldHVybiB1dHhvbGliLnBheW1lbnRzLnAyd3BraCh7IG91dHB1dDogc2NyaXB0LCBuZXR3b3JrIH0pO1xuICAgIGNhc2UgJ3Ayd3NoJzpcbiAgICAgIHJldHVybiB1dHhvbGliLnBheW1lbnRzLnAyd3NoKHsgb3V0cHV0OiBzY3JpcHQsIG5ldHdvcmsgfSk7XG4gICAgY2FzZSAncDJtcyc6XG4gICAgICByZXR1cm4gdXR4b2xpYi5wYXltZW50cy5wMm1zKHsgb3V0cHV0OiBzY3JpcHQsIG5ldHdvcmsgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNjcmlwdFBhcnNlciBleHRlbmRzIFBhcnNlciB7XG4gIG5ldHdvcms/OiB1dHhvbGliLk5ldHdvcms7XG4gIGNvbnN0cnVjdG9yKHsgbmV0d29yayB9OiB7IG5ldHdvcms/OiB1dHhvbGliLk5ldHdvcmsgfSA9IHt9KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm5ldHdvcmsgPSBuZXR3b3JrO1xuICB9XG5cbiAgc3RhdGljIHRvQVNNKHNjcmlwdDogQnVmZmVyLCB7IGluc2VydE5ld2xpbmVzID0gdHJ1ZSB9ID0ge30pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGxldCBwYXJzZWQ7XG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlZCA9IHV0eG9saWIuc2NyaXB0LnRvQVNNKHNjcmlwdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICdlcnJvcic7XG4gICAgfVxuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcmV0dXJuIGluc2VydE5ld2xpbmVzID8gWycnLCAuLi5wYXJzZWQuc3BsaXQoJyAnKV0uam9pbignXFxuJykgOiBwYXJzZWQ7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNsYXNzaWZ5KFxuICAgIHNjcmlwdDogQnVmZmVyIHwgdW5kZWZpbmVkLFxuICAgIHdpdG5lc3M6IEJ1ZmZlcltdIHwgdW5kZWZpbmVkXG4gICk6IHtcbiAgICBpbnB1dDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIG91dHB1dDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHdpdG5lc3M6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlucHV0OiBzY3JpcHQgPyB1dHhvbGliLmNsYXNzaWZ5LmlucHV0KHNjcmlwdCwgLyogYWxsb3dJbmNvbXBsZXRlICovIHRydWUpIDogdW5kZWZpbmVkLFxuICAgICAgb3V0cHV0OiBzY3JpcHQgPyB1dHhvbGliLmNsYXNzaWZ5Lm91dHB1dChzY3JpcHQpIDogdW5kZWZpbmVkLFxuICAgICAgd2l0bmVzczogd2l0bmVzcyA/IHV0eG9saWIuY2xhc3NpZnkud2l0bmVzcyh3aXRuZXNzKSA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgcGFyc2VQYXltZW50KHBheW1lbnQ6IHV0eG9saWIuUGF5bWVudCk6IFBhcnNlck5vZGUge1xuICAgIHJldHVybiBwYXJzZVVua25vd24odGhpcywgYHBheW1lbnQ6ICR7cGF5bWVudC5uYW1lfWAsIHBheW1lbnQsIHtcbiAgICAgIG9taXQ6IFsnbmV0d29yaycsICduYW1lJ10sXG4gICAgfSk7XG4gIH1cblxuICBwYXJzZUJ1ZmZlckFzUGF5bWVudChzY3JpcHQ6IEJ1ZmZlcik6IFBhcnNlck5vZGVbXSB7XG4gICAgcmV0dXJuIHBheW1lbnRUeXBlcy5mbGF0TWFwKCh0eXBlKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gW3RoaXMucGFyc2VQYXltZW50KHBhcnNlUGF5bWVudFdpdGhUeXBlKHNjcmlwdCwgdHlwZSwgdGhpcy5uZXR3b3JrKSldO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwYXJzZShzY3JpcHQ6IEJ1ZmZlcik6IFBhcnNlck5vZGUge1xuICAgIGNvbnN0IGNsYXNzaWZpY2F0aW9uID0gU2NyaXB0UGFyc2VyLmNsYXNzaWZ5KHNjcmlwdCwgdW5kZWZpbmVkKTtcbiAgICBjb25zdCBkZWNvbXBpbGVkID0gdXR4b2xpYi5zY3JpcHQuZGVjb21waWxlKHNjcmlwdCk7XG4gICAgcmV0dXJuIHRoaXMubm9kZSgnc2NyaXB0JywgYGxlbmd0aCAke3NjcmlwdC5sZW5ndGh9IGJ5dGVzYCwgW1xuICAgICAgdGhpcy5ub2RlKCdjbGFzc2lmaWNhdGlvbicsIHVuZGVmaW5lZCwgW1xuICAgICAgICB0aGlzLm5vZGUoJ2lucHV0JywgY2xhc3NpZmljYXRpb24uaW5wdXQpLFxuICAgICAgICB0aGlzLm5vZGUoJ291dHB1dCcsIGNsYXNzaWZpY2F0aW9uLm91dHB1dCksXG4gICAgICAgIHRoaXMubm9kZSgnd2l0bmVzcycsIGNsYXNzaWZpY2F0aW9uLndpdG5lc3MpLFxuICAgICAgXSksXG4gICAgICB0aGlzLm5vZGUoJ2FzbScsIFNjcmlwdFBhcnNlci50b0FTTShzY3JpcHQpKSxcbiAgICAgIHRoaXMubm9kZSgnZGVjb21waWxlZCcsIHVuZGVmaW5lZCwgZGVjb21waWxlZCA/IGRlY29tcGlsZWQubWFwKCh2LCBpKSA9PiB0aGlzLm5vZGUoaSwgdikpIDogdW5kZWZpbmVkKSxcbiAgICAgIC4uLnRoaXMucGFyc2VCdWZmZXJBc1BheW1lbnQoc2NyaXB0KSxcbiAgICBdKTtcbiAgfVxufVxuIl19
|
package/dist/src/commands.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as yargs from 'yargs';
|
|
2
2
|
import { TxParser, TxParserArgs } from './TxParser';
|
|
3
3
|
import { AddressParser } from './AddressParser';
|
|
4
|
+
import { ScriptParser } from './ScriptParser';
|
|
4
5
|
declare type OutputFormat = 'tree' | 'json';
|
|
5
6
|
declare type ArgsParseTransaction = {
|
|
6
7
|
network: string;
|
|
@@ -8,7 +9,7 @@ declare type ArgsParseTransaction = {
|
|
|
8
9
|
clipboard: boolean;
|
|
9
10
|
path?: string;
|
|
10
11
|
txid?: string;
|
|
11
|
-
|
|
12
|
+
data?: string;
|
|
12
13
|
all: boolean;
|
|
13
14
|
cache: boolean;
|
|
14
15
|
format: OutputFormat;
|
|
@@ -28,8 +29,25 @@ declare type ArgsParseAddress = {
|
|
|
28
29
|
convert: boolean;
|
|
29
30
|
address: string;
|
|
30
31
|
};
|
|
32
|
+
declare type ArgsParseScript = {
|
|
33
|
+
network?: string;
|
|
34
|
+
format: OutputFormat;
|
|
35
|
+
all: boolean;
|
|
36
|
+
script: string;
|
|
37
|
+
};
|
|
38
|
+
export declare type ArgsGenerateAddress = {
|
|
39
|
+
network?: string;
|
|
40
|
+
userKey: string;
|
|
41
|
+
backupKey: string;
|
|
42
|
+
bitgoKey: string;
|
|
43
|
+
chain?: number[];
|
|
44
|
+
format: string;
|
|
45
|
+
index?: string[];
|
|
46
|
+
limit?: number;
|
|
47
|
+
};
|
|
31
48
|
export declare function getTxParser(argv: yargs.Arguments<ArgsParseTransaction>): TxParser;
|
|
32
49
|
export declare function getAddressParser(argv: ArgsParseAddress): AddressParser;
|
|
50
|
+
export declare function getScriptParser(argv: ArgsParseScript): ScriptParser;
|
|
33
51
|
export declare const cmdParseTx: {
|
|
34
52
|
readonly command: "parseTx [path]";
|
|
35
53
|
readonly aliases: readonly ["parse", "tx"];
|
|
@@ -44,5 +62,17 @@ export declare const cmdParseAddress: {
|
|
|
44
62
|
readonly builder: (b: yargs.Argv<unknown>) => yargs.Argv<ArgsParseAddress>;
|
|
45
63
|
readonly handler: (argv: yargs.Arguments<ArgsParseAddress>) => void;
|
|
46
64
|
};
|
|
65
|
+
export declare const cmdParseScript: {
|
|
66
|
+
command: string;
|
|
67
|
+
describe: string;
|
|
68
|
+
builder(b: yargs.Argv<unknown>): yargs.Argv<ArgsParseScript>;
|
|
69
|
+
handler(argv: yargs.Arguments<ArgsParseScript>): void;
|
|
70
|
+
};
|
|
71
|
+
export declare const cmdGenerateAddress: {
|
|
72
|
+
command: string;
|
|
73
|
+
describe: string;
|
|
74
|
+
builder(b: yargs.Argv<unknown>): yargs.Argv<ArgsGenerateAddress>;
|
|
75
|
+
handler(argv: yargs.Arguments<ArgsGenerateAddress>): void;
|
|
76
|
+
};
|
|
47
77
|
export {};
|
|
48
78
|
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/commands.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAiB/B,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/commands.ts"],"names":[],"mappings":"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"}
|