@bitgo-beta/utxo-bin 2.8.3-beta.41 → 2.8.3-beta.410
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 +10 -2
- package/dist/src/AddressParser.d.ts +1 -0
- package/dist/src/AddressParser.d.ts.map +1 -1
- package/dist/src/AddressParser.js +7 -1
- package/dist/src/InputParser.d.ts +44 -0
- package/dist/src/InputParser.d.ts.map +1 -0
- package/dist/src/InputParser.js +239 -0
- package/dist/src/OutputParser.d.ts +25 -0
- package/dist/src/OutputParser.d.ts.map +1 -0
- package/dist/src/OutputParser.js +65 -0
- package/dist/src/Parser.d.ts +7 -1
- package/dist/src/Parser.d.ts.map +1 -1
- package/dist/src/Parser.js +29 -2
- package/dist/src/ParserTx.d.ts +28 -0
- package/dist/src/ParserTx.d.ts.map +1 -0
- package/dist/src/ParserTx.js +94 -0
- 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/TxParser.d.ts +10 -6
- package/dist/src/TxParser.d.ts.map +1 -1
- package/dist/src/TxParser.js +25 -25
- package/dist/src/bip32.d.ts +5 -0
- package/dist/src/bip32.d.ts.map +1 -0
- package/dist/src/bip32.js +23 -0
- package/dist/src/commands.d.ts +53 -2
- package/dist/src/commands.d.ts.map +1 -1
- package/dist/src/commands.js +164 -27
- package/dist/src/fetch.d.ts +9 -4
- package/dist/src/fetch.d.ts.map +1 -1
- package/dist/src/fetch.js +37 -5
- package/dist/src/format.d.ts +1 -1
- package/dist/src/format.d.ts.map +1 -1
- package/dist/src/format.js +17 -7
- package/dist/src/generateAddress.d.ts +35 -0
- package/dist/src/generateAddress.d.ts.map +1 -0
- package/dist/src/generateAddress.js +108 -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 +5 -0
- package/dist/src/parseUnknown.d.ts.map +1 -0
- package/dist/src/parseUnknown.js +50 -0
- package/dist/test/bip32.d.ts +2 -0
- package/dist/test/bip32.d.ts.map +1 -0
- package/dist/test/bip32.js +21 -0
- package/dist/test/bip32.util.d.ts +6 -0
- package/dist/test/bip32.util.d.ts.map +1 -0
- package/dist/test/bip32.util.js +14 -0
- package/dist/test/fixtures.d.ts +24 -0
- package/dist/test/fixtures.d.ts.map +1 -0
- package/dist/test/fixtures.js +95 -0
- 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.d.ts +6 -0
- package/dist/test/parseAddress.d.ts.map +1 -0
- package/dist/test/parseAddress.js +80 -0
- 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.d.ts +2 -0
- package/dist/test/parseTransaction.d.ts.map +1 -0
- package/dist/test/parseTransaction.js +66 -0
- 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 -4689
- package/package.json +8 -7
- package/dist/src/InputOutputParser.d.ts +0 -35
- package/dist/src/InputOutputParser.d.ts.map +0 -1
- package/dist/src/InputOutputParser.js +0 -196
package/README.md
CHANGED
|
@@ -3,31 +3,62 @@
|
|
|
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
|
|
28
58
|
```
|
|
29
59
|
|
|
30
60
|
#### From txid
|
|
61
|
+
|
|
31
62
|
```bash
|
|
32
63
|
utxo-bin -n bitcoin parseTx --txid b0b7e5c2fbbbeb42478f91e1c14b300624a9419631e70dd1564084fb28a55155
|
|
33
64
|
```
|
|
@@ -40,6 +71,15 @@ utxo-bin -n bitcoin parseTx \
|
|
|
40
71
|
--fetchInputs
|
|
41
72
|
```
|
|
42
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.
|
|
43
83
|
|
|
44
84
|
## parseAddress
|
|
45
85
|
|
|
@@ -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,13 @@
|
|
|
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
|
+
.command(commands_1.cmdParseXpub)
|
|
12
|
+
.demandCommand()
|
|
13
|
+
.help()
|
|
14
|
+
.parse();
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9iaW4vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsK0JBQStCO0FBQy9CLDhDQUFnSDtBQUVoSCxLQUFLO0tBQ0YsT0FBTyxDQUFDLHFCQUFVLENBQUM7S0FDbkIsT0FBTyxDQUFDLDBCQUFlLENBQUM7S0FDeEIsT0FBTyxDQUFDLHlCQUFjLENBQUM7S0FDdkIsT0FBTyxDQUFDLDZCQUFrQixDQUFDO0tBQzNCLE9BQU8sQ0FBQyx1QkFBWSxDQUFDO0tBQ3JCLGFBQWEsRUFBRTtLQUNmLElBQUksRUFBRTtLQUNOLEtBQUssRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuaW1wb3J0ICogYXMgeWFyZ3MgZnJvbSAneWFyZ3MnO1xuaW1wb3J0IHsgY21kR2VuZXJhdGVBZGRyZXNzLCBjbWRQYXJzZUFkZHJlc3MsIGNtZFBhcnNlU2NyaXB0LCBjbWRQYXJzZVR4LCBjbWRQYXJzZVhwdWIgfSBmcm9tICcuLi9zcmMvY29tbWFuZHMnO1xuXG55YXJnc1xuICAuY29tbWFuZChjbWRQYXJzZVR4KVxuICAuY29tbWFuZChjbWRQYXJzZUFkZHJlc3MpXG4gIC5jb21tYW5kKGNtZFBhcnNlU2NyaXB0KVxuICAuY29tbWFuZChjbWRHZW5lcmF0ZUFkZHJlc3MpXG4gIC5jb21tYW5kKGNtZFBhcnNlWHB1YilcbiAgLmRlbWFuZENvbW1hbmQoKVxuICAuaGVscCgpXG4gIC5wYXJzZSgpO1xuIl19
|
|
@@ -16,6 +16,7 @@ export declare class AddressParser extends Parser {
|
|
|
16
16
|
tryParseOpReturn(script: Buffer): ParserNode[];
|
|
17
17
|
parseOutputScript(buffer: Buffer): ParserNode[];
|
|
18
18
|
parseBase58(address: string): ParserNode[];
|
|
19
|
+
parseBase58Check(address: string): ParserNode[];
|
|
19
20
|
parseWithBechLib(bechlib: bech32.BechLib, address: string): ParserNode[];
|
|
20
21
|
parseBech32(address: string): ParserNode[];
|
|
21
22
|
parseBech32m(address: string): ParserNode[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddressParser.d.ts","sourceRoot":"","sources":["../../src/AddressParser.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"AddressParser.d.ts","sourceRoot":"","sources":["../../src/AddressParser.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAW9C,qBAAa,aAAc,SAAQ,MAAM;IAE9B,MAAM,EAAE;QACb,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC;QAC1B,GAAG,EAAE,OAAO,CAAC;QACb,OAAO,EAAE,OAAO,CAAC;KAClB;gBAJM,MAAM,EAAE;QACb,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC;QAC1B,GAAG,EAAE,OAAO,CAAC;QACb,OAAO,EAAE,OAAO,CAAC;KAClB;IAKH,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE;IAwB9C,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE;IAU/C,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE;IAK1C,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE;IAS/C,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE;IASxE,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE;IAI1C,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE;IAI3C,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE;IAS5C,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,UAAU;IAsBzC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE;IAmBzC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU;CAuCjC"}
|
|
@@ -4,6 +4,7 @@ exports.AddressParser = void 0;
|
|
|
4
4
|
const utxolib = require("@bitgo-beta/utxo-lib");
|
|
5
5
|
const bech32 = require("bech32");
|
|
6
6
|
const Parser_1 = require("./Parser");
|
|
7
|
+
const bs58 = require('bs58');
|
|
7
8
|
const bs58check = require('bs58check');
|
|
8
9
|
const cashaddress = require('cashaddress');
|
|
9
10
|
function isPrintable(s) {
|
|
@@ -50,6 +51,10 @@ class AddressParser extends Parser_1.Parser {
|
|
|
50
51
|
];
|
|
51
52
|
}
|
|
52
53
|
parseBase58(address) {
|
|
54
|
+
const payload = bs58.decode(address);
|
|
55
|
+
return [this.node('payload', payload)];
|
|
56
|
+
}
|
|
57
|
+
parseBase58Check(address) {
|
|
53
58
|
const payload = bs58check.decode(address);
|
|
54
59
|
return [
|
|
55
60
|
this.node('payload', payload),
|
|
@@ -103,6 +108,7 @@ class AddressParser extends Parser_1.Parser {
|
|
|
103
108
|
};
|
|
104
109
|
return [
|
|
105
110
|
...decodeWith('base58', this.parseBase58.bind(this)),
|
|
111
|
+
...decodeWith('base58Check', this.parseBase58Check.bind(this)),
|
|
106
112
|
...decodeWith('bech32', this.parseBech32.bind(this)),
|
|
107
113
|
...decodeWith('bech32m', this.parseBech32m.bind(this)),
|
|
108
114
|
...decodeWith('cashaddr', this.parseCashaddr.bind(this)),
|
|
@@ -138,4 +144,4 @@ class AddressParser extends Parser_1.Parser {
|
|
|
138
144
|
}
|
|
139
145
|
}
|
|
140
146
|
exports.AddressParser = AddressParser;
|
|
141
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWRkcmVzc1BhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9BZGRyZXNzUGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGdEQUFnRDtBQUNoRCxpQ0FBaUM7QUFFakMscUNBQThDO0FBRTlDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUN2QyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7QUFFM0MsU0FBUyxXQUFXLENBQUMsQ0FBUztJQUM1Qix1Q0FBdUM7SUFDdkMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsTUFBYSxhQUFjLFNBQVEsZUFBTTtJQUN2QyxZQUNTLE1BSU47UUFFRCxLQUFLLEVBQUUsQ0FBQztRQU5ELFdBQU0sR0FBTixNQUFNLENBSVo7SUFHSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBYztRQUM3QixJQUFJLElBQTBCLENBQUM7UUFDL0IsSUFBSTtZQUNGLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDekQ7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLFNBQVM7U0FDVjtRQUNELElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPLEVBQUUsQ0FBQztTQUNYO1FBQ0QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pCLElBQUksSUFBSSxDQUFDO1lBQ1QsSUFBSTtnQkFDRixJQUFJLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUM3QjtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLFNBQVM7YUFDVjtZQUNELE9BQU8sSUFBSSxDQUFD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TyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRW5HLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQzFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzthQUM3QztTQUNGO1FBRUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUMsQ0FBQztDQUNGO0FBL0pELHNDQStKQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0ICogYXMgYmVjaDMyIGZyb20gJ2JlY2gzMic7XG5cbmltcG9ydCB7IFBhcnNlciwgUGFyc2VyTm9kZSB9IGZyb20gJy4vUGFyc2VyJztcblxuY29uc3QgYnM1OGNoZWNrID0gcmVxdWlyZSgnYnM1OGNoZWNrJyk7XG5jb25zdCBjYXNoYWRkcmVzcyA9IHJlcXVpcmUoJ2Nhc2hhZGRyZXNzJyk7XG5cbmZ1bmN0aW9uIGlzUHJpbnRhYmxlKHM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNjY0NDc0OTRcbiAgcmV0dXJuICFzLm1hdGNoKC9bXFxwe0NjfVxccHtDbn1cXHB7Q3N9XSsvZ3UpO1xufVxuXG5leHBvcnQgY2xhc3MgQWRkcmVzc1BhcnNlciBleHRlbmRzIFBhcnNlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBwYXJhbXM6IHtcbiAgICAgIG5ldHdvcms/OiB1dHhvbGliLk5ldHdvcms7XG4gICAgICBhbGw6IGJvb2xlYW47XG4gICAgICBjb252ZXJ0OiBib29sZWFuO1xuICAgIH1cbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHRyeVBhcnNlT3BSZXR1cm4oc2NyaXB0OiBCdWZmZXIpOiBQYXJzZXJOb2RlW10ge1xuICAgIGxldCBkYXRhOiBCdWZmZXJbXSB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgKHsgZGF0YSB9ID0gdXR4b2xpYi5wYXltZW50cy5lbWJlZCh7IG91dHB1dDogc2NyaXB0IH0pKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiBkYXRhLm1hcCgoYnVmLCBpKSA9PiB7XG4gICAgICBsZXQgdXRmODtcbiAgICAgIHRyeSB7XG4gICAgICAgIHV0ZjggPSBidWYudG9TdHJpbmcoJ3V0ZjgnKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gaWdub3JlXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5ub2RlKGBPUF9SRVRVUk4gJHtpfWAsIGAke2J1Zi5sZW5ndGh9IGJ5dGVzYCwgW1xuICAgICAgICB0aGlzLm5vZGUoJ2hleCcsIGJ1ZiksXG4gICAgICAgIC4uLih1dGY4ICYmIGlzUHJpbnRhYmxlKHV0ZjgpID8gW3RoaXMubm9kZSgndXRmOCcsIHV0ZjgpXSA6IFtdKSxcbiAgICAgIF0pO1xuICAgIH0pO1xuICB9XG5cbiAgcGFyc2VPdXRwdXRTY3JpcHQoYnVmZmVyOiBCdWZmZXIpOiBQYXJzZXJOb2RlW10ge1xuICAgIHJldHVybiBbXG4gICAgICB0aGlzLm5vZGUoJ3NjcmlwdFB1YktleScsIGBbJHtidWZmZXIubGVuZ3RofWJ5dGVdYCwgW1xuICAgICAgICB0aGlzLm5vZGUoJ3R5cGUnLCB1dHhvbGliLmNsYXNzaWZ5Lm91dHB1dChidWZmZXIpKSxcbiAgICAgICAgdGhpcy5ub2RlKCdoZXgnLCBidWZmZXIudG9TdHJpbmcoJ2hleCcpKSxcbiAgICAgICAgdGhpcy5ub2RlKCdhc20nLCB1dHhvbGliLnNjcmlwdC50b0FTTShidWZmZXIpLCB0aGlzLnRyeVBhcnNlT3BSZXR1cm4oYnVmZmVyKSksXG4gICAgICBdKSxcbiAgICBdO1xuICB9XG5cbiAgcGFyc2VCYXNlNTgoYWRkcmVzczogc3RyaW5nKTogUGFyc2VyTm9kZVtdIHtcbiAgICBjb25zdCBwYXlsb2FkID0gYnM1OGNoZWNrLmRlY29kZShhZGRyZXNzKTtcbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy5ub2RlKCdwYXlsb2FkJywgcGF5bG9hZCksXG4gICAgICB0aGlzLm5vZGUoJ3ZlcnNpb24nLCBwYXlsb2FkLnJlYWRVSW50OCgwKS50b1N0cmluZygnMTYnKSksXG4gICAgICB0aGlzLm5vZGUoJ2hhc2gnLCBwYXlsb2FkLnNsaWNlKDEpKSxcbiAgICBdO1xuICB9XG5cbiAgcGFyc2VXaXRoQmVjaExpYihiZWNobGliOiBiZWNoMzIuQmVjaExpYiwgYWRkcmVzczogc3RyaW5nKTogUGFyc2VyTm9kZVtdIHtcbiAgICBjb25zdCBkZWNvZGVkID0gYmVjaGxpYi5kZWNvZGUoYWRkcmVzcyk7XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMubm9kZSgncHJlZml4JywgZGVjb2RlZC5wcmVmaXgpLFxuICAgICAgdGhpcy5ub2RlKCd3b3JkcycsIEJ1ZmZlci5mcm9tKGRlY29kZWQud29yZHMpKSxcbiAgICAgIHRoaXMubm9kZSgnYnl0ZXMnLCBCdWZmZXIuZnJvbShiZWNobGliLmZyb21Xb3JkcyhkZWNvZGVkLndvcmRzKSkpLFxuICAgIF07XG4gIH1cblxuICBwYXJzZUJlY2gzMihhZGRyZXNzOiBzdHJpbmcpOiBQYXJzZXJOb2RlW10ge1xuICAgIHJldHVybiB0aGlzLnBhcnNlV2l0aEJlY2hMaWIoYmVjaDMyLmJlY2gzMiwgYWRkcmVzcyk7XG4gIH1cblxuICBwYXJzZUJlY2gzMm0oYWRkcmVzczogc3RyaW5nKTogUGFyc2VyTm9kZVtdIHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZVdpdGhCZWNoTGliKGJlY2gzMi5iZWNoMzJtLCBhZGRyZXNzKTtcbiAgfVxuXG4gIHBhcnNlQ2FzaGFkZHIoYWRkcmVzczogc3RyaW5nKTogUGFyc2VyTm9kZVtdIHtcbiAgICBjb25zdCBwYXlsb2FkID0gY2FzaGFkZHJlc3MuZGVjb2RlKGFkZHJlc3MpO1xuICAgIHJldHVybiBbXG4gICAgICB0aGlzLm5vZGUoJ3ByZWZpeCcsIHBheWxvYWQucHJlZml4KSxcbiAgICAgIHRoaXMubm9kZSgndmVyc2lvbicsIHBheWxvYWQudmVyc2lvbiksXG4gICAgICB0aGlzLm5vZGUoJ2hhc2gnLCBwYXlsb2FkLmhhc2gpLFxuICAgIF07XG4gIH1cblxuICBjb252ZXJ0KG91dHB1dFNjcmlwdDogQnVmZmVyKTogUGFyc2VyTm9kZSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZShcbiAgICAgICdjb252ZXJ0ZWQnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdXR4b2xpYi5nZXROZXR3b3JrTGlzdCgpLmZsYXRNYXAoKG5ldHdvcmspID0+XG4gICAgICAgIHV0eG9saWIuYWRkcmVzc0Zvcm1hdC5hZGRyZXNzRm9ybWF0c1xuICAgICAgICAgIC5maWx0ZXIoKGYpID0+IHV0eG9saWIuYWRkcmVzc0Zvcm1hdC5pc1N1cHBvcnRlZEFkZHJlc3NGb3JtYXQoZiwgbmV0d29yaykpXG4gICAgICAgICAgLm1hcCgoYWRkcmVzc0Zvcm1hdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IHV0eG9saWIuZ2V0TmV0d29ya05hbWUobmV0d29yaykgYXMgc3RyaW5nO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9kZShcbiAgICAgICAgICAgICAgICBgJHtuYW1lfSAke2FkZHJlc3NGb3JtYXR9YCxcbiAgICAgICAgICAgICAgICB1dHhvbGliLmFkZHJlc3NGb3JtYXQuZnJvbU91dHB1dFNjcmlwdFdpdGhGb3JtYXQob3V0cHV0U2NyaXB0LCBhZGRyZXNzRm9ybWF0LCBuZXR3b3JrKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ub2RlKGAke25hbWV9ICR7YWRkcmVzc0Zvcm1hdH1gLCAndW5kZWZpbmVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcGFyc2VUb0J5dGVzKGlucHV0OiBzdHJpbmcpOiBQYXJzZXJOb2RlW10ge1xuICAgIHR5cGUgRGVjb2RlciA9IChhZGRyZXNzOiBzdHJpbmcpID0+IFBhcnNlck5vZGVbXTtcbiAgICBjb25zdCBkZWNvZGVXaXRoID0gKG5hbWU6IHN0cmluZywgZGVjb2RlcjogRGVjb2Rlcik6IFBhcnNlck5vZGVbXSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gW3RoaXMubm9kZShuYW1lLCB1bmRlZmluZWQsIGRlY29kZXIoaW5wdXQpKV07XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmFtcy5hbGwgPyBbdGhpcy5ub2RlKG5hbWUsIHVuZGVmaW5lZCwgW3RoaXMubm9kZSgnZGVjb2RlRXJyb3InLCBTdHJpbmcoZSkpXSldIDogW107XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBbXG4gICAgICAuLi5kZWNvZGVXaXRoKCdiYXNlNTgnLCB0aGlzLnBhcnNlQmFzZTU4LmJpbmQodGhpcykpLFxuICAgICAgLi4uZGVjb2RlV2l0aCgnYmVjaDMyJywgdGhpcy5wYXJzZUJlY2gzMi5iaW5kKHRoaXMpKSxcbiAgICAgIC4uLmRlY29kZVdpdGgoJ2JlY2gzMm0nLCB0aGlzLnBhcnNlQmVjaDMybS5iaW5kKHRoaXMpKSxcbiAgICAgIC4uLmRlY29kZVdpdGgoJ2Nhc2hhZGRyJywgdGhpcy5wYXJzZUNhc2hhZGRyLmJpbmQodGhpcykpLFxuICAgIF07XG4gIH1cblxuICBwYXJzZShpbnB1dDogc3RyaW5nKTogUGFyc2VyTm9kZSB7XG4gICAgY29uc3QgbmV0d29ya3MgPSB0aGlzLnBhcmFtcy5uZXR3b3JrID8gW3RoaXMucGFyYW1zLm5ldHdvcmtdIDogdXR4b2xpYi5nZXROZXR3b3JrTGlzdCgpO1xuXG4gICAgdHlwZSBNYXRjaCA9IHtcbiAgICAgIG5ldHdvcms6IHV0eG9saWIuTmV0d29yaztcbiAgICAgIGFkZHJlc3M6IHN0cmluZztcbiAgICAgIGFkZHJlc3NGb3JtYXQ6IHV0eG9saWIuYWRkcmVzc0Zvcm1hdC5BZGRyZXNzRm9ybWF0O1xuICAgICAgYnVmZmVyOiBCdWZmZXI7XG4gICAgfTtcbiAgICBjb25zdCBtYXRjaGVzOiBNYXRjaFtdID0gbmV0d29ya3MuZmxhdE1hcCgobmV0d29yaykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgW2FkZHJlc3NGb3JtYXQsIGJ1ZmZlcl0gPSB1dHhvbGliLmFkZHJlc3NGb3JtYXQudG9PdXRwdXRTY3JpcHRBbmRGb3JtYXQoaW5wdXQsIG5ldHdvcmspO1xuICAgICAgICBjb25zdCBhZGRyZXNzID0gdXR4b2xpYi5hZGRyZXNzRm9ybWF0LmZyb21PdXRwdXRTY3JpcHRXaXRoRm9ybWF0KGJ1ZmZlciwgYWRkcmVzc0Zvcm1hdCwgbmV0d29yayk7XG4gICAgICAgIHJldHVybiBbeyBuZXR3b3JrLCBhZGRyZXNzLCBhZGRyZXNzRm9ybWF0LCBidWZmZXIgfV07XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBmaXJzdE1hdGNoID0gbWF0Y2hlc1swXTtcbiAgICBjb25zdCBub2RlczogUGFyc2VyTm9kZVtdID0gW107XG5cbiAgICBub2Rlcy5wdXNoKC4uLnRoaXMucGFyc2VUb0J5dGVzKGlucHV0KSk7XG5cbiAgICBpZiAoZmlyc3RNYXRjaCkge1xuICAgICAgaWYgKGlucHV0ICE9PSBmaXJzdE1hdGNoLmFkZHJlc3MpIHtcbiAgICAgICAgbm9kZXMucHVzaCh0aGlzLm5vZGUoJ25vcm1hbGl6ZWQnLCBmaXJzdE1hdGNoLmFkZHJlc3MsIHRoaXMucGFyc2VUb0J5dGVzKGZpcnN0TWF0Y2guYWRkcmVzcykpKTtcbiAgICAgIH1cblxuICAgICAgbm9kZXMucHVzaCh0aGlzLm5vZGUoJ2Zvcm1hdCcsIGZpcnN0TWF0Y2guYWRkcmVzc0Zvcm1hdCkpO1xuICAgICAgbm9kZXMucHVzaCh0aGlzLm5vZGUoJ291dHB1dFNjcmlwdCcsIGZpcnN0TWF0Y2guYnVmZmVyLCB0aGlzLnBhcnNlT3V0cHV0U2NyaXB0KGZpcnN0TWF0Y2guYnVmZmVyKSkpO1xuICAgICAgbm9kZXMucHVzaCh0aGlzLm5vZGUoJ25ldHdvcmsnLCBtYXRjaGVzLm1hcCgobSkgPT4gdXR4b2xpYi5nZXROZXR3b3JrTmFtZShtLm5ldHdvcmspKS5qb2luKCcsICcpKSk7XG5cbiAgICAgIGlmICh0aGlzLnBhcmFtcy5hbGwgfHwgdGhpcy5wYXJhbXMuY29udmVydCkge1xuICAgICAgICBub2Rlcy5wdXNoKHRoaXMuY29udmVydChmaXJzdE1hdGNoLmJ1ZmZlcikpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm5vZGUoJ2FkZHJlc3MnLCBpbnB1dCwgbm9kZXMpO1xuICB9XG59XG4iXX0=
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWRkcmVzc1BhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9BZGRyZXNzUGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGdEQUFnRDtBQUNoRCxpQ0FBaUM7QUFFakMscUNBQThDO0FBRTlDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM3QixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDdkMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBRTNDLFNBQVMsV0FBVyxDQUFDLENBQVM7SUFDNUIsdUNBQXVDO0lBQ3ZDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELE1BQWEsYUFBYyxTQUFRLGVBQU07SUFDdkMsWUFDUyxNQUlOO1FBRUQsS0FBSyxFQUFFLENBQUM7UUFORCxXQUFNLEdBQU4sTUFBTSxDQUlaO0lBR0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLE1BQWM7UUFDN0IsSUFBSSxJQUEwQixDQUFDO1FBQy9CLElBQUk7WUFDRixDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3pEO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixTQUFTO1NBQ1Y7UUFDRCxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6QixJQUFJLElBQUksQ0FBQztZQUNULElBQUk7Z0JBQ0YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDN0I7WUFBQyxPQUFP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QyxDQUFDLENBQUM7WUFDMUQsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRW5HLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQzFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzthQUM3QztTQUNGO1FBRUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUMsQ0FBQztDQUNGO0FBcktELHNDQXFLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0ICogYXMgYmVjaDMyIGZyb20gJ2JlY2gzMic7XG5cbmltcG9ydCB7IFBhcnNlciwgUGFyc2VyTm9kZSB9IGZyb20gJy4vUGFyc2VyJztcblxuY29uc3QgYnM1OCA9IHJlcXVpcmUoJ2JzNTgnKTtcbmNvbnN0IGJzNThjaGVjayA9IHJlcXVpcmUoJ2JzNThjaGVjaycpO1xuY29uc3QgY2FzaGFkZHJlc3MgPSByZXF1aXJlKCdjYXNoYWRkcmVzcycpO1xuXG5mdW5jdGlvbiBpc1ByaW50YWJsZShzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzY2NDQ3NDk0XG4gIHJldHVybiAhcy5tYXRjaCgvW1xccHtDY31cXHB7Q259XFxwe0NzfV0rL2d1KTtcbn1cblxuZXhwb3J0IGNsYXNzIEFkZHJlc3NQYXJzZXIgZXh0ZW5kcyBQYXJzZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcGFyYW1zOiB7XG4gICAgICBuZXR3b3JrPzogdXR4b2xpYi5OZXR3b3JrO1xuICAgICAgYWxsOiBib29sZWFuO1xuICAgICAgY29udmVydDogYm9vbGVhbjtcbiAgICB9XG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICB0cnlQYXJzZU9wUmV0dXJuKHNjcmlwdDogQnVmZmVyKTogUGFyc2VyTm9kZVtdIHtcbiAgICBsZXQgZGF0YTogQnVmZmVyW10gfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgICh7IGRhdGEgfSA9IHV0eG9saWIucGF5bWVudHMuZW1iZWQoeyBvdXRwdXQ6IHNjcmlwdCB9KSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICAgIGlmICghZGF0YSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YS5tYXAoKGJ1ZiwgaSkgPT4ge1xuICAgICAgbGV0IHV0Zjg7XG4gICAgICB0cnkge1xuICAgICAgICB1dGY4ID0gYnVmLnRvU3RyaW5nKCd1dGY4Jyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGlnbm9yZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMubm9kZShgT1BfUkVUVVJOICR7aX1gLCBgJHtidWYubGVuZ3RofSBieXRlc2AsIFtcbiAgICAgICAgdGhpcy5ub2RlKCdoZXgnLCBidWYpLFxuICAgICAgICAuLi4odXRmOCAmJiBpc1ByaW50YWJsZSh1dGY4KSA/IFt0aGlzLm5vZGUoJ3V0ZjgnLCB1dGY4KV0gOiBbXSksXG4gICAgICBdKTtcbiAgICB9KTtcbiAgfVxuXG4gIHBhcnNlT3V0cHV0U2NyaXB0KGJ1ZmZlcjogQnVmZmVyKTogUGFyc2VyTm9kZVtdIHtcbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy5ub2RlKCdzY3JpcHRQdWJLZXknLCBgWyR7YnVmZmVyLmxlbmd0aH1ieXRlXWAsIFtcbiAgICAgICAgdGhpcy5ub2RlKCd0eXBlJywgdXR4b2xpYi5jbGFzc2lmeS5vdXRwdXQoYnVmZmVyKSksXG4gICAgICAgIHRoaXMubm9kZSgnaGV4JywgYnVmZmVyLnRvU3RyaW5nKCdoZXgnKSksXG4gICAgICAgIHRoaXMubm9kZSgnYXNtJywgdXR4b2xpYi5zY3JpcHQudG9BU00oYnVmZmVyKSwgdGhpcy50cnlQYXJzZU9wUmV0dXJuKGJ1ZmZlcikpLFxuICAgICAgXSksXG4gICAgXTtcbiAgfVxuXG4gIHBhcnNlQmFzZTU4KGFkZHJlc3M6IHN0cmluZyk6IFBhcnNlck5vZGVbXSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IGJzNTguZGVjb2RlKGFkZHJlc3MpO1xuICAgIHJldHVybiBbdGhpcy5ub2RlKCdwYXlsb2FkJywgcGF5bG9hZCldO1xuICB9XG5cbiAgcGFyc2VCYXNlNThDaGVjayhhZGRyZXNzOiBzdHJpbmcpOiBQYXJzZXJOb2RlW10ge1xuICAgIGNvbnN0IHBheWxvYWQgPSBiczU4Y2hlY2suZGVjb2RlKGFkZHJlc3MpO1xuICAgIHJldHVybiBbXG4gICAgICB0aGlzLm5vZGUoJ3BheWxvYWQnLCBwYXlsb2FkKSxcbiAgICAgIHRoaXMubm9kZSgndmVyc2lvbicsIHBheWxvYWQucmVhZFVJbnQ4KDApLnRvU3RyaW5nKCcxNicpKSxcbiAgICAgIHRoaXMubm9kZSgnaGFzaCcsIHBheWxvYWQuc2xpY2UoMSkpLFxuICAgIF07XG4gIH1cblxuICBwYXJzZVdpdGhCZWNoTGliKGJlY2hsaWI6IGJlY2gzMi5CZWNoTGliLCBhZGRyZXNzOiBzdHJpbmcpOiBQYXJzZXJOb2RlW10ge1xuICAgIGNvbnN0IGRlY29kZWQgPSBiZWNobGliLmRlY29kZShhZGRyZXNzKTtcbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy5ub2RlKCdwcmVmaXgnLCBkZWNvZGVkLnByZWZpeCksXG4gICAgICB0aGlzLm5vZGUoJ3dvcmRzJywgQnVmZmVyLmZyb20oZGVjb2RlZC53b3JkcykpLFxuICAgICAgdGhpcy5ub2RlKCdieXRlcycsIEJ1ZmZlci5mcm9tKGJlY2hsaWIuZnJvbVdvcmRzKGRlY29kZWQud29yZHMpKSksXG4gICAgXTtcbiAgfVxuXG4gIHBhcnNlQmVjaDMyKGFkZHJlc3M6IHN0cmluZyk6IFBhcnNlck5vZGVbXSB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VXaXRoQmVjaExpYihiZWNoMzIuYmVjaDMyLCBhZGRyZXNzKTtcbiAgfVxuXG4gIHBhcnNlQmVjaDMybShhZGRyZXNzOiBzdHJpbmcpOiBQYXJzZXJOb2RlW10ge1xuICAgIHJldHVybiB0aGlzLnBhcnNlV2l0aEJlY2hMaWIoYmVjaDMyLmJlY2gzMm0sIGFkZHJlc3MpO1xuICB9XG5cbiAgcGFyc2VDYXNoYWRkcihhZGRyZXNzOiBzdHJpbmcpOiBQYXJzZXJOb2RlW10ge1xuICAgIGNvbnN0IHBheWxvYWQgPSBjYXNoYWRkcmVzcy5kZWNvZGUoYWRkcmVzcyk7XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMubm9kZSgncHJlZml4JywgcGF5bG9hZC5wcmVmaXgpLFxuICAgICAgdGhpcy5ub2RlKCd2ZXJzaW9uJywgcGF5bG9hZC52ZXJzaW9uKSxcbiAgICAgIHRoaXMubm9kZSgnaGFzaCcsIHBheWxvYWQuaGFzaCksXG4gICAgXTtcbiAgfVxuXG4gIGNvbnZlcnQob3V0cHV0U2NyaXB0OiBCdWZmZXIpOiBQYXJzZXJOb2RlIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlKFxuICAgICAgJ2NvbnZlcnRlZCcsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1dHhvbGliLmdldE5ldHdvcmtMaXN0KCkuZmxhdE1hcCgobmV0d29yaykgPT5cbiAgICAgICAgdXR4b2xpYi5hZGRyZXNzRm9ybWF0LmFkZHJlc3NGb3JtYXRzXG4gICAgICAgICAgLmZpbHRlcigoZikgPT4gdXR4b2xpYi5hZGRyZXNzRm9ybWF0LmlzU3VwcG9ydGVkQWRkcmVzc0Zvcm1hdChmLCBuZXR3b3JrKSlcbiAgICAgICAgICAubWFwKChhZGRyZXNzRm9ybWF0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gdXR4b2xpYi5nZXROZXR3b3JrTmFtZShuZXR3b3JrKSBhcyBzdHJpbmc7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ub2RlKFxuICAgICAgICAgICAgICAgIGAke25hbWV9ICR7YWRkcmVzc0Zvcm1hdH1gLFxuICAgICAgICAgICAgICAgIHV0eG9saWIuYWRkcmVzc0Zvcm1hdC5mcm9tT3V0cHV0U2NyaXB0V2l0aEZvcm1hdChvdXRwdXRTY3JpcHQsIGFkZHJlc3NGb3JtYXQsIG5ldHdvcmspXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLm5vZGUoYCR7bmFtZX0gJHthZGRyZXNzRm9ybWF0fWAsICd1bmRlZmluZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwYXJzZVRvQnl0ZXMoaW5wdXQ6IHN0cmluZyk6IFBhcnNlck5vZGVbXSB7XG4gICAgdHlwZSBEZWNvZGVyID0gKGFkZHJlc3M6IHN0cmluZykgPT4gUGFyc2VyTm9kZVtdO1xuICAgIGNvbnN0IGRlY29kZVdpdGggPSAobmFtZTogc3RyaW5nLCBkZWNvZGVyOiBEZWNvZGVyKTogUGFyc2VyTm9kZVtdID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBbdGhpcy5ub2RlKG5hbWUsIHVuZGVmaW5lZCwgZGVjb2RlcihpbnB1dCkpXTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyYW1zLmFsbCA/IFt0aGlzLm5vZGUobmFtZSwgdW5kZWZpbmVkLCBbdGhpcy5ub2RlKCdkZWNvZGVFcnJvcicsIFN0cmluZyhlKSldKV0gOiBbXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLmRlY29kZVdpdGgoJ2Jhc2U1OCcsIHRoaXMucGFyc2VCYXNlNTguYmluZCh0aGlzKSksXG4gICAgICAuLi5kZWNvZGVXaXRoKCdiYXNlNThDaGVjaycsIHRoaXMucGFyc2VCYXNlNThDaGVjay5iaW5kKHRoaXMpKSxcbiAgICAgIC4uLmRlY29kZVdpdGgoJ2JlY2gzMicsIHRoaXMucGFyc2VCZWNoMzIuYmluZCh0aGlzKSksXG4gICAgICAuLi5kZWNvZGVXaXRoKCdiZWNoMzJtJywgdGhpcy5wYXJzZUJlY2gzMm0uYmluZCh0aGlzKSksXG4gICAgICAuLi5kZWNvZGVXaXRoKCdjYXNoYWRkcicsIHRoaXMucGFyc2VDYXNoYWRkci5iaW5kKHRoaXMpKSxcbiAgICBdO1xuICB9XG5cbiAgcGFyc2UoaW5wdXQ6IHN0cmluZyk6IFBhcnNlck5vZGUge1xuICAgIGNvbnN0IG5ldHdvcmtzID0gdGhpcy5wYXJhbXMubmV0d29yayA/IFt0aGlzLnBhcmFtcy5uZXR3b3JrXSA6IHV0eG9saWIuZ2V0TmV0d29ya0xpc3QoKTtcblxuICAgIHR5cGUgTWF0Y2ggPSB7XG4gICAgICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcms7XG4gICAgICBhZGRyZXNzOiBzdHJpbmc7XG4gICAgICBhZGRyZXNzRm9ybWF0OiB1dHhvbGliLmFkZHJlc3NGb3JtYXQuQWRkcmVzc0Zvcm1hdDtcbiAgICAgIGJ1ZmZlcjogQnVmZmVyO1xuICAgIH07XG4gICAgY29uc3QgbWF0Y2hlczogTWF0Y2hbXSA9IG5ldHdvcmtzLmZsYXRNYXAoKG5ldHdvcmspID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IFthZGRyZXNzRm9ybWF0LCBidWZmZXJdID0gdXR4b2xpYi5hZGRyZXNzRm9ybWF0LnRvT3V0cHV0U2NyaXB0QW5kRm9ybWF0KGlucHV0LCBuZXR3b3JrKTtcbiAgICAgICAgY29uc3QgYWRkcmVzcyA9IHV0eG9saWIuYWRkcmVzc0Zvcm1hdC5mcm9tT3V0cHV0U2NyaXB0V2l0aEZvcm1hdChidWZmZXIsIGFkZHJlc3NGb3JtYXQsIG5ldHdvcmspO1xuICAgICAgICByZXR1cm4gW3sgbmV0d29yaywgYWRkcmVzcywgYWRkcmVzc0Zvcm1hdCwgYnVmZmVyIH1dO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgZmlyc3RNYXRjaCA9IG1hdGNoZXNbMF07XG4gICAgY29uc3Qgbm9kZXM6IFBhcnNlck5vZGVbXSA9IFtdO1xuXG4gICAgbm9kZXMucHVzaCguLi50aGlzLnBhcnNlVG9CeXRlcyhpbnB1dCkpO1xuXG4gICAgaWYgKGZpcnN0TWF0Y2gpIHtcbiAgICAgIGlmIChpbnB1dCAhPT0gZmlyc3RNYXRjaC5hZGRyZXNzKSB7XG4gICAgICAgIG5vZGVzLnB1c2godGhpcy5ub2RlKCdub3JtYWxpemVkJywgZmlyc3RNYXRjaC5hZGRyZXNzLCB0aGlzLnBhcnNlVG9CeXRlcyhmaXJzdE1hdGNoLmFkZHJlc3MpKSk7XG4gICAgICB9XG5cbiAgICAgIG5vZGVzLnB1c2godGhpcy5ub2RlKCdmb3JtYXQnLCBmaXJzdE1hdGNoLmFkZHJlc3NGb3JtYXQpKTtcbiAgICAgIG5vZGVzLnB1c2godGhpcy5ub2RlKCdvdXRwdXRTY3JpcHQnLCBmaXJzdE1hdGNoLmJ1ZmZlciwgdGhpcy5wYXJzZU91dHB1dFNjcmlwdChmaXJzdE1hdGNoLmJ1ZmZlcikpKTtcbiAgICAgIG5vZGVzLnB1c2godGhpcy5ub2RlKCduZXR3b3JrJywgbWF0Y2hlcy5tYXAoKG0pID0+IHV0eG9saWIuZ2V0TmV0d29ya05hbWUobS5uZXR3b3JrKSkuam9pbignLCAnKSkpO1xuXG4gICAgICBpZiAodGhpcy5wYXJhbXMuYWxsIHx8IHRoaXMucGFyYW1zLmNvbnZlcnQpIHtcbiAgICAgICAgbm9kZXMucHVzaCh0aGlzLmNvbnZlcnQoZmlyc3RNYXRjaC5idWZmZXIpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5ub2RlKCdhZGRyZXNzJywgaW5wdXQsIG5vZGVzKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import * as utxolib from '@bitgo-beta/utxo-lib';
|
|
3
|
+
import { Parser, ParserNode } from './Parser';
|
|
4
|
+
import { ParserTx } from './ParserTx';
|
|
5
|
+
import { HollowSegwitSpend } from './hollowSegwitSpend';
|
|
6
|
+
import { ChainInfo } from './TxParser';
|
|
7
|
+
declare type ParsedSignatureScript = utxolib.bitgo.ParsedSignatureScriptP2ms | utxolib.bitgo.ParsedSignatureScriptP2shP2pk | utxolib.bitgo.ParsedSignatureScriptTaproot | utxolib.bitgo.ParsedPsbtP2ms | utxolib.bitgo.ParsedPsbtP2shP2pk | utxolib.bitgo.ParsedPsbtTaproot | HollowSegwitSpend;
|
|
8
|
+
export declare class InputParser extends Parser {
|
|
9
|
+
private txid;
|
|
10
|
+
private tx;
|
|
11
|
+
private inputIndex;
|
|
12
|
+
private chainInfo;
|
|
13
|
+
private params;
|
|
14
|
+
private input;
|
|
15
|
+
constructor(txid: string, tx: ParserTx, inputIndex: number, chainInfo: ChainInfo, params: {
|
|
16
|
+
parseOutputScript: boolean;
|
|
17
|
+
parseScriptAsm: boolean;
|
|
18
|
+
parseScriptData: boolean;
|
|
19
|
+
parseSignatureData: {
|
|
20
|
+
script: boolean;
|
|
21
|
+
ecdsa: boolean;
|
|
22
|
+
schnorr: boolean;
|
|
23
|
+
};
|
|
24
|
+
parseError?: 'throw' | 'continue';
|
|
25
|
+
});
|
|
26
|
+
parseScriptAsm(type: string, part: Buffer, i: number, n: number): string | undefined;
|
|
27
|
+
parseScriptParts(type: string, parts: Array<Buffer | number>): ParserNode[];
|
|
28
|
+
parseInputScript(buffer: Buffer | undefined): ParserNode;
|
|
29
|
+
parseWitness(script: Buffer[] | undefined): ParserNode;
|
|
30
|
+
parsePubkeys(parsed: ParsedSignatureScript): ParserNode;
|
|
31
|
+
parseSignatureBuffer(type: utxolib.bitgo.outputScripts.ScriptType2Of3 | utxolib.bitgo.ParsedScriptType2Of3 | utxolib.bitgo.outputScripts.ScriptTypeP2shP2pk, buf: Buffer | 0, signerIndex: number | undefined): ParserNode[];
|
|
32
|
+
parseSignaturesWithSigners(parsed: {
|
|
33
|
+
scriptType: utxolib.bitgo.outputScripts.ScriptType2Of3 | utxolib.bitgo.outputScripts.ScriptTypeP2shP2pk | utxolib.bitgo.ParsedScriptType2Of3;
|
|
34
|
+
signatures: (Buffer | 0)[];
|
|
35
|
+
}, signedByLabels: string[] | undefined, signerIndex: number[] | undefined): ParserNode[];
|
|
36
|
+
parseSignatures(parsed: ParsedSignatureScript): ParserNode;
|
|
37
|
+
parseSigScriptWithType(parsed: ParsedSignatureScript): ParserNode;
|
|
38
|
+
parseSigScript(): ParserNode;
|
|
39
|
+
parsePrevOut(prevOutput: utxolib.TxOutput<bigint> | utxolib.bitgo.PsbtInput): ParserNode[];
|
|
40
|
+
parsePsbtInput(input: utxolib.bitgo.PsbtInput): ParserNode[];
|
|
41
|
+
parseInput(): ParserNode;
|
|
42
|
+
}
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=InputParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputParser.d.ts","sourceRoot":"","sources":["../../src/InputParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InputParser = void 0;
|
|
4
|
+
const utxolib = require("@bitgo-beta/utxo-lib");
|
|
5
|
+
const Parser_1 = require("./Parser");
|
|
6
|
+
const ParserTx_1 = require("./ParserTx");
|
|
7
|
+
const hollowSegwitSpend_1 = require("./hollowSegwitSpend");
|
|
8
|
+
const bitcoinjs_lib_1 = require("bitcoinjs-lib");
|
|
9
|
+
const ecdsa_1 = require("./ecdsa");
|
|
10
|
+
const OutputParser_1 = require("./OutputParser");
|
|
11
|
+
const parseUnknown_1 = require("./parseUnknown");
|
|
12
|
+
const ScriptParser_1 = require("./ScriptParser");
|
|
13
|
+
function getOutputId(v) {
|
|
14
|
+
return utxolib.bitgo.formatOutputId(utxolib.bitgo.getOutputIdForInput(v));
|
|
15
|
+
}
|
|
16
|
+
function parseSignatureScript(tx, inputIndex, network) {
|
|
17
|
+
if (tx instanceof utxolib.bitgo.UtxoTransaction) {
|
|
18
|
+
return ((0, hollowSegwitSpend_1.parseHollowSegwitSpend)(tx.ins[inputIndex], network) || utxolib.bitgo.parseSignatureScript(tx.ins[inputIndex]));
|
|
19
|
+
}
|
|
20
|
+
return utxolib.bitgo.parsePsbtInput(tx.data.inputs[inputIndex]);
|
|
21
|
+
}
|
|
22
|
+
function toBufferUInt32BE(n) {
|
|
23
|
+
const buf = Buffer.alloc(4);
|
|
24
|
+
buf.writeUInt32LE(n, 0);
|
|
25
|
+
return buf;
|
|
26
|
+
}
|
|
27
|
+
class InputParser extends Parser_1.Parser {
|
|
28
|
+
constructor(txid, tx, inputIndex, chainInfo, params) {
|
|
29
|
+
super({ parseError: params.parseError });
|
|
30
|
+
this.txid = txid;
|
|
31
|
+
this.tx = tx;
|
|
32
|
+
this.inputIndex = inputIndex;
|
|
33
|
+
this.chainInfo = chainInfo;
|
|
34
|
+
this.params = params;
|
|
35
|
+
if (tx instanceof utxolib.bitgo.UtxoTransaction) {
|
|
36
|
+
this.input = tx.ins[inputIndex];
|
|
37
|
+
}
|
|
38
|
+
else if (tx instanceof utxolib.bitgo.UtxoPsbt) {
|
|
39
|
+
this.input = tx.txInputs[inputIndex];
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
throw new Error('unknown transaction type');
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
parseScriptAsm(type, part, i, n) {
|
|
46
|
+
if ((type === 'taproot' && i === n - 2) ||
|
|
47
|
+
((type === 'scripthash' || type === 'witnessscripthash') && i === n - 1)) {
|
|
48
|
+
return ScriptParser_1.ScriptParser.toASM(part);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
parseScriptParts(type, parts) {
|
|
52
|
+
return parts.map((v, i) => {
|
|
53
|
+
let asmNode;
|
|
54
|
+
if (this.params.parseScriptAsm && Buffer.isBuffer(v)) {
|
|
55
|
+
const parsed = this.parseScriptAsm(type, v, i, parts.length);
|
|
56
|
+
asmNode = parsed ? this.node('asm', parsed) : undefined;
|
|
57
|
+
}
|
|
58
|
+
return this.node(i, this.params.parseScriptData ? v : undefined, asmNode ? [asmNode] : undefined);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
parseInputScript(buffer) {
|
|
62
|
+
var _a;
|
|
63
|
+
let value;
|
|
64
|
+
let nodes;
|
|
65
|
+
if (buffer && buffer.length && this.params.parseSignatureData.script) {
|
|
66
|
+
const type = (_a = utxolib.classify.input(buffer, true)) !== null && _a !== void 0 ? _a : 'unknown';
|
|
67
|
+
const decompiled = utxolib.script.decompile(buffer);
|
|
68
|
+
if (decompiled) {
|
|
69
|
+
nodes = this.parseScriptParts(type, decompiled);
|
|
70
|
+
}
|
|
71
|
+
value = type;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
value = buffer;
|
|
75
|
+
}
|
|
76
|
+
return this.node('scriptSig', value, nodes);
|
|
77
|
+
}
|
|
78
|
+
parseWitness(script) {
|
|
79
|
+
var _a;
|
|
80
|
+
if (!script || script.length === 0) {
|
|
81
|
+
return this.node('witness', '[]');
|
|
82
|
+
}
|
|
83
|
+
const type = (_a = utxolib.classify.witness(script, true)) !== null && _a !== void 0 ? _a : 'unknown';
|
|
84
|
+
return this.node('witness', type, this.params.parseScriptData ? this.parseScriptParts(type, script) : undefined);
|
|
85
|
+
}
|
|
86
|
+
parsePubkeys(parsed) {
|
|
87
|
+
if ('publicKeys' in parsed) {
|
|
88
|
+
return this.node('pubkeys', parsed.publicKeys.length, parsed.publicKeys.map((k, i) => this.node(i, k)));
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
return this.node('pubkeys', '[]');
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
parseSignatureBuffer(type, buf, signerIndex) {
|
|
95
|
+
if (buf === 0) {
|
|
96
|
+
return [this.node('type', 'placeholder (0)')];
|
|
97
|
+
}
|
|
98
|
+
const nodes = [this.node('bytes', buf)];
|
|
99
|
+
if (signerIndex !== undefined) {
|
|
100
|
+
nodes.push(this.node('valid', 0 <= signerIndex));
|
|
101
|
+
if (0 <= signerIndex) {
|
|
102
|
+
nodes.push(this.node('signedBy', ['user', 'backup', 'bitgo'][signerIndex]));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (type === 'taprootScriptPathSpend' || type === 'taprootKeyPathSpend') {
|
|
106
|
+
// TODO
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
const { signature, hashType } = bitcoinjs_lib_1.ScriptSignature.decode(buf);
|
|
110
|
+
const r = signature.subarray(0, 32);
|
|
111
|
+
const s = signature.subarray(32);
|
|
112
|
+
if (r.length !== 32 || s.length !== 32) {
|
|
113
|
+
throw new Error(`invalid scalar length`);
|
|
114
|
+
}
|
|
115
|
+
nodes.push(this.node('isCanonical', bitcoinjs_lib_1.script.isCanonicalScriptSignature(buf)), this.node('hashType', hashType), this.node('r', r), this.node('s', s), this.node('highS', (0, ecdsa_1.isHighS)(s)));
|
|
116
|
+
}
|
|
117
|
+
return nodes;
|
|
118
|
+
}
|
|
119
|
+
parseSignaturesWithSigners(parsed, signedByLabels, signerIndex) {
|
|
120
|
+
const nodes = signedByLabels ? [this.node('signed by', `[${signedByLabels.join(', ')}]`)] : [];
|
|
121
|
+
if (this.params.parseSignatureData.ecdsa || this.params.parseSignatureData.schnorr) {
|
|
122
|
+
nodes.push(...parsed.signatures.map((s, i) => this.node(i, undefined, this.parseSignatureBuffer(parsed.scriptType, s, signerIndex ? signerIndex[i] : undefined))));
|
|
123
|
+
}
|
|
124
|
+
return nodes;
|
|
125
|
+
}
|
|
126
|
+
parseSignatures(parsed) {
|
|
127
|
+
var _a;
|
|
128
|
+
const nodes = [];
|
|
129
|
+
if ('signatures' in parsed &&
|
|
130
|
+
'publicKeys' in parsed &&
|
|
131
|
+
'scriptType' in parsed &&
|
|
132
|
+
parsed.signatures !== undefined &&
|
|
133
|
+
parsed.scriptType !== undefined) {
|
|
134
|
+
if (this.tx instanceof utxolib.bitgo.UtxoTransaction && this.chainInfo.prevOutputs) {
|
|
135
|
+
const signedBy = utxolib.bitgo.getSignaturesWithPublicKeys(this.tx, this.inputIndex, this.chainInfo.prevOutputs, parsed.publicKeys);
|
|
136
|
+
nodes.push(...this.parseSignaturesWithSigners(parsed, signedBy.flatMap((v, i) => (v ? [i.toString()] : [])), parsed.signatures.map((k) => (k === 0 ? -1 : signedBy.indexOf(k)))));
|
|
137
|
+
}
|
|
138
|
+
if (this.tx instanceof utxolib.bitgo.UtxoPsbt) {
|
|
139
|
+
let signedByLabels;
|
|
140
|
+
if (parsed.publicKeys && Array.isArray(parsed.publicKeys)) {
|
|
141
|
+
const psbt = this.tx;
|
|
142
|
+
signedByLabels = parsed.publicKeys.flatMap((k, i) => Buffer.isBuffer(k) && psbt.validateSignaturesOfInputCommon(this.inputIndex, k) ? [i.toString()] : []);
|
|
143
|
+
}
|
|
144
|
+
// TODO: the current UtxoPsbt API does not allow us to determine which signer created which signature
|
|
145
|
+
const signerIndex = undefined;
|
|
146
|
+
nodes.push(...this.parseSignaturesWithSigners(parsed, signedByLabels, signerIndex));
|
|
147
|
+
}
|
|
148
|
+
return this.node('signatures', parsed.signatures
|
|
149
|
+
.map((s) => utxolib.bitgo.isPlaceholderSignature(s) ? '[]' : Buffer.isBuffer(s) ? `[${s.length}byte]` : `[${s}]`)
|
|
150
|
+
.join(' '), nodes);
|
|
151
|
+
}
|
|
152
|
+
else if ('signatures' in parsed) {
|
|
153
|
+
return this.node('signatures', undefined, ((_a = parsed.signatures) !== null && _a !== void 0 ? _a : []).map((s, i) => this.node(i, s)));
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
return this.node('signatures', undefined);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
parseSigScriptWithType(parsed) {
|
|
160
|
+
var _a;
|
|
161
|
+
if (parsed.scriptType &&
|
|
162
|
+
(utxolib.bitgo.outputScripts.isScriptType2Of3(parsed.scriptType) ||
|
|
163
|
+
parsed.scriptType === 'taprootScriptPathSpend' ||
|
|
164
|
+
parsed.scriptType === 'taprootKeyPathSpend')) {
|
|
165
|
+
return this.node('sigScript', parsed.scriptType, [this.parsePubkeys(parsed), this.parseSignatures(parsed)]);
|
|
166
|
+
}
|
|
167
|
+
if (parsed.scriptType === 'p2shP2wshHollow' || parsed.scriptType === 'p2shP2wpkhHollow') {
|
|
168
|
+
return this.node('sigScript', parsed.scriptType, [this.node('info', (0, hollowSegwitSpend_1.getHollowSpendMessage)())]);
|
|
169
|
+
}
|
|
170
|
+
return this.node('sigScript', (_a = parsed.scriptType) !== null && _a !== void 0 ? _a : 'unknown');
|
|
171
|
+
}
|
|
172
|
+
parseSigScript() {
|
|
173
|
+
try {
|
|
174
|
+
return this.parseSigScriptWithType(parseSignatureScript(this.tx, this.inputIndex, this.tx.network));
|
|
175
|
+
}
|
|
176
|
+
catch (e) {
|
|
177
|
+
return this.handleParseError(e);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
parsePrevOut(prevOutput) {
|
|
181
|
+
let script;
|
|
182
|
+
let value;
|
|
183
|
+
if ('script' in prevOutput && prevOutput.script) {
|
|
184
|
+
({ script, value } = prevOutput);
|
|
185
|
+
}
|
|
186
|
+
else if ('witnessUtxo' in prevOutput || 'nonWitnessUtxo' in prevOutput) {
|
|
187
|
+
if (!(this.tx instanceof utxolib.bitgo.UtxoPsbt)) {
|
|
188
|
+
throw new Error('invalid state');
|
|
189
|
+
}
|
|
190
|
+
const result = (0, ParserTx_1.getPrevOut)(prevOutput, this.tx.txInputs[this.inputIndex], this.tx.network);
|
|
191
|
+
if (!result) {
|
|
192
|
+
return [this.node('script', 'unknown'), this.node('value', 'unknown')];
|
|
193
|
+
}
|
|
194
|
+
({ script, value } = result);
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
throw new Error('invalid prevOutput');
|
|
198
|
+
}
|
|
199
|
+
let address;
|
|
200
|
+
try {
|
|
201
|
+
address = utxolib.address.fromOutputScript(script, this.tx.network);
|
|
202
|
+
}
|
|
203
|
+
catch (e) {
|
|
204
|
+
address = '(error)';
|
|
205
|
+
}
|
|
206
|
+
return [
|
|
207
|
+
this.node('value', Number(value) / 1e8),
|
|
208
|
+
this.node('pubScript', script, address ? [this.node('address', address)] : undefined),
|
|
209
|
+
];
|
|
210
|
+
}
|
|
211
|
+
parsePsbtInput(input) {
|
|
212
|
+
return Object.entries({
|
|
213
|
+
musig2Participants: utxolib.bitgo.musig2.parsePsbtMusig2Participants(input),
|
|
214
|
+
musig2Nonces: utxolib.bitgo.musig2.parsePsbtMusig2Nonces(input),
|
|
215
|
+
musig2PartialSignatures: utxolib.bitgo.musig2.parsePsbtMusig2PartialSigs(input),
|
|
216
|
+
}).flatMap(([key, value]) => (value ? [(0, parseUnknown_1.parseUnknown)(this, key, value)] : []));
|
|
217
|
+
}
|
|
218
|
+
parseInput() {
|
|
219
|
+
var _a;
|
|
220
|
+
const psbtInput = this.tx instanceof utxolib.bitgo.UtxoPsbt ? this.tx.data.inputs[this.inputIndex] : undefined;
|
|
221
|
+
const { txid: prevTxid, vout, sequence, script, witness } = (0, ParserTx_1.getParserTxInputProperties)(this.input, psbtInput);
|
|
222
|
+
const prevOutput = (_a = this.chainInfo.prevOutputs) === null || _a === void 0 ? void 0 : _a[this.inputIndex];
|
|
223
|
+
return this.node(this.inputIndex, getOutputId(this.input), [
|
|
224
|
+
this.node('sequence', sequence === undefined ? undefined : toBufferUInt32BE(sequence)),
|
|
225
|
+
this.parseInputScript(script),
|
|
226
|
+
this.parseWitness(witness),
|
|
227
|
+
this.parseSigScript(),
|
|
228
|
+
...(psbtInput ? this.parsePrevOut(psbtInput) : []),
|
|
229
|
+
...(prevOutput
|
|
230
|
+
? new OutputParser_1.OutputParser(this.tx.network, prevTxid, vout, prevOutput, this.chainInfo, this.params).parsePrevOutputSpend({
|
|
231
|
+
conflict: true,
|
|
232
|
+
})
|
|
233
|
+
: []),
|
|
234
|
+
...(psbtInput ? this.parsePsbtInput(psbtInput) : []),
|
|
235
|
+
]);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
exports.InputParser = InputParser;
|
|
239
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5wdXRQYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvSW5wdXRQYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0RBQWdEO0FBQ2hELHFDQUE4QztBQUM5Qyx5Q0FBNkY7QUFDN0YsMkRBQXVHO0FBQ3ZHLGlEQUF3RDtBQUN4RCxtQ0FBa0M7QUFFbEMsaURBQThDO0FBQzlDLGlEQUE4QztBQUM5QyxpREFBOEM7QUFXOUMsU0FBUyxXQUFXLENBQUMsQ0FBa0M7SUFDckQsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUUsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsRUFBWSxFQUFFLFVBQWtCLEVBQUUsT0FBd0I7SUFDdEYsSUFBSSxFQUFFLFlBQVksT0FBTyxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUU7UUFDL0MsT0FBTyxDQUNMLElBQUEsMENBQXNCLEVBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FDOUcsQ0FBQztLQUNIO0lBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLENBQVM7SUFDakMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4QixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFhLFdBQVksU0FBUSxlQUFNO0lBR3JDLFlBQ1UsSUFBWSxFQUNaLEVBQVksRUFDWixVQUFrQixFQUNsQixTQUFvQixFQUNwQixNQVVQO1FBRUQsS0FBSyxDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBaEJqQyxTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1osT0FBRSxHQUFGLEVBQUUsQ0FBVTtRQUNaLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDbEIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixXQUFNLEdBQU4sTUFBTSxDQVViO1FBR0QsSUFBSSxFQUFFLFlBQVksT0FBTyxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUU7WUFDL0MsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ2pDO2FBQU0sSUFBSSxFQUFFLFlBQVksT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFDL0MsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3RDO2FBQU07WUFDTCxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7U0FDN0M7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQVksRUFBRSxJQUFZLEVBQUUsQ0FBUyxFQUFFLENBQVM7UUFDN0QsSUFDRSxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkMsQ0FBQyxDQUFDLElBQUksS0FBSyxZQUFZLElBQUksSUFBSSxLQUFLLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDeEU7WUFDQSxPQUFPLDJCQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQVksRUFBRSxLQUE2QjtRQUMxRCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEIsSUFBSSxPQUErQixDQUFDO1lBQ3BDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDcEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzdELE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7YUFDekQ7WUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BHLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUFDLE1BQTBCOztRQUN6QyxJQUFJLEtBQUssQ0FBQztRQUNWLElBQUksS0FBSyxDQUFDO1FBQ1YsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRTtZQUNwRSxNQUFNLElBQUksR0FBRyxNQUFBLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsbUNBQUksU0FBUyxDQUFDO1lBQy9ELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BELElBQUksVUFBVSxFQUFFO2dCQUNkLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2FBQ2pEO1lBQ0QsS0FBSyxHQUFHLElBQUksQ0FBQztTQUNkO2FBQU07WUFDTCxLQUFLLEdBQUcsTUFBTSxDQUFDO1NBQ2hCO1FBRUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUE0Qjs7UUFDdkMsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNsQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ25DO1FBQ0QsTUFBTSxJQUFJLEdBQUcsTUFBQSxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLG1DQUFJLFNBQVMsQ0FBQztRQUNqRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkgsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUE2QjtRQUN4QyxJQUFJLFlBQVksSUFBSSxNQUFNLEVBQUU7WUFDMUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUNkLFNBQVMsRUFDVCxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFDeEIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUNqRCxDQUFDO1NBQ0g7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDbkM7SUFDSCxDQUFDO0lBRUQsb0JBQW9CLENBQ2xCLElBR2tELEVBQ2xELEdBQWUsRUFDZixXQUErQjtRQUUvQixJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUU7WUFDYixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1NBQy9DO1FBRUQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRTtZQUM3QixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxJQUFJLFdBQVcsRUFBRTtnQkFDcEIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzdFO1NBQ0Y7UUFFRCxJQUFJLElBQUksS0FBSyx3QkFBd0IsSUFBSSxJQUFJLEtBQUsscUJBQXFCLEVBQUU7WUFDdkUsT0FBTztTQUNSO2FBQU07WUFDTCxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxHQUFHLCtCQUFlLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVELE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFakMsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLEVBQUUsRUFBRTtnQkFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2FBQzFDO1lBRUQsS0FBSyxDQUFDLElBQUksQ0FDUixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxzQkFBTSxDQUFDLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQ2hFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUEsZUFBTyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQy9CLENBQUM7U0FDSDtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELDBCQUEwQixDQUN4QixNQU1DLEVBQ0QsY0FBb0MsRUFDcEMsV0FBaUM7UUFFakMsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQy9GLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUU7WUFDbEYsS0FBSyxDQUFDLElBQUksQ0FDUixHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBYSxFQUFFLENBQVMsRUFBRSxFQUFFLENBQ3BELElBQUksQ0FBQyxJQUFJLENBQ1AsQ0FBQyxFQUNELFNBQVMsRUFDVCxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUMxRixDQUNGLENBQ0YsQ0FBQztTQUNIO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQTZCOztRQUMzQyxNQUFNLEtBQUssR0FBaUIsRUFBRSxDQUFDO1FBQy9CLElBQ0UsWUFBWSxJQUFJLE1BQU07WUFDdEIsWUFBWSxJQUFJLE1BQU07WUFDdEIsWUFBWSxJQUFJLE1BQU07WUFDdEIsTUFBTSxDQUFDLFVBQVUsS0FBSyxTQUFTO1lBQy9CLE1BQU0sQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUMvQjtZQUNBLElBQUksSUFBSSxDQUFDLEVBQUUsWUFBWSxPQUFPLENBQUMsS0FBSyxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRTtnQkFDbEYsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsQ0FDeEQsSUFBSSxDQUFDLEVBQUUsRUFDUCxJQUFJLENBQUMsVUFBVSxFQUNmLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUMxQixNQUFNLENBQUMsVUFBVSxDQUNsQixDQUFDO2dCQUNGLEtBQUssQ0FBQyxJQUFJLENBQ1IsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQ2hDLE1BQU0sRUFDTixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQ3JELE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDL0UsQ0FDRixDQUFDO2FBQ0g7WUFDRCxJQUFJLElBQUksQ0FBQyxFQUFFLFlBQVksT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7Z0JBQzdDLElBQUksY0FBb0MsQ0FBQztnQkFDekMsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFO29CQUN6RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNyQixjQUFjLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDMUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsK0JBQStCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUNyRyxDQUFDO2lCQUNIO2dCQUNELHFHQUFxRztnQkFDckcsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDO2dCQUM5QixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQzthQUNyRjtZQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FDZCxZQUFZLEVBQ1osTUFBTSxDQUFDLFVBQVU7aUJBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBYSxFQUFFLEVBQUUsQ0FDckIsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDckc7aUJBQ0EsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUNaLEtBQUssQ0FDTixDQUFDO1NBQ0g7YUFBTSxJQUFJLFlBQVksSUFBSSxNQUFNLEVBQUU7WUFDakMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUNkLFlBQVksRUFDWixTQUFTLEVBQ1QsQ0FBQyxNQUFBLE1BQU0sQ0FBQyxVQUFVLG1DQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQWEsRUFBRSxDQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQzdFLENBQUM7U0FDSDthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztTQUMzQztJQUNILENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxNQUE2Qjs7UUFDbEQsSUFDRSxNQUFNLENBQUMsVUFBVTtZQUNqQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7Z0JBQzlELE1BQU0sQ0FBQyxVQUFVLEtBQUssd0JBQXdCO2dCQUM5QyxNQUFNLENBQUMsVUFBVSxLQUFLLHFCQUFxQixDQUFDLEVBQzlDO1lBQ0EsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3RztRQUVELElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyxpQkFBaUIsSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLGtCQUFrQixFQUFFO1lBQ3ZGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUEseUNBQXFCLEdBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoRztRQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBQSxNQUFNLENBQUMsVUFBVSxtQ0FBSSxTQUFTLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUk7WUFDRixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQ3JHO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNqQztJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsVUFBOEQ7UUFDekUsSUFBSSxNQUFjLENBQUM7UUFDbkIsSUFBSSxLQUFhLENBQUM7UUFDbEIsSUFBSSxRQUFRLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDL0MsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQztTQUNsQzthQUFNLElBQUksYUFBYSxJQUFJLFVBQVUsSUFBSSxnQkFBZ0IsSUFBSSxVQUFVLEVBQUU7WUFDeEUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsWUFBWSxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNoRCxNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2FBQ2xDO1lBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBVSxFQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxRixJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO2FBQ3hFO1lBQ0QsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQztTQUM5QjthQUFNO1lBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQ3ZDO1FBRUQsSUFBSSxPQUFPLENBQUM7UUFDWixJQUFJO1lBQ0YsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDckU7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE9BQU8sR0FBRyxTQUFTLENBQUM7U0FDckI7UUFDRCxPQUFPO1lBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztTQUN0RixDQUFDO0lBQ0osQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUE4QjtRQUMzQyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDcEIsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsMkJBQTJCLENBQUMsS0FBSyxDQUFDO1lBQzNFLFlBQVksRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUM7WUFDL0QsdUJBQXVCLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDO1NBQ2hGLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBQSwyQkFBWSxFQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQsVUFBVTs7UUFDUixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxZQUFZLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDL0csTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBQSxxQ0FBMEIsRUFBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzlHLE1BQU0sVUFBVSxHQUFHLE1BQUEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLDBDQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3pELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdEYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztZQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQztZQUMxQixJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3JCLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRCxHQUFHLENBQUMsVUFBVTtnQkFDWixDQUFDLENBQUMsSUFBSSwyQkFBWSxDQUNkLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUNmLFFBQVEsRUFDUixJQUFJLEVBQ0osVUFBVSxFQUNWLElBQUksQ0FBQyxTQUFTLEVBQ2QsSUFBSSxDQUFDLE1BQU0sQ0FDWixDQUFDLG9CQUFvQixDQUFDO29CQUNyQixRQUFRLEVBQUUsSUFBSTtpQkFDZixDQUFDO2dCQUNKLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDUCxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDckQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBN1NELGtDQTZTQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgUGFyc2VyLCBQYXJzZXJOb2RlIH0gZnJvbSAnLi9QYXJzZXInO1xuaW1wb3J0IHsgZ2V0UGFyc2VyVHhJbnB1dFByb3BlcnRpZXMsIGdldFByZXZPdXQsIFBhcnNlclR4LCBQYXJzZXJUeElucHV0IH0gZnJvbSAnLi9QYXJzZXJUeCc7XG5pbXBvcnQgeyBnZXRIb2xsb3dTcGVuZE1lc3NhZ2UsIEhvbGxvd1NlZ3dpdFNwZW5kLCBwYXJzZUhvbGxvd1NlZ3dpdFNwZW5kIH0gZnJvbSAnLi9ob2xsb3dTZWd3aXRTcGVuZCc7XG5pbXBvcnQgeyBzY3JpcHQsIFNjcmlwdFNpZ25hdHVyZSB9IGZyb20gJ2JpdGNvaW5qcy1saWInO1xuaW1wb3J0IHsgaXNIaWdoUyB9IGZyb20gJy4vZWNkc2EnO1xuaW1wb3J0IHsgQ2hhaW5JbmZvIH0gZnJvbSAnLi9UeFBhcnNlcic7XG5pbXBvcnQgeyBPdXRwdXRQYXJzZXIgfSBmcm9tICcuL091dHB1dFBhcnNlcic7XG5pbXBvcnQgeyBwYXJzZVVua25vd24gfSBmcm9tICcuL3BhcnNlVW5rbm93bic7XG5pbXBvcnQgeyBTY3JpcHRQYXJzZXIgfSBmcm9tICcuL1NjcmlwdFBhcnNlcic7XG5cbnR5cGUgUGFyc2VkU2lnbmF0dXJlU2NyaXB0ID1cbiAgfCB1dHhvbGliLmJpdGdvLlBhcnNlZFNpZ25hdHVyZVNjcmlwdFAybXNcbiAgfCB1dHhvbGliLmJpdGdvLlBhcnNlZFNpZ25hdHVyZVNjcmlwdFAyc2hQMnBrXG4gIHwgdXR4b2xpYi5iaXRnby5QYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290XG4gIHwgdXR4b2xpYi5iaXRnby5QYXJzZWRQc2J0UDJtc1xuICB8IHV0eG9saWIuYml0Z28uUGFyc2VkUHNidFAyc2hQMnBrXG4gIHwgdXR4b2xpYi5iaXRnby5QYXJzZWRQc2J0VGFwcm9vdFxuICB8IEhvbGxvd1NlZ3dpdFNwZW5kO1xuXG5mdW5jdGlvbiBnZXRPdXRwdXRJZCh2OiB7IGhhc2g6IEJ1ZmZlcjsgaW5kZXg6IG51bWJlciB9KTogc3RyaW5nIHtcbiAgcmV0dXJuIHV0eG9saWIuYml0Z28uZm9ybWF0T3V0cHV0SWQodXR4b2xpYi5iaXRnby5nZXRPdXRwdXRJZEZvcklucHV0KHYpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VTaWduYXR1cmVTY3JpcHQodHg6IFBhcnNlclR4LCBpbnB1dEluZGV4OiBudW1iZXIsIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayk6IFBhcnNlZFNpZ25hdHVyZVNjcmlwdCB7XG4gIGlmICh0eCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHBhcnNlSG9sbG93U2Vnd2l0U3BlbmQodHguaW5zW2lucHV0SW5kZXhdLCBuZXR3b3JrKSB8fCB1dHhvbGliLmJpdGdvLnBhcnNlU2lnbmF0dXJlU2NyaXB0KHR4Lmluc1tpbnB1dEluZGV4XSlcbiAgICApO1xuICB9XG4gIHJldHVybiB1dHhvbGliLmJpdGdvLnBhcnNlUHNidElucHV0KHR4LmRhdGEuaW5wdXRzW2lucHV0SW5kZXhdKTtcbn1cblxuZnVuY3Rpb24gdG9CdWZmZXJVSW50MzJCRShuOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCBidWYgPSBCdWZmZXIuYWxsb2MoNCk7XG4gIGJ1Zi53cml0ZVVJbnQzMkxFKG4sIDApO1xuICByZXR1cm4gYnVmO1xufVxuXG5leHBvcnQgY2xhc3MgSW5wdXRQYXJzZXIgZXh0ZW5kcyBQYXJzZXIge1xuICBwcml2YXRlIGlucHV0OiBQYXJzZXJUeElucHV0O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdHhpZDogc3RyaW5nLFxuICAgIHByaXZhdGUgdHg6IFBhcnNlclR4LFxuICAgIHByaXZhdGUgaW5wdXRJbmRleDogbnVtYmVyLFxuICAgIHByaXZhdGUgY2hhaW5JbmZvOiBDaGFpbkluZm8sXG4gICAgcHJpdmF0ZSBwYXJhbXM6IHtcbiAgICAgIHBhcnNlT3V0cHV0U2NyaXB0OiBib29sZWFuO1xuICAgICAgcGFyc2VTY3JpcHRBc206IGJvb2xlYW47XG4gICAgICBwYXJzZVNjcmlwdERhdGE6IGJvb2xlYW47XG4gICAgICBwYXJzZVNpZ25hdHVyZURhdGE6IHtcbiAgICAgICAgc2NyaXB0OiBib29sZWFuO1xuICAgICAgICBlY2RzYTogYm9vbGVhbjtcbiAgICAgICAgc2Nobm9ycjogYm9vbGVhbjtcbiAgICAgIH07XG4gICAgICBwYXJzZUVycm9yPzogJ3Rocm93JyB8ICdjb250aW51ZSc7XG4gICAgfVxuICApIHtcbiAgICBzdXBlcih7IHBhcnNlRXJyb3I6IHBhcmFtcy5wYXJzZUVycm9yIH0pO1xuICAgIGlmICh0eCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uKSB7XG4gICAgICB0aGlzLmlucHV0ID0gdHguaW5zW2lucHV0SW5kZXhdO1xuICAgIH0gZWxzZSBpZiAodHggaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0KSB7XG4gICAgICB0aGlzLmlucHV0ID0gdHgudHhJbnB1dHNbaW5wdXRJbmRleF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biB0cmFuc2FjdGlvbiB0eXBlJyk7XG4gICAgfVxuICB9XG5cbiAgcGFyc2VTY3JpcHRBc20odHlwZTogc3RyaW5nLCBwYXJ0OiBCdWZmZXIsIGk6IG51bWJlciwgbjogbnVtYmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoXG4gICAgICAodHlwZSA9PT0gJ3RhcHJvb3QnICYmIGkgPT09IG4gLSAyKSB8fFxuICAgICAgKCh0eXBlID09PSAnc2NyaXB0aGFzaCcgfHwgdHlwZSA9PT0gJ3dpdG5lc3NzY3JpcHRoYXNoJykgJiYgaSA9PT0gbiAtIDEpXG4gICAgKSB7XG4gICAgICByZXR1cm4gU2NyaXB0UGFyc2VyLnRvQVNNKHBhcnQpO1xuICAgIH1cbiAgfVxuXG4gIHBhcnNlU2NyaXB0UGFydHModHlwZTogc3RyaW5nLCBwYXJ0czogQXJyYXk8QnVmZmVyIHwgbnVtYmVyPik6IFBhcnNlck5vZGVbXSB7XG4gICAgcmV0dXJuIHBhcnRzLm1hcCgodiwgaSkgPT4ge1xuICAgICAgbGV0IGFzbU5vZGU6IFBhcnNlck5vZGUgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAodGhpcy5wYXJhbXMucGFyc2VTY3JpcHRBc20gJiYgQnVmZmVyLmlzQnVmZmVyKHYpKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMucGFyc2VTY3JpcHRBc20odHlwZSwgdiwgaSwgcGFydHMubGVuZ3RoKTtcbiAgICAgICAgYXNtTm9kZSA9IHBhcnNlZCA/IHRoaXMubm9kZSgnYXNtJywgcGFyc2VkKSA6IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMubm9kZShpLCB0aGlzLnBhcmFtcy5wYXJzZVNjcmlwdERhdGEgPyB2IDogdW5kZWZpbmVkLCBhc21Ob2RlID8gW2FzbU5vZGVdIDogdW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHBhcnNlSW5wdXRTY3JpcHQoYnVmZmVyOiBCdWZmZXIgfCB1bmRlZmluZWQpOiBQYXJzZXJOb2RlIHtcbiAgICBsZXQgdmFsdWU7XG4gICAgbGV0IG5vZGVzO1xuICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLmxlbmd0aCAmJiB0aGlzLnBhcmFtcy5wYXJzZVNpZ25hdHVyZURhdGEuc2NyaXB0KSB7XG4gICAgICBjb25zdCB0eXBlID0gdXR4b2xpYi5jbGFzc2lmeS5pbnB1dChidWZmZXIsIHRydWUpID8/ICd1bmtub3duJztcbiAgICAgIGNvbnN0IGRlY29tcGlsZWQgPSB1dHhvbGliLnNjcmlwdC5kZWNvbXBpbGUoYnVmZmVyKTtcbiAgICAgIGlmIChkZWNvbXBpbGVkKSB7XG4gICAgICAgIG5vZGVzID0gdGhpcy5wYXJzZVNjcmlwdFBhcnRzKHR5cGUsIGRlY29tcGlsZWQpO1xuICAgICAgfVxuICAgICAgdmFsdWUgPSB0eXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IGJ1ZmZlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5ub2RlKCdzY3JpcHRTaWcnLCB2YWx1ZSwgbm9kZXMpO1xuICB9XG5cbiAgcGFyc2VXaXRuZXNzKHNjcmlwdDogQnVmZmVyW10gfCB1bmRlZmluZWQpOiBQYXJzZXJOb2RlIHtcbiAgICBpZiAoIXNjcmlwdCB8fCBzY3JpcHQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2RlKCd3aXRuZXNzJywgJ1tdJyk7XG4gICAgfVxuICAgIGNvbnN0IHR5cGUgPSB1dHhvbGliLmNsYXNzaWZ5LndpdG5lc3Moc2NyaXB0LCB0cnVlKSA/PyAndW5rbm93bic7XG4gICAgcmV0dXJuIHRoaXMubm9kZSgnd2l0bmVzcycsIHR5cGUsIHRoaXMucGFyYW1zLnBhcnNlU2NyaXB0RGF0YSA/IHRoaXMucGFyc2VTY3JpcHRQYXJ0cyh0eXBlLCBzY3JpcHQpIDogdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHBhcnNlUHVia2V5cyhwYXJzZWQ6IFBhcnNlZFNpZ25hdHVyZVNjcmlwdCk6IFBhcnNlck5vZGUge1xuICAgIGlmICgncHVibGljS2V5cycgaW4gcGFyc2VkKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2RlKFxuICAgICAgICAncHVia2V5cycsXG4gICAgICAgIHBhcnNlZC5wdWJsaWNLZXlzLmxlbmd0aCxcbiAgICAgICAgcGFyc2VkLnB1YmxpY0tleXMubWFwKChrLCBpKSA9PiB0aGlzLm5vZGUoaSwgaykpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2RlKCdwdWJrZXlzJywgJ1tdJyk7XG4gICAgfVxuICB9XG5cbiAgcGFyc2VTaWduYXR1cmVCdWZmZXIoXG4gICAgdHlwZTpcbiAgICAgIHwgdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLlNjcmlwdFR5cGUyT2YzXG4gICAgICB8IHV0eG9saWIuYml0Z28uUGFyc2VkU2NyaXB0VHlwZTJPZjNcbiAgICAgIHwgdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLlNjcmlwdFR5cGVQMnNoUDJwayxcbiAgICBidWY6IEJ1ZmZlciB8IDAsXG4gICAgc2lnbmVySW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZFxuICApOiBQYXJzZXJOb2RlW10ge1xuICAgIGlmIChidWYgPT09IDApIHtcbiAgICAgIHJldHVybiBbdGhpcy5ub2RlKCd0eXBlJywgJ3BsYWNlaG9sZGVyICgwKScpXTtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlcyA9IFt0aGlzLm5vZGUoJ2J5dGVzJywgYnVmKV07XG4gICAgaWYgKHNpZ25lckluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG5vZGVzLnB1c2godGhpcy5ub2RlKCd2YWxpZCcsIDAgPD0gc2lnbmVySW5kZXgpKTtcbiAgICAgIGlmICgwIDw9IHNpZ25lckluZGV4KSB7XG4gICAgICAgIG5vZGVzLnB1c2godGhpcy5ub2RlKCdzaWduZWRCeScsIFsndXNlcicsICdiYWNrdXAnLCAnYml0Z28nXVtzaWduZXJJbmRleF0pKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnIHx8IHR5cGUgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJykge1xuICAgICAgLy8gVE9ET1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7IHNpZ25hdHVyZSwgaGFzaFR5cGUgfSA9IFNjcmlwdFNpZ25hdHVyZS5kZWNvZGUoYnVmKTtcbiAgICAgIGNvbnN0IHIgPSBzaWduYXR1cmUuc3ViYXJyYXkoMCwgMzIpO1xuICAgICAgY29uc3QgcyA9IHNpZ25hdHVyZS5zdWJhcnJheSgzMik7XG5cbiAgICAgIGlmIChyLmxlbmd0aCAhPT0gMzIgfHwgcy5sZW5ndGggIT09IDMyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBzY2FsYXIgbGVuZ3RoYCk7XG4gICAgICB9XG5cbiAgICAgIG5vZGVzLnB1c2goXG4gICAgICAgIHRoaXMubm9kZSgnaXNDYW5vbmljYWwnLCBzY3JpcHQuaXNDYW5vbmljYWxTY3JpcHRTaWduYXR1cmUoYnVmKSksXG4gICAgICAgIHRoaXMubm9kZSgnaGFzaFR5cGUnLCBoYXNoVHlwZSksXG4gICAgICAgIHRoaXMubm9kZSgncicsIHIpLFxuICAgICAgICB0aGlzLm5vZGUoJ3MnLCBzKSxcbiAgICAgICAgdGhpcy5ub2RlKCdoaWdoUycsIGlzSGlnaFMocykpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlcztcbiAgfVxuXG4gIHBhcnNlU2lnbmF0dXJlc1dpdGhTaWduZXJzKFxuICAgIHBhcnNlZDoge1xuICAgICAgc2NyaXB0VHlwZTpcbiAgICAgICAgfCB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuU2NyaXB0VHlwZTJPZjNcbiAgICAgICAgfCB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuU2NyaXB0VHlwZVAyc2hQMnBrXG4gICAgICAgIHwgdXR4b2xpYi5iaXRnby5QYXJzZWRTY3JpcHRUeXBlMk9mMztcbiAgICAgIHNpZ25hdHVyZXM6IChCdWZmZXIgfCAwKVtdO1xuICAgIH0sXG4gICAgc2lnbmVkQnlMYWJlbHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuICAgIHNpZ25lckluZGV4OiBudW1iZXJbXSB8IHVuZGVmaW5lZFxuICApOiBQYXJzZXJOb2RlW10ge1xuICAgIGNvbnN0IG5vZGVzID0gc2lnbmVkQnlMYWJlbHMgPyBbdGhpcy5ub2RlKCdzaWduZWQgYnknLCBgWyR7c2lnbmVkQnlMYWJlbHMuam9pbignLCAnKX1dYCldIDogW107XG4gICAgaWYgKHRoaXMucGFyYW1zLnBhcnNlU2lnbmF0dXJlRGF0YS5lY2RzYSB8fCB0aGlzLnBhcmFtcy5wYXJzZVNpZ25hdHVyZURhdGEuc2Nobm9ycikge1xuICAgICAgbm9kZXMucHVzaChcbiAgICAgICAgLi4ucGFyc2VkLnNpZ25hdHVyZXMubWFwKChzOiBCdWZmZXIgfCAwLCBpOiBudW1iZXIpID0+XG4gICAgICAgICAgdGhpcy5ub2RlKFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHRoaXMucGFyc2VTaWduYXR1cmVCdWZmZXIocGFyc2VkLnNjcmlwdFR5cGUsIHMsIHNpZ25lckluZGV4ID8gc2lnbmVySW5kZXhbaV0gOiB1bmRlZmluZWQpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZXM7XG4gIH1cblxuICBwYXJzZVNpZ25hdHVyZXMocGFyc2VkOiBQYXJzZWRTaWduYXR1cmVTY3JpcHQpOiBQYXJzZXJOb2RlIHtcbiAgICBjb25zdCBub2RlczogUGFyc2VyTm9kZVtdID0gW107XG4gICAgaWYgKFxuICAgICAgJ3NpZ25hdHVyZXMnIGluIHBhcnNlZCAmJlxuICAgICAgJ3B1YmxpY0tleXMnIGluIHBhcnNlZCAmJlxuICAgICAgJ3NjcmlwdFR5cGUnIGluIHBhcnNlZCAmJlxuICAgICAgcGFyc2VkLnNpZ25hdHVyZXMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgcGFyc2VkLnNjcmlwdFR5cGUgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgaWYgKHRoaXMudHggaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbiAmJiB0aGlzLmNoYWluSW5mby5wcmV2T3V0cHV0cykge1xuICAgICAgICBjb25zdCBzaWduZWRCeSA9IHV0eG9saWIuYml0Z28uZ2V0U2lnbmF0dXJlc1dpdGhQdWJsaWNLZXlzKFxuICAgICAgICAgIHRoaXMudHgsXG4gICAgICAgICAgdGhpcy5pbnB1dEluZGV4LFxuICAgICAgICAgIHRoaXMuY2hhaW5JbmZvLnByZXZPdXRwdXRzLFxuICAgICAgICAgIHBhcnNlZC5wdWJsaWNLZXlzXG4gICAgICAgICk7XG4gICAgICAgIG5vZGVzLnB1c2goXG4gICAgICAgICAgLi4udGhpcy5wYXJzZVNpZ25hdHVyZXNXaXRoU2lnbmVycyhcbiAgICAgICAgICAgIHBhcnNlZCxcbiAgICAgICAgICAgIHNpZ25lZEJ5LmZsYXRNYXAoKHYsIGkpID0+ICh2ID8gW2kudG9TdHJpbmcoKV0gOiBbXSkpLFxuICAgICAgICAgICAgcGFyc2VkLnNpZ25hdHVyZXMubWFwKChrOiBCdWZmZXIgfCAwKSA9PiAoayA9PT0gMCA/IC0xIDogc2lnbmVkQnkuaW5kZXhPZihrKSkpXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudHggaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0KSB7XG4gICAgICAgIGxldCBzaWduZWRCeUxhYmVsczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChwYXJzZWQucHVibGljS2V5cyAmJiBBcnJheS5pc0FycmF5KHBhcnNlZC5wdWJsaWNLZXlzKSkge1xuICAgICAgICAgIGNvbnN0IHBzYnQgPSB0aGlzLnR4O1xuICAgICAgICAgIHNpZ25lZEJ5TGFiZWxzID0gcGFyc2VkLnB1YmxpY0tleXMuZmxhdE1hcCgoazogQnVmZmVyLCBpKSA9PlxuICAgICAgICAgICAgQnVmZmVyLmlzQnVmZmVyKGspICYmIHBzYnQudmFsaWRhdGVTaWduYXR1cmVzT2ZJbnB1dENvbW1vbih0aGlzLmlucHV0SW5kZXgsIGspID8gW2kudG9TdHJpbmcoKV0gOiBbXVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVE9ETzogdGhlIGN1cnJlbnQgVXR4b1BzYnQgQVBJIGRvZXMgbm90IGFsbG93IHVzIHRvIGRldGVybWluZSB3aGljaCBzaWduZXIgY3JlYXRlZCB3aGljaCBzaWduYXR1cmVcbiAgICAgICAgY29uc3Qgc2lnbmVySW5kZXggPSB1bmRlZmluZWQ7XG4gICAgICAgIG5vZGVzLnB1c2goLi4udGhpcy5wYXJzZVNpZ25hdHVyZXNXaXRoU2lnbmVycyhwYXJzZWQsIHNpZ25lZEJ5TGFiZWxzLCBzaWduZXJJbmRleCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMubm9kZShcbiAgICAgICAgJ3NpZ25hdHVyZXMnLFxuICAgICAgICBwYXJzZWQuc2lnbmF0dXJlc1xuICAgICAgICAgIC5tYXAoKHM6IEJ1ZmZlciB8IDApID0+XG4gICAgICAgICAgICB1dHhvbGliLmJpdGdvLmlzUGxhY2Vob2xkZXJTaWduYXR1cmUocykgPyAnW10nIDogQnVmZmVyLmlzQnVmZmVyKHMpID8gYFske3MubGVuZ3RofWJ5dGVdYCA6IGBbJHtzfV1gXG4gICAgICAgICAgKVxuICAgICAgICAgIC5qb2luKCcgJyksXG4gICAgICAgIG5vZGVzXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoJ3NpZ25hdHVyZXMnIGluIHBhcnNlZCkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZShcbiAgICAgICAgJ3NpZ25hdHVyZXMnLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIChwYXJzZWQuc2lnbmF0dXJlcyA/PyBbXSkubWFwKChzOiBCdWZmZXIgfCAwLCBpOiBudW1iZXIpID0+IHRoaXMubm9kZShpLCBzKSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGUoJ3NpZ25hdHVyZXMnLCB1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIHBhcnNlU2lnU2NyaXB0V2l0aFR5cGUocGFyc2VkOiBQYXJzZWRTaWduYXR1cmVTY3JpcHQpOiBQYXJzZXJOb2RlIHtcbiAgICBpZiAoXG4gICAgICBwYXJzZWQuc2NyaXB0VHlwZSAmJlxuICAgICAgKHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5pc1NjcmlwdFR5cGUyT2YzKHBhcnNlZC5zY3JpcHRUeXBlKSB8fFxuICAgICAgICBwYXJzZWQuc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnIHx8XG4gICAgICAgIHBhcnNlZC5zY3JpcHRUeXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2RlKCdzaWdTY3JpcHQnLCBwYXJzZWQuc2NyaXB0VHlwZSwgW3RoaXMucGFyc2VQdWJrZXlzKHBhcnNlZCksIHRoaXMucGFyc2VTaWduYXR1cmVzKHBhcnNlZCldKTtcbiAgICB9XG5cbiAgICBpZiAocGFyc2VkLnNjcmlwdFR5cGUgPT09ICdwMnNoUDJ3c2hIb2xsb3cnIHx8IHBhcnNlZC5zY3JpcHRUeXBlID09PSAncDJzaFAyd3BraEhvbGxvdycpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGUoJ3NpZ1NjcmlwdCcsIHBhcnNlZC5zY3JpcHRUeXBlLCBbdGhpcy5ub2RlKCdpbmZvJywgZ2V0SG9sbG93U3BlbmRNZXNzYWdlKCkpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubm9kZSgnc2lnU2NyaXB0JywgcGFyc2VkLnNjcmlwdFR5cGUgPz8gJ3Vua25vd24nKTtcbiAgfVxuXG4gIHBhcnNlU2lnU2NyaXB0KCk6IFBhcnNlck5vZGUge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZVNpZ1NjcmlwdFdpdGhUeXBlKHBhcnNlU2lnbmF0dXJlU2NyaXB0KHRoaXMudHgsIHRoaXMuaW5wdXRJbmRleCwgdGhpcy50eC5uZXR3b3JrKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlUGFyc2VFcnJvcihlKTtcbiAgICB9XG4gIH1cblxuICBwYXJzZVByZXZPdXQocHJldk91dHB1dDogdXR4b2xpYi5UeE91dHB1dDxiaWdpbnQ+IHwgdXR4b2xpYi5iaXRnby5Qc2J0SW5wdXQpOiBQYXJzZXJOb2RlW10ge1xuICAgIGxldCBzY3JpcHQ6IEJ1ZmZlcjtcbiAgICBsZXQgdmFsdWU6IGJpZ2ludDtcbiAgICBpZiAoJ3NjcmlwdCcgaW4gcHJldk91dHB1dCAmJiBwcmV2T3V0cHV0LnNjcmlwdCkge1xuICAgICAgKHsgc2NyaXB0LCB2YWx1ZSB9ID0gcHJldk91dHB1dCk7XG4gICAgfSBlbHNlIGlmICgnd2l0bmVzc1V0eG8nIGluIHByZXZPdXRwdXQgfHwgJ25vbldpdG5lc3NVdHhvJyBpbiBwcmV2T3V0cHV0KSB7XG4gICAgICBpZiAoISh0aGlzLnR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHN0YXRlJyk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRQcmV2T3V0KHByZXZPdXRwdXQsIHRoaXMudHgudHhJbnB1dHNbdGhpcy5pbnB1dEluZGV4XSwgdGhpcy50eC5uZXR3b3JrKTtcbiAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBbdGhpcy5ub2RlKCdzY3JpcHQnLCAndW5rbm93bicpLCB0aGlzLm5vZGUoJ3ZhbHVlJywgJ3Vua25vd24nKV07XG4gICAgICB9XG4gICAgICAoeyBzY3JpcHQsIHZhbHVlIH0gPSByZXN1bHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcHJldk91dHB1dCcpO1xuICAgIH1cblxuICAgIGxldCBhZGRyZXNzO1xuICAgIHRyeSB7XG4gICAgICBhZGRyZXNzID0gdXR4b2xpYi5hZGRyZXNzLmZyb21PdXRwdXRTY3JpcHQoc2NyaXB0LCB0aGlzLnR4Lm5ldHdvcmspO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGFkZHJlc3MgPSAnKGVycm9yKSc7XG4gICAgfVxuICAgIHJldHVybiBbXG4gICAgICB0aGlzLm5vZGUoJ3ZhbHVlJywgTnVtYmVyKHZhbHVlKSAvIDFlOCksXG4gICAgICB0aGlzLm5vZGUoJ3B1YlNjcmlwdCcsIHNjcmlwdCwgYWRkcmVzcyA/IFt0aGlzLm5vZGUoJ2FkZHJlc3MnLCBhZGRyZXNzKV0gOiB1bmRlZmluZWQpLFxuICAgIF07XG4gIH1cblxuICBwYXJzZVBzYnRJbnB1dChpbnB1dDogdXR4b2xpYi5iaXRnby5Qc2J0SW5wdXQpOiBQYXJzZXJOb2RlW10ge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh7XG4gICAgICBtdXNpZzJQYXJ0aWNpcGFudHM6IHV0eG9saWIuYml0Z28ubXVzaWcyLnBhcnNlUHNidE11c2lnMlBhcnRpY2lwYW50cyhpbnB1dCksXG4gICAgICBtdXNpZzJOb25jZXM6IHV0eG9saWIuYml0Z28ubXVzaWcyLnBhcnNlUHNidE11c2lnMk5vbmNlcyhpbnB1dCksXG4gICAgICBtdXNpZzJQYXJ0aWFsU2lnbmF0dXJlczogdXR4b2xpYi5iaXRnby5tdXNpZzIucGFyc2VQc2J0TXVzaWcyUGFydGlhbFNpZ3MoaW5wdXQpLFxuICAgIH0pLmZsYXRNYXAoKFtrZXksIHZhbHVlXSkgPT4gKHZhbHVlID8gW3BhcnNlVW5rbm93bih0aGlzLCBrZXksIHZhbHVlKV0gOiBbXSkpO1xuICB9XG5cbiAgcGFyc2VJbnB1dCgpOiBQYXJzZXJOb2RlIHtcbiAgICBjb25zdCBwc2J0SW5wdXQgPSB0aGlzLnR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidCA/IHRoaXMudHguZGF0YS5pbnB1dHNbdGhpcy5pbnB1dEluZGV4XSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCB7IHR4aWQ6IHByZXZUeGlkLCB2b3V0LCBzZXF1ZW5jZSwgc2NyaXB0LCB3aXRuZXNzIH0gPSBnZXRQYXJzZXJUeElucHV0UHJvcGVydGllcyh0aGlzLmlucHV0LCBwc2J0SW5wdXQpO1xuICAgIGNvbnN0IHByZXZPdXRwdXQgPSB0aGlzLmNoYWluSW5mby5wcmV2T3V0cHV0cz8uW3RoaXMuaW5wdXRJbmRleF07XG4gICAgcmV0dXJuIHRoaXMubm9kZSh0aGlzLmlucHV0SW5kZXgsIGdldE91dHB1dElkKHRoaXMuaW5wdXQpLCBbXG4gICAgICB0aGlzLm5vZGUoJ3NlcXVlbmNlJywgc2VxdWVuY2UgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHRvQnVmZmVyVUludDMyQkUoc2VxdWVuY2UpKSxcbiAgICAgIHRoaXMucGFyc2VJbnB1dFNjcmlwdChzY3JpcHQpLFxuICAgICAgdGhpcy5wYXJzZVdpdG5lc3Mod2l0bmVzcyksXG4gICAgICB0aGlzLnBhcnNlU2lnU2NyaXB0KCksXG4gICAgICAuLi4ocHNidElucHV0ID8gdGhpcy5wYXJzZVByZXZPdXQocHNidElucHV0KSA6IFtdKSxcbiAgICAgIC4uLihwcmV2T3V0cHV0XG4gICAgICAgID8gbmV3IE91dHB1dFBhcnNlcihcbiAgICAgICAgICAgIHRoaXMudHgubmV0d29yayxcbiAgICAgICAgICAgIHByZXZUeGlkLFxuICAgICAgICAgICAgdm91dCxcbiAgICAgICAgICAgIHByZXZPdXRwdXQsXG4gICAgICAgICAgICB0aGlzLmNoYWluSW5mbyxcbiAgICAgICAgICAgIHRoaXMucGFyYW1zXG4gICAgICAgICAgKS5wYXJzZVByZXZPdXRwdXRTcGVuZCh7XG4gICAgICAgICAgICBjb25mbGljdDogdHJ1ZSxcbiAgICAgICAgICB9KVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLihwc2J0SW5wdXQgPyB0aGlzLnBhcnNlUHNidElucHV0KHBzYnRJbnB1dCkgOiBbXSksXG4gICAgXSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { ChainInfo } from './TxParser';
|
|
3
|
+
import { Parser, ParserNode } from './Parser';
|
|
4
|
+
import { Network } from '@bitgo-beta/utxo-lib';
|
|
5
|
+
export declare class OutputParser extends Parser {
|
|
6
|
+
private network;
|
|
7
|
+
private txid;
|
|
8
|
+
private outputIndex;
|
|
9
|
+
private output;
|
|
10
|
+
private chainInfo;
|
|
11
|
+
private params;
|
|
12
|
+
constructor(network: Network, txid: string, outputIndex: number, output: {
|
|
13
|
+
script: Buffer;
|
|
14
|
+
value: bigint;
|
|
15
|
+
}, chainInfo: ChainInfo, params: {
|
|
16
|
+
parseOutputScript: boolean;
|
|
17
|
+
parseError?: 'throw' | 'continue';
|
|
18
|
+
});
|
|
19
|
+
parsePrevOutputSpend(params: {
|
|
20
|
+
conflict: boolean;
|
|
21
|
+
}): ParserNode[];
|
|
22
|
+
parseOutputSpend(): ParserNode[];
|
|
23
|
+
parseOutput(): ParserNode;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=OutputParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OutputParser.d.ts","sourceRoot":"","sources":["../../src/OutputParser.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG9C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,qBAAa,YAAa,SAAQ,MAAM;IAEpC,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,MAAM;gBALN,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EACzC,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE;QACd,iBAAiB,EAAE,OAAO,CAAC;QAC3B,UAAU,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;KACnC;IAKH,oBAAoB,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE,GAAG,UAAU,EAAE;IAgBjE,gBAAgB,IAAI,UAAU,EAAE;IAahC,WAAW,IAAI,UAAU;CAkB1B"}
|