@bitgo-beta/unspents 0.13.2-beta.9 → 0.13.2-beta.91

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.
Files changed (56) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/bin/generate_tables.ts +94 -0
  3. package/dist/bin/generate_tables.d.ts +2 -0
  4. package/dist/bin/generate_tables.d.ts.map +1 -0
  5. package/dist/bin/generate_tables.js +94 -0
  6. package/dist/{codes.d.ts → src/codes.d.ts} +1 -0
  7. package/dist/src/codes.d.ts.map +1 -0
  8. package/dist/src/codes.js +168 -0
  9. package/dist/{dimensions.d.ts → src/dimensions.d.ts} +6 -7
  10. package/dist/src/dimensions.d.ts.map +1 -0
  11. package/dist/src/dimensions.js +485 -0
  12. package/dist/{index.d.ts → src/index.d.ts} +1 -0
  13. package/dist/src/index.d.ts.map +1 -0
  14. package/dist/{index.js → src/index.js} +1 -1
  15. package/dist/{inputWeights.d.ts → src/inputWeights.d.ts} +1 -0
  16. package/dist/src/inputWeights.d.ts.map +1 -0
  17. package/dist/src/inputWeights.js +97 -0
  18. package/dist/{scriptSizes.d.ts → src/scriptSizes.d.ts} +1 -0
  19. package/dist/src/scriptSizes.d.ts.map +1 -0
  20. package/dist/src/scriptSizes.js +51 -0
  21. package/dist/{types.d.ts → src/types.d.ts} +1 -0
  22. package/dist/src/types.d.ts.map +1 -0
  23. package/dist/{types.js → src/types.js} +1 -1
  24. package/dist/{virtualSizes.d.ts → src/virtualSizes.d.ts} +1 -0
  25. package/dist/src/virtualSizes.d.ts.map +1 -0
  26. package/dist/src/virtualSizes.js +114 -0
  27. package/dist/test/chain.d.ts +2 -0
  28. package/dist/test/chain.d.ts.map +1 -0
  29. package/dist/test/chain.js +92 -0
  30. package/dist/test/dimensions.d.ts +2 -0
  31. package/dist/test/dimensions.d.ts.map +1 -0
  32. package/dist/test/dimensions.js +211 -0
  33. package/dist/test/signedTx/inputWeights.d.ts +2 -0
  34. package/dist/test/signedTx/inputWeights.d.ts.map +1 -0
  35. package/dist/test/signedTx/inputWeights.js +113 -0
  36. package/dist/test/signedTx/txCombinations.d.ts +3 -0
  37. package/dist/test/signedTx/txCombinations.d.ts.map +1 -0
  38. package/dist/test/signedTx/txCombinations.js +116 -0
  39. package/dist/test/signedTx/txGen.d.ts +75 -0
  40. package/dist/test/signedTx/txGen.d.ts.map +1 -0
  41. package/dist/test/signedTx/txGen.js +219 -0
  42. package/dist/test/testutils.d.ts +36 -0
  43. package/dist/test/testutils.d.ts.map +1 -0
  44. package/dist/test/testutils.js +176 -0
  45. package/dist/test/virtualSizes.d.ts +2 -0
  46. package/dist/test/virtualSizes.d.ts.map +1 -0
  47. package/dist/test/virtualSizes.js +18 -0
  48. package/dist/tsconfig.build.tsbuildinfo +1 -0
  49. package/dist/tsconfig.tsbuildinfo +1 -0
  50. package/docs/input-costs.md +13 -0
  51. package/package.json +5 -5
  52. package/dist/codes.js +0 -168
  53. package/dist/dimensions.js +0 -490
  54. package/dist/inputWeights.js +0 -97
  55. package/dist/scriptSizes.js +0 -51
  56. package/dist/virtualSizes.js +0 -114
@@ -0,0 +1,485 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.Dimensions = exports.OutputDimensions = exports.VirtualSizes = void 0;
23
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
24
+ const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
25
+ const { isChainCode, scriptTypeForChain } = utxo_lib_1.bitgo;
26
+ const scriptSizes_1 = require("./scriptSizes");
27
+ const types_1 = require("./types");
28
+ const virtualSizes_1 = require("./virtualSizes");
29
+ Object.defineProperty(exports, "VirtualSizes", { enumerable: true, get: function () { return virtualSizes_1.VirtualSizes; } });
30
+ /**
31
+ * Apply `f` to all properties of `d`
32
+ */
33
+ function mapDimensions(d, f) {
34
+ return new Dimensions(Object.fromEntries(Object.entries(d).map(([key, value]) => [key, f(key, value)])));
35
+ }
36
+ /**
37
+ * Aggregate count and size of transaction outputs
38
+ */
39
+ class OutputDimensions {
40
+ constructor({ count = 0, size = 0 } = { count: 0, size: 0 }) {
41
+ if (count === 0 || size === 0) {
42
+ if (count !== 0 || size !== 0) {
43
+ throw new Error(`count and size must both be zero if one is zero`);
44
+ }
45
+ }
46
+ this.count = count;
47
+ this.size = size;
48
+ Object.freeze(this);
49
+ }
50
+ }
51
+ exports.OutputDimensions = OutputDimensions;
52
+ const defaultUnspentParams = {
53
+ p2tr: {
54
+ scriptPathLevel: 1,
55
+ },
56
+ p2trMusig2: {
57
+ // Default to script path spend, to make it easier for recovery case callers (WRW etc).
58
+ // WP can explicitly pass undefined to use key path.
59
+ scriptPathLevel: 1,
60
+ },
61
+ };
62
+ /**
63
+ * Dimensions of a BitGo wallet transactions.
64
+ */
65
+ class Dimensions {
66
+ constructor(d = {}) {
67
+ /** Input counts for BitGo wallet multi-signature inputs */
68
+ this.nP2shInputs = 0;
69
+ this.nP2shP2wshInputs = 0;
70
+ this.nP2wshInputs = 0;
71
+ this.nP2trKeypathInputs = 0;
72
+ this.nP2trScriptPathLevel1Inputs = 0;
73
+ this.nP2trScriptPathLevel2Inputs = 0;
74
+ /* Input count for single-signature inputs (Replay Protection inputs) */
75
+ this.nP2shP2pkInputs = 0;
76
+ this.outputs = new OutputDimensions();
77
+ Object.entries(d).forEach(([key, value]) => this.setProperty(key, value));
78
+ Object.freeze(this);
79
+ }
80
+ setProperty(k, v) {
81
+ switch (k) {
82
+ case 'nP2shInputs':
83
+ case 'nP2shP2wshInputs':
84
+ case 'nP2wshInputs':
85
+ case 'nP2trKeypathInputs':
86
+ case 'nP2trScriptPathLevel1Inputs':
87
+ case 'nP2trScriptPathLevel2Inputs':
88
+ case 'nP2shP2pkInputs':
89
+ if (typeof v !== 'number') {
90
+ throw new Error(`property ${k} must be number`);
91
+ }
92
+ if (!Number.isSafeInteger(v) || v < 0) {
93
+ throw new Error(`property ${k} must be zero or positive integer`);
94
+ }
95
+ break;
96
+ case 'outputs':
97
+ if (!(v instanceof OutputDimensions)) {
98
+ v = new OutputDimensions(v);
99
+ }
100
+ break;
101
+ default:
102
+ throw new Error(`unknown property ${k}`);
103
+ }
104
+ this[k] = v;
105
+ }
106
+ /**
107
+ * @deprecated use ZERO
108
+ * @return Dimensions for an empty transaction
109
+ */
110
+ static zero() {
111
+ return this.ZERO;
112
+ }
113
+ /**
114
+ * @param size
115
+ * @return Dimensions for a single output with given size
116
+ */
117
+ static singleOutput(size) {
118
+ return Dimensions.sum({ outputs: { count: 1, size } });
119
+ }
120
+ /**
121
+ * @return Number of total inputs (p2sh + p2shP2wsh + p2wsh + p2tr)
122
+ */
123
+ get nInputs() {
124
+ return (this.nP2shInputs +
125
+ this.nP2shP2wshInputs +
126
+ this.nP2wshInputs +
127
+ this.nP2trKeypathInputs +
128
+ this.nP2trScriptPathLevel1Inputs +
129
+ this.nP2trScriptPathLevel2Inputs +
130
+ this.nP2shP2pkInputs);
131
+ }
132
+ set nInputs(_) {
133
+ throw new Error('read-only property nInputs');
134
+ }
135
+ /**
136
+ * @return Number of total outputs
137
+ */
138
+ get nOutputs() {
139
+ return this.outputs.count;
140
+ }
141
+ set nOutputs(_) {
142
+ throw new Error(`read-only property nOutputs`);
143
+ }
144
+ /**
145
+ * @param args - Dimensions (can be partially defined)
146
+ * @return {Dimensions} sum of arguments
147
+ */
148
+ static sum(...args) {
149
+ return args.reduce((a, b) => a.plus(b), new Dimensions());
150
+ }
151
+ /**
152
+ * @param chain
153
+ * @return {Number}
154
+ */
155
+ static getOutputScriptLengthForChain(chain) {
156
+ switch (scriptTypeForChain(chain)) {
157
+ case 'p2wsh':
158
+ case 'p2tr':
159
+ case 'p2trMusig2':
160
+ return 34;
161
+ default:
162
+ return 23;
163
+ }
164
+ }
165
+ /**
166
+ * @param scriptLength
167
+ * @return {Number} vSize of an output with script length
168
+ */
169
+ static getVSizeForOutputWithScriptLength(scriptLength) {
170
+ if (!types_1.PositiveInteger.is(scriptLength)) {
171
+ throw new TypeError(`expected positive integer for scriptLength, got ${scriptLength}`);
172
+ }
173
+ return scriptLength + scriptSizes_1.compactSize(scriptLength) + virtualSizes_1.VirtualSizes.txOutputAmountSize;
174
+ }
175
+ /**
176
+ * @return
177
+ */
178
+ static fromScriptType(scriptType, params = {}) {
179
+ switch (scriptType) {
180
+ case 'p2sh':
181
+ case 'p2shP2wsh':
182
+ case 'p2wsh':
183
+ case 'p2shP2pk':
184
+ return Dimensions.SingleInput[scriptType];
185
+ case 'p2tr':
186
+ case 'taprootScriptPathSpend':
187
+ switch (params.scriptPathLevel) {
188
+ case 1:
189
+ return Dimensions.SingleInput.p2trScriptPathLevel1;
190
+ case 2:
191
+ return Dimensions.SingleInput.p2trScriptPathLevel2;
192
+ default:
193
+ throw new Error(`unexpected script path level`);
194
+ }
195
+ case 'p2trMusig2':
196
+ switch (params.scriptPathLevel) {
197
+ case undefined:
198
+ return Dimensions.SingleInput.p2trKeypath;
199
+ case 1:
200
+ return Dimensions.SingleInput.p2trScriptPathLevel1;
201
+ default:
202
+ throw new Error(`unexpected script path level`);
203
+ }
204
+ case 'taprootKeyPathSpend':
205
+ return Dimensions.SingleInput.p2trKeypath;
206
+ default:
207
+ throw new Error(`unexpected scriptType ${scriptType}`);
208
+ }
209
+ }
210
+ static getAssumedDimension(params = {}, index) {
211
+ const { assumeUnsigned } = params;
212
+ if (!assumeUnsigned) {
213
+ throw new Error(`illegal input ${index}: empty script and assumeUnsigned not set`);
214
+ }
215
+ return assumeUnsigned;
216
+ }
217
+ /**
218
+ * @param input - the transaction input to count
219
+ * @param params
220
+ * [param.assumeUnsigned] - default type for unsigned input
221
+ */
222
+ static fromInput(input, params = {}) {
223
+ var _a, _b;
224
+ if (((_a = input.script) === null || _a === void 0 ? void 0 : _a.length) || ((_b = input.witness) === null || _b === void 0 ? void 0 : _b.length)) {
225
+ const parsed = utxolib.bitgo.parseSignatureScript(input);
226
+ return Dimensions.fromScriptType(parsed.scriptType, parsed);
227
+ }
228
+ return Dimensions.getAssumedDimension(params, input.index);
229
+ }
230
+ /**
231
+ * Create Dimensions from psbt input
232
+ * @param input - psbt input
233
+ */
234
+ static fromPsbtInput(input) {
235
+ const parsed = utxo_lib_1.bitgo.parsePsbtInput(input);
236
+ return Dimensions.fromScriptType(parsed.scriptType, parsed);
237
+ }
238
+ /**
239
+ * @param inputs - Array of inputs
240
+ * @param params - @see Dimensions.fromInput()
241
+ * @return {Dimensions} sum of the dimensions for each input (@see Dimensions.fromInput())
242
+ */
243
+ static fromInputs(inputs, params) {
244
+ if (!Array.isArray(inputs)) {
245
+ throw new TypeError(`inputs must be array`);
246
+ }
247
+ return Dimensions.sum(...inputs.map((i) => Dimensions.fromInput(i, params)));
248
+ }
249
+ /**
250
+ * Create Dimensions from multiple psbt inputs
251
+ * @param inputs psbt input array
252
+ * @return {Dimensions} sum of the dimensions for each input (@see Dimensions.fromPsbtInput())
253
+ */
254
+ static fromPsbtInputs(inputs) {
255
+ if (!Array.isArray(inputs)) {
256
+ throw new TypeError(`inputs must be array`);
257
+ }
258
+ return Dimensions.sum(...inputs.map((input, _) => Dimensions.fromPsbtInput(input)));
259
+ }
260
+ /**
261
+ * @param scriptLength {number} - size of the output script in bytes
262
+ * @return {Dimensions} - Dimensions of the output
263
+ */
264
+ static fromOutputScriptLength(scriptLength) {
265
+ return Dimensions.sum({
266
+ outputs: {
267
+ count: 1,
268
+ size: Dimensions.getVSizeForOutputWithScriptLength(scriptLength),
269
+ },
270
+ });
271
+ }
272
+ /**
273
+ * @param output - a tx output
274
+ * @return Dimensions - the dimensions of the given output
275
+ */
276
+ static fromOutput({ script }) {
277
+ if (!script) {
278
+ throw new Error('expected output script to be defined');
279
+ }
280
+ if (!Buffer.isBuffer(script)) {
281
+ throw new TypeError('expected script to be buffer, got ' + typeof script);
282
+ }
283
+ return Dimensions.fromOutputScriptLength(script.length);
284
+ }
285
+ /**
286
+ * @param outputs - Array of outputs
287
+ * @return {Dimensions} sum of the dimensions for each output (@see Dimensions.fromOutput())
288
+ */
289
+ static fromOutputs(outputs) {
290
+ if (!Array.isArray(outputs)) {
291
+ throw new TypeError(`outputs must be array`);
292
+ }
293
+ return Dimensions.sum(...outputs.map(Dimensions.fromOutput));
294
+ }
295
+ /**
296
+ * Returns the dimensions of an output that will be created on a specific chain.
297
+ * Currently, this simply adds a default output.
298
+ *
299
+ * @param chain - Chain code as defined by utxolib.bitgo
300
+ * @return {Dimensions} - Dimensions for a single output on the given chain.
301
+ */
302
+ static fromOutputOnChain(chain) {
303
+ return Dimensions.fromOutputScriptLength(Dimensions.getOutputScriptLengthForChain(chain));
304
+ }
305
+ /**
306
+ * Return dimensions of an unspent according to `chain` parameter
307
+ * @param chain - Chain code as defined by utxo.chain
308
+ * @param params - Hint for unspents with variable input sizes (p2tr).
309
+ * @return {Dimensions} of the unspent
310
+ * @throws if the chain code is invalid or unsupported
311
+ */
312
+ static fromUnspent({ chain }, params = defaultUnspentParams) {
313
+ if (!isChainCode(chain)) {
314
+ throw new TypeError('invalid chain code');
315
+ }
316
+ const scriptType = scriptTypeForChain(chain);
317
+ return Dimensions.fromScriptType(scriptType, scriptType === 'p2tr' ? params.p2tr : scriptType === 'p2trMusig2' ? params.p2trMusig2 : {});
318
+ }
319
+ /**
320
+ * @param unspents
321
+ * @return {Dimensions} sum of the dimensions for each unspent (@see Dimensions.fromUnspent())
322
+ */
323
+ static fromUnspents(unspents) {
324
+ if (!Array.isArray(unspents)) {
325
+ throw new TypeError(`unspents must be array`);
326
+ }
327
+ // Convert the individual unspents into dimensions and sum them up
328
+ return Dimensions.sum(...unspents.map((u) => Dimensions.fromUnspent(u)));
329
+ }
330
+ /**
331
+ * @param transaction - bitcoin-like transaction
332
+ * @param [param.assumeUnsigned] - default type for unsigned inputs
333
+ * @return {Dimensions}
334
+ */
335
+ static fromTransaction({ ins, outs, }, params) {
336
+ return Dimensions.fromInputs(ins, params).plus(Dimensions.fromOutputs(outs));
337
+ }
338
+ /**
339
+ * Create Dimensions from psbt inputs and outputs
340
+ * @param psbt
341
+ * @return {Dimensions}
342
+ */
343
+ static fromPsbt(psbt) {
344
+ return Dimensions.fromPsbtInputs(psbt.data.inputs).plus(Dimensions.fromOutputs(psbt.getUnsignedTx().outs));
345
+ }
346
+ /**
347
+ * @param dimensions (can be partially defined)
348
+ * @return new dimensions with argument added
349
+ */
350
+ plus(dimensions) {
351
+ if (typeof dimensions !== 'object') {
352
+ throw new TypeError(`expected argument to be object`);
353
+ }
354
+ if (!(dimensions instanceof Dimensions)) {
355
+ dimensions = new Dimensions(dimensions);
356
+ }
357
+ // Catch instances where we try to initialize Dimensions from partial data using deprecated parameters
358
+ // using only "nOutputs".
359
+ if ('nOutputs' in dimensions) {
360
+ if (!('outputs' in dimensions)) {
361
+ throw new Error('deprecated partial addition: argument has key "nOutputs" but no "outputs"');
362
+ }
363
+ const { outputs, nOutputs } = dimensions;
364
+ if (outputs.count !== nOutputs) {
365
+ throw new Error('deprecated partial addition: inconsistent values for "nOutputs" and "outputs.count"');
366
+ }
367
+ }
368
+ return mapDimensions(this, (key, v) => {
369
+ var _a;
370
+ const w = (_a = dimensions[key]) !== null && _a !== void 0 ? _a : Dimensions.ZERO[key];
371
+ if (key === 'outputs') {
372
+ const vOutputs = v;
373
+ const wOutputs = w;
374
+ return new OutputDimensions({
375
+ count: vOutputs.count + wOutputs.count,
376
+ size: vOutputs.size + wOutputs.size,
377
+ });
378
+ }
379
+ return v + w;
380
+ });
381
+ }
382
+ /**
383
+ * Multiply dimensions by a given factor
384
+ * @param factor - Positive integer
385
+ * @return {Dimensions}
386
+ */
387
+ times(factor) {
388
+ if (!types_1.PositiveInteger.is(factor)) {
389
+ throw new TypeError(`expected factor to be positive integer`);
390
+ }
391
+ return mapDimensions(this, (key, value) => {
392
+ if (key === 'outputs') {
393
+ const vOutputs = value;
394
+ return {
395
+ count: vOutputs.count * factor,
396
+ size: vOutputs.size * factor,
397
+ };
398
+ }
399
+ return value * factor;
400
+ });
401
+ }
402
+ /**
403
+ * @return Number of total inputs (p2sh, p2shP2wsh and p2wsh)
404
+ * @deprecated use `dimension.nInputs` instead
405
+ */
406
+ getNInputs() {
407
+ return this.nInputs;
408
+ }
409
+ /**
410
+ * @returns {boolean} true iff dimensions have one or more (p2sh)p2wsh inputs
411
+ */
412
+ isSegwit() {
413
+ return (this.nP2wshInputs +
414
+ this.nP2shP2wshInputs +
415
+ this.nP2trKeypathInputs +
416
+ this.nP2trScriptPathLevel1Inputs +
417
+ this.nP2trScriptPathLevel2Inputs >
418
+ 0);
419
+ }
420
+ /**
421
+ * @return {Number} overhead vsize, based on result isSegwit().
422
+ */
423
+ getOverheadVSize() {
424
+ return this.isSegwit() ? virtualSizes_1.VirtualSizes.txSegOverheadVSize : virtualSizes_1.VirtualSizes.txOverheadSize;
425
+ }
426
+ /**
427
+ * @returns {number} vsize of inputs, without transaction overhead
428
+ */
429
+ getInputsVSize() {
430
+ const { txP2shInputSize, txP2shP2wshInputSize, txP2wshInputSize, txP2trKeypathInputSize, txP2trScriptPathLevel1InputSize, txP2trScriptPathLevel2InputSize, txP2shP2pkInputSize, } = virtualSizes_1.VirtualSizes;
431
+ const { nP2shInputs, nP2shP2wshInputs, nP2wshInputs, nP2trKeypathInputs, nP2trScriptPathLevel1Inputs, nP2trScriptPathLevel2Inputs, nP2shP2pkInputs, } = this;
432
+ const size = nP2shInputs * txP2shInputSize +
433
+ nP2shP2wshInputs * txP2shP2wshInputSize +
434
+ nP2wshInputs * txP2wshInputSize +
435
+ nP2trKeypathInputs * txP2trKeypathInputSize +
436
+ nP2shP2pkInputs * txP2shP2pkInputSize +
437
+ nP2trScriptPathLevel1Inputs * txP2trScriptPathLevel1InputSize +
438
+ nP2trScriptPathLevel2Inputs * txP2trScriptPathLevel2InputSize;
439
+ if (Number.isNaN(size)) {
440
+ throw new Error(`invalid size`);
441
+ }
442
+ return size;
443
+ }
444
+ /**
445
+ * @returns {number} return vsize of outputs, without overhead
446
+ */
447
+ getOutputsVSize() {
448
+ return this.outputs.size;
449
+ }
450
+ /**
451
+ * Estimates the virtual size (1/4 weight) of a signed transaction as sum of
452
+ * overhead vsize, input vsize and output vsize.
453
+ * @returns {Number} The estimated vsize of the transaction dimensions.
454
+ */
455
+ getVSize() {
456
+ return this.getOverheadVSize() + this.getInputsVSize() + this.getOutputsVSize();
457
+ }
458
+ }
459
+ exports.Dimensions = Dimensions;
460
+ Dimensions.ZERO = Object.freeze(new Dimensions());
461
+ Dimensions.SingleOutput = Object.freeze({
462
+ p2sh: Dimensions.singleOutput(virtualSizes_1.VirtualSizes.txP2shOutputSize),
463
+ p2shP2wsh: Dimensions.singleOutput(virtualSizes_1.VirtualSizes.txP2shP2wshOutputSize),
464
+ p2wsh: Dimensions.singleOutput(virtualSizes_1.VirtualSizes.txP2wshOutputSize),
465
+ p2tr: Dimensions.singleOutput(virtualSizes_1.VirtualSizes.txP2trOutputSize),
466
+ p2pkh: Dimensions.singleOutput(virtualSizes_1.VirtualSizes.txP2pkhOutputSize),
467
+ p2wpkh: Dimensions.singleOutput(virtualSizes_1.VirtualSizes.txP2wpkhOutputSize),
468
+ });
469
+ Dimensions.SingleInput = Object.freeze({
470
+ p2sh: Dimensions.sum({ nP2shInputs: 1 }),
471
+ p2shP2wsh: Dimensions.sum({ nP2shP2wshInputs: 1 }),
472
+ p2wsh: Dimensions.sum({ nP2wshInputs: 1 }),
473
+ p2trKeypath: Dimensions.sum({ nP2trKeypathInputs: 1 }),
474
+ p2trScriptPathLevel1: Dimensions.sum({ nP2trScriptPathLevel1Inputs: 1 }),
475
+ p2trScriptPathLevel2: Dimensions.sum({ nP2trScriptPathLevel2Inputs: 1 }),
476
+ p2shP2pk: Dimensions.sum({ nP2shP2pkInputs: 1 }),
477
+ });
478
+ Dimensions.ASSUME_P2SH = Dimensions.SingleInput.p2sh;
479
+ Dimensions.ASSUME_P2SH_P2WSH = Dimensions.SingleInput.p2shP2wsh;
480
+ Dimensions.ASSUME_P2WSH = Dimensions.SingleInput.p2wsh;
481
+ Dimensions.ASSUME_P2TR_KEYPATH = Dimensions.SingleInput.p2trKeypath;
482
+ Dimensions.ASSUME_P2TR_SCRIPTPATH_LEVEL1 = Dimensions.SingleInput.p2trScriptPathLevel1;
483
+ Dimensions.ASSUME_P2TR_SCRIPTPATH_LEVEL2 = Dimensions.SingleInput.p2trScriptPathLevel2;
484
+ Dimensions.ASSUME_P2SH_P2PK_INPUT = Dimensions.SingleInput.p2shP2pk;
485
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGltZW5zaW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaW1lbnNpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4REFBZ0Q7QUFDaEQsbURBQTZDO0FBQzdDLE1BQU0sRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxnQkFBSyxDQUFDO0FBR2xELCtDQUE0QztBQUM1QyxtQ0FBMEM7QUFFMUMsaURBQThDO0FBQ3JDLDZGQURBLDJCQUFZLE9BQ0E7QUFFckI7O0dBRUc7QUFDSCxTQUFTLGFBQWEsQ0FDcEIsQ0FBc0IsRUFDdEIsQ0FBZ0Y7SUFFaEYsT0FBTyxJQUFJLFVBQVUsQ0FDbkIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBdUIsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDdEcsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQWEsZ0JBQWdCO0lBVTNCLFlBQVksRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLEtBQXVCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO1FBQzNFLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO1lBQzdCLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO2dCQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7YUFDcEU7U0FDRjtRQUVELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxD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LFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUN4QyxTQUFTLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ2xELEtBQUssRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQzFDLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDdEQsb0JBQW9CLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLDJCQUEyQixFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3hFLG9CQUFvQixFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSwyQkFBMkIsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUN4RSxRQUFRLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNqRCxDQUFDLENBQUM7QUEyQ2Esc0JBQVcsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztBQUMxQyw0QkFBaUIsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztBQUNyRCx1QkFBWSxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO0FBQzVDLDhCQUFtQixHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO0FBQ3pELHdDQUE2QixHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUM7QUFDNUUsd0NBQTZCLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQztBQUM1RSxpQ0FBc0IsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgYml0Z28gfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5jb25zdCB7IGlzQ2hhaW5Db2RlLCBzY3JpcHRUeXBlRm9yQ2hhaW4gfSA9IGJpdGdvO1xudHlwZSBDaGFpbkNvZGUgPSBiaXRnby5DaGFpbkNvZGU7XG5cbmltcG9ydCB7IGNvbXBhY3RTaXplIH0gZnJvbSAnLi9zY3JpcHRTaXplcyc7XG5pbXBvcnQgeyBQb3NpdGl2ZUludGVnZXIgfSBmcm9tICcuL3R5cGVzJztcblxuaW1wb3J0IHsgVmlydHVhbFNpemVzIH0gZnJvbSAnLi92aXJ0dWFsU2l6ZXMnO1xuZXhwb3J0IHsgVmlydHVhbFNpemVzIH07XG5cbi8qKlxuICogQXBwbHkgYGZgIHRvIGFsbCBwcm9wZXJ0aWVzIG9mIGBkYFxuICovXG5mdW5jdGlvbiBtYXBEaW1lbnNpb25zKFxuICBkOiBQYXJ0aWFsPERpbWVuc2lvbnM+LFxuICBmOiA8VCBleHRlbmRzIGtleW9mIERpbWVuc2lvbnM+KGtleTogVCwgdjogRGltZW5zaW9uc1tUXSB8IHVuZGVmaW5lZCkgPT4gdW5rbm93blxuKTogRGltZW5zaW9ucyB7XG4gIHJldHVybiBuZXcgRGltZW5zaW9ucyhcbiAgICBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoZCkubWFwKChba2V5LCB2YWx1ZV0pID0+IFtrZXksIGYoa2V5IGFzIGtleW9mIERpbWVuc2lvbnMsIHZhbHVlKV0pKVxuICApO1xufVxuXG4vKipcbiAqIEFnZ3JlZ2F0ZSBjb3VudCBhbmQgc2l6ZSBvZiB0cmFuc2FjdGlvbiBvdXRwdXRzXG4gKi9cbmV4cG9ydCBjbGFzcyBPdXRwdXREaW1lbnNpb25zIHtcbiAgLyoqXG4gICAqIE51bWJlciBvZiBvdXRwdXRzXG4gICAqL1xuICBjb3VudDogbnVtYmVyO1xuICAvKipcbiAgICogQWdncmVnYXRlIHZTaXplXG4gICAqL1xuICBzaXplOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoeyBjb3VudCA9IDAsIHNpemUgPSAwIH06IE91dHB1dERpbWVuc2lvbnMgPSB7IGNvdW50OiAwLCBzaXplOiAwIH0pIHtcbiAgICBpZiAoY291bnQgPT09IDAgfHwgc2l6ZSA9PT0gMCkge1xuICAgICAgaWYgKGNvdW50ICE9PSAwIHx8IHNpemUgIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjb3VudCBhbmQgc2l6ZSBtdXN0IGJvdGggYmUgemVybyBpZiBvbmUgaXMgemVyb2ApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY291bnQgPSBjb3VudDtcbiAgICB0aGlzLnNpemUgPSBzaXplO1xuXG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzKTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgRnJvbUlucHV0UGFyYW1zIHtcbiAgLy8gSW4gY2FzZXMgd2hlcmUgdGhlIGlucHV0IHR5cGUgaXMgYW1iaWd1b3VzLCB3ZSBtdXN0IHByb3ZpZGUgYSBoaW50IGFib3V0IHNwZW5kIHNjcmlwdCB0eXBlLlxuICBhc3N1bWVVbnNpZ25lZD86IERpbWVuc2lvbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRnJvbVVuc3BlbnRQYXJhbXMge1xuICBwMnRyOiB7XG4gICAgc2NyaXB0UGF0aExldmVsPzogbnVtYmVyO1xuICB9O1xuICBwMnRyTXVzaWcyOiB7XG4gICAgc2NyaXB0UGF0aExldmVsPzogbnVtYmVyO1xuICB9O1xufVxuXG5jb25zdCBkZWZhdWx0VW5zcGVudFBhcmFtczogRnJvbVVuc3BlbnRQYXJhbXMgPSB7XG4gIHAydHI6IHtcbiAgICBzY3JpcHRQYXRoTGV2ZWw6IDEsXG4gIH0sXG4gIHAydHJNdXNpZzI6IHtcbiAgICAvLyBEZWZhdWx0IHRvIHNjcmlwdCBwYXRoIHNwZW5kLCB0byBtYWtlIGl0IGVhc2llciBmb3IgcmVjb3ZlcnkgY2FzZSBjYWxsZXJzIChXUlcgZXRjKS5cbiAgICAvLyBXUCBjYW4gZXhwbGljaXRseSBwYXNzIHVuZGVmaW5lZCB0byB1c2Uga2V5IHBhdGguXG4gICAgc2NyaXB0UGF0aExldmVsOiAxLFxuICB9LFxufTtcblxuLyoqXG4gKiBEaW1lbnNpb25zIG9mIGEgQml0R28gd2FsbGV0IHRyYW5zYWN0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIERpbWVuc2lvbnMge1xuICAvKiogSW5wdXQgY291bnRzIGZvciBCaXRHbyB3YWxsZXQgbXVsdGktc2lnbmF0dXJlIGlucHV0cyAqL1xuICBwdWJsaWMgcmVhZG9ubHkgblAyc2hJbnB1dHM6IG51bWJlciA9IDA7XG4gIHB1YmxpYyByZWFkb25seSBuUDJzaFAyd3NoSW5wdXRzOiBudW1iZXIgPSAwO1xuICBwdWJsaWMgcmVhZG9ubHkgblAyd3NoSW5wdXRzOiBudW1iZXIgPSAwO1xuICBwdWJsaWMgcmVhZG9ubHkgblAydHJLZXlwYXRoSW5wdXRzOiBudW1iZXIgPSAwO1xuICBwdWJsaWMgcmVhZG9ubHkgblAydHJTY3JpcHRQYXRoTGV2ZWwxSW5wdXRzOiBudW1iZXIgPSAwO1xuICBwdWJsaWMgcmVhZG9ubHkgblAydHJTY3JpcHRQYXRoTGV2ZWwySW5wdXRzOiBudW1iZXIgPSAwO1xuXG4gIC8qIElucHV0IGNvdW50IGZvciBzaW5nbGUtc2lnbmF0dXJlIGlucHV0cyAoUmVwbGF5IFByb3RlY3Rpb24gaW5wdXRzKSAqL1xuICBwdWJsaWMgcmVhZG9ubHkgblAyc2hQMnBrSW5wdXRzOiBudW1iZXIgPSAwO1xuXG4gIHB1YmxpYyByZWFkb25seSBvdXRwdXRzOiBPdXRwdXREaW1lbnNpb25zID0gbmV3IE91dHB1dERpbWVuc2lvbnMoKTtcblxuICBjb25zdHJ1Y3RvcihkOiBQYXJ0aWFsPERpbWVuc2lvbnM+ID0ge30pIHtcbiAgICBPYmplY3QuZW50cmllcyhkKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHRoaXMuc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSkpO1xuXG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UHJvcGVydHkoazogc3RyaW5nLCB2OiB1bmtub3duKTogdm9pZCB7XG4gICAgc3dpdGNoIChrKSB7XG4gICAgICBjYXNlICduUDJzaElucHV0cyc6XG4gICAgICBjYXNlICduUDJzaFAyd3NoSW5wdXRzJzpcbiAgICAgIGNhc2UgJ25QMndzaElucHV0cyc6XG4gICAgICBjYXNlICduUDJ0cktleXBhdGhJbnB1dHMnOlxuICAgICAgY2FzZSAnblAydHJTY3JpcHRQYXRoTGV2ZWwxSW5wdXRzJzpcbiAgICAgIGNhc2UgJ25QMnRyU2NyaXB0UGF0aExldmVsMklucHV0cyc6XG4gICAgICBjYXNlICduUDJzaFAycGtJbnB1dHMnOlxuICAgICAgICBpZiAodHlwZW9mIHYgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcm9wZXJ0eSAke2t9IG11c3QgYmUgbnVtYmVyYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcih2KSB8fCB2IDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgcHJvcGVydHkgJHtrfSBtdXN0IGJlIHplcm8gb3IgcG9zaXRpdmUgaW50ZWdlcmApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnb3V0cHV0cyc6XG4gICAgICAgIGlmICghKHYgaW5zdGFuY2VvZiBPdXRwdXREaW1lbnNpb25zKSkge1xuICAgICAgICAgIHYgPSBuZXcgT3V0cHV0RGltZW5zaW9ucyh2IGFzIE91dHB1dERpbWVuc2lvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIHByb3BlcnR5ICR7a31gKTtcbiAgICB9XG5cbiAgICAodGhpcyBhcyBhbnkpW2tdID0gdjtcbiAgfVxuXG4gIHN0YXRpYyByZWFkb25seSBaRVJPID0gT2JqZWN0LmZyZWV6ZShuZXcgRGltZW5zaW9ucygpKTtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIFpFUk9cbiAgICogQHJldHVybiBEaW1lbnNpb25zIGZvciBhbiBlbXB0eSB0cmFuc2FjdGlvblxuICAgKi9cbiAgc3RhdGljIHplcm8oKTogUmVhZG9ubHk8RGltZW5zaW9ucz4ge1xuICAgIHJldHVybiB0aGlzLlpFUk87XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHNpemVcbiAgICogQHJldHVybiBEaW1lbnNpb25zIGZvciBhIHNpbmdsZSBvdXRwdXQgd2l0aCBnaXZlbiBzaXplXG4gICAqL1xuICBzdGF0aWMgc2luZ2xlT3V0cHV0KHNpemU6IG51bWJlcik6IERpbWVuc2lvbnMge1xuICAgIHJldHVybiBEaW1lbnNpb25zLnN1bSh7IG91dHB1dHM6IHsgY291bnQ6IDEsIHNpemUgfSB9KTtcbiAgfVxuXG4gIHN0YXRpYyByZWFkb25seSBTaW5nbGVPdXRwdXQgPSBPYmplY3QuZnJlZXplKHtcbiAgICBwMnNoOiBEaW1lbnNpb25zLnNpbmdsZU91dHB1dChWaXJ0dWFsU2l6ZXMudHhQMnNoT3V0cHV0U2l6ZSksXG4gICAgcDJzaFAyd3NoOiBEaW1lbnNpb25zLnNpbmdsZU91dHB1dChWaXJ0dWFsU2l6ZXMudHhQMnNoUDJ3c2hPdXRwdXRTaXplKSxcbiAgICBwMndzaDogRGltZW5zaW9ucy5zaW5nbGVPdXRwdXQoVmlydHVhbFNpemVzLnR4UDJ3c2hPdXRwdXRTaXplKSxcbiAgICBwMnRyOiBEaW1lbnNpb25zLnNpbmdsZU91dHB1dChWaXJ0dWFsU2l6ZXMudHhQMnRyT3V0cHV0U2l6ZSksXG5cbiAgICBwMnBraDogRGltZW5zaW9ucy5zaW5nbGVPdXRwdXQoVmlydHVhbFNpemVzLnR4UDJwa2hPdXRwdXRTaXplKSxcbiAgICBwMndwa2g6IERpbWVuc2lvbnMuc2luZ2xlT3V0cHV0KFZpcnR1YWxTaXplcy50eFAyd3BraE91dHB1dFNpemUpLFxuICB9KTtcblxuICAvKipcbiAgICogQHJldHVybiBOdW1iZXIgb2YgdG90YWwgaW5wdXRzIChwMnNoICsgcDJzaFAyd3NoICsgcDJ3c2ggKyBwMnRyKVxuICAgKi9cbiAgZ2V0IG5JbnB1dHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5uUDJzaElucHV0cyArXG4gICAgICB0aGlzLm5QMnNoUDJ3c2hJbnB1dHMgK1xuICAgICAgdGhpcy5uUDJ3c2hJbnB1dHMgK1xuICAgICAgdGhpcy5uUDJ0cktleXBhdGhJbnB1dHMgK1xuICAgICAgdGhpcy5uUDJ0clNjcmlwdFBhdGhMZXZlbDFJbnB1dHMgK1xuICAgICAgdGhpcy5uUDJ0clNjcmlwdFBhdGhMZXZlbDJJbnB1dHMgK1xuICAgICAgdGhpcy5uUDJzaFAycGtJbnB1dHNcbiAgICApO1xuICB9XG5cbiAgc2V0IG5JbnB1dHMoXzogbnVtYmVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZWFkLW9ubHkgcHJvcGVydHkgbklucHV0cycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4gTnVtYmVyIG9mIHRvdGFsIG91dHB1dHNcbiAgICovXG4gIGdldCBuT3V0cHV0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm91dHB1dHMuY291bnQ7XG4gIH1cblxuICBzZXQgbk91dHB1dHMoXzogbnVtYmVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGByZWFkLW9ubHkgcHJvcGVydHkgbk91dHB1dHNgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gYXJncyAtIERpbWVuc2lvbnMgKGNhbiBiZSBwYXJ0aWFsbHkgZGVmaW5lZClcbiAgICogQHJldHVybiB7RGltZW5zaW9uc30gc3VtIG9mIGFyZ3VtZW50c1xuICAgKi9cbiAgc3RhdGljIHN1bSguLi5hcmdzOiBQYXJ0aWFsPERpbWVuc2lvbnM+W10pOiBEaW1lbnNpb25zIHtcbiAgICByZXR1cm4gYXJncy5yZWR1Y2UoKGE6IERpbWVuc2lvbnMsIGI6IFBhcnRpYWw8RGltZW5zaW9ucz4pID0+IGEucGx1cyhiKSwgbmV3IERpbWVuc2lvbnMoKSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGNoYWluXG4gICAqIEByZXR1cm4ge051bWJlcn1cbiAgICovXG4gIHN0YXRpYyBnZXRPdXRwdXRTY3JpcHRMZW5ndGhGb3JDaGFpbihjaGFpbjogQ2hhaW5Db2RlKTogbnVtYmVyIHtcbiAgICBzd2l0Y2ggKHNjcmlwdFR5cGVGb3JDaGFpbihjaGFpbikpIHtcbiAgICAgIGNhc2UgJ3Ayd3NoJzpcbiAgICAgIGNhc2UgJ3AydHInOlxuICAgICAgY2FzZSAncDJ0ck11c2lnMic6XG4gICAgICAgIHJldHVybiAzNDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAyMztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHNjcmlwdExlbmd0aFxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IHZTaXplIG9mIGFuIG91dHB1dCB3aXRoIHNjcmlwdCBsZW5ndGhcbiAgICovXG4gIHN0YXRpYyBnZXRWU2l6ZUZvck91dHB1dFdpdGhTY3JpcHRMZW5ndGgoc2NyaXB0TGVuZ3RoOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICghUG9zaXRpdmVJbnRlZ2VyLmlzKHNjcmlwdExlbmd0aCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGV4cGVjdGVkIHBvc2l0aXZlIGludGVnZXIgZm9yIHNjcmlwdExlbmd0aCwgZ290ICR7c2NyaXB0TGVuZ3RofWApO1xuICAgIH1cbiAgICByZXR1cm4gc2NyaXB0TGVuZ3RoICsgY29tcGFjdFNpemUoc2NyaXB0TGVuZ3RoKSArIFZpcnR1YWxTaXplcy50eE91dHB1dEFtb3VudFNpemU7XG4gIH1cblxuICBzdGF0aWMgcmVhZG9ubHkgU2luZ2xlSW5wdXQgPSBPYmplY3QuZnJlZXplKHtcbiAgICBwMnNoOiBEaW1lbnNpb25zLnN1bSh7IG5QMnNoSW5wdXRzOiAxIH0pLFxuICAgIHAyc2hQMndzaDogRGltZW5zaW9ucy5zdW0oeyBuUDJzaFAyd3NoSW5wdXRzOiAxIH0pLFxuICAgIHAyd3NoOiBEaW1lbnNpb25zLnN1bSh7IG5QMndzaElucHV0czogMSB9KSxcbiAgICBwMnRyS2V5cGF0aDogRGltZW5zaW9ucy5zdW0oeyBuUDJ0cktleXBhdGhJbnB1dHM6IDEgfSksXG4gICAgcDJ0clNjcmlwdFBhdGhMZXZlbDE6IERpbWVuc2lvbnMuc3VtKHsgblAydHJTY3JpcHRQYXRoTGV2ZWwxSW5wdXRzOiAxIH0pLFxuICAgIHAydHJTY3JpcHRQYXRoTGV2ZWwyOiBEaW1lbnNpb25zLnN1bSh7IG5QMnRyU2NyaXB0UGF0aExldmVsMklucHV0czogMSB9KSxcbiAgICBwMnNoUDJwazogRGltZW5zaW9ucy5zdW0oeyBuUDJzaFAycGtJbnB1dHM6IDEgfSksXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBAcmV0dXJuXG4gICAqL1xuICBzdGF0aWMgZnJvbVNjcmlwdFR5cGUoXG4gICAgc2NyaXB0VHlwZTogdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLlNjcmlwdFR5cGUgfCB1dHhvbGliLmJpdGdvLlBhcnNlZFNjcmlwdFR5cGUyT2YzIHwgJ3AycGtoJyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIHNjcmlwdFBhdGhMZXZlbD86IG51bWJlcjtcbiAgICB9ID0ge31cbiAgKTogRGltZW5zaW9ucyB7XG4gICAgc3dpdGNoIChzY3JpcHRUeXBlKSB7XG4gICAgICBjYXNlICdwMnNoJzpcbiAgICAgIGNhc2UgJ3Ayc2hQMndzaCc6XG4gICAgICBjYXNlICdwMndzaCc6XG4gICAgICBjYXNlICdwMnNoUDJwayc6XG4gICAgICAgIHJldHVybiBEaW1lbnNpb25zLlNpbmdsZUlucHV0W3NjcmlwdFR5cGVdO1xuICAgICAgY2FzZSAncDJ0cic6XG4gICAgICBjYXNlICd0YXByb290U2NyaXB0UGF0aFNwZW5kJzpcbiAgICAgICAgc3dpdGNoIChwYXJhbXMuc2NyaXB0UGF0aExldmVsKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgcmV0dXJuIERpbWVuc2lvbnMuU2luZ2xlSW5wdXQucDJ0clNjcmlwdFBhdGhMZXZlbDE7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgcmV0dXJuIERpbWVuc2lvbnMuU2luZ2xlSW5wdXQucDJ0clNjcmlwdFBhdGhMZXZlbDI7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCBzY3JpcHQgcGF0aCBsZXZlbGApO1xuICAgICAgICB9XG4gICAgICBjYXNlICdwMnRyTXVzaWcyJzpcbiAgICAgICAgc3dpdGNoIChwYXJhbXMuc2NyaXB0UGF0aExldmVsKSB7XG4gICAgICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgICAgICByZXR1cm4gRGltZW5zaW9ucy5TaW5nbGVJbnB1dC5wMnRyS2V5cGF0aDtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICByZXR1cm4gRGltZW5zaW9ucy5TaW5nbGVJbnB1dC5wMnRyU2NyaXB0UGF0aExldmVsMTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIHNjcmlwdCBwYXRoIGxldmVsYCk7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ3RhcHJvb3RLZXlQYXRoU3BlbmQnOlxuICAgICAgICByZXR1cm4gRGltZW5zaW9ucy5TaW5nbGVJbnB1dC5wMnRyS2V5cGF0aDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCBzY3JpcHRUeXBlICR7c2NyaXB0VHlwZX1gKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgcmVhZG9ubHkgQVNTVU1FX1AyU0ggPSBEaW1lbnNpb25zLlNpbmdsZUlucHV0LnAyc2g7XG4gIHN0YXRpYyByZWFkb25seSBBU1NVTUVfUDJTSF9QMldTSCA9IERpbWVuc2lvbnMuU2luZ2xlSW5wdXQucDJzaFAyd3NoO1xuICBzdGF0aWMgcmVhZG9ubHkgQVNTVU1FX1AyV1NIID0gRGltZW5zaW9ucy5TaW5nbGVJbnB1dC5wMndzaDtcbiAgc3RhdGljIHJlYWRvbmx5IEFTU1VNRV9QMlRSX0tFWVBBVEggPSBEaW1lbnNpb25zLlNpbmdsZUlucHV0LnAydHJLZXlwYXRoO1xuICBzdGF0aWMgcmVhZG9ubHkgQVNTVU1FX1AyVFJfU0NSSVBUUEFUSF9MRVZFTDEgPSBEaW1lbnNpb25zLlNpbmdsZUlucHV0LnAydHJTY3JpcHRQYXRoTGV2ZWwxO1xuICBzdGF0aWMgcmVhZG9ubHkgQVNTVU1FX1AyVFJfU0NSSVBUUEFUSF9MRVZFTDIgPSBEaW1lbnNpb25zLlNpbmdsZUlucHV0LnAydHJTY3JpcHRQYXRoTGV2ZWwyO1xuICBzdGF0aWMgcmVhZG9ubHkgQVNTVU1FX1AyU0hfUDJQS19JTlBVVCA9IERpbWVuc2lvbnMuU2luZ2xlSW5wdXQucDJzaFAycGs7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0QXNzdW1lZERpbWVuc2lvbihwYXJhbXM6IEZyb21JbnB1dFBhcmFtcyA9IHt9LCBpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgeyBhc3N1bWVVbnNpZ25lZCB9ID0gcGFyYW1zO1xuICAgIGlmICghYXNzdW1lVW5zaWduZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgaWxsZWdhbCBpbnB1dCAke2luZGV4fTogZW1wdHkgc2NyaXB0IGFuZCBhc3N1bWVVbnNpZ25lZCBub3Qgc2V0YCk7XG4gICAgfVxuICAgIHJldHVybiBhc3N1bWVVbnNpZ25lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gaW5wdXQgLSB0aGUgdHJhbnNhY3Rpb24gaW5wdXQgdG8gY291bnRcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiAgICAgICAgW3BhcmFtLmFzc3VtZVVuc2lnbmVkXSAtIGRlZmF1bHQgdHlwZSBmb3IgdW5zaWduZWQgaW5wdXRcbiAgICovXG4gIHN0YXRpYyBmcm9tSW5wdXQoaW5wdXQ6IHV0eG9saWIuVHhJbnB1dCwgcGFyYW1zOiBGcm9tSW5wdXRQYXJhbXMgPSB7fSk6IERpbWVuc2lvbnMge1xuICAgIGlmIChpbnB1dC5zY3JpcHQ/Lmxlbmd0aCB8fCBpbnB1dC53aXRuZXNzPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHV0eG9saWIuYml0Z28ucGFyc2VTaWduYXR1cmVTY3JpcHQoaW5wdXQpO1xuICAgICAgcmV0dXJuIERpbWVuc2lvbnMuZnJvbVNjcmlwdFR5cGUocGFyc2VkLnNjcmlwdFR5cGUsIHBhcnNlZCBhcyB7IHNjcmlwdFBhdGhMZXZlbD86IG51bWJlciB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gRGltZW5zaW9ucy5nZXRBc3N1bWVkRGltZW5zaW9uKHBhcmFtcywgaW5wdXQuaW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBEaW1lbnNpb25zIGZyb20gcHNidCBpbnB1dFxuICAgKiBAcGFyYW0gaW5wdXQgLSBwc2J0IGlucHV0XG4gICAqL1xuICBzdGF0aWMgZnJvbVBzYnRJbnB1dChpbnB1dDogYml0Z28uUHNidElucHV0VHlwZSk6IERpbWVuc2lvbnMge1xuICAgIGNvbnN0IHBhcnNlZCA9IGJpdGdvLnBhcnNlUHNidElucHV0KGlucHV0KTtcbiAgICByZXR1cm4gRGltZW5zaW9ucy5mcm9tU2NyaXB0VHlwZShwYXJzZWQuc2NyaXB0VHlwZSwgcGFyc2VkIGFzIHsgc2NyaXB0UGF0aExldmVsPzogbnVtYmVyIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBpbnB1dHMgLSBBcnJheSBvZiBpbnB1dHNcbiAgICogQHBhcmFtIHBhcmFtcyAtIEBzZWUgRGltZW5zaW9ucy5mcm9tSW5wdXQoKVxuICAgKiBAcmV0dXJuIHtEaW1lbnNpb25zfSBzdW0gb2YgdGhlIGRpbWVuc2lvbnMgZm9yIGVhY2ggaW5wdXQgKEBzZWUgRGltZW5zaW9ucy5mcm9tSW5wdXQoKSlcbiAgICovXG4gIHN0YXRpYyBmcm9tSW5wdXRzKGlucHV0czogdXR4b2xpYi5UeElucHV0W10sIHBhcmFtcz86IEZyb21JbnB1dFBhcmFtcyk6IERpbWVuc2lvbnMge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShpbnB1dHMpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBpbnB1dHMgbXVzdCBiZSBhcnJheWApO1xuICAgIH1cbiAgICByZXR1cm4gRGltZW5zaW9ucy5zdW0oLi4uaW5wdXRzLm1hcCgoaSkgPT4gRGltZW5zaW9ucy5mcm9tSW5wdXQoaSwgcGFyYW1zKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBEaW1lbnNpb25zIGZyb20gbXVsdGlwbGUgcHNidCBpbnB1dHNcbiAgICogQHBhcmFtIGlucHV0cyBwc2J0IGlucHV0IGFycmF5XG4gICAqIEByZXR1cm4ge0RpbWVuc2lvbnN9IHN1bSBvZiB0aGUgZGltZW5zaW9ucyBmb3IgZWFjaCBpbnB1dCAoQHNlZSBEaW1lbnNpb25zLmZyb21Qc2J0SW5wdXQoKSlcbiAgICovXG4gIHN0YXRpYyBmcm9tUHNidElucHV0cyhpbnB1dHM6IGJpdGdvLlBzYnRJbnB1dFR5cGVbXSk6IERpbWVuc2lvbnMge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShpbnB1dHMpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBpbnB1dHMgbXVzdCBiZSBhcnJheWApO1xuICAgIH1cbiAgICByZXR1cm4gRGltZW5zaW9ucy5zdW0oLi4uaW5wdXRzLm1hcCgoaW5wdXQsIF8pID0+IERpbWVuc2lvbnMuZnJvbVBzYnRJbnB1dChpbnB1dCkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gc2NyaXB0TGVuZ3RoIHtudW1iZXJ9IC0gc2l6ZSBvZiB0aGUgb3V0cHV0IHNjcmlwdCBpbiBieXRlc1xuICAgKiBAcmV0dXJuIHtEaW1lbnNpb25zfSAtIERpbWVuc2lvbnMgb2YgdGhlIG91dHB1dFxuICAgKi9cbiAgc3RhdGljIGZyb21PdXRwdXRTY3JpcHRMZW5ndGgoc2NyaXB0TGVuZ3RoOiBudW1iZXIpOiBEaW1lbnNpb25zIHtcbiAgICByZXR1cm4gRGltZW5zaW9ucy5zdW0oe1xuICAgICAgb3V0cHV0czoge1xuICAgICAgICBjb3VudDogMSxcbiAgICAgICAgc2l6ZTogRGltZW5zaW9ucy5nZXRWU2l6ZUZvck91dHB1dFdpdGhTY3JpcHRMZW5ndGgoc2NyaXB0TGVuZ3RoKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIG91dHB1dCAtIGEgdHggb3V0cHV0XG4gICAqIEByZXR1cm4gRGltZW5zaW9ucyAtIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBnaXZlbiBvdXRwdXRcbiAgICovXG4gIHN0YXRpYyBmcm9tT3V0cHV0KHsgc2NyaXB0IH06IHsgc2NyaXB0OiBCdWZmZXIgfSk6IERpbWVuc2lvbnMge1xuICAgIGlmICghc2NyaXB0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIG91dHB1dCBzY3JpcHQgdG8gYmUgZGVmaW5lZCcpO1xuICAgIH1cbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihzY3JpcHQpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleHBlY3RlZCBzY3JpcHQgdG8gYmUgYnVmZmVyLCBnb3QgJyArIHR5cGVvZiBzY3JpcHQpO1xuICAgIH1cbiAgICByZXR1cm4gRGltZW5zaW9ucy5mcm9tT3V0cHV0U2NyaXB0TGVuZ3RoKHNjcmlwdC5sZW5ndGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBvdXRwdXRzIC0gQXJyYXkgb2Ygb3V0cHV0c1xuICAgKiBAcmV0dXJuIHtEaW1lbnNpb25zfSBzdW0gb2YgdGhlIGRpbWVuc2lvbnMgZm9yIGVhY2ggb3V0cHV0IChAc2VlIERpbWVuc2lvbnMuZnJvbU91dHB1dCgpKVxuICAgKi9cbiAgc3RhdGljIGZyb21PdXRwdXRzKG91dHB1dHM6IHsgc2NyaXB0OiBCdWZmZXIgfVtdKTogRGltZW5zaW9ucyB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG91dHB1dHMpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBvdXRwdXRzIG11c3QgYmUgYXJyYXlgKTtcbiAgICB9XG4gICAgcmV0dXJuIERpbWVuc2lvbnMuc3VtKC4uLm91dHB1dHMubWFwKERpbWVuc2lvbnMuZnJvbU91dHB1dCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGRpbWVuc2lvbnMgb2YgYW4gb3V0cHV0IHRoYXQgd2lsbCBiZSBjcmVhdGVkIG9uIGEgc3BlY2lmaWMgY2hhaW4uXG4gICAqIEN1cnJlbnRseSwgdGhpcyBzaW1wbHkgYWRkcyBhIGRlZmF1bHQgb3V0cHV0LlxuICAgKlxuICAgKiBAcGFyYW0gY2hhaW4gLSBDaGFpbiBjb2RlIGFzIGRlZmluZWQgYnkgdXR4b2xpYi5iaXRnb1xuICAgKiBAcmV0dXJuIHtEaW1lbnNpb25zfSAtIERpbWVuc2lvbnMgZm9yIGEgc2luZ2xlIG91dHB1dCBvbiB0aGUgZ2l2ZW4gY2hhaW4uXG4gICAqL1xuICBzdGF0aWMgZnJvbU91dHB1dE9uQ2hhaW4oY2hhaW46IENoYWluQ29kZSk6IERpbWVuc2lvbnMge1xuICAgIHJldHVybiBEaW1lbnNpb25zLmZyb21PdXRwdXRTY3JpcHRMZW5ndGgoRGltZW5zaW9ucy5nZXRPdXRwdXRTY3JpcHRMZW5ndGhGb3JDaGFpbihjaGFpbikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBkaW1lbnNpb25zIG9mIGFuIHVuc3BlbnQgYWNjb3JkaW5nIHRvIGBjaGFpbmAgcGFyYW1ldGVyXG4gICAqIEBwYXJhbSBjaGFpbiAtIENoYWluIGNvZGUgYXMgZGVmaW5lZCBieSB1dHhvLmNoYWluXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBIaW50IGZvciB1bnNwZW50cyB3aXRoIHZhcmlhYmxlIGlucHV0IHNpemVzIChwMnRyKS5cbiAgICogQHJldHVybiB7RGltZW5zaW9uc30gb2YgdGhlIHVuc3BlbnRcbiAgICogQHRocm93cyBpZiB0aGUgY2hhaW4gY29kZSBpcyBpbnZhbGlkIG9yIHVuc3VwcG9ydGVkXG4gICAqL1xuICBzdGF0aWMgZnJvbVVuc3BlbnQoeyBjaGFpbiB9OiB7IGNoYWluOiBudW1iZXIgfSwgcGFyYW1zOiBGcm9tVW5zcGVudFBhcmFtcyA9IGRlZmF1bHRVbnNwZW50UGFyYW1zKTogRGltZW5zaW9ucyB7XG4gICAgaWYgKCFpc0NoYWluQ29kZShjaGFpbikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgY2hhaW4gY29kZScpO1xuICAgIH1cblxuICAgIGNvbnN0IHNjcmlwdFR5cGUgPSBzY3JpcHRUeXBlRm9yQ2hhaW4oY2hhaW4pO1xuXG4gICAgcmV0dXJuIERpbWVuc2lvbnMuZnJvbVNjcmlwdFR5cGUoXG4gICAgICBzY3JpcHRUeXBlLFxuICAgICAgc2NyaXB0VHlwZSA9PT0gJ3AydHInID8gcGFyYW1zLnAydHIgOiBzY3JpcHRUeXBlID09PSAncDJ0ck11c2lnMicgPyBwYXJhbXMucDJ0ck11c2lnMiA6IHt9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gdW5zcGVudHNcbiAgICogQHJldHVybiB7RGltZW5zaW9uc30gc3VtIG9mIHRoZSBkaW1lbnNpb25zIGZvciBlYWNoIHVuc3BlbnQgKEBzZWUgRGltZW5zaW9ucy5mcm9tVW5zcGVudCgpKVxuICAgKi9cbiAgc3RhdGljIGZyb21VbnNwZW50cyh1bnNwZW50czogeyBjaGFpbjogQ2hhaW5Db2RlIH1bXSk6IERpbWVuc2lvbnMge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh1bnNwZW50cykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYHVuc3BlbnRzIG11c3QgYmUgYXJyYXlgKTtcbiAgICB9XG4gICAgLy8gQ29udmVydCB0aGUgaW5kaXZpZHVhbCB1bnNwZW50cyBpbnRvIGRpbWVuc2lvbnMgYW5kIHN1bSB0aGVtIHVwXG4gICAgcmV0dXJuIERpbWVuc2lvbnMuc3VtKC4uLnVuc3BlbnRzLm1hcCgodSkgPT4gRGltZW5zaW9ucy5mcm9tVW5zcGVudCh1KSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB0cmFuc2FjdGlvbiAtIGJpdGNvaW4tbGlrZSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gW3BhcmFtLmFzc3VtZVVuc2lnbmVkXSAtIGRlZmF1bHQgdHlwZSBmb3IgdW5zaWduZWQgaW5wdXRzXG4gICAqIEByZXR1cm4ge0RpbWVuc2lvbnN9XG4gICAqL1xuICBzdGF0aWMgZnJvbVRyYW5zYWN0aW9uKFxuICAgIHtcbiAgICAgIGlucyxcbiAgICAgIG91dHMsXG4gICAgfToge1xuICAgICAgaW5zOiB1dHhvbGliLlR4SW5wdXRbXTtcbiAgICAgIG91dHM6IHV0eG9saWIuVHhPdXRwdXRbXTtcbiAgICB9LFxuICAgIHBhcmFtcz86IEZyb21JbnB1dFBhcmFtc1xuICApOiBEaW1lbnNpb25zIHtcbiAgICByZXR1cm4gRGltZW5zaW9ucy5mcm9tSW5wdXRzKGlucywgcGFyYW1zKS5wbHVzKERpbWVuc2lvbnMuZnJvbU91dHB1dHMob3V0cykpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBEaW1lbnNpb25zIGZyb20gcHNidCBpbnB1dHMgYW5kIG91dHB1dHNcbiAgICogQHBhcmFtIHBzYnRcbiAgICogQHJldHVybiB7RGltZW5zaW9uc31cbiAgICovXG4gIHN0YXRpYyBmcm9tUHNidChwc2J0OiBiaXRnby5VdHhvUHNidCk6IERpbWVuc2lvbnMge1xuICAgIHJldHVybiBEaW1lbnNpb25zLmZyb21Qc2J0SW5wdXRzKHBzYnQuZGF0YS5pbnB1dHMpLnBsdXMoRGltZW5zaW9ucy5mcm9tT3V0cHV0cyhwc2J0LmdldFVuc2lnbmVkVHgoKS5vdXRzKSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGRpbWVuc2lvbnMgKGNhbiBiZSBwYXJ0aWFsbHkgZGVmaW5lZClcbiAgICogQHJldHVybiBuZXcgZGltZW5zaW9ucyB3aXRoIGFyZ3VtZW50IGFkZGVkXG4gICAqL1xuICBwbHVzKGRpbWVuc2lvbnM6IFBhcnRpYWw8RGltZW5zaW9ucz4pOiBEaW1lbnNpb25zIHtcbiAgICBpZiAodHlwZW9mIGRpbWVuc2lvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBleHBlY3RlZCBhcmd1bWVudCB0byBiZSBvYmplY3RgKTtcbiAgICB9XG5cbiAgICBpZiAoIShkaW1lbnNpb25zIGluc3RhbmNlb2YgRGltZW5zaW9ucykpIHtcbiAgICAgIGRpbWVuc2lvbnMgPSBuZXcgRGltZW5zaW9ucyhkaW1lbnNpb25zKTtcbiAgICB9XG5cbiAgICAvLyBDYXRjaCBpbnN0YW5jZXMgd2hlcmUgd2UgdHJ5IHRvIGluaXRpYWxpemUgRGltZW5zaW9ucyBmcm9tIHBhcnRpYWwgZGF0YSB1c2luZyBkZXByZWNhdGVkIHBhcmFtZXRlcnNcbiAgICAvLyB1c2luZyBvbmx5IFwibk91dHB1dHNcIi5cbiAgICBpZiAoJ25PdXRwdXRzJyBpbiBkaW1lbnNpb25zKSB7XG4gICAgICBpZiAoISgnb3V0cHV0cycgaW4gZGltZW5zaW9ucykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkZXByZWNhdGVkIHBhcnRpYWwgYWRkaXRpb246IGFyZ3VtZW50IGhhcyBrZXkgXCJuT3V0cHV0c1wiIGJ1dCBubyBcIm91dHB1dHNcIicpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IG91dHB1dHMsIG5PdXRwdXRzIH0gPSBkaW1lbnNpb25zIGFzIERpbWVuc2lvbnM7XG5cbiAgICAgIGlmIChvdXRwdXRzLmNvdW50ICE9PSBuT3V0cHV0cykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RlcHJlY2F0ZWQgcGFydGlhbCBhZGRpdGlvbjogaW5jb25zaXN0ZW50IHZhbHVlcyBmb3IgXCJuT3V0cHV0c1wiIGFuZCBcIm91dHB1dHMuY291bnRcIicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXBEaW1lbnNpb25zKHRoaXMsIChrZXksIHYpID0+IHtcbiAgICAgIGNvbnN0IHcgPSBkaW1lbnNpb25zW2tleV0gPz8gRGltZW5zaW9ucy5aRVJPW2tleV07XG4gICAgICBpZiAoa2V5ID09PSAnb3V0cHV0cycpIHtcbiAgICAgICAgY29uc3Qgdk91dHB1dHMgPSB2IGFzIE91dHB1dERpbWVuc2lvbnM7XG4gICAgICAgIGNvbnN0IHdPdXRwdXRzID0gdyBhcyBPdXRwdXREaW1lbnNpb25zO1xuICAgICAgICByZXR1cm4gbmV3IE91dHB1dERpbWVuc2lvbnMoe1xuICAgICAgICAgIGNvdW50OiB2T3V0cHV0cy5jb3VudCArIHdPdXRwdXRzLmNvdW50LFxuICAgICAgICAgIHNpemU6IHZPdXRwdXRzLnNpemUgKyB3T3V0cHV0cy5zaXplLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAodiBhcyBudW1iZXIpICsgKHcgYXMgbnVtYmVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNdWx0aXBseSBkaW1lbnNpb25zIGJ5IGEgZ2l2ZW4gZmFjdG9yXG4gICAqIEBwYXJhbSBmYWN0b3IgLSBQb3NpdGl2ZSBpbnRlZ2VyXG4gICAqIEByZXR1cm4ge0RpbWVuc2lvbnN9XG4gICAqL1xuICB0aW1lcyhmYWN0b3I6IG51bWJlcik6IERpbWVuc2lvbnMge1xuICAgIGlmICghUG9zaXRpdmVJbnRlZ2VyLmlzKGZhY3RvcikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGV4cGVjdGVkIGZhY3RvciB0byBiZSBwb3NpdGl2ZSBpbnRlZ2VyYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcERpbWVuc2lvbnModGhpcywgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgIGlmIChrZXkgPT09ICdvdXRwdXRzJykge1xuICAgICAgICBjb25zdCB2T3V0cHV0cyA9IHZhbHVlIGFzIE91dHB1dERpbWVuc2lvbnM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY291bnQ6IHZPdXRwdXRzLmNvdW50ICogZmFjdG9yLFxuICAgICAgICAgIHNpemU6IHZPdXRwdXRzLnNpemUgKiBmYWN0b3IsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gKHZhbHVlIGFzIG51bWJlcikgKiBmYWN0b3I7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiBOdW1iZXIgb2YgdG90YWwgaW5wdXRzIChwMnNoLCBwMnNoUDJ3c2ggYW5kIHAyd3NoKVxuICAgKiBAZGVwcmVjYXRlZCB1c2UgYGRpbWVuc2lvbi5uSW5wdXRzYCBpbnN0ZWFkXG4gICAqL1xuICBnZXROSW5wdXRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubklucHV0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZmYgZGltZW5zaW9ucyBoYXZlIG9uZSBvciBtb3JlIChwMnNoKXAyd3NoIGlucHV0c1xuICAgKi9cbiAgaXNTZWd3aXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMublAyd3NoSW5wdXRzICtcbiAgICAgICAgdGhpcy5uUDJzaFAyd3NoSW5wdXRzICtcbiAgICAgICAgdGhpcy5uUDJ0cktleXBhdGhJbnB1dHMgK1xuICAgICAgICB0aGlzLm5QMnRyU2NyaXB0UGF0aExldmVsMUlucHV0cyArXG4gICAgICAgIHRoaXMublAydHJTY3JpcHRQYXRoTGV2ZWwySW5wdXRzID5cbiAgICAgIDBcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge051bWJlcn0gb3ZlcmhlYWQgdnNpemUsIGJhc2VkIG9uIHJlc3VsdCBpc1NlZ3dpdCgpLlxuICAgKi9cbiAgZ2V0T3ZlcmhlYWRWU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmlzU2Vnd2l0KCkgPyBWaXJ0dWFsU2l6ZXMudHhTZWdPdmVyaGVhZFZTaXplIDogVmlydHVhbFNpemVzLnR4T3ZlcmhlYWRTaXplO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IHZzaXplIG9mIGlucHV0cywgd2l0aG91dCB0cmFuc2FjdGlvbiBvdmVyaGVhZFxuICAgKi9cbiAgZ2V0SW5wdXRzVlNpemUoKTogbnVtYmVyIHtcbiAgICBjb25zdCB7XG4gICAgICB0eFAyc2hJbnB1dFNpemUsXG4gICAgICB0eFAyc2hQMndzaElucHV0U2l6ZSxcbiAgICAgIHR4UDJ3c2hJbnB1dFNpemUsXG4gICAgICB0eFAydHJLZXlwYXRoSW5wdXRTaXplLFxuICAgICAgdHhQMnRyU2NyaXB0UGF0aExldmVsMUlucHV0U2l6ZSxcbiAgICAgIHR4UDJ0clNjcmlwdFBhdGhMZXZlbDJJbnB1dFNpemUsXG4gICAgICB0eFAyc2hQMnBrSW5wdXRTaXplLFxuICAgIH0gPSBWaXJ0dWFsU2l6ZXM7XG5cbiAgICBjb25zdCB7XG4gICAgICBuUDJzaElucHV0cyxcbiAgICAgIG5QMnNoUDJ3c2hJbnB1dHMsXG4gICAgICBuUDJ3c2hJbnB1dHMsXG4gICAgICBuUDJ0cktleXBhdGhJbnB1dHMsXG4gICAgICBuUDJ0clNjcmlwdFBhdGhMZXZlbDFJbnB1dHMsXG4gICAgICBuUDJ0clNjcmlwdFBhdGhMZXZlbDJJbnB1dHMsXG4gICAgICBuUDJzaFAycGtJbnB1dHMsXG4gICAgfSA9IHRoaXM7XG5cbiAgICBjb25zdCBzaXplID1cbiAgICAgIG5QMnNoSW5wdXRzICogdHhQMnNoSW5wdXRTaXplICtcbiAgICAgIG5QMnNoUDJ3c2hJbnB1dHMgKiB0eFAyc2hQMndzaElucHV0U2l6ZSArXG4gICAgICBuUDJ3c2hJbnB1dHMgKiB0eFAyd3NoSW5wdXRTaXplICtcbiAgICAgIG5QMnRyS2V5cGF0aElucHV0cyAqIHR4UDJ0cktleXBhdGhJbnB1dFNpemUgK1xuICAgICAgblAyc2hQMnBrSW5wdXRzICogdHhQMnNoUDJwa0lucHV0U2l6ZSArXG4gICAgICBuUDJ0clNjcmlwdFBhdGhMZXZlbDFJbnB1dHMgKiB0eFAydHJTY3JpcHRQYXRoTGV2ZWwxSW5wdXRTaXplICtcbiAgICAgIG5QMnRyU2NyaXB0UGF0aExldmVsMklucHV0cyAqIHR4UDJ0clNjcmlwdFBhdGhMZXZlbDJJbnB1dFNpemU7XG4gICAgaWYgKE51bWJlci5pc05hTihzaXplKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHNpemVgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2l6ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSByZXR1cm4gdnNpemUgb2Ygb3V0cHV0cywgd2l0aG91dCBvdmVyaGVhZFxuICAgKi9cbiAgZ2V0T3V0cHV0c1ZTaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMub3V0cHV0cy5zaXplO1xuICB9XG5cbiAgLyoqXG4gICAqIEVzdGltYXRlcyB0aGUgdmlydHVhbCBzaXplICgxLzQgd2VpZ2h0KSBvZiBhIHNpZ25lZCB0cmFuc2FjdGlvbiBhcyBzdW0gb2ZcbiAgICogb3ZlcmhlYWQgdnNpemUsIGlucHV0IHZzaXplIGFuZCBvdXRwdXQgdnNpemUuXG4gICAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBlc3RpbWF0ZWQgdnNpemUgb2YgdGhlIHRyYW5zYWN0aW9uIGRpbWVuc2lvbnMuXG4gICAqL1xuICBnZXRWU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldE92ZXJoZWFkVlNpemUoKSArIHRoaXMuZ2V0SW5wdXRzVlNpemUoKSArIHRoaXMuZ2V0T3V0cHV0c1ZTaXplKCk7XG4gIH1cbn1cbiJdfQ==
@@ -5,3 +5,4 @@ Codes,
5
5
  /** @deprecated - use utxolib.bitgo */
6
6
  CodesTypes, };
7
7
  export * from './dimensions';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,UAAU,MAAM,SAAS,CAAC;AAC7C,OAAO;AACL,sCAAsC;AACtC,KAAK;AACL,sCAAsC;AACtC,UAAU,GACX,CAAC;AAEF,cAAc,cAAc,CAAC"}
@@ -27,4 +27,4 @@ const codes_1 = __importStar(require("./codes")), CodesTypes = codes_1;
27
27
  exports.Codes = codes_1.default;
28
28
  exports.CodesTypes = CodesTypes;
29
29
  __exportStar(require("./dimensions"), exports);
30
- //# sourceMappingURL=index.js.map
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVFQUE2QztBQUczQyxnQkFISyxlQUFLLENBR0w7QUFFTCxnQ0FBVTtBQUdaLCtDQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb2RlcywgKiBhcyBDb2Rlc1R5cGVzIGZyb20gJy4vY29kZXMnO1xuZXhwb3J0IHtcbiAgLyoqIEBkZXByZWNhdGVkIC0gdXNlIHV0eG9saWIuYml0Z28gKi9cbiAgQ29kZXMsXG4gIC8qKiBAZGVwcmVjYXRlZCAtIHVzZSB1dHhvbGliLmJpdGdvICovXG4gIENvZGVzVHlwZXMsXG59O1xuXG5leHBvcnQgKiBmcm9tICcuL2RpbWVuc2lvbnMnO1xuIl19
@@ -23,3 +23,4 @@ export declare const inputComponentsP2trKeySpend: InputComponents;
23
23
  export declare const inputComponentsP2trScriptSpendLevel1: InputComponents;
24
24
  export declare const inputComponentsP2trScriptSpendLevel2: InputComponents;
25
25
  export declare const inputComponentsP2shP2pk: InputComponents;
26
+ //# sourceMappingURL=inputWeights.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inputWeights.d.ts","sourceRoot":"","sources":["../../src/inputWeights.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,wBAAgB,YAAY,CAAC,UAAU,EAAE,KAAK,GAAG,MAAM,CAItD;AAaD,oBAAY,KAAK,GAAG;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,oBAAY,KAAK,GAAG;IAClB,MAAM,EAAE,KAAK,CAAC;IACd,OAAO,EAAE,KAAK,EAAE,CAAC;CAClB,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,GAAG,MAAM,CAM9E;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAEnD;AAED,oBAAY,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,eAAe,GAAG,MAAM,CAMnE;AAgCD,eAAO,MAAM,mBAAmB,EAAE,eAGjC,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,eAGtC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,eAGlC,CAAC;AAGF,eAAO,MAAM,2BAA2B,EAAE,eAGzC,CAAC;AAEF,eAAO,MAAM,oCAAoC,EAAE,eAGlD,CAAC;AAEF,eAAO,MAAM,oCAAoC,EAAE,eAGlD,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,eAGrC,CAAC"}