{
  "version": 3,
  "sources": ["../../node_modules/@noble/hashes/src/crypto.ts", "../../node_modules/@noble/hashes/src/utils.ts", "../../node_modules/@noble/curves/src/abstract/utils.ts", "../../node_modules/@noble/curves/src/abstract/modular.ts", "../../node_modules/@noble/curves/src/abstract/hash-to-curve.ts", "../../node_modules/@noble/curves/src/abstract/curve.ts", "../../node_modules/@noble/curves/src/abstract/weierstrass.ts", "../../node_modules/@noble/curves/src/abstract/bls.ts", "../../node_modules/@noble/curves/src/abstract/tower.ts", "../../node_modules/@noble/hashes/src/_assert.ts", "../../node_modules/@noble/hashes/src/_u64.ts", "../../node_modules/@noble/hashes/src/sha3.ts", "../../node_modules/@kevincharm/noble-bn254-drand/dist/src/bn254.js", "../../node_modules/@kevincharm/noble-bn254-drand/dist/src/index.js", "../../node_modules/ethers/src.ts/_version.ts", "../../node_modules/ethers/src.ts/utils/properties.ts", "../../node_modules/ethers/src.ts/utils/errors.ts", "../../node_modules/ethers/src.ts/utils/data.ts", "../../node_modules/ethers/src.ts/utils/maths.ts", "../../node_modules/ethers/src.ts/utils/events.ts", "../../node_modules/ethers/src.ts/utils/utf8.ts", "../../node_modules/ethers/src.ts/utils/rlp-encode.ts", "../../node_modules/ethers/src.ts/abi/coders/abstract-coder.ts", "../../node_modules/@noble/hashes/src/_assert.ts", "../../node_modules/@noble/hashes/src/utils.ts", "../../node_modules/@noble/hashes/src/_u64.ts", "../../node_modules/@noble/hashes/src/sha3.ts", "../../node_modules/ethers/src.ts/crypto/keccak.ts", "../../node_modules/ethers/src.ts/address/address.ts", "../../node_modules/ethers/src.ts/address/contract-address.ts", "../../node_modules/ethers/src.ts/address/checks.ts", "../../node_modules/ethers/src.ts/abi/typed.ts", "../../node_modules/ethers/src.ts/abi/coders/address.ts", "../../node_modules/ethers/src.ts/abi/coders/anonymous.ts", "../../node_modules/ethers/src.ts/abi/coders/array.ts", "../../node_modules/ethers/src.ts/abi/coders/boolean.ts", "../../node_modules/ethers/src.ts/abi/coders/bytes.ts", "../../node_modules/ethers/src.ts/abi/coders/fixed-bytes.ts", "../../node_modules/ethers/src.ts/abi/coders/null.ts", "../../node_modules/ethers/src.ts/abi/coders/number.ts", "../../node_modules/ethers/src.ts/abi/coders/string.ts", "../../node_modules/ethers/src.ts/abi/coders/tuple.ts", "../../node_modules/ethers/src.ts/hash/id.ts", "../../node_modules/ethers/src.ts/transaction/accesslist.ts", "../../node_modules/ethers/src.ts/abi/fragments.ts", "../../node_modules/ethers/src.ts/abi/abi-coder.ts", "../../node_modules/ethers/src.ts/abi/interface.ts", "../../node_modules/ethers/src.ts/providers/provider.ts", "../../node_modules/ethers/src.ts/contract/wrappers.ts", "../../node_modules/ethers/src.ts/contract/contract.ts", "../../node_modules/ethers/src.ts/contract/factory.ts", "../../src/index.ts", "../../node_modules/@noble/curves/src/abstract/utils.ts", "../../src/ethers-helpers.ts", "../../src/misc.ts", "../../src/generated/factories/DeployAllContracts.s.sol/DeployAllContracts__factory.ts", "../../src/generated/factories/DeployBN254SignatureScheme.s.sol/DeployBN254SignatureScheme__factory.ts", "../../src/generated/factories/DeployFactory.s.sol/DeployFactory__factory.ts", "../../src/generated/factories/DeployRandomnessReceiver.s.sol/DeployRandomnessReceiver__factory.ts", "../../src/generated/factories/DeployRandomnessSender.s.sol/DeployRandomnessSender__factory.ts", "../../src/generated/factories/DeploySignatureSchemeAddressProvider.s.sol/DeploySignatureSchemeAddressProvider__factory.ts", "../../src/generated/factories/DeploySignatureSender.s.sol/DeploySignatureSender__factory.ts", "../../src/generated/factories/Randomness.t.sol/RandomnessSenderTest__factory.ts", "../../src/generated/factories/StdError.sol/StdError__factory.ts", "../../src/generated/factories/StdStorage.sol/StdStorageSafe__factory.ts", "../../src/generated/factories/Vm.sol/Vm__factory.ts", "../../src/generated/factories/Vm.sol/VmSafe__factory.ts", "../../src/generated/factories/draft-IERC1822.sol/IERC1822Proxiable__factory.ts", "../../src/generated/factories/AccessControl__factory.ts", "../../src/generated/factories/AccessControlEnumerableUpgradeable__factory.ts", "../../src/generated/factories/AccessControlUpgradeable__factory.ts", "../../src/generated/factories/Address__factory.ts", "../../src/generated/factories/BLS__factory.ts", "../../src/generated/factories/BLSTest__factory.ts", "../../src/generated/factories/BN254SignatureScheme__factory.ts", "../../src/generated/factories/BytesLib__factory.ts", "../../src/generated/factories/ContextUpgradeable__factory.ts", "../../src/generated/factories/ERC165__factory.ts", "../../src/generated/factories/ERC165Upgradeable__factory.ts", "../../src/generated/factories/ERC1967Proxy__factory.ts", "../../src/generated/factories/ERC1967Utils__factory.ts", "../../src/generated/factories/EnvReader__factory.ts", "../../src/generated/factories/Errors__factory.ts", "../../src/generated/factories/Factory__factory.ts", "../../src/generated/factories/FeistelShuffleOptimised__factory.ts", "../../src/generated/factories/IAccessControl__factory.ts", "../../src/generated/factories/IAccessControlEnumerable__factory.ts", "../../src/generated/factories/IBeacon__factory.ts", "../../src/generated/factories/IERC165__factory.ts", "../../src/generated/factories/IERC1967__factory.ts", "../../src/generated/factories/IMulticall__factory.ts", "../../src/generated/factories/IMulticall3__factory.ts", "../../src/generated/factories/IRandomnessReceiver__factory.ts", "../../src/generated/factories/IRandomnessSender__factory.ts", "../../src/generated/factories/ISignatureReceiver__factory.ts", "../../src/generated/factories/ISignatureScheme__factory.ts", "../../src/generated/factories/ISignatureSchemeAddressProvider__factory.ts", "../../src/generated/factories/ISignatureSender__factory.ts", "../../src/generated/factories/Initializable__factory.ts", "../../src/generated/factories/JsonUtils__factory.ts", "../../src/generated/factories/MockRandomnessReceiver__factory.ts", "../../src/generated/factories/Multicall__factory.ts", "../../src/generated/factories/Proxy__factory.ts", "../../src/generated/factories/Randomness__factory.ts", "../../src/generated/factories/RandomnessReceiverBase__factory.ts", "../../src/generated/factories/RandomnessSender__factory.ts", "../../src/generated/factories/Script__factory.ts", "../../src/generated/factories/SignatureReceiverBase__factory.ts", "../../src/generated/factories/SignatureSchemeAddressProvider__factory.ts", "../../src/generated/factories/SignatureSender__factory.ts", "../../src/generated/factories/StdAssertions__factory.ts", "../../src/generated/factories/StdInvariant__factory.ts", "../../src/generated/factories/Test__factory.ts", "../../src/generated/factories/UUPSProxy__factory.ts", "../../src/generated/factories/UUPSUpgradeable__factory.ts"],
  "sourcesContent": ["// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// See utils.ts for details.\ndeclare const globalThis: Record<string, any> | undefined;\nexport const crypto =\n  typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\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, we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\n\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\nconst u8a = (a: any): a is Uint8Array => a instanceof Uint8Array;\n// Cast array to different type\nexport const u8 = (arr: TypedArray) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr: TypedArray) =>\n  new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n\n// Cast array to view\nexport const createView = (arr: TypedArray) =>\n  new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word: number, shift: number) => (word << (32 - shift)) | (word >>> shift);\n\n// big-endian hardware is rare. Just in case someone still decides to run hashes:\n// early-throw an error because we don't support BE yet.\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\nif (!isLE) throw new Error('Non little-endian hardware is not supported');\n\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  if (!u8a(bytes)) throw new Error('Uint8Array expected');\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/**\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  const len = hex.length;\n  if (len % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + len);\n  const array = new Uint8Array(len / 2);\n  for (let i = 0; i < array.length; i++) {\n    const j = i * 2;\n    const hexByte = hex.slice(j, j + 2);\n    const byte = Number.parseInt(hexByte, 16);\n    if (Number.isNaN(byte) || byte < 0) throw new Error('Invalid byte sequence');\n    array[i] = byte;\n  }\n  return array;\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.\nexport const nextTick = async () => {};\n\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters: number, tick: number, cb: (i: number) => 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 in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\nexport type Input = Uint8Array | string;\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  if (!u8a(data)) throw new Error(`expected Uint8Array, got ${typeof data}`);\n  return data;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n  let pad = 0; // walk through each item, ensure they have proper type\n  arrays.forEach((a) => {\n    if (!u8a(a)) throw new Error('Uint8Array expected');\n    r.set(a, pad);\n    pad += a.length;\n  });\n  return r;\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  clone(): T {\n    return this._cloneInto();\n  }\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\nconst toStr = {}.toString;\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && toStr.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\nexport type CHash = ReturnType<typeof wrapConstructor>;\n\nexport function wrapConstructor<T extends Hash<T>>(hashCons: () => Hash<T>) {\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 wrapConstructorWithOpts<H extends Hash<H>, T extends Object>(\n  hashCons: (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 wrapXOFConstructorWithOpts<H extends HashXOF<H>, T extends Object>(\n  hashCons: (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}\n\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n  if (crypto && typeof crypto.getRandomValues === 'function') {\n    return crypto.getRandomValues(new Uint8Array(bytesLength));\n  }\n  throw new Error('crypto.getRandomValues must be defined');\n}\n", "/**\n * Hex, bytes and number utilities.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// 100 lines of code in the file are duplicated from noble-hashes (utils).\n// This is OK: `abstract` directory does not use noble-hashes.\n// User may opt-in into using different hashing library. This way, noble-hashes\n// won't be included into their bundle.\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nconst _2n = /* @__PURE__ */ BigInt(2);\nexport type Hex = Uint8Array | string; // hex strings are accepted for simplicity\nexport type PrivKey = Hex | bigint; // bigints are accepted to ease learning curve\nexport type CHash = {\n  (message: Uint8Array | string): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create(opts?: { dkLen?: number }): any; // For shake\n};\nexport type FHash = (message: Uint8Array | string) => Uint8Array;\n\nexport function isBytes(a: unknown): a is Uint8Array {\n  return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\nexport function abytes(item: unknown): void {\n  if (!isBytes(item)) throw new Error('Uint8Array expected');\n}\n\nexport function abool(title: string, value: boolean): void {\n  if (typeof value !== 'boolean') throw new Error(title + ' boolean expected, got ' + value);\n}\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 * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  abytes(bytes);\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\nexport function numberToHexUnpadded(num: number | bigint): string {\n  const hex = num.toString(16);\n  return hex.length & 1 ? '0' + hex : hex;\n}\n\nexport function hexToNumber(hex: string): bigint {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  return hex === '' ? _0n : BigInt('0x' + hex); // Big Endian\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 * @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  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// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes: Uint8Array): bigint {\n  return hexToNumber(bytesToHex(bytes));\n}\nexport function bytesToNumberLE(bytes: Uint8Array): bigint {\n  abytes(bytes);\n  return hexToNumber(bytesToHex(Uint8Array.from(bytes).reverse()));\n}\n\nexport function numberToBytesBE(n: number | bigint, len: number): Uint8Array {\n  return hexToBytes(n.toString(16).padStart(len * 2, '0'));\n}\nexport function numberToBytesLE(n: number | bigint, len: number): Uint8Array {\n  return numberToBytesBE(n, len).reverse();\n}\n// Unpadded, rarely used\nexport function numberToVarBytesBE(n: number | bigint): Uint8Array {\n  return hexToBytes(numberToHexUnpadded(n));\n}\n\n/**\n * Takes hex string or Uint8Array, converts to Uint8Array.\n * Validates output length.\n * Will throw error for other types.\n * @param title descriptive title for an error e.g. 'private key'\n * @param hex hex string or Uint8Array\n * @param expectedLength optional, will compare to result array's length\n * @returns\n */\nexport function ensureBytes(title: string, hex: Hex, expectedLength?: number): Uint8Array {\n  let res: Uint8Array;\n  if (typeof hex === 'string') {\n    try {\n      res = hexToBytes(hex);\n    } catch (e) {\n      throw new Error(title + ' must be hex string or Uint8Array, cause: ' + e);\n    }\n  } else if (isBytes(hex)) {\n    // Uint8Array.from() instead of hash.slice() because node.js Buffer\n    // is instance of Uint8Array, and its slice() creates **mutable** copy\n    res = Uint8Array.from(hex);\n  } else {\n    throw new Error(title + ' must be hex string or Uint8Array');\n  }\n  const len = res.length;\n  if (typeof expectedLength === 'number' && len !== expectedLength)\n    throw new Error(title + ' of length ' + expectedLength + ' expected, got ' + len);\n  return res;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\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\n// Compares 2 u8a-s in kinda constant time\nexport function equalBytes(a: Uint8Array, b: Uint8Array): boolean {\n  if (a.length !== b.length) return false;\n  let diff = 0;\n  for (let i = 0; i < a.length; i++) diff |= a[i] ^ b[i];\n  return diff === 0;\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([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// Is positive bigint\nconst isPosBig = (n: bigint) => typeof n === 'bigint' && _0n <= n;\n\nexport function inRange(n: bigint, min: bigint, max: bigint): boolean {\n  return isPosBig(n) && isPosBig(min) && isPosBig(max) && min <= n && n < max;\n}\n\n/**\n * Asserts min <= n < max. NOTE: It's < max and not <= max.\n * @example\n * aInRange('x', x, 1n, 256n); // would assume x is in (1n..255n)\n */\nexport function aInRange(title: string, n: bigint, min: bigint, max: bigint): void {\n  // Why min <= n < max and not a (min < n < max) OR b (min <= n <= max)?\n  // consider P=256n, min=0n, max=P\n  // - a for min=0 would require -1:          `inRange('x', x, -1n, P)`\n  // - b would commonly require subtraction:  `inRange('x', x, 0n, P - 1n)`\n  // - our way is the cleanest:               `inRange('x', x, 0n, P)\n  if (!inRange(n, min, max))\n    throw new Error('expected valid ' + title + ': ' + min + ' <= n < ' + max + ', got ' + n);\n}\n\n// Bit operations\n\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n */\nexport function bitLen(n: bigint): number {\n  let len;\n  for (len = 0; n > _0n; n >>= _1n, len += 1);\n  return len;\n}\n\n/**\n * Gets single bit at position.\n * NOTE: first bit position is 0 (same as arrays)\n * Same as `!!+Array.from(n.toString(2)).reverse()[pos]`\n */\nexport function bitGet(n: bigint, pos: number): bigint {\n  return (n >> BigInt(pos)) & _1n;\n}\n\n/**\n * Sets single bit at position.\n */\nexport function bitSet(n: bigint, pos: number, value: boolean): bigint {\n  return n | ((value ? _1n : _0n) << BigInt(pos));\n}\n\n/**\n * Calculate mask for N bits. Not using ** operator with bigints because of old engines.\n * Same as BigInt(`0b${Array(i).fill('1').join('')}`)\n */\nexport const bitMask = (n: number): bigint => (_2n << BigInt(n - 1)) - _1n;\n\n// DRBG\n\nconst u8n = (data?: any) => new Uint8Array(data); // creates Uint8Array\nconst u8fr = (arr: any) => Uint8Array.from(arr); // another shortcut\ntype Pred<T> = (v: Uint8Array) => T | undefined;\n/**\n * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n * @returns function that will call DRBG until 2nd arg returns something meaningful\n * @example\n *   const drbg = createHmacDRBG<Key>(32, 32, hmac);\n *   drbg(seed, bytesToKey); // bytesToKey must return Key or undefined\n */\nexport function createHmacDrbg<T>(\n  hashLen: number,\n  qByteLen: number,\n  hmacFn: (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array\n): (seed: Uint8Array, predicate: Pred<T>) => T {\n  if (typeof hashLen !== 'number' || hashLen < 2) throw new Error('hashLen must be a number');\n  if (typeof qByteLen !== 'number' || qByteLen < 2) throw new Error('qByteLen must be a number');\n  if (typeof hmacFn !== 'function') throw new Error('hmacFn must be a function');\n  // Step B, Step C: set hashLen to 8*ceil(hlen/8)\n  let v = u8n(hashLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n  let k = u8n(hashLen); // Steps B and C of RFC6979 3.2: set hashLen, in our case always same\n  let i = 0; // Iterations counter, will throw when over 1000\n  const reset = () => {\n    v.fill(1);\n    k.fill(0);\n    i = 0;\n  };\n  const h = (...b: Uint8Array[]) => hmacFn(k, v, ...b); // hmac(k)(v, ...values)\n  const reseed = (seed = u8n()) => {\n    // HMAC-DRBG reseed() function. Steps D-G\n    k = h(u8fr([0x00]), seed); // k = hmac(k || v || 0x00 || seed)\n    v = h(); // v = hmac(k || v)\n    if (seed.length === 0) return;\n    k = h(u8fr([0x01]), seed); // k = hmac(k || v || 0x01 || seed)\n    v = h(); // v = hmac(k || v)\n  };\n  const gen = () => {\n    // HMAC-DRBG generate() function\n    if (i++ >= 1000) throw new Error('drbg: tried 1000 values');\n    let len = 0;\n    const out: Uint8Array[] = [];\n    while (len < qByteLen) {\n      v = h();\n      const sl = v.slice();\n      out.push(sl);\n      len += v.length;\n    }\n    return concatBytes(...out);\n  };\n  const genUntil = (seed: Uint8Array, pred: Pred<T>): T => {\n    reset();\n    reseed(seed); // Steps D-G\n    let res: T | undefined = undefined; // Step H: grind until k is in [1..n-1]\n    while (!(res = pred(gen()))) reseed();\n    reset();\n    return res;\n  };\n  return genUntil;\n}\n\n// Validating curves and fields\n\nconst validatorFns = {\n  bigint: (val: any): boolean => typeof val === 'bigint',\n  function: (val: any): boolean => typeof val === 'function',\n  boolean: (val: any): boolean => typeof val === 'boolean',\n  string: (val: any): boolean => typeof val === 'string',\n  stringOrUint8Array: (val: any): boolean => typeof val === 'string' || isBytes(val),\n  isSafeInteger: (val: any): boolean => Number.isSafeInteger(val),\n  array: (val: any): boolean => Array.isArray(val),\n  field: (val: any, object: any): any => (object as any).Fp.isValid(val),\n  hash: (val: any): boolean => typeof val === 'function' && Number.isSafeInteger(val.outputLen),\n} as const;\ntype Validator = keyof typeof validatorFns;\ntype ValMap<T extends Record<string, any>> = { [K in keyof T]?: Validator };\n// type Record<K extends string | number | symbol, T> = { [P in K]: T; }\n\nexport function validateObject<T extends Record<string, any>>(\n  object: T,\n  validators: ValMap<T>,\n  optValidators: ValMap<T> = {}\n): T {\n  const checkField = (fieldName: keyof T, type: Validator, isOptional: boolean) => {\n    const checkVal = validatorFns[type];\n    if (typeof checkVal !== 'function') throw new Error('invalid validator function');\n\n    const val = object[fieldName as keyof typeof object];\n    if (isOptional && val === undefined) return;\n    if (!checkVal(val, object)) {\n      throw new Error(\n        'param ' + String(fieldName) + ' is invalid. Expected ' + type + ', got ' + val\n      );\n    }\n  };\n  for (const [fieldName, type] of Object.entries(validators)) checkField(fieldName, type!, false);\n  for (const [fieldName, type] of Object.entries(optValidators)) checkField(fieldName, type!, true);\n  return object;\n}\n// validate type tests\n// const o: { a: number; b: number; c: number } = { a: 1, b: 5, c: 6 };\n// const z0 = validateObject(o, { a: 'isSafeInteger' }, { c: 'bigint' }); // Ok!\n// // Should fail type-check\n// const z1 = validateObject(o, { a: 'tmp' }, { c: 'zz' });\n// const z2 = validateObject(o, { a: 'isSafeInteger' }, { c: 'zz' });\n// const z3 = validateObject(o, { test: 'boolean', z: 'bug' });\n// const z4 = validateObject(o, { a: 'boolean', z: 'bug' });\n\n/**\n * throws not implemented error\n */\nexport const notImplemented = (): never => {\n  throw new Error('not implemented');\n};\n\n/**\n * Memoizes (caches) computation result.\n * Uses WeakMap: the value is going auto-cleaned by GC after last reference is removed.\n */\nexport function memoized<T extends object, R, O extends any[]>(\n  fn: (arg: T, ...args: O) => R\n): (arg: T, ...args: O) => R {\n  const map = new WeakMap<T, R>();\n  return (arg: T, ...args: O): R => {\n    const val = map.get(arg);\n    if (val !== undefined) return val;\n    const computed = fn(arg, ...args);\n    map.set(arg, computed);\n    return computed;\n  };\n}\n", "/**\n * Utils for modular division and finite fields.\n * A finite field over 11 is integer number operations `mod 11`.\n * There is no division: it is replaced by modular multiplicative inverse.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport {\n  bitMask,\n  bytesToNumberBE,\n  bytesToNumberLE,\n  ensureBytes,\n  numberToBytesBE,\n  numberToBytesLE,\n  validateObject,\n} from './utils.js';\n\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = /* @__PURE__ */ BigInt(2), _3n = /* @__PURE__ */ BigInt(3);\n// prettier-ignore\nconst _4n = /* @__PURE__ */ BigInt(4), _5n = /* @__PURE__ */ BigInt(5), _8n = /* @__PURE__ */ BigInt(8);\n// prettier-ignore\nconst _9n =/* @__PURE__ */ BigInt(9), _16n = /* @__PURE__ */ BigInt(16);\n\n// Calculates a modulo b\nexport function mod(a: bigint, b: bigint): bigint {\n  const result = a % b;\n  return result >= _0n ? result : b + result;\n}\n/**\n * Efficiently raise num to power and do modular division.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n * @todo use field version && remove\n * @example\n * pow(2n, 6n, 11n) // 64n % 11n == 9n\n */\nexport function pow(num: bigint, power: bigint, modulo: bigint): bigint {\n  if (power < _0n) throw new Error('invalid exponent, negatives unsupported');\n  if (modulo <= _0n) throw new Error('invalid modulus');\n  if (modulo === _1n) return _0n;\n  let res = _1n;\n  while (power > _0n) {\n    if (power & _1n) res = (res * num) % modulo;\n    num = (num * num) % modulo;\n    power >>= _1n;\n  }\n  return res;\n}\n\n/** Does `x^(2^power)` mod p. `pow2(30, 4)` == `30^(2^4)` */\nexport function pow2(x: bigint, power: bigint, modulo: bigint): bigint {\n  let res = x;\n  while (power-- > _0n) {\n    res *= res;\n    res %= modulo;\n  }\n  return res;\n}\n\n/**\n * Inverses number over modulo.\n * Implemented using [Euclidean GCD](https://brilliant.org/wiki/extended-euclidean-algorithm/).\n */\nexport function invert(number: bigint, modulo: bigint): bigint {\n  if (number === _0n) throw new Error('invert: expected non-zero number');\n  if (modulo <= _0n) throw new Error('invert: expected positive modulus, got ' + modulo);\n  // Fermat's little theorem \"CT-like\" version inv(n) = n^(m-2) mod m is 30x slower.\n  let a = mod(number, modulo);\n  let b = modulo;\n  // prettier-ignore\n  let x = _0n, y = _1n, u = _1n, v = _0n;\n  while (a !== _0n) {\n    // JIT applies optimization if those two lines follow each other\n    const q = b / a;\n    const r = b % a;\n    const m = x - u * q;\n    const n = y - v * q;\n    // prettier-ignore\n    b = a, a = r, x = u, y = v, u = m, v = n;\n  }\n  const gcd = b;\n  if (gcd !== _1n) throw new Error('invert: does not exist');\n  return mod(x, modulo);\n}\n\n/**\n * Tonelli-Shanks square root search algorithm.\n * 1. https://eprint.iacr.org/2012/685.pdf (page 12)\n * 2. Square Roots from 1; 24, 51, 10 to Dan Shanks\n * Will start an infinite loop if field order P is not prime.\n * @param P field order\n * @returns function that takes field Fp (created from P) and number n\n */\nexport function tonelliShanks(P: bigint): <T>(Fp: IField<T>, n: T) => T {\n  // Legendre constant: used to calculate Legendre symbol (a | p),\n  // which denotes the value of a^((p-1)/2) (mod p).\n  // (a | p) \u2261 1    if a is a square (mod p)\n  // (a | p) \u2261 -1   if a is not a square (mod p)\n  // (a | p) \u2261 0    if a \u2261 0 (mod p)\n  const legendreC = (P - _1n) / _2n;\n\n  let Q: bigint, S: number, Z: bigint;\n  // Step 1: By factoring out powers of 2 from p - 1,\n  // find q and s such that p - 1 = q*(2^s) with q odd\n  for (Q = P - _1n, S = 0; Q % _2n === _0n; Q /= _2n, S++);\n\n  // Step 2: Select a non-square z such that (z | p) \u2261 -1 and set c \u2261 zq\n  for (Z = _2n; Z < P && pow(Z, legendreC, P) !== P - _1n; Z++) {\n    // Crash instead of infinity loop, we cannot reasonable count until P.\n    if (Z > 1000) throw new Error('Cannot find square root: likely non-prime P');\n  }\n\n  // Fast-path\n  if (S === 1) {\n    const p1div4 = (P + _1n) / _4n;\n    return function tonelliFast<T>(Fp: IField<T>, n: T) {\n      const root = Fp.pow(n, p1div4);\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // Slow-path\n  const Q1div2 = (Q + _1n) / _2n;\n  return function tonelliSlow<T>(Fp: IField<T>, n: T): T {\n    // Step 0: Check that n is indeed a square: (n | p) should not be \u2261 -1\n    if (Fp.pow(n, legendreC) === Fp.neg(Fp.ONE)) throw new Error('Cannot find square root');\n    let r = S;\n    // TODO: will fail at Fp2/etc\n    let g = Fp.pow(Fp.mul(Fp.ONE, Z), Q); // will update both x and b\n    let x = Fp.pow(n, Q1div2); // first guess at the square root\n    let b = Fp.pow(n, Q); // first guess at the fudge factor\n\n    while (!Fp.eql(b, Fp.ONE)) {\n      if (Fp.eql(b, Fp.ZERO)) return Fp.ZERO; // https://en.wikipedia.org/wiki/Tonelli%E2%80%93Shanks_algorithm (4. If t = 0, return r = 0)\n      // Find m such b^(2^m)==1\n      let m = 1;\n      for (let t2 = Fp.sqr(b); m < r; m++) {\n        if (Fp.eql(t2, Fp.ONE)) break;\n        t2 = Fp.sqr(t2); // t2 *= t2\n      }\n      // NOTE: r-m-1 can be bigger than 32, need to convert to bigint before shift, otherwise there will be overflow\n      const ge = Fp.pow(g, _1n << BigInt(r - m - 1)); // ge = 2^(r-m-1)\n      g = Fp.sqr(ge); // g = ge * ge\n      x = Fp.mul(x, ge); // x *= ge\n      b = Fp.mul(b, g); // b *= g\n      r = m;\n    }\n    return x;\n  };\n}\n\n/**\n * Square root for a finite field. It will try to check if optimizations are applicable and fall back to 4:\n *\n * 1. P \u2261 3 (mod 4)\n * 2. P \u2261 5 (mod 8)\n * 3. P \u2261 9 (mod 16)\n * 4. Tonelli-Shanks algorithm\n *\n * Different algorithms can give different roots, it is up to user to decide which one they want.\n * For example there is FpSqrtOdd/FpSqrtEven to choice root based on oddness (used for hash-to-curve).\n */\nexport function FpSqrt(P: bigint): <T>(Fp: IField<T>, n: T) => T {\n  // P \u2261 3 (mod 4)\n  // \u221An = n^((P+1)/4)\n  if (P % _4n === _3n) {\n    // Not all roots possible!\n    // const ORDER =\n    //   0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaabn;\n    // const NUM = 72057594037927816n;\n    const p1div4 = (P + _1n) / _4n;\n    return function sqrt3mod4<T>(Fp: IField<T>, n: T) {\n      const root = Fp.pow(n, p1div4);\n      // Throw if root**2 != n\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // Atkin algorithm for q \u2261 5 (mod 8), https://eprint.iacr.org/2012/685.pdf (page 10)\n  if (P % _8n === _5n) {\n    const c1 = (P - _5n) / _8n;\n    return function sqrt5mod8<T>(Fp: IField<T>, n: T) {\n      const n2 = Fp.mul(n, _2n);\n      const v = Fp.pow(n2, c1);\n      const nv = Fp.mul(n, v);\n      const i = Fp.mul(Fp.mul(nv, _2n), v);\n      const root = Fp.mul(nv, Fp.sub(i, Fp.ONE));\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // P \u2261 9 (mod 16)\n  if (P % _16n === _9n) {\n    // NOTE: tonelli is too slow for bls-Fp2 calculations even on start\n    // Means we cannot use sqrt for constants at all!\n    //\n    // const c1 = Fp.sqrt(Fp.negate(Fp.ONE)); //  1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F\n    // const c2 = Fp.sqrt(c1);                //  2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F\n    // const c3 = Fp.sqrt(Fp.negate(c1));     //  3. c3 = sqrt(-c1) in F, i.e., (c3^2) == -c1 in F\n    // const c4 = (P + _7n) / _16n;           //  4. c4 = (q + 7) / 16        # Integer arithmetic\n    // sqrt = (x) => {\n    //   let tv1 = Fp.pow(x, c4);             //  1. tv1 = x^c4\n    //   let tv2 = Fp.mul(c1, tv1);           //  2. tv2 = c1 * tv1\n    //   const tv3 = Fp.mul(c2, tv1);         //  3. tv3 = c2 * tv1\n    //   let tv4 = Fp.mul(c3, tv1);           //  4. tv4 = c3 * tv1\n    //   const e1 = Fp.equals(Fp.square(tv2), x); //  5.  e1 = (tv2^2) == x\n    //   const e2 = Fp.equals(Fp.square(tv3), x); //  6.  e2 = (tv3^2) == x\n    //   tv1 = Fp.cmov(tv1, tv2, e1); //  7. tv1 = CMOV(tv1, tv2, e1)  # Select tv2 if (tv2^2) == x\n    //   tv2 = Fp.cmov(tv4, tv3, e2); //  8. tv2 = CMOV(tv4, tv3, e2)  # Select tv3 if (tv3^2) == x\n    //   const e3 = Fp.equals(Fp.square(tv2), x); //  9.  e3 = (tv2^2) == x\n    //   return Fp.cmov(tv1, tv2, e3); //  10.  z = CMOV(tv1, tv2, e3)  # Select the sqrt from tv1 and tv2\n    // }\n  }\n  // Other cases: Tonelli-Shanks algorithm\n  return tonelliShanks(P);\n}\n\n// Little-endian check for first LE bit (last BE bit);\nexport const isNegativeLE = (num: bigint, modulo: bigint): boolean =>\n  (mod(num, modulo) & _1n) === _1n;\n\n/** Field is not always over prime: for example, Fp2 has ORDER(q)=p^m. */\nexport interface IField<T> {\n  ORDER: bigint;\n  isLE: boolean;\n  BYTES: number;\n  BITS: number;\n  MASK: bigint;\n  ZERO: T;\n  ONE: T;\n  // 1-arg\n  create: (num: T) => T;\n  isValid: (num: T) => boolean;\n  is0: (num: T) => boolean;\n  neg(num: T): T;\n  inv(num: T): T;\n  sqrt(num: T): T;\n  sqr(num: T): T;\n  // 2-args\n  eql(lhs: T, rhs: T): boolean;\n  add(lhs: T, rhs: T): T;\n  sub(lhs: T, rhs: T): T;\n  mul(lhs: T, rhs: T | bigint): T;\n  pow(lhs: T, power: bigint): T;\n  div(lhs: T, rhs: T | bigint): T;\n  // N for NonNormalized (for now)\n  addN(lhs: T, rhs: T): T;\n  subN(lhs: T, rhs: T): T;\n  mulN(lhs: T, rhs: T | bigint): T;\n  sqrN(num: T): T;\n\n  // Optional\n  // Should be same as sgn0 function in\n  // [RFC9380](https://www.rfc-editor.org/rfc/rfc9380#section-4.1).\n  // NOTE: sgn0 is 'negative in LE', which is same as odd. And negative in LE is kinda strange definition anyway.\n  isOdd?(num: T): boolean; // Odd instead of even since we have it for Fp2\n  // legendre?(num: T): T;\n  pow(lhs: T, power: bigint): T;\n  invertBatch: (lst: T[]) => T[];\n  toBytes(num: T): Uint8Array;\n  fromBytes(bytes: Uint8Array): T;\n  // If c is False, CMOV returns a, otherwise it returns b.\n  cmov(a: T, b: T, c: boolean): T;\n}\n// prettier-ignore\nconst FIELD_FIELDS = [\n  'create', 'isValid', 'is0', 'neg', 'inv', 'sqrt', 'sqr',\n  'eql', 'add', 'sub', 'mul', 'pow', 'div',\n  'addN', 'subN', 'mulN', 'sqrN'\n] as const;\nexport function validateField<T>(field: IField<T>): IField<T> {\n  const initial = {\n    ORDER: 'bigint',\n    MASK: 'bigint',\n    BYTES: 'isSafeInteger',\n    BITS: 'isSafeInteger',\n  } as Record<string, string>;\n  const opts = FIELD_FIELDS.reduce((map, val: string) => {\n    map[val] = 'function';\n    return map;\n  }, initial);\n  return validateObject(field, opts);\n}\n\n// Generic field functions\n\n/**\n * Same as `pow` but for Fp: non-constant-time.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n */\nexport function FpPow<T>(f: IField<T>, num: T, power: bigint): T {\n  // Should have same speed as pow for bigints\n  // TODO: benchmark!\n  if (power < _0n) throw new Error('invalid exponent, negatives unsupported');\n  if (power === _0n) return f.ONE;\n  if (power === _1n) return num;\n  let p = f.ONE;\n  let d = num;\n  while (power > _0n) {\n    if (power & _1n) p = f.mul(p, d);\n    d = f.sqr(d);\n    power >>= _1n;\n  }\n  return p;\n}\n\n/**\n * Efficiently invert an array of Field elements.\n * `inv(0)` will return `undefined` here: make sure to throw an error.\n */\nexport function FpInvertBatch<T>(f: IField<T>, nums: T[]): T[] {\n  const tmp = new Array(nums.length);\n  // Walk from first to last, multiply them by each other MOD p\n  const lastMultiplied = nums.reduce((acc, num, i) => {\n    if (f.is0(num)) return acc;\n    tmp[i] = acc;\n    return f.mul(acc, num);\n  }, f.ONE);\n  // Invert last element\n  const inverted = f.inv(lastMultiplied);\n  // Walk from last to first, multiply them by inverted each other MOD p\n  nums.reduceRight((acc, num, i) => {\n    if (f.is0(num)) return acc;\n    tmp[i] = f.mul(acc, tmp[i]);\n    return f.mul(acc, num);\n  }, inverted);\n  return tmp;\n}\n\nexport function FpDiv<T>(f: IField<T>, lhs: T, rhs: T | bigint): T {\n  return f.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, f.ORDER) : f.inv(rhs));\n}\n\n/**\n * Legendre symbol.\n * * (a | p) \u2261 1    if a is a square (mod p), quadratic residue\n * * (a | p) \u2261 -1   if a is not a square (mod p), quadratic non residue\n * * (a | p) \u2261 0    if a \u2261 0 (mod p)\n */\nexport function FpLegendre(order: bigint): <T>(f: IField<T>, x: T) => T {\n  const legendreConst = (order - _1n) / _2n; // Integer arithmetic\n  return <T>(f: IField<T>, x: T): T => f.pow(x, legendreConst);\n}\n\n// This function returns True whenever the value x is a square in the field F.\nexport function FpIsSquare<T>(f: IField<T>): (x: T) => boolean {\n  const legendre = FpLegendre(f.ORDER);\n  return (x: T): boolean => {\n    const p = legendre(f, x);\n    return f.eql(p, f.ZERO) || f.eql(p, f.ONE);\n  };\n}\n\n// CURVE.n lengths\nexport function nLength(\n  n: bigint,\n  nBitLength?: number\n): {\n  nBitLength: number;\n  nByteLength: number;\n} {\n  // Bit size, byte size of CURVE.n\n  const _nBitLength = nBitLength !== undefined ? nBitLength : n.toString(2).length;\n  const nByteLength = Math.ceil(_nBitLength / 8);\n  return { nBitLength: _nBitLength, nByteLength };\n}\n\ntype FpField = IField<bigint> & Required<Pick<IField<bigint>, 'isOdd'>>;\n/**\n * Initializes a finite field over prime.\n * Major performance optimizations:\n * * a) denormalized operations like mulN instead of mul\n * * b) same object shape: never add or remove keys\n * * c) Object.freeze\n * Fragile: always run a benchmark on a change.\n * Security note: operations don't check 'isValid' for all elements for performance reasons,\n * it is caller responsibility to check this.\n * This is low-level code, please make sure you know what you're doing.\n * @param ORDER prime positive bigint\n * @param bitLen how many bits the field consumes\n * @param isLE (def: false) if encoding / decoding should be in little-endian\n * @param redef optional faster redefinitions of sqrt and other methods\n */\nexport function Field(\n  ORDER: bigint,\n  bitLen?: number,\n  isLE = false,\n  redef: Partial<IField<bigint>> = {}\n): Readonly<FpField> {\n  if (ORDER <= _0n) throw new Error('invalid field: expected ORDER > 0, got ' + ORDER);\n  const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, bitLen);\n  if (BYTES > 2048) throw new Error('invalid field: expected ORDER of <= 2048 bytes');\n  let sqrtP: ReturnType<typeof FpSqrt>; // cached sqrtP\n  const f: Readonly<FpField> = Object.freeze({\n    ORDER,\n    isLE,\n    BITS,\n    BYTES,\n    MASK: bitMask(BITS),\n    ZERO: _0n,\n    ONE: _1n,\n    create: (num) => mod(num, ORDER),\n    isValid: (num) => {\n      if (typeof num !== 'bigint')\n        throw new Error('invalid field element: expected bigint, got ' + typeof num);\n      return _0n <= num && num < ORDER; // 0 is valid element, but it's not invertible\n    },\n    is0: (num) => num === _0n,\n    isOdd: (num) => (num & _1n) === _1n,\n    neg: (num) => mod(-num, ORDER),\n    eql: (lhs, rhs) => lhs === rhs,\n\n    sqr: (num) => mod(num * num, ORDER),\n    add: (lhs, rhs) => mod(lhs + rhs, ORDER),\n    sub: (lhs, rhs) => mod(lhs - rhs, ORDER),\n    mul: (lhs, rhs) => mod(lhs * rhs, ORDER),\n    pow: (num, power) => FpPow(f, num, power),\n    div: (lhs, rhs) => mod(lhs * invert(rhs, ORDER), ORDER),\n\n    // Same as above, but doesn't normalize\n    sqrN: (num) => num * num,\n    addN: (lhs, rhs) => lhs + rhs,\n    subN: (lhs, rhs) => lhs - rhs,\n    mulN: (lhs, rhs) => lhs * rhs,\n\n    inv: (num) => invert(num, ORDER),\n    sqrt:\n      redef.sqrt ||\n      ((n) => {\n        if (!sqrtP) sqrtP = FpSqrt(ORDER);\n        return sqrtP(f, n);\n      }),\n    invertBatch: (lst) => FpInvertBatch(f, lst),\n    // TODO: do we really need constant cmov?\n    // We don't have const-time bigints anyway, so probably will be not very useful\n    cmov: (a, b, c) => (c ? b : a),\n    toBytes: (num) => (isLE ? numberToBytesLE(num, BYTES) : numberToBytesBE(num, BYTES)),\n    fromBytes: (bytes) => {\n      if (bytes.length !== BYTES)\n        throw new Error('Field.fromBytes: expected ' + BYTES + ' bytes, got ' + bytes.length);\n      return isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n    },\n  } as FpField);\n  return Object.freeze(f);\n}\n\nexport function FpSqrtOdd<T>(Fp: IField<T>, elm: T): T {\n  if (!Fp.isOdd) throw new Error(\"Field doesn't have isOdd\");\n  const root = Fp.sqrt(elm);\n  return Fp.isOdd(root) ? root : Fp.neg(root);\n}\n\nexport function FpSqrtEven<T>(Fp: IField<T>, elm: T): T {\n  if (!Fp.isOdd) throw new Error(\"Field doesn't have isOdd\");\n  const root = Fp.sqrt(elm);\n  return Fp.isOdd(root) ? Fp.neg(root) : root;\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Same as mapKeyToField, but accepts less bytes (40 instead of 48 for 32-byte field).\n * Which makes it slightly more biased, less secure.\n * @deprecated use `mapKeyToField` instead\n */\nexport function hashToPrivateScalar(\n  hash: string | Uint8Array,\n  groupOrder: bigint,\n  isLE = false\n): bigint {\n  hash = ensureBytes('privateHash', hash);\n  const hashLen = hash.length;\n  const minLen = nLength(groupOrder).nByteLength + 8;\n  if (minLen < 24 || hashLen < minLen || hashLen > 1024)\n    throw new Error(\n      'hashToPrivateScalar: expected ' + minLen + '-1024 bytes of input, got ' + hashLen\n    );\n  const num = isLE ? bytesToNumberLE(hash) : bytesToNumberBE(hash);\n  return mod(num, groupOrder - _1n) + _1n;\n}\n\n/**\n * Returns total number of bytes consumed by the field element.\n * For example, 32 bytes for usual 256-bit weierstrass curve.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of field\n */\nexport function getFieldBytesLength(fieldOrder: bigint): number {\n  if (typeof fieldOrder !== 'bigint') throw new Error('field order must be bigint');\n  const bitLength = fieldOrder.toString(2).length;\n  return Math.ceil(bitLength / 8);\n}\n\n/**\n * Returns minimal amount of bytes that can be safely reduced\n * by field order.\n * Should be 2^-128 for 128-bit curve such as P256.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of target hash\n */\nexport function getMinHashLength(fieldOrder: bigint): number {\n  const length = getFieldBytesLength(fieldOrder);\n  return length + Math.ceil(length / 2);\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Can take (n + n/2) or more bytes of uniform input e.g. from CSPRNG or KDF\n * and convert them into private scalar, with the modulo bias being negligible.\n * Needs at least 48 bytes of input for 32-byte private key.\n * https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/\n * FIPS 186-5, A.2 https://csrc.nist.gov/publications/detail/fips/186/5/final\n * RFC 9380, https://www.rfc-editor.org/rfc/rfc9380#section-5\n * @param hash hash output from SHA3 or a similar function\n * @param groupOrder size of subgroup - (e.g. secp256k1.CURVE.n)\n * @param isLE interpret hash bytes as LE num\n * @returns valid private scalar\n */\nexport function mapHashToField(key: Uint8Array, fieldOrder: bigint, isLE = false): Uint8Array {\n  const len = key.length;\n  const fieldLen = getFieldBytesLength(fieldOrder);\n  const minLen = getMinHashLength(fieldOrder);\n  // No small numbers: need to understand bias story. No huge numbers: easier to detect JS timings.\n  if (len < 16 || len < minLen || len > 1024)\n    throw new Error('expected ' + minLen + '-1024 bytes of input, got ' + len);\n  const num = isLE ? bytesToNumberLE(key) : bytesToNumberBE(key);\n  // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0\n  const reduced = mod(num, fieldOrder - _1n) + _1n;\n  return isLE ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE(reduced, fieldLen);\n}\n", "/**\n * hash-to-curve from [RFC 9380](https://www.rfc-editor.org/rfc/rfc9380).\n * Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport type { AffinePoint, Group, GroupConstructor } from './curve.js';\nimport { type IField, mod } from './modular.js';\nimport type { CHash } from './utils.js';\nimport { abytes, bytesToNumberBE, concatBytes, utf8ToBytes, validateObject } from './utils.js';\n\nexport type UnicodeOrBytes = string | Uint8Array;\n\n/**\n * * `DST` is a domain separation tag, defined in section 2.2.5\n * * `p` characteristic of F, where F is a finite field of characteristic p and order q = p^m\n * * `m` is extension degree (1 for prime fields)\n * * `k` is the target security target in bits (e.g. 128), from section 5.1\n * * `expand` is `xmd` (SHA2, SHA3, BLAKE) or `xof` (SHAKE, BLAKE-XOF)\n * * `hash` conforming to `utils.CHash` interface, with `outputLen` / `blockLen` props\n */\nexport type Opts = {\n  DST: UnicodeOrBytes;\n  p: bigint;\n  m: number;\n  k: number;\n  expand: 'xmd' | 'xof';\n  hash: CHash;\n};\n\n// Octet Stream to Integer. \"spec\" implementation of os2ip is 2.5x slower vs bytesToNumberBE.\nconst os2ip = bytesToNumberBE;\n\n// Integer to Octet Stream (numberToBytesBE)\nfunction i2osp(value: number, length: number): Uint8Array {\n  anum(value);\n  anum(length);\n  if (value < 0 || value >= 1 << (8 * length)) throw new Error('invalid I2OSP input: ' + value);\n  const res = Array.from({ length }).fill(0) as number[];\n  for (let i = length - 1; i >= 0; i--) {\n    res[i] = value & 0xff;\n    value >>>= 8;\n  }\n  return new Uint8Array(res);\n}\n\nfunction strxor(a: Uint8Array, b: Uint8Array): Uint8Array {\n  const arr = new Uint8Array(a.length);\n  for (let i = 0; i < a.length; i++) {\n    arr[i] = a[i] ^ b[i];\n  }\n  return arr;\n}\n\nfunction anum(item: unknown): void {\n  if (!Number.isSafeInteger(item)) throw new Error('number expected');\n}\n\n/**\n * Produces a uniformly random byte string using a cryptographic hash function H that outputs b bits.\n * [RFC 9380 5.3.1](https://www.rfc-editor.org/rfc/rfc9380#section-5.3.1).\n */\nexport function expand_message_xmd(\n  msg: Uint8Array,\n  DST: Uint8Array,\n  lenInBytes: number,\n  H: CHash\n): Uint8Array {\n  abytes(msg);\n  abytes(DST);\n  anum(lenInBytes);\n  // https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3\n  if (DST.length > 255) DST = H(concatBytes(utf8ToBytes('H2C-OVERSIZE-DST-'), DST));\n  const { outputLen: b_in_bytes, blockLen: r_in_bytes } = H;\n  const ell = Math.ceil(lenInBytes / b_in_bytes);\n  if (lenInBytes > 65535 || ell > 255) throw new Error('expand_message_xmd: invalid lenInBytes');\n  const DST_prime = concatBytes(DST, i2osp(DST.length, 1));\n  const Z_pad = i2osp(0, r_in_bytes);\n  const l_i_b_str = i2osp(lenInBytes, 2); // len_in_bytes_str\n  const b = new Array<Uint8Array>(ell);\n  const b_0 = H(concatBytes(Z_pad, msg, l_i_b_str, i2osp(0, 1), DST_prime));\n  b[0] = H(concatBytes(b_0, i2osp(1, 1), DST_prime));\n  for (let i = 1; i <= ell; i++) {\n    const args = [strxor(b_0, b[i - 1]), i2osp(i + 1, 1), DST_prime];\n    b[i] = H(concatBytes(...args));\n  }\n  const pseudo_random_bytes = concatBytes(...b);\n  return pseudo_random_bytes.slice(0, lenInBytes);\n}\n\n/**\n * Produces a uniformly random byte string using an extendable-output function (XOF) H.\n * 1. The collision resistance of H MUST be at least k bits.\n * 2. H MUST be an XOF that has been proved indifferentiable from\n *    a random oracle under a reasonable cryptographic assumption.\n * [RFC 9380 5.3.2](https://www.rfc-editor.org/rfc/rfc9380#section-5.3.2).\n */\nexport function expand_message_xof(\n  msg: Uint8Array,\n  DST: Uint8Array,\n  lenInBytes: number,\n  k: number,\n  H: CHash\n): Uint8Array {\n  abytes(msg);\n  abytes(DST);\n  anum(lenInBytes);\n  // https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3\n  // DST = H('H2C-OVERSIZE-DST-' || a_very_long_DST, Math.ceil((lenInBytes * k) / 8));\n  if (DST.length > 255) {\n    const dkLen = Math.ceil((2 * k) / 8);\n    DST = H.create({ dkLen }).update(utf8ToBytes('H2C-OVERSIZE-DST-')).update(DST).digest();\n  }\n  if (lenInBytes > 65535 || DST.length > 255)\n    throw new Error('expand_message_xof: invalid lenInBytes');\n  return (\n    H.create({ dkLen: lenInBytes })\n      .update(msg)\n      .update(i2osp(lenInBytes, 2))\n      // 2. DST_prime = DST || I2OSP(len(DST), 1)\n      .update(DST)\n      .update(i2osp(DST.length, 1))\n      .digest()\n  );\n}\n\n/**\n * Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F.\n * [RFC 9380 5.2](https://www.rfc-editor.org/rfc/rfc9380#section-5.2).\n * @param msg a byte string containing the message to hash\n * @param count the number of elements of F to output\n * @param options `{DST: string, p: bigint, m: number, k: number, expand: 'xmd' | 'xof', hash: H}`, see above\n * @returns [u_0, ..., u_(count - 1)], a list of field elements.\n */\nexport function hash_to_field(msg: Uint8Array, count: number, options: Opts): bigint[][] {\n  validateObject(options, {\n    DST: 'stringOrUint8Array',\n    p: 'bigint',\n    m: 'isSafeInteger',\n    k: 'isSafeInteger',\n    hash: 'hash',\n  });\n  const { p, k, m, hash, expand, DST: _DST } = options;\n  abytes(msg);\n  anum(count);\n  const DST = typeof _DST === 'string' ? utf8ToBytes(_DST) : _DST;\n  const log2p = p.toString(2).length;\n  const L = Math.ceil((log2p + k) / 8); // section 5.1 of ietf draft link above\n  const len_in_bytes = count * m * L;\n  let prb; // pseudo_random_bytes\n  if (expand === 'xmd') {\n    prb = expand_message_xmd(msg, DST, len_in_bytes, hash);\n  } else if (expand === 'xof') {\n    prb = expand_message_xof(msg, DST, len_in_bytes, k, hash);\n  } else if (expand === '_internal_pass') {\n    // for internal tests only\n    prb = msg;\n  } else {\n    throw new Error('expand must be \"xmd\" or \"xof\"');\n  }\n  const u = new Array(count);\n  for (let i = 0; i < count; i++) {\n    const e = new Array(m);\n    for (let j = 0; j < m; j++) {\n      const elm_offset = L * (j + i * m);\n      const tv = prb.subarray(elm_offset, elm_offset + L);\n      e[j] = mod(os2ip(tv), p);\n    }\n    u[i] = e;\n  }\n  return u;\n}\n\nexport type XY<T> = (\n  x: T,\n  y: T\n) => {\n  x: T;\n  y: T;\n};\nexport function isogenyMap<T, F extends IField<T>>(field: F, map: [T[], T[], T[], T[]]): XY<T> {\n  // Make same order as in spec\n  const COEFF = map.map((i) => Array.from(i).reverse());\n  return (x: T, y: T) => {\n    const [xNum, xDen, yNum, yDen] = COEFF.map((val) =>\n      val.reduce((acc, i) => field.add(field.mul(acc, x), i))\n    );\n    x = field.div(xNum, xDen); // xNum / xDen\n    y = field.mul(y, field.div(yNum, yDen)); // y * (yNum / yDev)\n    return { x: x, y: y };\n  };\n}\n\n/** Point interface, which curves must implement to work correctly with the module. */\nexport interface H2CPoint<T> extends Group<H2CPoint<T>> {\n  add(rhs: H2CPoint<T>): H2CPoint<T>;\n  toAffine(iz?: bigint): AffinePoint<T>;\n  clearCofactor(): H2CPoint<T>;\n  assertValidity(): void;\n}\n\nexport interface H2CPointConstructor<T> extends GroupConstructor<H2CPoint<T>> {\n  fromAffine(ap: AffinePoint<T>): H2CPoint<T>;\n}\n\nexport type MapToCurve<T> = (scalar: bigint[]) => AffinePoint<T>;\n\n// Separated from initialization opts, so users won't accidentally change per-curve parameters\n// (changing DST is ok!)\nexport type htfBasicOpts = { DST: UnicodeOrBytes };\nexport type HTFMethod<T> = (msg: Uint8Array, options?: htfBasicOpts) => H2CPoint<T>;\nexport type MapMethod<T> = (scalars: bigint[]) => H2CPoint<T>;\n\n/** Creates hash-to-curve methods from EC Point and mapToCurve function. */\nexport function createHasher<T>(\n  Point: H2CPointConstructor<T>,\n  mapToCurve: MapToCurve<T>,\n  def: Opts & { encodeDST?: UnicodeOrBytes }\n): {\n  hashToCurve: HTFMethod<T>;\n  encodeToCurve: HTFMethod<T>;\n  mapToCurve: MapMethod<T>;\n} {\n  if (typeof mapToCurve !== 'function') throw new Error('mapToCurve() must be defined');\n  return {\n    // Encodes byte string to elliptic curve.\n    // hash_to_curve from https://www.rfc-editor.org/rfc/rfc9380#section-3\n    hashToCurve(msg: Uint8Array, options?: htfBasicOpts): H2CPoint<T> {\n      const u = hash_to_field(msg, 2, { ...def, DST: def.DST, ...options } as Opts);\n      const u0 = Point.fromAffine(mapToCurve(u[0]));\n      const u1 = Point.fromAffine(mapToCurve(u[1]));\n      const P = u0.add(u1).clearCofactor();\n      P.assertValidity();\n      return P;\n    },\n\n    // Encodes byte string to elliptic curve.\n    // encode_to_curve from https://www.rfc-editor.org/rfc/rfc9380#section-3\n    encodeToCurve(msg: Uint8Array, options?: htfBasicOpts): H2CPoint<T> {\n      const u = hash_to_field(msg, 1, { ...def, DST: def.encodeDST, ...options } as Opts);\n      const P = Point.fromAffine(mapToCurve(u[0])).clearCofactor();\n      P.assertValidity();\n      return P;\n    },\n    // Same as encodeToCurve, but without hash\n    mapToCurve(scalars: bigint[]): H2CPoint<T> {\n      if (!Array.isArray(scalars)) throw new Error('mapToCurve: expected array of bigints');\n      for (const i of scalars)\n        if (typeof i !== 'bigint') throw new Error('mapToCurve: expected array of bigints');\n      const P = Point.fromAffine(mapToCurve(scalars)).clearCofactor();\n      P.assertValidity();\n      return P;\n    },\n  };\n}\n", "/**\n * Methods for elliptic curve multiplication by scalars.\n * Contains wNAF, pippenger\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { type IField, nLength, validateField } from './modular.js';\nimport { bitLen, validateObject } from './utils.js';\n\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\n\nexport type AffinePoint<T> = {\n  x: T;\n  y: T;\n} & { z?: never; t?: never };\n\nexport interface Group<T extends Group<T>> {\n  double(): T;\n  negate(): T;\n  add(other: T): T;\n  subtract(other: T): T;\n  equals(other: T): boolean;\n  multiply(scalar: bigint): T;\n}\n\nexport type GroupConstructor<T> = {\n  BASE: T;\n  ZERO: T;\n};\nexport type Mapper<T> = (i: T[]) => T[];\n\nfunction constTimeNegate<T extends Group<T>>(condition: boolean, item: T): T {\n  const neg = item.negate();\n  return condition ? neg : item;\n}\n\nfunction validateW(W: number, bits: number) {\n  if (!Number.isSafeInteger(W) || W <= 0 || W > bits)\n    throw new Error('invalid window size, expected [1..' + bits + '], got W=' + W);\n}\n\nfunction calcWOpts(W: number, bits: number) {\n  validateW(W, bits);\n  const windows = Math.ceil(bits / W) + 1; // +1, because\n  const windowSize = 2 ** (W - 1); // -1 because we skip zero\n  return { windows, windowSize };\n}\n\nfunction validateMSMPoints(points: any[], c: any) {\n  if (!Array.isArray(points)) throw new Error('array expected');\n  points.forEach((p, i) => {\n    if (!(p instanceof c)) throw new Error('invalid point at index ' + i);\n  });\n}\nfunction validateMSMScalars(scalars: any[], field: any) {\n  if (!Array.isArray(scalars)) throw new Error('array of scalars expected');\n  scalars.forEach((s, i) => {\n    if (!field.isValid(s)) throw new Error('invalid scalar at index ' + i);\n  });\n}\n\n// Since points in different groups cannot be equal (different object constructor),\n// we can have single place to store precomputes\nconst pointPrecomputes = new WeakMap<any, any[]>();\nconst pointWindowSizes = new WeakMap<any, number>(); // This allows use make points immutable (nothing changes inside)\n\nfunction getW(P: any): number {\n  return pointWindowSizes.get(P) || 1;\n}\n\nexport type IWNAF<T extends Group<T>> = {\n  constTimeNegate: <T extends Group<T>>(condition: boolean, item: T) => T;\n  hasPrecomputes(elm: T): boolean;\n  unsafeLadder(elm: T, n: bigint, p?: T): T;\n  precomputeWindow(elm: T, W: number): Group<T>[];\n  wNAF(W: number, precomputes: T[], n: bigint): { p: T; f: T };\n  wNAFUnsafe(W: number, precomputes: T[], n: bigint, acc?: T): T;\n  getPrecomputes(W: number, P: T, transform: Mapper<T>): T[];\n  wNAFCached(P: T, n: bigint, transform: Mapper<T>): { p: T; f: T };\n  wNAFCachedUnsafe(P: T, n: bigint, transform: Mapper<T>, prev?: T): T;\n  setWindowSize(P: T, W: number): void;\n};\n\n/**\n * Elliptic curve multiplication of Point by scalar. Fragile.\n * Scalars should always be less than curve order: this should be checked inside of a curve itself.\n * Creates precomputation tables for fast multiplication:\n * - private scalar is split by fixed size windows of W bits\n * - every window point is collected from window's table & added to accumulator\n * - since windows are different, same point inside tables won't be accessed more than once per calc\n * - each multiplication is 'Math.ceil(CURVE_ORDER / \uD835\uDC4A) + 1' point additions (fixed for any scalar)\n * - +1 window is neccessary for wNAF\n * - wNAF reduces table size: 2x less memory + 2x faster generation, but 10% slower multiplication\n *\n * @todo Research returning 2d JS array of windows, instead of a single window.\n * This would allow windows to be in different memory locations\n */\nexport function wNAF<T extends Group<T>>(c: GroupConstructor<T>, bits: number): IWNAF<T> {\n  return {\n    constTimeNegate,\n\n    hasPrecomputes(elm: T) {\n      return getW(elm) !== 1;\n    },\n\n    // non-const time multiplication ladder\n    unsafeLadder(elm: T, n: bigint, p = c.ZERO) {\n      let d: T = elm;\n      while (n > _0n) {\n        if (n & _1n) p = p.add(d);\n        d = d.double();\n        n >>= _1n;\n      }\n      return p;\n    },\n\n    /**\n     * Creates a wNAF precomputation window. Used for caching.\n     * Default window size is set by `utils.precompute()` and is equal to 8.\n     * Number of precomputed points depends on the curve size:\n     * 2^(\uD835\uDC4A\u22121) * (Math.ceil(\uD835\uDC5B / \uD835\uDC4A) + 1), where:\n     * - \uD835\uDC4A is the window size\n     * - \uD835\uDC5B is the bitlength of the curve order.\n     * For a 256-bit curve and window size 8, the number of precomputed points is 128 * 33 = 4224.\n     * @param elm Point instance\n     * @param W window size\n     * @returns precomputed point tables flattened to a single array\n     */\n    precomputeWindow(elm: T, W: number): Group<T>[] {\n      const { windows, windowSize } = calcWOpts(W, bits);\n      const points: T[] = [];\n      let p: T = elm;\n      let base = p;\n      for (let window = 0; window < windows; window++) {\n        base = p;\n        points.push(base);\n        // =1, because we skip zero\n        for (let i = 1; i < windowSize; i++) {\n          base = base.add(p);\n          points.push(base);\n        }\n        p = base.double();\n      }\n      return points;\n    },\n\n    /**\n     * Implements ec multiplication using precomputed tables and w-ary non-adjacent form.\n     * @param W window size\n     * @param precomputes precomputed tables\n     * @param n scalar (we don't check here, but should be less than curve order)\n     * @returns real and fake (for const-time) points\n     */\n    wNAF(W: number, precomputes: T[], n: bigint): { p: T; f: T } {\n      // TODO: maybe check that scalar is less than group order? wNAF behavious is undefined otherwise\n      // But need to carefully remove other checks before wNAF. ORDER == bits here\n      const { windows, windowSize } = calcWOpts(W, bits);\n\n      let p = c.ZERO;\n      let f = c.BASE;\n\n      const mask = BigInt(2 ** W - 1); // Create mask with W ones: 0b1111 for W=4 etc.\n      const maxNumber = 2 ** W;\n      const shiftBy = BigInt(W);\n\n      for (let window = 0; window < windows; window++) {\n        const offset = window * windowSize;\n        // Extract W bits.\n        let wbits = Number(n & mask);\n\n        // Shift number by W bits.\n        n >>= shiftBy;\n\n        // If the bits are bigger than max size, we'll split those.\n        // +224 => 256 - 32\n        if (wbits > windowSize) {\n          wbits -= maxNumber;\n          n += _1n;\n        }\n\n        // This code was first written with assumption that 'f' and 'p' will never be infinity point:\n        // since each addition is multiplied by 2 ** W, it cannot cancel each other. However,\n        // there is negate now: it is possible that negated element from low value\n        // would be the same as high element, which will create carry into next window.\n        // It's not obvious how this can fail, but still worth investigating later.\n\n        // Check if we're onto Zero point.\n        // Add random point inside current window to f.\n        const offset1 = offset;\n        const offset2 = offset + Math.abs(wbits) - 1; // -1 because we skip zero\n        const cond1 = window % 2 !== 0;\n        const cond2 = wbits < 0;\n        if (wbits === 0) {\n          // The most important part for const-time getPublicKey\n          f = f.add(constTimeNegate(cond1, precomputes[offset1]));\n        } else {\n          p = p.add(constTimeNegate(cond2, precomputes[offset2]));\n        }\n      }\n      // JIT-compiler should not eliminate f here, since it will later be used in normalizeZ()\n      // Even if the variable is still unused, there are some checks which will\n      // throw an exception, so compiler needs to prove they won't happen, which is hard.\n      // At this point there is a way to F be infinity-point even if p is not,\n      // which makes it less const-time: around 1 bigint multiply.\n      return { p, f };\n    },\n\n    /**\n     * Implements ec unsafe (non const-time) multiplication using precomputed tables and w-ary non-adjacent form.\n     * @param W window size\n     * @param precomputes precomputed tables\n     * @param n scalar (we don't check here, but should be less than curve order)\n     * @param acc accumulator point to add result of multiplication\n     * @returns point\n     */\n    wNAFUnsafe(W: number, precomputes: T[], n: bigint, acc: T = c.ZERO): T {\n      const { windows, windowSize } = calcWOpts(W, bits);\n      const mask = BigInt(2 ** W - 1); // Create mask with W ones: 0b1111 for W=4 etc.\n      const maxNumber = 2 ** W;\n      const shiftBy = BigInt(W);\n      for (let window = 0; window < windows; window++) {\n        const offset = window * windowSize;\n        if (n === _0n) break; // No need to go over empty scalar\n        // Extract W bits.\n        let wbits = Number(n & mask);\n        // Shift number by W bits.\n        n >>= shiftBy;\n        // If the bits are bigger than max size, we'll split those.\n        // +224 => 256 - 32\n        if (wbits > windowSize) {\n          wbits -= maxNumber;\n          n += _1n;\n        }\n        if (wbits === 0) continue;\n        let curr = precomputes[offset + Math.abs(wbits) - 1]; // -1 because we skip zero\n        if (wbits < 0) curr = curr.negate();\n        // NOTE: by re-using acc, we can save a lot of additions in case of MSM\n        acc = acc.add(curr);\n      }\n      return acc;\n    },\n\n    getPrecomputes(W: number, P: T, transform: Mapper<T>): T[] {\n      // Calculate precomputes on a first run, reuse them after\n      let comp = pointPrecomputes.get(P);\n      if (!comp) {\n        comp = this.precomputeWindow(P, W) as T[];\n        if (W !== 1) pointPrecomputes.set(P, transform(comp));\n      }\n      return comp;\n    },\n\n    wNAFCached(P: T, n: bigint, transform: Mapper<T>): { p: T; f: T } {\n      const W = getW(P);\n      return this.wNAF(W, this.getPrecomputes(W, P, transform), n);\n    },\n\n    wNAFCachedUnsafe(P: T, n: bigint, transform: Mapper<T>, prev?: T): T {\n      const W = getW(P);\n      if (W === 1) return this.unsafeLadder(P, n, prev); // For W=1 ladder is ~x2 faster\n      return this.wNAFUnsafe(W, this.getPrecomputes(W, P, transform), n, prev);\n    },\n\n    // We calculate precomputes for elliptic curve point multiplication\n    // using windowed method. This specifies window size and\n    // stores precomputed values. Usually only base point would be precomputed.\n\n    setWindowSize(P: T, W: number) {\n      validateW(W, bits);\n      pointWindowSizes.set(P, W);\n      pointPrecomputes.delete(P);\n    },\n  };\n}\n\n/**\n * Pippenger algorithm for multi-scalar multiplication (MSM, Pa + Qb + Rc + ...).\n * 30x faster vs naive addition on L=4096, 10x faster with precomputes.\n * For N=254bit, L=1, it does: 1024 ADD + 254 DBL. For L=5: 1536 ADD + 254 DBL.\n * Algorithmically constant-time (for same L), even when 1 point + scalar, or when scalar = 0.\n * @param c Curve Point constructor\n * @param fieldN field over CURVE.N - important that it's not over CURVE.P\n * @param points array of L curve points\n * @param scalars array of L scalars (aka private keys / bigints)\n */\nexport function pippenger<T extends Group<T>>(\n  c: GroupConstructor<T>,\n  fieldN: IField<bigint>,\n  points: T[],\n  scalars: bigint[]\n): T {\n  // If we split scalars by some window (let's say 8 bits), every chunk will only\n  // take 256 buckets even if there are 4096 scalars, also re-uses double.\n  // TODO:\n  // - https://eprint.iacr.org/2024/750.pdf\n  // - https://tches.iacr.org/index.php/TCHES/article/view/10287\n  // 0 is accepted in scalars\n  validateMSMPoints(points, c);\n  validateMSMScalars(scalars, fieldN);\n  if (points.length !== scalars.length)\n    throw new Error('arrays of points and scalars must have equal length');\n  const zero = c.ZERO;\n  const wbits = bitLen(BigInt(points.length));\n  const windowSize = wbits > 12 ? wbits - 3 : wbits > 4 ? wbits - 2 : wbits ? 2 : 1; // in bits\n  const MASK = (1 << windowSize) - 1;\n  const buckets = new Array(MASK + 1).fill(zero); // +1 for zero array\n  const lastBits = Math.floor((fieldN.BITS - 1) / windowSize) * windowSize;\n  let sum = zero;\n  for (let i = lastBits; i >= 0; i -= windowSize) {\n    buckets.fill(zero);\n    for (let j = 0; j < scalars.length; j++) {\n      const scalar = scalars[j];\n      const wbits = Number((scalar >> BigInt(i)) & BigInt(MASK));\n      buckets[wbits] = buckets[wbits].add(points[j]);\n    }\n    let resI = zero; // not using this will do small speed-up, but will lose ct\n    // Skip first bucket, because it is zero\n    for (let j = buckets.length - 1, sumI = zero; j > 0; j--) {\n      sumI = sumI.add(buckets[j]);\n      resI = resI.add(sumI);\n    }\n    sum = sum.add(resI);\n    if (i !== 0) for (let j = 0; j < windowSize; j++) sum = sum.double();\n  }\n  return sum as T;\n}\n/**\n * Precomputed multi-scalar multiplication (MSM, Pa + Qb + Rc + ...).\n * @param c Curve Point constructor\n * @param fieldN field over CURVE.N - important that it's not over CURVE.P\n * @param points array of L curve points\n * @returns function which multiplies points with scaars\n */\nexport function precomputeMSMUnsafe<T extends Group<T>>(\n  c: GroupConstructor<T>,\n  fieldN: IField<bigint>,\n  points: T[],\n  windowSize: number\n): (scalars: bigint[]) => T {\n  /**\n   * Performance Analysis of Window-based Precomputation\n   *\n   * Base Case (256-bit scalar, 8-bit window):\n   * - Standard precomputation requires:\n   *   - 31 additions per scalar \u00D7 256 scalars = 7,936 ops\n   *   - Plus 255 summary additions = 8,191 total ops\n   *   Note: Summary additions can be optimized via accumulator\n   *\n   * Chunked Precomputation Analysis:\n   * - Using 32 chunks requires:\n   *   - 255 additions per chunk\n   *   - 256 doublings\n   *   - Total: (255 \u00D7 32) + 256 = 8,416 ops\n   *\n   * Memory Usage Comparison:\n   * Window Size | Standard Points | Chunked Points\n   * ------------|-----------------|---------------\n   *     4-bit   |     520         |      15\n   *     8-bit   |    4,224        |     255\n   *    10-bit   |   13,824        |   1,023\n   *    16-bit   |  557,056        |  65,535\n   *\n   * Key Advantages:\n   * 1. Enables larger window sizes due to reduced memory overhead\n   * 2. More efficient for smaller scalar counts:\n   *    - 16 chunks: (16 \u00D7 255) + 256 = 4,336 ops\n   *    - ~2x faster than standard 8,191 ops\n   *\n   * Limitations:\n   * - Not suitable for plain precomputes (requires 256 constant doublings)\n   * - Performance degrades with larger scalar counts:\n   *   - Optimal for ~256 scalars\n   *   - Less efficient for 4096+ scalars (Pippenger preferred)\n   */\n  validateW(windowSize, fieldN.BITS);\n  validateMSMPoints(points, c);\n  const zero = c.ZERO;\n  const tableSize = 2 ** windowSize - 1; // table size (without zero)\n  const chunks = Math.ceil(fieldN.BITS / windowSize); // chunks of item\n  const MASK = BigInt((1 << windowSize) - 1);\n  const tables = points.map((p: T) => {\n    const res = [];\n    for (let i = 0, acc = p; i < tableSize; i++) {\n      res.push(acc);\n      acc = acc.add(p);\n    }\n    return res;\n  });\n  return (scalars: bigint[]): T => {\n    validateMSMScalars(scalars, fieldN);\n    if (scalars.length > points.length)\n      throw new Error('array of scalars must be smaller than array of points');\n    let res = zero;\n    for (let i = 0; i < chunks; i++) {\n      // No need to double if accumulator is still zero.\n      if (res !== zero) for (let j = 0; j < windowSize; j++) res = res.double();\n      const shiftBy = BigInt(chunks * windowSize - (i + 1) * windowSize);\n      for (let j = 0; j < scalars.length; j++) {\n        const n = scalars[j];\n        const curr = Number((n >> shiftBy) & MASK);\n        if (!curr) continue; // skip zero scalars chunks\n        res = res.add(tables[j][curr - 1]);\n      }\n    }\n    return res;\n  };\n}\n\n/**\n * Generic BasicCurve interface: works even for polynomial fields (BLS): P, n, h would be ok.\n * Though generator can be different (Fp2 / Fp6 for BLS).\n */\nexport type BasicCurve<T> = {\n  Fp: IField<T>; // Field over which we'll do calculations (Fp)\n  n: bigint; // Curve order, total count of valid points in the field\n  nBitLength?: number; // bit length of curve order\n  nByteLength?: number; // byte length of curve order\n  h: bigint; // cofactor. we can assign default=1, but users will just ignore it w/o validation\n  hEff?: bigint; // Number to multiply to clear cofactor\n  Gx: T; // base point X coordinate\n  Gy: T; // base point Y coordinate\n  allowInfinityPoint?: boolean; // bls12-381 requires it. ZERO point is valid, but invalid pubkey\n};\n\nexport function validateBasic<FP, T>(\n  curve: BasicCurve<FP> & T\n): Readonly<\n  {\n    readonly nBitLength: number;\n    readonly nByteLength: number;\n  } & BasicCurve<FP> &\n    T & {\n      p: bigint;\n    }\n> {\n  validateField(curve.Fp);\n  validateObject(\n    curve,\n    {\n      n: 'bigint',\n      h: 'bigint',\n      Gx: 'field',\n      Gy: 'field',\n    },\n    {\n      nBitLength: 'isSafeInteger',\n      nByteLength: 'isSafeInteger',\n    }\n  );\n  // Set defaults\n  return Object.freeze({\n    ...nLength(curve.n, curve.nBitLength),\n    ...curve,\n    ...{ p: curve.Fp.ORDER },\n  } as const);\n}\n", "/**\n * Short Weierstrass curve methods. The formula is: y\u00B2 = x\u00B3 + ax + b.\n *\n * ### Design rationale for types\n *\n * * Interaction between classes from different curves should fail:\n *   `k256.Point.BASE.add(p256.Point.BASE)`\n * * For this purpose we want to use `instanceof` operator, which is fast and works during runtime\n * * Different calls of `curve()` would return different classes -\n *   `curve(params) !== curve(params)`: if somebody decided to monkey-patch their curve,\n *   it won't affect others\n *\n * TypeScript can't infer types for classes created inside a function. Classes is one instance\n * of nominative types in TypeScript and interfaces only check for shape, so it's hard to create\n * unique type for every function call.\n *\n * We can use generic types via some param, like curve opts, but that would:\n *     1. Enable interaction between `curve(params)` and `curve(params)` (curves of same params)\n *     which is hard to debug.\n *     2. Params can be generic and we can't enforce them to be constant value:\n *     if somebody creates curve from non-constant params,\n *     it would be allowed to interact with other curves with non-constant params\n *\n * @todo https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html#unique-symbol\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport {\n  type AffinePoint,\n  type BasicCurve,\n  type Group,\n  type GroupConstructor,\n  pippenger,\n  validateBasic,\n  wNAF,\n} from './curve.js';\nimport {\n  Field,\n  type IField,\n  getMinHashLength,\n  invert,\n  mapHashToField,\n  mod,\n  validateField,\n} from './modular.js';\nimport * as ut from './utils.js';\nimport { type CHash, type Hex, type PrivKey, abool, ensureBytes, memoized } from './utils.js';\n\nexport type { AffinePoint };\ntype HmacFnSync = (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array;\ntype EndomorphismOpts = {\n  beta: bigint;\n  splitScalar: (k: bigint) => { k1neg: boolean; k1: bigint; k2neg: boolean; k2: bigint };\n};\nexport type BasicWCurve<T> = BasicCurve<T> & {\n  // Params: a, b\n  a: T;\n  b: T;\n\n  // Optional params\n  allowedPrivateKeyLengths?: readonly number[]; // for P521\n  wrapPrivateKey?: boolean; // bls12-381 requires mod(n) instead of rejecting keys >= n\n  endo?: EndomorphismOpts; // Endomorphism options for Koblitz curves\n  // When a cofactor != 1, there can be an effective methods to:\n  // 1. Determine whether a point is torsion-free\n  isTorsionFree?: (c: ProjConstructor<T>, point: ProjPointType<T>) => boolean;\n  // 2. Clear torsion component\n  clearCofactor?: (c: ProjConstructor<T>, point: ProjPointType<T>) => ProjPointType<T>;\n};\n\ntype Entropy = Hex | boolean;\nexport type SignOpts = { lowS?: boolean; extraEntropy?: Entropy; prehash?: boolean };\nexport type VerOpts = { lowS?: boolean; prehash?: boolean; format?: 'compact' | 'der' | undefined };\n\nfunction validateSigVerOpts(opts: SignOpts | VerOpts) {\n  if (opts.lowS !== undefined) abool('lowS', opts.lowS);\n  if (opts.prehash !== undefined) abool('prehash', opts.prehash);\n}\n\n// Instance for 3d XYZ points\nexport interface ProjPointType<T> extends Group<ProjPointType<T>> {\n  readonly px: T;\n  readonly py: T;\n  readonly pz: T;\n  get x(): T;\n  get y(): T;\n  multiply(scalar: bigint): ProjPointType<T>;\n  toAffine(iz?: T): AffinePoint<T>;\n  isTorsionFree(): boolean;\n  clearCofactor(): ProjPointType<T>;\n  assertValidity(): void;\n  hasEvenY(): boolean;\n  toRawBytes(isCompressed?: boolean): Uint8Array;\n  toHex(isCompressed?: boolean): string;\n\n  multiplyUnsafe(scalar: bigint): ProjPointType<T>;\n  multiplyAndAddUnsafe(Q: ProjPointType<T>, a: bigint, b: bigint): ProjPointType<T> | undefined;\n  _setWindowSize(windowSize: number): void;\n}\n// Static methods for 3d XYZ points\nexport interface ProjConstructor<T> extends GroupConstructor<ProjPointType<T>> {\n  new (x: T, y: T, z: T): ProjPointType<T>;\n  fromAffine(p: AffinePoint<T>): ProjPointType<T>;\n  fromHex(hex: Hex): ProjPointType<T>;\n  fromPrivateKey(privateKey: PrivKey): ProjPointType<T>;\n  normalizeZ(points: ProjPointType<T>[]): ProjPointType<T>[];\n  msm(points: ProjPointType<T>[], scalars: bigint[]): ProjPointType<T>;\n}\n\nexport type CurvePointsType<T> = BasicWCurve<T> & {\n  // Bytes\n  fromBytes?: (bytes: Uint8Array) => AffinePoint<T>;\n  toBytes?: (c: ProjConstructor<T>, point: ProjPointType<T>, isCompressed: boolean) => Uint8Array;\n};\n\nexport type CurvePointsTypeWithLength<T> = Readonly<\n  CurvePointsType<T> & { nByteLength: number; nBitLength: number }\n>;\n\nfunction validatePointOpts<T>(curve: CurvePointsType<T>): CurvePointsTypeWithLength<T> {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    opts,\n    {\n      a: 'field',\n      b: 'field',\n    },\n    {\n      allowedPrivateKeyLengths: 'array',\n      wrapPrivateKey: 'boolean',\n      isTorsionFree: 'function',\n      clearCofactor: 'function',\n      allowInfinityPoint: 'boolean',\n      fromBytes: 'function',\n      toBytes: 'function',\n    }\n  );\n  const { endo, Fp, a } = opts;\n  if (endo) {\n    if (!Fp.eql(a, Fp.ZERO)) {\n      throw new Error('invalid endomorphism, can only be defined for Koblitz curves that have a=0');\n    }\n    if (\n      typeof endo !== 'object' ||\n      typeof endo.beta !== 'bigint' ||\n      typeof endo.splitScalar !== 'function'\n    ) {\n      throw new Error('invalid endomorphism, expected beta: bigint and splitScalar: function');\n    }\n  }\n  return Object.freeze({ ...opts } as const);\n}\n\nexport type CurvePointsRes<T> = {\n  CURVE: ReturnType<typeof validatePointOpts<T>>;\n  ProjectivePoint: ProjConstructor<T>;\n  normPrivateKeyToScalar: (key: PrivKey) => bigint;\n  weierstrassEquation: (x: T) => T;\n  isWithinCurveOrder: (num: bigint) => boolean;\n};\n\nconst { bytesToNumberBE: b2n, hexToBytes: h2b } = ut;\n\nexport class DERErr extends Error {\n  constructor(m = '') {\n    super(m);\n  }\n}\nexport type IDER = {\n  // asn.1 DER encoding utils\n  Err: typeof DERErr;\n  // Basic building block is TLV (Tag-Length-Value)\n  _tlv: {\n    encode: (tag: number, data: string) => string;\n    // v - value, l - left bytes (unparsed)\n    decode(tag: number, data: Uint8Array): { v: Uint8Array; l: Uint8Array };\n  };\n  // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag,\n  // since we always use positive integers here. It must always be empty:\n  // - add zero byte if exists\n  // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding)\n  _int: {\n    encode(num: bigint): string;\n    decode(data: Uint8Array): bigint;\n  };\n  toSig(hex: string | Uint8Array): { r: bigint; s: bigint };\n  hexFromSig(sig: { r: bigint; s: bigint }): string;\n};\n/**\n * ASN.1 DER encoding utilities. ASN is very complex & fragile. Format:\n *\n *     [0x30 (SEQUENCE), bytelength, 0x02 (INTEGER), intLength, R, 0x02 (INTEGER), intLength, S]\n *\n * Docs: https://letsencrypt.org/docs/a-warm-welcome-to-asn1-and-der/, https://luca.ntop.org/Teaching/Appunti/asn1.html\n */\nexport const DER: IDER = {\n  // asn.1 DER encoding utils\n  Err: DERErr,\n  // Basic building block is TLV (Tag-Length-Value)\n  _tlv: {\n    encode: (tag: number, data: string): string => {\n      const { Err: E } = DER;\n      if (tag < 0 || tag > 256) throw new E('tlv.encode: wrong tag');\n      if (data.length & 1) throw new E('tlv.encode: unpadded data');\n      const dataLen = data.length / 2;\n      const len = ut.numberToHexUnpadded(dataLen);\n      if ((len.length / 2) & 0b1000_0000) throw new E('tlv.encode: long form length too big');\n      // length of length with long form flag\n      const lenLen = dataLen > 127 ? ut.numberToHexUnpadded((len.length / 2) | 0b1000_0000) : '';\n      const t = ut.numberToHexUnpadded(tag);\n      return t + lenLen + len + data;\n    },\n    // v - value, l - left bytes (unparsed)\n    decode(tag: number, data: Uint8Array): { v: Uint8Array; l: Uint8Array } {\n      const { Err: E } = DER;\n      let pos = 0;\n      if (tag < 0 || tag > 256) throw new E('tlv.encode: wrong tag');\n      if (data.length < 2 || data[pos++] !== tag) throw new E('tlv.decode: wrong tlv');\n      const first = data[pos++];\n      const isLong = !!(first & 0b1000_0000); // First bit of first length byte is flag for short/long form\n      let length = 0;\n      if (!isLong) length = first;\n      else {\n        // Long form: [longFlag(1bit), lengthLength(7bit), length (BE)]\n        const lenLen = first & 0b0111_1111;\n        if (!lenLen) throw new E('tlv.decode(long): indefinite length not supported');\n        if (lenLen > 4) throw new E('tlv.decode(long): byte length is too big'); // this will overflow u32 in js\n        const lengthBytes = data.subarray(pos, pos + lenLen);\n        if (lengthBytes.length !== lenLen) throw new E('tlv.decode: length bytes not complete');\n        if (lengthBytes[0] === 0) throw new E('tlv.decode(long): zero leftmost byte');\n        for (const b of lengthBytes) length = (length << 8) | b;\n        pos += lenLen;\n        if (length < 128) throw new E('tlv.decode(long): not minimal encoding');\n      }\n      const v = data.subarray(pos, pos + length);\n      if (v.length !== length) throw new E('tlv.decode: wrong value length');\n      return { v, l: data.subarray(pos + length) };\n    },\n  },\n  // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag,\n  // since we always use positive integers here. It must always be empty:\n  // - add zero byte if exists\n  // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding)\n  _int: {\n    encode(num: bigint): string {\n      const { Err: E } = DER;\n      if (num < _0n) throw new E('integer: negative integers are not allowed');\n      let hex = ut.numberToHexUnpadded(num);\n      // Pad with zero byte if negative flag is present\n      if (Number.parseInt(hex[0], 16) & 0b1000) hex = '00' + hex;\n      if (hex.length & 1) throw new E('unexpected DER parsing assertion: unpadded hex');\n      return hex;\n    },\n    decode(data: Uint8Array): bigint {\n      const { Err: E } = DER;\n      if (data[0] & 0b1000_0000) throw new E('invalid signature integer: negative');\n      if (data[0] === 0x00 && !(data[1] & 0b1000_0000))\n        throw new E('invalid signature integer: unnecessary leading zero');\n      return b2n(data);\n    },\n  },\n  toSig(hex: string | Uint8Array): { r: bigint; s: bigint } {\n    // parse DER signature\n    const { Err: E, _int: int, _tlv: tlv } = DER;\n    const data = typeof hex === 'string' ? h2b(hex) : hex;\n    ut.abytes(data);\n    const { v: seqBytes, l: seqLeftBytes } = tlv.decode(0x30, data);\n    if (seqLeftBytes.length) throw new E('invalid signature: left bytes after parsing');\n    const { v: rBytes, l: rLeftBytes } = tlv.decode(0x02, seqBytes);\n    const { v: sBytes, l: sLeftBytes } = tlv.decode(0x02, rLeftBytes);\n    if (sLeftBytes.length) throw new E('invalid signature: left bytes after parsing');\n    return { r: int.decode(rBytes), s: int.decode(sBytes) };\n  },\n  hexFromSig(sig: { r: bigint; s: bigint }): string {\n    const { _tlv: tlv, _int: int } = DER;\n    const rs = tlv.encode(0x02, int.encode(sig.r));\n    const ss = tlv.encode(0x02, int.encode(sig.s));\n    const seq = rs + ss;\n    return tlv.encode(0x30, seq);\n  },\n};\n\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3), _4n = BigInt(4);\n\nexport function weierstrassPoints<T>(opts: CurvePointsType<T>): CurvePointsRes<T> {\n  const CURVE = validatePointOpts(opts);\n  const { Fp } = CURVE; // All curves has same field / group length as for now, but they can differ\n  const Fn = Field(CURVE.n, CURVE.nBitLength);\n\n  const toBytes =\n    CURVE.toBytes ||\n    ((_c: ProjConstructor<T>, point: ProjPointType<T>, _isCompressed: boolean) => {\n      const a = point.toAffine();\n      return ut.concatBytes(Uint8Array.from([0x04]), Fp.toBytes(a.x), Fp.toBytes(a.y));\n    });\n  const fromBytes =\n    CURVE.fromBytes ||\n    ((bytes: Uint8Array) => {\n      // const head = bytes[0];\n      const tail = bytes.subarray(1);\n      // if (head !== 0x04) throw new Error('Only non-compressed encoding is supported');\n      const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n      const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n      return { x, y };\n    });\n\n  /**\n   * y\u00B2 = x\u00B3 + ax + b: Short weierstrass curve formula\n   * @returns y\u00B2\n   */\n  function weierstrassEquation(x: T): T {\n    const { a, b } = CURVE;\n    const x2 = Fp.sqr(x); // x * x\n    const x3 = Fp.mul(x2, x); // x2 * x\n    return Fp.add(Fp.add(x3, Fp.mul(x, a)), b); // x3 + a * x + b\n  }\n  // Validate whether the passed curve params are valid.\n  // We check if curve equation works for generator point.\n  // `assertValidity()` won't work: `isTorsionFree()` is not available at this point in bls12-381.\n  // ProjectivePoint class has not been initialized yet.\n  if (!Fp.eql(Fp.sqr(CURVE.Gy), weierstrassEquation(CURVE.Gx)))\n    throw new Error('bad generator point: equation left != right');\n\n  // Valid group elements reside in range 1..n-1\n  function isWithinCurveOrder(num: bigint): boolean {\n    return ut.inRange(num, _1n, CURVE.n);\n  }\n  // Validates if priv key is valid and converts it to bigint.\n  // Supports options allowedPrivateKeyLengths and wrapPrivateKey.\n  function normPrivateKeyToScalar(key: PrivKey): bigint {\n    const { allowedPrivateKeyLengths: lengths, nByteLength, wrapPrivateKey, n: N } = CURVE;\n    if (lengths && typeof key !== 'bigint') {\n      if (ut.isBytes(key)) key = ut.bytesToHex(key);\n      // Normalize to hex string, pad. E.g. P521 would norm 130-132 char hex to 132-char bytes\n      if (typeof key !== 'string' || !lengths.includes(key.length))\n        throw new Error('invalid private key');\n      key = key.padStart(nByteLength * 2, '0');\n    }\n    let num: bigint;\n    try {\n      num =\n        typeof key === 'bigint'\n          ? key\n          : ut.bytesToNumberBE(ensureBytes('private key', key, nByteLength));\n    } catch (error) {\n      throw new Error(\n        'invalid private key, expected hex or ' + nByteLength + ' bytes, got ' + typeof key\n      );\n    }\n    if (wrapPrivateKey) num = mod(num, N); // disabled by default, enabled for BLS\n    ut.aInRange('private key', num, _1n, N); // num in range [1..N-1]\n    return num;\n  }\n\n  function assertPrjPoint(other: unknown) {\n    if (!(other instanceof Point)) throw new Error('ProjectivePoint expected');\n  }\n\n  // Memoized toAffine / validity check. They are heavy. Points are immutable.\n\n  // Converts Projective point to affine (x, y) coordinates.\n  // Can accept precomputed Z^-1 - for example, from invertBatch.\n  // (x, y, z) \u220B (x=x/z, y=y/z)\n  const toAffineMemo = memoized((p: Point, iz?: T): AffinePoint<T> => {\n    const { px: x, py: y, pz: z } = p;\n    // Fast-path for normalized points\n    if (Fp.eql(z, Fp.ONE)) return { x, y };\n    const is0 = p.is0();\n    // If invZ was 0, we return zero point. However we still want to execute\n    // all operations, so we replace invZ with a random number, 1.\n    if (iz == null) iz = is0 ? Fp.ONE : Fp.inv(z);\n    const ax = Fp.mul(x, iz);\n    const ay = Fp.mul(y, iz);\n    const zz = Fp.mul(z, iz);\n    if (is0) return { x: Fp.ZERO, y: Fp.ZERO };\n    if (!Fp.eql(zz, Fp.ONE)) throw new Error('invZ was invalid');\n    return { x: ax, y: ay };\n  });\n  // NOTE: on exception this will crash 'cached' and no value will be set.\n  // Otherwise true will be return\n  const assertValidMemo = memoized((p: Point) => {\n    if (p.is0()) {\n      // (0, 1, 0) aka ZERO is invalid in most contexts.\n      // In BLS, ZERO can be serialized, so we allow it.\n      // (0, 0, 0) is invalid representation of ZERO.\n      if (CURVE.allowInfinityPoint && !Fp.is0(p.py)) return;\n      throw new Error('bad point: ZERO');\n    }\n    // Some 3rd-party test vectors require different wording between here & `fromCompressedHex`\n    const { x, y } = p.toAffine();\n    // Check if x, y are valid field elements\n    if (!Fp.isValid(x) || !Fp.isValid(y)) throw new Error('bad point: x or y not FE');\n    const left = Fp.sqr(y); // y\u00B2\n    const right = weierstrassEquation(x); // x\u00B3 + ax + b\n    if (!Fp.eql(left, right)) throw new Error('bad point: equation left != right');\n    if (!p.isTorsionFree()) throw new Error('bad point: not in prime-order subgroup');\n    return true;\n  });\n\n  /**\n   * Projective Point works in 3d / projective (homogeneous) coordinates: (x, y, z) \u220B (x=x/z, y=y/z)\n   * Default Point works in 2d / affine coordinates: (x, y)\n   * We're doing calculations in projective, because its operations don't require costly inversion.\n   */\n  class Point implements ProjPointType<T> {\n    static readonly BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n    static readonly ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO);\n\n    constructor(\n      readonly px: T,\n      readonly py: T,\n      readonly pz: T\n    ) {\n      if (px == null || !Fp.isValid(px)) throw new Error('x required');\n      if (py == null || !Fp.isValid(py)) throw new Error('y required');\n      if (pz == null || !Fp.isValid(pz)) throw new Error('z required');\n      Object.freeze(this);\n    }\n\n    // Does not validate if the point is on-curve.\n    // Use fromHex instead, or call assertValidity() later.\n    static fromAffine(p: AffinePoint<T>): Point {\n      const { x, y } = p || {};\n      if (!p || !Fp.isValid(x) || !Fp.isValid(y)) throw new Error('invalid affine point');\n      if (p instanceof Point) throw new Error('projective point not allowed');\n      const is0 = (i: T) => Fp.eql(i, Fp.ZERO);\n      // fromAffine(x:0, y:0) would produce (x:0, y:0, z:1), but we need (x:0, y:1, z:0)\n      if (is0(x) && is0(y)) return Point.ZERO;\n      return new Point(x, y, Fp.ONE);\n    }\n\n    get x(): T {\n      return this.toAffine().x;\n    }\n    get y(): T {\n      return this.toAffine().y;\n    }\n\n    /**\n     * Takes a bunch of Projective Points but executes only one\n     * inversion on all of them. Inversion is very slow operation,\n     * so this improves performance massively.\n     * Optimization: converts a list of projective points to a list of identical points with Z=1.\n     */\n    static normalizeZ(points: Point[]): Point[] {\n      const toInv = Fp.invertBatch(points.map((p) => p.pz));\n      return points.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n    }\n\n    /**\n     * Converts hash string or Uint8Array to Point.\n     * @param hex short/long ECDSA hex\n     */\n    static fromHex(hex: Hex): Point {\n      const P = Point.fromAffine(fromBytes(ensureBytes('pointHex', hex)));\n      P.assertValidity();\n      return P;\n    }\n\n    // Multiplies generator point by privateKey.\n    static fromPrivateKey(privateKey: PrivKey) {\n      return Point.BASE.multiply(normPrivateKeyToScalar(privateKey));\n    }\n\n    // Multiscalar Multiplication\n    static msm(points: Point[], scalars: bigint[]): Point {\n      return pippenger(Point, Fn, points, scalars);\n    }\n\n    // \"Private method\", don't use it directly\n    _setWindowSize(windowSize: number) {\n      wnaf.setWindowSize(this, windowSize);\n    }\n\n    // A point on curve is valid if it conforms to equation.\n    assertValidity(): void {\n      assertValidMemo(this);\n    }\n\n    hasEvenY(): boolean {\n      const { y } = this.toAffine();\n      if (Fp.isOdd) return !Fp.isOdd(y);\n      throw new Error(\"Field doesn't support isOdd\");\n    }\n\n    /**\n     * Compare one point to another.\n     */\n    equals(other: Point): boolean {\n      assertPrjPoint(other);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      const { px: X2, py: Y2, pz: Z2 } = other;\n      const U1 = Fp.eql(Fp.mul(X1, Z2), Fp.mul(X2, Z1));\n      const U2 = Fp.eql(Fp.mul(Y1, Z2), Fp.mul(Y2, Z1));\n      return U1 && U2;\n    }\n\n    /**\n     * Flips point to one corresponding to (x, -y) in Affine coordinates.\n     */\n    negate(): Point {\n      return new Point(this.px, Fp.neg(this.py), this.pz);\n    }\n\n    // Renes-Costello-Batina exception-free doubling formula.\n    // There is 30% faster Jacobian formula, but it is not complete.\n    // https://eprint.iacr.org/2015/1060, algorithm 3\n    // Cost: 8M + 3S + 3*a + 2*b3 + 15add.\n    double() {\n      const { a, b } = CURVE;\n      const b3 = Fp.mul(b, _3n);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n      let t0 = Fp.mul(X1, X1); // step 1\n      let t1 = Fp.mul(Y1, Y1);\n      let t2 = Fp.mul(Z1, Z1);\n      let t3 = Fp.mul(X1, Y1);\n      t3 = Fp.add(t3, t3); // step 5\n      Z3 = Fp.mul(X1, Z1);\n      Z3 = Fp.add(Z3, Z3);\n      X3 = Fp.mul(a, Z3);\n      Y3 = Fp.mul(b3, t2);\n      Y3 = Fp.add(X3, Y3); // step 10\n      X3 = Fp.sub(t1, Y3);\n      Y3 = Fp.add(t1, Y3);\n      Y3 = Fp.mul(X3, Y3);\n      X3 = Fp.mul(t3, X3);\n      Z3 = Fp.mul(b3, Z3); // step 15\n      t2 = Fp.mul(a, t2);\n      t3 = Fp.sub(t0, t2);\n      t3 = Fp.mul(a, t3);\n      t3 = Fp.add(t3, Z3);\n      Z3 = Fp.add(t0, t0); // step 20\n      t0 = Fp.add(Z3, t0);\n      t0 = Fp.add(t0, t2);\n      t0 = Fp.mul(t0, t3);\n      Y3 = Fp.add(Y3, t0);\n      t2 = Fp.mul(Y1, Z1); // step 25\n      t2 = Fp.add(t2, t2);\n      t0 = Fp.mul(t2, t3);\n      X3 = Fp.sub(X3, t0);\n      Z3 = Fp.mul(t2, t1);\n      Z3 = Fp.add(Z3, Z3); // step 30\n      Z3 = Fp.add(Z3, Z3);\n      return new Point(X3, Y3, Z3);\n    }\n\n    // Renes-Costello-Batina exception-free addition formula.\n    // There is 30% faster Jacobian formula, but it is not complete.\n    // https://eprint.iacr.org/2015/1060, algorithm 1\n    // Cost: 12M + 0S + 3*a + 3*b3 + 23add.\n    add(other: Point): Point {\n      assertPrjPoint(other);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      const { px: X2, py: Y2, pz: Z2 } = other;\n      let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n      const a = CURVE.a;\n      const b3 = Fp.mul(CURVE.b, _3n);\n      let t0 = Fp.mul(X1, X2); // step 1\n      let t1 = Fp.mul(Y1, Y2);\n      let t2 = Fp.mul(Z1, Z2);\n      let t3 = Fp.add(X1, Y1);\n      let t4 = Fp.add(X2, Y2); // step 5\n      t3 = Fp.mul(t3, t4);\n      t4 = Fp.add(t0, t1);\n      t3 = Fp.sub(t3, t4);\n      t4 = Fp.add(X1, Z1);\n      let t5 = Fp.add(X2, Z2); // step 10\n      t4 = Fp.mul(t4, t5);\n      t5 = Fp.add(t0, t2);\n      t4 = Fp.sub(t4, t5);\n      t5 = Fp.add(Y1, Z1);\n      X3 = Fp.add(Y2, Z2); // step 15\n      t5 = Fp.mul(t5, X3);\n      X3 = Fp.add(t1, t2);\n      t5 = Fp.sub(t5, X3);\n      Z3 = Fp.mul(a, t4);\n      X3 = Fp.mul(b3, t2); // step 20\n      Z3 = Fp.add(X3, Z3);\n      X3 = Fp.sub(t1, Z3);\n      Z3 = Fp.add(t1, Z3);\n      Y3 = Fp.mul(X3, Z3);\n      t1 = Fp.add(t0, t0); // step 25\n      t1 = Fp.add(t1, t0);\n      t2 = Fp.mul(a, t2);\n      t4 = Fp.mul(b3, t4);\n      t1 = Fp.add(t1, t2);\n      t2 = Fp.sub(t0, t2); // step 30\n      t2 = Fp.mul(a, t2);\n      t4 = Fp.add(t4, t2);\n      t0 = Fp.mul(t1, t4);\n      Y3 = Fp.add(Y3, t0);\n      t0 = Fp.mul(t5, t4); // step 35\n      X3 = Fp.mul(t3, X3);\n      X3 = Fp.sub(X3, t0);\n      t0 = Fp.mul(t3, t1);\n      Z3 = Fp.mul(t5, Z3);\n      Z3 = Fp.add(Z3, t0); // step 40\n      return new Point(X3, Y3, Z3);\n    }\n\n    subtract(other: Point) {\n      return this.add(other.negate());\n    }\n\n    is0() {\n      return this.equals(Point.ZERO);\n    }\n    private wNAF(n: bigint): { p: Point; f: Point } {\n      return wnaf.wNAFCached(this, n, Point.normalizeZ);\n    }\n\n    /**\n     * Non-constant-time multiplication. Uses double-and-add algorithm.\n     * It's faster, but should only be used when you don't care about\n     * an exposed private key e.g. sig verification, which works over *public* keys.\n     */\n    multiplyUnsafe(sc: bigint): Point {\n      const { endo, n: N } = CURVE;\n      ut.aInRange('scalar', sc, _0n, N);\n      const I = Point.ZERO;\n      if (sc === _0n) return I;\n      if (this.is0() || sc === _1n) return this;\n\n      // Case a: no endomorphism. Case b: has precomputes.\n      if (!endo || wnaf.hasPrecomputes(this))\n        return wnaf.wNAFCachedUnsafe(this, sc, Point.normalizeZ);\n\n      // Case c: endomorphism\n      let { k1neg, k1, k2neg, k2 } = endo.splitScalar(sc);\n      let k1p = I;\n      let k2p = I;\n      let d: Point = this;\n      while (k1 > _0n || k2 > _0n) {\n        if (k1 & _1n) k1p = k1p.add(d);\n        if (k2 & _1n) k2p = k2p.add(d);\n        d = d.double();\n        k1 >>= _1n;\n        k2 >>= _1n;\n      }\n      if (k1neg) k1p = k1p.negate();\n      if (k2neg) k2p = k2p.negate();\n      k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n      return k1p.add(k2p);\n    }\n\n    /**\n     * Constant time multiplication.\n     * Uses wNAF method. Windowed method may be 10% faster,\n     * but takes 2x longer to generate and consumes 2x memory.\n     * Uses precomputes when available.\n     * Uses endomorphism for Koblitz curves.\n     * @param scalar by which the point would be multiplied\n     * @returns New point\n     */\n    multiply(scalar: bigint): Point {\n      const { endo, n: N } = CURVE;\n      ut.aInRange('scalar', scalar, _1n, N);\n      let point: Point, fake: Point; // Fake point is used to const-time mult\n      if (endo) {\n        const { k1neg, k1, k2neg, k2 } = endo.splitScalar(scalar);\n        let { p: k1p, f: f1p } = this.wNAF(k1);\n        let { p: k2p, f: f2p } = this.wNAF(k2);\n        k1p = wnaf.constTimeNegate(k1neg, k1p);\n        k2p = wnaf.constTimeNegate(k2neg, k2p);\n        k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n        point = k1p.add(k2p);\n        fake = f1p.add(f2p);\n      } else {\n        const { p, f } = this.wNAF(scalar);\n        point = p;\n        fake = f;\n      }\n      // Normalize `z` for both points, but return only real one\n      return Point.normalizeZ([point, fake])[0];\n    }\n\n    /**\n     * Efficiently calculate `aP + bQ`. Unsafe, can expose private key, if used incorrectly.\n     * Not using Strauss-Shamir trick: precomputation tables are faster.\n     * The trick could be useful if both P and Q are not G (not in our case).\n     * @returns non-zero affine point\n     */\n    multiplyAndAddUnsafe(Q: Point, a: bigint, b: bigint): Point | undefined {\n      const G = Point.BASE; // No Strauss-Shamir trick: we have 10% faster G precomputes\n      const mul = (\n        P: Point,\n        a: bigint // Select faster multiply() method\n      ) => (a === _0n || a === _1n || !P.equals(G) ? P.multiplyUnsafe(a) : P.multiply(a));\n      const sum = mul(this, a).add(mul(Q, b));\n      return sum.is0() ? undefined : sum;\n    }\n\n    // Converts Projective point to affine (x, y) coordinates.\n    // Can accept precomputed Z^-1 - for example, from invertBatch.\n    // (x, y, z) \u220B (x=x/z, y=y/z)\n    toAffine(iz?: T): AffinePoint<T> {\n      return toAffineMemo(this, iz);\n    }\n    isTorsionFree(): boolean {\n      const { h: cofactor, isTorsionFree } = CURVE;\n      if (cofactor === _1n) return true; // No subgroups, always torsion-free\n      if (isTorsionFree) return isTorsionFree(Point, this);\n      throw new Error('isTorsionFree() has not been declared for the elliptic curve');\n    }\n    clearCofactor(): Point {\n      const { h: cofactor, clearCofactor } = CURVE;\n      if (cofactor === _1n) return this; // Fast-path\n      if (clearCofactor) return clearCofactor(Point, this) as Point;\n      return this.multiplyUnsafe(CURVE.h);\n    }\n\n    toRawBytes(isCompressed = true): Uint8Array {\n      abool('isCompressed', isCompressed);\n      this.assertValidity();\n      return toBytes(Point, this, isCompressed);\n    }\n\n    toHex(isCompressed = true): string {\n      abool('isCompressed', isCompressed);\n      return ut.bytesToHex(this.toRawBytes(isCompressed));\n    }\n  }\n  const _bits = CURVE.nBitLength;\n  const wnaf = wNAF(Point, CURVE.endo ? Math.ceil(_bits / 2) : _bits);\n  // Validate if generator point is on curve\n  return {\n    CURVE,\n    ProjectivePoint: Point as ProjConstructor<T>,\n    normPrivateKeyToScalar,\n    weierstrassEquation,\n    isWithinCurveOrder,\n  };\n}\n\n// Instance\nexport interface SignatureType {\n  readonly r: bigint;\n  readonly s: bigint;\n  readonly recovery?: number;\n  assertValidity(): void;\n  addRecoveryBit(recovery: number): RecoveredSignatureType;\n  hasHighS(): boolean;\n  normalizeS(): SignatureType;\n  recoverPublicKey(msgHash: Hex): ProjPointType<bigint>;\n  toCompactRawBytes(): Uint8Array;\n  toCompactHex(): string;\n  // DER-encoded\n  toDERRawBytes(isCompressed?: boolean): Uint8Array;\n  toDERHex(isCompressed?: boolean): string;\n}\nexport type RecoveredSignatureType = SignatureType & {\n  readonly recovery: number;\n};\n// Static methods\nexport type SignatureConstructor = {\n  new (r: bigint, s: bigint): SignatureType;\n  fromCompact(hex: Hex): SignatureType;\n  fromDER(hex: Hex): SignatureType;\n};\ntype SignatureLike = { r: bigint; s: bigint };\n\nexport type PubKey = Hex | ProjPointType<bigint>;\n\nexport type CurveType = BasicWCurve<bigint> & {\n  hash: CHash; // CHash not FHash because we need outputLen for DRBG\n  hmac: HmacFnSync;\n  randomBytes: (bytesLength?: number) => Uint8Array;\n  lowS?: boolean;\n  bits2int?: (bytes: Uint8Array) => bigint;\n  bits2int_modN?: (bytes: Uint8Array) => bigint;\n};\n\nfunction validateOpts(\n  curve: CurveType\n): Readonly<CurveType & { nByteLength: number; nBitLength: number }> {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    opts,\n    {\n      hash: 'hash',\n      hmac: 'function',\n      randomBytes: 'function',\n    },\n    {\n      bits2int: 'function',\n      bits2int_modN: 'function',\n      lowS: 'boolean',\n    }\n  );\n  return Object.freeze({ lowS: true, ...opts } as const);\n}\n\nexport type CurveFn = {\n  CURVE: ReturnType<typeof validateOpts>;\n  getPublicKey: (privateKey: PrivKey, isCompressed?: boolean) => Uint8Array;\n  getSharedSecret: (privateA: PrivKey, publicB: Hex, isCompressed?: boolean) => Uint8Array;\n  sign: (msgHash: Hex, privKey: PrivKey, opts?: SignOpts) => RecoveredSignatureType;\n  verify: (signature: Hex | SignatureLike, msgHash: Hex, publicKey: Hex, opts?: VerOpts) => boolean;\n  ProjectivePoint: ProjConstructor<bigint>;\n  Signature: SignatureConstructor;\n  utils: {\n    normPrivateKeyToScalar: (key: PrivKey) => bigint;\n    isValidPrivateKey(privateKey: PrivKey): boolean;\n    randomPrivateKey: () => Uint8Array;\n    precompute: (windowSize?: number, point?: ProjPointType<bigint>) => ProjPointType<bigint>;\n  };\n};\n\n/**\n * Creates short weierstrass curve and ECDSA signature methods for it.\n * @example\n * import { Field } from '@noble/curves/abstract/modular';\n * // Before that, define BigInt-s: a, b, p, n, Gx, Gy\n * const curve = weierstrass({ a, b, Fp: Field(p), n, Gx, Gy, h: 1n })\n */\nexport function weierstrass(curveDef: CurveType): CurveFn {\n  const CURVE = validateOpts(curveDef) as ReturnType<typeof validateOpts>;\n  const { Fp, n: CURVE_ORDER } = CURVE;\n  const compressedLen = Fp.BYTES + 1; // e.g. 33 for 32\n  const uncompressedLen = 2 * Fp.BYTES + 1; // e.g. 65 for 32\n\n  function modN(a: bigint) {\n    return mod(a, CURVE_ORDER);\n  }\n  function invN(a: bigint) {\n    return invert(a, CURVE_ORDER);\n  }\n\n  const {\n    ProjectivePoint: Point,\n    normPrivateKeyToScalar,\n    weierstrassEquation,\n    isWithinCurveOrder,\n  } = weierstrassPoints({\n    ...CURVE,\n    toBytes(_c, point, isCompressed: boolean): Uint8Array {\n      const a = point.toAffine();\n      const x = Fp.toBytes(a.x);\n      const cat = ut.concatBytes;\n      abool('isCompressed', isCompressed);\n      if (isCompressed) {\n        return cat(Uint8Array.from([point.hasEvenY() ? 0x02 : 0x03]), x);\n      } else {\n        return cat(Uint8Array.from([0x04]), x, Fp.toBytes(a.y));\n      }\n    },\n    fromBytes(bytes: Uint8Array) {\n      const len = bytes.length;\n      const head = bytes[0];\n      const tail = bytes.subarray(1);\n      // this.assertValidity() is done inside of fromHex\n      if (len === compressedLen && (head === 0x02 || head === 0x03)) {\n        const x = ut.bytesToNumberBE(tail);\n        if (!ut.inRange(x, _1n, Fp.ORDER)) throw new Error('Point is not on curve');\n        const y2 = weierstrassEquation(x); // y\u00B2 = x\u00B3 + ax + b\n        let y: bigint;\n        try {\n          y = Fp.sqrt(y2); // y = y\u00B2 ^ (p+1)/4\n        } catch (sqrtError) {\n          const suffix = sqrtError instanceof Error ? ': ' + sqrtError.message : '';\n          throw new Error('Point is not on curve' + suffix);\n        }\n        const isYOdd = (y & _1n) === _1n;\n        // ECDSA\n        const isHeadOdd = (head & 1) === 1;\n        if (isHeadOdd !== isYOdd) y = Fp.neg(y);\n        return { x, y };\n      } else if (len === uncompressedLen && head === 0x04) {\n        const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n        const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n        return { x, y };\n      } else {\n        const cl = compressedLen;\n        const ul = uncompressedLen;\n        throw new Error(\n          'invalid Point, expected length of ' + cl + ', or uncompressed ' + ul + ', got ' + len\n        );\n      }\n    },\n  });\n  const numToNByteStr = (num: bigint): string =>\n    ut.bytesToHex(ut.numberToBytesBE(num, CURVE.nByteLength));\n\n  function isBiggerThanHalfOrder(number: bigint) {\n    const HALF = CURVE_ORDER >> _1n;\n    return number > HALF;\n  }\n\n  function normalizeS(s: bigint) {\n    return isBiggerThanHalfOrder(s) ? modN(-s) : s;\n  }\n  // slice bytes num\n  const slcNum = (b: Uint8Array, from: number, to: number) => ut.bytesToNumberBE(b.slice(from, to));\n\n  /**\n   * ECDSA signature with its (r, s) properties. Supports DER & compact representations.\n   */\n  class Signature implements SignatureType {\n    constructor(\n      readonly r: bigint,\n      readonly s: bigint,\n      readonly recovery?: number\n    ) {\n      this.assertValidity();\n    }\n\n    // pair (bytes of r, bytes of s)\n    static fromCompact(hex: Hex) {\n      const l = CURVE.nByteLength;\n      hex = ensureBytes('compactSignature', hex, l * 2);\n      return new Signature(slcNum(hex, 0, l), slcNum(hex, l, 2 * l));\n    }\n\n    // DER encoded ECDSA signature\n    // https://bitcoin.stackexchange.com/questions/57644/what-are-the-parts-of-a-bitcoin-transaction-input-script\n    static fromDER(hex: Hex) {\n      const { r, s } = DER.toSig(ensureBytes('DER', hex));\n      return new Signature(r, s);\n    }\n\n    assertValidity(): void {\n      ut.aInRange('r', this.r, _1n, CURVE_ORDER); // r in [1..N]\n      ut.aInRange('s', this.s, _1n, CURVE_ORDER); // s in [1..N]\n    }\n\n    addRecoveryBit(recovery: number): RecoveredSignature {\n      return new Signature(this.r, this.s, recovery) as RecoveredSignature;\n    }\n\n    recoverPublicKey(msgHash: Hex): typeof Point.BASE {\n      const { r, s, recovery: rec } = this;\n      const h = bits2int_modN(ensureBytes('msgHash', msgHash)); // Truncate hash\n      if (rec == null || ![0, 1, 2, 3].includes(rec)) throw new Error('recovery id invalid');\n      const radj = rec === 2 || rec === 3 ? r + CURVE.n : r;\n      if (radj >= Fp.ORDER) throw new Error('recovery id 2 or 3 invalid');\n      const prefix = (rec & 1) === 0 ? '02' : '03';\n      const R = Point.fromHex(prefix + numToNByteStr(radj));\n      const ir = invN(radj); // r^-1\n      const u1 = modN(-h * ir); // -hr^-1\n      const u2 = modN(s * ir); // sr^-1\n      const Q = Point.BASE.multiplyAndAddUnsafe(R, u1, u2); // (sr^-1)R-(hr^-1)G = -(hr^-1)G + (sr^-1)\n      if (!Q) throw new Error('point at infinify'); // unsafe is fine: no priv data leaked\n      Q.assertValidity();\n      return Q;\n    }\n\n    // Signatures should be low-s, to prevent malleability.\n    hasHighS(): boolean {\n      return isBiggerThanHalfOrder(this.s);\n    }\n\n    normalizeS() {\n      return this.hasHighS() ? new Signature(this.r, modN(-this.s), this.recovery) : this;\n    }\n\n    // DER-encoded\n    toDERRawBytes() {\n      return ut.hexToBytes(this.toDERHex());\n    }\n    toDERHex() {\n      return DER.hexFromSig({ r: this.r, s: this.s });\n    }\n\n    // padded bytes of r, then padded bytes of s\n    toCompactRawBytes() {\n      return ut.hexToBytes(this.toCompactHex());\n    }\n    toCompactHex() {\n      return numToNByteStr(this.r) + numToNByteStr(this.s);\n    }\n  }\n  type RecoveredSignature = Signature & { recovery: number };\n\n  const utils = {\n    isValidPrivateKey(privateKey: PrivKey) {\n      try {\n        normPrivateKeyToScalar(privateKey);\n        return true;\n      } catch (error) {\n        return false;\n      }\n    },\n    normPrivateKeyToScalar: normPrivateKeyToScalar,\n\n    /**\n     * Produces cryptographically secure private key from random of size\n     * (groupLen + ceil(groupLen / 2)) with modulo bias being negligible.\n     */\n    randomPrivateKey: (): Uint8Array => {\n      const length = getMinHashLength(CURVE.n);\n      return mapHashToField(CURVE.randomBytes(length), CURVE.n);\n    },\n\n    /**\n     * Creates precompute table for an arbitrary EC point. Makes point \"cached\".\n     * Allows to massively speed-up `point.multiply(scalar)`.\n     * @returns cached point\n     * @example\n     * const fast = utils.precompute(8, ProjectivePoint.fromHex(someonesPubKey));\n     * fast.multiply(privKey); // much faster ECDH now\n     */\n    precompute(windowSize = 8, point = Point.BASE): typeof Point.BASE {\n      point._setWindowSize(windowSize);\n      point.multiply(BigInt(3)); // 3 is arbitrary, just need any number here\n      return point;\n    },\n  };\n\n  /**\n   * Computes public key for a private key. Checks for validity of the private key.\n   * @param privateKey private key\n   * @param isCompressed whether to return compact (default), or full key\n   * @returns Public key, full when isCompressed=false; short when isCompressed=true\n   */\n  function getPublicKey(privateKey: PrivKey, isCompressed = true): Uint8Array {\n    return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed);\n  }\n\n  /**\n   * Quick and dirty check for item being public key. Does not validate hex, or being on-curve.\n   */\n  function isProbPub(item: PrivKey | PubKey): boolean {\n    const arr = ut.isBytes(item);\n    const str = typeof item === 'string';\n    const len = (arr || str) && (item as Hex).length;\n    if (arr) return len === compressedLen || len === uncompressedLen;\n    if (str) return len === 2 * compressedLen || len === 2 * uncompressedLen;\n    if (item instanceof Point) return true;\n    return false;\n  }\n\n  /**\n   * ECDH (Elliptic Curve Diffie Hellman).\n   * Computes shared public key from private key and public key.\n   * Checks: 1) private key validity 2) shared key is on-curve.\n   * Does NOT hash the result.\n   * @param privateA private key\n   * @param publicB different public key\n   * @param isCompressed whether to return compact (default), or full key\n   * @returns shared public key\n   */\n  function getSharedSecret(privateA: PrivKey, publicB: Hex, isCompressed = true): Uint8Array {\n    if (isProbPub(privateA)) throw new Error('first arg must be private key');\n    if (!isProbPub(publicB)) throw new Error('second arg must be public key');\n    const b = Point.fromHex(publicB); // check for being on-curve\n    return b.multiply(normPrivateKeyToScalar(privateA)).toRawBytes(isCompressed);\n  }\n\n  // RFC6979: ensure ECDSA msg is X bytes and < N. RFC suggests optional truncating via bits2octets.\n  // FIPS 186-4 4.6 suggests the leftmost min(nBitLen, outLen) bits, which matches bits2int.\n  // bits2int can produce res>N, we can do mod(res, N) since the bitLen is the same.\n  // int2octets can't be used; pads small msgs with 0: unacceptatble for trunc as per RFC vectors\n  const bits2int =\n    CURVE.bits2int ||\n    function (bytes: Uint8Array): bigint {\n      // Our custom check \"just in case\"\n      if (bytes.length > 8192) throw new Error('input is too large');\n      // For curves with nBitLength % 8 !== 0: bits2octets(bits2octets(m)) !== bits2octets(m)\n      // for some cases, since bytes.length * 8 is not actual bitLength.\n      const num = ut.bytesToNumberBE(bytes); // check for == u8 done here\n      const delta = bytes.length * 8 - CURVE.nBitLength; // truncate to nBitLength leftmost bits\n      return delta > 0 ? num >> BigInt(delta) : num;\n    };\n  const bits2int_modN =\n    CURVE.bits2int_modN ||\n    function (bytes: Uint8Array): bigint {\n      return modN(bits2int(bytes)); // can't use bytesToNumberBE here\n    };\n  // NOTE: pads output with zero as per spec\n  const ORDER_MASK = ut.bitMask(CURVE.nBitLength);\n  /**\n   * Converts to bytes. Checks if num in `[0..ORDER_MASK-1]` e.g.: `[0..2^256-1]`.\n   */\n  function int2octets(num: bigint): Uint8Array {\n    ut.aInRange('num < 2^' + CURVE.nBitLength, num, _0n, ORDER_MASK);\n    // works with order, can have different size than numToField!\n    return ut.numberToBytesBE(num, CURVE.nByteLength);\n  }\n\n  // Steps A, D of RFC6979 3.2\n  // Creates RFC6979 seed; converts msg/privKey to numbers.\n  // Used only in sign, not in verify.\n  // NOTE: we cannot assume here that msgHash has same amount of bytes as curve order,\n  // this will be invalid at least for P521. Also it can be bigger for P224 + SHA256\n  function prepSig(msgHash: Hex, privateKey: PrivKey, opts = defaultSigOpts) {\n    if (['recovered', 'canonical'].some((k) => k in opts))\n      throw new Error('sign() legacy options not supported');\n    const { hash, randomBytes } = CURVE;\n    let { lowS, prehash, extraEntropy: ent } = opts; // generates low-s sigs by default\n    if (lowS == null) lowS = true; // RFC6979 3.2: we skip step A, because we already provide hash\n    msgHash = ensureBytes('msgHash', msgHash);\n    validateSigVerOpts(opts);\n    if (prehash) msgHash = ensureBytes('prehashed msgHash', hash(msgHash));\n\n    // We can't later call bits2octets, since nested bits2int is broken for curves\n    // with nBitLength % 8 !== 0. Because of that, we unwrap it here as int2octets call.\n    // const bits2octets = (bits) => int2octets(bits2int_modN(bits))\n    const h1int = bits2int_modN(msgHash);\n    const d = normPrivateKeyToScalar(privateKey); // validate private key, convert to bigint\n    const seedArgs = [int2octets(d), int2octets(h1int)];\n    // extraEntropy. RFC6979 3.6: additional k' (optional).\n    if (ent != null && ent !== false) {\n      // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k')\n      const e = ent === true ? randomBytes(Fp.BYTES) : ent; // generate random bytes OR pass as-is\n      seedArgs.push(ensureBytes('extraEntropy', e)); // check for being bytes\n    }\n    const seed = ut.concatBytes(...seedArgs); // Step D of RFC6979 3.2\n    const m = h1int; // NOTE: no need to call bits2int second time here, it is inside truncateHash!\n    // Converts signature params into point w r/s, checks result for validity.\n    function k2sig(kBytes: Uint8Array): RecoveredSignature | undefined {\n      // RFC 6979 Section 3.2, step 3: k = bits2int(T)\n      const k = bits2int(kBytes); // Cannot use fields methods, since it is group element\n      if (!isWithinCurveOrder(k)) return; // Important: all mod() calls here must be done over N\n      const ik = invN(k); // k^-1 mod n\n      const q = Point.BASE.multiply(k).toAffine(); // q = Gk\n      const r = modN(q.x); // r = q.x mod n\n      if (r === _0n) return;\n      // Can use scalar blinding b^-1(bm + bdr) where b \u2208 [1,q\u22121] according to\n      // https://tches.iacr.org/index.php/TCHES/article/view/7337/6509. We've decided against it:\n      // a) dependency on CSPRNG b) 15% slowdown c) doesn't really help since bigints are not CT\n      const s = modN(ik * modN(m + r * d)); // Not using blinding here\n      if (s === _0n) return;\n      let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n); // recovery bit (2 or 3, when q.x > n)\n      let normS = s;\n      if (lowS && isBiggerThanHalfOrder(s)) {\n        normS = normalizeS(s); // if lowS was passed, ensure s is always\n        recovery ^= 1; // // in the bottom half of N\n      }\n      return new Signature(r, normS, recovery) as RecoveredSignature; // use normS, not s\n    }\n    return { seed, k2sig };\n  }\n  const defaultSigOpts: SignOpts = { lowS: CURVE.lowS, prehash: false };\n  const defaultVerOpts: VerOpts = { lowS: CURVE.lowS, prehash: false };\n\n  /**\n   * Signs message hash with a private key.\n   * ```\n   * sign(m, d, k) where\n   *   (x, y) = G \u00D7 k\n   *   r = x mod n\n   *   s = (m + dr)/k mod n\n   * ```\n   * @param msgHash NOT message. msg needs to be hashed to `msgHash`, or use `prehash`.\n   * @param privKey private key\n   * @param opts lowS for non-malleable sigs. extraEntropy for mixing randomness into k. prehash will hash first arg.\n   * @returns signature with recovery param\n   */\n  function sign(msgHash: Hex, privKey: PrivKey, opts = defaultSigOpts): RecoveredSignature {\n    const { seed, k2sig } = prepSig(msgHash, privKey, opts); // Steps A, D of RFC6979 3.2.\n    const C = CURVE;\n    const drbg = ut.createHmacDrbg<RecoveredSignature>(C.hash.outputLen, C.nByteLength, C.hmac);\n    return drbg(seed, k2sig); // Steps B, C, D, E, F, G\n  }\n\n  // Enable precomputes. Slows down first publicKey computation by 20ms.\n  Point.BASE._setWindowSize(8);\n  // utils.precompute(8, ProjectivePoint.BASE)\n\n  /**\n   * Verifies a signature against message hash and public key.\n   * Rejects lowS signatures by default: to override,\n   * specify option `{lowS: false}`. Implements section 4.1.4 from https://www.secg.org/sec1-v2.pdf:\n   *\n   * ```\n   * verify(r, s, h, P) where\n   *   U1 = hs^-1 mod n\n   *   U2 = rs^-1 mod n\n   *   R = U1\u22C5G - U2\u22C5P\n   *   mod(R.x, n) == r\n   * ```\n   */\n  function verify(\n    signature: Hex | SignatureLike,\n    msgHash: Hex,\n    publicKey: Hex,\n    opts = defaultVerOpts\n  ): boolean {\n    const sg = signature;\n    msgHash = ensureBytes('msgHash', msgHash);\n    publicKey = ensureBytes('publicKey', publicKey);\n    const { lowS, prehash, format } = opts;\n\n    // Verify opts, deduce signature format\n    validateSigVerOpts(opts);\n    if ('strict' in opts) throw new Error('options.strict was renamed to lowS');\n    if (format !== undefined && format !== 'compact' && format !== 'der')\n      throw new Error('format must be compact or der');\n    const isHex = typeof sg === 'string' || ut.isBytes(sg);\n    const isObj =\n      !isHex &&\n      !format &&\n      typeof sg === 'object' &&\n      sg !== null &&\n      typeof sg.r === 'bigint' &&\n      typeof sg.s === 'bigint';\n    if (!isHex && !isObj)\n      throw new Error('invalid signature, expected Uint8Array, hex string or Signature instance');\n\n    let _sig: Signature | undefined = undefined;\n    let P: ProjPointType<bigint>;\n    try {\n      if (isObj) _sig = new Signature(sg.r, sg.s);\n      if (isHex) {\n        // Signature can be represented in 2 ways: compact (2*nByteLength) & DER (variable-length).\n        // Since DER can also be 2*nByteLength bytes, we check for it first.\n        try {\n          if (format !== 'compact') _sig = Signature.fromDER(sg);\n        } catch (derError) {\n          if (!(derError instanceof DER.Err)) throw derError;\n        }\n        if (!_sig && format !== 'der') _sig = Signature.fromCompact(sg);\n      }\n      P = Point.fromHex(publicKey);\n    } catch (error) {\n      return false;\n    }\n    if (!_sig) return false;\n    if (lowS && _sig.hasHighS()) return false;\n    if (prehash) msgHash = CURVE.hash(msgHash);\n    const { r, s } = _sig;\n    const h = bits2int_modN(msgHash); // Cannot use fields methods, since it is group element\n    const is = invN(s); // s^-1\n    const u1 = modN(h * is); // u1 = hs^-1 mod n\n    const u2 = modN(r * is); // u2 = rs^-1 mod n\n    const R = Point.BASE.multiplyAndAddUnsafe(P, u1, u2)?.toAffine(); // R = u1\u22C5G + u2\u22C5P\n    if (!R) return false;\n    const v = modN(R.x);\n    return v === r;\n  }\n  return {\n    CURVE,\n    getPublicKey,\n    getSharedSecret,\n    sign,\n    verify,\n    ProjectivePoint: Point,\n    Signature,\n    utils,\n  };\n}\n\n/**\n * Implementation of the Shallue and van de Woestijne method for any weierstrass curve.\n * TODO: check if there is a way to merge this with uvRatio in Edwards; move to modular.\n * b = True and y = sqrt(u / v) if (u / v) is square in F, and\n * b = False and y = sqrt(Z * (u / v)) otherwise.\n * @param Fp\n * @param Z\n * @returns\n */\nexport function SWUFpSqrtRatio<T>(\n  Fp: IField<T>,\n  Z: T\n): (u: T, v: T) => { isValid: boolean; value: T } {\n  // Generic implementation\n  const q = Fp.ORDER;\n  let l = _0n;\n  for (let o = q - _1n; o % _2n === _0n; o /= _2n) l += _1n;\n  const c1 = l; // 1. c1, the largest integer such that 2^c1 divides q - 1.\n  // We need 2n ** c1 and 2n ** (c1-1). We can't use **; but we can use <<.\n  // 2n ** c1 == 2n << (c1-1)\n  const _2n_pow_c1_1 = _2n << (c1 - _1n - _1n);\n  const _2n_pow_c1 = _2n_pow_c1_1 * _2n;\n  const c2 = (q - _1n) / _2n_pow_c1; // 2. c2 = (q - 1) / (2^c1)  # Integer arithmetic\n  const c3 = (c2 - _1n) / _2n; // 3. c3 = (c2 - 1) / 2            # Integer arithmetic\n  const c4 = _2n_pow_c1 - _1n; // 4. c4 = 2^c1 - 1                # Integer arithmetic\n  const c5 = _2n_pow_c1_1; // 5. c5 = 2^(c1 - 1)                  # Integer arithmetic\n  const c6 = Fp.pow(Z, c2); // 6. c6 = Z^c2\n  const c7 = Fp.pow(Z, (c2 + _1n) / _2n); // 7. c7 = Z^((c2 + 1) / 2)\n  let sqrtRatio = (u: T, v: T): { isValid: boolean; value: T } => {\n    let tv1 = c6; // 1. tv1 = c6\n    let tv2 = Fp.pow(v, c4); // 2. tv2 = v^c4\n    let tv3 = Fp.sqr(tv2); // 3. tv3 = tv2^2\n    tv3 = Fp.mul(tv3, v); // 4. tv3 = tv3 * v\n    let tv5 = Fp.mul(u, tv3); // 5. tv5 = u * tv3\n    tv5 = Fp.pow(tv5, c3); // 6. tv5 = tv5^c3\n    tv5 = Fp.mul(tv5, tv2); // 7. tv5 = tv5 * tv2\n    tv2 = Fp.mul(tv5, v); // 8. tv2 = tv5 * v\n    tv3 = Fp.mul(tv5, u); // 9. tv3 = tv5 * u\n    let tv4 = Fp.mul(tv3, tv2); // 10. tv4 = tv3 * tv2\n    tv5 = Fp.pow(tv4, c5); // 11. tv5 = tv4^c5\n    let isQR = Fp.eql(tv5, Fp.ONE); // 12. isQR = tv5 == 1\n    tv2 = Fp.mul(tv3, c7); // 13. tv2 = tv3 * c7\n    tv5 = Fp.mul(tv4, tv1); // 14. tv5 = tv4 * tv1\n    tv3 = Fp.cmov(tv2, tv3, isQR); // 15. tv3 = CMOV(tv2, tv3, isQR)\n    tv4 = Fp.cmov(tv5, tv4, isQR); // 16. tv4 = CMOV(tv5, tv4, isQR)\n    // 17. for i in (c1, c1 - 1, ..., 2):\n    for (let i = c1; i > _1n; i--) {\n      let tv5 = i - _2n; // 18.    tv5 = i - 2\n      tv5 = _2n << (tv5 - _1n); // 19.    tv5 = 2^tv5\n      let tvv5 = Fp.pow(tv4, tv5); // 20.    tv5 = tv4^tv5\n      const e1 = Fp.eql(tvv5, Fp.ONE); // 21.    e1 = tv5 == 1\n      tv2 = Fp.mul(tv3, tv1); // 22.    tv2 = tv3 * tv1\n      tv1 = Fp.mul(tv1, tv1); // 23.    tv1 = tv1 * tv1\n      tvv5 = Fp.mul(tv4, tv1); // 24.    tv5 = tv4 * tv1\n      tv3 = Fp.cmov(tv2, tv3, e1); // 25.    tv3 = CMOV(tv2, tv3, e1)\n      tv4 = Fp.cmov(tvv5, tv4, e1); // 26.    tv4 = CMOV(tv5, tv4, e1)\n    }\n    return { isValid: isQR, value: tv3 };\n  };\n  if (Fp.ORDER % _4n === _3n) {\n    // sqrt_ratio_3mod4(u, v)\n    const c1 = (Fp.ORDER - _3n) / _4n; // 1. c1 = (q - 3) / 4     # Integer arithmetic\n    const c2 = Fp.sqrt(Fp.neg(Z)); // 2. c2 = sqrt(-Z)\n    sqrtRatio = (u: T, v: T) => {\n      let tv1 = Fp.sqr(v); // 1. tv1 = v^2\n      const tv2 = Fp.mul(u, v); // 2. tv2 = u * v\n      tv1 = Fp.mul(tv1, tv2); // 3. tv1 = tv1 * tv2\n      let y1 = Fp.pow(tv1, c1); // 4. y1 = tv1^c1\n      y1 = Fp.mul(y1, tv2); // 5. y1 = y1 * tv2\n      const y2 = Fp.mul(y1, c2); // 6. y2 = y1 * c2\n      const tv3 = Fp.mul(Fp.sqr(y1), v); // 7. tv3 = y1^2; 8. tv3 = tv3 * v\n      const isQR = Fp.eql(tv3, u); // 9. isQR = tv3 == u\n      let y = Fp.cmov(y2, y1, isQR); // 10. y = CMOV(y2, y1, isQR)\n      return { isValid: isQR, value: y }; // 11. return (isQR, y) isQR ? y : y*c2\n    };\n  }\n  // No curves uses that\n  // if (Fp.ORDER % _8n === _5n) // sqrt_ratio_5mod8\n  return sqrtRatio;\n}\n/**\n * Simplified Shallue-van de Woestijne-Ulas Method\n * https://www.rfc-editor.org/rfc/rfc9380#section-6.6.2\n */\nexport function mapToCurveSimpleSWU<T>(\n  Fp: IField<T>,\n  opts: {\n    A: T;\n    B: T;\n    Z: T;\n  }\n): (u: T) => { x: T; y: T } {\n  validateField(Fp);\n  if (!Fp.isValid(opts.A) || !Fp.isValid(opts.B) || !Fp.isValid(opts.Z))\n    throw new Error('mapToCurveSimpleSWU: invalid opts');\n  const sqrtRatio = SWUFpSqrtRatio(Fp, opts.Z);\n  if (!Fp.isOdd) throw new Error('Fp.isOdd is not implemented!');\n  // Input: u, an element of F.\n  // Output: (x, y), a point on E.\n  return (u: T): { x: T; y: T } => {\n    // prettier-ignore\n    let tv1, tv2, tv3, tv4, tv5, tv6, x, y;\n    tv1 = Fp.sqr(u); // 1.  tv1 = u^2\n    tv1 = Fp.mul(tv1, opts.Z); // 2.  tv1 = Z * tv1\n    tv2 = Fp.sqr(tv1); // 3.  tv2 = tv1^2\n    tv2 = Fp.add(tv2, tv1); // 4.  tv2 = tv2 + tv1\n    tv3 = Fp.add(tv2, Fp.ONE); // 5.  tv3 = tv2 + 1\n    tv3 = Fp.mul(tv3, opts.B); // 6.  tv3 = B * tv3\n    tv4 = Fp.cmov(opts.Z, Fp.neg(tv2), !Fp.eql(tv2, Fp.ZERO)); // 7.  tv4 = CMOV(Z, -tv2, tv2 != 0)\n    tv4 = Fp.mul(tv4, opts.A); // 8.  tv4 = A * tv4\n    tv2 = Fp.sqr(tv3); // 9.  tv2 = tv3^2\n    tv6 = Fp.sqr(tv4); // 10. tv6 = tv4^2\n    tv5 = Fp.mul(tv6, opts.A); // 11. tv5 = A * tv6\n    tv2 = Fp.add(tv2, tv5); // 12. tv2 = tv2 + tv5\n    tv2 = Fp.mul(tv2, tv3); // 13. tv2 = tv2 * tv3\n    tv6 = Fp.mul(tv6, tv4); // 14. tv6 = tv6 * tv4\n    tv5 = Fp.mul(tv6, opts.B); // 15. tv5 = B * tv6\n    tv2 = Fp.add(tv2, tv5); // 16. tv2 = tv2 + tv5\n    x = Fp.mul(tv1, tv3); // 17.   x = tv1 * tv3\n    const { isValid, value } = sqrtRatio(tv2, tv6); // 18. (is_gx1_square, y1) = sqrt_ratio(tv2, tv6)\n    y = Fp.mul(tv1, u); // 19.   y = tv1 * u  -> Z * u^3 * y1\n    y = Fp.mul(y, value); // 20.   y = y * y1\n    x = Fp.cmov(x, tv3, isValid); // 21.   x = CMOV(x, tv3, is_gx1_square)\n    y = Fp.cmov(y, value, isValid); // 22.   y = CMOV(y, y1, is_gx1_square)\n    const e1 = Fp.isOdd!(u) === Fp.isOdd!(y); // 23.  e1 = sgn0(u) == sgn0(y)\n    y = Fp.cmov(Fp.neg(y), y, e1); // 24.   y = CMOV(-y, y, e1)\n    x = Fp.div(x, tv4); // 25.   x = x / tv4\n    return { x, y };\n  };\n}\n", "/**\n * BLS (Barreto-Lynn-Scott) family of pairing-friendly curves.\n * BLS != BLS.\n * The file implements BLS (Boneh-Lynn-Shacham) signatures.\n * Used in both BLS (Barreto-Lynn-Scott) and BN (Barreto-Naehrig)\n * families of pairing-friendly curves.\n * Consists of two curves: G1 and G2:\n * - G1 is a subgroup of (x, y) E(Fq) over y\u00B2 = x\u00B3 + 4.\n * - G2 is a subgroup of ((x\u2081, x\u2082+i), (y\u2081, y\u2082+i)) E(Fq\u00B2) over y\u00B2 = x\u00B3 + 4(1 + i) where i is \u221A-1\n * - Gt, created by bilinear (ate) pairing e(G1, G2), consists of p-th roots of unity in\n *   Fq^k where k is embedding degree. Only degree 12 is currently supported, 24 is not.\n * Pairing is used to aggregate and verify signatures.\n * There are two main ways to use it:\n * 1. Fp for short private keys, Fp\u2082 for signatures\n * 2. Fp for short signatures, Fp\u2082 for private keys\n * @module\n **/\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// TODO: import { AffinePoint } from './curve.js';\nimport { type IField, getMinHashLength, mapHashToField } from './modular.js';\nimport { type CHash, type Hex, type PrivKey, ensureBytes, memoized } from './utils.js';\n// prettier-ignore\nimport {\n  type H2CPointConstructor, type htfBasicOpts,\n  type Opts as HTFOpts,\n  type MapToCurve,\n  createHasher\n} from './hash-to-curve.js';\nimport type { Fp12, Fp12Bls, Fp2, Fp2Bls, Fp6 } from './tower.js';\nimport {\n  type CurvePointsRes,\n  type CurvePointsType,\n  type ProjPointType,\n  weierstrassPoints,\n} from './weierstrass.js';\n\ntype Fp = bigint; // Can be different field?\n\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);\n\nexport type TwistType = 'multiplicative' | 'divisive';\n\nexport type ShortSignatureCoder<Fp> = {\n  fromHex(hex: Hex): ProjPointType<Fp>;\n  toRawBytes(point: ProjPointType<Fp>): Uint8Array;\n  toHex(point: ProjPointType<Fp>): string;\n};\n\nexport type SignatureCoder<Fp> = {\n  fromHex(hex: Hex): ProjPointType<Fp>;\n  toRawBytes(point: ProjPointType<Fp>): Uint8Array;\n  toHex(point: ProjPointType<Fp>): string;\n};\n\nexport type PostPrecomputePointAddFn = (\n  Rx: Fp2,\n  Ry: Fp2,\n  Rz: Fp2,\n  Qx: Fp2,\n  Qy: Fp2\n) => { Rx: Fp2; Ry: Fp2; Rz: Fp2 };\nexport type PostPrecomputeFn = (\n  Rx: Fp2,\n  Ry: Fp2,\n  Rz: Fp2,\n  Qx: Fp2,\n  Qy: Fp2,\n  pointAdd: PostPrecomputePointAddFn\n) => void;\nexport type CurveType = {\n  G1: Omit<CurvePointsType<Fp>, 'n'> & {\n    ShortSignature: SignatureCoder<Fp>;\n    mapToCurve: MapToCurve<Fp>;\n    htfDefaults: HTFOpts;\n  };\n  G2: Omit<CurvePointsType<Fp2>, 'n'> & {\n    Signature: SignatureCoder<Fp2>;\n    mapToCurve: MapToCurve<Fp2>;\n    htfDefaults: HTFOpts;\n  };\n  fields: {\n    Fp: IField<Fp>;\n    Fr: IField<bigint>;\n    Fp2: Fp2Bls;\n    Fp6: IField<Fp6>;\n    Fp12: Fp12Bls;\n  };\n  params: {\n    // NOTE: MSB is always ignored and used as marker for length,\n    // otherwise leading zeros will be lost.\n    // Can be different from 'X' (seed) param!\n    ateLoopSize: bigint;\n    xNegative: boolean;\n    r: bigint;\n    twistType: TwistType; // BLS12-381: Multiplicative, BN254: Divisive\n  };\n  htfDefaults: HTFOpts;\n  hash: CHash; // Because we need outputLen for DRBG\n  randomBytes: (bytesLength?: number) => Uint8Array;\n  // This is super ugly hack for untwist point in BN254 after miller loop\n  postPrecompute?: PostPrecomputeFn;\n};\n\ntype PrecomputeSingle = [Fp2, Fp2, Fp2][];\ntype Precompute = PrecomputeSingle[];\n\nexport type CurveFn = {\n  getPublicKey: (privateKey: PrivKey) => Uint8Array;\n  getPublicKeyForShortSignatures: (privateKey: PrivKey) => Uint8Array;\n  sign: {\n    (message: Hex, privateKey: PrivKey, htfOpts?: htfBasicOpts): Uint8Array;\n    (message: ProjPointType<Fp2>, privateKey: PrivKey, htfOpts?: htfBasicOpts): ProjPointType<Fp2>;\n  };\n  signShortSignature: {\n    (message: Hex, privateKey: PrivKey, htfOpts?: htfBasicOpts): Uint8Array;\n    (message: ProjPointType<Fp>, privateKey: PrivKey, htfOpts?: htfBasicOpts): ProjPointType<Fp>;\n  };\n  verify: (\n    signature: Hex | ProjPointType<Fp2>,\n    message: Hex | ProjPointType<Fp2>,\n    publicKey: Hex | ProjPointType<Fp>,\n    htfOpts?: htfBasicOpts\n  ) => boolean;\n  verifyShortSignature: (\n    signature: Hex | ProjPointType<Fp>,\n    message: Hex | ProjPointType<Fp>,\n    publicKey: Hex | ProjPointType<Fp2>,\n    htfOpts?: htfBasicOpts\n  ) => boolean;\n  verifyBatch: (\n    signature: Hex | ProjPointType<Fp2>,\n    messages: (Hex | ProjPointType<Fp2>)[],\n    publicKeys: (Hex | ProjPointType<Fp>)[],\n    htfOpts?: htfBasicOpts\n  ) => boolean;\n  aggregatePublicKeys: {\n    (publicKeys: Hex[]): Uint8Array;\n    (publicKeys: ProjPointType<Fp>[]): ProjPointType<Fp>;\n  };\n  aggregateSignatures: {\n    (signatures: Hex[]): Uint8Array;\n    (signatures: ProjPointType<Fp2>[]): ProjPointType<Fp2>;\n  };\n  aggregateShortSignatures: {\n    (signatures: Hex[]): Uint8Array;\n    (signatures: ProjPointType<Fp>[]): ProjPointType<Fp>;\n  };\n  millerLoopBatch: (pairs: [Precompute, Fp, Fp][]) => Fp12;\n  pairing: (P: ProjPointType<Fp>, Q: ProjPointType<Fp2>, withFinalExponent?: boolean) => Fp12;\n  pairingBatch: (\n    pairs: { g1: ProjPointType<Fp>; g2: ProjPointType<Fp2> }[],\n    withFinalExponent?: boolean\n  ) => Fp12;\n  G1: CurvePointsRes<Fp> & ReturnType<typeof createHasher<Fp>>;\n  G2: CurvePointsRes<Fp2> & ReturnType<typeof createHasher<Fp2>>;\n  Signature: SignatureCoder<Fp2>;\n  ShortSignature: ShortSignatureCoder<Fp>;\n  params: {\n    ateLoopSize: bigint;\n    r: bigint;\n    G1b: bigint;\n    G2b: Fp2;\n  };\n  fields: {\n    Fp: IField<Fp>;\n    Fp2: Fp2Bls;\n    Fp6: IField<Fp6>;\n    Fp12: Fp12Bls;\n    Fr: IField<bigint>;\n  };\n  utils: {\n    randomPrivateKey: () => Uint8Array;\n    calcPairingPrecomputes: (p: ProjPointType<Fp2>) => Precompute;\n  };\n};\n\n// Not used with BLS12-381 (no sequential `11` in X). Useful for other curves.\nfunction NAfDecomposition(a: bigint) {\n  const res = [];\n  // a>1 because of marker bit\n  for (; a > _1n; a >>= _1n) {\n    if ((a & _1n) === _0n) res.unshift(0);\n    else if ((a & _3n) === _3n) {\n      res.unshift(-1);\n      a += _1n;\n    } else res.unshift(1);\n  }\n  return res;\n}\n\nexport function bls(CURVE: CurveType): CurveFn {\n  // Fields are specific for curve, so for now we'll need to pass them with opts\n  const { Fp, Fr, Fp2, Fp6, Fp12 } = CURVE.fields;\n  const BLS_X_IS_NEGATIVE = CURVE.params.xNegative;\n  const TWIST: TwistType = CURVE.params.twistType;\n  // Point on G1 curve: (x, y)\n  const G1_ = weierstrassPoints({ n: Fr.ORDER, ...CURVE.G1 });\n  const G1 = Object.assign(\n    G1_,\n    createHasher(G1_.ProjectivePoint, CURVE.G1.mapToCurve, {\n      ...CURVE.htfDefaults,\n      ...CURVE.G1.htfDefaults,\n    })\n  );\n  // Point on G2 curve (complex numbers): (x\u2081, x\u2082+i), (y\u2081, y\u2082+i)\n  const G2_ = weierstrassPoints({ n: Fr.ORDER, ...CURVE.G2 });\n  const G2 = Object.assign(\n    G2_,\n    createHasher(G2_.ProjectivePoint as H2CPointConstructor<Fp2>, CURVE.G2.mapToCurve, {\n      ...CURVE.htfDefaults,\n      ...CURVE.G2.htfDefaults,\n    })\n  );\n  type G1 = typeof G1.ProjectivePoint.BASE;\n  type G2 = typeof G2.ProjectivePoint.BASE;\n\n  // Applies sparse multiplication as line function\n  let lineFunction: (c0: Fp2, c1: Fp2, c2: Fp2, f: Fp12, Px: Fp, Py: Fp) => Fp12;\n  if (TWIST === 'multiplicative') {\n    lineFunction = (c0: Fp2, c1: Fp2, c2: Fp2, f: Fp12, Px: Fp, Py: Fp) =>\n      Fp12.mul014(f, c0, Fp2.mul(c1, Px), Fp2.mul(c2, Py));\n  } else if (TWIST === 'divisive') {\n    // NOTE: it should be [c0, c1, c2], but we use different order here to reduce complexity of\n    // precompute calculations.\n    lineFunction = (c0: Fp2, c1: Fp2, c2: Fp2, f: Fp12, Px: Fp, Py: Fp) =>\n      Fp12.mul034(f, Fp2.mul(c2, Py), Fp2.mul(c1, Px), c0);\n  } else throw new Error('bls: unknown twist type');\n\n  const Fp2div2 = Fp2.div(Fp2.ONE, Fp2.mul(Fp2.ONE, _2n));\n  function pointDouble(ell: PrecomputeSingle, Rx: Fp2, Ry: Fp2, Rz: Fp2) {\n    const t0 = Fp2.sqr(Ry); // Ry\u00B2\n    const t1 = Fp2.sqr(Rz); // Rz\u00B2\n    const t2 = Fp2.mulByB(Fp2.mul(t1, _3n)); // 3 * T1 * B\n    const t3 = Fp2.mul(t2, _3n); // 3 * T2\n    const t4 = Fp2.sub(Fp2.sub(Fp2.sqr(Fp2.add(Ry, Rz)), t1), t0); // (Ry + Rz)\u00B2 - T1 - T0\n    const c0 = Fp2.sub(t2, t0); // T2 - T0 (i)\n    const c1 = Fp2.mul(Fp2.sqr(Rx), _3n); // 3 * Rx\u00B2\n    const c2 = Fp2.neg(t4); // -T4 (-h)\n\n    ell.push([c0, c1, c2]);\n\n    Rx = Fp2.mul(Fp2.mul(Fp2.mul(Fp2.sub(t0, t3), Rx), Ry), Fp2div2); // ((T0 - T3) * Rx * Ry) / 2\n    Ry = Fp2.sub(Fp2.sqr(Fp2.mul(Fp2.add(t0, t3), Fp2div2)), Fp2.mul(Fp2.sqr(t2), _3n)); // ((T0 + T3) / 2)\u00B2 - 3 * T2\u00B2\n    Rz = Fp2.mul(t0, t4); // T0 * T4\n    return { Rx, Ry, Rz };\n  }\n  function pointAdd(ell: PrecomputeSingle, Rx: Fp2, Ry: Fp2, Rz: Fp2, Qx: Fp2, Qy: Fp2) {\n    // Addition\n    const t0 = Fp2.sub(Ry, Fp2.mul(Qy, Rz)); // Ry - Qy * Rz\n    const t1 = Fp2.sub(Rx, Fp2.mul(Qx, Rz)); // Rx - Qx * Rz\n    const c0 = Fp2.sub(Fp2.mul(t0, Qx), Fp2.mul(t1, Qy)); // T0 * Qx - T1 * Qy == Ry * Qx  - Rx * Qy\n    const c1 = Fp2.neg(t0); // -T0 == Qy * Rz - Ry\n    const c2 = t1; // == Rx - Qx * Rz\n\n    ell.push([c0, c1, c2]);\n\n    const t2 = Fp2.sqr(t1); // T1\u00B2\n    const t3 = Fp2.mul(t2, t1); // T2 * T1\n    const t4 = Fp2.mul(t2, Rx); // T2 * Rx\n    const t5 = Fp2.add(Fp2.sub(t3, Fp2.mul(t4, _2n)), Fp2.mul(Fp2.sqr(t0), Rz)); // T3 - 2 * T4 + T0\u00B2 * Rz\n    Rx = Fp2.mul(t1, t5); // T1 * T5\n    Ry = Fp2.sub(Fp2.mul(Fp2.sub(t4, t5), t0), Fp2.mul(t3, Ry)); // (T4 - T5) * T0 - T3 * Ry\n    Rz = Fp2.mul(Rz, t3); // Rz * T3\n    return { Rx, Ry, Rz };\n  }\n\n  // Pre-compute coefficients for sparse multiplication\n  // Point addition and point double calculations is reused for coefficients\n  // pointAdd happens only if bit set, so wNAF is reasonable. Unfortunately we cannot combine\n  // add + double in windowed precomputes here, otherwise it would be single op (since X is static)\n  const ATE_NAF = NAfDecomposition(CURVE.params.ateLoopSize);\n\n  const calcPairingPrecomputes = memoized((point: G2) => {\n    const p = point;\n    const { x, y } = p.toAffine();\n    // prettier-ignore\n    const Qx = x, Qy = y, negQy = Fp2.neg(y);\n    // prettier-ignore\n    let Rx = Qx, Ry = Qy, Rz = Fp2.ONE;\n    const ell: Precompute = [];\n    for (const bit of ATE_NAF) {\n      const cur: PrecomputeSingle = [];\n      ({ Rx, Ry, Rz } = pointDouble(cur, Rx, Ry, Rz));\n      if (bit) ({ Rx, Ry, Rz } = pointAdd(cur, Rx, Ry, Rz, Qx, bit === -1 ? negQy : Qy));\n      ell.push(cur);\n    }\n    if (CURVE.postPrecompute) {\n      const last = ell[ell.length - 1];\n      CURVE.postPrecompute(Rx, Ry, Rz, Qx, Qy, pointAdd.bind(null, last));\n    }\n    return ell;\n  });\n\n  // Main pairing logic is here. Computes product of miller loops + final exponentiate\n  // Applies calculated precomputes\n  type MillerInput = [Precompute, Fp, Fp][];\n  function millerLoopBatch(pairs: MillerInput, withFinalExponent: boolean = false) {\n    let f12 = Fp12.ONE;\n    if (pairs.length) {\n      const ellLen = pairs[0][0].length;\n      for (let i = 0; i < ellLen; i++) {\n        f12 = Fp12.sqr(f12); // This allows us to do sqr only one time for all pairings\n        // NOTE: we apply multiple pairings in parallel here\n        for (const [ell, Px, Py] of pairs) {\n          for (const [c0, c1, c2] of ell[i]) f12 = lineFunction(c0, c1, c2, f12, Px, Py);\n        }\n      }\n    }\n    if (BLS_X_IS_NEGATIVE) f12 = Fp12.conjugate(f12);\n    return withFinalExponent ? Fp12.finalExponentiate(f12) : f12;\n  }\n  type PairingInput = { g1: G1; g2: G2 };\n  // Calculates product of multiple pairings\n  // This up to x2 faster than just `map(({g1, g2})=>pairing({g1,g2}))`\n  function pairingBatch(pairs: PairingInput[], withFinalExponent: boolean = true) {\n    const res: MillerInput = [];\n    // This cache precomputed toAffine for all points\n    G1.ProjectivePoint.normalizeZ(pairs.map(({ g1 }) => g1));\n    G2.ProjectivePoint.normalizeZ(pairs.map(({ g2 }) => g2));\n    for (const { g1, g2 } of pairs) {\n      if (g1.equals(G1.ProjectivePoint.ZERO) || g2.equals(G2.ProjectivePoint.ZERO))\n        throw new Error('pairing is not available for ZERO point');\n      // This uses toAffine inside\n      g1.assertValidity();\n      g2.assertValidity();\n      const Qa = g1.toAffine();\n      res.push([calcPairingPrecomputes(g2), Qa.x, Qa.y]);\n    }\n    return millerLoopBatch(res, withFinalExponent);\n  }\n  // Calculates bilinear pairing\n  function pairing(Q: G1, P: G2, withFinalExponent: boolean = true): Fp12 {\n    return pairingBatch([{ g1: Q, g2: P }], withFinalExponent);\n  }\n\n  const utils = {\n    randomPrivateKey: (): Uint8Array => {\n      const length = getMinHashLength(Fr.ORDER);\n      return mapHashToField(CURVE.randomBytes(length), Fr.ORDER);\n    },\n    calcPairingPrecomputes,\n  };\n\n  const { ShortSignature } = CURVE.G1;\n  const { Signature } = CURVE.G2;\n\n  type G1Hex = Hex | G1;\n  type G2Hex = Hex | G2;\n  function normP1(point: G1Hex): G1 {\n    return point instanceof G1.ProjectivePoint ? (point as G1) : G1.ProjectivePoint.fromHex(point);\n  }\n  function normP1Hash(point: G1Hex, htfOpts?: htfBasicOpts): G1 {\n    return point instanceof G1.ProjectivePoint\n      ? point\n      : (G1.hashToCurve(ensureBytes('point', point), htfOpts) as G1);\n  }\n  function normP2(point: G2Hex): G2 {\n    return point instanceof G2.ProjectivePoint ? point : Signature.fromHex(point);\n  }\n  function normP2Hash(point: G2Hex, htfOpts?: htfBasicOpts): G2 {\n    return point instanceof G2.ProjectivePoint\n      ? point\n      : (G2.hashToCurve(ensureBytes('point', point), htfOpts) as G2);\n  }\n\n  // Multiplies generator (G1) by private key.\n  // P = pk x G\n  function getPublicKey(privateKey: PrivKey): Uint8Array {\n    return G1.ProjectivePoint.fromPrivateKey(privateKey).toRawBytes(true);\n  }\n\n  // Multiplies generator (G2) by private key.\n  // P = pk x G\n  function getPublicKeyForShortSignatures(privateKey: PrivKey): Uint8Array {\n    return G2.ProjectivePoint.fromPrivateKey(privateKey).toRawBytes(true);\n  }\n\n  // Executes `hashToCurve` on the message and then multiplies the result by private key.\n  // S = pk x H(m)\n  function sign(message: Hex, privateKey: PrivKey, htfOpts?: htfBasicOpts): Uint8Array;\n  function sign(message: G2, privateKey: PrivKey, htfOpts?: htfBasicOpts): G2;\n  function sign(message: G2Hex, privateKey: PrivKey, htfOpts?: htfBasicOpts): Uint8Array | G2 {\n    const msgPoint = normP2Hash(message, htfOpts);\n    msgPoint.assertValidity();\n    const sigPoint = msgPoint.multiply(G1.normPrivateKeyToScalar(privateKey));\n    if (message instanceof G2.ProjectivePoint) return sigPoint;\n    return Signature.toRawBytes(sigPoint);\n  }\n\n  function signShortSignature(\n    message: Hex,\n    privateKey: PrivKey,\n    htfOpts?: htfBasicOpts\n  ): Uint8Array;\n  function signShortSignature(message: G1, privateKey: PrivKey, htfOpts?: htfBasicOpts): G1;\n  function signShortSignature(\n    message: G1Hex,\n    privateKey: PrivKey,\n    htfOpts?: htfBasicOpts\n  ): Uint8Array | G1 {\n    const msgPoint = normP1Hash(message, htfOpts);\n    msgPoint.assertValidity();\n    const sigPoint = msgPoint.multiply(G1.normPrivateKeyToScalar(privateKey));\n    if (message instanceof G1.ProjectivePoint) return sigPoint;\n    return ShortSignature.toRawBytes(sigPoint);\n  }\n\n  // Checks if pairing of public key & hash is equal to pairing of generator & signature.\n  // e(P, H(m)) == e(G, S)\n  function verify(\n    signature: G2Hex,\n    message: G2Hex,\n    publicKey: G1Hex,\n    htfOpts?: htfBasicOpts\n  ): boolean {\n    const P = normP1(publicKey);\n    const Hm = normP2Hash(message, htfOpts);\n    const G = G1.ProjectivePoint.BASE;\n    const S = normP2(signature);\n    const exp = pairingBatch([\n      { g1: P.negate(), g2: Hm }, // ePHM = pairing(P.negate(), Hm, false);\n      { g1: G, g2: S }, // eGS = pairing(G, S, false);\n    ]);\n    return Fp12.eql(exp, Fp12.ONE);\n  }\n\n  // Checks if pairing of public key & hash is equal to pairing of generator & signature.\n  // e(S, G) == e(H(m), P)\n  function verifyShortSignature(\n    signature: G1Hex,\n    message: G1Hex,\n    publicKey: G2Hex,\n    htfOpts?: htfBasicOpts\n  ): boolean {\n    const P = normP2(publicKey);\n    const Hm = normP1Hash(message, htfOpts);\n    const G = G2.ProjectivePoint.BASE;\n    const S = normP1(signature);\n    const exp = pairingBatch([\n      { g1: Hm, g2: P }, // eHmP = pairing(Hm, P, false);\n      { g1: S, g2: G.negate() }, // eSG = pairing(S, G.negate(), false);\n    ]);\n    return Fp12.eql(exp, Fp12.ONE);\n  }\n\n  function aNonEmpty(arr: any[]) {\n    if (!Array.isArray(arr) || arr.length === 0) throw new Error('expected non-empty array');\n  }\n\n  // Adds a bunch of public key points together.\n  // pk1 + pk2 + pk3 = pkA\n  function aggregatePublicKeys(publicKeys: Hex[]): Uint8Array;\n  function aggregatePublicKeys(publicKeys: G1[]): G1;\n  function aggregatePublicKeys(publicKeys: G1Hex[]): Uint8Array | G1 {\n    aNonEmpty(publicKeys);\n    const agg = publicKeys.map(normP1).reduce((sum, p) => sum.add(p), G1.ProjectivePoint.ZERO);\n    const aggAffine = agg; //.toAffine();\n    if (publicKeys[0] instanceof G1.ProjectivePoint) {\n      aggAffine.assertValidity();\n      return aggAffine;\n    }\n    // toRawBytes ensures point validity\n    return aggAffine.toRawBytes(true);\n  }\n\n  // Adds a bunch of signature points together.\n  function aggregateSignatures(signatures: Hex[]): Uint8Array;\n  function aggregateSignatures(signatures: G2[]): G2;\n  function aggregateSignatures(signatures: G2Hex[]): Uint8Array | G2 {\n    aNonEmpty(signatures);\n    const agg = signatures.map(normP2).reduce((sum, s) => sum.add(s), G2.ProjectivePoint.ZERO);\n    const aggAffine = agg; //.toAffine();\n    if (signatures[0] instanceof G2.ProjectivePoint) {\n      aggAffine.assertValidity();\n      return aggAffine;\n    }\n    return Signature.toRawBytes(aggAffine);\n  }\n\n  // Adds a bunch of signature points together.\n  function aggregateShortSignatures(signatures: Hex[]): Uint8Array;\n  function aggregateShortSignatures(signatures: G1[]): G1;\n  function aggregateShortSignatures(signatures: G1Hex[]): Uint8Array | G1 {\n    aNonEmpty(signatures);\n    const agg = signatures.map(normP1).reduce((sum, s) => sum.add(s), G1.ProjectivePoint.ZERO);\n    const aggAffine = agg; //.toAffine();\n    if (signatures[0] instanceof G1.ProjectivePoint) {\n      aggAffine.assertValidity();\n      return aggAffine;\n    }\n    return ShortSignature.toRawBytes(aggAffine);\n  }\n\n  // https://ethresear.ch/t/fast-verification-of-multiple-bls-signatures/5407\n  // e(G, S) = e(G, SUM(n)(Si)) = MUL(n)(e(G, Si))\n  function verifyBatch(\n    signature: G2Hex,\n    // TODO: maybe `{message: G2Hex, publicKey: G1Hex}[]` instead?\n    messages: G2Hex[],\n    publicKeys: G1Hex[],\n    htfOpts?: htfBasicOpts\n  ): boolean {\n    aNonEmpty(messages);\n    if (publicKeys.length !== messages.length)\n      throw new Error('amount of public keys and messages should be equal');\n    const sig = normP2(signature);\n    const nMessages = messages.map((i) => normP2Hash(i, htfOpts));\n    const nPublicKeys = publicKeys.map(normP1);\n    // NOTE: this works only for exact same object\n    const messagePubKeyMap = new Map<G2, G1[]>();\n    for (let i = 0; i < nPublicKeys.length; i++) {\n      const pub = nPublicKeys[i];\n      const msg = nMessages[i];\n      let keys = messagePubKeyMap.get(msg);\n      if (keys === undefined) {\n        keys = [];\n        messagePubKeyMap.set(msg, keys);\n      }\n      keys.push(pub);\n    }\n    const paired = [];\n    try {\n      for (const [msg, keys] of messagePubKeyMap) {\n        const groupPublicKey = keys.reduce((acc, msg) => acc.add(msg));\n        paired.push({ g1: groupPublicKey, g2: msg });\n      }\n      paired.push({ g1: G1.ProjectivePoint.BASE.negate(), g2: sig });\n      return Fp12.eql(pairingBatch(paired), Fp12.ONE);\n    } catch {\n      return false;\n    }\n  }\n\n  G1.ProjectivePoint.BASE._setWindowSize(4);\n\n  return {\n    getPublicKey,\n    getPublicKeyForShortSignatures,\n    sign,\n    signShortSignature,\n    verify,\n    verifyBatch,\n    verifyShortSignature,\n    aggregatePublicKeys,\n    aggregateSignatures,\n    aggregateShortSignatures,\n    millerLoopBatch,\n    pairing,\n    pairingBatch,\n    G1,\n    G2,\n    Signature,\n    ShortSignature,\n    fields: {\n      Fr,\n      Fp,\n      Fp2,\n      Fp6,\n      Fp12,\n    },\n    params: {\n      ateLoopSize: CURVE.params.ateLoopSize,\n      r: CURVE.params.r,\n      G1b: CURVE.G1.b,\n      G2b: CURVE.G2.b,\n    },\n    utils,\n  };\n}\n", "/**\n * Towered extension fields.\n * Rather than implementing a massive 12th-degree extension directly, it is more efficient\n * to build it up from smaller extensions: a tower of extensions.\n *\n * For BLS12-381, the Fp12 field is implemented as a quadratic (degree two) extension,\n * on top of a cubic (degree three) extension, on top of a quadratic extension of Fp.\n *\n * For more info: \"Pairings for beginners\" by Costello, section 7.3.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport * as mod from './modular.js';\nimport { bitLen, bitMask, concatBytes, notImplemented } from './utils.js';\nimport type { ProjConstructor, ProjPointType } from './weierstrass.js';\n\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);\n\n// Fp\u2082 over complex plane\nexport type BigintTuple = [bigint, bigint];\nexport type Fp = bigint;\n// Finite extension field over irreducible polynominal.\n// Fp(u) / (u\u00B2 - \u03B2) where \u03B2 = -1\nexport type Fp2 = { c0: bigint; c1: bigint };\nexport type BigintSix = [bigint, bigint, bigint, bigint, bigint, bigint];\nexport type Fp6 = { c0: Fp2; c1: Fp2; c2: Fp2 };\nexport type Fp12 = { c0: Fp6; c1: Fp6 }; // Fp\u2081\u2082 = Fp\u2086\u00B2 => Fp\u2082\u00B3, Fp\u2086(w) / (w\u00B2 - \u03B3) where \u03B3 = v\n// prettier-ignore\nexport type BigintTwelve = [\n  bigint, bigint, bigint, bigint, bigint, bigint,\n  bigint, bigint, bigint, bigint, bigint, bigint\n];\n\nexport type Fp2Bls = mod.IField<Fp2> & {\n  reim: (num: Fp2) => { re: Fp; im: Fp };\n  mulByB: (num: Fp2) => Fp2;\n  frobeniusMap(num: Fp2, power: number): Fp2;\n  fromBigTuple(num: [bigint, bigint]): Fp2;\n};\n\nexport type Fp12Bls = mod.IField<Fp12> & {\n  frobeniusMap(num: Fp12, power: number): Fp12;\n  mul014(num: Fp12, o0: Fp2, o1: Fp2, o4: Fp2): Fp12;\n  mul034(num: Fp12, o0: Fp2, o3: Fp2, o4: Fp2): Fp12;\n  conjugate(num: Fp12): Fp12;\n  finalExponentiate(num: Fp12): Fp12;\n  fromBigTwelve(num: BigintTwelve): Fp12;\n};\n\nfunction calcFrobeniusCoefficients<T>(\n  Fp: mod.IField<T>,\n  nonResidue: T,\n  modulus: bigint,\n  degree: number,\n  num: number = 1,\n  divisor?: number\n) {\n  const _divisor = BigInt(divisor === undefined ? degree : divisor);\n  const towerModulus: any = modulus ** BigInt(degree);\n  const res: T[][] = [];\n  for (let i = 0; i < num; i++) {\n    const a = BigInt(i + 1);\n    const powers: T[] = [];\n    for (let j = 0, qPower = _1n; j < degree; j++) {\n      const power = ((a * qPower - a) / _divisor) % towerModulus;\n      powers.push(Fp.pow(nonResidue, power));\n      qPower *= modulus;\n    }\n    res.push(powers);\n  }\n  return res;\n}\n\n// This works same at least for bls12-381, bn254 and bls12-377\nexport function psiFrobenius(\n  Fp: mod.IField<Fp>,\n  Fp2: Fp2Bls,\n  base: Fp2\n): {\n  psi: (x: Fp2, y: Fp2) => [Fp2, Fp2];\n  psi2: (x: Fp2, y: Fp2) => [Fp2, Fp2];\n  G2psi: (c: ProjConstructor<Fp2>, P: ProjPointType<Fp2>) => ProjPointType<Fp2>;\n  G2psi2: (c: ProjConstructor<Fp2>, P: ProjPointType<Fp2>) => ProjPointType<Fp2>;\n  PSI_X: Fp2;\n  PSI_Y: Fp2;\n  PSI2_X: Fp2;\n  PSI2_Y: Fp2;\n} {\n  // \u03A8 endomorphism\n  const PSI_X = Fp2.pow(base, (Fp.ORDER - _1n) / _3n); // u^((p-1)/3)\n  const PSI_Y = Fp2.pow(base, (Fp.ORDER - _1n) / _2n); // u^((p-1)/2)\n  function psi(x: Fp2, y: Fp2): [Fp2, Fp2] {\n    // This x10 faster than previous version in bls12-381\n    const x2 = Fp2.mul(Fp2.frobeniusMap(x, 1), PSI_X);\n    const y2 = Fp2.mul(Fp2.frobeniusMap(y, 1), PSI_Y);\n    return [x2, y2];\n  }\n  // \u03A8\u00B2(P) endomorphism (psi2(x) = psi(psi(x)))\n  const PSI2_X = Fp2.pow(base, (Fp.ORDER ** _2n - _1n) / _3n); // u^((p^2 - 1)/3)\n  // This equals -1, which causes y to be Fp2.neg(y).\n  // But not sure if there are case when this is not true?\n  const PSI2_Y = Fp2.pow(base, (Fp.ORDER ** _2n - _1n) / _2n); // u^((p^2 - 1)/3)\n  if (!Fp2.eql(PSI2_Y, Fp2.neg(Fp2.ONE))) throw new Error('psiFrobenius: PSI2_Y!==-1');\n  function psi2(x: Fp2, y: Fp2): [Fp2, Fp2] {\n    return [Fp2.mul(x, PSI2_X), Fp2.neg(y)];\n  }\n  // Map points\n  const mapAffine =\n    <T>(fn: (x: T, y: T) => [T, T]) =>\n    (c: ProjConstructor<T>, P: ProjPointType<T>) => {\n      const affine = P.toAffine();\n      const p = fn(affine.x, affine.y);\n      return c.fromAffine({ x: p[0], y: p[1] });\n    };\n  const G2psi = mapAffine(psi);\n  const G2psi2 = mapAffine(psi2);\n  return { psi, psi2, G2psi, G2psi2, PSI_X, PSI_Y, PSI2_X, PSI2_Y };\n}\n\nexport type Tower12Opts = {\n  ORDER: bigint;\n  NONRESIDUE?: Fp;\n  // Fp2\n  FP2_NONRESIDUE: BigintTuple;\n  Fp2sqrt?: (num: Fp2) => Fp2;\n  Fp2mulByB: (num: Fp2) => Fp2;\n  // Fp12\n  Fp12cyclotomicSquare: (num: Fp12) => Fp12;\n  Fp12cyclotomicExp: (num: Fp12, n: bigint) => Fp12;\n  Fp12finalExponentiate: (num: Fp12) => Fp12;\n};\n\nexport function tower12(opts: Tower12Opts): {\n  Fp: Readonly<mod.IField<bigint> & Required<Pick<mod.IField<bigint>, 'isOdd'>>>;\n  Fp2: mod.IField<Fp2> & {\n    NONRESIDUE: Fp2;\n    fromBigTuple: (tuple: BigintTuple | bigint[]) => Fp2;\n    reim: (num: Fp2) => { re: bigint; im: bigint };\n    mulByNonresidue: (num: Fp2) => Fp2;\n    mulByB: (num: Fp2) => Fp2;\n    frobeniusMap(num: Fp2, power: number): Fp2;\n  };\n  Fp6: mod.IField<Fp6> & {\n    fromBigSix: (tuple: BigintSix) => Fp6;\n    mulByNonresidue: (num: Fp6) => Fp6;\n    frobeniusMap(num: Fp6, power: number): Fp6;\n    mul1(num: Fp6, b1: Fp2): Fp6;\n    mul01(num: Fp6, b0: Fp2, b1: Fp2): Fp6;\n    mulByFp2(lhs: Fp6, rhs: Fp2): Fp6;\n  };\n  Fp4Square: (a: Fp2, b: Fp2) => { first: Fp2; second: Fp2 };\n  Fp12: mod.IField<Fp12> & {\n    fromBigTwelve: (t: BigintTwelve) => Fp12;\n    frobeniusMap(num: Fp12, power: number): Fp12;\n    mul014(num: Fp12, o0: Fp2, o1: Fp2, o4: Fp2): Fp12;\n    mul034(num: Fp12, o0: Fp2, o3: Fp2, o4: Fp2): Fp12;\n    mulByFp2(lhs: Fp12, rhs: Fp2): Fp12;\n    conjugate(num: Fp12): Fp12;\n    finalExponentiate(num: Fp12): Fp12;\n    _cyclotomicSquare(num: Fp12): Fp12;\n    _cyclotomicExp(num: Fp12, n: bigint): Fp12;\n  };\n} {\n  const { ORDER } = opts;\n  // Fp\n  const Fp = mod.Field(ORDER);\n  const FpNONRESIDUE = Fp.create(opts.NONRESIDUE || BigInt(-1));\n  const FpLegendre = mod.FpLegendre(ORDER);\n  const Fpdiv2 = Fp.div(Fp.ONE, _2n); // 1/2\n\n  // Fp2\n  const FP2_FROBENIUS_COEFFICIENTS = calcFrobeniusCoefficients(Fp, FpNONRESIDUE, Fp.ORDER, 2)[0];\n  const Fp2Add = ({ c0, c1 }: Fp2, { c0: r0, c1: r1 }: Fp2) => ({\n    c0: Fp.add(c0, r0),\n    c1: Fp.add(c1, r1),\n  });\n  const Fp2Subtract = ({ c0, c1 }: Fp2, { c0: r0, c1: r1 }: Fp2) => ({\n    c0: Fp.sub(c0, r0),\n    c1: Fp.sub(c1, r1),\n  });\n  const Fp2Multiply = ({ c0, c1 }: Fp2, rhs: Fp2) => {\n    if (typeof rhs === 'bigint') return { c0: Fp.mul(c0, rhs), c1: Fp.mul(c1, rhs) };\n    // (a+bi)(c+di) = (ac\u2212bd) + (ad+bc)i\n    const { c0: r0, c1: r1 } = rhs;\n    let t1 = Fp.mul(c0, r0); // c0 * o0\n    let t2 = Fp.mul(c1, r1); // c1 * o1\n    // (T1 - T2) + ((c0 + c1) * (r0 + r1) - (T1 + T2))*i\n    const o0 = Fp.sub(t1, t2);\n    const o1 = Fp.sub(Fp.mul(Fp.add(c0, c1), Fp.add(r0, r1)), Fp.add(t1, t2));\n    return { c0: o0, c1: o1 };\n  };\n  const Fp2Square = ({ c0, c1 }: Fp2) => {\n    const a = Fp.add(c0, c1);\n    const b = Fp.sub(c0, c1);\n    const c = Fp.add(c0, c0);\n    return { c0: Fp.mul(a, b), c1: Fp.mul(c, c1) };\n  };\n  type Fp2Utils = {\n    NONRESIDUE: Fp2;\n    fromBigTuple: (tuple: BigintTuple | bigint[]) => Fp2;\n    reim: (num: Fp2) => { re: bigint; im: bigint };\n    mulByNonresidue: (num: Fp2) => Fp2;\n    mulByB: (num: Fp2) => Fp2;\n    frobeniusMap(num: Fp2, power: number): Fp2;\n  };\n  const Fp2fromBigTuple = (tuple: BigintTuple | bigint[]) => {\n    if (tuple.length !== 2) throw new Error('invalid tuple');\n    const fps = tuple.map((n) => Fp.create(n)) as [Fp, Fp];\n    return { c0: fps[0], c1: fps[1] };\n  };\n\n  const FP2_ORDER = ORDER * ORDER;\n  const Fp2Nonresidue = Fp2fromBigTuple(opts.FP2_NONRESIDUE);\n  const Fp2: mod.IField<Fp2> & Fp2Utils = {\n    ORDER: FP2_ORDER,\n    isLE: Fp.isLE,\n    NONRESIDUE: Fp2Nonresidue,\n    BITS: bitLen(FP2_ORDER),\n    BYTES: Math.ceil(bitLen(FP2_ORDER) / 8),\n    MASK: bitMask(bitLen(FP2_ORDER)),\n    ZERO: { c0: Fp.ZERO, c1: Fp.ZERO },\n    ONE: { c0: Fp.ONE, c1: Fp.ZERO },\n    create: (num) => num,\n    isValid: ({ c0, c1 }) => typeof c0 === 'bigint' && typeof c1 === 'bigint',\n    is0: ({ c0, c1 }) => Fp.is0(c0) && Fp.is0(c1),\n    eql: ({ c0, c1 }: Fp2, { c0: r0, c1: r1 }: Fp2) => Fp.eql(c0, r0) && Fp.eql(c1, r1),\n    neg: ({ c0, c1 }) => ({ c0: Fp.neg(c0), c1: Fp.neg(c1) }),\n    pow: (num, power) => mod.FpPow(Fp2, num, power),\n    invertBatch: (nums) => mod.FpInvertBatch(Fp2, nums),\n    // Normalized\n    add: Fp2Add,\n    sub: Fp2Subtract,\n    mul: Fp2Multiply,\n    sqr: Fp2Square,\n    // NonNormalized stuff\n    addN: Fp2Add,\n    subN: Fp2Subtract,\n    mulN: Fp2Multiply,\n    sqrN: Fp2Square,\n    // Why inversion for bigint inside Fp instead of Fp2? it is even used in that context?\n    div: (lhs, rhs) =>\n      Fp2.mul(lhs, typeof rhs === 'bigint' ? Fp.inv(Fp.create(rhs)) : Fp2.inv(rhs)),\n    inv: ({ c0: a, c1: b }) => {\n      // We wish to find the multiplicative inverse of a nonzero\n      // element a + bu in Fp2. We leverage an identity\n      //\n      // (a + bu)(a - bu) = a\u00B2 + b\u00B2\n      //\n      // which holds because u\u00B2 = -1. This can be rewritten as\n      //\n      // (a + bu)(a - bu)/(a\u00B2 + b\u00B2) = 1\n      //\n      // because a\u00B2 + b\u00B2 = 0 has no nonzero solutions for (a, b).\n      // This gives that (a - bu)/(a\u00B2 + b\u00B2) is the inverse\n      // of (a + bu). Importantly, this can be computing using\n      // only a single inversion in Fp.\n      const factor = Fp.inv(Fp.create(a * a + b * b));\n      return { c0: Fp.mul(factor, Fp.create(a)), c1: Fp.mul(factor, Fp.create(-b)) };\n    },\n    sqrt: (num) => {\n      if (opts.Fp2sqrt) return opts.Fp2sqrt(num);\n      // This is generic for all quadratic extensions (Fp2)\n      const { c0, c1 } = num;\n      if (Fp.is0(c1)) {\n        // if c0 is quadratic residue\n        if (Fp.eql(FpLegendre(Fp, c0), Fp.ONE)) return Fp2.create({ c0: Fp.sqrt(c0), c1: Fp.ZERO });\n        else return Fp2.create({ c0: Fp.ZERO, c1: Fp.sqrt(Fp.div(c0, FpNONRESIDUE)) });\n      }\n      const a = Fp.sqrt(Fp.sub(Fp.sqr(c0), Fp.mul(Fp.sqr(c1), FpNONRESIDUE)));\n      let d = Fp.mul(Fp.add(a, c0), Fpdiv2);\n      const legendre = FpLegendre(Fp, d);\n      // -1, Quadratic non residue\n      if (!Fp.is0(legendre) && !Fp.eql(legendre, Fp.ONE)) d = Fp.sub(d, a);\n      const a0 = Fp.sqrt(d);\n      const candidateSqrt = Fp2.create({ c0: a0, c1: Fp.div(Fp.mul(c1, Fpdiv2), a0) });\n      if (!Fp2.eql(Fp2.sqr(candidateSqrt), num)) throw new Error('Cannot find square root');\n      // Normalize root: at this point candidateSqrt ** 2 = num, but also -candidateSqrt ** 2 = num\n      const x1 = candidateSqrt;\n      const x2 = Fp2.neg(x1);\n      const { re: re1, im: im1 } = Fp2.reim(x1);\n      const { re: re2, im: im2 } = Fp2.reim(x2);\n      if (im1 > im2 || (im1 === im2 && re1 > re2)) return x1;\n      return x2;\n    },\n    // Same as sgn0_m_eq_2 in RFC 9380\n    isOdd: (x: Fp2) => {\n      const { re: x0, im: x1 } = Fp2.reim(x);\n      const sign_0 = x0 % _2n;\n      const zero_0 = x0 === _0n;\n      const sign_1 = x1 % _2n;\n      return BigInt(sign_0 || (zero_0 && sign_1)) == _1n;\n    },\n    // Bytes util\n    fromBytes(b: Uint8Array): Fp2 {\n      if (b.length !== Fp2.BYTES) throw new Error('fromBytes invalid length=' + b.length);\n      return { c0: Fp.fromBytes(b.subarray(0, Fp.BYTES)), c1: Fp.fromBytes(b.subarray(Fp.BYTES)) };\n    },\n    toBytes: ({ c0, c1 }) => concatBytes(Fp.toBytes(c0), Fp.toBytes(c1)),\n    cmov: ({ c0, c1 }, { c0: r0, c1: r1 }, c) => ({\n      c0: Fp.cmov(c0, r0, c),\n      c1: Fp.cmov(c1, r1, c),\n    }),\n    reim: ({ c0, c1 }) => ({ re: c0, im: c1 }),\n    // multiply by u + 1\n    mulByNonresidue: ({ c0, c1 }) => Fp2.mul({ c0, c1 }, Fp2Nonresidue),\n    mulByB: opts.Fp2mulByB,\n    fromBigTuple: Fp2fromBigTuple,\n    frobeniusMap: ({ c0, c1 }, power: number): Fp2 => ({\n      c0,\n      c1: Fp.mul(c1, FP2_FROBENIUS_COEFFICIENTS[power % 2]),\n    }),\n  };\n  // Fp6\n  const Fp6Add = ({ c0, c1, c2 }: Fp6, { c0: r0, c1: r1, c2: r2 }: Fp6) => ({\n    c0: Fp2.add(c0, r0),\n    c1: Fp2.add(c1, r1),\n    c2: Fp2.add(c2, r2),\n  });\n  const Fp6Subtract = ({ c0, c1, c2 }: Fp6, { c0: r0, c1: r1, c2: r2 }: Fp6) => ({\n    c0: Fp2.sub(c0, r0),\n    c1: Fp2.sub(c1, r1),\n    c2: Fp2.sub(c2, r2),\n  });\n  const Fp6Multiply = ({ c0, c1, c2 }: Fp6, rhs: Fp6 | bigint) => {\n    if (typeof rhs === 'bigint') {\n      return {\n        c0: Fp2.mul(c0, rhs),\n        c1: Fp2.mul(c1, rhs),\n        c2: Fp2.mul(c2, rhs),\n      };\n    }\n    const { c0: r0, c1: r1, c2: r2 } = rhs;\n    const t0 = Fp2.mul(c0, r0); // c0 * o0\n    const t1 = Fp2.mul(c1, r1); // c1 * o1\n    const t2 = Fp2.mul(c2, r2); // c2 * o2\n    return {\n      // t0 + (c1 + c2) * (r1 * r2) - (T1 + T2) * (u + 1)\n      c0: Fp2.add(\n        t0,\n        Fp2.mulByNonresidue(Fp2.sub(Fp2.mul(Fp2.add(c1, c2), Fp2.add(r1, r2)), Fp2.add(t1, t2)))\n      ),\n      // (c0 + c1) * (r0 + r1) - (T0 + T1) + T2 * (u + 1)\n      c1: Fp2.add(\n        Fp2.sub(Fp2.mul(Fp2.add(c0, c1), Fp2.add(r0, r1)), Fp2.add(t0, t1)),\n        Fp2.mulByNonresidue(t2)\n      ),\n      // T1 + (c0 + c2) * (r0 + r2) - T0 + T2\n      c2: Fp2.sub(Fp2.add(t1, Fp2.mul(Fp2.add(c0, c2), Fp2.add(r0, r2))), Fp2.add(t0, t2)),\n    };\n  };\n  const Fp6Square = ({ c0, c1, c2 }: Fp6) => {\n    let t0 = Fp2.sqr(c0); // c0\u00B2\n    let t1 = Fp2.mul(Fp2.mul(c0, c1), _2n); // 2 * c0 * c1\n    let t3 = Fp2.mul(Fp2.mul(c1, c2), _2n); // 2 * c1 * c2\n    let t4 = Fp2.sqr(c2); // c2\u00B2\n    return {\n      c0: Fp2.add(Fp2.mulByNonresidue(t3), t0), // T3 * (u + 1) + T0\n      c1: Fp2.add(Fp2.mulByNonresidue(t4), t1), // T4 * (u + 1) + T1\n      // T1 + (c0 - c1 + c2)\u00B2 + T3 - T0 - T4\n      c2: Fp2.sub(Fp2.sub(Fp2.add(Fp2.add(t1, Fp2.sqr(Fp2.add(Fp2.sub(c0, c1), c2))), t3), t0), t4),\n    };\n  };\n  type Fp6Utils = {\n    fromBigSix: (tuple: BigintSix) => Fp6;\n    mulByNonresidue: (num: Fp6) => Fp6;\n    frobeniusMap(num: Fp6, power: number): Fp6;\n    mul1(num: Fp6, b1: Fp2): Fp6;\n    mul01(num: Fp6, b0: Fp2, b1: Fp2): Fp6;\n    mulByFp2(lhs: Fp6, rhs: Fp2): Fp6;\n  };\n\n  const [FP6_FROBENIUS_COEFFICIENTS_1, FP6_FROBENIUS_COEFFICIENTS_2] = calcFrobeniusCoefficients(\n    Fp2,\n    Fp2Nonresidue,\n    Fp.ORDER,\n    6,\n    2,\n    3\n  );\n\n  const Fp6: mod.IField<Fp6> & Fp6Utils = {\n    ORDER: Fp2.ORDER, // TODO: unused, but need to verify\n    isLE: Fp2.isLE,\n    BITS: 3 * Fp2.BITS,\n    BYTES: 3 * Fp2.BYTES,\n    MASK: bitMask(3 * Fp2.BITS),\n    ZERO: { c0: Fp2.ZERO, c1: Fp2.ZERO, c2: Fp2.ZERO },\n    ONE: { c0: Fp2.ONE, c1: Fp2.ZERO, c2: Fp2.ZERO },\n    create: (num) => num,\n    isValid: ({ c0, c1, c2 }) => Fp2.isValid(c0) && Fp2.isValid(c1) && Fp2.isValid(c2),\n    is0: ({ c0, c1, c2 }) => Fp2.is0(c0) && Fp2.is0(c1) && Fp2.is0(c2),\n    neg: ({ c0, c1, c2 }) => ({ c0: Fp2.neg(c0), c1: Fp2.neg(c1), c2: Fp2.neg(c2) }),\n    eql: ({ c0, c1, c2 }, { c0: r0, c1: r1, c2: r2 }) =>\n      Fp2.eql(c0, r0) && Fp2.eql(c1, r1) && Fp2.eql(c2, r2),\n    sqrt: notImplemented,\n    // Do we need division by bigint at all? Should be done via order:\n    div: (lhs, rhs) =>\n      Fp6.mul(lhs, typeof rhs === 'bigint' ? Fp.inv(Fp.create(rhs)) : Fp6.inv(rhs)),\n    pow: (num, power) => mod.FpPow(Fp6, num, power),\n    invertBatch: (nums) => mod.FpInvertBatch(Fp6, nums),\n    // Normalized\n    add: Fp6Add,\n    sub: Fp6Subtract,\n    mul: Fp6Multiply,\n    sqr: Fp6Square,\n    // NonNormalized stuff\n    addN: Fp6Add,\n    subN: Fp6Subtract,\n    mulN: Fp6Multiply,\n    sqrN: Fp6Square,\n\n    inv: ({ c0, c1, c2 }) => {\n      let t0 = Fp2.sub(Fp2.sqr(c0), Fp2.mulByNonresidue(Fp2.mul(c2, c1))); // c0\u00B2 - c2 * c1 * (u + 1)\n      let t1 = Fp2.sub(Fp2.mulByNonresidue(Fp2.sqr(c2)), Fp2.mul(c0, c1)); // c2\u00B2 * (u + 1) - c0 * c1\n      let t2 = Fp2.sub(Fp2.sqr(c1), Fp2.mul(c0, c2)); // c1\u00B2 - c0 * c2\n      // 1/(((c2 * T1 + c1 * T2) * v) + c0 * T0)\n      let t4 = Fp2.inv(\n        Fp2.add(Fp2.mulByNonresidue(Fp2.add(Fp2.mul(c2, t1), Fp2.mul(c1, t2))), Fp2.mul(c0, t0))\n      );\n      return { c0: Fp2.mul(t4, t0), c1: Fp2.mul(t4, t1), c2: Fp2.mul(t4, t2) };\n    },\n    // Bytes utils\n    fromBytes: (b: Uint8Array): Fp6 => {\n      if (b.length !== Fp6.BYTES) throw new Error('fromBytes invalid length=' + b.length);\n      return {\n        c0: Fp2.fromBytes(b.subarray(0, Fp2.BYTES)),\n        c1: Fp2.fromBytes(b.subarray(Fp2.BYTES, 2 * Fp2.BYTES)),\n        c2: Fp2.fromBytes(b.subarray(2 * Fp2.BYTES)),\n      };\n    },\n    toBytes: ({ c0, c1, c2 }): Uint8Array =>\n      concatBytes(Fp2.toBytes(c0), Fp2.toBytes(c1), Fp2.toBytes(c2)),\n    cmov: ({ c0, c1, c2 }: Fp6, { c0: r0, c1: r1, c2: r2 }: Fp6, c) => ({\n      c0: Fp2.cmov(c0, r0, c),\n      c1: Fp2.cmov(c1, r1, c),\n      c2: Fp2.cmov(c2, r2, c),\n    }),\n    fromBigSix: (t: BigintSix): Fp6 => {\n      if (!Array.isArray(t) || t.length !== 6) throw new Error('invalid Fp6 usage');\n      return {\n        c0: Fp2.fromBigTuple(t.slice(0, 2)),\n        c1: Fp2.fromBigTuple(t.slice(2, 4)),\n        c2: Fp2.fromBigTuple(t.slice(4, 6)),\n      };\n    },\n    frobeniusMap: ({ c0, c1, c2 }, power: number) => ({\n      c0: Fp2.frobeniusMap(c0, power),\n      c1: Fp2.mul(Fp2.frobeniusMap(c1, power), FP6_FROBENIUS_COEFFICIENTS_1[power % 6]),\n      c2: Fp2.mul(Fp2.frobeniusMap(c2, power), FP6_FROBENIUS_COEFFICIENTS_2[power % 6]),\n    }),\n    mulByFp2: ({ c0, c1, c2 }, rhs: Fp2): Fp6 => ({\n      c0: Fp2.mul(c0, rhs),\n      c1: Fp2.mul(c1, rhs),\n      c2: Fp2.mul(c2, rhs),\n    }),\n    mulByNonresidue: ({ c0, c1, c2 }) => ({ c0: Fp2.mulByNonresidue(c2), c1: c0, c2: c1 }),\n    // Sparse multiplication\n    mul1: ({ c0, c1, c2 }, b1: Fp2): Fp6 => ({\n      c0: Fp2.mulByNonresidue(Fp2.mul(c2, b1)),\n      c1: Fp2.mul(c0, b1),\n      c2: Fp2.mul(c1, b1),\n    }),\n    // Sparse multiplication\n    mul01({ c0, c1, c2 }, b0: Fp2, b1: Fp2): Fp6 {\n      let t0 = Fp2.mul(c0, b0); // c0 * b0\n      let t1 = Fp2.mul(c1, b1); // c1 * b1\n      return {\n        // ((c1 + c2) * b1 - T1) * (u + 1) + T0\n        c0: Fp2.add(Fp2.mulByNonresidue(Fp2.sub(Fp2.mul(Fp2.add(c1, c2), b1), t1)), t0),\n        // (b0 + b1) * (c0 + c1) - T0 - T1\n        c1: Fp2.sub(Fp2.sub(Fp2.mul(Fp2.add(b0, b1), Fp2.add(c0, c1)), t0), t1),\n        // (c0 + c2) * b0 - T0 + T1\n        c2: Fp2.add(Fp2.sub(Fp2.mul(Fp2.add(c0, c2), b0), t0), t1),\n      };\n    },\n  };\n\n  // Fp12\n  const FP12_FROBENIUS_COEFFICIENTS = calcFrobeniusCoefficients(\n    Fp2,\n    Fp2Nonresidue,\n    Fp.ORDER,\n    12,\n    1,\n    6\n  )[0];\n\n  const Fp12Add = ({ c0, c1 }: Fp12, { c0: r0, c1: r1 }: Fp12) => ({\n    c0: Fp6.add(c0, r0),\n    c1: Fp6.add(c1, r1),\n  });\n  const Fp12Subtract = ({ c0, c1 }: Fp12, { c0: r0, c1: r1 }: Fp12) => ({\n    c0: Fp6.sub(c0, r0),\n    c1: Fp6.sub(c1, r1),\n  });\n  const Fp12Multiply = ({ c0, c1 }: Fp12, rhs: Fp12 | bigint) => {\n    if (typeof rhs === 'bigint') return { c0: Fp6.mul(c0, rhs), c1: Fp6.mul(c1, rhs) };\n    let { c0: r0, c1: r1 } = rhs;\n    let t1 = Fp6.mul(c0, r0); // c0 * r0\n    let t2 = Fp6.mul(c1, r1); // c1 * r1\n    return {\n      c0: Fp6.add(t1, Fp6.mulByNonresidue(t2)), // T1 + T2 * v\n      // (c0 + c1) * (r0 + r1) - (T1 + T2)\n      c1: Fp6.sub(Fp6.mul(Fp6.add(c0, c1), Fp6.add(r0, r1)), Fp6.add(t1, t2)),\n    };\n  };\n  const Fp12Square = ({ c0, c1 }: Fp12) => {\n    let ab = Fp6.mul(c0, c1); // c0 * c1\n    return {\n      // (c1 * v + c0) * (c0 + c1) - AB - AB * v\n      c0: Fp6.sub(\n        Fp6.sub(Fp6.mul(Fp6.add(Fp6.mulByNonresidue(c1), c0), Fp6.add(c0, c1)), ab),\n        Fp6.mulByNonresidue(ab)\n      ),\n      c1: Fp6.add(ab, ab),\n    }; // AB + AB\n  };\n  function Fp4Square(a: Fp2, b: Fp2): { first: Fp2; second: Fp2 } {\n    const a2 = Fp2.sqr(a);\n    const b2 = Fp2.sqr(b);\n    return {\n      first: Fp2.add(Fp2.mulByNonresidue(b2), a2), // b\u00B2 * Nonresidue + a\u00B2\n      second: Fp2.sub(Fp2.sub(Fp2.sqr(Fp2.add(a, b)), a2), b2), // (a + b)\u00B2 - a\u00B2 - b\u00B2\n    };\n  }\n  type Fp12Utils = {\n    fromBigTwelve: (t: BigintTwelve) => Fp12;\n    frobeniusMap(num: Fp12, power: number): Fp12;\n    mul014(num: Fp12, o0: Fp2, o1: Fp2, o4: Fp2): Fp12;\n    mul034(num: Fp12, o0: Fp2, o3: Fp2, o4: Fp2): Fp12;\n    mulByFp2(lhs: Fp12, rhs: Fp2): Fp12;\n    conjugate(num: Fp12): Fp12;\n    finalExponentiate(num: Fp12): Fp12;\n    _cyclotomicSquare(num: Fp12): Fp12;\n    _cyclotomicExp(num: Fp12, n: bigint): Fp12;\n  };\n\n  const Fp12: mod.IField<Fp12> & Fp12Utils = {\n    ORDER: Fp2.ORDER, // TODO: unused, but need to verify\n    isLE: Fp6.isLE,\n    BITS: 2 * Fp2.BITS,\n    BYTES: 2 * Fp2.BYTES,\n    MASK: bitMask(2 * Fp2.BITS),\n    ZERO: { c0: Fp6.ZERO, c1: Fp6.ZERO },\n    ONE: { c0: Fp6.ONE, c1: Fp6.ZERO },\n    create: (num) => num,\n    isValid: ({ c0, c1 }) => Fp6.isValid(c0) && Fp6.isValid(c1),\n    is0: ({ c0, c1 }) => Fp6.is0(c0) && Fp6.is0(c1),\n    neg: ({ c0, c1 }) => ({ c0: Fp6.neg(c0), c1: Fp6.neg(c1) }),\n    eql: ({ c0, c1 }, { c0: r0, c1: r1 }) => Fp6.eql(c0, r0) && Fp6.eql(c1, r1),\n    sqrt: notImplemented,\n    inv: ({ c0, c1 }) => {\n      let t = Fp6.inv(Fp6.sub(Fp6.sqr(c0), Fp6.mulByNonresidue(Fp6.sqr(c1)))); // 1 / (c0\u00B2 - c1\u00B2 * v)\n      return { c0: Fp6.mul(c0, t), c1: Fp6.neg(Fp6.mul(c1, t)) }; // ((C0 * T) * T) + (-C1 * T) * w\n    },\n    div: (lhs, rhs) =>\n      Fp12.mul(lhs, typeof rhs === 'bigint' ? Fp.inv(Fp.create(rhs)) : Fp12.inv(rhs)),\n    pow: (num, power) => mod.FpPow(Fp12, num, power),\n    invertBatch: (nums) => mod.FpInvertBatch(Fp12, nums),\n    // Normalized\n    add: Fp12Add,\n    sub: Fp12Subtract,\n    mul: Fp12Multiply,\n    sqr: Fp12Square,\n    // NonNormalized stuff\n    addN: Fp12Add,\n    subN: Fp12Subtract,\n    mulN: Fp12Multiply,\n    sqrN: Fp12Square,\n\n    // Bytes utils\n    fromBytes: (b: Uint8Array): Fp12 => {\n      if (b.length !== Fp12.BYTES) throw new Error('fromBytes invalid length=' + b.length);\n      return {\n        c0: Fp6.fromBytes(b.subarray(0, Fp6.BYTES)),\n        c1: Fp6.fromBytes(b.subarray(Fp6.BYTES)),\n      };\n    },\n    toBytes: ({ c0, c1 }): Uint8Array => concatBytes(Fp6.toBytes(c0), Fp6.toBytes(c1)),\n    cmov: ({ c0, c1 }, { c0: r0, c1: r1 }, c) => ({\n      c0: Fp6.cmov(c0, r0, c),\n      c1: Fp6.cmov(c1, r1, c),\n    }),\n    // Utils\n    // toString() {\n    //   return '' + 'Fp12(' + this.c0 + this.c1 + '* w');\n    // },\n    // fromTuple(c: [Fp6, Fp6]) {\n    //   return new Fp12(...c);\n    // }\n    fromBigTwelve: (t: BigintTwelve): Fp12 => ({\n      c0: Fp6.fromBigSix(t.slice(0, 6) as BigintSix),\n      c1: Fp6.fromBigSix(t.slice(6, 12) as BigintSix),\n    }),\n    // Raises to q**i -th power\n    frobeniusMap(lhs, power: number) {\n      const { c0, c1, c2 } = Fp6.frobeniusMap(lhs.c1, power);\n      const coeff = FP12_FROBENIUS_COEFFICIENTS[power % 12];\n      return {\n        c0: Fp6.frobeniusMap(lhs.c0, power),\n        c1: Fp6.create({\n          c0: Fp2.mul(c0, coeff),\n          c1: Fp2.mul(c1, coeff),\n          c2: Fp2.mul(c2, coeff),\n        }),\n      };\n    },\n    mulByFp2: ({ c0, c1 }, rhs: Fp2): Fp12 => ({\n      c0: Fp6.mulByFp2(c0, rhs),\n      c1: Fp6.mulByFp2(c1, rhs),\n    }),\n    conjugate: ({ c0, c1 }): Fp12 => ({ c0, c1: Fp6.neg(c1) }),\n    // Sparse multiplication\n    mul014: ({ c0, c1 }, o0: Fp2, o1: Fp2, o4: Fp2) => {\n      let t0 = Fp6.mul01(c0, o0, o1);\n      let t1 = Fp6.mul1(c1, o4);\n      return {\n        c0: Fp6.add(Fp6.mulByNonresidue(t1), t0), // T1 * v + T0\n        // (c1 + c0) * [o0, o1+o4] - T0 - T1\n        c1: Fp6.sub(Fp6.sub(Fp6.mul01(Fp6.add(c1, c0), o0, Fp2.add(o1, o4)), t0), t1),\n      };\n    },\n    mul034: ({ c0, c1 }, o0: Fp2, o3: Fp2, o4: Fp2) => {\n      const a = Fp6.create({\n        c0: Fp2.mul(c0.c0, o0),\n        c1: Fp2.mul(c0.c1, o0),\n        c2: Fp2.mul(c0.c2, o0),\n      });\n      const b = Fp6.mul01(c1, o3, o4);\n      const e = Fp6.mul01(Fp6.add(c0, c1), Fp2.add(o0, o3), o4);\n      return {\n        c0: Fp6.add(Fp6.mulByNonresidue(b), a),\n        c1: Fp6.sub(e, Fp6.add(a, b)),\n      };\n    },\n\n    // A cyclotomic group is a subgroup of Fp^n defined by\n    //   G\u03A6\u2099(p) = {\u03B1 \u2208 Fp\u207F : \u03B1^\u03A6\u2099(p) = 1}\n    // The result of any pairing is in a cyclotomic subgroup\n    // https://eprint.iacr.org/2009/565.pdf\n    _cyclotomicSquare: opts.Fp12cyclotomicSquare,\n    _cyclotomicExp: opts.Fp12cyclotomicExp,\n    // https://eprint.iacr.org/2010/354.pdf\n    // https://eprint.iacr.org/2009/565.pdf\n    finalExponentiate: opts.Fp12finalExponentiate,\n  };\n\n  return { Fp, Fp2, Fp6, Fp4Square, Fp12 };\n}\n", "function number(n: number) {\n  if (!Number.isSafeInteger(n) || n < 0) throw new Error(`Wrong positive integer: ${n}`);\n}\n\nfunction bool(b: boolean) {\n  if (typeof b !== 'boolean') throw new Error(`Expected boolean, not ${b}`);\n}\n\nfunction bytes(b: Uint8Array | undefined, ...lengths: number[]) {\n  if (!(b instanceof Uint8Array)) throw new Error('Expected Uint8Array');\n  if (lengths.length > 0 && !lengths.includes(b.length))\n    throw new Error(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);\n}\n\ntype Hash = {\n  (data: Uint8Array): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create: any;\n};\nfunction hash(hash: Hash) {\n  if (typeof hash !== 'function' || typeof hash.create !== 'function')\n    throw new Error('Hash should be wrapped by utils.wrapConstructor');\n  number(hash.outputLen);\n  number(hash.blockLen);\n}\n\nfunction exists(instance: any, checkFinished = true) {\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}\nfunction output(out: any, instance: any) {\n  bytes(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\nexport { number, bool, bytes, hash, exists, output };\n\nconst assert = { number, bool, bytes, hash, exists, output };\nexport default assert;\n", "const U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n\n// We are not using BigUint64Array, because they are extremely slow as per 2022\nfunction fromBig(n: bigint, le = false) {\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) {\n  let Ah = new Uint32Array(lst.length);\n  let Al = new Uint32Array(lst.length);\n  for (let i = 0; i < lst.length; 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(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h: number, _l: number, s: number) => h >>> s;\nconst shrSL = (h: number, l: number, s: number) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h: number, l: number, s: number) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h: number, l: number, s: 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) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h: number, l: number, s: number) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h: number, l: number) => l;\nconst rotr32L = (h: number, _l: number) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h: number, l: number, s: number) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h: number, l: number, s: 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) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h: number, l: number, s: 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(Ah: number, Al: number, Bh: number, Bl: number) {\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) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number) =>\n  (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number) =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number) =>\n  (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: 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) =>\n  (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nexport {\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};\n// prettier-ignore\nconst u64 = {\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", "import { bytes, exists, number, output } from './_assert.js';\nimport { rotlBH, rotlBL, rotlSH, rotlSL, split } from './_u64.js';\nimport {\n  Hash,\n  u32,\n  Input,\n  toBytes,\n  wrapConstructor,\n  wrapXOFConstructorWithOpts,\n  HashXOF,\n} from './utils.js';\n\n// SHA3 (keccak) is based on a new design: basically, the internal state is bigger than output size.\n// It's called a sponge function.\n\n// Various per round constants calculations\nconst [SHA3_PI, SHA3_ROTL, _SHA3_IOTA]: [number[], number[], bigint[]] = [[], [], []];\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nconst _2n = /* @__PURE__ */ BigInt(2);\nconst _7n = /* @__PURE__ */ BigInt(7);\nconst _256n = /* @__PURE__ */ BigInt(256);\nconst _0x71n = /* @__PURE__ */ BigInt(0x71);\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n  // Pi\n  [x, y] = [y, (2 * x + 3 * y) % 5];\n  SHA3_PI.push(2 * (5 * y + x));\n  // Rotational\n  SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n  // Iota\n  let t = _0n;\n  for (let j = 0; j < 7; j++) {\n    R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n    if (R & _2n) t ^= _1n << ((_1n << /* @__PURE__ */ BigInt(j)) - _1n);\n  }\n  _SHA3_IOTA.push(t);\n}\nconst [SHA3_IOTA_H, SHA3_IOTA_L] = /* @__PURE__ */ split(_SHA3_IOTA, true);\n\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h: number, l: number, s: number) => (s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s));\nconst rotlL = (h: number, l: number, s: number) => (s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s));\n\n// Same as keccakf1600, but allows to skip some rounds\nexport function keccakP(s: Uint32Array, rounds: number = 24) {\n  const B = new Uint32Array(5 * 2);\n  // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n  for (let round = 24 - rounds; round < 24; round++) {\n    // Theta \u03B8\n    for (let x = 0; x < 10; x++) B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n    for (let x = 0; x < 10; x += 2) {\n      const idx1 = (x + 8) % 10;\n      const idx0 = (x + 2) % 10;\n      const B0 = B[idx0];\n      const B1 = B[idx0 + 1];\n      const Th = rotlH(B0, B1, 1) ^ B[idx1];\n      const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n      for (let y = 0; y < 50; y += 10) {\n        s[x + y] ^= Th;\n        s[x + y + 1] ^= Tl;\n      }\n    }\n    // Rho (\u03C1) and Pi (\u03C0)\n    let curH = s[2];\n    let curL = s[3];\n    for (let t = 0; t < 24; t++) {\n      const shift = SHA3_ROTL[t];\n      const Th = rotlH(curH, curL, shift);\n      const Tl = rotlL(curH, curL, shift);\n      const PI = SHA3_PI[t];\n      curH = s[PI];\n      curL = s[PI + 1];\n      s[PI] = Th;\n      s[PI + 1] = Tl;\n    }\n    // Chi (\u03C7)\n    for (let y = 0; y < 50; y += 10) {\n      for (let x = 0; x < 10; x++) B[x] = s[y + x];\n      for (let x = 0; x < 10; x++) s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n    }\n    // Iota (\u03B9)\n    s[0] ^= SHA3_IOTA_H[round];\n    s[1] ^= SHA3_IOTA_L[round];\n  }\n  B.fill(0);\n}\n\nexport class Keccak extends Hash<Keccak> implements HashXOF<Keccak> {\n  protected state: Uint8Array;\n  protected pos = 0;\n  protected posOut = 0;\n  protected finished = false;\n  protected state32: Uint32Array;\n  protected destroyed = false;\n  // NOTE: we accept arguments in bytes instead of bits here.\n  constructor(\n    public blockLen: number,\n    public suffix: number,\n    public outputLen: number,\n    protected enableXOF = false,\n    protected rounds: number = 24\n  ) {\n    super();\n    // Can be passed from user as dkLen\n    number(outputLen);\n    // 1600 = 5x5 matrix of 64bit.  1600 bits === 200 bytes\n    if (0 >= this.blockLen || this.blockLen >= 200)\n      throw new Error('Sha3 supports only keccak-f1600 function');\n    this.state = new Uint8Array(200);\n    this.state32 = u32(this.state);\n  }\n  protected keccak() {\n    keccakP(this.state32, this.rounds);\n    this.posOut = 0;\n    this.pos = 0;\n  }\n  update(data: Input) {\n    exists(this);\n    const { blockLen, state } = this;\n    data = toBytes(data);\n    const len = data.length;\n    for (let pos = 0; pos < len; ) {\n      const take = Math.min(blockLen - this.pos, len - pos);\n      for (let i = 0; i < take; i++) state[this.pos++] ^= data[pos++];\n      if (this.pos === blockLen) this.keccak();\n    }\n    return this;\n  }\n  protected finish() {\n    if (this.finished) return;\n    this.finished = true;\n    const { state, suffix, pos, blockLen } = this;\n    // Do the padding\n    state[pos] ^= suffix;\n    if ((suffix & 0x80) !== 0 && pos === blockLen - 1) this.keccak();\n    state[blockLen - 1] ^= 0x80;\n    this.keccak();\n  }\n  protected writeInto(out: Uint8Array): Uint8Array {\n    exists(this, false);\n    bytes(out);\n    this.finish();\n    const bufferOut = this.state;\n    const { blockLen } = this;\n    for (let pos = 0, len = out.length; pos < len; ) {\n      if (this.posOut >= blockLen) this.keccak();\n      const take = Math.min(blockLen - this.posOut, len - pos);\n      out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n      this.posOut += take;\n      pos += take;\n    }\n    return out;\n  }\n  xofInto(out: Uint8Array): Uint8Array {\n    // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n    if (!this.enableXOF) throw new Error('XOF is not possible for this instance');\n    return this.writeInto(out);\n  }\n  xof(bytes: number): Uint8Array {\n    number(bytes);\n    return this.xofInto(new Uint8Array(bytes));\n  }\n  digestInto(out: Uint8Array) {\n    output(out, this);\n    if (this.finished) throw new Error('digest() was already called');\n    this.writeInto(out);\n    this.destroy();\n    return out;\n  }\n  digest() {\n    return this.digestInto(new Uint8Array(this.outputLen));\n  }\n  destroy() {\n    this.destroyed = true;\n    this.state.fill(0);\n  }\n  _cloneInto(to?: Keccak): Keccak {\n    const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n    to ||= new Keccak(blockLen, suffix, outputLen, enableXOF, rounds);\n    to.state32.set(this.state32);\n    to.pos = this.pos;\n    to.posOut = this.posOut;\n    to.finished = this.finished;\n    to.rounds = rounds;\n    // Suffix can change in cSHAKE\n    to.suffix = suffix;\n    to.outputLen = outputLen;\n    to.enableXOF = enableXOF;\n    to.destroyed = this.destroyed;\n    return to;\n  }\n}\n\nconst gen = (suffix: number, blockLen: number, outputLen: number) =>\n  wrapConstructor(() => new Keccak(blockLen, suffix, outputLen));\n\nexport const sha3_224 = /* @__PURE__ */ gen(0x06, 144, 224 / 8);\n/**\n * SHA3-256 hash function\n * @param message - that would be hashed\n */\nexport const sha3_256 = /* @__PURE__ */ gen(0x06, 136, 256 / 8);\nexport const sha3_384 = /* @__PURE__ */ gen(0x06, 104, 384 / 8);\nexport const sha3_512 = /* @__PURE__ */ gen(0x06, 72, 512 / 8);\nexport const keccak_224 = /* @__PURE__ */ gen(0x01, 144, 224 / 8);\n/**\n * keccak-256 hash function. Different from SHA3-256.\n * @param message - that would be hashed\n */\nexport const keccak_256 = /* @__PURE__ */ gen(0x01, 136, 256 / 8);\nexport const keccak_384 = /* @__PURE__ */ gen(0x01, 104, 384 / 8);\nexport const keccak_512 = /* @__PURE__ */ gen(0x01, 72, 512 / 8);\n\nexport type ShakeOpts = { dkLen?: number };\n\nconst genShake = (suffix: number, blockLen: number, outputLen: number) =>\n  wrapXOFConstructorWithOpts<HashXOF<Keccak>, ShakeOpts>(\n    (opts: ShakeOpts = {}) =>\n      new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true)\n  );\n\nexport const shake128 = /* @__PURE__ */ genShake(0x1f, 168, 128 / 8);\nexport const shake256 = /* @__PURE__ */ genShake(0x1f, 136, 256 / 8);\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.bn254 = void 0;\nexports.mapToCurveSVDW = mapToCurveSVDW;\nconst utils_1 = require(\"@noble/hashes/utils\");\nconst bls_1 = require(\"@noble/curves/abstract/bls\");\nconst modular_1 = require(\"@noble/curves/abstract/modular\");\nconst utils_2 = require(\"@noble/curves/abstract/utils\");\nconst tower_1 = require(\"@noble/curves/abstract/tower\");\nconst mod = __importStar(require(\"@noble/curves/abstract/modular\"));\nconst sha3_1 = require(\"@noble/hashes/sha3\");\nconst utils_3 = require(\"@noble/curves/abstract/utils\");\n/*\nbn254, previously known as alt_bn_128, when it had 128-bit security.\nBarbulescu-Duquesne 2017 shown it's weaker: just about 100 bits,\nso the naming has been adjusted to its prime bit count:\nhttps://hal.science/hal-01534101/file/main.pdf\n\nThere are huge compatibility issues in the ecosystem:\n\n1. Different libraries call it in different ways: \"bn254\", \"bn256\", \"alt_bn128\", \"bn128\".\n2. libff has bn128, but it's a different curve with different G2:\n   https://github.com/scipr-lab/libff/blob/a44f482e18b8ac04d034c193bd9d7df7817ad73f/libff/algebra/curves/bn128/bn128_init.cpp#L166-L169\n3. halo2curves bn256 is also incompatible and returns different outputs\n\nThe goal of our implementation is to support \"Ethereum\" variant of the curve,\nbecause it at least has specs:\n\n- EIP196 (https://eips.ethereum.org/EIPS/eip-196) describes bn254 ECADD and ECMUL opcodes for EVM\n- EIP197 (https://eips.ethereum.org/EIPS/eip-197) describes bn254 pairings\n- It's hard: EIPs don't have proper tests. EIP-197 returns boolean output instead of Fp12\n- The existing implementations are bad. Some are deprecated:\n    - https://github.com/paritytech/bn (old version)\n    - https://github.com/ewasm/ethereum-bn128.rs (uses paritytech/bn)\n    - https://github.com/zcash-hackworks/bn\n    - https://github.com/arkworks-rs/curves/blob/master/bn254/src/lib.rs\n- Python implementations use different towers and produce different Fp12 outputs:\n    - https://github.com/ethereum/py_pairing\n    - https://github.com/ethereum/execution-specs/blob/master/src/ethereum/crypto/alt_bn128.py\n- Points are encoded differently in different implementations\n*/\n// prettier-ignore\nconst _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);\n// prettier-ignore\nconst _6n = BigInt(6);\n/*\nSeed (X): 4965661367192848881\nFr: (36x\u2074+36x\u00B3+18x\u00B2+6x+1)\nFp: (36x\u2074+36x\u00B3+24x\u00B2+6x+1)\n(E  / Fp ): Y\u00B2 = X\u00B3+3\n(Et / Fp\u00B2): Y\u00B2 = X\u00B3+3/(u+9) (D-type twist)\nAte loop size: 6x+2\n\nTowers:\n- Fp\u00B2[u] = Fp/u\u00B2+1\n- Fp\u2076[v] = Fp\u00B2/v\u00B3-9-u\n- Fp\u00B9\u00B2[w] = Fp\u2076/w\u00B2-v\n*/\nconst BN_X = BigInt('4965661367192848881');\nconst BN_X_LEN = (0, utils_2.bitLen)(BN_X);\nconst SIX_X_SQUARED = _6n * BN_X ** _2n;\n// Finite field over r. It's for convenience and is not used in the code below.\nconst Fr = (0, modular_1.Field)(BigInt('21888242871839275222246405745257275088548364400416034343698204186575808495617'));\n// Fp2.div(Fp2.mul(Fp2.ONE, _3n), Fp2.NONRESIDUE)\nconst Fp2B = {\n    c0: BigInt('19485874751759354771024239261021720505790618469301721065564631296452457478373'),\n    c1: BigInt('266929791119991161246907387137283842545076965332900288569378510910307636690'),\n};\nconst { Fp, Fp2, Fp6, Fp4Square, Fp12 } = (0, tower_1.tower12)({\n    ORDER: BigInt('21888242871839275222246405745257275088696311157297823662689037894645226208583'),\n    FP2_NONRESIDUE: [BigInt(9), _1n],\n    Fp2mulByB: (num) => Fp2.mul(num, Fp2B),\n    // The result of any pairing is in a cyclotomic subgroup\n    // https://eprint.iacr.org/2009/565.pdf\n    Fp12cyclotomicSquare: ({ c0, c1 }) => {\n        const { c0: c0c0, c1: c0c1, c2: c0c2 } = c0;\n        const { c0: c1c0, c1: c1c1, c2: c1c2 } = c1;\n        const { first: t3, second: t4 } = Fp4Square(c0c0, c1c1);\n        const { first: t5, second: t6 } = Fp4Square(c1c0, c0c2);\n        const { first: t7, second: t8 } = Fp4Square(c0c1, c1c2);\n        let t9 = Fp2.mulByNonresidue(t8); // T8 * (u + 1)\n        return {\n            c0: Fp6.create({\n                c0: Fp2.add(Fp2.mul(Fp2.sub(t3, c0c0), _2n), t3), // 2 * (T3 - c0c0)  + T3\n                c1: Fp2.add(Fp2.mul(Fp2.sub(t5, c0c1), _2n), t5), // 2 * (T5 - c0c1)  + T5\n                c2: Fp2.add(Fp2.mul(Fp2.sub(t7, c0c2), _2n), t7),\n            }), // 2 * (T7 - c0c2)  + T7\n            c1: Fp6.create({\n                c0: Fp2.add(Fp2.mul(Fp2.add(t9, c1c0), _2n), t9), // 2 * (T9 + c1c0) + T9\n                c1: Fp2.add(Fp2.mul(Fp2.add(t4, c1c1), _2n), t4), // 2 * (T4 + c1c1) + T4\n                c2: Fp2.add(Fp2.mul(Fp2.add(t6, c1c2), _2n), t6),\n            }),\n        }; // 2 * (T6 + c1c2) + T6\n    },\n    Fp12cyclotomicExp(num, n) {\n        let z = Fp12.ONE;\n        for (let i = BN_X_LEN - 1; i >= 0; i--) {\n            z = Fp12._cyclotomicSquare(z);\n            if ((0, utils_2.bitGet)(n, i))\n                z = Fp12.mul(z, num);\n        }\n        return z;\n    },\n    // https://eprint.iacr.org/2010/354.pdf\n    // https://eprint.iacr.org/2009/565.pdf\n    Fp12finalExponentiate: (num) => {\n        const powMinusX = (num) => Fp12.conjugate(Fp12._cyclotomicExp(num, BN_X));\n        const r0 = Fp12.mul(Fp12.conjugate(num), Fp12.inv(num));\n        const r = Fp12.mul(Fp12.frobeniusMap(r0, 2), r0);\n        const y1 = Fp12._cyclotomicSquare(powMinusX(r));\n        const y2 = Fp12.mul(Fp12._cyclotomicSquare(y1), y1);\n        const y4 = powMinusX(y2);\n        const y6 = powMinusX(Fp12._cyclotomicSquare(y4));\n        const y8 = Fp12.mul(Fp12.mul(Fp12.conjugate(y6), y4), Fp12.conjugate(y2));\n        const y9 = Fp12.mul(y8, y1);\n        return Fp12.mul(Fp12.frobeniusMap(Fp12.mul(Fp12.conjugate(r), y9), 3), Fp12.mul(Fp12.frobeniusMap(y8, 2), Fp12.mul(Fp12.frobeniusMap(y9, 1), Fp12.mul(Fp12.mul(y8, y4), r))));\n    },\n});\n// END OF CURVE FIELDS\nconst { G2psi, psi } = (0, tower_1.psiFrobenius)(Fp, Fp2, Fp2.NONRESIDUE);\n///////////////////////////////////////////////////////////////////////////////\n/// BEGIN DRAND MODIFICATIONS /////////////////////////////////////////////////\n///////////////////////////////////////////////////////////////////////////////\nfunction SVDWFpIsSquare(Fp) {\n    // Compute the Legendre symbol to determine if `u` is a quadratic residue\n    return (u) => {\n        const x = Fp.pow(u, (Fp.ORDER - 1n) / 2n);\n        let legendre;\n        if (Fp.eql(x, Fp.neg(Fp.ONE))) {\n            legendre = -1n;\n        }\n        else if (Fp.eql(x, Fp.ZERO)) {\n            legendre = 0n;\n        }\n        else if (Fp.eql(x, Fp.ONE)) {\n            legendre = 1n;\n        }\n        else {\n            throw new Error('Legendre failed');\n        }\n        return legendre === 1n;\n    };\n}\n/**\n * Shallue-van de Woestijne (SVDW) map-to-curve (\"straight-line\" implementation)\n * https://datatracker.ietf.org/doc/html/rfc9380/#appendix-F.1\n */\nfunction mapToCurveSVDW(Fp, opts) {\n    mod.validateField(Fp);\n    if (!Fp.isValid(opts.A) || !Fp.isValid(opts.B) || !Fp.isValid(opts.Z))\n        throw new Error('mapToCurveSimpleSVDW: invalid opts');\n    const isSquare = SVDWFpIsSquare(Fp);\n    if (!Fp.isOdd)\n        throw new Error('Fp.isOdd is not implemented!');\n    // g(x) is the short Weierstrass equation of the curve g(x) = x^3 + A*x + B\n    const g = (x) => Fp.add(Fp.add(Fp.mul(Fp.mul(x, x), x), Fp.mul(opts.A, x)), opts.B);\n    const two = Fp.add(Fp.ONE, Fp.ONE);\n    const three = Fp.add(two, Fp.ONE);\n    const four = Fp.add(three, Fp.ONE);\n    // C1 = g(Z) where g(x) = x^3 + A*x + B\n    const c1 = g(opts.Z);\n    // C2 = -Z / 2\n    const c2 = Fp.mul(Fp.neg(opts.Z), Fp.inv(Fp.add(Fp.ONE, Fp.ONE)));\n    // C3 = sqrt(-g(Z) * (3 * Z^2 + 4 * A))\n    const c3 = Fp.sqrt(Fp.mul(Fp.neg(c1), Fp.add(Fp.mul(three, Fp.mul(opts.Z, opts.Z)), Fp.mul(four, opts.A))));\n    // C4 = 4 * -g(Z) / (3 * Z^2 + 4 * A)\n    const c4 = Fp.mul(Fp.mul(four, Fp.neg(c1)), Fp.inv(Fp.add(Fp.mul(three, Fp.mul(opts.Z, opts.Z)), Fp.mul(four, opts.A))));\n    // Input: u, an element of F.\n    // Output: (x, y), a point on E.\n    return (u) => {\n        // prettier-ignore\n        let tv1, tv2, tv3, tv4, x1, gx1, e1, x2, gx2, e2, x3, x, gx, y, e3;\n        tv1 = Fp.mul(u, u);\n        tv1 = Fp.mul(tv1, c1);\n        tv2 = Fp.add(Fp.ONE, tv1);\n        tv1 = Fp.sub(Fp.ONE, tv1);\n        tv3 = Fp.mul(tv1, tv2);\n        tv3 = Fp.inv(tv3);\n        tv4 = Fp.mul(u, tv1);\n        tv4 = Fp.mul(tv4, tv3);\n        tv4 = Fp.mul(tv4, c3);\n        x1 = Fp.sub(c2, tv4);\n        gx1 = Fp.mul(x1, x1);\n        gx1 = Fp.add(gx1, opts.A);\n        gx1 = Fp.mul(gx1, x1);\n        gx1 = Fp.add(gx1, opts.B);\n        e1 = isSquare(gx1);\n        x2 = Fp.add(c2, tv4);\n        gx2 = Fp.mul(x2, x2);\n        gx2 = Fp.add(gx2, opts.A);\n        gx2 = Fp.mul(gx2, x2);\n        gx2 = Fp.add(gx2, opts.B);\n        e2 = isSquare(gx2) && !e1;\n        x3 = Fp.mul(tv2, tv2);\n        x3 = Fp.mul(x3, tv3);\n        x3 = Fp.mul(x3, x3);\n        x3 = Fp.mul(x3, c4);\n        x3 = Fp.add(x3, opts.Z);\n        x = Fp.cmov(x3, x1, !!e1);\n        x = Fp.cmov(x, x2, !!e2);\n        gx = Fp.mul(x, x);\n        gx = Fp.add(gx, opts.A);\n        gx = Fp.mul(gx, x);\n        gx = Fp.add(gx, opts.B);\n        y = Fp.sqrt(gx);\n        e3 = Fp.isOdd(u) === Fp.isOdd(y);\n        y = Fp.cmov(Fp.neg(y), y, e3);\n        return { x, y };\n    };\n}\nconst G1_SVDW = mapToCurveSVDW(Fp, {\n    A: Fp.ZERO,\n    B: _3n,\n    Z: Fp.ONE,\n});\nconst mapToCurveG1 = (scalars) => G1_SVDW(scalars[0]);\n/*\nHash-to-curve & signatures implemented to drand evmnet specs.\n- Uses SVDW, test vectors generated using Sage reference implementation\n- Signatures on G1 only\n- No support for compressed points\n- Uses keccak256 for hashing\n*/\nconst drandHtf = Object.freeze({\n    // DST: a domain separation tag\n    // defined in section 2.2.5\n    // Use utils.getDSTLabel(), utils.setDSTLabel(value)\n    DST: 'BLS_SIG_BN254G1_XMD:KECCAK-256_SVDW_RO_NUL_',\n    encodeDST: 'BLS_SIG_BN254G1_XMD:KECCAK-256_SVDW_RO_NUL_',\n    // p: the characteristic of F\n    //    where F is a finite field of characteristic p and order q = p^m\n    p: Fp.ORDER,\n    // m: the extension degree of F, m >= 1\n    //     where F is a finite field of characteristic p and order q = p^m\n    m: 1,\n    // k: the target security level for the suite in bits\n    // defined in section 5.1\n    k: 128,\n    // option to use a message that has already been processed by\n    // expand_message_xmd\n    expand: 'xmd',\n    // NB: We use keccak_256 to hash-to-curve for bn254 drand, as it is the\n    // cheapest hash function in the EVM.\n    hash: sha3_1.keccak_256,\n});\n/**\n * bn254 (a.k.a. alt_bn128) pairing-friendly curve.\n * Contains G1 / G2 operations and pairings.\n */\nexports.bn254 = (0, bls_1.bls)({\n    // Fields\n    fields: { Fp, Fp2, Fp6, Fp12, Fr },\n    G1: {\n        Fp,\n        h: BigInt(1),\n        Gx: BigInt(1),\n        Gy: BigInt(2),\n        a: Fp.ZERO,\n        b: _3n,\n        htfDefaults: { ...drandHtf, m: 1 },\n        wrapPrivateKey: true,\n        allowInfinityPoint: true,\n        mapToCurve: mapToCurveG1,\n        fromBytes: (bytes) => {\n            // Deserialise from Kyber format\n            const p = [bytes.slice(0, 32), bytes.slice(32, 64)].map((buf) => (0, utils_3.bytesToNumberBE)(buf));\n            const point = { x: Fp.create(p[0]), y: Fp.create(p[1]) };\n            exports.bn254.G1.ProjectivePoint.fromAffine(point).assertValidity();\n            return point;\n        },\n        toBytes: (c, point, _isCompressed) => {\n            // Serialise to Kyber format\n            const isZero = point.equals(c.ZERO);\n            const { x, y } = point.toAffine();\n            const { BYTES: len } = Fp;\n            if (isZero) {\n                return new Uint8Array(len);\n            }\n            return (0, utils_2.concatBytes)((0, utils_3.numberToBytesBE)(x, len), (0, utils_3.numberToBytesBE)(y, len));\n        },\n        ShortSignature: {\n            fromHex(hex) {\n                return exports.bn254.G1.ProjectivePoint.fromHex(hex);\n            },\n            toRawBytes(point) {\n                return point.toRawBytes();\n            },\n            toHex(point) {\n                return point.toHex();\n            },\n        },\n    },\n    G2: {\n        Fp: Fp2,\n        // cofactor: (36 * X^4) + (36 * X^3) + (30 * X^2) + 6*X + 1\n        h: BigInt('21888242871839275222246405745257275088844257914179612981679871602714643921549'),\n        Gx: Fp2.fromBigTuple([\n            BigInt('10857046999023057135944570762232829481370756359578518086990519993285655852781'),\n            BigInt('11559732032986387107991004021392285783925812861821192530917403151452391805634'),\n        ]),\n        Gy: Fp2.fromBigTuple([\n            BigInt('8495653923123431417604973247489272438418190587263600148770280649306958101930'),\n            BigInt('4082367875863433681332203403145435568316851327593401208105741076214120093531'),\n        ]),\n        a: Fp2.ZERO,\n        b: Fp2B,\n        hEff: BigInt('21888242871839275222246405745257275088844257914179612981679871602714643921549'),\n        htfDefaults: { ...drandHtf, m: 2 },\n        wrapPrivateKey: true,\n        allowInfinityPoint: true,\n        isTorsionFree: (c, P) => P.multiplyUnsafe(SIX_X_SQUARED).equals(G2psi(c, P)), // [p]P = [6X^2]P\n        mapToCurve: utils_2.notImplemented,\n        fromBytes: (bytes) => {\n            // Deserialise from Kyber format\n            const p = [\n                bytes.slice(32, 64),\n                bytes.slice(0, 32),\n                bytes.slice(96, 128),\n                bytes.slice(64, 96),\n            ].map((buf) => (0, utils_3.bytesToNumberBE)(buf));\n            const x = Fp2.create({ c0: p[0], c1: p[1] });\n            const y = Fp2.create({ c0: p[2], c1: p[3] });\n            exports.bn254.G2.ProjectivePoint.fromAffine({ x, y }).assertValidity();\n            return { x, y };\n        },\n        toBytes: (c, point, _isCompressed) => {\n            // Serialise to Kyber format. No point compression.\n            // https://github.com/drand/kyber/blob/master/pairing/bn254/point.go#L415\n            const { BYTES: len } = Fp;\n            const isZero = point.equals(c.ZERO);\n            const { x, y } = point.toAffine();\n            const marshalSize = 4 * len;\n            if (isZero) {\n                // Kyber returns zero bytes for point at infinity\n                return new Uint8Array(marshalSize);\n            }\n            // Kyber format is x = b + ai\n            const { re: x0, im: x1 } = Fp2.reim(x);\n            const { re: y0, im: y1 } = Fp2.reim(y);\n            return (0, utils_2.concatBytes)((0, utils_3.numberToBytesBE)(x1, len), (0, utils_3.numberToBytesBE)(x0, len), (0, utils_3.numberToBytesBE)(y1, len), (0, utils_3.numberToBytesBE)(y0, len));\n        },\n        Signature: {\n            fromHex(hex) {\n                return exports.bn254.G2.ProjectivePoint.fromHex(hex);\n            },\n            toRawBytes(point) {\n                return point.toRawBytes();\n            },\n            toHex(point) {\n                return point.toHex();\n            },\n        },\n    },\n    params: {\n        ateLoopSize: BN_X * _6n + _2n,\n        r: Fr.ORDER,\n        xNegative: false,\n        twistType: 'divisive',\n    },\n    htfDefaults: drandHtf,\n    hash: sha3_1.keccak_256,\n    randomBytes: utils_1.randomBytes,\n    postPrecompute: (Rx, Ry, Rz, Qx, Qy, pointAdd) => {\n        const q = psi(Qx, Qy);\n        ({ Rx, Ry, Rz } = pointAdd(Rx, Ry, Rz, q[0], q[1]));\n        const q2 = psi(q[0], q[1]);\n        pointAdd(Rx, Ry, Rz, q2[0], Fp2.neg(q2[1]));\n    },\n});\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./bn254\"), exports);\n", "/* Do NOT modify this file; see /src.ts/_admin/update-version.ts */\n\n/**\n *  The current version of Ethers.\n */\nexport const version: string = \"6.13.4\";\n", "/**\n *  Property helper functions.\n *\n *  @_subsection api/utils:Properties  [about-properties]\n */\n\nfunction checkType(value: any, type: string, name: string): void {\n    const types = type.split(\"|\").map(t => t.trim());\n    for (let i = 0; i < types.length; i++) {\n        switch (type) {\n            case \"any\":\n                return;\n            case \"bigint\":\n            case \"boolean\":\n            case \"number\":\n            case \"string\":\n                if (typeof(value) === type) { return; }\n        }\n    }\n\n    const error: any = new Error(`invalid value for type ${ type }`);\n    error.code = \"INVALID_ARGUMENT\";\n    error.argument = `value.${ name }`;\n    error.value = value;\n\n    throw error;\n}\n\n/**\n *  Resolves to a new object that is a copy of %%value%%, but with all\n *  values resolved.\n */\nexport async function resolveProperties<T>(value: { [ P in keyof T ]: T[P] | Promise<T[P]>}): Promise<T> {\n    const keys = Object.keys(value);\n    const results = await Promise.all(keys.map((k) => Promise.resolve(value[<keyof T>k])));\n    return results.reduce((accum: any, v, index) => {\n        accum[keys[index]] = v;\n        return accum;\n    }, <{ [ P in keyof T]: T[P] }>{ });\n}\n\n/**\n *  Assigns the %%values%% to %%target%% as read-only values.\n *\n *  It %%types%% is specified, the values are checked.\n */\nexport function defineProperties<T>(\n target: T,\n values: { [ K in keyof T ]?: T[K] },\n types?: { [ K in keyof T ]?: string }): void {\n\n    for (let key in values) {\n        let value = values[key];\n\n        const type = (types ? types[key]: null);\n        if (type) { checkType(value, type, key); }\n\n        Object.defineProperty(target, key, { enumerable: true, value, writable: false });\n    }\n}\n", "/**\n *  All errors in ethers include properties to ensure they are both\n *  human-readable (i.e. ``.message``) and machine-readable (i.e. ``.code``).\n *\n *  The [[isError]] function can be used to check the error ``code`` and\n *  provide a type guard for the properties present on that error interface.\n *\n *  @_section: api/utils/errors:Errors  [about-errors]\n */\n\nimport { version } from \"../_version.js\";\n\nimport { defineProperties } from \"./properties.js\";\n\nimport type {\n    TransactionRequest, TransactionReceipt, TransactionResponse\n} from \"../providers/index.js\";\n\nimport type { FetchRequest, FetchResponse } from \"./fetch.js\";\n\n/**\n *  An error may contain additional properties, but those must not\n *  conflict with any implicit properties.\n */\nexport type ErrorInfo<T> = Omit<T, \"code\" | \"name\" | \"message\" | \"shortMessage\"> & { shortMessage?: string };\n\n\nfunction stringify(value: any): any {\n    if (value == null) { return \"null\"; }\n\n    if (Array.isArray(value)) {\n        return \"[ \" + (value.map(stringify)).join(\", \") + \" ]\";\n    }\n\n    if (value instanceof Uint8Array) {\n        const HEX = \"0123456789abcdef\";\n        let result = \"0x\";\n        for (let i = 0; i < value.length; i++) {\n            result += HEX[value[i] >> 4];\n            result += HEX[value[i] & 0xf];\n        }\n        return result;\n    }\n\n    if (typeof(value) === \"object\" && typeof(value.toJSON) === \"function\") {\n        return stringify(value.toJSON());\n    }\n\n    switch (typeof(value)) {\n        case \"boolean\": case \"symbol\":\n            return value.toString();\n        case \"bigint\":\n            return BigInt(value).toString();\n        case \"number\":\n            return (value).toString();\n        case \"string\":\n            return JSON.stringify(value);\n        case \"object\": {\n            const keys = Object.keys(value);\n            keys.sort();\n            return \"{ \" + keys.map((k) => `${ stringify(k) }: ${ stringify(value[k]) }`).join(\", \") + \" }\";\n        }\n    }\n\n    return `[ COULD NOT SERIALIZE ]`;\n}\n\n/**\n *  All errors emitted by ethers have an **ErrorCode** to help\n *  identify and coalesce errors to simplify programmatic analysis.\n *\n *  Each **ErrorCode** is the %%code%% proerty of a coresponding\n *  [[EthersError]].\n *\n *  **Generic Errors**\n *\n *  **``\"UNKNOWN_ERROR\"``** - see [[UnknownError]]\n *\n *  **``\"NOT_IMPLEMENTED\"``** - see [[NotImplementedError]]\n *\n *  **``\"UNSUPPORTED_OPERATION\"``** - see [[UnsupportedOperationError]]\n *\n *  **``\"NETWORK_ERROR\"``** - see [[NetworkError]]\n *\n *  **``\"SERVER_ERROR\"``** - see [[ServerError]]\n *\n *  **``\"TIMEOUT\"``** - see [[TimeoutError]]\n *\n *  **``\"BAD_DATA\"``** - see [[BadDataError]]\n *\n *  **``\"CANCELLED\"``** - see [[CancelledError]]\n *\n *  **Operational Errors**\n *\n *  **``\"BUFFER_OVERRUN\"``** - see [[BufferOverrunError]]\n *\n *  **``\"NUMERIC_FAULT\"``** - see [[NumericFaultError]]\n *\n *  **Argument Errors**\n *\n *  **``\"INVALID_ARGUMENT\"``** - see [[InvalidArgumentError]]\n *\n *  **``\"MISSING_ARGUMENT\"``** - see [[MissingArgumentError]]\n *\n *  **``\"UNEXPECTED_ARGUMENT\"``** - see [[UnexpectedArgumentError]]\n *\n *  **``\"VALUE_MISMATCH\"``** - //unused//\n *\n *  **Blockchain Errors**\n *\n *  **``\"CALL_EXCEPTION\"``** - see [[CallExceptionError]]\n *\n *  **``\"INSUFFICIENT_FUNDS\"``** - see [[InsufficientFundsError]]\n *\n *  **``\"NONCE_EXPIRED\"``** - see [[NonceExpiredError]]\n *\n *  **``\"REPLACEMENT_UNDERPRICED\"``** - see [[ReplacementUnderpricedError]]\n *\n *  **``\"TRANSACTION_REPLACED\"``** - see [[TransactionReplacedError]]\n *\n *  **``\"UNCONFIGURED_NAME\"``** - see [[UnconfiguredNameError]]\n *\n *  **``\"OFFCHAIN_FAULT\"``** - see [[OffchainFaultError]]\n *\n *  **User Interaction Errors**\n *\n *  **``\"ACTION_REJECTED\"``** - see [[ActionRejectedError]]\n */\nexport type ErrorCode =\n\n    // Generic Errors\n    \"UNKNOWN_ERROR\" | \"NOT_IMPLEMENTED\" | \"UNSUPPORTED_OPERATION\" |\n    \"NETWORK_ERROR\" | \"SERVER_ERROR\" | \"TIMEOUT\" | \"BAD_DATA\" |\n    \"CANCELLED\" |\n\n    // Operational Errors\n    \"BUFFER_OVERRUN\" |  \"NUMERIC_FAULT\" |\n\n    // Argument Errors\n    \"INVALID_ARGUMENT\" | \"MISSING_ARGUMENT\" | \"UNEXPECTED_ARGUMENT\" |\n    \"VALUE_MISMATCH\" |\n\n    // Blockchain Errors\n    \"CALL_EXCEPTION\" | \"INSUFFICIENT_FUNDS\" | \"NONCE_EXPIRED\" |\n    \"REPLACEMENT_UNDERPRICED\" | \"TRANSACTION_REPLACED\" |\n    \"UNCONFIGURED_NAME\" | \"OFFCHAIN_FAULT\" |\n\n    // User Interaction\n    \"ACTION_REJECTED\"\n;\n\n/**\n *  All errors in Ethers include properties to assist in\n *  machine-readable errors.\n */\nexport interface EthersError<T extends ErrorCode = ErrorCode> extends Error {\n    /**\n     *  The string error code.\n     */\n    code: ErrorCode;\n\n    /**\n     *  A short message describing the error, with minimal additional\n     *  details.\n     */\n    shortMessage: string;\n\n    /**\n     *  Additional info regarding the error that may be useful.\n     *\n     *  This is generally helpful mostly for human-based debugging.\n     */\n    info?: Record<string, any>;\n\n    /**\n     *  Any related error.\n     */\n    error?: Error;\n}\n\n// Generic Errors\n\n/**\n *  This Error is a catch-all for when there is no way for Ethers to\n *  know what the underlying problem is.\n */\nexport interface UnknownError extends EthersError<\"UNKNOWN_ERROR\"> {\n    [ key: string ]: any;\n}\n\n/**\n *  This Error is mostly used as a stub for functionality that is\n *  intended for the future, but is currently not implemented.\n */\nexport interface NotImplementedError extends EthersError<\"NOT_IMPLEMENTED\"> {\n    /**\n     *  The attempted operation.\n     */\n    operation: string;\n}\n\n/**\n *  This Error indicates that the attempted operation is not supported.\n *\n *  This could range from a specific JSON-RPC end-point not supporting\n *  a feature to a specific configuration of an object prohibiting the\n *  operation.\n *\n *  For example, a [[Wallet]] with no connected [[Provider]] is unable\n *  to send a transaction.\n */\nexport interface UnsupportedOperationError extends EthersError<\"UNSUPPORTED_OPERATION\"> {\n    /**\n     *  The attempted operation.\n     */\n    operation: string;\n}\n\n/**\n *  This Error indicates a problem connecting to a network.\n */\nexport interface NetworkError extends EthersError<\"NETWORK_ERROR\"> {\n    /**\n     *  The network event.\n     */\n    event: string;\n}\n\n/**\n *  This Error indicates there was a problem fetching a resource from\n *  a server.\n */\nexport interface ServerError extends EthersError<\"SERVER_ERROR\"> {\n    /**\n     *  The requested resource.\n     */\n    request: FetchRequest | string;\n\n    /**\n     *  The response received from the server, if available.\n     */\n    response?: FetchResponse;\n}\n\n/**\n *  This Error indicates that the timeout duration has expired and\n *  that the operation has been implicitly cancelled.\n *\n *  The side-effect of the operation may still occur, as this\n *  generally means a request has been sent and there has simply\n *  been no response to indicate whether it was processed or not.\n */\nexport interface TimeoutError extends EthersError<\"TIMEOUT\"> {\n    /**\n     *  The attempted operation.\n     */\n    operation: string;\n\n    /**\n     *  The reason.\n     */\n    reason: string;\n\n    /**\n     *  The resource request, if available.\n     */\n    request?: FetchRequest;\n}\n\n/**\n *  This Error indicates that a provided set of data cannot\n *  be correctly interpreted.\n */\nexport interface BadDataError extends EthersError<\"BAD_DATA\"> {\n    /**\n     *  The data.\n     */\n    value: any;\n}\n\n/**\n *  This Error indicates that the operation was cancelled by a\n *  programmatic call, for example to ``cancel()``.\n */\nexport interface CancelledError extends EthersError<\"CANCELLED\"> {\n}\n\n\n// Operational Errors\n\n/**\n *  This Error indicates an attempt was made to read outside the bounds\n *  of protected data.\n *\n *  Most operations in Ethers are protected by bounds checks, to mitigate\n *  exploits when parsing data.\n */\nexport interface BufferOverrunError extends EthersError<\"BUFFER_OVERRUN\"> {\n    /**\n     *  The buffer that was overrun.\n     */\n    buffer: Uint8Array;\n\n    /**\n     *  The length of the buffer.\n     */\n    length: number;\n\n    /**\n     *  The offset that was requested.\n     */\n    offset: number;\n}\n\n/**\n *  This Error indicates an operation which would result in incorrect\n *  arithmetic output has occurred.\n *\n *  For example, trying to divide by zero or using a ``uint8`` to store\n *  a negative value.\n */\nexport interface NumericFaultError extends EthersError<\"NUMERIC_FAULT\"> {\n    /**\n     *  The attempted operation.\n     */\n    operation: string;\n\n    /**\n     *  The fault reported.\n     */\n    fault: string;\n\n    /**\n     *  The value the operation was attempted against.\n     */\n    value: any;\n}\n\n\n// Argument Errors\n\n/**\n *  This Error indicates an incorrect type or value was passed to\n *  a function or method.\n */\nexport interface InvalidArgumentError extends EthersError<\"INVALID_ARGUMENT\"> {\n    /**\n     *  The name of the argument.\n     */\n    argument: string;\n\n    /**\n     *  The value that was provided.\n     */\n    value: any;\n\n    info?: Record<string, any>\n}\n\n/**\n *  This Error indicates there were too few arguments were provided.\n */\nexport interface MissingArgumentError extends EthersError<\"MISSING_ARGUMENT\"> {\n    /**\n     *  The number of arguments received.\n     */\n    count: number;\n\n    /**\n     *  The number of arguments expected.\n     */\n    expectedCount: number;\n}\n\n/**\n *  This Error indicates too many arguments were provided.\n */\nexport interface UnexpectedArgumentError extends EthersError<\"UNEXPECTED_ARGUMENT\"> {\n    /**\n     *  The number of arguments received.\n     */\n    count: number;\n\n    /**\n     *  The number of arguments expected.\n     */\n    expectedCount: number;\n}\n\n\n// Blockchain Errors\n\n/**\n *  The action that resulted in the call exception.\n */\nexport type CallExceptionAction = \"call\" | \"estimateGas\" | \"getTransactionResult\" | \"sendTransaction\" | \"unknown\";\n\n/**\n *  The related transaction that caused the error.\n */\nexport type CallExceptionTransaction = {\n    to: null | string;\n    from?: string;\n    data: string;\n};\n\n/**\n *  This **Error** indicates a transaction reverted.\n */\nexport interface CallExceptionError extends EthersError<\"CALL_EXCEPTION\"> {\n\n    /**\n     *  The action being performed when the revert was encountered.\n     */\n    action: CallExceptionAction;\n\n    /**\n     *  The revert data returned.\n     */\n    data: null | string;\n\n    /**\n     *  A human-readable representation of data, if possible.\n     */\n    reason: null | string;\n\n    /**\n     *  The transaction that triggered the exception.\n     */\n    transaction: CallExceptionTransaction,\n\n    /**\n     *  The contract invocation details, if available.\n     */\n    invocation: null | {\n        method: string;\n        signature: string;\n        args: Array<any>;\n    }\n\n    /**\n     *  The built-in or custom revert error, if available\n     */\n    revert: null | {\n        signature: string;\n        name: string;\n        args: Array<any>;\n    }\n\n    /**\n     *  If the error occurred in a transaction that was mined\n     *  (with a status of ``0``), this is the receipt.\n     */\n    receipt?: TransactionReceipt;   // @TODO: in v7, make this `null | TransactionReceipt`\n}\n\n\n/**\n *  The sending account has insufficient funds to cover the\n *  entire transaction cost.\n */\nexport interface InsufficientFundsError extends EthersError<\"INSUFFICIENT_FUNDS\"> {\n    /**\n     *  The transaction.\n     */\n    transaction: TransactionRequest;\n}\n\n/**\n *  The sending account has already used this nonce in a\n *  transaction that has been included.\n */\nexport interface NonceExpiredError extends EthersError<\"NONCE_EXPIRED\"> {\n    /**\n     *  The transaction.\n     */\n    transaction: TransactionRequest;\n}\n\n/**\n *  A CCIP-read exception, which cannot be recovered from or\n *  be further processed.\n */\nexport interface OffchainFaultError extends EthersError<\"OFFCHAIN_FAULT\"> {\n    /**\n     *  The transaction.\n     */\n    transaction?: TransactionRequest;\n\n    /**\n     *  The reason the CCIP-read failed.\n     */\n    reason: string;\n}\n\n/**\n *  An attempt was made to replace a transaction, but with an\n *  insufficient additional fee to afford evicting the old\n *  transaction from the memory pool.\n */\nexport interface ReplacementUnderpricedError extends EthersError<\"REPLACEMENT_UNDERPRICED\"> {\n    /**\n     *  The transaction.\n     */\n    transaction: TransactionRequest;\n}\n\n/**\n *  A pending transaction was replaced by another.\n */\nexport interface TransactionReplacedError extends EthersError<\"TRANSACTION_REPLACED\"> {\n    /**\n     *  If the transaction was cancelled, such that the original\n     *  effects of the transaction cannot be assured.\n     */\n    cancelled: boolean;\n\n    /**\n     *  The reason the transaction was replaced.\n     */\n    reason: \"repriced\" | \"cancelled\" | \"replaced\";\n\n    /**\n     *  The hash of the replaced transaction.\n     */\n    hash: string;\n\n    /**\n     *  The transaction that replaced the transaction.\n     */\n    replacement: TransactionResponse;\n\n    /**\n     *  The receipt of the transaction that replace the transaction.\n     */\n    receipt: TransactionReceipt;\n}\n\n/**\n *  This Error indicates an ENS name was used, but the name has not\n *  been configured.\n *\n *  This could indicate an ENS name is unowned or that the current\n *  address being pointed to is the [[ZeroAddress]].\n */\nexport interface UnconfiguredNameError extends EthersError<\"UNCONFIGURED_NAME\"> {\n    /**\n     *  The ENS name that was requested\n     */\n    value: string;\n}\n\n/**\n *  This Error indicates a request was rejected by the user.\n *\n *  In most clients (such as MetaMask), when an operation requires user\n *  authorization (such as ``signer.sendTransaction``), the client\n *  presents a dialog box to the user. If the user denies the request\n *  this error is thrown.\n */\nexport interface ActionRejectedError extends EthersError<\"ACTION_REJECTED\"> {\n    /**\n     *  The requested action.\n     */\n    action: \"requestAccess\" | \"sendTransaction\" | \"signMessage\" | \"signTransaction\" | \"signTypedData\" | \"unknown\",\n\n    /**\n     *  The reason the action was rejected.\n     *\n     *  If there is already a pending request, some clients may indicate\n     *  there is already a ``\"pending\"`` action. This prevents an app\n     *  from spamming the user.\n     */\n    reason: \"expired\" | \"rejected\" | \"pending\"\n}\n\n// Coding; converts an ErrorCode its Typed Error\n\n/**\n *  A conditional type that transforms the [[ErrorCode]] T into\n *  its EthersError type.\n *\n *  @flatworm-skip-docs\n */\nexport type CodedEthersError<T> =\n    T extends \"UNKNOWN_ERROR\" ? UnknownError:\n    T extends \"NOT_IMPLEMENTED\" ? NotImplementedError:\n    T extends \"UNSUPPORTED_OPERATION\" ? UnsupportedOperationError:\n    T extends \"NETWORK_ERROR\" ? NetworkError:\n    T extends \"SERVER_ERROR\" ? ServerError:\n    T extends \"TIMEOUT\" ? TimeoutError:\n    T extends \"BAD_DATA\" ? BadDataError:\n    T extends \"CANCELLED\" ? CancelledError:\n\n    T extends \"BUFFER_OVERRUN\" ? BufferOverrunError:\n    T extends \"NUMERIC_FAULT\" ? NumericFaultError:\n\n    T extends \"INVALID_ARGUMENT\" ? InvalidArgumentError:\n    T extends \"MISSING_ARGUMENT\" ? MissingArgumentError:\n    T extends \"UNEXPECTED_ARGUMENT\" ? UnexpectedArgumentError:\n\n    T extends \"CALL_EXCEPTION\" ? CallExceptionError:\n    T extends \"INSUFFICIENT_FUNDS\" ? InsufficientFundsError:\n    T extends \"NONCE_EXPIRED\" ? NonceExpiredError:\n    T extends \"OFFCHAIN_FAULT\" ? OffchainFaultError:\n    T extends \"REPLACEMENT_UNDERPRICED\" ? ReplacementUnderpricedError:\n    T extends \"TRANSACTION_REPLACED\" ? TransactionReplacedError:\n    T extends \"UNCONFIGURED_NAME\" ? UnconfiguredNameError:\n\n    T extends \"ACTION_REJECTED\" ? ActionRejectedError:\n\n    never;\n\n\n\n/**\n *  Returns true if the %%error%% matches an error thrown by ethers\n *  that matches the error %%code%%.\n *\n *  In TypeScript environments, this can be used to check that %%error%%\n *  matches an EthersError type, which means the expected properties will\n *  be set.\n *\n *  @See [ErrorCodes](api:ErrorCode)\n *  @example\n *    try {\n *      // code....\n *    } catch (e) {\n *      if (isError(e, \"CALL_EXCEPTION\")) {\n *          // The Type Guard has validated this object\n *          console.log(e.data);\n *      }\n *    }\n */\nexport function isError<K extends ErrorCode, T extends CodedEthersError<K>>(error: any, code: K): error is T {\n    return (error && (<EthersError>error).code === code);\n}\n\n/**\n *  Returns true if %%error%% is a [[CallExceptionError].\n */\nexport function isCallException(error: any): error is CallExceptionError {\n    return isError(error, \"CALL_EXCEPTION\");\n}\n\n/**\n *  Returns a new Error configured to the format ethers emits errors, with\n *  the %%message%%, [[api:ErrorCode]] %%code%% and additional properties\n *  for the corresponding EthersError.\n *\n *  Each error in ethers includes the version of ethers, a\n *  machine-readable [[ErrorCode]], and depending on %%code%%, additional\n *  required properties. The error message will also include the %%message%%,\n *  ethers version, %%code%% and all additional properties, serialized.\n */\nexport function makeError<K extends ErrorCode, T extends CodedEthersError<K>>(message: string, code: K, info?: ErrorInfo<T>): T {\n    let shortMessage = message;\n\n    {\n        const details: Array<string> = [];\n        if (info) {\n            if (\"message\" in info || \"code\" in info || \"name\" in info) {\n                throw new Error(`value will overwrite populated values: ${ stringify(info) }`);\n            }\n            for (const key in info) {\n                if (key === \"shortMessage\") { continue; }\n                const value = <any>(info[<keyof ErrorInfo<T>>key]);\n//                try {\n                    details.push(key + \"=\" + stringify(value));\n//                } catch (error: any) {\n//                console.log(\"MMM\", error.message);\n//                    details.push(key + \"=[could not serialize object]\");\n//                }\n            }\n        }\n        details.push(`code=${ code }`);\n        details.push(`version=${ version }`);\n\n        if (details.length) {\n            message += \" (\" + details.join(\", \") + \")\";\n        }\n    }\n\n    let error;\n    switch (code) {\n        case \"INVALID_ARGUMENT\":\n            error = new TypeError(message);\n            break;\n        case \"NUMERIC_FAULT\":\n        case \"BUFFER_OVERRUN\":\n            error = new RangeError(message);\n            break;\n        default:\n            error = new Error(message);\n    }\n\n    defineProperties<EthersError>(<EthersError>error, { code });\n\n    if (info) { Object.assign(error, info); }\n\n    if ((<any>error).shortMessage == null) {\n        defineProperties<EthersError>(<EthersError>error, { shortMessage });\n    }\n\n    return <T>error;\n}\n\n/**\n *  Throws an EthersError with %%message%%, %%code%% and additional error\n *  %%info%% when %%check%% is falsish..\n *\n *  @see [[api:makeError]]\n */\nexport function assert<K extends ErrorCode, T extends CodedEthersError<K>>(check: unknown, message: string, code: K, info?: ErrorInfo<T>): asserts check {\n    if (!check) { throw makeError(message, code, info); }\n}\n\n\n/**\n *  A simple helper to simply ensuring provided arguments match expected\n *  constraints, throwing if not.\n *\n *  In TypeScript environments, the %%check%% has been asserted true, so\n *  any further code does not need additional compile-time checks.\n */\nexport function assertArgument(check: unknown, message: string, name: string, value: unknown): asserts check {\n    assert(check, message, \"INVALID_ARGUMENT\", { argument: name, value: value });\n}\n\nexport function assertArgumentCount(count: number, expectedCount: number, message?: string): void {\n    if (message == null) { message = \"\"; }\n    if (message) { message = \": \" + message; }\n\n    assert(count >= expectedCount, \"missing arguemnt\" + message, \"MISSING_ARGUMENT\", {\n        count: count,\n        expectedCount: expectedCount\n    });\n\n    assert(count <= expectedCount, \"too many arguments\" + message, \"UNEXPECTED_ARGUMENT\", {\n        count: count,\n        expectedCount: expectedCount\n    });\n}\n\nconst _normalizeForms = [\"NFD\", \"NFC\", \"NFKD\", \"NFKC\"].reduce((accum, form) => {\n    try {\n        // General test for normalize\n        /* c8 ignore start */\n        if (\"test\".normalize(form) !== \"test\") { throw new Error(\"bad\"); };\n        /* c8 ignore stop */\n\n        if (form === \"NFD\") {\n            const check = String.fromCharCode(0xe9).normalize(\"NFD\");\n            const expected = String.fromCharCode(0x65, 0x0301)\n            /* c8 ignore start */\n            if (check !== expected) { throw new Error(\"broken\") }\n            /* c8 ignore stop */\n        }\n\n        accum.push(form);\n    } catch(error) { }\n\n    return accum;\n}, <Array<string>>[]);\n\n/**\n *  Throws if the normalization %%form%% is not supported.\n */\nexport function assertNormalize(form: string): void {\n    assert(_normalizeForms.indexOf(form) >= 0, \"platform missing String.prototype.normalize\", \"UNSUPPORTED_OPERATION\", {\n        operation: \"String.prototype.normalize\", info: { form }\n    });\n}\n\n/**\n *  Many classes use file-scoped values to guard the constructor,\n *  making it effectively private. This facilitates that pattern\n *  by ensuring the %%givenGaurd%% matches the file-scoped %%guard%%,\n *  throwing if not, indicating the %%className%% if provided.\n */\nexport function assertPrivate(givenGuard: any, guard: any, className?: string): void {\n    if (className == null) { className = \"\"; }\n    if (givenGuard !== guard) {\n        let method = className, operation = \"new\";\n        if (className) {\n            method += \".\";\n            operation += \" \" + className;\n        }\n        assert(false, `private constructor; use ${ method }from* methods`, \"UNSUPPORTED_OPERATION\", {\n            operation\n        });\n    }\n}\n", "/**\n *  Some data helpers.\n *\n *\n *  @_subsection api/utils:Data Helpers  [about-data]\n */\nimport { assert, assertArgument } from \"./errors.js\";\n\n/**\n *  A [[HexString]] whose length is even, which ensures it is a valid\n *  representation of binary data.\n */\nexport type DataHexString = string;\n\n/**\n *  A string which is prefixed with ``0x`` and followed by any number\n *  of case-agnostic hexadecimal characters.\n *\n *  It must match the regular expression ``/0x[0-9A-Fa-f]*\\/``.\n */\nexport type HexString = string;\n\n/**\n *  An object that can be used to represent binary data.\n */\nexport type BytesLike = DataHexString | Uint8Array;\n\nfunction _getBytes(value: BytesLike, name?: string, copy?: boolean): Uint8Array {\n    if (value instanceof Uint8Array) {\n        if (copy) { return new Uint8Array(value); }\n        return value;\n    }\n\n    if (typeof(value) === \"string\" && value.match(/^0x(?:[0-9a-f][0-9a-f])*$/i)) {\n        const result = new Uint8Array((value.length - 2) / 2);\n        let offset = 2;\n        for (let i = 0; i < result.length; i++) {\n            result[i] = parseInt(value.substring(offset, offset + 2), 16);\n            offset += 2;\n        }\n        return result;\n    }\n\n    assertArgument(false, \"invalid BytesLike value\", name || \"value\", value);\n}\n\n/**\n *  Get a typed Uint8Array for %%value%%. If already a Uint8Array\n *  the original %%value%% is returned; if a copy is required use\n *  [[getBytesCopy]].\n *\n *  @see: getBytesCopy\n */\nexport function getBytes(value: BytesLike, name?: string): Uint8Array {\n    return _getBytes(value, name, false);\n}\n\n/**\n *  Get a typed Uint8Array for %%value%%, creating a copy if necessary\n *  to prevent any modifications of the returned value from being\n *  reflected elsewhere.\n *\n *  @see: getBytes\n */\nexport function getBytesCopy(value: BytesLike, name?: string): Uint8Array {\n    return _getBytes(value, name, true);\n}\n\n\n/**\n *  Returns true if %%value%% is a valid [[HexString]].\n *\n *  If %%length%% is ``true`` or a //number//, it also checks that\n *  %%value%% is a valid [[DataHexString]] of %%length%% (if a //number//)\n *  bytes of data (e.g. ``0x1234`` is 2 bytes).\n */\nexport function isHexString(value: any, length?: number | boolean): value is `0x${ string }` {\n    if (typeof(value) !== \"string\" || !value.match(/^0x[0-9A-Fa-f]*$/)) {\n        return false\n    }\n\n    if (typeof(length) === \"number\" && value.length !== 2 + 2 * length) { return false; }\n    if (length === true && (value.length % 2) !== 0) { return false; }\n\n    return true;\n}\n\n/**\n *  Returns true if %%value%% is a valid representation of arbitrary\n *  data (i.e. a valid [[DataHexString]] or a Uint8Array).\n */\nexport function isBytesLike(value: any): value is BytesLike {\n    return (isHexString(value, true) || (value instanceof Uint8Array));\n}\n\nconst HexCharacters: string = \"0123456789abcdef\";\n\n/**\n *  Returns a [[DataHexString]] representation of %%data%%.\n */\nexport function hexlify(data: BytesLike): string {\n    const bytes = getBytes(data);\n\n    let result = \"0x\";\n    for (let i = 0; i < bytes.length; i++) {\n        const v = bytes[i];\n        result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f];\n    }\n    return result;\n}\n\n/**\n *  Returns a [[DataHexString]] by concatenating all values\n *  within %%data%%.\n */\nexport function concat(datas: ReadonlyArray<BytesLike>): string {\n    return \"0x\" + datas.map((d) => hexlify(d).substring(2)).join(\"\");\n}\n\n/**\n *  Returns the length of %%data%%, in bytes.\n */\nexport function dataLength(data: BytesLike): number {\n    if (isHexString(data, true)) { return (data.length - 2) / 2; }\n    return getBytes(data).length;\n}\n\n/**\n *  Returns a [[DataHexString]] by slicing %%data%% from the %%start%%\n *  offset to the %%end%% offset.\n *\n *  By default %%start%% is 0 and %%end%% is the length of %%data%%.\n */\nexport function dataSlice(data: BytesLike, start?: number, end?: number): string {\n    const bytes = getBytes(data);\n    if (end != null && end > bytes.length) {\n        assert(false, \"cannot slice beyond data bounds\", \"BUFFER_OVERRUN\", {\n            buffer: bytes, length: bytes.length, offset: end\n        });\n    }\n    return hexlify(bytes.slice((start == null) ? 0: start, (end == null) ? bytes.length: end));\n}\n\n/**\n *  Return the [[DataHexString]] result by stripping all **leading**\n ** zero bytes from %%data%%.\n */\nexport function stripZerosLeft(data: BytesLike): string {\n    let bytes = hexlify(data).substring(2);\n    while (bytes.startsWith(\"00\")) { bytes = bytes.substring(2); }\n    return \"0x\" + bytes;\n}\n\nfunction zeroPad(data: BytesLike, length: number, left: boolean): string {\n    const bytes = getBytes(data);\n    assert(length >= bytes.length, \"padding exceeds data length\", \"BUFFER_OVERRUN\", {\n        buffer: new Uint8Array(bytes),\n        length: length,\n        offset: length + 1\n    });\n\n    const result = new Uint8Array(length);\n    result.fill(0);\n    if (left) {\n        result.set(bytes, length - bytes.length);\n    } else {\n        result.set(bytes, 0);\n    }\n\n    return hexlify(result);\n}\n\n/**\n *  Return the [[DataHexString]] of %%data%% padded on the **left**\n *  to %%length%% bytes.\n *\n *  If %%data%% already exceeds %%length%%, a [[BufferOverrunError]] is\n *  thrown.\n *\n *  This pads data the same as **values** are in Solidity\n *  (e.g. ``uint128``).\n */\nexport function zeroPadValue(data: BytesLike, length: number): string {\n    return zeroPad(data, length, true);\n}\n\n/**\n *  Return the [[DataHexString]] of %%data%% padded on the **right**\n *  to %%length%% bytes.\n *\n *  If %%data%% already exceeds %%length%%, a [[BufferOverrunError]] is\n *  thrown.\n *\n *  This pads data the same as **bytes** are in Solidity\n *  (e.g. ``bytes16``).\n */\nexport function zeroPadBytes(data: BytesLike, length: number): string {\n    return zeroPad(data, length, false);\n}\n", "/**\n *  Some mathematic operations.\n *\n *  @_subsection: api/utils:Math Helpers  [about-maths]\n */\nimport { hexlify, isBytesLike } from \"./data.js\";\nimport { assert, assertArgument } from \"./errors.js\";\n\nimport type { BytesLike } from \"./data.js\";\n\n/**\n *  Any type that can be used where a numeric value is needed.\n */\nexport type Numeric = number | bigint;\n\n/**\n *  Any type that can be used where a big number is needed.\n */\nexport type BigNumberish = string | Numeric;\n\n\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\n\n//const BN_Max256 = (BN_1 << BigInt(256)) - BN_1;\n\n\n// IEEE 754 support 53-bits of mantissa\nconst maxValue = 0x1fffffffffffff;\n\n/**\n *  Convert %%value%% from a twos-compliment representation of %%width%%\n *  bits to its value.\n *\n *  If the highest bit is ``1``, the result will be negative.\n */\nexport function fromTwos(_value: BigNumberish, _width: Numeric): bigint {\n    const value = getUint(_value, \"value\");\n    const width = BigInt(getNumber(_width, \"width\"));\n\n    assert((value >> width) === BN_0, \"overflow\", \"NUMERIC_FAULT\", {\n        operation: \"fromTwos\", fault: \"overflow\", value: _value\n    });\n\n    // Top bit set; treat as a negative value\n    if (value >> (width - BN_1)) {\n        const mask = (BN_1 << width) - BN_1;\n        return -(((~value) & mask) + BN_1);\n    }\n\n    return value;\n}\n\n/**\n *  Convert %%value%% to a twos-compliment representation of\n *  %%width%% bits.\n *\n *  The result will always be positive.\n */\nexport function toTwos(_value: BigNumberish, _width: Numeric): bigint {\n    let value = getBigInt(_value, \"value\");\n    const width = BigInt(getNumber(_width, \"width\"));\n\n    const limit = (BN_1 << (width - BN_1));\n\n    if (value < BN_0) {\n        value = -value;\n        assert(value <= limit, \"too low\", \"NUMERIC_FAULT\", {\n            operation: \"toTwos\", fault: \"overflow\", value: _value\n        });\n        const mask = (BN_1 << width) - BN_1;\n        return ((~value) & mask) + BN_1;\n    } else {\n        assert(value < limit, \"too high\", \"NUMERIC_FAULT\", {\n            operation: \"toTwos\", fault: \"overflow\", value: _value\n        });\n    }\n\n    return value;\n}\n\n/**\n *  Mask %%value%% with a bitmask of %%bits%% ones.\n */\nexport function mask(_value: BigNumberish, _bits: Numeric): bigint {\n    const value = getUint(_value, \"value\");\n    const bits = BigInt(getNumber(_bits, \"bits\"));\n    return value & ((BN_1 << bits) - BN_1);\n}\n\n/**\n *  Gets a BigInt from %%value%%. If it is an invalid value for\n *  a BigInt, then an ArgumentError will be thrown for %%name%%.\n */\nexport function getBigInt(value: BigNumberish, name?: string): bigint {\n    switch (typeof(value)) {\n        case \"bigint\": return value;\n        case \"number\":\n            assertArgument(Number.isInteger(value), \"underflow\", name || \"value\", value);\n            assertArgument(value >= -maxValue && value <= maxValue, \"overflow\", name || \"value\", value);\n            return BigInt(value);\n        case \"string\":\n            try {\n                if (value === \"\") { throw new Error(\"empty string\"); }\n                if (value[0] === \"-\" && value[1] !== \"-\") {\n                    return -BigInt(value.substring(1));\n                }\n                return BigInt(value);\n            } catch(e: any) {\n                assertArgument(false, `invalid BigNumberish string: ${ e.message }`, name || \"value\", value);\n            }\n    }\n    assertArgument(false, \"invalid BigNumberish value\", name || \"value\", value);\n}\n\n/**\n *  Returns %%value%% as a bigint, validating it is valid as a bigint\n *  value and that it is positive.\n */\nexport function getUint(value: BigNumberish, name?: string): bigint {\n    const result = getBigInt(value, name);\n    assert(result >= BN_0, \"unsigned value cannot be negative\", \"NUMERIC_FAULT\", {\n        fault: \"overflow\", operation: \"getUint\", value\n    });\n    return result;\n}\n\nconst Nibbles = \"0123456789abcdef\";\n\n/*\n * Converts %%value%% to a BigInt. If %%value%% is a Uint8Array, it\n * is treated as Big Endian data.\n */\nexport function toBigInt(value: BigNumberish | Uint8Array): bigint {\n    if (value instanceof Uint8Array) {\n        let result = \"0x0\";\n        for (const v of value) {\n            result += Nibbles[v >> 4];\n            result += Nibbles[v & 0x0f];\n        }\n        return BigInt(result);\n    }\n\n    return getBigInt(value);\n}\n\n/**\n *  Gets a //number// from %%value%%. If it is an invalid value for\n *  a //number//, then an ArgumentError will be thrown for %%name%%.\n */\nexport function getNumber(value: BigNumberish, name?: string): number {\n    switch (typeof(value)) {\n        case \"bigint\":\n            assertArgument(value >= -maxValue && value <= maxValue, \"overflow\", name || \"value\", value);\n            return Number(value);\n        case \"number\":\n            assertArgument(Number.isInteger(value), \"underflow\", name || \"value\", value);\n            assertArgument(value >= -maxValue && value <= maxValue, \"overflow\", name || \"value\", value);\n            return value;\n        case \"string\":\n            try {\n                if (value === \"\") { throw new Error(\"empty string\"); }\n                return getNumber(BigInt(value), name);\n            } catch(e: any) {\n                assertArgument(false, `invalid numeric string: ${ e.message }`, name || \"value\", value);\n            }\n    }\n    assertArgument(false, \"invalid numeric value\", name || \"value\", value);\n}\n\n\n/**\n *  Converts %%value%% to a number. If %%value%% is a Uint8Array, it\n *  is treated as Big Endian data. Throws if the value is not safe.\n */\nexport function toNumber(value: BigNumberish | Uint8Array): number {\n    return getNumber(toBigInt(value));\n}\n\n/**\n *  Converts %%value%% to a Big Endian hexstring, optionally padded to\n *  %%width%% bytes.\n */\nexport function toBeHex(_value: BigNumberish, _width?: Numeric): string {\n    const value = getUint(_value, \"value\");\n\n    let result = value.toString(16);\n\n    if (_width == null) {\n        // Ensure the value is of even length\n        if (result.length % 2) { result = \"0\" + result; }\n    } else {\n        const width = getNumber(_width, \"width\");\n        assert(width * 2 >= result.length, `value exceeds width (${ width } bytes)`, \"NUMERIC_FAULT\", {\n            operation: \"toBeHex\",\n            fault: \"overflow\",\n            value: _value\n        });\n\n        // Pad the value to the required width\n        while (result.length < (width * 2)) { result = \"0\" + result; }\n\n    }\n\n    return \"0x\" + result;\n}\n\n/**\n *  Converts %%value%% to a Big Endian Uint8Array.\n */\nexport function toBeArray(_value: BigNumberish): Uint8Array {\n    const value = getUint(_value, \"value\");\n\n    if (value === BN_0) { return new Uint8Array([ ]); }\n\n    let hex = value.toString(16);\n    if (hex.length % 2) { hex = \"0\" + hex; }\n\n    const result = new Uint8Array(hex.length / 2);\n    for (let i = 0; i < result.length; i++) {\n        const offset = i * 2;\n        result[i] = parseInt(hex.substring(offset, offset + 2), 16);\n    }\n\n    return result;\n}\n\n/**\n *  Returns a [[HexString]] for %%value%% safe to use as a //Quantity//.\n *\n *  A //Quantity// does not have and leading 0 values unless the value is\n *  the literal value `0x0`. This is most commonly used for JSSON-RPC\n *  numeric values.\n */\nexport function toQuantity(value: BytesLike | BigNumberish): string {\n    let result = hexlify(isBytesLike(value) ? value: toBeArray(value)).substring(2);\n    while (result.startsWith(\"0\")) { result = result.substring(1); }\n    if (result === \"\") { result = \"0\"; }\n    return \"0x\" + result;\n}\n", "/**\n *  Events allow for applications to use the observer pattern, which\n *  allows subscribing and publishing events, outside the normal\n *  execution paths.\n *\n *  @_section api/utils/events:Events  [about-events]\n */\nimport { defineProperties } from \"./properties.js\";\n\n/**\n *  A callback function called when a an event is triggered.\n */\nexport type Listener = (...args: Array<any>) => void;\n\n/**\n *  An **EventEmitterable** behaves similar to an EventEmitter\n *  except provides async access to its methods.\n *\n *  An EventEmitter implements the observer pattern.\n */\nexport interface EventEmitterable<T> {\n    /**\n     *  Registers a %%listener%% that is called whenever the\n     *  %%event%% occurs until unregistered.\n     */\n    on(event: T, listener: Listener): Promise<this>;\n\n    /**\n     *  Registers a %%listener%% that is called the next time\n     *  %%event%% occurs.\n     */\n    once(event: T, listener: Listener): Promise<this>;\n\n    /**\n     *  Triggers each listener for %%event%% with the %%args%%.\n     */\n    emit(event: T, ...args: Array<any>): Promise<boolean>;\n\n    /**\n     *  Resolves to the number of listeners for %%event%%.\n     */\n    listenerCount(event?: T): Promise<number>;\n\n    /**\n     *  Resolves to the listeners for %%event%%.\n     */\n    listeners(event?: T): Promise<Array<Listener>>;\n\n    /**\n     *  Unregister the %%listener%% for %%event%%. If %%listener%%\n     *  is unspecified, all listeners are unregistered.\n     */\n    off(event: T, listener?: Listener): Promise<this>;\n\n    /**\n     *  Unregister all listeners for %%event%%.\n     */\n    removeAllListeners(event?: T): Promise<this>;\n\n    /**\n     *  Alias for [[on]].\n     */\n    addListener(event: T, listener: Listener): Promise<this>;\n\n    /**\n     *  Alias for [[off]].\n     */\n    removeListener(event: T, listener: Listener): Promise<this>;\n}\n\n/**\n *  When an [[EventEmitterable]] triggers a [[Listener]], the\n *  callback always ahas one additional argument passed, which is\n *  an **EventPayload**.\n */\nexport class EventPayload<T> {\n    /**\n     *  The event filter.\n     */\n    readonly filter!: T;\n\n    /**\n     *  The **EventEmitterable**.\n     */\n    readonly emitter!: EventEmitterable<T>;\n\n    readonly #listener: null | Listener;\n\n    /**\n     *  Create a new **EventPayload** for %%emitter%% with\n     *  the %%listener%% and for %%filter%%.\n     */\n    constructor(emitter: EventEmitterable<T>, listener: null | Listener, filter: T) {\n        this.#listener = listener;\n        defineProperties<EventPayload<any>>(this, { emitter, filter });\n    }\n\n    /**\n     *  Unregister the triggered listener for future events.\n     */\n    async removeListener(): Promise<void> {\n        if (this.#listener == null) { return; }\n        await this.emitter.off(this.filter, this.#listener);\n    }\n}\n", "/**\n *  Using strings in Ethereum (or any security-basd system) requires\n *  additional care. These utilities attempt to mitigate some of the\n *  safety issues as well as provide the ability to recover and analyse\n *  strings.\n *\n *  @_subsection api/utils:Strings and UTF-8  [about-strings]\n */\nimport { getBytes } from \"./data.js\";\nimport { assertArgument, assertNormalize } from \"./errors.js\";\n\nimport type { BytesLike } from \"./index.js\";\n\n\n///////////////////////////////\n\n/**\n *  The stanard normalization forms.\n */\nexport type UnicodeNormalizationForm = \"NFC\" | \"NFD\" | \"NFKC\" | \"NFKD\";\n\n/**\n *  When using the UTF-8 error API the following errors can be intercepted\n *  and processed as the %%reason%% passed to the [[Utf8ErrorFunc]].\n *\n *  **``\"UNEXPECTED_CONTINUE\"``** - a continuation byte was present where there\n *  was nothing to continue.\n *\n *  **``\"BAD_PREFIX\"``** - an invalid (non-continuation) byte to start a\n *  UTF-8 codepoint was found.\n *\n *  **``\"OVERRUN\"``** - the string is too short to process the expected\n *  codepoint length.\n *\n *  **``\"MISSING_CONTINUE\"``** - a missing continuation byte was expected but\n *  not found. The %%offset%% indicates the index the continuation byte\n *  was expected at.\n *\n *  **``\"OUT_OF_RANGE\"``** - the computed code point is outside the range\n *  for UTF-8. The %%badCodepoint%% indicates the computed codepoint, which was\n *  outside the valid UTF-8 range.\n *\n *  **``\"UTF16_SURROGATE\"``** - the UTF-8 strings contained a UTF-16 surrogate\n *  pair. The %%badCodepoint%% is the computed codepoint, which was inside the\n *  UTF-16 surrogate range.\n *\n *  **``\"OVERLONG\"``** - the string is an overlong representation. The\n *  %%badCodepoint%% indicates the computed codepoint, which has already\n *  been bounds checked.\n *\n *\n *  @returns string\n */\nexport type Utf8ErrorReason = \"UNEXPECTED_CONTINUE\" | \"BAD_PREFIX\" | \"OVERRUN\" |\n    \"MISSING_CONTINUE\" | \"OUT_OF_RANGE\" | \"UTF16_SURROGATE\" | \"OVERLONG\";\n\n\n/**\n *  A callback that can be used with [[toUtf8String]] to analysis or\n *  recovery from invalid UTF-8 data.\n *\n *  Parsing UTF-8 data is done through a simple Finite-State Machine (FSM)\n *  which calls the ``Utf8ErrorFunc`` if a fault is detected.\n *\n *  The %%reason%% indicates where in the FSM execution the fault\n *  occurred and the %%offset%% indicates where the input failed.\n *\n *  The %%bytes%% represents the raw UTF-8 data that was provided and\n *  %%output%% is the current array of UTF-8 code-points, which may\n *  be updated by the ``Utf8ErrorFunc``.\n *\n *  The value of the %%badCodepoint%% depends on the %%reason%%. See\n *  [[Utf8ErrorReason]] for details.\n *\n *  The function should return the number of bytes that should be skipped\n *  when control resumes to the FSM.\n */\nexport type Utf8ErrorFunc = (reason: Utf8ErrorReason, offset: number, bytes: Uint8Array, output: Array<number>, badCodepoint?: number) => number;\n\n\nfunction errorFunc(reason: Utf8ErrorReason, offset: number, bytes: Uint8Array, output: Array<number>, badCodepoint?: number): number {\n    assertArgument(false, `invalid codepoint at offset ${ offset }; ${ reason }`, \"bytes\", bytes);\n}\n\nfunction ignoreFunc(reason: Utf8ErrorReason, offset: number, bytes: Uint8Array, output: Array<number>, badCodepoint?: number): number {\n\n    // If there is an invalid prefix (including stray continuation), skip any additional continuation bytes\n    if (reason === \"BAD_PREFIX\" || reason === \"UNEXPECTED_CONTINUE\") {\n        let i = 0;\n        for (let o = offset + 1; o < bytes.length; o++) {\n            if (bytes[o] >> 6 !== 0x02) { break; }\n            i++;\n        }\n        return i;\n    }\n\n    // This byte runs us past the end of the string, so just jump to the end\n    // (but the first byte was read already read and therefore skipped)\n    if (reason === \"OVERRUN\") {\n        return bytes.length - offset - 1;\n    }\n\n    // Nothing to skip\n    return 0;\n}\n\nfunction replaceFunc(reason: Utf8ErrorReason, offset: number, bytes: Uint8Array, output: Array<number>, badCodepoint?: number): number {\n\n    // Overlong representations are otherwise \"valid\" code points; just non-deistingtished\n    if (reason === \"OVERLONG\") {\n        assertArgument(typeof(badCodepoint) === \"number\", \"invalid bad code point for replacement\", \"badCodepoint\", badCodepoint);\n        output.push(badCodepoint);\n        return 0;\n    }\n\n    // Put the replacement character into the output\n    output.push(0xfffd);\n\n    // Otherwise, process as if ignoring errors\n    return ignoreFunc(reason, offset, bytes, output, badCodepoint);\n}\n\n/**\n *  A handful of popular, built-in UTF-8 error handling strategies.\n *\n *  **``\"error\"``** - throws on ANY illegal UTF-8 sequence or\n *  non-canonical (overlong) codepoints (this is the default)\n *\n *  **``\"ignore\"``** - silently drops any illegal UTF-8 sequence\n *  and accepts non-canonical (overlong) codepoints\n *\n *  **``\"replace\"``** - replace any illegal UTF-8 sequence with the\n *  UTF-8 replacement character (i.e. ``\"\\\\ufffd\"``) and accepts\n *  non-canonical (overlong) codepoints\n *\n *  @returns: Record<\"error\" | \"ignore\" | \"replace\", Utf8ErrorFunc>\n */\nexport const Utf8ErrorFuncs: Readonly<Record<\"error\" | \"ignore\" | \"replace\", Utf8ErrorFunc>> = Object.freeze({\n    error: errorFunc,\n    ignore: ignoreFunc,\n    replace: replaceFunc\n});\n\n// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499\nfunction getUtf8CodePoints(_bytes: BytesLike, onError?: Utf8ErrorFunc): Array<number> {\n    if (onError == null) { onError = Utf8ErrorFuncs.error; }\n\n    const bytes = getBytes(_bytes, \"bytes\");\n\n    const result: Array<number> = [];\n    let i = 0;\n\n    // Invalid bytes are ignored\n    while(i < bytes.length) {\n\n        const c = bytes[i++];\n\n        // 0xxx xxxx\n        if (c >> 7 === 0) {\n            result.push(c);\n            continue;\n        }\n\n        // Multibyte; how many bytes left for this character?\n        let extraLength: null | number = null;\n        let overlongMask: null | number = null;\n\n        // 110x xxxx 10xx xxxx\n        if ((c & 0xe0) === 0xc0) {\n            extraLength = 1;\n            overlongMask = 0x7f;\n\n        // 1110 xxxx 10xx xxxx 10xx xxxx\n        } else if ((c & 0xf0) === 0xe0) {\n            extraLength = 2;\n            overlongMask = 0x7ff;\n\n        // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx\n        } else if ((c & 0xf8) === 0xf0) {\n            extraLength = 3;\n            overlongMask = 0xffff;\n\n        } else {\n            if ((c & 0xc0) === 0x80) {\n                i += onError(\"UNEXPECTED_CONTINUE\", i - 1, bytes, result);\n            } else {\n                i += onError(\"BAD_PREFIX\", i - 1, bytes, result);\n            }\n            continue;\n        }\n\n        // Do we have enough bytes in our data?\n        if (i - 1 + extraLength >= bytes.length) {\n            i += onError(\"OVERRUN\", i - 1, bytes, result);\n            continue;\n        }\n\n        // Remove the length prefix from the char\n        let res: null | number = c & ((1 << (8 - extraLength - 1)) - 1);\n\n        for (let j = 0; j < extraLength; j++) {\n            let nextChar = bytes[i];\n\n            // Invalid continuation byte\n            if ((nextChar & 0xc0) != 0x80) {\n                i += onError(\"MISSING_CONTINUE\", i, bytes, result);\n                res = null;\n                break;\n            };\n\n            res = (res << 6) | (nextChar & 0x3f);\n            i++;\n        }\n\n        // See above loop for invalid continuation byte\n        if (res === null) { continue; }\n\n        // Maximum code point\n        if (res > 0x10ffff) {\n            i += onError(\"OUT_OF_RANGE\", i - 1 - extraLength, bytes, result, res);\n            continue;\n        }\n\n        // Reserved for UTF-16 surrogate halves\n        if (res >= 0xd800 && res <= 0xdfff) {\n            i += onError(\"UTF16_SURROGATE\", i - 1 - extraLength, bytes, result, res);\n            continue;\n        }\n\n        // Check for overlong sequences (more bytes than needed)\n        if (res <= overlongMask) {\n            i += onError(\"OVERLONG\", i - 1 - extraLength, bytes, result, res);\n            continue;\n        }\n\n        result.push(res);\n    }\n\n    return result;\n}\n\n// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\n\n/**\n *  Returns the UTF-8 byte representation of %%str%%.\n *\n *  If %%form%% is specified, the string is normalized.\n */\nexport function toUtf8Bytes(str: string, form?: UnicodeNormalizationForm): Uint8Array {\n    assertArgument(typeof(str) === \"string\", \"invalid string value\", \"str\", str);\n\n    if (form != null) {\n        assertNormalize(form);\n        str = str.normalize(form);\n    }\n\n    let result: Array<number> = [];\n    for (let i = 0; i < str.length; i++) {\n        const c = str.charCodeAt(i);\n\n        if (c < 0x80) {\n            result.push(c);\n\n        } else if (c < 0x800) {\n            result.push((c >> 6) | 0xc0);\n            result.push((c & 0x3f) | 0x80);\n\n        } else if ((c & 0xfc00) == 0xd800) {\n            i++;\n            const c2 = str.charCodeAt(i);\n\n            assertArgument(i < str.length && ((c2 & 0xfc00) === 0xdc00),\n                \"invalid surrogate pair\", \"str\", str);\n\n            // Surrogate Pair\n            const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\n            result.push((pair >> 18) | 0xf0);\n            result.push(((pair >> 12) & 0x3f) | 0x80);\n            result.push(((pair >> 6) & 0x3f) | 0x80);\n            result.push((pair & 0x3f) | 0x80);\n\n        } else {\n            result.push((c >> 12) | 0xe0);\n            result.push(((c >> 6) & 0x3f) | 0x80);\n            result.push((c & 0x3f) | 0x80);\n        }\n    }\n\n    return new Uint8Array(result);\n};\n\n//export \nfunction _toUtf8String(codePoints: Array<number>): string {\n    return codePoints.map((codePoint) => {\n        if (codePoint <= 0xffff) {\n            return String.fromCharCode(codePoint);\n        }\n        codePoint -= 0x10000;\n        return String.fromCharCode(\n            (((codePoint >> 10) & 0x3ff) + 0xd800),\n            ((codePoint & 0x3ff) + 0xdc00)\n        );\n    }).join(\"\");\n}\n\n/**\n *  Returns the string represented by the UTF-8 data %%bytes%%.\n *\n *  When %%onError%% function is specified, it is called on UTF-8\n *  errors allowing recovery using the [[Utf8ErrorFunc]] API.\n *  (default: [error](Utf8ErrorFuncs))\n */\nexport function toUtf8String(bytes: BytesLike, onError?: Utf8ErrorFunc): string {\n    return _toUtf8String(getUtf8CodePoints(bytes, onError));\n}\n\n/**\n *  Returns the UTF-8 code-points for %%str%%.\n *\n *  If %%form%% is specified, the string is normalized.\n */\nexport function toUtf8CodePoints(str: string, form?: UnicodeNormalizationForm): Array<number> {\n    return getUtf8CodePoints(toUtf8Bytes(str, form));\n}\n\n", "//See: https://github.com/ethereum/wiki/wiki/RLP\n\nimport { getBytes } from \"./data.js\";\n\nimport type { RlpStructuredDataish } from \"./rlp.js\";\n\n\nfunction arrayifyInteger(value: number): Array<number> {\n    const result: Array<number> = [];\n    while (value) {\n        result.unshift(value & 0xff);\n        value >>= 8;\n    }\n    return result;\n}\n\nfunction _encode(object: Array<any> | string | Uint8Array): Array<number> {\n    if (Array.isArray(object)) {\n        let payload: Array<number> = [];\n        object.forEach(function(child) {\n            payload = payload.concat(_encode(child));\n        });\n\n        if (payload.length <= 55) {\n            payload.unshift(0xc0 + payload.length)\n            return payload;\n        }\n\n        const length = arrayifyInteger(payload.length);\n        length.unshift(0xf7 + length.length);\n\n        return length.concat(payload);\n\n    }\n\n    const data: Array<number> = Array.prototype.slice.call(getBytes(object, \"object\"));\n\n    if (data.length === 1 && data[0] <= 0x7f) {\n        return data;\n\n    } else if (data.length <= 55) {\n        data.unshift(0x80 + data.length);\n        return data;\n    }\n\n    const length = arrayifyInteger(data.length);\n    length.unshift(0xb7 + length.length);\n\n    return length.concat(data);\n}\n\nconst nibbles = \"0123456789abcdef\";\n\n/**\n *  Encodes %%object%% as an RLP-encoded [[DataHexString]].\n */\nexport function encodeRlp(object: RlpStructuredDataish): string {\n    let result = \"0x\";\n    for (const v of _encode(object)) {\n        result += nibbles[v >> 4];\n        result += nibbles[v & 0xf];\n    }\n    return result;\n}\n", "\nimport {\n    defineProperties, concat, getBytesCopy, getNumber, hexlify,\n    toBeArray, toBigInt, toNumber,\n    assert, assertArgument\n    /*, isError*/\n} from \"../../utils/index.js\";\n\nimport type { BigNumberish, BytesLike } from \"../../utils/index.js\";\n\n/**\n * @_ignore:\n */\nexport const WordSize: number = 32;\nconst Padding = new Uint8Array(WordSize);\n\n// Properties used to immediate pass through to the underlying object\n// - `then` is used to detect if an object is a Promise for await\nconst passProperties = [ \"then\" ];\n\nconst _guard = { };\n\nconst resultNames: WeakMap<Result, ReadonlyArray<null | string>> = new WeakMap();\n\nfunction getNames(result: Result): ReadonlyArray<null | string> {\n    return resultNames.get(result)!;\n}\nfunction setNames(result: Result, names: ReadonlyArray<null | string>): void {\n    resultNames.set(result, names);\n}\n\nfunction throwError(name: string, error: Error): never {\n    const wrapped = new Error(`deferred error during ABI decoding triggered accessing ${ name }`);\n    (<any>wrapped).error = error;\n    throw wrapped;\n}\n\nfunction toObject(names: ReadonlyArray<null | string>, items: Result, deep?: boolean): Record<string, any> | Array<any> {\n    if (names.indexOf(null) >= 0) {\n        return items.map((item, index) => {\n            if (item instanceof Result) {\n                return toObject(getNames(item), item, deep);\n            }\n            return item;\n        });\n    }\n\n    return (<Array<string>>names).reduce((accum, name, index) => {\n        let item = items.getValue(name);\n        if (!(name in accum)) {\n            if (deep && item instanceof Result) {\n                item = toObject(getNames(item), item, deep);\n            }\n            accum[name] = item;\n        }\n        return accum;\n    }, <Record<string, any>>{ });\n}\n\n\n/**\n *  A [[Result]] is a sub-class of Array, which allows accessing any\n *  of its values either positionally by its index or, if keys are\n *  provided by its name.\n *\n *  @_docloc: api/abi\n */\nexport class Result extends Array<any> {\n    // No longer used; but cannot be removed as it will remove the\n    // #private field from the .d.ts which may break backwards\n    // compatibility\n    readonly #names: ReadonlyArray<null | string>;\n\n    [ K: string | number ]: any\n\n    /**\n     *  @private\n     */\n    constructor(...args: Array<any>) {\n        // To properly sub-class Array so the other built-in\n        // functions work, the constructor has to behave fairly\n        // well. So, in the event we are created via fromItems()\n        // we build the read-only Result object we want, but on\n        // any other input, we use the default constructor\n\n        // constructor(guard: any, items: Array<any>, keys?: Array<null | string>);\n        const guard = args[0];\n        let items: Array<any> = args[1];\n        let names: Array<null | string> = (args[2] || [ ]).slice();\n\n        let wrap = true;\n        if (guard !== _guard) {\n            items = args;\n            names = [ ];\n            wrap = false;\n        }\n\n        // Can't just pass in ...items since an array of length 1\n        // is a special case in the super.\n        super(items.length);\n        items.forEach((item, index) => { this[index] = item; });\n\n        // Find all unique keys\n        const nameCounts = names.reduce((accum, name) => {\n            if (typeof(name) === \"string\") {\n                accum.set(name, (accum.get(name) || 0) + 1);\n            }\n            return accum;\n        }, <Map<string, number>>(new Map()));\n\n        // Remove any key thats not unique\n        setNames(this, Object.freeze(items.map((item, index) => {\n            const name = names[index];\n            if (name != null && nameCounts.get(name) === 1) {\n                return name;\n            }\n            return null;\n        })));\n\n        // Dummy operations to prevent TypeScript from complaining\n        this.#names = [ ];\n        if (this.#names == null) { void(this.#names); }\n\n        if (!wrap) { return; }\n\n        // A wrapped Result is immutable\n        Object.freeze(this);\n\n        // Proxy indices and names so we can trap deferred errors\n        const proxy = new Proxy(this, {\n            get: (target, prop, receiver) => {\n                if (typeof(prop) === \"string\") {\n\n                    // Index accessor\n                    if (prop.match(/^[0-9]+$/)) {\n                        const index = getNumber(prop, \"%index\");\n                        if (index < 0 || index >= this.length) {\n                            throw new RangeError(\"out of result range\");\n                        }\n\n                        const item = target[index];\n                        if (item instanceof Error) {\n                            throwError(`index ${ index }`, item);\n                        }\n                        return item;\n                    }\n\n                    // Pass important checks (like `then` for Promise) through\n                    if (passProperties.indexOf(prop) >= 0) {\n                        return Reflect.get(target, prop, receiver);\n                    }\n\n                    const value = target[prop];\n                    if (value instanceof Function) {\n                        // Make sure functions work with private variables\n                        // See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy#no_private_property_forwarding\n                        return function(this: any, ...args: Array<any>) {\n                            return value.apply((this === receiver) ? target: this, args);\n                        };\n\n                    } else if (!(prop in target)) {\n                        // Possible name accessor\n                        return target.getValue.apply((this === receiver) ? target: this, [ prop ]);\n                    }\n                }\n\n                return Reflect.get(target, prop, receiver);\n            }\n        });\n        setNames(proxy, getNames(this));\n        return proxy;\n    }\n\n    /**\n     *  Returns the Result as a normal Array. If %%deep%%, any children\n     *  which are Result objects are also converted to a normal Array.\n     *\n     *  This will throw if there are any outstanding deferred\n     *  errors.\n     */\n    toArray(deep?: boolean): Array<any> {\n        const result: Array<any> = [ ];\n        this.forEach((item, index) => {\n            if (item instanceof Error) { throwError(`index ${ index }`, item); }\n            if (deep && item instanceof Result) {\n                item = item.toArray(deep);\n            }\n            result.push(item);\n        });\n        return result;\n    }\n\n    /**\n     *  Returns the Result as an Object with each name-value pair. If\n     *  %%deep%%, any children which are Result objects are also\n     *  converted to an Object.\n     *\n     *  This will throw if any value is unnamed, or if there are\n     *  any outstanding deferred errors.\n     */\n    toObject(deep?: boolean): Record<string, any> {\n        const names = getNames(this);\n        return names.reduce((accum, name, index) => {\n\n            assert(name != null, `value at index ${ index } unnamed`, \"UNSUPPORTED_OPERATION\", {\n                operation: \"toObject()\"\n            });\n\n            return toObject(names, this, deep);\n        }, <Record<string, any>>{});\n    }\n\n    /**\n     *  @_ignore\n     */\n    slice(start?: number | undefined, end?: number | undefined): Result {\n        if (start == null) { start = 0; }\n        if (start < 0) {\n            start += this.length;\n            if (start < 0) { start = 0; }\n        }\n\n        if (end == null) { end = this.length; }\n        if (end < 0) {\n            end += this.length;\n            if (end < 0) { end = 0; }\n        }\n        if (end > this.length) { end = this.length; }\n\n        const _names = getNames(this);\n\n        const result: Array<any> = [ ], names: Array<null | string> = [ ];\n        for (let i = start; i < end; i++) {\n            result.push(this[i]);\n            names.push(_names[i]);\n        }\n\n        return new Result(_guard, result, names);\n    }\n\n    /**\n     *  @_ignore\n     */\n    filter(callback: (el: any, index: number, array: Result) => boolean, thisArg?: any): Result {\n        const _names = getNames(this);\n\n        const result: Array<any> = [ ], names: Array<null | string> = [ ];\n        for (let i = 0; i < this.length; i++) {\n            const item = this[i];\n            if (item instanceof Error) {\n                throwError(`index ${ i }`, item);\n            }\n\n            if (callback.call(thisArg, item, i, this)) {\n                result.push(item);\n                names.push(_names[i]);\n            }\n        }\n\n        return new Result(_guard, result, names);\n    }\n\n    /**\n     *  @_ignore\n     */\n    map<T extends any = any>(callback: (el: any, index: number, array: Result) => T, thisArg?: any): Array<T> {\n        const result: Array<T> = [ ];\n        for (let i = 0; i < this.length; i++) {\n            const item = this[i];\n            if (item instanceof Error) {\n                throwError(`index ${ i }`, item);\n            }\n\n            result.push(callback.call(thisArg, item, i, this));\n        }\n\n        return result;\n    }\n\n\n    /**\n     *  Returns the value for %%name%%.\n     *\n     *  Since it is possible to have a key whose name conflicts with\n     *  a method on a [[Result]] or its superclass Array, or any\n     *  JavaScript keyword, this ensures all named values are still\n     *  accessible by name.\n     */\n    getValue(name: string): any {\n        const index = getNames(this).indexOf(name);\n        if (index === -1) { return undefined; }\n\n        const value = this[index];\n\n        if (value instanceof Error) {\n            throwError(`property ${ JSON.stringify(name) }`, (<any>value).error);\n        }\n\n        return value;\n    }\n\n    /**\n     *  Creates a new [[Result]] for %%items%% with each entry\n     *  also accessible by its corresponding name in %%keys%%.\n     */\n    static fromItems(items: Array<any>, keys?: Array<null | string>): Result {\n        return new Result(_guard, items, keys);\n    }\n}\n\n/**\n *  Returns all errors found in a [[Result]].\n *\n *  Since certain errors encountered when creating a [[Result]] do\n *  not impact the ability to continue parsing data, they are\n *  deferred until they are actually accessed. Hence a faulty string\n *  in an Event that is never used does not impact the program flow.\n *\n *  However, sometimes it may be useful to access, identify or\n *  validate correctness of a [[Result]].\n *\n *  @_docloc api/abi\n */\nexport function checkResultErrors(result: Result): Array<{ path: Array<string | number>, error: Error }> {\n    // Find the first error (if any)\n    const errors: Array<{ path: Array<string | number>, error: Error }> = [ ];\n\n    const checkErrors = function(path: Array<string | number>, object: any): void {\n        if (!Array.isArray(object)) { return; }\n        for (let key in object) {\n            const childPath = path.slice();\n            childPath.push(key);\n\n            try {\n                 checkErrors(childPath, object[key]);\n            } catch (error: any) {\n                errors.push({ path: childPath, error: error });\n            }\n        }\n    }\n    checkErrors([ ], result);\n\n    return errors;\n\n}\n\nfunction getValue(value: BigNumberish): Uint8Array {\n    let bytes = toBeArray(value);\n\n    assert (bytes.length <= WordSize, \"value out-of-bounds\",\n        \"BUFFER_OVERRUN\", { buffer: bytes, length: WordSize, offset: bytes.length });\n\n    if (bytes.length !== WordSize) {\n        bytes = getBytesCopy(concat([ Padding.slice(bytes.length % WordSize), bytes ]));\n    }\n\n    return bytes;\n}\n\n/**\n *  @_ignore\n */\nexport abstract class Coder {\n\n    // The coder name:\n    //   - address, uint256, tuple, array, etc.\n    readonly name!: string;\n\n    // The fully expanded type, including composite types:\n    //   - address, uint256, tuple(address,bytes), uint256[3][4][],  etc.\n    readonly type!: string;\n\n    // The localName bound in the signature, in this example it is \"baz\":\n    //   - tuple(address foo, uint bar) baz\n    readonly localName!: string;\n\n    // Whether this type is dynamic:\n    //  - Dynamic: bytes, string, address[], tuple(boolean[]), etc.\n    //  - Not Dynamic: address, uint256, boolean[3], tuple(address, uint8)\n    readonly dynamic!: boolean;\n\n    constructor(name: string, type: string, localName: string, dynamic: boolean) {\n        defineProperties<Coder>(this, { name, type, localName, dynamic }, {\n            name: \"string\", type: \"string\", localName: \"string\", dynamic: \"boolean\"\n        });\n    }\n\n    _throwError(message: string, value: any): never {\n        assertArgument(false, message, this.localName, value);\n    }\n\n    abstract encode(writer: Writer, value: any): number;\n    abstract decode(reader: Reader): any;\n\n    abstract defaultValue(): any;\n}\n\n/**\n *  @_ignore\n */\nexport class Writer {\n    // An array of WordSize lengthed objects to concatenation\n    #data: Array<Uint8Array>;\n    #dataLength: number;\n\n    constructor() {\n        this.#data = [ ];\n        this.#dataLength = 0;\n    }\n\n    get data(): string {\n        return concat(this.#data);\n    }\n    get length(): number { return this.#dataLength; }\n\n    #writeData(data: Uint8Array): number {\n        this.#data.push(data);\n        this.#dataLength += data.length;\n        return data.length;\n    }\n\n    appendWriter(writer: Writer): number {\n        return this.#writeData(getBytesCopy(writer.data));\n    }\n\n    // Arrayish item; pad on the right to *nearest* WordSize\n    writeBytes(value: BytesLike): number {\n        let bytes = getBytesCopy(value);\n        const paddingOffset = bytes.length % WordSize;\n        if (paddingOffset) {\n            bytes = getBytesCopy(concat([ bytes, Padding.slice(paddingOffset) ]))\n        }\n        return this.#writeData(bytes);\n    }\n\n    // Numeric item; pad on the left *to* WordSize\n    writeValue(value: BigNumberish): number {\n        return this.#writeData(getValue(value));\n    }\n\n    // Inserts a numeric place-holder, returning a callback that can\n    // be used to asjust the value later\n    writeUpdatableValue(): (value: BigNumberish) => void {\n        const offset = this.#data.length;\n        this.#data.push(Padding);\n        this.#dataLength += WordSize;\n        return (value: BigNumberish) => {\n            this.#data[offset] = getValue(value);\n        };\n    }\n}\n\n/**\n *  @_ignore\n */\nexport class Reader {\n    // Allows incomplete unpadded data to be read; otherwise an error\n    // is raised if attempting to overrun the buffer. This is required\n    // to deal with an old Solidity bug, in which event data for\n    // external (not public thoguh) was tightly packed.\n    readonly allowLoose!: boolean;\n\n    readonly #data: Uint8Array;\n    #offset: number;\n\n    #bytesRead: number;\n    #parent: null | Reader;\n    #maxInflation: number;\n\n    constructor(data: BytesLike, allowLoose?: boolean, maxInflation?: number) {\n        defineProperties<Reader>(this, { allowLoose: !!allowLoose });\n\n        this.#data = getBytesCopy(data);\n        this.#bytesRead = 0;\n        this.#parent = null;\n        this.#maxInflation = (maxInflation != null) ? maxInflation: 1024;\n\n        this.#offset = 0;\n    }\n\n    get data(): string { return hexlify(this.#data); }\n    get dataLength(): number { return this.#data.length; }\n    get consumed(): number { return this.#offset; }\n    get bytes(): Uint8Array { return new Uint8Array(this.#data); }\n\n    #incrementBytesRead(count: number): void {\n        if (this.#parent) { return this.#parent.#incrementBytesRead(count); }\n\n        this.#bytesRead += count;\n\n        // Check for excessive inflation (see: #4537)\n        assert(this.#maxInflation < 1 || this.#bytesRead <= this.#maxInflation * this.dataLength, `compressed ABI data exceeds inflation ratio of ${ this.#maxInflation } ( see: https:/\\/github.com/ethers-io/ethers.js/issues/4537 )`,  \"BUFFER_OVERRUN\", {\n            buffer: getBytesCopy(this.#data), offset: this.#offset,\n            length: count, info: {\n                bytesRead: this.#bytesRead,\n                dataLength: this.dataLength\n            }\n        });\n    }\n\n    #peekBytes(offset: number, length: number, loose?: boolean): Uint8Array {\n        let alignedLength = Math.ceil(length / WordSize) * WordSize;\n        if (this.#offset + alignedLength > this.#data.length) {\n            if (this.allowLoose && loose && this.#offset + length <= this.#data.length) {\n                alignedLength = length;\n            } else {\n                assert(false, \"data out-of-bounds\", \"BUFFER_OVERRUN\", {\n                    buffer: getBytesCopy(this.#data),\n                    length: this.#data.length,\n                    offset: this.#offset + alignedLength\n                });\n            }\n        }\n        return this.#data.slice(this.#offset, this.#offset + alignedLength)\n    }\n\n    // Create a sub-reader with the same underlying data, but offset\n    subReader(offset: number): Reader {\n        const reader = new Reader(this.#data.slice(this.#offset + offset), this.allowLoose, this.#maxInflation);\n        reader.#parent = this;\n        return reader;\n    }\n\n    // Read bytes\n    readBytes(length: number, loose?: boolean): Uint8Array {\n        let bytes = this.#peekBytes(0, length, !!loose);\n        this.#incrementBytesRead(length);\n        this.#offset += bytes.length;\n        // @TODO: Make sure the length..end bytes are all 0?\n        return bytes.slice(0, length);\n    }\n\n    // Read a numeric values\n    readValue(): bigint {\n        return toBigInt(this.readBytes(WordSize));\n    }\n\n    readIndex(): number {\n        return toNumber(this.readBytes(WordSize));\n    }\n}\n", "function number(n: number) {\n  if (!Number.isSafeInteger(n) || n < 0) throw new Error(`Wrong positive integer: ${n}`);\n}\n\nfunction bool(b: boolean) {\n  if (typeof b !== 'boolean') throw new Error(`Expected boolean, not ${b}`);\n}\n\nfunction bytes(b: Uint8Array | undefined, ...lengths: number[]) {\n  if (!(b instanceof Uint8Array)) throw new Error('Expected Uint8Array');\n  if (lengths.length > 0 && !lengths.includes(b.length))\n    throw new Error(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);\n}\n\ntype Hash = {\n  (data: Uint8Array): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create: any;\n};\nfunction hash(hash: Hash) {\n  if (typeof hash !== 'function' || typeof hash.create !== 'function')\n    throw new Error('Hash should be wrapped by utils.wrapConstructor');\n  number(hash.outputLen);\n  number(hash.blockLen);\n}\n\nfunction exists(instance: any, checkFinished = true) {\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}\nfunction output(out: any, instance: any) {\n  bytes(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\nexport { number, bool, bytes, hash, exists, output };\n\nconst assert = { number, bool, bytes, hash, exists, output };\nexport default assert;\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, we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\n\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\nconst u8a = (a: any): a is Uint8Array => a instanceof Uint8Array;\n// Cast array to different type\nexport const u8 = (arr: TypedArray) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr: TypedArray) =>\n  new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n\n// Cast array to view\nexport const createView = (arr: TypedArray) =>\n  new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word: number, shift: number) => (word << (32 - shift)) | (word >>> shift);\n\n// big-endian hardware is rare. Just in case someone still decides to run hashes:\n// early-throw an error because we don't support BE yet.\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\nif (!isLE) throw new Error('Non little-endian hardware is not supported');\n\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  if (!u8a(bytes)) throw new Error('Uint8Array expected');\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/**\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  const len = hex.length;\n  if (len % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + len);\n  const array = new Uint8Array(len / 2);\n  for (let i = 0; i < array.length; i++) {\n    const j = i * 2;\n    const hexByte = hex.slice(j, j + 2);\n    const byte = Number.parseInt(hexByte, 16);\n    if (Number.isNaN(byte) || byte < 0) throw new Error('Invalid byte sequence');\n    array[i] = byte;\n  }\n  return array;\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.\nexport const nextTick = async () => {};\n\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters: number, tick: number, cb: (i: number) => 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 in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\nexport type Input = Uint8Array | string;\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  if (!u8a(data)) throw new Error(`expected Uint8Array, got ${typeof data}`);\n  return data;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n  let pad = 0; // walk through each item, ensure they have proper type\n  arrays.forEach((a) => {\n    if (!u8a(a)) throw new Error('Uint8Array expected');\n    r.set(a, pad);\n    pad += a.length;\n  });\n  return r;\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  clone(): T {\n    return this._cloneInto();\n  }\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\nconst toStr = {}.toString;\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && toStr.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\nexport type CHash = ReturnType<typeof wrapConstructor>;\n\nexport function wrapConstructor<T extends Hash<T>>(hashCons: () => Hash<T>) {\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 wrapConstructorWithOpts<H extends Hash<H>, T extends Object>(\n  hashCons: (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 wrapXOFConstructorWithOpts<H extends HashXOF<H>, T extends Object>(\n  hashCons: (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}\n\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n  if (crypto && typeof crypto.getRandomValues === 'function') {\n    return crypto.getRandomValues(new Uint8Array(bytesLength));\n  }\n  throw new Error('crypto.getRandomValues must be defined');\n}\n", "const U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n\n// We are not using BigUint64Array, because they are extremely slow as per 2022\nfunction fromBig(n: bigint, le = false) {\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) {\n  let Ah = new Uint32Array(lst.length);\n  let Al = new Uint32Array(lst.length);\n  for (let i = 0; i < lst.length; 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(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h: number, _l: number, s: number) => h >>> s;\nconst shrSL = (h: number, l: number, s: number) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h: number, l: number, s: number) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h: number, l: number, s: 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) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h: number, l: number, s: number) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h: number, l: number) => l;\nconst rotr32L = (h: number, _l: number) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h: number, l: number, s: number) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h: number, l: number, s: 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) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h: number, l: number, s: 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(Ah: number, Al: number, Bh: number, Bl: number) {\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) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number) =>\n  (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number) =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number) =>\n  (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: 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) =>\n  (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nexport {\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};\n// prettier-ignore\nconst u64 = {\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", "import { bytes, exists, number, output } from './_assert.js';\nimport { rotlBH, rotlBL, rotlSH, rotlSL, split } from './_u64.js';\nimport {\n  Hash,\n  u32,\n  Input,\n  toBytes,\n  wrapConstructor,\n  wrapXOFConstructorWithOpts,\n  HashXOF,\n} from './utils.js';\n\n// SHA3 (keccak) is based on a new design: basically, the internal state is bigger than output size.\n// It's called a sponge function.\n\n// Various per round constants calculations\nconst [SHA3_PI, SHA3_ROTL, _SHA3_IOTA]: [number[], number[], bigint[]] = [[], [], []];\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nconst _2n = /* @__PURE__ */ BigInt(2);\nconst _7n = /* @__PURE__ */ BigInt(7);\nconst _256n = /* @__PURE__ */ BigInt(256);\nconst _0x71n = /* @__PURE__ */ BigInt(0x71);\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n  // Pi\n  [x, y] = [y, (2 * x + 3 * y) % 5];\n  SHA3_PI.push(2 * (5 * y + x));\n  // Rotational\n  SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n  // Iota\n  let t = _0n;\n  for (let j = 0; j < 7; j++) {\n    R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n    if (R & _2n) t ^= _1n << ((_1n << /* @__PURE__ */ BigInt(j)) - _1n);\n  }\n  _SHA3_IOTA.push(t);\n}\nconst [SHA3_IOTA_H, SHA3_IOTA_L] = /* @__PURE__ */ split(_SHA3_IOTA, true);\n\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h: number, l: number, s: number) => (s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s));\nconst rotlL = (h: number, l: number, s: number) => (s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s));\n\n// Same as keccakf1600, but allows to skip some rounds\nexport function keccakP(s: Uint32Array, rounds: number = 24) {\n  const B = new Uint32Array(5 * 2);\n  // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n  for (let round = 24 - rounds; round < 24; round++) {\n    // Theta \u03B8\n    for (let x = 0; x < 10; x++) B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n    for (let x = 0; x < 10; x += 2) {\n      const idx1 = (x + 8) % 10;\n      const idx0 = (x + 2) % 10;\n      const B0 = B[idx0];\n      const B1 = B[idx0 + 1];\n      const Th = rotlH(B0, B1, 1) ^ B[idx1];\n      const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n      for (let y = 0; y < 50; y += 10) {\n        s[x + y] ^= Th;\n        s[x + y + 1] ^= Tl;\n      }\n    }\n    // Rho (\u03C1) and Pi (\u03C0)\n    let curH = s[2];\n    let curL = s[3];\n    for (let t = 0; t < 24; t++) {\n      const shift = SHA3_ROTL[t];\n      const Th = rotlH(curH, curL, shift);\n      const Tl = rotlL(curH, curL, shift);\n      const PI = SHA3_PI[t];\n      curH = s[PI];\n      curL = s[PI + 1];\n      s[PI] = Th;\n      s[PI + 1] = Tl;\n    }\n    // Chi (\u03C7)\n    for (let y = 0; y < 50; y += 10) {\n      for (let x = 0; x < 10; x++) B[x] = s[y + x];\n      for (let x = 0; x < 10; x++) s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n    }\n    // Iota (\u03B9)\n    s[0] ^= SHA3_IOTA_H[round];\n    s[1] ^= SHA3_IOTA_L[round];\n  }\n  B.fill(0);\n}\n\nexport class Keccak extends Hash<Keccak> implements HashXOF<Keccak> {\n  protected state: Uint8Array;\n  protected pos = 0;\n  protected posOut = 0;\n  protected finished = false;\n  protected state32: Uint32Array;\n  protected destroyed = false;\n  // NOTE: we accept arguments in bytes instead of bits here.\n  constructor(\n    public blockLen: number,\n    public suffix: number,\n    public outputLen: number,\n    protected enableXOF = false,\n    protected rounds: number = 24\n  ) {\n    super();\n    // Can be passed from user as dkLen\n    number(outputLen);\n    // 1600 = 5x5 matrix of 64bit.  1600 bits === 200 bytes\n    if (0 >= this.blockLen || this.blockLen >= 200)\n      throw new Error('Sha3 supports only keccak-f1600 function');\n    this.state = new Uint8Array(200);\n    this.state32 = u32(this.state);\n  }\n  protected keccak() {\n    keccakP(this.state32, this.rounds);\n    this.posOut = 0;\n    this.pos = 0;\n  }\n  update(data: Input) {\n    exists(this);\n    const { blockLen, state } = this;\n    data = toBytes(data);\n    const len = data.length;\n    for (let pos = 0; pos < len; ) {\n      const take = Math.min(blockLen - this.pos, len - pos);\n      for (let i = 0; i < take; i++) state[this.pos++] ^= data[pos++];\n      if (this.pos === blockLen) this.keccak();\n    }\n    return this;\n  }\n  protected finish() {\n    if (this.finished) return;\n    this.finished = true;\n    const { state, suffix, pos, blockLen } = this;\n    // Do the padding\n    state[pos] ^= suffix;\n    if ((suffix & 0x80) !== 0 && pos === blockLen - 1) this.keccak();\n    state[blockLen - 1] ^= 0x80;\n    this.keccak();\n  }\n  protected writeInto(out: Uint8Array): Uint8Array {\n    exists(this, false);\n    bytes(out);\n    this.finish();\n    const bufferOut = this.state;\n    const { blockLen } = this;\n    for (let pos = 0, len = out.length; pos < len; ) {\n      if (this.posOut >= blockLen) this.keccak();\n      const take = Math.min(blockLen - this.posOut, len - pos);\n      out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n      this.posOut += take;\n      pos += take;\n    }\n    return out;\n  }\n  xofInto(out: Uint8Array): Uint8Array {\n    // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n    if (!this.enableXOF) throw new Error('XOF is not possible for this instance');\n    return this.writeInto(out);\n  }\n  xof(bytes: number): Uint8Array {\n    number(bytes);\n    return this.xofInto(new Uint8Array(bytes));\n  }\n  digestInto(out: Uint8Array) {\n    output(out, this);\n    if (this.finished) throw new Error('digest() was already called');\n    this.writeInto(out);\n    this.destroy();\n    return out;\n  }\n  digest() {\n    return this.digestInto(new Uint8Array(this.outputLen));\n  }\n  destroy() {\n    this.destroyed = true;\n    this.state.fill(0);\n  }\n  _cloneInto(to?: Keccak): Keccak {\n    const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n    to ||= new Keccak(blockLen, suffix, outputLen, enableXOF, rounds);\n    to.state32.set(this.state32);\n    to.pos = this.pos;\n    to.posOut = this.posOut;\n    to.finished = this.finished;\n    to.rounds = rounds;\n    // Suffix can change in cSHAKE\n    to.suffix = suffix;\n    to.outputLen = outputLen;\n    to.enableXOF = enableXOF;\n    to.destroyed = this.destroyed;\n    return to;\n  }\n}\n\nconst gen = (suffix: number, blockLen: number, outputLen: number) =>\n  wrapConstructor(() => new Keccak(blockLen, suffix, outputLen));\n\nexport const sha3_224 = /* @__PURE__ */ gen(0x06, 144, 224 / 8);\n/**\n * SHA3-256 hash function\n * @param message - that would be hashed\n */\nexport const sha3_256 = /* @__PURE__ */ gen(0x06, 136, 256 / 8);\nexport const sha3_384 = /* @__PURE__ */ gen(0x06, 104, 384 / 8);\nexport const sha3_512 = /* @__PURE__ */ gen(0x06, 72, 512 / 8);\nexport const keccak_224 = /* @__PURE__ */ gen(0x01, 144, 224 / 8);\n/**\n * keccak-256 hash function. Different from SHA3-256.\n * @param message - that would be hashed\n */\nexport const keccak_256 = /* @__PURE__ */ gen(0x01, 136, 256 / 8);\nexport const keccak_384 = /* @__PURE__ */ gen(0x01, 104, 384 / 8);\nexport const keccak_512 = /* @__PURE__ */ gen(0x01, 72, 512 / 8);\n\nexport type ShakeOpts = { dkLen?: number };\n\nconst genShake = (suffix: number, blockLen: number, outputLen: number) =>\n  wrapXOFConstructorWithOpts<HashXOF<Keccak>, ShakeOpts>(\n    (opts: ShakeOpts = {}) =>\n      new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true)\n  );\n\nexport const shake128 = /* @__PURE__ */ genShake(0x1f, 168, 128 / 8);\nexport const shake256 = /* @__PURE__ */ genShake(0x1f, 136, 256 / 8);\n", "/**\n *  Cryptographic hashing functions\n *\n *  @_subsection: api/crypto:Hash Functions [about-crypto-hashing]\n */\n\nimport { keccak_256 } from \"@noble/hashes/sha3\";\n\nimport { getBytes, hexlify } from \"../utils/index.js\";\n\nimport type { BytesLike } from \"../utils/index.js\";\n\n\nlet locked = false;\n\nconst _keccak256 = function(data: Uint8Array): Uint8Array {\n    return keccak_256(data);\n}\n\nlet __keccak256: (data: Uint8Array) => BytesLike = _keccak256;\n\n/**\n *  Compute the cryptographic KECCAK256 hash of %%data%%.\n *\n *  The %%data%% **must** be a data representation, to compute the\n *  hash of UTF-8 data use the [[id]] function.\n *\n *  @returns DataHexstring\n *  @example:\n *    keccak256(\"0x\")\n *    //_result:\n *\n *    keccak256(\"0x1337\")\n *    //_result:\n *\n *    keccak256(new Uint8Array([ 0x13, 0x37 ]))\n *    //_result:\n *\n *    // Strings are assumed to be DataHexString, otherwise it will\n *    // throw. To hash UTF-8 data, see the note above.\n *    keccak256(\"Hello World\")\n *    //_error:\n */\nexport function keccak256(_data: BytesLike): string {\n    const data = getBytes(_data, \"data\");\n    return hexlify(__keccak256(data));\n}\nkeccak256._ = _keccak256;\nkeccak256.lock = function(): void { locked = true; }\nkeccak256.register = function(func: (data: Uint8Array) => BytesLike) {\n    if (locked) { throw new TypeError(\"keccak256 is locked\"); }\n    __keccak256 = func;\n}\nObject.freeze(keccak256);\n", "import { keccak256 } from \"../crypto/index.js\";\nimport { getBytes, assertArgument } from \"../utils/index.js\";\n\n\nconst BN_0 = BigInt(0);\nconst BN_36 = BigInt(36);\n\nfunction getChecksumAddress(address: string): string {\n//    if (!isHexString(address, 20)) {\n//        logger.throwArgumentError(\"invalid address\", \"address\", address);\n//    }\n\n    address = address.toLowerCase();\n\n    const chars = address.substring(2).split(\"\");\n\n    const expanded = new Uint8Array(40);\n    for (let i = 0; i < 40; i++) {\n        expanded[i] = chars[i].charCodeAt(0);\n    }\n\n    const hashed = getBytes(keccak256(expanded));\n\n    for (let i = 0; i < 40; i += 2) {\n        if ((hashed[i >> 1] >> 4) >= 8) {\n            chars[i] = chars[i].toUpperCase();\n        }\n        if ((hashed[i >> 1] & 0x0f) >= 8) {\n            chars[i + 1] = chars[i + 1].toUpperCase();\n        }\n    }\n\n    return \"0x\" + chars.join(\"\");\n}\n\n// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number\n\n// Create lookup table\nconst ibanLookup: { [character: string]: string } = { };\nfor (let i = 0; i < 10; i++) { ibanLookup[String(i)] = String(i); }\nfor (let i = 0; i < 26; i++) { ibanLookup[String.fromCharCode(65 + i)] = String(10 + i); }\n\n// How many decimal digits can we process? (for 64-bit float, this is 15)\n// i.e. Math.floor(Math.log10(Number.MAX_SAFE_INTEGER));\nconst safeDigits = 15;\n\nfunction ibanChecksum(address: string): string {\n    address = address.toUpperCase();\n    address = address.substring(4) + address.substring(0, 2) + \"00\";\n\n    let expanded = address.split(\"\").map((c) => { return ibanLookup[c]; }).join(\"\");\n\n    // Javascript can handle integers safely up to 15 (decimal) digits\n    while (expanded.length >= safeDigits){\n        let block = expanded.substring(0, safeDigits);\n        expanded = parseInt(block, 10) % 97 + expanded.substring(block.length);\n    }\n\n    let checksum = String(98 - (parseInt(expanded, 10) % 97));\n    while (checksum.length < 2) { checksum = \"0\" + checksum; }\n\n    return checksum;\n};\n\nconst Base36 = (function() {;\n    const result: Record<string, bigint> = { };\n    for (let i = 0; i < 36; i++) {\n        const key = \"0123456789abcdefghijklmnopqrstuvwxyz\"[i];\n        result[key] = BigInt(i);\n    }\n    return result;\n})();\n\nfunction fromBase36(value: string): bigint {\n    value = value.toLowerCase();\n\n    let result = BN_0;\n    for (let i = 0; i < value.length; i++) {\n        result = result * BN_36 + Base36[value[i]];\n    }\n    return result;\n}\n\n/**\n *  Returns a normalized and checksumed address for %%address%%.\n *  This accepts non-checksum addresses, checksum addresses and\n *  [[getIcapAddress]] formats.\n *\n *  The checksum in Ethereum uses the capitalization (upper-case\n *  vs lower-case) of the characters within an address to encode\n *  its checksum, which offers, on average, a checksum of 15-bits.\n *\n *  If %%address%% contains both upper-case and lower-case, it is\n *  assumed to already be a checksum address and its checksum is\n *  validated, and if the address fails its expected checksum an\n *  error is thrown.\n *\n *  If you wish the checksum of %%address%% to be ignore, it should\n *  be converted to lower-case (i.e. ``.toLowercase()``) before\n *  being passed in. This should be a very rare situation though,\n *  that you wish to bypass the safegaurds in place to protect\n *  against an address that has been incorrectly copied from another\n *  source.\n *\n *  @example:\n *    // Adds the checksum (via upper-casing specific letters)\n *    getAddress(\"0x8ba1f109551bd432803012645ac136ddd64dba72\")\n *    //_result:\n *\n *    // Converts ICAP address and adds checksum\n *    getAddress(\"XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36\");\n *    //_result:\n *\n *    // Throws an error if an address contains mixed case,\n *    // but the checksum fails\n *    getAddress(\"0x8Ba1f109551bD432803012645Ac136ddd64DBA72\")\n *    //_error:\n */\nexport function getAddress(address: string): string {\n\n    assertArgument(typeof(address) === \"string\", \"invalid address\", \"address\", address);\n\n    if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) {\n\n        // Missing the 0x prefix\n        if (!address.startsWith(\"0x\")) { address = \"0x\" + address; }\n\n        const result = getChecksumAddress(address);\n\n        // It is a checksummed address with a bad checksum\n        assertArgument(!address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) || result === address,\n            \"bad address checksum\", \"address\", address);\n\n        return result;\n    }\n\n    // Maybe ICAP? (we only support direct mode)\n    if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) {\n        // It is an ICAP address with a bad checksum\n        assertArgument(address.substring(2, 4) === ibanChecksum(address), \"bad icap checksum\", \"address\", address);\n\n        let result = fromBase36(address.substring(4)).toString(16);\n        while (result.length < 40) { result = \"0\" + result; }\n        return  getChecksumAddress(\"0x\" + result);\n    }\n\n    assertArgument(false, \"invalid address\", \"address\", address);\n}\n\n/**\n *  The [ICAP Address format](link-icap) format is an early checksum\n *  format which attempts to be compatible with the banking\n *  industry [IBAN format](link-wiki-iban) for bank accounts.\n *\n *  It is no longer common or a recommended format.\n *\n *  @example:\n *    getIcapAddress(\"0x8ba1f109551bd432803012645ac136ddd64dba72\");\n *    //_result:\n *\n *    getIcapAddress(\"XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36\");\n *    //_result:\n *\n *    // Throws an error if the ICAP checksum is wrong\n *    getIcapAddress(\"XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK37\");\n *    //_error:\n */\nexport function getIcapAddress(address: string): string {\n    //let base36 = _base16To36(getAddress(address).substring(2)).toUpperCase();\n    let base36 = BigInt(getAddress(address)).toString(36).toUpperCase();\n    while (base36.length < 30) { base36 = \"0\" + base36; }\n    return \"XE\" + ibanChecksum(\"XE00\" + base36) + base36;\n}\n", "import { keccak256 } from \"../crypto/index.js\";\nimport {\n    concat, dataSlice, getBigInt, getBytes, encodeRlp, assertArgument\n} from \"../utils/index.js\";\n\nimport { getAddress } from \"./address.js\";\n\nimport type { BigNumberish, BytesLike } from \"../utils/index.js\";\n\n\n// http://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed\n\n/**\n *  Returns the address that would result from a ``CREATE`` for %%tx%%.\n *\n *  This can be used to compute the address a contract will be\n *  deployed to by an EOA when sending a deployment transaction (i.e.\n *  when the ``to`` address is ``null``).\n *\n *  This can also be used to compute the address a contract will be\n *  deployed to by a contract, by using the contract's address as the\n *  ``to`` and the contract's nonce.\n *\n *  @example\n *    from = \"0x8ba1f109551bD432803012645Ac136ddd64DBA72\";\n *    nonce = 5;\n *\n *    getCreateAddress({ from, nonce });\n *    //_result:\n */\nexport function getCreateAddress(tx: { from: string, nonce: BigNumberish }): string {\n    const from = getAddress(tx.from);\n    const nonce = getBigInt(tx.nonce, \"tx.nonce\");\n\n    let nonceHex = nonce.toString(16);\n    if (nonceHex === \"0\") {\n        nonceHex = \"0x\";\n    } else if (nonceHex.length % 2) {\n        nonceHex = \"0x0\" + nonceHex;\n    } else {\n        nonceHex = \"0x\" + nonceHex;\n    }\n\n    return getAddress(dataSlice(keccak256(encodeRlp([ from, nonceHex ])), 12));\n}\n\n/**\n *  Returns the address that would result from a ``CREATE2`` operation\n *  with the given %%from%%, %%salt%% and %%initCodeHash%%.\n *\n *  To compute the %%initCodeHash%% from a contract's init code, use\n *  the [[keccak256]] function.\n *\n *  For a quick overview and example of ``CREATE2``, see [[link-ricmoo-wisps]].\n *\n *  @example\n *    // The address of the contract\n *    from = \"0x8ba1f109551bD432803012645Ac136ddd64DBA72\"\n *\n *    // The salt\n *    salt = id(\"HelloWorld\")\n *\n *    // The hash of the initCode\n *    initCode = \"0x6394198df16000526103ff60206004601c335afa6040516060f3\";\n *    initCodeHash = keccak256(initCode)\n *\n *    getCreate2Address(from, salt, initCodeHash)\n *    //_result:\n */\nexport function getCreate2Address(_from: string, _salt: BytesLike, _initCodeHash: BytesLike): string {\n    const from = getAddress(_from);\n    const salt = getBytes(_salt, \"salt\");\n    const initCodeHash = getBytes(_initCodeHash, \"initCodeHash\");\n\n    assertArgument(salt.length === 32, \"salt must be 32 bytes\", \"salt\", _salt);\n\n    assertArgument(initCodeHash.length === 32, \"initCodeHash must be 32 bytes\", \"initCodeHash\", _initCodeHash);\n\n    return getAddress(dataSlice(keccak256(concat([ \"0xff\", from, salt, initCodeHash ])), 12))\n}\n", "import { assert, assertArgument } from \"../utils/index.js\";\n\nimport { getAddress } from \"./address.js\";\n\nimport type { Addressable, AddressLike, NameResolver } from \"./index.js\";\n\n\n/**\n *  Returns true if %%value%% is an object which implements the\n *  [[Addressable]] interface.\n *\n *  @example:\n *    // Wallets and AbstractSigner sub-classes\n *    isAddressable(Wallet.createRandom())\n *    //_result:\n *\n *    // Contracts\n *    contract = new Contract(\"dai.tokens.ethers.eth\", [ ], provider)\n *    isAddressable(contract)\n *    //_result:\n */\nexport function isAddressable(value: any): value is Addressable {\n    return (value && typeof(value.getAddress) === \"function\");\n}\n\n/**\n *  Returns true if %%value%% is a valid address.\n *\n *  @example:\n *    // Valid address\n *    isAddress(\"0x8ba1f109551bD432803012645Ac136ddd64DBA72\")\n *    //_result:\n *\n *    // Valid ICAP address\n *    isAddress(\"XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36\")\n *    //_result:\n *\n *    // Invalid checksum\n *    isAddress(\"0x8Ba1f109551bD432803012645Ac136ddd64DBa72\")\n *    //_result:\n *\n *    // Invalid ICAP checksum\n *    isAddress(\"0x8Ba1f109551bD432803012645Ac136ddd64DBA72\")\n *    //_result:\n *\n *    // Not an address (an ENS name requires a provided and an\n *    // asynchronous API to access)\n *    isAddress(\"ricmoo.eth\")\n *    //_result:\n */\nexport function isAddress(value: any): value is string {\n    try {\n        getAddress(value);\n        return true;\n    } catch (error) { }\n    return false;\n}\n\nasync function checkAddress(target: any, promise: Promise<null | string>): Promise<string> {\n    const result = await promise;\n    if (result == null || result === \"0x0000000000000000000000000000000000000000\") {\n        assert(typeof(target) !== \"string\", \"unconfigured name\", \"UNCONFIGURED_NAME\", { value: target });\n        assertArgument(false, \"invalid AddressLike value; did not resolve to a value address\", \"target\", target);\n    }\n    return getAddress(result);\n}\n\n/**\n *  Resolves to an address for the %%target%%, which may be any\n *  supported address type, an [[Addressable]] or a Promise which\n *  resolves to an address.\n *\n *  If an ENS name is provided, but that name has not been correctly\n *  configured a [[UnconfiguredNameError]] is thrown.\n *\n *  @example:\n *    addr = \"0x6B175474E89094C44Da98b954EedeAC495271d0F\"\n *\n *    // Addresses are return synchronously\n *    resolveAddress(addr, provider)\n *    //_result:\n *\n *    // Address promises are resolved asynchronously\n *    resolveAddress(Promise.resolve(addr))\n *    //_result:\n *\n *    // ENS names are resolved asynchronously\n *    resolveAddress(\"dai.tokens.ethers.eth\", provider)\n *    //_result:\n *\n *    // Addressable objects are resolved asynchronously\n *    contract = new Contract(addr, [ ])\n *    resolveAddress(contract, provider)\n *    //_result:\n *\n *    // Unconfigured ENS names reject\n *    resolveAddress(\"nothing-here.ricmoo.eth\", provider)\n *    //_error:\n *\n *    // ENS names require a NameResolver object passed in\n *    // (notice the provider was omitted)\n *    resolveAddress(\"nothing-here.ricmoo.eth\")\n *    //_error:\n */\nexport function resolveAddress(target: AddressLike, resolver?: null | NameResolver): string | Promise<string> {\n\n    if (typeof(target) === \"string\") {\n        if (target.match(/^0x[0-9a-f]{40}$/i)) { return getAddress(target); }\n\n        assert(resolver != null, \"ENS resolution requires a provider\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"resolveName\" });\n\n        return checkAddress(target, resolver.resolveName(target));\n\n    } else if (isAddressable(target)) {\n        return checkAddress(target, target.getAddress());\n\n    } else if (target && typeof(target.then) === \"function\") {\n        return checkAddress(target, target);\n    }\n\n    assertArgument(false, \"unsupported addressable value\", \"target\", target);\n}\n", "/**\n *  A Typed object allows a value to have its type explicitly\n *  specified.\n *\n *  For example, in Solidity, the value ``45`` could represent a\n *  ``uint8`` or a ``uint256``. The value ``0x1234`` could represent\n *  a ``bytes2`` or ``bytes``.\n *\n *  Since JavaScript has no meaningful way to explicitly inform any\n *  APIs which what the type is, this allows transparent interoperation\n *  with Soldity.\n *\n *  @_subsection: api/abi:Typed Values\n */\n\nimport { assertPrivate, defineProperties } from \"../utils/index.js\";\n\nimport type { Addressable } from \"../address/index.js\";\nimport type { BigNumberish, BytesLike } from \"../utils/index.js\";\n\nimport type { Result } from \"./coders/abstract-coder.js\";\n\nconst _gaurd = { };\n\nfunction n(value: BigNumberish, width: number): Typed {\n    let signed = false;\n    if (width < 0) {\n        signed = true;\n        width *= -1;\n    }\n\n    // @TODO: Check range is valid for value\n    return new Typed(_gaurd, `${ signed ? \"\": \"u\" }int${ width }`, value, { signed, width });\n}\n\nfunction b(value: BytesLike, size?: number): Typed {\n    // @TODO: Check range is valid for value\n    return new Typed(_gaurd, `bytes${ (size) ? size: \"\" }`, value, { size });\n}\n\n// @TODO: Remove this in v7, it was replaced by TypedBigInt\n/**\n *  @_ignore:\n */\nexport interface TypedNumber extends Typed {\n    value: number;\n    defaultValue(): number;\n    minValue(): number;\n    maxValue(): number;\n}\n\n/**\n *  A **Typed** that represents a numeric value.\n */\nexport interface TypedBigInt extends Typed {\n    /**\n     *  The value.\n     */\n    value: bigint;\n\n    /**\n     *  The default value for all numeric types is ``0``.\n     */\n    defaultValue(): bigint;\n\n    /**\n     *  The minimum value for this type, accounting for bit-width and signed-ness.\n     */\n    minValue(): bigint;\n\n    /**\n     *  The minimum value for this type, accounting for bit-width.\n     */\n    maxValue(): bigint;\n}\n\n/**\n *  A **Typed** that represents a binary sequence of data as bytes.\n */\nexport interface TypedData extends Typed {\n    /**\n     *  The value.\n     */\n    value: string;\n\n    /**\n     *  The default value for this type.\n     */\n    defaultValue(): string;\n}\n\n/**\n *  A **Typed** that represents a UTF-8 sequence of bytes.\n */\nexport interface TypedString extends Typed {\n    /**\n     *  The value.\n     */\n    value: string;\n\n    /**\n     *  The default value for the string type is the empty string (i.e. ``\"\"``).\n     */\n    defaultValue(): string;\n}\n\nconst _typedSymbol = Symbol.for(\"_ethers_typed\");\n\n/**\n *  The **Typed** class to wrap values providing explicit type information.\n */\nexport class Typed {\n\n    /**\n     *  The type, as a Solidity-compatible type.\n     */\n    readonly type!: string;\n\n    /**\n     *  The actual value.\n     */\n    readonly value!: any;\n\n    readonly #options: any;\n\n    /**\n     *  @_ignore:\n     */\n    readonly _typedSymbol!: Symbol;\n\n    /**\n     *  @_ignore:\n     */\n    constructor(gaurd: any, type: string, value: any, options?: any) {\n        if (options == null) { options = null; }\n        assertPrivate(_gaurd, gaurd, \"Typed\");\n        defineProperties<Typed>(this, { _typedSymbol, type, value });\n        this.#options = options;\n\n        // Check the value is valid\n        this.format();\n    }\n\n    /**\n     *  Format the type as a Human-Readable type.\n     */\n    format(): string {\n        if (this.type === \"array\") {\n            throw new Error(\"\");\n        } else if (this.type === \"dynamicArray\") {\n            throw new Error(\"\");\n        } else if (this.type === \"tuple\") {\n            return `tuple(${ this.value.map((v: Typed) => v.format()).join(\",\") })`\n        }\n\n        return this.type;\n    }\n\n    /**\n     *  The default value returned by this type.\n     */\n    defaultValue(): string | number | bigint | Result {\n        return 0;\n    }\n\n    /**\n     *  The minimum value for numeric types.\n     */\n    minValue(): string | number | bigint {\n        return 0;\n    }\n\n    /**\n     *  The maximum value for numeric types.\n     */\n    maxValue(): string | number | bigint {\n        return 0;\n    }\n\n    /**\n     *  Returns ``true`` and provides a type guard is this is a [[TypedBigInt]].\n     */\n    isBigInt(): this is TypedBigInt {\n        return !!(this.type.match(/^u?int[0-9]+$/));\n    }\n\n    /**\n     *  Returns ``true`` and provides a type guard is this is a [[TypedData]].\n     */\n    isData(): this is TypedData {\n        return this.type.startsWith(\"bytes\");\n    }\n\n    /**\n     *  Returns ``true`` and provides a type guard is this is a [[TypedString]].\n     */\n    isString(): this is TypedString {\n        return (this.type === \"string\");\n    }\n\n    /**\n     *  Returns the tuple name, if this is a tuple. Throws otherwise.\n     */\n    get tupleName(): null | string {\n        if (this.type !== \"tuple\") { throw TypeError(\"not a tuple\"); }\n        return this.#options;\n    }\n\n    // Returns the length of this type as an array\n    // - `null` indicates the length is unforced, it could be dynamic\n    // - `-1` indicates the length is dynamic\n    // - any other value indicates it is a static array and is its length\n\n    /**\n     *  Returns the length of the array type or ``-1`` if it is dynamic.\n     *\n     *  Throws if the type is not an array.\n     */\n    get arrayLength(): null | number {\n        if (this.type !== \"array\") { throw TypeError(\"not an array\"); }\n        if (this.#options === true) { return -1; }\n        if (this.#options === false) { return (<Array<any>>(this.value)).length; }\n        return null;\n    }\n\n    /**\n     *  Returns a new **Typed** of %%type%% with the %%value%%.\n     */\n    static from(type: string, value: any): Typed {\n        return new Typed(_gaurd, type, value);\n    }\n\n    /**\n     *  Return a new ``uint8`` type for %%v%%.\n     */\n    static uint8(v: BigNumberish): Typed { return n(v, 8); }\n\n    /**\n     *  Return a new ``uint16`` type for %%v%%.\n     */\n    static uint16(v: BigNumberish): Typed { return n(v, 16); }\n\n    /**\n     *  Return a new ``uint24`` type for %%v%%.\n     */\n    static uint24(v: BigNumberish): Typed { return n(v, 24); }\n\n    /**\n     *  Return a new ``uint32`` type for %%v%%.\n     */\n    static uint32(v: BigNumberish): Typed { return n(v, 32); }\n\n    /**\n     *  Return a new ``uint40`` type for %%v%%.\n     */\n    static uint40(v: BigNumberish): Typed { return n(v, 40); }\n\n    /**\n     *  Return a new ``uint48`` type for %%v%%.\n     */\n    static uint48(v: BigNumberish): Typed { return n(v, 48); }\n\n    /**\n     *  Return a new ``uint56`` type for %%v%%.\n     */\n    static uint56(v: BigNumberish): Typed { return n(v, 56); }\n\n    /**\n     *  Return a new ``uint64`` type for %%v%%.\n     */\n    static uint64(v: BigNumberish): Typed { return n(v, 64); }\n\n    /**\n     *  Return a new ``uint72`` type for %%v%%.\n     */\n    static uint72(v: BigNumberish): Typed { return n(v, 72); }\n\n    /**\n     *  Return a new ``uint80`` type for %%v%%.\n     */\n    static uint80(v: BigNumberish): Typed { return n(v, 80); }\n\n    /**\n     *  Return a new ``uint88`` type for %%v%%.\n     */\n    static uint88(v: BigNumberish): Typed { return n(v, 88); }\n\n    /**\n     *  Return a new ``uint96`` type for %%v%%.\n     */\n    static uint96(v: BigNumberish): Typed { return n(v, 96); }\n\n    /**\n     *  Return a new ``uint104`` type for %%v%%.\n     */\n    static uint104(v: BigNumberish): Typed { return n(v, 104); }\n\n    /**\n     *  Return a new ``uint112`` type for %%v%%.\n     */\n    static uint112(v: BigNumberish): Typed { return n(v, 112); }\n\n    /**\n     *  Return a new ``uint120`` type for %%v%%.\n     */\n    static uint120(v: BigNumberish): Typed { return n(v, 120); }\n\n    /**\n     *  Return a new ``uint128`` type for %%v%%.\n     */\n    static uint128(v: BigNumberish): Typed { return n(v, 128); }\n\n    /**\n     *  Return a new ``uint136`` type for %%v%%.\n     */\n    static uint136(v: BigNumberish): Typed { return n(v, 136); }\n\n    /**\n     *  Return a new ``uint144`` type for %%v%%.\n     */\n    static uint144(v: BigNumberish): Typed { return n(v, 144); }\n\n    /**\n     *  Return a new ``uint152`` type for %%v%%.\n     */\n    static uint152(v: BigNumberish): Typed { return n(v, 152); }\n\n    /**\n     *  Return a new ``uint160`` type for %%v%%.\n     */\n    static uint160(v: BigNumberish): Typed { return n(v, 160); }\n\n    /**\n     *  Return a new ``uint168`` type for %%v%%.\n     */\n    static uint168(v: BigNumberish): Typed { return n(v, 168); }\n\n    /**\n     *  Return a new ``uint176`` type for %%v%%.\n     */\n    static uint176(v: BigNumberish): Typed { return n(v, 176); }\n\n    /**\n     *  Return a new ``uint184`` type for %%v%%.\n     */\n    static uint184(v: BigNumberish): Typed { return n(v, 184); }\n\n    /**\n     *  Return a new ``uint192`` type for %%v%%.\n     */\n    static uint192(v: BigNumberish): Typed { return n(v, 192); }\n\n    /**\n     *  Return a new ``uint200`` type for %%v%%.\n     */\n    static uint200(v: BigNumberish): Typed { return n(v, 200); }\n\n    /**\n     *  Return a new ``uint208`` type for %%v%%.\n     */\n    static uint208(v: BigNumberish): Typed { return n(v, 208); }\n\n    /**\n     *  Return a new ``uint216`` type for %%v%%.\n     */\n    static uint216(v: BigNumberish): Typed { return n(v, 216); }\n\n    /**\n     *  Return a new ``uint224`` type for %%v%%.\n     */\n    static uint224(v: BigNumberish): Typed { return n(v, 224); }\n\n    /**\n     *  Return a new ``uint232`` type for %%v%%.\n     */\n    static uint232(v: BigNumberish): Typed { return n(v, 232); }\n\n    /**\n     *  Return a new ``uint240`` type for %%v%%.\n     */\n    static uint240(v: BigNumberish): Typed { return n(v, 240); }\n\n    /**\n     *  Return a new ``uint248`` type for %%v%%.\n     */\n    static uint248(v: BigNumberish): Typed { return n(v, 248); }\n\n    /**\n     *  Return a new ``uint256`` type for %%v%%.\n     */\n    static uint256(v: BigNumberish): Typed { return n(v, 256); }\n\n    /**\n     *  Return a new ``uint256`` type for %%v%%.\n     */\n    static uint(v: BigNumberish): Typed { return n(v, 256); }\n\n    /**\n     *  Return a new ``int8`` type for %%v%%.\n     */\n    static int8(v: BigNumberish): Typed { return n(v, -8); }\n\n    /**\n     *  Return a new ``int16`` type for %%v%%.\n     */\n    static int16(v: BigNumberish): Typed { return n(v, -16); }\n\n    /**\n     *  Return a new ``int24`` type for %%v%%.\n     */\n    static int24(v: BigNumberish): Typed { return n(v, -24); }\n\n    /**\n     *  Return a new ``int32`` type for %%v%%.\n     */\n    static int32(v: BigNumberish): Typed { return n(v, -32); }\n\n    /**\n     *  Return a new ``int40`` type for %%v%%.\n     */\n    static int40(v: BigNumberish): Typed { return n(v, -40); }\n\n    /**\n     *  Return a new ``int48`` type for %%v%%.\n     */\n    static int48(v: BigNumberish): Typed { return n(v, -48); }\n\n    /**\n     *  Return a new ``int56`` type for %%v%%.\n     */\n    static int56(v: BigNumberish): Typed { return n(v, -56); }\n\n    /**\n     *  Return a new ``int64`` type for %%v%%.\n     */\n    static int64(v: BigNumberish): Typed { return n(v, -64); }\n\n    /**\n     *  Return a new ``int72`` type for %%v%%.\n     */\n    static int72(v: BigNumberish): Typed { return n(v, -72); }\n\n    /**\n     *  Return a new ``int80`` type for %%v%%.\n     */\n    static int80(v: BigNumberish): Typed { return n(v, -80); }\n\n    /**\n     *  Return a new ``int88`` type for %%v%%.\n     */\n    static int88(v: BigNumberish): Typed { return n(v, -88); }\n\n    /**\n     *  Return a new ``int96`` type for %%v%%.\n     */\n    static int96(v: BigNumberish): Typed { return n(v, -96); }\n\n    /**\n     *  Return a new ``int104`` type for %%v%%.\n     */\n    static int104(v: BigNumberish): Typed { return n(v, -104); }\n\n    /**\n     *  Return a new ``int112`` type for %%v%%.\n     */\n    static int112(v: BigNumberish): Typed { return n(v, -112); }\n\n    /**\n     *  Return a new ``int120`` type for %%v%%.\n     */\n    static int120(v: BigNumberish): Typed { return n(v, -120); }\n\n    /**\n     *  Return a new ``int128`` type for %%v%%.\n     */\n    static int128(v: BigNumberish): Typed { return n(v, -128); }\n\n    /**\n     *  Return a new ``int136`` type for %%v%%.\n     */\n    static int136(v: BigNumberish): Typed { return n(v, -136); }\n\n    /**\n     *  Return a new ``int144`` type for %%v%%.\n     */\n    static int144(v: BigNumberish): Typed { return n(v, -144); }\n\n    /**\n     *  Return a new ``int52`` type for %%v%%.\n     */\n    static int152(v: BigNumberish): Typed { return n(v, -152); }\n\n    /**\n     *  Return a new ``int160`` type for %%v%%.\n     */\n    static int160(v: BigNumberish): Typed { return n(v, -160); }\n\n    /**\n     *  Return a new ``int168`` type for %%v%%.\n     */\n    static int168(v: BigNumberish): Typed { return n(v, -168); }\n\n    /**\n     *  Return a new ``int176`` type for %%v%%.\n     */\n    static int176(v: BigNumberish): Typed { return n(v, -176); }\n\n    /**\n     *  Return a new ``int184`` type for %%v%%.\n     */\n    static int184(v: BigNumberish): Typed { return n(v, -184); }\n\n    /**\n     *  Return a new ``int92`` type for %%v%%.\n     */\n    static int192(v: BigNumberish): Typed { return n(v, -192); }\n\n    /**\n     *  Return a new ``int200`` type for %%v%%.\n     */\n    static int200(v: BigNumberish): Typed { return n(v, -200); }\n\n    /**\n     *  Return a new ``int208`` type for %%v%%.\n     */\n    static int208(v: BigNumberish): Typed { return n(v, -208); }\n\n    /**\n     *  Return a new ``int216`` type for %%v%%.\n     */\n    static int216(v: BigNumberish): Typed { return n(v, -216); }\n\n    /**\n     *  Return a new ``int224`` type for %%v%%.\n     */\n    static int224(v: BigNumberish): Typed { return n(v, -224); }\n\n    /**\n     *  Return a new ``int232`` type for %%v%%.\n     */\n    static int232(v: BigNumberish): Typed { return n(v, -232); }\n\n    /**\n     *  Return a new ``int240`` type for %%v%%.\n     */\n    static int240(v: BigNumberish): Typed { return n(v, -240); }\n\n    /**\n     *  Return a new ``int248`` type for %%v%%.\n     */\n    static int248(v: BigNumberish): Typed { return n(v, -248); }\n\n    /**\n     *  Return a new ``int256`` type for %%v%%.\n     */\n    static int256(v: BigNumberish): Typed { return n(v, -256); }\n\n    /**\n     *  Return a new ``int256`` type for %%v%%.\n     */\n    static int(v: BigNumberish): Typed { return n(v, -256); }\n\n    /**\n     *  Return a new ``bytes1`` type for %%v%%.\n     */\n    static bytes1(v: BytesLike): Typed { return b(v, 1); }\n\n    /**\n     *  Return a new ``bytes2`` type for %%v%%.\n     */\n    static bytes2(v: BytesLike): Typed { return b(v, 2); }\n\n    /**\n     *  Return a new ``bytes3`` type for %%v%%.\n     */\n    static bytes3(v: BytesLike): Typed { return b(v, 3); }\n\n    /**\n     *  Return a new ``bytes4`` type for %%v%%.\n     */\n    static bytes4(v: BytesLike): Typed { return b(v, 4); }\n\n    /**\n     *  Return a new ``bytes5`` type for %%v%%.\n     */\n    static bytes5(v: BytesLike): Typed { return b(v, 5); }\n\n    /**\n     *  Return a new ``bytes6`` type for %%v%%.\n     */\n    static bytes6(v: BytesLike): Typed { return b(v, 6); }\n\n    /**\n     *  Return a new ``bytes7`` type for %%v%%.\n     */\n    static bytes7(v: BytesLike): Typed { return b(v, 7); }\n\n    /**\n     *  Return a new ``bytes8`` type for %%v%%.\n     */\n    static bytes8(v: BytesLike): Typed { return b(v, 8); }\n\n    /**\n     *  Return a new ``bytes9`` type for %%v%%.\n     */\n    static bytes9(v: BytesLike): Typed { return b(v, 9); }\n\n    /**\n     *  Return a new ``bytes10`` type for %%v%%.\n     */\n    static bytes10(v: BytesLike): Typed { return b(v, 10); }\n\n    /**\n     *  Return a new ``bytes11`` type for %%v%%.\n     */\n    static bytes11(v: BytesLike): Typed { return b(v, 11); }\n\n    /**\n     *  Return a new ``bytes12`` type for %%v%%.\n     */\n    static bytes12(v: BytesLike): Typed { return b(v, 12); }\n\n    /**\n     *  Return a new ``bytes13`` type for %%v%%.\n     */\n    static bytes13(v: BytesLike): Typed { return b(v, 13); }\n\n    /**\n     *  Return a new ``bytes14`` type for %%v%%.\n     */\n    static bytes14(v: BytesLike): Typed { return b(v, 14); }\n\n    /**\n     *  Return a new ``bytes15`` type for %%v%%.\n     */\n    static bytes15(v: BytesLike): Typed { return b(v, 15); }\n\n    /**\n     *  Return a new ``bytes16`` type for %%v%%.\n     */\n    static bytes16(v: BytesLike): Typed { return b(v, 16); }\n\n    /**\n     *  Return a new ``bytes17`` type for %%v%%.\n     */\n    static bytes17(v: BytesLike): Typed { return b(v, 17); }\n\n    /**\n     *  Return a new ``bytes18`` type for %%v%%.\n     */\n    static bytes18(v: BytesLike): Typed { return b(v, 18); }\n\n    /**\n     *  Return a new ``bytes19`` type for %%v%%.\n     */\n    static bytes19(v: BytesLike): Typed { return b(v, 19); }\n\n    /**\n     *  Return a new ``bytes20`` type for %%v%%.\n     */\n    static bytes20(v: BytesLike): Typed { return b(v, 20); }\n\n    /**\n     *  Return a new ``bytes21`` type for %%v%%.\n     */\n    static bytes21(v: BytesLike): Typed { return b(v, 21); }\n\n    /**\n     *  Return a new ``bytes22`` type for %%v%%.\n     */\n    static bytes22(v: BytesLike): Typed { return b(v, 22); }\n\n    /**\n     *  Return a new ``bytes23`` type for %%v%%.\n     */\n    static bytes23(v: BytesLike): Typed { return b(v, 23); }\n\n    /**\n     *  Return a new ``bytes24`` type for %%v%%.\n     */\n    static bytes24(v: BytesLike): Typed { return b(v, 24); }\n\n    /**\n     *  Return a new ``bytes25`` type for %%v%%.\n     */\n    static bytes25(v: BytesLike): Typed { return b(v, 25); }\n\n    /**\n     *  Return a new ``bytes26`` type for %%v%%.\n     */\n    static bytes26(v: BytesLike): Typed { return b(v, 26); }\n\n    /**\n     *  Return a new ``bytes27`` type for %%v%%.\n     */\n    static bytes27(v: BytesLike): Typed { return b(v, 27); }\n\n    /**\n     *  Return a new ``bytes28`` type for %%v%%.\n     */\n    static bytes28(v: BytesLike): Typed { return b(v, 28); }\n\n    /**\n     *  Return a new ``bytes29`` type for %%v%%.\n     */\n    static bytes29(v: BytesLike): Typed { return b(v, 29); }\n\n    /**\n     *  Return a new ``bytes30`` type for %%v%%.\n     */\n    static bytes30(v: BytesLike): Typed { return b(v, 30); }\n\n    /**\n     *  Return a new ``bytes31`` type for %%v%%.\n     */\n    static bytes31(v: BytesLike): Typed { return b(v, 31); }\n\n    /**\n     *  Return a new ``bytes32`` type for %%v%%.\n     */\n    static bytes32(v: BytesLike): Typed { return b(v, 32); }\n\n\n    /**\n     *  Return a new ``address`` type for %%v%%.\n     */\n    static address(v: string | Addressable): Typed { return new Typed(_gaurd, \"address\", v); }\n\n    /**\n     *  Return a new ``bool`` type for %%v%%.\n     */\n    static bool(v: any): Typed { return new Typed(_gaurd, \"bool\", !!v); }\n\n    /**\n     *  Return a new ``bytes`` type for %%v%%.\n     */\n    static bytes(v: BytesLike): Typed { return new Typed(_gaurd, \"bytes\", v); }\n\n    /**\n     *  Return a new ``string`` type for %%v%%.\n     */\n    static string(v: string): Typed { return new Typed(_gaurd, \"string\", v); }\n\n\n    /**\n     *  Return a new ``array`` type for %%v%%, allowing %%dynamic%% length.\n     */\n    static array(v: Array<any | Typed>, dynamic?: null | boolean): Typed {\n        throw new Error(\"not implemented yet\");\n        return new Typed(_gaurd, \"array\", v, dynamic);\n    }\n\n\n    /**\n     *  Return a new ``tuple`` type for %%v%%, with the optional %%name%%.\n     */\n    static tuple(v: Array<any | Typed> | Record<string, any | Typed>, name?: string): Typed {\n        throw new Error(\"not implemented yet\");\n        return new Typed(_gaurd, \"tuple\", v, name);\n    }\n\n\n    /**\n     *  Return a new ``uint8`` type for %%v%%.\n     */\n    static overrides(v: Record<string, any>): Typed {\n        return new Typed(_gaurd, \"overrides\", Object.assign({ }, v));\n    }\n\n    /**\n     *  Returns true only if %%value%% is a [[Typed]] instance.\n     */\n    static isTyped(value: any): value is Typed {\n        return (value\n            && typeof(value) === \"object\"\n            && \"_typedSymbol\" in value\n            && value._typedSymbol === _typedSymbol);\n    }\n\n    /**\n     *  If the value is a [[Typed]] instance, validates the underlying value\n     *  and returns it, otherwise returns value directly.\n     *\n     *  This is useful for functions that with to accept either a [[Typed]]\n     *  object or values.\n     */\n    static dereference<T>(value: Typed | T, type: string): T {\n        if (Typed.isTyped(value)) {\n            if (value.type !== type) {\n                throw new Error(`invalid type: expecetd ${ type }, got ${ value.type }`);\n            }\n            return value.value;\n        }\n        return value;\n    }\n}\n", "import { getAddress } from \"../../address/index.js\";\nimport { toBeHex } from \"../../utils/maths.js\";\n\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\n\nimport type { Reader, Writer } from \"./abstract-coder.js\";\n\n\n/**\n *  @_ignore\n */\nexport class AddressCoder extends Coder {\n\n    constructor(localName: string) {\n        super(\"address\", \"address\", localName, false);\n    }\n\n    defaultValue(): string {\n        return \"0x0000000000000000000000000000000000000000\";\n    }\n\n    encode(writer: Writer, _value: string | Typed): number {\n        let value = Typed.dereference(_value, \"string\");\n        try {\n            value = getAddress(value);\n        } catch (error: any) {\n            return this._throwError(error.message, _value);\n        }\n        return writer.writeValue(value);\n    }\n\n    decode(reader: Reader): any {\n        return getAddress(toBeHex(reader.readValue(), 20));\n    }\n}\n", "import { Coder } from \"./abstract-coder.js\";\n\nimport type { Reader, Writer } from \"./abstract-coder.js\";\n\n/**\n *  Clones the functionality of an existing Coder, but without a localName\n *\n *  @_ignore\n */\nexport class AnonymousCoder extends Coder {\n    private coder: Coder;\n\n    constructor(coder: Coder) {\n        super(coder.name, coder.type, \"_\", coder.dynamic);\n        this.coder = coder;\n    }\n\n    defaultValue(): any {\n        return this.coder.defaultValue();\n    }\n\n    encode(writer: Writer, value: any): number {\n        return this.coder.encode(writer, value);\n    }\n\n    decode(reader: Reader): any {\n        return this.coder.decode(reader);\n    }\n}\n", "import {\n    defineProperties, isError, assert, assertArgument, assertArgumentCount\n} from \"../../utils/index.js\";\n\nimport { Typed } from \"../typed.js\";\n\nimport { Coder, Result, WordSize, Writer } from \"./abstract-coder.js\";\nimport { AnonymousCoder } from \"./anonymous.js\";\n\nimport type { Reader } from \"./abstract-coder.js\";\n\n/**\n *  @_ignore\n */\nexport function pack(writer: Writer, coders: ReadonlyArray<Coder>, values: Array<any> | { [ name: string ]: any }): number {\n    let arrayValues: Array<any> = [ ];\n\n    if (Array.isArray(values)) {\n       arrayValues = values;\n\n    } else if (values && typeof(values) === \"object\") {\n        let unique: { [ name: string ]: boolean } = { };\n\n        arrayValues = coders.map((coder) => {\n            const name = coder.localName;\n            assert(name, \"cannot encode object for signature with missing names\",\n                \"INVALID_ARGUMENT\", { argument: \"values\", info: { coder }, value: values });\n\n            assert(!unique[name], \"cannot encode object for signature with duplicate names\",\n                \"INVALID_ARGUMENT\", { argument: \"values\", info: { coder }, value: values });\n\n            unique[name] = true;\n\n            return values[name];\n        });\n\n    } else {\n        assertArgument(false, \"invalid tuple value\", \"tuple\", values);\n    }\n\n    assertArgument(coders.length === arrayValues.length, \"types/value length mismatch\", \"tuple\", values);\n\n    let staticWriter = new Writer();\n    let dynamicWriter = new Writer();\n\n    let updateFuncs: Array<(baseOffset: number) => void> = [];\n    coders.forEach((coder, index) => {\n        let value = arrayValues[index];\n\n        if (coder.dynamic) {\n            // Get current dynamic offset (for the future pointer)\n            let dynamicOffset = dynamicWriter.length;\n\n            // Encode the dynamic value into the dynamicWriter\n            coder.encode(dynamicWriter, value);\n\n            // Prepare to populate the correct offset once we are done\n            let updateFunc = staticWriter.writeUpdatableValue();\n            updateFuncs.push((baseOffset: number) => {\n                updateFunc(baseOffset + dynamicOffset);\n            });\n\n        } else {\n            coder.encode(staticWriter, value);\n        }\n    });\n\n    // Backfill all the dynamic offsets, now that we know the static length\n    updateFuncs.forEach((func) => { func(staticWriter.length); });\n\n    let length = writer.appendWriter(staticWriter);\n    length += writer.appendWriter(dynamicWriter);\n    return length;\n}\n\n/**\n *  @_ignore\n */\nexport function unpack(reader: Reader, coders: ReadonlyArray<Coder>): Result {\n    let values: Array<any> = [];\n    let keys: Array<null | string> = [ ];\n\n    // A reader anchored to this base\n    let baseReader = reader.subReader(0);\n\n    coders.forEach((coder) => {\n        let value: any = null;\n\n        if (coder.dynamic) {\n            let offset = reader.readIndex();\n            let offsetReader = baseReader.subReader(offset);\n            try {\n                value = coder.decode(offsetReader);\n            } catch (error: any) {\n                // Cannot recover from this\n                if (isError(error, \"BUFFER_OVERRUN\")) {\n                    throw error;\n                }\n\n                value = error;\n                value.baseType = coder.name;\n                value.name = coder.localName;\n                value.type = coder.type;\n            }\n\n        } else {\n            try {\n                value = coder.decode(reader);\n            } catch (error: any) {\n                // Cannot recover from this\n                if (isError(error, \"BUFFER_OVERRUN\")) {\n                    throw error;\n                }\n\n                value = error;\n                value.baseType = coder.name;\n                value.name = coder.localName;\n                value.type = coder.type;\n            }\n        }\n\n        if (value == undefined) {\n            throw new Error(\"investigate\");\n        }\n\n        values.push(value);\n        keys.push(coder.localName || null);\n    });\n\n    return Result.fromItems(values, keys);\n}\n\n/**\n *  @_ignore\n */\nexport class ArrayCoder extends Coder {\n    readonly coder!: Coder;\n    readonly length!: number;\n\n    constructor(coder: Coder, length: number, localName: string) {\n        const type = (coder.type + \"[\" + (length >= 0 ? length: \"\") + \"]\");\n        const dynamic = (length === -1 || coder.dynamic);\n        super(\"array\", type, localName, dynamic);\n        defineProperties<ArrayCoder>(this, { coder, length });\n    }\n\n    defaultValue(): Array<any> {\n        // Verifies the child coder is valid (even if the array is dynamic or 0-length)\n        const defaultChild = this.coder.defaultValue();\n\n        const result: Array<any> = [];\n        for (let i = 0; i < this.length; i++) {\n            result.push(defaultChild);\n        }\n        return result;\n    }\n\n    encode(writer: Writer, _value: Array<any> | Typed): number {\n        const value = Typed.dereference(_value, \"array\");\n\n        if(!Array.isArray(value)) {\n            this._throwError(\"expected array value\", value);\n        }\n\n        let count = this.length;\n\n        if (count === -1) {\n            count = value.length;\n            writer.writeValue(value.length);\n        }\n\n        assertArgumentCount(value.length, count, \"coder array\" + (this.localName? (\" \"+ this.localName): \"\"));\n\n        let coders: Array<Coder> = [ ];\n        for (let i = 0; i < value.length; i++) { coders.push(this.coder); }\n\n        return pack(writer, coders, value);\n    }\n\n    decode(reader: Reader): any {\n        let count = this.length;\n        if (count === -1) {\n            count = reader.readIndex();\n\n            // Check that there is *roughly* enough data to ensure\n            // stray random data is not being read as a length. Each\n            // slot requires at least 32 bytes for their value (or 32\n            // bytes as a link to the data). This could use a much\n            // tighter bound, but we are erroring on the side of safety.\n            assert(count * WordSize <= reader.dataLength, \"insufficient data length\",\n                \"BUFFER_OVERRUN\", { buffer: reader.bytes, offset: count * WordSize, length: reader.dataLength });\n        }\n        let coders: Array<Coder> = [];\n        for (let i = 0; i < count; i++) { coders.push(new AnonymousCoder(this.coder)); }\n\n        return unpack(reader, coders);\n    }\n}\n\n", "import { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\n\nimport type { Reader, Writer } from \"./abstract-coder.js\";\n\n/**\n *  @_ignore\n */\nexport class BooleanCoder extends Coder {\n\n    constructor(localName: string) {\n        super(\"bool\", \"bool\", localName, false);\n    }\n\n    defaultValue(): boolean {\n        return false;\n    }\n\n    encode(writer: Writer, _value: boolean | Typed): number {\n        const value = Typed.dereference(_value, \"bool\");\n        return writer.writeValue(value ? 1: 0);\n    }\n\n    decode(reader: Reader): any {\n        return !!reader.readValue();\n    }\n}\n", "import { getBytesCopy, hexlify } from \"../../utils/index.js\";\n\nimport { Coder } from \"./abstract-coder.js\";\n\nimport type { Reader, Writer } from \"./abstract-coder.js\";\n\n\n/**\n *  @_ignore\n */\nexport class DynamicBytesCoder extends Coder {\n    constructor(type: string, localName: string) {\n       super(type, type, localName, true);\n    }\n\n    defaultValue(): string {\n        return \"0x\";\n    }\n\n    encode(writer: Writer, value: any): number {\n        value = getBytesCopy(value);\n        let length = writer.writeValue(value.length);\n        length += writer.writeBytes(value);\n        return length;\n    }\n\n    decode(reader: Reader): any {\n        return reader.readBytes(reader.readIndex(), true);\n    }\n}\n\n/**\n *  @_ignore\n */\nexport class BytesCoder extends DynamicBytesCoder {\n    constructor(localName: string) {\n        super(\"bytes\", localName);\n    }\n\n    decode(reader: Reader): any {\n        return hexlify(super.decode(reader));\n    }\n}\n", "\nimport { defineProperties, getBytesCopy, hexlify } from \"../../utils/index.js\";\n\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\n\nimport type { BytesLike } from \"../../utils/index.js\";\n\nimport type { Reader, Writer } from \"./abstract-coder.js\";\n\n\n/**\n *  @_ignore\n */\nexport class FixedBytesCoder extends Coder {\n    readonly size!: number;\n\n    constructor(size: number, localName: string) {\n        let name = \"bytes\" + String(size);\n        super(name, name, localName, false);\n        defineProperties<FixedBytesCoder>(this, { size }, { size: \"number\" });\n    }\n\n    defaultValue(): string {\n        return (\"0x0000000000000000000000000000000000000000000000000000000000000000\").substring(0, 2 + this.size * 2);\n    }\n\n    encode(writer: Writer, _value: BytesLike | Typed): number {\n        let data = getBytesCopy(Typed.dereference(_value, this.type));\n        if (data.length !== this.size) { this._throwError(\"incorrect data length\", _value); }\n        return writer.writeBytes(data);\n    }\n\n    decode(reader: Reader): any {\n        return hexlify(reader.readBytes(this.size));\n    }\n}\n", "import { Coder } from \"./abstract-coder.js\";\nimport type { Reader, Writer } from \"./abstract-coder.js\";\n\nconst Empty = new Uint8Array([ ]);\n\n/**\n *  @_ignore\n */\nexport class NullCoder extends Coder {\n\n    constructor(localName: string) {\n        super(\"null\", \"\", localName, false);\n    }\n\n    defaultValue(): null {\n        return null;\n    }\n\n    encode(writer: Writer, value: any): number {\n        if (value != null) { this._throwError(\"not null\", value); }\n        return writer.writeBytes(Empty);\n    }\n\n    decode(reader: Reader): any {\n        reader.readBytes(0);\n        return null;\n    }\n}\n", "import {\n    defineProperties, fromTwos, getBigInt, mask, toTwos\n} from \"../../utils/index.js\";\n\nimport { Typed } from \"../typed.js\";\nimport { Coder, WordSize } from \"./abstract-coder.js\";\n\nimport type { BigNumberish } from \"../../utils/index.js\";\n\nimport type { Reader, Writer } from \"./abstract-coder.js\";\n\n\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_MAX_UINT256 = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\n\n/**\n *  @_ignore\n */\nexport class NumberCoder extends Coder {\n    readonly size!: number;\n    readonly signed!: boolean;\n\n    constructor(size: number, signed: boolean, localName: string) {\n        const name = ((signed ? \"int\": \"uint\") + (size * 8));\n        super(name, name, localName, false);\n\n        defineProperties<NumberCoder>(this, { size, signed }, { size: \"number\", signed: \"boolean\" });\n    }\n\n    defaultValue(): number {\n        return 0;\n    }\n\n    encode(writer: Writer, _value: BigNumberish | Typed): number {\n        let value = getBigInt(Typed.dereference(_value, this.type));\n\n        // Check bounds are safe for encoding\n        let maxUintValue = mask(BN_MAX_UINT256, WordSize * 8);\n        if (this.signed) {\n            let bounds = mask(maxUintValue, (this.size * 8) - 1);\n            if (value > bounds || value < -(bounds + BN_1)) {\n                this._throwError(\"value out-of-bounds\", _value);\n            }\n            value = toTwos(value, 8 * WordSize);\n        } else if (value < BN_0 || value > mask(maxUintValue, this.size * 8)) {\n            this._throwError(\"value out-of-bounds\", _value);\n        }\n\n        return writer.writeValue(value);\n    }\n\n    decode(reader: Reader): any {\n        let value = mask(reader.readValue(), this.size * 8);\n\n        if (this.signed) {\n            value = fromTwos(value, this.size * 8);\n        }\n\n        return value;\n    }\n}\n\n", "import { toUtf8Bytes, toUtf8String } from \"../../utils/utf8.js\";\n\nimport { Typed } from \"../typed.js\";\nimport { DynamicBytesCoder } from \"./bytes.js\";\n\nimport type { Reader, Writer } from \"./abstract-coder.js\";\n\n\n/**\n *  @_ignore\n */\nexport class StringCoder extends DynamicBytesCoder {\n\n    constructor(localName: string) {\n        super(\"string\", localName);\n    }\n\n    defaultValue(): string {\n        return \"\";\n    }\n\n    encode(writer: Writer, _value: string | Typed): number {\n        return super.encode(writer, toUtf8Bytes(Typed.dereference(_value, \"string\")));\n    }\n\n    decode(reader: Reader): any {\n        return toUtf8String(super.decode(reader));\n    }\n}\n", "import { defineProperties } from \"../../utils/properties.js\";\n\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\n\nimport { pack, unpack } from \"./array.js\";\n\nimport type { Reader, Writer } from \"./abstract-coder.js\";\n\n/**\n *  @_ignore\n */\nexport class TupleCoder extends Coder {\n    readonly coders!: ReadonlyArray<Coder>;\n\n    constructor(coders: Array<Coder>, localName: string) {\n        let dynamic = false;\n        const types: Array<string> = [];\n        coders.forEach((coder) => {\n            if (coder.dynamic) { dynamic = true; }\n            types.push(coder.type);\n        });\n        const type = (\"tuple(\" + types.join(\",\") + \")\");\n\n        super(\"tuple\", type, localName, dynamic);\n        defineProperties<TupleCoder>(this, { coders: Object.freeze(coders.slice()) });\n    }\n\n    defaultValue(): any {\n        const values: any = [ ];\n        this.coders.forEach((coder) => {\n            values.push(coder.defaultValue());\n        });\n\n        // We only output named properties for uniquely named coders\n        const uniqueNames = this.coders.reduce((accum, coder) => {\n            const name = coder.localName;\n            if (name) {\n                if (!accum[name]) { accum[name] = 0; }\n                accum[name]++;\n            }\n            return accum;\n        }, <{ [ name: string ]: number }>{ });\n\n        // Add named values\n        this.coders.forEach((coder: Coder, index: number) => {\n            let name = coder.localName;\n            if (!name || uniqueNames[name] !== 1) { return; }\n\n            if (name === \"length\") { name = \"_length\"; }\n\n            if (values[name] != null) { return; }\n\n            values[name] = values[index];\n        });\n\n        return Object.freeze(values);\n    }\n\n    encode(writer: Writer, _value: Array<any> | { [ name: string ]: any } | Typed): number {\n        const value = Typed.dereference(_value, \"tuple\");\n        return pack(writer, this.coders, value);\n    }\n\n    decode(reader: Reader): any {\n        return unpack(reader, this.coders);\n    }\n}\n\n", "import { keccak256 } from \"../crypto/index.js\";\nimport { toUtf8Bytes } from \"../utils/index.js\";\n\n/**\n *  A simple hashing function which operates on UTF-8 strings to\n *  compute an 32-byte identifier.\n *\n *  This simply computes the [UTF-8 bytes](toUtf8Bytes) and computes\n *  the [[keccak256]].\n *\n *  @example:\n *    id(\"hello world\")\n *    //_result:\n */\nexport function id(value: string): string {\n    return keccak256(toUtf8Bytes(value));\n}\n", "import { getAddress } from \"../address/index.js\";\nimport { assertArgument, isHexString } from \"../utils/index.js\";\n\nimport type { AccessList, AccessListish } from \"./index.js\";\n\n\nfunction accessSetify(addr: string, storageKeys: Array<string>): { address: string,storageKeys: Array<string> } {\n    return {\n        address: getAddress(addr),\n        storageKeys: storageKeys.map((storageKey, index) => {\n            assertArgument(isHexString(storageKey, 32), \"invalid slot\", `storageKeys[${ index }]`, storageKey);\n            return storageKey.toLowerCase();\n        })\n    };\n}\n\n/**\n *  Returns a [[AccessList]] from any ethers-supported access-list structure.\n */\nexport function accessListify(value: AccessListish): AccessList {\n    if (Array.isArray(value)) {\n        return (<Array<[ string, Array<string>] | { address: string, storageKeys: Array<string>}>>value).map((set, index) => {\n            if (Array.isArray(set)) {\n                assertArgument(set.length === 2, \"invalid slot set\", `value[${ index }]`, set);\n                return accessSetify(set[0], set[1])\n            }\n            assertArgument(set != null && typeof(set) === \"object\", \"invalid address-slot set\", \"value\", value);\n            return accessSetify(set.address, set.storageKeys);\n        });\n    }\n\n    assertArgument(value != null && typeof(value) === \"object\", \"invalid access list\", \"value\", value);\n\n    const result: Array<{ address: string, storageKeys: Array<string> }> = Object.keys(value).map((addr) => {\n        const storageKeys: Record<string, true> = value[addr].reduce((accum, storageKey) => {\n            accum[storageKey] = true;\n            return accum;\n        }, <Record<string, true>>{ });\n        return accessSetify(addr, Object.keys(storageKeys).sort())\n    });\n    result.sort((a, b) => (a.address.localeCompare(b.address)));\n    return result;\n}\n", "/**\n *  A fragment is a single item from an ABI, which may represent any of:\n *\n *  - [Functions](FunctionFragment)\n *  - [Events](EventFragment)\n *  - [Constructors](ConstructorFragment)\n *  - Custom [Errors](ErrorFragment)\n *  - [Fallback or Receive](FallbackFragment) functions\n *\n *  @_subsection api/abi/abi-coder:Fragments  [about-fragments]\n */\n\nimport {\n    defineProperties, getBigInt, getNumber,\n    assert, assertPrivate, assertArgument\n} from \"../utils/index.js\";\nimport { id } from \"../hash/index.js\";\n\n/**\n *  A Type description in a [JSON ABI format](link-solc-jsonabi).\n */\nexport interface JsonFragmentType {\n    /**\n     *  The parameter name.\n     */\n    readonly name?: string;\n\n    /**\n     *  If the parameter is indexed.\n     */\n    readonly indexed?: boolean;\n\n    /**\n     *  The type of the parameter.\n     */\n    readonly type?: string;\n\n    /**\n     *  The internal Solidity type.\n     */\n    readonly internalType?: string;\n\n    /**\n     *  The components for a tuple.\n     */\n    readonly components?: ReadonlyArray<JsonFragmentType>;\n}\n\n/**\n *  A fragment for a method, event or error in a [JSON ABI format](link-solc-jsonabi).\n */\nexport interface JsonFragment {\n    /**\n     *  The name of the error, event, function, etc.\n     */\n    readonly name?: string;\n\n    /**\n     *  The type of the fragment (e.g. ``event``, ``\"function\"``, etc.)\n     */\n    readonly type?: string;\n\n    /**\n     *  If the event is anonymous.\n     */\n    readonly anonymous?: boolean;\n\n    /**\n     *  If the function is payable.\n     */\n    readonly payable?: boolean;\n\n    /**\n     *  If the function is constant.\n     */\n    readonly constant?: boolean;\n\n    /**\n     *  The mutability state of the function.\n     */\n    readonly stateMutability?: string;\n\n    /**\n     *  The input parameters.\n     */\n    readonly inputs?: ReadonlyArray<JsonFragmentType>;\n\n    /**\n     *  The output parameters.\n     */\n    readonly outputs?: ReadonlyArray<JsonFragmentType>;\n\n    /**\n     *  The gas limit to use when sending a transaction for this function.\n     */\n    readonly gas?: string;\n};\n\n/**\n *  The format to serialize the output as.\n *\n *  **``\"sighash\"``** - the bare formatting, used to compute the selector\n *  or topic hash; this format cannot be reversed (as it discards ``indexed``)\n *  so cannot by used to export an [[Interface]].\n *\n *  **``\"minimal\"``** - Human-Readable ABI with minimal spacing and without\n *  names, so it is compact, but will result in Result objects that cannot\n *  be accessed by name.\n *\n *  **``\"full\"``** - Full Human-Readable ABI, with readable spacing and names\n *  intact; this is generally the recommended format.\n *\n *  **``\"json\"``** - The [JSON ABI format](link-solc-jsonabi).\n */\nexport type FormatType = \"sighash\" | \"minimal\" | \"full\" | \"json\";\n\n// [ \"a\", \"b\" ] => { \"a\": 1, \"b\": 1 }\nfunction setify(items: Array<string>): ReadonlySet<string> {\n    const result: Set<string> = new Set();\n    items.forEach((k) => result.add(k));\n    return Object.freeze(result);\n}\n\nconst _kwVisibDeploy = \"external public payable override\";\nconst KwVisibDeploy = setify(_kwVisibDeploy.split(\" \"));\n\n// Visibility Keywords\nconst _kwVisib = \"constant external internal payable private public pure view override\";\nconst KwVisib = setify(_kwVisib.split(\" \"));\n\nconst _kwTypes = \"constructor error event fallback function receive struct\";\nconst KwTypes = setify(_kwTypes.split(\" \"));\n\nconst _kwModifiers = \"calldata memory storage payable indexed\";\nconst KwModifiers = setify(_kwModifiers.split(\" \"));\n\nconst _kwOther = \"tuple returns\";\n\n// All Keywords\nconst _keywords = [ _kwTypes, _kwModifiers, _kwOther, _kwVisib ].join(\" \");\nconst Keywords = setify(_keywords.split(\" \"));\n\n// Single character tokens\nconst SimpleTokens: Record<string, string> = {\n  \"(\": \"OPEN_PAREN\", \")\": \"CLOSE_PAREN\",\n  \"[\": \"OPEN_BRACKET\", \"]\": \"CLOSE_BRACKET\",\n  \",\": \"COMMA\", \"@\": \"AT\"\n};\n\n// Parser regexes to consume the next token\nconst regexWhitespacePrefix = new RegExp(\"^(\\\\s*)\");\nconst regexNumberPrefix = new RegExp(\"^([0-9]+)\");\nconst regexIdPrefix = new RegExp(\"^([a-zA-Z$_][a-zA-Z0-9$_]*)\");\n\n// Parser regexs to check validity\nconst regexId = new RegExp(\"^([a-zA-Z$_][a-zA-Z0-9$_]*)$\");\nconst regexType = new RegExp(\"^(address|bool|bytes([0-9]*)|string|u?int([0-9]*))$\");\n\n/**\n *  @ignore:\n */\ntype Token = Readonly<{\n    // Type of token (e.g. TYPE, KEYWORD, NUMBER, etc)\n    type: string;\n\n    // Offset into the original source code\n    offset: number;\n\n    // Actual text content of the token\n    text: string;\n\n    // The parenthesis depth\n    depth: number;\n\n    // If a parenthesis, the offset (in tokens) that balances it\n    match: number;\n\n    // For parenthesis and commas, the offset (in tokens) to the\n    // previous/next parenthesis or comma in the list\n    linkBack: number;\n    linkNext: number;\n\n    // If a BRACKET, the value inside\n    value: number;\n}>;\n\nclass TokenString {\n    #offset: number;\n    #tokens: ReadonlyArray<Token>;\n\n    get offset(): number { return this.#offset; }\n    get length(): number { return this.#tokens.length - this.#offset; }\n\n    constructor(tokens: ReadonlyArray<Token>) {\n        this.#offset = 0;\n        this.#tokens = tokens.slice();\n    }\n\n    clone(): TokenString { return new TokenString(this.#tokens); }\n    reset(): void { this.#offset = 0; }\n\n    #subTokenString(from: number = 0, to: number = 0): TokenString {\n        return new TokenString(this.#tokens.slice(from, to).map((t) => {\n            return Object.freeze(Object.assign({ }, t, {\n                match: (t.match - from),\n                linkBack: (t.linkBack - from),\n                linkNext: (t.linkNext - from),\n            }));\n        }));\n    }\n\n    // Pops and returns the value of the next token, if it is a keyword in allowed; throws if out of tokens\n    popKeyword(allowed: ReadonlySet<string>): string {\n        const top = this.peek();\n        if (top.type !== \"KEYWORD\" || !allowed.has(top.text)) { throw new Error(`expected keyword ${ top.text }`); }\n        return this.pop().text;\n    }\n\n    // Pops and returns the value of the next token if it is `type`; throws if out of tokens\n    popType(type: string): string {\n        if (this.peek().type !== type) {\n            const top = this.peek();\n            throw new Error(`expected ${ type }; got ${ top.type } ${ JSON.stringify(top.text) }`);\n        }\n        return this.pop().text;\n    }\n\n    // Pops and returns a \"(\" TOKENS \")\"\n    popParen(): TokenString {\n        const top = this.peek();\n        if (top.type !== \"OPEN_PAREN\") { throw new Error(\"bad start\"); }\n        const result = this.#subTokenString(this.#offset + 1, top.match + 1);\n        this.#offset = top.match + 1;\n        return result;\n    }\n\n    // Pops and returns the items within \"(\" ITEM1 \",\" ITEM2 \",\" ... \")\"\n    popParams(): Array<TokenString> {\n        const top = this.peek();\n\n        if (top.type !== \"OPEN_PAREN\") { throw new Error(\"bad start\"); }\n\n        const result: Array<TokenString> = [ ];\n\n        while(this.#offset < top.match - 1) {\n            const link = this.peek().linkNext;\n            result.push(this.#subTokenString(this.#offset + 1, link));\n            this.#offset = link;\n        }\n\n        this.#offset = top.match + 1;\n\n        return result;\n    }\n\n    // Returns the top Token, throwing if out of tokens\n    peek(): Token {\n        if (this.#offset >= this.#tokens.length) {\n            throw new Error(\"out-of-bounds\");\n        }\n        return this.#tokens[this.#offset];\n    }\n\n    // Returns the next value, if it is a keyword in `allowed`\n    peekKeyword(allowed: ReadonlySet<string>): null | string {\n        const top = this.peekType(\"KEYWORD\");\n        return (top != null && allowed.has(top)) ? top: null;\n    }\n\n    // Returns the value of the next token if it is `type`\n    peekType(type: string): null | string {\n        if (this.length === 0) { return null; }\n        const top = this.peek();\n        return (top.type === type) ? top.text: null;\n    }\n\n    // Returns the next token; throws if out of tokens\n    pop(): Token {\n        const result = this.peek();\n        this.#offset++;\n        return result;\n    }\n\n    toString(): string {\n        const tokens: Array<string> = [ ];\n        for (let i = this.#offset; i < this.#tokens.length; i++) {\n            const token = this.#tokens[i];\n            tokens.push(`${ token.type }:${ token.text }`);\n        }\n        return `<TokenString ${ tokens.join(\" \") }>`\n    }\n}\n\ntype Writeable<T> = { -readonly [P in keyof T]: T[P] };\n\nfunction lex(text: string): TokenString {\n    const tokens: Array<Token> = [ ];\n\n    const throwError = (message: string) => {\n        const token = (offset < text.length) ? JSON.stringify(text[offset]): \"$EOI\";\n        throw new Error(`invalid token ${ token } at ${ offset }: ${ message }`);\n    };\n\n    let brackets: Array<number> = [ ];\n    let commas: Array<number> = [ ];\n\n    let offset = 0;\n    while (offset < text.length) {\n\n        // Strip off any leading whitespace\n        let cur = text.substring(offset);\n        let match = cur.match(regexWhitespacePrefix);\n        if (match) {\n            offset += match[1].length;\n            cur = text.substring(offset);\n        }\n\n        const token = { depth: brackets.length, linkBack: -1, linkNext: -1, match: -1, type: \"\", text: \"\", offset, value: -1 };\n        tokens.push(token);\n\n        let type = (SimpleTokens[cur[0]] || \"\");\n        if (type) {\n            token.type = type;\n            token.text = cur[0];\n            offset++;\n\n            if (type === \"OPEN_PAREN\") {\n                brackets.push(tokens.length - 1);\n                commas.push(tokens.length - 1);\n\n            } else if (type == \"CLOSE_PAREN\") {\n                if (brackets.length === 0) { throwError(\"no matching open bracket\"); }\n\n                token.match = brackets.pop() as number;\n                (<Writeable<Token>>(tokens[token.match])).match = tokens.length - 1;\n                token.depth--;\n\n                token.linkBack = commas.pop() as number;\n                (<Writeable<Token>>(tokens[token.linkBack])).linkNext = tokens.length - 1;\n\n            } else if (type === \"COMMA\") {\n                token.linkBack = commas.pop() as number;\n                (<Writeable<Token>>(tokens[token.linkBack])).linkNext = tokens.length - 1;\n                commas.push(tokens.length - 1);\n\n            } else if (type === \"OPEN_BRACKET\") {\n                token.type = \"BRACKET\";\n\n            } else if (type === \"CLOSE_BRACKET\") {\n                // Remove the CLOSE_BRACKET\n                let suffix = (tokens.pop() as Token).text;\n                if (tokens.length > 0 && tokens[tokens.length - 1].type === \"NUMBER\") {\n                    const value = (tokens.pop() as Token).text;\n                    suffix = value + suffix;\n                    (<Writeable<Token>>(tokens[tokens.length - 1])).value = getNumber(value);\n                }\n                if (tokens.length === 0 || tokens[tokens.length - 1].type !== \"BRACKET\") {\n                    throw new Error(\"missing opening bracket\");\n                }\n                (<Writeable<Token>>(tokens[tokens.length - 1])).text += suffix;\n            }\n\n            continue;\n        }\n\n        match = cur.match(regexIdPrefix);\n        if (match) {\n            token.text = match[1];\n            offset += token.text.length;\n\n            if (Keywords.has(token.text)) {\n                token.type = \"KEYWORD\";\n                continue;\n            }\n\n            if (token.text.match(regexType)) {\n                token.type = \"TYPE\";\n                continue;\n            }\n\n            token.type = \"ID\";\n            continue;\n        }\n\n        match = cur.match(regexNumberPrefix);\n        if (match) {\n            token.text = match[1];\n            token.type = \"NUMBER\";\n            offset += token.text.length;\n            continue;\n        }\n\n        throw new Error(`unexpected token ${ JSON.stringify(cur[0]) } at position ${ offset }`);\n    }\n\n    return new TokenString(tokens.map((t) => Object.freeze(t)));\n}\n\n// Check only one of `allowed` is in `set`\nfunction allowSingle(set: ReadonlySet<string>, allowed: ReadonlySet<string>): void {\n    let included: Array<string> = [ ];\n    for (const key in allowed.keys()) {\n        if (set.has(key)) { included.push(key); }\n    }\n    if (included.length > 1) { throw new Error(`conflicting types: ${ included.join(\", \") }`); }\n}\n\n// Functions to process a Solidity Signature TokenString from left-to-right for...\n\n// ...the name with an optional type, returning the name\nfunction consumeName(type: string, tokens: TokenString): string {\n    if (tokens.peekKeyword(KwTypes)) {\n        const keyword = tokens.pop().text;\n        if (keyword !== type) {\n            throw new Error(`expected ${ type }, got ${ keyword }`);\n        }\n    }\n\n    return tokens.popType(\"ID\");\n}\n\n// ...all keywords matching allowed, returning the keywords\nfunction consumeKeywords(tokens: TokenString, allowed?: ReadonlySet<string>): ReadonlySet<string> {\n    const keywords: Set<string> = new Set();\n    while (true) {\n        const keyword = tokens.peekType(\"KEYWORD\");\n\n        if (keyword == null || (allowed && !allowed.has(keyword))) { break; }\n        tokens.pop();\n\n        if (keywords.has(keyword)) { throw new Error(`duplicate keywords: ${ JSON.stringify(keyword) }`); }\n        keywords.add(keyword);\n    }\n\n    return Object.freeze(keywords);\n}\n\n// ...all visibility keywords, returning the coalesced mutability\nfunction consumeMutability(tokens: TokenString): \"payable\" | \"nonpayable\" | \"view\" | \"pure\" {\n    let modifiers = consumeKeywords(tokens, KwVisib);\n\n    // Detect conflicting modifiers\n    allowSingle(modifiers, setify(\"constant payable nonpayable\".split(\" \")));\n    allowSingle(modifiers, setify(\"pure view payable nonpayable\".split(\" \")));\n\n    // Process mutability states\n    if (modifiers.has(\"view\")) { return \"view\"; }\n    if (modifiers.has(\"pure\")) { return \"pure\"; }\n    if (modifiers.has(\"payable\")) { return \"payable\"; }\n    if (modifiers.has(\"nonpayable\")) { return \"nonpayable\"; }\n\n    // Process legacy `constant` last\n    if (modifiers.has(\"constant\")) { return \"view\"; }\n\n    return \"nonpayable\";\n}\n\n// ...a parameter list, returning the ParamType list\nfunction consumeParams(tokens: TokenString, allowIndexed?: boolean): Array<ParamType> {\n    return tokens.popParams().map((t) => ParamType.from(t, allowIndexed));\n}\n\n// ...a gas limit, returning a BigNumber or null if none\nfunction consumeGas(tokens: TokenString): null | bigint {\n    if (tokens.peekType(\"AT\")) {\n        tokens.pop();\n        if (tokens.peekType(\"NUMBER\")) {\n            return getBigInt(tokens.pop().text);\n        }\n        throw new Error(\"invalid gas\");\n    }\n    return null;\n}\n\nfunction consumeEoi(tokens: TokenString): void {\n    if (tokens.length) {\n        throw new Error(`unexpected tokens at offset ${ tokens.offset }: ${ tokens.toString() }`);\n    }\n}\n\nconst regexArrayType = new RegExp(/^(.*)\\[([0-9]*)\\]$/);\n\nfunction verifyBasicType(type: string): string {\n    const match = type.match(regexType);\n    assertArgument(match, \"invalid type\", \"type\", type);\n    if (type === \"uint\") { return \"uint256\"; }\n    if (type === \"int\") { return \"int256\"; }\n\n    if (match[2]) {\n        // bytesXX\n        const length = parseInt(match[2]);\n        assertArgument(length !== 0 && length <= 32, \"invalid bytes length\", \"type\", type);\n\n    } else if (match[3]) {\n        // intXX or uintXX\n        const size = parseInt(match[3] as string);\n        assertArgument(size !== 0 && size <= 256 && (size % 8) === 0, \"invalid numeric width\", \"type\", type);\n    }\n\n    return type;\n}\n\n// Make the Fragment constructors effectively private\nconst _guard = { };\n\n\n/**\n *  When [walking](ParamType-walk) a [[ParamType]], this is called\n *  on each component.\n */\nexport type ParamTypeWalkFunc = (type: string, value: any) => any;\n\n/**\n *  When [walking asynchronously](ParamType-walkAsync) a [[ParamType]],\n *  this is called on each component.\n */\nexport type ParamTypeWalkAsyncFunc = (type: string, value: any) => any | Promise<any>;\n\nconst internal = Symbol.for(\"_ethers_internal\");\n\nconst ParamTypeInternal = \"_ParamTypeInternal\";\nconst ErrorFragmentInternal = \"_ErrorInternal\";\nconst EventFragmentInternal = \"_EventInternal\";\nconst ConstructorFragmentInternal = \"_ConstructorInternal\";\nconst FallbackFragmentInternal = \"_FallbackInternal\";\nconst FunctionFragmentInternal = \"_FunctionInternal\";\nconst StructFragmentInternal = \"_StructInternal\";\n\n/**\n *  Each input and output of a [[Fragment]] is an Array of **ParamType**.\n */\nexport class ParamType {\n\n    /**\n     *  The local name of the parameter (or ``\"\"`` if unbound)\n     */\n    readonly name!: string;\n\n    /**\n     *  The fully qualified type (e.g. ``\"address\"``, ``\"tuple(address)\"``,\n     *  ``\"uint256[3][]\"``)\n     */\n    readonly type!: string;\n\n    /**\n     *  The base type (e.g. ``\"address\"``, ``\"tuple\"``, ``\"array\"``)\n     */\n    readonly baseType!: string;\n\n    /**\n     *  True if the parameters is indexed.\n     *\n     *  For non-indexable types this is ``null``.\n     */\n    readonly indexed!: null | boolean;\n\n    /**\n     *  The components for the tuple.\n     *\n     *  For non-tuple types this is ``null``.\n     */\n    readonly components!: null | ReadonlyArray<ParamType>;\n\n    /**\n     *  The array length, or ``-1`` for dynamic-lengthed arrays.\n     *\n     *  For non-array types this is ``null``.\n     */\n    readonly arrayLength!: null | number;\n\n    /**\n     *  The type of each child in the array.\n     *\n     *  For non-array types this is ``null``.\n     */\n    readonly arrayChildren!: null | ParamType;\n\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, name: string, type: string, baseType: string, indexed: null | boolean, components: null | ReadonlyArray<ParamType>, arrayLength: null | number, arrayChildren: null | ParamType) {\n        assertPrivate(guard, _guard, \"ParamType\");\n        Object.defineProperty(this, internal, { value: ParamTypeInternal });\n\n        if (components) { components = Object.freeze(components.slice()); }\n\n        if (baseType === \"array\") {\n            if (arrayLength == null || arrayChildren == null) {\n                throw new Error(\"\");\n            }\n        } else if (arrayLength != null || arrayChildren != null) {\n            throw new Error(\"\");\n        }\n\n        if (baseType === \"tuple\") {\n            if (components == null) { throw new Error(\"\"); }\n        } else if (components != null) {\n            throw new Error(\"\");\n        }\n\n        defineProperties<ParamType>(this, {\n            name, type, baseType, indexed, components, arrayLength, arrayChildren\n        });\n    }\n\n    /**\n     *  Return a string representation of this type.\n     *\n     *  For example,\n     *\n     *  ``sighash\" => \"(uint256,address)\"``\n     *\n     *  ``\"minimal\" => \"tuple(uint256,address) indexed\"``\n     *\n     *  ``\"full\" => \"tuple(uint256 foo, address bar) indexed baz\"``\n     */\n    format(format?: FormatType): string {\n        if (format == null) { format = \"sighash\"; }\n        if (format === \"json\") {\n            const name = this.name || \"\";\n\n            if (this.isArray()) {\n                const result = JSON.parse(this.arrayChildren.format(\"json\"));\n                result.name = name;\n                result.type += `[${ (this.arrayLength < 0 ? \"\": String(this.arrayLength)) }]`;\n                return JSON.stringify(result);\n            }\n\n            const result: any = {\n                type: ((this.baseType === \"tuple\") ? \"tuple\": this.type),\n                name\n            };\n\n\n            if (typeof(this.indexed) === \"boolean\") { result.indexed = this.indexed; }\n            if (this.isTuple()) {\n                result.components = this.components.map((c) => JSON.parse(c.format(format)));\n            }\n            return JSON.stringify(result);\n        }\n\n        let result = \"\";\n\n        // Array\n        if (this.isArray()) {\n            result += this.arrayChildren.format(format);\n            result += `[${ (this.arrayLength < 0 ? \"\": String(this.arrayLength)) }]`;\n        } else {\n            if (this.isTuple()) {\n                result += \"(\" + this.components.map(\n                    (comp) => comp.format(format)\n                ).join((format === \"full\") ? \", \": \",\") + \")\";\n            } else {\n                result += this.type;\n            }\n        }\n\n        if (format !== \"sighash\") {\n            if (this.indexed === true) { result += \" indexed\"; }\n            if (format === \"full\" && this.name) {\n                result += \" \" + this.name;\n            }\n        }\n\n        return result;\n    }\n\n    /**\n     *  Returns true if %%this%% is an Array type.\n     *\n     *  This provides a type gaurd ensuring that [[arrayChildren]]\n     *  and [[arrayLength]] are non-null.\n     */\n    isArray(): this is (ParamType & { arrayChildren: ParamType, arrayLength: number }) {\n        return (this.baseType === \"array\")\n    }\n\n    /**\n     *  Returns true if %%this%% is a Tuple type.\n     *\n     *  This provides a type gaurd ensuring that [[components]]\n     *  is non-null.\n     */\n    isTuple(): this is (ParamType & { components: ReadonlyArray<ParamType> }) {\n        return (this.baseType === \"tuple\");\n    }\n\n    /**\n     *  Returns true if %%this%% is an Indexable type.\n     *\n     *  This provides a type gaurd ensuring that [[indexed]]\n     *  is non-null.\n     */\n    isIndexable(): this is (ParamType & { indexed: boolean }) {\n        return (this.indexed != null);\n    }\n\n    /**\n     *  Walks the **ParamType** with %%value%%, calling %%process%%\n     *  on each type, destructing the %%value%% recursively.\n     */\n    walk(value: any, process: ParamTypeWalkFunc): any {\n        if (this.isArray()) {\n            if (!Array.isArray(value)) { throw new Error(\"invalid array value\"); }\n            if (this.arrayLength !== -1 && value.length !== this.arrayLength) {\n                throw new Error(\"array is wrong length\");\n            }\n            const _this = this;\n            return value.map((v) => (_this.arrayChildren.walk(v, process)));\n        }\n\n        if (this.isTuple()) {\n            if (!Array.isArray(value)) { throw new Error(\"invalid tuple value\"); }\n            if (value.length !== this.components.length) {\n                throw new Error(\"array is wrong length\");\n            }\n            const _this = this;\n            return value.map((v, i) => (_this.components[i].walk(v, process)));\n        }\n\n        return process(this.type, value);\n    }\n\n    #walkAsync(promises: Array<Promise<void>>, value: any, process: ParamTypeWalkAsyncFunc, setValue: (value: any) => void): void {\n\n        if (this.isArray()) {\n            if (!Array.isArray(value)) { throw new Error(\"invalid array value\"); }\n            if (this.arrayLength !== -1 && value.length !== this.arrayLength) {\n                throw new Error(\"array is wrong length\");\n            }\n            const childType = this.arrayChildren;\n\n            const result = value.slice();\n            result.forEach((value, index) => {\n                childType.#walkAsync(promises, value, process, (value: any) => {\n                    result[index] = value;\n                });\n            });\n            setValue(result);\n            return;\n        }\n\n        if (this.isTuple()) {\n            const components = this.components;\n\n            // Convert the object into an array\n            let result: Array<any>;\n            if (Array.isArray(value)) {\n                result = value.slice();\n\n            } else {\n                if (value == null || typeof(value) !== \"object\") {\n                    throw new Error(\"invalid tuple value\");\n                }\n\n                result = components.map((param) => {\n                    if (!param.name) { throw new Error(\"cannot use object value with unnamed components\"); }\n                    if (!(param.name in value)) {\n                        throw new Error(`missing value for component ${ param.name }`);\n                    }\n                    return value[param.name];\n                });\n            }\n\n            if (result.length !== this.components.length) {\n                throw new Error(\"array is wrong length\");\n            }\n\n            result.forEach((value, index) => {\n                components[index].#walkAsync(promises, value, process, (value: any) => {\n                    result[index] = value;\n                });\n            });\n            setValue(result);\n            return;\n        }\n\n        const result = process(this.type, value);\n        if (result.then) {\n            promises.push((async function() { setValue(await result); })());\n        } else {\n            setValue(result);\n        }\n    }\n\n    /**\n     *  Walks the **ParamType** with %%value%%, asynchronously calling\n     *  %%process%% on each type, destructing the %%value%% recursively.\n     *\n     *  This can be used to resolve ENS names by walking and resolving each\n     *  ``\"address\"`` type.\n     */\n    async walkAsync(value: any, process: ParamTypeWalkAsyncFunc): Promise<any> {\n        const promises: Array<Promise<void>> = [ ];\n        const result: [ any ] = [ value ];\n        this.#walkAsync(promises, value, process, (value: any) => {\n            result[0] = value;\n        });\n        if (promises.length) { await Promise.all(promises); }\n        return result[0];\n    }\n\n    /**\n     *  Creates a new **ParamType** for %%obj%%.\n     *\n     *  If %%allowIndexed%% then the ``indexed`` keyword is permitted,\n     *  otherwise the ``indexed`` keyword will throw an error.\n     */\n    static from(obj: any, allowIndexed?: boolean): ParamType {\n        if (ParamType.isParamType(obj)) { return obj; }\n\n        if (typeof(obj) === \"string\") {\n            try {\n                return ParamType.from(lex(obj), allowIndexed);\n            } catch (error) {\n                assertArgument(false, \"invalid param type\", \"obj\", obj);\n            }\n\n        } else if (obj instanceof TokenString) {\n            let type = \"\", baseType = \"\";\n            let comps: null | Array<ParamType> = null;\n\n            if (consumeKeywords(obj, setify([ \"tuple\" ])).has(\"tuple\") || obj.peekType(\"OPEN_PAREN\")) {\n                // Tuple\n                baseType = \"tuple\";\n                comps = obj.popParams().map((t) => ParamType.from(t));\n                type = `tuple(${ comps.map((c) => c.format()).join(\",\") })`;\n            } else {\n                // Normal\n                type = verifyBasicType(obj.popType(\"TYPE\"));\n                baseType = type;\n            }\n\n            // Check for Array\n            let arrayChildren: null | ParamType  = null;\n            let arrayLength: null | number = null;\n\n            while (obj.length && obj.peekType(\"BRACKET\")) {\n                const bracket = obj.pop(); //arrays[i];\n                arrayChildren = new ParamType(_guard, \"\", type, baseType, null, comps, arrayLength, arrayChildren);\n                arrayLength = bracket.value;\n                type += bracket.text;\n                baseType = \"array\";\n                comps = null;\n            }\n\n            let indexed: null | boolean = null;\n            const keywords = consumeKeywords(obj, KwModifiers);\n            if (keywords.has(\"indexed\")) {\n                if (!allowIndexed) { throw new Error(\"\"); }\n                indexed = true;\n            }\n\n            const name = (obj.peekType(\"ID\") ? obj.pop().text: \"\");\n\n            if (obj.length) { throw new Error(\"leftover tokens\"); }\n\n            return new ParamType(_guard, name, type, baseType, indexed, comps, arrayLength, arrayChildren);\n        }\n\n        const name = obj.name;\n        assertArgument(!name || (typeof(name) === \"string\" && name.match(regexId)),\n            \"invalid name\", \"obj.name\", name);\n\n        let indexed = obj.indexed;\n        if (indexed != null) {\n            assertArgument(allowIndexed, \"parameter cannot be indexed\", \"obj.indexed\", obj.indexed);\n            indexed = !!indexed;\n        }\n\n        let type = obj.type;\n\n        let arrayMatch = type.match(regexArrayType);\n        if (arrayMatch) {\n            const arrayLength = parseInt(arrayMatch[2] || \"-1\");\n            const arrayChildren = ParamType.from({\n                type: arrayMatch[1],\n                components: obj.components\n            });\n\n            return new ParamType(_guard, name || \"\", type, \"array\", indexed, null, arrayLength, arrayChildren);\n        }\n\n        if (type === \"tuple\" || type.startsWith(\"tuple(\"/* fix: ) */) || type.startsWith(\"(\" /* fix: ) */)) {\n            const comps = (obj.components != null) ? obj.components.map((c: any) => ParamType.from(c)): null;\n            const tuple = new ParamType(_guard, name || \"\", type, \"tuple\", indexed, comps, null, null);\n            // @TODO: use lexer to validate and normalize type\n            return tuple;\n        }\n\n        type = verifyBasicType(obj.type);\n\n        return new ParamType(_guard, name || \"\", type, type, indexed, null, null, null);\n    }\n\n    /**\n     *  Returns true if %%value%% is a **ParamType**.\n     */\n    static isParamType(value: any): value is ParamType {\n        return (value && value[internal] === ParamTypeInternal);\n    }\n}\n\n/**\n *  The type of a [[Fragment]].\n */\nexport type FragmentType = \"constructor\" | \"error\" | \"event\" | \"fallback\" | \"function\" | \"struct\";\n\n/**\n *  An abstract class to represent An individual fragment from a parse ABI.\n */\nexport abstract class Fragment {\n    /**\n     *  The type of the fragment.\n     */\n    readonly type!: FragmentType;\n\n    /**\n     *  The inputs for the fragment.\n     */\n    readonly inputs!: ReadonlyArray<ParamType>;\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, type: FragmentType, inputs: ReadonlyArray<ParamType>) {\n        assertPrivate(guard, _guard, \"Fragment\");\n        inputs = Object.freeze(inputs.slice());\n        defineProperties<Fragment>(this, { type, inputs });\n    }\n\n    /**\n     *  Returns a string representation of this fragment as %%format%%.\n     */\n    abstract format(format?: FormatType): string;\n\n    /**\n     *  Creates a new **Fragment** for %%obj%%, wich can be any supported\n     *  ABI frgament type.\n     */\n    static from(obj: any): Fragment {\n        if (typeof(obj) === \"string\") {\n\n            // Try parsing JSON...\n            try {\n                Fragment.from(JSON.parse(obj));\n            } catch (e) { }\n\n            // ...otherwise, use the human-readable lexer\n            return Fragment.from(lex(obj));\n        }\n\n        if (obj instanceof TokenString) {\n            // Human-readable ABI (already lexed)\n\n            const type = obj.peekKeyword(KwTypes);\n\n            switch (type) {\n                case \"constructor\": return ConstructorFragment.from(obj);\n                case \"error\": return ErrorFragment.from(obj);\n                case \"event\": return EventFragment.from(obj);\n                case \"fallback\": case \"receive\":\n                    return FallbackFragment.from(obj);\n                case \"function\": return FunctionFragment.from(obj);\n                case \"struct\": return StructFragment.from(obj);\n            }\n\n        } else if (typeof(obj) === \"object\") {\n            // JSON ABI\n\n            switch (obj.type) {\n                case \"constructor\": return ConstructorFragment.from(obj);\n                case \"error\": return ErrorFragment.from(obj);\n                case \"event\": return EventFragment.from(obj);\n                case \"fallback\": case \"receive\":\n                    return FallbackFragment.from(obj);\n                case \"function\": return FunctionFragment.from(obj);\n                case \"struct\": return StructFragment.from(obj);\n            }\n\n            assert(false, `unsupported type: ${ obj.type }`, \"UNSUPPORTED_OPERATION\", {\n                operation: \"Fragment.from\"\n            });\n        }\n\n        assertArgument(false, \"unsupported frgament object\", \"obj\", obj);\n    }\n\n    /**\n     *  Returns true if %%value%% is a [[ConstructorFragment]].\n     */\n    static isConstructor(value: any): value is ConstructorFragment {\n        return ConstructorFragment.isFragment(value);\n    }\n\n    /**\n     *  Returns true if %%value%% is an [[ErrorFragment]].\n     */\n    static isError(value: any): value is ErrorFragment {\n        return ErrorFragment.isFragment(value);\n    }\n\n    /**\n     *  Returns true if %%value%% is an [[EventFragment]].\n     */\n    static isEvent(value: any): value is EventFragment {\n        return EventFragment.isFragment(value);\n    }\n\n    /**\n     *  Returns true if %%value%% is a [[FunctionFragment]].\n     */\n    static isFunction(value: any): value is FunctionFragment {\n        return FunctionFragment.isFragment(value);\n    }\n\n    /**\n     *  Returns true if %%value%% is a [[StructFragment]].\n     */\n    static isStruct(value: any): value is StructFragment {\n        return StructFragment.isFragment(value);\n    }\n}\n\n/**\n *  An abstract class to represent An individual fragment\n *  which has a name from a parse ABI.\n */\nexport abstract class NamedFragment extends Fragment {\n    /**\n     *  The name of the fragment.\n     */\n    readonly name!: string;\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, type: FragmentType, name: string, inputs: ReadonlyArray<ParamType>) {\n        super(guard, type, inputs);\n        assertArgument(typeof(name) === \"string\" && name.match(regexId),\n            \"invalid identifier\", \"name\", name);\n        inputs = Object.freeze(inputs.slice());\n        defineProperties<NamedFragment>(this, { name });\n    }\n}\n\nfunction joinParams(format: FormatType, params: ReadonlyArray<ParamType>): string { \n    return \"(\" + params.map((p) => p.format(format)).join((format === \"full\") ? \", \": \",\") + \")\";\n}\n\n/**\n *  A Fragment which represents a //Custom Error//.\n */\nexport class ErrorFragment extends NamedFragment {\n    /**\n     *  @private\n     */\n    constructor(guard: any, name: string, inputs: ReadonlyArray<ParamType>) {\n        super(guard, \"error\", name, inputs);\n        Object.defineProperty(this, internal, { value: ErrorFragmentInternal });\n    }\n\n    /**\n     *  The Custom Error selector.\n     */\n    get selector(): string {\n        return id(this.format(\"sighash\")).substring(0, 10);\n    }\n\n    /**\n     *  Returns a string representation of this fragment as %%format%%.\n     */\n    format(format?: FormatType): string {\n        if (format == null) { format = \"sighash\"; }\n        if (format === \"json\") {\n            return JSON.stringify({\n                type: \"error\",\n                name: this.name,\n                inputs: this.inputs.map((input) => JSON.parse(input.format(format))),\n            });\n        }\n\n        const result: Array<string> = [ ];\n        if (format !== \"sighash\") { result.push(\"error\"); }\n        result.push(this.name + joinParams(format, this.inputs));\n        return result.join(\" \");\n    }\n\n    /**\n     *  Returns a new **ErrorFragment** for %%obj%%.\n     */\n    static from(obj: any): ErrorFragment {\n        if (ErrorFragment.isFragment(obj)) { return obj; }\n\n        if (typeof(obj) === \"string\") {\n            return ErrorFragment.from(lex(obj));\n\n        } else if (obj instanceof TokenString) {\n            const name = consumeName(\"error\", obj);\n            const inputs = consumeParams(obj);\n            consumeEoi(obj);\n\n            return new ErrorFragment(_guard, name, inputs);\n        }\n\n        return new ErrorFragment(_guard, obj.name,\n            obj.inputs ? obj.inputs.map(ParamType.from): [ ]);\n    }\n\n    /**\n     *  Returns ``true`` and provides a type guard if %%value%% is an\n     *  **ErrorFragment**.\n     */\n    static isFragment(value: any): value is ErrorFragment {\n        return (value && value[internal] === ErrorFragmentInternal);\n    }\n}\n\n/**\n *  A Fragment which represents an Event.\n */\nexport class EventFragment extends NamedFragment {\n    /**\n     *  Whether this event is anonymous.\n     */\n    readonly anonymous!: boolean;\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, name: string, inputs: ReadonlyArray<ParamType>, anonymous: boolean) {\n        super(guard, \"event\", name, inputs);\n        Object.defineProperty(this, internal, { value: EventFragmentInternal });\n        defineProperties<EventFragment>(this, { anonymous });\n    }\n\n    /**\n     *  The Event topic hash.\n     */\n    get topicHash(): string {\n        return id(this.format(\"sighash\"));\n    }\n\n    /**\n     *  Returns a string representation of this event as %%format%%.\n     */\n    format(format?: FormatType): string {\n        if (format == null) { format = \"sighash\"; }\n        if (format === \"json\") {\n            return JSON.stringify({\n                type: \"event\",\n                anonymous: this.anonymous,\n                name: this.name,\n                inputs: this.inputs.map((i) => JSON.parse(i.format(format)))\n            });\n        }\n\n        const result: Array<string> = [ ];\n        if (format !== \"sighash\") { result.push(\"event\"); }\n        result.push(this.name + joinParams(format, this.inputs));\n        if (format !== \"sighash\" && this.anonymous) { result.push(\"anonymous\"); }\n        return result.join(\" \");\n    }\n\n    /**\n     *  Return the topic hash for an event with %%name%% and %%params%%.\n     */\n    static getTopicHash(name: string, params?: Array<any>): string {\n        params = (params || []).map((p) => ParamType.from(p));\n        const fragment = new EventFragment(_guard, name, params, false);\n        return fragment.topicHash;\n    }\n\n    /**\n     *  Returns a new **EventFragment** for %%obj%%.\n     */\n    static from(obj: any): EventFragment {\n        if (EventFragment.isFragment(obj)) { return obj; }\n\n        if (typeof(obj) === \"string\") {\n            try {\n                return EventFragment.from(lex(obj));\n            } catch (error) {\n                assertArgument(false, \"invalid event fragment\", \"obj\", obj);\n            }\n\n        } else if (obj instanceof TokenString) {\n            const name = consumeName(\"event\", obj);\n            const inputs = consumeParams(obj, true);\n            const anonymous = !!consumeKeywords(obj, setify([ \"anonymous\" ])).has(\"anonymous\");\n            consumeEoi(obj);\n\n            return new EventFragment(_guard, name, inputs, anonymous);\n        }\n\n        return new EventFragment(_guard, obj.name,\n            obj.inputs ? obj.inputs.map((p: any) => ParamType.from(p, true)): [ ], !!obj.anonymous);\n    }\n\n    /**\n     *  Returns ``true`` and provides a type guard if %%value%% is an\n     *  **EventFragment**.\n     */\n    static isFragment(value: any): value is EventFragment {\n        return (value && value[internal] === EventFragmentInternal);\n    }\n}\n\n/**\n *  A Fragment which represents a constructor.\n */\nexport class ConstructorFragment extends Fragment {\n\n    /**\n     *  Whether the constructor can receive an endowment.\n     */\n    readonly payable!: boolean;\n\n    /**\n     *  The recommended gas limit for deployment or ``null``.\n     */\n    readonly gas!: null | bigint;\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, type: FragmentType, inputs: ReadonlyArray<ParamType>, payable: boolean, gas: null | bigint) {\n        super(guard, type, inputs);\n        Object.defineProperty(this, internal, { value: ConstructorFragmentInternal });\n        defineProperties<ConstructorFragment>(this, { payable, gas });\n    }\n\n    /**\n     *  Returns a string representation of this constructor as %%format%%.\n     */\n    format(format?: FormatType): string {\n        assert(format != null && format !== \"sighash\", \"cannot format a constructor for sighash\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"format(sighash)\" });\n\n        if (format === \"json\") {\n            return JSON.stringify({\n                type: \"constructor\",\n                stateMutability: (this.payable ? \"payable\": \"undefined\"),\n                payable: this.payable,\n                gas: ((this.gas != null) ? this.gas: undefined),\n                inputs: this.inputs.map((i) => JSON.parse(i.format(format)))\n            });\n        }\n\n        const result = [ `constructor${ joinParams(format, this.inputs) }` ];\n        if (this.payable) { result.push(\"payable\"); }\n        if (this.gas != null) { result.push(`@${ this.gas.toString() }`); }\n        return result.join(\" \");\n    }\n\n    /**\n     *  Returns a new **ConstructorFragment** for %%obj%%.\n     */\n    static from(obj: any): ConstructorFragment {\n        if (ConstructorFragment.isFragment(obj)) { return obj; }\n\n        if (typeof(obj) === \"string\") {\n            try {\n                return ConstructorFragment.from(lex(obj));\n            } catch (error) {\n                assertArgument(false, \"invalid constuctor fragment\", \"obj\", obj);\n            }\n\n        } else if (obj instanceof TokenString) {\n            consumeKeywords(obj, setify([ \"constructor\" ]));\n            const inputs = consumeParams(obj);\n            const payable = !!consumeKeywords(obj, KwVisibDeploy).has(\"payable\");\n            const gas = consumeGas(obj);\n            consumeEoi(obj);\n\n            return new ConstructorFragment(_guard, \"constructor\", inputs, payable, gas);\n        }\n\n        return new ConstructorFragment(_guard, \"constructor\",\n            obj.inputs ? obj.inputs.map(ParamType.from): [ ],\n            !!obj.payable, (obj.gas != null) ? obj.gas: null);\n    }\n\n    /**\n     *  Returns ``true`` and provides a type guard if %%value%% is a\n     *  **ConstructorFragment**.\n     */\n    static isFragment(value: any): value is ConstructorFragment {\n        return (value && value[internal] === ConstructorFragmentInternal);\n    }\n}\n\n/**\n *  A Fragment which represents a method.\n */\nexport class FallbackFragment extends Fragment {\n\n    /**\n     *  If the function can be sent value during invocation.\n     */\n    readonly payable!: boolean;\n\n    constructor(guard: any, inputs: ReadonlyArray<ParamType>, payable: boolean) {\n        super(guard, \"fallback\", inputs);\n        Object.defineProperty(this, internal, { value: FallbackFragmentInternal });\n        defineProperties<FallbackFragment>(this, { payable });\n    }\n\n    /**\n     *  Returns a string representation of this fallback as %%format%%.\n     */\n    format(format?: FormatType): string {\n        const type = ((this.inputs.length === 0) ? \"receive\": \"fallback\");\n\n        if (format === \"json\") {\n            const stateMutability = (this.payable ? \"payable\": \"nonpayable\");\n            return JSON.stringify({ type, stateMutability });\n        }\n\n        return `${ type }()${ this.payable ? \" payable\": \"\" }`;\n    }\n\n    /**\n     *  Returns a new **FallbackFragment** for %%obj%%.\n     */\n    static from(obj: any): FallbackFragment {\n        if (FallbackFragment.isFragment(obj)) { return obj; }\n\n        if (typeof(obj) === \"string\") {\n            try {\n                return FallbackFragment.from(lex(obj));\n            } catch (error) {\n                assertArgument(false, \"invalid fallback fragment\", \"obj\", obj);\n            }\n\n        } else if (obj instanceof TokenString) {\n            const errorObj = obj.toString();\n\n            const topIsValid = obj.peekKeyword(setify([ \"fallback\", \"receive\" ]));\n            assertArgument(topIsValid, \"type must be fallback or receive\", \"obj\", errorObj);\n\n            const type = obj.popKeyword(setify([ \"fallback\", \"receive\" ]));\n\n            // receive()\n            if (type === \"receive\") {\n                const inputs = consumeParams(obj);\n                assertArgument(inputs.length === 0, `receive cannot have arguments`, \"obj.inputs\", inputs);\n                consumeKeywords(obj, setify([ \"payable\" ]));\n                consumeEoi(obj);\n                return new FallbackFragment(_guard, [ ], true);\n            }\n\n            // fallback() [payable]\n            // fallback(bytes) [payable] returns (bytes)\n            let inputs = consumeParams(obj);\n            if (inputs.length) {\n                assertArgument(inputs.length === 1 && inputs[0].type === \"bytes\",\n                    \"invalid fallback inputs\", \"obj.inputs\",\n                    inputs.map((i) => i.format(\"minimal\")).join(\", \"));\n            } else {\n                inputs = [ ParamType.from(\"bytes\") ];\n            }\n\n            const mutability = consumeMutability(obj);\n            assertArgument(mutability === \"nonpayable\" || mutability === \"payable\", \"fallback cannot be constants\", \"obj.stateMutability\", mutability);\n\n            if (consumeKeywords(obj, setify([ \"returns\" ])).has(\"returns\")) {\n                const outputs = consumeParams(obj);\n                assertArgument(outputs.length === 1 && outputs[0].type === \"bytes\",\n                    \"invalid fallback outputs\", \"obj.outputs\",\n                    outputs.map((i) => i.format(\"minimal\")).join(\", \"));\n            }\n\n            consumeEoi(obj);\n\n            return new FallbackFragment(_guard, inputs, mutability === \"payable\");\n        }\n\n        if (obj.type === \"receive\") {\n            return new FallbackFragment(_guard, [ ], true);\n        }\n\n        if (obj.type === \"fallback\") {\n            const inputs = [ ParamType.from(\"bytes\") ];\n            const payable = (obj.stateMutability === \"payable\");\n            return new FallbackFragment(_guard, inputs, payable);\n        }\n\n        assertArgument(false, \"invalid fallback description\", \"obj\", obj);\n    }\n\n    /**\n     *  Returns ``true`` and provides a type guard if %%value%% is a\n     *  **FallbackFragment**.\n     */\n    static isFragment(value: any): value is FallbackFragment {\n        return (value && value[internal] === FallbackFragmentInternal);\n    }\n}\n\n\n/**\n *  A Fragment which represents a method.\n */\nexport class FunctionFragment extends NamedFragment {\n    /**\n     *  If the function is constant (e.g. ``pure`` or ``view`` functions).\n     */\n    readonly constant!: boolean;\n\n    /**\n     *  The returned types for the result of calling this function.\n     */\n    readonly outputs!: ReadonlyArray<ParamType>;\n\n    /**\n     *  The state mutability (e.g. ``payable``, ``nonpayable``, ``view``\n     *  or ``pure``)\n     */\n    readonly stateMutability!: \"payable\" | \"nonpayable\" | \"view\" | \"pure\";\n\n    /**\n     *  If the function can be sent value during invocation.\n     */\n    readonly payable!: boolean;\n\n    /**\n     *  The recommended gas limit to send when calling this function.\n     */\n    readonly gas!: null | bigint;\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, name: string, stateMutability: \"payable\" | \"nonpayable\" | \"view\" | \"pure\", inputs: ReadonlyArray<ParamType>, outputs: ReadonlyArray<ParamType>, gas: null | bigint) {\n        super(guard, \"function\", name, inputs);\n        Object.defineProperty(this, internal, { value: FunctionFragmentInternal });\n        outputs = Object.freeze(outputs.slice());\n        const constant = (stateMutability === \"view\" || stateMutability === \"pure\");\n        const payable = (stateMutability === \"payable\");\n        defineProperties<FunctionFragment>(this, { constant, gas, outputs, payable, stateMutability });\n    }\n\n    /**\n     *  The Function selector.\n     */\n    get selector(): string {\n        return id(this.format(\"sighash\")).substring(0, 10);\n    }\n\n    /**\n     *  Returns a string representation of this function as %%format%%.\n     */\n    format(format?: FormatType): string {\n        if (format == null) { format = \"sighash\"; }\n        if (format === \"json\") {\n            return JSON.stringify({\n                type: \"function\",\n                name: this.name,\n                constant: this.constant,\n                stateMutability: ((this.stateMutability !== \"nonpayable\") ? this.stateMutability: undefined),\n                payable: this.payable,\n                gas: ((this.gas != null) ? this.gas: undefined),\n                inputs: this.inputs.map((i) => JSON.parse(i.format(format))),\n                outputs: this.outputs.map((o) => JSON.parse(o.format(format))),\n            });\n        }\n\n        const result: Array<string> = [];\n\n        if (format !== \"sighash\") { result.push(\"function\"); }\n\n        result.push(this.name + joinParams(format, this.inputs));\n\n        if (format !== \"sighash\") {\n            if (this.stateMutability !== \"nonpayable\") {\n                result.push(this.stateMutability);\n            }\n\n            if (this.outputs && this.outputs.length) {\n                result.push(\"returns\");\n                result.push(joinParams(format, this.outputs));\n            }\n\n            if (this.gas != null) { result.push(`@${ this.gas.toString() }`); }\n        }\n        return result.join(\" \");\n    }\n\n    /**\n     *  Return the selector for a function with %%name%% and %%params%%.\n     */\n    static getSelector(name: string, params?: Array<any>): string {\n        params = (params || []).map((p) => ParamType.from(p));\n        const fragment = new FunctionFragment(_guard, name, \"view\", params, [ ], null);\n        return fragment.selector;\n    }\n\n    /**\n     *  Returns a new **FunctionFragment** for %%obj%%.\n     */\n    static from(obj: any): FunctionFragment {\n        if (FunctionFragment.isFragment(obj)) { return obj; }\n\n        if (typeof(obj) === \"string\") {\n            try {\n                return FunctionFragment.from(lex(obj));\n            } catch (error) {\n                assertArgument(false, \"invalid function fragment\", \"obj\", obj);\n            }\n\n        } else if (obj instanceof TokenString) {\n            const name = consumeName(\"function\", obj);\n            const inputs = consumeParams(obj);\n            const mutability = consumeMutability(obj);\n\n            let outputs: Array<ParamType> = [ ];\n            if (consumeKeywords(obj, setify([ \"returns\" ])).has(\"returns\")) {\n                outputs = consumeParams(obj);\n            }\n\n            const gas = consumeGas(obj);\n\n            consumeEoi(obj);\n\n            return new FunctionFragment(_guard, name, mutability, inputs, outputs, gas);\n        }\n\n        let stateMutability = obj.stateMutability;\n\n        // Use legacy Solidity ABI logic if stateMutability is missing\n        if (stateMutability == null) {\n            stateMutability = \"payable\";\n\n            if (typeof(obj.constant) === \"boolean\") {\n                stateMutability = \"view\";\n                if (!obj.constant) {\n                    stateMutability = \"payable\"\n                    if (typeof(obj.payable) === \"boolean\" && !obj.payable) {\n                        stateMutability = \"nonpayable\";\n                    }\n                }\n            } else if (typeof(obj.payable) === \"boolean\" && !obj.payable) {\n                stateMutability = \"nonpayable\";\n            }\n        }\n\n        // @TODO: verifyState for stateMutability (e.g. throw if\n        //        payable: false but stateMutability is \"nonpayable\")\n\n        return new FunctionFragment(_guard, obj.name, stateMutability,\n             obj.inputs ? obj.inputs.map(ParamType.from): [ ],\n             obj.outputs ? obj.outputs.map(ParamType.from): [ ],\n             (obj.gas != null) ? obj.gas: null);\n    }\n\n    /**\n     *  Returns ``true`` and provides a type guard if %%value%% is a\n     *  **FunctionFragment**.\n     */\n    static isFragment(value: any): value is FunctionFragment {\n        return (value && value[internal] === FunctionFragmentInternal);\n    }\n}\n\n/**\n *  A Fragment which represents a structure.\n */\nexport class StructFragment extends NamedFragment {\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, name: string, inputs: ReadonlyArray<ParamType>) {\n        super(guard, \"struct\", name, inputs);\n        Object.defineProperty(this, internal, { value: StructFragmentInternal });\n    }\n\n    /**\n     *  Returns a string representation of this struct as %%format%%.\n     */\n    format(): string {\n        throw new Error(\"@TODO\");\n    }\n\n    /**\n     *  Returns a new **StructFragment** for %%obj%%.\n     */\n    static from(obj: any): StructFragment {\n        if (typeof(obj) === \"string\") {\n            try {\n                return StructFragment.from(lex(obj));\n            } catch (error) {\n                assertArgument(false, \"invalid struct fragment\", \"obj\", obj);\n            }\n\n        } else if (obj instanceof TokenString) {\n            const name = consumeName(\"struct\", obj);\n            const inputs = consumeParams(obj);\n            consumeEoi(obj);\n            return new StructFragment(_guard, name, inputs);\n        }\n\n        return new StructFragment(_guard, obj.name, obj.inputs ? obj.inputs.map(ParamType.from): [ ]);\n    }\n\n// @TODO: fix this return type\n    /**\n     *  Returns ``true`` and provides a type guard if %%value%% is a\n     *  **StructFragment**.\n     */\n    static isFragment(value: any): value is FunctionFragment {\n        return (value && value[internal] === StructFragmentInternal);\n    }\n}\n\n", "/**\n *  When sending values to or receiving values from a [[Contract]], the\n *  data is generally encoded using the [ABI standard](link-solc-abi).\n *\n *  The AbiCoder provides a utility to encode values to ABI data and\n *  decode values from ABI data.\n *\n *  Most of the time, developers should favour the [[Contract]] class,\n *  which further abstracts a lot of the finer details of ABI data.\n *\n *  @_section api/abi/abi-coder:ABI Encoding\n */\n\n// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI\n\nimport { assertArgumentCount, assertArgument } from \"../utils/index.js\";\n\nimport { Coder, Reader, Result, Writer } from \"./coders/abstract-coder.js\";\nimport { AddressCoder } from \"./coders/address.js\";\nimport { ArrayCoder } from \"./coders/array.js\";\nimport { BooleanCoder } from \"./coders/boolean.js\";\nimport { BytesCoder } from \"./coders/bytes.js\";\nimport { FixedBytesCoder } from \"./coders/fixed-bytes.js\";\nimport { NullCoder } from \"./coders/null.js\";\nimport { NumberCoder } from \"./coders/number.js\";\nimport { StringCoder } from \"./coders/string.js\";\nimport { TupleCoder } from \"./coders/tuple.js\";\nimport { ParamType } from \"./fragments.js\";\n\nimport { getAddress } from \"../address/index.js\";\nimport { getBytes, hexlify, makeError } from \"../utils/index.js\";\n\nimport type {\n    BytesLike,\n    CallExceptionAction, CallExceptionError, CallExceptionTransaction\n} from \"../utils/index.js\";\n\n// https://docs.soliditylang.org/en/v0.8.17/control-structures.html\nconst PanicReasons: Map<number, string> = new Map();\nPanicReasons.set(0x00, \"GENERIC_PANIC\");\nPanicReasons.set(0x01, \"ASSERT_FALSE\");\nPanicReasons.set(0x11, \"OVERFLOW\");\nPanicReasons.set(0x12, \"DIVIDE_BY_ZERO\");\nPanicReasons.set(0x21, \"ENUM_RANGE_ERROR\");\nPanicReasons.set(0x22, \"BAD_STORAGE_DATA\");\nPanicReasons.set(0x31, \"STACK_UNDERFLOW\");\nPanicReasons.set(0x32, \"ARRAY_RANGE_ERROR\");\nPanicReasons.set(0x41, \"OUT_OF_MEMORY\");\nPanicReasons.set(0x51, \"UNINITIALIZED_FUNCTION_CALL\");\n\nconst paramTypeBytes = new RegExp(/^bytes([0-9]*)$/);\nconst paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/);\n\n\nlet defaultCoder: null | AbiCoder = null;\nlet defaultMaxInflation = 1024;\n\nfunction getBuiltinCallException(action: CallExceptionAction, tx: { to?: null | string, from?: null | string, data?: string }, data: null | BytesLike, abiCoder: AbiCoder): CallExceptionError {\n    let message = \"missing revert data\";\n\n    let reason: null | string = null;\n    const invocation = null;\n    let revert: null | { signature: string, name: string, args: Array<any> } = null;\n\n    if (data) {\n        message = \"execution reverted\";\n\n        const bytes = getBytes(data);\n        data = hexlify(data);\n\n        if (bytes.length === 0) {\n            message += \" (no data present; likely require(false) occurred\";\n            reason = \"require(false)\";\n\n        } else if (bytes.length % 32 !== 4) {\n            message += \" (could not decode reason; invalid data length)\";\n\n        } else if (hexlify(bytes.slice(0, 4)) === \"0x08c379a0\") {\n            // Error(string)\n            try {\n                reason = abiCoder.decode([ \"string\" ], bytes.slice(4))[0]\n                revert = {\n                    signature: \"Error(string)\",\n                    name: \"Error\",\n                    args: [ reason ]\n                };\n                message += `: ${ JSON.stringify(reason) }`;\n\n            } catch (error) {\n                message += \" (could not decode reason; invalid string data)\";\n            }\n\n        } else if (hexlify(bytes.slice(0, 4)) === \"0x4e487b71\") {\n            // Panic(uint256)\n            try {\n                const code = Number(abiCoder.decode([ \"uint256\" ], bytes.slice(4))[0]);\n                revert = {\n                    signature: \"Panic(uint256)\",\n                    name: \"Panic\",\n                    args: [ code ]\n                };\n                reason = `Panic due to ${ PanicReasons.get(code) || \"UNKNOWN\" }(${ code })`;\n                message += `: ${ reason }`;\n            } catch (error) {\n                message += \" (could not decode panic code)\";\n            }\n        } else {\n            message += \" (unknown custom error)\";\n        }\n    }\n\n    const transaction: CallExceptionTransaction = {\n        to: (tx.to ? getAddress(tx.to): null),\n        data: (tx.data || \"0x\")\n    };\n    if (tx.from) { transaction.from = getAddress(tx.from); }\n\n    return makeError(message, \"CALL_EXCEPTION\", {\n        action, data, reason, transaction, invocation, revert\n    });\n}\n\n/**\n *  The **AbiCoder** is a low-level class responsible for encoding JavaScript\n *  values into binary data and decoding binary data into JavaScript values.\n */\nexport class AbiCoder {\n\n    #getCoder(param: ParamType): Coder {\n        if (param.isArray()) {\n            return new ArrayCoder(this.#getCoder(param.arrayChildren), param.arrayLength, param.name);\n        }\n\n        if (param.isTuple()) {\n            return new TupleCoder(param.components.map((c) => this.#getCoder(c)), param.name);\n        }\n\n        switch (param.baseType) {\n            case \"address\":\n                return new AddressCoder(param.name);\n            case \"bool\":\n                return new BooleanCoder(param.name);\n            case \"string\":\n                return new StringCoder(param.name);\n            case \"bytes\":\n                return new BytesCoder(param.name);\n            case \"\":\n                return new NullCoder(param.name);\n        }\n\n        // u?int[0-9]*\n        let match = param.type.match(paramTypeNumber);\n        if (match) {\n            let size = parseInt(match[2] || \"256\");\n            assertArgument(size !== 0 && size <= 256 && (size % 8) === 0,\n                \"invalid \" + match[1] + \" bit length\", \"param\", param);\n            return new NumberCoder(size / 8, (match[1] === \"int\"), param.name);\n        }\n\n        // bytes[0-9]+\n        match = param.type.match(paramTypeBytes);\n        if (match) {\n            let size = parseInt(match[1]);\n            assertArgument(size !== 0 && size <= 32, \"invalid bytes length\", \"param\", param);\n            return new FixedBytesCoder(size, param.name);\n        }\n\n        assertArgument(false, \"invalid type\", \"type\", param.type);\n    }\n\n    /**\n     *  Get the default values for the given %%types%%.\n     *\n     *  For example, a ``uint`` is by default ``0`` and ``bool``\n     *  is by default ``false``.\n     */\n    getDefaultValue(types: ReadonlyArray<string | ParamType>): Result {\n        const coders: Array<Coder> = types.map((type) => this.#getCoder(ParamType.from(type)));\n        const coder = new TupleCoder(coders, \"_\");\n        return coder.defaultValue();\n    }\n\n    /**\n     *  Encode the %%values%% as the %%types%% into ABI data.\n     *\n     *  @returns DataHexstring\n     */\n    encode(types: ReadonlyArray<string | ParamType>, values: ReadonlyArray<any>): string {\n        assertArgumentCount(values.length, types.length, \"types/values length mismatch\");\n\n        const coders = types.map((type) => this.#getCoder(ParamType.from(type)));\n        const coder = (new TupleCoder(coders, \"_\"));\n\n        const writer = new Writer();\n        coder.encode(writer, values);\n        return writer.data;\n    }\n\n    /**\n     *  Decode the ABI %%data%% as the %%types%% into values.\n     *\n     *  If %%loose%% decoding is enabled, then strict padding is\n     *  not enforced. Some older versions of Solidity incorrectly\n     *  padded event data emitted from ``external`` functions.\n     */\n    decode(types: ReadonlyArray<string | ParamType>, data: BytesLike, loose?: boolean): Result {\n        const coders: Array<Coder> = types.map((type) => this.#getCoder(ParamType.from(type)));\n        const coder = new TupleCoder(coders, \"_\");\n        return coder.decode(new Reader(data, loose, defaultMaxInflation));\n    }\n\n    static _setDefaultMaxInflation(value: number): void {\n        assertArgument(typeof(value) === \"number\" && Number.isInteger(value), \"invalid defaultMaxInflation factor\", \"value\", value);\n        defaultMaxInflation = value;\n    }\n\n    /**\n     *  Returns the shared singleton instance of a default [[AbiCoder]].\n     *\n     *  On the first call, the instance is created internally.\n     */\n    static defaultAbiCoder(): AbiCoder {\n        if (defaultCoder == null) {\n            defaultCoder = new AbiCoder();\n        }\n        return defaultCoder;\n    }\n\n    /**\n     *  Returns an ethers-compatible [[CallExceptionError]] Error for the given\n     *  result %%data%% for the [[CallExceptionAction]] %%action%% against\n     *  the Transaction %%tx%%.\n     */\n    static getBuiltinCallException(action: CallExceptionAction, tx: { to?: null | string, from?: null | string, data?: string }, data: null | BytesLike): CallExceptionError {\n        return getBuiltinCallException(action, tx, data, AbiCoder.defaultAbiCoder());\n    }\n}\n", "/**\n *  The Interface class is a low-level class that accepts an\n *  ABI and provides all the necessary functionality to encode\n *  and decode paramaters to and results from methods, events\n *  and errors.\n *\n *  It also provides several convenience methods to automatically\n *  search and find matching transactions and events to parse them.\n *\n *  @_subsection api/abi:Interfaces  [interfaces]\n */\n\nimport { keccak256 } from \"../crypto/index.js\"\nimport { id } from \"../hash/index.js\"\nimport {\n    concat, dataSlice, getBigInt, getBytes, getBytesCopy,\n    hexlify, zeroPadBytes, zeroPadValue, isHexString, defineProperties,\n    assertArgument, toBeHex, assert\n} from \"../utils/index.js\";\n\nimport { AbiCoder } from \"./abi-coder.js\";\nimport { checkResultErrors, Result } from \"./coders/abstract-coder.js\";\nimport {\n    ConstructorFragment, ErrorFragment, EventFragment, FallbackFragment,\n    Fragment, FunctionFragment, ParamType\n} from \"./fragments.js\";\nimport { Typed } from \"./typed.js\";\n\nimport type { BigNumberish, BytesLike, CallExceptionError, CallExceptionTransaction } from \"../utils/index.js\";\n\nimport type { JsonFragment } from \"./fragments.js\";\n\n\nexport { checkResultErrors, Result };\n\n/**\n *  When using the [[Interface-parseLog]] to automatically match a Log to its event\n *  for parsing, a **LogDescription** is returned.\n */\nexport class LogDescription {\n    /**\n     *  The matching fragment for the ``topic0``.\n     */\n    readonly fragment!: EventFragment;\n\n    /**\n     *  The name of the Event.\n     */\n    readonly name!: string;\n\n    /**\n     *  The full Event signature.\n     */\n    readonly signature!: string;\n\n    /**\n     *  The topic hash for the Event.\n     */\n    readonly topic!: string;\n\n    /**\n     *  The arguments passed into the Event with ``emit``.\n     */\n    readonly args!: Result\n\n    /**\n     *  @_ignore:\n     */\n    constructor(fragment: EventFragment, topic: string, args: Result) {\n        const name = fragment.name, signature = fragment.format();\n        defineProperties<LogDescription>(this, {\n            fragment, name, signature, topic, args\n        });\n    }\n}\n\n/**\n *  When using the [[Interface-parseTransaction]] to automatically match\n *  a transaction data to its function for parsing,\n *  a **TransactionDescription** is returned.\n */\nexport class TransactionDescription {\n    /**\n     *  The matching fragment from the transaction ``data``.\n     */\n    readonly fragment!: FunctionFragment;\n\n    /**\n     *  The name of the Function from the transaction ``data``.\n     */\n    readonly name!: string;\n\n    /**\n     *  The arguments passed to the Function from the transaction ``data``.\n     */\n    readonly args!: Result;\n\n    /**\n     *  The full Function signature from the transaction ``data``.\n     */\n    readonly signature!: string;\n\n    /**\n     *  The selector for the Function from the transaction ``data``.\n     */\n    readonly selector!: string;\n\n    /**\n     *  The ``value`` (in wei) from the transaction.\n     */\n    readonly value!: bigint;\n\n    /**\n     *  @_ignore:\n     */\n    constructor(fragment: FunctionFragment, selector: string, args: Result, value: bigint) {\n        const name = fragment.name, signature = fragment.format();\n        defineProperties<TransactionDescription>(this, {\n            fragment, name, args, signature, selector, value\n        });\n    }\n}\n\n/**\n *  When using the [[Interface-parseError]] to automatically match an\n *  error for a call result for parsing, an **ErrorDescription** is returned.\n */\nexport class ErrorDescription {\n    /**\n     *  The matching fragment.\n     */\n    readonly fragment!: ErrorFragment;\n\n    /**\n     *  The name of the Error.\n     */\n    readonly name!: string;\n\n    /**\n     *  The arguments passed to the Error with ``revert``.\n     */\n    readonly args!: Result;\n\n    /**\n     *  The full Error signature.\n     */\n    readonly signature!: string;\n\n    /**\n     *  The selector for the Error.\n     */\n    readonly selector!: string;\n\n    /**\n     *  @_ignore:\n     */\n    constructor(fragment: ErrorFragment, selector: string, args: Result) {\n        const name = fragment.name, signature = fragment.format();\n        defineProperties<ErrorDescription>(this, {\n            fragment, name, args, signature, selector\n        });\n    }\n}\n\n/**\n *  An **Indexed** is used as a value when a value that does not\n *  fit within a topic (i.e. not a fixed-length, 32-byte type). It\n *  is the ``keccak256`` of the value, and used for types such as\n *  arrays, tuples, bytes and strings.\n */\nexport class Indexed {\n    /**\n     *  The ``keccak256`` of the value logged.\n     */\n    readonly hash!: null | string;\n\n    /**\n     *  @_ignore:\n     */\n    readonly _isIndexed!: boolean;\n\n    /**\n     *  Returns ``true`` if %%value%% is an **Indexed**.\n     *\n     *  This provides a Type Guard for property access.\n     */\n    static isIndexed(value: any): value is Indexed {\n        return !!(value && value._isIndexed);\n    }\n\n    /**\n     *  @_ignore:\n     */\n    constructor(hash: null | string) {\n        defineProperties<Indexed>(this, { hash, _isIndexed: true })\n    }\n}\n\ntype ErrorInfo = {\n    signature: string,\n    inputs: Array<string>,\n    name: string,\n    reason: (...args: Array<any>) => string;\n};\n\n// https://docs.soliditylang.org/en/v0.8.13/control-structures.html?highlight=panic#panic-via-assert-and-error-via-require\nconst PanicReasons: Record<string, string> = {\n    \"0\": \"generic panic\",\n    \"1\": \"assert(false)\",\n    \"17\": \"arithmetic overflow\",\n    \"18\": \"division or modulo by zero\",\n    \"33\": \"enum overflow\",\n    \"34\": \"invalid encoded storage byte array accessed\",\n    \"49\": \"out-of-bounds array access; popping on an empty array\",\n    \"50\": \"out-of-bounds access of an array or bytesN\",\n    \"65\": \"out of memory\",\n    \"81\": \"uninitialized function\",\n}\n\nconst BuiltinErrors: Record<string, ErrorInfo> = {\n    \"0x08c379a0\": {\n        signature: \"Error(string)\",\n        name: \"Error\",\n        inputs: [ \"string\" ],\n        reason: (message: string) => {\n            return `reverted with reason string ${ JSON.stringify(message) }`;\n        }\n    },\n    \"0x4e487b71\": {\n        signature: \"Panic(uint256)\",\n        name: \"Panic\",\n        inputs: [ \"uint256\" ],\n        reason: (code: bigint) => {\n            let reason = \"unknown panic code\";\n            if (code >= 0 && code <= 0xff && PanicReasons[code.toString()]) {\n                reason = PanicReasons[code.toString()];\n            }\n            return `reverted with panic code 0x${ code.toString(16) } (${ reason })`;\n        }\n    }\n}\n\n/*\nfunction wrapAccessError(property: string, error: Error): Error {\n    const wrap = new Error(`deferred error during ABI decoding triggered accessing ${ property }`);\n    (<any>wrap).error = error;\n    return wrap;\n}\n*/\n/*\nfunction checkNames(fragment: Fragment, type: \"input\" | \"output\", params: Array<ParamType>): void {\n    params.reduce((accum, param) => {\n        if (param.name) {\n            if (accum[param.name]) {\n                logger.throwArgumentError(`duplicate ${ type } parameter ${ JSON.stringify(param.name) } in ${ fragment.format(\"full\") }`, \"fragment\", fragment);\n            }\n            accum[param.name] = true;\n        }\n        return accum;\n    }, <{ [ name: string ]: boolean }>{ });\n}\n*/\n\n/**\n *  An **InterfaceAbi** may be any supported ABI format.\n *\n *  A string is expected to be a JSON string, which will be parsed\n *  using ``JSON.parse``. This means that the value **must** be a valid\n *  JSON string, with no stray commas, etc.\n *\n *  An array may contain any combination of:\n *  - Human-Readable fragments\n *  - Parsed JSON fragment\n *  - [[Fragment]] instances\n *\n *  A **Human-Readable Fragment** is a string which resembles a Solidity\n *  signature and is introduced in [this blog entry](link-ricmoo-humanreadableabi).\n *  For example, ``function balanceOf(address) view returns (uint)``.\n *\n *  A **Parsed JSON Fragment** is a JavaScript Object desribed in the\n *  [Solidity documentation](link-solc-jsonabi).\n */\nexport type InterfaceAbi = string | ReadonlyArray<Fragment | JsonFragment | string>;\n\n/**\n *  An Interface abstracts many of the low-level details for\n *  encoding and decoding the data on the blockchain.\n *\n *  An ABI provides information on how to encode data to send to\n *  a Contract, how to decode the results and events and how to\n *  interpret revert errors.\n *\n *  The ABI can be specified by [any supported format](InterfaceAbi).\n */\nexport class Interface {\n\n    /**\n     *  All the Contract ABI members (i.e. methods, events, errors, etc).\n     */\n    readonly fragments!: ReadonlyArray<Fragment>;\n\n    /**\n     *  The Contract constructor.\n     */\n    readonly deploy!: ConstructorFragment;\n\n    /**\n     *  The Fallback method, if any.\n     */\n    readonly fallback!: null | FallbackFragment;\n\n    /**\n     *  If receiving ether is supported.\n     */\n    readonly receive!: boolean;\n\n    #errors: Map<string, ErrorFragment>;\n    #events: Map<string, EventFragment>;\n    #functions: Map<string, FunctionFragment>;\n//    #structs: Map<string, StructFragment>;\n\n    #abiCoder: AbiCoder;\n\n    /**\n     *  Create a new Interface for the %%fragments%%.\n     */\n    constructor(fragments: InterfaceAbi) {\n        let abi: ReadonlyArray<Fragment | JsonFragment | string> = [ ];\n        if (typeof(fragments) === \"string\") {\n            abi = JSON.parse(fragments);\n        } else {\n            abi = fragments;\n        }\n\n        this.#functions = new Map();\n        this.#errors = new Map();\n        this.#events = new Map();\n//        this.#structs = new Map();\n\n\n        const frags: Array<Fragment> = [ ];\n        for (const a of abi) {\n            try {\n                frags.push(Fragment.from(a));\n            } catch (error: any) {\n                console.log(`[Warning] Invalid Fragment ${ JSON.stringify(a) }:`, error.message);\n            }\n        }\n\n        defineProperties<Interface>(this, {\n            fragments: Object.freeze(frags)\n        });\n\n        let fallback: null | FallbackFragment = null;\n        let receive = false;\n\n        this.#abiCoder = this.getAbiCoder();\n\n        // Add all fragments by their signature\n        this.fragments.forEach((fragment, index) => {\n            let bucket: Map<string, Fragment>;\n            switch (fragment.type) {\n                case \"constructor\":\n                    if (this.deploy) {\n                        console.log(\"duplicate definition - constructor\");\n                        return;\n                    }\n                    //checkNames(fragment, \"input\", fragment.inputs);\n                    defineProperties<Interface>(this, { deploy: <ConstructorFragment>fragment });\n                    return;\n\n                case \"fallback\":\n                    if (fragment.inputs.length === 0) {\n                        receive = true;\n                    } else {\n                        assertArgument(!fallback || (<FallbackFragment>fragment).payable !== fallback.payable,\n                            \"conflicting fallback fragments\", `fragments[${ index }]`, fragment);\n                        fallback = <FallbackFragment>fragment;\n                        receive = fallback.payable;\n                    }\n                    return;\n\n                case \"function\":\n                    //checkNames(fragment, \"input\", fragment.inputs);\n                    //checkNames(fragment, \"output\", (<FunctionFragment>fragment).outputs);\n                    bucket = this.#functions;\n                    break;\n\n                case \"event\":\n                    //checkNames(fragment, \"input\", fragment.inputs);\n                    bucket = this.#events;\n                    break;\n\n                case \"error\":\n                    bucket = this.#errors;\n                    break;\n\n                default:\n                    return;\n            }\n\n            // Two identical entries; ignore it\n            const signature = fragment.format();\n            if (bucket.has(signature)) { return; }\n\n            bucket.set(signature, fragment);\n        });\n\n        // If we do not have a constructor add a default\n        if (!this.deploy) {\n            defineProperties<Interface>(this, {\n                deploy: ConstructorFragment.from(\"constructor()\")\n            });\n        }\n\n        defineProperties<Interface>(this, { fallback, receive });\n    }\n\n    /**\n     *  Returns the entire Human-Readable ABI, as an array of\n     *  signatures, optionally as %%minimal%% strings, which\n     *  removes parameter names and unneceesary spaces.\n     */\n    format(minimal?: boolean): Array<string> {\n        const format = (minimal ? \"minimal\": \"full\");\n        const abi = this.fragments.map((f) => f.format(format));\n        return abi;\n    }\n\n    /**\n     *  Return the JSON-encoded ABI. This is the format Solidiy\n     *  returns.\n     */\n    formatJson(): string {\n        const abi = this.fragments.map((f) => f.format(\"json\"));\n\n        // We need to re-bundle the JSON fragments a bit\n        return JSON.stringify(abi.map((j) => JSON.parse(j)));\n    }\n\n    /**\n     *  The ABI coder that will be used to encode and decode binary\n     *  data.\n     */\n    getAbiCoder(): AbiCoder {\n        return AbiCoder.defaultAbiCoder();\n    }\n\n    // Find a function definition by any means necessary (unless it is ambiguous)\n    #getFunction(key: string, values: null | Array<any | Typed>, forceUnique: boolean): null | FunctionFragment {\n\n        // Selector\n        if (isHexString(key)) {\n            const selector = key.toLowerCase();\n            for (const fragment of this.#functions.values()) {\n                if (selector === fragment.selector) { return fragment; }\n            }\n            return null;\n        }\n\n        // It is a bare name, look up the function (will return null if ambiguous)\n        if (key.indexOf(\"(\") === -1) {\n            const matching: Array<FunctionFragment> = [ ];\n            for (const [ name, fragment ] of this.#functions) {\n                if (name.split(\"(\"/* fix:) */)[0] === key) { matching.push(fragment); }\n            }\n\n            if (values) {\n                const lastValue = (values.length > 0) ? values[values.length - 1]: null;\n\n                let valueLength = values.length;\n                let allowOptions = true;\n                if (Typed.isTyped(lastValue) && lastValue.type === \"overrides\") {\n                    allowOptions = false;\n                    valueLength--;\n                }\n\n                // Remove all matches that don't have a compatible length. The args\n                // may contain an overrides, so the match may have n or n - 1 parameters\n                for (let i = matching.length - 1; i >= 0; i--) {\n                    const inputs = matching[i].inputs.length;\n                    if (inputs !== valueLength && (!allowOptions || inputs !== valueLength - 1)) {\n                        matching.splice(i, 1);\n                    }\n                }\n\n                // Remove all matches that don't match the Typed signature\n                for (let i = matching.length - 1; i >= 0; i--) {\n                    const inputs = matching[i].inputs;\n                    for (let j = 0; j < values.length; j++) {\n                        // Not a typed value\n                        if (!Typed.isTyped(values[j])) { continue; }\n\n                        // We are past the inputs\n                        if (j >= inputs.length) {\n                            if (values[j].type === \"overrides\") { continue; }\n                            matching.splice(i, 1);\n                            break;\n                        }\n\n                        // Make sure the value type matches the input type\n                        if (values[j].type !== inputs[j].baseType) {\n                            matching.splice(i, 1);\n                            break;\n                        }\n                    }\n                }\n            }\n\n            // We found a single matching signature with an overrides, but the\n            // last value is something that cannot possibly be an options\n            if (matching.length === 1 && values && values.length !== matching[0].inputs.length) {\n                const lastArg = values[values.length - 1];\n                if (lastArg == null || Array.isArray(lastArg) || typeof(lastArg) !== \"object\") {\n                    matching.splice(0, 1);\n                }\n            }\n\n            if (matching.length === 0) { return null; }\n\n            if (matching.length > 1 && forceUnique) {\n                const matchStr = matching.map((m) => JSON.stringify(m.format())).join(\", \");\n                assertArgument(false, `ambiguous function description (i.e. matches ${ matchStr })`, \"key\", key);\n            }\n\n            return matching[0];\n        }\n\n        // Normalize the signature and lookup the function\n        const result = this.#functions.get(FunctionFragment.from(key).format());\n        if (result) { return result; }\n\n        return null;\n    }\n\n    /**\n     *  Get the function name for %%key%%, which may be a function selector,\n     *  function name or function signature that belongs to the ABI.\n     */\n    getFunctionName(key: string): string {\n        const fragment = this.#getFunction(key, null, false);\n        assertArgument(fragment, \"no matching function\", \"key\", key);\n        return fragment.name;\n    }\n\n    /**\n     *  Returns true if %%key%% (a function selector, function name or\n     *  function signature) is present in the ABI.\n     *\n     *  In the case of a function name, the name may be ambiguous, so\n     *  accessing the [[FunctionFragment]] may require refinement.\n     */\n    hasFunction(key: string): boolean {\n        return !!this.#getFunction(key, null, false);\n    }\n\n    /**\n     *  Get the [[FunctionFragment]] for %%key%%, which may be a function\n     *  selector, function name or function signature that belongs to the ABI.\n     *\n     *  If %%values%% is provided, it will use the Typed API to handle\n     *  ambiguous cases where multiple functions match by name.\n     *\n     *  If the %%key%% and %%values%% do not refine to a single function in\n     *  the ABI, this will throw.\n     */\n    getFunction(key: string, values?: Array<any | Typed>): null | FunctionFragment {\n        return this.#getFunction(key, values || null, true);\n    }\n\n    /**\n     *  Iterate over all functions, calling %%callback%%, sorted by their name.\n     */\n    forEachFunction(callback: (func: FunctionFragment, index: number) => void): void {\n        const names = Array.from(this.#functions.keys());\n        names.sort((a, b) => a.localeCompare(b));\n        for (let i = 0; i < names.length; i++) {\n            const name = names[i];\n            callback(<FunctionFragment>(this.#functions.get(name)), i);\n        }\n    }\n\n\n    // Find an event definition by any means necessary (unless it is ambiguous)\n    #getEvent(key: string, values: null | Array<null | any | Typed>, forceUnique: boolean): null | EventFragment {\n\n        // EventTopic\n        if (isHexString(key)) {\n            const eventTopic = key.toLowerCase();\n            for (const fragment of this.#events.values()) {\n                if (eventTopic === fragment.topicHash) { return fragment; }\n            }\n            return null;\n        }\n\n        // It is a bare name, look up the function (will return null if ambiguous)\n        if (key.indexOf(\"(\") === -1) {\n            const matching: Array<EventFragment> = [ ];\n            for (const [ name, fragment ] of this.#events) {\n                if (name.split(\"(\"/* fix:) */)[0] === key) { matching.push(fragment); }\n            }\n\n            if (values) {\n                // Remove all matches that don't have a compatible length.\n                for (let i = matching.length - 1; i >= 0; i--) {\n                    if (matching[i].inputs.length < values.length) {\n                        matching.splice(i, 1);\n                    }\n                }\n\n                // Remove all matches that don't match the Typed signature\n                for (let i = matching.length - 1; i >= 0; i--) {\n                    const inputs = matching[i].inputs;\n                    for (let j = 0; j < values.length; j++) {\n                        // Not a typed value\n                        if (!Typed.isTyped(values[j])) { continue; }\n\n                        // Make sure the value type matches the input type\n                        if (values[j].type !== inputs[j].baseType) {\n                            matching.splice(i, 1);\n                            break;\n                        }\n                    }\n                }\n            }\n\n            if (matching.length === 0) { return null; }\n\n            if (matching.length > 1 && forceUnique) {\n                const matchStr = matching.map((m) => JSON.stringify(m.format())).join(\", \");\n                assertArgument(false, `ambiguous event description (i.e. matches ${ matchStr })`, \"key\", key);\n            }\n\n            return matching[0];\n        }\n\n        // Normalize the signature and lookup the function\n        const result = this.#events.get(EventFragment.from(key).format());\n        if (result) { return result; }\n\n        return null;\n    }\n\n    /**\n     *  Get the event name for %%key%%, which may be a topic hash,\n     *  event name or event signature that belongs to the ABI.\n     */\n    getEventName(key: string): string {\n        const fragment = this.#getEvent(key, null, false);\n        assertArgument(fragment, \"no matching event\", \"key\", key);\n\n        return fragment.name;\n    }\n\n    /**\n     *  Returns true if %%key%% (an event topic hash, event name or\n     *  event signature) is present in the ABI.\n     *\n     *  In the case of an event name, the name may be ambiguous, so\n     *  accessing the [[EventFragment]] may require refinement.\n     */\n    hasEvent(key: string): boolean {\n        return !!this.#getEvent(key, null, false);\n    }\n\n    /**\n     *  Get the [[EventFragment]] for %%key%%, which may be a topic hash,\n     *  event name or event signature that belongs to the ABI.\n     *\n     *  If %%values%% is provided, it will use the Typed API to handle\n     *  ambiguous cases where multiple events match by name.\n     *\n     *  If the %%key%% and %%values%% do not refine to a single event in\n     *  the ABI, this will throw.\n     */\n    getEvent(key: string, values?: Array<any | Typed>): null | EventFragment {\n        return this.#getEvent(key, values || null, true)\n    }\n\n    /**\n     *  Iterate over all events, calling %%callback%%, sorted by their name.\n     */\n    forEachEvent(callback: (func: EventFragment, index: number) => void): void {\n        const names = Array.from(this.#events.keys());\n        names.sort((a, b) => a.localeCompare(b));\n        for (let i = 0; i < names.length; i++) {\n            const name = names[i];\n            callback(<EventFragment>(this.#events.get(name)), i);\n        }\n    }\n\n    /**\n     *  Get the [[ErrorFragment]] for %%key%%, which may be an error\n     *  selector, error name or error signature that belongs to the ABI.\n     *\n     *  If %%values%% is provided, it will use the Typed API to handle\n     *  ambiguous cases where multiple errors match by name.\n     *\n     *  If the %%key%% and %%values%% do not refine to a single error in\n     *  the ABI, this will throw.\n     */\n    getError(key: string, values?: Array<any | Typed>): null | ErrorFragment {\n        if (isHexString(key)) {\n            const selector = key.toLowerCase();\n\n            if (BuiltinErrors[selector]) {\n                return ErrorFragment.from(BuiltinErrors[selector].signature);\n            }\n\n            for (const fragment of this.#errors.values()) {\n                if (selector === fragment.selector) { return fragment; }\n            }\n\n            return null;\n        }\n\n        // It is a bare name, look up the function (will return null if ambiguous)\n        if (key.indexOf(\"(\") === -1) {\n            const matching: Array<ErrorFragment> = [ ];\n            for (const [ name, fragment ] of this.#errors) {\n                if (name.split(\"(\"/* fix:) */)[0] === key) { matching.push(fragment); }\n            }\n\n            if (matching.length === 0) {\n                if (key === \"Error\") { return ErrorFragment.from(\"error Error(string)\"); }\n                if (key === \"Panic\") { return ErrorFragment.from(\"error Panic(uint256)\"); }\n                return null;\n            } else if (matching.length > 1) {\n                const matchStr = matching.map((m) => JSON.stringify(m.format())).join(\", \");\n                assertArgument(false, `ambiguous error description (i.e. ${ matchStr })`, \"name\", key);\n            }\n\n            return matching[0];\n        }\n\n        // Normalize the signature and lookup the function\n        key = ErrorFragment.from(key).format()\n        if (key === \"Error(string)\") { return ErrorFragment.from(\"error Error(string)\"); }\n        if (key === \"Panic(uint256)\") { return ErrorFragment.from(\"error Panic(uint256)\"); }\n\n        const result = this.#errors.get(key);\n        if (result) { return result; }\n\n        return null;\n    }\n\n    /**\n     *  Iterate over all errors, calling %%callback%%, sorted by their name.\n     */\n    forEachError(callback: (func: ErrorFragment, index: number) => void): void {\n        const names = Array.from(this.#errors.keys());\n        names.sort((a, b) => a.localeCompare(b));\n        for (let i = 0; i < names.length; i++) {\n            const name = names[i];\n            callback(<ErrorFragment>(this.#errors.get(name)), i);\n        }\n    }\n\n    // Get the 4-byte selector used by Solidity to identify a function\n        /*\n    getSelector(fragment: ErrorFragment | FunctionFragment): string {\n        if (typeof(fragment) === \"string\") {\n            const matches: Array<Fragment> = [ ];\n\n            try { matches.push(this.getFunction(fragment)); } catch (error) { }\n            try { matches.push(this.getError(<string>fragment)); } catch (_) { }\n\n            if (matches.length === 0) {\n                logger.throwArgumentError(\"unknown fragment\", \"key\", fragment);\n            } else if (matches.length > 1) {\n                logger.throwArgumentError(\"ambiguous fragment matches function and error\", \"key\", fragment);\n            }\n\n            fragment = matches[0];\n        }\n\n        return dataSlice(id(fragment.format()), 0, 4);\n    }\n        */\n\n    // Get the 32-byte topic hash used by Solidity to identify an event\n    /*\n    getEventTopic(fragment: EventFragment): string {\n        //if (typeof(fragment) === \"string\") { fragment = this.getEvent(eventFragment); }\n        return id(fragment.format());\n    }\n    */\n\n\n    _decodeParams(params: ReadonlyArray<ParamType>, data: BytesLike): Result {\n        return this.#abiCoder.decode(params, data)\n    }\n\n    _encodeParams(params: ReadonlyArray<ParamType>, values: ReadonlyArray<any>): string {\n        return this.#abiCoder.encode(params, values)\n    }\n\n    /**\n     *  Encodes a ``tx.data`` object for deploying the Contract with\n     *  the %%values%% as the constructor arguments.\n     */\n    encodeDeploy(values?: ReadonlyArray<any>): string {\n        return this._encodeParams(this.deploy.inputs, values || [ ]);\n    }\n\n    /**\n     *  Decodes the result %%data%% (e.g. from an ``eth_call``) for the\n     *  specified error (see [[getError]] for valid values for\n     *  %%key%%).\n     *\n     *  Most developers should prefer the [[parseCallResult]] method instead,\n     *  which will automatically detect a ``CALL_EXCEPTION`` and throw the\n     *  corresponding error.\n     */\n    decodeErrorResult(fragment: ErrorFragment | string, data: BytesLike): Result {\n        if (typeof(fragment) === \"string\") {\n            const f = this.getError(fragment);\n            assertArgument(f, \"unknown error\", \"fragment\", fragment);\n            fragment = f;\n        }\n\n        assertArgument(dataSlice(data, 0, 4) === fragment.selector,\n            `data signature does not match error ${ fragment.name }.`, \"data\", data);\n\n        return this._decodeParams(fragment.inputs, dataSlice(data, 4));\n    }\n\n    /**\n     *  Encodes the transaction revert data for a call result that\n     *  reverted from the the Contract with the sepcified %%error%%\n     *  (see [[getError]] for valid values for %%fragment%%) with the %%values%%.\n     *\n     *  This is generally not used by most developers, unless trying to mock\n     *  a result from a Contract.\n     */\n    encodeErrorResult(fragment: ErrorFragment | string, values?: ReadonlyArray<any>): string {\n        if (typeof(fragment) === \"string\") {\n            const f = this.getError(fragment);\n            assertArgument(f, \"unknown error\", \"fragment\", fragment);\n            fragment = f;\n        }\n\n        return concat([\n            fragment.selector,\n            this._encodeParams(fragment.inputs, values || [ ])\n        ]);\n    }\n\n    /**\n     *  Decodes the %%data%% from a transaction ``tx.data`` for\n     *  the function specified (see [[getFunction]] for valid values\n     *  for %%fragment%%).\n     *\n     *  Most developers should prefer the [[parseTransaction]] method\n     *  instead, which will automatically detect the fragment.\n     */\n    decodeFunctionData(fragment: FunctionFragment | string, data: BytesLike): Result {\n        if (typeof(fragment) === \"string\") {\n            const f = this.getFunction(fragment);\n            assertArgument(f, \"unknown function\", \"fragment\", fragment);\n            fragment = f;\n        }\n\n        assertArgument(dataSlice(data, 0, 4) === fragment.selector,\n            `data signature does not match function ${ fragment.name }.`, \"data\", data);\n\n        return this._decodeParams(fragment.inputs, dataSlice(data, 4));\n    }\n\n    /**\n     *  Encodes the ``tx.data`` for a transaction that calls the function\n     *  specified (see [[getFunction]] for valid values for %%fragment%%) with\n     *  the %%values%%.\n     */\n    encodeFunctionData(fragment: FunctionFragment | string, values?: ReadonlyArray<any>): string {\n        if (typeof(fragment) === \"string\") {\n            const f = this.getFunction(fragment);\n            assertArgument(f, \"unknown function\", \"fragment\", fragment);\n            fragment = f;\n        }\n\n        return concat([\n            fragment.selector,\n            this._encodeParams(fragment.inputs, values || [ ])\n        ]);\n    }\n\n    /**\n     *  Decodes the result %%data%% (e.g. from an ``eth_call``) for the\n     *  specified function (see [[getFunction]] for valid values for\n     *  %%key%%).\n     *\n     *  Most developers should prefer the [[parseCallResult]] method instead,\n     *  which will automatically detect a ``CALL_EXCEPTION`` and throw the\n     *  corresponding error.\n     */\n    decodeFunctionResult(fragment: FunctionFragment | string, data: BytesLike): Result {\n        if (typeof(fragment) === \"string\") {\n            const f = this.getFunction(fragment);\n            assertArgument(f, \"unknown function\", \"fragment\", fragment);\n            fragment = f;\n        }\n\n        let message = \"invalid length for result data\";\n\n        const bytes = getBytesCopy(data);\n        if ((bytes.length % 32) === 0) {\n            try {\n                return this.#abiCoder.decode(fragment.outputs, bytes);\n            } catch (error) {\n                message = \"could not decode result data\";\n            }\n        }\n\n        // Call returned data with no error, but the data is junk\n        assert(false, message, \"BAD_DATA\", {\n            value: hexlify(bytes),\n            info: { method: fragment.name, signature: fragment.format() }\n        });\n    }\n\n    makeError(_data: BytesLike, tx: CallExceptionTransaction): CallExceptionError {\n        const data = getBytes(_data, \"data\");\n\n        const error = AbiCoder.getBuiltinCallException(\"call\", tx, data);\n\n        // Not a built-in error; try finding a custom error\n        const customPrefix = \"execution reverted (unknown custom error)\";\n        if (error.message.startsWith(customPrefix)) {\n            const selector = hexlify(data.slice(0, 4));\n\n            const ef = this.getError(selector);\n            if (ef) {\n                try {\n                    const args = this.#abiCoder.decode(ef.inputs, data.slice(4));\n                    error.revert = {\n                        name: ef.name, signature: ef.format(), args\n                    };\n                    error.reason = error.revert.signature;\n                    error.message = `execution reverted: ${ error.reason }`\n                 } catch (e) {\n                    error.message = `execution reverted (coult not decode custom error)`\n                }\n            }\n        }\n\n        // Add the invocation, if available\n        const parsed = this.parseTransaction(tx);\n        if (parsed) {\n            error.invocation = {\n                method: parsed.name,\n                signature: parsed.signature,\n                args: parsed.args\n            };\n        }\n\n        return error;\n    }\n\n    /**\n     *  Encodes the result data (e.g. from an ``eth_call``) for the\n     *  specified function (see [[getFunction]] for valid values\n     *  for %%fragment%%) with %%values%%.\n     *\n     *  This is generally not used by most developers, unless trying to mock\n     *  a result from a Contract.\n     */\n    encodeFunctionResult(fragment: FunctionFragment | string, values?: ReadonlyArray<any>): string {\n        if (typeof(fragment) === \"string\") {\n            const f = this.getFunction(fragment);\n            assertArgument(f, \"unknown function\", \"fragment\", fragment);\n            fragment = f;\n        }\n        return hexlify(this.#abiCoder.encode(fragment.outputs, values || [ ]));\n    }\n/*\n    spelunk(inputs: Array<ParamType>, values: ReadonlyArray<any>, processfunc: (type: string, value: any) => Promise<any>): Promise<Array<any>> {\n        const promises: Array<Promise<>> = [ ];\n        const process = function(type: ParamType, value: any): any {\n            if (type.baseType === \"array\") {\n                return descend(type.child\n            }\n            if (type. === \"address\") {\n            }\n        };\n\n        const descend = function (inputs: Array<ParamType>, values: ReadonlyArray<any>) {\n            if (inputs.length !== values.length) { throw new Error(\"length mismatch\"); }\n            \n        };\n\n        const result: Array<any> = [ ];\n        values.forEach((value, index) => {\n            if (value == null) {\n                topics.push(null);\n            } else if (param.baseType === \"array\" || param.baseType === \"tuple\") {\n                logger.throwArgumentError(\"filtering with tuples or arrays not supported\", (\"contract.\" + param.name), value);\n            } else if (Array.isArray(value)) {\n                topics.push(value.map((value) => encodeTopic(param, value)));\n            } else {\n                topics.push(encodeTopic(param, value));\n            }\n        });\n    }\n*/\n    // Create the filter for the event with search criteria (e.g. for eth_filterLog)\n    encodeFilterTopics(fragment: EventFragment | string, values: ReadonlyArray<any>): Array<null | string | Array<string>> {\n        if (typeof(fragment) === \"string\") {\n            const f = this.getEvent(fragment);\n            assertArgument(f, \"unknown event\", \"eventFragment\", fragment);\n            fragment = f;\n        }\n\n        assert(values.length <= fragment.inputs.length, `too many arguments for ${ fragment.format() }`,\n            \"UNEXPECTED_ARGUMENT\", { count: values.length, expectedCount: fragment.inputs.length })\n\n        const topics: Array<null | string | Array<string>> = [];\n        if (!fragment.anonymous) { topics.push(fragment.topicHash); }\n\n        // @TODO: Use the coders for this; to properly support tuples, etc.\n        const encodeTopic = (param: ParamType, value: any): string => {\n            if (param.type === \"string\") {\n                 return id(value);\n            } else if (param.type === \"bytes\") {\n                 return keccak256(hexlify(value));\n            }\n\n            if (param.type === \"bool\" && typeof(value) === \"boolean\") {\n                value = (value ? \"0x01\": \"0x00\");\n            } else if (param.type.match(/^u?int/)) {\n                value = toBeHex(value);  // @TODO: Should this toTwos??\n            } else if (param.type.match(/^bytes/)) {\n                value = zeroPadBytes(value, 32);\n            } else if (param.type === \"address\") {\n                // Check addresses are valid\n                this.#abiCoder.encode( [ \"address\" ], [ value ]);\n            }\n\n            return zeroPadValue(hexlify(value), 32);\n        };\n\n        values.forEach((value, index) => {\n\n            const param = (<EventFragment>fragment).inputs[index];\n\n            if (!param.indexed) {\n                assertArgument(value == null,\n                    \"cannot filter non-indexed parameters; must be null\", (\"contract.\" + param.name), value);\n                return;\n            }\n\n            if (value == null) {\n                topics.push(null);\n            } else if (param.baseType === \"array\" || param.baseType === \"tuple\") {\n                assertArgument(false, \"filtering with tuples or arrays not supported\", (\"contract.\" + param.name), value);\n            } else if (Array.isArray(value)) {\n                topics.push(value.map((value) => encodeTopic(param, value)));\n            } else {\n                topics.push(encodeTopic(param, value));\n            }\n        });\n\n        // Trim off trailing nulls\n        while (topics.length && topics[topics.length - 1] === null) {\n            topics.pop();\n        }\n\n        return topics;\n    }\n\n    encodeEventLog(fragment: EventFragment | string, values: ReadonlyArray<any>): { data: string, topics: Array<string> } {\n        if (typeof(fragment) === \"string\") {\n            const f = this.getEvent(fragment);\n            assertArgument(f, \"unknown event\", \"eventFragment\", fragment);\n            fragment = f;\n        }\n\n        const topics: Array<string> = [ ];\n\n        const dataTypes: Array<ParamType> = [ ];\n        const dataValues: Array<string> = [ ];\n\n        if (!fragment.anonymous) {\n            topics.push(fragment.topicHash);\n        }\n\n        assertArgument(values.length === fragment.inputs.length,\n            \"event arguments/values mismatch\", \"values\", values);\n\n        fragment.inputs.forEach((param, index) => {\n            const value = values[index];\n            if (param.indexed) {\n                if (param.type === \"string\") {\n                    topics.push(id(value))\n                } else if (param.type === \"bytes\") {\n                    topics.push(keccak256(value))\n                } else if (param.baseType === \"tuple\" || param.baseType === \"array\") {\n                    // @TODO\n                    throw new Error(\"not implemented\");\n                } else {\n                    topics.push(this.#abiCoder.encode([ param.type] , [ value ]));\n                }\n            } else {\n                dataTypes.push(param);\n                dataValues.push(value);\n            }\n        });\n\n        return {\n            data: this.#abiCoder.encode(dataTypes , dataValues),\n            topics: topics\n        };\n    }\n\n    // Decode a filter for the event and the search criteria\n    decodeEventLog(fragment: EventFragment | string, data: BytesLike, topics?: ReadonlyArray<string>): Result {\n        if (typeof(fragment) === \"string\") {\n            const f = this.getEvent(fragment);\n            assertArgument(f, \"unknown event\", \"eventFragment\", fragment);\n            fragment = f;\n        }\n\n        if (topics != null && !fragment.anonymous) {\n            const eventTopic = fragment.topicHash;\n            assertArgument(isHexString(topics[0], 32) && topics[0].toLowerCase() === eventTopic,\n                \"fragment/topic mismatch\", \"topics[0]\", topics[0]);\n            topics = topics.slice(1);\n        }\n\n        const indexed: Array<ParamType> = [];\n        const nonIndexed: Array<ParamType> = [];\n        const dynamic: Array<boolean> = [];\n\n        fragment.inputs.forEach((param, index) => {\n            if (param.indexed) {\n                if (param.type === \"string\" || param.type === \"bytes\" || param.baseType === \"tuple\" || param.baseType === \"array\") {\n                    indexed.push(ParamType.from({ type: \"bytes32\", name: param.name }));\n                    dynamic.push(true);\n                } else {\n                    indexed.push(param);\n                    dynamic.push(false);\n                }\n            } else {\n                nonIndexed.push(param);\n                dynamic.push(false);\n            }\n        });\n\n        const resultIndexed = (topics != null) ? this.#abiCoder.decode(indexed, concat(topics)): null;\n        const resultNonIndexed = this.#abiCoder.decode(nonIndexed, data, true);\n\n        //const result: (Array<any> & { [ key: string ]: any }) = [ ];\n        const values: Array<any> = [ ];\n        const keys: Array<null | string> = [ ];\n        let nonIndexedIndex = 0, indexedIndex = 0;\n        fragment.inputs.forEach((param, index) => {\n            let value: null | Indexed | Error = null;\n            if (param.indexed) {\n                if (resultIndexed == null) {\n                    value = new Indexed(null);\n\n                } else if (dynamic[index]) {\n                    value = new Indexed(resultIndexed[indexedIndex++]);\n\n                } else {\n                    try {\n                        value = resultIndexed[indexedIndex++];\n                    } catch (error: any) {\n                        value = error;\n                    }\n                }\n            } else {\n                try {\n                    value = resultNonIndexed[nonIndexedIndex++];\n                } catch (error: any) {\n                    value = error;\n                }\n            }\n\n            values.push(value);\n            keys.push(param.name || null);\n        });\n\n        return Result.fromItems(values, keys);\n    }\n\n    /**\n     *  Parses a transaction, finding the matching function and extracts\n     *  the parameter values along with other useful function details.\n     *\n     *  If the matching function cannot be found, return null.\n     */\n    parseTransaction(tx: { data: string, value?: BigNumberish }): null | TransactionDescription {\n        const data = getBytes(tx.data, \"tx.data\");\n        const value = getBigInt((tx.value != null) ? tx.value: 0, \"tx.value\");\n\n        const fragment = this.getFunction(hexlify(data.slice(0, 4)));\n\n        if (!fragment) { return null; }\n\n        const args = this.#abiCoder.decode(fragment.inputs, data.slice(4));\n        return new TransactionDescription(fragment, fragment.selector, args, value);\n    }\n\n    parseCallResult(data: BytesLike): Result {\n        throw new Error(\"@TODO\");\n    }\n\n    /**\n     *  Parses a receipt log, finding the matching event and extracts\n     *  the parameter values along with other useful event details.\n     *\n     *  If the matching event cannot be found, returns null.\n     */\n    parseLog(log: { topics: ReadonlyArray<string>, data: string}): null | LogDescription {\n        const fragment = this.getEvent(log.topics[0]);\n\n        if (!fragment || fragment.anonymous) { return null; }\n\n        // @TODO: If anonymous, and the only method, and the input count matches, should we parse?\n        //        Probably not, because just because it is the only event in the ABI does\n        //        not mean we have the full ABI; maybe just a fragment?\n\n\n       return new LogDescription(fragment, fragment.topicHash, this.decodeEventLog(fragment, log.data, log.topics));\n    }\n\n    /**\n     *  Parses a revert data, finding the matching error and extracts\n     *  the parameter values along with other useful error details.\n     *\n     *  If the matching error cannot be found, returns null.\n     */\n    parseError(data: BytesLike): null | ErrorDescription {\n        const hexData = hexlify(data);\n\n        const fragment = this.getError(dataSlice(hexData, 0, 4));\n\n        if (!fragment) { return null; }\n\n        const args = this.#abiCoder.decode(fragment.inputs, dataSlice(hexData, 4));\n        return new ErrorDescription(fragment, fragment.selector, args);\n    }\n\n    /**\n     *  Creates a new [[Interface]] from the ABI %%value%%.\n     *\n     *  The %%value%% may be provided as an existing [[Interface]] object,\n     *  a JSON-encoded ABI or any Human-Readable ABI format.\n     */\n    static from(value: InterfaceAbi | Interface): Interface {\n        // Already an Interface, which is immutable\n        if (value instanceof Interface) { return value; }\n\n        // JSON\n        if (typeof(value) === \"string\") { return new Interface(JSON.parse(value)); }\n\n        // An Interface; possibly from another v6 instance\n        if (typeof((<any>value).formatJson) === \"function\") {\n            return new Interface((<any>value).formatJson());\n        }\n\n        // A legacy Interface; from an older version\n        if (typeof((<any>value).format) === \"function\") {\n            return new Interface((<any>value).format(\"json\"));\n        }\n\n        // Array of fragments\n        return new Interface(value);\n    }\n}\n", "//import { resolveAddress } from \"@ethersproject/address\";\nimport {\n    defineProperties, getBigInt, getNumber, hexlify, isBytesLike,\n    resolveProperties,\n    assert, assertArgument, isError, makeError\n} from \"../utils/index.js\";\nimport { accessListify } from \"../transaction/index.js\";\n\nimport type { AddressLike, NameResolver } from \"../address/index.js\";\nimport type { BigNumberish, EventEmitterable } from \"../utils/index.js\";\nimport type { Signature } from \"../crypto/index.js\";\nimport type {\n    AccessList, AccessListish, BlobLike, KzgLibrary, TransactionLike\n} from \"../transaction/index.js\";\n\nimport type { ContractRunner } from \"./contracts.js\";\nimport type { Network } from \"./network.js\";\n\n\nconst BN_0 = BigInt(0);\n\n/**\n *  A **BlockTag** specifies a specific block.\n *\n *  **numeric value** - specifies the block height, where\n *  the genesis block is block 0; many operations accept a negative\n *  value which indicates the block number should be deducted from\n *  the most recent block. A numeric value may be a ``number``, ``bigint``,\n *  or a decimal of hex string.\n *\n *  **blockhash** - specifies a specific block by its blockhash; this allows\n *  potentially orphaned blocks to be specifed, without ambiguity, but many\n *  backends do not support this for some operations.\n */\nexport type BlockTag = BigNumberish | string;\n\nimport {\n    BlockParams, LogParams, TransactionReceiptParams,\n    TransactionResponseParams\n} from \"./formatting.js\";\n\n// -----------------------\n\nfunction getValue<T>(value: undefined | null | T): null | T {\n    if (value == null) { return null; }\n    return value;\n}\n\nfunction toJson(value: null | bigint): null | string {\n    if (value == null) { return null; }\n    return value.toString();\n}\n\n// @TODO? <T extends FeeData = { }> implements Required<T>\n\n/**\n *  A **FeeData** wraps all the fee-related values associated with\n *  the network.\n */\nexport class FeeData {\n    /**\n     *  The gas price for legacy networks.\n     */\n    readonly gasPrice!: null | bigint;\n\n    /**\n     *  The maximum fee to pay per gas.\n     *\n     *  The base fee per gas is defined by the network and based on\n     *  congestion, increasing the cost during times of heavy load\n     *  and lowering when less busy.\n     *\n     *  The actual fee per gas will be the base fee for the block\n     *  and the priority fee, up to the max fee per gas.\n     *\n     *  This will be ``null`` on legacy networks (i.e. [pre-EIP-1559](link-eip-1559))\n     */\n    readonly maxFeePerGas!: null | bigint;\n\n    /**\n     *  The additional amout to pay per gas to encourage a validator\n     *  to include the transaction.\n     *\n     *  The purpose of this is to compensate the validator for the\n     *  adjusted risk for including a given transaction.\n     *\n     *  This will be ``null`` on legacy networks (i.e. [pre-EIP-1559](link-eip-1559))\n     */\n    readonly maxPriorityFeePerGas!: null | bigint;\n\n    /**\n     *  Creates a new FeeData for %%gasPrice%%, %%maxFeePerGas%% and\n     *  %%maxPriorityFeePerGas%%.\n     */\n    constructor(gasPrice?: null | bigint, maxFeePerGas?: null | bigint, maxPriorityFeePerGas?: null | bigint) {\n        defineProperties<FeeData>(this, {\n            gasPrice: getValue(gasPrice),\n            maxFeePerGas: getValue(maxFeePerGas),\n            maxPriorityFeePerGas: getValue(maxPriorityFeePerGas)\n        });\n    }\n\n    /**\n     *  Returns a JSON-friendly value.\n     */\n    toJSON(): any {\n        const {\n            gasPrice, maxFeePerGas, maxPriorityFeePerGas\n        } = this;\n        return {\n            _type: \"FeeData\",\n            gasPrice: toJson(gasPrice),\n            maxFeePerGas: toJson(maxFeePerGas),\n            maxPriorityFeePerGas: toJson(maxPriorityFeePerGas),\n        };\n    }\n}\n\n\n/**\n *  A **TransactionRequest** is a transactions with potentially various\n *  properties not defined, or with less strict types for its values.\n *\n *  This is used to pass to various operations, which will internally\n *  coerce any types and populate any necessary values.\n */\nexport interface TransactionRequest {\n    /**\n     *  The transaction type.\n     */\n    type?: null | number;\n\n    /**\n     *  The target of the transaction.\n     */\n    to?: null | AddressLike;\n\n    /**\n     *  The sender of the transaction.\n     */\n    from?: null | AddressLike;\n\n    /**\n     *  The nonce of the transaction, used to prevent replay attacks.\n     */\n    nonce?: null | number;\n\n    /**\n     *  The maximum amount of gas to allow this transaction to consume.\n     */\n    gasLimit?: null | BigNumberish;\n\n    /**\n     *  The gas price to use for legacy transactions or transactions on\n     *  legacy networks.\n     *\n     *  Most of the time the ``max*FeePerGas`` is preferred.\n     */\n    gasPrice?: null | BigNumberish;\n\n    /**\n     *  The [[link-eip-1559]] maximum priority fee to pay per gas.\n     */\n    maxPriorityFeePerGas?: null | BigNumberish;\n\n    /**\n     *  The [[link-eip-1559]] maximum total fee to pay per gas. The actual\n     *  value used is protocol enforced to be the block's base fee.\n     */\n    maxFeePerGas?: null | BigNumberish;\n\n    /**\n     *  The transaction data.\n     */\n    data?: null | string;\n\n    /**\n     *  The transaction value (in wei).\n     */\n    value?: null | BigNumberish;\n\n    /**\n     *  The chain ID for the network this transaction is valid on.\n     */\n    chainId?: null | BigNumberish;\n\n    /**\n     *  The [[link-eip-2930]] access list. Storage slots included in the access\n     *  list are //warmed// by pre-loading them, so their initial cost to\n     *  fetch is guaranteed, but then each additional access is cheaper.\n     */\n    accessList?: null | AccessListish;\n\n    /**\n     *  A custom object, which can be passed along for network-specific\n     *  values.\n     */\n    customData?: any;\n\n    // Only meaningful when used for call\n\n    /**\n     *  When using ``call`` or ``estimateGas``, this allows a specific\n     *  block to be queried. Many backends do not support this and when\n     *  unsupported errors are silently squelched and ``\"latest\"`` is used. \n     */\n    blockTag?: BlockTag;\n\n    /**\n     *  When using ``call``, this enables CCIP-read, which permits the\n     *  provider to be redirected to web-based content during execution,\n     *  which is then further validated by the contract.\n     *\n     *  There are potential security implications allowing CCIP-read, as\n     *  it could be used to expose the IP address or user activity during\n     *  the fetch to unexpected parties.\n     */\n    enableCcipRead?: boolean;\n\n    /**\n     *  The blob versioned hashes (see [[link-eip-4844]]).\n     */\n    blobVersionedHashes?: null | Array<string>\n\n    /**\n     *  The maximum fee per blob gas (see [[link-eip-4844]]).\n     */\n    maxFeePerBlobGas?: null | BigNumberish;\n\n    /**\n     *  Any blobs to include in the transaction (see [[link-eip-4844]]).\n     */\n    blobs?: null | Array<BlobLike>;\n\n    /**\n     *  An external library for computing the KZG commitments and\n     *  proofs necessary for EIP-4844 transactions (see [[link-eip-4844]]).\n     *\n     *  This is generally ``null``, unless you are creating BLOb\n     *  transactions.\n     */\n    kzg?: null | KzgLibrary;\n\n    // Todo?\n    //gasMultiplier?: number;\n};\n\n/**\n *  A **PreparedTransactionRequest** is identical to a [[TransactionRequest]]\n *  except all the property types are strictly enforced.\n */\nexport interface PreparedTransactionRequest {\n    /**\n     *  The transaction type.\n     */\n    type?: number;\n\n\n    /**\n     *  The target of the transaction.\n     */\n    to?: AddressLike;\n\n    /**\n     *  The sender of the transaction.\n     */\n    from?: AddressLike;\n\n    /**\n     *  The nonce of the transaction, used to prevent replay attacks.\n     */\n\n    nonce?: number;\n\n    /**\n     *  The maximum amount of gas to allow this transaction to consime.\n     */\n    gasLimit?: bigint;\n\n    /**\n     *  The gas price to use for legacy transactions or transactions on\n     *  legacy networks.\n     *\n     *  Most of the time the ``max*FeePerGas`` is preferred.\n     */\n    gasPrice?: bigint;\n\n    /**\n     *  The [[link-eip-1559]] maximum priority fee to pay per gas.\n     */\n    maxPriorityFeePerGas?: bigint;\n\n    /**\n     *  The [[link-eip-1559]] maximum total fee to pay per gas. The actual\n     *  value used is protocol enforced to be the block's base fee.\n     */\n    maxFeePerGas?: bigint;\n\n    /**\n     *  The transaction data.\n     */\n    data?: string;\n\n\n    /**\n     *  The transaction value (in wei).\n     */\n    value?: bigint;\n\n    /**\n     *  The chain ID for the network this transaction is valid on.\n     */\n    chainId?: bigint;\n\n    /**\n     *  The [[link-eip-2930]] access list. Storage slots included in the access\n     *  list are //warmed// by pre-loading them, so their initial cost to\n     *  fetch is guaranteed, but then each additional access is cheaper.\n     */\n    accessList?: AccessList;\n\n    /**\n     *  A custom object, which can be passed along for network-specific\n     *  values.\n     */\n    customData?: any;\n\n\n\n    /**\n     *  When using ``call`` or ``estimateGas``, this allows a specific\n     *  block to be queried. Many backends do not support this and when\n     *  unsupported errors are silently squelched and ``\"latest\"`` is used. \n     */\n    blockTag?: BlockTag;\n\n    /**\n     *  When using ``call``, this enables CCIP-read, which permits the\n     *  provider to be redirected to web-based content during execution,\n     *  which is then further validated by the contract.\n     *\n     *  There are potential security implications allowing CCIP-read, as\n     *  it could be used to expose the IP address or user activity during\n     *  the fetch to unexpected parties.\n     */\n    enableCcipRead?: boolean;\n}\n\n/**\n *  Returns a copy of %%req%% with all properties coerced to their strict\n *  types.\n */\nexport function copyRequest(req: TransactionRequest): PreparedTransactionRequest {\n    const result: any = { };\n\n    // These could be addresses, ENS names or Addressables\n    if (req.to) { result.to = req.to; }\n    if (req.from) { result.from = req.from; }\n\n    if (req.data) { result.data = hexlify(req.data); }\n\n    const bigIntKeys = \"chainId,gasLimit,gasPrice,maxFeePerBlobGas,maxFeePerGas,maxPriorityFeePerGas,value\".split(/,/);\n    for (const key of bigIntKeys) {\n        if (!(key in req) || (<any>req)[key] == null) { continue; }\n        result[key] = getBigInt((<any>req)[key], `request.${ key }`);\n    }\n\n    const numberKeys = \"type,nonce\".split(/,/);\n    for (const key of numberKeys) {\n        if (!(key in req) || (<any>req)[key] == null) { continue; }\n        result[key] = getNumber((<any>req)[key], `request.${ key }`);\n    }\n\n    if (req.accessList) {\n        result.accessList = accessListify(req.accessList);\n    }\n\n    if (\"blockTag\" in req) { result.blockTag = req.blockTag; }\n\n    if (\"enableCcipRead\" in req) {\n        result.enableCcipRead = !!req.enableCcipRead\n    }\n\n    if (\"customData\" in req) {\n        result.customData = req.customData;\n    }\n\n    if (\"blobVersionedHashes\" in req && req.blobVersionedHashes) {\n        result.blobVersionedHashes = req.blobVersionedHashes.slice();\n    }\n\n    if (\"kzg\" in req) { result.kzg = req.kzg; }\n\n    if (\"blobs\" in req && req.blobs) {\n        result.blobs = req.blobs.map((b) => {\n            if (isBytesLike(b)) { return hexlify(b); }\n            return Object.assign({ }, b);\n        });\n    }\n\n    return result;\n}\n\n//////////////////////\n// Block\n\n/**\n *  An Interface to indicate a [[Block]] has been included in the\n *  blockchain. This asserts a Type Guard that necessary properties\n *  are non-null.\n *\n *  Before a block is included, it is a //pending// block.\n */\nexport interface MinedBlock extends Block {\n    /**\n     *  The block number also known as the block height.\n     */\n    readonly number: number;\n\n    /**\n     *  The block hash.\n     */\n    readonly hash: string;\n\n    /**\n     *  The block timestamp, in seconds from epoch.\n     */\n    readonly timestamp: number;\n\n    /**\n     *  The block date, created from the [[timestamp]].\n     */\n    readonly date: Date;\n\n    /**\n     *  The miner of the block, also known as the ``author`` or\n     *  block ``producer``.\n     */\n    readonly miner: string;\n}\n\n/**\n *  A **Block** represents the data associated with a full block on\n *  Ethereum.\n */\nexport class Block implements BlockParams, Iterable<string> {\n\n    /**\n     *  The provider connected to the block used to fetch additional details\n     *  if necessary.\n     */\n    readonly provider!: Provider;\n\n    /**\n     *  The block number, sometimes called the block height. This is a\n     *  sequential number that is one higher than the parent block.\n     */\n    readonly number!: number;\n\n    /**\n     *  The block hash.\n     *\n     *  This hash includes all properties, so can be safely used to identify\n     *  an exact set of block properties.\n     */\n    readonly hash!: null | string;\n\n    /**\n     *  The timestamp for this block, which is the number of seconds since\n     *  epoch that this block was included.\n     */\n    readonly timestamp!: number;\n\n    /**\n     *  The block hash of the parent block.\n     */\n    readonly parentHash!: string;\n\n    /**\n     *  The hash tree root of the parent beacon block for the given\n     *  execution block. See [[link-eip-4788]].\n     */\n    parentBeaconBlockRoot!: null | string;\n\n    /**\n     *  The nonce.\n     *\n     *  On legacy networks, this is the random number inserted which\n     *  permitted the difficulty target to be reached.\n     */\n    readonly nonce!: string;\n\n    /**\n     *  The difficulty target.\n     *\n     *  On legacy networks, this is the proof-of-work target required\n     *  for a block to meet the protocol rules to be included.\n     *\n     *  On modern networks, this is a random number arrived at using\n     *  randao.  @TODO: Find links?\n     */\n    readonly difficulty!: bigint;\n\n\n    /**\n     *  The total gas limit for this block.\n     */\n    readonly gasLimit!: bigint;\n\n    /**\n     *  The total gas used in this block.\n     */\n    readonly gasUsed!: bigint;\n\n\n    /**\n     *  The root hash for the global state after applying changes\n     *  in this block.\n     */\n    readonly stateRoot!: null | string;\n\n    /**\n     *  The hash of the transaction receipts trie.\n     */\n    readonly receiptsRoot!: null | string;\n\n    /**\n     *  The total amount of blob gas consumed by the transactions\n     *  within the block. See [[link-eip-4844]].\n     */\n    readonly blobGasUsed!: null | bigint;\n\n    /**\n     *  The running total of blob gas consumed in excess of the\n     *  target, prior to the block. See [[link-eip-4844]].\n     */\n    readonly excessBlobGas!: null | bigint;\n\n    /**\n     *  The miner coinbase address, wihch receives any subsidies for\n     *  including this block.\n     */\n    readonly miner!: string;\n\n    /**\n     *  The latest RANDAO mix of the post beacon state of\n     *  the previous block.\n     */\n    readonly prevRandao!: null | string;\n\n    /**\n     *  Any extra data the validator wished to include.\n     */\n    readonly extraData!: string;\n\n    /**\n     *  The base fee per gas that all transactions in this block were\n     *  charged.\n     *\n     *  This adjusts after each block, depending on how congested the network\n     *  is.\n     */\n    readonly baseFeePerGas!: null | bigint;\n\n    readonly #transactions: Array<string | TransactionResponse>;\n\n    /**\n     *  Create a new **Block** object.\n     *\n     *  This should generally not be necessary as the unless implementing a\n     *  low-level library.\n     */\n    constructor(block: BlockParams, provider: Provider) {\n\n        this.#transactions = block.transactions.map((tx) => {\n            if (typeof(tx) !== \"string\") {\n                return new TransactionResponse(tx, provider);\n            }\n            return tx;\n        });\n\n        defineProperties<Block>(this, {\n            provider,\n\n            hash: getValue(block.hash),\n\n            number: block.number,\n            timestamp: block.timestamp,\n\n            parentHash: block.parentHash,\n            parentBeaconBlockRoot: block.parentBeaconBlockRoot,\n\n            nonce: block.nonce,\n            difficulty: block.difficulty,\n\n            gasLimit: block.gasLimit,\n            gasUsed: block.gasUsed,\n            blobGasUsed: block.blobGasUsed,\n            excessBlobGas: block.excessBlobGas,\n            miner: block.miner,\n            prevRandao: getValue(block.prevRandao),\n            extraData: block.extraData,\n\n            baseFeePerGas: getValue(block.baseFeePerGas),\n\n            stateRoot: block.stateRoot,\n            receiptsRoot: block.receiptsRoot,\n        });\n    }\n\n    /**\n     *  Returns the list of transaction hashes, in the order\n     *  they were executed within the block.\n     */\n    get transactions(): ReadonlyArray<string> {\n        return this.#transactions.map((tx) => {\n            if (typeof(tx) === \"string\") { return tx; }\n            return tx.hash;\n        });\n    }\n\n    /**\n     *  Returns the complete transactions, in the order they\n     *  were executed within the block.\n     *\n     *  This is only available for blocks which prefetched\n     *  transactions, by passing ``true`` to %%prefetchTxs%%\n     *  into [[Provider-getBlock]].\n     */\n    get prefetchedTransactions(): Array<TransactionResponse> {\n        const txs = this.#transactions.slice();\n\n        // Doesn't matter...\n        if (txs.length === 0) { return [ ]; }\n\n        // Make sure we prefetched the transactions\n        assert(typeof(txs[0]) === \"object\", \"transactions were not prefetched with block request\", \"UNSUPPORTED_OPERATION\", {\n            operation: \"transactionResponses()\"\n        });\n\n        return <Array<TransactionResponse>>txs;\n    }\n\n    /**\n     *  Returns a JSON-friendly value.\n     */\n    toJSON(): any {\n        const {\n            baseFeePerGas, difficulty, extraData, gasLimit, gasUsed, hash,\n            miner, prevRandao, nonce, number, parentHash, parentBeaconBlockRoot,\n            stateRoot, receiptsRoot, timestamp, transactions\n        } = this;\n\n        return {\n            _type: \"Block\",\n            baseFeePerGas: toJson(baseFeePerGas),\n            difficulty: toJson(difficulty),\n            extraData,\n            gasLimit: toJson(gasLimit),\n            gasUsed: toJson(gasUsed),\n            blobGasUsed: toJson(this.blobGasUsed),\n            excessBlobGas: toJson(this.excessBlobGas),\n            hash, miner, prevRandao, nonce, number, parentHash, timestamp,\n            parentBeaconBlockRoot, stateRoot, receiptsRoot,\n            transactions,\n        };\n    }\n\n    [Symbol.iterator](): Iterator<string> {\n        let index = 0;\n        const txs = this.transactions;\n        return {\n            next: () => {\n                if (index < this.length) {\n                    return {\n                        value: txs[index++], done: false\n                    }\n                }\n                return { value: undefined, done: true };\n            }\n        };\n    }\n\n    /**\n     *  The number of transactions in this block.\n     */\n    get length(): number { return this.#transactions.length; }\n\n    /**\n     *  The [[link-js-date]] this block was included at.\n     */\n    get date(): null | Date {\n        if (this.timestamp == null) { return null; }\n        return new Date(this.timestamp * 1000);\n    }\n\n    /**\n     *  Get the transaction at %%indexe%% within this block.\n     */\n    async getTransaction(indexOrHash: number | string): Promise<TransactionResponse> {\n        // Find the internal value by its index or hash\n        let tx: string | TransactionResponse | undefined = undefined;\n        if (typeof(indexOrHash) === \"number\") {\n            tx = this.#transactions[indexOrHash];\n\n        } else {\n            const hash = indexOrHash.toLowerCase();\n            for (const v of this.#transactions) {\n                if (typeof(v) === \"string\") {\n                    if (v !== hash) { continue; }\n                    tx = v;\n                    break;\n                } else {\n                    if (v.hash === hash) { continue; }\n                    tx = v;\n                    break;\n                }\n            }\n        }\n        if (tx == null) { throw new Error(\"no such tx\"); }\n\n        if (typeof(tx) === \"string\") {\n            return <TransactionResponse>(await this.provider.getTransaction(tx));\n        } else {\n            return tx;\n        }\n    }\n\n    /**\n     *  If a **Block** was fetched with a request to include the transactions\n     *  this will allow synchronous access to those transactions.\n     *\n     *  If the transactions were not prefetched, this will throw.\n     */\n    getPrefetchedTransaction(indexOrHash: number | string): TransactionResponse {\n        const txs = this.prefetchedTransactions;\n        if (typeof(indexOrHash) === \"number\") {\n            return txs[indexOrHash];\n        }\n\n        indexOrHash = indexOrHash.toLowerCase();\n        for (const tx of txs) {\n            if (tx.hash === indexOrHash) { return tx; }\n        }\n\n        assertArgument(false, \"no matching transaction\", \"indexOrHash\", indexOrHash);\n    }\n\n    /**\n     *  Returns true if this block been mined. This provides a type guard\n     *  for all properties on a [[MinedBlock]].\n     */\n    isMined(): this is MinedBlock { return !!this.hash; }\n\n    /**\n     *  Returns true if this block is an [[link-eip-2930]] block.\n     */\n    isLondon(): this is (Block & { baseFeePerGas: bigint }) {\n        return !!this.baseFeePerGas;\n    }\n\n    /**\n     *  @_ignore:\n     */\n    orphanedEvent(): OrphanFilter {\n        if (!this.isMined()) { throw new Error(\"\"); }\n        return createOrphanedBlockFilter(this);\n    }\n}\n\n//////////////////////\n// Log\n\n/**\n *  A **Log** in Ethereum represents an event that has been included in a\n *  transaction using the ``LOG*`` opcodes, which are most commonly used by\n *  Solidity's emit for announcing events.\n */\nexport class Log implements LogParams {\n\n    /**\n     *  The provider connected to the log used to fetch additional details\n     *  if necessary.\n     */\n    readonly provider: Provider;\n\n    /**\n     *  The transaction hash of the transaction this log occurred in. Use the\n     *  [[Log-getTransaction]] to get the [[TransactionResponse]].\n     */\n    readonly transactionHash!: string;\n\n    /**\n     *  The block hash of the block this log occurred in. Use the\n     *  [[Log-getBlock]] to get the [[Block]].\n     */\n    readonly blockHash!: string;\n\n    /**\n     *  The block number of the block this log occurred in. It is preferred\n     *  to use the [[Block-hash]] when fetching the related [[Block]],\n     *  since in the case of an orphaned block, the block at that height may\n     *  have changed.\n     */\n    readonly blockNumber!: number;\n\n    /**\n     *  If the **Log** represents a block that was removed due to an orphaned\n     *  block, this will be true.\n     *\n     *  This can only happen within an orphan event listener.\n     */\n    readonly removed!: boolean;\n\n    /**\n     *  The address of the contract that emitted this log.\n     */\n    readonly address!: string;\n\n    /**\n     *  The data included in this log when it was emitted.\n     */\n    readonly data!: string;\n\n    /**\n     *  The indexed topics included in this log when it was emitted.\n     *\n     *  All topics are included in the bloom filters, so they can be\n     *  efficiently filtered using the [[Provider-getLogs]] method.\n     */\n    readonly topics!: ReadonlyArray<string>;\n\n    /**\n     *  The index within the block this log occurred at. This is generally\n     *  not useful to developers, but can be used with the various roots\n     *  to proof inclusion within a block.\n     */\n    readonly index!: number;\n\n    /**\n     *  The index within the transaction of this log.\n     */\n    readonly transactionIndex!: number;\n\n    /**\n     *  @_ignore:\n     */\n    constructor(log: LogParams, provider: Provider) {\n        this.provider = provider;\n\n        const topics = Object.freeze(log.topics.slice());\n        defineProperties<Log>(this, {\n            transactionHash: log.transactionHash,\n            blockHash: log.blockHash,\n            blockNumber: log.blockNumber,\n\n            removed: log.removed,\n\n            address: log.address,\n            data: log.data,\n\n            topics,\n\n            index: log.index,\n            transactionIndex: log.transactionIndex,\n        });\n    }\n\n    /**\n     *  Returns a JSON-compatible object.\n     */\n    toJSON(): any {\n        const {\n            address, blockHash, blockNumber, data, index,\n            removed, topics, transactionHash, transactionIndex\n        } = this;\n\n        return {\n            _type: \"log\",\n            address, blockHash, blockNumber, data, index,\n            removed, topics, transactionHash, transactionIndex\n        };\n    }\n\n    /**\n     *  Returns the block that this log occurred in.\n     */\n    async getBlock(): Promise<Block> {\n        const block = await this.provider.getBlock(this.blockHash);\n        assert(!!block, \"failed to find transaction\", \"UNKNOWN_ERROR\", { });\n        return block;\n    }\n\n    /**\n     *  Returns the transaction that this log occurred in.\n     */\n    async getTransaction(): Promise<TransactionResponse> {\n        const tx = await this.provider.getTransaction(this.transactionHash);\n        assert(!!tx, \"failed to find transaction\", \"UNKNOWN_ERROR\", { });\n        return tx;\n    }\n\n    /**\n     *  Returns the transaction receipt fot the transaction that this\n     *  log occurred in.\n     */\n    async getTransactionReceipt(): Promise<TransactionReceipt> {\n        const receipt = await this.provider.getTransactionReceipt(this.transactionHash);\n        assert(!!receipt, \"failed to find transaction receipt\", \"UNKNOWN_ERROR\", { });\n        return receipt;\n    }\n\n    /**\n     *  @_ignore:\n     */\n    removedEvent(): OrphanFilter {\n        return createRemovedLogFilter(this);\n    }\n}\n\n//////////////////////\n// Transaction Receipt\n\n/*\nexport interface LegacyTransactionReceipt {\n    byzantium: false;\n    status: null;\n    root: string;\n}\n\nexport interface ByzantiumTransactionReceipt {\n    byzantium: true;\n    status: number;\n    root: null;\n}\n*/\n\n/**\n *  A **TransactionReceipt** includes additional information about a\n *  transaction that is only available after it has been mined.\n */\nexport class TransactionReceipt implements TransactionReceiptParams, Iterable<Log> {\n    /**\n     *  The provider connected to the log used to fetch additional details\n     *  if necessary.\n     */\n    readonly provider!: Provider;\n\n    /**\n     *  The address the transaction was sent to.\n     */\n    readonly to!: null | string;\n\n    /**\n     *  The sender of the transaction.\n     */\n    readonly from!: string;\n\n    /**\n     *  The address of the contract if the transaction was directly\n     *  responsible for deploying one.\n     *\n     *  This is non-null **only** if the ``to`` is empty and the ``data``\n     *  was successfully executed as initcode.\n     */\n    readonly contractAddress!: null | string;\n\n    /**\n     *  The transaction hash.\n     */\n    readonly hash!: string;\n\n    /**\n     *  The index of this transaction within the block transactions.\n     */\n    readonly index!: number;\n\n    /**\n     *  The block hash of the [[Block]] this transaction was included in.\n     */\n    readonly blockHash!: string;\n\n    /**\n     *  The block number of the [[Block]] this transaction was included in.\n     */\n    readonly blockNumber!: number;\n\n    /**\n     *  The bloom filter bytes that represent all logs that occurred within\n     *  this transaction. This is generally not useful for most developers,\n     *  but can be used to validate the included logs.\n     */\n    readonly logsBloom!: string;\n\n    /**\n     *  The actual amount of gas used by this transaction.\n     *\n     *  When creating a transaction, the amount of gas that will be used can\n     *  only be approximated, but the sender must pay the gas fee for the\n     *  entire gas limit. After the transaction, the difference is refunded.\n     */\n    readonly gasUsed!: bigint;\n\n    /**\n     *  The gas used for BLObs. See [[link-eip-4844]].\n     */\n    readonly blobGasUsed!: null | bigint;\n\n    /**\n     *  The amount of gas used by all transactions within the block for this\n     *  and all transactions with a lower ``index``.\n     *\n     *  This is generally not useful for developers but can be used to\n     *  validate certain aspects of execution.\n     */\n    readonly cumulativeGasUsed!: bigint;\n\n    /**\n     *  The actual gas price used during execution.\n     *\n     *  Due to the complexity of [[link-eip-1559]] this value can only\n     *  be caluclated after the transaction has been mined, snce the base\n     *  fee is protocol-enforced.\n     */\n    readonly gasPrice!: bigint;\n\n    /**\n     *  The price paid per BLOB in gas. See [[link-eip-4844]].\n     */\n    readonly blobGasPrice!: null | bigint;\n\n    /**\n     *  The [[link-eip-2718]] transaction type.\n     */\n    readonly type!: number;\n    //readonly byzantium!: boolean;\n\n    /**\n     *  The status of this transaction, indicating success (i.e. ``1``) or\n     *  a revert (i.e. ``0``).\n     *\n     *  This is available in post-byzantium blocks, but some backends may\n     *  backfill this value.\n     */\n    readonly status!: null | number;\n\n    /**\n     *  The root hash of this transaction.\n     *\n     *  This is no present and was only included in pre-byzantium blocks, but\n     *  could be used to validate certain parts of the receipt.\n     */\n    readonly root!: null | string;\n\n    readonly #logs: ReadonlyArray<Log>;\n\n    /**\n     *  @_ignore:\n     */\n    constructor(tx: TransactionReceiptParams, provider: Provider) {\n        this.#logs = Object.freeze(tx.logs.map((log) => {\n            return new Log(log, provider);\n        }));\n\n        let gasPrice = BN_0;\n        if (tx.effectiveGasPrice != null) {\n            gasPrice = tx.effectiveGasPrice;\n        } else if (tx.gasPrice != null) {\n            gasPrice = tx.gasPrice;\n        }\n\n        defineProperties<TransactionReceipt>(this, {\n            provider,\n\n            to: tx.to,\n            from: tx.from,\n            contractAddress: tx.contractAddress,\n\n            hash: tx.hash,\n            index: tx.index,\n\n            blockHash: tx.blockHash,\n            blockNumber: tx.blockNumber,\n\n            logsBloom: tx.logsBloom,\n\n            gasUsed: tx.gasUsed,\n            cumulativeGasUsed: tx.cumulativeGasUsed,\n            blobGasUsed: tx.blobGasUsed,\n            gasPrice,\n            blobGasPrice: tx.blobGasPrice,\n\n            type: tx.type,\n            //byzantium: tx.byzantium,\n            status: tx.status,\n            root: tx.root\n        });\n    }\n\n    /**\n     *  The logs for this transaction.\n     */\n    get logs(): ReadonlyArray<Log> { return this.#logs; }\n\n    /**\n     *  Returns a JSON-compatible representation.\n     */\n    toJSON(): any {\n        const {\n            to, from, contractAddress, hash, index,\n            blockHash, blockNumber, logsBloom,\n            logs, //byzantium, \n            status, root\n        } = this;\n\n        return {\n            _type: \"TransactionReceipt\",\n            blockHash, blockNumber,\n            //byzantium, \n            contractAddress,\n            cumulativeGasUsed: toJson(this.cumulativeGasUsed),\n            from,\n            gasPrice: toJson(this.gasPrice),\n            blobGasUsed: toJson(this.blobGasUsed),\n            blobGasPrice: toJson(this.blobGasPrice),\n            gasUsed: toJson(this.gasUsed),\n            hash, index, logs, logsBloom, root, status, to\n        };\n    }\n\n    /**\n     *  @_ignore:\n     */\n    get length(): number { return this.logs.length; }\n\n    [Symbol.iterator](): Iterator<Log> {\n        let index = 0;\n        return {\n            next: () => {\n                if (index < this.length) {\n                    return { value: this.logs[index++], done: false }\n                }\n                return { value: undefined, done: true };\n            }\n        };\n    }\n\n    /**\n     *  The total fee for this transaction, in wei.\n     */\n    get fee(): bigint {\n        return this.gasUsed * this.gasPrice;\n    }\n\n    /**\n     *  Resolves to the block this transaction occurred in.\n     */\n    async getBlock(): Promise<Block> {\n        const block = await this.provider.getBlock(this.blockHash);\n        if (block == null) { throw new Error(\"TODO\"); }\n        return block;\n    }\n\n    /**\n     *  Resolves to the transaction this transaction occurred in.\n     */\n    async getTransaction(): Promise<TransactionResponse> {\n        const tx = await this.provider.getTransaction(this.hash);\n        if (tx == null) { throw new Error(\"TODO\"); }\n        return tx;\n    }\n\n    /**\n     *  Resolves to the return value of the execution of this transaction.\n     *\n     *  Support for this feature is limited, as it requires an archive node\n     *  with the ``debug_`` or ``trace_`` API enabled.\n     */\n    async getResult(): Promise<string> {\n        return <string>(await this.provider.getTransactionResult(this.hash));\n    }\n\n    /**\n     *  Resolves to the number of confirmations this transaction has.\n     */\n    async confirmations(): Promise<number> {\n        return (await this.provider.getBlockNumber()) - this.blockNumber + 1;\n    }\n\n    /**\n     *  @_ignore:\n     */\n    removedEvent(): OrphanFilter {\n        return createRemovedTransactionFilter(this);\n    }\n\n    /**\n     *  @_ignore:\n     */\n    reorderedEvent(other?: TransactionResponse): OrphanFilter {\n        assert(!other || other.isMined(), \"unmined 'other' transction cannot be orphaned\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"reorderedEvent(other)\" });\n        return createReorderedTransactionFilter(this, other);\n    }\n}\n\n\n//////////////////////\n// Transaction Response\n\n/**\n *  A **MinedTransactionResponse** is an interface representing a\n *  transaction which has been mined and allows for a type guard for its\n *  property values being defined.\n */\nexport interface MinedTransactionResponse extends TransactionResponse {\n    /**\n     *  The block number this transaction occurred in.\n     */\n    blockNumber: number;\n\n    /**\n     *  The block hash this transaction occurred in.\n     */\n    blockHash: string;\n\n    /**\n     *  The date this transaction occurred on.\n     */\n    date: Date;\n}\n\n\n/**\n *  A **TransactionResponse** includes all properties about a transaction\n *  that was sent to the network, which may or may not be included in a\n *  block.\n *\n *  The [[TransactionResponse-isMined]] can be used to check if the\n *  transaction has been mined as well as type guard that the otherwise\n *  possibly ``null`` properties are defined.\n */\nexport class TransactionResponse implements TransactionLike<string>, TransactionResponseParams {\n    /**\n     *  The provider this is connected to, which will influence how its\n     *  methods will resolve its async inspection methods.\n     */\n    readonly provider: Provider;\n\n    /**\n     *  The block number of the block that this transaction was included in.\n     *\n     *  This is ``null`` for pending transactions.\n     */\n    readonly blockNumber: null | number;\n\n    /**\n     *  The blockHash of the block that this transaction was included in.\n     *\n     *  This is ``null`` for pending transactions.\n     */\n    readonly blockHash: null | string;\n\n    /**\n     *  The index within the block that this transaction resides at.\n     */\n    readonly index!: number;\n\n    /**\n     *  The transaction hash.\n     */\n    readonly hash!: string;\n\n    /**\n     *  The [[link-eip-2718]] transaction envelope type. This is\n     *  ``0`` for legacy transactions types.\n     */\n    readonly type!: number;\n\n    /**\n     *  The receiver of this transaction.\n     *\n     *  If ``null``, then the transaction is an initcode transaction.\n     *  This means the result of executing the [[data]] will be deployed\n     *  as a new contract on chain (assuming it does not revert) and the\n     *  address may be computed using [[getCreateAddress]].\n     */\n    readonly to!: null | string;\n\n    /**\n     *  The sender of this transaction. It is implicitly computed\n     *  from the transaction pre-image hash (as the digest) and the\n     *  [[signature]] using ecrecover.\n     */\n    readonly from!: string;\n\n    /**\n     *  The nonce, which is used to prevent replay attacks and offer\n     *  a method to ensure transactions from a given sender are explicitly\n     *  ordered.\n     *\n     *  When sending a transaction, this must be equal to the number of\n     *  transactions ever sent by [[from]].\n     */\n    readonly nonce!: number;\n\n    /**\n     *  The maximum units of gas this transaction can consume. If execution\n     *  exceeds this, the entries transaction is reverted and the sender\n     *  is charged for the full amount, despite not state changes being made.\n     */\n    readonly gasLimit!: bigint;\n\n    /**\n     *  The gas price can have various values, depending on the network.\n     *\n     *  In modern networks, for transactions that are included this is\n     *  the //effective gas price// (the fee per gas that was actually\n     *  charged), while for transactions that have not been included yet\n     *  is the [[maxFeePerGas]].\n     *\n     *  For legacy transactions, or transactions on legacy networks, this\n     *  is the fee that will be charged per unit of gas the transaction\n     *  consumes.\n     */\n    readonly gasPrice!: bigint;\n\n    /**\n     *  The maximum priority fee (per unit of gas) to allow a\n     *  validator to charge the sender. This is inclusive of the\n     *  [[maxFeeFeePerGas]].\n     */\n    readonly maxPriorityFeePerGas!: null | bigint;\n\n    /**\n     *  The maximum fee (per unit of gas) to allow this transaction\n     *  to charge the sender.\n     */\n    readonly maxFeePerGas!: null | bigint;\n\n    /**\n     *  The [[link-eip-4844]] max fee per BLOb gas.\n     */\n    readonly maxFeePerBlobGas!: null | bigint;\n\n    /**\n     *  The data.\n     */\n    readonly data!: string;\n\n    /**\n     *  The value, in wei. Use [[formatEther]] to format this value\n     *  as ether.\n     */\n    readonly value!: bigint;\n\n    /**\n     *  The chain ID.\n     */\n    readonly chainId!: bigint;\n\n    /**\n     *  The signature.\n     */\n    readonly signature!: Signature;\n\n    /**\n     *  The [[link-eip-2930]] access list for transaction types that\n     *  support it, otherwise ``null``.\n     */\n    readonly accessList!: null | AccessList;\n\n    /**\n     *  The [[link-eip-4844]] BLOb versioned hashes.\n     */\n    readonly blobVersionedHashes!: null | Array<string>;\n\n    #startBlock: number;\n\n    /**\n     *  @_ignore:\n     */\n    constructor(tx: TransactionResponseParams, provider: Provider) {\n        this.provider = provider;\n\n        this.blockNumber = (tx.blockNumber != null) ? tx.blockNumber: null;\n        this.blockHash = (tx.blockHash != null) ? tx.blockHash: null;\n\n        this.hash = tx.hash;\n        this.index = tx.index;\n\n        this.type = tx.type;\n\n        this.from = tx.from;\n        this.to = tx.to || null;\n\n        this.gasLimit = tx.gasLimit;\n        this.nonce = tx.nonce;\n        this.data = tx.data;\n        this.value = tx.value;\n\n        this.gasPrice = tx.gasPrice;\n        this.maxPriorityFeePerGas = (tx.maxPriorityFeePerGas != null) ? tx.maxPriorityFeePerGas: null;\n        this.maxFeePerGas = (tx.maxFeePerGas != null) ? tx.maxFeePerGas: null;\n        this.maxFeePerBlobGas = (tx.maxFeePerBlobGas != null) ? tx.maxFeePerBlobGas: null;\n\n        this.chainId = tx.chainId;\n        this.signature = tx.signature;\n\n        this.accessList = (tx.accessList != null) ? tx.accessList: null;\n        this.blobVersionedHashes = (tx.blobVersionedHashes != null) ? tx.blobVersionedHashes: null;\n\n        this.#startBlock = -1;\n    }\n\n    /**\n     *  Returns a JSON-compatible representation of this transaction.\n     */\n    toJSON(): any {\n        const {\n            blockNumber, blockHash, index, hash, type, to, from, nonce,\n            data, signature, accessList, blobVersionedHashes\n        } = this;\n\n        return {\n            _type: \"TransactionResponse\",\n            accessList, blockNumber, blockHash,\n            blobVersionedHashes,\n            chainId: toJson(this.chainId),\n            data, from,\n            gasLimit: toJson(this.gasLimit),\n            gasPrice: toJson(this.gasPrice),\n            hash,\n            maxFeePerGas: toJson(this.maxFeePerGas),\n            maxPriorityFeePerGas: toJson(this.maxPriorityFeePerGas),\n            maxFeePerBlobGas: toJson(this.maxFeePerBlobGas),\n            nonce, signature, to, index, type,\n            value: toJson(this.value),\n        };\n    }\n\n    /**\n     *  Resolves to the Block that this transaction was included in.\n     *\n     *  This will return null if the transaction has not been included yet.\n     */\n    async getBlock(): Promise<null | Block> {\n        let blockNumber = this.blockNumber;\n        if (blockNumber == null) {\n            const tx = await this.getTransaction();\n            if (tx) { blockNumber = tx.blockNumber; }\n        }\n        if (blockNumber == null) { return null; }\n        const block = this.provider.getBlock(blockNumber);\n        if (block == null) { throw new Error(\"TODO\"); }\n        return block;\n    }\n\n    /**\n     *  Resolves to this transaction being re-requested from the\n     *  provider. This can be used if you have an unmined transaction\n     *  and wish to get an up-to-date populated instance.\n     */\n    async getTransaction(): Promise<null | TransactionResponse> {\n        return this.provider.getTransaction(this.hash);\n    }\n\n    /**\n     *  Resolve to the number of confirmations this transaction has.\n     */\n    async confirmations(): Promise<number> {\n        if (this.blockNumber == null) {\n            const { tx, blockNumber } = await resolveProperties({\n                tx: this.getTransaction(),\n                blockNumber: this.provider.getBlockNumber()\n            });\n\n            // Not mined yet...\n            if (tx == null || tx.blockNumber == null) { return 0; }\n\n            return blockNumber - tx.blockNumber + 1;\n        }\n\n        const blockNumber = await this.provider.getBlockNumber();\n        return blockNumber - this.blockNumber + 1;\n    }\n\n    /**\n     *  Resolves once this transaction has been mined and has\n     *  %%confirms%% blocks including it (default: ``1``) with an\n     *  optional %%timeout%%.\n     *\n     *  This can resolve to ``null`` only if %%confirms%% is ``0``\n     *  and the transaction has not been mined, otherwise this will\n     *  wait until enough confirmations have completed.\n     */\n    async wait(_confirms?: number, _timeout?: number): Promise<null | TransactionReceipt> {\n        const confirms = (_confirms == null) ? 1: _confirms;\n        const timeout = (_timeout == null) ? 0: _timeout;\n\n        let startBlock = this.#startBlock\n        let nextScan = -1;\n        let stopScanning = (startBlock === -1) ? true: false;\n        const checkReplacement = async () => {\n            // Get the current transaction count for this sender\n            if (stopScanning) { return null; }\n            const { blockNumber, nonce } = await resolveProperties({\n                blockNumber: this.provider.getBlockNumber(),\n                nonce: this.provider.getTransactionCount(this.from)\n            });\n\n            // No transaction or our nonce has not been mined yet; but we\n            // can start scanning later when we do start\n            if (nonce < this.nonce) {\n                startBlock = blockNumber;\n                return;\n            }\n\n            // We were mined; no replacement\n            if (stopScanning) { return null; }\n            const mined = await this.getTransaction();\n            if (mined && mined.blockNumber != null) { return; }\n\n            // We were replaced; start scanning for that transaction\n\n            // Starting to scan; look back a few extra blocks for safety\n            if (nextScan === -1) {\n                nextScan = startBlock - 3;\n                if (nextScan < this.#startBlock) { nextScan = this.#startBlock; }\n            }\n\n            while (nextScan <= blockNumber) {\n                // Get the next block to scan\n                if (stopScanning) { return null; }\n                const block = await this.provider.getBlock(nextScan, true);\n\n                // This should not happen; but we'll try again shortly\n                if (block == null) { return; }\n\n                // We were mined; no replacement\n                for (const hash of block) {\n                    if (hash === this.hash) { return; }\n                }\n\n                // Search for the transaction that replaced us\n                for (let i = 0; i < block.length; i++) {\n                    const tx: TransactionResponse = await block.getTransaction(i);\n\n                    if (tx.from === this.from && tx.nonce === this.nonce) {\n                        // Get the receipt\n                        if (stopScanning) { return null; }\n                        const receipt = await this.provider.getTransactionReceipt(tx.hash);\n\n                        // This should not happen; but we'll try again shortly\n                        if (receipt == null) { return; }\n\n                        // We will retry this on the next block (this case could be optimized)\n                        if ((blockNumber - receipt.blockNumber + 1) < confirms) { return; }\n\n                        // The reason we were replaced\n                        let reason: \"replaced\" | \"repriced\" | \"cancelled\" = \"replaced\";\n                        if (tx.data === this.data && tx.to === this.to && tx.value === this.value) {\n                            reason = \"repriced\";\n                        } else  if (tx.data === \"0x\" && tx.from === tx.to && tx.value === BN_0) {\n                            reason = \"cancelled\"\n                        }\n\n                        assert(false, \"transaction was replaced\", \"TRANSACTION_REPLACED\", {\n                            cancelled: (reason === \"replaced\" || reason === \"cancelled\"),\n                            reason,\n                            replacement: tx.replaceableTransaction(startBlock),\n                            hash: tx.hash,\n                            receipt\n                        });\n                    }\n                }\n\n                nextScan++;\n            }\n            return;\n        };\n\n        const checkReceipt = (receipt: null | TransactionReceipt) => {\n            if (receipt == null || receipt.status !== 0) { return receipt; }\n            assert(false, \"transaction execution reverted\", \"CALL_EXCEPTION\", {\n                action: \"sendTransaction\",\n                data: null, reason: null, invocation: null, revert: null,\n                transaction: {\n                    to: receipt.to,\n                    from: receipt.from,\n                    data: \"\" // @TODO: in v7, split out sendTransaction properties\n                }, receipt\n            });\n        };\n\n        const receipt = await this.provider.getTransactionReceipt(this.hash);\n\n        if (confirms === 0) { return checkReceipt(receipt); }\n\n        if (receipt) {\n            if ((await receipt.confirmations()) >= confirms) {\n                return checkReceipt(receipt);\n            }\n\n        } else {\n            // Check for a replacement; throws if a replacement was found\n            await checkReplacement();\n\n            // Allow null only when the confirms is 0\n            if (confirms === 0) { return null; }\n        }\n\n        const waiter = new Promise((resolve, reject) => {\n            // List of things to cancel when we have a result (one way or the other)\n            const cancellers: Array<() => void> = [ ];\n            const cancel = () => { cancellers.forEach((c) => c()); };\n\n            // On cancel, stop scanning for replacements\n            cancellers.push(() => { stopScanning = true; });\n\n            // Set up any timeout requested\n            if (timeout > 0) {\n                const timer = setTimeout(() => {\n                    cancel();\n                    reject(makeError(\"wait for transaction timeout\", \"TIMEOUT\"));\n                }, timeout);\n                cancellers.push(() => { clearTimeout(timer); });\n            }\n\n            const txListener = async (receipt: TransactionReceipt) => {\n                // Done; return it!\n                if ((await receipt.confirmations()) >= confirms) {\n                    cancel();\n                    try {\n                        resolve(checkReceipt(receipt));\n                    } catch (error) { reject(error); }\n                }\n            };\n            cancellers.push(() => { this.provider.off(this.hash, txListener); });\n            this.provider.on(this.hash, txListener);\n            // We support replacement detection; start checking\n            if (startBlock >= 0) {\n                const replaceListener = async () => {\n                    try {\n                        // Check for a replacement; this throws only if one is found\n                        await checkReplacement();\n\n                    } catch (error) {\n                        // We were replaced (with enough confirms); re-throw the error\n                        if (isError(error, \"TRANSACTION_REPLACED\")) {\n                            cancel();\n                            reject(error);\n                            return;\n                        }\n                    }\n\n                    // Rescheudle a check on the next block\n                    if (!stopScanning) {\n                        this.provider.once(\"block\", replaceListener);\n                    }\n                };\n                cancellers.push(() => { this.provider.off(\"block\", replaceListener); });\n                this.provider.once(\"block\", replaceListener);\n            }\n        });\n\n        return await <Promise<TransactionReceipt>>waiter;\n    }\n\n    /**\n     *  Returns ``true`` if this transaction has been included.\n     *\n     *  This is effective only as of the time the TransactionResponse\n     *  was instantiated. To get up-to-date information, use\n     *  [[getTransaction]].\n     *\n     *  This provides a Type Guard that this transaction will have\n     *  non-null property values for properties that are null for\n     *  unmined transactions.\n     */\n    isMined(): this is MinedTransactionResponse {\n        return (this.blockHash != null);\n    }\n\n    /**\n     *  Returns true if the transaction is a legacy (i.e. ``type == 0``)\n     *  transaction.\n     *\n     *  This provides a Type Guard that this transaction will have\n     *  the ``null``-ness for hardfork-specific properties set correctly.\n     */\n    isLegacy(): this is (TransactionResponse & { accessList: null, maxFeePerGas: null, maxPriorityFeePerGas: null }) {\n        return (this.type === 0)\n    }\n\n    /**\n     *  Returns true if the transaction is a Berlin (i.e. ``type == 1``)\n     *  transaction. See [[link-eip-2070]].\n     *\n     *  This provides a Type Guard that this transaction will have\n     *  the ``null``-ness for hardfork-specific properties set correctly.\n     */\n    isBerlin(): this is (TransactionResponse & { accessList: AccessList, maxFeePerGas: null, maxPriorityFeePerGas: null }) {\n        return (this.type === 1);\n    }\n\n    /**\n     *  Returns true if the transaction is a London (i.e. ``type == 2``)\n     *  transaction. See [[link-eip-1559]].\n     *\n     *  This provides a Type Guard that this transaction will have\n     *  the ``null``-ness for hardfork-specific properties set correctly.\n     */\n    isLondon(): this is (TransactionResponse & { accessList: AccessList, maxFeePerGas: bigint, maxPriorityFeePerGas: bigint }){\n        return (this.type === 2);\n    }\n\n    /**\n     *  Returns true if hte transaction is a Cancun (i.e. ``type == 3``)\n     *  transaction. See [[link-eip-4844]].\n     */\n    isCancun(): this is (TransactionResponse & { accessList: AccessList, maxFeePerGas: bigint, maxPriorityFeePerGas: bigint, maxFeePerBlobGas: bigint, blobVersionedHashes: Array<string> }){\n        return (this.type === 3);\n    }\n\n    /**\n     *  Returns a filter which can be used to listen for orphan events\n     *  that evict this transaction.\n     */\n    removedEvent(): OrphanFilter {\n        assert(this.isMined(), \"unmined transaction canot be orphaned\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"removeEvent()\" });\n        return createRemovedTransactionFilter(this);\n    }\n\n    /**\n     *  Returns a filter which can be used to listen for orphan events\n     *  that re-order this event against %%other%%.\n     */\n    reorderedEvent(other?: TransactionResponse): OrphanFilter {\n        assert(this.isMined(), \"unmined transaction canot be orphaned\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"removeEvent()\" });\n\n        assert(!other || other.isMined(), \"unmined 'other' transaction canot be orphaned\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"removeEvent()\" });\n\n        return createReorderedTransactionFilter(this, other);\n    }\n\n    /**\n     *  Returns a new TransactionResponse instance which has the ability to\n     *  detect (and throw an error) if the transaction is replaced, which\n     *  will begin scanning at %%startBlock%%.\n     *\n     *  This should generally not be used by developers and is intended\n     *  primarily for internal use. Setting an incorrect %%startBlock%% can\n     *  have devastating performance consequences if used incorrectly.\n     */\n    replaceableTransaction(startBlock: number): TransactionResponse {\n        assertArgument(Number.isInteger(startBlock) && startBlock >= 0, \"invalid startBlock\", \"startBlock\", startBlock);\n        const tx = new TransactionResponse(this, this.provider);\n        tx.#startBlock = startBlock;\n        return tx;\n    }\n}\n\n\n//////////////////////\n// OrphanFilter\n\n/**\n *  An Orphan Filter allows detecting when an orphan block has\n *  resulted in dropping a block or transaction or has resulted\n *  in transactions changing order.\n *\n *  Not currently fully supported.\n */\nexport type OrphanFilter = {\n    orphan: \"drop-block\",\n    hash: string,\n    number: number\n} | {\n    orphan: \"drop-transaction\",\n    tx: { hash: string, blockHash: string, blockNumber: number },\n    other?: { hash: string, blockHash: string, blockNumber: number }\n} | {\n    orphan: \"reorder-transaction\",\n    tx: { hash: string, blockHash: string, blockNumber: number },\n    other?: { hash: string, blockHash: string, blockNumber: number }\n} | {\n    orphan: \"drop-log\",\n    log: {\n        transactionHash: string,\n        blockHash: string,\n        blockNumber: number,\n        address: string,\n        data: string,\n        topics: ReadonlyArray<string>,\n        index: number\n    }\n};\n\nfunction createOrphanedBlockFilter(block: { hash: string, number: number }): OrphanFilter {\n    return { orphan: \"drop-block\", hash: block.hash, number: block.number };\n}\n\nfunction createReorderedTransactionFilter(tx: { hash: string, blockHash: string, blockNumber: number }, other?: { hash: string, blockHash: string, blockNumber: number }): OrphanFilter {\n    return { orphan: \"reorder-transaction\", tx, other };\n}\n\nfunction createRemovedTransactionFilter(tx: { hash: string, blockHash: string, blockNumber: number }): OrphanFilter {\n    return { orphan: \"drop-transaction\", tx };\n}\n\nfunction createRemovedLogFilter(log: { blockHash: string, transactionHash: string, blockNumber: number, address: string, data: string, topics: ReadonlyArray<string>, index: number }): OrphanFilter {\n    return { orphan: \"drop-log\", log: {\n        transactionHash: log.transactionHash,\n        blockHash: log.blockHash,\n        blockNumber: log.blockNumber,\n        address: log.address,\n        data: log.data,\n        topics: Object.freeze(log.topics.slice()),\n        index: log.index\n    } };\n}\n\n//////////////////////\n// EventFilter\n\n/**\n *  A **TopicFilter** provides a struture to define bloom-filter\n *  queries.\n *\n *  Each field that is ``null`` matches **any** value, a field that is\n *  a ``string`` must match exactly that value and ``array`` is\n *  effectively an ``OR``-ed set, where any one of those values must\n *  match.\n */\nexport type TopicFilter = Array<null | string | Array<string>>;\n\n// @TODO:\n//export type DeferableTopicFilter = Array<null | string | Promise<string> | Array<string | Promise<string>>>;\n\n/**\n *  An **EventFilter** allows efficiently filtering logs (also known as\n *  events) using bloom filters included within blocks.\n */\nexport interface EventFilter {\n    address?: AddressLike | Array<AddressLike>;\n    topics?: TopicFilter;\n}\n\n/**\n *  A **Filter** allows searching a specific range of blocks for mathcing\n *  logs.\n */\nexport interface Filter extends EventFilter {\n\n    /**\n     *  The start block for the filter (inclusive).\n     */\n    fromBlock?: BlockTag;\n\n    /**\n     *  The end block for the filter (inclusive).\n     */\n    toBlock?: BlockTag;\n}\n\n/**\n *  A **FilterByBlockHash** allows searching a specific block for mathcing\n *  logs.\n */\nexport interface FilterByBlockHash extends EventFilter {\n    /**\n     *  The blockhash of the specific block for the filter.\n     */\n    blockHash?: string;\n}\n\n\n//////////////////////\n// ProviderEvent\n\n/**\n *  A **ProviderEvent** provides the types of events that can be subscribed\n *  to on a [[Provider]].\n *\n *  Each provider may include additional possible events it supports, but\n *  the most commonly supported are:\n *\n *  **``\"block\"``** - calls the listener with the current block number on each\n *  new block.\n *\n *  **``\"error\"``** - calls the listener on each async error that occurs during\n *  the event loop, with the error.\n *\n *  **``\"debug\"``** - calls the listener on debug events, which can be used to\n *  troubleshoot network errors, provider problems, etc.\n *\n *  **``transaction hash``** - calls the listener on each block after the\n *  transaction has been mined; generally ``.once`` is more appropriate for\n *  this event.\n *\n *  **``Array``** - calls the listener on each log that matches the filter.\n *\n *  [[EventFilter]] - calls the listener with each matching log\n */\nexport type ProviderEvent = string | Array<string | Array<string>> | EventFilter | OrphanFilter;\n\n\n//////////////////////\n// Provider\n\n/**\n *  A **Provider** is the primary method to interact with the read-only\n *  content on Ethereum.\n *\n *  It allows access to details about accounts, blocks and transactions\n *  and the ability to query event logs and simulate contract execution.\n *\n *  Account data includes the [balance](getBalance),\n *  [transaction count](getTransactionCount), [code](getCode) and\n *  [state trie storage](getStorage).\n *\n *  Simulating execution can be used to [call](call),\n *  [estimate gas](estimateGas) and\n *  [get transaction results](getTransactionResult).\n *\n *  The [[broadcastTransaction]] is the only method which allows updating\n *  the blockchain, but it is usually accessed by a [[Signer]], since a\n *  private key must be used to sign the transaction before it can be\n *  broadcast.\n */\nexport interface Provider extends ContractRunner, EventEmitterable<ProviderEvent>, NameResolver {\n\n    /**\n     *  The provider iteself.\n     *\n     *  This is part of the necessary API for executing a contract, as\n     *  it provides a common property on any [[ContractRunner]] that\n     *  can be used to access the read-only portion of the runner.\n     */\n    provider: this;\n\n    /**\n     *  Shutdown any resources this provider is using. No additional\n     *  calls should be made to this provider after calling this.\n     */\n    destroy(): void;\n\n    ////////////////////\n    // State\n\n    /**\n     *  Get the current block number.\n     */\n    getBlockNumber(): Promise<number>;\n\n    /**\n     *  Get the connected [[Network]].\n     */\n    getNetwork(): Promise<Network>;\n\n    /**\n     *  Get the best guess at the recommended [[FeeData]].\n     */\n    getFeeData(): Promise<FeeData>;\n\n\n    ////////////////////\n    // Account\n\n    /**\n     *  Get the account balance (in wei) of %%address%%. If %%blockTag%%\n     *  is specified and the node supports archive access for that\n     *  %%blockTag%%, the balance is as of that [[BlockTag]].\n     *\n     *  @note On nodes without archive access enabled, the %%blockTag%% may be\n     *        **silently ignored** by the node, which may cause issues if relied on.\n     */\n    getBalance(address: AddressLike, blockTag?: BlockTag): Promise<bigint>;\n\n    /**\n     *  Get the number of transactions ever sent for %%address%%, which\n     *  is used as the ``nonce`` when sending a transaction. If\n     *  %%blockTag%% is specified and the node supports archive access\n     *  for that %%blockTag%%, the transaction count is as of that\n     *  [[BlockTag]].\n     *\n     *  @note On nodes without archive access enabled, the %%blockTag%% may be\n     *        **silently ignored** by the node, which may cause issues if relied on.\n     */\n    getTransactionCount(address: AddressLike, blockTag?: BlockTag): Promise<number>;\n\n    /**\n     *  Get the bytecode for %%address%%.\n     *\n     *  @note On nodes without archive access enabled, the %%blockTag%% may be\n     *        **silently ignored** by the node, which may cause issues if relied on.\n     */\n    getCode(address: AddressLike, blockTag?: BlockTag): Promise<string>\n\n    /**\n     *  Get the storage slot value for %%address%% at slot %%position%%.\n     *\n     *  @note On nodes without archive access enabled, the %%blockTag%% may be\n     *        **silently ignored** by the node, which may cause issues if relied on.\n     */\n    getStorage(address: AddressLike, position: BigNumberish, blockTag?: BlockTag): Promise<string>\n\n\n    ////////////////////\n    // Execution\n\n    /**\n     *  Estimates the amount of gas required to execute %%tx%%.\n     */\n    estimateGas(tx: TransactionRequest): Promise<bigint>;\n\n    /**\n     *  Simulate the execution of %%tx%%. If the call reverts, it will\n     *  throw a [[CallExceptionError]] which includes the revert data.\n     */\n    call(tx: TransactionRequest): Promise<string>\n\n    /**\n     *  Broadcasts the %%signedTx%% to the network, adding it to the\n     *  memory pool of any node for which the transaction meets the\n     *  rebroadcast requirements.\n     */\n    broadcastTransaction(signedTx: string): Promise<TransactionResponse>;\n\n\n    ////////////////////\n    // Queries\n\n    /**\n     *  Resolves to the block for %%blockHashOrBlockTag%%.\n     *\n     *  If %%prefetchTxs%%, and the backend supports including transactions\n     *  with block requests, all transactions will be included and the\n     *  [[Block]] object will not need to make remote calls for getting\n     *  transactions.\n     */\n    getBlock(blockHashOrBlockTag: BlockTag | string, prefetchTxs?: boolean): Promise<null | Block>;\n\n    /**\n     *  Resolves to the transaction for %%hash%%.\n     *\n     *  If the transaction is unknown or on pruning nodes which\n     *  discard old transactions this resolves to ``null``.\n     */\n    getTransaction(hash: string): Promise<null | TransactionResponse>;\n\n    /**\n     *  Resolves to the transaction receipt for %%hash%%, if mined.\n     *\n     *  If the transaction has not been mined, is unknown or on\n     *  pruning nodes which discard old transactions this resolves to\n     *  ``null``.\n     */\n    getTransactionReceipt(hash: string): Promise<null | TransactionReceipt>;\n\n    /**\n     *  Resolves to the result returned by the executions of %%hash%%.\n     *\n     *  This is only supported on nodes with archive access and with\n     *  the necessary debug APIs enabled.\n     */\n    getTransactionResult(hash: string): Promise<null | string>;\n\n\n    ////////////////////\n    // Bloom-filter Queries\n\n    /**\n     *  Resolves to the list of Logs that match %%filter%%\n     */\n    getLogs(filter: Filter | FilterByBlockHash): Promise<Array<Log>>;\n\n\n    ////////////////////\n    // ENS\n\n    /**\n     *  Resolves to the address configured for the %%ensName%% or\n     *  ``null`` if unconfigured.\n     */\n    resolveName(ensName: string): Promise<null | string>;\n\n    /**\n     *  Resolves to the ENS name associated for the %%address%% or\n     *  ``null`` if the //primary name// is not configured.\n     *\n     *  Users must perform additional steps to configure a //primary name//,\n     *  which is not currently common.\n     */\n    lookupAddress(address: string): Promise<null | string>;\n\n    /**\n     *  Waits until the transaction %%hash%% is mined and has %%confirms%%\n     *  confirmations.\n     */\n    waitForTransaction(hash: string, confirms?: number, timeout?: number): Promise<null | TransactionReceipt>;\n\n    /**\n     *  Resolves to the block at %%blockTag%% once it has been mined.\n     *\n     *  This can be useful for waiting some number of blocks by using\n     *  the ``currentBlockNumber + N``.\n     */\n    waitForBlock(blockTag?: BlockTag): Promise<Block>;\n}\n", "// import from provider.ts instead of index.ts to prevent circular dep\n// from EtherscanProvider\nimport {\n    Block, Log, TransactionReceipt, TransactionResponse\n} from \"../providers/provider.js\";\nimport { defineProperties, EventPayload } from \"../utils/index.js\";\n\nimport type { EventFragment, Interface, Result } from \"../abi/index.js\";\nimport type { Listener } from \"../utils/index.js\";\nimport type {\n    Provider\n} from \"../providers/index.js\";\n\nimport type { BaseContract } from \"./contract.js\";\nimport type { ContractEventName } from \"./types.js\";\n\n/**\n *  An **EventLog** contains additional properties parsed from the [[Log]].\n */\nexport class EventLog extends Log {\n    /**\n     *  The Contract Interface.\n     */\n    readonly interface!: Interface;\n\n    /**\n     *  The matching event.\n     */\n    readonly fragment!: EventFragment;\n\n    /**\n     *  The parsed arguments passed to the event by ``emit``.\n     */\n    readonly args!: Result;\n\n    /**\n     * @_ignore:\n     */\n    constructor(log: Log, iface: Interface, fragment: EventFragment) {\n        super(log, log.provider);\n        const args = iface.decodeEventLog(fragment, log.data, log.topics);\n        defineProperties<EventLog>(this, { args, fragment, interface: iface });\n    }\n\n    /**\n     *  The name of the event.\n     */\n    get eventName(): string { return this.fragment.name; }\n\n    /**\n     *  The signature of the event.\n     */\n    get eventSignature(): string { return this.fragment.format(); }\n}\n\n/**\n *  An **EventLog** contains additional properties parsed from the [[Log]].\n */\nexport class UndecodedEventLog extends Log {\n\n    /**\n     *  The error encounted when trying to decode the log.\n     */\n    readonly error!: Error;\n\n    /**\n     * @_ignore:\n     */\n    constructor(log: Log, error: Error) {\n        super(log, log.provider);\n        defineProperties<UndecodedEventLog>(this, { error });\n    }\n}\n\n/**\n *  A **ContractTransactionReceipt** includes the parsed logs from a\n *  [[TransactionReceipt]].\n */\nexport class ContractTransactionReceipt extends TransactionReceipt {\n    readonly #iface: Interface;\n\n    /**\n     *  @_ignore:\n     */\n    constructor(iface: Interface, provider: Provider, tx: TransactionReceipt) {\n        super(tx, provider);\n        this.#iface = iface;\n    }\n\n    /**\n     *  The parsed logs for any [[Log]] which has a matching event in the\n     *  Contract ABI.\n     */\n    get logs(): Array<EventLog | Log> {\n        return super.logs.map((log) => {\n            const fragment = log.topics.length ? this.#iface.getEvent(log.topics[0]): null;\n            if (fragment) {\n                try {\n                    return new EventLog(log, this.#iface, fragment)\n                } catch (error: any) {\n                    return new UndecodedEventLog(log, error);\n                }\n            }\n\n            return log;\n        });\n    }\n\n}\n\n/**\n *  A **ContractTransactionResponse** will return a\n *  [[ContractTransactionReceipt]] when waited on.\n */\nexport class ContractTransactionResponse extends TransactionResponse {\n    readonly #iface: Interface;\n\n    /**\n     *  @_ignore:\n     */\n    constructor(iface: Interface, provider: Provider, tx: TransactionResponse) {\n        super(tx, provider);\n        this.#iface = iface;\n    }\n\n    /**\n     *  Resolves once this transaction has been mined and has\n     *  %%confirms%% blocks including it (default: ``1``) with an\n     *  optional %%timeout%%.\n     *\n     *  This can resolve to ``null`` only if %%confirms%% is ``0``\n     *  and the transaction has not been mined, otherwise this will\n     *  wait until enough confirmations have completed.\n     */\n    async wait(confirms?: number, timeout?: number): Promise<null | ContractTransactionReceipt> {\n        const receipt = await super.wait(confirms, timeout);\n        if (receipt == null) { return null; }\n        return new ContractTransactionReceipt(this.#iface, this.provider, receipt);\n    }\n}\n\n/**\n *  A **ContractUnknownEventPayload** is included as the last parameter to\n *  Contract Events when the event does not match any events in the ABI.\n */\nexport  class ContractUnknownEventPayload extends EventPayload<ContractEventName> {\n    /**\n     *  The log with no matching events.\n     */\n    readonly log!: Log;\n\n    /**\n     *  @_event:\n     */\n    constructor(contract: BaseContract, listener: null | Listener, filter: ContractEventName, log: Log) {\n        super(contract, listener, filter);\n        defineProperties<ContractUnknownEventPayload>(this, { log });\n    }\n\n    /**\n     *  Resolves to the block the event occured in.\n     */\n    async getBlock(): Promise<Block> {\n        return await this.log.getBlock();\n    }\n\n    /**\n     *  Resolves to the transaction the event occured in.\n     */\n    async getTransaction(): Promise<TransactionResponse> {\n        return await this.log.getTransaction();\n    }\n\n    /**\n     *  Resolves to the transaction receipt the event occured in.\n     */\n    async getTransactionReceipt(): Promise<TransactionReceipt> {\n        return await this.log.getTransactionReceipt();\n    }\n}\n\n/**\n *  A **ContractEventPayload** is included as the last parameter to\n *  Contract Events when the event is known.\n */\nexport class ContractEventPayload extends ContractUnknownEventPayload {\n\n    /**\n     *  The matching event.\n     */\n    declare readonly fragment: EventFragment;\n\n    /**\n     *  The log, with parsed properties.\n     */\n    declare readonly log: EventLog;\n\n    /**\n     *  The parsed arguments passed to the event by ``emit``.\n     */\n    declare readonly args: Result;\n\n    /**\n     *  @_ignore:\n     */\n    constructor(contract: BaseContract, listener: null | Listener, filter: ContractEventName, fragment: EventFragment, _log: Log) {\n        super(contract, listener, filter, new EventLog(_log, contract.interface, fragment));\n        const args = contract.interface.decodeEventLog(fragment, this.log.data, this.log.topics);\n        defineProperties<ContractEventPayload>(this, { args, fragment });\n    }\n\n    /**\n     *  The event name.\n     */\n    get eventName(): string {\n        return this.fragment.name;\n    }\n\n    /**\n     *  The event signature.\n     */\n    get eventSignature(): string {\n        return this.fragment.format();\n    }\n}\n", "import { Interface, Typed } from \"../abi/index.js\";\nimport { isAddressable, resolveAddress } from \"../address/index.js\";\n// import from provider.ts instead of index.ts to prevent circular dep\n// from EtherscanProvider\nimport { copyRequest, Log, TransactionResponse } from \"../providers/provider.js\";\nimport {\n    defineProperties, getBigInt, isCallException, isHexString, resolveProperties,\n    isError, makeError, assert, assertArgument\n} from \"../utils/index.js\";\n\nimport {\n    ContractEventPayload, ContractUnknownEventPayload,\n    ContractTransactionResponse,\n    EventLog, UndecodedEventLog\n} from \"./wrappers.js\";\n\nimport type { EventFragment, FunctionFragment, InterfaceAbi, ParamType, Result } from \"../abi/index.js\";\nimport type { Addressable, NameResolver } from \"../address/index.js\";\nimport type { EventEmitterable, Listener } from \"../utils/index.js\";\nimport type {\n    BlockTag, ContractRunner, Provider, TransactionRequest, TopicFilter\n} from \"../providers/index.js\";\n\nimport type {\n    BaseContractMethod,\n    ContractEventName,\n    ContractInterface,\n    ContractMethodArgs,\n    ContractMethod,\n    ContractEventArgs,\n    ContractEvent,\n    ContractTransaction,\n    DeferredTopicFilter,\n    WrappedFallback\n} from \"./types.js\";\n\nconst BN_0 = BigInt(0);\n\ninterface ContractRunnerCaller extends ContractRunner {\n    call: (tx: TransactionRequest) => Promise<string>;\n}\n\ninterface ContractRunnerEstimater extends ContractRunner {\n    estimateGas: (tx: TransactionRequest) => Promise<bigint>;\n}\n\ninterface ContractRunnerSender extends ContractRunner {\n    sendTransaction: (tx: TransactionRequest) => Promise<TransactionResponse>;\n}\n\ninterface ContractRunnerResolver extends ContractRunner {\n    resolveName: (name: string | Addressable) => Promise<null | string>;\n}\n\nfunction canCall(value: any): value is ContractRunnerCaller {\n    return (value && typeof(value.call) === \"function\");\n}\n\nfunction canEstimate(value: any): value is ContractRunnerEstimater {\n    return (value && typeof(value.estimateGas) === \"function\");\n}\n\nfunction canResolve(value: any): value is ContractRunnerResolver {\n    return (value && typeof(value.resolveName) === \"function\");\n}\n\nfunction canSend(value: any): value is ContractRunnerSender {\n    return (value && typeof(value.sendTransaction) === \"function\");\n}\n\nfunction getResolver(value: any): undefined | NameResolver {\n    if (value != null) {\n        if (canResolve(value)) { return value; }\n        if (value.provider) { return value.provider; }\n    }\n    return undefined;\n}\n\nclass PreparedTopicFilter implements DeferredTopicFilter {\n    #filter: Promise<TopicFilter>;\n    readonly fragment!: EventFragment;\n\n    constructor(contract: BaseContract, fragment: EventFragment, args: Array<any>) {\n        defineProperties<PreparedTopicFilter>(this, { fragment });\n        if (fragment.inputs.length < args.length) {\n            throw new Error(\"too many arguments\");\n        }\n\n        // Recursively descend into args and resolve any addresses\n        const runner = getRunner(contract.runner, \"resolveName\");\n        const resolver = canResolve(runner) ? runner: null;\n        this.#filter = (async function() {\n            const resolvedArgs = await Promise.all(fragment.inputs.map((param, index) => {\n                const arg = args[index];\n                if (arg == null) { return null; }\n\n                return param.walkAsync(args[index], (type, value) => {\n                    if (type === \"address\") {\n                        if (Array.isArray(value)) {\n                            return Promise.all(value.map((v) => resolveAddress(v, resolver)));\n                        }\n                        return resolveAddress(value, resolver);\n                    }\n                    return value;\n                });\n            }));\n\n            return contract.interface.encodeFilterTopics(fragment, resolvedArgs);\n        })();\n    }\n\n    getTopicFilter(): Promise<TopicFilter> {\n        return this.#filter;\n    }\n}\n\n\n// A = Arguments passed in as a tuple\n// R = The result type of the call (i.e. if only one return type,\n//     the qualified type, otherwise Result)\n// D = The type the default call will return (i.e. R for view/pure,\n//     TransactionResponse otherwise)\n//export interface ContractMethod<A extends Array<any> = Array<any>, R = any, D extends R | ContractTransactionResponse = ContractTransactionResponse> {\n\nfunction getRunner<T extends ContractRunner>(value: any, feature: keyof ContractRunner): null | T {\n    if (value == null) { return null; }\n    if (typeof(value[feature]) === \"function\") { return value; }\n    if (value.provider && typeof(value.provider[feature]) === \"function\") {\n        return value.provider;\n    }\n    return null;\n}\n\nfunction getProvider(value: null | ContractRunner): null | Provider {\n    if (value == null) { return null; }\n    return value.provider || null;\n}\n\n/**\n *  @_ignore:\n */\nexport async function copyOverrides<O extends string = \"data\" | \"to\">(arg: any, allowed?: Array<string>): Promise<Omit<ContractTransaction, O>> {\n\n    // Make sure the overrides passed in are a valid overrides object\n    const _overrides = Typed.dereference(arg, \"overrides\");\n    assertArgument(typeof(_overrides) === \"object\", \"invalid overrides parameter\", \"overrides\", arg);\n\n    // Create a shallow copy (we'll deep-ify anything needed during normalizing)\n    const overrides = copyRequest(_overrides);\n\n    assertArgument(overrides.to == null || (allowed || [ ]).indexOf(\"to\") >= 0,\n      \"cannot override to\", \"overrides.to\", overrides.to);\n    assertArgument(overrides.data == null || (allowed || [ ]).indexOf(\"data\") >= 0,\n      \"cannot override data\", \"overrides.data\", overrides.data);\n\n    // Resolve any from\n    if (overrides.from) { overrides.from = overrides.from; }\n\n    return <Omit<ContractTransaction, O>>overrides;\n}\n\n/**\n *  @_ignore:\n */\nexport async function resolveArgs(_runner: null | ContractRunner, inputs: ReadonlyArray<ParamType>, args: Array<any>): Promise<Array<any>> {\n    // Recursively descend into args and resolve any addresses\n    const runner = getRunner(_runner, \"resolveName\");\n    const resolver = canResolve(runner) ? runner: null;\n    return await Promise.all(inputs.map((param, index) => {\n        return param.walkAsync(args[index], (type, value) => {\n            value = Typed.dereference(value, type);\n            if (type === \"address\") { return resolveAddress(value, resolver); }\n            return value;\n        });\n    }));\n}\n\nfunction buildWrappedFallback(contract: BaseContract): WrappedFallback {\n\n    const populateTransaction = async function(overrides?: Omit<TransactionRequest, \"to\">): Promise<ContractTransaction> {\n        // If an overrides was passed in, copy it and normalize the values\n\n        const tx: ContractTransaction = <any>(await copyOverrides<\"data\">(overrides, [ \"data\" ]));\n        tx.to = await contract.getAddress();\n\n        if (tx.from) {\n            tx.from = await resolveAddress(tx.from, getResolver(contract.runner));\n        }\n\n        const iface = contract.interface;\n\n        const noValue = (getBigInt((tx.value || BN_0), \"overrides.value\") === BN_0);\n        const noData = ((tx.data || \"0x\") === \"0x\");\n\n        if (iface.fallback && !iface.fallback.payable && iface.receive && !noData && !noValue) {\n            assertArgument(false, \"cannot send data to receive or send value to non-payable fallback\", \"overrides\", overrides);\n        }\n\n        assertArgument(iface.fallback || noData,\n          \"cannot send data to receive-only contract\", \"overrides.data\", tx.data);\n\n        // Only allow payable contracts to set non-zero value\n        const payable = iface.receive || (iface.fallback && iface.fallback.payable);\n        assertArgument(payable || noValue,\n          \"cannot send value to non-payable fallback\", \"overrides.value\", tx.value);\n\n        // Only allow fallback contracts to set non-empty data\n        assertArgument(iface.fallback || noData,\n          \"cannot send data to receive-only contract\", \"overrides.data\", tx.data);\n\n        return tx;\n    }\n\n    const staticCall = async function(overrides?: Omit<TransactionRequest, \"to\">): Promise<string> {\n        const runner = getRunner(contract.runner, \"call\");\n        assert(canCall(runner), \"contract runner does not support calling\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"call\" });\n\n        const tx = await populateTransaction(overrides);\n\n        try {\n            return await runner.call(tx);\n        } catch (error: any) {\n            if (isCallException(error) && error.data) {\n                throw contract.interface.makeError(error.data, tx);\n            }\n            throw error;\n        }\n    }\n\n    const send = async function(overrides?: Omit<TransactionRequest, \"to\">): Promise<ContractTransactionResponse> {\n        const runner = contract.runner;\n        assert(canSend(runner), \"contract runner does not support sending transactions\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"sendTransaction\" });\n\n        const tx = await runner.sendTransaction(await populateTransaction(overrides));\n        const provider = getProvider(contract.runner);\n        // @TODO: the provider can be null; make a custom dummy provider that will throw a\n        // meaningful error\n        return new ContractTransactionResponse(contract.interface, <Provider>provider, tx);\n    }\n\n    const estimateGas = async function(overrides?: Omit<TransactionRequest, \"to\">): Promise<bigint> {\n        const runner = getRunner(contract.runner, \"estimateGas\");\n        assert(canEstimate(runner), \"contract runner does not support gas estimation\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"estimateGas\" });\n\n        return await runner.estimateGas(await populateTransaction(overrides));\n    }\n\n    const method = async (overrides?: Omit<TransactionRequest, \"to\">) => {\n        return await send(overrides);\n    };\n\n    defineProperties<any>(method, {\n        _contract: contract,\n\n        estimateGas,\n        populateTransaction,\n        send, staticCall\n    });\n\n    return <WrappedFallback>method;\n}\n\nfunction buildWrappedMethod<A extends Array<any> = Array<any>, R = any, D extends R | ContractTransactionResponse = ContractTransactionResponse>(contract: BaseContract, key: string): BaseContractMethod<A, R, D> {\n\n    const getFragment = function(...args: ContractMethodArgs<A>): FunctionFragment {\n        const fragment = contract.interface.getFunction(key, args);\n        assert(fragment, \"no matching fragment\", \"UNSUPPORTED_OPERATION\", {\n            operation: \"fragment\",\n            info: { key, args }\n        });\n        return fragment;\n    }\n\n    const populateTransaction = async function(...args: ContractMethodArgs<A>): Promise<ContractTransaction> {\n        const fragment = getFragment(...args);\n\n        // If an overrides was passed in, copy it and normalize the values\n        let overrides: Omit<ContractTransaction, \"data\" | \"to\"> = { };\n        if (fragment.inputs.length + 1 === args.length) {\n            overrides = await copyOverrides(args.pop());\n\n            if (overrides.from) {\n                overrides.from = await resolveAddress(overrides.from, getResolver(contract.runner));\n            }\n        }\n\n        if (fragment.inputs.length !== args.length) {\n            throw new Error(\"internal error: fragment inputs doesn't match arguments; should not happen\");\n        }\n\n        const resolvedArgs = await resolveArgs(contract.runner, fragment.inputs, args);\n\n        return Object.assign({ }, overrides, await resolveProperties({\n            to: contract.getAddress(),\n            data: contract.interface.encodeFunctionData(fragment, resolvedArgs)\n        }));\n    }\n\n    const staticCall = async function(...args: ContractMethodArgs<A>): Promise<R> {\n        const result = await staticCallResult(...args);\n        if (result.length === 1) { return result[0]; }\n        return <R><unknown>result;\n    }\n\n    const send = async function(...args: ContractMethodArgs<A>): Promise<ContractTransactionResponse> {\n        const runner = contract.runner;\n        assert(canSend(runner), \"contract runner does not support sending transactions\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"sendTransaction\" });\n\n        const tx = await runner.sendTransaction(await populateTransaction(...args));\n        const provider = getProvider(contract.runner);\n        // @TODO: the provider can be null; make a custom dummy provider that will throw a\n        // meaningful error\n        return new ContractTransactionResponse(contract.interface, <Provider>provider, tx);\n    }\n\n    const estimateGas = async function(...args: ContractMethodArgs<A>): Promise<bigint> {\n        const runner = getRunner(contract.runner, \"estimateGas\");\n        assert(canEstimate(runner), \"contract runner does not support gas estimation\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"estimateGas\" });\n\n        return await runner.estimateGas(await populateTransaction(...args));\n    }\n\n    const staticCallResult = async function(...args: ContractMethodArgs<A>): Promise<Result> {\n        const runner = getRunner(contract.runner, \"call\");\n        assert(canCall(runner), \"contract runner does not support calling\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"call\" });\n\n        const tx = await populateTransaction(...args);\n\n        let result = \"0x\";\n        try {\n            result = await runner.call(tx);\n        } catch (error: any) {\n            if (isCallException(error) && error.data) {\n                throw contract.interface.makeError(error.data, tx);\n            }\n            throw error;\n        }\n\n        const fragment = getFragment(...args);\n        return contract.interface.decodeFunctionResult(fragment, result);\n    };\n\n    const method = async (...args: ContractMethodArgs<A>) => {\n        const fragment = getFragment(...args);\n        if (fragment.constant) { return await staticCall(...args); }\n        return await send(...args);\n    };\n\n    defineProperties<any>(method, {\n        name: contract.interface.getFunctionName(key),\n        _contract: contract, _key: key,\n\n        getFragment,\n\n        estimateGas,\n        populateTransaction,\n        send, staticCall, staticCallResult,\n    });\n\n    // Only works on non-ambiguous keys (refined fragment is always non-ambiguous)\n    Object.defineProperty(method, \"fragment\", {\n        configurable: false,\n        enumerable: true,\n        get: () => {\n            const fragment = contract.interface.getFunction(key);\n            assert(fragment, \"no matching fragment\", \"UNSUPPORTED_OPERATION\", {\n                operation: \"fragment\",\n                info: { key }\n            });\n            return fragment;\n        }\n    });\n\n    return <BaseContractMethod<A, R, D>>method;\n}\n\nfunction buildWrappedEvent<A extends Array<any> = Array<any>>(contract: BaseContract, key: string): ContractEvent<A> {\n\n    const getFragment = function(...args: ContractEventArgs<A>): EventFragment {\n        const fragment = contract.interface.getEvent(key, args);\n\n        assert(fragment, \"no matching fragment\", \"UNSUPPORTED_OPERATION\", {\n            operation: \"fragment\",\n            info: { key, args }\n        });\n\n        return fragment;\n    }\n\n    const method = function(...args: ContractMethodArgs<A>): PreparedTopicFilter {\n        return new PreparedTopicFilter(contract, getFragment(...args), args);\n    };\n\n    defineProperties<any>(method, {\n        name: contract.interface.getEventName(key),\n        _contract: contract, _key: key,\n\n        getFragment\n    });\n\n    // Only works on non-ambiguous keys (refined fragment is always non-ambiguous)\n    Object.defineProperty(method, \"fragment\", {\n        configurable: false,\n        enumerable: true,\n        get: () => {\n            const fragment = contract.interface.getEvent(key);\n\n            assert(fragment, \"no matching fragment\", \"UNSUPPORTED_OPERATION\", {\n                operation: \"fragment\",\n                info: { key }\n            });\n\n            return fragment;\n        }\n    });\n\n    return <ContractEvent<A>><unknown>method;\n}\n\ntype Sub = {\n    tag: string;\n    listeners: Array<{ listener: Listener, once: boolean }>,\n    start: () => void;\n    stop: () => void;\n};\n\n\n// The combination of TypeScrype, Private Fields and Proxies makes\n// the world go boom; so we hide variables with some trickery keeping\n// a symbol attached to each BaseContract which its sub-class (even\n// via a Proxy) can reach and use to look up its internal values.\n\nconst internal = Symbol.for(\"_ethersInternal_contract\");\ntype Internal = {\n    addrPromise: Promise<string>;\n    addr: null | string;\n\n    deployTx: null | ContractTransactionResponse;\n\n    subs: Map<string, Sub>;\n};\n\nconst internalValues: WeakMap<BaseContract, Internal> = new WeakMap();\n\nfunction setInternal(contract: BaseContract, values: Internal): void {\n    internalValues.set(contract[internal], values);\n}\n\nfunction getInternal(contract: BaseContract): Internal {\n    return internalValues.get(contract[internal]) as Internal;\n}\n\nfunction isDeferred(value: any): value is DeferredTopicFilter {\n    return (value && typeof(value) === \"object\" && (\"getTopicFilter\" in value) &&\n      (typeof(value.getTopicFilter) === \"function\") && value.fragment);\n}\n\nasync function getSubInfo(contract: BaseContract, event: ContractEventName): Promise<{ fragment: null | EventFragment, tag: string, topics: TopicFilter }> {\n    let topics: Array<null | string | Array<string>>;\n    let fragment: null | EventFragment = null;\n\n    // Convert named events to topicHash and get the fragment for\n    // events which need deconstructing.\n\n    if (Array.isArray(event)) {\n        const topicHashify = function(name: string): string {\n            if (isHexString(name, 32)) { return name; }\n            const fragment = contract.interface.getEvent(name);\n            assertArgument(fragment, \"unknown fragment\", \"name\", name);\n            return fragment.topicHash;\n        }\n\n        // Array of Topics and Names; e.g. `[ \"0x1234...89ab\", \"Transfer(address)\" ]`\n        topics = event.map((e) => {\n            if (e == null) { return null; }\n            if (Array.isArray(e)) { return e.map(topicHashify); }\n            return topicHashify(e);\n        });\n\n    } else if (event === \"*\") {\n        topics = [ null ];\n\n    } else if (typeof(event) === \"string\") {\n        if (isHexString(event, 32)) {\n            // Topic Hash\n            topics = [ event ];\n        } else {\n           // Name or Signature; e.g. `\"Transfer\", `\"Transfer(address)\"`\n            fragment = contract.interface.getEvent(event);\n            assertArgument(fragment, \"unknown fragment\", \"event\", event);\n            topics = [ fragment.topicHash ];\n        }\n\n    } else if (isDeferred(event)) {\n        // Deferred Topic Filter; e.g. `contract.filter.Transfer(from)`\n        topics = await event.getTopicFilter();\n\n    } else if (\"fragment\" in event) {\n        // ContractEvent; e.g. `contract.filter.Transfer`\n        fragment = event.fragment;\n        topics = [ fragment.topicHash ];\n\n    } else {\n        assertArgument(false, \"unknown event name\", \"event\", event);\n    }\n\n    // Normalize topics and sort TopicSets\n    topics = topics.map((t) => {\n        if (t == null) { return null; }\n        if (Array.isArray(t)) {\n            const items = Array.from(new Set(t.map((t) => t.toLowerCase())).values());\n            if (items.length === 1) { return items[0]; }\n            items.sort();\n            return items;\n        }\n        return t.toLowerCase();\n    });\n\n    const tag = topics.map((t) => {\n        if (t == null) { return \"null\"; }\n        if (Array.isArray(t)) { return t.join(\"|\"); }\n        return t;\n    }).join(\"&\");\n\n    return { fragment, tag, topics }\n}\n\nasync function hasSub(contract: BaseContract, event: ContractEventName): Promise<null | Sub> {\n    const { subs } = getInternal(contract);\n    return subs.get((await getSubInfo(contract, event)).tag) || null;\n}\n\nasync function getSub(contract: BaseContract, operation: string, event: ContractEventName): Promise<Sub> {\n    // Make sure our runner can actually subscribe to events\n    const provider = getProvider(contract.runner);\n    assert(provider, \"contract runner does not support subscribing\",\n        \"UNSUPPORTED_OPERATION\", { operation });\n\n    const { fragment, tag, topics } = await getSubInfo(contract, event);\n\n    const { addr, subs } = getInternal(contract);\n\n    let sub = subs.get(tag);\n    if (!sub) {\n        const address: string | Addressable = (addr ? addr: contract);\n        const filter = { address, topics };\n        const listener = (log: Log) => {\n            let foundFragment = fragment;\n            if (foundFragment == null) {\n                try {\n                    foundFragment = contract.interface.getEvent(log.topics[0]);\n                } catch (error) { }\n            }\n\n            // If fragment is null, we do not deconstruct the args to emit\n\n            if (foundFragment) {\n                const _foundFragment = foundFragment;\n                const args = fragment ? contract.interface.decodeEventLog(fragment, log.data, log.topics): [ ];\n                emit(contract, event, args, (listener: null | Listener) => {\n                    return new ContractEventPayload(contract, listener, event, _foundFragment, log);\n                });\n            } else {\n                emit(contract, event, [ ], (listener: null | Listener) => {\n                    return new ContractUnknownEventPayload(contract, listener, event, log);\n                });\n            }\n        };\n\n        let starting: Array<Promise<any>> = [ ];\n        const start = () => {\n            if (starting.length) { return; }\n            starting.push(provider.on(filter, listener));\n        };\n\n        const stop = async () => {\n            if (starting.length == 0) { return; }\n\n            let started = starting;\n            starting = [ ];\n            await Promise.all(started);\n            provider.off(filter, listener);\n        };\n\n        sub = { tag, listeners: [ ], start, stop };\n        subs.set(tag, sub);\n    }\n    return sub;\n}\n\n// We use this to ensure one emit resolves before firing the next to\n// ensure correct ordering (note this cannot throw and just adds the\n// notice to the event queu using setTimeout).\nlet lastEmit: Promise<any> = Promise.resolve();\n\ntype PayloadFunc = (listener: null | Listener) => ContractUnknownEventPayload;\n\nasync function _emit(contract: BaseContract, event: ContractEventName, args: Array<any>, payloadFunc: null | PayloadFunc): Promise<boolean> {\n    await lastEmit;\n\n    const sub = await hasSub(contract, event);\n    if (!sub) { return false; }\n\n    const count = sub.listeners.length;\n    sub.listeners = sub.listeners.filter(({ listener, once }) => {\n        const passArgs = Array.from(args);\n        if (payloadFunc) {\n            passArgs.push(payloadFunc(once ? null: listener));\n        }\n        try {\n            listener.call(contract, ...passArgs);\n        } catch (error) { }\n        return !once;\n    });\n\n    if (sub.listeners.length === 0) {\n        sub.stop();\n        getInternal(contract).subs.delete(sub.tag);\n    }\n\n    return (count > 0);\n}\n\nasync function emit(contract: BaseContract, event: ContractEventName, args: Array<any>, payloadFunc: null | PayloadFunc): Promise<boolean> {\n    try {\n        await lastEmit;\n    } catch (error) { }\n\n    const resultPromise = _emit(contract, event, args, payloadFunc);\n    lastEmit = resultPromise;\n    return await resultPromise;\n}\n\nconst passProperties = [ \"then\" ];\nexport class BaseContract implements Addressable, EventEmitterable<ContractEventName> {\n    /**\n     *  The target to connect to.\n     *\n     *  This can be an address, ENS name or any [[Addressable]], such as\n     *  another contract. To get the resovled address, use the ``getAddress``\n     *  method.\n     */\n    readonly target!: string | Addressable;\n\n    /**\n     *  The contract Interface.\n     */\n    readonly interface!: Interface;\n\n    /**\n     *  The connected runner. This is generally a [[Provider]] or a\n     *  [[Signer]], which dictates what operations are supported.\n     *\n     *  For example, a **Contract** connected to a [[Provider]] may\n     *  only execute read-only operations.\n     */\n    readonly runner!: null | ContractRunner;\n\n    /**\n     *  All the Events available on this contract.\n     */\n    readonly filters!: Record<string, ContractEvent>;\n\n    /**\n     *  @_ignore:\n     */\n    readonly [internal]: any;\n\n    /**\n     *  The fallback or receive function if any.\n     */\n    readonly fallback!: null | WrappedFallback;\n\n    /**\n     *  Creates a new contract connected to %%target%% with the %%abi%% and\n     *  optionally connected to a %%runner%% to perform operations on behalf\n     *  of.\n     */\n    constructor(target: string | Addressable, abi: Interface | InterfaceAbi, runner?: null | ContractRunner, _deployTx?: null | TransactionResponse) {\n        assertArgument(typeof(target) === \"string\" || isAddressable(target),\n            \"invalid value for Contract target\", \"target\", target);\n\n        if (runner == null) { runner = null; }\n        const iface = Interface.from(abi);\n        defineProperties<BaseContract>(this, { target, runner, interface: iface });\n\n        Object.defineProperty(this, internal, { value: { } });\n\n        let addrPromise;\n        let addr: null | string = null;\n\n        let deployTx: null | ContractTransactionResponse = null;\n        if (_deployTx) {\n            const provider = getProvider(runner);\n            // @TODO: the provider can be null; make a custom dummy provider that will throw a\n            // meaningful error\n            deployTx = new ContractTransactionResponse(this.interface, <Provider>provider, _deployTx);\n        }\n\n        let subs = new Map();\n\n        // Resolve the target as the address\n        if (typeof(target) === \"string\") {\n            if (isHexString(target)) {\n                addr = target;\n                addrPromise = Promise.resolve(target);\n\n            } else {\n                const resolver = getRunner(runner, \"resolveName\");\n                if (!canResolve(resolver)) {\n                    throw makeError(\"contract runner does not support name resolution\", \"UNSUPPORTED_OPERATION\", {\n                        operation: \"resolveName\"\n                    });\n                }\n\n                addrPromise = resolver.resolveName(target).then((addr) => {\n                    if (addr == null) {\n                        throw makeError(\"an ENS name used for a contract target must be correctly configured\", \"UNCONFIGURED_NAME\", {\n                            value: target\n                        });\n                    }\n                    getInternal(this).addr = addr;\n                    return addr;\n                });\n            }\n        } else {\n            addrPromise = target.getAddress().then((addr) => {\n                if (addr == null) { throw new Error(\"TODO\"); }\n                getInternal(this).addr = addr;\n                return addr;\n            });\n        }\n\n        // Set our private values\n        setInternal(this, { addrPromise, addr, deployTx, subs });\n\n        // Add the event filters\n        const filters = new Proxy({ }, {\n            get: (target, prop, receiver) => {\n                // Pass important checks (like `then` for Promise) through\n                if (typeof(prop) === \"symbol\" || passProperties.indexOf(prop) >= 0) {\n                    return Reflect.get(target, prop, receiver);\n                }\n\n                try {\n                    return this.getEvent(prop);\n                } catch (error) {\n                    if (!isError(error, \"INVALID_ARGUMENT\") || error.argument !== \"key\") {\n                        throw error;\n                    }\n                }\n\n                return undefined;\n            },\n            has: (target, prop) => {\n                // Pass important checks (like `then` for Promise) through\n                if (passProperties.indexOf(<string>prop) >= 0) {\n                    return Reflect.has(target, prop);\n                }\n\n                return Reflect.has(target, prop) || this.interface.hasEvent(String(prop));\n            }\n        });\n        defineProperties<BaseContract>(this, { filters });\n\n        defineProperties<BaseContract>(this, {\n            fallback: ((iface.receive || iface.fallback) ? (buildWrappedFallback(this)): null)\n        });\n\n        // Return a Proxy that will respond to functions\n        return new Proxy(this, {\n            get: (target, prop, receiver) => {\n                if (typeof(prop) === \"symbol\" || prop in target || passProperties.indexOf(prop) >= 0) {\n                    return Reflect.get(target, prop, receiver);\n                }\n\n                // Undefined properties should return undefined\n                try {\n                    return target.getFunction(prop);\n                } catch (error) {\n                    if (!isError(error, \"INVALID_ARGUMENT\") || error.argument !== \"key\") {\n                        throw error;\n                    }\n                }\n\n                return undefined;\n            },\n            has: (target, prop) => {\n                if (typeof(prop) === \"symbol\" || prop in target || passProperties.indexOf(prop) >= 0) {\n                    return Reflect.has(target, prop);\n                }\n\n                return target.interface.hasFunction(prop);\n            }\n        });\n\n    }\n\n    /**\n     *  Return a new Contract instance with the same target and ABI, but\n     *  a different %%runner%%.\n     */\n    connect(runner: null | ContractRunner): BaseContract {\n        return new BaseContract(this.target, this.interface, runner);\n    }\n\n    /**\n     *  Return a new Contract instance with the same ABI and runner, but\n     *  a different %%target%%.\n     */\n    attach(target: string | Addressable): BaseContract {\n        return new BaseContract(target, this.interface, this.runner);\n    }\n\n    /**\n     *  Return the resolved address of this Contract.\n     */\n    async getAddress(): Promise<string> { return await getInternal(this).addrPromise; }\n\n    /**\n     *  Return the deployed bytecode or null if no bytecode is found.\n     */\n    async getDeployedCode(): Promise<null | string> {\n        const provider = getProvider(this.runner);\n        assert(provider, \"runner does not support .provider\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"getDeployedCode\" });\n\n        const code = await provider.getCode(await this.getAddress());\n        if (code === \"0x\") { return null; }\n        return code;\n    }\n\n    /**\n     *  Resolve to this Contract once the bytecode has been deployed, or\n     *  resolve immediately if already deployed.\n     */\n    async waitForDeployment(): Promise<this> {\n        // We have the deployement transaction; just use that (throws if deployement fails)\n        const deployTx = this.deploymentTransaction();\n        if (deployTx) {\n            await deployTx.wait();\n            return this;\n        }\n\n        // Check for code\n        const code = await this.getDeployedCode();\n        if (code != null) { return this; }\n\n        // Make sure we can subscribe to a provider event\n        const provider = getProvider(this.runner);\n        assert(provider != null, \"contract runner does not support .provider\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"waitForDeployment\" });\n\n        return new Promise((resolve, reject) => {\n            const checkCode = async () => {\n                try {\n                    const code = await this.getDeployedCode();\n                    if (code != null) { return resolve(this); }\n                    provider.once(\"block\", checkCode);\n                } catch (error) {\n                    reject(error);\n                }\n            };\n            checkCode();\n        });\n    }\n\n    /**\n     *  Return the transaction used to deploy this contract.\n     *\n     *  This is only available if this instance was returned from a\n     *  [[ContractFactory]].\n     */\n    deploymentTransaction(): null | ContractTransactionResponse {\n        return getInternal(this).deployTx;\n    }\n\n    /**\n     *  Return the function for a given name. This is useful when a contract\n     *  method name conflicts with a JavaScript name such as ``prototype`` or\n     *  when using a Contract programatically.\n     */\n    getFunction<T extends ContractMethod = ContractMethod>(key: string | FunctionFragment): T {\n        if (typeof(key) !== \"string\") { key = key.format(); }\n        const func = buildWrappedMethod(this, key);\n        return <T>func;\n    }\n\n    /**\n     *  Return the event for a given name. This is useful when a contract\n     *  event name conflicts with a JavaScript name such as ``prototype`` or\n     *  when using a Contract programatically.\n     */\n    getEvent(key: string | EventFragment): ContractEvent {\n        if (typeof(key) !== \"string\") { key = key.format(); }\n        return buildWrappedEvent(this, key);\n    }\n\n    /**\n     *  @_ignore:\n     */\n    async queryTransaction(hash: string): Promise<Array<EventLog>> {\n        throw new Error(\"@TODO\");\n    }\n\n    /*\n    // @TODO: this is a non-backwards compatible change, but will be added\n    //        in v7 and in a potential SmartContract class in an upcoming\n    //        v6 release\n    async getTransactionReceipt(hash: string): Promise<null | ContractTransactionReceipt> {\n        const provider = getProvider(this.runner);\n        assert(provider, \"contract runner does not have a provider\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"queryTransaction\" });\n\n        const receipt = await provider.getTransactionReceipt(hash);\n        if (receipt == null) { return null; }\n\n        return new ContractTransactionReceipt(this.interface, provider, receipt);\n    }\n    */\n\n    /**\n     *  Provide historic access to event data for %%event%% in the range\n     *  %%fromBlock%% (default: ``0``) to %%toBlock%% (default: ``\"latest\"``)\n     *  inclusive.\n     */\n    async queryFilter(event: ContractEventName, fromBlock?: BlockTag, toBlock?: BlockTag): Promise<Array<EventLog | Log>> {\n        if (fromBlock == null) { fromBlock = 0; }\n        if (toBlock == null) { toBlock = \"latest\"; }\n        const { addr, addrPromise } = getInternal(this);\n        const address = (addr ? addr: (await addrPromise));\n        const { fragment, topics } = await getSubInfo(this, event);\n        const filter = { address, topics, fromBlock, toBlock };\n\n        const provider = getProvider(this.runner);\n        assert(provider, \"contract runner does not have a provider\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"queryFilter\" });\n\n        return (await provider.getLogs(filter)).map((log) => {\n            let foundFragment = fragment;\n            if (foundFragment == null) {\n                try {\n                    foundFragment = this.interface.getEvent(log.topics[0]);\n                } catch (error) { }\n            }\n\n            if (foundFragment) {\n                try {\n                    return new EventLog(log, this.interface, foundFragment);\n                } catch (error: any) {\n                    return new UndecodedEventLog(log, error);\n                }\n            }\n\n            return new Log(log, provider);\n        });\n    }\n\n    /**\n     *  Add an event %%listener%% for the %%event%%.\n     */\n    async on(event: ContractEventName, listener: Listener): Promise<this> {\n        const sub = await getSub(this, \"on\", event);\n        sub.listeners.push({ listener, once: false });\n        sub.start();\n        return this;\n    }\n\n    /**\n     *  Add an event %%listener%% for the %%event%%, but remove the listener\n     *  after it is fired once.\n     */\n    async once(event: ContractEventName, listener: Listener): Promise<this> {\n        const sub = await getSub(this, \"once\", event);\n        sub.listeners.push({ listener, once: true });\n        sub.start();\n        return this;\n    }\n\n    /**\n     *  Emit an %%event%% calling all listeners with %%args%%.\n     *\n     *  Resolves to ``true`` if any listeners were called.\n     */\n    async emit(event: ContractEventName, ...args: Array<any>): Promise<boolean> {\n        return await emit(this, event, args, null);\n    }\n\n    /**\n     *  Resolves to the number of listeners of %%event%% or the total number\n     *  of listeners if unspecified.\n     */\n    async listenerCount(event?: ContractEventName): Promise<number> {\n        if (event) {\n            const sub = await hasSub(this, event);\n            if (!sub) { return 0; }\n            return sub.listeners.length;\n        }\n\n        const { subs } = getInternal(this);\n\n        let total = 0;\n        for (const { listeners } of subs.values()) {\n            total += listeners.length;\n        }\n        return total;\n    }\n\n    /**\n     *  Resolves to the listeners subscribed to %%event%% or all listeners\n     *  if unspecified.\n     */\n    async listeners(event?: ContractEventName): Promise<Array<Listener>> {\n        if (event) {\n            const sub = await hasSub(this, event);\n            if (!sub) { return [ ]; }\n            return sub.listeners.map(({ listener }) => listener);\n        }\n\n        const { subs } = getInternal(this);\n\n        let result: Array<Listener> = [ ];\n        for (const { listeners } of subs.values()) {\n            result = result.concat(listeners.map(({ listener }) => listener));\n        }\n        return result;\n    }\n\n    /**\n     *  Remove the %%listener%% from the listeners for %%event%% or remove\n     *  all listeners if unspecified.\n     */\n    async off(event: ContractEventName, listener?: Listener): Promise<this> {\n        const sub = await hasSub(this, event);\n        if (!sub) { return this; }\n\n        if (listener) {\n            const index = sub.listeners.map(({ listener }) => listener).indexOf(listener);\n            if (index >= 0) { sub.listeners.splice(index, 1); }\n        }\n\n        if (listener == null || sub.listeners.length === 0) {\n            sub.stop();\n            getInternal(this).subs.delete(sub.tag);\n        }\n\n        return this;\n    }\n\n    /**\n     *  Remove all the listeners for %%event%% or remove all listeners if\n     *  unspecified.\n     */\n    async removeAllListeners(event?: ContractEventName): Promise<this> {\n        if (event) {\n            const sub = await hasSub(this, event);\n            if (!sub) { return this; }\n            sub.stop();\n            getInternal(this).subs.delete(sub.tag);\n        } else {\n            const { subs } = getInternal(this);\n            for (const { tag, stop } of subs.values()) {\n                stop();\n                subs.delete(tag);\n            }\n        }\n\n        return this;\n    }\n\n    /**\n     *  Alias for [on].\n     */\n    async addListener(event: ContractEventName, listener: Listener): Promise<this> {\n        return await this.on(event, listener);\n    }\n\n    /**\n     *  Alias for [off].\n     */\n    async removeListener(event: ContractEventName, listener: Listener): Promise<this> {\n        return await this.off(event, listener);\n    }\n\n    /**\n     *  Create a new Class for the %%abi%%.\n     */\n    static buildClass<T = ContractInterface>(abi: Interface | InterfaceAbi): new (target: string, runner?: null | ContractRunner) => BaseContract & Omit<T, keyof BaseContract> {\n        class CustomContract extends BaseContract {\n            constructor(address: string, runner: null | ContractRunner = null) {\n                super(address, abi, runner);\n            }\n        }\n        return CustomContract as any;\n    };\n\n    /**\n     *  Create a new BaseContract with a specified Interface.\n     */\n    static from<T = ContractInterface>(target: string, abi: Interface | InterfaceAbi, runner?: null | ContractRunner): BaseContract & Omit<T, keyof BaseContract> {\n        if (runner == null) { runner = null; }\n        const contract = new this(target, abi, runner );\n        return contract as any;\n    }\n}\n\nfunction _ContractBase(): new (target: string | Addressable, abi: Interface | InterfaceAbi, runner?: null | ContractRunner) => BaseContract & Omit<ContractInterface, keyof BaseContract> {\n    return BaseContract as any;\n}\n\n/**\n *  A [[BaseContract]] with no type guards on its methods or events.\n */\nexport class Contract extends _ContractBase() { }\n", "\nimport { Interface } from \"../abi/index.js\";\nimport { getCreateAddress } from \"../address/index.js\";\nimport {\n    concat, defineProperties, getBytes, hexlify,\n    assert, assertArgument\n} from \"../utils/index.js\";\n\nimport { BaseContract, copyOverrides, resolveArgs } from \"./contract.js\";\n\nimport type { InterfaceAbi } from \"../abi/index.js\";\nimport type { Addressable } from \"../address/index.js\";\nimport type { ContractRunner } from \"../providers/index.js\";\nimport type { BytesLike } from \"../utils/index.js\";\n\nimport type {\n    ContractInterface, ContractMethodArgs, ContractDeployTransaction,\n} from \"./types.js\";\nimport type { ContractTransactionResponse } from \"./wrappers.js\";\n\n\n// A = Arguments to the constructor\n// I = Interface of deployed contracts\n\n/**\n *  A **ContractFactory** is used to deploy a Contract to the blockchain.\n */\nexport class ContractFactory<A extends Array<any> = Array<any>, I = BaseContract> {\n\n    /**\n     *  The Contract Interface.\n     */\n    readonly interface!: Interface;\n\n    /**\n     *  The Contract deployment bytecode. Often called the initcode.\n     */\n    readonly bytecode!: string;\n\n    /**\n     *  The ContractRunner to deploy the Contract as.\n     */\n    readonly runner!: null | ContractRunner;\n\n    /**\n     *  Create a new **ContractFactory** with %%abi%% and %%bytecode%%,\n     *  optionally connected to %%runner%%.\n     *\n     *  The %%bytecode%% may be the ``bytecode`` property within the\n     *  standard Solidity JSON output.\n     */\n    constructor(abi: Interface | InterfaceAbi, bytecode: BytesLike | { object: string }, runner?: null | ContractRunner) {\n        const iface = Interface.from(abi);\n\n        // Dereference Solidity bytecode objects and allow a missing `0x`-prefix\n        if (bytecode instanceof Uint8Array) {\n            bytecode = hexlify(getBytes(bytecode));\n        } else {\n            if (typeof(bytecode) === \"object\") { bytecode = bytecode.object; }\n            if (!bytecode.startsWith(\"0x\")) { bytecode = \"0x\" + bytecode; }\n            bytecode = hexlify(getBytes(bytecode));\n        }\n\n        defineProperties<ContractFactory>(this, {\n            bytecode, interface: iface, runner: (runner || null)\n        });\n    }\n\n    attach(target: string | Addressable): BaseContract & Omit<I, keyof BaseContract> {\n        return new (<any>BaseContract)(target, this.interface, this.runner);\n    }\n\n    /**\n     *  Resolves to the transaction to deploy the contract, passing %%args%%\n     *  into the constructor.\n     */\n    async getDeployTransaction(...args: ContractMethodArgs<A>): Promise<ContractDeployTransaction> {\n        let overrides: Omit<ContractDeployTransaction, \"data\"> = { };\n\n        const fragment = this.interface.deploy;\n\n        if (fragment.inputs.length + 1 === args.length) {\n            overrides = await copyOverrides(args.pop());\n        }\n\n        if (fragment.inputs.length !== args.length) {\n            throw new Error(\"incorrect number of arguments to constructor\");\n        }\n\n        const resolvedArgs = await resolveArgs(this.runner, fragment.inputs, args);\n\n        const data = concat([ this.bytecode, this.interface.encodeDeploy(resolvedArgs) ]);\n        return Object.assign({ }, overrides, { data });\n    }\n\n    /**\n     *  Resolves to the Contract deployed by passing %%args%% into the\n     *  constructor.\n     *\n     *  This will resolve to the Contract before it has been deployed to the\n     *  network, so the [[BaseContract-waitForDeployment]] should be used before\n     *  sending any transactions to it.\n     */\n    async deploy(...args: ContractMethodArgs<A>): Promise<BaseContract & { deploymentTransaction(): ContractTransactionResponse } & Omit<I, keyof BaseContract>> {\n        const tx = await this.getDeployTransaction(...args);\n\n        assert(this.runner && typeof(this.runner.sendTransaction) === \"function\",\n            \"factory runner does not support sending transactions\", \"UNSUPPORTED_OPERATION\", {\n            operation: \"sendTransaction\" });\n\n        const sentTx = await this.runner.sendTransaction(tx);\n        const address = getCreateAddress(sentTx);\n        return new (<any>BaseContract)(address, this.interface, this.runner, sentTx);\n    }\n\n    /**\n     *  Return a new **ContractFactory** with the same ABI and bytecode,\n     *  but connected to %%runner%%.\n     */\n    connect(runner: null | ContractRunner): ContractFactory<A, I> {\n        return new ContractFactory(this.interface, this.bytecode, runner);\n    }\n\n    /**\n     *  Create a new **ContractFactory** from the standard Solidity JSON output.\n     */\n    static fromSolidity<A extends Array<any> = Array<any>, I = ContractInterface>(output: any, runner?: ContractRunner): ContractFactory<A, I> {\n        assertArgument(output != null, \"bad compiler output\", \"output\", output);\n\n        if (typeof(output) === \"string\") { output = JSON.parse(output); }\n\n        const abi = output.abi;\n\n        let bytecode = \"\";\n        if (output.bytecode) {\n            bytecode = output.bytecode;\n        } else if (output.evm && output.evm.bytecode) {\n            bytecode = output.evm.bytecode;\n        }\n\n        return new this(abi, bytecode, runner);\n    }\n}\n", "import {\n    BigNumberish,\n    BytesLike,\n    getBytes,\n    keccak256,\n    Provider,\n    Signer,\n} from \"ethers\"\nimport {bn254} from \"@kevincharm/noble-bn254-drand\"\nimport {equalBytes} from \"@noble/curves/abstract/utils\"\nimport {encodeParams, extractSingleLog} from \"./ethers-helpers\"\nimport {withTimeout} from \"./misc\"\nimport {RandomnessSender__factory} from \"./generated\"\nimport {TypedContractEvent, TypedListener} from \"./generated/common\"\nimport {RandomnessCallbackSuccessEvent, RandomnessSender} from \"./generated/RandomnessSender\"\n\n/* addresses of the deployed contracts */\nexport const FURNACE_TESTNET_CONTRACT_ADDRESS = \"0x8192aF4ce49f473fCa7e3e5a8d819B0763Def048\"\nexport const FILECOIN_CALIBNET_CONTRACT_ADDRESS = \"0x91c7774C7476F3832919adE7690467DF91bfd919\"\nexport const BASE_SEPOLIA_CONTRACT_ADDRESS = \"0x455bfe4B1B4393b458d413E2B0778A95F9B84B82\"\nexport const POLYGON_POS_CONTRACT_ADDRESS = \"0x455bfe4B1B4393b458d413E2B0778A95F9B84B82\"\n\nconst iface = RandomnessSender__factory.createInterface()\n\nexport function createBlsDst(chainId: bigint): string {\n    if (chainId <= 0n) {\n        throw new Error(\"cannot create a BLS domain separator for an invalid chainId\")\n    }\n\n    return `dcipher-randomness-v01-BN254G1_XMD:KECCAK-256_SVDW_RO_${encodeParams([\"uint256\"], [chainId])}_`\n}\n\nexport type RandomnessVerificationParameters = {\n    requestID: bigint,\n    nonce: bigint,\n    randomness: BytesLike\n    signature: BytesLike\n}\n\nexport type RandomnessVerificationConfig = {\n    shouldBlowUp: boolean // determines whether the verification function silently returns a boolean on failure or explodes\n}\n\nexport class Randomness {\n    private readonly contract: RandomnessSender\n    // any human who can find the right hex format to parse this point shall be crowned the [king|queen|catgirl] of England\n    private readonly pk = new bn254.G2.ProjectivePoint(\n        {\n            c0: 17445541620214498517833872661220947475697073327136585274784354247720096233162n,\n            c1: 18268991875563357240413244408004758684187086817233527689475815128036446189503n\n        },\n        {\n            c0: 11401601170172090472795479479864222172123705188644469125048759621824127399516n,\n            c1: 8044854403167346152897273335539146380878155193886184396711544300199836788154n\n        },\n        {\n            c0: 1n, c1: 0n\n        }\n    )\n\n    constructor(\n        private readonly rpc: Signer | Provider,\n        private readonly contractAddress: string = FURNACE_TESTNET_CONTRACT_ADDRESS,\n        private readonly chainId: bigint,\n        private readonly defaultRequestTimeoutMs: number = 15_000,\n    ) {\n        console.log(`created randomness-js client with address ${contractAddress}`)\n        this.contract = RandomnessSender__factory.connect(contractAddress, rpc)\n    }\n\n    static createFilecoinCalibnet(rpc: Signer | Provider): Randomness {\n        // filecoin block time is 30s, so give a longer default timeout\n        return new Randomness(rpc, FILECOIN_CALIBNET_CONTRACT_ADDRESS, 314159n, 90_000)\n    }\n\n    static createFurnace(rpc: Signer | Provider): Randomness {\n        return new Randomness(rpc, FURNACE_TESTNET_CONTRACT_ADDRESS, 64630n)\n    }\n\n    static createBaseSepolia(rpc: Signer | Provider): Randomness {\n        return new Randomness(rpc, BASE_SEPOLIA_CONTRACT_ADDRESS, 84532n)\n    }\n\n    static createPolygonPos(rpc: Signer | Provider): Randomness {\n        return new Randomness(rpc, POLYGON_POS_CONTRACT_ADDRESS, 137n)\n    }\n\n    static createFromChainId(rpc: Signer | Provider, chainId: BigNumberish): Randomness {\n        switch (chainId.toString().toLowerCase()) {\n            case \"314159\":\n            case \"314159n\":\n            case \"0x4cb2f\":\n                return Randomness.createFilecoinCalibnet(rpc)\n\n            case \"64630\":\n            case \"64630n\":\n            case \"0xfc76\":\n                return Randomness.createFurnace(rpc)\n\n            case \"84532\":\n            case \"84532n\":\n            case \"0x14a34\":\n                return Randomness.createBaseSepolia(rpc)\n\n            case \"137\":\n            case \"137n\":\n            case \"0x89\":\n                return Randomness.createPolygonPos(rpc)\n\n            default:\n                throw new Error(\"unsupported chainId :(\")\n        }\n    }\n\n    async requestRandomness(confirmations = 1, timeoutMs = this.defaultRequestTimeoutMs): Promise<RandomnessVerificationParameters> {\n        if (this.rpc.provider == null) {\n            throw Error(\"RPC requires a provider to request randomness\")\n        }\n\n        const receipt = await withTimeout(\n            this.contract.requestRandomness().then(tx => tx.wait(confirmations)),\n            timeoutMs\n        )\n        if (!receipt) {\n            throw Error(\"no receipt because confirmations were 0\")\n        }\n\n        const [requestID, nonce] = extractSingleLog(iface, receipt, this.contractAddress, iface.getEvent(\"RandomnessRequested\"))\n\n        return new Promise((resolve, reject) => {\n            // then we have to both check the past and listen to the future for emitted events\n            // lest we miss our fulfilled randomness. We set the listeners first... in case\n            // by some magic our request is fulfilled _between_ the lines\n            const successFilter = this.contract.filters.RandomnessCallbackSuccess(requestID)\n\n            // how many blocks we're willing to look back - don't really expect it to be more than 1\n            const blockLookBack = 3\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            let timeout: any = null\n\n            // cleanup to do once we've managed all the events\n            const cleanup = () => {\n                this.contract.off(successFilter)\n                clearTimeout(timeout)\n            }\n            const randomnessCallback = (result: RandomnessVerificationParameters) => {\n                resolve(result)\n                cleanup()\n            }\n            const randomnessListener = createRandomnessListener(nonce, randomnessCallback)\n            this.contract.once(successFilter, randomnessListener)\n\n            const randomnessFilter = createRandomnessLogListener(nonce, randomnessCallback)\n            this.contract.queryFilter(successFilter, -blockLookBack)\n                .then(randomnessFilter)\n                .catch(reject)\n\n            timeout = setTimeout(() => {\n                cleanup()\n                reject(new Error(\"timed out requesting randomness\"))\n            }, timeoutMs)\n        })\n    }\n\n    async verify(\n        parameters: RandomnessVerificationParameters,\n        config: RandomnessVerificationConfig = {shouldBlowUp: true}\n    ): Promise<boolean> {\n        const {randomness, signature, nonce} = parameters\n\n        const signatureBytes = getBytes(signature)\n        if (!equalBytes(getBytes(keccak256(signatureBytes)), getBytes(randomness))) {\n            throw Error(\"randomness did not match the signature provided\")\n        }\n\n        // we go through these hoops to give callers the option of using the boolean or\n        // using exceptions for control flow\n        let verifies = false\n        let errorDuringVerification = false\n        try {\n            const m = getBytes(keccak256(encodeParams([\"uint256\"], [nonce])))\n            verifies = bn254.verifyShortSignature(signatureBytes, m, this.pk, {DST: createBlsDst(this.chainId)})\n\n            // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        } catch (_) {\n            errorDuringVerification = true\n        }\n\n        if (verifies) {\n            return true\n        }\n        if (!config.shouldBlowUp) {\n            return false\n        }\n        if (!errorDuringVerification) {\n            throw Error(\"signature failed to verify\")\n        }\n        throw Error(\"error during signature verification: was your signature formatted correctly?\")\n    }\n}\n\nfunction createRandomnessListener(nonce: bigint, cb: (arg: RandomnessVerificationParameters) => void): TypedListener<TypedContractEvent> {\n    return (log: RandomnessCallbackSuccessEvent.Log) => {\n        const [requestID, randomness, signature] = log.args\n        cb({requestID, nonce, randomness, signature})\n    }\n}\n\nfunction createRandomnessLogListener(nonce: bigint, cb: (arg: RandomnessVerificationParameters) => void) {\n    return (logs: RandomnessCallbackSuccessEvent.Log[]) => {\n        if (logs.length === 0) {\n            return\n        }\n        if (!logs[0].args) {\n            console.error(\"got a log without args somehow...\")\n            return\n        }\n        const [requestID, randomness, signature] = logs[0].args\n        cb({requestID, randomness, signature, nonce})\n    }\n}\n", "/**\n * Hex, bytes and number utilities.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// 100 lines of code in the file are duplicated from noble-hashes (utils).\n// This is OK: `abstract` directory does not use noble-hashes.\n// User may opt-in into using different hashing library. This way, noble-hashes\n// won't be included into their bundle.\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nconst _2n = /* @__PURE__ */ BigInt(2);\nexport type Hex = Uint8Array | string; // hex strings are accepted for simplicity\nexport type PrivKey = Hex | bigint; // bigints are accepted to ease learning curve\nexport type CHash = {\n  (message: Uint8Array | string): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create(opts?: { dkLen?: number }): any; // For shake\n};\nexport type FHash = (message: Uint8Array | string) => Uint8Array;\n\nexport function isBytes(a: unknown): a is Uint8Array {\n  return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\nexport function abytes(item: unknown): void {\n  if (!isBytes(item)) throw new Error('Uint8Array expected');\n}\n\nexport function abool(title: string, value: boolean): void {\n  if (typeof value !== 'boolean') throw new Error(title + ' boolean expected, got ' + value);\n}\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 * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  abytes(bytes);\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\nexport function numberToHexUnpadded(num: number | bigint): string {\n  const hex = num.toString(16);\n  return hex.length & 1 ? '0' + hex : hex;\n}\n\nexport function hexToNumber(hex: string): bigint {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  return hex === '' ? _0n : BigInt('0x' + hex); // Big Endian\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 * @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  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// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes: Uint8Array): bigint {\n  return hexToNumber(bytesToHex(bytes));\n}\nexport function bytesToNumberLE(bytes: Uint8Array): bigint {\n  abytes(bytes);\n  return hexToNumber(bytesToHex(Uint8Array.from(bytes).reverse()));\n}\n\nexport function numberToBytesBE(n: number | bigint, len: number): Uint8Array {\n  return hexToBytes(n.toString(16).padStart(len * 2, '0'));\n}\nexport function numberToBytesLE(n: number | bigint, len: number): Uint8Array {\n  return numberToBytesBE(n, len).reverse();\n}\n// Unpadded, rarely used\nexport function numberToVarBytesBE(n: number | bigint): Uint8Array {\n  return hexToBytes(numberToHexUnpadded(n));\n}\n\n/**\n * Takes hex string or Uint8Array, converts to Uint8Array.\n * Validates output length.\n * Will throw error for other types.\n * @param title descriptive title for an error e.g. 'private key'\n * @param hex hex string or Uint8Array\n * @param expectedLength optional, will compare to result array's length\n * @returns\n */\nexport function ensureBytes(title: string, hex: Hex, expectedLength?: number): Uint8Array {\n  let res: Uint8Array;\n  if (typeof hex === 'string') {\n    try {\n      res = hexToBytes(hex);\n    } catch (e) {\n      throw new Error(title + ' must be hex string or Uint8Array, cause: ' + e);\n    }\n  } else if (isBytes(hex)) {\n    // Uint8Array.from() instead of hash.slice() because node.js Buffer\n    // is instance of Uint8Array, and its slice() creates **mutable** copy\n    res = Uint8Array.from(hex);\n  } else {\n    throw new Error(title + ' must be hex string or Uint8Array');\n  }\n  const len = res.length;\n  if (typeof expectedLength === 'number' && len !== expectedLength)\n    throw new Error(title + ' of length ' + expectedLength + ' expected, got ' + len);\n  return res;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\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\n// Compares 2 u8a-s in kinda constant time\nexport function equalBytes(a: Uint8Array, b: Uint8Array): boolean {\n  if (a.length !== b.length) return false;\n  let diff = 0;\n  for (let i = 0; i < a.length; i++) diff |= a[i] ^ b[i];\n  return diff === 0;\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([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// Is positive bigint\nconst isPosBig = (n: bigint) => typeof n === 'bigint' && _0n <= n;\n\nexport function inRange(n: bigint, min: bigint, max: bigint): boolean {\n  return isPosBig(n) && isPosBig(min) && isPosBig(max) && min <= n && n < max;\n}\n\n/**\n * Asserts min <= n < max. NOTE: It's < max and not <= max.\n * @example\n * aInRange('x', x, 1n, 256n); // would assume x is in (1n..255n)\n */\nexport function aInRange(title: string, n: bigint, min: bigint, max: bigint): void {\n  // Why min <= n < max and not a (min < n < max) OR b (min <= n <= max)?\n  // consider P=256n, min=0n, max=P\n  // - a for min=0 would require -1:          `inRange('x', x, -1n, P)`\n  // - b would commonly require subtraction:  `inRange('x', x, 0n, P - 1n)`\n  // - our way is the cleanest:               `inRange('x', x, 0n, P)\n  if (!inRange(n, min, max))\n    throw new Error('expected valid ' + title + ': ' + min + ' <= n < ' + max + ', got ' + n);\n}\n\n// Bit operations\n\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n */\nexport function bitLen(n: bigint): number {\n  let len;\n  for (len = 0; n > _0n; n >>= _1n, len += 1);\n  return len;\n}\n\n/**\n * Gets single bit at position.\n * NOTE: first bit position is 0 (same as arrays)\n * Same as `!!+Array.from(n.toString(2)).reverse()[pos]`\n */\nexport function bitGet(n: bigint, pos: number): bigint {\n  return (n >> BigInt(pos)) & _1n;\n}\n\n/**\n * Sets single bit at position.\n */\nexport function bitSet(n: bigint, pos: number, value: boolean): bigint {\n  return n | ((value ? _1n : _0n) << BigInt(pos));\n}\n\n/**\n * Calculate mask for N bits. Not using ** operator with bigints because of old engines.\n * Same as BigInt(`0b${Array(i).fill('1').join('')}`)\n */\nexport const bitMask = (n: number): bigint => (_2n << BigInt(n - 1)) - _1n;\n\n// DRBG\n\nconst u8n = (data?: any) => new Uint8Array(data); // creates Uint8Array\nconst u8fr = (arr: any) => Uint8Array.from(arr); // another shortcut\ntype Pred<T> = (v: Uint8Array) => T | undefined;\n/**\n * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n * @returns function that will call DRBG until 2nd arg returns something meaningful\n * @example\n *   const drbg = createHmacDRBG<Key>(32, 32, hmac);\n *   drbg(seed, bytesToKey); // bytesToKey must return Key or undefined\n */\nexport function createHmacDrbg<T>(\n  hashLen: number,\n  qByteLen: number,\n  hmacFn: (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array\n): (seed: Uint8Array, predicate: Pred<T>) => T {\n  if (typeof hashLen !== 'number' || hashLen < 2) throw new Error('hashLen must be a number');\n  if (typeof qByteLen !== 'number' || qByteLen < 2) throw new Error('qByteLen must be a number');\n  if (typeof hmacFn !== 'function') throw new Error('hmacFn must be a function');\n  // Step B, Step C: set hashLen to 8*ceil(hlen/8)\n  let v = u8n(hashLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n  let k = u8n(hashLen); // Steps B and C of RFC6979 3.2: set hashLen, in our case always same\n  let i = 0; // Iterations counter, will throw when over 1000\n  const reset = () => {\n    v.fill(1);\n    k.fill(0);\n    i = 0;\n  };\n  const h = (...b: Uint8Array[]) => hmacFn(k, v, ...b); // hmac(k)(v, ...values)\n  const reseed = (seed = u8n()) => {\n    // HMAC-DRBG reseed() function. Steps D-G\n    k = h(u8fr([0x00]), seed); // k = hmac(k || v || 0x00 || seed)\n    v = h(); // v = hmac(k || v)\n    if (seed.length === 0) return;\n    k = h(u8fr([0x01]), seed); // k = hmac(k || v || 0x01 || seed)\n    v = h(); // v = hmac(k || v)\n  };\n  const gen = () => {\n    // HMAC-DRBG generate() function\n    if (i++ >= 1000) throw new Error('drbg: tried 1000 values');\n    let len = 0;\n    const out: Uint8Array[] = [];\n    while (len < qByteLen) {\n      v = h();\n      const sl = v.slice();\n      out.push(sl);\n      len += v.length;\n    }\n    return concatBytes(...out);\n  };\n  const genUntil = (seed: Uint8Array, pred: Pred<T>): T => {\n    reset();\n    reseed(seed); // Steps D-G\n    let res: T | undefined = undefined; // Step H: grind until k is in [1..n-1]\n    while (!(res = pred(gen()))) reseed();\n    reset();\n    return res;\n  };\n  return genUntil;\n}\n\n// Validating curves and fields\n\nconst validatorFns = {\n  bigint: (val: any): boolean => typeof val === 'bigint',\n  function: (val: any): boolean => typeof val === 'function',\n  boolean: (val: any): boolean => typeof val === 'boolean',\n  string: (val: any): boolean => typeof val === 'string',\n  stringOrUint8Array: (val: any): boolean => typeof val === 'string' || isBytes(val),\n  isSafeInteger: (val: any): boolean => Number.isSafeInteger(val),\n  array: (val: any): boolean => Array.isArray(val),\n  field: (val: any, object: any): any => (object as any).Fp.isValid(val),\n  hash: (val: any): boolean => typeof val === 'function' && Number.isSafeInteger(val.outputLen),\n} as const;\ntype Validator = keyof typeof validatorFns;\ntype ValMap<T extends Record<string, any>> = { [K in keyof T]?: Validator };\n// type Record<K extends string | number | symbol, T> = { [P in K]: T; }\n\nexport function validateObject<T extends Record<string, any>>(\n  object: T,\n  validators: ValMap<T>,\n  optValidators: ValMap<T> = {}\n): T {\n  const checkField = (fieldName: keyof T, type: Validator, isOptional: boolean) => {\n    const checkVal = validatorFns[type];\n    if (typeof checkVal !== 'function') throw new Error('invalid validator function');\n\n    const val = object[fieldName as keyof typeof object];\n    if (isOptional && val === undefined) return;\n    if (!checkVal(val, object)) {\n      throw new Error(\n        'param ' + String(fieldName) + ' is invalid. Expected ' + type + ', got ' + val\n      );\n    }\n  };\n  for (const [fieldName, type] of Object.entries(validators)) checkField(fieldName, type!, false);\n  for (const [fieldName, type] of Object.entries(optValidators)) checkField(fieldName, type!, true);\n  return object;\n}\n// validate type tests\n// const o: { a: number; b: number; c: number } = { a: 1, b: 5, c: 6 };\n// const z0 = validateObject(o, { a: 'isSafeInteger' }, { c: 'bigint' }); // Ok!\n// // Should fail type-check\n// const z1 = validateObject(o, { a: 'tmp' }, { c: 'zz' });\n// const z2 = validateObject(o, { a: 'isSafeInteger' }, { c: 'zz' });\n// const z3 = validateObject(o, { test: 'boolean', z: 'bug' });\n// const z4 = validateObject(o, { a: 'boolean', z: 'bug' });\n\n/**\n * throws not implemented error\n */\nexport const notImplemented = (): never => {\n  throw new Error('not implemented');\n};\n\n/**\n * Memoizes (caches) computation result.\n * Uses WeakMap: the value is going auto-cleaned by GC after last reference is removed.\n */\nexport function memoized<T extends object, R, O extends any[]>(\n  fn: (arg: T, ...args: O) => R\n): (arg: T, ...args: O) => R {\n  const map = new WeakMap<T, R>();\n  return (arg: T, ...args: O): R => {\n    const val = map.get(arg);\n    if (val !== undefined) return val;\n    const computed = fn(arg, ...args);\n    map.set(arg, computed);\n    return computed;\n  };\n}\n", "// extracts an event log of a given type from a transaction receipt that matches the address provided\nimport {AbiCoder, EventFragment, Interface, ParamType, Result, TransactionReceipt} from \"ethers\"\n\nexport function extractLogs<T extends Interface, E extends EventFragment>(iface: T, receipt: TransactionReceipt, contractAddress: string, event: E): Array<Result> {\n    return receipt.logs\n        .filter(log => log.address.toLowerCase() === contractAddress.toLowerCase())\n        .map(log => iface.decodeEventLog(event, log.data, log.topics))\n}\n\n// returns the first instance of an event log from a transaction receipt that matches the address provided\nexport function extractSingleLog<T extends Interface, E extends EventFragment>(iface: T, receipt: TransactionReceipt, contractAddress: string, event: E): Result {\n    const events = extractLogs(iface, receipt, contractAddress, event)\n    if (events.length === 0) {\n        throw Error(`contract at ${contractAddress} didn't emit the ${event.name} event`)\n    }\n    return events[0]\n}\n\n\n// any because that's how naughty ethers wants it\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const encodeParams = (dataTypes: readonly ParamType[] | readonly string[], data: readonly any[]): string => {\n    const abiCoder = AbiCoder.defaultAbiCoder()\n    return abiCoder.encode(dataTypes, data)\n}\n", "export function withTimeout<T>(inner: Promise<T>, timeoutMs: number, message = \"timed out\"): Promise<T> {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    let timeout: any = null\n    return Promise.race([\n        inner,\n        new Promise<T>((_, reject) =>\n            timeout = setTimeout(() => reject(message), timeoutMs)\n        )\n    ]).finally(() => clearTimeout(timeout))\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type {\n  DeployAllContracts,\n  DeployAllContractsInterface,\n} from \"../../DeployAllContracts.s.sol/DeployAllContracts\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"IS_SCRIPT\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"deployAll\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"bn254SignatureScheme\",\n        type: \"address\",\n        internalType: \"contract BN254SignatureScheme\",\n      },\n      {\n        name: \"randomnessSenderInstance\",\n        type: \"address\",\n        internalType: \"contract RandomnessSender\",\n      },\n      {\n        name: \"signatureSchemeAddressProvider\",\n        type: \"address\",\n        internalType: \"contract SignatureSchemeAddressProvider\",\n      },\n      {\n        name: \"signatureSenderInstance\",\n        type: \"address\",\n        internalType: \"contract SignatureSender\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"run\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6080604052600c805462ff00ff191662010001179055348015601f575f5ffd5b5061d37d8061002d5f395ff3fe608060405234801561000f575f5ffd5b506004361061003f575f3560e01c80632d82333514610043578063c040622614610090578063f8ccbf471461009a575b5f5ffd5b61004b6100bd565b6040805173ffffffffffffffffffffffffffffffffffffffff958616815293851660208501529184169183019190915290911660608201526080015b60405180910390f35b6100986100f5565b005b600c546100ad9062010000900460ff1681565b6040519015158152602001610087565b5f808080806100ca610103565b92506100d4610512565b94506100e083826109d9565b91506100ec82826110d3565b93505090919293565b6100fd6100bd565b50505050565b5f5f60405180602001610115906126b9565b601f1982820381018352601f909101166040526101306117db565b6040805173ffffffffffffffffffffffffffffffffffffffff90921660208301520160408051601f19818403018152908290526101709291602001612754565b60405160208183030381529060405290507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156101e8575f5ffd5b505af11580156101fa573d5f5f3e3d5ffd5b50506040517f7ed1ec7d00000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5553455f52414e44414d555f464143544f52590000000000000000000000000060448201525f9250737109709ecfa91a80626ff3989d68f67f5b1dd12d9150637ed1ec7d90606401602060405180830381865afa158015610294573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b89190612770565b1561043c576040517f350d56bf00000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f52414e44414d555f435245415445325f464143544f52595f434f4e545241435460448201527f5f414444524553530000000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063350d56bf90608401602060405180830381865afa158015610377573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061039b9190612796565b6040517fcdcb760a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff919091169063cdcb760a906103f290601a9086906004016127f7565b6020604051808303815f875af115801561040e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104329190612796565b9050809250610493565b601a6104466117db565b604051610452906126b9565b73ffffffffffffffffffffffffffffffffffffffff90911681526020018190604051809103905ff590508015801561048c573d5f5f3e3d5ffd5b5092508290505b6104eb6040518060400160405280601581526020017f4465706c6f796d656e745f696e7075742e6a736f6e000000000000000000000081525060405180606001604052806025815260200161d2ee602591398361192b565b61050d60405180606001604052806035815260200161d24f6035913982611a6c565b505090565b5f5f60405180602001610524906126c6565b6020820181038252601f19601f8201166040525090507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156105a1575f5ffd5b505af11580156105b3573d5f5f3e3d5ffd5b50506040517f7ed1ec7d00000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5553455f52414e44414d555f464143544f5259000000000000000000000000006044820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9250637ed1ec7d9150606401602060405180830381865afa15801561064b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061066f9190612770565b156107f4576040517f350d56bf00000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f52414e44414d555f435245415445325f464143544f52595f434f4e545241435460448201527f5f4144445245535300000000000000000000000000000000000000000000000060648201525f90737109709ecfa91a80626ff3989d68f67f5b1dd12d9063350d56bf90608401602060405180830381865afa158015610730573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107549190612796565b6040517fcdcb760a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff919091169063cdcb760a906107ab90601a9086906004016127f7565b6020604051808303815f875af11580156107c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107eb9190612796565b92506108249050565b604051601a90610803906126c6565b8190604051809103905ff5905080158015610820573d5f5f3e3d5ffd5b5091505b6108466040518060600160405280602b815260200161d224602b913983611a6c565b5f61089e6040518060400160405280601581526020017f4465706c6f796d656e745f696e7075742e6a736f6e000000000000000000000081525060405180606001604052806025815260200161d2ee60259139611ae3565b90505f8190507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561090b575f5ffd5b505af115801561091d573d5f5f3e3d5ffd5b5050604080518082018252600581527f424e323534000000000000000000000000000000000000000000000000000000602082015290517fbab867da00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516935063bab867da92506109a69190889060040161280f565b5f604051808303815f87803b1580156109bd575f5ffd5b505af11580156109cf573d5f5f3e3d5ffd5b5050505050505090565b5f5f6109e3611c43565b90508215610b94577f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610a52575f5ffd5b505af1158015610a64573d5f5f3e3d5ffd5b505050505f610add6040518060400160405280601581526020017f4465706c6f796d656e745f696e7075742e6a736f6e00000000000000000000008152506040518060400160405280601b81526020017f7369676e617475726553656e64657250726f7879416464726573730000000000815250611ae3565b604080517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201929092525f6044820152919250821690634f1ef286906064015f604051808303815f87803b158015610b55575f5ffd5b505af1158015610b67573d5f5f3e3d5ffd5b50505050610b8d6040518060600160405280603c815260200161d1b2603c913983611a6c565b91506110cc565b5f60405180602001610ba5906126d3565b601f1982820381018352601f90910116604081815273ffffffffffffffffffffffffffffffffffffffff85166020830152808201525f606082015260800160408051601f1981840301815290829052610c019291602001612754565b60405160208183030381529060405290507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610c79575f5ffd5b505af1158015610c8b573d5f5f3e3d5ffd5b50506040517f7ed1ec7d00000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5553455f52414e44414d555f464143544f52590000000000000000000000000060448201525f9250737109709ecfa91a80626ff3989d68f67f5b1dd12d9150637ed1ec7d90606401602060405180830381865afa158015610d25573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d499190612770565b15610ecd576040517f350d56bf00000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f52414e44414d555f435245415445325f464143544f52595f434f4e545241435460448201527f5f414444524553530000000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063350d56bf90608401602060405180830381865afa158015610e08573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e2c9190612796565b6040517fcdcb760a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff919091169063cdcb760a90610e8390601a9086906004016127f7565b6020604051808303815f875af1158015610e9f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ec39190612796565b9050809350610f2f565b5f601a5f1b84604051610edf906126d3565b73ffffffffffffffffffffffffffffffffffffffff90911681526040602082018190525f908201526060018190604051809103905ff5905080158015610f27573d5f5f3e3d5ffd5b509450849150505b610fa46040518060400160405280601581526020017f4465706c6f796d656e745f696e7075742e6a736f6e00000000000000000000008152506040518060400160405280601b81526020017f7369676e617475726553656e64657250726f78794164647265737300000000008152508361192b565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561100b575f5ffd5b505af115801561101d573d5f5f3e3d5ffd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663702ef38c611045611f7a565b5161104e611f7a565b6020015161105a6117db565b8a6040518563ffffffff1660e01b815260040161107a9493929190612868565b5f604051808303815f87803b158015611091575f5ffd5b505af11580156110a3573d5f5f3e3d5ffd5b505050506110c96040518060600160405280602c815260200161d186602c913982611a6c565b50505b5092915050565b5f5f6110dd61229b565b90508215611287577f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561114c575f5ffd5b505af115801561115e573d5f5f3e3d5ffd5b505050505f6111d76040518060400160405280601581526020017f4465706c6f796d656e745f696e7075742e6a736f6e00000000000000000000008152506040518060400160405280601c81526020017f72616e646f6d6e65737353656e64657250726f78794164647265737300000000815250611ae3565b604080517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201929092525f6044820152919250821690634f1ef286906064015f604051808303815f87803b15801561124f575f5ffd5b505af1158015611261573d5f5f3e3d5ffd5b50505050610b8d6040518060600160405280603d815260200161d284603d913983611a6c565b5f60405180602001611298906126d3565b601f1982820381018352601f90910116604081815273ffffffffffffffffffffffffffffffffffffffff85166020830152808201525f606082015260800160408051601f19818403018152908290526112f49291602001612754565b60405160208183030381529060405290507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561136c575f5ffd5b505af115801561137e573d5f5f3e3d5ffd5b50506040517f7ed1ec7d00000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5553455f52414e44414d555f464143544f52590000000000000000000000000060448201525f9250737109709ecfa91a80626ff3989d68f67f5b1dd12d9150637ed1ec7d90606401602060405180830381865afa158015611418573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143c9190612770565b156115c0576040517f350d56bf00000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f52414e44414d555f435245415445325f464143544f52595f434f4e545241435460448201527f5f414444524553530000000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063350d56bf90608401602060405180830381865afa1580156114fb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061151f9190612796565b6040517fcdcb760a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff919091169063cdcb760a9061157690601a9086906004016127f7565b6020604051808303815f875af1158015611592573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115b69190612796565b9050809350611622565b5f601a5f1b846040516115d2906126d3565b73ffffffffffffffffffffffffffffffffffffffff90911681526040602082018190525f908201526060018190604051809103905ff590508015801561161a573d5f5f3e3d5ffd5b509450849150505b6116976040518060400160405280601581526020017f4465706c6f796d656e745f696e7075742e6a736f6e00000000000000000000008152506040518060400160405280601c81526020017f72616e646f6d6e65737353656e64657250726f787941646472657373000000008152508361192b565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156116fe575f5ffd5b505af1158015611710573d5f5f3e3d5ffd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663485cc955876117396117db565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff9283166004820152911660248201526044015f604051808303815f87803b1580156117a3575f5ffd5b505af11580156117b5573d5f5f3e3d5ffd5b505050506110c96040518060600160405280602d815260200161d2c1602d913982611a6c565b6040517fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f505249564154455f4b455900000000000000000000000000000000000000000060448201525f908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c1978d1f90606401602060405180830381865afa158015611873573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061189791906128c4565b6040517fffa1864900000000000000000000000000000000000000000000000000000000815260048101829052909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa158015611901573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119259190612796565b91505090565b604080518082018252601a81527f6465706c6f796d656e742061646472657373657320696e707574000000000000602082015290517f972c60620000000000000000000000000000000000000000000000000000000081525f90737109709ecfa91a80626ff3989d68f67f5b1dd12d9063972c6062906119b3908590889088906004016128db565b5f604051808303815f875af11580156119ce573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119f59190810190612953565b9050737109709ecfa91a80626ff3989d68f67f5b1dd12d63e23cd19f82611a1b886125ce565b6040518363ffffffff1660e01b8152600401611a38929190612a07565b5f604051808303815f87803b158015611a4f575f5ffd5b505af1158015611a61573d5f5f3e3d5ffd5b505050505050505050565b611adf8282604051602401611a8292919061280f565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f319af3330000000000000000000000000000000000000000000000000000000017905261268e565b5050565b5f5f611aee846125ce565b6040517f60f9bb110000000000000000000000000000000000000000000000000000000081529091505f90737109709ecfa91a80626ff3989d68f67f5b1dd12d906360f9bb1190611b43908590600401612a34565b5f60405180830381865afa158015611b5d573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b849190810190612953565b90505f84604051602001611b989190612a46565b60408051601f19818403018152908290527f1e19e6570000000000000000000000000000000000000000000000000000000082529150737109709ecfa91a80626ff3989d68f67f5b1dd12d90631e19e65790611bfa9085908590600401612a07565b602060405180830381865afa158015611c15573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c399190612796565b9695505050505050565b5f5f60405180602001611c55906126e0565b6020820181038252601f19601f8201166040525090507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611cd2575f5ffd5b505af1158015611ce4573d5f5f3e3d5ffd5b50506040517f7ed1ec7d00000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5553455f52414e44414d555f464143544f5259000000000000000000000000006044820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9250637ed1ec7d9150606401602060405180830381865afa158015611d7c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da09190612770565b15611f21576040517f350d56bf00000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f52414e44414d555f435245415445325f464143544f52595f434f4e545241435460448201527f5f414444524553530000000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063350d56bf90608401602060405180830381865afa158015611e5f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e839190612796565b6040517fcdcb760a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff919091169063cdcb760a90611eda90601a9085906004016127f7565b6020604051808303815f875af1158015611ef6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f1a9190612796565b9150611f54565b5f601a5f1b604051611f32906126e0565b8190604051809103905ff5905080158015611f4f573d5f5f3e3d5ffd5b509250505b611f7660405180606001604052806035815260200161d3136035913983611a6c565b5090565b611f826126ed565b60408051608081018083527fc1978d1f00000000000000000000000000000000000000000000000000000000905260206084820152601160a48201527f424c535f5055424c49435f4b45595f583000000000000000000000000000000060c4820152908190810180737109709ecfa91a80626ff3989d68f67f5b1dd12d63c1978d1f60e48501602060405180830381865afa158015612023573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061204791906128c4565b81526040517fc1978d1f000000000000000000000000000000000000000000000000000000008152602060048201819052601160248301527f424c535f5055424c49435f4b45595f5831000000000000000000000000000000604483015290910190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c1978d1f90606401602060405180830381865afa1580156120e3573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061210791906128c4565b9052815260408051808201918290527fc1978d1f00000000000000000000000000000000000000000000000000000000909152602060448201819052601160648301527f424c535f5055424c49435f4b45595f593000000000000000000000000000000060848301529091019080737109709ecfa91a80626ff3989d68f67f5b1dd12d63c1978d1f60a48301602060405180830381865afa1580156121ae573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121d291906128c4565b81526040517fc1978d1f000000000000000000000000000000000000000000000000000000008152602060048201819052601160248301527f424c535f5055424c49435f4b45595f5931000000000000000000000000000000604483015290910190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c1978d1f90606401602060405180830381865afa15801561226e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061229291906128c4565b90529052919050565b5f5f604051806020016122ad90612712565b6020820181038252601f19601f8201166040525090507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561232a575f5ffd5b505af115801561233c573d5f5f3e3d5ffd5b50506040517f7ed1ec7d00000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5553455f52414e44414d555f464143544f5259000000000000000000000000006044820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9250637ed1ec7d9150606401602060405180830381865afa1580156123d4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123f89190612770565b15612579576040517f350d56bf00000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f52414e44414d555f435245415445325f464143544f52595f434f4e545241435460448201527f5f414444524553530000000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063350d56bf90608401602060405180830381865afa1580156124b7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124db9190612796565b6040517fcdcb760a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff919091169063cdcb760a9061253290601a9085906004016127f7565b6020604051808303815f875af115801561254e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125729190612796565b91506125ac565b5f601a5f1b60405161258a90612712565b8190604051809103905ff59050801580156125a7573d5f5f3e3d5ffd5b509250505b611f7660405180606001604052806036815260200161d1ee6036913983611a6c565b60605f7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663d930a0e66040518163ffffffff1660e01b81526004015f60405180830381865afa15801561263b573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526126629190810190612953565b90508083604051602001612677929190612a77565b604051602081830303815290604052915050919050565b6126978161269a565b50565b5f6a636f6e736f6c652e6c6f6790505f5f835160208501845afa505050565b610bda80612ab383390190565b6129d58061368d83390190565b6104468061606283390190565b61468b806164a883390190565b604051806040016040528061270061271f565b815260200161270d61271f565b905290565b6126538061ab3383390190565b60405180604001604052806002906020820280368337509192915050565b5f81518060208401855e5f93019283525090919050565b5f612768612762838661273d565b8461273d565b949350505050565b5f60208284031215612780575f5ffd5b8151801515811461278f575f5ffd5b9392505050565b5f602082840312156127a6575f5ffd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461278f575f5ffd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b828152604060208201525f61276860408301846127c9565b604081525f61282160408301856127c9565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b805f5b60028110156100fd578151845260209384019390910190600101612849565b60c081016128768287612846565b6128836040830186612846565b73ffffffffffffffffffffffffffffffffffffffff8416608083015273ffffffffffffffffffffffffffffffffffffffff831660a083015295945050505050565b5f602082840312156128d4575f5ffd5b5051919050565b606081525f6128ed60608301866127c9565b82810360208401526128ff81866127c9565b91505073ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60208284031215612963575f5ffd5b815167ffffffffffffffff811115612979575f5ffd5b8201601f81018413612989575f5ffd5b805167ffffffffffffffff8111156129a3576129a3612926565b604051601f19603f601f19601f8501160116810181811067ffffffffffffffff821117156129d3576129d3612926565b6040528181528282016020018610156129ea575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b604081525f612a1960408301856127c9565b8281036020840152612a2b81856127c9565b95945050505050565b602081525f61278f60208301846127c9565b7f2e0000000000000000000000000000000000000000000000000000000000000081525f61278f600183018461273d565b5f612a82828561273d565b7f2f7363726970742f6a736f6e2f000000000000000000000000000000000000008152612a2b600d82018561273d56fe608060405234801561000f575f5ffd5b50604051610bda380380610bda83398101604081905261002e916101a7565b6001600160a01b03811661003f5750335b6100495f826100fe565b61008e5760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b60448201526064015b60405180910390fd5b6100b87fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775826100fe565b6100f85760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b6044820152606401610085565b506101d4565b5f828152602081815260408083206001600160a01b038516845290915281205460ff1661019e575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101563390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101a1565b505f5b92915050565b5f602082840312156101b7575f5ffd5b81516001600160a01b03811681146101cd575f5ffd5b9392505050565b6109f9806101e15f395ff3fe608060405234801561000f575f5ffd5b50600436106100c4575f3560e01c80635bb09cf81161007d578063a217fddf11610058578063a217fddf146101fd578063bab867da14610204578063d547741f14610217575f5ffd5b80635bb09cf81461015b57806375b238fc1461019357806391d14854146101ba575f5ffd5b80632f2ff15d116100ad5780632f2ff15d146101205780632fc9fa331461013557806336568abe14610148575f5ffd5b806301ffc9a7146100c8578063248a9ca3146100f0575b5f5ffd5b6100db6100d6366004610831565b61022a565b60405190151581526020015b60405180910390f35b6101126100fe366004610877565b5f9081526020819052604090206001015490565b6040519081526020016100e7565b61013361012e3660046108b6565b6102c2565b005b6100db610143366004610925565b6102ec565b6101336101563660046108b6565b610346565b61016e610169366004610925565b6103a4565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100e7565b6101127fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b6100db6101c83660046108b6565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101125f81565b610133610212366004610964565b6103e5565b6101336102253660046108b6565b6105c5565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102bc57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f828152602081905260409020600101546102dc816105e9565b6102e683836105f6565b50505050565b5f5f73ffffffffffffffffffffffffffffffffffffffff16600184846040516103169291906109b4565b9081526040519081900360200190205473ffffffffffffffffffffffffffffffffffffffff161415905092915050565b73ffffffffffffffffffffffffffffffffffffffff81163314610395576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61039f82826106ef565b505050565b5f600183836040516103b79291906109b4565b9081526040519081900360200190205473ffffffffffffffffffffffffffffffffffffffff16905092915050565b61040e7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756105e9565b73ffffffffffffffffffffffffffffffffffffffff811615801590610449575073ffffffffffffffffffffffffffffffffffffffff81163b15155b6104da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f496e76616c696420636f6e7472616374206164647265737320666f722073636860448201527f656d65416464726573730000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b80600184846040516104ed9291906109b4565b908152604051908190036020018120805473ffffffffffffffffffffffffffffffffffffffff939093167fffffffffffffffffffffffff00000000000000000000000000000000000000009093169290921790915560019061055290859085906109b4565b9081526040519081900360200181205473ffffffffffffffffffffffffffffffffffffffff169061058690859085906109b4565b604051908190038120428252907f0a1cd6a1e0a7b200d28ead555f3cee96e0d2def049535fbcfdc2926bc4cec5049060200160405180910390a3505050565b5f828152602081905260409020600101546105df816105e9565b6102e683836106ef565b6105f381336107a8565b50565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff166106e8575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556106863390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102bc565b505f6102bc565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16156106e8575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102bc565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661082d576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044016104d1565b5050565b5f60208284031215610841575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610870575f5ffd5b9392505050565b5f60208284031215610887575f5ffd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146108b1575f5ffd5b919050565b5f5f604083850312156108c7575f5ffd5b823591506108d76020840161088e565b90509250929050565b5f5f83601f8401126108f0575f5ffd5b50813567ffffffffffffffff811115610907575f5ffd5b60208301915083602082850101111561091e575f5ffd5b9250929050565b5f5f60208385031215610936575f5ffd5b823567ffffffffffffffff81111561094c575f5ffd5b610958858286016108e0565b90969095509350505050565b5f5f5f60408486031215610976575f5ffd5b833567ffffffffffffffff81111561098c575f5ffd5b610998868287016108e0565b90945092506109ab90506020850161088e565b90509250925092565b818382375f910190815291905056fea26469706673582212204365ebfe0316198161211e6648f602ef30b54b8310b64cd331285d5e76802ca464736f6c634300081c0033608060405234801561000f575f5ffd5b506100194661004b565b6040516020016100299190610212565b6040516020818303038152906040525f90816100459190610318565b5061042a565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015281516042808252608082019093526060925f9190602082018180368337019050509050600360fc1b815f815181106100ab576100ab6103d2565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106100d9576100d96103d2565b60200101906001600160f81b03191690815f1a9053505f5b602081101561020a5782600486836020811061010f5761010f6103d2565b1a60f81b6001600160f81b031916901c60f81c60ff1681518110610135576101356103d2565b01602001516001600160f81b031916826101508360026103fa565b61015b906002610417565b8151811061016b5761016b6103d2565b60200101906001600160f81b03191690815f1a90535082858260208110610194576101946103d2565b825191901a600f169081106101ab576101ab6103d2565b01602001516001600160f81b031916826101c68360026103fa565b6101d1906002610417565b6101dc906001610417565b815181106101ec576101ec6103d2565b60200101906001600160f81b03191690815f1a9053506001016100f1565b509392505050565b7f646369706865722d72616e646f6d6e6573732d7630312d424e32353447315f5881527f4d443a4b454343414b2d3235365f535644575f524f5f0000000000000000000060208201525f82518060208501603685015e605f60f81b6036939091019283015250603701919050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806102a857607f821691505b6020821081036102c657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561031357805f5260205f20601f840160051c810160208510156102f15750805b601f840160051c820191505b81811015610310575f81556001016102fd565b50505b505050565b81516001600160401b0381111561033157610331610280565b6103458161033f8454610294565b846102cc565b6020601f821160018114610377575f83156103605750848201515b5f19600385901b1c1916600184901b178455610310565b5f84815260208120601f198516915b828110156103a65787850151825560209485019460019092019101610386565b50848210156103c357868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610411576104116103e6565b92915050565b80820180821115610411576104116103e6565b61259e806104375f395ff3fe608060405234801561000f575f5ffd5b506004361061006f575f3560e01c80638a1f165a1161004d5780638a1f165a146100c3578063eae1e15b146100ff578063f6e548e914610112575f5ffd5b80633033cc51146100735780633408e470146100a05780635f7c7522146100ae575b5f5ffd5b610086610081366004612188565b610135565b604080519283526020830191909152015b60405180910390f35b604051468152602001610097565b6100b6610214565b6040516100979190612213565b6100b66040518060400160405280600581526020017f424e32353400000000000000000000000000000000000000000000000000000081525081565b6100b661010d366004612188565b61029f565b61012561012036600461222c565b6102d9565b6040519015158152602001610097565b5f5f5f6101fe5f8054610147906122cb565b80601f0160208091040260200160405190810160405280929190818152602001828054610173906122cb565b80156101be5780601f10610195576101008083540402835291602001916101be565b820191905f5260205f20905b8154815290600101906020018083116101a157829003601f168201915b505050505086868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506103c892505050565b80516020909101519093509150505b9250929050565b5f8054610220906122cb565b80601f016020809104026020016040519081016040528092919081815260200182805461024c906122cb565b80156102975780601f1061026e57610100808354040283529160200191610297565b820191905f5260205f20905b81548152906001019060200180831161027a57829003601f168201915b505050505081565b60605f5f6102ad8585610135565b915091506102ce6040518060400160405280848152602001838152506104ad565b925050505b92915050565b5f5f61031988888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506104e692505050565b90505f61035a87878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506104e692505050565b90505f61039b86868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061058392505050565b90505f5f6103aa84848761063e565b915091508180156103b85750805b9c9b505050505050505050505050565b604080518082019091525f80825260208201525f6103e684846107b1565b90505f6103f982825b60200201516108fc565b90505f6104078360016103ef565b90506104116120cb565b825181526020808401518282015282516040808401919091529083015160608301525f908460808460066107d05a03fa90508061048557816040517f128e3f0800000000000000000000000000000000000000000000000000000000815260040161047c9190612349565b60405180910390fd5b6040805180820190915284518152602081018560016020020151905298975050505050505050565b6040805181815260608181018352915f919060208201818036833750508451602095860151958301525060408101939093525090919050565b604080518082019091525f80825260208201528151604014610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c6964204731206279746573206c656e677468000000000000000000604482015260640161047c565b5060208181015160409283015183518085019094529083529082015290565b61058b6120e9565b81516080146105f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c6964204732206279746573206c656e677468000000000000000000604482015260640161047c565b50602081810151604080840151606080860151608096870151845197880185528785019586529187019290925292855281518083019092528152808301919091529082015290565b5f5f5f604051806101800160405280875f01518152602001876020015181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec81526020017f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d8152602001855f0151815260200185602001518152602001865f01516001600281106107215761072161231c565b60200201518152602001865f01515f600281106107405761074061231c565b6020020151815260200186602001516001600281106107615761076161231c565b6020020151815260200186602001515f600281106107815761078161231c565b60200201519052905061079261210e565b6020816101808460086107d05a03fa9051151597909650945050505050565b6107b961212c565b5f6107c48484610da4565b90505f5f5f5f6018850177ffffffffffffffffffffffffffffffffffffffffffffffff815116935060308601905077ffffffffffffffffffffffffffffffffffffffffffffffff81511694507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47857f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4778010000000000000000000000000000000000000000000000008709086048870151606088015177ffffffffffffffffffffffffffffffffffffffffffffffff908116975016945092507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47905084817801000000000000000000000000000000000000000000000000860908604080518082019091529283526020830152509695505050505050565b61090461212c565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478210610960576040517fd53e94150000000000000000000000000000000000000000000000000000000081526004810183905260240161047c565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760047f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478586090990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478260010890507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47610a1e837f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476123a6565b60010891505f610a507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47838509610f8e565b90505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4778016789af3a83522eb353c98fc6b36d713d5d8d1cc5dffffffa7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47847f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47888b09090990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47610b24837f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476123a6565b7f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea30890505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47837f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea30890505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4786870990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4786830990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47807f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478485097f10216f7ba065e00de81ac1e7808072c9dd2b2385cd7b438469602eb24829a9bd0960010890505f5f610c5e610c5988610f98565b61100a565b5f0b600103610cc757868c52610c7387610f98565b9050610c7e816110ba565b60208e0191909152915081610cc2576040517f396ec7710000000000000000000000000000000000000000000000000000000081526004810182905260240161047c565b610d43565b610cd3610c5987610f98565b5f0b600103610ce857858c52610c7386610f98565b828c52610cf483610f98565b9050610cff816110ba565b60208e0191909152915081610d43576040517f396ec7710000000000000000000000000000000000000000000000000000000081526004810182905260240161047c565b60208c0151610d51906110f4565b610d5a8e6110f4565b14610d945760208c0151610d8e907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476123a6565b60208d01525b5050505050505050505050919050565b815160609060ff811115610de657836040517f26e4f9ba00000000000000000000000000000000000000000000000000000000815260040161047c9190612213565b60408051608880825260c082019092525f916020820181803683370190505090505f81855f60605f8a88604051602001610e2697969594939291906123d0565b60405160208183030381529060405290505f818051906020012090505f8160018987604051602001610e5b94939291906124ab565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815282825280516020820120606080855260808501909352909350915f91602082018180368337019050509050600360015b81811015610f5257858418610ecc82600161251d565b8d8b604051602001610ee194939291906124ab565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830181028501810195909552805194810194909420939450600101610eb6565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016020908102820101919091529550505050505092915050565b5f6102d382611100565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760037f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47847f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47868709090892915050565b5f5f61101583611858565b905061104260017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476123a6565b810361107057507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92915050565b8015801590611080575080600114155b156102d3576040517f396ec7710000000000000000000000000000000000000000000000000000000081526004810184905260240161047c565b5f5f6110c583611985565b9150827f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47838409149050915091565b5f6102d3600283612530565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996505050838586099450838586099450838586099450838586099450838186099450508284850993508284850993508284850993508281850993508284850993508284850993508285850993508284850993508284850993508284850993508284850993508284850993508284850993508281850995945050505050565b6040805160c080825260e082019092525f918291906020820181803683370190505060208082018181526040830182905260608301829052608083018690527f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea360a08401527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760c0808501919091529293505f92839160055afa90505f5192508061197e576040517fc6daf7ab000000000000000000000000000000000000000000000000000000008152600481018590527f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea360248201527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47604482015260640161047c565b5050919050565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508584880996508587880996508587880996508587880996508587880996508587880996508581880996505050505050808283099392505050565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806120fc61212c565b815260200161210961212c565b905290565b60405180602001604052806001906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b5f5f83601f84011261215a575f5ffd5b50813567ffffffffffffffff811115612171575f5ffd5b60208301915083602082850101111561020d575f5ffd5b5f5f60208385031215612199575f5ffd5b823567ffffffffffffffff8111156121af575f5ffd5b6121bb8582860161214a565b90969095509350505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f61222560208301846121c7565b9392505050565b5f5f5f5f5f5f60608789031215612241575f5ffd5b863567ffffffffffffffff811115612257575f5ffd5b61226389828a0161214a565b909750955050602087013567ffffffffffffffff811115612282575f5ffd5b61228e89828a0161214a565b909550935050604087013567ffffffffffffffff8111156122ad575f5ffd5b6122b989828a0161214a565b979a9699509497509295939492505050565b600181811c908216806122df57607f821691505b602082108103612316577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6080810181835f5b6004811015612370578151835260209283019290910190600101612351565b50505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818103818111156102d3576102d3612379565b5f81518060208401855e5f93019283525090919050565b5f6123e46123de838b6123b9565b896123b9565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b1681527fff000000000000000000000000000000000000000000000000000000000000008760f81b1660018201527fff000000000000000000000000000000000000000000000000000000000000008660f81b16600282015261246f60038201866123b9565b60f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016845250506001909101979650505050505050565b8481527fff000000000000000000000000000000000000000000000000000000000000008460f81b1660208201525f6124e760218301856123b9565b60f89390931b7fff0000000000000000000000000000000000000000000000000000000000000016835250506001019392505050565b808201808211156102d3576102d3612379565b5f82612563577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b50069056fea26469706673582212206df3649d590cafccfd4873076b90bc107f722eecb7166da8e6c43928f9acbc4d64736f6c634300081c0033608060405234801561000f575f5ffd5b5060405161044638038061044683398101604081905261002e9161024c565b818161003a8282610043565b50505050610331565b61004c826100a1565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561009557610090828261011c565b505050565b61009d61018f565b5050565b806001600160a01b03163b5f036100db57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051610138919061031b565b5f60405180830381855af49150503d805f8114610170576040519150601f19603f3d011682016040523d82523d5f602084013e610175565b606091505b5090925090506101868583836101b0565b95945050505050565b34156101ae5760405163b398979f60e01b815260040160405180910390fd5b565b6060826101c5576101c08261020f565b610208565b81511580156101dc57506001600160a01b0384163b155b1561020557604051639996b31560e01b81526001600160a01b03851660048201526024016100d2565b50805b9392505050565b80511561021f5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561025d575f5ffd5b82516001600160a01b0381168114610273575f5ffd5b60208401519092506001600160401b0381111561028e575f5ffd5b8301601f8101851361029e575f5ffd5b80516001600160401b038111156102b7576102b7610238565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102e5576102e5610238565b6040528181528282016020018710156102fc575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b6101088061033e5f395ff3fe608060405260043610601b575f3560e01c8063aaf10f42146023575b6021605d565b005b348015602d575f5ffd5b506034606b565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b606960656077565b60b5565b565b5f60726077565b905090565b5f60727f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b365f5f375f5f365f845af43d5f5f3e80801560ce573d5ff35b3d5ffdfea26469706673582212203a14936dfa35a4f93d2dbb66496c5b5d61ba92112a94605bb4b8c917080600b764736f6c634300081c0033306080525f80805560e081815261010082905260a08181526101606040526101208381526101409390935260c0929092526001906100409082906002610124565b5060208201516100569060028084019190610124565b505050348015610064575f5ffd5b5061006d610072565b610176565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100c25760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101215780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b8260028101928215610152579160200282015b82811115610152578251825591602001919060010190610137565b5061015e929150610162565b5090565b5b8082111561015e575f8155600101610163565b6080516144ef61019c5f395f8181612b7101528181612b9a0152612dbb01526144ef5ff3fe6080604052600436106101f5575f3560e01c806375b238fc11610117578063acae9fee116100ac578063ca15c8731161007c578063d547741f11610062578063d547741f146106c0578063e63b5d58146106df578063e6b3ca71146106f3575f5ffd5b8063ca15c87314610682578063cd802c91146106a1575f5ffd5b8063acae9fee146105db578063ad3cb1cc146105ef578063b094728914610637578063c58343ef14610656575f5ffd5b806395b8d073116100e757806395b8d07314610551578063a217fddf14610570578063a3246ad314610583578063ac9650d8146105af575f5ffd5b806375b238fc1461043857806381d12c581461046b5780639010d07c1461049d57806391d14854146104e1575f5ffd5b80634b96e1661161018d578063571d70871161015d578063571d7087146103d25780635eab2b20146103e65780636f421ea914610405578063702ef38c14610419575f5ffd5b80634b96e1661461033c5780634f1ef2861461035d57806352d1902d1461037057806354fd4d5014610384575f5ffd5b80632e334452116101c85780632e334452146102c85780632f2ff15d146102ea57806336568abe1461030957806347c0318614610328575f5ffd5b80630138c60d146101f957806301ffc9a71461021a57806316cc9a981461024e578063248a9ca31461026d575b5f5ffd5b348015610204575f5ffd5b506102186102133660046137bd565b61071f565b005b348015610225575f5ffd5b506102396102343660046137d4565b610c74565b60405190151581526020015b60405180910390f35b348015610259575f5ffd5b50610218610268366004613834565b610ccf565b348015610278575f5ffd5b506102ba6102873660046137bd565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610245565b3480156102d3575f5ffd5b506102dc610d66565b604051610245929190613871565b3480156102f5575f5ffd5b5061021861030436600461388c565b610de1565b348015610314575f5ffd5b5061021861032336600461388c565b610e2a565b348015610333575f5ffd5b506102ba5f5481565b348015610347575f5ffd5b50610350610e83565b60405161024591906138ba565b61021861036b366004613981565b610e94565b34801561037b575f5ffd5b506102ba610eb3565b34801561038f575f5ffd5b5060408051808201909152600581527f302e302e3100000000000000000000000000000000000000000000000000000060208201525b6040516102459190613a3c565b3480156103dd575f5ffd5b50610350610ee1565b3480156103f1575f5ffd5b50610218610400366004613a93565b610eed565b348015610410575f5ffd5b5061035061163b565b348015610424575f5ffd5b50610218610433366004613b48565b611647565b348015610443575f5ffd5b506102ba7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b348015610476575f5ffd5b5061048a6104853660046137bd565b6119ee565b6040516102459796959493929190613b9f565b3480156104a8575f5ffd5b506104bc6104b7366004613c32565b611ce4565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610245565b3480156104ec575f5ffd5b506102396104fb36600461388c565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b34801561055c575f5ffd5b506102ba61056b366004613c52565b611d24565b34801561057b575f5ffd5b506102ba5f81565b34801561058e575f5ffd5b506105a261059d3660046137bd565b612429565b6040516102459190613cf1565b3480156105ba575f5ffd5b506105ce6105c9366004613d3e565b61246c565b6040516102459190613daf565b3480156105e6575f5ffd5b506103c5612552565b3480156105fa575f5ffd5b506103c56040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b348015610642575f5ffd5b506102396106513660046137bd565b6125cd565b348015610661575f5ffd5b506106756106703660046137bd565b6125d9565b6040516102459190613e30565b34801561068d575f5ffd5b506102ba61069c3660046137bd565b612951565b3480156106ac575f5ffd5b506102396106bb3660046137bd565b612988565b3480156106cb575f5ffd5b506102186106da36600461388c565b6129a5565b3480156106ea575f5ffd5b506102ba6129e8565b3480156106fe575f5ffd5b506006546104bc9073ffffffffffffffffffffffffffffffffffffffff1681565b610728816125cd565b6107b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4e6f20726571756573742077697468207370656369666965642072657175657360448201527f74494420686173206572726f726564000000000000000000000000000000000060648201526084015b60405180910390fd5b5f81815260056020526040808220815160e081019092528054829082906107df90613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461080b90613f01565b80156108565780601f1061082d57610100808354040283529160200191610856565b820191905f5260205f20905b81548152906001019060200180831161083957829003601f168201915b5050505050815260200160018201805461086f90613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461089b90613f01565b80156108e65780601f106108bd576101008083540402835291602001916108e6565b820191905f5260205f20905b8154815290600101906020018083116108c957829003601f168201915b505050505081526020016002820180546108ff90613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461092b90613f01565b80156109765780601f1061094d57610100808354040283529160200191610976565b820191905f5260205f20905b81548152906001019060200180831161095957829003601f168201915b5050505050815260200160038201805461098f90613f01565b80601f01602080910402602001604051908101604052809291908181526020018280546109bb90613f01565b8015610a065780601f106109dd57610100808354040283529160200191610a06565b820191905f5260205f20905b8154815290600101906020018083116109e957829003601f168201915b5050509183525050600482015473ffffffffffffffffffffffffffffffffffffffff166020820152600582018054604090920191610a4390613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6f90613f01565b8015610aba5780601f10610a9157610100808354040283529160200191610aba565b820191905f5260205f20905b815481529060010190602001808311610a9d57829003601f168201915b50505091835250506006919091015460ff161515602090910152608081015160a08201516040519293505f9273ffffffffffffffffffffffffffffffffffffffff909216917fc8db65820000000000000000000000000000000000000000000000000000000091610b3091879190602401613f52565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051610b9b9190613f81565b5f604051808303815f865af19150503d805f8114610bd4576040519150601f19603f3d011682016040523d82523d5f602084013e610bd9565b606091505b5050905080610c1a576040518381527fb447474448cd6fcec713160a7af96335b628994d6abcc074f215b856ccde31679060200160405180910390a1505050565b610c25600b846129f3565b50610c316007846129fe565b50827f9a03aa0053cbc9522f2f584b8e74ba5478cadd5f83b136eaf2d4338795b369558360a00151604051610c669190613a3c565b60405180910390a25b505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f000000000000000000000000000000000000000000000000000000001480610cc95750610cc982612a09565b92915050565b610cf87fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612a9f565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f7724bcb43a09ae6582affdee2f0ace931e26f2ffa8b5c334baf0a39e9dc03426905f90a250565b610d6e61374d565b610d7661374d565b604080518082019182905260019160039190839060029082845b815481526020019060010190808311610d90575050604080518082019182905294965085935060029250905082845b815481526020019060010190808311610dbf5750505050509050915091509091565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610e1a81612a9f565b610e248383612aac565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610e79576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c6f8282612b01565b6060610e8f6009612b4d565b905090565b610e9c612b59565b610ea582612c5f565b610eaf8282612c88565b5050565b5f610ebc612da3565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6060610e8f6007612b4d565b610f167fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612a9f565b610f1f83612988565b610fab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4e6f20726571756573742077697468207370656369666965642072657175657360448201527f744944000000000000000000000000000000000000000000000000000000000060648201526084016107b0565b5f83815260056020526040808220815160e08101909252805482908290610fd190613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054610ffd90613f01565b80156110485780601f1061101f57610100808354040283529160200191611048565b820191905f5260205f20905b81548152906001019060200180831161102b57829003601f168201915b5050505050815260200160018201805461106190613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461108d90613f01565b80156110d85780601f106110af576101008083540402835291602001916110d8565b820191905f5260205f20905b8154815290600101906020018083116110bb57829003601f168201915b505050505081526020016002820180546110f190613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461111d90613f01565b80156111685780601f1061113f57610100808354040283529160200191611168565b820191905f5260205f20905b81548152906001019060200180831161114b57829003601f168201915b5050505050815260200160038201805461118190613f01565b80601f01602080910402602001604051908101604052809291908181526020018280546111ad90613f01565b80156111f85780601f106111cf576101008083540402835291602001916111f8565b820191905f5260205f20905b8154815290600101906020018083116111db57829003601f168201915b5050509183525050600482015473ffffffffffffffffffffffffffffffffffffffff16602082015260058201805460409092019161123590613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461126190613f01565b80156112ac5780601f10611283576101008083540402835291602001916112ac565b820191905f5260205f20905b81548152906001019060200180831161128f57829003601f168201915b505050918352505060069182015460ff161515602090910152606082015190546040517f5bb09cf800000000000000000000000000000000000000000000000000000000815292935090915f9173ffffffffffffffffffffffffffffffffffffffff1690635bb09cf890611324908590600401613a3c565b602060405180830381865afa15801561133f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113639190613f8c565b90505f8190508073ffffffffffffffffffffffffffffffffffffffff1663f6e548e985602001518888611394612552565b6040518563ffffffff1660e01b81526004016113b39493929190613fd0565b602060405180830381865afa1580156113ce573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113f29190614014565b611458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f5369676e617475726520766572696669636174696f6e206661696c656400000060448201526064016107b0565b5f846080015173ffffffffffffffffffffffffffffffffffffffff1663c8db658260e01b89898960405160240161149193929190614033565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516114fc9190613f81565b5f604051808303815f865af19150503d805f8114611535576040519150601f19603f3d011682016040523d82523d5f602084013e61153a565b606091505b50505f8981526005602081905260409091209192500161155b878983614097565b505f88815260056020526040902060060180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556115a06009896129f3565b50806115ea576115b1600b896129fe565b506040518881527fb447474448cd6fcec713160a7af96335b628994d6abcc074f215b856ccde31679060200160405180910390a1611631565b6115f56007896129fe565b50877f9a03aa0053cbc9522f2f584b8e74ba5478cadd5f83b136eaf2d4338795b36955888860405161162892919061418f565b60405180910390a25b5050505050505050565b6060610e8f600b612b4d565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f811580156116915750825b90505f8267ffffffffffffffff1660011480156116ad5750303b155b9050811580156116bb575080155b156116f2576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156117535784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b61175b612e12565b611763612e12565b60408051808201909152898152602081018990526001611785818c600261376b565b50602082015161179b906002808401919061376b565b509050506117c97fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177588612aac565b61182f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4772616e7420726f6c65206661696c656400000000000000000000000000000060448201526064016107b0565b6118395f88612aac565b61189f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4772616e7420726f6c652072657665727473000000000000000000000000000060448201526064016107b0565b73ffffffffffffffffffffffffffffffffffffffff8616611942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f43616e6e6f7420736574207a65726f2061646472657373206173207369676e6160448201527f7475726520736368656d6520616464726573732070726f76696465720000000060648201526084016107b0565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff881617905583156119e35784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b60056020525f9081526040902080548190611a0890613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3490613f01565b8015611a7f5780601f10611a5657610100808354040283529160200191611a7f565b820191905f5260205f20905b815481529060010190602001808311611a6257829003601f168201915b505050505090806001018054611a9490613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac090613f01565b8015611b0b5780601f10611ae257610100808354040283529160200191611b0b565b820191905f5260205f20905b815481529060010190602001808311611aee57829003601f168201915b505050505090806002018054611b2090613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4c90613f01565b8015611b975780601f10611b6e57610100808354040283529160200191611b97565b820191905f5260205f20905b815481529060010190602001808311611b7a57829003601f168201915b505050505090806003018054611bac90613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054611bd890613f01565b8015611c235780601f10611bfa57610100808354040283529160200191611c23565b820191905f5260205f20905b815481529060010190602001808311611c0657829003601f168201915b5050506004840154600585018054949573ffffffffffffffffffffffffffffffffffffffff909216949193509150611c5a90613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054611c8690613f01565b8015611cd15780601f10611ca857610100808354040283529160200191611cd1565b820191905f5260205f20905b815481529060010190602001808311611cb457829003601f168201915b5050506006909301549192505060ff1687565b5f8281527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260408220611d1c9084612e1a565b949350505050565b5f60015f5f828254611d3691906141cf565b90915550506006546040517f2fc9fa3300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690632fc9fa3390611d93908a908a9060040161418f565b602060405180830381865afa158015611dae573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dd29190614014565b611e38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5369676e617475726520736368656d65206e6f7420737570706f72746564000060448201526064016107b0565b611e7f600161100087878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929493925050612e259050565b611f0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4d657373616765206661696c6564206c656e67746820626f756e64732063686560448201527f636b00000000000000000000000000000000000000000000000000000000000060648201526084016107b0565b611f515f61100085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929493925050612e259050565b611fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f436f6e646974696f6e206661696c6564206c656e67746820626f756e6473206360448201527f6865636b0000000000000000000000000000000000000000000000000000000060648201526084016107b0565b8180156120ae5761202184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612ed192505050565b156120ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f436f6e646974696f6e2062797465732063616e6e6f7420626520616c6c207a6560448201527f726f73000000000000000000000000000000000000000000000000000000000060648201526084016107b0565b6006546040517f5bb09cf80000000000000000000000000000000000000000000000000000000081525f9173ffffffffffffffffffffffffffffffffffffffff1690635bb09cf890612106908c908c9060040161418f565b602060405180830381865afa158015612121573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121459190613f8c565b6040517feae1e15b00000000000000000000000000000000000000000000000000000000815290915081905f9073ffffffffffffffffffffffffffffffffffffffff83169063eae1e15b906121a0908c908c9060040161418f565b5f60405180830381865afa1580156121ba573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526121e191908101906141e2565b604080516101006020601f8d01819004028201810190925260e081018b81529293509182918c908c90819085018382808284375f92019190915250505090825250602080820184905260408051601f8b0183900483028101830182528a8152920191908a908a90819084018382808284375f92019190915250505090825250604080516020601f8f018190048102820181019092528d815291810191908e908e90819084018382808284375f92018290525093855250503360208085019190915260408051808301825284815281860152606090940183905282548352600590525020815181906122d29082614257565b50602082015160018201906122e79082614257565b50604082015160028201906122fc9082614257565b50606082015160038201906123119082614257565b5060808201516004820180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117905560a082015160058201906123719082614257565b5060c09190910151600690910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790555f546123b9906009906129fe565b503373ffffffffffffffffffffffffffffffffffffffff165f547ff0a5ef4bc87d6534674b1469f4b31d03c6510d0f7ab353f3e53f9d1d87ead02b8d8d8d8d878e8e42604051612410989796959493929190614350565b60405180910390a350505f549998505050505050505050565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260409091206060919061246590612b4d565b9392505050565b604080515f8152602081019091526060908267ffffffffffffffff811115612496576124966138fc565b6040519080825280602002602001820160405280156124c957816020015b60608152602001906001900390816124b45790505b5091505f5b8381101561254a57612525308686848181106124ec576124ec6143c8565b90506020028101906124fe91906143f5565b8560405160200161251193929190614456565b604051602081830303815290604052612f34565b838281518110612537576125376143c8565b60209081029190910101526001016124ce565b505092915050565b6040805160808101808352606092610e8f9291600191839190820190839060029082845b81548152602001906001019080831161257657505050918352505060408051808201918290526020909201919060028481019182845b8154815260200190600101908083116125ac57505050505081525050612faa565b5f610cc9600b83613006565b61262f6040518060e00160405280606081526020016060815260200160608152602001606081526020015f73ffffffffffffffffffffffffffffffffffffffff168152602001606081526020015f151581525090565b5f8281526005602052604090819020815160e0810190925280548290829061265690613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461268290613f01565b80156126cd5780601f106126a4576101008083540402835291602001916126cd565b820191905f5260205f20905b8154815290600101906020018083116126b057829003601f168201915b505050505081526020016001820180546126e690613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461271290613f01565b801561275d5780601f106127345761010080835404028352916020019161275d565b820191905f5260205f20905b81548152906001019060200180831161274057829003601f168201915b5050505050815260200160028201805461277690613f01565b80601f01602080910402602001604051908101604052809291908181526020018280546127a290613f01565b80156127ed5780601f106127c4576101008083540402835291602001916127ed565b820191905f5260205f20905b8154815290600101906020018083116127d057829003601f168201915b5050505050815260200160038201805461280690613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461283290613f01565b801561287d5780601f106128545761010080835404028352916020019161287d565b820191905f5260205f20905b81548152906001019060200180831161286057829003601f168201915b5050509183525050600482015473ffffffffffffffffffffffffffffffffffffffff1660208201526005820180546040909201916128ba90613f01565b80601f01602080910402602001604051908101604052809291908181526020018280546128e690613f01565b80156129315780601f1061290857610100808354040283529160200191612931565b820191905f5260205f20905b81548152906001019060200180831161291457829003601f168201915b50505091835250506006919091015460ff16151560209091015292915050565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e823717059320006020819052604082206124659061301d565b5f612994600983613006565b80610cc95750610cc9600b83613006565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546129de81612a9f565b610e248383612b01565b5f610e8f600961301d565b5f6124658383613026565b5f6124658383613109565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610cc957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610cc9565b612aa98133613155565b50565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200081612ad985856131fb565b90508015611d1c575f858152602083905260409020612af89085613310565b50949350505050565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200081612b2e8585613331565b90508015611d1c575f858152602083905260409020612af8908561340d565b60605f6124658361342e565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480612c2657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612c0d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b15612c5d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b612aa97fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612a9f565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612cef575060408051601f3d908101601f19168201909252612cec91810190614475565b60015b612d3d576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016107b0565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612d99576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016107b0565b610c6f8383613487565b3073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612c5d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c5d6134e9565b5f6124658383613550565b5f81831115612eb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f496e76616c696420626f756e64733a206d696e4c656e6774682063616e6e6f7460448201527f2062652067726561746572207468616e206d61784c656e67746800000000000060648201526084016107b0565b8351838110801590612ec85750828111155b95945050505050565b5f805b8251811015612f2b57828181518110612eef57612eef6143c8565b01602001517fff000000000000000000000000000000000000000000000000000000000000001615612f2357505f92915050565b600101612ed4565b50600192915050565b60605f5f8473ffffffffffffffffffffffffffffffffffffffff1684604051612f5d9190613f81565b5f60405180830381855af49150503d805f8114612f95576040519150601f19603f3d011682016040523d82523d5f602084013e612f9a565b606091505b5091509150612ec8858383613576565b60408051608080825260a082019092526060915f91906020820181803683375050845180516020918201519682015180519083015192850191909152604084019690965260608301959095525060808101939093525090919050565b5f8181526001830160205260408120541515612465565b5f610cc9825490565b5f8181526001830160205260408120548015613100575f6130486001836143b5565b85549091505f9061305b906001906143b5565b90508082146130ba575f865f018281548110613079576130796143c8565b905f5260205f200154905080875f018481548110613099576130996143c8565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806130cb576130cb61448c565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610cc9565b5f915050610cc9565b5f81815260018301602052604081205461314e57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610cc9565b505f610cc9565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610eaf576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044016107b0565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff16613100575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556132ac3390565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610cc9565b5f6124658373ffffffffffffffffffffffffffffffffffffffff8416613109565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff1615613100575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610cc9565b5f6124658373ffffffffffffffffffffffffffffffffffffffff8416613026565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561347b57602002820191905f5260205f20905b815481526020019060010190808311613467575b50505050509050919050565b61349082613605565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156134e157610c6f8282612f34565b610eaf6136d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16612c5d576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f825f018281548110613565576135656143c8565b905f5260205f200154905092915050565b60608261358b576135868261370b565b612465565b81511580156135af575073ffffffffffffffffffffffffffffffffffffffff84163b155b156135fe576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016107b0565b5080612465565b8073ffffffffffffffffffffffffffffffffffffffff163b5f0361366d576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016107b0565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b3415612c5d576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80511561371b5780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052806002906020820280368337509192915050565b8260028101928215613799579160200282015b8281111561379957825182559160200191906001019061377e565b506137a59291506137a9565b5090565b5b808211156137a5575f81556001016137aa565b5f602082840312156137cd575f5ffd5b5035919050565b5f602082840312156137e4575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114612465575f5ffd5b73ffffffffffffffffffffffffffffffffffffffff81168114612aa9575f5ffd5b5f60208284031215613844575f5ffd5b813561246581613813565b805f5b6002811015610e24578151845260209384019390910190600101613852565b6080810161387f828561384f565b612465604083018461384f565b5f5f6040838503121561389d575f5ffd5b8235915060208301356138af81613813565b809150509250929050565b602080825282518282018190525f918401906040840190835b818110156138f15783518352602093840193909201916001016138d3565b509095945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613952576139526138fc565b604052919050565b5f67ffffffffffffffff821115613973576139736138fc565b50601f01601f191660200190565b5f5f60408385031215613992575f5ffd5b823561399d81613813565b9150602083013567ffffffffffffffff8111156139b8575f5ffd5b8301601f810185136139c8575f5ffd5b80356139db6139d68261395a565b613929565b8181528660208385010111156139ef575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6124656020830184613a0e565b5f5f83601f840112613a5e575f5ffd5b50813567ffffffffffffffff811115613a75575f5ffd5b602083019150836020828501011115613a8c575f5ffd5b9250929050565b5f5f5f60408486031215613aa5575f5ffd5b83359250602084013567ffffffffffffffff811115613ac2575f5ffd5b613ace86828701613a4e565b9497909650939450505050565b5f82601f830112613aea575f5ffd5b6040805190810167ffffffffffffffff81118282101715613b0d57613b0d6138fc565b8060405250806040840185811115613b23575f5ffd5b845b81811015613b3d578035835260209283019201613b25565b509195945050505050565b5f5f5f5f60c08587031215613b5b575f5ffd5b613b658686613adb565b9350613b748660408701613adb565b92506080850135613b8481613813565b915060a0850135613b9481613813565b939692955090935050565b60e081525f613bb160e083018a613a0e565b8281036020840152613bc3818a613a0e565b90508281036040840152613bd78189613a0e565b90508281036060840152613beb8188613a0e565b905073ffffffffffffffffffffffffffffffffffffffff8616608084015282810360a0840152613c1b8186613a0e565b91505082151560c083015298975050505050505050565b5f5f60408385031215613c43575f5ffd5b50508035926020909101359150565b5f5f5f5f5f5f60608789031215613c67575f5ffd5b863567ffffffffffffffff811115613c7d575f5ffd5b613c8989828a01613a4e565b909750955050602087013567ffffffffffffffff811115613ca8575f5ffd5b613cb489828a01613a4e565b909550935050604087013567ffffffffffffffff811115613cd3575f5ffd5b613cdf89828a01613a4e565b979a9699509497509295939492505050565b602080825282518282018190525f918401906040840190835b818110156138f157835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101613d0a565b5f5f60208385031215613d4f575f5ffd5b823567ffffffffffffffff811115613d65575f5ffd5b8301601f81018513613d75575f5ffd5b803567ffffffffffffffff811115613d8b575f5ffd5b8560208260051b8401011115613d9f575f5ffd5b6020919091019590945092505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015613e24577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452613e0f858351613a0e565b94506020938401939190910190600101613dd5565b50929695505050505050565b602081525f825160e06020840152613e4c610100840182613a0e565b90506020840151601f19848303016040850152613e698282613a0e565b9150506040840151601f19848303016060850152613e878282613a0e565b9150506060840151601f19848303016080850152613ea58282613a0e565b91505073ffffffffffffffffffffffffffffffffffffffff60808501511660a084015260a0840151601f198483030160c0850152613ee38282613a0e565b91505060c0840151613ef960e085018215159052565b509392505050565b600181811c90821680613f1557607f821691505b602082108103613f4c577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b828152604060208201525f611d1c6040830184613a0e565b5f81518060208401855e5f93019283525090919050565b5f6124658284613f6a565b5f60208284031215613f9c575f5ffd5b815161246581613813565b81835281816020850137505f602082840101525f6020601f19601f840116840101905092915050565b606081525f613fe26060830187613a0e565b8281036020840152613ff5818688613fa7565b905082810360408401526140098185613a0e565b979650505050505050565b5f60208284031215614024575f5ffd5b81518015158114612465575f5ffd5b838152604060208201525f612ec8604083018486613fa7565b601f821115610c6f57805f5260205f20601f840160051c810160208510156140715750805b601f840160051c820191505b81811015614090575f815560010161407d565b5050505050565b67ffffffffffffffff8311156140af576140af6138fc565b6140c3836140bd8354613f01565b8361404c565b5f601f841160018114614113575f85156140dd5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355614090565b5f83815260208120601f198716915b828110156141425786850135825560209485019460019092019101614122565b508682101561417d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b602081525f611d1c602083018486613fa7565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115610cc957610cc96141a2565b5f602082840312156141f2575f5ffd5b815167ffffffffffffffff811115614208575f5ffd5b8201601f81018413614218575f5ffd5b80516142266139d68261395a565b81815285602083850101111561423a575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b815167ffffffffffffffff811115614271576142716138fc565b6142858161427f8454613f01565b8461404c565b6020601f8211600181146142d6575f83156142a05750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455614090565b5f84815260208120601f198516915b8281101561430557878501518255602094850194600190920191016142e5565b508482101561434157868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b60a081525f61436360a083018a8c613fa7565b828103602084015261437681898b613fa7565b9050828103604084015261438a8188613a0e565b9050828103606084015261439f818688613fa7565b9150508260808301529998505050505050505050565b81810381811115610cc957610cc96141a2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614428575f5ffd5b83018035915067ffffffffffffffff821115614442575f5ffd5b602001915036819003821315613a8c575f5ffd5b828482375f8382015f815261446b8185613f6a565b9695505050505050565b5f60208284031215614485575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea26469706673582212207f33e7672e5328ae7dfef406ddca56e21c29c4c4d46bb1f9d05ba19afd9c928264736f6c634300081c003360a0604052306080525f600155348015610017575f5ffd5b50610020610025565b6100d7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100755760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d45780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516125566100fd5f395f818161123701528181611260015261149d01526125565ff3fe608060405260043610610199575f3560e01c806391d14854116100dc578063c8db658211610087578063d547741f11610062578063d547741f146105eb578063f8413b071461060a578063f8fa0d661461061e578063fb1a002a1461063d575f5ffd5b8063c8db65821461058e578063ca15c873146105ad578063cd802c91146105cc575f5ffd5b8063ad3cb1cc116100b7578063ad3cb1cc146104b8578063affed0e014610500578063c58343ef14610515575f5ffd5b806391d1485414610409578063a217fddf14610479578063a3246ad31461048c575f5ffd5b806352d1902d11610147578063775b839c11610122578063775b839c146103335780637d468106146103525780638a1f165a146103a25780639010d07c146103ea575f5ffd5b806352d1902d1461029e57806354fd4d50146102b257806375b238fc14610300575f5ffd5b806336568abe1161017757806336568abe1461024d578063485cc9551461026c5780634f1ef2861461028b575f5ffd5b806301ffc9a71461019d578063248a9ca3146101d15780632f2ff15d1461022c575b5f5ffd5b3480156101a8575f5ffd5b506101bc6101b7366004611f2b565b61065e565b60405190151581526020015b60405180910390f35b3480156101dc575f5ffd5b5061021e6101eb366004611f6a565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101c8565b348015610237575f5ffd5b5061024b610246366004611fa9565b6106b9565b005b348015610258575f5ffd5b5061024b610267366004611fa9565b610702565b348015610277575f5ffd5b5061024b610286366004611fd3565b610760565b61024b610299366004612077565b610acd565b3480156102a9575f5ffd5b5061021e610aec565b3480156102bd575f5ffd5b5060408051808201909152600581527f302e302e3100000000000000000000000000000000000000000000000000000060208201525b6040516101c89190612186565b34801561030b575f5ffd5b5061021e7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b34801561033e575f5ffd5b506102f361034d366004612198565b610b1a565b34801561035d575f5ffd5b505f5461037d9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c8565b3480156103ad575f5ffd5b506102f36040518060400160405280600581526020017f424e32353400000000000000000000000000000000000000000000000000000081525081565b3480156103f5575f5ffd5b5061037d6104043660046121ec565b610b83565b348015610414575f5ffd5b506101bc610423366004611fa9565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b348015610484575f5ffd5b5061021e5f81565b348015610497575f5ffd5b506104ab6104a6366004611f6a565b610bc3565b6040516101c8919061220c565b3480156104c3575f5ffd5b506102f36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561050b575f5ffd5b5061021e60015481565b348015610520575f5ffd5b5061058161052f366004611f6a565b604080518082019091525f8082526020820152505f908152600260209081526040918290208251808401909352805483526001015473ffffffffffffffffffffffffffffffffffffffff169082015290565b6040516101c89190612264565b348015610599575f5ffd5b5061024b6105a8366004612291565b610c06565b3480156105b8575f5ffd5b5061021e6105c7366004611f6a565b610c91565b3480156105d7575f5ffd5b506101bc6105e6366004611f6a565b610cc8565b3480156105f6575f5ffd5b5061024b610605366004611fa9565b610d59565b348015610615575f5ffd5b5061021e610d9c565b348015610629575f5ffd5b5061024b610638366004612308565b610fbc565b348015610648575f5ffd5b50610651611051565b6040516101c89190612321565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f0000000000000000000000000000000000000000000000000000000014806106b357506106b3826110d1565b92915050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546106f281611167565b6106fc8383611174565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610751576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61075b82826111c9565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f811580156107aa5750825b90505f8267ffffffffffffffff1660011480156107c65750303b155b9050811580156107d4575080155b1561080b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561086c5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610874611215565b61087c611215565b6108a67fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177587611174565b610911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4772616e7420726f6c65206661696c656400000000000000000000000000000060448201526064015b60405180910390fd5b61091b5f87611174565b610981576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4772616e7420726f6c65206661696c65640000000000000000000000000000006044820152606401610908565b73ffffffffffffffffffffffffffffffffffffffff8716610a24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f43616e6e6f7420736574207a65726f2061646472657373206173207369676e6160448201527f747572652073656e6465720000000000000000000000000000000000000000006064820152608401610908565b5f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161790558315610ac45784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610ad561121f565b610ade82611323565b610ae8828261134c565b5050565b5f610af5611485565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b8051604051606091610b329160200190815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830152016040516020818303038152906040529050919050565b5f8281527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260408220610bbb90846114f4565b949350505050565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e823717059320006020819052604090912060609190610bff906114ff565b9392505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610c86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4f6e6c79207369676e617475726553656e6465722063616e2063616c6c0000006044820152606401610908565b61075b83838361150b565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260408220610bff9061177c565b5f80546040517fcd802c910000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff9091169063cd802c9190602401602060405180830381865afa158015610d35573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106b39190612383565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610d9281611167565b6106fc83836111c9565b5f6001805f828254610dae91906123cf565b90915550506040805180820190915260015481523360208201525f610dd282610b1a565b60408051602080820183525f8083525483518085018552600581527f424e3235340000000000000000000000000000000000000000000000000000009281019290925292517f95b8d073000000000000000000000000000000000000000000000000000000008152939450909273ffffffffffffffffffffffffffffffffffffffff909216916395b8d07391610e6e91869086906004016123e2565b6020604051808303815f875af1158015610e8a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eae9190612424565b5f818152600260208181526040808420885181558883018051600192830180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff9384161790915560038054808601825598528b517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b989097029788019690965590517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c9096018054909516951694909417909255915490514281529296503392909187917feee7195b6cee0fa7044c3af0b86fe2febb1d2703d71191f44052ba0d60ffda64910160405180910390a450505090565b610fe57fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611167565b5f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560405190917f229f6c3b095d683755a99ab458956747a8b7066c3dd42927d850631c34c238f191a250565b60606003805480602002602001604051908101604052809291908181526020015f905b828210156110c8575f84815260209081902060408051808201909152600285029091018054825260019081015473ffffffffffffffffffffffffffffffffffffffff16828401529083529092019101611074565b50505050905090565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806106b357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146106b3565b6111718133611785565b50565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000816111a1858561182b565b90508015610bbb575f8581526020839052604090206111c09085611949565b50949350505050565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000816111f6858561196a565b90508015610bbb575f8581526020839052604090206111c09085611a46565b61121d611a67565b565b3073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614806112ec57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166112d37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561121d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111717fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611167565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113d1575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526113ce91810190612424565b60015b61141f576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610908565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc811461147b576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401610908565b61075b8383611ace565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461121d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610bff8383611b30565b60605f610bff83611b56565b5f838152600260209081526040918290208251808401909352805480845260019091015473ffffffffffffffffffffffffffffffffffffffff16918301919091526115d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f526571756573742077697468207468617420726571756573744944206469642060448201527f6e6f7420657869737400000000000000000000000000000000000000000000006064820152608401610908565b5f83836040516115e992919061243b565b604051809103902090505f826020015173ffffffffffffffffffffffffffffffffffffffff1663431ac65760e01b8784604051602401611633929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516116bc919061244a565b5f604051808303815f865af19150503d805f81146116f5576040519150601f19603f3d011682016040523d82523d5f602084013e6116fa565b606091505b5050905080611738576040517f8f67472d00000000000000000000000000000000000000000000000000000000815260048101879052602401610908565b857fb74b3204a538cd8021662d42e794681ddc339924ef675b8fd11e9eaf6aa19eb583878760405161176c93929190612460565b60405180910390a2505050505050565b5f6106b3825490565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610ae8576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610908565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff16611940575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556118dc3390565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506106b3565b5f9150506106b3565b5f610bff8373ffffffffffffffffffffffffffffffffffffffff8416611baf565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff1615611940575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506106b3565b5f610bff8373ffffffffffffffffffffffffffffffffffffffff8416611bfb565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661121d576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ad782611cd5565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115611b285761075b8282611da3565b610ae8611e22565b5f825f018281548110611b4557611b456124b3565b905f5260205f200154905092915050565b6060815f01805480602002602001604051908101604052809291908181526020018280548015611ba357602002820191905f5260205f20905b815481526020019060010190808311611b8f575b50505050509050919050565b5f818152600183016020526040812054611bf457508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556106b3565b505f6106b3565b5f8181526001830160205260408120548015611940575f611c1d6001836124e0565b85549091505f90611c30906001906124e0565b9050808214611c8f575f865f018281548110611c4e57611c4e6124b3565b905f5260205f200154905080875f018481548110611c6e57611c6e6124b3565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080611ca057611ca06124f3565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506106b3565b8073ffffffffffffffffffffffffffffffffffffffff163b5f03611d3d576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610908565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60605f5f8473ffffffffffffffffffffffffffffffffffffffff1684604051611dcc919061244a565b5f60405180830381855af49150503d805f8114611e04576040519150601f19603f3d011682016040523d82523d5f602084013e611e09565b606091505b5091509150611e19858383611e5a565b95945050505050565b341561121d576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082611e6f57611e6a82611ee9565b610bff565b8151158015611e93575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611ee2576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610908565b5092915050565b805115611ef95780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60208284031215611f3b575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610bff575f5ffd5b5f60208284031215611f7a575f5ffd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611fa4575f5ffd5b919050565b5f5f60408385031215611fba575f5ffd5b82359150611fca60208401611f81565b90509250929050565b5f5f60408385031215611fe4575f5ffd5b611fed83611f81565b9150611fca60208401611f81565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561206f5761206f611ffb565b604052919050565b5f5f60408385031215612088575f5ffd5b61209183611f81565b9150602083013567ffffffffffffffff8111156120ac575f5ffd5b8301601f810185136120bc575f5ffd5b803567ffffffffffffffff8111156120d6576120d6611ffb565b61210760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612028565b81815286602083850101111561211b575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f610bff602083018461213a565b5f60408284031280156121a9575f5ffd5b506040805190810167ffffffffffffffff811182821017156121cd576121cd611ffb565b604052823581526121e060208401611f81565b60208201529392505050565b5f5f604083850312156121fd575f5ffd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b8181101561225957835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101612225565b509095945050505050565b8151815260208083015173ffffffffffffffffffffffffffffffffffffffff1690820152604081016106b3565b5f5f5f604084860312156122a3575f5ffd5b83359250602084013567ffffffffffffffff8111156122c0575f5ffd5b8401601f810186136122d0575f5ffd5b803567ffffffffffffffff8111156122e6575f5ffd5b8660208284010111156122f7575f5ffd5b939660209190910195509293505050565b5f60208284031215612318575f5ffd5b610bff82611f81565b602080825282518282018190525f918401906040840190835b818110156122595761236d8385518051825260209081015173ffffffffffffffffffffffffffffffffffffffff16910152565b602093909301926040929092019160010161233a565b5f60208284031215612393575f5ffd5b81518015158114610bff575f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156106b3576106b36123a2565b606081525f6123f4606083018661213a565b8281036020840152612406818661213a565b9050828103604084015261241a818561213a565b9695505050505050565b5f60208284031215612434575f5ffd5b5051919050565b818382375f9101908152919050565b5f82518060208501845e5f920191825250919050565b83815260406020820152816040820152818360608301375f818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b818103818111156106b3576106b36123a2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea2646970667358221220dceaab71410f9aca3092ce386ea2cd2c0a9afa36ac96d9d087ba45c3f73ba79264736f6c634300081c00335369676e617475726553656e6465722070726f787920636f6e7472616374206465706c6f7965642061743a205369676e617475726553656e64657220636f6e747261637420757067726164656420746f206e657720696d706c656d656e746174696f6e2061743a2052616e646f6d6e65737353656e64657220696d706c656d656e746174696f6e20636f6e7472616374206465706c6f7965642061743a20426e3235345369676e6174757265536368656d6520636f6e7472616374206465706c6f7965642061743a205369676e6174757265536368656d654164647265737350726f766964657220636f6e7472616374206465706c6f7965642061743a2052616e646f6d6e65737353656e64657220636f6e747261637420757067726164656420746f206e657720696d706c656d656e746174696f6e2061743a2052616e646f6d6e65737353656e6465722070726f787920636f6e7472616374206465706c6f7965642061743a207369676e6174757265536368656d654164647265737350726f7669646572416464726573735369676e617475726553656e64657220696d706c656d656e746174696f6e20636f6e7472616374206465706c6f7965642061743a20a2646970667358221220d2557446c37bad95f9eb331a6a886d513c53447d2b4a79446c5fd22058d28b4164736f6c634300081c0033\";\n\ntype DeployAllContractsConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: DeployAllContractsConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class DeployAllContracts__factory extends ContractFactory {\n  constructor(...args: DeployAllContractsConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      DeployAllContracts & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): DeployAllContracts__factory {\n    return super.connect(runner) as DeployAllContracts__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): DeployAllContractsInterface {\n    return new Interface(_abi) as DeployAllContractsInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): DeployAllContracts {\n    return new Contract(address, _abi, runner) as unknown as DeployAllContracts;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type {\n  DeployBN254SignatureScheme,\n  DeployBN254SignatureSchemeInterface,\n} from \"../../DeployBN254SignatureScheme.s.sol/DeployBN254SignatureScheme\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"IS_SCRIPT\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"run\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6080604052600c805462ff00ff191662010001179055348015601f575f5ffd5b506135b58061002d5f395ff3fe608060405234801561000f575f5ffd5b5060043610610034575f3560e01c8063c040622614610038578063f8ccbf4714610042575b5f5ffd5b610040610069565b005b600c546100559062010000900460ff1681565b604051901515815260200160405180910390f35b610071610074565b50565b5f5f6040518060200161008690610872565b6020820181038252601f19601f8201166040525090507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610103575f5ffd5b505af1158015610115573d5f5f3e3d5ffd5b50506040517f7ed1ec7d00000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5553455f52414e44414d555f464143544f5259000000000000000000000000006044820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9250637ed1ec7d9150606401602060405180830381865afa1580156101ad573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d1919061087f565b15610356576040517f350d56bf00000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f52414e44414d555f435245415445325f464143544f52595f434f4e545241435460448201527f5f4144445245535300000000000000000000000000000000000000000000000060648201525f90737109709ecfa91a80626ff3989d68f67f5b1dd12d9063350d56bf90608401602060405180830381865afa158015610292573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b691906108a5565b6040517fcdcb760a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff919091169063cdcb760a9061030d90601a908690600401610924565b6020604051808303815f875af1158015610329573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061034d91906108a5565b92506103869050565b604051601a9061036590610872565b8190604051809103905ff5905080158015610382573d5f5f3e3d5ffd5b5091505b6103a86040518060600160405280602b8152602001613530602b91398361053b565b5f6104006040518060400160405280601581526020017f4465706c6f796d656e745f696e7075742e6a736f6e000000000000000000000081525060405180606001604052806025815260200161355b602591396105d0565b90505f8190507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561046d575f5ffd5b505af115801561047f573d5f5f3e3d5ffd5b5050604080518082018252600581527f424e323534000000000000000000000000000000000000000000000000000000602082015290517fbab867da00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516935063bab867da925061050891908890600401610944565b5f604051808303815f87803b15801561051f575f5ffd5b505af1158015610531573d5f5f3e3d5ffd5b5050505050505090565b6105cc8282604051602401610551929190610944565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f319af3330000000000000000000000000000000000000000000000000000000017905261076c565b5050565b5f5f6105db84610775565b6040517f60f9bb110000000000000000000000000000000000000000000000000000000081529091505f90737109709ecfa91a80626ff3989d68f67f5b1dd12d906360f9bb119061063090859060040161097b565b5f60405180830381865afa15801561064a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261068f91908101906109ba565b90505f846040516020016106a39190610ac1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f1e19e6570000000000000000000000000000000000000000000000000000000082529150737109709ecfa91a80626ff3989d68f67f5b1dd12d90631e19e657906107239085908590600401610af2565b602060405180830381865afa15801561073e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061076291906108a5565b9695505050505050565b61007181610853565b60605f7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663d930a0e66040518163ffffffff1660e01b81526004015f60405180830381865afa1580156107e2573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261082791908101906109ba565b9050808360405160200161083c929190610b1f565b604051602081830303815290604052915050919050565b5f6a636f6e736f6c652e6c6f6790505f5f835160208501845afa505050565b6129d580610b5b83390190565b5f6020828403121561088f575f5ffd5b8151801515811461089e575f5ffd5b9392505050565b5f602082840312156108b5575f5ffd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461089e575f5ffd5b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b828152604060208201525f61093c60408301846108d8565b949350505050565b604081525f61095660408301856108d8565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b602081525f61089e60208301846108d8565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f602082840312156109ca575f5ffd5b815167ffffffffffffffff8111156109e0575f5ffd5b8201601f810184136109f0575f5ffd5b805167ffffffffffffffff811115610a0a57610a0a61098d565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715610a7657610a7661098d565b604052818152828201602001861015610a8d575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f81518060208401855e5f93019283525090919050565b7f2e0000000000000000000000000000000000000000000000000000000000000081525f61089e6001830184610aaa565b604081525f610b0460408301856108d8565b8281036020840152610b1681856108d8565b95945050505050565b5f610b2a8285610aaa565b7f2f7363726970742f6a736f6e2f000000000000000000000000000000000000008152610b16600d820185610aaa56fe608060405234801561000f575f5ffd5b506100194661004b565b6040516020016100299190610212565b6040516020818303038152906040525f90816100459190610318565b5061042a565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015281516042808252608082019093526060925f9190602082018180368337019050509050600360fc1b815f815181106100ab576100ab6103d2565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106100d9576100d96103d2565b60200101906001600160f81b03191690815f1a9053505f5b602081101561020a5782600486836020811061010f5761010f6103d2565b1a60f81b6001600160f81b031916901c60f81c60ff1681518110610135576101356103d2565b01602001516001600160f81b031916826101508360026103fa565b61015b906002610417565b8151811061016b5761016b6103d2565b60200101906001600160f81b03191690815f1a90535082858260208110610194576101946103d2565b825191901a600f169081106101ab576101ab6103d2565b01602001516001600160f81b031916826101c68360026103fa565b6101d1906002610417565b6101dc906001610417565b815181106101ec576101ec6103d2565b60200101906001600160f81b03191690815f1a9053506001016100f1565b509392505050565b7f646369706865722d72616e646f6d6e6573732d7630312d424e32353447315f5881527f4d443a4b454343414b2d3235365f535644575f524f5f0000000000000000000060208201525f82518060208501603685015e605f60f81b6036939091019283015250603701919050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806102a857607f821691505b6020821081036102c657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561031357805f5260205f20601f840160051c810160208510156102f15750805b601f840160051c820191505b81811015610310575f81556001016102fd565b50505b505050565b81516001600160401b0381111561033157610331610280565b6103458161033f8454610294565b846102cc565b6020601f821160018114610377575f83156103605750848201515b5f19600385901b1c1916600184901b178455610310565b5f84815260208120601f198516915b828110156103a65787850151825560209485019460019092019101610386565b50848210156103c357868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610411576104116103e6565b92915050565b80820180821115610411576104116103e6565b61259e806104375f395ff3fe608060405234801561000f575f5ffd5b506004361061006f575f3560e01c80638a1f165a1161004d5780638a1f165a146100c3578063eae1e15b146100ff578063f6e548e914610112575f5ffd5b80633033cc51146100735780633408e470146100a05780635f7c7522146100ae575b5f5ffd5b610086610081366004612188565b610135565b604080519283526020830191909152015b60405180910390f35b604051468152602001610097565b6100b6610214565b6040516100979190612213565b6100b66040518060400160405280600581526020017f424e32353400000000000000000000000000000000000000000000000000000081525081565b6100b661010d366004612188565b61029f565b61012561012036600461222c565b6102d9565b6040519015158152602001610097565b5f5f5f6101fe5f8054610147906122cb565b80601f0160208091040260200160405190810160405280929190818152602001828054610173906122cb565b80156101be5780601f10610195576101008083540402835291602001916101be565b820191905f5260205f20905b8154815290600101906020018083116101a157829003601f168201915b505050505086868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506103c892505050565b80516020909101519093509150505b9250929050565b5f8054610220906122cb565b80601f016020809104026020016040519081016040528092919081815260200182805461024c906122cb565b80156102975780601f1061026e57610100808354040283529160200191610297565b820191905f5260205f20905b81548152906001019060200180831161027a57829003601f168201915b505050505081565b60605f5f6102ad8585610135565b915091506102ce6040518060400160405280848152602001838152506104ad565b925050505b92915050565b5f5f61031988888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506104e692505050565b90505f61035a87878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506104e692505050565b90505f61039b86868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061058392505050565b90505f5f6103aa84848761063e565b915091508180156103b85750805b9c9b505050505050505050505050565b604080518082019091525f80825260208201525f6103e684846107b1565b90505f6103f982825b60200201516108fc565b90505f6104078360016103ef565b90506104116120cb565b825181526020808401518282015282516040808401919091529083015160608301525f908460808460066107d05a03fa90508061048557816040517f128e3f0800000000000000000000000000000000000000000000000000000000815260040161047c9190612349565b60405180910390fd5b6040805180820190915284518152602081018560016020020151905298975050505050505050565b6040805181815260608181018352915f919060208201818036833750508451602095860151958301525060408101939093525090919050565b604080518082019091525f80825260208201528151604014610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c6964204731206279746573206c656e677468000000000000000000604482015260640161047c565b5060208181015160409283015183518085019094529083529082015290565b61058b6120e9565b81516080146105f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c6964204732206279746573206c656e677468000000000000000000604482015260640161047c565b50602081810151604080840151606080860151608096870151845197880185528785019586529187019290925292855281518083019092528152808301919091529082015290565b5f5f5f604051806101800160405280875f01518152602001876020015181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec81526020017f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d8152602001855f0151815260200185602001518152602001865f01516001600281106107215761072161231c565b60200201518152602001865f01515f600281106107405761074061231c565b6020020151815260200186602001516001600281106107615761076161231c565b6020020151815260200186602001515f600281106107815761078161231c565b60200201519052905061079261210e565b6020816101808460086107d05a03fa9051151597909650945050505050565b6107b961212c565b5f6107c48484610da4565b90505f5f5f5f6018850177ffffffffffffffffffffffffffffffffffffffffffffffff815116935060308601905077ffffffffffffffffffffffffffffffffffffffffffffffff81511694507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47857f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4778010000000000000000000000000000000000000000000000008709086048870151606088015177ffffffffffffffffffffffffffffffffffffffffffffffff908116975016945092507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47905084817801000000000000000000000000000000000000000000000000860908604080518082019091529283526020830152509695505050505050565b61090461212c565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478210610960576040517fd53e94150000000000000000000000000000000000000000000000000000000081526004810183905260240161047c565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760047f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478586090990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478260010890507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47610a1e837f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476123a6565b60010891505f610a507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47838509610f8e565b90505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4778016789af3a83522eb353c98fc6b36d713d5d8d1cc5dffffffa7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47847f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47888b09090990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47610b24837f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476123a6565b7f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea30890505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47837f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea30890505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4786870990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4786830990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47807f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478485097f10216f7ba065e00de81ac1e7808072c9dd2b2385cd7b438469602eb24829a9bd0960010890505f5f610c5e610c5988610f98565b61100a565b5f0b600103610cc757868c52610c7387610f98565b9050610c7e816110ba565b60208e0191909152915081610cc2576040517f396ec7710000000000000000000000000000000000000000000000000000000081526004810182905260240161047c565b610d43565b610cd3610c5987610f98565b5f0b600103610ce857858c52610c7386610f98565b828c52610cf483610f98565b9050610cff816110ba565b60208e0191909152915081610d43576040517f396ec7710000000000000000000000000000000000000000000000000000000081526004810182905260240161047c565b60208c0151610d51906110f4565b610d5a8e6110f4565b14610d945760208c0151610d8e907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476123a6565b60208d01525b5050505050505050505050919050565b815160609060ff811115610de657836040517f26e4f9ba00000000000000000000000000000000000000000000000000000000815260040161047c9190612213565b60408051608880825260c082019092525f916020820181803683370190505090505f81855f60605f8a88604051602001610e2697969594939291906123d0565b60405160208183030381529060405290505f818051906020012090505f8160018987604051602001610e5b94939291906124ab565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815282825280516020820120606080855260808501909352909350915f91602082018180368337019050509050600360015b81811015610f5257858418610ecc82600161251d565b8d8b604051602001610ee194939291906124ab565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830181028501810195909552805194810194909420939450600101610eb6565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016020908102820101919091529550505050505092915050565b5f6102d382611100565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760037f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47847f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47868709090892915050565b5f5f61101583611858565b905061104260017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476123a6565b810361107057507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92915050565b8015801590611080575080600114155b156102d3576040517f396ec7710000000000000000000000000000000000000000000000000000000081526004810184905260240161047c565b5f5f6110c583611985565b9150827f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47838409149050915091565b5f6102d3600283612530565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996505050838586099450838586099450838586099450838586099450838186099450508284850993508284850993508284850993508281850993508284850993508284850993508285850993508284850993508284850993508284850993508284850993508284850993508284850993508281850995945050505050565b6040805160c080825260e082019092525f918291906020820181803683370190505060208082018181526040830182905260608301829052608083018690527f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea360a08401527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760c0808501919091529293505f92839160055afa90505f5192508061197e576040517fc6daf7ab000000000000000000000000000000000000000000000000000000008152600481018590527f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea360248201527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47604482015260640161047c565b5050919050565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508584880996508587880996508587880996508587880996508587880996508587880996508581880996505050505050808283099392505050565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806120fc61212c565b815260200161210961212c565b905290565b60405180602001604052806001906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b5f5f83601f84011261215a575f5ffd5b50813567ffffffffffffffff811115612171575f5ffd5b60208301915083602082850101111561020d575f5ffd5b5f5f60208385031215612199575f5ffd5b823567ffffffffffffffff8111156121af575f5ffd5b6121bb8582860161214a565b90969095509350505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f61222560208301846121c7565b9392505050565b5f5f5f5f5f5f60608789031215612241575f5ffd5b863567ffffffffffffffff811115612257575f5ffd5b61226389828a0161214a565b909750955050602087013567ffffffffffffffff811115612282575f5ffd5b61228e89828a0161214a565b909550935050604087013567ffffffffffffffff8111156122ad575f5ffd5b6122b989828a0161214a565b979a9699509497509295939492505050565b600181811c908216806122df57607f821691505b602082108103612316577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6080810181835f5b6004811015612370578151835260209283019290910190600101612351565b50505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818103818111156102d3576102d3612379565b5f81518060208401855e5f93019283525090919050565b5f6123e46123de838b6123b9565b896123b9565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b1681527fff000000000000000000000000000000000000000000000000000000000000008760f81b1660018201527fff000000000000000000000000000000000000000000000000000000000000008660f81b16600282015261246f60038201866123b9565b60f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016845250506001909101979650505050505050565b8481527fff000000000000000000000000000000000000000000000000000000000000008460f81b1660208201525f6124e760218301856123b9565b60f89390931b7fff0000000000000000000000000000000000000000000000000000000000000016835250506001019392505050565b808201808211156102d3576102d3612379565b5f82612563577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b50069056fea26469706673582212206df3649d590cafccfd4873076b90bc107f722eecb7166da8e6c43928f9acbc4d64736f6c634300081c0033426e3235345369676e6174757265536368656d6520636f6e7472616374206465706c6f7965642061743a207369676e6174757265536368656d654164647265737350726f766964657241646472657373a2646970667358221220641b19618accd9c0b823155559a403b5f9ec00e8b1f5a3317743bb0c6e73230c64736f6c634300081c0033\";\n\ntype DeployBN254SignatureSchemeConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: DeployBN254SignatureSchemeConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class DeployBN254SignatureScheme__factory extends ContractFactory {\n  constructor(...args: DeployBN254SignatureSchemeConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      DeployBN254SignatureScheme & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(\n    runner: ContractRunner | null\n  ): DeployBN254SignatureScheme__factory {\n    return super.connect(runner) as DeployBN254SignatureScheme__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): DeployBN254SignatureSchemeInterface {\n    return new Interface(_abi) as DeployBN254SignatureSchemeInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): DeployBN254SignatureScheme {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as DeployBN254SignatureScheme;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type {\n  DeployFactory,\n  DeployFactoryInterface,\n} from \"../../DeployFactory.s.sol/DeployFactory\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"IS_SCRIPT\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"run\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6080604052600c805462ff00ff191662010001179055348015601f575f5ffd5b506105f88061002d5f395ff3fe608060405234801561000f575f5ffd5b5060043610610034575f3560e01c8063c040622614610038578063f8ccbf4714610042575b5f5ffd5b610040610069565b005b600c546100559062010000900460ff1681565b604051901515815260200160405180910390f35b610071610073565b565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156100da575f5ffd5b505af11580156100ec573d5f5f3e3d5ffd5b505050505f6040516100fd90610213565b604051809103905ff080158015610116573d5f5f3e3d5ffd5b5090506101586040518060400160405280601d81526020017f4352454154453220466163746f7279206465706c6f7965642061743a200000008152508261015b565b50565b6101ec8282604051602401610171929190610220565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f319af333000000000000000000000000000000000000000000000000000000001790526101f0565b5050565b610158815f6a636f6e736f6c652e6c6f6790505f5f835160208501845afa505050565b6103328061029183390190565b604081525f83518060408401528060208601606085015e5f6060828501015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505073ffffffffffffffffffffffffffffffffffffffff83166020830152939250505056fe6080604052348015600e575f5ffd5b506103168061001c5f395ff3fe608060405260043610610028575f3560e01c8063481286e61461002c578063cdcb760a14610074575b5f5ffd5b348015610037575f5ffd5b5061004b610046366004610199565b610087565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61004b6100823660046101e6565b6100b1565b6040805190810182905260208101839052308082525f91600b0160ff815360559020949350505050565b5f81515f036100ec576040517f4ca249dc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8282516020840134f5905073ffffffffffffffffffffffffffffffffffffffff8116610144576040517f741752c200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff83168152602081018590527f4108529e399e9cd5343c48ae06aa62a23c8c1b7c93f59d4691a0ea1e6f5b4603910160405180910390a192915050565b5f5f604083850312156101aa575f5ffd5b50508035926020909101359150565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f5f604083850312156101f7575f5ffd5b82359150602083013567ffffffffffffffff811115610214575f5ffd5b8301601f81018513610224575f5ffd5b803567ffffffffffffffff81111561023e5761023e6101b9565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156102aa576102aa6101b9565b6040528181528282016020018710156102c1575f5ffd5b816020840160208301375f60208383010152809350505050925092905056fea2646970667358221220f9f265fabcdae1b307c601685613090a21ab49968566e35913736297c758400464736f6c634300081c0033a264697066735822122068a76e74b9611080160228a63471e1d8f7cc49c6331a9829099805aadd33ff7a64736f6c634300081c0033\";\n\ntype DeployFactoryConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: DeployFactoryConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class DeployFactory__factory extends ContractFactory {\n  constructor(...args: DeployFactoryConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      DeployFactory & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): DeployFactory__factory {\n    return super.connect(runner) as DeployFactory__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): DeployFactoryInterface {\n    return new Interface(_abi) as DeployFactoryInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): DeployFactory {\n    return new Contract(address, _abi, runner) as unknown as DeployFactory;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type {\n  DeployRandomnessReceiver,\n  DeployRandomnessReceiverInterface,\n} from \"../../DeployRandomnessReceiver.s.sol/DeployRandomnessReceiver\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"IS_SCRIPT\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"run\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6080604052600c805462ff00ff191662010001179055348015601f575f5ffd5b50610f7a8061002d5f395ff3fe608060405234801561000f575f5ffd5b5060043610610034575f3560e01c8063c040622614610038578063f8ccbf4714610042575b5f5ffd5b610040610069565b005b600c546100559062010000900460ff1681565b604051901515815260200160405180910390f35b5f6100de6040518060400160405280601581526020017f4465706c6f796d656e745f696e7075742e6a736f6e00000000000000000000008152506040518060400160405280601c81526020017f72616e646f6d6e65737353656e64657250726f787941646472657373000000008152506100ed565b90506100e981610289565b5050565b5f5f6100f884610669565b6040517f60f9bb110000000000000000000000000000000000000000000000000000000081529091505f90737109709ecfa91a80626ff3989d68f67f5b1dd12d906360f9bb119061014d908590600401610857565b5f60405180830381865afa158015610167573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526101ac919081019061089d565b90505f846040516020016101c091906109a4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f1e19e6570000000000000000000000000000000000000000000000000000000082529150737109709ecfa91a80626ff3989d68f67f5b1dd12d90631e19e6579061024090859085906004016109d5565b602060405180830381865afa15801561025b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061027f9190610a02565b9695505050505050565b5f5f6040518060200161029b906107fe565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f90910116604081815273ffffffffffffffffffffffffffffffffffffffff8616602083015201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526103279291602001610a35565b60405160208183030381529060405290507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561039f575f5ffd5b505af11580156103b1573d5f5f3e3d5ffd5b50506040517f7ed1ec7d00000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5553455f52414e44414d555f464143544f5259000000000000000000000000006044820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9250637ed1ec7d9150606401602060405180830381865afa158015610449573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061046d9190610a51565b156105f2576040517f350d56bf00000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f52414e44414d555f435245415445325f464143544f52595f434f4e545241435460448201527f5f4144445245535300000000000000000000000000000000000000000000000060648201525f90737109709ecfa91a80626ff3989d68f67f5b1dd12d9063350d56bf90608401602060405180830381865afa15801561052e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105529190610a02565b6040517fcdcb760a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff919091169063cdcb760a906105a990601a908690600401610a70565b6020604051808303815f875af11580156105c5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105e99190610a02565b92506106419050565b601a5f1b83604051610603906107fe565b73ffffffffffffffffffffffffffffffffffffffff90911681526020018190604051809103905ff590508015801561063d573d5f5f3e3d5ffd5b5091505b610663604051806060016040528060248152602001610f216024913983610747565b50919050565b60605f7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663d930a0e66040518163ffffffff1660e01b81526004015f60405180830381865afa1580156106d6573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261071b919081019061089d565b90508083604051602001610730929190610a88565b604051602081830303815290604052915050919050565b6100e9828260405160240161075d929190610ac3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f319af333000000000000000000000000000000000000000000000000000000001790526107dc816107df565b50565b5f6a636f6e736f6c652e6c6f6790505f5f835160208501845afa505050565b61042680610afb83390190565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f610869602083018461080b565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f602082840312156108ad575f5ffd5b815167ffffffffffffffff8111156108c3575f5ffd5b8201601f810184136108d3575f5ffd5b805167ffffffffffffffff8111156108ed576108ed610870565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561095957610959610870565b604052818152828201602001861015610970575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f81518060208401855e5f93019283525090919050565b7f2e0000000000000000000000000000000000000000000000000000000000000081525f610869600183018461098d565b604081525f6109e7604083018561080b565b82810360208401526109f9818561080b565b95945050505050565b5f60208284031215610a12575f5ffd5b815173ffffffffffffffffffffffffffffffffffffffff81168114610869575f5ffd5b5f610a49610a43838661098d565b8461098d565b949350505050565b5f60208284031215610a61575f5ffd5b81518015158114610869575f5ffd5b828152604060208201525f610a49604083018461080b565b5f610a93828561098d565b7f2f7363726970742f6a736f6e2f0000000000000000000000000000000000000081526109f9600d82018561098d565b604081525f610ad5604083018561080b565b905073ffffffffffffffffffffffffffffffffffffffff83166020830152939250505056fe60a060405234801561000f575f5ffd5b5060405161042638038061042683398101604081905261002e916100b0565b806001600160a01b03811661009e5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574207a65726f20616464726573732061732072616e646f60448201526b36b732b9b99039b2b73232b960a11b606482015260840160405180910390fd5b6001600160a01b0316608052506100dd565b5f602082840312156100c0575f5ffd5b81516001600160a01b03811681146100d6575f5ffd5b9392505050565b6080516103246101025f395f818160ad0152818161010c015261022601526103245ff3fe608060405234801561000f575f5ffd5b5060043610610063575f3560e01c8063431ac6571161004d578063431ac6571461008b578063837e7cc6146100a0578063df3fafe8146100a8575f5ffd5b80626d6cae146100675780633601318914610083575b5f5ffd5b61007060015481565b6040519081526020015b60405180910390f35b6100705f5481565b61009e6100993660046102b7565b6100f4565b005b61009e6101a6565b6100cf7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161007a565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4f6e6c792072616e646f6d6e65737353656e6465722063616e2063616c6c000060448201526064015b60405180910390fd5b6101a282826101b3565b5050565b6101ae610223565b600155565b816001541461021e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f52657175657374204944206d69736d6174636800000000000000000000000000604482015260640161018f565b5f5550565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8413b076040518163ffffffff1660e01b81526004016020604051808303815f875af115801561028e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b291906102d7565b905090565b5f5f604083850312156102c8575f5ffd5b50508035926020909101359150565b5f602082840312156102e7575f5ffd5b505191905056fea2646970667358221220e3dc079a3a90b9d3908b9f60d311360e8849c23b3a4dcef80857bcb15237404d64736f6c634300081c00334d6f636b52616e646f6d6e6573735265636569766572206465706c6f7965642061743a20a2646970667358221220b80671d48361fac774faf40e054f2d46bc5aa5bc796f88a8f84d134fd6d9a91d64736f6c634300081c0033\";\n\ntype DeployRandomnessReceiverConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: DeployRandomnessReceiverConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class DeployRandomnessReceiver__factory extends ContractFactory {\n  constructor(...args: DeployRandomnessReceiverConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      DeployRandomnessReceiver & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(\n    runner: ContractRunner | null\n  ): DeployRandomnessReceiver__factory {\n    return super.connect(runner) as DeployRandomnessReceiver__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): DeployRandomnessReceiverInterface {\n    return new Interface(_abi) as DeployRandomnessReceiverInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): DeployRandomnessReceiver {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as DeployRandomnessReceiver;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type {\n  DeployRandomnessSender,\n  DeployRandomnessSenderInterface,\n} from \"../../DeployRandomnessSender.s.sol/DeployRandomnessSender\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"IS_SCRIPT\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"run\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6080604052600c805462ff00ff191662010001179055348015601f575f5ffd5b506140fa8061002d5f395ff3fe608060405234801561000f575f5ffd5b5060043610610034575f3560e01c8063c040622614610038578063f8ccbf4714610042575b5f5ffd5b610040610069565b005b600c546100559062010000900460ff1681565b604051901515815260200160405180910390f35b6040517f7ed1ec7d00000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f49535f555047524144450000000000000000000000000000000000000000000060448201525f90737109709ecfa91a80626ff3989d68f67f5b1dd12d90637ed1ec7d90606401602060405180830381865afa1580156100ff573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610123919061123a565b90505f61019a6040518060400160405280601581526020017f4465706c6f796d656e745f696e7075742e6a736f6e00000000000000000000008152506040518060400160405280601b81526020017f7369676e617475726553656e64657250726f78794164647265737300000000008152506101ab565b90506101a68183610347565b505050565b5f5f6101b684610a9c565b6040517f60f9bb110000000000000000000000000000000000000000000000000000000081529091505f90737109709ecfa91a80626ff3989d68f67f5b1dd12d906360f9bb119061020b9085906004016112ac565b5f60405180830381865afa158015610225573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261026a91908101906112eb565b90505f8460405160200161027e91906113f2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f1e19e6570000000000000000000000000000000000000000000000000000000082529150737109709ecfa91a80626ff3989d68f67f5b1dd12d90631e19e657906102fe9085908590600401611423565b602060405180830381865afa158015610319573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061033d9190611450565b9695505050505050565b5f5f610351610b7a565b90508215610502577f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156103c0575f5ffd5b505af11580156103d2573d5f5f3e3d5ffd5b505050505f61044b6040518060400160405280601581526020017f4465706c6f796d656e745f696e7075742e6a736f6e00000000000000000000008152506040518060400160405280601c81526020017f72616e646f6d6e65737353656e64657250726f787941646472657373000000008152506101ab565b604080517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201929092525f6044820152919250821690634f1ef286906064015f604051808303815f87803b1580156104c3575f5ffd5b505af11580156104d5573d5f5f3e3d5ffd5b505050506104fb6040518060600160405280603d815260200161405b603d913983610eb1565b9150610a95565b5f6040518060200161051390611220565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f90910116604081815273ffffffffffffffffffffffffffffffffffffffff85166020830152808201525f6060820152608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526105ab9291602001611483565b60405160208183030381529060405290507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610623575f5ffd5b505af1158015610635573d5f5f3e3d5ffd5b50506040517f7ed1ec7d00000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5553455f52414e44414d555f464143544f52590000000000000000000000000060448201525f9250737109709ecfa91a80626ff3989d68f67f5b1dd12d9150637ed1ec7d90606401602060405180830381865afa1580156106cf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106f3919061123a565b15610877576040517f350d56bf00000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f52414e44414d555f435245415445325f464143544f52595f434f4e545241435460448201527f5f414444524553530000000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063350d56bf90608401602060405180830381865afa1580156107b2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107d69190611450565b6040517fcdcb760a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff919091169063cdcb760a9061082d90601a90869060040161149f565b6020604051808303815f875af1158015610849573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061086d9190611450565b90508093506108d9565b5f601a5f1b8460405161088990611220565b73ffffffffffffffffffffffffffffffffffffffff90911681526040602082018190525f908201526060018190604051809103905ff59050801580156108d1573d5f5f3e3d5ffd5b509450849150505b61094e6040518060400160405280601581526020017f4465706c6f796d656e745f696e7075742e6a736f6e00000000000000000000008152506040518060400160405280601c81526020017f72616e646f6d6e65737353656e64657250726f7879416464726573730000000081525083610f46565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156109b5575f5ffd5b505af11580156109c7573d5f5f3e3d5ffd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663485cc955876109f06110a5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff9283166004820152911660248201526044015f604051808303815f87803b158015610a5a575f5ffd5b505af1158015610a6c573d5f5f3e3d5ffd5b50505050610a926040518060600160405280602d8152602001614098602d913982610eb1565b50505b5092915050565b60605f7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663d930a0e66040518163ffffffff1660e01b81526004015f60405180830381865afa158015610b09573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b4e91908101906112eb565b90508083604051602001610b639291906114b7565b604051602081830303815290604052915050919050565b5f5f60405180602001610b8c9061122d565b6020820181038252601f19601f8201166040525090507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610c09575f5ffd5b505af1158015610c1b573d5f5f3e3d5ffd5b50506040517f7ed1ec7d00000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5553455f52414e44414d555f464143544f5259000000000000000000000000006044820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9250637ed1ec7d9150606401602060405180830381865afa158015610cb3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cd7919061123a565b15610e58576040517f350d56bf00000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f52414e44414d555f435245415445325f464143544f52595f434f4e545241435460448201527f5f414444524553530000000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063350d56bf90608401602060405180830381865afa158015610d96573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dba9190611450565b6040517fcdcb760a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff919091169063cdcb760a90610e1190601a90859060040161149f565b6020604051808303815f875af1158015610e2d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e519190611450565b9150610e8b565b5f601a5f1b604051610e699061122d565b8190604051809103905ff5905080158015610e86573d5f5f3e3d5ffd5b509250505b610ead6040518060600160405280603681526020016140256036913983610eb1565b5090565b610f428282604051602401610ec79291906114f2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f319af333000000000000000000000000000000000000000000000000000000001790526111f5565b5050565b604080518082018252601a81527f6465706c6f796d656e742061646472657373657320696e707574000000000000602082015290517f972c60620000000000000000000000000000000000000000000000000000000081525f90737109709ecfa91a80626ff3989d68f67f5b1dd12d9063972c606290610fce90859088908890600401611529565b5f604051808303815f875af1158015610fe9573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261102e91908101906112eb565b9050737109709ecfa91a80626ff3989d68f67f5b1dd12d63e23cd19f8261105488610a9c565b6040518363ffffffff1660e01b8152600401611071929190611423565b5f604051808303815f87803b158015611088575f5ffd5b505af115801561109a573d5f5f3e3d5ffd5b505050505050505050565b6040517fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f505249564154455f4b455900000000000000000000000000000000000000000060448201525f908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c1978d1f90606401602060405180830381865afa15801561113d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111619190611574565b6040517fffa1864900000000000000000000000000000000000000000000000000000000815260048101829052909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa1580156111cb573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ef9190611450565b91505090565b6111fe81611201565b50565b5f6a636f6e736f6c652e6c6f6790505f5f835160208501845afa505050565b6104468061158c83390190565b612653806119d283390190565b5f6020828403121561124a575f5ffd5b81518015158114611259575f5ffd5b9392505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6112596020830184611260565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f602082840312156112fb575f5ffd5b815167ffffffffffffffff811115611311575f5ffd5b8201601f81018413611321575f5ffd5b805167ffffffffffffffff81111561133b5761133b6112be565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156113a7576113a76112be565b6040528181528282016020018610156113be575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f81518060208401855e5f93019283525090919050565b7f2e0000000000000000000000000000000000000000000000000000000000000081525f61125960018301846113db565b604081525f6114356040830185611260565b82810360208401526114478185611260565b95945050505050565b5f60208284031215611460575f5ffd5b815173ffffffffffffffffffffffffffffffffffffffff81168114611259575f5ffd5b5f61149761149183866113db565b846113db565b949350505050565b828152604060208201525f6114976040830184611260565b5f6114c282856113db565b7f2f7363726970742f6a736f6e2f000000000000000000000000000000000000008152611447600d8201856113db565b604081525f6115046040830185611260565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b606081525f61153b6060830186611260565b828103602084015261154d8186611260565b91505073ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b5f60208284031215611584575f5ffd5b505191905056fe608060405234801561000f575f5ffd5b5060405161044638038061044683398101604081905261002e9161024c565b818161003a8282610043565b50505050610331565b61004c826100a1565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561009557610090828261011c565b505050565b61009d61018f565b5050565b806001600160a01b03163b5f036100db57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051610138919061031b565b5f60405180830381855af49150503d805f8114610170576040519150601f19603f3d011682016040523d82523d5f602084013e610175565b606091505b5090925090506101868583836101b0565b95945050505050565b34156101ae5760405163b398979f60e01b815260040160405180910390fd5b565b6060826101c5576101c08261020f565b610208565b81511580156101dc57506001600160a01b0384163b155b1561020557604051639996b31560e01b81526001600160a01b03851660048201526024016100d2565b50805b9392505050565b80511561021f5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561025d575f5ffd5b82516001600160a01b0381168114610273575f5ffd5b60208401519092506001600160401b0381111561028e575f5ffd5b8301601f8101851361029e575f5ffd5b80516001600160401b038111156102b7576102b7610238565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102e5576102e5610238565b6040528181528282016020018710156102fc575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b6101088061033e5f395ff3fe608060405260043610601b575f3560e01c8063aaf10f42146023575b6021605d565b005b348015602d575f5ffd5b506034606b565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b606960656077565b60b5565b565b5f60726077565b905090565b5f60727f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b365f5f375f5f365f845af43d5f5f3e80801560ce573d5ff35b3d5ffdfea26469706673582212203a14936dfa35a4f93d2dbb66496c5b5d61ba92112a94605bb4b8c917080600b764736f6c634300081c003360a0604052306080525f600155348015610017575f5ffd5b50610020610025565b6100d7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100755760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d45780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516125566100fd5f395f818161123701528181611260015261149d01526125565ff3fe608060405260043610610199575f3560e01c806391d14854116100dc578063c8db658211610087578063d547741f11610062578063d547741f146105eb578063f8413b071461060a578063f8fa0d661461061e578063fb1a002a1461063d575f5ffd5b8063c8db65821461058e578063ca15c873146105ad578063cd802c91146105cc575f5ffd5b8063ad3cb1cc116100b7578063ad3cb1cc146104b8578063affed0e014610500578063c58343ef14610515575f5ffd5b806391d1485414610409578063a217fddf14610479578063a3246ad31461048c575f5ffd5b806352d1902d11610147578063775b839c11610122578063775b839c146103335780637d468106146103525780638a1f165a146103a25780639010d07c146103ea575f5ffd5b806352d1902d1461029e57806354fd4d50146102b257806375b238fc14610300575f5ffd5b806336568abe1161017757806336568abe1461024d578063485cc9551461026c5780634f1ef2861461028b575f5ffd5b806301ffc9a71461019d578063248a9ca3146101d15780632f2ff15d1461022c575b5f5ffd5b3480156101a8575f5ffd5b506101bc6101b7366004611f2b565b61065e565b60405190151581526020015b60405180910390f35b3480156101dc575f5ffd5b5061021e6101eb366004611f6a565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101c8565b348015610237575f5ffd5b5061024b610246366004611fa9565b6106b9565b005b348015610258575f5ffd5b5061024b610267366004611fa9565b610702565b348015610277575f5ffd5b5061024b610286366004611fd3565b610760565b61024b610299366004612077565b610acd565b3480156102a9575f5ffd5b5061021e610aec565b3480156102bd575f5ffd5b5060408051808201909152600581527f302e302e3100000000000000000000000000000000000000000000000000000060208201525b6040516101c89190612186565b34801561030b575f5ffd5b5061021e7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b34801561033e575f5ffd5b506102f361034d366004612198565b610b1a565b34801561035d575f5ffd5b505f5461037d9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c8565b3480156103ad575f5ffd5b506102f36040518060400160405280600581526020017f424e32353400000000000000000000000000000000000000000000000000000081525081565b3480156103f5575f5ffd5b5061037d6104043660046121ec565b610b83565b348015610414575f5ffd5b506101bc610423366004611fa9565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b348015610484575f5ffd5b5061021e5f81565b348015610497575f5ffd5b506104ab6104a6366004611f6a565b610bc3565b6040516101c8919061220c565b3480156104c3575f5ffd5b506102f36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561050b575f5ffd5b5061021e60015481565b348015610520575f5ffd5b5061058161052f366004611f6a565b604080518082019091525f8082526020820152505f908152600260209081526040918290208251808401909352805483526001015473ffffffffffffffffffffffffffffffffffffffff169082015290565b6040516101c89190612264565b348015610599575f5ffd5b5061024b6105a8366004612291565b610c06565b3480156105b8575f5ffd5b5061021e6105c7366004611f6a565b610c91565b3480156105d7575f5ffd5b506101bc6105e6366004611f6a565b610cc8565b3480156105f6575f5ffd5b5061024b610605366004611fa9565b610d59565b348015610615575f5ffd5b5061021e610d9c565b348015610629575f5ffd5b5061024b610638366004612308565b610fbc565b348015610648575f5ffd5b50610651611051565b6040516101c89190612321565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f0000000000000000000000000000000000000000000000000000000014806106b357506106b3826110d1565b92915050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546106f281611167565b6106fc8383611174565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610751576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61075b82826111c9565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f811580156107aa5750825b90505f8267ffffffffffffffff1660011480156107c65750303b155b9050811580156107d4575080155b1561080b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561086c5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610874611215565b61087c611215565b6108a67fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177587611174565b610911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4772616e7420726f6c65206661696c656400000000000000000000000000000060448201526064015b60405180910390fd5b61091b5f87611174565b610981576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4772616e7420726f6c65206661696c65640000000000000000000000000000006044820152606401610908565b73ffffffffffffffffffffffffffffffffffffffff8716610a24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f43616e6e6f7420736574207a65726f2061646472657373206173207369676e6160448201527f747572652073656e6465720000000000000000000000000000000000000000006064820152608401610908565b5f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161790558315610ac45784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610ad561121f565b610ade82611323565b610ae8828261134c565b5050565b5f610af5611485565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b8051604051606091610b329160200190815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830152016040516020818303038152906040529050919050565b5f8281527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260408220610bbb90846114f4565b949350505050565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e823717059320006020819052604090912060609190610bff906114ff565b9392505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610c86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4f6e6c79207369676e617475726553656e6465722063616e2063616c6c0000006044820152606401610908565b61075b83838361150b565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260408220610bff9061177c565b5f80546040517fcd802c910000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff9091169063cd802c9190602401602060405180830381865afa158015610d35573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106b39190612383565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610d9281611167565b6106fc83836111c9565b5f6001805f828254610dae91906123cf565b90915550506040805180820190915260015481523360208201525f610dd282610b1a565b60408051602080820183525f8083525483518085018552600581527f424e3235340000000000000000000000000000000000000000000000000000009281019290925292517f95b8d073000000000000000000000000000000000000000000000000000000008152939450909273ffffffffffffffffffffffffffffffffffffffff909216916395b8d07391610e6e91869086906004016123e2565b6020604051808303815f875af1158015610e8a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eae9190612424565b5f818152600260208181526040808420885181558883018051600192830180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff9384161790915560038054808601825598528b517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b989097029788019690965590517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c9096018054909516951694909417909255915490514281529296503392909187917feee7195b6cee0fa7044c3af0b86fe2febb1d2703d71191f44052ba0d60ffda64910160405180910390a450505090565b610fe57fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611167565b5f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560405190917f229f6c3b095d683755a99ab458956747a8b7066c3dd42927d850631c34c238f191a250565b60606003805480602002602001604051908101604052809291908181526020015f905b828210156110c8575f84815260209081902060408051808201909152600285029091018054825260019081015473ffffffffffffffffffffffffffffffffffffffff16828401529083529092019101611074565b50505050905090565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806106b357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146106b3565b6111718133611785565b50565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000816111a1858561182b565b90508015610bbb575f8581526020839052604090206111c09085611949565b50949350505050565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000816111f6858561196a565b90508015610bbb575f8581526020839052604090206111c09085611a46565b61121d611a67565b565b3073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614806112ec57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166112d37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561121d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111717fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611167565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113d1575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526113ce91810190612424565b60015b61141f576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610908565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc811461147b576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401610908565b61075b8383611ace565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461121d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610bff8383611b30565b60605f610bff83611b56565b5f838152600260209081526040918290208251808401909352805480845260019091015473ffffffffffffffffffffffffffffffffffffffff16918301919091526115d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f526571756573742077697468207468617420726571756573744944206469642060448201527f6e6f7420657869737400000000000000000000000000000000000000000000006064820152608401610908565b5f83836040516115e992919061243b565b604051809103902090505f826020015173ffffffffffffffffffffffffffffffffffffffff1663431ac65760e01b8784604051602401611633929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516116bc919061244a565b5f604051808303815f865af19150503d805f81146116f5576040519150601f19603f3d011682016040523d82523d5f602084013e6116fa565b606091505b5050905080611738576040517f8f67472d00000000000000000000000000000000000000000000000000000000815260048101879052602401610908565b857fb74b3204a538cd8021662d42e794681ddc339924ef675b8fd11e9eaf6aa19eb583878760405161176c93929190612460565b60405180910390a2505050505050565b5f6106b3825490565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610ae8576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610908565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff16611940575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556118dc3390565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506106b3565b5f9150506106b3565b5f610bff8373ffffffffffffffffffffffffffffffffffffffff8416611baf565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff1615611940575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506106b3565b5f610bff8373ffffffffffffffffffffffffffffffffffffffff8416611bfb565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661121d576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ad782611cd5565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115611b285761075b8282611da3565b610ae8611e22565b5f825f018281548110611b4557611b456124b3565b905f5260205f200154905092915050565b6060815f01805480602002602001604051908101604052809291908181526020018280548015611ba357602002820191905f5260205f20905b815481526020019060010190808311611b8f575b50505050509050919050565b5f818152600183016020526040812054611bf457508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556106b3565b505f6106b3565b5f8181526001830160205260408120548015611940575f611c1d6001836124e0565b85549091505f90611c30906001906124e0565b9050808214611c8f575f865f018281548110611c4e57611c4e6124b3565b905f5260205f200154905080875f018481548110611c6e57611c6e6124b3565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080611ca057611ca06124f3565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506106b3565b8073ffffffffffffffffffffffffffffffffffffffff163b5f03611d3d576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610908565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60605f5f8473ffffffffffffffffffffffffffffffffffffffff1684604051611dcc919061244a565b5f60405180830381855af49150503d805f8114611e04576040519150601f19603f3d011682016040523d82523d5f602084013e611e09565b606091505b5091509150611e19858383611e5a565b95945050505050565b341561121d576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082611e6f57611e6a82611ee9565b610bff565b8151158015611e93575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611ee2576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610908565b5092915050565b805115611ef95780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60208284031215611f3b575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610bff575f5ffd5b5f60208284031215611f7a575f5ffd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611fa4575f5ffd5b919050565b5f5f60408385031215611fba575f5ffd5b82359150611fca60208401611f81565b90509250929050565b5f5f60408385031215611fe4575f5ffd5b611fed83611f81565b9150611fca60208401611f81565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561206f5761206f611ffb565b604052919050565b5f5f60408385031215612088575f5ffd5b61209183611f81565b9150602083013567ffffffffffffffff8111156120ac575f5ffd5b8301601f810185136120bc575f5ffd5b803567ffffffffffffffff8111156120d6576120d6611ffb565b61210760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612028565b81815286602083850101111561211b575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f610bff602083018461213a565b5f60408284031280156121a9575f5ffd5b506040805190810167ffffffffffffffff811182821017156121cd576121cd611ffb565b604052823581526121e060208401611f81565b60208201529392505050565b5f5f604083850312156121fd575f5ffd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b8181101561225957835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101612225565b509095945050505050565b8151815260208083015173ffffffffffffffffffffffffffffffffffffffff1690820152604081016106b3565b5f5f5f604084860312156122a3575f5ffd5b83359250602084013567ffffffffffffffff8111156122c0575f5ffd5b8401601f810186136122d0575f5ffd5b803567ffffffffffffffff8111156122e6575f5ffd5b8660208284010111156122f7575f5ffd5b939660209190910195509293505050565b5f60208284031215612318575f5ffd5b610bff82611f81565b602080825282518282018190525f918401906040840190835b818110156122595761236d8385518051825260209081015173ffffffffffffffffffffffffffffffffffffffff16910152565b602093909301926040929092019160010161233a565b5f60208284031215612393575f5ffd5b81518015158114610bff575f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156106b3576106b36123a2565b606081525f6123f4606083018661213a565b8281036020840152612406818661213a565b9050828103604084015261241a818561213a565b9695505050505050565b5f60208284031215612434575f5ffd5b5051919050565b818382375f9101908152919050565b5f82518060208501845e5f920191825250919050565b83815260406020820152816040820152818360608301375f818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b818103818111156106b3576106b36123a2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea2646970667358221220dceaab71410f9aca3092ce386ea2cd2c0a9afa36ac96d9d087ba45c3f73ba79264736f6c634300081c003352616e646f6d6e65737353656e64657220696d706c656d656e746174696f6e20636f6e7472616374206465706c6f7965642061743a2052616e646f6d6e65737353656e64657220636f6e747261637420757067726164656420746f206e657720696d706c656d656e746174696f6e2061743a2052616e646f6d6e65737353656e6465722070726f787920636f6e7472616374206465706c6f7965642061743a20a26469706673582212200c38bb897f7c62095ea7702ef85035574ee31af732b84d99d6aab319a0d0015064736f6c634300081c0033\";\n\ntype DeployRandomnessSenderConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: DeployRandomnessSenderConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class DeployRandomnessSender__factory extends ContractFactory {\n  constructor(...args: DeployRandomnessSenderConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      DeployRandomnessSender & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(\n    runner: ContractRunner | null\n  ): DeployRandomnessSender__factory {\n    return super.connect(runner) as DeployRandomnessSender__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): DeployRandomnessSenderInterface {\n    return new Interface(_abi) as DeployRandomnessSenderInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): DeployRandomnessSender {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as DeployRandomnessSender;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type {\n  DeploySignatureSchemeAddressProvider,\n  DeploySignatureSchemeAddressProviderInterface,\n} from \"../../DeploySignatureSchemeAddressProvider.s.sol/DeploySignatureSchemeAddressProvider\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"IS_SCRIPT\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"run\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6080604052600c805462ff00ff191662010001179055348015601f575f5ffd5b506118898061002d5f395ff3fe608060405234801561000f575f5ffd5b5060043610610034575f3560e01c8063c040622614610038578063f8ccbf4714610042575b5f5ffd5b610040610069565b005b600c546100559062010000900460ff1681565b604051901515815260200160405180910390f35b610071610074565b50565b5f5f6040518060200161008690610904565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f909101166040526100bf6104bf565b6040805173ffffffffffffffffffffffffffffffffffffffff909216602083015201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261011d9291602001610928565b60405160208183030381529060405290507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610195575f5ffd5b505af11580156101a7573d5f5f3e3d5ffd5b50506040517f7ed1ec7d00000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5553455f52414e44414d555f464143544f52590000000000000000000000000060448201525f9250737109709ecfa91a80626ff3989d68f67f5b1dd12d9150637ed1ec7d90606401602060405180830381865afa158015610241573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102659190610944565b156103e9576040517f350d56bf00000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f52414e44414d555f435245415445325f464143544f52595f434f4e545241435460448201527f5f414444524553530000000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063350d56bf90608401602060405180830381865afa158015610324573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610348919061096a565b6040517fcdcb760a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff919091169063cdcb760a9061039f90601a9086906004016109e9565b6020604051808303815f875af11580156103bb573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103df919061096a565b9050809250610440565b601a6103f36104bf565b6040516103ff90610904565b73ffffffffffffffffffffffffffffffffffffffff90911681526020018190604051809103905ff5905080158015610439573d5f5f3e3d5ffd5b5092508290505b6104986040518060400160405280601581526020017f4465706c6f796d656e745f696e7075742e6a736f6e000000000000000000000081525060405180606001604052806025815260200161182f602591398361060f565b6104ba6040518060600160405280603581526020016117fa603591398261076e565b505090565b6040517fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f505249564154455f4b455900000000000000000000000000000000000000000060448201525f908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c1978d1f90606401602060405180830381865afa158015610557573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061057b9190610a01565b6040517fffa1864900000000000000000000000000000000000000000000000000000000815260048101829052909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa1580156105e5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610609919061096a565b91505090565b604080518082018252601a81527f6465706c6f796d656e742061646472657373657320696e707574000000000000602082015290517f972c60620000000000000000000000000000000000000000000000000000000081525f90737109709ecfa91a80626ff3989d68f67f5b1dd12d9063972c60629061069790859088908890600401610a18565b5f604051808303815f875af11580156106b2573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526106f79190810190610a90565b9050737109709ecfa91a80626ff3989d68f67f5b1dd12d63e23cd19f8261071d88610803565b6040518363ffffffff1660e01b815260040161073a929190610b80565b5f604051808303815f87803b158015610751575f5ffd5b505af1158015610763573d5f5f3e3d5ffd5b505050505050505050565b6107ff8282604051602401610784929190610bad565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f319af333000000000000000000000000000000000000000000000000000000001790526108e1565b5050565b60605f7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663d930a0e66040518163ffffffff1660e01b81526004015f60405180830381865afa158015610870573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108b59190810190610a90565b905080836040516020016108ca929190610be4565b604051602081830303815290604052915050919050565b610071815f6a636f6e736f6c652e6c6f6790505f5f835160208501845afa505050565b610bda80610c2083390190565b5f81518060208401855e5f93019283525090919050565b5f61093c6109368386610911565b84610911565b949350505050565b5f60208284031215610954575f5ffd5b81518015158114610963575f5ffd5b9392505050565b5f6020828403121561097a575f5ffd5b815173ffffffffffffffffffffffffffffffffffffffff81168114610963575f5ffd5b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b828152604060208201525f61093c604083018461099d565b5f60208284031215610a11575f5ffd5b5051919050565b606081525f610a2a606083018661099d565b8281036020840152610a3c818661099d565b91505073ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60208284031215610aa0575f5ffd5b815167ffffffffffffffff811115610ab6575f5ffd5b8201601f81018413610ac6575f5ffd5b805167ffffffffffffffff811115610ae057610ae0610a63565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715610b4c57610b4c610a63565b604052818152828201602001861015610b63575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b604081525f610b92604083018561099d565b8281036020840152610ba4818561099d565b95945050505050565b604081525f610bbf604083018561099d565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b5f610bef8285610911565b7f2f7363726970742f6a736f6e2f000000000000000000000000000000000000008152610ba4600d82018561091156fe608060405234801561000f575f5ffd5b50604051610bda380380610bda83398101604081905261002e916101a7565b6001600160a01b03811661003f5750335b6100495f826100fe565b61008e5760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b60448201526064015b60405180910390fd5b6100b87fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775826100fe565b6100f85760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b6044820152606401610085565b506101d4565b5f828152602081815260408083206001600160a01b038516845290915281205460ff1661019e575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101563390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101a1565b505f5b92915050565b5f602082840312156101b7575f5ffd5b81516001600160a01b03811681146101cd575f5ffd5b9392505050565b6109f9806101e15f395ff3fe608060405234801561000f575f5ffd5b50600436106100c4575f3560e01c80635bb09cf81161007d578063a217fddf11610058578063a217fddf146101fd578063bab867da14610204578063d547741f14610217575f5ffd5b80635bb09cf81461015b57806375b238fc1461019357806391d14854146101ba575f5ffd5b80632f2ff15d116100ad5780632f2ff15d146101205780632fc9fa331461013557806336568abe14610148575f5ffd5b806301ffc9a7146100c8578063248a9ca3146100f0575b5f5ffd5b6100db6100d6366004610831565b61022a565b60405190151581526020015b60405180910390f35b6101126100fe366004610877565b5f9081526020819052604090206001015490565b6040519081526020016100e7565b61013361012e3660046108b6565b6102c2565b005b6100db610143366004610925565b6102ec565b6101336101563660046108b6565b610346565b61016e610169366004610925565b6103a4565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100e7565b6101127fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b6100db6101c83660046108b6565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101125f81565b610133610212366004610964565b6103e5565b6101336102253660046108b6565b6105c5565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102bc57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f828152602081905260409020600101546102dc816105e9565b6102e683836105f6565b50505050565b5f5f73ffffffffffffffffffffffffffffffffffffffff16600184846040516103169291906109b4565b9081526040519081900360200190205473ffffffffffffffffffffffffffffffffffffffff161415905092915050565b73ffffffffffffffffffffffffffffffffffffffff81163314610395576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61039f82826106ef565b505050565b5f600183836040516103b79291906109b4565b9081526040519081900360200190205473ffffffffffffffffffffffffffffffffffffffff16905092915050565b61040e7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756105e9565b73ffffffffffffffffffffffffffffffffffffffff811615801590610449575073ffffffffffffffffffffffffffffffffffffffff81163b15155b6104da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f496e76616c696420636f6e7472616374206164647265737320666f722073636860448201527f656d65416464726573730000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b80600184846040516104ed9291906109b4565b908152604051908190036020018120805473ffffffffffffffffffffffffffffffffffffffff939093167fffffffffffffffffffffffff00000000000000000000000000000000000000009093169290921790915560019061055290859085906109b4565b9081526040519081900360200181205473ffffffffffffffffffffffffffffffffffffffff169061058690859085906109b4565b604051908190038120428252907f0a1cd6a1e0a7b200d28ead555f3cee96e0d2def049535fbcfdc2926bc4cec5049060200160405180910390a3505050565b5f828152602081905260409020600101546105df816105e9565b6102e683836106ef565b6105f381336107a8565b50565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff166106e8575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556106863390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102bc565b505f6102bc565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16156106e8575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102bc565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661082d576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044016104d1565b5050565b5f60208284031215610841575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610870575f5ffd5b9392505050565b5f60208284031215610887575f5ffd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146108b1575f5ffd5b919050565b5f5f604083850312156108c7575f5ffd5b823591506108d76020840161088e565b90509250929050565b5f5f83601f8401126108f0575f5ffd5b50813567ffffffffffffffff811115610907575f5ffd5b60208301915083602082850101111561091e575f5ffd5b9250929050565b5f5f60208385031215610936575f5ffd5b823567ffffffffffffffff81111561094c575f5ffd5b610958858286016108e0565b90969095509350505050565b5f5f5f60408486031215610976575f5ffd5b833567ffffffffffffffff81111561098c575f5ffd5b610998868287016108e0565b90945092506109ab90506020850161088e565b90509250925092565b818382375f910190815291905056fea26469706673582212204365ebfe0316198161211e6648f602ef30b54b8310b64cd331285d5e76802ca464736f6c634300081c00335369676e6174757265536368656d654164647265737350726f766964657220636f6e7472616374206465706c6f7965642061743a207369676e6174757265536368656d654164647265737350726f766964657241646472657373a26469706673582212204af16a0440ca42be9723af4818ad20ceba3ae4d1a5b943a2e92c80af9a8c885c64736f6c634300081c0033\";\n\ntype DeploySignatureSchemeAddressProviderConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: DeploySignatureSchemeAddressProviderConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class DeploySignatureSchemeAddressProvider__factory extends ContractFactory {\n  constructor(...args: DeploySignatureSchemeAddressProviderConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      DeploySignatureSchemeAddressProvider & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(\n    runner: ContractRunner | null\n  ): DeploySignatureSchemeAddressProvider__factory {\n    return super.connect(\n      runner\n    ) as DeploySignatureSchemeAddressProvider__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): DeploySignatureSchemeAddressProviderInterface {\n    return new Interface(_abi) as DeploySignatureSchemeAddressProviderInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): DeploySignatureSchemeAddressProvider {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as DeploySignatureSchemeAddressProvider;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type {\n  DeploySignatureSender,\n  DeploySignatureSenderInterface,\n} from \"../../DeploySignatureSender.s.sol/DeploySignatureSender\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"IS_SCRIPT\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"run\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6080604052600c805462ff00ff191662010001179055348015601f575f5ffd5b506165008061002d5f395ff3fe608060405234801561000f575f5ffd5b5060043610610034575f3560e01c8063c040622614610038578063f8ccbf4714610042575b5f5ffd5b610040610069565b005b600c546100559062010000900460ff1681565b604051901515815260200160405180910390f35b6040517f7ed1ec7d00000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f49535f555047524144450000000000000000000000000000000000000000000060448201525f90737109709ecfa91a80626ff3989d68f67f5b1dd12d90637ed1ec7d90606401602060405180830381865afa1580156100ff573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101239190611562565b90505f61017d6040518060400160405280601581526020017f4465706c6f796d656e745f696e7075742e6a736f6e00000000000000000000008152506040518060600160405280602581526020016164716025913961018e565b9050610189818361032a565b505050565b5f5f61019984610a60565b6040517f60f9bb110000000000000000000000000000000000000000000000000000000081529091505f90737109709ecfa91a80626ff3989d68f67f5b1dd12d906360f9bb11906101ee9085906004016115d4565b5f60405180830381865afa158015610208573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261024d9190810190611613565b90505f84604051602001610261919061171a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f1e19e6570000000000000000000000000000000000000000000000000000000082529150737109709ecfa91a80626ff3989d68f67f5b1dd12d90631e19e657906102e1908590859060040161174b565b602060405180830381865afa1580156102fc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103209190611778565b9695505050505050565b5f5f610334610b3e565b905082156104e5577f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156103a3575f5ffd5b505af11580156103b5573d5f5f3e3d5ffd5b505050505f61042e6040518060400160405280601581526020017f4465706c6f796d656e745f696e7075742e6a736f6e00000000000000000000008152506040518060400160405280601b81526020017f7369676e617475726553656e64657250726f787941646472657373000000000081525061018e565b604080517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201929092525f6044820152919250821690634f1ef286906064015f604051808303815f87803b1580156104a6575f5ffd5b505af11580156104b8573d5f5f3e3d5ffd5b505050506104de6040518060600160405280603c8152602001616435603c913983610e75565b9150610a59565b5f604051806020016104f690611505565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f90910116604081815273ffffffffffffffffffffffffffffffffffffffff85166020830152808201525f6060820152608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261058e92916020016117ab565b60405160208183030381529060405290507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610606575f5ffd5b505af1158015610618573d5f5f3e3d5ffd5b50506040517f7ed1ec7d00000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5553455f52414e44414d555f464143544f52590000000000000000000000000060448201525f9250737109709ecfa91a80626ff3989d68f67f5b1dd12d9150637ed1ec7d90606401602060405180830381865afa1580156106b2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106d69190611562565b1561085a576040517f350d56bf00000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f52414e44414d555f435245415445325f464143544f52595f434f4e545241435460448201527f5f414444524553530000000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063350d56bf90608401602060405180830381865afa158015610795573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107b99190611778565b6040517fcdcb760a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff919091169063cdcb760a9061081090601a9086906004016117c7565b6020604051808303815f875af115801561082c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108509190611778565b90508093506108bc565b5f601a5f1b8460405161086c90611505565b73ffffffffffffffffffffffffffffffffffffffff90911681526040602082018190525f908201526060018190604051809103905ff59050801580156108b4573d5f5f3e3d5ffd5b509450849150505b6109316040518060400160405280601581526020017f4465706c6f796d656e745f696e7075742e6a736f6e00000000000000000000008152506040518060400160405280601b81526020017f7369676e617475726553656e64657250726f787941646472657373000000000081525083610f0a565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610998575f5ffd5b505af11580156109aa573d5f5f3e3d5ffd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663702ef38c6109d2611069565b516109db611069565b602001516109e761138a565b8a6040518563ffffffff1660e01b8152600401610a079493929190611807565b5f604051808303815f87803b158015610a1e575f5ffd5b505af1158015610a30573d5f5f3e3d5ffd5b50505050610a566040518060600160405280602c8152602001616409602c913982610e75565b50505b5092915050565b60605f7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663d930a0e66040518163ffffffff1660e01b81526004015f60405180830381865afa158015610acd573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b129190810190611613565b90508083604051602001610b27929190611863565b604051602081830303815290604052915050919050565b5f5f60405180602001610b5090611512565b6020820181038252601f19601f8201166040525090507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610bcd575f5ffd5b505af1158015610bdf573d5f5f3e3d5ffd5b50506040517f7ed1ec7d00000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5553455f52414e44414d555f464143544f5259000000000000000000000000006044820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9250637ed1ec7d9150606401602060405180830381865afa158015610c77573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9b9190611562565b15610e1c576040517f350d56bf00000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f52414e44414d555f435245415445325f464143544f52595f434f4e545241435460448201527f5f414444524553530000000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063350d56bf90608401602060405180830381865afa158015610d5a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d7e9190611778565b6040517fcdcb760a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff919091169063cdcb760a90610dd590601a9085906004016117c7565b6020604051808303815f875af1158015610df1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e159190611778565b9150610e4f565b5f601a5f1b604051610e2d90611512565b8190604051809103905ff5905080158015610e4a573d5f5f3e3d5ffd5b509250505b610e716040518060600160405280603581526020016164966035913983610e75565b5090565b610f068282604051602401610e8b92919061189e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f319af333000000000000000000000000000000000000000000000000000000001790526114da565b5050565b604080518082018252601a81527f6465706c6f796d656e742061646472657373657320696e707574000000000000602082015290517f972c60620000000000000000000000000000000000000000000000000000000081525f90737109709ecfa91a80626ff3989d68f67f5b1dd12d9063972c606290610f92908590889088906004016118d5565b5f604051808303815f875af1158015610fad573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610ff29190810190611613565b9050737109709ecfa91a80626ff3989d68f67f5b1dd12d63e23cd19f8261101888610a60565b6040518363ffffffff1660e01b815260040161103592919061174b565b5f604051808303815f87803b15801561104c575f5ffd5b505af115801561105e573d5f5f3e3d5ffd5b505050505050505050565b61107161151f565b60408051608081018083527fc1978d1f00000000000000000000000000000000000000000000000000000000905260206084820152601160a48201527f424c535f5055424c49435f4b45595f583000000000000000000000000000000060c4820152908190810180737109709ecfa91a80626ff3989d68f67f5b1dd12d63c1978d1f60e48501602060405180830381865afa158015611112573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111369190611920565b81526040517fc1978d1f000000000000000000000000000000000000000000000000000000008152602060048201819052601160248301527f424c535f5055424c49435f4b45595f5831000000000000000000000000000000604483015290910190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c1978d1f90606401602060405180830381865afa1580156111d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111f69190611920565b9052815260408051808201918290527fc1978d1f00000000000000000000000000000000000000000000000000000000909152602060448201819052601160648301527f424c535f5055424c49435f4b45595f593000000000000000000000000000000060848301529091019080737109709ecfa91a80626ff3989d68f67f5b1dd12d63c1978d1f60a48301602060405180830381865afa15801561129d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112c19190611920565b81526040517fc1978d1f000000000000000000000000000000000000000000000000000000008152602060048201819052601160248301527f424c535f5055424c49435f4b45595f5931000000000000000000000000000000604483015290910190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c1978d1f90606401602060405180830381865afa15801561135d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113819190611920565b90529052919050565b6040517fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f505249564154455f4b455900000000000000000000000000000000000000000060448201525f908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c1978d1f90606401602060405180830381865afa158015611422573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114469190611920565b6040517fffa1864900000000000000000000000000000000000000000000000000000000815260048101829052909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa1580156114b0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114d49190611778565b91505090565b6114e3816114e6565b50565b5f6a636f6e736f6c652e6c6f6790505f5f835160208501845afa505050565b6104468061193883390190565b61468b80611d7e83390190565b6040518060400160405280611532611544565b815260200161153f611544565b905290565b60405180604001604052806002906020820280368337509192915050565b5f60208284031215611572575f5ffd5b81518015158114611581575f5ffd5b9392505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6115816020830184611588565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60208284031215611623575f5ffd5b815167ffffffffffffffff811115611639575f5ffd5b8201601f81018413611649575f5ffd5b805167ffffffffffffffff811115611663576116636115e6565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156116cf576116cf6115e6565b6040528181528282016020018610156116e6575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f81518060208401855e5f93019283525090919050565b7f2e0000000000000000000000000000000000000000000000000000000000000081525f6115816001830184611703565b604081525f61175d6040830185611588565b828103602084015261176f8185611588565b95945050505050565b5f60208284031215611788575f5ffd5b815173ffffffffffffffffffffffffffffffffffffffff81168114611581575f5ffd5b5f6117bf6117b98386611703565b84611703565b949350505050565b828152604060208201525f6117bf6040830184611588565b805f5b60028110156118015781518452602093840193909101906001016117e2565b50505050565b60c0810161181582876117df565b61182260408301866117df565b73ffffffffffffffffffffffffffffffffffffffff8416608083015273ffffffffffffffffffffffffffffffffffffffff831660a083015295945050505050565b5f61186e8285611703565b7f2f7363726970742f6a736f6e2f00000000000000000000000000000000000000815261176f600d820185611703565b604081525f6118b06040830185611588565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b606081525f6118e76060830186611588565b82810360208401526118f98186611588565b91505073ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b5f60208284031215611930575f5ffd5b505191905056fe608060405234801561000f575f5ffd5b5060405161044638038061044683398101604081905261002e9161024c565b818161003a8282610043565b50505050610331565b61004c826100a1565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561009557610090828261011c565b505050565b61009d61018f565b5050565b806001600160a01b03163b5f036100db57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051610138919061031b565b5f60405180830381855af49150503d805f8114610170576040519150601f19603f3d011682016040523d82523d5f602084013e610175565b606091505b5090925090506101868583836101b0565b95945050505050565b34156101ae5760405163b398979f60e01b815260040160405180910390fd5b565b6060826101c5576101c08261020f565b610208565b81511580156101dc57506001600160a01b0384163b155b1561020557604051639996b31560e01b81526001600160a01b03851660048201526024016100d2565b50805b9392505050565b80511561021f5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561025d575f5ffd5b82516001600160a01b0381168114610273575f5ffd5b60208401519092506001600160401b0381111561028e575f5ffd5b8301601f8101851361029e575f5ffd5b80516001600160401b038111156102b7576102b7610238565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102e5576102e5610238565b6040528181528282016020018710156102fc575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b6101088061033e5f395ff3fe608060405260043610601b575f3560e01c8063aaf10f42146023575b6021605d565b005b348015602d575f5ffd5b506034606b565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b606960656077565b60b5565b565b5f60726077565b905090565b5f60727f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b365f5f375f5f365f845af43d5f5f3e80801560ce573d5ff35b3d5ffdfea26469706673582212203a14936dfa35a4f93d2dbb66496c5b5d61ba92112a94605bb4b8c917080600b764736f6c634300081c0033306080525f80805560e081815261010082905260a08181526101606040526101208381526101409390935260c0929092526001906100409082906002610124565b5060208201516100569060028084019190610124565b505050348015610064575f5ffd5b5061006d610072565b610176565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100c25760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101215780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b8260028101928215610152579160200282015b82811115610152578251825591602001919060010190610137565b5061015e929150610162565b5090565b5b8082111561015e575f8155600101610163565b6080516144ef61019c5f395f8181612b7101528181612b9a0152612dbb01526144ef5ff3fe6080604052600436106101f5575f3560e01c806375b238fc11610117578063acae9fee116100ac578063ca15c8731161007c578063d547741f11610062578063d547741f146106c0578063e63b5d58146106df578063e6b3ca71146106f3575f5ffd5b8063ca15c87314610682578063cd802c91146106a1575f5ffd5b8063acae9fee146105db578063ad3cb1cc146105ef578063b094728914610637578063c58343ef14610656575f5ffd5b806395b8d073116100e757806395b8d07314610551578063a217fddf14610570578063a3246ad314610583578063ac9650d8146105af575f5ffd5b806375b238fc1461043857806381d12c581461046b5780639010d07c1461049d57806391d14854146104e1575f5ffd5b80634b96e1661161018d578063571d70871161015d578063571d7087146103d25780635eab2b20146103e65780636f421ea914610405578063702ef38c14610419575f5ffd5b80634b96e1661461033c5780634f1ef2861461035d57806352d1902d1461037057806354fd4d5014610384575f5ffd5b80632e334452116101c85780632e334452146102c85780632f2ff15d146102ea57806336568abe1461030957806347c0318614610328575f5ffd5b80630138c60d146101f957806301ffc9a71461021a57806316cc9a981461024e578063248a9ca31461026d575b5f5ffd5b348015610204575f5ffd5b506102186102133660046137bd565b61071f565b005b348015610225575f5ffd5b506102396102343660046137d4565b610c74565b60405190151581526020015b60405180910390f35b348015610259575f5ffd5b50610218610268366004613834565b610ccf565b348015610278575f5ffd5b506102ba6102873660046137bd565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610245565b3480156102d3575f5ffd5b506102dc610d66565b604051610245929190613871565b3480156102f5575f5ffd5b5061021861030436600461388c565b610de1565b348015610314575f5ffd5b5061021861032336600461388c565b610e2a565b348015610333575f5ffd5b506102ba5f5481565b348015610347575f5ffd5b50610350610e83565b60405161024591906138ba565b61021861036b366004613981565b610e94565b34801561037b575f5ffd5b506102ba610eb3565b34801561038f575f5ffd5b5060408051808201909152600581527f302e302e3100000000000000000000000000000000000000000000000000000060208201525b6040516102459190613a3c565b3480156103dd575f5ffd5b50610350610ee1565b3480156103f1575f5ffd5b50610218610400366004613a93565b610eed565b348015610410575f5ffd5b5061035061163b565b348015610424575f5ffd5b50610218610433366004613b48565b611647565b348015610443575f5ffd5b506102ba7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b348015610476575f5ffd5b5061048a6104853660046137bd565b6119ee565b6040516102459796959493929190613b9f565b3480156104a8575f5ffd5b506104bc6104b7366004613c32565b611ce4565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610245565b3480156104ec575f5ffd5b506102396104fb36600461388c565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b34801561055c575f5ffd5b506102ba61056b366004613c52565b611d24565b34801561057b575f5ffd5b506102ba5f81565b34801561058e575f5ffd5b506105a261059d3660046137bd565b612429565b6040516102459190613cf1565b3480156105ba575f5ffd5b506105ce6105c9366004613d3e565b61246c565b6040516102459190613daf565b3480156105e6575f5ffd5b506103c5612552565b3480156105fa575f5ffd5b506103c56040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b348015610642575f5ffd5b506102396106513660046137bd565b6125cd565b348015610661575f5ffd5b506106756106703660046137bd565b6125d9565b6040516102459190613e30565b34801561068d575f5ffd5b506102ba61069c3660046137bd565b612951565b3480156106ac575f5ffd5b506102396106bb3660046137bd565b612988565b3480156106cb575f5ffd5b506102186106da36600461388c565b6129a5565b3480156106ea575f5ffd5b506102ba6129e8565b3480156106fe575f5ffd5b506006546104bc9073ffffffffffffffffffffffffffffffffffffffff1681565b610728816125cd565b6107b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4e6f20726571756573742077697468207370656369666965642072657175657360448201527f74494420686173206572726f726564000000000000000000000000000000000060648201526084015b60405180910390fd5b5f81815260056020526040808220815160e081019092528054829082906107df90613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461080b90613f01565b80156108565780601f1061082d57610100808354040283529160200191610856565b820191905f5260205f20905b81548152906001019060200180831161083957829003601f168201915b5050505050815260200160018201805461086f90613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461089b90613f01565b80156108e65780601f106108bd576101008083540402835291602001916108e6565b820191905f5260205f20905b8154815290600101906020018083116108c957829003601f168201915b505050505081526020016002820180546108ff90613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461092b90613f01565b80156109765780601f1061094d57610100808354040283529160200191610976565b820191905f5260205f20905b81548152906001019060200180831161095957829003601f168201915b5050505050815260200160038201805461098f90613f01565b80601f01602080910402602001604051908101604052809291908181526020018280546109bb90613f01565b8015610a065780601f106109dd57610100808354040283529160200191610a06565b820191905f5260205f20905b8154815290600101906020018083116109e957829003601f168201915b5050509183525050600482015473ffffffffffffffffffffffffffffffffffffffff166020820152600582018054604090920191610a4390613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6f90613f01565b8015610aba5780601f10610a9157610100808354040283529160200191610aba565b820191905f5260205f20905b815481529060010190602001808311610a9d57829003601f168201915b50505091835250506006919091015460ff161515602090910152608081015160a08201516040519293505f9273ffffffffffffffffffffffffffffffffffffffff909216917fc8db65820000000000000000000000000000000000000000000000000000000091610b3091879190602401613f52565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051610b9b9190613f81565b5f604051808303815f865af19150503d805f8114610bd4576040519150601f19603f3d011682016040523d82523d5f602084013e610bd9565b606091505b5050905080610c1a576040518381527fb447474448cd6fcec713160a7af96335b628994d6abcc074f215b856ccde31679060200160405180910390a1505050565b610c25600b846129f3565b50610c316007846129fe565b50827f9a03aa0053cbc9522f2f584b8e74ba5478cadd5f83b136eaf2d4338795b369558360a00151604051610c669190613a3c565b60405180910390a25b505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f000000000000000000000000000000000000000000000000000000001480610cc95750610cc982612a09565b92915050565b610cf87fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612a9f565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f7724bcb43a09ae6582affdee2f0ace931e26f2ffa8b5c334baf0a39e9dc03426905f90a250565b610d6e61374d565b610d7661374d565b604080518082019182905260019160039190839060029082845b815481526020019060010190808311610d90575050604080518082019182905294965085935060029250905082845b815481526020019060010190808311610dbf5750505050509050915091509091565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610e1a81612a9f565b610e248383612aac565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610e79576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c6f8282612b01565b6060610e8f6009612b4d565b905090565b610e9c612b59565b610ea582612c5f565b610eaf8282612c88565b5050565b5f610ebc612da3565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6060610e8f6007612b4d565b610f167fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612a9f565b610f1f83612988565b610fab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4e6f20726571756573742077697468207370656369666965642072657175657360448201527f744944000000000000000000000000000000000000000000000000000000000060648201526084016107b0565b5f83815260056020526040808220815160e08101909252805482908290610fd190613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054610ffd90613f01565b80156110485780601f1061101f57610100808354040283529160200191611048565b820191905f5260205f20905b81548152906001019060200180831161102b57829003601f168201915b5050505050815260200160018201805461106190613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461108d90613f01565b80156110d85780601f106110af576101008083540402835291602001916110d8565b820191905f5260205f20905b8154815290600101906020018083116110bb57829003601f168201915b505050505081526020016002820180546110f190613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461111d90613f01565b80156111685780601f1061113f57610100808354040283529160200191611168565b820191905f5260205f20905b81548152906001019060200180831161114b57829003601f168201915b5050505050815260200160038201805461118190613f01565b80601f01602080910402602001604051908101604052809291908181526020018280546111ad90613f01565b80156111f85780601f106111cf576101008083540402835291602001916111f8565b820191905f5260205f20905b8154815290600101906020018083116111db57829003601f168201915b5050509183525050600482015473ffffffffffffffffffffffffffffffffffffffff16602082015260058201805460409092019161123590613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461126190613f01565b80156112ac5780601f10611283576101008083540402835291602001916112ac565b820191905f5260205f20905b81548152906001019060200180831161128f57829003601f168201915b505050918352505060069182015460ff161515602090910152606082015190546040517f5bb09cf800000000000000000000000000000000000000000000000000000000815292935090915f9173ffffffffffffffffffffffffffffffffffffffff1690635bb09cf890611324908590600401613a3c565b602060405180830381865afa15801561133f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113639190613f8c565b90505f8190508073ffffffffffffffffffffffffffffffffffffffff1663f6e548e985602001518888611394612552565b6040518563ffffffff1660e01b81526004016113b39493929190613fd0565b602060405180830381865afa1580156113ce573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113f29190614014565b611458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f5369676e617475726520766572696669636174696f6e206661696c656400000060448201526064016107b0565b5f846080015173ffffffffffffffffffffffffffffffffffffffff1663c8db658260e01b89898960405160240161149193929190614033565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516114fc9190613f81565b5f604051808303815f865af19150503d805f8114611535576040519150601f19603f3d011682016040523d82523d5f602084013e61153a565b606091505b50505f8981526005602081905260409091209192500161155b878983614097565b505f88815260056020526040902060060180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556115a06009896129f3565b50806115ea576115b1600b896129fe565b506040518881527fb447474448cd6fcec713160a7af96335b628994d6abcc074f215b856ccde31679060200160405180910390a1611631565b6115f56007896129fe565b50877f9a03aa0053cbc9522f2f584b8e74ba5478cadd5f83b136eaf2d4338795b36955888860405161162892919061418f565b60405180910390a25b5050505050505050565b6060610e8f600b612b4d565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f811580156116915750825b90505f8267ffffffffffffffff1660011480156116ad5750303b155b9050811580156116bb575080155b156116f2576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156117535784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b61175b612e12565b611763612e12565b60408051808201909152898152602081018990526001611785818c600261376b565b50602082015161179b906002808401919061376b565b509050506117c97fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177588612aac565b61182f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4772616e7420726f6c65206661696c656400000000000000000000000000000060448201526064016107b0565b6118395f88612aac565b61189f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4772616e7420726f6c652072657665727473000000000000000000000000000060448201526064016107b0565b73ffffffffffffffffffffffffffffffffffffffff8616611942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f43616e6e6f7420736574207a65726f2061646472657373206173207369676e6160448201527f7475726520736368656d6520616464726573732070726f76696465720000000060648201526084016107b0565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff881617905583156119e35784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b60056020525f9081526040902080548190611a0890613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3490613f01565b8015611a7f5780601f10611a5657610100808354040283529160200191611a7f565b820191905f5260205f20905b815481529060010190602001808311611a6257829003601f168201915b505050505090806001018054611a9490613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac090613f01565b8015611b0b5780601f10611ae257610100808354040283529160200191611b0b565b820191905f5260205f20905b815481529060010190602001808311611aee57829003601f168201915b505050505090806002018054611b2090613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4c90613f01565b8015611b975780601f10611b6e57610100808354040283529160200191611b97565b820191905f5260205f20905b815481529060010190602001808311611b7a57829003601f168201915b505050505090806003018054611bac90613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054611bd890613f01565b8015611c235780601f10611bfa57610100808354040283529160200191611c23565b820191905f5260205f20905b815481529060010190602001808311611c0657829003601f168201915b5050506004840154600585018054949573ffffffffffffffffffffffffffffffffffffffff909216949193509150611c5a90613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054611c8690613f01565b8015611cd15780601f10611ca857610100808354040283529160200191611cd1565b820191905f5260205f20905b815481529060010190602001808311611cb457829003601f168201915b5050506006909301549192505060ff1687565b5f8281527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260408220611d1c9084612e1a565b949350505050565b5f60015f5f828254611d3691906141cf565b90915550506006546040517f2fc9fa3300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690632fc9fa3390611d93908a908a9060040161418f565b602060405180830381865afa158015611dae573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dd29190614014565b611e38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5369676e617475726520736368656d65206e6f7420737570706f72746564000060448201526064016107b0565b611e7f600161100087878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929493925050612e259050565b611f0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4d657373616765206661696c6564206c656e67746820626f756e64732063686560448201527f636b00000000000000000000000000000000000000000000000000000000000060648201526084016107b0565b611f515f61100085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929493925050612e259050565b611fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f436f6e646974696f6e206661696c6564206c656e67746820626f756e6473206360448201527f6865636b0000000000000000000000000000000000000000000000000000000060648201526084016107b0565b8180156120ae5761202184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612ed192505050565b156120ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f436f6e646974696f6e2062797465732063616e6e6f7420626520616c6c207a6560448201527f726f73000000000000000000000000000000000000000000000000000000000060648201526084016107b0565b6006546040517f5bb09cf80000000000000000000000000000000000000000000000000000000081525f9173ffffffffffffffffffffffffffffffffffffffff1690635bb09cf890612106908c908c9060040161418f565b602060405180830381865afa158015612121573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121459190613f8c565b6040517feae1e15b00000000000000000000000000000000000000000000000000000000815290915081905f9073ffffffffffffffffffffffffffffffffffffffff83169063eae1e15b906121a0908c908c9060040161418f565b5f60405180830381865afa1580156121ba573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526121e191908101906141e2565b604080516101006020601f8d01819004028201810190925260e081018b81529293509182918c908c90819085018382808284375f92019190915250505090825250602080820184905260408051601f8b0183900483028101830182528a8152920191908a908a90819084018382808284375f92019190915250505090825250604080516020601f8f018190048102820181019092528d815291810191908e908e90819084018382808284375f92018290525093855250503360208085019190915260408051808301825284815281860152606090940183905282548352600590525020815181906122d29082614257565b50602082015160018201906122e79082614257565b50604082015160028201906122fc9082614257565b50606082015160038201906123119082614257565b5060808201516004820180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117905560a082015160058201906123719082614257565b5060c09190910151600690910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790555f546123b9906009906129fe565b503373ffffffffffffffffffffffffffffffffffffffff165f547ff0a5ef4bc87d6534674b1469f4b31d03c6510d0f7ab353f3e53f9d1d87ead02b8d8d8d8d878e8e42604051612410989796959493929190614350565b60405180910390a350505f549998505050505050505050565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260409091206060919061246590612b4d565b9392505050565b604080515f8152602081019091526060908267ffffffffffffffff811115612496576124966138fc565b6040519080825280602002602001820160405280156124c957816020015b60608152602001906001900390816124b45790505b5091505f5b8381101561254a57612525308686848181106124ec576124ec6143c8565b90506020028101906124fe91906143f5565b8560405160200161251193929190614456565b604051602081830303815290604052612f34565b838281518110612537576125376143c8565b60209081029190910101526001016124ce565b505092915050565b6040805160808101808352606092610e8f9291600191839190820190839060029082845b81548152602001906001019080831161257657505050918352505060408051808201918290526020909201919060028481019182845b8154815260200190600101908083116125ac57505050505081525050612faa565b5f610cc9600b83613006565b61262f6040518060e00160405280606081526020016060815260200160608152602001606081526020015f73ffffffffffffffffffffffffffffffffffffffff168152602001606081526020015f151581525090565b5f8281526005602052604090819020815160e0810190925280548290829061265690613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461268290613f01565b80156126cd5780601f106126a4576101008083540402835291602001916126cd565b820191905f5260205f20905b8154815290600101906020018083116126b057829003601f168201915b505050505081526020016001820180546126e690613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461271290613f01565b801561275d5780601f106127345761010080835404028352916020019161275d565b820191905f5260205f20905b81548152906001019060200180831161274057829003601f168201915b5050505050815260200160028201805461277690613f01565b80601f01602080910402602001604051908101604052809291908181526020018280546127a290613f01565b80156127ed5780601f106127c4576101008083540402835291602001916127ed565b820191905f5260205f20905b8154815290600101906020018083116127d057829003601f168201915b5050505050815260200160038201805461280690613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461283290613f01565b801561287d5780601f106128545761010080835404028352916020019161287d565b820191905f5260205f20905b81548152906001019060200180831161286057829003601f168201915b5050509183525050600482015473ffffffffffffffffffffffffffffffffffffffff1660208201526005820180546040909201916128ba90613f01565b80601f01602080910402602001604051908101604052809291908181526020018280546128e690613f01565b80156129315780601f1061290857610100808354040283529160200191612931565b820191905f5260205f20905b81548152906001019060200180831161291457829003601f168201915b50505091835250506006919091015460ff16151560209091015292915050565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e823717059320006020819052604082206124659061301d565b5f612994600983613006565b80610cc95750610cc9600b83613006565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546129de81612a9f565b610e248383612b01565b5f610e8f600961301d565b5f6124658383613026565b5f6124658383613109565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610cc957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610cc9565b612aa98133613155565b50565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200081612ad985856131fb565b90508015611d1c575f858152602083905260409020612af89085613310565b50949350505050565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200081612b2e8585613331565b90508015611d1c575f858152602083905260409020612af8908561340d565b60605f6124658361342e565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480612c2657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612c0d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b15612c5d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b612aa97fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612a9f565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612cef575060408051601f3d908101601f19168201909252612cec91810190614475565b60015b612d3d576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016107b0565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612d99576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016107b0565b610c6f8383613487565b3073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612c5d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c5d6134e9565b5f6124658383613550565b5f81831115612eb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f496e76616c696420626f756e64733a206d696e4c656e6774682063616e6e6f7460448201527f2062652067726561746572207468616e206d61784c656e67746800000000000060648201526084016107b0565b8351838110801590612ec85750828111155b95945050505050565b5f805b8251811015612f2b57828181518110612eef57612eef6143c8565b01602001517fff000000000000000000000000000000000000000000000000000000000000001615612f2357505f92915050565b600101612ed4565b50600192915050565b60605f5f8473ffffffffffffffffffffffffffffffffffffffff1684604051612f5d9190613f81565b5f60405180830381855af49150503d805f8114612f95576040519150601f19603f3d011682016040523d82523d5f602084013e612f9a565b606091505b5091509150612ec8858383613576565b60408051608080825260a082019092526060915f91906020820181803683375050845180516020918201519682015180519083015192850191909152604084019690965260608301959095525060808101939093525090919050565b5f8181526001830160205260408120541515612465565b5f610cc9825490565b5f8181526001830160205260408120548015613100575f6130486001836143b5565b85549091505f9061305b906001906143b5565b90508082146130ba575f865f018281548110613079576130796143c8565b905f5260205f200154905080875f018481548110613099576130996143c8565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806130cb576130cb61448c565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610cc9565b5f915050610cc9565b5f81815260018301602052604081205461314e57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610cc9565b505f610cc9565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610eaf576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044016107b0565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff16613100575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556132ac3390565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610cc9565b5f6124658373ffffffffffffffffffffffffffffffffffffffff8416613109565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff1615613100575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610cc9565b5f6124658373ffffffffffffffffffffffffffffffffffffffff8416613026565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561347b57602002820191905f5260205f20905b815481526020019060010190808311613467575b50505050509050919050565b61349082613605565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156134e157610c6f8282612f34565b610eaf6136d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16612c5d576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f825f018281548110613565576135656143c8565b905f5260205f200154905092915050565b60608261358b576135868261370b565b612465565b81511580156135af575073ffffffffffffffffffffffffffffffffffffffff84163b155b156135fe576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016107b0565b5080612465565b8073ffffffffffffffffffffffffffffffffffffffff163b5f0361366d576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016107b0565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b3415612c5d576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80511561371b5780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052806002906020820280368337509192915050565b8260028101928215613799579160200282015b8281111561379957825182559160200191906001019061377e565b506137a59291506137a9565b5090565b5b808211156137a5575f81556001016137aa565b5f602082840312156137cd575f5ffd5b5035919050565b5f602082840312156137e4575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114612465575f5ffd5b73ffffffffffffffffffffffffffffffffffffffff81168114612aa9575f5ffd5b5f60208284031215613844575f5ffd5b813561246581613813565b805f5b6002811015610e24578151845260209384019390910190600101613852565b6080810161387f828561384f565b612465604083018461384f565b5f5f6040838503121561389d575f5ffd5b8235915060208301356138af81613813565b809150509250929050565b602080825282518282018190525f918401906040840190835b818110156138f15783518352602093840193909201916001016138d3565b509095945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613952576139526138fc565b604052919050565b5f67ffffffffffffffff821115613973576139736138fc565b50601f01601f191660200190565b5f5f60408385031215613992575f5ffd5b823561399d81613813565b9150602083013567ffffffffffffffff8111156139b8575f5ffd5b8301601f810185136139c8575f5ffd5b80356139db6139d68261395a565b613929565b8181528660208385010111156139ef575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6124656020830184613a0e565b5f5f83601f840112613a5e575f5ffd5b50813567ffffffffffffffff811115613a75575f5ffd5b602083019150836020828501011115613a8c575f5ffd5b9250929050565b5f5f5f60408486031215613aa5575f5ffd5b83359250602084013567ffffffffffffffff811115613ac2575f5ffd5b613ace86828701613a4e565b9497909650939450505050565b5f82601f830112613aea575f5ffd5b6040805190810167ffffffffffffffff81118282101715613b0d57613b0d6138fc565b8060405250806040840185811115613b23575f5ffd5b845b81811015613b3d578035835260209283019201613b25565b509195945050505050565b5f5f5f5f60c08587031215613b5b575f5ffd5b613b658686613adb565b9350613b748660408701613adb565b92506080850135613b8481613813565b915060a0850135613b9481613813565b939692955090935050565b60e081525f613bb160e083018a613a0e565b8281036020840152613bc3818a613a0e565b90508281036040840152613bd78189613a0e565b90508281036060840152613beb8188613a0e565b905073ffffffffffffffffffffffffffffffffffffffff8616608084015282810360a0840152613c1b8186613a0e565b91505082151560c083015298975050505050505050565b5f5f60408385031215613c43575f5ffd5b50508035926020909101359150565b5f5f5f5f5f5f60608789031215613c67575f5ffd5b863567ffffffffffffffff811115613c7d575f5ffd5b613c8989828a01613a4e565b909750955050602087013567ffffffffffffffff811115613ca8575f5ffd5b613cb489828a01613a4e565b909550935050604087013567ffffffffffffffff811115613cd3575f5ffd5b613cdf89828a01613a4e565b979a9699509497509295939492505050565b602080825282518282018190525f918401906040840190835b818110156138f157835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101613d0a565b5f5f60208385031215613d4f575f5ffd5b823567ffffffffffffffff811115613d65575f5ffd5b8301601f81018513613d75575f5ffd5b803567ffffffffffffffff811115613d8b575f5ffd5b8560208260051b8401011115613d9f575f5ffd5b6020919091019590945092505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015613e24577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452613e0f858351613a0e565b94506020938401939190910190600101613dd5565b50929695505050505050565b602081525f825160e06020840152613e4c610100840182613a0e565b90506020840151601f19848303016040850152613e698282613a0e565b9150506040840151601f19848303016060850152613e878282613a0e565b9150506060840151601f19848303016080850152613ea58282613a0e565b91505073ffffffffffffffffffffffffffffffffffffffff60808501511660a084015260a0840151601f198483030160c0850152613ee38282613a0e565b91505060c0840151613ef960e085018215159052565b509392505050565b600181811c90821680613f1557607f821691505b602082108103613f4c577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b828152604060208201525f611d1c6040830184613a0e565b5f81518060208401855e5f93019283525090919050565b5f6124658284613f6a565b5f60208284031215613f9c575f5ffd5b815161246581613813565b81835281816020850137505f602082840101525f6020601f19601f840116840101905092915050565b606081525f613fe26060830187613a0e565b8281036020840152613ff5818688613fa7565b905082810360408401526140098185613a0e565b979650505050505050565b5f60208284031215614024575f5ffd5b81518015158114612465575f5ffd5b838152604060208201525f612ec8604083018486613fa7565b601f821115610c6f57805f5260205f20601f840160051c810160208510156140715750805b601f840160051c820191505b81811015614090575f815560010161407d565b5050505050565b67ffffffffffffffff8311156140af576140af6138fc565b6140c3836140bd8354613f01565b8361404c565b5f601f841160018114614113575f85156140dd5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355614090565b5f83815260208120601f198716915b828110156141425786850135825560209485019460019092019101614122565b508682101561417d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b602081525f611d1c602083018486613fa7565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115610cc957610cc96141a2565b5f602082840312156141f2575f5ffd5b815167ffffffffffffffff811115614208575f5ffd5b8201601f81018413614218575f5ffd5b80516142266139d68261395a565b81815285602083850101111561423a575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b815167ffffffffffffffff811115614271576142716138fc565b6142858161427f8454613f01565b8461404c565b6020601f8211600181146142d6575f83156142a05750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455614090565b5f84815260208120601f198516915b8281101561430557878501518255602094850194600190920191016142e5565b508482101561434157868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b60a081525f61436360a083018a8c613fa7565b828103602084015261437681898b613fa7565b9050828103604084015261438a8188613a0e565b9050828103606084015261439f818688613fa7565b9150508260808301529998505050505050505050565b81810381811115610cc957610cc96141a2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614428575f5ffd5b83018035915067ffffffffffffffff821115614442575f5ffd5b602001915036819003821315613a8c575f5ffd5b828482375f8382015f815261446b8185613f6a565b9695505050505050565b5f60208284031215614485575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea26469706673582212207f33e7672e5328ae7dfef406ddca56e21c29c4c4d46bb1f9d05ba19afd9c928264736f6c634300081c00335369676e617475726553656e6465722070726f787920636f6e7472616374206465706c6f7965642061743a205369676e617475726553656e64657220636f6e747261637420757067726164656420746f206e657720696d706c656d656e746174696f6e2061743a207369676e6174757265536368656d654164647265737350726f7669646572416464726573735369676e617475726553656e64657220696d706c656d656e746174696f6e20636f6e7472616374206465706c6f7965642061743a20a2646970667358221220bd978d4a358d3acc032f3bc2f05f8cf441fedcf04b9b429bb499b571416cd62e64736f6c634300081c0033\";\n\ntype DeploySignatureSenderConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: DeploySignatureSenderConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class DeploySignatureSender__factory extends ContractFactory {\n  constructor(...args: DeploySignatureSenderConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      DeploySignatureSender & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(\n    runner: ContractRunner | null\n  ): DeploySignatureSender__factory {\n    return super.connect(runner) as DeploySignatureSender__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): DeploySignatureSenderInterface {\n    return new Interface(_abi) as DeploySignatureSenderInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): DeploySignatureSender {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as DeploySignatureSender;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type {\n  RandomnessSenderTest,\n  RandomnessSenderTestInterface,\n} from \"../../Randomness.t.sol/RandomnessSenderTest\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"ADMIN_ROLE\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"IS_TEST\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"addrProvider\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"contract SignatureSchemeAddressProvider\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"bn254SignatureScheme\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"contract BN254SignatureScheme\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"bn254SignatureSchemeID\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"conditions\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeArtifacts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedArtifacts_\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeContracts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedContracts_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzSelector[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeSenders\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedSenders_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"failed\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"owner\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"randomnessSender\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"contract RandomnessSender\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"setUp\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"signatureSender\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"contract SignatureSender\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetArtifactSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedArtifactSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzArtifactSelector[]\",\n        components: [\n          {\n            name: \"artifact\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetArtifacts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedArtifacts_\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetContracts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedContracts_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetInterfaces\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedInterfaces_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzInterface[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"artifacts\",\n            type: \"string[]\",\n            internalType: \"string[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzSelector[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetSenders\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedSenders_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"test_DeploymentConfigurations\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"test_UpdateSignatureScheme\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"test_randomnessSignatureVerification\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"test_requestRandomness\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"test_requestRandomnessWithCallback\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"test_selectArrayIndices_One_returnsAll\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"test_selectArrayIndices_ReturnsCorrectCount\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"test_selectArrayIndices_Zero_returnsEmpty\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"validPK\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"validSignature\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"event\",\n    name: \"RandomnessRequested\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"nonce\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"requester\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"requestedAt\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SignatureRequestFulfilled\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"signature\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SignatureRequested\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"callback\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"schemeID\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"message\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n      {\n        name: \"messageHashToSign\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n      {\n        name: \"condition\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n      {\n        name: \"requestedAt\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_address\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"uint256[]\",\n        indexed: false,\n        internalType: \"uint256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"int256[]\",\n        indexed: false,\n        internalType: \"int256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"address[]\",\n        indexed: false,\n        internalType: \"address[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_bytes\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_bytes32\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_int\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_address\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256[]\",\n        indexed: false,\n        internalType: \"uint256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256[]\",\n        indexed: false,\n        internalType: \"int256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"address[]\",\n        indexed: false,\n        internalType: \"address[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_bytes\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_bytes32\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_decimal_int\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_decimal_uint\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_int\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_string\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_uint\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_string\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_uint\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"logs\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n] as const;\n\nconst _bytecode =\n  \"0x600c8054600160ff199182168117909255601f80549091169091179055610140604052608060a08181529061eb9460c03960259061003d908261012f565b5060405180606001604052806040815260200161eb5460409139602690610064908261012f565b5060408051602081019091525f8152602790610080908261012f565b506001608052348015610091575f5ffd5b506101e9565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806100bf57607f821691505b6020821081036100dd57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561012a57805f5260205f20601f840160051c810160208510156101085750805b601f840160051c820191505b81811015610127575f8155600101610114565b50505b505050565b81516001600160401b0381111561014857610148610097565b61015c8161015684546100ab565b846100e3565b6020601f82116001811461018e575f83156101775750848201515b5f19600385901b1c1916600184901b178455610127565b5f84815260208120601f198516915b828110156101bd578785015182556020948501946001909201910161019d565b50848210156101da57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b60805161e91b6102395f395f81816103580152818161048d015281816109dc01528181610a83015281816110fa015281816115fc015281816116e801528181611aff0152612b2c015261e91b5ff3fe608060405234801561000f575f5ffd5b50600436106101dc575f3560e01c80637d46810611610109578063d415afea1161009e578063e35c59d01161006e578063e35c59d0146103f7578063ee4fe0b1146103ff578063efebd38914610407578063fa7626d414610443575f5ffd5b8063d415afea146103bf578063dc6af447146103c7578063df3fafe8146103cf578063e20c9f71146103ef575f5ffd5b806393ecedd7116100d957806393ecedd71461038f578063b0464fdc14610397578063b5508aa91461039f578063ba414fa6146103a7575f5ffd5b80637d4681061461031e57806385226c811461033e5780638da5cb5b14610353578063916a17c61461037a575f5ffd5b80633e5e3c231161017f57806366d9a9a01161014f57806366d9a9a0146102a757806375b238fc146102bc57806377a33a68146102f15780637bd0199614610316575f5ffd5b80633e5e3c231461023d5780633f7286f41461024557806344ce68431461024d57806345adb35f14610292575f5ffd5b8063179c209b116101ba578063179c209b146101fa5780631ed7831c146102025780631fcc9a0a146102205780632ade388014610228575f5ffd5b80630a9254e4146101e05780630ad5dfb0146101ea57806315bbabfb146101f2575b5f5ffd5b6101e8610450565b005b6101e8610b67565b6101e8611596565b6101e8611946565b61020a611a55565b604051610217919061325f565b60405180910390f35b6101e8611ac2565b610230611d05565b60405161021791906132e5565b61020a611e4e565b61020a611eb9565b60205461026d9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610217565b61029a611f24565b60405161021791906133f7565b6102af611fb0565b604051610217919061346c565b6102e37fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b604051908152602001610217565b601f5461026d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101e8612129565b60235461026d9073ffffffffffffffffffffffffffffffffffffffff1681565b61034661226a565b6040516102179190613508565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b610382612335565b604051610217919061357d565b6101e8612438565b610382612579565b61034661267c565b6103af612747565b6040519015158152602001610217565b61029a612817565b6101e8612824565b60245461026d9073ffffffffffffffffffffffffffffffffffffffff1681565b61020a612c89565b61029a612cf4565b6101e8612d01565b61029a6040518060400160405280600581526020017f424e32353400000000000000000000000000000000000000000000000000000081525081565b601f546103af9060ff1681565b6040517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d56906024015f604051808303815f87803b1580156104e8575f5ffd5b505af11580156104fa573d5f5f3e3d5ffd5b505050505f60405161050b90613211565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015610541573d5f5f3e3d5ffd5b50601f60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405161058e9061321e565b604051809103905ff0801580156105a7573d5f5f3e3d5ffd5b50602080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081178255601f54604080518082018252600581527f424e32353400000000000000000000000000000000000000000000000000000094810194909452517fbab867da0000000000000000000000000000000000000000000000000000000081526101009091049093169263bab867da9261066592909160040161361f565b5f604051808303815f87803b15801561067c575f5ffd5b505af115801561068e573d5f5f3e3d5ffd5b505050505f602580546106a090613656565b80601f01602080910402602001604051908101604052809291908181526020018280546106cc90613656565b80156107175780601f106106ee57610100808354040283529160200191610717565b820191905f5260205f20905b8154815290600101906020018083116106fa57829003601f168201915b505050505080602001905181019061072f9190613770565b90505f60405161073e9061322b565b604051809103905ff080158015610757573d5f5f3e3d5ffd5b5090505f60405161076790613238565b604051809103905ff080158015610780573d5f5f3e3d5ffd5b5090508160405161079090613245565b73ffffffffffffffffffffffffffffffffffffffff90911681526040602082018190525f90820152606001604051809103905ff0801580156107d4573d5f5f3e3d5ffd5b5060215f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061084e6040518060600160405280602d815260200161e8b9602d913960215473ffffffffffffffffffffffffffffffffffffffff16612e10565b8060405161085b90613245565b73ffffffffffffffffffffffffffffffffffffffff90911681526040602082018190525f90820152606001604051809103905ff08015801561089f573d5f5f3e3d5ffd5b5060225f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506109196040518060600160405280602e815260200161e823602e913960225473ffffffffffffffffffffffffffffffffffffffff16612e10565b602154602380547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff9384169081179092556022546024805490921690841617905560408051808201825286516020908101518252875151818301528251808401845281890180518301518252515191810191909152601f5492517f702ef38c000000000000000000000000000000000000000000000000000000008152939463702ef38c94610a0c947f00000000000000000000000000000000000000000000000000000000000000009261010090910416906004016137fe565b5f604051808303815f87803b158015610a23575f5ffd5b505af1158015610a35573d5f5f3e3d5ffd5b5050602480546023546040517f485cc95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f000000000000000000000000000000000000000000000000000000000000000082169381019390935216925063485cc95591506044015f604051808303815f87803b158015610acf575f5ffd5b505af1158015610ae1573d5f5f3e3d5ffd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610b4c575f5ffd5b505af1158015610b5e573d5f5f3e3d5ffd5b50505050505050565b6024546040515f9173ffffffffffffffffffffffffffffffffffffffff1690610b8f90613252565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015610bc5573d5f5f3e3d5ffd5b5090505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663df3fafe86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c28573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c4c919061385a565b73ffffffffffffffffffffffffffffffffffffffff1603610c6f57610c6f61388d565b60408051808201825260208082527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf68183015282516060810184528381526001935f9261e879908301396023546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff9091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a4015f604051808303815f87803b158015610d54575f5ffd5b505af1158015610d66573d5f5f3e3d5ffd5b505060245460405173ffffffffffffffffffffffffffffffffffffffff90911692508591507ff0a5ef4bc87d6534674b1469f4b31d03c6510d0f7ab353f3e53f9d1d87ead02b90610dbc908690869042906138ba565b60405180910390a38373ffffffffffffffffffffffffffffffffffffffff1663837e7cc66040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610e09575f5ffd5b505af1158015610e1b573d5f5f3e3d5ffd5b505050505f8473ffffffffffffffffffffffffffffffffffffffff16626d6cae6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e68573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e8c9190613931565b90505f8111610e9d57610e9d61388d565b6023546040517fcd802c910000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff9091169063cd802c9190602401602060405180830381865afa158015610f0a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f2e9190613948565b610f3a57610f3a61388d565b60235f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e63b5d586040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fa4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fc89190613931565b600114610fd757610fd761388d565b6023546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190525f602483018190526044830152606482015273ffffffffffffffffffffffffffffffffffffffff9091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a4015f604051808303815f87803b15801561106e575f5ffd5b505af1158015611080573d5f5f3e3d5ffd5b50505050807f9a03aa0053cbc9522f2f584b8e74ba5478cadd5f83b136eaf2d4338795b3695560266040516110b59190613a04565b60405180910390a26040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015f604051808303815f87803b158015611155575f5ffd5b505af1158015611167573d5f5f3e3d5ffd5b50506023546040517f5eab2b2000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250635eab2b2091506111c4908490602690600401613a16565b5f604051808303815f87803b1580156111db575f5ffd5b505af11580156111ed573d5f5f3e3d5ffd5b50506023546040517fcd802c910000000000000000000000000000000000000000000000000000000081526004810185905261128c935073ffffffffffffffffffffffffffffffffffffffff909116915063cd802c91906024015b602060405180830381865afa158015611263573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112879190613948565b612e83565b6113188573ffffffffffffffffffffffffffffffffffffffff1663360131896040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112d8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112fc9190613931565b602660405161130b9190613a36565b6040518091039020612ef9565b6023546040517fcd802c910000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff9091169063cd802c9190602401602060405180830381865afa158015611385573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113a99190613948565b156113b6576113b661388d565b60235f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e63b5d586040518163ffffffff1660e01b8152600401602060405180830381865afa158015611420573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114449190613931565b156114515761145161388d565b60235f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f421ea96040518163ffffffff1660e01b81526004015f60405180830381865afa1580156114ba573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526114e19190810190613ac5565b51156114ef576114ef61388d565b60235f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663571d70876040518163ffffffff1660e01b81526004015f60405180830381865afa158015611558573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261157f9190810190613ac5565b5160011461158f5761158f61388d565b5050505050565b6023546040517f91d148540000000000000000000000000000000000000000000000000000000081527fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301526116769216906391d14854906044015b602060405180830381865afa15801561164d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116719190613948565b612f74565b6024546040517f91d1485400000000000000000000000000000000000000000000000000000000815261172f9173ffffffffffffffffffffffffffffffffffffffff16906391d1485490611632907fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775907f00000000000000000000000000000000000000000000000000000000000000009060040191825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b60235473ffffffffffffffffffffffffffffffffffffffff166117545761175461388d565b60245473ffffffffffffffffffffffffffffffffffffffff166117795761177961388d565b602054604080517f5f7c752200000000000000000000000000000000000000000000000000000000815290516118139273ffffffffffffffffffffffffffffffffffffffff1691635f7c7522916004808301925f9291908290030181865afa1580156117e7573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261180e9190810190613b71565b612fc6565b60208054604080517f3408e47000000000000000000000000000000000000000000000000000000000815290516118aa9373ffffffffffffffffffffffffffffffffffffffff90931692633408e47092600480820193918290030181865afa158015611881573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118a59190613931565b61303a565b602054604080517f5f7c752200000000000000000000000000000000000000000000000000000000815290516119449273ffffffffffffffffffffffffffffffffffffffff1691635f7c7522916004808301925f9291908290030181865afa158015611918573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261193f9190810190613b71565b6130ad565b565b6040517f298f239c000000000000000000000000000000000000000000000000000000008152606460048201819052600a602483018190527fdeadbeef000000000000000000000000000000000000000000000000000000006044840152915f9073__$485e63c703b57fb39db2d057ed0b990874$__9063298f239c9084015f60405180830381865af41580156119df573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611a069190810190613ac5565b9050611a2c81518460405180606001604052806028815260200161e8516028913961311e565b5f5b8151811015611a4f5782811115611a4757611a4761388d565b600101611a2e565b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015611ab857602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611a8d575b5050505050905090565b6040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015f604051808303815f87803b158015611b5a575f5ffd5b505af1158015611b6c573d5f5f3e3d5ffd5b50506040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f496e76616c696420636f6e7472616374206164647265737320666f722073636860448201527f656d6541646472657373000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063f28dceb391506084015f604051808303815f87803b158015611c26575f5ffd5b505af1158015611c38573d5f5f3e3d5ffd5b5050601f54604080518082018252600581527f424e323534000000000000000000000000000000000000000000000000000000602082015290517fbab867da00000000000000000000000000000000000000000000000000000000815261010090920473ffffffffffffffffffffffffffffffffffffffff16935063bab867da9250611cdc917373d1ecca90a16f27691c63ecad7d5119f0bc743a9060040161361f565b5f604051808303815f87803b158015611cf3575f5ffd5b505af1158015611a4f573d5f5f3e3d5ffd5b6060601e805480602002602001604051908101604052809291908181526020015f905b82821015611e45575f848152602080822060408051808201825260028702909201805473ffffffffffffffffffffffffffffffffffffffff168352600181018054835181870281018701909452808452939591948681019491929084015b82821015611e2e578382905f5260205f20018054611da390613656565b80601f0160208091040260200160405190810160405280929190818152602001828054611dcf90613656565b8015611e1a5780601f10611df157610100808354040283529160200191611e1a565b820191905f5260205f20905b815481529060010190602001808311611dfd57829003601f168201915b505050505081526020019060010190611d86565b505050508152505081526020019060010190611d28565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015611ab857602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611a8d575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611ab857602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611a8d575050505050905090565b60258054611f3190613656565b80601f0160208091040260200160405190810160405280929190818152602001828054611f5d90613656565b8015611fa85780601f10611f7f57610100808354040283529160200191611fa8565b820191905f5260205f20905b815481529060010190602001808311611f8b57829003601f168201915b505050505081565b6060601b805480602002602001604051908101604052809291908181526020015f905b82821015611e45578382905f5260205f2090600202016040518060400160405290815f8201805461200390613656565b80601f016020809104026020016040519081016040528092919081815260200182805461202f90613656565b801561207a5780601f106120515761010080835404028352916020019161207a565b820191905f5260205f20905b81548152906001019060200180831161205d57829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561211157602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116120be5790505b50505050508152505081526020019060010190611fd3565b6040805160018082528183019092525f91602080830190803683370190505090505f815f8151811061215d5761215d6137af565b60209081029190910101526040517f298f239c00000000000000000000000000000000000000000000000000000000815260016004820181905260248201527fdeadbeef0000000000000000000000000000000000000000000000000000000060448201525f9073__$485e63c703b57fb39db2d057ed0b990874$__9063298f239c906064015f60405180830381865af41580156121fd573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122249190810190613ac5565b905061226682826040518060400160405280601a81526020017f66756c6c206172726179207761736e27742072657475726e656400000000000081525061319a565b5050565b6060601a805480602002602001604051908101604052809291908181526020015f905b82821015611e45578382905f5260205f200180546122aa90613656565b80601f01602080910402602001604051908101604052809291908181526020018280546122d690613656565b80156123215780601f106122f857610100808354040283529160200191612321565b820191905f5260205f20905b81548152906001019060200180831161230457829003601f168201915b50505050508152602001906001019061228d565b6060601d805480602002602001604051908101604052809291908181526020015f905b82821015611e45575f84815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff16835260018101805483518187028101870190945280845293949193858301939283018282801561242057602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116123cd5790505b50505050508152505081526020019060010190612358565b602454602354602054604080517f5f7c75220000000000000000000000000000000000000000000000000000000081529051600a946001945f9473__$485e63c703b57fb39db2d057ed0b990874$__94639e43d9849473ffffffffffffffffffffffffffffffffffffffff94851694938416936026938a938c939190921691635f7c7522916004808301928d9291908290030181865afa1580156124de573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125059190810190613b71565b6040518763ffffffff1660e01b815260040161252696959493929190613c05565b602060405180830381865af4158015612541573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125659190613948565b9050806125745761257461388d565b505050565b6060601c805480602002602001604051908101604052809291908181526020015f905b82821015611e45575f84815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff16835260018101805483518187028101870190945280845293949193858301939283018282801561266457602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116126115790505b5050505050815250508152602001906001019061259c565b60606019805480602002602001604051908101604052809291908181526020015f905b82821015611e45578382905f5260205f200180546126bc90613656565b80601f01602080910402602001604051908101604052809291908181526020018280546126e890613656565b80156127335780601f1061270a57610100808354040283529160200191612733565b820191905f5260205f20905b81548152906001019060200180831161271657829003601f168201915b50505050508152602001906001019061269f565b6008545f9060ff161561275e575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c6564000000000000000000000000000000000000000000000000000060248301525f9163667f9d7090604401602060405180830381865afa1580156127ec573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128109190613931565b1415905090565b60268054611f3190613656565b6024546040515f9173ffffffffffffffffffffffffffffffffffffffff169061284c90613252565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015612882573d5f5f3e3d5ffd5b50604080518082018252600180825273ffffffffffffffffffffffffffffffffffffffff848116602084019081526024805495517f775b839c000000000000000000000000000000000000000000000000000000008152855160048201529151831690820152949550909384935f92169063775b839c906044015f60405180830381865afa158015612916573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261293d9190810190613b71565b905061294881612fc6565b6040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190525f60448301526064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063491cc7c2906084015f604051808303815f87803b1580156129bf575f5ffd5b505af11580156129d1573d5f5f3e3d5ffd5b505050508473ffffffffffffffffffffffffffffffffffffffff1684847feee7195b6cee0fa7044c3af0b86fe2febb1d2703d71191f44052ba0d60ffda6442604051612a1f91815260200190565b60405180910390a48473ffffffffffffffffffffffffffffffffffffffff1663837e7cc66040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612a6c575f5ffd5b505af1158015612a7e573d5f5f3e3d5ffd5b505050505f8573ffffffffffffffffffffffffffffffffffffffff16626d6cae6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612acb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612aef9190613931565b6040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015f604051808303815f87803b158015612b8a575f5ffd5b505af1158015612b9c573d5f5f3e3d5ffd5b50506023546040517f5eab2b2000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250635eab2b209150612bf9908490602690600401613a16565b5f604051808303815f87803b158015612c10575f5ffd5b505af1158015612c22573d5f5f3e3d5ffd5b50506023546040517fcd802c9100000000000000000000000000000000000000000000000000000000815260048101859052612c81935073ffffffffffffffffffffffffffffffffffffffff909116915063cd802c9190602401611248565b505050505050565b60606015805480602002602001604051908101604052809291908181526020018280548015611ab857602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611a8d575050505050905090565b60278054611f3190613656565b604080515f808252602082019092526040517f298f239c0000000000000000000000000000000000000000000000000000000081525f60048201819052600160248301527fdeadbeef00000000000000000000000000000000000000000000000000000000604483015291925073__$485e63c703b57fb39db2d057ed0b990874$__9063298f239c906064015f60405180830381865af4158015612da7573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612dce9190810190613ac5565b905061226682826040518060400160405280601381526020017f617272617920776173206e6f7420656d7074790000000000000000000000000081525061319a565b6122668282604051602401612e2692919061361f565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f319af333000000000000000000000000000000000000000000000000000000001790526131ee565b6040517fa59828850000000000000000000000000000000000000000000000000000000081528115156004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063a5982885906024015b5f6040518083038186803b158015612ee7575f5ffd5b505afa15801561158f573d5f5f3e3d5ffd5b6040517f7c84c69b0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d90637c84c69b906044015f6040518083038186803b158015612f62575f5ffd5b505afa158015612c81573d5f5f3e3d5ffd5b6040517f0c9fd5810000000000000000000000000000000000000000000000000000000081528115156004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90630c9fd58190602401612ed1565b61303781604051602401612fda91906133f7565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0be77f56000000000000000000000000000000000000000000000000000000001790526131ee565b50565b6130378160405160240161305091815260200190565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff82c50f1000000000000000000000000000000000000000000000000000000001790526131ee565b613037816040516024016130c191906133f7565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac000000000000000000000000000000000000000000000000000000001790526131ee565b6040517f88b44c85000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d906388b44c859061317290869086908690600401613c90565b5f6040518083038186803b158015613188575f5ffd5b505afa158015610b5e573d5f5f3e3d5ffd5b6040517f5d18c73a000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d90635d18c73a9061317290869086908690600401613ce7565b613037815f6a636f6e736f6c652e6c6f6790505f5f835160208501845afa505050565b610bda80613d2a83390190565b6129d58061490483390190565b61468b806172d983390190565b6126538061b96483390190565b6104468061dfb783390190565b6104268061e3fd83390190565b602080825282518282018190525f918401906040840190835b818110156132ac57835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101613278565b509095945050505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156133eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805173ffffffffffffffffffffffffffffffffffffffff168652602090810151604082880181905281519088018190529101906060600582901b8801810191908801905f5b818110156133d1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526133bb8486516132b7565b6020958601959094509290920191600101613381565b50919750505060209485019492909201915060010161330b565b50929695505050505050565b602081525f61340960208301846132b7565b9392505050565b5f8151808452602084019350602083015f5b828110156134625781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101613422565b5093949350505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156133eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526134d660408801826132b7565b90506020820151915086810360208801526134f18183613410565b965050506020938401939190910190600101613492565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156133eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526135688583516132b7565b9450602093840193919091019060010161352e565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156133eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815173ffffffffffffffffffffffffffffffffffffffff815116865260208101519050604060208701526136096040870182613410565b95505060209384019391909101906001016135a3565b604081525f61363160408301856132b7565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b600181811c9082168061366a57607f821691505b6020821081036136a1577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040805190810167ffffffffffffffff811182821017156136f7576136f76136a7565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715613726576137266136a7565b604052919050565b5f82601f83011261373d575f5ffd5b6137456136d4565b806040840185811115613756575f5ffd5b845b818110156132ac578051845260209384019301613758565b5f6080828403128015613781575f5ffd5b5061378a6136d4565b613794848461372e565b81526137a3846040850161372e565b60208201529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b805f5b6002811015611a4f5781518452602093840193909101906001016137df565b60c0810161380c82876137dc565b61381960408301866137dc565b73ffffffffffffffffffffffffffffffffffffffff8416608083015273ffffffffffffffffffffffffffffffffffffffff831660a083015295945050505050565b5f6020828403121561386a575f5ffd5b815173ffffffffffffffffffffffffffffffffffffffff81168114613409575f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b60a08152600560a08201527f424e32353400000000000000000000000000000000000000000000000000000060c082015260e060208201525f61390060e08301866132b7565b828103604084015261391281866132b7565b83810360608501525f8152608090930193909352506020019392505050565b5f60208284031215613941575f5ffd5b5051919050565b5f60208284031215613958575f5ffd5b81518015158114613409575f5ffd5b5f815461397381613656565b80855260018216801561398d57600181146139c7576139fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083166020870152602082151560051b87010193506139fb565b845f5260205f205f5b838110156139f25781546020828a0101526001820191506020810190506139d0565b87016020019450505b50505092915050565b602081525f6134096020830184613967565b828152604060208201525f613a2e6040830184613967565b949350505050565b5f5f8354613a4381613656565b600182168015613a5a5760018114613a8d57613aba565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083168652811515820286019350613aba565b865f5260205f205f5b83811015613ab257815488820152600190910190602001613a96565b505081860193505b509195945050505050565b5f60208284031215613ad5575f5ffd5b815167ffffffffffffffff811115613aeb575f5ffd5b8201601f81018413613afb575f5ffd5b805167ffffffffffffffff811115613b1557613b156136a7565b8060051b613b25602082016136fd565b91825260208184018101929081019087841115613b40575f5ffd5b6020850194505b83851015613b6657845180835260209586019590935090910190613b47565b979650505050505050565b5f60208284031215613b81575f5ffd5b815167ffffffffffffffff811115613b97575f5ffd5b8201601f81018413613ba7575f5ffd5b805167ffffffffffffffff811115613bc157613bc16136a7565b613bd46020601f19601f840116016136fd565b818152856020838501011115613be8575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015260c060408201525f613c4f60c0830187613967565b85606084015273ffffffffffffffffffffffffffffffffffffffff8516608084015282810360a0840152613c8381856132b7565b9998505050505050505050565b838152826020820152606060408201525f613cae60608301846132b7565b95945050505050565b5f8151808452602084019350602083015f5b82811015613462578151865260209586019590910190600101613cc9565b606081525f613cf96060830186613cb7565b8281036020840152613d0b8186613cb7565b90508281036040840152613d1f81856132b7565b969550505050505056fe608060405234801561000f575f5ffd5b50604051610bda380380610bda83398101604081905261002e916101a7565b6001600160a01b03811661003f5750335b6100495f826100fe565b61008e5760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b60448201526064015b60405180910390fd5b6100b87fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775826100fe565b6100f85760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b6044820152606401610085565b506101d4565b5f828152602081815260408083206001600160a01b038516845290915281205460ff1661019e575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101563390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101a1565b505f5b92915050565b5f602082840312156101b7575f5ffd5b81516001600160a01b03811681146101cd575f5ffd5b9392505050565b6109f9806101e15f395ff3fe608060405234801561000f575f5ffd5b50600436106100c4575f3560e01c80635bb09cf81161007d578063a217fddf11610058578063a217fddf146101fd578063bab867da14610204578063d547741f14610217575f5ffd5b80635bb09cf81461015b57806375b238fc1461019357806391d14854146101ba575f5ffd5b80632f2ff15d116100ad5780632f2ff15d146101205780632fc9fa331461013557806336568abe14610148575f5ffd5b806301ffc9a7146100c8578063248a9ca3146100f0575b5f5ffd5b6100db6100d6366004610831565b61022a565b60405190151581526020015b60405180910390f35b6101126100fe366004610877565b5f9081526020819052604090206001015490565b6040519081526020016100e7565b61013361012e3660046108b6565b6102c2565b005b6100db610143366004610925565b6102ec565b6101336101563660046108b6565b610346565b61016e610169366004610925565b6103a4565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100e7565b6101127fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b6100db6101c83660046108b6565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101125f81565b610133610212366004610964565b6103e5565b6101336102253660046108b6565b6105c5565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102bc57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f828152602081905260409020600101546102dc816105e9565b6102e683836105f6565b50505050565b5f5f73ffffffffffffffffffffffffffffffffffffffff16600184846040516103169291906109b4565b9081526040519081900360200190205473ffffffffffffffffffffffffffffffffffffffff161415905092915050565b73ffffffffffffffffffffffffffffffffffffffff81163314610395576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61039f82826106ef565b505050565b5f600183836040516103b79291906109b4565b9081526040519081900360200190205473ffffffffffffffffffffffffffffffffffffffff16905092915050565b61040e7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756105e9565b73ffffffffffffffffffffffffffffffffffffffff811615801590610449575073ffffffffffffffffffffffffffffffffffffffff81163b15155b6104da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f496e76616c696420636f6e7472616374206164647265737320666f722073636860448201527f656d65416464726573730000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b80600184846040516104ed9291906109b4565b908152604051908190036020018120805473ffffffffffffffffffffffffffffffffffffffff939093167fffffffffffffffffffffffff00000000000000000000000000000000000000009093169290921790915560019061055290859085906109b4565b9081526040519081900360200181205473ffffffffffffffffffffffffffffffffffffffff169061058690859085906109b4565b604051908190038120428252907f0a1cd6a1e0a7b200d28ead555f3cee96e0d2def049535fbcfdc2926bc4cec5049060200160405180910390a3505050565b5f828152602081905260409020600101546105df816105e9565b6102e683836106ef565b6105f381336107a8565b50565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff166106e8575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556106863390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102bc565b505f6102bc565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16156106e8575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102bc565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661082d576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044016104d1565b5050565b5f60208284031215610841575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610870575f5ffd5b9392505050565b5f60208284031215610887575f5ffd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146108b1575f5ffd5b919050565b5f5f604083850312156108c7575f5ffd5b823591506108d76020840161088e565b90509250929050565b5f5f83601f8401126108f0575f5ffd5b50813567ffffffffffffffff811115610907575f5ffd5b60208301915083602082850101111561091e575f5ffd5b9250929050565b5f5f60208385031215610936575f5ffd5b823567ffffffffffffffff81111561094c575f5ffd5b610958858286016108e0565b90969095509350505050565b5f5f5f60408486031215610976575f5ffd5b833567ffffffffffffffff81111561098c575f5ffd5b610998868287016108e0565b90945092506109ab90506020850161088e565b90509250925092565b818382375f910190815291905056fea26469706673582212204365ebfe0316198161211e6648f602ef30b54b8310b64cd331285d5e76802ca464736f6c634300081c0033608060405234801561000f575f5ffd5b506100194661004b565b6040516020016100299190610212565b6040516020818303038152906040525f90816100459190610318565b5061042a565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015281516042808252608082019093526060925f9190602082018180368337019050509050600360fc1b815f815181106100ab576100ab6103d2565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106100d9576100d96103d2565b60200101906001600160f81b03191690815f1a9053505f5b602081101561020a5782600486836020811061010f5761010f6103d2565b1a60f81b6001600160f81b031916901c60f81c60ff1681518110610135576101356103d2565b01602001516001600160f81b031916826101508360026103fa565b61015b906002610417565b8151811061016b5761016b6103d2565b60200101906001600160f81b03191690815f1a90535082858260208110610194576101946103d2565b825191901a600f169081106101ab576101ab6103d2565b01602001516001600160f81b031916826101c68360026103fa565b6101d1906002610417565b6101dc906001610417565b815181106101ec576101ec6103d2565b60200101906001600160f81b03191690815f1a9053506001016100f1565b509392505050565b7f646369706865722d72616e646f6d6e6573732d7630312d424e32353447315f5881527f4d443a4b454343414b2d3235365f535644575f524f5f0000000000000000000060208201525f82518060208501603685015e605f60f81b6036939091019283015250603701919050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806102a857607f821691505b6020821081036102c657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561031357805f5260205f20601f840160051c810160208510156102f15750805b601f840160051c820191505b81811015610310575f81556001016102fd565b50505b505050565b81516001600160401b0381111561033157610331610280565b6103458161033f8454610294565b846102cc565b6020601f821160018114610377575f83156103605750848201515b5f19600385901b1c1916600184901b178455610310565b5f84815260208120601f198516915b828110156103a65787850151825560209485019460019092019101610386565b50848210156103c357868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610411576104116103e6565b92915050565b80820180821115610411576104116103e6565b61259e806104375f395ff3fe608060405234801561000f575f5ffd5b506004361061006f575f3560e01c80638a1f165a1161004d5780638a1f165a146100c3578063eae1e15b146100ff578063f6e548e914610112575f5ffd5b80633033cc51146100735780633408e470146100a05780635f7c7522146100ae575b5f5ffd5b610086610081366004612188565b610135565b604080519283526020830191909152015b60405180910390f35b604051468152602001610097565b6100b6610214565b6040516100979190612213565b6100b66040518060400160405280600581526020017f424e32353400000000000000000000000000000000000000000000000000000081525081565b6100b661010d366004612188565b61029f565b61012561012036600461222c565b6102d9565b6040519015158152602001610097565b5f5f5f6101fe5f8054610147906122cb565b80601f0160208091040260200160405190810160405280929190818152602001828054610173906122cb565b80156101be5780601f10610195576101008083540402835291602001916101be565b820191905f5260205f20905b8154815290600101906020018083116101a157829003601f168201915b505050505086868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506103c892505050565b80516020909101519093509150505b9250929050565b5f8054610220906122cb565b80601f016020809104026020016040519081016040528092919081815260200182805461024c906122cb565b80156102975780601f1061026e57610100808354040283529160200191610297565b820191905f5260205f20905b81548152906001019060200180831161027a57829003601f168201915b505050505081565b60605f5f6102ad8585610135565b915091506102ce6040518060400160405280848152602001838152506104ad565b925050505b92915050565b5f5f61031988888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506104e692505050565b90505f61035a87878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506104e692505050565b90505f61039b86868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061058392505050565b90505f5f6103aa84848761063e565b915091508180156103b85750805b9c9b505050505050505050505050565b604080518082019091525f80825260208201525f6103e684846107b1565b90505f6103f982825b60200201516108fc565b90505f6104078360016103ef565b90506104116120cb565b825181526020808401518282015282516040808401919091529083015160608301525f908460808460066107d05a03fa90508061048557816040517f128e3f0800000000000000000000000000000000000000000000000000000000815260040161047c9190612349565b60405180910390fd5b6040805180820190915284518152602081018560016020020151905298975050505050505050565b6040805181815260608181018352915f919060208201818036833750508451602095860151958301525060408101939093525090919050565b604080518082019091525f80825260208201528151604014610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c6964204731206279746573206c656e677468000000000000000000604482015260640161047c565b5060208181015160409283015183518085019094529083529082015290565b61058b6120e9565b81516080146105f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c6964204732206279746573206c656e677468000000000000000000604482015260640161047c565b50602081810151604080840151606080860151608096870151845197880185528785019586529187019290925292855281518083019092528152808301919091529082015290565b5f5f5f604051806101800160405280875f01518152602001876020015181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec81526020017f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d8152602001855f0151815260200185602001518152602001865f01516001600281106107215761072161231c565b60200201518152602001865f01515f600281106107405761074061231c565b6020020151815260200186602001516001600281106107615761076161231c565b6020020151815260200186602001515f600281106107815761078161231c565b60200201519052905061079261210e565b6020816101808460086107d05a03fa9051151597909650945050505050565b6107b961212c565b5f6107c48484610da4565b90505f5f5f5f6018850177ffffffffffffffffffffffffffffffffffffffffffffffff815116935060308601905077ffffffffffffffffffffffffffffffffffffffffffffffff81511694507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47857f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4778010000000000000000000000000000000000000000000000008709086048870151606088015177ffffffffffffffffffffffffffffffffffffffffffffffff908116975016945092507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47905084817801000000000000000000000000000000000000000000000000860908604080518082019091529283526020830152509695505050505050565b61090461212c565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478210610960576040517fd53e94150000000000000000000000000000000000000000000000000000000081526004810183905260240161047c565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760047f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478586090990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478260010890507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47610a1e837f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476123a6565b60010891505f610a507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47838509610f8e565b90505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4778016789af3a83522eb353c98fc6b36d713d5d8d1cc5dffffffa7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47847f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47888b09090990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47610b24837f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476123a6565b7f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea30890505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47837f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea30890505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4786870990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4786830990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47807f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478485097f10216f7ba065e00de81ac1e7808072c9dd2b2385cd7b438469602eb24829a9bd0960010890505f5f610c5e610c5988610f98565b61100a565b5f0b600103610cc757868c52610c7387610f98565b9050610c7e816110ba565b60208e0191909152915081610cc2576040517f396ec7710000000000000000000000000000000000000000000000000000000081526004810182905260240161047c565b610d43565b610cd3610c5987610f98565b5f0b600103610ce857858c52610c7386610f98565b828c52610cf483610f98565b9050610cff816110ba565b60208e0191909152915081610d43576040517f396ec7710000000000000000000000000000000000000000000000000000000081526004810182905260240161047c565b60208c0151610d51906110f4565b610d5a8e6110f4565b14610d945760208c0151610d8e907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476123a6565b60208d01525b5050505050505050505050919050565b815160609060ff811115610de657836040517f26e4f9ba00000000000000000000000000000000000000000000000000000000815260040161047c9190612213565b60408051608880825260c082019092525f916020820181803683370190505090505f81855f60605f8a88604051602001610e2697969594939291906123d0565b60405160208183030381529060405290505f818051906020012090505f8160018987604051602001610e5b94939291906124ab565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815282825280516020820120606080855260808501909352909350915f91602082018180368337019050509050600360015b81811015610f5257858418610ecc82600161251d565b8d8b604051602001610ee194939291906124ab565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830181028501810195909552805194810194909420939450600101610eb6565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016020908102820101919091529550505050505092915050565b5f6102d382611100565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760037f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47847f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47868709090892915050565b5f5f61101583611858565b905061104260017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476123a6565b810361107057507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92915050565b8015801590611080575080600114155b156102d3576040517f396ec7710000000000000000000000000000000000000000000000000000000081526004810184905260240161047c565b5f5f6110c583611985565b9150827f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47838409149050915091565b5f6102d3600283612530565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996505050838586099450838586099450838586099450838586099450838186099450508284850993508284850993508284850993508281850993508284850993508284850993508285850993508284850993508284850993508284850993508284850993508284850993508284850993508281850995945050505050565b6040805160c080825260e082019092525f918291906020820181803683370190505060208082018181526040830182905260608301829052608083018690527f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea360a08401527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760c0808501919091529293505f92839160055afa90505f5192508061197e576040517fc6daf7ab000000000000000000000000000000000000000000000000000000008152600481018590527f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea360248201527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47604482015260640161047c565b5050919050565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508584880996508587880996508587880996508587880996508587880996508587880996508581880996505050505050808283099392505050565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806120fc61212c565b815260200161210961212c565b905290565b60405180602001604052806001906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b5f5f83601f84011261215a575f5ffd5b50813567ffffffffffffffff811115612171575f5ffd5b60208301915083602082850101111561020d575f5ffd5b5f5f60208385031215612199575f5ffd5b823567ffffffffffffffff8111156121af575f5ffd5b6121bb8582860161214a565b90969095509350505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f61222560208301846121c7565b9392505050565b5f5f5f5f5f5f60608789031215612241575f5ffd5b863567ffffffffffffffff811115612257575f5ffd5b61226389828a0161214a565b909750955050602087013567ffffffffffffffff811115612282575f5ffd5b61228e89828a0161214a565b909550935050604087013567ffffffffffffffff8111156122ad575f5ffd5b6122b989828a0161214a565b979a9699509497509295939492505050565b600181811c908216806122df57607f821691505b602082108103612316577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6080810181835f5b6004811015612370578151835260209283019290910190600101612351565b50505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818103818111156102d3576102d3612379565b5f81518060208401855e5f93019283525090919050565b5f6123e46123de838b6123b9565b896123b9565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b1681527fff000000000000000000000000000000000000000000000000000000000000008760f81b1660018201527fff000000000000000000000000000000000000000000000000000000000000008660f81b16600282015261246f60038201866123b9565b60f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016845250506001909101979650505050505050565b8481527fff000000000000000000000000000000000000000000000000000000000000008460f81b1660208201525f6124e760218301856123b9565b60f89390931b7fff0000000000000000000000000000000000000000000000000000000000000016835250506001019392505050565b808201808211156102d3576102d3612379565b5f82612563577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b50069056fea26469706673582212206df3649d590cafccfd4873076b90bc107f722eecb7166da8e6c43928f9acbc4d64736f6c634300081c0033306080525f80805560e081815261010082905260a08181526101606040526101208381526101409390935260c0929092526001906100409082906002610124565b5060208201516100569060028084019190610124565b505050348015610064575f5ffd5b5061006d610072565b610176565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100c25760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101215780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b8260028101928215610152579160200282015b82811115610152578251825591602001919060010190610137565b5061015e929150610162565b5090565b5b8082111561015e575f8155600101610163565b6080516144ef61019c5f395f8181612b7101528181612b9a0152612dbb01526144ef5ff3fe6080604052600436106101f5575f3560e01c806375b238fc11610117578063acae9fee116100ac578063ca15c8731161007c578063d547741f11610062578063d547741f146106c0578063e63b5d58146106df578063e6b3ca71146106f3575f5ffd5b8063ca15c87314610682578063cd802c91146106a1575f5ffd5b8063acae9fee146105db578063ad3cb1cc146105ef578063b094728914610637578063c58343ef14610656575f5ffd5b806395b8d073116100e757806395b8d07314610551578063a217fddf14610570578063a3246ad314610583578063ac9650d8146105af575f5ffd5b806375b238fc1461043857806381d12c581461046b5780639010d07c1461049d57806391d14854146104e1575f5ffd5b80634b96e1661161018d578063571d70871161015d578063571d7087146103d25780635eab2b20146103e65780636f421ea914610405578063702ef38c14610419575f5ffd5b80634b96e1661461033c5780634f1ef2861461035d57806352d1902d1461037057806354fd4d5014610384575f5ffd5b80632e334452116101c85780632e334452146102c85780632f2ff15d146102ea57806336568abe1461030957806347c0318614610328575f5ffd5b80630138c60d146101f957806301ffc9a71461021a57806316cc9a981461024e578063248a9ca31461026d575b5f5ffd5b348015610204575f5ffd5b506102186102133660046137bd565b61071f565b005b348015610225575f5ffd5b506102396102343660046137d4565b610c74565b60405190151581526020015b60405180910390f35b348015610259575f5ffd5b50610218610268366004613834565b610ccf565b348015610278575f5ffd5b506102ba6102873660046137bd565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610245565b3480156102d3575f5ffd5b506102dc610d66565b604051610245929190613871565b3480156102f5575f5ffd5b5061021861030436600461388c565b610de1565b348015610314575f5ffd5b5061021861032336600461388c565b610e2a565b348015610333575f5ffd5b506102ba5f5481565b348015610347575f5ffd5b50610350610e83565b60405161024591906138ba565b61021861036b366004613981565b610e94565b34801561037b575f5ffd5b506102ba610eb3565b34801561038f575f5ffd5b5060408051808201909152600581527f302e302e3100000000000000000000000000000000000000000000000000000060208201525b6040516102459190613a3c565b3480156103dd575f5ffd5b50610350610ee1565b3480156103f1575f5ffd5b50610218610400366004613a93565b610eed565b348015610410575f5ffd5b5061035061163b565b348015610424575f5ffd5b50610218610433366004613b48565b611647565b348015610443575f5ffd5b506102ba7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b348015610476575f5ffd5b5061048a6104853660046137bd565b6119ee565b6040516102459796959493929190613b9f565b3480156104a8575f5ffd5b506104bc6104b7366004613c32565b611ce4565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610245565b3480156104ec575f5ffd5b506102396104fb36600461388c565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b34801561055c575f5ffd5b506102ba61056b366004613c52565b611d24565b34801561057b575f5ffd5b506102ba5f81565b34801561058e575f5ffd5b506105a261059d3660046137bd565b612429565b6040516102459190613cf1565b3480156105ba575f5ffd5b506105ce6105c9366004613d3e565b61246c565b6040516102459190613daf565b3480156105e6575f5ffd5b506103c5612552565b3480156105fa575f5ffd5b506103c56040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b348015610642575f5ffd5b506102396106513660046137bd565b6125cd565b348015610661575f5ffd5b506106756106703660046137bd565b6125d9565b6040516102459190613e30565b34801561068d575f5ffd5b506102ba61069c3660046137bd565b612951565b3480156106ac575f5ffd5b506102396106bb3660046137bd565b612988565b3480156106cb575f5ffd5b506102186106da36600461388c565b6129a5565b3480156106ea575f5ffd5b506102ba6129e8565b3480156106fe575f5ffd5b506006546104bc9073ffffffffffffffffffffffffffffffffffffffff1681565b610728816125cd565b6107b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4e6f20726571756573742077697468207370656369666965642072657175657360448201527f74494420686173206572726f726564000000000000000000000000000000000060648201526084015b60405180910390fd5b5f81815260056020526040808220815160e081019092528054829082906107df90613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461080b90613f01565b80156108565780601f1061082d57610100808354040283529160200191610856565b820191905f5260205f20905b81548152906001019060200180831161083957829003601f168201915b5050505050815260200160018201805461086f90613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461089b90613f01565b80156108e65780601f106108bd576101008083540402835291602001916108e6565b820191905f5260205f20905b8154815290600101906020018083116108c957829003601f168201915b505050505081526020016002820180546108ff90613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461092b90613f01565b80156109765780601f1061094d57610100808354040283529160200191610976565b820191905f5260205f20905b81548152906001019060200180831161095957829003601f168201915b5050505050815260200160038201805461098f90613f01565b80601f01602080910402602001604051908101604052809291908181526020018280546109bb90613f01565b8015610a065780601f106109dd57610100808354040283529160200191610a06565b820191905f5260205f20905b8154815290600101906020018083116109e957829003601f168201915b5050509183525050600482015473ffffffffffffffffffffffffffffffffffffffff166020820152600582018054604090920191610a4390613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6f90613f01565b8015610aba5780601f10610a9157610100808354040283529160200191610aba565b820191905f5260205f20905b815481529060010190602001808311610a9d57829003601f168201915b50505091835250506006919091015460ff161515602090910152608081015160a08201516040519293505f9273ffffffffffffffffffffffffffffffffffffffff909216917fc8db65820000000000000000000000000000000000000000000000000000000091610b3091879190602401613f52565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051610b9b9190613f81565b5f604051808303815f865af19150503d805f8114610bd4576040519150601f19603f3d011682016040523d82523d5f602084013e610bd9565b606091505b5050905080610c1a576040518381527fb447474448cd6fcec713160a7af96335b628994d6abcc074f215b856ccde31679060200160405180910390a1505050565b610c25600b846129f3565b50610c316007846129fe565b50827f9a03aa0053cbc9522f2f584b8e74ba5478cadd5f83b136eaf2d4338795b369558360a00151604051610c669190613a3c565b60405180910390a25b505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f000000000000000000000000000000000000000000000000000000001480610cc95750610cc982612a09565b92915050565b610cf87fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612a9f565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f7724bcb43a09ae6582affdee2f0ace931e26f2ffa8b5c334baf0a39e9dc03426905f90a250565b610d6e61374d565b610d7661374d565b604080518082019182905260019160039190839060029082845b815481526020019060010190808311610d90575050604080518082019182905294965085935060029250905082845b815481526020019060010190808311610dbf5750505050509050915091509091565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610e1a81612a9f565b610e248383612aac565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610e79576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c6f8282612b01565b6060610e8f6009612b4d565b905090565b610e9c612b59565b610ea582612c5f565b610eaf8282612c88565b5050565b5f610ebc612da3565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6060610e8f6007612b4d565b610f167fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612a9f565b610f1f83612988565b610fab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4e6f20726571756573742077697468207370656369666965642072657175657360448201527f744944000000000000000000000000000000000000000000000000000000000060648201526084016107b0565b5f83815260056020526040808220815160e08101909252805482908290610fd190613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054610ffd90613f01565b80156110485780601f1061101f57610100808354040283529160200191611048565b820191905f5260205f20905b81548152906001019060200180831161102b57829003601f168201915b5050505050815260200160018201805461106190613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461108d90613f01565b80156110d85780601f106110af576101008083540402835291602001916110d8565b820191905f5260205f20905b8154815290600101906020018083116110bb57829003601f168201915b505050505081526020016002820180546110f190613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461111d90613f01565b80156111685780601f1061113f57610100808354040283529160200191611168565b820191905f5260205f20905b81548152906001019060200180831161114b57829003601f168201915b5050505050815260200160038201805461118190613f01565b80601f01602080910402602001604051908101604052809291908181526020018280546111ad90613f01565b80156111f85780601f106111cf576101008083540402835291602001916111f8565b820191905f5260205f20905b8154815290600101906020018083116111db57829003601f168201915b5050509183525050600482015473ffffffffffffffffffffffffffffffffffffffff16602082015260058201805460409092019161123590613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461126190613f01565b80156112ac5780601f10611283576101008083540402835291602001916112ac565b820191905f5260205f20905b81548152906001019060200180831161128f57829003601f168201915b505050918352505060069182015460ff161515602090910152606082015190546040517f5bb09cf800000000000000000000000000000000000000000000000000000000815292935090915f9173ffffffffffffffffffffffffffffffffffffffff1690635bb09cf890611324908590600401613a3c565b602060405180830381865afa15801561133f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113639190613f8c565b90505f8190508073ffffffffffffffffffffffffffffffffffffffff1663f6e548e985602001518888611394612552565b6040518563ffffffff1660e01b81526004016113b39493929190613fd0565b602060405180830381865afa1580156113ce573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113f29190614014565b611458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f5369676e617475726520766572696669636174696f6e206661696c656400000060448201526064016107b0565b5f846080015173ffffffffffffffffffffffffffffffffffffffff1663c8db658260e01b89898960405160240161149193929190614033565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516114fc9190613f81565b5f604051808303815f865af19150503d805f8114611535576040519150601f19603f3d011682016040523d82523d5f602084013e61153a565b606091505b50505f8981526005602081905260409091209192500161155b878983614097565b505f88815260056020526040902060060180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556115a06009896129f3565b50806115ea576115b1600b896129fe565b506040518881527fb447474448cd6fcec713160a7af96335b628994d6abcc074f215b856ccde31679060200160405180910390a1611631565b6115f56007896129fe565b50877f9a03aa0053cbc9522f2f584b8e74ba5478cadd5f83b136eaf2d4338795b36955888860405161162892919061418f565b60405180910390a25b5050505050505050565b6060610e8f600b612b4d565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f811580156116915750825b90505f8267ffffffffffffffff1660011480156116ad5750303b155b9050811580156116bb575080155b156116f2576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156117535784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b61175b612e12565b611763612e12565b60408051808201909152898152602081018990526001611785818c600261376b565b50602082015161179b906002808401919061376b565b509050506117c97fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177588612aac565b61182f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4772616e7420726f6c65206661696c656400000000000000000000000000000060448201526064016107b0565b6118395f88612aac565b61189f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4772616e7420726f6c652072657665727473000000000000000000000000000060448201526064016107b0565b73ffffffffffffffffffffffffffffffffffffffff8616611942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f43616e6e6f7420736574207a65726f2061646472657373206173207369676e6160448201527f7475726520736368656d6520616464726573732070726f76696465720000000060648201526084016107b0565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff881617905583156119e35784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b60056020525f9081526040902080548190611a0890613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3490613f01565b8015611a7f5780601f10611a5657610100808354040283529160200191611a7f565b820191905f5260205f20905b815481529060010190602001808311611a6257829003601f168201915b505050505090806001018054611a9490613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac090613f01565b8015611b0b5780601f10611ae257610100808354040283529160200191611b0b565b820191905f5260205f20905b815481529060010190602001808311611aee57829003601f168201915b505050505090806002018054611b2090613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4c90613f01565b8015611b975780601f10611b6e57610100808354040283529160200191611b97565b820191905f5260205f20905b815481529060010190602001808311611b7a57829003601f168201915b505050505090806003018054611bac90613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054611bd890613f01565b8015611c235780601f10611bfa57610100808354040283529160200191611c23565b820191905f5260205f20905b815481529060010190602001808311611c0657829003601f168201915b5050506004840154600585018054949573ffffffffffffffffffffffffffffffffffffffff909216949193509150611c5a90613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054611c8690613f01565b8015611cd15780601f10611ca857610100808354040283529160200191611cd1565b820191905f5260205f20905b815481529060010190602001808311611cb457829003601f168201915b5050506006909301549192505060ff1687565b5f8281527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260408220611d1c9084612e1a565b949350505050565b5f60015f5f828254611d3691906141cf565b90915550506006546040517f2fc9fa3300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690632fc9fa3390611d93908a908a9060040161418f565b602060405180830381865afa158015611dae573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dd29190614014565b611e38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5369676e617475726520736368656d65206e6f7420737570706f72746564000060448201526064016107b0565b611e7f600161100087878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929493925050612e259050565b611f0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4d657373616765206661696c6564206c656e67746820626f756e64732063686560448201527f636b00000000000000000000000000000000000000000000000000000000000060648201526084016107b0565b611f515f61100085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929493925050612e259050565b611fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f436f6e646974696f6e206661696c6564206c656e67746820626f756e6473206360448201527f6865636b0000000000000000000000000000000000000000000000000000000060648201526084016107b0565b8180156120ae5761202184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612ed192505050565b156120ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f436f6e646974696f6e2062797465732063616e6e6f7420626520616c6c207a6560448201527f726f73000000000000000000000000000000000000000000000000000000000060648201526084016107b0565b6006546040517f5bb09cf80000000000000000000000000000000000000000000000000000000081525f9173ffffffffffffffffffffffffffffffffffffffff1690635bb09cf890612106908c908c9060040161418f565b602060405180830381865afa158015612121573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121459190613f8c565b6040517feae1e15b00000000000000000000000000000000000000000000000000000000815290915081905f9073ffffffffffffffffffffffffffffffffffffffff83169063eae1e15b906121a0908c908c9060040161418f565b5f60405180830381865afa1580156121ba573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526121e191908101906141e2565b604080516101006020601f8d01819004028201810190925260e081018b81529293509182918c908c90819085018382808284375f92019190915250505090825250602080820184905260408051601f8b0183900483028101830182528a8152920191908a908a90819084018382808284375f92019190915250505090825250604080516020601f8f018190048102820181019092528d815291810191908e908e90819084018382808284375f92018290525093855250503360208085019190915260408051808301825284815281860152606090940183905282548352600590525020815181906122d29082614257565b50602082015160018201906122e79082614257565b50604082015160028201906122fc9082614257565b50606082015160038201906123119082614257565b5060808201516004820180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117905560a082015160058201906123719082614257565b5060c09190910151600690910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790555f546123b9906009906129fe565b503373ffffffffffffffffffffffffffffffffffffffff165f547ff0a5ef4bc87d6534674b1469f4b31d03c6510d0f7ab353f3e53f9d1d87ead02b8d8d8d8d878e8e42604051612410989796959493929190614350565b60405180910390a350505f549998505050505050505050565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260409091206060919061246590612b4d565b9392505050565b604080515f8152602081019091526060908267ffffffffffffffff811115612496576124966138fc565b6040519080825280602002602001820160405280156124c957816020015b60608152602001906001900390816124b45790505b5091505f5b8381101561254a57612525308686848181106124ec576124ec6143c8565b90506020028101906124fe91906143f5565b8560405160200161251193929190614456565b604051602081830303815290604052612f34565b838281518110612537576125376143c8565b60209081029190910101526001016124ce565b505092915050565b6040805160808101808352606092610e8f9291600191839190820190839060029082845b81548152602001906001019080831161257657505050918352505060408051808201918290526020909201919060028481019182845b8154815260200190600101908083116125ac57505050505081525050612faa565b5f610cc9600b83613006565b61262f6040518060e00160405280606081526020016060815260200160608152602001606081526020015f73ffffffffffffffffffffffffffffffffffffffff168152602001606081526020015f151581525090565b5f8281526005602052604090819020815160e0810190925280548290829061265690613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461268290613f01565b80156126cd5780601f106126a4576101008083540402835291602001916126cd565b820191905f5260205f20905b8154815290600101906020018083116126b057829003601f168201915b505050505081526020016001820180546126e690613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461271290613f01565b801561275d5780601f106127345761010080835404028352916020019161275d565b820191905f5260205f20905b81548152906001019060200180831161274057829003601f168201915b5050505050815260200160028201805461277690613f01565b80601f01602080910402602001604051908101604052809291908181526020018280546127a290613f01565b80156127ed5780601f106127c4576101008083540402835291602001916127ed565b820191905f5260205f20905b8154815290600101906020018083116127d057829003601f168201915b5050505050815260200160038201805461280690613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461283290613f01565b801561287d5780601f106128545761010080835404028352916020019161287d565b820191905f5260205f20905b81548152906001019060200180831161286057829003601f168201915b5050509183525050600482015473ffffffffffffffffffffffffffffffffffffffff1660208201526005820180546040909201916128ba90613f01565b80601f01602080910402602001604051908101604052809291908181526020018280546128e690613f01565b80156129315780601f1061290857610100808354040283529160200191612931565b820191905f5260205f20905b81548152906001019060200180831161291457829003601f168201915b50505091835250506006919091015460ff16151560209091015292915050565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e823717059320006020819052604082206124659061301d565b5f612994600983613006565b80610cc95750610cc9600b83613006565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546129de81612a9f565b610e248383612b01565b5f610e8f600961301d565b5f6124658383613026565b5f6124658383613109565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610cc957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610cc9565b612aa98133613155565b50565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200081612ad985856131fb565b90508015611d1c575f858152602083905260409020612af89085613310565b50949350505050565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200081612b2e8585613331565b90508015611d1c575f858152602083905260409020612af8908561340d565b60605f6124658361342e565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480612c2657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612c0d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b15612c5d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b612aa97fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612a9f565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612cef575060408051601f3d908101601f19168201909252612cec91810190614475565b60015b612d3d576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016107b0565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612d99576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016107b0565b610c6f8383613487565b3073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612c5d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c5d6134e9565b5f6124658383613550565b5f81831115612eb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f496e76616c696420626f756e64733a206d696e4c656e6774682063616e6e6f7460448201527f2062652067726561746572207468616e206d61784c656e67746800000000000060648201526084016107b0565b8351838110801590612ec85750828111155b95945050505050565b5f805b8251811015612f2b57828181518110612eef57612eef6143c8565b01602001517fff000000000000000000000000000000000000000000000000000000000000001615612f2357505f92915050565b600101612ed4565b50600192915050565b60605f5f8473ffffffffffffffffffffffffffffffffffffffff1684604051612f5d9190613f81565b5f60405180830381855af49150503d805f8114612f95576040519150601f19603f3d011682016040523d82523d5f602084013e612f9a565b606091505b5091509150612ec8858383613576565b60408051608080825260a082019092526060915f91906020820181803683375050845180516020918201519682015180519083015192850191909152604084019690965260608301959095525060808101939093525090919050565b5f8181526001830160205260408120541515612465565b5f610cc9825490565b5f8181526001830160205260408120548015613100575f6130486001836143b5565b85549091505f9061305b906001906143b5565b90508082146130ba575f865f018281548110613079576130796143c8565b905f5260205f200154905080875f018481548110613099576130996143c8565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806130cb576130cb61448c565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610cc9565b5f915050610cc9565b5f81815260018301602052604081205461314e57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610cc9565b505f610cc9565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610eaf576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044016107b0565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff16613100575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556132ac3390565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610cc9565b5f6124658373ffffffffffffffffffffffffffffffffffffffff8416613109565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff1615613100575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610cc9565b5f6124658373ffffffffffffffffffffffffffffffffffffffff8416613026565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561347b57602002820191905f5260205f20905b815481526020019060010190808311613467575b50505050509050919050565b61349082613605565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156134e157610c6f8282612f34565b610eaf6136d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16612c5d576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f825f018281548110613565576135656143c8565b905f5260205f200154905092915050565b60608261358b576135868261370b565b612465565b81511580156135af575073ffffffffffffffffffffffffffffffffffffffff84163b155b156135fe576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016107b0565b5080612465565b8073ffffffffffffffffffffffffffffffffffffffff163b5f0361366d576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016107b0565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b3415612c5d576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80511561371b5780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052806002906020820280368337509192915050565b8260028101928215613799579160200282015b8281111561379957825182559160200191906001019061377e565b506137a59291506137a9565b5090565b5b808211156137a5575f81556001016137aa565b5f602082840312156137cd575f5ffd5b5035919050565b5f602082840312156137e4575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114612465575f5ffd5b73ffffffffffffffffffffffffffffffffffffffff81168114612aa9575f5ffd5b5f60208284031215613844575f5ffd5b813561246581613813565b805f5b6002811015610e24578151845260209384019390910190600101613852565b6080810161387f828561384f565b612465604083018461384f565b5f5f6040838503121561389d575f5ffd5b8235915060208301356138af81613813565b809150509250929050565b602080825282518282018190525f918401906040840190835b818110156138f15783518352602093840193909201916001016138d3565b509095945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613952576139526138fc565b604052919050565b5f67ffffffffffffffff821115613973576139736138fc565b50601f01601f191660200190565b5f5f60408385031215613992575f5ffd5b823561399d81613813565b9150602083013567ffffffffffffffff8111156139b8575f5ffd5b8301601f810185136139c8575f5ffd5b80356139db6139d68261395a565b613929565b8181528660208385010111156139ef575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6124656020830184613a0e565b5f5f83601f840112613a5e575f5ffd5b50813567ffffffffffffffff811115613a75575f5ffd5b602083019150836020828501011115613a8c575f5ffd5b9250929050565b5f5f5f60408486031215613aa5575f5ffd5b83359250602084013567ffffffffffffffff811115613ac2575f5ffd5b613ace86828701613a4e565b9497909650939450505050565b5f82601f830112613aea575f5ffd5b6040805190810167ffffffffffffffff81118282101715613b0d57613b0d6138fc565b8060405250806040840185811115613b23575f5ffd5b845b81811015613b3d578035835260209283019201613b25565b509195945050505050565b5f5f5f5f60c08587031215613b5b575f5ffd5b613b658686613adb565b9350613b748660408701613adb565b92506080850135613b8481613813565b915060a0850135613b9481613813565b939692955090935050565b60e081525f613bb160e083018a613a0e565b8281036020840152613bc3818a613a0e565b90508281036040840152613bd78189613a0e565b90508281036060840152613beb8188613a0e565b905073ffffffffffffffffffffffffffffffffffffffff8616608084015282810360a0840152613c1b8186613a0e565b91505082151560c083015298975050505050505050565b5f5f60408385031215613c43575f5ffd5b50508035926020909101359150565b5f5f5f5f5f5f60608789031215613c67575f5ffd5b863567ffffffffffffffff811115613c7d575f5ffd5b613c8989828a01613a4e565b909750955050602087013567ffffffffffffffff811115613ca8575f5ffd5b613cb489828a01613a4e565b909550935050604087013567ffffffffffffffff811115613cd3575f5ffd5b613cdf89828a01613a4e565b979a9699509497509295939492505050565b602080825282518282018190525f918401906040840190835b818110156138f157835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101613d0a565b5f5f60208385031215613d4f575f5ffd5b823567ffffffffffffffff811115613d65575f5ffd5b8301601f81018513613d75575f5ffd5b803567ffffffffffffffff811115613d8b575f5ffd5b8560208260051b8401011115613d9f575f5ffd5b6020919091019590945092505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015613e24577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452613e0f858351613a0e565b94506020938401939190910190600101613dd5565b50929695505050505050565b602081525f825160e06020840152613e4c610100840182613a0e565b90506020840151601f19848303016040850152613e698282613a0e565b9150506040840151601f19848303016060850152613e878282613a0e565b9150506060840151601f19848303016080850152613ea58282613a0e565b91505073ffffffffffffffffffffffffffffffffffffffff60808501511660a084015260a0840151601f198483030160c0850152613ee38282613a0e565b91505060c0840151613ef960e085018215159052565b509392505050565b600181811c90821680613f1557607f821691505b602082108103613f4c577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b828152604060208201525f611d1c6040830184613a0e565b5f81518060208401855e5f93019283525090919050565b5f6124658284613f6a565b5f60208284031215613f9c575f5ffd5b815161246581613813565b81835281816020850137505f602082840101525f6020601f19601f840116840101905092915050565b606081525f613fe26060830187613a0e565b8281036020840152613ff5818688613fa7565b905082810360408401526140098185613a0e565b979650505050505050565b5f60208284031215614024575f5ffd5b81518015158114612465575f5ffd5b838152604060208201525f612ec8604083018486613fa7565b601f821115610c6f57805f5260205f20601f840160051c810160208510156140715750805b601f840160051c820191505b81811015614090575f815560010161407d565b5050505050565b67ffffffffffffffff8311156140af576140af6138fc565b6140c3836140bd8354613f01565b8361404c565b5f601f841160018114614113575f85156140dd5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355614090565b5f83815260208120601f198716915b828110156141425786850135825560209485019460019092019101614122565b508682101561417d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b602081525f611d1c602083018486613fa7565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115610cc957610cc96141a2565b5f602082840312156141f2575f5ffd5b815167ffffffffffffffff811115614208575f5ffd5b8201601f81018413614218575f5ffd5b80516142266139d68261395a565b81815285602083850101111561423a575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b815167ffffffffffffffff811115614271576142716138fc565b6142858161427f8454613f01565b8461404c565b6020601f8211600181146142d6575f83156142a05750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455614090565b5f84815260208120601f198516915b8281101561430557878501518255602094850194600190920191016142e5565b508482101561434157868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b60a081525f61436360a083018a8c613fa7565b828103602084015261437681898b613fa7565b9050828103604084015261438a8188613a0e565b9050828103606084015261439f818688613fa7565b9150508260808301529998505050505050505050565b81810381811115610cc957610cc96141a2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614428575f5ffd5b83018035915067ffffffffffffffff821115614442575f5ffd5b602001915036819003821315613a8c575f5ffd5b828482375f8382015f815261446b8185613f6a565b9695505050505050565b5f60208284031215614485575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea26469706673582212207f33e7672e5328ae7dfef406ddca56e21c29c4c4d46bb1f9d05ba19afd9c928264736f6c634300081c003360a0604052306080525f600155348015610017575f5ffd5b50610020610025565b6100d7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100755760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d45780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516125566100fd5f395f818161123701528181611260015261149d01526125565ff3fe608060405260043610610199575f3560e01c806391d14854116100dc578063c8db658211610087578063d547741f11610062578063d547741f146105eb578063f8413b071461060a578063f8fa0d661461061e578063fb1a002a1461063d575f5ffd5b8063c8db65821461058e578063ca15c873146105ad578063cd802c91146105cc575f5ffd5b8063ad3cb1cc116100b7578063ad3cb1cc146104b8578063affed0e014610500578063c58343ef14610515575f5ffd5b806391d1485414610409578063a217fddf14610479578063a3246ad31461048c575f5ffd5b806352d1902d11610147578063775b839c11610122578063775b839c146103335780637d468106146103525780638a1f165a146103a25780639010d07c146103ea575f5ffd5b806352d1902d1461029e57806354fd4d50146102b257806375b238fc14610300575f5ffd5b806336568abe1161017757806336568abe1461024d578063485cc9551461026c5780634f1ef2861461028b575f5ffd5b806301ffc9a71461019d578063248a9ca3146101d15780632f2ff15d1461022c575b5f5ffd5b3480156101a8575f5ffd5b506101bc6101b7366004611f2b565b61065e565b60405190151581526020015b60405180910390f35b3480156101dc575f5ffd5b5061021e6101eb366004611f6a565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101c8565b348015610237575f5ffd5b5061024b610246366004611fa9565b6106b9565b005b348015610258575f5ffd5b5061024b610267366004611fa9565b610702565b348015610277575f5ffd5b5061024b610286366004611fd3565b610760565b61024b610299366004612077565b610acd565b3480156102a9575f5ffd5b5061021e610aec565b3480156102bd575f5ffd5b5060408051808201909152600581527f302e302e3100000000000000000000000000000000000000000000000000000060208201525b6040516101c89190612186565b34801561030b575f5ffd5b5061021e7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b34801561033e575f5ffd5b506102f361034d366004612198565b610b1a565b34801561035d575f5ffd5b505f5461037d9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c8565b3480156103ad575f5ffd5b506102f36040518060400160405280600581526020017f424e32353400000000000000000000000000000000000000000000000000000081525081565b3480156103f5575f5ffd5b5061037d6104043660046121ec565b610b83565b348015610414575f5ffd5b506101bc610423366004611fa9565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b348015610484575f5ffd5b5061021e5f81565b348015610497575f5ffd5b506104ab6104a6366004611f6a565b610bc3565b6040516101c8919061220c565b3480156104c3575f5ffd5b506102f36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561050b575f5ffd5b5061021e60015481565b348015610520575f5ffd5b5061058161052f366004611f6a565b604080518082019091525f8082526020820152505f908152600260209081526040918290208251808401909352805483526001015473ffffffffffffffffffffffffffffffffffffffff169082015290565b6040516101c89190612264565b348015610599575f5ffd5b5061024b6105a8366004612291565b610c06565b3480156105b8575f5ffd5b5061021e6105c7366004611f6a565b610c91565b3480156105d7575f5ffd5b506101bc6105e6366004611f6a565b610cc8565b3480156105f6575f5ffd5b5061024b610605366004611fa9565b610d59565b348015610615575f5ffd5b5061021e610d9c565b348015610629575f5ffd5b5061024b610638366004612308565b610fbc565b348015610648575f5ffd5b50610651611051565b6040516101c89190612321565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f0000000000000000000000000000000000000000000000000000000014806106b357506106b3826110d1565b92915050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546106f281611167565b6106fc8383611174565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610751576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61075b82826111c9565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f811580156107aa5750825b90505f8267ffffffffffffffff1660011480156107c65750303b155b9050811580156107d4575080155b1561080b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561086c5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610874611215565b61087c611215565b6108a67fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177587611174565b610911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4772616e7420726f6c65206661696c656400000000000000000000000000000060448201526064015b60405180910390fd5b61091b5f87611174565b610981576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4772616e7420726f6c65206661696c65640000000000000000000000000000006044820152606401610908565b73ffffffffffffffffffffffffffffffffffffffff8716610a24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f43616e6e6f7420736574207a65726f2061646472657373206173207369676e6160448201527f747572652073656e6465720000000000000000000000000000000000000000006064820152608401610908565b5f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161790558315610ac45784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610ad561121f565b610ade82611323565b610ae8828261134c565b5050565b5f610af5611485565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b8051604051606091610b329160200190815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830152016040516020818303038152906040529050919050565b5f8281527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260408220610bbb90846114f4565b949350505050565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e823717059320006020819052604090912060609190610bff906114ff565b9392505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610c86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4f6e6c79207369676e617475726553656e6465722063616e2063616c6c0000006044820152606401610908565b61075b83838361150b565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260408220610bff9061177c565b5f80546040517fcd802c910000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff9091169063cd802c9190602401602060405180830381865afa158015610d35573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106b39190612383565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610d9281611167565b6106fc83836111c9565b5f6001805f828254610dae91906123cf565b90915550506040805180820190915260015481523360208201525f610dd282610b1a565b60408051602080820183525f8083525483518085018552600581527f424e3235340000000000000000000000000000000000000000000000000000009281019290925292517f95b8d073000000000000000000000000000000000000000000000000000000008152939450909273ffffffffffffffffffffffffffffffffffffffff909216916395b8d07391610e6e91869086906004016123e2565b6020604051808303815f875af1158015610e8a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eae9190612424565b5f818152600260208181526040808420885181558883018051600192830180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff9384161790915560038054808601825598528b517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b989097029788019690965590517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c9096018054909516951694909417909255915490514281529296503392909187917feee7195b6cee0fa7044c3af0b86fe2febb1d2703d71191f44052ba0d60ffda64910160405180910390a450505090565b610fe57fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611167565b5f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560405190917f229f6c3b095d683755a99ab458956747a8b7066c3dd42927d850631c34c238f191a250565b60606003805480602002602001604051908101604052809291908181526020015f905b828210156110c8575f84815260209081902060408051808201909152600285029091018054825260019081015473ffffffffffffffffffffffffffffffffffffffff16828401529083529092019101611074565b50505050905090565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806106b357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146106b3565b6111718133611785565b50565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000816111a1858561182b565b90508015610bbb575f8581526020839052604090206111c09085611949565b50949350505050565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000816111f6858561196a565b90508015610bbb575f8581526020839052604090206111c09085611a46565b61121d611a67565b565b3073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614806112ec57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166112d37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561121d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111717fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611167565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113d1575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526113ce91810190612424565b60015b61141f576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610908565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc811461147b576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401610908565b61075b8383611ace565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461121d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610bff8383611b30565b60605f610bff83611b56565b5f838152600260209081526040918290208251808401909352805480845260019091015473ffffffffffffffffffffffffffffffffffffffff16918301919091526115d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f526571756573742077697468207468617420726571756573744944206469642060448201527f6e6f7420657869737400000000000000000000000000000000000000000000006064820152608401610908565b5f83836040516115e992919061243b565b604051809103902090505f826020015173ffffffffffffffffffffffffffffffffffffffff1663431ac65760e01b8784604051602401611633929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516116bc919061244a565b5f604051808303815f865af19150503d805f81146116f5576040519150601f19603f3d011682016040523d82523d5f602084013e6116fa565b606091505b5050905080611738576040517f8f67472d00000000000000000000000000000000000000000000000000000000815260048101879052602401610908565b857fb74b3204a538cd8021662d42e794681ddc339924ef675b8fd11e9eaf6aa19eb583878760405161176c93929190612460565b60405180910390a2505050505050565b5f6106b3825490565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610ae8576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610908565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff16611940575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556118dc3390565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506106b3565b5f9150506106b3565b5f610bff8373ffffffffffffffffffffffffffffffffffffffff8416611baf565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff1615611940575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506106b3565b5f610bff8373ffffffffffffffffffffffffffffffffffffffff8416611bfb565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661121d576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ad782611cd5565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115611b285761075b8282611da3565b610ae8611e22565b5f825f018281548110611b4557611b456124b3565b905f5260205f200154905092915050565b6060815f01805480602002602001604051908101604052809291908181526020018280548015611ba357602002820191905f5260205f20905b815481526020019060010190808311611b8f575b50505050509050919050565b5f818152600183016020526040812054611bf457508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556106b3565b505f6106b3565b5f8181526001830160205260408120548015611940575f611c1d6001836124e0565b85549091505f90611c30906001906124e0565b9050808214611c8f575f865f018281548110611c4e57611c4e6124b3565b905f5260205f200154905080875f018481548110611c6e57611c6e6124b3565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080611ca057611ca06124f3565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506106b3565b8073ffffffffffffffffffffffffffffffffffffffff163b5f03611d3d576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610908565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60605f5f8473ffffffffffffffffffffffffffffffffffffffff1684604051611dcc919061244a565b5f60405180830381855af49150503d805f8114611e04576040519150601f19603f3d011682016040523d82523d5f602084013e611e09565b606091505b5091509150611e19858383611e5a565b95945050505050565b341561121d576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082611e6f57611e6a82611ee9565b610bff565b8151158015611e93575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611ee2576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610908565b5092915050565b805115611ef95780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60208284031215611f3b575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610bff575f5ffd5b5f60208284031215611f7a575f5ffd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611fa4575f5ffd5b919050565b5f5f60408385031215611fba575f5ffd5b82359150611fca60208401611f81565b90509250929050565b5f5f60408385031215611fe4575f5ffd5b611fed83611f81565b9150611fca60208401611f81565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561206f5761206f611ffb565b604052919050565b5f5f60408385031215612088575f5ffd5b61209183611f81565b9150602083013567ffffffffffffffff8111156120ac575f5ffd5b8301601f810185136120bc575f5ffd5b803567ffffffffffffffff8111156120d6576120d6611ffb565b61210760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612028565b81815286602083850101111561211b575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f610bff602083018461213a565b5f60408284031280156121a9575f5ffd5b506040805190810167ffffffffffffffff811182821017156121cd576121cd611ffb565b604052823581526121e060208401611f81565b60208201529392505050565b5f5f604083850312156121fd575f5ffd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b8181101561225957835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101612225565b509095945050505050565b8151815260208083015173ffffffffffffffffffffffffffffffffffffffff1690820152604081016106b3565b5f5f5f604084860312156122a3575f5ffd5b83359250602084013567ffffffffffffffff8111156122c0575f5ffd5b8401601f810186136122d0575f5ffd5b803567ffffffffffffffff8111156122e6575f5ffd5b8660208284010111156122f7575f5ffd5b939660209190910195509293505050565b5f60208284031215612318575f5ffd5b610bff82611f81565b602080825282518282018190525f918401906040840190835b818110156122595761236d8385518051825260209081015173ffffffffffffffffffffffffffffffffffffffff16910152565b602093909301926040929092019160010161233a565b5f60208284031215612393575f5ffd5b81518015158114610bff575f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156106b3576106b36123a2565b606081525f6123f4606083018661213a565b8281036020840152612406818661213a565b9050828103604084015261241a818561213a565b9695505050505050565b5f60208284031215612434575f5ffd5b5051919050565b818382375f9101908152919050565b5f82518060208501845e5f920191825250919050565b83815260406020820152816040820152818360608301375f818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b818103818111156106b3576106b36123a2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea2646970667358221220dceaab71410f9aca3092ce386ea2cd2c0a9afa36ac96d9d087ba45c3f73ba79264736f6c634300081c0033608060405234801561000f575f5ffd5b5060405161044638038061044683398101604081905261002e9161024c565b818161003a8282610043565b50505050610331565b61004c826100a1565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561009557610090828261011c565b505050565b61009d61018f565b5050565b806001600160a01b03163b5f036100db57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051610138919061031b565b5f60405180830381855af49150503d805f8114610170576040519150601f19603f3d011682016040523d82523d5f602084013e610175565b606091505b5090925090506101868583836101b0565b95945050505050565b34156101ae5760405163b398979f60e01b815260040160405180910390fd5b565b6060826101c5576101c08261020f565b610208565b81511580156101dc57506001600160a01b0384163b155b1561020557604051639996b31560e01b81526001600160a01b03851660048201526024016100d2565b50805b9392505050565b80511561021f5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561025d575f5ffd5b82516001600160a01b0381168114610273575f5ffd5b60208401519092506001600160401b0381111561028e575f5ffd5b8301601f8101851361029e575f5ffd5b80516001600160401b038111156102b7576102b7610238565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102e5576102e5610238565b6040528181528282016020018710156102fc575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b6101088061033e5f395ff3fe608060405260043610601b575f3560e01c8063aaf10f42146023575b6021605d565b005b348015602d575f5ffd5b506034606b565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b606960656077565b60b5565b565b5f60726077565b905090565b5f60727f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b365f5f375f5f365f845af43d5f5f3e80801560ce573d5ff35b3d5ffdfea26469706673582212203a14936dfa35a4f93d2dbb66496c5b5d61ba92112a94605bb4b8c917080600b764736f6c634300081c003360a060405234801561000f575f5ffd5b5060405161042638038061042683398101604081905261002e916100b0565b806001600160a01b03811661009e5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574207a65726f20616464726573732061732072616e646f60448201526b36b732b9b99039b2b73232b960a11b606482015260840160405180910390fd5b6001600160a01b0316608052506100dd565b5f602082840312156100c0575f5ffd5b81516001600160a01b03811681146100d6575f5ffd5b9392505050565b6080516103246101025f395f818160ad0152818161010c015261022601526103245ff3fe608060405234801561000f575f5ffd5b5060043610610063575f3560e01c8063431ac6571161004d578063431ac6571461008b578063837e7cc6146100a0578063df3fafe8146100a8575f5ffd5b80626d6cae146100675780633601318914610083575b5f5ffd5b61007060015481565b6040519081526020015b60405180910390f35b6100705f5481565b61009e6100993660046102b7565b6100f4565b005b61009e6101a6565b6100cf7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161007a565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4f6e6c792072616e646f6d6e65737353656e6465722063616e2063616c6c000060448201526064015b60405180910390fd5b6101a282826101b3565b5050565b6101ae610223565b600155565b816001541461021e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f52657175657374204944206d69736d6174636800000000000000000000000000604482015260640161018f565b5f5550565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8413b076040518163ffffffff1660e01b81526004016020604051808303815f875af115801561028e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b291906102d7565b905090565b5f5f604083850312156102c8575f5ffd5b50508035926020909101359150565b5f602082840312156102e7575f5ffd5b505191905056fea2646970667358221220e3dc079a3a90b9d3908b9f60d311360e8849c23b3a4dcef80857bcb15237404d64736f6c634300081c003352616e646f6d6e6573732053656e6465722070726f787920636f6e7472616374206465706c6f7965642061743a2061727261792072657475726e206469646e277420686176652074686520726967687420636f756e7413bdbf3f759a1131f123b2db998675f963efc434b14a4e244533e1bd21312a27136e00872336b98d30449c6b08f8ed8b34306c6ffd969f036833ec1ed81ca31f5369676e61747572652053656e6465722070726f787920636f6e7472616374206465706c6f7965642061743a20a2646970667358221220c44a85057e7cf78e9741a474fd608e0b95aea11b061508b3b9b25948938efae164736f6c634300081c00330d1a2ccd46cb80f94b40809dbd638b44c78e456a4e06b886e8c8f300fa4073950b438ea53140bb1bc93a1c632ab4df0a07d702f34e48ecb7d31da7762a320ad5204a5468e6d01b87c07655eebbb1d43913e197f53281a7d56e2b1a0beac194aa00899f6a3998ecb2f832d35025bf38bef7429005e6b591d9e0ffb10078409f220a6758eec538bb8a511eed78c922a213e4cc06743aeb10ed77f63416fe964c3505d04df1d2daeefa07790b41a9e0ab762e264798bc36340dc3a0cc5654cefa4b\";\n\ntype RandomnessSenderTestConstructorParams =\n  | [\n      linkLibraryAddresses: RandomnessSenderTestLibraryAddresses,\n      signer?: Signer\n    ]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: RandomnessSenderTestConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => {\n  return (\n    typeof xs[0] === \"string\" ||\n    (Array.isArray as (arg: any) => arg is readonly any[])(xs[0]) ||\n    \"_isInterface\" in xs[0]\n  );\n};\n\nexport class RandomnessSenderTest__factory extends ContractFactory {\n  constructor(...args: RandomnessSenderTestConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      const [linkLibraryAddresses, signer] = args;\n      super(\n        _abi,\n        RandomnessSenderTest__factory.linkBytecode(linkLibraryAddresses),\n        signer\n      );\n    }\n  }\n\n  static linkBytecode(\n    linkLibraryAddresses: RandomnessSenderTestLibraryAddresses\n  ): string {\n    let linkedBytecode = _bytecode;\n\n    linkedBytecode = linkedBytecode.replace(\n      new RegExp(\"__\\\\$485e63c703b57fb39db2d057ed0b990874\\\\$__\", \"g\"),\n      linkLibraryAddresses[\"src/randomness/Randomness.sol:Randomness\"]\n        .replace(/^0x/, \"\")\n        .toLowerCase()\n    );\n\n    return linkedBytecode;\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      RandomnessSenderTest & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(\n    runner: ContractRunner | null\n  ): RandomnessSenderTest__factory {\n    return super.connect(runner) as RandomnessSenderTest__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): RandomnessSenderTestInterface {\n    return new Interface(_abi) as RandomnessSenderTestInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): RandomnessSenderTest {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as RandomnessSenderTest;\n  }\n}\n\nexport interface RandomnessSenderTestLibraryAddresses {\n  [\"src/randomness/Randomness.sol:Randomness\"]: string;\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type { StdError, StdErrorInterface } from \"../../StdError.sol/StdError\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"arithmeticError\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"assertionError\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"divisionError\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"encodeStorageError\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"enumConversionError\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"indexOOBError\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"memOverflowError\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"popError\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"zeroVarError\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6102ac610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100aa575f3560e01c8063986c5f681161007d578063b67689da11610063578063b67689da146100f4578063d160e4de146100fc578063fa784a4414610104575f5ffd5b8063986c5f68146100e4578063b22dc54d146100ec575f5ffd5b806305ee8612146100ae57806310332977146100cc5780631de45560146100d45780638995290f146100dc575b5f5ffd5b6100b661010c565b6040516100c39190610223565b60405180910390f35b6100b6610193565b6100b66101a5565b6100b66101b7565b6100b66101c9565b6100b66101db565b6100b66101ed565b6100b66101ff565b6100b6610211565b604051603260248201526044015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f4e487b710000000000000000000000000000000000000000000000000000000017905281565b6040516001602482015260440161011a565b6040516021602482015260440161011a565b6040516011602482015260440161011a565b6040516041602482015260440161011a565b6040516031602482015260440161011a565b6040516051602482015260440161011a565b6040516022602482015260440161011a565b6040516012602482015260440161011a565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168401019150509291505056fea2646970667358221220e0841fc192a0a3eea62cff8ae4bd63b63efdf3a9cbb438a004c5cea1ac5f2ccd64736f6c634300081c0033\";\n\ntype StdErrorConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: StdErrorConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class StdError__factory extends ContractFactory {\n  constructor(...args: StdErrorConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      StdError & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): StdError__factory {\n    return super.connect(runner) as StdError__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): StdErrorInterface {\n    return new Interface(_abi) as StdErrorInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): StdError {\n    return new Contract(address, _abi, runner) as unknown as StdError;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type {\n  StdStorageSafe,\n  StdStorageSafeInterface,\n} from \"../../StdStorage.sol/StdStorageSafe\";\n\nconst _abi = [\n  {\n    type: \"event\",\n    name: \"SlotFound\",\n    inputs: [\n      {\n        name: \"who\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"fsig\",\n        type: \"bytes4\",\n        indexed: false,\n        internalType: \"bytes4\",\n      },\n      {\n        name: \"keysHash\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"slot\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"WARNING_UninitedSlot\",\n    inputs: [\n      {\n        name: \"who\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"slot\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea2646970667358221220d35c30d0d1771d86b9882b84fed481365f86e9a73c98e2e95769129db346506564736f6c634300081c0033\";\n\ntype StdStorageSafeConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: StdStorageSafeConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class StdStorageSafe__factory extends ContractFactory {\n  constructor(...args: StdStorageSafeConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      StdStorageSafe & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): StdStorageSafe__factory {\n    return super.connect(runner) as StdStorageSafe__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): StdStorageSafeInterface {\n    return new Interface(_abi) as StdStorageSafeInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): StdStorageSafe {\n    return new Contract(address, _abi, runner) as unknown as StdStorageSafe;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { Vm, VmInterface } from \"../../Vm.sol/Vm\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"accesses\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"readSlots\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n      {\n        name: \"writeSlots\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"activeFork\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"forkId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"addr\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"keyAddr\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"allowCheatcodes\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbs\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbs\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbs\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbs\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbsDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbsDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbsDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbsDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRel\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRel\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRel\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRel\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRelDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRelDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRelDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRelDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"right\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"right\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n      {\n        name: \"right\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n      {\n        name: \"right\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"right\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"right\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n      {\n        name: \"right\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n      {\n        name: \"right\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"right\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"right\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertFalse\",\n    inputs: [\n      {\n        name: \"condition\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertFalse\",\n    inputs: [\n      {\n        name: \"condition\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"right\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"right\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n      {\n        name: \"right\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"right\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n      {\n        name: \"right\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"right\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"right\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"right\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n      {\n        name: \"right\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n      {\n        name: \"right\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertTrue\",\n    inputs: [\n      {\n        name: \"condition\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertTrue\",\n    inputs: [\n      {\n        name: \"condition\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assume\",\n    inputs: [\n      {\n        name: \"condition\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assumeNoRevert\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assumeNoRevert\",\n    inputs: [\n      {\n        name: \"potentialReverts\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.PotentialRevert[]\",\n        components: [\n          {\n            name: \"reverter\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"partialMatch\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"revertData\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assumeNoRevert\",\n    inputs: [\n      {\n        name: \"potentialRevert\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.PotentialRevert\",\n        components: [\n          {\n            name: \"reverter\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"partialMatch\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"revertData\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"attachDelegation\",\n    inputs: [\n      {\n        name: \"signedDelegation\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.SignedDelegation\",\n        components: [\n          {\n            name: \"v\",\n            type: \"uint8\",\n            internalType: \"uint8\",\n          },\n          {\n            name: \"r\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"s\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"nonce\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"implementation\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"blobBaseFee\",\n    inputs: [\n      {\n        name: \"newBlobBaseFee\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"blobhashes\",\n    inputs: [\n      {\n        name: \"hashes\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"breakpoint\",\n    inputs: [\n      {\n        name: \"char\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"breakpoint\",\n    inputs: [\n      {\n        name: \"char\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"broadcast\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"broadcast\",\n    inputs: [\n      {\n        name: \"signer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"broadcast\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"broadcastRawTransaction\",\n    inputs: [\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"chainId\",\n    inputs: [\n      {\n        name: \"newChainId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"clearMockedCalls\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"cloneAccount\",\n    inputs: [\n      {\n        name: \"source\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"closeFile\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"coinbase\",\n    inputs: [\n      {\n        name: \"newCoinbase\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"computeCreate2Address\",\n    inputs: [\n      {\n        name: \"salt\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"initCodeHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"computeCreate2Address\",\n    inputs: [\n      {\n        name: \"salt\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"initCodeHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"deployer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"computeCreateAddress\",\n    inputs: [\n      {\n        name: \"deployer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"nonce\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"contains\",\n    inputs: [\n      {\n        name: \"subject\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"search\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"copyFile\",\n    inputs: [\n      {\n        name: \"from\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"to\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"copied\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"copyStorage\",\n    inputs: [\n      {\n        name: \"from\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createDir\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"recursive\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createFork\",\n    inputs: [\n      {\n        name: \"urlOrAlias\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"forkId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createFork\",\n    inputs: [\n      {\n        name: \"urlOrAlias\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"blockNumber\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"forkId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createFork\",\n    inputs: [\n      {\n        name: \"urlOrAlias\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"txHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"forkId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createSelectFork\",\n    inputs: [\n      {\n        name: \"urlOrAlias\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"blockNumber\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"forkId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createSelectFork\",\n    inputs: [\n      {\n        name: \"urlOrAlias\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"txHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"forkId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createSelectFork\",\n    inputs: [\n      {\n        name: \"urlOrAlias\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"forkId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createWallet\",\n    inputs: [\n      {\n        name: \"walletLabel\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"wallet\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Wallet\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"publicKeyX\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"publicKeyY\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"privateKey\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createWallet\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"wallet\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Wallet\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"publicKeyX\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"publicKeyY\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"privateKey\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createWallet\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"walletLabel\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"wallet\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Wallet\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"publicKeyX\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"publicKeyY\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"privateKey\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deal\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"newBalance\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deleteSnapshot\",\n    inputs: [\n      {\n        name: \"snapshotId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"success\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deleteSnapshots\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deleteStateSnapshot\",\n    inputs: [\n      {\n        name: \"snapshotId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"success\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deleteStateSnapshots\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deployCode\",\n    inputs: [\n      {\n        name: \"artifactPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"constructorArgs\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deployCode\",\n    inputs: [\n      {\n        name: \"artifactPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deriveKey\",\n    inputs: [\n      {\n        name: \"mnemonic\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"derivationPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"index\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"language\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"deriveKey\",\n    inputs: [\n      {\n        name: \"mnemonic\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"index\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"language\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"deriveKey\",\n    inputs: [\n      {\n        name: \"mnemonic\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"index\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"deriveKey\",\n    inputs: [\n      {\n        name: \"mnemonic\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"derivationPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"index\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"difficulty\",\n    inputs: [\n      {\n        name: \"newDifficulty\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"dumpState\",\n    inputs: [\n      {\n        name: \"pathToStateJson\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"ensNamehash\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"envAddress\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envAddress\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envBool\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envBool\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envBytes\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envBytes\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envBytes32\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envBytes32\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envExists\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envInt\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envInt\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envString\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envString\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envUint\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envUint\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"etch\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"newRuntimeBytecode\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"eth_getLogs\",\n    inputs: [\n      {\n        name: \"fromBlock\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"toBlock\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"topics\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"logs\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.EthGetLogs[]\",\n        components: [\n          {\n            name: \"emitter\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"topics\",\n            type: \"bytes32[]\",\n            internalType: \"bytes32[]\",\n          },\n          {\n            name: \"data\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"blockHash\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"blockNumber\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"transactionHash\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"transactionIndex\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"logIndex\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"removed\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"exists\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"expectCall\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"msgValue\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"gas\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectCall\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"msgValue\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"gas\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"count\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectCall\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"msgValue\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"count\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectCall\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectCall\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"count\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectCall\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"msgValue\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectCallMinGas\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"msgValue\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"minGas\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectCallMinGas\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"msgValue\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"minGas\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"count\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectEmit\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectEmit\",\n    inputs: [\n      {\n        name: \"checkTopic1\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkTopic2\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkTopic3\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkData\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectEmit\",\n    inputs: [\n      {\n        name: \"count\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectEmit\",\n    inputs: [\n      {\n        name: \"checkTopic1\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkTopic2\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkTopic3\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkData\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"count\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectEmit\",\n    inputs: [\n      {\n        name: \"checkTopic1\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkTopic2\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkTopic3\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkData\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"emitter\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectEmit\",\n    inputs: [\n      {\n        name: \"emitter\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectEmit\",\n    inputs: [\n      {\n        name: \"emitter\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"count\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectEmit\",\n    inputs: [\n      {\n        name: \"checkTopic1\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkTopic2\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkTopic3\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkData\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"emitter\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"count\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectEmitAnonymous\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectEmitAnonymous\",\n    inputs: [\n      {\n        name: \"emitter\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectEmitAnonymous\",\n    inputs: [\n      {\n        name: \"checkTopic0\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkTopic1\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkTopic2\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkTopic3\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkData\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"emitter\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectEmitAnonymous\",\n    inputs: [\n      {\n        name: \"checkTopic0\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkTopic1\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkTopic2\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkTopic3\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkData\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectPartialRevert\",\n    inputs: [\n      {\n        name: \"revertData\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectPartialRevert\",\n    inputs: [\n      {\n        name: \"revertData\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n      {\n        name: \"reverter\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectRevert\",\n    inputs: [\n      {\n        name: \"reverter\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"count\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectRevert\",\n    inputs: [\n      {\n        name: \"revertData\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n      {\n        name: \"reverter\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectRevert\",\n    inputs: [\n      {\n        name: \"revertData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"count\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectRevert\",\n    inputs: [\n      {\n        name: \"count\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectRevert\",\n    inputs: [\n      {\n        name: \"revertData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"reverter\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectRevert\",\n    inputs: [\n      {\n        name: \"revertData\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n      {\n        name: \"reverter\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"count\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectRevert\",\n    inputs: [\n      {\n        name: \"revertData\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectRevert\",\n    inputs: [\n      {\n        name: \"revertData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"reverter\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"count\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectRevert\",\n    inputs: [\n      {\n        name: \"reverter\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectRevert\",\n    inputs: [\n      {\n        name: \"revertData\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n      {\n        name: \"count\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectRevert\",\n    inputs: [\n      {\n        name: \"revertData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectRevert\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectSafeMemory\",\n    inputs: [\n      {\n        name: \"min\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"max\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectSafeMemoryCall\",\n    inputs: [\n      {\n        name: \"min\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"max\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"fee\",\n    inputs: [\n      {\n        name: \"newBasefee\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"ffi\",\n    inputs: [\n      {\n        name: \"commandInput\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"fsMetadata\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"metadata\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.FsMetadata\",\n        components: [\n          {\n            name: \"isDir\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"isSymlink\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"length\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"readOnly\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"modified\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"accessed\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"created\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getArtifactPathByCode\",\n    inputs: [\n      {\n        name: \"code\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getArtifactPathByDeployedCode\",\n    inputs: [\n      {\n        name: \"deployedCode\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getBlobBaseFee\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"blobBaseFee\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getBlobhashes\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"hashes\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getBlockNumber\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"height\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getBlockTimestamp\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"timestamp\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getBroadcast\",\n    inputs: [\n      {\n        name: \"contractName\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"chainId\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"txType\",\n        type: \"uint8\",\n        internalType: \"enum VmSafe.BroadcastTxType\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.BroadcastTxSummary\",\n        components: [\n          {\n            name: \"txHash\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"txType\",\n            type: \"uint8\",\n            internalType: \"enum VmSafe.BroadcastTxType\",\n          },\n          {\n            name: \"contractAddress\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"blockNumber\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"success\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getBroadcasts\",\n    inputs: [\n      {\n        name: \"contractName\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"chainId\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.BroadcastTxSummary[]\",\n        components: [\n          {\n            name: \"txHash\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"txType\",\n            type: \"uint8\",\n            internalType: \"enum VmSafe.BroadcastTxType\",\n          },\n          {\n            name: \"contractAddress\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"blockNumber\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"success\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getBroadcasts\",\n    inputs: [\n      {\n        name: \"contractName\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"chainId\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"txType\",\n        type: \"uint8\",\n        internalType: \"enum VmSafe.BroadcastTxType\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.BroadcastTxSummary[]\",\n        components: [\n          {\n            name: \"txHash\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"txType\",\n            type: \"uint8\",\n            internalType: \"enum VmSafe.BroadcastTxType\",\n          },\n          {\n            name: \"contractAddress\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"blockNumber\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"success\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getCode\",\n    inputs: [\n      {\n        name: \"artifactPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"creationBytecode\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getDeployedCode\",\n    inputs: [\n      {\n        name: \"artifactPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"runtimeBytecode\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getDeployment\",\n    inputs: [\n      {\n        name: \"contractName\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"chainId\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getDeployment\",\n    inputs: [\n      {\n        name: \"contractName\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getDeployments\",\n    inputs: [\n      {\n        name: \"contractName\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"chainId\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddresses\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getFoundryVersion\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"version\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getLabel\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"currentLabel\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getMappingKeyAndParentOf\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"elementSlot\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"found\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"key\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"parent\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"getMappingLength\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"mappingSlot\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"length\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"getMappingSlotAt\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"mappingSlot\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"idx\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"getNonce\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"nonce\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getNonce\",\n    inputs: [\n      {\n        name: \"wallet\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Wallet\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"publicKeyX\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"publicKeyY\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"privateKey\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"nonce\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"getRecordedLogs\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"logs\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.Log[]\",\n        components: [\n          {\n            name: \"topics\",\n            type: \"bytes32[]\",\n            internalType: \"bytes32[]\",\n          },\n          {\n            name: \"data\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"emitter\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"getStateDiff\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"diff\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getStateDiffJson\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"diff\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getWallets\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"wallets\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"indexOf\",\n    inputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"isContext\",\n    inputs: [\n      {\n        name: \"context\",\n        type: \"uint8\",\n        internalType: \"enum VmSafe.ForgeContext\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"isDir\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"isFile\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"isPersistent\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"persistent\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"keyExists\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"keyExistsJson\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"keyExistsToml\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"label\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"newLabel\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"lastCallGas\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"gas\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Gas\",\n        components: [\n          {\n            name: \"gasLimit\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"gasTotalUsed\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"gasMemoryUsed\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"gasRefunded\",\n            type: \"int64\",\n            internalType: \"int64\",\n          },\n          {\n            name: \"gasRemaining\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"load\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"slot\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"data\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"loadAllocs\",\n    inputs: [\n      {\n        name: \"pathToAllocsJson\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"makePersistent\",\n    inputs: [\n      {\n        name: \"accounts\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"makePersistent\",\n    inputs: [\n      {\n        name: \"account0\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"account1\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"makePersistent\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"makePersistent\",\n    inputs: [\n      {\n        name: \"account0\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"account1\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"account2\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"mockCall\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n      {\n        name: \"returnData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"mockCall\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"msgValue\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"returnData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"mockCall\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"returnData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"mockCall\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"msgValue\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n      {\n        name: \"returnData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"mockCallRevert\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n      {\n        name: \"revertData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"mockCallRevert\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"msgValue\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n      {\n        name: \"revertData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"mockCallRevert\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"msgValue\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"revertData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"mockCallRevert\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"revertData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"mockCalls\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"msgValue\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"returnData\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"mockCalls\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"returnData\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"mockFunction\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"parseAddress\",\n    inputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"parsedValue\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseBool\",\n    inputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"parsedValue\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseBytes\",\n    inputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"parsedValue\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseBytes32\",\n    inputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"parsedValue\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseInt\",\n    inputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"parsedValue\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJson\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"abiEncodedData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJson\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"abiEncodedData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonAddress\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonAddressArray\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonBool\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonBoolArray\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonBytes\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonBytes32\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonBytes32Array\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonBytesArray\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonInt\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonIntArray\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonKeys\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"keys\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonString\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonStringArray\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonType\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonType\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonTypeArray\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonUint\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonUintArray\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseToml\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"abiEncodedData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseToml\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"abiEncodedData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlAddress\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlAddressArray\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlBool\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlBoolArray\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlBytes\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlBytes32\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlBytes32Array\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlBytesArray\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlInt\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlIntArray\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlKeys\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"keys\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlString\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlStringArray\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlType\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlType\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlTypeArray\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlUint\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlUintArray\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseUint\",\n    inputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"parsedValue\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"pauseGasMetering\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"pauseTracing\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"prank\",\n    inputs: [\n      {\n        name: \"msgSender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"txOrigin\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"prank\",\n    inputs: [\n      {\n        name: \"msgSender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"txOrigin\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"delegateCall\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"prank\",\n    inputs: [\n      {\n        name: \"msgSender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"delegateCall\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"prank\",\n    inputs: [\n      {\n        name: \"msgSender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"prevrandao\",\n    inputs: [\n      {\n        name: \"newPrevrandao\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"prevrandao\",\n    inputs: [\n      {\n        name: \"newPrevrandao\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"projectRoot\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"prompt\",\n    inputs: [\n      {\n        name: \"promptText\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"promptAddress\",\n    inputs: [\n      {\n        name: \"promptText\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"promptSecret\",\n    inputs: [\n      {\n        name: \"promptText\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"promptSecretUint\",\n    inputs: [\n      {\n        name: \"promptText\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"promptUint\",\n    inputs: [\n      {\n        name: \"promptText\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"publicKeyP256\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"publicKeyX\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"publicKeyY\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"randomAddress\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"randomBool\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"randomBytes\",\n    inputs: [\n      {\n        name: \"len\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"randomBytes4\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"randomBytes8\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes8\",\n        internalType: \"bytes8\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"randomInt\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"randomInt\",\n    inputs: [\n      {\n        name: \"bits\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"randomUint\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"randomUint\",\n    inputs: [\n      {\n        name: \"bits\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"randomUint\",\n    inputs: [\n      {\n        name: \"min\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"max\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"readCallers\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"callerMode\",\n        type: \"uint8\",\n        internalType: \"enum VmSafe.CallerMode\",\n      },\n      {\n        name: \"msgSender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"txOrigin\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"readDir\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"maxDepth\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"entries\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.DirEntry[]\",\n        components: [\n          {\n            name: \"errorMessage\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"path\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"depth\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"isDir\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"isSymlink\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"readDir\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"maxDepth\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"followLinks\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"entries\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.DirEntry[]\",\n        components: [\n          {\n            name: \"errorMessage\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"path\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"depth\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"isDir\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"isSymlink\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"readDir\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"entries\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.DirEntry[]\",\n        components: [\n          {\n            name: \"errorMessage\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"path\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"depth\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"isDir\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"isSymlink\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"readFile\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"data\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"readFileBinary\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"readLine\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"line\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"readLink\",\n    inputs: [\n      {\n        name: \"linkPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"targetPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"record\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"recordLogs\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rememberKey\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"keyAddr\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rememberKeys\",\n    inputs: [\n      {\n        name: \"mnemonic\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"derivationPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"count\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"keyAddrs\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rememberKeys\",\n    inputs: [\n      {\n        name: \"mnemonic\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"derivationPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"language\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"count\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"keyAddrs\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"removeDir\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"recursive\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"removeFile\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"replace\",\n    inputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"from\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"to\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"output\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"resetGasMetering\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"resetNonce\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"resumeGasMetering\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"resumeTracing\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"revertTo\",\n    inputs: [\n      {\n        name: \"snapshotId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"success\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"revertToAndDelete\",\n    inputs: [\n      {\n        name: \"snapshotId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"success\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"revertToState\",\n    inputs: [\n      {\n        name: \"snapshotId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"success\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"revertToStateAndDelete\",\n    inputs: [\n      {\n        name: \"snapshotId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"success\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"revokePersistent\",\n    inputs: [\n      {\n        name: \"accounts\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"revokePersistent\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"roll\",\n    inputs: [\n      {\n        name: \"newHeight\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rollFork\",\n    inputs: [\n      {\n        name: \"txHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rollFork\",\n    inputs: [\n      {\n        name: \"forkId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"blockNumber\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rollFork\",\n    inputs: [\n      {\n        name: \"blockNumber\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rollFork\",\n    inputs: [\n      {\n        name: \"forkId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"txHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rpc\",\n    inputs: [\n      {\n        name: \"urlOrAlias\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"method\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"params\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rpc\",\n    inputs: [\n      {\n        name: \"method\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"params\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rpcUrl\",\n    inputs: [\n      {\n        name: \"rpcAlias\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"rpcUrlStructs\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"urls\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.Rpc[]\",\n        components: [\n          {\n            name: \"key\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"url\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"rpcUrls\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"urls\",\n        type: \"string[2][]\",\n        internalType: \"string[2][]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"selectFork\",\n    inputs: [\n      {\n        name: \"forkId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeAddress\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"values\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeAddress\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeBool\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"values\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeBool\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeBytes\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"values\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeBytes\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeBytes32\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"values\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeBytes32\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeInt\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeInt\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"values\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeJson\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeJsonType\",\n    inputs: [\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeJsonType\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeString\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"values\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeString\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeUint\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeUint\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"values\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeUintToHex\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setArbitraryStorage\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setBlockhash\",\n    inputs: [\n      {\n        name: \"blockNumber\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"blockHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setEnv\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setNonce\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"newNonce\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setNonceUnsafe\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"newNonce\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"sign\",\n    inputs: [\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"v\",\n        type: \"uint8\",\n        internalType: \"uint8\",\n      },\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"s\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"sign\",\n    inputs: [\n      {\n        name: \"signer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"v\",\n        type: \"uint8\",\n        internalType: \"uint8\",\n      },\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"s\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"sign\",\n    inputs: [\n      {\n        name: \"wallet\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Wallet\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"publicKeyX\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"publicKeyY\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"privateKey\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n        ],\n      },\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"v\",\n        type: \"uint8\",\n        internalType: \"uint8\",\n      },\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"s\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"sign\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"v\",\n        type: \"uint8\",\n        internalType: \"uint8\",\n      },\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"s\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"signAndAttachDelegation\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"signedDelegation\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.SignedDelegation\",\n        components: [\n          {\n            name: \"v\",\n            type: \"uint8\",\n            internalType: \"uint8\",\n          },\n          {\n            name: \"r\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"s\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"nonce\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"implementation\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"signCompact\",\n    inputs: [\n      {\n        name: \"wallet\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Wallet\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"publicKeyX\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"publicKeyY\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"privateKey\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n        ],\n      },\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"vs\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"signCompact\",\n    inputs: [\n      {\n        name: \"signer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"vs\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"signCompact\",\n    inputs: [\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"vs\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"signCompact\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"vs\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"signDelegation\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"signedDelegation\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.SignedDelegation\",\n        components: [\n          {\n            name: \"v\",\n            type: \"uint8\",\n            internalType: \"uint8\",\n          },\n          {\n            name: \"r\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"s\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"nonce\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"implementation\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"signP256\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"s\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"skip\",\n    inputs: [\n      {\n        name: \"skipTest\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"reason\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"skip\",\n    inputs: [\n      {\n        name: \"skipTest\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"sleep\",\n    inputs: [\n      {\n        name: \"duration\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"snapshot\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"snapshotId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"snapshotGasLastCall\",\n    inputs: [\n      {\n        name: \"group\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"gasUsed\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"snapshotGasLastCall\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"gasUsed\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"snapshotState\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"snapshotId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"snapshotValue\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"snapshotValue\",\n    inputs: [\n      {\n        name: \"group\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"split\",\n    inputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delimiter\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"outputs\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"startBroadcast\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startBroadcast\",\n    inputs: [\n      {\n        name: \"signer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startBroadcast\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startDebugTraceRecording\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startMappingRecording\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startPrank\",\n    inputs: [\n      {\n        name: \"msgSender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startPrank\",\n    inputs: [\n      {\n        name: \"msgSender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"delegateCall\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startPrank\",\n    inputs: [\n      {\n        name: \"msgSender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"txOrigin\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startPrank\",\n    inputs: [\n      {\n        name: \"msgSender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"txOrigin\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"delegateCall\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startSnapshotGas\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startSnapshotGas\",\n    inputs: [\n      {\n        name: \"group\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startStateDiffRecording\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"stopAndReturnDebugTraceRecording\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"step\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.DebugStep[]\",\n        components: [\n          {\n            name: \"stack\",\n            type: \"uint256[]\",\n            internalType: \"uint256[]\",\n          },\n          {\n            name: \"memoryInput\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"opcode\",\n            type: \"uint8\",\n            internalType: \"uint8\",\n          },\n          {\n            name: \"depth\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"isOutOfGas\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"contractAddr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"stopAndReturnStateDiff\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"accountAccesses\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.AccountAccess[]\",\n        components: [\n          {\n            name: \"chainInfo\",\n            type: \"tuple\",\n            internalType: \"struct VmSafe.ChainInfo\",\n            components: [\n              {\n                name: \"forkId\",\n                type: \"uint256\",\n                internalType: \"uint256\",\n              },\n              {\n                name: \"chainId\",\n                type: \"uint256\",\n                internalType: \"uint256\",\n              },\n            ],\n          },\n          {\n            name: \"kind\",\n            type: \"uint8\",\n            internalType: \"enum VmSafe.AccountAccessKind\",\n          },\n          {\n            name: \"account\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"accessor\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"initialized\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"oldBalance\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"newBalance\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"deployedCode\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"value\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"data\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"reverted\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"storageAccesses\",\n            type: \"tuple[]\",\n            internalType: \"struct VmSafe.StorageAccess[]\",\n            components: [\n              {\n                name: \"account\",\n                type: \"address\",\n                internalType: \"address\",\n              },\n              {\n                name: \"slot\",\n                type: \"bytes32\",\n                internalType: \"bytes32\",\n              },\n              {\n                name: \"isWrite\",\n                type: \"bool\",\n                internalType: \"bool\",\n              },\n              {\n                name: \"previousValue\",\n                type: \"bytes32\",\n                internalType: \"bytes32\",\n              },\n              {\n                name: \"newValue\",\n                type: \"bytes32\",\n                internalType: \"bytes32\",\n              },\n              {\n                name: \"reverted\",\n                type: \"bool\",\n                internalType: \"bool\",\n              },\n            ],\n          },\n          {\n            name: \"depth\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"stopBroadcast\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"stopExpectSafeMemory\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"stopMappingRecording\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"stopPrank\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"stopSnapshotGas\",\n    inputs: [\n      {\n        name: \"group\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"gasUsed\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"stopSnapshotGas\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"gasUsed\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"stopSnapshotGas\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"gasUsed\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"store\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"slot\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"value\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"toBase64\",\n    inputs: [\n      {\n        name: \"data\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toBase64\",\n    inputs: [\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toBase64URL\",\n    inputs: [\n      {\n        name: \"data\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toBase64URL\",\n    inputs: [\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toLowercase\",\n    inputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"output\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toString\",\n    inputs: [\n      {\n        name: \"value\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toString\",\n    inputs: [\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toString\",\n    inputs: [\n      {\n        name: \"value\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toString\",\n    inputs: [\n      {\n        name: \"value\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toString\",\n    inputs: [\n      {\n        name: \"value\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toString\",\n    inputs: [\n      {\n        name: \"value\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toUppercase\",\n    inputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"output\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"transact\",\n    inputs: [\n      {\n        name: \"forkId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"txHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"transact\",\n    inputs: [\n      {\n        name: \"txHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"trim\",\n    inputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"output\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"tryFfi\",\n    inputs: [\n      {\n        name: \"commandInput\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.FfiResult\",\n        components: [\n          {\n            name: \"exitCode\",\n            type: \"int32\",\n            internalType: \"int32\",\n          },\n          {\n            name: \"stdout\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"stderr\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"txGasPrice\",\n    inputs: [\n      {\n        name: \"newGasPrice\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"unixTime\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"milliseconds\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"warp\",\n    inputs: [\n      {\n        name: \"newTimestamp\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"writeFile\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"data\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"writeFileBinary\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"writeJson\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"writeJson\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"writeLine\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"data\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"writeToml\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"writeToml\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n] as const;\n\nexport class Vm__factory {\n  static readonly abi = _abi;\n  static createInterface(): VmInterface {\n    return new Interface(_abi) as VmInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Vm {\n    return new Contract(address, _abi, runner) as unknown as Vm;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { VmSafe, VmSafeInterface } from \"../../Vm.sol/VmSafe\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"accesses\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"readSlots\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n      {\n        name: \"writeSlots\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"addr\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"keyAddr\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbs\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbs\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbs\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbs\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbsDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbsDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbsDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbsDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRel\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRel\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRel\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRel\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRelDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRelDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRelDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRelDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"right\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"right\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n      {\n        name: \"right\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n      {\n        name: \"right\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"right\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"right\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n      {\n        name: \"right\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n      {\n        name: \"right\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"right\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"right\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertFalse\",\n    inputs: [\n      {\n        name: \"condition\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertFalse\",\n    inputs: [\n      {\n        name: \"condition\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"right\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"right\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n      {\n        name: \"right\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"right\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n      {\n        name: \"right\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"right\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"right\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"right\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n      {\n        name: \"right\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n      {\n        name: \"right\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertTrue\",\n    inputs: [\n      {\n        name: \"condition\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertTrue\",\n    inputs: [\n      {\n        name: \"condition\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assume\",\n    inputs: [\n      {\n        name: \"condition\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assumeNoRevert\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assumeNoRevert\",\n    inputs: [\n      {\n        name: \"potentialReverts\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.PotentialRevert[]\",\n        components: [\n          {\n            name: \"reverter\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"partialMatch\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"revertData\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assumeNoRevert\",\n    inputs: [\n      {\n        name: \"potentialRevert\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.PotentialRevert\",\n        components: [\n          {\n            name: \"reverter\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"partialMatch\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"revertData\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"attachDelegation\",\n    inputs: [\n      {\n        name: \"signedDelegation\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.SignedDelegation\",\n        components: [\n          {\n            name: \"v\",\n            type: \"uint8\",\n            internalType: \"uint8\",\n          },\n          {\n            name: \"r\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"s\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"nonce\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"implementation\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"breakpoint\",\n    inputs: [\n      {\n        name: \"char\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"breakpoint\",\n    inputs: [\n      {\n        name: \"char\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"broadcast\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"broadcast\",\n    inputs: [\n      {\n        name: \"signer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"broadcast\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"broadcastRawTransaction\",\n    inputs: [\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"closeFile\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"computeCreate2Address\",\n    inputs: [\n      {\n        name: \"salt\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"initCodeHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"computeCreate2Address\",\n    inputs: [\n      {\n        name: \"salt\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"initCodeHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"deployer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"computeCreateAddress\",\n    inputs: [\n      {\n        name: \"deployer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"nonce\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"contains\",\n    inputs: [\n      {\n        name: \"subject\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"search\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"copyFile\",\n    inputs: [\n      {\n        name: \"from\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"to\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"copied\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"copyStorage\",\n    inputs: [\n      {\n        name: \"from\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createDir\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"recursive\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createWallet\",\n    inputs: [\n      {\n        name: \"walletLabel\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"wallet\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Wallet\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"publicKeyX\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"publicKeyY\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"privateKey\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createWallet\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"wallet\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Wallet\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"publicKeyX\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"publicKeyY\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"privateKey\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createWallet\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"walletLabel\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"wallet\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Wallet\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"publicKeyX\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"publicKeyY\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"privateKey\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deployCode\",\n    inputs: [\n      {\n        name: \"artifactPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"constructorArgs\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deployCode\",\n    inputs: [\n      {\n        name: \"artifactPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deriveKey\",\n    inputs: [\n      {\n        name: \"mnemonic\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"derivationPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"index\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"language\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"deriveKey\",\n    inputs: [\n      {\n        name: \"mnemonic\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"index\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"language\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"deriveKey\",\n    inputs: [\n      {\n        name: \"mnemonic\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"index\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"deriveKey\",\n    inputs: [\n      {\n        name: \"mnemonic\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"derivationPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"index\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"ensNamehash\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"envAddress\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envAddress\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envBool\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envBool\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envBytes\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envBytes\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envBytes32\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envBytes32\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envExists\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envInt\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envInt\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envString\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envString\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envUint\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envUint\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"eth_getLogs\",\n    inputs: [\n      {\n        name: \"fromBlock\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"toBlock\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"topics\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"logs\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.EthGetLogs[]\",\n        components: [\n          {\n            name: \"emitter\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"topics\",\n            type: \"bytes32[]\",\n            internalType: \"bytes32[]\",\n          },\n          {\n            name: \"data\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"blockHash\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"blockNumber\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"transactionHash\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"transactionIndex\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"logIndex\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"removed\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"exists\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"ffi\",\n    inputs: [\n      {\n        name: \"commandInput\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"fsMetadata\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"metadata\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.FsMetadata\",\n        components: [\n          {\n            name: \"isDir\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"isSymlink\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"length\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"readOnly\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"modified\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"accessed\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"created\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getArtifactPathByCode\",\n    inputs: [\n      {\n        name: \"code\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getArtifactPathByDeployedCode\",\n    inputs: [\n      {\n        name: \"deployedCode\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getBlobBaseFee\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"blobBaseFee\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getBlockNumber\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"height\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getBlockTimestamp\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"timestamp\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getBroadcast\",\n    inputs: [\n      {\n        name: \"contractName\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"chainId\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"txType\",\n        type: \"uint8\",\n        internalType: \"enum VmSafe.BroadcastTxType\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.BroadcastTxSummary\",\n        components: [\n          {\n            name: \"txHash\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"txType\",\n            type: \"uint8\",\n            internalType: \"enum VmSafe.BroadcastTxType\",\n          },\n          {\n            name: \"contractAddress\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"blockNumber\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"success\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getBroadcasts\",\n    inputs: [\n      {\n        name: \"contractName\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"chainId\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.BroadcastTxSummary[]\",\n        components: [\n          {\n            name: \"txHash\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"txType\",\n            type: \"uint8\",\n            internalType: \"enum VmSafe.BroadcastTxType\",\n          },\n          {\n            name: \"contractAddress\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"blockNumber\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"success\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getBroadcasts\",\n    inputs: [\n      {\n        name: \"contractName\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"chainId\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"txType\",\n        type: \"uint8\",\n        internalType: \"enum VmSafe.BroadcastTxType\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.BroadcastTxSummary[]\",\n        components: [\n          {\n            name: \"txHash\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"txType\",\n            type: \"uint8\",\n            internalType: \"enum VmSafe.BroadcastTxType\",\n          },\n          {\n            name: \"contractAddress\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"blockNumber\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"success\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getCode\",\n    inputs: [\n      {\n        name: \"artifactPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"creationBytecode\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getDeployedCode\",\n    inputs: [\n      {\n        name: \"artifactPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"runtimeBytecode\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getDeployment\",\n    inputs: [\n      {\n        name: \"contractName\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"chainId\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getDeployment\",\n    inputs: [\n      {\n        name: \"contractName\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getDeployments\",\n    inputs: [\n      {\n        name: \"contractName\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"chainId\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddresses\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getFoundryVersion\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"version\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getLabel\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"currentLabel\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getMappingKeyAndParentOf\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"elementSlot\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"found\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"key\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"parent\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"getMappingLength\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"mappingSlot\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"length\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"getMappingSlotAt\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"mappingSlot\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"idx\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"getNonce\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"nonce\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getNonce\",\n    inputs: [\n      {\n        name: \"wallet\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Wallet\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"publicKeyX\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"publicKeyY\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"privateKey\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"nonce\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"getRecordedLogs\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"logs\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.Log[]\",\n        components: [\n          {\n            name: \"topics\",\n            type: \"bytes32[]\",\n            internalType: \"bytes32[]\",\n          },\n          {\n            name: \"data\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"emitter\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"getStateDiff\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"diff\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getStateDiffJson\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"diff\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getWallets\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"wallets\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"indexOf\",\n    inputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"isContext\",\n    inputs: [\n      {\n        name: \"context\",\n        type: \"uint8\",\n        internalType: \"enum VmSafe.ForgeContext\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"isDir\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"isFile\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"keyExists\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"keyExistsJson\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"keyExistsToml\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"label\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"newLabel\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"lastCallGas\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"gas\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Gas\",\n        components: [\n          {\n            name: \"gasLimit\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"gasTotalUsed\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"gasMemoryUsed\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"gasRefunded\",\n            type: \"int64\",\n            internalType: \"int64\",\n          },\n          {\n            name: \"gasRemaining\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"load\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"slot\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"data\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"parseAddress\",\n    inputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"parsedValue\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseBool\",\n    inputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"parsedValue\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseBytes\",\n    inputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"parsedValue\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseBytes32\",\n    inputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"parsedValue\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseInt\",\n    inputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"parsedValue\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJson\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"abiEncodedData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJson\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"abiEncodedData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonAddress\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonAddressArray\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonBool\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonBoolArray\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonBytes\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonBytes32\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonBytes32Array\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonBytesArray\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonInt\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonIntArray\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonKeys\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"keys\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonString\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonStringArray\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonType\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonType\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonTypeArray\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonUint\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonUintArray\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseToml\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"abiEncodedData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseToml\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"abiEncodedData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlAddress\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlAddressArray\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlBool\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlBoolArray\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlBytes\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlBytes32\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlBytes32Array\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlBytesArray\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlInt\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlIntArray\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlKeys\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"keys\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlString\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlStringArray\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlType\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlType\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlTypeArray\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlUint\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlUintArray\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseUint\",\n    inputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"parsedValue\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"pauseGasMetering\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"pauseTracing\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"projectRoot\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"prompt\",\n    inputs: [\n      {\n        name: \"promptText\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"promptAddress\",\n    inputs: [\n      {\n        name: \"promptText\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"promptSecret\",\n    inputs: [\n      {\n        name: \"promptText\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"promptSecretUint\",\n    inputs: [\n      {\n        name: \"promptText\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"promptUint\",\n    inputs: [\n      {\n        name: \"promptText\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"publicKeyP256\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"publicKeyX\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"publicKeyY\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"randomAddress\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"randomBool\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"randomBytes\",\n    inputs: [\n      {\n        name: \"len\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"randomBytes4\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"randomBytes8\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes8\",\n        internalType: \"bytes8\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"randomInt\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"randomInt\",\n    inputs: [\n      {\n        name: \"bits\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"randomUint\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"randomUint\",\n    inputs: [\n      {\n        name: \"bits\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"randomUint\",\n    inputs: [\n      {\n        name: \"min\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"max\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"readDir\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"maxDepth\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"entries\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.DirEntry[]\",\n        components: [\n          {\n            name: \"errorMessage\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"path\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"depth\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"isDir\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"isSymlink\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"readDir\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"maxDepth\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"followLinks\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"entries\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.DirEntry[]\",\n        components: [\n          {\n            name: \"errorMessage\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"path\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"depth\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"isDir\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"isSymlink\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"readDir\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"entries\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.DirEntry[]\",\n        components: [\n          {\n            name: \"errorMessage\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"path\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"depth\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"isDir\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"isSymlink\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"readFile\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"data\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"readFileBinary\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"readLine\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"line\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"readLink\",\n    inputs: [\n      {\n        name: \"linkPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"targetPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"record\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"recordLogs\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rememberKey\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"keyAddr\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rememberKeys\",\n    inputs: [\n      {\n        name: \"mnemonic\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"derivationPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"count\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"keyAddrs\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rememberKeys\",\n    inputs: [\n      {\n        name: \"mnemonic\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"derivationPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"language\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"count\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"keyAddrs\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"removeDir\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"recursive\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"removeFile\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"replace\",\n    inputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"from\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"to\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"output\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"resetGasMetering\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"resumeGasMetering\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"resumeTracing\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"rpc\",\n    inputs: [\n      {\n        name: \"urlOrAlias\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"method\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"params\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rpc\",\n    inputs: [\n      {\n        name: \"method\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"params\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rpcUrl\",\n    inputs: [\n      {\n        name: \"rpcAlias\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"rpcUrlStructs\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"urls\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.Rpc[]\",\n        components: [\n          {\n            name: \"key\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"url\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"rpcUrls\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"urls\",\n        type: \"string[2][]\",\n        internalType: \"string[2][]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeAddress\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"values\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeAddress\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeBool\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"values\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeBool\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeBytes\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"values\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeBytes\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeBytes32\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"values\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeBytes32\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeInt\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeInt\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"values\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeJson\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeJsonType\",\n    inputs: [\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeJsonType\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeString\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"values\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeString\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeUint\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeUint\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"values\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeUintToHex\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setArbitraryStorage\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setEnv\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"sign\",\n    inputs: [\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"v\",\n        type: \"uint8\",\n        internalType: \"uint8\",\n      },\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"s\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"sign\",\n    inputs: [\n      {\n        name: \"signer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"v\",\n        type: \"uint8\",\n        internalType: \"uint8\",\n      },\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"s\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"sign\",\n    inputs: [\n      {\n        name: \"wallet\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Wallet\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"publicKeyX\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"publicKeyY\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"privateKey\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n        ],\n      },\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"v\",\n        type: \"uint8\",\n        internalType: \"uint8\",\n      },\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"s\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"sign\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"v\",\n        type: \"uint8\",\n        internalType: \"uint8\",\n      },\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"s\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"signAndAttachDelegation\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"signedDelegation\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.SignedDelegation\",\n        components: [\n          {\n            name: \"v\",\n            type: \"uint8\",\n            internalType: \"uint8\",\n          },\n          {\n            name: \"r\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"s\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"nonce\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"implementation\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"signCompact\",\n    inputs: [\n      {\n        name: \"wallet\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Wallet\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"publicKeyX\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"publicKeyY\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"privateKey\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n        ],\n      },\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"vs\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"signCompact\",\n    inputs: [\n      {\n        name: \"signer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"vs\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"signCompact\",\n    inputs: [\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"vs\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"signCompact\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"vs\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"signDelegation\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"signedDelegation\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.SignedDelegation\",\n        components: [\n          {\n            name: \"v\",\n            type: \"uint8\",\n            internalType: \"uint8\",\n          },\n          {\n            name: \"r\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"s\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"nonce\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"implementation\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"signP256\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"s\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"sleep\",\n    inputs: [\n      {\n        name: \"duration\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"split\",\n    inputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delimiter\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"outputs\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"startBroadcast\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startBroadcast\",\n    inputs: [\n      {\n        name: \"signer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startBroadcast\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startDebugTraceRecording\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startMappingRecording\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startStateDiffRecording\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"stopAndReturnDebugTraceRecording\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"step\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.DebugStep[]\",\n        components: [\n          {\n            name: \"stack\",\n            type: \"uint256[]\",\n            internalType: \"uint256[]\",\n          },\n          {\n            name: \"memoryInput\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"opcode\",\n            type: \"uint8\",\n            internalType: \"uint8\",\n          },\n          {\n            name: \"depth\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"isOutOfGas\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"contractAddr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"stopAndReturnStateDiff\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"accountAccesses\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.AccountAccess[]\",\n        components: [\n          {\n            name: \"chainInfo\",\n            type: \"tuple\",\n            internalType: \"struct VmSafe.ChainInfo\",\n            components: [\n              {\n                name: \"forkId\",\n                type: \"uint256\",\n                internalType: \"uint256\",\n              },\n              {\n                name: \"chainId\",\n                type: \"uint256\",\n                internalType: \"uint256\",\n              },\n            ],\n          },\n          {\n            name: \"kind\",\n            type: \"uint8\",\n            internalType: \"enum VmSafe.AccountAccessKind\",\n          },\n          {\n            name: \"account\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"accessor\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"initialized\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"oldBalance\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"newBalance\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"deployedCode\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"value\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"data\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"reverted\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"storageAccesses\",\n            type: \"tuple[]\",\n            internalType: \"struct VmSafe.StorageAccess[]\",\n            components: [\n              {\n                name: \"account\",\n                type: \"address\",\n                internalType: \"address\",\n              },\n              {\n                name: \"slot\",\n                type: \"bytes32\",\n                internalType: \"bytes32\",\n              },\n              {\n                name: \"isWrite\",\n                type: \"bool\",\n                internalType: \"bool\",\n              },\n              {\n                name: \"previousValue\",\n                type: \"bytes32\",\n                internalType: \"bytes32\",\n              },\n              {\n                name: \"newValue\",\n                type: \"bytes32\",\n                internalType: \"bytes32\",\n              },\n              {\n                name: \"reverted\",\n                type: \"bool\",\n                internalType: \"bool\",\n              },\n            ],\n          },\n          {\n            name: \"depth\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"stopBroadcast\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"stopMappingRecording\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"toBase64\",\n    inputs: [\n      {\n        name: \"data\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toBase64\",\n    inputs: [\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toBase64URL\",\n    inputs: [\n      {\n        name: \"data\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toBase64URL\",\n    inputs: [\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toLowercase\",\n    inputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"output\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toString\",\n    inputs: [\n      {\n        name: \"value\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toString\",\n    inputs: [\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toString\",\n    inputs: [\n      {\n        name: \"value\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toString\",\n    inputs: [\n      {\n        name: \"value\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toString\",\n    inputs: [\n      {\n        name: \"value\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toString\",\n    inputs: [\n      {\n        name: \"value\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toUppercase\",\n    inputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"output\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"trim\",\n    inputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"output\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"tryFfi\",\n    inputs: [\n      {\n        name: \"commandInput\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.FfiResult\",\n        components: [\n          {\n            name: \"exitCode\",\n            type: \"int32\",\n            internalType: \"int32\",\n          },\n          {\n            name: \"stdout\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"stderr\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"unixTime\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"milliseconds\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"writeFile\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"data\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"writeFileBinary\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"writeJson\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"writeJson\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"writeLine\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"data\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"writeToml\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"writeToml\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n] as const;\n\nexport class VmSafe__factory {\n  static readonly abi = _abi;\n  static createInterface(): VmSafeInterface {\n    return new Interface(_abi) as VmSafeInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): VmSafe {\n    return new Contract(address, _abi, runner) as unknown as VmSafe;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  IERC1822Proxiable,\n  IERC1822ProxiableInterface,\n} from \"../../draft-IERC1822.sol/IERC1822Proxiable\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"proxiableUUID\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n] as const;\n\nexport class IERC1822Proxiable__factory {\n  static readonly abi = _abi;\n  static createInterface(): IERC1822ProxiableInterface {\n    return new Interface(_abi) as IERC1822ProxiableInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): IERC1822Proxiable {\n    return new Contract(address, _abi, runner) as unknown as IERC1822Proxiable;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { AccessControl, AccessControlInterface } from \"../AccessControl\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"DEFAULT_ADMIN_ROLE\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleAdmin\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"grantRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"hasRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"renounceRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"callerConfirmation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"revokeRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"supportsInterface\",\n    inputs: [\n      {\n        name: \"interfaceId\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"event\",\n    name: \"RoleAdminChanged\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleGranted\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleRevoked\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlBadConfirmation\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlUnauthorizedAccount\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"neededRole\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n] as const;\n\nexport class AccessControl__factory {\n  static readonly abi = _abi;\n  static createInterface(): AccessControlInterface {\n    return new Interface(_abi) as AccessControlInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): AccessControl {\n    return new Contract(address, _abi, runner) as unknown as AccessControl;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  AccessControlEnumerableUpgradeable,\n  AccessControlEnumerableUpgradeableInterface,\n} from \"../AccessControlEnumerableUpgradeable\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"DEFAULT_ADMIN_ROLE\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleAdmin\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleMember\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"index\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleMemberCount\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleMembers\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"grantRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"hasRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"renounceRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"callerConfirmation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"revokeRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"supportsInterface\",\n    inputs: [\n      {\n        name: \"interfaceId\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"event\",\n    name: \"Initialized\",\n    inputs: [\n      {\n        name: \"version\",\n        type: \"uint64\",\n        indexed: false,\n        internalType: \"uint64\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleAdminChanged\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleGranted\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleRevoked\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlBadConfirmation\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlUnauthorizedAccount\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"neededRole\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidInitialization\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"NotInitializing\",\n    inputs: [],\n  },\n] as const;\n\nexport class AccessControlEnumerableUpgradeable__factory {\n  static readonly abi = _abi;\n  static createInterface(): AccessControlEnumerableUpgradeableInterface {\n    return new Interface(_abi) as AccessControlEnumerableUpgradeableInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): AccessControlEnumerableUpgradeable {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as AccessControlEnumerableUpgradeable;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  AccessControlUpgradeable,\n  AccessControlUpgradeableInterface,\n} from \"../AccessControlUpgradeable\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"DEFAULT_ADMIN_ROLE\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleAdmin\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"grantRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"hasRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"renounceRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"callerConfirmation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"revokeRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"supportsInterface\",\n    inputs: [\n      {\n        name: \"interfaceId\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"event\",\n    name: \"Initialized\",\n    inputs: [\n      {\n        name: \"version\",\n        type: \"uint64\",\n        indexed: false,\n        internalType: \"uint64\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleAdminChanged\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleGranted\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleRevoked\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlBadConfirmation\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlUnauthorizedAccount\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"neededRole\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidInitialization\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"NotInitializing\",\n    inputs: [],\n  },\n] as const;\n\nexport class AccessControlUpgradeable__factory {\n  static readonly abi = _abi;\n  static createInterface(): AccessControlUpgradeableInterface {\n    return new Interface(_abi) as AccessControlUpgradeableInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): AccessControlUpgradeable {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as AccessControlUpgradeable;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type { Address, AddressInterface } from \"../Address\";\n\nconst _abi = [\n  {\n    type: \"error\",\n    name: \"AddressEmptyCode\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea2646970667358221220ab372f5b74e686d88939bad760b79f00c10d039057cb324170bdb49ae3c223dd64736f6c634300081c0033\";\n\ntype AddressConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: AddressConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class Address__factory extends ContractFactory {\n  constructor(...args: AddressConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      Address & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): Address__factory {\n    return super.connect(runner) as Address__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): AddressInterface {\n    return new Interface(_abi) as AddressInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Address {\n    return new Contract(address, _abi, runner) as unknown as Address;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type { BLS, BLSInterface } from \"../BLS\";\n\nconst _abi = [\n  {\n    type: \"error\",\n    name: \"BNAddFailed\",\n    inputs: [\n      {\n        name: \"input\",\n        type: \"uint256[4]\",\n        internalType: \"uint256[4]\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidDSTLength\",\n    inputs: [\n      {\n        name: \"dst\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidFieldElement\",\n    inputs: [\n      {\n        name: \"x\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"MapToPointFailed\",\n    inputs: [\n      {\n        name: \"noSqrt\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ModExpFailed\",\n    inputs: [\n      {\n        name: \"base\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"exponent\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"modulus\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea2646970667358221220d2ba2bc20ff63b5dc752e8d9439771958e4a1869a131a1c669870ac2d348e49064736f6c634300081c0033\";\n\ntype BLSConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: BLSConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class BLS__factory extends ContractFactory {\n  constructor(...args: BLSConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      BLS & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): BLS__factory {\n    return super.connect(runner) as BLS__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): BLSInterface {\n    return new Interface(_abi) as BLSInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): BLS {\n    return new Contract(address, _abi, runner) as unknown as BLS;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type { BLSTest, BLSTestInterface } from \"../BLSTest\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"IS_TEST\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeArtifacts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedArtifacts_\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeContracts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedContracts_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzSelector[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeSenders\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedSenders_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"failed\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetArtifactSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedArtifactSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzArtifactSelector[]\",\n        components: [\n          {\n            name: \"artifact\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetArtifacts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedArtifacts_\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetContracts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedContracts_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetInterfaces\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedInterfaces_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzInterface[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"artifacts\",\n            type: \"string[]\",\n            internalType: \"string[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzSelector[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetSenders\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedSenders_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"test__expandMsgTo96\",\n    inputs: [\n      {\n        name: \"domain\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"message\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"expanded\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"gas\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"test__hashToField\",\n    inputs: [\n      {\n        name: \"domain\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"message\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"p\",\n        type: \"uint256[2]\",\n        internalType: \"uint256[2]\",\n      },\n      {\n        name: \"gas\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"test__hashToPoint\",\n    inputs: [\n      {\n        name: \"domain\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"message\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"p\",\n        type: \"tuple\",\n        internalType: \"struct BLS.PointG1\",\n        components: [\n          {\n            name: \"x\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"y\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n        ],\n      },\n      {\n        name: \"gas\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"test__isOnCurveG1\",\n    inputs: [\n      {\n        name: \"point\",\n        type: \"uint256[2]\",\n        internalType: \"uint256[2]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"_isOnCurve\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"gas\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"test__isOnCurveG2\",\n    inputs: [\n      {\n        name: \"point\",\n        type: \"uint256[4]\",\n        internalType: \"uint256[4]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"_isOnCurve\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"gas\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"test__isValidPublicKey\",\n    inputs: [\n      {\n        name: \"publicKey\",\n        type: \"uint256[4]\",\n        internalType: \"uint256[4]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"isValid\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"gas\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"test__isValidSignature\",\n    inputs: [\n      {\n        name: \"signature\",\n        type: \"uint256[2]\",\n        internalType: \"uint256[2]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"isValid\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"gas\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"test__mapToPoint\",\n    inputs: [\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"p\",\n        type: \"uint256[2]\",\n        internalType: \"uint256[2]\",\n      },\n      {\n        name: \"gas\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"test__verifySingle\",\n    inputs: [\n      {\n        name: \"signature\",\n        type: \"uint256[2]\",\n        internalType: \"uint256[2]\",\n      },\n      {\n        name: \"pubkey\",\n        type: \"uint256[4]\",\n        internalType: \"uint256[4]\",\n      },\n      {\n        name: \"message\",\n        type: \"uint256[2]\",\n        internalType: \"uint256[2]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"pairingSuccess\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"callSuccess\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"gas\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"event\",\n    name: \"log\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_address\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"uint256[]\",\n        indexed: false,\n        internalType: \"uint256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"int256[]\",\n        indexed: false,\n        internalType: \"int256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"address[]\",\n        indexed: false,\n        internalType: \"address[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_bytes\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_bytes32\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_int\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_address\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256[]\",\n        indexed: false,\n        internalType: \"uint256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256[]\",\n        indexed: false,\n        internalType: \"int256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"address[]\",\n        indexed: false,\n        internalType: \"address[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_bytes\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_bytes32\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_decimal_int\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_decimal_uint\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_int\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_string\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_uint\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_string\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_uint\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"logs\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"BNAddFailed\",\n    inputs: [\n      {\n        name: \"input\",\n        type: \"uint256[4]\",\n        internalType: \"uint256[4]\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidDSTLength\",\n    inputs: [\n      {\n        name: \"dst\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidFieldElement\",\n    inputs: [\n      {\n        name: \"x\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"MapToPointFailed\",\n    inputs: [\n      {\n        name: \"noSqrt\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ModExpFailed\",\n    inputs: [\n      {\n        name: \"base\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"exponent\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"modulus\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602b575f5ffd5b5061390c806100395f395ff3fe608060405234801561000f575f5ffd5b506004361061016e575f3560e01c806385226c81116100d2578063b0464fdc11610088578063e20c9f7111610063578063e20c9f7114610324578063f5a70d841461032c578063fa7626d41461033f575f5ffd5b8063b0464fdc146102fc578063b5508aa914610304578063ba414fa61461030c575f5ffd5b8063916a17c6116100b8578063916a17c6146102a15780639e3ec031146102b65780639ed07916146102e9575f5ffd5b806385226c81146102795780638b55a9a11461028e575f5ffd5b80634d3980c51161012757806366d9a9a01161010d57806366d9a9a0146102215780636e763f08146102365780637e7f5c1e14610249575f5ffd5b80634d3980c5146101d65780635aff3206146101f7575f5ffd5b80632ade3880116101575780632ade3880146101b15780633e5e3c23146101c65780633f7286f4146101ce575f5ffd5b80630c4e1ab7146101725780631ed7831c1461019c575b5f5ffd5b610185610180366004613079565b61034c565b60405161019392919061312a565b60405180910390f35b6101a4610372565b604051610193919061314b565b6101b96103df565b60405161019391906131a3565b6101a4610528565b6101a4610593565b6101e96101e43660046132b5565b6105fe565b6040516101939291906132cc565b61020a610205366004613355565b610656565b604080519215158352602083019190915201610193565b610229610678565b60405161019391906133d2565b61020a61024436600461349b565b6107f1565b61025c6102573660046134b5565b6107ff565b604080519315158452911515602084015290820152606001610193565b6102816108c1565b60405161019391906134f9565b61020a61029c36600461349b565b61098c565b6102a96109da565b604051610193919061356e565b6102c96102c4366004613079565b610add565b604080518351815260209384015193810193909352820152606001610193565b6101e96102f7366004613079565b610afe565b6102a9610b14565b610281610c17565b610314610ce2565b6040519015158152602001610193565b6101a4610db2565b61020a61033a366004613355565b610e1d565b601f546103149060ff1681565b60605f5a905061035c8484610e6e565b91505a610369908261363d565b90509250929050565b606060168054806020026020016040519081016040528092919081815260200182805480156103d557602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103aa575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020015f905b8282101561051f575f848152602080822060408051808201825260028702909201805473ffffffffffffffffffffffffffffffffffffffff168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610508578382905f5260205f2001805461047d90613650565b80601f01602080910402602001604051908101604052809291908181526020018280546104a990613650565b80156104f45780601f106104cb576101008083540402835291602001916104f4565b820191905f5260205f20905b8154815290600101906020018083116104d757829003601f168201915b505050505081526020019060010190610460565b505050508152505081526020019060010190610402565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156103d557602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103aa575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156103d557602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103aa575050505050905090565b610606612f19565b5f5a90507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478084106106385750915091565b61064184611062565b92505a61064e908361363d565b915050915091565b5f5f5a90506106648361150a565b91505a610671908261363d565b9050915091565b6060601b805480602002602001604051908101604052809291908181526020015f905b8282101561051f578382905f5260205f2090600202016040518060400160405290815f820180546106cb90613650565b80601f01602080910402602001604051908101604052809291908181526020018280546106f790613650565b80156107425780601f1061071957610100808354040283529160200191610742565b820191905f5260205f20905b81548152906001019060200180831161072557829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156107d957602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116107865790505b5050505050815250508152602001906001019061069b565b5f5f5a905061066483611608565b5f5f5f5a90506108a66040518060400160405280885f60028110610825576108256136a1565b6020020151815260200188600160028110610842576108426136a1565b602090810291909101519091526040805160808101825289518183019081528a840151606080840191909152908252825180840184528b8401518152908b0151818501528184015281518083019092528851825288830151928201929092526116a7565b90935091505a6108b6908261363d565b905093509350939050565b6060601a805480602002602001604051908101604052809291908181526020015f905b8282101561051f578382905f5260205f2001805461090190613650565b80601f016020809104026020016040519081016040528092919081815260200182805461092d90613650565b80156109785780601f1061094f57610100808354040283529160200191610978565b820191905f5260205f20905b81548152906001019060200180831161095b57829003601f168201915b5050505050815260200190600101906108e4565b5f5f5a90506106646040518060400160405280855f600281106109b1576109b16136a1565b60200201518152602001856001600281106109ce576109ce6136a1565b6020020151905261181a565b6060601d805480602002602001604051908101604052809291908181526020015f905b8282101561051f575f84815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff168352600181018054835181870281018701909452808452939491938583019392830182828015610ac557602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411610a725790505b505050505081525050815260200190600101906109fd565b604080518082019091525f80825260208201525f5a905061035c84846118d8565b610b06612f19565b5f5a905061035c84846119b4565b6060601c805480602002602001604051908101604052809291908181526020015f905b8282101561051f575f84815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff168352600181018054835181870281018701909452808452939491938583019392830182828015610bff57602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411610bac5790505b50505050508152505081526020019060010190610b37565b60606019805480602002602001604051908101604052809291908181526020015f905b8282101561051f578382905f5260205f20018054610c5790613650565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8390613650565b8015610cce5780601f10610ca557610100808354040283529160200191610cce565b820191905f5260205f20905b815481529060010190602001808311610cb157829003601f168201915b505050505081526020019060010190610c3a565b6008545f9060ff1615610cf9575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c6564000000000000000000000000000000000000000000000000000060248301525f9163667f9d7090604401602060405180830381865afa158015610d87573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dab91906136ce565b1415905090565b606060158054806020026020016040519081016040528092919081815260200182805480156103d557602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103aa575050505050905090565b5f5f5a6040805160808101825285518183019081526020808801516060840152908252825180840184529287015183529293506106649290918183019181018760035b602002015190529052611aff565b815160609060ff811115610eb957836040517f26e4f9ba000000000000000000000000000000000000000000000000000000008152600401610eb091906136e5565b60405180910390fd5b60408051608880825260c082019092525f916020820181803683370190505090505f81855f60605f8a88604051602001610ef9979695949392919061370e565b60405160208183030381529060405290505f818051906020012090505f8160018987604051602001610f2e94939291906137e9565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815282825280516020820120606080855260808501909352909350915f91602082018180368337019050509050600360015b8181101561102557858418610f9f82600161385b565b8d8b604051602001610fb494939291906137e9565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830181028501810195909552805194810194909420939450600101610f89565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01602090810282010191909152955050505050505b92915050565b61106a612f19565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4782106110c6576040517fd53e941500000000000000000000000000000000000000000000000000000000815260048101839052602401610eb0565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760047f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478586090990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478260010890507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47611184837f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4761363d565b60010891505f6111b67f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47838509611ddc565b90505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4778016789af3a83522eb353c98fc6b36d713d5d8d1cc5dffffffa7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47847f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47888b09090990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4761128a837f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4761363d565b7f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea30890505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47837f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea30890505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4786870990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4786830990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47807f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478485097f10216f7ba065e00de81ac1e7808072c9dd2b2385cd7b438469602eb24829a9bd0960010890505f5f6113c46113bf88611de6565b611e58565b5f0b60010361142d57868c526113d987611de6565b90506113e481611f08565b60208e0191909152915081611428576040517f396ec77100000000000000000000000000000000000000000000000000000000815260048101829052602401610eb0565b6114a9565b6114396113bf87611de6565b5f0b60010361144e57858c526113d986611de6565b828c5261145a83611de6565b905061146581611f08565b60208e01919091529150816114a9576040517f396ec77100000000000000000000000000000000000000000000000000000000815260048101829052602401610eb0565b60208c01516114b790611f42565b6114c08e611f42565b146114fa5760208c01516114f4907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4761363d565b60208d01525b5050505050505050505050919050565b80515f907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47111580611560575060208201517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4711155b806115bd575060408201517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd471115806115bd575060608201517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4711155b156115c957505f919050565b60408051608081018252835181830190815260208086015160608401529082528251808401845292850151835261105c92818301918101866003610e60565b80515f907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4711158061165e575060208201517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4711155b1561166a57505f919050565b61105c6040518060400160405280845f6002811061168a5761168a6136a1565b60200201518152602001846001600281106109ce576109ce6136a1565b5f5f5f604051806101800160405280875f01518152602001876020015181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec81526020017f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d8152602001855f0151815260200185602001518152602001865f015160016002811061178a5761178a6136a1565b60200201518152602001865f01515f600281106117a9576117a96136a1565b6020020151815260200186602001516001600281106117ca576117ca6136a1565b6020020151815260200186602001515f600281106117ea576117ea6136a1565b6020020151905290506117fb612f37565b6020816101808460086107d05a03fa9051151597909650945050505050565b6040805180820190915281518082526020808401519083018190525f9291907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478280097f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4783820990507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476003820890507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478283091495945050505050565b604080518082019091525f80825260208201525f6118f684846119b4565b90505f61190982825b6020020151611062565b90505f6119178360016118ff565b9050611921612f55565b825181526020808401518282015282516040808401919091529083015160608301525f908460808460066107d05a03fa90508061198c57816040517f128e3f08000000000000000000000000000000000000000000000000000000008152600401610eb0919061386e565b6040805180820190915284518152602081018560016020020151905298975050505050505050565b6119bc612f19565b5f6119c78484610e6e565b90505f5f5f5f6018850177ffffffffffffffffffffffffffffffffffffffffffffffff815116935060308601905077ffffffffffffffffffffffffffffffffffffffffffffffff81511694507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47857f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4778010000000000000000000000000000000000000000000000008709086048870151606088015177ffffffffffffffffffffffffffffffffffffffffffffffff908116975016945092507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47905084817801000000000000000000000000000000000000000000000000860908604080518082019091529283526020830152509695505050505050565b5f5f6040518060800160405280845f01515f60028110611b2157611b216136a1565b60200201518152602001845f0151600160028110611b4157611b416136a1565b6020020151815260200184602001515f60028110611b6157611b616136a1565b602002015181526020018460200151600160028110611b8257611b826136a1565b60200201518152509050805160208201517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478283097f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4782830981828301017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4782838401087f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4786827f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47038601099350507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4784837f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd470383010991507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd477f2b149d40ceb8aaae81be18991be06ac3b5b4c5e559dbefa33267e6dc24a138e5840894507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd477e9713b03af0fed4cd2cafadeed8fdf4a74fa084e52d1852e4a2bd0685c315d28308935060408601519250606086015191507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780837f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd470385087f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478486080990507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47828460011b099414929093149190911695945050505050565b5f61105c82611f4e565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760037f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47847f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47868709090892915050565b5f5f611e63836126a6565b9050611e9060017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4761363d565b8103611ebe57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92915050565b8015801590611ece575080600114155b1561105c576040517f396ec77100000000000000000000000000000000000000000000000000000000815260048101849052602401610eb0565b5f5f611f13836127d3565b9150827f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47838409149050915091565b5f61105c60028361389e565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996505050838586099450838586099450838586099450838586099450838186099450508284850993508284850993508284850993508281850993508284850993508284850993508285850993508284850993508284850993508284850993508284850993508284850993508284850993508281850995945050505050565b6040805160c080825260e082019092525f918291906020820181803683370190505060208082018181526040830182905260608301829052608083018690527f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea360a08401527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760c0808501919091529293505f92839160055afa90505f519250806127cc576040517fc6daf7ab000000000000000000000000000000000000000000000000000000008152600481018590527f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea360248201527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476044820152606401610eb0565b5050919050565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508584880996508587880996508587880996508587880996508587880996508587880996508581880996505050505050808283099392505050565b60405180604001604052806002906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612fe757612fe7612f73565b604052919050565b5f82601f830112612ffe575f5ffd5b813567ffffffffffffffff81111561301857613018612f73565b61304960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612fa0565b81815284602083860101111561305d575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f6040838503121561308a575f5ffd5b823567ffffffffffffffff8111156130a0575f5ffd5b6130ac85828601612fef565b925050602083013567ffffffffffffffff8111156130c8575f5ffd5b6130d485828601612fef565b9150509250929050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b604081525f61313c60408301856130de565b90508260208301529392505050565b602080825282518282018190525f918401906040840190835b8181101561319857835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101613164565b509095945050505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156132a9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805173ffffffffffffffffffffffffffffffffffffffff168652602090810151604082880181905281519088018190529101906060600582901b8801810191908801905f5b8181101561328f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526132798486516130de565b602095860195909450929092019160010161323f565b5091975050506020948501949290920191506001016131c9565b50929695505050505050565b5f602082840312156132c5575f5ffd5b5035919050565b6060810181845f5b60028110156132f35781518352602092830192909101906001016132d4565b5050508260408301529392505050565b5f82601f830112613312575f5ffd5b5f61331d6080612fa0565b9050806080840185811115613330575f5ffd5b845b8181101561334a578035835260209283019201613332565b509195945050505050565b5f60808284031215613365575f5ffd5b61336f8383613303565b9392505050565b5f8151808452602084019350602083015f5b828110156133c85781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101613388565b5093949350505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156132a9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261343c60408801826130de565b90506020820151915086810360208801526134578183613376565b9650505060209384019391909101906001016133f8565b5f82601f83011261347d575f5ffd5b5f6134886040612fa0565b9050806040840185811115613330575f5ffd5b5f604082840312156134ab575f5ffd5b61336f838361346e565b5f5f5f61010084860312156134c8575f5ffd5b6134d2858561346e565b92506134e18560408601613303565b91506134f08560c0860161346e565b90509250925092565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156132a9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526135598583516130de565b9450602093840193919091019060010161351f565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156132a9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815173ffffffffffffffffffffffffffffffffffffffff815116865260208101519050604060208701526135fa6040870182613376565b9550506020938401939190910190600101613594565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561105c5761105c613610565b600181811c9082168061366457607f821691505b60208210810361369b577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f602082840312156136de575f5ffd5b5051919050565b602081525f61336f60208301846130de565b5f81518060208401855e5f93019283525090919050565b5f61372261371c838b6136f7565b896136f7565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b1681527fff000000000000000000000000000000000000000000000000000000000000008760f81b1660018201527fff000000000000000000000000000000000000000000000000000000000000008660f81b1660028201526137ad60038201866136f7565b60f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016845250506001909101979650505050505050565b8481527fff000000000000000000000000000000000000000000000000000000000000008460f81b1660208201525f61382560218301856136f7565b60f89390931b7fff0000000000000000000000000000000000000000000000000000000000000016835250506001019392505050565b8082018082111561105c5761105c613610565b6080810181835f5b6004811015613895578151835260209283019290910190600101613876565b50505092915050565b5f826138d1577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b50069056fea26469706673582212206cca6c98229a85257ebe208ebff4bc9ee22ba3d6bbcc7f44c9cc4c262f870ccf64736f6c634300081c0033\";\n\ntype BLSTestConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: BLSTestConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class BLSTest__factory extends ContractFactory {\n  constructor(...args: BLSTestConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      BLSTest & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): BLSTest__factory {\n    return super.connect(runner) as BLSTest__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): BLSTestInterface {\n    return new Interface(_abi) as BLSTestInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): BLSTest {\n    return new Contract(address, _abi, runner) as unknown as BLSTest;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type {\n  BN254SignatureScheme,\n  BN254SignatureSchemeInterface,\n} from \"../BN254SignatureScheme\";\n\nconst _abi = [\n  {\n    type: \"constructor\",\n    inputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"DST\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"SCHEME_ID\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getChainId\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"chainId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"hashToBytes\",\n    inputs: [\n      {\n        name: \"message\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"hashToPoint\",\n    inputs: [\n      {\n        name: \"message\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"verifySignature\",\n    inputs: [\n      {\n        name: \"message\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"signature\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"publicKey\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"isValid\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"error\",\n    name: \"BNAddFailed\",\n    inputs: [\n      {\n        name: \"input\",\n        type: \"uint256[4]\",\n        internalType: \"uint256[4]\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidDSTLength\",\n    inputs: [\n      {\n        name: \"dst\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidFieldElement\",\n    inputs: [\n      {\n        name: \"x\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"MapToPointFailed\",\n    inputs: [\n      {\n        name: \"noSqrt\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ModExpFailed\",\n    inputs: [\n      {\n        name: \"base\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"exponent\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"modulus\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n] as const;\n\nconst _bytecode =\n  \"0x608060405234801561000f575f5ffd5b506100194661004b565b6040516020016100299190610212565b6040516020818303038152906040525f90816100459190610318565b5061042a565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015281516042808252608082019093526060925f9190602082018180368337019050509050600360fc1b815f815181106100ab576100ab6103d2565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106100d9576100d96103d2565b60200101906001600160f81b03191690815f1a9053505f5b602081101561020a5782600486836020811061010f5761010f6103d2565b1a60f81b6001600160f81b031916901c60f81c60ff1681518110610135576101356103d2565b01602001516001600160f81b031916826101508360026103fa565b61015b906002610417565b8151811061016b5761016b6103d2565b60200101906001600160f81b03191690815f1a90535082858260208110610194576101946103d2565b825191901a600f169081106101ab576101ab6103d2565b01602001516001600160f81b031916826101c68360026103fa565b6101d1906002610417565b6101dc906001610417565b815181106101ec576101ec6103d2565b60200101906001600160f81b03191690815f1a9053506001016100f1565b509392505050565b7f646369706865722d72616e646f6d6e6573732d7630312d424e32353447315f5881527f4d443a4b454343414b2d3235365f535644575f524f5f0000000000000000000060208201525f82518060208501603685015e605f60f81b6036939091019283015250603701919050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806102a857607f821691505b6020821081036102c657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561031357805f5260205f20601f840160051c810160208510156102f15750805b601f840160051c820191505b81811015610310575f81556001016102fd565b50505b505050565b81516001600160401b0381111561033157610331610280565b6103458161033f8454610294565b846102cc565b6020601f821160018114610377575f83156103605750848201515b5f19600385901b1c1916600184901b178455610310565b5f84815260208120601f198516915b828110156103a65787850151825560209485019460019092019101610386565b50848210156103c357868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610411576104116103e6565b92915050565b80820180821115610411576104116103e6565b61259e806104375f395ff3fe608060405234801561000f575f5ffd5b506004361061006f575f3560e01c80638a1f165a1161004d5780638a1f165a146100c3578063eae1e15b146100ff578063f6e548e914610112575f5ffd5b80633033cc51146100735780633408e470146100a05780635f7c7522146100ae575b5f5ffd5b610086610081366004612188565b610135565b604080519283526020830191909152015b60405180910390f35b604051468152602001610097565b6100b6610214565b6040516100979190612213565b6100b66040518060400160405280600581526020017f424e32353400000000000000000000000000000000000000000000000000000081525081565b6100b661010d366004612188565b61029f565b61012561012036600461222c565b6102d9565b6040519015158152602001610097565b5f5f5f6101fe5f8054610147906122cb565b80601f0160208091040260200160405190810160405280929190818152602001828054610173906122cb565b80156101be5780601f10610195576101008083540402835291602001916101be565b820191905f5260205f20905b8154815290600101906020018083116101a157829003601f168201915b505050505086868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506103c892505050565b80516020909101519093509150505b9250929050565b5f8054610220906122cb565b80601f016020809104026020016040519081016040528092919081815260200182805461024c906122cb565b80156102975780601f1061026e57610100808354040283529160200191610297565b820191905f5260205f20905b81548152906001019060200180831161027a57829003601f168201915b505050505081565b60605f5f6102ad8585610135565b915091506102ce6040518060400160405280848152602001838152506104ad565b925050505b92915050565b5f5f61031988888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506104e692505050565b90505f61035a87878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506104e692505050565b90505f61039b86868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061058392505050565b90505f5f6103aa84848761063e565b915091508180156103b85750805b9c9b505050505050505050505050565b604080518082019091525f80825260208201525f6103e684846107b1565b90505f6103f982825b60200201516108fc565b90505f6104078360016103ef565b90506104116120cb565b825181526020808401518282015282516040808401919091529083015160608301525f908460808460066107d05a03fa90508061048557816040517f128e3f0800000000000000000000000000000000000000000000000000000000815260040161047c9190612349565b60405180910390fd5b6040805180820190915284518152602081018560016020020151905298975050505050505050565b6040805181815260608181018352915f919060208201818036833750508451602095860151958301525060408101939093525090919050565b604080518082019091525f80825260208201528151604014610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c6964204731206279746573206c656e677468000000000000000000604482015260640161047c565b5060208181015160409283015183518085019094529083529082015290565b61058b6120e9565b81516080146105f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c6964204732206279746573206c656e677468000000000000000000604482015260640161047c565b50602081810151604080840151606080860151608096870151845197880185528785019586529187019290925292855281518083019092528152808301919091529082015290565b5f5f5f604051806101800160405280875f01518152602001876020015181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec81526020017f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d8152602001855f0151815260200185602001518152602001865f01516001600281106107215761072161231c565b60200201518152602001865f01515f600281106107405761074061231c565b6020020151815260200186602001516001600281106107615761076161231c565b6020020151815260200186602001515f600281106107815761078161231c565b60200201519052905061079261210e565b6020816101808460086107d05a03fa9051151597909650945050505050565b6107b961212c565b5f6107c48484610da4565b90505f5f5f5f6018850177ffffffffffffffffffffffffffffffffffffffffffffffff815116935060308601905077ffffffffffffffffffffffffffffffffffffffffffffffff81511694507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47857f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4778010000000000000000000000000000000000000000000000008709086048870151606088015177ffffffffffffffffffffffffffffffffffffffffffffffff908116975016945092507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47905084817801000000000000000000000000000000000000000000000000860908604080518082019091529283526020830152509695505050505050565b61090461212c565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478210610960576040517fd53e94150000000000000000000000000000000000000000000000000000000081526004810183905260240161047c565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760047f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478586090990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478260010890507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47610a1e837f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476123a6565b60010891505f610a507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47838509610f8e565b90505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4778016789af3a83522eb353c98fc6b36d713d5d8d1cc5dffffffa7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47847f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47888b09090990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47610b24837f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476123a6565b7f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea30890505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47837f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea30890505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4786870990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4786830990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47807f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478485097f10216f7ba065e00de81ac1e7808072c9dd2b2385cd7b438469602eb24829a9bd0960010890505f5f610c5e610c5988610f98565b61100a565b5f0b600103610cc757868c52610c7387610f98565b9050610c7e816110ba565b60208e0191909152915081610cc2576040517f396ec7710000000000000000000000000000000000000000000000000000000081526004810182905260240161047c565b610d43565b610cd3610c5987610f98565b5f0b600103610ce857858c52610c7386610f98565b828c52610cf483610f98565b9050610cff816110ba565b60208e0191909152915081610d43576040517f396ec7710000000000000000000000000000000000000000000000000000000081526004810182905260240161047c565b60208c0151610d51906110f4565b610d5a8e6110f4565b14610d945760208c0151610d8e907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476123a6565b60208d01525b5050505050505050505050919050565b815160609060ff811115610de657836040517f26e4f9ba00000000000000000000000000000000000000000000000000000000815260040161047c9190612213565b60408051608880825260c082019092525f916020820181803683370190505090505f81855f60605f8a88604051602001610e2697969594939291906123d0565b60405160208183030381529060405290505f818051906020012090505f8160018987604051602001610e5b94939291906124ab565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815282825280516020820120606080855260808501909352909350915f91602082018180368337019050509050600360015b81811015610f5257858418610ecc82600161251d565b8d8b604051602001610ee194939291906124ab565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830181028501810195909552805194810194909420939450600101610eb6565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016020908102820101919091529550505050505092915050565b5f6102d382611100565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760037f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47847f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47868709090892915050565b5f5f61101583611858565b905061104260017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476123a6565b810361107057507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92915050565b8015801590611080575080600114155b156102d3576040517f396ec7710000000000000000000000000000000000000000000000000000000081526004810184905260240161047c565b5f5f6110c583611985565b9150827f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47838409149050915091565b5f6102d3600283612530565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996505050838586099450838586099450838586099450838586099450838186099450508284850993508284850993508284850993508281850993508284850993508284850993508285850993508284850993508284850993508284850993508284850993508284850993508284850993508281850995945050505050565b6040805160c080825260e082019092525f918291906020820181803683370190505060208082018181526040830182905260608301829052608083018690527f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea360a08401527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760c0808501919091529293505f92839160055afa90505f5192508061197e576040517fc6daf7ab000000000000000000000000000000000000000000000000000000008152600481018590527f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea360248201527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47604482015260640161047c565b5050919050565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508584880996508587880996508587880996508587880996508587880996508587880996508581880996505050505050808283099392505050565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806120fc61212c565b815260200161210961212c565b905290565b60405180602001604052806001906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b5f5f83601f84011261215a575f5ffd5b50813567ffffffffffffffff811115612171575f5ffd5b60208301915083602082850101111561020d575f5ffd5b5f5f60208385031215612199575f5ffd5b823567ffffffffffffffff8111156121af575f5ffd5b6121bb8582860161214a565b90969095509350505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f61222560208301846121c7565b9392505050565b5f5f5f5f5f5f60608789031215612241575f5ffd5b863567ffffffffffffffff811115612257575f5ffd5b61226389828a0161214a565b909750955050602087013567ffffffffffffffff811115612282575f5ffd5b61228e89828a0161214a565b909550935050604087013567ffffffffffffffff8111156122ad575f5ffd5b6122b989828a0161214a565b979a9699509497509295939492505050565b600181811c908216806122df57607f821691505b602082108103612316577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6080810181835f5b6004811015612370578151835260209283019290910190600101612351565b50505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818103818111156102d3576102d3612379565b5f81518060208401855e5f93019283525090919050565b5f6123e46123de838b6123b9565b896123b9565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b1681527fff000000000000000000000000000000000000000000000000000000000000008760f81b1660018201527fff000000000000000000000000000000000000000000000000000000000000008660f81b16600282015261246f60038201866123b9565b60f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016845250506001909101979650505050505050565b8481527fff000000000000000000000000000000000000000000000000000000000000008460f81b1660208201525f6124e760218301856123b9565b60f89390931b7fff0000000000000000000000000000000000000000000000000000000000000016835250506001019392505050565b808201808211156102d3576102d3612379565b5f82612563577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b50069056fea26469706673582212206df3649d590cafccfd4873076b90bc107f722eecb7166da8e6c43928f9acbc4d64736f6c634300081c0033\";\n\ntype BN254SignatureSchemeConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: BN254SignatureSchemeConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class BN254SignatureScheme__factory extends ContractFactory {\n  constructor(...args: BN254SignatureSchemeConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      BN254SignatureScheme & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(\n    runner: ContractRunner | null\n  ): BN254SignatureScheme__factory {\n    return super.connect(runner) as BN254SignatureScheme__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): BN254SignatureSchemeInterface {\n    return new Interface(_abi) as BN254SignatureSchemeInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): BN254SignatureScheme {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as BN254SignatureScheme;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type { BytesLib, BytesLibInterface } from \"../BytesLib\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"decodeBytesToUint\",\n    inputs: [\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x610278610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c8063f7ba47a314610038575b5f5ffd5b61004b61004636600461013b565b61005d565b60405190815260200160405180910390f35b5f6020825110156100f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f44617461206d757374206265206174206c65617374203332206279746573206c60448201527f6f6e670000000000000000000000000000000000000000000000000000000000606482015260840160405180910390fd5b81806020019051810190610108919061022b565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f6020828403121561014b575f5ffd5b813567ffffffffffffffff811115610161575f5ffd5b8201601f81018413610171575f5ffd5b803567ffffffffffffffff81111561018b5761018b61010e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156101f7576101f761010e565b60405281815282820160200186101561020e575f5ffd5b816020840160208301375f91810160200191909152949350505050565b5f6020828403121561023b575f5ffd5b505191905056fea264697066735822122022eb5438442f79564432247fa5be52f34d8f18e8216acf5bfc43f857a76f219464736f6c634300081c0033\";\n\ntype BytesLibConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: BytesLibConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class BytesLib__factory extends ContractFactory {\n  constructor(...args: BytesLibConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      BytesLib & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): BytesLib__factory {\n    return super.connect(runner) as BytesLib__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): BytesLibInterface {\n    return new Interface(_abi) as BytesLibInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): BytesLib {\n    return new Contract(address, _abi, runner) as unknown as BytesLib;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  ContextUpgradeable,\n  ContextUpgradeableInterface,\n} from \"../ContextUpgradeable\";\n\nconst _abi = [\n  {\n    type: \"event\",\n    name: \"Initialized\",\n    inputs: [\n      {\n        name: \"version\",\n        type: \"uint64\",\n        indexed: false,\n        internalType: \"uint64\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"InvalidInitialization\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"NotInitializing\",\n    inputs: [],\n  },\n] as const;\n\nexport class ContextUpgradeable__factory {\n  static readonly abi = _abi;\n  static createInterface(): ContextUpgradeableInterface {\n    return new Interface(_abi) as ContextUpgradeableInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): ContextUpgradeable {\n    return new Contract(address, _abi, runner) as unknown as ContextUpgradeable;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { ERC165, ERC165Interface } from \"../ERC165\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"supportsInterface\",\n    inputs: [\n      {\n        name: \"interfaceId\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n] as const;\n\nexport class ERC165__factory {\n  static readonly abi = _abi;\n  static createInterface(): ERC165Interface {\n    return new Interface(_abi) as ERC165Interface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): ERC165 {\n    return new Contract(address, _abi, runner) as unknown as ERC165;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  ERC165Upgradeable,\n  ERC165UpgradeableInterface,\n} from \"../ERC165Upgradeable\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"supportsInterface\",\n    inputs: [\n      {\n        name: \"interfaceId\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"event\",\n    name: \"Initialized\",\n    inputs: [\n      {\n        name: \"version\",\n        type: \"uint64\",\n        indexed: false,\n        internalType: \"uint64\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"InvalidInitialization\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"NotInitializing\",\n    inputs: [],\n  },\n] as const;\n\nexport class ERC165Upgradeable__factory {\n  static readonly abi = _abi;\n  static createInterface(): ERC165UpgradeableInterface {\n    return new Interface(_abi) as ERC165UpgradeableInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): ERC165Upgradeable {\n    return new Contract(address, _abi, runner) as unknown as ERC165Upgradeable;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  BytesLike,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { PayableOverrides } from \"../common\";\nimport type { ERC1967Proxy, ERC1967ProxyInterface } from \"../ERC1967Proxy\";\n\nconst _abi = [\n  {\n    type: \"constructor\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"_data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"fallback\",\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"event\",\n    name: \"Upgraded\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AddressEmptyCode\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC1967InvalidImplementation\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC1967NonPayable\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"FailedCall\",\n    inputs: [],\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60806040526040516103dd3803806103dd8339810160408190526100229161023c565b61002c8282610033565b5050610321565b61003c82610091565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561008557610080828261010c565b505050565b61008d61017f565b5050565b806001600160a01b03163b5f036100cb57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051610128919061030b565b5f60405180830381855af49150503d805f8114610160576040519150601f19603f3d011682016040523d82523d5f602084013e610165565b606091505b5090925090506101768583836101a0565b95945050505050565b341561019e5760405163b398979f60e01b815260040160405180910390fd5b565b6060826101b5576101b0826101ff565b6101f8565b81511580156101cc57506001600160a01b0384163b155b156101f557604051639996b31560e01b81526001600160a01b03851660048201526024016100c2565b50805b9392505050565b80511561020f5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561024d575f5ffd5b82516001600160a01b0381168114610263575f5ffd5b60208401519092506001600160401b0381111561027e575f5ffd5b8301601f8101851361028e575f5ffd5b80516001600160401b038111156102a7576102a7610228565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102d5576102d5610228565b6040528181528282016020018710156102ec575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b60b08061032d5f395ff3fe6080604052600a600c565b005b60186014601a565b605d565b565b5f60587f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156076573d5ff35b3d5ffdfea2646970667358221220923d8d85816440626f7aa335ebd412e97b696441049e2e1d1ff98ce59352e13364736f6c634300081c0033\";\n\ntype ERC1967ProxyConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: ERC1967ProxyConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class ERC1967Proxy__factory extends ContractFactory {\n  constructor(...args: ERC1967ProxyConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    implementation: AddressLike,\n    _data: BytesLike,\n    overrides?: PayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(implementation, _data, overrides || {});\n  }\n  override deploy(\n    implementation: AddressLike,\n    _data: BytesLike,\n    overrides?: PayableOverrides & { from?: string }\n  ) {\n    return super.deploy(implementation, _data, overrides || {}) as Promise<\n      ERC1967Proxy & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): ERC1967Proxy__factory {\n    return super.connect(runner) as ERC1967Proxy__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): ERC1967ProxyInterface {\n    return new Interface(_abi) as ERC1967ProxyInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): ERC1967Proxy {\n    return new Contract(address, _abi, runner) as unknown as ERC1967Proxy;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type { ERC1967Utils, ERC1967UtilsInterface } from \"../ERC1967Utils\";\n\nconst _abi = [\n  {\n    type: \"error\",\n    name: \"ERC1967InvalidAdmin\",\n    inputs: [\n      {\n        name: \"admin\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC1967InvalidBeacon\",\n    inputs: [\n      {\n        name: \"beacon\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC1967InvalidImplementation\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC1967NonPayable\",\n    inputs: [],\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea2646970667358221220d13ecc8bc1e91923fea50d04f64440056cafabdcd080c4fe1b8a232dabe214af64736f6c634300081c0033\";\n\ntype ERC1967UtilsConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: ERC1967UtilsConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class ERC1967Utils__factory extends ContractFactory {\n  constructor(...args: ERC1967UtilsConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      ERC1967Utils & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): ERC1967Utils__factory {\n    return super.connect(runner) as ERC1967Utils__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): ERC1967UtilsInterface {\n    return new Interface(_abi) as ERC1967UtilsInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): ERC1967Utils {\n    return new Contract(address, _abi, runner) as unknown as ERC1967Utils;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { EnvReader, EnvReaderInterface } from \"../EnvReader\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"IS_SCRIPT\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n] as const;\n\nexport class EnvReader__factory {\n  static readonly abi = _abi;\n  static createInterface(): EnvReaderInterface {\n    return new Interface(_abi) as EnvReaderInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EnvReader {\n    return new Contract(address, _abi, runner) as unknown as EnvReader;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type { Errors, ErrorsInterface } from \"../Errors\";\n\nconst _abi = [\n  {\n    type: \"error\",\n    name: \"FailedCall\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"FailedDeployment\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InsufficientBalance\",\n    inputs: [\n      {\n        name: \"balance\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"needed\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"MissingPrecompile\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea264697066735822122053afe48931637e7f3ca151ae6b8492f2639125430ec2ef09f3ea56fb6915980264736f6c634300081c0033\";\n\ntype ErrorsConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: ErrorsConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class Errors__factory extends ContractFactory {\n  constructor(...args: ErrorsConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      Errors & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): Errors__factory {\n    return super.connect(runner) as Errors__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): ErrorsInterface {\n    return new Interface(_abi) as ErrorsInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Errors {\n    return new Contract(address, _abi, runner) as unknown as Errors;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type { Factory, FactoryInterface } from \"../Factory\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"computeAddress\",\n    inputs: [\n      {\n        name: \"salt\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"creationCodeHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"addr\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"deploy\",\n    inputs: [\n      {\n        name: \"salt\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"creationCode\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"addr\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"event\",\n    name: \"CreatedContract\",\n    inputs: [\n      {\n        name: \"addr\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"salt\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"Create2EmptyBytecode\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"Create2FailedDeployment\",\n    inputs: [],\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6080604052348015600e575f5ffd5b506103168061001c5f395ff3fe608060405260043610610028575f3560e01c8063481286e61461002c578063cdcb760a14610074575b5f5ffd5b348015610037575f5ffd5b5061004b610046366004610199565b610087565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61004b6100823660046101e6565b6100b1565b6040805190810182905260208101839052308082525f91600b0160ff815360559020949350505050565b5f81515f036100ec576040517f4ca249dc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8282516020840134f5905073ffffffffffffffffffffffffffffffffffffffff8116610144576040517f741752c200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff83168152602081018590527f4108529e399e9cd5343c48ae06aa62a23c8c1b7c93f59d4691a0ea1e6f5b4603910160405180910390a192915050565b5f5f604083850312156101aa575f5ffd5b50508035926020909101359150565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f5f604083850312156101f7575f5ffd5b82359150602083013567ffffffffffffffff811115610214575f5ffd5b8301601f81018513610224575f5ffd5b803567ffffffffffffffff81111561023e5761023e6101b9565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156102aa576102aa6101b9565b6040528181528282016020018710156102c1575f5ffd5b816020840160208301375f60208383010152809350505050925092905056fea2646970667358221220f9f265fabcdae1b307c601685613090a21ab49968566e35913736297c758400464736f6c634300081c0033\";\n\ntype FactoryConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: FactoryConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class Factory__factory extends ContractFactory {\n  constructor(...args: FactoryConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      Factory & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): Factory__factory {\n    return super.connect(runner) as Factory__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): FactoryInterface {\n    return new Interface(_abi) as FactoryInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Factory {\n    return new Contract(address, _abi, runner) as unknown as Factory;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type {\n  FeistelShuffleOptimised,\n  FeistelShuffleOptimisedInterface,\n} from \"../FeistelShuffleOptimised\";\n\nconst _abi = [\n  {\n    type: \"error\",\n    name: \"InvalidInputs\",\n    inputs: [],\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea2646970667358221220624590d60a22b990aba43efd8a9178cd2e6eccccdd63e7b7a29c3b0f2b3335cd64736f6c634300081c0033\";\n\ntype FeistelShuffleOptimisedConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: FeistelShuffleOptimisedConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class FeistelShuffleOptimised__factory extends ContractFactory {\n  constructor(...args: FeistelShuffleOptimisedConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      FeistelShuffleOptimised & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(\n    runner: ContractRunner | null\n  ): FeistelShuffleOptimised__factory {\n    return super.connect(runner) as FeistelShuffleOptimised__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): FeistelShuffleOptimisedInterface {\n    return new Interface(_abi) as FeistelShuffleOptimisedInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): FeistelShuffleOptimised {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as FeistelShuffleOptimised;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  IAccessControl,\n  IAccessControlInterface,\n} from \"../IAccessControl\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"getRoleAdmin\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"grantRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"hasRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"renounceRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"callerConfirmation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"revokeRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"event\",\n    name: \"RoleAdminChanged\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleGranted\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleRevoked\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlBadConfirmation\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlUnauthorizedAccount\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"neededRole\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n] as const;\n\nexport class IAccessControl__factory {\n  static readonly abi = _abi;\n  static createInterface(): IAccessControlInterface {\n    return new Interface(_abi) as IAccessControlInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): IAccessControl {\n    return new Contract(address, _abi, runner) as unknown as IAccessControl;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  IAccessControlEnumerable,\n  IAccessControlEnumerableInterface,\n} from \"../IAccessControlEnumerable\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"getRoleAdmin\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleMember\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"index\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleMemberCount\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"grantRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"hasRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"renounceRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"callerConfirmation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"revokeRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"event\",\n    name: \"RoleAdminChanged\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleGranted\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleRevoked\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlBadConfirmation\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlUnauthorizedAccount\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"neededRole\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n] as const;\n\nexport class IAccessControlEnumerable__factory {\n  static readonly abi = _abi;\n  static createInterface(): IAccessControlEnumerableInterface {\n    return new Interface(_abi) as IAccessControlEnumerableInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): IAccessControlEnumerable {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as IAccessControlEnumerable;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { IBeacon, IBeaconInterface } from \"../IBeacon\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"implementation\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n] as const;\n\nexport class IBeacon__factory {\n  static readonly abi = _abi;\n  static createInterface(): IBeaconInterface {\n    return new Interface(_abi) as IBeaconInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): IBeacon {\n    return new Contract(address, _abi, runner) as unknown as IBeacon;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { IERC165, IERC165Interface } from \"../IERC165\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"supportsInterface\",\n    inputs: [\n      {\n        name: \"interfaceId\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n] as const;\n\nexport class IERC165__factory {\n  static readonly abi = _abi;\n  static createInterface(): IERC165Interface {\n    return new Interface(_abi) as IERC165Interface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): IERC165 {\n    return new Contract(address, _abi, runner) as unknown as IERC165;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { IERC1967, IERC1967Interface } from \"../IERC1967\";\n\nconst _abi = [\n  {\n    type: \"event\",\n    name: \"AdminChanged\",\n    inputs: [\n      {\n        name: \"previousAdmin\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"newAdmin\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BeaconUpgraded\",\n    inputs: [\n      {\n        name: \"beacon\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"Upgraded\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n] as const;\n\nexport class IERC1967__factory {\n  static readonly abi = _abi;\n  static createInterface(): IERC1967Interface {\n    return new Interface(_abi) as IERC1967Interface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): IERC1967 {\n    return new Contract(address, _abi, runner) as unknown as IERC1967;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { IMulticall, IMulticallInterface } from \"../IMulticall\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"multicall\",\n    inputs: [\n      {\n        name: \"data\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"results\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n  },\n] as const;\n\nexport class IMulticall__factory {\n  static readonly abi = _abi;\n  static createInterface(): IMulticallInterface {\n    return new Interface(_abi) as IMulticallInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): IMulticall {\n    return new Contract(address, _abi, runner) as unknown as IMulticall;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { IMulticall3, IMulticall3Interface } from \"../IMulticall3\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"aggregate\",\n    inputs: [\n      {\n        name: \"calls\",\n        type: \"tuple[]\",\n        internalType: \"struct IMulticall3.Call[]\",\n        components: [\n          {\n            name: \"target\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"callData\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"blockNumber\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"returnData\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"aggregate3\",\n    inputs: [\n      {\n        name: \"calls\",\n        type: \"tuple[]\",\n        internalType: \"struct IMulticall3.Call3[]\",\n        components: [\n          {\n            name: \"target\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"allowFailure\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"callData\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"returnData\",\n        type: \"tuple[]\",\n        internalType: \"struct IMulticall3.Result[]\",\n        components: [\n          {\n            name: \"success\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"returnData\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"aggregate3Value\",\n    inputs: [\n      {\n        name: \"calls\",\n        type: \"tuple[]\",\n        internalType: \"struct IMulticall3.Call3Value[]\",\n        components: [\n          {\n            name: \"target\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"allowFailure\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"value\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"callData\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"returnData\",\n        type: \"tuple[]\",\n        internalType: \"struct IMulticall3.Result[]\",\n        components: [\n          {\n            name: \"success\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"returnData\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"blockAndAggregate\",\n    inputs: [\n      {\n        name: \"calls\",\n        type: \"tuple[]\",\n        internalType: \"struct IMulticall3.Call[]\",\n        components: [\n          {\n            name: \"target\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"callData\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"blockNumber\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"blockHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"returnData\",\n        type: \"tuple[]\",\n        internalType: \"struct IMulticall3.Result[]\",\n        components: [\n          {\n            name: \"success\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"returnData\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"getBasefee\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"basefee\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getBlockHash\",\n    inputs: [\n      {\n        name: \"blockNumber\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"blockHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getBlockNumber\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"blockNumber\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getChainId\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"chainid\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getCurrentBlockCoinbase\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"coinbase\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getCurrentBlockDifficulty\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"difficulty\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getCurrentBlockGasLimit\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"gaslimit\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getCurrentBlockTimestamp\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"timestamp\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getEthBalance\",\n    inputs: [\n      {\n        name: \"addr\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"balance\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getLastBlockHash\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"blockHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"tryAggregate\",\n    inputs: [\n      {\n        name: \"requireSuccess\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"calls\",\n        type: \"tuple[]\",\n        internalType: \"struct IMulticall3.Call[]\",\n        components: [\n          {\n            name: \"target\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"callData\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"returnData\",\n        type: \"tuple[]\",\n        internalType: \"struct IMulticall3.Result[]\",\n        components: [\n          {\n            name: \"success\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"returnData\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"tryBlockAndAggregate\",\n    inputs: [\n      {\n        name: \"requireSuccess\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"calls\",\n        type: \"tuple[]\",\n        internalType: \"struct IMulticall3.Call[]\",\n        components: [\n          {\n            name: \"target\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"callData\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"blockNumber\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"blockHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"returnData\",\n        type: \"tuple[]\",\n        internalType: \"struct IMulticall3.Result[]\",\n        components: [\n          {\n            name: \"success\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"returnData\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"payable\",\n  },\n] as const;\n\nexport class IMulticall3__factory {\n  static readonly abi = _abi;\n  static createInterface(): IMulticall3Interface {\n    return new Interface(_abi) as IMulticall3Interface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): IMulticall3 {\n    return new Contract(address, _abi, runner) as unknown as IMulticall3;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  IRandomnessReceiver,\n  IRandomnessReceiverInterface,\n} from \"../IRandomnessReceiver\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"receiveRandomness\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"randomness\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n] as const;\n\nexport class IRandomnessReceiver__factory {\n  static readonly abi = _abi;\n  static createInterface(): IRandomnessReceiverInterface {\n    return new Interface(_abi) as IRandomnessReceiverInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): IRandomnessReceiver {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as IRandomnessReceiver;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  IRandomnessSender,\n  IRandomnessSenderInterface,\n} from \"../IRandomnessSender\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"getAllRequests\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple[]\",\n        internalType: \"struct TypesLib.RandomnessRequest[]\",\n        components: [\n          {\n            name: \"nonce\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"callback\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRequest\",\n    inputs: [\n      {\n        name: \"requestId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct TypesLib.RandomnessRequest\",\n        components: [\n          {\n            name: \"nonce\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"callback\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"messageFrom\",\n    inputs: [\n      {\n        name: \"r\",\n        type: \"tuple\",\n        internalType: \"struct TypesLib.RandomnessRequest\",\n        components: [\n          {\n            name: \"nonce\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"callback\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"requestRandomness\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setSignatureSender\",\n    inputs: [\n      {\n        name: \"newSignatureSender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n] as const;\n\nexport class IRandomnessSender__factory {\n  static readonly abi = _abi;\n  static createInterface(): IRandomnessSenderInterface {\n    return new Interface(_abi) as IRandomnessSenderInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): IRandomnessSender {\n    return new Contract(address, _abi, runner) as unknown as IRandomnessSender;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  ISignatureReceiver,\n  ISignatureReceiverInterface,\n} from \"../ISignatureReceiver\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"receiveSignature\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"signature\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n] as const;\n\nexport class ISignatureReceiver__factory {\n  static readonly abi = _abi;\n  static createInterface(): ISignatureReceiverInterface {\n    return new Interface(_abi) as ISignatureReceiverInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): ISignatureReceiver {\n    return new Contract(address, _abi, runner) as unknown as ISignatureReceiver;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  ISignatureScheme,\n  ISignatureSchemeInterface,\n} from \"../ISignatureScheme\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"SCHEME_ID\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"getChainId\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"chainId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"hashToBytes\",\n    inputs: [\n      {\n        name: \"message\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"hashToPoint\",\n    inputs: [\n      {\n        name: \"message\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"verifySignature\",\n    inputs: [\n      {\n        name: \"message\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"signature\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"publicKey\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"isValid\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n] as const;\n\nexport class ISignatureScheme__factory {\n  static readonly abi = _abi;\n  static createInterface(): ISignatureSchemeInterface {\n    return new Interface(_abi) as ISignatureSchemeInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): ISignatureScheme {\n    return new Contract(address, _abi, runner) as unknown as ISignatureScheme;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  ISignatureSchemeAddressProvider,\n  ISignatureSchemeAddressProviderInterface,\n} from \"../ISignatureSchemeAddressProvider\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"getSignatureSchemeAddress\",\n    inputs: [\n      {\n        name: \"schemeID\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"isSupportedScheme\",\n    inputs: [\n      {\n        name: \"schemeID\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"updateSignatureScheme\",\n    inputs: [\n      {\n        name: \"schemeID\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"schemeAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n] as const;\n\nexport class ISignatureSchemeAddressProvider__factory {\n  static readonly abi = _abi;\n  static createInterface(): ISignatureSchemeAddressProviderInterface {\n    return new Interface(_abi) as ISignatureSchemeAddressProviderInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): ISignatureSchemeAddressProvider {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as ISignatureSchemeAddressProvider;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  ISignatureSender,\n  ISignatureSenderInterface,\n} from \"../ISignatureSender\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"fulfilSignatureRequest\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"signature\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"getAllErroredRequestIds\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getAllFulfilledRequestIds\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getAllUnfulfilledRequestIds\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getCountOfUnfulfilledRequestIds\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getPublicKey\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[2]\",\n        internalType: \"uint256[2]\",\n      },\n      {\n        name: \"\",\n        type: \"uint256[2]\",\n        internalType: \"uint256[2]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getPublicKeyBytes\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRequest\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct TypesLib.SignatureRequest\",\n        components: [\n          {\n            name: \"message\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"messageHash\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"condition\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"schemeID\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"callback\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"signature\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"isFulfilled\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"hasErrored\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"isInFlight\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"requestSignature\",\n    inputs: [\n      {\n        name: \"schemeID\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"message\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"condition\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"retryCallback\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setSignatureSchemeAddressProvider\",\n    inputs: [\n      {\n        name: \"newSignatureSchemeAddressProvider\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"version\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n] as const;\n\nexport class ISignatureSender__factory {\n  static readonly abi = _abi;\n  static createInterface(): ISignatureSenderInterface {\n    return new Interface(_abi) as ISignatureSenderInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): ISignatureSender {\n    return new Contract(address, _abi, runner) as unknown as ISignatureSender;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { Initializable, InitializableInterface } from \"../Initializable\";\n\nconst _abi = [\n  {\n    type: \"event\",\n    name: \"Initialized\",\n    inputs: [\n      {\n        name: \"version\",\n        type: \"uint64\",\n        indexed: false,\n        internalType: \"uint64\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"InvalidInitialization\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"NotInitializing\",\n    inputs: [],\n  },\n] as const;\n\nexport class Initializable__factory {\n  static readonly abi = _abi;\n  static createInterface(): InitializableInterface {\n    return new Interface(_abi) as InitializableInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): Initializable {\n    return new Contract(address, _abi, runner) as unknown as Initializable;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type { JsonUtils, JsonUtilsInterface } from \"../JsonUtils\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"IS_SCRIPT\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6080604052600c805462ff00ff191662010001179055348015601f575f5ffd5b50608680602b5f395ff3fe6080604052348015600e575f5ffd5b50600436106026575f3560e01c8063f8ccbf4714602a575b5f5ffd5b600c54603c9062010000900460ff1681565b604051901515815260200160405180910390f3fea2646970667358221220c33e2c767319497d6d2d12c10fd7311f7e8dd08918e0282c53afcbcd8ffb05a364736f6c634300081c0033\";\n\ntype JsonUtilsConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: JsonUtilsConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class JsonUtils__factory extends ContractFactory {\n  constructor(...args: JsonUtilsConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      JsonUtils & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): JsonUtils__factory {\n    return super.connect(runner) as JsonUtils__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): JsonUtilsInterface {\n    return new Interface(_abi) as JsonUtilsInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): JsonUtils {\n    return new Contract(address, _abi, runner) as unknown as JsonUtils;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type {\n  MockRandomnessReceiver,\n  MockRandomnessReceiverInterface,\n} from \"../MockRandomnessReceiver\";\n\nconst _abi = [\n  {\n    type: \"constructor\",\n    inputs: [\n      {\n        name: \"randomnessSender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"randomness\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"randomnessSender\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"contract IRandomnessSender\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"receiveRandomness\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"randomness\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"requestId\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"rollDice\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60a060405234801561000f575f5ffd5b5060405161042638038061042683398101604081905261002e916100b0565b806001600160a01b03811661009e5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574207a65726f20616464726573732061732072616e646f60448201526b36b732b9b99039b2b73232b960a11b606482015260840160405180910390fd5b6001600160a01b0316608052506100dd565b5f602082840312156100c0575f5ffd5b81516001600160a01b03811681146100d6575f5ffd5b9392505050565b6080516103246101025f395f818160ad0152818161010c015261022601526103245ff3fe608060405234801561000f575f5ffd5b5060043610610063575f3560e01c8063431ac6571161004d578063431ac6571461008b578063837e7cc6146100a0578063df3fafe8146100a8575f5ffd5b80626d6cae146100675780633601318914610083575b5f5ffd5b61007060015481565b6040519081526020015b60405180910390f35b6100705f5481565b61009e6100993660046102b7565b6100f4565b005b61009e6101a6565b6100cf7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161007a565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4f6e6c792072616e646f6d6e65737353656e6465722063616e2063616c6c000060448201526064015b60405180910390fd5b6101a282826101b3565b5050565b6101ae610223565b600155565b816001541461021e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f52657175657374204944206d69736d6174636800000000000000000000000000604482015260640161018f565b5f5550565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8413b076040518163ffffffff1660e01b81526004016020604051808303815f875af115801561028e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b291906102d7565b905090565b5f5f604083850312156102c8575f5ffd5b50508035926020909101359150565b5f602082840312156102e7575f5ffd5b505191905056fea2646970667358221220e3dc079a3a90b9d3908b9f60d311360e8849c23b3a4dcef80857bcb15237404d64736f6c634300081c0033\";\n\ntype MockRandomnessReceiverConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: MockRandomnessReceiverConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class MockRandomnessReceiver__factory extends ContractFactory {\n  constructor(...args: MockRandomnessReceiverConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    randomnessSender: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(randomnessSender, overrides || {});\n  }\n  override deploy(\n    randomnessSender: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(randomnessSender, overrides || {}) as Promise<\n      MockRandomnessReceiver & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(\n    runner: ContractRunner | null\n  ): MockRandomnessReceiver__factory {\n    return super.connect(runner) as MockRandomnessReceiver__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): MockRandomnessReceiverInterface {\n    return new Interface(_abi) as MockRandomnessReceiverInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): MockRandomnessReceiver {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as MockRandomnessReceiver;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { Multicall, MulticallInterface } from \"../Multicall\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"multicall\",\n    inputs: [\n      {\n        name: \"data\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"results\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"error\",\n    name: \"AddressEmptyCode\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"FailedCall\",\n    inputs: [],\n  },\n] as const;\n\nexport class Multicall__factory {\n  static readonly abi = _abi;\n  static createInterface(): MulticallInterface {\n    return new Interface(_abi) as MulticallInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Multicall {\n    return new Contract(address, _abi, runner) as unknown as Multicall;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { Proxy, ProxyInterface } from \"../Proxy\";\n\nconst _abi = [\n  {\n    type: \"fallback\",\n    stateMutability: \"payable\",\n  },\n] as const;\n\nexport class Proxy__factory {\n  static readonly abi = _abi;\n  static createInterface(): ProxyInterface {\n    return new Interface(_abi) as ProxyInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Proxy {\n    return new Contract(address, _abi, runner) as unknown as Proxy;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type { Randomness, RandomnessInterface } from \"../Randomness\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"selectArrayIndices\",\n    inputs: [\n      {\n        name: \"lengthOfArray\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"countToDraw\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"randomBytes\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"verify\",\n    inputs: [\n      {\n        name: \"randomnessContract\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"signatureContract\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"signature\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"requester\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"DST\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"error\",\n    name: \"BNAddFailed\",\n    inputs: [\n      {\n        name: \"input\",\n        type: \"uint256[4]\",\n        internalType: \"uint256[4]\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidDSTLength\",\n    inputs: [\n      {\n        name: \"dst\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidFieldElement\",\n    inputs: [\n      {\n        name: \"x\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidInputs\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"MapToPointFailed\",\n    inputs: [\n      {\n        name: \"noSqrt\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ModExpFailed\",\n    inputs: [\n      {\n        name: \"base\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"exponent\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"modulus\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n] as const;\n\nconst _bytecode =\n  \"0x612895610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061004a575f3560e01c8063298f239c1461004e5780635dc8804a146100775780639e43d984146100a4575b5f5ffd5b61006161005c36600461223d565b6100c7565b60405161006e9190612266565b60405180910390f35b818015610082575f5ffd5b506100966100913660046122cc565b6101b0565b60405190815260200161006e565b6100b76100b236600461232c565b610225565b604051901515815260200161006e565b6060835f036100e957604080515f80825260208201909252905b5090506101a9565b5f8367ffffffffffffffff811115610103576101036123db565b60405190808252806020026020018201604052801561012c578160200160208202803683370190505b509050838511610166575f5b848110156100e1578082828151811061015357610153612408565b6020908102919091010152600101610138565b825f5b858110156101a35761017e818884600a61045b565b83828151811061019057610190612408565b6020908102919091010152600101610169565b50909150505b9392505050565b5f8173ffffffffffffffffffffffffffffffffffffffff1663f8413b076040518163ffffffff1660e01b81526004016020604051808303815f875af11580156101fb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061021f9190612435565b92915050565b5f5f5f8973ffffffffffffffffffffffffffffffffffffffff16632e3344526040518163ffffffff1660e01b8152600401608060405180830381865afa158015610271573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102959190612508565b915091505f60405180604001604052808481526020018381525090505f6103e887878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050508e73ffffffffffffffffffffffffffffffffffffffff1663775b839c60405180604001604052808e81526020018d73ffffffffffffffffffffffffffffffffffffffff168152506040518263ffffffff1660e01b815260040161038491908151815260209182015173ffffffffffffffffffffffffffffffffffffffff169181019190915260400190565b5f60405180830381865afa15801561039e573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103e3919081019061253b565b6105db565b90505f6104298c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506106c092505050565b90505f5f61043883868661075d565b915091508180156104465750805b97505050505050505098975050505050505050565b5f8315806104695750838510155b806104775750816001166001145b156104ae576040517ff34cfab600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104ff565b5f60038211600181146104d557600183151916156104d057600191505b6104f9565b829150600160028404015b828110156104f757915060028284048301046104e0565b505b50919050565b610508846104b3565b5f856002830a146001811461054257600183016fffffffffffffffffffffffffffffffff811115610537575f5ffd5b6002900a9150610546565b8691505b50610550816104b3565b915050604051608081016040528460408201528560608201525b8187068288045f5b868110156105c2578284527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81880301602085015260808420859006918501919091038490069190600101610572565b5083020196508587101561056a57509495945050505050565b604080518082019091525f80825260208201525f6105f984846108d0565b90505f61060c82825b6020020151610a1b565b90505f61061a836001610602565b90506106246121e3565b825181526020808401518282015282516040808401919091529083015160608301525f908460808460066107d05a03fa90508061069857816040517f128e3f0800000000000000000000000000000000000000000000000000000000815260040161068f91906125ed565b60405180910390fd5b6040805180820190915284518152602081018560016020020151905298975050505050505050565b604080518082019091525f8082526020820152815160401461073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c6964204731206279746573206c656e677468000000000000000000604482015260640161068f565b5060208181015160409283015183518085019094529083529082015290565b5f5f5f604051806101800160405280875f01518152602001876020015181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec81526020017f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d8152602001855f0151815260200185602001518152602001865f015160016002811061084057610840612408565b60200201518152602001865f01515f6002811061085f5761085f612408565b60200201518152602001866020015160016002811061088057610880612408565b6020020151815260200186602001515f600281106108a0576108a0612408565b6020020151905290506108b1612201565b6020816101808460086107d05a03fa9051151597909650945050505050565b6108d861221f565b5f6108e38484610ec3565b90505f5f5f5f6018850177ffffffffffffffffffffffffffffffffffffffffffffffff815116935060308601905077ffffffffffffffffffffffffffffffffffffffffffffffff81511694507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47857f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4778010000000000000000000000000000000000000000000000008709086048870151606088015177ffffffffffffffffffffffffffffffffffffffffffffffff908116975016945092507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47905084817801000000000000000000000000000000000000000000000000860908604080518082019091529283526020830152509695505050505050565b610a2361221f565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478210610a7f576040517fd53e94150000000000000000000000000000000000000000000000000000000081526004810183905260240161068f565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760047f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478586090990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478260010890507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47610b3d837f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4761264a565b60010891505f610b6f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478385096110ad565b90505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4778016789af3a83522eb353c98fc6b36d713d5d8d1cc5dffffffa7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47847f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47888b09090990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47610c43837f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4761264a565b7f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea30890505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47837f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea30890505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4786870990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4786830990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47807f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478485097f10216f7ba065e00de81ac1e7808072c9dd2b2385cd7b438469602eb24829a9bd0960010890505f5f610d7d610d78886110b7565b611129565b5f0b600103610de657868c52610d92876110b7565b9050610d9d816111d9565b60208e0191909152915081610de1576040517f396ec7710000000000000000000000000000000000000000000000000000000081526004810182905260240161068f565b610e62565b610df2610d78876110b7565b5f0b600103610e0757858c52610d92866110b7565b828c52610e13836110b7565b9050610e1e816111d9565b60208e0191909152915081610e62576040517f396ec7710000000000000000000000000000000000000000000000000000000081526004810182905260240161068f565b60208c0151610e7090611213565b610e798e611213565b14610eb35760208c0151610ead907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4761264a565b60208d01525b5050505050505050505050919050565b815160609060ff811115610f0557836040517f26e4f9ba00000000000000000000000000000000000000000000000000000000815260040161068f919061265d565b60408051608880825260c082019092525f916020820181803683370190505090505f81855f60605f8a88604051602001610f4597969594939291906126c7565b60405160208183030381529060405290505f818051906020012090505f8160018987604051602001610f7a94939291906127a2565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815282825280516020820120606080855260808501909352909350915f91602082018180368337019050509050600360015b8181101561107157858418610feb826001612814565b8d8b60405160200161100094939291906127a2565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830181028501810195909552805194810194909420939450600101610fd5565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016020908102820101919091529550505050505092915050565b5f61021f8261121f565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760037f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47847f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47868709090892915050565b5f5f61113483611977565b905061116160017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4761264a565b810361118f57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92915050565b801580159061119f575080600114155b1561021f576040517f396ec7710000000000000000000000000000000000000000000000000000000081526004810184905260240161068f565b5f5f6111e483611a9d565b9150827f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47838409149050915091565b5f61021f600283612827565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996505050838586099450838586099450838586099450838586099450838186099450508284850993508284850993508284850993508281850993508284850993508284850993508285850993508284850993508284850993508284850993508284850993508284850993508284850993508281850995945050505050565b6040805160c080825260e082019092525f918291906020820181803683370190505060208082018181526040830182905260608301829052608083018690527f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea360a08401527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760c0808501919091529293505f92839160055afa90505f519250806104f7576040517fc6daf7ab000000000000000000000000000000000000000000000000000000008152600481018590527f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea360248201527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47604482015260640161068f565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508584880996508587880996508587880996508587880996508587880996508587880996508581880996505050505050808283099392505050565b60405180608001604052806004906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b5f5f5f6060848603121561224f575f5ffd5b505081359360208301359350604090920135919050565b602080825282518282018190525f918401906040840190835b8181101561229d57835183526020938401939092019160010161227f565b509095945050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146122c9575f5ffd5b50565b5f602082840312156122dc575f5ffd5b81356101a9816122a8565b5f5f83601f8401126122f7575f5ffd5b50813567ffffffffffffffff81111561230e575f5ffd5b602083019150836020828501011115612325575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f60c0898b031215612343575f5ffd5b883561234e816122a8565b9750602089013561235e816122a8565b9650604089013567ffffffffffffffff811115612379575f5ffd5b6123858b828c016122e7565b9097509550506060890135935060808901356123a0816122a8565b925060a089013567ffffffffffffffff8111156123bb575f5ffd5b6123c78b828c016122e7565b999c989b5096995094979396929594505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215612445575f5ffd5b5051919050565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612493576124936123db565b604052919050565b5f82601f8301126124aa575f5ffd5b6040805190810167ffffffffffffffff811182821017156124cd576124cd6123db565b80604052508060408401858111156124e3575f5ffd5b845b818110156124fd5780518352602092830192016124e5565b509195945050505050565b5f5f60808385031215612519575f5ffd5b612523848461249b565b9150612532846040850161249b565b90509250929050565b5f6020828403121561254b575f5ffd5b815167ffffffffffffffff811115612561575f5ffd5b8201601f81018413612571575f5ffd5b805167ffffffffffffffff81111561258b5761258b6123db565b6125bc60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161244c565b8181528560208385010111156125d0575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b6080810181835f5b60048110156126145781518352602092830192909101906001016125f5565b50505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561021f5761021f61261d565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f81518060208401855e5f93019283525090919050565b5f6126db6126d5838b6126b0565b896126b0565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b1681527fff000000000000000000000000000000000000000000000000000000000000008760f81b1660018201527fff000000000000000000000000000000000000000000000000000000000000008660f81b16600282015261276660038201866126b0565b60f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016845250506001909101979650505050505050565b8481527fff000000000000000000000000000000000000000000000000000000000000008460f81b1660208201525f6127de60218301856126b0565b60f89390931b7fff0000000000000000000000000000000000000000000000000000000000000016835250506001019392505050565b8082018082111561021f5761021f61261d565b5f8261285a577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b50069056fea264697066735822122099b94b6b7f0aaa266eca0ffe259ea02de72857f81ceba7f3343ed2230bb5e3f464736f6c634300081c0033\";\n\ntype RandomnessConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: RandomnessConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class Randomness__factory extends ContractFactory {\n  constructor(...args: RandomnessConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      Randomness & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): Randomness__factory {\n    return super.connect(runner) as Randomness__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): RandomnessInterface {\n    return new Interface(_abi) as RandomnessInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Randomness {\n    return new Contract(address, _abi, runner) as unknown as Randomness;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  RandomnessReceiverBase,\n  RandomnessReceiverBaseInterface,\n} from \"../RandomnessReceiverBase\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"randomnessSender\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"contract IRandomnessSender\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"receiveRandomness\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"randomness\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n] as const;\n\nexport class RandomnessReceiverBase__factory {\n  static readonly abi = _abi;\n  static createInterface(): RandomnessReceiverBaseInterface {\n    return new Interface(_abi) as RandomnessReceiverBaseInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): RandomnessReceiverBase {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as RandomnessReceiverBase;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type {\n  RandomnessSender,\n  RandomnessSenderInterface,\n} from \"../RandomnessSender\";\n\nconst _abi = [\n  {\n    type: \"constructor\",\n    inputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"ADMIN_ROLE\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"DEFAULT_ADMIN_ROLE\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"SCHEME_ID\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getAllRequests\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple[]\",\n        internalType: \"struct TypesLib.RandomnessRequest[]\",\n        components: [\n          {\n            name: \"nonce\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"callback\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRequest\",\n    inputs: [\n      {\n        name: \"requestId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct TypesLib.RandomnessRequest\",\n        components: [\n          {\n            name: \"nonce\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"callback\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleAdmin\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleMember\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"index\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleMemberCount\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleMembers\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"grantRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"hasRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"initialize\",\n    inputs: [\n      {\n        name: \"_signatureSender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"owner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"isInFlight\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"messageFrom\",\n    inputs: [\n      {\n        name: \"r\",\n        type: \"tuple\",\n        internalType: \"struct TypesLib.RandomnessRequest\",\n        components: [\n          {\n            name: \"nonce\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"callback\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"nonce\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"proxiableUUID\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"receiveSignature\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"signature\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"renounceRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"callerConfirmation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"requestRandomness\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"revokeRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setSignatureSender\",\n    inputs: [\n      {\n        name: \"newSignatureSender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"signatureSender\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"contract ISignatureSender\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"supportsInterface\",\n    inputs: [\n      {\n        name: \"interfaceId\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"upgradeToAndCall\",\n    inputs: [\n      {\n        name: \"newImplementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"version\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"event\",\n    name: \"Initialized\",\n    inputs: [\n      {\n        name: \"version\",\n        type: \"uint64\",\n        indexed: false,\n        internalType: \"uint64\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RandomnessCallbackSuccess\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"randomness\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"signature\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RandomnessRequested\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"nonce\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"requester\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"requestedAt\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleAdminChanged\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleGranted\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleRevoked\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SignatureSenderUpdated\",\n    inputs: [\n      {\n        name: \"signatureSender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"Upgraded\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlBadConfirmation\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlUnauthorizedAccount\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"neededRole\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"AddressEmptyCode\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC1967InvalidImplementation\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC1967NonPayable\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"FailedCall\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidInitialization\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"NotInitializing\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"RandomnessCallbackFailed\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"UUPSUnauthorizedCallContext\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"UUPSUnsupportedProxiableUUID\",\n    inputs: [\n      {\n        name: \"slot\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60a0604052306080525f600155348015610017575f5ffd5b50610020610025565b6100d7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100755760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d45780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516125566100fd5f395f818161123701528181611260015261149d01526125565ff3fe608060405260043610610199575f3560e01c806391d14854116100dc578063c8db658211610087578063d547741f11610062578063d547741f146105eb578063f8413b071461060a578063f8fa0d661461061e578063fb1a002a1461063d575f5ffd5b8063c8db65821461058e578063ca15c873146105ad578063cd802c91146105cc575f5ffd5b8063ad3cb1cc116100b7578063ad3cb1cc146104b8578063affed0e014610500578063c58343ef14610515575f5ffd5b806391d1485414610409578063a217fddf14610479578063a3246ad31461048c575f5ffd5b806352d1902d11610147578063775b839c11610122578063775b839c146103335780637d468106146103525780638a1f165a146103a25780639010d07c146103ea575f5ffd5b806352d1902d1461029e57806354fd4d50146102b257806375b238fc14610300575f5ffd5b806336568abe1161017757806336568abe1461024d578063485cc9551461026c5780634f1ef2861461028b575f5ffd5b806301ffc9a71461019d578063248a9ca3146101d15780632f2ff15d1461022c575b5f5ffd5b3480156101a8575f5ffd5b506101bc6101b7366004611f2b565b61065e565b60405190151581526020015b60405180910390f35b3480156101dc575f5ffd5b5061021e6101eb366004611f6a565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101c8565b348015610237575f5ffd5b5061024b610246366004611fa9565b6106b9565b005b348015610258575f5ffd5b5061024b610267366004611fa9565b610702565b348015610277575f5ffd5b5061024b610286366004611fd3565b610760565b61024b610299366004612077565b610acd565b3480156102a9575f5ffd5b5061021e610aec565b3480156102bd575f5ffd5b5060408051808201909152600581527f302e302e3100000000000000000000000000000000000000000000000000000060208201525b6040516101c89190612186565b34801561030b575f5ffd5b5061021e7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b34801561033e575f5ffd5b506102f361034d366004612198565b610b1a565b34801561035d575f5ffd5b505f5461037d9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c8565b3480156103ad575f5ffd5b506102f36040518060400160405280600581526020017f424e32353400000000000000000000000000000000000000000000000000000081525081565b3480156103f5575f5ffd5b5061037d6104043660046121ec565b610b83565b348015610414575f5ffd5b506101bc610423366004611fa9565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b348015610484575f5ffd5b5061021e5f81565b348015610497575f5ffd5b506104ab6104a6366004611f6a565b610bc3565b6040516101c8919061220c565b3480156104c3575f5ffd5b506102f36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561050b575f5ffd5b5061021e60015481565b348015610520575f5ffd5b5061058161052f366004611f6a565b604080518082019091525f8082526020820152505f908152600260209081526040918290208251808401909352805483526001015473ffffffffffffffffffffffffffffffffffffffff169082015290565b6040516101c89190612264565b348015610599575f5ffd5b5061024b6105a8366004612291565b610c06565b3480156105b8575f5ffd5b5061021e6105c7366004611f6a565b610c91565b3480156105d7575f5ffd5b506101bc6105e6366004611f6a565b610cc8565b3480156105f6575f5ffd5b5061024b610605366004611fa9565b610d59565b348015610615575f5ffd5b5061021e610d9c565b348015610629575f5ffd5b5061024b610638366004612308565b610fbc565b348015610648575f5ffd5b50610651611051565b6040516101c89190612321565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f0000000000000000000000000000000000000000000000000000000014806106b357506106b3826110d1565b92915050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546106f281611167565b6106fc8383611174565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610751576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61075b82826111c9565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f811580156107aa5750825b90505f8267ffffffffffffffff1660011480156107c65750303b155b9050811580156107d4575080155b1561080b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561086c5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610874611215565b61087c611215565b6108a67fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177587611174565b610911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4772616e7420726f6c65206661696c656400000000000000000000000000000060448201526064015b60405180910390fd5b61091b5f87611174565b610981576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4772616e7420726f6c65206661696c65640000000000000000000000000000006044820152606401610908565b73ffffffffffffffffffffffffffffffffffffffff8716610a24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f43616e6e6f7420736574207a65726f2061646472657373206173207369676e6160448201527f747572652073656e6465720000000000000000000000000000000000000000006064820152608401610908565b5f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161790558315610ac45784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610ad561121f565b610ade82611323565b610ae8828261134c565b5050565b5f610af5611485565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b8051604051606091610b329160200190815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830152016040516020818303038152906040529050919050565b5f8281527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260408220610bbb90846114f4565b949350505050565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e823717059320006020819052604090912060609190610bff906114ff565b9392505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610c86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4f6e6c79207369676e617475726553656e6465722063616e2063616c6c0000006044820152606401610908565b61075b83838361150b565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260408220610bff9061177c565b5f80546040517fcd802c910000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff9091169063cd802c9190602401602060405180830381865afa158015610d35573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106b39190612383565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610d9281611167565b6106fc83836111c9565b5f6001805f828254610dae91906123cf565b90915550506040805180820190915260015481523360208201525f610dd282610b1a565b60408051602080820183525f8083525483518085018552600581527f424e3235340000000000000000000000000000000000000000000000000000009281019290925292517f95b8d073000000000000000000000000000000000000000000000000000000008152939450909273ffffffffffffffffffffffffffffffffffffffff909216916395b8d07391610e6e91869086906004016123e2565b6020604051808303815f875af1158015610e8a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eae9190612424565b5f818152600260208181526040808420885181558883018051600192830180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff9384161790915560038054808601825598528b517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b989097029788019690965590517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c9096018054909516951694909417909255915490514281529296503392909187917feee7195b6cee0fa7044c3af0b86fe2febb1d2703d71191f44052ba0d60ffda64910160405180910390a450505090565b610fe57fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611167565b5f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560405190917f229f6c3b095d683755a99ab458956747a8b7066c3dd42927d850631c34c238f191a250565b60606003805480602002602001604051908101604052809291908181526020015f905b828210156110c8575f84815260209081902060408051808201909152600285029091018054825260019081015473ffffffffffffffffffffffffffffffffffffffff16828401529083529092019101611074565b50505050905090565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806106b357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146106b3565b6111718133611785565b50565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000816111a1858561182b565b90508015610bbb575f8581526020839052604090206111c09085611949565b50949350505050565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000816111f6858561196a565b90508015610bbb575f8581526020839052604090206111c09085611a46565b61121d611a67565b565b3073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614806112ec57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166112d37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561121d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111717fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611167565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113d1575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526113ce91810190612424565b60015b61141f576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610908565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc811461147b576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401610908565b61075b8383611ace565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461121d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610bff8383611b30565b60605f610bff83611b56565b5f838152600260209081526040918290208251808401909352805480845260019091015473ffffffffffffffffffffffffffffffffffffffff16918301919091526115d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f526571756573742077697468207468617420726571756573744944206469642060448201527f6e6f7420657869737400000000000000000000000000000000000000000000006064820152608401610908565b5f83836040516115e992919061243b565b604051809103902090505f826020015173ffffffffffffffffffffffffffffffffffffffff1663431ac65760e01b8784604051602401611633929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516116bc919061244a565b5f604051808303815f865af19150503d805f81146116f5576040519150601f19603f3d011682016040523d82523d5f602084013e6116fa565b606091505b5050905080611738576040517f8f67472d00000000000000000000000000000000000000000000000000000000815260048101879052602401610908565b857fb74b3204a538cd8021662d42e794681ddc339924ef675b8fd11e9eaf6aa19eb583878760405161176c93929190612460565b60405180910390a2505050505050565b5f6106b3825490565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610ae8576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610908565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff16611940575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556118dc3390565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506106b3565b5f9150506106b3565b5f610bff8373ffffffffffffffffffffffffffffffffffffffff8416611baf565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff1615611940575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506106b3565b5f610bff8373ffffffffffffffffffffffffffffffffffffffff8416611bfb565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661121d576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ad782611cd5565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115611b285761075b8282611da3565b610ae8611e22565b5f825f018281548110611b4557611b456124b3565b905f5260205f200154905092915050565b6060815f01805480602002602001604051908101604052809291908181526020018280548015611ba357602002820191905f5260205f20905b815481526020019060010190808311611b8f575b50505050509050919050565b5f818152600183016020526040812054611bf457508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556106b3565b505f6106b3565b5f8181526001830160205260408120548015611940575f611c1d6001836124e0565b85549091505f90611c30906001906124e0565b9050808214611c8f575f865f018281548110611c4e57611c4e6124b3565b905f5260205f200154905080875f018481548110611c6e57611c6e6124b3565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080611ca057611ca06124f3565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506106b3565b8073ffffffffffffffffffffffffffffffffffffffff163b5f03611d3d576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610908565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60605f5f8473ffffffffffffffffffffffffffffffffffffffff1684604051611dcc919061244a565b5f60405180830381855af49150503d805f8114611e04576040519150601f19603f3d011682016040523d82523d5f602084013e611e09565b606091505b5091509150611e19858383611e5a565b95945050505050565b341561121d576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082611e6f57611e6a82611ee9565b610bff565b8151158015611e93575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611ee2576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610908565b5092915050565b805115611ef95780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60208284031215611f3b575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610bff575f5ffd5b5f60208284031215611f7a575f5ffd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611fa4575f5ffd5b919050565b5f5f60408385031215611fba575f5ffd5b82359150611fca60208401611f81565b90509250929050565b5f5f60408385031215611fe4575f5ffd5b611fed83611f81565b9150611fca60208401611f81565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561206f5761206f611ffb565b604052919050565b5f5f60408385031215612088575f5ffd5b61209183611f81565b9150602083013567ffffffffffffffff8111156120ac575f5ffd5b8301601f810185136120bc575f5ffd5b803567ffffffffffffffff8111156120d6576120d6611ffb565b61210760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612028565b81815286602083850101111561211b575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f610bff602083018461213a565b5f60408284031280156121a9575f5ffd5b506040805190810167ffffffffffffffff811182821017156121cd576121cd611ffb565b604052823581526121e060208401611f81565b60208201529392505050565b5f5f604083850312156121fd575f5ffd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b8181101561225957835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101612225565b509095945050505050565b8151815260208083015173ffffffffffffffffffffffffffffffffffffffff1690820152604081016106b3565b5f5f5f604084860312156122a3575f5ffd5b83359250602084013567ffffffffffffffff8111156122c0575f5ffd5b8401601f810186136122d0575f5ffd5b803567ffffffffffffffff8111156122e6575f5ffd5b8660208284010111156122f7575f5ffd5b939660209190910195509293505050565b5f60208284031215612318575f5ffd5b610bff82611f81565b602080825282518282018190525f918401906040840190835b818110156122595761236d8385518051825260209081015173ffffffffffffffffffffffffffffffffffffffff16910152565b602093909301926040929092019160010161233a565b5f60208284031215612393575f5ffd5b81518015158114610bff575f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156106b3576106b36123a2565b606081525f6123f4606083018661213a565b8281036020840152612406818661213a565b9050828103604084015261241a818561213a565b9695505050505050565b5f60208284031215612434575f5ffd5b5051919050565b818382375f9101908152919050565b5f82518060208501845e5f920191825250919050565b83815260406020820152816040820152818360608301375f818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b818103818111156106b3576106b36123a2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea2646970667358221220dceaab71410f9aca3092ce386ea2cd2c0a9afa36ac96d9d087ba45c3f73ba79264736f6c634300081c0033\";\n\ntype RandomnessSenderConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: RandomnessSenderConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class RandomnessSender__factory extends ContractFactory {\n  constructor(...args: RandomnessSenderConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      RandomnessSender & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): RandomnessSender__factory {\n    return super.connect(runner) as RandomnessSender__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): RandomnessSenderInterface {\n    return new Interface(_abi) as RandomnessSenderInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): RandomnessSender {\n    return new Contract(address, _abi, runner) as unknown as RandomnessSender;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { Script, ScriptInterface } from \"../Script\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"IS_SCRIPT\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n] as const;\n\nexport class Script__factory {\n  static readonly abi = _abi;\n  static createInterface(): ScriptInterface {\n    return new Interface(_abi) as ScriptInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Script {\n    return new Contract(address, _abi, runner) as unknown as Script;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  SignatureReceiverBase,\n  SignatureReceiverBaseInterface,\n} from \"../SignatureReceiverBase\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"receiveSignature\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"signature\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"signatureSender\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"contract ISignatureSender\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n] as const;\n\nexport class SignatureReceiverBase__factory {\n  static readonly abi = _abi;\n  static createInterface(): SignatureReceiverBaseInterface {\n    return new Interface(_abi) as SignatureReceiverBaseInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): SignatureReceiverBase {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as SignatureReceiverBase;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type {\n  SignatureSchemeAddressProvider,\n  SignatureSchemeAddressProviderInterface,\n} from \"../SignatureSchemeAddressProvider\";\n\nconst _abi = [\n  {\n    type: \"constructor\",\n    inputs: [\n      {\n        name: \"owner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"ADMIN_ROLE\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"DEFAULT_ADMIN_ROLE\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleAdmin\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getSignatureSchemeAddress\",\n    inputs: [\n      {\n        name: \"schemeID\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"grantRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"hasRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"isSupportedScheme\",\n    inputs: [\n      {\n        name: \"schemeID\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"renounceRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"callerConfirmation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"revokeRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"supportsInterface\",\n    inputs: [\n      {\n        name: \"interfaceId\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"updateSignatureScheme\",\n    inputs: [\n      {\n        name: \"schemeID\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"schemeAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"event\",\n    name: \"NewSignatureSchemeAddressAdded\",\n    inputs: [\n      {\n        name: \"schemeID\",\n        type: \"string\",\n        indexed: true,\n        internalType: \"string\",\n      },\n      {\n        name: \"schemeAddress\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"addedAt\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleAdminChanged\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleGranted\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleRevoked\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlBadConfirmation\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlUnauthorizedAccount\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"neededRole\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n] as const;\n\nconst _bytecode =\n  \"0x608060405234801561000f575f5ffd5b50604051610bda380380610bda83398101604081905261002e916101a7565b6001600160a01b03811661003f5750335b6100495f826100fe565b61008e5760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b60448201526064015b60405180910390fd5b6100b87fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775826100fe565b6100f85760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b6044820152606401610085565b506101d4565b5f828152602081815260408083206001600160a01b038516845290915281205460ff1661019e575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101563390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101a1565b505f5b92915050565b5f602082840312156101b7575f5ffd5b81516001600160a01b03811681146101cd575f5ffd5b9392505050565b6109f9806101e15f395ff3fe608060405234801561000f575f5ffd5b50600436106100c4575f3560e01c80635bb09cf81161007d578063a217fddf11610058578063a217fddf146101fd578063bab867da14610204578063d547741f14610217575f5ffd5b80635bb09cf81461015b57806375b238fc1461019357806391d14854146101ba575f5ffd5b80632f2ff15d116100ad5780632f2ff15d146101205780632fc9fa331461013557806336568abe14610148575f5ffd5b806301ffc9a7146100c8578063248a9ca3146100f0575b5f5ffd5b6100db6100d6366004610831565b61022a565b60405190151581526020015b60405180910390f35b6101126100fe366004610877565b5f9081526020819052604090206001015490565b6040519081526020016100e7565b61013361012e3660046108b6565b6102c2565b005b6100db610143366004610925565b6102ec565b6101336101563660046108b6565b610346565b61016e610169366004610925565b6103a4565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100e7565b6101127fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b6100db6101c83660046108b6565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101125f81565b610133610212366004610964565b6103e5565b6101336102253660046108b6565b6105c5565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102bc57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f828152602081905260409020600101546102dc816105e9565b6102e683836105f6565b50505050565b5f5f73ffffffffffffffffffffffffffffffffffffffff16600184846040516103169291906109b4565b9081526040519081900360200190205473ffffffffffffffffffffffffffffffffffffffff161415905092915050565b73ffffffffffffffffffffffffffffffffffffffff81163314610395576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61039f82826106ef565b505050565b5f600183836040516103b79291906109b4565b9081526040519081900360200190205473ffffffffffffffffffffffffffffffffffffffff16905092915050565b61040e7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756105e9565b73ffffffffffffffffffffffffffffffffffffffff811615801590610449575073ffffffffffffffffffffffffffffffffffffffff81163b15155b6104da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f496e76616c696420636f6e7472616374206164647265737320666f722073636860448201527f656d65416464726573730000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b80600184846040516104ed9291906109b4565b908152604051908190036020018120805473ffffffffffffffffffffffffffffffffffffffff939093167fffffffffffffffffffffffff00000000000000000000000000000000000000009093169290921790915560019061055290859085906109b4565b9081526040519081900360200181205473ffffffffffffffffffffffffffffffffffffffff169061058690859085906109b4565b604051908190038120428252907f0a1cd6a1e0a7b200d28ead555f3cee96e0d2def049535fbcfdc2926bc4cec5049060200160405180910390a3505050565b5f828152602081905260409020600101546105df816105e9565b6102e683836106ef565b6105f381336107a8565b50565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff166106e8575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556106863390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102bc565b505f6102bc565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16156106e8575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102bc565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661082d576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044016104d1565b5050565b5f60208284031215610841575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610870575f5ffd5b9392505050565b5f60208284031215610887575f5ffd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146108b1575f5ffd5b919050565b5f5f604083850312156108c7575f5ffd5b823591506108d76020840161088e565b90509250929050565b5f5f83601f8401126108f0575f5ffd5b50813567ffffffffffffffff811115610907575f5ffd5b60208301915083602082850101111561091e575f5ffd5b9250929050565b5f5f60208385031215610936575f5ffd5b823567ffffffffffffffff81111561094c575f5ffd5b610958858286016108e0565b90969095509350505050565b5f5f5f60408486031215610976575f5ffd5b833567ffffffffffffffff81111561098c575f5ffd5b610998868287016108e0565b90945092506109ab90506020850161088e565b90509250925092565b818382375f910190815291905056fea26469706673582212204365ebfe0316198161211e6648f602ef30b54b8310b64cd331285d5e76802ca464736f6c634300081c0033\";\n\ntype SignatureSchemeAddressProviderConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: SignatureSchemeAddressProviderConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class SignatureSchemeAddressProvider__factory extends ContractFactory {\n  constructor(...args: SignatureSchemeAddressProviderConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    owner: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(owner, overrides || {});\n  }\n  override deploy(\n    owner: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(owner, overrides || {}) as Promise<\n      SignatureSchemeAddressProvider & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(\n    runner: ContractRunner | null\n  ): SignatureSchemeAddressProvider__factory {\n    return super.connect(runner) as SignatureSchemeAddressProvider__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): SignatureSchemeAddressProviderInterface {\n    return new Interface(_abi) as SignatureSchemeAddressProviderInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): SignatureSchemeAddressProvider {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as SignatureSchemeAddressProvider;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type {\n  SignatureSender,\n  SignatureSenderInterface,\n} from \"../SignatureSender\";\n\nconst _abi = [\n  {\n    type: \"constructor\",\n    inputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"ADMIN_ROLE\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"DEFAULT_ADMIN_ROLE\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"fulfilSignatureRequest\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"signature\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"getAllErroredRequestIds\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getAllFulfilledRequestIds\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getAllUnfulfilledRequestIds\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getCountOfUnfulfilledRequestIds\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getPublicKey\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[2]\",\n        internalType: \"uint256[2]\",\n      },\n      {\n        name: \"\",\n        type: \"uint256[2]\",\n        internalType: \"uint256[2]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getPublicKeyBytes\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRequest\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct TypesLib.SignatureRequest\",\n        components: [\n          {\n            name: \"message\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"messageHash\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"condition\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"schemeID\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"callback\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"signature\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"isFulfilled\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleAdmin\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleMember\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"index\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleMemberCount\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleMembers\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"grantRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"hasErrored\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"hasRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"initialize\",\n    inputs: [\n      {\n        name: \"x\",\n        type: \"uint256[2]\",\n        internalType: \"uint256[2]\",\n      },\n      {\n        name: \"y\",\n        type: \"uint256[2]\",\n        internalType: \"uint256[2]\",\n      },\n      {\n        name: \"owner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"_signatureSchemeAddressProvider\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"isInFlight\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"lastRequestID\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"multicall\",\n    inputs: [\n      {\n        name: \"data\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"results\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"proxiableUUID\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"renounceRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"callerConfirmation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"requestSignature\",\n    inputs: [\n      {\n        name: \"schemeID\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"message\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"condition\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"requests\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"message\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"messageHash\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"condition\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"schemeID\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"callback\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"signature\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"isFulfilled\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"retryCallback\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"revokeRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setSignatureSchemeAddressProvider\",\n    inputs: [\n      {\n        name: \"newSignatureSchemeAddressProvider\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"signatureSchemeAddressProvider\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"contract ISignatureSchemeAddressProvider\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"supportsInterface\",\n    inputs: [\n      {\n        name: \"interfaceId\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"upgradeToAndCall\",\n    inputs: [\n      {\n        name: \"newImplementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"version\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"event\",\n    name: \"Initialized\",\n    inputs: [\n      {\n        name: \"version\",\n        type: \"uint64\",\n        indexed: false,\n        internalType: \"uint64\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleAdminChanged\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleGranted\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleRevoked\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SignatureCallbackFailed\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SignatureRequestFulfilled\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"signature\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SignatureRequested\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"callback\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"schemeID\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"message\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n      {\n        name: \"messageHashToSign\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n      {\n        name: \"condition\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n      {\n        name: \"requestedAt\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SignatureSchemeAddressProviderUpdated\",\n    inputs: [\n      {\n        name: \"newSignatureSchemeAddressProvider\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"Upgraded\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlBadConfirmation\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlUnauthorizedAccount\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"neededRole\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"AddressEmptyCode\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC1967InvalidImplementation\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC1967NonPayable\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"FailedCall\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidInitialization\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"NotInitializing\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"UUPSUnauthorizedCallContext\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"UUPSUnsupportedProxiableUUID\",\n    inputs: [\n      {\n        name: \"slot\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n] as const;\n\nconst _bytecode =\n  \"0x306080525f80805560e081815261010082905260a08181526101606040526101208381526101409390935260c0929092526001906100409082906002610124565b5060208201516100569060028084019190610124565b505050348015610064575f5ffd5b5061006d610072565b610176565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100c25760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101215780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b8260028101928215610152579160200282015b82811115610152578251825591602001919060010190610137565b5061015e929150610162565b5090565b5b8082111561015e575f8155600101610163565b6080516144ef61019c5f395f8181612b7101528181612b9a0152612dbb01526144ef5ff3fe6080604052600436106101f5575f3560e01c806375b238fc11610117578063acae9fee116100ac578063ca15c8731161007c578063d547741f11610062578063d547741f146106c0578063e63b5d58146106df578063e6b3ca71146106f3575f5ffd5b8063ca15c87314610682578063cd802c91146106a1575f5ffd5b8063acae9fee146105db578063ad3cb1cc146105ef578063b094728914610637578063c58343ef14610656575f5ffd5b806395b8d073116100e757806395b8d07314610551578063a217fddf14610570578063a3246ad314610583578063ac9650d8146105af575f5ffd5b806375b238fc1461043857806381d12c581461046b5780639010d07c1461049d57806391d14854146104e1575f5ffd5b80634b96e1661161018d578063571d70871161015d578063571d7087146103d25780635eab2b20146103e65780636f421ea914610405578063702ef38c14610419575f5ffd5b80634b96e1661461033c5780634f1ef2861461035d57806352d1902d1461037057806354fd4d5014610384575f5ffd5b80632e334452116101c85780632e334452146102c85780632f2ff15d146102ea57806336568abe1461030957806347c0318614610328575f5ffd5b80630138c60d146101f957806301ffc9a71461021a57806316cc9a981461024e578063248a9ca31461026d575b5f5ffd5b348015610204575f5ffd5b506102186102133660046137bd565b61071f565b005b348015610225575f5ffd5b506102396102343660046137d4565b610c74565b60405190151581526020015b60405180910390f35b348015610259575f5ffd5b50610218610268366004613834565b610ccf565b348015610278575f5ffd5b506102ba6102873660046137bd565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610245565b3480156102d3575f5ffd5b506102dc610d66565b604051610245929190613871565b3480156102f5575f5ffd5b5061021861030436600461388c565b610de1565b348015610314575f5ffd5b5061021861032336600461388c565b610e2a565b348015610333575f5ffd5b506102ba5f5481565b348015610347575f5ffd5b50610350610e83565b60405161024591906138ba565b61021861036b366004613981565b610e94565b34801561037b575f5ffd5b506102ba610eb3565b34801561038f575f5ffd5b5060408051808201909152600581527f302e302e3100000000000000000000000000000000000000000000000000000060208201525b6040516102459190613a3c565b3480156103dd575f5ffd5b50610350610ee1565b3480156103f1575f5ffd5b50610218610400366004613a93565b610eed565b348015610410575f5ffd5b5061035061163b565b348015610424575f5ffd5b50610218610433366004613b48565b611647565b348015610443575f5ffd5b506102ba7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b348015610476575f5ffd5b5061048a6104853660046137bd565b6119ee565b6040516102459796959493929190613b9f565b3480156104a8575f5ffd5b506104bc6104b7366004613c32565b611ce4565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610245565b3480156104ec575f5ffd5b506102396104fb36600461388c565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b34801561055c575f5ffd5b506102ba61056b366004613c52565b611d24565b34801561057b575f5ffd5b506102ba5f81565b34801561058e575f5ffd5b506105a261059d3660046137bd565b612429565b6040516102459190613cf1565b3480156105ba575f5ffd5b506105ce6105c9366004613d3e565b61246c565b6040516102459190613daf565b3480156105e6575f5ffd5b506103c5612552565b3480156105fa575f5ffd5b506103c56040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b348015610642575f5ffd5b506102396106513660046137bd565b6125cd565b348015610661575f5ffd5b506106756106703660046137bd565b6125d9565b6040516102459190613e30565b34801561068d575f5ffd5b506102ba61069c3660046137bd565b612951565b3480156106ac575f5ffd5b506102396106bb3660046137bd565b612988565b3480156106cb575f5ffd5b506102186106da36600461388c565b6129a5565b3480156106ea575f5ffd5b506102ba6129e8565b3480156106fe575f5ffd5b506006546104bc9073ffffffffffffffffffffffffffffffffffffffff1681565b610728816125cd565b6107b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4e6f20726571756573742077697468207370656369666965642072657175657360448201527f74494420686173206572726f726564000000000000000000000000000000000060648201526084015b60405180910390fd5b5f81815260056020526040808220815160e081019092528054829082906107df90613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461080b90613f01565b80156108565780601f1061082d57610100808354040283529160200191610856565b820191905f5260205f20905b81548152906001019060200180831161083957829003601f168201915b5050505050815260200160018201805461086f90613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461089b90613f01565b80156108e65780601f106108bd576101008083540402835291602001916108e6565b820191905f5260205f20905b8154815290600101906020018083116108c957829003601f168201915b505050505081526020016002820180546108ff90613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461092b90613f01565b80156109765780601f1061094d57610100808354040283529160200191610976565b820191905f5260205f20905b81548152906001019060200180831161095957829003601f168201915b5050505050815260200160038201805461098f90613f01565b80601f01602080910402602001604051908101604052809291908181526020018280546109bb90613f01565b8015610a065780601f106109dd57610100808354040283529160200191610a06565b820191905f5260205f20905b8154815290600101906020018083116109e957829003601f168201915b5050509183525050600482015473ffffffffffffffffffffffffffffffffffffffff166020820152600582018054604090920191610a4390613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6f90613f01565b8015610aba5780601f10610a9157610100808354040283529160200191610aba565b820191905f5260205f20905b815481529060010190602001808311610a9d57829003601f168201915b50505091835250506006919091015460ff161515602090910152608081015160a08201516040519293505f9273ffffffffffffffffffffffffffffffffffffffff909216917fc8db65820000000000000000000000000000000000000000000000000000000091610b3091879190602401613f52565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051610b9b9190613f81565b5f604051808303815f865af19150503d805f8114610bd4576040519150601f19603f3d011682016040523d82523d5f602084013e610bd9565b606091505b5050905080610c1a576040518381527fb447474448cd6fcec713160a7af96335b628994d6abcc074f215b856ccde31679060200160405180910390a1505050565b610c25600b846129f3565b50610c316007846129fe565b50827f9a03aa0053cbc9522f2f584b8e74ba5478cadd5f83b136eaf2d4338795b369558360a00151604051610c669190613a3c565b60405180910390a25b505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f000000000000000000000000000000000000000000000000000000001480610cc95750610cc982612a09565b92915050565b610cf87fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612a9f565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f7724bcb43a09ae6582affdee2f0ace931e26f2ffa8b5c334baf0a39e9dc03426905f90a250565b610d6e61374d565b610d7661374d565b604080518082019182905260019160039190839060029082845b815481526020019060010190808311610d90575050604080518082019182905294965085935060029250905082845b815481526020019060010190808311610dbf5750505050509050915091509091565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610e1a81612a9f565b610e248383612aac565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610e79576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c6f8282612b01565b6060610e8f6009612b4d565b905090565b610e9c612b59565b610ea582612c5f565b610eaf8282612c88565b5050565b5f610ebc612da3565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6060610e8f6007612b4d565b610f167fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612a9f565b610f1f83612988565b610fab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4e6f20726571756573742077697468207370656369666965642072657175657360448201527f744944000000000000000000000000000000000000000000000000000000000060648201526084016107b0565b5f83815260056020526040808220815160e08101909252805482908290610fd190613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054610ffd90613f01565b80156110485780601f1061101f57610100808354040283529160200191611048565b820191905f5260205f20905b81548152906001019060200180831161102b57829003601f168201915b5050505050815260200160018201805461106190613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461108d90613f01565b80156110d85780601f106110af576101008083540402835291602001916110d8565b820191905f5260205f20905b8154815290600101906020018083116110bb57829003601f168201915b505050505081526020016002820180546110f190613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461111d90613f01565b80156111685780601f1061113f57610100808354040283529160200191611168565b820191905f5260205f20905b81548152906001019060200180831161114b57829003601f168201915b5050505050815260200160038201805461118190613f01565b80601f01602080910402602001604051908101604052809291908181526020018280546111ad90613f01565b80156111f85780601f106111cf576101008083540402835291602001916111f8565b820191905f5260205f20905b8154815290600101906020018083116111db57829003601f168201915b5050509183525050600482015473ffffffffffffffffffffffffffffffffffffffff16602082015260058201805460409092019161123590613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461126190613f01565b80156112ac5780601f10611283576101008083540402835291602001916112ac565b820191905f5260205f20905b81548152906001019060200180831161128f57829003601f168201915b505050918352505060069182015460ff161515602090910152606082015190546040517f5bb09cf800000000000000000000000000000000000000000000000000000000815292935090915f9173ffffffffffffffffffffffffffffffffffffffff1690635bb09cf890611324908590600401613a3c565b602060405180830381865afa15801561133f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113639190613f8c565b90505f8190508073ffffffffffffffffffffffffffffffffffffffff1663f6e548e985602001518888611394612552565b6040518563ffffffff1660e01b81526004016113b39493929190613fd0565b602060405180830381865afa1580156113ce573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113f29190614014565b611458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f5369676e617475726520766572696669636174696f6e206661696c656400000060448201526064016107b0565b5f846080015173ffffffffffffffffffffffffffffffffffffffff1663c8db658260e01b89898960405160240161149193929190614033565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516114fc9190613f81565b5f604051808303815f865af19150503d805f8114611535576040519150601f19603f3d011682016040523d82523d5f602084013e61153a565b606091505b50505f8981526005602081905260409091209192500161155b878983614097565b505f88815260056020526040902060060180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556115a06009896129f3565b50806115ea576115b1600b896129fe565b506040518881527fb447474448cd6fcec713160a7af96335b628994d6abcc074f215b856ccde31679060200160405180910390a1611631565b6115f56007896129fe565b50877f9a03aa0053cbc9522f2f584b8e74ba5478cadd5f83b136eaf2d4338795b36955888860405161162892919061418f565b60405180910390a25b5050505050505050565b6060610e8f600b612b4d565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f811580156116915750825b90505f8267ffffffffffffffff1660011480156116ad5750303b155b9050811580156116bb575080155b156116f2576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156117535784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b61175b612e12565b611763612e12565b60408051808201909152898152602081018990526001611785818c600261376b565b50602082015161179b906002808401919061376b565b509050506117c97fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177588612aac565b61182f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4772616e7420726f6c65206661696c656400000000000000000000000000000060448201526064016107b0565b6118395f88612aac565b61189f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4772616e7420726f6c652072657665727473000000000000000000000000000060448201526064016107b0565b73ffffffffffffffffffffffffffffffffffffffff8616611942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f43616e6e6f7420736574207a65726f2061646472657373206173207369676e6160448201527f7475726520736368656d6520616464726573732070726f76696465720000000060648201526084016107b0565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff881617905583156119e35784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b60056020525f9081526040902080548190611a0890613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3490613f01565b8015611a7f5780601f10611a5657610100808354040283529160200191611a7f565b820191905f5260205f20905b815481529060010190602001808311611a6257829003601f168201915b505050505090806001018054611a9490613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac090613f01565b8015611b0b5780601f10611ae257610100808354040283529160200191611b0b565b820191905f5260205f20905b815481529060010190602001808311611aee57829003601f168201915b505050505090806002018054611b2090613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4c90613f01565b8015611b975780601f10611b6e57610100808354040283529160200191611b97565b820191905f5260205f20905b815481529060010190602001808311611b7a57829003601f168201915b505050505090806003018054611bac90613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054611bd890613f01565b8015611c235780601f10611bfa57610100808354040283529160200191611c23565b820191905f5260205f20905b815481529060010190602001808311611c0657829003601f168201915b5050506004840154600585018054949573ffffffffffffffffffffffffffffffffffffffff909216949193509150611c5a90613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054611c8690613f01565b8015611cd15780601f10611ca857610100808354040283529160200191611cd1565b820191905f5260205f20905b815481529060010190602001808311611cb457829003601f168201915b5050506006909301549192505060ff1687565b5f8281527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260408220611d1c9084612e1a565b949350505050565b5f60015f5f828254611d3691906141cf565b90915550506006546040517f2fc9fa3300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690632fc9fa3390611d93908a908a9060040161418f565b602060405180830381865afa158015611dae573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dd29190614014565b611e38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5369676e617475726520736368656d65206e6f7420737570706f72746564000060448201526064016107b0565b611e7f600161100087878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929493925050612e259050565b611f0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4d657373616765206661696c6564206c656e67746820626f756e64732063686560448201527f636b00000000000000000000000000000000000000000000000000000000000060648201526084016107b0565b611f515f61100085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929493925050612e259050565b611fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f436f6e646974696f6e206661696c6564206c656e67746820626f756e6473206360448201527f6865636b0000000000000000000000000000000000000000000000000000000060648201526084016107b0565b8180156120ae5761202184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612ed192505050565b156120ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f436f6e646974696f6e2062797465732063616e6e6f7420626520616c6c207a6560448201527f726f73000000000000000000000000000000000000000000000000000000000060648201526084016107b0565b6006546040517f5bb09cf80000000000000000000000000000000000000000000000000000000081525f9173ffffffffffffffffffffffffffffffffffffffff1690635bb09cf890612106908c908c9060040161418f565b602060405180830381865afa158015612121573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121459190613f8c565b6040517feae1e15b00000000000000000000000000000000000000000000000000000000815290915081905f9073ffffffffffffffffffffffffffffffffffffffff83169063eae1e15b906121a0908c908c9060040161418f565b5f60405180830381865afa1580156121ba573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526121e191908101906141e2565b604080516101006020601f8d01819004028201810190925260e081018b81529293509182918c908c90819085018382808284375f92019190915250505090825250602080820184905260408051601f8b0183900483028101830182528a8152920191908a908a90819084018382808284375f92019190915250505090825250604080516020601f8f018190048102820181019092528d815291810191908e908e90819084018382808284375f92018290525093855250503360208085019190915260408051808301825284815281860152606090940183905282548352600590525020815181906122d29082614257565b50602082015160018201906122e79082614257565b50604082015160028201906122fc9082614257565b50606082015160038201906123119082614257565b5060808201516004820180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117905560a082015160058201906123719082614257565b5060c09190910151600690910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790555f546123b9906009906129fe565b503373ffffffffffffffffffffffffffffffffffffffff165f547ff0a5ef4bc87d6534674b1469f4b31d03c6510d0f7ab353f3e53f9d1d87ead02b8d8d8d8d878e8e42604051612410989796959493929190614350565b60405180910390a350505f549998505050505050505050565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260409091206060919061246590612b4d565b9392505050565b604080515f8152602081019091526060908267ffffffffffffffff811115612496576124966138fc565b6040519080825280602002602001820160405280156124c957816020015b60608152602001906001900390816124b45790505b5091505f5b8381101561254a57612525308686848181106124ec576124ec6143c8565b90506020028101906124fe91906143f5565b8560405160200161251193929190614456565b604051602081830303815290604052612f34565b838281518110612537576125376143c8565b60209081029190910101526001016124ce565b505092915050565b6040805160808101808352606092610e8f9291600191839190820190839060029082845b81548152602001906001019080831161257657505050918352505060408051808201918290526020909201919060028481019182845b8154815260200190600101908083116125ac57505050505081525050612faa565b5f610cc9600b83613006565b61262f6040518060e00160405280606081526020016060815260200160608152602001606081526020015f73ffffffffffffffffffffffffffffffffffffffff168152602001606081526020015f151581525090565b5f8281526005602052604090819020815160e0810190925280548290829061265690613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461268290613f01565b80156126cd5780601f106126a4576101008083540402835291602001916126cd565b820191905f5260205f20905b8154815290600101906020018083116126b057829003601f168201915b505050505081526020016001820180546126e690613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461271290613f01565b801561275d5780601f106127345761010080835404028352916020019161275d565b820191905f5260205f20905b81548152906001019060200180831161274057829003601f168201915b5050505050815260200160028201805461277690613f01565b80601f01602080910402602001604051908101604052809291908181526020018280546127a290613f01565b80156127ed5780601f106127c4576101008083540402835291602001916127ed565b820191905f5260205f20905b8154815290600101906020018083116127d057829003601f168201915b5050505050815260200160038201805461280690613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461283290613f01565b801561287d5780601f106128545761010080835404028352916020019161287d565b820191905f5260205f20905b81548152906001019060200180831161286057829003601f168201915b5050509183525050600482015473ffffffffffffffffffffffffffffffffffffffff1660208201526005820180546040909201916128ba90613f01565b80601f01602080910402602001604051908101604052809291908181526020018280546128e690613f01565b80156129315780601f1061290857610100808354040283529160200191612931565b820191905f5260205f20905b81548152906001019060200180831161291457829003601f168201915b50505091835250506006919091015460ff16151560209091015292915050565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e823717059320006020819052604082206124659061301d565b5f612994600983613006565b80610cc95750610cc9600b83613006565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546129de81612a9f565b610e248383612b01565b5f610e8f600961301d565b5f6124658383613026565b5f6124658383613109565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610cc957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610cc9565b612aa98133613155565b50565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200081612ad985856131fb565b90508015611d1c575f858152602083905260409020612af89085613310565b50949350505050565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200081612b2e8585613331565b90508015611d1c575f858152602083905260409020612af8908561340d565b60605f6124658361342e565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480612c2657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612c0d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b15612c5d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b612aa97fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612a9f565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612cef575060408051601f3d908101601f19168201909252612cec91810190614475565b60015b612d3d576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016107b0565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612d99576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016107b0565b610c6f8383613487565b3073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612c5d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c5d6134e9565b5f6124658383613550565b5f81831115612eb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f496e76616c696420626f756e64733a206d696e4c656e6774682063616e6e6f7460448201527f2062652067726561746572207468616e206d61784c656e67746800000000000060648201526084016107b0565b8351838110801590612ec85750828111155b95945050505050565b5f805b8251811015612f2b57828181518110612eef57612eef6143c8565b01602001517fff000000000000000000000000000000000000000000000000000000000000001615612f2357505f92915050565b600101612ed4565b50600192915050565b60605f5f8473ffffffffffffffffffffffffffffffffffffffff1684604051612f5d9190613f81565b5f60405180830381855af49150503d805f8114612f95576040519150601f19603f3d011682016040523d82523d5f602084013e612f9a565b606091505b5091509150612ec8858383613576565b60408051608080825260a082019092526060915f91906020820181803683375050845180516020918201519682015180519083015192850191909152604084019690965260608301959095525060808101939093525090919050565b5f8181526001830160205260408120541515612465565b5f610cc9825490565b5f8181526001830160205260408120548015613100575f6130486001836143b5565b85549091505f9061305b906001906143b5565b90508082146130ba575f865f018281548110613079576130796143c8565b905f5260205f200154905080875f018481548110613099576130996143c8565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806130cb576130cb61448c565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610cc9565b5f915050610cc9565b5f81815260018301602052604081205461314e57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610cc9565b505f610cc9565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610eaf576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044016107b0565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff16613100575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556132ac3390565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610cc9565b5f6124658373ffffffffffffffffffffffffffffffffffffffff8416613109565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff1615613100575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610cc9565b5f6124658373ffffffffffffffffffffffffffffffffffffffff8416613026565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561347b57602002820191905f5260205f20905b815481526020019060010190808311613467575b50505050509050919050565b61349082613605565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156134e157610c6f8282612f34565b610eaf6136d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16612c5d576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f825f018281548110613565576135656143c8565b905f5260205f200154905092915050565b60608261358b576135868261370b565b612465565b81511580156135af575073ffffffffffffffffffffffffffffffffffffffff84163b155b156135fe576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016107b0565b5080612465565b8073ffffffffffffffffffffffffffffffffffffffff163b5f0361366d576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016107b0565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b3415612c5d576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80511561371b5780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052806002906020820280368337509192915050565b8260028101928215613799579160200282015b8281111561379957825182559160200191906001019061377e565b506137a59291506137a9565b5090565b5b808211156137a5575f81556001016137aa565b5f602082840312156137cd575f5ffd5b5035919050565b5f602082840312156137e4575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114612465575f5ffd5b73ffffffffffffffffffffffffffffffffffffffff81168114612aa9575f5ffd5b5f60208284031215613844575f5ffd5b813561246581613813565b805f5b6002811015610e24578151845260209384019390910190600101613852565b6080810161387f828561384f565b612465604083018461384f565b5f5f6040838503121561389d575f5ffd5b8235915060208301356138af81613813565b809150509250929050565b602080825282518282018190525f918401906040840190835b818110156138f15783518352602093840193909201916001016138d3565b509095945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613952576139526138fc565b604052919050565b5f67ffffffffffffffff821115613973576139736138fc565b50601f01601f191660200190565b5f5f60408385031215613992575f5ffd5b823561399d81613813565b9150602083013567ffffffffffffffff8111156139b8575f5ffd5b8301601f810185136139c8575f5ffd5b80356139db6139d68261395a565b613929565b8181528660208385010111156139ef575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6124656020830184613a0e565b5f5f83601f840112613a5e575f5ffd5b50813567ffffffffffffffff811115613a75575f5ffd5b602083019150836020828501011115613a8c575f5ffd5b9250929050565b5f5f5f60408486031215613aa5575f5ffd5b83359250602084013567ffffffffffffffff811115613ac2575f5ffd5b613ace86828701613a4e565b9497909650939450505050565b5f82601f830112613aea575f5ffd5b6040805190810167ffffffffffffffff81118282101715613b0d57613b0d6138fc565b8060405250806040840185811115613b23575f5ffd5b845b81811015613b3d578035835260209283019201613b25565b509195945050505050565b5f5f5f5f60c08587031215613b5b575f5ffd5b613b658686613adb565b9350613b748660408701613adb565b92506080850135613b8481613813565b915060a0850135613b9481613813565b939692955090935050565b60e081525f613bb160e083018a613a0e565b8281036020840152613bc3818a613a0e565b90508281036040840152613bd78189613a0e565b90508281036060840152613beb8188613a0e565b905073ffffffffffffffffffffffffffffffffffffffff8616608084015282810360a0840152613c1b8186613a0e565b91505082151560c083015298975050505050505050565b5f5f60408385031215613c43575f5ffd5b50508035926020909101359150565b5f5f5f5f5f5f60608789031215613c67575f5ffd5b863567ffffffffffffffff811115613c7d575f5ffd5b613c8989828a01613a4e565b909750955050602087013567ffffffffffffffff811115613ca8575f5ffd5b613cb489828a01613a4e565b909550935050604087013567ffffffffffffffff811115613cd3575f5ffd5b613cdf89828a01613a4e565b979a9699509497509295939492505050565b602080825282518282018190525f918401906040840190835b818110156138f157835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101613d0a565b5f5f60208385031215613d4f575f5ffd5b823567ffffffffffffffff811115613d65575f5ffd5b8301601f81018513613d75575f5ffd5b803567ffffffffffffffff811115613d8b575f5ffd5b8560208260051b8401011115613d9f575f5ffd5b6020919091019590945092505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015613e24577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452613e0f858351613a0e565b94506020938401939190910190600101613dd5565b50929695505050505050565b602081525f825160e06020840152613e4c610100840182613a0e565b90506020840151601f19848303016040850152613e698282613a0e565b9150506040840151601f19848303016060850152613e878282613a0e565b9150506060840151601f19848303016080850152613ea58282613a0e565b91505073ffffffffffffffffffffffffffffffffffffffff60808501511660a084015260a0840151601f198483030160c0850152613ee38282613a0e565b91505060c0840151613ef960e085018215159052565b509392505050565b600181811c90821680613f1557607f821691505b602082108103613f4c577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b828152604060208201525f611d1c6040830184613a0e565b5f81518060208401855e5f93019283525090919050565b5f6124658284613f6a565b5f60208284031215613f9c575f5ffd5b815161246581613813565b81835281816020850137505f602082840101525f6020601f19601f840116840101905092915050565b606081525f613fe26060830187613a0e565b8281036020840152613ff5818688613fa7565b905082810360408401526140098185613a0e565b979650505050505050565b5f60208284031215614024575f5ffd5b81518015158114612465575f5ffd5b838152604060208201525f612ec8604083018486613fa7565b601f821115610c6f57805f5260205f20601f840160051c810160208510156140715750805b601f840160051c820191505b81811015614090575f815560010161407d565b5050505050565b67ffffffffffffffff8311156140af576140af6138fc565b6140c3836140bd8354613f01565b8361404c565b5f601f841160018114614113575f85156140dd5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355614090565b5f83815260208120601f198716915b828110156141425786850135825560209485019460019092019101614122565b508682101561417d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b602081525f611d1c602083018486613fa7565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115610cc957610cc96141a2565b5f602082840312156141f2575f5ffd5b815167ffffffffffffffff811115614208575f5ffd5b8201601f81018413614218575f5ffd5b80516142266139d68261395a565b81815285602083850101111561423a575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b815167ffffffffffffffff811115614271576142716138fc565b6142858161427f8454613f01565b8461404c565b6020601f8211600181146142d6575f83156142a05750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455614090565b5f84815260208120601f198516915b8281101561430557878501518255602094850194600190920191016142e5565b508482101561434157868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b60a081525f61436360a083018a8c613fa7565b828103602084015261437681898b613fa7565b9050828103604084015261438a8188613a0e565b9050828103606084015261439f818688613fa7565b9150508260808301529998505050505050505050565b81810381811115610cc957610cc96141a2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614428575f5ffd5b83018035915067ffffffffffffffff821115614442575f5ffd5b602001915036819003821315613a8c575f5ffd5b828482375f8382015f815261446b8185613f6a565b9695505050505050565b5f60208284031215614485575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea26469706673582212207f33e7672e5328ae7dfef406ddca56e21c29c4c4d46bb1f9d05ba19afd9c928264736f6c634300081c0033\";\n\ntype SignatureSenderConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: SignatureSenderConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class SignatureSender__factory extends ContractFactory {\n  constructor(...args: SignatureSenderConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      SignatureSender & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): SignatureSender__factory {\n    return super.connect(runner) as SignatureSender__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): SignatureSenderInterface {\n    return new Interface(_abi) as SignatureSenderInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): SignatureSender {\n    return new Contract(address, _abi, runner) as unknown as SignatureSender;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { StdAssertions, StdAssertionsInterface } from \"../StdAssertions\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"failed\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"event\",\n    name: \"log\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_address\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"uint256[]\",\n        indexed: false,\n        internalType: \"uint256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"int256[]\",\n        indexed: false,\n        internalType: \"int256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"address[]\",\n        indexed: false,\n        internalType: \"address[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_bytes\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_bytes32\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_int\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_address\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256[]\",\n        indexed: false,\n        internalType: \"uint256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256[]\",\n        indexed: false,\n        internalType: \"int256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"address[]\",\n        indexed: false,\n        internalType: \"address[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_bytes\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_bytes32\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_decimal_int\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_decimal_uint\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_int\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_string\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_uint\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_string\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_uint\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"logs\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n] as const;\n\nexport class StdAssertions__factory {\n  static readonly abi = _abi;\n  static createInterface(): StdAssertionsInterface {\n    return new Interface(_abi) as StdAssertionsInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): StdAssertions {\n    return new Contract(address, _abi, runner) as unknown as StdAssertions;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { StdInvariant, StdInvariantInterface } from \"../StdInvariant\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"excludeArtifacts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedArtifacts_\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeContracts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedContracts_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzSelector[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeSenders\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedSenders_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetArtifactSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedArtifactSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzArtifactSelector[]\",\n        components: [\n          {\n            name: \"artifact\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetArtifacts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedArtifacts_\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetContracts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedContracts_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetInterfaces\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedInterfaces_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzInterface[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"artifacts\",\n            type: \"string[]\",\n            internalType: \"string[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzSelector[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetSenders\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedSenders_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n] as const;\n\nexport class StdInvariant__factory {\n  static readonly abi = _abi;\n  static createInterface(): StdInvariantInterface {\n    return new Interface(_abi) as StdInvariantInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): StdInvariant {\n    return new Contract(address, _abi, runner) as unknown as StdInvariant;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { Test, TestInterface } from \"../Test\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"IS_TEST\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeArtifacts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedArtifacts_\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeContracts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedContracts_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzSelector[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeSenders\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedSenders_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"failed\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetArtifactSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedArtifactSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzArtifactSelector[]\",\n        components: [\n          {\n            name: \"artifact\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetArtifacts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedArtifacts_\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetContracts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedContracts_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetInterfaces\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedInterfaces_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzInterface[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"artifacts\",\n            type: \"string[]\",\n            internalType: \"string[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzSelector[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetSenders\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedSenders_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"event\",\n    name: \"log\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_address\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"uint256[]\",\n        indexed: false,\n        internalType: \"uint256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"int256[]\",\n        indexed: false,\n        internalType: \"int256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"address[]\",\n        indexed: false,\n        internalType: \"address[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_bytes\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_bytes32\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_int\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_address\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256[]\",\n        indexed: false,\n        internalType: \"uint256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256[]\",\n        indexed: false,\n        internalType: \"int256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"address[]\",\n        indexed: false,\n        internalType: \"address[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_bytes\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_bytes32\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_decimal_int\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_decimal_uint\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_int\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_string\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_uint\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_string\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_uint\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"logs\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n] as const;\n\nexport class Test__factory {\n  static readonly abi = _abi;\n  static createInterface(): TestInterface {\n    return new Interface(_abi) as TestInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Test {\n    return new Contract(address, _abi, runner) as unknown as Test;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  BytesLike,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type { UUPSProxy, UUPSProxyInterface } from \"../UUPSProxy\";\n\nconst _abi = [\n  {\n    type: \"constructor\",\n    inputs: [\n      {\n        name: \"_implementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"_data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"fallback\",\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"getImplementation\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"event\",\n    name: \"Upgraded\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AddressEmptyCode\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC1967InvalidImplementation\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC1967NonPayable\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"FailedCall\",\n    inputs: [],\n  },\n] as const;\n\nconst _bytecode =\n  \"0x608060405234801561000f575f5ffd5b5060405161044638038061044683398101604081905261002e9161024c565b818161003a8282610043565b50505050610331565b61004c826100a1565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561009557610090828261011c565b505050565b61009d61018f565b5050565b806001600160a01b03163b5f036100db57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051610138919061031b565b5f60405180830381855af49150503d805f8114610170576040519150601f19603f3d011682016040523d82523d5f602084013e610175565b606091505b5090925090506101868583836101b0565b95945050505050565b34156101ae5760405163b398979f60e01b815260040160405180910390fd5b565b6060826101c5576101c08261020f565b610208565b81511580156101dc57506001600160a01b0384163b155b1561020557604051639996b31560e01b81526001600160a01b03851660048201526024016100d2565b50805b9392505050565b80511561021f5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561025d575f5ffd5b82516001600160a01b0381168114610273575f5ffd5b60208401519092506001600160401b0381111561028e575f5ffd5b8301601f8101851361029e575f5ffd5b80516001600160401b038111156102b7576102b7610238565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102e5576102e5610238565b6040528181528282016020018710156102fc575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b6101088061033e5f395ff3fe608060405260043610601b575f3560e01c8063aaf10f42146023575b6021605d565b005b348015602d575f5ffd5b506034606b565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b606960656077565b60b5565b565b5f60726077565b905090565b5f60727f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b365f5f375f5f365f845af43d5f5f3e80801560ce573d5ff35b3d5ffdfea26469706673582212203a14936dfa35a4f93d2dbb66496c5b5d61ba92112a94605bb4b8c917080600b764736f6c634300081c0033\";\n\ntype UUPSProxyConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: UUPSProxyConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class UUPSProxy__factory extends ContractFactory {\n  constructor(...args: UUPSProxyConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    _implementation: AddressLike,\n    _data: BytesLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(_implementation, _data, overrides || {});\n  }\n  override deploy(\n    _implementation: AddressLike,\n    _data: BytesLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(_implementation, _data, overrides || {}) as Promise<\n      UUPSProxy & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): UUPSProxy__factory {\n    return super.connect(runner) as UUPSProxy__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): UUPSProxyInterface {\n    return new Interface(_abi) as UUPSProxyInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): UUPSProxy {\n    return new Contract(address, _abi, runner) as unknown as UUPSProxy;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  UUPSUpgradeable,\n  UUPSUpgradeableInterface,\n} from \"../UUPSUpgradeable\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"proxiableUUID\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"upgradeToAndCall\",\n    inputs: [\n      {\n        name: \"newImplementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"event\",\n    name: \"Initialized\",\n    inputs: [\n      {\n        name: \"version\",\n        type: \"uint64\",\n        indexed: false,\n        internalType: \"uint64\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"Upgraded\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AddressEmptyCode\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC1967InvalidImplementation\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC1967NonPayable\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"FailedCall\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidInitialization\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"NotInitializing\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"UUPSUnauthorizedCallContext\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"UUPSUnsupportedProxiableUUID\",\n    inputs: [\n      {\n        name: \"slot\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n] as const;\n\nexport class UUPSUpgradeable__factory {\n  static readonly abi = _abi;\n  static createInterface(): UUPSUpgradeableInterface {\n    return new Interface(_abi) as UUPSUpgradeableInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): UUPSUpgradeable {\n    return new Contract(address, _abi, runner) as unknown as UUPSUpgradeable;\n  }\n}\n"],
  "mappings": "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",
  "names": ["u8a", "u32", "bytes", "utf8ToBytes", "toBytes", "Hash", "toStr", "wrapConstructor", "wrapXOFConstructorWithOpts", "randomBytes", "equalBytes", "utf8ToBytes", "_0n", "_1n", "_2n", "bytes", "n", "b", "gen", "_0n", "_1n", "_2n", "b", "number", "n", "n2", "isLE", "bytes", "b", "_0n", "_1n", "n", "mask", "wbits", "b", "_0n", "_1n", "_2n", "toBytes", "bytes", "n", "a", "number", "Signature", "randomBytes", "tv5", "c1", "c2", "_0n", "_1n", "_2n", "Signature", "msg", "_0n", "_1n", "_2n", "b", "n", "b2", "number", "n", "b", "bytes", "hash", "exists", "output", "assert", "U32_MASK64", "_32n", "fromBig", "n", "split", "rotlSH", "rotlSL", "rotlBH", "rotlBL", "SHA3_PI", "SHA3_ROTL", "_SHA3_IOTA", "_0n", "_1n", "_2n", "_7n", "_256n", "_0x71n", "SHA3_IOTA_H", "SHA3_IOTA_L", "rotlH", "rotlL", "keccakP", "Keccak", "bytes", "gen", "genShake", "mod", "_1n", "_2n", "n", "num", "Fp", "bytes", "exports", "bytes", "bytes", "bytes", "mask", "bytes", "output", "bytes", "length", "args", "_names", "bytes", "_data", "_a", "n", "b", "n", "bytes", "_data", "BN_0", "BN_0", "BN_0", "BN_1", "b", "_offset", "throwError", "_guard", "result", "value", "type", "indexed", "name", "_a", "inputs", "bytes", "PanicReasons", "b", "bytes", "_data", "value", "BN_0", "b", "BN_0", "blockNumber", "receipt", "iface", "_iface", "BN_0", "iface", "internal", "fragment", "t", "listener", "passProperties", "addr", "target", "code", "iface", "output", "b", "iface", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_abi", "_abi", "_abi", "_abi", "_abi", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_abi", "_abi", "_abi", "_bytecode", "isSuperArgs", "_data", "_abi", "_bytecode", "isSuperArgs", "_abi", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_abi", "_abi", "_abi", "_abi", "_abi", "_abi", "_abi", "_abi", "_abi", "_abi", "_abi", "_abi", "_abi", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_abi", "_abi", "_bytecode", "isSuperArgs", "_abi", "_abi", "_bytecode", "isSuperArgs", "_abi", "_abi", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_abi", "_abi", "_abi", "_bytecode", "isSuperArgs", "_data", "_abi"]
}
