@bitgo-beta/utxo-bin 2.8.3-beta.67 → 2.8.3-beta.671
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 +11 -2
- package/dist/src/AddressParser.d.ts +1 -1
- package/dist/src/AddressParser.d.ts.map +1 -1
- package/dist/src/AddressParser.js +19 -7
- package/dist/src/InputParser.d.ts +1 -2
- package/dist/src/InputParser.d.ts.map +1 -1
- package/dist/src/InputParser.js +34 -32
- package/dist/src/OutputParser.d.ts +3 -3
- package/dist/src/OutputParser.d.ts.map +1 -1
- package/dist/src/OutputParser.js +18 -5
- package/dist/src/Parser.d.ts +3 -3
- package/dist/src/Parser.d.ts.map +1 -1
- package/dist/src/Parser.js +16 -6
- package/dist/src/ParserTx.d.ts +3 -4
- package/dist/src/ParserTx.d.ts.map +1 -1
- package/dist/src/ParserTx.js +7 -8
- package/dist/src/ScriptParser.d.ts +23 -0
- package/dist/src/ScriptParser.d.ts.map +1 -0
- package/dist/src/ScriptParser.js +96 -0
- package/dist/src/TxParser.d.ts +3 -2
- package/dist/src/TxParser.d.ts.map +1 -1
- package/dist/src/TxParser.js +10 -10
- package/dist/src/args/format.d.ts +8 -0
- package/dist/src/args/format.d.ts.map +1 -0
- package/dist/src/args/format.js +15 -0
- package/dist/src/args/index.d.ts +5 -0
- package/dist/src/args/index.d.ts.map +1 -0
- package/dist/src/args/index.js +21 -0
- package/dist/src/args/parseNetwork.d.ts +25 -0
- package/dist/src/args/parseNetwork.d.ts.map +1 -0
- package/dist/src/args/parseNetwork.js +75 -0
- package/dist/src/args/parseString.d.ts +40 -0
- package/dist/src/args/parseString.d.ts.map +1 -0
- package/dist/src/args/parseString.js +120 -0
- package/dist/src/args/walletKeys.d.ts +38 -0
- package/dist/src/args/walletKeys.d.ts.map +1 -0
- package/dist/src/args/walletKeys.js +28 -0
- 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/cmdAddress/cmdGenerate.d.ts +21 -0
- package/dist/src/commands/cmdAddress/cmdGenerate.d.ts.map +1 -0
- package/dist/src/commands/cmdAddress/cmdGenerate.js +89 -0
- package/dist/src/commands/cmdAddress/cmdParse.d.ts +20 -0
- package/dist/src/commands/cmdAddress/cmdParse.d.ts.map +1 -0
- package/dist/src/commands/cmdAddress/cmdParse.js +28 -0
- package/dist/src/commands/cmdAddress/index.d.ts +3 -0
- package/dist/src/commands/cmdAddress/index.d.ts.map +1 -0
- package/dist/src/commands/cmdAddress/index.js +16 -0
- package/dist/src/commands/cmdBip32.d.ts +16 -0
- package/dist/src/commands/cmdBip32.d.ts.map +1 -0
- package/dist/src/commands/cmdBip32.js +45 -0
- package/dist/src/commands/cmdParseScript.d.ts +18 -0
- package/dist/src/commands/cmdParseScript.d.ts.map +1 -0
- package/dist/src/commands/cmdParseScript.js +27 -0
- package/dist/src/commands/cmdParseTx.d.ts +30 -0
- package/dist/src/commands/cmdParseTx.d.ts.map +1 -0
- package/dist/src/commands/cmdParseTx.js +120 -0
- package/dist/src/commands/cmdPsbt/cmdAddDescriptorInput.d.ts +13 -0
- package/dist/src/commands/cmdPsbt/cmdAddDescriptorInput.d.ts.map +1 -0
- package/dist/src/commands/cmdPsbt/cmdAddDescriptorInput.js +67 -0
- package/dist/src/commands/cmdPsbt/cmdAddOutput.d.ts +11 -0
- package/dist/src/commands/cmdPsbt/cmdAddOutput.d.ts.map +1 -0
- package/dist/src/commands/cmdPsbt/cmdAddOutput.js +89 -0
- package/dist/src/commands/cmdPsbt/cmdCreate.d.ts +9 -0
- package/dist/src/commands/cmdPsbt/cmdCreate.d.ts.map +1 -0
- package/dist/src/commands/cmdPsbt/cmdCreate.js +23 -0
- package/dist/src/commands/cmdPsbt/cmdFinalize.d.ts +11 -0
- package/dist/src/commands/cmdPsbt/cmdFinalize.d.ts.map +1 -0
- package/dist/src/commands/cmdPsbt/cmdFinalize.js +43 -0
- package/dist/src/commands/cmdPsbt/cmdSign.d.ts +7 -0
- package/dist/src/commands/cmdPsbt/cmdSign.d.ts.map +1 -0
- package/dist/src/commands/cmdPsbt/cmdSign.js +24 -0
- package/dist/src/commands/cmdPsbt/index.d.ts +8 -0
- package/dist/src/commands/cmdPsbt/index.d.ts.map +1 -0
- package/dist/src/commands/cmdPsbt/index.js +27 -0
- package/dist/src/commands/cmdPsbt/withPsbt.d.ts +63 -0
- package/dist/src/commands/cmdPsbt/withPsbt.d.ts.map +1 -0
- package/dist/src/commands/cmdPsbt/withPsbt.js +66 -0
- package/dist/src/commands/cmdPsbt/wrap.d.ts +5 -0
- package/dist/src/commands/cmdPsbt/wrap.d.ts.map +1 -0
- package/dist/src/commands/cmdPsbt/wrap.js +27 -0
- package/dist/src/commands/formatString.d.ts +8 -0
- package/dist/src/commands/formatString.d.ts.map +1 -0
- package/dist/src/commands/formatString.js +14 -0
- package/dist/src/commands/index.d.ts +6 -0
- package/dist/src/commands/index.d.ts.map +1 -0
- package/dist/src/commands/index.js +22 -0
- package/dist/src/ecdsa.d.ts +0 -1
- package/dist/src/ecdsa.d.ts.map +1 -1
- package/dist/src/ecdsa.js +2 -3
- package/dist/src/fetch.d.ts +8 -1
- package/dist/src/fetch.d.ts.map +1 -1
- package/dist/src/fetch.js +42 -9
- package/dist/src/format.d.ts.map +1 -1
- package/dist/src/format.js +15 -8
- package/dist/src/generateAddress.d.ts +47 -0
- package/dist/src/generateAddress.d.ts.map +1 -0
- package/dist/src/generateAddress.js +141 -0
- package/dist/src/hollowSegwitSpend.d.ts +1 -1
- package/dist/src/hollowSegwitSpend.d.ts.map +1 -1
- package/dist/src/hollowSegwitSpend.js +3 -4
- package/dist/src/parseUnknown.d.ts +3 -1
- package/dist/src/parseUnknown.d.ts.map +1 -1
- package/dist/src/parseUnknown.js +5 -6
- package/dist/test/args/stringToBuffer.d.ts +2 -0
- package/dist/test/args/stringToBuffer.d.ts.map +1 -0
- package/dist/test/args/stringToBuffer.js +16 -0
- package/dist/test/bip32.d.ts +2 -0
- package/dist/test/bip32.d.ts.map +1 -0
- package/dist/test/bip32.js +22 -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 +13 -0
- package/dist/test/cmdPsbt.d.ts +2 -0
- package/dist/test/cmdPsbt.d.ts.map +1 -0
- package/dist/test/cmdPsbt.js +102 -0
- package/dist/test/fixtures.d.ts +4 -4
- package/dist/test/fixtures.d.ts.map +1 -1
- package/dist/test/fixtures.js +20 -14
- package/dist/test/generateAddress.d.ts +2 -0
- package/dist/test/generateAddress.d.ts.map +1 -0
- package/dist/test/generateAddress.js +46 -0
- package/dist/test/parseAddress.d.ts +1 -5
- package/dist/test/parseAddress.d.ts.map +1 -1
- package/dist/test/parseAddress.js +20 -22
- package/dist/test/parseScript.d.ts +2 -0
- package/dist/test/parseScript.d.ts.map +1 -0
- package/dist/test/parseScript.js +41 -0
- package/dist/test/parseTransaction.js +14 -10
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +9 -6
- package/dist/src/commands.d.ts +0 -48
- package/dist/src/commands.d.ts.map +0 -1
- package/dist/src/commands.js +0 -213
- package/dist/src/readStdin.d.ts +0 -5
- package/dist/src/readStdin.d.ts.map +0 -1
- package/dist/src/readStdin.js +0 -42
package/dist/src/commands.js
DELETED
|
@@ -1,213 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.cmdParseAddress = exports.cmdParseTx = exports.getAddressParser = exports.getTxParser = void 0;
|
|
4
|
-
const fs = require("fs");
|
|
5
|
-
const process = require("process");
|
|
6
|
-
const util_1 = require("util");
|
|
7
|
-
const clipboardy_cjs_1 = require("clipboardy-cjs");
|
|
8
|
-
const utxolib = require("@bitgo-beta/utxo-lib");
|
|
9
|
-
const Parser_1 = require("./Parser");
|
|
10
|
-
const format_1 = require("./format");
|
|
11
|
-
const fetch_1 = require("./fetch");
|
|
12
|
-
const TxParser_1 = require("./TxParser");
|
|
13
|
-
const AddressParser_1 = require("./AddressParser");
|
|
14
|
-
const blockapis_1 = require("@bitgo-beta/blockapis");
|
|
15
|
-
const readStdin_1 = require("./readStdin");
|
|
16
|
-
const parseUnknown_1 = require("./parseUnknown");
|
|
17
|
-
const ParserTx_1 = require("./ParserTx");
|
|
18
|
-
async function getClient({ cache }) {
|
|
19
|
-
if (cache) {
|
|
20
|
-
const mkdir = util_1.promisify(fs.mkdir);
|
|
21
|
-
const dir = `${process.env.HOME}/.cache/utxo-bin/`;
|
|
22
|
-
await mkdir(dir, { recursive: true });
|
|
23
|
-
return new blockapis_1.CachingHttpClient(dir);
|
|
24
|
-
}
|
|
25
|
-
return new blockapis_1.BaseHttpClient();
|
|
26
|
-
}
|
|
27
|
-
function getNetworkForName(name) {
|
|
28
|
-
const network = utxolib.networks[name];
|
|
29
|
-
if (!network) {
|
|
30
|
-
throw new Error(`invalid network ${network}`);
|
|
31
|
-
}
|
|
32
|
-
return network;
|
|
33
|
-
}
|
|
34
|
-
function getNetwork(argv) {
|
|
35
|
-
return getNetworkForName(argv.network);
|
|
36
|
-
}
|
|
37
|
-
function formatString(parsed, argv) {
|
|
38
|
-
switch (argv.format) {
|
|
39
|
-
case 'json':
|
|
40
|
-
return JSON.stringify(parsed, null, 2);
|
|
41
|
-
case 'tree':
|
|
42
|
-
return format_1.formatTree(parsed, { hide: argv.all ? [] : undefined });
|
|
43
|
-
}
|
|
44
|
-
throw new Error(`invalid format ${argv.format}`);
|
|
45
|
-
}
|
|
46
|
-
function resolveNetwork(args) {
|
|
47
|
-
if (args.network) {
|
|
48
|
-
return { ...args, network: getNetworkForName(args.network) };
|
|
49
|
-
}
|
|
50
|
-
return { ...args, network: undefined };
|
|
51
|
-
}
|
|
52
|
-
function getTxParser(argv) {
|
|
53
|
-
if (argv.all) {
|
|
54
|
-
return new TxParser_1.TxParser({ ...argv, ...TxParser_1.TxParser.PARSE_ALL });
|
|
55
|
-
}
|
|
56
|
-
return new TxParser_1.TxParser({
|
|
57
|
-
...argv,
|
|
58
|
-
parseSignatureData: {
|
|
59
|
-
script: argv.parseSignatureData,
|
|
60
|
-
ecdsa: argv.parseSignatureData,
|
|
61
|
-
schnorr: argv.parseSignatureData,
|
|
62
|
-
},
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
exports.getTxParser = getTxParser;
|
|
66
|
-
function getAddressParser(argv) {
|
|
67
|
-
return new AddressParser_1.AddressParser(resolveNetwork(argv));
|
|
68
|
-
}
|
|
69
|
-
exports.getAddressParser = getAddressParser;
|
|
70
|
-
exports.cmdParseTx = {
|
|
71
|
-
command: 'parseTx [path]',
|
|
72
|
-
aliases: ['parse', 'tx'],
|
|
73
|
-
describe: 'Display transaction components in human-readable form. ' +
|
|
74
|
-
'Supported formats are Partially Signed Bitcoin Transaction (PSBT), ' +
|
|
75
|
-
'bitcoinjs-lib encoding (Legacy) or fully signed transaction. ' +
|
|
76
|
-
'Bytes must be encoded in hex format.',
|
|
77
|
-
builder(b) {
|
|
78
|
-
return b
|
|
79
|
-
.option('path', { type: 'string', nargs: 1, default: '' })
|
|
80
|
-
.option('stdin', { type: 'boolean', default: false })
|
|
81
|
-
.option('hex', { type: 'string', description: 'transaction bytes (hex-encoded)' })
|
|
82
|
-
.option('clipboard', { type: 'boolean', default: false })
|
|
83
|
-
.option('txid', { type: 'string' })
|
|
84
|
-
.option('fetchAll', { type: 'boolean', default: false })
|
|
85
|
-
.option('fetchStatus', { type: 'boolean', default: false })
|
|
86
|
-
.option('fetchInputs', { type: 'boolean', default: false })
|
|
87
|
-
.option('fetchSpends', { type: 'boolean', default: false })
|
|
88
|
-
.option('network', { alias: 'n', type: 'string', demandOption: true })
|
|
89
|
-
.option('parseScriptAsm', { alias: 'scriptasm', type: 'boolean', default: false })
|
|
90
|
-
.option('parseScriptData', { alias: 'scriptdata', type: 'boolean', default: false })
|
|
91
|
-
.option('parseSignatureData', { alias: 'sigdata', type: 'boolean', default: false })
|
|
92
|
-
.option('parseOutputScript', { type: 'boolean', default: false })
|
|
93
|
-
.option('parseAsUnknown', {
|
|
94
|
-
type: 'boolean',
|
|
95
|
-
default: false,
|
|
96
|
-
description: 'show plain Javascript object without any post-processing',
|
|
97
|
-
})
|
|
98
|
-
.option('maxOutputs', { type: 'number' })
|
|
99
|
-
.option('vin', { type: 'number' })
|
|
100
|
-
.array('vin')
|
|
101
|
-
.option('finalize', {
|
|
102
|
-
type: 'boolean',
|
|
103
|
-
default: false,
|
|
104
|
-
description: 'finalize PSBT and parse result instead of PSBT',
|
|
105
|
-
})
|
|
106
|
-
.option('all', { type: 'boolean', default: false })
|
|
107
|
-
.option('cache', {
|
|
108
|
-
type: 'boolean',
|
|
109
|
-
default: false,
|
|
110
|
-
description: 'use local cache for http responses',
|
|
111
|
-
})
|
|
112
|
-
.option('format', { choices: ['tree', 'json'], default: 'tree' })
|
|
113
|
-
.option('parseError', { choices: ['continue', 'throw'], default: 'continue' });
|
|
114
|
-
},
|
|
115
|
-
async handler(argv) {
|
|
116
|
-
const network = getNetwork(argv);
|
|
117
|
-
let data;
|
|
118
|
-
const httpClient = await getClient({ cache: argv.cache });
|
|
119
|
-
if (argv.txid) {
|
|
120
|
-
data = await fetch_1.fetchTransactionHex(httpClient, argv.txid, network);
|
|
121
|
-
}
|
|
122
|
-
if (argv.stdin || argv.path === '-') {
|
|
123
|
-
if (data) {
|
|
124
|
-
throw new Error(`conflicting arguments`);
|
|
125
|
-
}
|
|
126
|
-
console.log('Reading from stdin. Please paste hex-encoded transaction data.');
|
|
127
|
-
console.log('Press Ctrl-D to finish, or Ctrl-C to cancel.');
|
|
128
|
-
if (process.stdin.isTTY) {
|
|
129
|
-
data = await readStdin_1.readStdin();
|
|
130
|
-
}
|
|
131
|
-
else {
|
|
132
|
-
data = await fs.promises.readFile('/dev/stdin', 'utf8');
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
if (argv.clipboard) {
|
|
136
|
-
if (data) {
|
|
137
|
-
throw new Error(`conflicting arguments`);
|
|
138
|
-
}
|
|
139
|
-
data = await clipboardy_cjs_1.default.read();
|
|
140
|
-
}
|
|
141
|
-
if (argv.path) {
|
|
142
|
-
if (data) {
|
|
143
|
-
throw new Error(`conflicting arguments`);
|
|
144
|
-
}
|
|
145
|
-
data = (await fs.promises.readFile(argv.path, 'utf8')).toString();
|
|
146
|
-
}
|
|
147
|
-
if (argv.hex) {
|
|
148
|
-
if (data) {
|
|
149
|
-
throw new Error(`conflicting arguments`);
|
|
150
|
-
}
|
|
151
|
-
data = argv.hex;
|
|
152
|
-
}
|
|
153
|
-
// strip whitespace
|
|
154
|
-
data = data === null || data === void 0 ? void 0 : data.replace(/\s*/g, '');
|
|
155
|
-
if (!data) {
|
|
156
|
-
throw new Error(`no txdata`);
|
|
157
|
-
}
|
|
158
|
-
const bytes = Buffer.from(data, 'hex');
|
|
159
|
-
// make sure hex was parsed
|
|
160
|
-
if (bytes.toString('hex') !== data) {
|
|
161
|
-
throw new Error(`invalid hex`);
|
|
162
|
-
}
|
|
163
|
-
let tx = utxolib.bitgo.isPsbt(bytes)
|
|
164
|
-
? utxolib.bitgo.createPsbtFromBuffer(bytes, network)
|
|
165
|
-
: utxolib.bitgo.createTransactionFromBuffer(bytes, network, { amountType: 'bigint' });
|
|
166
|
-
const { id: txid } = ParserTx_1.getParserTxProperties(tx, undefined);
|
|
167
|
-
if (tx instanceof utxolib.bitgo.UtxoTransaction) {
|
|
168
|
-
if (argv.txid && txid !== argv.txid) {
|
|
169
|
-
throw new Error(`computed txid does not match txid argument`);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
else if (argv.finalize) {
|
|
173
|
-
tx.finalizeAllInputs();
|
|
174
|
-
tx = tx.extractTransaction();
|
|
175
|
-
}
|
|
176
|
-
if (argv.parseAsUnknown) {
|
|
177
|
-
console.log(formatString(parseUnknown_1.parseUnknown(new Parser_1.Parser(), 'tx', tx), argv));
|
|
178
|
-
return;
|
|
179
|
-
}
|
|
180
|
-
if (argv.fetchAll) {
|
|
181
|
-
argv.fetchStatus = true;
|
|
182
|
-
argv.fetchInputs = true;
|
|
183
|
-
argv.fetchSpends = true;
|
|
184
|
-
}
|
|
185
|
-
const parsed = getTxParser(argv).parse(tx, {
|
|
186
|
-
status: argv.fetchStatus && txid ? await fetch_1.fetchTransactionStatus(httpClient, txid, network) : undefined,
|
|
187
|
-
prevOutputs: argv.fetchInputs ? await fetch_1.fetchPrevOutputs(httpClient, tx) : undefined,
|
|
188
|
-
prevOutputSpends: argv.fetchSpends ? await fetch_1.fetchPrevOutputSpends(httpClient, tx) : undefined,
|
|
189
|
-
outputSpends: argv.fetchSpends && tx instanceof utxolib.bitgo.UtxoTransaction
|
|
190
|
-
? await fetch_1.fetchOutputSpends(httpClient, tx)
|
|
191
|
-
: undefined,
|
|
192
|
-
});
|
|
193
|
-
console.log(formatString(parsed, argv));
|
|
194
|
-
},
|
|
195
|
-
};
|
|
196
|
-
exports.cmdParseAddress = {
|
|
197
|
-
command: 'parseAddress [address]',
|
|
198
|
-
aliases: ['address'],
|
|
199
|
-
describe: 'parse address',
|
|
200
|
-
builder(b) {
|
|
201
|
-
return b
|
|
202
|
-
.option('network', { alias: 'n', type: 'string' })
|
|
203
|
-
.option('format', { choices: ['tree', 'json'], default: 'tree' })
|
|
204
|
-
.option('convert', { type: 'boolean', default: false })
|
|
205
|
-
.option('all', { type: 'boolean', default: false })
|
|
206
|
-
.positional('address', { type: 'string', demandOption: true });
|
|
207
|
-
},
|
|
208
|
-
handler(argv) {
|
|
209
|
-
const parsed = getAddressParser(argv).parse(argv.address);
|
|
210
|
-
console.log(formatString(parsed, argv));
|
|
211
|
-
},
|
|
212
|
-
};
|
|
213
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEseUJBQXlCO0FBQ3pCLG1DQUFtQztBQUNuQywrQkFBaUM7QUFFakMsbURBQXdDO0FBQ3hDLGdEQUFnRDtBQUVoRCxxQ0FBOEM7QUFDOUMscUNBQXNDO0FBQ3RDLG1DQU1pQjtBQUNqQix5Q0FBb0Q7QUFDcEQsbURBQWdEO0FBQ2hELHFEQUFzRjtBQUN0RiwyQ0FBd0M7QUFDeEMsaURBQThDO0FBQzlDLHlDQUFtRDtBQWdDbkQsS0FBSyxVQUFVLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBc0I7SUFDcEQsSUFBSSxLQUFLLEVBQUU7UUFDVCxNQUFNLEtBQUssR0FBRyxnQkFBUyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxNQUFNLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxtQkFBbUIsQ0FBQztRQUNuRCxNQUFNLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0QyxPQUFPLElBQUksNkJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDbkM7SUFDRCxPQUFPLElBQUksMEJBQWMsRUFBRSxDQUFDO0FBQzlCLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLElBQVk7SUFDckMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUEyQixDQUFDLENBQUM7SUFDOUQsSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLE9BQU8sRUFBRSxDQUFDLENBQUM7S0FDL0M7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsSUFBMEM7SUFDNUQsT0FBTyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFD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Q0FBQzthQUNMLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQzthQUNqRCxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQVcsQ0FBQzthQUN6RSxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7YUFDdEQsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO2FBQ2xELFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxPQUFPLENBQUMsSUFBdUM7UUFDN0MsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxRCxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0NBQ08sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmltcG9ydCAqIGFzIHlhcmdzIGZyb20gJ3lhcmdzJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHByb2Nlc3MgZnJvbSAncHJvY2Vzcyc7XG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tICd1dGlsJztcblxuaW1wb3J0IGNsaXBib2FyZHkgZnJvbSAnY2xpcGJvYXJkeS1janMnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5cbmltcG9ydCB7IFBhcnNlciwgUGFyc2VyTm9kZSB9IGZyb20gJy4vUGFyc2VyJztcbmltcG9ydCB7IGZvcm1hdFRyZWUgfSBmcm9tICcuL2Zvcm1hdCc7XG5pbXBvcnQge1xuICBmZXRjaE91dHB1dFNwZW5kcyxcbiAgZmV0Y2hQcmV2T3V0cHV0cyxcbiAgZmV0Y2hQcmV2T3V0cHV0U3BlbmRzLFxuICBmZXRjaFRyYW5zYWN0aW9uSGV4LFxuICBmZXRjaFRyYW5zYWN0aW9uU3RhdHVzLFxufSBmcm9tICcuL2ZldGNoJztcbmltcG9ydCB7IFR4UGFyc2VyLCBUeFBhcnNlckFyZ3MgfSBmcm9tICcuL1R4UGFyc2VyJztcbmltcG9ydCB7IEFkZHJlc3NQYXJzZXIgfSBmcm9tICcuL0FkZHJlc3NQYXJzZXInO1xuaW1wb3J0IHsgQmFzZUh0dHBDbGllbnQsIENhY2hpbmdIdHRwQ2xpZW50LCBIdHRwQ2xpZW50IH0gZnJvbSAnQGJpdGdvLWJldGEvYmxvY2thcGlzJztcbmltcG9ydCB7IHJlYWRTdGRpbiB9IGZyb20gJy4vcmVhZFN0ZGluJztcbmltcG9ydCB7IHBhcnNlVW5rbm93biB9IGZyb20gJy4vcGFyc2VVbmtub3duJztcbmltcG9ydCB7IGdldFBhcnNlclR4UHJvcGVydGllcyB9IGZyb20gJy4vUGFyc2VyVHgnO1xuXG50eXBlIE91dHB1dEZvcm1hdCA9ICd0cmVlJyB8ICdqc29uJztcblxudHlwZSBBcmdzUGFyc2VUcmFuc2FjdGlvbiA9IHtcbiAgbmV0d29yazogc3RyaW5nO1xuICBzdGRpbjogYm9vbGVhbjtcbiAgY2xpcGJvYXJkOiBib29sZWFuO1xuICBwYXRoPzogc3RyaW5nO1xuICB0eGlkPzogc3RyaW5nO1xuICBoZXg/OiBzdHJpbmc7XG4gIGFsbDogYm9vbGVhbjtcbiAgY2FjaGU6IGJvb2xlYW47XG4gIGZvcm1hdDogT3V0cHV0Rm9ybWF0O1xuICBmZXRjaEFsbDogYm9vbGVhbjtcbiAgZmV0Y2hTdGF0dXM6IGJvb2xlYW47XG4gIGZldGNoSW5wdXRzOiBib29sZWFuO1xuICBmZXRjaFNwZW5kczogYm9vbGVhbjtcbiAgZmluYWxpemU6IGJvb2xlYW47XG4gIHBhcnNlU2lnbmF0dXJlRGF0YTogYm9vbGVhbjtcbiAgcGFyc2VBc1Vua25vd246IGJvb2xlYW47XG4gIHBhcnNlRXJyb3I6ICd0aHJvdycgfCAnY29udGludWUnO1xufSAmIE9taXQ8VHhQYXJzZXJBcmdzLCAncGFyc2VTaWduYXR1cmVEYXRhJz47XG5cbnR5cGUgQXJnc1BhcnNlQWRkcmVzcyA9IHtcbiAgbmV0d29yaz86IHN0cmluZztcbiAgYWxsOiBib29sZWFuO1xuICBmb3JtYXQ6IE91dHB1dEZvcm1hdDtcbiAgY29udmVydDogYm9vbGVhbjtcbiAgYWRkcmVzczogc3RyaW5nO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0Q2xpZW50KHsgY2FjaGUgfTogeyBjYWNoZTogYm9vbGVhbiB9KTogUHJvbWlzZTxIdHRwQ2xpZW50PiB7XG4gIGlmIChjYWNoZSkge1xuICAgIGNvbnN0IG1rZGlyID0gcHJvbWlzaWZ5KGZzLm1rZGlyKTtcbiAgICBjb25zdCBkaXIgPSBgJHtwcm9jZXNzLmVudi5IT01FfS8uY2FjaGUvdXR4by1iaW4vYDtcbiAgICBhd2FpdCBta2RpcihkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIHJldHVybiBuZXcgQ2FjaGluZ0h0dHBDbGllbnQoZGlyKTtcbiAgfVxuICByZXR1cm4gbmV3IEJhc2VIdHRwQ2xpZW50KCk7XG59XG5cbmZ1bmN0aW9uIGdldE5ldHdvcmtGb3JOYW1lKG5hbWU6IHN0cmluZykge1xuICBjb25zdCBuZXR3b3JrID0gdXR4b2xpYi5uZXR3b3Jrc1tuYW1lIGFzIHV0eG9saWIuTmV0d29ya05hbWVdO1xuICBpZiAoIW5ldHdvcmspIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgbmV0d29yayAke25ldHdvcmt9YCk7XG4gIH1cbiAgcmV0dXJuIG5ldHdvcms7XG59XG5cbmZ1bmN0aW9uIGdldE5ldHdvcmsoYXJndjogeWFyZ3MuQXJndW1lbnRzPHsgbmV0d29yazogc3RyaW5nIH0+KTogdXR4b2xpYi5OZXR3b3JrIHtcbiAgcmV0dXJuIGdldE5ldHdvcmtGb3JOYW1lKGFyZ3YubmV0d29yayk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFN0cmluZyhcbiAgcGFyc2VkOiBQYXJzZXJOb2RlLFxuICBhcmd2OiB5YXJncy5Bcmd1bWVudHM8e1xuICAgIGZvcm1hdDogT3V0cHV0Rm9ybWF0O1xuICAgIGFsbDogYm9vbGVhbjtcbiAgfT5cbik6IHN0cmluZyB7XG4gIHN3aXRjaCAoYXJndi5mb3JtYXQpIHtcbiAgICBjYXNlICdqc29uJzpcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShwYXJzZWQsIG51bGwsIDIpO1xuICAgIGNhc2UgJ3RyZWUnOlxuICAgICAgcmV0dXJuIGZvcm1hdFRyZWUocGFyc2VkLCB7IGhpZGU6IGFyZ3YuYWxsID8gW10gOiB1bmRlZmluZWQgfSk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGZvcm1hdCAke2FyZ3YuZm9ybWF0fWApO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlTmV0d29yazxUIGV4dGVuZHMgeyBuZXR3b3JrPzogc3RyaW5nIH0+KFxuICBhcmdzOiBUXG4pOiBUICYge1xuICBuZXR3b3JrPzogdXR4b2xpYi5OZXR3b3JrO1xufSB7XG4gIGlmIChhcmdzLm5ldHdvcmspIHtcbiAgICByZXR1cm4geyAuLi5hcmdzLCBuZXR3b3JrOiBnZXROZXR3b3JrRm9yTmFtZShhcmdzLm5ldHdvcmspIH07XG4gIH1cbiAgcmV0dXJuIHsgLi4uYXJncywgbmV0d29yazogdW5kZWZpbmVkIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeFBhcnNlcihhcmd2OiB5YXJncy5Bcmd1bWVudHM8QXJnc1BhcnNlVHJhbnNhY3Rpb24+KTogVHhQYXJzZXIge1xuICBpZiAoYXJndi5hbGwpIHtcbiAgICByZXR1cm4gbmV3IFR4UGFyc2VyKHsgLi4uYXJndiwgLi4uVHhQYXJzZXIuUEFSU0VfQUxMIH0pO1xuICB9XG4gIHJldHVybiBuZXcgVHhQYXJzZXIoe1xuICAgIC4uLmFyZ3YsXG4gICAgcGFyc2VTaWduYXR1cmVEYXRhOiB7XG4gICAgICBzY3JpcHQ6IGFyZ3YucGFyc2VTaWduYXR1cmVEYXRhLFxuICAgICAgZWNkc2E6IGFyZ3YucGFyc2VTaWduYXR1cmVEYXRhLFxuICAgICAgc2Nobm9ycjogYXJndi5wYXJzZVNpZ25hdHVyZURhdGEsXG4gICAgfSxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBZGRyZXNzUGFyc2VyKGFyZ3Y6IEFyZ3NQYXJzZUFkZHJlc3MpOiBBZGRyZXNzUGFyc2VyIHtcbiAgcmV0dXJuIG5ldyBBZGRyZXNzUGFyc2VyKHJlc29sdmVOZXR3b3JrKGFyZ3YpKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNtZFBhcnNlVHggPSB7XG4gIGNvbW1hbmQ6ICdwYXJzZVR4IFtwYXRoXScsXG4gIGFsaWFzZXM6IFsncGFyc2UnLCAndHgnXSxcbiAgZGVzY3JpYmU6XG4gICAgJ0Rpc3BsYXkgdHJhbnNhY3Rpb24gY29tcG9uZW50cyBpbiBodW1hbi1yZWFkYWJsZSBmb3JtLiAnICtcbiAgICAnU3VwcG9ydGVkIGZvcm1hdHMgYXJlIFBhcnRpYWxseSBTaWduZWQgQml0Y29pbiBUcmFuc2FjdGlvbiAoUFNCVCksICcgK1xuICAgICdiaXRjb2luanMtbGliIGVuY29kaW5nIChMZWdhY3kpIG9yIGZ1bGx5IHNpZ25lZCB0cmFuc2FjdGlvbi4gJyArXG4gICAgJ0J5dGVzIG11c3QgYmUgZW5jb2RlZCBpbiBoZXggZm9ybWF0LicsXG5cbiAgYnVpbGRlcihiOiB5YXJncy5Bcmd2PHVua25vd24+KTogeWFyZ3MuQXJndjxBcmdzUGFyc2VUcmFuc2FjdGlvbj4ge1xuICAgIHJldHVybiBiXG4gICAgICAub3B0aW9uKCdwYXRoJywgeyB0eXBlOiAnc3RyaW5nJywgbmFyZ3M6IDEsIGRlZmF1bHQ6ICcnIH0pXG4gICAgICAub3B0aW9uKCdzdGRpbicsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLm9wdGlvbignaGV4JywgeyB0eXBlOiAnc3RyaW5nJywgZGVzY3JpcHRpb246ICd0cmFuc2FjdGlvbiBieXRlcyAoaGV4LWVuY29kZWQpJyB9KVxuICAgICAgLm9wdGlvbignY2xpcGJvYXJkJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAub3B0aW9uKCd0eGlkJywgeyB0eXBlOiAnc3RyaW5nJyB9KVxuICAgICAgLm9wdGlvbignZmV0Y2hBbGwnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAgIC5vcHRpb24oJ2ZldGNoU3RhdHVzJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAub3B0aW9uKCdmZXRjaElucHV0cycsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLm9wdGlvbignZmV0Y2hTcGVuZHMnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAgIC5vcHRpb24oJ25ldHdvcmsnLCB7IGFsaWFzOiAnbicsIHR5cGU6ICdzdHJpbmcnLCBkZW1hbmRPcHRpb246IHRydWUgfSlcbiAgICAgIC5vcHRpb24oJ3BhcnNlU2NyaXB0QXNtJywgeyBhbGlhczogJ3NjcmlwdGFzbScsIHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAgIC5vcHRpb24oJ3BhcnNlU2NyaXB0RGF0YScsIHsgYWxpYXM6ICdzY3JpcHRkYXRhJywgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLm9wdGlvbigncGFyc2VTaWduYXR1cmVEYXRhJywgeyBhbGlhczogJ3NpZ2RhdGEnLCB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAub3B0aW9uKCdwYXJzZU91dHB1dFNjcmlwdCcsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLm9wdGlvbigncGFyc2VBc1Vua25vd24nLCB7XG4gICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnc2hvdyBwbGFpbiBKYXZhc2NyaXB0IG9iamVjdCB3aXRob3V0IGFueSBwb3N0LXByb2Nlc3NpbmcnLFxuICAgICAgfSlcbiAgICAgIC5vcHRpb24oJ21heE91dHB1dHMnLCB7IHR5cGU6ICdudW1iZXInIH0pXG4gICAgICAub3B0aW9uKCd2aW4nLCB7IHR5cGU6ICdudW1iZXInIH0pXG4gICAgICAuYXJyYXkoJ3ZpbicpXG4gICAgICAub3B0aW9uKCdmaW5hbGl6ZScsIHtcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdmaW5hbGl6ZSBQU0JUIGFuZCBwYXJzZSByZXN1bHQgaW5zdGVhZCBvZiBQU0JUJyxcbiAgICAgIH0pXG4gICAgICAub3B0aW9uKCdhbGwnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAgIC5vcHRpb24oJ2NhY2hlJywge1xuICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ3VzZSBsb2NhbCBjYWNoZSBmb3IgaHR0cCByZXNwb25zZXMnLFxuICAgICAgfSlcbiAgICAgIC5vcHRpb24oJ2Zvcm1hdCcsIHsgY2hvaWNlczogWyd0cmVlJywgJ2pzb24nXSwgZGVmYXVsdDogJ3RyZWUnIH0gYXMgY29uc3QpXG4gICAgICAub3B0aW9uKCdwYXJzZUVycm9yJywgeyBjaG9pY2VzOiBbJ2NvbnRpbnVlJywgJ3Rocm93J10sIGRlZmF1bHQ6ICdjb250aW51ZScgfSBhcyBjb25zdCk7XG4gIH0sXG5cbiAgYXN5bmMgaGFuZGxlcihhcmd2OiB5YXJncy5Bcmd1bWVudHM8QXJnc1BhcnNlVHJhbnNhY3Rpb24+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbmV0d29yayA9IGdldE5ldHdvcmsoYXJndik7XG4gICAgbGV0IGRhdGE7XG5cbiAgICBjb25zdCBodHRwQ2xpZW50ID0gYXdhaXQgZ2V0Q2xpZW50KHsgY2FjaGU6IGFyZ3YuY2FjaGUgfSk7XG5cbiAgICBpZiAoYXJndi50eGlkKSB7XG4gICAgICBkYXRhID0gYXdhaXQgZmV0Y2hUcmFuc2FjdGlvbkhleChodHRwQ2xpZW50LCBhcmd2LnR4aWQsIG5ldHdvcmspO1xuICAgIH1cblxuICAgIGlmIChhcmd2LnN0ZGluIHx8IGFyZ3YucGF0aCA9PT0gJy0nKSB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbmZsaWN0aW5nIGFyZ3VtZW50c2ApO1xuICAgICAgfVxuICAgICAgY29uc29sZS5sb2coJ1JlYWRpbmcgZnJvbSBzdGRpbi4gUGxlYXNlIHBhc3RlIGhleC1lbmNvZGVkIHRyYW5zYWN0aW9uIGRhdGEuJyk7XG4gICAgICBjb25zb2xlLmxvZygnUHJlc3MgQ3RybC1EIHRvIGZpbmlzaCwgb3IgQ3RybC1DIHRvIGNhbmNlbC4nKTtcbiAgICAgIGlmIChwcm9jZXNzLnN0ZGluLmlzVFRZKSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCByZWFkU3RkaW4oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZSgnL2Rldi9zdGRpbicsICd1dGY4Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFyZ3YuY2xpcGJvYXJkKSB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbmZsaWN0aW5nIGFyZ3VtZW50c2ApO1xuICAgICAgfVxuICAgICAgZGF0YSA9IGF3YWl0IGNsaXBib2FyZHkucmVhZCgpO1xuICAgIH1cblxuICAgIGlmIChhcmd2LnBhdGgpIHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY29uZmxpY3RpbmcgYXJndW1lbnRzYCk7XG4gICAgICB9XG4gICAgICBkYXRhID0gKGF3YWl0IGZzLnByb21pc2VzLnJlYWRGaWxlKGFyZ3YucGF0aCwgJ3V0ZjgnKSkudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoYXJndi5oZXgpIHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY29uZmxpY3RpbmcgYXJndW1lbnRzYCk7XG4gICAgICB9XG4gICAgICBkYXRhID0gYXJndi5oZXg7XG4gICAgfVxuXG4gICAgLy8gc3RyaXAgd2hpdGVzcGFjZVxuICAgIGRhdGEgPSBkYXRhPy5yZXBsYWNlKC9cXHMqL2csICcnKTtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gdHhkYXRhYCk7XG4gICAgfVxuXG4gICAgY29uc3QgYnl0ZXMgPSBCdWZmZXIuZnJvbShkYXRhLCAnaGV4Jyk7XG5cbiAgICAvLyBtYWtlIHN1cmUgaGV4IHdhcyBwYXJzZWRcbiAgICBpZiAoYnl0ZXMudG9TdHJpbmcoJ2hleCcpICE9PSBkYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgaGV4YCk7XG4gICAgfVxuXG4gICAgbGV0IHR4ID0gdXR4b2xpYi5iaXRnby5pc1BzYnQoYnl0ZXMpXG4gICAgICA/IHV0eG9saWIuYml0Z28uY3JlYXRlUHNidEZyb21CdWZmZXIoYnl0ZXMsIG5ldHdvcmspXG4gICAgICA6IHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tQnVmZmVyKGJ5dGVzLCBuZXR3b3JrLCB7IGFtb3VudFR5cGU6ICdiaWdpbnQnIH0pO1xuXG4gICAgY29uc3QgeyBpZDogdHhpZCB9ID0gZ2V0UGFyc2VyVHhQcm9wZXJ0aWVzKHR4LCB1bmRlZmluZWQpO1xuICAgIGlmICh0eCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uKSB7XG4gICAgICBpZiAoYXJndi50eGlkICYmIHR4aWQgIT09IGFyZ3YudHhpZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbXB1dGVkIHR4aWQgZG9lcyBub3QgbWF0Y2ggdHhpZCBhcmd1bWVudGApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYXJndi5maW5hbGl6ZSkge1xuICAgICAgdHguZmluYWxpemVBbGxJbnB1dHMoKTtcbiAgICAgIHR4ID0gdHguZXh0cmFjdFRyYW5zYWN0aW9uKCk7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3YucGFyc2VBc1Vua25vd24pIHtcbiAgICAgIGNvbnNvbGUubG9nKGZvcm1hdFN0cmluZyhwYXJzZVVua25vd24obmV3IFBhcnNlcigpLCAndHgnLCB0eCksIGFyZ3YpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoYXJndi5mZXRjaEFsbCkge1xuICAgICAgYXJndi5mZXRjaFN0YXR1cyA9IHRydWU7XG4gICAgICBhcmd2LmZldGNoSW5wdXRzID0gdHJ1ZTtcbiAgICAgIGFyZ3YuZmV0Y2hTcGVuZHMgPSB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZCA9IGdldFR4UGFyc2VyKGFyZ3YpLnBhcnNlKHR4LCB7XG4gICAgICBzdGF0dXM6IGFyZ3YuZmV0Y2hTdGF0dXMgJiYgdHhpZCA/IGF3YWl0IGZldGNoVHJhbnNhY3Rpb25TdGF0dXMoaHR0cENsaWVudCwgdHhpZCwgbmV0d29yaykgOiB1bmRlZmluZWQsXG4gICAgICBwcmV2T3V0cHV0czogYXJndi5mZXRjaElucHV0cyA/IGF3YWl0IGZldGNoUHJldk91dHB1dHMoaHR0cENsaWVudCwgdHgpIDogdW5kZWZpbmVkLFxuICAgICAgcHJldk91dHB1dFNwZW5kczogYXJndi5mZXRjaFNwZW5kcyA/IGF3YWl0IGZldGNoUHJldk91dHB1dFNwZW5kcyhodHRwQ2xpZW50LCB0eCkgOiB1bmRlZmluZWQsXG4gICAgICBvdXRwdXRTcGVuZHM6XG4gICAgICAgIGFyZ3YuZmV0Y2hTcGVuZHMgJiYgdHggaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvblxuICAgICAgICAgID8gYXdhaXQgZmV0Y2hPdXRwdXRTcGVuZHMoaHR0cENsaWVudCwgdHgpXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZyhmb3JtYXRTdHJpbmcocGFyc2VkLCBhcmd2KSk7XG4gIH0sXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgY21kUGFyc2VBZGRyZXNzID0ge1xuICBjb21tYW5kOiAncGFyc2VBZGRyZXNzIFthZGRyZXNzXScsXG4gIGFsaWFzZXM6IFsnYWRkcmVzcyddLFxuICBkZXNjcmliZTogJ3BhcnNlIGFkZHJlc3MnLFxuICBidWlsZGVyKGI6IHlhcmdzLkFyZ3Y8dW5rbm93bj4pOiB5YXJncy5Bcmd2PEFyZ3NQYXJzZUFkZHJlc3M+IHtcbiAgICByZXR1cm4gYlxuICAgICAgLm9wdGlvbignbmV0d29yaycsIHsgYWxpYXM6ICduJywgdHlwZTogJ3N0cmluZycgfSlcbiAgICAgIC5vcHRpb24oJ2Zvcm1hdCcsIHsgY2hvaWNlczogWyd0cmVlJywgJ2pzb24nXSwgZGVmYXVsdDogJ3RyZWUnIH0gYXMgY29uc3QpXG4gICAgICAub3B0aW9uKCdjb252ZXJ0JywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAub3B0aW9uKCdhbGwnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAgIC5wb3NpdGlvbmFsKCdhZGRyZXNzJywgeyB0eXBlOiAnc3RyaW5nJywgZGVtYW5kT3B0aW9uOiB0cnVlIH0pO1xuICB9LFxuXG4gIGhhbmRsZXIoYXJndjogeWFyZ3MuQXJndW1lbnRzPEFyZ3NQYXJzZUFkZHJlc3M+KTogdm9pZCB7XG4gICAgY29uc3QgcGFyc2VkID0gZ2V0QWRkcmVzc1BhcnNlcihhcmd2KS5wYXJzZShhcmd2LmFkZHJlc3MpO1xuICAgIGNvbnNvbGUubG9nKGZvcm1hdFN0cmluZyhwYXJzZWQsIGFyZ3YpKTtcbiAgfSxcbn0gYXMgY29uc3Q7XG4iXX0=
|
package/dist/src/readStdin.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"readStdin.d.ts","sourceRoot":"","sources":["../../src/readStdin.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAgCjD"}
|
package/dist/src/readStdin.js
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*
|
|
3
|
-
* Contains a high-performance implementation of reading from stdin.
|
|
4
|
-
* Standard readline is extremely slow for long lines.
|
|
5
|
-
*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.readStdin = void 0;
|
|
8
|
-
/**
|
|
9
|
-
* Reads from stdin until Ctrl-D is pressed.
|
|
10
|
-
*/
|
|
11
|
-
async function readStdin() {
|
|
12
|
-
return new Promise((resolve, reject) => {
|
|
13
|
-
// Using readline is not an option because it is extremely slow for long lines.
|
|
14
|
-
// By enabling raw mode, we can read more than 4096 bytes, but it requires manual Ctrl-C/Ctrl-D handling
|
|
15
|
-
if (!process.stdin.setRawMode) {
|
|
16
|
-
throw new Error('stdin is not a tty');
|
|
17
|
-
}
|
|
18
|
-
process.stdin.setRawMode(true);
|
|
19
|
-
const buf = [];
|
|
20
|
-
process.stdin.on('data', (chunk) => {
|
|
21
|
-
if (chunk[0] === 0x03) {
|
|
22
|
-
// Ctrl-C
|
|
23
|
-
process.exit(130);
|
|
24
|
-
}
|
|
25
|
-
if (chunk[0] === 0x04) {
|
|
26
|
-
// Ctrl-D
|
|
27
|
-
process.stdin.emit('end');
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
buf.push(chunk);
|
|
31
|
-
process.stdout.write(chunk);
|
|
32
|
-
});
|
|
33
|
-
process.stdin.on('end', () => {
|
|
34
|
-
resolve(Buffer.concat(buf).toString('utf8'));
|
|
35
|
-
});
|
|
36
|
-
process.stdin.on('error', (err) => {
|
|
37
|
-
reject(err);
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
exports.readStdin = readStdin;
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZFN0ZGluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlYWRTdGRpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFFSDs7R0FFRztBQUNJLEtBQUssVUFBVSxTQUFTO0lBQzdCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsK0VBQStFO1FBQy9FLHdHQUF3RztRQUN4RyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsTUFBTSxHQUFHLEdBQWEsRUFBRSxDQUFDO1FBRXpCLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2pDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDckIsU0FBUztnQkFDVCxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ25CO1lBQ0QsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO2dCQUNyQixTQUFTO2dCQUNULE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMxQixPQUFPO2FBQ1I7WUFDRCxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hCLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtZQUMzQixPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBaENELDhCQWdDQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb250YWlucyBhIGhpZ2gtcGVyZm9ybWFuY2UgaW1wbGVtZW50YXRpb24gb2YgcmVhZGluZyBmcm9tIHN0ZGluLlxuICogU3RhbmRhcmQgcmVhZGxpbmUgaXMgZXh0cmVtZWx5IHNsb3cgZm9yIGxvbmcgbGluZXMuXG4gKi9cblxuLyoqXG4gKiBSZWFkcyBmcm9tIHN0ZGluIHVudGlsIEN0cmwtRCBpcyBwcmVzc2VkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFN0ZGluKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgLy8gVXNpbmcgcmVhZGxpbmUgaXMgbm90IGFuIG9wdGlvbiBiZWNhdXNlIGl0IGlzIGV4dHJlbWVseSBzbG93IGZvciBsb25nIGxpbmVzLlxuICAgIC8vIEJ5IGVuYWJsaW5nIHJhdyBtb2RlLCB3ZSBjYW4gcmVhZCBtb3JlIHRoYW4gNDA5NiBieXRlcywgYnV0IGl0IHJlcXVpcmVzIG1hbnVhbCBDdHJsLUMvQ3RybC1EIGhhbmRsaW5nXG4gICAgaWYgKCFwcm9jZXNzLnN0ZGluLnNldFJhd01vZGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc3RkaW4gaXMgbm90IGEgdHR5Jyk7XG4gICAgfVxuICAgIHByb2Nlc3Muc3RkaW4uc2V0UmF3TW9kZSh0cnVlKTtcbiAgICBjb25zdCBidWY6IEJ1ZmZlcltdID0gW107XG5cbiAgICBwcm9jZXNzLnN0ZGluLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICBpZiAoY2h1bmtbMF0gPT09IDB4MDMpIHtcbiAgICAgICAgLy8gQ3RybC1DXG4gICAgICAgIHByb2Nlc3MuZXhpdCgxMzApO1xuICAgICAgfVxuICAgICAgaWYgKGNodW5rWzBdID09PSAweDA0KSB7XG4gICAgICAgIC8vIEN0cmwtRFxuICAgICAgICBwcm9jZXNzLnN0ZGluLmVtaXQoJ2VuZCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBidWYucHVzaChjaHVuayk7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShjaHVuayk7XG4gICAgfSk7XG5cbiAgICBwcm9jZXNzLnN0ZGluLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICByZXNvbHZlKEJ1ZmZlci5jb25jYXQoYnVmKS50b1N0cmluZygndXRmOCcpKTtcbiAgICB9KTtcblxuICAgIHByb2Nlc3Muc3RkaW4ub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgcmVqZWN0KGVycik7XG4gICAgfSk7XG4gIH0pO1xufVxuIl19
|