{"version":3,"sources":["../../node_modules/bitcoinjs-lib/src/networks.js","../../node_modules/bitcoinjs-lib/src/bip66.js","../../node_modules/bitcoinjs-lib/src/ops.js","../../node_modules/bitcoinjs-lib/src/push_data.js","../../node_modules/bitcoinjs-lib/src/script_number.js","../../node_modules/typeforce/native.js","../../node_modules/typeforce/errors.js","../../node_modules/typeforce/extra.js","../../node_modules/typeforce/index.js","../../node_modules/bitcoinjs-lib/src/types.js","../../node_modules/bitcoinjs-lib/src/script_signature.js","../../node_modules/bitcoinjs-lib/src/script.js","../../node_modules/bitcoinjs-lib/src/payments/lazy.js","../../node_modules/bitcoinjs-lib/src/payments/embed.js","../../node_modules/bitcoinjs-lib/src/payments/p2ms.js","../../node_modules/bitcoinjs-lib/src/payments/p2pk.js","../../node_modules/@noble/hashes/src/cryptoNode.ts","../../node_modules/@noble/hashes/src/utils.ts","../../node_modules/@noble/hashes/src/_md.ts","../../node_modules/@noble/hashes/src/legacy.ts","../../node_modules/@noble/hashes/src/ripemd160.ts","../../node_modules/@noble/hashes/src/sha1.ts","../../node_modules/@noble/hashes/src/_u64.ts","../../node_modules/@noble/hashes/src/sha2.ts","../../node_modules/@noble/hashes/src/sha256.ts","../../node_modules/bitcoinjs-lib/src/crypto.js","../../node_modules/base-x/src/index.js","../../node_modules/bs58/index.js","../../node_modules/bs58check/base.js","../../node_modules/bs58check/index.js","../../node_modules/bitcoinjs-lib/src/payments/p2pkh.js","../../node_modules/bitcoinjs-lib/src/payments/p2sh.js","../../node_modules/bech32/dist/index.js","../../node_modules/bitcoinjs-lib/src/payments/p2wpkh.js","../../node_modules/bitcoinjs-lib/src/payments/p2wsh.js","../../node_modules/bitcoinjs-lib/src/ecc_lib.js","../../node_modules/safe-buffer/index.js","../../node_modules/bitcoinjs-lib/node_modules/varuint-bitcoin/index.js","../../node_modules/bitcoinjs-lib/src/bufferutils.js","../../node_modules/bitcoinjs-lib/src/payments/bip341.js","../../node_modules/bitcoinjs-lib/src/payments/p2tr.js","../../node_modules/bitcoinjs-lib/src/payments/index.js","../../node_modules/bitcoinjs-lib/src/address.js","../../node_modules/bitcoinjs-lib/src/merkle.js","../../node_modules/bitcoinjs-lib/src/transaction.js","../../node_modules/bitcoinjs-lib/src/block.js","../../node_modules/bip174/src/lib/typeFields.js","../../node_modules/bip174/src/lib/converter/global/globalXpub.js","../../node_modules/bip174/src/lib/converter/global/unsignedTx.js","../../node_modules/bip174/src/lib/converter/input/finalScriptSig.js","../../node_modules/bip174/src/lib/converter/input/finalScriptWitness.js","../../node_modules/bip174/src/lib/converter/input/nonWitnessUtxo.js","../../node_modules/bip174/src/lib/converter/input/partialSig.js","../../node_modules/bip174/src/lib/converter/input/porCommitment.js","../../node_modules/bip174/src/lib/converter/input/sighashType.js","../../node_modules/bip174/src/lib/converter/input/tapKeySig.js","../../node_modules/bip174/src/lib/converter/input/tapLeafScript.js","../../node_modules/bip174/src/lib/converter/input/tapMerkleRoot.js","../../node_modules/bip174/src/lib/converter/input/tapScriptSig.js","../../node_modules/bip174/src/lib/converter/varint.js","../../node_modules/bip174/src/lib/converter/tools.js","../../node_modules/bip174/src/lib/converter/input/witnessUtxo.js","../../node_modules/bip174/src/lib/converter/output/tapTree.js","../../node_modules/bip174/src/lib/converter/shared/bip32Derivation.js","../../node_modules/bip174/src/lib/converter/shared/checkPubkey.js","../../node_modules/bip174/src/lib/converter/shared/redeemScript.js","../../node_modules/bip174/src/lib/converter/shared/tapBip32Derivation.js","../../node_modules/bip174/src/lib/converter/shared/tapInternalKey.js","../../node_modules/bip174/src/lib/converter/shared/witnessScript.js","../../node_modules/bip174/src/lib/converter/index.js","../../node_modules/bip174/src/lib/parser/fromBuffer.js","../../node_modules/bip174/src/lib/parser/toBuffer.js","../../node_modules/bip174/src/lib/parser/index.js","../../node_modules/bip174/src/lib/combiner/index.js","../../node_modules/bip174/src/lib/utils.js","../../node_modules/bip174/src/lib/psbt.js","../../node_modules/bitcoinjs-lib/src/psbt/psbtutils.js","../../node_modules/bitcoinjs-lib/src/psbt/bip371.js","../../node_modules/bitcoinjs-lib/src/psbt.js","../../node_modules/bitcoinjs-lib/src/index.js","../../src/encoders/p2wsh-encoder.ts","../../src/encoders/bitcoin-stamps-encoder.ts","../../src/utils/data-processor.ts","../../src/encoders/src20-encoder.ts","../../src/encoders/counterparty-encoder.ts"],"names":["decode","encode","K","i","j","Buffer","script","networks","address","GlobalTypes","InputTypes","OutputTypes","require_utils","require_psbt","require_src","crypto","witnessScript","bitcoin","CHUNK_SIZE","id","buffer","zlib","msgpack"],"mappings":"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","file":"index.cjs","sourcesContent":["'use strict';\n// https://en.bitcoin.it/wiki/List_of_address_prefixes\n// Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.testnet = exports.regtest = exports.bitcoin = void 0;\n/**\n * Represents the Bitcoin network configuration.\n */\nexports.bitcoin = {\n  /**\n   * The message prefix used for signing Bitcoin messages.\n   */\n  messagePrefix: '\\x18Bitcoin Signed Message:\\n',\n  /**\n   * The Bech32 prefix used for Bitcoin addresses.\n   */\n  bech32: 'bc',\n  /**\n   * The BIP32 key prefixes for Bitcoin.\n   */\n  bip32: {\n    /**\n     * The public key prefix for BIP32 extended public keys.\n     */\n    public: 0x0488b21e,\n    /**\n     * The private key prefix for BIP32 extended private keys.\n     */\n    private: 0x0488ade4,\n  },\n  /**\n   * The prefix for Bitcoin public key hashes.\n   */\n  pubKeyHash: 0x00,\n  /**\n   * The prefix for Bitcoin script hashes.\n   */\n  scriptHash: 0x05,\n  /**\n   * The prefix for Bitcoin Wallet Import Format (WIF) private keys.\n   */\n  wif: 0x80,\n};\n/**\n * Represents the regtest network configuration.\n */\nexports.regtest = {\n  messagePrefix: '\\x18Bitcoin Signed Message:\\n',\n  bech32: 'bcrt',\n  bip32: {\n    public: 0x043587cf,\n    private: 0x04358394,\n  },\n  pubKeyHash: 0x6f,\n  scriptHash: 0xc4,\n  wif: 0xef,\n};\n/**\n * Represents the testnet network configuration.\n */\nexports.testnet = {\n  messagePrefix: '\\x18Bitcoin Signed Message:\\n',\n  bech32: 'tb',\n  bip32: {\n    public: 0x043587cf,\n    private: 0x04358394,\n  },\n  pubKeyHash: 0x6f,\n  scriptHash: 0xc4,\n  wif: 0xef,\n};\n","'use strict';\n// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki\n// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]\n// NOTE: SIGHASH byte ignored AND restricted, truncate before use\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.encode = exports.decode = exports.check = void 0;\nfunction check(buffer) {\n  if (buffer.length < 8) return false;\n  if (buffer.length > 72) return false;\n  if (buffer[0] !== 0x30) return false;\n  if (buffer[1] !== buffer.length - 2) return false;\n  if (buffer[2] !== 0x02) return false;\n  const lenR = buffer[3];\n  if (lenR === 0) return false;\n  if (5 + lenR >= buffer.length) return false;\n  if (buffer[4 + lenR] !== 0x02) return false;\n  const lenS = buffer[5 + lenR];\n  if (lenS === 0) return false;\n  if (6 + lenR + lenS !== buffer.length) return false;\n  if (buffer[4] & 0x80) return false;\n  if (lenR > 1 && buffer[4] === 0x00 && !(buffer[5] & 0x80)) return false;\n  if (buffer[lenR + 6] & 0x80) return false;\n  if (lenS > 1 && buffer[lenR + 6] === 0x00 && !(buffer[lenR + 7] & 0x80))\n    return false;\n  return true;\n}\nexports.check = check;\nfunction decode(buffer) {\n  if (buffer.length < 8) throw new Error('DER sequence length is too short');\n  if (buffer.length > 72) throw new Error('DER sequence length is too long');\n  if (buffer[0] !== 0x30) throw new Error('Expected DER sequence');\n  if (buffer[1] !== buffer.length - 2)\n    throw new Error('DER sequence length is invalid');\n  if (buffer[2] !== 0x02) throw new Error('Expected DER integer');\n  const lenR = buffer[3];\n  if (lenR === 0) throw new Error('R length is zero');\n  if (5 + lenR >= buffer.length) throw new Error('R length is too long');\n  if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)');\n  const lenS = buffer[5 + lenR];\n  if (lenS === 0) throw new Error('S length is zero');\n  if (6 + lenR + lenS !== buffer.length) throw new Error('S length is invalid');\n  if (buffer[4] & 0x80) throw new Error('R value is negative');\n  if (lenR > 1 && buffer[4] === 0x00 && !(buffer[5] & 0x80))\n    throw new Error('R value excessively padded');\n  if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative');\n  if (lenS > 1 && buffer[lenR + 6] === 0x00 && !(buffer[lenR + 7] & 0x80))\n    throw new Error('S value excessively padded');\n  // non-BIP66 - extract R, S values\n  return {\n    r: buffer.slice(4, 4 + lenR),\n    s: buffer.slice(6 + lenR),\n  };\n}\nexports.decode = decode;\n/*\n * Expects r and s to be positive DER integers.\n *\n * The DER format uses the most significant bit as a sign bit (& 0x80).\n * If the significant bit is set AND the integer is positive, a 0x00 is prepended.\n *\n * Examples:\n *\n *      0 =>     0x00\n *      1 =>     0x01\n *     -1 =>     0xff\n *    127 =>     0x7f\n *   -127 =>     0x81\n *    128 =>   0x0080\n *   -128 =>     0x80\n *    255 =>   0x00ff\n *   -255 =>   0xff01\n *  16300 =>   0x3fac\n * -16300 =>   0xc054\n *  62300 => 0x00f35c\n * -62300 => 0xff0ca4\n */\nfunction encode(r, s) {\n  const lenR = r.length;\n  const lenS = s.length;\n  if (lenR === 0) throw new Error('R length is zero');\n  if (lenS === 0) throw new Error('S length is zero');\n  if (lenR > 33) throw new Error('R length is too long');\n  if (lenS > 33) throw new Error('S length is too long');\n  if (r[0] & 0x80) throw new Error('R value is negative');\n  if (s[0] & 0x80) throw new Error('S value is negative');\n  if (lenR > 1 && r[0] === 0x00 && !(r[1] & 0x80))\n    throw new Error('R value excessively padded');\n  if (lenS > 1 && s[0] === 0x00 && !(s[1] & 0x80))\n    throw new Error('S value excessively padded');\n  const signature = Buffer.allocUnsafe(6 + lenR + lenS);\n  // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]\n  signature[0] = 0x30;\n  signature[1] = signature.length - 2;\n  signature[2] = 0x02;\n  signature[3] = r.length;\n  r.copy(signature, 4);\n  signature[4 + lenR] = 0x02;\n  signature[5 + lenR] = s.length;\n  s.copy(signature, 6 + lenR);\n  return signature;\n}\nexports.encode = encode;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.REVERSE_OPS = exports.OPS = void 0;\nconst OPS = {\n  OP_FALSE: 0,\n  OP_0: 0,\n  OP_PUSHDATA1: 76,\n  OP_PUSHDATA2: 77,\n  OP_PUSHDATA4: 78,\n  OP_1NEGATE: 79,\n  OP_RESERVED: 80,\n  OP_TRUE: 81,\n  OP_1: 81,\n  OP_2: 82,\n  OP_3: 83,\n  OP_4: 84,\n  OP_5: 85,\n  OP_6: 86,\n  OP_7: 87,\n  OP_8: 88,\n  OP_9: 89,\n  OP_10: 90,\n  OP_11: 91,\n  OP_12: 92,\n  OP_13: 93,\n  OP_14: 94,\n  OP_15: 95,\n  OP_16: 96,\n  OP_NOP: 97,\n  OP_VER: 98,\n  OP_IF: 99,\n  OP_NOTIF: 100,\n  OP_VERIF: 101,\n  OP_VERNOTIF: 102,\n  OP_ELSE: 103,\n  OP_ENDIF: 104,\n  OP_VERIFY: 105,\n  OP_RETURN: 106,\n  OP_TOALTSTACK: 107,\n  OP_FROMALTSTACK: 108,\n  OP_2DROP: 109,\n  OP_2DUP: 110,\n  OP_3DUP: 111,\n  OP_2OVER: 112,\n  OP_2ROT: 113,\n  OP_2SWAP: 114,\n  OP_IFDUP: 115,\n  OP_DEPTH: 116,\n  OP_DROP: 117,\n  OP_DUP: 118,\n  OP_NIP: 119,\n  OP_OVER: 120,\n  OP_PICK: 121,\n  OP_ROLL: 122,\n  OP_ROT: 123,\n  OP_SWAP: 124,\n  OP_TUCK: 125,\n  OP_CAT: 126,\n  OP_SUBSTR: 127,\n  OP_LEFT: 128,\n  OP_RIGHT: 129,\n  OP_SIZE: 130,\n  OP_INVERT: 131,\n  OP_AND: 132,\n  OP_OR: 133,\n  OP_XOR: 134,\n  OP_EQUAL: 135,\n  OP_EQUALVERIFY: 136,\n  OP_RESERVED1: 137,\n  OP_RESERVED2: 138,\n  OP_1ADD: 139,\n  OP_1SUB: 140,\n  OP_2MUL: 141,\n  OP_2DIV: 142,\n  OP_NEGATE: 143,\n  OP_ABS: 144,\n  OP_NOT: 145,\n  OP_0NOTEQUAL: 146,\n  OP_ADD: 147,\n  OP_SUB: 148,\n  OP_MUL: 149,\n  OP_DIV: 150,\n  OP_MOD: 151,\n  OP_LSHIFT: 152,\n  OP_RSHIFT: 153,\n  OP_BOOLAND: 154,\n  OP_BOOLOR: 155,\n  OP_NUMEQUAL: 156,\n  OP_NUMEQUALVERIFY: 157,\n  OP_NUMNOTEQUAL: 158,\n  OP_LESSTHAN: 159,\n  OP_GREATERTHAN: 160,\n  OP_LESSTHANOREQUAL: 161,\n  OP_GREATERTHANOREQUAL: 162,\n  OP_MIN: 163,\n  OP_MAX: 164,\n  OP_WITHIN: 165,\n  OP_RIPEMD160: 166,\n  OP_SHA1: 167,\n  OP_SHA256: 168,\n  OP_HASH160: 169,\n  OP_HASH256: 170,\n  OP_CODESEPARATOR: 171,\n  OP_CHECKSIG: 172,\n  OP_CHECKSIGVERIFY: 173,\n  OP_CHECKMULTISIG: 174,\n  OP_CHECKMULTISIGVERIFY: 175,\n  OP_NOP1: 176,\n  OP_NOP2: 177,\n  OP_CHECKLOCKTIMEVERIFY: 177,\n  OP_NOP3: 178,\n  OP_CHECKSEQUENCEVERIFY: 178,\n  OP_NOP4: 179,\n  OP_NOP5: 180,\n  OP_NOP6: 181,\n  OP_NOP7: 182,\n  OP_NOP8: 183,\n  OP_NOP9: 184,\n  OP_NOP10: 185,\n  OP_CHECKSIGADD: 186,\n  OP_PUBKEYHASH: 253,\n  OP_PUBKEY: 254,\n  OP_INVALIDOPCODE: 255,\n};\nexports.OPS = OPS;\nconst REVERSE_OPS = {};\nexports.REVERSE_OPS = REVERSE_OPS;\nfor (const op of Object.keys(OPS)) {\n  const code = OPS[op];\n  REVERSE_OPS[code] = op;\n}\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.decode = exports.encode = exports.encodingLength = void 0;\nconst ops_1 = require('./ops');\n/**\n * Calculates the encoding length of a number used for push data in Bitcoin transactions.\n * @param i The number to calculate the encoding length for.\n * @returns The encoding length of the number.\n */\nfunction encodingLength(i) {\n  return i < ops_1.OPS.OP_PUSHDATA1 ? 1 : i <= 0xff ? 2 : i <= 0xffff ? 3 : 5;\n}\nexports.encodingLength = encodingLength;\n/**\n * Encodes a number into a buffer using a variable-length encoding scheme.\n * The encoded buffer is written starting at the specified offset.\n * Returns the size of the encoded buffer.\n *\n * @param buffer - The buffer to write the encoded data into.\n * @param num - The number to encode.\n * @param offset - The offset at which to start writing the encoded buffer.\n * @returns The size of the encoded buffer.\n */\nfunction encode(buffer, num, offset) {\n  const size = encodingLength(num);\n  // ~6 bit\n  if (size === 1) {\n    buffer.writeUInt8(num, offset);\n    // 8 bit\n  } else if (size === 2) {\n    buffer.writeUInt8(ops_1.OPS.OP_PUSHDATA1, offset);\n    buffer.writeUInt8(num, offset + 1);\n    // 16 bit\n  } else if (size === 3) {\n    buffer.writeUInt8(ops_1.OPS.OP_PUSHDATA2, offset);\n    buffer.writeUInt16LE(num, offset + 1);\n    // 32 bit\n  } else {\n    buffer.writeUInt8(ops_1.OPS.OP_PUSHDATA4, offset);\n    buffer.writeUInt32LE(num, offset + 1);\n  }\n  return size;\n}\nexports.encode = encode;\n/**\n * Decodes a buffer and returns information about the opcode, number, and size.\n * @param buffer - The buffer to decode.\n * @param offset - The offset within the buffer to start decoding.\n * @returns An object containing the opcode, number, and size, or null if decoding fails.\n */\nfunction decode(buffer, offset) {\n  const opcode = buffer.readUInt8(offset);\n  let num;\n  let size;\n  // ~6 bit\n  if (opcode < ops_1.OPS.OP_PUSHDATA1) {\n    num = opcode;\n    size = 1;\n    // 8 bit\n  } else if (opcode === ops_1.OPS.OP_PUSHDATA1) {\n    if (offset + 2 > buffer.length) return null;\n    num = buffer.readUInt8(offset + 1);\n    size = 2;\n    // 16 bit\n  } else if (opcode === ops_1.OPS.OP_PUSHDATA2) {\n    if (offset + 3 > buffer.length) return null;\n    num = buffer.readUInt16LE(offset + 1);\n    size = 3;\n    // 32 bit\n  } else {\n    if (offset + 5 > buffer.length) return null;\n    if (opcode !== ops_1.OPS.OP_PUSHDATA4) throw new Error('Unexpected opcode');\n    num = buffer.readUInt32LE(offset + 1);\n    size = 5;\n  }\n  return {\n    opcode,\n    number: num,\n    size,\n  };\n}\nexports.decode = decode;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.encode = exports.decode = void 0;\n/**\n * Decodes a script number from a buffer.\n *\n * @param buffer - The buffer containing the script number.\n * @param maxLength - The maximum length of the script number. Defaults to 4.\n * @param minimal - Whether the script number should be minimal. Defaults to true.\n * @returns The decoded script number.\n * @throws {TypeError} If the script number overflows the maximum length.\n * @throws {Error} If the script number is not minimally encoded when minimal is true.\n */\nfunction decode(buffer, maxLength, minimal) {\n  maxLength = maxLength || 4;\n  minimal = minimal === undefined ? true : minimal;\n  const length = buffer.length;\n  if (length === 0) return 0;\n  if (length > maxLength) throw new TypeError('Script number overflow');\n  if (minimal) {\n    if ((buffer[length - 1] & 0x7f) === 0) {\n      if (length <= 1 || (buffer[length - 2] & 0x80) === 0)\n        throw new Error('Non-minimally encoded script number');\n    }\n  }\n  // 40-bit\n  if (length === 5) {\n    const a = buffer.readUInt32LE(0);\n    const b = buffer.readUInt8(4);\n    if (b & 0x80) return -((b & ~0x80) * 0x100000000 + a);\n    return b * 0x100000000 + a;\n  }\n  // 32-bit / 24-bit / 16-bit / 8-bit\n  let result = 0;\n  for (let i = 0; i < length; ++i) {\n    result |= buffer[i] << (8 * i);\n  }\n  if (buffer[length - 1] & 0x80)\n    return -(result & ~(0x80 << (8 * (length - 1))));\n  return result;\n}\nexports.decode = decode;\nfunction scriptNumSize(i) {\n  return i > 0x7fffffff\n    ? 5\n    : i > 0x7fffff\n    ? 4\n    : i > 0x7fff\n    ? 3\n    : i > 0x7f\n    ? 2\n    : i > 0x00\n    ? 1\n    : 0;\n}\n/**\n * Encodes a number into a Buffer using a specific format.\n *\n * @param _number - The number to encode.\n * @returns The encoded number as a Buffer.\n */\nfunction encode(_number) {\n  let value = Math.abs(_number);\n  const size = scriptNumSize(value);\n  const buffer = Buffer.allocUnsafe(size);\n  const negative = _number < 0;\n  for (let i = 0; i < size; ++i) {\n    buffer.writeUInt8(value & 0xff, i);\n    value >>= 8;\n  }\n  if (buffer[size - 1] & 0x80) {\n    buffer.writeUInt8(negative ? 0x80 : 0x00, size - 1);\n  } else if (negative) {\n    buffer[size - 1] |= 0x80;\n  }\n  return buffer;\n}\nexports.encode = encode;\n","var types = {\n  Array: function (value) { return value !== null && value !== undefined && value.constructor === Array },\n  Boolean: function (value) { return typeof value === 'boolean' },\n  Function: function (value) { return typeof value === 'function' },\n  Nil: function (value) { return value === undefined || value === null },\n  Number: function (value) { return typeof value === 'number' },\n  Object: function (value) { return typeof value === 'object' },\n  String: function (value) { return typeof value === 'string' },\n  '': function () { return true }\n}\n\n// TODO: deprecate\ntypes.Null = types.Nil\n\nfor (var typeName in types) {\n  types[typeName].toJSON = function (t) {\n    return t\n  }.bind(null, typeName)\n}\n\nmodule.exports = types\n","var native = require('./native')\n\nfunction getTypeName (fn) {\n  return fn.name || fn.toString().match(/function (.*?)\\s*\\(/)[1]\n}\n\nfunction getValueTypeName (value) {\n  return native.Nil(value) ? '' : getTypeName(value.constructor)\n}\n\nfunction getValue (value) {\n  if (native.Function(value)) return ''\n  if (native.String(value)) return JSON.stringify(value)\n  if (value && native.Object(value)) return ''\n  return value\n}\n\nfunction captureStackTrace (e, t) {\n  if (Error.captureStackTrace) {\n    Error.captureStackTrace(e, t)\n  }\n}\n\nfunction tfJSON (type) {\n  if (native.Function(type)) return type.toJSON ? type.toJSON() : getTypeName(type)\n  if (native.Array(type)) return 'Array'\n  if (type && native.Object(type)) return 'Object'\n\n  return type !== undefined ? type : ''\n}\n\nfunction tfErrorString (type, value, valueTypeName) {\n  var valueJson = getValue(value)\n\n  return 'Expected ' + tfJSON(type) + ', got' +\n    (valueTypeName !== '' ? ' ' + valueTypeName : '') +\n    (valueJson !== '' ? ' ' + valueJson : '')\n}\n\nfunction TfTypeError (type, value, valueTypeName) {\n  valueTypeName = valueTypeName || getValueTypeName(value)\n  this.message = tfErrorString(type, value, valueTypeName)\n\n  captureStackTrace(this, TfTypeError)\n  this.__type = type\n  this.__value = value\n  this.__valueTypeName = valueTypeName\n}\n\nTfTypeError.prototype = Object.create(Error.prototype)\nTfTypeError.prototype.constructor = TfTypeError\n\nfunction tfPropertyErrorString (type, label, name, value, valueTypeName) {\n  var description = '\" of type '\n  if (label === 'key') description = '\" with key type '\n\n  return tfErrorString('property \"' + tfJSON(name) + description + tfJSON(type), value, valueTypeName)\n}\n\nfunction TfPropertyTypeError (type, property, label, value, valueTypeName) {\n  if (type) {\n    valueTypeName = valueTypeName || getValueTypeName(value)\n    this.message = tfPropertyErrorString(type, label, property, value, valueTypeName)\n  } else {\n    this.message = 'Unexpected property \"' + property + '\"'\n  }\n\n  captureStackTrace(this, TfTypeError)\n  this.__label = label\n  this.__property = property\n  this.__type = type\n  this.__value = value\n  this.__valueTypeName = valueTypeName\n}\n\nTfPropertyTypeError.prototype = Object.create(Error.prototype)\nTfPropertyTypeError.prototype.constructor = TfTypeError\n\nfunction tfCustomError (expected, actual) {\n  return new TfTypeError(expected, {}, actual)\n}\n\nfunction tfSubError (e, property, label) {\n  // sub child?\n  if (e instanceof TfPropertyTypeError) {\n    property = property + '.' + e.__property\n\n    e = new TfPropertyTypeError(\n      e.__type, property, e.__label, e.__value, e.__valueTypeName\n    )\n\n  // child?\n  } else if (e instanceof TfTypeError) {\n    e = new TfPropertyTypeError(\n      e.__type, property, label, e.__value, e.__valueTypeName\n    )\n  }\n\n  captureStackTrace(e)\n  return e\n}\n\nmodule.exports = {\n  TfTypeError: TfTypeError,\n  TfPropertyTypeError: TfPropertyTypeError,\n  tfCustomError: tfCustomError,\n  tfSubError: tfSubError,\n  tfJSON: tfJSON,\n  getValueTypeName: getValueTypeName\n}\n","var NATIVE = require('./native')\nvar ERRORS = require('./errors')\n\nfunction _Buffer (value) {\n  return Buffer.isBuffer(value)\n}\n\nfunction Hex (value) {\n  return typeof value === 'string' && /^([0-9a-f]{2})+$/i.test(value)\n}\n\nfunction _LengthN (type, length) {\n  var name = type.toJSON()\n\n  function Length (value) {\n    if (!type(value)) return false\n    if (value.length === length) return true\n\n    throw ERRORS.tfCustomError(name + '(Length: ' + length + ')', name + '(Length: ' + value.length + ')')\n  }\n  Length.toJSON = function () { return name }\n\n  return Length\n}\n\nvar _ArrayN = _LengthN.bind(null, NATIVE.Array)\nvar _BufferN = _LengthN.bind(null, _Buffer)\nvar _HexN = _LengthN.bind(null, Hex)\nvar _StringN = _LengthN.bind(null, NATIVE.String)\n\nfunction Range (a, b, f) {\n  f = f || NATIVE.Number\n  function _range (value, strict) {\n    return f(value, strict) && (value > a) && (value < b)\n  }\n  _range.toJSON = function () {\n    return `${f.toJSON()} between [${a}, ${b}]`\n  }\n  return _range\n}\n\nvar INT53_MAX = Math.pow(2, 53) - 1\n\nfunction Finite (value) {\n  return typeof value === 'number' && isFinite(value)\n}\nfunction Int8 (value) { return ((value << 24) >> 24) === value }\nfunction Int16 (value) { return ((value << 16) >> 16) === value }\nfunction Int32 (value) { return (value | 0) === value }\nfunction Int53 (value) {\n  return typeof value === 'number' &&\n    value >= -INT53_MAX &&\n    value <= INT53_MAX &&\n    Math.floor(value) === value\n}\nfunction UInt8 (value) { return (value & 0xff) === value }\nfunction UInt16 (value) { return (value & 0xffff) === value }\nfunction UInt32 (value) { return (value >>> 0) === value }\nfunction UInt53 (value) {\n  return typeof value === 'number' &&\n    value >= 0 &&\n    value <= INT53_MAX &&\n    Math.floor(value) === value\n}\n\nvar types = {\n  ArrayN: _ArrayN,\n  Buffer: _Buffer,\n  BufferN: _BufferN,\n  Finite: Finite,\n  Hex: Hex,\n  HexN: _HexN,\n  Int8: Int8,\n  Int16: Int16,\n  Int32: Int32,\n  Int53: Int53,\n  Range: Range,\n  StringN: _StringN,\n  UInt8: UInt8,\n  UInt16: UInt16,\n  UInt32: UInt32,\n  UInt53: UInt53\n}\n\nfor (var typeName in types) {\n  types[typeName].toJSON = function (t) {\n    return t\n  }.bind(null, typeName)\n}\n\nmodule.exports = types\n","var ERRORS = require('./errors')\nvar NATIVE = require('./native')\n\n// short-hand\nvar tfJSON = ERRORS.tfJSON\nvar TfTypeError = ERRORS.TfTypeError\nvar TfPropertyTypeError = ERRORS.TfPropertyTypeError\nvar tfSubError = ERRORS.tfSubError\nvar getValueTypeName = ERRORS.getValueTypeName\n\nvar TYPES = {\n  arrayOf: function arrayOf (type, options) {\n    type = compile(type)\n    options = options || {}\n\n    function _arrayOf (array, strict) {\n      if (!NATIVE.Array(array)) return false\n      if (NATIVE.Nil(array)) return false\n      if (options.minLength !== undefined && array.length < options.minLength) return false\n      if (options.maxLength !== undefined && array.length > options.maxLength) return false\n      if (options.length !== undefined && array.length !== options.length) return false\n\n      return array.every(function (value, i) {\n        try {\n          return typeforce(type, value, strict)\n        } catch (e) {\n          throw tfSubError(e, i)\n        }\n      })\n    }\n    _arrayOf.toJSON = function () {\n      var str = '[' + tfJSON(type) + ']'\n      if (options.length !== undefined) {\n        str += '{' + options.length + '}'\n      } else if (options.minLength !== undefined || options.maxLength !== undefined) {\n        str += '{' +\n          (options.minLength === undefined ? 0 : options.minLength) + ',' +\n          (options.maxLength === undefined ? Infinity : options.maxLength) + '}'\n      }\n      return str\n    }\n\n    return _arrayOf\n  },\n\n  maybe: function maybe (type) {\n    type = compile(type)\n\n    function _maybe (value, strict) {\n      return NATIVE.Nil(value) || type(value, strict, maybe)\n    }\n    _maybe.toJSON = function () { return '?' + tfJSON(type) }\n\n    return _maybe\n  },\n\n  map: function map (propertyType, propertyKeyType) {\n    propertyType = compile(propertyType)\n    if (propertyKeyType) propertyKeyType = compile(propertyKeyType)\n\n    function _map (value, strict) {\n      if (!NATIVE.Object(value)) return false\n      if (NATIVE.Nil(value)) return false\n\n      for (var propertyName in value) {\n        try {\n          if (propertyKeyType) {\n            typeforce(propertyKeyType, propertyName, strict)\n          }\n        } catch (e) {\n          throw tfSubError(e, propertyName, 'key')\n        }\n\n        try {\n          var propertyValue = value[propertyName]\n          typeforce(propertyType, propertyValue, strict)\n        } catch (e) {\n          throw tfSubError(e, propertyName)\n        }\n      }\n\n      return true\n    }\n\n    if (propertyKeyType) {\n      _map.toJSON = function () {\n        return '{' + tfJSON(propertyKeyType) + ': ' + tfJSON(propertyType) + '}'\n      }\n    } else {\n      _map.toJSON = function () { return '{' + tfJSON(propertyType) + '}' }\n    }\n\n    return _map\n  },\n\n  object: function object (uncompiled) {\n    var type = {}\n\n    for (var typePropertyName in uncompiled) {\n      type[typePropertyName] = compile(uncompiled[typePropertyName])\n    }\n\n    function _object (value, strict) {\n      if (!NATIVE.Object(value)) return false\n      if (NATIVE.Nil(value)) return false\n\n      var propertyName\n\n      try {\n        for (propertyName in type) {\n          var propertyType = type[propertyName]\n          var propertyValue = value[propertyName]\n\n          typeforce(propertyType, propertyValue, strict)\n        }\n      } catch (e) {\n        throw tfSubError(e, propertyName)\n      }\n\n      if (strict) {\n        for (propertyName in value) {\n          if (type[propertyName]) continue\n\n          throw new TfPropertyTypeError(undefined, propertyName)\n        }\n      }\n\n      return true\n    }\n    _object.toJSON = function () { return tfJSON(type) }\n\n    return _object\n  },\n\n  anyOf: function anyOf () {\n    var types = [].slice.call(arguments).map(compile)\n\n    function _anyOf (value, strict) {\n      return types.some(function (type) {\n        try {\n          return typeforce(type, value, strict)\n        } catch (e) {\n          return false\n        }\n      })\n    }\n    _anyOf.toJSON = function () { return types.map(tfJSON).join('|') }\n\n    return _anyOf\n  },\n\n  allOf: function allOf () {\n    var types = [].slice.call(arguments).map(compile)\n\n    function _allOf (value, strict) {\n      return types.every(function (type) {\n        try {\n          return typeforce(type, value, strict)\n        } catch (e) {\n          return false\n        }\n      })\n    }\n    _allOf.toJSON = function () { return types.map(tfJSON).join(' & ') }\n\n    return _allOf\n  },\n\n  quacksLike: function quacksLike (type) {\n    function _quacksLike (value) {\n      return type === getValueTypeName(value)\n    }\n    _quacksLike.toJSON = function () { return type }\n\n    return _quacksLike\n  },\n\n  tuple: function tuple () {\n    var types = [].slice.call(arguments).map(compile)\n\n    function _tuple (values, strict) {\n      if (NATIVE.Nil(values)) return false\n      if (NATIVE.Nil(values.length)) return false\n      if (strict && (values.length !== types.length)) return false\n\n      return types.every(function (type, i) {\n        try {\n          return typeforce(type, values[i], strict)\n        } catch (e) {\n          throw tfSubError(e, i)\n        }\n      })\n    }\n    _tuple.toJSON = function () { return '(' + types.map(tfJSON).join(', ') + ')' }\n\n    return _tuple\n  },\n\n  value: function value (expected) {\n    function _value (actual) {\n      return actual === expected\n    }\n    _value.toJSON = function () { return expected }\n\n    return _value\n  }\n}\n\n// TODO: deprecate\nTYPES.oneOf = TYPES.anyOf\n\nfunction compile (type) {\n  if (NATIVE.String(type)) {\n    if (type[0] === '?') return TYPES.maybe(type.slice(1))\n\n    return NATIVE[type] || TYPES.quacksLike(type)\n  } else if (type && NATIVE.Object(type)) {\n    if (NATIVE.Array(type)) {\n      if (type.length !== 1) throw new TypeError('Expected compile() parameter of type Array of length 1')\n      return TYPES.arrayOf(type[0])\n    }\n\n    return TYPES.object(type)\n  } else if (NATIVE.Function(type)) {\n    return type\n  }\n\n  return TYPES.value(type)\n}\n\nfunction typeforce (type, value, strict, surrogate) {\n  if (NATIVE.Function(type)) {\n    if (type(value, strict)) return true\n\n    throw new TfTypeError(surrogate || type, value)\n  }\n\n  // JIT\n  return typeforce(compile(type), value, strict)\n}\n\n// assign types to typeforce function\nfor (var typeName in NATIVE) {\n  typeforce[typeName] = NATIVE[typeName]\n}\n\nfor (typeName in TYPES) {\n  typeforce[typeName] = TYPES[typeName]\n}\n\nvar EXTRA = require('./extra')\nfor (typeName in EXTRA) {\n  typeforce[typeName] = EXTRA[typeName]\n}\n\ntypeforce.compile = compile\ntypeforce.TfTypeError = TfTypeError\ntypeforce.TfPropertyTypeError = TfPropertyTypeError\n\nmodule.exports = typeforce\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.oneOf =\n  exports.Null =\n  exports.BufferN =\n  exports.Function =\n  exports.UInt32 =\n  exports.UInt8 =\n  exports.tuple =\n  exports.maybe =\n  exports.Hex =\n  exports.Buffer =\n  exports.String =\n  exports.Boolean =\n  exports.Array =\n  exports.Number =\n  exports.Hash256bit =\n  exports.Hash160bit =\n  exports.Buffer256bit =\n  exports.isTaptree =\n  exports.isTapleaf =\n  exports.TAPLEAF_VERSION_MASK =\n  exports.Satoshi =\n  exports.isPoint =\n  exports.stacksEqual =\n  exports.typeforce =\n    void 0;\nconst buffer_1 = require('buffer');\nexports.typeforce = require('typeforce');\nconst ZERO32 = buffer_1.Buffer.alloc(32, 0);\nconst EC_P = buffer_1.Buffer.from(\n  'fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f',\n  'hex',\n);\n/**\n * Checks if two arrays of Buffers are equal.\n * @param a - The first array of Buffers.\n * @param b - The second array of Buffers.\n * @returns True if the arrays are equal, false otherwise.\n */\nfunction stacksEqual(a, b) {\n  if (a.length !== b.length) return false;\n  return a.every((x, i) => {\n    return x.equals(b[i]);\n  });\n}\nexports.stacksEqual = stacksEqual;\n/**\n * Checks if the given value is a valid elliptic curve point.\n * @param p - The value to check.\n * @returns True if the value is a valid elliptic curve point, false otherwise.\n */\nfunction isPoint(p) {\n  if (!buffer_1.Buffer.isBuffer(p)) return false;\n  if (p.length < 33) return false;\n  const t = p[0];\n  const x = p.slice(1, 33);\n  if (x.compare(ZERO32) === 0) return false;\n  if (x.compare(EC_P) >= 0) return false;\n  if ((t === 0x02 || t === 0x03) && p.length === 33) {\n    return true;\n  }\n  const y = p.slice(33);\n  if (y.compare(ZERO32) === 0) return false;\n  if (y.compare(EC_P) >= 0) return false;\n  if (t === 0x04 && p.length === 65) return true;\n  return false;\n}\nexports.isPoint = isPoint;\nconst SATOSHI_MAX = 21 * 1e14;\nfunction Satoshi(value) {\n  return exports.typeforce.UInt53(value) && value <= SATOSHI_MAX;\n}\nexports.Satoshi = Satoshi;\nexports.TAPLEAF_VERSION_MASK = 0xfe;\nfunction isTapleaf(o) {\n  if (!o || !('output' in o)) return false;\n  if (!buffer_1.Buffer.isBuffer(o.output)) return false;\n  if (o.version !== undefined)\n    return (o.version & exports.TAPLEAF_VERSION_MASK) === o.version;\n  return true;\n}\nexports.isTapleaf = isTapleaf;\nfunction isTaptree(scriptTree) {\n  if (!(0, exports.Array)(scriptTree)) return isTapleaf(scriptTree);\n  if (scriptTree.length !== 2) return false;\n  return scriptTree.every(t => isTaptree(t));\n}\nexports.isTaptree = isTaptree;\nexports.Buffer256bit = exports.typeforce.BufferN(32);\nexports.Hash160bit = exports.typeforce.BufferN(20);\nexports.Hash256bit = exports.typeforce.BufferN(32);\nexports.Number = exports.typeforce.Number;\nexports.Array = exports.typeforce.Array;\nexports.Boolean = exports.typeforce.Boolean;\nexports.String = exports.typeforce.String;\nexports.Buffer = exports.typeforce.Buffer;\nexports.Hex = exports.typeforce.Hex;\nexports.maybe = exports.typeforce.maybe;\nexports.tuple = exports.typeforce.tuple;\nexports.UInt8 = exports.typeforce.UInt8;\nexports.UInt32 = exports.typeforce.UInt32;\nexports.Function = exports.typeforce.Function;\nexports.BufferN = exports.typeforce.BufferN;\nexports.Null = exports.typeforce.Null;\nexports.oneOf = exports.typeforce.oneOf;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.encode = exports.decode = void 0;\nconst bip66 = require('./bip66');\nconst script_1 = require('./script');\nconst types = require('./types');\nconst { typeforce } = types;\nconst ZERO = Buffer.alloc(1, 0);\n/**\n * Converts a buffer to a DER-encoded buffer.\n * @param x - The buffer to be converted.\n * @returns The DER-encoded buffer.\n */\nfunction toDER(x) {\n  let i = 0;\n  while (x[i] === 0) ++i;\n  if (i === x.length) return ZERO;\n  x = x.slice(i);\n  if (x[0] & 0x80) return Buffer.concat([ZERO, x], 1 + x.length);\n  return x;\n}\n/**\n * Converts a DER-encoded signature to a buffer.\n * If the first byte of the input buffer is 0x00, it is skipped.\n * The resulting buffer is 32 bytes long, filled with zeros if necessary.\n * @param x - The DER-encoded signature.\n * @returns The converted buffer.\n */\nfunction fromDER(x) {\n  if (x[0] === 0x00) x = x.slice(1);\n  const buffer = Buffer.alloc(32, 0);\n  const bstart = Math.max(0, 32 - x.length);\n  x.copy(buffer, bstart);\n  return buffer;\n}\n// BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)\n/**\n * Decodes a buffer into a ScriptSignature object.\n * @param buffer - The buffer to decode.\n * @returns The decoded ScriptSignature object.\n * @throws Error if the hashType is invalid.\n */\nfunction decode(buffer) {\n  const hashType = buffer.readUInt8(buffer.length - 1);\n  if (!(0, script_1.isDefinedHashType)(hashType)) {\n    throw new Error('Invalid hashType ' + hashType);\n  }\n  const decoded = bip66.decode(buffer.slice(0, -1));\n  const r = fromDER(decoded.r);\n  const s = fromDER(decoded.s);\n  const signature = Buffer.concat([r, s], 64);\n  return { signature, hashType };\n}\nexports.decode = decode;\n/**\n * Encodes a signature and hash type into a buffer.\n * @param signature - The signature to encode.\n * @param hashType - The hash type to encode.\n * @returns The encoded buffer.\n * @throws Error if the hashType is invalid.\n */\nfunction encode(signature, hashType) {\n  typeforce(\n    {\n      signature: types.BufferN(64),\n      hashType: types.UInt8,\n    },\n    { signature, hashType },\n  );\n  if (!(0, script_1.isDefinedHashType)(hashType)) {\n    throw new Error('Invalid hashType ' + hashType);\n  }\n  const hashTypeBuffer = Buffer.allocUnsafe(1);\n  hashTypeBuffer.writeUInt8(hashType, 0);\n  const r = toDER(signature.slice(0, 32));\n  const s = toDER(signature.slice(32, 64));\n  return Buffer.concat([bip66.encode(r, s), hashTypeBuffer]);\n}\nexports.encode = encode;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.signature =\n  exports.number =\n  exports.isCanonicalScriptSignature =\n  exports.isDefinedHashType =\n  exports.isCanonicalPubKey =\n  exports.toStack =\n  exports.fromASM =\n  exports.toASM =\n  exports.decompile =\n  exports.compile =\n  exports.countNonPushOnlyOPs =\n  exports.isPushOnly =\n  exports.OPS =\n    void 0;\n/**\n * Script tools, including decompile, compile, toASM, fromASM, toStack, isCanonicalPubKey, isCanonicalScriptSignature\n * @packageDocumentation\n */\nconst bip66 = require('./bip66');\nconst ops_1 = require('./ops');\nObject.defineProperty(exports, 'OPS', {\n  enumerable: true,\n  get: function () {\n    return ops_1.OPS;\n  },\n});\nconst pushdata = require('./push_data');\nconst scriptNumber = require('./script_number');\nconst scriptSignature = require('./script_signature');\nconst types = require('./types');\nconst { typeforce } = types;\nconst OP_INT_BASE = ops_1.OPS.OP_RESERVED; // OP_1 - 1\nfunction isOPInt(value) {\n  return (\n    types.Number(value) &&\n    (value === ops_1.OPS.OP_0 ||\n      (value >= ops_1.OPS.OP_1 && value <= ops_1.OPS.OP_16) ||\n      value === ops_1.OPS.OP_1NEGATE)\n  );\n}\nfunction isPushOnlyChunk(value) {\n  return types.Buffer(value) || isOPInt(value);\n}\nfunction isPushOnly(value) {\n  return types.Array(value) && value.every(isPushOnlyChunk);\n}\nexports.isPushOnly = isPushOnly;\nfunction countNonPushOnlyOPs(value) {\n  return value.length - value.filter(isPushOnlyChunk).length;\n}\nexports.countNonPushOnlyOPs = countNonPushOnlyOPs;\nfunction asMinimalOP(buffer) {\n  if (buffer.length === 0) return ops_1.OPS.OP_0;\n  if (buffer.length !== 1) return;\n  if (buffer[0] >= 1 && buffer[0] <= 16) return OP_INT_BASE + buffer[0];\n  if (buffer[0] === 0x81) return ops_1.OPS.OP_1NEGATE;\n}\nfunction chunksIsBuffer(buf) {\n  return Buffer.isBuffer(buf);\n}\nfunction chunksIsArray(buf) {\n  return types.Array(buf);\n}\nfunction singleChunkIsBuffer(buf) {\n  return Buffer.isBuffer(buf);\n}\n/**\n * Compiles an array of chunks into a Buffer.\n *\n * @param chunks - The array of chunks to compile.\n * @returns The compiled Buffer.\n * @throws Error if the compilation fails.\n */\nfunction compile(chunks) {\n  // TODO: remove me\n  if (chunksIsBuffer(chunks)) return chunks;\n  typeforce(types.Array, chunks);\n  const bufferSize = chunks.reduce((accum, chunk) => {\n    // data chunk\n    if (singleChunkIsBuffer(chunk)) {\n      // adhere to BIP62.3, minimal push policy\n      if (chunk.length === 1 && asMinimalOP(chunk) !== undefined) {\n        return accum + 1;\n      }\n      return accum + pushdata.encodingLength(chunk.length) + chunk.length;\n    }\n    // opcode\n    return accum + 1;\n  }, 0.0);\n  const buffer = Buffer.allocUnsafe(bufferSize);\n  let offset = 0;\n  chunks.forEach(chunk => {\n    // data chunk\n    if (singleChunkIsBuffer(chunk)) {\n      // adhere to BIP62.3, minimal push policy\n      const opcode = asMinimalOP(chunk);\n      if (opcode !== undefined) {\n        buffer.writeUInt8(opcode, offset);\n        offset += 1;\n        return;\n      }\n      offset += pushdata.encode(buffer, chunk.length, offset);\n      chunk.copy(buffer, offset);\n      offset += chunk.length;\n      // opcode\n    } else {\n      buffer.writeUInt8(chunk, offset);\n      offset += 1;\n    }\n  });\n  if (offset !== buffer.length) throw new Error('Could not decode chunks');\n  return buffer;\n}\nexports.compile = compile;\nfunction decompile(buffer) {\n  // TODO: remove me\n  if (chunksIsArray(buffer)) return buffer;\n  typeforce(types.Buffer, buffer);\n  const chunks = [];\n  let i = 0;\n  while (i < buffer.length) {\n    const opcode = buffer[i];\n    // data chunk\n    if (opcode > ops_1.OPS.OP_0 && opcode <= ops_1.OPS.OP_PUSHDATA4) {\n      const d = pushdata.decode(buffer, i);\n      // did reading a pushDataInt fail?\n      if (d === null) return null;\n      i += d.size;\n      // attempt to read too much data?\n      if (i + d.number > buffer.length) return null;\n      const data = buffer.slice(i, i + d.number);\n      i += d.number;\n      // decompile minimally\n      const op = asMinimalOP(data);\n      if (op !== undefined) {\n        chunks.push(op);\n      } else {\n        chunks.push(data);\n      }\n      // opcode\n    } else {\n      chunks.push(opcode);\n      i += 1;\n    }\n  }\n  return chunks;\n}\nexports.decompile = decompile;\n/**\n * Converts the given chunks into an ASM (Assembly) string representation.\n * If the chunks parameter is a Buffer, it will be decompiled into a Stack before conversion.\n * @param chunks - The chunks to convert into ASM.\n * @returns The ASM string representation of the chunks.\n */\nfunction toASM(chunks) {\n  if (chunksIsBuffer(chunks)) {\n    chunks = decompile(chunks);\n  }\n  if (!chunks) {\n    throw new Error('Could not convert invalid chunks to ASM');\n  }\n  return chunks\n    .map(chunk => {\n      // data?\n      if (singleChunkIsBuffer(chunk)) {\n        const op = asMinimalOP(chunk);\n        if (op === undefined) return chunk.toString('hex');\n        chunk = op;\n      }\n      // opcode!\n      return ops_1.REVERSE_OPS[chunk];\n    })\n    .join(' ');\n}\nexports.toASM = toASM;\n/**\n * Converts an ASM string to a Buffer.\n * @param asm The ASM string to convert.\n * @returns The converted Buffer.\n */\nfunction fromASM(asm) {\n  typeforce(types.String, asm);\n  return compile(\n    asm.split(' ').map(chunkStr => {\n      // opcode?\n      if (ops_1.OPS[chunkStr] !== undefined) return ops_1.OPS[chunkStr];\n      typeforce(types.Hex, chunkStr);\n      // data!\n      return Buffer.from(chunkStr, 'hex');\n    }),\n  );\n}\nexports.fromASM = fromASM;\n/**\n * Converts the given chunks into a stack of buffers.\n *\n * @param chunks - The chunks to convert.\n * @returns The stack of buffers.\n */\nfunction toStack(chunks) {\n  chunks = decompile(chunks);\n  typeforce(isPushOnly, chunks);\n  return chunks.map(op => {\n    if (singleChunkIsBuffer(op)) return op;\n    if (op === ops_1.OPS.OP_0) return Buffer.allocUnsafe(0);\n    return scriptNumber.encode(op - OP_INT_BASE);\n  });\n}\nexports.toStack = toStack;\nfunction isCanonicalPubKey(buffer) {\n  return types.isPoint(buffer);\n}\nexports.isCanonicalPubKey = isCanonicalPubKey;\nfunction isDefinedHashType(hashType) {\n  const hashTypeMod = hashType & ~0x80;\n  // return hashTypeMod > SIGHASH_ALL && hashTypeMod < SIGHASH_SINGLE\n  return hashTypeMod > 0x00 && hashTypeMod < 0x04;\n}\nexports.isDefinedHashType = isDefinedHashType;\nfunction isCanonicalScriptSignature(buffer) {\n  if (!Buffer.isBuffer(buffer)) return false;\n  if (!isDefinedHashType(buffer[buffer.length - 1])) return false;\n  return bip66.check(buffer.slice(0, -1));\n}\nexports.isCanonicalScriptSignature = isCanonicalScriptSignature;\nexports.number = scriptNumber;\nexports.signature = scriptSignature;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.value = exports.prop = void 0;\nfunction prop(object, name, f) {\n  Object.defineProperty(object, name, {\n    configurable: true,\n    enumerable: true,\n    get() {\n      const _value = f.call(this);\n      this[name] = _value;\n      return _value;\n    },\n    set(_value) {\n      Object.defineProperty(this, name, {\n        configurable: true,\n        enumerable: true,\n        value: _value,\n        writable: true,\n      });\n    },\n  });\n}\nexports.prop = prop;\nfunction value(f) {\n  let _value;\n  return () => {\n    if (_value !== undefined) return _value;\n    _value = f();\n    return _value;\n  };\n}\nexports.value = value;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.p2data = void 0;\nconst networks_1 = require('../networks');\nconst bscript = require('../script');\nconst types_1 = require('../types');\nconst lazy = require('./lazy');\nconst OPS = bscript.OPS;\n// output: OP_RETURN ...\n/**\n * Embeds data in a Bitcoin payment.\n * @param a - The payment object.\n * @param opts - Optional payment options.\n * @returns The modified payment object.\n * @throws {TypeError} If there is not enough data or if the output is invalid.\n */\nfunction p2data(a, opts) {\n  if (!a.data && !a.output) throw new TypeError('Not enough data');\n  opts = Object.assign({ validate: true }, opts || {});\n  (0, types_1.typeforce)(\n    {\n      network: types_1.typeforce.maybe(types_1.typeforce.Object),\n      output: types_1.typeforce.maybe(types_1.typeforce.Buffer),\n      data: types_1.typeforce.maybe(\n        types_1.typeforce.arrayOf(types_1.typeforce.Buffer),\n      ),\n    },\n    a,\n  );\n  const network = a.network || networks_1.bitcoin;\n  const o = { name: 'embed', network };\n  lazy.prop(o, 'output', () => {\n    if (!a.data) return;\n    return bscript.compile([OPS.OP_RETURN].concat(a.data));\n  });\n  lazy.prop(o, 'data', () => {\n    if (!a.output) return;\n    return bscript.decompile(a.output).slice(1);\n  });\n  // extended validation\n  if (opts.validate) {\n    if (a.output) {\n      const chunks = bscript.decompile(a.output);\n      if (chunks[0] !== OPS.OP_RETURN) throw new TypeError('Output is invalid');\n      if (!chunks.slice(1).every(types_1.typeforce.Buffer))\n        throw new TypeError('Output is invalid');\n      if (a.data && !(0, types_1.stacksEqual)(a.data, o.data))\n        throw new TypeError('Data mismatch');\n    }\n  }\n  return Object.assign(o, a);\n}\nexports.p2data = p2data;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.p2ms = void 0;\nconst networks_1 = require('../networks');\nconst bscript = require('../script');\nconst types_1 = require('../types');\nconst lazy = require('./lazy');\nconst OPS = bscript.OPS;\nconst OP_INT_BASE = OPS.OP_RESERVED; // OP_1 - 1\n// input: OP_0 [signatures ...]\n// output: m [pubKeys ...] n OP_CHECKMULTISIG\n/**\n * Represents a function that creates a Pay-to-Multisig (P2MS) payment object.\n * @param a - The payment object.\n * @param opts - Optional payment options.\n * @returns The created payment object.\n * @throws {TypeError} If the provided data is not valid.\n */\nfunction p2ms(a, opts) {\n  if (\n    !a.input &&\n    !a.output &&\n    !(a.pubkeys && a.m !== undefined) &&\n    !a.signatures\n  )\n    throw new TypeError('Not enough data');\n  opts = Object.assign({ validate: true }, opts || {});\n  function isAcceptableSignature(x) {\n    return (\n      bscript.isCanonicalScriptSignature(x) ||\n      (opts.allowIncomplete && x === OPS.OP_0) !== undefined\n    );\n  }\n  (0, types_1.typeforce)(\n    {\n      network: types_1.typeforce.maybe(types_1.typeforce.Object),\n      m: types_1.typeforce.maybe(types_1.typeforce.Number),\n      n: types_1.typeforce.maybe(types_1.typeforce.Number),\n      output: types_1.typeforce.maybe(types_1.typeforce.Buffer),\n      pubkeys: types_1.typeforce.maybe(\n        types_1.typeforce.arrayOf(types_1.isPoint),\n      ),\n      signatures: types_1.typeforce.maybe(\n        types_1.typeforce.arrayOf(isAcceptableSignature),\n      ),\n      input: types_1.typeforce.maybe(types_1.typeforce.Buffer),\n    },\n    a,\n  );\n  const network = a.network || networks_1.bitcoin;\n  const o = { network };\n  let chunks = [];\n  let decoded = false;\n  function decode(output) {\n    if (decoded) return;\n    decoded = true;\n    chunks = bscript.decompile(output);\n    o.m = chunks[0] - OP_INT_BASE;\n    o.n = chunks[chunks.length - 2] - OP_INT_BASE;\n    o.pubkeys = chunks.slice(1, -2);\n  }\n  lazy.prop(o, 'output', () => {\n    if (!a.m) return;\n    if (!o.n) return;\n    if (!a.pubkeys) return;\n    return bscript.compile(\n      [].concat(\n        OP_INT_BASE + a.m,\n        a.pubkeys,\n        OP_INT_BASE + o.n,\n        OPS.OP_CHECKMULTISIG,\n      ),\n    );\n  });\n  lazy.prop(o, 'm', () => {\n    if (!o.output) return;\n    decode(o.output);\n    return o.m;\n  });\n  lazy.prop(o, 'n', () => {\n    if (!o.pubkeys) return;\n    return o.pubkeys.length;\n  });\n  lazy.prop(o, 'pubkeys', () => {\n    if (!a.output) return;\n    decode(a.output);\n    return o.pubkeys;\n  });\n  lazy.prop(o, 'signatures', () => {\n    if (!a.input) return;\n    return bscript.decompile(a.input).slice(1);\n  });\n  lazy.prop(o, 'input', () => {\n    if (!a.signatures) return;\n    return bscript.compile([OPS.OP_0].concat(a.signatures));\n  });\n  lazy.prop(o, 'witness', () => {\n    if (!o.input) return;\n    return [];\n  });\n  lazy.prop(o, 'name', () => {\n    if (!o.m || !o.n) return;\n    return `p2ms(${o.m} of ${o.n})`;\n  });\n  // extended validation\n  if (opts.validate) {\n    if (a.output) {\n      decode(a.output);\n      if (!types_1.typeforce.Number(chunks[0]))\n        throw new TypeError('Output is invalid');\n      if (!types_1.typeforce.Number(chunks[chunks.length - 2]))\n        throw new TypeError('Output is invalid');\n      if (chunks[chunks.length - 1] !== OPS.OP_CHECKMULTISIG)\n        throw new TypeError('Output is invalid');\n      if (o.m <= 0 || o.n > 16 || o.m > o.n || o.n !== chunks.length - 3)\n        throw new TypeError('Output is invalid');\n      if (!o.pubkeys.every(x => (0, types_1.isPoint)(x)))\n        throw new TypeError('Output is invalid');\n      if (a.m !== undefined && a.m !== o.m) throw new TypeError('m mismatch');\n      if (a.n !== undefined && a.n !== o.n) throw new TypeError('n mismatch');\n      if (a.pubkeys && !(0, types_1.stacksEqual)(a.pubkeys, o.pubkeys))\n        throw new TypeError('Pubkeys mismatch');\n    }\n    if (a.pubkeys) {\n      if (a.n !== undefined && a.n !== a.pubkeys.length)\n        throw new TypeError('Pubkey count mismatch');\n      o.n = a.pubkeys.length;\n      if (o.n < o.m) throw new TypeError('Pubkey count cannot be less than m');\n    }\n    if (a.signatures) {\n      if (a.signatures.length < o.m)\n        throw new TypeError('Not enough signatures provided');\n      if (a.signatures.length > o.m)\n        throw new TypeError('Too many signatures provided');\n    }\n    if (a.input) {\n      if (a.input[0] !== OPS.OP_0) throw new TypeError('Input is invalid');\n      if (\n        o.signatures.length === 0 ||\n        !o.signatures.every(isAcceptableSignature)\n      )\n        throw new TypeError('Input has invalid signature(s)');\n      if (a.signatures && !(0, types_1.stacksEqual)(a.signatures, o.signatures))\n        throw new TypeError('Signature mismatch');\n      if (a.m !== undefined && a.m !== a.signatures.length)\n        throw new TypeError('Signature count mismatch');\n    }\n  }\n  return Object.assign(o, a);\n}\nexports.p2ms = p2ms;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.p2pk = void 0;\nconst networks_1 = require('../networks');\nconst bscript = require('../script');\nconst types_1 = require('../types');\nconst lazy = require('./lazy');\nconst OPS = bscript.OPS;\n// input: {signature}\n// output: {pubKey} OP_CHECKSIG\n/**\n * Creates a pay-to-public-key (P2PK) payment object.\n *\n * @param a - The payment object containing the necessary data.\n * @param opts - Optional payment options.\n * @returns The P2PK payment object.\n * @throws {TypeError} If the required data is not provided or if the data is invalid.\n */\nfunction p2pk(a, opts) {\n  if (!a.input && !a.output && !a.pubkey && !a.input && !a.signature)\n    throw new TypeError('Not enough data');\n  opts = Object.assign({ validate: true }, opts || {});\n  (0, types_1.typeforce)(\n    {\n      network: types_1.typeforce.maybe(types_1.typeforce.Object),\n      output: types_1.typeforce.maybe(types_1.typeforce.Buffer),\n      pubkey: types_1.typeforce.maybe(types_1.isPoint),\n      signature: types_1.typeforce.maybe(bscript.isCanonicalScriptSignature),\n      input: types_1.typeforce.maybe(types_1.typeforce.Buffer),\n    },\n    a,\n  );\n  const _chunks = lazy.value(() => {\n    return bscript.decompile(a.input);\n  });\n  const network = a.network || networks_1.bitcoin;\n  const o = { name: 'p2pk', network };\n  lazy.prop(o, 'output', () => {\n    if (!a.pubkey) return;\n    return bscript.compile([a.pubkey, OPS.OP_CHECKSIG]);\n  });\n  lazy.prop(o, 'pubkey', () => {\n    if (!a.output) return;\n    return a.output.slice(1, -1);\n  });\n  lazy.prop(o, 'signature', () => {\n    if (!a.input) return;\n    return _chunks()[0];\n  });\n  lazy.prop(o, 'input', () => {\n    if (!a.signature) return;\n    return bscript.compile([a.signature]);\n  });\n  lazy.prop(o, 'witness', () => {\n    if (!o.input) return;\n    return [];\n  });\n  // extended validation\n  if (opts.validate) {\n    if (a.output) {\n      if (a.output[a.output.length - 1] !== OPS.OP_CHECKSIG)\n        throw new TypeError('Output is invalid');\n      if (!(0, types_1.isPoint)(o.pubkey))\n        throw new TypeError('Output pubkey is invalid');\n      if (a.pubkey && !a.pubkey.equals(o.pubkey))\n        throw new TypeError('Pubkey mismatch');\n    }\n    if (a.signature) {\n      if (a.input && !a.input.equals(o.input))\n        throw new TypeError('Signature mismatch');\n    }\n    if (a.input) {\n      if (_chunks().length !== 1) throw new TypeError('Input is invalid');\n      if (!bscript.isCanonicalScriptSignature(o.signature))\n        throw new TypeError('Input has invalid signature');\n    }\n  }\n  return Object.assign(o, a);\n}\nexports.p2pk = p2pk;\n","/**\n * Internal webcrypto alias.\n * We prefer WebCrypto aka globalThis.crypto, which exists in node.js 16+.\n * Falls back to Node.js built-in crypto for Node.js <=v14.\n * See utils.ts for details.\n * @module\n */\n// @ts-ignore\nimport * as nc from 'node:crypto';\nexport const crypto: any =\n  nc && typeof nc === 'object' && 'webcrypto' in nc\n    ? (nc.webcrypto as any)\n    : nc && typeof nc === 'object' && 'randomBytes' in nc\n      ? nc\n      : undefined;\n","/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\n\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a: unknown): a is Uint8Array {\n  return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\n/** Asserts something is positive integer. */\nexport function anumber(n: number): void {\n  if (!Number.isSafeInteger(n) || n < 0) throw new Error('positive integer expected, got ' + n);\n}\n\n/** Asserts something is Uint8Array. */\nexport function abytes(b: Uint8Array | undefined, ...lengths: number[]): void {\n  if (!isBytes(b)) throw new Error('Uint8Array expected');\n  if (lengths.length > 0 && !lengths.includes(b.length))\n    throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n\n/** Asserts something is hash */\nexport function ahash(h: IHash): void {\n  if (typeof h !== 'function' || typeof h.create !== 'function')\n    throw new Error('Hash should be wrapped by utils.createHasher');\n  anumber(h.outputLen);\n  anumber(h.blockLen);\n}\n\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance: any, checkFinished = true): void {\n  if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n  if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\n\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out: any, instance: any): void {\n  abytes(out);\n  const min = instance.outputLen;\n  if (out.length < min) {\n    throw new Error('digestInto() expects output buffer of length at least ' + min);\n  }\n}\n\n/** Generic type encompassing 8/16/32-byte arrays - but not 64-byte. */\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr: TypedArray): Uint8Array {\n  return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr: TypedArray): Uint32Array {\n  return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays: TypedArray[]): void {\n  for (let i = 0; i < arrays.length; i++) {\n    arrays[i].fill(0);\n  }\n}\n\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr: TypedArray): DataView {\n  return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word: number, shift: number): number {\n  return (word << (32 - shift)) | (word >>> shift);\n}\n\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word: number, shift: number): number {\n  return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE: boolean = /* @__PURE__ */ (() =>\n  new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n\n/** The byte swap operation for uint32 */\nexport function byteSwap(word: number): number {\n  return (\n    ((word << 24) & 0xff000000) |\n    ((word << 8) & 0xff0000) |\n    ((word >>> 8) & 0xff00) |\n    ((word >>> 24) & 0xff)\n  );\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE: (n: number) => number = isLE\n  ? (n: number) => n\n  : (n: number) => byteSwap(n);\n\n/** @deprecated */\nexport const byteSwapIfBE: typeof swap8IfBE = swap8IfBE;\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr: Uint32Array): Uint32Array {\n  for (let i = 0; i < arr.length; i++) {\n    arr[i] = byteSwap(arr[i]);\n  }\n  return arr;\n}\n\nexport const swap32IfBE: (u: Uint32Array) => Uint32Array = isLE\n  ? (u: Uint32Array) => u\n  : byteSwap32;\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin: boolean = /* @__PURE__ */ (() =>\n  // @ts-ignore\n  typeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  abytes(bytes);\n  // @ts-ignore\n  if (hasHexBuiltin) return bytes.toHex();\n  // pre-caching improves the speed 6x\n  let hex = '';\n  for (let i = 0; i < bytes.length; i++) {\n    hex += hexes[bytes[i]];\n  }\n  return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 } as const;\nfunction asciiToBase16(ch: number): number | undefined {\n  if (ch >= asciis._0 && ch <= asciis._9) return ch - asciis._0; // '2' => 50-48\n  if (ch >= asciis.A && ch <= asciis.F) return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n  if (ch >= asciis.a && ch <= asciis.f) return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n  return;\n}\n\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  // @ts-ignore\n  if (hasHexBuiltin) return Uint8Array.fromHex(hex);\n  const hl = hex.length;\n  const al = hl / 2;\n  if (hl % 2) throw new Error('hex string expected, got unpadded hex of length ' + hl);\n  const array = new Uint8Array(al);\n  for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n    const n1 = asciiToBase16(hex.charCodeAt(hi));\n    const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n    if (n1 === undefined || n2 === undefined) {\n      const char = hex[hi] + hex[hi + 1];\n      throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n    }\n    array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n  }\n  return array;\n}\n\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async (): Promise<void> => {};\n\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(\n  iters: number,\n  tick: number,\n  cb: (i: number) => void\n): Promise<void> {\n  let ts = Date.now();\n  for (let i = 0; i < iters; i++) {\n    cb(i);\n    // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n    const diff = Date.now() - ts;\n    if (diff >= 0 && diff < tick) continue;\n    await nextTick();\n    ts += diff;\n  }\n}\n\n// Global symbols, but ts doesn't see them: https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\ndeclare const TextDecoder: any;\n\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error('string expected');\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\nexport function bytesToUtf8(bytes: Uint8Array): string {\n  return new TextDecoder().decode(bytes);\n}\n\n/** Accepted input of hash functions. Strings are converted to byte arrays. */\nexport type Input = string | Uint8Array;\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data: Input): Uint8Array {\n  if (typeof data === 'string') data = utf8ToBytes(data);\n  abytes(data);\n  return data;\n}\n\n/** KDFs can accept string or Uint8Array for user convenience. */\nexport type KDFInput = string | Uint8Array;\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data: KDFInput): Uint8Array {\n  if (typeof data === 'string') data = utf8ToBytes(data);\n  abytes(data);\n  return data;\n}\n\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  let sum = 0;\n  for (let i = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    abytes(a);\n    sum += a.length;\n  }\n  const res = new Uint8Array(sum);\n  for (let i = 0, pad = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    res.set(a, pad);\n    pad += a.length;\n  }\n  return res;\n}\n\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n    throw new Error('options should be object or undefined');\n  const merged = Object.assign(defaults, opts);\n  return merged as T1 & T2;\n}\n\n/** Hash interface. */\nexport type IHash = {\n  (data: Uint8Array): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create: any;\n};\n\n/** For runtime check if class implements interface */\nexport abstract class Hash<T extends Hash<T>> {\n  abstract blockLen: number; // Bytes per block\n  abstract outputLen: number; // Bytes in output\n  abstract update(buf: Input): this;\n  // Writes digest into buf\n  abstract digestInto(buf: Uint8Array): void;\n  abstract digest(): Uint8Array;\n  /**\n   * Resets internal state. Makes Hash instance unusable.\n   * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n   * by user, they will need to manually call `destroy()` when zeroing is necessary.\n   */\n  abstract destroy(): void;\n  /**\n   * Clones hash instance. Unsafe: doesn't check whether `to` is valid. Can be used as `clone()`\n   * when no options are passed.\n   * Reasons to use `_cloneInto` instead of clone: 1) performance 2) reuse instance => all internal\n   * buffers are overwritten => causes buffer overwrite which is used for digest in some cases.\n   * There are no guarantees for clean-up because it's impossible in JS.\n   */\n  abstract _cloneInto(to?: T): T;\n  // Safe version that clones internal state\n  abstract clone(): T;\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n  xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n  xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\n/** Hash function */\nexport type CHash = ReturnType<typeof createHasher>;\n/** Hash function with output */\nexport type CHashO = ReturnType<typeof createOptHasher>;\n/** XOF with output */\nexport type CHashXO = ReturnType<typeof createXOFer>;\n\n/** Wraps hash function, creating an interface on top of it */\nexport function createHasher<T extends Hash<T>>(\n  hashCons: () => Hash<T>\n): {\n  (msg: Input): Uint8Array;\n  outputLen: number;\n  blockLen: number;\n  create(): Hash<T>;\n} {\n  const hashC = (msg: Input): Uint8Array => hashCons().update(toBytes(msg)).digest();\n  const tmp = hashCons();\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = () => hashCons();\n  return hashC;\n}\n\nexport function createOptHasher<H extends Hash<H>, T extends Object>(\n  hashCons: (opts?: T) => Hash<H>\n): {\n  (msg: Input, opts?: T): Uint8Array;\n  outputLen: number;\n  blockLen: number;\n  create(opts?: T): Hash<H>;\n} {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts?: T) => hashCons(opts);\n  return hashC;\n}\n\nexport function createXOFer<H extends HashXOF<H>, T extends Object>(\n  hashCons: (opts?: T) => HashXOF<H>\n): {\n  (msg: Input, opts?: T): Uint8Array;\n  outputLen: number;\n  blockLen: number;\n  create(opts?: T): HashXOF<H>;\n} {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts?: T) => hashCons(opts);\n  return hashC;\n}\nexport const wrapConstructor: typeof createHasher = createHasher;\nexport const wrapConstructorWithOpts: typeof createOptHasher = createOptHasher;\nexport const wrapXOFConstructorWithOpts: typeof createXOFer = createXOFer;\n\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n  if (crypto && typeof crypto.getRandomValues === 'function') {\n    return crypto.getRandomValues(new Uint8Array(bytesLength));\n  }\n  // Legacy Node.js compatibility\n  if (crypto && typeof crypto.randomBytes === 'function') {\n    return Uint8Array.from(crypto.randomBytes(bytesLength));\n  }\n  throw new Error('crypto.getRandomValues must be defined');\n}\n","/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { type Input, Hash, abytes, aexists, aoutput, clean, createView, toBytes } from './utils.ts';\n\n/** Polyfill for Safari 14. https://caniuse.com/mdn-javascript_builtins_dataview_setbiguint64 */\nexport function setBigUint64(\n  view: DataView,\n  byteOffset: number,\n  value: bigint,\n  isLE: boolean\n): void {\n  if (typeof view.setBigUint64 === 'function') return view.setBigUint64(byteOffset, value, isLE);\n  const _32n = BigInt(32);\n  const _u32_max = BigInt(0xffffffff);\n  const wh = Number((value >> _32n) & _u32_max);\n  const wl = Number(value & _u32_max);\n  const h = isLE ? 4 : 0;\n  const l = isLE ? 0 : 4;\n  view.setUint32(byteOffset + h, wh, isLE);\n  view.setUint32(byteOffset + l, wl, isLE);\n}\n\n/** Choice: a ? b : c */\nexport function Chi(a: number, b: number, c: number): number {\n  return (a & b) ^ (~a & c);\n}\n\n/** Majority function, true if any two inputs is true. */\nexport function Maj(a: number, b: number, c: number): number {\n  return (a & b) ^ (a & c) ^ (b & c);\n}\n\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport abstract class HashMD<T extends HashMD<T>> extends Hash<T> {\n  protected abstract process(buf: DataView, offset: number): void;\n  protected abstract get(): number[];\n  protected abstract set(...args: number[]): void;\n  abstract destroy(): void;\n  protected abstract roundClean(): void;\n\n  readonly blockLen: number;\n  readonly outputLen: number;\n  readonly padOffset: number;\n  readonly isLE: boolean;\n\n  // For partial updates less than block size\n  protected buffer: Uint8Array;\n  protected view: DataView;\n  protected finished = false;\n  protected length = 0;\n  protected pos = 0;\n  protected destroyed = false;\n\n  constructor(blockLen: number, outputLen: number, padOffset: number, isLE: boolean) {\n    super();\n    this.blockLen = blockLen;\n    this.outputLen = outputLen;\n    this.padOffset = padOffset;\n    this.isLE = isLE;\n    this.buffer = new Uint8Array(blockLen);\n    this.view = createView(this.buffer);\n  }\n  update(data: Input): this {\n    aexists(this);\n    data = toBytes(data);\n    abytes(data);\n    const { view, buffer, blockLen } = this;\n    const len = data.length;\n    for (let pos = 0; pos < len; ) {\n      const take = Math.min(blockLen - this.pos, len - pos);\n      // Fast path: we have at least one block in input, cast it to view and process\n      if (take === blockLen) {\n        const dataView = createView(data);\n        for (; blockLen <= len - pos; pos += blockLen) this.process(dataView, pos);\n        continue;\n      }\n      buffer.set(data.subarray(pos, pos + take), this.pos);\n      this.pos += take;\n      pos += take;\n      if (this.pos === blockLen) {\n        this.process(view, 0);\n        this.pos = 0;\n      }\n    }\n    this.length += data.length;\n    this.roundClean();\n    return this;\n  }\n  digestInto(out: Uint8Array): void {\n    aexists(this);\n    aoutput(out, this);\n    this.finished = true;\n    // Padding\n    // We can avoid allocation of buffer for padding completely if it\n    // was previously not allocated here. But it won't change performance.\n    const { buffer, view, blockLen, isLE } = this;\n    let { pos } = this;\n    // append the bit '1' to the message\n    buffer[pos++] = 0b10000000;\n    clean(this.buffer.subarray(pos));\n    // we have less than padOffset left in buffer, so we cannot put length in\n    // current block, need process it and pad again\n    if (this.padOffset > blockLen - pos) {\n      this.process(view, 0);\n      pos = 0;\n    }\n    // Pad until full block byte with zeros\n    for (let i = pos; i < blockLen; i++) buffer[i] = 0;\n    // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n    // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n    // So we just write lowest 64 bits of that value.\n    setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n    this.process(view, 0);\n    const oview = createView(out);\n    const len = this.outputLen;\n    // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n    if (len % 4) throw new Error('_sha2: outputLen should be aligned to 32bit');\n    const outLen = len / 4;\n    const state = this.get();\n    if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n    for (let i = 0; i < outLen; i++) oview.setUint32(4 * i, state[i], isLE);\n  }\n  digest(): Uint8Array {\n    const { buffer, outputLen } = this;\n    this.digestInto(buffer);\n    const res = buffer.slice(0, outputLen);\n    this.destroy();\n    return res;\n  }\n  _cloneInto(to?: T): T {\n    to ||= new (this.constructor as any)() as T;\n    to.set(...this.get());\n    const { blockLen, buffer, length, finished, destroyed, pos } = this;\n    to.destroyed = destroyed;\n    to.finished = finished;\n    to.length = length;\n    to.pos = pos;\n    if (length % blockLen) to.buffer.set(buffer);\n    return to;\n  }\n  clone(): T {\n    return this._cloneInto();\n  }\n}\n\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexport const SHA256_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n  0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexport const SHA224_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n  0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexport const SHA384_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n  0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n  0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexport const SHA512_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n  0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n  0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n","/**\n\nSHA1 (RFC 3174), MD5 (RFC 1321) and RIPEMD160 (RFC 2286) legacy, weak hash functions.\nDon't use them in a new protocol. What \"weak\" means:\n\n- Collisions can be made with 2^18 effort in MD5, 2^60 in SHA1, 2^80 in RIPEMD160.\n- No practical pre-image attacks (only theoretical, 2^123.4)\n- HMAC seems kinda ok: https://datatracker.ietf.org/doc/html/rfc6151\n * @module\n */\nimport { Chi, HashMD, Maj } from './_md.ts';\nimport { type CHash, clean, createHasher, rotl } from './utils.ts';\n\n/** Initial SHA1 state */\nconst SHA1_IV = /* @__PURE__ */ Uint32Array.from([\n  0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0,\n]);\n\n// Reusable temporary buffer\nconst SHA1_W = /* @__PURE__ */ new Uint32Array(80);\n\n/** SHA1 legacy hash class. */\nexport class SHA1 extends HashMD<SHA1> {\n  private A = SHA1_IV[0] | 0;\n  private B = SHA1_IV[1] | 0;\n  private C = SHA1_IV[2] | 0;\n  private D = SHA1_IV[3] | 0;\n  private E = SHA1_IV[4] | 0;\n\n  constructor() {\n    super(64, 20, 8, false);\n  }\n  protected get(): [number, number, number, number, number] {\n    const { A, B, C, D, E } = this;\n    return [A, B, C, D, E];\n  }\n  protected set(A: number, B: number, C: number, D: number, E: number): void {\n    this.A = A | 0;\n    this.B = B | 0;\n    this.C = C | 0;\n    this.D = D | 0;\n    this.E = E | 0;\n  }\n  protected process(view: DataView, offset: number): void {\n    for (let i = 0; i < 16; i++, offset += 4) SHA1_W[i] = view.getUint32(offset, false);\n    for (let i = 16; i < 80; i++)\n      SHA1_W[i] = rotl(SHA1_W[i - 3] ^ SHA1_W[i - 8] ^ SHA1_W[i - 14] ^ SHA1_W[i - 16], 1);\n    // Compression function main loop, 80 rounds\n    let { A, B, C, D, E } = this;\n    for (let i = 0; i < 80; i++) {\n      let F, K;\n      if (i < 20) {\n        F = Chi(B, C, D);\n        K = 0x5a827999;\n      } else if (i < 40) {\n        F = B ^ C ^ D;\n        K = 0x6ed9eba1;\n      } else if (i < 60) {\n        F = Maj(B, C, D);\n        K = 0x8f1bbcdc;\n      } else {\n        F = B ^ C ^ D;\n        K = 0xca62c1d6;\n      }\n      const T = (rotl(A, 5) + F + E + K + SHA1_W[i]) | 0;\n      E = D;\n      D = C;\n      C = rotl(B, 30);\n      B = A;\n      A = T;\n    }\n    // Add the compressed chunk to the current hash value\n    A = (A + this.A) | 0;\n    B = (B + this.B) | 0;\n    C = (C + this.C) | 0;\n    D = (D + this.D) | 0;\n    E = (E + this.E) | 0;\n    this.set(A, B, C, D, E);\n  }\n  protected roundClean(): void {\n    clean(SHA1_W);\n  }\n  destroy(): void {\n    this.set(0, 0, 0, 0, 0);\n    clean(this.buffer);\n  }\n}\n\n/** SHA1 (RFC 3174) legacy hash function. It was cryptographically broken. */\nexport const sha1: CHash = /* @__PURE__ */ createHasher(() => new SHA1());\n\n/** Per-round constants */\nconst p32 = /* @__PURE__ */ Math.pow(2, 32);\nconst K = /* @__PURE__ */ Array.from({ length: 64 }, (_, i) =>\n  Math.floor(p32 * Math.abs(Math.sin(i + 1)))\n);\n\n/** md5 initial state: same as sha1, but 4 u32 instead of 5. */\nconst MD5_IV = /* @__PURE__ */ SHA1_IV.slice(0, 4);\n\n// Reusable temporary buffer\nconst MD5_W = /* @__PURE__ */ new Uint32Array(16);\n/** MD5 legacy hash class. */\nexport class MD5 extends HashMD<MD5> {\n  private A = MD5_IV[0] | 0;\n  private B = MD5_IV[1] | 0;\n  private C = MD5_IV[2] | 0;\n  private D = MD5_IV[3] | 0;\n\n  constructor() {\n    super(64, 16, 8, true);\n  }\n  protected get(): [number, number, number, number] {\n    const { A, B, C, D } = this;\n    return [A, B, C, D];\n  }\n  protected set(A: number, B: number, C: number, D: number): void {\n    this.A = A | 0;\n    this.B = B | 0;\n    this.C = C | 0;\n    this.D = D | 0;\n  }\n  protected process(view: DataView, offset: number): void {\n    for (let i = 0; i < 16; i++, offset += 4) MD5_W[i] = view.getUint32(offset, true);\n    // Compression function main loop, 64 rounds\n    let { A, B, C, D } = this;\n    for (let i = 0; i < 64; i++) {\n      let F, g, s;\n      if (i < 16) {\n        F = Chi(B, C, D);\n        g = i;\n        s = [7, 12, 17, 22];\n      } else if (i < 32) {\n        F = Chi(D, B, C);\n        g = (5 * i + 1) % 16;\n        s = [5, 9, 14, 20];\n      } else if (i < 48) {\n        F = B ^ C ^ D;\n        g = (3 * i + 5) % 16;\n        s = [4, 11, 16, 23];\n      } else {\n        F = C ^ (B | ~D);\n        g = (7 * i) % 16;\n        s = [6, 10, 15, 21];\n      }\n      F = F + A + K[i] + MD5_W[g];\n      A = D;\n      D = C;\n      C = B;\n      B = B + rotl(F, s[i % 4]);\n    }\n    // Add the compressed chunk to the current hash value\n    A = (A + this.A) | 0;\n    B = (B + this.B) | 0;\n    C = (C + this.C) | 0;\n    D = (D + this.D) | 0;\n    this.set(A, B, C, D);\n  }\n  protected roundClean(): void {\n    clean(MD5_W);\n  }\n  destroy(): void {\n    this.set(0, 0, 0, 0);\n    clean(this.buffer);\n  }\n}\n\n/**\n * MD5 (RFC 1321) legacy hash function. It was cryptographically broken.\n * MD5 architecture is similar to SHA1, with some differences:\n * - Reduced output length: 16 bytes (128 bit) instead of 20\n * - 64 rounds, instead of 80\n * - Little-endian: could be faster, but will require more code\n * - Non-linear index selection: huge speed-up for unroll\n * - Per round constants: more memory accesses, additional speed-up for unroll\n */\nexport const md5: CHash = /* @__PURE__ */ createHasher(() => new MD5());\n\n// RIPEMD-160\n\nconst Rho160 = /* @__PURE__ */ Uint8Array.from([\n  7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n]);\nconst Id160 = /* @__PURE__ */ (() => Uint8Array.from(new Array(16).fill(0).map((_, i) => i)))();\nconst Pi160 = /* @__PURE__ */ (() => Id160.map((i) => (9 * i + 5) % 16))();\nconst idxLR = /* @__PURE__ */ (() => {\n  const L = [Id160];\n  const R = [Pi160];\n  const res = [L, R];\n  for (let i = 0; i < 4; i++) for (let j of res) j.push(j[i].map((k) => Rho160[k]));\n  return res;\n})();\nconst idxL = /* @__PURE__ */ (() => idxLR[0])();\nconst idxR = /* @__PURE__ */ (() => idxLR[1])();\n// const [idxL, idxR] = idxLR;\n\nconst shifts160 = /* @__PURE__ */ [\n  [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8],\n  [12, 13, 11, 15, 6, 9, 9, 7, 12, 15, 11, 13, 7, 8, 7, 7],\n  [13, 15, 14, 11, 7, 7, 6, 8, 13, 14, 13, 12, 5, 5, 6, 9],\n  [14, 11, 12, 14, 8, 6, 5, 5, 15, 12, 15, 14, 9, 9, 8, 6],\n  [15, 12, 13, 13, 9, 5, 8, 6, 14, 11, 12, 11, 8, 6, 5, 5],\n].map((i) => Uint8Array.from(i));\nconst shiftsL160 = /* @__PURE__ */ idxL.map((idx, i) => idx.map((j) => shifts160[i][j]));\nconst shiftsR160 = /* @__PURE__ */ idxR.map((idx, i) => idx.map((j) => shifts160[i][j]));\nconst Kl160 = /* @__PURE__ */ Uint32Array.from([\n  0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e,\n]);\nconst Kr160 = /* @__PURE__ */ Uint32Array.from([\n  0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000,\n]);\n// It's called f() in spec.\nfunction ripemd_f(group: number, x: number, y: number, z: number): number {\n  if (group === 0) return x ^ y ^ z;\n  if (group === 1) return (x & y) | (~x & z);\n  if (group === 2) return (x | ~y) ^ z;\n  if (group === 3) return (x & z) | (y & ~z);\n  return x ^ (y | ~z);\n}\n// Reusable temporary buffer\nconst BUF_160 = /* @__PURE__ */ new Uint32Array(16);\nexport class RIPEMD160 extends HashMD<RIPEMD160> {\n  private h0 = 0x67452301 | 0;\n  private h1 = 0xefcdab89 | 0;\n  private h2 = 0x98badcfe | 0;\n  private h3 = 0x10325476 | 0;\n  private h4 = 0xc3d2e1f0 | 0;\n\n  constructor() {\n    super(64, 20, 8, true);\n  }\n  protected get(): [number, number, number, number, number] {\n    const { h0, h1, h2, h3, h4 } = this;\n    return [h0, h1, h2, h3, h4];\n  }\n  protected set(h0: number, h1: number, h2: number, h3: number, h4: number): void {\n    this.h0 = h0 | 0;\n    this.h1 = h1 | 0;\n    this.h2 = h2 | 0;\n    this.h3 = h3 | 0;\n    this.h4 = h4 | 0;\n  }\n  protected process(view: DataView, offset: number): void {\n    for (let i = 0; i < 16; i++, offset += 4) BUF_160[i] = view.getUint32(offset, true);\n    // prettier-ignore\n    let al = this.h0 | 0, ar = al,\n        bl = this.h1 | 0, br = bl,\n        cl = this.h2 | 0, cr = cl,\n        dl = this.h3 | 0, dr = dl,\n        el = this.h4 | 0, er = el;\n\n    // Instead of iterating 0 to 80, we split it into 5 groups\n    // And use the groups in constants, functions, etc. Much simpler\n    for (let group = 0; group < 5; group++) {\n      const rGroup = 4 - group;\n      const hbl = Kl160[group], hbr = Kr160[group]; // prettier-ignore\n      const rl = idxL[group], rr = idxR[group]; // prettier-ignore\n      const sl = shiftsL160[group], sr = shiftsR160[group]; // prettier-ignore\n      for (let i = 0; i < 16; i++) {\n        const tl = (rotl(al + ripemd_f(group, bl, cl, dl) + BUF_160[rl[i]] + hbl, sl[i]) + el) | 0;\n        al = el, el = dl, dl = rotl(cl, 10) | 0, cl = bl, bl = tl; // prettier-ignore\n      }\n      // 2 loops are 10% faster\n      for (let i = 0; i < 16; i++) {\n        const tr = (rotl(ar + ripemd_f(rGroup, br, cr, dr) + BUF_160[rr[i]] + hbr, sr[i]) + er) | 0;\n        ar = er, er = dr, dr = rotl(cr, 10) | 0, cr = br, br = tr; // prettier-ignore\n      }\n    }\n    // Add the compressed chunk to the current hash value\n    this.set(\n      (this.h1 + cl + dr) | 0,\n      (this.h2 + dl + er) | 0,\n      (this.h3 + el + ar) | 0,\n      (this.h4 + al + br) | 0,\n      (this.h0 + bl + cr) | 0\n    );\n  }\n  protected roundClean(): void {\n    clean(BUF_160);\n  }\n  destroy(): void {\n    this.destroyed = true;\n    clean(this.buffer);\n    this.set(0, 0, 0, 0, 0);\n  }\n}\n\n/**\n * RIPEMD-160 - a legacy hash function from 1990s.\n * * https://homes.esat.kuleuven.be/~bosselae/ripemd160.html\n * * https://homes.esat.kuleuven.be/~bosselae/ripemd160/pdf/AB-9601/AB-9601.pdf\n */\nexport const ripemd160: CHash = /* @__PURE__ */ createHasher(() => new RIPEMD160());\n","/**\n * RIPEMD-160 legacy hash function.\n * https://homes.esat.kuleuven.be/~bosselae/ripemd160.html\n * https://homes.esat.kuleuven.be/~bosselae/ripemd160/pdf/AB-9601/AB-9601.pdf\n * @module\n * @deprecated\n */\nimport { RIPEMD160 as RIPEMD160n, ripemd160 as ripemd160n } from './legacy.ts';\n/** @deprecated Use import from `noble/hashes/legacy` module */\nexport const RIPEMD160: typeof RIPEMD160n = RIPEMD160n;\n/** @deprecated Use import from `noble/hashes/legacy` module */\nexport const ripemd160: typeof ripemd160n = ripemd160n;\n","/**\n * SHA1 (RFC 3174) legacy hash function.\n * @module\n * @deprecated\n */\nimport { SHA1 as SHA1n, sha1 as sha1n } from './legacy.ts';\n/** @deprecated Use import from `noble/hashes/legacy` module */\nexport const SHA1: typeof SHA1n = SHA1n;\n/** @deprecated Use import from `noble/hashes/legacy` module */\nexport const sha1: typeof sha1n = sha1n;\n","/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n\nfunction fromBig(\n  n: bigint,\n  le = false\n): {\n  h: number;\n  l: number;\n} {\n  if (le) return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n  return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n\nfunction split(lst: bigint[], le = false): Uint32Array[] {\n  const len = lst.length;\n  let Ah = new Uint32Array(len);\n  let Al = new Uint32Array(len);\n  for (let i = 0; i < len; i++) {\n    const { h, l } = fromBig(lst[i], le);\n    [Ah[i], Al[i]] = [h, l];\n  }\n  return [Ah, Al];\n}\n\nconst toBig = (h: number, l: number): bigint => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h: number, _l: number, s: number): number => h >>> s;\nconst shrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h: number, l: number, s: number): number => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h: number, l: number, s: number): number => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h: number, l: number, s: number): number => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h: number, l: number): number => l;\nconst rotr32L = (h: number, _l: number): number => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h: number, l: number, s: number): number => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h: number, l: number, s: number): number => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h: number, l: number, s: number): number => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h: number, l: number, s: number): number => (h << (s - 32)) | (l >>> (64 - s));\n\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(\n  Ah: number,\n  Al: number,\n  Bh: number,\n  Bl: number\n): {\n  h: number;\n  l: number;\n} {\n  const l = (Al >>> 0) + (Bl >>> 0);\n  return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al: number, Bl: number, Cl: number): number => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number): number =>\n  (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number): number =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number): number =>\n  (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: number): number =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number): number =>\n  (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nexport {\n  add, add3H, add3L, add4H, add4L, add5H, add5L, fromBig, rotlBH, rotlBL, rotlSH, rotlSL, rotr32H, rotr32L, rotrBH, rotrBL, rotrSH, rotrSL, shrSH, shrSL, split, toBig\n};\n// prettier-ignore\nconst u64: { fromBig: typeof fromBig; split: typeof split; toBig: (h: number, l: number) => bigint; shrSH: (h: number, _l: number, s: number) => number; shrSL: (h: number, l: number, s: number) => number; rotrSH: (h: number, l: number, s: number) => number; rotrSL: (h: number, l: number, s: number) => number; rotrBH: (h: number, l: number, s: number) => number; rotrBL: (h: number, l: number, s: number) => number; rotr32H: (_h: number, l: number) => number; rotr32L: (h: number, _l: number) => number; rotlSH: (h: number, l: number, s: number) => number; rotlSL: (h: number, l: number, s: number) => number; rotlBH: (h: number, l: number, s: number) => number; rotlBL: (h: number, l: number, s: number) => number; add: typeof add; add3L: (Al: number, Bl: number, Cl: number) => number; add3H: (low: number, Ah: number, Bh: number, Ch: number) => number; add4L: (Al: number, Bl: number, Cl: number, Dl: number) => number; add4H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number) => number; add5H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number) => number; add5L: (Al: number, Bl: number, Cl: number, Dl: number, El: number) => number; } = {\n  fromBig, split, toBig,\n  shrSH, shrSL,\n  rotrSH, rotrSL, rotrBH, rotrBL,\n  rotr32H, rotr32L,\n  rotlSH, rotlSL, rotlBH, rotlBL,\n  add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n","/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out [RFC 4634](https://datatracker.ietf.org/doc/html/rfc4634) and\n * [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nimport { Chi, HashMD, Maj, SHA224_IV, SHA256_IV, SHA384_IV, SHA512_IV } from './_md.ts';\nimport * as u64 from './_u64.ts';\nimport { type CHash, clean, createHasher, rotr } from './utils.ts';\n\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n  0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n  0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n  0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n  0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\n/** Reusable temporary buffer. \"W\" comes straight from spec. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nexport class SHA256 extends HashMD<SHA256> {\n  // We cannot use array here since array allows indexing by variable\n  // which means optimizer/compiler cannot use registers.\n  protected A: number = SHA256_IV[0] | 0;\n  protected B: number = SHA256_IV[1] | 0;\n  protected C: number = SHA256_IV[2] | 0;\n  protected D: number = SHA256_IV[3] | 0;\n  protected E: number = SHA256_IV[4] | 0;\n  protected F: number = SHA256_IV[5] | 0;\n  protected G: number = SHA256_IV[6] | 0;\n  protected H: number = SHA256_IV[7] | 0;\n\n  constructor(outputLen: number = 32) {\n    super(64, outputLen, 8, false);\n  }\n  protected get(): [number, number, number, number, number, number, number, number] {\n    const { A, B, C, D, E, F, G, H } = this;\n    return [A, B, C, D, E, F, G, H];\n  }\n  // prettier-ignore\n  protected set(\n    A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n  ): void {\n    this.A = A | 0;\n    this.B = B | 0;\n    this.C = C | 0;\n    this.D = D | 0;\n    this.E = E | 0;\n    this.F = F | 0;\n    this.G = G | 0;\n    this.H = H | 0;\n  }\n  protected process(view: DataView, offset: number): void {\n    // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n    for (let i = 0; i < 16; i++, offset += 4) SHA256_W[i] = view.getUint32(offset, false);\n    for (let i = 16; i < 64; i++) {\n      const W15 = SHA256_W[i - 15];\n      const W2 = SHA256_W[i - 2];\n      const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n      const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n      SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n    }\n    // Compression function main loop, 64 rounds\n    let { A, B, C, D, E, F, G, H } = this;\n    for (let i = 0; i < 64; i++) {\n      const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n      const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n      const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n      const T2 = (sigma0 + Maj(A, B, C)) | 0;\n      H = G;\n      G = F;\n      F = E;\n      E = (D + T1) | 0;\n      D = C;\n      C = B;\n      B = A;\n      A = (T1 + T2) | 0;\n    }\n    // Add the compressed chunk to the current hash value\n    A = (A + this.A) | 0;\n    B = (B + this.B) | 0;\n    C = (C + this.C) | 0;\n    D = (D + this.D) | 0;\n    E = (E + this.E) | 0;\n    F = (F + this.F) | 0;\n    G = (G + this.G) | 0;\n    H = (H + this.H) | 0;\n    this.set(A, B, C, D, E, F, G, H);\n  }\n  protected roundClean(): void {\n    clean(SHA256_W);\n  }\n  destroy(): void {\n    this.set(0, 0, 0, 0, 0, 0, 0, 0);\n    clean(this.buffer);\n  }\n}\n\nexport class SHA224 extends SHA256 {\n  protected A: number = SHA224_IV[0] | 0;\n  protected B: number = SHA224_IV[1] | 0;\n  protected C: number = SHA224_IV[2] | 0;\n  protected D: number = SHA224_IV[3] | 0;\n  protected E: number = SHA224_IV[4] | 0;\n  protected F: number = SHA224_IV[5] | 0;\n  protected G: number = SHA224_IV[6] | 0;\n  protected H: number = SHA224_IV[7] | 0;\n  constructor() {\n    super(28);\n  }\n}\n\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n  '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n  '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n  '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n  '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n  '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n  '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n  '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n  '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n  '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n  '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n  '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n  '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n  '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n  '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n  '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n  '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n  '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n  '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n  '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n  '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\n\nexport class SHA512 extends HashMD<SHA512> {\n  // We cannot use array here since array allows indexing by variable\n  // which means optimizer/compiler cannot use registers.\n  // h -- high 32 bits, l -- low 32 bits\n  protected Ah: number = SHA512_IV[0] | 0;\n  protected Al: number = SHA512_IV[1] | 0;\n  protected Bh: number = SHA512_IV[2] | 0;\n  protected Bl: number = SHA512_IV[3] | 0;\n  protected Ch: number = SHA512_IV[4] | 0;\n  protected Cl: number = SHA512_IV[5] | 0;\n  protected Dh: number = SHA512_IV[6] | 0;\n  protected Dl: number = SHA512_IV[7] | 0;\n  protected Eh: number = SHA512_IV[8] | 0;\n  protected El: number = SHA512_IV[9] | 0;\n  protected Fh: number = SHA512_IV[10] | 0;\n  protected Fl: number = SHA512_IV[11] | 0;\n  protected Gh: number = SHA512_IV[12] | 0;\n  protected Gl: number = SHA512_IV[13] | 0;\n  protected Hh: number = SHA512_IV[14] | 0;\n  protected Hl: number = SHA512_IV[15] | 0;\n\n  constructor(outputLen: number = 64) {\n    super(128, outputLen, 16, false);\n  }\n  // prettier-ignore\n  protected get(): [\n    number, number, number, number, number, number, number, number,\n    number, number, number, number, number, number, number, number\n  ] {\n    const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n    return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n  }\n  // prettier-ignore\n  protected set(\n    Ah: number, Al: number, Bh: number, Bl: number, Ch: number, Cl: number, Dh: number, Dl: number,\n    Eh: number, El: number, Fh: number, Fl: number, Gh: number, Gl: number, Hh: number, Hl: number\n  ): void {\n    this.Ah = Ah | 0;\n    this.Al = Al | 0;\n    this.Bh = Bh | 0;\n    this.Bl = Bl | 0;\n    this.Ch = Ch | 0;\n    this.Cl = Cl | 0;\n    this.Dh = Dh | 0;\n    this.Dl = Dl | 0;\n    this.Eh = Eh | 0;\n    this.El = El | 0;\n    this.Fh = Fh | 0;\n    this.Fl = Fl | 0;\n    this.Gh = Gh | 0;\n    this.Gl = Gl | 0;\n    this.Hh = Hh | 0;\n    this.Hl = Hl | 0;\n  }\n  protected process(view: DataView, offset: number): void {\n    // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n    for (let i = 0; i < 16; i++, offset += 4) {\n      SHA512_W_H[i] = view.getUint32(offset);\n      SHA512_W_L[i] = view.getUint32((offset += 4));\n    }\n    for (let i = 16; i < 80; i++) {\n      // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n      const W15h = SHA512_W_H[i - 15] | 0;\n      const W15l = SHA512_W_L[i - 15] | 0;\n      const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n      const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n      // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n      const W2h = SHA512_W_H[i - 2] | 0;\n      const W2l = SHA512_W_L[i - 2] | 0;\n      const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n      const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n      // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n      const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n      const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n      SHA512_W_H[i] = SUMh | 0;\n      SHA512_W_L[i] = SUMl | 0;\n    }\n    let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n    // Compression function main loop, 80 rounds\n    for (let i = 0; i < 80; i++) {\n      // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n      const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n      const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n      //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n      const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n      const CHIl = (El & Fl) ^ (~El & Gl);\n      // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n      // prettier-ignore\n      const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n      const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n      const T1l = T1ll | 0;\n      // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n      const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n      const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n      const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n      const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n      Hh = Gh | 0;\n      Hl = Gl | 0;\n      Gh = Fh | 0;\n      Gl = Fl | 0;\n      Fh = Eh | 0;\n      Fl = El | 0;\n      ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n      Dh = Ch | 0;\n      Dl = Cl | 0;\n      Ch = Bh | 0;\n      Cl = Bl | 0;\n      Bh = Ah | 0;\n      Bl = Al | 0;\n      const All = u64.add3L(T1l, sigma0l, MAJl);\n      Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n      Al = All | 0;\n    }\n    // Add the compressed chunk to the current hash value\n    ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n    ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n    ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n    ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n    ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n    ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n    ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n    ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n    this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n  }\n  protected roundClean(): void {\n    clean(SHA512_W_H, SHA512_W_L);\n  }\n  destroy(): void {\n    clean(this.buffer);\n    this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n  }\n}\n\nexport class SHA384 extends SHA512 {\n  protected Ah: number = SHA384_IV[0] | 0;\n  protected Al: number = SHA384_IV[1] | 0;\n  protected Bh: number = SHA384_IV[2] | 0;\n  protected Bl: number = SHA384_IV[3] | 0;\n  protected Ch: number = SHA384_IV[4] | 0;\n  protected Cl: number = SHA384_IV[5] | 0;\n  protected Dh: number = SHA384_IV[6] | 0;\n  protected Dl: number = SHA384_IV[7] | 0;\n  protected Eh: number = SHA384_IV[8] | 0;\n  protected El: number = SHA384_IV[9] | 0;\n  protected Fh: number = SHA384_IV[10] | 0;\n  protected Fl: number = SHA384_IV[11] | 0;\n  protected Gh: number = SHA384_IV[12] | 0;\n  protected Gl: number = SHA384_IV[13] | 0;\n  protected Hh: number = SHA384_IV[14] | 0;\n  protected Hl: number = SHA384_IV[15] | 0;\n\n  constructor() {\n    super(48);\n  }\n}\n\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See `test/misc/sha2-gen-iv.js`.\n */\n\n/** SHA512/224 IV */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n  0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n  0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n\n/** SHA512/256 IV */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n  0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n  0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\n\nexport class SHA512_224 extends SHA512 {\n  protected Ah: number = T224_IV[0] | 0;\n  protected Al: number = T224_IV[1] | 0;\n  protected Bh: number = T224_IV[2] | 0;\n  protected Bl: number = T224_IV[3] | 0;\n  protected Ch: number = T224_IV[4] | 0;\n  protected Cl: number = T224_IV[5] | 0;\n  protected Dh: number = T224_IV[6] | 0;\n  protected Dl: number = T224_IV[7] | 0;\n  protected Eh: number = T224_IV[8] | 0;\n  protected El: number = T224_IV[9] | 0;\n  protected Fh: number = T224_IV[10] | 0;\n  protected Fl: number = T224_IV[11] | 0;\n  protected Gh: number = T224_IV[12] | 0;\n  protected Gl: number = T224_IV[13] | 0;\n  protected Hh: number = T224_IV[14] | 0;\n  protected Hl: number = T224_IV[15] | 0;\n\n  constructor() {\n    super(28);\n  }\n}\n\nexport class SHA512_256 extends SHA512 {\n  protected Ah: number = T256_IV[0] | 0;\n  protected Al: number = T256_IV[1] | 0;\n  protected Bh: number = T256_IV[2] | 0;\n  protected Bl: number = T256_IV[3] | 0;\n  protected Ch: number = T256_IV[4] | 0;\n  protected Cl: number = T256_IV[5] | 0;\n  protected Dh: number = T256_IV[6] | 0;\n  protected Dl: number = T256_IV[7] | 0;\n  protected Eh: number = T256_IV[8] | 0;\n  protected El: number = T256_IV[9] | 0;\n  protected Fh: number = T256_IV[10] | 0;\n  protected Fl: number = T256_IV[11] | 0;\n  protected Gh: number = T256_IV[12] | 0;\n  protected Gl: number = T256_IV[13] | 0;\n  protected Hh: number = T256_IV[14] | 0;\n  protected Hl: number = T256_IV[15] | 0;\n\n  constructor() {\n    super(32);\n  }\n}\n\n/**\n * SHA2-256 hash function from RFC 4634.\n *\n * It is the fastest JS hash, even faster than Blake3.\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n */\nexport const sha256: CHash = /* @__PURE__ */ createHasher(() => new SHA256());\n/** SHA2-224 hash function from RFC 4634 */\nexport const sha224: CHash = /* @__PURE__ */ createHasher(() => new SHA224());\n\n/** SHA2-512 hash function from RFC 4634. */\nexport const sha512: CHash = /* @__PURE__ */ createHasher(() => new SHA512());\n/** SHA2-384 hash function from RFC 4634. */\nexport const sha384: CHash = /* @__PURE__ */ createHasher(() => new SHA384());\n\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_256: CHash = /* @__PURE__ */ createHasher(() => new SHA512_256());\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_224: CHash = /* @__PURE__ */ createHasher(() => new SHA512_224());\n","/**\n * SHA2-256 a.k.a. sha256. In JS, it is the fastest hash, even faster than Blake3.\n *\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n *\n * Check out [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n * @deprecated\n */\nimport {\n  SHA224 as SHA224n,\n  sha224 as sha224n,\n  SHA256 as SHA256n,\n  sha256 as sha256n,\n} from './sha2.ts';\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const SHA256: typeof SHA256n = SHA256n;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const sha256: typeof sha256n = sha256n;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const SHA224: typeof SHA224n = SHA224n;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const sha224: typeof sha224n = sha224n;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.taggedHash =\n  exports.TAGGED_HASH_PREFIXES =\n  exports.TAGS =\n  exports.hash256 =\n  exports.hash160 =\n  exports.sha256 =\n  exports.sha1 =\n  exports.ripemd160 =\n    void 0;\n/**\n * A module for hashing functions.\n * include ripemd160、sha1、sha256、hash160、hash256、taggedHash\n *\n * @packageDocumentation\n */\nconst ripemd160_1 = require('@noble/hashes/ripemd160');\nconst sha1_1 = require('@noble/hashes/sha1');\nconst sha256_1 = require('@noble/hashes/sha256');\nfunction ripemd160(buffer) {\n  return Buffer.from((0, ripemd160_1.ripemd160)(Uint8Array.from(buffer)));\n}\nexports.ripemd160 = ripemd160;\nfunction sha1(buffer) {\n  return Buffer.from((0, sha1_1.sha1)(Uint8Array.from(buffer)));\n}\nexports.sha1 = sha1;\nfunction sha256(buffer) {\n  return Buffer.from((0, sha256_1.sha256)(Uint8Array.from(buffer)));\n}\nexports.sha256 = sha256;\nfunction hash160(buffer) {\n  return Buffer.from(\n    (0, ripemd160_1.ripemd160)((0, sha256_1.sha256)(Uint8Array.from(buffer))),\n  );\n}\nexports.hash160 = hash160;\nfunction hash256(buffer) {\n  return Buffer.from(\n    (0, sha256_1.sha256)((0, sha256_1.sha256)(Uint8Array.from(buffer))),\n  );\n}\nexports.hash256 = hash256;\nexports.TAGS = [\n  'BIP0340/challenge',\n  'BIP0340/aux',\n  'BIP0340/nonce',\n  'TapLeaf',\n  'TapBranch',\n  'TapSighash',\n  'TapTweak',\n  'KeyAgg list',\n  'KeyAgg coefficient',\n];\n/** An object mapping tags to their tagged hash prefix of [SHA256(tag) | SHA256(tag)] */\n/**\n * Defines the tagged hash prefixes used in the crypto module.\n */\nexports.TAGGED_HASH_PREFIXES = {\n  'BIP0340/challenge': Buffer.from([\n    123, 181, 45, 122, 159, 239, 88, 50, 62, 177, 191, 122, 64, 125, 179, 130,\n    210, 243, 242, 216, 27, 177, 34, 79, 73, 254, 81, 143, 109, 72, 211, 124,\n    123, 181, 45, 122, 159, 239, 88, 50, 62, 177, 191, 122, 64, 125, 179, 130,\n    210, 243, 242, 216, 27, 177, 34, 79, 73, 254, 81, 143, 109, 72, 211, 124,\n  ]),\n  'BIP0340/aux': Buffer.from([\n    241, 239, 78, 94, 192, 99, 202, 218, 109, 148, 202, 250, 157, 152, 126, 160,\n    105, 38, 88, 57, 236, 193, 31, 151, 45, 119, 165, 46, 216, 193, 204, 144,\n    241, 239, 78, 94, 192, 99, 202, 218, 109, 148, 202, 250, 157, 152, 126, 160,\n    105, 38, 88, 57, 236, 193, 31, 151, 45, 119, 165, 46, 216, 193, 204, 144,\n  ]),\n  'BIP0340/nonce': Buffer.from([\n    7, 73, 119, 52, 167, 155, 203, 53, 91, 155, 140, 125, 3, 79, 18, 28, 244,\n    52, 215, 62, 247, 45, 218, 25, 135, 0, 97, 251, 82, 191, 235, 47, 7, 73,\n    119, 52, 167, 155, 203, 53, 91, 155, 140, 125, 3, 79, 18, 28, 244, 52, 215,\n    62, 247, 45, 218, 25, 135, 0, 97, 251, 82, 191, 235, 47,\n  ]),\n  TapLeaf: Buffer.from([\n    174, 234, 143, 220, 66, 8, 152, 49, 5, 115, 75, 88, 8, 29, 30, 38, 56, 211,\n    95, 28, 181, 64, 8, 212, 211, 87, 202, 3, 190, 120, 233, 238, 174, 234, 143,\n    220, 66, 8, 152, 49, 5, 115, 75, 88, 8, 29, 30, 38, 56, 211, 95, 28, 181,\n    64, 8, 212, 211, 87, 202, 3, 190, 120, 233, 238,\n  ]),\n  TapBranch: Buffer.from([\n    25, 65, 161, 242, 229, 110, 185, 95, 162, 169, 241, 148, 190, 92, 1, 247,\n    33, 111, 51, 237, 130, 176, 145, 70, 52, 144, 208, 91, 245, 22, 160, 21, 25,\n    65, 161, 242, 229, 110, 185, 95, 162, 169, 241, 148, 190, 92, 1, 247, 33,\n    111, 51, 237, 130, 176, 145, 70, 52, 144, 208, 91, 245, 22, 160, 21,\n  ]),\n  TapSighash: Buffer.from([\n    244, 10, 72, 223, 75, 42, 112, 200, 180, 146, 75, 242, 101, 70, 97, 237, 61,\n    149, 253, 102, 163, 19, 235, 135, 35, 117, 151, 198, 40, 228, 160, 49, 244,\n    10, 72, 223, 75, 42, 112, 200, 180, 146, 75, 242, 101, 70, 97, 237, 61, 149,\n    253, 102, 163, 19, 235, 135, 35, 117, 151, 198, 40, 228, 160, 49,\n  ]),\n  TapTweak: Buffer.from([\n    232, 15, 225, 99, 156, 156, 160, 80, 227, 175, 27, 57, 193, 67, 198, 62, 66,\n    156, 188, 235, 21, 217, 64, 251, 181, 197, 161, 244, 175, 87, 197, 233, 232,\n    15, 225, 99, 156, 156, 160, 80, 227, 175, 27, 57, 193, 67, 198, 62, 66, 156,\n    188, 235, 21, 217, 64, 251, 181, 197, 161, 244, 175, 87, 197, 233,\n  ]),\n  'KeyAgg list': Buffer.from([\n    72, 28, 151, 28, 60, 11, 70, 215, 240, 178, 117, 174, 89, 141, 78, 44, 126,\n    215, 49, 156, 89, 74, 92, 110, 199, 158, 160, 212, 153, 2, 148, 240, 72, 28,\n    151, 28, 60, 11, 70, 215, 240, 178, 117, 174, 89, 141, 78, 44, 126, 215, 49,\n    156, 89, 74, 92, 110, 199, 158, 160, 212, 153, 2, 148, 240,\n  ]),\n  'KeyAgg coefficient': Buffer.from([\n    191, 201, 4, 3, 77, 28, 136, 232, 200, 14, 34, 229, 61, 36, 86, 109, 100,\n    130, 78, 214, 66, 114, 129, 192, 145, 0, 249, 77, 205, 82, 201, 129, 191,\n    201, 4, 3, 77, 28, 136, 232, 200, 14, 34, 229, 61, 36, 86, 109, 100, 130,\n    78, 214, 66, 114, 129, 192, 145, 0, 249, 77, 205, 82, 201, 129,\n  ]),\n};\nfunction taggedHash(prefix, data) {\n  return sha256(Buffer.concat([exports.TAGGED_HASH_PREFIXES[prefix], data]));\n}\nexports.taggedHash = taggedHash;\n","'use strict'\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\nfunction base (ALPHABET) {\n  if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n  var BASE_MAP = new Uint8Array(256)\n  for (var j = 0; j < BASE_MAP.length; j++) {\n    BASE_MAP[j] = 255\n  }\n  for (var i = 0; i < ALPHABET.length; i++) {\n    var x = ALPHABET.charAt(i)\n    var xc = x.charCodeAt(0)\n    if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n    BASE_MAP[xc] = i\n  }\n  var BASE = ALPHABET.length\n  var LEADER = ALPHABET.charAt(0)\n  var FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up\n  var iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up\n  function encode (source) {\n    if (source instanceof Uint8Array) {\n    } else if (ArrayBuffer.isView(source)) {\n      source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength)\n    } else if (Array.isArray(source)) {\n      source = Uint8Array.from(source)\n    }\n    if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n    if (source.length === 0) { return '' }\n        // Skip & count leading zeroes.\n    var zeroes = 0\n    var length = 0\n    var pbegin = 0\n    var pend = source.length\n    while (pbegin !== pend && source[pbegin] === 0) {\n      pbegin++\n      zeroes++\n    }\n        // Allocate enough space in big-endian base58 representation.\n    var size = ((pend - pbegin) * iFACTOR + 1) >>> 0\n    var b58 = new Uint8Array(size)\n        // Process the bytes.\n    while (pbegin !== pend) {\n      var carry = source[pbegin]\n            // Apply \"b58 = b58 * 256 + ch\".\n      var i = 0\n      for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n        carry += (256 * b58[it1]) >>> 0\n        b58[it1] = (carry % BASE) >>> 0\n        carry = (carry / BASE) >>> 0\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i\n      pbegin++\n    }\n        // Skip leading zeroes in base58 result.\n    var it2 = size - length\n    while (it2 !== size && b58[it2] === 0) {\n      it2++\n    }\n        // Translate the result into a string.\n    var str = LEADER.repeat(zeroes)\n    for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]) }\n    return str\n  }\n  function decodeUnsafe (source) {\n    if (typeof source !== 'string') { throw new TypeError('Expected String') }\n    if (source.length === 0) { return new Uint8Array() }\n    var psz = 0\n        // Skip and count leading '1's.\n    var zeroes = 0\n    var length = 0\n    while (source[psz] === LEADER) {\n      zeroes++\n      psz++\n    }\n        // Allocate enough space in big-endian base256 representation.\n    var size = (((source.length - psz) * FACTOR) + 1) >>> 0 // log(58) / log(256), rounded up.\n    var b256 = new Uint8Array(size)\n        // Process the characters.\n    while (source[psz]) {\n            // Find code of next character\n      var charCode = source.charCodeAt(psz)\n            // Base map can not be indexed using char code\n      if (charCode > 255) { return }\n            // Decode character\n      var carry = BASE_MAP[charCode]\n            // Invalid character\n      if (carry === 255) { return }\n      var i = 0\n      for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n        carry += (BASE * b256[it3]) >>> 0\n        b256[it3] = (carry % 256) >>> 0\n        carry = (carry / 256) >>> 0\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i\n      psz++\n    }\n        // Skip leading zeroes in b256.\n    var it4 = size - length\n    while (it4 !== size && b256[it4] === 0) {\n      it4++\n    }\n    var vch = new Uint8Array(zeroes + (size - it4))\n    var j = zeroes\n    while (it4 !== size) {\n      vch[j++] = b256[it4++]\n    }\n    return vch\n  }\n  function decode (string) {\n    var buffer = decodeUnsafe(string)\n    if (buffer) { return buffer }\n    throw new Error('Non-base' + BASE + ' character')\n  }\n  return {\n    encode: encode,\n    decodeUnsafe: decodeUnsafe,\n    decode: decode\n  }\n}\nmodule.exports = base\n","const basex = require('base-x')\nconst ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n\nmodule.exports = basex(ALPHABET)\n","'use strict'\n\nvar base58 = require('bs58')\n\nmodule.exports = function (checksumFn) {\n  // Encode a buffer as a base58-check encoded string\n  function encode (payload) {\n    var payloadU8 = Uint8Array.from(payload)\n    var checksum = checksumFn(payloadU8)\n    var length = payloadU8.length + 4\n    var both = new Uint8Array(length)\n    both.set(payloadU8, 0)\n    both.set(checksum.subarray(0, 4), payloadU8.length)\n    return base58.encode(both, length)\n  }\n\n  function decodeRaw (buffer) {\n    var payload = buffer.slice(0, -4)\n    var checksum = buffer.slice(-4)\n    var newChecksum = checksumFn(payload)\n\n    if (checksum[0] ^ newChecksum[0] |\n        checksum[1] ^ newChecksum[1] |\n        checksum[2] ^ newChecksum[2] |\n        checksum[3] ^ newChecksum[3]) return\n\n    return payload\n  }\n\n  // Decode a base58-check encoded string to a buffer, no result if checksum is wrong\n  function decodeUnsafe (string) {\n    var buffer = base58.decodeUnsafe(string)\n    if (!buffer) return\n\n    return decodeRaw(buffer)\n  }\n\n  function decode (string) {\n    var buffer = base58.decode(string)\n    var payload = decodeRaw(buffer, checksumFn)\n    if (!payload) throw new Error('Invalid checksum')\n    return payload\n  }\n\n  return {\n    encode: encode,\n    decode: decode,\n    decodeUnsafe: decodeUnsafe\n  }\n}\n","'use strict'\n\nvar { sha256 } = require('@noble/hashes/sha256')\nvar bs58checkBase = require('./base')\n\n// SHA256(SHA256(buffer))\nfunction sha256x2 (buffer) {\n  return sha256(sha256(buffer))\n}\n\nmodule.exports = bs58checkBase(sha256x2)\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.p2pkh = void 0;\nconst bcrypto = require('../crypto');\nconst networks_1 = require('../networks');\nconst bscript = require('../script');\nconst types_1 = require('../types');\nconst lazy = require('./lazy');\nconst bs58check = require('bs58check');\nconst OPS = bscript.OPS;\n// input: {signature} {pubkey}\n// output: OP_DUP OP_HASH160 {hash160(pubkey)} OP_EQUALVERIFY OP_CHECKSIG\n/**\n * Creates a Pay-to-Public-Key-Hash (P2PKH) payment object.\n *\n * @param a - The payment object containing the necessary data.\n * @param opts - Optional payment options.\n * @returns The P2PKH payment object.\n * @throws {TypeError} If the required data is not provided or if the data is invalid.\n */\nfunction p2pkh(a, opts) {\n  if (!a.address && !a.hash && !a.output && !a.pubkey && !a.input)\n    throw new TypeError('Not enough data');\n  opts = Object.assign({ validate: true }, opts || {});\n  (0, types_1.typeforce)(\n    {\n      network: types_1.typeforce.maybe(types_1.typeforce.Object),\n      address: types_1.typeforce.maybe(types_1.typeforce.String),\n      hash: types_1.typeforce.maybe(types_1.typeforce.BufferN(20)),\n      output: types_1.typeforce.maybe(types_1.typeforce.BufferN(25)),\n      pubkey: types_1.typeforce.maybe(types_1.isPoint),\n      signature: types_1.typeforce.maybe(bscript.isCanonicalScriptSignature),\n      input: types_1.typeforce.maybe(types_1.typeforce.Buffer),\n    },\n    a,\n  );\n  const _address = lazy.value(() => {\n    const payload = Buffer.from(bs58check.decode(a.address));\n    const version = payload.readUInt8(0);\n    const hash = payload.slice(1);\n    return { version, hash };\n  });\n  const _chunks = lazy.value(() => {\n    return bscript.decompile(a.input);\n  });\n  const network = a.network || networks_1.bitcoin;\n  const o = { name: 'p2pkh', network };\n  lazy.prop(o, 'address', () => {\n    if (!o.hash) return;\n    const payload = Buffer.allocUnsafe(21);\n    payload.writeUInt8(network.pubKeyHash, 0);\n    o.hash.copy(payload, 1);\n    return bs58check.encode(payload);\n  });\n  lazy.prop(o, 'hash', () => {\n    if (a.output) return a.output.slice(3, 23);\n    if (a.address) return _address().hash;\n    if (a.pubkey || o.pubkey) return bcrypto.hash160(a.pubkey || o.pubkey);\n  });\n  lazy.prop(o, 'output', () => {\n    if (!o.hash) return;\n    return bscript.compile([\n      OPS.OP_DUP,\n      OPS.OP_HASH160,\n      o.hash,\n      OPS.OP_EQUALVERIFY,\n      OPS.OP_CHECKSIG,\n    ]);\n  });\n  lazy.prop(o, 'pubkey', () => {\n    if (!a.input) return;\n    return _chunks()[1];\n  });\n  lazy.prop(o, 'signature', () => {\n    if (!a.input) return;\n    return _chunks()[0];\n  });\n  lazy.prop(o, 'input', () => {\n    if (!a.pubkey) return;\n    if (!a.signature) return;\n    return bscript.compile([a.signature, a.pubkey]);\n  });\n  lazy.prop(o, 'witness', () => {\n    if (!o.input) return;\n    return [];\n  });\n  // extended validation\n  if (opts.validate) {\n    let hash = Buffer.from([]);\n    if (a.address) {\n      if (_address().version !== network.pubKeyHash)\n        throw new TypeError('Invalid version or Network mismatch');\n      if (_address().hash.length !== 20) throw new TypeError('Invalid address');\n      hash = _address().hash;\n    }\n    if (a.hash) {\n      if (hash.length > 0 && !hash.equals(a.hash))\n        throw new TypeError('Hash mismatch');\n      else hash = a.hash;\n    }\n    if (a.output) {\n      if (\n        a.output.length !== 25 ||\n        a.output[0] !== OPS.OP_DUP ||\n        a.output[1] !== OPS.OP_HASH160 ||\n        a.output[2] !== 0x14 ||\n        a.output[23] !== OPS.OP_EQUALVERIFY ||\n        a.output[24] !== OPS.OP_CHECKSIG\n      )\n        throw new TypeError('Output is invalid');\n      const hash2 = a.output.slice(3, 23);\n      if (hash.length > 0 && !hash.equals(hash2))\n        throw new TypeError('Hash mismatch');\n      else hash = hash2;\n    }\n    if (a.pubkey) {\n      const pkh = bcrypto.hash160(a.pubkey);\n      if (hash.length > 0 && !hash.equals(pkh))\n        throw new TypeError('Hash mismatch');\n      else hash = pkh;\n    }\n    if (a.input) {\n      const chunks = _chunks();\n      if (chunks.length !== 2) throw new TypeError('Input is invalid');\n      if (!bscript.isCanonicalScriptSignature(chunks[0]))\n        throw new TypeError('Input has invalid signature');\n      if (!(0, types_1.isPoint)(chunks[1]))\n        throw new TypeError('Input has invalid pubkey');\n      if (a.signature && !a.signature.equals(chunks[0]))\n        throw new TypeError('Signature mismatch');\n      if (a.pubkey && !a.pubkey.equals(chunks[1]))\n        throw new TypeError('Pubkey mismatch');\n      const pkh = bcrypto.hash160(chunks[1]);\n      if (hash.length > 0 && !hash.equals(pkh))\n        throw new TypeError('Hash mismatch');\n    }\n  }\n  return Object.assign(o, a);\n}\nexports.p2pkh = p2pkh;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.p2sh = void 0;\nconst bcrypto = require('../crypto');\nconst networks_1 = require('../networks');\nconst bscript = require('../script');\nconst types_1 = require('../types');\nconst lazy = require('./lazy');\nconst bs58check = require('bs58check');\nconst OPS = bscript.OPS;\n// input: [redeemScriptSig ...] {redeemScript}\n// witness: <?>\n// output: OP_HASH160 {hash160(redeemScript)} OP_EQUAL\n/**\n * Creates a Pay-to-Script-Hash (P2SH) payment object.\n *\n * @param a - The payment object containing the necessary data.\n * @param opts - Optional payment options.\n * @returns The P2SH payment object.\n * @throws {TypeError} If the required data is not provided or if the data is invalid.\n */\nfunction p2sh(a, opts) {\n  if (!a.address && !a.hash && !a.output && !a.redeem && !a.input)\n    throw new TypeError('Not enough data');\n  opts = Object.assign({ validate: true }, opts || {});\n  (0, types_1.typeforce)(\n    {\n      network: types_1.typeforce.maybe(types_1.typeforce.Object),\n      address: types_1.typeforce.maybe(types_1.typeforce.String),\n      hash: types_1.typeforce.maybe(types_1.typeforce.BufferN(20)),\n      output: types_1.typeforce.maybe(types_1.typeforce.BufferN(23)),\n      redeem: types_1.typeforce.maybe({\n        network: types_1.typeforce.maybe(types_1.typeforce.Object),\n        output: types_1.typeforce.maybe(types_1.typeforce.Buffer),\n        input: types_1.typeforce.maybe(types_1.typeforce.Buffer),\n        witness: types_1.typeforce.maybe(\n          types_1.typeforce.arrayOf(types_1.typeforce.Buffer),\n        ),\n      }),\n      input: types_1.typeforce.maybe(types_1.typeforce.Buffer),\n      witness: types_1.typeforce.maybe(\n        types_1.typeforce.arrayOf(types_1.typeforce.Buffer),\n      ),\n    },\n    a,\n  );\n  let network = a.network;\n  if (!network) {\n    network = (a.redeem && a.redeem.network) || networks_1.bitcoin;\n  }\n  const o = { network };\n  const _address = lazy.value(() => {\n    const payload = Buffer.from(bs58check.decode(a.address));\n    const version = payload.readUInt8(0);\n    const hash = payload.slice(1);\n    return { version, hash };\n  });\n  const _chunks = lazy.value(() => {\n    return bscript.decompile(a.input);\n  });\n  const _redeem = lazy.value(() => {\n    const chunks = _chunks();\n    const lastChunk = chunks[chunks.length - 1];\n    return {\n      network,\n      output: lastChunk === OPS.OP_FALSE ? Buffer.from([]) : lastChunk,\n      input: bscript.compile(chunks.slice(0, -1)),\n      witness: a.witness || [],\n    };\n  });\n  // output dependents\n  lazy.prop(o, 'address', () => {\n    if (!o.hash) return;\n    const payload = Buffer.allocUnsafe(21);\n    payload.writeUInt8(o.network.scriptHash, 0);\n    o.hash.copy(payload, 1);\n    return bs58check.encode(payload);\n  });\n  lazy.prop(o, 'hash', () => {\n    // in order of least effort\n    if (a.output) return a.output.slice(2, 22);\n    if (a.address) return _address().hash;\n    if (o.redeem && o.redeem.output) return bcrypto.hash160(o.redeem.output);\n  });\n  lazy.prop(o, 'output', () => {\n    if (!o.hash) return;\n    return bscript.compile([OPS.OP_HASH160, o.hash, OPS.OP_EQUAL]);\n  });\n  // input dependents\n  lazy.prop(o, 'redeem', () => {\n    if (!a.input) return;\n    return _redeem();\n  });\n  lazy.prop(o, 'input', () => {\n    if (!a.redeem || !a.redeem.input || !a.redeem.output) return;\n    return bscript.compile(\n      [].concat(bscript.decompile(a.redeem.input), a.redeem.output),\n    );\n  });\n  lazy.prop(o, 'witness', () => {\n    if (o.redeem && o.redeem.witness) return o.redeem.witness;\n    if (o.input) return [];\n  });\n  lazy.prop(o, 'name', () => {\n    const nameParts = ['p2sh'];\n    if (o.redeem !== undefined && o.redeem.name !== undefined)\n      nameParts.push(o.redeem.name);\n    return nameParts.join('-');\n  });\n  if (opts.validate) {\n    let hash = Buffer.from([]);\n    if (a.address) {\n      if (_address().version !== network.scriptHash)\n        throw new TypeError('Invalid version or Network mismatch');\n      if (_address().hash.length !== 20) throw new TypeError('Invalid address');\n      hash = _address().hash;\n    }\n    if (a.hash) {\n      if (hash.length > 0 && !hash.equals(a.hash))\n        throw new TypeError('Hash mismatch');\n      else hash = a.hash;\n    }\n    if (a.output) {\n      if (\n        a.output.length !== 23 ||\n        a.output[0] !== OPS.OP_HASH160 ||\n        a.output[1] !== 0x14 ||\n        a.output[22] !== OPS.OP_EQUAL\n      )\n        throw new TypeError('Output is invalid');\n      const hash2 = a.output.slice(2, 22);\n      if (hash.length > 0 && !hash.equals(hash2))\n        throw new TypeError('Hash mismatch');\n      else hash = hash2;\n    }\n    // inlined to prevent 'no-inner-declarations' failing\n    const checkRedeem = redeem => {\n      // is the redeem output empty/invalid?\n      if (redeem.output) {\n        const decompile = bscript.decompile(redeem.output);\n        if (!decompile || decompile.length < 1)\n          throw new TypeError('Redeem.output too short');\n        if (redeem.output.byteLength > 520)\n          throw new TypeError(\n            'Redeem.output unspendable if larger than 520 bytes',\n          );\n        if (bscript.countNonPushOnlyOPs(decompile) > 201)\n          throw new TypeError(\n            'Redeem.output unspendable with more than 201 non-push ops',\n          );\n        // match hash against other sources\n        const hash2 = bcrypto.hash160(redeem.output);\n        if (hash.length > 0 && !hash.equals(hash2))\n          throw new TypeError('Hash mismatch');\n        else hash = hash2;\n      }\n      if (redeem.input) {\n        const hasInput = redeem.input.length > 0;\n        const hasWitness = redeem.witness && redeem.witness.length > 0;\n        if (!hasInput && !hasWitness) throw new TypeError('Empty input');\n        if (hasInput && hasWitness)\n          throw new TypeError('Input and witness provided');\n        if (hasInput) {\n          const richunks = bscript.decompile(redeem.input);\n          if (!bscript.isPushOnly(richunks))\n            throw new TypeError('Non push-only scriptSig');\n        }\n      }\n    };\n    if (a.input) {\n      const chunks = _chunks();\n      if (!chunks || chunks.length < 1) throw new TypeError('Input too short');\n      if (!Buffer.isBuffer(_redeem().output))\n        throw new TypeError('Input is invalid');\n      checkRedeem(_redeem());\n    }\n    if (a.redeem) {\n      if (a.redeem.network && a.redeem.network !== network)\n        throw new TypeError('Network mismatch');\n      if (a.input) {\n        const redeem = _redeem();\n        if (a.redeem.output && !a.redeem.output.equals(redeem.output))\n          throw new TypeError('Redeem.output mismatch');\n        if (a.redeem.input && !a.redeem.input.equals(redeem.input))\n          throw new TypeError('Redeem.input mismatch');\n      }\n      checkRedeem(a.redeem);\n    }\n    if (a.witness) {\n      if (\n        a.redeem &&\n        a.redeem.witness &&\n        !(0, types_1.stacksEqual)(a.redeem.witness, a.witness)\n      )\n        throw new TypeError('Witness and redeem.witness mismatch');\n    }\n  }\n  return Object.assign(o, a);\n}\nexports.p2sh = p2sh;\n","'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.bech32m = exports.bech32 = void 0;\nconst ALPHABET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l';\nconst ALPHABET_MAP = {};\nfor (let z = 0; z < ALPHABET.length; z++) {\n    const x = ALPHABET.charAt(z);\n    ALPHABET_MAP[x] = z;\n}\nfunction polymodStep(pre) {\n    const b = pre >> 25;\n    return (((pre & 0x1ffffff) << 5) ^\n        (-((b >> 0) & 1) & 0x3b6a57b2) ^\n        (-((b >> 1) & 1) & 0x26508e6d) ^\n        (-((b >> 2) & 1) & 0x1ea119fa) ^\n        (-((b >> 3) & 1) & 0x3d4233dd) ^\n        (-((b >> 4) & 1) & 0x2a1462b3));\n}\nfunction prefixChk(prefix) {\n    let chk = 1;\n    for (let i = 0; i < prefix.length; ++i) {\n        const c = prefix.charCodeAt(i);\n        if (c < 33 || c > 126)\n            return 'Invalid prefix (' + prefix + ')';\n        chk = polymodStep(chk) ^ (c >> 5);\n    }\n    chk = polymodStep(chk);\n    for (let i = 0; i < prefix.length; ++i) {\n        const v = prefix.charCodeAt(i);\n        chk = polymodStep(chk) ^ (v & 0x1f);\n    }\n    return chk;\n}\nfunction convert(data, inBits, outBits, pad) {\n    let value = 0;\n    let bits = 0;\n    const maxV = (1 << outBits) - 1;\n    const result = [];\n    for (let i = 0; i < data.length; ++i) {\n        value = (value << inBits) | data[i];\n        bits += inBits;\n        while (bits >= outBits) {\n            bits -= outBits;\n            result.push((value >> bits) & maxV);\n        }\n    }\n    if (pad) {\n        if (bits > 0) {\n            result.push((value << (outBits - bits)) & maxV);\n        }\n    }\n    else {\n        if (bits >= inBits)\n            return 'Excess padding';\n        if ((value << (outBits - bits)) & maxV)\n            return 'Non-zero padding';\n    }\n    return result;\n}\nfunction toWords(bytes) {\n    return convert(bytes, 8, 5, true);\n}\nfunction fromWordsUnsafe(words) {\n    const res = convert(words, 5, 8, false);\n    if (Array.isArray(res))\n        return res;\n}\nfunction fromWords(words) {\n    const res = convert(words, 5, 8, false);\n    if (Array.isArray(res))\n        return res;\n    throw new Error(res);\n}\nfunction getLibraryFromEncoding(encoding) {\n    let ENCODING_CONST;\n    if (encoding === 'bech32') {\n        ENCODING_CONST = 1;\n    }\n    else {\n        ENCODING_CONST = 0x2bc830a3;\n    }\n    function encode(prefix, words, LIMIT) {\n        LIMIT = LIMIT || 90;\n        if (prefix.length + 7 + words.length > LIMIT)\n            throw new TypeError('Exceeds length limit');\n        prefix = prefix.toLowerCase();\n        // determine chk mod\n        let chk = prefixChk(prefix);\n        if (typeof chk === 'string')\n            throw new Error(chk);\n        let result = prefix + '1';\n        for (let i = 0; i < words.length; ++i) {\n            const x = words[i];\n            if (x >> 5 !== 0)\n                throw new Error('Non 5-bit word');\n            chk = polymodStep(chk) ^ x;\n            result += ALPHABET.charAt(x);\n        }\n        for (let i = 0; i < 6; ++i) {\n            chk = polymodStep(chk);\n        }\n        chk ^= ENCODING_CONST;\n        for (let i = 0; i < 6; ++i) {\n            const v = (chk >> ((5 - i) * 5)) & 0x1f;\n            result += ALPHABET.charAt(v);\n        }\n        return result;\n    }\n    function __decode(str, LIMIT) {\n        LIMIT = LIMIT || 90;\n        if (str.length < 8)\n            return str + ' too short';\n        if (str.length > LIMIT)\n            return 'Exceeds length limit';\n        // don't allow mixed case\n        const lowered = str.toLowerCase();\n        const uppered = str.toUpperCase();\n        if (str !== lowered && str !== uppered)\n            return 'Mixed-case string ' + str;\n        str = lowered;\n        const split = str.lastIndexOf('1');\n        if (split === -1)\n            return 'No separator character for ' + str;\n        if (split === 0)\n            return 'Missing prefix for ' + str;\n        const prefix = str.slice(0, split);\n        const wordChars = str.slice(split + 1);\n        if (wordChars.length < 6)\n            return 'Data too short';\n        let chk = prefixChk(prefix);\n        if (typeof chk === 'string')\n            return chk;\n        const words = [];\n        for (let i = 0; i < wordChars.length; ++i) {\n            const c = wordChars.charAt(i);\n            const v = ALPHABET_MAP[c];\n            if (v === undefined)\n                return 'Unknown character ' + c;\n            chk = polymodStep(chk) ^ v;\n            // not in the checksum?\n            if (i + 6 >= wordChars.length)\n                continue;\n            words.push(v);\n        }\n        if (chk !== ENCODING_CONST)\n            return 'Invalid checksum for ' + str;\n        return { prefix, words };\n    }\n    function decodeUnsafe(str, LIMIT) {\n        const res = __decode(str, LIMIT);\n        if (typeof res === 'object')\n            return res;\n    }\n    function decode(str, LIMIT) {\n        const res = __decode(str, LIMIT);\n        if (typeof res === 'object')\n            return res;\n        throw new Error(res);\n    }\n    return {\n        decodeUnsafe,\n        decode,\n        encode,\n        toWords,\n        fromWordsUnsafe,\n        fromWords,\n    };\n}\nexports.bech32 = getLibraryFromEncoding('bech32');\nexports.bech32m = getLibraryFromEncoding('bech32m');\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.p2wpkh = void 0;\nconst bcrypto = require('../crypto');\nconst networks_1 = require('../networks');\nconst bscript = require('../script');\nconst types_1 = require('../types');\nconst lazy = require('./lazy');\nconst bech32_1 = require('bech32');\nconst OPS = bscript.OPS;\nconst EMPTY_BUFFER = Buffer.alloc(0);\n// witness: {signature} {pubKey}\n// input: <>\n// output: OP_0 {pubKeyHash}\n/**\n * Creates a pay-to-witness-public-key-hash (p2wpkh) payment object.\n *\n * @param a - The payment object containing the necessary data.\n * @param opts - Optional payment options.\n * @returns The p2wpkh payment object.\n * @throws {TypeError} If the required data is missing or invalid.\n */\nfunction p2wpkh(a, opts) {\n  if (!a.address && !a.hash && !a.output && !a.pubkey && !a.witness)\n    throw new TypeError('Not enough data');\n  opts = Object.assign({ validate: true }, opts || {});\n  (0, types_1.typeforce)(\n    {\n      address: types_1.typeforce.maybe(types_1.typeforce.String),\n      hash: types_1.typeforce.maybe(types_1.typeforce.BufferN(20)),\n      input: types_1.typeforce.maybe(types_1.typeforce.BufferN(0)),\n      network: types_1.typeforce.maybe(types_1.typeforce.Object),\n      output: types_1.typeforce.maybe(types_1.typeforce.BufferN(22)),\n      pubkey: types_1.typeforce.maybe(types_1.isPoint),\n      signature: types_1.typeforce.maybe(bscript.isCanonicalScriptSignature),\n      witness: types_1.typeforce.maybe(\n        types_1.typeforce.arrayOf(types_1.typeforce.Buffer),\n      ),\n    },\n    a,\n  );\n  const _address = lazy.value(() => {\n    const result = bech32_1.bech32.decode(a.address);\n    const version = result.words.shift();\n    const data = bech32_1.bech32.fromWords(result.words);\n    return {\n      version,\n      prefix: result.prefix,\n      data: Buffer.from(data),\n    };\n  });\n  const network = a.network || networks_1.bitcoin;\n  const o = { name: 'p2wpkh', network };\n  lazy.prop(o, 'address', () => {\n    if (!o.hash) return;\n    const words = bech32_1.bech32.toWords(o.hash);\n    words.unshift(0x00);\n    return bech32_1.bech32.encode(network.bech32, words);\n  });\n  lazy.prop(o, 'hash', () => {\n    if (a.output) return a.output.slice(2, 22);\n    if (a.address) return _address().data;\n    if (a.pubkey || o.pubkey) return bcrypto.hash160(a.pubkey || o.pubkey);\n  });\n  lazy.prop(o, 'output', () => {\n    if (!o.hash) return;\n    return bscript.compile([OPS.OP_0, o.hash]);\n  });\n  lazy.prop(o, 'pubkey', () => {\n    if (a.pubkey) return a.pubkey;\n    if (!a.witness) return;\n    return a.witness[1];\n  });\n  lazy.prop(o, 'signature', () => {\n    if (!a.witness) return;\n    return a.witness[0];\n  });\n  lazy.prop(o, 'input', () => {\n    if (!o.witness) return;\n    return EMPTY_BUFFER;\n  });\n  lazy.prop(o, 'witness', () => {\n    if (!a.pubkey) return;\n    if (!a.signature) return;\n    return [a.signature, a.pubkey];\n  });\n  // extended validation\n  if (opts.validate) {\n    let hash = Buffer.from([]);\n    if (a.address) {\n      if (network && network.bech32 !== _address().prefix)\n        throw new TypeError('Invalid prefix or Network mismatch');\n      if (_address().version !== 0x00)\n        throw new TypeError('Invalid address version');\n      if (_address().data.length !== 20)\n        throw new TypeError('Invalid address data');\n      hash = _address().data;\n    }\n    if (a.hash) {\n      if (hash.length > 0 && !hash.equals(a.hash))\n        throw new TypeError('Hash mismatch');\n      else hash = a.hash;\n    }\n    if (a.output) {\n      if (\n        a.output.length !== 22 ||\n        a.output[0] !== OPS.OP_0 ||\n        a.output[1] !== 0x14\n      )\n        throw new TypeError('Output is invalid');\n      if (hash.length > 0 && !hash.equals(a.output.slice(2)))\n        throw new TypeError('Hash mismatch');\n      else hash = a.output.slice(2);\n    }\n    if (a.pubkey) {\n      const pkh = bcrypto.hash160(a.pubkey);\n      if (hash.length > 0 && !hash.equals(pkh))\n        throw new TypeError('Hash mismatch');\n      else hash = pkh;\n      if (!(0, types_1.isPoint)(a.pubkey) || a.pubkey.length !== 33)\n        throw new TypeError('Invalid pubkey for p2wpkh');\n    }\n    if (a.witness) {\n      if (a.witness.length !== 2) throw new TypeError('Witness is invalid');\n      if (!bscript.isCanonicalScriptSignature(a.witness[0]))\n        throw new TypeError('Witness has invalid signature');\n      if (!(0, types_1.isPoint)(a.witness[1]) || a.witness[1].length !== 33)\n        throw new TypeError('Witness has invalid pubkey');\n      if (a.signature && !a.signature.equals(a.witness[0]))\n        throw new TypeError('Signature mismatch');\n      if (a.pubkey && !a.pubkey.equals(a.witness[1]))\n        throw new TypeError('Pubkey mismatch');\n      const pkh = bcrypto.hash160(a.witness[1]);\n      if (hash.length > 0 && !hash.equals(pkh))\n        throw new TypeError('Hash mismatch');\n    }\n  }\n  return Object.assign(o, a);\n}\nexports.p2wpkh = p2wpkh;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.p2wsh = void 0;\nconst bcrypto = require('../crypto');\nconst networks_1 = require('../networks');\nconst bscript = require('../script');\nconst types_1 = require('../types');\nconst lazy = require('./lazy');\nconst bech32_1 = require('bech32');\nconst OPS = bscript.OPS;\nconst EMPTY_BUFFER = Buffer.alloc(0);\nfunction chunkHasUncompressedPubkey(chunk) {\n  if (\n    Buffer.isBuffer(chunk) &&\n    chunk.length === 65 &&\n    chunk[0] === 0x04 &&\n    (0, types_1.isPoint)(chunk)\n  ) {\n    return true;\n  } else {\n    return false;\n  }\n}\n// input: <>\n// witness: [redeemScriptSig ...] {redeemScript}\n// output: OP_0 {sha256(redeemScript)}\n/**\n * Creates a Pay-to-Witness-Script-Hash (P2WSH) payment object.\n *\n * @param a - The payment object containing the necessary data.\n * @param opts - Optional payment options.\n * @returns The P2WSH payment object.\n * @throws {TypeError} If the required data is missing or invalid.\n */\nfunction p2wsh(a, opts) {\n  if (!a.address && !a.hash && !a.output && !a.redeem && !a.witness)\n    throw new TypeError('Not enough data');\n  opts = Object.assign({ validate: true }, opts || {});\n  (0, types_1.typeforce)(\n    {\n      network: types_1.typeforce.maybe(types_1.typeforce.Object),\n      address: types_1.typeforce.maybe(types_1.typeforce.String),\n      hash: types_1.typeforce.maybe(types_1.typeforce.BufferN(32)),\n      output: types_1.typeforce.maybe(types_1.typeforce.BufferN(34)),\n      redeem: types_1.typeforce.maybe({\n        input: types_1.typeforce.maybe(types_1.typeforce.Buffer),\n        network: types_1.typeforce.maybe(types_1.typeforce.Object),\n        output: types_1.typeforce.maybe(types_1.typeforce.Buffer),\n        witness: types_1.typeforce.maybe(\n          types_1.typeforce.arrayOf(types_1.typeforce.Buffer),\n        ),\n      }),\n      input: types_1.typeforce.maybe(types_1.typeforce.BufferN(0)),\n      witness: types_1.typeforce.maybe(\n        types_1.typeforce.arrayOf(types_1.typeforce.Buffer),\n      ),\n    },\n    a,\n  );\n  const _address = lazy.value(() => {\n    const result = bech32_1.bech32.decode(a.address);\n    const version = result.words.shift();\n    const data = bech32_1.bech32.fromWords(result.words);\n    return {\n      version,\n      prefix: result.prefix,\n      data: Buffer.from(data),\n    };\n  });\n  const _rchunks = lazy.value(() => {\n    return bscript.decompile(a.redeem.input);\n  });\n  let network = a.network;\n  if (!network) {\n    network = (a.redeem && a.redeem.network) || networks_1.bitcoin;\n  }\n  const o = { network };\n  lazy.prop(o, 'address', () => {\n    if (!o.hash) return;\n    const words = bech32_1.bech32.toWords(o.hash);\n    words.unshift(0x00);\n    return bech32_1.bech32.encode(network.bech32, words);\n  });\n  lazy.prop(o, 'hash', () => {\n    if (a.output) return a.output.slice(2);\n    if (a.address) return _address().data;\n    if (o.redeem && o.redeem.output) return bcrypto.sha256(o.redeem.output);\n  });\n  lazy.prop(o, 'output', () => {\n    if (!o.hash) return;\n    return bscript.compile([OPS.OP_0, o.hash]);\n  });\n  lazy.prop(o, 'redeem', () => {\n    if (!a.witness) return;\n    return {\n      output: a.witness[a.witness.length - 1],\n      input: EMPTY_BUFFER,\n      witness: a.witness.slice(0, -1),\n    };\n  });\n  lazy.prop(o, 'input', () => {\n    if (!o.witness) return;\n    return EMPTY_BUFFER;\n  });\n  lazy.prop(o, 'witness', () => {\n    // transform redeem input to witness stack?\n    if (\n      a.redeem &&\n      a.redeem.input &&\n      a.redeem.input.length > 0 &&\n      a.redeem.output &&\n      a.redeem.output.length > 0\n    ) {\n      const stack = bscript.toStack(_rchunks());\n      // assign, and blank the existing input\n      o.redeem = Object.assign({ witness: stack }, a.redeem);\n      o.redeem.input = EMPTY_BUFFER;\n      return [].concat(stack, a.redeem.output);\n    }\n    if (!a.redeem) return;\n    if (!a.redeem.output) return;\n    if (!a.redeem.witness) return;\n    return [].concat(a.redeem.witness, a.redeem.output);\n  });\n  lazy.prop(o, 'name', () => {\n    const nameParts = ['p2wsh'];\n    if (o.redeem !== undefined && o.redeem.name !== undefined)\n      nameParts.push(o.redeem.name);\n    return nameParts.join('-');\n  });\n  // extended validation\n  if (opts.validate) {\n    let hash = Buffer.from([]);\n    if (a.address) {\n      if (_address().prefix !== network.bech32)\n        throw new TypeError('Invalid prefix or Network mismatch');\n      if (_address().version !== 0x00)\n        throw new TypeError('Invalid address version');\n      if (_address().data.length !== 32)\n        throw new TypeError('Invalid address data');\n      hash = _address().data;\n    }\n    if (a.hash) {\n      if (hash.length > 0 && !hash.equals(a.hash))\n        throw new TypeError('Hash mismatch');\n      else hash = a.hash;\n    }\n    if (a.output) {\n      if (\n        a.output.length !== 34 ||\n        a.output[0] !== OPS.OP_0 ||\n        a.output[1] !== 0x20\n      )\n        throw new TypeError('Output is invalid');\n      const hash2 = a.output.slice(2);\n      if (hash.length > 0 && !hash.equals(hash2))\n        throw new TypeError('Hash mismatch');\n      else hash = hash2;\n    }\n    if (a.redeem) {\n      if (a.redeem.network && a.redeem.network !== network)\n        throw new TypeError('Network mismatch');\n      // is there two redeem sources?\n      if (\n        a.redeem.input &&\n        a.redeem.input.length > 0 &&\n        a.redeem.witness &&\n        a.redeem.witness.length > 0\n      )\n        throw new TypeError('Ambiguous witness source');\n      // is the redeem output non-empty/valid?\n      if (a.redeem.output) {\n        const decompile = bscript.decompile(a.redeem.output);\n        if (!decompile || decompile.length < 1)\n          throw new TypeError('Redeem.output is invalid');\n        if (a.redeem.output.byteLength > 3600)\n          throw new TypeError(\n            'Redeem.output unspendable if larger than 3600 bytes',\n          );\n        if (bscript.countNonPushOnlyOPs(decompile) > 201)\n          throw new TypeError(\n            'Redeem.output unspendable with more than 201 non-push ops',\n          );\n        // match hash against other sources\n        const hash2 = bcrypto.sha256(a.redeem.output);\n        if (hash.length > 0 && !hash.equals(hash2))\n          throw new TypeError('Hash mismatch');\n        else hash = hash2;\n      }\n      if (a.redeem.input && !bscript.isPushOnly(_rchunks()))\n        throw new TypeError('Non push-only scriptSig');\n      if (\n        a.witness &&\n        a.redeem.witness &&\n        !(0, types_1.stacksEqual)(a.witness, a.redeem.witness)\n      )\n        throw new TypeError('Witness and redeem.witness mismatch');\n      if (\n        (a.redeem.input && _rchunks().some(chunkHasUncompressedPubkey)) ||\n        (a.redeem.output &&\n          (bscript.decompile(a.redeem.output) || []).some(\n            chunkHasUncompressedPubkey,\n          ))\n      ) {\n        throw new TypeError(\n          'redeem.input or redeem.output contains uncompressed pubkey',\n        );\n      }\n    }\n    if (a.witness && a.witness.length > 0) {\n      const wScript = a.witness[a.witness.length - 1];\n      if (a.redeem && a.redeem.output && !a.redeem.output.equals(wScript))\n        throw new TypeError('Witness and redeem.output mismatch');\n      if (\n        a.witness.some(chunkHasUncompressedPubkey) ||\n        (bscript.decompile(wScript) || []).some(chunkHasUncompressedPubkey)\n      )\n        throw new TypeError('Witness contains uncompressed pubkey');\n    }\n  }\n  return Object.assign(o, a);\n}\nexports.p2wsh = p2wsh;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.getEccLib = exports.initEccLib = void 0;\nconst _ECCLIB_CACHE = {};\n/**\n * Initializes the ECC library with the provided instance.\n * If `eccLib` is `undefined`, the library will be cleared.\n * If `eccLib` is a new instance, it will be verified before setting it as the active library.\n *\n * @param eccLib The instance of the ECC library to initialize.\n * @param opts Extra initialization options. Use {DANGER_DO_NOT_VERIFY_ECCLIB:true} if ecc verification should not be executed. Not recommended!\n */\nfunction initEccLib(eccLib, opts) {\n  if (!eccLib) {\n    // allow clearing the library\n    _ECCLIB_CACHE.eccLib = eccLib;\n  } else if (eccLib !== _ECCLIB_CACHE.eccLib) {\n    if (!opts?.DANGER_DO_NOT_VERIFY_ECCLIB)\n      // new instance, verify it\n      verifyEcc(eccLib);\n    _ECCLIB_CACHE.eccLib = eccLib;\n  }\n}\nexports.initEccLib = initEccLib;\n/**\n * Retrieves the ECC Library instance.\n * Throws an error if the ECC Library is not provided.\n * You must call initEccLib() with a valid TinySecp256k1Interface instance before calling this function.\n * @returns The ECC Library instance.\n * @throws Error if the ECC Library is not provided.\n */\nfunction getEccLib() {\n  if (!_ECCLIB_CACHE.eccLib)\n    throw new Error(\n      'No ECC Library provided. You must call initEccLib() with a valid TinySecp256k1Interface instance',\n    );\n  return _ECCLIB_CACHE.eccLib;\n}\nexports.getEccLib = getEccLib;\nconst h = hex => Buffer.from(hex, 'hex');\n/**\n * Verifies the ECC functionality.\n *\n * @param ecc - The TinySecp256k1Interface object.\n */\nfunction verifyEcc(ecc) {\n  assert(typeof ecc.isXOnlyPoint === 'function');\n  assert(\n    ecc.isXOnlyPoint(\n      h('79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798'),\n    ),\n  );\n  assert(\n    ecc.isXOnlyPoint(\n      h('fffffffffffffffffffffffffffffffffffffffffffffffffffffffeeffffc2e'),\n    ),\n  );\n  assert(\n    ecc.isXOnlyPoint(\n      h('f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9'),\n    ),\n  );\n  assert(\n    ecc.isXOnlyPoint(\n      h('0000000000000000000000000000000000000000000000000000000000000001'),\n    ),\n  );\n  assert(\n    !ecc.isXOnlyPoint(\n      h('0000000000000000000000000000000000000000000000000000000000000000'),\n    ),\n  );\n  assert(\n    !ecc.isXOnlyPoint(\n      h('fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f'),\n    ),\n  );\n  assert(typeof ecc.xOnlyPointAddTweak === 'function');\n  tweakAddVectors.forEach(t => {\n    const r = ecc.xOnlyPointAddTweak(h(t.pubkey), h(t.tweak));\n    if (t.result === null) {\n      assert(r === null);\n    } else {\n      assert(r !== null);\n      assert(r.parity === t.parity);\n      assert(Buffer.from(r.xOnlyPubkey).equals(h(t.result)));\n    }\n  });\n}\nfunction assert(bool) {\n  if (!bool) throw new Error('ecc library invalid');\n}\nconst tweakAddVectors = [\n  {\n    pubkey: '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n    tweak: 'fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140',\n    parity: -1,\n    result: null,\n  },\n  {\n    pubkey: '1617d38ed8d8657da4d4761e8057bc396ea9e4b9d29776d4be096016dbd2509b',\n    tweak: 'a8397a935f0dfceba6ba9618f6451ef4d80637abf4e6af2669fbc9de6a8fd2ac',\n    parity: 1,\n    result: 'e478f99dab91052ab39a33ea35fd5e6e4933f4d28023cd597c9a1f6760346adf',\n  },\n  {\n    pubkey: '2c0b7cf95324a07d05398b240174dc0c2be444d96b159aa6c7f7b1e668680991',\n    tweak: '823c3cd2142744b075a87eade7e1b8678ba308d566226a0056ca2b7a76f86b47',\n    parity: 0,\n    result: '9534f8dc8c6deda2dc007655981c78b49c5d96c778fbf363462a11ec9dfd948c',\n  },\n];\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n","'use strict'\nvar Buffer = require('safe-buffer').Buffer\n\n// Number.MAX_SAFE_INTEGER\nvar MAX_SAFE_INTEGER = 9007199254740991\n\nfunction checkUInt53 (n) {\n  if (n < 0 || n > MAX_SAFE_INTEGER || n % 1 !== 0) throw new RangeError('value out of range')\n}\n\nfunction encode (number, buffer, offset) {\n  checkUInt53(number)\n\n  if (!buffer) buffer = Buffer.allocUnsafe(encodingLength(number))\n  if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')\n  if (!offset) offset = 0\n\n  // 8 bit\n  if (number < 0xfd) {\n    buffer.writeUInt8(number, offset)\n    encode.bytes = 1\n\n  // 16 bit\n  } else if (number <= 0xffff) {\n    buffer.writeUInt8(0xfd, offset)\n    buffer.writeUInt16LE(number, offset + 1)\n    encode.bytes = 3\n\n  // 32 bit\n  } else if (number <= 0xffffffff) {\n    buffer.writeUInt8(0xfe, offset)\n    buffer.writeUInt32LE(number, offset + 1)\n    encode.bytes = 5\n\n  // 64 bit\n  } else {\n    buffer.writeUInt8(0xff, offset)\n    buffer.writeUInt32LE(number >>> 0, offset + 1)\n    buffer.writeUInt32LE((number / 0x100000000) | 0, offset + 5)\n    encode.bytes = 9\n  }\n\n  return buffer\n}\n\nfunction decode (buffer, offset) {\n  if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')\n  if (!offset) offset = 0\n\n  var first = buffer.readUInt8(offset)\n\n  // 8 bit\n  if (first < 0xfd) {\n    decode.bytes = 1\n    return first\n\n  // 16 bit\n  } else if (first === 0xfd) {\n    decode.bytes = 3\n    return buffer.readUInt16LE(offset + 1)\n\n  // 32 bit\n  } else if (first === 0xfe) {\n    decode.bytes = 5\n    return buffer.readUInt32LE(offset + 1)\n\n  // 64 bit\n  } else {\n    decode.bytes = 9\n    var lo = buffer.readUInt32LE(offset + 1)\n    var hi = buffer.readUInt32LE(offset + 5)\n    var number = hi * 0x0100000000 + lo\n    checkUInt53(number)\n\n    return number\n  }\n}\n\nfunction encodingLength (number) {\n  checkUInt53(number)\n\n  return (\n    number < 0xfd ? 1\n      : number <= 0xffff ? 3\n        : number <= 0xffffffff ? 5\n          : 9\n  )\n}\n\nmodule.exports = { encode: encode, decode: decode, encodingLength: encodingLength }\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.BufferReader =\n  exports.BufferWriter =\n  exports.cloneBuffer =\n  exports.reverseBuffer =\n  exports.writeUInt64LE =\n  exports.readUInt64LE =\n  exports.varuint =\n    void 0;\nconst types = require('./types');\nconst { typeforce } = types;\nconst varuint = require('varuint-bitcoin');\nexports.varuint = varuint;\n// https://github.com/feross/buffer/blob/master/index.js#L1127\nfunction verifuint(value, max) {\n  if (typeof value !== 'number')\n    throw new Error('cannot write a non-number as a number');\n  if (value < 0)\n    throw new Error('specified a negative value for writing an unsigned value');\n  if (value > max) throw new Error('RangeError: value out of range');\n  if (Math.floor(value) !== value)\n    throw new Error('value has a fractional component');\n}\nfunction readUInt64LE(buffer, offset) {\n  const a = buffer.readUInt32LE(offset);\n  let b = buffer.readUInt32LE(offset + 4);\n  b *= 0x100000000;\n  verifuint(b + a, 0x001fffffffffffff);\n  return b + a;\n}\nexports.readUInt64LE = readUInt64LE;\n/**\n * Writes a 64-bit unsigned integer in little-endian format to the specified buffer at the given offset.\n *\n * @param buffer - The buffer to write the value to.\n * @param value - The 64-bit unsigned integer value to write.\n * @param offset - The offset in the buffer where the value should be written.\n * @returns The new offset after writing the value.\n */\nfunction writeUInt64LE(buffer, value, offset) {\n  verifuint(value, 0x001fffffffffffff);\n  buffer.writeInt32LE(value & -1, offset);\n  buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4);\n  return offset + 8;\n}\nexports.writeUInt64LE = writeUInt64LE;\n/**\n * Reverses the order of bytes in a buffer.\n * @param buffer - The buffer to reverse.\n * @returns A new buffer with the bytes reversed.\n */\nfunction reverseBuffer(buffer) {\n  if (buffer.length < 1) return buffer;\n  let j = buffer.length - 1;\n  let tmp = 0;\n  for (let i = 0; i < buffer.length / 2; i++) {\n    tmp = buffer[i];\n    buffer[i] = buffer[j];\n    buffer[j] = tmp;\n    j--;\n  }\n  return buffer;\n}\nexports.reverseBuffer = reverseBuffer;\nfunction cloneBuffer(buffer) {\n  const clone = Buffer.allocUnsafe(buffer.length);\n  buffer.copy(clone);\n  return clone;\n}\nexports.cloneBuffer = cloneBuffer;\n/**\n * Helper class for serialization of bitcoin data types into a pre-allocated buffer.\n */\nclass BufferWriter {\n  static withCapacity(size) {\n    return new BufferWriter(Buffer.alloc(size));\n  }\n  constructor(buffer, offset = 0) {\n    this.buffer = buffer;\n    this.offset = offset;\n    typeforce(types.tuple(types.Buffer, types.UInt32), [buffer, offset]);\n  }\n  writeUInt8(i) {\n    this.offset = this.buffer.writeUInt8(i, this.offset);\n  }\n  writeInt32(i) {\n    this.offset = this.buffer.writeInt32LE(i, this.offset);\n  }\n  writeUInt32(i) {\n    this.offset = this.buffer.writeUInt32LE(i, this.offset);\n  }\n  writeUInt64(i) {\n    this.offset = writeUInt64LE(this.buffer, i, this.offset);\n  }\n  writeVarInt(i) {\n    varuint.encode(i, this.buffer, this.offset);\n    this.offset += varuint.encode.bytes;\n  }\n  writeSlice(slice) {\n    if (this.buffer.length < this.offset + slice.length) {\n      throw new Error('Cannot write slice out of bounds');\n    }\n    this.offset += slice.copy(this.buffer, this.offset);\n  }\n  writeVarSlice(slice) {\n    this.writeVarInt(slice.length);\n    this.writeSlice(slice);\n  }\n  writeVector(vector) {\n    this.writeVarInt(vector.length);\n    vector.forEach(buf => this.writeVarSlice(buf));\n  }\n  end() {\n    if (this.buffer.length === this.offset) {\n      return this.buffer;\n    }\n    throw new Error(`buffer size ${this.buffer.length}, offset ${this.offset}`);\n  }\n}\nexports.BufferWriter = BufferWriter;\n/**\n * Helper class for reading of bitcoin data types from a buffer.\n */\nclass BufferReader {\n  constructor(buffer, offset = 0) {\n    this.buffer = buffer;\n    this.offset = offset;\n    typeforce(types.tuple(types.Buffer, types.UInt32), [buffer, offset]);\n  }\n  readUInt8() {\n    const result = this.buffer.readUInt8(this.offset);\n    this.offset++;\n    return result;\n  }\n  readInt32() {\n    const result = this.buffer.readInt32LE(this.offset);\n    this.offset += 4;\n    return result;\n  }\n  readUInt32() {\n    const result = this.buffer.readUInt32LE(this.offset);\n    this.offset += 4;\n    return result;\n  }\n  readUInt64() {\n    const result = readUInt64LE(this.buffer, this.offset);\n    this.offset += 8;\n    return result;\n  }\n  readVarInt() {\n    const vi = varuint.decode(this.buffer, this.offset);\n    this.offset += varuint.decode.bytes;\n    return vi;\n  }\n  readSlice(n) {\n    if (this.buffer.length < this.offset + n) {\n      throw new Error('Cannot read slice out of bounds');\n    }\n    const result = this.buffer.slice(this.offset, this.offset + n);\n    this.offset += n;\n    return result;\n  }\n  readVarSlice() {\n    return this.readSlice(this.readVarInt());\n  }\n  readVector() {\n    const count = this.readVarInt();\n    const vector = [];\n    for (let i = 0; i < count; i++) vector.push(this.readVarSlice());\n    return vector;\n  }\n}\nexports.BufferReader = BufferReader;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.tweakKey =\n  exports.tapTweakHash =\n  exports.tapleafHash =\n  exports.findScriptPath =\n  exports.toHashTree =\n  exports.rootHashFromPath =\n  exports.MAX_TAPTREE_DEPTH =\n  exports.LEAF_VERSION_TAPSCRIPT =\n    void 0;\nconst buffer_1 = require('buffer');\nconst ecc_lib_1 = require('../ecc_lib');\nconst bcrypto = require('../crypto');\nconst bufferutils_1 = require('../bufferutils');\nconst types_1 = require('../types');\nexports.LEAF_VERSION_TAPSCRIPT = 0xc0;\nexports.MAX_TAPTREE_DEPTH = 128;\nconst isHashBranch = ht => 'left' in ht && 'right' in ht;\n/**\n * Calculates the root hash from a given control block and leaf hash.\n * @param controlBlock - The control block buffer.\n * @param leafHash - The leaf hash buffer.\n * @returns The root hash buffer.\n * @throws {TypeError} If the control block length is less than 33.\n */\nfunction rootHashFromPath(controlBlock, leafHash) {\n  if (controlBlock.length < 33)\n    throw new TypeError(\n      `The control-block length is too small. Got ${controlBlock.length}, expected min 33.`,\n    );\n  const m = (controlBlock.length - 33) / 32;\n  let kj = leafHash;\n  for (let j = 0; j < m; j++) {\n    const ej = controlBlock.slice(33 + 32 * j, 65 + 32 * j);\n    if (kj.compare(ej) < 0) {\n      kj = tapBranchHash(kj, ej);\n    } else {\n      kj = tapBranchHash(ej, kj);\n    }\n  }\n  return kj;\n}\nexports.rootHashFromPath = rootHashFromPath;\n/**\n * Build a hash tree of merkle nodes from the scripts binary tree.\n * @param scriptTree - the tree of scripts to pairwise hash.\n */\nfunction toHashTree(scriptTree) {\n  if ((0, types_1.isTapleaf)(scriptTree))\n    return { hash: tapleafHash(scriptTree) };\n  const hashes = [toHashTree(scriptTree[0]), toHashTree(scriptTree[1])];\n  hashes.sort((a, b) => a.hash.compare(b.hash));\n  const [left, right] = hashes;\n  return {\n    hash: tapBranchHash(left.hash, right.hash),\n    left,\n    right,\n  };\n}\nexports.toHashTree = toHashTree;\n/**\n * Given a HashTree, finds the path from a particular hash to the root.\n * @param node - the root of the tree\n * @param hash - the hash to search for\n * @returns - array of sibling hashes, from leaf (inclusive) to root\n * (exclusive) needed to prove inclusion of the specified hash. undefined if no\n * path is found\n */\nfunction findScriptPath(node, hash) {\n  if (isHashBranch(node)) {\n    const leftPath = findScriptPath(node.left, hash);\n    if (leftPath !== undefined) return [...leftPath, node.right.hash];\n    const rightPath = findScriptPath(node.right, hash);\n    if (rightPath !== undefined) return [...rightPath, node.left.hash];\n  } else if (node.hash.equals(hash)) {\n    return [];\n  }\n  return undefined;\n}\nexports.findScriptPath = findScriptPath;\nfunction tapleafHash(leaf) {\n  const version = leaf.version || exports.LEAF_VERSION_TAPSCRIPT;\n  return bcrypto.taggedHash(\n    'TapLeaf',\n    buffer_1.Buffer.concat([\n      buffer_1.Buffer.from([version]),\n      serializeScript(leaf.output),\n    ]),\n  );\n}\nexports.tapleafHash = tapleafHash;\nfunction tapTweakHash(pubKey, h) {\n  return bcrypto.taggedHash(\n    'TapTweak',\n    buffer_1.Buffer.concat(h ? [pubKey, h] : [pubKey]),\n  );\n}\nexports.tapTweakHash = tapTweakHash;\nfunction tweakKey(pubKey, h) {\n  if (!buffer_1.Buffer.isBuffer(pubKey)) return null;\n  if (pubKey.length !== 32) return null;\n  if (h && h.length !== 32) return null;\n  const tweakHash = tapTweakHash(pubKey, h);\n  const res = (0, ecc_lib_1.getEccLib)().xOnlyPointAddTweak(pubKey, tweakHash);\n  if (!res || res.xOnlyPubkey === null) return null;\n  return {\n    parity: res.parity,\n    x: buffer_1.Buffer.from(res.xOnlyPubkey),\n  };\n}\nexports.tweakKey = tweakKey;\nfunction tapBranchHash(a, b) {\n  return bcrypto.taggedHash('TapBranch', buffer_1.Buffer.concat([a, b]));\n}\nfunction serializeScript(s) {\n  const varintLen = bufferutils_1.varuint.encodingLength(s.length);\n  const buffer = buffer_1.Buffer.allocUnsafe(varintLen); // better\n  bufferutils_1.varuint.encode(s.length, buffer);\n  return buffer_1.Buffer.concat([buffer, s]);\n}\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.p2tr = void 0;\nconst buffer_1 = require('buffer');\nconst networks_1 = require('../networks');\nconst bscript = require('../script');\nconst types_1 = require('../types');\nconst ecc_lib_1 = require('../ecc_lib');\nconst bip341_1 = require('./bip341');\nconst lazy = require('./lazy');\nconst bech32_1 = require('bech32');\nconst address_1 = require('../address');\nconst OPS = bscript.OPS;\nconst TAPROOT_WITNESS_VERSION = 0x01;\nconst ANNEX_PREFIX = 0x50;\n/**\n * Creates a Pay-to-Taproot (P2TR) payment object.\n *\n * @param a - The payment object containing the necessary data for P2TR.\n * @param opts - Optional payment options.\n * @returns The P2TR payment object.\n * @throws {TypeError} If the provided data is invalid or insufficient.\n */\nfunction p2tr(a, opts) {\n  if (\n    !a.address &&\n    !a.output &&\n    !a.pubkey &&\n    !a.internalPubkey &&\n    !(a.witness && a.witness.length > 1)\n  )\n    throw new TypeError('Not enough data');\n  opts = Object.assign({ validate: true }, opts || {});\n  (0, types_1.typeforce)(\n    {\n      address: types_1.typeforce.maybe(types_1.typeforce.String),\n      input: types_1.typeforce.maybe(types_1.typeforce.BufferN(0)),\n      network: types_1.typeforce.maybe(types_1.typeforce.Object),\n      output: types_1.typeforce.maybe(types_1.typeforce.BufferN(34)),\n      internalPubkey: types_1.typeforce.maybe(types_1.typeforce.BufferN(32)),\n      hash: types_1.typeforce.maybe(types_1.typeforce.BufferN(32)),\n      pubkey: types_1.typeforce.maybe(types_1.typeforce.BufferN(32)),\n      signature: types_1.typeforce.maybe(\n        types_1.typeforce.anyOf(\n          types_1.typeforce.BufferN(64),\n          types_1.typeforce.BufferN(65),\n        ),\n      ),\n      witness: types_1.typeforce.maybe(\n        types_1.typeforce.arrayOf(types_1.typeforce.Buffer),\n      ),\n      scriptTree: types_1.typeforce.maybe(types_1.isTaptree),\n      redeem: types_1.typeforce.maybe({\n        output: types_1.typeforce.maybe(types_1.typeforce.Buffer),\n        redeemVersion: types_1.typeforce.maybe(types_1.typeforce.Number),\n        witness: types_1.typeforce.maybe(\n          types_1.typeforce.arrayOf(types_1.typeforce.Buffer),\n        ),\n      }),\n      redeemVersion: types_1.typeforce.maybe(types_1.typeforce.Number),\n    },\n    a,\n  );\n  const _address = lazy.value(() => {\n    return (0, address_1.fromBech32)(a.address);\n  });\n  // remove annex if present, ignored by taproot\n  const _witness = lazy.value(() => {\n    if (!a.witness || !a.witness.length) return;\n    if (\n      a.witness.length >= 2 &&\n      a.witness[a.witness.length - 1][0] === ANNEX_PREFIX\n    ) {\n      return a.witness.slice(0, -1);\n    }\n    return a.witness.slice();\n  });\n  const _hashTree = lazy.value(() => {\n    if (a.scriptTree) return (0, bip341_1.toHashTree)(a.scriptTree);\n    if (a.hash) return { hash: a.hash };\n    return;\n  });\n  const network = a.network || networks_1.bitcoin;\n  const o = { name: 'p2tr', network };\n  lazy.prop(o, 'address', () => {\n    if (!o.pubkey) return;\n    const words = bech32_1.bech32m.toWords(o.pubkey);\n    words.unshift(TAPROOT_WITNESS_VERSION);\n    return bech32_1.bech32m.encode(network.bech32, words);\n  });\n  lazy.prop(o, 'hash', () => {\n    const hashTree = _hashTree();\n    if (hashTree) return hashTree.hash;\n    const w = _witness();\n    if (w && w.length > 1) {\n      const controlBlock = w[w.length - 1];\n      const leafVersion = controlBlock[0] & types_1.TAPLEAF_VERSION_MASK;\n      const script = w[w.length - 2];\n      const leafHash = (0, bip341_1.tapleafHash)({\n        output: script,\n        version: leafVersion,\n      });\n      return (0, bip341_1.rootHashFromPath)(controlBlock, leafHash);\n    }\n    return null;\n  });\n  lazy.prop(o, 'output', () => {\n    if (!o.pubkey) return;\n    return bscript.compile([OPS.OP_1, o.pubkey]);\n  });\n  lazy.prop(o, 'redeemVersion', () => {\n    if (a.redeemVersion) return a.redeemVersion;\n    if (\n      a.redeem &&\n      a.redeem.redeemVersion !== undefined &&\n      a.redeem.redeemVersion !== null\n    ) {\n      return a.redeem.redeemVersion;\n    }\n    return bip341_1.LEAF_VERSION_TAPSCRIPT;\n  });\n  lazy.prop(o, 'redeem', () => {\n    const witness = _witness(); // witness without annex\n    if (!witness || witness.length < 2) return;\n    return {\n      output: witness[witness.length - 2],\n      witness: witness.slice(0, -2),\n      redeemVersion:\n        witness[witness.length - 1][0] & types_1.TAPLEAF_VERSION_MASK,\n    };\n  });\n  lazy.prop(o, 'pubkey', () => {\n    if (a.pubkey) return a.pubkey;\n    if (a.output) return a.output.slice(2);\n    if (a.address) return _address().data;\n    if (o.internalPubkey) {\n      const tweakedKey = (0, bip341_1.tweakKey)(o.internalPubkey, o.hash);\n      if (tweakedKey) return tweakedKey.x;\n    }\n  });\n  lazy.prop(o, 'internalPubkey', () => {\n    if (a.internalPubkey) return a.internalPubkey;\n    const witness = _witness();\n    if (witness && witness.length > 1)\n      return witness[witness.length - 1].slice(1, 33);\n  });\n  lazy.prop(o, 'signature', () => {\n    if (a.signature) return a.signature;\n    const witness = _witness(); // witness without annex\n    if (!witness || witness.length !== 1) return;\n    return witness[0];\n  });\n  lazy.prop(o, 'witness', () => {\n    if (a.witness) return a.witness;\n    const hashTree = _hashTree();\n    if (hashTree && a.redeem && a.redeem.output && a.internalPubkey) {\n      const leafHash = (0, bip341_1.tapleafHash)({\n        output: a.redeem.output,\n        version: o.redeemVersion,\n      });\n      const path = (0, bip341_1.findScriptPath)(hashTree, leafHash);\n      if (!path) return;\n      const outputKey = (0, bip341_1.tweakKey)(a.internalPubkey, hashTree.hash);\n      if (!outputKey) return;\n      const controlBock = buffer_1.Buffer.concat(\n        [\n          buffer_1.Buffer.from([o.redeemVersion | outputKey.parity]),\n          a.internalPubkey,\n        ].concat(path),\n      );\n      return [a.redeem.output, controlBock];\n    }\n    if (a.signature) return [a.signature];\n  });\n  // extended validation\n  if (opts.validate) {\n    let pubkey = buffer_1.Buffer.from([]);\n    if (a.address) {\n      if (network && network.bech32 !== _address().prefix)\n        throw new TypeError('Invalid prefix or Network mismatch');\n      if (_address().version !== TAPROOT_WITNESS_VERSION)\n        throw new TypeError('Invalid address version');\n      if (_address().data.length !== 32)\n        throw new TypeError('Invalid address data');\n      pubkey = _address().data;\n    }\n    if (a.pubkey) {\n      if (pubkey.length > 0 && !pubkey.equals(a.pubkey))\n        throw new TypeError('Pubkey mismatch');\n      else pubkey = a.pubkey;\n    }\n    if (a.output) {\n      if (\n        a.output.length !== 34 ||\n        a.output[0] !== OPS.OP_1 ||\n        a.output[1] !== 0x20\n      )\n        throw new TypeError('Output is invalid');\n      if (pubkey.length > 0 && !pubkey.equals(a.output.slice(2)))\n        throw new TypeError('Pubkey mismatch');\n      else pubkey = a.output.slice(2);\n    }\n    if (a.internalPubkey) {\n      const tweakedKey = (0, bip341_1.tweakKey)(a.internalPubkey, o.hash);\n      if (pubkey.length > 0 && !pubkey.equals(tweakedKey.x))\n        throw new TypeError('Pubkey mismatch');\n      else pubkey = tweakedKey.x;\n    }\n    if (pubkey && pubkey.length) {\n      if (!(0, ecc_lib_1.getEccLib)().isXOnlyPoint(pubkey))\n        throw new TypeError('Invalid pubkey for p2tr');\n    }\n    const hashTree = _hashTree();\n    if (a.hash && hashTree) {\n      if (!a.hash.equals(hashTree.hash)) throw new TypeError('Hash mismatch');\n    }\n    if (a.redeem && a.redeem.output && hashTree) {\n      const leafHash = (0, bip341_1.tapleafHash)({\n        output: a.redeem.output,\n        version: o.redeemVersion,\n      });\n      if (!(0, bip341_1.findScriptPath)(hashTree, leafHash))\n        throw new TypeError('Redeem script not in tree');\n    }\n    const witness = _witness();\n    // compare the provided redeem data with the one computed from witness\n    if (a.redeem && o.redeem) {\n      if (a.redeem.redeemVersion) {\n        if (a.redeem.redeemVersion !== o.redeem.redeemVersion)\n          throw new TypeError('Redeem.redeemVersion and witness mismatch');\n      }\n      if (a.redeem.output) {\n        if (bscript.decompile(a.redeem.output).length === 0)\n          throw new TypeError('Redeem.output is invalid');\n        // output redeem is constructed from the witness\n        if (o.redeem.output && !a.redeem.output.equals(o.redeem.output))\n          throw new TypeError('Redeem.output and witness mismatch');\n      }\n      if (a.redeem.witness) {\n        if (\n          o.redeem.witness &&\n          !(0, types_1.stacksEqual)(a.redeem.witness, o.redeem.witness)\n        )\n          throw new TypeError('Redeem.witness and witness mismatch');\n      }\n    }\n    if (witness && witness.length) {\n      if (witness.length === 1) {\n        // key spending\n        if (a.signature && !a.signature.equals(witness[0]))\n          throw new TypeError('Signature mismatch');\n      } else {\n        // script path spending\n        const controlBlock = witness[witness.length - 1];\n        if (controlBlock.length < 33)\n          throw new TypeError(\n            `The control-block length is too small. Got ${controlBlock.length}, expected min 33.`,\n          );\n        if ((controlBlock.length - 33) % 32 !== 0)\n          throw new TypeError(\n            `The control-block length of ${controlBlock.length} is incorrect!`,\n          );\n        const m = (controlBlock.length - 33) / 32;\n        if (m > 128)\n          throw new TypeError(\n            `The script path is too long. Got ${m}, expected max 128.`,\n          );\n        const internalPubkey = controlBlock.slice(1, 33);\n        if (a.internalPubkey && !a.internalPubkey.equals(internalPubkey))\n          throw new TypeError('Internal pubkey mismatch');\n        if (!(0, ecc_lib_1.getEccLib)().isXOnlyPoint(internalPubkey))\n          throw new TypeError('Invalid internalPubkey for p2tr witness');\n        const leafVersion = controlBlock[0] & types_1.TAPLEAF_VERSION_MASK;\n        const script = witness[witness.length - 2];\n        const leafHash = (0, bip341_1.tapleafHash)({\n          output: script,\n          version: leafVersion,\n        });\n        const hash = (0, bip341_1.rootHashFromPath)(controlBlock, leafHash);\n        const outputKey = (0, bip341_1.tweakKey)(internalPubkey, hash);\n        if (!outputKey)\n          // todo: needs test data\n          throw new TypeError('Invalid outputKey for p2tr witness');\n        if (pubkey.length && !pubkey.equals(outputKey.x))\n          throw new TypeError('Pubkey mismatch for p2tr witness');\n        if (outputKey.parity !== (controlBlock[0] & 1))\n          throw new Error('Incorrect parity');\n      }\n    }\n  }\n  return Object.assign(o, a);\n}\nexports.p2tr = p2tr;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.p2tr =\n  exports.p2wsh =\n  exports.p2wpkh =\n  exports.p2sh =\n  exports.p2pkh =\n  exports.p2pk =\n  exports.p2ms =\n  exports.embed =\n    void 0;\nconst embed_1 = require('./embed');\nObject.defineProperty(exports, 'embed', {\n  enumerable: true,\n  get: function () {\n    return embed_1.p2data;\n  },\n});\nconst p2ms_1 = require('./p2ms');\nObject.defineProperty(exports, 'p2ms', {\n  enumerable: true,\n  get: function () {\n    return p2ms_1.p2ms;\n  },\n});\nconst p2pk_1 = require('./p2pk');\nObject.defineProperty(exports, 'p2pk', {\n  enumerable: true,\n  get: function () {\n    return p2pk_1.p2pk;\n  },\n});\nconst p2pkh_1 = require('./p2pkh');\nObject.defineProperty(exports, 'p2pkh', {\n  enumerable: true,\n  get: function () {\n    return p2pkh_1.p2pkh;\n  },\n});\nconst p2sh_1 = require('./p2sh');\nObject.defineProperty(exports, 'p2sh', {\n  enumerable: true,\n  get: function () {\n    return p2sh_1.p2sh;\n  },\n});\nconst p2wpkh_1 = require('./p2wpkh');\nObject.defineProperty(exports, 'p2wpkh', {\n  enumerable: true,\n  get: function () {\n    return p2wpkh_1.p2wpkh;\n  },\n});\nconst p2wsh_1 = require('./p2wsh');\nObject.defineProperty(exports, 'p2wsh', {\n  enumerable: true,\n  get: function () {\n    return p2wsh_1.p2wsh;\n  },\n});\nconst p2tr_1 = require('./p2tr');\nObject.defineProperty(exports, 'p2tr', {\n  enumerable: true,\n  get: function () {\n    return p2tr_1.p2tr;\n  },\n});\n// TODO\n// witness commitment\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.toOutputScript =\n  exports.fromOutputScript =\n  exports.toBech32 =\n  exports.toBase58Check =\n  exports.fromBech32 =\n  exports.fromBase58Check =\n    void 0;\nconst networks = require('./networks');\nconst payments = require('./payments');\nconst bscript = require('./script');\nconst types_1 = require('./types');\nconst bech32_1 = require('bech32');\nconst bs58check = require('bs58check');\nconst FUTURE_SEGWIT_MAX_SIZE = 40;\nconst FUTURE_SEGWIT_MIN_SIZE = 2;\nconst FUTURE_SEGWIT_MAX_VERSION = 16;\nconst FUTURE_SEGWIT_MIN_VERSION = 2;\nconst FUTURE_SEGWIT_VERSION_DIFF = 0x50;\nconst FUTURE_SEGWIT_VERSION_WARNING =\n  'WARNING: Sending to a future segwit version address can lead to loss of funds. ' +\n  'End users MUST be warned carefully in the GUI and asked if they wish to proceed ' +\n  'with caution. Wallets should verify the segwit version from the output of fromBech32, ' +\n  'then decide when it is safe to use which version of segwit.';\nfunction _toFutureSegwitAddress(output, network) {\n  const data = output.slice(2);\n  if (\n    data.length < FUTURE_SEGWIT_MIN_SIZE ||\n    data.length > FUTURE_SEGWIT_MAX_SIZE\n  )\n    throw new TypeError('Invalid program length for segwit address');\n  const version = output[0] - FUTURE_SEGWIT_VERSION_DIFF;\n  if (\n    version < FUTURE_SEGWIT_MIN_VERSION ||\n    version > FUTURE_SEGWIT_MAX_VERSION\n  )\n    throw new TypeError('Invalid version for segwit address');\n  if (output[1] !== data.length)\n    throw new TypeError('Invalid script for segwit address');\n  console.warn(FUTURE_SEGWIT_VERSION_WARNING);\n  return toBech32(data, version, network.bech32);\n}\n/**\n * decode address with base58 specification,  return address version and address hash if valid\n */\nfunction fromBase58Check(address) {\n  const payload = Buffer.from(bs58check.decode(address));\n  // TODO: 4.0.0, move to \"toOutputScript\"\n  if (payload.length < 21) throw new TypeError(address + ' is too short');\n  if (payload.length > 21) throw new TypeError(address + ' is too long');\n  const version = payload.readUInt8(0);\n  const hash = payload.slice(1);\n  return { version, hash };\n}\nexports.fromBase58Check = fromBase58Check;\n/**\n * decode address with bech32 specification,  return address version、address prefix and address data if valid\n */\nfunction fromBech32(address) {\n  let result;\n  let version;\n  try {\n    result = bech32_1.bech32.decode(address);\n  } catch (e) {}\n  if (result) {\n    version = result.words[0];\n    if (version !== 0) throw new TypeError(address + ' uses wrong encoding');\n  } else {\n    result = bech32_1.bech32m.decode(address);\n    version = result.words[0];\n    if (version === 0) throw new TypeError(address + ' uses wrong encoding');\n  }\n  const data = bech32_1.bech32.fromWords(result.words.slice(1));\n  return {\n    version,\n    prefix: result.prefix,\n    data: Buffer.from(data),\n  };\n}\nexports.fromBech32 = fromBech32;\n/**\n * encode address hash to base58 address with version\n */\nfunction toBase58Check(hash, version) {\n  (0, types_1.typeforce)(\n    (0, types_1.tuple)(types_1.Hash160bit, types_1.UInt8),\n    arguments,\n  );\n  const payload = Buffer.allocUnsafe(21);\n  payload.writeUInt8(version, 0);\n  hash.copy(payload, 1);\n  return bs58check.encode(payload);\n}\nexports.toBase58Check = toBase58Check;\n/**\n * encode address hash to bech32 address with version and prefix\n */\nfunction toBech32(data, version, prefix) {\n  const words = bech32_1.bech32.toWords(data);\n  words.unshift(version);\n  return version === 0\n    ? bech32_1.bech32.encode(prefix, words)\n    : bech32_1.bech32m.encode(prefix, words);\n}\nexports.toBech32 = toBech32;\n/**\n * decode address from output script with network, return address if matched\n */\nfunction fromOutputScript(output, network) {\n  // TODO: Network\n  network = network || networks.bitcoin;\n  try {\n    return payments.p2pkh({ output, network }).address;\n  } catch (e) {}\n  try {\n    return payments.p2sh({ output, network }).address;\n  } catch (e) {}\n  try {\n    return payments.p2wpkh({ output, network }).address;\n  } catch (e) {}\n  try {\n    return payments.p2wsh({ output, network }).address;\n  } catch (e) {}\n  try {\n    return payments.p2tr({ output, network }).address;\n  } catch (e) {}\n  try {\n    return _toFutureSegwitAddress(output, network);\n  } catch (e) {}\n  throw new Error(bscript.toASM(output) + ' has no matching Address');\n}\nexports.fromOutputScript = fromOutputScript;\n/**\n * encodes address to output script with network, return output script if address matched\n */\nfunction toOutputScript(address, network) {\n  network = network || networks.bitcoin;\n  let decodeBase58;\n  let decodeBech32;\n  try {\n    decodeBase58 = fromBase58Check(address);\n  } catch (e) {}\n  if (decodeBase58) {\n    if (decodeBase58.version === network.pubKeyHash)\n      return payments.p2pkh({ hash: decodeBase58.hash }).output;\n    if (decodeBase58.version === network.scriptHash)\n      return payments.p2sh({ hash: decodeBase58.hash }).output;\n  } else {\n    try {\n      decodeBech32 = fromBech32(address);\n    } catch (e) {}\n    if (decodeBech32) {\n      if (decodeBech32.prefix !== network.bech32)\n        throw new Error(address + ' has an invalid prefix');\n      if (decodeBech32.version === 0) {\n        if (decodeBech32.data.length === 20)\n          return payments.p2wpkh({ hash: decodeBech32.data }).output;\n        if (decodeBech32.data.length === 32)\n          return payments.p2wsh({ hash: decodeBech32.data }).output;\n      } else if (decodeBech32.version === 1) {\n        if (decodeBech32.data.length === 32)\n          return payments.p2tr({ pubkey: decodeBech32.data }).output;\n      } else if (\n        decodeBech32.version >= FUTURE_SEGWIT_MIN_VERSION &&\n        decodeBech32.version <= FUTURE_SEGWIT_MAX_VERSION &&\n        decodeBech32.data.length >= FUTURE_SEGWIT_MIN_SIZE &&\n        decodeBech32.data.length <= FUTURE_SEGWIT_MAX_SIZE\n      ) {\n        console.warn(FUTURE_SEGWIT_VERSION_WARNING);\n        return bscript.compile([\n          decodeBech32.version + FUTURE_SEGWIT_VERSION_DIFF,\n          decodeBech32.data,\n        ]);\n      }\n    }\n  }\n  throw new Error(address + ' has no matching Script');\n}\nexports.toOutputScript = toOutputScript;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.fastMerkleRoot = void 0;\n/**\n * Calculates the Merkle root of an array of buffers using a specified digest function.\n *\n * @param values - The array of buffers.\n * @param digestFn - The digest function used to calculate the hash of the concatenated buffers.\n * @returns The Merkle root as a buffer.\n * @throws {TypeError} If the values parameter is not an array or the digestFn parameter is not a function.\n */\nfunction fastMerkleRoot(values, digestFn) {\n  if (!Array.isArray(values)) throw TypeError('Expected values Array');\n  if (typeof digestFn !== 'function')\n    throw TypeError('Expected digest Function');\n  let length = values.length;\n  const results = values.concat();\n  while (length > 1) {\n    let j = 0;\n    for (let i = 0; i < length; i += 2, ++j) {\n      const left = results[i];\n      const right = i + 1 === length ? left : results[i + 1];\n      const data = Buffer.concat([left, right]);\n      results[j] = digestFn(data);\n    }\n    length = j;\n  }\n  return results[0];\n}\nexports.fastMerkleRoot = fastMerkleRoot;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.Transaction = void 0;\nconst bufferutils_1 = require('./bufferutils');\nconst bcrypto = require('./crypto');\nconst bscript = require('./script');\nconst script_1 = require('./script');\nconst types = require('./types');\nconst { typeforce } = types;\nfunction varSliceSize(someScript) {\n  const length = someScript.length;\n  return bufferutils_1.varuint.encodingLength(length) + length;\n}\nfunction vectorSize(someVector) {\n  const length = someVector.length;\n  return (\n    bufferutils_1.varuint.encodingLength(length) +\n    someVector.reduce((sum, witness) => {\n      return sum + varSliceSize(witness);\n    }, 0)\n  );\n}\nconst EMPTY_BUFFER = Buffer.allocUnsafe(0);\nconst EMPTY_WITNESS = [];\nconst ZERO = Buffer.from(\n  '0000000000000000000000000000000000000000000000000000000000000000',\n  'hex',\n);\nconst ONE = Buffer.from(\n  '0000000000000000000000000000000000000000000000000000000000000001',\n  'hex',\n);\nconst VALUE_UINT64_MAX = Buffer.from('ffffffffffffffff', 'hex');\nconst BLANK_OUTPUT = {\n  script: EMPTY_BUFFER,\n  valueBuffer: VALUE_UINT64_MAX,\n};\nfunction isOutput(out) {\n  return out.value !== undefined;\n}\n/**\n * Represents a Bitcoin transaction.\n */\nclass Transaction {\n  constructor() {\n    this.version = 1;\n    this.locktime = 0;\n    this.ins = [];\n    this.outs = [];\n  }\n  static fromBuffer(buffer, _NO_STRICT) {\n    const bufferReader = new bufferutils_1.BufferReader(buffer);\n    const tx = new Transaction();\n    tx.version = bufferReader.readInt32();\n    const marker = bufferReader.readUInt8();\n    const flag = bufferReader.readUInt8();\n    let hasWitnesses = false;\n    if (\n      marker === Transaction.ADVANCED_TRANSACTION_MARKER &&\n      flag === Transaction.ADVANCED_TRANSACTION_FLAG\n    ) {\n      hasWitnesses = true;\n    } else {\n      bufferReader.offset -= 2;\n    }\n    const vinLen = bufferReader.readVarInt();\n    for (let i = 0; i < vinLen; ++i) {\n      tx.ins.push({\n        hash: bufferReader.readSlice(32),\n        index: bufferReader.readUInt32(),\n        script: bufferReader.readVarSlice(),\n        sequence: bufferReader.readUInt32(),\n        witness: EMPTY_WITNESS,\n      });\n    }\n    const voutLen = bufferReader.readVarInt();\n    for (let i = 0; i < voutLen; ++i) {\n      tx.outs.push({\n        value: bufferReader.readUInt64(),\n        script: bufferReader.readVarSlice(),\n      });\n    }\n    if (hasWitnesses) {\n      for (let i = 0; i < vinLen; ++i) {\n        tx.ins[i].witness = bufferReader.readVector();\n      }\n      // was this pointless?\n      if (!tx.hasWitnesses())\n        throw new Error('Transaction has superfluous witness data');\n    }\n    tx.locktime = bufferReader.readUInt32();\n    if (_NO_STRICT) return tx;\n    if (bufferReader.offset !== buffer.length)\n      throw new Error('Transaction has unexpected data');\n    return tx;\n  }\n  static fromHex(hex) {\n    return Transaction.fromBuffer(Buffer.from(hex, 'hex'), false);\n  }\n  static isCoinbaseHash(buffer) {\n    typeforce(types.Hash256bit, buffer);\n    for (let i = 0; i < 32; ++i) {\n      if (buffer[i] !== 0) return false;\n    }\n    return true;\n  }\n  isCoinbase() {\n    return (\n      this.ins.length === 1 && Transaction.isCoinbaseHash(this.ins[0].hash)\n    );\n  }\n  addInput(hash, index, sequence, scriptSig) {\n    typeforce(\n      types.tuple(\n        types.Hash256bit,\n        types.UInt32,\n        types.maybe(types.UInt32),\n        types.maybe(types.Buffer),\n      ),\n      arguments,\n    );\n    if (types.Null(sequence)) {\n      sequence = Transaction.DEFAULT_SEQUENCE;\n    }\n    // Add the input and return the input's index\n    return (\n      this.ins.push({\n        hash,\n        index,\n        script: scriptSig || EMPTY_BUFFER,\n        sequence: sequence,\n        witness: EMPTY_WITNESS,\n      }) - 1\n    );\n  }\n  addOutput(scriptPubKey, value) {\n    typeforce(types.tuple(types.Buffer, types.Satoshi), arguments);\n    // Add the output and return the output's index\n    return (\n      this.outs.push({\n        script: scriptPubKey,\n        value,\n      }) - 1\n    );\n  }\n  hasWitnesses() {\n    return this.ins.some(x => {\n      return x.witness.length !== 0;\n    });\n  }\n  stripWitnesses() {\n    this.ins.forEach(input => {\n      input.witness = EMPTY_WITNESS; // Set witness data to an empty array\n    });\n  }\n  weight() {\n    const base = this.byteLength(false);\n    const total = this.byteLength(true);\n    return base * 3 + total;\n  }\n  virtualSize() {\n    return Math.ceil(this.weight() / 4);\n  }\n  byteLength(_ALLOW_WITNESS = true) {\n    const hasWitnesses = _ALLOW_WITNESS && this.hasWitnesses();\n    return (\n      (hasWitnesses ? 10 : 8) +\n      bufferutils_1.varuint.encodingLength(this.ins.length) +\n      bufferutils_1.varuint.encodingLength(this.outs.length) +\n      this.ins.reduce((sum, input) => {\n        return sum + 40 + varSliceSize(input.script);\n      }, 0) +\n      this.outs.reduce((sum, output) => {\n        return sum + 8 + varSliceSize(output.script);\n      }, 0) +\n      (hasWitnesses\n        ? this.ins.reduce((sum, input) => {\n            return sum + vectorSize(input.witness);\n          }, 0)\n        : 0)\n    );\n  }\n  clone() {\n    const newTx = new Transaction();\n    newTx.version = this.version;\n    newTx.locktime = this.locktime;\n    newTx.ins = this.ins.map(txIn => {\n      return {\n        hash: txIn.hash,\n        index: txIn.index,\n        script: txIn.script,\n        sequence: txIn.sequence,\n        witness: txIn.witness,\n      };\n    });\n    newTx.outs = this.outs.map(txOut => {\n      return {\n        script: txOut.script,\n        value: txOut.value,\n      };\n    });\n    return newTx;\n  }\n  /**\n   * Hash transaction for signing a specific input.\n   *\n   * Bitcoin uses a different hash for each signed transaction input.\n   * This method copies the transaction, makes the necessary changes based on the\n   * hashType, and then hashes the result.\n   * This hash can then be used to sign the provided transaction input.\n   */\n  hashForSignature(inIndex, prevOutScript, hashType) {\n    typeforce(\n      types.tuple(types.UInt32, types.Buffer, /* types.UInt8 */ types.Number),\n      arguments,\n    );\n    // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L29\n    if (inIndex >= this.ins.length) return ONE;\n    // ignore OP_CODESEPARATOR\n    const ourScript = bscript.compile(\n      bscript.decompile(prevOutScript).filter(x => {\n        return x !== script_1.OPS.OP_CODESEPARATOR;\n      }),\n    );\n    const txTmp = this.clone();\n    // SIGHASH_NONE: ignore all outputs? (wildcard payee)\n    if ((hashType & 0x1f) === Transaction.SIGHASH_NONE) {\n      txTmp.outs = [];\n      // ignore sequence numbers (except at inIndex)\n      txTmp.ins.forEach((input, i) => {\n        if (i === inIndex) return;\n        input.sequence = 0;\n      });\n      // SIGHASH_SINGLE: ignore all outputs, except at the same index?\n    } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE) {\n      // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L60\n      if (inIndex >= this.outs.length) return ONE;\n      // truncate outputs after\n      txTmp.outs.length = inIndex + 1;\n      // \"blank\" outputs before\n      for (let i = 0; i < inIndex; i++) {\n        txTmp.outs[i] = BLANK_OUTPUT;\n      }\n      // ignore sequence numbers (except at inIndex)\n      txTmp.ins.forEach((input, y) => {\n        if (y === inIndex) return;\n        input.sequence = 0;\n      });\n    }\n    // SIGHASH_ANYONECANPAY: ignore inputs entirely?\n    if (hashType & Transaction.SIGHASH_ANYONECANPAY) {\n      txTmp.ins = [txTmp.ins[inIndex]];\n      txTmp.ins[0].script = ourScript;\n      // SIGHASH_ALL: only ignore input scripts\n    } else {\n      // \"blank\" others input scripts\n      txTmp.ins.forEach(input => {\n        input.script = EMPTY_BUFFER;\n      });\n      txTmp.ins[inIndex].script = ourScript;\n    }\n    // serialize and hash\n    const buffer = Buffer.allocUnsafe(txTmp.byteLength(false) + 4);\n    buffer.writeInt32LE(hashType, buffer.length - 4);\n    txTmp.__toBuffer(buffer, 0, false);\n    return bcrypto.hash256(buffer);\n  }\n  hashForWitnessV1(inIndex, prevOutScripts, values, hashType, leafHash, annex) {\n    // https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#common-signature-message\n    typeforce(\n      types.tuple(\n        types.UInt32,\n        typeforce.arrayOf(types.Buffer),\n        typeforce.arrayOf(types.Satoshi),\n        types.UInt32,\n      ),\n      arguments,\n    );\n    if (\n      values.length !== this.ins.length ||\n      prevOutScripts.length !== this.ins.length\n    ) {\n      throw new Error('Must supply prevout script and value for all inputs');\n    }\n    const outputType =\n      hashType === Transaction.SIGHASH_DEFAULT\n        ? Transaction.SIGHASH_ALL\n        : hashType & Transaction.SIGHASH_OUTPUT_MASK;\n    const inputType = hashType & Transaction.SIGHASH_INPUT_MASK;\n    const isAnyoneCanPay = inputType === Transaction.SIGHASH_ANYONECANPAY;\n    const isNone = outputType === Transaction.SIGHASH_NONE;\n    const isSingle = outputType === Transaction.SIGHASH_SINGLE;\n    let hashPrevouts = EMPTY_BUFFER;\n    let hashAmounts = EMPTY_BUFFER;\n    let hashScriptPubKeys = EMPTY_BUFFER;\n    let hashSequences = EMPTY_BUFFER;\n    let hashOutputs = EMPTY_BUFFER;\n    if (!isAnyoneCanPay) {\n      let bufferWriter = bufferutils_1.BufferWriter.withCapacity(\n        36 * this.ins.length,\n      );\n      this.ins.forEach(txIn => {\n        bufferWriter.writeSlice(txIn.hash);\n        bufferWriter.writeUInt32(txIn.index);\n      });\n      hashPrevouts = bcrypto.sha256(bufferWriter.end());\n      bufferWriter = bufferutils_1.BufferWriter.withCapacity(\n        8 * this.ins.length,\n      );\n      values.forEach(value => bufferWriter.writeUInt64(value));\n      hashAmounts = bcrypto.sha256(bufferWriter.end());\n      bufferWriter = bufferutils_1.BufferWriter.withCapacity(\n        prevOutScripts.map(varSliceSize).reduce((a, b) => a + b),\n      );\n      prevOutScripts.forEach(prevOutScript =>\n        bufferWriter.writeVarSlice(prevOutScript),\n      );\n      hashScriptPubKeys = bcrypto.sha256(bufferWriter.end());\n      bufferWriter = bufferutils_1.BufferWriter.withCapacity(\n        4 * this.ins.length,\n      );\n      this.ins.forEach(txIn => bufferWriter.writeUInt32(txIn.sequence));\n      hashSequences = bcrypto.sha256(bufferWriter.end());\n    }\n    if (!(isNone || isSingle)) {\n      const txOutsSize = this.outs\n        .map(output => 8 + varSliceSize(output.script))\n        .reduce((a, b) => a + b);\n      const bufferWriter = bufferutils_1.BufferWriter.withCapacity(txOutsSize);\n      this.outs.forEach(out => {\n        bufferWriter.writeUInt64(out.value);\n        bufferWriter.writeVarSlice(out.script);\n      });\n      hashOutputs = bcrypto.sha256(bufferWriter.end());\n    } else if (isSingle && inIndex < this.outs.length) {\n      const output = this.outs[inIndex];\n      const bufferWriter = bufferutils_1.BufferWriter.withCapacity(\n        8 + varSliceSize(output.script),\n      );\n      bufferWriter.writeUInt64(output.value);\n      bufferWriter.writeVarSlice(output.script);\n      hashOutputs = bcrypto.sha256(bufferWriter.end());\n    }\n    const spendType = (leafHash ? 2 : 0) + (annex ? 1 : 0);\n    // Length calculation from:\n    // https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#cite_note-14\n    // With extension from:\n    // https://github.com/bitcoin/bips/blob/master/bip-0342.mediawiki#signature-validation\n    const sigMsgSize =\n      174 -\n      (isAnyoneCanPay ? 49 : 0) -\n      (isNone ? 32 : 0) +\n      (annex ? 32 : 0) +\n      (leafHash ? 37 : 0);\n    const sigMsgWriter = bufferutils_1.BufferWriter.withCapacity(sigMsgSize);\n    sigMsgWriter.writeUInt8(hashType);\n    // Transaction\n    sigMsgWriter.writeInt32(this.version);\n    sigMsgWriter.writeUInt32(this.locktime);\n    sigMsgWriter.writeSlice(hashPrevouts);\n    sigMsgWriter.writeSlice(hashAmounts);\n    sigMsgWriter.writeSlice(hashScriptPubKeys);\n    sigMsgWriter.writeSlice(hashSequences);\n    if (!(isNone || isSingle)) {\n      sigMsgWriter.writeSlice(hashOutputs);\n    }\n    // Input\n    sigMsgWriter.writeUInt8(spendType);\n    if (isAnyoneCanPay) {\n      const input = this.ins[inIndex];\n      sigMsgWriter.writeSlice(input.hash);\n      sigMsgWriter.writeUInt32(input.index);\n      sigMsgWriter.writeUInt64(values[inIndex]);\n      sigMsgWriter.writeVarSlice(prevOutScripts[inIndex]);\n      sigMsgWriter.writeUInt32(input.sequence);\n    } else {\n      sigMsgWriter.writeUInt32(inIndex);\n    }\n    if (annex) {\n      const bufferWriter = bufferutils_1.BufferWriter.withCapacity(\n        varSliceSize(annex),\n      );\n      bufferWriter.writeVarSlice(annex);\n      sigMsgWriter.writeSlice(bcrypto.sha256(bufferWriter.end()));\n    }\n    // Output\n    if (isSingle) {\n      sigMsgWriter.writeSlice(hashOutputs);\n    }\n    // BIP342 extension\n    if (leafHash) {\n      sigMsgWriter.writeSlice(leafHash);\n      sigMsgWriter.writeUInt8(0);\n      sigMsgWriter.writeUInt32(0xffffffff);\n    }\n    // Extra zero byte because:\n    // https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#cite_note-19\n    return bcrypto.taggedHash(\n      'TapSighash',\n      Buffer.concat([Buffer.from([0x00]), sigMsgWriter.end()]),\n    );\n  }\n  hashForWitnessV0(inIndex, prevOutScript, value, hashType) {\n    typeforce(\n      types.tuple(types.UInt32, types.Buffer, types.Satoshi, types.UInt32),\n      arguments,\n    );\n    let tbuffer = Buffer.from([]);\n    let bufferWriter;\n    let hashOutputs = ZERO;\n    let hashPrevouts = ZERO;\n    let hashSequence = ZERO;\n    if (!(hashType & Transaction.SIGHASH_ANYONECANPAY)) {\n      tbuffer = Buffer.allocUnsafe(36 * this.ins.length);\n      bufferWriter = new bufferutils_1.BufferWriter(tbuffer, 0);\n      this.ins.forEach(txIn => {\n        bufferWriter.writeSlice(txIn.hash);\n        bufferWriter.writeUInt32(txIn.index);\n      });\n      hashPrevouts = bcrypto.hash256(tbuffer);\n    }\n    if (\n      !(hashType & Transaction.SIGHASH_ANYONECANPAY) &&\n      (hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&\n      (hashType & 0x1f) !== Transaction.SIGHASH_NONE\n    ) {\n      tbuffer = Buffer.allocUnsafe(4 * this.ins.length);\n      bufferWriter = new bufferutils_1.BufferWriter(tbuffer, 0);\n      this.ins.forEach(txIn => {\n        bufferWriter.writeUInt32(txIn.sequence);\n      });\n      hashSequence = bcrypto.hash256(tbuffer);\n    }\n    if (\n      (hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&\n      (hashType & 0x1f) !== Transaction.SIGHASH_NONE\n    ) {\n      const txOutsSize = this.outs.reduce((sum, output) => {\n        return sum + 8 + varSliceSize(output.script);\n      }, 0);\n      tbuffer = Buffer.allocUnsafe(txOutsSize);\n      bufferWriter = new bufferutils_1.BufferWriter(tbuffer, 0);\n      this.outs.forEach(out => {\n        bufferWriter.writeUInt64(out.value);\n        bufferWriter.writeVarSlice(out.script);\n      });\n      hashOutputs = bcrypto.hash256(tbuffer);\n    } else if (\n      (hashType & 0x1f) === Transaction.SIGHASH_SINGLE &&\n      inIndex < this.outs.length\n    ) {\n      const output = this.outs[inIndex];\n      tbuffer = Buffer.allocUnsafe(8 + varSliceSize(output.script));\n      bufferWriter = new bufferutils_1.BufferWriter(tbuffer, 0);\n      bufferWriter.writeUInt64(output.value);\n      bufferWriter.writeVarSlice(output.script);\n      hashOutputs = bcrypto.hash256(tbuffer);\n    }\n    tbuffer = Buffer.allocUnsafe(156 + varSliceSize(prevOutScript));\n    bufferWriter = new bufferutils_1.BufferWriter(tbuffer, 0);\n    const input = this.ins[inIndex];\n    bufferWriter.writeInt32(this.version);\n    bufferWriter.writeSlice(hashPrevouts);\n    bufferWriter.writeSlice(hashSequence);\n    bufferWriter.writeSlice(input.hash);\n    bufferWriter.writeUInt32(input.index);\n    bufferWriter.writeVarSlice(prevOutScript);\n    bufferWriter.writeUInt64(value);\n    bufferWriter.writeUInt32(input.sequence);\n    bufferWriter.writeSlice(hashOutputs);\n    bufferWriter.writeUInt32(this.locktime);\n    bufferWriter.writeUInt32(hashType);\n    return bcrypto.hash256(tbuffer);\n  }\n  getHash(forWitness) {\n    // wtxid for coinbase is always 32 bytes of 0x00\n    if (forWitness && this.isCoinbase()) return Buffer.alloc(32, 0);\n    return bcrypto.hash256(this.__toBuffer(undefined, undefined, forWitness));\n  }\n  getId() {\n    // transaction hash's are displayed in reverse order\n    return (0, bufferutils_1.reverseBuffer)(this.getHash(false)).toString(\n      'hex',\n    );\n  }\n  toBuffer(buffer, initialOffset) {\n    return this.__toBuffer(buffer, initialOffset, true);\n  }\n  toHex() {\n    return this.toBuffer(undefined, undefined).toString('hex');\n  }\n  setInputScript(index, scriptSig) {\n    typeforce(types.tuple(types.Number, types.Buffer), arguments);\n    this.ins[index].script = scriptSig;\n  }\n  setWitness(index, witness) {\n    typeforce(types.tuple(types.Number, [types.Buffer]), arguments);\n    this.ins[index].witness = witness;\n  }\n  __toBuffer(buffer, initialOffset, _ALLOW_WITNESS = false) {\n    if (!buffer) buffer = Buffer.allocUnsafe(this.byteLength(_ALLOW_WITNESS));\n    const bufferWriter = new bufferutils_1.BufferWriter(\n      buffer,\n      initialOffset || 0,\n    );\n    bufferWriter.writeInt32(this.version);\n    const hasWitnesses = _ALLOW_WITNESS && this.hasWitnesses();\n    if (hasWitnesses) {\n      bufferWriter.writeUInt8(Transaction.ADVANCED_TRANSACTION_MARKER);\n      bufferWriter.writeUInt8(Transaction.ADVANCED_TRANSACTION_FLAG);\n    }\n    bufferWriter.writeVarInt(this.ins.length);\n    this.ins.forEach(txIn => {\n      bufferWriter.writeSlice(txIn.hash);\n      bufferWriter.writeUInt32(txIn.index);\n      bufferWriter.writeVarSlice(txIn.script);\n      bufferWriter.writeUInt32(txIn.sequence);\n    });\n    bufferWriter.writeVarInt(this.outs.length);\n    this.outs.forEach(txOut => {\n      if (isOutput(txOut)) {\n        bufferWriter.writeUInt64(txOut.value);\n      } else {\n        bufferWriter.writeSlice(txOut.valueBuffer);\n      }\n      bufferWriter.writeVarSlice(txOut.script);\n    });\n    if (hasWitnesses) {\n      this.ins.forEach(input => {\n        bufferWriter.writeVector(input.witness);\n      });\n    }\n    bufferWriter.writeUInt32(this.locktime);\n    // avoid slicing unless necessary\n    if (initialOffset !== undefined)\n      return buffer.slice(initialOffset, bufferWriter.offset);\n    return buffer;\n  }\n}\nexports.Transaction = Transaction;\nTransaction.DEFAULT_SEQUENCE = 0xffffffff;\nTransaction.SIGHASH_DEFAULT = 0x00;\nTransaction.SIGHASH_ALL = 0x01;\nTransaction.SIGHASH_NONE = 0x02;\nTransaction.SIGHASH_SINGLE = 0x03;\nTransaction.SIGHASH_ANYONECANPAY = 0x80;\nTransaction.SIGHASH_OUTPUT_MASK = 0x03;\nTransaction.SIGHASH_INPUT_MASK = 0x80;\nTransaction.ADVANCED_TRANSACTION_MARKER = 0x00;\nTransaction.ADVANCED_TRANSACTION_FLAG = 0x01;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.Block = void 0;\nconst bufferutils_1 = require('./bufferutils');\nconst bcrypto = require('./crypto');\nconst merkle_1 = require('./merkle');\nconst transaction_1 = require('./transaction');\nconst types = require('./types');\nconst { typeforce } = types;\nconst errorMerkleNoTxes = new TypeError(\n  'Cannot compute merkle root for zero transactions',\n);\nconst errorWitnessNotSegwit = new TypeError(\n  'Cannot compute witness commit for non-segwit block',\n);\nclass Block {\n  constructor() {\n    this.version = 1;\n    this.prevHash = undefined;\n    this.merkleRoot = undefined;\n    this.timestamp = 0;\n    this.witnessCommit = undefined;\n    this.bits = 0;\n    this.nonce = 0;\n    this.transactions = undefined;\n  }\n  static fromBuffer(buffer) {\n    if (buffer.length < 80) throw new Error('Buffer too small (< 80 bytes)');\n    const bufferReader = new bufferutils_1.BufferReader(buffer);\n    const block = new Block();\n    block.version = bufferReader.readInt32();\n    block.prevHash = bufferReader.readSlice(32);\n    block.merkleRoot = bufferReader.readSlice(32);\n    block.timestamp = bufferReader.readUInt32();\n    block.bits = bufferReader.readUInt32();\n    block.nonce = bufferReader.readUInt32();\n    if (buffer.length === 80) return block;\n    const readTransaction = () => {\n      const tx = transaction_1.Transaction.fromBuffer(\n        bufferReader.buffer.slice(bufferReader.offset),\n        true,\n      );\n      bufferReader.offset += tx.byteLength();\n      return tx;\n    };\n    const nTransactions = bufferReader.readVarInt();\n    block.transactions = [];\n    for (let i = 0; i < nTransactions; ++i) {\n      const tx = readTransaction();\n      block.transactions.push(tx);\n    }\n    const witnessCommit = block.getWitnessCommit();\n    // This Block contains a witness commit\n    if (witnessCommit) block.witnessCommit = witnessCommit;\n    return block;\n  }\n  static fromHex(hex) {\n    return Block.fromBuffer(Buffer.from(hex, 'hex'));\n  }\n  static calculateTarget(bits) {\n    const exponent = ((bits & 0xff000000) >> 24) - 3;\n    const mantissa = bits & 0x007fffff;\n    const target = Buffer.alloc(32, 0);\n    target.writeUIntBE(mantissa, 29 - exponent, 3);\n    return target;\n  }\n  static calculateMerkleRoot(transactions, forWitness) {\n    typeforce([{ getHash: types.Function }], transactions);\n    if (transactions.length === 0) throw errorMerkleNoTxes;\n    if (forWitness && !txesHaveWitnessCommit(transactions))\n      throw errorWitnessNotSegwit;\n    const hashes = transactions.map(transaction =>\n      transaction.getHash(forWitness),\n    );\n    const rootHash = (0, merkle_1.fastMerkleRoot)(hashes, bcrypto.hash256);\n    return forWitness\n      ? bcrypto.hash256(\n          Buffer.concat([rootHash, transactions[0].ins[0].witness[0]]),\n        )\n      : rootHash;\n  }\n  getWitnessCommit() {\n    if (!txesHaveWitnessCommit(this.transactions)) return null;\n    // The merkle root for the witness data is in an OP_RETURN output.\n    // There is no rule for the index of the output, so use filter to find it.\n    // The root is prepended with 0xaa21a9ed so check for 0x6a24aa21a9ed\n    // If multiple commits are found, the output with highest index is assumed.\n    const witnessCommits = this.transactions[0].outs\n      .filter(out =>\n        out.script.slice(0, 6).equals(Buffer.from('6a24aa21a9ed', 'hex')),\n      )\n      .map(out => out.script.slice(6, 38));\n    if (witnessCommits.length === 0) return null;\n    // Use the commit with the highest output (should only be one though)\n    const result = witnessCommits[witnessCommits.length - 1];\n    if (!(result instanceof Buffer && result.length === 32)) return null;\n    return result;\n  }\n  hasWitnessCommit() {\n    if (\n      this.witnessCommit instanceof Buffer &&\n      this.witnessCommit.length === 32\n    )\n      return true;\n    if (this.getWitnessCommit() !== null) return true;\n    return false;\n  }\n  hasWitness() {\n    return anyTxHasWitness(this.transactions);\n  }\n  weight() {\n    const base = this.byteLength(false, false);\n    const total = this.byteLength(false, true);\n    return base * 3 + total;\n  }\n  byteLength(headersOnly, allowWitness = true) {\n    if (headersOnly || !this.transactions) return 80;\n    return (\n      80 +\n      bufferutils_1.varuint.encodingLength(this.transactions.length) +\n      this.transactions.reduce((a, x) => a + x.byteLength(allowWitness), 0)\n    );\n  }\n  getHash() {\n    return bcrypto.hash256(this.toBuffer(true));\n  }\n  getId() {\n    return (0, bufferutils_1.reverseBuffer)(this.getHash()).toString('hex');\n  }\n  getUTCDate() {\n    const date = new Date(0); // epoch\n    date.setUTCSeconds(this.timestamp);\n    return date;\n  }\n  // TODO: buffer, offset compatibility\n  toBuffer(headersOnly) {\n    const buffer = Buffer.allocUnsafe(this.byteLength(headersOnly));\n    const bufferWriter = new bufferutils_1.BufferWriter(buffer);\n    bufferWriter.writeInt32(this.version);\n    bufferWriter.writeSlice(this.prevHash);\n    bufferWriter.writeSlice(this.merkleRoot);\n    bufferWriter.writeUInt32(this.timestamp);\n    bufferWriter.writeUInt32(this.bits);\n    bufferWriter.writeUInt32(this.nonce);\n    if (headersOnly || !this.transactions) return buffer;\n    bufferutils_1.varuint.encode(\n      this.transactions.length,\n      buffer,\n      bufferWriter.offset,\n    );\n    bufferWriter.offset += bufferutils_1.varuint.encode.bytes;\n    this.transactions.forEach(tx => {\n      const txSize = tx.byteLength(); // TODO: extract from toBuffer?\n      tx.toBuffer(buffer, bufferWriter.offset);\n      bufferWriter.offset += txSize;\n    });\n    return buffer;\n  }\n  toHex(headersOnly) {\n    return this.toBuffer(headersOnly).toString('hex');\n  }\n  checkTxRoots() {\n    // If the Block has segwit transactions but no witness commit,\n    // there's no way it can be valid, so fail the check.\n    const hasWitnessCommit = this.hasWitnessCommit();\n    if (!hasWitnessCommit && this.hasWitness()) return false;\n    return (\n      this.__checkMerkleRoot() &&\n      (hasWitnessCommit ? this.__checkWitnessCommit() : true)\n    );\n  }\n  checkProofOfWork() {\n    const hash = (0, bufferutils_1.reverseBuffer)(this.getHash());\n    const target = Block.calculateTarget(this.bits);\n    return hash.compare(target) <= 0;\n  }\n  __checkMerkleRoot() {\n    if (!this.transactions) throw errorMerkleNoTxes;\n    const actualMerkleRoot = Block.calculateMerkleRoot(this.transactions);\n    return this.merkleRoot.compare(actualMerkleRoot) === 0;\n  }\n  __checkWitnessCommit() {\n    if (!this.transactions) throw errorMerkleNoTxes;\n    if (!this.hasWitnessCommit()) throw errorWitnessNotSegwit;\n    const actualWitnessCommit = Block.calculateMerkleRoot(\n      this.transactions,\n      true,\n    );\n    return this.witnessCommit.compare(actualWitnessCommit) === 0;\n  }\n}\nexports.Block = Block;\nfunction txesHaveWitnessCommit(transactions) {\n  return (\n    transactions instanceof Array &&\n    transactions[0] &&\n    transactions[0].ins &&\n    transactions[0].ins instanceof Array &&\n    transactions[0].ins[0] &&\n    transactions[0].ins[0].witness &&\n    transactions[0].ins[0].witness instanceof Array &&\n    transactions[0].ins[0].witness.length > 0\n  );\n}\nfunction anyTxHasWitness(transactions) {\n  return (\n    transactions instanceof Array &&\n    transactions.some(\n      tx =>\n        typeof tx === 'object' &&\n        tx.ins instanceof Array &&\n        tx.ins.some(\n          input =>\n            typeof input === 'object' &&\n            input.witness instanceof Array &&\n            input.witness.length > 0,\n        ),\n    )\n  );\n}\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar GlobalTypes;\n(function(GlobalTypes) {\n  GlobalTypes[(GlobalTypes['UNSIGNED_TX'] = 0)] = 'UNSIGNED_TX';\n  GlobalTypes[(GlobalTypes['GLOBAL_XPUB'] = 1)] = 'GLOBAL_XPUB';\n})((GlobalTypes = exports.GlobalTypes || (exports.GlobalTypes = {})));\nexports.GLOBAL_TYPE_NAMES = ['unsignedTx', 'globalXpub'];\nvar InputTypes;\n(function(InputTypes) {\n  InputTypes[(InputTypes['NON_WITNESS_UTXO'] = 0)] = 'NON_WITNESS_UTXO';\n  InputTypes[(InputTypes['WITNESS_UTXO'] = 1)] = 'WITNESS_UTXO';\n  InputTypes[(InputTypes['PARTIAL_SIG'] = 2)] = 'PARTIAL_SIG';\n  InputTypes[(InputTypes['SIGHASH_TYPE'] = 3)] = 'SIGHASH_TYPE';\n  InputTypes[(InputTypes['REDEEM_SCRIPT'] = 4)] = 'REDEEM_SCRIPT';\n  InputTypes[(InputTypes['WITNESS_SCRIPT'] = 5)] = 'WITNESS_SCRIPT';\n  InputTypes[(InputTypes['BIP32_DERIVATION'] = 6)] = 'BIP32_DERIVATION';\n  InputTypes[(InputTypes['FINAL_SCRIPTSIG'] = 7)] = 'FINAL_SCRIPTSIG';\n  InputTypes[(InputTypes['FINAL_SCRIPTWITNESS'] = 8)] = 'FINAL_SCRIPTWITNESS';\n  InputTypes[(InputTypes['POR_COMMITMENT'] = 9)] = 'POR_COMMITMENT';\n  InputTypes[(InputTypes['TAP_KEY_SIG'] = 19)] = 'TAP_KEY_SIG';\n  InputTypes[(InputTypes['TAP_SCRIPT_SIG'] = 20)] = 'TAP_SCRIPT_SIG';\n  InputTypes[(InputTypes['TAP_LEAF_SCRIPT'] = 21)] = 'TAP_LEAF_SCRIPT';\n  InputTypes[(InputTypes['TAP_BIP32_DERIVATION'] = 22)] =\n    'TAP_BIP32_DERIVATION';\n  InputTypes[(InputTypes['TAP_INTERNAL_KEY'] = 23)] = 'TAP_INTERNAL_KEY';\n  InputTypes[(InputTypes['TAP_MERKLE_ROOT'] = 24)] = 'TAP_MERKLE_ROOT';\n})((InputTypes = exports.InputTypes || (exports.InputTypes = {})));\nexports.INPUT_TYPE_NAMES = [\n  'nonWitnessUtxo',\n  'witnessUtxo',\n  'partialSig',\n  'sighashType',\n  'redeemScript',\n  'witnessScript',\n  'bip32Derivation',\n  'finalScriptSig',\n  'finalScriptWitness',\n  'porCommitment',\n  'tapKeySig',\n  'tapScriptSig',\n  'tapLeafScript',\n  'tapBip32Derivation',\n  'tapInternalKey',\n  'tapMerkleRoot',\n];\nvar OutputTypes;\n(function(OutputTypes) {\n  OutputTypes[(OutputTypes['REDEEM_SCRIPT'] = 0)] = 'REDEEM_SCRIPT';\n  OutputTypes[(OutputTypes['WITNESS_SCRIPT'] = 1)] = 'WITNESS_SCRIPT';\n  OutputTypes[(OutputTypes['BIP32_DERIVATION'] = 2)] = 'BIP32_DERIVATION';\n  OutputTypes[(OutputTypes['TAP_INTERNAL_KEY'] = 5)] = 'TAP_INTERNAL_KEY';\n  OutputTypes[(OutputTypes['TAP_TREE'] = 6)] = 'TAP_TREE';\n  OutputTypes[(OutputTypes['TAP_BIP32_DERIVATION'] = 7)] =\n    'TAP_BIP32_DERIVATION';\n})((OutputTypes = exports.OutputTypes || (exports.OutputTypes = {})));\nexports.OUTPUT_TYPE_NAMES = [\n  'redeemScript',\n  'witnessScript',\n  'bip32Derivation',\n  'tapInternalKey',\n  'tapTree',\n  'tapBip32Derivation',\n];\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nconst typeFields_1 = require('../../typeFields');\nconst range = n => [...Array(n).keys()];\nfunction decode(keyVal) {\n  if (keyVal.key[0] !== typeFields_1.GlobalTypes.GLOBAL_XPUB) {\n    throw new Error(\n      'Decode Error: could not decode globalXpub with key 0x' +\n        keyVal.key.toString('hex'),\n    );\n  }\n  if (keyVal.key.length !== 79 || ![2, 3].includes(keyVal.key[46])) {\n    throw new Error(\n      'Decode Error: globalXpub has invalid extended pubkey in key 0x' +\n        keyVal.key.toString('hex'),\n    );\n  }\n  if ((keyVal.value.length / 4) % 1 !== 0) {\n    throw new Error(\n      'Decode Error: Global GLOBAL_XPUB value length should be multiple of 4',\n    );\n  }\n  const extendedPubkey = keyVal.key.slice(1);\n  const data = {\n    masterFingerprint: keyVal.value.slice(0, 4),\n    extendedPubkey,\n    path: 'm',\n  };\n  for (const i of range(keyVal.value.length / 4 - 1)) {\n    const val = keyVal.value.readUInt32LE(i * 4 + 4);\n    const isHard = !!(val & 0x80000000);\n    const idx = val & 0x7fffffff;\n    data.path += '/' + idx.toString(10) + (isHard ? \"'\" : '');\n  }\n  return data;\n}\nexports.decode = decode;\nfunction encode(data) {\n  const head = Buffer.from([typeFields_1.GlobalTypes.GLOBAL_XPUB]);\n  const key = Buffer.concat([head, data.extendedPubkey]);\n  const splitPath = data.path.split('/');\n  const value = Buffer.allocUnsafe(splitPath.length * 4);\n  data.masterFingerprint.copy(value, 0);\n  let offset = 4;\n  splitPath.slice(1).forEach(level => {\n    const isHard = level.slice(-1) === \"'\";\n    let num = 0x7fffffff & parseInt(isHard ? level.slice(0, -1) : level, 10);\n    if (isHard) num += 0x80000000;\n    value.writeUInt32LE(num, offset);\n    offset += 4;\n  });\n  return {\n    key,\n    value,\n  };\n}\nexports.encode = encode;\nexports.expected =\n  '{ masterFingerprint: Buffer; extendedPubkey: Buffer; path: string; }';\nfunction check(data) {\n  const epk = data.extendedPubkey;\n  const mfp = data.masterFingerprint;\n  const p = data.path;\n  return (\n    Buffer.isBuffer(epk) &&\n    epk.length === 78 &&\n    [2, 3].indexOf(epk[45]) > -1 &&\n    Buffer.isBuffer(mfp) &&\n    mfp.length === 4 &&\n    typeof p === 'string' &&\n    !!p.match(/^m(\\/\\d+'?)*$/)\n  );\n}\nexports.check = check;\nfunction canAddToArray(array, item, dupeSet) {\n  const dupeString = item.extendedPubkey.toString('hex');\n  if (dupeSet.has(dupeString)) return false;\n  dupeSet.add(dupeString);\n  return (\n    array.filter(v => v.extendedPubkey.equals(item.extendedPubkey)).length === 0\n  );\n}\nexports.canAddToArray = canAddToArray;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nconst typeFields_1 = require('../../typeFields');\nfunction encode(data) {\n  return {\n    key: Buffer.from([typeFields_1.GlobalTypes.UNSIGNED_TX]),\n    value: data.toBuffer(),\n  };\n}\nexports.encode = encode;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nconst typeFields_1 = require('../../typeFields');\nfunction decode(keyVal) {\n  if (keyVal.key[0] !== typeFields_1.InputTypes.FINAL_SCRIPTSIG) {\n    throw new Error(\n      'Decode Error: could not decode finalScriptSig with key 0x' +\n        keyVal.key.toString('hex'),\n    );\n  }\n  return keyVal.value;\n}\nexports.decode = decode;\nfunction encode(data) {\n  const key = Buffer.from([typeFields_1.InputTypes.FINAL_SCRIPTSIG]);\n  return {\n    key,\n    value: data,\n  };\n}\nexports.encode = encode;\nexports.expected = 'Buffer';\nfunction check(data) {\n  return Buffer.isBuffer(data);\n}\nexports.check = check;\nfunction canAdd(currentData, newData) {\n  return !!currentData && !!newData && currentData.finalScriptSig === undefined;\n}\nexports.canAdd = canAdd;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nconst typeFields_1 = require('../../typeFields');\nfunction decode(keyVal) {\n  if (keyVal.key[0] !== typeFields_1.InputTypes.FINAL_SCRIPTWITNESS) {\n    throw new Error(\n      'Decode Error: could not decode finalScriptWitness with key 0x' +\n        keyVal.key.toString('hex'),\n    );\n  }\n  return keyVal.value;\n}\nexports.decode = decode;\nfunction encode(data) {\n  const key = Buffer.from([typeFields_1.InputTypes.FINAL_SCRIPTWITNESS]);\n  return {\n    key,\n    value: data,\n  };\n}\nexports.encode = encode;\nexports.expected = 'Buffer';\nfunction check(data) {\n  return Buffer.isBuffer(data);\n}\nexports.check = check;\nfunction canAdd(currentData, newData) {\n  return (\n    !!currentData && !!newData && currentData.finalScriptWitness === undefined\n  );\n}\nexports.canAdd = canAdd;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nconst typeFields_1 = require('../../typeFields');\nfunction decode(keyVal) {\n  if (keyVal.key[0] !== typeFields_1.InputTypes.NON_WITNESS_UTXO) {\n    throw new Error(\n      'Decode Error: could not decode nonWitnessUtxo with key 0x' +\n        keyVal.key.toString('hex'),\n    );\n  }\n  return keyVal.value;\n}\nexports.decode = decode;\nfunction encode(data) {\n  return {\n    key: Buffer.from([typeFields_1.InputTypes.NON_WITNESS_UTXO]),\n    value: data,\n  };\n}\nexports.encode = encode;\nexports.expected = 'Buffer';\nfunction check(data) {\n  return Buffer.isBuffer(data);\n}\nexports.check = check;\nfunction canAdd(currentData, newData) {\n  return !!currentData && !!newData && currentData.nonWitnessUtxo === undefined;\n}\nexports.canAdd = canAdd;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nconst typeFields_1 = require('../../typeFields');\nfunction decode(keyVal) {\n  if (keyVal.key[0] !== typeFields_1.InputTypes.PARTIAL_SIG) {\n    throw new Error(\n      'Decode Error: could not decode partialSig with key 0x' +\n        keyVal.key.toString('hex'),\n    );\n  }\n  if (\n    !(keyVal.key.length === 34 || keyVal.key.length === 66) ||\n    ![2, 3, 4].includes(keyVal.key[1])\n  ) {\n    throw new Error(\n      'Decode Error: partialSig has invalid pubkey in key 0x' +\n        keyVal.key.toString('hex'),\n    );\n  }\n  const pubkey = keyVal.key.slice(1);\n  return {\n    pubkey,\n    signature: keyVal.value,\n  };\n}\nexports.decode = decode;\nfunction encode(pSig) {\n  const head = Buffer.from([typeFields_1.InputTypes.PARTIAL_SIG]);\n  return {\n    key: Buffer.concat([head, pSig.pubkey]),\n    value: pSig.signature,\n  };\n}\nexports.encode = encode;\nexports.expected = '{ pubkey: Buffer; signature: Buffer; }';\nfunction check(data) {\n  return (\n    Buffer.isBuffer(data.pubkey) &&\n    Buffer.isBuffer(data.signature) &&\n    [33, 65].includes(data.pubkey.length) &&\n    [2, 3, 4].includes(data.pubkey[0]) &&\n    isDerSigWithSighash(data.signature)\n  );\n}\nexports.check = check;\nfunction isDerSigWithSighash(buf) {\n  if (!Buffer.isBuffer(buf) || buf.length < 9) return false;\n  if (buf[0] !== 0x30) return false;\n  if (buf.length !== buf[1] + 3) return false;\n  if (buf[2] !== 0x02) return false;\n  const rLen = buf[3];\n  if (rLen > 33 || rLen < 1) return false;\n  if (buf[3 + rLen + 1] !== 0x02) return false;\n  const sLen = buf[3 + rLen + 2];\n  if (sLen > 33 || sLen < 1) return false;\n  if (buf.length !== 3 + rLen + 2 + sLen + 2) return false;\n  return true;\n}\nfunction canAddToArray(array, item, dupeSet) {\n  const dupeString = item.pubkey.toString('hex');\n  if (dupeSet.has(dupeString)) return false;\n  dupeSet.add(dupeString);\n  return array.filter(v => v.pubkey.equals(item.pubkey)).length === 0;\n}\nexports.canAddToArray = canAddToArray;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nconst typeFields_1 = require('../../typeFields');\nfunction decode(keyVal) {\n  if (keyVal.key[0] !== typeFields_1.InputTypes.POR_COMMITMENT) {\n    throw new Error(\n      'Decode Error: could not decode porCommitment with key 0x' +\n        keyVal.key.toString('hex'),\n    );\n  }\n  return keyVal.value.toString('utf8');\n}\nexports.decode = decode;\nfunction encode(data) {\n  const key = Buffer.from([typeFields_1.InputTypes.POR_COMMITMENT]);\n  return {\n    key,\n    value: Buffer.from(data, 'utf8'),\n  };\n}\nexports.encode = encode;\nexports.expected = 'string';\nfunction check(data) {\n  return typeof data === 'string';\n}\nexports.check = check;\nfunction canAdd(currentData, newData) {\n  return !!currentData && !!newData && currentData.porCommitment === undefined;\n}\nexports.canAdd = canAdd;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nconst typeFields_1 = require('../../typeFields');\nfunction decode(keyVal) {\n  if (keyVal.key[0] !== typeFields_1.InputTypes.SIGHASH_TYPE) {\n    throw new Error(\n      'Decode Error: could not decode sighashType with key 0x' +\n        keyVal.key.toString('hex'),\n    );\n  }\n  return keyVal.value.readUInt32LE(0);\n}\nexports.decode = decode;\nfunction encode(data) {\n  const key = Buffer.from([typeFields_1.InputTypes.SIGHASH_TYPE]);\n  const value = Buffer.allocUnsafe(4);\n  value.writeUInt32LE(data, 0);\n  return {\n    key,\n    value,\n  };\n}\nexports.encode = encode;\nexports.expected = 'number';\nfunction check(data) {\n  return typeof data === 'number';\n}\nexports.check = check;\nfunction canAdd(currentData, newData) {\n  return !!currentData && !!newData && currentData.sighashType === undefined;\n}\nexports.canAdd = canAdd;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nconst typeFields_1 = require('../../typeFields');\nfunction decode(keyVal) {\n  if (\n    keyVal.key[0] !== typeFields_1.InputTypes.TAP_KEY_SIG ||\n    keyVal.key.length !== 1\n  ) {\n    throw new Error(\n      'Decode Error: could not decode tapKeySig with key 0x' +\n        keyVal.key.toString('hex'),\n    );\n  }\n  if (!check(keyVal.value)) {\n    throw new Error(\n      'Decode Error: tapKeySig not a valid 64-65-byte BIP340 signature',\n    );\n  }\n  return keyVal.value;\n}\nexports.decode = decode;\nfunction encode(value) {\n  const key = Buffer.from([typeFields_1.InputTypes.TAP_KEY_SIG]);\n  return { key, value };\n}\nexports.encode = encode;\nexports.expected = 'Buffer';\nfunction check(data) {\n  return Buffer.isBuffer(data) && (data.length === 64 || data.length === 65);\n}\nexports.check = check;\nfunction canAdd(currentData, newData) {\n  return !!currentData && !!newData && currentData.tapKeySig === undefined;\n}\nexports.canAdd = canAdd;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nconst typeFields_1 = require('../../typeFields');\nfunction decode(keyVal) {\n  if (keyVal.key[0] !== typeFields_1.InputTypes.TAP_LEAF_SCRIPT) {\n    throw new Error(\n      'Decode Error: could not decode tapLeafScript with key 0x' +\n        keyVal.key.toString('hex'),\n    );\n  }\n  if ((keyVal.key.length - 2) % 32 !== 0) {\n    throw new Error(\n      'Decode Error: tapLeafScript has invalid control block in key 0x' +\n        keyVal.key.toString('hex'),\n    );\n  }\n  const leafVersion = keyVal.value[keyVal.value.length - 1];\n  if ((keyVal.key[1] & 0xfe) !== leafVersion) {\n    throw new Error(\n      'Decode Error: tapLeafScript bad leaf version in key 0x' +\n        keyVal.key.toString('hex'),\n    );\n  }\n  const script = keyVal.value.slice(0, -1);\n  const controlBlock = keyVal.key.slice(1);\n  return { controlBlock, script, leafVersion };\n}\nexports.decode = decode;\nfunction encode(tScript) {\n  const head = Buffer.from([typeFields_1.InputTypes.TAP_LEAF_SCRIPT]);\n  const verBuf = Buffer.from([tScript.leafVersion]);\n  return {\n    key: Buffer.concat([head, tScript.controlBlock]),\n    value: Buffer.concat([tScript.script, verBuf]),\n  };\n}\nexports.encode = encode;\nexports.expected =\n  '{ controlBlock: Buffer; leafVersion: number, script: Buffer; }';\nfunction check(data) {\n  return (\n    Buffer.isBuffer(data.controlBlock) &&\n    (data.controlBlock.length - 1) % 32 === 0 &&\n    (data.controlBlock[0] & 0xfe) === data.leafVersion &&\n    Buffer.isBuffer(data.script)\n  );\n}\nexports.check = check;\nfunction canAddToArray(array, item, dupeSet) {\n  const dupeString = item.controlBlock.toString('hex');\n  if (dupeSet.has(dupeString)) return false;\n  dupeSet.add(dupeString);\n  return (\n    array.filter(v => v.controlBlock.equals(item.controlBlock)).length === 0\n  );\n}\nexports.canAddToArray = canAddToArray;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nconst typeFields_1 = require('../../typeFields');\nfunction decode(keyVal) {\n  if (\n    keyVal.key[0] !== typeFields_1.InputTypes.TAP_MERKLE_ROOT ||\n    keyVal.key.length !== 1\n  ) {\n    throw new Error(\n      'Decode Error: could not decode tapMerkleRoot with key 0x' +\n        keyVal.key.toString('hex'),\n    );\n  }\n  if (!check(keyVal.value)) {\n    throw new Error('Decode Error: tapMerkleRoot not a 32-byte hash');\n  }\n  return keyVal.value;\n}\nexports.decode = decode;\nfunction encode(value) {\n  const key = Buffer.from([typeFields_1.InputTypes.TAP_MERKLE_ROOT]);\n  return { key, value };\n}\nexports.encode = encode;\nexports.expected = 'Buffer';\nfunction check(data) {\n  return Buffer.isBuffer(data) && data.length === 32;\n}\nexports.check = check;\nfunction canAdd(currentData, newData) {\n  return !!currentData && !!newData && currentData.tapMerkleRoot === undefined;\n}\nexports.canAdd = canAdd;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nconst typeFields_1 = require('../../typeFields');\nfunction decode(keyVal) {\n  if (keyVal.key[0] !== typeFields_1.InputTypes.TAP_SCRIPT_SIG) {\n    throw new Error(\n      'Decode Error: could not decode tapScriptSig with key 0x' +\n        keyVal.key.toString('hex'),\n    );\n  }\n  if (keyVal.key.length !== 65) {\n    throw new Error(\n      'Decode Error: tapScriptSig has invalid key 0x' +\n        keyVal.key.toString('hex'),\n    );\n  }\n  if (keyVal.value.length !== 64 && keyVal.value.length !== 65) {\n    throw new Error(\n      'Decode Error: tapScriptSig has invalid signature in key 0x' +\n        keyVal.key.toString('hex'),\n    );\n  }\n  const pubkey = keyVal.key.slice(1, 33);\n  const leafHash = keyVal.key.slice(33);\n  return {\n    pubkey,\n    leafHash,\n    signature: keyVal.value,\n  };\n}\nexports.decode = decode;\nfunction encode(tSig) {\n  const head = Buffer.from([typeFields_1.InputTypes.TAP_SCRIPT_SIG]);\n  return {\n    key: Buffer.concat([head, tSig.pubkey, tSig.leafHash]),\n    value: tSig.signature,\n  };\n}\nexports.encode = encode;\nexports.expected = '{ pubkey: Buffer; leafHash: Buffer; signature: Buffer; }';\nfunction check(data) {\n  return (\n    Buffer.isBuffer(data.pubkey) &&\n    Buffer.isBuffer(data.leafHash) &&\n    Buffer.isBuffer(data.signature) &&\n    data.pubkey.length === 32 &&\n    data.leafHash.length === 32 &&\n    (data.signature.length === 64 || data.signature.length === 65)\n  );\n}\nexports.check = check;\nfunction canAddToArray(array, item, dupeSet) {\n  const dupeString =\n    item.pubkey.toString('hex') + item.leafHash.toString('hex');\n  if (dupeSet.has(dupeString)) return false;\n  dupeSet.add(dupeString);\n  return (\n    array.filter(\n      v => v.pubkey.equals(item.pubkey) && v.leafHash.equals(item.leafHash),\n    ).length === 0\n  );\n}\nexports.canAddToArray = canAddToArray;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\n// Number.MAX_SAFE_INTEGER\nconst MAX_SAFE_INTEGER = 9007199254740991;\nfunction checkUInt53(n) {\n  if (n < 0 || n > MAX_SAFE_INTEGER || n % 1 !== 0)\n    throw new RangeError('value out of range');\n}\nfunction encode(_number, buffer, offset) {\n  checkUInt53(_number);\n  if (!buffer) buffer = Buffer.allocUnsafe(encodingLength(_number));\n  if (!Buffer.isBuffer(buffer))\n    throw new TypeError('buffer must be a Buffer instance');\n  if (!offset) offset = 0;\n  // 8 bit\n  if (_number < 0xfd) {\n    buffer.writeUInt8(_number, offset);\n    Object.assign(encode, { bytes: 1 });\n    // 16 bit\n  } else if (_number <= 0xffff) {\n    buffer.writeUInt8(0xfd, offset);\n    buffer.writeUInt16LE(_number, offset + 1);\n    Object.assign(encode, { bytes: 3 });\n    // 32 bit\n  } else if (_number <= 0xffffffff) {\n    buffer.writeUInt8(0xfe, offset);\n    buffer.writeUInt32LE(_number, offset + 1);\n    Object.assign(encode, { bytes: 5 });\n    // 64 bit\n  } else {\n    buffer.writeUInt8(0xff, offset);\n    buffer.writeUInt32LE(_number >>> 0, offset + 1);\n    buffer.writeUInt32LE((_number / 0x100000000) | 0, offset + 5);\n    Object.assign(encode, { bytes: 9 });\n  }\n  return buffer;\n}\nexports.encode = encode;\nfunction decode(buffer, offset) {\n  if (!Buffer.isBuffer(buffer))\n    throw new TypeError('buffer must be a Buffer instance');\n  if (!offset) offset = 0;\n  const first = buffer.readUInt8(offset);\n  // 8 bit\n  if (first < 0xfd) {\n    Object.assign(decode, { bytes: 1 });\n    return first;\n    // 16 bit\n  } else if (first === 0xfd) {\n    Object.assign(decode, { bytes: 3 });\n    return buffer.readUInt16LE(offset + 1);\n    // 32 bit\n  } else if (first === 0xfe) {\n    Object.assign(decode, { bytes: 5 });\n    return buffer.readUInt32LE(offset + 1);\n    // 64 bit\n  } else {\n    Object.assign(decode, { bytes: 9 });\n    const lo = buffer.readUInt32LE(offset + 1);\n    const hi = buffer.readUInt32LE(offset + 5);\n    const _number = hi * 0x0100000000 + lo;\n    checkUInt53(_number);\n    return _number;\n  }\n}\nexports.decode = decode;\nfunction encodingLength(_number) {\n  checkUInt53(_number);\n  return _number < 0xfd\n    ? 1\n    : _number <= 0xffff\n    ? 3\n    : _number <= 0xffffffff\n    ? 5\n    : 9;\n}\nexports.encodingLength = encodingLength;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nconst varuint = require('./varint');\nexports.range = n => [...Array(n).keys()];\nfunction reverseBuffer(buffer) {\n  if (buffer.length < 1) return buffer;\n  let j = buffer.length - 1;\n  let tmp = 0;\n  for (let i = 0; i < buffer.length / 2; i++) {\n    tmp = buffer[i];\n    buffer[i] = buffer[j];\n    buffer[j] = tmp;\n    j--;\n  }\n  return buffer;\n}\nexports.reverseBuffer = reverseBuffer;\nfunction keyValsToBuffer(keyVals) {\n  const buffers = keyVals.map(keyValToBuffer);\n  buffers.push(Buffer.from([0]));\n  return Buffer.concat(buffers);\n}\nexports.keyValsToBuffer = keyValsToBuffer;\nfunction keyValToBuffer(keyVal) {\n  const keyLen = keyVal.key.length;\n  const valLen = keyVal.value.length;\n  const keyVarIntLen = varuint.encodingLength(keyLen);\n  const valVarIntLen = varuint.encodingLength(valLen);\n  const buffer = Buffer.allocUnsafe(\n    keyVarIntLen + keyLen + valVarIntLen + valLen,\n  );\n  varuint.encode(keyLen, buffer, 0);\n  keyVal.key.copy(buffer, keyVarIntLen);\n  varuint.encode(valLen, buffer, keyVarIntLen + keyLen);\n  keyVal.value.copy(buffer, keyVarIntLen + keyLen + valVarIntLen);\n  return buffer;\n}\nexports.keyValToBuffer = keyValToBuffer;\n// https://github.com/feross/buffer/blob/master/index.js#L1127\nfunction verifuint(value, max) {\n  if (typeof value !== 'number')\n    throw new Error('cannot write a non-number as a number');\n  if (value < 0)\n    throw new Error('specified a negative value for writing an unsigned value');\n  if (value > max) throw new Error('RangeError: value out of range');\n  if (Math.floor(value) !== value)\n    throw new Error('value has a fractional component');\n}\nfunction readUInt64LE(buffer, offset) {\n  const a = buffer.readUInt32LE(offset);\n  let b = buffer.readUInt32LE(offset + 4);\n  b *= 0x100000000;\n  verifuint(b + a, 0x001fffffffffffff);\n  return b + a;\n}\nexports.readUInt64LE = readUInt64LE;\nfunction writeUInt64LE(buffer, value, offset) {\n  verifuint(value, 0x001fffffffffffff);\n  buffer.writeInt32LE(value & -1, offset);\n  buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4);\n  return offset + 8;\n}\nexports.writeUInt64LE = writeUInt64LE;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nconst typeFields_1 = require('../../typeFields');\nconst tools_1 = require('../tools');\nconst varuint = require('../varint');\nfunction decode(keyVal) {\n  if (keyVal.key[0] !== typeFields_1.InputTypes.WITNESS_UTXO) {\n    throw new Error(\n      'Decode Error: could not decode witnessUtxo with key 0x' +\n        keyVal.key.toString('hex'),\n    );\n  }\n  const value = tools_1.readUInt64LE(keyVal.value, 0);\n  let _offset = 8;\n  const scriptLen = varuint.decode(keyVal.value, _offset);\n  _offset += varuint.encodingLength(scriptLen);\n  const script = keyVal.value.slice(_offset);\n  if (script.length !== scriptLen) {\n    throw new Error('Decode Error: WITNESS_UTXO script is not proper length');\n  }\n  return {\n    script,\n    value,\n  };\n}\nexports.decode = decode;\nfunction encode(data) {\n  const { script, value } = data;\n  const varintLen = varuint.encodingLength(script.length);\n  const result = Buffer.allocUnsafe(8 + varintLen + script.length);\n  tools_1.writeUInt64LE(result, value, 0);\n  varuint.encode(script.length, result, 8);\n  script.copy(result, 8 + varintLen);\n  return {\n    key: Buffer.from([typeFields_1.InputTypes.WITNESS_UTXO]),\n    value: result,\n  };\n}\nexports.encode = encode;\nexports.expected = '{ script: Buffer; value: number; }';\nfunction check(data) {\n  return Buffer.isBuffer(data.script) && typeof data.value === 'number';\n}\nexports.check = check;\nfunction canAdd(currentData, newData) {\n  return !!currentData && !!newData && currentData.witnessUtxo === undefined;\n}\nexports.canAdd = canAdd;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nconst typeFields_1 = require('../../typeFields');\nconst varuint = require('../varint');\nfunction decode(keyVal) {\n  if (\n    keyVal.key[0] !== typeFields_1.OutputTypes.TAP_TREE ||\n    keyVal.key.length !== 1\n  ) {\n    throw new Error(\n      'Decode Error: could not decode tapTree with key 0x' +\n        keyVal.key.toString('hex'),\n    );\n  }\n  let _offset = 0;\n  const data = [];\n  while (_offset < keyVal.value.length) {\n    const depth = keyVal.value[_offset++];\n    const leafVersion = keyVal.value[_offset++];\n    const scriptLen = varuint.decode(keyVal.value, _offset);\n    _offset += varuint.encodingLength(scriptLen);\n    data.push({\n      depth,\n      leafVersion,\n      script: keyVal.value.slice(_offset, _offset + scriptLen),\n    });\n    _offset += scriptLen;\n  }\n  return { leaves: data };\n}\nexports.decode = decode;\nfunction encode(tree) {\n  const key = Buffer.from([typeFields_1.OutputTypes.TAP_TREE]);\n  const bufs = [].concat(\n    ...tree.leaves.map(tapLeaf => [\n      Buffer.of(tapLeaf.depth, tapLeaf.leafVersion),\n      varuint.encode(tapLeaf.script.length),\n      tapLeaf.script,\n    ]),\n  );\n  return {\n    key,\n    value: Buffer.concat(bufs),\n  };\n}\nexports.encode = encode;\nexports.expected =\n  '{ leaves: [{ depth: number; leafVersion: number, script: Buffer; }] }';\nfunction check(data) {\n  return (\n    Array.isArray(data.leaves) &&\n    data.leaves.every(\n      tapLeaf =>\n        tapLeaf.depth >= 0 &&\n        tapLeaf.depth <= 128 &&\n        (tapLeaf.leafVersion & 0xfe) === tapLeaf.leafVersion &&\n        Buffer.isBuffer(tapLeaf.script),\n    )\n  );\n}\nexports.check = check;\nfunction canAdd(currentData, newData) {\n  return !!currentData && !!newData && currentData.tapTree === undefined;\n}\nexports.canAdd = canAdd;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nconst range = n => [...Array(n).keys()];\nconst isValidDERKey = pubkey =>\n  (pubkey.length === 33 && [2, 3].includes(pubkey[0])) ||\n  (pubkey.length === 65 && 4 === pubkey[0]);\nfunction makeConverter(TYPE_BYTE, isValidPubkey = isValidDERKey) {\n  function decode(keyVal) {\n    if (keyVal.key[0] !== TYPE_BYTE) {\n      throw new Error(\n        'Decode Error: could not decode bip32Derivation with key 0x' +\n          keyVal.key.toString('hex'),\n      );\n    }\n    const pubkey = keyVal.key.slice(1);\n    if (!isValidPubkey(pubkey)) {\n      throw new Error(\n        'Decode Error: bip32Derivation has invalid pubkey in key 0x' +\n          keyVal.key.toString('hex'),\n      );\n    }\n    if ((keyVal.value.length / 4) % 1 !== 0) {\n      throw new Error(\n        'Decode Error: Input BIP32_DERIVATION value length should be multiple of 4',\n      );\n    }\n    const data = {\n      masterFingerprint: keyVal.value.slice(0, 4),\n      pubkey,\n      path: 'm',\n    };\n    for (const i of range(keyVal.value.length / 4 - 1)) {\n      const val = keyVal.value.readUInt32LE(i * 4 + 4);\n      const isHard = !!(val & 0x80000000);\n      const idx = val & 0x7fffffff;\n      data.path += '/' + idx.toString(10) + (isHard ? \"'\" : '');\n    }\n    return data;\n  }\n  function encode(data) {\n    const head = Buffer.from([TYPE_BYTE]);\n    const key = Buffer.concat([head, data.pubkey]);\n    const splitPath = data.path.split('/');\n    const value = Buffer.allocUnsafe(splitPath.length * 4);\n    data.masterFingerprint.copy(value, 0);\n    let offset = 4;\n    splitPath.slice(1).forEach(level => {\n      const isHard = level.slice(-1) === \"'\";\n      let num = 0x7fffffff & parseInt(isHard ? level.slice(0, -1) : level, 10);\n      if (isHard) num += 0x80000000;\n      value.writeUInt32LE(num, offset);\n      offset += 4;\n    });\n    return {\n      key,\n      value,\n    };\n  }\n  const expected =\n    '{ masterFingerprint: Buffer; pubkey: Buffer; path: string; }';\n  function check(data) {\n    return (\n      Buffer.isBuffer(data.pubkey) &&\n      Buffer.isBuffer(data.masterFingerprint) &&\n      typeof data.path === 'string' &&\n      isValidPubkey(data.pubkey) &&\n      data.masterFingerprint.length === 4\n    );\n  }\n  function canAddToArray(array, item, dupeSet) {\n    const dupeString = item.pubkey.toString('hex');\n    if (dupeSet.has(dupeString)) return false;\n    dupeSet.add(dupeString);\n    return array.filter(v => v.pubkey.equals(item.pubkey)).length === 0;\n  }\n  return {\n    decode,\n    encode,\n    check,\n    expected,\n    canAddToArray,\n  };\n}\nexports.makeConverter = makeConverter;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nfunction makeChecker(pubkeyTypes) {\n  return checkPubkey;\n  function checkPubkey(keyVal) {\n    let pubkey;\n    if (pubkeyTypes.includes(keyVal.key[0])) {\n      pubkey = keyVal.key.slice(1);\n      if (\n        !(pubkey.length === 33 || pubkey.length === 65) ||\n        ![2, 3, 4].includes(pubkey[0])\n      ) {\n        throw new Error(\n          'Format Error: invalid pubkey in key 0x' + keyVal.key.toString('hex'),\n        );\n      }\n    }\n    return pubkey;\n  }\n}\nexports.makeChecker = makeChecker;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nfunction makeConverter(TYPE_BYTE) {\n  function decode(keyVal) {\n    if (keyVal.key[0] !== TYPE_BYTE) {\n      throw new Error(\n        'Decode Error: could not decode redeemScript with key 0x' +\n          keyVal.key.toString('hex'),\n      );\n    }\n    return keyVal.value;\n  }\n  function encode(data) {\n    const key = Buffer.from([TYPE_BYTE]);\n    return {\n      key,\n      value: data,\n    };\n  }\n  const expected = 'Buffer';\n  function check(data) {\n    return Buffer.isBuffer(data);\n  }\n  function canAdd(currentData, newData) {\n    return !!currentData && !!newData && currentData.redeemScript === undefined;\n  }\n  return {\n    decode,\n    encode,\n    check,\n    expected,\n    canAdd,\n  };\n}\nexports.makeConverter = makeConverter;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nconst varuint = require('../varint');\nconst bip32Derivation = require('./bip32Derivation');\nconst isValidBIP340Key = pubkey => pubkey.length === 32;\nfunction makeConverter(TYPE_BYTE) {\n  const parent = bip32Derivation.makeConverter(TYPE_BYTE, isValidBIP340Key);\n  function decode(keyVal) {\n    const nHashes = varuint.decode(keyVal.value);\n    const nHashesLen = varuint.encodingLength(nHashes);\n    const base = parent.decode({\n      key: keyVal.key,\n      value: keyVal.value.slice(nHashesLen + nHashes * 32),\n    });\n    const leafHashes = new Array(nHashes);\n    for (let i = 0, _offset = nHashesLen; i < nHashes; i++, _offset += 32) {\n      leafHashes[i] = keyVal.value.slice(_offset, _offset + 32);\n    }\n    return Object.assign({}, base, { leafHashes });\n  }\n  function encode(data) {\n    const base = parent.encode(data);\n    const nHashesLen = varuint.encodingLength(data.leafHashes.length);\n    const nHashesBuf = Buffer.allocUnsafe(nHashesLen);\n    varuint.encode(data.leafHashes.length, nHashesBuf);\n    const value = Buffer.concat([nHashesBuf, ...data.leafHashes, base.value]);\n    return Object.assign({}, base, { value });\n  }\n  const expected =\n    '{ ' +\n    'masterFingerprint: Buffer; ' +\n    'pubkey: Buffer; ' +\n    'path: string; ' +\n    'leafHashes: Buffer[]; ' +\n    '}';\n  function check(data) {\n    return (\n      Array.isArray(data.leafHashes) &&\n      data.leafHashes.every(\n        leafHash => Buffer.isBuffer(leafHash) && leafHash.length === 32,\n      ) &&\n      parent.check(data)\n    );\n  }\n  return {\n    decode,\n    encode,\n    check,\n    expected,\n    canAddToArray: parent.canAddToArray,\n  };\n}\nexports.makeConverter = makeConverter;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nfunction makeConverter(TYPE_BYTE) {\n  function decode(keyVal) {\n    if (keyVal.key[0] !== TYPE_BYTE || keyVal.key.length !== 1) {\n      throw new Error(\n        'Decode Error: could not decode tapInternalKey with key 0x' +\n          keyVal.key.toString('hex'),\n      );\n    }\n    if (keyVal.value.length !== 32) {\n      throw new Error(\n        'Decode Error: tapInternalKey not a 32-byte x-only pubkey',\n      );\n    }\n    return keyVal.value;\n  }\n  function encode(value) {\n    const key = Buffer.from([TYPE_BYTE]);\n    return { key, value };\n  }\n  const expected = 'Buffer';\n  function check(data) {\n    return Buffer.isBuffer(data) && data.length === 32;\n  }\n  function canAdd(currentData, newData) {\n    return (\n      !!currentData && !!newData && currentData.tapInternalKey === undefined\n    );\n  }\n  return {\n    decode,\n    encode,\n    check,\n    expected,\n    canAdd,\n  };\n}\nexports.makeConverter = makeConverter;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nfunction makeConverter(TYPE_BYTE) {\n  function decode(keyVal) {\n    if (keyVal.key[0] !== TYPE_BYTE) {\n      throw new Error(\n        'Decode Error: could not decode witnessScript with key 0x' +\n          keyVal.key.toString('hex'),\n      );\n    }\n    return keyVal.value;\n  }\n  function encode(data) {\n    const key = Buffer.from([TYPE_BYTE]);\n    return {\n      key,\n      value: data,\n    };\n  }\n  const expected = 'Buffer';\n  function check(data) {\n    return Buffer.isBuffer(data);\n  }\n  function canAdd(currentData, newData) {\n    return (\n      !!currentData && !!newData && currentData.witnessScript === undefined\n    );\n  }\n  return {\n    decode,\n    encode,\n    check,\n    expected,\n    canAdd,\n  };\n}\nexports.makeConverter = makeConverter;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nconst typeFields_1 = require('../typeFields');\nconst globalXpub = require('./global/globalXpub');\nconst unsignedTx = require('./global/unsignedTx');\nconst finalScriptSig = require('./input/finalScriptSig');\nconst finalScriptWitness = require('./input/finalScriptWitness');\nconst nonWitnessUtxo = require('./input/nonWitnessUtxo');\nconst partialSig = require('./input/partialSig');\nconst porCommitment = require('./input/porCommitment');\nconst sighashType = require('./input/sighashType');\nconst tapKeySig = require('./input/tapKeySig');\nconst tapLeafScript = require('./input/tapLeafScript');\nconst tapMerkleRoot = require('./input/tapMerkleRoot');\nconst tapScriptSig = require('./input/tapScriptSig');\nconst witnessUtxo = require('./input/witnessUtxo');\nconst tapTree = require('./output/tapTree');\nconst bip32Derivation = require('./shared/bip32Derivation');\nconst checkPubkey = require('./shared/checkPubkey');\nconst redeemScript = require('./shared/redeemScript');\nconst tapBip32Derivation = require('./shared/tapBip32Derivation');\nconst tapInternalKey = require('./shared/tapInternalKey');\nconst witnessScript = require('./shared/witnessScript');\nconst globals = {\n  unsignedTx,\n  globalXpub,\n  // pass an Array of key bytes that require pubkey beside the key\n  checkPubkey: checkPubkey.makeChecker([]),\n};\nexports.globals = globals;\nconst inputs = {\n  nonWitnessUtxo,\n  partialSig,\n  sighashType,\n  finalScriptSig,\n  finalScriptWitness,\n  porCommitment,\n  witnessUtxo,\n  bip32Derivation: bip32Derivation.makeConverter(\n    typeFields_1.InputTypes.BIP32_DERIVATION,\n  ),\n  redeemScript: redeemScript.makeConverter(\n    typeFields_1.InputTypes.REDEEM_SCRIPT,\n  ),\n  witnessScript: witnessScript.makeConverter(\n    typeFields_1.InputTypes.WITNESS_SCRIPT,\n  ),\n  checkPubkey: checkPubkey.makeChecker([\n    typeFields_1.InputTypes.PARTIAL_SIG,\n    typeFields_1.InputTypes.BIP32_DERIVATION,\n  ]),\n  tapKeySig,\n  tapScriptSig,\n  tapLeafScript,\n  tapBip32Derivation: tapBip32Derivation.makeConverter(\n    typeFields_1.InputTypes.TAP_BIP32_DERIVATION,\n  ),\n  tapInternalKey: tapInternalKey.makeConverter(\n    typeFields_1.InputTypes.TAP_INTERNAL_KEY,\n  ),\n  tapMerkleRoot,\n};\nexports.inputs = inputs;\nconst outputs = {\n  bip32Derivation: bip32Derivation.makeConverter(\n    typeFields_1.OutputTypes.BIP32_DERIVATION,\n  ),\n  redeemScript: redeemScript.makeConverter(\n    typeFields_1.OutputTypes.REDEEM_SCRIPT,\n  ),\n  witnessScript: witnessScript.makeConverter(\n    typeFields_1.OutputTypes.WITNESS_SCRIPT,\n  ),\n  checkPubkey: checkPubkey.makeChecker([\n    typeFields_1.OutputTypes.BIP32_DERIVATION,\n  ]),\n  tapBip32Derivation: tapBip32Derivation.makeConverter(\n    typeFields_1.OutputTypes.TAP_BIP32_DERIVATION,\n  ),\n  tapTree,\n  tapInternalKey: tapInternalKey.makeConverter(\n    typeFields_1.OutputTypes.TAP_INTERNAL_KEY,\n  ),\n};\nexports.outputs = outputs;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nconst convert = require('../converter');\nconst tools_1 = require('../converter/tools');\nconst varuint = require('../converter/varint');\nconst typeFields_1 = require('../typeFields');\nfunction psbtFromBuffer(buffer, txGetter) {\n  let offset = 0;\n  function varSlice() {\n    const keyLen = varuint.decode(buffer, offset);\n    offset += varuint.encodingLength(keyLen);\n    const key = buffer.slice(offset, offset + keyLen);\n    offset += keyLen;\n    return key;\n  }\n  function readUInt32BE() {\n    const num = buffer.readUInt32BE(offset);\n    offset += 4;\n    return num;\n  }\n  function readUInt8() {\n    const num = buffer.readUInt8(offset);\n    offset += 1;\n    return num;\n  }\n  function getKeyValue() {\n    const key = varSlice();\n    const value = varSlice();\n    return {\n      key,\n      value,\n    };\n  }\n  function checkEndOfKeyValPairs() {\n    if (offset >= buffer.length) {\n      throw new Error('Format Error: Unexpected End of PSBT');\n    }\n    const isEnd = buffer.readUInt8(offset) === 0;\n    if (isEnd) {\n      offset++;\n    }\n    return isEnd;\n  }\n  if (readUInt32BE() !== 0x70736274) {\n    throw new Error('Format Error: Invalid Magic Number');\n  }\n  if (readUInt8() !== 0xff) {\n    throw new Error(\n      'Format Error: Magic Number must be followed by 0xff separator',\n    );\n  }\n  const globalMapKeyVals = [];\n  const globalKeyIndex = {};\n  while (!checkEndOfKeyValPairs()) {\n    const keyVal = getKeyValue();\n    const hexKey = keyVal.key.toString('hex');\n    if (globalKeyIndex[hexKey]) {\n      throw new Error(\n        'Format Error: Keys must be unique for global keymap: key ' + hexKey,\n      );\n    }\n    globalKeyIndex[hexKey] = 1;\n    globalMapKeyVals.push(keyVal);\n  }\n  const unsignedTxMaps = globalMapKeyVals.filter(\n    keyVal => keyVal.key[0] === typeFields_1.GlobalTypes.UNSIGNED_TX,\n  );\n  if (unsignedTxMaps.length !== 1) {\n    throw new Error('Format Error: Only one UNSIGNED_TX allowed');\n  }\n  const unsignedTx = txGetter(unsignedTxMaps[0].value);\n  // Get input and output counts to loop the respective fields\n  const { inputCount, outputCount } = unsignedTx.getInputOutputCounts();\n  const inputKeyVals = [];\n  const outputKeyVals = [];\n  // Get input fields\n  for (const index of tools_1.range(inputCount)) {\n    const inputKeyIndex = {};\n    const input = [];\n    while (!checkEndOfKeyValPairs()) {\n      const keyVal = getKeyValue();\n      const hexKey = keyVal.key.toString('hex');\n      if (inputKeyIndex[hexKey]) {\n        throw new Error(\n          'Format Error: Keys must be unique for each input: ' +\n            'input index ' +\n            index +\n            ' key ' +\n            hexKey,\n        );\n      }\n      inputKeyIndex[hexKey] = 1;\n      input.push(keyVal);\n    }\n    inputKeyVals.push(input);\n  }\n  for (const index of tools_1.range(outputCount)) {\n    const outputKeyIndex = {};\n    const output = [];\n    while (!checkEndOfKeyValPairs()) {\n      const keyVal = getKeyValue();\n      const hexKey = keyVal.key.toString('hex');\n      if (outputKeyIndex[hexKey]) {\n        throw new Error(\n          'Format Error: Keys must be unique for each output: ' +\n            'output index ' +\n            index +\n            ' key ' +\n            hexKey,\n        );\n      }\n      outputKeyIndex[hexKey] = 1;\n      output.push(keyVal);\n    }\n    outputKeyVals.push(output);\n  }\n  return psbtFromKeyVals(unsignedTx, {\n    globalMapKeyVals,\n    inputKeyVals,\n    outputKeyVals,\n  });\n}\nexports.psbtFromBuffer = psbtFromBuffer;\nfunction checkKeyBuffer(type, keyBuf, keyNum) {\n  if (!keyBuf.equals(Buffer.from([keyNum]))) {\n    throw new Error(\n      `Format Error: Invalid ${type} key: ${keyBuf.toString('hex')}`,\n    );\n  }\n}\nexports.checkKeyBuffer = checkKeyBuffer;\nfunction psbtFromKeyVals(\n  unsignedTx,\n  { globalMapKeyVals, inputKeyVals, outputKeyVals },\n) {\n  // That was easy :-)\n  const globalMap = {\n    unsignedTx,\n  };\n  let txCount = 0;\n  for (const keyVal of globalMapKeyVals) {\n    // If a globalMap item needs pubkey, uncomment\n    // const pubkey = convert.globals.checkPubkey(keyVal);\n    switch (keyVal.key[0]) {\n      case typeFields_1.GlobalTypes.UNSIGNED_TX:\n        checkKeyBuffer(\n          'global',\n          keyVal.key,\n          typeFields_1.GlobalTypes.UNSIGNED_TX,\n        );\n        if (txCount > 0) {\n          throw new Error('Format Error: GlobalMap has multiple UNSIGNED_TX');\n        }\n        txCount++;\n        break;\n      case typeFields_1.GlobalTypes.GLOBAL_XPUB:\n        if (globalMap.globalXpub === undefined) {\n          globalMap.globalXpub = [];\n        }\n        globalMap.globalXpub.push(convert.globals.globalXpub.decode(keyVal));\n        break;\n      default:\n        // This will allow inclusion during serialization.\n        if (!globalMap.unknownKeyVals) globalMap.unknownKeyVals = [];\n        globalMap.unknownKeyVals.push(keyVal);\n    }\n  }\n  // Get input and output counts to loop the respective fields\n  const inputCount = inputKeyVals.length;\n  const outputCount = outputKeyVals.length;\n  const inputs = [];\n  const outputs = [];\n  // Get input fields\n  for (const index of tools_1.range(inputCount)) {\n    const input = {};\n    for (const keyVal of inputKeyVals[index]) {\n      convert.inputs.checkPubkey(keyVal);\n      switch (keyVal.key[0]) {\n        case typeFields_1.InputTypes.NON_WITNESS_UTXO:\n          checkKeyBuffer(\n            'input',\n            keyVal.key,\n            typeFields_1.InputTypes.NON_WITNESS_UTXO,\n          );\n          if (input.nonWitnessUtxo !== undefined) {\n            throw new Error(\n              'Format Error: Input has multiple NON_WITNESS_UTXO',\n            );\n          }\n          input.nonWitnessUtxo = convert.inputs.nonWitnessUtxo.decode(keyVal);\n          break;\n        case typeFields_1.InputTypes.WITNESS_UTXO:\n          checkKeyBuffer(\n            'input',\n            keyVal.key,\n            typeFields_1.InputTypes.WITNESS_UTXO,\n          );\n          if (input.witnessUtxo !== undefined) {\n            throw new Error('Format Error: Input has multiple WITNESS_UTXO');\n          }\n          input.witnessUtxo = convert.inputs.witnessUtxo.decode(keyVal);\n          break;\n        case typeFields_1.InputTypes.PARTIAL_SIG:\n          if (input.partialSig === undefined) {\n            input.partialSig = [];\n          }\n          input.partialSig.push(convert.inputs.partialSig.decode(keyVal));\n          break;\n        case typeFields_1.InputTypes.SIGHASH_TYPE:\n          checkKeyBuffer(\n            'input',\n            keyVal.key,\n            typeFields_1.InputTypes.SIGHASH_TYPE,\n          );\n          if (input.sighashType !== undefined) {\n            throw new Error('Format Error: Input has multiple SIGHASH_TYPE');\n          }\n          input.sighashType = convert.inputs.sighashType.decode(keyVal);\n          break;\n        case typeFields_1.InputTypes.REDEEM_SCRIPT:\n          checkKeyBuffer(\n            'input',\n            keyVal.key,\n            typeFields_1.InputTypes.REDEEM_SCRIPT,\n          );\n          if (input.redeemScript !== undefined) {\n            throw new Error('Format Error: Input has multiple REDEEM_SCRIPT');\n          }\n          input.redeemScript = convert.inputs.redeemScript.decode(keyVal);\n          break;\n        case typeFields_1.InputTypes.WITNESS_SCRIPT:\n          checkKeyBuffer(\n            'input',\n            keyVal.key,\n            typeFields_1.InputTypes.WITNESS_SCRIPT,\n          );\n          if (input.witnessScript !== undefined) {\n            throw new Error('Format Error: Input has multiple WITNESS_SCRIPT');\n          }\n          input.witnessScript = convert.inputs.witnessScript.decode(keyVal);\n          break;\n        case typeFields_1.InputTypes.BIP32_DERIVATION:\n          if (input.bip32Derivation === undefined) {\n            input.bip32Derivation = [];\n          }\n          input.bip32Derivation.push(\n            convert.inputs.bip32Derivation.decode(keyVal),\n          );\n          break;\n        case typeFields_1.InputTypes.FINAL_SCRIPTSIG:\n          checkKeyBuffer(\n            'input',\n            keyVal.key,\n            typeFields_1.InputTypes.FINAL_SCRIPTSIG,\n          );\n          input.finalScriptSig = convert.inputs.finalScriptSig.decode(keyVal);\n          break;\n        case typeFields_1.InputTypes.FINAL_SCRIPTWITNESS:\n          checkKeyBuffer(\n            'input',\n            keyVal.key,\n            typeFields_1.InputTypes.FINAL_SCRIPTWITNESS,\n          );\n          input.finalScriptWitness = convert.inputs.finalScriptWitness.decode(\n            keyVal,\n          );\n          break;\n        case typeFields_1.InputTypes.POR_COMMITMENT:\n          checkKeyBuffer(\n            'input',\n            keyVal.key,\n            typeFields_1.InputTypes.POR_COMMITMENT,\n          );\n          input.porCommitment = convert.inputs.porCommitment.decode(keyVal);\n          break;\n        case typeFields_1.InputTypes.TAP_KEY_SIG:\n          checkKeyBuffer(\n            'input',\n            keyVal.key,\n            typeFields_1.InputTypes.TAP_KEY_SIG,\n          );\n          input.tapKeySig = convert.inputs.tapKeySig.decode(keyVal);\n          break;\n        case typeFields_1.InputTypes.TAP_SCRIPT_SIG:\n          if (input.tapScriptSig === undefined) {\n            input.tapScriptSig = [];\n          }\n          input.tapScriptSig.push(convert.inputs.tapScriptSig.decode(keyVal));\n          break;\n        case typeFields_1.InputTypes.TAP_LEAF_SCRIPT:\n          if (input.tapLeafScript === undefined) {\n            input.tapLeafScript = [];\n          }\n          input.tapLeafScript.push(convert.inputs.tapLeafScript.decode(keyVal));\n          break;\n        case typeFields_1.InputTypes.TAP_BIP32_DERIVATION:\n          if (input.tapBip32Derivation === undefined) {\n            input.tapBip32Derivation = [];\n          }\n          input.tapBip32Derivation.push(\n            convert.inputs.tapBip32Derivation.decode(keyVal),\n          );\n          break;\n        case typeFields_1.InputTypes.TAP_INTERNAL_KEY:\n          checkKeyBuffer(\n            'input',\n            keyVal.key,\n            typeFields_1.InputTypes.TAP_INTERNAL_KEY,\n          );\n          input.tapInternalKey = convert.inputs.tapInternalKey.decode(keyVal);\n          break;\n        case typeFields_1.InputTypes.TAP_MERKLE_ROOT:\n          checkKeyBuffer(\n            'input',\n            keyVal.key,\n            typeFields_1.InputTypes.TAP_MERKLE_ROOT,\n          );\n          input.tapMerkleRoot = convert.inputs.tapMerkleRoot.decode(keyVal);\n          break;\n        default:\n          // This will allow inclusion during serialization.\n          if (!input.unknownKeyVals) input.unknownKeyVals = [];\n          input.unknownKeyVals.push(keyVal);\n      }\n    }\n    inputs.push(input);\n  }\n  for (const index of tools_1.range(outputCount)) {\n    const output = {};\n    for (const keyVal of outputKeyVals[index]) {\n      convert.outputs.checkPubkey(keyVal);\n      switch (keyVal.key[0]) {\n        case typeFields_1.OutputTypes.REDEEM_SCRIPT:\n          checkKeyBuffer(\n            'output',\n            keyVal.key,\n            typeFields_1.OutputTypes.REDEEM_SCRIPT,\n          );\n          if (output.redeemScript !== undefined) {\n            throw new Error('Format Error: Output has multiple REDEEM_SCRIPT');\n          }\n          output.redeemScript = convert.outputs.redeemScript.decode(keyVal);\n          break;\n        case typeFields_1.OutputTypes.WITNESS_SCRIPT:\n          checkKeyBuffer(\n            'output',\n            keyVal.key,\n            typeFields_1.OutputTypes.WITNESS_SCRIPT,\n          );\n          if (output.witnessScript !== undefined) {\n            throw new Error('Format Error: Output has multiple WITNESS_SCRIPT');\n          }\n          output.witnessScript = convert.outputs.witnessScript.decode(keyVal);\n          break;\n        case typeFields_1.OutputTypes.BIP32_DERIVATION:\n          if (output.bip32Derivation === undefined) {\n            output.bip32Derivation = [];\n          }\n          output.bip32Derivation.push(\n            convert.outputs.bip32Derivation.decode(keyVal),\n          );\n          break;\n        case typeFields_1.OutputTypes.TAP_INTERNAL_KEY:\n          checkKeyBuffer(\n            'output',\n            keyVal.key,\n            typeFields_1.OutputTypes.TAP_INTERNAL_KEY,\n          );\n          output.tapInternalKey = convert.outputs.tapInternalKey.decode(keyVal);\n          break;\n        case typeFields_1.OutputTypes.TAP_TREE:\n          checkKeyBuffer(\n            'output',\n            keyVal.key,\n            typeFields_1.OutputTypes.TAP_TREE,\n          );\n          output.tapTree = convert.outputs.tapTree.decode(keyVal);\n          break;\n        case typeFields_1.OutputTypes.TAP_BIP32_DERIVATION:\n          if (output.tapBip32Derivation === undefined) {\n            output.tapBip32Derivation = [];\n          }\n          output.tapBip32Derivation.push(\n            convert.outputs.tapBip32Derivation.decode(keyVal),\n          );\n          break;\n        default:\n          if (!output.unknownKeyVals) output.unknownKeyVals = [];\n          output.unknownKeyVals.push(keyVal);\n      }\n    }\n    outputs.push(output);\n  }\n  return { globalMap, inputs, outputs };\n}\nexports.psbtFromKeyVals = psbtFromKeyVals;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nconst convert = require('../converter');\nconst tools_1 = require('../converter/tools');\nfunction psbtToBuffer({ globalMap, inputs, outputs }) {\n  const { globalKeyVals, inputKeyVals, outputKeyVals } = psbtToKeyVals({\n    globalMap,\n    inputs,\n    outputs,\n  });\n  const globalBuffer = tools_1.keyValsToBuffer(globalKeyVals);\n  const keyValsOrEmptyToBuffer = keyVals =>\n    keyVals.length === 0\n      ? [Buffer.from([0])]\n      : keyVals.map(tools_1.keyValsToBuffer);\n  const inputBuffers = keyValsOrEmptyToBuffer(inputKeyVals);\n  const outputBuffers = keyValsOrEmptyToBuffer(outputKeyVals);\n  const header = Buffer.allocUnsafe(5);\n  header.writeUIntBE(0x70736274ff, 0, 5);\n  return Buffer.concat(\n    [header, globalBuffer].concat(inputBuffers, outputBuffers),\n  );\n}\nexports.psbtToBuffer = psbtToBuffer;\nconst sortKeyVals = (a, b) => {\n  return a.key.compare(b.key);\n};\nfunction keyValsFromMap(keyValMap, converterFactory) {\n  const keyHexSet = new Set();\n  const keyVals = Object.entries(keyValMap).reduce((result, [key, value]) => {\n    if (key === 'unknownKeyVals') return result;\n    // We are checking for undefined anyways. So ignore TS error\n    // @ts-ignore\n    const converter = converterFactory[key];\n    if (converter === undefined) return result;\n    const encodedKeyVals = (Array.isArray(value) ? value : [value]).map(\n      converter.encode,\n    );\n    const keyHexes = encodedKeyVals.map(kv => kv.key.toString('hex'));\n    keyHexes.forEach(hex => {\n      if (keyHexSet.has(hex))\n        throw new Error('Serialize Error: Duplicate key: ' + hex);\n      keyHexSet.add(hex);\n    });\n    return result.concat(encodedKeyVals);\n  }, []);\n  // Get other keyVals that have not yet been gotten\n  const otherKeyVals = keyValMap.unknownKeyVals\n    ? keyValMap.unknownKeyVals.filter(keyVal => {\n        return !keyHexSet.has(keyVal.key.toString('hex'));\n      })\n    : [];\n  return keyVals.concat(otherKeyVals).sort(sortKeyVals);\n}\nfunction psbtToKeyVals({ globalMap, inputs, outputs }) {\n  // First parse the global keyVals\n  // Get any extra keyvals to pass along\n  return {\n    globalKeyVals: keyValsFromMap(globalMap, convert.globals),\n    inputKeyVals: inputs.map(i => keyValsFromMap(i, convert.inputs)),\n    outputKeyVals: outputs.map(o => keyValsFromMap(o, convert.outputs)),\n  };\n}\nexports.psbtToKeyVals = psbtToKeyVals;\n","'use strict';\nfunction __export(m) {\n  for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, '__esModule', { value: true });\n__export(require('./fromBuffer'));\n__export(require('./toBuffer'));\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nconst parser_1 = require('../parser');\nfunction combine(psbts) {\n  const self = psbts[0];\n  const selfKeyVals = parser_1.psbtToKeyVals(self);\n  const others = psbts.slice(1);\n  if (others.length === 0) throw new Error('Combine: Nothing to combine');\n  const selfTx = getTx(self);\n  if (selfTx === undefined) {\n    throw new Error('Combine: Self missing transaction');\n  }\n  const selfGlobalSet = getKeySet(selfKeyVals.globalKeyVals);\n  const selfInputSets = selfKeyVals.inputKeyVals.map(getKeySet);\n  const selfOutputSets = selfKeyVals.outputKeyVals.map(getKeySet);\n  for (const other of others) {\n    const otherTx = getTx(other);\n    if (\n      otherTx === undefined ||\n      !otherTx.toBuffer().equals(selfTx.toBuffer())\n    ) {\n      throw new Error(\n        'Combine: One of the Psbts does not have the same transaction.',\n      );\n    }\n    const otherKeyVals = parser_1.psbtToKeyVals(other);\n    const otherGlobalSet = getKeySet(otherKeyVals.globalKeyVals);\n    otherGlobalSet.forEach(\n      keyPusher(\n        selfGlobalSet,\n        selfKeyVals.globalKeyVals,\n        otherKeyVals.globalKeyVals,\n      ),\n    );\n    const otherInputSets = otherKeyVals.inputKeyVals.map(getKeySet);\n    otherInputSets.forEach((inputSet, idx) =>\n      inputSet.forEach(\n        keyPusher(\n          selfInputSets[idx],\n          selfKeyVals.inputKeyVals[idx],\n          otherKeyVals.inputKeyVals[idx],\n        ),\n      ),\n    );\n    const otherOutputSets = otherKeyVals.outputKeyVals.map(getKeySet);\n    otherOutputSets.forEach((outputSet, idx) =>\n      outputSet.forEach(\n        keyPusher(\n          selfOutputSets[idx],\n          selfKeyVals.outputKeyVals[idx],\n          otherKeyVals.outputKeyVals[idx],\n        ),\n      ),\n    );\n  }\n  return parser_1.psbtFromKeyVals(selfTx, {\n    globalMapKeyVals: selfKeyVals.globalKeyVals,\n    inputKeyVals: selfKeyVals.inputKeyVals,\n    outputKeyVals: selfKeyVals.outputKeyVals,\n  });\n}\nexports.combine = combine;\nfunction keyPusher(selfSet, selfKeyVals, otherKeyVals) {\n  return key => {\n    if (selfSet.has(key)) return;\n    const newKv = otherKeyVals.filter(kv => kv.key.toString('hex') === key)[0];\n    selfKeyVals.push(newKv);\n    selfSet.add(key);\n  };\n}\nfunction getTx(psbt) {\n  return psbt.globalMap.unsignedTx;\n}\nfunction getKeySet(keyVals) {\n  const set = new Set();\n  keyVals.forEach(keyVal => {\n    const hex = keyVal.key.toString('hex');\n    if (set.has(hex))\n      throw new Error('Combine: KeyValue Map keys should be unique');\n    set.add(hex);\n  });\n  return set;\n}\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nconst converter = require('./converter');\nfunction checkForInput(inputs, inputIndex) {\n  const input = inputs[inputIndex];\n  if (input === undefined) throw new Error(`No input #${inputIndex}`);\n  return input;\n}\nexports.checkForInput = checkForInput;\nfunction checkForOutput(outputs, outputIndex) {\n  const output = outputs[outputIndex];\n  if (output === undefined) throw new Error(`No output #${outputIndex}`);\n  return output;\n}\nexports.checkForOutput = checkForOutput;\nfunction checkHasKey(checkKeyVal, keyVals, enumLength) {\n  if (checkKeyVal.key[0] < enumLength) {\n    throw new Error(\n      `Use the method for your specific key instead of addUnknownKeyVal*`,\n    );\n  }\n  if (\n    keyVals &&\n    keyVals.filter(kv => kv.key.equals(checkKeyVal.key)).length !== 0\n  ) {\n    throw new Error(`Duplicate Key: ${checkKeyVal.key.toString('hex')}`);\n  }\n}\nexports.checkHasKey = checkHasKey;\nfunction getEnumLength(myenum) {\n  let count = 0;\n  Object.keys(myenum).forEach(val => {\n    if (Number(isNaN(Number(val)))) {\n      count++;\n    }\n  });\n  return count;\n}\nexports.getEnumLength = getEnumLength;\nfunction inputCheckUncleanFinalized(inputIndex, input) {\n  let result = false;\n  if (input.nonWitnessUtxo || input.witnessUtxo) {\n    const needScriptSig = !!input.redeemScript;\n    const needWitnessScript = !!input.witnessScript;\n    const scriptSigOK = !needScriptSig || !!input.finalScriptSig;\n    const witnessScriptOK = !needWitnessScript || !!input.finalScriptWitness;\n    const hasOneFinal = !!input.finalScriptSig || !!input.finalScriptWitness;\n    result = scriptSigOK && witnessScriptOK && hasOneFinal;\n  }\n  if (result === false) {\n    throw new Error(\n      `Input #${inputIndex} has too much or too little data to clean`,\n    );\n  }\n}\nexports.inputCheckUncleanFinalized = inputCheckUncleanFinalized;\nfunction throwForUpdateMaker(typeName, name, expected, data) {\n  throw new Error(\n    `Data for ${typeName} key ${name} is incorrect: Expected ` +\n      `${expected} and got ${JSON.stringify(data)}`,\n  );\n}\nfunction updateMaker(typeName) {\n  return (updateData, mainData) => {\n    for (const name of Object.keys(updateData)) {\n      // @ts-ignore\n      const data = updateData[name];\n      // @ts-ignore\n      const { canAdd, canAddToArray, check, expected } =\n        // @ts-ignore\n        converter[typeName + 's'][name] || {};\n      const isArray = !!canAddToArray;\n      // If unknown data. ignore and do not add\n      if (check) {\n        if (isArray) {\n          if (\n            !Array.isArray(data) ||\n            // @ts-ignore\n            (mainData[name] && !Array.isArray(mainData[name]))\n          ) {\n            throw new Error(`Key type ${name} must be an array`);\n          }\n          if (!data.every(check)) {\n            throwForUpdateMaker(typeName, name, expected, data);\n          }\n          // @ts-ignore\n          const arr = mainData[name] || [];\n          const dupeCheckSet = new Set();\n          if (!data.every(v => canAddToArray(arr, v, dupeCheckSet))) {\n            throw new Error('Can not add duplicate data to array');\n          }\n          // @ts-ignore\n          mainData[name] = arr.concat(data);\n        } else {\n          if (!check(data)) {\n            throwForUpdateMaker(typeName, name, expected, data);\n          }\n          if (!canAdd(mainData, data)) {\n            throw new Error(`Can not add duplicate data to ${typeName}`);\n          }\n          // @ts-ignore\n          mainData[name] = data;\n        }\n      }\n    }\n  };\n}\nexports.updateGlobal = updateMaker('global');\nexports.updateInput = updateMaker('input');\nexports.updateOutput = updateMaker('output');\nfunction addInputAttributes(inputs, data) {\n  const index = inputs.length - 1;\n  const input = checkForInput(inputs, index);\n  exports.updateInput(data, input);\n}\nexports.addInputAttributes = addInputAttributes;\nfunction addOutputAttributes(outputs, data) {\n  const index = outputs.length - 1;\n  const output = checkForOutput(outputs, index);\n  exports.updateOutput(data, output);\n}\nexports.addOutputAttributes = addOutputAttributes;\nfunction defaultVersionSetter(version, txBuf) {\n  if (!Buffer.isBuffer(txBuf) || txBuf.length < 4) {\n    throw new Error('Set Version: Invalid Transaction');\n  }\n  txBuf.writeUInt32LE(version, 0);\n  return txBuf;\n}\nexports.defaultVersionSetter = defaultVersionSetter;\nfunction defaultLocktimeSetter(locktime, txBuf) {\n  if (!Buffer.isBuffer(txBuf) || txBuf.length < 4) {\n    throw new Error('Set Locktime: Invalid Transaction');\n  }\n  txBuf.writeUInt32LE(locktime, txBuf.length - 4);\n  return txBuf;\n}\nexports.defaultLocktimeSetter = defaultLocktimeSetter;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nconst combiner_1 = require('./combiner');\nconst parser_1 = require('./parser');\nconst typeFields_1 = require('./typeFields');\nconst utils_1 = require('./utils');\nclass Psbt {\n  constructor(tx) {\n    this.inputs = [];\n    this.outputs = [];\n    this.globalMap = {\n      unsignedTx: tx,\n    };\n  }\n  static fromBase64(data, txFromBuffer) {\n    const buffer = Buffer.from(data, 'base64');\n    return this.fromBuffer(buffer, txFromBuffer);\n  }\n  static fromHex(data, txFromBuffer) {\n    const buffer = Buffer.from(data, 'hex');\n    return this.fromBuffer(buffer, txFromBuffer);\n  }\n  static fromBuffer(buffer, txFromBuffer) {\n    const results = parser_1.psbtFromBuffer(buffer, txFromBuffer);\n    const psbt = new this(results.globalMap.unsignedTx);\n    Object.assign(psbt, results);\n    return psbt;\n  }\n  toBase64() {\n    const buffer = this.toBuffer();\n    return buffer.toString('base64');\n  }\n  toHex() {\n    const buffer = this.toBuffer();\n    return buffer.toString('hex');\n  }\n  toBuffer() {\n    return parser_1.psbtToBuffer(this);\n  }\n  updateGlobal(updateData) {\n    utils_1.updateGlobal(updateData, this.globalMap);\n    return this;\n  }\n  updateInput(inputIndex, updateData) {\n    const input = utils_1.checkForInput(this.inputs, inputIndex);\n    utils_1.updateInput(updateData, input);\n    return this;\n  }\n  updateOutput(outputIndex, updateData) {\n    const output = utils_1.checkForOutput(this.outputs, outputIndex);\n    utils_1.updateOutput(updateData, output);\n    return this;\n  }\n  addUnknownKeyValToGlobal(keyVal) {\n    utils_1.checkHasKey(\n      keyVal,\n      this.globalMap.unknownKeyVals,\n      utils_1.getEnumLength(typeFields_1.GlobalTypes),\n    );\n    if (!this.globalMap.unknownKeyVals) this.globalMap.unknownKeyVals = [];\n    this.globalMap.unknownKeyVals.push(keyVal);\n    return this;\n  }\n  addUnknownKeyValToInput(inputIndex, keyVal) {\n    const input = utils_1.checkForInput(this.inputs, inputIndex);\n    utils_1.checkHasKey(\n      keyVal,\n      input.unknownKeyVals,\n      utils_1.getEnumLength(typeFields_1.InputTypes),\n    );\n    if (!input.unknownKeyVals) input.unknownKeyVals = [];\n    input.unknownKeyVals.push(keyVal);\n    return this;\n  }\n  addUnknownKeyValToOutput(outputIndex, keyVal) {\n    const output = utils_1.checkForOutput(this.outputs, outputIndex);\n    utils_1.checkHasKey(\n      keyVal,\n      output.unknownKeyVals,\n      utils_1.getEnumLength(typeFields_1.OutputTypes),\n    );\n    if (!output.unknownKeyVals) output.unknownKeyVals = [];\n    output.unknownKeyVals.push(keyVal);\n    return this;\n  }\n  addInput(inputData) {\n    this.globalMap.unsignedTx.addInput(inputData);\n    this.inputs.push({\n      unknownKeyVals: [],\n    });\n    const addKeyVals = inputData.unknownKeyVals || [];\n    const inputIndex = this.inputs.length - 1;\n    if (!Array.isArray(addKeyVals)) {\n      throw new Error('unknownKeyVals must be an Array');\n    }\n    addKeyVals.forEach(keyVal =>\n      this.addUnknownKeyValToInput(inputIndex, keyVal),\n    );\n    utils_1.addInputAttributes(this.inputs, inputData);\n    return this;\n  }\n  addOutput(outputData) {\n    this.globalMap.unsignedTx.addOutput(outputData);\n    this.outputs.push({\n      unknownKeyVals: [],\n    });\n    const addKeyVals = outputData.unknownKeyVals || [];\n    const outputIndex = this.outputs.length - 1;\n    if (!Array.isArray(addKeyVals)) {\n      throw new Error('unknownKeyVals must be an Array');\n    }\n    addKeyVals.forEach(keyVal =>\n      this.addUnknownKeyValToOutput(outputIndex, keyVal),\n    );\n    utils_1.addOutputAttributes(this.outputs, outputData);\n    return this;\n  }\n  clearFinalizedInput(inputIndex) {\n    const input = utils_1.checkForInput(this.inputs, inputIndex);\n    utils_1.inputCheckUncleanFinalized(inputIndex, input);\n    for (const key of Object.keys(input)) {\n      if (\n        ![\n          'witnessUtxo',\n          'nonWitnessUtxo',\n          'finalScriptSig',\n          'finalScriptWitness',\n          'unknownKeyVals',\n        ].includes(key)\n      ) {\n        // @ts-ignore\n        delete input[key];\n      }\n    }\n    return this;\n  }\n  combine(...those) {\n    // Combine this with those.\n    // Return self for chaining.\n    const result = combiner_1.combine([this].concat(those));\n    Object.assign(this, result);\n    return this;\n  }\n  getTransaction() {\n    return this.globalMap.unsignedTx.toBuffer();\n  }\n}\nexports.Psbt = Psbt;\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.signatureBlocksAction =\n  exports.checkInputForSig =\n  exports.pubkeyInScript =\n  exports.pubkeyPositionInScript =\n  exports.witnessStackToScriptWitness =\n  exports.isP2TR =\n  exports.isP2SHScript =\n  exports.isP2WSHScript =\n  exports.isP2WPKH =\n  exports.isP2PKH =\n  exports.isP2PK =\n  exports.isP2MS =\n    void 0;\nconst varuint = require('bip174/src/lib/converter/varint');\nconst bscript = require('../script');\nconst transaction_1 = require('../transaction');\nconst crypto_1 = require('../crypto');\nconst payments = require('../payments');\nfunction isPaymentFactory(payment) {\n  return script => {\n    try {\n      payment({ output: script });\n      return true;\n    } catch (err) {\n      return false;\n    }\n  };\n}\nexports.isP2MS = isPaymentFactory(payments.p2ms);\nexports.isP2PK = isPaymentFactory(payments.p2pk);\nexports.isP2PKH = isPaymentFactory(payments.p2pkh);\nexports.isP2WPKH = isPaymentFactory(payments.p2wpkh);\nexports.isP2WSHScript = isPaymentFactory(payments.p2wsh);\nexports.isP2SHScript = isPaymentFactory(payments.p2sh);\nexports.isP2TR = isPaymentFactory(payments.p2tr);\n/**\n * Converts a witness stack to a script witness.\n * @param witness The witness stack to convert.\n * @returns The script witness as a Buffer.\n */\n/**\n * Converts a witness stack to a script witness.\n * @param witness The witness stack to convert.\n * @returns The converted script witness.\n */\nfunction witnessStackToScriptWitness(witness) {\n  let buffer = Buffer.allocUnsafe(0);\n  function writeSlice(slice) {\n    buffer = Buffer.concat([buffer, Buffer.from(slice)]);\n  }\n  function writeVarInt(i) {\n    const currentLen = buffer.length;\n    const varintLen = varuint.encodingLength(i);\n    buffer = Buffer.concat([buffer, Buffer.allocUnsafe(varintLen)]);\n    varuint.encode(i, buffer, currentLen);\n  }\n  function writeVarSlice(slice) {\n    writeVarInt(slice.length);\n    writeSlice(slice);\n  }\n  function writeVector(vector) {\n    writeVarInt(vector.length);\n    vector.forEach(writeVarSlice);\n  }\n  writeVector(witness);\n  return buffer;\n}\nexports.witnessStackToScriptWitness = witnessStackToScriptWitness;\n/**\n * Finds the position of a public key in a script.\n * @param pubkey The public key to search for.\n * @param script The script to search in.\n * @returns The index of the public key in the script, or -1 if not found.\n * @throws {Error} If there is an unknown script error.\n */\nfunction pubkeyPositionInScript(pubkey, script) {\n  const pubkeyHash = (0, crypto_1.hash160)(pubkey);\n  const pubkeyXOnly = pubkey.slice(1, 33); // slice before calling?\n  const decompiled = bscript.decompile(script);\n  if (decompiled === null) throw new Error('Unknown script error');\n  return decompiled.findIndex(element => {\n    if (typeof element === 'number') return false;\n    return (\n      element.equals(pubkey) ||\n      element.equals(pubkeyHash) ||\n      element.equals(pubkeyXOnly)\n    );\n  });\n}\nexports.pubkeyPositionInScript = pubkeyPositionInScript;\n/**\n * Checks if a public key is present in a script.\n * @param pubkey The public key to check.\n * @param script The script to search in.\n * @returns A boolean indicating whether the public key is present in the script.\n */\nfunction pubkeyInScript(pubkey, script) {\n  return pubkeyPositionInScript(pubkey, script) !== -1;\n}\nexports.pubkeyInScript = pubkeyInScript;\n/**\n * Checks if an input contains a signature for a specific action.\n * @param input - The input to check.\n * @param action - The action to check for.\n * @returns A boolean indicating whether the input contains a signature for the specified action.\n */\nfunction checkInputForSig(input, action) {\n  const pSigs = extractPartialSigs(input);\n  return pSigs.some(pSig =>\n    signatureBlocksAction(pSig, bscript.signature.decode, action),\n  );\n}\nexports.checkInputForSig = checkInputForSig;\n/**\n * Determines if a given action is allowed for a signature block.\n * @param signature - The signature block.\n * @param signatureDecodeFn - The function used to decode the signature.\n * @param action - The action to be checked.\n * @returns True if the action is allowed, false otherwise.\n */\nfunction signatureBlocksAction(signature, signatureDecodeFn, action) {\n  const { hashType } = signatureDecodeFn(signature);\n  const whitelist = [];\n  const isAnyoneCanPay =\n    hashType & transaction_1.Transaction.SIGHASH_ANYONECANPAY;\n  if (isAnyoneCanPay) whitelist.push('addInput');\n  const hashMod = hashType & 0x1f;\n  switch (hashMod) {\n    case transaction_1.Transaction.SIGHASH_ALL:\n      break;\n    case transaction_1.Transaction.SIGHASH_SINGLE:\n    case transaction_1.Transaction.SIGHASH_NONE:\n      whitelist.push('addOutput');\n      whitelist.push('setInputSequence');\n      break;\n  }\n  if (whitelist.indexOf(action) === -1) {\n    return true;\n  }\n  return false;\n}\nexports.signatureBlocksAction = signatureBlocksAction;\n/**\n * Extracts the signatures from a PsbtInput object.\n * If the input has partial signatures, it returns an array of the signatures.\n * If the input does not have partial signatures, it checks if it has a finalScriptSig or finalScriptWitness.\n * If it does, it extracts the signatures from the final scripts and returns them.\n * If none of the above conditions are met, it returns an empty array.\n *\n * @param input - The PsbtInput object from which to extract the signatures.\n * @returns An array of signatures extracted from the PsbtInput object.\n */\nfunction extractPartialSigs(input) {\n  let pSigs = [];\n  if ((input.partialSig || []).length === 0) {\n    if (!input.finalScriptSig && !input.finalScriptWitness) return [];\n    pSigs = getPsigsFromInputFinalScripts(input);\n  } else {\n    pSigs = input.partialSig;\n  }\n  return pSigs.map(p => p.signature);\n}\n/**\n * Retrieves the partial signatures (Psigs) from the input's final scripts.\n * Psigs are extracted from both the final scriptSig and final scriptWitness of the input.\n * Only canonical script signatures are considered.\n *\n * @param input - The PsbtInput object representing the input.\n * @returns An array of PartialSig objects containing the extracted Psigs.\n */\nfunction getPsigsFromInputFinalScripts(input) {\n  const scriptItems = !input.finalScriptSig\n    ? []\n    : bscript.decompile(input.finalScriptSig) || [];\n  const witnessItems = !input.finalScriptWitness\n    ? []\n    : bscript.decompile(input.finalScriptWitness) || [];\n  return scriptItems\n    .concat(witnessItems)\n    .filter(item => {\n      return Buffer.isBuffer(item) && bscript.isCanonicalScriptSignature(item);\n    })\n    .map(sig => ({ signature: sig }));\n}\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.checkTaprootInputForSigs =\n  exports.tapTreeFromList =\n  exports.tapTreeToList =\n  exports.tweakInternalPubKey =\n  exports.checkTaprootOutputFields =\n  exports.checkTaprootInputFields =\n  exports.isTaprootOutput =\n  exports.isTaprootInput =\n  exports.serializeTaprootSignature =\n  exports.tapScriptFinalizer =\n  exports.toXOnly =\n    void 0;\nconst types_1 = require('../types');\nconst transaction_1 = require('../transaction');\nconst psbtutils_1 = require('./psbtutils');\nconst bip341_1 = require('../payments/bip341');\nconst payments_1 = require('../payments');\nconst psbtutils_2 = require('./psbtutils');\nconst toXOnly = pubKey => (pubKey.length === 32 ? pubKey : pubKey.slice(1, 33));\nexports.toXOnly = toXOnly;\n/**\n * Default tapscript finalizer. It searches for the `tapLeafHashToFinalize` if provided.\n * Otherwise it will search for the tapleaf that has at least one signature and has the shortest path.\n * @param inputIndex the position of the PSBT input.\n * @param input the PSBT input.\n * @param tapLeafHashToFinalize optional, if provided the finalizer will search for a tapleaf that has this hash\n *                              and will try to build the finalScriptWitness.\n * @returns the finalScriptWitness or throws an exception if no tapleaf found.\n */\nfunction tapScriptFinalizer(inputIndex, input, tapLeafHashToFinalize) {\n  const tapLeaf = findTapLeafToFinalize(\n    input,\n    inputIndex,\n    tapLeafHashToFinalize,\n  );\n  try {\n    const sigs = sortSignatures(input, tapLeaf);\n    const witness = sigs.concat(tapLeaf.script).concat(tapLeaf.controlBlock);\n    return {\n      finalScriptWitness: (0, psbtutils_1.witnessStackToScriptWitness)(witness),\n    };\n  } catch (err) {\n    throw new Error(`Can not finalize taproot input #${inputIndex}: ${err}`);\n  }\n}\nexports.tapScriptFinalizer = tapScriptFinalizer;\nfunction serializeTaprootSignature(sig, sighashType) {\n  const sighashTypeByte = sighashType\n    ? Buffer.from([sighashType])\n    : Buffer.from([]);\n  return Buffer.concat([sig, sighashTypeByte]);\n}\nexports.serializeTaprootSignature = serializeTaprootSignature;\nfunction isTaprootInput(input) {\n  return (\n    input &&\n    !!(\n      input.tapInternalKey ||\n      input.tapMerkleRoot ||\n      (input.tapLeafScript && input.tapLeafScript.length) ||\n      (input.tapBip32Derivation && input.tapBip32Derivation.length) ||\n      (input.witnessUtxo && (0, psbtutils_1.isP2TR)(input.witnessUtxo.script))\n    )\n  );\n}\nexports.isTaprootInput = isTaprootInput;\nfunction isTaprootOutput(output, script) {\n  return (\n    output &&\n    !!(\n      output.tapInternalKey ||\n      output.tapTree ||\n      (output.tapBip32Derivation && output.tapBip32Derivation.length) ||\n      (script && (0, psbtutils_1.isP2TR)(script))\n    )\n  );\n}\nexports.isTaprootOutput = isTaprootOutput;\nfunction checkTaprootInputFields(inputData, newInputData, action) {\n  checkMixedTaprootAndNonTaprootInputFields(inputData, newInputData, action);\n  checkIfTapLeafInTree(inputData, newInputData, action);\n}\nexports.checkTaprootInputFields = checkTaprootInputFields;\nfunction checkTaprootOutputFields(outputData, newOutputData, action) {\n  checkMixedTaprootAndNonTaprootOutputFields(outputData, newOutputData, action);\n  checkTaprootScriptPubkey(outputData, newOutputData);\n}\nexports.checkTaprootOutputFields = checkTaprootOutputFields;\nfunction checkTaprootScriptPubkey(outputData, newOutputData) {\n  if (!newOutputData.tapTree && !newOutputData.tapInternalKey) return;\n  const tapInternalKey =\n    newOutputData.tapInternalKey || outputData.tapInternalKey;\n  const tapTree = newOutputData.tapTree || outputData.tapTree;\n  if (tapInternalKey) {\n    const { script: scriptPubkey } = outputData;\n    const script = getTaprootScripPubkey(tapInternalKey, tapTree);\n    if (scriptPubkey && !scriptPubkey.equals(script))\n      throw new Error('Error adding output. Script or address missmatch.');\n  }\n}\nfunction getTaprootScripPubkey(tapInternalKey, tapTree) {\n  const scriptTree = tapTree && tapTreeFromList(tapTree.leaves);\n  const { output } = (0, payments_1.p2tr)({\n    internalPubkey: tapInternalKey,\n    scriptTree,\n  });\n  return output;\n}\nfunction tweakInternalPubKey(inputIndex, input) {\n  const tapInternalKey = input.tapInternalKey;\n  const outputKey =\n    tapInternalKey &&\n    (0, bip341_1.tweakKey)(tapInternalKey, input.tapMerkleRoot);\n  if (!outputKey)\n    throw new Error(\n      `Cannot tweak tap internal key for input #${inputIndex}. Public key: ${\n        tapInternalKey && tapInternalKey.toString('hex')\n      }`,\n    );\n  return outputKey.x;\n}\nexports.tweakInternalPubKey = tweakInternalPubKey;\n/**\n * Convert a binary tree to a BIP371 type list. Each element of the list is (according to BIP371):\n * One or more tuples representing the depth, leaf version, and script for a leaf in the Taproot tree,\n * allowing the entire tree to be reconstructed. The tuples must be in depth first search order so that\n * the tree is correctly reconstructed.\n * @param tree the binary tap tree\n * @returns a list of BIP 371 tapleaves\n */\nfunction tapTreeToList(tree) {\n  if (!(0, types_1.isTaptree)(tree))\n    throw new Error(\n      'Cannot convert taptree to tapleaf list. Expecting a tapree structure.',\n    );\n  return _tapTreeToList(tree);\n}\nexports.tapTreeToList = tapTreeToList;\n/**\n * Convert a BIP371 TapLeaf list to a TapTree (binary).\n * @param leaves a list of tapleaves where each element of the list is (according to BIP371):\n * One or more tuples representing the depth, leaf version, and script for a leaf in the Taproot tree,\n * allowing the entire tree to be reconstructed. The tuples must be in depth first search order so that\n * the tree is correctly reconstructed.\n * @returns the corresponding taptree, or throws an exception if the tree cannot be reconstructed\n */\nfunction tapTreeFromList(leaves = []) {\n  if (leaves.length === 1 && leaves[0].depth === 0)\n    return {\n      output: leaves[0].script,\n      version: leaves[0].leafVersion,\n    };\n  return instertLeavesInTree(leaves);\n}\nexports.tapTreeFromList = tapTreeFromList;\nfunction checkTaprootInputForSigs(input, action) {\n  const sigs = extractTaprootSigs(input);\n  return sigs.some(sig =>\n    (0, psbtutils_2.signatureBlocksAction)(sig, decodeSchnorrSignature, action),\n  );\n}\nexports.checkTaprootInputForSigs = checkTaprootInputForSigs;\nfunction decodeSchnorrSignature(signature) {\n  return {\n    signature: signature.slice(0, 64),\n    hashType:\n      signature.slice(64)[0] || transaction_1.Transaction.SIGHASH_DEFAULT,\n  };\n}\nfunction extractTaprootSigs(input) {\n  const sigs = [];\n  if (input.tapKeySig) sigs.push(input.tapKeySig);\n  if (input.tapScriptSig)\n    sigs.push(...input.tapScriptSig.map(s => s.signature));\n  if (!sigs.length) {\n    const finalTapKeySig = getTapKeySigFromWithness(input.finalScriptWitness);\n    if (finalTapKeySig) sigs.push(finalTapKeySig);\n  }\n  return sigs;\n}\nfunction getTapKeySigFromWithness(finalScriptWitness) {\n  if (!finalScriptWitness) return;\n  const witness = finalScriptWitness.slice(2);\n  // todo: add schnorr signature validation\n  if (witness.length === 64 || witness.length === 65) return witness;\n}\nfunction _tapTreeToList(tree, leaves = [], depth = 0) {\n  if (depth > bip341_1.MAX_TAPTREE_DEPTH)\n    throw new Error('Max taptree depth exceeded.');\n  if (!tree) return [];\n  if ((0, types_1.isTapleaf)(tree)) {\n    leaves.push({\n      depth,\n      leafVersion: tree.version || bip341_1.LEAF_VERSION_TAPSCRIPT,\n      script: tree.output,\n    });\n    return leaves;\n  }\n  if (tree[0]) _tapTreeToList(tree[0], leaves, depth + 1);\n  if (tree[1]) _tapTreeToList(tree[1], leaves, depth + 1);\n  return leaves;\n}\nfunction instertLeavesInTree(leaves) {\n  let tree;\n  for (const leaf of leaves) {\n    tree = instertLeafInTree(leaf, tree);\n    if (!tree) throw new Error(`No room left to insert tapleaf in tree`);\n  }\n  return tree;\n}\nfunction instertLeafInTree(leaf, tree, depth = 0) {\n  if (depth > bip341_1.MAX_TAPTREE_DEPTH)\n    throw new Error('Max taptree depth exceeded.');\n  if (leaf.depth === depth) {\n    if (!tree)\n      return {\n        output: leaf.script,\n        version: leaf.leafVersion,\n      };\n    return;\n  }\n  if ((0, types_1.isTapleaf)(tree)) return;\n  const leftSide = instertLeafInTree(leaf, tree && tree[0], depth + 1);\n  if (leftSide) return [leftSide, tree && tree[1]];\n  const rightSide = instertLeafInTree(leaf, tree && tree[1], depth + 1);\n  if (rightSide) return [tree && tree[0], rightSide];\n}\nfunction checkMixedTaprootAndNonTaprootInputFields(\n  inputData,\n  newInputData,\n  action,\n) {\n  const isBadTaprootUpdate =\n    isTaprootInput(inputData) && hasNonTaprootFields(newInputData);\n  const isBadNonTaprootUpdate =\n    hasNonTaprootFields(inputData) && isTaprootInput(newInputData);\n  const hasMixedFields =\n    inputData === newInputData &&\n    isTaprootInput(newInputData) &&\n    hasNonTaprootFields(newInputData); // todo: bad? use !===\n  if (isBadTaprootUpdate || isBadNonTaprootUpdate || hasMixedFields)\n    throw new Error(\n      `Invalid arguments for Psbt.${action}. ` +\n        `Cannot use both taproot and non-taproot fields.`,\n    );\n}\nfunction checkMixedTaprootAndNonTaprootOutputFields(\n  inputData,\n  newInputData,\n  action,\n) {\n  const isBadTaprootUpdate =\n    isTaprootOutput(inputData) && hasNonTaprootFields(newInputData);\n  const isBadNonTaprootUpdate =\n    hasNonTaprootFields(inputData) && isTaprootOutput(newInputData);\n  const hasMixedFields =\n    inputData === newInputData &&\n    isTaprootOutput(newInputData) &&\n    hasNonTaprootFields(newInputData);\n  if (isBadTaprootUpdate || isBadNonTaprootUpdate || hasMixedFields)\n    throw new Error(\n      `Invalid arguments for Psbt.${action}. ` +\n        `Cannot use both taproot and non-taproot fields.`,\n    );\n}\n/**\n * Checks if the tap leaf is part of the tap tree for the given input data.\n * Throws an error if the tap leaf is not part of the tap tree.\n * @param inputData - The original PsbtInput data.\n * @param newInputData - The new PsbtInput data.\n * @param action - The action being performed.\n * @throws {Error} - If the tap leaf is not part of the tap tree.\n */\nfunction checkIfTapLeafInTree(inputData, newInputData, action) {\n  if (newInputData.tapMerkleRoot) {\n    const newLeafsInTree = (newInputData.tapLeafScript || []).every(l =>\n      isTapLeafInTree(l, newInputData.tapMerkleRoot),\n    );\n    const oldLeafsInTree = (inputData.tapLeafScript || []).every(l =>\n      isTapLeafInTree(l, newInputData.tapMerkleRoot),\n    );\n    if (!newLeafsInTree || !oldLeafsInTree)\n      throw new Error(\n        `Invalid arguments for Psbt.${action}. Tapleaf not part of taptree.`,\n      );\n  } else if (inputData.tapMerkleRoot) {\n    const newLeafsInTree = (newInputData.tapLeafScript || []).every(l =>\n      isTapLeafInTree(l, inputData.tapMerkleRoot),\n    );\n    if (!newLeafsInTree)\n      throw new Error(\n        `Invalid arguments for Psbt.${action}. Tapleaf not part of taptree.`,\n      );\n  }\n}\n/**\n * Checks if a TapLeafScript is present in a Merkle tree.\n * @param tapLeaf The TapLeafScript to check.\n * @param merkleRoot The Merkle root of the tree. If not provided, the function assumes the TapLeafScript is present.\n * @returns A boolean indicating whether the TapLeafScript is present in the tree.\n */\nfunction isTapLeafInTree(tapLeaf, merkleRoot) {\n  if (!merkleRoot) return true;\n  const leafHash = (0, bip341_1.tapleafHash)({\n    output: tapLeaf.script,\n    version: tapLeaf.leafVersion,\n  });\n  const rootHash = (0, bip341_1.rootHashFromPath)(\n    tapLeaf.controlBlock,\n    leafHash,\n  );\n  return rootHash.equals(merkleRoot);\n}\n/**\n * Sorts the signatures in the input's tapScriptSig array based on their position in the tapLeaf script.\n *\n * @param input - The PsbtInput object.\n * @param tapLeaf - The TapLeafScript object.\n * @returns An array of sorted signatures as Buffers.\n */\nfunction sortSignatures(input, tapLeaf) {\n  const leafHash = (0, bip341_1.tapleafHash)({\n    output: tapLeaf.script,\n    version: tapLeaf.leafVersion,\n  });\n  return (input.tapScriptSig || [])\n    .filter(tss => tss.leafHash.equals(leafHash))\n    .map(tss => addPubkeyPositionInScript(tapLeaf.script, tss))\n    .sort((t1, t2) => t2.positionInScript - t1.positionInScript)\n    .map(t => t.signature);\n}\n/**\n * Adds the position of a public key in a script to a TapScriptSig object.\n * @param script The script in which to find the position of the public key.\n * @param tss The TapScriptSig object to add the position to.\n * @returns A TapScriptSigWitPosition object with the added position.\n */\nfunction addPubkeyPositionInScript(script, tss) {\n  return Object.assign(\n    {\n      positionInScript: (0, psbtutils_1.pubkeyPositionInScript)(\n        tss.pubkey,\n        script,\n      ),\n    },\n    tss,\n  );\n}\n/**\n * Find tapleaf by hash, or get the signed tapleaf with the shortest path.\n */\nfunction findTapLeafToFinalize(input, inputIndex, leafHashToFinalize) {\n  if (!input.tapScriptSig || !input.tapScriptSig.length)\n    throw new Error(\n      `Can not finalize taproot input #${inputIndex}. No tapleaf script signature provided.`,\n    );\n  const tapLeaf = (input.tapLeafScript || [])\n    .sort((a, b) => a.controlBlock.length - b.controlBlock.length)\n    .find(leaf =>\n      canFinalizeLeaf(leaf, input.tapScriptSig, leafHashToFinalize),\n    );\n  if (!tapLeaf)\n    throw new Error(\n      `Can not finalize taproot input #${inputIndex}. Signature for tapleaf script not found.`,\n    );\n  return tapLeaf;\n}\n/**\n * Determines whether a TapLeafScript can be finalized.\n *\n * @param leaf - The TapLeafScript to check.\n * @param tapScriptSig - The array of TapScriptSig objects.\n * @param hash - The optional hash to compare with the leaf hash.\n * @returns A boolean indicating whether the TapLeafScript can be finalized.\n */\nfunction canFinalizeLeaf(leaf, tapScriptSig, hash) {\n  const leafHash = (0, bip341_1.tapleafHash)({\n    output: leaf.script,\n    version: leaf.leafVersion,\n  });\n  const whiteListedHash = !hash || hash.equals(leafHash);\n  return (\n    whiteListedHash &&\n    tapScriptSig.find(tss => tss.leafHash.equals(leafHash)) !== undefined\n  );\n}\n/**\n * Checks if the given PsbtInput or PsbtOutput has non-taproot fields.\n * Non-taproot fields include redeemScript, witnessScript, and bip32Derivation.\n * @param io The PsbtInput or PsbtOutput to check.\n * @returns A boolean indicating whether the given input or output has non-taproot fields.\n */\nfunction hasNonTaprootFields(io) {\n  return (\n    io &&\n    !!(\n      io.redeemScript ||\n      io.witnessScript ||\n      (io.bip32Derivation && io.bip32Derivation.length)\n    )\n  );\n}\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.Psbt = void 0;\nconst bip174_1 = require('bip174');\nconst varuint = require('bip174/src/lib/converter/varint');\nconst utils_1 = require('bip174/src/lib/utils');\nconst address_1 = require('./address');\nconst bufferutils_1 = require('./bufferutils');\nconst networks_1 = require('./networks');\nconst payments = require('./payments');\nconst bip341_1 = require('./payments/bip341');\nconst bscript = require('./script');\nconst transaction_1 = require('./transaction');\nconst bip371_1 = require('./psbt/bip371');\nconst psbtutils_1 = require('./psbt/psbtutils');\n/**\n * These are the default arguments for a Psbt instance.\n */\nconst DEFAULT_OPTS = {\n  /**\n   * A bitcoinjs Network object. This is only used if you pass an `address`\n   * parameter to addOutput. Otherwise it is not needed and can be left default.\n   */\n  network: networks_1.bitcoin,\n  /**\n   * When extractTransaction is called, the fee rate is checked.\n   * THIS IS NOT TO BE RELIED ON.\n   * It is only here as a last ditch effort to prevent sending a 500 BTC fee etc.\n   */\n  maximumFeeRate: 5000, // satoshi per byte\n};\n/**\n * Psbt class can parse and generate a PSBT binary based off of the BIP174.\n * There are 6 roles that this class fulfills. (Explained in BIP174)\n *\n * Creator: This can be done with `new Psbt()`\n *\n * Updater: This can be done with `psbt.addInput(input)`, `psbt.addInputs(inputs)`,\n *   `psbt.addOutput(output)`, `psbt.addOutputs(outputs)` when you are looking to\n *   add new inputs and outputs to the PSBT, and `psbt.updateGlobal(itemObject)`,\n *   `psbt.updateInput(itemObject)`, `psbt.updateOutput(itemObject)`\n *   addInput requires hash: Buffer | string; and index: number; as attributes\n *   and can also include any attributes that are used in updateInput method.\n *   addOutput requires script: Buffer; and value: number; and likewise can include\n *   data for updateOutput.\n *   For a list of what attributes should be what types. Check the bip174 library.\n *   Also, check the integration tests for some examples of usage.\n *\n * Signer: There are a few methods. signAllInputs and signAllInputsAsync, which will search all input\n *   information for your pubkey or pubkeyhash, and only sign inputs where it finds\n *   your info. Or you can explicitly sign a specific input with signInput and\n *   signInputAsync. For the async methods you can create a SignerAsync object\n *   and use something like a hardware wallet to sign with. (You must implement this)\n *\n * Combiner: psbts can be combined easily with `psbt.combine(psbt2, psbt3, psbt4 ...)`\n *   the psbt calling combine will always have precedence when a conflict occurs.\n *   Combine checks if the internal bitcoin transaction is the same, so be sure that\n *   all sequences, version, locktime, etc. are the same before combining.\n *\n * Input Finalizer: This role is fairly important. Not only does it need to construct\n *   the input scriptSigs and witnesses, but it SHOULD verify the signatures etc.\n *   Before running `psbt.finalizeAllInputs()` please run `psbt.validateSignaturesOfAllInputs()`\n *   Running any finalize method will delete any data in the input(s) that are no longer\n *   needed due to the finalized scripts containing the information.\n *\n * Transaction Extractor: This role will perform some checks before returning a\n *   Transaction object. Such as fee rate not being larger than maximumFeeRate etc.\n */\nclass Psbt {\n  static fromBase64(data, opts = {}) {\n    const buffer = Buffer.from(data, 'base64');\n    return this.fromBuffer(buffer, opts);\n  }\n  static fromHex(data, opts = {}) {\n    const buffer = Buffer.from(data, 'hex');\n    return this.fromBuffer(buffer, opts);\n  }\n  static fromBuffer(buffer, opts = {}) {\n    const psbtBase = bip174_1.Psbt.fromBuffer(buffer, transactionFromBuffer);\n    const psbt = new Psbt(opts, psbtBase);\n    checkTxForDupeIns(psbt.__CACHE.__TX, psbt.__CACHE);\n    return psbt;\n  }\n  constructor(opts = {}, data = new bip174_1.Psbt(new PsbtTransaction())) {\n    this.data = data;\n    // set defaults\n    this.opts = Object.assign({}, DEFAULT_OPTS, opts);\n    this.__CACHE = {\n      __NON_WITNESS_UTXO_TX_CACHE: [],\n      __NON_WITNESS_UTXO_BUF_CACHE: [],\n      __TX_IN_CACHE: {},\n      __TX: this.data.globalMap.unsignedTx.tx,\n      // Psbt's predecessor (TransactionBuilder - now removed) behavior\n      // was to not confirm input values  before signing.\n      // Even though we highly encourage people to get\n      // the full parent transaction to verify values, the ability to\n      // sign non-segwit inputs without the full transaction was often\n      // requested. So the only way to activate is to use @ts-ignore.\n      // We will disable exporting the Psbt when unsafe sign is active.\n      // because it is not BIP174 compliant.\n      __UNSAFE_SIGN_NONSEGWIT: false,\n    };\n    if (this.data.inputs.length === 0) this.setVersion(2);\n    // Make data hidden when enumerating\n    const dpew = (obj, attr, enumerable, writable) =>\n      Object.defineProperty(obj, attr, {\n        enumerable,\n        writable,\n      });\n    dpew(this, '__CACHE', false, true);\n    dpew(this, 'opts', false, true);\n  }\n  get inputCount() {\n    return this.data.inputs.length;\n  }\n  get version() {\n    return this.__CACHE.__TX.version;\n  }\n  set version(version) {\n    this.setVersion(version);\n  }\n  get locktime() {\n    return this.__CACHE.__TX.locktime;\n  }\n  set locktime(locktime) {\n    this.setLocktime(locktime);\n  }\n  get txInputs() {\n    return this.__CACHE.__TX.ins.map(input => ({\n      hash: (0, bufferutils_1.cloneBuffer)(input.hash),\n      index: input.index,\n      sequence: input.sequence,\n    }));\n  }\n  get txOutputs() {\n    return this.__CACHE.__TX.outs.map(output => {\n      let address;\n      try {\n        address = (0, address_1.fromOutputScript)(\n          output.script,\n          this.opts.network,\n        );\n      } catch (_) {}\n      return {\n        script: (0, bufferutils_1.cloneBuffer)(output.script),\n        value: output.value,\n        address,\n      };\n    });\n  }\n  combine(...those) {\n    this.data.combine(...those.map(o => o.data));\n    return this;\n  }\n  clone() {\n    // TODO: more efficient cloning\n    const res = Psbt.fromBuffer(this.data.toBuffer());\n    res.opts = JSON.parse(JSON.stringify(this.opts));\n    return res;\n  }\n  setMaximumFeeRate(satoshiPerByte) {\n    check32Bit(satoshiPerByte); // 42.9 BTC per byte IS excessive... so throw\n    this.opts.maximumFeeRate = satoshiPerByte;\n  }\n  setVersion(version) {\n    check32Bit(version);\n    checkInputsForPartialSig(this.data.inputs, 'setVersion');\n    const c = this.__CACHE;\n    c.__TX.version = version;\n    c.__EXTRACTED_TX = undefined;\n    return this;\n  }\n  setLocktime(locktime) {\n    check32Bit(locktime);\n    checkInputsForPartialSig(this.data.inputs, 'setLocktime');\n    const c = this.__CACHE;\n    c.__TX.locktime = locktime;\n    c.__EXTRACTED_TX = undefined;\n    return this;\n  }\n  setInputSequence(inputIndex, sequence) {\n    check32Bit(sequence);\n    checkInputsForPartialSig(this.data.inputs, 'setInputSequence');\n    const c = this.__CACHE;\n    if (c.__TX.ins.length <= inputIndex) {\n      throw new Error('Input index too high');\n    }\n    c.__TX.ins[inputIndex].sequence = sequence;\n    c.__EXTRACTED_TX = undefined;\n    return this;\n  }\n  addInputs(inputDatas) {\n    inputDatas.forEach(inputData => this.addInput(inputData));\n    return this;\n  }\n  addInput(inputData) {\n    if (\n      arguments.length > 1 ||\n      !inputData ||\n      inputData.hash === undefined ||\n      inputData.index === undefined\n    ) {\n      throw new Error(\n        `Invalid arguments for Psbt.addInput. ` +\n          `Requires single object with at least [hash] and [index]`,\n      );\n    }\n    (0, bip371_1.checkTaprootInputFields)(inputData, inputData, 'addInput');\n    checkInputsForPartialSig(this.data.inputs, 'addInput');\n    if (inputData.witnessScript) checkInvalidP2WSH(inputData.witnessScript);\n    const c = this.__CACHE;\n    this.data.addInput(inputData);\n    const txIn = c.__TX.ins[c.__TX.ins.length - 1];\n    checkTxInputCache(c, txIn);\n    const inputIndex = this.data.inputs.length - 1;\n    const input = this.data.inputs[inputIndex];\n    if (input.nonWitnessUtxo) {\n      addNonWitnessTxCache(this.__CACHE, input, inputIndex);\n    }\n    c.__FEE = undefined;\n    c.__FEE_RATE = undefined;\n    c.__EXTRACTED_TX = undefined;\n    return this;\n  }\n  addOutputs(outputDatas) {\n    outputDatas.forEach(outputData => this.addOutput(outputData));\n    return this;\n  }\n  addOutput(outputData) {\n    if (\n      arguments.length > 1 ||\n      !outputData ||\n      outputData.value === undefined ||\n      (outputData.address === undefined && outputData.script === undefined)\n    ) {\n      throw new Error(\n        `Invalid arguments for Psbt.addOutput. ` +\n          `Requires single object with at least [script or address] and [value]`,\n      );\n    }\n    checkInputsForPartialSig(this.data.inputs, 'addOutput');\n    const { address } = outputData;\n    if (typeof address === 'string') {\n      const { network } = this.opts;\n      const script = (0, address_1.toOutputScript)(address, network);\n      outputData = Object.assign({}, outputData, { script });\n    }\n    (0, bip371_1.checkTaprootOutputFields)(outputData, outputData, 'addOutput');\n    const c = this.__CACHE;\n    this.data.addOutput(outputData);\n    c.__FEE = undefined;\n    c.__FEE_RATE = undefined;\n    c.__EXTRACTED_TX = undefined;\n    return this;\n  }\n  extractTransaction(disableFeeCheck) {\n    if (!this.data.inputs.every(isFinalized)) throw new Error('Not finalized');\n    const c = this.__CACHE;\n    if (!disableFeeCheck) {\n      checkFees(this, c, this.opts);\n    }\n    if (c.__EXTRACTED_TX) return c.__EXTRACTED_TX;\n    const tx = c.__TX.clone();\n    inputFinalizeGetAmts(this.data.inputs, tx, c, true);\n    return tx;\n  }\n  getFeeRate() {\n    return getTxCacheValue(\n      '__FEE_RATE',\n      'fee rate',\n      this.data.inputs,\n      this.__CACHE,\n    );\n  }\n  getFee() {\n    return getTxCacheValue('__FEE', 'fee', this.data.inputs, this.__CACHE);\n  }\n  finalizeAllInputs() {\n    (0, utils_1.checkForInput)(this.data.inputs, 0); // making sure we have at least one\n    range(this.data.inputs.length).forEach(idx => this.finalizeInput(idx));\n    return this;\n  }\n  finalizeInput(inputIndex, finalScriptsFunc) {\n    const input = (0, utils_1.checkForInput)(this.data.inputs, inputIndex);\n    if ((0, bip371_1.isTaprootInput)(input))\n      return this._finalizeTaprootInput(\n        inputIndex,\n        input,\n        undefined,\n        finalScriptsFunc,\n      );\n    return this._finalizeInput(inputIndex, input, finalScriptsFunc);\n  }\n  finalizeTaprootInput(\n    inputIndex,\n    tapLeafHashToFinalize,\n    finalScriptsFunc = bip371_1.tapScriptFinalizer,\n  ) {\n    const input = (0, utils_1.checkForInput)(this.data.inputs, inputIndex);\n    if ((0, bip371_1.isTaprootInput)(input))\n      return this._finalizeTaprootInput(\n        inputIndex,\n        input,\n        tapLeafHashToFinalize,\n        finalScriptsFunc,\n      );\n    throw new Error(`Cannot finalize input #${inputIndex}. Not Taproot.`);\n  }\n  _finalizeInput(inputIndex, input, finalScriptsFunc = getFinalScripts) {\n    const { script, isP2SH, isP2WSH, isSegwit } = getScriptFromInput(\n      inputIndex,\n      input,\n      this.__CACHE,\n    );\n    if (!script) throw new Error(`No script found for input #${inputIndex}`);\n    checkPartialSigSighashes(input);\n    const { finalScriptSig, finalScriptWitness } = finalScriptsFunc(\n      inputIndex,\n      input,\n      script,\n      isSegwit,\n      isP2SH,\n      isP2WSH,\n    );\n    if (finalScriptSig) this.data.updateInput(inputIndex, { finalScriptSig });\n    if (finalScriptWitness)\n      this.data.updateInput(inputIndex, { finalScriptWitness });\n    if (!finalScriptSig && !finalScriptWitness)\n      throw new Error(`Unknown error finalizing input #${inputIndex}`);\n    this.data.clearFinalizedInput(inputIndex);\n    return this;\n  }\n  _finalizeTaprootInput(\n    inputIndex,\n    input,\n    tapLeafHashToFinalize,\n    finalScriptsFunc = bip371_1.tapScriptFinalizer,\n  ) {\n    if (!input.witnessUtxo)\n      throw new Error(\n        `Cannot finalize input #${inputIndex}. Missing withness utxo.`,\n      );\n    // Check key spend first. Increased privacy and reduced block space.\n    if (input.tapKeySig) {\n      const payment = payments.p2tr({\n        output: input.witnessUtxo.script,\n        signature: input.tapKeySig,\n      });\n      const finalScriptWitness = (0, psbtutils_1.witnessStackToScriptWitness)(\n        payment.witness,\n      );\n      this.data.updateInput(inputIndex, { finalScriptWitness });\n    } else {\n      const { finalScriptWitness } = finalScriptsFunc(\n        inputIndex,\n        input,\n        tapLeafHashToFinalize,\n      );\n      this.data.updateInput(inputIndex, { finalScriptWitness });\n    }\n    this.data.clearFinalizedInput(inputIndex);\n    return this;\n  }\n  getInputType(inputIndex) {\n    const input = (0, utils_1.checkForInput)(this.data.inputs, inputIndex);\n    const script = getScriptFromUtxo(inputIndex, input, this.__CACHE);\n    const result = getMeaningfulScript(\n      script,\n      inputIndex,\n      'input',\n      input.redeemScript || redeemFromFinalScriptSig(input.finalScriptSig),\n      input.witnessScript ||\n        redeemFromFinalWitnessScript(input.finalScriptWitness),\n    );\n    const type = result.type === 'raw' ? '' : result.type + '-';\n    const mainType = classifyScript(result.meaningfulScript);\n    return type + mainType;\n  }\n  inputHasPubkey(inputIndex, pubkey) {\n    const input = (0, utils_1.checkForInput)(this.data.inputs, inputIndex);\n    return pubkeyInInput(pubkey, input, inputIndex, this.__CACHE);\n  }\n  inputHasHDKey(inputIndex, root) {\n    const input = (0, utils_1.checkForInput)(this.data.inputs, inputIndex);\n    const derivationIsMine = bip32DerivationIsMine(root);\n    return (\n      !!input.bip32Derivation && input.bip32Derivation.some(derivationIsMine)\n    );\n  }\n  outputHasPubkey(outputIndex, pubkey) {\n    const output = (0, utils_1.checkForOutput)(this.data.outputs, outputIndex);\n    return pubkeyInOutput(pubkey, output, outputIndex, this.__CACHE);\n  }\n  outputHasHDKey(outputIndex, root) {\n    const output = (0, utils_1.checkForOutput)(this.data.outputs, outputIndex);\n    const derivationIsMine = bip32DerivationIsMine(root);\n    return (\n      !!output.bip32Derivation && output.bip32Derivation.some(derivationIsMine)\n    );\n  }\n  validateSignaturesOfAllInputs(validator) {\n    (0, utils_1.checkForInput)(this.data.inputs, 0); // making sure we have at least one\n    const results = range(this.data.inputs.length).map(idx =>\n      this.validateSignaturesOfInput(idx, validator),\n    );\n    return results.reduce((final, res) => res === true && final, true);\n  }\n  validateSignaturesOfInput(inputIndex, validator, pubkey) {\n    const input = this.data.inputs[inputIndex];\n    if ((0, bip371_1.isTaprootInput)(input))\n      return this.validateSignaturesOfTaprootInput(\n        inputIndex,\n        validator,\n        pubkey,\n      );\n    return this._validateSignaturesOfInput(inputIndex, validator, pubkey);\n  }\n  _validateSignaturesOfInput(inputIndex, validator, pubkey) {\n    const input = this.data.inputs[inputIndex];\n    const partialSig = (input || {}).partialSig;\n    if (!input || !partialSig || partialSig.length < 1)\n      throw new Error('No signatures to validate');\n    if (typeof validator !== 'function')\n      throw new Error('Need validator function to validate signatures');\n    const mySigs = pubkey\n      ? partialSig.filter(sig => sig.pubkey.equals(pubkey))\n      : partialSig;\n    if (mySigs.length < 1) throw new Error('No signatures for this pubkey');\n    const results = [];\n    let hashCache;\n    let scriptCache;\n    let sighashCache;\n    for (const pSig of mySigs) {\n      const sig = bscript.signature.decode(pSig.signature);\n      const { hash, script } =\n        sighashCache !== sig.hashType\n          ? getHashForSig(\n              inputIndex,\n              Object.assign({}, input, { sighashType: sig.hashType }),\n              this.__CACHE,\n              true,\n            )\n          : { hash: hashCache, script: scriptCache };\n      sighashCache = sig.hashType;\n      hashCache = hash;\n      scriptCache = script;\n      checkScriptForPubkey(pSig.pubkey, script, 'verify');\n      results.push(validator(pSig.pubkey, hash, sig.signature));\n    }\n    return results.every(res => res === true);\n  }\n  validateSignaturesOfTaprootInput(inputIndex, validator, pubkey) {\n    const input = this.data.inputs[inputIndex];\n    const tapKeySig = (input || {}).tapKeySig;\n    const tapScriptSig = (input || {}).tapScriptSig;\n    if (!input && !tapKeySig && !(tapScriptSig && !tapScriptSig.length))\n      throw new Error('No signatures to validate');\n    if (typeof validator !== 'function')\n      throw new Error('Need validator function to validate signatures');\n    pubkey = pubkey && (0, bip371_1.toXOnly)(pubkey);\n    const allHashses = pubkey\n      ? getTaprootHashesForSig(\n          inputIndex,\n          input,\n          this.data.inputs,\n          pubkey,\n          this.__CACHE,\n        )\n      : getAllTaprootHashesForSig(\n          inputIndex,\n          input,\n          this.data.inputs,\n          this.__CACHE,\n        );\n    if (!allHashses.length) throw new Error('No signatures for this pubkey');\n    const tapKeyHash = allHashses.find(h => !h.leafHash);\n    let validationResultCount = 0;\n    if (tapKeySig && tapKeyHash) {\n      const isValidTapkeySig = validator(\n        tapKeyHash.pubkey,\n        tapKeyHash.hash,\n        trimTaprootSig(tapKeySig),\n      );\n      if (!isValidTapkeySig) return false;\n      validationResultCount++;\n    }\n    if (tapScriptSig) {\n      for (const tapSig of tapScriptSig) {\n        const tapSigHash = allHashses.find(h => tapSig.pubkey.equals(h.pubkey));\n        if (tapSigHash) {\n          const isValidTapScriptSig = validator(\n            tapSig.pubkey,\n            tapSigHash.hash,\n            trimTaprootSig(tapSig.signature),\n          );\n          if (!isValidTapScriptSig) return false;\n          validationResultCount++;\n        }\n      }\n    }\n    return validationResultCount > 0;\n  }\n  signAllInputsHD(\n    hdKeyPair,\n    sighashTypes = [transaction_1.Transaction.SIGHASH_ALL],\n  ) {\n    if (!hdKeyPair || !hdKeyPair.publicKey || !hdKeyPair.fingerprint) {\n      throw new Error('Need HDSigner to sign input');\n    }\n    const results = [];\n    for (const i of range(this.data.inputs.length)) {\n      try {\n        this.signInputHD(i, hdKeyPair, sighashTypes);\n        results.push(true);\n      } catch (err) {\n        results.push(false);\n      }\n    }\n    if (results.every(v => v === false)) {\n      throw new Error('No inputs were signed');\n    }\n    return this;\n  }\n  signAllInputsHDAsync(\n    hdKeyPair,\n    sighashTypes = [transaction_1.Transaction.SIGHASH_ALL],\n  ) {\n    return new Promise((resolve, reject) => {\n      if (!hdKeyPair || !hdKeyPair.publicKey || !hdKeyPair.fingerprint) {\n        return reject(new Error('Need HDSigner to sign input'));\n      }\n      const results = [];\n      const promises = [];\n      for (const i of range(this.data.inputs.length)) {\n        promises.push(\n          this.signInputHDAsync(i, hdKeyPair, sighashTypes).then(\n            () => {\n              results.push(true);\n            },\n            () => {\n              results.push(false);\n            },\n          ),\n        );\n      }\n      return Promise.all(promises).then(() => {\n        if (results.every(v => v === false)) {\n          return reject(new Error('No inputs were signed'));\n        }\n        resolve();\n      });\n    });\n  }\n  signInputHD(\n    inputIndex,\n    hdKeyPair,\n    sighashTypes = [transaction_1.Transaction.SIGHASH_ALL],\n  ) {\n    if (!hdKeyPair || !hdKeyPair.publicKey || !hdKeyPair.fingerprint) {\n      throw new Error('Need HDSigner to sign input');\n    }\n    const signers = getSignersFromHD(inputIndex, this.data.inputs, hdKeyPair);\n    signers.forEach(signer => this.signInput(inputIndex, signer, sighashTypes));\n    return this;\n  }\n  signInputHDAsync(\n    inputIndex,\n    hdKeyPair,\n    sighashTypes = [transaction_1.Transaction.SIGHASH_ALL],\n  ) {\n    return new Promise((resolve, reject) => {\n      if (!hdKeyPair || !hdKeyPair.publicKey || !hdKeyPair.fingerprint) {\n        return reject(new Error('Need HDSigner to sign input'));\n      }\n      const signers = getSignersFromHD(inputIndex, this.data.inputs, hdKeyPair);\n      const promises = signers.map(signer =>\n        this.signInputAsync(inputIndex, signer, sighashTypes),\n      );\n      return Promise.all(promises)\n        .then(() => {\n          resolve();\n        })\n        .catch(reject);\n    });\n  }\n  signAllInputs(keyPair, sighashTypes) {\n    if (!keyPair || !keyPair.publicKey)\n      throw new Error('Need Signer to sign input');\n    // TODO: Add a pubkey/pubkeyhash cache to each input\n    // as input information is added, then eventually\n    // optimize this method.\n    const results = [];\n    for (const i of range(this.data.inputs.length)) {\n      try {\n        this.signInput(i, keyPair, sighashTypes);\n        results.push(true);\n      } catch (err) {\n        results.push(false);\n      }\n    }\n    if (results.every(v => v === false)) {\n      throw new Error('No inputs were signed');\n    }\n    return this;\n  }\n  signAllInputsAsync(keyPair, sighashTypes) {\n    return new Promise((resolve, reject) => {\n      if (!keyPair || !keyPair.publicKey)\n        return reject(new Error('Need Signer to sign input'));\n      // TODO: Add a pubkey/pubkeyhash cache to each input\n      // as input information is added, then eventually\n      // optimize this method.\n      const results = [];\n      const promises = [];\n      for (const [i] of this.data.inputs.entries()) {\n        promises.push(\n          this.signInputAsync(i, keyPair, sighashTypes).then(\n            () => {\n              results.push(true);\n            },\n            () => {\n              results.push(false);\n            },\n          ),\n        );\n      }\n      return Promise.all(promises).then(() => {\n        if (results.every(v => v === false)) {\n          return reject(new Error('No inputs were signed'));\n        }\n        resolve();\n      });\n    });\n  }\n  signInput(inputIndex, keyPair, sighashTypes) {\n    if (!keyPair || !keyPair.publicKey)\n      throw new Error('Need Signer to sign input');\n    const input = (0, utils_1.checkForInput)(this.data.inputs, inputIndex);\n    if ((0, bip371_1.isTaprootInput)(input)) {\n      return this._signTaprootInput(\n        inputIndex,\n        input,\n        keyPair,\n        undefined,\n        sighashTypes,\n      );\n    }\n    return this._signInput(inputIndex, keyPair, sighashTypes);\n  }\n  signTaprootInput(inputIndex, keyPair, tapLeafHashToSign, sighashTypes) {\n    if (!keyPair || !keyPair.publicKey)\n      throw new Error('Need Signer to sign input');\n    const input = (0, utils_1.checkForInput)(this.data.inputs, inputIndex);\n    if ((0, bip371_1.isTaprootInput)(input))\n      return this._signTaprootInput(\n        inputIndex,\n        input,\n        keyPair,\n        tapLeafHashToSign,\n        sighashTypes,\n      );\n    throw new Error(`Input #${inputIndex} is not of type Taproot.`);\n  }\n  _signInput(\n    inputIndex,\n    keyPair,\n    sighashTypes = [transaction_1.Transaction.SIGHASH_ALL],\n  ) {\n    const { hash, sighashType } = getHashAndSighashType(\n      this.data.inputs,\n      inputIndex,\n      keyPair.publicKey,\n      this.__CACHE,\n      sighashTypes,\n    );\n    const partialSig = [\n      {\n        pubkey: keyPair.publicKey,\n        signature: bscript.signature.encode(keyPair.sign(hash), sighashType),\n      },\n    ];\n    this.data.updateInput(inputIndex, { partialSig });\n    return this;\n  }\n  _signTaprootInput(\n    inputIndex,\n    input,\n    keyPair,\n    tapLeafHashToSign,\n    allowedSighashTypes = [transaction_1.Transaction.SIGHASH_DEFAULT],\n  ) {\n    const hashesForSig = this.checkTaprootHashesForSig(\n      inputIndex,\n      input,\n      keyPair,\n      tapLeafHashToSign,\n      allowedSighashTypes,\n    );\n    const tapKeySig = hashesForSig\n      .filter(h => !h.leafHash)\n      .map(h =>\n        (0, bip371_1.serializeTaprootSignature)(\n          keyPair.signSchnorr(h.hash),\n          input.sighashType,\n        ),\n      )[0];\n    const tapScriptSig = hashesForSig\n      .filter(h => !!h.leafHash)\n      .map(h => ({\n        pubkey: (0, bip371_1.toXOnly)(keyPair.publicKey),\n        signature: (0, bip371_1.serializeTaprootSignature)(\n          keyPair.signSchnorr(h.hash),\n          input.sighashType,\n        ),\n        leafHash: h.leafHash,\n      }));\n    if (tapKeySig) {\n      this.data.updateInput(inputIndex, { tapKeySig });\n    }\n    if (tapScriptSig.length) {\n      this.data.updateInput(inputIndex, { tapScriptSig });\n    }\n    return this;\n  }\n  signInputAsync(inputIndex, keyPair, sighashTypes) {\n    return Promise.resolve().then(() => {\n      if (!keyPair || !keyPair.publicKey)\n        throw new Error('Need Signer to sign input');\n      const input = (0, utils_1.checkForInput)(this.data.inputs, inputIndex);\n      if ((0, bip371_1.isTaprootInput)(input))\n        return this._signTaprootInputAsync(\n          inputIndex,\n          input,\n          keyPair,\n          undefined,\n          sighashTypes,\n        );\n      return this._signInputAsync(inputIndex, keyPair, sighashTypes);\n    });\n  }\n  signTaprootInputAsync(inputIndex, keyPair, tapLeafHash, sighashTypes) {\n    return Promise.resolve().then(() => {\n      if (!keyPair || !keyPair.publicKey)\n        throw new Error('Need Signer to sign input');\n      const input = (0, utils_1.checkForInput)(this.data.inputs, inputIndex);\n      if ((0, bip371_1.isTaprootInput)(input))\n        return this._signTaprootInputAsync(\n          inputIndex,\n          input,\n          keyPair,\n          tapLeafHash,\n          sighashTypes,\n        );\n      throw new Error(`Input #${inputIndex} is not of type Taproot.`);\n    });\n  }\n  _signInputAsync(\n    inputIndex,\n    keyPair,\n    sighashTypes = [transaction_1.Transaction.SIGHASH_ALL],\n  ) {\n    const { hash, sighashType } = getHashAndSighashType(\n      this.data.inputs,\n      inputIndex,\n      keyPair.publicKey,\n      this.__CACHE,\n      sighashTypes,\n    );\n    return Promise.resolve(keyPair.sign(hash)).then(signature => {\n      const partialSig = [\n        {\n          pubkey: keyPair.publicKey,\n          signature: bscript.signature.encode(signature, sighashType),\n        },\n      ];\n      this.data.updateInput(inputIndex, { partialSig });\n    });\n  }\n  async _signTaprootInputAsync(\n    inputIndex,\n    input,\n    keyPair,\n    tapLeafHash,\n    sighashTypes = [transaction_1.Transaction.SIGHASH_DEFAULT],\n  ) {\n    const hashesForSig = this.checkTaprootHashesForSig(\n      inputIndex,\n      input,\n      keyPair,\n      tapLeafHash,\n      sighashTypes,\n    );\n    const signaturePromises = [];\n    const tapKeyHash = hashesForSig.filter(h => !h.leafHash)[0];\n    if (tapKeyHash) {\n      const tapKeySigPromise = Promise.resolve(\n        keyPair.signSchnorr(tapKeyHash.hash),\n      ).then(sig => {\n        return {\n          tapKeySig: (0, bip371_1.serializeTaprootSignature)(\n            sig,\n            input.sighashType,\n          ),\n        };\n      });\n      signaturePromises.push(tapKeySigPromise);\n    }\n    const tapScriptHashes = hashesForSig.filter(h => !!h.leafHash);\n    if (tapScriptHashes.length) {\n      const tapScriptSigPromises = tapScriptHashes.map(tsh => {\n        return Promise.resolve(keyPair.signSchnorr(tsh.hash)).then(\n          signature => {\n            const tapScriptSig = [\n              {\n                pubkey: (0, bip371_1.toXOnly)(keyPair.publicKey),\n                signature: (0, bip371_1.serializeTaprootSignature)(\n                  signature,\n                  input.sighashType,\n                ),\n                leafHash: tsh.leafHash,\n              },\n            ];\n            return { tapScriptSig };\n          },\n        );\n      });\n      signaturePromises.push(...tapScriptSigPromises);\n    }\n    return Promise.all(signaturePromises).then(results => {\n      results.forEach(v => this.data.updateInput(inputIndex, v));\n    });\n  }\n  checkTaprootHashesForSig(\n    inputIndex,\n    input,\n    keyPair,\n    tapLeafHashToSign,\n    allowedSighashTypes,\n  ) {\n    if (typeof keyPair.signSchnorr !== 'function')\n      throw new Error(\n        `Need Schnorr Signer to sign taproot input #${inputIndex}.`,\n      );\n    const hashesForSig = getTaprootHashesForSig(\n      inputIndex,\n      input,\n      this.data.inputs,\n      keyPair.publicKey,\n      this.__CACHE,\n      tapLeafHashToSign,\n      allowedSighashTypes,\n    );\n    if (!hashesForSig || !hashesForSig.length)\n      throw new Error(\n        `Can not sign for input #${inputIndex} with the key ${keyPair.publicKey.toString(\n          'hex',\n        )}`,\n      );\n    return hashesForSig;\n  }\n  toBuffer() {\n    checkCache(this.__CACHE);\n    return this.data.toBuffer();\n  }\n  toHex() {\n    checkCache(this.__CACHE);\n    return this.data.toHex();\n  }\n  toBase64() {\n    checkCache(this.__CACHE);\n    return this.data.toBase64();\n  }\n  updateGlobal(updateData) {\n    this.data.updateGlobal(updateData);\n    return this;\n  }\n  updateInput(inputIndex, updateData) {\n    if (updateData.witnessScript) checkInvalidP2WSH(updateData.witnessScript);\n    (0, bip371_1.checkTaprootInputFields)(\n      this.data.inputs[inputIndex],\n      updateData,\n      'updateInput',\n    );\n    this.data.updateInput(inputIndex, updateData);\n    if (updateData.nonWitnessUtxo) {\n      addNonWitnessTxCache(\n        this.__CACHE,\n        this.data.inputs[inputIndex],\n        inputIndex,\n      );\n    }\n    return this;\n  }\n  updateOutput(outputIndex, updateData) {\n    const outputData = this.data.outputs[outputIndex];\n    (0, bip371_1.checkTaprootOutputFields)(\n      outputData,\n      updateData,\n      'updateOutput',\n    );\n    this.data.updateOutput(outputIndex, updateData);\n    return this;\n  }\n  addUnknownKeyValToGlobal(keyVal) {\n    this.data.addUnknownKeyValToGlobal(keyVal);\n    return this;\n  }\n  addUnknownKeyValToInput(inputIndex, keyVal) {\n    this.data.addUnknownKeyValToInput(inputIndex, keyVal);\n    return this;\n  }\n  addUnknownKeyValToOutput(outputIndex, keyVal) {\n    this.data.addUnknownKeyValToOutput(outputIndex, keyVal);\n    return this;\n  }\n  clearFinalizedInput(inputIndex) {\n    this.data.clearFinalizedInput(inputIndex);\n    return this;\n  }\n}\nexports.Psbt = Psbt;\n/**\n * This function is needed to pass to the bip174 base class's fromBuffer.\n * It takes the \"transaction buffer\" portion of the psbt buffer and returns a\n * Transaction (From the bip174 library) interface.\n */\nconst transactionFromBuffer = buffer => new PsbtTransaction(buffer);\n/**\n * This class implements the Transaction interface from bip174 library.\n * It contains a bitcoinjs-lib Transaction object.\n */\nclass PsbtTransaction {\n  constructor(buffer = Buffer.from([2, 0, 0, 0, 0, 0, 0, 0, 0, 0])) {\n    this.tx = transaction_1.Transaction.fromBuffer(buffer);\n    checkTxEmpty(this.tx);\n    Object.defineProperty(this, 'tx', {\n      enumerable: false,\n      writable: true,\n    });\n  }\n  getInputOutputCounts() {\n    return {\n      inputCount: this.tx.ins.length,\n      outputCount: this.tx.outs.length,\n    };\n  }\n  addInput(input) {\n    if (\n      input.hash === undefined ||\n      input.index === undefined ||\n      (!Buffer.isBuffer(input.hash) && typeof input.hash !== 'string') ||\n      typeof input.index !== 'number'\n    ) {\n      throw new Error('Error adding input.');\n    }\n    const hash =\n      typeof input.hash === 'string'\n        ? (0, bufferutils_1.reverseBuffer)(Buffer.from(input.hash, 'hex'))\n        : input.hash;\n    this.tx.addInput(hash, input.index, input.sequence);\n  }\n  addOutput(output) {\n    if (\n      output.script === undefined ||\n      output.value === undefined ||\n      !Buffer.isBuffer(output.script) ||\n      typeof output.value !== 'number'\n    ) {\n      throw new Error('Error adding output.');\n    }\n    this.tx.addOutput(output.script, output.value);\n  }\n  toBuffer() {\n    return this.tx.toBuffer();\n  }\n}\nfunction canFinalize(input, script, scriptType) {\n  switch (scriptType) {\n    case 'pubkey':\n    case 'pubkeyhash':\n    case 'witnesspubkeyhash':\n      return hasSigs(1, input.partialSig);\n    case 'multisig':\n      const p2ms = payments.p2ms({ output: script });\n      return hasSigs(p2ms.m, input.partialSig, p2ms.pubkeys);\n    default:\n      return false;\n  }\n}\nfunction checkCache(cache) {\n  if (cache.__UNSAFE_SIGN_NONSEGWIT !== false) {\n    throw new Error('Not BIP174 compliant, can not export');\n  }\n}\nfunction hasSigs(neededSigs, partialSig, pubkeys) {\n  if (!partialSig) return false;\n  let sigs;\n  if (pubkeys) {\n    sigs = pubkeys\n      .map(pkey => {\n        const pubkey = compressPubkey(pkey);\n        return partialSig.find(pSig => pSig.pubkey.equals(pubkey));\n      })\n      .filter(v => !!v);\n  } else {\n    sigs = partialSig;\n  }\n  if (sigs.length > neededSigs) throw new Error('Too many signatures');\n  return sigs.length === neededSigs;\n}\nfunction isFinalized(input) {\n  return !!input.finalScriptSig || !!input.finalScriptWitness;\n}\nfunction bip32DerivationIsMine(root) {\n  return d => {\n    if (!d.masterFingerprint.equals(root.fingerprint)) return false;\n    if (!root.derivePath(d.path).publicKey.equals(d.pubkey)) return false;\n    return true;\n  };\n}\nfunction check32Bit(num) {\n  if (\n    typeof num !== 'number' ||\n    num !== Math.floor(num) ||\n    num > 0xffffffff ||\n    num < 0\n  ) {\n    throw new Error('Invalid 32 bit integer');\n  }\n}\nfunction checkFees(psbt, cache, opts) {\n  const feeRate = cache.__FEE_RATE || psbt.getFeeRate();\n  const vsize = cache.__EXTRACTED_TX.virtualSize();\n  const satoshis = feeRate * vsize;\n  if (feeRate >= opts.maximumFeeRate) {\n    throw new Error(\n      `Warning: You are paying around ${(satoshis / 1e8).toFixed(8)} in ` +\n        `fees, which is ${feeRate} satoshi per byte for a transaction ` +\n        `with a VSize of ${vsize} bytes (segwit counted as 0.25 byte per ` +\n        `byte). Use setMaximumFeeRate method to raise your threshold, or ` +\n        `pass true to the first arg of extractTransaction.`,\n    );\n  }\n}\nfunction checkInputsForPartialSig(inputs, action) {\n  inputs.forEach(input => {\n    const throws = (0, bip371_1.isTaprootInput)(input)\n      ? (0, bip371_1.checkTaprootInputForSigs)(input, action)\n      : (0, psbtutils_1.checkInputForSig)(input, action);\n    if (throws)\n      throw new Error('Can not modify transaction, signatures exist.');\n  });\n}\nfunction checkPartialSigSighashes(input) {\n  if (!input.sighashType || !input.partialSig) return;\n  const { partialSig, sighashType } = input;\n  partialSig.forEach(pSig => {\n    const { hashType } = bscript.signature.decode(pSig.signature);\n    if (sighashType !== hashType) {\n      throw new Error('Signature sighash does not match input sighash type');\n    }\n  });\n}\nfunction checkScriptForPubkey(pubkey, script, action) {\n  if (!(0, psbtutils_1.pubkeyInScript)(pubkey, script)) {\n    throw new Error(\n      `Can not ${action} for this input with the key ${pubkey.toString('hex')}`,\n    );\n  }\n}\nfunction checkTxEmpty(tx) {\n  const isEmpty = tx.ins.every(\n    input =>\n      input.script &&\n      input.script.length === 0 &&\n      input.witness &&\n      input.witness.length === 0,\n  );\n  if (!isEmpty) {\n    throw new Error('Format Error: Transaction ScriptSigs are not empty');\n  }\n}\nfunction checkTxForDupeIns(tx, cache) {\n  tx.ins.forEach(input => {\n    checkTxInputCache(cache, input);\n  });\n}\nfunction checkTxInputCache(cache, input) {\n  const key =\n    (0, bufferutils_1.reverseBuffer)(Buffer.from(input.hash)).toString('hex') +\n    ':' +\n    input.index;\n  if (cache.__TX_IN_CACHE[key]) throw new Error('Duplicate input detected.');\n  cache.__TX_IN_CACHE[key] = 1;\n}\nfunction scriptCheckerFactory(payment, paymentScriptName) {\n  return (inputIndex, scriptPubKey, redeemScript, ioType) => {\n    const redeemScriptOutput = payment({\n      redeem: { output: redeemScript },\n    }).output;\n    if (!scriptPubKey.equals(redeemScriptOutput)) {\n      throw new Error(\n        `${paymentScriptName} for ${ioType} #${inputIndex} doesn't match the scriptPubKey in the prevout`,\n      );\n    }\n  };\n}\nconst checkRedeemScript = scriptCheckerFactory(payments.p2sh, 'Redeem script');\nconst checkWitnessScript = scriptCheckerFactory(\n  payments.p2wsh,\n  'Witness script',\n);\nfunction getTxCacheValue(key, name, inputs, c) {\n  if (!inputs.every(isFinalized))\n    throw new Error(`PSBT must be finalized to calculate ${name}`);\n  if (key === '__FEE_RATE' && c.__FEE_RATE) return c.__FEE_RATE;\n  if (key === '__FEE' && c.__FEE) return c.__FEE;\n  let tx;\n  let mustFinalize = true;\n  if (c.__EXTRACTED_TX) {\n    tx = c.__EXTRACTED_TX;\n    mustFinalize = false;\n  } else {\n    tx = c.__TX.clone();\n  }\n  inputFinalizeGetAmts(inputs, tx, c, mustFinalize);\n  if (key === '__FEE_RATE') return c.__FEE_RATE;\n  else if (key === '__FEE') return c.__FEE;\n}\nfunction getFinalScripts(inputIndex, input, script, isSegwit, isP2SH, isP2WSH) {\n  const scriptType = classifyScript(script);\n  if (!canFinalize(input, script, scriptType))\n    throw new Error(`Can not finalize input #${inputIndex}`);\n  return prepareFinalScripts(\n    script,\n    scriptType,\n    input.partialSig,\n    isSegwit,\n    isP2SH,\n    isP2WSH,\n  );\n}\nfunction prepareFinalScripts(\n  script,\n  scriptType,\n  partialSig,\n  isSegwit,\n  isP2SH,\n  isP2WSH,\n) {\n  let finalScriptSig;\n  let finalScriptWitness;\n  // Wow, the payments API is very handy\n  const payment = getPayment(script, scriptType, partialSig);\n  const p2wsh = !isP2WSH ? null : payments.p2wsh({ redeem: payment });\n  const p2sh = !isP2SH ? null : payments.p2sh({ redeem: p2wsh || payment });\n  if (isSegwit) {\n    if (p2wsh) {\n      finalScriptWitness = (0, psbtutils_1.witnessStackToScriptWitness)(\n        p2wsh.witness,\n      );\n    } else {\n      finalScriptWitness = (0, psbtutils_1.witnessStackToScriptWitness)(\n        payment.witness,\n      );\n    }\n    if (p2sh) {\n      finalScriptSig = p2sh.input;\n    }\n  } else {\n    if (p2sh) {\n      finalScriptSig = p2sh.input;\n    } else {\n      finalScriptSig = payment.input;\n    }\n  }\n  return {\n    finalScriptSig,\n    finalScriptWitness,\n  };\n}\nfunction getHashAndSighashType(\n  inputs,\n  inputIndex,\n  pubkey,\n  cache,\n  sighashTypes,\n) {\n  const input = (0, utils_1.checkForInput)(inputs, inputIndex);\n  const { hash, sighashType, script } = getHashForSig(\n    inputIndex,\n    input,\n    cache,\n    false,\n    sighashTypes,\n  );\n  checkScriptForPubkey(pubkey, script, 'sign');\n  return {\n    hash,\n    sighashType,\n  };\n}\nfunction getHashForSig(inputIndex, input, cache, forValidate, sighashTypes) {\n  const unsignedTx = cache.__TX;\n  const sighashType =\n    input.sighashType || transaction_1.Transaction.SIGHASH_ALL;\n  checkSighashTypeAllowed(sighashType, sighashTypes);\n  let hash;\n  let prevout;\n  if (input.nonWitnessUtxo) {\n    const nonWitnessUtxoTx = nonWitnessUtxoTxFromCache(\n      cache,\n      input,\n      inputIndex,\n    );\n    const prevoutHash = unsignedTx.ins[inputIndex].hash;\n    const utxoHash = nonWitnessUtxoTx.getHash();\n    // If a non-witness UTXO is provided, its hash must match the hash specified in the prevout\n    if (!prevoutHash.equals(utxoHash)) {\n      throw new Error(\n        `Non-witness UTXO hash for input #${inputIndex} doesn't match the hash specified in the prevout`,\n      );\n    }\n    const prevoutIndex = unsignedTx.ins[inputIndex].index;\n    prevout = nonWitnessUtxoTx.outs[prevoutIndex];\n  } else if (input.witnessUtxo) {\n    prevout = input.witnessUtxo;\n  } else {\n    throw new Error('Need a Utxo input item for signing');\n  }\n  const { meaningfulScript, type } = getMeaningfulScript(\n    prevout.script,\n    inputIndex,\n    'input',\n    input.redeemScript,\n    input.witnessScript,\n  );\n  if (['p2sh-p2wsh', 'p2wsh'].indexOf(type) >= 0) {\n    hash = unsignedTx.hashForWitnessV0(\n      inputIndex,\n      meaningfulScript,\n      prevout.value,\n      sighashType,\n    );\n  } else if ((0, psbtutils_1.isP2WPKH)(meaningfulScript)) {\n    // P2WPKH uses the P2PKH template for prevoutScript when signing\n    const signingScript = payments.p2pkh({\n      hash: meaningfulScript.slice(2),\n    }).output;\n    hash = unsignedTx.hashForWitnessV0(\n      inputIndex,\n      signingScript,\n      prevout.value,\n      sighashType,\n    );\n  } else {\n    // non-segwit\n    if (\n      input.nonWitnessUtxo === undefined &&\n      cache.__UNSAFE_SIGN_NONSEGWIT === false\n    )\n      throw new Error(\n        `Input #${inputIndex} has witnessUtxo but non-segwit script: ` +\n          `${meaningfulScript.toString('hex')}`,\n      );\n    if (!forValidate && cache.__UNSAFE_SIGN_NONSEGWIT !== false)\n      console.warn(\n        'Warning: Signing non-segwit inputs without the full parent transaction ' +\n          'means there is a chance that a miner could feed you incorrect information ' +\n          \"to trick you into paying large fees. This behavior is the same as Psbt's predecessor \" +\n          '(TransactionBuilder - now removed) when signing non-segwit scripts. You are not ' +\n          'able to export this Psbt with toBuffer|toBase64|toHex since it is not ' +\n          'BIP174 compliant.\\n*********************\\nPROCEED WITH CAUTION!\\n' +\n          '*********************',\n      );\n    hash = unsignedTx.hashForSignature(\n      inputIndex,\n      meaningfulScript,\n      sighashType,\n    );\n  }\n  return {\n    script: meaningfulScript,\n    sighashType,\n    hash,\n  };\n}\nfunction getAllTaprootHashesForSig(inputIndex, input, inputs, cache) {\n  const allPublicKeys = [];\n  if (input.tapInternalKey) {\n    const key = getPrevoutTaprootKey(inputIndex, input, cache);\n    if (key) {\n      allPublicKeys.push(key);\n    }\n  }\n  if (input.tapScriptSig) {\n    const tapScriptPubkeys = input.tapScriptSig.map(tss => tss.pubkey);\n    allPublicKeys.push(...tapScriptPubkeys);\n  }\n  const allHashes = allPublicKeys.map(pubicKey =>\n    getTaprootHashesForSig(inputIndex, input, inputs, pubicKey, cache),\n  );\n  return allHashes.flat();\n}\nfunction getPrevoutTaprootKey(inputIndex, input, cache) {\n  const { script } = getScriptAndAmountFromUtxo(inputIndex, input, cache);\n  return (0, psbtutils_1.isP2TR)(script) ? script.subarray(2, 34) : null;\n}\nfunction trimTaprootSig(signature) {\n  return signature.length === 64 ? signature : signature.subarray(0, 64);\n}\nfunction getTaprootHashesForSig(\n  inputIndex,\n  input,\n  inputs,\n  pubkey,\n  cache,\n  tapLeafHashToSign,\n  allowedSighashTypes,\n) {\n  const unsignedTx = cache.__TX;\n  const sighashType =\n    input.sighashType || transaction_1.Transaction.SIGHASH_DEFAULT;\n  checkSighashTypeAllowed(sighashType, allowedSighashTypes);\n  const prevOuts = inputs.map((i, index) =>\n    getScriptAndAmountFromUtxo(index, i, cache),\n  );\n  const signingScripts = prevOuts.map(o => o.script);\n  const values = prevOuts.map(o => o.value);\n  const hashes = [];\n  if (input.tapInternalKey && !tapLeafHashToSign) {\n    const outputKey =\n      getPrevoutTaprootKey(inputIndex, input, cache) || Buffer.from([]);\n    if ((0, bip371_1.toXOnly)(pubkey).equals(outputKey)) {\n      const tapKeyHash = unsignedTx.hashForWitnessV1(\n        inputIndex,\n        signingScripts,\n        values,\n        sighashType,\n      );\n      hashes.push({ pubkey, hash: tapKeyHash });\n    }\n  }\n  const tapLeafHashes = (input.tapLeafScript || [])\n    .filter(tapLeaf => (0, psbtutils_1.pubkeyInScript)(pubkey, tapLeaf.script))\n    .map(tapLeaf => {\n      const hash = (0, bip341_1.tapleafHash)({\n        output: tapLeaf.script,\n        version: tapLeaf.leafVersion,\n      });\n      return Object.assign({ hash }, tapLeaf);\n    })\n    .filter(\n      tapLeaf => !tapLeafHashToSign || tapLeafHashToSign.equals(tapLeaf.hash),\n    )\n    .map(tapLeaf => {\n      const tapScriptHash = unsignedTx.hashForWitnessV1(\n        inputIndex,\n        signingScripts,\n        values,\n        sighashType,\n        tapLeaf.hash,\n      );\n      return {\n        pubkey,\n        hash: tapScriptHash,\n        leafHash: tapLeaf.hash,\n      };\n    });\n  return hashes.concat(tapLeafHashes);\n}\nfunction checkSighashTypeAllowed(sighashType, sighashTypes) {\n  if (sighashTypes && sighashTypes.indexOf(sighashType) < 0) {\n    const str = sighashTypeToString(sighashType);\n    throw new Error(\n      `Sighash type is not allowed. Retry the sign method passing the ` +\n        `sighashTypes array of whitelisted types. Sighash type: ${str}`,\n    );\n  }\n}\nfunction getPayment(script, scriptType, partialSig) {\n  let payment;\n  switch (scriptType) {\n    case 'multisig':\n      const sigs = getSortedSigs(script, partialSig);\n      payment = payments.p2ms({\n        output: script,\n        signatures: sigs,\n      });\n      break;\n    case 'pubkey':\n      payment = payments.p2pk({\n        output: script,\n        signature: partialSig[0].signature,\n      });\n      break;\n    case 'pubkeyhash':\n      payment = payments.p2pkh({\n        output: script,\n        pubkey: partialSig[0].pubkey,\n        signature: partialSig[0].signature,\n      });\n      break;\n    case 'witnesspubkeyhash':\n      payment = payments.p2wpkh({\n        output: script,\n        pubkey: partialSig[0].pubkey,\n        signature: partialSig[0].signature,\n      });\n      break;\n  }\n  return payment;\n}\nfunction getScriptFromInput(inputIndex, input, cache) {\n  const unsignedTx = cache.__TX;\n  const res = {\n    script: null,\n    isSegwit: false,\n    isP2SH: false,\n    isP2WSH: false,\n  };\n  res.isP2SH = !!input.redeemScript;\n  res.isP2WSH = !!input.witnessScript;\n  if (input.witnessScript) {\n    res.script = input.witnessScript;\n  } else if (input.redeemScript) {\n    res.script = input.redeemScript;\n  } else {\n    if (input.nonWitnessUtxo) {\n      const nonWitnessUtxoTx = nonWitnessUtxoTxFromCache(\n        cache,\n        input,\n        inputIndex,\n      );\n      const prevoutIndex = unsignedTx.ins[inputIndex].index;\n      res.script = nonWitnessUtxoTx.outs[prevoutIndex].script;\n    } else if (input.witnessUtxo) {\n      res.script = input.witnessUtxo.script;\n    }\n  }\n  if (input.witnessScript || (0, psbtutils_1.isP2WPKH)(res.script)) {\n    res.isSegwit = true;\n  }\n  return res;\n}\nfunction getSignersFromHD(inputIndex, inputs, hdKeyPair) {\n  const input = (0, utils_1.checkForInput)(inputs, inputIndex);\n  if (!input.bip32Derivation || input.bip32Derivation.length === 0) {\n    throw new Error('Need bip32Derivation to sign with HD');\n  }\n  const myDerivations = input.bip32Derivation\n    .map(bipDv => {\n      if (bipDv.masterFingerprint.equals(hdKeyPair.fingerprint)) {\n        return bipDv;\n      } else {\n        return;\n      }\n    })\n    .filter(v => !!v);\n  if (myDerivations.length === 0) {\n    throw new Error(\n      'Need one bip32Derivation masterFingerprint to match the HDSigner fingerprint',\n    );\n  }\n  const signers = myDerivations.map(bipDv => {\n    const node = hdKeyPair.derivePath(bipDv.path);\n    if (!bipDv.pubkey.equals(node.publicKey)) {\n      throw new Error('pubkey did not match bip32Derivation');\n    }\n    return node;\n  });\n  return signers;\n}\nfunction getSortedSigs(script, partialSig) {\n  const p2ms = payments.p2ms({ output: script });\n  // for each pubkey in order of p2ms script\n  return p2ms.pubkeys\n    .map(pk => {\n      // filter partialSig array by pubkey being equal\n      return (\n        partialSig.filter(ps => {\n          return ps.pubkey.equals(pk);\n        })[0] || {}\n      ).signature;\n      // Any pubkey without a match will return undefined\n      // this last filter removes all the undefined items in the array.\n    })\n    .filter(v => !!v);\n}\nfunction scriptWitnessToWitnessStack(buffer) {\n  let offset = 0;\n  function readSlice(n) {\n    offset += n;\n    return buffer.slice(offset - n, offset);\n  }\n  function readVarInt() {\n    const vi = varuint.decode(buffer, offset);\n    offset += varuint.decode.bytes;\n    return vi;\n  }\n  function readVarSlice() {\n    return readSlice(readVarInt());\n  }\n  function readVector() {\n    const count = readVarInt();\n    const vector = [];\n    for (let i = 0; i < count; i++) vector.push(readVarSlice());\n    return vector;\n  }\n  return readVector();\n}\nfunction sighashTypeToString(sighashType) {\n  let text =\n    sighashType & transaction_1.Transaction.SIGHASH_ANYONECANPAY\n      ? 'SIGHASH_ANYONECANPAY | '\n      : '';\n  const sigMod = sighashType & 0x1f;\n  switch (sigMod) {\n    case transaction_1.Transaction.SIGHASH_ALL:\n      text += 'SIGHASH_ALL';\n      break;\n    case transaction_1.Transaction.SIGHASH_SINGLE:\n      text += 'SIGHASH_SINGLE';\n      break;\n    case transaction_1.Transaction.SIGHASH_NONE:\n      text += 'SIGHASH_NONE';\n      break;\n  }\n  return text;\n}\nfunction addNonWitnessTxCache(cache, input, inputIndex) {\n  cache.__NON_WITNESS_UTXO_BUF_CACHE[inputIndex] = input.nonWitnessUtxo;\n  const tx = transaction_1.Transaction.fromBuffer(input.nonWitnessUtxo);\n  cache.__NON_WITNESS_UTXO_TX_CACHE[inputIndex] = tx;\n  const self = cache;\n  const selfIndex = inputIndex;\n  delete input.nonWitnessUtxo;\n  Object.defineProperty(input, 'nonWitnessUtxo', {\n    enumerable: true,\n    get() {\n      const buf = self.__NON_WITNESS_UTXO_BUF_CACHE[selfIndex];\n      const txCache = self.__NON_WITNESS_UTXO_TX_CACHE[selfIndex];\n      if (buf !== undefined) {\n        return buf;\n      } else {\n        const newBuf = txCache.toBuffer();\n        self.__NON_WITNESS_UTXO_BUF_CACHE[selfIndex] = newBuf;\n        return newBuf;\n      }\n    },\n    set(data) {\n      self.__NON_WITNESS_UTXO_BUF_CACHE[selfIndex] = data;\n    },\n  });\n}\nfunction inputFinalizeGetAmts(inputs, tx, cache, mustFinalize) {\n  let inputAmount = 0;\n  inputs.forEach((input, idx) => {\n    if (mustFinalize && input.finalScriptSig)\n      tx.ins[idx].script = input.finalScriptSig;\n    if (mustFinalize && input.finalScriptWitness) {\n      tx.ins[idx].witness = scriptWitnessToWitnessStack(\n        input.finalScriptWitness,\n      );\n    }\n    if (input.witnessUtxo) {\n      inputAmount += input.witnessUtxo.value;\n    } else if (input.nonWitnessUtxo) {\n      const nwTx = nonWitnessUtxoTxFromCache(cache, input, idx);\n      const vout = tx.ins[idx].index;\n      const out = nwTx.outs[vout];\n      inputAmount += out.value;\n    }\n  });\n  const outputAmount = tx.outs.reduce((total, o) => total + o.value, 0);\n  const fee = inputAmount - outputAmount;\n  if (fee < 0) {\n    throw new Error('Outputs are spending more than Inputs');\n  }\n  const bytes = tx.virtualSize();\n  cache.__FEE = fee;\n  cache.__EXTRACTED_TX = tx;\n  cache.__FEE_RATE = Math.floor(fee / bytes);\n}\nfunction nonWitnessUtxoTxFromCache(cache, input, inputIndex) {\n  const c = cache.__NON_WITNESS_UTXO_TX_CACHE;\n  if (!c[inputIndex]) {\n    addNonWitnessTxCache(cache, input, inputIndex);\n  }\n  return c[inputIndex];\n}\nfunction getScriptFromUtxo(inputIndex, input, cache) {\n  const { script } = getScriptAndAmountFromUtxo(inputIndex, input, cache);\n  return script;\n}\nfunction getScriptAndAmountFromUtxo(inputIndex, input, cache) {\n  if (input.witnessUtxo !== undefined) {\n    return {\n      script: input.witnessUtxo.script,\n      value: input.witnessUtxo.value,\n    };\n  } else if (input.nonWitnessUtxo !== undefined) {\n    const nonWitnessUtxoTx = nonWitnessUtxoTxFromCache(\n      cache,\n      input,\n      inputIndex,\n    );\n    const o = nonWitnessUtxoTx.outs[cache.__TX.ins[inputIndex].index];\n    return { script: o.script, value: o.value };\n  } else {\n    throw new Error(\"Can't find pubkey in input without Utxo data\");\n  }\n}\nfunction pubkeyInInput(pubkey, input, inputIndex, cache) {\n  const script = getScriptFromUtxo(inputIndex, input, cache);\n  const { meaningfulScript } = getMeaningfulScript(\n    script,\n    inputIndex,\n    'input',\n    input.redeemScript,\n    input.witnessScript,\n  );\n  return (0, psbtutils_1.pubkeyInScript)(pubkey, meaningfulScript);\n}\nfunction pubkeyInOutput(pubkey, output, outputIndex, cache) {\n  const script = cache.__TX.outs[outputIndex].script;\n  const { meaningfulScript } = getMeaningfulScript(\n    script,\n    outputIndex,\n    'output',\n    output.redeemScript,\n    output.witnessScript,\n  );\n  return (0, psbtutils_1.pubkeyInScript)(pubkey, meaningfulScript);\n}\nfunction redeemFromFinalScriptSig(finalScript) {\n  if (!finalScript) return;\n  const decomp = bscript.decompile(finalScript);\n  if (!decomp) return;\n  const lastItem = decomp[decomp.length - 1];\n  if (\n    !Buffer.isBuffer(lastItem) ||\n    isPubkeyLike(lastItem) ||\n    isSigLike(lastItem)\n  )\n    return;\n  const sDecomp = bscript.decompile(lastItem);\n  if (!sDecomp) return;\n  return lastItem;\n}\nfunction redeemFromFinalWitnessScript(finalScript) {\n  if (!finalScript) return;\n  const decomp = scriptWitnessToWitnessStack(finalScript);\n  const lastItem = decomp[decomp.length - 1];\n  if (isPubkeyLike(lastItem)) return;\n  const sDecomp = bscript.decompile(lastItem);\n  if (!sDecomp) return;\n  return lastItem;\n}\nfunction compressPubkey(pubkey) {\n  if (pubkey.length === 65) {\n    const parity = pubkey[64] & 1;\n    const newKey = pubkey.slice(0, 33);\n    newKey[0] = 2 | parity;\n    return newKey;\n  }\n  return pubkey.slice();\n}\nfunction isPubkeyLike(buf) {\n  return buf.length === 33 && bscript.isCanonicalPubKey(buf);\n}\nfunction isSigLike(buf) {\n  return bscript.isCanonicalScriptSignature(buf);\n}\nfunction getMeaningfulScript(\n  script,\n  index,\n  ioType,\n  redeemScript,\n  witnessScript,\n) {\n  const isP2SH = (0, psbtutils_1.isP2SHScript)(script);\n  const isP2SHP2WSH =\n    isP2SH && redeemScript && (0, psbtutils_1.isP2WSHScript)(redeemScript);\n  const isP2WSH = (0, psbtutils_1.isP2WSHScript)(script);\n  if (isP2SH && redeemScript === undefined)\n    throw new Error('scriptPubkey is P2SH but redeemScript missing');\n  if ((isP2WSH || isP2SHP2WSH) && witnessScript === undefined)\n    throw new Error(\n      'scriptPubkey or redeemScript is P2WSH but witnessScript missing',\n    );\n  let meaningfulScript;\n  if (isP2SHP2WSH) {\n    meaningfulScript = witnessScript;\n    checkRedeemScript(index, script, redeemScript, ioType);\n    checkWitnessScript(index, redeemScript, witnessScript, ioType);\n    checkInvalidP2WSH(meaningfulScript);\n  } else if (isP2WSH) {\n    meaningfulScript = witnessScript;\n    checkWitnessScript(index, script, witnessScript, ioType);\n    checkInvalidP2WSH(meaningfulScript);\n  } else if (isP2SH) {\n    meaningfulScript = redeemScript;\n    checkRedeemScript(index, script, redeemScript, ioType);\n  } else {\n    meaningfulScript = script;\n  }\n  return {\n    meaningfulScript,\n    type: isP2SHP2WSH\n      ? 'p2sh-p2wsh'\n      : isP2SH\n      ? 'p2sh'\n      : isP2WSH\n      ? 'p2wsh'\n      : 'raw',\n  };\n}\nfunction checkInvalidP2WSH(script) {\n  if (\n    (0, psbtutils_1.isP2WPKH)(script) ||\n    (0, psbtutils_1.isP2SHScript)(script)\n  ) {\n    throw new Error('P2WPKH or P2SH can not be contained within P2WSH');\n  }\n}\nfunction classifyScript(script) {\n  if ((0, psbtutils_1.isP2WPKH)(script)) return 'witnesspubkeyhash';\n  if ((0, psbtutils_1.isP2PKH)(script)) return 'pubkeyhash';\n  if ((0, psbtutils_1.isP2MS)(script)) return 'multisig';\n  if ((0, psbtutils_1.isP2PK)(script)) return 'pubkey';\n  return 'nonstandard';\n}\nfunction range(n) {\n  return [...Array(n).keys()];\n}\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.initEccLib =\n  exports.Transaction =\n  exports.opcodes =\n  exports.Psbt =\n  exports.Block =\n  exports.script =\n  exports.payments =\n  exports.networks =\n  exports.crypto =\n  exports.address =\n    void 0;\nconst address = require('./address');\nexports.address = address;\nconst crypto = require('./crypto');\nexports.crypto = crypto;\nconst networks = require('./networks');\nexports.networks = networks;\nconst payments = require('./payments');\nexports.payments = payments;\nconst script = require('./script');\nexports.script = script;\nvar block_1 = require('./block');\nObject.defineProperty(exports, 'Block', {\n  enumerable: true,\n  get: function () {\n    return block_1.Block;\n  },\n});\nvar psbt_1 = require('./psbt');\nObject.defineProperty(exports, 'Psbt', {\n  enumerable: true,\n  get: function () {\n    return psbt_1.Psbt;\n  },\n});\n/** @hidden */\nvar ops_1 = require('./ops');\nObject.defineProperty(exports, 'opcodes', {\n  enumerable: true,\n  get: function () {\n    return ops_1.OPS;\n  },\n});\nvar transaction_1 = require('./transaction');\nObject.defineProperty(exports, 'Transaction', {\n  enumerable: true,\n  get: function () {\n    return transaction_1.Transaction;\n  },\n});\nvar ecc_lib_1 = require('./ecc_lib');\nObject.defineProperty(exports, 'initEccLib', {\n  enumerable: true,\n  get: function () {\n    return ecc_lib_1.initEccLib;\n  },\n});\n","/**\n * P2WSH Data Encoder\n *\n * Implements P2WSH-based data embedding for Bitcoin data storage.\n * Supports both SRC-20 tokens and Bitcoin Stamps data embedding using direct binary data handling.\n *\n * Key Features:\n * - Direct binary data handling without base64 encoding for blockchain storage\n * - P2WSH (Pay-to-Witness-Script-Hash) script construction following BIP-141\n * - Intelligent data chunking for large binary payloads\n * - Script size validation (10,000 byte script limit, 520 byte push data limit)\n * - Witness script template: OP_FALSE OP_IF <raw_binary_chunk> OP_ENDIF\n */\n\nimport { Buffer } from 'node:buffer';\n\nimport * as bitcoin from 'bitcoinjs-lib';\n\nimport type {\n  EncodingOptions as _EncodingOptions,\n  EncodingResult as _EncodingResult,\n  IDataEncoder,\n  TransactionOutput,\n} from '../interfaces/encoders/base.interface.ts';\n\nimport type {\n  P2WSHData,\n  P2WSHEncodingOptions,\n  P2WSHEncodingResult,\n} from '../interfaces/encoders/p2wsh.interface.ts';\n\n// Re-export for backward compatibility\nexport type { P2WSHData, P2WSHEncodingOptions, P2WSHEncodingResult };\n\n// Local interface for chunk results\nexport interface P2WSHChunkResult {\n  chunks: Buffer[];\n  totalSize: number;\n  chunkCount: number;\n}\n\n/**\n * Binary Data Utilities for P2WSH encoding\n */\nexport class BinaryDataUtils {\n  // Bitcoin Script limits\n  static readonly MAX_SCRIPT_SIZE = 10000; // Bitcoin's maximum script size\n  static readonly MAX_PUSH_DATA_SIZE = 520; // Maximum data that can be pushed in one operation\n  static readonly WITNESS_SCRIPT_OVERHEAD = 6; // OP_FALSE OP_IF ... OP_ENDIF overhead\n\n  // P2WSH specific limits\n  static readonly MAX_CHUNK_SIZE = 519; // MAX_PUSH_DATA_SIZE - 1, leave room for op codes\n  static readonly DEFAULT_DUST_VALUE = 546; // Minimum UTXO value in satoshis\n\n  /**\n   * Validate if binary data can be encoded within Bitcoin's limits\n   */\n  static validateBinaryData(data: Buffer): void {\n    if (!Buffer.isBuffer(data)) {\n      throw new Error('Data must be a Buffer');\n    }\n\n    if (data.length === 0) {\n      throw new Error('Data cannot be empty');\n    }\n\n    // Calculate maximum data size based on script limits\n    const maxDataPerScript = this.MAX_SCRIPT_SIZE -\n      this.WITNESS_SCRIPT_OVERHEAD;\n    const maxTotalData = maxDataPerScript * 100; // Reasonable limit for multiple outputs\n\n    if (data.length > maxTotalData) {\n      throw new Error(\n        `Data too large: ${data.length} bytes > ${maxTotalData} bytes maximum`,\n      );\n    }\n  }\n\n  /**\n   * Chunk binary data into sizes suitable for Bitcoin script embedding\n   */\n  static chunkBinaryData(\n    data: Buffer,\n    chunkSize = this.MAX_CHUNK_SIZE,\n  ): P2WSHChunkResult {\n    this.validateBinaryData(data);\n\n    const chunks: Buffer[] = [];\n    let offset = 0;\n\n    while (offset < data.length) {\n      const remainingBytes = data.length - offset;\n      const currentChunkSize = Math.min(chunkSize, remainingBytes);\n\n      chunks.push(data.subarray(offset, offset + currentChunkSize));\n      offset += currentChunkSize;\n    }\n\n    return {\n      chunks,\n      totalSize: data.length,\n      chunkCount: chunks.length,\n    };\n  }\n\n  /**\n   * Reconstruct original data from chunks\n   */\n  static reconstructFromChunks(chunks: Buffer[]): Buffer {\n    if (chunks.length === 0) {\n      throw new Error('No chunks provided for reconstruction');\n    }\n\n    return Buffer.concat(chunks);\n  }\n\n  /**\n   * Calculate the total transaction size for given data\n   */\n  static estimateTransactionSize(\n    dataSize: number,\n    outputCount: number,\n  ): number {\n    const baseTransactionSize = 10; // Version, locktime, input/output counts\n    const inputSize = 148; // P2WPKH input size including witness\n    const outputOverhead = 8; // Value (8 bytes)\n    const scriptSizeOverhead = 1; // Script size varint\n    const averageScriptSize = 34; // P2WSH output script is 34 bytes\n    const witnessOverhead = Math.ceil(dataSize / 32) * 40; // Witness script overhead per chunk\n\n    // More comprehensive estimation including witness data\n    return (\n      baseTransactionSize +\n      inputSize +\n      (outputOverhead + scriptSizeOverhead + averageScriptSize) * outputCount +\n      witnessOverhead\n    );\n  }\n\n  /**\n   * Validate chunk integrity\n   */\n  static validateChunks(originalData: Buffer, chunks: Buffer[]): boolean {\n    const reconstructed = this.reconstructFromChunks(chunks);\n    return originalData.equals(reconstructed);\n  }\n}\n\n/**\n * P2WSH Script Constructor for Data Embedding\n */\nexport class P2WSHScriptConstructor {\n  private network: bitcoin.Network;\n\n  constructor(network: bitcoin.Network = bitcoin.networks.bitcoin) {\n    this.network = network;\n  }\n\n  /**\n   * Create a witness script for embedding binary data\n   * Pattern: OP_FALSE OP_IF <data_chunk> OP_ENDIF\n   */\n  createWitnessScript(dataChunk: Buffer): Buffer {\n    if (dataChunk.length > BinaryDataUtils.MAX_PUSH_DATA_SIZE) {\n      throw new Error(\n        `Data chunk too large: ${dataChunk.length} > ${BinaryDataUtils.MAX_PUSH_DATA_SIZE}`,\n      );\n    }\n\n    // Use typed array for compilation\n    const witnessScript = bitcoin.script.compile([\n      bitcoin.opcodes.OP_FALSE as bitcoin.StackElement,\n      bitcoin.opcodes.OP_IF as bitcoin.StackElement,\n      dataChunk as bitcoin.StackElement,\n      bitcoin.opcodes.OP_ENDIF as bitcoin.StackElement,\n    ]);\n\n    // Validate script size\n    if (witnessScript.length > BinaryDataUtils.MAX_SCRIPT_SIZE) {\n      throw new Error(\n        `Witness script too large: ${witnessScript.length} > ${BinaryDataUtils.MAX_SCRIPT_SIZE}`,\n      );\n    }\n\n    return witnessScript;\n  }\n\n  /**\n   * Create P2WSH output script from witness script\n   */\n  createP2WSHOutput(\n    witnessScript: Buffer,\n    value = BinaryDataUtils.DEFAULT_DUST_VALUE,\n  ): TransactionOutput {\n    // Generate witness script hash\n    const witnessScriptHash = bitcoin.crypto.sha256(witnessScript);\n\n    // Create P2WSH script: OP_0 <32-byte-hash>\n    const p2wshScript = bitcoin.script.compile([\n      bitcoin.opcodes.OP_0 ?? 0,\n      witnessScriptHash,\n    ]);\n\n    return {\n      script: p2wshScript,\n      value: value,\n    };\n  }\n\n  /**\n   * Extract data from witness script\n   */\n  extractDataFromWitnessScript(witnessScript: Buffer): Buffer {\n    const decompiled = bitcoin.script.decompile(witnessScript) ?? [];\n\n    if (decompiled.length !== 4) {\n      throw new Error('Invalid witness script format');\n    }\n\n    const [op0, opIf, dataChunk, opEndIf] = decompiled;\n\n    if (\n      op0 !== bitcoin.opcodes.OP_FALSE ||\n      opIf !== bitcoin.opcodes.OP_IF ||\n      opEndIf !== bitcoin.opcodes.OP_ENDIF\n    ) {\n      throw new Error('Invalid witness script pattern');\n    }\n\n    if (!Buffer.isBuffer(dataChunk)) {\n      throw new Error('Invalid data chunk in witness script');\n    }\n\n    return dataChunk;\n  }\n\n  /**\n   * Validate P2WSH output script\n   */\n  validateP2WSHOutput(outputScript: Buffer): boolean {\n    const decompiled = bitcoin.script.decompile(outputScript);\n\n    if (!decompiled || decompiled.length !== 2) {\n      return false;\n    }\n\n    if (decompiled[0] !== bitcoin.opcodes.OP_0) {\n      return false;\n    }\n\n    const hash = decompiled[1];\n    return Buffer.isBuffer(hash) && hash.length === 32;\n  }\n}\n\n/**\n * Main P2WSH Data Encoder implementation\n */\nexport class P2WSHEncoder implements IDataEncoder<P2WSHData, P2WSHEncodingOptions> {\n  private scriptConstructor: P2WSHScriptConstructor;\n  private readonly defaultDustValue: number;\n\n  constructor(\n    network: bitcoin.Network = bitcoin.networks.bitcoin,\n    dustValue = BinaryDataUtils.DEFAULT_DUST_VALUE,\n  ) {\n    this.scriptConstructor = new P2WSHScriptConstructor(network);\n    this.defaultDustValue = dustValue;\n  }\n\n  /**\n   * Encode binary data using P2WSH standard\n   */\n  encode(\n    data: P2WSHData,\n    options?: P2WSHEncodingOptions,\n    customTemplate?: any,\n  ): P2WSHEncodingResult {\n    this.validate(data);\n\n    const dustValue = options?.dustValue ?? this.defaultDustValue;\n    const maxOutputs = options?.maxOutputs ?? 100;\n\n    // Chunk the binary data\n    const chunkResult = BinaryDataUtils.chunkBinaryData(data.data);\n\n    if (chunkResult.chunkCount > maxOutputs) {\n      throw new Error(\n        `Too many chunks required: ${chunkResult.chunkCount} > ${maxOutputs} maximum outputs`,\n      );\n    }\n\n    const outputs: TransactionOutput[] = [];\n    let totalScriptSize = 0;\n\n    // Create P2WSH output for each chunk\n    for (const chunk of chunkResult.chunks) {\n      const witnessScript = this.scriptConstructor.createWitnessScript(chunk);\n      const output = this.scriptConstructor.createP2WSHOutput(\n        witnessScript,\n        dustValue,\n      );\n\n      outputs.push(output);\n      totalScriptSize += witnessScript.length;\n    }\n\n    const estimatedSize = BinaryDataUtils.estimateTransactionSize(\n      data.data.length,\n      outputs.length,\n    );\n\n    // Create a witness script and script hash for the first chunk\n    const firstChunk = data.data.slice(0, 32);\n    const paddedFirstChunk = Buffer.concat([\n      firstChunk,\n      Buffer.alloc(32 - firstChunk.length, 0),\n    ]);\n\n    const witnessScript = this.scriptConstructor.createWitnessScript(paddedFirstChunk);\n    const scriptHash = bitcoin.crypto.sha256(witnessScript);\n\n    const result: P2WSHEncodingResult = {\n      script: outputs[0]?.script || Buffer.alloc(0),\n      outputs,\n      estimatedSize,\n      dataSize: data.data.length,\n      witnessScript,\n      scriptHash,\n      redeemScript: witnessScript, // Alias for compatibility\n      requiresSignature: customTemplate?.requireSignature,\n      timelock: customTemplate?.timelock,\n      isMultisig: customTemplate?.m && customTemplate?.n,\n      requiredSignatures: customTemplate?.m,\n    };\n    return result;\n  }\n\n  /**\n   * Decode binary data from P2WSH outputs\n   */\n  decode(outputs: TransactionOutput[]): P2WSHData {\n    for (const output of outputs) {\n      if (!this.scriptConstructor.validateP2WSHOutput(output.script)) {\n        continue; // Skip non-P2WSH outputs\n      }\n\n      // For decoding, we would need the witness script, which is not available\n      // from just the output script. This would typically be provided separately\n      // or extracted from the transaction's witness data.\n      // For now, we'll throw an error indicating this limitation.\n    }\n\n    throw new Error(\n      'Decoding from P2WSH outputs requires witness scripts from transaction data',\n    );\n  }\n\n  /**\n   * Decode from witness scripts (when available)\n   */\n  decodeFromWitnessScripts(witnessScripts: Buffer[]): P2WSHData {\n    const dataChunks: Buffer[] = [];\n\n    for (const witnessScript of witnessScripts) {\n      try {\n        const chunk = this.scriptConstructor.extractDataFromWitnessScript(\n          witnessScript,\n        );\n        dataChunks.push(chunk);\n      } catch (error) {\n        // Skip invalid witness scripts\n        console.warn('Skipping invalid witness script:', error);\n      }\n    }\n\n    if (dataChunks.length === 0) {\n      throw new Error('No valid data chunks found in witness scripts');\n    }\n\n    const reconstructedData = BinaryDataUtils.reconstructFromChunks(dataChunks);\n\n    return {\n      data: reconstructedData,\n      protocol: 'P2WSH',\n    };\n  }\n\n  /**\n   * Validate P2WSH data\n   */\n  validate(data: P2WSHData): boolean {\n    if (!data || typeof data !== 'object') {\n      throw new Error('P2WSH data must be an object');\n    }\n\n    if (!Buffer.isBuffer(data.data)) {\n      throw new Error('P2WSH data.data must be a Buffer');\n    }\n\n    BinaryDataUtils.validateBinaryData(data.data);\n\n    return true;\n  }\n\n  /**\n   * Get maximum data size that can be encoded\n   */\n  getMaxDataSize(): number {\n    // Conservative estimate: 100 outputs * 519 bytes per chunk\n    return 100 * BinaryDataUtils.MAX_CHUNK_SIZE;\n  }\n\n  /**\n   * Get encoder type\n   */\n  getType(): string {\n    return 'P2WSH';\n  }\n}\n","/**\n * Bitcoin Stamps Encoder\n *\n * Complete implementation of Bitcoin Stamps protocol using:\n * - P2WSH encoding for raw binary data embedding\n * - Counterparty OP_RETURN with STAMP:filename reference\n * - Bitcoin transaction size limit (100KB max)\n * - Multi-format support (PNG, GIF, JPEG, WEBP)\n * - Comprehensive metadata handling\n *\n * Note: No pixel dimension constraints - only transaction size matters\n */\n\nimport { Buffer } from 'node:buffer';\n\nimport * as bitcoin from 'bitcoinjs-lib';\n\nimport { P2WSHEncoder } from './p2wsh-encoder.ts';\n\nimport type {\n  EncodingResult as _EncodingResult,\n  TransactionOutput,\n} from '../interfaces/encoders/base.interface.ts';\nimport { DataProcessor, STAMP_MAX_SIZE } from '../utils/data-processor.ts';\nimport type {\n  OptimizedScript,\n  PatternAnalysis,\n} from '../interfaces/internal/optimization.interface.ts';\n\n// Import stamp-specific types from organized interfaces\nimport type {\n  BitcoinStampData,\n  BitcoinStampEncodingOptions,\n  BitcoinStampEncodingResult,\n  StampMetadata,\n} from '../interfaces/encoders/stamps.interface.ts';\n\n// Re-export for backward compatibility\nexport type { BitcoinStampData, BitcoinStampEncodingOptions, BitcoinStampEncodingResult };\n\n/**\n * Counterparty Protocol Handler for Bitcoin Stamps\n *\n * Uses proper Counterparty issuance format with RC4 encryption\n * Based on counterparty-core/counterpartycore/lib/messages/issuance.py\n */\nexport class CounterpartyProtocolHandler {\n  /**\n   * Create Counterparty OP_RETURN for stamps using proper issuance encoding with RC4\n   * Following the exact counterparty-core implementation\n   */\n  static createOpReturnOutput(\n    utxos: Array<{ txid: string; vout: number; value: number }>,\n    cpid: string,\n    supply: number = 1,\n  ): TransactionOutput {\n    // Counterparty constants\n    const MESSAGE_TYPE_ISSUANCE_WITH_DESCRIPTION = 22; // LR_ISSUANCE_ID from issuance.py\n\n    // Extract asset ID from asset name\n    // Support both regular assets (A12345...) and sub-assets (A12345.SUBASSET)\n    let assetId: bigint;\n\n    if (cpid.includes('.')) {\n      // Sub-asset: PARENTASSET.SUBASSET\n      const [parentAsset, subAssetName] = cpid.split('.');\n      if (!parentAsset || !subAssetName) {\n        throw new Error(`Invalid sub-asset format: ${cpid}`);\n      }\n      const parentId = BigInt(parentAsset.substring(1)); // Remove 'A' prefix\n\n      // Validate parent asset ID is within valid range\n      if (parentId < 0n || parentId >= 2n ** 64n) {\n        throw new Error(\n          `Parent asset ID ${parentId} is out of valid range (0 to 2^64-1)`,\n        );\n      }\n\n      // For sub-assets, the asset ID is encoded differently in Counterparty\n      // Sub-assets use a special encoding combining parent ID and sub-asset name hash\n      // This is a simplified implementation - full Counterparty sub-asset encoding is more complex\n      // const subAssetHash = this.hashSubAssetName(subAssetName); // Not used in simplified version\n      assetId = parentId; // For now, use parent ID (full implementation would combine with sub-asset hash)\n\n      console.warn(\n        `Sub-asset support is basic: using parent asset ID ${parentId} for ${cpid}`,\n      );\n    } else if (cpid.startsWith('A') && /^A\\d+$/.test(cpid)) {\n      // Regular numeric asset: A12345...\n      const rawAssetId = BigInt(cpid.substring(1));\n\n      // Validate asset ID is within valid range\n      if (rawAssetId < 0n || rawAssetId >= 2n ** 64n) {\n        throw new Error(\n          `Asset ID ${rawAssetId} is out of valid range (0 to 2^64-1)`,\n        );\n      }\n\n      assetId = rawAssetId;\n    } else {\n      // Text-based CPID (for testing or special cases)\n      // Use a deterministic numeric ID based on the CPID hash\n      const nameBuffer = Buffer.from(cpid, 'utf8');\n      const hash = bitcoin.crypto.sha256(nameBuffer);\n      // Take first 8 bytes of hash as bigint\n      assetId = hash.readBigUInt64BE(0) & (2n ** 64n - 1n);\n\n      console.warn(\n        `Using hash-based ID for text CPID \"${cpid}\": ${assetId}`,\n      );\n    }\n\n    // Parameters with defaults for stamps\n    const quantity = BigInt(supply);\n    // callable/callDate/callPrice are deprecated in modern Counterparty protocol\n\n    // Description for stamps - use simple format to match stampchain.io API\n    // The API uses just \"stamp:\" as the description\n    const description = 'stamp:';\n\n    // Build Counterparty message according to the modern format\n    // For newer protocol versions, callable parameters were removed\n    // Format: >QQ???<description>\n\n    const messageBuffer = Buffer.alloc(1000); // Oversized buffer\n    let offset = 0;\n\n    // Message type (1 byte)\n    messageBuffer.writeUInt8(MESSAGE_TYPE_ISSUANCE_WITH_DESCRIPTION, offset);\n    offset += 1;\n\n    // Asset ID (8 bytes, big-endian)\n    messageBuffer.writeBigUInt64BE(assetId, offset);\n    offset += 8;\n\n    // Quantity (8 bytes, big-endian)\n    messageBuffer.writeBigUInt64BE(quantity, offset);\n    offset += 8;\n\n    // For stamps, stampchain.io uses a simplified format\n    // that omits divisible, lock, and reset fields\n    // Stamps are always: divisible=false, locked=true, reset=false\n    // But these are implied, not encoded in the message\n\n    // NOTE: For modern protocol versions (issuance_callability_parameters_removal),\n    // callable/call_date/call_price fields are NOT included\n\n    // Description (variable length UTF-8)\n    const descriptionBuffer = Buffer.from(description, 'utf8');\n    descriptionBuffer.copy(messageBuffer, offset);\n    offset += descriptionBuffer.length;\n\n    // Trim to actual size\n    const counterpartyMessage = messageBuffer.subarray(0, offset);\n\n    // Add CNTRPRTY prefix\n    const prefixedMessage = Buffer.concat([\n      Buffer.from('CNTRPRTY', 'utf8'),\n      counterpartyMessage,\n    ]);\n\n    // RC4 encrypt with first input TXID as key\n    const rc4Key = utxos[0]!.txid;\n    const encryptedMessage = this.rc4Encrypt(rc4Key, prefixedMessage);\n\n    // Create OP_RETURN script\n    const opReturnScript = bitcoin.script.compile([\n      bitcoin.opcodes.OP_RETURN ?? 0x6a, // OP_RETURN = 0x6a\n      encryptedMessage,\n    ]);\n\n    return {\n      script: opReturnScript,\n      value: 0, // OP_RETURN outputs have 0 value\n    };\n  }\n\n  /**\n   * RC4 encryption/decryption (same function for both)\n   * Based on the exact algorithm used by counterparty-core\n   */\n  private static rc4Encrypt(key: string, data: Buffer): Buffer {\n    const keyBytes = Buffer.from(key, 'hex');\n    const result = Buffer.alloc(data.length);\n\n    const s: number[] = [];\n    for (let i = 0; i < 256; i++) {\n      s[i] = i;\n    }\n\n    let j = 0;\n    for (let i = 0; i < 256; i++) {\n      j = (j + s[i]! + keyBytes[i % keyBytes.length]!) % 256;\n      [s[i], s[j]] = [s[j]!, s[i]!];\n    }\n\n    let i = 0;\n    j = 0;\n    for (let k = 0; k < data.length; k++) {\n      i = (i + 1) % 256;\n      j = (j + s[i]!) % 256;\n      [s[i], s[j]] = [s[j]!, s[i]!];\n      result[k] = data[k]! ^ s[(s[i]! + s[j]!) % 256]!;\n    }\n\n    return result;\n  }\n\n  /**\n   * Decrypt Counterparty OP_RETURN message\n   */\n  static decryptOpReturn(\n    encryptedData: Buffer,\n    inputTxid: string,\n  ): Buffer | null {\n    try {\n      return this.rc4Encrypt(inputTxid, encryptedData); // RC4 decrypt = RC4 encrypt\n    } catch {\n      return null;\n    }\n  }\n\n  /**\n   * Extract stamp information from encrypted Counterparty OP_RETURN\n   * NOTE: Requires input TXID to decrypt properly\n   */\n  static extractStampInfo(\n    opReturnScript: Buffer,\n    inputTxid?: string,\n  ): { stampId: string; filename?: string } | null {\n    try {\n      const decompiled = bitcoin.script.decompile(opReturnScript);\n      if (!decompiled || decompiled.length !== 2) return null;\n\n      if (decompiled[0] !== bitcoin.opcodes.OP_RETURN) return null;\n\n      const encryptedBuffer = decompiled[1] as Buffer;\n      if (!Buffer.isBuffer(encryptedBuffer)) return null;\n\n      // If we have the input TXID, try to decrypt\n      if (inputTxid) {\n        const decrypted = this.decryptOpReturn(encryptedBuffer, inputTxid);\n        if (decrypted) {\n          // Check for CNTRPRTY prefix\n          if (decrypted.subarray(0, 8).toString('utf8') === 'CNTRPRTY') {\n            // Parse the Counterparty message\n            const messageType = decrypted[8];\n            if (messageType === 20 || messageType === 22) {\n              const assetId = decrypted.readBigUInt64BE(9);\n\n              // Extract description if present\n              let filename = 'stamp.png'; // Default\n              if (decrypted.length > 29) {\n                const description = decrypted.subarray(29).toString('utf8')\n                  .replace(/\\0/g, '');\n                if (description.startsWith('STAMP:')) {\n                  filename = description.substring(6); // Remove 'STAMP:' prefix\n                }\n              }\n\n              return {\n                stampId: `A${assetId.toString()}`,\n                filename,\n              };\n            }\n          }\n        }\n      }\n\n      // If decryption failed or no input TXID, return basic info\n      return {\n        stampId: `ENCRYPTED_${encryptedBuffer.subarray(0, 4).toString('hex')}`,\n        filename: 'stamp.png',\n      };\n    } catch {\n      return null;\n    }\n  }\n}\n\n/**\n * Bitcoin Stamps Metadata Handler\n */\nexport class StampMetadataHandler {\n  /**\n   * Create stamp metadata object\n   */\n  static createMetadata(\n    imageData: Buffer,\n    compressedSize?: number,\n    skipValidation: boolean = false,\n  ): StampMetadata {\n    const format = DataProcessor.detectFormat(imageData);\n\n    // Create base64 data URI - for non-image data when validation is skipped, use raw base64\n    let base64URI: string;\n    if (!format && skipValidation) {\n      // For non-image data, create a raw base64 data URI\n      base64URI = `data:application/octet-stream;base64,${imageData.toString('base64')}`;\n    } else {\n      base64URI = DataProcessor.createDataURL(imageData);\n    }\n\n    return {\n      imageFormat: format || 'unknown',\n      imageDimensions: { width: 0, height: 0 }, // Dimensions not needed for stamps\n      originalSize: imageData.length,\n      ...(compressedSize !== undefined ? { compressedSize } : {}),\n      base64URI,\n    };\n  }\n\n  /**\n   * Validate stamp metadata constraints\n   */\n  static validateMetadata(metadata: StampMetadata): string[] {\n    const errors: string[] = [];\n\n    // No dimension constraints for stamps - only size matters\n    // Dimensions are just for metadata, not validation\n\n    if (metadata.originalSize > STAMP_MAX_SIZE) {\n      errors.push(\n        `Data size ${metadata.originalSize} bytes exceeds maximum ${STAMP_MAX_SIZE} bytes (Bitcoin transaction limit)`,\n      );\n    }\n\n    return errors;\n  }\n}\n\n/**\n * Encoder for creating Bitcoin Stamps protocol-compliant transactions\n *\n * @remarks\n * BitcoinStampsEncoder handles the encoding of data for Bitcoin Stamps, which store\n * data directly on-chain using multi-signature outputs. This makes the data\n * pruning-resistant and permanently stored on the Bitcoin blockchain.\n *\n * Features:\n * - Automatic data compression (gzip, brotli)\n * - Base64 encoding for binary data\n * - Protocol prefix handling ('stamp:' prefix)\n * - Multi-signature script generation\n * - P2WSH output creation\n * - Chunk size optimization for efficiency\n *\n * @example\n * ```typescript\n * const encoder = new BitcoinStampsEncoder();\n * const result = await encoder.encode({\n *   data: imageBuffer,\n *   encoding: 'gzip',\n *   pubkeys: [pubkey1, pubkey2, pubkey3]\n * });\n *\n * // result.outputs contains the P2WSH outputs for the transaction\n * ```\n */\nexport class BitcoinStampsEncoder {\n  private p2wshEncoder: P2WSHEncoder;\n  private readonly defaultOptions: Required<\n    Pick<\n      BitcoinStampEncodingOptions,\n      | 'enableCompression'\n      | 'dustValue'\n      | 'maxOutputs'\n      | 'skipValidation'\n      | 'enableOptimization'\n      | 'enablePatternAnalysis'\n    >\n  >;\n\n  constructor(\n    network: bitcoin.Network = bitcoin.networks.bitcoin,\n    options: Partial<BitcoinStampEncodingOptions> = {},\n  ) {\n    this.p2wshEncoder = new P2WSHEncoder(network, options.dustValue);\n    this.defaultOptions = {\n      enableCompression: options.enableCompression ?? false, // STAMPS DO NOT USE COMPRESSION\n      dustValue: options.dustValue ?? 330, // Standard stamp dust value\n      maxOutputs: options.maxOutputs ?? 50,\n      skipValidation: options.skipValidation ?? false,\n      enableOptimization: options.enableOptimization ?? false, // STAMPS USE RAW DATA\n      enablePatternAnalysis: options.enablePatternAnalysis ?? false, // NO ANALYSIS FOR STAMPS\n    };\n  }\n\n  /**\n   * Create fake P2WSH outputs for stamp data (stampchain.io format)\n   *\n   * CRITICAL: This is NOT standard P2WSH!\n   * Stampchain.io puts raw image data in the \"script hash\" field\n   * Format: OP_0 <32-byte-image-chunk>\n   *\n   * IMPORTANT: Stampchain.io adds a leading 0x00 byte before the image data!\n   */\n  private createStampDataOutputs(\n    imageData: Buffer,\n    dustValue: number,\n  ): TransactionOutput[] {\n    const outputs: TransactionOutput[] = [];\n    const CHUNK_SIZE = 32; // Stampchain uses 32-byte chunks\n\n    // CRITICAL: Stampchain.io prepends 0x00 + length byte before the image data\n    const lengthByte = imageData.length & 0xFF; // Length as single byte (85 = 0x55)\n    const prependedData = Buffer.concat([\n      Buffer.from([0x00, lengthByte]),\n      imageData,\n    ]);\n\n    // Split the prepended data into 32-byte chunks\n    for (let i = 0; i < prependedData.length; i += CHUNK_SIZE) {\n      const chunk = prependedData.subarray(i, i + CHUNK_SIZE);\n\n      // If chunk is less than 32 bytes, pad with zeros at the end\n      const paddedChunk = Buffer.alloc(CHUNK_SIZE);\n      chunk.copy(paddedChunk);\n\n      // Create fake P2WSH script: OP_0 <32-byte-data-chunk>\n      const fakeP2WSHScript = bitcoin.script.compile([\n        bitcoin.opcodes.OP_0 ?? 0x00, // OP_0 = 0x00\n        paddedChunk,\n      ]);\n\n      outputs.push({\n        script: fakeP2WSHScript,\n        value: dustValue,\n      });\n    }\n\n    return outputs;\n  }\n\n  /**\n   * Encode Bitcoin Stamp data using P2WSH + Counterparty OP_RETURN (async version)\n   */\n  encode(\n    data: BitcoinStampData,\n    options?: BitcoinStampEncodingOptions,\n  ): Promise<BitcoinStampEncodingResult> {\n    return Promise.resolve(this.encodeSync(data, options));\n  }\n\n  /**\n   * Encode Bitcoin Stamp data using P2WSH + Counterparty OP_RETURN (sync version)\n   */\n  encodeSync(\n    data: BitcoinStampData,\n    options?: BitcoinStampEncodingOptions,\n  ): BitcoinStampEncodingResult {\n    const opts = { ...this.defaultOptions, ...options };\n\n    // Validate input data\n    this.validate(data);\n\n    // Check size constraint (the only real constraint for stamps)\n    if (!opts.skipValidation && DataProcessor.exceedsMaxSize(data.imageData)) {\n      throw new Error(\n        `Data exceeds maximum transaction size of ${STAMP_MAX_SIZE} bytes`,\n      );\n    }\n\n    // CRITICAL: For stamps, use RAW image data - NO COMPRESSION!\n    // Stampchain.io puts the raw PNG bytes directly into P2WSH outputs\n    const binaryData = data.imageData;\n    const compressedSize: number | undefined = binaryData.length;\n    let patternAnalysis: PatternAnalysis | undefined;\n    let scriptOptimization: OptimizedScript | undefined;\n\n    // STAMPS DO NOT USE COMPRESSION OR OPTIMIZATION\n    // Stamps always use raw image data\n\n    // CRITICAL: Stamps use FAKE P2WSH (not real witness scripts)!\n    // The \"hash\" field contains raw image data chunks, not actual script hashes\n    const stampOutputs = this.createStampDataOutputs(\n      binaryData,\n      opts.dustValue,\n    );\n\n    // Create stamp metadata\n    const metadata = StampMetadataHandler.createMetadata(\n      data.imageData,\n      compressedSize,\n      opts.skipValidation,\n    );\n\n    // Validate metadata constraints\n    if (!opts.skipValidation) {\n      const metadataErrors = StampMetadataHandler.validateMetadata(metadata);\n      if (metadataErrors.length > 0) {\n        throw new Error(\n          `Stamp metadata validation failed: ${metadataErrors.join(', ')}`,\n        );\n      }\n    }\n\n    // Create Counterparty OP_RETURN using proper RC4 encryption (same as stampchain.io /olga endpoint)\n    const opReturnOutput = CounterpartyProtocolHandler.createOpReturnOutput(\n      opts.utxos || [{ txid: '0'.repeat(64), vout: 0, value: 0 }], // Default for testing\n      opts.cpid || `A${95428956661682177n + BigInt(Date.now() % 1000000)}`, // Generate valid numeric CPID in valid range\n      opts.supply ?? 1,\n    );\n\n    // CRITICAL: Output order must match stampchain.io!\n    // OP_RETURN MUST come first, then fake P2WSH outputs\n    const allOutputs = [\n      opReturnOutput, // Counterparty OP_RETURN MUST BE FIRST\n      ...stampOutputs, // Fake P2WSH outputs with raw image data\n    ];\n\n    // No optimization needed for fake P2WSH stamp outputs\n\n    const result: BitcoinStampEncodingResult = {\n      script: stampOutputs[0]?.script || Buffer.alloc(0),\n      outputs: allOutputs,\n      estimatedSize: stampOutputs.length * 34 + opReturnOutput.script.length,\n      dataSize: binaryData.length,\n      p2wshOutputs: stampOutputs, // These are fake P2WSH outputs\n      opReturnOutput,\n      metadata,\n      compressionUsed: false, // Bitcoin stamps don't use compression\n      ...(patternAnalysis ? { patternAnalysis } : {}),\n      ...(scriptOptimization ? { scriptOptimization } : {}),\n    };\n    return result;\n  }\n\n  /**\n   * Decode Bitcoin Stamp data from transaction outputs\n   */\n  decode(outputs: TransactionOutput[]): BitcoinStampData {\n    // Separate P2WSH and OP_RETURN outputs\n    const p2wshOutputs: TransactionOutput[] = [];\n    let opReturnOutput: TransactionOutput | null = null;\n\n    for (const output of outputs) {\n      const decompiled = bitcoin.script.decompile(output.script);\n      if (!decompiled) continue;\n\n      if (decompiled[0] === bitcoin.opcodes.OP_RETURN) {\n        opReturnOutput = output;\n      } else {\n        // Assume other outputs are P2WSH (would need proper validation in production)\n        p2wshOutputs.push(output);\n      }\n    }\n\n    if (!opReturnOutput) {\n      throw new Error('No Counterparty OP_RETURN output found');\n    }\n\n    if (p2wshOutputs.length === 0) {\n      throw new Error('No P2WSH data outputs found');\n    }\n\n    // Extract stamp info from OP_RETURN\n    const stampInfo = CounterpartyProtocolHandler.extractStampInfo(\n      opReturnOutput.script,\n    );\n    if (!stampInfo) {\n      throw new Error('Invalid Counterparty OP_RETURN format');\n    }\n\n    // Note: For proper decoding, we would need the witness scripts from the transaction\n    // This is a limitation of decoding from outputs alone\n    throw new Error(\n      'Decoding Bitcoin Stamps requires witness scripts from transaction data',\n    );\n  }\n\n  /**\n   * Validate Bitcoin Stamp data\n   */\n  validate(data: BitcoinStampData): boolean {\n    if (!data || typeof data !== 'object') {\n      throw new Error('BitcoinStampData must be an object');\n    }\n\n    if (!Buffer.isBuffer(data.imageData) || data.imageData.length === 0) {\n      throw new Error('imageData must be a non-empty Buffer');\n    }\n\n    // Note: mimeType is not part of on-chain spec; no validation needed here\n\n    // Validate optional string fields\n    const stringFields = ['title', 'description', 'creator', 'filename'];\n    for (const field of stringFields) {\n      const value = (data as any)[field];\n      if (value !== undefined && typeof value !== 'string') {\n        throw new Error(`${field} must be a string if provided`);\n      }\n    }\n\n    return true;\n  }\n\n  /**\n   * Get maximum data size that can be encoded\n   */\n  getMaxDataSize(): number {\n    return Math.min(\n      STAMP_MAX_SIZE,\n      this.p2wshEncoder.getMaxDataSize(),\n    );\n  }\n\n  /**\n   * Get encoder type\n   */\n  getType(): string {\n    return 'bitcoin-stamps';\n  }\n\n  /**\n   * Create a Bitcoin Stamp from base64 image data\n   */\n  static fromBase64(\n    base64Data: string,\n    options: {\n      title?: string;\n      description?: string;\n      creator?: string;\n      filename?: string;\n    } = {},\n  ): BitcoinStampData {\n    // Validate and extract image data\n    // Decode base64 data\n    let imageData: Buffer;\n    try {\n      // Handle data URLs\n      let cleanBase64 = base64Data;\n      if (base64Data.startsWith('data:')) {\n        const base64Index = base64Data.indexOf('base64,');\n        if (base64Index !== -1) {\n          cleanBase64 = base64Data.substring(base64Index + 7);\n        }\n      }\n      imageData = Buffer.from(cleanBase64, 'base64');\n    } catch (error) {\n      throw new Error(`Invalid base64 data: ${error}`);\n    }\n\n    // Check size constraint\n    if (DataProcessor.exceedsMaxSize(imageData)) {\n      throw new Error(`Data exceeds maximum transaction size of ${STAMP_MAX_SIZE} bytes`);\n    }\n\n    return {\n      imageData,\n      // mimeType is not part of on-chain spec; omit from input type for clarity\n      ...(options.title ? { title: options.title } : {}),\n      ...(options.description ? { description: options.description } : {}),\n      ...(options.creator ? { creator: options.creator } : {}),\n      ...(options.filename ? { filename: options.filename } : {}),\n    };\n  }\n\n  /**\n   * Create a Bitcoin Stamp from file buffer\n   */\n  static fromBuffer(\n    imageBuffer: Buffer,\n    options: {\n      title?: string;\n      description?: string;\n      creator?: string;\n      filename?: string;\n    } = {},\n  ): BitcoinStampData {\n    // Check size constraint\n    if (DataProcessor.exceedsMaxSize(imageBuffer)) {\n      throw new Error(`Data exceeds maximum transaction size of ${STAMP_MAX_SIZE} bytes`);\n    }\n\n    // MIME type is not required for on-chain encoding; detection omitted\n\n    return {\n      imageData: imageBuffer,\n      // mimeType is not part of on-chain spec; omit from input type for clarity\n      ...(options.title ? { title: options.title } : {}),\n      ...(options.description ? { description: options.description } : {}),\n      ...(options.creator ? { creator: options.creator } : {}),\n      ...(options.filename ? { filename: options.filename } : {}),\n    };\n  }\n\n  /**\n   * Extract stamp data from transaction outputs (new format with filename in OP_RETURN)\n   */\n  static extractStampFromTransaction(\n    outputs: TransactionOutput[],\n  ): BitcoinStampData | null {\n    // Find OP_RETURN output\n    const opReturnOutput = outputs.find((output) => {\n      const decompiled = bitcoin.script.decompile(output.script);\n      return decompiled && decompiled[0] === bitcoin.opcodes.OP_RETURN;\n    });\n\n    if (!opReturnOutput) {\n      return null;\n    }\n\n    // Extract filename from OP_RETURN\n    const stampInfo = CounterpartyProtocolHandler.extractStampInfo(\n      opReturnOutput.script,\n    );\n    if (!stampInfo) {\n      return null;\n    }\n\n    // Find P2WSH outputs containing the image data\n    const p2wshOutputs = outputs.filter((output) => {\n      const decompiled = bitcoin.script.decompile(output.script);\n      return decompiled && decompiled[0] !== bitcoin.opcodes.OP_RETURN;\n    });\n\n    if (p2wshOutputs.length === 0) {\n      return null;\n    }\n\n    // Note: In a full implementation, we would decode the witness scripts\n    // to extract the actual image data from P2WSH outputs\n    // For now, we return the metadata we can extract\n    return {\n      imageData: Buffer.alloc(0), // Would need witness script data to decode\n      ...(stampInfo.filename ? { filename: stampInfo.filename } : {}),\n      description: 'Extracted from transaction',\n    };\n  }\n}\n","/**\n * Data Processing Utilities for Bitcoin Stamps\n *\n * Bitcoin Stamps can store ANY data format on-chain.\n * This utility provides optional format detection for metadata purposes only.\n */\n\nimport { Buffer } from 'node:buffer';\n\nexport interface DataInfo {\n  format: string;\n  size: number;\n  width?: number;\n  height?: number;\n}\n\n/**\n * Bitcoin Stamps transaction size constraint\n */\nexport const STAMP_MAX_SIZE = 100000; // 100KB - Bitcoin transaction size limit\n\n/**\n * Data Processing Utilities\n */\nexport class DataProcessor {\n  /**\n   * Detect common data format from binary data (optional - for metadata only)\n   * Returns 'UNKNOWN' for unrecognized formats (which is perfectly valid for Stamps)\n   */\n  static detectFormat(data: Buffer): string {\n    if (data.length < 8) return 'UNKNOWN';\n\n    // PNG signature\n    if (\n      data.subarray(0, 8).equals(\n        Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]),\n      )\n    ) {\n      return 'PNG';\n    }\n\n    // GIF signatures\n    if (\n      data.subarray(0, 6).equals(Buffer.from('GIF87a', 'ascii')) ||\n      data.subarray(0, 6).equals(Buffer.from('GIF89a', 'ascii'))\n    ) {\n      return 'GIF';\n    }\n\n    // JPEG signature\n    if (data.subarray(0, 3).equals(Buffer.from([0xff, 0xd8, 0xff]))) {\n      return 'JPEG';\n    }\n\n    // WebP signature\n    if (\n      data.subarray(0, 4).equals(Buffer.from('RIFF', 'ascii')) &&\n      data.length > 12 &&\n      data.subarray(8, 12).equals(Buffer.from('WEBP', 'ascii'))\n    ) {\n      return 'WEBP';\n    }\n\n    // JSON detection\n    const str = data.toString('utf8', 0, Math.min(100, data.length));\n    if (str.trimStart().startsWith('{') || str.trimStart().startsWith('[')) {\n      try {\n        JSON.parse(data.toString('utf8'));\n        return 'JSON';\n      } catch {\n        // Not valid JSON\n      }\n    }\n\n    // Text detection (simple heuristic)\n    if (this.isProbablyText(data)) {\n      return 'TEXT';\n    }\n\n    return 'UNKNOWN'; // Unknown format is perfectly valid for Stamps\n  }\n\n  /**\n   * Simple heuristic to detect if data is likely text\n   */\n  private static isProbablyText(data: Buffer): boolean {\n    const sample = data.subarray(0, Math.min(1000, data.length));\n    let printableCount = 0;\n\n    for (const byte of sample) {\n      // Check if byte is printable ASCII or common whitespace\n      if ((byte >= 32 && byte <= 126) || byte === 9 || byte === 10 || byte === 13) {\n        printableCount++;\n      }\n    }\n\n    // If >90% of bytes are printable, likely text\n    return printableCount / sample.length > 0.9;\n  }\n\n  /**\n   * Create a data URL from binary data\n   * Useful for preview/display purposes\n   */\n  static createDataURL(data: Buffer, mimeType?: string): string {\n    const base64 = data.toString('base64');\n\n    if (mimeType) {\n      return `data:${mimeType};base64,${base64}`;\n    }\n\n    // Auto-detect mime type from format\n    const format = this.detectFormat(data);\n    const mimeMap: Record<string, string> = {\n      'PNG': 'image/png',\n      'GIF': 'image/gif',\n      'JPEG': 'image/jpeg',\n      'WEBP': 'image/webp',\n      'JSON': 'application/json',\n      'TEXT': 'text/plain',\n    };\n\n    const detectedMime = mimeMap[format] || 'application/octet-stream';\n    return `data:${detectedMime};base64,${base64}`;\n  }\n\n  /**\n   * Get data info for metadata purposes\n   */\n  static getDataInfo(data: Buffer): DataInfo {\n    return {\n      format: this.detectFormat(data),\n      size: data.length,\n    };\n  }\n\n  /**\n   * Check if data exceeds transaction size limit\n   * This is the ONLY real constraint for Bitcoin Stamps\n   */\n  static exceedsMaxSize(data: Buffer): boolean {\n    return data.length > STAMP_MAX_SIZE;\n  }\n}\n","/**\n * SRC-20 Token Encoder/Decoder\n *\n * Production-compatible implementation matching BTCStampsExplorer exactly\n * Uses direct data embedding in P2WSH script hashes\n *\n * Reference: BTCStampsExplorer/utils/decodeSrc20OlgaTx.ts\n */\n\nimport * as bitcoin from 'bitcoinjs-lib';\nimport * as zlib from 'node:zlib';\nimport * as msgpack from 'msgpack-lite';\nimport { Buffer } from 'node:buffer';\nimport type { TransactionOutput } from '../interfaces/encoders/base.interface.ts';\nimport type {\n  SRC20Data,\n  SRC20DeployData,\n  SRC20MintData,\n  SRC20Operation,\n  SRC20TransferData,\n} from '../interfaces/src20.interface.ts';\nimport { RC4 } from './counterparty-encoder.ts';\nimport type { SRC20EncodingOptions, SRC20EncodingResult } from '../interfaces/src20.interface.ts';\n\n// Re-export SRC20 types and encoding types\nexport type {\n  SRC20Data,\n  SRC20DeployData,\n  SRC20EncodingOptions,\n  SRC20EncodingResult,\n  SRC20MintData,\n  SRC20Operation,\n  SRC20TransferData,\n} from '../interfaces/src20.interface.ts';\n\nconst STAMP_PREFIX = 'stamp:';\nconst DUST_VALUE = 330; // Match Bitcoin Stamps P2WSH dust exactly\nconst CHUNK_SIZE = 32; // P2WSH script hash size\n\n// Bitcoin network standardness limits\nconst MAX_STANDARD_TX_SIZE = 100000; // 100KB max standard transaction size\nconst P2WSH_OUTPUT_SIZE = 34; // Approximate size of a P2WSH output in bytes\nconst DEFAULT_MAX_OUTPUTS = Math.floor(\n  MAX_STANDARD_TX_SIZE / P2WSH_OUTPUT_SIZE,\n); // ~2940 outputs\n\n/**\n * SRC-20 Encoder Implementation\n * Matches BTCStampsExplorer production exactly\n */\nexport class SRC20Encoder {\n  constructor(_network: bitcoin.Network = bitcoin.networks.bitcoin) {\n    // Network parameter kept for API compatibility but not used\n  }\n\n  /**\n   * Encode SRC-20 data using direct P2WSH data embedding\n   * Data is embedded directly in the script hash, NOT in witness scripts\n   * Supports both sync and async usage for backward compatibility\n   */\n  encode(data: SRC20Data | SRC20Operation, options?: SRC20EncodingOptions): SRC20EncodingResult {\n    // Convert generic SRC20Operation to specific type if needed\n    const normalizedData = this.normalizeSRC20Operation(data);\n    return this.encodeSync(normalizedData, options);\n  }\n\n  /**\n   * Async version of encode for compatibility\n   */\n  encodeAsync(\n    data: SRC20Data | SRC20Operation,\n    options?: SRC20EncodingOptions,\n  ): Promise<SRC20EncodingResult> {\n    return Promise.resolve(this.encode(data, options));\n  }\n\n  /**\n   * Encode SRC-20 data using direct P2WSH data embedding (sync version)\n   * Data is embedded directly in the script hash, NOT in witness scripts\n   *\n   * NEW: Creates complete transaction outputs including dust outputs in stampchain order\n   */\n  encodeSync(data: SRC20Data, options?: SRC20EncodingOptions): SRC20EncodingResult {\n    const dustValue = options?.dustValue ?? DUST_VALUE;\n    // Use Bitcoin's standard transaction size limit as our default maximum\n    // This is a practical limit based on relay policy, not consensus rules\n    const maxOutputs = options?.maxOutputs ?? DEFAULT_MAX_OUTPUTS;\n\n    // Validate data\n    const errors = this.getValidationErrors(data);\n    if (errors.length > 0) {\n      throw new Error(`Invalid SRC-20 data: ${errors.join(', ')}`);\n    }\n\n    // Normalize data to production format\n    const normalized = this.normalizeData(data);\n    const jsonStr = JSON.stringify(normalized);\n\n    // Prepare data with compression if beneficial\n    let finalData: Buffer;\n    let compressed = false;\n\n    if (options?.useCompression !== false && jsonStr.length > 100) {\n      try {\n        const msgpacked = msgpack.encode(normalized);\n        const zlibCompressed = zlib.deflateSync(msgpacked);\n\n        if (zlibCompressed.length < Buffer.from(jsonStr).length) {\n          finalData = Buffer.concat([\n            Buffer.from(STAMP_PREFIX),\n            zlibCompressed,\n          ]);\n          compressed = true;\n        } else {\n          finalData = Buffer.concat([\n            Buffer.from(STAMP_PREFIX),\n            Buffer.from(jsonStr),\n          ]);\n        }\n      } catch {\n        finalData = Buffer.concat([\n          Buffer.from(STAMP_PREFIX),\n          Buffer.from(jsonStr),\n        ]);\n      }\n    } else {\n      finalData = Buffer.concat([\n        Buffer.from(STAMP_PREFIX),\n        Buffer.from(jsonStr),\n      ]);\n    }\n\n    // Create P2WSH outputs with direct data embedding\n    const p2wshOutputs = this.createP2WSHOutputs(finalData, dustValue);\n\n    // This is a sanity check, not a protocol requirement\n    if (p2wshOutputs.length > maxOutputs) {\n      throw new Error(\n        `Too many outputs: ${p2wshOutputs.length} > ${maxOutputs}. This is a sanity limit, not a Bitcoin protocol requirement. You can increase it via options.maxOutputs`,\n      );\n    }\n\n    // Create complete transaction outputs in stampchain order\n    const allOutputs = this.createCompleteOutputs(data, p2wshOutputs, options);\n\n    // Calculate estimated transaction size\n    const estimatedSize = this.estimateTransactionSize(allOutputs.length);\n\n    // Create Counterparty OP_RETURN output for SRC-20 (for compatibility, not included in outputs)\n    const opReturnOutput = this.createOpReturnOutput(normalized);\n\n    return {\n      script: p2wshOutputs[0]?.script || Buffer.alloc(0),\n      outputs: allOutputs, // Complete transaction outputs in stampchain order\n      p2wshOutputs,\n      opReturnOutput, // Required by tests\n      jsonData: jsonStr,\n      chunkCount: p2wshOutputs.length,\n      compressionUsed: compressed,\n      totalDustValue: allOutputs.reduce((sum, output) => sum + output.value, 0),\n      estimatedSize: estimatedSize,\n      dataSize: finalData.length,\n      totalSize: finalData.length,\n    };\n  }\n\n  /**\n   * Normalize SRC20Operation to SRC20Data type\n   */\n  private normalizeSRC20Operation(data: SRC20Data | SRC20Operation): SRC20Data {\n    // Check if this is a generic SRC20Operation type\n    const opData = data as any;\n    const op = data.op?.toUpperCase() as any;\n\n    switch (op) {\n      case 'DEPLOY':\n        return {\n          p: data.p, // Preserve original protocol for validation\n          op: 'DEPLOY',\n          tick: data.tick,\n          max: opData.max, // Don't provide defaults for validation\n          lim: opData.lim, // Don't provide defaults for validation\n          ...(opData.dec !== undefined ? { dec: Number(opData.dec) } : {}),\n          ...(opData.description ? { description: opData.description } : {}),\n          ...(opData.x ? { x: opData.x } : {}),\n          ...(opData.web ? { web: opData.web } : {}),\n          ...(opData.email ? { email: opData.email } : {}),\n          ...(opData.tg ? { tg: opData.tg } : {}),\n          ...(opData.img ? { img: opData.img } : {}),\n          ...(opData.icon ? { icon: opData.icon } : {}),\n        } as SRC20DeployData;\n\n      case 'MINT':\n        return {\n          p: data.p, // Preserve original protocol for validation\n          op: 'MINT',\n          tick: data.tick,\n          amt: Array.isArray(opData.amt) ? opData.amt[0] : opData.amt, // Don't provide default for validation\n        } as SRC20MintData;\n\n      case 'TRANSFER':\n        return {\n          p: data.p, // Preserve original protocol for validation\n          op: 'TRANSFER',\n          tick: data.tick,\n          amt: Array.isArray(opData.amt) ? opData.amt.join(',') : opData.amt, // Don't provide default for validation\n          ...(opData.dest ? { dest: opData.dest } : {}), // Include dest if provided\n        } as SRC20TransferData;\n\n      default:\n        // If it's already the correct type, return as-is\n        return data as SRC20Data;\n    }\n  }\n\n  /**\n   * Async encode with automatic compression decision\n   */\n  encodeWithCompression(\n    data: SRC20Data,\n    options?: SRC20EncodingOptions,\n  ): SRC20EncodingResult {\n    // Try both compressed and uncompressed\n    const uncompressed = this.encodeSync(data, {\n      ...options,\n      useCompression: false,\n    });\n    const compressed = this.encodeSync(data, { ...options, useCompression: true });\n\n    // Use whichever produces fewer outputs\n    return compressed.outputs.length < uncompressed.outputs.length ? compressed : uncompressed;\n  }\n\n  /**\n   * Decode SRC-20 data from P2WSH outputs\n   */\n  async decodeFromOutputs(\n    p2wshOutputs: Array<{ script: Buffer; value: number }>,\n  ): Promise<SRC20Data | null> {\n    try {\n      const hexData = P2WSHAddressUtils.outputsToHex(p2wshOutputs);\n      if (!hexData) {\n        return null;\n      }\n\n      const dataBuffer = Buffer.from(hexData, 'hex');\n\n      // Check for stamp: prefix at the beginning of the buffer\n      const stampPrefixBuffer = Buffer.from(STAMP_PREFIX);\n      if (\n        !dataBuffer.subarray(0, stampPrefixBuffer.length).equals(\n          stampPrefixBuffer,\n        )\n      ) {\n        return null;\n      }\n\n      // Extract data after stamp: prefix\n      const dataWithoutPrefix = dataBuffer.subarray(stampPrefixBuffer.length);\n\n      // Try decompression and msgpack decoding first\n      try {\n        const uncompressed = await this.zlibDecompress(dataWithoutPrefix);\n        const decoded = msgpack.decode(uncompressed);\n\n        // Validate protocol (accept both cases for backward compatibility)\n        if (decoded.p !== 'src-20' && decoded.p !== 'SRC-20') {\n          throw new Error('Protocol must be \"SRC-20\"');\n        }\n\n        return this.denormalizeData(decoded);\n      } catch {\n        // Fallback to JSON parsing for uncompressed data\n        try {\n          const jsonString = dataWithoutPrefix.toString('utf8');\n          const decoded = JSON.parse(jsonString);\n\n          // Validate protocol (accept both cases for backward compatibility)\n          if (decoded.p !== 'src-20' && decoded.p !== 'SRC-20') {\n            throw new Error('Protocol must be \"SRC-20\"');\n          }\n\n          return this.denormalizeData(decoded);\n        } catch {\n          return null;\n        }\n      }\n    } catch (error) {\n      console.error('Error decoding SRC-20 data:', error);\n      return null;\n    }\n  }\n\n  /**\n   * Decode SRC-20 data from transaction\n   * Matches BTCStampsExplorer/utils/decodeSrc20OlgaTx.ts\n   */\n  async decode(tx: bitcoin.Transaction): Promise<SRC20Data | null> {\n    try {\n      // Find P2WSH outputs\n      const p2wshOutputs = tx.outs.filter((output) => {\n        const decompiled = bitcoin.script.decompile(output.script);\n        return decompiled &&\n          decompiled[0] === bitcoin.opcodes.OP_0 &&\n          decompiled[1] &&\n          (decompiled[1] as Buffer).length === 32;\n      });\n\n      if (p2wshOutputs.length === 0) {\n        return null;\n      }\n\n      // Extract data from P2WSH outputs\n      let encodedData = '';\n      for (const output of p2wshOutputs) {\n        // Skip OP_0 and push byte (first 2 bytes)\n        const dataBytes = output.script.subarray(2);\n        encodedData += dataBytes.toString('hex');\n      }\n\n      // Remove padding zeros\n      encodedData = encodedData.replace(/0+$/, '');\n\n      // Extract the length prefix (2 bytes)\n      const lengthPrefix = parseInt(encodedData.slice(0, 4), 16);\n\n      // Convert hex data to buffer, excluding the length prefix\n      const dataBuffer = Buffer.from(encodedData.slice(4), 'hex').subarray(0, lengthPrefix);\n\n      // Check for STAMP prefix\n      if (!dataBuffer.toString('utf8').startsWith(STAMP_PREFIX)) {\n        return null;\n      }\n\n      const dataWithoutPrefix = dataBuffer.subarray(STAMP_PREFIX.length);\n\n      // Try decompression and msgpack decoding\n      try {\n        const uncompressed = await this.zlibDecompress(dataWithoutPrefix);\n        const decoded = msgpack.decode(uncompressed);\n        return this.denormalizeData(decoded);\n      } catch {\n        // Fallback to JSON\n        try {\n          const decoded = JSON.parse(dataWithoutPrefix.toString('utf8'));\n          return this.denormalizeData(decoded);\n        } catch {\n          return null;\n        }\n      }\n    } catch (error) {\n      console.error(\n        'Error decoding SRC-20 data:',\n        error instanceof Error ? error.message : String(error),\n      );\n      return null;\n    }\n  }\n\n  /**\n   * Validate SRC-20 data\n   */\n  validate(data: any): boolean {\n    return this.getValidationErrors(data).length === 0;\n  }\n\n  /**\n   * Get validation errors\n   */\n  getValidationErrors(data: SRC20Data): string[] {\n    const errors: string[] = [];\n\n    if (!data) {\n      errors.push('Data is required');\n      return errors;\n    }\n\n    // Check protocol (accept both cases for backward compatibility)\n    if (!data.p || (data.p !== 'SRC-20' && data.p !== 'src-20')) {\n      errors.push('Protocol must be \"SRC-20\"');\n    }\n\n    // Check operation\n    const validOps = ['DEPLOY', 'MINT', 'TRANSFER'];\n    if (!data.op || !validOps.includes(data.op.toUpperCase())) {\n      errors.push(`Invalid operation: ${data.op}`);\n    }\n\n    // Check tick - SRC-20 protocol enforces 5 character maximum\n    if (!data.tick || data.tick.trim() === '') {\n      errors.push('Missing required field: tick');\n    } else if (data.tick.length > 5) {\n      errors.push(\n        `Ticker \"${data.tick}\" exceeds 5 character limit (got ${data.tick.length} chars)`,\n      );\n    } else if (!/^[A-Z0-9]{1,5}$/.test(data.tick.toUpperCase())) {\n      errors.push('Invalid tick format (1-5 uppercase alphanumeric characters)');\n    }\n\n    // Operation-specific validation\n    switch (data.op?.toUpperCase()) {\n      case 'DEPLOY': {\n        const deployData = data as any; // SRC20DeployData\n        if (!deployData.max) errors.push('Missing required field: max');\n        if (!deployData.lim) errors.push('Missing required field: lim');\n\n        // Validate max value (more reasonable upper bound)\n        if (deployData.max) {\n          try {\n            const maxNum = BigInt(deployData.max);\n            if (maxNum > BigInt('18446744073709551615')) { // uint64 is the maximum allowed\n              errors.push('Number too large: max value exceeds maximum allowed');\n            }\n            if (maxNum <= 0n) {\n              errors.push('Max value must be positive');\n            }\n          } catch {\n            errors.push('Invalid max value format');\n          }\n        }\n\n        // Validate lim value (more reasonable upper bound)\n        if (deployData.lim) {\n          try {\n            const limNum = BigInt(deployData.lim);\n            if (limNum > BigInt('18446744073709551615')) { // uint64 is the maximum allowed\n              errors.push('Number too large: lim value exceeds maximum allowed');\n            }\n            if (limNum <= 0n) {\n              errors.push('Lim value must be positive');\n            }\n          } catch {\n            errors.push('Invalid lim value format');\n          }\n        }\n\n        // Validate decimals if provided\n        if (deployData.dec !== undefined) {\n          const dec = parseInt(deployData.dec);\n          if (isNaN(dec) || dec < 0 || dec > 18) {\n            errors.push('Decimals must be between 0 and 18');\n          }\n        }\n\n        // Validate image references (must be protocol:hash format)\n        const validateImageRef = (field: string, value: string) => {\n          if (value && !value.match(/^(ipfs|ar|sia|storj):[A-Za-z0-9]+$/)) {\n            errors.push(\n              `Invalid ${field} format (must be protocol:hash, e.g., ipfs:QmXyz...)`,\n            );\n          }\n        };\n\n        if (deployData.img) validateImageRef('img', deployData.img);\n        if (deployData.icon) validateImageRef('icon', deployData.icon);\n        break;\n      }\n\n      case 'MINT': {\n        const mintData = data as SRC20MintData;\n        const amtStr = String(mintData.amt || '');\n        if (!mintData.amt || amtStr.trim() === '') {\n          errors.push('Missing required field: amt');\n        } else {\n          // Check if it's a valid number first\n          const amount = parseFloat(amtStr);\n          if (isNaN(amount)) {\n            errors.push('Invalid amount: not a number');\n          } else if (amount <= 0) {\n            errors.push('Invalid amount: amount must be positive');\n          } else {\n            // For integer values, check uint64 limit\n            // For decimal values, just ensure they're reasonable\n            try {\n              // If it looks like an integer (no decimal point or .0), check as BigInt\n              if (!amtStr.includes('.') || amtStr.endsWith('.0')) {\n                const amtBigInt = BigInt(amtStr.replace('.0', ''));\n                if (amtBigInt > BigInt('18446744073709551615')) { // uint64 max\n                  errors.push('Amount exceeds maximum allowed (uint64 limit)');\n                }\n              }\n            } catch {\n              // If BigInt conversion fails, it's likely a decimal - that's ok\n            }\n          }\n        }\n        break;\n      }\n\n      case 'TRANSFER': {\n        const transferData = data as SRC20TransferData;\n        const amtStr = String(transferData.amt || '');\n        if (!transferData.amt || amtStr.trim() === '') {\n          errors.push('Missing required field: amt');\n        } else {\n          // Check if it's a valid number first\n          const amount = parseFloat(amtStr);\n          if (isNaN(amount)) {\n            errors.push('Invalid amount: not a number');\n          } else if (amount <= 0) {\n            errors.push('Invalid amount: amount must be positive');\n          } else {\n            // For integer values, check uint64 limit\n            // For decimal values, just ensure they're reasonable\n            try {\n              // If it looks like an integer (no decimal point or .0), check as BigInt\n              if (!amtStr.includes('.') || amtStr.endsWith('.0')) {\n                const amtBigInt = BigInt(amtStr.replace('.0', ''));\n                if (amtBigInt > BigInt('18446744073709551615')) { // uint64 max\n                  errors.push('Amount exceeds maximum allowed (uint64 limit)');\n                }\n              }\n            } catch {\n              // If BigInt conversion fails, it's likely a decimal - that's ok\n            }\n          }\n        }\n        break;\n      }\n    }\n\n    return errors;\n  }\n\n  /**\n   * Create complete transaction outputs in stampchain order\n   * This is the key method that makes SRC-20 encoding as simple as Bitcoin Stamps\n   */\n  private createCompleteOutputs(\n    data: SRC20Data,\n    p2wshOutputs: TransactionOutput[],\n    options?: SRC20EncodingOptions,\n  ): TransactionOutput[] {\n    const allOutputs: TransactionOutput[] = [];\n    const dustValue = options?.dustValue ?? DUST_VALUE;\n    const network = options?.network ?? bitcoin.networks.bitcoin;\n\n    // Stampchain SRC-20 output order:\n    // 1. P2WPKH dust to sender (for DEPLOY/MINT) or recipient (for TRANSFER)\n    // 2. P2WSH data outputs\n    // 3. Change output (handled by builder, not encoder)\n\n    if (data.op === 'TRANSFER' && options?.toAddress) {\n      // TRANSFER: Recipient gets dust output FIRST\n      const recipientScript = bitcoin.address.toOutputScript(options.toAddress, network);\n      allOutputs.push({\n        script: recipientScript,\n        value: dustValue,\n      });\n    } else if (options?.fromAddress) {\n      // DEPLOY/MINT: Sender gets dust output FIRST\n      const senderScript = bitcoin.address.toOutputScript(options.fromAddress, network);\n      allOutputs.push({\n        script: senderScript,\n        value: dustValue,\n      });\n    }\n\n    // Add P2WSH data outputs\n    allOutputs.push(...p2wshOutputs);\n\n    return allOutputs;\n  }\n\n  /**\n   * Create P2WSH outputs with direct data embedding\n   * Data is embedded directly in the 32-byte \"hash\", NOT in witness scripts\n   * Production format: Single P2WSH output with length-prefixed data\n   */\n  private createP2WSHOutputs(\n    data: Buffer,\n    dustValue: number,\n  ): TransactionOutput[] {\n    const outputs: TransactionOutput[] = [];\n\n    // Add 2-byte length prefix: [0x00, single_byte_length]\n    // Stampchain uses [null_byte, length_byte] format, NOT uint16!\n    const lengthPrefix = Buffer.from([0x00, data.length & 0xFF]);\n\n    // Combine length prefix with data\n    const prefixedData = Buffer.concat([lengthPrefix, data]);\n\n    // For single output: if data fits in 32 bytes (minus 2 for length prefix)\n    // Production uses single P2WSH when possible\n    if (prefixedData.length <= CHUNK_SIZE) {\n      // Pad to 32 bytes\n      const paddedData = Buffer.concat([\n        prefixedData,\n        Buffer.alloc(CHUNK_SIZE - prefixedData.length, 0),\n      ]);\n\n      // Create single P2WSH script\n      const script = Buffer.concat([\n        Buffer.from([0x00, 0x20]), // OP_0 + push 32 bytes\n        paddedData, // Our data directly embedded with length prefix\n      ]);\n\n      outputs.push({\n        script,\n        value: dustValue,\n      });\n    } else {\n      // For larger data, chunk it (but still with length prefix in first chunk)\n      for (let i = 0; i < prefixedData.length; i += CHUNK_SIZE) {\n        const chunk = prefixedData.subarray(i, Math.min(i + CHUNK_SIZE, prefixedData.length));\n\n        // Pad chunk to 32 bytes if needed\n        const paddedChunk = Buffer.concat([\n          chunk,\n          Buffer.alloc(CHUNK_SIZE - chunk.length, 0),\n        ]);\n\n        // Create P2WSH script: OP_0 + 32-byte data\n        const script = Buffer.concat([\n          Buffer.from([0x00, 0x20]), // OP_0 + push 32 bytes\n          paddedChunk, // Our data directly embedded\n        ]);\n\n        outputs.push({\n          script,\n          value: dustValue,\n        });\n      }\n    }\n\n    return outputs;\n  }\n\n  /**\n   * Normalize data to production format\n   * lowercase protocol and operation to match real transactions, uppercase tick, numbers not strings for amounts\n   */\n  private normalizeData(data: SRC20Data): any {\n    const normalized: any = {\n      p: 'src-20', // Lowercase to match real transactions\n      op: data.op.toLowerCase(), // Lowercase to match real transactions\n      tick: data.tick.toUpperCase(),\n    };\n\n    switch (data.op.toUpperCase()) {\n      case 'DEPLOY': {\n        const deployData = data as any; // SRC20DeployData\n        // For large numbers, use parseFloat which can handle larger values than parseInt\n        // Numbers up to uint64 max (18446744073709551615) will be stored as floats in JSON\n        // This matches the production format which uses numbers, not strings\n        normalized.max = this.parseNumericValue(deployData.max || '0');\n        normalized.lim = this.parseNumericValue(deployData.lim || '0');\n        if (deployData.dec !== undefined) {\n          normalized.dec = deployData.dec;\n        }\n        // Preserve optional metadata fields\n        if (deployData.description) {\n          normalized.description = deployData.description;\n        }\n        if (deployData.x) normalized.x = deployData.x;\n        if (deployData.web) normalized.web = deployData.web;\n        if (deployData.email) normalized.email = deployData.email;\n        if (deployData.tg) normalized.tg = deployData.tg;\n        if (deployData.img) normalized.img = deployData.img;\n        if (deployData.icon) normalized.icon = deployData.icon;\n        break;\n      }\n\n      case 'MINT': {\n        const mintData = data as SRC20MintData;\n        normalized.amt = this.parseAmount(mintData.amt);\n        break;\n      }\n\n      case 'TRANSFER': {\n        const transferData = data as SRC20TransferData;\n        normalized.amt = this.parseAmount(transferData.amt);\n        // Include dest field if provided (non-standard but used in practice)\n        if ((transferData as any).dest) {\n          normalized.dest = (transferData as any).dest;\n        }\n        break;\n      }\n    }\n\n    return normalized;\n  }\n\n  /**\n   * Denormalize data back to standard format\n   */\n  private denormalizeData(data: any): SRC20Data {\n    const op = data.op?.toUpperCase() || '';\n    const base = {\n      p: 'SRC-20' as const,\n      tick: data.tick || '',\n    };\n\n    switch (op) {\n      case 'DEPLOY':\n        return {\n          ...base,\n          op: 'DEPLOY' as const,\n          max: data.max?.toString() || '',\n          lim: data.lim?.toString() || '',\n          ...(data.dec !== undefined ? { dec: data.dec?.toString() } : {}),\n          ...(data.description ? { description: data.description } : {}),\n          ...(data.img ? { img: data.img } : {}),\n          ...(data.icon ? { icon: data.icon } : {}),\n          ...(data.x ? { x: data.x } : {}),\n          ...(data.web ? { web: data.web } : {}),\n          ...(data.email ? { email: data.email } : {}),\n          ...(data.tg ? { tg: data.tg } : {}),\n        } as SRC20DeployData;\n\n      case 'MINT':\n        return {\n          ...base,\n          op: 'MINT' as const,\n          amt: data.amt?.toString() || '',\n        } as SRC20MintData;\n\n      case 'TRANSFER':\n        return {\n          ...base,\n          op: 'TRANSFER' as const,\n          amt: data.amt?.toString() || '',\n        } as SRC20TransferData;\n\n      default:\n        // Fallback for unknown operations\n        return {\n          ...base,\n          op: op as any,\n        } as SRC20Data;\n    }\n  }\n\n  /**\n   * Parse amount to number format to match real transactions\n   * For TRANSFER operations with multiple amounts, returns comma-separated string\n   */\n  private parseAmount(amt?: string | number): number | string {\n    if (!amt && amt !== 0) return 0;\n\n    // If already a number, return it\n    if (typeof amt === 'number') return amt;\n\n    // Check if this is a comma-separated string (for TRANSFER with multiple amounts)\n    if (amt.includes(',')) {\n      return amt; // Return as string for comma-separated amounts\n    }\n\n    // Convert to number to match real transaction format\n    const parsed = parseFloat(amt);\n    return isNaN(parsed) ? 0 : parsed;\n  }\n\n  /**\n   * Parse numeric value handling large numbers up to uint64 max\n   * JavaScript can represent integers up to 2^53-1 exactly, but we need to handle up to 2^64-1\n   * For numbers beyond safe integer range, they'll be represented as floats in JSON\n   */\n  private parseNumericValue(value: string): number {\n    if (!value) return 0;\n\n    // Use parseFloat to handle large numbers\n    // Note: This may lose precision for very large integers, but JSON doesn't support BigInt\n    // and the SRC-20 spec expects numeric values in JSON, not strings\n    const parsed = parseFloat(value);\n\n    if (isNaN(parsed)) return 0;\n\n    // Ensure non-negative\n    return Math.max(0, parsed);\n  }\n\n  /**\n   * Create OP_RETURN output for SRC-20 operation\n   * Uses Counterparty protocol for Bitcoin Stamps compatibility\n   */\n  private createOpReturnOutput(data: any): TransactionOutput {\n    try {\n      // Create encrypted message using RC4 (like Counterparty)\n      const message = Buffer.from(`CNTRPRTY${data.op}:${data.tick}`, 'utf8');\n      const fakeKey = '0000000000000000000000000000000000000000000000000000000000000000';\n      const encrypted = RC4.encrypt(Buffer.from(fakeKey.substring(0, 32), 'hex'), message);\n\n      // Ensure it fits in OP_RETURN (80 bytes max)\n      const truncatedEncrypted = encrypted.length > 78 ? encrypted.subarray(0, 78) : encrypted;\n\n      const script = Buffer.concat([\n        Buffer.from([0x6a]), // OP_RETURN\n        Buffer.from([truncatedEncrypted.length]), // Push length\n        truncatedEncrypted,\n      ]);\n\n      return { script, value: 0 };\n    } catch {\n      // Fallback to minimal OP_RETURN\n      return {\n        script: Buffer.from([0x6a, 0x06, 0x53, 0x52, 0x43, 0x32, 0x30, 0x00]), // \"SRC20\\0\"\n        value: 0,\n      };\n    }\n  }\n\n  /**\n   * Estimate transaction size\n   */\n  private estimateTransactionSize(outputCount: number): number {\n    const baseSize = 10; // Version, locktime, etc.\n    const inputSize = 148; // Typical P2WPKH input\n    const outputSize = 43; // P2WSH output (8 + 1 + 34)\n    const changeSize = 31; // P2WPKH change output\n\n    return baseSize + inputSize + (outputSize * outputCount) + changeSize;\n  }\n\n  /**\n   * Zlib decompression helper\n   */\n  private zlibDecompress(data: Buffer): Promise<Buffer> {\n    return new Promise((resolve, reject) => {\n      zlib.inflate(data, (err, result) => {\n        if (err) {\n          zlib.inflateRaw(data, (rawErr, rawResult) => {\n            if (rawErr) {\n              reject(rawErr);\n            } else {\n              resolve(rawResult);\n            }\n          });\n        } else {\n          resolve(result);\n        }\n      });\n    });\n  }\n}\n\n/**\n * Utility class for working with P2WSH addresses and SRC-20 encoding\n */\nexport class P2WSHAddressUtils {\n  /**\n   * Convert hex data to P2WSH addresses\n   * Creates P2WSH outputs with data embedded in script hashes\n   */\n  static hexToAddresses(\n    hexData: string,\n    network: bitcoin.Network = bitcoin.networks.bitcoin,\n  ): string[] {\n    const data = Buffer.from(hexData, 'hex');\n    const addresses: string[] = [];\n\n    // Split into 32-byte chunks (no length prefix)\n    for (let i = 0; i < data.length; i += 32) {\n      const chunk = data.subarray(\n        i,\n        Math.min(i + 32, data.length),\n      );\n\n      // Pad to 32 bytes if needed\n      const paddedChunk = Buffer.concat([\n        chunk,\n        Buffer.alloc(32 - chunk.length, 0),\n      ]);\n\n      // Create P2WSH script\n      const script = bitcoin.script.compile([\n        bitcoin.opcodes.OP_0 ?? 0x00, // OP_0 = 0x00\n        paddedChunk,\n      ]);\n\n      // Convert to address\n      const address = bitcoin.address.fromOutputScript(script, network);\n      addresses.push(address);\n    }\n\n    return addresses;\n  }\n\n  /**\n   * Extract hex data from P2WSH outputs\n   * In SRC-20 encoding, data is embedded directly in the script (not a hash)\n   */\n  static outputsToHex(\n    outputs: Array<{ script: Buffer; value: number }>,\n  ): string | null {\n    let hexData = '';\n\n    // Process each P2WSH output\n    for (const output of outputs) {\n      // Skip if not P2WSH format\n      if (\n        output.script[0] !== 0x00 || output.script[1] !== 0x20 ||\n        output.script.length !== 34\n      ) {\n        continue;\n      }\n\n      // Extract the 32-byte data from the script (bytes 2-34)\n      const chunk = output.script.subarray(2);\n      hexData += chunk.toString('hex');\n    }\n\n    if (!hexData) {\n      return null;\n    }\n\n    // Remove padding zeros\n    hexData = hexData.replace(/0+$/, '');\n\n    // Extract length prefix if present\n    if (hexData.length >= 4) {\n      const lengthPrefix = parseInt(hexData.slice(0, 4), 16);\n      // Return data after length prefix, limited to the specified length\n      const dataHex = hexData.slice(4, 4 + lengthPrefix * 2);\n      return dataHex;\n    }\n\n    return hexData;\n  }\n}\n\n/**\n * Helper functions for SRC-20 operations - now with complete transaction encoding!\n * Simple one-step encoding like BitcoinStampsEncoder\n */\nexport class SRC20Helper {\n  /**\n   * Create complete DEPLOY transaction outputs (NEW: simplified approach)\n   */\n  static async encodeDeploy(\n    tick: string,\n    max: string,\n    lim: string,\n    fromAddress: string,\n    options?:\n      & Partial<Omit<SRC20DeployData, 'p' | 'op' | 'tick' | 'max' | 'lim'>>\n      & Partial<SRC20EncodingOptions>,\n  ): Promise<SRC20EncodingResult> {\n    const encoder = new SRC20Encoder();\n    const deployData: SRC20DeployData = {\n      p: 'SRC-20',\n      op: 'DEPLOY',\n      tick,\n      max,\n      lim,\n      ...options,\n    };\n\n    return await encoder.encodeAsync(deployData, {\n      fromAddress,\n      ...options,\n    });\n  }\n\n  /**\n   * Create complete MINT transaction outputs (NEW: simplified approach)\n   */\n  static async encodeMint(\n    tick: string,\n    amt: string,\n    fromAddress: string,\n    options?: Partial<SRC20EncodingOptions>,\n  ): Promise<SRC20EncodingResult> {\n    const encoder = new SRC20Encoder();\n    const mintData: SRC20MintData = {\n      p: 'SRC-20',\n      op: 'MINT',\n      tick,\n      amt,\n    };\n\n    return await encoder.encodeAsync(mintData, {\n      fromAddress,\n      ...options,\n    });\n  }\n\n  /**\n   * Create complete TRANSFER transaction outputs (NEW: simplified approach)\n   */\n  static async encodeTransfer(\n    tick: string,\n    amt: string,\n    fromAddress: string,\n    toAddress: string,\n    options?: Partial<SRC20EncodingOptions>,\n  ): Promise<SRC20EncodingResult> {\n    const encoder = new SRC20Encoder();\n    const transferData: SRC20TransferData = {\n      p: 'SRC-20',\n      op: 'TRANSFER',\n      tick,\n      amt,\n    };\n\n    return await encoder.encodeAsync(transferData, {\n      fromAddress,\n      toAddress,\n      ...options,\n    });\n  }\n\n  /**\n   * Legacy: Create DEPLOY operation data only (use encodeDeploy instead)\n   * @deprecated Use encodeDeploy for complete transaction outputs\n   */\n  static createDeploy(\n    tick: string,\n    max: string,\n    lim: string,\n    options?: Partial<Omit<SRC20DeployData, 'p' | 'op' | 'tick' | 'max' | 'lim'>>,\n  ): SRC20DeployData {\n    return {\n      p: 'SRC-20',\n      op: 'DEPLOY',\n      tick,\n      max,\n      lim,\n      ...options,\n    };\n  }\n\n  /**\n   * Legacy: Create MINT operation data only (use encodeMint instead)\n   * @deprecated Use encodeMint for complete transaction outputs\n   */\n  static createMint(tick: string, amt: string): SRC20MintData {\n    return {\n      p: 'SRC-20',\n      op: 'MINT',\n      tick,\n      amt,\n    };\n  }\n\n  /**\n   * Legacy: Create TRANSFER operation data only (use encodeTransfer instead)\n   * @deprecated Use encodeTransfer for complete transaction outputs\n   */\n  static createTransfer(\n    tick: string,\n    amt: string,\n  ): SRC20TransferData {\n    return {\n      p: 'SRC-20',\n      op: 'TRANSFER',\n      tick,\n      amt,\n    };\n  }\n}\n\n// Alias for backwards compatibility with different method names\nexport const SRC20Operations = {\n  deploy: SRC20Helper.createDeploy,\n  mint: SRC20Helper.createMint,\n  transfer: SRC20Helper.createTransfer,\n};\n","/**\n * Counterparty Protocol Encoder\n *\n * Implements proper Counterparty protocol encoding for Bitcoin Stamps\n * Based on JPJA's implementation from Electrum-Counterparty\n *\n * References:\n * - https://github.com/Jpja/Electrum-Counterparty/blob/ad237f654fd7ec2821341a753aa698898664a5a8/olga_stamp.html\n * - https://github.com/Jpja/Electrum-Counterparty/blob/ad237f654fd7ec2821341a753aa698898664a5a8/cip33_issuance.html\n * - https://counterparty.io/docs/protocol_specification/\n */\n\nimport { Buffer } from 'node:buffer';\n\nimport * as bitcoin from 'bitcoinjs-lib';\n\n/**\n * Counterparty Protocol Constants\n */\nexport const COUNTERPARTY_CONSTANTS = {\n  PREFIX: 'CNTRPRTY',\n  PREFIX_HEX: '434e545250525459',\n\n  // Message Type IDs\n  MSG_SEND: 0,\n  MSG_ORDER: 10,\n  MSG_BTCPAY: 11,\n  MSG_ISSUANCE: 20,\n  MSG_ISSUANCE_EXTENDED: 21,\n  MSG_ISSUANCE_WITH_DESCRIPTION: 22,\n  MSG_BROADCAST: 30,\n  MSG_BET: 40,\n  MSG_DIVIDEND: 50,\n  MSG_BURN: 60,\n  MSG_CANCEL: 70,\n\n  // Asset Name Encoding\n  SUBASSET_DIGITS: 'abcdefghijklmnopqrstuvwxyz',\n  B26_DIGITS: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',\n\n  // Limits\n  MAX_ASSET_NAME_LENGTH: 13,\n  MIN_NUMERIC_ASSET_ID: 95428956661682177, // 26^12 + 1 (calculated value)\n  MAX_NUMERIC_ASSET_ID: 18446744073709551615n, // 2^64 - 1 (maximum uint64)\n\n  // Stamp Specific\n  STAMP_PREFIX: 'STAMP:',\n  DEFAULT_DIVISIBILITY: 0,\n  DEFAULT_LOCKED: true,\n};\n\n/**\n * RC4 Encryption Implementation\n * Pure JavaScript implementation since crypto.createCipheriv('rc4') is deprecated\n */\nexport class RC4 {\n  /**\n   * RC4 algorithm implementation\n   */\n  static rc4(key: Buffer, data: Buffer): Buffer {\n    // Initialize S-box\n    const S: number[] = new Array(256);\n    for (let i = 0; i < 256; i++) {\n      S[i] = i;\n    }\n\n    // Key scheduling algorithm (KSA)\n    let j = 0;\n    for (let i = 0; i < 256; i++) {\n      const keyByte = key[i % key.length] ?? 0;\n      j = (j + S[i]! + keyByte) % 256;\n      // Swap S[i] and S[j]\n      const temp = S[i]!;\n      S[i] = S[j]!;\n      S[j] = temp;\n    }\n\n    // Pseudo-random generation algorithm (PRGA)\n    const result = Buffer.alloc(data.length);\n    let i = 0;\n    j = 0;\n\n    for (let k = 0; k < data.length; k++) {\n      i = (i + 1) % 256;\n      j = (j + S[i]!) % 256;\n\n      // Swap S[i] and S[j]\n      const temp = S[i]!;\n      S[i] = S[j]!;\n      S[j] = temp;\n\n      const keystream = S[(S[i]! + S[j]!) % 256]!;\n      result[k] = data[k]! ^ keystream;\n    }\n\n    return result;\n  }\n\n  /**\n   * RC4 encrypt/decrypt (symmetric)\n   */\n  static encrypt(key: Buffer, data: Buffer): Buffer {\n    return this.rc4(key, data);\n  }\n\n  /**\n   * RC4 encrypt hex string using hex key\n   */\n  static encryptHex(keyHex: string, dataHex: string): string {\n    // Convert hex to binary strings (like reference implementation)\n    const keyBinary = this.hex2bin(keyHex);\n    const dataBinary = this.hex2bin(dataHex);\n\n    // RC4 encrypt using binary strings\n    const encryptedBinary = this.rc4Binary(keyBinary, dataBinary);\n\n    // Convert back to hex\n    return this.bin2hex(encryptedBinary);\n  }\n\n  /**\n   * Convert hex string to binary string (matches JavaScript reference)\n   */\n  private static hex2bin(hex: string): string {\n    const bytes: number[] = [];\n    for (let i = 0; i < hex.length - 1; i += 2) {\n      const ch = parseInt(hex.substr(i, 2), 16);\n      bytes.push(ch);\n    }\n    return String.fromCharCode.apply(String, bytes);\n  }\n\n  /**\n   * Convert binary string to hex (matches JavaScript reference)\n   */\n  private static bin2hex(s: string): string {\n    let o = '';\n    for (let i = 0, l = s.length; i < l; i++) {\n      const n = s.charCodeAt(i).toString(16);\n      o += n.length < 2 ? '0' + n : n;\n    }\n    return o;\n  }\n\n  /**\n   * RC4 algorithm using binary strings (matches JavaScript reference exactly)\n   */\n  private static rc4Binary(key: string, str: string): string {\n    const s: number[] = [];\n    let j = 0;\n    let x: number;\n    let res = '';\n\n    // Initialize S-box\n    for (let i = 0; i < 256; i++) {\n      s[i] = i;\n    }\n\n    // Key scheduling\n    for (let i = 0; i < 256; i++) {\n      j = (j + s[i]! + key.charCodeAt(i % key.length)) % 256;\n      x = s[i]!;\n      s[i] = s[j]!;\n      s[j] = x;\n    }\n\n    // Pseudo-random generation\n    let i = 0;\n    j = 0;\n    for (let y = 0; y < str.length; y++) {\n      i = (i + 1) % 256;\n      j = (j + s[i]!) % 256;\n      x = s[i]!;\n      s[i] = s[j]!;\n      s[j] = x;\n      res += String.fromCharCode(str.charCodeAt(y) ^ s[(s[i]! + s[j]!) % 256]!);\n    }\n    return res;\n  }\n}\n\n/**\n * Main Counterparty Encoder class\n * Provides methods for encoding Counterparty protocol messages\n */\nexport class CounterpartyEncoder {\n  /**\n   * Encode issuance using modern interface matching Counterparty API exactly\n   */\n  encodeIssuance(params: {\n    assetId: bigint;\n    quantity: number;\n    divisible: boolean;\n    lock: boolean;\n    description: string;\n    reset?: boolean;\n  }): { data: Buffer } | null {\n    try {\n      // Message Type ID (1 byte) - Use type 22 (LR_ISSUANCE)\n      const messageType = Buffer.from([22]);\n\n      // Asset ID (8 bytes, big-endian)\n      const assetIdBuffer = Buffer.alloc(8);\n      assetIdBuffer.writeBigUInt64BE(params.assetId, 0);\n\n      // Quantity (8 bytes, big-endian)\n      const quantityBuffer = Buffer.alloc(8);\n      quantityBuffer.writeBigUInt64BE(BigInt(params.quantity), 0);\n\n      // Combine flags into single byte (compact format)\n      // Bit 0: divisible, Bit 1: lock, Bit 2: reset\n      const flags = (params.divisible ? 0x01 : 0) |\n        (params.lock ? 0x02 : 0) |\n        ((params.reset ?? false) ? 0x04 : 0);\n      const flagsBuffer = Buffer.from([flags]);\n\n      // Description (UTF-8 encoded string)\n      const descriptionBuffer = params.description\n        ? Buffer.from(params.description, 'utf8')\n        : Buffer.alloc(0);\n\n      const data = Buffer.concat([\n        messageType, // 1 byte (type 22)\n        assetIdBuffer, // 8 bytes\n        quantityBuffer, // 8 bytes\n        flagsBuffer, // 1 byte (combined flags)\n        descriptionBuffer, // variable length\n      ]);\n\n      return { data };\n    } catch (error) {\n      console.error(\n        'Failed to encode issuance:',\n        error instanceof Error ? error.message : String(error),\n      );\n      return null;\n    }\n  }\n}\n\n/**\n * Asset Name Encoder\n * Handles conversion between asset names and numeric IDs\n */\nexport class AssetNameEncoder {\n  /**\n   * Convert asset name to numeric ID\n   */\n  static nameToId(assetName: string): bigint {\n    // Handle numeric asset names (A + digits)\n    if (/^A\\d+$/.test(assetName)) {\n      const numericPart = assetName.substring(1);\n      const id = BigInt(numericPart);\n\n      if (\n        id < BigInt(COUNTERPARTY_CONSTANTS.MIN_NUMERIC_ASSET_ID) ||\n        id > BigInt(COUNTERPARTY_CONSTANTS.MAX_NUMERIC_ASSET_ID)\n      ) {\n        throw new Error(`Numeric asset ID out of range: ${assetName}`);\n      }\n\n      return id;\n    }\n\n    // Handle alphabetic asset names (base-26 encoding)\n    // Must be all uppercase letters and within length limit\n    if (!/^[A-Z]+$/.test(assetName)) {\n      throw new Error(\n        `Invalid asset name format: \"${assetName}\". ` +\n          `Asset names must be either A-prefixed numeric (e.g., A95428956662000000) ` +\n          `or alphabetic (uppercase letters only, max ${COUNTERPARTY_CONSTANTS.MAX_ASSET_NAME_LENGTH} characters).`,\n      );\n    }\n\n    if (assetName.length > COUNTERPARTY_CONSTANTS.MAX_ASSET_NAME_LENGTH) {\n      throw new Error(\n        `Asset name \"${assetName}\" exceeds maximum length of ${COUNTERPARTY_CONSTANTS.MAX_ASSET_NAME_LENGTH} characters.`,\n      );\n    }\n\n    // Warn about alphabetic (named) assets requiring XCP burn\n    if (/^[B-Z]/.test(assetName)) {\n      console.warn(\n        `Warning: Named asset \"${assetName}\" requires burning 0.5 XCP tokens. ` +\n          `Consider using A-prefixed numeric assets for Bitcoin Stamps to avoid XCP burn requirement.`,\n      );\n    }\n\n    let id = BigInt(0);\n    const base = BigInt(26);\n\n    for (let i = 0; i < assetName.length; i++) {\n      const char = assetName.charAt(i);\n      const value = BigInt(COUNTERPARTY_CONSTANTS.B26_DIGITS.indexOf(char));\n      id = id * base + value;\n    }\n\n    // Add base offset for alphabetic names\n    id = id + BigInt(COUNTERPARTY_CONSTANTS.MIN_NUMERIC_ASSET_ID);\n\n    return id;\n  }\n\n  /**\n   * Encode asset ID as 8 bytes (big-endian)\n   */\n  static encodeAssetId(assetName: string): Buffer {\n    const id = this.nameToId(assetName);\n    const buffer = Buffer.alloc(8);\n    buffer.writeBigUInt64BE(id, 0);\n    return buffer;\n  }\n}\n\n/**\n * Counterparty Message Encoder\n */\nexport class CounterpartyMessageEncoder {\n  /**\n   * Encrypt message data (can be mocked for testing)\n   */\n  private encryptData(message: Buffer, txid: string): Buffer {\n    return CounterpartyMessageEncoder.encryptMessage(message, txid);\n  }\n\n  /**\n   * Encode data into Counterparty OP_RETURN format\n   */\n  async encode(data: any): Promise<\n    {\n      script: Buffer;\n      value: number;\n      isEncrypted: boolean;\n      protocolVersion?: string;\n      messageType?: string;\n      compressionUsed?: boolean;\n      originalSize?: number;\n      compressedSize?: number;\n    } | null\n  > {\n    try {\n      // Validate input\n      if (!data || typeof data !== 'object') {\n        throw new Error('Invalid input data');\n      }\n\n      // Handle circular references\n      try {\n        JSON.stringify(data);\n      } catch (error: any) {\n        throw new Error(`Invalid JSON data: circular reference detected: ${error.message}`);\n      }\n\n      // Convert to JSON\n      const jsonString = JSON.stringify(data);\n      const originalSize = jsonString.length;\n\n      // Validate asset names first\n      if (data.asset === '') {\n        throw new Error('Invalid asset: empty asset name');\n      }\n\n      // Check for required fields based on operation type\n      if (data.op === 'send') {\n        if (!data.asset || !data.quantity) {\n          throw new Error(\n            'Missing required fields: asset and quantity are required for send operations',\n          );\n        }\n        if (!data.asset.trim()) {\n          throw new Error('Invalid asset: empty asset name');\n        }\n      }\n\n      // Check size limits\n      if (jsonString.length > 1000) {\n        throw new Error('Data too large: size limit exceeded');\n      }\n\n      // Try compression for larger data\n      let finalData = Buffer.from(jsonString, 'utf8');\n      let compressionUsed = false;\n\n      if (jsonString.length > 50) {\n        try {\n          const zlib = await import('node:zlib');\n          const compressed = zlib.deflateSync(Buffer.from(jsonString, 'utf8'));\n          if (compressed.length < finalData.length) {\n            finalData = Buffer.from(compressed);\n            compressionUsed = true;\n          }\n        } catch {\n          // Compression failed, use original\n        }\n      }\n\n      // Create fake transaction ID for encryption (in real usage, this would be the actual UTXO txid)\n      const fakeTxid = '0000000000000000000000000000000000000000000000000000000000000000';\n\n      // Create issuance message based on data type\n      let messageType: string = 'unknown';\n      let message: Buffer;\n\n      if (data.op === 'send') {\n        messageType = 'send';\n        message = CounterpartyMessageEncoder.encodeIssuance(\n          data.asset,\n          data.quantity || 0,\n          false, // divisible\n          true, // locked\n          false, // reset\n        );\n      } else if (data.op === 'issuance') {\n        messageType = 'issuance';\n        message = CounterpartyMessageEncoder.encodeIssuanceWithDescription(\n          data.asset,\n          data.quantity || 0,\n          data.description || '',\n          data.divisible || false,\n          true, // locked\n          false, // reset\n        );\n      } else {\n        // Generic message\n        messageType = 'generic';\n        message = Buffer.concat([\n          Buffer.from([0x00]), // Generic message type\n          finalData,\n        ]);\n      }\n\n      // Add CNTRPRTY prefix\n      const fullMessage = CounterpartyMessageEncoder.createMessage(message);\n\n      // Encrypt with RC4\n      const encrypted = this.encryptData(fullMessage, fakeTxid);\n\n      // Create OP_RETURN script\n      if (encrypted.length > 78) {\n        throw new Error('Encrypted data too large for OP_RETURN');\n      }\n\n      const script = Buffer.concat([\n        Buffer.from([0x6a]), // OP_RETURN\n        Buffer.from([encrypted.length]), // Push length\n        encrypted,\n      ]);\n\n      return {\n        script,\n        value: 0,\n        isEncrypted: true,\n        protocolVersion: 'CNTRPRTY',\n        messageType,\n        compressionUsed,\n        originalSize,\n        compressedSize: compressionUsed ? finalData.length : undefined,\n      };\n    } catch (error) {\n      console.error('Failed to encode:', error instanceof Error ? error.message : String(error));\n      return null;\n    }\n  }\n  /**\n   * Create issuance message (type 20) - Post-2023 format\n   * Following the current Counterparty protocol format (no callable/call fields)\n   */\n  static encodeIssuance(\n    assetName: string,\n    quantity: number,\n    divisible: boolean = false,\n    locked: boolean = true,\n    reset: boolean = false,\n  ): Buffer {\n    // Message Type ID (1 byte) - Use type 22 (LR_ISSUANCE) as per current standard\n    const messageTypeBuffer = Buffer.from([22]);\n\n    // Asset ID (8 bytes, big-endian)\n    const assetId = AssetNameEncoder.encodeAssetId(assetName);\n\n    // Quantity (8 bytes, big-endian)\n    const quantityBuffer = Buffer.alloc(8);\n    quantityBuffer.writeBigUInt64BE(BigInt(quantity), 0);\n\n    // Combine flags into single byte (compact format)\n    // Bit 0: divisible, Bit 1: lock, Bit 2: reset\n    const flags = (divisible ? 0x01 : 0) | (locked ? 0x02 : 0) | (reset ? 0x04 : 0);\n    const flagsBuffer = Buffer.from([flags]);\n\n    return Buffer.concat([\n      messageTypeBuffer, // 1 byte (type 22)\n      assetId, // 8 bytes\n      quantityBuffer, // 8 bytes\n      flagsBuffer, // 1 byte (combined flags)\n      // Total: 18 bytes (no description)\n    ]);\n  }\n\n  /**\n   * Create enhanced issuance message (type 20 with description) - Post-2023 format\n   * Issuance with description (used for STAMP:filename)\n   */\n  static encodeIssuanceWithDescription(\n    assetName: string,\n    quantity: number,\n    description: string,\n    divisible: boolean = false,\n    locked: boolean = true,\n    reset: boolean = false,\n  ): Buffer {\n    // Message Type ID (1 byte) - Use type 22 (LR_ISSUANCE) as per current standard\n    const messageTypeBuffer = Buffer.from([22]);\n\n    // Asset ID (8 bytes, big-endian)\n    const assetId = AssetNameEncoder.encodeAssetId(assetName);\n\n    // Quantity (8 bytes, big-endian)\n    const quantityBuffer = Buffer.alloc(8);\n    quantityBuffer.writeBigUInt64BE(BigInt(quantity), 0);\n\n    // Combine flags into single byte (compact format)\n    // Bit 0: divisible, Bit 1: lock, Bit 2: reset\n    const flags = (divisible ? 0x01 : 0) | (locked ? 0x02 : 0) | (reset ? 0x04 : 0);\n    const flagsBuffer = Buffer.from([flags]);\n\n    // Description (UTF-8 encoded string, no null terminator)\n    const descriptionBuffer = Buffer.from(description, 'utf8');\n\n    return Buffer.concat([\n      messageTypeBuffer, // 1 byte (type 22)\n      assetId, // 8 bytes\n      quantityBuffer, // 8 bytes\n      flagsBuffer, // 1 byte (combined flags)\n      descriptionBuffer, // variable length\n      // Total: 18 + description length bytes\n    ]);\n  }\n\n  /**\n   * Create full Counterparty message with prefix\n   */\n  static createMessage(payload: Buffer): Buffer {\n    const prefix = Buffer.from(COUNTERPARTY_CONSTANTS.PREFIX, 'utf8');\n    return Buffer.concat([prefix, payload]);\n  }\n\n  /**\n   * Encrypt message using RC4 with transaction ID as key\n   */\n  static encryptMessage(message: Buffer, txid: string): Buffer {\n    // Use first 16 bytes of txid as RC4 key\n    const key = Buffer.from(txid.substring(0, 32), 'hex');\n    return RC4.encrypt(key, message);\n  }\n}\n\n/**\n * P2WSH Message Issuance\n * Port of P2WSH_msg_issuance from JPJA's implementation\n */\nexport function P2WSHMsgIssuance(\n  assetName: string,\n  supply: number,\n  description: string,\n  flags: string = '000001', // Default: divisible=false, reset=false, locked=true\n  assetType: string = 'stamp',\n): string {\n  // Validate inputs\n  if (!assetName || assetName.length === 0) {\n    throw new Error('Asset name is required');\n  }\n\n  if (supply <= 0) {\n    throw new Error('Supply must be positive');\n  }\n\n  // Parse flags (format: 'XXYYZZ' where XX=divisible, YY=reset, ZZ=locked)\n  const divisible = flags.substring(0, 2) === '01';\n  const reset = flags.substring(2, 4) === '01';\n  const locked = flags.substring(4, 6) === '01';\n\n  // For stamps, always use non-divisible\n  const isDivisible = assetType === 'stamp' ? false : divisible;\n\n  // Create the issuance message (always with description for stamps)\n  const message = CounterpartyMessageEncoder.encodeIssuanceWithDescription(\n    assetName,\n    supply,\n    description,\n    isDivisible,\n    locked,\n    reset,\n  );\n\n  // Add CNTRPRTY prefix\n  const fullMessage = CounterpartyMessageEncoder.createMessage(message);\n\n  return fullMessage.toString('hex');\n}\n\n/**\n * RC4 Hex Encryption\n * Port of rc4_hex from JPJA's implementation\n */\nexport function rc4Hex(key: string, plaintext: string): string {\n  return RC4.encryptHex(key, plaintext);\n}\n\n/**\n * Decode Transaction\n * Port of decode_tx for validation\n */\nexport function decodeTx(opreturn: string, txid: string): any {\n  try {\n    // Decrypt the op_return using txid as key\n    const decrypted = rc4Hex(txid, opreturn);\n    const decryptedBuffer = Buffer.from(decrypted, 'hex');\n\n    // Check for CNTRPRTY prefix\n    const prefix = decryptedBuffer.subarray(0, 8).toString('utf8');\n\n    if (prefix !== COUNTERPARTY_CONSTANTS.PREFIX) {\n      return { prefix: 'INVALID', msg_id: -1 };\n    }\n\n    // Get message type - try 1-byte first (standard format)\n    if (decryptedBuffer.length < 9) {\n      return { prefix: 'INVALID', msg_id: -1, error: 'Message too short' };\n    }\n\n    const msgId = decryptedBuffer[8]; // 1-byte message type\n\n    return {\n      prefix: COUNTERPARTY_CONSTANTS.PREFIX,\n      msg_id: msgId,\n      valid: true,\n    };\n  } catch (error) {\n    return {\n      prefix: 'ERROR',\n      msg_id: -1,\n      error: error instanceof Error ? error.message : String(error),\n    };\n  }\n}\n\n/**\n * Main Counterparty Issuance Builder\n * Following JPJA's prepareOpReturn flow\n */\nexport class CounterpartyIssuanceBuilder {\n  /**\n   * Prepare OP_RETURN for stamp issuance\n   * Based on JPJA's prepareOpReturn function\n   */\n  static prepareOpReturn(\n    selectedUtxos: Array<{ txid: string; vout: number; value: number }>,\n    assetName: string,\n    supply: number,\n    filename?: string,\n    isLocked: boolean = true,\n    assetType: string = 'stamp',\n    numberOfMints: number = 1,\n  ): Array<{ opreturn: string; opreturnUnencoded: string }> {\n    if (!selectedUtxos || selectedUtxos.length === 0) {\n      throw new Error('At least one UTXO is required');\n    }\n\n    const inpUtxo = selectedUtxos[0]!.txid;\n    const opReturnArray: Array<\n      { opreturn: string; opreturnUnencoded: string }\n    > = [];\n\n    for (let i = 0; i < numberOfMints; i++) {\n      // Build description with STAMP: prefix\n      const descriptionText = filename ? `STAMP:${filename}` : 'STAMP:';\n\n      console.log('Building Counterparty issuance:');\n      console.log('  Asset name:', assetName);\n      console.log('  Supply:', supply);\n      console.log('  Description:', descriptionText);\n      console.log('  Locked:', isLocked);\n      console.log('  Asset type:', assetType);\n\n      // Create the issuance message\n      const opreturnUnencoded = P2WSHMsgIssuance(\n        assetName,\n        supply,\n        descriptionText,\n        isLocked ? '000100' : '000000',\n        assetType,\n      );\n\n      // Encrypt with RC4 using first UTXO txid as key\n      const opreturn = rc4Hex(inpUtxo, opreturnUnencoded);\n\n      // Validate opreturn\n      if (!opreturn || !/^[0-9a-fA-F]+$/.test(opreturn)) {\n        throw new Error('Invalid OP_RETURN data');\n      }\n\n      // Validate by decoding\n      const info = decodeTx(opreturn, inpUtxo);\n      if (\n        info.prefix !== COUNTERPARTY_CONSTANTS.PREFIX ||\n        (info.msg_id !== COUNTERPARTY_CONSTANTS.MSG_ISSUANCE &&\n          info.msg_id !== COUNTERPARTY_CONSTANTS.MSG_ISSUANCE_WITH_DESCRIPTION)\n      ) {\n        throw new Error('OP_RETURN encoding error');\n      }\n\n      opReturnArray.push({\n        opreturn,\n        opreturnUnencoded,\n      });\n    }\n\n    return opReturnArray;\n  }\n\n  /**\n   * Create OP_RETURN output script for Bitcoin transaction\n   */\n  static createOpReturnOutput(opreturnHex: string): Buffer {\n    const data = Buffer.from(opreturnHex, 'hex');\n\n    // Ensure we don't exceed OP_RETURN size limit (80 bytes)\n    if (data.length > 80) {\n      throw new Error(\n        `OP_RETURN data too large: ${data.length} bytes > 80 bytes maximum`,\n      );\n    }\n\n    // Create OP_RETURN script\n    return bitcoin.script.compile([bitcoin.opcodes.OP_RETURN as number, data]);\n  }\n\n  /**\n   * Build complete stamp issuance with OP_RETURN\n   */\n  static buildStampIssuance(\n    utxos: Array<{ txid: string; vout: number; value: number }>,\n    assetName: string,\n    supply: number = 1,\n    filename?: string,\n    options: {\n      isLocked?: boolean;\n      assetType?: string;\n      numberOfMints?: number;\n    } = {},\n  ): {\n    opReturnScript: Buffer;\n    opReturnHex: string;\n    unencryptedHex: string;\n    metadata: {\n      assetName: string;\n      supply: number;\n      description: string;\n      locked: boolean;\n      messageType: number;\n    };\n  } {\n    const { isLocked = true, assetType = 'stamp', numberOfMints = 1 } = options;\n\n    // Prepare OP_RETURN data\n    const opReturnData = this.prepareOpReturn(\n      utxos,\n      assetName,\n      supply,\n      filename,\n      isLocked,\n      assetType,\n      numberOfMints,\n    );\n\n    if (opReturnData.length === 0) {\n      throw new Error('Failed to prepare OP_RETURN data');\n    }\n\n    // Use first mint data (for multiple mints, you'd create multiple transactions)\n    const { opreturn, opreturnUnencoded } = opReturnData[0]!;\n\n    // Create OP_RETURN script\n    const opReturnScript = this.createOpReturnOutput(opreturn);\n\n    // Decode to get message type\n    const info = decodeTx(opreturn, utxos[0]!.txid);\n\n    return {\n      opReturnScript,\n      opReturnHex: opreturn,\n      unencryptedHex: opreturnUnencoded,\n      metadata: {\n        assetName,\n        supply,\n        description: filename ? `STAMP:${filename}` : 'STAMP:',\n        locked: isLocked,\n        messageType: info.msg_id,\n      },\n    };\n  }\n}\n\n/**\n * Export convenience functions matching JPJA's interface\n */\nexport { decodeTx as decode_tx, P2WSHMsgIssuance as P2WSH_msg_issuance, rc4Hex as rc4_hex };\n"]}